From 40deb5e563d151c9a176bced8bf5316f5ec8932c Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 19 May 2017 12:14:53 +0000 Subject: [PATCH 001/134] Initial setup of the repo --- .gitignore | 0 sources | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 .gitignore create mode 100644 sources diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/sources b/sources new file mode 100644 index 0000000..e69de29 From d8e21199a3b5df83587a2562aa0bcb1869865013 Mon Sep 17 00:00:00 2001 From: Germano Massullo Date: Fri, 19 May 2017 14:39:57 +0200 Subject: [PATCH 002/134] first commit --- .gitignore | 1 + keepassxc.spec | 113 +++++++++++++++++++++++++++++++++++++++++++++++++ sources | 1 + 3 files changed, 115 insertions(+) create mode 100644 keepassxc.spec diff --git a/.gitignore b/.gitignore index e69de29..35a987f 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1 @@ +/keepassxc-2.1.4-src.tar.xz diff --git a/keepassxc.spec b/keepassxc.spec new file mode 100644 index 0000000..4b03745 --- /dev/null +++ b/keepassxc.spec @@ -0,0 +1,113 @@ +Name: keepassxc +Version: 2.1.4 +Release: 1%{?dist} +Summary: Cross-platform password manager +License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain +URL: http://www.keepassxc.org/ +Source0: https://github.com/keepassxreboot/keepassxc/releases/download/%{version}/keepassxc-%{version}-src.tar.xz + +BuildRequires: cmake +BuildRequires: desktop-file-utils +BuildRequires: qt5-qtbase-devel >= 5.2 +BuildRequires: qt5-qttools-devel >= 5.2 +BuildRequires: libgcrypt-devel >= 1.6 +BuildRequires: libmicrohttpd-devel +BuildRequires: libXi-devel +BuildRequires: libXtst-devel +BuildRequires: qt5-qtx11extras-devel +BuildRequires: zlib-devel + +%description +KeePassXC is a community fork of KeePassX +KeePassXC is an application for people with extremely high demands on secure +personal data management. +KeePassXC saves many different information e.g. user names, passwords, urls, +attachemts and comments in one single database. For a better management +user-defined titles and icons can be specified for each single entry. +Furthermore the entries are sorted in groups, which are customizable as well. +The integrated search function allows to search in a single group or the +complete database. +KeePassXC offers a little utility for secure password generation. The password +generator is very customizable, fast and easy to use. Especially someone who +generates passwords frequently will appreciate this feature. +The complete database is always encrypted either with AES (alias Rijndael) or +Twofish encryption algorithm using a 256 bit key. Therefore the saved +information can be considered as quite safe. + + + +%prep +%setup -n %{name}-%{version} + +%build +mkdir build +cd build + +%cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_VERBOSE_MAKEFILE=OFF \ + -DWITH_TESTS=OFF \ + -DWITH_XC_HTTP=ON \ + -DWITH_XC_AUTOTYPE=ON \ + -DWITH_XC_YUBIKEY=ON \ + -DCMAKE_BUILD_TYPE=Release + +make %{?_smp_mflags} + +%install +cd build +make install DESTDIR=%{buildroot} + +desktop-file-install \ + --dir %{buildroot}%{_datadir}/applications \ + --delete-original \ + --add-mime-type application/x-keepassxc \ + %{buildroot}%{_datadir}/applications/%{name}.desktop + +# Associate KDB* files +cat > x-keepassxc.desktop << EOF +[Desktop Entry] +Comment= +Hidden=false +Icon=keepassxc.png +MimeType=application/x-keepassxc +Patterns=*.kdb;*.KDB;*.kdbx;*.KDBX* +Type=MimeType +EOF +install -D -m 644 -p x-keepassxc.desktop \ + %{buildroot}%{_datadir}/mimelnk/application/x-keepassxc.desktop + +%find_lang keepassx --with-qt + +%check +ctest -V %{?_smp_mflags} + +%post +touch --no-create %{_datadir}/icons/hicolor &>/dev/null || : +update-desktop-database &> /dev/null ||: + +%postun +if [ $1 -eq 0 ] ; then + touch --no-create %{_datadir}/icons/hicolor &>/dev/null + gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : +fi +update-desktop-database &> /dev/null ||: + +%posttrans +gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : +desktop-file-validate %{_datadir}/applications/keepassxc.desktop &> /dev/null || : + +%files +%doc README.md +%license COPYING LICENSE* +%{_bindir}/keepassxc +%{_datadir}/keepassxc +%{_datadir}/applications/*.desktop +%{_datadir}/mimelnk +%{_datadir}/mime/packages/*.xml +%{_datadir}/icons/hicolor/*/*/*keepassxc* +%{_libdir}/%{name} + +%changelog +* Sun May 14 2017 Germano Massullo - 2.1.4-1 +- First release on Fedora repository diff --git a/sources b/sources index e69de29..4139aaa 100644 --- a/sources +++ b/sources @@ -0,0 +1 @@ +SHA512 (keepassxc-2.1.4-src.tar.xz) = b5cd69c26ec394c2ea6e68a9b91017ba8b681d0205c8127ebd8a8dbfcc0b2fffb674637236249fe0eee629102b3b97014e0708e26ec63800ed408276a14d6bbf From 23f02e1189bf5d11aa2680b57e8096e93de3c5f6 Mon Sep 17 00:00:00 2001 From: Germano Massullo Date: Fri, 19 May 2017 18:22:51 +0200 Subject: [PATCH 003/134] first commit --- keepassxc.spec | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/keepassxc.spec b/keepassxc.spec index 4b03745..0cf1f95 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -1,6 +1,6 @@ Name: keepassxc Version: 2.1.4 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain URL: http://www.keepassxc.org/ @@ -49,7 +49,7 @@ cd build -DWITH_TESTS=OFF \ -DWITH_XC_HTTP=ON \ -DWITH_XC_AUTOTYPE=ON \ - -DWITH_XC_YUBIKEY=ON \ + -DWITH_XC_YUBIKEY=OFF \ -DCMAKE_BUILD_TYPE=Release make %{?_smp_mflags} @@ -109,5 +109,8 @@ desktop-file-validate %{_datadir}/applications/keepassxc.desktop &> /dev/null || %{_libdir}/%{name} %changelog +* Fri May 19 2017 Caterpillar - 2.1.4-2 +- Disabled Yubikey support. It will be re-enabled on 2.2.0 release + * Sun May 14 2017 Germano Massullo - 2.1.4-1 - First release on Fedora repository From df10cac5957db54b28d168263d35ab19c7482128 Mon Sep 17 00:00:00 2001 From: Germano Massullo Date: Mon, 26 Jun 2017 13:12:03 +0200 Subject: [PATCH 004/134] 2.2.0 release --- .gitignore | 1 + keepassxc.spec | 11 ++++++++--- sources | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 35a987f..cdf9bf4 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /keepassxc-2.1.4-src.tar.xz +/keepassxc-2.2.0-src.tar.xz diff --git a/keepassxc.spec b/keepassxc.spec index 0cf1f95..17b81e8 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -1,6 +1,6 @@ Name: keepassxc -Version: 2.1.4 -Release: 2%{?dist} +Version: 2.2.0 +Release: 1%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain URL: http://www.keepassxc.org/ @@ -101,6 +101,7 @@ desktop-file-validate %{_datadir}/applications/keepassxc.desktop &> /dev/null || %doc README.md %license COPYING LICENSE* %{_bindir}/keepassxc +%{_bindir}/keepassxc-cli %{_datadir}/keepassxc %{_datadir}/applications/*.desktop %{_datadir}/mimelnk @@ -109,7 +110,11 @@ desktop-file-validate %{_datadir}/applications/keepassxc.desktop &> /dev/null || %{_libdir}/%{name} %changelog -* Fri May 19 2017 Caterpillar - 2.1.4-2 +* Mon Jun 26 2017 Germano Massullo - 2.2.0-1 +- 2.2.0 release +- added %{_bindir}/keepassxc-cli + +* Fri May 19 2017 Germano Massullo - 2.1.4-2 - Disabled Yubikey support. It will be re-enabled on 2.2.0 release * Sun May 14 2017 Germano Massullo - 2.1.4-1 diff --git a/sources b/sources index 4139aaa..ce976fb 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (keepassxc-2.1.4-src.tar.xz) = b5cd69c26ec394c2ea6e68a9b91017ba8b681d0205c8127ebd8a8dbfcc0b2fffb674637236249fe0eee629102b3b97014e0708e26ec63800ed408276a14d6bbf +SHA512 (keepassxc-2.2.0-src.tar.xz) = d27abf4edc9efffeaeb6c43a85551fed6f68f888aef42a59ff8cc51e5d4a5029402587b022c2b089182e2b11834aecf84bf1f3d4bb6804705954c84f135e0ed2 From 89a018f210857ffd887b13b5669fd62940b7dc2d Mon Sep 17 00:00:00 2001 From: Germano Massullo Date: Mon, 26 Jun 2017 13:16:24 +0200 Subject: [PATCH 005/134] enabled yubikey support --- keepassxc.spec | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/keepassxc.spec b/keepassxc.spec index 17b81e8..e7000be 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -49,7 +49,7 @@ cd build -DWITH_TESTS=OFF \ -DWITH_XC_HTTP=ON \ -DWITH_XC_AUTOTYPE=ON \ - -DWITH_XC_YUBIKEY=OFF \ + -DWITH_XC_YUBIKEY=ON \ -DCMAKE_BUILD_TYPE=Release make %{?_smp_mflags} @@ -113,6 +113,7 @@ desktop-file-validate %{_datadir}/applications/keepassxc.desktop &> /dev/null || * Mon Jun 26 2017 Germano Massullo - 2.2.0-1 - 2.2.0 release - added %{_bindir}/keepassxc-cli +- changed -DWITH_XC_YUBIKEY=OFF to -DWITH_XC_YUBIKEY=ON * Fri May 19 2017 Germano Massullo - 2.1.4-2 - Disabled Yubikey support. It will be re-enabled on 2.2.0 release From 5139286e706d6d00487a1329a4744ef9cc250cd0 Mon Sep 17 00:00:00 2001 From: Germano Massullo Date: Mon, 26 Jun 2017 13:21:44 +0200 Subject: [PATCH 006/134] added BuildRequires: ykpers-devel and BuildRequires: libyubikey-devel --- keepassxc.spec | 3 +++ 1 file changed, 3 insertions(+) diff --git a/keepassxc.spec b/keepassxc.spec index e7000be..d15691e 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -14,7 +14,9 @@ BuildRequires: libgcrypt-devel >= 1.6 BuildRequires: libmicrohttpd-devel BuildRequires: libXi-devel BuildRequires: libXtst-devel +BuildRequires: libyubikey-devel BuildRequires: qt5-qtx11extras-devel +BuildRequires: ykpers-devel BuildRequires: zlib-devel %description @@ -114,6 +116,7 @@ desktop-file-validate %{_datadir}/applications/keepassxc.desktop &> /dev/null || - 2.2.0 release - added %{_bindir}/keepassxc-cli - changed -DWITH_XC_YUBIKEY=OFF to -DWITH_XC_YUBIKEY=ON +- added BuildRequires: ykpers-devel and BuildRequires: libyubikey-devel * Fri May 19 2017 Germano Massullo - 2.1.4-2 - Disabled Yubikey support. It will be re-enabled on 2.2.0 release From 62906bc52238aa662cdb20d4bfc4fcb45b36da50 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 26 Jul 2017 15:08:18 +0000 Subject: [PATCH 007/134] - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild --- keepassxc.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/keepassxc.spec b/keepassxc.spec index d15691e..8d45a4d 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -1,6 +1,6 @@ Name: keepassxc Version: 2.2.0 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain URL: http://www.keepassxc.org/ @@ -112,6 +112,9 @@ desktop-file-validate %{_datadir}/applications/keepassxc.desktop &> /dev/null || %{_libdir}/%{name} %changelog +* Wed Jul 26 2017 Fedora Release Engineering - 2.2.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + * Mon Jun 26 2017 Germano Massullo - 2.2.0-1 - 2.2.0 release - added %{_bindir}/keepassxc-cli From 3ac1c55a03a0f16e424343fcf9d83a1283c1ab4f Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 3 Aug 2017 00:20:21 +0000 Subject: [PATCH 008/134] - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild --- keepassxc.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/keepassxc.spec b/keepassxc.spec index 8d45a4d..017051e 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -1,6 +1,6 @@ Name: keepassxc Version: 2.2.0 -Release: 2%{?dist} +Release: 3%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain URL: http://www.keepassxc.org/ @@ -112,6 +112,9 @@ desktop-file-validate %{_datadir}/applications/keepassxc.desktop &> /dev/null || %{_libdir}/%{name} %changelog +* Thu Aug 03 2017 Fedora Release Engineering - 2.2.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + * Wed Jul 26 2017 Fedora Release Engineering - 2.2.0-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild From 41904848a2baf595ab95587f6f69c9a526b07284 Mon Sep 17 00:00:00 2001 From: Germano Massullo Date: Fri, 6 Oct 2017 16:34:39 +0200 Subject: [PATCH 009/134] 2.2.1 release --- .gitignore | 1 + keepassxc.spec | 7 +++++-- sources | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index cdf9bf4..ae12c17 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /keepassxc-2.1.4-src.tar.xz /keepassxc-2.2.0-src.tar.xz +/keepassxc-2.2.1-src.tar.xz diff --git a/keepassxc.spec b/keepassxc.spec index 017051e..d52539d 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -1,6 +1,6 @@ Name: keepassxc -Version: 2.2.0 -Release: 3%{?dist} +Version: 2.2.1 +Release: 1%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain URL: http://www.keepassxc.org/ @@ -112,6 +112,9 @@ desktop-file-validate %{_datadir}/applications/keepassxc.desktop &> /dev/null || %{_libdir}/%{name} %changelog +* Mon Oct 02 2017 Germano Massullo - 2.2.1-1 +- 2.2.1 release + * Thu Aug 03 2017 Fedora Release Engineering - 2.2.0-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild diff --git a/sources b/sources index ce976fb..44883ac 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (keepassxc-2.2.0-src.tar.xz) = d27abf4edc9efffeaeb6c43a85551fed6f68f888aef42a59ff8cc51e5d4a5029402587b022c2b089182e2b11834aecf84bf1f3d4bb6804705954c84f135e0ed2 +SHA512 (keepassxc-2.2.1-src.tar.xz) = 7aadb1fba476dadda74515fcd2da425a244824655b4da3e8a17ac0904855667105e9951d4b1cdf3edde4230a32ebd5fa55bf1eb83ed95e1d4983aca03a99c0c4 From ab181812d9f2951ce42d39be6c2c20b830b6f1dc Mon Sep 17 00:00:00 2001 From: Mukundan Ragavan Date: Sun, 22 Oct 2017 09:38:42 -0400 Subject: [PATCH 010/134] Update to 2.2.2 Fix desktop file names Added BR on libappstream-glib Install appdata file --- .gitignore | 1 + keepassxc.spec | 21 ++++++++++++++++++--- sources | 2 +- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index ae12c17..ff11dba 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ /keepassxc-2.1.4-src.tar.xz /keepassxc-2.2.0-src.tar.xz /keepassxc-2.2.1-src.tar.xz +/keepassxc-2.2.2-src.tar.xz diff --git a/keepassxc.spec b/keepassxc.spec index d52539d..fa06169 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -1,5 +1,5 @@ Name: keepassxc -Version: 2.2.1 +Version: 2.2.2 Release: 1%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain @@ -18,6 +18,7 @@ BuildRequires: libyubikey-devel BuildRequires: qt5-qtx11extras-devel BuildRequires: ykpers-devel BuildRequires: zlib-devel +BuildRequires: libappstream-glib %description KeePassXC is a community fork of KeePassX @@ -41,6 +42,10 @@ information can be considered as quite safe. %prep %setup -n %{name}-%{version} +# get rid of icon tag in appdata file +# icon tag is not allowed in desktop appdata file +sed -i '/\ x-keepassxc.desktop << EOF @@ -79,6 +84,9 @@ EOF install -D -m 644 -p x-keepassxc.desktop \ %{buildroot}%{_datadir}/mimelnk/application/x-keepassxc.desktop +#install appdata files +appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{name}.appdata.xml + %find_lang keepassx --with-qt %check @@ -105,13 +113,20 @@ desktop-file-validate %{_datadir}/applications/keepassxc.desktop &> /dev/null || %{_bindir}/keepassxc %{_bindir}/keepassxc-cli %{_datadir}/keepassxc -%{_datadir}/applications/*.desktop +%{_datadir}/applications/org.%{name}.desktop +%{_datadir}/metainfo/org.%{name}.appdata.xml %{_datadir}/mimelnk %{_datadir}/mime/packages/*.xml %{_datadir}/icons/hicolor/*/*/*keepassxc* %{_libdir}/%{name} %changelog +* Sun Oct 22 2017 Mukundan Ragavan - 2.2.2-1 +- Update to 2.2.2 +- Fix desktop file names +- Added BR on libappstream-glib +- Install appdata file + * Mon Oct 02 2017 Germano Massullo - 2.2.1-1 - 2.2.1 release diff --git a/sources b/sources index 44883ac..7e233cc 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (keepassxc-2.2.1-src.tar.xz) = 7aadb1fba476dadda74515fcd2da425a244824655b4da3e8a17ac0904855667105e9951d4b1cdf3edde4230a32ebd5fa55bf1eb83ed95e1d4983aca03a99c0c4 +SHA512 (keepassxc-2.2.2-src.tar.xz) = 27fc1416de550b4ac7ddec0f61d765cdf8a5d6c695edd9c4db222959672daebc2d8882abcd816bf3b569c95e1aa2728c152d7d5ca9457654cf66594856f3e1f9 From f2bbef4d5d61d2aeceea644c23fcfc19e7eddd2c Mon Sep 17 00:00:00 2001 From: Germano Massullo Date: Tue, 12 Dec 2017 22:53:20 +0100 Subject: [PATCH 011/134] 2.2.3 release --- .gitignore | 1 + keepassxc.spec | 5 ++++- sources | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index ff11dba..c5189aa 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ /keepassxc-2.2.0-src.tar.xz /keepassxc-2.2.1-src.tar.xz /keepassxc-2.2.2-src.tar.xz +/keepassxc-2.2.3-src.tar.xz diff --git a/keepassxc.spec b/keepassxc.spec index fa06169..6d37a7f 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -1,5 +1,5 @@ Name: keepassxc -Version: 2.2.2 +Version: 2.2.3 Release: 1%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain @@ -121,6 +121,9 @@ desktop-file-validate %{_datadir}/applications/keepassxc.desktop &> /dev/null || %{_libdir}/%{name} %changelog +* Tue Dec 12 2017 Germano Massullo - 2.2.3-1 +- 2.2.3 release + * Sun Oct 22 2017 Mukundan Ragavan - 2.2.2-1 - Update to 2.2.2 - Fix desktop file names diff --git a/sources b/sources index 7e233cc..a77b10c 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (keepassxc-2.2.2-src.tar.xz) = 27fc1416de550b4ac7ddec0f61d765cdf8a5d6c695edd9c4db222959672daebc2d8882abcd816bf3b569c95e1aa2728c152d7d5ca9457654cf66594856f3e1f9 +SHA512 (keepassxc-2.2.3-src.tar.xz) = 750008b33521d2f47daa481f735231b66e729d374c6f56dad600c0b8d74056b4322702a3e6602f3e7fdca66d0d16d8bb19324e8e9c0913dc36164147d32648a3 From 805dc0e3512b08308e2b788b7cae0f7f04001b31 Mon Sep 17 00:00:00 2001 From: Germano Massullo Date: Tue, 12 Dec 2017 23:33:33 +0100 Subject: [PATCH 012/134] added patch to fix typo in a XML tag --- keepassxc.spec | 5 ++++- typo_xml_tag.patch | 21 +++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 typo_xml_tag.patch diff --git a/keepassxc.spec b/keepassxc.spec index 6d37a7f..342c1fb 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -4,7 +4,8 @@ Release: 1%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain URL: http://www.keepassxc.org/ -Source0: https://github.com/keepassxreboot/keepassxc/releases/download/%{version}/keepassxc-%{version}-src.tar.xz +Source0: https://github.com/keepassxreboot/keepassxc/releases/download/%{version}/keepassxc-%{version}-src.tar.xz +Patch0: typo_xml_tag.patch BuildRequires: cmake BuildRequires: desktop-file-utils @@ -41,6 +42,7 @@ information can be considered as quite safe. %prep %setup -n %{name}-%{version} +%patch0 -p1 # get rid of icon tag in appdata file # icon tag is not allowed in desktop appdata file @@ -123,6 +125,7 @@ desktop-file-validate %{_datadir}/applications/keepassxc.desktop &> /dev/null || %changelog * Tue Dec 12 2017 Germano Massullo - 2.2.3-1 - 2.2.3 release +- added patch to fix typo in a XML tag * Sun Oct 22 2017 Mukundan Ragavan - 2.2.2-1 - Update to 2.2.2 diff --git a/typo_xml_tag.patch b/typo_xml_tag.patch new file mode 100644 index 0000000..c73ca2e --- /dev/null +++ b/typo_xml_tag.patch @@ -0,0 +1,21 @@ +From 496f88c4590c4a672ef454a4ee8c1991a02dc736 Mon Sep 17 00:00:00 2001 +From: Germano Massullo +Date: Tue, 12 Dec 2017 23:24:59 +0100 +Subject: [PATCH] Fixed typo in XML tag + +Signed-off-by: Germano Massullo +--- + share/linux/org.keepassxc.KeePassXC.appdata.xml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/share/linux/org.keepassxc.KeePassXC.appdata.xml b/share/linux/org.keepassxc.KeePassXC.appdata.xml +index 39cddac12..69e7855ba 100644 +--- a/share/linux/org.keepassxc.KeePassXC.appdata.xml ++++ b/share/linux/org.keepassxc.KeePassXC.appdata.xml +@@ -1,5 +1,5 @@ + +-Copyright 2017 KeePassXC Team --> ++ + + org.keepassxc.KeePassXC.desktop + KeePassXC From bb217a393b75676ada33c1d97a951e197f454fc1 Mon Sep 17 00:00:00 2001 From: Germano Massullo Date: Tue, 12 Dec 2017 23:52:54 +0100 Subject: [PATCH 013/134] recreated patch because previous did not work --- typo_xml_tag.patch | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/typo_xml_tag.patch b/typo_xml_tag.patch index c73ca2e..349f0f9 100644 --- a/typo_xml_tag.patch +++ b/typo_xml_tag.patch @@ -1,21 +1,10 @@ -From 496f88c4590c4a672ef454a4ee8c1991a02dc736 Mon Sep 17 00:00:00 2001 -From: Germano Massullo -Date: Tue, 12 Dec 2017 23:24:59 +0100 -Subject: [PATCH] Fixed typo in XML tag - -Signed-off-by: Germano Massullo ---- - share/linux/org.keepassxc.KeePassXC.appdata.xml | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/share/linux/org.keepassxc.KeePassXC.appdata.xml b/share/linux/org.keepassxc.KeePassXC.appdata.xml -index 39cddac12..69e7855ba 100644 ---- a/share/linux/org.keepassxc.KeePassXC.appdata.xml -+++ b/share/linux/org.keepassxc.KeePassXC.appdata.xml +diff -urNr keepassxc-2.2.3-orig/share/linux/org.keepassxc.appdata.xml keepassxc-2.2.3/share/linux/org.keepassxc.appdata.xml +--- keepassxc-2.2.3-orig/share/linux/org.keepassxc.appdata.xml 2017-12-12 03:01:14.000000000 +0100 ++++ keepassxc-2.2.3/share/linux/org.keepassxc.appdata.xml 2017-12-12 23:43:26.641162561 +0100 @@ -1,5 +1,5 @@ -Copyright 2017 KeePassXC Team --> + - org.keepassxc.KeePassXC.desktop + org.keepassxc KeePassXC From 0f8a41cca81afa7b0a1b2b92249b0d18f518c6db Mon Sep 17 00:00:00 2001 From: Germano Massullo Date: Thu, 14 Dec 2017 10:59:45 +0100 Subject: [PATCH 014/134] 2.2.4 release --- .gitignore | 1 + keepassxc.spec | 9 ++++++--- sources | 2 +- typo_xml_tag.patch | 10 ---------- 4 files changed, 8 insertions(+), 14 deletions(-) delete mode 100644 typo_xml_tag.patch diff --git a/.gitignore b/.gitignore index c5189aa..0da98a8 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ /keepassxc-2.2.1-src.tar.xz /keepassxc-2.2.2-src.tar.xz /keepassxc-2.2.3-src.tar.xz +/keepassxc-2.2.4-src.tar.xz diff --git a/keepassxc.spec b/keepassxc.spec index 342c1fb..6868dea 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -1,11 +1,10 @@ Name: keepassxc -Version: 2.2.3 +Version: 2.2.4 Release: 1%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain URL: http://www.keepassxc.org/ -Source0: https://github.com/keepassxreboot/keepassxc/releases/download/%{version}/keepassxc-%{version}-src.tar.xz -Patch0: typo_xml_tag.patch +Source0: https://github.com/keepassxreboot/keepassxc/releases/download/%{version}/keepassxc-%{version}-src.tar.xz BuildRequires: cmake BuildRequires: desktop-file-utils @@ -123,6 +122,10 @@ desktop-file-validate %{_datadir}/applications/keepassxc.desktop &> /dev/null || %{_libdir}/%{name} %changelog +* Thu Dec 14 2017 Germano Massullo - 2.2.4-1 +- 2.2.4 release +- removed patch to fix typo in a XML tag + * Tue Dec 12 2017 Germano Massullo - 2.2.3-1 - 2.2.3 release - added patch to fix typo in a XML tag diff --git a/sources b/sources index a77b10c..ee9386e 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (keepassxc-2.2.3-src.tar.xz) = 750008b33521d2f47daa481f735231b66e729d374c6f56dad600c0b8d74056b4322702a3e6602f3e7fdca66d0d16d8bb19324e8e9c0913dc36164147d32648a3 +SHA512 (keepassxc-2.2.4-src.tar.xz) = 79a577fe5b0ed0c8872cb7f61805cac21b7db0d172f8e759fb39c0e4eac9d1cb24d287547676123990c99507ef646a1505f2caa1b8e29bd2d32d79523f6e8879 diff --git a/typo_xml_tag.patch b/typo_xml_tag.patch deleted file mode 100644 index 349f0f9..0000000 --- a/typo_xml_tag.patch +++ /dev/null @@ -1,10 +0,0 @@ -diff -urNr keepassxc-2.2.3-orig/share/linux/org.keepassxc.appdata.xml keepassxc-2.2.3/share/linux/org.keepassxc.appdata.xml ---- keepassxc-2.2.3-orig/share/linux/org.keepassxc.appdata.xml 2017-12-12 03:01:14.000000000 +0100 -+++ keepassxc-2.2.3/share/linux/org.keepassxc.appdata.xml 2017-12-12 23:43:26.641162561 +0100 -@@ -1,5 +1,5 @@ - --Copyright 2017 KeePassXC Team --> -+ - - org.keepassxc - KeePassXC From 22636de697ca8c24263359ead7eb090013c5fea8 Mon Sep 17 00:00:00 2001 From: Germano Massullo Date: Thu, 14 Dec 2017 11:03:57 +0100 Subject: [PATCH 015/134] removed patch -p1 --- keepassxc.spec | 1 - 1 file changed, 1 deletion(-) diff --git a/keepassxc.spec b/keepassxc.spec index 6868dea..ac89be6 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -41,7 +41,6 @@ information can be considered as quite safe. %prep %setup -n %{name}-%{version} -%patch0 -p1 # get rid of icon tag in appdata file # icon tag is not allowed in desktop appdata file From 0bdcdfb73e7e11eafca046cff6a98d004d6ae9ed Mon Sep 17 00:00:00 2001 From: Mukundan Ragavan Date: Sat, 16 Dec 2017 07:18:19 -0500 Subject: [PATCH 016/134] Adjust for changes in appdata and desktop filename change --- keepassxc.spec | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/keepassxc.spec b/keepassxc.spec index ac89be6..1b14443 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -1,6 +1,6 @@ Name: keepassxc Version: 2.2.4 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain URL: http://www.keepassxc.org/ @@ -44,7 +44,8 @@ information can be considered as quite safe. # get rid of icon tag in appdata file # icon tag is not allowed in desktop appdata file -sed -i '/\ x-keepassxc.desktop << EOF @@ -85,7 +86,7 @@ install -D -m 644 -p x-keepassxc.desktop \ %{buildroot}%{_datadir}/mimelnk/application/x-keepassxc.desktop #install appdata files -appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{name}.appdata.xml +appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{name}.KeePassXC.appdata.xml %find_lang keepassx --with-qt @@ -96,7 +97,7 @@ ctest -V %{?_smp_mflags} touch --no-create %{_datadir}/icons/hicolor &>/dev/null || : update-desktop-database &> /dev/null ||: -%postun +Page missing%postun if [ $1 -eq 0 ] ; then touch --no-create %{_datadir}/icons/hicolor &>/dev/null gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : @@ -113,14 +114,17 @@ desktop-file-validate %{_datadir}/applications/keepassxc.desktop &> /dev/null || %{_bindir}/keepassxc %{_bindir}/keepassxc-cli %{_datadir}/keepassxc -%{_datadir}/applications/org.%{name}.desktop -%{_datadir}/metainfo/org.%{name}.appdata.xml +%{_datadir}/applications/org.%{name}.KeePassXC.desktop +%{_datadir}/metainfo/org.%{name}.KeePassXC.appdata.xml %{_datadir}/mimelnk %{_datadir}/mime/packages/*.xml %{_datadir}/icons/hicolor/*/*/*keepassxc* %{_libdir}/%{name} %changelog +* Sat Dec 16 2017 Mukundan Ragavan - 2.2.4-2 +- Adjust for changes in appdata and desktop filename change + * Thu Dec 14 2017 Germano Massullo - 2.2.4-1 - 2.2.4 release - removed patch to fix typo in a XML tag From 8d1bb6c64b9bc25dfdf75330619d7972a18b7665 Mon Sep 17 00:00:00 2001 From: Mukundan Ragavan Date: Wed, 27 Dec 2017 07:34:28 -0500 Subject: [PATCH 017/134] Fix specfile error --- keepassxc.spec | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/keepassxc.spec b/keepassxc.spec index 1b14443..158f5a4 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -1,6 +1,6 @@ Name: keepassxc Version: 2.2.4 -Release: 2%{?dist} +Release: 3%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain URL: http://www.keepassxc.org/ @@ -97,7 +97,7 @@ ctest -V %{?_smp_mflags} touch --no-create %{_datadir}/icons/hicolor &>/dev/null || : update-desktop-database &> /dev/null ||: -Page missing%postun +%postun if [ $1 -eq 0 ] ; then touch --no-create %{_datadir}/icons/hicolor &>/dev/null gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : @@ -122,6 +122,9 @@ desktop-file-validate %{_datadir}/applications/keepassxc.desktop &> /dev/null || %{_libdir}/%{name} %changelog +* Wed Dec 27 2017 Mukundan Ragavan - 2.2.4-3 +- Fix specfile error + * Sat Dec 16 2017 Mukundan Ragavan - 2.2.4-2 - Adjust for changes in appdata and desktop filename change From 35b4d1016ffac5dd54e15a417d21a966f97cb5fd Mon Sep 17 00:00:00 2001 From: Igor Gnatenko Date: Fri, 5 Jan 2018 23:57:09 +0100 Subject: [PATCH 018/134] Remove obsolete scriptlets Signed-off-by: Igor Gnatenko --- keepassxc.spec | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/keepassxc.spec b/keepassxc.spec index 158f5a4..a255bb5 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -92,21 +92,7 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %check ctest -V %{?_smp_mflags} - -%post -touch --no-create %{_datadir}/icons/hicolor &>/dev/null || : -update-desktop-database &> /dev/null ||: - -%postun -if [ $1 -eq 0 ] ; then - touch --no-create %{_datadir}/icons/hicolor &>/dev/null - gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : -fi -update-desktop-database &> /dev/null ||: - -%posttrans -gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : -desktop-file-validate %{_datadir}/applications/keepassxc.desktop &> /dev/null || : +desktop-file-validate %{_datadir}/applications/keepassxc.desktop %files %doc README.md From f79c002d03a128c257b02347da5078a36df20342 Mon Sep 17 00:00:00 2001 From: Igor Gnatenko Date: Fri, 5 Jan 2018 23:58:39 +0100 Subject: [PATCH 019/134] cleanup specfile Signed-off-by: Igor Gnatenko --- keepassxc.spec | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/keepassxc.spec b/keepassxc.spec index a255bb5..ae4c777 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -52,19 +52,17 @@ mkdir build cd build %cmake .. \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DCMAKE_VERBOSE_MAKEFILE=OFF \ -DWITH_TESTS=OFF \ -DWITH_XC_HTTP=ON \ -DWITH_XC_AUTOTYPE=ON \ -DWITH_XC_YUBIKEY=ON \ -DCMAKE_BUILD_TYPE=Release -make %{?_smp_mflags} +%make_build %install cd build -make install DESTDIR=%{buildroot} +%make_install desktop-file-install \ --dir %{buildroot}%{_datadir}/applications \ @@ -86,13 +84,13 @@ install -D -m 644 -p x-keepassxc.desktop \ %{buildroot}%{_datadir}/mimelnk/application/x-keepassxc.desktop #install appdata files -appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{name}.KeePassXC.appdata.xml %find_lang keepassx --with-qt %check ctest -V %{?_smp_mflags} -desktop-file-validate %{_datadir}/applications/keepassxc.desktop +desktop-file-validate %{buildroot}%{_datadir}/applications/keepassxc.desktop +appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{name}.KeePassXC.appdata.xml %files %doc README.md From 39262e3a202f092734f553e0f37602507a1ecd77 Mon Sep 17 00:00:00 2001 From: Igor Gnatenko Date: Sat, 6 Jan 2018 00:01:23 +0100 Subject: [PATCH 020/134] bump release Signed-off-by: Igor Gnatenko --- keepassxc.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/keepassxc.spec b/keepassxc.spec index ae4c777..e86af55 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -1,6 +1,6 @@ Name: keepassxc Version: 2.2.4 -Release: 3%{?dist} +Release: 4%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain URL: http://www.keepassxc.org/ @@ -106,6 +106,9 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %{_libdir}/%{name} %changelog +* Fri Jan 05 2018 Igor Gnatenko - 2.2.4-4 +- Remove obsolete scriptlets + * Wed Dec 27 2017 Mukundan Ragavan - 2.2.4-3 - Fix specfile error From e7bc4314f54f57976028fe06b7aa66ed369047f8 Mon Sep 17 00:00:00 2001 From: Igor Gnatenko Date: Sat, 6 Jan 2018 00:14:38 +0100 Subject: [PATCH 021/134] Fix reference to desktop file Signed-off-by: Igor Gnatenko --- keepassxc.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keepassxc.spec b/keepassxc.spec index e86af55..253cfe9 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -40,7 +40,7 @@ information can be considered as quite safe. %prep -%setup -n %{name}-%{version} +%autosetup # get rid of icon tag in appdata file # icon tag is not allowed in desktop appdata file @@ -89,7 +89,7 @@ install -D -m 644 -p x-keepassxc.desktop \ %check ctest -V %{?_smp_mflags} -desktop-file-validate %{buildroot}%{_datadir}/applications/keepassxc.desktop +desktop-file-validate %{buildroot}%{_datadir}/applications/org.%{name}.KeePassXC.desktop appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{name}.KeePassXC.appdata.xml %files From eee4e1e9846b99469cde44036aad702ea9c6b4a5 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 7 Feb 2018 19:53:25 +0000 Subject: [PATCH 022/134] - Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- keepassxc.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/keepassxc.spec b/keepassxc.spec index 253cfe9..65e6043 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -1,6 +1,6 @@ Name: keepassxc Version: 2.2.4 -Release: 4%{?dist} +Release: 5%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain URL: http://www.keepassxc.org/ @@ -106,6 +106,9 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %{_libdir}/%{name} %changelog +* Wed Feb 07 2018 Fedora Release Engineering - 2.2.4-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + * Fri Jan 05 2018 Igor Gnatenko - 2.2.4-4 - Remove obsolete scriptlets From e6d41c9e229ddd8b6b487292a260fabd3aa073df Mon Sep 17 00:00:00 2001 From: Igor Gnatenko Date: Fri, 9 Feb 2018 09:04:52 +0100 Subject: [PATCH 023/134] Escape macros in %changelog Reference: https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/Y2ZUKK2B7T2IKXPMODNF6HB2O5T5TS6H/ Signed-off-by: Igor Gnatenko --- keepassxc.spec | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/keepassxc.spec b/keepassxc.spec index 65e6043..5adda22 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -1,6 +1,6 @@ Name: keepassxc Version: 2.2.4 -Release: 5%{?dist} +Release: 6%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain URL: http://www.keepassxc.org/ @@ -106,6 +106,9 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %{_libdir}/%{name} %changelog +* Fri Feb 09 2018 Igor Gnatenko - 2.2.4-6 +- Escape macros in %%changelog + * Wed Feb 07 2018 Fedora Release Engineering - 2.2.4-5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild @@ -143,7 +146,7 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam * Mon Jun 26 2017 Germano Massullo - 2.2.0-1 - 2.2.0 release -- added %{_bindir}/keepassxc-cli +- added %%{_bindir}/keepassxc-cli - changed -DWITH_XC_YUBIKEY=OFF to -DWITH_XC_YUBIKEY=ON - added BuildRequires: ykpers-devel and BuildRequires: libyubikey-devel From 4a61f76d2353f1f6804b52fa7cec84612a436615 Mon Sep 17 00:00:00 2001 From: Germano Massullo Date: Wed, 28 Feb 2018 12:58:17 +0100 Subject: [PATCH 024/134] 2.3.0 release --- keepassxc.spec | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/keepassxc.spec b/keepassxc.spec index 5adda22..fc961a3 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -1,17 +1,27 @@ +# EPEL7 not possible because libgcrypt version is 1.5 + Name: keepassxc -Version: 2.2.4 -Release: 6%{?dist} +Version: 2.3.0 +Release: 1%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain URL: http://www.keepassxc.org/ Source0: https://github.com/keepassxreboot/keepassxc/releases/download/%{version}/keepassxc-%{version}-src.tar.xz -BuildRequires: cmake +%if 0%{?el7} +BuildRequires: cmake3 >= 3.1 +%else +BuildRequires: cmake >= 3.1 +%endif BuildRequires: desktop-file-utils +BuildRequires: gcc-c++ >= 4.7 BuildRequires: qt5-qtbase-devel >= 5.2 BuildRequires: qt5-qttools-devel >= 5.2 -BuildRequires: libgcrypt-devel >= 1.6 +BuildRequires: libargon2-devel +BuildRequires: libcurl-devel +BuildRequires: libgcrypt-devel >= 1.7 BuildRequires: libmicrohttpd-devel +BuildRequires: libsodium-devel BuildRequires: libXi-devel BuildRequires: libXtst-devel BuildRequires: libyubikey-devel @@ -104,8 +114,17 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %{_datadir}/mime/packages/*.xml %{_datadir}/icons/hicolor/*/*/*keepassxc* %{_libdir}/%{name} +%{_mandir}/man1/%{name}-cli.1* %changelog +* Wed Feb 28 2018 Germano Massullo - 2.2.4-7 +- added BuildRequires: libargon2-devel +- added BuildRequires: libcurl-devel +- added BuildRequires: libgcrypt-devel >= 1.7 +- added BuildRequires: libsodium-devel +- added BuildRequires: gcc-c++ >= 4.7 +- added %%{_mandir}/man1/%{name}-cli.1* + * Fri Feb 09 2018 Igor Gnatenko - 2.2.4-6 - Escape macros in %%changelog From 16654607356cfd707537da5811fd6a45c3a27ac0 Mon Sep 17 00:00:00 2001 From: Germano Massullo Date: Wed, 28 Feb 2018 15:35:00 +0100 Subject: [PATCH 025/134] added %%{_mandir}/man1/%{name}-cli.1* --- .gitignore | 1 + sources | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 0da98a8..d2e873c 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ /keepassxc-2.2.2-src.tar.xz /keepassxc-2.2.3-src.tar.xz /keepassxc-2.2.4-src.tar.xz +/keepassxc-2.3.0-src.tar.xz diff --git a/sources b/sources index ee9386e..0f16ba7 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (keepassxc-2.2.4-src.tar.xz) = 79a577fe5b0ed0c8872cb7f61805cac21b7db0d172f8e759fb39c0e4eac9d1cb24d287547676123990c99507ef646a1505f2caa1b8e29bd2d32d79523f6e8879 +SHA512 (keepassxc-2.3.0-src.tar.xz) = 44721a4dd9364898c69a10d73ceb3fce9b8e83bbe261d9bc656897bc01f37e9b65b923867e18d3c3269773075ad846a0e1195d8b7bf574fcbce7bef9a5778888 From 05e4ed6850a00f09423f244aca980abf36a45d3e Mon Sep 17 00:00:00 2001 From: Germano Massullo Date: Wed, 7 Mar 2018 02:14:11 +0100 Subject: [PATCH 026/134] 2.3.1 release --- .gitignore | 1 + keepassxc.spec | 10 ++++++---- sources | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index d2e873c..af352dc 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ /keepassxc-2.2.3-src.tar.xz /keepassxc-2.2.4-src.tar.xz /keepassxc-2.3.0-src.tar.xz +/keepassxc-2.3.1-src.tar.xz diff --git a/keepassxc.spec b/keepassxc.spec index fc961a3..f08c146 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -1,7 +1,7 @@ # EPEL7 not possible because libgcrypt version is 1.5 Name: keepassxc -Version: 2.3.0 +Version: 2.3.1 Release: 1%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain @@ -63,9 +63,7 @@ cd build %cmake .. \ -DWITH_TESTS=OFF \ - -DWITH_XC_HTTP=ON \ - -DWITH_XC_AUTOTYPE=ON \ - -DWITH_XC_YUBIKEY=ON \ + -DWITH_XC_ALL=ON \ -DCMAKE_BUILD_TYPE=Release %make_build @@ -117,6 +115,10 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %{_mandir}/man1/%{name}-cli.1* %changelog +* Wed Mar 07 2018 Germano Massullo - 2.3.1-1 +- 2.3.1 release +- used -DWITH_XC_ALL=ON to enable all features. Read https://github.com/keepassxreboot/keepassxc/issues/1558#issuecomment-369291706 + * Wed Feb 28 2018 Germano Massullo - 2.2.4-7 - added BuildRequires: libargon2-devel - added BuildRequires: libcurl-devel diff --git a/sources b/sources index 0f16ba7..254273d 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (keepassxc-2.3.0-src.tar.xz) = 44721a4dd9364898c69a10d73ceb3fce9b8e83bbe261d9bc656897bc01f37e9b65b923867e18d3c3269773075ad846a0e1195d8b7bf574fcbce7bef9a5778888 +SHA512 (keepassxc-2.3.1-src.tar.xz) = 06c1b42e699b21c0cc2a6e7340649fa8964d8a0c880efad512f3ba16e12ee07a1b2b5ff13e0b3dc8d3f58fdf4f523cee3d1ef477a83ea434d97690dfea0633c9 From c1b734318d5539f8612a463ad26f85e0d5958108 Mon Sep 17 00:00:00 2001 From: Germano Massullo Date: Thu, 8 Mar 2018 02:57:31 +0100 Subject: [PATCH 027/134] 2.3.1 release --- keepassxc.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/keepassxc.spec b/keepassxc.spec index f08c146..a7bf000 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -105,6 +105,7 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %license COPYING LICENSE* %{_bindir}/keepassxc %{_bindir}/keepassxc-cli +%{_bindir}/keepassxc-proxy %{_datadir}/keepassxc %{_datadir}/applications/org.%{name}.KeePassXC.desktop %{_datadir}/metainfo/org.%{name}.KeePassXC.appdata.xml From a67116ef0587e12cd68ac7431e19a55572e38029 Mon Sep 17 00:00:00 2001 From: Mukundan Ragavan Date: Tue, 8 May 2018 15:27:20 -0400 Subject: [PATCH 028/134] Update to 2.3.2 --- .gitignore | 1 + keepassxc.spec | 5 ++++- sources | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index af352dc..f2cdb0d 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ /keepassxc-2.2.4-src.tar.xz /keepassxc-2.3.0-src.tar.xz /keepassxc-2.3.1-src.tar.xz +/keepassxc-2.3.2-src.tar.xz diff --git a/keepassxc.spec b/keepassxc.spec index a7bf000..70b58b5 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -1,7 +1,7 @@ # EPEL7 not possible because libgcrypt version is 1.5 Name: keepassxc -Version: 2.3.1 +Version: 2.3.2 Release: 1%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain @@ -116,6 +116,9 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %{_mandir}/man1/%{name}-cli.1* %changelog +* Tue May 08 2018 Mukundan Ragavan - 2.3.2-1 +- Update to 2.3.2 + * Wed Mar 07 2018 Germano Massullo - 2.3.1-1 - 2.3.1 release - used -DWITH_XC_ALL=ON to enable all features. Read https://github.com/keepassxreboot/keepassxc/issues/1558#issuecomment-369291706 diff --git a/sources b/sources index 254273d..a9b8685 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (keepassxc-2.3.1-src.tar.xz) = 06c1b42e699b21c0cc2a6e7340649fa8964d8a0c880efad512f3ba16e12ee07a1b2b5ff13e0b3dc8d3f58fdf4f523cee3d1ef477a83ea434d97690dfea0633c9 +SHA512 (keepassxc-2.3.2-src.tar.xz) = 6e5b90e140f826f704acf9cfbaa8ad056d25c0f14bfbe112e40f123552b2faa6e5fc880493a5a17bb0eb7fb84520fdea96c42dbef420903029b6c674374380e3 From d8aeaec521523339b7985aca4ed4be94bc0a57f8 Mon Sep 17 00:00:00 2001 From: Mukundan Ragavan Date: Thu, 10 May 2018 18:14:15 -0400 Subject: [PATCH 029/134] Update to 2.3.3 --- .gitignore | 1 + keepassxc.spec | 5 ++++- sources | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index f2cdb0d..7325254 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ /keepassxc-2.3.0-src.tar.xz /keepassxc-2.3.1-src.tar.xz /keepassxc-2.3.2-src.tar.xz +/keepassxc-2.3.3-src.tar.xz diff --git a/keepassxc.spec b/keepassxc.spec index 70b58b5..40f2a44 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -1,7 +1,7 @@ # EPEL7 not possible because libgcrypt version is 1.5 Name: keepassxc -Version: 2.3.2 +Version: 2.3.3 Release: 1%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain @@ -116,6 +116,9 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %{_mandir}/man1/%{name}-cli.1* %changelog +* Thu May 10 2018 Mukundan Ragavan - 2.3.3-1 +- Update to 2.3.3 + * Tue May 08 2018 Mukundan Ragavan - 2.3.2-1 - Update to 2.3.2 diff --git a/sources b/sources index a9b8685..90dfc09 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (keepassxc-2.3.2-src.tar.xz) = 6e5b90e140f826f704acf9cfbaa8ad056d25c0f14bfbe112e40f123552b2faa6e5fc880493a5a17bb0eb7fb84520fdea96c42dbef420903029b6c674374380e3 +SHA512 (keepassxc-2.3.3-src.tar.xz) = 155dda3c81ecb3be4638c634fe2dd7f96a54076b371a1f6ab95c33319ff2a50eaf941a1415f42724444749a40d7fbcb3972604199f6a0445df4a22a4bac73c0b From 173a276f80ebff2d8f14772fee6e928c951992ec Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 13 Jul 2018 06:59:23 +0000 Subject: [PATCH 030/134] - Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- keepassxc.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/keepassxc.spec b/keepassxc.spec index 40f2a44..6574956 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -2,7 +2,7 @@ Name: keepassxc Version: 2.3.3 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain URL: http://www.keepassxc.org/ @@ -116,6 +116,9 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %{_mandir}/man1/%{name}-cli.1* %changelog +* Fri Jul 13 2018 Fedora Release Engineering - 2.3.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + * Thu May 10 2018 Mukundan Ragavan - 2.3.3-1 - Update to 2.3.3 From b31195604b375bb69566bb06100268fd90e4ddbd Mon Sep 17 00:00:00 2001 From: Mukundan Ragavan Date: Thu, 19 Jul 2018 20:54:57 -0400 Subject: [PATCH 031/134] Fix FTBFS --- keepassxc.spec | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/keepassxc.spec b/keepassxc.spec index 6574956..e34c90d 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -2,7 +2,7 @@ Name: keepassxc Version: 2.3.3 -Release: 2%{?dist} +Release: 3%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain URL: http://www.keepassxc.org/ @@ -56,6 +56,8 @@ information can be considered as quite safe. # icon tag is not allowed in desktop appdata file sed -i '/\' src/gui/entry/EditEntryWidget.cpp %build mkdir build @@ -116,6 +118,9 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %{_mandir}/man1/%{name}-cli.1* %changelog +* Thu Jul 19 2018 Mukundan Ragavan - 2.3.3-3 +- Fix FTBFS + * Fri Jul 13 2018 Fedora Release Engineering - 2.3.3-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild From 092b46696586c302386b73d34328c8bb2de23e59 Mon Sep 17 00:00:00 2001 From: Mukundan Ragavan Date: Wed, 29 Aug 2018 19:18:34 -0400 Subject: [PATCH 032/134] Update to 2.3.4 --- keepassxc.spec | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/keepassxc.spec b/keepassxc.spec index e34c90d..c55d0bc 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -1,8 +1,8 @@ # EPEL7 not possible because libgcrypt version is 1.5 Name: keepassxc -Version: 2.3.3 -Release: 3%{?dist} +Version: 2.3.4 +Release: 1%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain URL: http://www.keepassxc.org/ @@ -118,6 +118,9 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %{_mandir}/man1/%{name}-cli.1* %changelog +* Wed Aug 29 2018 Mukundan Ragavan - 2.3.4-1 +- Update to 2.3.4 + * Thu Jul 19 2018 Mukundan Ragavan - 2.3.3-3 - Fix FTBFS From 851aad08b9d956e57948e250e93461a581aaa9d8 Mon Sep 17 00:00:00 2001 From: Mukundan Ragavan Date: Wed, 29 Aug 2018 19:24:58 -0400 Subject: [PATCH 033/134] Update to 2.3.4 --- .gitignore | 1 + sources | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 7325254..d79cb43 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ /keepassxc-2.3.1-src.tar.xz /keepassxc-2.3.2-src.tar.xz /keepassxc-2.3.3-src.tar.xz +/keepassxc-2.3.4-src.tar.xz diff --git a/sources b/sources index 90dfc09..dd1ddf9 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (keepassxc-2.3.3-src.tar.xz) = 155dda3c81ecb3be4638c634fe2dd7f96a54076b371a1f6ab95c33319ff2a50eaf941a1415f42724444749a40d7fbcb3972604199f6a0445df4a22a4bac73c0b +SHA512 (keepassxc-2.3.4-src.tar.xz) = edca22ef9d7c553d21d8ea6115a5635265176acc56fdf055f1961a3e65046de49ed5b67eb68ecf4f925226fb5bca140d5d473a5082301168f6a8bb7979f562a8 From d9b31aa49e85ab9ab407059b32791c3621ce12ee Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 1 Feb 2019 05:19:45 +0000 Subject: [PATCH 034/134] - Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- keepassxc.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/keepassxc.spec b/keepassxc.spec index c55d0bc..0ab3e18 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -2,7 +2,7 @@ Name: keepassxc Version: 2.3.4 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain URL: http://www.keepassxc.org/ @@ -118,6 +118,9 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %{_mandir}/man1/%{name}-cli.1* %changelog +* Fri Feb 01 2019 Fedora Release Engineering - 2.3.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + * Wed Aug 29 2018 Mukundan Ragavan - 2.3.4-1 - Update to 2.3.4 From 3ca39c51a40bd55f2c36a3b40c0ad52f0715ccb3 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Mon, 18 Mar 2019 13:25:49 +0100 Subject: [PATCH 035/134] rebuild for libargon2 new soname --- keepassxc.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/keepassxc.spec b/keepassxc.spec index 0ab3e18..c497039 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -2,7 +2,7 @@ Name: keepassxc Version: 2.3.4 -Release: 2%{?dist} +Release: 3%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain URL: http://www.keepassxc.org/ @@ -118,6 +118,9 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %{_mandir}/man1/%{name}-cli.1* %changelog +* Mon Mar 18 2019 Remi Collet - 2.3.4-3 +- rebuild for libargon2 new soname + * Fri Feb 01 2019 Fedora Release Engineering - 2.3.4-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild From 957962fe0f669af8693c9be5435c71b23e119ce4 Mon Sep 17 00:00:00 2001 From: Mukundan Ragavan Date: Wed, 20 Mar 2019 18:03:38 -0400 Subject: [PATCH 036/134] Update to 2.4.0 Drop unneeded sed lines in spec file Added BR for qrencode-devel and qt5-qtsvg-devel --- .gitignore | 1 + keepassxc.spec | 18 +++++++++--------- sources | 2 +- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/.gitignore b/.gitignore index d79cb43..fc9eee1 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ /keepassxc-2.3.2-src.tar.xz /keepassxc-2.3.3-src.tar.xz /keepassxc-2.3.4-src.tar.xz +/keepassxc-2.4.0-src.tar.xz diff --git a/keepassxc.spec b/keepassxc.spec index c497039..ac8cf42 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -1,8 +1,8 @@ # EPEL7 not possible because libgcrypt version is 1.5 Name: keepassxc -Version: 2.3.4 -Release: 3%{?dist} +Version: 2.4.0 +Release: 1%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain URL: http://www.keepassxc.org/ @@ -17,6 +17,8 @@ BuildRequires: desktop-file-utils BuildRequires: gcc-c++ >= 4.7 BuildRequires: qt5-qtbase-devel >= 5.2 BuildRequires: qt5-qttools-devel >= 5.2 +BuildRequires: qt5-qtsvg-devel +BuildRequires: qrencode-devel BuildRequires: libargon2-devel BuildRequires: libcurl-devel BuildRequires: libgcrypt-devel >= 1.7 @@ -52,13 +54,6 @@ information can be considered as quite safe. %prep %autosetup -# get rid of icon tag in appdata file -# icon tag is not allowed in desktop appdata file -sed -i '/\' src/gui/entry/EditEntryWidget.cpp - %build mkdir build cd build @@ -118,6 +113,11 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %{_mandir}/man1/%{name}-cli.1* %changelog +* Wed Mar 20 2019 Mukundan Ragavan - 2.4.0-1 +- Update to 2.4.0 +- Drop unneeded sed lines in spec file +- Added BR for qrencode-devel and qt5-qtsvg-devel + * Mon Mar 18 2019 Remi Collet - 2.3.4-3 - rebuild for libargon2 new soname diff --git a/sources b/sources index dd1ddf9..a32d028 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (keepassxc-2.3.4-src.tar.xz) = edca22ef9d7c553d21d8ea6115a5635265176acc56fdf055f1961a3e65046de49ed5b67eb68ecf4f925226fb5bca140d5d473a5082301168f6a8bb7979f562a8 +SHA512 (keepassxc-2.4.0-src.tar.xz) = b7295f5983237606efd236955dc73d477992d944e547eeb2c3a267d846e70ce6f83e489f58e3bd9b5bb21decabd9052a4ea7b98bd98e8283abbb678ae19e5559 From 433de5bf72e4775cd7195407334b5a60ced70c12 Mon Sep 17 00:00:00 2001 From: Germano Massullo Date: Tue, 16 Apr 2019 10:18:30 +0200 Subject: [PATCH 037/134] 2.4.1 release --- .gitignore | 1 + keepassxc.spec | 7 ++++++- sources | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index fc9eee1..07eb68b 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ /keepassxc-2.3.3-src.tar.xz /keepassxc-2.3.4-src.tar.xz /keepassxc-2.4.0-src.tar.xz +/keepassxc-2.4.1-src.tar.xz diff --git a/keepassxc.spec b/keepassxc.spec index ac8cf42..ab01f6c 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -1,7 +1,7 @@ # EPEL7 not possible because libgcrypt version is 1.5 Name: keepassxc -Version: 2.4.0 +Version: 2.4.1 Release: 1%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain @@ -61,6 +61,7 @@ cd build %cmake .. \ -DWITH_TESTS=OFF \ -DWITH_XC_ALL=ON \ + -WITH_XC_UPDATECHECK=OFF \ -DCMAKE_BUILD_TYPE=Release %make_build @@ -113,6 +114,10 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %{_mandir}/man1/%{name}-cli.1* %changelog +* Tue Apr 16 2019 Germano Massullo - 2.4.1-1 +- 2.4.1 release +- Added WITH_XC_UPDATECHECK=OFF + * Wed Mar 20 2019 Mukundan Ragavan - 2.4.0-1 - Update to 2.4.0 - Drop unneeded sed lines in spec file diff --git a/sources b/sources index a32d028..071142f 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (keepassxc-2.4.0-src.tar.xz) = b7295f5983237606efd236955dc73d477992d944e547eeb2c3a267d846e70ce6f83e489f58e3bd9b5bb21decabd9052a4ea7b98bd98e8283abbb678ae19e5559 +SHA512 (keepassxc-2.4.1-src.tar.xz) = 4369043700d3de4fece0a1dd0f8aab3f621df379bc9d0214b4c70ab72d081f978104aa09fd39c4b4bf8b8df8f78266835dc206c31e7174bdf872a977c0d79502 From 5b34c45d770383f59cd4c3ac0d9dace3524a9ca2 Mon Sep 17 00:00:00 2001 From: Mukundan Ragavan Date: Sat, 1 Jun 2019 05:53:10 -0400 Subject: [PATCH 038/134] Update to 2.4.2 --- .gitignore | 1 + keepassxc.spec | 5 ++++- sources | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 07eb68b..1c1034a 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ /keepassxc-2.3.4-src.tar.xz /keepassxc-2.4.0-src.tar.xz /keepassxc-2.4.1-src.tar.xz +/keepassxc-2.4.2-src.tar.xz diff --git a/keepassxc.spec b/keepassxc.spec index ab01f6c..1d2bcfe 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -1,7 +1,7 @@ # EPEL7 not possible because libgcrypt version is 1.5 Name: keepassxc -Version: 2.4.1 +Version: 2.4.2 Release: 1%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain @@ -114,6 +114,9 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %{_mandir}/man1/%{name}-cli.1* %changelog +* Fri May 31 2019 Mukundan Ragavan - 2.4.2-1 +- Update to 2.4.2 + * Tue Apr 16 2019 Germano Massullo - 2.4.1-1 - 2.4.1 release - Added WITH_XC_UPDATECHECK=OFF diff --git a/sources b/sources index 071142f..71164eb 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (keepassxc-2.4.1-src.tar.xz) = 4369043700d3de4fece0a1dd0f8aab3f621df379bc9d0214b4c70ab72d081f978104aa09fd39c4b4bf8b8df8f78266835dc206c31e7174bdf872a977c0d79502 +SHA512 (keepassxc-2.4.2-src.tar.xz) = 4ad7e559a36831ad715672d3cddcd3becd4f39847b7ad4451d920c76671e607f8ec9d65ed6f5450dd95e037d129cafe8faff8c1ecd9d20a22fed2c72b2dde9f2 From d93b0902731ae9984f816aeeae5cee4a1c009030 Mon Sep 17 00:00:00 2001 From: Mukundan Ragavan Date: Tue, 11 Jun 2019 21:53:43 -0400 Subject: [PATCH 039/134] Update to 2.4.3 --- .gitignore | 1 + keepassxc.spec | 5 ++++- sources | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 1c1034a..1800012 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ /keepassxc-2.4.0-src.tar.xz /keepassxc-2.4.1-src.tar.xz /keepassxc-2.4.2-src.tar.xz +/keepassxc-2.4.3-src.tar.xz diff --git a/keepassxc.spec b/keepassxc.spec index 1d2bcfe..9b71dd9 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -1,7 +1,7 @@ # EPEL7 not possible because libgcrypt version is 1.5 Name: keepassxc -Version: 2.4.2 +Version: 2.4.3 Release: 1%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain @@ -114,6 +114,9 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %{_mandir}/man1/%{name}-cli.1* %changelog +* Tue Jun 11 2019 Mukundan Ragavan - 2.4.3-1 +- Update to 2.4.3 + * Fri May 31 2019 Mukundan Ragavan - 2.4.2-1 - Update to 2.4.2 diff --git a/sources b/sources index 71164eb..91cedf7 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (keepassxc-2.4.2-src.tar.xz) = 4ad7e559a36831ad715672d3cddcd3becd4f39847b7ad4451d920c76671e607f8ec9d65ed6f5450dd95e037d129cafe8faff8c1ecd9d20a22fed2c72b2dde9f2 +SHA512 (keepassxc-2.4.3-src.tar.xz) = 893f1d18ab8051143d29c568ba87adcc42a13d28d0c3a7af04396cd91d6724f8a98d76d2e20ca15138c4642ec060d48b9e957857251f3a0df6066af08cd0765d From b46bba391d17dc2bcd63dd6c347949caf92f8ca9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Esser?= Date: Wed, 26 Jun 2019 00:49:10 +0200 Subject: [PATCH 040/134] Rebuilt (libqrencode.so.4) --- keepassxc.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/keepassxc.spec b/keepassxc.spec index 9b71dd9..9bc079b 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -2,7 +2,7 @@ Name: keepassxc Version: 2.4.3 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain URL: http://www.keepassxc.org/ @@ -114,6 +114,9 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %{_mandir}/man1/%{name}-cli.1* %changelog +* Tue Jun 25 2019 Björn Esser - 2.4.3-2 +- Rebuilt (libqrencode.so.4) + * Tue Jun 11 2019 Mukundan Ragavan - 2.4.3-1 - Update to 2.4.3 From f89af7865c37da91f1689fc4b78627e9656e1cb7 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 25 Jul 2019 11:22:13 +0000 Subject: [PATCH 041/134] - Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- keepassxc.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/keepassxc.spec b/keepassxc.spec index 9bc079b..424bba9 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -2,7 +2,7 @@ Name: keepassxc Version: 2.4.3 -Release: 2%{?dist} +Release: 3%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain URL: http://www.keepassxc.org/ @@ -114,6 +114,9 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %{_mandir}/man1/%{name}-cli.1* %changelog +* Thu Jul 25 2019 Fedora Release Engineering - 2.4.3-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + * Tue Jun 25 2019 Björn Esser - 2.4.3-2 - Rebuilt (libqrencode.so.4) From 13a2373f23e3239d4f140e90a02a1998bb928292 Mon Sep 17 00:00:00 2001 From: Gwyn Ciesla Date: Thu, 15 Aug 2019 08:48:37 -0500 Subject: [PATCH 042/134] "Adding package.cfg file" --- package.cfg | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 package.cfg diff --git a/package.cfg b/package.cfg new file mode 100644 index 0000000..66ea79d --- /dev/null +++ b/package.cfg @@ -0,0 +1,2 @@ +[koji] +targets = epel8 epel8-playground \ No newline at end of file From 9eeb5d078b3d53aad39a1af991744b9d5dfeef84 Mon Sep 17 00:00:00 2001 From: Germano Massullo Date: Thu, 5 Sep 2019 13:26:56 +0200 Subject: [PATCH 043/134] Added -DWITH_XC_KEESHARE_SECURE=ON --- keepassxc.spec | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/keepassxc.spec b/keepassxc.spec index 424bba9..24a4dce 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -2,7 +2,7 @@ Name: keepassxc Version: 2.4.3 -Release: 3%{?dist} +Release: 4%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain URL: http://www.keepassxc.org/ @@ -61,6 +61,7 @@ cd build %cmake .. \ -DWITH_TESTS=OFF \ -DWITH_XC_ALL=ON \ + -DWITH_XC_KEESHARE_SECURE=ON \ -WITH_XC_UPDATECHECK=OFF \ -DCMAKE_BUILD_TYPE=Release @@ -114,6 +115,9 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %{_mandir}/man1/%{name}-cli.1* %changelog +* Thu Sep 05 2019 Germano Massullo - 2.4.3-4 +- Added -DWITH_XC_KEESHARE_SECURE=ON + * Thu Jul 25 2019 Fedora Release Engineering - 2.4.3-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild From 0af4c7621002bec74cd904620bb61b9856046d2e Mon Sep 17 00:00:00 2001 From: Germano Massullo Date: Mon, 16 Sep 2019 12:32:53 +0200 Subject: [PATCH 044/134] added BuildRequires: quazip-devel --- keepassxc.spec | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/keepassxc.spec b/keepassxc.spec index 24a4dce..c9b04dc 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -2,7 +2,7 @@ Name: keepassxc Version: 2.4.3 -Release: 4%{?dist} +Release: 5%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain URL: http://www.keepassxc.org/ @@ -28,6 +28,7 @@ BuildRequires: libXi-devel BuildRequires: libXtst-devel BuildRequires: libyubikey-devel BuildRequires: qt5-qtx11extras-devel +BuildRequires: quazip-devel BuildRequires: ykpers-devel BuildRequires: zlib-devel BuildRequires: libappstream-glib @@ -115,6 +116,9 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %{_mandir}/man1/%{name}-cli.1* %changelog +* Mon Sep 16 2019 Germano Massullo - 2.4.3-5 +- Added BuildRequires: quazip-devel + * Thu Sep 05 2019 Germano Massullo - 2.4.3-4 - Added -DWITH_XC_KEESHARE_SECURE=ON From 9cf5b18210127206a4996f306328f1a724d1bc6a Mon Sep 17 00:00:00 2001 From: Germano Massullo Date: Thu, 19 Sep 2019 13:46:38 +0200 Subject: [PATCH 045/134] Replaced BuildRequires: quazip-devel with BuildRequires: quazip-qt5-devel --- keepassxc.spec | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/keepassxc.spec b/keepassxc.spec index c9b04dc..5cd8b3f 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -2,7 +2,7 @@ Name: keepassxc Version: 2.4.3 -Release: 5%{?dist} +Release: 6%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain URL: http://www.keepassxc.org/ @@ -28,7 +28,7 @@ BuildRequires: libXi-devel BuildRequires: libXtst-devel BuildRequires: libyubikey-devel BuildRequires: qt5-qtx11extras-devel -BuildRequires: quazip-devel +BuildRequires: quazip-qt5-devel BuildRequires: ykpers-devel BuildRequires: zlib-devel BuildRequires: libappstream-glib @@ -116,6 +116,9 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %{_mandir}/man1/%{name}-cli.1* %changelog +* Thu Sep 19 2019 Germano Massullo - 2.4.3-6 +- Replaced BuildRequires: quazip-devel with BuildRequires: quazip-qt5-devel + * Mon Sep 16 2019 Germano Massullo - 2.4.3-5 - Added BuildRequires: quazip-devel From 90081da8e2ddd1cf2cb1e72bc5ed489fa70efcd0 Mon Sep 17 00:00:00 2001 From: Germano Massullo Date: Sat, 21 Sep 2019 11:08:43 +0200 Subject: [PATCH 046/134] adjusted quazip-qt5-devel dep for EPEL8 --- keepassxc.spec | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/keepassxc.spec b/keepassxc.spec index 5cd8b3f..eeebd3c 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -28,7 +28,11 @@ BuildRequires: libXi-devel BuildRequires: libXtst-devel BuildRequires: libyubikey-devel BuildRequires: qt5-qtx11extras-devel +%if 0%{?el8} +BuildRequires: quazip-devel +%else BuildRequires: quazip-qt5-devel +%endif BuildRequires: ykpers-devel BuildRequires: zlib-devel BuildRequires: libappstream-glib From c4514d0c96762fd4dc3b97220ce928786a39a8d4 Mon Sep 17 00:00:00 2001 From: Germano Massullo Date: Sat, 21 Sep 2019 11:11:08 +0200 Subject: [PATCH 047/134] added comment --- keepassxc.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/keepassxc.spec b/keepassxc.spec index eeebd3c..1f6aac3 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -28,6 +28,7 @@ BuildRequires: libXi-devel BuildRequires: libXtst-devel BuildRequires: libyubikey-devel BuildRequires: qt5-qtx11extras-devel +# For quazip read https://bugzilla.redhat.com/show_bug.cgi?id=1754061#c1 %if 0%{?el8} BuildRequires: quazip-devel %else From a4c6b1759c30e44524b5f8a1634596e98e5d0d5c Mon Sep 17 00:00:00 2001 From: Gwyn Ciesla Date: Mon, 28 Oct 2019 11:11:50 -0500 Subject: [PATCH 048/134] 2.5.0 --- .gitignore | 1 + keepassxc.spec | 8 ++++++-- sources | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 1800012..081e029 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ /keepassxc-2.4.1-src.tar.xz /keepassxc-2.4.2-src.tar.xz /keepassxc-2.4.3-src.tar.xz +/keepassxc-2.5.0-src.tar.xz diff --git a/keepassxc.spec b/keepassxc.spec index 1f6aac3..04c9775 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -1,8 +1,8 @@ # EPEL7 not possible because libgcrypt version is 1.5 Name: keepassxc -Version: 2.4.3 -Release: 6%{?dist} +Version: 2.5.0 +Release: 1%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain URL: http://www.keepassxc.org/ @@ -119,8 +119,12 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %{_datadir}/icons/hicolor/*/*/*keepassxc* %{_libdir}/%{name} %{_mandir}/man1/%{name}-cli.1* +%{_mandir}/man1/%{name}.1* %changelog +* Mon Oct 28 2019 Gwyn Ciesla - 2.5.0-1 +- 2.5.0 + * Thu Sep 19 2019 Germano Massullo - 2.4.3-6 - Replaced BuildRequires: quazip-devel with BuildRequires: quazip-qt5-devel diff --git a/sources b/sources index 91cedf7..ce1bc4f 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (keepassxc-2.4.3-src.tar.xz) = 893f1d18ab8051143d29c568ba87adcc42a13d28d0c3a7af04396cd91d6724f8a98d76d2e20ca15138c4642ec060d48b9e957857251f3a0df6066af08cd0765d +SHA512 (keepassxc-2.5.0-src.tar.xz) = 45f76491892ee5377eb803079ee6db2987d66e569c8c53ebc706cb51a4b8f37675801df484f03d486803de2675a3a46bed5d2b211ff7be0b83daf9c2f8607d00 From b680db5edca0c2b181fee1f0b942df5080773a6e Mon Sep 17 00:00:00 2001 From: Germano Massullo Date: Wed, 13 Nov 2019 00:17:31 +0100 Subject: [PATCH 049/134] 2.6.1 --- .gitignore | 1 + keepassxc.spec | 5 ++++- sources | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 081e029..81de63f 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,4 @@ /keepassxc-2.4.2-src.tar.xz /keepassxc-2.4.3-src.tar.xz /keepassxc-2.5.0-src.tar.xz +/keepassxc-2.5.1-src.tar.xz diff --git a/keepassxc.spec b/keepassxc.spec index 04c9775..7bac1fb 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -1,7 +1,7 @@ # EPEL7 not possible because libgcrypt version is 1.5 Name: keepassxc -Version: 2.5.0 +Version: 2.5.1 Release: 1%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain @@ -122,6 +122,9 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %{_mandir}/man1/%{name}.1* %changelog +* Tue Nov 12 2019 Germano Massullo - 2.5.1-1 +- 2.5.1 release + * Mon Oct 28 2019 Gwyn Ciesla - 2.5.0-1 - 2.5.0 diff --git a/sources b/sources index ce1bc4f..49f0f73 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (keepassxc-2.5.0-src.tar.xz) = 45f76491892ee5377eb803079ee6db2987d66e569c8c53ebc706cb51a4b8f37675801df484f03d486803de2675a3a46bed5d2b211ff7be0b83daf9c2f8607d00 +SHA512 (keepassxc-2.5.1-src.tar.xz) = 5500a0e697758e7616754d1b612ad7a64485d9efa1aeb0c3714060db50ffd39ea0aaa0c42d86d17044b834f32e99172ea94bc2485d396a381c8e9212d8be8b37 From c3318da503e940693cbbb26156196c902be49202 Mon Sep 17 00:00:00 2001 From: Mukundan Ragavan Date: Sun, 5 Jan 2020 11:02:41 -0500 Subject: [PATCH 050/134] Update to 2.5.2 --- .gitignore | 1 + keepassxc.spec | 5 ++++- sources | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 81de63f..1a74a8f 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ /keepassxc-2.4.3-src.tar.xz /keepassxc-2.5.0-src.tar.xz /keepassxc-2.5.1-src.tar.xz +/keepassxc-2.5.2-src.tar.xz diff --git a/keepassxc.spec b/keepassxc.spec index 7bac1fb..7404c89 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -1,7 +1,7 @@ # EPEL7 not possible because libgcrypt version is 1.5 Name: keepassxc -Version: 2.5.1 +Version: 2.5.2 Release: 1%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain @@ -122,6 +122,9 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %{_mandir}/man1/%{name}.1* %changelog +* Sun Jan 05 2020 Mukundan Ragavan - 2.5.2-1 +- Update to 2.5.2 + * Tue Nov 12 2019 Germano Massullo - 2.5.1-1 - 2.5.1 release diff --git a/sources b/sources index 49f0f73..9a255a1 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (keepassxc-2.5.1-src.tar.xz) = 5500a0e697758e7616754d1b612ad7a64485d9efa1aeb0c3714060db50ffd39ea0aaa0c42d86d17044b834f32e99172ea94bc2485d396a381c8e9212d8be8b37 +SHA512 (keepassxc-2.5.2-src.tar.xz) = f87408362e5fbba10e2e66ff1cead2f8495214197e142c16cd3c95ea47956570b6cfc561d7b593c9a962f476637b8bd6b5e21e2fc3e4f20224506bd97d16bb23 From 23d95c20fdb7e5f4216321da3e510abc91961203 Mon Sep 17 00:00:00 2001 From: Mukundan Ragavan Date: Mon, 20 Jan 2020 08:27:54 -0500 Subject: [PATCH 051/134] Update to 2.5.3 --- .gitignore | 1 + keepassxc.spec | 5 ++++- sources | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 1a74a8f..13ba8b2 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ /keepassxc-2.5.0-src.tar.xz /keepassxc-2.5.1-src.tar.xz /keepassxc-2.5.2-src.tar.xz +/keepassxc-2.5.3-src.tar.xz diff --git a/keepassxc.spec b/keepassxc.spec index 7404c89..246343e 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -1,7 +1,7 @@ # EPEL7 not possible because libgcrypt version is 1.5 Name: keepassxc -Version: 2.5.2 +Version: 2.5.3 Release: 1%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain @@ -122,6 +122,9 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %{_mandir}/man1/%{name}.1* %changelog +* Mon Jan 20 2020 Mukundan Ragavan - 2.5.3-1 +- Update to 2.5.3 + * Sun Jan 05 2020 Mukundan Ragavan - 2.5.2-1 - Update to 2.5.2 diff --git a/sources b/sources index 9a255a1..1b18efd 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (keepassxc-2.5.2-src.tar.xz) = f87408362e5fbba10e2e66ff1cead2f8495214197e142c16cd3c95ea47956570b6cfc561d7b593c9a962f476637b8bd6b5e21e2fc3e4f20224506bd97d16bb23 +SHA512 (keepassxc-2.5.3-src.tar.xz) = 8b1e3360b4ae5de170be6936291f7b309de09b2462fcd5a48f239c22f1c8b6ffe721aca8d1e9b6ae3881f7b16374850d7f4b809733244fd16d45eed6ad4f60c6 From 12d41af4727d188fd18797c0d0e1e869197a439d Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 29 Jan 2020 06:59:24 +0000 Subject: [PATCH 052/134] - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- keepassxc.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/keepassxc.spec b/keepassxc.spec index 246343e..2c99a00 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -2,7 +2,7 @@ Name: keepassxc Version: 2.5.3 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain URL: http://www.keepassxc.org/ @@ -122,6 +122,9 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %{_mandir}/man1/%{name}.1* %changelog +* Wed Jan 29 2020 Fedora Release Engineering - 2.5.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + * Mon Jan 20 2020 Mukundan Ragavan - 2.5.3-1 - Update to 2.5.3 From 6af34bf281a5a8a8a222e51f37107c0d414229b2 Mon Sep 17 00:00:00 2001 From: Mukundan Ragavan Date: Thu, 9 Apr 2020 17:31:54 -0400 Subject: [PATCH 053/134] Update to 2.5.4 --- .gitignore | 1 + keepassxc.spec | 7 +++++-- sources | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 13ba8b2..0423237 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,4 @@ /keepassxc-2.5.1-src.tar.xz /keepassxc-2.5.2-src.tar.xz /keepassxc-2.5.3-src.tar.xz +/keepassxc-2.5.4-src.tar.xz diff --git a/keepassxc.spec b/keepassxc.spec index 2c99a00..49e041b 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -1,8 +1,8 @@ # EPEL7 not possible because libgcrypt version is 1.5 Name: keepassxc -Version: 2.5.3 -Release: 2%{?dist} +Version: 2.5.4 +Release: 1%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain URL: http://www.keepassxc.org/ @@ -122,6 +122,9 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %{_mandir}/man1/%{name}.1* %changelog +* Thu Apr 09 2020 Mukundan Ragavan - 2.5.4-1 +- Update to 2.5.4 + * Wed Jan 29 2020 Fedora Release Engineering - 2.5.3-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild diff --git a/sources b/sources index 1b18efd..9538d7a 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (keepassxc-2.5.3-src.tar.xz) = 8b1e3360b4ae5de170be6936291f7b309de09b2462fcd5a48f239c22f1c8b6ffe721aca8d1e9b6ae3881f7b16374850d7f4b809733244fd16d45eed6ad4f60c6 +SHA512 (keepassxc-2.5.4-src.tar.xz) = 8a70363dd579b95ccb05cb846aa34a5ed89de4305f3bef9e518e5986fe7f0313cb1daaa347f5b2267002f3fff4b71c87f5bb9073f6e6879d2556a2f0e4791dd3 From 186495914aec75dc5eae682819c4081141942076 Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Wed, 1 Jul 2020 15:19:14 -0600 Subject: [PATCH 054/134] Disable LTO --- keepassxc.spec | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/keepassxc.spec b/keepassxc.spec index 49e041b..bd7b028 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -2,7 +2,7 @@ Name: keepassxc Version: 2.5.4 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain URL: http://www.keepassxc.org/ @@ -61,6 +61,12 @@ information can be considered as quite safe. %autosetup %build +# This package fails to build with LTO due to undefined symbols. LTO +# was disabled in OpenSuSE as well, but with no real explanation why +# beyond the undefined symbols. It really shold be investigated further. +# Disable LTO +%define _lto_cflags %{nil} + mkdir build cd build @@ -122,6 +128,9 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %{_mandir}/man1/%{name}.1* %changelog +* Wed Jul 01 2020 Jeff Law - 2.5.4-2 +- Diable LTO + * Thu Apr 09 2020 Mukundan Ragavan - 2.5.4-1 - Update to 2.5.4 From 201d6fe86d67cfec1b37cea9b72e38d5907e86a0 Mon Sep 17 00:00:00 2001 From: Mukundan Ragavan Date: Wed, 8 Jul 2020 15:35:01 -0400 Subject: [PATCH 055/134] Update to 2.6.0 --- .gitignore | 1 + keepassxc.spec | 10 ++++++++-- sources | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 0423237..9bda66f 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ /keepassxc-2.5.2-src.tar.xz /keepassxc-2.5.3-src.tar.xz /keepassxc-2.5.4-src.tar.xz +/keepassxc-2.6.0-src.tar.xz diff --git a/keepassxc.spec b/keepassxc.spec index bd7b028..9362e41 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -1,8 +1,8 @@ # EPEL7 not possible because libgcrypt version is 1.5 Name: keepassxc -Version: 2.5.4 -Release: 2%{?dist} +Version: 2.6.0 +Release: 1%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain URL: http://www.keepassxc.org/ @@ -37,6 +37,9 @@ BuildRequires: quazip-qt5-devel BuildRequires: ykpers-devel BuildRequires: zlib-devel BuildRequires: libappstream-glib +BuildRequires: qt5-qtbase-private-devel +BuildRequires: readline-devel +BuildRequires: rubygem-asciidoctor %description KeePassXC is a community fork of KeePassX @@ -128,6 +131,9 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %{_mandir}/man1/%{name}.1* %changelog +* Tue Jul 07 2020 Mukundan Ragavan - 2.6.0-1 +- Update to 2.6.0 + * Wed Jul 01 2020 Jeff Law - 2.5.4-2 - Diable LTO diff --git a/sources b/sources index 9538d7a..f8bcbdf 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (keepassxc-2.5.4-src.tar.xz) = 8a70363dd579b95ccb05cb846aa34a5ed89de4305f3bef9e518e5986fe7f0313cb1daaa347f5b2267002f3fff4b71c87f5bb9073f6e6879d2556a2f0e4791dd3 +SHA512 (keepassxc-2.6.0-src.tar.xz) = c1ddf81f965f5521db8b8acb2fe3950c7b185ca459c440c9118f3d6350eeff6f15bb488f9e3bd034bdf80c515f0753c041e3af083d62e179cd16df7bb8326e17 From bebd7809ea94a8cd6cbe8dc6f51010759e4f52a3 Mon Sep 17 00:00:00 2001 From: Igor Raits Date: Sat, 18 Jul 2020 14:45:33 +0200 Subject: [PATCH 056/134] Improve compatibility with new CMake macro Signed-off-by: Igor Raits --- keepassxc.spec | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/keepassxc.spec b/keepassxc.spec index 9362e41..958401b 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -1,3 +1,4 @@ +%undefine __cmake_in_source_build # EPEL7 not possible because libgcrypt version is 1.5 Name: keepassxc @@ -8,11 +9,7 @@ License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv URL: http://www.keepassxc.org/ Source0: https://github.com/keepassxreboot/keepassxc/releases/download/%{version}/keepassxc-%{version}-src.tar.xz -%if 0%{?el7} -BuildRequires: cmake3 >= 3.1 -%else BuildRequires: cmake >= 3.1 -%endif BuildRequires: desktop-file-utils BuildRequires: gcc-c++ >= 4.7 BuildRequires: qt5-qtbase-devel >= 5.2 @@ -70,21 +67,16 @@ information can be considered as quite safe. # Disable LTO %define _lto_cflags %{nil} -mkdir build -cd build - -%cmake .. \ +%cmake \ -DWITH_TESTS=OFF \ -DWITH_XC_ALL=ON \ -DWITH_XC_KEESHARE_SECURE=ON \ -WITH_XC_UPDATECHECK=OFF \ -DCMAKE_BUILD_TYPE=Release - -%make_build +%cmake_build %install -cd build -%make_install +%cmake_install desktop-file-install \ --dir %{buildroot}%{_datadir}/applications \ @@ -110,7 +102,7 @@ install -D -m 644 -p x-keepassxc.desktop \ %find_lang keepassx --with-qt %check -ctest -V %{?_smp_mflags} +%ctest desktop-file-validate %{buildroot}%{_datadir}/applications/org.%{name}.KeePassXC.desktop appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{name}.KeePassXC.appdata.xml From 424c66468b54e73b5d380c2cbe4e6facc4ff8c48 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Tue, 28 Jul 2020 02:59:59 +0000 Subject: [PATCH 057/134] - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- keepassxc.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/keepassxc.spec b/keepassxc.spec index 958401b..1228002 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -3,7 +3,7 @@ Name: keepassxc Version: 2.6.0 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain URL: http://www.keepassxc.org/ @@ -123,6 +123,9 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %{_mandir}/man1/%{name}.1* %changelog +* Tue Jul 28 2020 Fedora Release Engineering - 2.6.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + * Tue Jul 07 2020 Mukundan Ragavan - 2.6.0-1 - Update to 2.6.0 From 0f5830695776a14e5e0fddcb577091e088cb0e62 Mon Sep 17 00:00:00 2001 From: Germano Massullo Date: Thu, 20 Aug 2020 10:34:16 +0200 Subject: [PATCH 058/134] 2.6.1 release --- .gitignore | 1 + keepassxc.spec | 7 +++++-- sources | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 9bda66f..57aeaea 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,4 @@ /keepassxc-2.5.3-src.tar.xz /keepassxc-2.5.4-src.tar.xz /keepassxc-2.6.0-src.tar.xz +/keepassxc-2.6.1-src.tar.xz diff --git a/keepassxc.spec b/keepassxc.spec index 1228002..b164637 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -2,8 +2,8 @@ # EPEL7 not possible because libgcrypt version is 1.5 Name: keepassxc -Version: 2.6.0 -Release: 2%{?dist} +Version: 2.6.1 +Release: 1%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain URL: http://www.keepassxc.org/ @@ -123,6 +123,9 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %{_mandir}/man1/%{name}.1* %changelog +* Thu Aug 20 2020 Germano Massullo - 2.6.1-1 +- 2.6.1 release + * Tue Jul 28 2020 Fedora Release Engineering - 2.6.0-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild diff --git a/sources b/sources index f8bcbdf..b4f3969 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (keepassxc-2.6.0-src.tar.xz) = c1ddf81f965f5521db8b8acb2fe3950c7b185ca459c440c9118f3d6350eeff6f15bb488f9e3bd034bdf80c515f0753c041e3af083d62e179cd16df7bb8326e17 +SHA512 (keepassxc-2.6.1-src.tar.xz) = 9fb2d01d80e2b61c847c0544c280c1f3bfca671268e2dbbe78e0f3c1264f38125a3767ceb4591261f3586cd71f4fff47ecc6eacaecf1e707cea5e8907542313a From 91887ae4a5f90b82eb8dd3f3782c0ebfbf392c5e Mon Sep 17 00:00:00 2001 From: Troy Dawson Date: Thu, 24 Sep 2020 18:12:36 +0000 Subject: [PATCH 059/134] remove package.cfg per new epel-playground policy --- package.cfg | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 package.cfg diff --git a/package.cfg b/package.cfg deleted file mode 100644 index 66ea79d..0000000 --- a/package.cfg +++ /dev/null @@ -1,2 +0,0 @@ -[koji] -targets = epel8 epel8-playground \ No newline at end of file From 721bbc199b079f261627e68209274b1a1025fce0 Mon Sep 17 00:00:00 2001 From: Mukundan Ragavan Date: Fri, 23 Oct 2020 18:59:16 -0400 Subject: [PATCH 060/134] Update to 2.6.2 --- .gitignore | 1 + keepassxc.spec | 5 ++++- sources | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 57aeaea..d8a1c3b 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,4 @@ /keepassxc-2.5.4-src.tar.xz /keepassxc-2.6.0-src.tar.xz /keepassxc-2.6.1-src.tar.xz +/keepassxc-2.6.2-src.tar.xz diff --git a/keepassxc.spec b/keepassxc.spec index b164637..57f0c76 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -2,7 +2,7 @@ # EPEL7 not possible because libgcrypt version is 1.5 Name: keepassxc -Version: 2.6.1 +Version: 2.6.2 Release: 1%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain @@ -123,6 +123,9 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %{_mandir}/man1/%{name}.1* %changelog +* Fri Oct 23 2020 Mukundan Ragavan - 2.6.2-1 +- Update to 2.6.2 + * Thu Aug 20 2020 Germano Massullo - 2.6.1-1 - 2.6.1 release diff --git a/sources b/sources index b4f3969..0e452e0 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (keepassxc-2.6.1-src.tar.xz) = 9fb2d01d80e2b61c847c0544c280c1f3bfca671268e2dbbe78e0f3c1264f38125a3767ceb4591261f3586cd71f4fff47ecc6eacaecf1e707cea5e8907542313a +SHA512 (keepassxc-2.6.2-src.tar.xz) = b297edc4fae32b65430802094bd63dc301addae36859365a3009899d5bc20b32934e174ea56bf3fd1ee633a263ab36b577cba5aaa75bf4ad597f44606f7b5fd1 From ca2699417fb84fcc66ec2c88b4dc0a91ab316dd3 Mon Sep 17 00:00:00 2001 From: Germano Massullo Date: Mon, 26 Oct 2020 15:47:14 +0100 Subject: [PATCH 061/134] replaced -WITH_XC_UPDATECHECK=OFF with -DWITH_XC_UPDATECHECK=OFF --- keepassxc.spec | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/keepassxc.spec b/keepassxc.spec index 57f0c76..e3f762d 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -3,7 +3,7 @@ Name: keepassxc Version: 2.6.2 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain URL: http://www.keepassxc.org/ @@ -71,7 +71,7 @@ information can be considered as quite safe. -DWITH_TESTS=OFF \ -DWITH_XC_ALL=ON \ -DWITH_XC_KEESHARE_SECURE=ON \ - -WITH_XC_UPDATECHECK=OFF \ + -DWITH_XC_UPDATECHECK=OFF \ -DCMAKE_BUILD_TYPE=Release %cmake_build @@ -123,6 +123,9 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %{_mandir}/man1/%{name}.1* %changelog +* Mon Oct 26 2020 Germano Massullo - 2.6.2-2 +- replaced -WITH_XC_UPDATECHECK=OFF with -DWITH_XC_UPDATECHECK=OFF Read https://bugzilla.redhat.com/show_bug.cgi?id=1887609 + * Fri Oct 23 2020 Mukundan Ragavan - 2.6.2-1 - Update to 2.6.2 From bb67739a4be75409686d0e77b2e62103180f166b Mon Sep 17 00:00:00 2001 From: Mukundan Ragavan Date: Wed, 13 Jan 2021 18:29:50 -0500 Subject: [PATCH 062/134] Update to 2.6.3 --- .gitignore | 1 + keepassxc.spec | 9 ++++++--- sources | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index d8a1c3b..f6b3c27 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,4 @@ /keepassxc-2.6.0-src.tar.xz /keepassxc-2.6.1-src.tar.xz /keepassxc-2.6.2-src.tar.xz +/keepassxc-2.6.3-src.tar.xz diff --git a/keepassxc.spec b/keepassxc.spec index e3f762d..8882d81 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -2,14 +2,14 @@ # EPEL7 not possible because libgcrypt version is 1.5 Name: keepassxc -Version: 2.6.2 -Release: 2%{?dist} +Version: 2.6.3 +Release: 1%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain URL: http://www.keepassxc.org/ Source0: https://github.com/keepassxreboot/keepassxc/releases/download/%{version}/keepassxc-%{version}-src.tar.xz -BuildRequires: cmake >= 3.1 +BuildRequires: cmake >= 3.1 BuildRequires: desktop-file-utils BuildRequires: gcc-c++ >= 4.7 BuildRequires: qt5-qtbase-devel >= 5.2 @@ -123,6 +123,9 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %{_mandir}/man1/%{name}.1* %changelog +* Wed Jan 13 2021 Mukundan Ragavan - 2.6.3-1 +- Update to 2.6.3 + * Mon Oct 26 2020 Germano Massullo - 2.6.2-2 - replaced -WITH_XC_UPDATECHECK=OFF with -DWITH_XC_UPDATECHECK=OFF Read https://bugzilla.redhat.com/show_bug.cgi?id=1887609 diff --git a/sources b/sources index 0e452e0..061bfda 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (keepassxc-2.6.2-src.tar.xz) = b297edc4fae32b65430802094bd63dc301addae36859365a3009899d5bc20b32934e174ea56bf3fd1ee633a263ab36b577cba5aaa75bf4ad597f44606f7b5fd1 +SHA512 (keepassxc-2.6.3-src.tar.xz) = 37f97c0851731badffc9c40ed2dcc5c8fc200ea96b32281c21cf199799681abbd74fb191140022ad7872d69ee139e12646e19697010f539690e4e0f0f1c92558 From 40e93ccd9cf005e2197dabceaf6cac4e366dfe3e Mon Sep 17 00:00:00 2001 From: Germano Massullo Date: Thu, 21 Jan 2021 20:36:27 +0100 Subject: [PATCH 063/134] enabled EPEL8 builds --- keepassxc.spec | 39 ++++++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/keepassxc.spec b/keepassxc.spec index 8882d81..ea88994 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -3,7 +3,7 @@ Name: keepassxc Version: 2.6.3 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain URL: http://www.keepassxc.org/ @@ -25,10 +25,11 @@ BuildRequires: libXi-devel BuildRequires: libXtst-devel BuildRequires: libyubikey-devel BuildRequires: qt5-qtx11extras-devel -# For quazip read https://bugzilla.redhat.com/show_bug.cgi?id=1754061#c1 -%if 0%{?el8} -BuildRequires: quazip-devel -%else +# For EL8 missing quazip read +# https://bugzilla.redhat.com/show_bug.cgi?id=1859390 +# https://bugzilla.redhat.com/show_bug.cgi?id=1754061#c1 +# https://bugzilla.redhat.com/show_bug.cgi?id=1754155 +%if 0%{?fedora} BuildRequires: quazip-qt5-devel %endif BuildRequires: ykpers-devel @@ -36,8 +37,12 @@ BuildRequires: zlib-devel BuildRequires: libappstream-glib BuildRequires: qt5-qtbase-private-devel BuildRequires: readline-devel +# For EL8 missing rubygem-asciidoctor read +# https://bugzilla.redhat.com/show_bug.cgi?id=1859390 +# https://bugzilla.redhat.com/show_bug.cgi?id=1820896 +%if 0%{?fedora} BuildRequires: rubygem-asciidoctor - +%endif %description KeePassXC is a community fork of KeePassX KeePassXC is an application for people with extremely high demands on secure @@ -66,13 +71,26 @@ information can be considered as quite safe. # beyond the undefined symbols. It really shold be investigated further. # Disable LTO %define _lto_cflags %{nil} - +%if 0%{?fedora} %cmake \ -DWITH_TESTS=OFF \ -DWITH_XC_ALL=ON \ -DWITH_XC_KEESHARE_SECURE=ON \ -DWITH_XC_UPDATECHECK=OFF \ -DCMAKE_BUILD_TYPE=Release +%endif +# -DWITH_XC_DOCS=OFF is needed on EL due missing rubygem-asciidoctor +# For EL8 missing rubygem-asciidoctor read +# https://bugzilla.redhat.com/show_bug.cgi?id=1859390 +# https://bugzilla.redhat.com/show_bug.cgi?id=1820896 +%if 0%{?el8} + -DWITH_TESTS=OFF \ + -DWITH_XC_ALL=ON \ + -DWITH_XC_KEESHARE_SECURE=ON \ + -DWITH_XC_UPDATECHECK=OFF \ + -DWITH_XC_DOCS=OFF \ + -DCMAKE_BUILD_TYPE=Release +%endif %cmake_build %install @@ -119,10 +137,17 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %{_datadir}/mime/packages/*.xml %{_datadir}/icons/hicolor/*/*/*keepassxc* %{_libdir}/%{name} +# Missing rubygem-asciidoctor in EL8 does not allow having documentation in EL8 +# Read https://bugzilla.redhat.com/show_bug.cgi?id=1859390 +%if 0%{?fedora} %{_mandir}/man1/%{name}-cli.1* %{_mandir}/man1/%{name}.1* +%endif %changelog +* Thu Jan 21 2021 Germano Massullo - 2.6.3-2 +- EL8: disabled documentation, removed rubygem-asciidoctor and quazip depencendies. For bugzilla tickets about missing dependencies, read this spec file near Fedora/EL8 macros + * Wed Jan 13 2021 Mukundan Ragavan - 2.6.3-1 - Update to 2.6.3 From eeb69b6f46c7bd9d2ef5df970c8c641e3a3975bb Mon Sep 17 00:00:00 2001 From: Germano Massullo Date: Thu, 21 Jan 2021 20:42:24 +0100 Subject: [PATCH 064/134] fixed spec file syntax --- keepassxc.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/keepassxc.spec b/keepassxc.spec index ea88994..1adc7b6 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -84,6 +84,7 @@ information can be considered as quite safe. # https://bugzilla.redhat.com/show_bug.cgi?id=1859390 # https://bugzilla.redhat.com/show_bug.cgi?id=1820896 %if 0%{?el8} +%cmake \ -DWITH_TESTS=OFF \ -DWITH_XC_ALL=ON \ -DWITH_XC_KEESHARE_SECURE=ON \ From 310af07f822c8ff44020d7bb36e9a048afd87154 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Tue, 26 Jan 2021 15:27:22 +0000 Subject: [PATCH 065/134] - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- keepassxc.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/keepassxc.spec b/keepassxc.spec index 1adc7b6..45562e7 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -3,7 +3,7 @@ Name: keepassxc Version: 2.6.3 -Release: 2%{?dist} +Release: 3%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain URL: http://www.keepassxc.org/ @@ -146,6 +146,9 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %endif %changelog +* Tue Jan 26 2021 Fedora Release Engineering - 2.6.3-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + * Thu Jan 21 2021 Germano Massullo - 2.6.3-2 - EL8: disabled documentation, removed rubygem-asciidoctor and quazip depencendies. For bugzilla tickets about missing dependencies, read this spec file near Fedora/EL8 macros From 548c7b570983c15f9bb0fac50e974459acb208b9 Mon Sep 17 00:00:00 2001 From: Mukundan Ragavan Date: Sun, 31 Jan 2021 21:43:38 -0500 Subject: [PATCH 066/134] Update to 2.6.4 --- .gitignore | 1 + keepassxc.spec | 7 +++++-- sources | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index f6b3c27..e228042 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,4 @@ /keepassxc-2.6.1-src.tar.xz /keepassxc-2.6.2-src.tar.xz /keepassxc-2.6.3-src.tar.xz +/keepassxc-2.6.4-src.tar.xz diff --git a/keepassxc.spec b/keepassxc.spec index 45562e7..c6026b7 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -2,8 +2,8 @@ # EPEL7 not possible because libgcrypt version is 1.5 Name: keepassxc -Version: 2.6.3 -Release: 3%{?dist} +Version: 2.6.4 +Release: 1%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain URL: http://www.keepassxc.org/ @@ -146,6 +146,9 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %endif %changelog +* Sun Jan 31 2021 Mukundan Ragavan - 2.6.4-1 +- Update to 2.6.4 + * Tue Jan 26 2021 Fedora Release Engineering - 2.6.3-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild diff --git a/sources b/sources index 061bfda..30b1bdf 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (keepassxc-2.6.3-src.tar.xz) = 37f97c0851731badffc9c40ed2dcc5c8fc200ea96b32281c21cf199799681abbd74fb191140022ad7872d69ee139e12646e19697010f539690e4e0f0f1c92558 +SHA512 (keepassxc-2.6.4-src.tar.xz) = 3bde0c8670ba14be80c6f3676bd447b0855a2af2915a395ee236c2d4c6e4b859936351643d679480aae1fcf55ed4315447ae927ac9bdedeb0332593cb4e9fedb From 3ccd4e8b52a7fc547962ee76b76171a24053d487 Mon Sep 17 00:00:00 2001 From: Germano Massullo Date: Sat, 1 May 2021 13:09:10 +0200 Subject: [PATCH 067/134] adds xcb.patch --- keepassxc.spec | 10 ++++++++-- xcb.patch | 29 +++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 xcb.patch diff --git a/keepassxc.spec b/keepassxc.spec index c6026b7..b76b43d 100644 --- a/keepassxc.spec +++ b/keepassxc.spec @@ -3,11 +3,14 @@ Name: keepassxc Version: 2.6.4 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Cross-platform password manager License: Boost and BSD and CC0 and GPLv3 and LGPLv2 and LGPLv2+ and LGPLv3+ and Public Domain URL: http://www.keepassxc.org/ -Source0: https://github.com/keepassxreboot/keepassxc/releases/download/%{version}/keepassxc-%{version}-src.tar.xz +Source0: https://github.com/keepassxreboot/keepassxc/releases/download/%{version}/keepassxc-%{version}-src.tar.xz +# Patch0: fixes GNOME quirks on Wayland sessions. Read +# https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/message/3BVLBS4B3XHJEXFVGD7RK2ZMXZG6JQZT/ +Patch0: xcb.patch BuildRequires: cmake >= 3.1 BuildRequires: desktop-file-utils @@ -146,6 +149,9 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.%{nam %endif %changelog +* Sat May 01 2021 Germano Massullo - 2.6.4-2 +- added xcb.patch that fixes GNOME quirks on Wayland sessions. Read https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/message/3BVLBS4B3XHJEXFVGD7RK2ZMXZG6JQZT/ + * Sun Jan 31 2021 Mukundan Ragavan - 2.6.4-1 - Update to 2.6.4 diff --git a/xcb.patch b/xcb.patch new file mode 100644 index 0000000..e779549 --- /dev/null +++ b/xcb.patch @@ -0,0 +1,29 @@ +diff -urNr keepassxc-2.6.4-orig/src/main.cpp keepassxc-2.6.4-patched/src/main.cpp +--- keepassxc-2.6.4-orig/src/main.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/main.cpp 2021-05-01 13:05:11.068996741 +0200 +@@ -44,8 +44,25 @@ + #endif + #endif + ++#ifdef Q_OS_LINUX ++void wayland_hacks() ++{ ++ // Workaround to https://github.com/ksnip/ksnip/issues/416 ++ QByteArray currentDesktop = qgetenv("XDG_CURRENT_DESKTOP").toLower(); ++ QByteArray sessionDesktop = qgetenv("XDG_SESSION_DESKTOP").toLower(); ++ QByteArray sessionType = qgetenv("XDG_SESSION_TYPE").toLower(); ++ if (sessionType.contains("wayland") && (currentDesktop.contains("gnome") || sessionDesktop.contains("gnome"))) ++ { ++ qputenv("QT_QPA_PLATFORM", "xcb"); ++ } ++} ++#endif ++ ++ + int main(int argc, char** argv) + { ++ #ifdef Q_OS_LINUX ++ wayland_hacks(); + QT_REQUIRE_VERSION(argc, argv, QT_VERSION_STR) + + #if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) From 39a70fd26983e75d3335bd4798bb9636b264a3b1 Mon Sep 17 00:00:00 2001 From: Germano Massullo Date: Sat, 1 May 2021 14:28:06 +0200 Subject: [PATCH 068/134] adds xcb.patch --- xcb.patch | 463756 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 463729 insertions(+), 27 deletions(-) diff --git a/xcb.patch b/xcb.patch index e779549..e67a1fa 100644 --- a/xcb.patch +++ b/xcb.patch @@ -1,29 +1,463731 @@ +diff -urNr keepassxc-2.6.4-orig/CHANGELOG.md keepassxc-2.6.4-patched/CHANGELOG.md +--- keepassxc-2.6.4-orig/CHANGELOG.md 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/CHANGELOG.md 1970-01-01 01:00:00.000000000 +0100 +@@ -1,855 +0,0 @@ +-# Changelog +- +-## 2.6.4 (2021-01-31) +- +-### Added +- +-- Automatically adapt to light/dark system theme changes (Windows/macOS only) [#6034] +- +-### Changed +- +-- Show window title as tooltip on system tray [#5948] +-- Compress Snap release as LZO for faster initial startup [#5877] +-- Password generator: Set maximum selectable password length to 999 [#5937] +- +-### Fixed +- +-- Fix crash on app close when using SSH agent [#5935] +-- Fix KDF selection showing wrong item when using Argon2id [#5923] +-- Automatically close About dialog on database lock if it is still open [#5947] +-- Linux: Fix automatic launch at system startup with AppImages [#5901] +-- Linux: Fix click-to-move on empty area activating when using menus [#5971] +-- Linux: Try multiple times to show tray icon if tray is not ready yet [#5948] +-- macOS: Fix KeePassXC blocking clean shutdown [#6002] +- +-## 2.6.3 (2021-01-12) +- +-### Added +- +-- Support Argon2id KDF [#5778] +-- Support XMLv2 key files [#5798] +- +-### Changed +- +-- Improve CSV Import/Export, include time fields and TOTP [#5346] +-- Support empty area dragging of the application window [#5860] +-- Display default Auto-Type sequence in preview pane [#5654] +-- Remove strict length limit on generated passwords [#5748] +-- Hide key file path by default when unlocking database [#5779] +-- Document browser extension use with Edge in managed mode [#5692] +-- Windows: Prevent clipboard history and cloud sync [#5853] +-- macOS: Update the application icon to Big Sur styling [#5851] +- +-### Fixed +- +-- Re-select previously selected entry on database unlock [#5559] +-- Properly save special character choice in password generator [#5610] +-- Fix crash in browser integration with multiple similar entries [#5653] +-- Remove offset on username field in classic theme [#5788] +-- Ensure entry history is copied when drag/dropping entries and groups [#5817] +-- Close modal dialogs when database is locked [#5820] +-- Prevent crash when KeeShare modifies an entry that is currently being edited [#5827] +-- Improve preview of entry attributes [#5834] +-- Always activate/focus database open dialog preventing mistype [#5878] +-- Reports: fix calculation of average password length [#5862] +-- Linux: Delay startup on login to correct tray icon issues [#5724] +- +-## 2.6.2 (2020-10-21) +- +-### Added +- +-- Add option to keep window always on top to view menu [#5542] +-- Move show/hide usernames and passwords to view menu [#5542] +-- Add command line options and environment variables for changing the config locations [#5452] +-- Include TOTP settings in CSV import/export and add support for ISO datetimes [#5346] +- +-### Changed +- +-- Mask sensitive information in command execution confirmation prompt [#5542] +-- SSH Agent: Avoid shortcut conflict on macOS by changing "Add key" to Ctrl+H on all platforms [#5484] +- +-### Fixed +- +-- Prevent data loss with drag and drop between databases [#5536] +-- Fix crash when toggling Capslock rapidly [#5545] +-- Don't mark URL references as invalid URL [#5380] +-- Reset entry preview after search [#5483] +-- Set Qt::Dialog flag on database open dialog [#5356] +-- Fix sorting of database report columns [#5426] +-- Fix IfDevice matching logic [#5344] +-- Fix layout issues and a stray scrollbar appearing on top of the entry edit screen [#5424] +-- Fix tabbing into the notes field [#5424] +-- Fix password generator ignoring settings on load [#5340] +-- Restore natural entry sort order on application load [#5438] +-- Fix paperclip and TOTP columns not saving state [#5327] +-- Enforce fixed password font in entry preview [#5454] +-- Add scrollbar when new database wizard exceeds screen size [#5560] +-- Do not mark database as modified when viewing Auto-Type associations [#5542] +-- CLI: Fix two heap-use-after-free crashes [#5368,#5470] +-- Browser: Fix key exchange not working with multiple simultaneous users on Windows [#5485] +-- Browser: Fix entry retrieval when "only best matching" is enabled [#5316] +-- Browser: Ignore recycle bin on KeePassHTTP migration [#5481] +-- KeeShare: Fix import crash [#5542] +-- macOS: Fix toolbar theming and breadcrumb display issues [#5482] +-- macOS: Fix file dialog randomly closing [#5479] +-- macOS: Fix being unable to select OPVault files for import [#5341] +- +-## 2.6.1 (2020-08-19) +- +-### Added +- +-- Add menu entries for auto-typing only username or only password [#4891] +-- Browser: Add command for retrieving current TOTP [#5278] +-- Improve man pages [#5010] +-- Linux: Support Xfce screen lock signals [#4971] +-- Linux: Add OARS metadata to AppStream markup [#5031] +-- SSH Agent: Substitute tilde with %USERPROFILE% on Windows [#5116] +- +-### Changed +- +-- Improve password generator UI and UX [#5129] +-- Do not prompt to restart if switching the theme back and forth [#5084] +-- Change actions for F1, F2, and F3 keys [#5082] +-- Skip referenced passwords in health check report [#5056] +-- Check system-wide Qt translations directory for downstream translations packaging [#5064] +-- macOS: Change password visibility toggle shortcut to Ctrl+H to avoid conflict with system shortcut [#5114] +-- Browser: Only display domain name in browser access confirm dialog to avoid overly wide window sizes [#5214] +- +-### Fixed +- +-- Fix clipboard not being cleared when database is locked while timeout is still active [#5184] +-- Fix list of previous databases not being cleared in some cases [#5123] +-- Fix saving of non-data changes on database lock [#5210] +-- Fix search results banner theming [#5197] +-- Don't enforce theme palette in Classic theme mode and add hover effect for buttons [#5122,#5267] +-- Fix label clipping in settings on high-DPI screens [#5227] +-- Fix excessive memory usage by icons on systems with high-DPI screens [#5266] +-- Fix crash if number of TOTP digits exceeds ten [#5106] +-- Fix slot detection when first YubiKey is configured on the second slot [#5004] +-- Prevent crash if focus widget gets deleted during saving [#5005] +-- Always show buttons for opening or saving attachments [#4956] +-- Update link to Auto-Type help [#5228] +-- Fix build errors with Ninja [#5121] +-- CLI: Fix db-info command wrongly labelled as db-show in usage listing [#5140] +-- Windows: Use Classic theme by default if high-contrast mode is on [#5191] +-- Linux: Add workaround for qt5ct bug, causing icons not to show up [#5011] +-- Linux: Correct high-DPI display by not allowing fractional scaling [#5185] +-- Browser: Consider subdomain and path when requesting only "best-matching credentials" [#4832] +-- SSH Agent: Always forget all keys on lock [#5115] +- +-## 2.6.0 (2020-07-06) +- +-### Added +- +-- Custom Light and Dark themes [#4110, #4769, #4791, #4892, #4915] +-- Compact mode to use classic Group and Entry line height [#4910] +-- New monochrome tray icons [#4796, #4803] +-- View menu to quickly switch themes, compact mode, and toggle UI elements [#4910] +-- Search for groups and scope search to matched groups [#4705] +-- Save Database Backup feature [#4550] +-- Sort entries by "natural order" and move lines up/down [#4357] +-- Option to launch KeePassXC on system startup/login [#4675] +-- Caps Lock warning on password input fields [#3646] +-- Add "Size" column to entry view [#4588] +-- Browser-like tab experience using Ctrl+[Num] (Alt+[Num] on Linux) [#4063, #4305] +-- Password Generator: Define additional characters to choose from [#3876] +-- Reports: Database password health check (offline) [#3993] +-- Reports: HIBP online service to check for breached passwords [#4438] +-- Auto-Type: DateTime placeholders [#4409] +-- Browser: Show group name in results sent to browser extension [#4111] +-- Browser: Ability to define a custom browser location (macOS and Linux only) [#4148] +-- Browser: Ability to change root group UUID and inline edit connection ID [#4315, #4591] +-- CLI: `db-info` command [#4231] +-- CLI: Use wl-clipboard if xclip is not available (Linux) [#4323] +-- CLI: Incorporate xclip into snap builds [#4697] +-- SSH Agent: Key file path env substitution, SSH_AUTH_SOCK override, and connection test [#3769, #3801, #4545] +-- SSH Agent: Context menu actions to add/remove keys [#4290] +- +-### Changed +- +-- Complete replacement of default database icons [#4699] +-- Complete replacement of application icons [#4066, #4161, #4203, #4411] +-- Complete rewrite of documentation and manpages using Asciidoctor [#4937] +-- Complete refactor of config files; separate between local and roaming [#4665] +-- Complete refactor of browser integration and proxy code [#4680] +-- Complete refactor of hardware key integration (YubiKey and OnlyKey) [#4584, #4843] +-- Significantly improve performance when saving and opening databases [#4309, #4833] +-- Remove read-only detection for database files [#4508] +-- Overhaul of password fields and password generator [#4367] +-- Replace instances of "Master Key" with "Database Credentials" [#4929] +-- Change settings checkboxes to positive phrasing for consistency [#4715] +-- Improve UX of using entry actions (focus fix) [#3893] +-- Set expiration time to Now when enabling entry expiration [#4406] +-- Always show "New Entry" in context menu [#4617] +-- Issue warning before adding large attachments [#4651] +-- Improve importing OPVault [#4630] +-- Improve AutoOpen capability [#3901, #4752] +-- Check for updates every 7 days even while still running [#4752] +-- Improve Windows installer UI/UX [#4675] +-- Improve config file handling of portable distribution [#4131, #4752] +-- macOS: Hide dock icon when application is hidden to tray [#4782] +-- Browser: Use unlock dialog to improve UX of opening a locked database [#3698] +-- Browser: Improve database and entry settings experience [#4392, #4591] +-- Browser: Improve confirm access dialog [#2143, #4660] +-- KeeShare: Improve monitoring file changes of shares [#4720] +-- CLI: Rename `create` command to `db-create` [#4231] +-- CLI: Cleanup `db-create` options (`--set-key-file` and `--set-password`) [#4313] +-- CLI: Use stderr for help text and password prompts [#4086, #4623] +-- FdoSecrets: Display existing secret service process [#4128] +- +-### Fixed +- +-- Fix changing focus around the main window using tab key [#4641] +-- Fix search field clearing while still using the application [#4368] +-- Improve search help widget displaying on macOS and Linux [#4236] +-- Return keyboard focus after editing an entry [#4287] +-- Reset database path after failed "Save As" [#4526] +-- Make builds reproducible [#4411] +-- Improve handling of ccache when building [#4104, #4335] +-- Windows: Use correct UI font and size [#4769] +-- macOS: Properly re-hide application window after browser integration and Auto-Type usage [#4909] +-- Linux: Fix version number not embedded in AppImage [#4842] +-- Auto-Type: Fix crash when performing on new entry [#4132] +-- Browser: Send legacy HTTP settings to recycle bin [#4589] +-- Browser: Fix merging browser keys [#4685] +-- CLI: Fix encoding when exporting database [#3921] +-- SSH Agent: Improve reliability and underlying code [#3833, #4256, #4549, #4595] +-- FdoSecrets: Fix crash when editing settings before service is enabled [#4332] +- +-## 2.5.4 (2020-04-09) +- +-### Fixed +- +-- Return keyboard focus after saving database edits [#4287] +-- Windows: Use bare minimum settings in portable version [#4131] +-- Windows: Use SHA256 code signing [#4129] +-- macOS: Fix code signing incompatibility in latest macOS release [#4564] +- +-## 2.5.3 (2020-01-19) +- +-### Fixed +- +-- Fix a possible database lockout when removing a YubiKey from a KDBX 3.1 database [#4147] +-- Fix crash if Auto-Type is performed on a new entry [#4150] +-- Fix crash when all entries are deleted from a group [#4156] +-- Improve the reliability of clipboard clearing on Gnome [#4165] +-- Do not check cmd:// URLs for valid URL syntax anymore [#4172] +-- Prevent unnecessary merges for databases on network shares [#4153] +-- Browser: Prevent native messaging proxy from blocking application shutdown [#4155] +-- Browser: Improve website URL matching [#4134, #4177] +- +-### Added +- +-- Browser: Enable support for Chromium-based Edge Browser [#3359] +- +-## 2.5.2 (2020-01-04) +- +-### Added +- +-- Browser: Show UI warning when entering invalid URLs [#3912] +-- Browser: Option to use an entry only for HTTP auth [#3927] +- +-### Changed +- +-- Disable the user interface when merging or saving the database [#3991] +-- Ability to hide protected attribute after reveal [#3877] +-- Remove mention of "snaps" in Windows and macOS [#3879] +-- CLI: Merge parameter for source database key file (--key-file-from) [#3961] +-- Improve GUI tests reliability on Hi-DPI displays [#4075] +-- Disable deprecation warnings to allow building with Qt 5.14+ [#4075] +-- OPVault: Use 'otp' attribute for TOTP field imports [#4075] +- +-### Fixed +- +-- Fix crashes when saving a database to cloud storage [#3991] +-- Fix crash when pressing enter twice while opening database [#3885] +-- Fix handling of HTML when displayed in the entry preview panel [#3910] +-- Fix start minimized to tray on Linux [#3899] +-- Fix Auto Open with key file only databases [#4075] +-- Fix escape key closing the standalone password generator [#3892] +-- macOS: Fix monospace font usage in password field and notes [#4075] +-- macOS: Fix building on macOS 10.9 to 10.11 [#3946] +-- Fix TOTP setup dialog not closing on database lock [#4075] +-- Browser: Fix condition where additional URLs are ignored [#4033] +-- Browser: Fix subdomain matching to return only relevant site entries [#3854] +-- Secret Service: Fix multiple crashes and incompatibilities [#3871, #4009, #4074] +-- Secret Service: Fix searching of entries [#4008, #4036] +-- Secret Service: Fix behavior when exposed group is recycled [#3914] +-- CLI: Release the database instance before exiting interactive mode [#3889] +-- Fix (most) memory leaks in tests [#3922] +- +-## 2.5.1 (2019-11-11) +- +-### Added +- +-- Add programmatic use of the EntrySearcher [#3760] +-- Explicitly clear database memory upon locking even if the object is not deleted immediately [#3824] +-- macOS: Add ability to perform notarization of built package [#3827] +- +-### Changed +- +-- Reduce file hash checking to every 30 seconds to correct performance issues [#3724] +-- Correct formatting of notes in entry preview widget [#3727] +-- Improve performance and UX of database statistics page [#3780] +-- Improve interface for key file selection to discourage use of the database file [#3807] +-- Hide Auto-Type sequences column when not needed [#3794] +-- macOS: Revert back to using Carbon API for hotkey detection [#3794] +-- CLI: Do not show protected fields by default [#3710] +- +-### Fixed +- +-- Secret Service: Correct issues interfacing with various applications [#3761] +-- Fix building without additional features [#3693] +-- Fix handling TOTP secret keys that require padding [#3764] +-- Fix database unlock dialog password field focus [#3764] +-- Correctly label open databases as locked on launch [#3764] +-- Prevent infinite recursion when two databases AutoOpen each other [#3764] +-- Browser: Fix incorrect matching of invalid URLs [#3759] +-- Properly stylize the application name on Linux [#3775] +-- Show application icon on Plasma Wayland sessions [#3777] +-- macOS: Check for Auto-Type permissions on use instead of at launch [#3794] +- +-## 2.5.0 (2019-10-26) +- +-### Added +- +-- Add 'Paper Backup' aka 'Export to HTML file' to the 'Database' menu [#3277] +-- Add statistics panel with information about the database (number of entries, number of unique passwords, etc.) to the Database Settings dialog [#2034] +-- Add offline user manual accessible via the 'Help' menu [#3274] +-- Add support for importing 1Password OpVault files [#2292] +-- Implement Freedesktop.org secret storage DBus protocol so that KeePassXC can be used as a vault service by libsecret [#2726] +-- Add support for OnlyKey as an alternative to YubiKeys (requires yubikey-personalization >= 1.20.0) [#3352] +-- Add group sorting feature [#3282] +-- Add feature to download favicons for all entries at once [#3169] +-- Add word case option to passphrase generator [#3172] +-- Add support for RFC6238-compliant TOTP hashes [#2972] +-- Add UNIX man page for main program [#3665] +-- Add 'Monospaced font' option to the notes field [#3321] +-- Add support for key files in auto open [#3504] +-- Add search field for filtering entries in Auto-Type dialog [#2955] +-- Complete usernames based on known usernames from other entries [#3300] +-- Parse hyperlinks in the notes field of the entry preview pane [#3596] +-- Allow abbreviation of field names in entry search [#3440] +-- Allow setting group icons recursively [#3273] +-- Add copy context menu for username and password in Auto-Type dialog [#3038] +-- Drop to background after copying a password to the clipboard [#3253] +-- Add 'Lock databases' entry to tray icon menu [#2896] +-- Add option to minimize window after unlocking [#3439] +-- Add option to minimize window after opening a URL [#3302] +-- Request accessibility permissions for Auto-Type on macOS [#3624] +-- Browser: Add initial support for multiple URLs [#3558] +-- Browser: Add entry-specific browser integration settings [#3444] +-- CLI: Add offline HIBP checker (requires a downloaded HIBP dump) [#2707] +-- CLI: Add 'flatten' option to the 'ls' command [#3276] +-- CLI: Add password generation options to `Add` and `Edit` commands [#3275] +-- CLI: Add XML import [#3572] +-- CLI: Add CSV export to the 'export' command [#3278] +-- CLI: Add `-y --yubikey` option for YubiKey [#3416] +-- CLI: Add `--dry-run` option for merging databases [#3254] +-- CLI: Add group commands (mv, mkdir and rmdir) [#3313]. +-- CLI: Add interactive shell mode command `open` [#3224] +- +- +-### Changed +- +-- Redesign database unlock dialog [ #3287] +-- Rework the entry preview panel [ #3306] +-- Move notes to General tab on Group Preview Panel [#3336] +-- Enable entry actions when editing an entry and cleanup entry context menu [#3641] +-- Improve detection of external database changes [#2389] +-- Warn if user is trying to use a KDBX file as a key file [#3625] +-- Add option to disable KeePassHTTP settings migrations prompt [#3349, #3344] +-- Re-enabled Wayland support (no Auto-Type yet) [#3520, #3341] +-- Add icon to 'Toggle Window' action in tray icon menu [#3244] +-- Merge custom data between databases only when necessary [#3475] +-- Improve various file-handling related issues when picking files using the system's file dialog [#3473] +-- Add 'New Entry' context menu when no entries are selected [#3671] +-- Reduce default Argon2 settings from 128 MiB and one thread per CPU core to 64 MiB and two threads to account for lower-spec mobile hardware [ #3672] +-- Browser: Remove unused 'Remember' checkbox for HTTP Basic Auth [#3371] +-- Browser: Show database name when pairing with a new browser [#3638] +-- Browser: Show URL in allow access dialog [#3639] +-- CLI: The password length option `-l` for the CLI commands `Add` and `Edit` is now `-L` [#3275] +-- CLI: The `-u` shorthand for the `--upper` password generation option has been renamed to `-U` [#3275] +-- CLI: Rename command `extract` to `export`. [#3277] +- +-### Fixed +- +-- Improve accessibility for assistive technologies [#3409] +-- Correctly unlock all databases if `--pw-stdin` is provided [#2916] +-- Fix password generator issues with special characters [#3303] +-- Fix KeePassXC interrupting shutdown procedure [#3666] +-- Fix password visibility toggle button state on unlock dialog [#3312] +-- Fix potential data loss if database is reloaded while user is editing an entry [#3656] +-- Fix hard-coded background color in search help popup [#3001] +-- Fix font choice for password preview [#3425] +-- Fix handling of read-only files when autosave is enabled [#3408] +-- Handle symlinks correctly when atomic saves are disabled [#3463] +-- Enable HighDPI icon scaling on Linux [#3332] +-- Make Auto-Type on macOS more robust and remove old Carbon API calls [#3634, [#3347)] +-- Hide Share tab if KeePassXC is compiled without KeeShare support and other minor KeeShare improvements [#3654, [#3291, #3029, #3031, #3236] +-- Correctly bring window to the front when clicking tray icon on macOS [#3576] +-- Correct application shortcut created by MSI Installer on Windows [#3296] +-- Fix crash when removing custom data [#3508] +-- Fix placeholder resolution in URLs [#3281] +-- Fix various inconsistencies and platform-dependent compilation bugs [#3664, #3662, #3660, #3655, #3649, #3417, #3357, #3319, #3318, #3304] +-- Browser: Fix potential leaking of entries through the browser integration API if multiple databases are opened [#3480] +-- Browser: Fix password entropy calculation [#3107] +-- Browser: Fix Windows registry settings for portable installation [#3603] +- +-## 2.4.3 (2019-06-12) +- +-### Added +- +-- Add documentation for keyboard shortcuts to source code distribution [#3215] +- +-### Fixed +- +-- Fix library loading issues in the Snap and macOS releases [#3247] +-- Fix various keyboard navigation issues [#3248] +-- Fix main window toggling regression when clicking the tray icon on KDE [#3258] +- +-## 2.4.2 (2019-05-31) +- +-- Improve resilience against memory attacks - overwrite memory before free [#3020] +-- Prevent infinite save loop when location is unavailable [#3026] +-- Attempt to fix quitting application when shutdown or logout issued [#3199] +-- Support merging database custom data [#3002] +-- Fix opening URL's with non-http schemes [#3153] +-- Fix data loss due to not reading all database attachments if duplicates exist [#3180] +-- Fix entry context menu disabling when using keyboard navigation [#3199] +-- Fix behaviors when canceling an entry edit [#3199] +-- Fix processing of tray icon click and doubleclick [#3112] +-- Update group in preview widget when focused [#3199] +-- Prefer DuckDuckGo service over direct icon download (increases resolution) #2996] +-- Remove apply button in application settings [#3019] +-- Use winqtdeploy on Windows to correct deployment issues [#3025] +-- Don't mark entry edit as modified when attribute selection changes [#3041] +-- Use console code page CP_UTF8 on Windows if supported [#3050] +-- Snap: Fix locking database with session lock [#3046] +-- Snap: Fix theming across Linux distributions [#3057] +-- Snap: Use SNAP_USER_COMMON and SNAP_USER_DATA directories [#3131] +-- KeeShare: Automatically enable WITH_XC_KEESHARE_SECURE if quazip is found [#3088] +-- macOS: Fix toolbar text when in dark mode [#2998] +-- macOS: Lock database on switching user [#3097] +-- macOS: Fix global Auto-Type when the database is locked[ #3138] +-- Browser: Close popups when database is locked [#3093] +-- Browser: Add tests [#3016] +-- Browser: Don't create default group if custom group is enabled [#3127] +- +-## 2.4.1 (2019-04-12) +- +-- Fix database deletion when using unsafe saves to a different file system #2889 +-- Fix opening databases with legacy key files that contain '/' #2872 +-- Fix opening database files from the command line #2919 +-- Fix crash when editing master key #2836 +-- Fix multiple issues with apply button behavior #2947 +-- Fix issues on application startup (tab order, --pw-stdin, etc.) #2830 +-- Fix building without WITH_XC_KEESHARE +-- Fix reference entry coloring on macOS dark mode #2984 +-- Hide window when performing entry auto-type on macOS #2969 +-- Improve UX of update checker; reduce checks to every 7 days #2968 +-- KeeShare improvements [#2946, #2978, #2824] +-- Re-enable Ctrl+C to copy password from search box #2947 +-- Add KeePassXC-Browser integration for Brave browser #2933 +-- SSH Agent: Re-Add keys on database unlock #2982 +-- SSH Agent: Only remove keys on app exit if they are removed on lock #2985 +-- CLI: Add --no-password option #2708 +-- CLI: Improve database extraction to XML #2698 +-- CLI: Don't call mandb on build #2774 +-- CLI: Add debug info #2714 +-- Improve support for Snap theming #2832 +-- Add support for building on Haiku OS #2859 +-- Ctrl+PgDn now goes to the next tab and Ctrl+PgUp to the previous +-- Fix compiling on GCC 5 / Xenial #2990 +-- Add .gitrev output to tarball for third-party builds #2970 +-- Add WITH_XC_UPDATECHECK compile flag to toggle the update checker #2968 +- +-## 2.4.0 (2019-03-19) +- +-- New Database Wizard #1952 +-- Advanced Search #1797 +-- Automatic update checker #2648 +-- KeeShare database synchronization [#2109, #1992, #2738, #2742, #2746, #2739] +-- Improve favicon fetching; transition to Duck-Duck-Go [#2795, #2011, #2439] +-- Remove KeePassHttp support #1752 +-- CLI: output info to stderr for easier scripting #2558 +-- CLI: Add --quiet option #2507 +-- CLI: Add create command #2540 +-- CLI: Add recursive listing of entries #2345 +-- CLI: Fix stdin/stdout encoding on Windows #2425 +-- SSH Agent: Support OpenSSH for Windows #1994 +-- macOS: TouchID Quick Unlock #1851 +-- macOS: Multiple improvements; include CLI in DMG [#2165, #2331, #2583] +-- Linux: Prevent Klipper from storing secrets in clipboard #1969 +-- Linux: Use polling based file watching for NFS #2171 +-- Linux: Enable use of browser plugin in Snap build #2802 +-- TOTP QR Code Generator #1167 +-- High-DPI Scaling for 4k screens #2404 +-- Make keyboard shortcuts more consistent #2431 +-- Warn user if deleting referenced entries #1744 +-- Allow toolbar to be hidden and repositioned [#1819, #2357] +-- Increase max allowed database timeout to 12 hours #2173 +-- Password generator uses existing password length by default #2318 +-- Improve alert message box button labels #2376 +-- Show message when a database merge makes no changes #2551 +-- Browser Integration Enhancements [#1497, #2253, #1904, #2232, #1850, #2218, #2391, #2396, #2542, #2622, #2637, #2790] +-- Overall Code Improvements [#2316, #2284, #2351, #2402, #2410, #2419, #2422, #2443, #2491, #2506, #2610, #2667, #2709, #2731] +- +-## 2.3.4 (2018-08-21) +- +-- Show all URL schemes in entry view #1768 +-- Disable merge when database is locked #1975 +-- Fix intermittent crashes with favorite icon downloads #1980 +-- Provide potential crash warning to Qt 5.5.x users #2211 +-- Disable apply button when creating new entry/group to prevent data loss #2204 +-- Allow for 12 hour timeout to lock idle database #2173 +-- Multiple SSH Agent fixes [#1981, #2117] +-- Multiple Browser Integration enhancements [#1993, #2003, #2055, #2116, #2159, #2174, #2185] +-- Fix browser proxy application not closing properly #2142 +-- Add real names and Patreon supporters to about dialog #2214 +-- Add settings button to toolbar, Donate button, and Report a Bug button to help menu #2214 +-- Enhancements to release-tool to appsign intermediate build products #2101 +- +- +-## 2.3.3 (2018-05-09) +- +-- Fix crash when browser integration is enabled #1923 +- +-## 2.3.2 (2018-05-07) +- +-- Enable high entropy ASLR on Windows #1747 +-- Enhance favicon fetching #1786 +-- Fix crash on Windows due to autotype #1691 +-- Fix dark tray icon changing all icons #1680 +-- Fix --pw-stdin not using getPassword function #1686 +-- Fix placeholders being resolved in notes #1907 +-- Enable auto-type start delay to be configurable #1908 +-- Browser: Fix native messaging reply size #1719 +-- Browser: Increase maximum buffer size #1720 +-- Browser: Enhance usability and functionality [#1810, #1822, #1830, #1884, #1906] +-- SSH Agent: Parse aes-256-cbc/ctr keys #1682 +-- SSH Agent: Enhance usability and functionality [#1677, #1679, #1681, #1787] +- +-## 2.3.1 (2018-03-06) +- +-- Fix unnecessary automatic upgrade to KDBX 4.0 and prevent challenge-response key being stripped #1568 +-- Abort saving and show an error message when challenge-response fails #1659 +-- Support inner stream protection on all string attributes #1646 +-- Fix favicon downloads not finishing on some websites #1657 +-- Fix freeze due to invalid STDIN data #1628 +-- Correct issue with encrypted RSA SSH keys #1587 +-- Fix crash on macOS due to QTBUG-54832 #1607 +-- Show error message if ssh-agent communication fails #1614 +-- Fix --pw-stdin and filename parameters being ignored #1608 +-- Fix Auto-Type syntax check not allowing spaces and special characters #1626 +-- Fix reference placeholders in combination with Auto-Type #1649 +-- Fix qtbase translations not being loaded #1611 +-- Fix startup crash on Windows due to missing SVG libraries #1662 +-- Correct database tab order regression #1610 +-- Fix GCC 8 compilation error #1612 +-- Fix copying of advanced attributes on KDE #1640 +-- Fix member initialization of CategoryListWidgetDelegate #1613 +-- Fix inconsistent toolbar icon sizes and provide higher-quality icons #1616 +-- Improve preview panel geometry #1609 +- +-## 2.3.0 (2018-02-27) +- +-- Add support for KDBX 4.0, Argon2 and ChaCha20 [#148, #1179, #1230, #1494] +-- Add SSH Agent feature [#1098, #1450, #1463] +-- Add preview panel with details of the selected entry [#879, #1338] +-- Add more and configurable columns to entry table and allow copying of values by double click #1305 +-- Add KeePassXC-Browser API as a replacement for KeePassHTTP #608 +-- Deprecate KeePassHTTP #1392 +-- Add support for Steam one-time passwords #1206 +-- Add support for multiple Auto-Type sequences for a single entry #1390 +-- Adjust YubiKey HMAC-SHA1 challenge-response key generation for KDBX 4.0 #1060 +-- Replace qHttp with cURL for website icon downloads #1460 +-- Remove lock file #1231 +-- Add option to create backup file before saving #1385 +-- Ask to save a generated password before closing the entry password generator #1499 +-- Resolve placeholders recursively #1078 +-- Add Auto-Type button to the toolbar #1056 +-- Improve window focus handling for Auto-Type dialogs [#1204, #1490] +-- Auto-Type dialog and password generator can now be exited with ESC [#1252, #1412] +-- Add optional dark tray icon #1154 +-- Add new "Unsafe saving" option to work around saving problems with file sync services #1385 +-- Add IBus support to AppImage and additional image formats to Windows builds [#1534, #1537] +-- Add diceware password generator to CLI #1406 +-- Add --key-file option to CLI [#816, #824] +-- Add DBus interface for opening and closing KeePassXC databases #283 +-- Add KDBX compression options to database settings #1419 +-- Discourage use of old fixed-length key files in favor of arbitrary files [#1326, #1327] +-- Correct reference resolution in entry fields #1486 +-- Fix window state and recent databases not being remembered on exit #1453 +-- Correct history item generation when configuring TOTP for an entry #1446 +-- Correct multiple TOTP bugs #1414 +-- Automatic saving after every change is now a default #279 +-- Allow creation of new entries during search #1398 +-- Correct menu issues on macOS #1335 +-- Allow compilation on OpenBSD #1328 +-- Improve entry attachments view [#1139, #1298] +-- Fix auto lock for Gnome and Xfce [#910, #1249] +-- Don't remember key files in file dialogs when the setting is disabled #1188 +-- Improve database merging and conflict resolution [#807, #1165] +-- Fix macOS pasteboard issues #1202 +-- Improve startup times on some platforms #1205 +-- Hide the notes field by default #1124 +-- Toggle main window by clicking tray icon with the middle mouse button #992 +-- Fix custom icons not copied over when databases are merged #1008 +-- Allow use of DEL key to delete entries #914 +-- Correct intermittent crash due to stale history items #1527 +-- Sanitize newline characters in title, username and URL fields #1502 +-- Reopen previously opened databases in correct order #774 +-- Use system's zxcvbn library if available #701 +-- Implement various i18n improvements [#690, #875, #1436] +- +-## 2.2.4 (2017-12-13) +- +-- Prevent database corruption when locked #1219 +-- Fixes apply button not saving new entries #1141 +-- Switch to Consolas font on Windows for password edit #1229 +-- Multiple fixes to AppImage deployment [#1115, #1228] +-- Fixes multiple memory leaks #1213 +-- Resize message close to 16x16 pixels #1253 +- +-## 2.2.2 (2017-10-22) +- +-- Fixed entries with empty URLs being reported to KeePassHTTP clients #1031 +-- Fixed YubiKey detection and enabled CLI tool for AppImage binary #1100 +-- Added AppStream description #1082 +-- Improved TOTP compatibility and added new Base32 implementation #1069 +-- Fixed error handling when processing invalid cipher stream #1099 +-- Fixed double warning display when opening a database #1037 +-- Fixed unlocking databases with --pw-stdin #1087 +-- Added ability to override QT_PLUGIN_PATH environment variable for AppImages #1079 +-- Fixed transform seed not being regenerated when saving the database #1068 +-- Fixed only one YubiKey slot being polled #1048 +-- Corrected an issue with entry icons while merging #1008 +-- Corrected desktop and tray icons in Snap package #1030 +-- Fixed screen lock and Google fallback settings #1029 +- +-## 2.2.1 (2017-10-01) +- +-- Corrected multiple snap issues [#934, #1011] +-- Corrected multiple custom icon issues [#708, #719, #994] +-- Corrected multiple Yubikey issues #880 +-- Fixed single instance preventing load on occasion #997 +-- Keep entry history when merging databases #970 +-- Prevent data loss if passwords were mismatched #1007 +-- Fixed crash after merge #941 +-- Added configurable auto-type default delay #703 +-- Unlock database dialog window comes to front #663 +-- Translation and compiling fixes +- +-## 2.2.0 (2017-06-23) +- +-- Added YubiKey 2FA integration for unlocking databases #127 +-- Added TOTP support #519 +-- Added CSV import tool [#146, #490] +-- Added KeePassXC CLI tool #254 +-- Added diceware password generator #373 +-- Added support for entry references [#370, #378] +-- Added support for Twofish encryption #167 +-- Enabled DEP and ASLR for in-memory protection #371 +-- Enabled single instance mode #510 +-- Enabled portable mode #645 +-- Enabled database lock on screensaver and session lock #545 +-- Redesigned welcome screen with common features and recent databases #292 +-- Multiple updates to search behavior [#168, #213, #374, #471, #603, #654] +-- Added auto-type fields {CLEARFIELD}, {SPACE}, {{}, {}} [#267, #427, #480] +-- Fixed auto-type errors on Linux #550 +-- Prompt user prior to executing a cmd:// URL #235 +-- Entry attributes can be protected (hidden) #220 +-- Added extended ascii to password generator #538 +-- Added new database icon to toolbar #289 +-- Added context menu entry to empty recycle bin in databases #520 +-- Added "apply" button to entry and group edit windows #624 +-- Added macOS tray icon and enabled minimize on close #583 +-- Fixed issues with unclean shutdowns [#170, #580] +-- Changed keyboard shortcut to create new database to CTRL+SHIFT+N #515 +-- Compare window title to entry URLs #556 +-- Implemented inline error messages #162 +-- Ignore group expansion and other minor changes when making database "dirty" #464 +-- Updated license and copyright information on souce files #632 +-- Added contributors list to about dialog #629 +- +-## 2.1.4 (2017-04-09) +- +-- Bumped KeePassHTTP version to 1.8.4.2 +-- KeePassHTTP confirmation window comes to foreground #466 +- +-## 2.1.3 (2017-03-03) +- +-- Fix possible overflow in zxcvbn library #363 +-- Revert HiDPI setting to avoid problems on laptop screens #332 +-- Set file meta properties in Windows executable #330 +-- Suppress error message when auto-reloading a locked database #345 +-- Improve usability of question dialog when database is already locked by a different instance #346 +-- Fix compiler warnings in QHttp library #351 +-- Use unified toolbar on Mac OS X #361 +-- Fix an issue on X11 where the main window would be raised instead of closed on Alt+F4 #362 +- +-## 2.1.2 (2017-02-17) +- +-- Ask for save location when creating a new database #302 +-- Remove Libmicrohttpd dependency to clean up the code and ensure better OS X compatibility [#317, #265] +-- Prevent Qt from degrading Wifi network performance on certain platforms #318 +-- Visually refine user interface on OS X and other platforms #299 +-- Remove unusable tray icon setting on OS X #293 +-- Fix compositing glitches on Ubuntu and prevent flashing when minimizing to the tray at startup #307 +-- Fix AppImage tray icon on Ubuntu [#277, #273] +-- Fix global menu disappearing after restoring KeePassXC from the tray on Ubuntu #276 +-- Fix result order in entry search #320 +-- Enable HiDPI scaling on supported platforms #315 +-- Remove empty directories from installation target #282 +- +-## 2.1.1 (2017-02-06) +- +-- Enabled HTTP plugin build; plugin is disabled by default and limited to localhost #147 +-- Escape HTML in dialog boxes #247 +-- Corrected crashes in favicon download and password generator [#233, #226] +-- Increase font size of password meter #228 +-- Fixed compatibility with Qt 5.8 #211 +-- Use consistent button heights in password generator #229 +- +-## 2.1.0 (2017-01-22) +- +-- Show unlock dialog when using autotype on a closed database [#10, #89] +-- Show different tray icon when database is locked [#37, #46] +-- Support autotype on Windows and OS X [#42, #60, #63] +-- Add delay feature to autotype [#76, #77] +-- Add password strength meter [#84, #92] +-- Add option for automatically locking the database when minimizing +- the window #57 +-- Add feature to download favicons and use them as entry icons #30 +-- Automatically reload and merge database when the file changed on +- disk [#22, #33, #93] +-- Add tool for merging two databases [#22, #47, #143] +-- Add --pw-stdin commandline option to unlock the database by providing +- a password on STDIN #54 +-- Add utility script for reading the database password from KWallet #55 +-- Fix some KeePassHTTP settings not being remembered [#34, #65] +-- Make search box persistent [#15, #67, #157] +-- Enhance search feature by scoping the search to selected group [#16, #118] +-- Improve interaction between search field and entry list [#131, #141] +-- Add stand-alone password-generator [#18, #92] +-- Don't require password repetition when password is visible [#27, #92] +-- Add support for entry attributes in autotype sequences #107 +-- Always focus password field when opening the database unlock widget [#116, #117] +-- Fix compilation errors on various platforms [#53, #126, #130] +-- Restructure and improve kdbx-extract utility #160 +- +-## 2.0.3 (2016-09-04) +- +-- Improved error reporting when reading / writing databases fails. [#450, #462] +-- Display an error message when opening a custom icon fails. +-- Detect custom icon format based on contents instead of the filename. #512 +-- Keep symlink intact when saving databases. #442. +-- Fix a crash when deleting parent group of recycle bin. #520 +-- Display a confirm dialog before moving an entry to the recycle bin. #447 +-- Repair UUIDs of inconsistent history items. #130 +-- Only include top-level windows in auto-type window list when using gnome-shell. +-- Update translations. +- +-## 2.0.2 (2016-02-02) +- +-- Fix regression in database writer that caused it to strip certain special +- characters (characters from Unicode plane > 0). +-- Fix bug in repair function that caused it to strip non-ASCII characters. +- +-## 2.0.1 (2016-01-31) +- +-- Flush temporary file before opening attachment. #390 +-- Disable password generator when showing entry in history mode. #422 +-- Strip invalid XML chars when writing databases. #392 +-- Add repair function to fix databases with invalid XML chars. #392 +-- Display custom icons scaled. #322 +-- Allow opening databases that have no password and keyfile. #391 +-- Fix crash when importing .kdb files with invalid icon ids. #425 +-- Update translations. +- +-## 2.0 (2015-12-06) +- +-- Improve UI of the search edit. +-- Clear clipboard when locking databases. #342 +-- Enable Ctrl+M shortcut to minimize the window on all platforms. #329 +-- Show a better message when trying to open an old database format. #338 +-- Fix global auto-type behavior with some window managers. +-- Show global auto-type window on the active desktop. #359 +-- Disable systray on OS X. #326 +-- Restore main window when clicking on the OS X docker icon. #326 +- +-## 2.0 Beta 2 (2015-09-06) +- +-- Fix crash when locking with search UI open #309 +-- Fix file locking on Mac OS X #327 +-- Set default extension when saving a database [#79, #308] +- +-## 2.0 Beta 1 (2015-07-18) +- +-- Remember entry column sizes #159 +-- Add translations +-- Support opening attachments directly +-- Support cmd:// URLs #244 +-- Protect opened databases with a file lock #18 +-- Export to csv files #57 +-- Add optional tray icon #153 +-- Allow setting the default auto-type sequence for groups #175 +-- Make the kdbx parser more lenient +-- Remove --password command line option #285 +- +-## 2.0 Alpha 6 (2014-04-12) +- +-- Add option to lock databases after user inactivity #62 +-- Add compatibility with libgcrypt 1.6 #129 +-- Display passwords in monospace font #51 +-- Use an icon for the button that shows/masks passwords #38 +-- Add an option to show passwords by default #93 +-- Improve password generator design #122 +-- On Linux link .kdbx files with KeePassX +-- Remember window size #154 +-- Disallow global auto-typing when the database is locked +- +-## 2.0 Alpha 5 (2013-12-20) +- +-- Support copying entries and groups using drag'n'drop #74 +-- Open last used databases on startup #36 +-- Made the kdbx file parser more robust +-- Only edit entries on doubleclick (not single) or with enter key +-- Allow removing multiple entries +-- Added option to minimize window when copying data to clipboard +-- Save password generator settings +-- Fixed auto-type producing wrong chars in some keyboard configurations #116 +-- Added some more actions to the toolbar +- +-## 2.0 Alpha 4 (2013-03-29) +- +-- Add random password generator #52 +-- Merge the 'Description' tab into the 'Entry' tab #59 +-- Fix crash when deleting history items #56 +-- Fix crash on Mac OS X Mountain Lion during startup #50 +-- Improved KeePassX application icon #58 +- +-## 2.0 Alpha 3 (2012-10-27) +- +-- Auto-Type on Linux / X11 +-- Database locking +-- Fix database corruption when changing key transformation rounds #34 +-- Verify header data of kdbx files +-- Add menu entry to open URLs in the browser +-- Add menu entry to copy an entry attribute to clipboard +- +-## 2.0 Alpha 2 (2012-07-02) +- +-- Import kdb (KeePass 1) files #2 +-- Display history items #23 +-- Implement history item limits #16 +-- Group and entry icons can be set #22 +-- Add keyboard shortcuts +-- Search in databases #24 +-- Sortable entry view +-- Support building Mac OS X bundles +- +-## 2.0 Alpha 1 (2012-05-07) +- +-- First release. +diff -urNr keepassxc-2.6.4-orig/.clang-format keepassxc-2.6.4-patched/.clang-format +--- keepassxc-2.6.4-orig/.clang-format 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/.clang-format 1970-01-01 01:00:00.000000000 +0100 +@@ -1,88 +0,0 @@ +---- +-Language: Cpp +-AccessModifierOffset: -4 +-AlignAfterOpenBracket: Align +-AlignConsecutiveAssignments: false +-AlignConsecutiveDeclarations: false +-AlignEscapedNewlinesLeft: false +-AlignOperands: true +-AlignTrailingComments: false +-AllowAllParametersOfDeclarationOnNextLine: false +-AllowShortBlocksOnASingleLine: false +-AllowShortCaseLabelsOnASingleLine: false +-AllowShortFunctionsOnASingleLine: None +-AllowShortIfStatementsOnASingleLine: false +-AllowShortLoopsOnASingleLine: false +-AlwaysBreakAfterDefinitionReturnType: None +-AlwaysBreakAfterReturnType: None +-AlwaysBreakBeforeMultilineStrings: false +-AlwaysBreakTemplateDeclarations: false +-BinPackArguments: false +-BinPackParameters: false +-BraceWrapping: +- AfterClass: true +- AfterFunction: true +- AfterControlStatement: false +- AfterEnum: true +- AfterNamespace: true +- AfterStruct: true +- AfterUnion: true +- BeforeCatch: false +- BeforeElse: false +- IndentBraces: false +-BreakBeforeBinaryOperators: NonAssignment +-BreakBeforeBraces: Custom +-BreakBeforeTernaryOperators: true +-BreakConstructorInitializersBeforeComma: true +-ColumnLimit: 120 +-CommentPragmas: '^ IWYU pragma:' +-ConstructorInitializerAllOnOneLineOrOnePerLine: false +-ConstructorInitializerIndentWidth: 4 +-ContinuationIndentWidth: 4 +-Cpp11BracedListStyle: true +-DerivePointerAlignment: false +-DisableFormat: false +-ExperimentalAutoDetectBinPacking: false +-ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ] +-IncludeCategories: +- - Regex: '^"(llvm|llvm-c|clang|clang-c)/' +- Priority: 2 +- - Regex: '^(<|"(gtest|isl|json)/)' +- Priority: 3 +- - Regex: '.*' +- Priority: 1 +-IndentCaseLabels: false +-IndentWidth: 4 +-IndentWrappedFunctionNames: false +-KeepEmptyLinesAtTheStartOfBlocks: true +-MacroBlockBegin: '' +-MacroBlockEnd: '' +-MaxEmptyLinesToKeep: 1 +-NamespaceIndentation: All +-ObjCBlockIndentWidth: 4 +-ObjCSpaceAfterProperty: false +-ObjCSpaceBeforeProtocolList: true +-PenaltyBreakBeforeFirstCallParameter: 19 +-PenaltyBreakComment: 300 +-PenaltyBreakFirstLessLess: 120 +-PenaltyBreakString: 1000 +-PenaltyExcessCharacter: 1000000 +-PenaltyReturnTypeOnItsOwnLine: 60 +-PointerAlignment: Left +-ReflowComments: true +-SortIncludes: true +-SpaceAfterCStyleCast: false +-SpaceBeforeAssignmentOperators: true +-SpaceBeforeParens: ControlStatements +-SpaceInEmptyParentheses: false +-SpacesBeforeTrailingComments: 1 +-SpacesInAngles: false +-SpacesInContainerLiterals: true +-SpacesInCStyleCastParentheses: false +-SpacesInParentheses: false +-SpacesInSquareBrackets: false +-Standard: Cpp11 +-TabWidth: 4 +-UseTab: Never +-... +- +diff -urNr keepassxc-2.6.4-orig/cmake/CLangFormat.cmake keepassxc-2.6.4-patched/cmake/CLangFormat.cmake +--- keepassxc-2.6.4-orig/cmake/CLangFormat.cmake 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/cmake/CLangFormat.cmake 1970-01-01 01:00:00.000000000 +0100 +@@ -1,64 +0,0 @@ +-# Copyright (C) 2017 KeePassXC Team +-# +-# This program is free software: you can redistribute it and/or modify +-# it under the terms of the GNU General Public License as published by +-# the Free Software Foundation, either version 2 or (at your option) +-# version 3 of the License. +-# +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY; without even the implied warranty of +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-# GNU General Public License for more details. +-# +-# You should have received a copy of the GNU General Public License +-# along with this program. If not, see . +- +-set(EXCLUDED_DIRS +- # third-party directories +- src/zxcvbn/ +- # objective-c directories +- src/touchid/ +- src/autotype/mac/ +- src/gui/osutils/macutils/) +- +-set(EXCLUDED_FILES +- # third-party files +- streams/qtiocompressor.cpp +- streams/qtiocompressor.h +- gui/KMessageWidget.h +- gui/KMessageWidget.cpp +- gui/MainWindowAdaptor.h +- gui/MainWindowAdaptor.cpp +- crypto/ssh/bcrypt_pbkdf.cpp +- crypto/ssh/blf.h +- crypto/ssh/blowfish.c +- tests/modeltest.cpp +- tests/modeltest.h +- # objective-c files +- core/ScreenLockListenerMac.h +- core/ScreenLockListenerMac.cpp) +- +-file(GLOB_RECURSE ALL_SOURCE_FILES RELATIVE ${CMAKE_SOURCE_DIR} src/*.cpp src/*.h tests/*.cpp tests/*.h) +-foreach(SOURCE_FILE ${ALL_SOURCE_FILES}) +- foreach(EXCLUDED_DIR ${EXCLUDED_DIRS}) +- string(FIND ${SOURCE_FILE} ${EXCLUDED_DIR} SOURCE_FILE_EXCLUDED) +- if(NOT ${SOURCE_FILE_EXCLUDED} EQUAL -1) +- list(REMOVE_ITEM ALL_SOURCE_FILES ${SOURCE_FILE}) +- endif() +- endforeach() +- foreach(EXCLUDED_FILE ${EXCLUDED_FILES}) +- if(${SOURCE_FILE} MATCHES ".*${EXCLUDED_FILE}$") +- list(REMOVE_ITEM ALL_SOURCE_FILES ${SOURCE_FILE}) +- endif() +- endforeach() +-endforeach() +- +-add_custom_target(format) +-foreach(SOURCE_FILE ${ALL_SOURCE_FILES}) +- add_custom_command( +- TARGET format +- PRE_BUILD +- COMMAND echo Formatting ${SOURCE_FILE} +- COMMAND clang-format -style=file -i \"${SOURCE_FILE}\" +- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) +-endforeach() +diff -urNr keepassxc-2.6.4-orig/cmake/CodeCoverage.cmake keepassxc-2.6.4-patched/cmake/CodeCoverage.cmake +--- keepassxc-2.6.4-orig/cmake/CodeCoverage.cmake 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/cmake/CodeCoverage.cmake 1970-01-01 01:00:00.000000000 +0100 +@@ -1,303 +0,0 @@ +-# Copyright (c) 2012 - 2017, Lars Bilke +-# All rights reserved. +-# +-# Redistribution and use in source and binary forms, with or without modification, +-# are permitted provided that the following conditions are met: +-# +-# 1. Redistributions of source code must retain the above copyright notice, this +-# list of conditions and the following disclaimer. +-# +-# 2. Redistributions in binary form must reproduce the above copyright notice, +-# this list of conditions and the following disclaimer in the documentation +-# and/or other materials provided with the distribution. +-# +-# 3. Neither the name of the copyright holder nor the names of its contributors +-# may be used to endorse or promote products derived from this software without +-# specific prior written permission. +-# +-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +-# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +-# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +-# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +-# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +-# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +-# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +-# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-# +-# CHANGES: +-# +-# 2012-01-31, Lars Bilke +-# - Enable Code Coverage +-# +-# 2013-09-17, Joakim Söderberg +-# - Added support for Clang. +-# - Some additional usage instructions. +-# +-# 2016-02-03, Lars Bilke +-# - Refactored functions to use named parameters +-# +-# 2017-06-02, Lars Bilke +-# - Merged with modified version from github.com/ufz/ogs +-# +-# +-# USAGE: +-# +-# 1. Copy this file into your cmake modules path. +-# +-# 2. Add the following line to your CMakeLists.txt: +-# include(CodeCoverage) +-# +-# 3. Append necessary compiler flags: +-# APPEND_COVERAGE_COMPILER_FLAGS() +-# +-# 4. If you need to exclude additional directories from the report, specify them +-# using the COVERAGE_LCOV_EXCLUDES variable before calling SETUP_TARGET_FOR_COVERAGE_LCOV. +-# Example: +-# set(COVERAGE_LCOV_EXCLUDES 'dir1/*' 'dir2/*') +-# +-# 5. Use the functions described below to create a custom make target which +-# runs your test executable and produces a code coverage report. +-# +-# 6. Build a Debug build: +-# cmake -DCMAKE_BUILD_TYPE=Debug .. +-# make +-# make my_coverage_target +-# +- +-include(CMakeParseArguments) +- +-# Check prereqs +-find_program( GCOV_PATH gcov ) +-find_program( LCOV_PATH NAMES lcov lcov.bat lcov.exe lcov.perl) +-find_program( GENHTML_PATH NAMES genhtml genhtml.perl genhtml.bat ) +-find_program( GCOVR_PATH gcovr PATHS ${CMAKE_SOURCE_DIR}/scripts/test) +-find_program( SIMPLE_PYTHON_EXECUTABLE python ) +- +-if(NOT GCOV_PATH) +- message(FATAL_ERROR "gcov not found! Aborting...") +-endif() # NOT GCOV_PATH +- +-if("${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?[Cc]lang") +- if("${CMAKE_CXX_COMPILER_VERSION}" VERSION_LESS 3) +- message(FATAL_ERROR "Clang version must be 3.0.0 or greater! Aborting...") +- endif() +-elseif(NOT CMAKE_COMPILER_IS_GNUCXX) +- message(FATAL_ERROR "Compiler is not GNU gcc! Aborting...") +-endif() +- +-set(COVERAGE_COMPILER_FLAGS "-g -O0 --coverage -fprofile-arcs -ftest-coverage" +- CACHE INTERNAL "") +- +-set(CMAKE_CXX_FLAGS_COVERAGE +- ${COVERAGE_COMPILER_FLAGS} +- CACHE STRING "Flags used by the C++ compiler during coverage builds." +- FORCE ) +-set(CMAKE_C_FLAGS_COVERAGE +- ${COVERAGE_COMPILER_FLAGS} +- CACHE STRING "Flags used by the C compiler during coverage builds." +- FORCE ) +-set(CMAKE_EXE_LINKER_FLAGS_COVERAGE +- "" +- CACHE STRING "Flags used for linking binaries during coverage builds." +- FORCE ) +-set(CMAKE_SHARED_LINKER_FLAGS_COVERAGE +- "" +- CACHE STRING "Flags used by the shared libraries linker during coverage builds." +- FORCE ) +-mark_as_advanced( +- CMAKE_CXX_FLAGS_COVERAGE +- CMAKE_C_FLAGS_COVERAGE +- CMAKE_EXE_LINKER_FLAGS_COVERAGE +- CMAKE_SHARED_LINKER_FLAGS_COVERAGE ) +- +-if(NOT CMAKE_BUILD_TYPE_LOWER STREQUAL "debug") +- message(WARNING "Code coverage results with an optimised (non-Debug) build may be misleading") +-endif() # NOT CMAKE_BUILD_TYPE STREQUAL "Debug" +- +-if(CMAKE_C_COMPILER_ID STREQUAL "GNU") +- link_libraries(gcov) +-else() +- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage") +-endif() +- +-# Defines a target for running and collection code coverage information +-# Builds dependencies, runs the given executable and outputs reports. +-# NOTE! The executable should always have a ZERO as exit code otherwise +-# the coverage generation will not complete. +-# +-# SETUP_TARGET_FOR_COVERAGE_LCOV( +-# NAME testrunner_coverage # New target name +-# EXECUTABLE testrunner -j ${PROCESSOR_COUNT} # Executable in PROJECT_BINARY_DIR +-# DEPENDENCIES testrunner # Dependencies to build first +-# ) +-function(SETUP_TARGET_FOR_COVERAGE_LCOV) +- +- set(options NONE) +- set(oneValueArgs NAME) +- set(multiValueArgs EXECUTABLE EXECUTABLE_ARGS DEPENDENCIES) +- cmake_parse_arguments(Coverage "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) +- +- if(NOT LCOV_PATH) +- message(FATAL_ERROR "lcov not found! Aborting...") +- endif() # NOT LCOV_PATH +- +- if(NOT GENHTML_PATH) +- message(FATAL_ERROR "genhtml not found! Aborting...") +- endif() # NOT GENHTML_PATH +- +- # Setup target +- add_custom_target(${Coverage_NAME} +- +- # Cleanup lcov +- COMMAND ${LCOV_PATH} --gcov-tool ${GCOV_PATH} -directory . --zerocounters +- # Create baseline to make sure untouched files show up in the report +- COMMAND ${LCOV_PATH} --gcov-tool ${GCOV_PATH} -c -i -d . -o ${Coverage_NAME}.base +- +- # Run tests +- COMMAND ${Coverage_EXECUTABLE} +- +- # Capturing lcov counters and generating report +- COMMAND ${LCOV_PATH} --gcov-tool ${GCOV_PATH} --directory . --capture --output-file ${Coverage_NAME}.info +- # add baseline counters +- COMMAND ${LCOV_PATH} --gcov-tool ${GCOV_PATH} -a ${Coverage_NAME}.base -a ${Coverage_NAME}.info --output-file ${Coverage_NAME}.total +- COMMAND ${LCOV_PATH} --gcov-tool ${GCOV_PATH} --remove ${Coverage_NAME}.total ${COVERAGE_LCOV_EXCLUDES} --output-file ${PROJECT_BINARY_DIR}/${Coverage_NAME}.info.cleaned +- COMMAND ${GENHTML_PATH} -o ${Coverage_NAME} ${PROJECT_BINARY_DIR}/${Coverage_NAME}.info.cleaned +- COMMAND ${CMAKE_COMMAND} -E remove ${Coverage_NAME}.base ${Coverage_NAME}.total ${PROJECT_BINARY_DIR}/${Coverage_NAME}.info.cleaned +- +- WORKING_DIRECTORY ${PROJECT_BINARY_DIR} +- DEPENDS ${Coverage_DEPENDENCIES} +- COMMENT "Resetting code coverage counters to zero.\nProcessing code coverage counters and generating report." +- ) +- +- # Show where to find the lcov info report +- add_custom_command(TARGET ${Coverage_NAME} POST_BUILD +- COMMAND ; +- COMMENT "Lcov code coverage info report saved in ${Coverage_NAME}.info." +- ) +- +- # Show info where to find the report +- add_custom_command(TARGET ${Coverage_NAME} POST_BUILD +- COMMAND ; +- COMMENT "Open ./${Coverage_NAME}/index.html in your browser to view the coverage report." +- ) +- +-endfunction() # SETUP_TARGET_FOR_COVERAGE_LCOV +- +-# Defines a target for running and collection code coverage information +-# Builds dependencies, runs the given executable and outputs reports. +-# NOTE! The executable should always have a ZERO as exit code otherwise +-# the coverage generation will not complete. +-# +-# SETUP_TARGET_FOR_COVERAGE_GCOVR_XML( +-# NAME ctest_coverage # New target name +-# EXECUTABLE ctest -j ${PROCESSOR_COUNT} # Executable in PROJECT_BINARY_DIR +-# DEPENDENCIES executable_target # Dependencies to build first +-# ) +-function(SETUP_TARGET_FOR_COVERAGE_GCOVR_XML) +- +- set(options NONE) +- set(oneValueArgs NAME) +- set(multiValueArgs EXECUTABLE EXECUTABLE_ARGS DEPENDENCIES) +- cmake_parse_arguments(Coverage "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) +- +- if(NOT SIMPLE_PYTHON_EXECUTABLE) +- message(FATAL_ERROR "python not found! Aborting...") +- endif() # NOT SIMPLE_PYTHON_EXECUTABLE +- +- if(NOT GCOVR_PATH) +- message(FATAL_ERROR "gcovr not found! Aborting...") +- endif() # NOT GCOVR_PATH +- +- # Combine excludes to several -e arguments +- set(GCOVR_EXCLUDES "") +- foreach(EXCLUDE ${COVERAGE_GCOVR_EXCLUDES}) +- list(APPEND GCOVR_EXCLUDES "-e") +- list(APPEND GCOVR_EXCLUDES "${EXCLUDE}") +- endforeach() +- +- add_custom_target(${Coverage_NAME} +- # Run tests +- ${Coverage_EXECUTABLE} +- +- # Running gcovr +- COMMAND ${GCOVR_PATH} --xml +- -r ${PROJECT_SOURCE_DIR} ${GCOVR_EXCLUDES} +- --object-directory=${PROJECT_BINARY_DIR} +- -o ${Coverage_NAME}.xml +- WORKING_DIRECTORY ${PROJECT_BINARY_DIR} +- DEPENDS ${Coverage_DEPENDENCIES} +- COMMENT "Running gcovr to produce Cobertura code coverage report." +- ) +- +- # Show info where to find the report +- add_custom_command(TARGET ${Coverage_NAME} POST_BUILD +- COMMAND ; +- COMMENT "Cobertura code coverage report saved in ${Coverage_NAME}.xml." +- ) +- +-endfunction() # SETUP_TARGET_FOR_COVERAGE_GCOVR_XML +- +-# Defines a target for running and collection code coverage information +-# Builds dependencies, runs the given executable and outputs reports. +-# NOTE! The executable should always have a ZERO as exit code otherwise +-# the coverage generation will not complete. +-# +-# SETUP_TARGET_FOR_COVERAGE_GCOVR_HTML( +-# NAME ctest_coverage # New target name +-# EXECUTABLE ctest -j ${PROCESSOR_COUNT} # Executable in PROJECT_BINARY_DIR +-# DEPENDENCIES executable_target # Dependencies to build first +-# ) +-function(SETUP_TARGET_FOR_COVERAGE_GCOVR_HTML) +- +- set(options NONE) +- set(oneValueArgs NAME) +- set(multiValueArgs EXECUTABLE EXECUTABLE_ARGS DEPENDENCIES) +- cmake_parse_arguments(Coverage "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) +- +- if(NOT SIMPLE_PYTHON_EXECUTABLE) +- message(FATAL_ERROR "python not found! Aborting...") +- endif() # NOT SIMPLE_PYTHON_EXECUTABLE +- +- if(NOT GCOVR_PATH) +- message(FATAL_ERROR "gcovr not found! Aborting...") +- endif() # NOT GCOVR_PATH +- +- # Combine excludes to several -e arguments +- set(GCOVR_EXCLUDES "") +- foreach(EXCLUDE ${COVERAGE_GCOVR_EXCLUDES}) +- list(APPEND GCOVR_EXCLUDES "-e") +- list(APPEND GCOVR_EXCLUDES "${EXCLUDE}") +- endforeach() +- +- add_custom_target(${Coverage_NAME} +- # Run tests +- ${Coverage_EXECUTABLE} +- +- # Create folder +- COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/${Coverage_NAME} +- +- # Running gcovr +- COMMAND ${GCOVR_PATH} --html --html-details +- -r ${PROJECT_SOURCE_DIR} ${GCOVR_EXCLUDES} +- --object-directory=${PROJECT_BINARY_DIR} +- -o ${Coverage_NAME}/index.html +- WORKING_DIRECTORY ${PROJECT_BINARY_DIR} +- DEPENDS ${Coverage_DEPENDENCIES} +- COMMENT "Running gcovr to produce HTML code coverage report." +- ) +- +- # Show info where to find the report +- add_custom_command(TARGET ${Coverage_NAME} POST_BUILD +- COMMAND ; +- COMMENT "Open ./${Coverage_NAME}/index.html in your browser to view the coverage report." +- ) +- +-endfunction() # SETUP_TARGET_FOR_COVERAGE_GCOVR_HTML +- +-function(APPEND_COVERAGE_COMPILER_FLAGS) +- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COVERAGE_COMPILER_FLAGS}" PARENT_SCOPE) +- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COVERAGE_COMPILER_FLAGS}" PARENT_SCOPE) +- message(STATUS "Appending code coverage compiler flags: ${COVERAGE_COMPILER_FLAGS}") +-endfunction() # APPEND_COVERAGE_COMPILER_FLAGS +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/cmake/FindArgon2.cmake keepassxc-2.6.4-patched/cmake/FindArgon2.cmake +--- keepassxc-2.6.4-orig/cmake/FindArgon2.cmake 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/cmake/FindArgon2.cmake 1970-01-01 01:00:00.000000000 +0100 +@@ -1,36 +0,0 @@ +-# Copyright (C) 2017 KeePassXC Team +-# +-# This program is free software: you can redistribute it and/or modify +-# it under the terms of the GNU General Public License as published by +-# the Free Software Foundation, either version 2 or (at your option) +-# version 3 of the License. +-# +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY; without even the implied warranty of +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-# GNU General Public License for more details. +-# +-# You should have received a copy of the GNU General Public License +-# along with this program. If not, see . +- +-find_path(ARGON2_INCLUDE_DIR argon2.h) +-if(MINGW) +- # find static library on Windows, and redefine used symbols to +- # avoid definition name conflicts with libsodium +- find_library(ARGON2_SYS_LIBRARIES libargon2.a) +- message(STATUS "Patching libargon2...\n") +- execute_process(COMMAND objcopy +- --redefine-sym argon2_hash=libargon2_argon2_hash +- --redefine-sym _argon2_hash=_libargon2_argon2_hash +- --redefine-sym argon2_error_message=libargon2_argon2_error_message +- --redefine-sym _argon2_error_message=_libargon2_argon2_error_message +- ${ARGON2_SYS_LIBRARIES} ${CMAKE_BINARY_DIR}/libargon2_patched.a +- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) +- find_library(ARGON2_LIBRARIES libargon2_patched.a PATHS ${CMAKE_BINARY_DIR} NO_DEFAULT_PATH) +-else() +- find_library(ARGON2_LIBRARIES argon2) +-endif() +-mark_as_advanced(ARGON2_LIBRARIES ARGON2_INCLUDE_DIR) +- +-include(FindPackageHandleStandardArgs) +-find_package_handle_standard_args(Argon2 DEFAULT_MSG ARGON2_LIBRARIES ARGON2_INCLUDE_DIR) +diff -urNr keepassxc-2.6.4-orig/cmake/FindGcrypt.cmake keepassxc-2.6.4-patched/cmake/FindGcrypt.cmake +--- keepassxc-2.6.4-orig/cmake/FindGcrypt.cmake 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/cmake/FindGcrypt.cmake 1970-01-01 01:00:00.000000000 +0100 +@@ -1,31 +0,0 @@ +-# Copyright (C) 2011 Felix Geyer +-# +-# This program is free software: you can redistribute it and/or modify +-# it under the terms of the GNU General Public License as published by +-# the Free Software Foundation, either version 2 or (at your option) +-# version 3 of the License. +-# +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY; without even the implied warranty of +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-# GNU General Public License for more details. +-# +-# You should have received a copy of the GNU General Public License +-# along with this program. If not, see . +- +-find_path(GCRYPT_INCLUDE_DIR gcrypt.h) +- +-find_library(GCRYPT_LIBRARIES gcrypt) +- +-mark_as_advanced(GCRYPT_LIBRARIES GCRYPT_INCLUDE_DIR) +- +-if(GCRYPT_INCLUDE_DIR AND EXISTS "${GCRYPT_INCLUDE_DIR}/gcrypt.h") +- file(STRINGS "${GCRYPT_INCLUDE_DIR}/gcrypt.h" GCRYPT_H REGEX "^#define GCRYPT_VERSION \"[^\"]*\"$") +- string(REGEX REPLACE "^.*GCRYPT_VERSION \"([0-9]+).*$" "\\1" GCRYPT_VERSION_MAJOR "${GCRYPT_H}") +- string(REGEX REPLACE "^.*GCRYPT_VERSION \"[0-9]+\\.([0-9]+).*$" "\\1" GCRYPT_VERSION_MINOR "${GCRYPT_H}") +- string(REGEX REPLACE "^.*GCRYPT_VERSION \"[0-9]+\\.[0-9]+\\.([0-9]+).*$" "\\1" GCRYPT_VERSION_PATCH "${GCRYPT_H}") +- set(GCRYPT_VERSION_STRING "${GCRYPT_VERSION_MAJOR}.${GCRYPT_VERSION_MINOR}.${GCRYPT_VERSION_PATCH}") +-endif() +- +-include(FindPackageHandleStandardArgs) +-find_package_handle_standard_args(Gcrypt DEFAULT_MSG GCRYPT_LIBRARIES GCRYPT_INCLUDE_DIR) +diff -urNr keepassxc-2.6.4-orig/cmake/FindLibGPGError.cmake keepassxc-2.6.4-patched/cmake/FindLibGPGError.cmake +--- keepassxc-2.6.4-orig/cmake/FindLibGPGError.cmake 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/cmake/FindLibGPGError.cmake 1970-01-01 01:00:00.000000000 +0100 +@@ -1,23 +0,0 @@ +-# Copyright (C) 2017 KeePassXC Team +-# +-# This program is free software: you can redistribute it and/or modify +-# it under the terms of the GNU General Public License as published by +-# the Free Software Foundation, either version 2 or (at your option) +-# version 3 of the License. +-# +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY; without even the implied warranty of +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-# GNU General Public License for more details. +-# +-# You should have received a copy of the GNU General Public License +-# along with this program. If not, see . +- +-find_path(GPGERROR_INCLUDE_DIR gpg-error.h) +-find_library(GPGERROR_LIBRARIES gpg-error) +- +-mark_as_advanced(GPGERROR_LIBRARIES GPGERROR_INCLUDE_DIR) +- +-include(FindPackageHandleStandardArgs) +-include_directories(${GPGERROR_INCLUDE_DIR}) +-find_package_handle_standard_args(LibGPGError DEFAULT_MSG GPGERROR_LIBRARIES GPGERROR_INCLUDE_DIR) +diff -urNr keepassxc-2.6.4-orig/cmake/FindQREncode.cmake keepassxc-2.6.4-patched/cmake/FindQREncode.cmake +--- keepassxc-2.6.4-orig/cmake/FindQREncode.cmake 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/cmake/FindQREncode.cmake 1970-01-01 01:00:00.000000000 +0100 +@@ -1,22 +0,0 @@ +-# Copyright (C) 2017 KeePassXC Team +-# +-# This program is free software: you can redistribute it and/or modify +-# it under the terms of the GNU General Public License as published by +-# the Free Software Foundation, either version 2 or (at your option) +-# version 3 of the License. +-# +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY; without even the implied warranty of +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-# GNU General Public License for more details. +-# +-# You should have received a copy of the GNU General Public License +-# along with this program. If not, see . +- +-find_path(QRENCODE_INCLUDE_DIR qrencode.h) +-find_library(QRENCODE_LIBRARY qrencode) +- +-mark_as_advanced(QRENCODE_LIBRARY QRENCODE_INCLUDE_DIR) +- +-include(FindPackageHandleStandardArgs) +-find_package_handle_standard_args(QREncode DEFAULT_MSG QRENCODE_LIBRARY QRENCODE_INCLUDE_DIR) +diff -urNr keepassxc-2.6.4-orig/cmake/FindQuaZip.cmake keepassxc-2.6.4-patched/cmake/FindQuaZip.cmake +--- keepassxc-2.6.4-orig/cmake/FindQuaZip.cmake 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/cmake/FindQuaZip.cmake 1970-01-01 01:00:00.000000000 +0100 +@@ -1,24 +0,0 @@ +-# QUAZIP_FOUND - QuaZip library was found +-# QUAZIP_INCLUDE_DIR - Path to QuaZip include dir +-# QUAZIP_INCLUDE_DIRS - Path to QuaZip and zlib include dir (combined from QUAZIP_INCLUDE_DIR + ZLIB_INCLUDE_DIR) +-# QUAZIP_LIBRARIES - List of QuaZip libraries +-# QUAZIP_ZLIB_INCLUDE_DIR - The include dir of zlib headers +- +-if(MINGW) +- find_library(QUAZIP_LIBRARIES libquazip5) +- find_path(QUAZIP_INCLUDE_DIR quazip.h PATH_SUFFIXES quazip5) +- find_path(QUAZIP_ZLIB_INCLUDE_DIR zlib.h) +-else() +- find_library(QUAZIP_LIBRARIES +- NAMES quazip5 quazip +- PATHS /usr/lib /usr/lib64 /usr/local/lib +- ) +- find_path(QUAZIP_INCLUDE_DIR quazip.h +- PATHS /usr/include /usr/local/include +- PATH_SUFFIXES quazip5 quazip +- ) +- find_path(QUAZIP_ZLIB_INCLUDE_DIR zlib.h PATHS /usr/include /usr/local/include) +-endif() +-include(FindPackageHandleStandardArgs) +-set(QUAZIP_INCLUDE_DIRS ${QUAZIP_INCLUDE_DIR} ${QUAZIP_ZLIB_INCLUDE_DIR}) +-find_package_handle_standard_args(QUAZIP DEFAULT_MSG QUAZIP_LIBRARIES QUAZIP_INCLUDE_DIR QUAZIP_ZLIB_INCLUDE_DIR QUAZIP_INCLUDE_DIRS) +diff -urNr keepassxc-2.6.4-orig/cmake/FindReadline.cmake keepassxc-2.6.4-patched/cmake/FindReadline.cmake +--- keepassxc-2.6.4-orig/cmake/FindReadline.cmake 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/cmake/FindReadline.cmake 1970-01-01 01:00:00.000000000 +0100 +@@ -1,50 +0,0 @@ +-# Code copied from sethhall@github +-# +-# - Try to find readline include dirs and libraries +-# +-# Usage of this module as follows: +-# +-# find_package(Readline) +-# +-# Variables used by this module, they can change the default behaviour and need +-# to be set before calling find_package: +-# +-# Readline_ROOT_DIR Set this variable to the root installation of +-# readline if the module has problems finding the +-# proper installation path. +-# +-# Variables defined by this module: +-# +-# READLINE_FOUND System has readline, include and lib dirs found +-# Readline_INCLUDE_DIR The readline include directories. +-# Readline_LIBRARY The readline library. +- +-find_path(Readline_ROOT_DIR +- NAMES include/readline/readline.h +-) +- +-find_path(Readline_INCLUDE_DIR +- NAMES readline/readline.h +- HINTS ${Readline_ROOT_DIR}/include +-) +- +-find_library(Readline_LIBRARY +- NAMES readline +- HINTS ${Readline_ROOT_DIR}/lib +-) +- +-if(Readline_INCLUDE_DIR AND Readline_LIBRARY AND Ncurses_LIBRARY) +- set(READLINE_FOUND TRUE) +-else(Readline_INCLUDE_DIR AND Readline_LIBRARY AND Ncurses_LIBRARY) +- find_library(Readline_LIBRARY NAMES readline) +- include(FindPackageHandleStandardArgs) +- find_package_handle_standard_args(Readline DEFAULT_MSG Readline_INCLUDE_DIR Readline_LIBRARY ) +- mark_as_advanced(Readline_INCLUDE_DIR Readline_LIBRARY) +-endif(Readline_INCLUDE_DIR AND Readline_LIBRARY AND Ncurses_LIBRARY) +- +-mark_as_advanced( +- Readline_ROOT_DIR +- Readline_INCLUDE_DIR +- Readline_LIBRARY +-) +- +diff -urNr keepassxc-2.6.4-orig/cmake/Findsodium.cmake keepassxc-2.6.4-patched/cmake/Findsodium.cmake +--- keepassxc-2.6.4-orig/cmake/Findsodium.cmake 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/cmake/Findsodium.cmake 1970-01-01 01:00:00.000000000 +0100 +@@ -1,267 +0,0 @@ +-# Written in 2016 by Henrik Steffen Gaßmann +-# +-# To the extent possible under law, the author(s) have dedicated all +-# copyright and related and neighboring rights to this software to the +-# public domain worldwide. This software is distributed without any warranty. +-# +-# You should have received a copy of the CC0 Public Domain Dedication +-# along with this software. If not, see +-# +-# http://creativecommons.org/publicdomain/zero/1.0/ +-# +-######################################################################## +-# Tries to find the local libsodium installation. +-# +-# On Windows the sodium_DIR environment variable is used as a default +-# hint which can be overridden by setting the corresponding cmake variable. +-# +-# Once done the following variables will be defined: +-# +-# sodium_FOUND +-# sodium_INCLUDE_DIR +-# sodium_LIBRARY_DEBUG +-# sodium_LIBRARY_RELEASE +-# +-# +-# Furthermore an imported "sodium" target is created. +-# +- +-if (CMAKE_C_COMPILER_ID STREQUAL "GNU" +- OR CMAKE_C_COMPILER_ID STREQUAL "Clang") +- set(_GCC_COMPATIBLE 1) +-endif() +- +-# static library option +-option(sodium_USE_STATIC_LIBS "enable to statically link against sodium") +-if(NOT (sodium_USE_STATIC_LIBS EQUAL sodium_USE_STATIC_LIBS_LAST)) +- unset(sodium_LIBRARY CACHE) +- unset(sodium_LIBRARY_DEBUG CACHE) +- unset(sodium_LIBRARY_RELEASE CACHE) +- unset(sodium_DLL_DEBUG CACHE) +- unset(sodium_DLL_RELEASE CACHE) +- set(sodium_USE_STATIC_LIBS_LAST ${sodium_USE_STATIC_LIBS} CACHE INTERNAL "internal change tracking variable") +-endif() +- +- +-######################################################################## +-# UNIX +-if (UNIX) +- # import pkg-config +- find_package(PkgConfig QUIET) +- if (PKG_CONFIG_FOUND) +- pkg_check_modules(sodium_PKG QUIET libsodium) +- endif() +- +- if(sodium_USE_STATIC_LIBS) +- set(XPREFIX sodium_PKG_STATIC) +- else() +- set(XPREFIX sodium_PKG) +- endif() +- +- find_path(sodium_INCLUDE_DIR sodium.h +- HINTS ${${XPREFIX}_INCLUDE_DIRS} +- ) +- find_library(sodium_LIBRARY_DEBUG NAMES ${${XPREFIX}_LIBRARIES} sodium +- HINTS ${${XPREFIX}_LIBRARY_DIRS} +- ) +- find_library(sodium_LIBRARY_RELEASE NAMES ${${XPREFIX}_LIBRARIES} sodium +- HINTS ${${XPREFIX}_LIBRARY_DIRS} +- ) +- +- +-######################################################################## +-# Windows +-elseif (WIN32) +- set(sodium_DIR "$ENV{sodium_DIR}" CACHE FILEPATH "sodium install directory") +- mark_as_advanced(sodium_DIR) +- +- find_path(sodium_INCLUDE_DIR sodium.h +- HINTS ${sodium_DIR} +- PATH_SUFFIXES include +- ) +- +- if (MSVC) +- # detect target architecture +- file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/arch.c" [=[ +- #if defined _M_IX86 +- #error ARCH_VALUE x86_32 +- #elif defined _M_X64 +- #error ARCH_VALUE x86_64 +- #endif +- #error ARCH_VALUE unknown +- ]=]) +- try_compile(_UNUSED_VAR "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/arch.c" +- OUTPUT_VARIABLE _COMPILATION_LOG +- ) +- string(REGEX REPLACE ".*ARCH_VALUE ([a-zA-Z0-9_]+).*" "\\1" _TARGET_ARCH "${_COMPILATION_LOG}") +- +- # construct library path +- if (_TARGET_ARCH STREQUAL "x86_32") +- string(APPEND _PLATFORM_PATH "Win32") +- elseif(_TARGET_ARCH STREQUAL "x86_64") +- string(APPEND _PLATFORM_PATH "x64") +- else() +- message(FATAL_ERROR "the ${_TARGET_ARCH} architecture is not supported by Findsodium.cmake.") +- endif() +- string(APPEND _PLATFORM_PATH "/$$CONFIG$$") +- +- if (MSVC_VERSION LESS 1900) +- math(EXPR _VS_VERSION "${MSVC_VERSION} / 10 - 60") +- else() +- math(EXPR _VS_VERSION "${MSVC_VERSION} / 10 - 50") +- endif() +- string(APPEND _PLATFORM_PATH "/v${_VS_VERSION}") +- +- if (sodium_USE_STATIC_LIBS) +- string(APPEND _PLATFORM_PATH "/static") +- else() +- string(APPEND _PLATFORM_PATH "/dynamic") +- endif() +- +- string(REPLACE "$$CONFIG$$" "Debug" _DEBUG_PATH_SUFFIX "${_PLATFORM_PATH}") +- string(REPLACE "$$CONFIG$$" "Release" _RELEASE_PATH_SUFFIX "${_PLATFORM_PATH}") +- +- find_library(sodium_LIBRARY_DEBUG libsodium.lib +- HINTS ${sodium_DIR} +- PATH_SUFFIXES ${_DEBUG_PATH_SUFFIX} +- ) +- find_library(sodium_LIBRARY_RELEASE libsodium.lib +- HINTS ${sodium_DIR} +- PATH_SUFFIXES ${_RELEASE_PATH_SUFFIX} +- ) +- if (NOT sodium_USE_STATIC_LIBS) +- set(CMAKE_FIND_LIBRARY_SUFFIXES ".dll") +- find_library(sodium_DLL_DEBUG libsodium +- HINTS ${sodium_DIR} +- PATH_SUFFIXES ${_DEBUG_PATH_SUFFIX} +- ) +- find_library(sodium_DLL_RELEASE libsodium +- HINTS ${sodium_DIR} +- PATH_SUFFIXES ${_RELEASE_PATH_SUFFIX} +- ) +- endif() +- +- elseif(_GCC_COMPATIBLE) +- if (sodium_USE_STATIC_LIBS) +- find_library(sodium_LIBRARY_DEBUG libsodium.a +- HINTS ${sodium_DIR} +- PATH_SUFFIXES lib +- ) +- find_library(sodium_LIBRARY_RELEASE libsodium.a +- HINTS ${sodium_DIR} +- PATH_SUFFIXES lib +- ) +- else() +- find_library(sodium_LIBRARY_DEBUG libsodium.dll.a +- HINTS ${sodium_DIR} +- PATH_SUFFIXES lib +- ) +- find_library(sodium_LIBRARY_RELEASE libsodium.dll.a +- HINTS ${sodium_DIR} +- PATH_SUFFIXES lib +- ) +- +- file(GLOB _DLL +- LIST_DIRECTORIES false +- RELATIVE "${sodium_DIR}/bin" +- "${sodium_DIR}/bin/libsodium*.dll" +- ) +- find_library(sodium_DLL_DEBUG ${_DLL} libsodium +- HINTS ${sodium_DIR} +- PATH_SUFFIXES bin +- ) +- find_library(sodium_DLL_RELEASE ${_DLL} libsodium +- HINTS ${sodium_DIR} +- PATH_SUFFIXES bin +- ) +- endif() +- else() +- message(FATAL_ERROR "this platform is not supported by FindSodium.cmake") +- endif() +- +- +-######################################################################## +-# unsupported +-else() +- message(FATAL_ERROR "this platform is not supported by FindSodium.cmake") +-endif() +- +- +-######################################################################## +-# common stuff +- +-# extract sodium version +-if (sodium_INCLUDE_DIR) +- set(_VERSION_HEADER "${_INCLUDE_DIR}/sodium/version.h") +- if (EXISTS _VERSION_HEADER) +- file(READ "${_VERSION_HEADER}" _VERSION_HEADER_CONTENT) +- string(REGEX REPLACE ".*#[ \t]*define[ \t]*SODIUM_VERSION_STRING[ \t]*\"([^\n]*)\".*" "\\1" +- sodium_VERSION "${_VERSION_HEADER_CONTENT}") +- set(sodium_VERSION "${sodium_VERSION}" PARENT_SCOPE) +- endif() +-endif() +- +-# communicate results +-include(FindPackageHandleStandardArgs) +-find_package_handle_standard_args(sodium +- REQUIRED_VARS +- sodium_LIBRARY_RELEASE +- sodium_LIBRARY_DEBUG +- sodium_INCLUDE_DIR +- VERSION_VAR +- sodium_VERSION +-) +- +-# mark file paths as advanced +-mark_as_advanced(sodium_INCLUDE_DIR) +-mark_as_advanced(sodium_LIBRARY_DEBUG) +-mark_as_advanced(sodium_LIBRARY_RELEASE) +-if (WIN32) +- mark_as_advanced(sodium_DLL_DEBUG) +- mark_as_advanced(sodium_DLL_RELEASE) +-endif() +- +-# create imported target +-if(sodium_USE_STATIC_LIBS) +- set(_LIB_TYPE STATIC) +-else() +- set(_LIB_TYPE SHARED) +-endif() +-add_library(sodium ${_LIB_TYPE} IMPORTED) +- +-set_target_properties(sodium PROPERTIES +- INTERFACE_INCLUDE_DIRECTORIES "${sodium_INCLUDE_DIR}" +- IMPORTED_LINK_INTERFACE_LANGUAGES "C" +-) +- +-if (sodium_USE_STATIC_LIBS) +- set_target_properties(sodium PROPERTIES +- INTERFACE_COMPILE_DEFINITIONS "SODIUM_STATIC" +- IMPORTED_LOCATION "${sodium_LIBRARY_RELEASE}" +- IMPORTED_LOCATION_DEBUG "${sodium_LIBRARY_DEBUG}" +- ) +-else() +- if (UNIX) +- set_target_properties(sodium PROPERTIES +- IMPORTED_LOCATION "${sodium_LIBRARY_RELEASE}" +- IMPORTED_LOCATION_DEBUG "${sodium_LIBRARY_DEBUG}" +- ) +- elseif (WIN32) +- set_target_properties(sodium PROPERTIES +- IMPORTED_IMPLIB "${sodium_LIBRARY_RELEASE}" +- IMPORTED_IMPLIB_DEBUG "${sodium_LIBRARY_DEBUG}" +- ) +- if (NOT (sodium_DLL_DEBUG MATCHES ".*-NOTFOUND")) +- set_target_properties(sodium PROPERTIES +- IMPORTED_LOCATION_DEBUG "${sodium_DLL_DEBUG}" +- ) +- endif() +- if (NOT (sodium_DLL_RELEASE MATCHES ".*-NOTFOUND")) +- set_target_properties(sodium PROPERTIES +- IMPORTED_LOCATION_RELWITHDEBINFO "${sodium_DLL_RELEASE}" +- IMPORTED_LOCATION_MINSIZEREL "${sodium_DLL_RELEASE}" +- IMPORTED_LOCATION_RELEASE "${sodium_DLL_RELEASE}" +- ) +- endif() +- endif() +-endif() +diff -urNr keepassxc-2.6.4-orig/cmake/FindYubiKey.cmake keepassxc-2.6.4-patched/cmake/FindYubiKey.cmake +--- keepassxc-2.6.4-orig/cmake/FindYubiKey.cmake 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/cmake/FindYubiKey.cmake 1970-01-01 01:00:00.000000000 +0100 +@@ -1,27 +0,0 @@ +-# Copyright (C) 2014 Kyle Manna +-# +-# This program is free software: you can redistribute it and/or modify +-# it under the terms of the GNU General Public License as published by +-# the Free Software Foundation, either version 2 or (at your option) +-# version 3 of the License. +-# +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY; without even the implied warranty of +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-# GNU General Public License for more details. +-# +-# You should have received a copy of the GNU General Public License +-# along with this program. If not, see . +- +-find_path(YUBIKEY_CORE_INCLUDE_DIR yubikey.h) +-find_path(YUBIKEY_PERS_INCLUDE_DIR ykcore.h PATH_SUFFIXES ykpers-1) +-set(YUBIKEY_INCLUDE_DIRS ${YUBIKEY_CORE_INCLUDE_DIR} ${YUBIKEY_PERS_INCLUDE_DIR}) +- +-find_library(YUBIKEY_CORE_LIBRARY NAMES yubikey.dll libyubikey.so yubikey) +-find_library(YUBIKEY_PERS_LIBRARY NAMES ykpers-1.dll libykpers-1.so ykpers-1) +-set(YUBIKEY_LIBRARIES ${YUBIKEY_CORE_LIBRARY} ${YUBIKEY_PERS_LIBRARY}) +- +-include(FindPackageHandleStandardArgs) +-find_package_handle_standard_args(YubiKey DEFAULT_MSG YUBIKEY_LIBRARIES YUBIKEY_INCLUDE_DIRS) +- +-mark_as_advanced(YUBIKEY_LIBRARIES YUBIKEY_INCLUDE_DIRS) +diff -urNr keepassxc-2.6.4-orig/cmake/GenerateProductVersion.cmake keepassxc-2.6.4-patched/cmake/GenerateProductVersion.cmake +--- keepassxc-2.6.4-orig/cmake/GenerateProductVersion.cmake 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/cmake/GenerateProductVersion.cmake 1970-01-01 01:00:00.000000000 +0100 +@@ -1,118 +0,0 @@ +-# The MIT License (MIT) +-# +-# Copyright (c) 2015, by [halex2005](mailto:akharlov@gmail.com) +-# +-# Permission is hereby granted, free of charge, to any person obtaining a copy of +-# this software and associated documentation files (the "Software"), to deal in +-# the Software without restriction, including without limitation the rights to +-# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +-# the Software, and to permit persons to whom the Software is furnished to do so, +-# subject to the following conditions: +-# +-# The above copyright notice and this permission notice shall be included in all +-# copies or substantial portions of the Software. +-# +-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +-# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +-# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +-# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +-# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +- +- +-include (CMakeParseArguments) +- +-set (GenerateProductVersionCurrentDir ${CMAKE_CURRENT_LIST_DIR}) +- +-# generate_product_version() function +-# +-# This function uses VersionInfo.in template file and VersionResource.rc file +-# to generate WIN32 resource with version information and general resource strings. +-# +-# Usage: +-# generate_product_version( +-# SomeOutputResourceVariable +-# NAME MyGreatProject +-# ICON ${PATH_TO_APP_ICON} +-# VERSION_MAJOR 2 +-# VERSION_MINOR 3 +-# VERSION_PATH ${BUILD_COUNTER} +-# VERSION_REVISION ${BUILD_REVISION} +-# ) +-# where BUILD_COUNTER and BUILD_REVISION could be values from your CI server. +-# +-# You can use generated resource for your executable targets: +-# add_executable(target-name ${target-files} ${SomeOutputResourceVariable}) +-# +-# You can specify resource strings in arguments: +-# NAME - name of executable (no defaults, ex: Microsoft Word) +-# BUNDLE - bundle (${NAME} is default, ex: Microsoft Office) +-# VERSION_MAJOR - 1 is default +-# VERSION_MINOR - 0 is default +-# VERSION_PATCH - 0 is default +-# COMPANY_NAME - your company name (no defaults) +-# COMPANY_COPYRIGHT - ${COMPANY_NAME} (C) Copyright ${CURRENT_YEAR} is default +-# COMMENTS - ${NAME} v${VERSION_MAJOR}.${VERSION_MINOR} is default +-# ORIGINAL_FILENAME - ${NAME} is default +-# INTERNAL_NAME - ${NAME} is default +-# FILE_DESCRIPTION - ${NAME} is default +-function(generate_product_version outfiles) +- set (options) +- set (oneValueArgs +- NAME +- BUNDLE +- VERSION_MAJOR +- VERSION_MINOR +- VERSION_PATCH +- COMPANY_NAME +- COMPANY_COPYRIGHT +- COMMENTS +- ORIGINAL_FILENAME +- INTERNAL_NAME +- FILE_DESCRIPTION) +- set (multiValueArgs) +- cmake_parse_arguments(PRODUCT "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) +- +- if (NOT PRODUCT_BUNDLE OR "${PRODUCT_BUNDLE}" STREQUAL "") +- set(PRODUCT_BUNDLE "${PRODUCT_NAME}") +- endif() +- if (NOT PRODUCT_VERSION_MAJOR OR "${PRODUCT_VERSION_MAJOR}" STREQUAL "") +- set(PRODUCT_VERSION_MAJOR 1) +- endif() +- if (NOT PRODUCT_VERSION_MINOR OR "${PRODUCT_VERSION_MINOR}" STREQUAL "") +- set(PRODUCT_VERSION_MINOR 0) +- endif() +- if (NOT PRODUCT_VERSION_PATCH OR "${PRODUCT_VERSION_PATCH}" STREQUAL "") +- set(PRODUCT_VERSION_PATCH 0) +- endif() +- +- if (NOT PRODUCT_COMPANY_COPYRIGHT OR "${PRODUCT_COMPANY_COPYRIGHT}" STREQUAL "") +- string(TIMESTAMP PRODUCT_CURRENT_YEAR "%Y") +- set(PRODUCT_COMPANY_COPYRIGHT "Copyright (C) ${PRODUCT_CURRENT_YEAR} ${PRODUCT_COMPANY_NAME}") +- endif() +- if (NOT PRODUCT_COMMENTS OR "${PRODUCT_COMMENTS}" STREQUAL "") +- set(PRODUCT_COMMENTS "${PRODUCT_NAME} v${PRODUCT_VERSION_MAJOR}.${PRODUCT_VERSION_MINOR}.${PRODUCT_VERSION_PATCH}") +- endif() +- if (NOT PRODUCT_ORIGINAL_FILENAME OR "${PRODUCT_ORIGINAL_FILENAME}" STREQUAL "") +- set(PRODUCT_ORIGINAL_FILENAME "${PRODUCT_NAME}") +- endif() +- if (NOT PRODUCT_INTERNAL_NAME OR "${PRODUCT_INTERNAL_NAME}" STREQUAL "") +- set(PRODUCT_INTERNAL_NAME "${PRODUCT_NAME}") +- endif() +- if (NOT PRODUCT_FILE_DESCRIPTION OR "${PRODUCT_FILE_DESCRIPTION}" STREQUAL "") +- set(PRODUCT_FILE_DESCRIPTION "${PRODUCT_NAME}") +- endif() +- +- set (_VersionInfoFile ${CMAKE_CURRENT_BINARY_DIR}/VersionInfo.h) +- set (_VersionResourceFile ${CMAKE_CURRENT_BINARY_DIR}/VersionResource.rc) +- configure_file( +- ${GenerateProductVersionCurrentDir}/VersionInfo.in +- ${_VersionInfoFile} +- @ONLY) +- configure_file( +- ${GenerateProductVersionCurrentDir}/VersionResource.rc +- ${_VersionResourceFile} +- COPYONLY) +- list(APPEND ${outfiles} ${_VersionInfoFile} ${_VersionResourceFile}) +- set (${outfiles} ${${outfiles}} PARENT_SCOPE) +-endfunction() +diff -urNr keepassxc-2.6.4-orig/cmake/VersionInfo.in keepassxc-2.6.4-patched/cmake/VersionInfo.in +--- keepassxc-2.6.4-orig/cmake/VersionInfo.in 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/cmake/VersionInfo.in 1970-01-01 01:00:00.000000000 +0100 +@@ -1,68 +0,0 @@ +-#pragma once +- +-#ifndef PRODUCT_VERSION_MAJOR +-#define PRODUCT_VERSION_MAJOR @PRODUCT_VERSION_MAJOR@ +-#endif +- +-#ifndef PRODUCT_VERSION_MINOR +-#define PRODUCT_VERSION_MINOR @PRODUCT_VERSION_MINOR@ +-#endif +- +-#ifndef PRODUCT_VERSION_PATCH +-#define PRODUCT_VERSION_PATCH @PRODUCT_VERSION_PATCH@ +-#endif +- +-#ifndef FILE_VERSION_MAJOR +-#define FILE_VERSION_MAJOR @PRODUCT_VERSION_MAJOR@ +-#endif +- +-#ifndef FILE_VERSION_MINOR +-#define FILE_VERSION_MINOR @PRODUCT_VERSION_MINOR@ +-#endif +- +-#ifndef FILE_VERSION_PATCH +-#define FILE_VERSION_PATCH @PRODUCT_VERSION_PATCH@ +-#endif +- +-#ifndef __TO_STRING +-#define __TO_STRING_IMPL(x) #x +-#define __TO_STRING(x) __TO_STRING_IMPL(x) +-#endif +- +-#define PRODUCT_VERSION_MAJOR_MINOR_STR __TO_STRING(PRODUCT_VERSION_MAJOR) "." __TO_STRING(PRODUCT_VERSION_MINOR) +-#define PRODUCT_VERSION_MAJOR_MINOR_PATCH_STR PRODUCT_VERSION_MAJOR_MINOR_STR "." __TO_STRING(PRODUCT_VERSION_PATCH) +-#define PRODUCT_VERSION_RESOURCE PRODUCT_VERSION_MAJOR,PRODUCT_VERSION_MINOR,PRODUCT_VERSION_PATCH,0 +-#define PRODUCT_VERSION_RESOURCE_STR PRODUCT_VERSION_MAJOR_MINOR_PATCH_STR "\0" +- +-#define FILE_VERSION_MAJOR_MINOR_STR __TO_STRING(FILE_VERSION_MAJOR) "." __TO_STRING(FILE_VERSION_MINOR) +-#define FILE_VERSION_MAJOR_MINOR_PATCH_STR FILE_VERSION_MAJOR_MINOR_STR "." __TO_STRING(FILE_VERSION_PATCH) +-#define FILE_VERSION_RESOURCE FILE_VERSION_MAJOR,FILE_VERSION_MINOR,FILE_VERSION_PATCH,0 +-#define FILE_VERSION_RESOURCE_STR FILE_VERSION_MAJOR_MINOR_PATCH_STR "\0" +- +-#ifndef PRODUCT_COMMENTS +-#define PRODUCT_COMMENTS "@PRODUCT_COMMENTS@\0" +-#endif +- +-#ifndef PRODUCT_COMPANY_NAME +-#define PRODUCT_COMPANY_NAME "@PRODUCT_COMPANY_NAME@\0" +-#endif +- +-#ifndef PRODUCT_COMPANY_COPYRIGHT +-#define PRODUCT_COMPANY_COPYRIGHT "@PRODUCT_COMPANY_COPYRIGHT@\0" +-#endif +- +-#ifndef PRODUCT_FILE_DESCRIPTION +-#define PRODUCT_FILE_DESCRIPTION "@PRODUCT_FILE_DESCRIPTION@\0" +-#endif +- +-#ifndef PRODUCT_INTERNAL_NAME +-#define PRODUCT_INTERNAL_NAME "@PRODUCT_NAME@\0" +-#endif +- +-#ifndef PRODUCT_ORIGINAL_FILENAME +-#define PRODUCT_ORIGINAL_FILENAME "@PRODUCT_ORIGINAL_FILENAME@\0" +-#endif +- +-#ifndef PRODUCT_BUNDLE +-#define PRODUCT_BUNDLE "@PRODUCT_BUNDLE@\0" +-#endif +diff -urNr keepassxc-2.6.4-orig/cmake/VersionResource.rc keepassxc-2.6.4-patched/cmake/VersionResource.rc +--- keepassxc-2.6.4-orig/cmake/VersionResource.rc 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/cmake/VersionResource.rc 1970-01-01 01:00:00.000000000 +0100 +@@ -1,36 +0,0 @@ +-#include "VersionInfo.h" +-#include "winresrc.h" +- +-VS_VERSION_INFO VERSIONINFO +- FILEVERSION FILE_VERSION_RESOURCE +- PRODUCTVERSION PRODUCT_VERSION_RESOURCE +- FILEFLAGSMASK 0x3fL +-#ifdef _DEBUG +- FILEFLAGS 0x1L +-#else +- FILEFLAGS 0x0L +-#endif +- FILEOS 0x4L +- FILETYPE 0x1L +- FILESUBTYPE 0x0L +-BEGIN +- BLOCK "StringFileInfo" +- BEGIN +- BLOCK "040904b0" +- BEGIN +- VALUE "Comments", PRODUCT_COMMENTS +- VALUE "CompanyName", PRODUCT_COMPANY_NAME +- VALUE "FileDescription", PRODUCT_FILE_DESCRIPTION +- VALUE "FileVersion", FILE_VERSION_RESOURCE_STR +- VALUE "InternalName", PRODUCT_INTERNAL_NAME +- VALUE "LegalCopyright", PRODUCT_COMPANY_COPYRIGHT +- VALUE "OriginalFilename", PRODUCT_ORIGINAL_FILENAME +- VALUE "ProductName", PRODUCT_BUNDLE +- VALUE "ProductVersion", PRODUCT_VERSION_RESOURCE_STR +- END +- END +- BLOCK "VarFileInfo" +- BEGIN +- VALUE "Translation", 0x409, 1200 +- END +-END +diff -urNr keepassxc-2.6.4-orig/CMakeLists.txt keepassxc-2.6.4-patched/CMakeLists.txt +--- keepassxc-2.6.4-orig/CMakeLists.txt 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +@@ -1,516 +0,0 @@ +-# Copyright (C) 2018 KeePassXC Team +-# Copyright (C) 2010 Felix Geyer +-# +-# This program is free software: you can redistribute it and/or modify +-# it under the terms of the GNU General Public License as published by +-# the Free Software Foundation, either version 2 or (at your option) +-# version 3 of the License. +-# +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY; without even the implied warranty of +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-# GNU General Public License for more details. +-# +-# You should have received a copy of the GNU General Public License +-# along with this program. If not, see . +- +-cmake_minimum_required(VERSION 3.3.0) +- +-project(KeePassXC) +- +-if(NOT CMAKE_BUILD_TYPE) +- set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING +- "Choose the type of build, options are: Debug Release RelWithDebInfo Profile" +- FORCE) +-endif() +-string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER) +- +-set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake) +- +-# Support Visual Studio Code +-include(CMakeToolsHelpers OPTIONAL) +-include(FeatureSummary) +- +-include(CheckCCompilerFlag) +-include(CheckCXXCompilerFlag) +-include(CheckCXXSourceCompiles) +- +-option(WITH_TESTS "Enable building of unit tests" ON) +-option(WITH_GUI_TESTS "Enable building of GUI tests" OFF) +-option(WITH_DEV_BUILD "Use only for development. Disables/warns about deprecated methods." OFF) +-option(WITH_ASAN "Enable address sanitizer checks (Linux / macOS only)" OFF) +-option(WITH_COVERAGE "Use to build with coverage tests (GCC only)." OFF) +-option(WITH_APP_BUNDLE "Enable Application Bundle for macOS" ON) +-option(WITH_CCACHE "Use ccache for build" OFF) +- +-set(WITH_XC_ALL OFF CACHE BOOL "Build in all available plugins") +- +-option(WITH_XC_AUTOTYPE "Include Auto-Type." ON) +-option(WITH_XC_NETWORKING "Include networking code (e.g. for downloading website icons)." OFF) +-option(WITH_XC_BROWSER "Include browser integration with keepassxc-browser." OFF) +-option(WITH_XC_YUBIKEY "Include YubiKey support." OFF) +-option(WITH_XC_SSHAGENT "Include SSH agent support." OFF) +-option(WITH_XC_KEESHARE "Sharing integration with KeeShare (requires quazip5 for secure containers)" OFF) +-option(WITH_XC_UPDATECHECK "Include automatic update checks; disable for controlled distributions" ON) +-if(UNIX AND NOT APPLE) +- option(WITH_XC_FDOSECRETS "Implement freedesktop.org Secret Storage Spec server side API." OFF) +-endif() +-if(APPLE) +- option(WITH_XC_TOUCHID "Include TouchID support for macOS." OFF) +-endif() +-option(WITH_XC_DOCS "Enable building of documentation" ON) +- +-if(WITH_CCACHE) +- # Use the Compiler Cache (ccache) program +- # (install with: sudo apt get ccache) +- find_program(CCACHE_FOUND ccache) +- if(CCACHE_FOUND) +- set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE_FOUND}) +- else() +- message(FATAL_ERROR "ccache requested but cannot be found.") +- endif() +-endif() +- +-if(WITH_XC_ALL) +- # Enable all options (except update check and docs) +- set(WITH_XC_AUTOTYPE ON) +- set(WITH_XC_NETWORKING ON) +- set(WITH_XC_BROWSER ON) +- set(WITH_XC_YUBIKEY ON) +- set(WITH_XC_SSHAGENT ON) +- set(WITH_XC_KEESHARE ON) +- if(APPLE) +- set(WITH_XC_TOUCHID ON) +- endif() +- if(UNIX AND NOT APPLE) +- set(WITH_XC_FDOSECRETS ON) +- endif() +-endif() +- +-if(WITH_XC_SSHAGENT OR WITH_XC_KEESHARE) +- set(WITH_XC_CRYPTO_SSH ON) +-else() +- set(WITH_XC_CRYPTO_SSH OFF) +-endif() +- +-# Prefer WITH_XC_NETWORKING setting over WITH_XC_UPDATECHECK +-if(NOT WITH_XC_NETWORKING AND WITH_XC_UPDATECHECK) +- message(STATUS "Disabling WITH_XC_UPDATECHECK because WITH_XC_NETWORKING is disabled") +- set(WITH_XC_UPDATECHECK OFF) +-endif() +- +-set(KEEPASSXC_VERSION_MAJOR "2") +-set(KEEPASSXC_VERSION_MINOR "6") +-set(KEEPASSXC_VERSION_PATCH "4") +-set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION_MAJOR}.${KEEPASSXC_VERSION_MINOR}.${KEEPASSXC_VERSION_PATCH}") +-set(OVERRIDE_VERSION "" CACHE STRING "Override the KeePassXC Version for Snapshot builds") +- +-set(KEEPASSXC_BUILD_TYPE "Snapshot" CACHE STRING "Set KeePassXC build type to distinguish between stable releases and snapshots") +-set_property(CACHE KEEPASSXC_BUILD_TYPE PROPERTY STRINGS Snapshot Release PreRelease) +- +-# Retrieve git HEAD revision hash +-set(GIT_HEAD_OVERRIDE "" CACHE STRING "Manually set the Git HEAD hash when missing (eg, when no .git folder exists)") +-execute_process(COMMAND git rev-parse --short=7 HEAD +- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} +- OUTPUT_VARIABLE GIT_HEAD +- ERROR_QUIET) +-string(STRIP "${GIT_HEAD}" GIT_HEAD) +-if(GIT_HEAD STREQUAL "" AND NOT GIT_HEAD_OVERRIDE STREQUAL "") +- string(SUBSTRING "${GIT_HEAD_OVERRIDE}" 0 7 GIT_HEAD) +-elseif(EXISTS ${CMAKE_SOURCE_DIR}/.gitrev) +- file(READ ${CMAKE_SOURCE_DIR}/.gitrev GIT_HEAD) +-endif() +-message(STATUS "Found Git HEAD Revision: ${GIT_HEAD}\n") +- +-# Check if on a tag, if so build as a release +-execute_process(COMMAND git tag --points-at HEAD +- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} +- OUTPUT_VARIABLE GIT_TAG +- ERROR_QUIET) +-if(GIT_TAG) +- string(STRIP "${GIT_TAG}" GIT_TAG) +- set(OVERRIDE_VERSION ${GIT_TAG}) +-elseif(EXISTS ${CMAKE_SOURCE_DIR}/.version) +- file(READ ${CMAKE_SOURCE_DIR}/.version OVERRIDE_VERSION) +-endif() +- +-string(REGEX REPLACE "(\r?\n)+" "" OVERRIDE_VERSION "${OVERRIDE_VERSION}") +-if(OVERRIDE_VERSION) +- if(OVERRIDE_VERSION MATCHES "^[\\.0-9]+-(alpha|beta)[0-9]+$") +- set(KEEPASSXC_BUILD_TYPE PreRelease) +- set(KEEPASSXC_VERSION ${OVERRIDE_VERSION}) +- elseif(OVERRIDE_VERSION MATCHES "^[\\.0-9]+$") +- set(KEEPASSXC_BUILD_TYPE Release) +- set(KEEPASSXC_VERSION ${OVERRIDE_VERSION}) +- else() +- set(KEEPASSXC_BUILD_TYPE Snapshot) +- set(KEEPASSXC_VERSION ${OVERRIDE_VERSION}) +- endif() +-else() +- if(KEEPASSXC_BUILD_TYPE STREQUAL "PreRelease") +- set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION}-preview") +- elseif(KEEPASSXC_BUILD_TYPE STREQUAL "Snapshot") +- set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION}-snapshot") +- endif() +-endif() +- +-if(KEEPASSXC_BUILD_TYPE STREQUAL "Release") +- set(KEEPASSXC_BUILD_TYPE_RELEASE ON) +-elseif(KEEPASSXC_BUILD_TYPE STREQUAL "PreRelease") +- set(KEEPASSXC_BUILD_TYPE_PRE_RELEASE ON) +-else() +- set(KEEPASSXC_BUILD_TYPE_SNAPSHOT ON) +-endif() +- +-message(STATUS "Setting up build for KeePassXC v${KEEPASSXC_VERSION}\n") +- +-# Distribution info +-set(KEEPASSXC_DIST ON) +-set(KEEPASSXC_DIST_TYPE "Other" CACHE STRING "KeePassXC Distribution Type") +-set_property(CACHE KEEPASSXC_DIST_TYPE PROPERTY STRINGS Snap AppImage Other) +-if(KEEPASSXC_DIST_TYPE STREQUAL "Snap") +- set(KEEPASSXC_DIST_SNAP ON) +-elseif(KEEPASSXC_DIST_TYPE STREQUAL "AppImage") +- set(KEEPASSXC_DIST_APPIMAGE ON) +-elseif(KEEPASSXC_DIST_TYPE STREQUAL "Other") +- unset(KEEPASSXC_DIST) +-endif() +- +-if("${CMAKE_SIZEOF_VOID_P}" EQUAL "4") +- set(IS_32BIT TRUE) +-endif() +- +-set(CLANG_COMPILER_ID_REGEX "^(Apple)?[Cc]lang$") +-if("${CMAKE_C_COMPILER}" MATCHES "clang$" +- OR "${CMAKE_EXTRA_GENERATOR_C_SYSTEM_DEFINED_MACROS}" MATCHES "__clang__" +- OR "${CMAKE_C_COMPILER_ID}" MATCHES ${CLANG_COMPILER_ID_REGEX}) +- set(CMAKE_COMPILER_IS_CLANG 1) +-endif() +- +-if("${CMAKE_CXX_COMPILER}" MATCHES "clang(\\+\\+)?$" +- OR "${CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_DEFINED_MACROS}" MATCHES "__clang__" +- OR "${CMAKE_CXX_COMPILER_ID}" MATCHES ${CLANG_COMPILER_ID_REGEX}) +- set(CMAKE_COMPILER_IS_CLANGXX 1) +-endif() +- +-macro(add_gcc_compiler_cxxflags FLAGS) +- if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANGXX) +- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAGS}") +- endif() +-endmacro(add_gcc_compiler_cxxflags) +- +-macro(add_gcc_compiler_cflags FLAGS) +- if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG) +- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLAGS}") +- endif() +-endmacro(add_gcc_compiler_cflags) +- +-macro(add_gcc_compiler_flags FLAGS) +- add_gcc_compiler_cxxflags("${FLAGS}") +- add_gcc_compiler_cflags("${FLAGS}") +-endmacro(add_gcc_compiler_flags) +- +-# Copies of above macros that first ensure the compiler understands a given flag +-# Because check_*_compiler_flag() sets -D with name, need to provide "safe" FLAGNAME +-macro(check_add_gcc_compiler_cxxflag FLAG FLAGNAME) +- check_cxx_compiler_flag("${FLAG}" CXX_HAS${FLAGNAME}) +- if(CXX_HAS${FLAGNAME}) +- add_gcc_compiler_cxxflags("${FLAG}") +- endif() +-endmacro(check_add_gcc_compiler_cxxflag) +- +-macro(check_add_gcc_compiler_cflag FLAG FLAGNAME) +- check_c_compiler_flag("${FLAG}" CC_HAS${FLAGNAME}) +- if(CC_HAS${FLAGNAME}) +- add_gcc_compiler_cflags("${FLAG}") +- endif() +-endmacro(check_add_gcc_compiler_cflag) +- +-# This is the "front-end" for the above macros +-# Optionally takes additional parameter(s) with language to check (currently "C" or "CXX") +-macro(check_add_gcc_compiler_flag FLAG) +- string(REGEX REPLACE "[-=]" "_" FLAGNAME "${FLAG}") +- set(check_lang_spec ${ARGN}) +- list(LENGTH check_lang_spec num_extra_args) +- set(langs C CXX) +- if(num_extra_args GREATER 0) +- set(langs "${check_lang_spec}") +- endif() +- if("C" IN_LIST langs) +- check_add_gcc_compiler_cflag("${FLAG}" "${FLAGNAME}") +- endif() +- if("CXX" IN_LIST langs) +- check_add_gcc_compiler_cxxflag("${FLAG}" "${FLAGNAME}") +- endif() +-endmacro(check_add_gcc_compiler_flag) +- +-add_definitions(-DQT_NO_EXCEPTIONS -DQT_STRICT_ITERATORS -DQT_NO_CAST_TO_ASCII) +- +-if(WITH_APP_BUNDLE) +- add_definitions(-DWITH_APP_BUNDLE) +-endif() +- +-add_gcc_compiler_flags("-fno-common") +-add_gcc_compiler_flags("-Wall -Wextra -Wundef -Wpointer-arith -Wno-long-long") +-add_gcc_compiler_flags("-Wformat=2 -Wmissing-format-attribute") +-add_gcc_compiler_flags("-fvisibility=hidden") +-add_gcc_compiler_cxxflags("-fvisibility-inlines-hidden") +- +-if(CMAKE_BUILD_TYPE_LOWER STREQUAL "debug") +- check_add_gcc_compiler_flag("-Wshadow-compatible-local") +- check_add_gcc_compiler_flag("-Wshadow-local") +- add_gcc_compiler_flags("-Werror") +-endif() +- +-if (NOT HAIKU) +-if((CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.8.999) OR CMAKE_COMPILER_IS_CLANGXX) +- add_gcc_compiler_flags("-fstack-protector-strong") +-else() +- add_gcc_compiler_flags("-fstack-protector --param=ssp-buffer-size=4") +-endif() +-endif() +- +-add_gcc_compiler_cxxflags("-fno-exceptions -fno-rtti") +-add_gcc_compiler_cxxflags("-Wnon-virtual-dtor -Wold-style-cast -Woverloaded-virtual") +-add_gcc_compiler_cflags("-Wchar-subscripts -Wwrite-strings") +- +-if(WITH_ASAN) +- if(NOT (CMAKE_SYSTEM_NAME STREQUAL "Linux" OR APPLE)) +- message(FATAL_ERROR "WITH_ASAN is only supported on Linux / macOS at the moment.") +- endif() +- +- add_gcc_compiler_flags("-fsanitize=address -DWITH_ASAN") +- +- if(CMAKE_SYSTEM_NAME STREQUAL "Linux") +- if(NOT (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9)) +- add_gcc_compiler_flags("-fsanitize=leak -DWITH_LSAN") +- endif() +- endif() +- +-endif() +- +-if(CMAKE_BUILD_TYPE_LOWER MATCHES "(release|relwithdebinfo|minsizerel)") +- add_gcc_compiler_flags("-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2") +-endif() +- +-check_add_gcc_compiler_flag("-Werror=format-security") +-check_add_gcc_compiler_flag("-Werror=implicit-function-declaration" C) +-check_add_gcc_compiler_flag("-Wcast-align") +- +-if(WITH_COVERAGE AND CMAKE_COMPILER_IS_CLANGXX) +- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-instr-generate -fcoverage-mapping") +- # then: +- # $ llvm-profdata merge -sparse default.profraw -o default.profdata +- # $ llvm-cov show ./tests/${the_test_binary} \ +- # -format=html -instr-profile=default.profdata -output-dir=./coverages \ +- # `find src -iname '*.h' -or -iname '*.cpp'` +-endif() +- +-if(CMAKE_SYSTEM_NAME STREQUAL "Linux") +- check_add_gcc_compiler_flag("-Qunused-arguments") +- add_gcc_compiler_flags("-pie -fPIE") +- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-add-needed -Wl,--as-needed -Wl,--no-undefined") +- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,relro,-z,now") +- set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--no-add-needed -Wl,--as-needed") +- set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-z,relro,-z,now") +-endif() +- +-add_gcc_compiler_cflags("-std=c99") +-add_gcc_compiler_cxxflags("-std=c++11") +- +-check_add_gcc_compiler_flag("-fsized-deallocation" CXX) +- +-if(APPLE AND CMAKE_COMPILER_IS_CLANGXX) +- add_gcc_compiler_cxxflags("-stdlib=libc++") +-endif() +- +-if(WITH_DEV_BUILD) +- add_definitions(-DQT_DEPRECATED_WARNINGS -DGCRYPT_NO_DEPRECATED) +-else() +- add_definitions(-DQT_NO_DEPRECATED_WARNINGS) +- add_gcc_compiler_cxxflags("-Wno-deprecated-declarations") +-endif() +- +-if(MINGW) +- set(CMAKE_RC_COMPILER_INIT windres) +- enable_language(RC) +- set(CMAKE_RC_COMPILE_OBJECT " -O coff -i -o ") +- if(NOT (CMAKE_BUILD_TYPE_LOWER STREQUAL "debug" OR CMAKE_BUILD_TYPE_LOWER STREQUAL "relwithdebinfo")) +- # Enable DEP and ASLR +- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--nxcompat -Wl,--dynamicbase") +- set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--nxcompat -Wl,--dynamicbase") +- # Enable high entropy ASLR for 64-bit builds +- if(NOT IS_32BIT) +- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--high-entropy-va") +- set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--high-entropy-va") +- endif() +- endif() +-endif() +- +-if(APPLE AND WITH_APP_BUNDLE OR MINGW) +- set(PROGNAME KeePassXC) +-else() +- set(PROGNAME keepassxc) +-endif() +- +-if(MINGW) +- set(CLI_INSTALL_DIR ".") +- set(PROXY_INSTALL_DIR ".") +- set(BIN_INSTALL_DIR ".") +- set(PLUGIN_INSTALL_DIR ".") +- set(DATA_INSTALL_DIR "share") +-elseif(APPLE AND WITH_APP_BUNDLE) +- set(BUNDLE_INSTALL_DIR "${PROGNAME}.app/Contents") +- set(CMAKE_INSTALL_MANDIR "${BUNDLE_INSTALL_DIR}/Resources/man") +- set(CLI_INSTALL_DIR "${BUNDLE_INSTALL_DIR}/MacOS") +- set(PROXY_INSTALL_DIR "${BUNDLE_INSTALL_DIR}/MacOS") +- set(BIN_INSTALL_DIR "${BUNDLE_INSTALL_DIR}/MacOS") +- set(PLUGIN_INSTALL_DIR "${BUNDLE_INSTALL_DIR}/PlugIns") +- set(DATA_INSTALL_DIR "${BUNDLE_INSTALL_DIR}/Resources") +-else() +- include(GNUInstallDirs) +- +- set(CLI_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}") +- set(PROXY_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}") +- set(BIN_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}") +- set(PLUGIN_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/keepassxc") +- set(DATA_INSTALL_DIR "${CMAKE_INSTALL_DATADIR}/keepassxc") +-endif() +- +-if(WITH_TESTS) +- enable_testing() +-endif(WITH_TESTS) +- +-if(WITH_COVERAGE) +- # Include code coverage, use with -DCMAKE_BUILD_TYPE=Debug +- include(CodeCoverage) +- set(COVERAGE_GCOVR_EXCLUDES +- "\\(.+/\\)?tests/.\\*" +- ".\\*/moc_\\[^/\\]+\\.cpp" +- ".\\*/ui_\\[^/\\]+\\.h" +- "\\(.+/\\)?zxcvbn/.\\*") +- append_coverage_compiler_flags() +- setup_target_for_coverage_gcovr_html( +- NAME coverage +- EXECUTABLE $(MAKE) && $(MAKE) test +- ) +-endif() +- +-include(CLangFormat) +- +-set(QT_COMPONENTS Core Network Concurrent Gui Svg Widgets Test LinguistTools) +-if(UNIX AND NOT APPLE) +- find_package(Qt5 COMPONENTS ${QT_COMPONENTS} DBus REQUIRED) +-elseif(APPLE) +- find_package(Qt5 COMPONENTS ${QT_COMPONENTS} REQUIRED HINTS /usr/local/opt/qt/lib/cmake /usr/local/Cellar/qt/*/lib/cmake ENV PATH) +- find_package(Qt5 COMPONENTS MacExtras HINTS /usr/local/opt/qt/lib/cmake /usr/local/Cellar/qt/*/lib/cmake ENV PATH) +-else() +- find_package(Qt5 COMPONENTS ${QT_COMPONENTS} REQUIRED) +-endif() +- +-if(Qt5Core_VERSION VERSION_LESS "5.2.0") +- message(FATAL_ERROR "Qt version 5.2.0 or higher is required") +-endif() +- +-get_filename_component(Qt5_PREFIX ${Qt5_DIR}/../../.. REALPATH) +- +-# Process moc automatically +-set(CMAKE_AUTOMOC ON) +-# Process .ui files automatically +-set(CMAKE_AUTOUIC ON) +-# Process .qrc files automatically +-set(CMAKE_AUTORCC ON) +- +-if(APPLE) +- set(CMAKE_MACOSX_RPATH TRUE) +- find_program(MACDEPLOYQT_EXE macdeployqt HINTS ${Qt5_PREFIX}/bin ENV PATH) +- if(NOT MACDEPLOYQT_EXE) +- message(FATAL_ERROR "macdeployqt is required to build on macOS") +- else() +- message(STATUS "Using macdeployqt: ${MACDEPLOYQT_EXE}") +- endif() +-elseif(MINGW) +- find_program(WINDEPLOYQT_EXE windeployqt HINTS ${Qt5_PREFIX}/bin ENV PATH) +- if(NOT WINDEPLOYQT_EXE) +- message(FATAL_ERROR "windeployqt is required to build on Windows") +- else() +- message(STATUS "Using windeployqt: ${WINDEPLOYQT_EXE}") +- endif() +-endif() +- +-# Debian sets the the build type to None for package builds. +-# Make sure we don't enable asserts there. +-set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_NONE QT_NO_DEBUG) +- +-find_package(LibGPGError REQUIRED) +-find_package(Gcrypt 1.7.0 REQUIRED) +-find_package(Argon2 REQUIRED) +-find_package(ZLIB REQUIRED) +-find_package(QREncode REQUIRED) +-find_package(sodium 1.0.12 REQUIRED) +- +-set(CMAKE_REQUIRED_INCLUDES ${ZLIB_INCLUDE_DIR}) +- +-if(ZLIB_VERSION_STRING VERSION_LESS "1.2.0") +- message(FATAL_ERROR "zlib 1.2.0 or higher is required to use the gzip format") +-endif() +- +-include_directories(SYSTEM ${ARGON2_INCLUDE_DIR} ${sodium_INCLUDE_DIR}) +- +-# Optional +-if(WITH_XC_YUBIKEY) +- find_package(YubiKey REQUIRED) +- +- include_directories(SYSTEM ${YUBIKEY_INCLUDE_DIRS}) +-endif() +- +-if(UNIX) +- check_cxx_source_compiles("#include +- int main() { prctl(PR_SET_DUMPABLE, 0); return 0; }" +- HAVE_PR_SET_DUMPABLE) +- +- check_cxx_source_compiles("#include +- int main() { return 0; }" +- HAVE_MALLOC_H) +- +- check_cxx_source_compiles("#include +- int main() { malloc_usable_size(NULL, 0); return 0; }" +- HAVE_MALLOC_USABLE_SIZE) +- +- check_cxx_source_compiles("#include +- int main() { +- struct rlimit limit; +- limit.rlim_cur = 0; +- limit.rlim_max = 0; +- setrlimit(RLIMIT_CORE, &limit); +- return 0; +- }" HAVE_RLIMIT_CORE) +- +- if(APPLE) +- check_cxx_source_compiles("#include +- #include +- int main() { ptrace(PT_DENY_ATTACH, 0, 0, 0); return 0; }" +- HAVE_PT_DENY_ATTACH) +- endif() +-endif() +- +-include_directories(SYSTEM ${GCRYPT_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR}) +- +-add_subdirectory(src) +-add_subdirectory(share) +-if(WITH_TESTS) +- add_subdirectory(tests) +-endif(WITH_TESTS) +- +-if(WITH_XC_DOCS) +- add_subdirectory(docs) +-endif() +- +-if(PRINT_SUMMARY) +- # This will print ENABLED, REQUIRED and DISABLED +- feature_summary(WHAT ALL) +-else() +- # This will only print ENABLED and DISABLED feature +- feature_summary(WHAT ENABLED_FEATURES DESCRIPTION "Enabled features:") +- feature_summary(WHAT DISABLED_FEATURES DESCRIPTION "Disabled features:") +-endif() +diff -urNr keepassxc-2.6.4-orig/COPYING keepassxc-2.6.4-patched/COPYING +--- keepassxc-2.6.4-orig/COPYING 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/COPYING 1970-01-01 01:00:00.000000000 +0100 +@@ -1,232 +0,0 @@ +-KeePassXC - http://www.keepassxc.org/ +-Copyright (C) 2016-2020 KeePassXC Team +- +-This program is free software: you can redistribute it and/or modify +-it under the terms of the GNU General Public License as published by +-the Free Software Foundation, either version 2 or (at your option) +-version 3 of the License. +- +-This program is distributed in the hope that it will be useful, +-but WITHOUT ANY WARRANTY; without even the implied warranty of +-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-GNU General Public License for more details. +- +--------------------------------------------------------------------- +- +-Format-Specification: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +-Upstream-Name: KeePassXC +-Upstream-Contact: KeePassXC Team +-Source: http://www.keepassxc.org/ +- +-Copyright: 2010-2012, Felix Geyer +- 2011-2012, Florian Geyer +- 2012, Tobias Tangemann +- 2007, Trolltech ASA +- 2012, Intel Corporation +- 2012, Nokia Corporation and/or its subsidiary(-ies) +- 2000-2008, Tom Sato +- 2013, Laszlo Papp +- 2013, David Faure +- 2016-2020, KeePassXC Team +-License: GPL-2 or GPL-3 +- +-Comment: The "KeePassXC Team" in every copyright notice is formed by the following people: +- - droidmonkey +- - phoerious +- - TheZ3ro +- - louib +- - weslly +- Every other contributor is listed on https://github.com/keepassxreboot/keepassxc/graphs/contributors +- +-Files: cmake/CodeCoverage.cmake +-Copyright: 2012 - 2015, Lars Bilke +-License: BSD-3-clause +- +-Files: cmake/FindYubiKey.cmake +-Copyright: 2014 Kyle Manna +-License: GPL-2 or GPL-3 +- +-Files: cmake/GenerateProductVersion.cmake +-Copyright: 2015 halex2005 +-License: MIT +- +-Files: share/icons/application/scalable/apps/keepassxc.svg +- share/icons/application/scalable/apps/keepassxc-dark.svg +- share/icons/application/scalable/apps/keepassxc-locked.svg +- share/icons/application/scalable/apps/keepassxc-unlocked.svg +- share/icons/application/scalable/mimetypes/application-x-keepassxc.svg +-Copyright: 2016, Lorenzo Stella +-License: LGPL-2 +- +-Files: share/icons/database/C00_Password.svg +- share/icons/database/C01_Package_Network.svg +- share/icons/database/C02_MessageBox_Warning.svg +- share/icons/database/C03_Server.svg +- share/icons/database/C04_Klipper.svg +- share/icons/database/C05_Edu_Languages.svg +- share/icons/database/C06_KCMDF.svg +- share/icons/database/C08_Socket.svg +- share/icons/database/C09_Identity.svg +- share/icons/database/C10_Kontact.svg +- share/icons/database/C11_Camera.svg +- share/icons/database/C12_IRKickFlash.svg +- share/icons/database/C13_KGPG_Key3.svg +- share/icons/database/C14_Laptop_Power.svg +- share/icons/database/C15_Scanner.svg +- share/icons/database/C16_Mozilla_Firebird.svg +- share/icons/database/C19_Mail_Generic.svg +- share/icons/database/C20_Misc.svg +- share/icons/database/C21_KOrganizer.svg +- share/icons/database/C22_ASCII.svg +- share/icons/database/C23_Icons.svg +- share/icons/database/C24_Connect_Established.svg +- share/icons/database/C25_Folder_Mail.svg +- share/icons/database/C28_QuickTime.svg +- share/icons/database/C29_KGPG_Term.svg +- share/icons/database/C30_Konsole.svg +- share/icons/database/C31_FilePrint.svg +- share/icons/database/C32_FSView.svg +- share/icons/database/C33_Run.svg +- share/icons/database/C34_Configure.svg +- share/icons/database/C36_Ark.svg +- share/icons/database/C39_History.svg +- share/icons/database/C40_Mail_Find.svg +- share/icons/database/C41_VectorGfx.svg +- share/icons/database/C42_KCMMemory.svg +- share/icons/database/C43_EditTrash.svg +- share/icons/database/C47_KPackage.svg +- share/icons/database/C48_Folder.svg +- share/icons/database/C49_Folder_Blue_Open.svg +- share/icons/database/C50_Folder_Tar.svg +- share/icons/database/C55_Thumbnail.svg +- share/icons/database/C56_KAddressBook.svg +- share/icons/database/C57_View_Text.svg +- share/icons/database/C58_KGPG.svg +- share/icons/database/C59_Package_Development.svg +- share/icons/database/C60_KFM_Home.svg +- share/icons/database/C62_Tux.svg +- share/icons/database/C63_Feather.svg +- share/icons/database/C65_W.svg +- share/icons/database/C67_Certificate.svg +- share/icons/database/C68_BlackBerry.svg +-Copyright: none +-License: MIT +-Comment: Taken from https://github.com/icons8/flat-color-icons +- +-Files: share/icons/badges/0_ShareActive.svg +- share/icons/badges/1_ShareInactive.svg +- share/icons/database/C07_Kate.svg +- share/icons/database/C17_CDROM_Unmount.svg +- share/icons/database/C18_Display.svg +- share/icons/database/C26_FileSave.svg +- share/icons/database/C27_NFS_Unmount.svg +- share/icons/database/C35_KRFB.svg +- share/icons/database/C38_Samba_Unmount.svg +- share/icons/database/C44_KNotes.svg +- share/icons/database/C51_Decrypted.svg +- share/icons/database/C52_Encrypted.svg +- share/icons/database/C54_Signature.svg +- share/icons/database/C66_Money.svg +-Copyright: none +-License: CC0 +-Comment: Taken from https://github.com/paomedia/small-n-flat +- +-Files: share/icons/badges/2_Expired.svg +- share/icons/database/C37_KPercentage.svg +- share/icons/database/C45_Cancel.svg +- share/icons/database/C46_Help.svg +- share/icons/database/C53_Apply.svg +- share/icons/database/C61_Services.svg +-Copyright: 2020 KeePassXC Team +-License: MIT +- +-Files: share/icons/application/scalable/actions/chevron-double-down.svg +- share/icons/application/scalable/actions/chevron-double-right.svg +- share/icons/application/scalable/actions/document-close.svg +- share/icons/application/scalable/actions/document-edit.svg +- share/icons/application/scalable/actions/document-export.svg +- share/icons/application/scalable/actions/document-import.svg +- share/icons/application/scalable/actions/document-new.svg +- share/icons/application/scalable/actions/document-open.svg +- share/icons/application/scalable/actions/document-open-recent.svg +- share/icons/application/scalable/actions/document-properties.svg +- share/icons/application/scalable/actions/document-save.svg +- share/icons/application/scalable/actions/document-save-as.svg +- share/icons/application/scalable/actions/document-save-copy.svg +- share/icons/application/scalable/actions/edit-clear-locationbar-ltr.svg +- share/icons/application/scalable/actions/edit-clear-locationbar-rtl.svg +- share/icons/application/scalable/actions/entry-clone.svg +- share/icons/application/scalable/actions/entry-delete.svg +- share/icons/application/scalable/actions/entry-edit.svg +- share/icons/application/scalable/actions/entry-new.svg +- share/icons/application/scalable/actions/favicon-download.svg +- share/icons/application/scalable/actions/group-delete.svg +- share/icons/application/scalable/actions/group-edit.svg +- share/icons/application/scalable/actions/group-empty-trash.svg +- share/icons/application/scalable/actions/group-new.svg +- share/icons/application/scalable/actions/help-about.svg +- share/icons/application/scalable/actions/key-enter.svg +- share/icons/application/scalable/actions/message-close.svg +- share/icons/application/scalable/actions/move-down.svg +- share/icons/application/scalable/actions/move-up.svg +- share/icons/application/scalable/actions/paperclip.svg +- share/icons/application/scalable/actions/password-copy.svg +- share/icons/application/scalable/actions/password-generate.svg +- share/icons/application/scalable/actions/password-generator.svg +- share/icons/application/scalable/actions/password-show-off.svg +- share/icons/application/scalable/actions/password-show-on.svg +- share/icons/application/scalable/actions/refresh.svg +- share/icons/application/scalable/actions/reports.svg +- share/icons/application/scalable/actions/reports-exclude.svg +- share/icons/application/scalable/actions/statistics.svg +- share/icons/application/scalable/actions/system-help.svg +- share/icons/application/scalable/actions/system-search.svg +- share/icons/application/scalable/actions/url-copy.svg +- share/icons/application/scalable/actions/username-copy.svg +- share/icons/application/scalable/actions/view-history.svg +- share/icons/application/scalable/apps/internet-web-browser.svg +- share/icons/application/scalable/apps/keepassxc.svg +- share/icons/application/scalable/apps/keepassxc-dark.svg +- share/icons/application/scalable/apps/keepassxc-locked.svg +- share/icons/application/scalable/apps/keepassxc-unlocked.svg +- share/icons/application/scalable/apps/preferences-desktop-icons.svg +- share/icons/application/scalable/apps/preferences-system-network-sharing.svg +- share/icons/application/scalable/apps/utilities-terminal.svg +- share/icons/application/scalable/categories/preferences-other.svg +- share/icons/application/scalable/mimetypes/application-x-keepassxc.svg +- share/icons/application/scalable/status/dialog-error.svg +- share/icons/application/scalable/status/dialog-information.svg +- share/icons/application/scalable/status/dialog-warning.svg +- share/icons/application/scalable/status/security-high.svg +-Copyright: 2019 Austin Andrews +-License: SIL OPEN FONT LICENSE Version 1.1 +-Comment: Taken from Material Design icon set (https://github.com/templarian/MaterialDesign/) +- +-Files: src/streams/qtiocompressor.* +- src/streams/QtIOCompressor +- tests/modeltest.* +-Copyright: 2009-2012, Nokia Corporation and/or its subsidiary(-ies) +-License: LGPL-2.1 or GPL-3 +- +-Files: src/zxcvbn/zxcvbn.* +-Copyright: 2015-2017, Tony Evans +-License: MIT +- +-Files: src/gui/KMessageWidget.h +- src/gui/KMessageWidget.cpp +-Copyright: 2011 Aurélien Gâteau +- 2014 Dominik Haumann +-License: LGPL-2.1 +- +-Files: share/macosx/background.tiff +-Copyright: 2008-2014, Andrey Tarantsov +-License: MIT +- +-Files: share/icons/application/scalable/apps/freedesktop.svg +-Copyright: GPL-2+ +-Comment: from Freedesktop.org website +- +-Files: share/icons/application/scalable/actions/hibp.svg +- share/icons/database/C64_Apple.svg +-Copyright: GPL-2+ +-Comment: from the Simple Icons repo (https://github.com/simple-icons/simple-icons/) +diff -urNr keepassxc-2.6.4-orig/docs/CMakeLists.txt keepassxc-2.6.4-patched/docs/CMakeLists.txt +--- keepassxc-2.6.4-orig/docs/CMakeLists.txt 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/docs/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +@@ -1,67 +0,0 @@ +-# Copyright (C) 2020 KeePassXC Team +-# +-# This program is free software: you can redistribute it and/or modify +-# it under the terms of the GNU General Public License as published by +-# the Free Software Foundation, either version 2 or (at your option) +-# version 3 of the License. +-# +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY; without even the implied warranty of +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-# GNU General Public License for more details. +-# +-# You should have received a copy of the GNU General Public License +-# along with this program. If not, see . +- +-find_program(ASCIIDOCTOR_EXE asciidoctor) +-if(NOT ASCIIDOCTOR_EXE) +- message(FATAL_ERROR "asciidoctor is required to build documentation") +-else() +- message(STATUS "Using asciidoctor: ${ASCIIDOCTOR_EXE}") +-endif() +- +-set(DOC_DIR ${CMAKE_CURRENT_SOURCE_DIR}) +-set(OUT_DIR ${CMAKE_CURRENT_BINARY_DIR}) +- +-# Build html documentation on all platforms +-file(GLOB html_depends ${DOC_DIR}/topics/* ${DOC_DIR}/styles/* ${DOC_DIR}/images/*) +-add_custom_command(OUTPUT KeePassXC_GettingStarted.html +- COMMAND ${ASCIIDOCTOR_EXE} -D ${OUT_DIR} -o KeePassXC_GettingStarted.html ${DOC_DIR}/GettingStarted.adoc +- DEPENDS ${html_depends} ${DOC_DIR}/GettingStarted.adoc +- VERBATIM) +-add_custom_command(OUTPUT KeePassXC_UserGuide.html +- COMMAND ${ASCIIDOCTOR_EXE} -D ${OUT_DIR} -o KeePassXC_UserGuide.html ${DOC_DIR}/UserGuide.adoc +- DEPENDS ${html_depends} ${DOC_DIR}/UserGuide.adoc +- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +- VERBATIM) +-file(GLOB styles_depends ${DOC_DIR}/styles/*) +-add_custom_command(OUTPUT KeePassXC_KeyboardShortcuts.html +- COMMAND ${ASCIIDOCTOR_EXE} -D ${OUT_DIR} -o KeePassXC_KeyboardShortcuts.html ${DOC_DIR}/topics/KeyboardShortcuts.adoc +- DEPENDS ${DOC_DIR}/topics/KeyboardShortcuts.adoc ${styles_depends} +- VERBATIM) +- +-add_custom_target(docs ALL DEPENDS KeePassXC_GettingStarted.html KeePassXC_UserGuide.html KeePassXC_KeyboardShortcuts.html) +- +-install(FILES +- ${OUT_DIR}/KeePassXC_GettingStarted.html +- ${OUT_DIR}/KeePassXC_UserGuide.html +- ${OUT_DIR}/KeePassXC_KeyboardShortcuts.html +- DESTINATION ${DATA_INSTALL_DIR}/docs) +- +-# Build Man Pages on Linux and macOS +-if(APPLE OR UNIX) +- add_custom_command(OUTPUT keepassxc.1 +- COMMAND ${ASCIIDOCTOR_EXE} -D ${OUT_DIR} -b manpage ${DOC_DIR}/man/keepassxc.1.adoc +- DEPENDS ${DOC_DIR}/man/keepassxc.1.adoc +- VERBATIM) +- add_custom_command(OUTPUT keepassxc-cli.1 +- COMMAND ${ASCIIDOCTOR_EXE} -D ${OUT_DIR} -b manpage ${DOC_DIR}/man/keepassxc-cli.1.adoc +- DEPENDS ${DOC_DIR}/man/keepassxc-cli.1.adoc +- VERBATIM) +- add_custom_target(manpages ALL DEPENDS keepassxc.1 keepassxc-cli.1) +- +- install(FILES +- ${OUT_DIR}/keepassxc.1 +- ${OUT_DIR}/keepassxc-cli.1 +- DESTINATION ${CMAKE_INSTALL_MANDIR}/man1/) +-endif() +diff -urNr keepassxc-2.6.4-orig/docs/GettingStarted.adoc keepassxc-2.6.4-patched/docs/GettingStarted.adoc +--- keepassxc-2.6.4-orig/docs/GettingStarted.adoc 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/docs/GettingStarted.adoc 1970-01-01 01:00:00.000000000 +0100 +@@ -1,34 +0,0 @@ +-= KeePassXC: Getting Started Guide +-KeePassXC Team +-v2.6.0 +-:data-uri: +-:linkcss!: +-:homepage: https://keepassxc.org +-:icons: font +-:imagesdir: images +-:stylesheet: styles/dark.css +-:toc: left +-ifdef::backend-pdf[] +-:title-page: +-:title-logo-image: {imagesdir}/kpxc_logo.png +-:pdf-theme: styles/pdf_theme.yml +-:compress: +-endif::[] +- +-include::topics/Disclaimers.adoc[] +- +-<<< +- +-// Include various topics, excluding advanced sections +- +-include::topics/Welcome.adoc[tags=*;!advanced] +- +-include::topics/DownloadInstall.adoc[tags=*;!advanced] +- +-include::topics/UserInterface.adoc[tags=*;!advanced] +- +-include::topics/PasswordGenerator.adoc[tags=*;!advanced] +- +-include::topics/DatabaseOperations.adoc[tags=*;!advanced] +- +-include::topics/BrowserPlugin.adoc[tags=*;!advanced] +I file binari keepassxc-2.6.4-orig/docs/images/autoopen_ifdevice.png e keepassxc-2.6.4-patched/docs/images/autoopen_ifdevice.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/autoopen.png e keepassxc-2.6.4-patched/docs/images/autoopen.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/autotype_entrylevel.png e keepassxc-2.6.4-patched/docs/images/autotype_entrylevel.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/autotype_entry_sequences.png e keepassxc-2.6.4-patched/docs/images/autotype_entry_sequences.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/autotype_selection_dialog.png e keepassxc-2.6.4-patched/docs/images/autotype_selection_dialog.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/autotype_settings.png e keepassxc-2.6.4-patched/docs/images/autotype_settings.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/browser_advanced_settings.png e keepassxc-2.6.4-patched/docs/images/browser_advanced_settings.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/browser_confirm_access_dialog.png e keepassxc-2.6.4-patched/docs/images/browser_confirm_access_dialog.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/browser_database_settings.png e keepassxc-2.6.4-patched/docs/images/browser_database_settings.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/browser_entry_settings.png e keepassxc-2.6.4-patched/docs/images/browser_entry_settings.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/browser_extension_association.png e keepassxc-2.6.4-patched/docs/images/browser_extension_association.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/browser_extension_connect.png e keepassxc-2.6.4-patched/docs/images/browser_extension_connect.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/browser_extension_icons.png e keepassxc-2.6.4-patched/docs/images/browser_extension_icons.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/browser_extension_reload.png e keepassxc-2.6.4-patched/docs/images/browser_extension_reload.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/browser_fill_credentials.png e keepassxc-2.6.4-patched/docs/images/browser_fill_credentials.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/browser_settings.png e keepassxc-2.6.4-patched/docs/images/browser_settings.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/clone_entry_dialog.png e keepassxc-2.6.4-patched/docs/images/clone_entry_dialog.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/clone_entry.png e keepassxc-2.6.4-patched/docs/images/clone_entry.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/clone_entry_references.png e keepassxc-2.6.4-patched/docs/images/clone_entry_references.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/compact_mode_comparison.png e keepassxc-2.6.4-patched/docs/images/compact_mode_comparison.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/csv_import.png e keepassxc-2.6.4-patched/docs/images/csv_import.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/database_security_credentials.png e keepassxc-2.6.4-patched/docs/images/database_security_credentials.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/database_security_encryption_advanced.png e keepassxc-2.6.4-patched/docs/images/database_security_encryption_advanced.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/database_security_encryption.png e keepassxc-2.6.4-patched/docs/images/database_security_encryption.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/database_security.png e keepassxc-2.6.4-patched/docs/images/database_security.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/database_settings.png e keepassxc-2.6.4-patched/docs/images/database_settings.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/database_view.png e keepassxc-2.6.4-patched/docs/images/database_view.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/edit_entry_attachments.png e keepassxc-2.6.4-patched/docs/images/edit_entry_attachments.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/edit_entry_attributes.png e keepassxc-2.6.4-patched/docs/images/edit_entry_attributes.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/edit_entry_colors.png e keepassxc-2.6.4-patched/docs/images/edit_entry_colors.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/edit_entry_history.png e keepassxc-2.6.4-patched/docs/images/edit_entry_history.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/edit_entry_icons.png e keepassxc-2.6.4-patched/docs/images/edit_entry_icons.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/edit_entry.png e keepassxc-2.6.4-patched/docs/images/edit_entry.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/edit_entry_properties.png e keepassxc-2.6.4-patched/docs/images/edit_entry_properties.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/export_database.png e keepassxc-2.6.4-patched/docs/images/export_database.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/install_wizard_1.png e keepassxc-2.6.4-patched/docs/images/install_wizard_1.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/install_wizard_2.png e keepassxc-2.6.4-patched/docs/images/install_wizard_2.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/keeshare_application_settings.png e keepassxc-2.6.4-patched/docs/images/keeshare_application_settings.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/keeshare_group_settings.png e keepassxc-2.6.4-patched/docs/images/keeshare_group_settings.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/keeshare_shared_group.png e keepassxc-2.6.4-patched/docs/images/keeshare_shared_group.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/kpxc_logo.png e keepassxc-2.6.4-patched/docs/images/kpxc_logo.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/linux_store.png e keepassxc-2.6.4-patched/docs/images/linux_store.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/macos_install.png e keepassxc-2.6.4-patched/docs/images/macos_install.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/main_interface.png e keepassxc-2.6.4-patched/docs/images/main_interface.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/new_db_wizard_1.png e keepassxc-2.6.4-patched/docs/images/new_db_wizard_1.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/new_db_wizard_2.png e keepassxc-2.6.4-patched/docs/images/new_db_wizard_2.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/new_db_wizard_3.png e keepassxc-2.6.4-patched/docs/images/new_db_wizard_3.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/open_database.png e keepassxc-2.6.4-patched/docs/images/open_database.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/passphrase_generator.png e keepassxc-2.6.4-patched/docs/images/passphrase_generator.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/password_generator_advanced.png e keepassxc-2.6.4-patched/docs/images/password_generator_advanced.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/password_generator.png e keepassxc-2.6.4-patched/docs/images/password_generator.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/save_database_backup.png e keepassxc-2.6.4-patched/docs/images/save_database_backup.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/sshagent_application_settings.png e keepassxc-2.6.4-patched/docs/images/sshagent_application_settings.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/sshagent_context_menu.png e keepassxc-2.6.4-patched/docs/images/sshagent_context_menu.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/sshagent_entry_settings.png e keepassxc-2.6.4-patched/docs/images/sshagent_entry_settings.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/sshagent_puttygen.png e keepassxc-2.6.4-patched/docs/images/sshagent_puttygen.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/theme_comparison.png e keepassxc-2.6.4-patched/docs/images/theme_comparison.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/theme_selection.png e keepassxc-2.6.4-patched/docs/images/theme_selection.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/toolbar.png e keepassxc-2.6.4-patched/docs/images/toolbar.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/uac_dialog.png e keepassxc-2.6.4-patched/docs/images/uac_dialog.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/unlock_database.png e keepassxc-2.6.4-patched/docs/images/unlock_database.png sono diversi +I file binari keepassxc-2.6.4-orig/docs/images/welcome_screen.png e keepassxc-2.6.4-patched/docs/images/welcome_screen.png sono diversi +diff -urNr keepassxc-2.6.4-orig/docs/man/keepassxc.1.adoc keepassxc-2.6.4-patched/docs/man/keepassxc.1.adoc +--- keepassxc-2.6.4-orig/docs/man/keepassxc.1.adoc 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/docs/man/keepassxc.1.adoc 1970-01-01 01:00:00.000000000 +0100 +@@ -1,65 +0,0 @@ +-// Copyright (C) 2019 Janek Bevendorff +-// Copyright (C) 2020 KeePassXC Team +-// +-// This program is free software: you can redistribute it and/or modify +-// it under the terms of the GNU General Public License as published by +-// the Free Software Foundation, either version 2 or (at your option) +-// version 3 of the License. +-// +-// This program is distributed in the hope that it will be useful, +-// but WITHOUT ANY WARRANTY; without even the implied warranty of +-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-// GNU General Public License for more details. +-// +-// You should have received a copy of the GNU General Public License +-// along with this program. If not, see . +- +-= keepassxc(1) +-:docdate: 2020-07-10 +-:doctype: manpage +-:revnumber: 2.6.0 +-:mansource: KeePassXC {revnumber} +-:manmanual: General Commands Manual +- +-== NAME +-keepassxc - a modern open-source password manager +- +-== SYNOPSIS +-*keepassxc* [_options_] [_filename(s)_] +- +-== DESCRIPTION +-*KeePassXC* is a free/open-source password manager or safe which helps you to manage your passwords in a secure way. +-The complete database is always encrypted with the industry-standard AES (alias Rijndael) encryption algorithm using a 256 bit key. +-KeePassXC uses a database format that is compatible with KeePass Password Safe. +-Your wallet works offline and requires no Internet connection. +- +-== OPTIONS +-*-h*, *--help*:: +- Displays this help. +- +-*-v*, *--version*:: +- Displays version information. +- +-*--config* <__config__>:: +- Path to a custom config file. +- +-*--keyfile* <__keyfile__>:: +- Key file of the database. +- +-*--pw-stdin*:: +- Read password of the database from stdin. +- +-*--pw*, *--parent-window* <__handle__>:: +- Parent window handle. +- +-*--debug-info*:: +- Displays debugging information. +- +-include::section-notes.adoc[] +- +-== AUTHOR +-This manual page was originally written by Janek Bevendorff . +- +-include::section-reporting-bugs.adoc[] +- +-include::section-copyright.adoc[] +diff -urNr keepassxc-2.6.4-orig/docs/man/keepassxc-cli.1.adoc keepassxc-2.6.4-patched/docs/man/keepassxc-cli.1.adoc +--- keepassxc-2.6.4-orig/docs/man/keepassxc-cli.1.adoc 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/docs/man/keepassxc-cli.1.adoc 1970-01-01 01:00:00.000000000 +0100 +@@ -1,302 +0,0 @@ +-// Copyright (C) 2017 Manolis Agkopian +-// Copyright (C) 2020 KeePassXC Team +-// +-// This program is free software: you can redistribute it and/or modify +-// it under the terms of the GNU General Public License as published by +-// the Free Software Foundation, either version 2 or (at your option) +-// version 3 of the License. +-// +-// This program is distributed in the hope that it will be useful, +-// but WITHOUT ANY WARRANTY; without even the implied warranty of +-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-// GNU General Public License for more details. +-// +-// You should have received a copy of the GNU General Public License +-// along with this program. If not, see . +- +-= keepassxc-cli(1) +-:docdate: 2020-07-10 +-:doctype: manpage +-:revnumber: 2.6.0 +-:mansource: KeePassXC {revnumber} +-:manmanual: General Commands Manual +- +-== NAME +-keepassxc-cli - command line interface for the KeePassXC password manager +- +-== SYNOPSIS +-*keepassxc-cli* _command_ [_options_] +- +-== DESCRIPTION +-*keepassxc-cli* is the command line interface for the *KeePassXC* password manager. +-It provides the ability to query and modify the entries of a KeePass database, directly from the command line. +- +-== COMMANDS +-*add* [_options_] <__database__> <__entry__>:: +- Adds a new entry to a database. +- A password can be generated (*-g* option), or a prompt can be displayed to input the password (*-p* option). +- The same password generation options as documented for the generate command can be used when the *-g* option is set. +- +-*analyze* [_options_] <__database__>:: +- Analyzes passwords in a database for weaknesses. +- +-*clip* [_options_] <__database__> <__entry__> [_timeout_]:: +- Copies an attribute or the current TOTP (if the *-t* option is specified) of a database entry to the clipboard. +- If no attribute name is specified using the *-a* option, the password is copied. +- If multiple entries with the same name exist in different groups, only the attribute for the first one is copied. +- For copying the attribute of an entry in a specific group, the group path to the entry should be specified as well, instead of just the name. +- Optionally, a timeout in seconds can be specified to automatically clear the clipboard. +- +-*close*:: +- In interactive mode, closes the currently opened database (see *open*). +- +-*db-create* [_options_] <__database__>:: +- Creates a new database with a password and/or a key file. +- The key file will be created if the file that is referred to does not exist. +- If both the key file and password are empty, no database will be created. +- +-*db-info* [_options_] <__database__>:: +- Show a database's information. +- +-*diceware* [_options_]:: +- Generates a random diceware passphrase. +- +-*edit* [_options_] <__database__> <__entry__>:: +- Edits a database entry. +- A password can be generated (*-g* option), or a prompt can be displayed to input the password (*-p* option). +- The same password generation options as documented for the generate command can be used when the *-g* option is set. +- +-*estimate* [_options_] [_password_]:: +- Estimates the entropy of a password. +- The password to estimate can be provided as a positional argument, or using the standard input. +- +-*exit*:: +- Exits interactive mode. +- Synonymous with *quit*. +- +-*export* [_options_] <__database__>:: +- Exports the content of a database to standard output in the specified format (defaults to XML). +- +-*generate* [_options_]:: +- Generates a random password. +- +-*help* [_command_]:: +- Displays a list of available commands, or detailed information about the specified command. +- +-*import* [_options_] <__xml__> <__database__>:: +- Imports the contents of an XML database to the target database. +- +-*locate* [_options_] <__database__> <__term__>:: +- Locates all the entries that match a specific search term in a database. +- +-*ls* [_options_] <__database__> [_group_]:: +- Lists the contents of a group in a database. +- If no group is specified, it will default to the root group. +- +-*merge* [_options_] <__database1__> <__database2__>:: +- Merges two databases together. +- The first database file is going to be replaced by the result of the merge, for that reason it is advisable to keep a backup of the two database files before attempting a merge. +- In the case that both databases make use of the same credentials, the *--same-credentials* or *-s* option can be used. +- +-*mkdir* [_options_] <__database__> <__group__>:: +- Adds a new group to a database. +- +-*mv* [_options_] <__database__> <__entry__> <__group__>:: +- Moves an entry to a new group. +- +-*open* [_options_] <__database__>:: +- Opens the given database in a shell-style interactive mode. +- This is useful for performing multiple operations on a single database (e.g. *ls* followed by *show*). +- +-*quit*:: +- Exits interactive mode. +- Synonymous with *exit*. +- +-*rm* [_options_] <__database__> <__entry__>:: +- Removes an entry from a database. +- If the database has a recycle bin, the entry will be moved there. +- If the entry is already in the recycle bin, it will be removed permanently. +- +-*rmdir* [_options_] <__database__> <__group__>:: +- Removes a group from a database. +- If the database has a recycle bin, the group will be moved there. +- If the group is already in the recycle bin, it will be removed permanently. +- +-*show* [_options_] <__database__> <__entry__>:: +- Shows the title, username, password, URL and notes of a database entry. +- Can also show the current TOTP. +- Regarding the occurrence of multiple entries with the same name in different groups, everything stated in the *clip* command section also applies here. +- +-== OPTIONS +-=== General options +-*--debug-info*:: +- Displays debugging information. +- +-*-k*, *--key-file* <__path__>:: +- Specifies a path to a key file for unlocking the database. +- In a merge operation this option, is used to specify the key file path for the first database. +- +-*--no-password*:: +- Deactivates the password key for the database. +- +-*-y*, *--yubikey* <__slot__>:: +- Specifies a yubikey slot for unlocking the database. +- In a merge operation this option is used to specify the YubiKey slot for the first database. +- +-*-q*, *--quiet* <__path__>:: +- Silences password prompt and other secondary outputs. +- +-*-h*, *--help*:: +- Displays help information. +- +-*-v*, *--version*:: +- Displays the program version. +- +-=== Merge options +-*-d*, *--dry-run* <__path__>:: +- Prints the changes detected by the merge operation without making any changes to the database. +- +-*--key-file-from* <__path__>:: +- Sets the path of the key file for the second database. +- +-*--no-password-from*:: +- Deactivates password key for the database to merge from. +- +-*--yubikey-from* <__slot__>:: +- YubiKey slot for the second database. +- +-*-s*, *--same-credentials*:: +- Uses the same credentials for unlocking both databases. +- +-=== Add and edit options +-The same password generation options as documented for the generate command can be used with those 2 commands when the *-g* option is set. +- +-*-u*, *--username* <__username__>:: +- Specifies the username of the entry. +- +-*--url* <__url__>:: +- Specifies the URL of the entry. +- +-*-p*, *--password-prompt*:: +- Uses a password prompt for the entry's password. +- +-*-g*, *--generate*:: +- Generates a new password for the entry. +- +-=== Edit options +-*-t*, *--title* <__title__>:: +- Specifies the title of the entry. +- +-=== Estimate options +-*-a*, *--advanced*:: +- Performs advanced analysis on the password. +- +-=== Analyze options +-*-H*, *--hibp* <__filename__>:: +- Checks if any passwords have been publicly leaked, by comparing against the given list of password SHA-1 hashes, which must be in "Have I Been Pwned" format. +- Such files are available from https://haveibeenpwned.com/Passwords; +- note that they are large, and so this operation typically takes some time (minutes up to an hour or so). +- +-=== Clip options +-*-a*, *--attribute*:: +- Copies the specified attribute to the clipboard. +- If no attribute is specified, the password attribute is the default. +- For example, "*-a* *username*" would copy the username to the clipboard. +- [Default: password] +- +-*-t*, *--totp*:: +- Copies the current TOTP instead of the specified attribute to the clipboard. +- Will report an error if no TOTP is configured for the entry. +- +-=== Create options +-*-k*, *--set-key-file* <__path__>:: +- Set the key file for the database. +- +-*-p*, *--set-password*:: +- Set a password for the database. +- +-*-t*, *--decryption-time* <__time__>:: +- Target decryption time in MS for the database. +- +-=== Show options +-*-a*, *--attributes* <__attribute__>...:: +- Shows the named attributes. +- This option can be specified more than once, with each attribute shown one-per-line in the given order. +- If no attributes are specified and *-t* is not specified, a summary of the default attributes is given. +- Protected attributes will be displayed in clear text if specified explicitly by this option. +- +-*-s*, *--show-protected*:: +- Shows the protected attributes in clear text. +- +-*-t*, *--totp*:: +- Also shows the current TOTP, reporting an error if no TOTP is configured for the entry. +- +-=== Diceware options +-*-W*, *--words* <__count__>:: +- Sets the desired number of words for the generated passphrase. +- [Default: 7] +- +-*-w*, *--word-list* <__path__>:: +- Sets the Path of the wordlist for the diceware generator. +- The wordlist must have > 1000 words, otherwise the program will fail. +- If the wordlist has < 4000 words a warning will be printed to STDERR. +- +-=== Export options +-*-f*, *--format*:: +- Format to use when exporting. +- Available choices are xml or csv. +- Defaults to xml. +- +-=== List options +-*-R*, *--recursive*:: +- Recursively lists the elements of the group. +- +-*-f*, *--flatten*:: +- Flattens the output to single lines. +- When this option is enabled, subgroups and subentries will be displayed with a relative group path instead of indentation. +- +-=== Generate options +-*-L*, *--length* <__length__>:: +- Sets the desired length for the generated password. +- [Default: 16] +- +-*-l*, *--lower*:: +- Uses lowercase characters for the generated password. +- [Default: Enabled] +- +-*-U*, *--upper*:: +- Uses uppercase characters for the generated password. +- [Default: Enabled] +- +-*-n*, *--numeric*:: +- Uses numbers characters for the generated password. +- [Default: Enabled] +- +-*-s*, *--special*:: +- Uses special characters for the generated password. +- [Default: Disabled] +- +-*-e*, *--extended*:: +- Uses extended ASCII characters for the generated password. +- [Default: Disabled] +- +-*-x*, *--exclude* <__chars__>:: +- Comma-separated list of characters to exclude from the generated password. +- None is excluded by default. +- +-*--exclude-similar*:: +- Exclude similar looking characters. +- [Default: Disabled] +- +-*--every-group*:: +- Include characters from every selected group. +- [Default: Disabled] +- +-include::section-notes.adoc[] +- +-== AUTHOR +-This manual page was originally written by Manolis Agkopian . +- +-include::section-reporting-bugs.adoc[] +- +-include::section-copyright.adoc[] +diff -urNr keepassxc-2.6.4-orig/docs/man/section-copyright.adoc keepassxc-2.6.4-patched/docs/man/section-copyright.adoc +--- keepassxc-2.6.4-orig/docs/man/section-copyright.adoc 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/docs/man/section-copyright.adoc 1970-01-01 01:00:00.000000000 +0100 +@@ -1,19 +0,0 @@ +-// Copyright (C) 2020 KeePassXC Team +-// +-// This program is free software: you can redistribute it and/or modify +-// it under the terms of the GNU General Public License as published by +-// the Free Software Foundation, either version 2 or (at your option) +-// version 3 of the License. +-// +-// This program is distributed in the hope that it will be useful, +-// but WITHOUT ANY WARRANTY; without even the implied warranty of +-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-// GNU General Public License for more details. +-// +-// You should have received a copy of the GNU General Public License +-// along with this program. If not, see . +- +-== COPYRIGHT +-Copyright \(C) 2016-2020 KeePassXC Team +- +-*KeePassXC* code is licensed under GPL-2 or GPL-3. +diff -urNr keepassxc-2.6.4-orig/docs/man/section-notes.adoc keepassxc-2.6.4-patched/docs/man/section-notes.adoc +--- keepassxc-2.6.4-orig/docs/man/section-notes.adoc 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/docs/man/section-notes.adoc 1970-01-01 01:00:00.000000000 +0100 +@@ -1,27 +0,0 @@ +-// Copyright (C) 2020 KeePassXC Team +-// +-// This program is free software: you can redistribute it and/or modify +-// it under the terms of the GNU General Public License as published by +-// the Free Software Foundation, either version 2 or (at your option) +-// version 3 of the License. +-// +-// This program is distributed in the hope that it will be useful, +-// but WITHOUT ANY WARRANTY; without even the implied warranty of +-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-// GNU General Public License for more details. +-// +-// You should have received a copy of the GNU General Public License +-// along with this program. If not, see . +- +-== NOTES +-*Project homepage*:: +- https://keepassxc.org +- +-*QuickStart Guide*:: +- https://keepassxc.org/docs/KeePassXC_GettingStarted.html +- +-*User Guide*:: +- https://keepassxc.org/docs/KeePassXC_UserGuide.html +- +-*Git repository*:: +- https://github.com/keepassxreboot/keepassxc.git +diff -urNr keepassxc-2.6.4-orig/docs/man/section-reporting-bugs.adoc keepassxc-2.6.4-patched/docs/man/section-reporting-bugs.adoc +--- keepassxc-2.6.4-orig/docs/man/section-reporting-bugs.adoc 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/docs/man/section-reporting-bugs.adoc 1970-01-01 01:00:00.000000000 +0100 +@@ -1,17 +0,0 @@ +-// Copyright (C) 2020 KeePassXC Team +-// +-// This program is free software: you can redistribute it and/or modify +-// it under the terms of the GNU General Public License as published by +-// the Free Software Foundation, either version 2 or (at your option) +-// version 3 of the License. +-// +-// This program is distributed in the hope that it will be useful, +-// but WITHOUT ANY WARRANTY; without even the implied warranty of +-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-// GNU General Public License for more details. +-// +-// You should have received a copy of the GNU General Public License +-// along with this program. If not, see . +- +-== REPORTING BUGS +-Bugs and feature requests can be reported on GitHub at https://github.com/keepassxreboot/keepassxc/issues. +diff -urNr keepassxc-2.6.4-orig/docs/styles/dark.css keepassxc-2.6.4-patched/docs/styles/dark.css +--- keepassxc-2.6.4-orig/docs/styles/dark.css 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/docs/styles/dark.css 1970-01-01 01:00:00.000000000 +0100 +@@ -1,536 +0,0 @@ +-@import url(https://fonts.googleapis.com/css?family=Noto+Sans); +- +-/* Asciidoctor default stylesheet | MIT License | http://asciidoctor.org */ +-/* Uncomment @import statement below to use as custom stylesheet */ +-/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/ +-article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block} +-audio,canvas,video{display:inline-block} +-audio:not([controls]){display:none;height:0} +-script{display:none!important} +-html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%} +-a{background:transparent} +-a:focus{outline:thin dotted} +-a:active,a:hover{outline:0} +-h1{font-size:2em;margin:.67em 0} +-abbr[title]{border-bottom:1px dotted} +-b,strong{font-weight:bold} +-dfn{font-style:italic} +-hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0} +-mark{background:#ff0;color:#000} +-code,kbd,pre,samp{font-family:monospace;font-size:1em} +-pre{white-space:pre-wrap} +-q{quotes:"\201C" "\201D" "\2018" "\2019"} +-small{font-size:80%} +-sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline} +-sup{top:-.5em} +-sub{bottom:-.25em} +-img{border:0} +-svg:not(:root){overflow:hidden} +-figure{margin:0} +-fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em} +-legend{border:0;padding:0} +-button,input,select,textarea{font-family:inherit;font-size:100%;margin:0} +-button,input{line-height:normal} +-button,select{text-transform:none} +-button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer} +-button[disabled],html input[disabled]{cursor:default} +-input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0} +-button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0} +-textarea{overflow:auto;vertical-align:top} +-table{border-collapse:collapse;border-spacing:0} +-*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box} +-html,body{font-size:100%} +-body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased} +-a:hover{cursor:pointer} +-img,object,embed{max-width:100%;height:auto} +-object,embed{height:100%} +-img{-ms-interpolation-mode:bicubic} +-.left{float:left!important} +-.right{float:right!important} +-.text-left{text-align:left!important} +-.text-right{text-align:right!important} +-.text-center{text-align:center!important} +-.text-justify{text-align:justify!important} +-.hide{display:none} +-img,object,svg{display:inline-block;vertical-align:middle} +-textarea{height:auto;min-height:50px} +-select{width:100%} +-.center{margin-left:auto;margin-right:auto} +-.stretch{width:100%} +-.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em} +-div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr} +-a{color:#2156a5;text-decoration:underline;line-height:inherit} +-a:hover,a:focus{color:#1d4b8f} +-a img{border:none} +-p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility} +-p aside{font-size:.875em;line-height:1.35;font-style:italic} +-h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em} +-h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0} +-h1{font-size:2.125em} +-h2{font-size:1.6875em} +-h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em} +-h4,h5{font-size:1.125em} +-h6{font-size:1em} +-hr{border:solid #ddddd8;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0} +-em,i{font-style:italic;line-height:inherit} +-strong,b{font-weight:bold;line-height:inherit} +-small{font-size:60%;line-height:inherit} +-code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)} +-ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit} +-ul,ol{margin-left:1.5em} +-ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em} +-ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit} +-ul.square{list-style-type:square} +-ul.circle{list-style-type:circle} +-ul.disc{list-style-type:disc} +-ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0} +-dl dt{margin-bottom:.3125em;font-weight:bold} +-dl dd{margin-bottom:1.25em} +-abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help} +-abbr{text-transform:none} +-blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd} +-blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)} +-blockquote cite::before{content:"\2014 \0020"} +-blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)} +-blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)} +-@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2} +-h1{font-size:2.75em} +-h2{font-size:2.3125em} +-h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em} +-h4{font-size:1.4375em}} +-table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede} +-table thead,table tfoot{background:#f7f8f7} +-table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left} +-table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)} +-table tr.even,table tr.alt,table tr:nth-of-type(even){background:#f8f8f7} +-table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6} +-h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em} +-h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400} +-.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table} +-.clearfix::after,.float-group::after{clear:both} +-*:not(pre)>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background-color:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word} +-*:not(pre)>code.nobreak{word-wrap:normal} +-*:not(pre)>code.nowrap{white-space:nowrap} +-pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed} +-em em{font-style:normal} +-strong strong{font-weight:400} +-.keyseq{color:rgba(51,51,51,.8)} +-kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap} +-.keyseq kbd:first-child{margin-left:0} +-.keyseq kbd:last-child{margin-right:0} +-.menuseq,.menuref{color:#000} +-.menuseq b:not(.caret),.menuref{font-weight:inherit} +-.menuseq{word-spacing:-.02em} +-.menuseq b.caret{font-size:1.25em;line-height:.8} +-.menuseq i.caret{font-weight:bold;text-align:center;width:.45em} +-b.button::before,b.button::after{position:relative;top:-1px;font-weight:400} +-b.button::before{content:"[";padding:0 3px 0 2px} +-b.button::after{content:"]";padding:0 2px 0 3px} +-p a>code:hover{color:rgba(0,0,0,.9)} +-#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em} +-#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table} +-#header::after,#content::after,#footnotes::after,#footer::after{clear:both} +-#content{margin-top:1.25em} +-#content::before{content:none} +-#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0} +-#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #ddddd8} +-#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #ddddd8;padding-bottom:8px} +-#header .details{border-bottom:1px solid #ddddd8;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap} +-#header .details span:first-child{margin-left:-.125em} +-#header .details span.email a{color:rgba(0,0,0,.85)} +-#header .details br{display:none} +-#header .details br+span::before{content:"\00a0\2013\00a0"} +-#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)} +-#header .details br+span#revremark::before{content:"\00a0|\00a0"} +-#header #revnumber{text-transform:capitalize} +-#header #revnumber::after{content:"\00a0"} +-#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #ddddd8;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem} +-#toc{border-bottom:1px solid #efefed;padding-bottom:.5em} +-#toc>ul{margin-left:.125em} +-#toc ul.sectlevel0>li>a{font-style:italic} +-#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0} +-#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none} +-#toc li{line-height:1.3334;margin-top:.3334em} +-#toc a{text-decoration:none} +-#toc a:active{text-decoration:underline} +-#toctitle{color:#7a2518;font-size:1.2em} +-@media screen and (min-width:768px){#toctitle{font-size:1.375em} +-body.toc2{padding-left:15em;padding-right:0} +-#toc.toc2{margin-top:0!important;background-color:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #efefed;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto} +-#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em} +-#toc.toc2>ul{font-size:.9em;margin-bottom:0} +-#toc.toc2 ul ul{margin-left:0;padding-left:1em} +-#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em} +-body.toc2.toc-right{padding-left:0;padding-right:15em} +-body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #efefed;left:auto;right:0}} +-@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0} +-#toc.toc2{width:20em} +-#toc.toc2 #toctitle{font-size:1.375em} +-#toc.toc2>ul{font-size:.95em} +-#toc.toc2 ul ul{padding-left:1.25em} +-body.toc2.toc-right{padding-left:0;padding-right:20em}} +-#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px} +-#content #toc>:first-child{margin-top:0} +-#content #toc>:last-child{margin-bottom:0} +-#footer{max-width:100%;background-color:rgba(0,0,0,.8);padding:1.25em} +-#footer-text{color:rgba(255,255,255,.8);line-height:1.44} +-#content{margin-bottom:.625em} +-.sect1{padding-bottom:.625em} +-@media screen and (min-width:768px){#content{margin-bottom:1.25em} +-.sect1{padding-bottom:1.25em}} +-.sect1:last-child{padding-bottom:0} +-.sect1+.sect1{border-top:1px solid #efefed} +-#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400} +-#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em} +-#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible} +-#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none} +-#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221} +-.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em} +-.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic} +-table.tableblock.fit-content>caption.title{white-space:nowrap;width:0} +-.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)} +-table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit} +-.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%} +-.admonitionblock>table td.icon{text-align:center;width:80px} +-.admonitionblock>table td.icon img{max-width:none} +-.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase} +-.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #ddddd8;color:rgba(0,0,0,.6)} +-.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0} +-.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px} +-.exampleblock>.content>:first-child{margin-top:0} +-.exampleblock>.content>:last-child{margin-bottom:0} +-.sidebarblock{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px} +-.sidebarblock>:first-child{margin-top:0} +-.sidebarblock>:last-child{margin-bottom:0} +-.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center} +-.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0} +-.literalblock pre,.listingblock pre:not(.highlight),.listingblock pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock pre.CodeRay,.listingblock pre.prettyprint{background:#f7f7f8} +-.sidebarblock .literalblock pre,.sidebarblock .listingblock pre:not(.highlight),.sidebarblock .listingblock pre[class="highlight"],.sidebarblock .listingblock pre[class^="highlight "],.sidebarblock .listingblock pre.CodeRay,.sidebarblock .listingblock pre.prettyprint{background:#f2f1f1} +-.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;padding:1em;font-size:.8125em} +-.literalblock pre.nowrap,.literalblock pre[class].nowrap,.listingblock pre.nowrap,.listingblock pre[class].nowrap{overflow-x:auto;white-space:pre;word-wrap:normal} +-@media screen and (min-width:768px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:.90625em}} +-@media screen and (min-width:1280px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:1em}} +-.literalblock.output pre{color:#f7f7f8;background-color:rgba(0,0,0,.9)} +-.listingblock pre.highlightjs{padding:0} +-.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px} +-.listingblock pre.prettyprint{border-width:0} +-.listingblock>.content{position:relative} +-.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:#999} +-.listingblock:hover code[data-lang]::before{display:block} +-.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:#999} +-.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"} +-table.pyhltable{border-collapse:separate;border:0;margin-bottom:0;background:none} +-table.pyhltable td{vertical-align:top;padding-top:0;padding-bottom:0;line-height:1.45} +-table.pyhltable td.code{padding-left:.75em;padding-right:0} +-pre.pygments .lineno,table.pyhltable td:not(.code){color:#999;padding-left:0;padding-right:.5em;border-right:1px solid #ddddd8} +-pre.pygments .lineno{display:inline-block;margin-right:.25em} +-table.pyhltable .linenodiv{background:none!important;padding-right:0!important} +-.quoteblock{margin:0 1em 1.25em 1.5em;display:table} +-.quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em} +-.quoteblock blockquote,.quoteblock blockquote p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify} +-.quoteblock blockquote{margin:0;padding:0;border:0} +-.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)} +-.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0} +-.quoteblock .attribution{margin-top:.5em;margin-right:.5ex;text-align:right} +-.quoteblock .quoteblock{margin-left:0;margin-right:0;padding:.5em 0;border-left:3px solid rgba(0,0,0,.6)} +-.quoteblock .quoteblock blockquote{padding:0 0 0 .75em} +-.quoteblock .quoteblock blockquote::before{display:none} +-.verseblock{margin:0 1em 1.25em} +-.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility} +-.verseblock pre strong{font-weight:400} +-.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex} +-.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic} +-.quoteblock .attribution br,.verseblock .attribution br{display:none} +-.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)} +-.quoteblock.abstract{margin:0 1em 1.25em;display:block} +-.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center} +-.quoteblock.abstract blockquote,.quoteblock.abstract blockquote p{word-spacing:0;line-height:1.6} +-.quoteblock.abstract blockquote::before,.quoteblock.abstract p::before{display:none} +-table.tableblock{max-width:100%;border-collapse:separate} +-p.tableblock:last-child{margin-bottom:0} +-td.tableblock>.content{margin-bottom:-1.25em} +-table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede} +-table.grid-all>thead>tr>.tableblock,table.grid-all>tbody>tr>.tableblock{border-width:0 1px 1px 0} +-table.grid-all>tfoot>tr>.tableblock{border-width:1px 1px 0 0} +-table.grid-cols>*>tr>.tableblock{border-width:0 1px 0 0} +-table.grid-rows>thead>tr>.tableblock,table.grid-rows>tbody>tr>.tableblock{border-width:0 0 1px} +-table.grid-rows>tfoot>tr>.tableblock{border-width:1px 0 0} +-table.grid-all>*>tr>.tableblock:last-child,table.grid-cols>*>tr>.tableblock:last-child{border-right-width:0} +-table.grid-all>tbody>tr:last-child>.tableblock,table.grid-all>thead:last-child>tr>.tableblock,table.grid-rows>tbody>tr:last-child>.tableblock,table.grid-rows>thead:last-child>tr>.tableblock{border-bottom-width:0} +-table.frame-all{border-width:1px} +-table.frame-sides{border-width:0 1px} +-table.frame-topbot,table.frame-ends{border-width:1px 0} +-table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd){background:#f8f8f7} +-table.stripes-none tr,table.stripes-odd tr:nth-of-type(even){background:none} +-th.halign-left,td.halign-left{text-align:left} +-th.halign-right,td.halign-right{text-align:right} +-th.halign-center,td.halign-center{text-align:center} +-th.valign-top,td.valign-top{vertical-align:top} +-th.valign-bottom,td.valign-bottom{vertical-align:bottom} +-th.valign-middle,td.valign-middle{vertical-align:middle} +-table thead th,table tfoot th{font-weight:bold} +-tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7} +-tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold} +-p.tableblock>code:only-child{background:none;padding:0} +-p.tableblock{font-size:1em} +-td>div.verse{white-space:pre} +-ol{margin-left:1.75em} +-ul li ol{margin-left:1.5em} +-dl dd{margin-left:1.125em} +-dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0} +-ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em} +-ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none} +-ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em} +-ul.unstyled,ol.unstyled{margin-left:0} +-ul.checklist{margin-left:.625em} +-ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em} +-ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em} +-ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em} +-ul.inline>li{margin-left:1.25em} +-.unstyled dl dt{font-weight:400;font-style:normal} +-ol.arabic{list-style-type:decimal} +-ol.decimal{list-style-type:decimal-leading-zero} +-ol.loweralpha{list-style-type:lower-alpha} +-ol.upperalpha{list-style-type:upper-alpha} +-ol.lowerroman{list-style-type:lower-roman} +-ol.upperroman{list-style-type:upper-roman} +-ol.lowergreek{list-style-type:lower-greek} +-.hdlist>table,.colist>table{border:0;background:none} +-.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none} +-td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em} +-td.hdlist1{font-weight:bold;padding-bottom:1.25em} +-.literalblock+.colist,.listingblock+.colist{margin-top:-.5em} +-.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top} +-.colist td:not([class]):first-child img{max-width:none} +-.colist td:not([class]):last-child{padding:.25em 0} +-.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd} +-.imageblock.left,.imageblock[style*="float: left"]{margin:.25em .625em 1.25em 0} +-.imageblock.right,.imageblock[style*="float: right"]{margin:.25em 0 1.25em .625em} +-.imageblock>.title{margin-bottom:0} +-.imageblock.thumb,.imageblock.th{border-width:6px} +-.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em} +-.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0} +-.image.left{margin-right:.625em} +-.image.right{margin-left:.625em} +-a.image{text-decoration:none;display:inline-block} +-a.image object{pointer-events:none} +-sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super} +-sup.footnote a,sup.footnoteref a{text-decoration:none} +-sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline} +-#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em} +-#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0} +-#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em} +-#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em} +-#footnotes .footnote:last-of-type{margin-bottom:0} +-#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0} +-.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0} +-.gist .file-data>table td.line-data{width:99%} +-div.unbreakable{page-break-inside:avoid} +-.big{font-size:larger} +-.small{font-size:smaller} +-.underline{text-decoration:underline} +-.overline{text-decoration:overline} +-.line-through{text-decoration:line-through} +-.aqua{color:#00bfbf} +-.aqua-background{background-color:#00fafa} +-.black{color:#000} +-.black-background{background-color:#000} +-.blue{color:#0000bf} +-.blue-background{background-color:#0000fa} +-.fuchsia{color:#bf00bf} +-.fuchsia-background{background-color:#fa00fa} +-.gray{color:#606060} +-.gray-background{background-color:#7d7d7d} +-.green{color:#006000} +-.green-background{background-color:#007d00} +-.lime{color:#00bf00} +-.lime-background{background-color:#00fa00} +-.maroon{color:#600000} +-.maroon-background{background-color:#7d0000} +-.navy{color:#000060} +-.navy-background{background-color:#00007d} +-.olive{color:#606000} +-.olive-background{background-color:#7d7d00} +-.purple{color:#600060} +-.purple-background{background-color:#7d007d} +-.red{color:#bf0000} +-.red-background{background-color:#fa0000} +-.silver{color:#909090} +-.silver-background{background-color:#bcbcbc} +-.teal{color:#006060} +-.teal-background{background-color:#007d7d} +-.white{color:#bfbfbf} +-.white-background{background-color:#fafafa} +-.yellow{color:#bfbf00} +-.yellow-background{background-color:#fafa00} +-span.icon>.fa{cursor:default} +-a span.icon>.fa{cursor:inherit} +-.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default} +-.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c} +-.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111} +-.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900} +-.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400} +-.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000} +-.conum[data-value]{display:inline-block;color:#fff!important;background-color:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold} +-.conum[data-value] *{color:#fff!important} +-.conum[data-value]+b{display:none} +-.conum[data-value]::after{content:attr(data-value)} +-pre .conum[data-value]{position:relative;top:-.125em} +-b.conum *{color:inherit!important} +-.conum:not([data-value]):empty{display:none} +-dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility} +-h1,h2,p,td.content,span.alt{letter-spacing:-.01em} +-p strong,td.content strong,div.footnote strong{letter-spacing:-.005em} +-p,blockquote,dt,td.content,span.alt{font-size:1.0625rem} +-p{margin-bottom:1.25rem} +-.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em} +-.exampleblock>.content{background-color:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc} +-.print-only{display:none!important} +-@page{margin:1.25cm .75cm} +-@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important} +-html{font-size:80%} +-a{color:inherit!important;text-decoration:underline!important} +-a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important} +-a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em} +-abbr[title]::after{content:" (" attr(title) ")"} +-pre,blockquote,tr,img,object,svg{page-break-inside:avoid} +-thead{display:table-header-group} +-svg{max-width:100%} +-p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3} +-h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid} +-#toc,.sidebarblock,.exampleblock>.content{background:none!important} +-#toc{border-bottom:1px solid #ddddd8!important;padding-bottom:0!important} +-body.book #header{text-align:center} +-body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em} +-body.book #header .details{border:0!important;display:block;padding:0!important} +-body.book #header .details span:first-child{margin-left:0!important} +-body.book #header .details br{display:block} +-body.book #header .details br+span::before{content:none!important} +-body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important} +-body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always} +-.listingblock code[data-lang]::before{display:block} +-#footer{padding:0 .9375em} +-.hide-on-print{display:none!important} +-.print-only{display:block!important} +-.hide-for-print{display:none!important} +-.show-for-print{display:inherit!important}} +-@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem} +-.sect1{padding:0!important} +-.sect1+.sect1{border:0} +-#footer{background:none} +-#footer-text{color:rgba(0,0,0,.6);font-size:.9em}} +-@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}} +- +- +- +-/* CUSTOMISATIONS */ +-/* Change the values in root for quick customisation. If you want even more fine grain... venture further. */ +-:root { +---textcolor: #CACBCE; +---textcoloralt: #e7b649; +---background: #3B3B3D; +---sidebarbackground: #2C2C30; +---header1color: #4adb22; +---header2color: #6de597; +---quotecolor: #20b82b; +---toccolor: #f3bf4a; +---toccolorhover: #eece83; +---linkcolor: #6de597; +---linkhovercolor: #8fdaa9; +---tipcolor: #f0f0f0; +---notecolor: #f3bf4a; +---warningcolor: #FF7D7D; +-} +- +-/* Text styles */ +- +-body{font-family: "Noto Sans",sans-serif;background-color: var(--background);color:var(--textcolor);} +- +-h1{color:var(--header1color) !important;font-family:"Noto Sans",sans-serif;} +-h2,h3,h4,h5,h6{color:var(--header2color) !important;font-family:"Noto Sans",sans-serif;} +-.title{color:var(--textcolor) !important;font-family:"Noto Sans",sans-serif;font-style: normal; font-weight: normal;} +-p{font-family: "Noto Sans",sans-serif !important} +-#toc.toc2 a:link{color:var(--toccolor)} +-#toc.toc2 a:hover{color:var(--toccolorhover)} +-blockquote{color:var(--quotecolor) !important} +-.quoteblock{color:var(--textcolor)} +-code{color:var(--textcoloralt);background-color: var(--sidebarbackground) !important} +-pre,pre>code{line-height:1.25; color:var(--textcoloralt);} +-.keyseq{color:var(--textcoloralt);} +- +- +-/* Table styles */ +-th{background-color: var(--background);color: var(--textcolor) !important;} +-td{background-color: var(--background);color: var(--textcoloralt) !important;} +- +- +-#toc.toc2{background-color:var(--sidebarbackground);} +-#toctitle{color:var(--textcolor);} +- +-/* Responsiveness fixes */ +-video { +- max-width: 100%; +-} +- +-.exampleblock > .content { +- background-color: var(--background); +-} +- +-a {color: var(--linkcolor);} +-a:hover {color: var(--linkhovercolor);} +- +-.admonitionblock.tip td.content, .admonitionblock td.icon .icon-tip::before { +- text-shadow: none; +- color: var(--tipcolor) !important; +-} +- +-.admonitionblock.note td.content, .admonitionblock td.icon .icon-note::before { +- color: var(--notecolor) !important; +-} +- +-.admonitionblock.important td.content, .admonitionblock td.icon .icon-important::before { +- color: var(--warningcolor) !important; +-} +- +-.admonitionblock.warning td.content, .admonitionblock td.icon .icon-warning::before { +- color: var(--warningcolor) !important; +-} +- +-#preamble > .sectionbody > .paragraph:first-of-type p { +- color: var(--textcolor); +-} +- +-.quoteblock blockquote::before { +- color: var(--header1color); +-} +-.quoteblock .attribution cite, .verseblock .attribution cite { +- color: var(--textcolor); +-} +-.verseblock pre { +- color: var(--textcolor); +-} +-.quoteblock blockquote, .quoteblock blockquote p { +- color: var(--textcolor); +-} +- +-.sidebarblock { +- background: var(--sidebarbackground); +-} +-.literalblock pre, .listingblock pre:not(.highlight), .listingblock pre[class="highlight"], .listingblock pre[class^="highlight "], .listingblock pre.CodeRay, .listingblock pre.prettyprint { +- background: var(--sidebarbackground); +- color: var(--textcolor); +-} +- +-#header .details { +- color: var(--textcolor); +-} +-#header .details span.email a { +- color: var(--toccolor); +-} +- +-.title { +- font-size: 3em; +-} +-.subtitle { +- font-size: 1.5em; +-} +diff -urNr keepassxc-2.6.4-orig/docs/styles/pdf_theme.yml keepassxc-2.6.4-patched/docs/styles/pdf_theme.yml +--- keepassxc-2.6.4-orig/docs/styles/pdf_theme.yml 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/docs/styles/pdf_theme.yml 1970-01-01 01:00:00.000000000 +0100 +@@ -1,30 +0,0 @@ +-page: +- layout: portrait +- margin: [0.75in, 1in, 0.75in, 1in] +- size: Letter +-base: +- font-color: #333333 +- font-family: Times-Roman +- font-size: 12 +- line-height-length: 17 +- line-height: $base-line-height-length / $base-font-size +-vertical-spacing: $base-line-height-length +-heading: +- font-color: #262626 +- font-size: 17 +- font-style: bold +- line-height: 1.2 +- margin-bottom: $vertical-spacing +-link: +- font-color: #002FA7 +-outline-list: +- indent: $base-font-size * 1.5 +-footer: +- height: $base-line-height-length * 2.5 +- line-height: 1 +- recto: +- right: +- content: '{page-number}' +- verso: +- left: +- content: $footer-recto-right-content +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/docs/topics/AutoType.adoc keepassxc-2.6.4-patched/docs/topics/AutoType.adoc +--- keepassxc-2.6.4-orig/docs/topics/AutoType.adoc 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/docs/topics/AutoType.adoc 1970-01-01 01:00:00.000000000 +0100 +@@ -1,86 +0,0 @@ +-= KeePassXC - Auto-Type +-:imagesdir: ../images +- +-// tag::content[] +-== Auto-Type +-The Auto-Type feature acts like a virtual keyboard to populate data from your entries directly into the corresponding websites or applications that you use. You can use the Auto-Type feature on a global level or entry level. Each entry can be configured to be associated with a particular window title and multiple Auto-Type sequences can be pre-defined and selected upon use. +- +-NOTE: Auto-Type is a completely separate feature from Browser Integration. You do not need to have the KeePassXC browser extension installed in your browser to use Auto-Type. +- +-WARNING: Auto-Type will be disabled when run with a Wayland compositor on Linux. To use Auto-Type in this environment, you must set `QT_QPA_PLATFORM=xcb` or start KeePassXC with the `-platform xcb` command-line flag. +- +-=== Configure Global Auto-Type +-You can define a global Auto-Type hotkey that starts the Auto-Type process. To configure the hotkey, perform the following steps: +- +-1. Navigate to _Tools_ -> _Settings_ -> Auto-Type tab *(1)*. Click into the _Global Auto-Type shortcut_ box and press the desired key combination that will trigger the Auto-Type process *(2)*. +-+ +-.Auto-Type settings +-image::autotype_settings.png[] +-+ +-You can configure additional Auto-Type settings in this window such as start delay, inter-key typing delay, and matching options. If Auto-Type is not working well for you, try adjusting the default delays. +- +-=== Configure Auto-Type Sequences +-Each entry in your database can have multiple Auto-Type sequences associated with various window titles. Simulated key presses can be sent to any other currently open window of your choice (web browser windows, login dialogs boxes, and so on). When the Global Auto-Type hotkey is pressed, KeePassXC will search your database for entries matching the current selected window title. +- +-NOTE: The default Auto-Type sequence is `{USERNAME}{TAB}{PASSWORD}{ENTER}`. This means that it first types the username of the selected entry, then presses the `Tab` key, then types the password of the entry and finally presses the `Enter` key. +- +-To configure Auto-Type sequences for your entries, perform the following steps: +- +-1. Navigate to the entries list and open the desired entry for editing. Click the _Auto-Type_ item from the left-hand menu bar *(1)*. Press the `+` button *(2)* to add a new sequence entry. Select the desired window using the drop-down menu, or simply type a window title in the box *(3)*. You can use wildcard `*` to match any value (e.g., when a window title contains a filename or website name). +-+ +-.Auto-Type entry sequences +-image::autotype_entry_sequences.png[] +- +-2. _(Optional)_ Define a custom auto-type sequence for each window title match by selecting the _Use specific sequence for this association_ checkbox. Sequence action codes and field placeholders are detailed in the following table. A complete list of supported actions and placeholders can be found at https://keepass.info/help/base/autotype.html#autoseq[KeePass Auto-Type Action Codes] and https://keepass.info/help/base/placeholders.html[KeePass Placeholders]. Action codes and placeholders are not case sensitive. +-+ +-[grid=rows, frame=none, width=70%] +-|=== +-|Action Code |Description +- +-|{TAB}, {ENTER}, {SPACE}, {INSERT}, {DELETE}, {HOME}, {END}, {PGUP}, {PGDN}, {BACKSPACE}, {CAPSLOCK}, {ESC} +-|Press the corresponding keyboard key +- +-|{UP}, {DOWN}, {LEFT}, {RIGHT} |Press the corresponding arrow key +-|{F1}, {F2}, ..., {F16} |Press F1, F2, etc. +-|{LEFTBRACE}, {RIGHTBRACE} |Press `{` or `}`, respectively +-|{DELAY=X} |Set key press delay to X milliseconds +-|{DELAY X} |Delay typing start by X milliseconds +-|{CLEARFIELD} |Clear the input field before typing +-|{TOTP} |Insert calculated TOTP value (if configured) +-|{ X} |Repeat X times (e.g., {SPACE 5} inserts five spaces) +-|=== +-+ +-[grid=rows, frame=none, width=70%] +-|=== +-|Placeholder |Description +- +-|{TITLE} |Entry Title +-|{USERNAME} |Username +-|{PASSWORD} |Password +-|{URL} |URL +-|{NOTES} |Notes +-|{TOTP} |Current TOTP value (if configured) +-|{DT_SIMPLE} |Current date-time +-|{DB_DIR} |Absolute directory path for database file +-|{S:} |Value for the given attribute name +-|{REF:@:} |Search for a field in another entry using the reference syntax. +-|=== +- +-=== Performing Global Auto-Type +-The global Auto-Type keyboard shortcut is used when you have focus on the window you want to type into. To make use of this feature, you must have previously configured an Auto-Type hotkey. +- +-Pressing the global Auto-Type hotkey cause KeePassXC to search the database for entries that match the window title. Multiple matches may be returned and will cause the sequence selection dialog to appear. Click on a sequence line will immediately execute the Auto-Type action. A search box is also available in case numerous matches are returned. +- +-.Auto-Type sequence selection +-image::autotype_selection_dialog.png[,70%] +- +-TIP: The _Sequence_ column will only appear when there are different sequences defined by one or more entries displayed in the selection dialog. +- +-=== Performing Entry-Level Auto-Type +-You can quickly activate the default Auto-Type sequence for a particular entry using Entry-Level Auto-Type. For this operation, the KeePassXC window will be minimized and the Auto-Type sequence occurs in the previously selected window. You can perform Entry-Level Auto-Type from the toolbar icon *(A)*, entry context menu *(B)*, or by pressing `Ctrl+Shift+V`. +- +-WARNING: Be careful when using Entry-Level Auto-Type as you can inadvertently type into the wrong window. For example, a chat window or email. +- +-.Entry-Level Auto-Type +-image::autotype_entrylevel.png[] +-// end::content[] +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/docs/topics/BrowserPlugin.adoc keepassxc-2.6.4-patched/docs/topics/BrowserPlugin.adoc +--- keepassxc-2.6.4-orig/docs/topics/BrowserPlugin.adoc 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/docs/topics/BrowserPlugin.adoc 1970-01-01 01:00:00.000000000 +0100 +@@ -1,145 +0,0 @@ +-= KeePassXC - Browser Plugin +-include::.sharedheader[] +-:imagesdir: ../images +- +-// tag::content[] +-== Setup Browser Integration +-The KeePassXC-Browser extension is installed within your web browser so that you can automatically pull usernames and passwords from KeePassXC and populate them directly into website fields. It is a very useful and secure extension that enhances your productivity while using KeePassXC. With this extension, you do not need to manually copy the data from your KeePassXC database and paste it into the website fields. +- +-The KeePassXC-Browser extension is available on the following web browsers: +- +-* Google Chrome, Vivaldi, and Brave +-* Mozilla Firefox and Tor-Browser +-* Microsoft Edge +-* Chromium +- +-=== Install the Browser Extension +-You can download the KeePassXC-Browser extension from your web browser. To download the KeePassXC-Browser extension, perform the following steps: +- +-1. Click the link corresponding to your browser: +- * https://chrome.google.com/webstore/detail/keepassxc-browser/oboonakemofpalcgghocfoadofidjkkk[Chrome, Chromium, Vivaldi, and Brave] +- * https://addons.mozilla.org/en-US/firefox/addon/keepassxc-browser[Mozilla Firefox and Tor-Browser] +- * https://microsoftedge.microsoft.com/addons/detail/keepassxcbrowser/pdffhmdngciaglkoonimfcmckehcpafo[Microsoft Edge] +- +-2. Click the button to install/add the extension to the browser. Accept any confirmation dialogs. +- +-// tag::advanced[] +-NOTE: When Microsoft Edge is installed as a managed application, system administrators are required to deploy a custom native messaging configuration. Instructions for this are found in the advanced section below. +-// end::advanced[] +- +-=== Configure KeePassXC-Browser +-To start using KeePassXC-Browser, you must configure it so that it can communicate with the KeePassXC application on your desktop. +- +-To configure KeePassXC-Browser, perform the following steps: +- +-1. Open the KeePassXC application on your desktop and navigate to Tools > Settings. +- +-2. Click the Browser Integration option on the left-hand side *(1)*. The following screen appears: +-+ +-.Browser Settings +-image::browser_settings.png[] +- +-3. Click the _Enable browser integration_ checkbox *(2)*. Then select the browsers for which you have downloaded the KeePassXC-Browser extension *(3)* and click *OK*. +- +-4. Ensure your database is unlocked, then open (or restart) your browser. +- +-5. Click the KeePassXC-Browser extension icon *(A)* in your browser (see figure below). A pop-up window appears. +-+ +-.Connect Extension to KeePassXC +-image::browser_extension_connect.png[,80%] +- +-6. Click the _Connect_ button *(B)* in the pop-up window to complete integrating the KeePassXC-Browser extension with your KeePassXC desktop application. +- +-7. You are now prompted to enter a unique name to identify the connection between this browser and your database. Enter a unique name in the field (e.g., firefox-laptop) and click the _Save and allow access_ button. +-+ +-.Extension Association Dialog +-image::browser_extension_association.png[,80%] +- +-WARNING: If you reuse a connection name in a database, the previous browser connection will be overwritten and prevent access. +- +-=== Using the Browser Extension +-The KeePassXC-Browser extension lets you automatically populate the entries from your KeePassXC database into the fields on websites you visit. To do so, perform the following steps: +- +-1. Open your KeePassXC desktop application and unlock your database. +- +-2. Open your web browser. The KeePassXC-Browser extension icon in your browser window will change based on its connection state. The figure below shows the different states. +-+ +-*(A)* KeePassXC is not running or is disconnected + +-*(B)* Connected to KeePassXC, but database is locked + +-*\(C)* Connected to KeePassXC and ready to use +-+ +-.Extension Icon States +-image::browser_extension_icons.png[,70%] +- +-3. If the KeePassXC desktop application is not connected with the KeePassXC-Browser extension, click the extension icon in your web browser and click _Reload_ from the pop-up window as shown in the following screen. +-+ +-.Reload Extension Connection +-image::browser_extension_reload.png[,80%] +- +-4. Open the URL for which you want to use with your database. If you have previously created an entry in your database then the KeePassXC-Browser Confirm Access dialog may appear: +-+ +-.Confirm Access Dialog +-image::browser_confirm_access_dialog.png[,80%] +- +-5. Ensure the credentials you want use are checked, then click *(A)* Remember _(optional)_, then click _Allow Selected_ *(B)*. +- +-6. In your website, the KeePassXC icon will appear in the username field of the login form *(A)*. Click the icon to populate the field with your stored credentials. If you have more than one credential for this website, a dropdown will appear to choose the one to use. +-+ +-.Fill Credentials +-image::browser_fill_credentials.png[,80%] +- +-// tag::advanced[] +-=== Advanced Usage +-You can configure unique browser integration behavior for each entry. This allows you to add multiple URLs to an entry, hide an entry from the browser integration, and more. To access these settings, open an entry for editing then click on _Browser Integration_ option in the left-hand menu *(1)*. +- +-After opening the settings you can add any number of additional URLs by clicking the _Add_ button *(2)* and typing the URL in the list to the left *(3)*. +- +-.Entry browser settings +-image::browser_entry_settings.png[] +- +-Database-wide operations are available in the database settings. To access these use the _Database_ -> _Database settings..._ menu option. Click on _Browser Integration_ on the left-hand menu. From here you can disconnect all browsers, convert legacy KeePass-HTTP settings, reset all entry-level settings, and refresh the database root group ID (useful when making copies of your database file). +- +-.Database browser settings +-image::browser_database_settings.png[] +- +-Finally, advanced application-wide settings are available in the Browser Integration tab of the application settings. +- +-WARNING: We do not recommend changing any of these settings as they may break the browser integration plugin. +- +-.Advanced browser settings +-image::browser_advanced_settings.png[] +- +-=== Advanced Setup +-==== Managed Microsoft Edge on Windows +-1. Deploy *org.keepassxc.keepassxc_browser_edge.json* to, for example, `C:\ProgramData\KeepassXC` on all managed platforms. +-+ +----- +-{ +- "allowed_origins": [ +- "chrome-extension://pdffhmdngciaglkoonimfcmckehcpafo/" +- ], +- "description": "KeePassXC integration with native messaging support", +- "name": "org.keepassxc.keepassxc_browser", +- "path": "C:\\Program Files\\KeePassXC\\keepassxc-proxy.exe", +- "type": "stdio" +-} +----- +- +-2. Configure GPO options (registry result): +-+ +----- +-Windows Registry Editor Version 5.00 +-[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Edge\NativeMessagingHosts\org.keepassxc.keepassxc_browser] +-@="C:\ProgramData\KeepassXC\org.keepassxc.keepassxc_browser_edge.json" +- +-[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge] +-"NativeMessagingUserLevelHosts"=dword:00000000 +- +-[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge\ExtensionInstallAllowlist] +-"1"="pdffhmdngciaglkoonimfcmckehcpafo" +- +-[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge\NativeMessagingAllowlist] +-"1"="org.keepassxc.keepassxc_browser" +----- +-// end::advanced[] +-// end::content[] +diff -urNr keepassxc-2.6.4-orig/docs/topics/DatabaseOperations.adoc keepassxc-2.6.4-patched/docs/topics/DatabaseOperations.adoc +--- keepassxc-2.6.4-orig/docs/topics/DatabaseOperations.adoc 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/docs/topics/DatabaseOperations.adoc 1970-01-01 01:00:00.000000000 +0100 +@@ -1,341 +0,0 @@ +-= KeePassXC - Database Operations +-include::.sharedheader[] +-:imagesdir: ../images +- +-// tag::content[] +-== Database Operations +-=== Creating Your First Database +-To start using KeePassXC, you need to first create a database that will store the password and other details. +- +-To create a database, perform the following steps: +- +-1. Open your KeePassXC application. Click the create new database button *(A)*: +-+ +-.Create database - Welcome screen +-image::welcome_screen.png[] +- +-2. The database creation wizard appears. Enter the desired database name and a short description (optional): +-+ +-.Create database - General information +-image::new_db_wizard_1.png[,80%] +- +-3. Click Continue. The Encryption Settings screen appears, we don't recommend making any changes besides increasing or decreasing the decryption time using the slider. Setting the Decryption Time slider at a higher values means that the database will have higher level of protection but the time taken by the database to open will increase. +-+ +-.Create database - Encryption settings +-image::new_db_wizard_2.png[,80%] +- +-4. Click the Continue button. The Database Credentials screen appears, enter your desired database password. We recommend using a long, randomized password. +-+ +-.Create database - Database credentials +-image::new_db_wizard_3.png[,80%] +-+ +-*(A)* Open the password generator + +-*(B)* Toggle password visibility +-+ +-NOTE: Keep this password for your database safe. Either memorize it or note it down somewhere. Losing the database password might result in permanent locking of your database and you will not be able to retrieve information stored in the database. +- +-5. Click Done. You will be prompted to select a location to save your database file. The database file is saved on to your computer with the default `.kdbx` extension. You can store your database wherever you wish, it is fully encrypted at all times preventing unauthorized access. +- +-=== Opening an Existing Database +-To open an existing database, perform the following steps: +- +-1. Open your KeePassXC application. Click the Open existing database button *(A)* or select a recent database from the Recent Databases list *(B)*. +-+ +-.Open an existing database +-image::open_database.png[] +- +-2. Navigate to the location of the your database on your computer and open the database file. The database unlock screen will appear: +-+ +-.Database unlock screen +-image::unlock_database.png[] +- +-3. Enter the password for your database. +- +-4. _(Optional)_ Browse for the Key File if you have chosen it as an additional authentication factor while creating the database. Refer to the KeePassXC User Guide for more information on setting a Key File as an additional authentication factor. +- +-5. Click *OK*. The database opens and the following screen is displayed: +-+ +-.Unlocked database +-image::database_view.png[] +- +-=== Adding an Entry +-All the details such as usernames, passwords, URLs, attachments, notes, and so on are stored in database entries. You can create as many entries as you want in the database. +- +-To add an entry, perform the following step: +- +-1. Navigate to Entries > New Entry (Or, press Ctrl+N). The following screen appears: +-+ +-.Adding a new entry +-image::edit_entry.png[] +- +-2. Enter a desired title for the entry, username, password, URL, and notes on this screen. +- +-3. _(Optional)_ Select the Expires check-box to set the expiry date for the password. You can manually enter the date and time or click the Presets button to select a expiry date and time for your password. +- +-4. Click *OK* to add the entry to your database. +- +-=== Editing an Entry +-To edit the details in an entry, perform the following steps: +- +-1. Select the entry you want to edit. +- +-2. Press `Enter`, click the edit toolbar icon, or right-click and select Edit Entry from the menu. +- +-3. Make the desired changes. +- +-4. Click *OK*. +- +-=== Deleting an Entry +-To delete an entry, perform the following steps: +- +-1. Select the entry you want to delete and press the `Delete` button on your keyboard. +- +-2. You will be prompted to move the entry to the Recycle Bin (if enabled). +-+ +-NOTE: You can disable the recycle bin within the Database Settings. If the recycle bin is disabled then deleted entries will be permanently removed from the database. +- +-3. To permanently delete the entry, navigate to the Recycle Bin, select the entry you want to delete and press the `Delete` button on your keyboard. +- +-// tag::advanced[] +-=== Clone an Entry +-Creating a clone of an entry provides you a ready-to-use template for creating new entries with similar details of a master entry. +- +-To create a clone of an existing entry, perform the following steps: +- +-1. Right-click on the entry for which you want to create a clone and select _Clone Entry_. Alternatively, select the desired entry and press `Ctrl+K`. +-+ +-.Clone entry from context menu +-image::clone_entry.png[] +- +-2. The clone dialog will appear. +-+ +-.Clone entry dialog +-image::clone_entry_dialog.png[,70%] +- * Select the Append ‘ - Clone’ to title check-box to create a new entry with the word Clone as the suffix to the name of the new entry. +- * Select the Replace username and password with references check-box to create the new entry where the username and the password fields contain the references to the username and password to the master entry. +- * Select the Copy history checkbox to copy the history of the master entry to the clone. +- +-3. If you chose to replace username and password entries with references, then the new entry will point these fields to the original entry's values. Changing the original entry will automatically change the resolved value of the cloned entry. This is useful if you have multiple accounts for the same service that use a similar username or password combination. +-+ +-.References in a cloned entry +-image::clone_entry_references.png[] +- +-4. You can create your own references using the following syntax: +-+ +-`{REF:@I:}` +-+ +-Where `` is the Unique Identifier of the entry to pull data from and `` is from the following: +-+ +- * T - Title +- * U - Username +- * P - Password +- * A - URL +- * N - Notes +- * I - UUID +- +-== Searching the Database +-KeePassXC provides an enhanced and granular search features the enables you to search for specific entries in the databases using the different modifiers, wild card characters, and logical operators. +- +-=== Modifiers and Fields +-[grid=rows, frame=none, width=70%] +-|=== +-|Modifier |Description +- +-|- |Exclude this term from results +-|! |Exclude this term from results +-|+ |Match this term exactly +-|* |Term is handled as a regular expression +-|=== +- +-The following fields can be searched along with their abbreviated name in parenthesis: +- +-* Title (t) +-* Username (u) +-* Password (p, pw) +-* URL +-* Notes (n) +-* Attribute (attr) +-* Attachment (attach) +-* Group (g) +- +-=== Wild Card Characters and Logical Operators +-[grid=rows, frame=none, width=70%] +-|=== +-|Wild Card Character |Description +- +-|* |Match anything +-|? |Match one character +-|\| |Logical OR +-|=== +- +-=== Sample Search Queries +-The following tables lists a few samples search queries for your reference: +- +-|=== +-|Query |Description +- +-|`user:johnsmith url:www.google.com` +-|Searches the Username field for johnsmith and the URL field for www.google.com. +- +-|`user:john\|smith` +-|Searches the Username field for john OR smith. +- +-|`+user:johnsmith -url:www.google.com *notes:"secret note \d"` +-|Search the username field for exactly johnsmith, the URL must not contain www.google.com, and notes contains secret note [digit]. +-|=== +- +-== Advanced Entry Options +-=== Additional Attributes +-A lot of applications and web sites now require to provide additional information when you create accounts. The additional information is used to block hackers if any suspicious activity is detected. In addition, the additional information you provide can be used to reset passwords if you forget them. You can also store arbitrary information here that can be copied to the clipboard or Auto-Typed using the `{S: _Database settings_. The following screen appears: +-+ +-.Database settings +-image::database_settings.png[] +- +-2. Click the General button in the left-hand menu bar to access the following settings: +- * *Database name:* This is the default identifier for your database and is shown in the tab bar and title bar (when active). You can change this name as desired. +- * *Database description:* Provide some meaningful description for your database. +- * *Default username:* Provide a default username for all new entries that you create in this database. +- * *Max history items:* This is the maximum number of history items that are stored for each entry. When you set this to 0, no history will be saved. Set this value to a low value to prevent the database from getting too large (we recommend no more than 10). +- * *Max. history size:* When the history of an entry gets above this size, it is truncated. For example, this happens when entries have large attachments. Set this value small to prevent the database from getting too large (we recommend 6 MiB). +- * *Use recycle bin:* Select this check-box if you want deleted entries to move to the recycle bin instead of being permanently removed. The recycle bin will be created if it does not already exist after your first deletion. To delete entries permanently, you must empty the recycle bin manually. +- * *Enable compression:* KeePassXC databases can be compressed before being encrypted. Compression reduces the size of the database and does not have any appreciable affect on speed. It is recommended to always save databases with compression. +- +-3. Click the Security button in the left-hand menu bar to change your database credentials and change encryption settings. +-+ +-.Database security +-image::database_security.png[] +- +-4. Here you can change your database password or add/remove additional credentials to protect your database. KeePassXC supports adding a randomly generated, static key file and hardware keys such as YubiKey and OnlyKey. To add a key file, click _Add Key File_ and either browse for an existing file or generate a new one *(A)*. To add a hardware key, click _Add YubiKey Challenge-Response_, plug in your hardware key, then click refresh *(B)*. +-+ +-.Database credentials +-image::database_security_credentials.png[] +- +-WARNING: Consider creating a backup of your YubiKey. Please refer to <> +- +-5. Encryption settings allows you to change the average time it takes to encrypt and decrypt the database. The longer time that is chosen, the harder it will be to brute force attack your database. *We recommend a setting of one second.* +-+ +-.Database encryption +-image::database_security_encryption.png[] +-+ +-WARNING: Encryption time is dependent on your computer's hardware. If sharing a database with a mobile device, be mindful that it will likely take two to four times longer to access and save your database than on your home computer. +- +-6. Advanced encryption settings can be accessed by clicking the _Advanced Settings_ checkbox in the lower left-hand corner. These settings are only meant for people who know what they mean. *We do not recommend touching these settings.* +-+ +-.Database encryption advanced settings +-image::database_security_encryption_advanced.png[] +-+ +-The following key derivation functions are supported: +- +- * AES-KDF (KDBX 4 and KDBX 3.1): This key derivation function is based on iterating AES. Users can change the number of iterations. The more iterations, the harder are dictionary and guessing attacks, but also database loading/saving takes more time (linearly). KDBX 3.1 only supports AES-KDF; any other key derivation function, like for instance Argon2, requires KDBX 4. +- +- * Argon2 (KDBX 4 - recommended): KDBX 4, the Argon2 key derivation function can be used for transforming the composite master key (as protection against dictionary attacks). The main advantage of Argon2 over AES-KDF is that it provides a better resistance against GPU/ASIC attacks (due to being a memory-hard function). The number of iterations scales linearly with the required time. By increasing the memory parameter, GPU/ASIC attacks become harder (and the required time increases). The parallelism parameter can be used to specify how many threads should be used. +- +-=== Creating a YubiKey backup +-It is advisable to have a backup replica YubiKey In case your main YubiKey gets damaged, lost, or stolen. The same HMAC key will need to be written to both keys. To do this you can either use the YubiKey Personalization Tool GUI or the ykpersonalize CLI tool. The steps for the CLI tool are shown: +- +-1. Create a 20 byte HMAC key: +-+ +-``` +-dd status=none if=/dev/random bs=20 count=1 | xxd -p -c 40 +-``` +- +-2. Write the HMAC key to slot 2 _(Set through the first switch. Out of the box the YubiKey OTP resides in slot 1)_: +-+ +-``` +-ykpersonalize -2 -a -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible -oallow-update +-``` +- +-You will be asked to enter the HMAC key you created earlier, copy/paste they key output in the first step. Repeat both steps for your second YubiKey. We recommend storing your HMAC key in a safe place (e.g., printed on paper) in case you need to recreate another key. +-// end::advanced[] +- +-== Storing a Database File +-The database file that you create might contain highly sensitive data and must be stored in a very secure way. You must make sure that the database is always protected with a strong and long password. The database file that is protected with a strong and long password is secure and encrypted while stored on your computer or cloud storage service. +- +-Make sure that the database file is stored in a folder that is secure. Make sure that you or someone else does not accidentally delete the database file. Deletion of the database file will result in the total loss of your information and a lot of inconvenience to manually retrieve your logins for various web applications. You must not share your database file with anyone unless absolutely necessary. +- +-== Backing up a Database File +-It is a good practice to create copies of your database file and store the copies of your database on a different computer, smart phone, or cloud storage space such a Google Drive or Microsoft OneDrive. Backups can be created automatically by selecting the _Backup database file before saving_ option in the application settings. Additionally, you can create a backup on-demand using the _Database_ -> _Save Database Backup..._ menu feature. +- +-.Saving a database backup +-image::save_database_backup.png[,40%] +- +-Creating backups for your database give you a peace of mind should you lose one copy of your database. You can quickly retrieve the copy of your database and start using it. +-// end::content[] +diff -urNr keepassxc-2.6.4-orig/docs/topics/Disclaimers.adoc keepassxc-2.6.4-patched/docs/topics/Disclaimers.adoc +--- keepassxc-2.6.4-orig/docs/topics/Disclaimers.adoc 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/docs/topics/Disclaimers.adoc 1970-01-01 01:00:00.000000000 +0100 +@@ -1,32 +0,0 @@ +-== License and Disclaimers +- +-KeePassXC is licensed with the +-https://github.com/keepassxreboot/keepassxc/blob/master/LICENSE.GPL-3[GNU General Public License Version 3]. +-All copyrights and additional licenses are recorded in +-https://github.com/keepassxreboot/keepassxc/blob/master/COPYING[COPYING]. +- +-=== Disclaimer of Warranty +- +-THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +-Except when otherwise stated in writing the copyright holders and/or other parties provide the program "as is" without +-Warranty of any kind, either expressed or implied, including, but not limited to, the implied warranties of +-Merchantability and fitness for a particular purpose. The entire risk as to the quality and performance of the program +-Is with you. Should the program prove defective, you assume the cost of all necessary servicing, repair or correction. +- +-=== Limitation of Liability +- +-In no event unless required by applicable law or agreed to in writing will any copyright holder, or any other party +-Who modifies and/or conveys the program as permitted above, be liable to you for damages, including any general, +-Special, incidental or consequential damages arising out of the use or inability to use the program (including but not +-Limited to loss of data or data being rendered inaccurate or losses sustained by you or third parties or a failure of +-The program to operate with any other programs), even if such holder or other party has been advised of the possibility +-Of such damages. +- +-== Contact Us +- +-We are committed to continually improve KeePassXC through customer experience and your feedback is important to us. +-Please send us your feedback or comments to team@keepassxc.org. +-To report issues, visit: https://github.com/keepassxreboot/keepassxc. +- +-Thank You, + +-Team KeePassXC +diff -urNr keepassxc-2.6.4-orig/docs/topics/DownloadInstall.adoc keepassxc-2.6.4-patched/docs/topics/DownloadInstall.adoc +--- keepassxc-2.6.4-orig/docs/topics/DownloadInstall.adoc 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/docs/topics/DownloadInstall.adoc 1970-01-01 01:00:00.000000000 +0100 +@@ -1,62 +0,0 @@ +-= KeePassXC - Download and Install +-include::.sharedheader[] +-:imagesdir: ../images +- +-// tag::content[] +-== Downloading KeePassXC +-KeePassXC is available for download for the following operating systems and platforms: +- +-* Microsoft Windows +-** Portable and MSI Installer (64-bit and 32-bit) +-* Linux - Official Cross-Distribution Packages +-** AppImage and Snap Package +-* Linux - Distribution-Specific Packages +-** Ubuntu, Debian, Arch Linux, Gentoo, Fedora, CentOS, and OpenSUSE +-* macOS +-** DMG Installer, Homebrew Cask +- +-To download the KeePassXC installer for your desired platform, visit https://keepassxc.org/download or directly from our https://github.com/keepassxreboot/keepassxc/releases[GitHub Releases]. +- +-NOTE: KeePassXC is open-source software and may be available on other websites that are unaffiliated with Team KeePassXC. *We strongly discourage downloading KeePassXC from third-party websites.* +- +-Before installing KeePassXC, it is recommended that you verify that your downloaded installer matches the signature, which is published alongside the release package. By verifying the signatures of KeePassXC releases, you can verify the authenticity and integrity of the downloaded installation file. This guarantees that the file you downloaded was originally created by the KeePassXC Team and its contents have not been tampered with. +- +-To know more about the steps to verify the authenticity and integrity of your downloaded package, visit https://keepassxc.org/verifying-signatures. +- +-=== Microsoft Windows +-The Windows MSI installer is signed by a secure certificate owned by DroidMonkey Apps, LLC. If you do not see this dialog when installing the application, click *NO* and download the installer from https://keepassxc.org. +- +-.Windows UAC Dialog +-image::uac_dialog.png[50%] +- +-Installing KeePassXC is a simple process. In the following example, installation steps for KeePassXC on Microsoft Windows are described. Installing KeePassXC on other operating systems is also a simple process, which you can accomplish by using the native installers. To know more about the installation instructions on the other operating systems, refer to the KeePassXC User Manual. +- +-To install KeePassXC on Microsoft Windows, perform the following steps: +- +-1. Double click on the KeePassXC-Y.Y.Y-WinZZ.msi file. Here, Y.Y.Y represents the version of the software and ZZ represents the 32-bit/64-bit version of the Microsoft Windows operating system. +-+ +-.Install wizard +-image::install_wizard_1.png[,80%] +- +-2. Click Next and follow the simple instructions on the KeepPassXC Setup Wizard to complete the installation. You will have the option to choose your install location, add a desktop shortcut, and launch on startup. +-+ +-.Install wizard (cont) +-image::install_wizard_2.png[,80%] +- +-=== Linux +-You can easily download the KeePassXC installer for Linux. When you search for KeePassXC, multiple options are displayed as shown in the following screen: +- +-.Ubuntu Store +-image::linux_store.png[] +- +-The Snap and Flatpak options are sandboxed applications (more secure). The Native option is installed with the operating system files. Read more about the limitations of these options here: https://keepassxc.org/docs/#faq-appsnap-yubikey[KeePassXC Snap FAQ] +- +-NOTE: KeePassXC stores a configuration file in `~/.cache` to remember window position, recent files, and other local settings. If you mount this folder to a tmpdisk you will lose settings after reboot. +- +-=== macOS +-To install the KeePassXC app on macOS, double click on the downloaded DMG file and use the click and drag option as shown: +- +-.macOS DMG Install +-image::macos_install.png[,80%] +- +-// end::content[] +diff -urNr keepassxc-2.6.4-orig/docs/topics/ImportExport.adoc keepassxc-2.6.4-patched/docs/topics/ImportExport.adoc +--- keepassxc-2.6.4-orig/docs/topics/ImportExport.adoc 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/docs/topics/ImportExport.adoc 1970-01-01 01:00:00.000000000 +0100 +@@ -1,64 +0,0 @@ +-= KeePassXC - Import/Export Operations +-include::.sharedheader[] +-:imagesdir: ../images +- +-// tag::content[] +-== Importing External Databases +-KeePassXC allows your to import external databases from the following options: +- +-* Comma-Separated Values (CSV) file +-* 1Password OPVault +-* KeePass 1 Database +- +-=== Importing CSV File +-If you have been saving your URLs, usernames, passwords, and so on in a CSV file, you can migrate all that information from the CSV file to KeePassXC and start using KeePassXC to maintain your data. +- +-To open the CSV file, perform the following steps: +- +-1. Open KeePassXC. +- +-2. Click Import from CSV button on the welcome screen or use the menu Database > Import > CSV File. +- +-3. Navigate to the location of the your CSV file on your computer and open the file. The new database wizard will appear. Follow the steps of creating a new database in Chapter 1. +- +-4. After saving your new database file, the CSV import wizard will appear: +-+ +-.CSV Import Wizard +-image::csv_import.png[,80%] +- +-Your CSV file gets imported to KeePassXC and the data is converted to the KeePassXC format for further usage and maintenance. The new database file is saved on to your computer with the default `.kdbx` extension. +- +-=== Importing 1Password OPVault +-Save your 1Password Vault locally to create an OPVault directory. Please see 1Password instructions on how to do this. Once an OPVault is created, perform the following steps: +- +-1. Open KeePassXC. +- +-2. Use the menu Database > Import > 1Password Vault. Select the OPVault to import. +- +-3. Enter the password for your OPVault to unlock and import. +- +-=== Importing KeePass 1 Database +-KeePass 1 database is an older format of the database created using legacy version of KeePass. KeePassXC lets your import this older format of the database and you can seamlessly start using this database in your new KeePassXC application. +- +-To import a KeePass 1 database file in KeePassXC, perform the following steps: +- +-1. Open KeePassXC. +- +-2. Click Import from KeePass 1 button on the welcome screen or use the menu Database > Import > KeePass 1 Database. +- +-3. Navigate to the location of the your legacy KeePass 1 database file (`.kdb`) on your computer and open the file. You are prompted for the password and the Key file for your `.kdb` file. +- +-4. Enter the password for your old `.kdb` file and click *OK*. You are prompted for provide a name for the new database format that KeePassXC recognizes. +- +-5. Provide a name for the new database format, select a folder on your computer to save the file, and click Save. +- +-6. The data from the `.kdb` file gets imported and converted to the new format, which is compatible with KeePassXC. You can now start using the new database file (`.kdbx`) in KeePassXC. +- +-== Exporting Databases +-KeePassXC supports multiple ways to export your database for transfer to another program or to print out and archive. To export your database into the KDB XML format, you must use the KeePassXC Command Line Interface program: `keepassxc-cli export `. +- +-WARNING: Exporting your database will result in all of your passwords and sensitive information being stored unencrypted. We do not recommend saving your exported database for long periods of time as that can cause compromise. +- +-.Database export menu +-image::export_database.png[,80%] +-// end::content[] +diff -urNr keepassxc-2.6.4-orig/docs/topics/KeeShare.adoc keepassxc-2.6.4-patched/docs/topics/KeeShare.adoc +--- keepassxc-2.6.4-orig/docs/topics/KeeShare.adoc 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/docs/topics/KeeShare.adoc 1970-01-01 01:00:00.000000000 +0100 +@@ -1,51 +0,0 @@ +-= KeePassXC - KeeShare +-include::.sharedheader[] +-:imagesdir: ../images +- +-// tag::content[] +-== Database Sharing with KeeShare +-KeeShare allows you to share a subset of your credentials with others and vice versa. +- +-=== Enable Sharing +-To use sharing, you need to enable it for the application. +- +-1. Go to _Tools_ -> _Settings_. Select the KeeShare category on the left sidebar *(1)*. +-2. Check _Allow import_ if you want to import shared credentials. Check _Allow export_ if you want to share credentials. *(2)* +-3. (Optional) Click _Generate_ *(3)* to create your own certificate or _Import_ to select an existing one. The certificate allows you to sign shared databases. This ensures the integrity of the share and prevent import of untrusted information. +- +-.KeeShare Application Settings +-image::keeshare_application_settings.png[] +- +-=== Sharing Credentials +-If you checked _Allow export_ in the Sharing settings you can now share a group of passwords. Sharing is always is defined on a particular group. If you enable sharing on a group, every entry under this group, and its children, are shared. If you enable sharing on the root node, **every password** inside your database gets shared! +- +-NOTE: KeeShare does not synchronize group structure after the initial share is created. At this time, KeeShare operates at the entry level; shared entries moved outside of a shared group are still synchronized. +- +-1. Open the edit sheet on a group you want to share. +-2. Select the KeeShare category on the left toolbar. +-3. Choose a sharing type: +- a. *Inactive* - Disable sharing this group +- b. *Import* - Read-only import of entries, merge changes +- c. *Export* - Write-only export of entries, no merge +- d. *Synchronize* - Read/Write entries from the share, merge changes +-4. Choose a path to store the shared credentials to. +-5. The password to use for this share container. +- +-The export file will not be generated automatically. Instead, each time the database is saved, the file gets written. The file should be written to a location that is accessible by others. An easy setup is a network share or storing the file in cloud storage. +- +-.KeeShare Group Settings +-image::keeshare_group_settings.png[] +- +-=== Using Shared Credentials +-KeeShare watches the container for changes and merges them into your database when necessary (Import and Synchronize modes). Entries merge in time order; older data is moved to the history of the entry. +- +-A shared group shows a cloud icon badge over the group icon *(A)* and a banner is displayed showing the sharing mode and file location *(B)*. If the share is disabled or unavailable, the cloud icon will show as red with a white X. +- +-.KeeShare shared group +-image::keeshare_shared_group.png[] +- +-=== Technical Details and Limitations of Sharing +-Sharing relies on the combination of file exports and imports as well as the synchronization mechanism provided by KeePassXC. Since the merge algorithm uses the history of entries to prevent data loss, this history must be enabled and have a sufficient size. Furthermore, the merge algorithm is location independent, therefore it does not matter if entries are moved outside of an import group. These entries will be updated none the less. Moving entries outside of export groups will prevent a further export of the entry, but it will not ensure that the already shared data will be removed from any client. +- +-KeeShare uses a custom certification mechanism to ensure that the source of the data is the expected one. This ensures that the data was exported by the signer but it is not possible to detect if someone replaced the data with an older version from a valid signer. To prevent this, the container could be placed at a location which is only writeable for valid signers. +-// end::content[] +diff -urNr keepassxc-2.6.4-orig/docs/topics/KeyboardShortcuts.adoc keepassxc-2.6.4-patched/docs/topics/KeyboardShortcuts.adoc +--- keepassxc-2.6.4-orig/docs/topics/KeyboardShortcuts.adoc 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/docs/topics/KeyboardShortcuts.adoc 1970-01-01 01:00:00.000000000 +0100 +@@ -1,45 +0,0 @@ +-= KeePassXC - Keyboard Shortcuts +-include::.sharedheader[] +-:imagesdir: ../images +- +-// tag::content[] +-NOTE: On macOS please substitute `Ctrl` with `Cmd` (aka `⌘`). +- +-[grid=rows, frame=none, width=75%] +-|=== +-|Action | Keyboard Shortcut +- +-|Open Database | Ctrl + O +-|Save Database | Ctrl + S +-|Save Database As | Ctrl + Shift + S +-|New Database | Ctrl + Shift + N +-|Close Database | Ctrl + W ; Ctrl + F4 +-|Lock All Databases | Ctrl + L +-|Quit | Ctrl + Q +-|New Entry | Ctrl + N +-|Edit Entry | Enter ; Ctrl + E +-|Delete Entry | Delete +-|Clone Entry | Ctrl + K +-|Copy Username | Ctrl + B +-|Copy Password | Ctrl + C +-|Copy URL | Ctrl + U +-|Open URL | Ctrl + Shift + U +-|Copy TOTP | Ctrl + T +-|Show TOTP | Ctrl + Shift + T +-|Trigger AutoType | Ctrl + Shift + V +-|Add key to SSH Agent | Ctrl + H +-|Remove key from SSH Agent | Ctrl + Shift + H +-|Minimize Window | Ctrl + M +-|Hide Window | Ctrl + Shift + M +-|Select Next Database Tab | Ctrl + Tab ; Ctrl + PageDn +-|Select Previous Database Tab | Ctrl + Shift + Tab ; Ctrl + PageUp +-|Select the nth database | Ctrl + n, where n is the number of the database tab +-|Toggle Passwords Hidden | Ctrl + Shift + C +-|Toggle Usernames Hidden | Ctrl + Shift + B +-|Focus Groups (edit if focused) | F1 +-|Focus Entries (edit if focused) | F2 +-|Focus Search | F3 ; Ctrl + F +-|Clear Search | Escape +-|Show Keyboard Shortcuts | Ctrl + / +-|=== +-// end::content[] +diff -urNr keepassxc-2.6.4-orig/docs/topics/PasswordGenerator.adoc keepassxc-2.6.4-patched/docs/topics/PasswordGenerator.adoc +--- keepassxc-2.6.4-orig/docs/topics/PasswordGenerator.adoc 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/docs/topics/PasswordGenerator.adoc 1970-01-01 01:00:00.000000000 +0100 +@@ -1,44 +0,0 @@ +-= KeePassXC - Password Generator +-include::.sharedheader[] +-:imagesdir: ../images +- +-// tag::content[] +-== Password Generator +-This password generator helps you to generate random strong passwords and passphrases that you can use for your applications and websites you visit. +- +-=== Generating Passwords +-To generate random passwords, specify the characters to be used in your choice of password (for example, upper-case letters, digits, special characters, and so on) and KeePassXC will randomly pick characters out of the set. +- +-To generate the random password using Password Generator, perform the following steps: +- +-1. Open KeePassXC. +-2. Navigate to Tools > Password Generator. The following screen appears: +-+ +-.Password Generator +-image::password_generator.png[] +- +-3. Select the length of the desired password by dragging the Length slider. +-4. Select the character-sets that you want to include in your password. +-5. Use the regenerate button (Ctrl + R) to make a new password using the chosen options. +-6. Use the clipboard button (Ctrl + C) to copy the generated password to the clipboard. +-// tag::advanced[] +-7. Click the Advanced button to specify additional conditions for your desired password. +-+ +-.Advanced Password Generator Options +-image::password_generator_advanced.png[] +- +-=== Generating Passphrases +-A passphrase is a sequence of words or other text used to control access to your applications and data. A passphrase is similar to a password in usage, but is generally longer for added security. To generate the random passphrase using Password Generator, perform the following steps: +- +-1. From the password generator, click the Passphrase tab. The following screen appears: +-+ +-.Passphrase Generator +-image::passphrase_generator.png[] +- +-2. Select the number of words you want to be included in your passphrase by dragging the +-Word Count slider. +-3. In the Word Separator field, enter a character, word, number, or space that you want to use a separator between the words in your passphrase. +-4. Click the Regenerate button (Ctrl + R) to generate a new random passphrase. +-5. Click the Clipboard button (Ctrl + C) to copy the passphrase to the clipboard. +-// end::advanced[] +-// end::content[] +diff -urNr keepassxc-2.6.4-orig/docs/topics/.sharedheader keepassxc-2.6.4-patched/docs/topics/.sharedheader +--- keepassxc-2.6.4-orig/docs/topics/.sharedheader 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/docs/topics/.sharedheader 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7 +0,0 @@ +-KeePassXC Team +-v2.6.0 +-:data-uri: +-:homepage: https://keepassxc.org +-:stylesheet: ../styles/dark.css +-:icons: font +-:toc: left +diff -urNr keepassxc-2.6.4-orig/docs/topics/SSHAgent.adoc keepassxc-2.6.4-patched/docs/topics/SSHAgent.adoc +--- keepassxc-2.6.4-orig/docs/topics/SSHAgent.adoc 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/docs/topics/SSHAgent.adoc 1970-01-01 01:00:00.000000000 +0100 +@@ -1,125 +0,0 @@ +-= KeePassXC - SSH Agent +-include::.sharedheader[] +-:imagesdir: ../images +- +-// tag::content[] +-== SSH Agent +-SSH (Secure Shell) is a widely used remote secure shell protocol and is considered an industry standard for secure remote access to UNIX-like systems including Linux, BSDs, MacOS and more recently even Windows received native support. SSH supports multiple types of authentication and the most widely used ones are either interactive keyboard input with a password or a public-key cryptography pair of keys. +- +-KeePassXC SSH Agent integration is built to manage SSH keys in a secure manner by either storing them completely within your KeePassXC database or by having only the decryption key of a key file that is stored elsewhere. SSH Agent integration _does not_ provide an agent itself but works as a client for any agent implementation that is OpenSSH compatible. +- +-=== OpenSSH agent on Linux +-If you are using a modern desktop Linux distribution it is very likely the OpenSSH agent is already configured and running when you have logged in to a graphical desktop session. +-This should be true for distributions like Debian, Ubuntu (including Kubuntu, Xubuntu and Lubuntu), Linux Mint, Fedora, ElementaryOS and Manjaro. +- +-First, open a terminal and check the output of `ssh-add -l`: +- +- $ ssh-add -l +- The agent has no identities. +- +-If you either got a list of fingerprints or the message above the agent is already running and no further setup is required. +-If instead you got a message saying _"Could not open a connection to your authentication agent."_ that means the agent is either misconfigured or not running at all. +- +-Since every distribution and desktop environment is configured differently there is no general guide how to properly set it up yourself. +-The general rule of thumb, however, is that `ssh-agent` needs to be started as part of the startup programs for a session in a way its environment variables are exposed to all processes started by the desktop environment. +-One of the easiest ways to achieve this is to enable _GNOME Keyring_ which should in turn start the agent as part of its services. +- +-There are many guides on the internet how to hack your login shell to start an agent but it is very prone to errors and is not a supported configuration. If you prefer the login shell startup hack you need to set it up with a static socket path and use the _SSH_AUTH_SOCK override_ option in SSH Agent settings to match that. +- +-WARNING: _GNU Privacy Guard (gpg)_ with its SSH agent implementation is *not* compatible with KeePassXC as it does not support _removing_ keys that have been added to it making it impossible to use any external tool to manage key lifetime. +- +-WARNING: _GNOME Keyring_ prior to release 3.27.92 had its own custom implementation of an agent which does not support modern key types and was known to be buggy. +-It does not support any constraints you may want to configure for an added key. +-If you are running a modern distribution the custom agent has been removed and replaced with the stock OpenSSH agent which is feature complete. +- +-=== OpenSSH agent on MacOS +-Apple has made OpenSSH an integrated part of MacOS with automatic agent startup when it is first used. No further configuration is needed. +- +-=== Pageant agent on Windows +-The SSH Agent integration on Windows supports both _PuTTY Pageant_ and _OpenSSH for Windows 10_. +-Since Pageant is currently still the most widely used implementation and is easily installable on any version of Windows we focus on that. +-It is also the default on KeePassXC. +- +-Download Pageant from the official PuTTY home page at https://www.chiark.greenend.org.uk/~sgtatham/putty/ +- +-To use Pageant with KeePassXC, simply start it and it will minimize into the system tray and is ready to use. PuTTY and compatible tools will use Pageant automatically. +- +-=== Setting up SSH Agent integration +-By default the SSH Agent integration plugin is disabled. +-To enable integration, follow the steps below to access the settings: +- +- 1. Select _Tools > Settings_ from the menu +- 2. Select _SSH Agent_ category on the left sidebar +- +-.SSH Agent Application Settings Page +-image::sshagent_application_settings.png[] +- +-On the settings page you can enable the integration by checking _Enable SSH Agent integration_. +-When the integration is enabled coming back to the settings page also shows if connection to the agent is working. +- +-On Windows you have the option to select between _Pageant_ and _OpenSSH for Windows_ and on other platforms the settings page shows the current value of _SSH_AUTH_SOCK_ environment variable which is used to connect to the running agent and an option to manually override the automatically detected path. +- +-If the value of _SSH_AUTH_SOCK_ is empty it means the agent is not properly configured and KeePassXC will be unable to connect to it unless you provide a static override path to the socket. +- +-=== Generating a key to use with KeePassXC +-KeePassXC only supports keys in the _OpenSSH_ format. On Windows, _PuTTYgen_ saves keys in its own format by default and you will need to convert them to OpenSSH format before being used. In this guide we are going to generate a standard RSA key in the default size. +- +-==== Generating a key on Linux or MacOS with _ssh-keygen_ +- +-Open a terminal window and type the following command to generate a key: +- +- $ ssh-keygen -o -f keepassxc -C johndoe@example +- Generating public/private rsa key pair. +- Enter passphrase (empty for no passphrase): +- Enter same passphrase again: +- Your identification has been saved in keepassxc +- Your public key has been saved in keepassxc.pub +- The key fingerprint is: +- SHA256:pN+o5AqUmijYBDUrFV/caMus9oIR61+MiWLa8fcsVYI johndoe@example +- The key's randomart image is: +- +---[RSA 3072]----+ +- | =. ..o | +- | o + .+ . | +- |o . .+ o. | +- | o.. Eo. . | +- | +o .. So | +- |o*o.o+ ..o | +- |Bo=+o.+.o . | +- |+oo+.++o | +- |. ..++ooo | +- +----[SHA256]-----+ +- +- +-Now we can see two files were generated: +- +- $ ls -l keepassxc* +- -rw------- 1 user group 2.6K Apr 5 07:36 keepassxc +- -rw-r--r-- 1 user group 569 Apr 5 07:36 keepassxc.pub +- +-With KeePassXC you only need the first file listed. +- +-==== Generating a key on Windows with PuTTYgen +-Please read the manual on how to use PuTTYgen for details on generate a key: https://the.earth.li/~sgtatham/putty/0.74/htmldoc/Chapter8.html#pubkey-puttygen. Once generated, you must save the key in OpenSSH format, follow the image below. +- +-.Generating a key with PuTTYgen +-image::sshagent_puttygen.png[,70%] +- +-=== Configuring an entry to use SSH Agent +-The last step is to setup an entry to contain the SSH Agent settings and key file you generated. +- +-1. Create a new entry, or open an existing entry in edit mode. +-2. Set the password you used for the key file in the password field. +-3. Go to the advanced category and attach the key file you generated previously. +-4. Go to the SSH Agent category *(1)* and select the attachment from the list *(2)*. +-5. Alternatively, you can load an external file dynamically using the file selection. +-6. Choose the options for this key. +-7. Press *OK* to accept the entry. Depending on the options you chose, KeePassXC will load the key and present it for use. +- +-.SSH Agent Entry Settings Page +-image::sshagent_entry_settings.png[] +- +-If you chose to not auto-load the key on database unlock, you can manually make the key available by using the context menu from the entry list. +- +-.SSH Agent Load Key from Context Menu +-image::sshagent_context_menu.png[] +-// end::content[] +diff -urNr keepassxc-2.6.4-orig/docs/topics/UserInterface.adoc keepassxc-2.6.4-patched/docs/topics/UserInterface.adoc +--- keepassxc-2.6.4-orig/docs/topics/UserInterface.adoc 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/docs/topics/UserInterface.adoc 1970-01-01 01:00:00.000000000 +0100 +@@ -1,88 +0,0 @@ +-= KeePassXC - Database Operations +-include::.sharedheader[] +-:imagesdir: ../images +- +-// tag::content[] +-== Interface Overview +-=== Application Layout +-The KeePassXC interface is designed for simplicity and easy access to your information. The main database view is split into three main partitions detailed below. You can open multiple databases at the same time, they will appear in tabs. +- +-.Main database interface +-image::main_interface.png[] +- +-*(A) Groups* - Organize your entries into discrete groups to bring order to all of your sensitive information. Groups can be nested under each other to create a hierarchy. Settings from parent groups get applied to their children. +- +-*(B) Entries* - Entries contain all the information for each website or application you are storing in KeePassXC. This view shows all the entries in the selected group. Each column can be resized, reordered, and shown or hidden based on your preference. Right click the header row to see all available options. +- +-*\(C) Preview* - Shows a preview of the selected group or entry. You can temporarily hide this preview using the close button on the right hand side or completely disabled in the application settings. +- +-TIP: Double clicking on the text in the entries list copies that field to the clipboard. Double clicking the entry title will open the entry for editing. +- +-=== Toolbar +-The toolbar provides a quick way to perform common tasks with your database. Some entries in the toolbar are dynamically disabled based on the information contained in the selected entry. Every common action in KeePassXC can be controlled with a keyboard shortcut as well. +- +-.Toolbar overview +-image::toolbar.png[] +- +-*(A) Database* - Open Database, Save Database + +-*(B) Entries* - Create Entry, Edit Selected Entry, Delete Selected Entry + +-*\(C) Entry Data* - Copy Username, Copy Password, Copy URL, Perform Auto-Type + +-*(D) Lock All Databases* + +-*(E) Tools* - Password Generator, Application Settings + +-*(F) Search* +- +-=== Application Settings +-Users can configure KeePassXC to their personal tastes with a wide variety of general and security settings that apply to the whole application. These settings are accessible from _Tools_ -> _Settings_ or the cog wheel icon from the toolbar. Settings include: startup options, file management, entry management, user interface, language, security timeouts, and convenience. +- +-==== Setting the Theme +-KeePassXC ships with light and dark themes specifically designed to meet accessibility standards. In most cases, the appropriate theme for your system will be determined automatically, but you can always set a specific theme by using the _View_ menu. When a new theme is selected you will be prompted to restart KeePassXC to apply the theme immediately. +- +-.Setting the theme +-image::theme_selection.png[] +- +-==== Compact Mode +-For users with smaller screens or those who desire seeing more entries at once, KeePassXC offers a compact view mode. This mode shows smaller toolbar, group, and entry icons. The effect of compact mode (left side) can be seen below. +- +-.Compact mode comparison +-image::compact_mode_comparison.png[] +- +-=== Keyboard Shortcuts +-include::KeyboardShortcuts.adoc[tag=content, leveloffset=+1] +- +-// tag::advanced[] +-=== Command-Line Options +-You can use the following command line options to tailor the application to your preferences: +- +----- +-Usage: keepassxc.exe [options] [filename(s)] +-KeePassXC - cross-platform password manager +- +-Options: +- -?, -h, --help Displays help on commandline options. +- --help-all Displays help including Qt specific options. +- -v, --version Displays version information. +- --config path to a custom config file +- --localconfig path to a custom local config file +- --keyfile key file of the database +- --pw-stdin read password of the database from stdin +- --debug-info Displays debugging information. +- +-Arguments: +- filename(s) filenames of the password databases to open (*.kdbx) +----- +- +-Additionally, the following environment variables may be useful when running the application: +- +-[grid=rows, frame=none, width=75%] +-|=== +-|Env Var | Description +- +-|KPXC_CONFIG | Override default path to roaming configuration file +-|KPXC_CONFIG_LOCAL | Override default path to local configuration file +-|SSH_AUTH_SOCKET | Path of the unix file socket that the agent uses for communication with other processes (SSH Agent) +-|QT_SCALE_FACTOR [numeric] | Defines a global scale factor for the whole application, including point-sized fonts. +-|QT_SCREEN_SCALE_FACTORS [list] | Specifies scale factors for each screen. See https://doc.qt.io/qt-5/highdpi.html#high-dpi-support-in-qt +-|QT_SCALE_FACTOR_ROUNDING_POLICY | Control device pixel ratio rounding to the nearest integer. See https://doc.qt.io/qt-5/highdpi.html#high-dpi-support-in-qt +-|=== +-// end::advanced[] +-// end::content[] +diff -urNr keepassxc-2.6.4-orig/docs/topics/Welcome.adoc keepassxc-2.6.4-patched/docs/topics/Welcome.adoc +--- keepassxc-2.6.4-orig/docs/topics/Welcome.adoc 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/docs/topics/Welcome.adoc 1970-01-01 01:00:00.000000000 +0100 +@@ -1,46 +0,0 @@ +-= KeePassXC - Welcome +-include::.sharedheader[] +-:imagesdir: ../images +- +-// tag::content[] +-== Welcome +-KeePassXC is a modern, secure, and open-source password manager that stores and manages your most sensitive information. You can run KeePassXC on Windows, macOS, and Linux systems. +- +-KeePassXC is for people with extremely high demands of secure personal data management. It saves many different types of information, such as usernames, passwords, URLs, attachments, and notes in an offline, encrypted file that can be stored in any location, including private and public cloud solutions. For easy identification and management, user-defined titles and icons can be specified for entries. In addition, entries are sorted in customizable groups. An integrated search function allows you to use advanced patterns to easily find any entry in your database. A customizable, fast, and easy-to-use password generator utility allows you to create passwords with any combination of characters or easy to remember passphrases. +- +-=== Overview +-You can store an unlimited number of passwords and information in a KeePassXC database. Every piece of information you store in your database is encrypted at all times within the `kdbx` file. When you are accessing your database from within KeePassXC, your information in decrypted and stored in your computer's memory. KeePassXC places controls over the access to this data so other applications cannot read it (unless they have administrative rights). The interface is designed to let you quickly access your passwords, search for the right entry, perform Auto-Type or copy/paste operations, make and save changes, and then get out of your way. +- +-KeePassXC ships with light and dark themes specifically designed to meet accessibility standards. In most cases, the appropriate theme for your system will be determined automatically, but you can always set a specific theme in the application settings. +- +-.Light and Dark Themes +-image::theme_comparison.png[] +- +-=== Features +-KeePassXC has numerous features for novice and power users alike. This guide will go over the basic features to get you up and running quickly. The User Guide contains more in-depth discussions on the major features in the application. +- +-* Basic Features +- ** Create, open, and save databases in the KDBX format (KeePass Compatible) +- ** Store sensitive information in entries that are organized by groups +- ** Search for entries +- ** Password generator +- ** Auto-Type passwords into applications +- ** Browser integration with Google Chrome, Mozilla Firefox, Microsoft Edge, Chromium, Vivaldi, Brave, and Tor-Browser +- ** Entry icon download +- ** Import databases from CSV, 1Password, and KeePass1 formats +- +-* Advanced Features +- ** Database reports (password health, HIBP, and statistics) +- ** Database export to CSV and HTML formats +- ** TOTP storage and generation +- ** Field references between entries +- ** File attachments and custom attributes +- ** Entry history and data restoration +- ** YubiKey/OnlyKey challenge-response support +- ** Command line interface (keepassxc-cli) +- ** Auto-Open databases +- ** KeeShare shared databases (import, export, and synchronize) +- ** SSH Agent +- ** FreeDesktop.org Secret Service (replace Gnome keyring, etc.) +- ** Additional encryption choices: Twofish and ChaCha20 +-// end::content[] +diff -urNr keepassxc-2.6.4-orig/docs/UserGuide.adoc keepassxc-2.6.4-patched/docs/UserGuide.adoc +--- keepassxc-2.6.4-orig/docs/UserGuide.adoc 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/docs/UserGuide.adoc 1970-01-01 01:00:00.000000000 +0100 +@@ -1,37 +0,0 @@ +-= KeePassXC: User Guide +-KeePassXC Team +-v2.6.0 +-:data-uri: +-:homepage: https://keepassxc.org +-:icons: font +-:imagesdir: images +-:stylesheet: styles/dark.css +-:toc: left +-ifdef::backend-pdf[] +-:title-page: +-:title-logo-image: {imagesdir}/kpxc_logo.png +-:pdf-theme: styles/pdf_theme.yml +-:compress: +-endif::[] +- +-include::topics/Disclaimers.adoc[] +- +-<<< +- +-// Include feature topics and advanced sections +- +-include::topics/UserInterface.adoc[tags=*] +- +-include::topics/DatabaseOperations.adoc[tags=*] +- +-include::topics/ImportExport.adoc[tags=*] +- +-include::topics/PasswordGenerator.adoc[tags=*] +- +-include::topics/BrowserPlugin.adoc[tags=*] +- +-include::topics/AutoType.adoc[tags=*] +- +-include::topics/KeeShare.adoc[tags=*] +- +-include::topics/SSHAgent.adoc[tags=*] +diff -urNr keepassxc-2.6.4-orig/.gitrev keepassxc-2.6.4-patched/.gitrev +--- keepassxc-2.6.4-orig/.gitrev 2021-01-31 22:52:50.000000000 +0100 ++++ keepassxc-2.6.4-patched/.gitrev 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +-34a78f0 +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/INSTALL.md keepassxc-2.6.4-patched/INSTALL.md +--- keepassxc-2.6.4-orig/INSTALL.md 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/INSTALL.md 1970-01-01 01:00:00.000000000 +0100 +@@ -1,166 +0,0 @@ +-Build and Install KeePassXC +-================= +- +-This document will guide you through the steps to build and install KeePassXC from source. +-For more information, see also the [_Building KeePassXC_](https://github.com/keepassxreboot/keepassxc/wiki/Building-KeePassXC) page on the wiki. +- +-The [QuickStart Guide](https://keepassxc.org/docs/KeePassXC_GettingStarted.html) gets you started using KeePassXC on your Windows, macOS, or Linux computer using pre-compiled binaries from the [downloads page](https://keepassxc.org/download). +- +-Build Dependencies +-================== +- +-The following tools must exist within your PATH: +- +-* make +-* cmake (>= 2.8.12) +-* g++ (>= 4.7) or clang++ (>= 3.0) +-* asciidoctor (on Linux/MacOS) +- +-The following libraries are required: +- +-* Qt 5 (>= 5.2): qtbase and qttools5 +-* libgcrypt (>= 1.6) +-* zlib +-* libmicrohttpd +-* libxi, libxtst, qtx11extras (optional for auto-type on X11) +-* libsodium (>= 1.0.12) +-* libargon2 +-* qrencode +-* yubikey ykpers (optional to support YubiKey) +- +-Prepare the Building Environment +-================================ +- +-* [Building Environment on Linux](https://github.com/keepassxreboot/keepassxc/wiki/Set-up-Build-Environment-on-Linux) +-* [Building Environment on Windows](https://github.com/keepassxreboot/keepassxc/wiki/Set-up-Build-Environment-on-Windows) +-* [Building Environment on MacOS](https://github.com/keepassxreboot/keepassxc/wiki/Set-up-Build-Environment-on-macOS) +- +-Build Steps +-=========== +-We recommend using the release tool to perform builds, please read up-to-date instructions [on our wiki](https://github.com/keepassxreboot/keepassxc/wiki/Building-KeePassXC#building-using-the-release-tool). +- +-To compile from source, open a **Terminal (on Linux/MacOS)** or a **MSYS2-MinGW shell (on Windows)**
+-**Note:** on Windows make sure you are using a **MINGW shell** by checking the label before the current path +- +-First, download the KeePassXC [source tarball](https://keepassxc.org/download#source) +-or check out the latest version from our [Git repository](https://github.com/keepassxreboot/keepassxc). +- +-To clone the project from Git, `cd` to a suitable location and run +- +-```bash +-git clone https://github.com/keepassxreboot/keepassxc.git +-``` +- +-This will clone the entire contents of the repository and check out the current `develop` branch. +- +-To update the project from within the project's folder, you can run the following command: +- +-```bash +-git pull +-``` +- +-For a stable build, it is recommended to checkout the master branch. +- +-```bash +-git checkout master +-``` +- +-Navigate to the directory where you have downloaded KeePassXC and type these commands: +- +-``` +-mkdir build +-cd build +-cmake -DWITH_XC_ALL=ON .. +-make +-``` +- +-If you are on Windows, you may have to add ```-G "MSYS Makefiles"``` to the beginning of the cmake command. See the [Windows Build Instructions](https://github.com/keepassxreboot/keepassxc/wiki/Building-KeePassXC#windows) for more information. +- +-These steps place the compiled KeePassXC binary inside the `./build/src/` directory. +-(Note the cmake notes/options below.) +- +-**Cmake Notes:** +- +-* Common cmake parameters +- +- ``` +- -DCMAKE_INSTALL_PREFIX=/usr/local +- -DCMAKE_VERBOSE_MAKEFILE=ON +- -DCMAKE_BUILD_TYPE= +- -DWITH_GUI_TESTS=ON +- ``` +- +-* cmake accepts the following options: +- +- ``` +- -DWITH_XC_AUTOTYPE=[ON|OFF] Enable/Disable Auto-Type (default: ON) +- -DWITH_XC_YUBIKEY=[ON|OFF] Enable/Disable YubiKey HMAC-SHA1 authentication support (default: OFF) +- -DWITH_XC_BROWSER=[ON|OFF] Enable/Disable KeePassXC-Browser extension support (default: OFF) +- -DWITH_XC_NETWORKING=[ON|OFF] Enable/Disable Networking support (e.g., favicon downloading) (default: OFF) +- -DWITH_XC_SSHAGENT=[ON|OFF] Enable/Disable SSHAgent support (default: OFF) +- -DWITH_XC_TOUCHID=[ON|OFF] (macOS Only) Enable/Disable Touch ID unlock (default:OFF) +- -DWITH_XC_FDOSECRETS=[ON|OFF] (Linux Only) Enable/Disable Freedesktop.org Secrets Service support (default:OFF) +- -DWITH_XC_KEESHARE=[ON|OFF] Enable/Disable KeeShare group synchronization extension (default: OFF) +- -DWITH_XC_KEESHARE_SECURE=[ON|OFF] Enable/Disable KeeShare signed containers, requires libquazip5 (default: OFF) +- -DWITH_XC_ALL=[ON|OFF] Enable/Disable compiling all plugins above (default: OFF) +- +- -DWITH_XC_UPDATECHECK=[ON|OFF] Enable/Disable automatic updating checking (requires WITH_XC_NETWORKING) (default: ON) +- +- -DWITH_TESTS=[ON|OFF] Enable/Disable building of unit tests (default: ON) +- -DWITH_GUI_TESTS=[ON|OFF] Enable/Disable building of GUI tests (default: OFF) +- -DWITH_DEV_BUILD=[ON|OFF] Enable/Disable deprecated method warnings (default: OFF) +- -DWITH_ASAN=[ON|OFF] Enable/Disable address sanitizer checks (Linux / macOS only) (default: OFF) +- -DWITH_COVERAGE=[ON|OFF] Enable/Disable coverage tests (GCC only) (default: OFF) +- -DWITH_APP_BUNDLE=[ON|OFF] Enable Application Bundle for macOS (default: ON) +- +- -DKEEPASSXC_BUILD_TYPE=[Snapshot|PreRelease|Release] Set the build type to show/hide stability warnings (default: "Snapshot") +- -DKEEPASSXC_DIST_TYPE=[Snap|AppImage|Other] Specify the distribution method (default: "Other") +- -DOVERRIDE_VERSION=[X.X.X] Specify a version number when building. Used with snapshot builds (default: "") +- -DGIT_HEAD_OVERRIDE=[XXXXXXX] Specify the 7 digit git commit ref for this build. Used with distribution builds (default: "") +- ``` +- +-* If you are on MacOS you must add this parameter to **Cmake**, with the Qt version you have installed
`-DCMAKE_PREFIX_PATH=/usr/local/Cellar/qt5/5.6.2/lib/cmake/` +- +-:exclamation: When building with ASan support on macOS, you need to use `export ASAN_OPTIONS=detect_leaks=0` before running the tests (no LSan support in macOS). +- +-Installation +-============ +- +-After you have successfully built KeePassXC, install the binary by executing the following: +- +-```bash +-sudo make install +-``` +- +-You can specify the destination dir with +-``` +-DESTDIR=X +-``` +- +- +-Packaging +-========= +- +-You can create a package to redistribute KeePassXC (zip, deb, rpm, dmg, etc..). Refer to [keepassxc-packaging](https://github.com/keepassxreboot/keepassxc-packaging) +- +- +-Testing +-======= +- +-You can perform tests on the built executables with: +-``` +-make test ARGS+="--output-on-failure" +-``` +- +-If you are not currently running on an X Server or Wayland, run the tests as follows: +-``` +-make test ARGS+="-E test\(cli\|gui\) --output-on-failure" +-xvfb-run -e errors -a --server-args="-screen 0 1024x768x24" make test ARGS+="-R test\(cli\|gui\) --output-on-failure" +-``` +- +-Common parameters: +-``` +-CTEST_OUTPUT_ON_FAILURE=1 +-ARGS+=-jX +-ARGS+="-E testgui" +-``` +diff -urNr keepassxc-2.6.4-orig/LICENSE.BSD keepassxc-2.6.4-patched/LICENSE.BSD +--- keepassxc-2.6.4-orig/LICENSE.BSD 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/LICENSE.BSD 1970-01-01 01:00:00.000000000 +0100 +@@ -1,23 +0,0 @@ +-Redistribution and use in source and binary forms, with or without +-modification, are permitted provided that the following conditions +-are met: +- +-1. Redistributions of source code must retain the copyright +- notice, this list of conditions and the following disclaimer. +-2. Redistributions in binary form must reproduce the copyright +- notice, this list of conditions and the following disclaimer in the +- documentation and/or other materials provided with the distribution. +-3. The name of the author may not be used to endorse or promote products +- derived from this software without specific prior written permission. +- +-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +-IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +- +diff -urNr keepassxc-2.6.4-orig/LICENSE.CC0 keepassxc-2.6.4-patched/LICENSE.CC0 +--- keepassxc-2.6.4-orig/LICENSE.CC0 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/LICENSE.CC0 1970-01-01 01:00:00.000000000 +0100 +@@ -1,128 +0,0 @@ +-Creative Commons CC0 1.0 Universal +- +-CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE +-LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN +-ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION +-ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE +-USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER, AND +-DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM THE USE OF THIS DOCUMENT +-OR THE INFORMATION OR WORKS PROVIDED HEREUNDER. +- +-Statement of Purpose +- +-The laws of most jurisdictions throughout the world automatically confer +-exclusive Copyright and Related Rights (defined below) upon the creator +-and subsequent owner(s) (each and all, an "owner") of an original work +-of authorship and/or a database (each, a "Work"). +- +-Certain owners wish to permanently relinquish those rights to a Work for +-the purpose of contributing to a commons of creative, cultural and +-scientific works ("Commons") that the public can reliably and without +-fear of later claims of infringement build upon, modify, incorporate in +-other works, reuse and redistribute as freely as possible in any form +-whatsoever and for any purposes, including without limitation commercial +-purposes. These owners may contribute to the Commons to promote the +-ideal of a free culture and the further production of creative, cultural +-and scientific works, or to gain reputation or greater distribution for +-their Work in part through the use and efforts of others. +- +-For these and/or other purposes and motivations, and without any +-expectation of additional consideration or compensation, the person +-associating CC0 with a Work (the "Affirmer"), to the extent that he or +-she is an owner of Copyright and Related Rights in the Work, voluntarily +-elects to apply CC0 to the Work and publicly distribute the Work under +-its terms, with knowledge of his or her Copyright and Related Rights in +-the Work and the meaning and intended legal effect of CC0 on those +-rights. +- +-1. Copyright and Related Rights. A Work made available under CC0 may be +-protected by copyright and related or neighboring rights ("Copyright and +-Related Rights"). Copyright and Related Rights include, but are not +-limited to, the following: +- +-i. the right to reproduce, adapt, distribute, perform, display, +-communicate, and translate a Work; +- +-ii. moral rights retained by the original author(s) and/or performer(s); +- +-iii. publicity and privacy rights pertaining to a person's image or +-likeness depicted in a Work; +- +-iv. rights protecting against unfair competition in regards to a Work, +-subject to the limitations in paragraph 4(a), below; +- +-v. rights protecting the extraction, dissemination, use and reuse of +-data in a Work; +- +-vi. database rights (such as those arising under Directive 96/9/EC of +-the European Parliament and of the Council of 11 March 1996 on the legal +-protection of databases, and under any national implementation thereof, +-including any amended or successor version of such directive); and +- +-vii. other similar, equivalent or corresponding rights throughout the +-world based on applicable law or treaty, and any national +-implementations thereof. +- +-2. Waiver. To the greatest extent permitted by, but not in contravention +-of, applicable law, Affirmer hereby overtly, fully, permanently, +-irrevocably and unconditionally waives, abandons, and surrenders all of +-Affirmer's Copyright and Related Rights and associated claims and causes +-of action, whether now known or unknown (including existing as well as +-future claims and causes of action), in the Work (i) in all territories +-worldwide, (ii) for the maximum duration provided by applicable law or +-treaty (including future time extensions), (iii) in any current or +-future medium and for any number of copies, and (iv) for any purpose +-whatsoever, including without limitation commercial, advertising or +-promotional purposes (the "Waiver"). Affirmer makes the Waiver for the +-benefit of each member of the public at large and to the detriment of +-Affirmer's heirs and successors, fully intending that such Waiver shall +-not be subject to revocation, rescission, cancellation, termination, or +-any other legal or equitable action to disrupt the quiet enjoyment of +-the Work by the public as contemplated by Affirmer's express Statement +-of Purpose. +- +-3. Public License Fallback. Should any part of the Waiver for any reason +-be judged legally invalid or ineffective under applicable law, then the +-Waiver shall be preserved to the maximum extent permitted taking into +-account Affirmer's express Statement of Purpose. In addition, to the +-extent the Waiver is so judged Affirmer hereby grants to each affected +-person a royalty-free, non transferable, non sublicensable, non +-exclusive, irrevocable and unconditional license to exercise Affirmer's +-Copyright and Related Rights in the Work (i) in all territories +-worldwide, (ii) for the maximum duration provided by applicable law or +-treaty (including future time extensions), (iii) in any current or +-future medium and for any number of copies, and (iv) for any purpose +-whatsoever, including without limitation commercial, advertising or +-promotional purposes (the "License"). The License shall be deemed +-effective as of the date CC0 was applied by Affirmer to the Work. Should +-any part of the License for any reason be judged legally invalid or +-ineffective under applicable law, such partial invalidity or +-ineffectiveness shall not invalidate the remainder of the License, and +-in such case Affirmer hereby affirms that he or she will not (i) +-exercise any of his or her remaining Copyright and Related Rights in the +-Work or (ii) assert any associated claims and causes of action with +-respect to the Work, in either case contrary to Affirmer's express +-Statement of Purpose. +- +-4. Limitations and Disclaimers. +- +-a. No trademark or patent rights held by Affirmer are waived, abandoned, +-surrendered, licensed or otherwise affected by this document. +- +-b. Affirmer offers the Work as-is and makes no representations or +-warranties of any kind concerning the Work, express, implied, statutory +-or otherwise, including without limitation warranties of title, +-merchantability, fitness for a particular purpose, non infringement, or +-the absence of latent or other defects, accuracy, or the present or +-absence of errors, whether or not discoverable, all to the greatest +-extent permissible under applicable law. +- +-c. Affirmer disclaims responsibility for clearing rights of other +-persons that may apply to the Work or any use thereof, including without +-limitation any person's Copyright and Related Rights in the Work. +-Further, Affirmer disclaims responsibility for obtaining any necessary +-consents, permissions or other rights required for any use of the Work. +- +-d. Affirmer understands and acknowledges that Creative Commons is not a +-party to this document and has no duty or obligation with respect to +-this CC0 or use of the Work. +diff -urNr keepassxc-2.6.4-orig/LICENSE.GPL-2 keepassxc-2.6.4-patched/LICENSE.GPL-2 +--- keepassxc-2.6.4-orig/LICENSE.GPL-2 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/LICENSE.GPL-2 1970-01-01 01:00:00.000000000 +0100 +@@ -1,339 +0,0 @@ +- GNU GENERAL PUBLIC LICENSE +- Version 2, June 1991 +- +- Copyright (C) 1989, 1991 Free Software Foundation, Inc., +- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +- Everyone is permitted to copy and distribute verbatim copies +- of this license document, but changing it is not allowed. +- +- Preamble +- +- The licenses for most software are designed to take away your +-freedom to share and change it. By contrast, the GNU General Public +-License is intended to guarantee your freedom to share and change free +-software--to make sure the software is free for all its users. This +-General Public License applies to most of the Free Software +-Foundation's software and to any other program whose authors commit to +-using it. (Some other Free Software Foundation software is covered by +-the GNU Lesser General Public License instead.) You can apply it to +-your programs, too. +- +- When we speak of free software, we are referring to freedom, not +-price. Our General Public Licenses are designed to make sure that you +-have the freedom to distribute copies of free software (and charge for +-this service if you wish), that you receive source code or can get it +-if you want it, that you can change the software or use pieces of it +-in new free programs; and that you know you can do these things. +- +- To protect your rights, we need to make restrictions that forbid +-anyone to deny you these rights or to ask you to surrender the rights. +-These restrictions translate to certain responsibilities for you if you +-distribute copies of the software, or if you modify it. +- +- For example, if you distribute copies of such a program, whether +-gratis or for a fee, you must give the recipients all the rights that +-you have. You must make sure that they, too, receive or can get the +-source code. And you must show them these terms so they know their +-rights. +- +- We protect your rights with two steps: (1) copyright the software, and +-(2) offer you this license which gives you legal permission to copy, +-distribute and/or modify the software. +- +- Also, for each author's protection and ours, we want to make certain +-that everyone understands that there is no warranty for this free +-software. If the software is modified by someone else and passed on, we +-want its recipients to know that what they have is not the original, so +-that any problems introduced by others will not reflect on the original +-authors' reputations. +- +- Finally, any free program is threatened constantly by software +-patents. We wish to avoid the danger that redistributors of a free +-program will individually obtain patent licenses, in effect making the +-program proprietary. To prevent this, we have made it clear that any +-patent must be licensed for everyone's free use or not licensed at all. +- +- The precise terms and conditions for copying, distribution and +-modification follow. +- +- GNU GENERAL PUBLIC LICENSE +- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION +- +- 0. This License applies to any program or other work which contains +-a notice placed by the copyright holder saying it may be distributed +-under the terms of this General Public License. The "Program", below, +-refers to any such program or work, and a "work based on the Program" +-means either the Program or any derivative work under copyright law: +-that is to say, a work containing the Program or a portion of it, +-either verbatim or with modifications and/or translated into another +-language. (Hereinafter, translation is included without limitation in +-the term "modification".) Each licensee is addressed as "you". +- +-Activities other than copying, distribution and modification are not +-covered by this License; they are outside its scope. The act of +-running the Program is not restricted, and the output from the Program +-is covered only if its contents constitute a work based on the +-Program (independent of having been made by running the Program). +-Whether that is true depends on what the Program does. +- +- 1. You may copy and distribute verbatim copies of the Program's +-source code as you receive it, in any medium, provided that you +-conspicuously and appropriately publish on each copy an appropriate +-copyright notice and disclaimer of warranty; keep intact all the +-notices that refer to this License and to the absence of any warranty; +-and give any other recipients of the Program a copy of this License +-along with the Program. +- +-You may charge a fee for the physical act of transferring a copy, and +-you may at your option offer warranty protection in exchange for a fee. +- +- 2. You may modify your copy or copies of the Program or any portion +-of it, thus forming a work based on the Program, and copy and +-distribute such modifications or work under the terms of Section 1 +-above, provided that you also meet all of these conditions: +- +- a) You must cause the modified files to carry prominent notices +- stating that you changed the files and the date of any change. +- +- b) You must cause any work that you distribute or publish, that in +- whole or in part contains or is derived from the Program or any +- part thereof, to be licensed as a whole at no charge to all third +- parties under the terms of this License. +- +- c) If the modified program normally reads commands interactively +- when run, you must cause it, when started running for such +- interactive use in the most ordinary way, to print or display an +- announcement including an appropriate copyright notice and a +- notice that there is no warranty (or else, saying that you provide +- a warranty) and that users may redistribute the program under +- these conditions, and telling the user how to view a copy of this +- License. (Exception: if the Program itself is interactive but +- does not normally print such an announcement, your work based on +- the Program is not required to print an announcement.) +- +-These requirements apply to the modified work as a whole. If +-identifiable sections of that work are not derived from the Program, +-and can be reasonably considered independent and separate works in +-themselves, then this License, and its terms, do not apply to those +-sections when you distribute them as separate works. But when you +-distribute the same sections as part of a whole which is a work based +-on the Program, the distribution of the whole must be on the terms of +-this License, whose permissions for other licensees extend to the +-entire whole, and thus to each and every part regardless of who wrote it. +- +-Thus, it is not the intent of this section to claim rights or contest +-your rights to work written entirely by you; rather, the intent is to +-exercise the right to control the distribution of derivative or +-collective works based on the Program. +- +-In addition, mere aggregation of another work not based on the Program +-with the Program (or with a work based on the Program) on a volume of +-a storage or distribution medium does not bring the other work under +-the scope of this License. +- +- 3. You may copy and distribute the Program (or a work based on it, +-under Section 2) in object code or executable form under the terms of +-Sections 1 and 2 above provided that you also do one of the following: +- +- a) Accompany it with the complete corresponding machine-readable +- source code, which must be distributed under the terms of Sections +- 1 and 2 above on a medium customarily used for software interchange; or, +- +- b) Accompany it with a written offer, valid for at least three +- years, to give any third party, for a charge no more than your +- cost of physically performing source distribution, a complete +- machine-readable copy of the corresponding source code, to be +- distributed under the terms of Sections 1 and 2 above on a medium +- customarily used for software interchange; or, +- +- c) Accompany it with the information you received as to the offer +- to distribute corresponding source code. (This alternative is +- allowed only for noncommercial distribution and only if you +- received the program in object code or executable form with such +- an offer, in accord with Subsection b above.) +- +-The source code for a work means the preferred form of the work for +-making modifications to it. For an executable work, complete source +-code means all the source code for all modules it contains, plus any +-associated interface definition files, plus the scripts used to +-control compilation and installation of the executable. However, as a +-special exception, the source code distributed need not include +-anything that is normally distributed (in either source or binary +-form) with the major components (compiler, kernel, and so on) of the +-operating system on which the executable runs, unless that component +-itself accompanies the executable. +- +-If distribution of executable or object code is made by offering +-access to copy from a designated place, then offering equivalent +-access to copy the source code from the same place counts as +-distribution of the source code, even though third parties are not +-compelled to copy the source along with the object code. +- +- 4. You may not copy, modify, sublicense, or distribute the Program +-except as expressly provided under this License. Any attempt +-otherwise to copy, modify, sublicense or distribute the Program is +-void, and will automatically terminate your rights under this License. +-However, parties who have received copies, or rights, from you under +-this License will not have their licenses terminated so long as such +-parties remain in full compliance. +- +- 5. You are not required to accept this License, since you have not +-signed it. However, nothing else grants you permission to modify or +-distribute the Program or its derivative works. These actions are +-prohibited by law if you do not accept this License. Therefore, by +-modifying or distributing the Program (or any work based on the +-Program), you indicate your acceptance of this License to do so, and +-all its terms and conditions for copying, distributing or modifying +-the Program or works based on it. +- +- 6. Each time you redistribute the Program (or any work based on the +-Program), the recipient automatically receives a license from the +-original licensor to copy, distribute or modify the Program subject to +-these terms and conditions. You may not impose any further +-restrictions on the recipients' exercise of the rights granted herein. +-You are not responsible for enforcing compliance by third parties to +-this License. +- +- 7. If, as a consequence of a court judgment or allegation of patent +-infringement or for any other reason (not limited to patent issues), +-conditions are imposed on you (whether by court order, agreement or +-otherwise) that contradict the conditions of this License, they do not +-excuse you from the conditions of this License. If you cannot +-distribute so as to satisfy simultaneously your obligations under this +-License and any other pertinent obligations, then as a consequence you +-may not distribute the Program at all. For example, if a patent +-license would not permit royalty-free redistribution of the Program by +-all those who receive copies directly or indirectly through you, then +-the only way you could satisfy both it and this License would be to +-refrain entirely from distribution of the Program. +- +-If any portion of this section is held invalid or unenforceable under +-any particular circumstance, the balance of the section is intended to +-apply and the section as a whole is intended to apply in other +-circumstances. +- +-It is not the purpose of this section to induce you to infringe any +-patents or other property right claims or to contest validity of any +-such claims; this section has the sole purpose of protecting the +-integrity of the free software distribution system, which is +-implemented by public license practices. Many people have made +-generous contributions to the wide range of software distributed +-through that system in reliance on consistent application of that +-system; it is up to the author/donor to decide if he or she is willing +-to distribute software through any other system and a licensee cannot +-impose that choice. +- +-This section is intended to make thoroughly clear what is believed to +-be a consequence of the rest of this License. +- +- 8. If the distribution and/or use of the Program is restricted in +-certain countries either by patents or by copyrighted interfaces, the +-original copyright holder who places the Program under this License +-may add an explicit geographical distribution limitation excluding +-those countries, so that distribution is permitted only in or among +-countries not thus excluded. In such case, this License incorporates +-the limitation as if written in the body of this License. +- +- 9. The Free Software Foundation may publish revised and/or new versions +-of the General Public License from time to time. Such new versions will +-be similar in spirit to the present version, but may differ in detail to +-address new problems or concerns. +- +-Each version is given a distinguishing version number. If the Program +-specifies a version number of this License which applies to it and "any +-later version", you have the option of following the terms and conditions +-either of that version or of any later version published by the Free +-Software Foundation. If the Program does not specify a version number of +-this License, you may choose any version ever published by the Free Software +-Foundation. +- +- 10. If you wish to incorporate parts of the Program into other free +-programs whose distribution conditions are different, write to the author +-to ask for permission. For software which is copyrighted by the Free +-Software Foundation, write to the Free Software Foundation; we sometimes +-make exceptions for this. Our decision will be guided by the two goals +-of preserving the free status of all derivatives of our free software and +-of promoting the sharing and reuse of software generally. +- +- NO WARRANTY +- +- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +-REPAIR OR CORRECTION. +- +- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +-POSSIBILITY OF SUCH DAMAGES. +- +- END OF TERMS AND CONDITIONS +- +- How to Apply These Terms to Your New Programs +- +- If you develop a new program, and you want it to be of the greatest +-possible use to the public, the best way to achieve this is to make it +-free software which everyone can redistribute and change under these terms. +- +- To do so, attach the following notices to the program. It is safest +-to attach them to the start of each source file to most effectively +-convey the exclusion of warranty; and each file should have at least +-the "copyright" line and a pointer to where the full notice is found. +- +- +- Copyright (C) +- +- This program is free software; you can redistribute it and/or modify +- it under the terms of the GNU General Public License as published by +- the Free Software Foundation; either version 2 of the License, or +- (at your option) any later version. +- +- This program is distributed in the hope that it will be useful, +- but WITHOUT ANY WARRANTY; without even the implied warranty of +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- GNU General Public License for more details. +- +- You should have received a copy of the GNU General Public License along +- with this program; if not, write to the Free Software Foundation, Inc., +- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +- +-Also add information on how to contact you by electronic and paper mail. +- +-If the program is interactive, make it output a short notice like this +-when it starts in an interactive mode: +- +- Gnomovision version 69, Copyright (C) year name of author +- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. +- This is free software, and you are welcome to redistribute it +- under certain conditions; type `show c' for details. +- +-The hypothetical commands `show w' and `show c' should show the appropriate +-parts of the General Public License. Of course, the commands you use may +-be called something other than `show w' and `show c'; they could even be +-mouse-clicks or menu items--whatever suits your program. +- +-You should also get your employer (if you work as a programmer) or your +-school, if any, to sign a "copyright disclaimer" for the program, if +-necessary. Here is a sample; alter the names: +- +- Yoyodyne, Inc., hereby disclaims all copyright interest in the program +- `Gnomovision' (which makes passes at compilers) written by James Hacker. +- +- , 1 April 1989 +- Ty Coon, President of Vice +- +-This General Public License does not permit incorporating your program into +-proprietary programs. If your program is a subroutine library, you may +-consider it more useful to permit linking proprietary applications with the +-library. If this is what you want to do, use the GNU Lesser General +-Public License instead of this License. +diff -urNr keepassxc-2.6.4-orig/LICENSE.GPL-3 keepassxc-2.6.4-patched/LICENSE.GPL-3 +--- keepassxc-2.6.4-orig/LICENSE.GPL-3 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/LICENSE.GPL-3 1970-01-01 01:00:00.000000000 +0100 +@@ -1,676 +0,0 @@ +- +- GNU GENERAL PUBLIC LICENSE +- Version 3, 29 June 2007 +- +- Copyright (C) 2007 Free Software Foundation, Inc. +- Everyone is permitted to copy and distribute verbatim copies +- of this license document, but changing it is not allowed. +- +- Preamble +- +- The GNU General Public License is a free, copyleft license for +-software and other kinds of works. +- +- The licenses for most software and other practical works are designed +-to take away your freedom to share and change the works. By contrast, +-the GNU General Public License is intended to guarantee your freedom to +-share and change all versions of a program--to make sure it remains free +-software for all its users. We, the Free Software Foundation, use the +-GNU General Public License for most of our software; it applies also to +-any other work released this way by its authors. You can apply it to +-your programs, too. +- +- When we speak of free software, we are referring to freedom, not +-price. Our General Public Licenses are designed to make sure that you +-have the freedom to distribute copies of free software (and charge for +-them if you wish), that you receive source code or can get it if you +-want it, that you can change the software or use pieces of it in new +-free programs, and that you know you can do these things. +- +- To protect your rights, we need to prevent others from denying you +-these rights or asking you to surrender the rights. Therefore, you have +-certain responsibilities if you distribute copies of the software, or if +-you modify it: responsibilities to respect the freedom of others. +- +- For example, if you distribute copies of such a program, whether +-gratis or for a fee, you must pass on to the recipients the same +-freedoms that you received. You must make sure that they, too, receive +-or can get the source code. And you must show them these terms so they +-know their rights. +- +- Developers that use the GNU GPL protect your rights with two steps: +-(1) assert copyright on the software, and (2) offer you this License +-giving you legal permission to copy, distribute and/or modify it. +- +- For the developers' and authors' protection, the GPL clearly explains +-that there is no warranty for this free software. For both users' and +-authors' sake, the GPL requires that modified versions be marked as +-changed, so that their problems will not be attributed erroneously to +-authors of previous versions. +- +- Some devices are designed to deny users access to install or run +-modified versions of the software inside them, although the manufacturer +-can do so. This is fundamentally incompatible with the aim of +-protecting users' freedom to change the software. The systematic +-pattern of such abuse occurs in the area of products for individuals to +-use, which is precisely where it is most unacceptable. Therefore, we +-have designed this version of the GPL to prohibit the practice for those +-products. If such problems arise substantially in other domains, we +-stand ready to extend this provision to those domains in future versions +-of the GPL, as needed to protect the freedom of users. +- +- Finally, every program is threatened constantly by software patents. +-States should not allow patents to restrict development and use of +-software on general-purpose computers, but in those that do, we wish to +-avoid the special danger that patents applied to a free program could +-make it effectively proprietary. To prevent this, the GPL assures that +-patents cannot be used to render the program non-free. +- +- The precise terms and conditions for copying, distribution and +-modification follow. +- +- TERMS AND CONDITIONS +- +- 0. Definitions. +- +- "This License" refers to version 3 of the GNU General Public License. +- +- "Copyright" also means copyright-like laws that apply to other kinds of +-works, such as semiconductor masks. +- +- "The Program" refers to any copyrightable work licensed under this +-License. Each licensee is addressed as "you". "Licensees" and +-"recipients" may be individuals or organizations. +- +- To "modify" a work means to copy from or adapt all or part of the work +-in a fashion requiring copyright permission, other than the making of an +-exact copy. The resulting work is called a "modified version" of the +-earlier work or a work "based on" the earlier work. +- +- A "covered work" means either the unmodified Program or a work based +-on the Program. +- +- To "propagate" a work means to do anything with it that, without +-permission, would make you directly or secondarily liable for +-infringement under applicable copyright law, except executing it on a +-computer or modifying a private copy. Propagation includes copying, +-distribution (with or without modification), making available to the +-public, and in some countries other activities as well. +- +- To "convey" a work means any kind of propagation that enables other +-parties to make or receive copies. Mere interaction with a user through +-a computer network, with no transfer of a copy, is not conveying. +- +- An interactive user interface displays "Appropriate Legal Notices" +-to the extent that it includes a convenient and prominently visible +-feature that (1) displays an appropriate copyright notice, and (2) +-tells the user that there is no warranty for the work (except to the +-extent that warranties are provided), that licensees may convey the +-work under this License, and how to view a copy of this License. If +-the interface presents a list of user commands or options, such as a +-menu, a prominent item in the list meets this criterion. +- +- 1. Source Code. +- +- The "source code" for a work means the preferred form of the work +-for making modifications to it. "Object code" means any non-source +-form of a work. +- +- A "Standard Interface" means an interface that either is an official +-standard defined by a recognized standards body, or, in the case of +-interfaces specified for a particular programming language, one that +-is widely used among developers working in that language. +- +- The "System Libraries" of an executable work include anything, other +-than the work as a whole, that (a) is included in the normal form of +-packaging a Major Component, but which is not part of that Major +-Component, and (b) serves only to enable use of the work with that +-Major Component, or to implement a Standard Interface for which an +-implementation is available to the public in source code form. A +-"Major Component", in this context, means a major essential component +-(kernel, window system, and so on) of the specific operating system +-(if any) on which the executable work runs, or a compiler used to +-produce the work, or an object code interpreter used to run it. +- +- The "Corresponding Source" for a work in object code form means all +-the source code needed to generate, install, and (for an executable +-work) run the object code and to modify the work, including scripts to +-control those activities. However, it does not include the work's +-System Libraries, or general-purpose tools or generally available free +-programs which are used unmodified in performing those activities but +-which are not part of the work. For example, Corresponding Source +-includes interface definition files associated with source files for +-the work, and the source code for shared libraries and dynamically +-linked subprograms that the work is specifically designed to require, +-such as by intimate data communication or control flow between those +-subprograms and other parts of the work. +- +- The Corresponding Source need not include anything that users +-can regenerate automatically from other parts of the Corresponding +-Source. +- +- The Corresponding Source for a work in source code form is that +-same work. +- +- 2. Basic Permissions. +- +- All rights granted under this License are granted for the term of +-copyright on the Program, and are irrevocable provided the stated +-conditions are met. This License explicitly affirms your unlimited +-permission to run the unmodified Program. The output from running a +-covered work is covered by this License only if the output, given its +-content, constitutes a covered work. This License acknowledges your +-rights of fair use or other equivalent, as provided by copyright law. +- +- You may make, run and propagate covered works that you do not +-convey, without conditions so long as your license otherwise remains +-in force. You may convey covered works to others for the sole purpose +-of having them make modifications exclusively for you, or provide you +-with facilities for running those works, provided that you comply with +-the terms of this License in conveying all material for which you do +-not control copyright. Those thus making or running the covered works +-for you must do so exclusively on your behalf, under your direction +-and control, on terms that prohibit them from making any copies of +-your copyrighted material outside their relationship with you. +- +- Conveying under any other circumstances is permitted solely under +-the conditions stated below. Sublicensing is not allowed; section 10 +-makes it unnecessary. +- +- 3. Protecting Users' Legal Rights From Anti-Circumvention Law. +- +- No covered work shall be deemed part of an effective technological +-measure under any applicable law fulfilling obligations under article +-11 of the WIPO copyright treaty adopted on 20 December 1996, or +-similar laws prohibiting or restricting circumvention of such +-measures. +- +- When you convey a covered work, you waive any legal power to forbid +-circumvention of technological measures to the extent such circumvention +-is effected by exercising rights under this License with respect to +-the covered work, and you disclaim any intention to limit operation or +-modification of the work as a means of enforcing, against the work's +-users, your or third parties' legal rights to forbid circumvention of +-technological measures. +- +- 4. Conveying Verbatim Copies. +- +- You may convey verbatim copies of the Program's source code as you +-receive it, in any medium, provided that you conspicuously and +-appropriately publish on each copy an appropriate copyright notice; +-keep intact all notices stating that this License and any +-non-permissive terms added in accord with section 7 apply to the code; +-keep intact all notices of the absence of any warranty; and give all +-recipients a copy of this License along with the Program. +- +- You may charge any price or no price for each copy that you convey, +-and you may offer support or warranty protection for a fee. +- +- 5. Conveying Modified Source Versions. +- +- You may convey a work based on the Program, or the modifications to +-produce it from the Program, in the form of source code under the +-terms of section 4, provided that you also meet all of these conditions: +- +- a) The work must carry prominent notices stating that you modified +- it, and giving a relevant date. +- +- b) The work must carry prominent notices stating that it is +- released under this License and any conditions added under section +- 7. This requirement modifies the requirement in section 4 to +- "keep intact all notices". +- +- c) You must license the entire work, as a whole, under this +- License to anyone who comes into possession of a copy. This +- License will therefore apply, along with any applicable section 7 +- additional terms, to the whole of the work, and all its parts, +- regardless of how they are packaged. This License gives no +- permission to license the work in any other way, but it does not +- invalidate such permission if you have separately received it. +- +- d) If the work has interactive user interfaces, each must display +- Appropriate Legal Notices; however, if the Program has interactive +- interfaces that do not display Appropriate Legal Notices, your +- work need not make them do so. +- +- A compilation of a covered work with other separate and independent +-works, which are not by their nature extensions of the covered work, +-and which are not combined with it such as to form a larger program, +-in or on a volume of a storage or distribution medium, is called an +-"aggregate" if the compilation and its resulting copyright are not +-used to limit the access or legal rights of the compilation's users +-beyond what the individual works permit. Inclusion of a covered work +-in an aggregate does not cause this License to apply to the other +-parts of the aggregate. +- +- 6. Conveying Non-Source Forms. +- +- You may convey a covered work in object code form under the terms +-of sections 4 and 5, provided that you also convey the +-machine-readable Corresponding Source under the terms of this License, +-in one of these ways: +- +- a) Convey the object code in, or embodied in, a physical product +- (including a physical distribution medium), accompanied by the +- Corresponding Source fixed on a durable physical medium +- customarily used for software interchange. +- +- b) Convey the object code in, or embodied in, a physical product +- (including a physical distribution medium), accompanied by a +- written offer, valid for at least three years and valid for as +- long as you offer spare parts or customer support for that product +- model, to give anyone who possesses the object code either (1) a +- copy of the Corresponding Source for all the software in the +- product that is covered by this License, on a durable physical +- medium customarily used for software interchange, for a price no +- more than your reasonable cost of physically performing this +- conveying of source, or (2) access to copy the +- Corresponding Source from a network server at no charge. +- +- c) Convey individual copies of the object code with a copy of the +- written offer to provide the Corresponding Source. This +- alternative is allowed only occasionally and noncommercially, and +- only if you received the object code with such an offer, in accord +- with subsection 6b. +- +- d) Convey the object code by offering access from a designated +- place (gratis or for a charge), and offer equivalent access to the +- Corresponding Source in the same way through the same place at no +- further charge. You need not require recipients to copy the +- Corresponding Source along with the object code. If the place to +- copy the object code is a network server, the Corresponding Source +- may be on a different server (operated by you or a third party) +- that supports equivalent copying facilities, provided you maintain +- clear directions next to the object code saying where to find the +- Corresponding Source. Regardless of what server hosts the +- Corresponding Source, you remain obligated to ensure that it is +- available for as long as needed to satisfy these requirements. +- +- e) Convey the object code using peer-to-peer transmission, provided +- you inform other peers where the object code and Corresponding +- Source of the work are being offered to the general public at no +- charge under subsection 6d. +- +- A separable portion of the object code, whose source code is excluded +-from the Corresponding Source as a System Library, need not be +-included in conveying the object code work. +- +- A "User Product" is either (1) a "consumer product", which means any +-tangible personal property which is normally used for personal, family, +-or household purposes, or (2) anything designed or sold for incorporation +-into a dwelling. In determining whether a product is a consumer product, +-doubtful cases shall be resolved in favor of coverage. For a particular +-product received by a particular user, "normally used" refers to a +-typical or common use of that class of product, regardless of the status +-of the particular user or of the way in which the particular user +-actually uses, or expects or is expected to use, the product. A product +-is a consumer product regardless of whether the product has substantial +-commercial, industrial or non-consumer uses, unless such uses represent +-the only significant mode of use of the product. +- +- "Installation Information" for a User Product means any methods, +-procedures, authorization keys, or other information required to install +-and execute modified versions of a covered work in that User Product from +-a modified version of its Corresponding Source. The information must +-suffice to ensure that the continued functioning of the modified object +-code is in no case prevented or interfered with solely because +-modification has been made. +- +- If you convey an object code work under this section in, or with, or +-specifically for use in, a User Product, and the conveying occurs as +-part of a transaction in which the right of possession and use of the +-User Product is transferred to the recipient in perpetuity or for a +-fixed term (regardless of how the transaction is characterized), the +-Corresponding Source conveyed under this section must be accompanied +-by the Installation Information. But this requirement does not apply +-if neither you nor any third party retains the ability to install +-modified object code on the User Product (for example, the work has +-been installed in ROM). +- +- The requirement to provide Installation Information does not include a +-requirement to continue to provide support service, warranty, or updates +-for a work that has been modified or installed by the recipient, or for +-the User Product in which it has been modified or installed. Access to a +-network may be denied when the modification itself materially and +-adversely affects the operation of the network or violates the rules and +-protocols for communication across the network. +- +- Corresponding Source conveyed, and Installation Information provided, +-in accord with this section must be in a format that is publicly +-documented (and with an implementation available to the public in +-source code form), and must require no special password or key for +-unpacking, reading or copying. +- +- 7. Additional Terms. +- +- "Additional permissions" are terms that supplement the terms of this +-License by making exceptions from one or more of its conditions. +-Additional permissions that are applicable to the entire Program shall +-be treated as though they were included in this License, to the extent +-that they are valid under applicable law. If additional permissions +-apply only to part of the Program, that part may be used separately +-under those permissions, but the entire Program remains governed by +-this License without regard to the additional permissions. +- +- When you convey a copy of a covered work, you may at your option +-remove any additional permissions from that copy, or from any part of +-it. (Additional permissions may be written to require their own +-removal in certain cases when you modify the work.) You may place +-additional permissions on material, added by you to a covered work, +-for which you have or can give appropriate copyright permission. +- +- Notwithstanding any other provision of this License, for material you +-add to a covered work, you may (if authorized by the copyright holders of +-that material) supplement the terms of this License with terms: +- +- a) Disclaiming warranty or limiting liability differently from the +- terms of sections 15 and 16 of this License; or +- +- b) Requiring preservation of specified reasonable legal notices or +- author attributions in that material or in the Appropriate Legal +- Notices displayed by works containing it; or +- +- c) Prohibiting misrepresentation of the origin of that material, or +- requiring that modified versions of such material be marked in +- reasonable ways as different from the original version; or +- +- d) Limiting the use for publicity purposes of names of licensors or +- authors of the material; or +- +- e) Declining to grant rights under trademark law for use of some +- trade names, trademarks, or service marks; or +- +- f) Requiring indemnification of licensors and authors of that +- material by anyone who conveys the material (or modified versions of +- it) with contractual assumptions of liability to the recipient, for +- any liability that these contractual assumptions directly impose on +- those licensors and authors. +- +- All other non-permissive additional terms are considered "further +-restrictions" within the meaning of section 10. If the Program as you +-received it, or any part of it, contains a notice stating that it is +-governed by this License along with a term that is a further +-restriction, you may remove that term. If a license document contains +-a further restriction but permits relicensing or conveying under this +-License, you may add to a covered work material governed by the terms +-of that license document, provided that the further restriction does +-not survive such relicensing or conveying. +- +- If you add terms to a covered work in accord with this section, you +-must place, in the relevant source files, a statement of the +-additional terms that apply to those files, or a notice indicating +-where to find the applicable terms. +- +- Additional terms, permissive or non-permissive, may be stated in the +-form of a separately written license, or stated as exceptions; +-the above requirements apply either way. +- +- 8. Termination. +- +- You may not propagate or modify a covered work except as expressly +-provided under this License. Any attempt otherwise to propagate or +-modify it is void, and will automatically terminate your rights under +-this License (including any patent licenses granted under the third +-paragraph of section 11). +- +- However, if you cease all violation of this License, then your +-license from a particular copyright holder is reinstated (a) +-provisionally, unless and until the copyright holder explicitly and +-finally terminates your license, and (b) permanently, if the copyright +-holder fails to notify you of the violation by some reasonable means +-prior to 60 days after the cessation. +- +- Moreover, your license from a particular copyright holder is +-reinstated permanently if the copyright holder notifies you of the +-violation by some reasonable means, this is the first time you have +-received notice of violation of this License (for any work) from that +-copyright holder, and you cure the violation prior to 30 days after +-your receipt of the notice. +- +- Termination of your rights under this section does not terminate the +-licenses of parties who have received copies or rights from you under +-this License. If your rights have been terminated and not permanently +-reinstated, you do not qualify to receive new licenses for the same +-material under section 10. +- +- 9. Acceptance Not Required for Having Copies. +- +- You are not required to accept this License in order to receive or +-run a copy of the Program. Ancillary propagation of a covered work +-occurring solely as a consequence of using peer-to-peer transmission +-to receive a copy likewise does not require acceptance. However, +-nothing other than this License grants you permission to propagate or +-modify any covered work. These actions infringe copyright if you do +-not accept this License. Therefore, by modifying or propagating a +-covered work, you indicate your acceptance of this License to do so. +- +- 10. Automatic Licensing of Downstream Recipients. +- +- Each time you convey a covered work, the recipient automatically +-receives a license from the original licensors, to run, modify and +-propagate that work, subject to this License. You are not responsible +-for enforcing compliance by third parties with this License. +- +- An "entity transaction" is a transaction transferring control of an +-organization, or substantially all assets of one, or subdividing an +-organization, or merging organizations. If propagation of a covered +-work results from an entity transaction, each party to that +-transaction who receives a copy of the work also receives whatever +-licenses to the work the party's predecessor in interest had or could +-give under the previous paragraph, plus a right to possession of the +-Corresponding Source of the work from the predecessor in interest, if +-the predecessor has it or can get it with reasonable efforts. +- +- You may not impose any further restrictions on the exercise of the +-rights granted or affirmed under this License. For example, you may +-not impose a license fee, royalty, or other charge for exercise of +-rights granted under this License, and you may not initiate litigation +-(including a cross-claim or counterclaim in a lawsuit) alleging that +-any patent claim is infringed by making, using, selling, offering for +-sale, or importing the Program or any portion of it. +- +- 11. Patents. +- +- A "contributor" is a copyright holder who authorizes use under this +-License of the Program or a work on which the Program is based. The +-work thus licensed is called the contributor's "contributor version". +- +- A contributor's "essential patent claims" are all patent claims +-owned or controlled by the contributor, whether already acquired or +-hereafter acquired, that would be infringed by some manner, permitted +-by this License, of making, using, or selling its contributor version, +-but do not include claims that would be infringed only as a +-consequence of further modification of the contributor version. For +-purposes of this definition, "control" includes the right to grant +-patent sublicenses in a manner consistent with the requirements of +-this License. +- +- Each contributor grants you a non-exclusive, worldwide, royalty-free +-patent license under the contributor's essential patent claims, to +-make, use, sell, offer for sale, import and otherwise run, modify and +-propagate the contents of its contributor version. +- +- In the following three paragraphs, a "patent license" is any express +-agreement or commitment, however denominated, not to enforce a patent +-(such as an express permission to practice a patent or covenant not to +-sue for patent infringement). To "grant" such a patent license to a +-party means to make such an agreement or commitment not to enforce a +-patent against the party. +- +- If you convey a covered work, knowingly relying on a patent license, +-and the Corresponding Source of the work is not available for anyone +-to copy, free of charge and under the terms of this License, through a +-publicly available network server or other readily accessible means, +-then you must either (1) cause the Corresponding Source to be so +-available, or (2) arrange to deprive yourself of the benefit of the +-patent license for this particular work, or (3) arrange, in a manner +-consistent with the requirements of this License, to extend the patent +-license to downstream recipients. "Knowingly relying" means you have +-actual knowledge that, but for the patent license, your conveying the +-covered work in a country, or your recipient's use of the covered work +-in a country, would infringe one or more identifiable patents in that +-country that you have reason to believe are valid. +- +- If, pursuant to or in connection with a single transaction or +-arrangement, you convey, or propagate by procuring conveyance of, a +-covered work, and grant a patent license to some of the parties +-receiving the covered work authorizing them to use, propagate, modify +-or convey a specific copy of the covered work, then the patent license +-you grant is automatically extended to all recipients of the covered +-work and works based on it. +- +- A patent license is "discriminatory" if it does not include within +-the scope of its coverage, prohibits the exercise of, or is +-conditioned on the non-exercise of one or more of the rights that are +-specifically granted under this License. You may not convey a covered +-work if you are a party to an arrangement with a third party that is +-in the business of distributing software, under which you make payment +-to the third party based on the extent of your activity of conveying +-the work, and under which the third party grants, to any of the +-parties who would receive the covered work from you, a discriminatory +-patent license (a) in connection with copies of the covered work +-conveyed by you (or copies made from those copies), or (b) primarily +-for and in connection with specific products or compilations that +-contain the covered work, unless you entered into that arrangement, +-or that patent license was granted, prior to 28 March 2007. +- +- Nothing in this License shall be construed as excluding or limiting +-any implied license or other defenses to infringement that may +-otherwise be available to you under applicable patent law. +- +- 12. No Surrender of Others' Freedom. +- +- If conditions are imposed on you (whether by court order, agreement or +-otherwise) that contradict the conditions of this License, they do not +-excuse you from the conditions of this License. If you cannot convey a +-covered work so as to satisfy simultaneously your obligations under this +-License and any other pertinent obligations, then as a consequence you may +-not convey it at all. For example, if you agree to terms that obligate you +-to collect a royalty for further conveying from those to whom you convey +-the Program, the only way you could satisfy both those terms and this +-License would be to refrain entirely from conveying the Program. +- +- 13. Use with the GNU Affero General Public License. +- +- Notwithstanding any other provision of this License, you have +-permission to link or combine any covered work with a work licensed +-under version 3 of the GNU Affero General Public License into a single +-combined work, and to convey the resulting work. The terms of this +-License will continue to apply to the part which is the covered work, +-but the special requirements of the GNU Affero General Public License, +-section 13, concerning interaction through a network will apply to the +-combination as such. +- +- 14. Revised Versions of this License. +- +- The Free Software Foundation may publish revised and/or new versions of +-the GNU General Public License from time to time. Such new versions will +-be similar in spirit to the present version, but may differ in detail to +-address new problems or concerns. +- +- Each version is given a distinguishing version number. If the +-Program specifies that a certain numbered version of the GNU General +-Public License "or any later version" applies to it, you have the +-option of following the terms and conditions either of that numbered +-version or of any later version published by the Free Software +-Foundation. If the Program does not specify a version number of the +-GNU General Public License, you may choose any version ever published +-by the Free Software Foundation. +- +- If the Program specifies that a proxy can decide which future +-versions of the GNU General Public License can be used, that proxy's +-public statement of acceptance of a version permanently authorizes you +-to choose that version for the Program. +- +- Later license versions may give you additional or different +-permissions. However, no additional obligations are imposed on any +-author or copyright holder as a result of your choosing to follow a +-later version. +- +- 15. Disclaimer of Warranty. +- +- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +-APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +-IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +-ALL NECESSARY SERVICING, REPAIR OR CORRECTION. +- +- 16. Limitation of Liability. +- +- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +-SUCH DAMAGES. +- +- 17. Interpretation of Sections 15 and 16. +- +- If the disclaimer of warranty and limitation of liability provided +-above cannot be given local legal effect according to their terms, +-reviewing courts shall apply local law that most closely approximates +-an absolute waiver of all civil liability in connection with the +-Program, unless a warranty or assumption of liability accompanies a +-copy of the Program in return for a fee. +- +- END OF TERMS AND CONDITIONS +- +- How to Apply These Terms to Your New Programs +- +- If you develop a new program, and you want it to be of the greatest +-possible use to the public, the best way to achieve this is to make it +-free software which everyone can redistribute and change under these terms. +- +- To do so, attach the following notices to the program. It is safest +-to attach them to the start of each source file to most effectively +-state the exclusion of warranty; and each file should have at least +-the "copyright" line and a pointer to where the full notice is found. +- +- +- Copyright (C) +- +- This program is free software: you can redistribute it and/or modify +- it under the terms of the GNU General Public License as published by +- the Free Software Foundation, either version 3 of the License, or +- (at your option) any later version. +- +- This program is distributed in the hope that it will be useful, +- but WITHOUT ANY WARRANTY; without even the implied warranty of +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- GNU General Public License for more details. +- +- You should have received a copy of the GNU General Public License +- along with this program. If not, see . +- +-Also add information on how to contact you by electronic and paper mail. +- +- If the program does terminal interaction, make it output a short +-notice like this when it starts in an interactive mode: +- +- Copyright (C) +- This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. +- This is free software, and you are welcome to redistribute it +- under certain conditions; type `show c' for details. +- +-The hypothetical commands `show w' and `show c' should show the appropriate +-parts of the General Public License. Of course, your program's commands +-might be different; for a GUI interface, you would use an "about box". +- +- You should also get your employer (if you work as a programmer) or school, +-if any, to sign a "copyright disclaimer" for the program, if necessary. +-For more information on this, and how to apply and follow the GNU GPL, see +-. +- +- The GNU General Public License does not permit incorporating your program +-into proprietary programs. If your program is a subroutine library, you +-may consider it more useful to permit linking proprietary applications with +-the library. If this is what you want to do, use the GNU Lesser General +-Public License instead of this License. But first, please read +-. +- +diff -urNr keepassxc-2.6.4-orig/LICENSE.LGPL-2.1 keepassxc-2.6.4-patched/LICENSE.LGPL-2.1 +--- keepassxc-2.6.4-orig/LICENSE.LGPL-2.1 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/LICENSE.LGPL-2.1 1970-01-01 01:00:00.000000000 +0100 +@@ -1,502 +0,0 @@ +- GNU LESSER GENERAL PUBLIC LICENSE +- Version 2.1, February 1999 +- +- Copyright (C) 1991, 1999 Free Software Foundation, Inc. +- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +- Everyone is permitted to copy and distribute verbatim copies +- of this license document, but changing it is not allowed. +- +-[This is the first released version of the Lesser GPL. It also counts +- as the successor of the GNU Library Public License, version 2, hence +- the version number 2.1.] +- +- Preamble +- +- The licenses for most software are designed to take away your +-freedom to share and change it. By contrast, the GNU General Public +-Licenses are intended to guarantee your freedom to share and change +-free software--to make sure the software is free for all its users. +- +- This license, the Lesser General Public License, applies to some +-specially designated software packages--typically libraries--of the +-Free Software Foundation and other authors who decide to use it. You +-can use it too, but we suggest you first think carefully about whether +-this license or the ordinary General Public License is the better +-strategy to use in any particular case, based on the explanations below. +- +- When we speak of free software, we are referring to freedom of use, +-not price. Our General Public Licenses are designed to make sure that +-you have the freedom to distribute copies of free software (and charge +-for this service if you wish); that you receive source code or can get +-it if you want it; that you can change the software and use pieces of +-it in new free programs; and that you are informed that you can do +-these things. +- +- To protect your rights, we need to make restrictions that forbid +-distributors to deny you these rights or to ask you to surrender these +-rights. These restrictions translate to certain responsibilities for +-you if you distribute copies of the library or if you modify it. +- +- For example, if you distribute copies of the library, whether gratis +-or for a fee, you must give the recipients all the rights that we gave +-you. You must make sure that they, too, receive or can get the source +-code. If you link other code with the library, you must provide +-complete object files to the recipients, so that they can relink them +-with the library after making changes to the library and recompiling +-it. And you must show them these terms so they know their rights. +- +- We protect your rights with a two-step method: (1) we copyright the +-library, and (2) we offer you this license, which gives you legal +-permission to copy, distribute and/or modify the library. +- +- To protect each distributor, we want to make it very clear that +-there is no warranty for the free library. Also, if the library is +-modified by someone else and passed on, the recipients should know +-that what they have is not the original version, so that the original +-author's reputation will not be affected by problems that might be +-introduced by others. +- +- Finally, software patents pose a constant threat to the existence of +-any free program. We wish to make sure that a company cannot +-effectively restrict the users of a free program by obtaining a +-restrictive license from a patent holder. Therefore, we insist that +-any patent license obtained for a version of the library must be +-consistent with the full freedom of use specified in this license. +- +- Most GNU software, including some libraries, is covered by the +-ordinary GNU General Public License. This license, the GNU Lesser +-General Public License, applies to certain designated libraries, and +-is quite different from the ordinary General Public License. We use +-this license for certain libraries in order to permit linking those +-libraries into non-free programs. +- +- When a program is linked with a library, whether statically or using +-a shared library, the combination of the two is legally speaking a +-combined work, a derivative of the original library. The ordinary +-General Public License therefore permits such linking only if the +-entire combination fits its criteria of freedom. The Lesser General +-Public License permits more lax criteria for linking other code with +-the library. +- +- We call this license the "Lesser" General Public License because it +-does Less to protect the user's freedom than the ordinary General +-Public License. It also provides other free software developers Less +-of an advantage over competing non-free programs. These disadvantages +-are the reason we use the ordinary General Public License for many +-libraries. However, the Lesser license provides advantages in certain +-special circumstances. +- +- For example, on rare occasions, there may be a special need to +-encourage the widest possible use of a certain library, so that it becomes +-a de-facto standard. To achieve this, non-free programs must be +-allowed to use the library. A more frequent case is that a free +-library does the same job as widely used non-free libraries. In this +-case, there is little to gain by limiting the free library to free +-software only, so we use the Lesser General Public License. +- +- In other cases, permission to use a particular library in non-free +-programs enables a greater number of people to use a large body of +-free software. For example, permission to use the GNU C Library in +-non-free programs enables many more people to use the whole GNU +-operating system, as well as its variant, the GNU/Linux operating +-system. +- +- Although the Lesser General Public License is Less protective of the +-users' freedom, it does ensure that the user of a program that is +-linked with the Library has the freedom and the wherewithal to run +-that program using a modified version of the Library. +- +- The precise terms and conditions for copying, distribution and +-modification follow. Pay close attention to the difference between a +-"work based on the library" and a "work that uses the library". The +-former contains code derived from the library, whereas the latter must +-be combined with the library in order to run. +- +- GNU LESSER GENERAL PUBLIC LICENSE +- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION +- +- 0. This License Agreement applies to any software library or other +-program which contains a notice placed by the copyright holder or +-other authorized party saying it may be distributed under the terms of +-this Lesser General Public License (also called "this License"). +-Each licensee is addressed as "you". +- +- A "library" means a collection of software functions and/or data +-prepared so as to be conveniently linked with application programs +-(which use some of those functions and data) to form executables. +- +- The "Library", below, refers to any such software library or work +-which has been distributed under these terms. A "work based on the +-Library" means either the Library or any derivative work under +-copyright law: that is to say, a work containing the Library or a +-portion of it, either verbatim or with modifications and/or translated +-straightforwardly into another language. (Hereinafter, translation is +-included without limitation in the term "modification".) +- +- "Source code" for a work means the preferred form of the work for +-making modifications to it. For a library, complete source code means +-all the source code for all modules it contains, plus any associated +-interface definition files, plus the scripts used to control compilation +-and installation of the library. +- +- Activities other than copying, distribution and modification are not +-covered by this License; they are outside its scope. The act of +-running a program using the Library is not restricted, and output from +-such a program is covered only if its contents constitute a work based +-on the Library (independent of the use of the Library in a tool for +-writing it). Whether that is true depends on what the Library does +-and what the program that uses the Library does. +- +- 1. You may copy and distribute verbatim copies of the Library's +-complete source code as you receive it, in any medium, provided that +-you conspicuously and appropriately publish on each copy an +-appropriate copyright notice and disclaimer of warranty; keep intact +-all the notices that refer to this License and to the absence of any +-warranty; and distribute a copy of this License along with the +-Library. +- +- You may charge a fee for the physical act of transferring a copy, +-and you may at your option offer warranty protection in exchange for a +-fee. +- +- 2. You may modify your copy or copies of the Library or any portion +-of it, thus forming a work based on the Library, and copy and +-distribute such modifications or work under the terms of Section 1 +-above, provided that you also meet all of these conditions: +- +- a) The modified work must itself be a software library. +- +- b) You must cause the files modified to carry prominent notices +- stating that you changed the files and the date of any change. +- +- c) You must cause the whole of the work to be licensed at no +- charge to all third parties under the terms of this License. +- +- d) If a facility in the modified Library refers to a function or a +- table of data to be supplied by an application program that uses +- the facility, other than as an argument passed when the facility +- is invoked, then you must make a good faith effort to ensure that, +- in the event an application does not supply such function or +- table, the facility still operates, and performs whatever part of +- its purpose remains meaningful. +- +- (For example, a function in a library to compute square roots has +- a purpose that is entirely well-defined independent of the +- application. Therefore, Subsection 2d requires that any +- application-supplied function or table used by this function must +- be optional: if the application does not supply it, the square +- root function must still compute square roots.) +- +-These requirements apply to the modified work as a whole. If +-identifiable sections of that work are not derived from the Library, +-and can be reasonably considered independent and separate works in +-themselves, then this License, and its terms, do not apply to those +-sections when you distribute them as separate works. But when you +-distribute the same sections as part of a whole which is a work based +-on the Library, the distribution of the whole must be on the terms of +-this License, whose permissions for other licensees extend to the +-entire whole, and thus to each and every part regardless of who wrote +-it. +- +-Thus, it is not the intent of this section to claim rights or contest +-your rights to work written entirely by you; rather, the intent is to +-exercise the right to control the distribution of derivative or +-collective works based on the Library. +- +-In addition, mere aggregation of another work not based on the Library +-with the Library (or with a work based on the Library) on a volume of +-a storage or distribution medium does not bring the other work under +-the scope of this License. +- +- 3. You may opt to apply the terms of the ordinary GNU General Public +-License instead of this License to a given copy of the Library. To do +-this, you must alter all the notices that refer to this License, so +-that they refer to the ordinary GNU General Public License, version 2, +-instead of to this License. (If a newer version than version 2 of the +-ordinary GNU General Public License has appeared, then you can specify +-that version instead if you wish.) Do not make any other change in +-these notices. +- +- Once this change is made in a given copy, it is irreversible for +-that copy, so the ordinary GNU General Public License applies to all +-subsequent copies and derivative works made from that copy. +- +- This option is useful when you wish to copy part of the code of +-the Library into a program that is not a library. +- +- 4. You may copy and distribute the Library (or a portion or +-derivative of it, under Section 2) in object code or executable form +-under the terms of Sections 1 and 2 above provided that you accompany +-it with the complete corresponding machine-readable source code, which +-must be distributed under the terms of Sections 1 and 2 above on a +-medium customarily used for software interchange. +- +- If distribution of object code is made by offering access to copy +-from a designated place, then offering equivalent access to copy the +-source code from the same place satisfies the requirement to +-distribute the source code, even though third parties are not +-compelled to copy the source along with the object code. +- +- 5. A program that contains no derivative of any portion of the +-Library, but is designed to work with the Library by being compiled or +-linked with it, is called a "work that uses the Library". Such a +-work, in isolation, is not a derivative work of the Library, and +-therefore falls outside the scope of this License. +- +- However, linking a "work that uses the Library" with the Library +-creates an executable that is a derivative of the Library (because it +-contains portions of the Library), rather than a "work that uses the +-library". The executable is therefore covered by this License. +-Section 6 states terms for distribution of such executables. +- +- When a "work that uses the Library" uses material from a header file +-that is part of the Library, the object code for the work may be a +-derivative work of the Library even though the source code is not. +-Whether this is true is especially significant if the work can be +-linked without the Library, or if the work is itself a library. The +-threshold for this to be true is not precisely defined by law. +- +- If such an object file uses only numerical parameters, data +-structure layouts and accessors, and small macros and small inline +-functions (ten lines or less in length), then the use of the object +-file is unrestricted, regardless of whether it is legally a derivative +-work. (Executables containing this object code plus portions of the +-Library will still fall under Section 6.) +- +- Otherwise, if the work is a derivative of the Library, you may +-distribute the object code for the work under the terms of Section 6. +-Any executables containing that work also fall under Section 6, +-whether or not they are linked directly with the Library itself. +- +- 6. As an exception to the Sections above, you may also combine or +-link a "work that uses the Library" with the Library to produce a +-work containing portions of the Library, and distribute that work +-under terms of your choice, provided that the terms permit +-modification of the work for the customer's own use and reverse +-engineering for debugging such modifications. +- +- You must give prominent notice with each copy of the work that the +-Library is used in it and that the Library and its use are covered by +-this License. You must supply a copy of this License. If the work +-during execution displays copyright notices, you must include the +-copyright notice for the Library among them, as well as a reference +-directing the user to the copy of this License. Also, you must do one +-of these things: +- +- a) Accompany the work with the complete corresponding +- machine-readable source code for the Library including whatever +- changes were used in the work (which must be distributed under +- Sections 1 and 2 above); and, if the work is an executable linked +- with the Library, with the complete machine-readable "work that +- uses the Library", as object code and/or source code, so that the +- user can modify the Library and then relink to produce a modified +- executable containing the modified Library. (It is understood +- that the user who changes the contents of definitions files in the +- Library will not necessarily be able to recompile the application +- to use the modified definitions.) +- +- b) Use a suitable shared library mechanism for linking with the +- Library. A suitable mechanism is one that (1) uses at run time a +- copy of the library already present on the user's computer system, +- rather than copying library functions into the executable, and (2) +- will operate properly with a modified version of the library, if +- the user installs one, as long as the modified version is +- interface-compatible with the version that the work was made with. +- +- c) Accompany the work with a written offer, valid for at +- least three years, to give the same user the materials +- specified in Subsection 6a, above, for a charge no more +- than the cost of performing this distribution. +- +- d) If distribution of the work is made by offering access to copy +- from a designated place, offer equivalent access to copy the above +- specified materials from the same place. +- +- e) Verify that the user has already received a copy of these +- materials or that you have already sent this user a copy. +- +- For an executable, the required form of the "work that uses the +-Library" must include any data and utility programs needed for +-reproducing the executable from it. However, as a special exception, +-the materials to be distributed need not include anything that is +-normally distributed (in either source or binary form) with the major +-components (compiler, kernel, and so on) of the operating system on +-which the executable runs, unless that component itself accompanies +-the executable. +- +- It may happen that this requirement contradicts the license +-restrictions of other proprietary libraries that do not normally +-accompany the operating system. Such a contradiction means you cannot +-use both them and the Library together in an executable that you +-distribute. +- +- 7. You may place library facilities that are a work based on the +-Library side-by-side in a single library together with other library +-facilities not covered by this License, and distribute such a combined +-library, provided that the separate distribution of the work based on +-the Library and of the other library facilities is otherwise +-permitted, and provided that you do these two things: +- +- a) Accompany the combined library with a copy of the same work +- based on the Library, uncombined with any other library +- facilities. This must be distributed under the terms of the +- Sections above. +- +- b) Give prominent notice with the combined library of the fact +- that part of it is a work based on the Library, and explaining +- where to find the accompanying uncombined form of the same work. +- +- 8. You may not copy, modify, sublicense, link with, or distribute +-the Library except as expressly provided under this License. Any +-attempt otherwise to copy, modify, sublicense, link with, or +-distribute the Library is void, and will automatically terminate your +-rights under this License. However, parties who have received copies, +-or rights, from you under this License will not have their licenses +-terminated so long as such parties remain in full compliance. +- +- 9. You are not required to accept this License, since you have not +-signed it. However, nothing else grants you permission to modify or +-distribute the Library or its derivative works. These actions are +-prohibited by law if you do not accept this License. Therefore, by +-modifying or distributing the Library (or any work based on the +-Library), you indicate your acceptance of this License to do so, and +-all its terms and conditions for copying, distributing or modifying +-the Library or works based on it. +- +- 10. Each time you redistribute the Library (or any work based on the +-Library), the recipient automatically receives a license from the +-original licensor to copy, distribute, link with or modify the Library +-subject to these terms and conditions. You may not impose any further +-restrictions on the recipients' exercise of the rights granted herein. +-You are not responsible for enforcing compliance by third parties with +-this License. +- +- 11. If, as a consequence of a court judgment or allegation of patent +-infringement or for any other reason (not limited to patent issues), +-conditions are imposed on you (whether by court order, agreement or +-otherwise) that contradict the conditions of this License, they do not +-excuse you from the conditions of this License. If you cannot +-distribute so as to satisfy simultaneously your obligations under this +-License and any other pertinent obligations, then as a consequence you +-may not distribute the Library at all. For example, if a patent +-license would not permit royalty-free redistribution of the Library by +-all those who receive copies directly or indirectly through you, then +-the only way you could satisfy both it and this License would be to +-refrain entirely from distribution of the Library. +- +-If any portion of this section is held invalid or unenforceable under any +-particular circumstance, the balance of the section is intended to apply, +-and the section as a whole is intended to apply in other circumstances. +- +-It is not the purpose of this section to induce you to infringe any +-patents or other property right claims or to contest validity of any +-such claims; this section has the sole purpose of protecting the +-integrity of the free software distribution system which is +-implemented by public license practices. Many people have made +-generous contributions to the wide range of software distributed +-through that system in reliance on consistent application of that +-system; it is up to the author/donor to decide if he or she is willing +-to distribute software through any other system and a licensee cannot +-impose that choice. +- +-This section is intended to make thoroughly clear what is believed to +-be a consequence of the rest of this License. +- +- 12. If the distribution and/or use of the Library is restricted in +-certain countries either by patents or by copyrighted interfaces, the +-original copyright holder who places the Library under this License may add +-an explicit geographical distribution limitation excluding those countries, +-so that distribution is permitted only in or among countries not thus +-excluded. In such case, this License incorporates the limitation as if +-written in the body of this License. +- +- 13. The Free Software Foundation may publish revised and/or new +-versions of the Lesser General Public License from time to time. +-Such new versions will be similar in spirit to the present version, +-but may differ in detail to address new problems or concerns. +- +-Each version is given a distinguishing version number. If the Library +-specifies a version number of this License which applies to it and +-"any later version", you have the option of following the terms and +-conditions either of that version or of any later version published by +-the Free Software Foundation. If the Library does not specify a +-license version number, you may choose any version ever published by +-the Free Software Foundation. +- +- 14. If you wish to incorporate parts of the Library into other free +-programs whose distribution conditions are incompatible with these, +-write to the author to ask for permission. For software which is +-copyrighted by the Free Software Foundation, write to the Free +-Software Foundation; we sometimes make exceptions for this. Our +-decision will be guided by the two goals of preserving the free status +-of all derivatives of our free software and of promoting the sharing +-and reuse of software generally. +- +- NO WARRANTY +- +- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. +- +- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +-DAMAGES. +- +- END OF TERMS AND CONDITIONS +- +- How to Apply These Terms to Your New Libraries +- +- If you develop a new library, and you want it to be of the greatest +-possible use to the public, we recommend making it free software that +-everyone can redistribute and change. You can do so by permitting +-redistribution under these terms (or, alternatively, under the terms of the +-ordinary General Public License). +- +- To apply these terms, attach the following notices to the library. It is +-safest to attach them to the start of each source file to most effectively +-convey the exclusion of warranty; and each file should have at least the +-"copyright" line and a pointer to where the full notice is found. +- +- +- Copyright (C) +- +- This library is free software; you can redistribute it and/or +- modify it under the terms of the GNU Lesser General Public +- License as published by the Free Software Foundation; either +- version 2.1 of the License, or (at your option) any later version. +- +- This library is distributed in the hope that it will be useful, +- but WITHOUT ANY WARRANTY; without even the implied warranty of +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +- Lesser General Public License for more details. +- +- You should have received a copy of the GNU Lesser General Public +- License along with this library; if not, write to the Free Software +- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +- +-Also add information on how to contact you by electronic and paper mail. +- +-You should also get your employer (if you work as a programmer) or your +-school, if any, to sign a "copyright disclaimer" for the library, if +-necessary. Here is a sample; alter the names: +- +- Yoyodyne, Inc., hereby disclaims all copyright interest in the +- library `Frob' (a library for tweaking knobs) written by James Random Hacker. +- +- , 1 April 1990 +- Ty Coon, President of Vice +- +-That's all there is to it! +diff -urNr keepassxc-2.6.4-orig/LICENSE.LGPL-3 keepassxc-2.6.4-patched/LICENSE.LGPL-3 +--- keepassxc-2.6.4-orig/LICENSE.LGPL-3 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/LICENSE.LGPL-3 1970-01-01 01:00:00.000000000 +0100 +@@ -1,165 +0,0 @@ +- GNU LESSER GENERAL PUBLIC LICENSE +- Version 3, 29 June 2007 +- +- Copyright (C) 2007 Free Software Foundation, Inc. +- Everyone is permitted to copy and distribute verbatim copies +- of this license document, but changing it is not allowed. +- +- +- This version of the GNU Lesser General Public License incorporates +-the terms and conditions of version 3 of the GNU General Public +-License, supplemented by the additional permissions listed below. +- +- 0. Additional Definitions. +- +- As used herein, "this License" refers to version 3 of the GNU Lesser +-General Public License, and the "GNU GPL" refers to version 3 of the GNU +-General Public License. +- +- "The Library" refers to a covered work governed by this License, +-other than an Application or a Combined Work as defined below. +- +- An "Application" is any work that makes use of an interface provided +-by the Library, but which is not otherwise based on the Library. +-Defining a subclass of a class defined by the Library is deemed a mode +-of using an interface provided by the Library. +- +- A "Combined Work" is a work produced by combining or linking an +-Application with the Library. The particular version of the Library +-with which the Combined Work was made is also called the "Linked +-Version". +- +- The "Minimal Corresponding Source" for a Combined Work means the +-Corresponding Source for the Combined Work, excluding any source code +-for portions of the Combined Work that, considered in isolation, are +-based on the Application, and not on the Linked Version. +- +- The "Corresponding Application Code" for a Combined Work means the +-object code and/or source code for the Application, including any data +-and utility programs needed for reproducing the Combined Work from the +-Application, but excluding the System Libraries of the Combined Work. +- +- 1. Exception to Section 3 of the GNU GPL. +- +- You may convey a covered work under sections 3 and 4 of this License +-without being bound by section 3 of the GNU GPL. +- +- 2. Conveying Modified Versions. +- +- If you modify a copy of the Library, and, in your modifications, a +-facility refers to a function or data to be supplied by an Application +-that uses the facility (other than as an argument passed when the +-facility is invoked), then you may convey a copy of the modified +-version: +- +- a) under this License, provided that you make a good faith effort to +- ensure that, in the event an Application does not supply the +- function or data, the facility still operates, and performs +- whatever part of its purpose remains meaningful, or +- +- b) under the GNU GPL, with none of the additional permissions of +- this License applicable to that copy. +- +- 3. Object Code Incorporating Material from Library Header Files. +- +- The object code form of an Application may incorporate material from +-a header file that is part of the Library. You may convey such object +-code under terms of your choice, provided that, if the incorporated +-material is not limited to numerical parameters, data structure +-layouts and accessors, or small macros, inline functions and templates +-(ten or fewer lines in length), you do both of the following: +- +- a) Give prominent notice with each copy of the object code that the +- Library is used in it and that the Library and its use are +- covered by this License. +- +- b) Accompany the object code with a copy of the GNU GPL and this license +- document. +- +- 4. Combined Works. +- +- You may convey a Combined Work under terms of your choice that, +-taken together, effectively do not restrict modification of the +-portions of the Library contained in the Combined Work and reverse +-engineering for debugging such modifications, if you also do each of +-the following: +- +- a) Give prominent notice with each copy of the Combined Work that +- the Library is used in it and that the Library and its use are +- covered by this License. +- +- b) Accompany the Combined Work with a copy of the GNU GPL and this license +- document. +- +- c) For a Combined Work that displays copyright notices during +- execution, include the copyright notice for the Library among +- these notices, as well as a reference directing the user to the +- copies of the GNU GPL and this license document. +- +- d) Do one of the following: +- +- 0) Convey the Minimal Corresponding Source under the terms of this +- License, and the Corresponding Application Code in a form +- suitable for, and under terms that permit, the user to +- recombine or relink the Application with a modified version of +- the Linked Version to produce a modified Combined Work, in the +- manner specified by section 6 of the GNU GPL for conveying +- Corresponding Source. +- +- 1) Use a suitable shared library mechanism for linking with the +- Library. A suitable mechanism is one that (a) uses at run time +- a copy of the Library already present on the user's computer +- system, and (b) will operate properly with a modified version +- of the Library that is interface-compatible with the Linked +- Version. +- +- e) Provide Installation Information, but only if you would otherwise +- be required to provide such information under section 6 of the +- GNU GPL, and only to the extent that such information is +- necessary to install and execute a modified version of the +- Combined Work produced by recombining or relinking the +- Application with a modified version of the Linked Version. (If +- you use option 4d0, the Installation Information must accompany +- the Minimal Corresponding Source and Corresponding Application +- Code. If you use option 4d1, you must provide the Installation +- Information in the manner specified by section 6 of the GNU GPL +- for conveying Corresponding Source.) +- +- 5. Combined Libraries. +- +- You may place library facilities that are a work based on the +-Library side by side in a single library together with other library +-facilities that are not Applications and are not covered by this +-License, and convey such a combined library under terms of your +-choice, if you do both of the following: +- +- a) Accompany the combined library with a copy of the same work based +- on the Library, uncombined with any other library facilities, +- conveyed under the terms of this License. +- +- b) Give prominent notice with the combined library that part of it +- is a work based on the Library, and explaining where to find the +- accompanying uncombined form of the same work. +- +- 6. Revised Versions of the GNU Lesser General Public License. +- +- The Free Software Foundation may publish revised and/or new versions +-of the GNU Lesser General Public License from time to time. Such new +-versions will be similar in spirit to the present version, but may +-differ in detail to address new problems or concerns. +- +- Each version is given a distinguishing version number. If the +-Library as you received it specifies that a certain numbered version +-of the GNU Lesser General Public License "or any later version" +-applies to it, you have the option of following the terms and +-conditions either of that published version or of any later version +-published by the Free Software Foundation. If the Library as you +-received it does not specify a version number of the GNU Lesser +-General Public License, you may choose any version of the GNU Lesser +-General Public License ever published by the Free Software Foundation. +- +- If the Library as you received it specifies that a proxy can decide +-whether future versions of the GNU Lesser General Public License shall +-apply, that proxy's public statement of acceptance of any version is +-permanent authorization for you to choose that version for the +-Library. +diff -urNr keepassxc-2.6.4-orig/LICENSE.MIT keepassxc-2.6.4-patched/LICENSE.MIT +--- keepassxc-2.6.4-orig/LICENSE.MIT 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/LICENSE.MIT 1970-01-01 01:00:00.000000000 +0100 +@@ -1,19 +0,0 @@ +-The MIT License (MIT) +- +-Permission is hereby granted, free of charge, to any person obtaining a copy +-of this software and associated documentation files (the "Software"), to deal +-in the Software without restriction, including without limitation the rights +-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +-copies of the Software, and to permit persons to whom the Software is +-furnished to do so, subject to the following conditions: +- +-The above copyright notice and this permission notice shall be included in all +-copies or substantial portions of the Software. +- +-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +-SOFTWARE. +diff -urNr keepassxc-2.6.4-orig/LICENSE.NOKIA-LGPL-EXCEPTION keepassxc-2.6.4-patched/LICENSE.NOKIA-LGPL-EXCEPTION +--- keepassxc-2.6.4-orig/LICENSE.NOKIA-LGPL-EXCEPTION 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/LICENSE.NOKIA-LGPL-EXCEPTION 1970-01-01 01:00:00.000000000 +0100 +@@ -1,23 +0,0 @@ +-Nokia Qt LGPL Exception version 1.1 +- +-As an additional permission to the GNU Lesser General Public License +-version 2.1, the object code form of a "work that uses the Library" +-may incorporate material from a header file that is part of the +-Library. You may distribute such object code under terms of your +-choice, provided that: +-(i) the header files of the Library have not been modified; and +-(ii) the incorporated material is limited to numerical parameters, +-data structure layouts, accessors, macros, inline functions and +-templates; and +-(iii) you comply with the terms of Section 6 of the GNU +-Lesser General Public License version 2.1. +- +-Moreover, you may apply this exception to a modified version of the +-Library, provided that such modification does not involve copying +-material from the Library into the modified Library?s header files +-unless such material is limited to (i) numerical parameters; (ii) data +-structure layouts; (iii) accessors; and (iv) small macros, templates +-and inline functions of five lines or less in length. +- +-Furthermore, you are not required to apply this additional permission +-to a modified version of the Library. +diff -urNr keepassxc-2.6.4-orig/LICENSE.OFL keepassxc-2.6.4-patched/LICENSE.OFL +--- keepassxc-2.6.4-orig/LICENSE.OFL 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/LICENSE.OFL 1970-01-01 01:00:00.000000000 +0100 +@@ -1,96 +0,0 @@ +-Copyright (c) 2014, Austin Andrews (http://materialdesignicons.com/), +-with Reserved Font Name Material Design Icons. +-Copyright (c) 2014, Google (http://www.google.com/design/) +-uses the license at https://github.com/google/material-design-icons/blob/master/LICENSE +- +-This Font Software is licensed under the SIL Open Font License, Version 1.1. +-This license is copied below, and is also available with a FAQ at: +-http://scripts.sil.org/OFL +- +- +------------------------------------------------------------ +-SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +------------------------------------------------------------ +- +-PREAMBLE +-The goals of the Open Font License (OFL) are to stimulate worldwide +-development of collaborative font projects, to support the font creation +-efforts of academic and linguistic communities, and to provide a free and +-open framework in which fonts may be shared and improved in partnership +-with others. +- +-The OFL allows the licensed fonts to be used, studied, modified and +-redistributed freely as long as they are not sold by themselves. The +-fonts, including any derivative works, can be bundled, embedded, +-redistributed and/or sold with any software provided that any reserved +-names are not used by derivative works. The fonts and derivatives, +-however, cannot be released under any other type of license. The +-requirement for fonts to remain under this license does not apply +-to any document created using the fonts or their derivatives. +- +-DEFINITIONS +-"Font Software" refers to the set of files released by the Copyright +-Holder(s) under this license and clearly marked as such. This may +-include source files, build scripts and documentation. +- +-"Reserved Font Name" refers to any names specified as such after the +-copyright statement(s). +- +-"Original Version" refers to the collection of Font Software components as +-distributed by the Copyright Holder(s). +- +-"Modified Version" refers to any derivative made by adding to, deleting, +-or substituting -- in part or in whole -- any of the components of the +-Original Version, by changing formats or by porting the Font Software to a +-new environment. +- +-"Author" refers to any designer, engineer, programmer, technical +-writer or other person who contributed to the Font Software. +- +-PERMISSION & CONDITIONS +-Permission is hereby granted, free of charge, to any person obtaining +-a copy of the Font Software, to use, study, copy, merge, embed, modify, +-redistribute, and sell modified and unmodified copies of the Font +-Software, subject to the following conditions: +- +-1) Neither the Font Software nor any of its individual components, +-in Original or Modified Versions, may be sold by itself. +- +-2) Original or Modified Versions of the Font Software may be bundled, +-redistributed and/or sold with any software, provided that each copy +-contains the above copyright notice and this license. These can be +-included either as stand-alone text files, human-readable headers or +-in the appropriate machine-readable metadata fields within text or +-binary files as long as those fields can be easily viewed by the user. +- +-3) No Modified Version of the Font Software may use the Reserved Font +-Name(s) unless explicit written permission is granted by the corresponding +-Copyright Holder. This restriction only applies to the primary font name as +-presented to the users. +- +-4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +-Software shall not be used to promote, endorse or advertise any +-Modified Version, except to acknowledge the contribution(s) of the +-Copyright Holder(s) and the Author(s) or with their explicit written +-permission. +- +-5) The Font Software, modified or unmodified, in part or in whole, +-must be distributed entirely under this license, and must not be +-distributed under any other license. The requirement for fonts to +-remain under this license does not apply to any document created +-using the Font Software. +- +-TERMINATION +-This license becomes null and void if any of the above conditions are +-not met. +- +-DISCLAIMER +-THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +-OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +-COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +-INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +-DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +-FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +-OTHER DEALINGS IN THE FONT SOFTWARE. +diff -urNr keepassxc-2.6.4-orig/README.md keepassxc-2.6.4-patched/README.md +--- keepassxc-2.6.4-orig/README.md 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/README.md 1970-01-01 01:00:00.000000000 +0100 +@@ -1,54 +0,0 @@ +-# KeePassXC +-[![TeamCity Build Status](https://ci.keepassxc.org/app/rest/builds/buildType:\(project:KeepassXC\)/statusIcon)](https://ci.keepassxc.org/?guest=1) +-[![codecov](https://codecov.io/gh/keepassxreboot/keepassxc/branch/develop/graph/badge.svg)](https://codecov.io/gh/keepassxreboot/keepassxc) +-[![GitHub release](https://img.shields.io/github/release/keepassxreboot/keepassxc)](https://github.com/keepassxreboot/keepassxc/releases/) +- +-[KeePassXC](https://keepassxc.org) is a modern, secure, and open-source password manager that stores and manages your most sensitive information. You can run KeePassXC on Windows, macOS, and Linux systems. KeePassXC is for people with extremely high demands of secure personal data management. It saves many different types of information, such as usernames, passwords, URLs, attachments, and notes in an offline, encrypted file that can be stored in any location, including private and public cloud solutions. For easy identification and management, user-defined titles and icons can be specified for entries. In addition, entries are sorted in customizable groups. An integrated search function allows you to use advanced patterns to easily find any entry in your database. A customizable, fast, and easy-to-use password generator utility allows you to create passwords with any combination of characters or easy to remember passphrases. +- +-## Quick Start +-The [QuickStart Guide](https://keepassxc.org/docs/KeePassXC_GettingStarted.html) gets you started using KeePassXC on your Windows, macOS, or Linux computer using pre-compiled binaries from the [downloads page](https://keepassxc.org/download). Additionally, individual Linux distributions may ship their own versions, so please check your distribution's package list to see if KeePassXC is available. Detailed documentation is available in the [User Guide](https://keepassxc.org/docs/KeePassXC_UserGuide.html). +- +-## Features List +-KeePassXC has numerous features for novice and power users alike. Our goal is to create an application that can be used by anyone while still offering advanced features to those that need them. +- +-### Basic +-* Create, open, and save databases in the KDBX format (KeePass compatible to KDBX4 and KDBX3) +-* Store sensitive information in entries that are organized by groups +-* Search for entries +-* Password generator +-* Auto-Type passwords into applications +-* Browser integration with Google Chrome, Mozilla Firefox, Microsoft Edge, Chromium, Vivaldi, Brave, and Tor-Browser +-* Entry icon download +-* Import databases from CSV, 1Password, and KeePass1 formats +- +-### Advanced +-* Database reports (password health, HIBP, and statistics) +-* Database export to CSV and HTML formats +-* TOTP storage and generation +-* Field references between entries +-* File attachments and custom attributes +-* Entry history and data restoration +-* YubiKey/OnlyKey challenge-response support +-* Command line interface (keepassxc-cli) +-* Auto-Open databases +-* KeeShare shared databases (import, export, and synchronize) +-* SSH Agent +-* FreeDesktop.org Secret Service (replace Gnome keyring, etc.) +-* Additional encryption choices: Twofish and ChaCha20 +- +-For a full list of changes, read the [CHANGELOG](CHANGELOG.md) document. \ +-For a full list of keyboard shortcuts, see [KeyboardShortcuts.adoc](./docs/topics/KeyboardShortcuts.adoc) +- +-## Building KeePassXC +- +-Detailed instructions are available in the [Build and Install](./INSTALL.md) page and in the [Wiki](https://github.com/keepassxreboot/keepassxc/wiki/Building-KeePassXC). +- +-## Contributing +- +-We are always looking for suggestions on how to improve KeePassXC. If you find any bugs or have an idea for a new feature, please let us know by opening a report in the [issue tracker](https://github.com/keepassxreboot/keepassxc/issues) on GitHub or join us on IRC in [freenode](https://webchat.freenode.net/) channels #keepassxc and #keepassxc-dev. +- +-You may directly contribute your own code by submitting a pull request. Please read the [CONTRIBUTING](.github/CONTRIBUTING.md) document for further information. +- +-## License +- +-KeePassXC code is licensed under GPL-2 or GPL-3. Additional licensing for third-party files is detailed in [COPYING](./COPYING). +diff -urNr keepassxc-2.6.4-orig/release-tool keepassxc-2.6.4-patched/release-tool +--- keepassxc-2.6.4-orig/release-tool 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/release-tool 1970-01-01 01:00:00.000000000 +0100 +@@ -1,1349 +0,0 @@ +-#!/usr/bin/env bash +-# +-# KeePassXC Release Preparation Helper +-# Copyright (C) 2017 KeePassXC team +-# +-# This program is free software: you can redistribute it and/or modify +-# it under the terms of the GNU General Public License as published by +-# the Free Software Foundation, either version 2 or (at your option) +-# version 3 of the License. +-# +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY; without even the implied warranty of +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-# GNU General Public License for more details. +-# +-# You should have received a copy of the GNU General Public License +-# along with this program. If not, see . +- +-printf "\e[1m\e[32mKeePassXC\e[0m Release Preparation Helper\n" +-printf "Copyright (C) 2017 KeePassXC Team \n\n" +- +- +-# ----------------------------------------------------------------------- +-# global default values +-# ----------------------------------------------------------------------- +-RELEASE_NAME="" +-APP_NAME="KeePassXC" +-SRC_DIR="." +-GPG_KEY="CFB4C2166397D0D2" +-GPG_GIT_KEY="" +-OUTPUT_DIR="release" +-SOURCE_BRANCH="" +-TARGET_BRANCH="master" +-TAG_NAME="" +-DOCKER_IMAGE="" +-DOCKER_CONTAINER_NAME="keepassxc-build-container" +-CMAKE_OPTIONS="" +-CPACK_GENERATORS="WIX;ZIP" +-COMPILER="g++" +-MAKE_OPTIONS="-j8" +-BUILD_PLUGINS="all" +-INSTALL_PREFIX="/usr/local" +-ORIG_BRANCH="" +-ORIG_CWD="$(pwd)" +-MACOSX_DEPLOYMENT_TARGET=10.12 +-GREP="grep" +-TIMESTAMP_SERVER="http://timestamp.sectigo.com" +- +-# ----------------------------------------------------------------------- +-# helper functions +-# ----------------------------------------------------------------------- +-printUsage() { +- local cmd +- if [ "" == "$1" ] || [ "help" == "$1" ]; then +- cmd="COMMAND" +- elif [ "check" == "$1" ] || [ "merge" == "$1" ] || [ "build" == "$1" ] \ +- || [ "gpgsign" == "$1" ] || [ "appsign" == "$1" ] || [ "appimage" == "$1" ]; then +- cmd="$1" +- else +- logError "Unknown command: '$1'\n" +- cmd="COMMAND" +- fi +- +- printf "\e[1mUsage:\e[0m $(basename $0) $cmd [options]\n" +- +- if [ "COMMAND" == "$cmd" ]; then +- cat << EOF +- +-Commands: +- check Perform a dry-run check, nothing is changed +- merge Merge release branch into main branch and create release tags +- build Build and package binary release from sources +- gpgsign Sign previously compiled release packages with GPG +- appsign Sign binaries with code signing certificates on Windows and macOS +- help Show help for the given command +-EOF +- elif [ "merge" == "$cmd" ]; then +- cat << EOF +- +-Merge release branch into main branch and create release tags +- +-Options: +- -v, --version Release version number or name (required) +- -a, --app-name Application name (default: '${APP_NAME}') +- -s, --source-dir Source directory (default: '${SRC_DIR}') +- -k, --key GPG key used to sign the merge commit and release tag, +- leave empty to let Git choose your default key +- (default: '${GPG_GIT_KEY}') +- -r, --release-branch Source release branch to merge from (default: 'release/VERSION') +- --target-branch Target branch to merge to (default: '${TARGET_BRANCH}') +- -t, --tag-name Override release tag name (defaults to version number) +- -h, --help Show this help +-EOF +- elif [ "build" == "$cmd" ]; then +- cat << EOF +- +-Build and package binary release from sources +- +-Options: +- -v, --version Release version number or name (required) +- -a, --app-name Application name (default: '${APP_NAME}') +- -s, --source-dir Source directory (default: '${SRC_DIR}') +- -o, --output-dir Output directory where to build the release +- (default: '${OUTPUT_DIR}') +- -t, --tag-name Release tag to check out (defaults to version number) +- -b, --build Build sources after exporting release +- -d, --docker-image Use the specified Docker image to compile the application. +- The image must have all required build dependencies installed. +- This option has no effect if --build is not set. +- --container-name Docker container name (default: '${DOCKER_CONTAINER_NAME}') +- The container must not exist already +- --snapcraft Create and use docker image to build snapcraft distribution. +- This option has no effect if --docker-image is not set. +- --appimage Build a Linux AppImage after compilation. +- If this option is set, --install-prefix has no effect +- --appsign Perform platform specific App Signing before packaging +- --timestamp Explicitly set the timestamp server to use for appsign (default: '${TIMESTAMP_SERVER}') +- -k, --key Specify the App Signing Key/Identity +- -c, --cmake-options Additional CMake options for compiling the sources +- --compiler Compiler to use (default: '${COMPILER}') +- -m, --make-options Make options for compiling sources (default: '${MAKE_OPTIONS}') +- -g, --generators Additional CPack generators (default: '${CPACK_GENERATORS}') +- -i, --install-prefix Install prefix (default: '${INSTALL_PREFIX}') +- -p, --plugins Space-separated list of plugins to build +- (default: ${BUILD_PLUGINS}) +- --snapshot Don't checkout the release tag +- -n, --no-source-tarball Don't build source tarball +- -h, --help Show this help +-EOF +- elif [ "gpgsign" == "$cmd" ]; then +- cat << EOF +- +-Sign previously compiled release packages with GPG +- +-Options: +- -f, --files Files to sign (required) +- -k, --key GPG key used to sign the files (default: '${GPG_KEY}') +- -h, --help Show this help +-EOF +- elif [ "appsign" == "$cmd" ]; then +- cat << EOF +- +-Sign binaries with code signing certificates on Windows and macOS +- +-Options: +- -f, --files Files to sign (required) +- -k, --key, -i, --identity +- Signing Key or Apple Developer ID (required) +- --timestamp Explicitly set the timestamp server to use for appsign (default: '${TIMESTAMP_SERVER}') +- -u, --username Apple username for notarization (required on macOS) +- -c, --keychain Apple keychain entry name storing the notarization +- app password (default: 'AC_PASSWORD') +- -h, --help Show this help +-EOF +- elif [ "appimage" == "$cmd" ]; then +- cat << EOF +- +-Generate Linux AppImage from 'make install' AppDir +- +-Options: +- -a, --appdir Input AppDir (required) +- -v, --version KeePassXC version +- -o, --output-dir Output directory where to build the AppImage +- (default: '${OUTPUT_DIR}') +- -d, --docker-image Use the specified Docker image to build the AppImage. +- The image must have all required build dependencies installed. +- --container-name Docker container name (default: '${DOCKER_CONTAINER_NAME}') +- The container must not exist already +- --appsign Embed a PGP signature into the AppImage +- -k, --key The PGP Signing Key +- --verbosity linuxdeploy verbosity (default: 3) +- -h, --help Show this help +-EOF +- fi +-} +- +-logInfo() { +- printf "\e[1m[ \e[34mINFO\e[39m ]\e[0m $1\n" +-} +- +-logWarn() { +- printf "\e[1m[ \e[33mWARNING\e[39m ]\e[0m $1\n" +-} +- +-logError() { +- printf "\e[1m[ \e[31mERROR\e[39m ]\e[0m $1\n" >&2 +-} +- +-init() { +- if [ "" == "$RELEASE_NAME" ]; then +- logError "Missing arguments, --version is required!\n" +- printUsage "check" +- exit 1 +- fi +- +- if [ "" == "$TAG_NAME" ]; then +- TAG_NAME="$RELEASE_NAME" +- fi +- +- if [ "" == "$SOURCE_BRANCH" ]; then +- SOURCE_BRANCH="release/${RELEASE_NAME}" +- fi +- +- ORIG_CWD="$(pwd)" +- SRC_DIR="$(realpath "$SRC_DIR")" +- cd "$SRC_DIR" > /dev/null 2>&1 +- ORIG_BRANCH="$(git rev-parse --abbrev-ref HEAD 2> /dev/null)" +- cd "$ORIG_CWD" +-} +- +-cleanup() { +- logInfo "Checking out original branch..." +- if [ "" != "$ORIG_BRANCH" ]; then +- git checkout "$ORIG_BRANCH" > /dev/null 2>&1 +- fi +- logInfo "Leaving source directory..." +- cd "$ORIG_CWD" +-} +- +-exitError() { +- logError "$1" +- cleanup +- exit 1 +-} +- +-exitTrap() { +- exitError "Existing upon user request..." +-} +- +-cmdExists() { +- command -v "$1" &> /dev/null +-} +- +-checkGrepCompat() { +- if ! grep -qPzo test <(echo test) 2> /dev/null; then +- if [ -e /usr/local/opt/grep/libexec/gnubin/grep ]; then +- GREP="/usr/local/opt/grep/libexec/gnubin/grep" +- else +- exitError "Incompatible grep implementation! If on macOS, please run 'brew install grep'." +- fi +- fi +-} +- +-checkSourceDirExists() { +- if [ ! -d "$SRC_DIR" ]; then +- exitError "Source directory '${SRC_DIR}' does not exist!" +- fi +-} +- +-checkOutputDirDoesNotExist() { +- if [ -e "$OUTPUT_DIR" ]; then +- exitError "Output directory '$OUTPUT_DIR' already exists. Please choose a different location!" +- fi +-} +- +-checkGitRepository() { +- if [ ! -d .git ] || [ ! -f CHANGELOG.md ]; then +- exitError "Source directory is not a valid Git repository!" +- fi +-} +- +-checkReleaseDoesNotExist() { +- git tag | $GREP -q "^$TAG_NAME$" +- if [ $? -eq 0 ]; then +- exitError "Release '$RELEASE_NAME' (tag: '$TAG_NAME') already exists!" +- fi +-} +- +-checkWorkingTreeClean() { +- git diff-index --quiet HEAD -- +- if [ $? -ne 0 ]; then +- exitError "Current working tree is not clean! Please commit or unstage any changes." +- fi +-} +- +-checkSourceBranchExists() { +- git rev-parse "$SOURCE_BRANCH" > /dev/null 2>&1 +- if [ $? -ne 0 ]; then +- exitError "Source branch '$SOURCE_BRANCH' does not exist!" +- fi +-} +- +-checkTargetBranchExists() { +- git rev-parse "$TARGET_BRANCH" > /dev/null 2>&1 +- if [ $? -ne 0 ]; then +- exitError "Target branch '$TARGET_BRANCH' does not exist!" +- fi +-} +- +-checkVersionInCMake() { +- local app_name_upper="$(echo "$APP_NAME" | tr '[:lower:]' '[:upper:]')" +- local major_num="$(echo ${RELEASE_NAME} | cut -f1 -d.)" +- local minor_num="$(echo ${RELEASE_NAME} | cut -f2 -d.)" +- local patch_num="$(echo ${RELEASE_NAME} | cut -f3 -d. | cut -f1 -d-)" +- +- $GREP -q "${app_name_upper}_VERSION_MAJOR \"${major_num}\"" CMakeLists.txt +- if [ $? -ne 0 ]; then +- exitError "${app_name_upper}_VERSION_MAJOR not updated to '${major_num}' in CMakeLists.txt!" +- fi +- +- $GREP -q "${app_name_upper}_VERSION_MINOR \"${minor_num}\"" CMakeLists.txt +- if [ $? -ne 0 ]; then +- exitError "${app_name_upper}_VERSION_MINOR not updated to '${minor_num}' in CMakeLists.txt!" +- fi +- +- $GREP -q "${app_name_upper}_VERSION_PATCH \"${patch_num}\"" CMakeLists.txt +- if [ $? -ne 0 ]; then +- exitError "${app_name_upper}_VERSION_PATCH not updated to '${patch_num}' in CMakeLists.txt!" +- fi +-} +- +-checkChangeLog() { +- if [ ! -f CHANGELOG.md ]; then +- exitError "No CHANGELOG file found!" +- fi +- +- $GREP -qPzo "## ${RELEASE_NAME} \(\d{4}-\d{2}-\d{2}\)\n" CHANGELOG.md +- if [ $? -ne 0 ]; then +- exitError "'CHANGELOG.md' has not been updated to the '${RELEASE_NAME}' release!" +- fi +-} +- +-checkAppStreamInfo() { +- if [ ! -f share/linux/org.keepassxc.KeePassXC.appdata.xml ]; then +- exitError "No AppStream info file found!" +- fi +- +- $GREP -qPzo "" share/linux/org.keepassxc.KeePassXC.appdata.xml +- if [ $? -ne 0 ]; then +- exitError "'share/linux/org.keepassxc.KeePassXC.appdata.xml' has not been updated to the '${RELEASE_NAME}' release!" +- fi +-} +- +-checkSnapcraft() { +- if [ ! -f snap/snapcraft.yaml ]; then +- echo "Could not find snap/snapcraft.yaml!" +- return +- fi +- +- $GREP -qPzo "version: ${RELEASE_NAME}" snap/snapcraft.yaml +- if [ $? -ne 0 ]; then +- exitError "'snapcraft.yaml' has not been updated to the '${RELEASE_NAME}' release!" +- fi +- +- $GREP -qPzo "KEEPASSXC_BUILD_TYPE=Release" snap/snapcraft.yaml +- if [ $? -ne 0 ]; then +- exitError "'snapcraft.yaml' is not set for a release build!" +- fi +-} +- +-checkTransifexCommandExists() { +- if ! cmdExists tx; then +- exitError "Transifex tool 'tx' not installed! Please install it using 'pip install transifex-client'." +- fi +-} +- +-checkSigntoolCommandExists() { +- if ! cmdExists signtool; then +- exitError "signtool command not found on the PATH! Add the Windows SDK binary folder to your PATH." +- fi +-} +- +-checkXcodeSetup() { +- if ! cmdExists xcrun; then +- exitError "xcrun command not found on the PATH! Please check that you have correctly installed Xcode." +- fi +- if ! xcrun -f codesign > /dev/null 2>&1; then +- exitError "codesign command not found. You may need to run 'sudo xcode-select -r' to set up Xcode." +- fi +- if ! xcrun -f altool > /dev/null 2>&1; then +- exitError "altool command not found. You may need to run 'sudo xcode-select -r' to set up Xcode." +- fi +- if ! xcrun -f stapler > /dev/null 2>&1; then +- exitError "stapler command not found. You may need to run 'sudo xcode-select -r' to set up Xcode." +- fi +-} +- +-checkQt5LUpdateExists() { +- if cmdExists lupdate && ! $(lupdate -version | $GREP -q "lupdate version 5\."); then +- if ! cmdExists lupdate-qt5; then +- exitError "Qt Linguist tool (lupdate-qt5) is not installed! Please install using 'apt install qttools5-dev-tools'" +- fi +- fi +-} +- +-performChecks() { +- logInfo "Performing basic checks..." +- +- checkGrepCompat +- +- checkSourceDirExists +- +- logInfo "Changing to source directory..." +- cd "${SRC_DIR}" +- +- logInfo "Validating toolset and repository..." +- +- checkTransifexCommandExists +- checkQt5LUpdateExists +- checkGitRepository +- checkReleaseDoesNotExist +- checkWorkingTreeClean +- checkSourceBranchExists +- checkTargetBranchExists +- +- logInfo "Checking out '${SOURCE_BRANCH}'..." +- git checkout "$SOURCE_BRANCH" +- +- logInfo "Attempting to find '${RELEASE_NAME}' in various files..." +- +- checkVersionInCMake +- checkChangeLog +- checkAppStreamInfo +- checkSnapcraft +- +- logInfo "\e[1m\e[32mAll checks passed!\e[0m" +-} +- +-# re-implement realpath for OS X (thanks mschrag) +-# https://superuser.com/questions/205127/ +-if ! cmdExists realpath; then +- realpath() { +- pushd . > /dev/null +- if [ -d "$1" ]; then +- cd "$1" +- dirs -l +0 +- else +- cd "$(dirname "$1")" +- cur_dir=$(dirs -l +0) +- +- if [ "$cur_dir" == "/" ]; then +- echo "$cur_dir$(basename "$1")" +- else +- echo "$cur_dir/$(basename "$1")" +- fi +- fi +- popd > /dev/null +- } +-fi +- +- +-trap exitTrap SIGINT SIGTERM +- +-# ----------------------------------------------------------------------- +-# check command +-# ----------------------------------------------------------------------- +-check() { +- while [ $# -ge 1 ]; do +- local arg="$1" +- case "$arg" in +- -v|--version) +- RELEASE_NAME="$2" +- shift ;; +- esac +- shift +- done +- +- init +- +- performChecks +- +- cleanup +- +- logInfo "Congrats! You can successfully merge, build, and sign KeepassXC." +-} +- +-# ----------------------------------------------------------------------- +-# merge command +-# ----------------------------------------------------------------------- +-merge() { +- while [ $# -ge 1 ]; do +- local arg="$1" +- case "$arg" in +- -v|--version) +- RELEASE_NAME="$2" +- shift ;; +- +- -a|--app-name) +- APP_NAME="$2" +- shift ;; +- +- -s|--source-dir) +- SRC_DIR="$2" +- shift ;; +- +- -k|--key|-g|--gpg-key) +- GPG_GIT_KEY="$2" +- shift ;; +- +- --timestamp) +- TIMESTAMP_SERVER="$2" +- shift ;; +- +- -r|--release-branch) +- SOURCE_BRANCH="$2" +- shift ;; +- +- --target-branch) +- TARGET_BRANCH="$2" +- shift ;; +- +- -t|--tag-name) +- TAG_NAME="$2" +- shift ;; +- +- -h|--help) +- printUsage "merge" +- exit ;; +- +- *) +- logError "Unknown option '$arg'\n" +- printUsage "merge" +- exit 1 ;; +- esac +- shift +- done +- +- init +- +- performChecks +- +- logInfo "Updating language files..." +- ./share/translations/update.sh update +- ./share/translations/update.sh pull +- if [ 0 -ne $? ]; then +- exitError "Updating translations failed!" +- fi +- git diff-index --quiet HEAD -- +- if [ $? -ne 0 ]; then +- git add -A ./share/translations/ +- logInfo "Committing changes..." +- if [ "" == "$GPG_GIT_KEY" ]; then +- git commit -m "Update translations" +- else +- git commit -m "Update translations" -S"$GPG_GIT_KEY" +- fi +- fi +- +- CHANGELOG=$($GREP -Pzo "(?<=${RELEASE_NAME} \(\d{4}-\d{2}-\d{2}\)\n\n)\n?(?:.|\n)+?\n(?=## )" CHANGELOG.md \ +- | sed 's/^### //' | tr -d \\0) +- COMMIT_MSG="Release ${RELEASE_NAME}" +- +- logInfo "Checking out target branch '${TARGET_BRANCH}'..." +- git checkout "$TARGET_BRANCH" +- +- logInfo "Merging '${SOURCE_BRANCH}' into '${TARGET_BRANCH}'..." +- +- git merge "$SOURCE_BRANCH" --no-ff -m "$COMMIT_MSG" -m "${CHANGELOG}" "$SOURCE_BRANCH" -S"$GPG_GIT_KEY" +- +- logInfo "Creating tag '${TAG_NAME}'..." +- if [ "" == "$GPG_GIT_KEY" ]; then +- git tag -a "$TAG_NAME" -m "$COMMIT_MSG" -m "${CHANGELOG}" -s +- else +- git tag -a "$TAG_NAME" -m "$COMMIT_MSG" -m "${CHANGELOG}" -s -u "$GPG_GIT_KEY" +- fi +- +- cleanup +- +- logInfo "All done!" +- logInfo "Please merge the release branch back into the develop branch now and then push your changes." +- logInfo "Don't forget to also push the tags using \e[1mgit push --tags\e[0m." +-} +- +-# ----------------------------------------------------------------------- +-# appimage command +-# ----------------------------------------------------------------------- +-appimage() { +- local appdir +- local build_appsign=false +- local build_key +- local verbosity="1" +- +- while [ $# -ge 1 ]; do +- local arg="$1" +- case "$arg" in +- -v|--version) +- RELEASE_NAME="$2" +- shift ;; +- +- -a|--appdir) +- appdir="$2" +- shift ;; +- +- -o|--output-dir) +- OUTPUT_DIR="$2" +- shift ;; +- +- -d|--docker-image) +- DOCKER_IMAGE="$2" +- shift ;; +- +- --container-name) +- DOCKER_CONTAINER_NAME="$2" +- shift ;; +- +- --appsign) +- build_appsign=true ;; +- +- --verbosity) +- verbosity=$2 +- shift ;; +- +- -k|--key) +- build_key="$2" +- shift ;; +- +- -h|--help) +- printUsage "appimage" +- exit ;; +- +- *) +- logError "Unknown option '$arg'\n" +- printUsage "appimage" +- exit 1 ;; +- esac +- shift +- done +- +- if [ -z "${appdir}" ]; then +- logError "Missing arguments, --appdir is required!\n" +- printUsage "appimage" +- exit 1 +- fi +- +- if [ ! -d "${appdir}" ]; then +- exitError "AppDir does not exist, please create one with 'make install'!" +- elif [ -e "${appdir}/AppRun" ]; then +- exitError "AppDir has already been run through linuxdeploy, please create a fresh AppDir with 'make install'." +- fi +- +- appdir="$(realpath "$appdir")" +- +- local out="${OUTPUT_DIR}" +- if [ "" == "$out" ]; then +- out="." +- fi +- mkdir -p "$out" +- local out_real="$(realpath "$out")" +- cd "$out" +- +- local linuxdeploy="linuxdeploy" +- local linuxdeploy_cleanup +- local linuxdeploy_plugin_qt="linuxdeploy-plugin-qt" +- local linuxdeploy_plugin_qt_cleanup +- local appimagetool="appimagetool" +- local appimagetool_cleanup +- +- logInfo "Testing for AppImage tools..." +- local docker_test_cmd +- if [ "" != "$DOCKER_IMAGE" ]; then +- docker_test_cmd="docker run --rm ${DOCKER_IMAGE}" +- fi +- +- # Test if linuxdeploy and linuxdeploy-plugin-qt are installed +- # on the system or inside the Docker container +- if ! ${docker_test_cmd} which ${linuxdeploy} &> /dev/null; then +- logInfo "Downloading linuxdeploy..." +- linuxdeploy="./linuxdeploy" +- linuxdeploy_cleanup="rm -f ${linuxdeploy}" +- if ! curl -Lf "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage" > "$linuxdeploy"; then +- exitError "linuxdeploy download failed." +- fi +- chmod +x "$linuxdeploy" +- fi +- if ! ${docker_test_cmd} which ${linuxdeploy_plugin_qt} &> /dev/null; then +- logInfo "Downloading linuxdeploy-plugin-qt..." +- linuxdeploy_plugin_qt="./linuxdeploy-plugin-qt" +- linuxdeploy_plugin_qt_cleanup="rm -f ${linuxdeploy_plugin_qt}" +- if ! curl -Lf "https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage" > "$linuxdeploy_plugin_qt"; then +- exitError "linuxdeploy-plugin-qt download failed." +- fi +- chmod +x "$linuxdeploy_plugin_qt" +- fi +- +- # appimagetool is always run outside a Docker container, so we can access our GPG keys +- if ! cmdExists ${appimagetool}; then +- logInfo "Downloading appimagetool..." +- appimagetool="./appimagetool" +- appimagetool_cleanup="rm -f ${appimagetool}" +- if ! curl -Lf "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage" > "$appimagetool"; then +- exitError "appimagetool download failed." +- fi +- chmod +x "$appimagetool" +- fi +- +- # Create custom AppRun wrapper +- cat << EOF > "${out_real}/KeePassXC-AppRun" +-#!/usr/bin/env bash +- +-export PATH="\$(dirname \$0)/usr/bin:\${PATH}" +-export LD_LIBRARY_PATH="\$(dirname \$0)/usr/lib:\${LD_LIBRARY_PATH}" +- +-if [ "\${1}" == "cli" ]; then +- shift +- exec keepassxc-cli "\$@" +-elif [ "\${1}" == "proxy" ]; then +- shift +- exec keepassxc-proxy "\$@" +-elif [ -v CHROME_WRAPPER ] || [ -v MOZ_LAUNCHED_CHILD ]; then +- exec keepassxc-proxy "\$@" +-else +- exec keepassxc "\$@" +-fi +-EOF +- chmod +x "${out_real}/KeePassXC-AppRun" +- +- # Find .desktop files, icons, and binaries to deploy +- local desktop_file="$(find "$appdir" -name "org.keepassxc.KeePassXC.desktop" | head -n1)" +- local icon="$(find "$appdir" -name 'keepassxc.png' | $GREP -P 'application/256x256/apps/keepassxc.png$' | head -n1)" +- local executables="$(IFS=$'\n' find "$appdir" | $GREP -P '/usr/bin/keepassxc[^/]*$' | xargs -i printf " --executable={}")" +- +- logInfo "Collecting libs and patching binaries..." +- if [ "" == "$DOCKER_IMAGE" ]; then +- "$linuxdeploy" --verbosity=${verbosity} --plugin=qt --appdir="$appdir" --desktop-file="$desktop_file" \ +- --custom-apprun="${out_real}/KeePassXC-AppRun" --icon-file="$icon" ${executables} \ +- --library=$(ldconfig -p | $GREP x86-64 | $GREP -oP '/[^\s]+/libgpg-error\.so\.\d+$' | head -n1) +- else +- desktop_file="${desktop_file//${appdir}/\/keepassxc\/AppDir}" +- icon="${icon//${appdir}/\/keepassxc\/AppDir}" +- executables="${executables//${appdir}/\/keepassxc\/AppDir}" +- +- docker run --name "$DOCKER_CONTAINER_NAME" --rm \ +- --cap-add SYS_ADMIN --security-opt apparmor:unconfined --device /dev/fuse \ +- -v "${appdir}:/keepassxc/AppDir:rw" \ +- -v "${out_real}:/keepassxc/out:rw" \ +- "$DOCKER_IMAGE" \ +- bash -c "cd /keepassxc/out && ${linuxdeploy} --verbosity=${verbosity} --plugin=qt --appdir=/keepassxc/AppDir \ +- --custom-apprun="/keepassxc/out/KeePassXC-AppRun" --desktop-file=${desktop_file} --icon-file=${icon} ${executables} \ +- --library=\$(ldconfig -p | grep x86-64 | grep -oP '/[^\s]+/libgpg-error\.so\.\d+$' | head -n1)" +- fi +- +- if [ $? -ne 0 ]; then +- exitError "AppDir deployment failed." +- fi +- +- logInfo "Creating AppImage..." +- local appsign_flag="" +- local appsign_key_flag="" +- if ${build_appsign}; then +- appsign_flag="--sign" +- appsign_key_flag="--sign-key ${build_key}" +- fi +- local appimage_name="KeePassXC-x86_64.AppImage" +- if [ "" != "$RELEASE_NAME" ]; then +- appimage_name="KeePassXC-${RELEASE_NAME}-x86_64.AppImage" +- echo "X-AppImage-Version=${RELEASE_NAME}" >> "$desktop_file" +- fi +- +- # Run appimagetool to package (and possibly sign) AppImage +- # --no-appstream is required, since it may crash on newer systems +- # see: https://github.com/AppImage/AppImageKit/issues/856 +- if ! "$appimagetool" --updateinformation "gh-releases-zsync|keepassxreboot|keepassxc|latest|KeePassXC-*-x86_64.AppImage.zsync" \ +- ${appsign_flag} ${appsign_key_flag} --no-appstream "$appdir" "${out_real}/${appimage_name}"; then +- exitError "AppImage creation failed." +- fi +- +- logInfo "Cleaning up temporary files..." +- ${linuxdeploy_cleanup} +- ${linuxdeploy_plugin_qt_cleanup} +- ${appimagetool_cleanup} +- rm -f "${out_real}/KeePassXC-AppRun" +-} +- +-# ----------------------------------------------------------------------- +-# build command +-# ----------------------------------------------------------------------- +-build() { +- local build_source_tarball=true +- local build_snapshot=false +- local build_snapcraft=false +- local build_appimage=false +- local build_generators="" +- local build_appsign=false +- local build_key="" +- +- while [ $# -ge 1 ]; do +- local arg="$1" +- case "$arg" in +- -v|--version) +- RELEASE_NAME="$2" +- shift ;; +- +- -a|--app-name) +- APP_NAME="$2" +- shift ;; +- +- -s|--source-dir) +- SRC_DIR="$2" +- shift ;; +- +- -o|--output-dir) +- OUTPUT_DIR="$2" +- shift ;; +- +- -t|--tag-name) +- TAG_NAME="$2" +- shift ;; +- +- -d|--docker-image) +- DOCKER_IMAGE="$2" +- shift ;; +- +- --container-name) +- DOCKER_CONTAINER_NAME="$2" +- shift ;; +- +- --appsign) +- build_appsign=true ;; +- +- --timestamp) +- TIMESTAMP_SERVER="$2" +- shift ;; +- +- -k|--key) +- build_key="$2" +- shift ;; +- +- --snapcraft) +- build_snapcraft=true ;; +- +- --appimage) +- build_appimage=true ;; +- +- -c|--cmake-options) +- CMAKE_OPTIONS="$2" +- shift ;; +- +- --compiler) +- COMPILER="$2" +- shift ;; +- +- -m|--make-options) +- MAKE_OPTIONS="$2" +- shift ;; +- +- -g|--generators) +- build_generators="$2" +- shift ;; +- +- -i|--install-prefix) +- INSTALL_PREFIX="$2" +- shift ;; +- +- -p|--plugins) +- BUILD_PLUGINS="$2" +- shift ;; +- +- -n|--no-source-tarball) +- build_source_tarball=false ;; +- +- --snapshot) +- build_snapshot=true ;; +- +- -h|--help) +- printUsage "build" +- exit ;; +- +- *) +- logError "Unknown option '$arg'\n" +- printUsage "build" +- exit 1 ;; +- esac +- shift +- done +- +- init +- +- OUTPUT_DIR="$(realpath "$OUTPUT_DIR")" +- # Resolve appsign key to absolute path if under Windows +- if [[ "${build_key}" && "$(uname -o)" == "Msys" ]]; then +- build_key="$(realpath "${build_key}")" +- fi +- +- if ${build_snapshot}; then +- TAG_NAME="HEAD" +- local branch=`git rev-parse --abbrev-ref HEAD` +- logInfo "Using current branch ${branch} to build..." +- RELEASE_NAME="${RELEASE_NAME}-snapshot" +- CMAKE_OPTIONS="${CMAKE_OPTIONS} -DKEEPASSXC_BUILD_TYPE=Snapshot -DOVERRIDE_VERSION=${RELEASE_NAME}" +- else +- checkGrepCompat +- checkWorkingTreeClean +- +- if $(echo "$TAG_NAME" | $GREP -qP "\-(alpha|beta)\\d+\$"); then +- CMAKE_OPTIONS="${CMAKE_OPTIONS} -DKEEPASSXC_BUILD_TYPE=PreRelease" +- logInfo "Checking out pre-release tag '${TAG_NAME}'..." +- else +- CMAKE_OPTIONS="${CMAKE_OPTIONS} -DKEEPASSXC_BUILD_TYPE=Release" +- logInfo "Checking out release tag '${TAG_NAME}'..." +- fi +- git checkout "$TAG_NAME" +- fi +- +- logInfo "Creating output directory..." +- mkdir -p "$OUTPUT_DIR" +- +- if [ $? -ne 0 ]; then +- exitError "Failed to create output directory!" +- fi +- +- if ${build_source_tarball}; then +- logInfo "Creating source tarball..." +- local app_name_lower="$(echo "$APP_NAME" | tr '[:upper:]' '[:lower:]')" +- local prefix="${app_name_lower}-${RELEASE_NAME}" +- local tarball_name="${prefix}-src.tar" +- +- git archive --format=tar "$TAG_NAME" --prefix="${prefix}/" --output="${OUTPUT_DIR}/${tarball_name}" +- +- # add .version and .gitrev files to tarball +- mkdir "${prefix}" +- echo -n ${RELEASE_NAME} > "${prefix}/.version" +- echo -n `git rev-parse --short=7 HEAD` > "${prefix}/.gitrev" +- tar --append --file="${OUTPUT_DIR}/${tarball_name}" "${prefix}/.version" "${prefix}/.gitrev" +- rm "${prefix}/.version" "${prefix}/.gitrev" +- rmdir "${prefix}" 2> /dev/null +- +- local xz="xz" +- if ! cmdExists xz; then +- logWarn "xz not installed. Falling back to bz2..." +- xz="bzip2" +- fi +- $xz -6 "${OUTPUT_DIR}/${tarball_name}" +- fi +- +- if ! ${build_snapshot} && [ -e "${OUTPUT_DIR}/build-release" ]; then +- logInfo "Cleaning existing build directory..." +- rm -rf "${OUTPUT_DIR}/build-release" 2> /dev/null +- if [ $? -ne 0 ]; then +- exitError "Failed to clean existing build directory, please do it manually." +- fi +- fi +- +- logInfo "Creating build directory..." +- mkdir -p "${OUTPUT_DIR}/build-release" +- cd "${OUTPUT_DIR}/build-release" +- +- logInfo "Configuring sources..." +- for p in ${BUILD_PLUGINS}; do +- CMAKE_OPTIONS="${CMAKE_OPTIONS} -DWITH_XC_$(echo $p | tr '[:lower:]' '[:upper:]')=On" +- done +- if [ "$(uname -o 2> /dev/null)" == "GNU/Linux" ] && ${build_appimage}; then +- CMAKE_OPTIONS="${CMAKE_OPTIONS} -DKEEPASSXC_DIST_TYPE=AppImage" +- # linuxdeploy requires /usr as install prefix +- INSTALL_PREFIX="/usr" +- fi +- # Do not build tests cases +- CMAKE_OPTIONS="${CMAKE_OPTIONS} -DWITH_TESTS=OFF" +- +- if [ "$COMPILER" == "g++" ]; then +- export CC=gcc +- elif [ "$COMPILER" == "clang++" ]; then +- export CC=clang +- fi +- export CXX="$COMPILER" +- +- if [ "" == "$DOCKER_IMAGE" ]; then +- if [ "$(uname -s)" == "Darwin" ]; then +- # Building on macOS +- export MACOSX_DEPLOYMENT_TARGET +- +- logInfo "Configuring build..." +- cmake -DCMAKE_BUILD_TYPE=Release \ +- -DCMAKE_OSX_ARCHITECTURES=x86_64 -DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" \ +- -DCMAKE_PREFIX_PATH="/usr/local/opt/qt/lib/cmake" \ +- ${CMAKE_OPTIONS} "$SRC_DIR" +- +- logInfo "Compiling and packaging sources..." +- make ${MAKE_OPTIONS} package +- +- # Appsign the executables if desired +- if ${build_appsign}; then +- logInfo "Signing executable files" +- appsign "-f" "./${APP_NAME}-${RELEASE_NAME}.dmg" "-k" "${build_key}" +- fi +- +- mv "./${APP_NAME}-${RELEASE_NAME}.dmg" ../ +- elif [ "$(uname -o)" == "Msys" ]; then +- # Building on Windows with Msys2 +- logInfo "Configuring build..." +- cmake -DCMAKE_BUILD_TYPE=Release -G"MSYS Makefiles" \ +- -DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" ${CMAKE_OPTIONS} "$SRC_DIR" +- +- logInfo "Compiling and packaging sources..." +- mingw32-make ${MAKE_OPTIONS} preinstall +- +- # Appsign the executables if desired +- if ${build_appsign} && [ -f "${build_key}" ]; then +- logInfo "Signing executable files" +- appsign "-f" $(find src | $GREP -P '\.exe$|\.dll$') "-k" "${build_key}" +- fi +- +- # Call cpack directly instead of calling make package. +- # This is important because we want to build the MSI when making a +- # release. +- cpack -G "${CPACK_GENERATORS};${build_generators}" +- +- # Inject the portable config into the zip build and rename +- touch .portable +- for filename in ${APP_NAME}-*.zip; do +- logInfo "Creating portable zip file" +- local folder=$(echo ${filename} | sed -r 's/(.*)\.zip/\1/') +- python -c 'import zipfile,sys ; zipfile.ZipFile(sys.argv[1],"a").write(sys.argv[2],sys.argv[3])' \ +- ${filename} .portable ${folder}/.portable +- mv ${filename} ${folder}-portable.zip +- done +- rm .portable +- +- mv "${APP_NAME}-"*.* ../ +- else +- mkdir -p "${OUTPUT_DIR}/KeePassXC.AppDir" +- +- # Building on Linux without Docker container +- logInfo "Configuring build..." +- cmake -DCMAKE_BUILD_TYPE=Release ${CMAKE_OPTIONS} \ +- -DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" "$SRC_DIR" +- +- logInfo "Compiling sources..." +- make ${MAKE_OPTIONS} +- +- logInfo "Installing to bin dir..." +- make DESTDIR="${OUTPUT_DIR}/KeePassXC.AppDir" install/strip +- fi +- else +- if ${build_snapcraft}; then +- logInfo "Building snapcraft docker image..." +- +- sudo docker image build -t "$DOCKER_IMAGE" "$(realpath "$SRC_DIR")/ci/snapcraft" +- +- logInfo "Launching Docker contain to compile snapcraft..." +- +- sudo docker run --name "$DOCKER_CONTAINER_NAME" --rm \ +- -v "$(realpath "$SRC_DIR"):/keepassxc" -w "/keepassxc" \ +- "$DOCKER_IMAGE" snapcraft +- else +- mkdir -p "${OUTPUT_DIR}/KeePassXC.AppDir" +- +- logInfo "Launching Docker container to compile sources..." +- +- docker run --name "$DOCKER_CONTAINER_NAME" --rm \ +- --cap-add SYS_ADMIN --security-opt apparmor:unconfined --device /dev/fuse \ +- -e "CC=${CC}" -e "CXX=${CXX}" \ +- -v "$(realpath "$SRC_DIR"):/keepassxc/src:ro" \ +- -v "$(realpath "$OUTPUT_DIR"):/keepassxc/out:rw" \ +- "$DOCKER_IMAGE" \ +- bash -c "cd /keepassxc/out/build-release && \ +- cmake -DCMAKE_BUILD_TYPE=Release ${CMAKE_OPTIONS} \ +- -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} /keepassxc/src && \ +- make ${MAKE_OPTIONS} && make DESTDIR=/keepassxc/out/KeePassXC.AppDir install/strip" +- fi +- +- if [ 0 -ne $? ]; then +- exitError "Docker build failed!" +- fi +- +- logInfo "Build finished, Docker container terminated." +- fi +- +- if [ "$(uname -o 2> /dev/null)" == "GNU/Linux" ] && ${build_appimage}; then +- local appsign_flag="" +- local appsign_key_flag="" +- local docker_image_flag="" +- local docker_container_name_flag="" +- if ${build_appsign}; then +- appsign_flag="--appsign" +- appsign_key_flag="-k ${build_key}" +- fi +- if [ "" != "${DOCKER_IMAGE}" ]; then +- docker_image_flag="-d ${DOCKER_IMAGE}" +- docker_container_name_flag="--container-name ${DOCKER_CONTAINER_NAME}" +- fi +- appimage "-a" "${OUTPUT_DIR}/KeePassXC.AppDir" "-o" "${OUTPUT_DIR}" \ +- ${appsign_flag} ${appsign_key_flag} ${docker_image_flag} ${docker_container_name_flag} +- fi +- +- cleanup +- +- logInfo "All done!" +-} +- +-# ----------------------------------------------------------------------- +-# gpgsign command +-# ----------------------------------------------------------------------- +-gpgsign() { +- local sign_files=() +- +- while [ $# -ge 1 ]; do +- local arg="$1" +- case "$arg" in +- -f|--files) +- while [ "${2:0:1}" != "-" ] && [ $# -ge 2 ]; do +- sign_files+=("$2") +- shift +- done ;; +- +- -k|--key|-g|--gpg-key) +- GPG_KEY="$2" +- shift ;; +- +- -h|--help) +- printUsage "gpgsign" +- exit ;; +- +- *) +- logError "Unknown option '$arg'\n" +- printUsage "gpgsign" +- exit 1 ;; +- esac +- shift +- done +- +- if [ -z "${sign_files}" ]; then +- logError "Missing arguments, --files is required!\n" +- printUsage "gpgsign" +- exit 1 +- fi +- +- for f in "${sign_files[@]}"; do +- if [ ! -f "$f" ]; then +- exitError "File '${f}' does not exist or is not a file!" +- fi +- +- logInfo "Signing file '${f}' using release key..." +- gpg --output "${f}.sig" --armor --local-user "$GPG_KEY" --detach-sig "$f" +- +- if [ 0 -ne $? ]; then +- exitError "Signing failed!" +- fi +- +- logInfo "Creating digest for file '${f}'..." +- local rp="$(realpath "$f")" +- local bname="$(basename "$f")" +- (cd "$(dirname "$rp")"; sha256sum "$bname" > "${bname}.DIGEST") +- done +- +- logInfo "All done!" +-} +- +-# ----------------------------------------------------------------------- +-# appsign command +-# ----------------------------------------------------------------------- +-appsign() { +- local sign_files=() +- local key +- local ac_username +- local ac_keychain="AC_PASSWORD" +- +- while [ $# -ge 1 ]; do +- local arg="$1" +- case "$arg" in +- -f|--files) +- while [ "${2:0:1}" != "-" ] && [ $# -ge 2 ]; do +- sign_files+=("$2") +- shift +- done ;; +- +- -k|--key|-i|--identity) +- key="$2" +- shift ;; +- +- -u|--username) +- ac_username="$2" +- shift ;; +- +- -c|--keychain) +- ac_keychain="$2" +- shift ;; +- +- -h|--help) +- printUsage "appsign" +- exit ;; +- +- *) +- logError "Unknown option '$arg'\n" +- printUsage "appsign" +- exit 1 ;; +- esac +- shift +- done +- +- if [ -z "${key}" ]; then +- logError "Missing arguments, --key is required!\n" +- printUsage "appsign" +- exit 1 +- fi +- +- if [ -z "${sign_files}" ]; then +- logError "Missing arguments, --files is required!\n" +- printUsage "appsign" +- exit 1 +- fi +- +- for f in "${sign_files[@]}"; do +- if [ ! -f "${f}" ]; then +- exitError "File '${f}' does not exist or is not a file!" +- fi +- done +- +- if [ "$(uname -s)" == "Darwin" ]; then +- if [ "$ac_username" == "" ]; then +- exitError "Missing arguments, --username is required!" +- fi +- +- checkXcodeSetup +- checkGrepCompat +- +- local orig_dir="$(pwd)" +- local real_src_dir="$(realpath "${SRC_DIR}")" +- for f in "${sign_files[@]}"; do +- if [[ ${f: -4} == '.dmg' ]]; then +- logInfo "Unpacking disk image '${f}'..." +- local tmp_dir="/tmp/KeePassXC_${RANDOM}" +- mkdir -p ${tmp_dir}/mnt +- hdiutil attach -quiet -noautoopen -mountpoint ${tmp_dir}/mnt "${f}" +- cd ${tmp_dir} +- cp -a ./mnt ./app +- hdiutil detach -quiet ${tmp_dir}/mnt +- +- if [ ! -d ./app/KeePassXC.app ]; then +- cd "${orig_dir}" +- exitError "Unpacking failed!" +- fi +- +- logInfo "Signing app bundle..." +- xcrun codesign --sign "${key}" --verbose --deep --options runtime ./app/KeePassXC.app +- +- # Sign main binary and libraries independently so we can keep using the convenient --deep +- # option while avoiding adding entitlements recursively +- logInfo "Signing main binary..." +- xcrun codesign --sign "${key}" --verbose --force --options runtime --entitlements \ +- "${real_src_dir}/share/macosx/keepassxc.entitlements" ./app/KeePassXC.app/Contents/MacOS/KeePassXC +- +- if [ 0 -ne $? ]; then +- cd "${orig_dir}" +- exitError "Signing failed!" +- fi +- +- logInfo "Repacking disk image..." +- hdiutil create \ +- -volname "KeePassXC" \ +- -size $((1000 * ($(du -sk ./app | cut -f1) + 5000))) \ +- -srcfolder ./app \ +- -fs HFS+ \ +- -fsargs "-c c=64,a=16,e=16" \ +- -format UDBZ \ +- "${tmp_dir}/$(basename "${f}")" +- +- cd "${orig_dir}" +- cp -f "${tmp_dir}/$(basename "${f}")" "${f}" +- rm -Rf ${tmp_dir} +- +- logInfo "Submitting disk image for notarization..." +- local status="$(xcrun altool --notarize-app \ +- --primary-bundle-id "org.keepassxc.keepassxc" \ +- --username "${ac_username}" \ +- --password "@keychain:${ac_keychain}" \ +- --file "${f}")" +- +- if [ 0 -ne $? ]; then +- logError "Submission failed!" +- exitError "Error message:\n${status}" +- fi +- +- local ticket="$(echo "${status}" | $GREP -oP "[a-f0-9-]+$")" +- logInfo "Submission successful. Ticket ID: ${ticket}." +- +- logInfo "Waiting for notarization to finish (this may take a while)..." +- while true; do +- echo -n "." +- +- status="$(xcrun altool --notarization-info "${ticket}" \ +- --username "${ac_username}" \ +- --password "@keychain:${ac_keychain}")" +- +- if echo "$status" | $GREP -q "Status Code: 0"; then +- logInfo "\nNotarization successful." +- break +- elif echo "$status" | $GREP -q "Status Code"; then +- logError "\nNotarization failed!" +- exitError "Error message:\n${status}" +- fi +- +- sleep 5 +- done +- +- logInfo "Stapling ticket to disk image..." +- xcrun stapler staple "${f}" +- +- if [ 0 -ne $? ]; then +- exitError "Stapling failed!" +- fi +- +- logInfo "Disk image successfully signed and notarized." +- else +- logWarn "Skipping non-DMG file '${f}'..." +- fi +- done +- +- elif [ "$(uname -o)" == "Msys" ]; then +- if [[ ! -f "${key}" ]]; then +- exitError "Key file was not found!" +- fi +- +- read -s -p "Key password: " password +- echo +- +- for f in "${sign_files[@]}"; do +- ext=${f: -4} +- if [[ $ext == ".msi" || $ext == ".exe" || $ext == ".dll" ]]; then +- # Make sure we can find the signtool +- checkSigntoolCommandExists +- +- # osslsigncode does not succeed at signing MSI files at this time... +- logInfo "Signing file '${f}' using Microsoft signtool..." +- signtool sign -f "${key}" -p "${password}" -d "KeePassXC" -td sha256 \ +- -fd sha256 -tr "${TIMESTAMP_SERVER}" "${f}" +- +- if [ 0 -ne $? ]; then +- exitError "Signing failed!" +- fi +- else +- logInfo "Skipping non-executable file '${f}'..." +- fi +- done +- +- else +- exitError "Unsupported platform for code signing!\n" +- fi +- +- logInfo "All done!" +-} +- +-# ----------------------------------------------------------------------- +-# parse global command line +-# ----------------------------------------------------------------------- +-MODE="$1" +-shift +-if [ "" == "$MODE" ]; then +- logError "Missing arguments!\n" +- printUsage +- exit 1 +-elif [ "help" == "$MODE" ]; then +- printUsage "$1" +- exit +-elif [ "check" == "$MODE" ] || [ "merge" == "$MODE" ] || [ "build" == "$MODE" ] \ +- || [ "gpgsign" == "$MODE" ] || [ "appsign" == "$MODE" ] || [ "appimage" == "$MODE" ]; then +- ${MODE} "$@" +-else +- printUsage "$MODE" +-fi +diff -urNr keepassxc-2.6.4-orig/share/CMakeLists.txt keepassxc-2.6.4-patched/share/CMakeLists.txt +--- keepassxc-2.6.4-orig/share/CMakeLists.txt 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +@@ -1,57 +0,0 @@ +-# Copyright (C) 2011 Felix Geyer +-# Copyright (C) 2017 KeePassXC Team +-# +-# This program is free software: you can redistribute it and/or modify +-# it under the terms of the GNU General Public License as published by +-# the Free Software Foundation, either version 2 or (at your option) +-# version 3 of the License. +-# +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY; without even the implied warranty of +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-# GNU General Public License for more details. +-# +-# You should have received a copy of the GNU General Public License +-# along with this program. If not, see . +- +-add_subdirectory(translations) +- +-file(GLOB wordlists_files "wordlists/*.wordlist") +-install(FILES ${wordlists_files} DESTINATION ${DATA_INSTALL_DIR}/wordlists) +- +-# Copy wordlists to build dir for use in tests +-file(COPY "wordlists" DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) +- +-if(UNIX AND NOT APPLE AND NOT HAIKU) +- install(DIRECTORY icons/application/ DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor +- FILES_MATCHING PATTERN "keepassx*.png" PATTERN "keepassx*.svg" +- PATTERN "status" EXCLUDE PATTERN "actions" EXCLUDE PATTERN "categories" EXCLUDE) +- install(DIRECTORY icons/application/ DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor +- FILES_MATCHING PATTERN "application-x-keepassxc.png" PATTERN "application-x-keepassxc.svg" +- PATTERN "status" EXCLUDE PATTERN "actions" EXCLUDE PATTERN "categories" EXCLUDE) +- install(FILES linux/org.keepassxc.KeePassXC.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications) +- install(FILES linux/org.keepassxc.KeePassXC.appdata.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/metainfo) +- install(FILES linux/keepassxc.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/mime/packages) +-endif(UNIX AND NOT APPLE AND NOT HAIKU) +- +-if(APPLE) +- install(FILES macosx/keepassxc.icns DESTINATION ${DATA_INSTALL_DIR}) +-endif() +- +-install(FILES icons/application/256x256/apps/keepassxc.png DESTINATION ${DATA_INSTALL_DIR}/icons/application/256x256/apps) +- +-add_custom_target(icons) +-add_custom_command(TARGET icons +- COMMAND bash ./icons/minify.sh +- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) +-if(APPLE) +- add_custom_command(TARGET icons +- COMMAND png2icns macosx/keepassxc.icns icons/application/256x256/apps/keepassxc.png +- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) +-endif() +- +-# ICO for Windows +-add_custom_command(TARGET icons +- COMMAND bash ./windows/create-ico.sh icons/application/scalable/apps/keepassxc.svg windows/keepassxc.ico +- COMMAND bash ./windows/create-ico.sh icons/application/scalable/mimetypes/application-x-keepassxc.svg windows/keepassxc-kdbx.ico +- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) +I file binari keepassxc-2.6.4-orig/share/demo.kdbx e keepassxc-2.6.4-patched/share/demo.kdbx sono diversi +diff -urNr keepassxc-2.6.4-orig/share/demo.key keepassxc-2.6.4-patched/share/demo.key +--- keepassxc-2.6.4-orig/share/demo.key 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/demo.key 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +-secret +I file binari keepassxc-2.6.4-orig/share/icons/application/256x256/apps/keepassxc.png e keepassxc-2.6.4-patched/share/icons/application/256x256/apps/keepassxc.png sono diversi +diff -urNr keepassxc-2.6.4-orig/share/icons/application/index.theme keepassxc-2.6.4-patched/share/icons/application/index.theme +--- keepassxc-2.6.4-orig/share/icons/application/index.theme 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/index.theme 1970-01-01 01:00:00.000000000 +0100 +@@ -1,45 +0,0 @@ +-[Icon Theme] +-Name=application +-Comment=KeePassXC Application Icon Theme +- +-Directories=256x256/apps,scalable/actions,scalable/apps,scalable/categories,scalable/mimetypes,scalable/status +- +-[scalable/actions] +-Size=48 +-Type=Scalable +-MinSize=1 +-MaxSize=256 +-Context=Actions +- +-[scalable/apps] +-Size=48 +-Type=Scalable +-MinSize=1 +-MaxSize=256 +-Context=Applications +- +-[scalable/categories] +-Size=48 +-Type=Scalable +-MinSize=1 +-MaxSize=256 +-Context=Categories +- +-[scalable/mimetypes] +-Size=48 +-Type=Scalable +-MinSize=1 +-MaxSize=256 +-Context=MimeTypes +- +-[scalable/status] +-Size=48 +-Type=Scalable +-MinSize=1 +-MaxSize=256 +-Context=Status +- +-[256x256/apps] +-Size=256 +-Type=Fixed +-Context=Applications +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/application-exit.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/application-exit.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/application-exit.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/application-exit.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/auto-type.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/auto-type.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/auto-type.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/auto-type.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/bugreport.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/bugreport.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/bugreport.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/bugreport.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/chevron-double-down.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/chevron-double-down.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/chevron-double-down.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/chevron-double-down.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/chevron-double-right.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/chevron-double-right.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/chevron-double-right.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/chevron-double-right.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/chronometer.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/chronometer.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/chronometer.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/chronometer.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/clipboard-text.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/clipboard-text.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/clipboard-text.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/clipboard-text.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/configure.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/configure.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/configure.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/configure.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/database-change-key.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/database-change-key.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/database-change-key.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/database-change-key.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/database-lock.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/database-lock.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/database-lock.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/database-lock.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/database-merge.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/database-merge.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/database-merge.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/database-merge.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/dialog-close.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/dialog-close.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/dialog-close.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/dialog-close.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/dialog-ok.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/dialog-ok.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/dialog-ok.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/dialog-ok.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-close.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-close.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-close.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-close.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-edit.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-edit.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-edit.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-edit.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-export.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-export.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-export.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-export.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-import.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-import.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-import.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-import.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-new.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-new.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-new.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-new.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-open-recent.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-open-recent.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-open-recent.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-open-recent.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-open.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-open.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-open.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-open.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-properties.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-properties.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-properties.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-properties.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-save-as.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-save-as.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-save-as.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-save-as.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-save-copy.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-save-copy.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-save-copy.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-save-copy.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-save.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-save.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/document-save.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/document-save.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/donate.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/donate.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/donate.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/donate.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/edit-clear-locationbar-ltr.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/edit-clear-locationbar-ltr.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/edit-clear-locationbar-ltr.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/edit-clear-locationbar-ltr.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/edit-clear-locationbar-rtl.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/edit-clear-locationbar-rtl.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/edit-clear-locationbar-rtl.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/edit-clear-locationbar-rtl.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/entry-clone.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/entry-clone.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/entry-clone.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/entry-clone.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/entry-delete.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/entry-delete.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/entry-delete.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/entry-delete.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/entry-edit.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/entry-edit.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/entry-edit.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/entry-edit.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/entry-new.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/entry-new.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/entry-new.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/entry-new.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/favicon-download.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/favicon-download.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/favicon-download.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/favicon-download.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/getting-started.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/getting-started.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/getting-started.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/getting-started.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/group-delete.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/group-delete.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/group-delete.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/group-delete.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/group-edit.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/group-edit.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/group-edit.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/group-edit.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/group-empty-trash.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/group-empty-trash.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/group-empty-trash.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/group-empty-trash.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/group-new.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/group-new.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/group-new.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/group-new.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/health.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/health.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/health.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/health.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/help-about.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/help-about.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/help-about.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/help-about.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/hibp.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/hibp.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/hibp.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/hibp.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +-haveibeenpwned icon +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/keyboard-shortcuts.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/keyboard-shortcuts.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/keyboard-shortcuts.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/keyboard-shortcuts.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/key-enter.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/key-enter.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/key-enter.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/key-enter.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/message-close.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/message-close.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/message-close.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/message-close.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/move-down.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/move-down.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/move-down.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/move-down.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/move-up.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/move-up.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/move-up.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/move-up.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/object-locked.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/object-locked.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/object-locked.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/object-locked.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/object-unlocked.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/object-unlocked.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/object-unlocked.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/object-unlocked.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/paperclip.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/paperclip.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/paperclip.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/paperclip.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/password-copy.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/password-copy.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/password-copy.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/password-copy.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/password-generate.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/password-generate.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/password-generate.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/password-generate.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/password-generator.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/password-generator.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/password-generator.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/password-generator.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/password-show-off.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/password-show-off.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/password-show-off.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/password-show-off.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/password-show-on.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/password-show-on.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/password-show-on.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/password-show-on.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/refresh.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/refresh.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/refresh.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/refresh.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/reports-exclude.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/reports-exclude.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/reports-exclude.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/reports-exclude.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/reports.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/reports.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/reports.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/reports.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/sort-alphabetical-ascending.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/sort-alphabetical-ascending.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/sort-alphabetical-ascending.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/sort-alphabetical-ascending.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/sort-alphabetical-descending.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/sort-alphabetical-descending.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/sort-alphabetical-descending.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/sort-alphabetical-descending.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/statistics.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/statistics.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/statistics.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/statistics.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/system-help.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/system-help.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/system-help.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/system-help.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/system-search.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/system-search.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/system-search.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/system-search.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/system-software-update.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/system-software-update.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/system-software-update.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/system-software-update.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/url-copy.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/url-copy.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/url-copy.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/url-copy.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/user-guide.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/user-guide.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/user-guide.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/user-guide.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/username-copy.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/username-copy.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/username-copy.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/username-copy.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/view-history.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/view-history.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/view-history.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/view-history.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/actions/web.svg keepassxc-2.6.4-patched/share/icons/application/scalable/actions/web.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/actions/web.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/actions/web.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/apps/freedesktop.svg keepassxc-2.6.4-patched/share/icons/application/scalable/apps/freedesktop.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/apps/freedesktop.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/apps/freedesktop.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +-freedesktop.org icon +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/apps/internet-web-browser.svg keepassxc-2.6.4-patched/share/icons/application/scalable/apps/internet-web-browser.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/apps/internet-web-browser.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/apps/internet-web-browser.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/apps/keepassxc-locked.svg keepassxc-2.6.4-patched/share/icons/application/scalable/apps/keepassxc-locked.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/apps/keepassxc-locked.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/apps/keepassxc-locked.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/apps/keepassxc-monochrome-dark-locked.svg keepassxc-2.6.4-patched/share/icons/application/scalable/apps/keepassxc-monochrome-dark-locked.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/apps/keepassxc-monochrome-dark-locked.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/apps/keepassxc-monochrome-dark-locked.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/apps/keepassxc-monochrome-dark.svg keepassxc-2.6.4-patched/share/icons/application/scalable/apps/keepassxc-monochrome-dark.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/apps/keepassxc-monochrome-dark.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/apps/keepassxc-monochrome-dark.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/apps/keepassxc-monochrome-light-locked.svg keepassxc-2.6.4-patched/share/icons/application/scalable/apps/keepassxc-monochrome-light-locked.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/apps/keepassxc-monochrome-light-locked.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/apps/keepassxc-monochrome-light-locked.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/apps/keepassxc-monochrome-light.svg keepassxc-2.6.4-patched/share/icons/application/scalable/apps/keepassxc-monochrome-light.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/apps/keepassxc-monochrome-light.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/apps/keepassxc-monochrome-light.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/apps/keepassxc.svg keepassxc-2.6.4-patched/share/icons/application/scalable/apps/keepassxc.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/apps/keepassxc.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/apps/keepassxc.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/apps/keepassxc-unlocked.svg keepassxc-2.6.4-patched/share/icons/application/scalable/apps/keepassxc-unlocked.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/apps/keepassxc-unlocked.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/apps/keepassxc-unlocked.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/apps/preferences-desktop-icons.svg keepassxc-2.6.4-patched/share/icons/application/scalable/apps/preferences-desktop-icons.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/apps/preferences-desktop-icons.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/apps/preferences-desktop-icons.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/apps/preferences-system-network-sharing.svg keepassxc-2.6.4-patched/share/icons/application/scalable/apps/preferences-system-network-sharing.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/apps/preferences-system-network-sharing.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/apps/preferences-system-network-sharing.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/apps/utilities-terminal.svg keepassxc-2.6.4-patched/share/icons/application/scalable/apps/utilities-terminal.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/apps/utilities-terminal.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/apps/utilities-terminal.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/categories/preferences-other.svg keepassxc-2.6.4-patched/share/icons/application/scalable/categories/preferences-other.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/categories/preferences-other.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/categories/preferences-other.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/mimetypes/application-x-keepassxc.svg keepassxc-2.6.4-patched/share/icons/application/scalable/mimetypes/application-x-keepassxc.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/mimetypes/application-x-keepassxc.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/mimetypes/application-x-keepassxc.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1,2 +0,0 @@ +- +- +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/status/dialog-error.svg keepassxc-2.6.4-patched/share/icons/application/scalable/status/dialog-error.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/status/dialog-error.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/status/dialog-error.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/status/dialog-information.svg keepassxc-2.6.4-patched/share/icons/application/scalable/status/dialog-information.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/status/dialog-information.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/status/dialog-information.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/status/dialog-warning.svg keepassxc-2.6.4-patched/share/icons/application/scalable/status/dialog-warning.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/status/dialog-warning.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/status/dialog-warning.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/application/scalable/status/security-high.svg keepassxc-2.6.4-patched/share/icons/application/scalable/status/security-high.svg +--- keepassxc-2.6.4-orig/share/icons/application/scalable/status/security-high.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/application/scalable/status/security-high.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/badges/0_ShareActive.svg keepassxc-2.6.4-patched/share/icons/badges/0_ShareActive.svg +--- keepassxc-2.6.4-orig/share/icons/badges/0_ShareActive.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/badges/0_ShareActive.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/badges/1_ShareInactive.svg keepassxc-2.6.4-patched/share/icons/badges/1_ShareInactive.svg +--- keepassxc-2.6.4-orig/share/icons/badges/1_ShareInactive.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/badges/1_ShareInactive.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/badges/2_Expired.svg keepassxc-2.6.4-patched/share/icons/badges/2_Expired.svg +--- keepassxc-2.6.4-orig/share/icons/badges/2_Expired.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/badges/2_Expired.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C00_Password.svg keepassxc-2.6.4-patched/share/icons/database/C00_Password.svg +--- keepassxc-2.6.4-orig/share/icons/database/C00_Password.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C00_Password.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C01_Package_Network.svg keepassxc-2.6.4-patched/share/icons/database/C01_Package_Network.svg +--- keepassxc-2.6.4-orig/share/icons/database/C01_Package_Network.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C01_Package_Network.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C02_MessageBox_Warning.svg keepassxc-2.6.4-patched/share/icons/database/C02_MessageBox_Warning.svg +--- keepassxc-2.6.4-orig/share/icons/database/C02_MessageBox_Warning.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C02_MessageBox_Warning.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C03_Server.svg keepassxc-2.6.4-patched/share/icons/database/C03_Server.svg +--- keepassxc-2.6.4-orig/share/icons/database/C03_Server.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C03_Server.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C04_Klipper.svg keepassxc-2.6.4-patched/share/icons/database/C04_Klipper.svg +--- keepassxc-2.6.4-orig/share/icons/database/C04_Klipper.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C04_Klipper.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C05_Edu_Languages.svg keepassxc-2.6.4-patched/share/icons/database/C05_Edu_Languages.svg +--- keepassxc-2.6.4-orig/share/icons/database/C05_Edu_Languages.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C05_Edu_Languages.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C06_KCMDF.svg keepassxc-2.6.4-patched/share/icons/database/C06_KCMDF.svg +--- keepassxc-2.6.4-orig/share/icons/database/C06_KCMDF.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C06_KCMDF.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C07_Kate.svg keepassxc-2.6.4-patched/share/icons/database/C07_Kate.svg +--- keepassxc-2.6.4-orig/share/icons/database/C07_Kate.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C07_Kate.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C08_Socket.svg keepassxc-2.6.4-patched/share/icons/database/C08_Socket.svg +--- keepassxc-2.6.4-orig/share/icons/database/C08_Socket.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C08_Socket.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C09_Identity.svg keepassxc-2.6.4-patched/share/icons/database/C09_Identity.svg +--- keepassxc-2.6.4-orig/share/icons/database/C09_Identity.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C09_Identity.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C10_Kontact.svg keepassxc-2.6.4-patched/share/icons/database/C10_Kontact.svg +--- keepassxc-2.6.4-orig/share/icons/database/C10_Kontact.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C10_Kontact.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C11_Camera.svg keepassxc-2.6.4-patched/share/icons/database/C11_Camera.svg +--- keepassxc-2.6.4-orig/share/icons/database/C11_Camera.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C11_Camera.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C12_IRKickFlash.svg keepassxc-2.6.4-patched/share/icons/database/C12_IRKickFlash.svg +--- keepassxc-2.6.4-orig/share/icons/database/C12_IRKickFlash.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C12_IRKickFlash.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C13_KGPG_Key3.svg keepassxc-2.6.4-patched/share/icons/database/C13_KGPG_Key3.svg +--- keepassxc-2.6.4-orig/share/icons/database/C13_KGPG_Key3.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C13_KGPG_Key3.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C14_Laptop_Power.svg keepassxc-2.6.4-patched/share/icons/database/C14_Laptop_Power.svg +--- keepassxc-2.6.4-orig/share/icons/database/C14_Laptop_Power.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C14_Laptop_Power.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C15_Scanner.svg keepassxc-2.6.4-patched/share/icons/database/C15_Scanner.svg +--- keepassxc-2.6.4-orig/share/icons/database/C15_Scanner.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C15_Scanner.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C16_Mozilla_Firebird.svg keepassxc-2.6.4-patched/share/icons/database/C16_Mozilla_Firebird.svg +--- keepassxc-2.6.4-orig/share/icons/database/C16_Mozilla_Firebird.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C16_Mozilla_Firebird.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C17_CDROM_Unmount.svg keepassxc-2.6.4-patched/share/icons/database/C17_CDROM_Unmount.svg +--- keepassxc-2.6.4-orig/share/icons/database/C17_CDROM_Unmount.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C17_CDROM_Unmount.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C18_Display.svg keepassxc-2.6.4-patched/share/icons/database/C18_Display.svg +--- keepassxc-2.6.4-orig/share/icons/database/C18_Display.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C18_Display.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C19_Mail_Generic.svg keepassxc-2.6.4-patched/share/icons/database/C19_Mail_Generic.svg +--- keepassxc-2.6.4-orig/share/icons/database/C19_Mail_Generic.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C19_Mail_Generic.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C20_Misc.svg keepassxc-2.6.4-patched/share/icons/database/C20_Misc.svg +--- keepassxc-2.6.4-orig/share/icons/database/C20_Misc.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C20_Misc.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C21_KOrganizer.svg keepassxc-2.6.4-patched/share/icons/database/C21_KOrganizer.svg +--- keepassxc-2.6.4-orig/share/icons/database/C21_KOrganizer.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C21_KOrganizer.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C22_ASCII.svg keepassxc-2.6.4-patched/share/icons/database/C22_ASCII.svg +--- keepassxc-2.6.4-orig/share/icons/database/C22_ASCII.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C22_ASCII.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C23_Icons.svg keepassxc-2.6.4-patched/share/icons/database/C23_Icons.svg +--- keepassxc-2.6.4-orig/share/icons/database/C23_Icons.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C23_Icons.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C24_Connect_Established.svg keepassxc-2.6.4-patched/share/icons/database/C24_Connect_Established.svg +--- keepassxc-2.6.4-orig/share/icons/database/C24_Connect_Established.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C24_Connect_Established.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C25_Folder_Mail.svg keepassxc-2.6.4-patched/share/icons/database/C25_Folder_Mail.svg +--- keepassxc-2.6.4-orig/share/icons/database/C25_Folder_Mail.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C25_Folder_Mail.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C26_FileSave.svg keepassxc-2.6.4-patched/share/icons/database/C26_FileSave.svg +--- keepassxc-2.6.4-orig/share/icons/database/C26_FileSave.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C26_FileSave.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C27_NFS_Unmount.svg keepassxc-2.6.4-patched/share/icons/database/C27_NFS_Unmount.svg +--- keepassxc-2.6.4-orig/share/icons/database/C27_NFS_Unmount.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C27_NFS_Unmount.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C28_QuickTime.svg keepassxc-2.6.4-patched/share/icons/database/C28_QuickTime.svg +--- keepassxc-2.6.4-orig/share/icons/database/C28_QuickTime.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C28_QuickTime.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C29_KGPG_Term.svg keepassxc-2.6.4-patched/share/icons/database/C29_KGPG_Term.svg +--- keepassxc-2.6.4-orig/share/icons/database/C29_KGPG_Term.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C29_KGPG_Term.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +->_ +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C30_Konsole.svg keepassxc-2.6.4-patched/share/icons/database/C30_Konsole.svg +--- keepassxc-2.6.4-orig/share/icons/database/C30_Konsole.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C30_Konsole.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +->_ +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C31_FilePrint.svg keepassxc-2.6.4-patched/share/icons/database/C31_FilePrint.svg +--- keepassxc-2.6.4-orig/share/icons/database/C31_FilePrint.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C31_FilePrint.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C32_FSView.svg keepassxc-2.6.4-patched/share/icons/database/C32_FSView.svg +--- keepassxc-2.6.4-orig/share/icons/database/C32_FSView.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C32_FSView.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C33_Run.svg keepassxc-2.6.4-patched/share/icons/database/C33_Run.svg +--- keepassxc-2.6.4-orig/share/icons/database/C33_Run.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C33_Run.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C34_Configure.svg keepassxc-2.6.4-patched/share/icons/database/C34_Configure.svg +--- keepassxc-2.6.4-orig/share/icons/database/C34_Configure.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C34_Configure.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C35_KRFB.svg keepassxc-2.6.4-patched/share/icons/database/C35_KRFB.svg +--- keepassxc-2.6.4-orig/share/icons/database/C35_KRFB.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C35_KRFB.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C36_Ark.svg keepassxc-2.6.4-patched/share/icons/database/C36_Ark.svg +--- keepassxc-2.6.4-orig/share/icons/database/C36_Ark.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C36_Ark.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C37_KPercentage.svg keepassxc-2.6.4-patched/share/icons/database/C37_KPercentage.svg +--- keepassxc-2.6.4-orig/share/icons/database/C37_KPercentage.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C37_KPercentage.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C38_Samba_Unmount.svg keepassxc-2.6.4-patched/share/icons/database/C38_Samba_Unmount.svg +--- keepassxc-2.6.4-orig/share/icons/database/C38_Samba_Unmount.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C38_Samba_Unmount.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C39_History.svg keepassxc-2.6.4-patched/share/icons/database/C39_History.svg +--- keepassxc-2.6.4-orig/share/icons/database/C39_History.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C39_History.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C40_Mail_Find.svg keepassxc-2.6.4-patched/share/icons/database/C40_Mail_Find.svg +--- keepassxc-2.6.4-orig/share/icons/database/C40_Mail_Find.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C40_Mail_Find.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C41_VectorGfx.svg keepassxc-2.6.4-patched/share/icons/database/C41_VectorGfx.svg +--- keepassxc-2.6.4-orig/share/icons/database/C41_VectorGfx.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C41_VectorGfx.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C42_KCMMemory.svg keepassxc-2.6.4-patched/share/icons/database/C42_KCMMemory.svg +--- keepassxc-2.6.4-orig/share/icons/database/C42_KCMMemory.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C42_KCMMemory.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C43_EditTrash.svg keepassxc-2.6.4-patched/share/icons/database/C43_EditTrash.svg +--- keepassxc-2.6.4-orig/share/icons/database/C43_EditTrash.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C43_EditTrash.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C44_KNotes.svg keepassxc-2.6.4-patched/share/icons/database/C44_KNotes.svg +--- keepassxc-2.6.4-orig/share/icons/database/C44_KNotes.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C44_KNotes.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C45_Cancel.svg keepassxc-2.6.4-patched/share/icons/database/C45_Cancel.svg +--- keepassxc-2.6.4-orig/share/icons/database/C45_Cancel.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C45_Cancel.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C46_Help.svg keepassxc-2.6.4-patched/share/icons/database/C46_Help.svg +--- keepassxc-2.6.4-orig/share/icons/database/C46_Help.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C46_Help.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C47_KPackage.svg keepassxc-2.6.4-patched/share/icons/database/C47_KPackage.svg +--- keepassxc-2.6.4-orig/share/icons/database/C47_KPackage.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C47_KPackage.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C48_Folder.svg keepassxc-2.6.4-patched/share/icons/database/C48_Folder.svg +--- keepassxc-2.6.4-orig/share/icons/database/C48_Folder.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C48_Folder.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C49_Folder_Blue_Open.svg keepassxc-2.6.4-patched/share/icons/database/C49_Folder_Blue_Open.svg +--- keepassxc-2.6.4-orig/share/icons/database/C49_Folder_Blue_Open.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C49_Folder_Blue_Open.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C50_Folder_Tar.svg keepassxc-2.6.4-patched/share/icons/database/C50_Folder_Tar.svg +--- keepassxc-2.6.4-orig/share/icons/database/C50_Folder_Tar.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C50_Folder_Tar.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C51_Decrypted.svg keepassxc-2.6.4-patched/share/icons/database/C51_Decrypted.svg +--- keepassxc-2.6.4-orig/share/icons/database/C51_Decrypted.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C51_Decrypted.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C52_Encrypted.svg keepassxc-2.6.4-patched/share/icons/database/C52_Encrypted.svg +--- keepassxc-2.6.4-orig/share/icons/database/C52_Encrypted.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C52_Encrypted.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C53_Apply.svg keepassxc-2.6.4-patched/share/icons/database/C53_Apply.svg +--- keepassxc-2.6.4-orig/share/icons/database/C53_Apply.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C53_Apply.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C54_Signature.svg keepassxc-2.6.4-patched/share/icons/database/C54_Signature.svg +--- keepassxc-2.6.4-orig/share/icons/database/C54_Signature.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C54_Signature.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C55_Thumbnail.svg keepassxc-2.6.4-patched/share/icons/database/C55_Thumbnail.svg +--- keepassxc-2.6.4-orig/share/icons/database/C55_Thumbnail.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C55_Thumbnail.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C56_KAddressBook.svg keepassxc-2.6.4-patched/share/icons/database/C56_KAddressBook.svg +--- keepassxc-2.6.4-orig/share/icons/database/C56_KAddressBook.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C56_KAddressBook.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C57_View_Text.svg keepassxc-2.6.4-patched/share/icons/database/C57_View_Text.svg +--- keepassxc-2.6.4-orig/share/icons/database/C57_View_Text.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C57_View_Text.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C58_KGPG.svg keepassxc-2.6.4-patched/share/icons/database/C58_KGPG.svg +--- keepassxc-2.6.4-orig/share/icons/database/C58_KGPG.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C58_KGPG.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C58_KPGP.svg keepassxc-2.6.4-patched/share/icons/database/C58_KPGP.svg +--- keepassxc-2.6.4-orig/share/icons/database/C58_KPGP.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C58_KPGP.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C59_Package_Development.svg keepassxc-2.6.4-patched/share/icons/database/C59_Package_Development.svg +--- keepassxc-2.6.4-orig/share/icons/database/C59_Package_Development.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C59_Package_Development.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C60_KFM_Home.svg keepassxc-2.6.4-patched/share/icons/database/C60_KFM_Home.svg +--- keepassxc-2.6.4-orig/share/icons/database/C60_KFM_Home.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C60_KFM_Home.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C61_Services.svg keepassxc-2.6.4-patched/share/icons/database/C61_Services.svg +--- keepassxc-2.6.4-orig/share/icons/database/C61_Services.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C61_Services.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C62_Tux.svg keepassxc-2.6.4-patched/share/icons/database/C62_Tux.svg +--- keepassxc-2.6.4-orig/share/icons/database/C62_Tux.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C62_Tux.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C63_Feather.svg keepassxc-2.6.4-patched/share/icons/database/C63_Feather.svg +--- keepassxc-2.6.4-orig/share/icons/database/C63_Feather.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C63_Feather.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C64_Apple.svg keepassxc-2.6.4-patched/share/icons/database/C64_Apple.svg +--- keepassxc-2.6.4-orig/share/icons/database/C64_Apple.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C64_Apple.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C65_W.svg keepassxc-2.6.4-patched/share/icons/database/C65_W.svg +--- keepassxc-2.6.4-orig/share/icons/database/C65_W.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C65_W.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C66_Money.svg keepassxc-2.6.4-patched/share/icons/database/C66_Money.svg +--- keepassxc-2.6.4-orig/share/icons/database/C66_Money.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C66_Money.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C67_Certificate.svg keepassxc-2.6.4-patched/share/icons/database/C67_Certificate.svg +--- keepassxc-2.6.4-orig/share/icons/database/C67_Certificate.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C67_Certificate.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/database/C68_BlackBerry.svg keepassxc-2.6.4-patched/share/icons/database/C68_BlackBerry.svg +--- keepassxc-2.6.4-orig/share/icons/database/C68_BlackBerry.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/database/C68_BlackBerry.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/icons/icons.qrc keepassxc-2.6.4-patched/share/icons/icons.qrc +--- keepassxc-2.6.4-orig/share/icons/icons.qrc 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/icons.qrc 1970-01-01 01:00:00.000000000 +0100 +@@ -1,172 +0,0 @@ +- +- +- +- application/index.theme +- +- application/256x256/apps/keepassxc.png +- +- application/scalable/actions/application-exit.svg +- application/scalable/actions/auto-type.svg +- application/scalable/actions/bugreport.svg +- application/scalable/actions/chevron-double-down.svg +- application/scalable/actions/chevron-double-right.svg +- application/scalable/actions/chronometer.svg +- application/scalable/actions/clipboard-text.svg +- application/scalable/actions/configure.svg +- application/scalable/actions/database-change-key.svg +- application/scalable/actions/database-lock.svg +- application/scalable/actions/database-merge.svg +- application/scalable/actions/dialog-close.svg +- application/scalable/actions/dialog-ok.svg +- application/scalable/actions/document-close.svg +- application/scalable/actions/document-edit.svg +- application/scalable/actions/document-export.svg +- application/scalable/actions/document-import.svg +- application/scalable/actions/document-new.svg +- application/scalable/actions/document-open.svg +- application/scalable/actions/document-open-recent.svg +- application/scalable/actions/document-properties.svg +- application/scalable/actions/document-save.svg +- application/scalable/actions/document-save-as.svg +- application/scalable/actions/document-save-copy.svg +- application/scalable/actions/donate.svg +- application/scalable/actions/edit-clear-locationbar-ltr.svg +- application/scalable/actions/edit-clear-locationbar-rtl.svg +- application/scalable/actions/entry-clone.svg +- application/scalable/actions/entry-delete.svg +- application/scalable/actions/entry-edit.svg +- application/scalable/actions/entry-new.svg +- application/scalable/actions/favicon-download.svg +- application/scalable/actions/getting-started.svg +- application/scalable/actions/group-delete.svg +- application/scalable/actions/group-edit.svg +- application/scalable/actions/group-empty-trash.svg +- application/scalable/actions/group-new.svg +- application/scalable/actions/health.svg +- application/scalable/actions/help-about.svg +- application/scalable/actions/hibp.svg +- application/scalable/actions/key-enter.svg +- application/scalable/actions/keyboard-shortcuts.svg +- application/scalable/actions/message-close.svg +- application/scalable/actions/move-down.svg +- application/scalable/actions/move-up.svg +- application/scalable/actions/object-locked.svg +- application/scalable/actions/object-unlocked.svg +- application/scalable/actions/paperclip.svg +- application/scalable/actions/password-copy.svg +- application/scalable/actions/password-generate.svg +- application/scalable/actions/password-generator.svg +- application/scalable/actions/password-show-off.svg +- application/scalable/actions/password-show-on.svg +- application/scalable/actions/refresh.svg +- application/scalable/actions/reports.svg +- application/scalable/actions/reports-exclude.svg +- application/scalable/actions/sort-alphabetical-ascending.svg +- application/scalable/actions/sort-alphabetical-descending.svg +- application/scalable/actions/statistics.svg +- application/scalable/actions/system-help.svg +- application/scalable/actions/system-search.svg +- application/scalable/actions/system-software-update.svg +- application/scalable/actions/url-copy.svg +- application/scalable/actions/user-guide.svg +- application/scalable/actions/username-copy.svg +- application/scalable/actions/view-history.svg +- application/scalable/actions/web.svg +- +- application/scalable/apps/freedesktop.svg +- application/scalable/apps/internet-web-browser.svg +- application/scalable/apps/keepassxc.svg +- application/scalable/apps/keepassxc-monochrome-dark.svg +- application/scalable/apps/keepassxc-monochrome-dark-locked.svg +- application/scalable/apps/keepassxc-monochrome-light.svg +- application/scalable/apps/keepassxc-monochrome-light-locked.svg +- application/scalable/apps/keepassxc-locked.svg +- application/scalable/apps/keepassxc-unlocked.svg +- application/scalable/apps/preferences-desktop-icons.svg +- application/scalable/apps/preferences-system-network-sharing.svg +- application/scalable/apps/utilities-terminal.svg +- +- application/scalable/categories/preferences-other.svg +- +- application/scalable/mimetypes/application-x-keepassxc.svg +- +- application/scalable/status/dialog-error.svg +- application/scalable/status/dialog-information.svg +- application/scalable/status/dialog-warning.svg +- application/scalable/status/security-high.svg +- +- database/C00_Password.svg +- database/C01_Package_Network.svg +- database/C02_MessageBox_Warning.svg +- database/C03_Server.svg +- database/C04_Klipper.svg +- database/C05_Edu_Languages.svg +- database/C06_KCMDF.svg +- database/C07_Kate.svg +- database/C08_Socket.svg +- database/C09_Identity.svg +- database/C10_Kontact.svg +- database/C11_Camera.svg +- database/C12_IRKickFlash.svg +- database/C13_KGPG_Key3.svg +- database/C14_Laptop_Power.svg +- database/C15_Scanner.svg +- database/C16_Mozilla_Firebird.svg +- database/C17_CDROM_Unmount.svg +- database/C18_Display.svg +- database/C19_Mail_Generic.svg +- database/C20_Misc.svg +- database/C21_KOrganizer.svg +- database/C22_ASCII.svg +- database/C23_Icons.svg +- database/C24_Connect_Established.svg +- database/C25_Folder_Mail.svg +- database/C26_FileSave.svg +- database/C27_NFS_Unmount.svg +- database/C28_QuickTime.svg +- database/C29_KGPG_Term.svg +- database/C30_Konsole.svg +- database/C31_FilePrint.svg +- database/C32_FSView.svg +- database/C33_Run.svg +- database/C34_Configure.svg +- database/C35_KRFB.svg +- database/C36_Ark.svg +- database/C37_KPercentage.svg +- database/C38_Samba_Unmount.svg +- database/C39_History.svg +- database/C40_Mail_Find.svg +- database/C41_VectorGfx.svg +- database/C42_KCMMemory.svg +- database/C43_EditTrash.svg +- database/C44_KNotes.svg +- database/C45_Cancel.svg +- database/C46_Help.svg +- database/C47_KPackage.svg +- database/C48_Folder.svg +- database/C49_Folder_Blue_Open.svg +- database/C50_Folder_Tar.svg +- database/C51_Decrypted.svg +- database/C52_Encrypted.svg +- database/C53_Apply.svg +- database/C54_Signature.svg +- database/C55_Thumbnail.svg +- database/C56_KAddressBook.svg +- database/C57_View_Text.svg +- database/C58_KGPG.svg +- database/C59_Package_Development.svg +- database/C60_KFM_Home.svg +- database/C61_Services.svg +- database/C62_Tux.svg +- database/C63_Feather.svg +- database/C64_Apple.svg +- database/C65_W.svg +- database/C66_Money.svg +- database/C67_Certificate.svg +- database/C68_BlackBerry.svg +- +- badges/0_ShareActive.svg +- badges/1_ShareInactive.svg +- badges/2_Expired.svg +- +- +diff -urNr keepassxc-2.6.4-orig/share/icons/minify.sh keepassxc-2.6.4-patched/share/icons/minify.sh +--- keepassxc-2.6.4-orig/share/icons/minify.sh 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/icons/minify.sh 1970-01-01 01:00:00.000000000 +0100 +@@ -1,21 +0,0 @@ +-#!/usr/bin/env bash +- +-NC='\033[0m' +-YELLOW='\033[0;33m' +- +-# Build desktop icon +-echo "Creating desktop icon PNG..." +-if command -v "inkscape" &> /dev/null; then +- inkscape -z -w 256 -h 256 icons/application/scalable/apps/keepassxc.svg -e icons/application/256x256/apps/keepassxc.png +-else +- echo -e "${YELLOW}Could not find inkscape; keepassxc.png not built!${NC}" +-fi +- +-# Minify SVG's +-echo "Minifying SVG's..." +-minify -o icons/badges --match=.svg icons/badges +-minify -o icons/database --match=.svg icons/database +- +-# Crush PNG's +-echo "Crushing PNG's..." +-find "." -iname '*png' -exec pngcrush -ow -brute {} \; +diff -urNr keepassxc-2.6.4-orig/share/linux/keepassxc.xml keepassxc-2.6.4-patched/share/linux/keepassxc.xml +--- keepassxc-2.6.4-orig/share/linux/keepassxc.xml 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/linux/keepassxc.xml 1970-01-01 01:00:00.000000000 +0100 +@@ -1,8 +0,0 @@ +- +- +- +- KeePass 2 Database +- +- +- +- +diff -urNr keepassxc-2.6.4-orig/share/linux/org.keepassxc.KeePassXC.appdata.xml keepassxc-2.6.4-patched/share/linux/org.keepassxc.KeePassXC.appdata.xml +--- keepassxc-2.6.4-orig/share/linux/org.keepassxc.KeePassXC.appdata.xml 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/linux/org.keepassxc.KeePassXC.appdata.xml 1970-01-01 01:00:00.000000000 +0100 +@@ -1,804 +0,0 @@ +- +- +- +- org.keepassxc.KeePassXC.desktop +- KeePassXC +- CC-BY-3.0 +- GPL-3.0+ +- +- application/x-keepass2 +- +- Community-driven port of the Windows application “KeePass Password Safe†+- KeePassXC Team +- +-

+- KeePassXC is an application for people with extremely high demands on secure +- personal data management. It has a light interface, is cross-platform and +- published under the terms of the GNU General Public License. +-

+-
+- +- org.keepassxc.KeePassXC.desktop +- +- https://keepassxc.org +- https://github.com/keepassxreboot/keepassxc/issues +- https://keepassxc.org/docs#faq +- https://keepassxc.org/docs +- https://www.transifex.com/keepassxc/keepassxc +- +- +- +- https://keepassxc.org/images/screenshots/thumbs/welcome_screen.png +- Create, Import or Open Databases +- +- +- https://keepassxc.org/images/screenshots/thumbs/database_view.png +- Organize with Groups and Entries +- +- +- https://keepassxc.org/images/screenshots/thumbs/edit_entry.png +- Database Entry +- +- +- https://keepassxc.org/images/screenshots/thumbs/edit_entry_icons.png +- Icon Selection for Entry +- +- +- https://keepassxc.org/images/screenshots/thumbs/password_generator_advanced.png +- Password Generator +- +- +- +- +- +- +-
    +-
  • Automatically adapt to light/dark system theme changes (Windows/macOS only) [#6034]
  • +-
  • Show window title as tooltip on system tray [#5948]
  • +-
  • Compress Snap release as LZO for faster initial startup [#5877]
  • +-
  • Password generator: Set maximum selectable password length to 999 [#5937]
  • +-
  • Fix crash on app close when using SSH agent [#5935]
  • +-
  • Fix KDF selection showing wrong item when using Argon2id [#5923]
  • +-
  • Automatically close About dialog on database lock if it is still open [#5947]
  • +-
  • Linux: Fix automatic launch at system startup with AppImages [#5901]
  • +-
  • Linux: Fix click-to-move on empty area activating when using menus [#5971]
  • +-
  • Linux: Try multiple times to show tray icon if tray is not ready yet [#5948]
  • +-
  • macOS: Fix KeePassXC blocking clean shutdown [#6002]
  • +-
+-
+-
+- +- +-
    +-
  • Support Argon2id KDF [#5778]
  • +-
  • Support XMLv2 key files [#5798]
  • +-
  • Improve CSV Import/Export, include time fields and TOTP [#5346]
  • +-
  • Support empty area dragging of the application window [#5860]
  • +-
  • Display default Auto-Type sequence in preview pane [#5654]
  • +-
  • Remove strict length limit on generated passwords [#5748]
  • +-
  • Hide key file path by default when unlocking database [#5779]
  • +-
  • Document browser extension use with Edge in managed mode [#5692]
  • +-
  • Windows: Prevent clipboard history and cloud sync [#5853]
  • +-
  • macOS: Update the application icon to Big Sur styling [#5851]
  • +-
  • Re-select previously selected entry on database unlock [#5559]
  • +-
  • Properly save special character choice in password generator [#5610]
  • +-
  • Fix crash in browser integration with multiple similar entries [#5653]
  • +-
  • Remove offset on username field in classic theme [#5788]
  • +-
  • Ensure entry history is copied when drag/dropping entries and groups [#5817]
  • +-
  • Close modal dialogs when database is locked [#5820]
  • +-
  • Prevent crash when KeeShare modifies an entry that is currently being edited [#5827]
  • +-
  • Improve preview of entry attributes [#5834]
  • +-
  • Always activate/focus database open dialog preventing mistype [#5878]
  • +-
  • Reports: fix calculation of average password length [#5862]
  • +-
  • Linux: Delay startup on login to correct tray icon issues [#5724]
  • +-
+-
+-
+- +- +-
    +-
  • Add option to keep window always on top to view menu [#5542]
  • +-
  • Move show/hide usernames and passwords to view menu [#5542]
  • +-
  • Add command line options and environment variables for changing the config locations [#5452]
  • +-
  • Include TOTP settings in CSV import/export and add support for ISO datetimes [#5346]
  • +-
  • Mask sensitive information in command execution confirmation prompt [#5542]
  • +-
  • SSH Agent: Avoid shortcut conflict on macOS by changing "Add key" to Ctrl+H on all platforms [#5484]
  • +-
  • Prevent data loss with drag and drop between databases [#5536]
  • +-
  • Fix crash when toggling Capslock rapidly [#5545]
  • +-
  • Don't mark URL references as invalid URL [#5380]
  • +-
  • Reset entry preview after search [#5483]
  • +-
  • Set Qt::Dialog flag on database open dialog [#5356]
  • +-
  • Fix sorting of database report columns [#5426]
  • +-
  • Fix IfDevice matching logic [#5344]
  • +-
  • Fix layout issues and a stray scrollbar appearing on top of the entry edit screen [#5424]
  • +-
  • Fix tabbing into the notes field [#5424]
  • +-
  • Fix password generator ignoring settings on load [#5340]
  • +-
  • Restore natural entry sort order on application load [#5438]
  • +-
  • Fix paperclip and TOTP columns not saving state [#5327]
  • +-
  • Enforce fixed password font in entry preview [#5454]
  • +-
  • Add scrollbar when new database wizard exceeds screen size [#5560]
  • +-
  • Do not mark database as modified when viewing Auto-Type associations [#5542]
  • +-
  • CLI: Fix two heap-use-after-free crashes [#5368,#5470]
  • +-
  • Browser: Fix key exchange not working with multiple simultaneous users on Windows [#5485]
  • +-
  • Browser: Fix entry retrieval when "only best matching" is enabled [#5316]
  • +-
  • Browser: Ignore recycle bin on KeePassHTTP migration [#5481]
  • +-
  • KeeShare: Fix import crash [#5542]
  • +-
  • macOS: Fix toolbar theming and breadcrumb display issues [#5482]
  • +-
  • macOS: Fix file dialog randomly closing [#5479]
  • +-
  • macOS: Fix being unable to select OPVault files for import [#5341]
  • +-
+-
+-
+- +- +-
    +-
  • Add menu entries for auto-typing only username or only password [#4891]
  • +-
  • Browser: Add command for retrieving current TOTP [#5278]
  • +-
  • Improve man pages [#5010]
  • +-
  • Linux: Support Xfce screen lock signals [#4971]
  • +-
  • Linux: Add OARS metadata to AppStream markup [#5031]
  • +-
  • SSH Agent: Substitute tilde with %USERPROFILE% on Windows [#5116]
  • +-
  • Improve password generator UI and UX [#5129]
  • +-
  • Do not prompt to restart if switching the theme back and forth [#5084]
  • +-
  • Change actions for F1, F2, and F3 keys [#5082]
  • +-
  • Skip referenced passwords in health check report [#5056]
  • +-
  • Check system-wide Qt translations directory for downstream translations packaging [#5064]
  • +-
  • macOS: Change password visibility toggle shortcut to Ctrl+H to avoid conflict with system shortcut [#5114]
  • +-
  • Browser: Only display domain name in browser access confirm dialog to avoid overly wide window sizes [#5214]
  • +-
  • Fix clipboard not being cleared when database is locked while timeout is still active [#5184]
  • +-
  • Fix list of previous databases not being cleared in some cases [#5123]
  • +-
  • Fix saving of non-data changes on database lock [#5210]
  • +-
  • Fix search results banner theming [#5197]
  • +-
  • Don't enforce theme palette in Classic theme mode and add hover effect for buttons [#5122,#5267]
  • +-
  • Fix label clipping in settings on high-DPI screens [#5227]
  • +-
  • Fix excessive memory usage by icons on systems with high-DPI screens [#5266]
  • +-
  • Fix crash if number of TOTP digits exceeds ten [#5106]
  • +-
  • Fix slot detection when first YubiKey is configured on the second slot [#5004]
  • +-
  • Prevent crash if focus widget gets deleted during saving [#5005]
  • +-
  • Always show buttons for opening or saving attachments [#4956]
  • +-
  • Update link to Auto-Type help [#5228]
  • +-
  • Fix build errors with Ninja [#5121]
  • +-
  • CLI: Fix db-info command wrongly labelled as db-show in usage listing [#5140]
  • +-
  • Windows: Use Classic theme by default if high-contrast mode is on [#5191]
  • +-
  • Linux: Add workaround for qt5ct bug, causing icons not to show up [#5011]
  • +-
  • Linux: Correct high-DPI display by not allowing fractional scaling [#5185]
  • +-
  • Browser: Consider subdomain and path when requesting only "best-matching credentials" [#4832]
  • +-
  • SSH Agent: Always forget all keys on lock [#5115]
  • +-
+-
+-
+- +- +-
    +-
  • Custom Light and Dark themes [#4110, #4769, #4791, #4892, #4915]
  • +-
  • Compact mode to use classic Group and Entry line height [#4910]
  • +-
  • New monochrome tray icons [#4796, #4803]
  • +-
  • View menu to quickly switch themes, compact mode, and toggle UI elements [#4910]
  • +-
  • Search for groups and scope search to matched groups [#4705]
  • +-
  • Save Database Backup feature [#4550]
  • +-
  • Sort entries by "natural order" and move lines up/down [#4357]
  • +-
  • Option to launch KeePassXC on system startup/login [#4675]
  • +-
  • Caps Lock warning on password input fields [#3646]
  • +-
  • Add "Size" column to entry view [#4588]
  • +-
  • Browser-like tab experience using Ctrl+[Num] (Alt+[Num] on Linux) [#4063, #4305]
  • +-
  • Password Generator: Define additional characters to choose from [#3876]
  • +-
  • Reports: Database password health check (offline) [#3993]
  • +-
  • Reports: HIBP online service to check for breached passwords [#4438]
  • +-
  • Auto-Type: DateTime placeholders [#4409]
  • +-
  • Browser: Show group name in results sent to browser extension [#4111]
  • +-
  • Browser: Ability to define a custom browser location (macOS and Linux only) [#4148]
  • +-
  • Browser: Ability to change root group UUID and inline edit connection ID [#4315, #4591]
  • +-
  • CLI: `db-info` command [#4231]
  • +-
  • CLI: Use wl-clipboard if xclip is not available (Linux) [#4323]
  • +-
  • CLI: Incorporate xclip into snap builds [#4697]
  • +-
  • SSH Agent: Key file path env substitution, SSH_AUTH_SOCK override, and connection test [#3769, #3801, #4545]
  • +-
  • SSH Agent: Context menu actions to add/remove keys [#4290]
  • +-
  • Complete replacement of default database icons [#4699]
  • +-
  • Complete replacement of application icons [#4066, #4161, #4203, #4411]
  • +-
  • Complete rewrite of documentation and manpages using Asciidoctor [#4937]
  • +-
  • Complete refactor of config files; separate between local and roaming [#4665]
  • +-
  • Complete refactor of browser integration and proxy code [#4680]
  • +-
  • Complete refactor of hardware key integration (YubiKey and OnlyKey) [#4584, #4843]
  • +-
  • Significantly improve performance when saving and opening databases [#4309, #4833]
  • +-
  • Remove read-only detection for database files [#4508]
  • +-
  • Overhaul of password fields and password generator [#4367]
  • +-
  • Replace instances of "Master Key" with "Database Credentials" [#4929]
  • +-
  • Change settings checkboxes to positive phrasing for consistency [#4715]
  • +-
  • Improve UX of using entry actions (focus fix) [#3893]
  • +-
  • Set expiration time to Now when enabling entry expiration [#4406]
  • +-
  • Always show "New Entry" in context menu [#4617]
  • +-
  • Issue warning before adding large attachments [#4651]
  • +-
  • Improve importing OPVault [#4630]
  • +-
  • Improve AutoOpen capability [#3901, #4752]
  • +-
  • Check for updates every 7 days even while still running [#4752]
  • +-
  • Improve Windows installer UI/UX [#4675]
  • +-
  • Improve config file handling of portable distribution [#4131, #4752]
  • +-
  • macOS: Hide dock icon when application is hidden to tray [#4782]
  • +-
  • Browser: Use unlock dialog to improve UX of opening a locked database [#3698]
  • +-
  • Browser: Improve database and entry settings experience [#4392, #4591]
  • +-
  • Browser: Improve confirm access dialog [#2143, #4660]
  • +-
  • KeeShare: Improve monitoring file changes of shares [#4720]
  • +-
  • CLI: Rename `create` command to `db-create` [#4231]
  • +-
  • CLI: Cleanup `db-create` options (`--set-key-file` and `--set-password`) [#4313]
  • +-
  • CLI: Use stderr for help text and password prompts [#4086, #4623]
  • +-
  • FdoSecrets: Display existing secret service process [#4128]
  • +-
  • Fix changing focus around the main window using tab key [#4641]
  • +-
  • Fix search field clearing while still using the application [#4368]
  • +-
  • Improve search help widget displaying on macOS and Linux [#4236]
  • +-
  • Return keyboard focus after editing an entry [#4287]
  • +-
  • Reset database path after failed "Save As" [#4526]
  • +-
  • Make builds reproducible [#4411]
  • +-
  • Improve handling of ccache when building [#4104, #4335]
  • +-
  • Windows: Use correct UI font and size [#4769]
  • +-
  • macOS: Properly re-hide application window after browser integration and Auto-Type usage [#4909]
  • +-
  • Linux: Fix version number not embedded in AppImage [#4842]
  • +-
  • Auto-Type: Fix crash when performing on new entry [#4132]
  • +-
  • Browser: Send legacy HTTP settings to recycle bin [#4589]
  • +-
  • Browser: Fix merging browser keys [#4685]
  • +-
  • CLI: Fix encoding when exporting database [#3921]
  • +-
  • SSH Agent: Improve reliability and underlying code [#3833, #4256, #4549, #4595]
  • +-
  • FdoSecrets: Fix crash when editing settings before service is enabled [#4332]
  • +-
+-
+-
+- +- +-
    +-
  • Return keyboard focus after saving database edits [#4287]
  • +-
  • Windows: Use bare minimum settings in portable version [#4131]
  • +-
  • Windows: Use SHA256 code signing [#4129]
  • +-
  • macOS: Fix code signing incompatibility in latest macOS release [#4564]
  • +-
+-
+-
+- +- +-
    +-
  • Fix a possible database lockout when removing a YubiKey from a KDBX 3.1 database [#4147]
  • +-
  • Fix crash if Auto-Type is performed on a new entry [#4150]
  • +-
  • Fix crash when all entries are deleted from a group [#4156]
  • +-
  • Improve the reliability of clipboard clearing on Gnome [#4165]
  • +-
  • Do not check cmd:// URLs for valid URL syntax anymore [#4172]
  • +-
  • Prevent unnecessary merges for databases on network shares [#4153]
  • +-
  • Browser: Prevent native messaging proxy from blocking application shutdown [#4155]
  • +-
  • Browser: Improve website URL matching [#4134, #4177]
  • +-
+-
+-
+- +- +-
    +-
  • Browser: Show UI warning when entering invalid URLs [#3912]
  • +-
  • Browser: Option to use an entry only for HTTP auth [#3927]
  • +-
  • Disable the user interface when merging or saving the database [#3991]
  • +-
  • Ability to hide protected attribute after reveal [#3877]
  • +-
  • Remove mention of "snaps" in Windows and macOS [#3879]
  • +-
  • CLI: Merge parameter for source database key file (--key-file-from) [#3961]
  • +-
  • Improve GUI tests reliability on Hi-DPI displays [#4075]
  • +-
  • Disable deprecation warnings to allow building with Qt 5.14+ [#4075]
  • +-
  • OPVault: Use 'otp' attribute for TOTP field imports [#4075]
  • +-
  • Fix crashes when saving a database to cloud storage [#3991]
  • +-
  • Fix crash when pressing enter twice while opening database [#3885]
  • +-
  • Fix handling of HTML when displayed in the entry preview panel [#3910]
  • +-
  • Fix start minimized to tray on Linux [#3899]
  • +-
  • Fix Auto Open with key file only databases [#4075]
  • +-
  • Fix escape key closing the standalone password generator [#3892]
  • +-
  • macOS: Fix monospace font usage in password field and notes [#4075]
  • +-
  • macOS: Fix building on macOS 10.9 to 10.11 [#3946]
  • +-
  • Fix TOTP setup dialog not closing on database lock [#4075]
  • +-
  • Browser: Fix condition where additional URLs are ignored [#4033]
  • +-
  • Browser: Fix subdomain matching to return only relevant site entries [#3854]
  • +-
  • Secret Service: Fix multiple crashes and incompatibilities [#3871, #4009, #4074]
  • +-
  • Secret Service: Fix searching of entries [#4008, #4036]
  • +-
  • Secret Service: Fix behavior when exposed group is recycled [#3914]
  • +-
  • CLI: Release the database instance before exiting interactive mode [#3889]
  • +-
  • Fix (most) memory leaks in tests [#3922]
  • +-
+-
+-
+- +- +-
    +-
  • Add programmatic use of the EntrySearcher [#3760]
  • +-
  • Explicitly clear database memory upon locking even if the object is not deleted immediately [#3824]
  • +-
  • macOS: Add ability to perform notarization of built package [#3827]
  • +-
  • Reduce file hash checking to every 30 seconds to correct performance issues [#3724]
  • +-
  • Correct formatting of notes in entry preview widget [#3727]
  • +-
  • Improve performance and UX of database statistics page [#3780]
  • +-
  • Improve interface for key file selection to discourage use of the database file [#3807]
  • +-
  • Hide Auto-Type sequences column when not needed [#3794]
  • +-
  • macOS: Revert back to using Carbon API for hotkey detection [#3794]
  • +-
  • CLI: Do not show protected fields by default [#3710]
  • +-
  • Secret Service: Correct issues interfacing with various applications [#3761]
  • +-
  • Fix building without additional features [#3693]
  • +-
  • Fix handling TOTP secret keys that require padding [#3764]
  • +-
  • Fix database unlock dialog password field focus [#3764]
  • +-
  • Correctly label open databases as locked on launch [#3764]
  • +-
  • Prevent infinite recursion when two databases AutoOpen each other [#3764]
  • +-
  • Browser: Fix incorrect matching of invalid URLs [#3759]
  • +-
  • Properly stylize the application name on Linux [#3775]
  • +-
  • Show application icon on Plasma Wayland sessions [#3777]
  • +-
  • macOS: Check for Auto-Type permissions on use instead of at launch [#3794]
  • +-
+-
+-
+- +- +-
    +-
  • Add 'Paper Backup' aka 'Export to HTML file' to the 'Database' menu [#3277]
  • +-
  • Add statistics panel with information about the database (number of entries, number of unique passwords, etc.) to the Database Settings dialog [#2034]
  • +-
  • Add offline user manual accessible via the 'Help' menu [#3274]
  • +-
  • Add support for importing 1Password OpVault files [#2292]
  • +-
  • Implement Freedesktop.org secret storage DBus protocol so that KeePassXC can be used as a vault service by libsecret [#2726]
  • +-
  • Add support for OnlyKey as an alternative to YubiKeys (requires yubikey-personalization >= 1.20.0) [#3352]
  • +-
  • Add group sorting feature [#3282]
  • +-
  • Add feature to download favicons for all entries at once [#3169]
  • +-
  • Add word case option to passphrase generator [#3172]
  • +-
  • Add support for RFC6238-compliant TOTP hashes [#2972]
  • +-
  • Add UNIX man page for main program [#3665]
  • +-
  • Add 'Monospaced font' option to the notes field [#3321]
  • +-
  • Add support for key files in auto open [#3504]
  • +-
  • Add search field for filtering entries in Auto-Type dialog [#2955]
  • +-
  • Complete usernames based on known usernames from other entries [#3300]
  • +-
  • Parse hyperlinks in the notes field of the entry preview pane [#3596]
  • +-
  • Allow abbreviation of field names in entry search [#3440]
  • +-
  • Allow setting group icons recursively [#3273]
  • +-
  • Add copy context menu for username and password in Auto-Type dialog [#3038]
  • +-
  • Drop to background after copying a password to the clipboard [#3253]
  • +-
  • Add 'Lock databases' entry to tray icon menu [#2896]
  • +-
  • Add option to minimize window after unlocking [#3439]
  • +-
  • Add option to minimize window after opening a URL [#3302]
  • +-
  • Request accessibility permissions for Auto-Type on macOS [#3624]
  • +-
  • Browser: Add initial support for multiple URLs [#3558]
  • +-
  • Browser: Add entry-specific browser integration settings [#3444]
  • +-
  • Add offline HIBP checker (requires a downloaded HIBP dump) [#2707]
  • +-
  • CLI: Add 'flatten' option to the 'ls' command [#3276]
  • +-
  • CLI: Add password generation options to `Add` and `Edit` commands [#3275]
  • +-
  • CLI: Add XML import [#3572]
  • +-
  • CLI: Add CSV export to the 'export' command [#3278]
  • +-
  • CLI: Add `-y --yubikey` option for YubiKey [#3416]
  • +-
  • CLI: Add `--dry-run` option for merging databases [#3254]
  • +-
  • CLI: Add group commands (mv, mkdir and rmdir) [#3313].
  • +-
  • CLI: Add interactive shell mode command `open` [#3224]
  • +-
  • Redesign database unlock dialog [ [#3287]
  • +-
  • Rework the entry preview panel [ [#3306]
  • +-
  • Move notes to General tab on Group Preview Panel [#3336]
  • +-
  • Enable entry actions when editing an entry and cleanup entry context menu [#3641]
  • +-
  • Improve detection of external database changes [#2389]
  • +-
  • Warn if user is trying to use a KDBX file as a key file [#3625]
  • +-
  • Add option to disable KeePassHTTP settings migrations prompt [#3349, #3344]
  • +-
  • Re-enabled Wayland support (no Auto-Type yet) [#3520, #3341]
  • +-
  • Add icon to 'Toggle Window' action in tray icon menu [[3244]
  • +-
  • Merge custom data between databases only when necessary [#3475]
  • +-
  • Improve various file-handling related issues when picking files using the system's file dialog [#3473]
  • +-
  • Add 'New Entry' context menu when no entries are selected [#3671]
  • +-
  • Reduce default Argon2 settings from 128 MiB and one thread per CPU core to 64 MiB and two threads to account for lower-spec mobile hardware [#3672]
  • +-
  • Browser: Remove unused 'Remember' checkbox for HTTP Basic Auth [#3371]
  • +-
  • Browser: Show database name when pairing with a new browser [#3638]
  • +-
  • Browser: Show URL in allow access dialog [#3639]
  • +-
  • CLI: The password length option `-l` for the CLI commands `Add` and `Edit` is now `-L` [#3275]
  • +-
  • CLI: The `-u` shorthand for the `--upper` password generation option has been renamed to `-U` [#3275]
  • +-
  • CLI: Rename command `extract` to `export`. [#3277]
  • +-
  • Improve accessibility for assistive technologies [#3409]
  • +-
  • Correctly unlock all databases if `--pw-stdin` is provided [#2916]
  • +-
  • Fix password generator issues with special characters [#3303]
  • +-
  • Fix KeePassXC interrupting shutdown procedure [#3666]
  • +-
  • Fix password visibility toggle button state on unlock dialog [#3312]
  • +-
  • Fix potential data loss if database is reloaded while user is editing an entry [#3656]
  • +-
  • Fix hard-coded background color in search help popup [#3001]
  • +-
  • Fix font choice for password preview [#3425]
  • +-
  • Fix handling of read-only files when autosave is enabled [#3408]
  • +-
  • Handle symlinks correctly when atomic saves are disabled [#3463]
  • +-
  • Enable HighDPI icon scaling on Linux [#3332]
  • +-
  • Make Auto-Type on macOS more robust and remove old Carbon API calls [#3634, #3347]
  • +-
  • Hide Share tab if KeePassXC is compiled without KeeShare support and other minor KeeShare improvements [#3654, #3291, #3029, #3031, #3236]
  • +-
  • Correctly bring window to the front when clicking tray icon on macOS [#3576]
  • +-
  • Correct application shortcut created by MSI Installer on Windows [#3296]
  • +-
  • Fix crash when removing custom data [#3508]
  • +-
  • Fix placeholder resolution in URLs [#3281]
  • +-
  • Fix various inconsistencies and platform-dependent compilation bugs [#3664, #3662, #3660, #3655, #3649, #3417, #3357, #3319, #3318, #3304]
  • +-
  • Browser: Fix potential leaking of entries through the browser integration API if multiple databases are opened [#3480]
  • +-
  • Browser: Fix password entropy calculation [#3107]
  • +-
  • Browser: Fix Windows registry settings for portable installation [#3603]
  • +-
+-
+-
+- +- +-
    +-
  • Fix library loading issues in the Snap and macOS releases [#3247]
  • +-
  • Fix various keyboard navigation issues [#3248]
  • +-
  • Fix main window toggling regression when clicking the tray icon on KDE [#3258]
  • +-
  • Add documentation for keyboard shortcuts to source code distribution [#3215]
  • +-
+-
+-
+- +- +-
    +-
  • Improve resilience against memory attacks - overwrite memory before free [#3020]
  • +-
  • Prevent infinite save loop when location is unavailable [#3026]
  • +-
  • Attempt to fix quitting application when shutdown or logout issued [#3199]
  • +-
  • Support merging database custom data [#3002]
  • +-
  • Fix opening URL's with non-http schemes [#3153]
  • +-
  • Fix data loss due to not reading all database attachments if duplicates exist [#3180]
  • +-
  • Fix entry context menu disabling when using keyboard navigation [#3199]
  • +-
  • Fix behaviors when canceling an entry edit [#3199]
  • +-
  • Fix processing of tray icon click and doubleclick [#3112]
  • +-
  • Update group in preview widget when focused [#3199]
  • +-
  • Prefer DuckDuckGo service over direct icon download (increases resolution) [#2996]
  • +-
  • Remove apply button in application settings [#3019]
  • +-
  • Use winqtdeploy on Windows to correct deployment issues [#3025]
  • +-
  • Don't mark entry edit as modified when attribute selection changes [#3041]
  • +-
  • Use console code page CP_UTF8 on Windows if supported [#3050]
  • +-
  • Snap: Fix locking database with session lock [#3046]
  • +-
  • Snap: Fix theming across Linux distributions [#3057]
  • +-
  • Snap: Use SNAP_USER_COMMON and SNAP_USER_DATA directories [#3131]
  • +-
  • KeeShare: Automatically enable WITH_XC_KEESHARE_SECURE if quazip is found [#3088]
  • +-
  • macOS: Fix toolbar text when in dark mode [#2998]
  • +-
  • macOS: Lock database on switching user [#3097]
  • +-
  • macOS: Fix global Auto-Type when the database is locked [#3138]
  • +-
  • Browser: Close popups when database is locked [#3093]
  • +-
  • Browser: Add tests [#3016]
  • +-
  • Browser: Don't create default group if custom group is enabled [#3127]
  • +-
+-
+-
+- +- +-
    +-
  • Fix database deletion when using unsafe saves to a different file system [#2889]
  • +-
  • Fix opening databases with legacy key files that contain '/' [#2872]
  • +-
  • Fix opening database files from the command line [#2919]
  • +-
  • Fix crash when editing master key [#2836]
  • +-
  • Fix multiple issues with apply button behavior [#2947]
  • +-
  • Fix issues on application startup (tab order, --pw-stdin, etc.) [#2830]
  • +-
  • Fix building without WITH_XC_KEESHARE
  • +-
  • Fix reference entry coloring on macOS dark mode [#2984]
  • +-
  • Hide window when performing entry auto-type on macOS [#2969]
  • +-
  • Improve UX of update checker; reduce checks to every 7 days [#2968]
  • +-
  • KeeShare improvements [#2946, #2978, #2824]
  • +-
  • Re-enable Ctrl+C to copy password from search box [#2947]
  • +-
  • Add KeePassXC-Browser integration for Brave browser [#2933]
  • +-
  • SSH Agent: Re-Add keys on database unlock [#2982]
  • +-
  • SSH Agent: Only remove keys on app exit if they are removed on lock [#2985]
  • +-
  • CLI: Add --no-password option [#2708]
  • +-
  • CLI: Improve database extraction to XML [#2698]
  • +-
  • CLI: Don't call mandb on build [#2774]
  • +-
  • CLI: Add debug info [#2714]
  • +-
  • Improve support for Snap theming [#2832]
  • +-
  • Add support for building on Haiku OS [#2859]
  • +-
  • Ctrl+PgDn now goes to the next tab and Ctrl+PgUp to the previous
  • +-
  • Fix compiling on GCC 5 / Xenial [#2990]
  • +-
  • Add .gitrev output to tarball for third-party builds [#2970]
  • +-
  • Add WITH_XC_UPDATECHECK compile flag to enable/disable the update checker [#2968]
  • +-
+-
+-
+- +- +-
    +-
  • New Database Wizard [#1952]
  • +-
  • Advanced Search [#1797]
  • +-
  • Automatic update checker [#2648]
  • +-
  • KeeShare database synchronization [#2109, #1992, #2738, #2742, #2746, #2739]
  • +-
  • Improve favicon fetching; transition to Duck-Duck-Go [#2795, #2011, #2439]
  • +-
  • Remove KeePassHttp support [#1752]
  • +-
  • CLI: output info to stderr for easier scripting [#2558]
  • +-
  • CLI: Add --quiet option [#2507]
  • +-
  • CLI: Add create command [#2540]
  • +-
  • CLI: Add recursive listing of entries [#2345]
  • +-
  • CLI: Fix stdin/stdout encoding on Windows [#2425]
  • +-
  • SSH Agent: Support OpenSSH for Windows [#1994]
  • +-
  • macOS: TouchID Quick Unlock [#1851]
  • +-
  • macOS: Multiple improvements; include CLI in DMG [#2165, #2331, #2583]
  • +-
  • Linux: Prevent Klipper from storing secrets in clipboard [#1969]
  • +-
  • Linux: Use polling based file watching for NFS [#2171]
  • +-
  • Linux: Enable use of browser plugin in Snap build [#2802]
  • +-
  • TOTP QR Code Generator [#1167]
  • +-
  • High-DPI Scaling for 4k screens [#2404]
  • +-
  • Make keyboard shortcuts more consistent [#2431]
  • +-
  • Warn user if deleting referenced entries [#1744]
  • +-
  • Allow toolbar to be hidden and repositioned [#1819, #2357]
  • +-
  • Increase max allowed database timeout to 12 hours [#2173]
  • +-
  • Password generator uses existing password length by default [#2318]
  • +-
  • Improve alert message box button labels [#2376]
  • +-
  • Show message when a database merge makes no changes [#2551]
  • +-
  • Browser Integration Enhancements [#1497, #2253, #1904, #2232, #1850, #2218, #2391, #2396, #2542, #2622, #2637, #2790]
  • +-
  • Overall Code Improvements [#2316, #2284, #2351, #2402, #2410, #2419, #2422, #2443, #2491, #2506, #2610, #2667, #2709, #2731]
  • +-
+-
+-
+- +- +-
    +-
  • Show all URL schemes in entry view [#1768]
  • +-
  • Disable merge when database is locked [#1975]
  • +-
  • Fix intermittent crashes with favorite icon downloads [#1980]
  • +-
  • Provide potential crash warning to Qt 5.5.x users [#2211]
  • +-
  • Disable apply button when creating new entry/group to prevent data loss [#2204]
  • +-
  • Allow for 12 hour timeout to lock idle database [#2173]
  • +-
  • Multiple SSH Agent fixes [#1981, #2117]
  • +-
  • Multiple Browser Integration enhancements [#1993, #2003, #2055, #2116, #2159, #2174, #2185]
  • +-
  • Fix browser proxy application not closing properly [#2142]
  • +-
  • Add real names and Patreon supporters to about dialog [#2214]
  • +-
  • Add settings button to toolbar, Donate button, and Report a Bug button to help menu [#2214]
  • +-
  • Enhancements to release-tool to appsign intermediate build products [#2101]
  • +-
+-
+-
+- +- +-
    +-
  • Fix crash when browser integration is enabled [#1923]
  • +-
+-
+-
+- +- +-
    +-
  • Enable high entropy ASLR on Windows [#1747]
  • +-
  • Enhance favicon fetching [#1786]
  • +-
  • Fix crash on Windows due to autotype [#1691]
  • +-
  • Fix dark tray icon changing all icons [#1680]
  • +-
  • Fix --pw-stdin not using getPassword function [#1686]
  • +-
  • Fix placeholders being resolved in notes [#1907]
  • +-
  • Enable auto-type start delay to be configurable [#1908]
  • +-
  • Browser: Fix native messaging reply size [#1719]
  • +-
  • Browser: Increase maximum buffer size [#1720]
  • +-
  • Browser: Enhance usability and functionality [#1810, #1822, #1830, #1884, #1906]
  • +-
  • SSH Agent: Parse aes-256-cbc/ctr keys [#1682]
  • +-
  • SSH Agent: Enhance usability and functionality [#1677, #1679, #1681, #1787]
  • +-
+-
+-
+- +- +-
    +-
  • Fix unnecessary automatic upgrade to KDBX 4.0 and prevent challenge-response key being stripped [#1568]
  • +-
  • Abort saving and show an error message when challenge-response fails [#1659]
  • +-
  • Support inner stream protection on all string attributes [#1646]
  • +-
  • Fix favicon downloads not finishing on some websites [#1657]
  • +-
  • Fix freeze due to invalid STDIN data [#1628]
  • +-
  • Correct issue with encrypted RSA SSH keys [#1587]
  • +-
  • Fix crash on macOS due to QTBUG-54832 [#1607]
  • +-
  • Show error message if ssh-agent communication fails [#1614]
  • +-
  • Fix --pw-stdin and filename parameters being ignored [#1608]
  • +-
  • Fix Auto-Type syntax check not allowing spaces and special characters [#1626]
  • +-
  • Fix reference placeholders in combination with Auto-Type [#1649]
  • +-
  • Fix qtbase translations not being loaded [#1611]
  • +-
  • Fix startup crash on Windows due to missing SVG libraries [#1662]
  • +-
  • Correct database tab order regression [#1610]
  • +-
  • Fix GCC 8 compilation error [#1612]
  • +-
  • Fix copying of advanced attributes on KDE [#1640]
  • +-
  • Fix member initialization of CategoryListWidgetDelegate [#1613]
  • +-
  • Fix inconsistent toolbar icon sizes and provide higher-quality icons [#1616]
  • +-
  • Improve preview panel geometry [#1609]
  • +-
+-
+-
+- +- +-
    +-
  • Add support for KDBX 4.0, Argon2 and ChaCha20 [#148, #1179, #1230, #1494]
  • +-
  • Add SSH Agent feature [#1098, #1450, #1463]
  • +-
  • Add preview panel with details of the selected entry [#879, #1338]
  • +-
  • Add more and configurable columns to entry table and allow copying of values by double click [#1305]
  • +-
  • Add KeePassXC-Browser API as a replacement for KeePassHTTP [#608]
  • +-
  • Deprecate KeePassHTTP [#1392]
  • +-
  • Add support for Steam one-time passwords [#1206]
  • +-
  • Add support for multiple Auto-Type sequences for a single entry [#1390]
  • +-
  • Adjust YubiKey HMAC-SHA1 challenge-response key generation for KDBX 4.0 [#1060]
  • +-
  • Replace qHttp with cURL for website icon downloads [#1460]
  • +-
  • Remove lock file [#1231]
  • +-
  • Add option to create backup file before saving [#1385]
  • +-
  • Ask to save a generated password before closing the entry password generator [#1499]
  • +-
  • Resolve placeholders recursively [#1078]
  • +-
  • Add Auto-Type button to the toolbar [#1056]
  • +-
  • Improve window focus handling for Auto-Type dialogs [#1204, #1490]
  • +-
  • Auto-Type dialog and password generator can now be exited with ESC [#1252, #1412]
  • +-
  • Add optional dark tray icon [#1154]
  • +-
  • Add new "Unsafe saving" option to work around saving problems with file sync services [#1385]
  • +-
  • Add IBus support to AppImage and additional image formats to Windows builds [#1534, #1537]
  • +-
  • Add diceware password generator to CLI [#1406]
  • +-
  • Add --key-file option to CLI [#816, #824]
  • +-
  • Add DBus interface for opening and closing KeePassXC databases [#283]
  • +-
  • Add KDBX compression options to database settings [#1419]
  • +-
  • Discourage use of old fixed-length key files in favor of arbitrary files [#1326, #1327]
  • +-
  • Correct reference resolution in entry fields [#1486]
  • +-
  • Fix window state and recent databases not being remembered on exit [#1453]
  • +-
  • Correct history item generation when configuring TOTP for an entry [#1446]
  • +-
  • Correct multiple TOTP bugs [#1414]
  • +-
  • Automatic saving after every change is now a default [#279]
  • +-
  • Allow creation of new entries during search [#1398]
  • +-
  • Correct menu issues on macOS [#1335]
  • +-
  • Allow compilation on OpenBSD [#1328]
  • +-
  • Improve entry attachments view [#1139, #1298]
  • +-
  • Fix auto lock for Gnome and Xfce [#910, #1249]
  • +-
  • Don't remember key files in file dialogs when the setting is disabled [#1188]
  • +-
  • Improve database merging and conflict resolution [#807, #1165]
  • +-
  • Fix macOS pasteboard issues [#1202]
  • +-
  • Improve startup times on some platforms [#1205]
  • +-
  • Hide the notes field by default [#1124]
  • +-
  • Toggle main window by clicking tray icon with the middle mouse button [#992]
  • +-
  • Fix custom icons not copied over when databases are merged [#1008]
  • +-
  • Allow use of DEL key to delete entries [#914]
  • +-
  • Correct intermittent crash due to stale history items [#1527]
  • +-
  • Sanitize newline characters in title, username and URL fields [#1502]
  • +-
  • Reopen previously opened databases in correct order [#774]
  • +-
  • Use system's zxcvbn library if available [#701]
  • +-
  • Implement various i18n improvements [#690, #875, #1436]
  • +-
+-
+-
+- +- +-
    +-
  • Prevent database corruption when locked [#1219]
  • +-
  • Fixes apply button not saving new entries [#1141]
  • +-
  • Switch to Consolas font on Windows for password edit [#1229]
  • +-
  • Multiple fixes to AppImage deployment [#1115, #1228]
  • +-
  • Fixes multiple memory leaks [#1213]
  • +-
  • Resize message close to 16x16 pixels [#1253]
  • +-
+-
+-
+- +- +-

Changes included in this release:

+-
    +-
  • Fixed entries with empty URLs being reported to KeePassHTTP clients [#1031]
  • +-
  • Fixed YubiKey detection and enabled CLI tool for AppImage binary [#1100]
  • +-
  • Added AppStream description [#1082]
  • +-
  • Improved TOTP compatibility and added new Base32 implementation [#1069]
  • +-
  • Fixed error handling when processing invalid cipher stream [#1099]
  • +-
  • Fixed double warning display when opening a database [#1037]
  • +-
  • Fixed unlocking databases with --pw-stdin [#1087]
  • +-
  • Added ability to override QT_PLUGIN_PATH environment variable for AppImages [#1079]
  • +-
  • Fixed transform seed not being regenerated when saving the database [#1068]
  • +-
  • Fixed only one YubiKey slot being polled [#1048]
  • +-
  • Corrected an issue with entry icons while merging [#1008]
  • +-
  • Corrected desktop and tray icons in Snap package [#1030]
  • +-
  • Fixed screen lock and Google fallback settings [#1029]
  • +-
+-
+-
+- +- +-

Changes included in this release:

+-
    +-
  • Corrected multiple snap issues [#934, #1011]
  • +-
  • Corrected multiple custom icon issues [#708, #719, #994]
  • +-
  • Corrected multiple Yubikey issues [#880]
  • +-
  • Fixed single instance preventing load on occasion [#997]
  • +-
  • Keep entry history when merging databases [#970]
  • +-
  • Prevent data loss if passwords were mismatched [#1007]
  • +-
  • Fixed crash after merge [#941]
  • +-
  • Added configurable auto-type default delay [#703]
  • +-
  • Unlock database dialog window comes to front [#663]
  • +-
  • Translation and compiling fixes
  • +-
+-
+-
+- +- +-

Changes included in this release:

+-
    +-
  • Added YubiKey 2FA integration for unlocking databases [#127]
  • +-
  • Added TOTP support [#519]
  • +-
  • Added CSV import tool [#146, #490]
  • +-
  • Added KeePassXC CLI tool [#254]
  • +-
  • Added diceware password generator [#373]
  • +-
  • Added support for entry references [#370, #378]
  • +-
  • Added support for Twofish encryption [#167]
  • +-
  • Enabled DEP and ASLR for in-memory protection [#371]
  • +-
  • Enabled single instance mode [#510]
  • +-
  • Enabled portable mode [#645]
  • +-
  • Enabled database lock on screensaver and session lock [#545]
  • +-
  • Redesigned welcome screen with common features and recent databases [#292]
  • +-
  • Multiple updates to search behavior [#168, #213, #374, #471, #603, #654]
  • +-
  • Added auto-type fields {CLEARFIELD}, {SPACE}, {{}, {}} [#267, #427, #480]
  • +-
  • Fixed auto-type errors on Linux [#550]
  • +-
  • Prompt user prior to executing a cmd:// URL [#235]
  • +-
  • Entry attributes can be protected (hidden) [#220]
  • +-
  • Added extended ascii to password generator [#538]
  • +-
  • Added new database icon to toolbar [#289]
  • +-
  • Added context menu entry to empty recycle bin in databases [#520]
  • +-
  • Added "apply" button to entry and group edit windows [#624]
  • +-
  • Added macOS tray icon and enabled minimize on close [#583]
  • +-
  • Fixed issues with unclean shutdowns [#170, #580]
  • +-
  • Changed keyboard shortcut to create new database to CTRL+SHIFT+N [#515]
  • +-
  • Compare window title to entry URLs [#556]
  • +-
  • Implemented inline error messages [#162]
  • +-
  • Ignore group expansion and other minor changes when making database "dirty" [#464]
  • +-
  • Updated license and copyright information on souce files [#632]
  • +-
  • Added contributors list to about dialog [#629]
  • +-
+-
+-
+- +- +-

Changes included in this release:

+-
    +-
  • Bumped KeePassHTTP version to 1.8.4.2
  • +-
  • KeePassHTTP confirmation window comes to foreground [#466]
  • +-
+-
+-
+- +- +-

Changes included in this release:

+-
    +-
  • Fix possible overflow in zxcvbn library [#363]
  • +-
  • Revert HiDPI setting to avoid problems on laptop screens [#332]
  • +-
  • Set file meta properties in Windows executable [#330]
  • +-
  • Suppress error message when auto-reloading a locked database [#345]
  • +-
  • Improve usability of question dialog when database is already locked by a different instance [#346]
  • +-
  • Fix compiler warnings in QHttp library [#351]
  • +-
  • Use unified toolbar on Mac OS X [#361]
  • +-
  • Fix an issue on X11 where the main window would be raised instead of closed on Alt+F4 [#362]
  • +-
+-
+-
+- +- +-

Changes included in this release:

+-
    +-
  • Ask for save location when creating a new database [#302]
  • +-
  • Remove Libmicrohttpd dependency to clean up the code and ensure better OS X compatibility [#317, #265]
  • +-
  • Prevent Qt from degrading Wifi network performance on certain platforms [#318]
  • +-
  • Visually refine user interface on OS X and other platforms [#299]
  • +-
  • Remove unusable tray icon setting on OS X [#293]
  • +-
  • Fix compositing glitches on Ubuntu and prevent flashing when minimizing to the tray at startup [#307]
  • +-
  • Fix AppImage tray icon on Ubuntu [#277, #273]
  • +-
  • Fix global menu disappearing after restoring KeePassXC from the tray on Ubuntu [#276]
  • +-
  • Fix result order in entry search [#320]
  • +-
  • Enable HiDPI scaling on supported platforms [#315]
  • +-
  • Remove empty directories from installation target [#282]
  • +-
+-
+-
+- +- +-

Changes included in this release:

+-
    +-
  • Enabled HTTP plugin build; plugin is disabled by default and limited to localhost [#147]
  • +-
  • Escape HTML in dialog boxes [#247]
  • +-
  • Corrected crashes in favicon download and password generator [#233, #226]
  • +-
  • Increase font size of password meter [#228]
  • +-
  • Fixed compatibility with Qt 5.8 [#211]
  • +-
  • Use consistent button heights in password generator [#229]
  • +-
+-
+-
+- +- +-

Changes included in this release:

+-
    +-
  • Show unlock dialog when using autotype on a closed database [#10, #89]
  • +-
  • Show different tray icon when database is locked [#37, #46]
  • +-
  • Support autotype on Windows and OS X [#42, #60, #63]
  • +-
  • Add delay feature to autotype [#76, #77]
  • +-
  • Add password strength meter [#84, #92]
  • +-
  • Add option for automatically locking the database when minimizing the window [#57]
  • +-
  • Add feature to download favicons and use them as entry icons [#30]
  • +-
  • Automatically reload and merge database when the file changed on disk [#22, #33, #93]
  • +-
  • Add tool for merging two databases [#22, #47, #143]
  • +-
  • Add --pw-stdin commandline option to unlock the database by providing a password on STDIN [#54]
  • +-
  • Add utility script for reading the database password from KWallet [#55]
  • +-
  • Fix some KeePassHTTP settings not being remembered [#34, #65]
  • +-
  • Make search box persistent [#15, #67, #157]
  • +-
  • Enhance search feature by scoping the search to selected group [#16, #118]
  • +-
  • Improve interaction between search field and entry list [#131, #141]
  • +-
  • Add stand-alone password-generator [#18, #92]
  • +-
  • Don't require password repetition when password is visible [#27, #92]
  • +-
  • Add support for entry attributes in autotype sequences [#107]
  • +-
  • Always focus password field when opening the database unlock widget [#116, #117]
  • +-
  • Fix compilation errors on various platforms [#53, #126, #130]
  • +-
  • Restructure and improve kdbx-extract utility [#160]
  • +-
+-
+-
+-
+- +-
+diff -urNr keepassxc-2.6.4-orig/share/linux/org.keepassxc.KeePassXC.desktop keepassxc-2.6.4-patched/share/linux/org.keepassxc.KeePassXC.desktop +--- keepassxc-2.6.4-orig/share/linux/org.keepassxc.KeePassXC.desktop 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/linux/org.keepassxc.KeePassXC.desktop 1970-01-01 01:00:00.000000000 +0100 +@@ -1,46 +0,0 @@ +-[Desktop Entry] +-Name=KeePassXC +-GenericName=Password Manager +-GenericName[ar]=مدير كلمات المرور +-GenericName[bg]=Мениджър на пароли +-GenericName[ca]=Gestor de contrasenyes +-GenericName[cs]=Aplikace pro správu hesel +-GenericName[da]=AdgangskodehÃ¥ndtering +-GenericName[de]=Passwortverwaltung +-GenericName[es]=Gestor de contraseñas +-GenericName[et]=Paroolihaldur +-GenericName[fi]=Salasanamanageri +-GenericName[fr]=Gestionnaire de mot de passe +-GenericName[hu]=JelszókezelÅ‘ +-GenericName[id]=Pengelola Sandi +-GenericName[it]=Gestione password +-GenericName[ja]=パスワードマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ +-GenericName[ko]=암호 ê´€ë¦¬ìž +-GenericName[lt]=Slaptažodžių tvarkytuvÄ— +-GenericName[nb]=PassordhÃ¥ndterer +-GenericName[nl]=Wachtwoordbeheer +-GenericName[pl]=Menedżer haseÅ‚ +-GenericName[pt_BR]=Gerenciador de Senhas +-GenericName[pt]=Gestor de palavras-passe +-GenericName[ro]=Manager de parole +-GenericName[ru]=менеджер паролей +-GenericName[sk]=Správca hesiel +-GenericName[sv]=Lösenordshanterare +-GenericName[th]=à¹à¸­à¸žà¸ˆà¸±à¸”à¸à¸²à¸£à¸£à¸«à¸±à¸ªà¸œà¹ˆà¸²à¸™ +-GenericName[tr]=Parola yöneticisi +-GenericName[uk]=РозпорÑдник паролів +-GenericName[zh_CN]=密ç ç®¡ç†å™¨ +-GenericName[zh_TW]=密碼管ç†å“¡ +-Comment=Community-driven port of the Windows application “KeePass Password Safe†+-Comment[da]=Fællesskabsdrevet port af Windows-programmet “KeePass Password Safe†+-Comment[et]=Kogukonna arendatav port Windowsi programmist KeePass Password Safe +-Exec=keepassxc %f +-TryExec=keepassxc +-Icon=keepassxc +-StartupWMClass=keepassxc +-StartupNotify=true +-Terminal=false +-Type=Application +-Version=1.0 +-Categories=Utility;Security;Qt; +-MimeType=application/x-keepass2; +I file binari keepassxc-2.6.4-orig/share/macosx/background.tiff e keepassxc-2.6.4-patched/share/macosx/background.tiff sono diversi +I file binari keepassxc-2.6.4-orig/share/macosx/DS_Store.in e keepassxc-2.6.4-patched/share/macosx/DS_Store.in sono diversi +I file binari keepassxc-2.6.4-orig/share/macosx/embedded.provisionprofile e keepassxc-2.6.4-patched/share/macosx/embedded.provisionprofile sono diversi +diff -urNr keepassxc-2.6.4-orig/share/macosx/Info.plist.cmake keepassxc-2.6.4-patched/share/macosx/Info.plist.cmake +--- keepassxc-2.6.4-orig/share/macosx/Info.plist.cmake 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/macosx/Info.plist.cmake 1970-01-01 01:00:00.000000000 +0100 +@@ -1,53 +0,0 @@ +- +- +- +- +- NSPrincipalClass +- NSApplication +- CFBundleAllowMixedLocalizations +- +- CFBundleDevelopmentRegion +- English +- CFBundleDisplayName +- ${PROJECT_NAME} +- CFBundleExecutable +- ${PROGNAME} +- CFBundleIconFile +- keepassxc.icns +- CFBundleIdentifier +- org.keepassxc.keepassxc +- CFBundleInfoDictionaryVersion +- 6.0 +- CFBundleName +- ${PROJECT_NAME} +- CFBundlePackageType +- APPL +- CFBundleShortVersionString +- ${KEEPASSXC_VERSION} +- CFBundleSignature +- KPXC +- CFBundleVersion +- ${KEEPASSXC_VERSION_NUM} +- NSHumanReadableCopyright +- Copyright 2016-2020 KeePassXC Development Team +- CFBundleDocumentTypes +- +- +- CFBundleTypeExtensions +- +- kdbx +- +- CFBundleTypeIconFile +- keepassxc.icns +- CFBundleTypeName +- KeePassXC Password Database +- CFBundleTypeOSTypes +- +- kdbx +- +- CFBundleTypeRole +- Editor +- +- +- +- +diff -urNr keepassxc-2.6.4-orig/share/macosx/keepassxc.ai keepassxc-2.6.4-patched/share/macosx/keepassxc.ai +--- keepassxc-2.6.4-orig/share/macosx/keepassxc.ai 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/macosx/keepassxc.ai 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7697 +0,0 @@ +-%PDF-1.6 %âãÏÓ +-1 0 obj <>/OCGs[32 0 R 33 0 R 34 0 R 35 0 R 36 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream +- +- +- +- +- Adobe Illustrator 25.0 (Windows) +- 2020-12-20T17:21:23+02:00 +- 2020-12-20T17:21:25+01:00 +- 2020-12-20T17:21:25+01:00 +- +- +- +- 256 +- 256 +- JPEG +- /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq6uKtVxVuuKurirq4q6uKurirq4q6uKurirq4q6uKtVxV 1fH78VbxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVaWr8sVarirq4q6uKuJA3OKpL5g8 6eV/L1v9Y1jUreyjoSpmkVC3HrwBNW/2IOKvNtY/5yi8g2krxWEV5qbBarJBBwjJ8C07Qt1/yT9O Ksam/wCcspfVIg8rTPH2drqND18PTb9eKui/5yyl9QCbytOsfdluo3PXwMafrxVk2kf85QeQbuVI r+O80xmHxSTwFow1NxygaY9e5UYq9I8v+c/LHmC3M+j6jb3sa05mGRXKk9nANUPs1MVTqtcVdXFX VxV1cVcGp8u+Kr8VdirsVdirsVdirsVdirsVdirsVdirsVdirsVWyGgp44qp1xV1cVdXFUr8xeZ9 E8u6bLqOr3UdpaQirySGnyAAqWJ7KASe2Kvnjzf+fnnHzReHSPJNrLZQTMY4rn0/VvJdt/SjHNY+ /Zm77YqoaH/zj55h1a4OpebdRMM8rB5RIxvLtiNviYtwXb/LJHcYq9D0r8lfy809FDae9/IpqJbu Zyf+Bh9FKfNTirIY/Jfk+MUXQNNp/lWcD/i6McVdJ5L8nyCj6BptD/LZwJ+KIpxVj2q/kr+XuoIw SwksJGNfVtJnr/wE3rJT5KMVefa5+QPmPSLj9JeVNQNxNEeUfpsbS8WhqOLBuDU9nBP8uKonyj+f nm3yzdnSvOlrLeW8J4S3Hp+neQ9NpIiFElB/qt/rHFX0J5e8zaL5h06LUdJuo7u1l+zJGaio6gjY hh3Uio74qmdcVdXFXVxVfE1QQeo/Viq/FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqoSt+9I8APx rirVcCurirHPPXnnRvJ+iS6nqUlAPgghXeSWUglY0HdjT6BudsKvm+20/wA8/nB5lN5fyGDTLdvg U8jbWkZ/ZUbepMw6929lGyr3jyn5I8v+VbP6vpVuFlYUnvJKNPL/AKzU2X/JWgwKnvHCrTK3E8QC 1PhB2FcVfO03n/8AMKSRhNq8kMiMVaJI4k4sDQg0Su1O+amWrnbinIV1t59/MJZlWHV5JpHIVI3j hcMSaAbp44I6udqMpfRAU03G/fNu5TuOKpF5s8kaB5ps/Q1S3BmUUgvY6LPF/qt3X/JaowK8LntP O/5Q+ZPrFk4nsLk1K/ELW7jU9CN/TlUHr1X/ACl6lX0Z5G88aP5v0SLU9Oc7nhPA+0kUqgFo3HZh X5EbjY4qyOuBXVxV0bATAd2U/gR/XCqIxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KoWU/v2+Q/j irVcCoXU9StdNsJ767kWK3t0aSWRtlVUBZmPsAMVfL0r65+b/wCYCyAvFpUHL6orfZt7UH4pWAJU ySbfTRa0GKvojRtE0zQtJh06wjENnbLtWlSf2nc7VZupOFXlH5gfmrdXbzaX5blMNqlUn1JftSeI hP7K/wCV37Zr9Rq62i0Ty9A9X8vxoNB00ISyC1g4sdyR6a0JzOh9IbhyR/DJJYP5q/KbSdavZL+1 uG068mPKfigkidu7cKoVY9yD9FcxM2kEzY2LVPEC35V/KjSdEvEv7m4bUL2I8oCyCOJD2YJVyWHY lvorjh0ggbO5WOIBm/DMttS7zGqjy9qhYlVFpPVl6j922498jP6Sg8nlv5ffmpcW3o6Z5klMtu1F g1JvtIdgFmPdf8v7/HMHBq+kmmGXoXqeuaBpmvaTNpmox+taXAFabMrDdXRuzKeh/hmwb3z7ay65 +Uvn5vULS6bNxFyEFFuLUt8Myr/vyPfbxqtaGuBX05puo22o2MF7ayCW3uEWSKRejK4DKR7EGuKo quKtRn/S4/8AVf8A41wqjMVdirsVdirsVdirsVdirsVdirsVdirsVdiqEnP79vkP44qsrgV4X/zk Z5ukdbTyjaMR9b/0nUSOnoI1EjPX7ci1PsvvhVm35U+SU8s+WIhNGF1O+Cz3pI+Jaj4Iv9gDv/lE 4ArGfzg85ycz5X05+PJa6pKp3CsKrCCP5gat7UHjmBrNRw+kNOWfR5aIVVOIG1M1NuO9/wDyv1iP VPJ9mtR69gPqc6+HpABPvj45vtLk4oDycvGbDLOGZDN3DFXcMVdwxVh35sazHpnk67hDD6xqI+pw p3Ik/vD9EfLMfVZOGBYZDQeCiIFOJHbNDbiPV/yh85SSEeW9RkLOgLabKxqSiirREn+Ubr7bds22 i1HF6TzcjFO9k/8AzZ8lx+Y/K8zwxctT04NcWZA+JgB+8i/2ajYfzAZnluYl/wA48+bpWiuvK90/ L6qPrOnk/wC+HYCRK/5EjAj2bwGFXttcCuhP+lx/6r/8a4VR2KuxV2KuxV2KuxV2KuxV2KuxV2Ku xV2KuxVBXJ/0hvkP44qoyycI2buBt88Cvmryvbf45/OG41CZfUsvrLTCoG9paUWIEVIo/Fa/62JV 9BeY9Yh0XQ73VJQCtrEXVT+0/RF/2TEDI5J8MSUE0HzS8k9xPLdXLGS5uHaWZz1Luak5zk5mRsuE TbuORtCfeSvN1x5W1c3XFptPuQEvrdaVKj7LrX9pKmniKj3zK0uo8M+TZjnRfQGmanp+qWUd7p86 XFrKKpIhqPcHuCO4O4zeRkJCw5QNoqgwpdQYqgtX1jTNHsZL7UZ0t7aMbu56nsqjqxPYDBKQiLKC afPnnHzXdeataN66mKxgBjsbc9VQnd26/E3f7s0eq1HGfJxck7SfjmLbWvt57i0uYby2bhc2zrLC /gymoyUJmJsJBp9LaDqsGr6NZ6lCKJdRLIV/lYj4l/2LVGdHCfFEEdXNBsPn3XYl8jfm8l2lYbCO 6Seqio+qXYpKoXuFDuo+Xjkgl9JoxKgnr3+eKr7c/wClp/qv/DCqPxV2KuxV2KuxV2KuxV2KuxV2 KuxV2KuxV2KoC7NLhv8AVH8cVY9531FtP8paveq3F7e0nkjbf7axMU6f5VMVeW/8436Ssa6nfkEt HFDbRuep5lnff/YLg6qyn87L9o9BstPUkfXLgNJ4FIRWn/BMpzB7QnUK72rMdnkXDNHbiu4Y2ruG Nqyj8rJru287WMEE7x2116wuYFJCScYJGXkvQkMoIzP0OQ+IB0bcR3e5Q6hYTXEttDcxS3MH99Aj qzp/rKDVfpzdAhyrRGFXz9+Zstze+eNRjnnkktrVo0toHYlI/wB0hbivQcmqc0muynjIcXLLdjoQ DYZgW1N8MbV3DG1ew/kxqDS+X7qwY1NlOTGPBJhyH/Dhs3nZ87hXc5WE7MS/5yK01frWj6gq/FNF NbSN7RlXQf8AJRszm16p5K1VtU8p6TfyPzluLWJpm8ZAoWT/AIcHCqfWpreJ/qN/DFUwxV2KuxV2 KuxV2KuxV2KuxV2KuxV2KuxV2Kpden/SD/qj+OKsG/OFiPy312grW3Cf8HIi/wAcVST/AJx+RR5Z 1AgfEbuhPsIkp+vB1VQ/Ows2oaOpPwrHOQPdmjr/AMRGartM/S0Z+jzrjmotx3ccbV3HG1ZJ+Wy0 89aV85/+oaTMzQf3o/HRsxfUzPyTGo/MvzW4G7Hc/wCzGbPAf3026P1F6Nma2vFfzL8p6jYa1c6z vPYX7hjKBvE5AHB/bb4T9GaTX4JCXF0LjZYm7YZxzXW0u442ruONq9I/JVmW81hP2WjgY/MGQfxz bdln6vg34Orv+cg0U+XtKenxC9Kg+xhcn/iIzbdXIZR+VtB+X+i0BA9A7H/jI2FWX2Z/0xf9Rv4Y qmWKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVLb8/wCkn/VH8cVYl+ZVpJeeQPMEMYq/1GZ1G3+6 19Tv/q4qxP8A5x+ulbR9UtR9qKeKU/KVCo/5NYOqor86LQk6RdgbKZonb3bgyj/hWzVdqDaJaM45 PNeOaa3HdxxtXccbVkf5crTzxpXzn/6hpMzOzz+9Hx+5sxfUzLyYP+Qj+afn/wAbjNng/vpt0fqL 0LM9tYt5/wDNukaHpLw3caXlzeKUg09qH1AdiX8EHc/dmPqc0YR33vownIAPD1BIqQFrvxHQe29c 5olw13HBau442r0z8mbUqurXRGzGGJT7qHZv+JDNz2WNpFyMHVAf85CXIGm6LaV3luJpgPaKML/z Nza9W9mX5do0fkbREYUYWy1B9ycKsosT/pi/6jfwxVNMVdirsVdirsVdirsVdirsVdirsVdirsVd iqV6if8ASf8AYj+OKoOeCK6t5bWXeK4jaKQf5LqVP68VeK/kndS6R5xvdDumAklSW2cdKz2jn/jU PgKvTvzI0ltR8q3Hprymsyt1GP8AjHUP/wAk2bMTXY+PEfLdryCw8VC1Fc5lxG+GNq7hjash/Lxa edtK+c//AFDyZndn/wB8Pj9zZi+pmHk0f8hF80H3/wCNxmz0/wDfzbo/UXoGbBteV/mn5Rhiuj5k jnqZikU8Er71GymHl28VHTrmo7SwGuMFozR6sC4Zpbcd3DG1dxxV7X+XelNp3la2DjjLdk3Ug/4y U4/8Iq502hx8GIee7l4hQeW/nNetq/nq00a3NTaRxW5pU0muW5HYf5BTMsNj2q1tYrK0gs4j+6to 0hQnrRFC/wAMKo3Tz/pi/wCo36xiqa4q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FUq1I/wClf7Ef xxVChqGuKvFPzNsbjyx5+tfMdgvGO9ZbyMVoDPCQsybdnFCfHkcSr2vTNQs9V0yC+tmElrdxh077 MNwR4joRg5q8Y82+XH0LWJLZQfqktZbNz3jJ+zXxQ7fj3zl9bp/CnXQ8nDyRopNwzEtrdwxtU/8A IC086aX85/8AqHkzO7OP74fH7m3F9TLfJw/5CH5n+f8AxuM2un/v5t0PqLP82Da8M893Wo33m69S 8m5w2T+laQjZESgPT+Y9znPdo5pHIYnkHFyy3SfhmttpdwxtU88neXH1vWY4WU/U4SJLtu3AHZPm 52+/wzL0Wn8WddBzbMcLL2PV9Us9H0m51G6PC1s4mkengo2VR4noBnUOY8T/ACu0+88x+d7rzJeb CCRruUmpHqymiRrUdFXb2FMICvbeWKojTT/pg/1G/WMVTfFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYqlGqH/Sv9iP44qhK4qknnPyxF5m8vT6aaC7jPr6fIduM6A0FfBwSp+eKsB/KLzfJpV/L5V1es KPKwtfUNDFcVo8Jr05Hp/lfPAVepeZPL1prunNaz/BKvxW846xv4+4PcZRqdOMseEsZx4g8Z1TSL /S7x7O9iMcydD+yy9mQ91OctmxSxy4ZOHKNc0JxOVWhMfLmqQaRr9jqVwrNb27P6vDchZI2jrT25 VzK0eUY8gkeTKBo29vtLm1u7eO6tZFlgmUNHKhqGB71zqokEWHNDry8tbK1kurqVYbeFS0kjmgAG JIAsq8K1vU7fV9ev9TtkZLa5cGIMKEhVCciP8rjXOW1uUTyEjk4eQ2UJxOYlsEZpWj3+q3iWdlGZ JW3J6Kq92Y9gMtw4pZJcMUxjfJ7N5d8v2eh6ctpb/G5PKecijSP4+wHYZ1Om08cUeEOZCPCHk/5v ecJNa1KPyppBM0MMoF6UNfUuAfhiFOyHdv8AK+WXhk9C8meWYfLegQ2CnlcvSW8kHRpD4Cg6DbfC qeVxVFaYf9MH+o36xiqcYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FUn1Y/6UP8AVH8cVQVcVcGI NQdxirAPzQ/L59XVtf0aMtqcYH161TrKiDaVP8tQKUHX59VV35a/mjFfRw6LrknDUVolvdvQLN2C se0nb3+eDkrP9Z0PTNYtfq99FzUbxyLs6E90b/MZTn08MoqQYyiDzea63+XutaezSWqm/tR0eIH1 QP8AKj3P/A1+jOf1HZuSG8fUHGliIYw0fVWG42IPjmu5NadeUPNd15cuvRl5TaRM372EbmIn/dif 8bDv882eh15xmpfS248lKXnDzTeeZr30Y+UOjQNWGE7GUj/dkg/UO3zw67X8e0fpXJktKo4fsogq TQKoG5OavctTKND/AC81nUGWS7U2Fqdy0o/eEf5Mex/4KmbHT9m5J7y9IbI4iXpOj6Hpuj2v1exi 4Kd5JG3dyO7t/mM6DBp4YhUQ5MYgcnnf5nfmmLQS6F5el56g3wXd6m4hHQoh7yf8R+eXc2Tf5Wfl +dGiTXdUjpqMyk2du4+KJW6u1f2mH+fXCr0EsSak74q6uKozSt7wf6jfrGKpzirsVdirsVdirsVd irsVdirsVdirsVdirsVSnWUpIknYjj9PXFUurgV1cVXJIyMGU0YdDhVg3nn8rLPXi+o6IsdpqpFZ rOgSKcjfkp6K5+49/HFWM+XvzO8y+Vbk6R5ltpbmCD4aPtcxgbbFtpF8Kn6cFK9W8v8AnHy5r8Qf TL1JZKVaBjwmX/WjajY2qYXulaZf73tpDcNSgeRFLgez/aH35VkwQn9QBQYg80ofyB5Tf/jyK+yy y/xY5inszB3faWHhRdH5A8pp/wAeRb2aWX/jVhiOzMHd9pXwopvZaVpljvZWkNu1KF40UOR7t9o/ fmVjwQh9IAZiIHJL/MPnPy35fiL6nexxSUqlup5zN/qxrVjltpeTeYPzM80+brn9D+WrWW1tpvhI Te6kXoeTD4Yl333+nGlZR5E/Kyw0ARajqwW51ZaPDbj+7gI3BNftP3rhVnLOWap64q1XArq4qmGj ITM79lHH6euFU3xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KobULb6xbMg+0KFT7jFWPVO4OxGxH gcVbrirq4q6uKofV9L0bXLYW2tWi3kagiOQ/DKle6uKHFXnms/keWl+seXNTHINWO3uiY5F/1ZUH b5fTiqWmP87fLhEY+uTwoaKpC3qsB4ECR6fTgpVzfmx+ZdowjvNNgB32ltpo3JH+yp+GNK4fmx+Z l2xSz02AnbaO2mkcV/2VPwxpVhh/O7zETE31y3ib7SALZAA99xHJTGlTLRvyNVJTceYtSBcsTJb2 pMjv3qZX8e/w/ThV6JpOmaPolt9W0a0WzjP25BvK/wDrufiOKoiuKurirq4q0W6AbkmijxJxVkOn Wxt7YK32zUsfc4qicVdirsVdirsVdirsVdirsVdirsVdirsVdirsVSnVNMZiZ7cDmB8afzYqlAcc ipqGXqp2OKt1xV1cVdXFXVxVUS5nj+xIyjwBNMVVP0jdkUL8v9ZVP6xirhqF0Ojhf9VVH6hiqm9z PJ9uRmHgSaYqp1xV1cVdXFXVxVaZAGCirOeijc4qm+laW6kXFyAWp8Cfy4qm+KuxV2KuxV2KuxV2 KuxV2KuxV2KuxV2KuxV2KuxV2KoW70y0uh+9X4uzDY4qlsnl2Uf3M7U8GNf1jFVL9Aah/v5fw/pi rv0BqP8Av5fw/pirv0BqP+/l/D+mKu/QGo/7+X8P6Yq79Aaj/v5fw/pirv0BqP8Av5fw/pirv0Bq P+/l/D+mKu/QGo/7+X8P6Yq79Aaj/v5fw/pirv0BqH+/l/D+mKqkfl2Vv76c08FNP1DFUytNMtLU fu1+Lux3OKovFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX//2Q== +- +- +- +- 1 +- True +- False +- +- 128.000000 +- 128.000000 +- Millimeters +- +- +- +- Cyan +- Magenta +- Yellow +- Black +- +- +- +- +- +- Default Swatch Group +- 0 +- +- +- +- R=252 G=252 B=252 +- PROCESS +- 100.000000 +- RGB +- 252 +- 252 +- 252 +- +- +- R=0 G=0 B=0 +- PROCESS +- 100.000000 +- RGB +- 0 +- 0 +- 0 +- +- +- R=103 G=186 B=45 +- PROCESS +- 100.000000 +- RGB +- 103 +- 186 +- 45 +- +- +- R=49 G=115 B=41 +- PROCESS +- 100.000000 +- RGB +- 49 +- 115 +- 41 +- +- +- +- +- +- +- application/pdf +- +- +- keepassxc +- +- +- AIRobin +- Document +- xmp.did:d533b712-e3e1-2d4d-9d10-810ee84643e0 +- uuid:123ce022-0d47-4398-a2b7-3ac78f3a3ee4 +- xmp.did:2520a7c9-03a3-1044-b2dc-89724d81ad50 +- proof:pdf +- +- uuid:c0995094-a15f-431d-a464-7e378391f643 +- xmp.did:f6c53e8e-957b-984c-ae83-7e48da0435ab +- xmp.did:2520a7c9-03a3-1044-b2dc-89724d81ad50 +- proof:pdf +- +- +- +- +- saved +- xmp.iid:2520a7c9-03a3-1044-b2dc-89724d81ad50 +- 2020-12-19T13:48:23+01:00 +- Adobe Illustrator 25.0 (Windows) +- / +- +- +- saved +- xmp.iid:d533b712-e3e1-2d4d-9d10-810ee84643e0 +- 2020-12-19T18:46:26+01:00 +- Adobe Illustrator 25.0 (Windows) +- / +- +- +- +- Adobe PDF library 15.00 +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-endstream endobj 3 0 obj <> endobj 5 0 obj <>/Resources<>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/Properties<>/Shading<>/XObject<>>>/Thumb 77 0 R/TrimBox[0.0 0.0 362.835 362.835]/Type/Page>> endobj 38 0 obj <>stream +-H‰ìWÉŽÝ6¼ë+øÃGvs½zI F`8@|™ƒœÀñÿ©æ.Î ðìsfO]’Š½±šºýöVÝ>¼5êÍ»·êøzeÒ‰ýøý÷Ïãõ7nÞ~þdÔ_ßï‚N1ç“’Vû![“ì ×A›ÀÁ’zürÜ~ùbÔ»ŽøÿzXc4PLQÛìÕ—#8l{8+ÊI“MÄO.‚ïØ€³•˜'Pxƒêô«ëñ¸ÚçÑY‡½xᆋ¹›}eø¶!ç@w;Ò¨ÇÛ“Ý~«Û§'£¾=©÷ŸU-Ðó>xx©!¨®ûû¯·Ÿzyß@+ÝjcÙÚXBè“öÖu7PðXÖLõ7¸¤|Ô™æsÍD®Šâ²¶ilxìàv{eÙs BåѦRð<læô¡çÑn@ ©Óm!?!élÖ4€ë˜¾gÍ1¢œÆêÏ5s®ßÉkç@™uæA×̹þœÀºÆ×…nñâx3çú ø«Ã èñ5º-ÜÇÚÒ‘SˆÑ„Í "jù5^Úo4¬½4¬$;Ø­¿Bë_Û+ºÒ-‘.íik¯H½½B·ÅŠÜÙ†yi®9"D.yÕN.Í%öµ»iíÝ@ZHq yÉ/K~-A~2SUé‡iÚdÐ-É&¸ƒ\²ñv&–6%¸c&8PBm!(\VsâS±!>ð3‘ˆH°šf‚‹m(Ø9þ/áRBWJÈF1‘éE\€¾AGÔ1éè±WÜRGu\5™¦&cƒ&ï¯zT€²›ùûå èG/uIƒ­›W9J»¥©_în9lþ6»ÓÙ¶`Ÿ«QÐd¼ËÆ^®7-ªÁ9ŽËìt?2;ý2;—]ðÚ誺iîU™ª¾kþ½CâRÿCj›jÛÌ{6$lÀ ÂzÑâDd‘€‰à”qƃ‘~lMP p#°½6±r\8²–*Að¬l܉Ñ;Ð ·ÛK GŠÈ`(HJص™töqrâ çs^ýس ɇé{†¤ ÊÛ°kôÂqEΉñP8,d ùñ¨ ÅK³—X°¨âx§ç¸snU@_Òш(D‘sÔ… žÀHP Ò)V$“;]´åûÈÙ±K°z ûöÍÇèµUŒ·}¿\/3@Æ-äEfš~Œÿâ°å9lïœ +-a™ +-T§BÁã‚ó‚§w žÜ¿ÂÜšåFœãh¤DÂR‘ãÔ‡3_ù €˜¹ì.ˆkH}ëú±ÚÿF»úw½„:`s¶&ÄÎà> endobj 77 0 obj <>stream +-8;Z\tc&omd%#(Z.>iK5:7E$MlS8)@nX*.N7!qYIB9MTq;Go03LnbI_Fbl;Z%nEWj. +-/P*gQJZf#&_B[!f`u+4Q#h)=phP8IOSV0h)-1pRZY%i1H9Pi$\n'Y[XFT#%=&j^m9 +-ZEd@*AV0LAj;Q!?Fbo6'Z9OQ/[)NeOg* +-4E]uKY,GiQCrp^$a_uJ"DP#gpjI$g)o3n]I<>gEm>nOcK[.aGj%:+sUS/H1Or/YXb +-S&q1CrZ>Qsh"-qDo#t6,Wt2MN`BfXF9qUpjgcnFeAJEhY?F.8(d5u]7c!/N\Xct_C!Np`=EQ>e.4NVNEX8#0]Qgm-;MFk@W~> +-endstream endobj 79 0 obj [/Indexed/DeviceRGB 255 80 0 R] endobj 80 0 obj <>stream +-8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +-b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +-E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +-6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +-l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> +-endstream endobj 63 0 obj <>/XObject<>>>/Subtype/Form>>stream +-q +-0 Tc 0 Tw 0 Ts 100 Tz 0 Tr /GS0 gs +-0 TL/Fm0 Do +-Q +- +-endstream endobj 64 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/XObject<>>>/Subtype/Form>>stream +-q +-/GS0 gs +-244.1599945 0 0 245.4399945 59.3429222 55.4917377 cm +-/Im0 Do +-Q +- +-endstream endobj 65 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +-q +-181.417 57.924 m +-113.648 57.924 58.514 113.323 58.514 181.417 c +-58.514 249.512 113.648 304.91 181.417 304.91 c +-249.187 304.91 304.321 249.512 304.321 181.417 c +-304.321 113.323 249.187 57.924 181.417 57.924 c +-181.417 309.085 m +-111.357 309.085 54.359 251.813 54.359 181.417 c +-54.359 111.022 111.357 53.75 181.417 53.75 c +-251.478 53.75 308.475 111.022 308.475 181.417 c +-308.475 251.813 251.478 309.085 181.417 309.085 c +-W n +-q +-0 g +-/GS0 gs +-0 -166.2333221 -166.2333221 -0 181.4170837 216.1957245 cm +-BX /Sh0 sh EX Q +-Q +- +-endstream endobj 66 0 obj <>/XObject<>>>/Subtype/Form>>stream +-q +-0 Tc 0 Tw 0 Ts 100 Tz 0 Tr /GS0 gs +-0 TL/Fm0 Do +-Q +-q +-0 Tc 0 Tw 0 Ts 100 Tz 0 Tr /GS0 gs +-0 TL/Fm1 Do +-Q +-q +-0 Tc 0 Tw 0 Ts 100 Tz 0 Tr /GS0 gs +-0 TL/Fm2 Do +-Q +- +-endstream endobj 67 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +-q +-183.733 277.423 m +-183.733 277.423 l +-182.944 277.423 182.154 277.406 181.385 277.373 c +-181.373 277.373 l +-175.66 277.373 169.677 276.834 164.101 275.815 c +-163.599 275.723 l +-163.5 275.223 l +-163.241 273.919 162.973 272.573 162.973 271.211 c +-162.973 260.992 171.247 252.677 181.417 252.677 c +-191.588 252.677 199.862 260.992 199.862 271.211 c +-199.862 272.573 199.594 273.919 199.335 275.221 c +-199.236 275.721 l +-198.734 275.815 l +-194.381 276.61 189.195 277.423 183.733 277.423 c +-183.732 276.673 m +-188.8 276.674 193.7 275.972 198.599 275.077 c +-198.856 273.788 199.112 272.5 199.112 271.211 c +-199.112 261.417 191.162 253.427 181.417 253.427 c +-171.672 253.427 163.723 261.417 163.723 271.211 c +-163.723 272.5 163.979 273.788 164.236 275.077 c +-169.877 276.108 175.776 276.623 181.417 276.623 c +-182.193 276.657 182.964 276.673 183.732 276.673 c +-W n +-q +-0 g +-/GS0 gs +-0 -24.7455978 -24.7455978 -0 181.4173279 277.4232788 cm +-BX /Sh0 sh EX Q +-Q +- +-endstream endobj 68 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +-q +-181.417 294.52 m +-119.35 294.52 68.854 243.782 68.854 181.417 c +-68.854 119.052 119.35 68.315 181.417 68.315 c +-243.485 68.315 293.98 119.052 293.98 181.417 c +-293.98 243.782 243.485 294.52 181.417 294.52 c +-181.417 293.82 m +-243.098 293.82 293.28 243.396 293.28 181.417 c +-293.28 119.438 243.098 69.015 181.417 69.015 c +-119.736 69.015 69.555 119.438 69.555 181.417 c +-69.555 243.396 119.736 293.82 181.417 293.82 c +-W n +-q +-0 g +-/GS0 gs +-0 -226.2054596 -226.2054596 -0 181.4170532 294.519928 cm +-BX /Sh0 sh EX Q +-Q +- +-endstream endobj 69 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +-q +-181.417 294.47 m +-119.377 294.47 68.904 243.755 68.904 181.417 c +-68.904 119.08 119.377 68.364 181.417 68.364 c +-243.457 68.364 293.93 119.08 293.93 181.417 c +-293.93 243.755 243.457 294.47 181.417 294.47 c +-181.417 293.27 m +-242.795 293.27 292.73 243.093 292.73 181.417 c +-292.73 119.741 242.795 69.565 181.417 69.565 c +-120.039 69.565 70.104 119.741 70.104 181.417 c +-70.104 243.093 120.039 293.27 181.417 293.27 c +-W n +-q +-0 g +-/GS0 gs +-0 -226.1058197 -226.1058197 -0 181.4170532 294.4700928 cm +-BX /Sh0 sh EX Q +-Q +- +-endstream endobj 70 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +-q +-181.417 277.758 m +-128.546 277.758 85.532 234.539 85.532 181.417 c +-85.532 128.295 128.546 85.077 181.417 85.077 c +-234.288 85.077 277.302 128.295 277.302 181.417 c +-277.302 234.539 234.288 277.758 181.417 277.758 c +-181.417 276.758 m +-233.738 276.758 276.302 233.988 276.302 181.417 c +-276.302 128.847 233.738 86.077 181.417 86.077 c +-129.097 86.077 86.532 128.847 86.532 181.417 c +-86.532 233.988 129.097 276.758 181.417 276.758 c +-W n +-q +-0 g +-/GS0 gs +-0 -192.6805115 -192.6805115 -0 181.4170532 277.7574463 cm +-BX /Sh0 sh EX Q +-Q +- +-endstream endobj 71 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +-q +-230.042 264.049 m +-230.112 263.714 230.173 263.375 230.236 263.038 c +-257.765 246.351 276.213 216.009 276.213 181.417 c +-276.213 128.896 233.689 86.166 181.417 86.166 c +-129.146 86.166 86.62 128.896 86.62 181.417 c +-86.62 216.049 105.112 246.419 132.693 263.093 c +-132.756 263.432 132.819 263.77 132.889 264.107 c +-104.757 247.376 85.849 216.576 85.849 181.417 c +-85.849 128.47 128.721 85.395 181.417 85.395 c +-234.114 85.395 276.985 128.47 276.985 181.417 c +-276.985 216.535 258.12 247.305 230.042 264.049 c +-181.417 276.669 m +-175.598 276.669 169.9 276.135 164.367 275.122 c +-164.437 275.397 164.498 275.677 164.582 275.947 c +-170.049 276.927 175.674 277.44 181.417 277.44 c +-187.191 277.44 192.846 276.922 198.34 275.931 c +-198.424 275.661 198.486 275.381 198.556 275.105 c +-192.995 276.129 187.268 276.669 181.417 276.669 c +-W n +-q +-0 g +-/GS0 gs +-0 -192.0446777 -192.0446777 -0 181.4170837 277.4395447 cm +-BX /Sh0 sh EX Q +-Q +- +-endstream endobj 72 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +-q +-174.493 196.469 m +-167.313 196.469 l +-168.313 196.914 l +-173.493 196.914 l +-h +-W n +-q +-0 g +-/GS0 gs +-0 -0.4444444 -0.4444444 -0 170.9031067 196.9139557 cm +-BX /Sh0 sh EX Q +-Q +- +-endstream endobj 73 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +-q +-181.417 57.924 m +-113.648 57.924 58.514 113.323 58.514 181.417 c +-58.514 249.512 113.648 304.91 181.417 304.91 c +-249.187 304.91 304.321 249.512 304.321 181.417 c +-304.321 113.323 249.187 57.924 181.417 57.924 c +-181.417 309.085 m +-111.357 309.085 54.359 251.813 54.359 181.417 c +-54.359 111.022 111.357 53.75 181.417 53.75 c +-251.478 53.75 308.475 111.022 308.475 181.417 c +-308.475 251.813 251.478 309.085 181.417 309.085 c +-W n +-q +-0 g +-/GS0 gs +-129.5558014 0 0 -129.5558014 181.8615265 172.3060913 cm +-BX /Sh0 sh EX Q +-Q +- +-endstream endobj 74 0 obj <>stream +-H‰ìÁ€þ¯î +-€Ùƒ ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUa€ü_AUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU…=8òmUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUvëä@`ØÐÓ¼¨€Ã +á1ŒpãÕØK}oÀ>ê^¬¥¾3`uÇ*õ‡¿T§ à+õwÔ¥xM=ZÀ8uöžT¿0\A€»êŸ¸Ô=8Ù¯¹n +-‚÷¿µaÈ°¡±fëùdr‰8Då«—Ô# +-àÿêËð õtøH}#>U&€/©%À{êðMõÙx£žG/ªÏ'À?êYðCõ®WÏ!€‡Ôç¸V=ƒVŸUà:õü¤>¯À=êÝ0V}e€óÕ{`ŠúØ'«—ÀLõÍNT/€@}z€³ÔÛ S`àõªˆÕgØ_½g–Pc`gõ’XH}’€=Õ`9õa¶SÏ€5Õ×ØH=\VŸh`õfX^}¨€åÕs`õµV€Ô'XT=RvSßm`9õ<ØR}¼€¥ÔÓ`_õQ€ÍÕgX@=HNPßr Uo€SÔ÷ÈÔ3à(õQõ8O}Ù€Ùêõp¦úº3ÕËà\õ…&©GÀáê3LP€ Ô§¬·¨ï=0N½3nRß|`Œzcܦ¾ûÀóê}p£úöϪ·À­êû<§Þ7«<£Þ·«;ü\½'ð[Àîê-À/u€×Õ;€ÕI^T~SgxE½ x«.ð]õzàOê:ßQ/ÞSøªz5ð:À—Ô“€OÔ¡>Wï>W·øX½øšºÀûêÀ—ÕÉÞS¯¾£®ð'õBà»êroÕë€Ôñ~Wo^S÷øO½ x]Ýà—zð#uF€¿Õ‹€ŸªKÔk€Ô1€ËÕS€‡ÔA€›Õ;€çÔM€[Õ€GÕY€;Õ €§Õe€ûÔõ`€:.p›ºýŒQ÷nRw€aêÄÀ=êê0R]¸C]|«C7¨{Àxukàxu옡® œ­.=“ÔÁ€“Õ`žº9pªºñLUgÎT€ÉêðÀ‰ê¾0_Ý8MÝvu~à,uÙˆÔ€“Ô] S7NQ7€T!8C]tbuˆàuÏèÕ-€ÝÕ-` uŽ`ouÉXD$ØYÝqÖQ7 ¶UG€•ÔU€=Õ`1u˜`Gu¿XOÝ&ØNoVT× 6S§€5Õ}€ÔÝ`Yu¢`uµXX)ØEÝlÖVw +-¶P€ÕÕ¥€õÕµ`u¬`uu«ØB+X[]j6Q VVw€}ÔÍ€eÕ‘`'uµ`Qu¢ØKÝ-XQÝg¶S§ ÖS×€ Õñ€ÕÔm`Ku¾`-u™ØT0XIÝeöU7 –QG€Õ€EÔI`ouÇ` uØ]]2èÕ5àuÌ V·€#Ô9€V]bQ Ju‡8F4èÔà uÔ R7€³Ô]€D`NS— u~8OÝ6˜®Ž/'ªë“ÕéàLuß`ª:¼œª.LTg€sÕ€iêèp²ºr0I\ÎVw¦¨ƒ ÀéêÒÀun8_Ý:®Ž-¨c£Õ­à +-uî`¬º´\¢ŒTw€kÔÉ€qêÊp‘:z0JÝX®Rg© À]êîÀu`¸M]> Î+÷©Ûû‹ýúÀ‘Û (ÿÿÓ‚ÉÖ…½Û@²'T}¢Ñu\ØQ]?8XVöT÷U‡€MÕ€#Õ]`[uà8uUØXA8JÝT¶VgR'€½Õ€CÔA`wu àuN n!¼¬Ž)X+¦W§þqVÌ®.)üR^Qw~«“/¨3 +-ÔM€§Õ€ÿÕU€'Õ €¿Õ]€§Ô€7ê0À3ê~À;uà u>ེð°:žðQ]GxPNøLÝGxHNøTHxDÝM¸¡N$< Î&ÜR7îVGn«+ wª“ _©; w©ƒ _ªC ÷¨{ ߨS w¨s ß©[ ߪc ß«k ߨS w¨s _«K w©ƒ _ªC ÷©‹ _¨3 ÷ª› 7Õ‘€»ÕÑ€[êFÀêlÀ u"àu7àSu à1u9àuàAu:ࣺŽð°:žðAGx\]Ox§N#<£î'¼Q‡žRÞ¨ÃÏ© +-©³Ϫ +-ÿ©£O«# +-ÔM€Ô€ßê$À+êŽÀ/uà%uHà_uàEuJà‡³`~uKÀX0¿:¦P·Pç€íÕ)€#Ô=`suàuPØ[ÝA8HT¶VgŽR7€Õ€ÃÔQ`_uà@uVØV@8RÝU6UU‡€MÕ€cÕe`Kuþà`uZØQ]?8\W6TÇŽW×€íÔé€Ôy`;uúà u_ØL>8G]X¶RgNR'€­ÔÙ€³Ô`#uôà4udØH=8O]Y¶Q'ÎTw€MÔÁ€SÕ¡`uðà\uiØB;8YZ¶PçÎV·€ Ô±€ÓÕ±`}uëàunX^:¸BÝ[W‡.Q€ÅÕ¡€kÔÅ`iuæà"urXZ9¸JÝ\VG.SG€…Õ‘€ëÔÕ`YuâàJuwXT8¸T^U®U—€%Õy€‹Õé`IuÞàju{XP7¸\_TÇ ®W×€åÔi€@_–S§ +-uXL6HÔ`1uØ Q€¥ÔY€H`–Rg *uƒXH5ÈÔ`!uÔ SW€eÔI€Pa–Q' Ju‡XD4HÕ!`uРU—€%Ô9€Xb–Pç ju‹X@3ÈÕ1`uÌ W×€éÕ)€Ô9`zuÊ`u˜\2Bd&W‡ ÆP€¹Õ€1ÔE`juÆ`u’˜Z1EÝd&VG †QG€‰Õ€qÔU`ZuÂ` u–˜V0IÝe&U †R‡€IÕ€±Ôe`Nu¿`,u™˜R/Lf¦Tç FS·€ Õñ€áÔq`Bu¼`€Eê´`¬:i©Ó€¹ê¥X£. «›`º,¬n€5ê²`²úi–¨Ã€Ñê¨X¢ f«§`…º+®®€ê®`¸ºjV¨»€éê«X Î +-Æ«³`:+˜¯Þ€ùê«`¾zkÆ««€ê®¯® +-6¨¿`¸:*X¡€áê¨`…:l†«£€ê±­n +-–¨Ë`´º)X¢.€Ñê¦`‹úl«“€5ê´¬N +-Ö¨Ó`°:)Ø£^€±ê¢`‘ºmƪ‹€E궫. +-6©ß`¨:(X¥Ž€¡ê `•:n†ªƒ€]ê¹©î –©ë`¤º'X¦®€‘êž`›ún&ªw€m껨Π֩ó` :'X§Î€êœ`ŸzoÆ©k€…꾧® ªû`œº&بþ€iê™`£úo†©c€•êÀ¦Ž Vª`˜:&Ø©€Qê–`©ºpF©[€¥êÂ¥n ¶ª`’z%ت>€Aê”`­:q©S€µêĤN öª`Žú$Ø«^€1ê’`±ºqƨK€ÅêÆ£. 6«`Šz$ج~€!ê`µ:r†¨C€ÕêÈ¢ v«'`†ú#Ø­ž€êŽ`¹ºrF¨;€åêʡ/`‚z#Ø®¾€êŒ`½:s¨3€õêÌ ÎÖ«3`€:#دÞ€^}ìWo@®®¨; WWÔ«+€ êϨÕÀõçÔê‰à‚úsbuDpB:±:"8¡€XÜP@«~n¨G U?7Ô£ª€#êÒHÕ Àué¤ê†àˆºtRuCpE}:¥z!¸¢>€PœQ§@¨NΨS T'gÔ©ª€;êÕèÔÀõêdê‚àºu2uApHÝ:™º 8¤n€L]R·@¦..©_ R—Ô¯P©€Kê׈ÔÀ)uìDê€à”:v"u@pJ;‘: ¸¥ž€FýÜRÏ@£þn©g Qÿ·Ô³¨û€cêÚHÔýÀ1uí$ê~à˜ºvu?pL];‰º¸¦¾€B½\Sß@¡Þ®©o PççÔ¹¨ó€sêÜÔùÀ9uîê|àœ:wu>pN;:¸§Þ€ÿê{àžzwþ«ï€{êÝø¯¾î©wà¿ú¸§Þ€ïêzà ºw¾«ë€ƒêÞø®®ª{໺8¨î€ïêzà ºw¾«ë€‹êßø­ž.ªà·z¸¨þ€ßêyà¢úw~«ç€‹êßø­ž.ªà·z¸¨þ€Ïêxà¤:x>«ã€“êàø¬ŽNªƒà³:8é±W$0„ú·^‹?ZÂ:xÆêxà¥:xÆêxà¥:xÆêxà¥:xÆêxà¥:xÆêxà§zx¶êwà§zx¶êwà§zx¶êwà§zx¶êwà§zx¶êwà§zx¶êwà§zx¶êwà§zx¶êwà§zx¶êwà§zx¶êwà§zx¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦êv੺x¦Ž½: € Ô¿õZìàÑÖíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ¨ºx^ÕíÀ±W$0„ú·^‹0§Î€@Ì©s PïkêÛ(ÔûÀšúv +-õ>À±W4À@ƒü»žŒþ-`à7õíê}à7õíê}à3uí$ê~à3uí$ê~à3uí$ê~à3uí4êà/õì4êà/õì4êà/õì4êà+uìDê€à+uìDê€à+uìTêà'õëTêà'õëTêà'õëTêà'õëTêà#uëdê‚à#uëdê‚à#uëtêƒàõêtêƒàõêtêƒàõêtêƒàuê„ê„àuê„ê„àuê”ê…àõé”ê…àõé”ê…àué¤ê†àué¤ê†àué´ê‡àõè´ê‡àõè´ê‡à uèÄêˆà uèÄêˆà uèÔê‰àõçÔê‰àõçÔê‰àuçäêŠàuçôê‹`_½9½ú"ØWo@¯¾öÕ›Ы/€yuæPgóê̸ ÞÖÕ—pA½¬«/à‚z#WWÀ uG0®®€ê`[=97ÔÀ¶zrn¨?€iuäQ‡Óêȸ¢ –ÕpE=,«àŠz$V7ÀuI0¬n€;ê“`W½8wÔ'À®zqî¨O€YuâR§³êĸ¤^ VÕ‡pI½¬ªà’z%UÀ)uK0ª.€[ê—`S=8·Ô/À¦zpn©_€IuàSÇ“êÀ¸¦ž ÕpM= ªûàœº&T÷ À=õM°§Þ€{ê›`O½7÷Ô7Àœ:oªs€9uÞ\Tïk껸¨Þ ÆÔupRÝŒ©ëà¦ú'ØRÏ ÀMõO°¥ž€›êŸ`J7WÕCÀ’úm®ª‡€%õÛ\UC궸«> +-vÔkpW}ì¨×à®ú(˜Q§ ÀeõR°¢>€Ëê¥`E}6—ÕKÀˆºln«Ÿ€ õØÜV?걸­~ +-&Ôap]=,¨¿àºz*Pw ÀyuU0 î€ûê«à¾zk€óê¬XPo×ÕW° Þ +-®«¯`A½WW À†ú+¸­ž€ õWpZ5#ê°à´:jVÔcÀeõÓ¬¨Ç€Ãê¦ØQŸwÕK°£> Ϊ“`HœU' À’z-¸ª>€%õZpT]4[ê·à¦zh¶ÔoÀIuÐŒ©ã€“ê XSÏÕ?°¦ž ª{`O}ÜSï Àžú.8§Î€Au^pN3‹ê½àšúfÕ{À1uÍlªÿ€[ê™ØTÿ§Ô1°ª .©_`U=R· À¬º08¤n€]õapG½2»êÃàŒ:e–Õ‹ÀõÉ,«€#ê’ØV?7Ô#°­~ N¨C`]=\P Àºz28 î€}õeЫ7`_}äêŒø@äêŒá±_/Èm#Qïë-W>k'²%Q"~Ó} € êš@­n1Ô5€Xbf¨{­ºÄÌP÷ Ruˆ˜¢.”ê0E]4Õ`ŽºiЩ+ ÀuÓ SG€Iêª@¥n0“ÔU€H`f©»ºÀÌRw u€˜¦.êþ0M]6Ôù`žºmp½º¾ÌS· .WÇ€‰êºÀÅêô0SÝ7¸V]^fªû—ªÃ ÀTuáàJuw˜ª.\¨Î.sÕ€ëÔÕ`®ºqp™:ºLVW®R7€ÉêÊÀEêä0[Ý9¸D\¦«KW¨{ Àtuéàun˜¯n¬W×€ùêÖÀrulØA];X­n-;¨k‹Õ©`uï`©:´ì¢.¬Tw€]ÔÅ€…êÌ°ºy°N]YöQ7–©# ÀNêêÀ"ubØKÝ=X£.,{©»KÔ`7uù`…º¯ì¦.,Pç€ýÔí€ÓÕq`Guýàlu[ØQ]?8YVöT÷ÎU—€MÕ€3Õ]`WuàDuVØWÝ@8O]UöU7NSG€Õ€“ÔI`ouàuQØ[ÝA8ETvW—NPçêÀëêš@ÝBxYS°V|{uJàMÝCxM]RxS÷^R‡~¨‹/¨3 +-¿ÔM€ãêŠÀ/uà°:¢ð¿ºŠpPPx¯î"S>¨ÃGÔý€ê2Àu>àOuàiu<àouàYu;à†:𜺜pKÝGxJN¸­.$<¡Î&|¦n$<®®&|ªŽ$<ªn&|®®$<¨N&|¥î$<¤&|­.%<¢î%ÜQ§î«k ÷Ô­€»êXÀ}u-àŽ:•ðˆº—𵺔ð:˜ð•º“𘺘ð…:“𨺙ð©:’𸺚𙺑ð„:›p[]HxFÝM¸©$<§.'ÜPçžU·þRÇžW×þT·¨ó Õe€Cê€À{uà˜º ðNE8ªn(üVGŽ«+ +-?ÕI€WÔ€ê"ÀKêÀ›º‡ð¢:¥`¬øþê–€±`€º¦l¯N!œ¡î)›«C程 +-ÀÞêÀIꤰ³º‚pš:ªì«n œ¨Î*»ª §ªÃ +-ÀžêþÀ¹ê²°¥:p¶º­l¨Žœ¯®+Û©Ó+Ô}`3uø`º°l¥Î¬R7€ÔÕ€eêÈ°ºy°PYvQ–ªC ÀêÞÀbujØA];X­n-¨cëÕµ`¼:up…º· W‡®Q€ÑêÌÀUêæ0X9¸N]]ƪWª» ÀPuààZuy©Î\­n/Õq€ëÕõ`œ:mP¨û À0uØ R'€Iêª@¦Ž0sÔM€Pa¦¨‹©:ÄÌP÷ buŠ˜ ®äêðíÕ)€AÝc¾¹:dðo¨‹ À·Vg øý:À©ä¢ èûŸÚ²eYhX>ÌLvuG¢ò°ŠºÉ VG ÖQW€±ê„ÀRê00SÝ/XLf&ªëË©ã À·ª3Ǩ£À}êÆÀAêìp“:0p˜:ýÜ¡® §Ž?—«ÓGªת»‡ª'ª£«gW©‹G«‡—¨sÇ«Ç?W·ð[LWwøW= ø:"ÀÿêYÀwÕÞ¨‡ßRçøE=xYàõ@à5u7€wÕ€ÔÑ>TϾ¨ð©z*ðu-€?©×R—ø‚z0ð©:ÀÕ£€Õ‰^PÞW÷xM½ø]Ýàeõ|àu€o©'oÔQ¾­žü§ð#õ”àu €Ÿª×u €+Ô‹àlu€«Ô«à\u€+ÕËàLõõ®V¯ €óÔ—¸C½0ÎR_}à.õÊ8G}ñ€;ÕKàõ±nWÏ €íÕ‡xD=9¶Vyà9õîØU}߀gÕÛ`GõmžWï€ÍÔgˆÔ#`#õIJõØC}Í€Z½FÆ«9°†z“LVßp`õ.ª>ßÀjêu0O}¹€Õ `”úhëªw +-Àõ½ÖVo€êS LP/€µÕW˜¢^-˪40K½]TŸf`¢zÁ¬¥¾ÊÀXõŒXE}€áê1Ы/1°…zÒ”ê l¤6úúÛ©ç ÀÃê³ l«ž9O©ï-°¹zìÜ®>´À!êÑpŸúÂG©§À êÓ +-©ž@ªO*p´z +-\ >¥ù®€Ñê +-ðF=¾¡>ï©7À×Õà3õVø£úP|M½š>PŸG€—Õ +-à­ú&ü@=¥>stream +-H‰ìÁ€þ¯î +-€Ùƒ ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUa€ü_AUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU…=8òmUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUvëEn Š‚ }ÿKÛÐLÏŒz‘²–ˆýWÀ¤~>¥þjXÚs™®çà'纒€—tÅ~Oý7`4u£«þA«“üqõ€kÕþ²úÀÙêæ~³úwÀ êÌ>Sýoà-ê°¾Lý£àiuL'꟩ :Vÿ~8 ÎæÔ§€ÏÔ­<¤ú(p«.äÁÕç€ßê.žF}(¶Vçð|ê‹°¡:‚'VŸ€Ôñ»€ú„l ŽÞ•Ô·`Yuê.©>*Ë©wiõqXGݶ;¨o Àüê¦ÝI}kæU·ì†ê“0¡:b7VŸ€™ÔõJ½fPW+ÕC`lu¯r«Þcª;•»êY0šºPùJ½FQ—)Ô# W7)‡ÕS T×(ª@£îPžRÏ€«ÕÊ êñpº=yY=!®PW'oR €sÕ½É[Õsà,uir‚zT¼_ݘœ¦žïT×%'«À›ÔaÉê•ð²:)¹N½5^PÇ$«ÀsêŽ$QÏ€‡Õ I§Þ¨ã‘X=@Ž©»‘!Ô3à[u22Žz‹|¡ŽES€OԡȈêUðAˆ «ž&7êø§.CÆWo€ƒê¡l¯BfR¯`cu +-2z²›ª39Õ»ØO]€Ì«Þ.ÀVêøcrõ€¶Q‡ ¨G °…:úXE½d€ÕÕ½ÇJê5,¬N=–SO`Qu汤zÖ ªeÕÓXLw¬­Þ7À:ê²c}õÆÖPW{¨w0¿ºèØG½u€¹Õ5Ç^ê½L«96T`Juı©zøÓ©ŽÕã˜Jol®~Өà Ô;Àu´ÁõC^lð_ý†VÇܨÀ°êPƒêG0¤:Òà®úaŒ§.4øLý6ÆR×|¥~ã¨Ë ¾S¿€1ÔUGÔï WU¿€V]cð€ú¹„êƒÕO Rg<¡~6¿Ø­ä¸mˆ‚÷¿uJ‰Ë‘e}v—$@tßa¦@ N0xQ=€Ñêþ‚×Õë©n/8¦^À(uwÁaõˆ†¨£ NQ àrupÁiê1\«®-8S½'€ëÔ¥g«7pº²àõ¬®P7\£^ÀÙ꾂ëÔë8SÝVp©z`§©Ã +-.W àuUÁõÎŽ«‹ +-©§pPS0P=7€#ê–‚±êżªî(®ÀKꈂD=<€çÕ•z{Ï©ë BõüžQ·´ê<ªî&ÈÕ#xHM0…zˆ?«‹ fQoà{u-ÁDê9|§n%˜K½H€¯ÔÓ©G 𹺒`Fõ.þVLªž&ÀGuÁ¼êu¼W·L­(Àÿê2‚ÙÕøO]E°€z¦oê&‚5ÔK¨{–QØ]]C°’z¯ÀÎê‚ÅÔ“öUw¬§^-°§º`Iõp€Õ«ª· 즮XX=_`/uûÀÚêû¨»–WØE]=põŒ€=ÔÍ÷P/¸¿ºwà6ê1wW×ÜI½gàÎêÒ›©' ÜWÝ9p;õ¨€»ª+î¨Þ5pGuáÀMÕÓî§î¸¯zÝÀÍÔqwV︓ºlàæê‰÷Qw Ü_½rà&ê¨Ô;î .ØD=u`}uÏÀ>굋«cvRïXY]2°™zòÀºêŽýÔ«UG ì¨Þ=°¢º``Sõô€õÔý۪Ǭ¦®ØY½`)uºÀÞêÖQw l¯>`uµâxHÝ,À›ú €ùÕ½üRŸ0»ºV€ßê;æV· +-ðN}ÀÌêRþT0­:S€êWæT7 +-ð‰ú€Õ…|ª¾`>uŸ_©ß˜L'À×ê¦R§ ðú!€yÔ]ü > `u•?ªo˜CÝ$À#ê§&P ð˜ú+€\#À£ê·Zu‹O¨(Õ%<¥¾  Swð¤ú4€J]!Àóêßu‚¯¨ŸÔ¼¦þ`´º>€—Õ÷ŒU·p@} ÀHuy‡ÔŒSwpTý"À utÇÕ? Q'p†úI€êàÎQ p¹:7€³Ôo\«n àDõ¡WªK8U})ÀuêÎNVŸ +-p•º2€ÓÕ·\£n à +-õ³¨¸Fý-Àéê¼®R¿ p²:.€ëÔÿœªN àJõÃ'ªÃ¸Vý1ÀYêª.Wß pŽº)€ê£ÎP0D}5ÀquOƒÔgU×0L}7À1uKÕ‡Q—0T}9ÀëꎫOxU]Àpõí¯©ÔǼ¢. Q_𼺀H}>À³êz2õýÏ©ÛÕ<£. U_𸺀X}BÀ£êjrõ ©›˜@}DÀ#êb¦P_𳺀IÔgü¤®`õß«[˜H}HÀwêR¦R_𵺀ÉÔ§|¥®`:õ-Ÿ«˜P}LÀgêB¦T_𷺀IÕçü¥Î`Võ;ÔqÌ«þ'àu3« +-x§`nõG¿ÕYÌ®~)à—: +-€ùÕ?ü«N`õQoê"–P_ ÝÕgÔ5,£¾+Ø]ÝÀBêÀÍÕ)¬ävëG’‚ øÿ§w»3ÓvgÛŽxDVÕÅ€£ÕGXKÝ,8X}€ÕÔÕ€cÕ'XOÝ-8T}€Õå€#ÕXR.8Q½ÿÀ¢êxÀyêõ–Uç NSo?°°:`p˜zú•Õ€£Ôì­n¤ž}`uuÅàõèë«;‡¨'Ø@28C½øÀê”À ê½6QÇ PÏ=°‹ºf°½zì}Ô=€ÍÕSì¤.l­z`+uÒ`gõΛ©£ûªWØN5ØV=òÀ~ê®À¦ê‰vT— ¶T<°§ºm°¡zÞMÕq€ýÔël«Îì¦Þv`cuà`3õ´;« [©‡Ø[Ý8ØH=ëÀîêÊÀ6êQ¶WgvQo:p€:t°‰zÒÔ¥€-Ôƒœ¡nl žsàuí`yõ˜Ǩs««·8H<X\=åÀIêâÀÒê!ÎR7VÏ8p˜:z°®zÅãÔÙ€UÕ¨,ªžpàDuù`Iõ€gªÛ ªç8T?XO½ÞÀ±êüÀrêñÎU÷SO7p²º€°”z¸£Õ €•Ô» ®Ž ,¤žmàtu`õhÔ€EÔ“ à»ÀKêÅøÍy€—Ôƒ ð‡º…°€z®þTׯk€¿Ô9€§«·àouàáê©øG]Dx´z¨þ­n"TO(ÀýêòÀGêÔé€Ô +-P¨Û ¨ç QÇ>PÏ'@£®/¼­O€H_x[=ž•º¿ð¦z:2u€àMõttêÀ[êáýÎnåZaÅ@ÌþW EQ¸|õ±]µˆž© ¤N€RÝ`øõl¤êÀ¨g UW>V&@¬Î0|¬M€ZÝaøP=™¹:Äð¡z2zu‰à#õ`< N1|¤L€Ô-€Ôs ð„:Æðz.ÞP×~«K€GÔ9€ßªÇàuà7ê©xFdøz*ÞQ~©J€‡ÔI€_ª‡à%u“àê™xJeø…z&ÞRW~ªI€ÇÔY€ŸªGà5u—à'ê‰xNfø‰z"ÞS—¾T$Àƒê4À—êxQÝføB=Oªã _¨çàMuàõ8<ªÎ3ü G€WÕ}€ïÔÓð¬:ÐðzÞUþ§F€‡Õ‰€ÿ©‡àeu£à?êYxZiøzÞVWþU"ÀãêLÀ¿êQx]ÝiøG=‰Ï«C ÿ¨'à}u©à›z¨S ßÔƒ0@jø¦D€ êVÀ_®;ÀGêXÀ_¾;ÀgêZ€ëð™:×à»|¨î5çÕS0FlΫ§`ŽºØW!À u²8®B€Iêfp[½ƒ“ÔÍà´zF©£ Àiõ ÌRW€Ãê¦Î6‡Õ#0MÝmΪ'`œ:ÜœUO À€±ê€pN=}sÕà˜zø«À1õð V'€cêᘬn8§Ô³0ZqN©g`¶ºâRÀpuÆ8¤=€áêŒpH=zÓÕàŒzòÆ«CÀõäÌW—€#êÁX N9GÔƒ°@rŽ¨`ƒºåœPÏÀ +-uÌ8¡ž;€êšp@=vKÔ9à€zì–¨sÀõØlQ÷€õê©X£:ëÕS°G]t¶«—`ºè,WÀ"uÒX®:€MꦰZ=s«ÔQ`µzæV©£ÀjõÌìRW€Åê‘X¦Î:‹Õ#°Lu«G`›ºë¬UOÀ:uØX«ž8€}ê²°U½pûÔe`©zàªÓÀRõÀlT·€ê}بn;+Õó°RwVªç `§ºîlT¯ÀNuÝX¨7€¥ê¼°P=n[Õ}`ŸzÛ¶ªûÀ:õ´¬U€uêiØ«.<ÛÔË°W]x–©‡ `±:ñ,SÀfuãØ¥Þ5€ÍêÆ°J=k«Õ‘`•zÖv«+À&õªìVW€EêQX®Î<‹Ô£°]Ýyö¨7 `»ºó¬QOÀzuèX£ž4€ýêÒ°E½hûÕ¥`‰zШSÀõ \P·€ê=¸ n=+ÔspB{V¨ç à†ºölP¯À uíX 3€#êÜ°@=fGÔ¹`zÌ®¨{Àxõ”œQ€ñê)8£>ãÕSpG]|¦«— àŽºø WÀ!uò®2€Cêä0\=d—ÔÍ`´zÆN©£ÀhõŒœRG€Ñ긥®>“Õ+pK]}«G à˜:û VÀ1uö¬1€kêî0V=açÔá`¬zÂΩÃÀXõ„ÜS—€©ê¸§.?CÕpP~†ª à :ý UÀEuû˜©Þ/€‹êöÿÍnåHn0„ïiÃãñ¸—*©ÿ’Š8“©ÎÀ#ÕãÀ‘ê|¨£À´:S|TW€eu¥ø¨®ËêJðQ]†Õ‘à“: «#À'uVG +-€Oê,0¬ŽŸÕ]`WÝ(>«»À¬:Q|Q‡€Yu¢ø¢³êDðEfÕ‰à‹: ̪ÀWuXU +-€¯ê20ªßÔi`T(¾©ÓÀ¨:P|S§€Qu ø¦N£ê@ð]Ý6Õ}໺ lªûÀwu˜Tç €ê80©Î/Ôq`R'^¨ãÀ¤:O¼R×€Eux¥®‹ê:ðJ]Õqà¥: ªãÀKuTÇ €—ê<0¨Ž/Õy`P'^«ûÀžºM¼V÷€=u›x­îsê4ðFæÔià:Ì©ÓÀu ˜S§ €7ê@0§NïÔ…`M]&Þ© ÀšºL¼S€5u™x§.cê0ðVÆÔaà­:Œ©ÃÀ[u"S‡ €·êD0¦ïÕ`KÝ%Þ«À–ºK¼W7€-u—x¯nSê,p¡ŽSê,p¡ŽSê,p¡ŽSê,p¡ŽSê,p¡ŽSê,p¥®Kê*p¥®Kê*p¥®Kê*p¥®Cê(p©ÎCê(p©ÎCê(p©ÎCê(p©ÎCê(p©ÎCê(p­î;ê&p­î;ê&p­î;ê&p­î;ê&p­î3ê$p£3ê$p£3ê$p£3ê$p£3ê$p£3ê$p£3ê$p£3ê$p§.+ê"p§.+ê"p§.+ê"p§.+ê"p§.+ê"p§.#ê p«N#ê p«N#ê p«N#ê p«N#ê p«N#ê p«N#ê p«N#ê p«N#ê p«N#ê p¯nêp¯nêñ7{uLAAŒ?kðßNVH$ðV_À†ú#Þê+ØPÀ[}êx«¯`Cýoõl¨?à­¾€ õG¼ÕW°¡þ€·ú +-6ÔðV_À„º#ê,˜PwÀAêŽ8¨³`BÝuL¨;à Î€ uGÔY0¡î€ƒ: &ÔpPgÀ„º#ê,˜PwÀAêŽ8¨³`BÝuL¨;à Î€ uGÔY0¡î€ƒ: &ÔpPgÀ„º#ê,˜PwÀE½ 긨·`A½õ,¨7à¢Þ€õF\Ô[° Þ€‹z ÔpQoÀ‚z#.ê-XPoÀE½ 긨·`A½õ,¨7à¢Þ€õF\Ô[° Þ€‹z ÔpQoÀ‚z#.ê-XPoÀE½ 긨·`A½õ,¨7à¢Þ€õF\Ô[° Þ€‹z ÔpQoÀ‚z#.ê-XPoÀE½ 긨·`A½õ,¨7à Î€ uGÔY0¡î€ƒ: &ÔpPgÀ„º#ê,˜PwÀAêŽ8¨³`BÝuL¨;à Î€ uGÔY0¡î€ƒ: &ÔpPgÀ„º#ê,˜PwÀAêŽ8¨³`BÝuL¨;à Î€ õG¼ÕW°¡þ€·ú +-6ÔðV_À†ú#Þê+ØPÀ[}êx«¯`Cýoõl¨?à­¾€ õG¼ÕW°¡þ€·ú +-6ÔðV_À†ú#žê*Q‡ÀS]#êxª«`DOuŒ¨Cà©®€uH<ÕU0¢ €§º +-FÔ!ðTWÀŠz$^ê)XQÀK=+ê‘x©§`E=/õ¬¨Gफ़€õH¼ÔS°¢ €—z +-VÔ#ðPGÀŒº$ê(˜Q—ÀC3ê’x¨£`F]ųKà¡Ž€õI|«Ÿ`G}ßê'ØQŸÀ·ú vÔ'ð­~€õI|«Ÿ`G}Ÿê&R§À§º †Ô)ð©n€!uJ|ª›`HŸê&XR¯À—z –Ô+ð¥^€%õJ|©—`I½_ê%XR¯À—z –Ô+ð¡N€)uK|¨“`JÝê$˜R·À‡: ¶Ô/ð[}[ê—ø­>€-õKüVÀ–ú%~«`Ký¿ÕG°¥~ €Ÿê"SÇÀOuŒ©c৺ÆÔ1ðS]kê™ø¥€5õLüRÀšz&~©‡`M=¿ÔC°¦ž €ê ˜S×ÀuÌ©kà‡:öÔ7ð¿úöÔ7ð¿úöÔ7ð¿úöÔ7ð¿úöÔ7ð¯ºÕ9ð¯ºÕ9ð¯ºÕ;ðŸzÕ;ðŸzÕ;ü±[Ça1Ëù'í’e["©sºƒØYþ¤®/ªëÀŸÔuàEuøƒ:<©ÎPÇ€'Õyàê8ð¦ºO|U·€7Õ}ૺ ¼©î_ÕmàMuŸø¢NªÀuxT(¾¨ÓÀ«êBðY]^U +-€Ïê2ðªºP|V—€WÕ…à“: <«NŸÔaàYu¢ø¤ïªÀGuxWÝ(>ª»À»êFðQÝÞU7 +-€ê,ð°:R|Pg€‡Õ‘àƒ: ¼¬®¿««ÀËêJ𻺠+-¼¬®¿©£ÀÓêLð›: +-<­Î¿©£ÀÛêNðKÝÞVw +-€_ê&ð¶ºSüR7€·Õàux\*þW'€×Õ¥à?ux]]*þS€×Õ¥à?ux]]*þU€çÕ©à_ux_Ý*~ª{ÀûêVðSÝÞW· +-€Ÿêð¾ºUü£ÎÔ±àu˜ ®?Ô5`‚ºVüP×€ êZðC]&¨kÀ_®;ßRç +-€¿|w¾§î¾;ßS÷ +-߀ï©{€ëÀ÷ÔÁÀwà›êbP—€)êbP—€)êbP—€)êbœW‡€1êdœW‡€9êf\Ww€9êf\Ww€9êfWg€AêhWg€IêjÜVW€IêjÜVW€IêjœVG€QêlœVG€Yên\V7€Yên\V7€YênV'€aêpV'€iêrÜU€iêrÜU€iêrœU€qêtœU€yêv\Uï?óÔí¸ªÞæ©ÛpT=ÿ TÇ à¨zþ˜¨®ÀMõú0Q]/€›êõ`¢º^'ÕãÀHu¾NªÇ€™ê~\To?3Õý¸¨Þ~fªûpP=ýLU àžzù˜ª.À=õò0U]0€sêá`¬:açÔÃÀ\uî©w€¹ê†\Sï>sÕ 8¦ž}«#pL=ûLVW à–zõ˜¬®À)õè0Z1€SêÑ`¶ºc—Ô›ÀluÇ.©7€ÙêŽRO>ÃÕ!8¤ž|¦«KpG½øLW— àŒzð¯NÀõà0_Ý2€+ê½`¾ºeWÔ{À|uËŽ¨ç€ êšÜP¯=Ô5¸¡^{6¨kpB=ö¬Pç à„zìØ¡îÀõÖ°CÝ3€ê©`‰:hÔSÀuÑö«—€-ꢬW=kÔIX¯zö¨›°]½óìQ7 `¹zæX¤ŽÀrõÌ°I]5€Ýê•`“ºj«Õ#À*uÖV«G€]ê®lVo<»Ô]X¬žx–©Ã°X=ñlS— `¯záئ.ÀZõÀ°N6€µê`Ÿºm[ÕûÀ>uÛ–ªç€…ê¸,UÏ;ÕuØ©^w6ªë°R=î¬Tç `¥zÜØ©îÀFõ¶°SÝ7€…êi`©:p ÕÓÀVuáö©—€­ê¬S;{ÕئÞuöª°M½ëìU7`™zÖج®À.õª°Y]9€]êU`³ºr«Ô£Ànuç6©7€ÝêÎ,RO:ËÕ¡X¤žt¶«K°G½èlW—`zÐدnÀõž°_Ý:€-ê=`¿ºuKÔsÀuív¨×€ êÚ¬P9'Ô¹ãovë7Ž‚àÿ½0†/Ižéf3I3âYüê˜p†zïþuË8C½wÿ€:圢^<€ýÕ%àõâl¯9Ǩ'`{uÈ8G½y»«;À9êÍØ\qNR¯ÀÞêŠp’zõ¶VG€£Ô³°µ:✥Þ=€Õ à,õîl¬N8§©—`_uÁ8M½|ÛªÀqêéØVpÎSoÀ®ê~pžzû6Uç€Õë°§ºÞœ¨^?€-ÕñàHõül©Ž7gª÷`Gu»8S½ªÓ À©êØO]nNU/ Àvêpp®zvSw€sÕ°™:Û¬A€ÍÔÙàdõ +-쥮6'«W`+u´8[½ƒ;©› ÀÙêØHlNW/!À>êbpºz ¶Qê-ØEÝk¨·`u¯ ÞB€MÔ¹çà5u­ÀwxIkø¦ÞC€Ô­€oê=Ø@jø_½ˆë«K ÿ«`yu¨à»zVWw¾«7`qu¦à‡zÖVW~¨W`iu¤à'õ,,­Ž4ü¬ÞE€•Õ€ŸÕ»°°:Ñð«zÖU~U/#À²ê@ÀïêmXUÝgø]½‹ªó ª×`MuàOõ:,©Ž3|¤ÞG€Õm€Ôû° :Íð±z!ÖS—>V/$Àrê0ÀgêXMÝeøL½‘‹©³ Ÿ«W`-u•àsõJ,¥Ž2|¥ÞI€•ÔM€¯Ô; °:Éðµz)ÖQ¾V/%À2ê ÀßÔ[ °ŠºÇð7õV,¢Î1ü]½–k¨k W¯%ÀêÀ+ê½XAÝbxE½— ¨S ¯© W—^S/&@®1¼ªÞL€ZÝaxU½™±:Ãðºz5Zu…àuõj¤êÀ;êÝ(Õ €wÔ» ª ï©— SÞS/'@¦0¼«ÞN€JÝ_xW½‘:¿ð¾z=u|àŠz? +-u{àŠz?uzàšzAæ«Ë ×Ô +-0]^¸ªÞP€ÙêîÀUõ†LVg®«W`®ººp]½¢SÕÑ€;꘩n.ÜQï(ÀDuràžzI¦©ƒ wÕ[ +-0KÝ[¸«ÞR€IêÜÀ}õšÌQ×î«×`Š:¶0B½§3Ô­€ê=˜ N-ŒQ/*ÀóêÒÀ õ¤<­î,ŒRo*ÀÃêÌÀ8õª<«®,ŒS¯*À£êÈÀHõ®<©n,ŒTï*ÀƒêÄÀXõ²<¦,ŒVo+ÀSê¾Àhõ¶<¤Î+ŒW¯+À3êºÀxõº<¢Ž+<¡ÞW€'Ôm€GÔ 0^]VxF½°ÃÕa€§Ô 0ZÝUxJ½±ƒÕY€çÔ+ 0TUxR½³#ÕM€'Õ; 0PTxV½´ãÔE€gÕK 0LTxZ½µƒÔ9€çÕk 0F]Sx^½¶CÔ1€ê½¡n)LQ.À}uI`Žzqn«C +-³Ô› pWÝQ˜¥Þ\€›êŒÀ<õêÜRGfªwàŽº¡0S½»7Ô €¹ê帬(ÌVo/ÀUu?`¶z{.ªó óÕë pIO(Ôû pEÝN(Ôû pANhÔ ð¾ºœ©'à]u7 Ro0À›êl@§^a€÷ÔÕ€P=Ã福 ¥z‡ÞP'ZõÿÇn ¹m@´ÿÿiGH!ëÚ]‚$€š#óÕ p\]LˆÕS pTÝK¨Õ[ pPKèÕk pL]K@=ÇGÔ­€Ô{ p@JC½ÈÕ¡€QÔ› ðHÝIE½ÉÔ™€qÔ« ð¥:’0’z—¾R7FRï2ÀêDÀXêeøTHM½ÍŸ©ûéÇàcu`<õ:|¨Ž#Œ¨Þg€Ôi€1Õ ð·ºŒ0¦z¡þR‡FUo4Àê,À¸ê•ø]]EX=Ó¿ª›#«wàu`lõRü¯"Œ®Þj€êÀðê±ø®®!Œ¯^k€oêÀ ê½ø×u€cêÅðÝà z²êÀ,êͶWgæQ¯6°¹:‚0“z·½Õ €©Ôà ì¬. Ì¥^n`cu`6õvÛªóó©×ØU]?˜P=ßÀžêöÀŒêý¶T§æT/8°¡:|0«zÃýÔÝ€iÕ#즮Ì«^q`3uô`fõŽ[©“s«—ØI]<˜\=åÀ>êÞÀôê1vQ×æW¯9°‰:v°‚zÏ-Ô©€5Ô‹ì .,¢žt`}uç`õ¨««+ë¨WX\9XI½ëÀÒêÄÀZêeVVSo;°®ºo°œzÜUÕu€Õó¬©n¬¨Þw`IuÚ`Mõ ªÃ«ª7XN5XW½òÀjêªÀÂê™ÖR7 –V=°’ºh°¶zé…ÔA€ÕÕ[,£Î¬¯^{`uÌ`õÞk¨[[¨XA]2ØD=ùÀüêŽÀ.êͦWg öQ¯>0¹:b°“z÷©Õ €½ÔËL¬ì¦Þ~`^u¿`;õø³ªëªç˜SÝ.ØR}€Õå€=Õ˜P.ØUý€éÔÙ€}Õ/˜L-ØYý€©ÔÉ€½ÕO˜H,Ø]ý€yÔ½€íÕg˜E]+Ày©[üã¼GÔ¥¾©/0¾ºSÀwõ'†Wg +-ø¡~ÀàêH?Õ¿Z(àWõ3V +-ø]ý €aÕyþT¿`Puœ€¿ÕÿSÝ&àõAFT— øP}€ñÔ]>QŸ`4u•€OÕ7KÝ$à õQFR øR}€qÔ=¨Ï0ŠºFÀCõ]ÆP·8 > Àê‡Ô—èÕªOP«+Vß U7xB}€R] à)õu:u€'Õç¨ÔõžVß Q·xA} €B]à%õ…îWwxQ}"€»ÕÕ^Vßà^us€7ÔG¸S]à-õ•îS÷xS}&€»ÔµÞVß àuk€Ô‡¸C]àõ¥®Ww8I}*€‹Õ‘ÎSÿ +-àRub€3ÕϸPà\õ·.Sç8[ý.€‹ÔqÎWÿ àuZ€KÔ8_Ýà"õÉÎVW¸L}3€sÕM.T àLuQ€KÕW8MàjõÛNRǸ^ý7€SÔ)îP?àuH€{ÔŸx[à6õíÞS7¸Q}<€wÔnU_àuu?€›ÕçxQà~õÿ^R§(ÔxA Qàiu6€L}C€çÔÍBõžQHÕW8¬ÎP«ßpP  Wÿà:ÀêKÞ©ã†Uàƒ:`Lõ2>Q' ¨ž%À u&ÁhêMÜV—Œ¤Þ#À—êX‚aÔcøVL0†z‰w¨“ PÏàNu6A­Þ ÀÝêp‚T=@€‡Ôñ™z|« +-õòžP'êÙ<©Î(¸Z½9€çÕ%Wª÷ð’:¦à2õØ^V\£^ÀꦂóÕ+8HUp²zbªÓ +-ÎTï àXu]ÁYêm®,8E=,€SÔ‘‡«Gpš:´àXõ¢ÎT·§^ÀÉêÜ‚ƒÔS¸@\p€zF©³ ^Uoà:uyÁ+êý\«®/xV½€ËÕO©‡¨# V S‡<¤ @ªŽ1¸_½€ZÝcpŸz)#¨› ¾W¯`u—Á×ê…Œ¤n3¸­^Àhê>ƒÏÕËQÝhðQ½ +-€QÕïÕ‹YÝjð¦^Àèê^ƒ_ê%Ì n6Pî÷ª»ÝÕ ˜IÝn쬾~€ÙÔýÆ®ê˘QÝp쨾z€YÕÇnꋘYÝr줾v€ÙÕ=Ç.êKXAÝtì ¾r€UÔ]Çêê XIÝv,¬>n€åÔÇ¢êÃXRy,¨>j€uÕ¥ÇZê{X[]{¬£¾e€õÕÅÇê3ØD}L¯>a€ÔéÇÔêóØMÝ̪¾\€Õ È„ê£ØW]‚Ì¥¾W€½Õ5È<ê[ .B¦PŸ)¿Ô]Èèê àM݆ ¬>NþU"cªï€ÏÔ•Èpê“යI}|­îEQ"÷¨«‘^}ƒÜ«.GRõù𘺉ԇÀ3êŠäzõÍð¬º$¹T}n¼¦îI.RG¨«’óÕ7Àaê´äLõup°:09G}Wœ¢ÎLŽV_'ªc“ãÔ·Àéêääõp‘: TG*Õ7À°êTå/õ10¼:Yù_}L¢×ÍÕÏÀdê€ÝTýìLªÙÍÔÏ Àäê ÝEýÎ,¡ÎÚåÕ ÀRê¼]Vý°¬©îÜÕÔï ÀÚêÞýÁnÛ0 @ì¿kÉ#Ûô-)Δp—ìSÔ?°†º{'WßÀjêžSý«ªKx*õYP7ñ ê࣎ãqÕÏÀu&¦þþªƒyõ °YÏzyØ£îè{ÕkÀQuS_¯^ÎT÷õ5êUà2ulŸ¥ÞnR§÷nõp©S|³z(EÝæ¿Ô»À¸êZ«7€Éèu˜“V€‡æ¼Øƒ ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUa€ü_AUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU…=8òmUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUöà€@Ðÿ×ý¾`®‡nA +-endstream endobj 76 0 obj <>stream +-H‰ìÁ€þ¯î +-€Ùƒ ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUa€ü_AUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU…=8òmUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUöë ·a¢(zÿKÙdAâZ’zïöhó ø¹*ýáÀ2—ï÷ ·üZpI@_уáoéI€§ôyð¡ôLp¬ô1pUz78Eºýï’Þ¦J·þ"éY`tÞïÞZKývéÁ tÄg¥×€ÒÝ^Fú! ®t­W”~¨¥aŽ÷ûbèmLw¯þçÙƒ ¶:¨ªúU¸×±}ìÀפóƒà¹üÊ"ðB"¿cxÐÅŸ±'SÃ_³ÇÑÀÿ`;¡|ï`Ef¼÷2'#ÉÜ5ÜL¢n30¨ÚMÜ4¦fw38 ©Ø÷¨×4@ªµ÷…©Õb<ÉÔ¢¼ •èÓÚ<%Ó<Y‚´ç)J´çÛiж<ûˆÏæœì :gp>°”ÞœÄùÀ"Jó—ý:Á­ +-¢(ÈþW bÿÁ~CU+°ä¾Òyù§Œ¦1ËòkG]Vç0‚®lÁoàEÙˆ ÀUZ²¿€ TdOž¼E?væïð"éˆà9ÑÈÏ‘‹|â8!ùŸ›à‘È1‡Àgúœ¿)Cžq#¼R…»¿<zÓƒ¼Áµ´%y—“èHr…'@3ë@Ú{\@ºœ@yŠA¼*S{ 垊z ç¨ +-yÌá²j‘wÌãõP‡´c2'Pªcw¢c·™šc)÷”c9Gˆc ‡Œ€cׇvc/ƒlc?¯€ø$1x=Ä&×Ä9„%ÕÆI„$ÓÈY„£ÐÊë uF`^a(3‚ózA•‘€3ØN’‘…SØÉËLœ+À.^dãdvðr #g °œ#)§ °”ü"1ç °Œô"9' °„ì¢W 0—E¸d€©¼¨Ã5L¤µ(Åë`E9^h,Jr؃ ,ÊrÜ#©+*sߣ(+ªsã#¨*:pæwy9ЄS¸GNч×ÀuRŠ^\<À5§%¤(ËÑ\ ¢hÉá¼I@Ñ–Ûxƒ—¹€—)'šózx‰l‚Óìþ.€@¼àƒ%<¦—à³1XÀ/ø Î(%øÊ&Ž¨$øælv4¦ài|¥àŒuü£àøKÁc^¿¨"xÎL$¼äd)¦´!‡àUÖtvÒBb Ж‚÷œlÆh€âT¼Ïl€†$\q²ÓÊ’?p•õ­ˆ¸Á€€6„ÜcC@²n3# É#XPžàAl ¨MíÀ0Çs²' ©CYP•ÎÁŽGeU@r"&°+ …SO˶€´ä Lc]@%Ú&20 esÙPƒªéÌ ¨@ÓÀ +-–d§g`crS3°Ž¹‰IXépq&$ c`1£rR1°žÝ )ØÁãÈF¿À.Ƥ"^`ŸÃý “r­LHB¶ÀnV¤ Z`¿Ã"‹bLN®@Ö„&V {âòt€PLJ¦@4V „$R »âñt€LˆFž@P@(â³O OÍB€(t w4R+Ö%Ÿû‰$p,ØM@Æ +-ì¥F {6’"‰Å»èHÆh€=T¤c¶À2²\`99Ù.°–ú€´ÌXI{@b ¬£< 7ñt€ì¬XBs@~À|ŠJ0e`6½U30•§ÔaÎÀDR*9X´Icè ¨Åã˜De@5À *2l`8O¨É´€ÁäTeÝÀPâê:Ø·W) ¨ÌãFW@qFŒ¡* <38H +-Må:p› €l¸IN@ÖÜ"& {nøÉ~ØÆQô䟴aC0¤Ù•<É>ªràûl_ hÅ“®ò€fÐ’ã8É÷ºòú€S| /ï8Á×ZSà(§4§À1NhO€#œ€ã8Àéür<ÿç¿üõ5>óY>8€Ÿø*ÿ8€ïù(Ÿ8€ïø&_8€÷|€ÇðŽ/ðJ€>À;Úìøï©ð…Ïð}>ñ5¾§À?>ÀO4øà[üL%€?^ÿ>ÀŽNNà¥ü€Cĺó’ èÍ_8L0 5?à8Ç4æœáx€¶ü€sД?p–ãZòÎs<@Cö¸ÂñíXàÇ4cû«Њå®s<@#v¸ÃñmX}àÇ4aó»ЂÅîs<@öx‚ãʳöÀ3ÔŠ3öÀSôJ3õÀs +-3ôÀ“4Êz™y;Ü"*P”Óxš¬@INàyÂYx`i€zì;0„¸@5ÖD^ Û #0P‰e’¨Ã®Ci TátÆR(¨£é ”`Òñ” +-0èÀ Zù™s` +-ÇdgÌI›)¦q<@f–˜Hr /;L¥9•Ó˜Lu '§0î@FN`倄 8°À>=Úñ™o` Çdc¼E‹é–q<@&–XH §°”@N`1€$Œ6°š@ +-&Xn"%€ˆ 6€ãâ3×@ŽˆÎZA¨ÄætÂÐ#ˆÌé¢H˜¡"Ñ$ËL¡ì£¤J…‘‚‘%ˆÉFáD´_h  L"Ò&Ç<1©cœ öyÒ'XË4a Db™À$ +-1Ì@da˜e 6•€ Œ2Ü>S:k˜d <¡€,2€T@È@«`9s ä V°˜1’+XËi¬d‰D$ 2Ä@&š˘a Õ€EŒ0ŒlÀ6HG¸`  ä£\°€2Ò.˜Îü9‰Læt’’/˜ÌöY9`*Ó ä¥`0‘á2“0˜Æé¤&b0Õrs<À$FÈNÇ` +-“ ä'd0Ó(@Ê`{ Tàx€áÌ-PƒšÀ`ƨBÎ`(§P† ÀP–¨ÃñZ I€aœ@-¢£XY –MÖ`  Tãx€!L,P°ÀN  i€ì+P‘ãg^šÄ ætª’7x–mªÚždYºð à +-T&qð» +-T¶‰<Ūµ9à!F¨NæàN >¡€'XT ¾Mêà>ƒ +-t upŸ=Z;¸Ëš=lr÷ØR  ½€[6[ +-´!xp‡%úØ$®³£@'š—mvhEôà*+ +-ô²É\cCnt®±¡@;ÂWXP ŸMúà<û t¤}pžýZ?øÍ~ ÇÃ@4ÿÿi‡’uíÁÙ’‘ùˆ®è£Ô¨©™?8F;ªì£@YŽPN ®f Ÿn•Ù@觛@iFz©&P›€N¢ Tg fåB衘–z&€óôà1€çÔàkϨ%Àsi%À;{¸,"<¢”ÿ™D¸O'>ÙD¸O&¾pà•øÆ,Àm ð]€Û4à÷($À/–nH€_šm€_ôàã?©#À-Ö~RG€›Ì#|§wØGøFîh¾PF€»,$|rðI0’ðA²’ðNjvÞh"ÀvÞH"ÀÍRÀEè`*@ºØJC€ÍZPžt±–”'†]š½ 8-èd/(N +-:5‹ @iJÐÍbP™ëp€Í 08 YMÊRA€C¬&e‰ À!ÍnP”d7(Jj–€’à0Ë @IpX³$/0ž$¯°ž”#~/1ŸTÓÄà5ö€b¤àEÍ‚PŠò¼Ì‚PŠð¼¬ÙP +-Ñ=€l(…ÈÀ ÍŠP†êœbE(Côα£!y'RŠ<€³,)%Ài¦€à<[ +-@rpc +-@rpk +-ÀöÄàæ€í‰À5ì)›“:€‹T6'uW±¨lMè.cRØšÐ\Ǧ°1™¸Q`c2p%« +-À¶DàRf€m‰Àµì*›’8€‹V6%qW³¬lIà.gZØ’À\϶°!yÀ¸°!yÁº°q¼°qþ°iÄÀ°iÅ°aÆÄ°aÇÆ°YÈÈ°YÉÊ°QÉw`¢0–™`š0V3´ìAÒF3´ìAÑFk¦€Àx¦€èÀxÍØŸœÌ`lÈOÍfhæ€ìÄ ` +-s @zb0‡½ 9)˜Äàœ”ÌbpÈMÉfi&€Ì„ `“ @f:0O3ºä%c3]òR1€™šÙ +˜Ë앆ÌÕ /IIÀ\¾IIÀl†€œ `¶fzÈHÀæ3½d¤_ó5ã @>ò°‚ñ õXÁúz,a~ÈF»Ö°¿d£]k4 @.Ò°Š åX¥™`R.€eL0™èÀ:6€Lt `!# @ª°’ ÕX©™aÒ-€¥Ì0YhÀZv€,4 `1C @Š°š% ÅX΂`,gŠÈ@¯Ö³Åd WcâS+€¬1ñ©@æ€ðÄ +- s @tZƒ= :­ ›RDa‘ˆM©¢°ÈĦTa˜d"Ó)€8l2‘é@ F€¸T +- « @\*‰U .•Å,•FÄb—ˆJ£‚1Ì%Qüe¿lBˆ©û/Ý%€‡È"§ËfvR(€m,3;)À:¦€ô `Û ÀFú°m`#}XÈ8°:ldØG6²Îì£N+™g¶Ñ&€ì3ÛhÀRö€e¤ `©ÏB°Š2le¡ØE™Ö²Ð¬"Lk}6€Et `/ À&º°˜‘`UXÌw`UØÌJ°‡*¬f¦XC“VóØB“v³Ól¡IËj–P$€å|vP$€í,5;(Àz¦€ô`=߀ ô`?[ Àzp€±`58Àwà=5¸ÀZðžœ`®xN‹NðxM‹n°×¼¦EGlS"€#|ÞR"€+,6o)À€§„àŒÏfðÜa³xI‡±Ù<$C‡|V€gTà« À;*pŠÕàßà³ À3pŠïÀ+pŒÝàßàà À# +-pŒïÀ +-påà 8Çrð„œóÙn^Ѐs|^Ѐƒl7øoP€ƒ|æ©ÀEÖ€yêp’õ`œøœôÙo¦iÀI¾Ó´à(û À0ßà(À0å8Êw`–ò\eÁ˜¥<gYpF ÀYŸ `’îœå;0Iw³á ò³á ’€Ã>+ÀÕ8Ìw`ŽêœfÅã;œfÅ#:§}v€!šp›`ŠægÇâ;gÈ¢8ÇùÌP€ë,93à‹@/¥á;ÐKibXtZù1,:­„ ÆgÓè¤31|:é @›@#ß ˆM ‘ïĦÐHf‚|V€>*Äw ÊD±ê´ñ¢XuÚˆ @”Ï®ÐEc¢øtÑ€,v€.Æ®ÐÄwc×h"1a>Ë@…ã;ÐCaâXvZøq,;-|€8–€ç³ítЀ8¾ô m ïȶÐÀwdÛh />ë@=uä;PO]"YwÊù‘¬;å|€HÖ€râé³ïTÓ€H¾å´ ’ï@5meß(æ;„²ï“€P€bÒê³ðÔR€P¾µ” –… ”ïËÂPÊwˆeá(%,±>@%]ˆå;PJWbùTÒ€`6€B¾@0@!ß ˜ ¬3ò’€`Ÿ• Žªó(¤*ɬ<e>UHfå(ã;D³ò”€hf€2¢í³óTÑ€h¾e4 › È§)Ùì<E|€pv€"’ÎÐ?ûupÃ@Ä0 ÛÓéÁs¯ˆ,‚á#’ðç =‘€?÷,=ßP€?ç;ðEøw–€OðôàÿÙz>à;Øz>à;Øz> 'Æ€È @À³öÜ© @€ïÀÔ ÀwàjP`í8{jP`í8ó¬=g¾@‚µàLLÌ=gb`î8€„gï¸Ò€ß€3-h°÷\i @ƒ½àèi @ƒ½àÈwˆ°÷ùö€#)ˆ0øI @„ÁàHJ"žÅàFI"|Ž” ÂwàHI*,>7JPañ8yJPañ8ñ2,>'¾@†ÅàDH2L>'Baò8€Œgó¸Ð€ ߀Èð8Ñ€›À…ŽtØ|.t Ãæpðt Ãæpà;„Ø||€›ÀŒ„}d Äèp #!F€1úÈ@ȳúìT Äwà@EB|T Äê°S€«ÀNEJ¬>;(±úÌžŠ”X}f¾@ŠÕ`æ;¤X}f¾@ŠÕ`&")f€™ˆ¤˜}f"bö˜‰@ŠÙ`&")Ïî°Ò€ß€™†¤øÌ4 Åw`¦!)¾3 h±û¬4 Åî°Ò€»ÀJCZì>+ h±û¬4 Åî0zÐb÷ù1v€‘ïc÷ù1v€‘ïc÷ù1v€‘ïc÷I@Œá`$!1†€‘„Ä~FcøI@Œá`$!1†€‘„Ä~FcøI@Œá`$!1†€‘„Ä~FcøI@̳ül Æw`¤ 1¾#ˆñ)@ŒïÀHAb|F +-ã;0R€ß€‘‚ÄøŒ Æw`¤ 1¾#ˆñ)@ŒïÀHAb|F +-ã;0R€ß€‘‚ÄøŒ Æw`¤ 1¾#ˆñ)@ŒïÀHAb|F +-ã;0R€ÃÀHBb ?# ˆ1üŒ$ Æð0’€ÃÀHBb ?# ˆ1üŒ$ Æð0’€ÃÀHBb ?# ˆ1üŒ$ Æð0’€ÃÀèi@‹Ý`ä;ÄØ}F¾@ŒÝ`ä;ÄØ}F¾@ŒÝ`ä;ÄØ}VÐb÷Xi@‹Ý`¥!-v€•†´Ø}VÐb÷Xi@‹Ý`¥!)Ïî°Ò€ß€™†¤øÌ4 Åw`¦!)¾3 H1ûÌD Åì?ö뀀†˜ÆŸôsø¶“–Ú . +-üfDV‘}~3"«È>¿€Ud€ßŽØDõøÍwXEõøÍwXEõøÍwXEõøÏŠl¢úügE6Q}þ³"›¨>ÿY€MT€ÿ¬À"GõøÏŠ,â;P`Eñ(°"‹ˆ>f`Ñ ÀŒ,"ú˜€ED€‚cGöÐ| +-|€E4€ +-;°‡æPaGöÐ|*ìÀš@…Xãh>v` ߀;°†ï@‰XCò(1$kH>%†` É äX€-€ß` Å ÄwXCñ¨±$[(>5–` Å Æ’,q€K°„ï@‘%XBð(2%K>E¦` Á èØ€ô€"ß` ½ Ê–ì ÷TÙ€ô€*[°ƒÞPeKV8z@•-XÁw Ì–¬ ÷”€ä€²cM6P{Ê|€Ô€:k°ÚPgM6P{ê¬ ÀGí¨³& ø4°& ˆ= Ì Àb@s°€ØÐÁžäÓz:Ø€|Z@{Oëè`OòI=|€xR@ ƒOêhaPâI== +-@:߀ ÒÐâ¤SzzX€tJ@‹NèhbR =ML +-@8¡ ‹MȦót±)Ùt€.6 ›ÎÐŦd“yºøÑd€6F šÌÐƨD“yúX€d*@«LåècU’©<}¬ +-@0‘ ‘Y&ò42+ÁD€Nv —ÆÐÉ®äÒx:Ù€\@'»KâheXbI<­ @,‰ —eH¥ðô²,©€^– •ÂÐ˲„xš™€P@³c[2é;Ýl @&} ›mȤït³-‘ä€vÆ ’¼ÐθD’wúY€Dê@?ëHÝèg]‰;Ì @ q`€y$îL°/y´€ ö ¶0Á¾Ä9ÚÀûGÚa`âH;3, @e`†…H£ìÌ°0aŽ²0Äv†˜€0ÂÀEטbc²è:Sl @Y`Œ‘ˆ"ëŒ9V ‰ª0ÇÊ$QuæX€ GÕ˜ce‚ˆ:ƒÌ @Q`’È¡éL²394€Iv †¤0ÊÐÄtFKBјeiR(:³, @ +-E`–¥!è 35!€i¶ ƒž0ÍÖdÐs¦Ù€rÀ8cAΘgm¨9ó¬ @5`žµ æ\`nˆ97Ø€÷i97Ø€÷i97Ø€çI9W€çI9wX€×)9wX€×)9wX€Ç 9—˜€Ç 9·Ø€·é8·Ø€·é8·Ø€§É8×€§É8÷X€—©8÷X€‡àc¿lbÊý7&ò6œfŠXÄ«PLÄX4v —†°ÉîôÒp6Ù€Z£ál²;µ$€]– •‚°Ëò´RpvY€RÀ2ÓPJÀØf{:é7Ûl@¥Ño¶Ù€Jò Àº±>Ô€}Ö ‘z°Ïúo˜€Bâ ÀûÐG»¸`êŒvpÁþÔ‘nNŒh£ÜÜ°@m”€ Œppdl@ÝàŠ è¢Û\±AUd€3F ŠlpÇ +-4QmîX!€"£ÚܱBED€Kv ‡fpÉÔÍà’¨!ÙœKÐB±¸e‰Z(6·,@ ÁàØØ"€z À5[ÐA¯¸f‹*È5çÆ4PkîY#€j À=kP@¬0ö ŸVÀäÓjØ#€xR @„±H销  RÁ"„jBŒMȦӤ°IÙt€6 šLc¬@2• ‡UH¦Òä°JÁD€ c—ri4Iì@. ‰]ˆ%ÑDËJ¡Èb™BBÅ2„hÒØ&€Lú @Ûiô€4¶ ’<Ç:$RgòX'€@£Îä1O´€Dö 6È>Ä‘f"…H£Ìd²PaF™Èd¡Â3¡ÆFdÑeRÙ(€(£Ë¤2RQT€\V +- ‰*ËJU —™¢É$³S1F“Hf¨b(2Ñ|€Š @6Kb€l¦ +- „ÎVD= ±ˆ ÆÄó"¨1ù¬@€Qcò™+€Z @{pn´€ àœPÁw8§Ät°XÇF‰è`²Žé0-lÀ©ÑaZ-€S* @ ßà’ +-PÄjò(b¶i0MìÀ™Ñ`š.€3 +- @ßàŠPÆt`ʘ.€#ú @Ûpbô€6Æ à„úÐÇzõ ù8 ¾2_û´€J `ôPÉ€¬S^:Y0€e£¼t2aËt€V6 `Õè.­ŒÀ*Õ –ï°Iu(fƉ.ÅÌÀÍ š!X#¹T3d[€r– `‰ï@9S°DohgËVŒÞÐΘ¬P[êùÔ€˜3€b ÀÌÀ÷´€'4€ÏI-O0h_SZaÒ>&´<¤|Kgx†Qø”Ìð £ð%•à!f àC" ÀCÌÀw4€§6€ÏH,O1l_QXÞ2¦ à# ÀcLÀ7F`xŒmø†¼ðãð…‘Wžcݾ ®<ȼü߈+²oÿ'­<ÉÀüÛH+O²pÿ&¬<ÊÄü×+²qÿ%«<ËÈüÓÈ*ϲrÿ$ª<ÌÌüψ*³sÿ#©<ÍÐüËH*O³tÿ"¨<ÎÔüÇ*³uÿ!§<ÏØüÃÈéýzAn#†(hÜÿÒ)—G²Vkî— Ñ}ˆy5LOíÎ`L(@îŽ c +-@zpœ) Á8*L)%(ÀQ†€"$à˜0¤¡yǘQÊ=€#ÂŒP†êaD(ÄyØφP‰îìfB¨Eùö2 #}û„ íØÇ|PŽøìæ€rÔ`ã @Aò°]O +-Ò?€íL'% ÀVa:(I62œT¥ÛØMªÒ@€MÌ&u© ÀF€Âd ]M +-ÓA€v&€Ò„ U˜LJSB€F€ê´ ½ :-hb.@ ZXKPC€Æô …©€çàw–>)"À/ %|ÑD€uv¾h"À*3 ÿ¨"À+ ÿ¨"À +-# ÿé"À[&)#À;)#Àži#À2ûÏ´`‘y€ŸÔ`q€WúðÊ6À+}xa`‰Büd`IH$À3»Ë4à‰Y€wTà‘U€wTàQ€÷tà[ØDxO(¾YDX£”DX§•_ì!¬ ±ød à7j ðñs ­!,‘K[-ôÀ@ÅÊ K-$(Ï@ÍŠ3ƒÐJ5Ò +-@+ÙJ³ÐN7ÂL l¡œ@Ya` éʲ°vE…ý€Ä(Éu€Íä(ÉöÀvú ¶vP ×v‘P »ûh(PLØ=ØGDZ¬ì&£@)6öÓQ °y°ŸuX<8DJ2죥@aïà 1Jpà09J°upœó`êà ‚ +-LÏu€SH*0=;çp€É™98‹¨Ssà4² +-ÌÌÆÀ‰„˜˜…€3)+0­°pp&ifeßàdâ +-LʺÀÙœ`JÆ N'¯ÀŒl\@`ùX6¸„ÄÓ1lp ‰&ã:ÀED˜‹U€ËÈ,0›×q€‰˜4¸Ðó°hp)©faÏàbb LÂœÀÕÔ˜‚1€ËÉ-0[7\`|– n!¹Àð ÜCsÁ™1¸‰èc³bpÙFfÃàF ̄À”–€[I/0*û7_`LÖ n'¿ÀˆÂxÀýôé€Bá.èB‚ÑØ-èD„±„Ù€^TŠÑ€nB‡˜,èHˆqX,èJŠQ„Á€¾´ƒëÝ©10cÝ…0U€ ùY*HA’ìÂP@š äæ:@ª äf¤ çÈÌD@"Η€T¤È* ä¢Í@N®¤£Î@F®ä£Ï@F¦ r€| ¤ä<ÙØ%HJ£\\HK¥L\ÈK§DLd¦Ô@ Rs€,Ì$ç<9X#HO­ \€^ý¹0ź3D0Í:3C0 +-Õú2B0 çèÉÀ@„èÇÀP¤èÅþÀ`´èÃu€?ì× r1 ÀüÿÕ)Çå#ZJÚƒä@÷˜ˆÆ÷náø@<þ7p§"òÁéˆÉ&sv *_˜ËÕ€°¼q`&7óÈy\Í+fqo ¶Ç_¸6oLáØ@|þ90SøèÀp äৃ93…¯ õxd\ˆË[2 Ç…€T¼v`÷’ñÜ1\Èæñ»{ï@n äc<¸,‘ñtç®@NÆЙ«Y@Wn +-äe<¹(™ñtãž@n~=ÐÉã9qO ÏèÂt€ü¼{ Ó*ððËL¨ÁË.2  +-O¸Ät€:¼}àÓ*ñøÓL¨ÅëN2 Ï8Åt€z¼àÓ*R€ÃL¨I2 *%8Ät€ºÔàÓ*S€ÝL(Mör/ :eØÅtÔ`Ó0€LàƒN¼áLŸ´à%Gø¢/8ÀÍxÊ~Ó €'œàÚÐä8ô Ái¶4`ÃaZtà³´i Ào››à(_ôà‡é¼ )_Là%]øäo¨ À·xKa\`—MeРgØÅx€ê`'ãjs€ÝŒ¨ÌŽÐ ªMúÅxM{€šLà0ý*2€4¨ÇtNQ" ©NR# ‘N3 .0 q.1 a.Ó' Óè@£€üL  ¥²“r µr“q Å2p #ãÒo /í’n ;ý22€T ÈG®€!” ÈFª€AÔ HE¤€q4 HD €‘t HCœ€ÁÔ ÈA–€áÈ@’€ TOŒ€9´Nˆ€Y¶½Cñ€@$˜Hõ€¸ä˜Jù€ ¶á•^`,õB]`¾mQA`yr ÜB `¶¡•Z`5B1€ûh"ˆÀwÒE iîe<@ ² +-ÜO!L`: ,OL€5h%°6–¡˜ÀÊ$X‰nËO`-Ú ¬I6€å((°"ÉV¤£ÀrÄX“–kidR(€5(*°f<À:ÄX›¶khdQ€µ(,°A0àvb¡µÀ½L Åî$€@ ÆÜFü€`Ô¸‡ìá(0pÁ"Òa`:±‚Rc`.™ÂRd`"BSf`i‚Sg`ŠVÔd ˆE£ ä HA©ÁZ!“2 "½†’0 Õ†iÅK¾€¸´D¸€lôA²€ŒtèN¬€œ´èK¦€¼4èH €ÌtèEš€ìôèB”€ü4¸NŽ€´¸Hˆ€*ô¸B‚€Jt8M|€Z´8Gv€z4 8®™Á²S‚à(¡ªÒƒàˆfbD¨A‚ýĨM‚}šY …v€?J¼'%ÿ¨Eð’ˆ|Sà9ùøM;‚6Ùx  Aƒ`4(IðH*šÚ5IO¢,‰xJU‚oí8ÈÙ¯ܶa Š‚¹ÿ©‹mP·–E‰¤–Ë9ALýoßÔüâr8£˜àëè!ú¯XŒëòü´ÑMÔæ? v¢.ë¸F?Q”é\uPPŠ­™=À*Šjlà.%E%{7x€&bŠ*\5:@?×û3r€1\ì͆‘Vl̼†’WlÊ´†“XlȬ¦YlæhÒ6 ÐMi±—ÀLj‹mØ2Àd®¶`Çp=ž <Äõ@j ð ñEZÆ ð0FJ† ð¼Ãa,Ëhb¸ÈÅ`â¸ÈÃXb¹ÈÁPâ¹XŸ‘¬ÁõÀÚ `®–eœ‹h,É0$ÒXŽQ,J¨±ƒXØq¬©5f‹‹s=°;HÀõ@4ÈB¹Éþ2ùPoò©L ×Ì #×39€¼¤Ïq9ä¦çx†¥ä§é˜îÓȬ aÇTö°×ÓØÀf\Ì`W[’y fRÛ’zŒóqMæžÞc CØŸënFP…ò£‡ýTò¹þä‡, ××Y @QBK  °“Tƒ|3€ò$!ç™ü¤ ùÌ@øæ|àˆmðJ!ò†YðŽNäÅÙ , 0±È¶À ÉHà +-Ì€/ÝXžÐN=–åÓp•†,èü£ûê¼!$kñ½è '«ð¥èÖ•ª29߀A¤åÎ|]FjéK™ï +-ÀM™©3ñA˜Æù°Ÿ€Éœhûˆ¾"½”gj>OjìOºß €24™Öæ‹0žM× Zóù JÃøD,Âù°0€ÅHÔµ_€'](U©:ÀÒ®œ’u_€Ü‘.½¾ç š€ áÙHéZÈ*Ù>_Ûs°–«A«hoñÊláòý m/ð¸ìåúý qOyT6u#uµîo Àîî4¯èýÛ­ô„¤t¯~寇 ¢›\5„=¥ÝâBIÜñFu €zÚxï:ö0ðŸ¾b·RöðIo1çf/Íäs¾‚ó£³ýjè7¨¥Wïé"?&XÖKåõ®¿ Bí˜Þžô+œ ðjVzO‹ðt0ìd~7·ú: p 2Û£E¿=ä]ñ‹~nÈ.ºéç‹~aØJtàÏý¦°±èÜ"ú èü¿%úÑ ²è{ Aô/¢O„D?ÐÀ½ÜàXz8à{p äÿÚªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª*ìÁÿk#¨ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª°@þ¯ ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªÂù¿6‚ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª +-{pH èÿk?˜Ø`¡]ãm +-endstream endobj 40 0 obj [/Indexed 41 0 R 1 119 0 R] endobj 118 0 obj <>/Filter/FlateDecode/Height 3140/Intent/RelativeColorimetric/Length 61261/Name/X/Subtype/Image/Type/XObject/Width 3132>>stream +-H‰ìÁ€þ¯î +-€Ùƒ ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUa€ü_AUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU…=8òmUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUöë®+ª2 Àð +-q€PD`&ÂÌÐIéKAK‰@Ò,4ÔLå#°R P´~n{ÈÀI®e¬U×uúìç]ïÞGû€ÿ7^Õv_xm6ÿúgddîdegï åìJ‹D¢¹›E£‘MÓœÔó;³³²ÂýÌ =ÿéTÈ\ï„ "Ñ  ò +-ŠŠc±’²òŠPUum]ü¥ú†¦–DZKsãÁY¼®fe¸±oOi,+~3?Œ‹ÈZS„=‘™®‰í~yàŸ¥s!+ A+äí.,;¡rM]ü`csK¢õÝ÷'“'>:Ýy6Ð}¡·¯ÿ¥o‡†Ó†®]ýúÒÆ°¯ç|W°ÐyæÓŽ’Écïµ½hij¨×VW¥z¢¨ ?Õ9AI¤Cb»? °as0„½»»0öÖÞŠªuõ͉¶£ÇÃNè:ßÓ×?põû¡áë#c7oÞ¼uçÞD`rêÁù ó¿=YÜìÉïæ7†³3Ó“áÊýŸoûã£7® ^¾Ô×{¡ûlÐÉö#­‰¦†xíþÊò²’¢‚¼ÜÈzFdd¨ØNëÉ°V ¹ùA0”WV×Öji;šì8ÕyîâWA+ ÿ0:tÂýÉé™Ù° —þ,¯¬< ={¶ú<íÅŸ[½Ø4{¾ú,µñtey98`)h‹…Ç¿ÎÏ=üe*Õc#7†¾»Üÿåç]Ÿ}|âØ‘Öæ†xMÕ¾=¥AFD#»Ö*BDÀ¿h-vdÉÍÝ]Tº·ò@¼¡ù£ÉOw}Ñ;ðíµ£ã·ïÞŸz0›j…¥0‚HX]ÝÒ½º-m±&ÅÊÊrX ÍÍLOÜ»skldxðJϹ3Ÿœl?œ8TTDY¬0?w-"4¼NéfˆDó KöTTLJÛ;Nu_ì»2xýÇñŸîNüÍ~}~¥•-`^K:ˆ"ˆŠ +-E(:¶X¢ƒÑˆ±$vÃÕ±¢¢`A+b¡KòçÞ} ¨™µæÎu¥¾Ï׳Žœ½ýòþŽÝç^?É…H4Jjáöî.µ>?Úý÷óÿæÉ€G®Sž=*‡þxôGïè” !AuÄ¥çôй»e[[žû46øÎØÞd¨ÒªŠ +-ó²E¤!¸l# ð¢âÑÀæòÂ,©LQ¢©ªmêèîÿ89»´fÛÞ;89»ô¨`xÒ Þõ±h”L{‚¬{Šß{á9KrŸºœ\®£Óûggò” I‚ªº-þþ“á¿:?=Üwl®¯Ì›Ç{»^×ëÊK•…¹’ Ëa1‘ÿ¯D4px‚ qn¡²´\ßÐf왞³¬oíºŽÏ.ýÁP¢žowz¼Sëîߥ'Ñ{Û›v»}cÕB,/Í™§&“ÆGûM)ÞÝ?›šžYX¦^Y±ÚìöÍ-ǾÓupì>ó\xý`(DÇÄõÍ×¾„dD¼"^*"vlk‹ÿêíl6T•+dÙ¢t>—Íb¤¡ þwt5°Ø\¾0Kš_TZQÓô¦wh|fÉjw¸N<ÞÙê_Kº¨™ ø½çg¤ö[öµ•å…™éxôõt¶·µµ6ÕÕèõz]u¥¶,I]ZR¤HõJ©Rß?Õ”WéÈúÚ†–Ö¶öc¯É4ða|rÊ<·dY]·mnï9IKx.}¤$‘¯wù<ê낾 ÷Ñþö†enê£ÉØZOBž'Éð8l&UH€ ^ .?Cœ'/ÖèÚߌÏ.¯oí¹/|AºîžC<¼g'$lÖ•¥9óäè©×ØÑÚüG®ª\SF·¼ O*•f‹3…éŸ÷€ËyŒ›òŒÏÐ/dˆ$ÙRiŽ¬P®xU\ª.ÓVVë ¯Û;{¨–˜žYX^Ý°o﹎N=Wþ@"#žTD¼!B+ϱÓa_›úÐ×Õb¨(-Ê—ŠÒ“ñ½ÿ?®”jP¨Êkš;û>N/¬mî¸/ýÁp4–œà_¾¤,ðpˆƒûȹ»e[³Ì›'GÞ;^7Ôê*µj•RQ(Ë‘JDBÒüx°Ù,&Á æù¿‘Æ`Pï³Øìx[PI‘‘•-Í+“–ДWéëšÚ:{ú‡Ç¦gWÖí;û'òý¡pJD$O@5O9¥'â1Á¥S"SLBB¡,ÕTè Mm]½#S³K«[»®Ï‰ Hô¾!>§$„ÿÒ}°k_›ê¡ +-¢(?;S@ +-‚Šœ—ùb€Ÿ[<¸‚Ìì¥F×Ø™¨†“ ˆÙñhø’hjc|ç§{Û+ æñ¡¾®Ö†Ú*m©R‘ŸK‚î’ FÚË–Â?;È}I°¨Ž ‘A2¢°¨¤¬BW×Üñö=‰ˆe«Ýá<>»¤"vHˆäñb‘pàêìp*ˆÁî׆ +-•"W,äÇ¿/jf³8¼tQŽ\Uah};4µ`½¯†Ä¬N®êh8è¿<;Úß±‘fè}Ól¨&É ÏËÎÊH§‹ÉHKûƹð÷žfDz¦8§àUIYeMC›Ñôarvɺ¹ë:9÷¦$D¢¨³R±k³ÌŒ™:uš"™DÈç²™i?ÄѾ)²«L’ Y¹ +-uu}{ßèŒÅ¶{èñ“ÕÒ·×ÑHˆŽ†­õåÙÉá¾®×uÕZUQa®„N6‹$à _w_TD„YR™¢¸¬¢¦¡½ûýȧ…U»Ãurá †£±›ÔƒßĨsŸ:·­ SƒÆf½¦¸@šÁç²ø}!ÍdóÒET64vöOÌ­n:O/ý!²žSÇóu4ôŸ8w6,³“C½ošj*ÔJyž$“4‡ýÃ'ÃW$‚•hˆüW*mu}«±Ô¼dÝÜ;<#wI-ºœ‚^Ï¡ccqz¸§µV«Ì—dð9øõQÛ™ÅågJåªÊ?ÞôO̯m»ÜWpô:e1ÓÕàõïoY?˜ºZ •jea®8CÀã²Y?a3<õÐütQ¶L¡*×7´÷ MÌZlŽ÷³‚¸‰EB>ÏÑž}Ù<ÜÝR£)’‰…<ý¿*²—™žP’¯ÔÚúFgW¶H6ñ›‡•|{‹}t5,Lx×Ñ Ó–(ò$t40ãÑð½Oñ’膠B˜%-Pª+ ¯ïÇES¯†UÈ~´»±85øgcµZ‘#péúÞ§xAd"3X\(G¡Ö7w›—íÎÓË@øÙ6¾é«ßæžà×”è†ìÂÒê&ã°Ù²ét{ƒ‘gÙpèØXœîi5T¨yâß®IDºHZ Ôè;ûÇÿZÙtž> ˆhØ~äXŸŸ0µÕj‹rE.‹ÜÙ÷þz€ÚÀ~†T®ÖµôŽÍYGçþpôæös\<Ψl˜46ë5ÅÒLÃúm«!]l_(ÎU”VÕ·÷Î&âáo¯#Á+·Ó¾4=ÐY_^,§£àg“ìEYM[ßøüúÞÉU »¹»½ÑÏó E2‰Ïe3Q PÁ`qx颹ª’ +-ˆ* ®á§Wy°e1ÿÙX‰~€Ÿ Õ l^¼L‹¶}2v#×·ww÷[×q²g[š"ÙPFgç¿ì×y[RëÆñ³£*"H`šdzÐl›–fîRÊ­˜šqÄ‘D‘˜§…¯w? ¡ô\û\gf÷ç¬ëù­?î/;w‘ ŒºxЋ€h{òòÍÜêŽ7Ž³-VxS&Ÿb»+3_úÏ ×Åá +-D²òšÆ‹nðœ[è†ós&“Š‡O<[Ëïmƒ¿´Þmø’ ¥þìk¯ÆfëÓû†ÛŒ&ÒÅÇÍ1™d4èË÷ƒÕÜ VH„<<,\SÅåÓR¥ÖÐÒ5øv!ß …i{~žË¦“Ñ3¿{cáÝPO{“¡¦BŽlø« +-!½UUÇÒ501ãÜ>°qƹ؎W½m&ºL, ýP꯸Š¬Z¡ä–FßÔ909¿þñøj7$"§Þ•YÛ‹.Ë:µBB³£«öï ýÀå Åòr­ÞÜÞ;b_tí‡b© þv±¼ÛKS£=­5å2š-´R4ÀvÍŠäu¦ögãïW÷ŽÈ”½Ô ñð‰gkiêUŸµÙ -—‹„<.…nøgH@ð´D¡®¿ÓúËË7óënÿY4ù¥ò±¶µøv°ëþmR"ä! ôÈŠ¥¥Êjƒ¥{hʹ㠲öJ7¸íC=m¦R*‹ûuãò…byE­±¥ë…mve÷âñ ýM'ÂÇ×æ&ú­÷ê+å">ý¥Cq¸|‘¼Rgîxn›ßð" vº^é†wCÝîÔ©š¯X¯_EÒM ’©´†æŽ¾‰™b?ã-;óí.Ot[ ÕJ‰‡|€R «U(QV,OF+»þP<•Í‘ÍJ&+“NDžÍB7TÈÅBÙðÍ\ôƒT©Ñ7úá,–*ö“IFN\ó¶çÖ{õ•rRp¸|OÅåÓ²òº{Ö~Û¼ëà4š,lÕ\~«z·–~þÜ ¬ÕoŽô¹ÈE?ôOÌ­¹.µ\6ùw—§Gº-·5 +-‰€ËÁAà» á +ªô÷M-ïúCñ4“c»ŒÔT,è##u´·Í„nøîŠýpûþ£“óž@$‘)œ&Ÿtó}íwkTRö0¥þZ¸éÈ>J”ÕƇOÇg×÷‘d†9?g»I'ÂÇîµ÷}V³N­ J"ß2•Öhéúmiû0Mfrʦã!ßÎ’}°Ó¬«”Ó|ä|;‡'”ªjMÖþÉŭóX*Kf)Û ™dôÔ»µøvðQ³^£”Ò|.º¡tÈ™"yE©íéØÌêÞѧxúó¡á÷Šc¤»E¯.áLðMEJË*ê̓v玿¸Gs¹l*òï.;^õ´6Ö¨d¤8¤¥F±™'QTé›:&6½§‘d†É:/rêÙ˜ïm5hbò¾.ŠÃ§å•º¦ÇÃÓ+îãp"]¢‰ÈékÞÖo5ëÔebÝpmP—OK•ZマQÇÊž?Äæ^Ž½Z6;;Üú`ëkk¬VJ„ˆ=øZH8ˆäj}K÷ˆcm?IfØpÈå²éø'ÿÞŠcô‰ÅP­”Ò|… zÍP®@T¦Ö™;&6½§ÑKÇ ù·'û­¦Zä|$h–ž±Ù ÙžÙüöd²©XðpkñÍ@‡Y§–‹øŸ×Å^PªÔ[{ÇfVÝ'áDšÉåH>0lûí8íƒl>pAø'>‡ÃøœËŒ¥Øp £3“Œ<ë³ãO6j•RšÕyÍQ®@T¦nh~ô«Ý¹ãÅÓÙB>$ÂÇ{Ël>Ô ào£8¼‹pûD–›î•éá_îë«bìÍÅv ´¼Ödí·}Ødï™Éß“É°ùà´¿(ä…sÀ_CÂA(«h¸L6ùvœöÁNs}…ŒæciþPØ£J”ÕÆÖÞ±ÙuO ’Ì®ZÈë]-[ƒ¸)üiìÆ”–×7=u£© Ãä&“Šù¶lýÿ6Õª¤BóÇCQ\¾¨L­oéq¬î‰4[…Å|x÷¼Í¨Qˆø8-üd] +-$ª:s×°cÍŒ& ጽ›l}ÕJ‰€‹uùã¢8|Z^¡kêž^Þ;¾”ŸŽvÈ… j92€ÿ‡ìJñ­SÇË©Õý@äR8¸æÆz4 +-±€KaWþà(–•×›;^Ø—ó!òm}ï±è+eBäüodQŠÊ4ív§û„„CöJ8Xôê2ápCc ¥J’‰Wó!;óºf_u7׫$¤Ký•p±[RV©·<³-î^š’_ÂANó9Ø’7 Åá +-$äæ뎡NSÍ-1Nÿ"+RU×ÔýjnÓŠGd$ÂÇ»‹¯{[tåR×€姣PVy»µÿÓ}RXŽÙtâÓÑ΂­ï¡± +-ápóåóAUgîv¬y‚Ñ/õxèz?Òu¯æ–ÿPv46uÍo…2&“Œœì9ß=o3V+0‡'”–×7=uyÏb…|HEO÷WìílBòð'üÄÈ^¤Ë4w¬¿N¯c鋹˜ŒöW§;îjbsñçÁ惬¢ÁÒ3þaÛŠ§ !>Þ]|Ýs¿^% ~RW Qé,Ï&—Ü'‘d&éØ™wcf¸Ë\«”pÀTüÉ°5)WöMþg/ÿS0ìOnÌ uÞ­.£yÈ€ßÙ¯Ó®&4 窲'$†ƒA‚¬²)*D\€£ ˆ- *È¢”Æ(²KÙ+ëîªdÔõÌôt‹€Ü×/x?¼žûØQG¢Í]ãí›ðmåtF݈i9ä7õðFc™Ó¢—‰Ç“ j'ÜÕWzF_¯¢ÉL®)“Ñ•ÙáÎæ2‡YÇc+‚¨³½Ð5<»ˆåça:Ù^žîn9ç²4ìÃãLt¦Â3ç¯ÝŸxó!O©a™UÃÒ7Ùç­qÛx€cC5›»öZÿó·þœÎ*Ë0“Ší®Ï?»ÛVã>aÔ² =AôgYÓÍÁé÷[áDþI’±ÀÊìpgs™Ã¬ãGŽAÔ™eÍ]_­íÆ’efÓrø㻿wÔ{”Q(1 +-¡RÓZ\yùöÓÿ”ß7Ùç­qÛ ùðKIo=Uíí›ôùÉtVÙƒ™d4°2÷¤ûbÅɽ†=ˆ/Qk²Ÿ®»Öÿü­?$§3¹w‰Vf‡;›J MZ¾à—¥NÁBOSçðìJ šÌd³ÙL*ÜôMô]­-9ad +-₤³½Ð¥üÌNT­Íl&-‡6}ãw[+]z‰—ø©+ðdå•Þ±7›!9•QG`"²½4óèVs™Ó¬câ»Qc°¹k¼÷Æ6‚qõq²édtgizàzýi»QCqübA€uí§—¶#‰t&›É¤âÁ…±ÞÖêS6ÿ…’fGiãÁ—ÿúž¬ò={ó£·[Êf-Ïð D­ÉQÖÜõäõÚ^<•QÊ!ˆl/½¼Ñàq˜ul?ü‚¨1X‹«Z{Ÿ-l•ʪ/ÞZ|ѵºØª—ø €_ƒ é,'+[ïMøü!9­Î¾T<øaa¬·µJ}”þ +-5@ = 7g–w¢‰´ ÉX`uöÑ͆3v£†78úIos×µ?œV_2¿ø¢;+3C7=…&-‹™ JzkqU›R¡›!9•«PY©ÐÑÛ-åN3¿p´ ¢Æh÷4u=y½¶Ͻ´òû&ú¼Õ§¬z‰µ‡ÿ jMŽ²æÎáÙÕ@,Ÿ¢‰ÈÖâ‹~oµ«@'ñOG•2ôÌΊ˽ã>HVw^&Û]{õ¸«¹ÌaÖø”5ØÜ5Wû_,n…¹zHÆ«3C×ëKlzêàH$]«Úû`ji'šÌm¼DdûýÔƒßjÝ6ƒ†rÀß%ˆ:³³¼åöèüÆ^<•Éf3)9øa~¤»Éc7òYGŽ é­%ç¯ͬîæç]Zm¾ë¹\QdÑIÌ;ü‚¨1ÚO×_x¹ø¦áoÇ{/—;MZêà(”içiêz:ÿ!(+åɤb»ksûQôÃ?§Äi«²­oòíÇp"WÉèÎÒT¿·ÊeÑñbG„ jLŽ³-wÆ|ŸV]"²ý~êÁµ·U/±êðc¢Vù³‹Ý#ùBÍä +-uuf ½öTõp¨‹ÎYÑÚ÷|q+¢”ƒ2èäÐæ›±žËE~$¥R 'Jê¯ͬbÉܳÅ÷Ö_ ߨ/¡R=¥,'+½ýSË;QuÌ¥Õ1÷úqg£ÇnÔPøÑIWàªöö¿ø’ªÁ<íRÎ@=b‚¨+(®ix¹²Ë•C2Xy9ÐQç¶êrØJ®šå—zž½Ù É©´’«rØÿæÙ‹¥…J®ôuø.AÔ[Ýç¯Í­íÅs.Ù^|q¿­Òeщ”ö‹ jŒvOcçã×ëŸ?oëÝDï¥r‡‰z8„Io-iè|:¿Ìï79ì÷÷\*wš´”ö—ú}Á™ÕÝXRù¾t"ªvkë9§R|À¡"HÛ醮‘HΕC<¸ñÇHW“Çnd»á'D]«Êû`ji'ªÔC&Œ–§ûÛÎ9Í´+À!¢”ƒ½´¹{tÁNäËaomîÑú›^b¶áçD­ÙYqåîäâV$÷†ÉØîÊôo•ËB=¹rhé÷} žl/ÚkOè(üD‚¨1–©¯è˹ˆí®Î ¶×R‡B¾z'·#ùrˆî,Mõ{+]s ?› 1Ø=M]# ›¡|=Ä÷Öç†:¨€ƒ÷¥¢ÉtF-‡íÅç÷Z+œ&¦„ ém% ·¿ÞæëAnPî?Ë!JD¶'{[Î:LfŠRVw]ÇÐÜú^œz8¾)‡ðGßxOK©Ý¨a¡á ¢® ¸¶chvu7–ü\í5ÔÀÈ—CÏ„R‰tZ-ÿÂhws©Ý ±ÎpÐQkqU_û}zE­å?ãÁuêà@äÊábÏÄ»­H"¥,39ä_éj8m£p8(õ`.:×Ö?µˆ%•MÆ÷¨€ŸOô_•ÃæÂHgC‰UO9àÐPêÁä¬hýT©Ïõ`Öˆ}À1!ˆzÛ™ ß+‘rÀ¡"j>ÕCôK=üVé4Q?RÖ’Æî±·¹rH%)fßÖÃÚ̃¶ +-¥xW€ý%ˆº‚’†Î‘…aÊGÂ×õÛ]žêo­p©€}$ˆZKqÝ­§ ›!™rÀQñu=DËS÷/—Ù o °OD­ÙUÓñh>Wé倣âÛzXzÞ{±ô„žzØ‚ÆTTÕ>4·”Õù%‡ý”ŽŒÏõ°Sß7Ý~7q§ù´UÇûüh‚Æè¨ðþÉ~6Eu®QÎûî½{î†FF! +-‰AEÑpˆ(àŠâ +-"ƒ27 =÷àŸÝ`ªNêTæTZºïë<žUµÖ£™Í˜qT½R»‹,œ$Gëáʃ7?¿pøëZNûYÿ(¡¸‚g¿»?½ý¹v-õ}ÃrÀ‰’Y ×Ïn¯3Zíi.÷i2Û—ä !U“«ýh9¤÷–'ú/V8–N©zK›ºŸÌnÆ̓ÃÃ3±=7ÒÝXâQùd€‚šÿtkßØr8eÚËaåÇþŽš ‹å€Çþf_YÓ‘÷;‰£õ`Ä6g†®Ö¹ùf€¿OhÞ²æïGCÉLײґO?Ý»t–å€*³ÊÏÿçùüñz°ôèÚÔ½K5…N>à請øÜõ'ï¶ÆqÏZŸ~p¹¾ÈMω%¤Ã_ÙÚûbq7i¯‡+½¿2q§ýLÀ!ùj€¿L(®`íåGo7bº½ŒØÆÌpWC±G¥cá$Ò¨l»=¾¼—ʬ3µ»ô²÷B¹O“Ù¾ à„Ò¨êxý)¢[vÁ2Ûs#Ý¥^–N<¡8 «;&W÷Ó™ç6;ïŸÞh,ñðÜ…Ô|-·Æ–÷ŽËU2´ð¼ç|¹O“´+䡸‚µ¦×£zæÁøæÌÐÕº"—ÂüIBõ”4Þ|¶Jš™åÚ[ëûæ´ßÁr@®ª»¸¡kxf3nØ?néѵ©»U~àOŠ«¨îêÐìÖq«Jï¯NtTЪS„ê-mºñôýNÂ<þóã}->Mfû0€CHG ªãîÔZT·ôØÆ›µA—Âr@nRó•_è}¹´›Ê¬3Zxv³±Ä­òêˆÐ¼å-·Æ>î§-»N‰­wO®]LB.Ò8Ó~gbåó»Ç·f‡®Ô +-ïð»„â.>×ýt>”4í*e&C‹£ß7—yYÈQBqÖ\º?½Õ­ÃCK®ý4pñŒ_“Ù> à '¤³ðlç÷›qÃ^Vzÿãx_ëi»G1³„â>ÕÐ5<»õùë÷>¼ê=_æQyz€ß 5e[ÿäjD·ì¥GצîvT8XÈmBõ”6Ý|¶°›4íÇ7“;s¯5¹àWÕ]ÒÔó|)œÊ,#±5;tµŽ…| 5_EKßøÊ~úèùcëÓ÷¾­8d¶ïø" é Ö^~·0íòd¦vGo6–xT–òŽ@õ·÷¦×cºýÿVzeüVK¹—ÿøRóW¶¼^‹þÜœ&n·Vø4™í»€‰P\E ]ßm'L;f24ÿ´ûë"—Âzø¡ºKšz^|§-»6±7÷/Õ8$µ yD¨žÒæžKáÔQ â›oî[pÈlßðÒYX{eøÝv´+“™ ½r½á”Ka9 ÏHÍ_ÙÖ?¹Ñ­ƒK¬ŒßºPæQIÀgBóU´õ¿^‹õ¥ôþòXïù2/} yHHgáÙËg¶âÆÁÁ™ Í\«/rJÒ`Š»øÜçKá”i/=º>5Øq&àÙ¾ ÈŠã@Œ.î&³q±Ò¯1¾’Ž@õwÞnÆ ëÀ2;s»êŠ\ +-M yKh¾ŠÖÛ?®î§­ƒ3½÷áeOS‰›L€|'TOÙ…[ã+™–d™©½¯z›K=*- ùLHGAMç÷›qÃÎ…‘Ø~7tùl¡C’ Ç„të®=™%M»"éѵ©ÁŽ3~Mfû. Ë„â.>wãÙÂîq4"Ÿ&ï|SáU o ÕWÙ>8µÓízd$væwÕ¹úð•Ð|­·\¤-Ë2S»‹ÏºŠœ’t€¼$שsß¿X +-§ÌL7Ú[~ÕÛ\êQéF@†Ž‚šÎ‡3[qÃ^z|ãͽŽJ¿F@@Z êÒƒ·›qÝ^zl}únÇ¿&³}ðÅŠ»¸ñæó¥Ý¤½ÌÔÞòËž¦b·ÂzyÆnE%ͽc÷S¦e‰ÐüÈõ†"­ø_Bónëý)’Îä$¾5û¨³: ÉlŸðo’Ž‚³—‡ç¶†]‰Òû«}-å^•åü’Î`íÕá¹ÏQY™¸u¡Ô£7„ê)k¹=ù)’¶ëßš}ÔYSàÙ> øÙi)=ß;öq/e§ÅHìÌ=¹Z[HZ@žÒ¬ë™% Ó2Rá/zšJÜŠÈö]À—IjªK÷ßlÆt{=¤#k¯ï´–{Uò€P½mý¯×¢™"¤Gקî^¬ôk!à×Åuêë£Ká”ašFrwáéõú Sã„t뻟-î& ËnA!»5Ђ€ß&Tß鶟֣iÓ2õØúÔ`[…W%6 § Õ[Ñ>8½Óí +-”Ž|š¼ÓZN~Î`}×È|(a˜–‘ +-/v×’耜uÔºG—Â){9‰¹á+µ…™í³€@¨Þ²–¾‰ÕHÚNÛ˜l¯ðªŒ£ìòSÑ>8½Óíò“Ž¬Lüp¾Ô£P~€?D: +-j.Íí$ ;@©ðÒhw}Ð) ÈAB:ƒõÝ£Ká”]|Œÿ²_§]M¤iÆÏóTUvÂ."¡QaPpà`ƒŠM»ÅÅ5n4(¨ 6 [ ¬UõTú+Oé83ozÎŒk¹~Ÿà~ó?纋[¯n´F éõYÀž!´`}×Ø“•ŒínHå7ž_í=ÖyÀGèáƒ=WŸoä•›=vfùÑ…Îú FöŸ@ÑÖþßæ’§ô§cí¼½®£Ú/™ø¡é¯î8wqÇrJ%UHÎÝ8ÝRa<À§Z îøhb9c•Ü%å7f®ô ë, ü@„>Øsef#o—JŽµ»”Õ4‚ødˆ4÷Åg“åŽÉL/Þ>Rå“^_ðµH_Õ‘á{‹iÓ)9ª°9ïkŽè|ÀçÒ_M,íZîžìÜúôå“ !=€‚ÐB 'Ƨ×s¶›:ÖîRb4Vë—¤ð™„iî‹Ïn”;)3½pg°½Ò^_ðå¤QÙ>89Ÿ2UÉQ…ÍÙx_sDçs>ŸþÚØhbi×rŸ;»65Þ} ¨±*°Ç -Xß=>µšµÝȱv—£±Z¿$r€/"ôHs_|v³ œ’*¦æoŸmì +-ìi¨8Ô?ñ:UT%G’³ñ¾æˆNá_JHml4±´k9%Çξ{:ÖUl ìYïóæø…Ç+ÛÍ+³üh4Vë'o€¯Aè‘æ¾/· +-ªTR…­W7Ï4GtÖö(¡‡›úâsÉÿ´M m|-Búk;/>YÉXNɱ2ˉÑc5~éõUŸCúª;~~¸´û>lìÌÊ“±®º€äu¾aT´L¼Þ.ª’£ +-›/®õ4†46ö¡…O]™ÙÌ+§¤Š©×­Qƒª¾&¡ëºôl5k;%ÇÜy{o¨½Ò^_ði„=½žsǦÌÔüíC:ÏØ3„n>sóÕvQ••ßœ¹|²!¤Q3À7!}UG†ï¿Ý1’cgß=>«ñK¯øÿ¸)Ó1’XÎXnÊX»KÏuTùHà[zø`ïµ›U*©BrözocH^_ð¿ -xàäåçÿ꘹x_SX§c€oGHͱÑÄrÆrJŽµóöÞÐá¨Áè@ÙzEëÙÉ…´éFŒ}÷äÂñZ¿¤b€oJè‘æ37_m•»»ÜÚÔ¥.vÊžôÕÄ.=Þ]Ôèà;Fôðà7iÓq+³ôðÜ‘JCz}ÀãÆKÛÐÝÅS9ÊÜy{˜x¾¡…{®>ßÌÛŽcçקǻëšðú*€¿$ý5cÏV³–rìBr.þ·ƒaÊø~¤¯úØHb9ãNP·çoõ·Dt&ÊÐB½ñ¹­‚í(+ûîéÅÎZ¿ôú(`_z¤¥âõvÑ}¬ÌÊ£‘£U>VÊŽ0¢mCwßî˜n´S “o‹Â룀}FhúŸÆ§×s¶rìüæÌåCåEúk:Çž­æ,¥ÞË•“ AŠøþ¤QydøÁ»¦rT15«¿%¢3EPF„jìÏml¥¬ÌÊ£‘£Õ>éõQÀ¾$´pSß—׸üh¤£ÊàyeCèѶ¡»‹iÓVv15«¿%¢+€G¤¿¶sìÙjÖrŸ‡üÆ̯ÝuéõMÿ$}5±‹K%÷¾Tê¯àaDÛ†î.¦‹¶²‹Ûó§›ÂL”¡N]›Mæ-e›»Ë‰‘Ž*Ÿôú(`_Z¨±÷úÜÇU.=n<ÀsB¯h=;ù&]´•]Øž¿ÕßщÀcÒ_s|ìÙjÖ´••[ÿý—ÎZ¿ôú&°ß £êèùÇ+™…²1ókw}@ãu<'ŒhÛÐÝÅtÑVvaëe¼·1Ä4€§d ®ûòó¼¥l3³œé¨òI¯oàZ¨±÷úÜVÁ}ÌôâÝÁ¶ +-çxFhá¦Óó©¢'ÅÔ­þ–q” é¯9>6µ–µ”meWŸ^ˆUû¤×7€ýJèÑöáK»¦­¬üÆ‹+'ë¯P6„ñ~¢ì|˜hòÅÕS<ÀÒW›ZËYÊ63+Ï«öÑ%@9Z¨©ï·WÛ[ÙÅÔÂíþæ°&¼> +-ìCZ°áÔµÙä‡(I¿¹s¶µB'J€2#u]ãÓë9KÙffùáp{”€ïMh‘–É7é¢û:¶æ®÷45’(;¨<òsb9cÚÊÊ­MÅj|Òë›Àþò¡G­ü»GŽÓ#@yz¤¥ÿöBªh+»œ½vª!¨y}ØO¤¿¦ó—霥l3³ô`¸=j¯oð×dàÀ©«/’÷y(¦ßL´D4ö +-¾-Øйõ!ER §›Â¤P¾¤ïì×i[Y‡á9U••ÃŽDVAiYF°¥eqDeQPe'ì d¯T*~è®àô,W÷ØÚJÇ$Ïý Λÿ¹~»áÁÂq\ÿJF^ö]/T¸Xð—rÁÕÎg;¡dꃮúWGn[¥L¿ À'ÅYÝ;다6~òf°ÑmæhÀ_ÀX!5?¾Ü¦WHìp~ Þm™~€O²½â‡‰Í –úJœ­=¾]j%À¥fwÃÃ¥“¸žJ%ûÓ=^§B:ß=ÉRÜ2¼âWõ)-´5u·Ò.s¹àrI–’[£k„‘‰óõ§w*l  “«n`þ0fÜn2â›ëõ:n\"!Û+~˜Ø é «§ËCÍÅ)ÓoðY„âôvOï…5#bG õ.ñ.Mz{ôÎÛC7¶Çá|ÛÈB¶—·ož'ô”®úW†[<)Óo¹J˜ŠêŽbÉ”®…÷fz¼…t²ˆd)nYñ«F<$Î7ÆÚÊmr¦Ÿr“dñÜZþ×ìØo¯°Ë¤U„ÉU?°pK¦t-´ó¬ëjW .d-mýçû³„‘ªeäf±EÊô“|!¡8½½s¾°¦§’‘ý—?^s*ÄøÆ„l¯¼;µJ/ŽØñƒz—‰ÅdŸ‹SžÜ &.Ny‘SßœPÞÞ9_DÓu-â›»WíTØ@V’¬¥·GßT=¥«þ•áEÊô“@.JQmÿë£X2¥k¡í©ŽJ»L:YJ2_iüùíIܸçÄùÆX[™•xߌ0»©qשqöþIk)SÈbÂTTÛÿê jăÚyÖYi—E¦ßr„d)¾9ºHé ú—‡nx,¤Í„âðvOï…5=•ŒìÏõz +-ñ¾ÉV~g|3˜Ðõdìha ®ÈÄʲ›íåí¿žõëþÚBâ|=!\íz¾Öt]‹øæîU;Ù@ö“,%·F×jROÆOß6ºÍ6øJBqTÿãÅ~ÄH‡DhûYg¥]fa9@˜¯4¾9‰ñ ÖFZŠ-R¦Ÿ²›P +-kŽ.æÅùúX[™•yäa*º~þ ª¥¯{ãi[™ë_A˜\ ƒoOãF:Äý«ÃÍ ãÈBqx{f÷ÂF<$BÛS•vYdúM k ‹§yx5 é;^zØà2±,€Ü!d{ÅÝÉ­`"©kaßl×A<€?I²”¶>Y?W“I-zðêþõB…]äÉš>ò³‹#?|ÕWãäÈÀŸ"ÙÊÛ'¶‚‰d2Þ›éù»ƒUäÉâi^ñÇxˆ/>¨+2qæà‹ ¹ ªkz7l¤ƒÜš¼[a—Ù@Î&WÃÃ¥“˜–Ôâ§ËšÜf|!¡8ªï½Ø$ŒAqöþIk©UÊô“\¡^¿?pqëµÑ…[_äbN¼>ŒjÆœð¯73'€\%‡·wv/lăz¶>ÖZjåÚÀ¦¢úŸ–NbF:ÄNÞ 6¸L"ÓOpI„l¯ì˜ÚªF<·'ÛËmÄølÂìnZ>é=|Ý_[¨@“lewÆ7ÎU-™ïNwVÙeN|Éâi] éˆì¿¸Wí €Ü&YJn=~÷ñè}s½^ñ>‹d-i[?SÞéª*`E¹N˜¯ÜZ95âA‹Î÷Õ8Îü1ÉVÞ>±T5M nOÞ­°I™~€K'L®úŸ–NbFIÈöªîY_ØH‡xàÝèÍb éä¡8ªï½Ø¤¯ß¿2Ôä6à„ìðöÎý{<ܸÂxò† ®vÏì…Ó÷Xmñ˜¥L? |¿„ì¼Ö7Õ’ZìäÍ`ƒËD:yD²UvLí„ŒxPÏÖÇZK,Äø?„â¬é_“$%wÿZKfÒaŒtp"‡ñ°§+»3½A¯L<{„#Ð4¼šÐöôô&éà¤ÌxXˆ[¢ìLõä 3^.ÇÍtØ~×I:8)#—2kÊăÕ§ËH‡ÆƒtMuWyH'%ìÅw†÷äau{@NöK·^žúž`lõƒd1á4¾j.Íö»Î«n–€,ôÕAßï¨à 8Âîo\Œ™[³9ÖVæbkÈ>²¯öÉlXѵth²«ÊÃ9p6„½øÎÐr܈‡äú«{WœÂê€c’½Áޙݴ¦¥w§{‚^Ùê÷ÈYÂh^Mhº–Xn +-8ˆ²‹ä©êš ¥5] ì»æ#œá¼rïÕZRÓÕøò‹ÛÅvâ€l"¹+:Æ·RÆ%Ì÷×Ú¸äÎä*kÛ0''öé÷ELYDr–µŽ~¹ã~î8€³%¹+:Æ·ÌщÌ=½î“­~8*á(¹û×ZÒ¸âñå·‹í¤€3&yªº'CiMWÂÕx‰²„°ßy¹’Pu-±:ÒpÎœì öÎì¦5-šê®òHV¿…°5ü±S5-¹þú~©“tpd_í“Ù°¢i©­ñŽ +-ñ@6}ןÎEMMm¾i/ç€8ÂVTÿl!jlOrc´¥Ô)¬~ø!Ù[óhf7m¤ÃöăJ7éà|û¥›Ï—bF<$>4ìÄä©êž ¥T-½ó¾§º€tp^„ýrãË•¸ª©ñå7/Ùˆ.6ÉUÞ1¾e¤ƒ²ûáñ5¯lõ{äá¸rïÕZÒ èÂ@]!ñÀ…f\îû¯×3—{¾ŸË à| WYû›Ms‚Â_óÊV¿ü?a¿Ü8¼WU%º4Øà'œ/É]Ù5±RÕTèýÃ_<’ÕïÿGØŠ£ŠªÄW†/ÛIçL*öLïñÜï¬p\T²¯öé\$­*‰µW÷¯8HçÎØ¡'³as‡ÖG[Jì“TìÞI©JróM[¹K²ú=ò°Õ?[ˆñ_iºl'¸ˆ$wåƒ‰í¤¢$·'»*=¤+û¥[/–cŠªÄ–ŠlÄp–¶Žm$5µ3ó[W¶ú=ò”pšÿüWÔtd®ÿz!ñÀ…óïµs­XI8K[Ç6’ŠšÚ™ù­Æ+[ýð-aóßz¾3Ò!º8ØPD:°Žä¾ú7ûuÞÕDš@q¸ßªJ%A¨ HÀQ Ú¨Q´Ydq%ƒ"(B@Y$@²TÕ[U~ñŽÎœ3ž3KwO#o¿çÜ¿î=÷öbNú¾Ì-%;Úê<à{Âh¼ðp½ä}ñííçC-®…´úîûËî_Ù¤‘¨&z¤çו¯Cíì¦m&C @)½¡wj­è}ñí—W[tÕC w&—rÒ÷evaôlHSÀ 'Œ¦þ™rå}±‘ó€bÂlžËØž/óËcÝõ\ÕCZ†ž¶*çá`e¼'¢«ÎÀÉ&ŒèÀìV¹²Ìŵ©¾–@5Á¶ó{ŽçËÜR²3¬©ÎÀ‰¦7ôM­]ß+o>ˆBuøžîL.å¤ï9{ó#mA: +-u´º®±å|e–í—×ZMf@•Ñ#=ã+®ïYŸŸ_9 ¥PEÏŒ.dÏsö_ßl2ʪ0/N¯—*ç¡üéÑ¥Fƒž@ a¶ÏelÏ—ù÷wÏ…5Õyàߣyðé¶åùnau¼§^W€“IÑÙ­re‘‹éÉx„EP„Ù–Hí:ž/sKw:šê<œHz¤wj­èú^ys¦¿ÉªóÀ¢…;n/æÏsvS‰6“®àèiáswßç¥ïÙ;/¯¶˜cUJ¯?ÿ`å ÒVÖÖÓÁfƒ¶ਉ`ûÍ×ûŽç9û¯o¶cÕJ §?–<ß-­?ìkÐUçà¤SC/vlÏ—ù÷wÏ…5Õyà¿Fóà³m«RXËc]uGJ—m”=ß-®MõFtÕyàfÛÈüžãyNvaôtP¨ÎÀ‰¢×Ÿ_-¸¾WÞšˆ 1€ª¦…;“ïrÒ÷ìÌ««-: €£#Bgo/æ¤W™á¹áV“PåôHÏÄjÁõÜòÆÌåFÖà¨36<—±=ÏÉ.Œž 1ª0š.?Þ(WÎCauü|½®:'…0¢O6+,óîw×kªóÀï–«/w,×sr‹·Ï†(.Ž†‰O®¤ç?N_hÐ…ê<ðûDðô/oö×µ3s×c&ÍÀQÐBÉw9Çs­ígWš À± Õu-ç+ÝUÞœý9Jwp„K¤vm×µ÷æGÚLæÀ1¡7ôM¯]OÖ&ã]ujŸ0¢³›e×urï’aMuøƒ„Ñ<ølë[}-%;BÔ?š‰O¦ Ò•…ôdoDWþ0a¶ü}×r]+“JÄL¡:5N u$—²¶+K›³QƒépŒha €##ÌX"•±¤´2©DÌdx+z$>™.8®SHOÄ#ºê8Ô2aDf7KÒµ³‹w:Bšê<ð§|WbKIJ €IÄ'ÒÇuV'â]uø“„K¤2–”V&•ˆ™Buj–êH.emW–6f.7Œ.€cç_=¶9;¥ÇøA„»žÊXRZ™¹áÖ“ àÒ#ñ‰tÁqBz"^¯©Ž@mzSÿ“Í’tíìâ³!®€ãHÑYª €K«ï_=p\§žˆ×kªãÀÿE˜±D*cIieæ†[œŸ¹õ6k»²´9;5˜[Ç”êH.}k³™K:mÀa–k¯v,)­L*3[Ç–‰O¦ ÒuV~í®ÓTÇ Ö½ñÒãReksKÉŽ[ àøFt`v«,]{aôtP¨Î@Ñêºî8p\YX›ìèªãÀ_ ̶‘ù][JkçÅЩç€Ã$‚í7ßìÛ®,o?ý9j0´Ž5-Üyï}Þqeñãß.4èªãPK„Ñ<ø|»,¥½÷úF›ÉupÌé }?¥ëä—ï kªãPCôHßÃõ+  V£ùÊ‹Ï–”öÞüH̪óP3D¸óíÊâÇé ºê8ð—‰àé_ö+½VÞšíoÒ9h½žÊXR–?¿:`bÔ­®ûÁ‡G:«ãçë4Õq¨ Bo¼ôx£$¥µ¿0z:ÈuP ¾UÛ§¢S©¶··¨6‡îºÿ!oK;¿ò »NS…´\{µSvœßد÷®¦®4ŽãkŸ;@ÀAK±ˆŠ#VA,ˆ‚ŠAr3\sÏ9{ŸÃ[¬k:®™VE ;&ßÏ+øýõ}Ö£úã>ž¾\Jfô±g§fŠJÎ+€ +-!B?üò&ç{¥éî:izß?á«ï{ºçxž>Zhòó:¨VÍ•©­¢wìæWGÚÂä €oeÕtMr[T"ákè{ºçxž>Zhò8¾µÜ]ɹÇ^igº»Nšž#¼8”ÌècÏNÍôD%ÏßBøã7ž*ÏS ýq‡@E±Âícë÷Ø-¬µ‡-Ósø®Éº«Ó;¶w¬³ËÃÍA^•EÈhÏLê}ä2É¡D€ÈðõD¸md5ï{ʼnΈezüÍ„¿i`ñH{ž³÷äZ½äyàk}tTç8ª*‘·¬æÝc¯¸1ѱLÏà{%d´g&e{Ç:“LxT Y×=½S: ]öõæ ¡àëXáK÷ß\Ï-¬µ‡-Ósà _¼á@yž:X¸ÞàãyàkÓíW铃j¿›é‰J*€Š$‚-Ã+Yí¹Å­©®Ëô¾K2Ú3“²]O¾hòó:¨PVM×äfÑõtvy¸9Hì8=+Ü>ö¶prMs«#ma®)€J%|õ}Oöl×uö®7øȧ%‰ÁWiå¹¥GWë¤é9pfDàâÐRæ¤wÅ­©®Ëô¾7BÆ®ÍíÚ®«Ÿßlô Ó{àìX‘ŽýVp=]n<NçÃ%ծέÞk qIT2!c×ævm×uöúã>’Àiˆ@b0™V®.nOw×IÓsàL4oèCó¶v×Ò<NAÈXïÜ®­µ½¿Ð÷ Ó{àlY‘Žñõ¼vUöͽBD€/÷ÇÍ,·pETazœ=+Ò1¾ž×®Ê.7 _F„ÛÇ~¿ ™×w¸ ªƒ±Þ¹TIk{o¾¯ÁGúøÂßtûå‘ãêÂædWezœ H &Ó´€ÓÑž™w%­ý…ë >azœ+Ò1¾ž×®Ê¼¾Ó$~|ž]º¿öþzfWî¶p=T !c½s©’ÖöÞ|_½üð9Âß4ðòÈquqûaw­ezœH &Ó'ý+l>èŒÐ?>GÖýøë»’ÖÎÁóqŸ0=Îé_ÏkWe–†À§‰Pë½ÕœrUöͽÖ—@52Ö;·kkmïÎõÆ$ àS„/~ãù£uq{º»VšžçJCÉ´ru~}¼#l™ž@Y³j»nµë¾¸Ùè¦çÀù²"—'6 +-'zy«ÑOø@CKi[9Ù7¿´¹pBF{çR%¥ŠÛÓWj-Ók(2úÓlª¨TaçÑÕZiz ”¸øÏ¥´­œÌòpsP˜ž@Y¡¶Ñµ¬£ìÃÅ&?÷~gÕtMmæUÚ}r-&‰#'¯ƒ¯áÆóý’rrëcíaËô(¿ñŒ:ð+Ò9¹™wœÒî“k1)LÏ€r!B­#«YG•o5úÿÍ~½v5qµq_{O&á¦Ei´D|¢OÔ@ˆ!(9 $“dfï¾üƒk¹ºúô©µ¼€mÂõû׫ÿ½næaŸ½³êø~cmv$Âm€?X}“‹^iþr¯4]€qœFø +-aŸ½³êø~cmv$,Lç`˜è:w£èÚò!›Ë"{ÆŸn»A wóWû-Ó5˜%Bg¦^í郠µùðB·4ß•Ãœ^ú²‘c]ÂtFÉîK?ºA wóWû-î"üÑuþÁûfp ÷ß\ 1’€ÓLØ÷WêþßXŸ‰pà/¬Xê÷ª +-oçÙD¯4]€A2š|^öbùy2ÊQ€¿áÒÇ?ðÂL<,Lç`ŒÌ®5ü@×Vn ÛÜDø?²wâÙŽª²8Ùg™®À«ÿj~WAkëñÅniº¾C"4x}i_~³˜Ó9"ºÆ~ýÐôõéåÔ@ˆ‹ãOSùó€ÅTN'¼¾´¯¿QÌŒF¸‡ð·¬þ«ùªòýÖæÜ…niº#dÏø³m×÷½ÊâdŸeº¾S"<2»æè@ï/ß²…é öÙ;«õÃkX/ÌÄÃ\Cø +-ýñyÉõ}wg~¢Wš®ÀMfËǾAØ÷Wj:ÐõÂL<,LçpâDxdv½ázùÆÍ-€¯’=—ž|lù¾WY˜ì³L×pâ¬X*¿«¿µ9w¡[š®€ï˜™~½w¸˜b&¦s8a"rþÁû¦¨O/°¸„ðD×—ÉÜ}q­ß2]ÀÉ¡_^ï©Ào3£^øGV,•ß=ÜÌææñ.6pºÈî‹·Z¾ïU&û,Ó5ðá‘Ùõ†ÔþÒô`ˆçpš{èæÛšöu½0sàd4™-{¾ïn?k8A²gb~Ç=<‚;ó½AøaŸ½³Z×¾®­Ü¶…éNÌá œY­+_í/ßâÀ·Éžñ§Û-í»¥ß.÷JÓ5œ+ze¡ìúº¹õèb7'¾M„o,ï)_Õߥãaa:€""‰{ëŽö½O¯¦B\@ød÷…G›M­½ÊâdŸeº€bÅR¹ª§uãýƒs^ø7„50õr×óu£øŸÛ 8%DäÜý†Ö^5wµß2]mâËxú^5ÏxN k`êå®çkgý^""L×@»°b©\õp=ïœc=§‚è›Ûljí–¯D-Ó5Ð6DxdvÍѾ÷éÕÔó 8DèÌôÒžòU½ŽÛÂt´MfË®ÖÍ­¹±.öÐùd÷¥Ç[Z»;ó—{¥éh#Â>;³ZW¾Ú3=âyt:ºù¶vxùj+·†m.왘ßqµnm?¹Ô-M×pÌdÏø³ÖçÃ÷t¼‡ÃG!ì¡[okÊWµ··†BÂtÇJØ÷W>ß½ýåƒÜ=8ÙséÉvKkwçÙD4]À±’½—+¹Z·¶]èæìÀшÐàô›}å«úêa[˜Îà ;ž~W?¼z{K¿ „¸zpD¢kln«¥µ[ÊþØ+M×pŒd4¹Pvµn~xx¾‹×Ž,40õzÏóµ³v7n³£€Î%ìøÝ5GûÞî‹ký–éhC¢ëü¯Z»•…dTš®àØXÑ+‹eWëÆÆýш0]íÈê¿öb×ÓÊY»·YR@§‘‘{ëŽÒÞn>³L×@[‘ÑÌFCk·¼p%Ê”:•K媮VÎF&¦k =niþó–Ö×ï°¥€%"£™ Gi·òûO1Ët ´)IdŠŸÇ´šK1¦€eÅRùª§U}mv$,L×@»²ú~Z,»J9™Ñk +-èD"2šÙh(Õ*/$£Òt ´-þáÒn5ŸŠ1§€N$c©|ÕU^ý]:n Ó5оd4™-µ”r62‰0{ +-è<"œÈ¥Z¥l2*M×@v<]¨yÊ­æR1Ðyd,•«ºÊ«Òq[˜®€v&£Él©¥<§˜I„YT@§áD¦èxªYÊ&£Òt ´5aÇÓ…š§ÜJ.cRFÆR¹Š«¼Z!·…ého2šÌ–šÊsŠ™D˜MtNdŠŽ§š¥l2*M×@›v<]¨yÊ­äR1FÐYd,•«¸Ê«Òq[˜®€v'£Él©©<§˜I„YU@'áD¦èxªYÊ&£Òt ´=aÇÓ…š§ÜJ.cVDÆR¹Š«¼Z!·…éh2šÌ–šÊsþË^65Ñ%`®s’n²±!Q J^·à îKE PYd $$étŸÓí߬š™ +-LÁ:÷õ îOϳ5“µÙU@x;;³å?ÕáÜpJš®€Vf²ì?ýêb¾‹a„‡ìÊ/VýŸSžÌXÂt „L ϪŸ»5“µYV@X;;³å:œNIÓ5 +-ÂÊL–৮.滘V@XÈ®übU¾SžÌXÂt „ƒL +*Z[ÓY›m„ƒ°³Ó›­ P•b.%M×@H+S(7ý@WóŒ+ dg~¡ª¿Y*d,aºÂB¦rÅŠ +-üÖætÖf]a ììôf˼J1—”¦k 4„•)”š~ ŽF:™W@ÈÔÃù#øÍR!c Ó52™+V¼Àw¾ÿsÃf_WŸ°2/¾;~àUŠ¹¤4]!r2°…RÓÔáÜpŠ\}2™+VTà7K…Œ%L×@˜üwaË,, „•)”š~ *Å\Rš®€P9™ØɲÃÄBB&sÅŠøNy2c Ó5.2õ`þH~³TèccWœ°úž—š~ Žæ¤¤éa÷Om¶üÀ;øt?ÁÈ®6™¸÷ñÀ üÖæT¿-L×@ØÈΑ…ªüÆ·§×£¬,àJ‹^ò­áºº0Ò)MÇ@è;;½ÙòoÿýÝ3 ¸Êdüî»=/ð[›ÓY[˜®€ð‰tå—ª:Ðõ¯ÓQÓ1ü¢é‰µúɧՖþꊘŽ€³Û-ß÷öÞÞ‰ Ó5œ›ˆ ¾Ùq}ßýñr ƒK€ é]©é@×WǯEMÇpn‘žñ•ã“G;^뉘Ž€P±Û¯~¸¾ï¦k8'»Å¡À‹^_=Ö®­ŒvGLÇpN‘îÑåÚÉŸÕWǯEMÇ@H‰øà›]×÷[Û³Ât ç"ì›3[-ßw÷ÞÞ‰sgpA¢éÇku¨êb¾SšŽà\dçÈü‘òuýëãtÔt „–L ½ßs}ßÙ˜ºa Ó5œƒ°o¼øÞÔ¾»ÿa(!M×@h «÷é·†ö½ÊÜp’¹\E2™+V<_7ÖŸõZÂt „—LÞÿtðkoK…>öp «÷ÙzCûÞA1—”¦k Ä„ÕW(7 îÇ{ põÈÄÐû}Wëfy2c Ó5f2õàó¡çëú×'×£¦c8³hzbíXùÞáüÔ4¡&ìþ© Gkw÷í¸0]À‰øàë–ÖÎætÖæÈàBEºò‹GžVµ•±žˆéÎ(Ò3¶\ó´W]zÔÍÀų[ŽÖÎöì@‡0]À™ˆŽ›ÿ¾±—·bÜ\°HÏØrÍÓÞÑR¾+b:€3‘#‹G'/V[ëáÅࢉøàë–VÍ©~[˜®à „uãÅ÷¦Ò­Ý7ƒqN .\4=±v¬´[ùü %MÇp2™+¸ZÕ¿>IGMÇ@‰¡{'»Û(ú,aº€Ó³zŸ}«+í¦c  «÷ùzã×ð~bxWˆˆß}·ÛÒªQžì³„éh29¿à½šópzm¹Í3süún»’Ž€0bˆÿT|`ñPŸ5_f3é%+1R(›³f}cªË–ŽàZvçäz58 *«ãIK:Â)Ú¿°çùϳ1%Àu.«Éa€ »sr½œ•Õñ¤%À5¬ÄH¡lΚõ©.[:BJÅõY³QœÍ8Ò1\Ãé~´åM}ôún»’Ž€°rz¦ÿãWCqÆКT|`±¤›A£8›‰HÇ@hY‰‘·'çk\ûø eKÇp%»sâCÕ4ÍéÊxÒ’Ž€ðŠöÍï6šMoïiTIÇp•ÈÍ¿v¾Õ~>ã¬@ŒÝùLJŠišò»û K:€+X÷ÞëfPû4ÕeKÇ@ˆ©øÀbÉoîöãG:€+8釛õ ©^ÝmWÒ1fN÷ôçóAö—ã 2 õ¨Øíç^¸ÅÙLD:BÍJŒ¼=ÑMS]Ÿì´¥cø•_=Õ.¯Œ%-é5í_ØmAcw¾/*ÀoœÞÙ¢ko?Ÿ)é7;5¹^1üæ^‡%À/T|héÐLmãaÚ‘Ž€SñÁ—%ï|“7sÝl2 ÕØ©«&ð–‡;,é;§÷ñvÝÞÁóÛ1%À%*Ú¿°×÷Ë“›é=+9¶RÖ>]OZÒ1\b%F 'ç/UY›¸aKÇ@è©X6¿ïÆ-Îö:Ò1\âtO®›Àûº8WÒ1»kêSÍþáÒ³ h)*vçï¯^`ê[3=Žt  Mµ/ù©®O¦lé~b%Çߟê@—ßÝOXÒ1€¶¶ÈÍ'_Ü hì.ôG•t ÿrzg‹® ¼ýg·¸(hö‰µŠü“·#–t ?¨øÐÒ¡˜Ú§©.[:Ðöm™KÞù2oæÒŽt ?Ø©Éõª ü£åáv%øÆéÙª›ÀÛž1Í€V¡¢ý » p¿<¹‘Ž\°’c+eèòÊXÒ’Žà;«ãÞ›c?ЕtÚÒ1€ *–Íï{©oÏô:Ò1|çt=ܨ™À/½Œ+éÀ?œôÅ8{¥ÅÆÐ"TôV~ß Œ»ý¸×‘Ž|guÜ{s캲6qÖŽà‚•}WÖ>]OZÒ1€ïT´a·÷Ë“LD:€ N÷ôçº1ÞÁóÛ1%ø/;5¹^Ñøj(Î<ZŠÝyqà]ÛÌu;Ò1€T|èÕáù>WÖ'S¶t ç¬äøjÙ7þÉÛ‘K:ð¯Hf®X7ÆÝ™ï‹H·pÎé}¼]צ±û´?*Ýø‰}câý©o¼£åá%@›Š¼,yFW?ýÙeKÇ~r¾Ð‹_Yh@Ë°;'ÖN}ã-w(éÀÏœž™­º6ݧýQéÚ"™¹bÝwg¾/"ݸÄJŽ¯–}ã¿é°¤c¡§âƒK%ÏèÊúdÊ–Ž\¢bw^4Œ®mæÒl4@šÝ9ñáT¯´4WÒ1€ËœîéÍš6ý|6ÊH„E2sE×·8—‰H·~a%F '¾ñO +-£ K:r*>´TòŒ>ý0ÑiKÇ~¡¢Ùü~ÃèÚf.íHÇBÎNM®W´ñJKƒq%ø•“ÎmÖ´iìç³Qf *Ò7¿ãj]/Îe"Ò-€ßX‰Ñ‰oü“ÂhÂ’Ž„šj^>ò´_^›è´¥c¿QÑl~ÏÕ~u#—v¤c¡f§|¬øºñuq ®¤c¿sÒ¹ª¯Ý½|6ÆPEúæwêÚ¯mÍô:Ò-€+X‰‘±§½ãÂý¤%1Õ>¼|ØÐÞÉê-IEo=Ûuµ_Ýœîv¤c!f§|¬øÚ=xq'¦¤cWqÒSŸ¾Mõ^>ËTäDúæwêÚ¯}~ÔãH·®duÜ{säiï¸0š°¤c¡¥Úï¾>lhïde,É@kRÑ[Ïv]íW7riG:Zvjr½âk÷àŘ’Ž\ÍIç6ªçc½—ÏFk€ÈÍ'źök[3=Žt àVb´pìiï¸0š°¤c!¥âCK¥†öËïÇ“¼´*Íæ÷\íW7riG:Rö‰µ²¯__Æ•t à:N:·Qõµ»—¿e®""™¹íšï׊s™ˆt àZÿa¿nÛ’ØÚ8ŒkÆA5JÉrKºËÐjïÒ²¬Ü>d ©© À03kÍâþþïîÚïw‰Ç!+áü}‚óÕÿ:.+9·U×ÿÓõ­‡IËt  ' wf£ªZÚÛ[Hs‹à÷%œ©×g²¥ýòÓaÛt  'Y »žn©êÆŒ+LÇþ›=ü´ìë–<]›tl€öèó¯A«½‹›nü„•|ø©µ¢Ë³ýü€Î}÷Þ«–ööÒ1Ó1€Ÿ}SoÎdK7÷²Ø€Î³RóÛ¨¥ªÅ¬+LÇ~ÆÎ,øºž¼›nô ;³rü8D/9Dð›³RóÛõ¨¥.Š÷Ât  çˆ¾©õ3ÙÒÍýǃ1Ó1€Ÿ}÷Þžßloo1m™Žô+9·UZÑåæl¿0ø9{äÙa [áÑ‹±¸é@ϱ‡Ÿ–}Ý’ßV'Ó-€_°í6tKUßO»Ât  ÇgríT¶´_ZŽ™Žü‚pg6ªª¥;¹”e:ÐcDÿì‡Ë¨Õ>=Lr…à·ûë(léàp%c›nô˜ØàŸûžÖòìÍTŸ0ø•Øàâçg{ÙtXüÎßÇŽüƒåŒmºðK"qóB騶5—´LÇzŠpg6ªR«úö|Š·€3þê$ÔQ³ôtØ6Ýè)Ö@n§iyþnÚ¦c¿z²ßŒtømmÂa¸d¬ú‘ö¿>›n\Õÿàã¥Òêbó~‚ßÐ9¢ïîú™ÔQco!m™Ž\p&_Ÿ†:ò>/¦c¦c=ÄJÎmÕ”VÕb6!LÇ®ÂÎ,ø‘Ž^ŒÅM·zHlh©Ôü~€N^;¦[Wb¥æwê‘–•÷Ó®0èÎøêI¨£æþ“¡˜éÀ•wú}E꨾3Ÿ²LÇz†Hd‹U¥Uíãƒ~îÜñ±GŽüƒåŒmºÐ3¬ôÂ^#ÒòìÍ”#LÇ®&–^üìE:<}=Éx:Å}öÕב¸2b›n\‘HÜß¼PZ]~˜Mð;:CôÝ}{.uÔØ}4`™Ž\‘p&Ö¾…:òöÿLÇLÇz„•œÛª)-«…W˜Ž\•=œ/û‘Žÿ‹›nôˆØÐR©ùãø¼¼Ãñ€ÛÃJÎoו–ÕiW˜Žôg|õ$ÔQsÿñ`Ìt àÊDßô»s©£ÆN.e™Žô‘È«J«ÚÇýÂt àêâc/¾:ò–3¶é@O°Ò »H‡go¦~¸EbéÅ=ïû€Ÿ®M2à€N°GŸúQ䮌ئ[m‰ÙÍ ©åÅæý¿àæ gjý,ŒT}÷Ñ€e:ÐáL®} "ÕØ[H³à€›gõ?øx)#Y-d]a:Ð;“/7Uä>µM·z@lðñ~CEÁñ«ñ¸é@[¬Ôüv]EáÙú]G˜Žt¿øØ_G~¤š_–†b¦[mîÌF%Œä姇ý–é@×î½wçßïNmk.ÉÝ€[&~çåq)ïË“¡˜é@׳’üS“QxöönŸ0hOlèÉO)ÿøå¸é@׋ -•<©š‡ÏGmÓ-€6Yý?]Jž¿Ÿv…é@·‹¿<ö•¬ï-¦c¦[mÎÔúi díŸ?’–é@—îÌF%TáŇل0h—=úì°©¤÷ei(fºÐå¬Tn»&UpúfÊáw€[ÇJ/îÕ¥ò_ÇM·ºœÉ—=©š+#¶é@ÛDböÃE¨ÂJaƦc]M8k'¾’õÝG–é@Û„3õú[ð}Çwr)vp“„›-VCV‹YW˜Ž´ÏY.{Rzå|Æ6ÝèjV*·S—Ê?Y›pøà²r@GØ™|Ù“Ò+ç3¶éÀ57[¬†*¬³.¿àægbíÄW²¾“KY¦c×À’:C¸Ùb5Paµ˜u…éÀuØ™|Ù“Ò+ç3¶é@³R¹z(ý“µ ‡ßn¥S^û1å«L9àÙ™|É“Ò+å3¶éÀµ7[¨2¨².¿à¦gbõ¸)ÃÚv.e™Ž\ [èáf •@•BÖ¦c×cgò¥F6JùŒmºе¬Tn»Êæñê„Ãï·cè;“/5°QÊglÓ-€kn¶P dP)d]~ÀÍÎÄêqS†µí\Ê2¸&Öpó„›-TT +-YW˜Ž\—É—¼0l|y:l›nüŸý:_jb[Ã0^«§ÂBP@DDvÜ 2Èb„0Æ$dèsÿpâ©snÀô®U¬z~Wðüõ}õÊ~}Ò{òîó´Çv€'Ë^ùï9¿Ý.ºº[†²Ç7.ƒ8¯>L8º[L Í—£^Ôøö|H莘ÉÚ¾•½¸{º2bénü1á=ûz¯zq§²œåžþ bèù·FÔ‹ZG i¡;ðçœüf-ìÅþÅú˜­»`$+ûªÒ‰{êáë3íO˜•{[íƽðæSÁÕÝ0’=öîÜï¿šÚVÞÑÝ€H/~oE=UߟM Ý1¹…ÒuØ‹ý³Õœ¥»0‘šÝ««^Ô>~™á¢’×ÿ4ûÿû4i¡;0·Pº{±¶š³u· $Ò/ÛQOÕ÷gSlxÒìѵs?î…µ­IGw À@VîíÙïGs]*¸º[±2K?:qO=|}æ Ý1ó8ùÍ_a/öÏßÙº[©¹ƒFÔ‹ZG i¶ iÂþ|'{Q»ò*kéŽ ÆÚ¾•qÜ=Y榒&†^6U¬ßž Ý1€Á8ã—A—ãŽî€q¬ìr¥ÅáíNÑe;Àg ¯œtúGýæï)Ww À8öØú…EÁÕ‡ Gw `@"½P~T±ªÌ¥„î€iÜBé:Œ£Îé›Kw `@›ٽ—qÔ>^ÊpÕÉ©Ù½ºŒÕãÑBZèŽ Êü«ÆQ·ºš³u· #Ò‹ß[*–»3Ûž<{tí¬EÁ¯­¼£»`käÍiGEA­TàÉÀÓge–Ž[* +-ï¾L{Bw À,ÎćK_©îù»1[w ``"5wP—‘l¾b;’$ÜâöM©Ve9kéŽ Œ»ø·ˆÔÜA]F²qøbHèŽ Ιøpé+Õ=7fënÅʼi÷O{­Tpt· bçV«ùW›y ˜A¤ÊM…÷»3žÐ0‡“ß¼ò#Õ©®ælÝ-€Dof÷>Œd³<Ÿf;’"ÜâÎm©ÖñRÆÒH†S(Õú·½ýóõ0·‘š;¨ËHÖæRBw öØúEW©îùú˜­»` +³tÜRQp»StÙ`køõI§Ük¥‚£»` ;·Zí¿ÿj3Ï{SˆôÂÑ£ŒÂûÝO莘™øxåGªS]ÍÙº[ ÞìÞCÉfy~ˆíH†p‹Û7A$[?–2–î@RÜ©O×A¤Z•WY®; "5»ÿª°~ø<%tÇ’âŒo\t•êœ­Úº[†éÅ£f¨‚Û/Ï<¶ÃY9iKå_mM:º[†øÿsùÅs“ˆôâQ3TÁíçiO莘ÁÞU²sönÔÖÝHŒHÍî=*¬};bënA ÍÿÓUp¿;ã±À vnµÚ‘ª{±1áènÁʾúђʯ• +-®î@‚¬ÌÒÇßþÓ;·VíHÕ½Øwt·$†^6BÜïÎxBw ÀN~óª«dûô툭» á=ûz¨°YžO³ƒnqûÆWòñûËŒ¥;$·Pªõ/|«²œåÂ'¼Ù½û@…õƒ¹”ÐH’=þþ¼#e§º6jën@¤ÊÍPú·Ÿ§=¶ÅY9iIÙ½ÜÌ;º[°²Ë•V(»W[“<0‹H/5Cé_o]¡;ðôÙ£kÕv¶ÏÖÇlÝ-€D‰ÔÜþC ƒû½Y혓߼ìÊ°õseØÒÝH”ð¦wn|4Ê i¶`PÂ-n_û2l-òWÀ4ÎäÖUW†­ÊrÖÒÝxò„7»{çËàa.ÅvÃØcëgí0lW×FmÝ-€'O¤þia÷fgÚc;€a¬á•Êcv.>æÝ-€'ÏÊ.ÿøýV.·&y+`‘^,7‚ð?ì×iRɆáȃ˜db0Ð 4“±ÍlŒ X f„@HªªÌ¬ÚÿZ}ûnÀŠŒªxŸ¼¿Î‰OUwŠ®é@êÙƒ«Wa‡×kC¶éÀ&ü©ãºNôËѤ'LÇÒÎݺ“I\,õ[¦[˜ðÆ÷žT¢?g{Ø€7r‹;U•ÄÍÓ¹_2Ç)lßË$Ê }–é@Ê oòèE'º~<å³ s졵›(ŽÃ«•¼mºr¢çýφNÔÓÞ¸Çv€Ì±–.ƒ8‰n7GÓ-€”³z~µŸŠ|Ø.ðT {¬Þù³fûÌ?~sM·RÎÎ/WÂ8‰nÖ‡mÓ-€?NøÓ'¯:QÏž0H7gxã6Jâðòã€eºðÇ oâàY%úõdÚg;ÞÄ}÷ùA&që|¾—íäŽ}ylßùæwð6›د©D7Nf|a:ðç9#›·Q—KlÀ[긮õ|XòØAv~å*ŒãèzmÈ6ÝH5‘›;mƉ¬~sM·ºÀê[(íCÿ©à˜n¤šÕ¿xÑ~)ÑÝÖ(/²HäfO›q¢ª;E×t ÕìÁÕ«0ŽÃ«ÕAÛt   „?õ­®ý|Xò„é@š9£[wQ‹ý–é@o|ïI%ºq2ã³oàŽ}}”‰nžÍåø(INaûA&që|¾×2ÝH1áMì×d¬êߧ}¶d’=¼~Æ:¸\`;:'ü©ãËÚÁ„Çv€L²óË•@ëðúï!Ût ÅDnö´¡ãèñ˘kºÐVßB¹Õ>õwŸFÓ-€ûÿC o7y(Q"7{Úб|Ü)º¦[)fç—+ÖÁÕêmºÐŸ:~Q±¬LxÂt ½œá›0Ö­‹ÅËt  +„7¾ÿ$cUÿ>å³s Û÷Q¬›çs½lÈ(÷Ýç‡ö­oœÎæØ€N ¯¸[•±z=™öù'QÎÈæmëVùC¿eºZÂ/=«X=•<¶d”=¸rhTVò¶é@j‰ž™¯*–ÕÝ¢Ëv€Œ²ú?\´tÞlŒ8¦[©eõΟ7uÝo\Ó-€.¹¹3Ž=à¬Å‹–ÖáÍúˆcºÐ%Ÿ>©«8ªî]a:VöàêU uPYÉÛ¦[]"¼ÒaMjY;,yl@‡œ‘ÍÛP«fùC¿eºÐ%Â-îß2Ë^¿ ´j–?ô[¦[)%¼ÒQMjY;,ylÈ,{p¥ÒRªUYÎÛ¦[)%ü铺ÔÑãnÑe;@fYý‹å¦ÒÁÍú°cºR"7wÚP:¼ß.¸¦[]cõÎý{îï>Ø€ÎX}ÊM¥ƒ›ž d—è™ùQ—:zü:æšn¤”_¾l)Õª¬ Ú¦[]#üÉ£çövxÚŸð„é@:ÙCk×V­‹ÅËt  k„7¾W´|þ6é³qF·nC­gó½lÈ0÷Ý—‡ö½ý1ÓÃvtä¿_"_¾ç—@–9£[·V³¹^Ët •„7¾[”|9žòÙaöÐÚUKÉfy±Ÿíè„ðJ‡µHEOÛ2ÌÎ/_6¥l^® Ú¦[©$üéï/R…;E—ífõ/üjHÕºZvL·RIäf¾JÜmx%e"7wúïÁ¿Ýåà:aõýuÞªu½1Â+€,=3'u©ÂûÏc®é@*ÙK妔­ÊÊ mºÐEŸüö©°º;î Ó1€4²W*-)›å¥¶d™ð&öŸ"ÕKl@'œ‘ë–’ó¿ú,Ó-€.îØÎC¨äË÷iŸíè€Søt(ùús6Ç'€Ls +-Ûÿ]ü÷=\|@ܱ¯¡’õïÓ|È6gd㦽gó½–é@ +- o|¯©¨v4é³ Óì¡ÕJKÊfyq€íø}Â+Ö"V÷&<¶dšÿxÑlo‡Ë•AÛt …„?uüÉàáë˜Ëv€L³ú~5"Ù¼ZvL·RHôÌü¨G²u»]à‘@¶‰ÜìékûäßlŽrò¿Oäæþ÷H®7Gx$m¢gæä%’ÁÝçw®é@ +-Yý ¿ÚÛ¡Yù{È6Ýè*áO}{eð°St…é@úXù(j\|Ì[¦[]%¼ÒÁS(Ãêþ„Çvü¶د³¥(- £‘Y"…̃¶ÒÒ"j#8Ë " –P3ïÿ'Ë>á}ffTåZO°¯ö_ndù¨µÃþ“!íÐß‚âÌF%j‡êǹ’v ¶üØ‹ãæu§¶ûpÐŽô¹ÂÔÚYëºsñe^;_~üÕiÔWÛ÷ì@ŸËOüÿç/øùÄW˜\;k]w.7çKv ÏåÇ^GíPÛy0èçWPœÞ¨´®ÛÕOsÚ ßåF–Nmïñí0í[è9AqöýÏöuûçûÙ¢vèsáðÒa½Ó©<-kâ +-JsŸªíëVecZ;ô»phq?j‡Æ×gwriß@Ï Jó›—ëÖÙÚd!í[¸aáࣽZçºñmeT;W0°°}Õ¹nž¾ϧ} 7,¸õ×N÷韼ôôˆ­;#µhFŽ_Œ™€~ ,l]FOÿôõ„§@\áíG{Q;4ŽþÉ¥} 7,(Ýû|ѹn­MÒ¾€ž–êNýðïá0í[¸aAñî‡óöu»²1S Ò>€^/vÛáàiY;ô» 8ûîgÔ?ßÍjâÊ,mt:µ½Ç·µ@¿ ŠÓë?Z×íꇻ%í@Lù±•oN»¶ó`Њô½Âä¿ß›öÅç{Ú€¸òã«ÇQ;\mÝ°"}/?ñò¤ûõ7|}âÊO¼ê®Èåæ¼èùñÕãn;lß¿åëSají{³Ó®~ºW²"}/7úü¨µÃÎÃA_€x‚âôúV§õóýÝ¢è{¹;ÏëívmïÉP˜ö-ô˜ 8ó¶µCåíŒvèayé µÃþÓ²v ž 8û®Òl7lh€ Ë‹ûW­Ví`iX;OPšûxÞl7ÎÞL´@ß o?Þí¶Ãáò\Ú·Ðc‚Òüç‹V»qúz²ö-ܸàÖƒíËV»~´2šOûzLPZØìŽÈñËq#Ðÿ‚ÒýÿÞþ o€˜~ȪÈ€ ´àíLpëÁvwDŽVF@ÿ JóŸ/¢·òjÂÛ žðöãÝ«V«v¸|'—ö-ܸ 4÷ñ¼Ùn|_›*i@o Ë‹ûQ;\, ‡ißÀ Š³ï*Ívól}º¨ˆ%,?ýÕûOËÚ ÿÅ™Q;üؘÑÄ–—þk‡Eí¿Ûá­v ¦Üg‡µ¨öž i€þ§ßœEíPy7«ˆ'7òükÔ—;m@&ÿ=m´›ççJþ>±äÇV¾ÕZÍ‹­…ùñ—ÇõV³úåžv žüØ‹_í°9oC²Àß )-þ>IåÇW»òņdÂïvXð÷ˆ§0ùú¤Þjžš³!Y}~Ôm‡­û·ü}â +-Óo¾×[Êû»E¹‘åëVórçáí0í[è)Aqfý¬Ñjœ½ÑY/í_6›—»O†´qDí°ñ«6´@&„åŽn;ì-–µqh€ŒÑ$¤2F;PÔoµÃºvÈí@BAñîûJ£U?]›*h€ ‡ïvÛaiX;GPšûtÞlÕO^MÒ¾€? |¸}Ùl].äÒ¾€ž”æ¿\4[µo«cù´oàîouÿÑóQ€8¢vØüÕ/´@&xü$dB2Æã !1? ™€ŒñøH(š/ÕFóêÈ„dƒÇ@B& c<~2!ãñP0°°Ù¯+£& ´ ƒmEry¸<’Kûþ€ tïóyÔßVǵq„CvªÆÅþÒ°vÈ‚ 4÷¡Ro^¿š(¤} =%,?Ù­ÖëÕÝÅr˜ö-üAqöíY½Q;Y›*i@/ùÝO´@&ÅéÓZ£vº>]ÔÄ 2&j‡uí@Ú c´ i€ŒÑ$¤2F;vÈí@BÚ c´ i€ŒÑ$¤2F;vÈí@BÚ c´ i€ŒÑ$¤2F;vÈí@BÚ c´ i€ŒÑ$¤2F;PÔ;ÕZ­º£²!(L¿9½ª_¾™.hbУHH;dŒv !í1Ú€„´@Æ…™õïQ;œ¬Miâ‡owÛawqX;dAPœ}wvU¿üöz²ö-ô”pðÁÖy­^ÝûûN.í[ø‚ÒÜÇJ­~ñuu<Ÿö-ô”``áËÏhBþ5!Y”î}ê>þÕÿ±_ŸÉM,hF«%µdãœ3`0&Øøb0œsVê–ïþ2-¦f­*M—[ç¬àûõ½õŒ{ü¤T–ÿNÈWÐ’v8ÔtÀ„ô€™€ãñÐ!Ðc<~:”LÈAýùßèê« è ?2!=Æã C& ÇxütÈ„ô˜ oéðïã_÷øH%¨,ü®%rýÏ„ èAÿ›£Fòø/¾Œ³¾€%(Ïÿzjýß~Ÿ +-³¾€ÿƒÂÀ»ãÆósóìã°v œýñÐzŽï¶§Ã ëcè¾ÂàÊI£Õjœ~,d} /JÎìÜÇÏñýÎŒvèÿk‡“í@*Ú Çh:¤zŒv CÚ Ç?h:„ÓÛwI;<ü˜Õ½ 8üñ,i‡úñ»í@*áÔ÷Ûè¹õøs®¬z@qôËEó¹U?|ÓïïJiâŸëdCªû ÐJãëWÉ߯,õùû¤RÿúwCþ,j€^àïÐ)Ð[ü}:eCzKi|Ãß #¥±µËö†¼î³!= 4ùí&znU÷´éG>7ž[õ£åW…¬o ë‚pjë6zŽ÷æÊÚ€T +-C«§V«qü~@;ä_ÎlßÇÏñÃîl¨H¥0¸rÒn‡“•AíI;ì´Ûá~gF;Žvè)I;ìj:RxwÜn‡ÓÕ!íAynï!i‡»­ií@:Á«·Gõ¤Î?³¾€® ÊóûOñstóm²”õ-¼0AßëƒZÜj\¬€ü *‹¿«q«yõuÜÛ dDþ$#Ò¸\3"ùçíбdD~·Gäjc܈ä_Ð÷ú ýö/ÖF½}Ò Êó¿ãVóúÛd˜õ-t]Ðÿö°–´Ãùç‘bÖ·ðÂåÙQ+ºý>Y@·Þ×ã¸~º:TÈú^˜ œÞ¹KÚán{Z;ä_apå¤Ý'+ƒÚ€t’vØj·ÃýÎŒvÈ¿ÂÐêi»ŽßhÒ ÂÉï7ÍVô°7WÖ¹WùtVoŵ£åWÚ€”Jÿ\7[ñÓþBE;ä^iôËE£W^÷ùú¤TûzÙ^‘?‹Ú ÿJcë¾>*­ý]‘ƒ¥>+{¥ñ«äë?í/hÒ*Ž|>¯Çqíðm¿Ƚpró¦ÙŠöæʾ>)‡WOëqT;z7PÈúº,§¶n›qt·;jR* ¾?®EQíxeP;ä]ÎìÜ5ãæíö´v ­ÂÀòQ-Šk§‡‹Yß@—åÙ÷͸qý}R;VÐÿú Åõó/£¥¬o Ë‚Êü¯Ç(n\mLxú¤ô-þ~JÚáb}ÌŒä]PYðôèTP™ßLfärcÜŒä]пtPMžþù—QO€´‚òÜÞC7®7'ìo Ë +-¯–Ûípöi¤˜õ-¼8A8³s׌›·[Óaõ1tWaðýq-Šj'† +-YßÀ‹„Ó[·I;ÜíÎh€¼+¯ž¶ÛáèÝ€v µpróºG?çÊÚ çŠ#ŸÏêqT=xÓïçZi|ã2Ù‘Çý…ŠȹÒØúEòóŸþ,öùù¤V[ûïŽ,Ù€¼+Ml\6âèq¾âçZqäÓY-Žª‡o_²¾€® +-ÂÉÍëFܼߛ+kR+ }8®EQõèý vÈ· œÞºiDÍÛí™P;ZaàÝQ5i‡“CŬo «‚òìî]#j\oNiÒ úß<5£ÚÙçQíoAyþçC3ª_nL”²¾€(è[üý˜´ÃùÚ˜!È· ²¸ÿ÷å¯{ùt ¨Ìÿ|hFõË CoAÿë?OI;œ}õòH/(ÏîÞ5¢ÆõæTd} ÝTX>¬FQõdu¸˜õ-¼@A8½u“´ÃíöŒvÈ·ÂЇãv;½,d} /PNm^×£æýÙ²vȵâȧÓZÔ|:xûJ;ÐÒø׋¤~-T´@®•ÆÖΓvxü½ÔçãÐÒèKÐJ—õ¨ùðs¾âãÐâðÇÓ¤ž— +-Yß@áÔæu#jÜíΖµ( ®U›ÍêÑÊ vȳ œÙ¾mDõ›­éP;ÐÂÀÛƒ§¤N>³¾€. +-Ês{wfíêÛd˜õ-¼HAßÒþC£Y=[+e} ]T~µþÅú¸‡@'‚ÊüÞ}£Y»Ø˜0%yô/ý~LÚáìó¨‡@'‚òìÎm½Y¿Úœ +-ƒ¬ { +-ËOÍæÓñêp1ë[x‘‚púûuÒ7;3eícÅ¡•ãv;ü‡ý:MJdÛÂ0Ù‹ ""%–R¥–µ„²Wé³Ù;ÉùOåfÝ8gÄ2Þgï¯oÅúhätÕ-€Íd•~e´pŸj¿¤˜Q¸ì‹háw¾gØ{ÀRÌâÕ0¾%Þk}‹[)ößÞ¿9ì=`)Fá²ß¿s²­«n¬UºËh1:´ùK1v~ö‚( +-º?rü^šUù3 £pzw`ñ;–¢gOÞý(ŸyCu `m4»ú0_DrÜ*ó;–£eê¯Þ"ƒæž©º°6šóí%ž{9¼.2÷€åhNíÉÉèfŸcé¥e¾wüE$—æ°Í®ÞÏÂ(œ´Ë–¦:°.z®ñDQÐ;Ϫ[J³ÊíIü;Ìî«6¿¤–‘?ÿüû;|œfuÕ-€Meîߌd´pŸk¿¤–YhD´ðߎ3¬=`Iæ޿פÎ5€ô2÷o†2Z¸Ï5‡µ,ÉÈ_|Š( +->N³ºêÀšhV¹= £pv_µùKÒs`½³Cu `M4»z? #9i•-~À’´Ìñ›·XƒË¿¤•æÔžÝp!†×ESu `cý='sÎ ¤›–©¿yá"è_ Õ-€¥Ù÷S¹ãVÙRÝX=Ûøð ¿w¶ÃïXšUnãßaz`kª[ëaäÏ{Aü;¼ŸfuÕ-€Íe¯‡bΟk¿¤”Yh‚Eè½Ö3l=`iFá²ÿ÷ž¼sO ­Ìý›¡XÈùSÍaëK3vκ~zאַº°V¥=¡˜ü©ØªSLß>íxaèwÏó†êÀZhöáÃL†bô»d©nl0mëèe.àß,˜ª[kOýóß©ü³ÇÔ–§Ù‡³ø  oö-Õ-€µÐ·O:^ú½‹¼¡º°É¬J{,B1ùSáw€t2r??âßÁ{oätÕ-€Mfíß ƒPÎMu `ŒÝËO?”îëq†¥¬À,4ûñïà¾Ô·¸(Jfñú+^úùSÍaé+0òç]? ½N#««n¬ƒUnE(¦w¿`zö´ã…¡ß=Ϫ[k ÙÕ‡© ƒÑmÉRÝØhÚVýÅOJ¿¹gªn¬¶uô2‡~ðCX‰f>Lã“2ü]²T·Ö@ß>éxaè÷.ò†êÀf³Êí±ÅäÏ¥©n$ÏØ9ëz¡ôÞ9]u `³™Åë/_ŠÙcÍáw€2 —Ÿ¾”ó×ã ;X‰QøõéIÁM€”²öo¾|)¦5‡¬ÄØùùîJé¾ÿÈéª[ɳ*íq ƒq»b©Nl8}ûû«+¤×ûµk¨n$NsjS!ý¯›}~Àj4çÛÓ,>*ƒ«¢©º8-sü2Òû¼,0ó€ÕhöÁÝDÈ`Ô*[ª[‰ÓswWJ÷ã玡º°é¬Òí0bòpèhª[I3v/z^ü;¼lëª[›ÎÜkö})æ/õ ¿¤ŽY¼Ä+?{ú¶ÅÊVdäϺž”n§‘ÕU·’f•[£@ŠÉ]Õæw¬HÏž¾¹RzÝ‹¼¡º0Í®>L„ †·%Ku `ãi[GÏ3!ýÁUÑTÝH˜–©¿Ìã‘ï7÷yÀª4»z72µÊ–ê@Âôl£ãJéuÏò†êÀæ³J·Ã@ŠÉCÕÖT·’eä/ºž”îÛiVWÝØ|æ^³ïK1©gø eÌâÕ ÞøÙóÑX™‘?ëzRºFVWÝH–Un)&wU›ß°2={úæJéu/ò†ê@¢4çða"d0¼-Yª[) m=Í„ôWESu QZ¦þ2'¾ßÜcâ«ÓìêÝ$Á¨U¶T·¥çW÷ãlÇPÝH«ôûËÁäþÐÑT·’dìþêyBÌ_¿oëª[i`î5?=Ìžë~H³x5ˆ~úXsXx@ŒŸ®óN#§«n$ɪ´F¾ðGíŠÍïH€¾ýýu¯÷k×TÝHæÔ¦ð7û–ê@*ħåñÿ§åšÓ©¢o¿Îáõ~횪[© Y•öÈþ¨]±5Õ1€äè;?ÞçA0ï4rºê@:˜Åë¾ø“Ço¿¤ˆQ¸ì¹A0}®gØw@"ŒÝ‹î<f¯'Ûºê@r¬Òï//ðÇwU‡ß={ú6 ‚ùûYÞPÝHŒfWïÆ~à}ÝþýºmJ[ ã0>»!„§j´¢µbµE«ÅZñ"(1$»Ù|ÿOsì™9ç½’Î;×ï\¯îÿÜ¡o»àQùt¿4¹ž}ß(ÙnæÏyO8ï€"‰òÇë“g‹ŸÛ¾í@adýËCšçjròÁ³Ýp…öçYnâ›N l·ŠâµNŸtnÒ߇5i»à +-¯ýïº$Ã*¿8£´õcžåfy»pÝ‘ã±Ês5>nHÛ-€‚ˆòÇë“gÑÕ¶o»à Q=&&×Ó³¶g»PQÙ¿[¾÷ç‹Í’í€3D°;ˆMž-.Cßv   ²Þ¥y®¿5=Û-wøáå"ËM<Ø „í@1¼æ·G•çé¨[—¶[îðÚgS›dxPåwG”6/ž_oûòn/ච+-#Çc•çj|ܶ[…þÎU”åYtµãó; +-#ªÃÄäzzÖöl· +-!*ûwË×Óþ|±Y²Ýpˆv±É³ÅeèÛnBÖÒ}L³l9ü\cg`Í•¶~<«L¿ÜìU„í€{dãh”dY2þÚôl·V"ʻבÎÔóeèÛn8HTöoc¥ÓóÍ’íÀJdõàþÏI:ksÒÅå«…ÊÔâj§,lÇVá}8~H²,}iHÛ-•6ϧi¦ãÛý +-¿¬µÒÆ÷§?ýîS•‹ø ¼æÉC’éåè¨!m·VQÞù9W™Z\í”ù¬}¾µNOÛ%Û-€ˆÊþí‹Òéô|“ƒøD°ûkñ:5Ï—Û¾íÀ +-dãh´ÔzùpÒôl·Üäo]LS­¢Á^ l·Þ¯Ô>}L´~¹ÿ\“¶[nòš_ÇK­ãa·ÎÖÀóÃþsªÕâ×n l·Ü$k‡ÃXëdÒky¶[ï&‚Î R:^lù¶[Žúolfý±€õ%ëÝa¬u2þÖôl·\å‡ýYªU4èÂv ོVo’hkÒv ÀUÿ¯M·ÎÚÀÚòÃþ,Õ*ta»à*Yïc­“I¯åÙn¼“:ƒHétÖ}Û-g17àYïc­“I¯åÙn¸Ëû³T«hÐ „íÀûx­Þ$Ñ:vëÒv À]ì ¬??ìÏR­¢A'¶[î’õî0Ö:™ôZžíÀ»ˆ 3ˆ”NgýзÝpƒkOÖ»ÃXëdÒky¶[.óÃþ,Õ*ta»ð^«7I´Ž‡Ýº´Ýp‹ëÎû³T«hÐ „í€ËdýpkLz-Ïv àDÐDJ§³~èÛn8íÏä,˜X_²ÞÆZ'“^˳Ýp›þ˜¥ZEƒ½Š°Ýx»R»7YjëÒv Àm^ëÛx©Tüû¨ÁæÀ*o÷g‰J×@Øn¸MÖï_”ZNNÛ%Û-€7•ýÁ"UÉÓù–o»à8ìþš¿ŽÎìr»l»ðf²qô;V*~8iz¶[®ó·ÎŸ•.nö«Âv à­Jg“¥RÑÝAMÚn¸Îkž<ÄJÅ£/<Û-€7åŸÏ‰JçWa;à:Y;¸‹”Z>~ß(Ùn¼‘¬~ºRõ{u·•8²‡a|U‚DQl?i¥EQù†¤ªÂý_ÏîžµöÁtk‹³ÿ{¦žßÁ+Ÿ½fyž Ï+¾t À …Û©ÉmòÔˆ”t `uAõj¬ó<é¯{Ò-7ø•óA–çY¿µáK·V¦Â½ÎÜæ6îÔ‹J:à/:zJln&7ÛéÀʼõã^’çzr] ¤[ŽPáÞýÜä6þ¶_TÒ1€Uù•óA–çYÿ²/ÝpE°u9Òyž>7Kžt `U…Z{jr»x<\SÒ-Wx¥Ó—4Ïõèr+n¬H­v67³¯µ‚t ÀªxððçýÜí†Ò-€yå³×4ÏõðbÓ—n¸£°s;5¹Mž‘’n¬&¨^už'½“uOºà¿r>Èò<ë·6|éÀJT±Þ‰mnçz¨¤cî𢣧Äæzr»]n¬Ä[?yþ1Ýã«j Ýpˆ +-÷îgÆšøa¿¨¤c«ð7¿ 3kÓ—³²'ÝpI°uùã’—SþÂݯSmMüp°¦¤[.ñJÍçÄÚltU ¤[+PQãqa¬žÜî¤[NQÅzgn¬™Ýï…J:ð1£õšZ›ö[¾t À-AõzœY»è¯{Ò-€vn&ÚšÅãQ¤¤[nñËg¯©µÙàËf ÝøZ;xˆÕ³»ÝPºàµvØýqBÓ¯œüxåÓ—ÔÚlx±H·\SعhkHI·>T¯Æ™µIïdÝ“n¸Æ¯´ú©µi¿µáK·> ŠõÎÜX3ïÔC%pŠŽÆêÉíNAºð¯Ô|N¬ÍFWÕ@ºàžp÷nª­‰×”t à÷‚­ËafmòrZö¤[î 6/†©5éëe_ºð[*Ü»Ÿikæßö‹J:àoýøiaL6º®Ò-€ßúïdo¶™lÀÿž +-÷î¦ÚèYg¿¨¤c¿l~¤Æ$/geOºà¢`ëbøý‰ÏÍOÿ×ÂݯÓÌèùÃÁš’n¸È+5{ c²ÑU5nü†Š±6Ùøf§ Ýp’*Ö;3mô¬S/*éÀûüJ«Ÿ“¼¶6|逛‚êÕèû-ž›%Oºð¾°ÖždFÇÝF¤¤[nòJÍç…1éè²H·Þ¥¢F7Ö&›´k¡t ÀQªXï̴ѳûzQIÇÞãWZýĘ¤ßªøÒ-WÕ«QfÌ¢w²îI·ÞÖÚ“Ìè¸Ûˆ”t ÀU^©ùœ“.¶éÀ;TÔèÆÚd“v-”n8K÷¿ÍµÑÓ»½PIÇÞæWZýĘ¤ßªøÒ-wÛ7ã̘øéxÝ“n¼-¬µ'™Ñq·)逻¼òÙKbL:¸Ø ¤[oRQ£k“MÚµPºà0µvð0×FOïöB%x‹_iõc’~«âK·\VؾgÆÄOÇëžt à-a­=ÉŒŽ»HI·\æ—Ï^cÒÁÅV ÝxƒŠÝX›lÒ®…Ò-§©µƒ‡ù÷KšÝ׋J:ð+¿Òê'Æ$ýVÅ—n¸­°}=J^ôš%Oºð«°ÖždFÇÝF¤¤[nóË§Ï ­Óáe5nüBEî\ëlÜ®…Ò-Ç©bý~šélz_/*éÀÏüJë5Ñ:ymU|é€ë‚êå0Õ:î5Kžt àga­=δžw‘’n¸Î+5{±ÖÉð²H·~âEî\ëtÜ®…Ò-ç©bý~šélz¿_TÒ1€¿ò+çýDëäµUñ¥[ª—ƒDgqï´ìI·þ*ÜmSÍ‘’nÀ+<ͳ,^oÒ-ÀØ«³…ı0ŠÂuN"ˆ¢…ŠŠ(ŠÈd ÃÉÉû¿Qc×du×`]tÿVg}O°®öð]n?]n{Ò-€ôÆñ8þk ®t Ï +-;×K›Ùè®UÒÒ-€/Ü­ÞÂdYòØ©°Ï€7ÁÙìÎÖßd¦g›Žt à3åïÝ®lfW·{¾’Žà™.ÞGY–×Í‚t à3]é<&Yf½-Wº€ +-Í~fY4j—µt à¯qù´^çx|¼Á:Þ§z:5Yfæç5Gºð‘.Ü…6³ËÁ®¯¤cø@}¼§Õ ÷o†S=š,3³nÍ‘nà¯qùd27´t àƒB³¤™Fí2Û x3t¥óÛÌ,zuWºð]n"›¥A¿Ynà3åïݬR›®n÷‹J:ðÌ©ug‰µÉätÓ‘nà wëüù¡âÇ“*oòwAjÓpØ*ié¾Ðåö(²Ö<]m¤[kzãøáy˜ Oº€Ta§›†w‡%-x÷έ÷扵ñø}Å‘nà%gót²þ¨dÚ­ñQ OnW©M—7{¾’Žà%]j ŸO*ìrR Ï©ž<ÆÖ&³ó-Wº€¯y‹…±6z8ÞÐÒ-€Bóêéy•Gí2« xcœÊûqlm2ïÕ]éÈ=]n߇֚ ¿SPÒ1|Mù{7ËÔ¦«áAQKÇ@Þ¹[ç³ÄÚdrºéH·ðw_~ªÊO€,åïÝ,S›®†­’–Žàït¹= +-­5OýfAIÇ@¾9•Î8^Oòü¢áI·ðªÐì?kÃQ»¬¥c ß¼íËçEŽŽ+,2à rª§“ØÚdöÇ–+ݹ¦K­»0µi0Øõ•t ÿ¤‹·«õU-oö‹\rjgÓÄÚdÚ­9Ò-|‹[ïÍ×_?vª|ÈQþîuÚ4¼;,ié¾Eo?DÖš§«fAIÇ@~éÊÇ9¾Üö¤[ø&åï\Ʀá}»¬¥c ¿¼ÆÅ|½Æñ¸Sq¤[ø6§v6‰­Mfç[®t ä–.µ†«Ôšå`ÏWÒ1|Û‡»JÍò†»1ÎæÙ$NÓxÖ­¹Ò-|×èÍ“4;GºrJù;×IÓðþ°¤¥cø½q< +-Ó4yºÜö”t äÓË)–nà»”¿s$© ïÛ%-ùä5zó$M£q§âH·ð}ÎæÙ$NÓxv^s¥[ —t©5\š4 {¾’Žàû>^–YÞpY ©M¢4¦Ýš+ÝÀxõÞ,6&wªŽt äòw¯ƒÄ˜å°UÒÒ1üˆÞ8­Œ‰WÍ‚’Ž€üq*ïÂõ Ï/žt ?¤ +-Íþ"6fuß.kéÈå5.æëÞWé~Ì©ž©:Ò-Êß±I–ÃVIKÇð:º|t¿2&^ôw|%yáT:ãp=¾ó^Ãc|¿ Uh^-bc‡㊖Ž€œø´½«ÑÑÛ øm8•Î84&ž_4<%ù ËG÷«õô.úÍÓ øm(oÄ&YÝ–µt äƒWïÍbcÂñIÕ‘nàõÜÚÙ$4&šžo¹Ò- ºÔ.“ƒ}_KÇðzë » ž/ìæ È…ÀÀ­u'‘1Ѥ[s¥[øný|%IøxºÉ‡À¿O÷Oq’ÃVIKÇð+tùp¸Œ“xq½ë+éøÿsª'ãU’DÓ?êžt ¿DýÉ~½.%ŽEa®½I€ +-F±‰iÝÀýßÓ¤gæ„P» Þç +-Þ_ë«åŸ?~ÙÍF/oO®càè‰Ö𥨮®z»îJ×1|ìݼëÍÆæOMá:ŽGpÀDkø\ØÍF½]w¥ë8rÂ?üªn®^Þö®cø®ÆÉÝRo6öë!ô…ë8n²óóªNnñ2lqrG¶~LWv³V¯qGºŽ€£&ü³É§ÝlLúû´á:€ïóúIf6û1x®[à¨ÉàjQ®7ëÕ|Ô–®cø>DóU5eå" +-˜2Ø#opÿa6óqß÷\·° o0þ°Õ–elì“lGóÕz³.WtÀ6d'~-«1[ÍFmÆ öÆ;ýéÍÆ|NÎ|×-lEøáç٬uúë´á:Ž–lÿ˜v³._v¤ë¶#»×ÊõÚÏÖpǪqr·Tëµù|}Ž-à@‰æÅã—Y¯Õûm¯á:Ž”h ŸóêÖ–®»Òu ÛjônÞÔzm¾ž.šÂu §Fïö¿SûÈ©0Ñ>åf½Vo7½†ë8J¢yñôÅ¥¾ÆÉÝ»²kóõxÑ®càÉÞÍÛßC›?[ZÀ“­Ë—ܬmùú³+]ÇÀþùÃgugÕûÝIÃu »ðN-•µúcúÂu Ùýùº²Öä/—mé:€]Èöin¬Y-â£u~8ùÐÖªå¯SÏu »ñú¿Se­Î&¡/\ÇÀ±‘x±2ÖäÓQ[ºŽ`72ˆfE5k«ùUÀ¬@½„6δµ*Múžëvå ’TY«Óû'\ÇÀq‘A4/Œ5Å, +-¤ëvU ÛŒa€}Þ I•µ*MžëvV-Û}ªÿ_6Ẏ‰ ¢Ya¬)fQ ]Ç°;\ÍWLÔNxƒ$UÖêô~à ×5ìNøá$ÓÖª4aÛ F2ˆf…±f5¿ +-¤ëê ;ñbU[1‹7¨ðIª¬ÕÙ$ô…ëê üp’ikUš <Ö j"ƒhVkV‹¸#]ÇPÙ«jÞŠY0oPá ’TY«³Iè ×5ÔCøá$ÓÖª4xìÔBѬ0Ö¬qWºŽ .²/VÕÀ³(`à Â$©²Vg“Юk¨‹ðÃI¦­Ui2ðX8¨ ¢Ya¬Y-â®t@}d7^¬ª‰+fQÀÄÀî„7HRe­Î&¡/\×Pᇓ¬Ú8•&€É šÆšÕ"îJ×1ÔIvãÅß‘ËgQÀÈÀ®„×ORe­Ê&¡/\×P'á‡ãLS¦Ißcå`G2Msmt±ˆ»Òu õ’xQT3—OG3»^?Y–ƨlúÂu õ~8Δ1å2é{ììD£i®.æqGºŽ n²Ï‹jèòé(`è`Âë'ËÒ•C_¸® nÂÇ™2¦\&}¥€È`4͵ÑÅ<îH×1ÔOvâyQM]>LlOxýdY£²qè ×5ÔOøá8SÆ”Ëdà±u°5D³\]ÌãŽtÀ>ÈN_¶¥ëöK¶/Ÿ?J­‹?·'Ï|‹l Ÿþ»¡wÜPÀÑÞÉíŸBëòãù²-]×ÀA©NèÝÛ¿'ôiØâ„Žžl ³RëâíîÔ®kàÈöåóg©UñzÓk¸Ž`ÿ½ë×Biõõ2 +-¤ë8 Âëÿz_i]fMẀýÍóÉ?ì×ÛvÚJ„át7’8›ƒÁƒ1Æ›óA€Ô­–ßÿ­Fñd2Ù³“L®híÅÿ=A]U­:ÙäðÜðØ>øc²t¿ˆÓTo†Uå: — *ƒµÎÆ/^Þ—¥ë0ð!¼æ$L>>ìñµí ×i¸á·¦_×/ _šëH•û«8ýHõú¡¢\‡à2>çϦ6^õ™?øCÂoMIš&áKÓ®ÓpÂkLŸû7mûìüU¬µMm´¼/K×a¸Yê-¢lãÍ°ª\‡€áßÎŽIššýøÆ®Óp)¢p3Þ›4MN³Û@ºNÿ¢P{Üj›&çù]‘â\Y쾟“ÔêݨV®Ó@þ}ëÍ4ëÍ:½ ¸&¢Pí´M“óü®(]§€Ü…›ñÞ¤irzëÔ&àªÈàvvJÒÔìÇ7žpòN–z‹È¦Vo†Uå: —¥ªÃMœÍ`´¼/K×a ç„ל„&M“ãkÛ®ÓpYÂoOÃ$MMøÒòØAø-Ué¯b›ÚxõPQ®Ãpi߇p=`à·„ßž†Iššð¥é ×i¸4á5&“¦Éqv별ðkBU‡›Ø¦6ZÞ—¥ë4\ž,õçl +-ãícMqà—dÐy;%©5ûñG_®(ÔŸ¶ÚÚäôÖ-J×i ·þ[—ïÔ%àJÉ 3;kõn|S®Ó@^ÉRo~N¬75E[®’PÕá:Nlr^ôJÒuÈ)á5ŸÚZ¾¶}®àJ ¿5 µú0i±‡ðsªü°Œ›D«‡ŠrWT¹ÿmUÅy€Ÿ~û54ÖêäéÑ”€«%¼Æó^[kŽ³N ]§€ªö¸‰›œ½E ¸b²t7?e“oGõ‚pòG»o'c­Þ=Ñ“€«& +-õÑ6ÎÎÃi~W’®Ó@î¯1ÞikÍé­P“€«&ƒÎìh¬Õ‡ç¦'\§€¼QåþâœØ$Þ «Š–\5¡ªƒU”Íb´|¨(×i g„ßš†ÆZN[>×på²]œô×]|mì"üH¨êp'6‰–ý²r×d©·8gÃokÎü@·“±VïŸ ¸z¢PÚêÄšÓû]IºN9"¼›§¶$ßÈ 3;kõþ¹á ×i ?T¹¿8'6‰7µýÀ¡ªƒu”c´ì—•ë4ÂoMÆZNÛ×€/Ÿë89è¯ëøÊ:ÀUnâÄ&Ѳ_V®Ó²Ô[œ³yŒ7£zóŸd±ûv26Ñûç†G7ðIêO[Xsšß•¤ë4 »ï>«ñjà;tfG“$z?izÂuÈU¾_œ³fŒ6µÍÀ7BU«È$æ¼z¨(&¾ˆ õrÐI¢Óv@/ðð›“}œmdøÚ ¤ë4àœ(ÔבIÌyÑ/+×iÈYêÍOÙHÆ›§›‚p\“¥»÷£ÎZq7¾ñhE~ +-õ§Mœ‡Ó¼W’®Ó€cÂk<ï²RÔÇ·n‘Rà/dÐy ubâý¤å ×iÀ)¡*˳IÌy5¬*:€¿ø÷Pj“ å ÆP¸n2¸²FŒ÷“–O#ð?„×ï¢l)ÃY·(]§‡„Wm²BÔÇ÷^™Bàod©ûjc¢í¸á ×iÀUîÍÚèh=ªèCþFjÃÕ9ËÓ¢_QŒ%€«%üÖË>6&>Loé: yÄZ@FjÃÕY}Zô+J¸Ž@.©ro~Ìæ2Zês àJÉR÷-ÔÆDÛqƒ.àç„W­£ì<ç½²rœ~óy‡³nQºN@^Éàvzˆ³ÅÜ¿´á: 8 TõayÒFŸWƒš¢ ø¡*ýÅçd®ë&À’ÅÎ,Œ‰w“–OðKÂkŒ·QvŽï½’t.ŽàOÉbwÆÆD»IÓ®ÓÀ… Ué/NÙuˆÖõ-ÀoU,¿Îæi5¨)fÀ•‘Áíôï_ÚÀo ¿ù¼´‰ÃY·$]§€‹^}´>k£óû²r€¼“¥î,ŒµŽ¶ÏM_¸N$Tåþý˜5ày=ª{4 ÿ‡Pµáêëø¸TÓ àŠÈàöeií§·t€ü~k²ûº‡Y·Èv¸«ÖçXÇÇyÿ_ì××v"I„á“Y– ¦ ›2iàýl‹™3³}³;ÓÝHÕUú¿'ˆ«ˆuG€µþ:ËÇÓœ_Û>ã à«N}¸Q·ö;Í<Ú€A¸Í—ƒÎçSí¾5æÀ!ƒî"±×«M–½P€rþÓ<¾ígúÎ~ø*„ךÍåzQÛQÝEÇ $d4Ødù€šÓ¬í1 ¾áÔ‡Eóðƒ„ÛšM>¡j7j8L(€/@ÝEb¯W›,{¡,: å!ƒÎŸš¾?×ØPÕ'¼Öôh.׋ڎêŽ(:å!œúp£ò5§×GŸPußµÞ¬íÑzüᵦG“ϨÚ3 +- âdÐ]$özµÉ²Ê¢ÓP.2è,âÛŽ¦«ç; +- Ú„ךÍåzQÛQÝEÇ \„ 7Y>¤æüöè3¤ªL8õáFÝï4k{4?H¸­—ƒÎ§TíÇ —)Pa2è.{½ÚdÙ eÑi(á?ÍãÛ–¦«ç[ +- º„÷0=šËõ¢¶£º#ŠŽ@ ÉZåcjÎoO>c +- ª„SmÕ­íN³¶GÛð„Û|9è|Nõá¥é2§*J†½eb¯W›,{¡,: å$ü§ylòó­û‘ÃyPIÂkÏŽ·ªSÛQªà'ÉZÚËÅœç@>€p£m–7>N<®?I¸ÍñNÙ‹U‡I‹IPE²Ö{OÌåbâE7E§ ¼„ÿøzÒùyÈ6úÃyP9×\ºDÔ¿@†½eb./º¡,: Ü™p›/;•_uxiy\~p£m–Ϫ>NÛÌ*€ŠNÔ_§ör1ç·'ŸŽà—¯==êü­À ¯5ÙgùÌfû—–ÇÌ(9Yë-cm­Ž—½š,: Õ"ƒÎÛIçç!Ý ëç@© ÿñõ¨þ¨´•À 'ê¿ÇÚZ/º¡,:üá¶Æ»,¿ê0yð¸Ü™p߶émj³¶ÏÔ(/áDƒub¬Õ§y'EÇ z„מT~²Ý¸ér”– »‹³¶ÖÄ«~äPgÜŸ ;ó?Ö6YX[¥%üö쨌5éö[Ó¥Ìø‰«ÄX«Ï‹n(‹Ž?E¸Íñ.˯ƒ:LÛ>×€ñßÁ=Î\å$œh°NŒµú¼è†²è8T•ðÛ³ƒÊÏC¶7]΀’awqÖy‘%ëAäPd|”|sçgeŒŽW}6@ ¿=;ä5fÒí¸éRc|áDƒU¬Q§y7”EÇ€$Üæx›æ-–fmŸëÀúkv5³  „„õWq~ÔiÞ eÑq¨6á·g‡,?évÜt9JE†ÝùI£ãU?r¨0>ÖwË;`y”Šðg‡LnÇM—àƒ 'ê¯bmŒ:Í»¡,:ükÂk·i~²Ã¬ísøpÂmþ=¾ã  ,„[®cmŒ:Í»¡,:_ðÛÓC–Ÿ‡t÷Òò8ÊAÈZoqVÆèø½9”ŸA†Ýù鶿ÉzØpÙ_¥ ƒ§×c¦óêÚ|kR]|áDý÷³6F—Ï5É(á=Lvi~²ýäÁ§¸ø$ÂmŒ6I>ÁêøúÈ¢ãÀ?ºõÖ:ï-£Žoz €Ï#¼‡É>ÍÏCº›<ø¢è8ð„S{^ž•Öê¼|Žj €Ï#ƒ§×C–¯p²5]VÀoN·ã­´âõ°Ai𙄬=/N·>¿÷#‡ð[~{ºO•Véö¥åQY|*á6†«XiçÝPþáµÆ›$¿ÙaöÐX|²ÛooSœî§(:üOÂm Vg¥uvZôj’Âà³ ÿqºOóól_Z[ àwõöësÇqô£0êc”Dåœ#(ŠY{ÿ—fR=½^6`̨›”ú•¿éY|*J"FkyÉ'9Küu×d’TèÉ1,Ò!ØkJʾ€KYݵŸäñ_-ƒMP5¢ÕF‡ ½ß³ð8ih¼)J#Ê쫦ŽÎ*¨eõ··4»gñyÞ4xR”H´úØ ³<Bw\×Øe•"fguMòtH¼eÇäEP*Ñé)Êã! ö[±Ì*DŒÖâçéú›ž¥Ê>€ŸîïiN˜fÕ"º3=EÙýžûaMIÙ÷ðã)³»ö“<boÙ1ÙfU!Z}ä†y:dáqÒÐxO”OÙýÝ-Í×9>Ï[ë  DÙƒ]P<§èü'1Z‹s”fYrÛ jÄ€²||£ìãÙŠo@õ(³³¼ÄE<\7=K•}€Jtgz ó_”‡Q]#¨"eu××<ÒØ[uLâ@DoŒÝ H‡ð8i褕$Êlý$‡è²h,6€ï'Zm¸¿%y:DçY‹G@U‰VÿµÙáiÖd³|;Qvë'iž—eÛä PY¢7&nñàNÕðÍ”Õ[_ã<boݵTÙç€ÿMôæìæñ‡Q]#|+evV^‘‰¿éÛŠ@•‰ÑZœ£"n»AxðÄhÿý†| ªN™•§Yû›¾­˜nßFŒæìéÆuÒ€ÊSVos}ă·îZªìsü¢;·H‡4Æýº0îžF™íù)x¤Ã~ÜÐù.¼Ó¡eòUx¢ÕÛk”ž"O‡ñÁ/žJpœ·MUö=àyòxî;ž‰èépZ¼Ñãýg<™N±öq§yÛ$üÑêÃÝÇ39/»¶F:ð~òx˜ò½£ÛqÖ"ü–<[/ŒcÒ€7&FsêÞñà~K‘›"¢ð²"x[ò/öëuKQ$ £ðŠà$¢ ¢x@TPÎ`æÜÿÍ `NUfOWç©lKÙÏÄŸ/Ö»5{C<ø†.òóóžÏùÁ%x\R'|Ût˜›¤Œxð oÓaH:ðЈ_F:Ð/Ä€/"èâÀ—ôñà Húˆxði¤ýD<ø$Ò€¾jâÁOˆE:Ð_Rw¶)ñàcHúLâÀÇôšhâÁOˆï#è;©;›˜x𡘤='u{WmD¨Ö|Ÿ¶ñPçǵ­KFðà„:|uõŽÁÕ€ªéî’²nfDqòCaFMhÖâ]Ò!ZÙº¼õƒÀýŠ9ÛÆ]<”ñv: €G&µÑ2ÌÛt¨òp9ÖHð BLü¸èâ! \S%€‡%u{åu›ÙÁiœ;ø! gs,º5‘îçñ<(Ž|›ÔíU”w{";x#MÞúA®@(ƒ‰·éP—ÉÎ5IðR/üjã!V¶N<G¨æ,HÊ.âíÌTHðB-Yu~\;†dTF¨Ãù.­Út(Nþd@:€/jgÅ>íâY< ©¼CÖÝx~\;†äÆÀW Õtƒ¤¬›aQ&ÁÌTÀ‘º½Šò6ª¹ÜõÉŸîüBµæ»ËÈ(À#úxyH/é­CrÕà÷ª9 â¢jã! Ü¡ÊÌ³Ž²æ¤ë2 —c]ÞúEàqe0ñOy·4Òýb¤±4€ûÅA€kÒpÖQÖm,\Ù:[¸WB΂¸hι*’ÀªâÖ/Fêãå!-«º*óãÆ1æp—¤f-vI—ùi;5¹eðÛ Íš·ƒ£jâáäOM•ÁÜ!©½CÚ]rmƒtW Ts¶=åeqàZš¼õ‹|’P gfe›i¸´uÎ\…P“ͱ[E²÷ƬàÎÕœú?Žx1Ò8bp%Bö*L‹vw¤áÚ1¤¸õ“|œÔ,7ˆó&Ê<Ü¡Ê€ë‘úØÛ'm<”ÙÑŸ˜ÀýøËýš +-÷ ®Ih–ÄEÙŒ<Ü¡*oý""ÃY‡é%µcàÊ„jÎüSÖÄCU$ûÅH'€{ÐœîÔ?¾œîÁsºàú„b8ëè²@Òp劸õ“¼Gj–Äys¸eïæ–F:€ƒÔÇËCR4ñPfGjªÄðgÍÕzû—«=ù3®ü[¤fÍwqQ63$×ÒäÙ¯×õ6‘,ŒÂSUœ%„‘„„„Ĺ(@¹ÿëkð!ÓÝ3I'éØÈöz¯`ÿYÏóí¥/ðByÑ©2O¯C}Š<ÅëÞŠ°üí¥¦çáË؇Б,ànÍÁfMÿly$Xð¦„ò¢Sý´ELuŠ<Åî”´Wû\S®·Qçû•-—¾|.B:á±ìÆéy¸õm¶ ,žà énþܪO«àÍI{µÏõx›ɨódíÈ¥/ð?„åÅ纟Bý2öõ)ò¯x{Âò·Yó´IL™F.›¸7Ò^í®zxÌ´+¡#É,A(/:UfœVÉ­o²Ø·X%À=Ò E7N¯ÃmÐ×ýÊ–KŸ>+† pÏ„ò¢SeÆ/S¡}“ž%–> |bÒ^í.í0?cWCG²M€;!­`›5ýí6åiª4ry€% Ë8×f¼Ý¦uRŸ|‹uÜ!u’ëaŽsÐy²väÒ'€Ïn(›cÙ óóз—ÝÊf ËÊÒ—2›lXbé“þ#íõþÚöã4Q]BG²Q€…I+Øfµ™²¼ ¦:Ež"Kp„åÇçÿ®”ßb¥KÒY'¹¦(ÇA‡Ð‘D îƒPn”–Ý0=cß^v+›¡,G(ïïE.}À !u’ëaœ¦Ê ‹Cè*ž`!Ò¶Ym¦oƒ©NžEŽàžHë/k%öY+À"„tÂC®‡)ÆqÐÅ!t$1€û"”¥e7LÏÃØ·×ýÚf°oO(/:Uæ¹ÄËneË¥Oø;!u’ëaœ&ËЕÇÈU<ÀÛÒv—¦Ÿ2¼ ¦:=ø€{$­`›Õf^-£©³m`Ë¥O>¡ÜðPèaŠptqÉëîÓ4\¢´ì‡K¯ó„á¼%aùñ©2Ãm.°¹ì[.}À·é¬÷׶ÇÛ8tUyŠçxOù5äÞ aùñ¹ê†qSg»•-™/ÀÊ‹ÒR÷s{}›'k‡öÀÊÝòöeÀ6®bÀ¯MH;Øfµæòº:Û–\ú&€2m˜Õî놩Î1xmB¹á!oû9»^ÇÈSbé›~€°¼‡´ìúùy0Í5Y;’¼"iù§ê¥¹ËžæÀ»!¤³N®­¦!Óë2}ð-† ðZæàö—fnì»êDpà]‘V°=W]?ŒÃ`êËneKÆ ð*„ò¢´ÐSmãзyºŠÚÀ{"”»9ä­&¦Í9¼!íÕ6«»~J­ïêlØ’ÖÀûò×ESY4À+ÊÝòÖL ¦-Ž‘§è ¼?Âò¢´Ôó¨éM“6.£ø­„´ƒø\é~®¬«/û•#© ¼GB:ëäRw»F—ç8°Ù5Àï#”»I®™3ºL|‹ÂÀ{%­ >•ÚÌÏC×\“ÐULà÷s_gú…Pn˜\ÓOëÆèò–dÝ¿Ás\ÝW¯Ë3q€÷NH;ˆÏ•~Ü7]}IBW±o€KH+ˆÓR›¹,Óä‡ e€÷O(wsÈ[ÓÏG—iX’ü+SVar©»~~ºê¼ l²€öj›UÏ+§¾$¡«X9À¯Ò +-â´ÔfŠª7m~Üx4>¡¼èX´OCG—iX’¥ü"¡Ü0¹ÔÝÔÐwU¶]Ù> !Õ.{Ù:õ% ]ÅÖ~…v§¥6SN½i‹cäQøP„åGiÑ>Í]¦q`KöðÓ„rÃäRwSJCßÕÙ~íø`„rÖûìëâ¹$¡«X<ÀÏÒâS©ÍRoÚ"|K.}Ào'-?J‹öiôèò¶ä{~‚Pî&¹6ÝÑÐwu¶_;ŠˆÀG$”³Þgõóîi®ÉÆe÷?LH;ØžKmæ‚L[¤‘oÉ¥x%Òò£´hÍü=]ž·-ù€"”·9\›nΧïêl¿vù€K(g½ÏêçõÓä‡È³X?À?ÒYmÏ•î§xzÓiä[ré£^•´ü(-Zó8€t•íVŽâ{¾OHË‹yÓÍáôs8kŸPÎzw®´é']“#ß’Œ à;„r×»ìÏÕx–\ú(€7 ,/:äM7ï £«lºŠçø!íà!-^’)ÏÛ•-I|ÓZmÏeû¸„º¦Hã€)|ƒPn˜\jýÔK}=lm×ϱ´å)lI,à3ù:ˆÌÓ :oWßÃì×irÛÌEá4æ˜HŒÄܨì…i€¤ÄØJÅþ,ɤxžô·«î~ 4ÉòV.ÛGYd“…6<¡ÛAZçMtšº"rMQÜP¿dwxû%}™xüðŒ„fºqÑM§m-c¶Î,®Ôñ’²ç‹¨i¤[»C=.Û2:M}•x–Æ46Âp¬•×ÿÑ‘kð?ÀóÒ 'ÊÛé´­£E¶y䚬#@•ƒníÇa^ÿÆ¿_æá¸÷-¿ž™Ð,_ ó¥Æ: lžžÐL/.»éò1d›…<=¡ÛAV˶‘NS_%ž¥1’ðÔ„á„Y#_E™x&¿à_B3ݸè¦Ó¶“Ùæ‘c°“ð¼„nù‡ã0¯_âåeë4°u~ÀjJûëT:ÍÃñÀTÂÓšéÅE7-çrm¹†Æ¸†f\N/Ê2ueâYԞж¿0ÎÛ_8M½ú &åpCh¦—ݹNóØæ‘ËbÂÓº½ÛWÃt.‡y¨ÓÀÖùÿMèÖ:šæ›Ñä‚Õ„'"4ËKÊN.ë/8-²Í#×Ðø?Âp¬çónšúj¿³tvž…ÐL7Ê_€ìËÄç¼Om'/.Z¹\¶S[Äž¥±ð „0œ ­‡­^NópL›røŸ„níöU?¶z˜Ç&\“zÀ÷w=ý…ÓøEBN˜Õã¼.(5¡†: C0¡ð­ Íò⢕çrXdW&åðÿÍt£·5õÕ~gé¬(|_ÛÍçÍ8o7šuó67ð „nùIÙ_ëA¶EâQø®„f8aZ[9¼œæ±ÎBÇÐ8x€_"t;HjLÎcªÉcÏdLáêØw‡ªŸ–íØÙ;ÀïšéFY3ÎÛž:ÍC…ŽÁ Âw#tËOÊN^Ë¡+÷¾¥sè¿CÕƒ­ª‡Óº©¦¾:6õ€oEh–çÍë•Guå”Àoºå'e'Õ®RfÙ•{_í*†¾ ¡™n”5ô¬®Ê¡ÎBÇÔ¸p€ß'„nïU™Vó؉oéL+|B3œ0­ßλÉ#rø§.ój¸™W±G=àñ­§ª^ÎËù´Û"á´þˆÐL7Ê›k=LC“Gž©1±ðÈ„0ìݾì®å »r¿³)€?$tË‹‹vœ¯õPg¡K=àq uÓ~R^nzYd<ŽÁMü¹óÒên–V²´ð ¶rˆ‹K9œ–i¨³Ð1¹g€!„aïU'Ïõ0Ë®:ÔÑVy3N×rhòÈ¥>ŽÐ '8{¹ÜÔƒM=àÁ¨rðT9 —r˜Ç¦ˆ=KçŽ>’ÐL'Ìê×Ñ%»r¿£ðH„nzÑm9´eâSOÕƒûãð¢ð0T9¸aV¿°ìʽ:`Á|¡[^üVÓØÔƒÐÖr8ör^.åP‡ãø4ªü¸hÆiQlY¦AÕƒO=àÞmå^ÊaQåÐ)€O&ÖzHŠf˜æE™§¡¡pç.åÐÉíh·rHCÇäh>™†M=àq\Ëa¼\ìV.åð„¶ÖCÙŽÔîÞÏåPgåðeÖzبܻ÷Ê!¦¾”ª' pׄþN9x–Α|­wëaçP¸B·¼ˆr¸ ?×C[îêw@hªâŒr¸?ÕÃØ–‡À1©üUê0mUu/)€»ñn=„®ÉHÃ_³–ƒŸäª¶£¤îÅÏõÐUiè2ÔðwœË¡h.å0O”Àý¸ÖÃðVÇ4RcMc­á‹­Ç¸ÛÍ _‘r¸'¯ƒmºl¾mPøJB7ßÏXîà~¨z°ýDÕƒ¼Œ6Ù×yB=àëM·Ü0­ºñ¶B—r¸7×zèÏõ°ÌrhŠ}à˜,7|õþ¼(;Þ–C¥Êû¸G[=ÄyÝËëzÚòº–.˜oøTçr½½½q»=Sãôî“ÐtË‹³º_\wL#ÏÒ™pøŒPꮪ®lz½²4¤QÌZ~œ»Q^vÝØÕy²sL]0ìðÇ„¦[^˜Ví /}:öMy\u`ûmøMÛ¸‹ÞÆÝtw¡géëDè¦ãÇù[šªãª‹5M¹-€‡$„n¹Á¡lúq:/<9´Uû¶ÁÂÃ?¦ªÔtƒ}Q÷×rcwä®Àد¯ìÆq(Š¢M1ƒ9ç ÕüçØhKî®è²ÂÙ#àâÃÇ=xp†i{aV³\yræ}Ó+¯ÎBÏ6™yøÆÎrERvÓºé·o{Y¤e,žÀƒSS/ئžÌ‡oª–±-äÔ³˜zøIÆn‹Ñ~^·×¤bthòÈ·MƒçððäÞsü¨h‡åTëÔ×ièÙ&ù€';ÔqÑŽÇrÐ/©J—x†aÚ^˜Õý¼nùp8¬óбp}ø12Aå#J«~ZO ºŒ­zD$(ÀS1v–$e7.çá7uUz6Ëߥވ‹f˜×ÖŸ{•Ÿy$ßÁûx2ÆÎtü(¿^E,\kÇüÓOÇö¬ꦫò ÔÓùê¯À'0 5ÓªŸÖ‹ Ø×YèÛ&2ŒåIÑÊèÜžÍá°E§ïðjž˜ÜŽˆ‹vœ×ÃiŽm™®m A\1v¦ãGy}Ù›«ìÍ4ôx0ÏNŽAÛ ³›1˜G¾cíXƒ8Óo%HÊv\ö—©YÄB½•¯þ<|>cg¹".Úq^‹p¿Œ]•†žm2 ¡Û3É›~~_™Ïà•;Óö¬Y8M‘®mì—'_ˆãGYÕËñ…Öyl‹X¸áðZŒåŠ¸h‡ù-‡ý2õu GŽCÖá Ói$åùq|ÛGz¶I9¼½ìêÆe8t=¬ËØUiè;,ÄWe¦®Ê¦ŸÖ󻘇¦ˆ…kñ,^•±S31—3Q烲_§¡-’À³É‡×cÈáˆ(«eP®û㋘ÇV%/àÅ;Óö¤l‡yÝï߶â2õu‘—±øRt8øaZÝ<†,ò‹·½£¬êF¹o‹q»:ɇ—q Y‘Ó²žÃahUEZ¦Á3À?ÛntE\4ýy6ê|¨òHîÆ»ñÉÉ`Ú~˜\¿€¡­ÒЧpIG/HÊv˜—ýE>´UùùðÄŒ·Û_†Ãa¿.cWg‘P·ÿê/À½1v–ã‡YÕŽózʇeÚ2%žÕ)êî]8L}S$µMÊ‘CÒrE”×ʇóŽ<æCò¹\„ÃõÁ‹$ôüµ&]!×d?-7ù \æäÓP¡èœÃa»õ~¿ÎêÔ¡,E. €ïQù 6es“UoùÀª|p:üPù}8Œ]•E:¸1~„̇mYïòA-Ë<ùðÐäuá Îû.äy]Â?Ã0vj_¦e{™z_Öyxó!É»š¶+"yØ›p¨U8¨.üêÀ£Ùò!ú úºHBß±Lúá¡èpðDœUa‘„~ÙæÃÔ·e =6Y›Á0LËñ‚$¯»qþ <¿ç*öÇŹLC[åqà9–I>Ü9yDÓrE˜M?ÎÇ+^‡WÀï:åCÓŸóá óaž¡p-–çý2 Ór<eU{{?„þœ-¤húq>ÏÏý:}[e‘ðúáÉ»™–«W·Ã| +-y¸eT8—pÀŸ¦óÁS+´çå"–yhë" }fè]ÑÝàx"ʪVßU8´¥,>.€O¢òÁö‚8¯ºaR[t¯§¨Ê‡±oª,<ÇbÞ¶ë‡I^·ç[©nXÕ­Š4òõ©¾ú;ð¼¶M*¢¬lúqÖ›T“ù0 ]]¤¡pmkG?|!u#Ëñƒ8«šnœ.Ž´.úHI(àÓéiêúaRÔz™®çe:}[åIà«~`›~­<¥eÓ Ó|:Ïñ:Y,<Ž€¿GNT¹Pƒ8¯Ú~|?P§¡kÊ,Vý`2Qÿ¦s7õ»³ì×e‘g©‹4ä*øûÔRµõPmºaZ–ÓN=õCtì¦ê§ÛºÁa’«n˜.ºAÞcìÛ*ϱä9¾úSðŠ¶Áêq^ɽ:Ÿöêª÷êÐÖ…êGöÃŽ~ø<ÝP5ª.±u\‘FÂÓ÷Õß +-€&‡«e{"J‹¦&Õë1d?ô²RÙ®mÑŸÀxË·­n0ÉTYxŽE8à¼í× ÎÊm¾ªýªÉ|Póµ.å~õ]ì%ûδÕmºÆ‹¿n?¾ÊÓPw¿wCõƒíúa¬gìm?tu™'¡ðÛܱd—¡sMþï J‹ºíå?ÿñc°i$ÿ7½€û#÷ìβ=&²úÛ~º¦Êåžõ][Zí/Q¿Ù´õŸ³rë†å¦Ê,t§ñ—p§ä°5-µkÓâ8k/úaž½k“PèaK@ü –ãúA”UÓõãG¦ºAöÝ€»wì‡èØç}»è}ÛwMU¤rà?lËÛõE”äåõ]ÿµÌ“PwအúÁ~뇦Æ«;OCßÖežFÄw³!L2™còwNòw^uƒü™îˤð`Žý&yÕ¼ ÞóÞUƒ÷]@Xº ¾ú£ïŠ±eƒó– ò/öò/~˜aYÐ xdª¬­ʺíu?|q(<×Ù‚ùûÏV ¶Ì† ú0ÖíçuM]¨ø’Ý@zàÑmý Gpœ²ëM@4U‘%j;öK„±eƒãÊâŠR•\eƒüg}WWy"“˱MºÏBíaËv|!×p¥âz ¿­á¶.ó4’{ø BGƒ¬Ûñü J²¢j¶Òú—ý:[j À0Z`ð"/’%Ë[`jÞÿ)§I–Á!™ +-YçÜQ€Ô­«ÿ»‘Z§Ã¾Ùn–Ål¾ÒgúH| +-qO¦³b¹©Â.>oÌ⸋ÏÇCÛ\Äß¾ŽS5Lâ·IÕP5»ý±ÿ<¯²áûª\‹Ùcê†ß}xø9R?ä_ÔÄ‹¦ø¦«ûö R1<ÅH‰ÉÐ6õ¶o† ¡Dü\wã†H±Z—Õ¶«ˆãé|>wñüCÿ]\uÈÓ— ¹vM]¥d(B3Ls3Ükø•º†È1Í»Šè3b8O)$ú’Zâ‡zbôŒî©ÏO}.Ä^Ø·MSo«rÓCN†INÍ¿Ñݸ"§³˜‹bµZoÊ*„DÝ´mJ‰Ø]MŒzâÚ?7ÒàJì„\ +-¹b,´»¦Ž¹P®S/¤`˜>>äb ðç*"tÄC숱$bJ¤–¨ª:hbOôIqqLuÑKi0ˆÅNˆ¥P¥Vˆ±k!çÂÐ )|w£H)‘Z¢«‰¡'‚elŠ‹2ÕEVnÆ¿‰ÅNfñQ±úXèrA/Àw×»›Ä¦¸ÈuÑKi0a\ +-b>‹»ïö»O +-ÀìÁÿk#¨ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª°@þ¯ ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªÂù¿6‚ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª +-{p äÿÚªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª*ìÁ!€ ÿ¯½a€¥OÆ +-endstream endobj 41 0 obj [/ICCBased 120 0 R] endobj 119 0 obj <>stream +-ÿÿÿ +-endstream endobj 120 0 obj <>stream +-H‰œ–yTSwÇoÉž•°Ãc [€°5la‘QIBHØADED„ª•2ÖmtFOE.®c­Ö}êÒõ0êè8´׎8GNg¦Óïï÷9÷wïïÝß½÷ó '¥ªµÕ0 Ö ÏJŒÅb¤  +- 2y­.-;!à’ÆK°ZÜ ü‹ž^i½"LÊÀ0ðÿ‰-×é @8(”µrœ;q®ª7èLöœy¥•&†Qëñq¶4±jž½ç|æ9ÚÄ +-V³)gB£0ñiœWו8#©8wÕ©•õ8_Å٥ʨQãüÜ«QÊj@é&»A)/ÇÙgº>'K‚óÈtÕ;\ú” Ó¥$ÕºF½ZUnÀÜå˜(4TŒ%)ë«”ƒ0C&¯”阤Z£“i˜¿óœ8¦Úbx‘ƒE¡ÁÁBÑ;…ú¯›¿P¦ÞÎӓ̹žAü om?çW= +-€x¯Íú·¶Ò-Œ¯Àòæ[›Ëû0ñ¾¾øÎ}ø¦y)7ta¾¾õõõ>j¥ÜÇTÐ7úŸ¿@ï¼ÏÇtÜ›ò`qÊ2™±Ê€™ê&¯®ª6ê±ZL®Ä„?â_øóyxg)Ë”z¥ÈçL­UáíÖ*ÔuµSkÿSeØO4?׸¸c¯¯Ø°.òò· åÒR´ ßÞô-•’2ð5ßáÞüÜÏ ú÷Sá>Ó£V­š‹“då`r£¾n~ÏôY &à+`œ;ÂA4ˆÉ 䀰ÈA9Ð=¨- t°lÃ`;»Á~pŒƒÁ ðGp| ®[`Lƒ‡`<¯ "A ˆ YA+äùCb(Š‡R¡,¨*T2B-Ð +-¨ꇆ¡Ðnè÷ÐQètº}MA ï —0Óal»Á¾°ŽSàx ¬‚kà&¸^Á£ð>ø0|>_ƒ'á‡ð,ÂG!"F$H:Rˆ”!z¤éF‘Qd?r 9‹\A&‘GÈ ”ˆrQ ¢áhš‹ÊÑ´íE‡Ñ]èaô4zBgÐ×Á–àE#H ‹*B=¡‹0HØIøˆp†p0MxJ$ùD1„˜D, V›‰½Ä­ÄÄãÄKÄ»ÄY‰dEò"EÒI2’ÔEÚBÚGúŒt™4MzN¦‘Èþär!YKî ’÷?%_&ß#¿¢°(®”0J:EAi¤ôQÆ(Ç()Ó”WT6U@ æP+¨íÔ!ê~êêmêæD ¥eÒÔ´å´!ÚïhŸÓ¦h/èº']B/¢éëèÒÓ¿¢?a0nŒhF!ÃÀXÇØÍ8ÅøšñÜŒkæc&5S˜µ™˜6»lö˜Iaº2c˜K™MÌAæ!æEæ#…åÆ’°d¬VÖë(ëk–Íe‹Øél »—½‡}Ž}ŸCâ¸qâ9 +-N'çÎ)Î].ÂuæJ¸rî +-î÷ wšGä xR^¯‡÷[ÞoÆœchžgÞ`>bþ‰ù$á»ñ¥ü*~ÿ ÿ:ÿ¥…EŒ…ÒbÅ~‹ËÏ,m,£-•–Ý–,¯Y¾´Â¬â­*­6X[ݱF­=­3­ë­·YŸ±~dó ·‘ÛtÛ´¹i ÛzÚfÙ6Û~`{ÁvÖÎÞ.ÑNg·Åî”Ý#{¾}´}…ý€ý§ö¸‘j‡‡ÏþŠ™c1X6„Æfm“Ž;'_9 œr:œ8Ýq¦:‹ËœœO:ϸ8¸¤¹´¸ìu¹éJq»–»nv=ëúÌMà–ï¶ÊmÜí¾ÀR 4 ö +-n»3Ü£ÜkÜGݯz=Ä•[=¾ô„=ƒ<Ë=GTB(É/ÙSòƒ,]6*›-•–¾W:#—È7Ë*¢ŠÊe¿ò^YDYÙ}U„j£êAyTù`ù#µD=¬þ¶"©b{ųÊôÊ+¬Ê¯: !kJ4Gµm¥ötµ}uCõ%—®K7YV³©fFŸ¢ßY Õ.©=bàá?SŒîÆ•Æ©ºÈº‘ºçõyõ‡Ø Ú† žkï5%4ý¦m–7Ÿlqlio™Z³lG+ÔZÚz²Í¹­³mzyâò]íÔöÊö?uøuôw|¿"űN»ÎåwW&®ÜÛe֥ﺱ*|ÕöÕèjõê‰5k¶¬yÝ­èþ¢Ç¯g°ç‡^yïkEk‡Öþ¸®lÝD_p߶õÄõÚõ×7DmØÕÏîoê¿»1mãál {àûMśΠnßLÝlÜ<9”úO¤[þ˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ +-¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäüå„æ æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿ ÷„óû +-endstream endobj 117 0 obj <>/Filter/FlateDecode/Height 3009/Intent/RelativeColorimetric/Length 104591/Name/X/Subtype/Image/Type/XObject/Width 3004>>stream +-H‰ìÁ€þ¯î +-€Ùƒ ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUa€ü_AUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU…=8òmUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUvë¬;Šë +-Àè‚–Ø`CŒc›Ä ‰38£óÿÿT\}ç[C—  ìýZçôêU§>àuëµìû_À{íõ2]ÏÀ[ð†s]ÉÀµ\½´o¯¥âàÚn:Ó×ñ°Æ äúf½›(ù}¿1x»^¯××ôùAãA/áø°]±Øw×ù5¬-y À‡e}²ïŠõÛ±«å¯ñû~·p#V6û|®÷Ñ}4ãÎŒ™ñå˜_ªxÀûfU´OûB«ãüî*;£~¦ãg#^Áð>ØíÉ>Ýë •~|uKE?Ùñ¿;á÷ýú`…Õ>jö‰`Ÿ¨õ:ÀO§+µ[“=?Ññ㈟lxÀ»dGµ÷ÑÞ'û¨×ûT¯:ü¬qo…faªè»UülÃ/ü¾­ÅjŸ‰ö.Ù›`ok}¢ÑÏk÷Wh&’¾Iù&㻈ï~MÁïû<0XÊöÉho›}TìM®·¥^Jü¢ö`•zcœôMÊ2¾‰ø¶áç +-^Àð«2Ÿímµ×Ñ>nö®Øë\oJ½tøÃâ£+([㤯S¾Ïø.⛆¿bÁïûb|€veû¸Úûf?ÉÍž‹½ôz]ë]¥œ|RùtI=˜·û ¯R¾d|©øñ}ÃÏü|Àïût|@Ve{_ím´§d?k’={]ëM¨Ç”|Öù¼Ñ=Ì[mÔ71_:>g|ñMׄü¦+xýÀÛ6“í›Q¶wÕÞG{jö”ì¹Øs®—V¯3=eùãìÉJe£Mû*çsÉ·ßG|jø˜ð; ~¦ß<oJŸžM·WÕ~8ªö.Ú«fOÉžŠ=õzŽõ*ÔC‚}™=]¥Ì§_¨“>·|êø&ãcÄW _%|,ø㉂_ðû>*ï¥lß”l?JÙÞU{í¥Ù«dÅžz=Çzê!ŸE¿É¾Z¡L§ý:és˧Ž¯2>U|ÓðmŸ†„¯ ~2àõ;oØd·/f{Sí÷Bµçh/Í’ýQHöXì©×s¬—Pþ<øºøíNe6n?¯“>·|êø*ãcŇˆ/ ß'|Sð)àï´¿Yø}߀wß|·änŸÈöPígÛj¿Ÿª=D{Ýì!Ù‡dÅžz=Õzê¡Ã¿‰.³ow)£—i»júÒò1ä«Œ"¾nø.áë‚?i ~!àõ;7cG·¦nÙª=fû¶ÚÏ·Õþ V{í¹ÙC²’={êõëU§‡}W|¿¬šLËuÔ—–%3þYÈøñmÃW ?WðP~ªß÷}rÞASݾi»½Êö»ÛlUûÅPíÅjo¢=7{ì%ØS®—V¯ýeô»â÷‹ªÁ´[G}Žùò1㟇Œß7|“ð}ÁO|ê÷CýÀM™ëöœí‡}¶Ÿ”l/Õþp¨öO†j4T{íÛf¯“={ ö¦Ö«N)þCô‡ÚgÕSiµŽúÒò)äcÇÇŒß5|“ðŸ _ü6àÏG§ +-xýÀuíìö£Ðí!ÛÇÙþ`Èö¡Ú?ÕþÙPí‡jÑþlˆöÔì9ÙK±§^ϱ^B=åø«èOµ?Oi&ÒÚ«¦êsÌç’/_*¾kø:á?¾*ø‡CÁ_ ßüÝðsý.ßXm}·§l?ÌöPíBµ?ª}ˆö§!Ú›fÉ^Š={Sëu§§&ÿ1ùKë¯E÷$oüØf}‰ùò±ãKŇˆo¾Jø/†„¯ +-~ømÁ?è~ÛïÇ¡ßïÄ~?Ôï\Õ­épŸëöm¶ŸÍe{¨öÇ©ÚC´•£ýrˆöÜì!ÙK±§^/±^gzJó¿Uþ¾¬íʾŠù\ò%ãKŧˆß6|›ð]Á ¾ ø{CÀŸÆ€¿þ(üÁB¿ïû³à×fºÛ7SÝ~»}ÈöóÙlo«}ˆö¯C´;D{jöœì¥ØS¯—Z¯J=ÅøOÉ?zÿ¬ôÏòÖOMÓW-ŸC¾©øñUÿþrhø!áÛ‚>|ð÷CÀŸ ¿í÷ãÜï‡u¿ó]¿Ý…ûr·Ÿ…n²ýb6ÛëjÑ~™£ýåíu³‡dÁž{½ÔzÓé9ÍÿÕú÷´njTöUÌç¯3>T|ŠøÔðuÂÏütÀŸ‡€?~ªß7Óý¾ï€ýuûíÔí;º}2Û©ö”í¥Ú‡hÑF{jö6Ùc°ç^¯c½+ôÿtþ» í³¾JùÜñ)ãcÅ· ÿÃÐðuÂOüdÀ‡~ßüÊ~—ï£pߤp? áÞuûí¥Û§³ý—jOÙªý»Píu´¿¢=4{(ö”ì9ØK­·©ž{üçÎÿô³£¨¯R>w|WñmÃ× ÿrHøQÁoþiðÛ~?ÙïG]¿ßîû}ß û1îËÝ>dûÅí¡Ûs¶?©²ýÿìÖ×BÉ…ácd%@™¤PÎI$ƒ=öœóþ¯sö®êPÕ]-5Æ1fý×ër]|BíÛmµ÷Yí*Ú¥Ù=d·Á®pÝCu䆾ø2­ü¨×(ï8^Q¼…xÅð*áYð]MðàËÀ“ß%àƒü¾ãøÝæ{|G!„zï™ÜnÃ}[À]¸}Ow{BºØÎnb»Wí©v/Ú¥Ù¥Øol±+^×±nôùÓK3»^§¼ëxUñÒð ÅðáGLx[ðàë +-àóðäw¼ð{Êä÷]ÛïQÅïà;B!„ÐûÍwËíQáöÇíî^·Ÿ°Û‰íÌö¢Ãö†Ëv©ö¾«ö)«Ýhv›ì.Øu® þlî«¡€©ÁóäuÅÛˆw ¯ž?6^|É<ùO~Ïšü¾ïø}[ú|G!„zÏ­€û¶€û.ÃÝu;ÃÝãö3v{>Ïl/•+f{]²Ôn±]UûLª]E»Çì.Ù5¯¬nòù·­q½ò&ÅßKÄßꆄ·o|Ó|™_(ä/ðä÷“@¿ï±ßw„ß¾{ý¾é#!„B¡ßÛj¸ï0Ü÷$Ü·ûÜ~a¹½\®T«f¶ÛjŸÚj÷ ]5»Kv ì¬û@þ׋[AzãÄ?:ˆ· / Bðà/ðµZµÂ€/ ù<ûýÌèwæ»ðû.û]òÝñ;øŽB!ôNòÀ=bÁ=jÃ}—áÎng¸»½P(–JåJ¥Z«Õ f{Ëf;©Ýa»Aí.Ú f×ÄnÒºAâß_ÜjÎ{¯(Þ1| áYðÁ€o2àëõZµêúýBó{Rúø.üÎ|ß³ø¾ ¾#„B½§ pÿ(á¾mÁ}OÂÜÎp'·'Ý^­ÖêõÆå%³½m`»TûÜRû­­ví³kb7k=ã?BŠó>Æ+ˆ× oþ^ÞüÂ'x ð]|‹ßhÔkµj¥R.•Š…‚í÷\.›±üN|g¿3ß…ß™ï;à;B!„лi%Üw$Ü÷-¸“ÛîÉd*ö¹½ì¸½Énït˜í}›í¤v‹í fû ³]U»vÙ=däz8¢ÿíô3¢70Þhx?á-Á/Yð&À÷ðmüåe£^÷øýÔö{*•L°ß‰ïÂï’ï»à;B!„Ðû(Ü…ÛîäöD2•Jg2Ù\Îàö†p{»Ýév™í?Û—Ìö[f»ªöG[íŽÙŸU²žç¯k佈W ¯^ü þ†¿°o~Ä€ï3à;ÅïUÇïçä÷““\6›I§SÉ$óýnó}|G!„úó[ ÷]îäv†{2™J§3Ù,¹ý4Øí=vûpÈlŸøÙ~Çl×Ôn£ýÉ1ûWÝì+ÄþÿWë5”÷#^5¼CxŸàïYð·,xüÜü˜?`Àw»v»ÕlJ¿W¤ßóä÷3ò{.—ÍdÒ©T2Á~'¾Ç‰ïÂïf¾ßB!„þˆÖÁ}O…;¹=‘L¥Ò™L6Gp?;?—n/¹noµÚáöÁ`81Û§~¶ß3Ûýj¶ÕþMC{ÙÃêü5…t|€áÂûÿÀ‚¿cÁÛ€'¿3à' øáÐì÷"ùý‚ü~J~Ïf3ét*™d¾1ßcáø¾éÃ!„B¡ŸK‡û–îìöƒXÜ‚{2™J§3Ù,¹à~‘Ïënoªn³ÛgŠÛMlWÕþÕU»íëÄþë¬þ”_ex—ð~Á»€¿õ~Ê€†ƒA¿×Óý^&¿Èïçä÷“\.›É¤S©d"Á|?ßB!„þÜt¹G¤Ü½p1ÜÜS©t&“ÍÜÏÎ î…b‘Ü^!·×]·÷ûƒ¡pûtºžíªÚס}s`ËxƒáUÂÿ™ï^óûÌï÷Kò{ý^"¿çÉïg§ä÷l6“N§’ÉÄñ1øŽB!ô‡ö"¸'$ܳÙÜ Ãý"Op/•ËäöšâöÞJ·ÙîU»í¯ûÿ^Ñ+ï#|€àמü>ŒÇºßä÷*û½H~¿8'¿ŸärÙLæå|ßôB!„P¸ÂÂýІ{ZÂýôŒá^(Ü+Õ*»ý’ÜÞvÝ>qÜ®³ýaÛ5µ¡ýw[ýWP>€ðÁ‚’‚€ÿÄ€_í÷.ù½Å~¯“ß+eò;ñý‚ù~"ùžZËwMïà;B!„ÐÛO“»÷F¸'’î9†û¹€{©Lp¯Õ îÍVKqûØrûÜãöOìv‡íÏ’í+Ôþ"´ÿF¯ÿ,äÍ„×oügüƒxƒß;ä÷æ%ù½V%¿ßÉïß³*ßã&¾GÀw„B¡SÜ·¸Gî,wÜ36Ü/òî•*ÁÜÞd·wÉí³Û™íÌöÏëØnTû[»±Ð„¼ xáwð¿O&ãù½Ï~o³ßuò;ñüÎ|'¿«|? +-Ë÷M!„Bä…{Ćû¶€ûž î'î…¢€{­Îpoµ î½~ŸÜ>O&ÓÙìêúÚvûëöGvû“t»Æöï:ÛC©}ÓR_Q8Â낼å÷¯ß§ÓÉx<’ß{]ò;ñüN|'¿ ¾Ÿ«|O¾Ç¼|ÿ(ù®é|G!„z{}Pån‚û>Ã=®ÃýÔ‚{©,àÞ¸d¸wº÷ÁpäöOÒí_„Û%Û¿zØþµoæ/(„àWþIþ‘ï÷û•ôûhD|'¿wÚìwâ;ù]òýÂá{ZòýÐË÷¨à{ÄË÷M_!„Bi©pß’pÿ¨Ãý@ÀýH…û™ ÷Š„{³Åpïõ î£ñx2ή®®çónÇö=Ú=…¼x×ïÏÂï_|~_,æ××W³ÙtB~’ß{]ò;óünñ=/ùž³ø~¬ò]ê]çûð!„BèÍ¥Ê="åe¹ïÜ×ýZ“powîƒ!Á}2™Îf®Ûou· ¶¯pûµošÞ¿ª5‚_xÝï÷ÒïKá÷««ÙtJ|ßÉïÌwò»Í÷‚Â÷”ÊwÒ»Ë÷’ï[*ß7ýQ„B!ôî[ +-ÜIî»,w‚{LÂ=a„{Ý‚{·ÇpܧSrûõ|±n¿#·?øܾ†í´ÚÕÂÞã÷g¿ßoØïsòûlF|ß‚ïäw‡ïE›ïY…ïñxì@á{Tð="ù½#„B½•T¹Gl¹»pßp?´àžöýqiÁ½ÏpÜg÷ù|±\J·ß¯u{¶oØ¿½€ÿ®^ñû£â÷[öûbA|¿"¾OˆïCÁ÷N0ß“Ä÷#â{Ìæ;ëÝåûøŽB!ô&Rá¾eÃ=Êpß‘p?ˆÅã÷cî§:Ü›Ü ÷ ÁýŠà¾X,oîªÛ¿xÝþ]qûß+ܾiUÿ“­üðF¿;|g¿/—Ä÷kâû”ø>|ïª|/¹|ÏØ|?´øNz·ù.õÞB!„6ž*÷ˆ-÷m–û.Ëà#¸1ÜSî'^¸·,¸îS‚û5Á}¹d·ß9n pûÛßµÚ•ÖÞà÷'߉ï7Ä÷9ñ}F| ¾÷4¾=|O8|ßg¾ï0ߣ6ß·Àw„B¡M¦À}ˆ{Ôû¾€û!Ã=Ép'¹ûàÞ¶à>b¸Ïîs‚û ÃýÞûJ·ƒí½ÔïÏìwæ»í÷;öûr± ¾_ß'‚ï}ß y‡ïiæû1ñ=°ÞwYïÛ¶Þ#Ð;B!„Іú È=bË}Û’;Áý ÜIî÷ÌJ¸îW÷…€ûÃÝu» ÷°nß´šßP€_ãw‹ï÷‚ïKâû5ñ}ÄwÒ»Å÷T’ø~D|Åö¾Gm¾o)|ßôB!„ÞM¹ ¸G-¸³Üc1‚ûÃä¾îîËåÍí-»]û:·ƒí! +-é÷oÂï‚ï®ß‰ïw·77Ä÷¹Ë÷‘ïBïÌ÷ñý00ߥ޷m½G w„B¡6îŽÜ·-¹Üî‡ ÷¤wUîÍVK‡ûÿÙ¯­´Ö(ŠÂCQ:–$7‰],X°×Ø84‰ ïÿ%|/(ß=½OúzGïDDDDïÞXXîîžÜî»È}ö“ÊýEp·¢p¹½…ÛߢD¾üþèø=Àwõ{2ß|éÝð}vFø^*Uï9£÷´§÷z'"""zïp÷åž6rÏ©Ü‹"÷é‘û+áî»=÷.n4ƒ‡¶.~o†üä{=™ïm½¯‡ø.zW¾OO ß Õ»á»Ñûz'"""zçrOµå.pW¹ +-w‘»À=.÷ÜO’àÞˆÁ½éÃý) îƒæïЗè÷–ï÷7â»è]ø^* y廣÷IôNDDDô¾…ånàîÉ=Ÿ/EîÓ3*÷Ü7]¹ªÜãp·ƒpwÜþ軽…Ûß±Î~oº~7|÷ýçûYŒïQ½+ßEï¥b¡ zÏŠÞÓ½Ãw"""¢7/Aîi#÷œ‘{Iå.pË=÷ýî½àÞôážävàþÆuä{«7ß¾Ÿ¶ùnô¾å»ê]ø^,òyÕ{¦­÷z'"""zãå.pW¹DîSÓFî!¸—ÜÃp?7p¿ŽÃýWî­Žp´s?jýîòÝñ{7¾ûzßqùÕ»ð}ªT2zϹzwùŽÞ‰ˆˆˆÞ°6Ü£rÏç E•ûÌlDîÜ·TîÜÏ Ü¯ú‚;nÿëuå{³#ßo”ï—1¾«ÞËQ¾‹Þ§DïÕ{VôžFïDDDDo\[î)#÷IWî9#÷’‘{î«Fîî{žÜî?î·Ipì÷AÃvDJð{Ë÷{¾_œ·ù®z¯(ßcz¾—ŠÅB>¯zÏ w"""¢·l,$÷ •{ZäžU¹DîSÓq¹+Ü+*÷ Ü/=¸×¬z¸ÿ³%ðý©ß-«v'|¿¾2|÷õ^U¾«ÞˆïžÞ•ï¢÷z'"""zóåžQ¹çó…¢Ê}f6 w…{Yänà^U¹¸‹Üî7ý·¸þøþäû­òýGˆïª÷ŠòÝè}Áã»Ñû”£÷\Tïã興ˆèuu—{ÉȽ ÷E•»À}Sånà~dä®p¹ßÞݸÛ.Ü÷¹~ù.zoØu‡ï7Ê÷Ë ‡ïª÷ªò]õ^^]‰è}Zõ^hë}Òè=…Þ‰ˆˆˆ^U'¹ç¹OEå¾²ZV¹ ÜwUîÜEî÷[»܇«^|ÿæ{Mù~mønô~¤|W½W„ï¢÷eữwữ÷¬è=­zŸ@ïDDDD¯©‹Ü *÷éÜ—–U»ÀýГ»ÂýFà^³êuîÜw…û ÕJnÏ1¿wá»eÕî”ï¢w—ïª÷ªð]õ¾V^U½Ïû|7z/òyÕ{½½²žr¸;r¸/ŠÜËkë*÷ݪÊ݃»Êýöîλ‘;pºzóý§ËwÛáûíợ÷#á»ê}«²©z_YŽê½„Þ‰ˆˆˆþ¤6܃rφänàþÝÈ}eUä.pßV¹yr¸‹Ük–U·mî¿€ûðÕ™ï>ßÞv½nÕ”ï¢w—ïª÷½ê®ê}c}Mô¾´Òûz'"""zum¹§ŒÜ'=¹çó…bTîKË"÷õ •»À}_åîÂ]ä.p¯Yõºw#wà>´%ò½éðýw˜ï–¥zW¾;z?>:T½ïlo©ÞË«¢÷…ù9OïÂwGï9ôNDDDô²BrŸP¹§Ûr/…å¾(r/¯©Ü·wTî÷Wîw‘»e ÜÜ}¸?÷¡-Ê÷Vˆïªw‡ï¶ð½¦|¿¾rø®z?ØßS½W6Uï+Fïß=¾½Ð;Ñ‹óéÞ–{Æ—ûT@îó "÷U•{eKå¾`ä®p7r¿«Õî¶wGîÀ}È‹è=ïFï Ñ»%zW¾½Ÿž«Þ«»ª÷uÑûòz'"""ú“|¹'É}Ú“û÷9•ûŠÈ}cSå^ÝS¹Ÿœž©Üî*w«^·¾Ü=¸7ûÐ׉ïFïm¾ÛÂ÷šð]õþãÒèýèPõ¾³½%z_+‹ÞÑ;Ñ+ Ê=—»ÀýÓçÿ¾~3r_¹¯«ÜwvUîGÇm¹ ÜEî¶ ÷púž“øÞôøîë½!z·TïÊ÷Ë‹ó3ÕûÁþžê½¢z_½/ w"""¢—×[¸r_¹¯‰Ü·¶Uî‡*wîFî–Ƚ“{îOÀ}è‹ò½•Ìw[ø^S¾»z?=9V½WU÷ôNDDDôâ’åžKû¢È½,r¯¨Ü÷öUî§gŽÜî"÷ºmÇàÞî®N|ë½!z·ŒÞ•ïFïGª÷ÝÑûƺ£÷yôNDDDÔwÉrÏæò…ˆÜDî«"÷M•{Uå~|{͹7broùrޟ\½‡ø.z¾×î”ï¢÷‹sÕûáê}ÛÕû²è}½õSDî¾Üóq¹¯ˆÜ7Dî;»*÷#•»w#÷º‘{îMîÈýá{Ëå{PïÊwÑ{Í×ûÙ©ê}_õ¾%z_½/‰Þ¿÷Ð;x'"""ŠÉ}²«Ü×EîÛ*÷ƒC•û¹#w»Èݶ÷¹·|¹÷Zß›!¾;z¾ô~¢zßS½WDïå>ô>ŽÞ‰ˆˆhÔK{:Iîóa¹ï«ÜOÏÚr·Dî •{îMà>%è½Ò»òݶÞ¾«ÞUïUÕûf[ïß:é=…Þ‰ˆˆhÄ{Ü—¹oyr?qä~íȽnäþ’{ ¹P |o¾Gõ.|7z¿P½©ÞwÛz_DïDDDDòéÞÜ×\¹ïùrÿq¥pW¹Ûvã> ÷¦+wà>RÅõÞ2zoó½Ñ°ëÂwOïçª÷CÕûŽ£÷UôNDDD”œ/÷ñþä^¹WUîÇ*÷KGî5•{CåîÁýÑ…{D%ý…žã|ï¡÷3Õû«÷zŸ@ïDDD4¢åžråžéCîG*÷ OîVÝÈý!&÷0Ü‘ûÈ×{›ïFï÷ Ûvô~smô~êé}»‹Þ³ª÷ɨÞ=""""¢¿R¹çºÈ}דûyg¹7å>hNÒ_í9Îw_ïÊwOïÊ÷ë+_ïûÝôž7zOô>†Þ‰ˆˆhDŠÈ}¢O¹FånÛ{•»÷Gî­Ü‘ûÖCï÷†èÝrôþCõ~’¤÷¯õ>ŽÞ‰ˆˆhDòéîÊ}Ò“»¡{7¹Ÿ¹ßåþ3"÷§ÜHPq½;|é½îéýò¥zO¡w"""|¹{rOg²YOî3³=ä~­pwåþà˽‰Ü)RœïFïÊ÷?Ð{½Ñè”{* ÷¼+÷OFîs]ån‰Ü¹·<¹wòê¢wåûý}O½/ÌÏ} é=çê}ÂÕ;x'""¢\/¹vå¾”$÷«˜ÜîžÜŸ;Åê­w»‹ÞW:ê}ÒÑû8z'""¢Û˜Gw#÷ •{&$÷/¾ÜË=åþ ¹S=ùÞòùÞÞ×]½wôîà]ôžÍfÒFï)ôNDDD5_îãŽÜ'Üs¹ÿ'rŸwå¾ùj¹‹ôÒûSTïõ¾åê}ÑÕû§YGïùzôÀˆˆˆˆÞ¬ ÜSFîéL6’ûW#÷eWî;åþ³-÷–'÷gäNKÖ»ò½·ÞW}½ê=£zŸpõ>†Þ‰ˆˆè#ÕAî.ÝÜ¿ÍÍ/üÏn}n§­¦a^ÿ‰õŽ„½»€[&NrþÇ3ß+!Œ“ØÛÉž<ë¹Ïá^ë"¹/È}û\î™Ü¿Aîè ý±ÞÃÞ ¦wùIïg©Þ¹LïEè!„BÿGrº§r/“Ü…'¹Wk{¹{$÷æÊýØ`o×û<×{'n‘Þëžc[†®)¤÷ ïLïé½Lz/Bï!„ú rº§r/§rä.«šnZ¶ëùÉ=†ÜÑ{õ[z†ýLïaÃ'½›†®2½W+™ÞÏR½sáýIïÇÞ!„BèwÊå^ÌäÎñ‚ÀäžÑä®hºAr¯¨IrOÃÑd:cr__@îèïöýï¯é}‘ê}ÐOºv+"½»ŽešªHµ½ÞEQàŸô^€ÞB!ô±*ät/Ý™Üy&÷³Lî•*“»ª¦íÜÃf+î<“û%£;äŽþr¿¡÷ é½—é=ð=׶L]SåTï„w¦wô^&½s½{B„B¡7µ—{‘ä^Nå.îå^“U3LËqë>ɽÝé&ýáh<Í!wôŽýƒÞ·;½/óéd<$½ÇífÔê¤wCW¦÷Êù'ÒûYªwŽ#¼Cï!„úHÈÑãxA`rOéNr—M7-Ûõü Œ2¹ wtŒ^ÒûÃÃýÝ^ïëUª÷Ñpô:q«’ÞÛ44¦÷Z5×»( +-<Ïðžé½½#„Bè#TÈéžËgr?Kå~^©2¹«ºaÙŽWQ³w{$÷Él¾ØËýrGïÕÏzÿòLï›ÍÕåé}Fzï'ÝN›ôî×]Ç2uM•¥½ Ïez/æz?öŽ!„B¯•Ë½Hr/“ÜÝs¹×$EÕ “äî7Âf+îô’Áp<™ÎËÕÜï!wô^½¦÷[Òûu¦÷ùl: 2½Gaà{®mº¦0½çxgzçS½—Hïè!„B§]!§{‰èÎq©Üwtgr—M7-Ç%¹G­v§›ô‡£LîëTî[Ƚ{oÔûb>›Þ{ݸ݌AÝslÓÐUE®Us½‹©Þˤ÷b®÷cO‰B!ôër¹IîeŽçQÜɽRerWuò]Ïžä>žÎæLî—W› ÉýrGïÞ¯ôÎðžéýf§÷Õr1ŸNÆÃAÒëÄ­fØðë®c™º¦ÊéðÎô.<ÇÞK9Þ¡w„B`…œî%¢;Çñ‚ð$÷š¤¨šaÚŽWQ³w{ýÁh<™Í©Ü¯Iî·Lî©Ü¿@îè={Qï÷Oz_gz ûI·ÓnEaà{®mº¦0½WÎ?‘ÞϘÞyžá½Lx/ï!„:Ír¹IîeŽç™Üwtgr—M7-Ç­û°ÙŠ;½d0Lå¾\AîèúAïÏõ¾Ýn®./˜Þç³é8Õ{ÜnF î9¶ihª"ת¹ÞEAà9Žð½#„Bè4;;£;Çñ£{&÷Jµ&+ªnX¶ëùAµÚnÒŽ&Ó“û:“ûM&÷Ï;:VxÿAïw¤÷Íuª÷Å|6ýé=løu×±L]Se©VÝáéßéxG!„Ð –Ó=—;ÏäžÑÉ]’UÍ0mÇ«¨ÙŽ»½þ`4žÎæLî—W›í–ä~Orÿ䎎×Þ¿èýéý6×ûj¹˜O'ãá éuâV3 |ϵ-CWYªVvzS½Þ¡w„BZ¹Ü‹$÷r*w1“ûy¥*ÉŠ¦›–ãÖýFØlÅTî“Ù|‘ÊýzCr¿ƒÜÑ)ô“Þ¿<éý&Óûšé}6Œ†ý¤Ûi·¢FP÷Û44U‘jLï„w¦wAà¹\ïÀ;B!„N§œî%¢;Çñ‚ÀäNtgr¯IŠª–íz~F­v§— †ãÉt¾X®r¹ß2¹?ìäþ¹££ö ½3¼~¸'½o·›«Ë ¦÷ùl: ú½nÜn† ¿î:–©kŠ,Õ*çŸHïg¢(ð<Ã{™ð½#„BèDÊå^$¹—9žDFw&÷Oç•š$+šnZŽWQ³w“þp4žÎ˜Ü×?ÉýË^îß wt¬¾¿¨÷;Òûæšô¾\Ìg“ñpô:q«¾çÚ–¡«Š\«îõ.<ÇÞKÀ;B!„N£œî%¢;Çñ‚°—{µ&+ªnX¶ëù°ÙŠ»½þ`4žÌæ‹Õúâòj³etOåžÒ=•ûWÈ»ôþ¸ÓûÓûm®÷Õr1›NFÃ~Òí´[Q#¨{Žmêš*KµjŽwQày†÷2ázG!„ÐÑËå^$¹—9žÄœîÕš$«šaÚŽW¨Õît“Áp4™ÎK’ûõ†äÎè¹£Së5½ß¤z¿X¯–óÙt<ô{Ý¸Õ ~ݵ-CWYªVr½ Ïq„÷ðŽB¡c—Ó½Dtç8^r¹Wª’¬¨ºi9nÝo„ÍvÜíõ£ñt¶X®Ö;¹ß2¹?ìäþ¹£ê9Þ¿îðþùážô¾Ý^_]^¬—‹ùt2’^§ÝŠÂ î9¶ihª"Õª9ÞEçÞË„wè!„BG,—{‘ä^æxžÉ=£{¥Z“U3LÛõü ŒZq§— †ãÉl¾X­/.¯˜Üo^‘;莎ÞÙ­·í4Õ ã1@Nö‚‚€‚*²5mª³³½ÿëY?ˆÍfe¥›t}ï=¼c<ÿSï_Z½ßµz¯Ê"K“8 +-ƒ•ï¹s{jm¬*²$òÜEï CSðŽB¡ßÜ3ºSͺwrg9^”dEkÚÙs×[®‚0Š“4/ÊVîBw"÷ã顧;äŽþÀžëýk¯÷ÑûýYïM]y–lãM°^ú ×™MMC×FÊPžëñ~ÃÐt‡wè!„B¿«'roéNÓDîgºs¼ ÊCe¤é†99îÂ_­ÃM¼M³¼¬ê‹Ü¿<“ûSºÿn±!té¥ÞÿyÔûçÏŸû]S—Ež&q«¥çÎí™eN´±ªÈ’Èsl¯w†¡©NïÀ;B!„~KOèNäNÑ ¡{'w–ãEIVÔ±61­™=_xËU°‰¶IšUÝìö­Üï‰ÜO½Ü¿BîèíûëàýátlõþéŽè½®Ê1­™=_xËu°‰¶I–UÝôr'tèè¹£wÐs½íõ~jõÞâ}¿kª²ÈÒ$ŽÂõÊ÷\Çžš†®Ô¡, +-<×ãý†¡éïà!„B¿² Ý-Ý)B÷›žî/HòPiºaMmÇõüUFq’æEY7»ýáÓgB÷ãéô(wÐýù½Ô{‡÷‚÷‹ÞëªÌ³dm‚õÒ[Ìí™eNô±ªÈ’Èsl¯w†iñ~ÝâzG!„Ð/ê"÷«Vî×Mè~–;Ëñ¢4TÔ±>1­™3_øËu°‰¶I–—UMä~÷©•ûñ"÷¯;z/½ª÷Ñû}«÷ý®©Ë"O“8 +-ƒ•ï¹Ž=µ ]©CYx®Çû Á;Õâ}¼#„Bè×t¡û ¥;E¹÷tçxA”‡êHÓ kj;®ç¯‚0Š“4/ªºÙåþ…Ƚ§;äŽÞQ/ñþDïï¢÷ªÌ³do‚õÒ_Ì™eNô±ªÈ’Èsl¯w†¦ Þ¯[¼Cï!„úé]ä~ÕÊýš¢ ÝÏrg9^”dEëÓš9ó…¿\‡›x›fyY5»ý™îÇÓéQîÿBîèõRïÞÞÏzß5uUäiGa°ò=×±§–¡k#u(‹ÿï MQÀ;B!„~IÏèNQ4óƒî¼ ÊCu¤é†5µ×óWAÅIšUÝ\ä~<ËýL÷o ;z_½ª÷ÑûýçÏw‡ý®©ÊhéNºßœéÎr¼(ÉŠ:Ö&¦5sæ ¹7ñ6ÍŠ²nvûC+wB÷‡GºÝÑ{íU½ŸZ½þtwØ7uUäiGa°ò=×±§–¡k#e(‹ÇÞvz'x§ Þ¯[¼Cï!„úõr¿jå~MÑ„îÜoYNå¡2ÒtÜڎëù« Œ¶I–UMä~×Òýx:Aîè/é5¼?¼·z?ìwM]Yº7ázé-æÎÌ2'ÚXUdIà9öŒw¢wŠÞB!ô“úð”îE3ºs¼ ÉŠ:Ö&¦5³ç o¹7ñ6ÍŠ²nvûNî„î½Ü{ºCîè=÷ý5½ŸˆÞ ÞïˆÞëªÈÓ$ŽÂ`å{®cOMC×FÊPŽ½=ë¡éïà!„Bo݅î4}‘;Ë ¢4TFcÝ0§¶ãzþ*£8Éò²ªwûCG÷ãéB÷³Ü¿Aîè÷¨÷ï½Þ_:½ïwM]Yº7Ázé-æöÌ2'ÚXÊ’Às¼3-Þ¯[¼Cï!„zËz¹_µr'tg~Ð$y¨Žµ‰aÍìùÂ[®ƒM¼M³¢¬›]/÷ã«rÝÑ»îÞÏz?ãè½Åûa¿««"O“8 +-ƒ•¿p{júx¤ %‘çØÛïDï4Eï!„zã><¥;Eè~s¦;Ëñ¢4TFcÝ0§3Ç]ø« Œâ$Í‹ªÞí{ºŸžÑrGGß_Õûñ¬÷ý®©Ë"K·ñ&X/½ÅÜžYÆD©CYxööc«w‚wºÃûxG!„Ð[u¡û £;MèÞÉý–åQª#mbX3{îzËu°‰·iV”u³ëåNèþTî ;ú{zÔû#Þ‰Þ;¼ö»º*ò4‰£p½ò®3›š}¬*²$ðÛãiñ~ÝâzG!„Ð[ÔËýª•;¡;s¡;Ç ’¬¨c}bNgŽ»ðWë0Š“4/ªz·'t¿'t?=<£;äŽþ¦ñþDï§ãYïû]S—E–n£M°ZzîÜžZ†®”¡$ +-{Ûë¦(à!„BoÔ‡§t§Ýo:ºß²/JCe¤é†5µçîØ­å´ñÀ8)è–@B$îSè¾ÁvŒ;à¾ÿëô¯»ÍîfÓg’ß÷ßt¾XmLËqý Š“t·Ìçþònî'Ì~2—½_òNö^ä=K“(ô=ÇÞšëå|6 õ¾¦*r[x–¹ä½Qäýy€ïu®ûmQ÷©{>÷f‹bXNÛ²¢j}}8šÌæ˵¹µÏ£$ͪºêº_掺ÃO¥ÎûÕÞ_¾”{O“8 +-<׶ÌÍj1›Ž‡Æ@ëuåŽ$òCSeÞÉÞIÞïò¼cïð=ª¹ßäs'u¨êNÑ Ç RGîö´1Og‹ÕÆ´l× ¢8I«¹¿Ôs¿ªûGO àÿìízïUÞÉÞ‹¼gi…¾çØÛÍz9ŸNF†Þï©J§- +-KS­rï$ï÷È;|§O×u¿'uÿü¼î-Šf9A”:ŠÚëëÆh2/×›­íx~ÅiVÕýP×ý2wÔ~B×y?ïýåK±÷,Mâ0ð\Û2׫Ål2êMíÊmIàY†®óÞ(ò~‹¼À_u®ûmQ÷F^w2÷f‹bX^Ú²¢j}8žÌ«µiÙ®„q’fÅÜIÝÏs?bîð³»Þ{•w²÷<ï»,£Ðwk»Y-çÓñÈô{]¥#‰<ÇÐT«È;Ù;Éû]ž÷äþ‚jî7ùÜIݪºS4Ãñ¢Ô‘»=m`ŒÆÓùbµÙZŽë‡Qœf»¢î/‡ºî§ºîý+€¿Í[½÷c½w’w²w’÷$ϵ·æz¹˜MFC½¯©ŠÜŽe¨V³Ø;ÉûýuÞ±wø×u¿'uÿ\Ô½EÑ,'ˆíŽ¢öúº1šÌæ˵¹µ/£„ÔÌ=¯ûyîÇzî¨;üÔ꼟.y'{zÜï²$Žßu,s³Z̦ã¡1Ðz]¹- <ËÐuÞEÞo‘wøVŸÞÕ½AêžÏ½Ù¢–¤¶ÜUµ>Og‹ÕÆ´×¢8Év{R÷//—ºŸêºô¬þfoõÞ—½y&{ßei…¾çØÛÍz9ŸNF†Þïu•Ž$òCS­2ïyÞïò¼ß ïð Îu¿-ëþPÕ¢Ž¥ŽÒíõÆh‘¹_ê~ªëþѧø!Þê½/{'y"yOã(ô=ÇÚnVËùt<4Z¯+w$gºÎ{ã]Þ±wøCŸ®ë~Ÿ×=Ÿ{³E1,/Hm¹«jc8žÎ«ÍÖr\?Œâ4«ê^ÏýXÏu‡_F÷Ó%ïùÞ÷YšÄaà¹öÖ\/ç³ÉÈÐû=UéH"Ï14Uåý¡Ìû-òιî·EÝçºS4Ãñ¢ÔQº½þÀM¦óåz³µ/£$Íʹ_ê~ªëþÑ›øÞ꽫½eÞwYGï:–¹Y-f“ñPhª"·EciªÕÌóþ¹Èû]ž÷äþÐ¥îwyÝʺ·(šå±ÝQT­¯G“Ùbµ6-Ûõƒ(N²]Y÷ášû±ž;꿘:ï§*ï¯$ïùÞIÞ“(ô=ÇÞnVËùt<2Z¯+·%gºÕüg¾w’÷{äþœjîEÝïIÝ‹¹7[Cê.µå®ª Œáx:_¬6[Ëñü0ŠSR÷§ç¼î¯UÝOuÝ?úQ?Ü[½÷c±w’w²w’÷ý.Mâ(ð\Û2×Ëùl22ô~¯«t$‘çš:ç½ñ.ïØ;|ÍWêN3,/H¹ÛëŒÑd:_®Í­ízA'énÿøDæ^Ô=Ÿû±ž;꿤:ï§"ïùÞIÞŸIÞ³4ŽBßu,s³Z̦ã¡Þ×TEn‹ÇÒT«ÌûC™÷[ä~ϧwuoœëNÑ Ç‹RGQ{}}8šÌ«µi9®Dqš‘º?“ºçsÿ¯ºô >È[½÷KÞÉÞŸ÷YšDaà9öv³^ÎIÞÖëÊmIàY†j5˽çy¿Ëó~ƒ¼ÀWœë~[Öý¡¬{‹¢YNÛ²¢j}8žÎ«ÍÖrõ¦*r[HÞ©sÞÿÃn] ¶q­a}±c;m-f²˜YFQ42ì=ýïÐ(vÚ4P¿JßYŹEÞà•pÝoŽu'Rél®PªPÝ[^8žÎ‚$«šAu_ohî¼îlîǺ¿÷–þyöòîxy·-C×I\Îg“Ñ ×m7ëÕ‡r1ŸË¤’ñXÔÍûÝiÞ±wø¢î·~ÝcT÷L6_,UªuV÷Áh2/IQuôW¼îlî¼îϨ;À›‚½?ñ½³¼³½SÞM]SeQXÌ&ãaŸòÞ¨QÞ ¹L:™ˆE#,¼_#ïà9­û[÷h,žLerùbù¡Zo¶»}ªûl±eEÓ ‹ê¾ÝùuâuÇÜÞäý™çýàì÷,ïë•e”wIX̧”÷^§Ey¯” +-¹l:•ˆG#÷lï<ïYÞ¯wpçþÍÝ­û'V÷H4–H¦3¹Õ½Ö`uŽ§³… ʪ¦›–½Þliî{6wÔào{÷òîxy·-CWI\Χ“Ñ€å½^­”Šùl†ò ò~ƒ¼€Ë›û›;¯;Íý>Sݳ¹B©Buouzªû|)HŠª¦½rëîxuFÝþR(ïlï,ïlï”wS×Y\.f”÷~·Ý¬WÊÅ|.“JÆcQ/ï·È;páºßuÅ©t6Ou¯ÖyÝG“Ù|)RÝuâºo½º³¹?aî'Èû3ÏûÁÙïYÞ×”wCSeIX̦ã!Ë{£Fy/ä2éd"ð¼ß!ïÀ¼Y÷h,žLe²ùb™êÞlwû¬î A”M7©îš;ÕýÀëþŒº|ƒ`ï^Þ7ï+›å]‘„åœò>èuZ”÷J©ËRÞãnÞ?yy¿öòŽ½\¦“ºßuOPÝsT÷‡¯ûp<¥ºK²ª¦µZ³ºïCuÇܾA(ïlï<ï»-åÝ2tM‘Äå|6ñ¼×«”÷|6by¿g{çyÿÈò~…¼\ªÓºßñºGXÝÓ™\¡Duo´:½Õ}¾$EÕ Óöêî8|î¨;À7 òþÌó~pö´÷í†ònRÞeQX°¼÷»í&å½\Ìg3”÷X÷äà’}ðê~íÕÍý>SݳT÷JÕ­ûh2›/EYÑtâºÓÜQw€ïìý$ïë•eš*K”÷éxÈó^{ ¼ç2©d<EÞàÞܯØÜuÅ©t6_¤º×›ínŸÕ}!𺛖½ÞPÝ÷{çÀ뎹ü3¡¼³½;Ž—wÛ4tU‘„åœå½×i5XÞ ¹L:™ò~‹¼\¬pÝoBuO¦2T÷òƒ[÷áxJu—dU3LkåÖÝauBÝþ¹ ïÏAÞiï”wËÐ5E)ï“ÑÀÍ{¥TÈeyÞ#<ïwÈ;À¥z³îQ^÷«{­ÑêðºÏ—‚¤¨ºaÚT÷[÷GÔà;{çy?8û=å}³¶-ÓÍûbÆòÞm7ëUÊ{>›N%âÑÈ=ß»›÷k/ïØ;À¥8©û­[÷H4–H¦3¹BÉ­{o0buyÝ-ªû–æ¾w¼î˜;À÷ åý‰åÝqó¾²LCSeI ¼‡}7ïåb>›¡¼ÇByÿˆ¼\˜ÓºßyuSݳT÷JµîÖ}2[,EYÑtÓ²×Ôàg8Éû£›÷åÝfyW$a9Ÿzy¯=PÞs™T2”÷7ïWÈ;À¥ø¢îlî÷¬î©t6_duo¶»ý!«» ʪf˜ÖÊ­»ãð¹£î?"´wÊûÁÙÓÞ·”wËÐ)ï"ËûhÐë´,ï7ïQäà2yu¿>©{Œêž¡º—¼º§ó… )¬î6Õ}w¬û³_÷÷ÀÔ›yßPÞM]Sdq¹˜Mü¼WJ”÷t2¼\¤AÝi'S™«{­Ñê¸u_²ºë†EußÒÜ÷ÎÁ¯û êð#Byg{wž÷5Ï»*‹‚—÷v³^eyÏò¼Gܼß"ïÛûiÝ£nÝ ^Ý{ƒ«»(+šnRÝ7¨;ÀOæçýù$ï+Û4(ïËûxØïzyϳ¼Ç½¼ß!ï—â+uO$ÓT÷Růûd¶ê¾æuw>÷ îï=€ÿ¸ï<ïÊ;íònºªHÂr> ò^.RÞS,ï÷|ïÈ;Àex«î^÷,«{µÞlwû¼î‚(«šaZ«“ºûsGÝ~Ô«¼ï)ï?÷^§Õ¨=°¼g(ï1äà‚œÔýÖ¯{œÕ=Ô}8žRÝ%^w›ê¾ûLu? î?Û1ïlïŽÃó¾¶-S×™å}2yÏeRÉPÞo(ï×^Þ±w€stZ÷» î)ª{±|¬û|)HŠªÕ}»û¼GÝ~‰—ãÞCy_ùy_ÌŽy/ܼGyÿÈò~…¼œ§/êþé·ß~¿çuÏ°º?Ô­NoÀë.úuß°º;Ÿ{P÷÷þÀÙ8Íûå}Gy·MCSeIpóÞm7ëÕ +-Ë{:™@Þ.ëºÿþÇ}$Æêž;Ö}4™QÝeEÓMË^‡ëþŒºüt¯òN{߆ó>ûAÞ³È;À…øJÝ“T÷B¸î A”UV÷•W÷ƒ_÷Ôà§;æý)Èûfe[†®*’°œ‡óžwóAÞÎœW÷kªû_÷¨W÷R%\w‰ên˜6Õ}‡ºür~ÞiïÇáy_{yÃy/yÞã~Þo‘w€³ô!¨ûÇpÝÉ4¯{µÞlwûñWwÝ°¨î[š;¯ûÓ±îï½€3ôâïý‹¼›º¦È<ï£A¯ÓjÔxÞSÈ;ÀyóæþFݳáºOçKARܺo¼º?¢î¿ØiÞ^ÞW~Þ³I8ïž÷{Ê;íy8;Q÷üiÝEVwÓ²×¼îŽ[wî¨;À/ò*ïŸw”wÛ44U…Ó¼çXÞc‘û?hïÈ;ÀÙy«î¯îÅӺˊFu_¡îÿ®cÞŸxÞ÷Ÿw[?ïÒiÞ ”÷$òp¦Nê~ë×=îÖ½üPk´:½Áhòºî‡“º¿÷mΚŸwÚû㣗÷Íʶ ]UXÞ§ãa¿ÛnÖ«•òp¾¾V÷ÔiÝg ª»ª¦MußyuBÝþ%/þÞݼ;<ïk?ïËùë¼Gÿd·>´ç +-/š fï("ìôŽ œyÿç¹ç¤Bbùç*IØßCìµ™w‚ƺî‹rÝʺ¯ÛÖý±ª¯û“8wÖøenóÞi5ëÕŠ}ÞײcÞcÌ;`[÷%eÝSrÝ7§×½ÕîöúCmÝÇcãÜYwàXæ}¤Í{_™÷š}Þ7˜wǾîË+q¹îY±îÛ“u/+ë^7­ûëÌ€1ïï–yoOÏûó@Ð|´î»û‡ù“Ó³óËòͺînoà´î³þ`nØç]Ü»˜÷ž˜÷†˜÷ûÛë«‹R±p|t°·ã0ïæûêº?Tªõ¦X÷¾¶î#Ö˜¿Æ½Çê¼?MæýÑiÞ““y2ïøØ?¬û;ëÌ„mÞßä¼û½n»Õ¨Uæ=ͼNë¾ê¸îµz³ÍºÞð­yÏ1ï‚óºg²kÎëÞë.Î]¬ûxlœ;ëü:˼Ôy(ó^ÿÒ¼‡™wüæ+ë~u}+×½¡®ûëx‚˼w´y¿)›æ}Ý4ï Ì;þäºî“u¿ë~ÿ¨¬{·×Êu³®û¬˜SƼ¿óÞóÞóþpwS¾œÌû¦:ï æÿr_÷­eÝ‹¥Éº·XwÀc>š÷Š2ïçgê¼o3ïøÝGë¾wpt\Ð×½ª®û@]÷ëxÃ_ãÞÇc9ï/ê¼·Mó~*ç}—yÀçXwÀ÷lóþúò,æ½'ç½6™÷“üá¾6ï©d"μàC__÷z£Õ1¯û;ëx…uÞßļ?¹Ï{vjÞCÌ;~ðÍuï³î€'¹Î{ƒy (¾±îMûºëçκà0ïCæ€ ùÚºßM­ûØ´î³> +-˼ôyï2ï„˺ç,ë~s÷`Z÷Öð(·yoÉy¿¿eÞ𵯬{Y¬{E¬{»Óëþüòʺ^eÌûûdÞÚ¼?Þß^3ïø×·×ýI¬ûëxÖ_íÞÝæýÊ4ïkÌ;>ò…u¿Tֽƺ>¡ÏûŸéy¯*ó~aÌ{Θ÷˜œ÷0ó€g¹¬{ÖX÷sÖðoÏûŠ6ïæïúæºYwÀœç½Ã¼àc_^÷†iÝG¬;ày¦y[æ½®Í{‰yÀ_>[÷3Öð+§yï»Îû*ó€Ç}¶îE—ugÝïûμgļǙw<,¤¾û—Ö½kYwýÜYwÀÃ>÷3æ¿ø÷uŸõ™øÐœ÷(ó€×|oݬ;à?ÿ>ï³,ë¾à°î%Öð=æ€ °®ûâ’X÷$ëÎgó~μàyÚº‡åºÇĺ/ËuO›×ý‚u‚à›óž`ÞðšÉºG´u_Q×}}s{—uå“y¿Ôæ}gkc-—IÙæ=ļ0sÎëž“ë¾ïºîcÖð£/ÍûÁó€7}´î‡Êº_±î@`¸Î{MÎ{Y™÷#uÞ³Ì;c¬{T]÷xru²îycÝëÍv§×gÝ¿cÞð-ÇuÏXÖýšu‚Ä}Þ+÷7ʼÛæ}qy`öBê»»¬û‰²î·•*ëÇóþp§Ì{Á:ïËK‹ 19ïaæ€ÙùdÝO•u¿´®ûˆuüÍyÞÛ.óžL¬hóÑç}Öé`M¯{‚uæ€Ó¼÷Ìó^4æ=ͼàNëž2­ûëÔ›÷(óÀ¬hëVÖ}A_÷ìÚÆÖŽmÝ[¬;0ŸÍ{I™÷ÝíÍõœœ÷¸yÞCÌ;¿N_÷H4[X\2­ûž²îçæu°î@ |2ïʼïkó¾Ê¼0[¶u_6­û²î—“uï²î@à¸Ì{Ó<ï‡ê¼g˜wf˾î+‰ädÝLëÞ`Ý`úxÞ¯ä¼ç™w¼ ¤¾»X÷èdÝÓúºËu/߈u¯±î@`¹Í{]Îûµœ÷Ó¼'˜wfdjÝãæu/(ë~÷PÑÖ}ȺAä0ïý^GÌ{µr+çýÔ˜÷”:ï 19ïauÞg2æƒÃº¯¦³¹õÍí]¹îEcÝÛúº¿±î@à¸Ïû£2ïgrÞ÷v¶6Ö²ê¼/-Êy0ïüÇuÏ(ë¾/×½dZ÷Þ`ø¤®û˜u‚Æ4ï#‡y?—ó~ Ï{2_–óeÞøES래¬û¡\÷ ûº¿*ëþκA3=ï1ï-ó¼ióžó¾bš÷óÀ/P×=l^÷”¾îyÓº7Õu~aÝÀr™÷†:ï—bÞMógÞø]úºG¢1ùîêºg×6¶äºŸˆu¿º–ë^gÝyà4ï]1ï51ï7e1ïeÞ7×sÙô*óÀï +-©ï.Ö=*×}y²î;{bÝOåºßÞWªbÝ;½¾eÝÿ°î@MÍûP›÷ÊÃœ÷¢œ÷Ým1ï§yŸuÒ2ûº¯$’úºˆu?SÖý‘uæ‡ã¼·'ó^ó~¸¯Ï{˜÷0óÀÏšZ÷x2•ÖÖýH¬û¹¾î-Ö˜æySç½gÌû…˜÷¼>ï)uÞb±h„yà‡M¯ûêdÝź_šÖ}ÀºóA›wñîê¼?)óÞTçýJÌû‰uÞ—™w~žÓºgrë›Û»bÝ bÝË7rÝ­NW_÷‘±î¼;P–y}}Öæ½.çýZÌû©˜÷½­µl&•LÄ—å¼G•y1ïüuÝÃƺ'ôußë^”ë~÷P­±îÀ¼±Îû‹2ï1ïÕÇû[1ïgbÞÔyO‹y_aÞøqúºG¢1ùîrÝSÚºŠu/)ë^ëÞë>dÝ92=ï}Ó¼Ÿ‹y?2æ=nŸ÷YÇ €à ©ï.Ö=*×}YY÷ìÚÆ–X÷¼X÷ cÝ{¬;0gÔw·Í{K›÷K1ïÇrÞ7×sÙô*óÀO³¯ûJ"©®ûÎÞaþä´tqu­¬{SY÷'±îo¬;0?¦æ} ç½!çý¦,æ½ æ}w[Ì{Æ2ïaæ€`_÷x2•V×ý@¬û™X÷ÛûJ­®­ûóë«XwåÝYw`.ó>Òç½+æ½V}¸“ó^,îëóžó.Þ=DÔwgÞøš^÷U}ÝĺŸËu¬ŠuïôúbÝ_Xw`ÎüµÏûP›÷Š2ï¥b!¯Ï{JÎû’˜÷(óÀP×=lY÷Ln}s[¬û±X÷KmÝ[¬;0¯ç½­ÍûÕE©x"æ}gkc-›I%ñe怟Rß=‰ÆÄ»‹uOhë¾»t\(ž_–oäº7äºÌëþ‡uæ†yÞßļ? ½n»©Ìûµ˜÷Ó“üÁž2ïi1ï+¶yŸuæàìÖçvâX…Ñe3? +-”Éå„DŽD4Æ®š÷¹Ò—Ýå.·×r×ø|qÎFèÿ¥ ÝÿCèþ-¤»Ó½Eènº÷‡“)¡{º#ôuKðþHð~<b¼Ï¦£AàÝ24ù‚w&Áû-ðŽB}`ÏéžfXN²ùb™Ð]ÑLÛ é>&t_ºï"ºŸ@w„¾`1ÞŸ(Þï Þ7ëÁû$Ä{Û± •à½R*ä²"Ÿà=¼#„BØOtϺ‹!Ý«uBwÃv½ND÷»e°ÝúÒ½Š÷Å»Oð®«r£â]y–à=´{„÷à!„ú(Ýoº3Ó½)k†EèÞ#tŸQºï Ý®è»#ô¥z÷í&X-æïý.Á»©«­ïBˆ÷oÀ;B!ô¡ÝP»§RWt—r…RHwÕ°B÷ÁhBè¾ +-é~8 ÝAw„¾hÔî!ÞO×xŸŽ‡ï®mê +-Á{¹˜ÏJÇ2éçxÿì¹C!„þô.tìžaXJ÷JÐ]·œ¶Oé¾X­7„î÷”îO ;B_´Ÿñ¾#x_Æx÷\ÛДV½â]$xÏï!„ÐGöœîiBwÒ½ÑRu“нÒ}º#„h/ñ¾–w!Þ{ϵ MnÆxç9&Áû-ðŽBýã~¢{†å)›/– ÝÝ´]¿ÛŽ§„îÁf º#„¨ÝÏx xßS¼Ï&£Á»c*Á{¥TÈI"ÏžñžJQ»ï!„Ðû£t¿MèÎp‚Ò½Zo)ša»^L÷eB÷SD÷ï ;B_¶ïïÇãa¿Û¬W Šw¿íXº*7jÞ…ï‘ݼöè!„Bn7Ôî©TBw>¦{SÖ Ëõ:½îwË`½ÝïOï÷1Þç!Þ»瑩´®ðžÞB¡èB÷Ðî„î,/J¹B©Bè®–Cè>Mgº?€î¡Wð¾ÝïÓñ°ßõ]ÛÔÞ«åb>+ ›ÞB¡èÝ¿¥ Ý…ˆîµ†¬ê–Óö Ý'„î«õf·?„îgºÃî}á¨ÝC¼Ÿ¼/c¼{®mhJ³á]8&Á;µ;ðŽB½§Ÿèža9AÊæ‹„î-E7í¶ß é>_PºßSº?î¡xßm×Áò.Ä{¯ã¹–¡Éï¥B.+ò ÞSÀ;B!ôînb»ŸéÎp‚Hè^®ºk¦íúÝþp<%t6[Ð!ô¬+¼?\ð>›Œ½NÛ±tUnÖ*ï’ȳL&²{‚÷Ï?„BèÏëL÷TBwžÒ½ÞT4Ãv½¥û2¡û)¢ûwÐ!Ù=ÁûñxØï6ëUŒw¿í˜ºÚjP¼ ïià!„úG%tìžaX^”r…R¥Þ”UÃr¼N/¤ûÝ2Xow ;Bè§b¼»‡x¿§x_Ì Þû]¿m›ºBð^.æ³’À±™3Þ©Ýw„Bè÷zN÷4¡»ѽÖUÝrÚÞ`4™]èþº#„®{÷í& xŸŽ‡ý®çÚ†¦´êÕï"Ï11ÞSÀ;B!ôŽ(ÝoÏtÏ°œ eóEB÷–¢›NÛïFt_¬Ö›Ýþp<º?žé»#„þ{÷S‚÷%Å{Çs-C“›õj©“Dž%xížàý³'!„ú“º¡vO¥bº3œ º—«„îši»~·?œÌæ1Ýï)ÝŸ@w„ÐUÔî¼ï¶ë`y7ŸŽ½NÛ±tUnÖ*!Þ…ï߀w„Bè}%tíÒ§t¯7Í°]Ð}<%t6[Ð!ô]áýá‚÷Ù„àÝo;¦®¶1Þ9–Iï!„лzF÷o†åE)W(UêMY5,ÇëôBºß-ƒuL÷èŽzÑ3Þ ÞÇÃ~·Y¯!Þû]¿m›šÒjTËÅ|V$xÏœñNí¼#„B¯çtOº Ýk YÕ-§Ýé F“YD÷ÝÝ¿ƒî¡gÅx¢x¿ñ¬óéxØïz®mhJ³NñÎsLŒ÷TŒ÷ÏB„BèÏè&¶{L÷ Ë R6_,×-E7í¶ß¥t_­7»=¡ûèŽz½xßn‚%Å{Çs-C•›õJ©“Dže2‘Ýw„BèwŠéžŠéÎp¼Ò½Zo)ši»~·?œÌ拈îb÷Óãã™î°;BèY¼Ÿ"¼ï¶ë`y7ŸŽ½NÛ±tUnÔ"¼ ïià!„úͺGvÏ0,/J¹B©ZoÊša¹^§?O ݃Í6¡ûèŽz5j÷ï¼Ï&ï~Û1u¥Õ¨•‹ù¬$plæŒwjwà!„z«çtOº !Ý+µ¦¬ê–ãuz!Ýï–ÁtG½Ý5ÞÇÃ~·Y¯!Þû]ßµMMiÕ«!ÞEžcb¼§b¼ö"„Bÿönb»ÇtÏ°œ eóÅJ­ÑRuÓiû½Áh2‹è¾‹è~ŠèþtG½ÚŠwb÷ï÷!ÞƒÕb>û]ϵ MnÖ«¥BNy–ÉDvÞB¡¿WL÷TLw†DB÷rµÑR4Ónû]J÷Õz³Ûº?€î¡_÷ïÛM°ŒðÞëxŽe¨r³V ñ.¼§¼ßï!„Ð%tìžaXžÒ½ÞT4Ãv½n8žÍÝÄî§ÇGÐ!ôË.x?Exßm×Áòn6 z~Û1uµÕ¨UŠù¬$plæŒ÷[à!„z£è+º§ Ý)W(UêMY5,ÇëºO ݃Í6¡û¥;ìŽú‹¨Ý#¼?Äx_Q¼wý¶mjJ«Q-¼‹ÇÄxOÅxÿìQD!„þÅEt¿=Ó=Ãr”¬ê¦Óîô£éün¬cºŸ@w„ÐÛñþHð~<ö»Ízµ˜ÏÆÃ~×smCSšuŠwže2‘Ýw„Bè­bº§bº3œ fóÅrµÑRtÓnûÝÁh2‹è¾»¢ûwÐ!ôË~P¼?Q¼ßöÛM@ð>%xïxŽe¨r³^)r’@ðžŽñNí¼#„B¯—Ð=²{†ayJ÷zSÑ Ûõºÿc·NtÓÖ( +PéÆf cŒ ÛÌà†äýŸçl{;´Í½W§i+µRÖÿk}–Cè¾wý :žžÏgÐ!ôcý7Þ}ï°Û®öÜ4Fº¦*í&Å»À³ïÙïzB¡¿³‡Ôî”î ¡»X(Uj–¬¨ýÁxbZÎr½Ý»^L÷§gB÷+èŽú¡¾âý’à=Jð¾Y-ìÙÔêZ·Ó–êÕr1/ +-ðŽBý{)ݳ”î,/Pº7ÛŠª F†9·cº¼ ¼ÓýFé»#„þ%j÷ïg‚÷cøîžàݱf“ñ°ßëÊ-Š÷ϱ‰Ýw„Bèÿw§;±;¡;'äòÅrµ.µ;]MÓ¹½XmvÏ£„îÐ!ôã½áýJðþüt"x÷Üýv½t,s2ôUEn5j•RA$xgR¼S»ï!„Ðû’‡LéþŸG–ãsùB©R—Zr·×Ž§3+¡»Kè~$t?Sº¿€î¡ê•âývÇ{x‡ïöÜ4Fº¦*íf£Z.Dg)Þ³)Þÿô<"„B] Ý3)ÝBw‘нÖhÉŠÚŒ'¦å,×Û½ëÑñDì~¹^Aw„ÐúŠ÷K‚÷(ô½Ãn³Zس©1Ôµn§-Õ Þó9c™ØîÀ;B!ô¿K鞥tgyA,ËÕF³­¨š>2̹ÐÝ Â;Ýo”î°;B臢vOð~&x?¼»1Þk6û½®Ü’j•R!Ÿã9æñ ïÀ;B!ô®;Ýc»3,'äò„îu©ÝéjúИÎíÅj³;x~J÷ èŽúhox¿¼??ŽQà»ûízéXæd4è«ŠÜlÄxž}Ã{&»#„Bß÷Ú=¡û#Ãñ¹|¡T©I-¹ÛëÇ“™åÄtwý0:ºŸ)Ý_@w„Ðz¥x¿Ýñ^‚w{n#]S;íf½Z.æEKñžÞB¡÷¥tÏRº³¼ Æto4eEíFÓr–ëíÞõƒèx"vÝB?ÓW¼_R¼ûÞa·Y-ìÙÔê½n§%%xÏñ›ØxG!„Þ÷Žîœ æ‹åj½Ù>2̹½ˆéîaJ÷Äî ;BèƒQ»'x?¼£Ðwc¼;Öl2ö{ŠÜ’j•RA$xgR¼Ãî!„з=$v'tOìÎr|.¡»Ôêt{úИÎìÅj³;x~J÷Ëî°;BèC½áýJðþüt:Fïî·ë¥c™“Ñ@S¹ÙHð.ð,Å{xG!„¾-¡{&¥;Cè.J•Z£%+½þ`<™YÎ’ÐÝõÃèHè~¦tÝBâývÇ{x‚÷…=7‘®©v³^-ó9c™ØîÀ;B!ôm)ݳ”î,/Pº7ÛŠª Fsî,×Û½ëÑñDì~¹^Aw„ÐOözÇû%Å»ïv›ÕžMÇC½×í´$Šwžc)Þ©Ýw„BˆÒý!¦{lw†å„\¾X®Ö¥v§«éCc:·«íîàáî7Ð!ô“Q»'x?¼£Ðw÷»ÍÒ±f“ñ ßSäV£V)Dg)Þ³)ÞÿôX"„BA Ý3”î Ççò…R¥&µän¯?OgÖbµ!t÷Sº_ît‡ÝB?ÑÞ¯ïÏO§cxî~»^:sÓ 4Ui7Õr1/ +-ðŽB}_J÷,¥;Ë bL÷FSVÔþ`<1-g¹Þí]?ˆŽ„îgJ÷Ð!ô³Q¼ßîxï°Û®ö|j u­ÛiKõï9žc»ÇxÞB¡¯tíΰœ æ‹åj½Ù>2̹½\o÷®Gè~"v¿\¯ ;Bè—z½ãý’à= +-}‚÷Íjaͦãa¿×•[R­R*ˆïLŠ÷LvG!„ÞìžÐý‘áø\Bw©Õéöô¡1Û‹Õfwð‚ðN÷èŽú¥¨Ý¼Ÿ ÞQà»ûízéXæd4è«ŠÜl$xx–â= ¼#„Bwºg)ÝY^ ¥J­Ñ’•^0žÌ,'¡»F Ý/wºÃî¡Ÿî ïW‚÷ç§Á»—àÝž›ÆH×ÔN»Y¯–‹ùœÀ±Ll÷ïÀ;B¡OÞ;ºs‚˜/–«f[QµÁhbÎåz»wý :ºŸ)Ý_@w„ЯEñ~»ã=ô½Ãn³Zسéx¨÷º–T«” +-ùÏ1ï™ ìŽBè“—ÚýKbw–ãs1ÝëR»ÓÕô¡1Û‹¡»Gè~"v¿\¯ ;Bè7ôzÇû%Æû1 +-}—à}éX³ÉxÐï)r³ã]x–â= ¼#„úì¥tÏ&tgÝÅB©R“Zr·×Ž§3k±ÚìžRº_®·¥;ìŽú¥¨Ý¼ŸÏO§cøî~»^:sÓ 4µÓnÖ«åb>'p,Û=ÆûðŽBè÷=ÝY^HèÞhÊŠÚŒ&¦å,×»½ë‡Ñ‘Ðý º#„~[ox¿¼?¼‡wØmW {>5†z¯ÛiIõJ©ÏñóHñžÉÀî!„>q©Ý¿$vg9!—/–«u©ÝQ5}d˜s{¹Þî]/ˆŽ'b÷ËõJèþº#„~C¯ï·Ûõ’à= +-}‚÷Íʱf“ñ ßSäV£Fð. +-OgöbµÙ¼ ¼Óýº#„~SßàýLð~ŒßÝo×KÇ2'£¦*íf½Z.æEc™Øî1Þ€w„BŸ´ïéÎòBB÷FSVÔþ`<™YÎ2¦»F Ý/wºÃî¡ßµûËíJðþüt"x÷b¼/ìùÔêZ·Ó’¼çxŽy¤xÏd`w„BŸ´Ôî_»³œËÿÃn}f§ª`^G²Ö‘nï½wEAT¤«fþã¹›MN¼Hò#~Ï$Þ7W(UêÍvo0šÎW›¦ Óv<ÿr ‚dÝXwø*ɼGŸóîÚÖùtØ«Êz9› ûV£Z.æ³²(pɼ3˜wxUëÎÐugyAÊdóÅr­ÑîöG“ùr³U÷GãlÅë~½‘u±îð¥Þ?çýϻﹶiœtm§¬Óñ ×iÖ«¥B.#‹<ÇÆïÏûÌ;¼ Ú¿ÏuçQŽ×½ZouúÃñl±VvûÃélÙ®G×ýFÖ¾TòîtÞƒàzñ=Ç2£®n7«ùt4趛µJ<ï’À³édÞS)¼;¼ ºî)æ¾;Ç‹R&W(UêÍvo0ž.V›¦ “¬»OÖ=x®;޾̿yɼßȼ»Žu>öêv½œM†ýn«Q-óYY¸dÞÌ;¼¢ug躳¼ e²ùb¥Öhwû£É|¹Ùª{²î–ãùòî÷0$ëþÀºÀ—zOæ=ŠÂ;wϵM2ïÚNY-¦ãa¯Ó¬WK…\FyŽß=žw¼;¼š?ôÝÿ­;'ˆ2Y÷rµÑêô‡“Ùb­¨ûÃélÙîçºGXwørÿ›÷ ¸]|ϱMã¨kÛÍj> ºíf­Ï»$ðl:™÷æ^ ]÷óFßãE)“+”*õf§7O+e§é'ô]Ï×ýþ¹îxwøRÉ»?¢Ìûízñ]Ç:Ÿ{u»^Î&Ã~·Õ¨–‹ù¬, +-\2ï æ^ÍǺ3tÝY^2Ù|±Rk´»ƒÑd¾ÜlUýh˜–ãù—k$ëþÀºÀ×Kæ=ŠÂ;wϵãy×vÊz1{f½Z*ä2²Èslüîñ¼ãÝà¥Ðw'ëNÞ=Ír‚(“u/W­N8™-׊º?œÎ–ã’u¿‘u§ïŽu€oðþœ÷€Ì»ï9¶ium»Yͧ£A·Ý¬Uây—žM'óžÂ¼À+¡ëž¢ëþ7Íñ¢”ÉJ•z³ÓŒ§‹•²Óô“aÚ®çÇë~ÿ\w¼;|¹äÝQHæýv½y·Î§Ã^Ý®—³É°ßm5ªåb>+‹—Ì;ƒy€Wò±î ]w–$9›/–kvw0šÌ—›­ª Ór<ÿr ‚dÝXwøɼGQx§óî¹v<ïÚNY/fãa¯Ó¬WK…\FyŽßý ﯄¾;Ywòîi–DºîÕz«ÓNf˵¢î§³å¸dÝodÝC¬;|£÷ç¼dÞ}ϱMã¨kÛÍj> ºíf­Ï»$ðl:žw󯃮{Š®ûß4Ç‹R&W(UêÍvo0ž.VÊNÓOgÓv=ºî÷0Š°îð’wD!™÷ÛõBæÝ:‡½º]/g“a¿ÛjTËÅ|VîsÞñîð>Ö¡ëÎr‚$góÅr­ÑîöG“ùr³Uõ£aÚŽç_nAð\w¼;|“dÞ£(¼Óy÷\Û:ŸÚNY/fãa¯Ó¬WJ…\FyŽ¾û“¼Àk ïNÖ=~w–ãEºîÕz«ÓNf˵¢î§³å¸þåz#ë’u`Ýà½?ç= óî“y7£®m7«ùt4趵J1ŸÍHÏÒyg0ïð躧’uO³¼ er…R¥Þl÷ãéb¥ì4ýt6m×£ë~£ëß,y÷G’y¿]/¾çXgã°W·ëål2ìwZj™Ì», +-›&ïÏ;Þ^}w†IÖD9›/–kv·?šÌ—›­ª Óv<ÿr ‚çºãÝà%óEáλçÚÖùtÐvÊz1zf½R*ä2’Èsé¿tÞS˜wøý躧˜·øÝYŽåL®PªÖ[þp2[®u8-Çõ/×Y÷¬ûëßìý9ï™wŸÌ»ium»Yͧ£A·Ý¨•‹ù¬, KçÁ¼Àï÷±îL¼îi–¤xÝ+µf»7O«ÍNÓ†i»ž¯û=Œ"¬;ü€äÝQHæýv½øžcO‡½º]/g“a¿ÓªW鼋<ÇÆïÏ;Þ~9úîÿÖD9›/–«V·?šÌ—›­º'ën9ž¹ÁsÝñîðÍ’y¢ðNçÝsíxÞµ²ZLǃ^»Y¯” +-¹Œ$ðl:™÷æ~7ºî)æ¾;Ç‹R&W(UëÍNo8ž-ÖÊn8-Ç%ë~#ë’u`Ýà¼?ç= óî{ŽmG]ÛnVóé¨ßm7jåb>+‹—Ì;ÃàÝàWûCßa躳œ e²ùb¥Ölw£é|µÙiúÑ0m×óãu¿‡Q„u€’¼û# +-ɼ߮ßu¬óé°W•õr6ö;­zµTÈed‘ç軿1)Ì;üftÝSÌ[üî,Ç‹2Y÷rµÑêöG“ùr³U÷dÝ-Çó/× x®;Þ~@2ïQÞé¼{®Mæ]×vÊj1zíf­Ï»$ð,wó¿ÙǺ3ñº§Y^2¹B©RovzÃñl±VvûÃél9.Y÷Y÷¬ûë?äý9ïAp»øžc›ÆQW·›å|2êw[j¹˜ÏÊ¢À±iòîñ¼ãÝà×¢ïþoÝ9A”³ùb¹Öhw£é|µÙiúÑ0m×óãu¿‡Q„u€”¼û# +-ɼ߮ßu¬óé°W•ÿØ­Ï%Å•£±¼pÂ{ï­ HÈc{Þÿyn©¸Ó½ÿ7¢™aó˜ún½œO†ýN«^-óYEyŽÅ;!hwxSÿ¦;aéÎ ¢œ¤{¹Úhuû£É|¹ÙéÖÑq½ ŒÏšî¬Ý‘îðƒ~}Çûõz‰£Ðwi¼ûíz1{íf½RJâ]x.i÷4I!Þà=±v§éNÛ=Ãñ¢¤dóÅR¥Þìô†ãÙr½Õ̓}¢é%é~CºÀÏ{¶ûçãNãýrŽ£Àw£eì6«ùt4趵²VÈ©²(p™$Þ âÞK÷K÷ /H²š+håZ£ÝŒ§‹ÕfoXGÇõƒ(NÚ¥;Ú~Ø3Þû-‰÷( ¼“}0õÝz9› ûV½Z*泊$ò_ñŽv€7ÄÚ–î/ÊJ6_,Uë­N4™/7;Ý<:'/ŸéÎÚé?ì×w¼_¯ç8 +-}×±-c¿]-¦ãA¯Ý¬U´BN•%gíž&)Ä;¼–î)’fíÎ ’¢æ +-¥J­Ùî dzÅz»7öÉóÃ(¾\i»ÿNw´;ü¨¯v§ñ~9Çaà¹ÎÑÒw›å|2êw[j¹˜Ïª²Ès,Þ A»ÀûaíNKwNešîZ¹Úhu£é|µÙÖÑqý ŠÏšîwšîŸHwøy_ñ~Kâ=¢ñ~²¦¾]/fãa¯Ó¬WJ4ÞI๤ÝÓ$…x€wÃÒ=EÒ´Ý3/JJ6_,UëÍN8™-×;Ý<Ø'/£$Ýo÷Çé/ñlwï´Ýã(ð]çhûÍj1 ºíF­¬rª, +-\&‰w‚x€wóoºšî^d5WÐ*µf»7O«íÞ°lÇõÃ(>_¯ßéŽv€÷ŒwÚîÏxïdL}·^Î'Ã~§U¯–Šù¬"‰<—¡ížÄ;ÚÞ +-k÷ÓãEYÉæ‹åj£Õí&óåf§[GÇõ‚0>_hºßiº"Ýà5¾âýv½^â(ô]ïÆ~»^Ìƃ^»Y«h…œ*KŸù`ñžB¼À;aéž"iÖî¼ )j®PªÔ›Þp<[¬·ºy°O4Ý£$Ýo÷Çé/ól÷ÏÇÆûåGï:GËØmVóé¨ßm5ªe-ŸUe‘çX¼‚v€wÂÚ–îœ Ê4ݵr­ÑîFÓùj³7¬£ãúA'íÎÒí/óŒ÷Çã~Kâ= +-ïdL}»^ÎÆÃ^§Y¯”Šù¬" <—´{š¤ïð>Xº§H:iwŽ%%›/–ªõV§?œÌ–ënì“„ÏtgíŽt€—ùõï×ë9ŽBßuŽ–±ß®ÓÑ ÛnÔÊZ!§Ê¢Àe’x'íïã™î$I÷ 'H²š+h•Z£ÝŒ§‹ÕvoÐtwý0Š/WÚîHwx±¯v§ñ~9ÇaàÑx7õÝf9Ÿ ûV½Z*泊$ò\†¶{š¤ïð.’KûJw^”•l¾X®Ö[þh2_nv†ut\?ˆâó…¦û¦;Ú^ê+ÞoI¼G¡ï샹߮³ñ ×nÖ*Z!§Ê’Àg>h¼Ä;¼ –î)’fíÎ ’¢æ +-¥J­Ùî dzÅz«›ûäa”¤ûíþx ÝàÅžíÎâ¶{¾ë-c·YÍ'£~·Õ¨–‹ù¬"‹<÷;ÞÑîðX»ÂÒãE™¦»V®6ZÝþh:_mö†ut\?ˆâóõúîhwx¡g¼Óvgñ…w²¦¾[/gãa¯Ó¬WJI¼KÏÚ=MRˆwx,ÝS$´;Ç ’’ÍK•z³ÓNfËõN7ÎÉ Âø|¡éþÕî¯>nø¿öë+Þo×ë9ŽBßuŽ–±ß®ÓÑ ÛnÔÊZ!§Ê"ϱx'í;!Iºg8A”Õ\A+×íî`<]¬¶{ã`Ÿ˜úv½˜‡½N³V)rª, |æƒÆ;yÆû«Gà¤{Š¤Y»ó‚¤dsÅR¥Þìô†ãÙr½Ó̓}ò‚0>_hºµû«/à¿âýv½žã(ô]çhûÍj> º­Fµ¬å³ª,òÜïxÿâþfÉ‘¥aéÎñ¢¬æ +-Z¹Öhw£é|µÝ–}rý0Šiºßîð'y¶ûçãNãýrŽÃÀ;9Sß­—³É°×iÖ+¥b>«HÏÚ=MRˆ÷Ø­¯וÃ0[À0'Q9çœ#)fR£9ãýïÇÝ$Ž øÍOWê[DÕE–¥;GJ¬ÝQR4£\©5Û½ÁxºXm§ËÝqý0ŠÓ'm÷,ÝÑîð1òxÿýýóÃâ=‰ÃÀ{Ø×óq·YÎ&Ã~§U¯Z¦®Ê¢Å;!hw(²¬Ý aéÎ ’¬ê¦U­·:ýÑd¾ÜìŽç›ýð‚0NXºçíŽt€‘·{ï´ÝÓ8 +-}×¹_O‡íz1zíf­R64EÖî%Â!Þ ¸²tçH‰µ» JŠf”+µf»7Ïëíát½;®FIÊÚýîhwøy¼ÓvÏâ=‰£À{Ø·Ëq¿YÎ'£~·Õ¨Z¦®Ê’À³x'íÅ•µ;!,ÝyA’UÝ´ªV·?šÌW›ýñr³^ÅI–îïvÿ§Ïà¯w¼³vO“(ô]ç~=vëÅl<ìušõJÙÐYxÚî%Â!Þ ¨²tçH‰¶;/ˆ²¢åJ½Ùé dzÅzw8_ïŽë‡Q’>_´Ý‘îðqÞížÇ{Þþ]ŽûÍj> º­FÍ2uU‘Dþ‹Æ;!hw(ª¬Ý ¡éþÅ‹’¢ê¦Uk´»ƒÑt¾ÚîO—›ízA§Ïošîhº£ÝàüãýçõúN“8ô=ç~=vëål2ìušõjÙÐTYxÚî%Â!Þ ˜²tçòtDYÕ «ZovúÃÉl¹ÞÏWûáaœ¤4Ýþüþ"Ýàãäíþïß?4Þ¿Ÿi¾ëÜ.§ývµ˜ŽÝv£V1uM‘Dþ‹Æ;!hw(¦<Ýóv%E3Ê•Z£ÝŒ§‹ÕvºÜ×£8}ÒvÏÒí'÷ßß??,Þ“8 ¼‡};w›ål2ìwZõªeêª, +-y¼sˆw("v_Ó]eU7­j½Õé'óåfw<ß쇄qÂÒ=ow¤;|œ¼Ý³x§íž&Qè»Îýz:lW‹éxÐk7j•²¡)’˜·{ïÿôüŸXºs¤”µ»()šQ®ÔíÞ`<]¬·‡Óõî¸~%)k÷wº£ÝàÃäñNÛ=‹÷$ŽïaßÎÇÝf9ŸŒúV½j™º*‹Âßxÿ⊆GH–î‚(«ºiUë­N4™/7ûãåf?¼ Š“,ÝßíþOŸ4ÀÿzÇûÏëõL“(ô]ç~=¶ëÅl<èµ›µJÙÐIX»—Ç¡Ý hXºs¤ÄÚ]%E3Ê•Z³ÝŒg‹õöpºÞ×£$}¾h»#Ýàc½ÛÆû÷3£À{Ø·Ëq¿YÍ'£~·U¯Z¦®Ê’À³x'„µ;⊄]GKw^dU7­j£Õí&óÕf¼Üì‡Dqúü¦éŽv€öŽ÷ïi…¾ëܯçÃn½˜‡½v³V)š"‰k÷á8´; KwŽ”X» ¢¤hF¹RovzÃñl¹ÞÎ×»ãúaœ¤4ÝîðÉòvÏâýõýLã(ð\ûv9î7«ùtÔï¶UËÔUYxï„°vG¼@q°ãâaéÎ ’¬ê¦Um´ºƒÑt¾ÚîO—M÷ ŠÓ'm÷,ÝÑîð±òxgíNã=Mâ0ðöõ|Ø­—³ñ°×iÖ+eCS$Q`í^"‡v€"aéΑmw^eE3Ê•z³ÓNfËõîp¾Ú/ã„¥{ÞîHwøXy»gñþú~¦qø®s¿œöÛÕ|:t[šeêª, <‹wBX»#Þ (Ømq„ÐtÿâEIVuÓª5ÚÝÁhºXm÷§ËÝqý0ŠSÖîYº£ÝàƒåñÎÚÅ{‡÷°¯çÃn½œM†½N³^-š"‹OÛ½D8íÅÁÒ#%Úî¼ ÊŠf”«õf§?œÌ–›Ýñ|³^ÆI–îY»#Ýà“ý7Þi»§qú®s¿œöÛÕb:tÛšeêª"‰üwBX»#Þ Øiq„ÐtÿâEIQu³Rk´»ƒñt±ÚîO—»ãúa”¤Y»#Ýàã½Û=‹÷$ïaßÎÇÝf9› ûf½Z64Ež¶{‰pÚŠ‚¥;GJ´ÝyA”UÍ°ªõf§?œÌ—›Ýñ|³^ÅI–îhw(€w¼³vO“(ô]ç~9í·«Åt<趵Š©«Š$ò_4Þ aíŽx€"`—ÅBÓý‹%E3Ê•Z£ÝŒ§‹õöpºÞ×£$}¾h»#Ý ÞížÅ{G÷°oçãn³œO†ýN«^µ ]•E§í^"‡v€b`éΑmw^eU7­j½Õé'óåfw<ßì‡Dqúü¦éŽv€BxÇûÏÏë™&Qè»Îýz:l׋éxÐk7j•²¡)’ÈÑx'„µ;â>;,Žšî_¼()šQ®ÔíÞ`<]¬·‡Óõî¸~%éóõóƒt€bÈÛ=‹÷×÷3£À{Ø·óq·YÎ'£~§U¯Z¦®Ê¢ÀÓv/ŽC»@°tçH‰¶;/ˆ²ª›VµÞêôG“ùr³;žoöà ¢8}~¿òtG»@äñÎÚÆ{šD¡ï:÷ëé°]/fãA¯Ý¨Uʆ¦H"ÿEãÖîˆwøtÿa·^pSå0 ',¹#^€*UªT¨B*—-rÙûŸÿŒ‹&ž)Hò=“x_š+†~ݧ,/HŠºXéoæîÃv¾¼ïð'ÉnEù¨Û®_÷ßwǺÀü¾û0ïÿýûÛ5uuÏÿ¤qøg÷ó`½o m9ŸÉ"ϱý»OÃàÝàõÑugȤw–ãEy6_jÆæÝ:|ºg?ˆâôOQVuÓýíß}Xw¼;ŒÂï¼Ówïç½k›GYäYò~{_Žý±3ßôÕBU$g§ý¼Bßó¯ÆŠ!¤_÷)Ë ’¢.VúÚÜ}ØΗ÷þ$Y~/MÛõëþûîXw…ßwæý¿»¦®ÊâOGv?ÖûÆЖó™,òÛ¿û„0 Þ^]wæwÝ9^”gó¥fl¶ÖáÓ=ûA§Š²ª›îoÿîXw“ßy§ïÞÏ{×6òžgÉOøí}9öÇÎ\ë«…ªHÏNûy'„¾;æ^MC~ß$E]¬ôµ¹ÛÛΗ÷þ$Y~¯M;¬;ÞFåÿóþß¿¿]SWeñ'£À?»Ÿk»1´å|&‹<Çöï>! ƒw€×F×ù]wŽåÙ|©›­u8ºg?ˆâôV”UÝtûcÝ`Tžï>Ì{Û<ª{ž%?á·÷åØû¹ÖW U‘žöóN}wÌ;¼.*†ü¾;/HŠºXéks··“w ¯I–ß«GÓëŽw€‘yÎ;}÷®©«²¸¥qøg÷x°¶C[Îg²ÈslÿîÂ0xwxetÝ2éßåxQžÍ—š±ÙZ‡£{öƒ(NoEYÕM7¼;ÖFæùîü·Í£ºçYr /Þɱ÷;s­¯ª" <;íçúî˜wxU4S !ýºOY^u±Ò×æno;'ï^“,¿W¦Öï£óœwúî]SWeqKã(ðÏîñ`m7†¶œÏd‘çØþÝ'„aðîðºèº3dÒ¿;Ëñ¢<›/5c³µG÷ìQœÞŠ²ª›nxw¬;ŒÎó݇yo›Guϳä^¼“cïwæZ_-TExvÚÏ;!ôÝ1ïðšh¤BúuŸ²¼ )êb¥¯ÍÝÞvNÞ%¼&Y~¯M;¬;ÞFè9ïôÝ»¦®Êâ–ÆQàŸÝãÁÚn m9ŸÉ"ϱý»OÃàÝàUÑugȤw–ãEy6_jÆfkŽîÙ¢8½eU7ÝðîXw¡ç»óÞ6êžgÉ5¼x'ÇÞï̵¾Z¨Š$ðì´ŸwBè»cÞàÑD1„ôë>eyARÔÅJ_›»½íœ¼KxM²ü^=švXw¼;ŒÒsÞé»wM]•Å-£À?»ÇƒµÝÚr>“EžcûwŸ†Á»Àk¢ëÎIÿî,Ç‹òl¾ÔŒÍÖ:ݳDqz+ʪnºáݱî0JÏwæ½mÕ=Ï’kxñNŽ½ß™k}µPIàÙi?ï„ÐwǼÀë¡bé×}Êò‚¤¨‹•¾6w{Û9y—ðšdù½z4í°îxw©ç¼Ów*‹[Gvk»1´å|&‹<Çöï>! ƒw€WD×!“þÝYŽåÙ|©›­u8ºg?ˆâôV”UÝtûcÝ`¤žï>Ì{Û<ª{ž%×ðâ{¿3ßôÕBU$g§ý¼Bßó¯†æ‰!¤_÷)Ë ’¢.Vú›¹ÛÛÎÉ»„×$ËïÕ£i‡uÇ»Àh=ç¾{×ÔUYÜÒ8 +-ü³{lçä]Âk’å÷êѴúãÝ`ÄžóNß½kêª,niþÙýÌ{Û<ª{ž%×ðÛûrìù¦¯æ3Y8–Î;!ôÝ1ïð:h˜B躳œ ɳùJ3w¶óå}‡×$ËïÕ£i‡uÇ»ÀÈ=ç¾{×ÔUYÜÒ8 +-ü³ûy°Þ7†¶PIä9úîÂ0xwx%tÝ2¡ïÎñ¢¤¨ ÍX¿[‡O÷ìQœÞŠ²ª›nxw¬;ŒÜó݇yo›Guϳä'üö¾ûck¾é«ùLŽ¥óN}wÌ;¼ +-š%†ºî,'ˆòl¾ÔßÌí‡í|yßáO’å÷êѴúãÝ`ôžóNß½kêª,þ¤qø'÷so½¯ m¡*’ð?vëÉY5£pd¦q'BÜÝ‚K’_ö¿žËGWåî`ÒC½Ï&ÎáXòî¼;ü(ßï^!ïÎr¼(«zµnµ{ƒñl±ÞÎWÛõƒ(N‹wǺÀÿ½÷»óžÄaàÝo—ã~³šOFýN«Q34Ex–!óNS˜wø9ŠuÏß=_w†åIÑŒZ£Õé&óÕf¼Üî^ÆI±îxw(÷¼“wOã(ð]ûz>l׋ÙxÐk[uSWe‘çØâÝi¼;üÅ»ÓÅ»³/ʪnÖ­vo0ž-ÖÛÃùj»~ÅiñîXw(÷»óžÄ¡ï9·Ëq¿YÎ'£~§Ù¨š" <ËóNQxwø)ȺSź3,/HŠfTÍN4™/7ûãåæx~'źãÝ ÞóNÞ=£Àwíëé°]/fãA·mÕM]•Ežû~wš¼;æ~’$Šþ~wŽeU7ëV»;Ïëíátµ]?ˆâ´xw¬;”ÂûÝɼ§Iú®s»w›å|2ìwšª¡)’À±Lþðîð3u§èJþî Ë ’¢ÕF³ÓNæËÍîx¹9®ÆIJÖï%ñž÷üݳ4Žïn_O‡íz1ºm«fêª,òó•Ï;M“wǼÀç‘ Q4¯ûÃñ¢¬êfÍjuãéb½=œ®öÝ ¢8ÍÈ»cÝ $ÞïNæ=MâÐwÛù¸Û,ç“a¿ÓlT M‘Žeòw¯Ð…w€Ÿ€¬;EWòwgXN֛ͨÞp2_nvÇóÍqý0NR²îxw(÷¼çqxwûz:lW‹éxÐmY5SWe‘瘯|Þiš¼;æ>䈢é|Ý¿ŽeU7kV«;M«íátµï^ÅiFÞë¥ñ~w2ïi…¾ëÜÎÇÝf9› {f½jhŠ$p,y÷ +-Þ~„ïw¯wg9AR4£Zo¶{ÃÉl¹ÙÏ7ÇõÃ(IɺãÝ DÞóž¿{–ÆQàÝíëi¿]-¦£A·Õ¨™º"‰<Ëy§)Ì;|^±îù»çëΰ¼()ºYk´ºýÑt±ÚîOûîQœfäݱîP"ïwÏç=K“(ô]çv>îÖËÙdØk7ëUC•Ec‹w§ñîðyÅ»ÓÅ»³œ ʪQ­[íÞp<[®wÇóÍqý0JÒìù»@¹¼çýõ|diÞݾœöÛÕ|:êw[š©)’À³L1ïæ>Ž¬;U¬;Ãò‚¤hf­ÑêôGÓùj»?]ì»Dqš=žXw(™ßýõÌÒ$ +-}×¹ž»õr6öÚV½ª«²Èslñî4Þ>¤ˆ¢¿ßãEYÕ«u«ÝŒg‹õîp¾:®FIš=_xw(›âÝ‹y>²$ïn_NûÍj>õ;ÍFÍÐIàY&÷ +-MQxwø,²î]Éßa9AR4£Öhvú£É|µÙŸ.·»„q’=žßëþëåñ·˜wòî¯G–&Qè»Îõ|Ø­³ñ Û¶ê¦®Ê"Ï1_ù¼Ó4ywÌ;| EÓùº1/ʪnÖ­vw0ž-ÖÛÃùê¸~%iöx}¿û_¼;”Hñîż?Y‡w¿]ŽûÍr>ö;ÍFÕÐIàX&÷ +-MQxwø$²î]Éßa9AR4£ÚhvúÃÉ|¹Ù/·»„q’=ž¯_¿òuÿƒu€2ù[Ì;y÷×#Kã(ðïöõtØ®Óñ Û²j¦®Ê"Ï1_ù¼Ó4ywÌ;| +-ÉEÓùº1/ʪnÖ¬Vw0ž.ÖÛÃéjßý ŠÓâÝÿ.Öï%R¼ûŸß¿~½ž,‰Cßun—ãn³œM†½N³^54E8–¼{ïõýîòî,'H²fTëÍvo8™-7»ãåæ¸~')Yw¼;”ÐßbÞÿ.Þ=£À»Û×Óa»ZLGƒn˪™º"‰<Ëy§)Ì;|Y÷üÝóugX^”ͬ5ZÝþhºXm§«}÷‚(N3òîXw(¡÷»“yO“8ô]çv>îÖËÙxØk7ëUC•Ec‹w§ñîð9$B]¼;Ë ¢¬êÕºÕî dzåzw<ß×ã$%ëŽw€RzÏ{þîYGw·/§ýv5ŸŽúV£fjŠ$ð,SÌ;EáÝàSȺSt%w†åIÑŒZ£Õé¦óÕvºØw/ˆâ4#ïŽu€Rz¿{>ïYšD¡ï:·óa·^Ìƃ^ÛªWuUyîûÝiòî˜wø’ Š¦óuÿb8^”Uݬ[íÞ`<[¬w‡óÕqý0JÒ,_w¼;”Ô{Þ_ÏG–ÄQàÝíËi¿YÍ'£~§Ù¨š" Ëäï^¡) +-ïŸñýî•üÝ–$E3ªf§?œÌW›ýébß½ Š“ì‘¿;ÖJêßw=²4‰Bßu®çÃv½˜ŽÝ–U7uUyŽùÊç¦É»cÞà¯X÷üÝÿóß/†ãEYÕÍšÕêÆÓÅz{8_m×£$Í/¼;”Wñîż?Y‡¾çÜ.Çýf9Ÿ {f£jhŠ$p,y÷ +-Þývë¹QD¢h}ÐŒÉ @9g”³@ rP°÷¿žÜm×_@««¬w6q/ü%ù»“ù»Ó Ç‹²Z®6ZÝÁX›¯¶û“a¦ï„qr½Ýï麿cÝà'úÈç={÷[GïÚÖY?ìÖ‹ÙdØï4ë•’" ºíFµ¬¦ïÎ1tþîdöî˜wøÓ²Üäç»3,/•rµÑêÆÚ|µÝŸ ÓvÓw“ôÝ|Ýñîð~¿{:ïqú®cõãn½œM†½N³VQeIàXšJß½€w€§ø|÷Böî4à ’¬VjÍvo8™.Ö»ƒ~¶l×£8¹áÝàµ|üž÷Û5‰ÃÀs.¦qÚoVsmÔï¶êÕ’Ry–¡ÞÒy' Ì;õ;Íz¥(‹äÝy–Iæ¢ðîð,÷wO‘wgX>~w¹X©5;ýád¾Rwºq:ۮ燗ïuÇ»À«ù×»û®c™Ç½¶]/fãA·Õ¨–1ŸMóÜ_ïŽy€§ˆ×¼ûÛûÃñél^”KÕz«;Më¶7LËvýï¯ì1ï™÷À÷ë|<è;u9Ÿ {íf­\” +-¹ŒÀ±É»Óxwx–81¼;Ë ™\ARÊÕF»7œÌ–êV?MËñü€¬{DÖýÖ^ÑãÝoäÝÃÀsíóÉØï6«ÅtÔï´ê•¢,æ³iže’y§(¼;<ÇýÝSäÝ–'ï.ÊÅJ­Ùé¦óÕf§§³ízAHÞývKÖï/èûݯaà{ŽeÚv½œÝv£ZR¤øݹ¿ÞóO¯;y÷·÷†ãÓÙ¼¨”ªõVw0ž.Öm4-Çõñîðâ>ïóE×KHÞÝ>ŸúN]Í'Ã^§Y+¥B.#plòî4Þž# E'ïÎrB&W”r­Ñî '³¥ºÕñ»{~@Ö=ºÀëz¼û-~÷ÀwÉ»{m³ZLGýn«^)Éb>›æY&™wŠÂ»À3ÄëNÑ)òî Ë“wåb¥ÞìôGÓùj³Û§³ízAHÞý†w€öõîÑ•¼»çXæñ m×ËÙxÐk7ª%EŠß»¿;¿;æ~ÜãÝßÞ?ŽOgó¢RªÖ[ÝÁx¶XoµýÑ´×Âë÷»ÿv>~Åç×¼_/¡ï¹öùdè;u5Ÿ ûf­\” +-¹ŒÀ±ñ»§ðîðq^(:yw–2¹‚¤”kvo8™/Õ­~8ž-ÇóÃË5ŠîëŽw€×ô÷»¾k[¦±×6ëÅt4è¶ê•’,æ³ižeây§) +-ï?/^wŠN‘wgXž¼»(+õf§?š.V›ÝÞ8m× âw¿áÝà¥%ïþç‘y|ϱÌãAߪËÙxÐk7ªeE*dÓÇ&ïNÇïŽy€öx÷·÷†ãÓÙ¼¨”ªVw0ž-Ö[m4-Çóƒðúýî¿O€_ò™ÌûíFÞ= <×>Ÿ }§®æ“a¿Ó¬•‹r!—x–!ïžÂ»ÀÄq¡èäÝYNÈä +-’R®5Ú½ád¾Twúát¶É»‡—kÝ×ï¯ê_ïe÷Úf½˜ŽÝV½R’Å|6ÍsÌ™wš¢ðîðÓâu§èyw†åÉ»‹r±Rovú£ébµÙí òî®Äï~ûÀ‹{Ì{Dæ=ð=‡¼ûAߪËÙxØk7ªeE*dÓÇþÿÝ1ïð£ïþöþÁp|:›•RµÑêƳÅz«Ž¦åxäݯÑ×»ÿv:~ÍãÝoäÝÃÀsíóÉÐwêj>õ;ÍZ¹(rg™øÝi¼;ü´8-¼û?ìÖçr¢~†áYH"ÅN³÷^°"b¥Gˆÿó?÷ú&î~3»3y®“¸o–K¦³yQ.VêÍN4-5Ý8œLòîþûåÿëŽw€ìñÝ]Û<÷ÛÍj¡Ž½v£Z*HB.“â9&Í;EáÝ๢u§èòî Ë“w$¥T­·ºƒ±:_iÛywÛõðî‘ëmÞ2ïžëXäÝ }½œM†ýN³V.Êb>“Jrì×»cÞà‰îïþú–`8>•É r¡\k´{ɺXoŒýñl9®GÖ= ëþu€Ÿíþî!ywßslótØéÚj> º­z¥¨Hùl:ɳLôî4Þž+ +- EÇïÎrÉt6/ÊÅJ­Ù馳¥¦‡“i9žOÞ= ãuÇ»Àöùîßsmë|Üo7«…:ôÚj© ¹LŠç˜D4ï…w€gŠÖ¢_È»3,OÞ]”RµÞêÆê|¥mwäÝmïpw½Í{\Þ}׉ÞÝÐ×ËÙdØï4kå¢,æ3©$Ç~½;æžæþî¯o †ãS™œ ʵF»7œ¨‹õÆØÏ–ãzdݲîXwøéîïFïî9¶y:ìtm9ŸŽúÝV½RT¤|6äY&zwïÏe…¢ãwg¹d:›åb¥ÖìôGÓÙRÓÃÉ´Ï'ï†ñºãÝà‡û|÷‹ï¹¶u>î·›ÕBzíFµT„\&EÞ=Í;EáÝày¢u§èòî Ë“w$¥T­·ºƒ±:_iÛywÛÅ»|ºÞæ=.ï¾ëDïnèëål2ìušµrA£wçÞóOr÷×·Ãñ©LN åj£ÝNÔÅzcìgËq=²îY÷¬;ÀýÝÃèÝ=Ç6O‡®-çÓQ¿ÛªWŠŠ˜Ï¦“¿;w€ç‰¢BÑñ»³\2Í‹r±Rkvú£él©éÆádZŽç“wÃxÝñîðã}¾ûÅ÷\Û<÷ÛÍj¡ŽÝv£Z*HB.“âY&žwŠÂ»À³ÜÞý…¼;ÃòäÝI)Uê­î`<¯´íŽ¼»íâÝ\oó—wßu,ò^Ì&Ã^§Y+d1zwîáÝ1ïðѺ“w}K0ŸÊä¹P®6Ú½áD]¬7Æþx¶×#ëuÿÀº|¾{½»çØæé°Óµå|:êwZõJQóÙt’cãw§ñîð,QR(:~w–K¦³yQ.–kÍN4™-׺q8™–ãùäÝÃ0^w¼;ÀïîÚæù¸ßnVsu<è¶Õ’" ¹LŠg™xÞ) +-ïÏq{÷òî Ë“w$¥T©·ºƒñt¾Ò¶;òwøÍõ6ï™wÏu,òîÆf½˜M†½v³V.ÈbôîÜûcÞà ¢u'ïþú–`8>•É r¡Tm´{ñºXo¶ûãÙ"ïNÖ= ëþuˆÜß=$ïî{Žmž;][Χ£~§U¯1ŸM'96~wïÏñëëÝY.™ÊäE¹X®5;ýÑd¶\ëÆþt¶Ï'ï†ñºãÝþ‹çýóÝ]Û<w[m5Wǃn«Q-)’@Þgòî/xwx’øÝéèÝ–O¦³yI)Vê­î`4¯´íîp2m¼;ÀŸ®·yȼ{®c{c³^Ì&Ã^»Q+d!—Iñ“ óNSÞž!Zw*Z÷y÷T&'H…RµÑî ÇêbµÙîgËv=ÿdÝ?°î7÷wÉ»ûžc™§ƒ¡kËÙtÔï4k•¢,æ³é$ÇÆïNGïŽy€ïúõðî\ôî¢\(ךþp2[®u#zwÇõß/AÆëŽwˆ=¾»k“wßmµÕ\º­zµ¤HywžeÈ»¿àÝà)âw§ãwg¹d:›•b¥ÞêöGÓùRÓw‡“i;ÞàO×Û¼dÞ=×±Îǽ±Y/ÔÉ°×nTËYÈeR<Ç$ȼÓ…w€ï‹Ö¢_È»3,ŸÊäI)UíÞ`¬.V›íþx6m×ó/äÝ?âwÿÛ±øGÜß=$ïî{Žež†¾^Φ£~§Y+e1ŸM'9öëÝ1ïðM÷w}K0\ôî¢\(ךÞp2[¬7ywËqý÷K½ûïðéñÝ]›¼ûn«­æÓñ ÛªWJŠt{w&zwïßÅ„¢ãwg¹d:›•b¥ÞêôGÓùRÓw‡“i;^ôî!Þà7×Û¼dÞÉ»[çã~»Y-Ôñ°×nTKIÈeR<Ë$¢y§(¼;|×íÝ_È»3,OÞ]”RµÑêÆê|¥mwdzi»ïþ·S ðϸ¿{HÞÝ÷ë|Úúz9›Œúf­\ÅèÝ9¼;î·›ÕBºíFµ¤HywžeÈ»¿àÝàÛâw§£wgnï.)¥J½ÕŒ§ó•¶Ý‘w·ÝÇwÿÛ¡ø‡Üß= .ï¾ëXäÝÍz1› {ífíìÖér¢êFájM"଀""Ί‚³­îÜÿõœHWÛÕÝ{WÌ©J~¼ÏM¬%Öùj¹˜Ï2T†Ì{:•Â»ÀÇD랊Ö=CÑÙ|±\åê ©Ý*Su¥æþh»äÝɺ_“uÇ»ܹ{÷Ð÷œÓa·Õ×ËùdÔïÈMg+¥BŽ¡¾;æ>àîÝ™èÝY¾.¶:ý‘2[¬7[k²]?<“w¿áÝ~¿û?É»žcv¦®-ÕéxЕ¥F‹Þ=KSÑ»§ñîð1QHRéøÝi&W(UؚД»ƒÑd¾\ëÛÝáäx¿¼ûggàKyçýv%ó¾k÷–±Y©3eØkKb«–‹yòî™hÞS)¼;|DòîOäÝ):KÞ½ÊÕR»7OÕ•f˜û£íxAx¾\¯ÉºãÝî½½û¼û9ô]çt°¶›õb>õ;-QàÙ +-ywïÿѺ“w~ÉPL6_,WùºØêô†Êl±Úyw×Îß/×Þàîß=ðÈ»ïL][Î'ãAWn +-5®R*ä:~÷tôî˜wxÔ·ŸïN3¹B©ÂòBSîôG“ùb­ow‡“ãúáÝ»v$¾˜×dÞ¯dÞÉ»»öqoÚJŽ½¶Ô¨sUòîYš"ïþ„w€‰ß=½;•¼;WkHrw0žªKM7£w÷‚äÝÿÁ»üîíÝoäÝÏ¡½»µÝ¬3eØë´Ä:_-óY†ÊyO§Rxwx\´î©ôÓÓs†¢³ùb¹ÊÕE©Ý*Suµ1¬ýÑvÉ»“uÞýïð›_ÞÝsN‡ÝV_/ç“Q¿#7ž­” +-9†þùî˜wxÐÛ»?¿d(&zw–ÄV§?Tf‹õfkíO¶ë‡gòî7¼;À½&ó~½\Îaà9öqgêÚRŽ]YjÔ¸èݳ4½{ïûöóÝi&W(UؚД»ýÑd¾\ëÛÝáäx¿¼ûg'àËùñî×Ë÷sà»öqo›•:S†½¶$Ö¹j¹˜'æ=•Â»À£âwOGïNÑYòîU®ÖÚÝÁxª®4ÃÜmÇ B²î×dÝñî¿IÞý½{è»Îé`m7ëÅLõ;-QàÙèݼ;|T´î©hÝ3äÝóÅr•¯‹­vo¨Ì«a‘wwýàLÞý†wø‹ûw<òî;S×–óÉhЕ›B­” +-9†þùî˜wxÈÝ»3äÝ+,/4[þh2_¬õ­u89®Þ½ûgà zMæýJæ¼»k÷¦¡­ÔéxÐmKW%©èÝÓxwxT”T:~wšÉJ®ÖhÊÝÁx2_jº¹#ïîÉ»ÇëŽwøÝÛ»ßÈ»Ÿ?zwËج3eØk·Ä:_-óY†ÊDóžJáÝà1É»?‘w§è,y÷*WoHíÞ`õ;­¦À³•b>‡w€ŠÖ¼ûóK†b²ùb¹Ê×ÅV§7Tf‹õfkEïî‡gòî7¼;À_½&ó~½\Îa¿»©kËùt<èÊÍF«” +-9†Žß=½;æpÿî¹B©ÂòBSîôG“ùr­ow‡“ãýòîŸG€/éÇ»_/ßÏçÚǽelVêt<ìµ¥F«–‹ù,M‘w»Àƒ¢€¤Òñ»Óñ»sµ†$w㩺Ôtsw°/ÏòîñºãÝþ(y÷[ôî¡ïÚ§½µÝ¬3eØë´Ä:¿;Ceȼ§S)¼;<"y÷'òîÍËU®.JíÞP™ª«aí¶ëçï—+Þàßüòîžs:ì¶úz9ŸŒú¹)ðl¥TÈáÝàC¢u'ïþü’¡˜èÝY^[þP™-Ö›­u89®Fï~KÞý³ãðE½&ó~½^Îaà9öqgÚRŽ]YjÔ¸øÝéøÝÓÑ»cÞཾݿ{®Pª°5¡)wú£É|©é掼»àÝþÓۻ߮—ïçÀwíãÞ26+uª {mI¬sÕr1Ÿ¥)òîOxwxHüîéøÝéøݹZC’»ƒñT]i†¹;Ú.yw²î×dÝñîq÷î¡ï:§ƒµÝ¬3eØï´Dg£wg¨ ™÷t*…w€÷KÞý‰¼;EgóÅr•«‹R»7TfêjcX{òî~p&ï~ûü«×dÞãw<òî;S×–óɨߑ›B­” +-¹ûwǼÀ;EëNÞýù%C1Ñ»³¼ ¶:ý‘2[¬õ­u89®Þ½ûg§àËúñîdÞÉ»»öqgÚJŽ]YjÔ¸øÝéøÝÓxwx¿o÷ïž+”*lMhÊÝþh2_jº¹#ïîÉ»ÇëŽwø›·w¿‘w?>y÷½elVêLöÚ’Xçªåb>KSäÝŸðîð€øÝÓñ»Óñ»sµ†$wã©ºÒ s´]òîdÝñîÿåîÝCßuNk«¯3eÔï´Dg£wg¨ ™÷t*…w€÷JÞý‰¼;EgóÅr•«‹R»7TfêjcXÑ»ûÁ™¼û ïð^“yß=ðÈ»ïL][Î'äÝå¦Pc+¥BîþÝ1ïð.Ѻ“w~ÉPLôî,/ˆ­N¤Ìk}kNŽç‡wïþÙaøÂ~¼;™wòî®}Ü›†¶R§ãAW–5.~w:~÷4ÞÞëÛý»ç +-¥ÿ±[ßË©ª ‡'–ö"bï Õ†Æxrÿ×ó½/$;Î|3gãù'{Ϭç"Öú•9Al´{ƒñl¡n4Ó¦íîù×i÷ ÝÑîÿ"l÷;i÷«çÒv·ôíJ‘§£~§)ÕøJ©Ë° i÷Úž´{ímSߨ‹ùdØk7ê_.æ³iö»ÝïÑC»§i»sU±ÑêƳÅr­öþè\¼°ÝƒtG»üVØîwÒîWÏ=Ÿ;Kß®”ùdÔï4ë5¾BÚ=Ã2´Ýãhwˆîå»ÝÙt6_,sB½Ñî '³…ºÑM{:“v'éŽvˆê¡Ý}ÒîÇelWKyJÛ]ªU+¥BŽ´{*™HÄc1´;D´{œ¶;ÃfH»WøZ½Ùé'seµÕÍÝátv½+i÷{Øî?}ˆ0ÞÃv¿8ǽmhë¥<º-I¬r´ÝÓLê5‰v€gÐtʼndŠ´{®PªTki÷ÑT^®¶†´»vxƯv¿]}ïâœö¶©oÔÅl<ìµ¢À•‹ùìc»#Þ ’ÏvO¾¦˜4mw®*J­î`<“—kÍ°÷GçòÙîAº£Ý~ï«ÝßooWÏ=Ÿ;Òî+e>!íÞ¬ |Ðî,ÚžôØîÙ|±Ì b£ÝŽg u£™öþä\<ÿzC»hwö»Ýïð[ížÍÊœ 6‚v_¨kÍ´i»{þõ†vxÒÿµ»elWÊ|:êwšõ_!ížaÚîq´;DñòÝîl:›/–y¡Þh÷†“ùBÝè¦}8]ïúv{ÿl÷Ÿ¾B€¿ÆGï´Ý}÷â÷¤Ý×K™´{·%Õª•R!GÚ=•L$â±Ú~/h÷8mw†Ív¯ðµz³ÓMæÊj«[»_í~G»<åW»ß®¾GÛÝ6µõr1H»‹UŽ¶{šI½&Ñî M÷X<‘H¦H»ç +-¥Jµ&ÑvŸÊËÕÖ°vGçìúhw€ç}µûûí´ûùDÚ]ߨ‹ÙdØk7D+óY´;<á³Ý“¯)&MÛ«ŠR«;ÏäåZ3ìýѹ|¶{îhwø»õ¡”8ÛPx–"„*%„*Š ôÞ;$Ad½ÿëùÞ7a·XÿgÎsçx7ûÝâÝw†¾Y-fâÝ;ÍšõîiMµÞ]9½;óxÃówÃѸ–Êæ âÝíî`<¯Ö[ÃëλÀ¿úãÝ'£~§Y¯ÜÝ^çÒI5&Þݯxå»;ywÀÛ¾Þ]ñB—QUK‹w/•kvo8ž-VÝ؉w?ØïþÙ!€/äÉžwù]/çâÝ»-ñîÅ›«L2‹„ƒâÝ=n—Ëépð<w¿x÷˜šLç®oïʵf§?œðîp¾Ÿï¾ß™†|÷éxÐm5ª÷òÝS‰¸|wŸ×sáæÝïa¯»|w¯â†#±D2#ß½Rouú£Él¹Þê¦õîÖºóîð~?Þýqÿ Þ}³ZLÇÃ^»Q-— +-ùlJ‹G/CÞðnö»‹u÷x}òÝã‰Tæê¦x_­·ºƒÑtλÀùìw?ˆwߺx÷ÙdØë4kÖ»§5ÕzwåôîÌ;àUÏß= GãZ*›—ïÞhwãé|µÞ¦XwÞþÝŸï>êwšõÊÝíu.TcâÝýŠW¾»“w¼åÛ/ïºïžÎæ ¥r­Ñî dzÅj£;ñîûÝ?;ƒð¥<Ùó.ßÝÔ·ëå\¼{·%ßýæ*“LÄ"á xwÛår:¼;àuÏÞ]±Þ]ÕÒ¹ëÛ»r­Ùé'¼;|ÄÏwßïLC¾ût<è¶Õû¢x÷T".ßÝçõ\¸ywÀÛ¬wwÊw÷*þ`8S“Ö»Wê­N4™-×[Ý´ÞÝZwÞþÅwÜ?ˆw߬âÝ{mñî¥B>›ÒâÑËP€w¼“\w‡Óår{ŽïžHf®nŠ÷Õz«;Mç¼;|„ýîñî;Cï>› {íf­,ß=­©Ö»+§wgÞ¯8¾»ûÂãõÉw'Rö»7ÚÝÁØzwÃëλÀ9þòîýN³V¹»½Î¥“jL¼»Ÿw¼Ïów„.£q-•ÍJåZ£ÝŽ§‹ÕÆ~÷ƒýîŸAøbžìy—ïnêÛõr>õ;­ºõî™d" ýŠW¾»“w¼îÛéÝëÝU-³Þ½Ùé '3ñãÝàL?ß}|÷éhÐmÕ«÷Å›«L*·ßÝãv¹œïxõîNùî^Å/Þ=¦&Ó¹ëÛ»J½Ùé&³åúôîO¼;ü«ïþ¸0íz5ŸŽÝvC¾{>+Þ=*ÞÝçõ\¸ywÀ[äº;œ.—Û#Þ=ŽÄÉÌÕMQ¼{«ÛMçËõV7­wÿλÀìw?Øï¾Y-fãa¯Ý¨•KñîZt[ê½|÷T".ßÝçõ\¸ywÀë¬wwÊw÷*þ`8"Þ=#ß½Rouú£É|¹Þê¦õîÖºóîðÏìw?<îÄ»oV ñî½v£Z.òÙ”†ƒÞðrÝN—Ëí9¾{"™¹º)Þ‹wïFÓã»ïyw8ÛéÝw†.Þ}6öÚÍšõîiM^†xwÀ{ßÝ}áñúä»Ç)ëÝ« ñîcëÝ óaÿÈ»À¹þòîýŽx÷»Ûë\:©Æä»+§wgÞ/xþîÐe4®¥²ùB©\m´{âÝ«ýîûÝ?;€ð=Ùó.ßÝÔ·ëå|2ï^¯Èwψw„ƒ~Å+ßÝÉ»^öí÷wWµ´õîµf»7œÌÄ»ëÆŽw€øãݧ£~·U¯Üo®2ÉÄñÝ=n—Ëépð<{wE¾{LM¦s×·w•Z³ÓÿíÝŸxw8ËñÝż›†õîãA·Õ¨ZïžJÄå»û¼ž 7ïxõîNùî^Å GÄ»g¬w¯·:ýÑd¾\ouÓz÷ï¼;œÉ~÷ƒýî›ÕB¼{¯Ý¨–K…|6¥Å£á`€w¼I®»Ãér¹=ÇwO$3W7Åûj½ÕŒ¦Çwßóîð§wߺx÷ÙdØk7kÖ»§55zâÝo;¾»ûÂãõÉw'Rö»7ÚÝÁØzwÃ|Ø?ßý³ó_Ò_Þ½ßï~w{ï“ﮜÞyüÕówÃѸ–Êæ ¥²x÷Þp<]¬6ö»xw8Û“=ïòÝM}»^Î'#ñîõŠõîI5 üŠ—w¼î—w]FU-m½{­)Þ}2ï®;Þ>äwŸŽúÝV½r_¼¹Ê$±H8(ÞÝ#ÞÝž÷ÏnàÿÒ·Ó»+òÝcâÝs×·wâÝ;ýßÞý‰w€3ß]Ì»iXï>t[ªõî©Düøî.ïxÑéݽŠ?ŠÄÔ¤õx÷Ñd¾\ouÓz÷ï¼;œÍ~÷ƒýî›ÕB¼{¯-Þ½TÈgÅ»GÅ»ûÄ»»ywÀËìuïîï Gb‰dæê¦x_©·ºýÑ”w€ÿ‰Ó»ï ]¼ûl<ï^+[ï®Å£—¡ïxƒýî.×ÅñÝ㉔õîÕF«;[ïn˜bÝïþÙñ€/êwŸ {¦õî¹´¦ZﮜÞyüÅñÝÝâÝ}âÝ£âݳù‚|÷vO¼ûbµ±ßýÀ»À<Ùó.ßÝÔ7ëåìÖgR2Í@áRA@’df# +-*‚䜃€î=_÷ô ‚?.Så}«Î³‰sºíf­\,<=Þßdôd,"ÞÝË»~g}w_à2MÈwÈ¿ˆwo´ºâݧ³ïGÚz÷ÉhÐë4k•’z÷”x÷PÐïõ¸å»Ÿñî€ýN¾ßÝc¼{,¡«w/–«6ïöؼûjùõîuñîϹìíU*7ßÝåt8ÎNOywÀ>Öw÷ŠwÄ’zææþñ©P,ךíî`4žÎw7Öw€ÿ‘z÷õjù>ŸMFÃ^§U¯¼½ªw×âQùîn×¹“wòýîn× ‰wO©w/UÄ»÷£ ï6Øz÷ñ°ßm5ªâÝów×i- ý>Þð+µîâÝ]æ»Ç“©«ÛlîY¼{½Ù1ß}É»À‘¾ß}1›Êwo‹w/¾ﮋw¿ ðî€ß©ww8ÏÍwÆ5õî¯o•z«ÓŽ&³ùûre¾û_§þYŸjÞ­ï^+‹w¼¿É艘ñîžïwgÞ?XÞýB¼{8šÐÒ×wòÝ«V·?«w_óîp˻ϧ“Ñ ×nŠw/<EÄ»{ywÀo¬ïî \Šw×å»ç_¾Þ}:[ðîp´ïÞiÖ*%õî)ñî¡ ßëqóNvß=–Ð3Æ»ËÕF{ëÝ?yw8‚ùî«åb>Sï^ïþœËÞ^¥’qóÝ]âÝÕ¼ÿu ÿw,ïî‘ï‰%õÌÍýãS¡X®5ÛÝÁh<ïþÁ»ÀQÔ»¯WËwùîÃ^§U¯¼½ªw×âQóÝÏżóî€}¬ïîõBâÝSêÝKñî½Áh»€-¶Þ}<ìw[ªx÷üÃÝuZKDÃâÝ/xwÀajÝå»»=^0‰'SW·Ùœ|÷z³c¾û’w€£}¿ûb6ݼ{ñÅxw]¼ûeÀÇ»~¡ÞÝápº6ï®ïþü*Þ½e¼ûlþ¾\™ïþ×á€اš÷ïwo7jeõî=Û}wæ°Ã|wç¹Ë}!ß=×ÒêÝߪâÝûñz÷5ïG²¼û|: ºí¦x÷ÂÓãýMFOÆ"òÝ=¼;à ë»ûüÁp4¡¥¯ïò/âÝ­®ñî Þl°õî“Ñ 'Þ½RRïžï +-ø¼¼;à°­w\Šw×Õ»Ëæ»O7ïþÉ»ÀQÌw_-Íwï4ëòÝsÙÛ«T2 ý^[¾ûïøéd÷Ýc =ssÿ(ß½Öhwû£Í»ðîp$õîëÕò}>3Þ½%ÞýõÙxwmóî.§ÃqvzÊ»vYÞÝ#ß=KïþTïÞl÷£Étλ€-¶Þ}<ì‹w¯¾©wOkñ¨|÷ ·ëÜÉ»ö±¾»×‰wO©w/Uxw°×÷»/Œwï¶âÝ_òw×i- ý>ÞpZwùîn× EâÉÔÕm6÷,Þ½ÞìÈwŸÍË•ùî=ø§}Êy7ß}j¾{¹¨Þ]ï~à݇©ww8œ®Í»kêÝ_ß*õV§7”ïþ¾\­yw8šñî–wo7jêÝo2z"¶ûîÌ;`‹ùîÎs—ûB¾{4®¥Íw¯ŠwïǼ;ØÅòîóéd4趛âÝ O÷âÝ“±ˆ|wï8Àúî>0Mhé뻇ü‹x÷F«+Þ}:[ðî`‹Ýwï‰w¯”Ô»§Ä»‡>/ï8dëÝ—âÝuõîÅòî»òîp$óÝWËÅ|&ß½Ó¬ËwÏeo¯RÉx$ô{=nùîg¼;`×Éî»ÇzæF½{­Ñ¶¼ûïGSï¾^-ß-ïþúl¼»¶yw—ñ;`›åÝ=êÝ“âÝïŸ +-êÝ£ñtλ€M¶Þ}<ìwZõê›z÷´šï~îpðïîï‰%SêÝK•Z³ÝŒ&¼;ØæûÝ[ïþpw-ß=,ÞýB¼»“wüd¼û™ùîþ`H¾ûÕíî»/Wæ»ÿuôà÷)çÝ|÷©x÷n«!Þý%o¼{"¾ øxwÀrÝÕ»»Õ»Çå»gsÏâÝëÍŽ|÷™|÷5ï60ÞýcûÝËEõî:ïø•zw‡ÃéÚ¼»¦Þýõ­Rouúñx÷wÞìay÷ùt<êwÛš|÷Çû›Œžˆí¾;ó°0ßÝyîr_ÈwƵôµz÷*ïvÛz÷ÉhÐk7Å»žŒwOÆ"òÝ=¼;`/ë»ûüÁp4!Þýî!ÿ"Þ½ÑêŠwŸÎêÝ?yw8Úžw¯”Ô»§Ä»‡>/ïØoëÝ—âÝuõîÅòö»ðî`óÝWËÅ|&߽Ӭ½2Þ=è7ßýŒwl;ÙóîóÝk¶ñîsÞl£Þ}½Z¾[ßý9g¼{\½»[½û)ï°úñî1ñî7÷Oæ»F¼;ØiëÝÇÃ~§U¯¼½ªw×6ïîr:¼;`‡åÝ=òÝ#±¤z÷B©\k¶{ƒÑ„wíy÷ªùîi-5ßýÜÉ»vYßÝë „Ä»§Ìw¯|¿ûre¾û_'þyŸrÞw_̦âÝ»­†x÷—üÃݵ|÷°x÷ Þ°ñîgæ»ûƒÆ»_ÝfsòÝëÍŽ|÷ïö1ÞýcûÝËEóÝÑðeÀÇ»ö’ë®ÞÝ­Þ=®ÞýùU½ûP¾ûûrµæÝÀ?Þ½ýýîúÏwgÞ_Ô»;N×æÝ5óÝߪõV§?óî`'˻ϧãÑ@¼{M¾ûãýMFOÄxwÀAæ»;ÏÍwƵôî»/xw°ÍÖ»O6ï^x2Þ=©ÞÝûö°¼û…x÷°|÷뻇ü‹x÷F«+Þ}ºy÷OÞl°óî½v³V)©wO%cÞpˆõÝ}Ëp4a¾{±¼ýî¼;ØÂ|÷Õr1Ÿm¿û•|÷PÀçUï~Æ»¬N~¾»þýîmÞl§Þ}ýõîf]¼ûs.{«Þ=èÿz÷SÞð»u‚µ‚P´ÿeE@PIežç…ý¯§+©Te¨¤°ú$ÒÇsï&Þ‹å½ûôìBøî;µw?»¸¼¾õî%j¾û}ðîçá»o|Þ}¼þî=Þ€-ï>¾ûÒÊZãݯ¼;@©Rï~y~zt°»Ýx÷ÉÆ»w{w²ïÞ¼ûû±‰èÝ×·vöO2ïþÒÁø <ó¾ûÝÍuúݧ&ÇG£wS›wï@RòÝû†ÞÕÞýSæÝonï~zw€²„ïþ¿ûñÁ^íÝW—çg‚w©½{Ÿw UøwßýóÜ—ðÝw÷šïþË»”$ïÝ7Dïþatäíà€w G°îõwï©¿ûxøî_¿%ßýÞ»”'ñî·á»Æïþ1x÷!ï@žÖwŸ¬¿û÷­Ýƒ£“óKïP®œw߉Þ}:çÝÍ;‘æ»w7ß}*z÷íÚ»Ÿzw€²¥ßýâ,z÷•¥…Yï@õwïzý&z÷ÑڻϤÞýúæ®þîOÞ Éw¿º8;9ÜßÙ\_‹Þ},|÷^ï@‹Ä»÷ÕÞ}$|÷ùÅåÕÚ»ïÇïþèÝJ½ûχøÝ·ï>1öÞ»/ùîƒoGF?DïþcÓ»T£þî¿‚w¿ Þý(~÷Oµw74Ð_÷WÞ€„Ô»ïþ1~÷ÃðÝo½;@©šï~ßx÷ÝðÝ¿Ì}ß}x°ùîÿzwþÉy÷éèÝw¼;@%òßýÛ×ä»÷xw2rß}v¡ùîgÞ l©w¿½ûÚzðî'™wéÜüž‚yßýîæ:ýîSÍwï~ÝÕåÝHȾûû±‰Æ»oEï~s{÷ðÓ»”'|÷ÇøÝöÂw_œŸ©½ûhôîo^{w’ÂwU÷þ¡wµwÿ¿û‘w¨@þ»¯.Gï>R{÷>ï@V°îÍwßýsôwÿåÝJ“÷î›?¢wÿ0:òvpÀ»Ð"~÷žøÝç¾|ý–|÷{ïP¦Ä»ß†ï~¿ûÇà݇¼;­ +-ßýûÆÖîw¨BλïDï>íÝ(Òòîãéw?¿ôîeK¿ûÅYüî³yïnÞµ¾ûdãÝ·kï~¼ûw(Wòݯ‚wßÞ}eiÁ»P¬þî]]¯»›ï>•~÷ëÆ»?yw€’dÞý$x÷õµèÝÇÂwïõîdDïþúMôwŸ™¯¿ûÞÁqüîÞ 4Þ€ÿAâÝûâw_\öîŠÞýçÃÝíMôî[wŸðîä+z÷ÕÞ 2Ùw?ŠßýÓÄØûøÝ_ywš’ï>08<¿ûæöÞaøî·Þ dõwÿ•x÷ÝèÝ?ïþnh ¿ñîÿzw"©wz;2úÁ»T®ùî÷©wÿúe®þîÃý½=Þ€´ÖwÿØx÷àÝ/¼;@ùrßýû7ï@;9ï>x÷³‹«ä»¿tìþ©w¿¾ûÒJðîû‡'Þ  +-ñ»ß5Þ}Û»Ð^âÝ{SᄊîÝ*óÌ{ôî×™wŸl¼{·w é7Þýæöîá§w(Søî¹ï>•|÷.ï@S›wßòîUɾûñÁ^ôî3µwõîäh}÷‰Ä»yw€J½ûâ¼w Høî¯âwïÝþ€üw_]N¼{_O÷›×Þ€X°î™wÿÔx÷ÝÄ»ÿòî%J¼ûmóÝxwÚI¾{ÿÀлàÝ?gßýÞ»”«åÝSï>âÝh¿{OoÿàpýÝç¼;@ÅrÞ}³ñî¼;yòßýËWïP©gÞýíЀw £èÝ¿}¯½ûw¨HêÝ/‚wßñî´×òîãéw?¿ôîH¿û™wàyÅï¾áݪ“|÷«ô»ôîäzæÝO½;@%¼;k¾{wË»o7Þýλ”Í»бçßýÚ»”¯åÝ÷ï>íÝÈ×úî“EïþäÝJ“y÷“æ»ÏÖÞ}Ì»£þî]ÞàÏ*x÷¥…Üw7ïüç¹w?ŽßýÑ»”(z÷Ÿ©w_ñî˾ûhâÝ÷¼;@Urß}-õî½Þ€ïð"ï~ãÝø-9ï>åÝ*—÷îëÞ€v¼;À‹ðîtÌ»¼ï@ÇòÞ}Æ»TÍ»бĻ÷5ß}Þ»T,çÝ·¼;må¿û¢w¨–w cï¾ìÝ*åÝèØo¼û­w(w cEï¾êݪ”}÷#ïÀs¼;À‹ðîtÌ»¼ˆì»zwžSôîßâw¿ñî¥óît¬àÝ¿zw€Jyw:–ÿî_¼;@µ¼;K¼{oóÝç¼;@ż;Ë{÷ÏÞ j9ï¾éÝhË»¼ï@Ǽ;À‹ðît,çÝ?yw€Êyw:æÝ^DâݯïþûÐNöÝß{w€?á7޽ǻÒîÝw“ïþË»”(z÷‡û仯.{wŠÕßýUÁ»yw€j¼û¢w Pë»O½û£w(MæÝï>¼ûhöÝ_:ü_xþݯ¼;@ùZÞ}/z÷ï@6ï¾Õx÷[ïP¶âwŸòîäk¾û›Üw?ñî•ðît¬øÝ×½;@u’ï~™~÷Iï@®–wK¿ûÙ…w¨@úÝO½;Ï+|÷5ïP¡Ô»Ÿï¾íÝh¯àÝ—V‚wß÷îyæ݇û½;ùï¾àݪÕîÝǽ;yâwïîíz¾ûlæÝï¼;@¹ž²ï~°·½¿û;ï@«ä»÷Eï>íÝá¿ìÖ‡R"K@ÑRQPɘs–œ%H\ÿÿ{^÷tÃÌ0ƒo«lÞç'îVÌñîCÞð{Öä¼»ß=;{÷²ãݧ¼;äûîÏÎwß7¼;Àf½ûºýî±DÊñî ÞVbÉ»ß^óî€e¾y÷ï«â}÷Š~÷Þ°Äo¼û€wÓ¬wÿ´ß½i¿{.“<œ¿ûï˜s¼{Èýî/Žwÿ˜ðî`’\÷eïžž½ûïpò¼{\½ûÝ£õî-ÞVÁùîïêÝ‹¼;à_ø½ûéŵõîUÞVÃ~÷‘|÷6ïø >ï~äz÷>ïƹ޽ױÞýuöî ÞàËûî™Ù»—Ä»¿u]ïμ€žw¯‰wºçÝßq½{„w€ÿÄ’w¿¹t¼{w¸9ß}7²‹'gïž/Uë¼;¬ÄüÝÇ ï~vl½{4<÷5Þ -¼ûÏ»yw0L½ûÔñîåÙ»gÅ»ïGÃ;êÝ×ywÀœãÝ·ïþðÌ»ÀÊ,¾{Ãñî©DŒwøY|÷CùîçW·òÝ+õ&ï« ß}ò1 ô»xwÀ¿Pï.æÝñî'~ïþÉ»€1~ïþ»¾7÷­ù»çô»Õ»¿ÏÞýïf|-¼{«Qïþx§Þ=n½{ˆw,ð¾{Úùîmùî#ÞŒr½{ß~÷ë‹SÞ°”çݳw-VjÍv§Ç»€iîwノw/éw?òy÷? +-À_Â~÷ ëÝïŸxwX•ïÞ=û–X“ó>{÷pT½ûÙå|÷òìÝǼ;˜äx÷¡õîõj)?{÷d<¶áÝ^Ö»¯«wß G÷å»Ïß½1÷)ïÆø¾ûóÃìÝö"»¼;ÀcñÝc‰tV¿{A¿û€w³¬wÿ´ß½Y¯Èw¿½:—ï~(ß}›w,ò¾{Êùî-õîÞÌ‘ëîÿî'Žwëλï²Þ=®ßýñ¥P®zÞyìw ßûݶx÷¢~÷ÜüÝ·xw€›ï»Ÿ^\ßéwëõyw0ÌõëÝÓ¼;`Ÿw?Òï^’ïÞåÝÀ4Ï»×*Å×'ýî Þ°„÷Ý3ö»×­wòî`ÔüÝÇÎw¿¿¹{÷wûÝo¯ÎO仈wß7¼;ÀÍñî!õî)õî/…rµÑêôú¼;e¿ûH¾{[¼{Q¿{.“v¼ûÓ½z÷„z÷ z÷5Þààz÷ˆ|÷Œz÷ç<ï« Þ}:÷F­,ßýæòìØz÷hX¿û:ïpq¾ûnd/OZï~û Þ½RoÚïþÉ»€ _úÝ'ãÑ@¿{A¿{V¼û~4¼Ã»üèwlCÛâÝ仟œ_9Þý}8Rïþ‹w€Ÿ[|÷V£Z.¼<ªwO%bòÝC¼;À‡z÷Àæ–z÷Ãd&§ß½X©5ÛÝï&¹Þ½ß{Óï~w}q*Þ=λ–’]PïÔïžVïþôj½{‡w£ï>ô»o­zµ¤ßýÈçÝÿt&Ï»'Ä»Ÿ]ÞÜ‹w/×êÝÇ“é”w#üÞ=¯ß=#ß=»üYï¾®ß=Ý—ï~ì~÷Áhü1áÝÀ µîö»7ë•RþùA½{2Û‹ìòî_ÎwßïK¤³êÝ_ +-åj£µðîÌ;üýî£á»ýî·Wç'òÝÄ»o‹wðî€EŽw©wOYï~÷8{÷>ï¹Þ½×m7k•¢~÷\&y¨ß}3°Á»-¾{<•=:½¸–ï^ªÖ[oÝþ`È»€1ówËwïXïþú¤Þ=={÷-ÞàÃûîýîyÞÌSï>•ï>ïÞ¨•Å»ßß\žçÒ õîAõîk¼;ÀÅù½X<©Þýá9_ªÔ›ö»«yÿÓÍ€ÿ¹/ýî“ûÝ úݳâÝ÷£aýîë¼;`~÷€x÷mñîòÝOίníwŽxw0Äõîý^§Õ¨– /êÝS‰˜x÷ÞàO½ûF`S¿ûa2“SïþZ¬Ôšínwsï>ô»oúÝï®/NŻǭwñî_ówßš½{Úz÷û'õîùîãÉtÊ»€žw¯WKúÝ|ÞýOGðWYSó.Þ=¸½Ž&Ò¹ã³ËùîåZC¾û`4þ˜ðî`‚õîŸîwÏ?«wψwß‹ðî€eœï¾Žî‹wϪw)ø¼;ó?"×]½ûhø.Þ½Y¯ˆw¸½:?9Ê$ã{‘]Þ°„ãÝCòÝc‰”õîwâÝ«V§×çÝÀ×»÷ºmñîEýî¹LòP¾ûv(¸àÝ>ß=žÊ^\Ëw/‰wëöCÞ Qï>NÆòÝ;íf­R|}Rïžž½ûÖf`ƒwxyß=£Þý9_ªÖïþÉ»ÀO}éwŸ|ŒGùîZY¼ûýÍåÙq.PïTï¾Æ»À?ìÖr"KÑø„÷Þ á½4Ð ø;÷?ÏVu5#7»Bš‰Èw‰L¼pùîn¯?‰ï^©‰wNfâÝ7úN½ûxw¸Î[ïÞ5ß=%Þ=àó˜ï~û^1ßÝ*ÞÝ)Þ=(Þ=+”ä»÷xwøZ¿¼ûZ[Χ£A·UWï†Ä»»xwÀ{Ô»[¬6óÝñ„z÷F»7ÏKM¼ûþp<òîpµ‹w×·ëÕ“ùîÕr1ŸIÅ#Æ»;xwÀ;dŒw¿5ß=*ßýþáñüî[Þ¾†Z÷‹wŸŒúóÝ“¯ßý»øÃï~#ßÝît{|ùîÙ;ãÝ»ƒñÔ|÷çƒùîÌ;\áüî;}#Þ}6ö;Íšz÷X$ä÷ºywÀ».ßÝ%Þ=M¤Œw¯·ºƒÑt¾ÔÖ¼;|‘_Þ][-Ä»÷Ä»WJ…\Z¼{P¼»S¼»•w¼åâÝêÝã©l¾X®šïþ´ZouÞ¾„z÷ãñ°—ï¾\ÌÆÃ^»¡Þ= ›ïn³ZxwÀ[^¾{$žÊ¨wïôG“‹wWóþÝÝ€¿ØóÝÏûÝV¾ût<ïþøp—M'¢æ»ßïþïxåòÝÝ^¿x÷¤ñîµf§?œÌÄ»oôï_à­wïšïžïðyÜN»|÷ÞðóÝ­âÝâ݃‘X2+”*âÝ{âÝ+w€¯qñîúv­-çÓÑ Ûª«wGCâÝ]¼;à}êÝ-V›ùîáXB½{£ÝŽg‹¥|÷ýáxäÝàJÆ»ÿ{z÷Õ“x÷¾x÷j¹˜Ï¤âãݼ;à]²ƻߚïM¤³w÷âÝã©|÷ínÿ|0ßy€O“ë®Þ}§oä»OFýNS½{òõ»w ãÝoä»Ûn/ Þ=¥Þ½ÕåÝà+½|÷Ùd(Þ½V)Ä»Ç"!¿×Í»>pùî.ñî¡hÜx÷j]¼ûh:ÒÖ[w€/ Þýx<ìÅ»kË…x÷^Ûx÷\Z¼{P¼»Óa·YywÀ;Îïî0Þ=OeòŲ|÷¾|÷ÕéÝÕ¼wùà¯õÃ|÷Ãó~·5Þ},Þ½ñh¼{"Vï~k³ZxwÀÛ~yw¯_¼{R½{³ÓMä»oôïW{õîÓñ +Þýáþ.›NDÃAŸÇí´Ëw7Öw¼rùîn¯?‰%3¹B©Rï>œÌxwø"ï®o×Úr.ß½U7Þ=%Þ=àó¸xwÀGÌw·Úì§|÷p,™VïÞî‰w_,5ñîûÃñÈ»ÀUÔºŸÞ}õ4ŸŽúâÝ«åb>“ŠGCòݼ;à²7‹Õv{z÷„x÷û‡ÇF»7ï¾ÝíŸæ»3ïðIçwßéùî“Q¿ÓTG^¾ûwçð2ÞýF¾»Ýéöøáh"•½“ïÞêÆSÞ¾ÈËwŸM†âÝk•RA¼{,ò{ݼ;àC—ïîïŠÆw¯ÖÅ»¦ó§Õz«óîp5õîÇãa/Þ][.Ä»÷ÚÆ»çÒâ݃âÝâÝ­¼;à]çww2ùbY¼{§ÿË»«yÿîöÀ_ê‡ùî‡çýnk¼ûX¼{ãÑx÷D,l¾»ÍjáÝïùåݽ~ñîIãÝkMñîùî}Ç»À•^½ût<èŠw¸¿Ë¦ÑpÐçï~+ÞÝXwÞð†Ëww{ýÁH,™ÎJñî½ád¶Xi¼;\ïâÝõíZ{šOGƒn«®Þ= |—Óλ>b¾»Õfw8廇c õîvo8ž-–Úf»ÛŽGõîÌ;|ŠZ÷Ó»¯ä»÷;­zµ\ÌgÄ»‡ä»;xwÀ‡d!n,«íÖ|÷h"½»xï>øùîÏÞ®q~÷¾‘ï>ïÞ¬G^¾ûwÇðG2ÞýF¾»ÝéöøâÝSêÝ[ÝÁx:_jë­Î»À•Ô»Õ»k«Ål2ì‰w¯” +-¹t2 ú½nÞð—ïîïŠÆS™|±\­·ºýÑtþ´:½»š÷ï®ü•~˜ï~8ìwÛ¶\ÌÆÃ^»¡Þ= Ëww:ì6+ïøÀùÝÆ»GâIõîÍN4‘ï¾Ñw¼;\åç»?›ï>ºíÆãÃý]6ˆšï~k³Z,rÝywÀ›.ßÝíõ‡"1ñî…R¥&Þ}8™ñîð.Þ]ß®µå\¾{«n¼{J¼{Àçq;íòÝoxwÀ»Ìw·ŠwwŠwŠwOçŒwo÷Ä»/–Úf»ÛŽGõîÌ;|‚Z÷Ó»¯žæÓQ_¼{µ\ÌgRñhH¼»‹wüŽzw‹Õf¾{8–ï~ÿðØh÷ãÓ»?xwø¼ó»ïô|÷ɨßiªwOÆ#Æ»;ÎïþÝiü¡þQónµÝŠw÷øáh"•½“ïÞêÆÓùR[ouÞ®¢Þý¨Þ][-f“a¯Ó¬UJ…\&‹ý^7ïø­ó»Û.ñî¡h\¼{±\­·ºýÑtþ´:½»š÷ïîü…~˜ï~8ìwÛ¶\ÌÆÃ^»a¼{: Ëww:ì6+ïøÐùÝÆ»GâÉL^¾{³ÓMä»oôïWøùîÏæ»OÇñî÷wÙtâôî·6«Å"×w¼ãòÝÝ^(ï^(Ujâ݇“Ùb¥©w?òîðIï®o×ÚÓ\¼{·¥Þ=•ˆ†>Ûi—ï~û>pñîNñîAñîéœñîíž|÷¥¶Ùîö‡ƒùîÌ;üßÔºŸÞ}%Þ}Ôï¶êÕr1ŸIÅ£!ñî.Þð{æ»[m滇c‰tîîþá±Ñî ƧwæÝàÓÎï¾Ó7âÝg“Q¿ÓTGŒwwœßý»Ãøcý#çÝb±ÚnÅ»{|p4‘ÊïÞêÆÓùR[ouÞ® Þý¨Þ][.f“a¯Ó¬UJ…\:‹ý^7ïøï~#ßÝît‰wEã©L¾X®ÖÿËn}.)Ž$PŽÁÞÈâ½2x/DÁD½ÿólfŠj˜Ýn¨þAWÄý^✑9ž-×Ûýç»ûóþê|;×w?ŸOžÃÞ}>µô¡ÿ£ïÎs‘pï¿p{wŽ½» «þ»kÆx¶X‘w?ºÞàË~¼ûûõÝ—ó‰©{íFµTPÄ뻿…CÁ ]w¼;ü_÷ïK¤2‚¤ʵf§¯Öt±ÚìlÿÝ/þ»cÞžä¯;{w×9ì·ëålbŽìÝóäÝÓÉxŒÐwàÝ৮ï +-G8ž¾{NRüwêÖtÎÞÝñNdÞñî_ò?Þ}lŒÝV½RÌËb–¼{ï ƒ¡ðÛõÝE¥Pª6Ú½¡nNæË5Þà÷øï~!ïî¹Gòî«Åtlh}öîª,°wçnïþê,ÀŒ½{€¾{„Å“iòîyúîÝÁȜ̖ëíþà¸ìÝýyu¾™ë»ŸÏ'òîönCÞÝÒµ~§Y+TIȤ1¼;<äþÝ£äݳ¢œ/Vê-òîÆx¶À»üžïþ~òöîó‰¥{mú£ïÎs‘pï¿t{w.O¤²‚¬Òwïô5c<]¬6{ûèzäÝ/þ»cÞžÂÞýoöî®s°wëå|bŽÈ»7ª¥¼"æÒÉ8y÷·p(¤ëŽw€Ÿ¸÷X"•$µP®5É»ë}÷}t¼ÓùŒwø +-ºî·wßo×ËÙØ º­z¥”—Å,y÷(¡ïÀ»À/\ß=Žp<}÷œ¤ÊÕF»7Ô­É|y}÷w¼;À—ÜÞÝsäÝW‹ÙØÐØ»UY`ïÎÝÞýÕQ€?Ú_tÞƒÁPø¼{<™Î‰J¾Dß}02É»¯·ûƒã²w÷çýÕøV>üw¿øïnï6«ÅÔ2´~§Y+TIȤ1¼;<ˆ½{€¾{„’wÏŠr¾X©·ºƒ‘1žáÝ~Ë统ßOžÃÞ}>µôa½»"åè»ó\$»Ànïαwd•½{_3ÆÓÅŠ¼ûÑõÈ»_üwǼ<á¿ß}½œOÌÑ°×nTKyE¼¾û[8 ÒuÇ»ÀOÝ¿{,‘Ê’Z(ך¾¦[äÝ7;›¼ûé|Æ»<Ï_wöî®sØo×ËÙØ ºìÝe1›NÆ£|„¾{ï¿t}÷P8ÂñôÝs’Bß½ÝêÖd¾¤ïîx§w¼;Àüëݳ±¡ º­z¥¨Ê{wƒ¡ðy÷x2•|©Ú ï>2É»¯·ûƒã²w÷çýÕøF>üw¿w÷Ü£½ß¬SËÐúf­\T%!“JüãÝ_øñwÐwðQòîYQÎ+õVw02Ç3¼;Àoø|÷óûÉsŽön³šO-}ÈÞ½ H9òî1¼;<îöî{wAVÙ»÷5c<[¬È»]¼ûÅwÌ;ÀÃüu¿¾ûÁÞ­—ó‰©{íFµ”WDöîìµé»+RŽ¼{ ïϹ½;ÇÞ]UòîÍN_3ÆÓÅj³·®w{wÌ;ÀCüugïî:‡ýv½œOÌy÷Fµ”WDöîìwšµrA•„L*»÷WǾöîúî>JÞ=+Èùb¥NÞ]3ƳŊ¼ûÑõÈ»_üwǼ<À_÷ë»ìÝz9Ÿ˜ú°×nTKEÊÑwç¹H8„w€'ÜÞ‹Æ©Œ ©År­Ùék†5]¬6;›¼ûé|Æ»<îîÝ]ç°ß®—³‰9té»ç1—NÆÉ»¿…CÁ ]w¼;<äîÝyúî9I)wo÷†º5ý»uº¤(š@a8F3[Á]qßQDqPkòþ¯g¾O*K;¦«*ÍþaeÄy.âœ×\Óv?ቴ{ïÏþC€/à-j÷ i÷À÷H»ÛÖj9W&£~§)‰•r‘´;Ë$h»ÇÐîðaô3bqï¤ÝÓÙ‡ï¹ÎÖ¶Œå\‘‡¤Ý¥j¥tm÷äµÝchwx@Ôîñ—׿H»§³y®\ëÍN4™-–+ëÿÚñð×vÿFÚýGÏÝomÓÐÔ©<ìµµ*_*ä2©ûvöÀ—qm÷m÷Ã’v/–*U‰¶»¬Ì—†eo×óƒð|¹ Ý>„¦ûv?8»ÍÚÔêt<è¶ê5çh»3ÉÄë Útk÷$›Êä +-%¾Zk´{CYQ5ô·{×;áéŒvø·¨Ý/´Ýýk»[+}1›ŒúV]Ê\>›&íþ×ëK‡ï¹ÎÖ¶Œå\‘I»7%±R*’vg™m÷ÚB#¿¼þEÚ=ÍseA$íÞMf }e]ÛÝ¿kwÄ;À/]Ûýi÷S=w¿µMCSyØk7¤*_*ä2)6yk÷gß|!×vÑvO0,i÷b©"JÍN$+óåʲ·Žëùi÷ Úàhºÿh÷ƒ³Û¬M]S§ãA·Õ¨ ›&íNÓ=NÓí¸o÷iwŽjVw0žªšn®7{çð½Ý£xö-üÑÞÛý|ßs­m˹"ú¦$VÊEÒî,“ íC»ÀƒèsÄâ4Þ“L*ÍseA¬“vMf }µÞìH»ûwíŽxø…k»#í~ +-ƒ£çî·¶ihª"{í†TåKÅ\&Í&oíþì€/åÚî1Úî †%í^,WD©Ùé&Ê|¹²ì­ãz~ž/´;ÀoÑtÿÑîg·Y›º¦Nǃn«Qx®Ë¤ÐîðY·vO²éL®Xâ«R£ÝÊÊ\3L{»w½cžÎ—oQ¼?ûþ`oQ»_h»û×v·Vúb6õ»­º(”¹|6b’4Ýã4ÝÑîðûvOerŽjVw0žªšn®7{ç€vø˜÷v?ŸÃÀ÷\gk[Ær®È£~§)‰•r‘´;Ë$h»ÇÐîð0ú±8÷$“Jgó\Yë¤ÝG“ÙB_­7;Òî>m÷KÔîˆw€ŸŠÒ´û) Žž»ßÚ¦¡©Š<ìµR•/s™4›¼µû³/¾˜k»Çh»'–´{±\¥f§?š(ó¥aÙ[Çõü <ŸÑî¿ó·v?8»ÍÚÔ5u:t[šÀs…\&…v€Ï»µ{’MgrÅ_•íÞPVæšaÚÛ½ëƒðDÚ=Š÷g?#Àë-j÷ mwÿÚîÖJ_Ì&£~·U…2—ϦSL’¦{œ¦;Útßî©L®ÀñB­ÑêÆSUÓÍõfçÐîñÞîçsøžëlmËXÎyÔï4%±R.’vg™m÷Ú>¾G,Nã=ɤÒÙ£Ý~íoí~pv›µ©kêt<è¶5ç +-¤Ý´;ü ·vO²©L®Xâ«R£ÝÊŠªæµÝAx"íÅû³¿àõµû…´{à{´Ý­Õr1›ŒúV]Ê\>›&íNÓ=NÓí»kw†´{ã…Z£ÕŒ§ª¦›ëÍÎ9ý»vG¼ü£÷v?ŸBÒîî~k[Ær®ÈÃ~§)‰•R‘´;Ë$h»ÇÐîð)ô?bqï¤ÝÓÙöÚÍZYi»ó\’¶;ƒv€¡?Â$ßüEÚ=•É$¥Rkvú£éb¥ê†u89¤Ý#ï×8Þý’_Êó›vwíãÞÜjëål<è¶Õ’\ÌgÓϾ¶û£gþ`·vgh»'9ž¶»(—kvo8™/7ÚÎ$íîúhw€ßxi÷ i÷0ðh»½˜ŽúÝV½¢HÅ\&%p,IwÒîßÐîð!¯íÎòB:›/Ê¥j£ÕŒg˵¶5÷GÛõÚî—¸Ýïwât¿’tH»;§ƒµÓ7«ùdÔï4keE,vç¹$i÷Ú>Š> iwï,'¤2¹¢¤Tê­N4]¬TÝ°Ž¶ãat>£Ýþáù¾Ý}—´»¹Ó6ËÙdØk7ªeYÌgÓÏÞÚaîð1q»'H»'9ž´{ATʵf§7œÌW}gNŽç‡Ñi÷8Þ}”_ÈK»_H»‡ïÚǽ±U׋ÙxÐmÕ«%©HÛC»À'¡íÎÜÚå…t6/Ê¥j£ÝŒg˶3÷GÛ}Óîˆw€ÿ‹ÓýJÒ= +-Ï9,CWW‹é¨ßiÖ*ŠTÈeR¤Ýiº'hº£ÝàC^ÚÄ;ËÑv/J¥J½ÕŒ§‹µº5h»{AHÚý‚vxëù¾Ý}—´»¹Ó6ËùdØk7jeY¤íÎsIÚî Ú>Œ~ “HvOr|*“+HJ¹ÖìôGÓùJÕ ëprH»G$Þ¯q¼?ú*¾Œ—v¿vßµ{s«­—³ñ ÛjTKr1ŸM <ûÚîž|øÃÝÚ¹µ;Ë élA”ËÕF»7œÌ–mg’vwýûvG¼¼ˆÓýJÒ= +-ϱ–¡««ÅtÔï´êE*æ2)cIº“vÿ†v€»kwŽ´{¾(•ªõVw0ž-ÖÚÖÜm×BÒî´;À½çûv÷=çt°vúf5Ÿ {f­¬ˆÒî<—$íž@»Àg oÂ$h¼“vOerI©Ôšþh:_©ºaNŽ„‰÷kï>K€/â¥Ý/´Ýßµ{s«­—³ñ ×nTK²˜Ï¦ž½µ;à ÝàãníÎÐvOrÁK»“xÿ»õµ¥*¶@ax4\HQ Š9g1¡`$SBU¿ÿëô{ï®}o Ï8Îï!æü6mwI©Ôšþp2××»ƒuºÚŽ„‰÷äï¯>L€ÿ¶»kßÎGÓØ®³ñ Ûªkªœ¶;ÇæÒv§Ðîð$é£P4MÚ=ÇrùB±,W´F»7Ï–ëíÞ<]nŽçowÄ;ÀßYº&1i÷0ð\ûz¶ÆFŸOGýN³VU¥’(ðó_»¿zìàÿBÖîTÖî Ç bIV«õVw0š.Vãp<_m×ÒvÑî_Y»' I÷ˆ´»s»œ¬ýn½œO†½v£VQ¤b!ϳ IwÒî¡ÝàI¾µ;›¶»¤TjÍN8™ë›ÝÁ"íîxAÝïqòˆ÷W_&ÀËýÑî¾KÚýhÛÕb6t[uM•Ë¤Ý96GÚF»Àó¤ŸBÑY¼³\¾P,Ë­Ñî dzåz»7O—›ãùaôñ»Ýïðö²tÿLbÒîaà»öõlŒ¾˜Žúf½ªJ%Qà9&kwŠBºÀ³díNeíÎp¼ –dµZou£ébµ5Ìãùj»~¶{ŒvH}eíž$$Ý£0ðœÛådíwëå|2ìµµŠ" yžeHº“vÿ íOó­ÝÙ´Ý%¥Zkvú£É\ßìVÚî^F÷{œ<âýÕ§ ðb´»ï’v?šÆvµœÝVCSå2iwŽÍ‘v§ÑîðLé«Ptï,—/ËJEk´{Ãñl¹ÞîÍÓåæx~}ünwÄ;¼¹,Ý?“˜´{ø®}=ÆF_LGýN³^U¥’(ð“µ;E!Ýày²v§²vg8^˲ªÕ[ÝÁxºXm óx¾Ú®¤í£Ý²t'íž$$Ý£0ðœÛådíwk}>öÚÍZE‘Š…<Ï2$ÝÑîðdßÚ%í^’”j­Ùé&s}³;Xi»{AÝïqòˆ÷Wß&ÀKýÑî¾KÚýhî·«ål<趚*—I»slŽ´;M§éŽv€§I…¢Óx'íž/ËJEk´{ÃÉl¹ÞíÍÓåæx~}ünwÄ;¼µ,Ý?“˜´{ø®}=ÆF_LGýN«^U¥’(ð“µ;E!Ýà™²v§Òvϱ\^˲ªÕ[ÝÁxºXm óx¾Ú®„¤Ýc´;ÀWÖîIBÒ= +-Ϲ]NÖ~·Öç“a¯Ý¬U©XÈó,CÒíO÷_»3/ˆ%I©Öšþh2×7»ƒ•¶»„‰÷äï¯>N€úÞîï’v?šûíj9º­†¦ÊeÒî›#íNÓiº£Ýà‰Òg¡è4Þ–ÏŠe¥¢5Ú½ád¶\ïöæérs<ÿ{»#Þàeéþ™Äñ= +-I»Û׳u06úb:êwZõª*•D瘬Ý) +-éÏ•µ;•¶{Žåò‚X–U­ÞêÆÓÅjk˜ÇóÕvý $í£ÝàÝ}eíž$ñýƒ´»çÜ.'k¿[ëóÉ°×nÖ*ŠT,äy–!éŽv€ð_»3/ˆ%I©Öšþh2×7»ƒEÚÝñ‚0"ñž<âýÕ× ð2ßÛ=ð]ÒîGÓØ®–³ñ Ûjhª\&íα9Òî4¦;Úž*ýÒî$Þ–ÏŠe¥¢5Ú½ád¶\o÷æérs<ÿ{»#ÞàmýJ÷ø…¤ÝíëÙ:}1õ;­zU•J¢ÀsLÖî…t€g{´;MÚ=ÇryA,˪Vouãébµ5Ìãùj»~’vÑîðÞ¾~µûý# +-}Ϲ]NÖ~·Öç“a¯Ý¬U©XÈó,CÒí?"mw*kw†ã±$)ÕZ³ÓMæúfw°NWÛñ‚0"ñž Þà­ýÛîqÚîïÚ·óÑ4¶«ål<趚*—I»slŽ´;M§éŽv€'Kß…´;‰w†åó…bY©hvo8ž-×Û½yºÜÏG»üýH÷$¾ß£0ð\ûz¶ÆF_LGýN³^U¥’(ð“µ;E!ÝàùíN“vϱ\^˲ªÕ[ÝÁhºXmŒÃñ|µ]?I»Ç¤Ý?Ñîð®¾~·ûGúžs»œ¬ýn½œO†½v³VQ¤b!ϳ Iw´;ü´Ý©¬Ý–Ä’¤TkÍN8™ë›ÝÁ:]lÇ ÂˆÄ{’díŽx€·ôo»Ç¤ÝÃÀwíÛùhÛÕb6t[ M•Ë¤Ý96GÚ¦ÓtG»ÀÓ¥ÿBÚ=w–ËŠe¹¢5Ú½Áx¶\o÷æñrs†¢Óxg9!›—”b¥ÞìôGÓÅj»?é†i9žvÑî𙾞íÝH»»¶y9kÇÝf9zíFµ¬Ê…œÈsLÚî…t€WIÛJÛáx1W‹åZ£ÝNæËÍþ¨WËqý $ñ~G¼ÀGz´{œ´»ï9¤ÝõÓa»^LGýn«^))R>+ð,CÒ´û/´;¼Ì£ÝI¼3,/dó²ZªÖ[ÝÁxºXï§óÅ´]ÏG»ÀçúN÷{Ea@Úݺúq¿YÍ'Ã^§Y+•BN86CÚF»À+%/CÑ4i÷ Ë‘v—”b¥ÞìôG“ùj»?éÆÕrõ;Íz¥¨H¤Ý96Mw:Iw´;¼Pò4¤ÝI¼3,'dó’RªÔ[þhºXm'Ý0-ÇóÒîÏxÿé'x›¯g»G7Òî®m^ÎÚq·YÎÆÃ^»Q+«r!'ò“¶;…v€ûnwš´{†áx1WPŠåZ³ÝNæËÍþ¨WËqý $ñþhwÄ;|ŒG»ÇI»ûžCÚ]?¶ëÅtÔï¶êÕ’*å³Ï2$ÝíþÓ£ÿoI»SßíÎòB¶ «¥j£ÕŒ§‹õî /¦íz~Òî1Ú>Ë#Ýïq…ï:ÖÕÐûÍj>ö:ÍZ¥¨H9QàØ iwšNÒí/•| E§ñÎrB6/)ÅJ½Ùé&óÕvÒ«åx~FQ|G¼ÀGù¯Ýoa๶y9k‡Ýz9ºíFµ¬Ê…œÈsLÚî…t€WKÛJÛáx1WÕr­Ñî ƳåfwÔÎÓv½ ¼¡ÝàÓ<Ó´{à{Žu5ôÓ~»šOGýN«^))R>+p,CÒ´û/´;¼Ü£ÝI¼3,/dó’ZªÖ[ÝþhºXo'´»ãùi÷˜´ûo´;|Š¯g»G·0ð]›´»vÜo–³É°×nÖÊE¥yŽÉv§ÑîðÉÛP4MÚ=Ãr‚˜“”b¥Öìô†“ùj³?êÆÕr\?I¼ßïi»#Þà#<Ú=NÚÝ÷\Û¼œO‡Ýz1 º­Fµ¤Ê…¬À³ßíNQHwxƒ¤Ý©´ÝŽsY-Wíî`<[¬wí|1m×óÑîðaé~£( |ϱ®†~ÚoVóÉ°ßiÖ+EEÊgŽMÓNÒí/—ü iwï Ë Ù¼¤”*õf§?šÎWÛýI7®–ãùA!Þà“ü×î·0ð\Û¼œµãn½œ½v£VVåBNä9&mw +-íoñÝî4i÷ Ãñb® ˵F»7Ï–›ÝQ;_-Ûõ‚ð†v€OòLwÒîï9–iè§Ãvµ˜ŽúV½ZR¤|VàY†¤û£ÝzÎà$íN}·;Ë Ù¼¬–ªõVw0š.ÖÛÃé|1I»ûi÷g¼ÿô£¼Ü׳ݣ[ø®c] í¸ß,g“a¯Ý¬UŠJ!' +-›!íNÓIº£Ýà ’Ç¡è4ÞYŽ´»¤+µf§7œÌW›ýQ7®–ãúAHâýÑîˆwøßKÓý÷=NÚÝ÷\Û¼œµÃn½˜ŽÝV£ZVeÒî<ˤíNQHwx´Ý©´ÝŽsY-Wíî`<[¬wí|1m×ó“vÑîð¾Òv¿ßã( +-ßu¬«¡ŸöÛÕ|2ìwšõJI‘òYc“t'íþ ío’Æ;ý‰w†å…l^RJ•z«ÓMç«íþ¤WËñü Œ¢øŽx€ð_»ßÂÀsmórÖŽ»õr6ôÚZ¹(r"Ï1I»ÓhwxŸïv§I»gNs¹X®5Ú½áx¶ÜìŽÚùjÙ®„7´;|ˆ?éGaà{Žeúé°]-¦£~§U¯–T)Ÿx–!éþMQHwx›¤Ý©ïvgy1›—ÕRµÞêFÓÅz{8/¦íx~@Úýï?}«/õ§Ý£[x®c] í¸ß,g“a¯Ý¬UŠŠ”ŽÍv§éÙ­ÜFٌˆ:¸ãÞ{ï¦w\’ý¯ççÃ™Ì +-®-qßgçuÇ»À‹êPt:ï,'HJ¾X®Ö[ÝþhºXm'Í°Ï£8™÷ŸwǼ@¦ý]÷äÝ£0ð]ÛÔ/Çýf9› {ífM-r²ÈsLúî…u€×IßJßáxQÎJj­Ùé 'óåf¼è¦íúAHÞýž¼ûÞ²íûï»ß®qúžcÚù°]/¦£A·Õ¨VŠyE8–IÖ=y÷?xwx¡ŸwOæayARòÅJµÑêÆÓÅzw8k†åxAÅ·ÛýñHßóöóîwòîa໶©_NûÍj>ö;ͺZ.äd‘ç˜ÏäÝi¼;¼éEÓÉ»2œ ʹBY­7;ýÑd¾ÚîOÝ´]?ˆâ+Þþü¬ûã~»ÅQxŽehçÃn½˜Ýv£V)åIàÙç»SÖ^Š¼;õ|w–%¥PªÔíÞ`<[®wdzfÚŽ„Qòî˜wȼï~£ÀwK¿œöÛÕ|:êwZõj¹˜—EcÓu§ÉºãÝà…Hy’w'óÎr‚¤ä‹åj½Õí¦‹ÕöpÒ Ëñü0Š“yÇ»@Æý®{òîQx®mêçãn³œ‡½v£¦– +-9Yä9&}wŠÂºÀk=ß&ïÎp¼(ç +-%µÖl÷†“Ùr³?^tÓvý $ïþwÞßW€ÿ‘ßw¿]ã(ô=Ç2´Óa»ZLGƒn«^­óŠ$p,“¬{òîðîðbäÝ)ú#™w†åIÉ+ÕF«;OëíᬖãùaDæýçÝ1ïQ×¼{ø®mê—ã~³œO†½N³¦– 9Yä9æ3ywï¯GÚCÑtòîŸ 'ˆr®PVëÍN8™¯6ûÓE7m×Bòî÷äÝ¿ðîUßß=Y÷(ô=Ç2´óa·^Lǃn»Q­”òŠ$ð,“¬ûMQXwx9òîÔóÝY^””B©Rk´{ƒñl±ÞΚa9^Fñív<ÒwǼ@&¥ëþõ¸§ïø®mê—Ó~³šOFýN³®–‹9Y8ö3ywš&ëŽw€#õ¡ètÞYN”|±\­·:ýÑt¾ÚîOÝr\?ˆâ+Þ2í;}÷Çã~»ÅQxŽmhçãn½œ½v£V)’wçY&}wŠÂºÀë¥ïN¥ïÎp¼(ç +-%µÖh÷†ãÙr³;žuÓv½ Œ’wǼ@†ý{÷k¾çXÆåtØ®æÓQ¿ÛªWËż" KÖ=y÷?xwxƒtÞédÞ–$%_¬Të­î`4]¬¶‡“fXŽç‡QœÌ;Þ2ëwÝ“wÂÀsmS?w›ål2ìµ›5µTÈÉ"Ï1äÝi¼;¼ÇóÝéäÝ?Žå\¡¬ÖšÞp2_nöÇ‹nÚ®„äÝ1ïY¿ï~»ÆQè{Žeh§Ãv½˜ŽÝV£Z)æIàX&Y÷š¢°îðäÝ)ú#™w†åIÉ—*ÕF«;OëíᬖãùaDæïõ»îäÝÃÀwmS¿÷›å|2ìwš5µ\ÈÉ"Ï1ŸÉ»Ó4Yw¼;¼)EÓÉ»²œ ʹbY­7;ýÑd¾ÚìOÝ´]?ɻߓwÿ»@öü¾{²îQè{ŽehçÃn½˜Ýv£Z)åIàÙç»SÖÞ#}w*}w†åE)W(Ujvo0ž-Ö»ÃY3,ÇóÃ(¾ÝîGúî˜wȘtÝ¿÷ôÝßµMýrÚoVóɨßiÖÕr1'‹ǦëN“uÇ»À[¤óNyg9ARòÅrµÞêôGÓùj»?]tËqý Š¯Ïwÿ»@Ö|§ïþxÜo·8 +-}ϱ í|Ü­—³ñ°×nÔ*¥Bòî<ˤïNáÝàmžïN“wg8^”s…’Zk´{Ãñl¹ÞϺi»^Fñí9ïߘwȘtÝÓw¿ÆQ໎e\Nûíj>õ»­zµ\Ì+’À±dÝ“wǺÀûw§èdÞ–$%_¬Të­î`4]¬¶‡“fXŽëQ|Å»@&}§ïNÖýGa๶©Ÿ»Ír6öÚÍšZ*äd‘çòî4ÞÞ‰Tˆ¢éäÝ?Žå\¡¬ÖšÞp2[nvdznÚ®„Ñõ†y€,ú÷î×8 +-|ϱ ítØ®ÓÑ ÛªW+ż" Ë$ëþASÖÞˆ¼;õ|w–$%_ªT­î`<]¬·‡“fXŽç‡Q|Å»@ý[÷Û5 +-ϵMýrÜm–óÉ°ßiÖÔr!'‹<Ç|&ïNÓdÝñîð6¤CÎ;Ë ¢œ+–Õz³ÓNæËÍþxÑMÛõ‚¼;æ2çß»_ã(ô=Ç2´Óa»^Lǃn»Q­”òŠ$ðìóÝ) +-ë;•¾;Ãò¢¤J•j£ÝŒg‹õöpÖ Ëñü0"óŽw€Œù]wòîa๶©_ŽûÍr>õ;ͺZ.ædQàØtÝi²îxwx£tÞé2ï,'HJ¾XVë­N4™¯6ûãE7m×Bòî˜wȘßwOÖ= +-}ϱ í|Ø­³ñ ×þݺÀm\  (,Ù‘jf‡™™0c“ÎÌþ×óü;šÌžÔ¤ºß&ÎiÖ+¦®H"Ï2Å»Sxwøfw§É»3/ʪnVêÍN4™/7ûãùêxA§™w¼;ü(Ïu'ïž&qè»öåtØ®Óñ ÛnTˆ¦HÇ’uÏßëß¼;E—òygXNÍ(×íÞ`<[¬w‡ÓÅvý0NŠwǼÀò|÷|ݳ4ŽϹžûÍj>õ;ÍzÅÔUYä9†¼;w€ïGZDÑtþî Ç‹²ª›Õz«ÓMæ«ÍÞ:_]?ˆâ´˜w¼;ü Ïu/Þ=‰Cß³/§Ãn½˜½v£V64E8–É×½DSÖ¾ywŠ.åóΰ¼ )šQ®5Ú½áx¶\溜ãaœïþwÞ¿;¸ÿƒç»“uOã(ðÝëÙÚoVóé¨ßiÕ«¦®Ê"Ï1ù»Ó4Yw¼;|3R#Š¦ówÿ`9^”UݬÖ[Ýþh:_m÷ÖÙvý0JÒìó~ÿûî˜wøþ®{ñîIžs9vëål<ìµµŠ¡)’À³w§(¬;¼òîTñî Ë ’¢•Z³ÝNfËõîxº8^ÆIöy»}åïþï?ÁŸ¿ï~¿fi…¾kŸ­ýv5ŸŽúÝV½jêª,ò[¬;MÖïߎôˆ¢‹yg9A”U½\­·ºƒÑt±Úî­³íúa”¤Ùí~ÿúõ«xwÌ;¼½bÝÿúúºß>³$ϹœŽ»õr6öÚÍZÅÐIàY¦xw +-ï/¡xwªxw†åEIÑÌJ­Ùé '³åfw<]/ã$û¼=Þý7ÞÞߟâÝýúºßoYšD¡ïÚgk¿]-¦£A·U¯–uUŽ-ÖƺÀ‹(æ.‘yg9A’U£\m´ºƒÑt±Úî­³íúa”¤Ùíþ˜÷?˜wx{źï~ûÌ’8 <çz:î6ËÙdØë4kSS$‘g™âÝ)¼;¼ˆÇ»ÓäÝŽeU7+µf§?œÌ—›Ýñtu¼ ŠÓìó†w€âOñîdÝï·,M¢Ðwí‹uØ®Óñ ÛjTˆ*KÇ’uÏß믂¼;E—òygXNÍ(Wíî`<]¬¶ëb»~%iv»cÞàgø÷î·Ï,£Às®§ãn³œO†ýN³V1uUyŽ!ïNãÝàu&Q4¿ûÃñ¢¬êf¥Þìô‡“ùr³;ž®ŽDqš}Þðîð#ü[÷û-K“(ô]ûb¶ëÅt<è¶Õ²¡)’À±L¾î%š¢°îð2È»St)Ÿw†åIÑŒrµÑîÆÓÅz{°.¶ë‡Q’’wǼÀðïÝoŸYGç\OÇÝf9Ÿ ûf½bêª,òó‘¿;M“uÇ»À‹ U¢h:÷†ãEYÕÍJ½Ùé&óåfw<_/ˆâ4#óŽw€·÷\wòîi…¾k_¬Ãv½˜Ýv£Z64E8–É×½DSÖ^ywŠ.åóΰœ )šQ®6Ú½Áx¶XoÖÅvý0JRòî˜wx{ÏwÏ×=Kã(ðœëù¸Û,ç“Q¿Ó¬WL]•Ežc>òw§i²îxwx¤KMçïþÁp¼(«ºY©·:ýÑd¾Üìç«ãQœfdÞñîðæžëNÞ=M¢Ðwí‹uØ®³ñ ×nTˆ¦HÇ2ùº—hŠÂºÀK!ïN=ÞåIÑŒr­Ñî ƳÅz{°.¶ë‡Q’’wǼÀ›{¾{¾îYGç\ÏÇýf9ŸŒúV½bêª,òó‘¿;M“uÇ»À !e¢èǼs¼(«ºY©·:ýÑd¾Úìç«ãQœfdÞñîðÖžëNÞ=M¢Ðwí‹uØ®³ñ ×nÔʆ¦HÇ>Þ¢°îðZŠw§ïÎò‚¤hF¹Öh÷ãÙb½=XÛõÃ(IÉ»cÞà­=ß=_÷,£Às®çã~³šOFýN«^1uUyî±î4Yw¼;¼”bÞébÞYŽeU7+õV§?šÎW›ýñ|u¼ ŠÓŒÌ;ÞÞØsÝÉ»§Iú®}±Ûõb6ôÚZÙÐIàÙÇ»Sxwx9Å»SÅ»3,/HŠf”kvo8ž-ÖÛƒu±]?Œ’”¼;æÞØóÝóuÏÒ8 +-<çz>î7«ùtÔï´êSWe‘çØbÝi¬;¼ bÞé™w–ãEYÕÍj½Õí¦óÕf<_/ˆâ4#óŽw€·õ\wòîi…¾k_¬Ãv½˜‡½v£V64Ex–)Þ»À z¼;MÞayAR4£\k¶{Ãñl±Þ¬‹íúa”¤äÝ1ïð¶žïž¯{–ÆQà9×óq¿Yͧ£~·U¯šº*‹<Ç’uÏß믈¼;E—ȼ³/ʪnVë­n4¯6ûãùêxA§™w¼;¼©çº“wO“(ô]ûb¶ëÅl<ìµ›µ²¡)’À³ yw﯉ô‰¢iòî Ë ’¢åZ³ÝŽg‹õö`]l×£$%ïŽy€7õ|÷|ݳ4ŽϹžûÍj>õÿc·>sTçÒ( +-KçøÎÙEÎ9çhã\Ôÿ„šÔ|SÀÒ~&±V»Q-»¶©«²$Òº œ1¬;|%zwÆšwQ’UÝ´ÝrµÑîÆÓÅj»?]nA'YNóŽw€Bú¬;½{–ÆÑÝ¿ž»õr6ö;ÍzÅs,CSd±DïÎ9­;Þ¾ŠqNï^eE3,Ç«Ô›þp2[®w‡óÕ¿GqšÑ»cÞ >ïþ\÷þþaÞ @>ïþ÷xäYGwÿz>ìÖËÙdØë4kϱ M‘Ž;ç´îxwøjÔ*Æ9½{I”Í°¯RkvzÃÉl¹ÞÎWÿÅi–?žóŽw€Âø¬ûóÝó4‰Âàv9î7«ùt4è¶Õ²k›º*K"­»ÀúÀ×£wg\ y%YÕMÛ-W­î`4¯6ûãå„Q’æ¿ÏwǼ@a|ÞÖ=Kãèî_χÝz9› {f­â9–¡)²X¢wçœÖï_ŽjÅ8§w/‰²¢–ãUjÍNo8™-×»Ãùêߣ8Í^óŽw€‚ø¬ûëÝÓ$ +-ƒÛå¸ß¬æÓÑ ÛjT\ÛÔUYiÝÎÖ +-€Þqæ]”dU7m÷§Úhu£é|µÙ/· Œ’ôõî˜w(ˆÏ»ÓºgIÞýëù°[/gãa¯Ó¬U<Ç24EKôîœÓºãÝàëQ¯çôî%QV4Ãr¼J­Ùé dzåzw8]ý{'ÙkÞñîPÿ­;½{šDap»÷›Õ|:êw[êk›º*K"­»Àú@!л3.м‹’¬ê¦íþT­n4¯6ûãå„Q’Ò»cÞ Þëþz÷çºgIÞýëé°]/fãa¯Ý¬U<Ç24EKôîœÓºãÝ ¨XŒsz÷’(+ša9^¥Öl÷†ãÙb½=œ®þ=Œ“Œæýõî˜wørïw§u¾{–&QÜÎÇýf5ŸŽúÝV½úãÚ¦®Ê’Hë.pÆ°îPôîŒ 4ï¢$«ºi»?Õz«ÛMæ«Íþx¾a”¤ÙóÝßóŽw€¯ö^÷×»?~ó,‰ÃÀ¿œÛõb6öÚÍZÙs,CSd±DïÎ9­;Þ +-šÅ8§w/‰²¢–ã•kÍvo0ž-ÖÛÃéâaœdùsÞ_ïŽy€¯ö~wZ÷ç»giÝýëù¸Û,ç“Q¿ÛªW\ÛÔUYiÝÎÖ +-ƒÞqæ]”dU7m÷§Zouú£É|¹ÙÏWÿÅiö|÷÷¼ãÝà‹}ÖýßsÝó,‰Ãàv9¶ëÅl<èµ›µ²çX†¦Hb‰ÞsZw¼;U‹qNï^%E3,Ç+×íÞ`<]¬·‡Óå„q’åÏyÿ‡y€/÷y÷¿Ç#ÏÒ8ºû×óq·YÎ'£~§U¯þ¸¶©«²ôZw3†u€¡wg\xÍ»$«ºi»?•z«ÓNæËÍîx¾ú÷(N³üñœw¼;|µÏº?ßý7O“8 n—Ó~»ZLǃ^»Q+{ŽehŠ$¾ÞsZw¼;u‹qþzwQR4Ãr¼r­ÑîÆÓÅj»?]nA'iþû|wÌ;|µÏ»ÓºgiÝýëù¸Û,g“a¿ÓªW~\ÛÔUYúÿº3¬ûÿØ­$UµŒÂuÝV59*bÀœ³bBÉ`÷Õ3ÿù<6T÷Bëyÿ7‰µà­ÐwÿžwŽeU¯Öê­vo8ž-Ö[ûx¹º~%i>ïxwxa?ëž¿{‡ws·ýf5ŸŒú]«iM‘Ž-Þ=_w¼;¼‘ŠyÏßåIV+†Ù°ºýÑd¾ÚìgçæaœäïŽy€×U¬;}wºîi…¾{½ííz1zíV½VÕYä¹bÝ ÖÞN>落wŽ%E«Öê­vo0ž-Ö[ûx¹º~Åi>ïôÝ1ïð’Šw§ëNß=‰ÃÀ»9§Ãn³œOFýŽÕ0 ]•%c™lÝˤ„w€·“¿{‰”³ygXNeU7̆Õé&óåfw897/ã$ÍÞ½˜w¼;¼ bÝÿ<ºîi¾{=ííz1zíf½VÑIä9æ#{wB°îð†òy'${÷†åIÑ*µz³ÝŒ§‹õÖ>ž× ¢8½góþxdïŽy€T¼ûó™­û×gšÄa¶î—Óa·YÎ&Ã~Çj˜U]•Ec™lÝˤ„w€7”¿{‰”é¼³œ ʪ^5V§?œÌ–›Ýát¹º~%éý+›÷çï/ègݳwÿ¼§qx7ç|ÜoW‹éhÐm7ëFES$g™ìÝ ÁºÀ[Êçúî Ë ’¢UŒz³ÝŒ¦‹Õv<;7/ˆâäþ™½;æ^ÒÏ»çëžD¡ï^/'{·^Î&Ã^§Õ¨UuUyŽ¥ë^&%¼;¼¥üÝK¤LçåxQVõj­Ñêô†“Ùr½³O—«ë‡Q’æóþýî˜wx!?ëž¿{GwsÎÇýv5ŸŽ]«iM‘že軂u€7•Ï;!ôÝ–$E«fÓêFÓùj³?œ›„qBßý¿yÿíRü(Ö¾;]÷4ŽBß½^Nön½˜‡½N«Q«êª,òK×½LJ%¬;¼)úî%RÎçãEYÕ«µz«ÓŽg‹õÎ>^®®FqJç=wÌ;¼”âÝéºÓwOâ0ðnÎé°ß¬æ“Q¿k5M£¢)’À± }wBèºãÝà-ц•ÉßåIÑ*†Ù´ºýÑd¾Üì'çæaœ¤Ù»óŽw€R¬ûŸçãA×=£ÀsóÑÞ®³ñ ×nÕkU]•Ežû^÷ÖÞ}÷ïyçxQV´j­Þj÷ãéb½µgÇõ‚(NïÙ¼?0ïðbŠw>³uÿº§Iúîõr:ì6ËùdÔïX ÓÈÖ]8¶x÷|Ýñîð¦þ)潜Í;Ãr‚$«ºa6¬N8™-7»Ãéruý0JÒûW6ïxwx)?ëž½ûç=‰£À»9çã~»ZLǃ^»Y¯U4Ey®Xw‚u€·–Ï;!Ù»0/JŠV©Õ›íî`4]¬¶ûãÙ¹yA'÷ÏìÝ1ïðJŠu§ïN×=M¢Ðw¯—Óa·^Î&Ã~Çj˜U]•Ec™lÝˤ„w€·–¿{‰”³ygXNeU¯šV§7Ï–ë}º\]?Œ’4Ÿwúî˜wxÅ»Óu§ïžÄaàÝœóq¿]ͧ£A·Ý¬M‘že>²w'ëo.ŸwB²wÿ`X^­bÔ›V·?šÎW›ýáìܼ ŒúîżãÝà%ëþçùxÐuOã(ôÝëåhïÖ‹ÙxØë´µª®Ê"ϱtÝˤ„w€7—¿{‰”é¼³/ʪ^­5ZíÞp<[¬·öñ|u½ ŠS:ïGöî˜wx Å»?ŸÙº}¦IúÞír:ì7«ùdÔïZMÓ¨hŠ$p,C߬;¼½|Þ ¡ïΰœ )ZÅ0›V·?šÌ—›ýát¹º~'éý+›÷çï/ágݳwÿ¼§qx7ç|´·ëÅt<èµ[õZUWe‘çòu/“ÞÞ^þî%RÎçãE9›÷Z½Õî ÆÓÅzkÏÎÍ ¢8¹fïŽy€×P¬;}÷|Ý“(ôÝëåtØm–óÉ°ß±¦¡«Š$plþî„`Ýà/Ï;!ù»³œ ɪ^5V§?œÌ–›}º\]?Œ’4Ÿwúî˜wøuÅ»Óu§ïžÄQàÝœóq¿]-¦£A·Ý¬×*š"‰<÷½î%¬;üè»Ï;Ç‹’¢UŒz³ÝŒ¦óÕv8;7/ㄾ{1ïxwøeźÿy>tÝÓ8 +-}÷z9Ù»õr6ö:­†YÕUY8–ÉÖ½\¬;ÞÞÞ?ż—³ygXNeU¯Ö­No8ž-×;ûx¾º~Å)÷Ç#{wÌ;ü²âÝŸÏlÝ¿>Ó$}ïæœûÍj>õ»V³nT4Ex–ùÈÞ¬;ü%òy'${÷†åIÑ*†Ù´ºýÑd¾Úì§K6ïaœ¤÷¯lÞŸÏâÝ1ïðk~Ö={÷Ï{GA¶î磽]/fãA¯Ýª×ªº*‹<ÇÒu/“Þþù»—H™Î;Ëñ¢¬êÕZ½Õî ÆÓÅzkÏÎÍ ¢8¹~ýûß¼ÿv»àÿV±îôÝóuO¢Ðw¯—Óa·YÎ'£~Çj˜FES$cúî„`Ý௑Ï;!ôÝ–$EÕ ³auúÃÉ|¹ÙÙÿc·>°SE0 Ÿ ÎŒtì½÷®¢Ò‹"$û_ÏüÀd79‡û=›xßËõnXŽëɼ§ïŽy€”½{²îÉ»ûžk›úMSåãn³œO†ýN«AÖ]äY&]÷õ†w€ÜHßý*¤óΰ¼ •«õV§?œÌ–›ÝQV´›nÚŽç'ïžÍ;Þ~L¶îïq%ëx®c÷«z>í·«Åt4趛µJI8†Nߢ°î#é¼Sé¼i†ãÅR¥Öhw£é|µÝŸÎªv7LÛõ‚dÞ#Ì;ü¤ìÝ㘬{ø|ϱLýzQäÃn½œM†½N«^-KÏ~®;Þò$y÷dÞÿþçß"Ír‚T®Ö›Þp<[¬wY¹\ï†åx~ðɼÿÿî˜wø_ëþ +-ŸßsmS¿iêù¸ß¬æÓQ¿ÛnÔ*%‘ç:Y÷Öræ¯lÞ É¼Ó Ë‹¥J­ÑêöG“ùj³?ʪvÓMÛõüÇ3|}ÍûOþ@Ùº¿ÇQ”¬{໎eܯåtØ®³ñ°×iÖ«eIàXº˜¼;EaÝ gÒy§¨äÝ‹4à R¹Zo¶{ƒñt±ÞNçËõnXŽëɼGywÌ;üˆìÝ㘬;ywßslS¿iŠ|Üm–óɨßm5Ⱥ‹<ˤë^ Þðî3黿Q…tÞ–“youúÃÉl¹ÙdårÓMËñüà’yãìÝ1ïðÍ>×¼ûóx®mwM=ŸöÛÕb:tÛÍZ¥$ +-C§ïNQXwÈtÞ)*}wšáx±T©5ÚÝÁh:_mödzª‘y·]/x<É»ÎûOWþ0Ùº'ïþ +-ÃGà{Y÷ëE‘»õr6ö:Ízµ, <Ëü¿îxwÈôÝ?çå©\­7;½áx¶Xo'år½–ãúÙ¼'ïŽy€o—½{²î¯ðùð=×6õ›¦ÊÇýf5ŸŒúÝV£V)‰<ÇÐE²î¬;äÒ¯y/$óN3,/–*µF«ÛMæËÍî(+ÚM7mÇó“wÏæïß,[÷÷8Š’u|×±ŒûU=ŸÛõb:ôÚÍzµ, Kÿ%ïNQXwÈ¥tÞ)*y÷"Íp‚Dæ½Ùî ÆÓÅj»?UínX¶ëɼG˜wø~Ù»Ç1Y÷¬»çX¦~½(òa·YÎ&Ã~§•¬»È³Lºîê ï¹”¾ûUHçayA*Wë­N8™-×»ƒ¬\®dÞÏ!™÷äÝ1ïð­¾Öý>¾çÚ¦~ÓÔóq¿Yͧ£A·Ý¨UJ¢À1túî…u€œJç¢Òw§ŽK•Z£ÝŒ&óÕf”Uí¦›¶ëùgøÊæïß([÷÷8Š’u|×±Œûõr>¶ëÅl<ìušõjYx6[÷õ†w€œJßýsÞYNÊÕz³ÓŒ§‹õöp:«×»aÙ®$óaÞà{}dïÇdÝÃgà{Žmê·‹"w›å|2êw[Z¥$òCgëNaÝ ·~Í{!™wšay±T®6Zþp2[®wY¹\uÃr<2ï!™÷äÝ1ïðm¾Öý>çÚ¦qÓÔói¿]-¦ãA¯Ý$ë. K“w'ëŽw€üJ碒w/Ò 'ˆ¥J­ÑîFÓùj³?žUí¦›¶ëùgøÊæïß$[÷÷8ŠÒu÷]Ç2î׋r:ìÖËÙxØï´êÕ²$ð,“®{ë¹–¾ûUHçayA*WëÍNo8ž-ÖÛÃé|¹Þ Ëqý ™÷("ïŽy€ïñ‘½{“u'ïî{Žmê7M‘»Ír>õ»íF­RyŽ¡Ów§(¬;äZ:ïT:ïEšáx±T©5ZÝþh2_nvGY¹ÜtÓr<2ï!™÷8ÎÞó¿Ý׺¿Èºžk[Æ]Sϧývµ˜Ž½v³^-KÇ~®;Þr-}÷dÞÿþçß"Ír‚Dæ½Ùî FÓÅj»?žUÌ»ízþã¾¾æý§›¹—­û{EéºûžCÖýzQäÃn½œM†ýN+Yw‘g:Y÷Örï×¼ÒygX^ÊÕz«ÓŽg‹õöpR.×»a9®$óEäÝ1ïðû}dïÇdÝÉ»“u·Mý¦©òq¿Yͧ£A·Ý¨UJ"Ï1t1ywŠÂº@î¥óNQé»Ó Ç‹¥J­ÑêöG“ùr³;ÊŠvÓMËñȼ‡dÞã8{wÌ;üV_ëþ"ëx®m÷«z>í·«Åt<ìušõjY86[÷õ†w€ÜKßýsÞYNÊÕz³ÝŒ§‹Õv:«Ú]7m×óÏðõ5ï?ÝuȵlÝßã(J×Ý÷œdÝ/Š|Ø­—³É°ßm5j•’ȳ ­;…u€?À¯y/$óN3,/&óÞêô‡“Ùr½;œ”ËõnXŽëɼGywÌ;ü^Ù»Ç1Ywòî¾çÚ¦~ÓTù¸ß¬æÓÑ Ûn&ë.p ]LÞ¬;Þþ¥óNQÉ»i†ãÅR¥Öhw£É|¹ÙeE»é¦åx~ð ɼÇqöî˜wøm¾ÖýEÖ= ën÷«z>¶ëÅl<ìušõjYx–I×½€u€?DúîoT!›w–¤rµÞìôãébµÝŸÎªv×MÛõ‚Ç3|}ÍûO·r+[÷÷8ŠÒu÷=Ç2ôÿØ­Ó-5ÑŒÂ'ÑîÈ쬈Šˆ8NÈl9PÞÿõôÓý÷¤²j%¾û&ö³Ûúb6jªÒnŠµJ© p,Måºg@w„B/R‚÷LŠwŠf8¡PªÔD©ÝQµáx¶X›Ýáèx~˜àýv#vÞB¿®{j÷("t'vßµ­ýÖÔ—óɨßSäV£NèžçY†Ê}#v't‡ÝB½H‰Ýc¼»ç(šå¼7š²¢ö‡“ÙR7¶{Ëv¼€àýBðE©Ýw„Ð/éݯ„î'BwçxØ™ëÕb:hÝNK«åbžç:¡{tG!ôB=ðžMðN3Ÿ/–«u©%w{ƒÑt¾Z›Ûƒe»~¾/×xÿì¿#„þÈRº¿G·[B÷0𜣵Ûúb6jªÒnŠµJ© p,M%vÏdºÃî!„^£ï™ï9Šf9¡PªÔD©ÝQµáx¶X›Ýáèx~xŠñ~»»ï¡_Ó=µ{º»º»¶µßšúr>õ{ŠÜjÔ«åbžg™'Ý¿‚î!„^§Äî1Þÿúû[ŽbX>Á{£)+j8™-uc»·lÇ Þ/ïðŽúUý û•Ðýø®s<ìÌõj1´n§%‰1ÝŽ¡©˜îYÐ!„ЋõÀ{6Á;Íp|¾X®Ö¥–Üí FÓùjmn–íúAøv¾\S¼ßw„ÐÇ—Òý=ºÝº‡Ó}cè‹Ùx¨©J»)Ö*¥‚À±4•‹ížÝB½X_¼g2‰Ý)šå„B©R¥vGÕ†ãÙbelv‡£ãùá)Æûí‰÷Ͼ=Bèê;Ý#B÷ ¡{๶µßšúr>õ{ŠÜjÔ«åbžg™”îYÐ!„ÐK–Øý‰w†åó1ÞMYQûÃÉl©›½e;^ðÄû;ðŽúÐî©Ýcº_/ç·0ð]ûxØšëÕ|:hÝNKcº CS)Ý3 ;B¡—ì÷l‚wšáø|±\­K-¹ÛŒ&óåÚܼ»ïÄîïQ”ÚxG}POºßbºŸBßsŽ‡ÝÆX-f㡦*í¦X«” +-ÇÒT.¶;¡;ìŽBè%û’à=“IìNÑ,'J•š(µ;ª6O«õfw8:®œÞ¯À;BèƒKéþþ¤{à9¶µßúr6ö{ŠÜjÔ«åbžg™”îYÐ!„ÐË–Øý‰w†å¼7š²¢ö‡“ÙR7¼{~˜àýv#v‡ÝBÔ=µ{º»‡ïÚÖak®WóéhÐëvZ’Ó]àšJéžÝB½l¼g¼Ó Çç‹åj]jÉÝ^4™/us»·l× ÂÓùBðï¡ëݯ„î§Ðwãa·1V‹éx¨©vS¬UJci*ÛÐvG!ô²=ìžIìNÑ,'J•š(µ;]m0ž.Vksw8Ú®œÞΗkŠ÷;ðŽúˆRº¿G·[J÷ÀsŽÖ~cèËÙdØW¹Ù¨WËÅ<Ï2)ݳ ;B¡—î¿xgX>Á{£ÙVTm8ž-tcCðîx~˜àýöÄûg?!ôÛ÷î¡ûåÓݵ­ýÖ\/ç“Ѡו[RJwŽ¡©”î°;B¡Wí÷l‚wšáø|±\­7Z²Òë&ó¥nl÷–íxÁïïÀ;B躧vé~½œßNï:ÇÃÎ\¯Óñ@S;mI¬UJci*ÛÐý+èŽBè•{Ø=“Ø¢YN(¼‹R«ÓÕ£é|µ6·Ëv Þ‰Ý Þ£(µ;ðŽú©žt¿%t}/¦ûÆгñ°¯*r³Ó=ϳLJ÷,èŽBèåû/Þ– +-¥JMl¶UŽg‹•±ÙŽŽë‡'‚÷+ðŽúRº¿?éxŽmí·¦¾œOFý^WnIõj¹˜ç9†¦RºgºÃî!„^¹Þ³ Þi‚÷|±\­7Z²Òë'³¥nlöïÞï·'Þ?ûü¡ß¸{j÷("t'vßµ­ÃÖ\¯æÓÑ@ëvÚ’X«” +-ÇÒT.¶;¡ûWÐ!„Ы÷°{‚÷E3œã]”Zno0šÎ—ks»·l× Þ/ï±Ýw„ÐÏô/º_ ÝO¡ï:ÇÃnc¬³ñPS•v³‘Ðg™”îYÐ!„úß¿ðþ×ßßÞYN(”*5±Ùî¨Ú`<]¬Öæîp´]?ßΗkŠ÷;ðŽúÿKéþÝnº{ÎÑÚo }9› û=En5êÕr1Ïs ý {&¡;ìŽBèÕ{à=›âaù<Á{½Ñ”µ?Ϻ±!xw\?<Åx¿ï¡Ÿë;Ý#B÷ ¡{๶µßšëå|:ôº–$ºŽ¥©Äî„î_Aw„B(µû—¯™ïÍp|¾X®Ö¥–ÜíõG“ùR7¶{Ëv¼à‰÷÷ïŸý„ÐoÙ=µ{L÷ëåü¾k;s½ZLÇMí´›b­R*<û»uºœ(€a¸2mÕ(‹¸o €  +-Šû +-ŠÆ-ÞÿõÌá€vÒÓ™îôŸdª¾÷"ÞzXÐ!„zµ{ˆwb÷dŠáx!›/–«bCi¶ŒNÏqG“ï~ˆ÷ã‰àý +-¼#„þ¸ït¿„t?ìw¾Gè>û¶e¶5U–j•R!—!tg(Ý1Ýaw„Bè÷D„w–KS¼×¤†ªµL«×wÇÓùríù»àð|<#¼ß€w„ПÑýåA÷`ëmV‹Ùx8pº¶Þ”ë"¥»À³L*IéÛý³_‰B}…ž(Þ¿ÅxgX>ÉJ•Z]Võ¶ÙµÃ;Þ÷ïà!ô§Ýé~%t?Cºû!Ý'#×éuŒVSiˆÕr1ŸxŽÐýobwÐ!„zµ{ˆ÷Ðî)†ã…,Á{U¬+MÝètÁp2[¬6Þ6xàý%Âûg+!ô?ëÙ=¤ûùt|>;ß[/çÓ±Û·-³¥© ©Ò=“æ؈î Ð!„zSŒ÷D„w–K Ù|±\•J³eX=ÇQ¼û!Þ'‚÷+ðŽúƒ¾ÓýB龿Ó}8°»f[Wåz­R*ä2ižeRÝaw„BèMOïßb¼3ï‚÷JMj¨ZË´ì¾;žÎ—kÏ߇çãéáý¼#„>VD÷—݃­·Y-f“áÀév ½©ÔÅ*¡{Và9&• íº#„B?Fí~Ç{Šaùt&W(UjuYÕÛf× ÇÓÅûžâý¼#„>ÞîWB÷Ó1¤»Oé>rže´4¥!UËÅ|VHslD÷èŽBý«މݓ)†ã…l¾X®Šu¥©ž3Mf‹ÕÆÛ¼¿Dxÿl „þ7Ý"»‡t?ŸŽÏ‡`ç{ëå|:vû¶e¶4U–j•R!—!tgbº£t‡ÝB¡W=ÅxODxg¹t„w©¡h-ÃêõÝÑdNðî‡x?žÞ¯À;BèC}§û…Ò}O龘Ž‡»k¶uU®‹”îÏ2©dL÷¿@w„BèÇb»ÇxgÞ3¹B©R“dUk›–ÝŽ§óåÚówÁáùx:ï¡ö/ºo½Íj1›ŒN¯cèM¥.VËÅ|Và9B÷¿‰ÝAw„Bèç=ðÚ=Å°¼@ñ.Öå¦ÞîtíÁû‚â}Oñ~¡x¿ï¡ß+¢{hwB÷ãalýˆîn¿g-MiHÝÓÑ=ÓvG!„~,Æ{"Æ;Ç Ù|±\JS7:=g0šÌ«·ÞBï5ÝOÇçC°ó7ëå|:vû¶e¶5U–j•R!—!tgbºÇvÿì;"„B_¯'Š÷ow¼³\:â½&5­eX½¾áÝß¼¿Dxÿl „¾|·Èî!ÝÏ!Ý÷;ߣtìn§­7åºHé.ð,“¢vÝB¡÷£v¿ã=Å°|:“+”*5IVµ¶iÙ}wrže´4¥!QºgÒ{§{l÷Ï~"B!ô•{ŠñžˆðμgóÅrU¬+MÝèt‚÷Ù‚â}ÿ +-ï7à!ô^Ý_"ºû`ëoVË9¡{߶̖¦ÊR­R*ä2ižeR ;B!ôÛÅvñΰ\:Cñ.5”fË°zŽ;šÌ«·ñ~ÞBÿÕîWB÷ÓñùìüÍz9ŸŽ‡}»k¶uU®‹”îBH÷dhwÐ!„ú½Þà=Å°|:“+”*5©¡j-Óêõ Þçïþ6xàý%Âûg !ô{E÷sLw/¢ûÀév ½©ÔÅj¹˜Ï +-<Ó=ÓvG!„~ÕïÄîÉïB„÷º¬jm³k÷‡ãé|¹¦x'v'x¿ï¡wºEv't¿Pºïw[o½ZÌ&£Óë­¦Ò"º§9öN÷ØîŸ}C„Bèë÷ã=ãã…l¾X®Šu¹©·;]{áÝówÁàý ¼#„ÞëgtßPº»ýže¶4µ!Õ*¥B.CèΤ@w„BèƒÅv¿ãåÒ1ÞJ³etzÎ`4™-(Þ÷¯ð~ÞB?Ñý%¢ûñ°¶þfµœOÇn߶̶¦ÊõˆîOèž íº#„Bé ÞS Á{&Ä{Mj(ZË°zŽâ}µñ¶1Þ/À;BègÝé~%t?ŸÁÎ߬Cºv·ÓÖ›r]¬ºgž‹éžˆé»#„B¿×ïÄîI‚w>ÉJ•š$«ZÛ´ì¾;šÎ ÞýmðÀû ðŽú¡Wt?Çt÷ÖËÅŒÐÝév ½©4Äj¹˜Ï +-iŽ½Ó=¶ûg!„ú¿ôã=ãã…lˆw±.«zÛìÚýáx:_®)ÞŸ!Þ¯w¼¶B_¦[dwB÷ ¥û~·õÖ«Ål2rže´Ý¥ZH÷ ¡;ºÿÃn}(%’¶.÷b7Drh2JFEœõþ¯ç¿î&êlÕÎj國8õý^¶Ý×x÷xýZ ‰%’©l¾hTë­Ž…÷Ét¾xx\>w"zÕ[t[to7j•R!'tGÃAÝïó¸]¦Ý¡;Ñ¿oïnÁ»nâý"Í—Œj£Õ¹îöo·x_w"Úïݳ©Ð}л¹l7ë•r!—IYt×|^›îN›î؈ˆèß´Á»²»Ëíñùõ`8?¿Hç +-¥J­ÑºTxŽ'³ù½‰÷gï/àˆ¬,º+»¯žÄî&ÝGwB÷«N³^-ó™T2‹„BwÏšî¶Ý¿ú€DDDÿ­Nl¼;7x×,¼§2¹B¹Rk¶ïðND¿h‡î+¡ûÃb>ØtoÕ«F1ŸMÛt÷{=nèNDDô'ÙvßàÝëÓ‚÷DRð^,WêÍöÕMop7Og‹û‡¥…÷¿Á;™½M÷Û~÷ºÓjÔŒR!›¾8Wt×Ý]Јˆè:À»ÇëסHLðžÍj½Ù1ñ>2ñþ¸|¼ÿ\ãý«Õ@D_Ü‹ew¡û³I÷ûùl2*º_¶µJ©ºÇ£á î÷ Ý(»¯éŽÝ‰ˆˆþ}ûxw Þuïél¾dT-Á{_ð>™Î‚÷x'"«_Ð} èÞ¬UÊ…\&eÒ= ù¼6ÝB÷SèNDDô{lð®ìîr{|~=ŽÆÏï…’Qk´.¯»ý[ðND½¢ûb6ï½›«v³^-ó™T2‹„šßëYÓÝ݉ˆˆ~?Ëî§çïš÷L®P®ÔmïÃñd6¿7ñþlâý¼u6Ý•Ý…îK‹î#“î¡»QÌgÓ[º»¡;Ñ{dáݱÁ»×§Þ“©L®X®Ô›‚÷Þ¼Ñ^»tZ>>,æӉн/to5ªFIè~q®è®+º»~üuv¶¡;v'""úÝðîñúµ@(KÞóÅrUð~uÓÜ ÇÓÙ¼‘ÙÝW[ºßö»×—­FÍ(ÝãÑpP÷ûÝÿ÷×™Ó Ý‰ˆˆþ´“}¼»ﺅ÷t6_4ªõVÇÄûÈÂûÒÂûßàèˆ;¤ûý|6 Mº·µJ¹ËØt×|Þ Ým»õôˆˆˆþËmñ®ìîr{|~=(x?¿Hg %£Ú¼wû‚÷Ét¾xx\> Þ‚w¢#îŲ»ÐýyC÷±Ð½'toÖ+åb.“J*º„îèNDDôŽYv?u87x×ô`8¼ç +-¥J­Ñº¼îöo·x_íàý« ADŸÞ+º/fS¡û ws%t¯–‹y¡{" 4¿×ãÞ§;v'""ú³,¼;6x÷ú´€‰÷T&W( ÞÛ&Þ‡£Él~Þ‰Ž¼·é~§èÞiÕ«F1ŸM[t×Ý]Јˆè];À»ÇëסH,‘¼Ë•zÓÆûxƒ÷gðNt¤ÙtWvº/…îóéddÓ½Q5JB÷‹s¡{P÷û„î?”ÝÝO¡;Ñ{t²w÷.ÞóÅrUð~uÓÞ§³Å.Þ_À;Ñ‘µG÷§åãƒE÷Û~÷Zè^3J…œÐ= umCw't'""z¿¶xWvw)¼ëÞÓÙ|ѼwÞïÀ;ѱ·C÷•E÷Ùd4Tt¿l7j•r!—I™th>ï†îèNDDô~Yv?u8×x÷ùõ`8?¿¼—Œj£eá}dá} Þ‰Ž³Cºß ÝÇ6Ý›B÷¢Ð=™0éî÷zèŽÝ‰ˆˆÞ' kk¼ç +-%£&x¿îöï“é|qÿ¸|¼+»ƒw¢cjK÷ç=º÷n„îõj¹˜WtEB&ÝÝЈˆèc:Ļק,¼gïÁû¥àýÖÂûx':Æ^Ñ}1› +-ݽ›«ŽÐÝ(æ³i‹îº¢»Ë´;t'""z÷Nðîñú-¼'S‚÷r¥Öl›xŽ&3 ï+ðNt\½Xv? ûI÷–н$t¿8ºu¿oMw§Ðýº½oxw›xEb Á{¾X®Ô×x ÞïñþÕ¦ ¢ïMºlº7jF© è†ƒº¶Cwt'""zÿ,»+¼+»»ÞuïYÁ{Uð~uÓïDGÚ>Ý—B÷ùt"tïw¯Ý+¥BnKw/t'""úØÖxw®ñî³ñ~‘¼‚÷Žà} xŸ®ñþ Þ‰Ž$›îÊ§å£M÷[¡û¥¢{¹Ë¤Lº„cw""¢÷λcïÁp4~®ð^2ª–‰÷;…÷x':¦v龺?,æ³Éhhҽݺ…îÉD, +-h~¯Ç ݉ˆˆ>º×x×6x/”ŒÚï£C¼¿€w¢oÝ›t¯é^ºç×t×Ý]B÷3“î§Ðˆˆèc:9Ļקl¼ç +-¥Š‰÷®Âûd:ïDGÓ+ºßÛtï™t¯ +-ݳºû„î?ÄîN't'""úÈñîñúm¼§2¹BYáýòºÛßà} Þ‰Ž _Ñ}л¹Rt7„îé E÷àÝЈˆè#³ì®ð~¦ðî6ñŠÄIÁ{QðÞl+¼ßÚx\>™xÿ¼}ßvèþlÑ}1›Ž‡wŠî–н¤è~†ƒº݉ˆˆ>¯5ÞNew—»¾Æ{^ð^·ñ>MfóŃà}µzþ Þ‰¾qoÒ}dÓ½!t/ìÐÝ{HwìNDDôqYxwlñîÛà=+x¯nð>ïDGÑ?Ó½&tÏÙtÝ=Јˆè{ ïAïiÁ»¡ð~uÓ³ñ~Þ‰¾y¿¤{פ{EèžIÙt÷{=î-ÝO¡;ÑGwòïš Gãç‚÷’Â{Gð>ïDÇЋe÷ºÏ§¡{¿{}©è^VtO&b‘Ew—Ðý º}V¯ðîÝÁ{Aá½eâýn8ž‚w¢ïÝ/è~«èÞn +-Ý‹ºë&݈ÝNèNDDôY½…÷€÷œÂ{cï ðNô}Û§ûòÑ¢ûp‡îù-Ý}[º; ;ÑgeÙ]áýÌÄ»Çë_ã=£ð^[ã}´Åû3x'úvíÑýéîuE÷ì?л}FxwoñžRx¯€w¢cȦ»²»I÷‡Å|¶C÷ª¢{Ú¤{º}]k¼;Êî. ï¡H,‘Üâýº Þ‰¾s»t_­é>ÞÒÝPt¿8GÃA]ƒîDDD_Ö‰…wÇ.Þõ-ÞË‚÷öÿÙ­µÄµ€ÂŸc™3#X@ì½#¢tB Å!Áãû?ÏÝ;=GÏU Ûõ?ÄúV¾X®Šyoë]æPÐÔu¯” +-Öº_×=\÷¬;_i|Þãy¿ôæ½Æ¼j[÷¾½îšX÷܃\÷ wÝ7½u_fݘ…Wçý\Î{–yÔ5eÝëu?óÖ}-¶Êº0Kç=aÏû©œ÷Œ3ï æPΤu×½u¿·Öý$°î¿Yë¾Äº0ö»‡æ}Ýž÷ÃcæPÚøº÷‚ë~g­ûQpÝÿï.Ö}Ñ^wÞ€¯66ï19ï[Û»ûö¼§™w@M“×½9²î{;©$ë@Døó¾Ì¼ßÇßÖý6°î¬;1:ï«bÞ7ýy¿ Î{‡yÔð¾u³îDÂ;ïKö¼ÿ^­æýÊž÷’œ÷ó¨á•u/Zë~ͺIμ/Êy_YùçפyÏJæPE`݇áu/óÖº_ºëž]÷¬;³š÷Ÿ£ó~Á¼Š™ºîU±î#ë¾Îº)¯Îû™5ïrÞ5æPÀ´u¯ùë~X÷˜½îˬ;Ñ0yÞ“Ö¼Ÿ0ï€Rën:ëÞÕÛîºg­u?e݈®Ió¾aÏû‘=ï÷Ì; „7­û±\÷­Éëλ0kö»ç=.ç=µ³wÀ¼ +-yÛºîïnÛë¾ê¬ûë@t0ïÀwð—uÏŒ­ûo±î+rÝYw¢ã¯ó~Ǽóî=ë¾i­û¯Xw"ˆyT7aÝ;Ó×}ÍZ÷Ÿ¬;´àÏû2ó¨ç…u@÷[æ˜_îº?‡Ö½å¯{šu`ŽŒÏ{LÌ{‚yàœ»X÷áX÷¬;Q3iÞ×™w@¬;Êyß¼ëÌ;0'BënÖ]cݘ[÷gÞ«µFÓŸw“y¢lºwCë~˺0‡¼y_ræ}•yæݬ;ï@9ó¾(ç}ÅŸ÷-ÞÓÖ¼—§Ï;÷DÊôu¯Xë~Ǻ0¯Þ0ï™)óîÝû¬W€/¼î±î=ÖUL™÷dpÞ³¹BqlÞ‡Ì;=cëÞëÞn5ĺ—ĺ߳î̵7ÍûcÞ÷óD×Ⱥÿy +-¬{!ÿÀº0ïÞ1ïuÞ æˆš—Àº›cëžcÝPÀ»æ½Å¼5uÝk¬;êxï¼w™w züs¬»Îº ûÝß2ïš?ïæˆ݇Áuo6jUÖ¥ŒÍûo9ï›Óç½7>ïÜ;0CoZ÷³“£Ö€¹7iÞ×ìyß?<>=¿tç½¢Õ­¶˜÷¾¸wÃ4™w +-BënØëÞ±×½ì®û…\÷=Ö€ù7}Þwíy¿ž>ïÞ½Ïz_€ïjں׽u¿¹²×}‡u@Sç}Û÷Û;1ï…RE«…ç}ȼ3õ2aÝ»½e­{1/Ö=í­{Šu@ãó¾jÍûV`Þïrî¼ëÌ; #ë>ëÞ³×]“ëþ˜Í°î('8ï˯Î{µÖhzón0ïÀ,¹ç.×ÝëþçOÿµuß`ÝP‚}ïož÷ΤyçÞ/å®û³»îOrÝÛ­F]«Œ­{R¬{œu@ ç}}316ïåj­Þl鮜÷óÌŒ¿îCÖ€ïe¼Ç&Í{Ñ›÷^hÞÿeÞ/5qÝu±î5­RbÝP›7ï‹ãó~ptrvqu#æý1/æ]sæ½/îÝ0M1ïÏÌ;ð¥^BënØëÞÑÛMkÝ 9±î·×—ç§Ç‡û¬; +-ræýÇ„yßsæ=É:óÞhµó>dÞ/õʺWåº?Üß¹ë¾+Ö}S®»8wÖeLŸ÷‘y¯0ïÀ,¹çî¬û@®{·£·šõñuß–ë¾f­ûOÖuL÷Ôȼ—*ZMÌ»îÌ»šwîødîº?‹u7íuï¹ë^]÷-kÝW庯°î($0ïKþ¼o$’#ó^°æ½ÙÖ;Ì;ðåüuZëþç©/Ö½-Ö]«–‹ù‘uO°î(jҼǽy?>=¿¼¾ÍÜ?äļWíyïÊyØóîÝû¬×PØË´uoØëþ˜Í¤o®.ÎNŽœu_w×}™u@-¯Íûþ¡=ïwî¼×›-1ï={ÞMæøáu7œu×­u¯„Öý`ÏY÷뀢¦Ìû¦˜÷Ýð¼—­yo‹yï‹{—ó>ôç{>…{î¡uïèíf£¦UJáußaÝPÝ輋{Å×ä¼o‡æ=_,Wµzßwƒy>›»îÏbÝMÓÈuïzë^È…Ö=5iÝXwTžwqï¿~¯Zó¾˜÷LöÑ›wy¾†¿îCwÝ{bÝ[Íz­*×ýáþ.}}y~zl­{2±\÷EoÝgðq¦Í{BÎûÁÑÉÙÅÕMÚš÷RE«5šm½cÍûÀžwïÞg½9€b^F×ýÏS_¬{ÛZ÷²½î·Öºî;ëw×}iIž;ë€zBó¾ìÎûº5ï{Áy/xóÞuæÝdÞO^wÃ_÷F]«–‹¡ußeÝø6&Í{Ìž÷ÞïrbÞ«µz³%æ½÷$î]ÎûПwîø0×]w×=ÿ˜ ¬ûv*¹ÉºðMLŸ÷”œ÷ãÓóËëÛ;kÞËÖ¼·Å¼÷å¼Ì;ð ^ÜuënšÆÀZ÷ŽÞn6jZ¥$×=“¾¹º8;9’ë¾%Ö}-çκ ¾çÞGæ}#‘ó¾˜÷b¹ªÕ­¶>:ïÿ2ïÀG ¬ûÐ[÷®·î…Àºì‰uOÈu_ëþs…uàðæ]Þ»3ïq{ÞwýyÏ>æ½yïXó>0LSÌû³;ïÜ;𠯻aˆsê‰uo5뵪X÷Üý¿î;rÝ×Ýu_fÝøœyÿ12ï›ÉÔ¶œ÷“³‹«›tFÎ{©¢ÕM1ï]oÞ‡Ì;ðaüs÷Ö½/Ö½Ýjˆu/[ë~w{}y~j­{ÊZ÷ëÀ·2:ïâÞcñ51ï[bÞŽüy/Èy¯7[bÞ{OâÞ ƒy>ÌKpÝMÓØë®ËuתåbÞ[÷ãC¹îÉÄëÀ÷32ï?ż¯ÊyOˆyßóæýþ!W(•«rÞÛbÞûþ¼{÷>ë÷æX`݇þºwôv³QÓ*bݳwÝ÷wíu¬ûë€úÂó¾âÌûºœ÷9ï§ç—×·wrÞ‹åªVo´Úº=ïÃ4ƒóνÿ‘{îöº†8÷§^×]÷’µî雫‹³¹îÛ©äf`Ýå¹»ë>뜀Ïš÷e{ÞcÖ¼§Ä¼;óž}ÌÛóÞlëÞ‡ÌûÿØ­Ïå¶Í5ŠÂ£þG@½÷ŽÞIŠáP¹ÿë9èØIœÌgF{]Äš¡×ﺟ¿ÒýHt£Ð÷ÛÔ7« Ý›u¢»Dtç®è~ º#„BŸ¦à]+²ªÕ2¼§s†wÓv½ïÂûÛ)I.xÞúg} ;ÉýKrÊ辋£€èn1º/f“œîU¢»ÈèžÊtG!„>aßÅ{‰ÊYaxowûÃïÝ´Ï#Âû éý‚÷óïÐ;B?Ù÷é¾Oéî:–±Mé>ô:-¢»ÊèÎçtÝB¡ÏØM®÷»Tï¼s„w‰ð^ofxŸ-V„w‹ðDñ.Ãû)ù’êxGèŸTÈ=£{’Ü_¢{x®mÛõržÓ½Q«ªrJ÷çŒî ;B!ô9Ëñ~{Á;Ó;û()j•ðÞé F“ï†å¸)Þ÷À;Bÿ²‚îç¯t?¾Ý£Ðgt×ݧãa¿Ë让rE@w„B}ƒ÷§ ï<á]&¼7Z9Þ—ë­aÙ®„„÷Ãñ•ôž$)Þ¡w„~¶t'¹INÝwqøžc™úfµÈèÞnݹRøèŽB¡k¼?¦xæxA¬ÈªVKñ>Oç„wÝ$¼ûaDx9fxÿ¼#ô³r/èþÆè¾Oéî:–Áè>›ŒŒîõª¦HDw® ;“û].wÐ!„úl]áý!Ç{)Å»ÂðÞîöÞ«nZŽçQ¼Ëð~bxÿ xGèg*è~NéžÝIî¢{x®mÛõ2¥{¯Ó"º«Š$2º3¹_è~›ÓýWÏ!„Bÿÿ~„÷rE"¼×› ï£ÉŒáÝ°7Åûžáýí”$¼Cïý­>Ðäþ•îqúDwS'ºÏ§ã!£{£VUe¢;ŸÑý tG!„P†÷†w¦÷ Þ9¡,JŠZ%¼wz†÷åzkX¶ë!áýÀô~ÁûxGèïTÈýB÷SF÷]¾çX¦¾Y-ÝûÝ6Ñ]SåŠ(ðÜsJ÷GÐ!„B_ñ~›ã=Õ{‰ã ï2á½ÑbxOç„wÝ$¼ûaçx?%_R½ïýuÝÏ)Ý“„äþz<ìwqø®cŒî³ÉˆÑ½Y¯iŠ\) |)§ûèŽB!Ö5ÞS¼?s¼ VdU«Þ»ý!á}±Úè¦åx~Å»ýÞ¡w„þªt'¹gt?¾Ý£0ð\Û4¶ë%£û ×!ºWUE"ºsÝïAw„B¥]áý!Ç{)Å»Bxo¶ ï£ÉŒð¾5,Çõƒð~8¾’Þ“xGè¯+ä~¡û)£û.ŽBßslS'ºÏ§ã!Ñ½Õ ºË’X湓{F÷;F÷Ð!„B?Â{¹")ZµÞlwzÂû|¹Þ¦íz~Þ_ŽÞS½¿Cïý°‚îç”îIrzctßÝßu,S߬Œîýn»Õ¨iª\atftÊé~›ÓýWï!„B¿ºx¿/ðÎ eQRÔj½Ñ"¼ÇS†wÝ´†÷x—áý”ãý ¼#ôý +-¹¿§rOéNr?ÝÃÀsmËØÝg“Ñ€èÞ¬×4…è.\èþº#„B躛\ïwLï„÷Tï%Ž'¼ËªVk´ÚÝ>ÃûbµÑ Ëqý€ð¾?_IïI®wà¡ïUÐýœÓý”Ó=ŽBŸènÛõrÎèÞëÝ«š"UÊ_Êéþº#„BèÛr¼ßfxLñþÌñ‚X‘­VoÞ£Él±Zo Ëv½ Œï/Çk¼Cï}ÓÝIîÉéÑ}¿‹£À÷ËÔ7«å|:ö{V£^UI, \A÷{Ð!„Bè +-ï9ÞK¼P®HŠV%¼wz„÷é|¹Þê¦íx~Å»ï©ÞÞÏÀ;B×r'ºÿ–Óä~ º‡ïÚ–At_Ì&D÷n»Õ¨iªLt繓{F÷;F÷Ð!„Bû>Þ9¡,JŠZ­7Z^8žÎ«nZŽë„÷ýáHzgxOõþ½#ô¡‚îç”î$÷œîqúžk›Æv½$º½n»Y¯iŠ\ž{ftÊé~ º#„Bè}Äû=Ã;Ó{‰ã ﲪÕ­v·?Mf„÷­aÙ®„áý…áý”ãý ¼#t©û{*wF÷·W¢û~Gï9–©oÖËùtLtï´šõªªH•²À—2º?^ÓýW!„Bÿ­nr½ß1½ÞŸÞŸ9^+²¢ÕêÍv·7 ¼Ï—ë­nÚŽç‡Q¼KñþvJr½x‡ÞÑ'¯ û9§û‰è~|9ÝÃÀwmËÐ7«Ål:ö»V£VUeI, Ü…î ;B!„þ¬ï·Þ3¼—x¡\‘µZo¶:½Áp½N»Y¯iŠ\žKåÎè~º#„Bèov…÷‡ï<á]VµZãìÖénâh…a%,éï+cŒmÀ¼aã5!­®Êý_Of Ñ´4SÝiE•:ï=œ£§×˜–3v½™F‹d™åj½Ùޯxÿ¼£_³«Ü¿¿ÉýL÷UUæYšÄa0Ÿº“‘=4 ]몲$ð,C?éþp¤{£¦ûèŽB¡ÿÝ-Þ›ï'½S4Ãñ¢¤¨Ýžn˜–=šxÓyÅIšeEð¾Û×x¿êý;ôŽ~Á®tÿöF÷秧ýv³^UE¾LQèϦîر†ƒ¾®uY8–¡ÎtoŸè~º#„Bèÿìî¬÷F­÷V»}Âû#Í°¼ ÉjGÓÁÐvÆîtî‡ñ"]æEµZoj¼½_ðþ xG¿ZW¹ŸéNä^Ó}¿#t¯Ê"[&qÌgÞdäX¦Ñïu;Š$òKSDî5Ý[ïèþÙW€B¡Ÿ¡ Þïxo]ðNÑ,'ˆ²ÒÑzýi9ã‰7óƒh‘,³¢¬Ö›m­÷ÃK­÷ Þ¡wô u¥ûIî5ÝÏ5Ý7ëUUäYºˆÃ`>uÇ#{hºÖUeIàY†¦þCèþÛ¡{tG!„Ðw‹÷f÷£Þ)šáxQRÔnO7LËMÜé<ã$Íò²Z­Ox?Ôx¿êýzG¿FW¹_éþBèNä¾%t/‹|™,¢ÐŸyîر†ƒ¾®uY8–¡Oto×toÔt¿ÝB!ô#ÝõÞ¨õNðþpÄû#Í°¼ ÉjGÓÁÐvÆîtæ‡Ñ"YæE¹ZoNzy¹Áûwàý½^é~‘ûï/‡Ý׫ªÌ³4‰£`>õ&#Û2~¯ÛQ$‘çXúJ÷Ö‘î÷ ;B!„~¸ ÞïOxoŸñNÑ,'ˆ²ÒÑzýi9£‰7›Qœ¤YQV«3Þ/¿ßèýzG_½«ÜoéNä¾ßnÖ«²È—é"ýùÔìáÀе®*KÏ24u’;¡{ó–îŸ}!„ú¹z÷ÁûQïÍp¼()j·§æÐÝéÜãEºÌ‹jµÞl÷ODïïðþxG_º×+Ýoä^Ó}Gè^•E¶Lâ(ðgÞdìXæ ßÓ:Š, +-ËP'º·kº7jºßî!„ú;Ýâ½IðþpÄû#Í°¼ ÊjGÓûƒ¡åŒ]oæÑ"YfEY¼ïöïïõþ +-½£¯ÛUî·t~zÚ¹¯ª"_¦‹8 æSw2²-ÓÐ{]U‘Džcé+Ý[Gºßƒî!„úÛÝõÞ¨õÞj·Ïx§h–ãEIét{}ôìÑě΃0^¤Y^T«õ†àèýÞ¿ïè‹öz¥ûÜ Ý÷;B÷ª,²e²ˆBæ¹cÇ ]먲$ð,CSG¹×toÞÒý³‡B¡Ÿ³ Þïxo¼õNÑ Ë ’¬v5Ý mgìNg~-’eV”Õz³%z>¼×û+ôŽ¾bW¹ßÒýù‰Ð}³^UEž¥Ió©79–9è÷´Ž"‹Ç2Ôã‘îíšîšîw ;B!„þI·xo¼?ñþH1,'ˆ²ÒÑzýi9£‰7›Qœ¤Y^V«õ†àèýÞ¡wôõz½ÒýFî„îûÝv³®Ê"[&‹(ôgSw<²‡¦¡÷ºª"‰<ÇÐWº·Žt¿ÝB!ô»;ë½Që½Õn_ðN³/JŠÚíé†9´Gcw:÷Ãh‘,ó¢$xß½?þRïŸÍ-„>¨7¹¯å~¦ûó¡ûf½ªÊª Þïxo¼õNÑ Ë ’¬v4½?ZÎxâÍü Š“4ËËŠèàèýŒ÷?nñ½£/Ñ­Ü¿]äNè¾ßm ÝË"_&‹(ôçSw<²‡¦Ñïu;Š$òKSgº·kº7jºCî!„únñÞ$x8âý‘bXN%¥Óíõ Ó²Gw:÷Ãx‘.ó¢$xß½?.zÿv«÷ÏFBÿ¸×[ºŸåþBäNèNä^•y–&qø3o2v¬á ¯k]U–žehª–{M÷Ö‘î÷ ;B!„>¬»³ÞµÞ[íöï4Ãñ‚$«]M7CË»ÞÌ¢8I³¼¬ˆÞ Þ‰Þ_ÞéýzG_ wr¿Ðý@è¾ßm ÝË"_¦‹8ôçSw2²-Óè÷ºEŽe¨Çšî¿=º7Aw„B}t¼ßñÞ"x?éfXNe¥£õú†iÙ£‰;a¼H—yQ¼o‰ÞŸ‡wx‡ÞÑÏßÝßäþRË}¿#r¯Ê«94êÞM{ÿ×3߇²“´ÝîšÌ¼Ï=1ææbe¯7žFIšDïw÷_^ëýzGï´Wrÿö—Üÿ r?\ä¾Ûy–ÄQà»kgµ´æ³éD}E–Dç:Dî”î,KäÞ¢rÝB!tj¼7(Þ[ ËR¼½w8^%Yé†#m2Í­åÊY»^ÆI–ÛݾÒûÑû zGï¹å^Ñýt1fæbi;Ï£8Íò’êýêýp¢#oïí]ä{y{O¥3ªn˜v6_(•«µF³Ýéõ‡£ÉtvÂ÷ÎòN{¿¾þ}ƒ½Ã{znîTw>÷¥;÷s6÷ͽßí°¹×*åb!—µL]SÙÜnÝY^Ï=‚¹À‡æåÝß»Ìö§½'’lïšnXv._,UªõF«Ýí hïsÚûŸlï ìÞÙ~s?;ϦãŸ{“æ^*䳶ihj&½ž»"K›{40wÔ>°ÀÞÙaDI’¶w–÷ï´÷Œª¦•ÍŠåJ­ÞluºýÁp<™±½Ÿ_`ïðîvÍ}˜û Í}ØïuÚÍF­JsÏÙ–¡³¹§’ÎÜYÝeYEš»€¹Àçpäí] ½‹¢$ËJÌÛ{*Quô³ùB©\õö>â{? îý7öoosîwá¹³º»sŸŒ†ƒ^·ÝjÔ«•R‘ænêšÊæžpêSY’ØÜ£4÷柄—÷å=*J|ïqÚûq"Éö®é†eçòEÚ{£ÙîôúÃÑx:›Ÿú{_bïðö¶ÍýÆû›û 6÷ùt2væÞ¬×*åb!—µLCS3iî1>w‘æ.xsGÝà38òö.ÐÞEÚ»ÂöÎòþï]ÕtÓÊÒÞ+Õz£ÕîÒÞ'ÓÙ öïfÇܯ×s?gsŸÑÜûÝͽZ.òYÛ4t6÷TÒ™{œÍ]^Ï=‚¹À§âåÝß»,+1ï錪´÷B±\©9{ö~‰½Ã{aî wîg|î£A¿×i74÷b>g[†®ÑÜNÝcŠ"K›{40wÔ>£ÀÞÙiD‰ï=Î÷žH¦ØÞuô³ùB‰öÞluºýÁp<™Îiï?~^þÂÞáÍ<¾bîÓñhè̽^­Ðܳ–©kjf=÷Ÿ»Hs0wøœü½ ´w‘ö®°½SÞùÞ5Ý°ìí½Zk„÷~½Ã› Æ}çÜO½¹wÛ-š{¹X ¹lîé”;÷8›»Ì祹G0wø¤¼¼û{—e%¶Þ{FÕt“ö^,UhïíN¯?aïð¦^5÷Éh8 ¹7ë5š{>k›†NsO&ŽÝ¹+²$9s¼¹£îðöÎv#J|ïqwï©4Û»aZÙ\ö^o´¼½ÏØÞÏ÷Ü;ú¯°ÿÜO¼¹whîÕr‰ænºæÌý;ÕÝ»èÎ=‚¹À§æï] ½‹´w…íÝÉ{’ö®¦M{/Wj´÷îþ{ÀÞáuž™ûíι÷iî š{1Ÿ³-S×ÔÀÜcŠ,ó¹GsGÝàóòÜ{,¸wï=_(ÑÞ›|ïCìþsÁ¹ß¿8÷1Ÿ{›æ^¡¹g-ÓÐÔLÚ›{œÏ]ræ.`îpŽ{ò½ËὫlï–£½W{ŸbïðßÙ˜ûÝ~s¯ÓÜ |î:›{*™ ¹csWhî¢;÷æÂß»àì]â{{{OgØÞMÚ{ÑÝ{çoöŽ¾ÃVÁ¸‡çþ{ÛÜ{v‹æ^¦¹ÛlîŸû1Õ=‹=7wÔ‚—wgï"í]a{ÿÆ÷žLÑÞ Óʺ{oð½°wøoüõÜk4÷¼3w5á{?¿Ø{ïèû—´9÷;>÷?Á¹ÿòæ>ßwî +-æ_Ÿwgïb`ï,ï‰m{ï?ÝûÕb¹\];}_ïýIßÿõ#á=>;÷[î«ÕrÁæ~˜ûè5sbîðÅüÅÞ[ÞÞ§[öè{xïèû²÷àܯý¹ÿ¤¹Ÿžxsïîšû·ðÜ̾š-{oÛ{ÍÝû€ö>ó÷þ‹ï}õüÞ°÷¯åqsîw|î<î4÷¥;w÷³ðÜ;æSd90wÔ¾žàÞ£îÞ•m{/9{oÓÞ‡Á½_²½/hïÔ÷?Ôwwï÷á½£ï/woî·á¹_…æ>̽²sîæ_œ¿w᥽çÖ{ïx{ŸŸ°½SßùÞ—ÎÞohï^ßÂ}ÿ×·„7ôžûýÆÜW|î¿sŸÐÜ{ë¹vÍ]ÄÜà«óóþÂÞMïuoï#¾÷SÖw¾÷«ç÷~Þ;ú~ Âq؈;Í}Áæ~éÏ}JsïÓÜ›þÜmÌ`—Wî½ìî½K{öÎúN{ôýÎíûú~àÃs¿fîËåâŠÍÅæ>ŸÑÜ4÷›{sØÓköžwöÞ ½÷hï“©·÷Ÿ´÷Ehï·îÞï±÷Ãõ$înÜïqçsÿÅçÎâ~Âç>¤¹·Ý¹¹ë[çÅÜ\¯Ý{…í½I{ïhï³9Û;õíýj± õý}?dOæ~ïÎý64÷›ûe`îãͽCs¯9sϾ4wÁŸ;êÿg·N×ÒØ‚( ?¢€ö˜édPPÁTfh Ðû¿žSµww³{£ÑÄd}w°ê©ï?_ŒÞ³±zÿJz/‘Þ+¤÷jõ~!ôÞ#¾³Þ‰ïÓi@ï>ßïÁ÷¿¬åpg¹ܯ¦Éà.åÞn±Üëg,÷#’û¾”ûçUrOAî!„B~½g’ôþÍÕû!ëý”õ~ÙôõN|·gzÅ|g½û|Ÿû|ßÿ†Bp¿wáîÉàÎrŸN î,w÷Ëý¼Ár?9&¹Üw!w„B¡Ÿ/¤÷ôr½ï±ÞXïguÖ{«Ý!½3ßIﶫwÁwOï3_ïàû[/îó Ü|¿ºš:$÷ñH‘û˽Ve¹—IîE’ûÈ!„Bè Åè=£êÝå;ë}‡ô¾@z?>a½7Î…Þ»ÄwÖ;ñÝ|ÿäû|ÿ zÉ݃»*÷ïBî6Ëà.äÞj^²ÜOY{‰äþrG!„zj½§U½ߥÞÿc½ïIïeÖ{µÆz¿¸lºzg¾Ol[èý»¢wðýí†û}"Ü‚»;ýÍroÔÏXîG,÷=’û7È!„BèY…ô¾л¹Ðûç/¬÷é½rÈz?=zo¹|'½ßßgàû.îsî¹Û$w‚»/÷‹s–{õä˜ä~°OrßÜB!„žß2½½ýFzßc½³Þëó…Þ™ïÛv¦S_ïàû[.îRî*Ü‚;Ë݃û%Ëý´Ær¯”IîÅ]!w wWîäŽB!ô”’ô¾£÷Òûþëý¤Zc½_0ß»‚ï¤wâ»ãL¯|¾ßø~¾¿‘w)÷éÔ±IîwEîúËýèå^b¹ùüŸ”{!ïÉ}rG!„zR±zÏ +-½ë½ïIïåÊ!ëý”ø.ôÞzg¾O$ßYï.ßï$ßçàûÛh%Üo\¸_¹p'¹3Ü»†û9˽zrLr?Øß#¹ûªÈ=¹#„B=»•z_ðõ^ÚÛ'½ßYïçÌ÷Žä»5"¾Û¶3•|¿öù>ßßB+à~«Âݱ'$w‚;˽Ór'¸×Xî•2Ë}w'(wrG!„ú%ë]c½ß}½ý¶Ãz?(WXï5â»Ð{[èù>&¾;ÎôÊåû øþ&zxÜYîÓ©cÛ w’ûî –;Áýä¾W*FänxrÏ@î!„BÏ+Aï›RïfHï»ÅëýøÎzo(|ZÄ÷ øþ¦Z÷; ÷kî$w‚»"w‚{•å^>Øg¹«pr×umKÊ=Ír_‡ÜB!„žÑR½®Þ%ߥÞ÷ˆï¬÷*ñ}¡wÁ÷ñݶ©Â÷ÛU|‡ßS?÷«©ãØ“ Ãä¾€{åNp¯°Ü‹»;ªÜó9_îY!÷ !÷äŽB!ôœâôža½oiº.ôÎ|zÿ"øÎz¯ßYïõßûæûØã;ë|ÿ3{xÜo"p·Ü=¹ ¸Ÿ°Ü ÜM’»#÷5È!„BèYEõN|Ïf}½߃z/ßYï'‚ïRï’ïÃ0߯cø>ò~µ¢nÀý6w›à>b¸“Ü]¸7Xîîe’{îBî†û&äŽB!ôë è]òÝÓ»Fz7…ÞU¾³ÞË‚ï¬÷†ä{§+ønß'ÛIàûLáû=øþª=<îc†û ÷*Ëá^ +-ʽg¹ëº¶ÅrÏ@î!„B/ÐBï©€Þ7…Þ Ö;ñ]Ñ{Qðõ^ ð½—È÷Á÷»e|‡ß_°$·à~íÃ}êÃ}(á¾»€{EÈ]»{Î$¹k,÷l–á¹#„B½Dk ¾/ôža½oiºNz'¾“Þ¾ ½W<¾³Þ]¾÷™ï£Gð}ÃwøýzH‚ûlÜ-w’»÷Ë]½¨ÈàÎr7„Ü7]¹K¸Cî!„B¿¾½ß³YÖ»Fz7IïÌ÷…Þ‹ß…ÞëÌ÷f+‘ï?\¾ßº|Ÿ)|¿ß_ª8·/à~· +-î½Ü…ܸ ¹çs$w]׶BrOAî!„B/RPï’ïBï›B#¾³ÞU¾K½«|o ¾‚|~Wø~æ;üþË{ˆƒû<÷îN,Ü¥Üp/)r'¸³ÜM’»Ærg¸«rÜB!„^(Eï©…Þ3¬÷-M× Ód½3ß½ïÅñ½“Ì÷ë(ßçq|‡ßŸÓ +-·Ï„ÛU¸OcáNrp¯I¹‡àÎr/äIî†û¦{rG!„zÖ¾{z'¾g™ïš¦éøNzã;ë=‰ïvï®ßg+üÀ?¡X·ßÜîÃ]¸ýqp/‡äNp'¹çLÓÐumË—»„;äŽB!ôEô¾áë}KÓuÃ$¾¶™ï1z?a¾×I|g¿‡ù®øý~n±pŸûpWÝ®Â}‚{kÜIî…<ÉÝ0tMsáîË=¹#„B½RA½¯»zg¾“Þ5Ý0HïÄ÷wïË÷>ñÝÇßãý>‡ßŸU<Û·'ÀÝvá>|$ÜYî÷ÁÝ4t]ÛråžVä¾¹#„B½VŠÞSžÞÓBïÌw]7Lâ{ùþáãJ¾·|Ÿ,ãûr¿ð‰=Õíî#î]†{3÷Üî$÷|.g†®±ÜîîªÜ÷#„Bý#­)|_÷øž|'½kºa˜9âûö;æ;é}5ß{ +-ßÂïüŠÂ÷Iv{ÜÇã‘e qprÃä¾] ¹›¦¡ë w!÷´'÷äŽB!ô;Rõžòôžzg¾ë‚ïyæû{ÉwÒ{2ß[߇ֈýåûÏø€EÎ’àö»x·{pïÜ; ÷ËåpÿÈpß&¸çLÃÐ5–;Ã=ãÁ}];äŽB!ôÊ©|—zß`½3ßIïÌw“ø^`¾ðø¾³á{]ð½É|ïßCËb¾Çøý6êw>¶D¶/s{5$¸÷îm†ûÅ2¸b¸¿#¸çÜu†»{Ú“{ +-rG!„ú½…ô¾.ôžz—|7 3G|ßf¾ôù^ ñýLðý’ùÞ!¾÷á5øï÷Ù*¿ÿ{€ž ÄöˆÛ%Ün,k8 ¸w î-†û¹÷ã0ÜIî÷÷÷ÁÝd¸k.Ü3î®Üw„B¡ßž¢÷”ÔûëÝã».øž'¾¿c¾Jàû©àûó½M|ï ¾[£ñr¿ß)~_øDðKØ~¯°=ÞíÜÉí#k8ô î‚{“áÞðà~„û÷.Üs¦a0Ü]¹§…Ü×!w„B¡?¨5…ïë’ïiæ{–øNzg¾›Ä÷ñý}2ßk‚ïçÌ÷ñ½Ûë ¿ØïöÂï?âý> ùý|ÌÚ0Û·ßÝþÝw;Ãݲ†ƒA¿GpoÜ/îuî‡ pßöà®ûpϸoH¸Cî!„BNªÞ|Ï0ß7%ß ÃÌ­à;ùùÞ`¾7‰ïn¯× †V²ßoâü¾ðáã.a»âöQ·¬ápÐï÷º÷Áý‚á~æÁ½ûGîyîÚîi ÷uÀ!„BèÏ+Ìw¡w…ïzßw|?–|¯3ß/›-ò{·Ûë÷Cé÷É„ùç÷¥€ÿK»j)Û=·_‡ÝnK·[ÃÁ ßëu;÷&Áýœá~Zsá^>ˆû; wSÂÝ•{î;B!„ПXXï>ß³‚ïZ"ßw|¾“ß™ïä÷Æ9ù½ÙlµÉï=ßïã ß€¿] øxÁ¿EÂÇQÔdûLe»ïö«8·÷¥Û[ÍK‚{£Îp¯ž¸pß$Ü3î€;BýÏnõ7‘caþ%$±! x·³y‹÷-^’ÀÓ4|ÿï3çèH*©Je;4= Éû¿–^ÕE]<!ô«çûžâûóôžÎ÷3Ãwò;óü>™’ßç‹Årµº¾Q~ÿ׿¶~÷¿…à ç}º«ömØpû[åöÛ›ëëÕrIn'¸OÆ ÷~OàÞlh¸×6Á}_à¹#„Býúí¸|&|ß߂栗ïäwâ;û}4&¿Ï®ÈïËåêZùýñû{å÷â÷õ€àIçì÷€Ú¿9jWlÿbÙ.n¿·ßyn}{ss½Z‘Ûçäv‚ûhÈpïvîu ÷jîG€;B!„Ðo«÷ðýDøN~'¾“ßûöûÄóû­ç÷¿ß+¿ÿÕ¼'ø5„ÿç¿öÛÖ©} Û?1ÛÓݾ ·ÏØí#v;Áý²­à~qná^òá~¨áž1pß‹ÃrG!„úÅÛy8ßËÄ÷šâ;ùøN~ïöÈïÃù}J~Ÿ;~íúýŽýþ‘ýþIüîþ‹ øÁ¯'üÿÓñ›?ä{í¾Ú¿jµÇÙ~Ïlÿ@lg·Û­Û¯WË%¹ýŠÝ>&·Ü»‚{«©à~vêÀ=ïÂå®à~`áîËýŸþB!„Ð6%ø¾·–ïá{•ùN~'¾“ß/;ä÷~ªßßx~~“àc„ßÂð?_ò[>ù=íµ¯aûb{šÛ'äö!»½Kn'¸7ê +-î'÷J +-ܳîû!¸Cî!„B¿M ½oæ{©\©0ßO™ïä÷û½K~ßÇa¿Çoooï Þ!|Üð[#þ¡œðlüÃ’h©=ÎöÂv×í·ìöÕj¹·OÉí#v{Ü~In'¸_œ3Ük÷r¹Ttà~¸#„B=ÂÂ÷W¹|¾P, +-ßÉïgçä÷ù½½Æï7Žß“€ÿ>!øá†ÿ!ÆÿõŸñm=Úãj÷Ù~ç±=Íí}r{‡ÜÞ"·ÜÏN îU{¡ÏY¸³Ûw„B¡ÇØÖ|?f¾ç„ïåJµJ|'¿_ß›ä÷Kò{ÏóûÕ|±X®VìwðïÀkÁÿ'&ø0á=Çÿ÷B>üž÷M¦¢=®ö0ÛÅíÄöëÕr¹˜Ï¯f³éDÜ> ·wÉímr{ƒÜNp?©Õª•J¹dàþ2‚{Öƒûž†;äŽB!ôÚÙŽï‡Ì÷—Šï…b©T®Tª5òûù½žî÷ùb¹\]o¼'øá#ÃûˆOeü_áü†Éoa²³ÇÑT»Ëö·ší·ÌöÕr±Öíäv‚{µZ)—KÅb!ŸÏ½b¸Y¸gbp¸#„B=¦|½ù®ü~tÄ|•Ëç Åb©\®T«µòû¹ø½åù}4žL¦³û}±\ àÙï>à“‚ÞÞA|\ñ›!ÿÃ%ú3IvmöÚcjÿ¨Õž`û ³}Él¿šM§“ñx4ú‘Û›âö3r{­Z©”K¥b¡Ï1Üw„B¡§ÕF¾g-ß™ï¹|¡P,•Êå÷ÓT¿'Óé슿 þÞ¼%ü>ᓈwrür>uÉ{/Av1{í‘Ú?hµ'Ø~Íl_0ÛgÓIÐíuqû‰r{¹T,ò ÷— ÷ÃÜŸ%á¹#„B=ž6ð=ãñýžÏŠÚ﵀߻½~0²ß'ÓY ðJð ø· xOðµàáÃÿ×3¼«xŸñ0¿uÉMçÅÙÅìI´ß ÚIíw®Ú#¶¯„ísfû”Ù>ý^¯ÛqÝ~.n¯j·Øí ÷£#q»‚û÷]À!„Bèq·ß߉ïÚïå„ß›­vû²ÓéözýÁ`8bÀOÓŸ¼!|Øðñã]ǧaþŠ¯Fï}N’]™ÝCûGƒvQû;_íÛ¯˜ífûpÐï÷ºÝÎåe»Õj6õ åöSåöJ¹TrÜnážÕpßÜB!„žXkù~À|W~×|¿Öû½Ûë÷ÃàS&|Üð Å»ŽY>õkN~õ7?û`÷Èî›]£= ö8ÛgÂö1³}ÐïõºÏígÊí5íöb!ÏpÜ®àž1pßÜB!„ž^¾?¾ï+¾g„ïý~Qo4š­Vû’ß[x+x!¼^>`xA¼Q¼a¼ ù$æSYŸvì‹7fßÐ`×bÈnÍþAÌnÑž¦öˆí#f{¿×í2ÛÛ­f³Q¯_œ³ÛOng¸³ÛÅíYåvÀ!„BèI·ðûžøý@ù=+~?´~'¾'ü΀¯×Íf«Í€ï2àði‚w ÿNï^¯¯oïH>Àùmó7¢mì"öˆìlö;1»‹ö7Œv«ö8Û‡–íf{«ÙhÔ/Øí§ìöjÒí +-îìöçìöŒ¸pG!„zê­áû¾â{†ù®ü~D~'¾'ý΀'¿_Ô>àûàÁ¯Dð.á]Ã[Ä‹â5ãã ä=Ë'=¿&ÿÚÑžyá>.vCvßì‚öׂv¥öELíÛ/5ÛëÌvv{Ý^»ý»=«Ü~à¸pG!„zÚ…ønü~ üže¿¿¿k¿çÄï%ö;žü΀¯3à[àÂ_²à]ÂkÃÄ¿7ˆ×Œ×Ž7(ïiþ9÷?ÙQýHv%vCö¸Ù í7Œv¥öy¤öˆí=‡íMfû…°Ý^·bn?´nψÛ-Üww„B!”àû®Ã÷}Å÷„ßàóyñ;žüî¾)€~*‚÷¯ oï)^1^;^CÞRÞÕ|œôÉü£÷цYÕX°±²»f7h_Ú•ÚÇVí†ííÛÙíÄö°ÛŸ·h·GpßÜB!„Ç÷Ëwã÷ƒ¤ßàµßðä÷àYðà­à',xðÚðŒø„âãÅñyKyGó1Ò‡óGzô½õº»+v&»kvƒö+F»Rû(¦va{CØ~î²]Üž'¶Üžµnß7nÜB!„P¬ßw¾¯õ;^ù=x¼¼¼"< Þ#ü^žŸP¼b¼8^ o(i>núPÞQ; ßZ¯+°»bg²»fŸ³Ù ÚÇ‚ö¸Ú ÛÏ’lWng¶'Ýž ºpG!„BñÂ|O÷û¡ø]žüžxGðŠð,xðÖðñžâ-ã5äEòÆòçmïÅØ›oõÔËuåuv#vMv1û•6»AûPÐR{*Û•Û™íGÌö Û÷àv„B!´©øý¹ö»<û=ø€àáYð†ðC&¼6|„x£xËxò†òóè7]x£'n#­+®+¯3رÙ]³ØìÚj²=/lWn?Ônφݸ#„B¡mJò}×ð=äw<û= x-øSWðšð—Bø.Þ^#~"ˆgÅÆ;7”ËGž¿õYïå¸5÷ôÎÊj]¼Î`wÄ®É.f²ÙchwÔ~nÔbû+a»¸ý¹r{f;·î!„B(­¤ßŸ¥ø]¯üž¼|5&xEø¦¾Í„Ã{ˆw¯¯¯ /’×–·œwMŸšstéP]°.\g¯°;b'²[³wÙì.Ú•ÚÏDí'Fí¶k¶Gn?€ÛB!„ÐOh[¿gŒß}À¿bÀ+Á3à#ÁŸ°à#Â7˜ð®á#ijâ ã•ãäEòBy£y—ôë‹ŽÏõ€ÌM ו×ìŽØ-ÙÅìm6{„ösFû)£]©½"jWlϹl?rؾµÛw„B!´];ýnŸMþX>'€'Á—Xð|ïÞ7|LñŠñÊñ +-òJòÚòZó‘è·Èޘꉱպâ:{Ý€Åî’]ÌÞ`³ ÚÏí'Œö*£=R»°ý¥Çö–í©nß…ÛB!„Зê÷ðÚïaÀ‹àó,ø‚|™ïÞ5|Lñ†ñy‘¼PÞhÞ‚~«Ì•‘žÁ¾áºñ:ƒÅî’Ý5» ½Æh¨]خԞÂv¸!„Bý…ü¾ëû= ø˜àsZð ÂkÃGˆwÏŒWŽWW’זךD¿]ö’‘ÅŽëu»»&{Òìí!µGl¾–íp;B!„úù¥û=ðZðÿc·Þv›¸0Œª!I ¤Eá²R…úþÏØzŸ¶A!¶Óµngö¿Gsõ=O?$|jø>âŸ3>t|ùPò©åSÍ— ”,äCÿ¤‘ï¥Ö¹zýì¹ØS²¯›ý¿h_Wû"ÛK¶ßo³]¸ð*~[öû]í÷>àsÁZ|—ð©áûˆ?T|—ñ¡ãcɧ–1_ƒ¾Ó…y§œŠ#1ÖC­‡\½~ö\ì)Ùk³¿”f¯Ñ>Uûœí5Ûu;¿Þ±~þ1|SðŸcÁ÷ ß4|ŽøCÅw:>–|jùó¥ç[WóÃr.ÎÄXµr=ôú!Øs±7É~hö¯±Ùûh_Uûï¥ÚÙ®Ûx çüCøRðOµàs _+¾ËøÐñ±äS˧˜/=_ü5Þ('ãPŒõPë!×C¯‚={›ì¹ÙÑ>Wûc­ö!Ûu;oiÓï]Àß—€Ÿ >$üªá‡Š:>–|jùó¥çÛª_j_+gãTŒõPë1×C¯ÇbŸ’ýÐìËh«ý¬l×í¼‰±C‡€ÿÐ|Sð5áKÃ?ç†/_+>f| +-ùœò©åsÍ7I\óz^xik=æzèõ?C±ÏÉš½öMµËv®Ë6àïÚ€o ¾Mø9áCÃßf| +-ùÚò9ækÏßzãã—r0O}ÍÛ_J¯7Å“ý9'{hö§Úìûjßg»nàB¦4>ü"ᛆo">V|ÌøÔñ1äkË—˜ï“þ¨þHú’—ÓE Å“ýSIö®ÙOT»làúL‘:ü‡®àSÂç†o#>V|—ñ9äKÊט£~gx½ìäá”ë±×ÛbOɾlöísµÏٮ۸Ǿ$ü}Ÿð¹á‡ˆï3>‡|MùóSÔo ¯×¡>/Filter/FlateDecode/Height 3418/Intent/RelativeColorimetric/Length 73012/Name/X/Subtype/Image/Type/XObject/Width 3418>>stream +-H‰ìÁ€þ¯î +-€Ùƒ ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUa€ü_AUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU…=8òmUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUöëä`†ØÄý_ðÁÈŠàp …h/½Cµ¤ßPGz¯þ%ý΀úÒ;’þaÀ•ÒÓpJúw¤—`›ÉŸ4€~ôÀGA‹ , 1짯€‹­î©—ýúPoãVÂ0ü¨‘"©^\"Y²cÇU²ÓNrêýßÖÙY,`°EvB‹û}÷€óîÑôúæÆZ÷2è«@µîCŽˆA_'¬uo$Qo"ÕÐ[j—ˆ¦Ô×; ]Ñ#l¬©=¬‘Æ‚WDDDôhaª‡Xjˆ¦ÛCœ5ÂWëžO"""¢¦¡¨ä©uŸpDôXb¬¡¾Z÷ŒÑ䆪nQ™7ÓŒˆÈl€²ú€…®ˆˆˆè{jª:D5†Rs"šnc Õ,tEDDDßacQUÕXCíÑT ®’°:|…®ˆˆˆhõªÊ6U T£ñ´ ¢Ín4»JÂ*ø +-]ÑÚëSU©lP„Ó’ˆ6»±ô2eùj„®Ö=¶DDD´É V•ªT%Lõ]+"ÚìFÒË2V¬>^¡+"""ú[2ŽŽnU¥¦ÊAUÀTïÑu@D›ÝHzÆJÕÁ«n]­{z‰ˆˆh³¨ªU±©2P0U<¶‰hZ ´Wn¬X^™ºWDDDôWÕɪ’ª,S¥¢²-•ÝVGD4õzЕ+Vä«„WÃtµî&""¢ÇßU¨ŠM‹Ê²TtKéŠÜJ‰+òUÄ«Ý”WàŠˆˆˆþ’:XÕ¥*ªÈT‘¨rM©ûéÄꔈ¦•¹&µbEÀÒ¾ÊyUÆU¦«uO2=ΰ*RÕ,¨J£J™*UÊ©2 Îˆhêu˜+AV$¬ÌW¯út®ˆˆˆè+ëUÕN¦ªyP•BU0U$ªØS¶¢Î‰ˆ¢lnÅÆÒÂJ}•òª¬+pEDDDß ^Ví*VUíUµ¨ +-¦Ò¢Š=•Cê"é’ˆ¦[:9µ"beÀ +-¾JxeëªWëžh"""z d•¥ªªRRYž2õ„ˆHez+2V&¬ØW-¯ŠºÚt®ˆˆˆè¡•\©*°*V•*“TÚS¤ž&=#¢)—NBN-m¬ ,ÃWžWKÏ«²®À=¸A¬jU5ËTµòªÒ¨ +-¦ +-¤R Š1¥n©çDDi†·"daÅÀj}ÕèªåU®«á¸Z÷dÑwÚ(VÍ=«´ª,Tµ¦jI¥@qÊ_N?讈ˆ¤hRi)cÀò¼:ixuØðÊÔÕ,ÖUŠ«-pEDDD eÕ̳ªCUUÞTÞTATšS™£®³^Ñôʧà:Ö6V,,ÓWNWžW©®æ^WCqµîñ&""¢ï*ÛUšU{žUsŪDUGNU +-UÞT—ÞT±¨4§ @Ýé rEÈj‰ÕKûJñêØñªCWàŠˆˆˆF7’Uª™ªŽª T)RQ)O%’ºzIDÏBJ-e¬VXXÊWŠW'ŽW¦®á +-[Q’ɪíV-«,UT¦ŠE¥8•1ê•ÙD4ìÈ´¥Õ+Vã« ç+§«Ó‚®\ÍÀõgºJ±j×fÕʱʩê(QU„*e*CTZSž^…,vidbi`5¾ŠxuÞòJëêÀéÊájÑàjnàjÛÄÕº÷œˆˆˆÖV«vºYuвÊTU‹ªÄT^TT‘¦ÚóéMÜOD4í’Mx“PK+V¬ÆW-¯.[^™ºr¸Z:\í÷à +-[Q‡«zY•©Ê¡êÂDUcªˆTT1¦Â%õ¶»wD´™õ¼ýœ[Y-±<°_]9_%¼Êt¥qµÊpµçqµáj \M:ËU#Y«ê2VU‹*e*Oª *Í)M\¦¿"eµÄJ|ó*ÖU«HW®f ®v®¶-\­{݉ˆˆèïÌ`UâªNV «jUEª2Q՘ʓ*ˆJy*ƒÔ‡¼D4½Œ-øZK«–Vã«ç+Å+¯«'AWÕªÕº2q5ïĶ"""šb[EWyVíYu¤Yu.¬ŠT•£ê¥C•7U,*­) PŸˆˆT¹4²Zb¥Àr¼ºõ¼òºzžèêLt5W‘­¶±ÑIJ\µÓºªaլ̪aÕ™°êBX•«J£Ê0U,ªXSíùtgtODÓ˃»TZ)±"`5¾zÕúêÆéÊñ*èêRtu.º:==\wàÊÛj[M5ƒUÛ-«¼«æÎUeV «.…UZUת4ªSe¤R J0¥oªÏDD!Ó\YAXXÊWŽW^WŽW™®.DWg¢+WûW3…««-pEDD4:]Õ°jÖÁªSǪ a•¨êi¬ª›FU-ªÞ8TySE¤Òž2$õ…ˆÈ,§–6V+, ¬ÆW¯´®ž‰®W—¸ZÔ¸š\a+""¢)f¸jG»ªa•sU«.«DUÏcU½ ª +-¨Ò¦jI¥@•Yêg«_ˆhš™‹9K+–ãÕÛŒWZW?8]=uº*áj™àjOã +-[M£’«vƒ«ZV-«3V=ñ¬U]ŪªQõZ£*5U •æTP¿©lrEÆ +-ÂòÀj|õÎùJñJëêÚéê¹Ó•ÇÕyŠ«Uƒ«}‡«‚­¶±ÑæÖ媽ÖUûµ«–â*ͪÍ*QUÃ*QÕ‹XUª´©ZRE ²$õ‘™%-M¬XÊWŽW¦®nœ®®œ®L\ ®\-j\9[Í´­v°ÑF×ãªY명¸j%®jXuœ³JTÕ°JTuk©* J›ê³7UªÜR¿ue8+V ¬ÆW&¯]½tºzát•âê,àê°ÁÕRpål5w¶ÚÃVDDD›_¿«æÞUKqÕ¸êH\e³JTÕ°JTõªUUªw)ª¼©¾´¦Ò Ê5õ"¢¾ feÂJ}•ð*ÓÕ­Ó•«ÓS«•àjáqlµ‹­ˆˆˆ6·Wíµ®ªYµV­„U‡Ý¬U5¬UU¬ +-ª²Pe‘*ö”º—þ "êÏbV&,í«ˆW¹®Wµ®ºpålu$¶:[-•­fØŠˆˆh£+¸j7wÕR\u ®VyWÙ¬rªªY%ªú)U•CÕg…ª–T‘¨,NýIDÔŸ¥¬X©¯4¯"]½ñº†«CÁÕJpµ\Í®°ÑÆÖíªY䪕¸êйªa•¸ªÄ*§ª7™ªªîª~ñ¨2HerêŸDD½™ÊŠ„û*æUAWƒp%¶ªqu ¸jlµ?ÄVëþˆˆˆèõºj^»já\u ®VV‰«Ê¬U½ÍU£êW*Mª TÑÁô/"¢î +-Ê2€ùªáUIW‚«XW®j[Õ¸[:[-c[ía+""¢Íj€«ö•««Nœ«V‰«Ê¬U½7Tõ³SUŒ*MªTéÙôo"¢BEeYÀú½õU£«ˆW‘®Wµ®Ê¸ªlåquìp%¶Za+""¢ n¨«–ÞUGµ«jV‰«V‰«V‰ªV}Veªú¥QU„*›TÃ1õ"šfÙ• +-+õU«\Wï®\½¸ªlåpUÛêÄÛê ±Õ [mLÃ]µò®ªXå\U±J\Õ°êJ³êuÍ*QUͪ•ª>eªêDU&*ED«H¬XÁWšW–®WºqõÌ᪲•Ã•ØªÆ•³Õ¢¶Õ[mJc\u \U±J\U±J\U³êÚb•¨ªfÕ°ª¤ªU¦©z4õ_"¢BÝÈJ€õ§ò•ç•¡«ûû{ÁU­+W7W•­W•­Wµ­j\y[-ÅVûý¶Z÷'ADDDƒç*aÕ‘°J\U±J\U±J\U±ê…ͪŽU÷ªTUETå¦SDôµ•ˆeùJó*ÕÕgÑÕèÊÄÕ­ÃՕલ•àª²•àj„­¶°Ñcjˆ«ÚUÇÎUç⪊U⪊UWªǪV}r¬ú,¬*ªJ¡*5U·§þGDÔ['±l_^eºªqõEpup%ºjqõRpUÙêZl%¸ªluéluªlµÂVDDDÒÃ\u&®ºWU¬W]_ «n«^'¬º»«YõE±*¨êVUU¹©à}£ŠÂJ|xUÖ•ÂU­«wo=®^ ®nWW‚«ÊVOÅVÎV'­°ÑF´•Âj§U‡«NÅU⪧ÿg¿>ÔçÚ( _@I¥·BËT±ÍÿÿQýﻳRvè8QYÏI¬u³«ˆUgÈ®r]ŸU^&«TªÊB•ÚT?éBe·‹°R¾ŠðJ¡«®n|\‘®ØV®¦Œ«1ãÊqØV=¶U›mÕðm%qµ»­Šž „Beõ +-WµÙU=v•ã0«Æî„]E¬bWmXu­dU†ª’¨ÊUÑW !ô!Ë–šWyºŠãŠlµÁÕŒqå2®†CgÀ¸êvÙV-¶U=ÓV>­N7´‚­B¡wÞÞ®²ÙU éª.»j0p†Cf•Ë¬šù¬Z†¬ºòYõU²*TÕmTUJTe›ªèW†ú$åKÅ«¤®"¸úƸú’ÂÙŠq5™°­FCÇ‘¶ê°­š™¶*ÃV!„ÐÇjOWY¡«ZÒUýþÀ‘®šL˜UžÏªÐUV}°êN²*©ªªö ÕÿB(»}„•Á«l]eãjÁ¸"[M'®Ë¶:ƒA¿×c[µ¥­j)[U"¶:ÙØ +-´B!„Þk Wï઺tU§ÓíIWFc×LÙUsvU.«Tªzˆ©J*h +-!ô÷Ú XI^)tÅÕW7\‘­WžÇ¶š¸ãñÆV]i«l…B}ðŽ°’®:ݸêLáªæÆUƒ3ŽÆcw®òdULUÙ¨Úïý‡B©^å«”®"¸zˆàêW +-W[1®–Ë=låÓÊ·UIØêDa«¢Ç!„:ð2\uªt•™áªñØWÍç‹å’Y•p³ê‡‚U)V½UE?6„ÐGë%¾ÊÑU +-W?WßS¸"[­–‹ÅÜófÓéÄuÇ£QŽ­´­ÊQ[%h[!„B¦pÕ‰pUiGW CWyÞ|!]µ«¢ªzÊP<…zóöä•RWQ]%qŶòq%lµ–¶š{³Yh+Gm+=´U¶B!„ÞeG +-X®*³«|XmuÕ4pÕju±ö]å³Jº*—U¹ª©Bÿ¶—ëêq£« ®„­nÙVWÂVŒ+²ÕÅj¹ l5ɱ•¡°•¤UÒVEÏ +-B!t˜©]u*]U‘®Ò|WYjW¹¡«–ËÕ»ŠX%]°êç6Ví­ª¢¯Bè“·3¯öÂÕ÷®ÈV—l«Õr±Èµ•­´U)´U‚V°B!ôÏ;ŠÃêDªİŠºJ—®ªe»j¸êrã*f•pÕmàª-¬Ú UEß-„Ð!µ“®žº +-põ;‚«Ÿ>®B[]³­Ö­<ßV㤭êÂVf`+¦ÕÓ*ÛVE B!thÅ]uuU™]u¸Ê\ÕP¹jw•d•pÕ¬ÚEUE?,„ж®Ô¸ú%pu˸b[1®¤­®¶Ùª™°UUت"m%iu§l…BýÃŽâ°’®:•®"XŸ§]ÕÊrÕju±^_^)\²êwšUÏ;³ªè_…:ø¶ë*W÷!®î"¸"[ù¸"[]®/.VË¥o«iÜVíÐV–o+-j«Rh«ã¸­Šž„BèpŠ»*€U‰a¸ªê»Ê´l;tU'íªEÂUQVm\µ« *„ÐûnW]åã*a«ëlU“¶ÒÙVL«3¦UYÐ +-¶B!„ŠJíªSvU™]uÆ®Ò6®ªïä*bUÌUQVÝocP…úí«‰«ˆ­6¸JÙj±Õ€lÕõmÕle°­ªÂV¶UIØ +-´B!„ +-I «ê°:?gWéì*Ë®ÕÈUMßU=µ«.·¹ê%¬*úE/ÀUÄVw1[}ÙØj%m5 lÕ'[u|[ÕÉVÛJg[1­[IZ€V!„пë(«“VÒUgì*]eZ¶í»ªE®ê®owÕ]ÂU¡«ž®‚ªB¹WáêVâJÚê&j+Oe«&Ùª&le°­ªÂV¶U)´ÕqÌVEB!ô™KÃJ¸ªÄ®"X3¬t]e‘«êW WMÓ®úštÕËXUôIB¡½ÛW¶úž°Õ2j«!ÛªG¶j“­d+Û¶L¶•Æ¶:c[•ÙV’V'1ZÁV!„Еv•«2ÃJºJÓ C¸ªF®j’«:äª>»j¸j®t³ê–Y•pÕn¬*ú!„Ћۊ«ÐV\ [Ý…¶ú¦¶•Ë¶rØV]²U‹lUl¥ëL«s¦U…iØ +-´B!„Þ¾4¬„«Jì*Vä*Ý0M˶ÉU rU›\Õ ]5 \µÚ檀UQWU¡Ï[&®ž¸ +-mõ{«­f¡­l«ÙªI¶ªÕlË2 C×B[•ÙVQZƒV!„ÐÛsÕVe†•pU•]e˜–E®ª“«Z䪮pÕpWÝo\V!„¨-¸ +-mõ±Õ/¶Õ­ÒV‹ÀVca«>ÛªM¶j­lÛ2MCg[ù´ª0­b¶:‚­B¡·é(«ÐU%v•+McW™äª¹ªI®ê°«Vä*—]å©\õC¸êŽ]õ{_WýƒB诶+®®¢¶ú™°ÕE`«)Ûj$lÕc[µÈVu²•e™Ûª*mUf[Eiu Z!„BoQÌUX•VÂUUM×…«lrUƒ\ÕfWõ…«Æ쪻jI®ZosÕcà*° +-!txeàJi«ûm¶š³­&l«¡°U—mÕ$[ÕÈV&ÛJÓ$­*L«˜­@+„BèïƒU誻ʇ•¦é†aZ¹ªN®j‘«VìªQèªÅVW=HW=¥]V!„¥ [Ep³Õo¶ÕÊV«ÐV.ÛÊ°­:m²Uƒle [éºV•¶*³­T´‚­B¡¿Ô‘Ve†•pUUÓuÃ4-›`Õh6ÉUá*‚¹Š`%]uA®ºÚÃUÔ®*úõ „З«¸­slu}}uØʶ [õ{l«ÙªN¶²,Ó0tM“´ª0­”¶*z†B¡ÏQÌUÇ«Jì*Vš¦†iYä*‚U«ÝfW¬ØU®pÕ|?W=Ç\V!„0µ­þ„¶z’¶zØb«%Ûj&l5 +-[u;d«&ÙªfÛ–iº®U¥­Êl+Ð +-!„z›b°: `UfX WU5]7LÓ² V&ÁªÓ%X±«Vì*]µ"W] +-W}‰ºê\…B©qµ‹­¾¶Z³­l«éDØÊ[µÉV:ÙʲLÃÐ5MÒª’E+Ø +-!„zeGY°ªHXišn¦e‘«V­6ÁŠ]E°bW¬ÈUË„«¾§]õsX…BÿåÚêYi«[²Õi«››ë+²ÕÛj.l厅­ú=¶U«I¶ª‘­LÓÐu­*mÅ´RÚªè9B!„>vjW X¬ªUM× Ó$WÕÈU+rÊ]E°bW-ØUkrÕuÂUwìªûÐUOpB¥RâjO[­ØVÞLØj4¶"Z‘­ÿg¿N”Ú¸Ö( +-— ˆ¨G€TÝ8©º7ñlÔ£<0ØïÿVwÿçt·ZRKc,’¬õ{²Õ$M“8ŽÂ°£ÕZýè†a5ò°ƒ0Œâ8I«ÓéÔ\%X9W Væ*ÁJ®z+W}x˜«ö}mˆˆöÖ ­¾n³Um¶*Š5¶ªª²(òL¶ú`¶zóÚÛÊÓª±•h%[MÒÔÓ*p´:^Ðê O+lEDD´K}Wu°5° +-‚0¬RÁêtj°ò®j`å\%XÉU‚U–9WU«>·®ºÆUDDjW[9Z9[åy6“­Þ¿3[9Z5¶jh%[‰VÑ*ŽÂ0;[­Ž Ñwô¬«ƒ¬œ«¬bÁjb°:;oaÕ¸ÊÁJ®¬.g3¹ª0WÕr•ƒ®""úqm·•£UßV¥l•e³K³•håmÕЪ±•h%[¥IGÑ‚V#£Õ!´"""º_°:êÁ*¬ÁêäÔ`å\µ€•¹Ê`%W]ÊUyQ–æª9®""zŒv°•ÑÊÛªªÊB¶šÍŒVf+G«ÖV ­d+Ñ*õ´ +-­Ž¡Ñw´ +-«CƒÕ¨U„‘`•¬¦g ¬ZWyXÉU«Y–åEQVUç*+\EDôCÛl«ë¾­­êª,‹\¶º4[‰VÞV=Z™­D+Ù*‰ã( ƒ±³Õ‚VK¶Ú÷`=å6À긃U,XM¬Î/–`å\e°’««yW]á*"¢Ý°­n:[}Y¶UQä™l%Z™­<­z¶2ZÉV¢Ur7­°ѦV\µ€•\5BÁ*¬NN¬®ja%W¬fY&W•æ*+\EDôˆmµÕ•ÙÊhe¶­d«<­ÌV¢Uc«>­d+£U*ZEat´jl­ˆˆˆînX¥«éÙ¬W¬ä*Á*¬*ƒUëª/ÎU¬pÑlÍV·C¶­ÌV¥l•ÉV¢•ÙªG«ÖVF+Ù*‰cG«±£ÕZíسX9Wµ° +-‚02XM¬Î/Öa%W¬fY&W•æªVWV¸Šˆè±Úh«kg«/=[U•h•‹Vf+£UÏV­d+Ñ*­B£•³UK«hEDD´­AX¬ÆV±ÁêäÔÁjÅUVr•`• VUµÑU·¸Šˆè´Õ·Õ•Ùª£U]•²U&[‰VÎVk´’­ŒV)´"""ºw`%W¬BÁ*q°šž­ÃʹÊ`5Ë2¹ª¬ê%X]{Xá*"¢Çl•V›mUU¢U.Z™­ZZ-ÛÊÑjb´ŠÂ èhu´ ÕshEDD4PVðJ=¬Î/a%W V¹`UUK®ºò®ºÁUDDܪ­n[];[õhUW¥l•ÉVF«ÖV«´’­D«¸G«‘ÑêZml¬‚ Œ V“Vë®ò°še™\UVµÁÊ\å`µæª¯¸Šˆè‘ú¶ÅVWK¶ª*Ñ*7Z™­i%[­Ñ* Æ­†h…­ˆˆˆÚz®j`u´«Ø`urºVr•ƒU.XU•¹ÊÁÊ\ÕÀêv+\EDôˆ Úꦵ•ÑÊl%ZÕU)[e3ÙÊÑjÈVŽV)´"""ÚµX¬FVãq +-V‰ƒÕôl¬ä*Áª(˪6X­¸êfÈUÀŠˆèQ¢Õ­§Uc+ÑÊlUU¢•l%Z9[m ÕÄh…A°B«hEDD´Ò0¬äªV©‡Õ°«¬2ƒUU™«:X]{Xá*"¢ŸÚ­n¼­®:[‰VµhUˆVf«´’­ Ñ.=Û«È`5Ù+¹J°Ê Áªö°ò®ºZ¸j Vû~DDÿì¶Úª¡ÕG£•l•gYC«…­´’­­bG«qC«#hEDD´Ú6X-¬NN·Áj– V¥ƒ•\ÕÀÊ»êWí¡!Zݶ´ò¶­æŽV²•ÑÊlÕÑê…­<­Ñ*li52ZB+""¢^}X À*ö°šžµ°Zv•‡U.XUU=_ƒÕm«oÀŠˆèg6d«›ÖVŽVf«º®ÊÒhe¶ÚF«´£•³UŸVÏ¡ÑX—aÕ¸êÅ2¬ä*ƒUQ–U]¯¹ê¦sÕW\EDô³Û`«eZÍëª2Ze ­d«!ZÉV¢U­ˆˆˆ†[‡ÕÑV¡`•Ü«Yf°ªªz¾+\ED´×6ÐjÉV¢U-ZÉVF+³ÕëW/[-h%[µ´ +- ÑZC° V¿t°J‡`Õ¸ÊÃ*ï`Õºêʹ +-Xí½ ¶êÓ꣣Ui´2[-Ñê÷…­<­â;h…­ˆˆèßÙ +-¬=¬ŽXE«ÉIVÎU6°’« VEYVu=ÿØÁêÚÁ +-W=…VlÕÐêÆhåm%ZÍ몭d«i5†VDDD½¶À*è`u:m`õÛ‹ßWa5Ë VUUÏ VÞU«°ÂUDD{m…V­­®ÍVŽVf«º­Š†VÎVh•ˆV!´"""ê·#¬¼«þ3«¼ƒÕ§V+®VDD{oÅV}Z™­:Z•ŽVf+£ÕKo«Z¥ÐŠˆˆh¥;`o‚•w•‡UQ–U]Ï?n‚®""z +--ÓjÉV¢•Ùj>¯«Êh%[-Óêß{´’­Vhuähu­ˆˆè_Û÷ÀJ®zéa%Wµ°š¬¼«®œ«nZW}ÅUDDO£o˶ ÕÇy]‹V²Õ:­^üÖÐJ¶r´Š­~VDDDÿg¿>ÔIÂ( ?¨D'˜A +-¨3¢D¸÷UûWWu¨¦wfIßwç¼ñ°Êç û«aX]Wk¬: +-V=V#«wVcVŸÀŠˆhe²i5Ñ´úP´R¶òhÕ5´rl UÑØ +-ZYÍ…ÕO V•«)X== ¬úýÁp.¬–ý&ˆˆèŸ­>]ZZ½;´R¶ ú½žC+e+E«¦Ø*–VM« ´""¢-n>¬=X•ÊX‰« ¬º.¬"]¬ˆˆV­ä´êiU¯Í¢UZÑ7Vß4¬ŽŽX]}X5[m•¸ÊU¯× †£hXá*"¢Õ˦•o«7ÇVB«á ßZ‰­lZU¯§hõ=D«=hEDDÛW2X)W]x°jÜÜz°êDÁêCÃj¬ˆˆV7ÛV­ÞZ½(Z „V]—V÷>­®*ЊˆˆÈnqXÕ꬞žVýþ`84®Ò°»°ÂUDD«šM«I˜V#‡V=M+e«»vË£Uy!Z-{숈ˆþv1°ÊŪ:«®ÀjàÃêX­M¶­Æ®­¬,W+"¢µ+L«±O«—Y´*C+""ÚÊba•W°úîÂê\ÃêZêåêëÁêõU¹ +-XmH´ú°hÕÓª­ˆˆhkû °‡aµìo@DD_ê3l« ­F>­ÄVÉh•†VDD´±Y°ÚM«fV=Õp8z1°úVDDT ­ÞlZu„V h•É(YA+""ÚÄ|Xí+"" +-I«wVE+±•¢Õ½¦U=’VhEDD]Ê—Õ¬¾y°:[ V–«€ÑZ¦ÕØ¥Õ+´"""r[V·6¬úó`µìG@DDÿ±Z}„hÕuiu­ˆˆh+û#°)X½+"¢-h+›V/†VËžC""¢ÿVV{V¹¯ÀêXmlAZM´ +-­zshõó‡K«¬¡•‘´""¢ hViVûXσի «1°""ÚÌ¡U{šV‡?|W´ÊOÑ*­ˆˆhí‹€Uf!X fÃjÙ?€ˆˆþX_£UIÓêøZÑ «‚«‹D°úp`t°""Ú¤bhõE«–¢UͧՉ¡Õ7hEDD˜+-«Y°ºR°º1°zì+"¢-,D«±¢Õ»¦Õh6­N£hµ­ˆˆh#Jù²òa•M«'`ED´ý Zí ­rŠVé)Z-{‰ˆˆ¾R¬ò!X]†aõ;«`ED´M}lA«~­ÊŠVgS´Ê@+""ÚŒfÁJdeÁê:«Ç°""ÚÖ‚´š8´ú˜E«zZí@+""ZãB°Ú Àê›ÀêàÐÀªèÂêvX-{ù‰ˆè/•œVm‹VçAZ´ÚÕ´JA+""Z˦`•V°Êù°::VDD4ÝhU™¦U>ŸËB+""Zÿ|Xí¸°ÊhXí»°:q`UXUçÁj ¬ˆˆ¶§9´êÙ´j¸´ºHF«e$Ñ"¥|Yí*Yy°*ø°:µ`ÕVDDdJJ«;—VW3hµ­ˆˆh}‹‚U6«3«²Àª–VŸÀŠˆhKZ„V7.­. ­Y)Zå­ÒЊˆˆÖ·Xå-XaÕVDDä—V÷.­®…VEM«£C‡VûšV—V¾¬ ­K!XíÅê"°ª+"" +-—ŒVŠV·­NŽ£hµ ­ˆˆhýòaµ£a•V°Ê9°YX]aÕVDDd•ˆV¿w+Zµ„Vu¡U¥\ºT´:>2´*äôJA+""ZÙba¥eåÀê\`UÖ°ºXÝ?¸°êkX½ +-¬ÞYÅÒjèÐêùɧUChuU)­N¦iåÊjYѪ–òdåÃ*+°*hX)X]hXÕVM«_V=«‘‚Õ[V`EDDNZ9²Ò´z Óª­iumhu¤UNÑ* ­ˆˆhåó`ed¥a•÷`u|"°º,•+«ºÀª¥`õû±óÜí+""š]<­ZÝ ­nõªÐª$´:sh¥deh•VDD´ò…a•V°Êau*°*–+W«†«§çÙ¯Ó嶑3ŒÂeÅX”ü7 4ö•;E‰$à’F¹ÿ«Ê×… Mi$;5¤«Þs§žaY!„úzni5Ÿ­ÒšVœhe +-Z ­þóo¢•ÖÑê(+Ð +-!„Ðmõ3¬ÔsX+Çõ|‚U’åÅ ¬ö€B¡»D«ê”V A«Œh¾K´²ˆV£aK«û†VBV=Z]{ !„ÐI}Y}'Y¬4‚U#+ +³†UPÃjz«²Õ `…BèRç´"Y Z­žˆVëÕRÐ*'ZEaà­˜eNÆ=Zé‚V +-h…Bè†ëÊd¥(V÷ ¬C+Ëv8Á*Œ“”`5›w°ÚÂê°B!t¡iµ}Üi×´²™eœÓJíÑêh…BèÆúVª¦ëGXÆ+æp—`%i&`µh`õ X!„úTGYÒjB«"Ï¢•ï¹ŽÍLI«FVD+MÐê» Õ]G«kO!„jûÖÉê=XM ‹ÙÜõjXåVËÕš`õ$`u(« +-°B!ôw]¤UyJ«Ù´ÈS¢Uà{ܱ-A«á ¡Õ½¤•¢YV!„n¯VwV߬4‚U#+ +“ÙŽëùa¬ŠV’U+)+À +-!„нÐê¥G«]G«9Ñ*#Z…ïr‡­Æ£#­t]SA+„B7ZV$+E‘°ºo`5 +-XY¶Ã=?ˆâ„`5íÃjX!„úd=Z½žÑêùIÒj¹hh…çr›YÆä„VZG+È +-!„Ðmõ­“U +UÓõ#¬Fc‚s¸ëaœ¤«ÙüVå)¬þ¬B½Ó%ZUUy´Ún×+I«¬„¬VZV£±aZ¶Ã=?ˆâ$Ë «Õz³}"YV!„~«3Z‘¬$­öGZ͉VYšDaà¹Üf¦A´<Ô´º×uMíÑ +-²B!tÅ:YÕ°R$¬ZY¬&†ÅlîúA'i^LgV[ «CYUV/€B¡¯÷v‰V%Ñj×Ðj¹ ZåYG¡ïqǶˆV£á­ZYV!„®W«»Vª¦ë-¬C‚•ÉlÇõ‚0JÒŒ`5?Âj/a%eõÚ—Õµ?Bèé}Z=­6ëÑjZäYGïr‡YædL´ªeE´Ò4UéhY!„ºV}X Y¬´¬Fcôl‡{~Åi–³ùbÙÀjG°*/Á +-²B!ôéNhõ"iUUåAÐêiû(i5#Z¥IžËmfD«ÁCM«{]×TÐ +-!„ÐõëdUÃJ‘°jd%`51-æp×Â8IóbJ°Z­7Û'’`…BèÿP_V=Zí;Z-æ³iž¥qúžëØÌ4&£á­ZYV!„®S«»Vª¦ë ¬+Ãd6w½ Œ’4+¦³¹€ÕãVÂêPV•„Õ `…Bè—;£ÉêGU­v5­VK¢U‘gI¾Çf™“1Ѫ–ÑJÓT¥£d…Bè*õ`%dE°ÒŽ°ŽV–ípÏ£8Ír‚Õ¢ƒÕ¾«ž¬®=h„BXoïÒêùééq³´šyšÄaà¹Üf–A´<Ô´º×uMmhuZ!„ºNßZYÕ°R$¬Y¬ÆÓbwý Š“,/VËÕZÂjG°*«RV€B¡ßé„V/’VUU$­¶’VóÙ´ÈÒ$ +-}Ïulf“ÑðH+MÐJÈ +-´B!t:XÝ X}WTUÓõV‚•a2›»^FIšÓ™€ÕFÊê=XAV!„¾\_V=Zí;Z-æ³"Ï’8 +-|;Ì2'c¢U-«šVJG+È +-!„Ð?^'« Y)ŠªiGX G+Ëv¸ç‡Qœfùt6ïÁêPV•„Õ `…Bè7;£ÉêGU­v’VëÕr1ŸyšÄaà»Üf–A´<Ô´º×uMmhuZ!„úçë`u×ÀJ%Xµ²ŽÆÓbwý Š“,/fóŲ…Õ^ÂJÊêµ/«k¯!„ÐÙÛEZˆVBV¢Õ|6-²ÿ±__9Š, …Õ@fðt›ôÞ{‡)$‚®ýïêF•¥é§™‚Ö´þ³‰£¯ÈÓ$ +-Ïu,ÓÐÔOZF+&«9d…BèùM`ÅdÅ`µ¼ÃJQuô×Â8Éò¢ª›¶Ö›-…•Õáx¬B}[_huæ´)­ö‚V=¥UUYG¡ï9¶eè”V7YqZIœV3Ð +-!„гûq—ÕV’LÈVšnZ¶ëùa”¤YQVMÛ1Xí¨¬(¬¿…d…Bè¿l*« —Õ•VïWZ­‡¾kêªÈ³$Žßul“ÒJYÝhµ\™ÑjZ!„zzV³¬d²²¢°2,Ûñü ŠÓ,/«ºíúá«=…ÕÈau¬B}K¿£Õ‘Ñêíõu·ÝPZµM]yšDa๎ešúI+Âhµ¸Ñ +-²B!ôÄ„¬æ\VVDÀJQuô× Â8I󢪛¶Ö›-ƒÕ;…Õqo²:/§•Vo¯ŒVÓ8tmS•y–Äa๎ešªÈ\VŒV„l²­BÝ#««¬a°â²’U3LËq½ Œ“,/«¦í‡qb°z}[aõ%«OÈ +-!„Ð/$huù¢“Õû“Õ<}×ÔU‘§Iúžc[†®)ò3§ÕŽR"m´‚¬BÝ!!++‰P&«Vϲ¢é†e;žFIšUÝtý8ÍLV VLVVÀ +-!„Ðo$dõù%«•Vo¯ŒVÓ8ômS•y–Äa๎ešªÈ\VŒV„l²­BÝ¡ VWYÂ`Åe%+ªf˜–ãzA'Y^VMÛãÄ`õÊdu<}Éê²B!ô+ Z]¾huüXiuØÏÓØwM]yšD¡ï9¶eèš"?sZí(%ÒF+È +-!„Ðî¯MVV¡LV+¬žeEÓ Ëv˜¬ÎLVWÈ +-!„Ð㲺,²Zhu:RZQYíçi軶®ŠŽB+"«ýØwmS•y–Äa๶eèª"‰DVßgZq,Keõ ²B!ôU?ËŠ%²šaõ²ãEIV5ô/ã$Ë˪n»~Ø¿¾XY-°‚¬B=vWZ­²:RY }ÛÔe‘¥qø®c™º¦È¢ÀSYq,ÃY=CV!„þ ¬fYqWY ¢¬¨ºaÙ®DqšeÝ´Ý0.²:WY©¬î=N„Bèû$«‰V“¬Z }×ÖU™gIúžc›†¦Ê’Àï(­&Ymn²­Býº§›¬¬ˆ¬¶‹¬v¼ ɪ¦›–ãùa”¤yQÕM×ã«EV¬NVB¡Êê<Ëêãx8,²‡®mª²ÈÒ8 +-<׶ ]U$Q¸ÉŠ¥²úY!„ú}V‹¬X"«V/;^”U7LÛõ‚0N²¼¬š¶ëÇý$«÷Ãáø1ËêLeuïm"„B¿èBiu"´"²:YZYõ]SWEž&Q軎eêš"‹Oeű Cdõ Y!„ú2*+ò ð•/ˆ²¢é¦å¸~ÅiV”uÓö•Õñ&« d…Bè¡£²"´úÏD«¡Õ·×ýØwm]•y–Äaà9¶ihª, üŽÒŠe™Íæ&+Ð +-!„ЯzºÉj3Ëj;ËêeÇ ’¬j†i;žFIšUÝvý°Àj–Õ+È +-!„Ðãw¡´Zeu¤²ú¶©Ë"Kã(ð]Û2tU‘Dá*+î*«oB¡ßEaµÈŠ%²š`õÈJ”U7,Ûõ‚0N³¢¬š¶ÆEV‡Ãñc–Õ™ÊêÞÓD!„~Ù'YM´še5ъȪkêªÈÓ$ +-}×±L]SdQàw‹¬¶DV ‘Õ3d…B苨¬È56 ÃrTV¼ ÊŠ¦›–ãúA”¤yQÖMÛY½ý˜duœdušeu¬B=xTVçYVÇ¡‘Õ~컶©Êm•Õú"+Ž$YÑtÓvÈjµÈJ%EÕ Ëvý ŠS"«ºéz"+«YV¯B¡ìÌhu‘¡•Õ~×µMUæY‡¾çئ¡©²$ðÜ,« ‘Õ‘ÕwÈ +-!„Ð'-°¢²Z3Yñ‚(+šnZŽë‡Q’æEU·DV‡#‘ÕË0Œ'*++È +-!„ÐÍ´Èj¢Õ,«çIV}ÛÔe‘¥qx®mºªH"ÏmgZQYÝCV!„>ígY=Ym¨¬¶/H²ª¦íxA'Y^VMÛíöY“¬~,²ºö$B¡?ŽÉêÊêDdEhõt$²êšº*ò4‰ßu,“ÈJ…EV«²­BýÔ"«ûYV¬·œ JŠª–ízA§YQÖM×YXͲz…¬BÝdgF+&«Êê°ï»¶®Ê›N‰¬n´úî‹#„ú¿i€U/«ù +Ž¤¢ê†å¸~1YÕM»Û3Y½CV!„žºAV„VçóUVoG*«¶®Ê™¬NTV„VTVMUæY‡çئ¡©òFˆ¬–ŒVLVÈ +-!„ÐCƒ¬^ˆ¬¦DV &«ÕšÊJV4Ý´Ï£$Ë˪nïeu>3XAV!„ž²Ë@«AV„VÇ×ÞȪ.‹,£ÀsmËЉ¬$e5ƒ¬BýÜ(«ÉUVVK"+AÜȪf˜¶ëaÌdÕY1XYY] +„BOÙ(«*«®—ÕnÛÔU‘§Iú®c™ºªPYqƒ¬æ7YV!„ƾÈj6ÊŠ$"+Ý°l×¢8ÍŠ²nÚÝžÉêýQVß=G„Bè—dEhu>ß˪­«2Ϩ¬<Ç6uM‘%‘çÖ+&«‘Õ”Èê²B!t׫^Vó^VkŽ¥¢ê¦å¸~%i^Tu³dÕQY}@V!„ž¸Ë@+&«‘£‘UÃd‡çÚ¦¡©òFˆ¬–ŒVLVÈ +-!„ЗY½YM‰¬LV+&+YÑtÓv3XAV!„žµGY½3YíwmS—E–ÆQ໶eèLVü(«d…Bè±QV“«¬(¬–DV‚¸‘UÍ0m× zY5DV‡×#Õ{wdu¬B=i£¬(­ºnÕ¶©«"O“(ô]Ç2uUÙHÏ ²šßdZ!„ú"«Ù(+^ˆ¬tò]?ˆâ4+ʺiwû«¬ºY}÷B¡ßhÕç(«·#•U[Wež%qè{Žmêš"K"Ï­WLV "«)‘Õ d…BèÖ«^Vó^VkŽÊJQuÓr\?Œ’4/ªºÙÞÉŠÂ +-²B!ôÌ]Z1YºwB«ãëȪéex®mš*oDÈjÉhÅd5¬BÝ5Èê…ÈjJdµ`²ZY‰’¬hºi;žÆI–—UÝRYߨ¬NLVŸB¡gn”Õ•Uw•Õ~×6uYdi¾k[†ÎdŲšAV!„¾6Êjr•…Õ’ÈJ ²R5ô]/èeÕY^Vw²º@V!„ž¶{YïdµmêªÈÓ$ +-}×±L]U6’Àsƒ¬æB¡‡þ›¬xAÜȪnX¶ëQœfEY7ín•UGeõ1Êê»ÇˆBýV—‘VDV'*«·#•U[WežQYyŽmêš"K"Ï­¯²ZYM‰¬@+„B·¾Èjv“Ç ÒF¡²r\?Œ’4/ªºÙÞÉê Y!„zú~’¡Õñõ@dÕ0YÅa๶ih*‘•À­WK"«¿®²š@V!„n°b²š÷²Zs¼(ÉŠ¦›–ãQYeyYÕ-•ÕñÊêÄd5À +-²B!ô¤²ú ²ê®²ÚïÚ¦.‹,£Àwm‹Êj# +-<‘ÕB+È +-!„Ðc÷²šY-¨¬–«5'0Y¦íxA3Y5DV‡×#d…Bèé^Vç;Ym›º*ò4¡²r,CW•$ðÜMV3È +-!„Ð}£¬&WYXý ²âq#«šaÙ®DqšeÝ´»ý¬>FY}÷B¡ßì2ÒŠÈê4ʪíeúžc™ºFd%òܺ—Õü*+Ð +-!„PßYÍn²âxAÚ(ªnXŽëSYåEU7ÛAV]w:CV!„þ€~–¥•US•y–Äaà96••,‰·^1Y-ˆ¬¦B¡±¯²š÷²Zs¼ÈdeZŽç‡QÂdÕ>Êj€d…Bèi{”Õ;•ÕaOdU—E–ÆQ๶ihª¼a²Z2Z1YM +„B}#¬^&S"«“ÕŠÉJV4Ý´©¬â$Ë˪¡²¢°"²:AV!„þŒFYQZu]/«Ýö&+ßµ-Cg²â!+„BÿØ(«ÉUVýõ÷%‘• ndU3LÛõ‚0N³‚Éj ²z”ÕwO!„úíY}>ʪ­«"O“(ô]Ç2uUÙHÏÝd5ƒ¬Bý,«¿ÿEeÅ÷²²l×"&«ºiw½¬ºŽÁ +-²B!ôü]Z1Y¨¬­®²*óŒÊÊslS×YynÝËj~•h…BˆõEV³›¬8^6Šª–ãúa”¤yQÕÍöAVŸB¡çïQV„VÇ×Ã~Û6LVqPYLV·^-©¬DVSÈ +-!„ÐÐWYÍ{Y­9^$²ÒtÓr¼›¬Z*«ã•ÕiÕ²B!ôä²ú¸—Õ®mê²ÈÒ8 +-<׶ M•7¢ÀYý ´b²š@V!„X#¬^&S"«“ÕŠÉJ¦²²/ã$Ë˪!²:¼ ¬eõÝKD!„þ‡YZϧ®dµ½ÉÊwÿÃ~}(§Í¦Îl06¸!Ñ‹ +-½ˆ"À&k ~ßÿ]ýß«ŠŒìL2ë‰|ÎMœy,£Û eUAVDDtY*«B(«R©|w¯d¥WëV»Û3m‘Õlî,×w·?“Õ YQ.ziu&«ƒÈÊ]¯œÅl:‰¬zV³^S²zŒeUDVDDw)«ò­ÈJ‹de˜ö`8ŽdµeåyþYQ^ÊÈÊW²R´z~ +-dµ\̧“Ñ o™½N»Ù¨U•¬BY]#+""JÊȪ˜Èª¢éµz³Õé–=§³…³º”U +dEDDu©¬N¬^Yí·î&’ÕPdÕ d¥+YÝ‹¬n”¬®”¬ }{+«ëHV­ªdÕîô «ŸÈÊY~ˆ¬|dEDDùé\VGßó"YíÜÍzéÌg“ñ°o›F·ÝjÔCYÝ ­Y};‡U(«›@V¬"+ÓêG“é|±\m”¬žž +-VoeõÙC$""ú­bYýóFVÛDV‘U'•†¬ˆˆè¢sY]‰¬J¥òݽ’•®dÕjw{¦-²šÍ‘Õn&«²""¢œôÓ*•/²úqY¹ë•³˜MÇ£m½N«Y¯éZ%‘UYQX*«B$«ò­ÈJÓ«u‘•aÚƒá8Õz³eåyþYQ~z++E«ÃóS «åb.²ê‹¬ÚJVU­òÉêYQÔ²ªhz­Þluº†%²šÎÎêRV1¬ý奲:Éj¿u7¬&£aß2EV@V¬n"YA+""ÊʪËê1–UOd5Šd劬?DV~FVŸ½C""¢ßì\VGßó"YíÜÍzéÌg"+ÛìuÛ-%+]Éêþ®\*‰¬®}‹`•Êê:”Õƒ’UUɪÝé™V0šLç‹åj£dõô|P°BVDD”³bYýóFVÛHVãáÀ6 ‘U½ªk"«Ûr$«²""¢o)¬¾®”¬nDV÷¡¬ÍvWd5Leµ?“Õ YQnziÈÊ?—ÕÊY̦"+ËèvZÍzM×*ÈŠˆˆ²]ȪT*߉¬ôj½ÑYÙýáx2›;ËõÆÝE²ò<ÿˆ¬ˆˆ(O]ÈJh¥dåF² ú–Ñ‹eõ˪ˆ¬ˆˆHJeUˆdU¾Yi‘¬ Ó$²Ú¾‘U +dEDD}©¬N¬^DVOû­»Y-óéDdeö:m%«*²""¢·} «Š¦×êÍV§kX"«élá¬Ö®ÈêÈÊÏÈê³gHDDôÛ} «]"«¡ÈªÛn6Y=„²ºe­ˆˆ¾|YcY=ƲêV0Jeõô¬`…¬ˆˆ(ŲR´:}ÏKeµ^:óÙd<ìÛ"«–’•®du/²ºQ²ºBVDDôVVס¬”¬ªJVíNÏYM¦óÅrµq·û@V/¬NÈŠˆˆrÔkL«7²Ú&²ئ!²ªWuMÉêNhȪ€¬ˆˆ¾|)¬¾®”¬nDV÷¡¬ÍvWd5LdµCVDD”Û2²òYBY­œÅl*²²Œn§ÕDVDDtÑ…¬J¥òÈJW²j‰¬ìþp<™Íå:••çùÇc +-+dEDD9èBVŠVÏO»­Éj$²ê‰¬jºVIdUDVDDt.«B$«ò­ÈJÓ«u‘•aÚƒDV[dEDDù-•Õ)ÕK «ýÖݬ–‹ùt2ôEVm%«ªVyDVDDtÖÏeÕé–Èj:[8«µ+²:üYùY}ö +-‰ˆˆþ@¿”Õ°o™"«F «‡PV×YYA+"¢/ZFVÅDVM¯Õ›­NOd5Jeõô|øñ_dEDDyì5¥Õñè{^$«»Y/ùLde›½n +]Éê^du£du¥d•Ðê³ÏNDDŸÓû²z eÕYõEVóÅrµq·û@V/¬NÈŠˆˆrÕG²ÚF²‹¬Œn»Õ¨‡²ºZ!+""’²²ºeõ dU­5DV¦ÕŽ&ÈŠˆˆ¾@Yùç²Z9 ‘Õ@dÕ d¥edU@VDD_¼Vß WJV7"«ûDVÝži‡²rDV»HVžç)¬å¢ Y ­”¬Ü@VÓñh`["«f½†¬ˆˆ(Ó…¬J¥òÈJ¯Ö­HVãÉLÉj¬ˆˆ(ߥ²:²zY=²Z†²ê[F/’U%‘UYÑ¥¬Ê·"+-’•aÚƒDVÛDV~FVŸ=B""¢?Òû²ÚoÝ’Õ|:‰dÕV²ªj•GdEDDI©¬ +-ïȪÓ5,‘Õt¶pVkWduø¬ˆˆ(§Ëêè{Þ…¬†}ËY5Y= +""ŠËȪ˜Èª¢éµz3’Õ(•ÕÓóAÁ*Õ YQÎzMiu.«»Y/ùLde›½n"«û@V×Å«+%«ï‘¬ Ñ—ì²êV_d5_,WdEDD9ï²G²j5êU]du§du“Êê?ÈŠˆèËö¾¬+ZµÖh¶;=Sd5‰eµeåyþYQþÊÈÊOdµÝ¬WÎBd5°Mã\V·ŠVÈŠˆˆBX¥²ºeõ‘ÕPd刬vYYÅ°BVDD”“.d%´Jd5dÕ d¥edU@VDD_ºXVß•¬®”¬nDV÷JVz «nÏ´EV3%«5²""¢¼—ÊêÈêEdõ´Ûº‘¬FÛY5ë5]«$²*"+"¢¯^«TV¥Rù.”U½ÑŠd5Ždµý@VŸ½A""¢?ÔOdµ\ÌEV}Ëè!+""zÛ¥¬Ê·"+-’•aÚ‘ÕÂYËÊGVDD”Ç^SZ¾ç…²ÚoÝM «I$«v³Q«j•GdEDDQ©¬ +-ïȪÓ5,‘Õ4•«d%°BVDD”×~)«aß2‘]”‘Uñ\Vµz3’Õ(•Õ“Èê%Õ YQîú@V;w³^:óY$«n,«‡PV×YYA+"¢/زªD²êV_d5_,WdEDD¹ï²û¶Èª¥d¥+YÝ‹¬n”¬®”¬Z}ö݉ˆèÿßOeÕŽd5‰eµeåyþñ˜Â +-YQnÊÈÊOdµ=—•!²ª‡²ºZ!+""z_V­Zkˆ¬L«?DVDDôeº•Ð*ÕÊY̦ãá ••–‘UY}åþ7YÍþe¿NtËŠ¾Jín´œÇRP@--ASÿÿW W¦sN§Ò&ܵ~bgßVkõÆcöY}uàœÕÇÈY5guzrt¸¿·³í¬èû6tV…Bq¹wV륭îY—Ï*WÎ +-€¼?«·ä¬žgu™}VEgoƒ±êÕJrVkݳÚÙÝ;«fÿ¬ÚÎ +-€Å4ñ¬ê÷µ»Ûä¬*§'ÇéY•œ=ÁYuÆjuè¬NÊgçÉYÝUï9ð{°VïïíV«wVOŸgužÕ³`ØଖFÎj³{V‡éYÝtϪÑ9«d¬œ‹kž³*'gµ»ý}³´á¬èšvV{ÉYž_ŽÕ[÷¬>œ‹(û¬õ‡Z59« g@hòYmžU­{VÏÎ +-€7õ¬~¤guôyVë™ge­rg䬊ý³*¥guœžÕmÖY}Ž•³`L8«fzVW•³ä¬ö;gµÕ?«åb¡à¬òlöYUÎ/¯»gUo4ŸzgÕjµß‹iä¬ÚSÎj§{VkÉY­¤gÕ_«¯î;ÿµ‰gõ½sVÎ +-€Ü Ïêõ¥wV÷Õ»ä¬ÎÏÊ'Cgµú÷_9+€ÜË>«ä¬v“³*ŸV.fÕW'þ ÁY}ôÎê×ëËÏþYݤguØ=«Íä¬þùÛY0ßYý¸­ÖêGgÀÂ?«·ô¬ƒ³:Í>«%g_ÓÏêè¸|æ¬È•Ì³zœÕezV{;ÛÎ +-€Ô·Ì³Zß(muÎj?=««ô¬šÎ +-€Å÷{°VãgU ΪÔ?«¢³ȳá³*ŠËCgµ3å¬ÚÎ +-€E5|VïíV«wVOÍF½sV·ÉYUNOŽÃfÕIùì<9«»ê}ï¬^^ mÆY]§guଌUï¬V’³Z›|V?_^õÎêÃY°"Î껳 '8«ÎX­vÎj³{V‡éYÝtϪ‘žÕ›³`‘Í:«‹Êi99«Ýä¬6œÿ>«¥ì³:9«ggÀÂË>«Ç䬪Π+-€L“Ïj{g/=«Ë gõ9VÎ +-€…2ñ¬:gõ#=«#gÀ¹Ïª6tV­VûÝY°¨œÑ&œU)=«ãô¬n¹1㬮.*gŸgµUÚXÏ<+k3#gUÌ:«ÊçYÕÍ'gÀâ›pVͱ³ÚwVôÍuV×Î +-€9«ö”³Ú:«åb¡à¬òkêYÌwV_@ø£Â³zMÏê¾z—žÕ‰³`˜³€1ÁYýz}9«sgÀ˜ì³Ú(m~ïUÙY7ƒ³úèžÕ[ç¬~öÏêfä¬67Ö׆Ϫ¿V_]xþ[SÎj7=«‹ä¬ªµ‡zãÑYóÕ¡³`ÀYÀ˜Ì³z~l6&œÕjç¬Vœ@¾ÍwV?œùñ{°V“Îêtä¬þé¬U÷¬–œ@^M?«#g@þÌ:«KgÀ8gc¦œUmø¬öv¶]ßfžÕ™³ g†Ïê½Ýj9+fÉ>«õÒ–³ ¯¦žÕíØY•œsžÕ•³ O²Ïê©Ù¨;+²M=«}g@ÍuVÇÎ +-€á³*ŠËCgµã¬È)g@$g™gUqVŒˆ:«fÿ¬ÚÎ +-€öïΪè¬òËY@`úY];+Æ Æ*û¬NÒ³º«Þ;+òÂYÉY@ÀY)ó¬ÖÖ76ù嬈48«%g=Î +-€HsœÕ¹³ gœ‘ÆÏjÅY€³ ’³€À|guà¬øä¬ à¬ˆä¬ }VúC­ê¬ÈଠଈœUg¬Vùæ¬ˆä¬ à¬ˆä¬ à¬ˆä¬ à¬ˆ4ßYÝ8+òdŽ³*;+†8+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9+8+"9«ÿ³_‡ ƒú·~€©{h„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™ÄدC†Aý[?ÀÕ<´À¬ˆÌ +-ŽY™³ 2+8f@dVpÌ +-€È¬à˜‘YÀ1+"³€cVDfǬˆÌ +-ŽY™³ 2+8f@dVpÌ +-€È¬à˜‘YÀ1+"³€cVDfǬˆÌ +-ŽY™³ 2+8f@dVpÌ +-€È¬à˜‘YÀ1+"³€cVDfǬˆÌ +-ŽY™³ 2+8f@dVpÌ +-€È¬à˜‘YÀ1+"³€cVDfǬˆÌ +-ŽY™³ 2+8f@dVpÌ +-€È¬à˜‘YÀ1+"³€cVDfǬˆÌ +-ŽY™³ 2+8f@dVpÌ +-€È¬à˜‘YÀ1+"³€cVDfǬˆÌ +-ŽY™³ 2+8f@dVpÌ +-€È¬à˜‘YÀ1+"³€cVDfǬˆÌ +-ŽY™³ 2+8f@dVpÌ +-€È¬à˜‘YÀ1+"³€cVDfǬˆÌ +-ŽY™³ 2+8f@dVpÌ +-€È¬à˜‘YÀ1+"³€cVDfǬˆÌ +-ŽY™³ 2+8f@dVpÌ +-€È¬à˜‘YÀ1+"³€cVDfǬˆÌ +-ŽY™³ 2+8f@dVpÌ +-€È¬à˜‘YÀ1+"³€cVDfǬˆÌ +-ŽY™³ 2+8f@dVpÌ +-€È¬à˜‘YÀ1+"³€cVDfǬˆÌ +-ŽY™³ 2+8f@dVpÌ +-€È¬à˜‘YÀ1+"³€cVDfǬˆÌ +-ŽY™³ 2+8f@dVpÌ +-€È¬à˜‘YÀ1+"³€cVDfǬˆÌ +-ŽY™³ 2+8f@dVpÌ +-€È¬à˜‘YÀ1+"³€cVDfǬˆÌ +-ŽY™³ 2+8f@dVpÌ +-€È¬à˜‘YÀ1+"³€cVDfǬˆÌ +-ŽY™³ 2+8f@dVpÌ +-€È¬à˜‘YÀ1+"³€cVDfǬˆÆ~0 êßú¦î¡faVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+Nfc¿ õoýS÷Ђ0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+Æ~0 êßú®æ¡‘YÀ1+"³€cVDfǬˆÌ +-ŽY™³ 2+8f@dVpÌ +-€È¬à˜‘YÀ1+"³€cVDfǬˆÌ +-ŽY™³ 2+8f@dVpÌ +-€È¬à˜‘YÀ1+"³€cVDfǬˆÌ +-ŽY™³ 2+8f@dVpÌ +-€È¬à˜‘YÀ1+"³€cVDfǬˆÌ +-ŽY™³ 2+8f@dVpÌ +-€È¬à˜‘YÀ1+"³€cVDfǬˆÌ +-ŽY™³ 2+8f@dVpÌ +-€È¬à˜‘YÀ1+"³€cVDfǬˆÌ +-ŽY™³ 2+8f@dVpÌ +-€È¬à˜‘YÀ1+"³€cVDfǬˆÌ +-ŽY™³ 2+8f@dVpÌ +-€È¬à˜‘YÀ1+"³€cVDfǬˆÌ +-ŽY™³ 2+8f@dVpÌ +-€È¬à˜‘YÀ1+"³€cVDfǬˆÌ +-ŽY™³ 2+8f@dVpÌ +-€È¬à˜‘YÀ1+"³€cVDfǬˆÌ +-ŽY™³ 2+8f@dVpÌ +-€È¬à˜‘YÀ1+"³€cVDfǬˆÌ +-ŽY™³ 2+8f@dVpÌ +-€È¬à˜‘YÀ1+"³€cVDfǬˆÌ +-ŽY™³ 2+8f@dVpÌ +-€È¬à˜‘YÀ1+"³€cVDfǬˆÌ +-ŽY™³ 2+8f@dVpÌ +-€È¬à˜‘YÀ1+"³€cVDfǬˆÌ +-ŽY™³ 2+8f@dVpÌ +-€È¬à˜‘YÀ1+"³€cVDfǬˆÌ +-ŽY™³ 2+8f@dVpÌ +-€È¬à˜‘YÀ1+"³€cVDfǬˆÌ +-ŽY™³ 2+8f@dVpÌ +-€È¬à˜‘YÀ1+"³€cVDfǬˆÌ +-ŽY™³ 2+8f@dVpÌ +-€È¬à˜‘Y0öë€aPÿÖ0u- Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-€“Y@˜'³€0+NfaVœÌ +-¬8™„Yp2+³àdVfÀɬ Ì +-`ì×±M‚…ÁÒl,h, Ø9caBxÿWs·Å™ ³ 2+f@dV0Ì +-€È¬`˜‘YÀ0+"³€aVDfìˆÌ +-†Y™ ³ 2+f@dV0Ì +-€È¬`˜‘YÀ0+"³€aVDfìˆÌ +-†Y™ ³ 2+f@dV0Ì +-€È¬`˜‘YÀ0+"³€aVDfìˆÌ +-†Y™ ³ 2+f@dV0Ì +-€È¬`˜‘YÀ0+"³€aVDfìˆÌ +-†Y™ ³ 2+f@dV0Ì +-€È¬`˜‘YÀ0+"³€aVDfìˆÌ +-†Y™ ³ 2+f@dV0Ì +-€È¬`˜‘YÀ0+"³€aVDfìˆÌ +-†Y™ ³ 2+f@dV0Ì +-€È¬`˜‘YÀ0+"³€aVDfìˆÌ +-†Y™ ³ 2+f@dV0Ì +-€È¬`˜‘YÀ0+"³€aVDfìˆÌ +-†Y™ ³ 2+f@dV0Ì +-€È¬`˜‘YÀ0+"³€aVDfìˆÌ +-†Y™ ³ 2+f@dV0Ì +-€È¬`˜‘YÀ0+"³€aVDfìˆÌ +-†Y™ ³ 2+f@dV0Ì +-€È¬`˜‘YÀ0+"³€aVDfìˆÌ +-†Y™ ³ 2+f@dV0Ì +-€È¬`˜‘YÀ0+"³€aVDfìˆÌ +-†Y™ ³ 2+f@dV0Ì +-€È¬`˜‘YÀ0+"³€aVDfìˆÌ +-†Y™ ³ 2+f@dV0Ì +-€È¬`˜‘YÀ0+"³€aVDfìˆÌ +-†Y™ ³ 2+f@dV0Ì +-€È¬`˜‘YÀ0+"³€aVDfìˆÌ +-†Y™ ³ 2+f@dV0Ì +-€È¬`˜‘YÀ0+¢c³ú6+Þ‰Y™Œ³ú2+˜ ³ 2+f@4³ú«•YðÞÌ +-€È¬`˜‘YÀx=«ûíz9ÿ˜/˜ ³ 2+f@ô<«³€c³ú4+þ˜Õɬ€_öë9ul€èsügl“ƒÉ"gƒ o¼ÿ]ý{ÅE‰4õj¨’úl¢«á¬²Ï*ÂYpÄYä{Vï‰dŠ³„gxg€gxЋ½V¾gUUg5O8+@XpV€qVxpV€=tVºuV;Î +-`×ϪËYÎqVxü»³ŠqV^γŠÆâqÇYå8+@8ýÜ<+³¸\=«"g#Î +-ð¨»ÎªÃYÂÄÿ¬†>sœU…³ØüÏê#™JsV€°z謒œà—Z«kgÕà¬!ã<«ý~·uÕ€³øà¬8så¬Æγ*䳜àèúY•9+@øÜ:«6g8wßYõ9+@xÜqVuÿ³ŠpVVœgì±rœÕòÊY‰±â¬ äî8«Öñ¬¦œ .ÕÜuV%ë¬ÞÄY½rVnþg•g•—gUSg5’gepV€8?«o×Yõ\g•:;«ÓXqV2Ï*ÃYBÊ>«ƒuV+çY5]gõÎY®ŸÕ'g!ÏYmÖ_çgUå¬NwU÷úY±V€@¹|V“ñÐyV9ÇYÅã±(gáuû¬4Î +-.®³ÚYg¥sV€‹\g³Î*©Îªâ8«™n,8+@ðÝ8«Ž:«"g°ÜyV×Ymwû=gªÛgÕ8U:•üð=«gð»|VÙ|ÁyVcïYYkõìð']=«¾:«2gp°Ï*âVu­Õ¶ÏjÉYïâYM9+Àž³keŸUÉuVsuVßœ ÈüÏÊg5’gÕâ¬ç^ìµ2ÏêUœÕ›8«”ë¬zÖY­8+@ÀýÜqV5yVyyV Î +-ðëÂY½ÛgU­kMyVÃÓY}‰µ2ÏêÀYéγúg•á¬GWÎ*ç>« g…gÕí´4Î +-pÆyVÑX<î:«¢:«Ž:+Ý:«g*çYí÷»íñ¬†>g5PgUQg•´Î*ÆY@¨ùžÕG2•>Uƒ³„Š=Vž³sV€ ®ŸUYUŸ³„…ïY-í³j·´º<«B>ËYNî8«–<«Ñd:× Î +-xöY̳úVg5wUÉ<«”ë¬"œ„—ÿY%äYååYÕî8+Ö +- ž³cµ²Îª×m7Ýg%ÇŠ³€Ð»xVqVŸê¬º§³ZpV€ »|V“ñPUÕ>«wyV¯ê¬NcÅY@èÜ8«J­¡ÎjfÕv·ß‹³²ÖêÙ àÏqÕÎ:+]UGU±sœU<‹rVf®³ŠYg•<;«ÁhÌYBáöY5êÕ²yVéTòÃ÷¬žwÀîòYeóyVu­Õ¶Ïj)Ï꛳—ÿYú|*ΪÏY|Ùgñ9«’:«žyVsqV«õfs<«g Ÿ+g5’gÕj6jò¬òò¬œÀä9+±Vò¬RöY5åY Ç“ãY}­9+@€Ý8«®:«OqVÎ +-pòb¯•yV¯â¬ÞgUuž•nÕŽ³“=V¿ûýn{<«…¡ÏNg¥qVçYEcñ¸yVïâ¬ÒÙ\¡(ϪÑlw8+@X\9«ñh Îª¢Î*iUŒ³€ó=«ÓY•ÕYõÅYM/žk û¬æY}˳ZÚgÕniuyV…|–³ØnU­Ñlɳɳ28+@ÀyÎj³ùZ‰³š›gÕSgU2Ï*å:«gaæV‰T:“Ë?ÕYuÏÎj»ÛïÅYYkõì +-ð§xÏj­Îj2ʳjjõªó¬ÄXqV€[gU©54yVqV3ÝXpV€`sÕÎ:+ý쬊…Üñ¬ÞÄY½ª³:g!ä:«˜uVIÏYí³ú6ÏêÀYççÆYuÚÍF½Z6Ï*-ÎêÝ<«x<uœÕ³ãx‚Ëg•ÍäYÕµV[ÕÜX,Wë͆³Õ…³2ôùt2öÏÏꃳÙgqUÊ<«’:«Þ`8žÏêkÍY˫߇ý~·õœU«Ù¨É³Êç2éT‚³(ž³’kå8«j]kZg¥[gµã¬AäV CŸ™gÕí´4yVŸœÀíÅ^«hTœÕ«<«wqVél®P”gÕh¶;7Ίµ„}Vó¬¾í³ê¬*ꬒÖYÅ8+=÷YÅgõq:«²:«þp4™Îuƒ³šç¬6›õj¹0æê¬Ú-­.ϪÏrV§+g•—gUk4[ž³Úîö{qVÖZ=»ƒü®³ÚɳZÏj2zê¬JæY¥\gᬠÜüÏ*‘JgÄY}ª³êöâ¬fº±à¬ösá¬t묚Z½*Ï*w<+9Vœà×ÙYŬ³Jª³ªÔÚñ¬ÆæY-åY}›guà¬sù¬¦â¬ú½N»ÙgUg•gõ.ÏêUœU4jg¡tù¬²ù‚<«ºÖjw{æYÍÅY­äZqV€@²ÇÊ<«­:+CžÕHžUKžUùtVdzŠ»ÏêÙi<…}V×Y¥Ì³*ɳjʳŽ'γڹΊµ‚ó¬öÞ³êʳªUËŸÅ|.ÃYœ›Œ‡ƒž<«z­Râ¬^þg•H¥3¹|ñ³\­É³êö£ñt¦ Î +-X?®³ÚYg¥[gÕÔêUuV)yVÿ¥Î*ÂY@عÎ*æ9«J­¡9Ïj¹ZoÄZɳ:pV€@9•÷¬¦â¬ú½N»ÙgU,ä²iyVoÿõ?Î +-ø?ûõ¹6¶P83`“dL‘¨ê….Å`Šã÷«{Ž$ÀÉý3?¼`ö~‰½>"Júƒ¬êŠÚlw¤¬l×ïG‰¬")«×-²""¢‡ì,«w!«ãñ°Ïdµ”² +-¤¬|)+ý"«)«ŠU¹ ¬ˆˆþóå²*]ɪ‘ÈJ“²ò¤¬¦á¬(«Ã•¬ =@¿—Õj/Y ¥¬,SïuÛ-UȪšÊêYÑ·ßÈJÒ*•U«ÓÕ SÊjÉ*¾‘Õ…V_ýB""¢_.«S"«·Ýn»Y'² +-ƒ‰”•ëXÆYV5dEDDÅrZ•ËBV)«!+%‘•nÚŽ”ÕxÌæQ¼Ìdµ?ÈŠˆˆ«Ï²Ú¾JYE™¬ú¾kKYuÚMU©_dõ„¬ˆˆèÛ­¬žSYUYµ¥¬,ÇóÃDV‹x¹BVDDô }\ÉêP”Õ,œNFþ'e¥%²j +""ºî÷²ª5UȪ'eåJYM‚0‘Õz³Ý ZIY=P9¬®eg²HY™†Öí´RYIX¥²*!+""º’ÕÓEVuEm¶;=ݲêg²Š¤¬^·Ÿe­ˆˆèî+Êêx<ì3Y-ãh> ¦c)+Ç6õDVŠÕ‹”UEȪœÊê/dEDôŸîÿËJ3,[Êj4™†³¢¬ÈŠˆˆ«\V§‚¬VËx‘Èj8ð=Ç’²j'²ª¦²zNeõw&«¯Þ:}Y¹¬J©¬$­„¬j³%eeÚ®×d²Šodu¡ÕW߈ˆèßv+«·Ýn»Y'² +-ƒ‰”•ëX†Þ²R•F YÑUe´’²* YU¤¬^„¬!«®¦›¶#e5ž³y/3YíÇ#²""¢êãJV)«í«”U”Èj4ìû®-eÕi7U¥~‘Õ²""¢¤LV§²zNeUMdÕ–²²Ï Y-âåª «²""¢‡)‡Õµ¬âh1 §RVž”•–Ȫ¬ˆˆè¶ß˪ÖPT!«žnXŽ+e5 ÂDVëÍv'hu#+hEDDw^QVÇãaŸËj> ¦ãÑ@ÊÊ4´n§•ÊJÂ*•U YѬž.²ª+j³Ý‘²²]¿?M¦álIY½n¥¬ÈŠˆˆ©\V§‚¬VË‹¬|ϱM=‘•"dõ"eU²*—sX!+"¢ÿp’U#‘•&eå]dßÈêB«¯þ!Ñ¿ëVVo»Ýv³²ZÌÃ`2JYY¦Þë¶[ªU5•Õ󵬾zêDDô…å²*¥²’´JeÕêt5ô¯?§ÁlÅËLVûÃñˆ¬ˆˆèaú¸’ÕAÊjû*e]då:–q–Uí,«'dEDDiå´*—…¬*RV/BVJ"+]ÊÊÏdµˆ—«‚¬NÈŠˆˆ¤VŸd5 §“Ѱﻶeh½N»©*udEDDŸº–Õs*«ª•Újw{ºi9®?Ž'A˜Èj½Ùî­nd­ˆˆè®+Êêx<ìϲŠ£y"«Aßsm3“UCÊêçLV%dEDD²+Y=eU²j¶;=ݲêG‰¬")«×­”Õá,«_ÈŠˆˆî¾\V§‚¬VK)«`:–²rlS׺VS²zùççïRVedEDDiU=••fX¶ëIYMÃÙ"ŠodõŽ¬ˆˆèú¸•ÕÛn·Ý¬…¬ó0˜Œ‡ßs,)«v"«j"«J&+`EDDߊ²*¥²’´²j¨ÍV§«¦”Õ`4ž³y/3YíÇ#²""¢éZV)«í«”Ut‘•ëX†Þ²R•F-“Õ3²""¢KEY•…¬*RV/BVJ"+Ý´ÏÏeµ*Èê”Ë +-ZÑ—ÃêZVq´˜…ÓÉhØ÷]Û2´^§ÝT•úEVOÈŠˆˆ.å´’²zNeU²R[ínO7-ÇõÃñ$ç !«õf»´BVDDô8eu<ö¹¬æ‰¬}ϵÍLV )«Ÿ?]w%«§³¬j‰¬:=ݲêG‰¬")«×­”Õá,«_ÈŠˆˆî»\V§‚¬VK)«`:–²rlS׺VS²zùçç𤋮JÈŠˆˆÒþ «º¢6…¬4ò]OÊjÎQ\ÕQÈêYÑÝ÷IVo»Ýv³²ZÌÃ`2|ϱL½×m'²ª&²ªY•ËÀŠˆˆ²rY•RY%´ªÕj³Õéj†i;^0OƒÙ<Š—™¬öRV§\VЊˆˆî¶3¬RY¤¬¶¯RVQ&«¾ï:–‘ÈJUµLVÏÈŠˆˆ +-eU²ª$²ªÖJ³Õîjºi9ž?&²ZÄËÕZÈJÐ +-YÑ£t–Õ»Õ± «8ZÌÂéd4ì{®mZ¯ÓnªJý"«'dEDD…rZIY=g²ª5UȪ§–ãJYM‚0•ÕFÐJÈêp–Õ/dEDD÷ÜG.«“”Õ>“Õ2Žæ³`: ¤¬LCëvZMµ!d%`•Éª„¬ˆˆèÜ•¬ž.²ª+j³Ýéi†e»~8šLÃÙ"*Êê(dõŽ¬ˆˆèÎû$«·ÕzµŒ™¬|ϱM=‘•Ò¨W_„¬¾KY•‘å}–ÕŸRVLV¦ízýA"«y/3Yí¥¬N¹¬ ÝigX¥²:HYm_7©¬Â`2|×±L½×m·T¥QKeUÉd¬ˆˆ(+—U)•Õ÷?ÿy²Rš­NWÓMÛñüÁh< Y­ÖBV‚VÈŠˆˆ£³¬Þ…¬ŽEYE‹Y8Œ†}ßµ-Cïu¤¬êgY=#+""º.§U¹,dUIdU²R[ínO7-)«áx„ó…”ÕFÐJÈêp–Õ/dEDD÷ÛG.«“”Õ>“Õ2Žæ‰¬}ϵMC²jeõ„¬ˆˆèªkY=g²ªeeXŽë÷‡£É4œ-¢[Y½#+""ºë>Éêm'dµ^%² +-¦c)+Ç6u­Ûi5ÕF½–À*•U YQÞ•¬ž.²ª+j³Ýéi†e»ÞEVñ2“ÕþpLhu–´""¢»ì «TV)«íëFÊj1ƒÉx8ð=Ç2õ^·Ýj*z5‘UEȪŒ¬ˆˆ¨X.«R*«„Vµzãì×Gr*ÙEѨ€Ž ½÷ÞŒH¹ùÏêß›†I¯Q­WùãìIìX¼ ÊŠf˜¶ãaœdyYYŽDV„VB¡ÿ‡&Y}Y½Ýʪ©Ë"Kã(ð]Ç2zYñ»eµdX!„ºv+«G"«M/«-Ãr‚()šnZŽç‡Q’æEUSY­ˆ¬ºIVŸB¡¥ö5ËêÊê2Êjß^e并ehª, <Ç\eµ‚¬B}k¦•Õz”ÕŽåx"+U7,Çõƒ(N³¢¬›[Y½Y}@V!„ÜY½¾YDVU™gIžc›†¦È¢À³DVVƒ¬ +„B·ÝÉju•Ãñ‚$«šaÙ®w•U»eu¡²zŸeZ!„Z`¬YuTVçç•U]yšD¡ï9–©÷²âXfûDeµ!²z„¬BÝ7Ëêa¥‘Ë ¢¬h†i;^ÆI–—‘ÕáHdEhY!„Z~“¬>ˆ¬ÞneÕÔe‘¥qø®cºªH"ϱ»QVëAV€B¡›neõHdµ¡²zÚ2,×ËJ7-ÇóÃ(I󢪩¬N„VDV]/«+­þöB¡Ý×,«w*«Ë(«}{••çÚ–¡©²$ðs•Õ +-²B!ô£™VTVëQV;–ãEIQuÃr\?ˆâ4+ʺ¹•Õd…BhÑM°ºÊêõ…Èêx ²ªÊ‰¬êªÌ³$ϱMCSdQàÙYV+È +-!„КiEeµždÅp¼ ɪfX¶ëa/«ªi÷‡^V¯7²ú„¬B-¬YVV£¬ž©¬šº*ò4‰Bßu,Sïeű̫AVB¡ßº“Õj–Ë ¢¬h†i;žÆI–—UMduìiuéº^VB¡ÅõõMV—QVû¶©Ë"Kã(ð]Û2tU‘Džcwƒ¬6DV3¬ +„B7Ͳ¢´ZoFZ1,'ˆ’¢é¦å¸~%i^TuÓÞȪ§d…BhqÍ°¢²ê:+"«ãȪ*ó,‰ÃÀsmÓÐTYxŽ™dµ¾—Õß^8B¡ÿTÿÌ´¢²Z²Ú±Od¥ê†e»^ÅiV”UÓ­®²­B-«[Y½ ²:?Ÿˆ¬šº*ò4‰Bßs,S×Yx–Ùõ°"²ZAV!„þجVWY1,/H²ª¦íxA'Y^V5‘Õñt&´ºt]/«È +-!„ÐÂúšeõNeu™dÕ6uYdi¾ëX†®*’ÈsìnÛËjCdEaY!„úµYVƒ¬zZYq‚(+šnZŽë‡Q’æEU7TVÏ£¬zZM²­B-¤VTV]G`EeuØ·MÕË* <׶ M•%ç˜IVëAV¬ +„BwÝÊê‘ÈjÓËj»c9^”U7,Ûõƒ(N³¢¬›v?Êê2Ëê²B!´ neõ6ÈŠÀêHdUWež%qè{Žmš"‹ÏβZÝÉêo!„ЬfZQY­'Y1/H²ª¦íxA'Y^Vu»?OçB«®ëeõY!„ZT_³¬Þ©¬.“¬Ú¦.‹ûœ!„Ð/º2Y]¨¬X­²šÆ¡o›º,²4ϵ-CWI¼ËŠ_eÅ`Y!„ú0&+B«ÝŽãy&+A”M7,Ûõ‚(N³¢¬›¶Æ›¬­VY]˜¬@+„BƒÕ;…•…Õqû®­«"O“(ô=Ç6 M•%ñ+"+²B!ôç=1ZQYqDV+­QRTÍ0mÇóÃ8Éò²jÚn§ãéí¡Õy¾Ñ +-²B!ô¸]™¬.7Y™¬Æ¡ïšº,²4Žßu,Sÿ—ýúXn;À(\,!ÌÆ"rÎ9'J=MÚ¤üþOå 螥٪ùÏKœúTY«¬x"«V›¬=l„BÏÞ.«—EVü]V¯GQ’UÍ0mÇóÃ(Éò²ªÛ®'²z{ŸeuÞeuƒ¬B=g¿ÈjÕ…Àj–Õ4}ÛÔe‘¥qø®c™º¦È¢°ÉŠ»ËŠÂ +-²B!ô:ì´b–ã6Y ’¬hºi9®DqšeÝtý0N³¬­.—EVW*+Ð +-!„ÐÓEaEeu&²"°:McßµMUæY‡çئ¡«Š$ +-V<DzV›¬½k„BOßï²b‰¬VZ ¢¤¨ºaÙ®„q’åeÕ´‘Õi¦Õ"«…V7J«Gß!„úKTV×EV— Õ"«q軦®ŠÙÒj‘Kdu§ÕQ%EÕ Ëv½ Œ“,/«¦íúq:Í´úy>¯²­B=c¿ÈjÕ…Àj–Õ4}×ÔU‘§Iú®c™º¦Ê’p\eÅYÍ°ÚdõèU#„úí²zYdÅßeõz%YÕ ÓrÉêa‘•x•Õ£¤¨šaZŽëQ¼Oó¢ªÛ®˜¬Ž³¬6Z9­nýT„Bÿp\V§MV VÏ VãзMUYšÄa๶eèš"KWXíDz‘‡d…Bè qY1Z ¡TÜ]i%ÉŠ¦–ízA'iV”uÓöÃ8˜¬­VY¸¬@+„B7‹Ãê¼Áj–Õ‘Éj軶®Š<ÝÇQ໎ešªHWY‰"%„Á +-²B!ôî8­ØRB¨(^eõ()ªf˜¶ãúAïÓ¼¨ê¶ë‡éðÄhõòºÑêÌiuë«"„úgûà²:m²zùËdu˜Æ¡o›º,²4‰ÃÀsmËÐ5E–/°Ú‰”AX`uX!„úr\VŒV‚@(wZ=J²¢é†e»^ÆIšeÝ´ý0N&+F«UV'.+Ð +-!„Ðâ°:o°b²z>>¦¡ïÚº*òtGï:¶ihª"=þ¹ÈJ)! VVB¡/uÇiŦ"BEñ"«?’¢j†i;žDñ>Í‹ªn»~˜OŒV/¯­ÎœV·þ*B¡´.«Ó&«—¿LV‡iú¶©Ë"K“8 <׶L]Sdéq“¥DXÝV!„¾—£• J™¬fZ1YÉŠ¦›–ízA'iV”uÓöÃ8˜¬­VY¸¬@+„B·h…Õyƒ“Õóñé0 }×ÖU‘§û8 +-|ϱMCWéñÏ"«(RB¬8¬ +„B_ìŽÓj‘¡"£“Õþ<ÊŠª¦íx~%û,/«ºíúa:<1Z½¼n´:ƒV!„nØ*«Ó&+«çãa‡¾mê²ÈÒ$ϵ-S×Ty“¥DXÝV!„¾Ó*« ­(]e%ɪ¦›–ízA'iV”uÓöÃ8ŽÏ3­VY +„B·k…ÕyƒÕ,«ãÓaú®­«2ÏöIúžc›†®*ò +-+‘.«;È +-!„зZiµÈŠPq¥•¬¨ºaÚŽç‡Q²Ïò²ªÛ®¦ÃÓq–ÕF«3h…Bèf­²:m²b°z>¦qèÛ¦.‹,Mâ0ð\Û2uM•¥UV”.°‚¬B}¿O²šiEé*+IV5Ý´l× Â8I³¢¬›¶Æép|žiµÊêY!„ºU+¬Î¬fYŸÓÐwm]y¶O¢Ð÷Û4tU‘WX‰”,²¬Bý@ŸhÅdE˜¬8­dEÕ ÓvÉêa‘•Èe%ɪ¦›–ízA'iV”uÓöÃÈhõ<Óêíí*«d…Bè6­°:_aõÎ`Ådud²ú®­«"O÷Iúžc›†®*2‡“YduÏeuë%#„úÿŽËŠÑJ¥âŽÓJVTÝ0mÇóÃ(Ù§yQÕm×LVG&+F«÷+­Î B¡›ô VY½1Y]`5}ÛÔe‘¥Ižk[¦®©²Äe%.²zXduY!„úvwœVl.!T¹¬$YÕtÓ²]/ã$ÍŠ²nÚ~¯´z}{»Êj£Õ­‹BèŸêƒËŠÃêÁê"+«®­«"O÷qúžc›†®*2‡ÕN¤”«{À +-!„ÐÄeÅh%„RqÇi%+ªn˜¶ãùaïÓ¼¨ê¶c´ºÈŠÑêý­>@+„B¿Û +-«ó «YVoLV ¬¦qèÚ¦*‹,Mâ0ð\Û2uM•%.+Q¤„0X=pXAV!„¾Ù§Û‹@E.+IV5Ý´l× Â8I³¢¬š¶ÆéB«WF«YVÿ]dZ!„úåVYfY1X½3X]d5}×ÖU‘§û8 +-|ϱMCW™Ãj'RJaÕ=`…BèGâ²b´B©¸ã´’U7LÛqý Š÷i^TuÛõøȊÑêí}¡Õi¡d…BèW[auža5Ëêíõõ«iº¶©Ê"K“8 <׶L]Se‰ËJ)! VVB¡owÇiÅ#BE‘ËJ’UM7-Ûõ‚0NÒ,/«¦í†qZhõòºÑê Z!„úåVYfY1X1Y½ü]d5}×ÔU‘§û8 +-|×±MCW™Ãj'RJaÕ=`…BègZeÅh%„RqÇi%+ªn˜¶ãúAïÓ¼¨ê¦ë­fY1Z­²:AV!„~·Vç VLV3¬¦qèÚ¦*ó,Mâ0ð\Û2uM•%.+Q¤„0X=pXAV!„~ •Vl1!T¹¬$YÕtÓ²]/ãdŸåeÕ´]?N‡™V/¯­Î B¡ßìc•Õi“ÕËßYV V}×ÔU‘§û8 +-|×±MCW™Ãj'RJad…BèÇZeÅh%„RqÇi%+ªnüý:ËM$YÀ(,AfõÒ&çyžGÀå6$*ãýïª#¨wÒWºúÏ&Ž>Ëq½ Œ“,/«ºí†qÇhõñïL«iºÉ +-´B!ô£ X]°b²b°z?ìǡ,²4ŽBßslËÐ5e{—¥D–¬Ö€B¡—&hÅ&#É2¡ô.«­¢é†i;žFqšeÝt=£Õáý÷“£Õù‰VB¡êVWYMÓ «?¬vãеuUæY‡çÚ–ihªr‡Õ†"K‡d…Bè… Y1ZI’LÝÜi¥¨šnZ¶ëaœdyQÕm×»ýV§iâ²úÃeZ!„ú¡„¬î°:3X1Y}ü~?0XõmS—E–ÆQà{Žmº¦lï²¢”È2ƒÕ°B!ôâ­Øf$Y&”ÞeµUTÝ0mÇõƒ(N³¢¬›¶ÆÝMVŒVgN«/N+È +-!„Ð$`u™a5Ëj:n°ÚïƾkëªÈ³$ϵ-S×Tå VD–$+È +-!„ÐK²b´’$™<ÓJÕtÓ²]/ã$Í‹ªn»~Üío´:=hu­BýLßBV_³¬¬˜¬ŽŸ\V VCß6UYdi¾ëئ¡«ÊVÈŠÁJf°ZV!„^ž $Ï´²RTÝ0mÇõƒ(N³¢¬š¶­¸¬­¦é&+Ð +-!„Ð%`uyÀŠÉj†Õa¿ú®©«"O“( <׶L]S°¢3¬$+È +-!„Ћ²b´’fZÑ­TM7-Ûõü0JÒ¼¨ê¦ë‡ÝþÀiud´:?Ñ +-²B!´xÏ°ºÊjš¬fY1XC×6U™gi¾ëئ¡«ÊCVd–ÕšË +-°B!ôê­ØjfY&+N«·­¢ê†i9®Dq’åeÕ´Ý02Z1Y1Z¦éIV B¡Å²ºÃêÌ`uœaõ~ØCß5uYäi…¾çØ–¡kêVt†•ÄaY!„zyBVŒVÒL+Êh5Ëꟷ­ªé†e;žFIšeÝtý0îïŒVŸGF«ó­ +„B '`u™a5Ëj:î°ÚC×ÖU™gI¾ëX¦¡©Êö +-+&+B8¬Ö€B¡E´ZsZÂdu¥ÕVQ5ô× Â8Éò²ªÛ®wwZ´º€V!„–î[Èêk–ƒ“Õñó*+«¾mê²ÈÒ$ +-}ϱ-C×”íÛUVJ‰Ìeµ‚¬B-’ÕŠËJ&”ÑŠËêm«hºaÙŽç‡QœfEY7m?Œ»«¬­¦é&+Ð +-!„Ðâ X]°b²â°ÚïƾkëªÈ³$Ïu,ÓÐTe{ƒÕ†Âaµ¬B-” ÕšÓŠº¹ÓJQ5ôl× Â8Éò¢ªÛ®wû+­ŽŒVç'ZAV!„ìVWYMƒ—ƒÕзMUYGï9¶ièš²}»ÉŠR"sY­ +„B %dµâ²’ ¥wYmM7LÛqý ŠÓ¬(«¦í†™VLVŒV§iâ²úÃeZ!„Z0!«;¬Î VG«Ã~7ô]SWEž&Qx®m™º¦*wXm(!VkÀ +-!„Ðb Z­9­¡›;­UÓMËv½ Œ’4/ªºéúaÜÞ­>ŒVgN«/N«oÐ +-!„ÐR X]°: XC×6U™gi¾ëئ¡«Êö.+J‰Ìeµ‚¬B-–ÕŠËJ&”ÞeµUTÝ0-Çõƒ(N²¼¬ê¶ëÇÝV§­.‚Vÿë÷"„ú?ìVBVÇÏ«¬¬ú¶©Ë"O“(ô=׶ ]S¬6”«5`…BhÁ­ÖœV„Р•ªé†e;žFIšeÝ´ýÀhÅeÅh5M7YV!„LÈê VLVVûÝØwm]•y–Äa໎ešªYQJdù«`…Bh±þ¢•,J…¬U3LËq½ Œ“,/ªºéúa·?pZ­ÎO´ú­B-‘€Õe†Õ,«išaÅd5ÃjèÛ¦*‹,£Ð÷Û2tí« %D–¤'XAV!„IÈŠÑJ’dò­4Ý0mÇóƒ(N³¢¬š¶Æ™V3­NŒV³¬þpY] +„B ô «/«3ƒ“ÕÇï÷ÞÁªkêªÈÓ$ϵ-ÓÐTe{…Õ/+™Áj X!„Z8A+¶Ižiµùu£•¢jºiÙ®„Q’æEY7]ÏhuxÿÍdÅh5]iõZ!„Z*!«'Xî°ÚC×6U™gi¾ëئ¡kÊöí*« ¥3¬$+È +-!„Т Y1ZI3­(£ÕUV[EÕ Óv\?ˆâ$Ë˪n»~Üí¯´:2ZŸhõ Z!„zuV—V³¬¦‰ÁŠËj†Uß6uYäi…¾çÚ–©kªr‡Õ†Âaµ¬B-ž ÕšÓŠº´R5Ý°lÇóÃ(I³¢¬›¶fZ1Y1Z­fYýᲺ@V!„^Ü3¬¾8¬Î VG«Ã~7ô][WEž%qø®c™†®*Û»¬(%2—Õ +-²B!´xBV+.+™P*d¥¨šaZŽëaœdyQÕMÇhµ?¼3Z}2ZMgN«/Ð +-!„Ð} Y=Áê$`5]ÛTe‘¥qúžc[†®©VJ‡Õ°B!ô Z­9­¡›­4Ý0mÇóƒ(N³¼¬š¶ÆÝVÇÓß´ú­B½2«Ë «YVÓÄ`u•ƒUß5uUäi‡çÚ–ihª"dE)‘¹¬VB¡HÈjÅe%J7¿®´Ú*ª¦›–ízAøûuºÔF’†Q8™Êâ—%Õ¾ï{iÁ´‘JÌýßÕ|™*’‚–cƆ–Ú﹉O”¤yQÖMÛsZqYqZ ƒÕ“ÕÈ +-!„Ð'6…ÕQÀê@°Ú`µÝ¬û®­«2Ï’8 +-|×±MC×ÞÀJ°šV!„.’¤ÕLÐJ´²úJ´Ò Ór\?ã$Ë˪n»~µÙÞsZ=îˆVA«#h…Bè“{–²šÀjÏaõׇժk›º,²4‰BßsmËÔµåâV*‡Õí«À +-!„Ðz‘• Õ-§•*iµÔtòÏ£8ÍŠ²jÚnµ–´ÚƒV!„þ¡$¬~pXqY ÁŠdõðí~»^õ]SWEž&qx®c™†¾\Ì_dŇ՗ ¬ +„Bÿpÿ™Ðê §cRV‹¥f˜–ãzA'i^TuÓöœV\VœVà dõ4•h…BèÃMau°:¬v#¬6ë¾këªÌ³4Žßsl‚•¶”°R™¢XÍ+„BKÒj&h¥(L}¥•¦¦í¸~ÅI–—UÝvýj³½ç´zÜIZ§´ºöBýñ…ÕžÃ꯫Uß6uYäi…¾çÚ–I°Z̬HVŒ)·BV7B¡‹%eu#du«0¦Þ´Z,5Ý´l×óÃ(I³¢¬š¶[­%­öûáZ!„ú䞧²z²‚ÉêáÛý–`Õ5uUäY‡ï:–i諯BVVŠ€Õ °B!tÁ$­f‚VŠ ÕIVóÅR7LËq½ Œ“4/ªºi{N+.«¿Óê´B!ôñ¦°: +-XV»V›ußµMUæYG¡ï9¶eèÚRÂJå°²º¬B]0)+A«[N+UÒj©­lÇóƒ(N³¼¬ê¶ëW›í=§Õ#Ñj„¬ž„¬@+„Bï,¬öVV«¾mê²ÈÓ$ +-ϵ-ÓЖ )+ÆFXÍ+„BmJ«/œVŒ‘¬­æ ¢•iÙ®ç‡Q’fEY5m·Z¿ÐjG´:Z§´ºö“BýÁ=KY½Âjà°"Y}»ß¬º¦®ŠÊŠÃJ°šV!„.ž¤Õl¤cRV‹¥f˜–íz~%iV”UÓv«õ ­vD«ƒ Õ´B!ôá~ +-+!+«®©«"Ï’8 +-|×±MC×^a¥rX YÝ@V!„.ž”ÕH+Eaê+­4hå¸~ÆIšUÝ´½ Õƒ Õþ,­®}f„BdÏSY= Y ÁêQÀj»Y÷]ÛTe‘¥qúžc[«åb„ÕÊØ«`…Bè +-MiE²ºUSïFZ-–D+ËvWX%²RXMÆÃA¿ÛiGaà¹N«Ù¨ç`e)¬2Y+""úóe´2²RZYJ+•Õ¥ÒªÙ²]Ï£¸Óí „VW×+ZÍZ©¬Öiõ§MDDÝnX='°º»UXý^§‡ï:¶ÀªV]ªl•J9X!+"":€2Ye´*­ÑªÞh¶× ¨Ýéö…V“„V"«„VóùâuI«_Њˆˆöh+¬«—%¬nVÃ~¯ÛŽ£À÷»¥°ª,e¥°*+"":¬6iUTZ•ÏRZUkB+Ûqý ŒÛ^0+­îî…VOÏyZý4´zƒVDDôa»`5[ÁêúJ`5èu;qúžk·š<¬,…U&+`EDD‡QžV"«%­Œ¬*J«–íx~Åín¯?TZÝܦ´zVDDô¹6a¥²ZÁjj`5Xõ»vžë¬êµ<¬J9X!+"":ò²ZÒÊÊÓªÑlÙ®ç‡QÜéöJ«ë5Z- íÝ +-V¿–°z]Ìç +-+‘ÕÃýÂj<ô{v¾ëØ +-«jÅÀJd%°*+"":¼ÞÓªT²Ê­ju¡•ãzAµ ­&W9ZÍ í߬~æaõl`u{“ªێ£À÷»•ÀêÒÈ*…U&+`EDD‡SžV§B«bB+‘•ÒªRUZÙŽëa,´ê†cC+‘UB«¹ÒJe­ˆˆè7½­dµ‚ÕB`õ’ÁêZ`5Xuâ(ô=×n5yXYk°BVDDt@e´:QZ”VVB+‘ÕeB«–íx~ ­zýÁHiu{w/´zJiõ +-­ˆˆè÷í‚Õ,««Éh80° +-<×XÕk¬ÊV©¬ˆˆèPËd•Ñª´N«F³e»†VÝ^¨´ºIiõœ§U*«_ÈŠˆˆ¶ô1¬¦)¬ÆÃA¿ÛiXÙ +-«jEa¥²RXV§ÀŠˆˆ±MZ•VåŒVµºÐÊZ…QÜéöB««ëŒV/ЊˆˆöiV*+Õ<Õãôáþ.ÕhÐïuÚqø«V«K••ÂÊRXV'¬LG­Œ¬RZ‰¬”V•ªÒÊZaÔ6´šäi5›Íë´zƒVDD´Ñ6X½¦°zJ`u{“ªێ£À÷VÍ X•r°:VDDthe²ÊÑÊJh%²ºLhÕZùA ­úƒáØÐêa +-­ˆˆh¯>€ÕóV׫¡ÀªG¡ï¹«F}«²Âª¬ˆˆè{O«Ò­šB+Ï"¡U¯?%´º»˜>®h¥²‚VDD´­¬Œ¬2X½¬`u5 «vžë(¬jU+‘•U&«#dEDDXžV§B«¢Òª¼¢U½!´r=?Zu{ý¡Òêæ6¡Õ“Òj>_¼B+""ÚÑvX-¶Àªo`廎Àªbd%°²Ö`u ¬ˆˆè;Êhu¢´*¤´:;7´ªÖ”VŽ¡U'¥Õõ’VÏЊˆˆ>l¬f ¬¦)¬Æ«^§ ¬<Çnmª¬ˆˆèðËd•£•¥´JdUIhe ­‚0j ­ÃÑäjE«hEDD»ûVÓ‡û»V#U·GVÍFVe…UQ`u +-¬ˆˆè°{O«Ò&­ZB+?c¡UÿZ¥²‚VDDdz[É*…Õ VO ¬noVC«Ð÷\…U½¶„ÕY +-«‚Âê$ƒ²""¢C,O«S¡UQiUÎÓª)´òü Zõ„Vã5ZÍfó´""¢÷mÂêo«yV×)¬:«ÀsVÕŠÂJdU¶¬5X+"":ÜŽ2Z(­ +-)­Î2ZÕB+×Ъ+´¥´z˜B+""ÚÙ6X½X=g°ºX Vm+ÛÀêRee`UVDDôUÊd•£•%´:7´ªÖ”VŽÐ*4´&´º½»˜>B+""ÚÞnX½ä`5XõVqø«Ö¬Ê +-«¢ÀêXÑWè=­J†V‰¬* ­l¡U ´ê,iuchõ­ˆˆhK{Âj,°êXy«fã=¬ +- +-«“ VÈŠˆˆ·<­N…VE¥UyV­”Vm¡Õ@huu§Õ\iõZQÚ'a ¬\…U½–ÂJdµ«c`EDD‡ÞQF«¥Ua ­šJ+ßЪ¿N«gC«×W•´""¢MXýLaµ˜Ïf ¬¦)¬F«®À*X9 ¬ª…Õ…ÂÊVDDôÕÊdµN«³­J+Oh§´š@+""ÚÑÇ°zœ>ÜßÝ&° +-¬:ë°ºTYX•X+""ú:m£•%´:OiU«/i ­zB«1´""¢íí«›<¬•½«²Âªh`u’Á +-YÑ¡·“VJ«JÕÐÊÝE«hEDDiÂê)…ÕµÂj °j ¬|Uk¬ +-KX+""úåiušÐª”ÒJdu™ÒÊZ…B«®Ðj­ˆˆhKûÁêjVͬ΀}Ùò²JhUTZ•×ie ­¡U'O«hEDDY{Âj"°ê ¬b•§°jÔ—°:XYÀŠˆˆ¾j´*¤´:ËÓª•§Õ0¡ÕíÝýÃ4¡Õ Zýã{Û«¹Àêy¬ÜVµj« «R«Ó<¬}¶ÑÊZ§USiå ­Ú­nZ=B+""ú¬Æ«žÀ*ÊÁª’ÈJ`UVX ¬r²úÓŸ$""Ú¯£]´:ÏhÕX£Õ@iu ­ˆˆ(í¿ƒ•³V`EDD_´•¬ŽUVJ«’¡Õ…¡U­žÐÊZÅЊˆˆ6ú¬º«Pae+""úf­hubhUTZ••V ­*Õ Zõ•VWЊˆˆ´ýa5ZÂ*x«³²emƒ²""¢¯Ô­ +-yZýëß—KZ¹B«èÓ´ÂVDDߺœ«öUg «VVçÀŠˆˆ¾EGŸ¤UOi5Éhõ­ˆˆþ±}VÃ%¬|…Us;¬Öeõ§IDDô¹vÑêlV´""¢µ6`õ÷ï`ÕÎ`Õ¨§°º0°*+""úm¥•µ•V!´""¢´ÿVµªÂê/…UYaUVDDô ÚÕŠVçyZÙKZu•Vã´ú‘Ðê'´""úæ½}Vƒ%¬¼%¬**«¬ +-°BVDDôÛB«Ò'hõ¸ƒV¿ ÑwmXݯÁ*VDDôý{G«¢Òª,´ºXѪ¥´ +- }«Y«»÷°r7`u¬ˆˆè{u´A«Â6Z5?¦Õ‹¡Õ«Òêï Za+"¢oÕÿVV +-«S«ÿ°_'jI­a†wZ2kj{gi9¤‰] ¬ ŠAÎÿ¬ö÷Ok^€]Ïsï{ï+""ÚìV¡Õ¿ ­n­ºe´ú ­ˆˆ¶¾4¬fKau§`u©`õ!«VVûÀŠˆˆ¶¡E´êZ½3´º€VDD»]ÊUV`EDDd[J«“Ó­î¡ÑÎ5¯‚Õ «ðY°ª•À +-YÑf—“UL«¦¢•ÈêZQVÓ•au–‚UÛÁêXÑÖUJ«úÊ´ò…VÑp4ÊÐ +-[mW¥°W=V «7ÀŠˆˆ¶­W¿—VhED´u-‚Õ°«[`EDD»Ø¯Ñªëhåi5…VDD[Ô|¬`EDDôÏóiu¡Õ@Ñ*Ô´ú!´C+"¢í*ïª_ƒU§V{ÀŠˆˆ¶©jZµÑêAÓªŸ¡ÕÏ +-Za+"¢ ­V «Q ¬îÒ°z¿Vû ¬mKyZ½ZÕV Õ7m+G«aŽVY[­ûѯ”‡Õ4«H`åWÂê¿*X½VDD´¥iu°˜V7yZЊˆhûš—Âj,°úQ«¯VŸílÏ Õù*´š”Ð +-[mXyW9Xý´° +-V^ «ûE°j+""ÚY­J«/EZEÃÑ(¡ÕZmt a5´°ô³°ºÌÃêЪ¬ˆˆhzUA«ÆZÝfhå;ZýZ­²¶Z÷I "¢•›—ÀjR«ž†U7 «÷ÀŠˆˆvµgÑêÂÒê.G«ÐÒêg­°цT€Õ4«ÀÀJ¹êÁÂꪫ°""¢]+E«ýÕiõ5¡•gh5Œi5VDD›ZÞUVc «Ñh•ÁêÚÂê XÑN÷|LÓªû`i5ZaUÑê Z½„æYX¥]¥`%®Faø +-V½Ç¬®¯. °ê¬šÀŠˆˆÈUE«ZŠVb+G«ó‹­ÄVŽVCK«±¦Ub«9¶""Z{YWe`%®J`åiX‰«VÊU7ÀŠˆˆh…Ò´ÚÓ´z§ÕQ†VŸÄV)Z‰­­ü ­¬­&ÚV1­ž Ñz›gae]5U®r°Š¢0X ,¬º÷YX)W9XµQ®å´:,ÒêZÛªû l¥h%¶R´Šr´Jl5ÇVDDë+ç*«‰‚•uÕ0 +-ÃÀXõ{EX‰«Î¬NOX5€Q¦jZÕͦЪSI«û®¥U_Ñ*P´R¶R´²¶Ši…­ˆˆÖVVÖU%°ò¬ÄU)X‰«.X¿Õ°jYXXí+"""ÕZµ­¬­Š´[ ­ü ­´­ ­[A+"¢µ”s•ƒ•v••¸* +-ÕÀÀJ\Õ5®ºÊÃê(U­¦\¬ˆˆˆ’Ъ‘ÐJlehu.¶JÑJÙJh%¶ +-‚0R¶2´²¶Ši…­ˆˆþ~󬬫 ¬´«¬Â0ðVýž…Õ}¬s°z ¬ˆˆˆR-¦UKÓJl•¦ÕeÊVšVý­¬­ ­°ÑÚʹÊÁJ»ÊÁ*Ò°ò¬¿a¥]å`ÕX5›:°"""*íUÊV ­Ò´:ZL+±ÕÀ[…ÊVŽVÖVЊˆh-U¸ÊÀʺJÁ*X ú +-Vâ*+ãªVïN-¬Ú%°ÚVDDDq9Zí+Z‰­jµ˜V‡‹h¥l%´­E«ØV†VØŠˆèï7¯€•v•ƒ•¸* |«ž•uÕuV'Ç1¬ÀŠˆˆhAEZ½¶´ª7šM¡UÇЪÊVŠVb+Ï÷ƒ0LÑÊÚj†­ˆˆþn®2°²®R° +-q•ÀJ\µVo¬Z‹aµî)#""z -£U[ÓJlUI+±•ÐÊóƒ ŒR¶2´š–Ñ +-[ý¡Ê\5s®J`†/°êkX‰«Ò°²®²°:LÁêXU—¦Õ^ŽV K+±U­”­„Vb+E«0E+k«Y™­Ö}=ˆˆ¶²y¬Œ«&)WEaøžÀª÷h`•rÕ……Õ»S«ŽÀª©`U«)W+""¢Ê–Ъ%´:´´*µ•¦UOh%¶Z¥l5ÁVDD¯*WMµ«X…Vƒ¾ÀJ\U«“c «¶†UÝÂʸj?å*`EDDWA+e+K«Ž¡•ØªœVÊVýÁ@h¥l•Ðjlh5-£¶""ú•ºjVt•‚•ï ¬zVÚU¥°z{daÕVDDD+VF«7šVõF³Ùj·5­ÄVe´Ò¶Z‰­<±•Ðªh«¶""ú£å]õd]•‡•¸J`5X‰«,¬ +-®2°:XµŠ°ÚVDDD•åhel•£•ØJÓªh+E+e«þ` ´R¶2´Ò¶š`+"¢?ݪ®R°ò=O\¥`%®*…Õ鉆UÇÁª¬ˆˆˆVíUÊVyZ5š­–ÐêÐÐJlU¤•²•ÐJl剭„VÖVŠVcC«iB+lEDô;›ça5³°šhX)WX‰«VÕãw «ØUYX¿U°j·[Íf£^W®VDDD+–¦Õ^šV5G«Ž¦•Ø*K+k+E+±U0ð|lEDô÷ªtÕT»JÃJ»*Ò®òÄU+qU +-V‰« ¬Ž,¬Vo¬öÑ +-UÐJlU¯7šÍV»­h%¶R´ÊØÊÒJÙê±'¶ò܆ÕKßcŒ1ö­’VµŒVŒV¡Ò +-¶*Ó*µh[E°U’ŒÆS¶ºP[]ÑVŒ1ö´ÝrÕõ”«.SW尒ᮬઠV…«rXµ[+X«õ[°Z!¬cŒ±;š¥Uj« ­ hå…V°UN«ÂVJ+±U0­†Éh”ÑŠ¶bŒ±çé.W)¬2WGIWEp•ÀJ\5 +u•ÂªVVaµ±!®*`µJX1ÆcK6—VëB«´r lZå¶*h¥¶­`«¶J’Ñ8³•Ðê\iE[1ÆØSUíªVS®:Wàª8Vp•Â*wU«nGaå+c‚F«aÅcŒÝ¿•[e´‚­66”V´ +-…V°UA«ÜVB+±U0ˆbØjT²ÕmÅcOÖR®RXžª«†q‰«+qU«ÌU«vK`åf`•ºŠ°bŒ1ÆîU%­j­1 •­`+¡Un«ŒVj«£c±UÅCµUJ+ÚŠ1Æž°Å®Êa•¹j¤´[e´ò lÕí©­”V©­@+±ÕÑq•­þÒVŒ1ö nîã*ÕÄU}q`¥®RX©«VÝ`Õ Cï« €U-‡]ÅcŒ=¢y´ª+­1Ö9ÂVíl%´Jm%´R[툭N`«(Š‡Ãdt[WŒ1V´Œ«.RWýQWGI2Œãh0W©«VâªVâ*ÀªÝ¬¼wVa%®RX¥®"¬cŒ±GVa«šØj]mÆZç=h[u{j+¡Uj+ÐJlux[õi+Æ{lr`WVâ*•ºJaÕíVÍ0ôÎYc‚†ÂªNX1ÆcOX­>­êJ«F`Œu·°U»[ ­ÔVB+µÕÞ¾Øê¶ ¢8&b«SÚŠ1ÆîY«ª]õwÚUÃ8Šý¾¸ +-°‚«Vê*•¸ +-°j·+ïµ&ÔUë⪠V%WVŒ1ÆØê¦U­ U`¬uÞƒV°U·§¶­R[ýÚQ[ˆ­N¦l5 ­îe+âŠ1ö®{ˆ«FÓ®:WVâ*…•¸J`ÕíVÍ0ôÎYc‚†Âª.°J]U†ÕKŸcŒ1öz[©¶•Ð*µ•1Ö9ÂVílZ©­@+µÕï]±Õ¡ØªßDQ<\ÞV×´cŒÍ°êfšU ]• ã8 àªcqÕ¾º +-°RW ¬à*ÀªÝ¬¼wÖš €U°bŒ1Æž¼y´ªg´ +-ŒµÎ{Ð +-¶êöÄV •ÚêÇOµÕžØêh [].¶qÅ{‡U±j±«NK®:Wˆ«+q•ÀJ\Xu;€U3 ½sÖ¬ÄU +-«*WVŒ1ÆØã*Ñj5§UMh%¶­Œu·°U»[mn©­¾|U[ýÚ[í‹­Ža«Af«Ñm[]”lõO¥­ˆ+ÆØ»êf¾«®îtU4è÷ÅU‡âª]u`%®Xmö«v °òÞY+®RXÕçÁê¥Ïˆ1Æ{ý­”lµ–Ûª.¶­ÄVÖ:ïA+تۃ­¶?ª­¾}W[ý[ˆ­NÔVñ½luM[1ÆÞe7Kºê¼p`5—]u$®ÚWVâ*ÀJ\µ WVÍ0ôÎY#°W­‹«+Æc칪¦UMh%¶­Œu·°U»[mŠ­>}V[ýø)¶Ú[.o««¶"®cï ¬ºËUÃÜUÇâª}qÕŽº +-°WV½n®¬¼wÖŠ«VuU•«+Æcìi*Ñjb«ºØ +-´[Yë¼­`«.lµ¥¶úòUmõKlµ'¶:‚­ú°qÅ{OÝÜåªËiWýWVºê@\õ[]õ]]XmmVv® +-½sÖ¬6RXÕªaõÒ'ÄcŒ½VJ¶*hUKiµ!´2Ö9ÂVmت[mT[}S[툭öï´Õyf«ËÂVÄcì5‡U׫®2VÍuÕ rWŠ«vÅU€\XÁU[p`Õj6CïµâªFêªzÙU„cŒ1ö•h5±U=µUCle­ó>lÂVØjSlõé³Øêû±Õï¥mu±œ­ˆ+ÆØ›k!«¹jTåª=qÕ/uÕWuÕ6\Õƒ««0ôÎY#°ÚHaU+Ãj…°bŒ1Æž¥•’­ +-ZÕRZm­Œu·a³[ua«­m±Õ—²­`«ã9¶úsËVÄcìý4»peVý“³*sÕßå]õM\XmmnÂU¸ªzï¬W5RWÕ W•aõÒçÃcŒ½½nÓ*µU=µUCle­ój«6lÕ[}[}[ý[íVÙ*Q[f¶ú[i+âŠ1ö¦›¶‚U×V]MX5åªñ-WÁUûâªqÕwqÕgqÕ\Õ…«Zê*gQW)¬j¬J®"¬cŒ±ç¨D«Õ‚V5¡Uj+c¬[5a«lµ)¶ú$¶ú&¶úµ´­Î3[Mãêz.®¨+ÆØ«niV•\u¶ØU¿ÅU?ÄU_ÄUÛpU®jÃU¡¸Êš@a%®ª®"¬cŒ±ÿ¢•’­Ö +-[ÕÅVJ«ÀX±U6[°U¶Ú*lõ=·ÕluxËVŠ«3ÁUa+âŠ1ö滵f³¬š¸jšU%WÅ \õU\õ1sU®j†Þ‹«LæªuqU«Õ¬^útcŒ±·[™V«­jB«ÔVFlåÕVmت[mÃVŸ [í,a«?…­.flµWÔcìuu{Ææ³jÖU§w¹êgÉU›©«ZÍ0ôΉ«2XÕV™«ÖJ®"¬cŒ±ç¬l«µÂVu±•ÒJlåÄVMت[mf¶ú²ÀVÑ”­N3[帺¼®¨+ÆØë¨b¿ªYu•³*u•²ê¬`Uêª~iW}W}‚«¶àªnî*ï¬-\µ.®ÊaµJX1ÆcÿaeZ­´ª ­r[Y±U6[°U7µÕÇÜV?¦lu0m«¸ÒVÀuÅû·PU·YuY°êWíÃU»Ó®ú WmÃU=¸ªÝj6ÅUÎÕ†Àª.°Ê\µFW1Æcÿqe[­¶ª‹­6ÔVFlåÕVÿ²_êmãZ…?7ɶä"wõÞ\'‰KìLòþuy‚@€’3¹qÑZ±Ïù”­Î#[5"[µ½¶ºÖ¶JqõhàêEãê_?®Ð}œ|ƒ•gÕÏ«RW=®ŠX•¸jž¹jàqÕq檪¸jG\UWiX­+""¢¿žM«õ”V[B«rL+±ÕžØêPÙê´ÐV—b«ÇV†­žµ­^…+tED﫪 +-°êÅ`Õ£Á*íª«ÔU£ÄU]ÃUgÊUµÃƒåªJæªRêª \EDDô&Ù¶ÚHmU2mUÍlu¼¤­WÚV÷b«×àʯ+xEDï!ÿ@½†UOÂ*×U×Wµ"WÕ•«N´«ö•«v#Wm'®Ò°ZVDDDo”M«õ”VÊVÛ±­*ÊV‡µÔVy['Óil«+m«W‚«§W/~\ý\ˆ+xEDoÙbUý2Ue³*qÕ£¸êÞpUĪœ«ú¶«Î•«Žj‡‡âª=åªqUW½— +-lU[E´R¶Ú7luV`«¹ØêÚ±Õ½ØêQÙjI\u¯ˆèoÜ#ª±êÁ`•vÕåå|6›NB®:µ\U5]UŠ]¬ˆˆˆÞAk¶­6R[•l[íe¶:ñÙj`ØêRlåàêa®¼º +-ó +-_Ñ_)¼B>U°ê)e•íª«¼«:®«ŽMWUbWm'®ÚÂUDDDï&›Vë)­”­¶[US[ylÕU¶'“él&¶ºrlåàêÙÂÕWËê +-_Ñÿ­¢é±TõËVUˆUª{‡Uâªù|6NÆãÑ0ìªÚáÁvU «²À*sÕ†í*`EDDô6­-c«Š¶ÕáR¶š‹­\Ý ®ó¸z1pÐU!¯ýÁÌÍ/¯ª~ªò³êA±ÊvÕ¥íª^«ö]W•bWm¦®ZÇUDDDoŸ‡V©­Êb«ˆV…¶j)[õÃáh<žL§b«KÇV®ž®2]ý0tõ3 «E¼BXDôZ¼0¿ +-UµUßV‰«f³éd2†ƒÔUÍe]µåw°"""zËÖ<¶ÚŒmUZÞVÃV“él&¶òáêa1®ÂºZ‚W(‹ˆ–léA ¡Ê£*«î5«2WE¬šÏ¦¶«ÚAWí¥®Úv\åÂê­Ï ÑÊ°Õ–×Va[õúƒÁp4Jl%¸Êlãê[†«GW¶®þ¯À%ýæn¸óó3 ª¦ª|¬úb°J\5WÇ£ápÐï÷ºÅ®ªf®*¹ +-X½ƒ<´2mµ]`«ó‹z½Ñl¶Úmm«áh<žLW‘­àê)ÁÕ]åxõÛÀ""Z¢Üäü,VU˜U_s¬WM&ã‘áªV«ÙhÔ/ü®J`»ª»jW½ÛÖŠlU.°Õ©m«n¯ßOl5[9¸ú’âêÞ•¡«A]yx…¯ˆèÏæÙªòªzÎT•g•éªˆUÓÉX\5ô{½nÇpÕÙbWmY®ZÇUDDDï/Ÿ­6c[• +-luœÙªÑlµÚN·×ëÑàj*¸Ò¶òáê!ÁUª«SW^^ù|±ˆè?æ_ªüª +-±ê‹Usa•¸j8ôû½n·Ón·š™«N–tÕ†ã*`EDDôžri¥mµ•ÙjǵU-³Õ…e«þ`8[ ®æ)®noý¸z4q•èêÅÑ•Í«°0½¢àØ{ã¢Ê§ª'CU!V‰«"V†ËUõúÅyâª#\EDDôrmµQl«}ÓVgb«z£ÙlµÛnWl5ŽW‘­,\Ý¥¸*ÐÕ³¥«ŒWKû +-iQ¾Å‹álLUyU…Y¥\³j"¬ +-«zÝN§Ýj5‰«NWâ*""¢OÑoÛêDlužØªÕîtº=ÁÕPp5Y +-W ®b]}7t•ò*ì«åˆED,7*ÙàxQU¤ªŒU7 «ÄU«ÄUqU·Ûi'®ºH\uìwÕ¶áªÍÌUÀŠˆˆè½·öj[ˆ­ŽÄV§b«‹z£!¶jwº]±Õ@låÁÕ­àÊÕÕc^W9^¾ò cÑ+òmÈ¿S٨ʩÊaÕÝ]ŽUSŪ¡°ª×툫šÍF]\uVìª2®"""ú ¹´ZÆV‡b«c±Õ™ØªÞh6ÅVnOp54q%¶ +-âJë*ãÕ³Å+¿¯ÂBZDäV´Öªd¦ò ªHUšU׫ÄU«ª®°ªÕlˆ«ÎÅU'⪚rÕ^ÞU ¬62Xá*""¢’×V›‹lU[ˆ­ÎÅVfKpÕ\ 2\E¶šÇº\Ý®|ºz°t¥yåñ• ¬EÆ""rsGÄØmª<ªU™¬ºõ³j$¬ê «:Â*qÕ…¸êT\u$®ŠXµ/¬z…«€Ñ»o[m{lu$¶:[]ˆ­WÁUßÄU¬+…«kÁÕ­+¯®¯¾;¼²€•'Ò""o±ð‰*5•‹ª€ªîDU7¢*/«ÄUmqUĪº°J\u,®:L]UÁUDDDŸ«µWÚJá*¶Õ±ØJpUW¸j ®z\Eºº]Ý9ºúfèÊÇ+X¶°ÂÈ""rr×#O*e*ª U)VÝ +-«®…U¢*“UCͪŽ°ª)¬WE¬WÕ,Wí»jW}¸^g«jb+ÁUd+ÁUd+ÁUd«"\] +-®®W^]e¼²|å–ÇXX‹ˆÒBñÚ‡T‰©lTåTu'ªºUŬšùYÕV‰«"V‰«"Vå\µ#®*ã*""¢OÕklU±l%¸Šl%¸Šl¥qÕõà*ÖÕ•èêÆÖÕCW1¯ ^i_eÀr‰U -"Zí|{ñì’Ê2UU–ªnEU×¢ª˜U¢*«ZŠU⪈UÊUšUŽ«J \¬ˆˆˆ>XËÛjWÙJã*¶•à*²U1®¦ +-W—‚+Ÿ®|¼ÊË"–YDDù¬éøîÊ0•ª¯ +-U¶ª®”ªbV%ª²YÕÔ¬WŬJ]UÕ®ÚÖ®ÚÂUDDDŸ«µ%lU[í([US[)\E¶²qÕqpëjÒ•Å+ÃW° a9ÆÂZD”æ]‡gc>žlR¦ +-¢ÊPÕ\Tf•¸*a•¸ª–°*vUW}þÚªÛ*•ت¢l¥qÙ*«v‚«TW‚«©àÊÑU˜W‰¯4°Ra9È +-B‹ˆV7w$¾òh’Ê0•‹*ŸªfJUaV‰«V¥®ÚS®ÚÝu\µ‰«ˆˆˆ>aŶڲlµ«lµ—Ú*„«DWW®®2^Ý9¼R¾²• +-Ë2–ZDDÎLd¢'åÞc*UUM”ªÂ¬W™¬ÚVÅ®ÚÁUDDD«QÀVy[í([UÅV¯ÀUPW ¯,_å• +-Ë4–ZDDOÎNdro’*3UU®ªFZU!V‰«jµÄU{⪊r•bÕbW+""¢_­6S[)\‰­4®ÄV q•èj$ºŠþ“XW…¼R¾RÀJ„¥‰e"Ë'-"¢Gg&îmP)Qe¤Ò¦²Qe«j¬T³J©ÊϪÈU«ªÂªÔU%\EDD´-¶U)³•ÂÕžÆU­W±®WZWcCW6¯R_)`YÂÒÄ2å“­|öF¤ÓñÕ•"Uj*UWª U µªbV‰ª +-XµŸ°ª"¬Ê\µ¥\µ«ˆˆˆ>{ lµeØJáª*¸Ú׸:òã*ÖU×£«¯,_)`YÂÒÄ2å‘­töÜšžJDe“JL5S¦JP¥T£J«ª­TÕPªŠYufÕn̪íÿ±_7ÊUWFKXAC—SIÅNòþßÛ3ݧf4(2WhÖz‡³ë|)«.§¬ªºêLWÀ ÚêYn«óÔV—©­R\½\Ž«÷‡¸:ÖÕ§º®Ú¼ú{Ê«ÜW%°RaM‰55VÕY£Úv§Ù„ÿ–µøwªcQUI57U‰ª\U_rUý%UÕO‡ª:fÕ»•¬ºNYõÕUõþPUwdÕUɪ‹œUº +-ökÔV!®.¶ÄÕÍ!®R]½u•òêXW‡¼ú’óªê«c`…š+WV ­ÆoÀÓ·4¿–˜WãŸ9¨ú¤š›ª‰ªTU?Ūºªêí¡ªÞªj”UÏCVÕ]u¦«`ŸÖÛjK\½9ÄUª«Ûa]Myõ×”W‡¾ª+VJ¬Y%³ÚØöª…¼±§RQå¤jšª‰ª®ªÞMUus¨ª•¬Ê]Ue•®€=;ÛWW1®b]Ý ëªÍ«Ï)¯ª¾:V*¬”XScåʪJ à ìC•S)¨ú¤š›jU±ª~ϪcUmÌ*]D[Úê"µUˆ«u\źçUè«*°Ra¥ÄškŠ¬ÐYÅ?€]êÆ ïÄ”S©§ŽAu,ªcR5MU¢jXU)«rUÉ*à+m‰«Ë)®ž§¸ºÎquG]•¼ú˜ò*÷Õ1°Ž…kj¬\YMkûV-Ã<Ózü­.ª9©æ¦ZˆªXU%«^nÉ*]´VÚªŽ«Ë)®®r\½ÌqÕÖU—Ws_åÀj kj¬\Y±´&a!¦ÍH=•‚êXT9©æ¦ú˜šªDÕmŽª¶ª~LUµ˜Uç+Y¥«`÷Î6ÅÕEW/R\ê*äÕû”WU_+VJ¬Y¥³²ŸÝj÷ Å—ÐSÇ ê“jnªUSUÝĪz•ªêeªª.«.YõLVa[ÝW×)®úºjò*öU¬PX)±æÈʙմ°sq¾Ì{ñ¹ ª’T±©š¨z›¢ª¯ª¡ªrV‡¬úa˜Uº +-ÈÎîWW)®b]½Juõ&ÕU•Ws_•ÀJ…•kj¬\Y!´Æ¾OÔêé—‰ø<ƧTMRµM5GÕMŠªAU嬺\ͪg² +-Xñµqõ|Š«Q]½NuU÷Õ»¹¯Ž +-kJ¬©±Bfõ¹ìQ3 y+>†ž:UHªÜTmT½)QÕUUΪ‹Y¥«€…¶ªâê|Ž«q]ż:|0o漪û*V*¬¹±reÕ©C*ÔÔÜS)¨JQ•¤ÊM5GÕzUÉ*àalŽ«RWW±®^4u•úê¦ê«X©°RbM•++„Vë#°K+PvâCè©©¨š¤*MÕEÕBUmÏ*]¬:»G\•ººžë*çÕ«9¯b`õ…57VȬ6¶€«‡áCŒÛT©¨RR5M•£êÇ9ª¶U•¬þÛâj½®J^•¾Š kn¬RY1´Š°·órü©+ª”T¥©Q5¬ªY¥«€Ú/¢‹«B\µu5Ì«ÐWU`M…•«TV[À~5Ëð.OÆÛTSQ¥¤jš*DÕZUÉ*àam«®®º¼J}õ²ôÕXSaåÆÊ‘;  Q–b:¨RQŦê¢jsUÉ*à,ÇÕJ]õyÕ÷ÕX9±rcåÈjK àíÛj!ònÌCRUÕT}T­TÕJVé*ྺ¿¢«º®óªê«)°JbåÆŠ™5ª-`ÚY(5õ:¯H]TSRUM£êΪ’UÀ[‰«¥ºäÕXÓ³3VN¬YMhTâV” ™‹ªNªº©ª¨š«JVßÌZ\uu5Ì«XÓ³ÓVY£ÖxÕ®DXyTæ¤6ÕbT­V•¬Nÿj¬ÖU“W9°®® +-«©¬¥Øv¬ßˆ0 ×MQ-4ÕWW•¬ÚàãÖUŸWm_ +-«­¬ÅØöj0a@®Ú¢ÊMuÙ6UˆªXUƒ¬:õìOÖz\…º*yÕ÷Õ¨°šÈZ‰-`§'äyWT¥©JTm¯*Yü±ÿÇR]…¼*}«VY«µìÓh#∄m)I5nª*ªTp2wÕU•W㾊ÕFÖzm;5Z‰fIÂÆ„¦ZŽªQUÉ*à[½#M^-öU ¬.±ÖJ Ø»ñ`\,UÝTMT©*à±ØRWu^ÕÕ$ÖbetÚù¨‹ªNª¶©†Q¥ª€Sþ']^µ}ÕVßX’ 8Z߆vJλ±ÙUª +-x ÆÊ ¯úÀê +-kciû´4ý¸tIµUª +-xL–êjW£ÀZ­,€‘ñ’ŒFgq¡N=#‹ÏË°¯–Kk­»æbae–gIUÚʳX["  ³²)kM%ª€ïÄj^­–ÖlZŽÕ¢UÀ÷设ÚXXw»{pDð=Ûðíˆ,à~¶Œ¨žˆÍïÖ–ÜgH4ðÝë-¸SÀîÔð”zá¾µSÿ_ÀrêAxNý’ß©SÀcvê_ x¼N½Oü=8òmUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUöà@ÈÿµTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU؃ ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUa€ü_AUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU…=8$ôÿµ7 ÀX ¢[‡ +-endstream endobj 113 0 obj <> endobj 115 0 obj <> endobj 121 0 obj <> endobj 122 0 obj <> endobj 123 0 obj <> endobj 124 0 obj <> endobj 114 0 obj <> endobj 125 0 obj <> endobj 126 0 obj <>/Shading<>>>/Subtype/Form>>stream +-q +-0 g +-/GS0 gs +-129.5558014 0 0 -129.5558014 181.8615265 172.3060913 cm +-BX /Sh0 sh EX Q +- +-endstream endobj 127 0 obj <> endobj 128 0 obj <> endobj 129 0 obj <> endobj 130 0 obj <> endobj 131 0 obj <> endobj 132 0 obj <> endobj 43 0 obj <> endobj 110 0 obj <> endobj 112 0 obj <> endobj 133 0 obj <> endobj 134 0 obj <> endobj 111 0 obj <> endobj 135 0 obj <> endobj 136 0 obj <>/Shading<>>>/Subtype/Form>>stream +-q +-0 g +-/GS0 gs +-0 -0.4444444 -0.4444444 -0 170.9031067 196.9139557 cm +-BX /Sh0 sh EX Q +- +-endstream endobj 137 0 obj <> endobj 138 0 obj <> endobj 139 0 obj <> endobj 140 0 obj <> endobj 107 0 obj <> endobj 109 0 obj <> endobj 141 0 obj <> endobj 142 0 obj <> endobj 143 0 obj <> endobj 144 0 obj <> endobj 108 0 obj <> endobj 145 0 obj <> endobj 146 0 obj <>/Shading<>>>/Subtype/Form>>stream +-q +-0 g +-/GS0 gs +-0 -192.0446777 -192.0446777 -0 181.4170837 277.4395447 cm +-BX /Sh0 sh EX Q +- +-endstream endobj 147 0 obj <> endobj 148 0 obj <> endobj 149 0 obj <> endobj 150 0 obj <> endobj 151 0 obj <> endobj 105 0 obj <> endobj 98 0 obj <> endobj 152 0 obj <> endobj 153 0 obj <> endobj 106 0 obj <> endobj 154 0 obj <> endobj 155 0 obj <>/Shading<>>>/Subtype/Form>>stream +-q +-0 g +-/GS0 gs +-0 -192.6805115 -192.6805115 -0 181.4170532 277.7574463 cm +-BX /Sh0 sh EX Q +- +-endstream endobj 156 0 obj <> endobj 157 0 obj <> endobj 158 0 obj <> endobj 159 0 obj <> endobj 102 0 obj <> endobj 104 0 obj <> endobj 160 0 obj <> endobj 103 0 obj <> endobj 161 0 obj <> endobj 162 0 obj <>/Shading<>>>/Subtype/Form>>stream +-q +-0 g +-/GS0 gs +-0 -226.1058197 -226.1058197 -0 181.4170532 294.4700928 cm +-BX /Sh0 sh EX Q +- +-endstream endobj 163 0 obj <> endobj 164 0 obj <> endobj 165 0 obj <> endobj 99 0 obj <> endobj 101 0 obj <> endobj 166 0 obj <> endobj 167 0 obj <> endobj 168 0 obj <> endobj 100 0 obj <> endobj 169 0 obj <> endobj 170 0 obj <>/Shading<>>>/Subtype/Form>>stream +-q +-0 g +-/GS0 gs +-0 -226.2054596 -226.2054596 -0 181.4170532 294.519928 cm +-BX /Sh0 sh EX Q +- +-endstream endobj 171 0 obj <> endobj 172 0 obj <> endobj 173 0 obj <> endobj 174 0 obj <> endobj 96 0 obj <> endobj 97 0 obj <> endobj 175 0 obj <> endobj 176 0 obj <>/Shading<>>>/Subtype/Form>>stream +-q +-0 g +-/GS0 gs +-0 -24.7455978 -24.7455978 -0 181.4173279 277.4232788 cm +-BX /Sh0 sh EX Q +- +-endstream endobj 177 0 obj <> endobj 91 0 obj <> endobj 93 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +-q +-201.013 187.633 m +-202.285 208.606 l +-202.664 208.787 l +-219.709 216.957 231.084 235.257 230.734 254.049 c +-230.676 257.172 230.37 260.041 229.823 262.617 c +-230.142 263.221 l +-230.818 260.426 231.094 257.412 231.167 254.049 c +-231.584 235.028 220.046 216.638 202.853 208.397 c +-202.702 208.325 l +-201.421 187.218 l +-h +-W n +-q +-0 g +-/GS0 gs +-0 -41.4666176 -41.4666176 -0 192.424408 239.1365662 cm +-BX /Sh0 sh EX Q +-Q +- +-endstream endobj 94 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +-q +-160.132 117.862 m +-161.043 117.571 l +-181.401 97.088 l +-202.254 118.031 l +-200.972 136.846 l +-210.806 146.728 l +-211.421 146.728 l +-201.42 136.676 l +-202.702 117.862 l +-181.401 96.471 l +-h +-W n +-q +-0 g +-/GS0 gs +-0 -30.4885464 -30.4885464 -0 190.1102142 125.2657852 cm +-BX /Sh0 sh EX Q +-Q +- +-endstream endobj 95 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +-q +-200.837 156.78 m +-215.94 171.986 l +-216.55 171.986 l +-201.449 156.78 l +-h +-W n +-q +-0 g +-/GS0 gs +-0 -12.7799854 -12.7799854 -0 204.5773315 169.2155609 cm +-BX /Sh0 sh EX Q +-Q +- +-endstream endobj 183 0 obj <> endobj 180 0 obj <> endobj 185 0 obj <> endobj 186 0 obj <> endobj 184 0 obj <> endobj 187 0 obj <> endobj 188 0 obj <>/Shading<>>>/Subtype/Form>>stream +-q +-0 g +-/GS0 gs +-0 -12.7799854 -12.7799854 -0 204.5773315 169.2155609 cm +-BX /Sh0 sh EX Q +- +-endstream endobj 189 0 obj <> endobj 190 0 obj <> endobj 191 0 obj <> endobj 192 0 obj <> endobj 181 0 obj <> endobj 182 0 obj <> endobj 193 0 obj <> endobj 194 0 obj <>/Shading<>>>/Subtype/Form>>stream +-q +-0 g +-/GS0 gs +-0 -30.4885464 -30.4885464 -0 190.1102142 125.2657852 cm +-BX /Sh0 sh EX Q +- +-endstream endobj 195 0 obj <> endobj 178 0 obj <> endobj 179 0 obj <> endobj 196 0 obj <> endobj 197 0 obj <>/Shading<>>>/Subtype/Form>>stream +-q +-0 g +-/GS0 gs +-0 -41.4666176 -41.4666176 -0 192.424408 239.1365662 cm +-BX /Sh0 sh EX Q +- +-endstream endobj 198 0 obj <> endobj 92 0 obj <> endobj 88 0 obj <> endobj 90 0 obj <> endobj 199 0 obj <> endobj 89 0 obj <> endobj 200 0 obj <> endobj 201 0 obj <>/Shading<>>>/Subtype/Form>>stream +-q +-0 g +-/GS0 gs +-0 -166.2333221 -166.2333221 -0 181.4170837 216.1957245 cm +-BX /Sh0 sh EX Q +- +-endstream endobj 202 0 obj <> endobj 84 0 obj <> endobj 87 0 obj <>stream +-H‰ìÕ ²·EAzÿ›vÈ I$ý‡ *s…s_ÿø0žRÿZ÷Ü…÷Op˜9gÞŸÀ>ŠKÿ™ú[\V}à¿V€‹¨Ïù³êïp¦úz¿«þ~‡¨ÏõXõ×ØV} gª¿-ÀFꓼNý¥ZõnÔ_`½úòöêX£¾¶[©`¦úÆîª~€áêú¿ú…©ÏéIê·xK}DÏT¿À êÓyºúýVÌë¨_à;õ¼žúE>QŸÇ «ŸàõY¼ƒú~ª¯áÔo Ü]}ï¨~sà®êëwgõÛwS_=~`™úÞñ·ºàúê;ÇŸê"€ ««»®¨¾l|­î¸”ú¤ñˆºàê[Æ3êZ€ÃÕGŒçÕͧª¯/«ÓÎSß-ÞU¤>XŒQw¡>UŒT×ì­¾QLPG쪾NLS§짾KLV줾H,Qgl¢>F¬S·äê3Äjuq@¨>@4êî€D}z(Õõ‹ÕG‡^Ý °L}nØE]"°B}iØI]#0Y}dØOÝ$0M}^ØU]&0C}YØY]'0X}TØ_Ý(0L}N8E]*0B}I8I]+ð¦úˆpžºYàuõýàLu·ÀKêÓÁÉêzgÕWƒÓÕO¨×Pw <¦¾\GÝ2ð­úLp5uÑÀWê ÁÕUŸ©¯WU— | > \[Ý7ð»ú&p}uãÀ¿ê{À=ÔÿSŸ¨¯wS÷V_î«^?wU—·TŸ{«û‡»©7õàNê½Ã_êÀ]Ô[‡¿Õ[€;¨w¿ª÷WWoþTo.¬ž7|¬^\S½lø\½¸žzÕðµz!p-õ¢á{õJà:ê5Ãcê¥À5ÔK†ÇÕkóÕ+†çÔ‹ÃÕ†gÕ›“Õû…WÔ»SÕÛ…WÕÛÕ»…wÔûÓÔ›…wÕ‚“Ô{…êÁ)ê­Â õ”à õRaœzM°¿z¥0V½(Ø[½P¯^ì«^'ÌQ/ 6UOf©·;ªw 3Õû‚ÝÔ›„ÙêÁNê= +-õÎ`õa‘zj°‡z‰°N½6èÕ+„µêÅA«^ ¬W¯Bõü Pï*õö Ro +-õî Tï–«G­z°V½8èÕ+„uêµÁê%Â"õÔ`õa…zg°“z0[½1ØM½I˜ªì§^%ÌS¯ öT/&©§»ª· 3Ô»‚Õû„ÑêMÁîêÂPõ `õJaœzMp†z©0H=%8E½U¡Þœ¤Þ+¼­œ¥^,¼§^œ§^-¼®^©.¼ªÞœªÞ.¼¢Þ ¬ž/<¯^ œ­^0<§^ ¯1<£Þ \A½cxT½¸ˆzÊð˜z)põšáõLàJê=ÃwêÀÕÔ›†/Õë©W Ÿ«××T/>QO®ªÞ6|¤Þ\Y½oø?õ(àÚê…ÃïêEÀõÕ+‡_Ôs€;¨wÿ¨Ç÷P/~ª—÷Q¯~8ú°R½w¨7wSož›«÷S¯ž[«ó‡;ªwÏ}ÕíÃ]ÕÛç¦êðá¾êõsGuõpoõàvêäáîêÀÍÔÁõàNêÚ¿Ô—€Û¨S~ªo÷Pwü£>ÜA]9ð«ú"pyuâÀïê›ÀÅÕª¯WV× |¤¾ \V6ð±ú6pQuØÀgêëÀÕU_©/—S' |­¾\L4ðúJp)uÎÀ÷ê;ÁuÔ-©oQ‡ <ª¾\B1ð¸ú^puÄÀ3ê‹Áéê‚gÕWƒ£ÕùÏ«ï«ã^Q_ŽU§ ¼¦¾œ©îx]}?8P-ðŽú‚pœ:Yà=õ á0u°À»ê+ÂQê\÷Õw„sÔ­cÔ·„CÔ¡£Ôׄ#Ô™ãÔ÷„Ô‘#Õ…íÕ‰cÕ7…½Õ}ãÕw…Õq3Ô—…mÕisÔ·…MÕa³Ô×…-ÕYóÔ÷… ÕQ3Õ†ÝÔE“ÕG†½Ô=óÕw†Ô1+Ô—†mÔ)kÔ·†MÔ!«Ô׆-ÔëÔ÷† Ô+Õ‡\ °V}shÕýëÕw‡PP¨/™:= Qß"ux@¥¾>$êì€N}ÔÑ¥ú±\Ъo‹ÕÁµú +-±TЫï Õ±;¨/ËÔ©{¨okÔÛ¨Ï+Ô•;©/ÓÕ‰{©o“Õ»©¯SÕyû©ïÕq;ª/ÓÔi{ªo“Ôa»ª¯SÔYûªïÔQ;«/ÃÕI{«oƒÕA»«¯CÕ9‘‘ uoØ@+©‡Wn‡L ˆ7Ìȇ@ëHˆ÷L*ˆµêŒXGD¼kZC¬SGÄ:2â}+b:!ÖÑ#Ììˆê€XHH 13$¦«óa%%1ÆÌ’˜¬Ž‡¥¤Ä 3Sbª:ÖÒ£Ìl‰‰êpXMKŒ2¯%&ª³a911̼˜˜¦Ž†€˜fVLLS'CAMŒ3«&&©ƒ¡¡&Æ™S“Ô¹PQą̃‰IêX訉aÆÇÄ4u,„ÄÄ0£cbš:Rbb˜±11M +-111ÌȘ˜¦Î„œ˜f\LLSGÂÄÄ0£bbš:¶ &†ÓÔ° 11̈˜˜¦Îƒmˆ‰aÞ‰iê8؉–eÌ}b‚: ö¢%Fu£¬ƒíH‰AF^*†©³`GJbˆÑçŠ!ê,Ø“Žá¿ìÖ vã8ÁéýozŽ]®ê®Ÿ-Š""v |à=±YœT? +-–åqQËÅÓê'Áʼ"ι_<¡~,Î#â´Ñ+Æ!õsàxBœ4gÍxHýxÞgÌÝ5>Q?`õÖñ¡~À.êµã]ý €mÔsÇ»úû¨÷Žÿ}`¦zñ0úÀTõæm¯~ÀnêÕÛ\}~`?õîm­>>°£zù6VŸØR=}«Oì©Þ¾mÕ‡vU¯ß¦ê³ûª÷oKõÑÕ ¸¡úäÀÞê ÜN}p`sõn§>8°»z7SŸ ÞÁ­ÔÇ0ûÕ§xSoá6êC|S¯á.ê;|S¯á&ê3|Wïáê#ü«^Ä Ô'ø¯zo¯>0ÀÏêU¼»ú¾?«WñæêóüªÞÅ[« ð»zo¬>-ÀŸÔÛx[õaþ¬^Ç»ªï +-ðgõ:ÞT}V€¿©÷ñ–ê£ü]½7TŸà3õFÞN}P€ÏÕ+y7õ=>W¯äÍÔçøJ½“·RàkõRÞH}J€GÔ[yõ!RåmÔ‡xL½–7QŸàQõ^ÞB}D€ÇÕ‹yõ Ž¨7óõÕ8¢ÞÌ—Wà˜z5_\}>€£êÝ|iõñ«‡ó¥ÕÇ8®^ÎVŸàõv¾¬úpÏ©×óEÕgxR=Ÿ/ª>À³êý|IõÑžW/è ªOpF½¡¯§¾Àõ†¾œú`çÔ+úbêsœUïèK©pZ=¤/¥>Àyõ’¾úTW¨·ôeÔ‡¸F½¦¯¢¾À5ê5}õ™®RïéK¨pzQ_@}"€ Õ“úê\©ÞÔåÕ¸V½ª‹«ÏpµzW×V_àjõ®.­>Àõêe]X}€êm]W}€êm]V}€1êu]T}€Qê}]S}€Qê}]R}€qê…]P}€‘ê]O}€‘ê]N}€±ê•]L}€Ñê]K} €Ñê]J} €ñê¥]H} +-€ê­]G} €ê­]F}€9êµ]D}€Yê½]C}€Yê½]B}€yêÅ]@}€™êÍíÕ˜©ÞÜ\}€¹êÕÕùf«w·Uט­ÞÝT`¾zyCuz€B½½º<@¡ÞÞL Q¯o¥îШ×7Rg¨Ôû›¨£tê.ÔÍ:õêä¥zƒ§«ƒ´êž­î ЪWx²:7@­Þá¹êÚµz‡§ªcôê%ž¨N °‚z‹ç©K¯JØK½ÅÓÔ¡%7åaÿ]¹Ä3Õ—¤7åe&™àùêÌKÒ‡›ò²?7}€ uä% ÄMyÚ_™»¿ºñŠâ®<í¯LßJxEqWÞö×fmo§.¼ ¸-oûkS†·T^HÜ—Çý€ Ã[ªó.H%îËë~ÈèÝmÕu×#7æu?dèèÖê¸ëщ;ó¼3ptsuÛåèÄ­yß6¹½:ír„âÞ<ð šÜ^v9Jqs^ø£†LîꮫQŠ›óÄvýÞ.¡Îº­¸;OüqÏí"ꪋъÛóÆwéØ®¢Žº±¸?ü€ ÇvuÒŨżò#.ÛeÔE×¢ð̹fiR]‹^ìÀ3?æ‚¡]JÝs)z±ïü˜Ó3»–:çRcúA'gv1uÍ•Æ&¼ôƒNìjê˜+QŒMxê‡=¿±ë©[.D2vá©öäÀ®¨N¹Í؆·~ÜS»¢:äBDcûžØ%Õ×!ûðÚŸqt]Ug\‡llÄkÊ¡•XV]q²±Ïý)ÇfbQuÄeèÆV¼÷çŠ%Õ W¡[ñÞŸtt)T'\†rlÅ{Öá©XMpÒ±þYÇ·b1uÀUHÇf¼ø§=±+©ó­B;6ãÉŸðL¼uÔõ!»ñäOxn0QÇ[„zlÇ›?ãÉÉXBÝn ê±þŒg7cuº5ÈÇ~¼úsžî—«Ë-A?6äÑŸsb6Zu¸5Ȇ¼ú“NìFªî¶Ù‘gÒ™áÕÙ–  ;òîO;•0SW[„lÉ»?íäv4êh+Ð=yøç]BÝl²'/ÿ§#ÎW'[€ŠlÊÿÂ2Wl2²)/ÿ +-ç+NV[€ŒìÊÓ¿Ägªs-@Gvåí_ã’ŽóÔ¹zB²-oÿ"ׄœ¤ŽÕS’}yü¹(äu¬œ’ìËã¿ÌU)'¨Sõ´d_ÿe.K9^*§%óú¯s]ËÑêR5-Ù˜ç¡+cU‡ª©ÉÎ<ÿ+]Zs ºSLM¶æù_éÒšãÔ™jr²3ïÿZ÷¤®Ó“­yÿ׺ºçu¤˜ ìÍp±ËƒP7j ÊÞ|WPôju¢˜¤ìÍp¹I/VjIÊæ|—‘ôRu –¦lÎ'0À˜¨×©û¤Dew>E½J§¥*»ó 0(êUê<)UÙo`ˆaY/Q×)ÉÊö|CŒËz:NIWðŒ1°ëiu›’®lÏG0ÈÈ°'ÕiJÊ‚`”¡eO©Ë„”ÿ}†[ö„:LHZð 4ºí³ê.!mÁê4ºí“ê,!qÁŸŸ¡†Ç}J]¥#.øÆšP÷¸:JG^øÇê5¡îqu”Ž¼à;mJ߃ê&}áŸYBý+;súR'É o|ƒM +-|@]¤"0¼ñ!Œ6«ðÃê ‰áa¸i‰T÷¨H o| ãMlüˆ:GEdxçCobãGÔ9*"Ã;_Â3#­®Þùf˜[ù uŒˆÌð/aŠ¹™?W·ˆÈ ï| +-sÌîü‰:EDhøƧ0ÉôÐU—h | “ÌýuˆˆÒðoa– ôŸÕ!RÃßÂ4Eê?©;$¤†>†yšÖ¿©34Ć¾…‰šØ¿ª+$Ć>†™ªÚ?©#$ä†ï| 3UµRGHÈ ßù¦ÊrÿGÝ  7|çk˜+ìý]  8üàc˜, ¾qwÁá;_Ãliñ]«K?ø¦k“o]røÁ×0_Ü|Çèuò›³,_Ã|’Ïß3:«ª?†=?Å'kƒ¿«Àwõ·°ç× ø\iïuøP +-oê½g*kÿ«®ßÔ_›ºAAï™ÊÚÿª+À»úCø¦®P{¢0öOêð¦þ>ÔbOÓ¥þEþYç{¨;´ž&Ký›º,ô=Ô!æ“z–¬ôïê°Ð÷P—H=IúOêPÿQ§˜Oè9¢ÎVÇ`{õ'ð“:Æ|:OÑdþ›º»«¿€ŸÔ1æ“y†¤òßÕ9Ø\ýü¢Î1Ê$‘?SaoõûÿEc>•Ç+ÿŸ}ú@®-‡a ZÞÿ¦§ÊãŸìn س5¨—è a>ÿè íÒXHü$ŒÑÇÿ¤]«õ~n¾èÛ€NÒ.‰Åú@G [ôé?DGé–ÀZí}¡³„+úò¢£´K`©î¼ÑYÂ}øOÐYº%¯RsÝãè0ቾû'è,Ý’W©¹îqt˜°DŸýSt˜n©«ÓÛö:M¢þ9ºL·ÄÕim{Ý&üÐ7ÿ¦[Úªt–=Žv蓉ŽÓ,iU:ËžG× 7ôÅ¿DÇi–²"a¯ ó„úàß ó4KX¾®×Ð} +-}îïÐ}š%¬D_Ö«èBᄾö·è@½’U¢-ëet¡0Bû{t¡fÉ*ÐõºQø oý:Q¯T­×Õô:RØ OýºQ¯D­×Ôô&ºR˜ ýºR¯4­ÖSô>ºSx ïüºR¯$­ÖR´Ý),Ðg~Ý©UŠk Z‚.è#?ŒÕ+Ekuô,B§Šùè?Ž.Õ*=K5ä,C·Šñè?NÕ+=+ék¢cÅpôŸBÇj•œ…ô1Kѹb6ú¾O¡cµJÍBò˜µè\1}Þ'ѹZ%fuÊrt°Œ>î³è^­³Œ:e=ºXÌEßöit°NIYE\RNcѧ}]¬URцԠ›ÅPôa_A7ë”’5´Uèj1}×WÐÍ:%d iGºZŒDŸõ5tµNéXAYQ‰îÑG}­S:VPV”¢ÃÅ<ôM_Ewk”Š„Åèr1}Ò—Ñá:¥â}º†rtº†>èètñ6]Ât¼˜…¾çètÒð6YÂt¼…>ç[èx’ð&UÀ&t¾„>æ{èz’ð&UÀ.t¿ƒ>å»è~}ðQ¿FtÁ˜‚¾ä»è~}ðQ¿FtÁ‚>äûè‚}ÒïM½^tÃ>ãtÂ>éw‡¦^3:bL@_qºa›Ô»A¯]1 ¸±Oê]§h 3Æöè.Bgl“x—)Ò!è±9ú€«ÐÛ¤Ýe‚tºdì¾ß2tÈ6IwQ}8 2¶FŸoºd›¤»¨>‡n£·ݲKÂ]SÞ E׌mѧ[ŠŽÙ&á.©Î£sÆ®èË­E×ì’n—Tg£Ñ=cOôÝ£svI·+ª«áè ±%úlËÑA›¤ÚÅÕ@ ÑG[.Ú%ÕΫm¶ºil‡>Yºi“D;¯¶Ù"許úbè¦MÒì´Òdë ³Æ^è{Õ «6I²³*‹-„Î[¡ÏU„ÎÚ$ÉNª ¶:ll„>Vºk“$;©2ØZè²± úTuè²=ìœÂ^Ë¡ÛÆ&èC¢Ó6I°Sêr-ˆŽ{ ïT‰nÛ#½N©Ëµ :nl>S):nä:£¬Öšè¼±úHÅè¼=R넪X«¢ûÆòèU£ûöH­ãªZ­‹.‹£TŽÜ#µŽ«jµ0:q,>ÏtâiuXQªµÑ‘ceôu6 ÷H«£jJ­Ž®ë¢o³¹ERUSjutåX}š=èÊ-Rê ’P ;Ç¢èÃìBwn‘PÇTtÚ:–DŸe:t‹„:¤"Ó&èÔ± ú(ûÐ¥[$Ô!™vA·ŽåÐ'Ù‰nÝ!™)È´:v,†>ÈVtìÉtÀýH[¡sÇRèslFçîJÜ´ºw,„>Æntï‰ô^Á)m†.Ë O±]¼A½WpI»¡“Ç"èCÐÉ;¤Ñ[§´ºy¬¾C¼C½SqIû¡«Ç +-è+DÐѤÐ;%—´:{ðèdÐÕ;¤Ðk5—´!:|Ðè „ÐÙ;¤Ðk5—´#º|°èûÃÐá$Ðk5‡´%:}èëãÐå¤ÏKE‡´':~`èÓCÑñ$Ï+U‡´'º~@èÃcÑõ$Ï+U‡´): 賃Ñù$Ï Uw´-z€ÐG‡£ÐKœÊîh[ôÑŽ>9½@ƒÄyªîŽöEoÍèƒ[=AƒÄyªîŽ6F­ès[=‚^Ú²…ÐSè¥Ìc•W´=zŒ£Ol)ôr óXåí^#Äè[ ½†\º¦…ÑÓ¨%Éå74½M”¡Oieô6jIòCù MBEèCZ=Ž\’|SC³ÐûDúŠGÏ£–"ßÔŸÐ0ô@q}BË£RK‘oêOhz¡¸‰> õÑ ©%È¿'4½QÜBŸÏèÔÒ㊚‡^)®£og ôHjéñÅ DÏч³ z&µôø›â‚f¢—Š+è«Ù=”XrüMq@CÑSÅyôÍìƒ^J,5þ&¹ ¡è­â$ú`vBo¥–h.h,z®8ƒ¾–­Ðc©¥Æš š‹Þ+£Oe7ô^b‰ñ‡æ€&£‹cè;Ù=˜Xbü¡9 ÑèÉâúJöC/&–¿‰h6z´x‹>‘-Ñ£‰%Å/ªŽž-^£ïcOôjbIñ‹ê€¦£w‹èãؽ›XR|QÝzºx†¾Œ}ÑËi¥ÄÕù8 ·‹‡è³Ø½VB|‘Ýz½ø‰¾‰­Ñã‰%Äÿtdž/¾¡bsô|b ñIw?.èãoô5lP+>éÎÇ=aüFŸÂô„ZéðIw>>è ã }Ðj%Ã'áýø GŒOôÌ@¯¨• +-ù(Eèã#·\„žQ+>òSªÐ;FN¹½£V*|ä«”¡‡´GÀôZ©ð‘¿R‡^Ò=ÿ ô”R‰¿R‰ÞÒ=þ$ô–RiÏRŠÓ=ý(ô˜ZißR‰Ó½ü,ôšZiïRŠ^Ó½û4ôžRI =;ôœ®èݧ¡÷”Jíñø¡÷ôD¯>=¨T +-ˆ¯Ç½§'zõqèAµì ¨ÏÇ=¨#zóèI¥Ü¨Ç½¨#zóèI¥Ü¨Ç½¨!zò‰èM¥Ü¨Ç½¨!zò‰èM¥Ü¨Ç½¨!zò‘èQ•òü¨EOjˆž|$zT)ïçëÇ=©!zò‘èQ¥¼Ÿ¯?;ô¤~èÅg¢W•ò~¾þxìГú¡ŠžUÉúõúÓñCoê‡^|(zV%ë×ëOǽ©zñ¡èY•òø(Eoê‡^|(zV)çÇwzS?ôâSÑ»*¿½ãtìУú¡ŸŠÞUÉøí§c‡Õ½øTô®JÆoï8;ô¨~èŧ¢wU2~{ÇéØ¡GõC/>½«’ñÛ;NÇ=ªzñ±èa…òò¨D¯ê‡^|,zX%Û—÷œŽzU;ôàsÑË*Ù¾¼çtÜЫڡŸ‹^VÉöå=§ã†^Õ=ø`ô´B®ï9;ô¬vèÁ£§r}xÏáØ¡gµC>=­ëÃ{Ç=«zðÁèi…òî(DÏj‡|0zZ%ÓwwŽzV;ôà“ÑÛ +-y>»ëpÜлڡŸŒÞVÈóÙ]‡ã†ÞÕ=ødô¶BžÏî:7ô®vèÁ'£·ò|v×ḡwµC>½­ç³»Ç ½«zðÑèqu,Ï"Bïj‡|4z\!ÇG÷ŽzX;ôà£Ñã +-9>ºïpÌÐÃÚ¡WÈñÑ}‡c†Ö ½÷lôºBŽî;3ô°nè½g£×r|tßᘡ‡uCï==¯NÞeèaÝÐ{GÏ«cøæ¾³qC/ë†Þ{8z^<9ÊÐ˺¡÷ŽžWÈïɇã…^Ö ½÷pô¼B~Oî</ô²n轇£çò{rçáx¡—uCï=½¯N^UèeÝÐ{OGï«c÷âγ1COë†Þ{:z_»wžzZ7ôÞÓÑûêؽ¸ólÌÐÓº¡÷žŽÞWÇîÅgc†žÖ ½÷tô¾:ypT¡§uCï==°NÞEèiÝÐ{G¬“÷FzZ7ôÞãÑ똽·÷l¼ÐÛþÇ>½ 9rA5ÝÿÒ4‰ÅÏì ЕÏîðwƒ,jC÷~<:pNÙ½ŸMºmº÷ãÑsÊîýìlºÐmÛнœSvïggÓ…nÛ†îýxtàœ²{?;›.tÛ6tïç£ Çx®†ÐmÛнŸ.Óu­?%ˆnÛ†îý|tá¯Õ:nº÷óÑ…sª®ýôlªÐqÛнŸ.œSuí§gS…ŽÛ†îý|tᜪk?=›*tÜ6tïç£ çT]ûéÙT¡ã¶¡{?]8§êÚOϦ +-· Ý»8¦þX ¡ã¶¡{ ÇÔ«!tÜ6tïtâ˜úc5„Ž[‡þ|tᘦc?=š.tÝ:tðç£ Ç4ûéÑt¡ëö¡‹?8¦üV¡ëö¡‹?8§èÖÏϦ ]·üéè¾9E·~~6M躅èäGŽ©>UsèºèæOG÷©>UsèºèæOG÷©>Us躕èèGç©>Us躕èèGç©>UsèºèêÏF×é9õó£©BçíDW6ºnLÏ©ŸM:o):û£ÑqczNýühªÐy[ÑÝŸŒnÓsêçGS…Î[‹ÿ`tÚ˜žS??š*tÞ^tùç¢ËÆôœúùÑT¡ó£Ó?]6¥æPÿF·Ýþ±è°)5‡ú5²è¼ÕèøOEw©=T£è¼ÝèúEg©=T£è¼åèüÏDW©=T£è¼íèþDG©=T£è¼õè<Ý4¦öP¢óŠ^ÀÑIcZ%FÓ„î+'>Ž.Ór(1š&t_¹ñqtИ–C‰Ñ4¡ûê_Ž|Ý3¦åPb4Mè¾ú7zCçŒi9”Mº¯þƒžÁ³Ð5cZ%FÓ„î«ßÑ;x:fLË¡ÄhšÐ}õ_ô…Ž™Òz§fÑ}õ?ôž„n™Òz§fÑ}õz +-B§Li½S³è¾ú?z ÏA—Li½S³è¾úz A‡Li½S³è¾ú3z OAwL)9ÓF÷Õ_Ðsx:cJÉ™~ƒ0º¯þŠÞÃ3Ðc*ÏÔ4º¯þ†Ä#Ðc*ÏÔ4º¯þŽ^ÄÐ c*ÏÔ4º¯þžÄÐ c*ÏÔ4º¯þ‰ÞÄýÑc*ÏÔ4º¯¾@âöè€1•gjÝW_¡Wqwt¿˜Ž3™Ñ¡ë+ô*îŽîÓq&3š"t`}‰žÅÍÑùb:ÎdFS„¬¯Ñ»¸7º^LÇ™ÌhŠÐõ ô0nŽÓq&3š"t`ý +-½Œ;£ÛÅtœÉŒ¦X¿DOãÆèt1g2£)BÖ¯ÑÛ¸/º\LÇ™ÌhŠÐõ z·E‡‹é8“M:°¾C¯ã®èn1g2£)BÖ·èyÜ-¦ãLf4EèÀú½{¢«ÅtœÉŒ¦X? rKt´˜Ž3™Ñ¡ë'ôBîˆnÓq&3š"t`ýˆžÈ ÑÉb:ÎdFS„¬ŸÑ¹ºXLÇ™ÌhŠÐõz$·C‹é8“M:°^A¯änè^1g2£)BÖKè™Ü +¦ãLf4EèÀz ½“{¡kÅtœÉŒ¦X/¢‡r+t¬˜Ž3™Ñ¡ëUôRî„nÓq&3š"t`½ŒžÊЩb:ÎdFS„¬×Ñ[¹ºTLÇ™ÌhŠÐõ:z+÷A—Šé8“M:°Þ@å6èP1g2£)BÖ;èµÜÝ)¦ãLf4EèÀz =—› 3ÅtœÉŒ¦Xï¡÷rt¥˜Ž3™Ñ¡ëMô`nŽÓq&3š"t`½‰Ì-Бb:ÎdFS„¬wÑ‹¹ºQLÇ™ÌhŠÐõ6z27@'Šé8“M:°ÞGof?ºPLÇ™ÌhŠÐõ>z3ûÑ…b:ÎdFS„¬ èѬGŠé8“M:°® W³Ý'¦ãLf4EèÀº‚^ÍvtŸ˜Ê35î«KèÙ,G物KÑYRZïÔ,º¯ŽÐóÙ‰®Ór(1š&t_¡÷³%¦öP¢óê ½Ÿ•è(1µ‡jWgèý¬DG‰©=T£è¼:Cïg%:JLí¡EçÕ!z@ÑMbjÕ(:¯ÑÚˆnS{¨FÑyuˆÐFt“˜ÚC5ŠÎ«Cô€6¢›¤Ôꪳè¼:Dh#ºIJó¥DçÕ)zA ÑIRš/Õ :¯NÑ ZˆN’Ò|©ÑyuŠ^ÐBt’”æK5ˆÎ«Sô‚ö¡‹ÄôœúùÑT¡óê½ }è"1Õ§j]W§èíC‰©>Usèº:FOh:HLõ©šC×Õ1zBëÐAbªOÕº®ŽÑZ‡S}ªæÐuuŒžÐ:t˜êS5‡®«cô„Ö¡ƒÄTŸª9t]£'´$¦úTÍ¡ëê=¡uè 1Õ§j]WÇè ­CIi¿USèº:FOhºGLý±BÇÕ1zBÛÐ=bêÕ:®ŽÑÚ†îS¬†ÐquŒžÐ6t˜úc5„Ž«cô„¶¡{ÄÔ«!t\£'´ Ý#¦þX ¡ãê½ uè 1õÇjW§è­C‰©?VCè¸:E/h:HLý±BÇÕ)zAÛÐ=r¼V3è¶:E/hºGL×µî:ˆn«Sô‚¶¡{Äx®†ÐmuˆÐ:tÏÕº­ÑZ‡ã¹B·Õ!z@ëÐAbt‘/Öº¬NÐëÙ‡.’ãÅšB—Õz< ÑIr¼XSè²:@g!:IŽk +-]V×ÑÛÙˆnSx²O¡Ãê:z; ÑIr¼Ycè°ºŽÞÎBt’oÖ:¬.£§³Ý$Ç›5†«ËèélD7Éñf¡Ãê*z9+ÑQr¼Ycè°ºˆÎNt•œÆ›yÝUÑÃY‰ŽäÑCwÕ5ônv¢«äxµæÐ]u ½›è*9^­9tW]BÏf):KŽWkÝUWЫيî’ãÕšCwÕôj–¢³y¶æÐYu=š­è.Až­9tV½ÞÌZt˜ ÏÖ:«ÞGof-:LŽwkUo£'³]&Ç»5ˆÎªwÑ‹Ù‹.äáDWÕ›èÁ,F§ òp ¢«êMô`£Óy¸ÑUõz/›Ñm‚<\ƒèªz =—Õè8Aµ‡»ø:ªÞA¯e5:N§kUo Ç²]'ÈÓ5‰Žª×Ñ[YŽÎäéšDGÕëè­,Gç òtM¢£êeôT–£ó$y»&ÑMõ*z)ÛÑ}’¼]“è¦z=”õè@IÞ®ItS½†ÞÉ~t¡ ×(º©^BÏäèDAÕÇ»ýytR½‚^É Ð‰’¼^£è¤z=’; %y½FÑIõ3z#·@GJòz¢“êGôDî®”Ô}½`]T?¡rt¥$ï×,º¨~@ä&èLIÞ¯YtQ}ÞÇ]Ð’¼_³è¢ú=Û C%µßï/˜FÕwèuÜ*ÊÐ,:¨¾Aã>èRQ>€fÑAõkô6n„N•ä d·óûô‚·ŽQp¼ÿMϱýdI­&©ª 2–p³jCzÐ8¤Oc%z«J)WLïGôe¬DoU* ò ƒé=ã€>Œ¥è±J%Aža0½g<§ïb-z­RIoLïOé³XŒž«TäÓsÆ3ú*£ç*•¿òƒé9ã }«Ñ{•J„_ùˆÁôœñ‘¾‰åèÁJ%¯¼Ä`zÎø@ŸÄzôb¥á·ÊóÙ^3é‹X^¬V*üVy?ûÑkÆ} Ò“•J†?ê®gGzÍxOßÊôf¥’áºëÙ‘^3ÞÑç°$=Z©dø«î|6¤ÇŒ·ô5,IV+þª»Ÿ é1ã } kÒ«ÕJ‡¿êîgCzÌxCÚôj¥â?U׳%=f¼Ò·°(=[©„xQu>;Ò[Æ+} kÒ«ÕJ‰U÷³#½eü£OaQz¶Z)ñ¢ê~v¤·Œô),JÏV+%þ©:  é)ã…¾„EéÙj¥Å«šûÙ’ž2^èKX”ž­VZ¼ª¹Ÿ-é)ã…¾„EéÙj¥Å«šûÙ’ž2^èKX“^­Xb¼QsA;ÒKÆ } kÒ«KŒ7j.hGzÉx¡/aMzµZ©ñVÅýìI/ÿèSX’­Vj¼Sq@[ÒCÆ?úV¤7+–ïT\ЖôñJß‚ôdŒ㊠ڒ2^é[Xž¬Xr¼WqB;Ò;Æú–£+– Æ_ОôŽñ†>†åèÁŠ%ȃñ´'½c¼¥¯a5z¯b òhü mIÏoékXŒž«ZŠ<C[Ò3Æ;ú֢ת–$†ŸÐžôŒñž¾‡¥è±Š%ÉG£OhOzÅx b!zªjiòÑèÚ“^1èƒXˆžªZš|4ú†ö¤WŒGú"Ö¡—ª–&OŒ>¢-éã}«Ð;•K•'Ñžôˆñ‘¾‰E虪¥Ê3cohSzÄøHßÄ"ôLÕR婱G´'½a<¡b z¤rÉòÔØ+Ú“Þ0žÑW±½Q¹tyjèmJoÏè«XÞ¨ZºyD›ÒÆSú,æ§*—0F^Ѧô„ñœ¾‹ééÊ%Ì‘W´)=a<§ïbzz r)sdàmJ/ôaLNÏS.i»¢]é㈾Œ¹éuÊ%Í¡qW´+½`Ñ—15=N½´96îŽ6¥ŒCú4f¦·©—6ÇÆÝѦô€qHŸÆÌô6õçÄ°;Ú”Þ/ŽéÛ˜—^¦^êœuG»ÒûÅ1}óÒËÔK3£îhWz¿8¦oc^z™z©sjÔ!mJÏ'ôqÌJïÒ }N :¤]éùâ„>ŽYé]ê¥Ï¹1w´-=_œÑ×1'½Jƒº0æ’v¥×‹3ú:æ¤WiB†Ò¶ôzqF_Çœô*õRèÒˆCÚ–/Néó˜‘Þ¤A]qIÛÒãÅ)}3Ò›4H¢K#.i[z¼8¥ÏcFz“itmÀ%mKoçô}ÌG/Ò ‘>áç‘ö¥·‹sú>æ£iHŸñóJÛÒÓÅ9}ÓуtH¥Ïøy¥méé✾éèA:$Óg ¨´+=]\Ð2½Gƒdúœö¤—‹ ú@&£çèNŸ3¢ÓžôrqAÈdôÒé“F„Ú’..虋^£CJ}Ö˜RÒÃÅ} sÑktH©ÏSjCz¸¸¢/d&z‹IõicRíGïWô…ÌDoÑ"­>mPªíèÝ⊾™è-:¤ÕŒŠµ=[\Ñ2=E‹Äú‚Q±6£g‹+úB&¢§h‘X_1ªÖ^ôjqE_È<ô-’ëKÆåÚ‰^-.陆¢Er}ɸ\;Ñ«Å%}"³Ð;ôH¯¯×k#z´¸¤Odz‡ ö5{íC—ô‰LBÏÐ#žjd±]èÍâ’>‘Ièz¤ØW,¶ ½Y\Ò'2 =Cû²‘É6¡'‹KúDæ Wè‘f_7¶ÙôdqIŸÈô +-=ÒìÆFÛ^,.陂¡I¢}ÃØh;ЋÅ%}"SÐ#4Iµï\íþô`qIŸÈ ôM’í[Fg»==X\Ò'2½A“dû–ÑÙnO—ô‰L@OÐ%á¾gx·›Ó{Å%}"Ð4I¸oîÞô^qE_Èô]Rî»Æ—»5=W\Ñ2=A—”û®ñånMÏWô…xz.i÷}íîK¯Wô…xz.i÷}íîK¯Wô…pz€6‰÷ñnKWô…pz€6©÷%ñîJôpz€6É÷#5ùîIoôpz€6É÷#5ùîIoôhºŸü™¢~w¤§Š ú@4Ý¿MþPUÀÒSÅ} ˜Îß'ªªàýè¥âœ¾M÷ï“„?UVðvôRqNߦó÷Iß«kx3z¨8§ïÓùû¤áÏÕ5¼=TœÓ÷aéúRq€Âˆ·¢wŠSú<0¿O*ŽPYñNôNqJŸ‡¥ë7JÆ!*3Þˆž)Néó°týFé8DiÆûÐ3Å}–®ß(!© yz¥8£¯ÃÒõ%ä µ!ïB¯gôuP:~§¤¥¸ä=è‘â„>K×o””ÃT§¼=RœÐÇAéøÒrœê–w 7Šcú6,]¿SbŽSÞòôFqLߥãwJÍ‘êk.OOÇômP:~§Ô©¾æòôDqHŸ¥ã·JÏ¡r.N/‡ôiP:~§ô«£çÚôBqD_¥ã·JÐÁ:‚.MôaXº~«¬%èÊô@q@¥ã·JÒáz’®KïÏé»°týVI:\OÒué}â9}”Žß+QÇkjº*=O<¥ÏÂÒõ[%j…®ªkÒëÄ3ú*,]¿WªV誺&½N<£¯ÂÒõ{%k‰¶¬+ÒãÄú(,]¿WºÖèëº =N|¤oÓù{%l‘Æ°ËÑÛÄGú&,]¿WÊVé,»½M| OÓù{¥l™Î´‹ÑÓÄ#}˜Îß,mË´¦]‹ž&èƒÐtÿ^i[¨7îJô2ñ@¦ó7KÜB½qW¢—‰÷ô=`:·ä­Ô\wz˜xGŸƒ¦û7KÞZÝ}W¡w‰·ô5hº·ô­ÕÝwz—xC§è–ÀÅÚ¯Aϯô-pz€n)\­¿ðô,ñJߧè–Äå@âèUâ} +-œ [×ç§W‰ú8=@»Dn "OOÿчàéÚ¥rRyrz“øKߧh—Ì-Læ¹éMâ}дKæ¦óÔô$ñ›¾‚ è Ú%tzbz’ø•»üMoÐ.¡»¨ÒóÒ‹D®ò7½A¿¤îÂJOK/9Êÿíx†iÝǵž”$ôLAÐ/­¹ØsÒ{lOÀô@j7‚±§¤÷ØÞz…~©ÝJæžžcszþ9è€ôîE{OG¯±7½þô +-@‚7³Ág£×Øšz Á»Ùâ“ÑcìLo? =ƒäÝpñ¹è16¦§Ÿ„žAHó~ºùLôûÒËÏBï è找7=Ŷôð³Ð;ºyªoNO±+½û,ô„Žžì›ÓKlJÏ> =¡£ÿ/Ý÷¦‡Ø“^}zBGÿM7 tôiè!ö¤WŸ†‚ÐÑÿÐ}z‡-éѧ¡‡ tô¿tCWŸ„žaKzôYè ]ý/]ÁÐÕ'¡gØ‘Þ|zCWÿÎ`èêsÐ+ìHo> ½ƒ¡«¿Ð} +-z„ éÉg¡w@tötCWŸ‚aCzòYè ]ý•.èì3ÐìG/> ½¢³¿Ò%Ý}z‚ýèÅ'¡g@tö·t DgŸ€ž`;zðYèý-ÝBÑÝ=½Àvôà“Ð3(ºû;:†¢»sz€Ýè½'¡gPt÷÷t Ewçô»Ñ{OBÏ èîtEw×tÿÝè½ç WPt÷Gº£Ãc:ÿnôÞSÐ#0:ü#݃Ñá17zïè þ#]„Ñá-]7zïè þ#]ÄÑå)7zï è ]þ ÄÑå%Ý~7zoO/àèòÏè&Ž./éö»Ñ{{zG—JGqtyH§ßÞ›Ó8ºüsº +-¤Ó;ºünôÞšîéôtH§gþÏ.}XÉuCATþQëPZ’kÆ| žA…зõðÝèÞ˜žÒÓ?£wôôŒ¾ÝÓóCzúgô.’Þ^Ñ»w£{[z}HOÿœ^FÒÛ#zöntoJ/éíŸÓËPz|C¯Þî-éí)=þ zIooèջѽ%½½¤·EoCéñ =z7º7¤§§ôø/éq(=¾ 7ïF÷vôò”ÿ5½Ž¥×ôäÝèÞŒÞÒë¿¡ç¡ôø€ž¼Ý›ÑÃSzüwô>–^=½x7º·¢w·ôúoé,½þrzðntoDÏnéõßÓ azþÕôÞÝèÞ†^Óó¿§Âôü«é½»Ñ½ ½º¥×?Bo„éùÓs·£ƒ zsLÏ„ÞHÓû¯¥×nGôäšÞÿ=’¦÷_JÝŽ¾ž^\Óû£WÒôþKé±ÛÑÁ—Óƒs:ÀAz&Mï¿’Þº|9=¸¦÷?JïÄé é©ÛÑÁWÓ{s:Àaz(NXG/ÝŽ¾˜ž›ÓŽÓKyºÀ2zèvtðµôÚž.p‚žŠÓ–ÑC·£ƒ/¥Çöt3ôVž.°ŠÞ¹|)=¶§ œ¢ÇòtEôÌíèà+é­=]à½V:Ázåvtð…ôÔè'é¹Ð –Ð#·£ƒ¯£—@'8Kïn°‚Þ¸|=tºÁiz°t‚ôÆíèà«è#Ð ÎÓ‹E , 'îG_DÏnpž,Ý`>½p?ºøzåtƒ+ôf!èÓéûÑÅ—Ð#‡ #\¢G AG˜MïÛ.¾‚Þ8á½Z ºÂdzÞ~tñôÄ1è +-éÙbÐæÒëö£‹Ï§ŽAW¸J0—^·]|:=p:Ãez¸t…©ô¸ýèâÓécЮÓË¡3̤·íGŸMp‡Þ.a"=m?ºødzÞ t†[ôxAè óèeûÑÅçÒë¡3ܣ׋Bw˜FÛ.>•7 +-Ýá&=_ºÃ4zØvtð™ô¶QèwéýÂÐ!fÑ»¶£ƒO¤§ C‡¸M†1‰žµ|½l:Ä}zÁ0tˆIô¬íèàÓèaãÐ%І¡CÌ¡WmGŸEï‡.1‚Þ0]b +-=j?ºø$zÖ8t‰!ôˆqè3èMûÑÅçЫơKŒ¡W D§˜@OÚ.>…5]b½c :ÅxzÑ~tñô¦èÃè!Ñ)†Óƒö£‹O ' D§G/‰n1šÞ³]|<½h$ºÅ@zÊHt‹ÁôœýèâÃéA#Ñ-FÒ[†¢cŒ¥×ìGM1”3c(=f?ºø`zÎPtŒ±ôš±è#é-ûÑÅÇÒkÆ¢k ¦çŒE×HOÙ.>”3]c8=h,ºÆ8zÉ~tñ‘ô–±èãéEƒÑ9†ÑCö£‹¤§ Fç˜@OŒÎ1ŠÞ±]|½d0:Ç zÓhtAôŒýèâÃè!£Ñ=¦Ð£F£{Œ¡WìGEïî1‡^5d=b?ºø zÆhtYô®áè #è ûÑÅÇÐ+†£ƒL£‡ GAoØŽ>„1d½l<ºÈzÂvtðô†ñè"éiãÑEîÓ ¶£ƒ 'ŒG™IoNr›°ü>½`@:ÉTzÜ€t’»ô~ÝèÞ÷éÒI&Óó¤“ܤçëF÷¾MN2›Þ7"Ýä½^7º÷]z¿ˆt“éôÀé&·èñºÑ½oÒóE¤›Ì§IG¹Co×î}^/$e=qH:Êz»ftî[ôx!é(Kè‘CÒQnÐÓ5£sß¡· IGYC¯“®r^®û=]LºÊ"zæ˜t•ËôpÍèÜ×éåbÒUVÑ;¥³\¥wkFç¾L”βŒ:(å"=[/ºöez¸ t–…ôÔAé,éÙZѱ¯Ò»¥³¬¤·ŽJw¹F¯ÖŠŽ}‘ž-*Ýe)=vTºË%z´VtìkôjQé.kéµÃÒa®Ð›µ¢c_¢G K‡YLÏ–sž¬û +-½YX:Ìrzð°t˜ ôdèÔWèÍÂÒaÖӋǥ˜§kD§¾@O—.èÉãÒeNÓƒ5¢SŸ¦ L§!ôèé4'é¹Ñ©ÏÒ{¦ÓzõÈt›sôZèÔ'é¹"Óm={dºÍ9z­6tè“ô\‘é6ŠÞ=4ç=V:ô9z­ÐtFšŽs†Þª ú=Vh:¤§MÇ9CoÕ„Î|Š+4GÒÛǦ뜠§jBg>Co›®CéñcÓuŽÓK5¡3Ÿ §ŠM×ÁôüÁé]è=Q:ñz£øt¡(t‡t¢ôDåéÀGèЉÂÐ!ЉÞÓ •§ 'J@' +-D§H@'zO/Tîûž^((Ý"Ýè-=Pq:ï{z¡ t£PtŒt¤7ô<Åé¼ïè}RБ‚Ñ9RБÞÐó”¦ã¾£÷IAGŠF÷ÈAWzM¯SšŽû†ž'])$]é5½Neºíkzt¥€t’$t¦—ô8ué²/éq’Й"ÒM²Ð^ÑÛ”¥Ã¾¤ÇÉBw +-IGÉBwzEoS•îúŠÞ& Ý)(% ê9½LQ:ë zš4t¨¨t—§—ÉC— +-L§ID§zFïRNú”&*2Ý&Ýê½K=ºè3z—Lt«ÐtœLt«gô.ÕèžÏè]2Ñ­‚ÓyRѱÓ«£s>¡gIEÇŠN÷ÉE×zL¯R‹®ù˜^%]+<(]ë1½J%ºåcz•\t­t¢dt®‡ô(uè’éQ’ѹ2вѽÑ›”¡C>¤GIFçÊAWÊF÷zDoR…îøˆÞ$Ý+ )ì=I ºâz’tt°4t¨tt°ô$è†èIÒÑÁòÐ¥òÑÅ~Ò‹ > 'ÉGKD§JH'ûA’Ÿ.øƒ$!,+!ì=Hvºßz„t²\t­”t´ïô¹ézßé=2ÒͲѽRÒѾÓ{d¦Û}§÷HIGKGËIWûJ¯‘˜N÷ž#']-!,']í+½FZ:Ü7zŽœtµŒt³¬t·/ôYén_è1²ÒÝRÒѲÒݾÐc䤫}¡ÇÈJwKJgKK‡ûLo‘‘nö™Þ"-.-.-î3½E>ºØgz‹´t¸¼t¹ÄtºOôÙè^Ÿè)ÓéÓéÓé>ÑSä¢k}¢§HL§KMÇËL·ûK/‘‰nõ—^"3Ý.7]/5ï/½DºÔ_z‰Ìt»ìt¿Üt½?ôYèNè!rÓõÒÓ“Óù~Ó;ä +ý¦wHNç+@'LNçûMïnô›Þ!9¯Ý0=ðƒž!>]胞!;ݯ]1=ðƒž!:Ý烞!=°1?]ðz…ØtÿéòÓËÐ! Ð ÿ£GˆL·ù¡°²Ýð½A\ºÌ/zƒ +-tÃJtËtÄ_ôQé.¿è JÐKÑ1kÐÿÙ!ÓUþÙaÆЋÑ9‹ÐwÈGt“]e±´ +-Ýq‡üAÙMÑëÑEËÐ!wÉotdݱ"Ý´Ž]2’]£ +-]²$µ]2Œ¢ +-\²*µ’]2†Ý¡ +-[²0¶”]2€¡ +-Z²4]¶˜RÛÊ)‹Ói‹Ù)­½2ey:n5;%´Ç/¦ì@ç-g§Töòe¸”MèÀõì”Äž½ –² ]¸¢Ýr½½yªe#:qI»åb{ð:PË^täšvË•öÚu˜–íèÌEí–Ëì©ë -;Ò¡«Ú-×Ø;×!Z6¥S—µ[.°G®´lK·.lÇœm/\Èú˜éØ•í˜Síy Y³7»´sž½m!«c¶§ƒ×¶cN²‡-dqÌmz²s†½j!kcn¿èæåíšÃíI Ysû «×·kŽµ÷¬deÍí½ƒ]sœu[6“[XsûL‡oa×dYɲšÛ¿ìÔ ²ÝÆDÁðþ7í°)‰"ù‡74pzÈ\зª~WŸþ ®9‚WÜÉ]×äõñášoó„;¹éš|¬>ÿ)\ó=Þo'÷\“ÏÔ÷?‡s¾Áãmå–sò¹:'qÎy¸­ÜpN¾VGà(Îù +-¯¶•ëÏÉ·êœÅ9Ÿæɶrù9yDƒÓ8çS<×V.>'ªƒpç|œ·Úʵçä uäœñN[¹òœ<§Î‘Üói+ž“§Õi8”{~Ãíå²{òŠ:§rϯx½\uO^Tâ\îù/³—kîÉêHœÌ=?âUörÅ=ySŠ³¹çï¼È^Æß“êXÎ=á9ö2üžŒQãxîùO±—Á÷dœ:ŒmGý3¯ó {zOƪÃÁ†6¤þ•Wy‚½ ¼'ÃÕéà‡ÃzøïïgØA¹BþvðAþõ= :(W©ÂO‡ôÐßÞ׃r¥:"ü⼃ž÷Ç›{ÿ \® ¿9ë gýíÞ=(·¨cÂÎ9è9zˆ÷Êmê ð‘#zÄOžäƒr¯:*|b÷ƒîþÇyõ ê°ð¹ºñ¯é¥ƒR©ã—ö<èžu°çJª ßÙî ÛýÐéž<(½:2<`«{nõ3ýÕ¡á1»Üs—ÿà‡×V‡V·Ã=wøþñÞøP©sÃs?çâŸÏ¯F­7«ƒÃÓV>æÊßÎoƯ7©£ÃKV=åªßÍ®Ý%.U‡‡×-xÈ?™Ü¹Q WÇXM½Z¼©°–z³x[!`%õb1@"`õ^1D#`õZ1H$` õV1L%`õR1P&`~õN1T'`võJ1X(`nõF1\)`fõBq:TÀ¼ê}âu¬€YÕëÄEê`sª·‰ËÔÑ&T—ªã̦^%.V ˜K½I\®Ž0“z‘¸A2`õq‹:fÀ,ê5â&uЀ9Ô[Ämê¨3¨—ˆÕazõq«:n@­^!nVhÕÄíêÈ¥zÔ¡:õþШs4êí!SG(ÔËC¨p¿zwHÕñîV¯±:€À½êÍ!WG¸S½8L !pŸzo˜BCà.õÚ0‹:‰Àê¥a"uëÕ;ÃTê8W«W†ÉÔ®Uo Ó©# \©^&T‡¸N½/L©Ž%p•z]˜ULà +-õ²0±:œÀxõ®0µ:žÀhõª0¹: ÀXõ¦0½:¢ÀHõ¢°‚:¥À(õš°ˆ:¨Àõ–°Œ:ªÀõ’°:¬Àûêa)u\wÕ+ÂjêÄ宅ա^WïKªc ¼ª^UxM½,«Ž.ðŠz9XY^àYõj°¸:ÀÀsêÍ`yu„gÔ‹Áê«÷‚=Ô9SoÛ¨£ <¢^ +-6R‡ø^½l¥Ž3ðz$ØNià+õB°¡:ÔÀçê}`Ku¬ÏÔëÀ®êd©—ÕáþTï[«ã ü®^6WøE=  9ðS½¡Ž9ð·z 8Dtàÿê)à uأϭê¸õ +-pš:ñp¶z8Pz8YÝŽTÇÎU·ŸSÕɇ3ÕÍç`uøáDuï9[8MÝyŽWWÎR7Ì>ܨî;üOÝ8EÝuøK]8CÝtø©nì¯n9ü¢.ì®î8ü¦®ì­n8ü©nì«n7|¨.ìªî6|¦îì¨î5|¡®ì§n5|­nì¥n4|«. ì¤î3<¢î ì¢î2<¨® +-ì¡n2<®n ¬¯n1<¥. ¬®î0<«î ¬¬î/¼ ® ¬«n/¼¦n¬©n.¼¬.¬¨î-¼£î¬¦î,¼©®¬¥n,¼¯n¬£n+ Q VQwF©»+¨{ +-Õu‚éÕ%…ÁêJÁÜê†Âxu«`^u;áu±`Vu7á*u·`Fu/áBu½`:u)ábuÅ`.u#ázuË`uáuÑ`uá.u×`uáNuß VwnVWZuá~uë S·uó Q72uù P×Ruánuç VwîT÷ &P×nS— &QWîQ7 æQ·®W· æR7®U7 ¦S—.T× ¦T®Rw fUw®P÷ +-fV÷F«;³«; +-#Õ}‚Ô5…aê2Á"êªÂu“`u[á}u‹`-ucá=uƒ`=ukáuu{`Musá5us`Yuyáum`iuáYug`uu‡áu_`uáQuW`u—áuO`'uŸá;uG`7u§á+u?`Gu¯á3u7`Wu·á#u/`kuÁáWu#`uË᧺ p†ºéðCÝ8GÝv°ùp¯ºñœ®nœ§n='«Ó‡ª«Ï™êÜÃÉêþsž:ópºz8KwÀîsŸ:ëÀ_ê1àuÊ«ÝÕ ~W¯;«Ó |¨žöTçø\½ì§Î4ðz$ØIfàõR°‹:ÉÀ£êµ`uˆçÔ›ÁÚêüÏ«wƒeÕÑ^U¯+ªS ¼£^Sx_½#¬£Î*0H=&¬ N)0R½(Ì®N(0\=+Ì«Î&pz[˜RKàJõÂ0›:‘Àåê™au›Ôcà êwª‡X@à~õîЩ³Dêñ¡P§HÕĽê¼¨‡ˆ»ÔI¦QÏ׫3L¦%®T§ ˜R=M\£Î0±z ­N0½z¦§Î°ˆz¬¡N°–z³xG`Iõtñš:7ÀÂêãYub€õÕ;Æ£ê¤Û¨çŒïÕvS¯Ÿ«³lª7>R§Ø[½qü[àõÔñCà$õ⮾?p¢zùNUß8X=€ç©/`úoRßà§zwWßàOõ2+Àê‰ÜK}M€GÔ[¹‡úŠO©Gseõí^TÏçzꋼ­ÒUÔw¨žÔ¹Õ׸D=®3ªopµzggQßàFõä¶þËN ÛkðáqJ“úh] Qßw¾º8ÀêÏP7XMýå¯Ô]–VOú=uI€ÔÏW—ØYýðÇêP‡©·~¯®p¾úô^1z€_3yæ¹—☠+-endstream endobj 85 0 obj [/Indexed 41 0 R 1 204 0 R] endobj 203 0 obj <>/Filter/FlateDecode/Height 1534/Intent/RelativeColorimetric/Length 418298/Name/X/Subtype/Image/Type/XObject/Width 1526>>stream +-H‰ì×gw׆aŠP@Ý )65º@4ŠlÇ1Á¤‘Äé!½÷Þ~xæm»ÍÞSŽŽ<*ÏýÑš9ËK:ëzvì@!„B!„B!„B!„B!„B¡q´³WCÿß"„ê^?áq Bh“µ>Ìã „ÐÆiéK ý»@¡-ÛؤÞ4¶ú·ƒB[¤5Ã>zà!„>¶P~¬W`èßBm’6–ôk½Cÿ6Bhö~ÖïîØúù?ôï!„6Pã¾+îýÿCÿ¦BhØÖˆ}W´_ëؘŽìG¡´‘¹îýéÀ~„ÚÑæ}?ëÛ´þÄHxFÁè?B­g½¹ï%}3åŸliÄCЙØÚVõã¾›õ£ñÞ¯îG ›þ !´åëã};ö˜ß3–:vþûØ?ôß +-!„ÖTwï[´o„>öÞ1ÔzZüoÃô#„¶RÁoâ¾H}›ñc¨í@þíúï‡Bë +-~™û<öEèk`ª­}U­5ßü(êßh?èGmÖº_ô>§}–ú&ä÷%íï\úfÓÈ€œþ]í‡ü¡ÍU'ðKÞ7iŸ¡¾€|lødCSSM?-Þ‚ü ¨óŸÑ¿›ý!´)ê ~ÎûTû:öuèóÄO%Mw,}/ê' Ì ÿ‚ý !´yê~ƒ÷)÷ëëÌx?Pî`Uà Ǡ~ +-þðo±¿ýCÿ­BÛ½vñ³àæ}Vû¬õuæSÓ}‡z¿™?É Èúëßj‰~ÈÚ@~aßg¸µ­O¯ó~8êHçâ÷êÇ ½ÿ#ý#üÛìïCÿÐ{„Ðv«‡ø¥Ÿ™÷!÷ö¡õô òßGÃŽu.z­~ â#€ÿ@ÿÿ&û3ô·É?ôW!´}j¿ ~fß׸ßï¹O±©Oy=ìx¢Óc߀Úø÷øïOñÏØß‘~È ÞâGà‡ÞïõÞ'Ü{í=öõ!ôòÎîÖLÔÉbñsîõô„7 8ÿž§ºüködzò#„6NÅo¿ì}{§½·ÞK: oŸ +-šíXøNrÂ3œœÿN‡ÿdŒbnö×èo–èïBh+Ö(~iâ×ÀŸpà;ï'Íûˆ{ÓÞaï­O 7¾ßÐNG)?go'ÇÀbÿÿ¦ ÿØþüì‡ü¡Áë%~}âg~´ï ÜGØ›õ‰ôù„ö³®sioºj?òo%ÁŸÌ0ÿCþsø×ìwô³?7úwgèü¡õ©iä·OüühàÞ+÷6î•û{£>†>0>Bý-ë|Ú§]µ¹—¢³ÜøØÈðoÛ?Æ?µßè÷³O~Èúøê2òÅÀoô>æ^µWìCëMzÇ|`|¤úíbÚœ«ö#{'º +-ÁpGÀ.@â¿ò¯ú×–Ý~£ßÍþüè-¡WƒüCgB›µ.#?#~<ñ3à缸×m/Ú+öõ&½1¢>¯-Ä-&%?¶·Â³;vbÿ•Ñ_·Šd2û£ÑÐß&?àG­¹âïn?œø +-¾ü~è}Ƚh¯Ü‹ö‘õôƼ7>`}IºäºÜ’R_ Ž‚¿v‚ ùïôüOºéÏø§öûÙ¯ôïKé/È¿ò#„ÆY÷‘_?˜øøÞ—´wØ«õ*}ȼ#ž¿"]Õ®…]OŠ~hoè¸sà΀½ÞÇNÿØþcF¿ØÀÍ~?úýäü¡µ5ªø{ñýÄ/€oÞϨ÷÷¦½ÃÞY/Ôôʼ3Þ»~CZvÝlÉ?©¯ú›àî€àÈpþ3ÿþ†¿,ÿt÷×fÿTDÿ(ò~„P¯:ü‚ø5ð§Rð#ïyßÛ¼÷Üó¶7í {±>’^wÈ;Üoq+Òm×bþ}I>Áwü ðÀü7þ½þþ<ü#ûƒÙo«:¤_G¿É¿7+ûäúK…Ú¨•Éï)þd<ñëà«÷¼ïyÞŸ!ïCîU{[öŒ½£^¤WçMyž¿ËÝ“î[osè+ò¾;vôè @ùOôñíŸQûuöý6ú§s£¿¼ù['ÿÐ_-„ÐÆ«ùNü=9ñðfÀŸ‘¯û^¸?GÜ¿q什bï¬géÅyc^‰w´?à>#=´>[Ì=¢¯Èûî è!Ž€œ>æ?óëïð'ûßûϤöÇôòôG£¿,?àGõ®(þ®ÂÈoÿ Nü#$~ühß÷<÷N{^öŒ½·^¤è•y5ÞÑþ9î÷ØzÒ{HÞ‘÷ÝAÐ; GÀ>ÞæŸ×¿è¿Hú þÑðvDÿ±˜þdôäÏL~Àjn”‘_Ÿ'þ!7ñ‘øþÉüØ{á^½7îI{]ö¡õF½s^•7àÉð§Ü*÷÷n‡äIyK>Áî=rüðþ»õ/ÛßðÏ ³¿Dÿa¢ŸG³üm“ð#„’:‘_ùB~I|ÿ¨¦~ì}Ž{¯½bÏ«^©7è•y5Þxú<õ>÷×ÙüÏåy~•?ÄŽÞwäèà8þ½þ%ü+ûKôŸ0úk£?‘BäÏMþþTþ¡¿q¡k!¿yä7‰O້ïÀ~ä}‰{Óž°Wë™z–^œWå•x£ýõEî9÷akòœ¼Ã¯ÛAÐC WÀn€\:ê¿ÌÑ?‹`2ûSúMþ£mò·L~À +-êG~0òKâöâ—ÁwŸ½wóÞqŸ×^°©gè…yE^'À_T}‰û2õë«…Üü¸¼IŸaÇ@ï€\¾|ü0þ³ú;ücûçÌþ<ýÇýèo•?žü€!T¯ ùm#¿M|ÿL>|¿ïuÞóºwÜçµë•z–^œåUx³ýkU/¹¯sßû¦+úÏò¤¼EïÛ=ÐK WÀn_=äAÅŸ—Íþpö3ýgþtô“ü‡cù;Lþþ€¡íZ/ò‹#šÈ¯‹ï&>ƒ6ß|Ù÷ËÎû{§}Œ=YOÔ³ô ½0/È+ð¦úGÔ·¨oKßiIãWøe» +-z +-ä ÈÐÀ€ùñïôgüyùóð¿Eÿ²ÿÙ™ì¯fÿ<Íþ„~7ú³òO“üùÉøBió‹ä'#?ÿPN|?ñ3àËÀ—}¿¢Þß'ïyÝWÜó¶´÷Ø“õJ½B/Ì ò +-< þݪïQߧ~ ý°1}ˆ_àWé3ìÈ!+À7€O€;ä¿ãßé¯Û¿ÂŸ—¿ ±Yí—Ù/ôóê?OôŸ;—ŒþP~‚?’?;ù»Â?ô·!´Î@~fä°‘ŸŠ?KâÛÄ?žÀ¿87?ƒ_ |·ï+ïmÞWëþ ­ûŠ{Ýö¬½Ç^¬'êYz†^˜äøŠðWÔª~ÌýDúiCúˆ|èÐüWþ+ý«íÿmÂ_–¿ ³µ²ÿñc¢ÿaHÿÍ›:ú¯øÑáBM~?ùI~_'7øóî~„¶DM3¿…üIO¾ù¯ÓÈŸ!òÄ牿Lÿömÿ~þ;ïVà;ï_¼°yÏë^Æ}µíM{ÅÞ[OÔ+ôƼ /¾“âÿªú7õî¿ÒÿŠéò4¿HŸ ÷@\>zä8ÿ•ÑŸ·?M]þ6üÉ~ÚýïWö»ÙÒ{¥¢yÙF^þÙYšü*:ù×ÿÐßV„Ðù:òëÈŸ}ãôé3gÏ&â_"ñ¯]sÿî½{ þCÿ)ÿÿÁ³gºïÉû—/eÞÓºî_½¢m_iÏËž±7ë…z…Þ˜äÅwRüÿì×ësUgÇñ ÒBé$!wÈ…r©Çâ !H©J‹I !娄$äFB´aFt†iu€ +-±hAI-¡! ŠVï÷ûýþ߸Öo­õìgŸ³÷9I;#ŸßKÎ~xÅ|Ö——hŸæÃŽËFS§È×xȃÞ9rpôØPÿÁ?êŸô§öïïçô·ò·ðwÝßÚÒÂÙßØÑ¿žé_ÛЋþw­\™!mmÍ"“¿¢Â’?þ¹Ið{îøÃÂî»%š?3ÃüòqägD~•D>‹_Oâ/‰‹¿ +-â¿âøœø®ð›šþ–¶6ö~»yßÑ!yßÓ㸗¶7í{±^¨WèyA^}'Å?Ã{™wû¬ìs)ÓŸå[<Ã_ ç@\=và¿ò/ú[ûþTþþqûÛ¶liýM ƒÐÿäºuQô¿gÕª¸üKHþúzIþ…ÕUUšü¥–ü…þyS?¸vlR™ŸJ>‹_À‘Ïä—2ùQä×ÔÔÖÕ™ø˳Ä_½FÄgð‘øQá[à·ïÜi}ßÕÝ-y?0 u/Ü8ÀmOÚSÙ+öb½P¯ÐÃyQ^„7ÛÇh'yŸÇNɾ2ýY¾Å3~o÷@.]Üœ;ð_ù§ú'ý©ýÐôGù høGöïl'û™þ6¥_ªŸåýu–üËYþGIþºº„ä+ð‡à »?ö¶É/ôÈÏŠüÅDþÒeË þŠ4ñ>?þ®ç8ðµï{ûú4÷÷Òö¤=•½b/Ö3õ*½:/È«ðjûiÞÞ±/ÉÎ&N”/ñÏõè%3 7À]>ð_ù§ú'ý¥ý9ýÿáa µ¿“í·ì÷«ŸåúMþ51ùW@þe,ÿb’¿¶V’_à/Ï‚ÿ‘dø˜ üwû_pXXØ6ÙÌÏM>‰ï‘Ï‘Oä×Õsä/] +-ñÏ¿!.¾Ïâøø{{z¸ï÷ jÞŒHÝ3÷÷Òö¤=Ê^±7êUz8/Ì‹ñÊ;K>N{…÷eÙ«ºsY³_ôC<â×väÈ#À'@/€ãõOúKûsú3þ\þ##qû‰þî.¡ÿ¹ˆ~È/ôûò7dÈÿø;Yþ¥K–xÉ_Uµ ²Ò‡¿(ÿþüaa÷Ù¦ùyÈ/++¯¨¨\ ä{‘¿ü1Ž|ŸÉÏ-~"øøÎ{äýÁƒR÷Ì=Ž´=i²WìzH¯Î‹òb¼òÌÏÓ^ã]}%ÚE7ïõ3<á·vôÈÀÀ Ð ÀøGý‹þÔþ†?—ÿÁƒþf”ý‰ô§ËÏðCþÇ–/wÉ_CÉ_-É/ð—ü…€Þ[‡ÿnÿ[ Ë»ÄÌŸ™Ÿ@þœ$òKüªªê…L~]ù+VJäçßÀ‡ø|ò^ÀwÞ#ï’ºWî©íM{.{Å>¢^¡wÌ‹ñÊ;D¿Ä{÷†îrêì |Ž‡vôÈ# ' :Ê?êŸôeý©ý}ü%üÅ~é~¥¿Ï£?Ÿük|ùW®€ü–üµ”ü  +-üIð?ìÃ?;þ™1øCð‡…MŸM2ógÃ|Ÿüy äW +-ù‹˜üúúxä«ø ?.~BâûàøÖ÷â=ç}œ{i{ÒaYÏÔ+ôp^”Wá ÷+´¯bW±kn‹~‘/å¿·s —À®nN€óù¯úSûKú£ü&û?Éö‚ýƒýŽ~ÎþTú³ägø#ù£ä¯¯«Sø«þ2†¿˜á/È‚ÿAþ°°é¼ôÌŸ•”ùJ¾e~6ùÕD~ “¿XÉÏŽü˜øâg¿8?òþSìýQòþØ1ážâ~lŒÛÞ´WìÙz¦AoÐCy1Þxg̯c7x_ÓÝÌ1ûä­=rppðß9ä¿òoúSû!ýÿcÇ4üÕ~éþ8ýýFRô'ÉŸ•ü=ÿ(þù ð?dð¿# þà~XØtÙ$2ß'ÿ¡8ùÉä×2ù.q䧋5~BâüÄÁw}ô%òþøè¨Ô½rú´Óe/Ø‹õNz^˜â ÷¯ó¾Ý¾éö­ŒE¿È—ò +-9rìè0ÿÁ?êŸôGûŸ>íðçò—ð?zö¿ûèÏŒþÉÊïà_Ìð×(ü•ü…üs3áÁ6ý–n¾Ÿù³a¾’?7Nþüâ’’DòIülòó‹Külð]ß‹÷œ÷V÷½´=´WìÙz¥^¡çEyÞÉþ&ïÛØmÝwRg_È÷xê.‚ž¹vpÜ ÿ•ÓŸÚ_Òåò¤†ÿè(ì?röç ß“û6“¿Ñ—?~NþºÚÚüðÏQø3‚?¸6-6µÌŸ#™ïÈ/L$¿ÎÈgñ™üxä;ñ›2Äw‰Ÿ|öþxäý)Êû3gâÜSÛ“öRöWÌz¥Þƒ^”WâîßåÝÁ¾'û~ÎéGòÝ9ÐC WÀ;îˆÿW´þIjÿþgÎhø«ýljýiôGÑŸ)“ÉOþ~I~þ +-‚¿´´¤8þ<ÁÜ »÷–žù3ã™ÿ Ëü‡Õ|#¿8'ùÉ‘/â7o‚ø[ãâ[⧃ÏÞŸˆ¼ç¼î%î/1÷¦½`/ÖƒzH/Ð ój¼Óý¼b?Òý8çì+yƒçîè#`'@ü'þ#ý_çöçôWüÇÇãöŸxö'Óï¢_åïPù·BþMÍß’ÿ}ÉÉŸ~qð‡à ›fK2?WæÏõ2ŸÈ/ù¥D~E>òã‘ñ7·°øÛ|ñ{!¾KüðÙ{ß¼ç¼?wÎÕ=ÅýæžÚ^µgìÙzD}$½8¯È›ð@ü'¼Ÿb?Óý<çì+yƒçîØ#€`@ÿ Àþÿ‘þ„ÿN+ÿsçâöŸƒýIô»è‡ü}1ù·±ü”üÍMšüï—äŸ +-üEE!øæïr›ŸœùJ~A&ùU)äkä7¬õ#ŸÅoÝBâoß‘!þÄw‰Ÿ>{Oà›÷çÏKÞ»ºîÑöªý›‚½O½@/Ì›ñN÷_ð~)û•î×9fßèò]<ÿ»ìÑþ™2ï}ä]wôè °ÿÑÿRÿNÃÿöm ¶Ÿ»ÿÚÕ«ÈþK—"úÏúÑ/ò…ü/˜ü#$ÿ~’¿¿¯wowWgÇîkòoimÙÔÜÔ¸ñ™§7üëþ5éðWW1üå à/,œ\ð÷ÃÂîÞ&c~îÌ/+cò9óA>™ŸDþ:"ÿDþF"Óæ‰üv‰üî½=}ýƒCû‡?úü‰ÐÄ? ñGEü(ñ=ð/ü‰ë>úž½—¼¿sGêÜGÚûØ‹õÞ 7æ#â…òÉþí?©ó>ÒgÞ9pgÀn€žøïóïôþ(ÿ;wþfÿÍ›.û/¿ÁÙŸI¿F?ä?k~’xÿоþ¾ž½Ý{:$ù·>ÛÖÚ²™àÿPüO8øá¾Á¿€á/#ø‹‹ó–û3‚ûaaÿÛ%˜?Ó™ÿ@¶ù™™_J™_ÌgòÿË~}=GuÞaŸ$À„1–@HcÈE;qBS×JÚ]õÞ» PïÒª—U[õÞE/N“@(È€M°Æ0É 1iŽSœ^þ€¼½œÝ)ÃÄsžë÷\îç÷]šù”|g äGFEÇÆÅ'&%‹‘Ÿ›—_XT\ZVÄ7ˆoBâãÄŸ° >ü‹Þƒ¼Gu/rµ'Ø£¬ÇÔ ÐSæ9ñDò'x?çûÈê„Gä3ñ°3@o9ø?„¨¿€?*þ‚ý/\`Ù¯¤ŸE?’¿[’ßP]UQ^VZ\T˜Ÿ—›“}%ú®´”䤄ø¸˜è(  €_¯„Ÿ?Ók~GGËÁ/º¿’¹o)ø_öïAºÏûžgþ*j>$ŸšÏ2ßdþF˜ù›iæ#òAæsò=ùZL~HhXDdTLl\BbRJjšùÅ%eå•Õ†šºúIü$>O| þ)þ÷ ø?¸À¿z{ƒxòqϵçe°çÔèóœx"ùS²_ˆû¥…IèWâ9àg€Þ|È üóú'úüiøsû¯ûIöŸ?ÏèWD?’Éoò7ùk Õ•å¥%Å…ù(ù³23öìÞ•–šœ”Êá×@ø] ü(ø)üÈýÍÏ ~Õ}uê^ö¾`ÍüÜüçfþ&šùœü­Û ù.–ÉOHLNIÝ•¾goFÖ¾ý$òKJË**« 5µõ @|#¿‹‰?†Å_þeþççYß߆ރ¼'uO¹giÊ^´žP/9/O=ÿÛ¯—0þZ¾ü °ÀóŸÔ?‰†?*þÜþë×Iö_ºd…~"ÿ¸™üM@þÚCU%Mþƒ9Ùû÷efìÝž–š’”˜ ï#ð»Bø·›Ãÿú¦M–‚ÿóà_Áà·à¾ +-¿:uŸÉþ+óYæÛ³Ìßòj>!û@¾+ _#“MÈOƒägfí?Í#¿ªÚP[WßØÔÜjlâ›$ñQâ#ñ9øç øW®ðÀ'}½gyO¹'m´gØcëEé9ó’ï¿¡ûXÚo-L~Á>”n?â`þSþ‰þ¤ýþrøûoݺyØm~Ò™ÐåÿÎÛBôËò›€ümÆÖæ¦ÆúºZCuIþ¼Üœìû²2öîIßEà‘á÷ð»AøwPø™û[̃߆¿ê¾:u/sÈçæ¯̇äcóm ùRæ¿.g>&' ß ïå£Õùúù›‘¿{O$?ç`^~AQ1‰üºú†¦æc[;¿»·¯_)¾œøBá_»~¾è½÷,î‰ö{b=¥žB/ ¯¤ý¶ß-aüµò g€žá`ÿ)ÿDšþBøcûA÷/,ܹ ìÇô_›«ŸG¿™ü@þnSWG{›±¥™'IqQA~îÁìû³2!üi)É"üþ~z ¿;„'‚ ÁOÝ_-¸¿Ru_º¶ç™¿J4Ÿd¾¥Ì‡ä‘3ïÈwä{kuzH~0$? +-’ŸDÉß·?’_XTRZ^Q #¿¡±©¥ÕØÞÑiêîéëâBñ§ÍÄ'à_ºÌ +-ÿæ­[8ðïÞ½wÿ>óžæ=çµ=ÕcO¬§ÔsèEã©á¿gûÃ2Æ¿’opØ €øù'ú£ö§ø“ðGöÓîGÙè¿É«Êáû‚ü'ŽsùÇ€üƒ@þžnSgG»±µ…$eEYiqQa~ÞÁ ÿnËð{{i<üÎN~üo¾a1ø×±à…¿u÷¿¨º¯NÝg1 æIa>"_4ß™3ßÁ<óùÛ¶ïtrvqs÷ð$ä@òÃ1ù‰"ù¹y…Å%eå•UÕ5µ$ò;:»º{zû‡FFÇÌÅ‚?þ >üpß#ïuµ"h±§Ö3é¹ó +-áÿ(ìÓeLüNq ø `@ðóôGø?Áøãò—íÿ ´ŸÑ‡U?ŸÐ£_!ÿ È?48Ð×Ûcêê$É_W[S]UQ^ZBáß—™¡€?Âï«×ùx{yø]ü0ø¿õ–…àwÁogÝ·…îsø™û–‚ÿeÿRÔ©û|lùæÛ@ó×aó7l2ÿk$óù;v:»¸ò5Þ>Z½¯@`p&?Îù†šºúƦfù]¦îÞ¾þÁ¡áѱñ‰©éQü3 +-ñ!ø7nÒ¿‡Áÿ |Ô÷<ïYÝ#îEíëeé%å™ÞöçeLüNy +-„À.€à¿¬?JVþ$ü‰ý‹‹$ûß{ЗVÿaú¹üçÎùAùgü@þá¡Áþ¾^’üÍM õµ5†ªÊò²’₼ܜlþè¨`€Ÿ¯^ëã­ñôpsuqÁ¿m+þ¯KÁï‚= +-~[üªûêÔ½ðY3…ÂüÕÄüW¡ù0óíÖÛÛ£ÌÍGä{+ ßÉÅÕÍÝSãå£ÕùúAòCÃ#¢¢äÌÍ/(*.-«¨¬6ÔÖ546·´¶µÓÈŸ˜œž™â3ÿ*‚û/| >üG0ðEïeîEíEìõ"ôJàÿ"î¯Kžô™òˆ'€ÿ‚þ2þÌ~Òý,û1ý°úoÿÑoEþãPþ9 ÿäÄøèÈðà@?LþŽö¶Ö–¦ÆúºçÁá×i}¼4žîn® øw àÿ¦ü¯¡à·§Á/¸¿Záþ +-Õ}uê>“-Ù|H¾`>Ê|G’ù[xæòAæ;9»¸¹{h¼¼µ:½Ÿ`ÐÉ7¶ut’È›˜œšž;Ä?ŽÄÿ.Ÿ&>€ÿ® >|Ùû§Ð{T÷”{¢½ˆ=§^‚Þø¿)ö÷gNùÚüH'€ÿ2þ¨üŸBü%û +-íçôÃê¿é_€ôcùýLþ3Hþ@þÇæf§§&iò÷twu¶·[šêj Õ•e¥2ü©)I‰ñq1Ñ‘a¡ÁAþ~zÖÛKãáîæâìdü›åàÇî¿ +-Ü'Á¿$÷_öoFºÿç=Ãü•fæ¯æÛÚ®]GÌß°q£˜ùoH™ïá©ñöÑé}ý‚‚CÃ""£cââ“RRä—WTU×ÔÖ745·Û;ºL=½}0òÇÆ'¦¦gæ>rìø‰“Pü3Jñ!øHü»÷€øï?xÀ +-ÿ1¾è=Ï{ʽ¬=Ã^ ^†ÞšïÿXÖ¬Ýù@äŸèÿ ÕáOÂ_´ß"ýïúïAú‘ü,ú©üg‘ü'üG¢É?48Ð×Ûmêìh3¶ŠðqøÓ)üQþ_½ÎÇ[ãéáæê‚»…à߸aqÝZ[[èþ3÷Wªî«S÷?ßrÍ·AæÛÙ­·Gæò‰ù8óß‚™¿ÓÉÙÕÍÝSãå£Õûú‡„…GFÅÄbòÓ÷ì…ä瘑ßÖÞÙÕÝÓÛ?04<:6>953;wøÈQ þ©Ó@ü³ç°ø—ñø ,ñ>Äà?"à³ÀÿƒÏòþcâ=á^Оa/RoƼÀ÷?•û×3göÜÒ%O?”¡ýqúÓò'áí²Ðÿ3Jÿââ!ý$úï°èò_&òŸƒòŸ>uòı£Ghò ô÷ö˜º:ÚüM õµ5üY™{!üÉI ñ±þð°àÀ?_ÖÇ<ø¹û(øìíU÷Õ©{{¶ù«ù_–Í_‹Íw æóÌ“f¾³‹«»‡§—·V§÷ó +- ˆŠŽOHJNMƒägAòóò›Zù}ýƒC#£c“Ó3³‡‘êôÛPüwÎ#ñ/Kâ¿‹Älj¿¸¨Ÿ¾à=Ë{ν™ö‚õJç­úþïeÍê-PÞÁIÿO¹þ¬ü­Ø/Ðÿøñ£?£È¿ ÈËþ ?HþS4ù§&'ÆF‡‡úûzº»:ðBø@øw§§¥&'&ÄÅFGE„‡†úûÁà÷’‚ÿÊàwtÁog·níZ[›ÿ°[_±m]wÇ‘p’¢±HNÛ§,Û¢I‰Ejャ½÷–¨M‰Ú{ïmí½‡eyHNÛ¤m’>vPÇ–ä‘ÔŠEÑä¥@Û¤è9÷^^ž»(ÊR‘<Üßóy=ŸÿqÿUÌý³¼ûüøæŽ4ÿÔü×5æÀ̧˜Ïžù.®î^Þ¾~A!¡áQ1±ñ I)©ù…òÛÚ;»zzû‡GFÇ&&§ffç@䯀Èâo߀âïï‘ø>Úß?8<Ä Ÿÿ8øDß#Þ#Ük´×bO¡ž…yŠàçÚ?ˆq>à8ô€øOòèãÏ´Ÿ•þý}môßâÈÿ©Vþ»{˜ü ù·6ñ䟟›žš»62<8Ð×KÀßH‡?Ÿá ðóõöòpwuqr„Á¯à ~è>~û¯óîóã÷ÿš~æ¿F1ÿ ù?ýa>žùFŒÌwrvuóðôöñó¼ ÉONMÏÈÊQRÉo&ɾ6:>19=£| þÎM(>Œ|ø¿%Ä¿ÅðOüC˜ø(ø¸÷"½'ó^Ë=‹öë™Î³Âζ’ÓõŠã Ð.Â?©¿¦ýµøÓìg£ÿñc,úÑÏK~(?Hþm"ùægg¦&'ÆFG†‡ú{{˜ðçç)³³2ÒR““âb£##ÂBƒ¯úûùxÁo¯ ~!üZ÷aðs¹ÿ +-ï>?~§´—è³›ÿ#ùçqó qóµ™é2È|S¡Hl!‘R3ßÇ×?àjPHXxdtL\BbrjZFV¶2/¿°XÅ$ph’?5=;7¿¸´LDþŒ|L|ùhããâþ9žø8øϨàCï¿"úõž¨{í)Ö3¡ç„eß’ÓùŒó +-ÐÂ?Cû5ôCû úŸ=ÓDÿ#"ú?»_+¿&ùüšäßX_[Y^Z˜Ÿ›™žš½FÀ߉À¯.Uæç*³33ÒR’âb¢#ÃÃB‚®øS‚_® ~ྺƒ¸ÿECCàþΟ×Ë}ž}~üŽ9½ÍäkÌ“Å|ùcS3¡ÈÜBj)£e~@`PphxDTLl|bRJZFf¶27¿°HUª.¯¬BÈïÃÈŸœš™[X\ZY‘¿EF>.>ù„øŸ‘âh€ÿ_ø¨÷ß Þ³jO³^‡òßêÜwÄt¿Òqhþ³êOµÿkºý8ýÐ~²úµÑ¿¿Ï”O~ ?™ü×Aò¯­®,-.ÌÍBøǘðW”«KTEù¹9Ù™éi)I‰ñ±1Qá¡ÁA0ø=Ü\AðÛ‘Á/Áo,Á¹O?Ýýcî¿Æ»Ïß©ìEÍ¿H1dþ#ùf"±¹Dji%'3ßf~àÕà°ˆÈèØø„¤”Ôô̬œÜü‚"U‰º¼¢ª¦¶¾±‰IþüÂâòÊÚúù»xäÓÄÇÿ!!þ“'Dâ?Ç)|màS¼grjÏÀ^—òßxº®ÿˆþ(þtû©ô…U?F?ý\òS“sc}ueÂ?35Iƒ¿¡¾¶ºª¢L]R\T—›“•™žš’” ƒß‡ü–R‰¹Xd‚¸‰êþEàþ›Z÷‰àçÝçÇï„;žùçο@˜ÿÖO4æÃÌæ €ùB‘ØBb)³RXÛÚ98â™ï 3?$4<2*&.!195-#+G™WPT\¢.«¨ª®­ohjiEÈŸ˜œ†ä/-¯®­on]‘ ‰|øXä£ÅgK||4ðiÞk¹§hÏ´^/åÿuÌéu˜þ3õ'ñG·_“ý”ê'èÑÏ.?„“M~ÿÎöõ­õµ•å¥…y*üü¥%Å…yÊœ¬Œ´ÔäÄø¸˜¨ÈðÐ2ø]°à·VXɤ ±HÜ÷AðkÝ‹wŸ¿SÃü—õ0ß3̇™Ì¿b$065ŠÍ-¤–2¹ÂÆÖÞf¾‘ù¡aQ ó“RÒ22³•yù…ŪҲŠÊêÚ: ù½Zòçæ!ù›[Û7vnݾ³Ëùâ#‰O_—÷ îéØë ^'çÿÖ¹c]ÿ©úkñç´Ÿ‹~Môñ»üÔäßÛ½sûæÎë[›ëk«¬ð775ÔÕVWøUÅ…ù¹ÊìÌô4üñ±ÑQa¡hð;ØÛÚ(ä2K©…¹Hhfj,0ÂÜçmÜ}ü†Àý çÏÓåþ˼ûüøé·™33ÿ20ßÄÔL$6—HeVrk;{Gg7wOo,óÃÂ#£Aæ'%§¦gfåäæ©JÕå•Õ5€üæÖöHþJþ +-$ÿúö›€ü=@>ù¿¡Šÿ€U|"ñqðÿL> +->»÷¬Ü³[|ß³#O—þþdø#ö³ÑO‰~6ùü•O~ÿݽ;·oíÜØÞÚÜ`ÂßÝÕÑÖÚÜØPWS]Y®.Uäçæde¦ƒàOˆ‹‰F‚ß¿½µÜÊR*1‹ÌLMFW.cî“Áÿ¢îß‹¿âXÍ?s„ù†Tóß¿Ì761ŠÄÐ|…5Ì|gW7/o_ÿ<óc@æ'ƒÌÏÊQæ—¨Ë+ªjêê›[Û:ºº òÇ™äïîÝ‘ÿáGšÈÿù@ü}Vñµ‰Ï>‡÷TîY´?óÿ9ÆŽw¸õGñgØÏFÿ_(ô³É¿ËOM~ÿ/àß½}ë&+ü}½Ým-Íõu5Uåê’â‚’ûgèìóîóã‡ìóÏmþ»Ð|#±©™P Í·’[ÛØÙ;:»¸yxzûúÌ™Mf~.È|U©º¼²º¶®¡©¥µ½³»§o`pøÚ(Nþƒü!ùXää?À"ÿàðS|jâÓÁgë{îu[”Ûÿ=Æ^à°éOÅŸÅ~.ú5ÑÏ%ÿáÁ=ù!ü¿úˆþ‰ñÑ‘áÁþ¾ž®ÎöÖ榆ºšêJüª"ü9ôà÷óõötwsqv´·³±–[YJ¡ûfÀ}#àþ{ïíþYÞ}~üôÚ‰ÍGk¾Hl.‘ʬÖ¶vNήî^>¾ óƒAæGÁÌOÆ2?f¾d~M]}csk{GWO_ÿàðÈèøÄÔ4$yuAþÇùHäïÃÈòô)ÿKšøÌÄgŸË{=´?ãOtôÐ_—ý,ôéG£‘ÿùó?| äúä žü˜üø?ý„€ÿüs³ÓSc£#Cƒý½=]m­Í økª*ÊÔ%0ø•Xð'Á ‚ß×ÛËÃÍÕÙÉÁÎÖZa%“JÌÅB3ÓSsÿûþjüøý0¦‡ù¯ê0ÿmÌü+Fh¾…ÄR&WØØÚ;8¹¸º{zù€Ì™ 3? Éü² +-ùõM-mݽýC#£c“Ó³s ÿc·ÎŸ¢8ó8Ž'‚°QÀÛ­èVÅlLb¢‰Wä¾A‘O<â…H¼oQPƒÈ}ß0Ã0Ã5\ +-Êpß +-j¶jwU@Ž–I•k¬ì®ûÃî>OßÝótO D]éÏÐÕÕUýú¾eLò«ä“‘›ˆü¿ÂÈ"¿¿ÿáÀB|Tâkƒòž—ûWýKž>üùíGÓOG?Jþ<ù`ÉÿvòCø›ü6üŠ|Y^NVfzZJRb|lLTdÄ¥‹áçCÏžÁô0#ø@ðûûúx÷ÝV8;9ØÙZ[Z˜™bîµàËùŸ6ï“?A÷ÿ(äþï$÷¥I1®ùSPæ¿'lþǘù_Pæ›[XÙØÚ;:¹¸ó=½}ü`æoÂ3–ù!ÇA懞™y%:6>!)%5=3 ’¯PªŠŠKÕDå×òYäß%ÈÇ#¿¯%þB|Vâ“à‹ð^‡ö¯Žz±@¦ý‚ôòÿLÉ?BËÿ—ÿþ½{Dòë€_¥TÈe¹þÔ”¤„¸Øè+—#.à=‚?þÝxðoÁïçãå¹z•›«‹“ƒ½­µtÙ’Å´ûC÷çðºÿÊý)’ûÒ¤1÷.}®ù†˜ùÓÐæÏ&Íÿš¿ð«E‹—.[njniecgïèìâºÒÝÃÓÛdþ†<󃘙2ÿò•¨˜¸„ÄäÔôŒ¬œ\™M~A>ùùTä ë_|®÷‚Ú‹gù?ãÚ8øGâϲ_›þç8ýÂò ùûû©ä‡ðù øÛðª +- üÙYi©É‰ q ø/1<ì3øñàîûûz{‚àwuqv´·µ±²07]¾l)pá—_|þÙ§:ÜŸ†¹oˆvÿ]É}iÒÞÑ}=}„ùÆhóçbæϧÌ73·´¶±spt^á¶ÊÝÃËǘ¿Ëü]»‰Ì?†e~øEùQ1±ñ‰É)i™Ù¹yrEª°¸D]VQ É¿Á&¿‡ ˆÿ7­Èâ¢ÅG$¾vࣼiíLJüœü9ö£è§£ŸGþÑQ:ùü}½½8üdòkÁ_ á/S—@øóåy¹Ù™i)I‰ñ±ÑQ‘ øÃÏcÁ”~à> þõký}}¼€ûn+œìl¬,ÍÍ û‹h÷çB÷gk¹oŒv_åþëþï¤I{]ã3_Ÿcþtæ/Xøõ¢%K¿YnfaimkçàäÌ_íéíã·fÌ|`~ ‘ù!xæ_€™—”’šž™“'Ï/PRäWsÈïfïþ}näâ‘ÿ$Ÿ#þs\|v⣟×û×*ý˜.€NûéÇåÿ…-?ø´ˆäïëƒð“ÉàïaÁ_ ᯪ,/+-)*TäËòr²2ÓSS’@ðG_aÿ‘CxðïÜÝÁïçãå¹zpßÉÁÎÖºÿÍÒ%˜ûóu¸?ã¾¾ä¾4iô¸æO¡ÍŸ*Úüy óMÍ,¬¬míù®+¡ù¾þk1ó·íÀ3˜Odþ,óã@槦gdåäÊòÊ¢’Ò²òÊ*H~m]}ù ù2"ÿ1ùÚâó$¾(ïß<ëQ‰¿HúiùŸ#ä'“„Lþ‡ý ùàÉÏ ¿J©È—åæde¤¥&ƒàÁ‚?ŒþÃÀ}<ø·nîûûz÷Wºº89Ø÷-ÌL¡û_/\ÝŸ'Úý©´û\ö%÷¥M¾¡BŸ2߀cþ ]æ/#Íwtæ»{xAó×oÜ´Ë|hþ¡#Dæ‡ã™2?-#3;7O®(P—ªË+ª®V×ä·¢Èï…ä °"_‡øTâ3À¡¾ïÇ ô…ö[ñ/l?ƒ~±òcÉ?Š%?„&o/ü õÿÕªŠruiq‘ª@!ÏËÍÎLOƒÁ‹ÿy2øìÃ݇Á¿~-tßúïÜ·åþ Žû‚î¿î?Pš´W;”ùz‚æÏâ514ßÜÂÊš¿Â šïã·†6?xï~*óÃ8™Ÿ'Ë/P—¨Ë0ò¯×jêIòoqÈïƒä¢#ŸO|:ñÑàëö~‚}¹ Õ_7ýtôÿƒ !?;ù!üÃCƒ0ùûúPð·að×ij¯×\»ZYQ¦.).TäËò@ð§3ƒÿÜY*øƒƒwn'Ü÷óñÂÜwîÛ`î/p– ûz’ûÒ&÷t™oøÒæ[ZÙØaæ¯Z™¿nCÀæ­ÛvìÚMg>0ŸÈü82óer…RUTRZVQyõZÍõšº†Æ¦–Ö6~ò‡XäÓâ?#¾øãå~" ŸÈ+ Ö~áè§äåÊKþ‘‘G?þÈ7„¿ÀßÔX_§¹q½À_^VZR¤R*ä2üXðÇÁJ¹ÿÖÍÖ­ÁÜ_嶸oÜ7‡î/æwÿ®û†„ûú’ûÒ&ùPèëcèæCôùFÆ&&Ðühó?Ô69n¾n¾§·/Òü³çˆÌ¥2_ž_ *,.U—WV]«†ä×765·¶µCò»9ä÷“ä?z42:ªùÏä3Äÿ¯øÂÞ¿1Ô÷Œ~ù¡äg$ÿc,ù!üCø{ üþf-„¿ª¢\]Z\¨*È—ÓÁMÿé“ÇCŽ:°í¾·çjÊ}KsÓåÚîÈqßÄÄغç¾!™ûúûÒ&ëøÍŸJ›?2¦nó­ùN.„ùþk×oÜ´åÛí;ƒ‚÷î?xø豧ÈÌŠ¡3?_¡,,*QÃ̯®¹Q«©ohjnikï€ä÷è&Ÿÿïâ¿`ˆ/ +-ü7{ÄÆŠÿØåg&ÿ˜üþGhøoCø;ü-ÍM õšÚ5 ø+`ðÁŸŽT$'øƒƒwnÿv˦ë×úûî;9ØÙXëvæLÒýi’ûÒ¤½ƒ6_4ß`ìæ»®ä3Ï|`~4;ó‹ŠKËð̯ÕÔ546·´¶wtvòo#ÈÆÉ ÉgGþÅø¯[x¡M(ýÚòÿJʯ•ü:à¿áïð·¶476Ôi°à¯$ƒ_ƒ? þ+ºÝwáw6Êýé”û¤ûz’ûÒ&Ý8èó˜?ÝÈؘÿ>ËüÙhómqóÝ=¼Hó·íص{Ïwû:rü$n~D$žù©é0óådæWa™_WßØÔÒÚÈ¿ È¿s—A~Eþ›|fäãâÿJˆÿOJü³Äÿÿ™{Î^Ú~qò£“Ÿ€ÿ'ÿc>øïøoÝìêlokmnj¬¯Á_}µª¢LÍþÔd<ø#.];wöôÉã!GØ÷ݞݻ˜î»¯t…îÛj»ÿ‘–ûï÷µÜ—r_Úä*ôõ1ô1ó!ú”ù30óú´ù ™ïã·f݆€Í[™æŸ:z>ü"‘ùI)i0óe ó ‰Ì¯™_ßÐÔÜÒÖÞÑuó$ÿ‡?ó’ÿ’OGþ3¡È+þ[Ã={ã¥_—üüP~>ø{ øAðø»üím0øë5µ×k˜ÁŸ ƒ?ºO?ËýÛ¶n€îûxyð¸ÿ æþÂ}À>æþ Ú}Ⱦ!™û’ûÒ&Ó¡¯O†¾!úÀ|#¦ù ô¡ùs0ó?gþÞý=v‚e~2Ìüœ#òµÄÁŸ_üߘ{Õý’›ðw£üŒäÆH~ÿ-øø±àÿáîížî[]m­-Ìà/-)RàÏËÉ‚ÁŸK¸zæÔ‰cG¤Ýß°nŸ(÷ñܧÜ72¢rŸr_r_b_ÚÛ=„ùz¤ù„ùÓ0óM0ógáæÿþ¸ùsŘ¿30(˜4ÿì¹° —""£bâ`ægfç‚ÌW‚ÌW33¿µ­½³ëf7È|Œ|"óµÉÿ™—|1â‹ÿÍa~Â^RèI|ô£åçIþ§BðcÁá¿s»' þ&,ø«ÉàW*@ðgg¦ãÁqéBéþþ½ÁA¢ÜŸ‹»sº? sßÄ„È}Ì}¦ûRîK{ÛÇ1ŸúLó§CóÿÇ~?7qÞqŸ)¸´ Û´%?´Ø:-ß·1æ¾B¹Ï¦†’”’ CHBB!Ü`076Æ÷mY–dI–|ÈÖå +-mgÊa0>0mL t¦ßçÙ]iWÞ•dKÐÁÝÏ ùyfôzÞF¡Oš"‰½2ÿ­wHó?þäÓ ]Ì?™Ÿ“WPT\Z^2_£Õ™ß ™o‡Ìg’É ù,ä;Å¿ë^|Qú ¡÷ýæüŒaÉï ü—ðCð·Ø­s“©‘üü…y9Ù(øÒÝß¼iã†O)÷—¿Ãé~ +-Ý}±Hâpÿ·¿Aîr4ï>¿ÿ‡±„þh*ôÇ`ôæw1_‚ÌŒŽ‰‹OLNa7ÿ7IóW¯!Íß²uÛö»öì;p0ãd~æé3¹ùE8ó•ôÌ·@æ·¢Ìw’‘I~/Aþ¿˜äß&ÈwD¾/â?lÔ³ÌÏôsËÏÿ ü]'‚ÿâ?)øqð·ÚmVüõÎà//+)*€à÷!ø3Ø·g׎íÛ¶îòñÒý·Þäv?>.&:¹/‹BéØCÏýQ<ûüFìXÌE™O…>˜/óƒæ‡bóå4ó§ 6 iþ«°ùŸ}þÅ—”ù釰ùYÙ9¹ù…Å¥eŠ*”ù:GæÛ óÛ‰Ìÿû?ˆÌò;ü.&ùÿ&ÈwùÃÿÁiÿŸ¡mx_âÛQ¼Ÿžü·±üìðw“ð_Áð;ƒ¿£þfZðW)*ÊJŠ óss²³N1Üßòå„û«W‘î¿Áâþšûr†û°ûÁà¾@ÀÌý>÷ùìq†¾Óü±Øü Â|„>6_(–H‘ùQÈü¤”ÔÉØü¹l濇Í_·ž0ÿÛïvîÞ»?ýÐá£ÇOfžÎÎÉ+(*.-¯T(UjFæ· Ì?çÌ| 2ÿd~w·—äÓÅ¿Ç*¾oBGû! +-ïïWÀ—s±ËÏU~–ägƒÿ‚ÿ2~2ø-TðkkÔ*¥¢²¼´¸¨ ÜϸŸuêı#î…Ý_û·û3§ÓÜ@î‹Áý‰N÷Ç#÷È}ZîÐsÿ<ûüFÈ8Cÿ—´ÐÀü`ºù!B‘X* ó£cã’’Áü©nÌÿ›¿ ›¿cקù9y`~y¥B©R×èôc}ƒ©Él±ÊüËWPæwuQäßùž@ô|Oâ æŸ}œïúûY~Žägƒÿ‚ÿ +- ~*ø­s“©¡ÞhÐëjÔ*p¿¼´¸° /'›rßž]Øý͞ݟ +-î''%ÄÅFƒûa2‰XBw?8»?–îþhºû|îó c1ßúó!ôƒ‚°ù€>a~¨H,‘…É#"‘ù‰`~aþü ¹Ì߈Ì߶2ÿøÉÌÓgÀü¢’²òʪj•F««5@曚ÍDæw¸fþ5ÈüîîAä¸'ÿAŠÿ‰÷ñðU~¶Óþ&ü½½=Ýÿ5?{ð›ëë µ:­F¥¬ª,/-)Âîgž¤Üß±¹¿i#rÿC÷.˜?»Ÿî'"÷##äÈ}!v³O¸ˆr¹?¹ïÌýQ|îócýzè#ó!ôÇ;B™/K¤Øü˜¸x0?›?g˜ÿäÓÏ濆Ì_N™¿™¿•0?ýÐá£ØüÜüB0¿BQU­ÖhõµÆ:ÈüfÖÌïD™2¿·‘ßï ù>ˆÏI¾/ÐßóqC|ƒhòsÃÿ= ?ÿõë(øiðŸGÁßÖÚb³Zš›ꌵz­F]]¥¨(÷ósÏœÎr_€ÜçsŸßÈ»ù£éæ'€Ðv˜ÿû?€ù"‰T&ŒBæ'¥¤¦M™6ceþó/bó_g7ï~ºùÅ¥`¾R¥®Ñé ÆúFS“Ùb³·@æŸuÍü.Èüœùý(óùß»’ÿ“gò}Ÿü¡Zï«ñÃz¼¦ß—»üdð÷ßèëëíø»º\ƒÿ,‹Ýf17™ê½¶F]­Dî:ÝOßÝߊÜß@wÿuìþ‹Ï;ÜŸ1mJZjJRb|lLTd¸\&ƒûiîîu¸ÀåþÿúçËßÐç&ôá¿[Â|ý  Âü Øü‰!B‘X* ˆŠ‰Oó'3Íù6ó· ów“æŸÊÊÎÁæ—W‚ùš]­¡Ìo6[möÖ¶vÈüóhä£Ìï¦2ÿ¦#óo!ó=‘ïÞ9ïÅ÷¸î°çú®¿æÿÞÐïÓ•°Ü„øo1à'ƒ¿? þ (øÛÛZí6«¹ÙÔX_gÐëjÔ*¥¢²¼”éþ^ìþ÷—"÷_y™éþdp?¹†ÝÁîûØý prß‘û|îó ó"ô‘ùÈ|2ô‘ù¡"±›æOÂæÏžûèc“æ¿ +-æ/óWp˜™ŸWP„̯ªVi´ºZc]CcS³Åjoi…Ì?Ç–ùùýäÿH‘ÏôÎ_¼ ΠüOßWO€ûýy1>Àßág ~p¿£½µÅfµ4756ÔkuZJY…Ý/ÈËÉÎ:Eº¿›îþjpéþ«„ûO<þØ£sgÏœîO÷ãb££"äa2‰X +-î;rÜÄîÿÚé>Ÿûüþ¹ ý_¡/€Ð&Bÿú!¡B±D&ˆŒŽ‰KHLó§NŸ‰Íâ©g°ù‹Àüe„ù«iæï$Ì?F™_R†ÌWk´úZc}ƒ©Él±Ù[ÚÚ;Pæÿmpæ÷õ!òo’ä òx`ä»ÒæÖ{/¤wïøžçõ#À¿[ø}ºæqÂÃÿ‚€„ÿ&‚¿¯ +-þN +-~pÿü_Áý¶»Õbn25Ôkõà~5r¿¤ˆpÿÄ1ÂýL÷W‚ûËÀýEÈýçžyŠrjÚäIɉ q1Ñ‘à¾T"†† Ü'Ý÷”û¤û|îó{èç1ôÇâÐ +-¢›?1T(’HeòðȨ˜¸x0?5fþs/¼æ/óß^¾b%aþz†ùGhæW(Àü­Þ`¬o45›­6{k[ûY0Ÿ+óoÒ2Ÿ"ÿÎ òYPóQ|WÕ8Áwgýt¿ãiÞ½\úsÑïÇ;òþÛøÉà¿Éüç!øÛÛZí6Ò}ƒ^[£÷+Êœîa¸¿~ÝÚ5„ûo/[ºd1¸ÿÒ Øýùó÷SS’ãcc¢"Ãå2©X$„ÜGîOøvŸÏ}~#kLó9B?B<…>˜*KdaáQ1±ñ‰I)`þ´³æÌ›¿`!6ÿZ´x ˜ÿç+ß_µz‹ùLó•`¾No¨#Íoimë8{2Ì'Èïdf¾“ü[ˆüÛLòïrïkä»zÆ>ö”çBý¶§yñ°óÏF¿¿Ü÷ þ[ø]ƒÿʕˤûÀýŽ¶Ö›ÕÜlj¬¯3èuà¾RÁp?c°ûï¯ü/ûõ\U™Çq|œÕÙÕ¥8£ã +-Éí½å¦@!„Þ{»é½÷ÞI! !„Í ®: cEìŠ:® +-H !=4wvw}±û<§Ü{žsÎM‹;qÎïõ¹oþ3ù<ßäeg¦§÷c¢ ûþ¾Þžîn®.ÎNÀ};=t_!—JDBºOæþ“\îsû=5ô#Cÿq2ôWRB˜ÏŠÄR™B¥ÖêôvkHóýƒ¡ù†„¤Üü’òÊ꺆¦–¶vºùâæúÙß¿8|ä«ã'Nž:34|ndl|b +-˜OÏü¦Ì¿ƒfþý¿hÈÌšÏ>;ös)oõŸçݼo›ÿLûYä·ä¹XOf~³Áÿ)øûÓSãc#熇Μ: Ý? Üÿ”pÿÝýö¶–¦†ºêÊò’¢‚ÜìÌ4ྸhrßq p_§U+2©X$äó¬±ÜÇÝ_¹b–ûOp¹Ïm©i>=ôÿL„>0ÿ©§¡ù«­x|H,‘É•jNokÌ_¿aã¦Í^ÐüÐp`~|RJZfv.Íü^Šù¯8øö»ï“æ…柆æŽMLNMÃÌ7™ÏšùòAÈÿuîn½OÃþËêC|&÷ìÔÏ‹ûÝEÎü[Àâ?Í~ºü–rÑð7Bá7ÿ5<øq÷/]îOŽîÇÜÿ sÿÝ·xâ~oOw'é~YIQ~nvFZJb¼!&2ºïãå±yÓÆ ëûö¶zF­”Ë$b‘€Ï³ÂÜú)Üýå˜û\îs[Ú3ú$CúÀ|kž@(–HåJ•FkÌ_»Ž0ßÇ/˜mˆOLNËÈÊÍ/*)«¬®mhjnkïDÌ7ÿChþç˜ù_óÏ`æŸÇÍÇÈÇÌG3’s Í|D.óäß^s›OŸ®=+õf}ÿéÆö 0ýGìg—ßRî3åŸ~jðßÃÝÿÉü³dð_½àÇÝ¿ÜŸ>{æôɯuôðŸC÷?|sÿUºûÍM µÕe%…ù¹Yiɉñ±ÑÀý ?Òýukìmm´•B.•ˆ„ž5pߘûÀýeË`î?Îå>·¥ºGô ó…æSCÅ +-£ù ô­y|¡H,•)Tj­ÞΘïìâêæî Ì +- ‹ŒŽKLNÍÈÊÉ/,)«¨®­ojnmïìêéíæ?‡˜šÿåá£Ç ùCÐüñ‰Éi`>5óù33XæßbËüß„|VóQò©àÓ´g‘žÕø;´ý¸ð¡?¤¿ ÿ©öSéGà·œû÷ ?-øoÞœÁÿ½)øûçûãF÷îBܸß×ÛÓÕÙÞÚÜTÝ/.ÌÏÉÊHMNŒ÷½=ÝÝ\]œ€ûvz­Z¥IÅ"!Ÿgå>á>—ûÜ–øæ +-ý?¡¿„þ“8úÐ|+_ Kdr¥Z£ÓÛÙ¯qtÂÍ÷öõæGDÅÆ%$§¦gåä—UTÕÖ7.ÄüSÀüs#cãSÀüKTó¯óg1óoCóY2ßÄÕ|äß'Y¨Z(WfÄG¹§SÏTüöŒù°úÏNÿè§d¹£%N8üä!iÁþðà¿Ž?îþeàþ4æþ¹³C§Oaî9·ûõµU¥Å…y9Yé©I q±Qa!þ¾¤ûŽkìmõ:Z)—IÄ"æþ³árŸÛï`0Ðg ý•¦Ð_meÍÅ©\©ÒèllùëÖoظi³‡—¯`phDTŒ!!)5=3'¯ ¸´¢ªš¿µ³k{o_?0ÿyhþ+¤ùŸ@ó=v1ÿ"nþ·Wpó±Ì¿ 3ÿö<™ÿðȧŠÅb¾I|JáSµG¨g8O!ûm?,bÈioâ?“ýFùéð3i‘3Î?{ðß&ƒÿÆ ÄýKÀý©‰ñ1ÂýÇŽAܺÿ·%º‡>iþªÕÖ<¾P$–Ê*µÖFoç°–4ßÇ/ 84<2ÆŸ”’–™WPTZ^US׸¥ukG×ö}ýs˜fhøÜèØøäÔôÌ|"óIóhXææÓ3ÿW–6µ(ù,¡oŽ|øíQêÊSø¾‰nv£~Ïx¨E£ýˆüÿfùßÉ’î3ä§Ãÿ+~¶à¿…ÿÌ æ>?æþÅ ÓS“Ðýá¡3&÷?¡»?Ðß·c{Wt¿®¦²¼´¨ 7;3-%1Þà烹ï Üw°ÓÛhÕ*…L* ù<,÷ŸìC÷—/çrŸÛÒ3ôÿ€„þôÐ_BŸC_&Wª5:½}'gW7wOo¿€ °ÈèØøÄä´ŒìÜü¢’òÊšº†--[;¶‘æ¿ÍÍœù“Sç¡ù óqó¯]æÏ’æ/.ó-I>Kè³f)N> ¾Ñ{Šö(õtäM†Ï »±€Q>§¿ÔÕŸJ?)ÿ/¬—µ,ûæá_HðÃ3bîÏB÷Áor”Ýý× û/îoëØÚ²¥¡®º²¬¤(?7+#-91>6:2,$(ÀÏÛÓÝÍÕÅÙÉä¾^§Q+å2‰X(àƒÜ_eÌý•\îs[z[|è[YóB‘D*W¨4Z[`> }h¾¯`HXDTl\BrjFVN~aIYeu]CSK[Ƕî;ûù/Aóß ™5ÿŠùÀ2 ðj¾Ì¸äSŒ2g>‹øFïÚS©G™gè~ÙµŒò9í! ¼FþIûiôß3^—y^úi-wÔùág?¼&î>ü¸ûÿ€îŸŸšœ0ãþÐý—€ûƒý;wtoëhkij¨­®(+)ÌÏÉÊHMNˆ‹Š ô÷õö¹¿ä>pßF«Q)äR Ì}k,÷ ÷¹Üç¶Ô¶¸Ð毶âñ"±T¦Pªµ6z;‡µÐüM›=¼|üƒC#¢b I©é™9y…ÅeÕµõMÍmíÐü]ƒ{€ùû ùo¾eÆüi`þeÄ|Ì|Ìüù3ÿ¡‘Ï@ߦÀÈ??Å~D~æ)~(‡e…ßLðîÿˆ¹’êþ7¨û'÷ßzº¿¸¿gp`×ΞîmímÍMõµU¥Å…y9™é©I †˜¨ðÐà@?/à¾3pßÁN¯Óª• +-™T,ÂsÿÙEæþÿû/7|¬æ?:Gè¯ÆB_,‘É•*NoBßÉÙÅ„¾_@PhxdŒ!>)%-3;¯ ¸´¢ª¦¾±¹µ½³»gç®Ýƒ{öó÷cæ¿óÞ‡>FÌÇÌ¿„›å*aþ,f>pé2ß2±¢O‚„zD6>>á=©½Ñz*ôò„ÞWÉ]A÷-ûЈŸRßÓ @òOào²Ÿ*ÿÏŒCÓzߢÇ}€à‡×e¸¸?ÍtÿãC¼÷æþ~àþÞ=ƒ»wõötw¶·67Ö×T•—äeg¦¥$Æ¢#ÃC‚ü¼=ÝÝ\]œAîëu•R.“ˆ…žµ—ûÜ–äÌ„þc¬¡ÿ }k_B_®Pзµ_ƒ…>0ßÛ×?($,":6>19-#;· ¨´¼²¦®qKëÖήžÞ]»ÿºgïß^Ü·ÿeÂüæ2Ï|Òü[¨ùH‚þVäÓÑ7bÄB">>Á=©½QzªóTã˜ÿ˸.lÆï©é ý'ô'ðÇíÇè'å¿ËòÀ>Dö¿Ùà¿?¸/æ>€wÿáþêþG„û/ïß÷âÿدï 6ï;Žã×k.½öüoÓKb;‰Ëvz„ä wÏçïçÑÒÝëûV{kKc½RQU^ZT›™.MIŒ—DG†…ø }øn<';û[aîoX·vµ¥Êý—.¹ÿ;.÷¹-¬ý·õ†þ» ô—’з„¡¿™¿c—µ­½ÏÕï-ôó +-‹ˆ’Ä%&Ke™òÜü¢’òJ…²®±˜ßÝÛ?8lÒü¿cóŸBóŸ#ó!D/I~Ê|ä¿.óõ ¯kþw˜¡—D|6ø˜{ª=¥^ã<Ûxâ÷²¿iï¯ú§ý~“u˜@ýÇúcü)ýH~Úü üúÜŸ öMÁ¯/ø÷ÿ£qŸ¿I÷‡û{»;ÛUÍuJEeyIQ~®4ˆÉüW¦2ŽÈ7€>C#з,ò‘ø,ï±ö{J½Æy¶ñ„ò¿Ðýy6#ï°®sÈ üSü5ô3òc÷§}íäÐÎûÓá7ü¯ø‰ûÏûϨû_êsÿÜêþžQྺ»³MÕÜPWS]YVR˜Ÿ#Ï¥&'ÄÅD…‡ŠE¾/O7gG;›Ý;·oÛ²yÓ'0÷­,ÌV­Xs1Ìýw¸Üç¶P¦…¾vèÿÊ`è´lÅJ3sËÕk™Ðßmcçàäâæáå#ˆCÂ#cb’RÓ2²rò +-‹Ë*ªkjšTmÝê>hþ¾ÈüSg ùÆÍþ~þ˘?ËÌ}F_Û|R˜|F|â=Öž`O©§Î³ŒÇr?ÆûÝg>òþÍ '€øÏèOì‡ô?ƒôcù5ð³¾zæØÎ%û&à7üèÖ‚ïݨûÈýSÈýû€û}êîŽ6USCmMUEYqa^vVzZJR|ltdXˆ8@$ôá{¸ñœì`îoý çþjKs3&÷ß5™ûûÜ~›uè¿¿xÉ(ôÍ-¬Ö|¼‡þŽ]Ö¶öNòþæÀðOñGöCú©ü°ùøõ¹O¾û¹cßüºÁÿýô“KÝÿÚ¤ûã'Ž9Ýèëéêhmiª¯UT•—äfg¦KSã%ÑaÁAþ~o¾»+ÏÑÞÖz“ûk¬,̹Üç¶À¦ƒ¾ÉÐ_BBß„þº Ÿ€Ð߶}'}GgwO/¯`phD”$.1Y*Ë”çæ•”W*”õ-­í]=½C#cló/#óo5Å&6ç%jÞ3Ÿ­ }ÄŽ¶ùZä3⣾‡Þcîì õlæY¾ÿï>Þ=fwŒ>C^BÀÜr°ÿˆ‚?±ŸÐOåÇð£à׸~&÷µ¾÷¹úÆÿûì~7÷oߺyýÚÄe¶ûc#C½=]í­ÍõJEeyIQ~®|7ž“ÈýŸÃÜ߸þc”û+AîÀå>·0è› ýUfV(ô7mÞBßÚÖÞ‘çêÎ÷øù‡EDKâ“RÒÒ³²ó +-ŠË*ªkêšTmÝêþÁa`þÁÃGOŒŸ<}öüLÍiÈüù%ß$úßj"ó9Âjó¯¾Ââcð±÷ˆ{„=¶^=ƒ¼†÷I´›h7˜]72ú ~¾Í|ÿ‰þh?¡ŸÊ“Ÿ?ë·˜oöMÃÏvÿ³uÿüÙÓ'Ç= ÝìWww¶©šjkª*J‹ ò²³Ò¥)‰ñ’舰à ?·§»«³£=ÌýmÐý \îs[HÓBÿ'‡þn;g7O/¯(P%‰KL–Ê2³s ŠJË«µõM-mÝê¾ÁáÑ=Ðüã_`ó¯\½~srvæOMQkæß|cèk !æ#òÿ‰"‹À‡Þ3ÜSìõzª<#uWG[KS}­¢ª¼´(?Wž)“&'ÆÅD…‡ŠE¾>^n.Nv6 ÷·~öéïQî[ÂÜ_f*÷ßÂîsìs{S3úý†þ.úN¹ø  @ø‡úcüAøú¡ü°ù ü÷_¼À§ø ±o2øõºOnñt÷÷oM޸ܿpîÌ©ñÇŽ÷ÇF†ú{{:ÛUÍ u5ÕeÅyÙYéi)‰ñ’èˆÐà@_—§›‹3ÈýÝsÿ·º¹ÿ6É}Ž}nof¿ÐB_'ôú‹ +-ý54ôw€Ðwpâ¹yxùøŠÅ¡áQ1q‰ÉRYfvnAQiEUMmC“ª­³[Ý?82¶wÿAùÀü[wîó!óŸ4ÿâ…š¯›ùÚæÏ™7 9úм0¡O;áÌäÃƇâCð‘÷{¨=žRœ'ÌSá!àgÐN£Â;izäIô|_|Ð@þSýþÀ~Bÿƒ‡@~œü~m÷á_0øË€clý¹ÿŒ?rÿ{ãî?Aî?îßEîOhÜ?¸ïØð`¿º»£MÕÔP«¨*/-*È•gÊ¤É q1Qá!â‘ЇïáÊs¹¿Ëtî/ZDØ×É}Ž}nó8Ðÿ% }ˆ>0ÿ70ô)ú ôßÓúÛAèÛ;:»ºó½…~A!a‘ѱ I©² yN~QIy¥BYßÔÒÖÑ¥îæ>z™ñ20ÿæÿÙ¯Ï種3Žã“À˜äLf’1(ÆŽÛ_ã8™Ä˜:˜bªPï½÷Þ{ïZI«²êZíª!!Ô*¨"dìlãÆ yžsÎ-Û„IŠû{©½WoÎÌç|/š?…æÏé6ÿÛgš¯§Ìq³úËWâ ‘âCácßï9íIÕ£õTzê<3žã½ ×J¦¤SkQ›ð {_Ã@/zýgüSüÁ~¤ª|båGøUÝGöñxt³¯ÇƒP…_—ûìp´»?‡îO¡ûÃà~ßåKè¾BÞÔP'«ª(“äeg¦¥$ÆÇD…‡ùûz¹»:ÙÛZY˜=}òøÑÃöíÙµrÿÏ|5÷ƒ¹¿Ý_aÈ}Önè/gès¡¿JúÆkMÖi„þúÛ¶ïÜCBÿ䩳çÍ-mì]Ü=}üCÂ"câ“Ó2²s Š$eÒ*Ym=˜ßÚÞÙu Ì™¿ð¼æë=ól8aÔÐHÑ×b>#ŸŠ}Þî{©öh='=už!Ïx'˜ËqÍdMlºÇ=BžÇ7Ù}@/v ÿ‚þÌ~B?'¿¿ªû÷Reÿ‰ +-ûú9 mÁÿî/÷á|¦&ÆÇF‡‡Ñý®ÎöV…¼±¾VV)-+)ÊÏÍÎHKNˆ‹Ž ôóñtsq´³±4?æÔ‰cGíß»{çvÈýŹÿ—ûÆ4÷Kr•8÷—S÷ ì¦Ç© Ï‡>‡> }}ú¦úo +-¡¿Bÿ£wìf¡æÜ k;g7o¿€àЈèØ„¤ÔŒ¬ÜüÂ’Rieum}cs 5¿·ÌŸ˜š¾> ¢`Iê4ÿ;4ÿ‡—Âüç@Ÿ3_…| +-z/Ò­gÒSçò xT¼WOVGW+¬F4á¯ì9|_fw¹È €þ#ÿLÀì‡îïä'ð«»ÿ²°ÿóÜÿÝÿN§ûxJóèþ4º?î÷÷÷•-Íõ5Õ•å¥%…ù9Yé©I ±Q¡Á¾Þ®Î¶ÖfçNzü“Ã÷ý}׎!÷ÿÄåþ»$÷7m4%¹ÿ—û¯ÒÜçØç¾}Ãô0Ð_ÆBÿqè#ú*¡ÿ„þ{4ô߇ÐÿÛ¶í»öì=pè(†¾™¹•­½“«»—¯PhxTL|RJzfN^a±¤¼¢º¦®¡¹EÙÖq±»Ì¿rudìš6ó¿ÔeþÚÌ×/ùOÕÔ'®ˆÐ§žˆ5¡æ‹ÉGñ øà=pÏiØ#õôLy&<çº W«âV©kÜäq|]ä W»ÿDÀí'ôSù)ü4øo°“ºÇÝÎôœÄìÓÓÑ£úOµÃ¯âþºÜÿRtRðAFjâÚØÈÕ+à~O÷ÅŽ6eKSC]MUE¹¤¸ /'3-%1>&*<$ÈßÇËÝÅÉÞÆÊüüÙS'=t`ïžÛ·‰sÿµÜ'ì‹sÿ–ûË ¹o˜¾¦¾JèÿZ#ôM ô7‘ÐW=ô÷<òÉ }Kk;Gg7O¿À°Èè¸Ää´ŒìÜ‚"IYE•¬®¡I® æ÷ €ù£`ÉôÌì Vbó,bþ“%5ÿYè«„>˜?ÏÌgäSñ±ð»‰÷À=ѱç©'ÐSåñî0)®œ®LX©Ê„¿Óñ|™ÞôÀ€úüý´¿“Èå§ðcð3÷oû˜ûÿr©Ù×íþ“EÜ rŸ|•÷g¦''®‚û}ÄýV…¼©¡VV%-“äfg¤%'ÄEG†úy{º9;ØY[\8wæÓ$÷wkæþ’û&k׬rßȈ±¿‚±¿ÜÀ¾aú™ +-ú*¡¿Í_ɇþï~¡¿FýwÔCßÃGŸ<}ÖÌÂÊÖÁÉÕÃË7 (4"*6!)5=+7¿°¤TZ)«­o”+ZÛ;».]ó‡†G¯ON!#ó·nƒù”‘/3ÿ§—À|‘ú"ô¿WG_-Ñ|¬|F>¿ƒxÜSí{´¥§ÎóÈ3ÞQs ®WÌV´ØØ3ä|“ÞôÀ+/žÐðÇðúyù)üüÔýYîÀà’Vgÿ{ƾþÕ–û?-æþàþ?ð’^ —ôõ<¯Ñá!pÿò¥®ÎöVEsc}mu¥´´¤0?'+=5)>6*"4(À×ËÝÕÉÞÖÊÜL-÷?PÍýÖ¯3Yc¼šcs%ºOÙç¾}Ã^à4BŸCŸ }‚> ýÕ\èoÑý,ôO9ÁÒÆÎÑÅÝÓÇ?0$<2&>1%=3'¯°¸´¼¢º¦®±¹EIÍïóÇÔÍÿ'׎ È7?Çü¥ _#õ9ô‹Ñ‡vüœ„þÜÍYfÈ"‚äóâøè=pÚsØSê9ç©òTx4¼V€Ë'Ëã–«cÜïäi|Þ§W¹ð@ÿÿ ?àOìúyùþþÁ!ø6C÷¯ÏÞœ›¿}Î ŽLÌþã¥e_+ü‹»ÿ ï>æ>û8›cîûƒýp`]mʖ憺šêŠrIqA^vfZJb\LdXH Ÿ§›‹£å…ó˜ûGîÇÜÿHœûo ¹o,ÎýUj¹¿Ìû†½èi OÌçÐ'¡Ï£¡¿vÝú 7¿. +-ý?ª…þ93 k[gWo¿€à°ˆè¸„ä´ŒìÜ‚"IYE•¬®¡I®lë¸ØÝÓÛ€Œ]c~Ü"~æߦùK˜ù-âÔçÑHÑGA>»·pç6†þÌ41ÿ*šOÉçÅo¢Þ÷"ì‘z„ž:O”gÀ#ã9°l\Y&· ­ã~%Ïâ[ð6½ È%€7úÏóúcú× ý¼üþÞ>ê¾ð}vgŽ N²ÿP`ŸœÕ’¨¿Hð/æþ}M÷ñûl>Ï®^÷{º/v´)äM µ²*i™¤¨ 7;#59!6:"48À×ÛÃÕÉÁÖÊÂììé“ÇIîïÒÌý×Iî¯]c,°OsÿWª¹o`ß°8ôE¡èó¡è“Ð7^k²Ît ý·¹Ð_úÇ0ôÍ-mì!ô½|üƒBãbã“RÓ³rò KJ¥•²ÚúF¹¢•†þÀÄcb’kÆ…ÿÙ|=ª¢=õJÈ× ýÏý[ó<}½=— ò|N|ŸxÚöÔz”žÄ‡þJ@ÿU}ý5$ô7oyój¡¿CúV6öNú¾úQ± I©Y¹E’2i•¬®¡I®lë6z¡‡GÇÆ'Q›óÈƽϘùÿFóÁŽ‡/µùÚSÿ1¦>¢ä`è×g¦X-öóÛÛ” +-yscŸ_‚qÚöh=RO¤Gç©ò”x&{,.MÅí?ì×ipUõÇñQÔÑúBInö•}GÙBØZp@…[¬¶X´RA‘]a $!d_ÈB6²ö]Šv:6CÉÍrIز€Ø^ ý=Ïÿÿ?çÞ$‚ˆWç>/ï=çÕ3óy¾g}«Qÿðsü +-^×€¯]:ÒðÏøÇýR~$N.ŠŸƒ_¸ÿï¯pµ‹ŠÏƒý +-É>¶×(ا½=îØ×·ôCÝÿF¹_Ïî#÷éhWi¸Úô¥F <~ôð}ùyÙ»3RSb£#ÂB·mÙðÙªåŸ~,rÿmóÜãï7\Ïý.*÷‘ûŠ}ä¾Æ¾tÿI[îÛæ§ ôÍBŸÐ§ÐoO¡ß±‡~gGƒBßÃËÇ·uè¿júKúk֮߸ekHXxTL|brjzfvîž}!ôa>È((d‘Š&˜Ð¯­£Ðoüæ÷8Íoúwdê ô¯[ þ\¥"È Ttè°ÿàúSûÃ~I?ä'ø³sòð­F;T‡¹Î’}þLcöyq"öŸú–î÷î×ÕQîÃ}>ÖŒ¥ÎãpÒáæÜ?rèÀÞ=¹Ù™é»’wÆÇD…oÙºyãúµ«Wê¹ÿåþ äþ$Êý"÷ûôBîûzËÜû”û:Rî·çÜ'öŸ±±o›ŸmZ†¾BŸCèÛ۫Сopvqs÷ôö¡ÐïÝ—C¸Ÿÿú³´Ð_„Ð_Ðß°)(8tGdtÜΤ]i™Y9ãàác'>×2ñÜù’R#À0]dó9ôFÓ/ÁüïI}‚C¢_{õŠŽþךèD˜ÌÏÚMä“ø|xî {e=QOÐ æÙxé;Y¾³Šf%Ï +-5Ë[ú‡Ÿ£7èUq ø +-Ð  Àþƒè,íˆdùÑü€?#3 §{¯¸ÝbìÓÝìÓú¬#öïý÷›„ûµÂý‹&Úbi‰¼Ýb¼Fl1#-%)!.:bG趠MëdîÐ:÷GRîìß·wOä¾—§»›‹³ÁÑÙÿ å¾½=³/s_°oéþãöÂ6¿‚i‰þSæèÛý}„¾ƒ£“³«›‡—7B¿G¯>ýPè5zì„IýZè¿Ð_ŠÐ@èo ‹ˆŠOLIÍØ—¿ïÀᣪÏ‹â’RhQi¢JÔÌoli~óÍ ŽÜ³T_¦þm•ú ƒÑ¯±Dÿô©“ºù™éi»R’âY|€/¼'í5ë…ôŠy6^úN–/Ã|J³”ç5·õ?GoЫâð  üÿŒ _ÊOð'§¤RðçòùÖV©³_Ãìc‰*öo[EìëÛºûÍšû·„ûºû5ÕM•Ʋ %Å´Iþf£U:°/?7{wzjrb|lTxXÈÖ-Èý5Èý%Èý÷DîÏ–¹?–sÿ¥ôëÓ«‡È}7Wg'Gä¾b¹oggcß6?ã<ÑúOKô)ôÛë¡ÿBgGƒ“‹«»§B¿{ÏÞ}û„Ðé?fÜÄÉS§Y„þb„þj„þæ àí;"c(ôÓ3³ … Ä/E —\(3VT" a>g"ĸ%Í¿mµæ·‘úÍÍ +-ý¦Æ†úÚkÐBG_HqâØ’‚ÍOMIfòÑø,>ïI{Íz!½bž—¾“åK0‹i>âù‡šE­FýÃÏÑôª¸|èˆ@üCÂöKú!?ß°3 îg°ûj›tÁuö/_¹V[ß@[ìcÖûúÂîëþmÝý›üÁÖ ÜGîã£Ý?_\tVûlÃ6qÁ±Ì´]I;ãb"wlÚ´¹¿¹¿HæþÊýiS'Oǹ?xç~÷®È}wW'ƒcgÎýN)÷Ûsî ö¥ûìÛÜ·Í£Œúíú2ô¾½Ž>BßàìâæîéíÛ¥‡þ‹/ 6ÂO ýÙ2ôRè/GèŠÐŽMàÐÏÉuøù?¿€ùÿ9s¶N”Ë+«L0ÿ2b=…~Ó-ÍWè[—ù÷K}⢾VÔ úg}b‚B_šŸ´3>.&‘OâKðá=¸'ì…õBzÅ</}'Ë?Äüæž÷Õ,l5ê~ŽÞ WÅ5à+@'@âú3þ‚~’?$ðGEÇƳû™Y9yùj¡:ûøj«¹|õZ]=-ÒÚbÿÞ}Ýgö5÷¿e÷o°ûõ´Ê+侩ª²ÜXZrþ\ÑYì“Ü_nùyÙ»3RSb£"ÂB¶!÷ûKUîÏ“¹?eÒø±£ýF "s¿[_oOw7grÿy•ûööÌ~ëÜ·±o›GŸ–¡o¾Ðï ÑGè;œœ]Ý=¼||»ÊÐüòð‘£dèÏœõÆ„þ;úQ诡¿3¡Ÿ›¿ïÀ¡£ÇOž:ÍiX$JJ)Á™/B¿‘͇ßZ¿ùfê·‘ú×êjˆÕ +-}*}´!Œ@èç²0?6: +-•ŠÆ‡ø >¼'î {a½^1ÏÆKßÉò¿Ñ¼‡Y æ¯jþÒbÔïâ1zƒÞ×€¯qˆè¿ŒÒöƒ~’óÀ¿=,å>ܯÆǧ[iI16Z >ÞN§·=¹Ù™é»’UîoFÜÿr>çþÌßM{…rÔÈá/k¹ïëíåáæêìdp@îKö‘ûvvm±ÿ¤}Û<â´DŸÍèSè·×Cÿ…Î2ô½|ôÐ:ÂÏìøIS^Ρ?O ýe2ôC9ô“RÒ2²röìÝèȱ"ô +-¿.*.¹Pf¬¨¬ºX]cf~“2ŸÑ·nó% wÍÕ×S¿¡¾öÚ(QUaÔÑ' öï݃ÐO0?2”Ë+«LÕ}e~#Ì¿ùË1_Oý»ý;ZꃉºkW/×úCsôóó8ôâÈüÐà­A›A>ŸÄ—Þ/&í½ ž gçòBxûŸhþHó–˜yÚüAí'ñ?Nï‰sÀg€O]øOú#þa?…?Ë¿j5ÿiKжv?!‘7›—¿ÿ ³½âû­¤”دÁJûZìß‘ìßµ†Ø¿÷î߼ɹ/Ü¿|©¦ÚTUQŽ­â–Ÿ=£r_~ÂqîÇÇD†ËÜ_e‘û¯Ïšù[äþ„q£G†ÜЯO¯Ýûžn.ÎG‡Î:ûöfì?Ýû6÷móðc~;}˜ÿìsv@¿ƒD¡ï`prvu÷ðòú={÷í?pСÃýüÇŒŸ8eêô¯Í~s.…þ‚V¡gú§N úçŠKJËÊ+ªLa>B¿®žCŸÍ¿¥™ß¬™o†¾õ˜ßVê7·L}SeyYIqQaDÿà~†¨2˦ ëÖ®YÆ'ñ üEàÚ3öD½„^0/Œ—º“迧™K3GΛß;â~˜ÞAœ:tØèú_û™~’ŸáX¸qsÐ6êý˜8ÊýLt°ŒÙ/(Ä\Yy¥©eì7[YìßkÃ}}á~³æþ-ºâ7Dî×Qî_ª¹hª¬(/Ã5Ç7rî#÷åWr?‰s?¹¿^Ïýw‘ûsß ÜŸ:eâø1þ~Ç4°?r¿{W_/wWg'ƒr_²Ü·³{îY=÷ÛI÷mìÛæÇNËÐÿ?ûuõyp|bÚT01m]ñ¹ïû¾oEQðÂ[£ÕV«ihM“ØèhªVcŒŠ¢ˆ¨\"ײ˲À.‡Ñ ¶U§qÚçyÞßï· 5igÄ™}þÜý½½3ŸçûEŸ}C#‘BßRbck7‰BßÞÁÉÕÝÓÇ/08,":.B>…þÊ¡ÿáGù¤Ð/»^^Y]S[ß •ÉÊÖv•º³‹Ìg¡ßÓ eH¡æ?ÑnþóQdþõ‡¤þ}>õ• +-¹´¡¶¦ª‚Gÿä tB¿ðdþÎPùù >þòeö¨=YOÒsÎ3ä9à‘ñ˜dœ$6‰ü$ þö!žÁô +-Ø`üþAÄ)£äçàßþ.º¿ï½÷ ÿ„¹;ßqXûU5µ R¸Z>öïû/ûî¸ÿ\»ûOÈ}Ì}¸Òæþ=t¿»«S­‚ÜWÈeÒ†:p¿Wúåâ çð!wì3-¹Ÿ‡¹??=-9!.:",8ÐÏÇÓÝÕÉÁžå¾­µÄÒÜÌD,ö!÷ ÆcîÃþûºùA3}2Ÿ¡¯§§?®úFÆ"@ßJbƒ¡?CßÑÙÍÃË×?($<*&>1B?k …þz!ô ¹Ð?qòô™³EAúu MrEKk›JÝÑ¡/˜ßÛυþ3ýÑjþPõ¦þ]JýÖ–æ¦ÆºšêŠëeúÇ?;rèàÇþñƒý¿ßËÌߺÈ/Xâø9Ä}aϨç gÊsÄs²ÇãÄÑIJ‰i¸oè{<ɶ-ܸˆПð_ŒôƒüÐüÿ&æþîßíÛϯudj–zEuM]cSsK+Åþ]­±?ŠÔÉ}bÿ™ûœûx÷!÷»:Ô”ûò¦Æ†º[7!÷¯]…Ü/&÷ VaîgeBî'ÆÇD†‡ùûzy¸9cîûû6+ 3S±ÈØÙŸ`@ìÓ×ÓãØçÜ×±¯›:ZÑçB_CŸCBßXlbjniemkèO>BßÅÝÓÛ/ 84":6!95B?;7Bÿ-¡þBqI)úM²æe[»ª£³›B̧Ðïë{ÕÌÿ·àÅw¼úOP}Jý\ê·)2iý­›•7Ê®\¾ÈÐçKpßžß’ù›6¬_ äçç¡øK˜÷™¨=bŸÆIOÎ3å9àñh˜(œH6ü„kþ?ö)žÂã´ +-hЀ@ü#þÌ~”šà_]°nýFtçoöì…Ü?ðÑ'Ÿrì_„·ÜÊ›·ê¥2…²‹ýû¨þ^ýï„{|Ù·GóÂî?†ºìã+îÎW·»:;Tí­JE³LÚXÏr¿¬t¸Üß¼s?7{ä~jRBltDhp€Ÿ·§›‹“Ãì™Ó§¾ ìÛZ[Yš›šˆ ößØCǾnþ§y­?ú¯B__ŸB¼†¾¡‘Hlbfa)±±µ›4yÊ´³ìœ]=¼|üCÂ"câSÒ221ôóWPèïÄÐÿ€Bÿ(…þ¹"A}© C¿]¥îìêFó¹Ðï?~µÌ >¡ÿŒKý>Jý¯1õÛ[[äM µ5Uå×J5èòç…»wý;ú‚ÕPùËr¡ñA|?#Ë°gÔ“ôä÷{x÷!÷»;;ÔímÊ–fY“&÷KŠ/œ”û»Yî¯]M¹¿`ÞÜÔ¤øبðÐ _/7gÇ9ûS&CîÛH¬,ÌLÅ"cdŸË}ûºù?LóÇðæ èÓ ohd,215·´²¶µcèÛ;8¹¸{úø‡EDÇ%$Cè/\œ³ŒB H0Lè—WV×ÔÖSè+!ô;:»ncèƒùú}}d¾úœùÿÝækQŸKýÞG…ÔWÈ¥ µ7+o”]¹táÜ™S€ ý}{@‚m[6­_Kæç@å/Èœ—â#øÄ=hÖsÒ3ç9äyÞÑs_6ÞÂx áö!â¶ÛÜÿAÀÒ?éOJ†æøf-ÎF÷W¬Û¸…6<Çþ‘¿ûç.\ºRv£òfmƒT®bÿá#|ÅáÍŽ^õ‡qHî“û}}”ûø–» îwuv¨Ú[• +-¹Œr¿z¤Üß²‘r?gñÂùiÉ qÑaÁ~Þžî.Nö3§O}Ø·µ¶²075jا¯§§aÿGûctìëæ…G+úoúc ý7Jècè‰Ä&fæ–@Òä)Óf̲wtvõðòñ +- Œ‰OL™ ¡¿déò«)ôwìÚ¡`pèßÀЯkhl’7·´¶©Ôúw„ÐïE÷3ÄÐÙ> ž "«©,p©¯f©_SU~­ôòÅó_~þ·cGЇü[·f3!‘âøä=pOØõ½FyžwâÜǃ»fÜæö)žâ¶[´Ðàð‡ö'ûQ~„?=cþr?Ÿv[·Ã}ûÛ>sþâåÒkåU5,öÕ\ì?êÁ•Ž±K—: +-ÕïᄊÜ׸ÿ—z/ŸûwïÜîîê—ûà~•–Ü/ÄÜß…;ÈýË—.É‚ÜOIŒ‰  ô÷ñòpuv°Ÿ5cڔɓìl­%–æf&b`ÿ?gìcî ìÿXǾn¾ÿ ƒþO}}} +-ýño!úÆ"±©™…¥Äf" ýÙs]Ü<¼}‚B#¢b’RÓçcèç­\퇡ÏÚïã¿>Ò/ô¯³Ðo”ÊšʶvuGg7„>o>„þ·ú/dþh”bˆúƒ|C©¯jm‘Kë1õ¯–=}òøÑà¡¿cûÖM€ÀʼeÌüô´Ôä$hü½õ$=ƒž!/øNœ»Ò¸°qÆiàhþ`Ò!~Р @ õüÉþðˆ(h~‚.s?Ö<¼íxöaË>zìäé/‹ŠK®bì×Kå-­*Šýo<„~Ôמû÷Ÿrîcîƒû=œûýs¿r¿¾¶¦ºsÿ2ËýãBîÃSî¯[³2/7r?=5)!6*<4(À×ÛÃÍÅqÎì™Óý_N´‘XZ˜™ŠEÆÀþÏÞ2O¹¯¯¯7V“û:öuó}æµþè¿>}=}ƒ ˆ¾‘±ÈÄÔÜÂÊšGßÞÁÉÅÝÓÇ/08,2:.19-#3‹BŸ`ï{ïŸbèŸú +->ô¿Âпÿ€B¿¯ÌÐuÌ >Ú€AøÏ` >zxŸ¥~»&õ/ý‡ýúŒªêÊ8¾F×$Q“QG¥÷ªˆÒ«Ò{ï EPƒÑHP°AP¤)ˆ€4é  ¨€ £FŒ‰FŠÒ{S‘jV–Æ™5³Ï9÷Ý÷(OÌ'a­·¿¾{?w~ûoT])+)ÊÏÎLOI¢Ð?´?Êïb¾;T>D>ÀGÞìõDzÂ<ƒxZvu2jdTgò~…± ÈÀ€øô'öý–ÐüöNΛˆûðu·; :tXô)é™ÙùE%eWªnT3b¿©¥ÄþÐðú–Cê¿}÷fŸ>ÓO}~SfV÷©Ü÷ÇÇYr¿¿·§»³£­µ¹éyC]-ÊýÖÜ/$¹Ÿ”€szÊ}_o·MNö6Væ¦FºÚ4ÔTå×ËÊûâ¢ÂBü¼<܈ýåËff!+û÷9Ã~>ŒþýU\Ü<|ü‚B"¢â’ÒkÖ®“SPRQ×ܨ£ghlfamçàìêî¹eë×ß|KB?,<2‡~Æl¡ß¡?Èý1Âó)ôç…ùÿeQ§þÄøè¤þ`?¤~[óó†Z*õ¯U”—äde¤&%Ðè@èoߊÍwqrDäcñ|Ä=ÒY¥'ÎSÊ3}WÁ£ŒG‰Å™‡þ<Þd첨€ô'öý&¦~;{Gìþ_øÀ#çìÇœLHJÍÈÊ)(.-¯¸FÅ~mCcsÄ>¨ÿêõÈ(Zì8öiõçbìÿû4ûL÷ß ÕN»¹ßÛÝÕÙÞÆ’û¹_Žr?7;3#ç~dxXhðœû_oÝâéîêì`kmafl §³QSMEIAr_ZR\TDHŸ‡›‹Éþ’Å‹qØçÌßVó0Ìg¢ÿåW}}.n^>Aa1 )„¾¼¢²ªú-}CsK;G·Í^>pùéæ‹ŠK@¡Ÿ•“_8=ôëqè·£ÐïC¡ȮПÀ¡?Åü™ÑÿÔ"Ì0“ÕÇPltxèÕ‹¾žÎöÖ&ÖÔ¿t±0ïüÙ´äÓqpû}tùwúmóõöDæ;ØÙZ[Y˜ñõõ÷H{d=-=¥<-<¦\6ŸBÿ_K—.û7BŸ‡—_@HXT\BjµŒìzyE5 ÚºF¦æV¶öNpõ½}·ïØå¿'è@p(ýøÓÉ©ú¹Å/•_­œúÍŒÐ`†þø86ŸFž™ÏNýñ±‘á¡—ƒý½Ým-$õïâÔ/)ÎÏÎL?“WŸŸ—‡Û&gd¾¥¹Å×FÞ#î‰õDzÂ"šä~Ðÿ];¶ûz{¸or²·µ2752ÐÕÞ ¡¦¬(¿^Vfµ”„˜(fŸØ_±|ÙRœûˆý/€ýÏ8ìsæcçCè/&è/[ŽÐçÆ苈ŠKJ¯‘‘•SPRQÓܨ£ghlfamçàÌrï†>CÿLÚÙ¬œ¼Â %8ôoMý.ú/™¡ÿæ ‹ùú3š?7} ÕG, o‘ú€ÁèÈk¬~WGkóóú§ÕÜ¿s›¤~nVFjÒ©Ña¡Ð{ý-ž›]]í‘ù¦&F†ˆ|- >x¯Š°ÇÖèÌÓÂËeȬ¡g5û¡Ÿ!ï0Vµð@ü#üQù«#ù1üüØ}GgWwO´óáø÷ +- ‹ˆ>q*)5#+Å~ÕÛwî×ql”rr¿MîWU\.+¹P˜—u6íLâ)œû‡CîÛK¿»+¬|k Sc=íšj*J +-ˆ}iIqQa!~^n`Ÿä>°¿±ÿ9‡}Î|ì°G…>}.n>~A!1 @í:9eUuM-}C3K{G7/Ÿm~;wî‡Ø;v<ú +-ýôsçs Š˜¡ +-ý6¡?A…þ$óßÏ#óYÕÕþ ê¿z1Ð×ÓÕÞÚô¬î÷ß~yp÷Ç[×+ÊK!õÏ¥%ŸŽ‹9~ìpðÀê֣з±BæèòA|Uä=Ò[O¤g0OOI.GŠ9’ì‡~†¼Dojà€ôü¡üqõcøutÁ}SsKk[êS¶~àþàÃGÇÄ%$§ƒØ/-¯¸~ëÇ»~ØÖÔÚÞÕÓ7ðâÕë‘QôQ‡Nyî«ÏÆ}–ÜG ìÿ1kîÿ ¹_s¿ôbQ~îùsé)8÷;Ÿz»wúmóñÚìæâhgcifb¨¯£¥©®ª¤ ·ní`_LDHŸ‡›kû‹8ìsæcç¬è/œ†þ—ú+Wqqóò  +-‹ŠIH­–‘]/¯¨¬ª±A[×ÀÈÔÜÊÖžºò;vùï :sòT"„~fv^aqIÙ努©¡ßB‡>mþÔÐg1úŸÚö3Mý?¡'ÆF‡‡úÝm- µO~}xÿ§Û7«®–áÔOIŒ +-?r0îRÿýÜWŸÕýɹÿþ#r¿}Jîßƹ©¤¸ /;3åþɘÈð°ÐàA{üwíØîëíÿ{[+s#}]­ ªÊŠòˆ}) 1aA>^n®U4ûK¦²¿Ã>gØÍ èÿ“ý¯0ú+}^~!aQq‚¾‚’ŠšÆFm=¸ðÖvή›=·À…ÿö»½û†>—”¡Ÿ“_t¡´üJåµ›ÕÌЯǡßB¿…>2„ý?'‡þ<3Ÿúãc#ÃC/û{»;ÚšŸ×?}ü¨æÞê•—©ÔO8zhß^=Œ>\x ScC}d>T>âø˜{Œ=¡žá<“xJrQjD&ðÔ™ô+yƒ¹ ¨@üGúƒýˆ~9 ¿ªš:r_¯~Ä>ü üvúïÙwèû°ˆè“ŒØ¿\y£úνšGOj›Û:º{û_ÍCõÙ»ÿ«û(÷'pî¿ž”ûÍûµ(÷k ÷¨¾y­òJYé…¢üœ,Èý¤„¸Ø¨ˆ£‡CîÛûõ½çêŒV¿©±žöF 5Eùõ²2«¥$ÄE1û<\«V®XŽØG¹ÿ!ö9îs†9¬æ/`†þgŸA¡CÐçÆ苈ŠKJ¯Y»NNAIU]®»¡‰™¥#Dž—Ï6¿»÷úþȱȘñ§“S32³s ŠK.]¾ZuýÖí;wï?À¡_¡ß<=ôÇÇÿÏ~}EE•¤?»söŒãîuT@2ˆ  £HA‚YA$IÎ9gA ’sÎ9§¦ÉH2(QtFÇÖÃìºUuûvßD}›Þíï•ËSWý¾!óß"óéC±ùj>á& õßÓÔ +-Õ_˜Ÿšœ¸96<Ø×Ejm¬«*+ÊËJK©èçåîlomab¨Ñ?©¬t„¾<4_R‘ÄàCîöõTç Äã¢sÓ†ëKCý’° ð€ùõöúE(ð‹K@÷åö:¢tâ$|ñéšXXÛ;»yùÂØOJËÊ+*«ªkl%uõ Ž\»9195;©ÿüå+ŠúïqõÿÍ?î÷?âKË}ä>-÷çñÜ¿r ¯§‹ÔÞÚÔP[]QZ\ r?éJlTxhp ¿§›3xñ™ƒs £­©®ªrâØ჊ò²{÷Hˆ‰îì mìssr`ìÿ¸v Ê}Èþ*Ä>Åý¿2sŸ9ËÌgÐÿ¢¿š€> +;7/¿†þnqÉ=2ûÐ]WFw]×ÀÈÔÂÚÎÑÅÝË ý¸„ä´ÌœüÂ’òJúäîÞ~úױП¡ ý0ôß¼æÓBÿ##†þ§åÕ Õüè— ó3w'ÇoŒ ô’;Zj*J +-r2Rb#Aêûx¸8ØZšéëhi€ÒW:r„>¸ìÐ|Œ|a>äaO‘žÆ<ïœøpÐ ûâ¡û+þ?´=@ÙHˆ? Êà‡îKJIËì“ßö?8 +-:úF¦–6.0ö#cR2r +-J*jZ:ȽÃc7Æ'§fæõŸõ_3œúߘûÐ}ºÜŸD¹?24r¿³£­¹±æ~a^NfZrB\tDXHP€¯—»‹£µ…©‘®6¶ÿÁQ뤸èÎ"Ûûü¼Ü\ìl¬ýuk1öWCö ¹ÏdŸ9KçóèÃЧ¢¿‘…u;'¿€àVáí?íÚ-nºœÂCG+ŸRÓÐ:§wÞØÌÒÆÞÉÕÃÛ?08…~JzVnAQiE +-}ý«Ãc×h¡ÿˡψæ/«>(¿õçfîÞ¾u}t¨¿§³½¹¾º¼8?;=)>:üH}7';+sc]- 5 +-ú ô¥$Ä¡ùˆ|(>rYOužŽx\ôM´aûÒP¿$.|`üCüýH~?t_Ld_ ]c3+;'û—£ã“Ò³ó‹Ë«ë›Û;{ú‡F¯ßº}wfnáÁ/?}þ‚!Õÿ‚ûïûo‘û´ÜDÉýiJî_¹O&µ·4Õ×VU”åçf¥§$ÆÇD†‡^¼àçíáêdocif|^ïÜYxŽƒgŸ‚œŒ´$8 ?öøyyû›XY62ÙgÎ×ÏÊèÿƒ‚þ†,l}n¾ÍôÅ$¤öÊÊ+<|ì„Šªº¦–Ž¾¡‰¹•­ƒ³›§O@PHXD4 ýŒì¼Ââ²ÊêºÆ涎NúƒC#c0ô'¿)ôÎüOÿ¡Wÿ®þ3¨þý{sÓw€ú#WûºImMuUeEy™©‰qQaÁ`êÛX˜êÓTWUV:Š£/&Š™/‚Oážb=yzßY ÃòCûš¸ð €ø‡öúü[ûÛwìÜ~{qöÕ5µõ M,Pì_‹ŠKLÍÌ+*«ªkj#u÷_êß™ž»wªÿ ¨ÿªÿŽ^}Fùiîãì$æþÛ½yƒçþ“%¹?†r¿«³£µ¹¡®º²¬¸0/;#5é +-Êý@O7g[+sCøðSWU9~ìðE9YpûÛ…·öùx¸8ûpöÿ¾ú‡˜ì3g…!¢ÿÝRôÿ‰Ð_ÐçàäæåÛ¼Eh›ÈŽ¢bÔK~âäé3šÚºF¦ÖvŽ.î^~.^ºŸ˜’ž™“_TR^USßÔÒF"£Ð…¡ ý…eBŸ`>ã†þRõÿÜÿ×/_<{òëßïß›¾3qóÚÈ`_©µ±¶²´0'#%!&"4ÈßÛ¤¾™‘ÎÙ3§UŽcèïAq·CDd>$Š½Ç´Ç¥§SžªøFÂløŠ!|N\ø@ú#úü~è¾Èv˜û؉O?Õ3gu Œ`ì»{û…FÄ$¤dä–VÖ6¶’ºúG®Ýœ¸3={ïþÏ}òìÅKð»3¤ú+çþûræþmjîw“Im-õ5Uå%Eù9™iÉ0÷/_ +- +-ðõrwq´³¶052ÐÕÖT?}òı#÷ËïÛ»VdËf>nNŽMl€ýõë û0÷±ÿ“}æf)úC询 B ÏÊÆÎÁÅÍËOA–Ì>pÅAÙ©9{Nï¼±™¥½“«‡·`phxT앤ԌìÜ‚âÒŠêÚ†æÖöή<ô'VýwýŒúŸ–Qÿ7¢úó³S“7Ɔ{É- 5%ÙéÉñÑá!~ž®Ž¶0õµ5ÔÀ?|€ŠþvÔùùP|è={šóK€_O˜¿bh_Óí| ü)òsƒâ‡î m¦†€Âðø;©¦bßÖÑÕÓ70$<:>9=» ¤¢¦¡¥ƒÜ;8Œ}ÆSy÷?âî/“ûérÏýž®ÎöÖ¦†ÚêŠÒâ‚ܬtû±Qá¡Áü¼=\ìm,ÍŒÏëpJYé¢;wˆlÚ²™Ÿ—› °Ï +-Øÿqí”ûLö™óÙùË"ô)¡Ð_M@Ÿ¡ÏÃË/ ¸UtÝnq)i9pÁaשihé蚘[Ù:8»yú…„EDÇ%$§eæä–”UÖÔ56·u»{)¡?BzvîÛBŸÁ̧Wÿ®þ«—Ï‘ú ó3S“ã7ƆzÈíÍõÕåÅùYi‰qQaÁ>ÎöÖæÆ0õUU”ŽT”“‘F„2‘ÀǸǭ§WžÆø:ºY»â¿¤_Tÿ)öCù1øû0÷1öeäÁóOž±¹µ½³‡O@pXT\bZV~qyu}s;¹w`hìÆøäÔÌüRÿùËW¸úNý%î/“û¿-Êý‡„ÜÇr¿¿·›ÜÑÖÜXWSYVR˜— r?!.:",$ÐßÇÓÍÙÁÖÊÜÄP_GKCí|ÿP@§b÷.Ⱦ bŸcÝZ*û«û÷‰ì3Ýÿ¢ùô¿_„þFÖMìœ\<|8úbR{eåªSU×ÔÖ502µ°¶stq÷ò ¸xérdL|bJzVN~QiyUm}SK;©«§o…þ-úS(ô|)ôÿ`ØÐÿ´²ú€úw'ǯõ÷t¶5ÕU•åe¦&ÄF„^ô÷vs²³4©¯ Rÿè¡ýò²ÒRâ»aÕm„YÌGäCð1î©Ô/Bž¨ùšoÅ‹€ê?f? Ÿ?xÂs^€¢â’Ò²òàb_ľ©¥“›·ÿÅЈ؄Ô̼¢²ªº¦¶Îž¡Q þÝÿõ—Íý?h¹ÿn…ÜŸ¹ äþðÕ¾2©½¥©¾¶ª¼´(?'+=%1>&òrHP€¯—»‹£µ…©‘®¶¦ºêÙ¯¯¨(Ï4€ã9‰ŠîF{¯ëºAD¤—¡÷Þ†ÞAzïC:Cï½w†*]zŠ€ )b‰›Mv½HN’³Ç}ßwf`†®7{Äy®¿Ë÷ù}ÿG ^€¢ð.¸ÐøwÀþ•KΟ=sêä‰uöY(ìEÏ>3÷™³=ú‡±¦¡üÄÉÓgοxéʵ}t\¼üBÂb é”Õ4µõ MÌ-mì\=¼}ñAaÑq‰)éY¹E¥ÄªšºÆæÖö®ž¾ÁáGcO¦@èÏî!ôÿ¤¢ÿ©š¿½ú?!õçgŸ=$!õ+ËŠr3S¢ Áxœ‡‹½µ…‰J}q!~´Ü¨é®]¹ŒÌ‡äCð)ܯ[¿…ñÝ0Ùe¿füÐø‡ô¯Á_¸o@öÙ9@ƾŽ‰…µ½‹LˆNHÉÌ-*«Dê“O>}Õ_êÿô©«¿µû"÷wÍýYû€ý±GÃ}=]í­Íu5UÄÒ¢üܬô”ĸhBhÞ×ÛÃÕÉÞƲ¯­©¦¬ n@aAð2îÝEì߸¶ÆþqFö0ÙgýìŒþ +-úßÒп ЧÝ=n^!PtrŠ*êX€¾…•­ƒ³›'Î/ 8,2&>)5#;¯°¸¬¢º¶¾©¥­£»—DŸxBæÅüÂË%Jè¿e ýßv ýÿ÷vÈl«þÛÕ þTl„Lênoi¨­,-ÌÉHŽ +-ò÷vw²³27ÒÓÒPQE©ÏM]mXt‘ù ò!ù|ö›˜gÀüȇÎæÁÿˆ~ ?€¸s°¼ÁÛÀÀØWÑÐÒ32·²sr÷ö +-ŠOÉÈ-,­¬mhiï&‘GÆú‹¯–WVßîõ?6÷—^.Ì¿˜¹ÿdbæ>©·«£­¥±¾¶ª¢¬¸ /;#5)>:",8Àçéæì`cinb¨§­©®¢(' ž†/xð ¼ ÙoãÌi:ö³:ÄdŸ9 ³ ú`Ù¿>ú ØíS`±/\¤åÜNn> è9y%U ¬Ž¾‘©…•£‹»—`HxTlBrZfN~aIye̓†æ‡íÝ}ýdú'Aè?Ÿ›¡ÿÃë•7û9ôßo­þ»ÿüBQiqnfzjbl˜ÜÕ¯©(-ÈIOŽ‹ ôórs´µ45ÔŪ)ÉKKÀÔçä¸s›}d> Ÿ>õ[xðì8ŒßnüÐð‡òøAñ÷ÏœEì_§Üœ(ö¥å•Ô°º†¦–¶Žn^~aQqÉé9¥5Pý> þPn]ýwŸ¸ú™û?€ÜŸŸ›}NË}r_wgÛæ†Õ•å%…y9™iIñ1‘á!þ>^îζV¦Fú:Xu%yIqŒ7|ˆý«àìŸ:qüÛc}˜ûLö™Ã0»¢B,öI„>m«ÙØ98yø1¢R² +-ʪZºÆf÷­í]=¼}ñA¡„¨ØÄ”ô¬Ü‚¢RbUM]csk{Wi`p˜úÏh¡ÿ†þ?ÿõóÏŒ¡ÿû~ ý÷{W¿«­¹¾†XRžàëéê`cab £©ª(+EI}v6úšƒæƒÊ?FûMÊo6ýОfëÿÀ:ÿˆ~?êýuöA°ßãâ“’UTÕÔ10¹oãàêé—”ž]PRQSßÜÖÕG›˜šž™[\¢¨ÿË>P÷Üÿm=÷)쯾yMËýgߣÜ õtµ·67ÖÕTK‹òûÉ ±Q„Ð ¼¯·»‹£õ}3c]- U%yY)qQŒ ˆv6Ö[7A@öÏ"ö¿/ƒÉ>s6 =ú_Сp#úh§¯ÐпÇÅÃ/(,*!-§ ¬¦©­ghbnicïäêó ‹ˆŽKLÉÈÎ+(.«¨®­ojiëèîí'ŒŽON=F¡ÿr§ÐÿcŸ„þû½©?:<€Ô¯&–äg§%ÆF„øxºØ[[ëkk¨(ÈHŠb@êß½Ãú:ôQç;v%>ûÍÐoÁùÁ=Î65ü‘ü~Šû´'ríÆMjìcD%eT4´õ-¬\<}B#b“Ò²óKˆÕHýý¨þGäþ*Êý—(÷§Ÿ>™"“z»;ÚZëk«*ÊŠ r³ÒSã¢#‚|½=\ìm,ÍM õ´5Õ”d¥%D…ùy¸@°¢cðò%ÄþIø@Ž®±É>sÐì€>Ë:út п}ç.(9~!a1Ii9Eu,@ßÔÂÊÖÁÙÍ矔 +-Ð/,)¯¬~ÐÐü°½³§¯pøÑØãÉ©ïAèÏ-,.½Z~½²º†þv¡ÿ©›¿gõ{;[›êª‰ÅùY©‰1„<ÎÃÙÞÊÜHOK]Y^ZBDˆšú¨ä ú0ô)æCòiào!ýšØãl÷ Ù৸؇µñÒ0ö¹ù„D$¤å•ÕµôŒÌ­ì=|ð!1‰iYùÅÄ꺦ÖÎÞáÑý¨þ&öÿKŸû¿o™û+¯—_--.ÌÍ‚ÜŸš|<öhx°¿¯»³ýaSÃêÊò’¼ìŒÔ¤ø˜Èð?œ§›³ƒ-•}uE9iI1a!~^®{0 û  .œ?{\ƒëì³0²ÿ“ýÏv6£ÿåfôÑ>Ÿƒû 2îÖw}Nn^!qIy%U ¬Ž¾‘©…µ£‹»—P(!*6!9-3'¿¨”XUS×ØÜÚÑÕC€¡?ñ„þÌ‹ùúË+oVÜï¡ÿ~Oê?¢ª_^œ—•šCÆãÜí,ÍŒt±jJrR₼\´ÔGw‚Òq_Sȧ‚¿•ô[qþÕžfÛŸÀšýH~èþûà™\¾ŠbŸƒ‹WPX\JNI «kdfeçìŽÃbS³òŠË÷·ú;åþŒ¹ÿoŠû?‚Ü_¹¿0ÿbæþÈýÁROW{ksc]M%±´(?'3-9!6Šèïãåîâ`keaj¤¯ƒìËËHŠ‰ ðröow‹z"öofÿK&ûŸõl@ŸúôSÑ_ßfúœÜ|q)Yˆ¾–®±Ù}k;'Wo_|PXDt\bJzVnAqYEUm}SK[Gwo?yh…þôóÙ¹ùmBÿ×ÝBÿSÜÿR¿ +-¨Ÿ™šMö÷vw²µ45ÔŪ*ÊJŠax8ï²±RS®3}ÐùTò´ÿâ?ä'°F?‚ÿí"<~âÔé³ç.\ºzýo·XÙîrò`ĤdU±º†f–vNî8ÿ`BtBj&P¿jŸ«¿{îÿŠrÿݦܟŸ›}> stdˆLêíîhki¬¯­"–äf¥§$ÆEBƒð¾Þ.ŽvÖ÷ÍŒ tµ4T•äe¤ÄE0|Üœ4ö×NÂì¯å>“ýÏrȩ̀CÿÀFôOô/€„»ÐgecçàäáĈJHÉ*(«ij뚘[ÚØ;¹zâüþÇ~}FEyfß$›£kv÷ –+R¥½AAE * #U@z—¢ ¤ Ò¤Kï½w°Š 3È''j<›äd7ÙçyßiÈŒÀ¸»á~æ÷þæÿøø†„EDÇ%$§¦gåä—UT×54·¶wõô |ûç/p„É©i2„þwˆù¯>åÐÿ}©êg¤&ÆF†õí°æfMŒ¡úªŠr2b¢Â‚HêÃcFÑ¡T>C|.Òùá3~è>‹ýÍ[`€:=(!#§¨ª¡Ô76¹hfµsrõòBÔÏøôÕ_JîÿÝìÓ(äé©IÂîÅsÈþ@_OW{kSCmuEYqaÞã¬ôÔ䄸èðÐ@OWç[vÖV(û'>¤¥¡ª¬ '#ö²¿—ÉþÆõ(û_!쯙Ëþç«ì¯¨ùŒ+úà˜é§Ì +-8€¾ °@_#§¨¬¦¡­{ä(}K¬½ãmw/߀ »a‘1ñ‰)iÙ9ùE%å•5uÍmݽýƒÃ#£ ôqxâ$išB¥±Bÿ 3ôþäBÿwÕ÷ótu´ꛚèik¨(ÈJK@RëfÁýõ+ùsµçL÷ŸyÎþ3á_Ç „ È®€Gá^!‘ƒÒ² +-*Úz†Æ&¦fæX;GW/? ~ì +-QŸýßæçþϬÜÍÈý•2Mš$âq ÷GG†û{»:Úšëj*ËJŠòs²2ÒRã¢#ÂîøzºÝv´·±²¸våâù³Æ€ý#ºÚjÊŠrÀþaäU¸c;²+lìÿe•ý=  ÿ·¿£èoFÑßCG_R#¯¨¢¦©Ð7µÐÿõ#èê[™_1=‹¨¯®¬ +%~`¿8exÉ›7mÜÀ†>Jþ|îyB~Q¿ øQ÷éìÃmÏÂ]{÷G¡¸”¬‚²:TßÈÄôŠ9ÖÖÑÕsE©Ï•}¸ô܇ì#¹°?;C¥ISDÂÄø’ûý½Ým-Mõ5Uå%O +-r³!ûñ1‘÷ïøz¹»8ÙÛ`-¯›]º`rú”áÑ#º:šj*Šòi&û»ìo ¿ ßÇþªûŸþ,ˆ>Œ7ˆþ¶¯¿èó  +-‹—”–•WRQ×ÔÑÓ?v ùªù›¶ήÞ~!¡áQ±úó +-‹K+ªkšZÛ»zú†FFú8D1Ÿ]|.bÁëp±Ÿá>Û¾€Ø‡êïÙ'ÕÇ@õuúgúV+Oýsÿ'˜ûoÙrä>yzj’€Ç½@Øèëélomj¨­®(-.Ì{œùèa҃بðÐà;~Þ®N¶7o˜3Ø××ÓÑTWQ’—•–GÙÛ_†0ÖÓ÷e•ý<‹CŸA'D_h?D_FVAIU]ë‚þ™s¦}+k»[Înž>þ!aÑq É©éY9ùE%e•5uÍm]½ýƒÃ#£ÏÆÆ'ðÄIÒ4…Jc }ýCÞåsÔ~yÚ¿tõ#Yê_@ÕWS–ÇH‰‰îäß³ ž1=õè3Åÿï0¿˜_¦û€ýuë±Ï^†ßìÜÃ/¸_TL +-#¯¬®¥«¿xõ_½þqy«¿äãÆ>÷ܧQ)Ó¤I"7>öltdx°¿§«£µ¹±®º²¬¸0?'+=59!.:<4$ÐßÇÃÕù–õ ó«—MÏ1:qL_ï–º*`_FRü Ø~„ým[6󭲿:\Ñ_;ýí,ô%¤dä”U5´68~Òøìù‹W®YXYÛ;Þvóô ºŸ˜’–‘[PTR^USßØÒÖÙÝÛ?ôô[úãâ‰L¡ÿÝKh>Dÿí[ú?-ús/jâ/'ù9«ÿŠ]ýáþžy껾«¾¤˜¨° ÿî@}Ðnë7¼–~Ã,ò¹ý9¯Ã…~Ô}”}úÊ€·!T7?xŠIõÕ€úÇ™ê{AõãS3s +-ÿxêó´ssþòþÜõp°?C£ISDÂÄøÌýÁþÞîζ–ÆúšÊò’¢üÜ쌴”ĸ舰»A>žn·í¬­,®ÑÙ78|HKCUIAVF +-²/ÙßÉýµ«ì¯Àyúë˜èoâÛ¼¢¿{/Dÿ€Š¾š†¶.ýë–X{'w/ß;Á÷îGÆ&òþ½ _/÷ÛŽö6X‹kW.ž?k|ò8`_[CUYANFJ‚Î>ؘí`eø61Ù_·ÊþJœ%¢¿OPX¢‘STVÓÔÖ=rÔðÔi“ —Ì®[Þ´uprñðö»‹¢ŸWX\VQ]×ÐÜÚÑÕÓ?8<2úll‡GBŸ +-CŸŽþâC=¤%‹ÿÎ~¤aÞ;'õI¨ú=­µ¨úIP}¨>–¥¾2KýíÛ¶À f¥>ýÿöég²ÏŒ}¸4àuÈA}3s¬T?8 ¨Ÿ–™[XRYÛØÚ Ô}>>A$‘©³/ÙÕÿuY©ÏóÞÍûÉþÜ܇ì#¹°?K£R¦I“DA NM“)4€>jþk4ôÁ‰/ý™e`]ý_ÙÔÿþå, ª?þ|¨ß Ô¯,-ÌÍLê‡õì°æf¦&F†¨ú˜¹ê#÷ Ïw Ûù.MüÏÞ7‹Ÿ±7k½k3O}um=C#S3 ¬“T?*>)-+·¨Q¿Qԧ;üž‹úùßÇkmpž9¹Ïbì3÷û34 +-™4E$LÐÙïïíîhkn¬«©,+.ÊÏÉJOMNˆ‹ +- ôóöpuv°½y°Áäô)CÀ¾Ž¦šŠ¢¨ÿt ·³µ ¨_”›•–Ô÷vê[ êèi«¿£þÆÿ°_×_Q {À¸g×ãquõzõ(âŠt—Ø…¢"‚ŠHwÒ-ÝÝÝÝÝÝÝ9ÉÌ€{×ZÖ=Æ÷}g†™aòèÂQ¾Ãó|Þç…êéOTŸŠþJm_éѹO›œ-¿@õwÒ¨ÏÁÍOR_JFNAU ¨omïÔNHÍÌ-*«ªê÷@õQI}8þ^_ê/'{«cŸäþG†sŠ€ŸÄ¢Qˆñ±‘¡¾ž®ŽÖæƺšªò’¢üÀ~b\tDH Ÿ·‡«ãKKS#=-uEù'²€}‰W/‰‹Ùg§aßžÿ.Ìþ¿6ØÿÎo>ú?Q«KBÿßôYˆèŸ!¡/"váòµYô•T5´õ ͬlí\=}üƒB#bâ!ú¹Å¥UµõM-mݽýƒÃ}$ +-ƒÅáÁЧ ?3‡þß«ú Á_¤ˆkìú€}0ëÞ¾êã0(¢ú­MuUeEy™© 1áA¾ž.ö@}}-U9)’úüÜtêÃòR»;Çü¯*ýBôÏf‡¢þVõ?u¨/ Õ—”’•STÕÒ72ê{ú…Ç$¦fåAõ›Z;iÕÕ‡¿¿õ£þÊr·R÷Í}2ûÓ<‹A!'ÆFàÜïêhki¬¯­ª(-*ÈÍJOì‡ùûx¸:ÙÛZšêik¨Bö¥ïKö/_äãád?w†Ä>ó,û¤Oâjt~Ú`ÿ8Fèÿ<ýÝ}&€þo¬ ¿}.~A‘óý›·ïJ=|$÷LIUSGßÐÄÜÊÖÁÙÍÓ7 8,2&>)5#;¯ ¸¬¢º¶¡©µ½“ˆþèø™Äú$ó!útCÿóJ†þRâ3îàšÊAUŸ8ö)êcQcÃ=m$õ³Rcƒý<]lÌôµÔåd¥$oõ…úçNŸ8 +-Ôgêÿ‡¢þ&X]Ò`ûģºOû ;›(ꃵ°— ªâô9~áó—®Ý’| ûTQM¨oãàê铘–•W\^]×ÔÖÙ30<†@a)êƒXÀ!°>Ô_MîVÊ>eî Îý÷ïˆîö§¸I 91> +-Ùïîloij¨­®(+.ÈÍÎHMŠ‰ ö÷ñts¶·µ276Ô×ÑPUz&÷²ó`_DŸ‡ ° +-²ÏÂ|€ °¿{û?o°ÿcô7ÍC/ýc'ú\¼üB"ç/^™E_AYMSçù  k;gw/߀ð¨Ø„ä´Ìœ¼Â’²ÊšºÆæÖö®ž¾¡‘±q +-Ħ¨CŸý•ýeŠÏ°‚khÇÂê#€ú½]mÍõÕåÅùYi‰±Áþ^®6ÆϵՔžÊ>¸{ëÚ¥óÂü<$õY2íå¥UîÔÿöæÏeć¬>ŒHÎ>¦ƒ,Dõ9y úwy+sŸ:÷!û”¹ØÇObÑ(ÄøèÈÐ@_OW{ksC]ueYIa`?9!6*,8À×ËÍÙÁÎÚÜä…¾Ž¦š2`ÿ¡ÔÝÛ€ý‹çE„û€ýÇX#²¿wû›6ØÿniôwÌCŸˆ¾(@ÿú­;÷È<~ +-Ð×Ò}ndjaýÒÑÅÝÛ/ —ÑÏ/*)¯ª©olië £?@a°8@Dc'q„©iÊЧAECŸqï>Óà +-®1ûsÔÿ4«þ[¢ú“h$QýŽ–†ÚÊÒ‚œŒäø¨°@wç—V¦†ºš*Ïž<¼ûÆ• ¢‚|\ì@}ÖÃÌöïÙ½kçŽíÛ¶’jK«þ·4Ÿ6@têŠ0=;wì`>ÌzüÔYv.>!¨þûŸ(¨hêšZ½töð ‹ŠOÉÈ),­¬mhéèîGbHê¿]Gê/½¥é_ûóç>dŸ2÷§§¸I,‰ ³ßÙÞÒÔP[]QZ\ØOMŠìùûx¸:ÙÛXšèi««(Ê“Ù¿z‰ÂþéYö÷öw‘Ù‡«aóûßû-þ¶_Ièï!¢ø뱓Dôù„Åú7$$ïKCôU5´õ Í­líÝ<}‚Ã"Ièç–”UV×54·vtõôGÆÆ(€>ž†þ,ú3 ×ýÙ¡OEeæÓsÏÐ~ý[+@èÔÿªÿû4~ƒœêïéhmêæf¦$D‡ùz8Û[›½ÐÓTU“‘ºsóêE1!>nö³§Ž³>t4—¤þ/[`k«ÿ#D§þæÍ0?³êú ªÏÁÍ/$vñêMI)9U-ýfÖö.ž¾AáÑ )™¹PýÆÖŽžþ¡Ñ  >a|ß¾û“¢þ—µUUÑ[)ü´ì¦°Ò1CaÿÕØG!ÆÇF†úzºÚ[›êª+ËŠ ó²3û1‘aÁþ>žnNö¶VfƆzÚªŠòOd¥ïKJÜ€ì ðqs’Ù?|ˆÊþöm0?ì÷·Bôè³sòð +-‹]  ÿLIUCGßÐÄÜÊÎÁÙÍË7 8<*6!9-3'¿°¤¼²¦¾±¹  ß?8<26Da°8üDÿ50¢¿ª¡O×;š¢}š{ó¸اªÿ…ªþû·¯ÿø}š€Ã ˆêw¶6ÕU•åe¥&Æ„ûyºüŸýúð‰2Ïã8žÜ]÷?äþ»·À}ˆýù¹™i,59¾Ì~Gksc]MeyIa~Þ³ÌôÇÉ€ýˆÐ@?OW'{K3c}Íö/œGØ?qœ… Ç>Ž}’=öwÁÛ<ú´úœú’Ò²×o)ÞQQÓÔ506·ºïàìæùÀ?(,2 Ÿ–¡_TZ^U[ßÔÒÖÙÝ ÐŸDc¦¦gúHèúîîóWÞªýí<ûø/Ç>Pÿ#¬þ¬>51:4ÐÛÙÖT_]^\“™–œäëåê`cn¤§©zGáúU)qQ‘³|§¸€úL t4ÔT‡“‘ü¼¬þ¾õêÿùg„»¢¨ÿ3 ùCTÔ4ô LÇNppâ?+"&!uõºÂUM=c W/¿àð˜Ää'™¹ÅåÕõÍm]½@ý vEýÐu|þ}gÕÿÆí;¾oÇ·ØÿLÀ>’û€ýÙé) zr|ldh°¿·«£­¥±¾¦ª¼´¨Ç~R|LDh¿§›³ý}+3cM5•;Š·û’€}Á3|§¸÷Øß•o3èX…>„¾€ úêZº&æV¶Îî^‚Ã"c¦¤edå<Q\ZQ]ÛÐÔÒŽ ?Bc§ffç@è/£ÿ”„þ'}d›4Uæ#3û´î­àÆîïˆ!êC±6 JîÕÜ4=1:<ØÛÕÞ\_SQò"7ëIJblD°¿·›ã} }-5eŲW$ÄÎ òórqœ8Æt”žRŸ¨ÿoX}$ö öº w„¨ŽèŸ°úà‚È(€ú‡ié2õ¹yÏž»péŠì Ee5m}K[G7oÿˆØ¤”ô¬¼%5 Íí]½ƒÃchìÌ(ƒp"pêï´ú_3ÿkµA¬8¾yÞ_ðîC¹Øÿß#ì¿~57;3…EONàØïîloiª¯­ªì?ÏÉÊHKyìÿÀËÍÙᾕ¹±®ÌþuYiˆ}˜}N„}Z˜ý{ìï‚÷]èóBè‹^\F_ùžº–ž¡‰¹µ­ƒ‹»—o@px@?õÉÓì\€~YEu]Csk{WOßÀËáQýé™ÙyýEýï}b³#€þ·å·†þõëÛqöqê‚ÔÔÔŸ™BOŽ öu··4ÔV–æe§§&ÅE†ø¸;ÙZ™h«ß½}óšôå‹ç…Îœæ>Évœùè0[ʃd¤ÐfÿµÿΫ¿wB¤d)9Lw„‘ù8ÛIžÓBç/^–¾v붊ºŽ©•³»O@hdÜÃÔŒìç…¥•µ -Ý}@ýIô¤þ þûÕêÿè¯7}m¬jŽ-¹¿aî€sÏþ<Ì> +-°?ür ¯§³½µ©¡®º¢¬øÅ2û ±QaÁ¾^î.¶Öæ&†ºZê÷ðì‹Š +-ðñrsr챿ËÞ–Ñgá/п$%-{Cþ6@_[ÏÐÔÂÚÎÑÅÃÛ70$<*.ñŒ~~aIYeM]cskÇ2úã“( @  ý¯ ¿eóWk¿æ­…ÿ`•úŸqêÿúv§>frläewGkcmUYÑógÅG…>ðp¶·63ÔÕPQ’—“‘àãádgead £¡¦£%%'‹WÿïÛ­>îŒö!ê“’ƒÔ§¦¡c`daeç<ÅwVXT\RFN^鞆®‘™µ½‹çƒÀ°èøGŸ>Ë/*«ªklíèé92>‰™š™ýŸ7‹oÅ©ÿyGÕßÀãM‘äØBî°ÿÇ>ì>ÄþÜÌ4ƒš…Ùïêhmn¬«®,+.ÌÏÍ~ú$õQblTxH€¯·»‹£­µ…‰¡`_ù¶<Äþ¥‹{ìïη9ô)©¨ÓÒ#èóðò/£/s F_C[ÏÈÔÂÆÎÑÕÃÛ/0$":.1ùqzæ³<€~yeM}cK[GWoÿàÐ@™šž›‡B}0h}x«±™ ­îwüêp;û¸þ­ ¿¾gŸ˜úÿ}=?;…Aõ{:[›êªË‹ós2Ó’¢Ãƒ|=]lÌõ4Uï(\¿*%!&r–ÿljcL ô´ÔT‡ÀfÁdaõûˆúÛ.õ SVܤ>-ýQ¦c'8¸xùEÄ$¤®ÞPPVÕÒ3¶°qpõò +-IHNËÌ)(.¯®kjëìéGa¦gçAüê½¾5Ç÷Ûw·Lÿ†Éñ­;ÿ‚w™}èHÜìÏNOaГ€ý¡Á~À~[sc}Mey `ÿYf:`?.:<$Ð×ÛÃÅÑÎÚÂÔPO[bÿÆ5)ˆ}!À>'Ûû»çm} +-}€>+‚þ9<úwU5´õL-mìœ\=|üC#¢ã“pè•–WÕÖ7µ´uvÃèML¢±S3³s¯Ö ¿Aè±ÕLîÚG°Àåñá··“쯨ÿeEýw‹ úÓXÔÄèÐ@oW[s}MEIAnÖ“”Ä؈`o7Çû–&úÚjÊŠ7e¯\ºpNè /÷I¶ãÌG€ÑR¤ #…»ûÛ¬>rG+©Oqò—Ãà¯"óq¶“ܧÏ¿pIúÚMÅ»jÚ&–¶NnÞþ!±I)éY¹/J*jê›Ûºz†F'PXXý…Åw+êÙ)õ78?b×G$:ððoÞýUŸø ˆý÷û¯_!ìö{»;ÛZšêkªÊKŠ +-òû““â¢#Bý|<\ìl,Môµ5TïâÙ?'$À¿Â>=íaj*Ê=öÿÒoKè32CèsáЇп© Ð×Ñ72³´±wróôñ +-ˆè§edå<èWTÕ64µ´ô^ôQ0úóúÀ|ý¥%(ô×£¿Uóñ›ƒ•_ZýVè_ãþzö·_’?؇½æ¼nn‹žìëjoi¨­,-ÌËNOMŠ‹ ðqw¶³25ÔQW¹}KNæòEQa>NvVF:8öÁb‚cß6Æ>‘Ôÿ ¤>9”ú4t Œ,¬ìœ<|¢â’2r·”T4t ͬìœ=|B£â¦fdç–VÖ6´´w÷ B˜™{.ÜÉ\Hêï€úDÐ'4£Ü ¬ŽšcsîãÙGri ff~vf +-‹FM ì·ök«*JñìÇÇD„ùùxº:ÙÛXšéëö•pì‹áÙgì3 ìƒtØcÿ¯ù¶ˆþ1ýÓÿg¿¾‚¢J³Ž?lÕŒµ[kíŽ3³ëŽ9ŒŽ£ŠŠ‚ Š¢ˆ‚0 ( +-‚dArÎ9‹ (HÎ4±É9§N4(Q‘Â݇ý¾{o÷í€,²ƒPÊyjžnuõ9?þ—¢I\B +-A_E]K÷‘™¥ƒ‹»—_`Hxt‚~fN^a @ŸX×ÐÜ +-Ðïí"‘©4:@ }6ôÙî`qó¹J ;:üwlô;>üöV—}õÑØêO@õ)Ã}Ý­MõÄJBq~vzjR|Lx°Ÿ§«ƒ­¥‰Á} EùëÒ—EÏ ñóñò:°oÏ®í[¡úhìÿ9×ÏûKý`‰~øq3X¡]{ö8ÄsŒO@èœèe éòwU4ï˜ZÙ:¸zùGÄG}3ÍŸc[¿…ªcq÷ÿ7ûŒÜÇÙGr²O§QÉ$À~owg{ksC±ª¢¬¤0/'3=-åÙÓ8À~ ¯—»³ƒÝCK3£ºZê*}Àþ¥ €}~À>`ßÞÝëìé³\ôqô”TÔµu›YÙØ9º¸{û†FDÇ%$=ÐÏ/*!TTë1ô‡Hê}„þ‚>àzË }Ü|ôæpïß² ƒ~üøæ¹^.ýü”p¨ÿvz +-œòè…4ÔßÓÙÖÜP[U^Ró*-9!62ÄßÛÍñ‘µ™¡®–ªÒm9Iñ‹"gNŸ<~äð¯û÷îÞ±í§Íÿøaˆý¿~îØçJýo©ÿ·ïÀmÞ²mÇîŸ÷ÿzøèñ“§…Ï_¼rMFš–ž‘™µ“›w@HdlBò‹W9%åUµ Íí]=ýC$êÈ(„©é·¨úê¯ôçY×ï=woàÕÁ¶{óËrc²ÉýIû öûQöë‰Õ„’Â|ûÑ!~Þî.Žv6–fÆtµÕU” ûRâûÇ×Ùÿ:æÓÑ? Ð?É‚¾<@_C[×ÀØÜÊÆÞÑÕÃÛ/(4"æ D?#+7¿¨”PY] Ðoëèêès¢ÏúKBóÑ“cz?Ã> ú™Á¿û«ûˆú0õg¦&ÇúTòÐ@oW{Kc]uEianæ˔ĸ¨Ð@wgû‡æÆúÚêÊ +-7e¥®Š]8+xêïoùyÏÎí[ÐØ÷úÖØÿÓçSÔÿþÇþkËö õòðžà<{A쪔ì-…{ê:úÆ6öξaQOŸ¿ÌÌ-,­¨®kliïê"#êONͬ1õÙÐgMîÞÀ«c–eùðí[ûhî³±ÿz”>B¥†!û]m€ýÚêJBi`?ãÅó¤„'Ñ¡A~Þ.Žö6VfƺÚ*J +-8û‚ëì%³lô…QôeåúªÚz}[{'Wÿ ÐH&úE¥å•5µõM-ý¾Áa2…62:Ðæs Ï¶þKCŸË|ìâ òÓœƒÑ¹Ï¸¼…Ùÿ옠_ +-Uî=ªþ›1:<<Ð×ÝÑÚT_SYV”—•þüY|txŸ§Ëc[Kƒû*Šò7¤%.‹žà;väÐý{wíØÊûȱ®tìs¥þ·˜ú õ7ÔÿiëŽ]{Aê9vRàŒˆèeÉßoÈßUѼo`jiëàê韔šž•WTVYSßÔÚÑÝ78L¡ÑÇÀ¶À]A^ ÁÏõŸÕQ™æ³ì¾‚,ÙÈ¿<÷YûoŒý9øH&ûcô… Øïëì·4Õ×ÖT–ös³Pöc"Cƒü½=\ím­Ì ô´5T•äåpöOö¯³ÿ…Ï’Ñß‚£Ï‹ /" +-З†è+«jè蘘[Cô=}üƒÃ"câ“S_¾ÊÎ-(.+¯ª©m` ?ÄD }˜oÈ)³ ÿ‰¡?n?ãæЋƒ§6gäô9Ü_ì3¿ûHÃÍ‚Kžœ€êSHƒ}=mÍ Ä*Bq~vFZòÓ؈/7ÇGÖf†zZªJwäd®]¹t^øô©ãGaìïÞ¹ ‰ýﱿ;öWäPñeBWé›…Rÿç_þvôÄ)Aáó—®\“¹yGIMKÏÈÌÚÎÉÍ; $26!9-#;¿˜PElhnëìé$Qh£c`]¦gÔêc©¿jê/Œ>n>Sû)–aèÏ]¬îRî³²¸ØEØÀØo@Ø/.ì¿LMNì‡ùûxº:AöM ôtPöeöE„×Ùÿæ“Ñ?ˆ£/vE¢¯¨¬ª©£ghbamûØÉÍÓ' 8,*C?¯°¸¬¢ª¦®¡©µ½³» O"SitpÄãúïô?.ï"賚ÜÜ,j>rr î'X³ƒŸY\Ü_uõç¡úïÞNO3¡’†ú{»Ú[k«ËK +-r^½HIŒ‹ +- ôqw¶ha¬¯£~OáÖu©«bÎ +-ñóñò:°oï®íœ±ÿ-Wì¯À¡r¢ÏLýl©àÏ1>¡s¢—%¤¯ßR¼§¡óÀØÂæ±³‡o`XÔ“Ä”—™¹…¥åÕµ-í]½ýC$êÈèëñ‰©é·ˆúó«§þÇÑŸC3ó~’c8³[?ÜýOÌ}ôÙÈ“ác‘ÜìÓiT2 °ßÛÝÙد«©*/+.ÈË~Ù €ì?¶µ671„ì+Cö¥%ÄÅDQöy—Áþ¿Lë³b³<ôpôo#èëCô=vvóô GÐOK‡è—ô‰uÍúýƒC$ +-u„>úšýÅr{ñÐç0ŸyrȽAçÇἃ|BéGnwm±¨ÿSfjrªOèíîhmª«©(-ÊËJþ,>:<ÈÏÓÅÁÖÒÔ@WSåîí¿KŠ_9s”¸Xfìoú;v­à­2b¥.•m™°UâHým;w#©üÔia‘‹â’2r·ïªjêšZ=rpõò ‰OJMÏÊ+*«¨©kjíèî&Séc¯Ç'§f0õ?0Ô_ÍÔçDŸcÙ6eùÛ7Ãéþ’s¡9ýwû Pöû!û­Í uĪŠ²âB&ûQáÁ¾žnNY[@ö5U•!û’WÖÙÿ*æÿEÿ&@_ ¢ojñ¢ïå÷ôYJZzf@ŸPQM¬g¢?̉þ,ŽþRV~Ðg1Ÿ|Œû×ø øcðƒËûûkDý¹÷ðŒ''ÞŒÑi”áÁ¾žÎ¶æzb%¡8?;#-ùilDˆ¿·›“µ¹‘ž¶šò›²Hì òŸ@bKìoDÔßÀˆý•»TöeBS3õ¿g¤þ>ú¼|üBg/ˆ]•’½¥ ¬®­odþÐÎÉÝ; $26!9-#;¿˜PElhnëìé$Qhô±7“à›E^ WM}w¹ÑÇ7p‚¹ø öObëDzs,¹¿Ä·]<|°çÏβ²?B¥àì7Ö«+ÊJ +-ór2ÓÓRžAöC|½Üœ!û¦†ú:šjÊŠ·qöÖÙÿ¢ç@ÿžšæ}}gw/ßÀðhúùE%„ÊêZ€~[GWO@ŸL¡€n{ÂmGžý%î;úðâÞs\¼7àüœQtàG„~ôòÀáaw·6ØÇÕ‡ì#ý6û\ñÄÙ¯³ (¯4ŒãeʘTrÅHÔXeÐàĸâ'f4ê0â¸EEP ˆŠŠ" ˆ " +-²ïû¾ÓtÓ; ÍÖ +-ÌÔH2©š÷œó¯¿n Â2ˆ:œ«x×T¿Ï/ÿ† 7‚…|^UyqANfjb\tø£à Wç‹çlÏœ2;rpï®Û¾ß´á«5+`±óçÎ6àÄþXNì)û=¡Ï¤þ4õÿ@SѲ(õ·lÛi¼÷§#ÇOYÙsrvõô¹—”–™[PR^Å%2E#t‚ +-¾0’ú]¿Ð¯iÕïŽ>ç©ø-ô™ãka»ã¹VwpÝïoîk°îûÍÊƆz™T,¬ãóªý"`?#59°/Ø÷@ì;žµAìÁìo×bÎûoäú ÕèoÅè›9vÒÂÊÆÞÑéÊ57›¾ýÐð'1€~F¿´£/’`ô›}ýNFÜn×ÞÇÐgÌ'™…Ç%s¯ä>B?†_…Üǽ¥Íþp«¯Ž}p¤mÔWÈ%"AmuEIa^Vzr|LdXÈÝ€[^n×.?kmyâ¨ÉþÝF?þ°ù»¯×®Z¾˜Æ¾ŽýuÆÁXÉV‡–ýЃÐï}¸¤qÝR9IýíFÿØèèIËŸÏž¿|ÍÝË7à^HXdL|rzv^aiEumH*GêC' J@곩ÿ²Õï–úZèsÌ'È&‡ºZ\÷»ç~ßÙA?b¿ ³¯K% û¥Ey˜ý¸˜'á¡!ˆ}oľ“£=aßd„ýÿ×Oôgõ„þ„¾¥•­ýy„¾' DÑOIËÌÁèWÕÔ +-Ôè·RôáÔ5±íû«C_Û|ÜXho|…BQ¯~ +-¦–ǸV×ýáŽ}ª>fþ,UksSC½L"ðªÊK +-r3Ó’â¢#BÝöñt½êähgmqÂÔdßî¿ÑØ_Bb:‰}]û˜}˜ê-Uó˜FãcB·„O ]’.ÒTH}6õ¿þnóÛvï79zÂÒú¬ã¥«nž·nß}—”–•[PR^Å%²zHýV|W8õA}ú% êk£ÿìc>=A|„ôÑûc°ëþ sŸù jöáj”À¾ ±_[ìû™i)‰„ýûA˜}ľ­•åI3ľ1°¿e„ý7ú +-ýÍ€¾Bß”¢ïìâîéí€Ðˆz +-è§ú…Å¥}¡Æ«hTÂ|†þo=Ä >sMóÉÞˆøõõr¹\Æ>ø‘Ÿºß†?I»šýW#ö‰']LìÂÛZš¡ÚD‚ÚêŠÒ¼¬ôäø§OÂBîÝñ½éîrù‚½Íióc‡ìù»FìÏ™9C­uÒGÆë ­’©ÙR{:&}’ú“>ÖLý¯6lú~ëÎ]{63?cãpáŠË›~wî=|üäiBJzv^QiEumH*W€úmðUubõ»ºhê£úlYôÛÛ{ºAt„ô1éòü$øY÷5rÿ×þç>eÿ_,û-ð!0ûBAmMUEiqa^—ý_oO7g§ó”ý\ö GØß@Ñ_èoä onimë@Ð÷Aè? ôã“RÒ³rò ‹Ëô¥}d­ŠH«†¶ÏèÿGë-37ͽAbÁÜÐØd2©T¢~R)¦í»OrŸÃþ0Ç>GûXýŽögmʆz©¸Ž_SYVœŸ“‘šþ(8ÐßÇÃÕÙ霕ÅqÓŸökžÁôOô¦N™’Áì¹ó?ÿr‰!Iývï31=aamçètÕÕÓçvPð£ðèØÄÔÌœ‚â²Ê¾P,«oP6·ªž‘£“ùe˜Ôï-õ¹è£ßšØ|L¾œ!ûÈÖ3ðÓò`q’#ìó&º±ßÅaÿ9e~%Š ûeÅ…ù9™éÀþÓ¨ˆ0ľŸ·§;aßÚÒÜ̱oìoaÿM}FízŒþ#ã½jô/9_Çèß fÐOÅè— ôùý‚>ýN³ýBŸšÏ¬n›æfœXˆ|"¾X,R?±˜ÈgGG§bØ'?<†5öÙ¿”ªÙ‡«Z››a¼B¯ª¼¤07+-)>&2ìÁÝ_/÷k—ÏÛÿ|úä±Clì¯Y±lÑ æÁZõ§áØ×ýPg3Õw{aSÕ úLê£SÒ©¯7M Rñ²•kÖKSÿ˜ùiû —]ÜoúÞ¹Ÿœž•WXR^ň$2”ú­Ð +-}Žú¯@êsúš l|„¨;äì²O¹Àüä'uŸæ¾zý›SB(÷чR/“RöK€ý¬ô”¤xÄþÃ``ß±鼃ûûÎþhö˜þ7·4ò†ðq‡Šw:ºÏèo`Ñ?ÄEßËÇïŽýŒ¬Üü"@¿šÇ¯‰¥r@ݸ +-£¯ÙÖƒ +-}|ßZsCcCà …uœ'bùavrÄ~#Î}Ì~GGç«û¤#»˜ØGómijTÈ¥¢ºÚêŠÒ¢ü쌔„§O?¼èïíqÝùâ9[«S(öw“Ø_·ÊpÉ—ŸÏŸ;Û`ŒuÊäIM¯3v(Ùÿô?§§èÃ%͘‰S©áêußlüË_·ãÔ?naewÎÉÙÕÃÇ¥~TlbJFN~¤~mœRÅ“ú]ì74,êk¥~7ôñMl>“BÎcÛƒI%ë~;i!z†Í}ÎOø<èãûr`¿ŽÏ«¦ì§Röïbö¯sÙßkl´£?ì¿=Âþëóz@ÿí Üü´µÃ…KWYôGFDzè—Wbô%}b,-ë~£ÿ+ûK–Ž]ž“ù˜|$¾@Àçókñƒÿ°ühuÄ}mö{‰ý—«ÊoœØÇêw´Ãz›•lb!¿¦²¬¸ 73-).:"bÿ–—'öwáØ_¿få²Å ÌûlÖ§Ó§éM2y¢.—ýwzaÀ[õ{èÕ?ANiªÞ'Ó f}öÇ?-\¼|åÚõßþyË6ÍÔ÷ò ©Ÿ”–•[€S_(‰Êf¨…öF}6õ‡O}nê«ÛšA›/CW(b®ß!:@‰N{(é>ë=÷Á~e_"BìW–•åçfe ö£#ûwü|¼¸ìê'ûcFØ}^èú7¼|üýGý„äÔŒìÜ5ú2¹¢®»uðè÷ú*µ¡Ì¡­!ïy¼úx<Ø»CîwgŸ|¨cÿåªÂU³"4Š}‰H½VZ˜—žÌľŸfìAìoüfÝjÃ¥(öçÌœ¡? ¶:i¢.3Õ÷ßÓd_cªë¨QZ·DÑç]Î-éNœôñT½iúŸÎœ3oÁ‹–®Xý“úûMLOÐÔ÷öÄ©Ÿ’‘_TZQ]['bR_ßÑ?É7Ī?_G}6õYb¹gÈ\!s†äáúÀñá§GH¯ð9ÍýÓÜgÖÑypŠˆùLð‘,ûå”ý„ØèÈLj}ÿÿ²_§AU^gÇ'm:‰Öš˜èXâ8†°( D\"Š‚â‚‚ˆˆ(Š‚¢¨5®AEÅ £5©F«ÖF«¬²ï;— \6bDÄ]²Ìô9Ïy÷{/\ˆãÅ”ó…|ðÛ9Ïó»ÿCØܽckDxXHpÏØ[ û/Õªþó²ŽôßÖ ýY*ÐôÏ3è§"ú%bôïIÐ×°f¸¡þYUèw¨Y¶j¿¢B.——“+*ý?トýg*ÚaŸû¦¨t2±Ë ÉÖÚr»±¾c?/;#%‘ÆþiAìBìÏ5ÃÕy’£½­•Åh#C}=ÜUXÕwaUÙ@SË~×õ.чabЪó!%=}ÃOMÇXZÛŽsœì‚©ï븊¦þ>’úÿ$©—”š‘“_TZ^Y­¨§©ÿA›úܯrßH}°8‡üRñ+ÉVà2#¨&>Ú{™ûRö;U²ßIJ_R˜Ÿ“•žrÙ¿xÙ?¬’ý)êØ'³ÔÏþkwºEÿ]DÿCŠþ'Êè{ Ð߅蟠Ÿ›_èWÞªQ úw(úY]Eè÷0ôñ û” }Ø5¥e#«{V.“ÉÊØ#“ý°vŒû"ö©úOú^ì£ú>hoõ¿ojPÔTÉËŠ r3¥±±amðŠ?ïùžîÓa[ìlÆš›2øÛÇ#†ëcV•ÙTž}vU{ë¾Ä|á,1èÿy %†éÂ(陌¶°²±?qÊT7wO/¿€ ÕkùÔ?÷¯+×n$$§eåËäU5u ˜úmíÈ áÜp©¯eõùÔ‡‚÷˜}f «0<ÊÉ â!ùAfP‚G§$÷5cŸ[nGÄìß#ŸEٿűŸÊ²öÌ©˜~öÿÎK@ߟA¢,æÔ×ý«× ú}9A¿¾¡‰àÊÙÊ%ug/:†}¿Â¦=Q +-}Æ|†|X´²ÒÒ’’’b<ð¥¥D~9uŸlǾ(öû”úÈþ#Bʽ»°¸uµ°¶%…yÙéÒØß²2Ðßw!Äþ4—ÉÆýÝÚrŒ)ÙÕ‘”ý!ïîŠýÞ¸/5_%úafi˜îðd”ŒÍÌa’&8¹L›9{ÞB_ÿå«BÖ“Ôß©þÒþ—”’‘MS¿¶¾ñ6y&’ÙQúÚP_uêóèssXAç‘L"L Ì`™¨>”ÝÇÜÊ. ¿%=Ê}ZF4ŒpEȇûŠš[•À~Q~nV†„ý¨È=ö½ûÙÿ­—‚~PphØF1úW®^KDô ŠJdýFýv.¨5GÿåÇ+—1lÇ0æßFó1óɪ••ï‹Š +- àÀŸ¢"°àG÷aáHhQöqÛTǾ6Ôç\ÁhÃÝíxpŸÆ~½¢c?b?^û»¶E„¯]àçã5ÇÃmªó¤ñö¶V°«†úz#ɪê ûƒT²ß;÷U™/š%ýÁïôÿúш‘zŸ~j:ÆÒÚÖÞq’³«›Ç/Ÿ%Ë‚V¯ ؾ+2*úIý_½‘p3-R¿ R_ÍÐÒú“ú¨¾är^ÙÝt™ú8Š údIè³éA‘9¤?P~¹Ä}qîÓ5éAî«aŸ~Ï~=a_γwý*aÿëS1Çým ûþ]³?„²³ÔÏþërº@•¢?¤gèŸô/!úÉ©Ù€~)~‹ýç=CŸåŸÔ†>šßÔÈ™äð +-òóóØ“Ÿö1îÃÂá¾ÁºµÜ¹Ë~œrì¿bY„±ÿœý6Œýû2&öc1öÿsôо=;>ß´>dÕò¥¾ çÍž9ý3§‰v6cÍÍLŒ ôéªê òž}ºª ì+»ßÍξ¡Òüß“Q£?Ñ×ÁYÒÓ742maec7~â”Ϧ»{Î÷^¼typèúÍ[wìÝè¤þ…ËLêç‘Ô¿U[×x»ù¤~;\ó›L/G[wÃ]Ž$õ™ nAôµ50ˆ´=@üBœDzH€¡ü?ç¾$÷cî¿4öÛ™ƒ-Aöe%EÈ~"°EÌþÆ°Ðà ÍØØÏþksºF 2ú&=A?MŒ>Ã*3ËÂQL²Fƒü£ ô‹BŸ˜×Z03È/$àçææäd³'''èøÉÂÉ+ ³(ûÍ-°l¸kÌç1°hYåØ¿ÇÆ~¥$öOŽŠÜµ}Køº5AË–,Z0wÖ W—ÉÆ‘]53e@VUWÂþì r_侺µÿ›ß)…¾ý÷Xô?Ö70263‡Qr˜àä2mæì¹ ù®\³nã–í»#£Ž@ê{ñÊ5U©ŸÞÎ3üIÖÒ;L¢¾RêcÀ(ôé$b|0“£ˆ'—™BòîäܯÃþh¦‚«Âå>Ù +-‰{…ü,,¤§ÒÏcÙ/ö³3R“‘ýKÀþi Ø7²?Xûì õ³ß׎p[™<“ ?¸èï‹ŠFô/ðèç!úUDUÕè ò¥'õÂä ÎñCQè³yEÌ'›V{àgeeff0'33++à‡Ã}#ëV‹O‘f|ŠÜWû¿¼zZ$êÿȪÿðû5|ìÇÑØ?yôÐþ½;¶nÞ¼"`±÷|O·©Î“ím­-ǘb¡®;Œ²ÿŽ}6ÑÔ»ßÝ›OG‰Ÿ%ŠþP@_w8Ì’Á(cÓ1–Ö¶0Jήns¼|üV¬^»aó¶{†Ô?{áòw×¹Ô¯àR¿¤þcz7ZK}å»é¤9ͦþÝÖ–f}|qRóa³qñÀ2cHßÔ}EL"ÙaîSöùFÒ8÷¹Hêžý4 ØwRÁ¾e_’ÒØïg¿¯ᾊѧuFÑ×¢o®ýˆþI)úÅ¥² +-@¿®A¿­×èÿ,mîÍJÐgC¿¡¾®¶¦ºªëŠ,ìYxŸž––Êž´´t ?+›,\Qqie¿Nø»DÕÆ«¯µ ôä Ê>qc¿Qû LìŸ8r0r÷[6†…¬ ô÷]8o¶ût’hv6V£MaUõFö?Ö>Ú†}6÷{î¾À|úýRô‡é1’Ì¢o?~┩ÓÝ=ç{/^º|UHئϿسïà‘§¿!©›œ–ES¿ZQ߇R_x5¢»AT¡@Zï4ßÔ³HÑÇQÌÃQÌÌHO‡a$'Ž! ¿ðÝI +-¤EÀ>·0Âùì·±ìÃV!ûy<ûýè¨}½dÿ­~öûðQþ[êÐ7dз¯„þýsú™bôqŠyôŸñ%ÝÝ‹C_ø`egÚâ +-ö¬¡NQÃ/i+ ?ÀOIN¾Éžää”T€݇ܧì×p)Œý/´­>”ÂØÿAû|ì;|àËÛ"Â×®Z¶dÑ‚¹³fLsqšà`g3Öb´‰‘¡¾2ûBöI¢ r¿gîKÌÇIÂ~@FIŠ¾Î’…•ÃD'—i3gÏ]°hɲ•kÖ…Glßõåèã_ÁÔOJUN}üE¤¾¶Õÿ‰¹šç|ê“i$¯N[ØäÉIóg†‘œ””Tf üè~¹¼²ŠŒb}“û”}>÷ û-dkT°Ož#ä««*d¥ÅRöO"û;U²oÛ+öµÍ]ÿÁÓ+ôIž9uþµñRô›XOÛ;rý+ÐÆ 0ƒ>ú +-سª +-9c>ìY³”ä›II‰ ñpàObRÒM€ö-;¶­¸؇]ƒÄ‚ºÓ*ˆ}íÚ"|ç‚ò‘rìçÒØ¿rñÛoNÇ=‘¶uÓúÐà~>^s<Ü\';Ž#…f¦Ä>¬*î*²Ïå¾Èýîäçþ™À|:IÜ( zG„¾¾¡ ‡ “]\a”¼|üV‡nؼuÇÞý‡ŽÆ¨Mý{äYü{Ì Î«»ågX§ŠÔ'B¤¬¤BŸŸE2Œô9Ä!ð³Op¿ºFQ§”û û¯2û¸6¸5jØÏäØ?§1û0K,ûôåÈ=ßìg¿)úo2è`6•EU}.ÑObÑ/WFÿÑc5èk8¼-0½OT‡~U¥\FöŒ˜i…ä'&ÄÇÅÅÆÞÀðS÷³rróiíÃw*ê!°Z1(¹ØïÔ".êb¿CUì'Å]ÿîò…³g¾:¹kû–a!+ý}Î÷tw›:e’ã8[kKs3c#ÂþG<ûÿc¿Îc¢¼ÓŽgÓzl²Û¬QëíZ[kÛX‰–h̉F×s%Rqµ¢PQPTªVWYÏUë}¡rÃ=ÀÌÃ0Ã%‚T/TÀŠZÏZcµ»û<Ïï=çÑ6e6á—h¢þóÊû<Ÿ÷ûûŸhlYeî‹ð[§_òÏoÉÍç&IDßIŽ¾3¢?aâäi3Ý?Ÿ÷Åâ%~ëþù¯í»öw#¹Kìß4g?×)g›œýé2ö)!¬²ß¥“}<–èw±…þ{ïÛ‡~ ŸŽè"úÕRôÙeõüªÊ®=ÅòB]vSчÐÇém‚ñ¥¶ªcmuª”Ö ÄÏ6deéõ™ìèõY‚¿ÀTT ËFì×caá“Bì·Ýá¾NŽ¦þOôÁãc¿‹ý‹ûeŦ¼lXWU¼224øð~h´Më׬Z¾ÔÇkçœÙ3¦âªŽsÍØ:„cßI`_Ì}›î¿âX1Ÿ&É*ú#>é<ÆeÌÒä©3g{x.Xô岫×nÚúï=ŽTÆ«Ôéúl£©„KýËv¤¾¼úO©ÏkÊ¡¡Ï #N#Œ#Ì#üf0ð BÁ RS{®^Èýf¼{bîßðÐ|uìÍ}Kö°Æþ·°5Ä~¾möÉÙÇ›£À>%„„ý®ì;ె~Wú=qQyôYúÓ ýE¯F¿Ð?'EÿŽýgö¢/Ï)úpO}È]T¿kmiæBÿÂùúºÚšªÊ +-4¿Ð•äë3uépÒàWF†.áÏÍË/(„]Øo¼Œ±ßJ¸ˆIi¡Ëoˆ‹T—¶cÿÛºš3§K‹òs³tÚ”ÄXEøÉc‡öíÚ¾yã×_­ô÷õ^8πUuìùñˆáƪöÇUuêÉØçs_æ>;ò¿%’/7'‰¡ß“B‚þhBbÎÜù^>K—¯Z³~Ó–»÷ +-‰ˆŽKJÕê yE§3õm^Â(õïbêßÄÔo„{g¡¡_Èä‡æŽNÇ5Ào*$÷+¹«gC#lNÓ Êý6!÷9öñÿÜnö–±ÿŒgŸžTú}BöËO"ûéÀ~œÀþVÆþRûã¤ì÷ïdÿÿá؉~)úãdè/µý†þ})ú’Z±ýçÏ©©„±¥ÐÇ^Á£Ð?ϧ3¶Ì⧧iµF£Ñ¦¥üY†œ\Ì}d¿ +-KxØ[L®)Ÿ9ŠúÖcÿ¦û%…Æ=lkBLT؉£öì„D[à·dñBXÕYÓÿ6ÉÍuüØÏûüªööqWe¹oÅ}ô‹ÿ*3_ú4JfèôÇ»ºÑ,ÍýÇBo_ÿ•_}½qóö]{=“¬ÉÐçä–Â…±¶þ¤þu1õË^K‡«ÏqÊ«"¡T@B߈Ө§q„y¤“F£(kòJ˜Fˆ ,÷o6Ã@Þn؇¡4¦×aÿ¹ûòkÉ«Ù_ɳ?KÆþp)û=xö»w²ïxÇúÝyô{HÑ.CþJD+C?ŒÐ×0ôKxôinåè?ýè ¡/¢º +-ƶ‰ý³úåe¥ÅEh~¶AŸ‰äkÔ©))É줤¤ª~p+Ù§Ecž–¿–X‹ÊßR—ÿ +-?[±ãÚ•ÆŒ}Xׂ ß»O_îÖÈ¡?П4eú,w˜¥ÅKü×A?ìÜsàÈñÐHe¼J–™g*>UQcÔpéJ“õÔÑAèË_ ~ŒÅ×¾ÆÍ,õ!Bjªú8ŽYzGuj*L$ü¦fðcð‹wÏZÊýË”û¸?m܉dç +-ÉÙÿIÎþ}Æ~Ëk±?Ïû}m³/Q¿“ýŽ;¿“©o ý¾6Пg~¨-ô›l£ß~¨ØDÿñ#†þ¼¡Â†ÁЊ]ÀãËŠ[2Ø1?Y•””˜˜'11)I• ðkÓ`Õ Ä~iY9ìYûVß›ùÒ¡êÛŠý;,ö/CRÖVWž.-ÌÏÉÊЦ$Æ*ÂO;´o÷Ž-›Ö¯Y…«º`ž‡ûL«ì÷íÓ»—±Û*w_¿ý2ðò¥æ³ÐôzúƒDô?cèO›éî³´lÅ굂`”ö‰€IJÑê²ró‹ õák ctM’úO õ-Õ§·òäÿ1æÅ +-Á¡yÄkgF:H² +-Šf‘‹œFpÆ*ä,Ëý+¸AÍ­pÿ¼#äþðøQÎþK;Ø)eÿ©ûð‘2c_cÆþ:Kö]Æ8”²ïdýÎØwcžú–è;‰èâ:q±DMôÏTך¡Ïì› /T +-•˜)úPU0±U°a ¸bÕ,ô Œ`~¦v V, ¼‹‹¥Ÿ˜¤JIÕhÓuÄ>ìäUMí91ö©*rêóÀtˆúvÅþ%hʳUeÅ&c¶>]­Jˆ‰ +-;qôàÞ]Û7o¤BóñZàé1ØŸ8ᯌýOˆý!ƒP¢IsŸs_ +-¿ ?ï¿üÏ]dä3ó¥¡ß«ŒÒ€AC¬¡ï¹`‘ÏÒå«Ö¬ß´eÇî}‡Ž WÄ$À$ésŒ¦’2Lýó/]u´Ô·¢>L&Í%¤ %K}Rô $¡ ¢Qc‚à@²“€Ã˜LÓ˜ÁÜÇË'æ~ —ûW¯]¿ÑÜr r_`ÿ ±?„7‹'«ìKøT‰û»åì» ìvæf ÙÇ‹#¤Nöï´‡þŸý>RôG è»ËÑßm}F(4fÊ+Ñ·gV¹a•£û»[-Í,S.Š¡/1_š¬Jñcc”Êèh…B­Œ‰øÁ}5Ç~]NªXì3`nß¹g™•?wûíÇþõk°®õu5°­Ey]ZjR¼22ôø‘{vn£Uõ÷õñšï9göÌ©“Eö¡Ð† 2h`ÿ~ïBîû–î‹ð›Ó/_ ßÜ|BBÿÝ~ý2tØû~„³„èO˜èÏô½||ýáÖ¸qóö]{=¥ŒW©Ó2 yÅ0H5u0Gxk½eõ8†ú§øÌåÝ6öRXê×TUœ† +-áÐת©Ap c`$•Ê˜˜XœÆDU2»}feçe¹ßÐ÷O\#J~ÄE²3Ÿþó*öaŠÚ¤ì×Úd?ˆ±ï7Gƾ›«„}*}œ¢ßwïÖɾã«èwëŽûú úgCEô]Ý8ô©Îý «è—µƒ¾tT_'PøQåчЇa…¨‚ýjÄЯ­ÁÐ/)2IW,!ÄVDEFFЉŒŒRüqñ‰IÉ©š4`?×h**-Ã؇»„Â´Ü¢Ë >16UǪo3öa§Qì7]``[+O—æçdehS`W#B‚ïÿ†V50ÀÏכ؟!°«úчûƒè'É}Á}9ü¼üVNW3òyóùЇ;c¿ú0ô]ýÉ€þÏù^Þ¾þÛvî9pä8ŽRRŠV—•›_Tzº²ÞÉE˜#|%mÜ+q„Ô^ÊK õ…wr¹o`Õ•Hh&2#MCG©ˆb¦QÉgˆFtŸrÿlÝ9,ø\¿ÙÜJ›tOÞO¿ûð¡âŸ¹öý‰}`Ê$7×ñc]ØÍ BdŸb¿“}G:æè¿-AÿïÈÐ6|ÄÇ#GÑ¢ºMšè{úþoˆþ¿ýǸ{)$U+*D$JÝY1ô9óUI°aÊè¨Èˆð°°ÐÐÐÐаð€ÜOàØφ§†%ƒØ‡ƒ§¾N}÷Þý1¯¾eì?|ú¸®$aª*ÊJLÆl=ìjB¬"üä1XÕ[ƒ6¬]à·Ä{áü¹û´ªÎŸûïýe0.+Ë}rÿtŸ ~~&¿\᯺ ä³ÌÍg¡“—FBÿSý©„þBï%~k7À,}³ÿppH„"F)CŸc„IªÀW‚b¼~µQê?vŒÔ·¥>{%¤>N%¥~Yi‘ G’Ðg©øûuÕ•Åü‹f™IMÄ]ã  +-7@\ƒ‚\¢‰‰Íh…Š5Z:ƒ%Ž”X¢´Ð¬ ÍÖ@³v²Ê*› ‚wA†t„(‹¦Ô¤25sι÷õ{ 8@’øÀ­JªB¾¼êû?¿û?IÈ$œ8Šc"À…_·~V`Áº“tGé~Û7ˇö%Ó4ø8éæI§çχÅ~0gÿÈþû"ûf æûoÍœ>u +-ÄèMbÿuÎþ¸1öGüôG<¡ÿ:¡ÿ&L딩ӡŸ!ús¥è¿/¢ˆ£üÿCS*Ä´—å´Ààâ^JE¬â\iI‘0aɉZ˜¯˜hµ:*’(µ:à×Àœ¥¦ûg +-KÊÊ+«/bÙ¯o€bŸÆŒõÿ[ÙÔÓ…ìô10¬Õ•åg‹òs2S“5±0ª +-?¹ÌÝÍÕÅyÿž/>ÿÃöm›‘}Uk«%–f 晚Ï™m8KW÷u}_(ü?“_Š¿È=Ÿ‘¯g¾®èÏ2„$™ÀÒhfa¹ÄÊÚ³´~ã¦-Û¶úÎ.€¾LB¥ŽÓ$§Î9STZ^YS{nßaýíkTT}‰úì!þ§î!îbÚ¿®@©(/-.„Hf¦Ãæ‰-;ˆš¨"XD´‰ÉHÁ}¬ûy݇ ´^>œ¦ÎññcãÄæé…”ýŸ~Eö¿äìçœN?%°/×±ï„ìÈÙ_ÞŸý RöDZ?âg ô_ÑŸ@èÏàèÏ7³X¼l9GÿíŸìØå¤C_. õ,Gý» ýB¿÷ Oý.(TßB£ºßÚÓÕÀ‹þE(úegiÀ˜ùš$?*2B'<\¥ŠˆD÷´Œý<üðóUXöéÃa¾Ú@ý‡’fÉŒaõ_Zö»x³dÆ\¾³ZR˜—‘’”¬ðõòpw;ìâ¼Od-cébd†U¬û辺¯?É/Á_Ê=_B¾Ô|¡èC’ýÅK­VØز,ú_ìÙçìrØÍ]&÷U@–b5I©™Ùù…gÏUV_ i¸«÷ 2âU¿Ÿút#Nán>›ëë¨êC(K +-Ï0ô“´h>–l"b÷ó ŠJJ¡î×èê>”˜§¶öŽÎï€}ú%žÐDÑÞ#©!ÏT_ö{a?>&’³Ùß ìï°QšÏÙŸÑ—ýWöÇÔ¹£§þÐ_ªC ¡¿Ñ?ÊÑúOžýŸ¤è¿` #úð»NÊhkK³Xôkª T•ÉËáæÓ|øa¡!!ÁtBBBÃÂÉýx YÆi˜±âRVöoÔI«%ªÿdT¨ÿò²Èðj‰ÃJÈ\¬:_V\›•ž’¦ ö¹>è¼ïÄþ6ª¶6+`V™/„a¥º-Mpúþî>À/È/â¯;üÏ$>ÏÌŸ 5ÿ­ßCÑ761;¡ù"ˆ o¯þA@ßÃËW¡ Ã,¥ddå””a”à>`gÄW¸½S¸§,E#^õÿ-½Rÿùs¶}A!¡gø^Kó݆۸}ÕžyÙ§}I&ÃB!•!¡¡XEþH¤–"™›Ïê~5¯ûwh¢î·ñ‘ê‹Ô¯Á>-ŒýÆþÝAØ?ÀÙ§,9ØõeÚÔÉ°?VöGðô­ú ý×ô &Mž: Ð74’ oçÀÑßé´{ïŸHÑúφƒþ¿ôЧx‚rÄÕÛB¿£½JèSчNuîlqA~nVf:3?:*R¬ +- Tà R‡€ûQŒý´Œ¬\¡ì_¹~ëvCS3|:ªßÕóèñ¨R_¯ì ìK”ùº¹©¡ž”©*/->“{:í”6>:"TàãéqìÈზ²ïho»rÅòeK,Í¡î›òºßÇ}‚_”_Ä_wØ_ñYÍó'éÌçEß‹¾åXWÚÚ;öEÿ˜‡—O€2,"³”• ¯0¿z„ïµ ×ñý“QSõP_¸¶|Á +-•¹—¯êJ¨"…ùÐDúÑ`~†R„G ù~ŒdbrJTØ@KÊ„º³®Ù‡÷‡ +-öÐ.‘ý~cõ3Øö2ökû±¯ð“ËŽuEöw;í$öׯq°[ ì[Z`062œÅØ7ØmŒý?CC–¡‘± ô3 K¨g+íÖ¬ÇA%ô÷8äzô¸Lî§&ú/~9úTô¡ÝR<Ûî·b>êën^¿ +-EÿBEyýl¯$6^áa!ÁAŠ?:þþŠÀ p_©FöSÒ3³óXÙ¿tù~|sK+|{ç¦þÓQ¡þÀeÿJ`7>ÈL3Î*cælQ~NfZ²6NäïãyâØ‘¿0öwûÖ9ÚìZ[-±´0ãußÈPâþ¤‰~Q~þÂaÄgäƒù“Eó xÑGô­¬±?8®ÛÀ²ÄÑ?rÌÃЈŽÓžJÃ,ámÔb”à6î±Ûèî},¬^£¡ê¿D}~l÷jj¬¿…»“ªH¦2F æcQ@.á_ +-½*î§gfIêþ•k7nݾÓØÉ„£ØïˆýA'kö_ …}x±Òˆý0‘ýýÄ>di#±¿‚±oj2Æþ(<¢ÿªý)ÓfÌ$ôM }+†þF}ý0B5Ÿ¡_; úB6iZúØHDô»>èü¶ý›¿¡sTôo\ƒe´º +-‹~!ý´”$m™Ó¨ð÷óõññ–ãñööñõóW*9ûÚäT^öñͺz£îNã_¡R1õ{ñ½ºå(Pÿ%eÿü äLëWØ.g +-ó³3S“5±jUH¿·Àþ`Ç'[?ú`ú5«WÙX[-]¼È|!«ûsf‹îKàçò#ýoèø'ìß`à3ñ9ù ÑüÙsxÑ7_´’d³jµÃšu>øh+lŸïæèŸðôñ +-PÇi“Ó2)Kì ®ƒ(ÁePÕ׉?Â#]õUŸV¯Ûlõ:_VR}9E@?D‰Ec‰Ç" ò+ƒCu+hªX÷/ÔÔ^¾z~ŒÆ&¬¶öŽNX}º{èd}Š¿„ÃgÿÆ>ÍÖØFö}å2÷£®.öïÙMbgßj©¥ùÂyŒý™3¦M‘²ÿêû#yú¢?N@ÿ7¿%ô'JП·ÐúGÓ–mÛqP }w™ÜÑ.ú?òqú”ËÐïãý6ˆ&GÿúÕ˵5*…¢Ÿžšœ¨‰‹!óƒ0[r/OÏ“'OÊàO/¹·¸ªŠŒŽM€ï§²_v¾ª¾ÿV}cÓW ô©îQ¤þ@e_pæ1¼ƒ:Ù¬b½¼Žì4…yÙ©IšØ(UH À¾ó>UbfõÝÕ¶ÐÑ–ñºojò¶±‘è>~?“é'ûõÏïø$>‘5_4ßÈøm]Ñ_;£íêw1J„¾“>ú*u¬&953;¿°Dxë!J }\¼¾çèCŽ~ñª¯¯þ\}\½è †ËÐß¼ êg¤&kãcÕ‘ºXz˽ ˜ž^^ÐF Œ`(ÉýmRJ«û¥ç*ªª/}yÞÀú-'Ÿ­žÞGÀ>ý(C¯TÒNÅÆk0ökDöµÈ¾’ØwsuqæìoFöí!I°7ŠìOö'û ¾Àþ¸1öGæôC<¡OUŸ£?½ú¶ö8©›9úÎ.®nî2/_…Ñ×þïÑAè?{Jè÷öúÐl)˜ õu7A¹K5UçJŢåÂáò'òOÊ}Âþ; +-ö'ÔG‘úcÑÿËdD ¯>o> ¯£o¸è³¿š®\cf›ºÅÑÅ ÑŒDÿ”¬ø,¢‘¢Eÿþxè¿ðL27Чd&©n8”ÃÌTô÷ݤ跷^nj¨¯©‚))’‘ÐÏqŸ…Ÿ‘éW#ø+5â=#>K>1>˜¯¡µPGWß„¾éÊÕkÍ-,­¬m7#úî^8KJègfçæÀ­«œ¢OÞÄÍ>D^Å03IÌËxóè?Oýþ>P³‹~€áM”`êg9tcÐóa.äÒPI)æÈŽ¨˜Øxêþ?d&¹_xúÌÙ²òJÜ®æ–6`ÿ:²û5ˆì?P°槱ìÿÎŽ=SÚ±ße¿•²_ƲŸ–’”AØ÷!ìoúb£%e1eÿÓùóÔ?šýáŒépUœÌ²ÿ®œý‰Ø½ç-åԧ迫@ÊÔýýO5ú‹)ú–ô}úÑñ I)i,úeýÖ—„þ³ñÑŒè?€¨ý~f²²†²£½„««©¬(;wæt!†þ‘ÃéÒöíMÚ æGïˆ  •ˆCD"!‘(D*… ‹Fö÷îK;€±ŸWpº¤ ³©¥½óXsû;UtìSið +-„»ŠìãªvûõÀ><’üÑìC¡y¹»:C¢ÙÚl´üÜ|Í}pß@á>ü~F~ Ÿà/÷_þÿw#>!ŸÉ|…ù`>„þòUkÖ­ÿÜr£íæ-ŽÎ®€~ÌRhDT‹>^ºJË™KW'Þûè­ëÁ0êFÑ'ƒô‹jªnâ«‚7që[¸vÑAR,ËÇÔOߟ–èã`F„CŠˆÅ!äˆ%P#á‘;¢©û#ebîÈŠá;x¡º¶¾±©¥íJgWwÙ°Aü>x8üz؇›#e?'ëœýм9z¸9;~¹É†eßØPOg¡aaÊhößž`ÿõžè¿-GÿýèÏ¢èkéè³èÛlúÒÑÙÍÃÇŸ‡‹—”œvðPVE¿‚ÔÙ £ÿÛãøëXô’Ï#ƒþ]@'Ñï¼ÒÖÒÜx±¶úBy) %älV†¼§pµÂ¤±H,ðÉ‚…à~aWR2ÆþÑc'òegÎ6˜˜ð°0UNý±ì³±ÿãc²«CtU{¯Ã¨¥©±¾´Aö)ØÇU ðóöpuÞæ`o÷Åßÿ¶s¥)¸obld ‡îkjP÷™âgå'ö3ü3Øï|*>SùÔ| M4_ÏÀÈØ͇Ð7³ØwF;{‡m.nÞ~ÁÊèÍ=™š¼@¿¾d–0j¡i=fSÿg•HýßP>Àð&`DoߺAÕo¨«®(+)*Ì;žƒ©¿oo"3™¡’˜Ì`˜MøC9"‘â\¢ûIØ#é˜û'ó ‹Jί¨ª©ohºÜÚΰ_C\²{À>óhžüaö}1ö;•Ø/dØONJˆöáæÈñQÚJØ_¿nõŠe”}-–ýi +-öߟ`ÿœç ¯öÁ´3è/^²lÅêuë ú[]=|8a÷ždÌý#P$§à;VYS×p©¹µ½Òª÷Æ;~ºf÷}˜Ò‘§Ã.Ús7í²ß¬`¿]Ò’`–BE|Ç›°og³qa‰‰±ž¶œý™À¾Ëþ{ì¿3úïFÎÜ?ÑÐÒôM(ú¬lìúÞ_„u–˜¬Ð’¢ßü*Ðÿ7Aÿ S³ÃÌ0ô÷Ý$èw´C…4ÔÕTV”AÓœ:q,k +-k÷Îø˜(4_$€øÜÿn`@H؉O@pÒ3³só +-ŠJÊ*ªë›[‘›oûúQSlìÿL¿ŠOð›HîA  <œ=ÝW;Ú.e?q'šT, âr|<¿Úîä¸e³ æ¾9äþr¹ûúº:Ú µÀ}ÿ¼¹êêsý`?âOø'‡üczàÏQWŸ;æk-óõ±óÑ| }s }»Í[·åéÃáò…bi$„}‹>|{»‘6zk|8üÃ£Ç ú*“úã©ÿD¡þw·o~CÔ/+ËÏ˘JNÙßÞèáRM>Œ&7€(€_(b˜û™Y9ÇóòeÅ%¥åªk/Â%¨MÎ>,Þƒ M`Ó˜›Ð+`¿wûE#Øö¹owW§­öv6VröûŸ|™Cù ’”%“ˆ1KF]ƒY¼ +-= ÃXW]Y^z¶XVw<çhf ýRS`~0?ˆÇõçøùúúãëÇñàòƒC$aQ±_ï‚Ø?x8ëffiEU]üŽ«Ý£ÕÇÂT)õYöŸ>ebŸ²a>‰W¯´]ƇìËÙO…'&òyþ¾^î®.Û˜Ü_o†î/#îèëéjÓàGø©ü„~‚ÿlò`þ‚ÿ‡àñò5Á|]=¹ùËÐ|3yè;lsqu÷òõçñ…’°Èhøð&A.\W»{°g}`í¨FQ¾êªÿOTÿz|{/Õ×\8ZæÏÎÌ ¯ >†  æÀlúÁtúúá`ryxE÷£bâw’ÜO?|$;÷$ìY <›ªÚúFx8W:!LH_ Þº;–ýÚ¶ÿ™ý<Â~jrâÎبp‰G÷íNövÖVÌ×®Z¾Ù×ÕÖ\€ìÏž5sú´©jS&õ ûï(ØŸˆýWÞRVI}DŸ¤>ƒþ‡}M‚þgK—¯ZkèÛÚ;8mw÷öƒ<ôc ú€~ÞkBHûSöÞÐ÷ƒ8ˆýÎ+m-MkÁµÒ’"€-7;ë0Ȇ¡³#B*Á½âù>Þ^žžžž^Þ¿?—²Ï˜ƒ?åÄ) §¼ª2“¨«@Õ7öYöɪ!û·à&t²_«Ä>˜“ŒæD†ID‚À?o·íN[Iî[YZ˜¯[#w‘‘¡ ~Íÿ²_çAQŸgÇÇM¦ñÖDñà5(UP‰Š‚€À.ì ,ç +-È}(ž(¢‚ÜÁ‚ŠÜ‚ B`‘Z¨'Õb‘¯¬¢ª®¡©-5ͺÏ7n¡ÐçÙØÚ;:»I¼|üƒBqÚŠÆ@ý+WÁµë7nvýÐ拾ęƆ®þ“ô6Ñ‘úÏ9õï0õ¯5Ö×T–•œÏ‡_ %1Rÿà¾=ÒÃéágÓYŒË™N¦&¸¿;|ï>ÊýøÄä3éY9¹ù…ÅÊ*ªjëáM„»ÖÑ ûs7ˆØ§aH*öÈØoûòZ#±_BïWêéSð~Úì{ïtûÛ·mÞHì/×ÖTSY̱?“±?aûÿÖ˜©?SŸCÂDô«¨ij3ô7nFô­mÄn;½ý@?¥Ì@ôK."ú×¾l“¡ÿàU ÿw¬XôŸ>yü¨÷áƒ<†²ÍM õµÕ—.ÃÜ™“•žšœK¡¿'<48ÀÏÍwu;9:ˆDö°D"G'±‹›;Ü-?¸ZûGŽÅÆ'ÁïRtáRÕå+M-ðMnvËÔÿšsÄ©?û°I8 õ²@ë¢@“g?!x£05ƒ|½wº»89Ø (÷6oB÷õÈýåKµYð#üRù‘þyØý´Hz\ø7_*>#3_{Ùr2_Íß´ÙȘB_`çàäâ¾ÓÛ7 xwDäÁ¨èãq€~ÆPèß¾ÛC—ì,É¥úC«ÿ¦>üw@ËhäƺšŠ‹%…y9™iTȇÀ´à»Ë‚{ÄÑ–#%‰;%‰PHXåþ Øž”4¬¼‚¢Ò²ò*… ±Úpê¢aˆ‹,6± ×÷êÙï²_…•OìÃØrØö%nb‘­µ•ùö­Øÿdîl`Æô©S&O”±?žØ;Êþ›Xã?iÊÔé3fÎúhöÜOæ/\¬¬¦èë®^èoÝnè‹Äno¿ÀЀ2æd¡Ÿè—Wqèw¼ôÿ&Eÿ™ý{w8ôÛ€´†ºÚ*:‹ +-áf"jqRú»Cý}¼áZ¹:Ã¥²·³³â²µµ³9:9»ûØšûÑ'âSÒ³áË”^ª¬½r•Sÿnσ¨¾ûl§~ü‘=ŽÜ6á.É Ìö«ýbš…Ri‡¢(6ývyz¸Rîó-w˜šlã܇Þ×]¡³œ?ÀÏÉ¿PiÁ°ðGþ¹…€ûùð¿”râ#ù,óuVèræo31ÝaɧÐwõð„77$ ÞÜ(T-9U}»ØØØûÕcêX†~ßHBÿߨÔ_@CPY\ûE [±”úðèúí’žNO;[øgMâÌFQ¿€àPÊ}…’Rh‡°±Ê+kð¾µ´¶_‡ÊBöïËØgÑwƒØÿù¥Ùï–²__[ÅØϦ/sä`dDh ¯·ÄU,Z[š›ûkVëê,ÓÖPS^¬4Øÿˆ±?‰cÿýQößäý÷ÐÿÐW"ô—éú6o51·´ŠÄ®o_@?ÐMÀ:ãЯ­—¢ßýjÑïëGÿÏÏè>ü#  Žàëím-Z] B +-ÙÌ´”¤,Y +-}.¥àV9ˆ@|5-¸ïW˃Õæ6¸$§eÍ/,)«¬­¿Úü?£þÏý[õ½l£àq” 4Æ>Ö~q!±Ó=Œ˜›þ>^Ê}¡5ÏÂ\æþZýÕ«t1ø ~©üH?ÚkÜÂÏè=€/ŸÈÇÌ×]µZ­Ì|s žµ…>÷âîÇ”O$ôó Ñÿ=‡þ£ÇOXŲ³˜É¥ŽXõ{eê·45\®*¿Ptî·0k%ÅŸˆf©O{ÇÓ§ÀN¦ªàÇYÔÃÓÛÇ?rÿðјXÜ£ô¬œÜsçq“ª/×76µ´Ò.ußbwŽGvé¾}Õì÷Ü¿{kû…ù89&Ñì{I\DB¾¥™ÉVà Œ}- UåEŒýgΘ6u²Œý÷†bÿmëøº ÿ.¢ÿž ýÉS§Íø€C‘²ª†‡¾¡‘‰™%_hïä*ñôÃýc± IgÒñ¢@ÿÖÝû=/ƒþσÐÿŽ,{è?&ôïß•¢ßÚ‚ó&påq.7‡ysôð +-}?¯Ü¥ +-¬ù<ž-ßÜGöÝ°7ƒðûDÁ÷9š™“êWÔÔ76·Ždõ‡dÿû°UŠ7Už}ˆÒä¶)ŸFÌ}‘­€o…îoÝ‚î¬Õ׃à_©Cðk1ùUU”•Ñ~X‹ä~ï••UT™øZD¾ÎJÈ|½5k úÍ·â lE,ôñ½•–’– SãèÃa’¢O–ý0¢Rÿ…êÃO€êßFõÛZš®\®ºTz>ÿlVzJbÜñ£‡öcêûzÃù;Šìm¡Høp@y<>N!F‰ØÕ]B»$}ãN>“ζ©´¬¢º¶¾¡ ÷©£ó&D=ÄþdŸÛª÷­¡Ø§Ôêö[8ö‹9öãcapŒ  ðõòpu²ð-ÌLŒ€}ýU+}uÕ%Rö?Ìþ»RöGcÿõ­12õ9ôÇ1ôõkýé€þÇsæ}ª´h‰ªºÖ²ÏV®Ò_è›YðöN.^¾!á‘Éxýbý@¿“¦Í_Šþ?^€þ·¥ÃûU/W°Ì²Öæ¦ÆúËÕ„YnNVú™Ó§âd wÊÓà ͷÚðyV–;hYXXZñ¬B{,N]BÂöî?}¾PƹÅ+jê@ývPÿÖÈV û}ýìËßThŠì÷Da!þø:ºˆa£lÐýíÆÔûë Ö­à—Âòkj¨««ýÐýÈ¿lÁGø£ššºº†&‰Ï‘¿JOÍ:ƒõûÍ·×VÌ…~HØž}£¢ŸLHýîÛr1<ú#Týž{·»oÞ(¯^©­dê§%Ÿ:qäÇ=·vB0¨¥œMK¹*q¥ +-Tܨì³yE¥epëê`§Ú¤ìý£©èéìÿô‹Ùÿfûíð†û49Â+³Ë±(˜]B|¼<\‰}c#Ãõë€ýÏ–2ö?7çc`ú´)“'M$õ‰ýqŒýwFÙkŒ|ê÷£O©èOAôg!ú -QQ×\Jè¯ßddljÁØ;ºxxúú{}02%=ël\TB¿©¥­}úß¼úxò8ÆúÑïAô»nvbÀ675Àé«(+-‚2} PæˆÅGòÍÍLi™™›[Xòø6À¾›Ó?hwľCGÇ%¦pêW×5^kmïø]ªÿ§aÔkÔ Œ}Ü0|$¹ýúúù3¸©½rìSí×û8)<,÷%n.Nàë}pßp#?ÿ +-”š_[ í‡îWGÿÙÂÿ†?÷ZÚØø þ +-$µ>eþFÃ~ó…vðÔºI¸Ð—KجœÜsçKäÐgcãÀ‚ø¾¯oàYzËèÿgê7_­¯­,+)ÌËÉL=‹H†A{㦋hÓñ€š›Á27ßÇÓšÜïß+éP”œš‘}÷êb9íÔVûõÀ>ݼáØöò ˾ÂabìÃÅóT@ì'ÆŸˆÆoàãéîâh'àY˜oÙı¯©®²dádÖLÆþ)ûã‰ý±£ì¿Î¥€þXB¼ý  ý™ ý… ý¿Ñô·›îàÙØ9º¸úÁa{`'úXgЊèC?}öèÿ4úOŸ<~ÔûOC¿󵡮&ÍÒ"8|٩ɉñ±1ÿb¿Nƒ¢Ì®0WÍ^3UqßfFÍ}_'î²tÝ4tÓ4«²*K˾È* ( ²*È* +- +-Š¨ +- +-‚c’2fʸMYN¢V*V,SɼçÞïënQgt¢NyIÿûŽç<ç=[R’È1ôùHa¢lTJ¥5{J•ZÃb§»§¯6(42&>)5}[.>©¢º¶þÈñ–¶Ž®®þõ×Týþì‹·›Ô°I½ÛýnÆþñÆÃŒ}}¹hGF…‡i‘;Åz‘û +-¹ÌÜLbj ø—/[Âäýd?ð‡þ†?Ì£„ðñ‘òŒM)æËzóÝ‘_ýµABÐ7€¬JY‡}ÃfÒ)öøñk…þs«²‰Ô¯,-B4ÞºeÓÆبpŠúÞÂ¦Õ “¨Ð£JÚÓ–ú“Ü÷ôæq?*&~ ÙÒÚÞÙu®ì åºy›-É¿÷gÿÙã÷“ÙçâÀþªò’Ý;·Ó'}|’Ÿ‡Û*G•ÜÜÔhù’ß.˜7{Æ´É"û#G :dÐ[öÿo@ô?Ð ±°H!èoÍÊÍßµ»¤¬ù¡¾¡W£€þeôïrÄ„fz,4Sô_õijÔïíî„ú‡ì«,‘Y›“b"Ãõ}p‹®r²·£Tbm…UX¡?•6jýšôÅ=I[25M,XeuÍÁCGŽ6µ´žîÄð‰»v]dÿÞÎ>Ÿ¿çÀg°¯Ï¹zEöë`öJ +-é›h“}­¯‡ë*ÊJfÆÙŸ;kÆT°ÿåø±Ÿqö ì4 û¯ZÉ_ÙÓG}=úöEÌgcÇùõÄÉSgÌÑ—Y©lV¹z ‡GÅýŒ¬í; Kʪö¨×£éê7§?ý÷GŸ²Æïoß¼®C¿÷\Wg{k Ń5}FX*%×È°` +-úžî®.΂_ +-K¹Lf'“É-Ö>W¯ñôñÓ‡ÑW¥eæ䖔ﭩk8Öü¨ß?ì?Áþ½'Øïí>ÛqúTsÓцúƒ5Õ•e|Qò¸MŒU)ºïhô©´VüfRÀo´R ö/^´üëþÄK8ø+ˆ|©‘O•Vkìuæ‡F ¹‚0}!º’aõ G›šOî8ÛÝk€þmú,¹ê›é¿¼™^=úÏ£þE¨ßÆկس{gî¶ôÔ¤øèˆ@D}ô¨“+5õ({”Lx0Á=ºÆƒâ~Phe’x}¶'Å’Ñq„ù»úØ¿öï¾<öœŽ·Eö1Ýœýb¿¬¤pG.­20a`ßÛÃÕÙÁV¥™™¬\¶øÛùŒý _ûcF>lˆŽý‰ý÷Dö߆ý—ÿú¡ÿ^_ô‡ >rG¤©ÓgÍÿíâe+M¤2…ÒÖÞÙÕÝÛWD<&oÎÈB*.úµh;†~·ú· ÂÙß‹þc}Ðà~ è_ãè3À:OŸji:Jè0–[ɯ$ÄֈР-}àEv±Ì*ƒ]fR©Ô Éä˜*=f +-#“@L~A±Ný³=^sõ„ýG?ƾAÕhUÒ}TZ\¸3»RRB\tTxhðzrßËc ö¥£p$ÑÂüÊüFF+W¬Xü—-eг‡–/_!€/‘HÍ,d"ùvŽÎ.ÀË‹Ì_¿xÐßYX\ZNBp=ÖÔr +-Áè_ꇾØÍôêѪú·n\ãêwu¶µ?R_[]±@f¦¥$ÆQ,öCÔ_`"ö¨…9= *?‘P:÷C±+é>ÊÌÎcUÏ£“ì<:Oì_!öÅÜuホýG/Äþ§ãÎ>]Ž” j÷U–ìÀøÑ… »lµ³½­Ra!åìÏ™5}ê$ýQ"ûŸ|ÌÙŸ³ÿÎ[ö§GÿŽþûý?ÐAè#ô§LŸ5G@ßB¡TÛ;¯v'âb’7§oËÝQP\VÉÐojik?ÃÑ¿òôpöBèßú·€þwWÑqH­=úÔz`ÿÞ +-¦WºnS"2kxH`€¯ Q|žˆ|©Ä”= ¡V*µÆaßk­`HD4¾+#;ŸUõ¦©ß—ýÇOcÿÒ…Þsg… ép]- +-‡m‰¸Ê¥¥nJLˆŽ4pŸ~ÀÏb(]Jý&ÆÀÉoû~066áàc­ÊV‰|[;ó ÌŒŽMHÜ”š†ÐŠ ¿›§ÖºÃÇN´´¶w²«è_ýG£ÿêÿž_ýò’ÂüœÌ-›(P*F2±µQ +-MŠ£„¬†Xš*:“Vá"õ^ç¿>8,2:'RZ¦p!aY¢nÇ‘»ÚÏtõœ¿(°ÿWÎþ`ÿÕíáKgCH½Ô}­„¬«­®,-.ȧìG†‚}/÷ÕNöj¥¥…ÔxÅÒE çÏ™9}ʤ _}1îóOÇŒ1|èÁƒXØ×±ÿî[ö‰×ýwú}õþPBÿÓÏÇ}ñ¡?sμ…‹–®0–ZXZ«íœ€ãº€@ŠÄI©@™¸´²º¶ŽÐo%ô‘ÎÐp/ýG:ôïs»¾¿uC‡þù–3š7Ð]Ù™H¬ã¢#Â×û¯óöX³Z?NfRÑ*#¢ ITŽ‘²µwrqóôñ[õã“R3²òv•Uí?Hê·¿êÿ4ö¯ûÏŸë:ÓÞvòÄñƆzIUå{°0ósQ¼-)ɉñ±Èý@­¿ïZoOw7W¿Fm£"ù-ý‚M|‡¢šl•U°ŠÀ—3ñU”ò‰|W7wOïµ¾þÚ@n~|brÊ–ŒÌlôaWuÍA!³¯sç }¯ÐüÚ¡ÿêÿêw0õkö–—ägoÝÂt ô_ëEQ_ú”ô© mOº–(ïÛÚ9°¸¿ÖO±!WRI»vsöq#8‰u©«œ°.ïèØÿçKb_h¦›7Ø‚ýýÃu5`¿¨Û,=5)^ü0';µµ¥¹„±?oöÌiS&~ÃØÍØGØØÿàIö_±•¿ž7 ú1ô3hÈÐa#FŽfè3qÊ´™³9úsKk;'–ˆC#ÉÆôÌœü‚¢ÒŠêä Ž~GÇåÍþsú"è?¤f{ôäâèC®ÈÕzòıFÖ}€«çeÖÖ´Ôä±"Bƒ´~k½ÜÝô5j3ÃdlÄr)%S#cS ±¯´AØwu÷öÕ‡oˆKLMÏÚ¾«¨ê>Ö|êPÿ öÅêýëIö ‹×ÑFgÒ‘C¨Å}”//'kkúæ”ä†î#ð ð;Økl™üD¿¥œð·ÿú‡?Á½Ü’ÀgâÛjìòó Íߘœ²9}kVNòjIYÅ^&×ѦæSm,±^â‰õ:O¬¯?úÏRÿ/¤~OWGkó±†:¨_\—±99>:"d½Ÿ§›‹£-µ©¹T‚.5.'cÀof÷Ñ¥ˆû®k<}|C£bâ“°3·å€}œIؘ`cxZw%ýYÏþßîÝï[¼gÿØgéë—wÍa ²د(-Ú•—“™–’D_öÙ—ÙXËÍ%ÿc¿¾ƒšNÓŽÏÝz«³;sg/»–m*vº QªTé= %ôÐ tB¡0HA@lØlãíy7WƽuÝÑ=ï›sv{ž÷—Ä€k[Ùœáq ü—Ïûù}Ÿ#43#Ý}{tÔì¯_·fõJû+沿û yž§>A¢¿\þJ +-ýO·lôuöìÓ5021£±±wtq÷òƒ ŽŒ¥‚¸¨´¢ +-Š¸Ðïƒår#ãÆÍÛT!úýiФÎÕûª\½ Ã6>:<ØwRÙÙÖ,¯«•ˆËEù¹Yé)œvtDX0ƒ„¾«³#šäÓ,ÌñXXÐ[µö\0öÉ“˜œ–•W$UË[ þÈ8¨?}ó΢WÿsÔ9ûÚ‹$ÚÕ©‹çÎâKs s¿µ ž`u¥¨¼´¤(ÜÏHKMæ$Ƴc¢"à üôÀ”ß›ÐOìwqqvÿU>;ïÐ{¾7ŠH'ä‡GFÅ°ã9É©i*óKËEUÕÒ:yS+†~ïÀÐéÑñ³ç.N]…~¸}÷Õè“iZTè¿Výû¿×R¿³­©®F\Iœž’ÂÀÔwuô­­pLi4Q ©:N\Ý< ÷éÌÐð¨Øø¤dH¯¼Â¡¨ª6%Œ/X”FÆàñ]¾z}o"Åþ7óÙö³Ù×^ÏgÿòÅsÀ~ßÉ®Žy]M%°Ÿ—­~¡úy¹»8ÚYöõu÷íÖÙñåçÛ¶|ºiãúµZì/Gö—-±¿ðçWÚ©¿Œ¤¾ú«Ö¬]¿q ÿù—;tvï; Oз¶stqóò d†FÄÄs°‡a¹¬¬Ý²£‹Bfm>úçÞÓw@çìé?žPƒ†èÿñˆþÌôÕËq±DôO(}YM•¨LP˜—“™–‰ +-eÒ|½=¨‚ó‘|³C䘙™[Ѐ}[{çãÞÔ-›–Å/*IdòV…òåêS±¹øÔÿï‹OðUìã„]iâÌÈ©Á¾žî.E[Kcƒ¬VR)*Óvƒ_0“DÉôƒýîîÀ?¼ðà7ø…xàñƒèÌ`ù˜ùÚæ—‰*%µ²†Æ–6EWwOßà©‘3“«ÏÑÿæÕè¿Çê7ÖU‹…ÅyÙéɉì(V0ÝßRâÐ'ib†ò„vXå>É}ÿ F+2&.‘ËËÈæ +*«¥õÀ~Wwï>AÍ[“b.ãÃGß?~òƒ6ûot_ËþCŠ}¸Œ·gUìÃUìîjo›XY1ßh1¡Œ@_/7;kK‹C õìÝ­³b°¿ +-Ùÿø#ŠýßPìÿz‰ýd>7…—ž™›§6¿FV/oníèTbèB©^˜ºrmzæÖ’ª¯A‘¥þ[©ßÝÙÚ(« ‹ò²Ò’b#ØA~Þî®Nv6êA555Ð'æÄ}È'W7Oo¿@zpXD4;‘›šž•[P\Z.ö[Ú;»{û±À&᪖%ê.ûÚò©û0JwoÏN#ûã£ÃƒpÛ!ÀªÅÀ>?+,2¡°Èxº9;ØZöõ€ýÀþÖÍÀþ:Â>‰}`ÿCÂþKì/èyý}’ú€þêµë6lúdóÖϾؾs×Þýzú¶PÞ>Œðè¸Äd¨áBA™¸ZÖÐŒƒ68<:Ž[åô,© -ôŸÎ¹§?} XOxòø{2dúЩ7ý ¸TªÐo¬—VÃZY\ÀÏNOå&ÆÅúŒ@?oO }ÍUñð41Eö­l쨯G‡¯ÏIÍÌ-TH¤ò…²÷Uêÿg‘©ÿ¦ì?Bö5ûÒ,Nûp;Ûš¤Õâ²’`6™èðz€çqçc¶V‡ÍM õöïݵsûŸmÝüÉF`õ*ˆ}dÅ\ö—Ô_˜ó<õµÐ_AÐÿíïú ú_íصg¿ž±©ù᣶ǜŽ{øøÓCXQl@?3· ¤L,‘64·u*{}ˆ @ÿÖÝ{pSÕ36}2boƒþ?‰>Vê×÷ú©“€þP²³½ЗˆËK‹ós³ÒS9 ì舰`z€¯—ÇqúG-Á|¸IÆF†ä#û‡@ì;¹zxû£úqI©¹‚Š*P¿ã=SÿÍاž#lLþÓ}ò 1÷/ÁëslôôÐ@ßIe—¢ ܯ#î— Å…ù| ~„Ÿ“˜€Éò‡³(ûƒ™Lºêàg&3˜òžNćÈW“™ÏÏ/,ËÕæ·´+º”'û†NŽMœC­¦gnª¸úËß¼©‹ý·P¨¯[Ñ*—I*J ù™>?áç¥$Còƒül¤ìGüYaaa¡š?°{ðÁg£øIÜä’ŸÃÏ'™ÿÜü64¿·hxäÌ„þ”&ô+¥o¿ƒ­ñÐ_,€×«éüÄÈPŸÔ—J*…¹™©œ8ŒaJEH} +-}¨}r T“j£jwÌÉÅÍÓÛ/ŠŒ‰KLæedç–EU52È0ʼn“}ÀþØÙó—._›ÆGI±ÿ`ûÿ~wöÿ9‡ý¯ïݹ5sÙ95УT´5Õ×ûÅp!a—‰dùy»»:ÚÛ¥™™ýŸýúŠúÌã8>GLr“ü{‰-6:,E@=; EzQzg]ª°ôeuiR좢ˆŠ(ûE—èY¨¨gÔ™$we&÷ù>¿ß +-Üé¨Q'a†çvùoŸù>¯çýêéh©«Îž1}êäI/a±¯2Ìþ{Yýè«pè<ý±ã'Nš9 èË‹·Vm£²8xøèñŽÎî³þ~ùÛ BÿÙ{C…úèáƒèª3]§OÇs²yﮦíµÕeEò|iVz*fL†!óY»ÚÓÝÅÑÎÆÊ‚…þf>Ätuu=¸Ã´`!bßÂÚÖÑÕcõ:_¼ebÄÉ’¬&2$`ãºÕ®Ž¶Öf”ú(}6¬˜V>Qæ™ Q0¬æh{'W¯5ë6ø†„GÅŠS$™9y…Š¤X}ãÎ=ûÁþ±v¼œp‰ÒÃéÆÍ[ìÝÄíæïaÿ×—³ÏNæ=žý«—/ñì·Ø·«©¾¦²¬¨P–“‘š$Ž‰ +- òÛÀ~¢~âÒE Læ´5ÕÀþ´)`cŸÅ>Øÿd˜ý÷¸úSú|ê5zì¸ “¾œ2í«™sÔ4´uõçý¥¦ÔÁqí¿ ÐÈqRjFv^aQYE ªbß–V†þùKì)©œ­=y9ú¿þôŸFÿпpîë®SÔ÷ïÙÙX¿ è+ +-e¹™’ÍIâØèˆ@?_ ïáêdSdnÊBßOækkiijjjiióìSì/7·´±wv_µv^3BqÔ/äÕoZê¿!ûØоû÷zïÞ¡Eî_f¹ß=ÈýÛë¶UW–—• ø óóþŒô´T^~±ˆÙ/ŒŽŽÿ¸Ø¢OQQÑÑBa Ÿ?5-‘Ÿ—_ˆÌ/)+¯¬ÞV·½qùÝ,ô )ŠÓ;w{ïáÑÈêôÙ«ÑWNÓ½ïÜz+õë™úY’dqLD•°‡‹ƒ­Õ +-S¤þ<†>Š–6›U¸olB¹¿ÜÌÂÊÆÎÑÅØß#JLIËÈÉ+ØR²µ²†c¿¥•±[Ê=ØÑì{öÓ/4LÏ°ÏõØ¥ógºO·km9°wWc}MEiQa^6ZL¸iÃÚU.¸Ùè7‚}}]m µÙ3¿š6åˉ`ô(Ä>±ÿ×Áìÿe˜ýwZÿƒþBÿSý/F3nüD†þl5 -]}Cãù —p }6}Qâæt ¯(­¨©kÄS’ÍV×™ó4ZtVqTyôŸ¿j°ÞýÇÊž¸yƒ„PèÒöc/ЯÜZ¢(ÌÃS2%Q‚ñZ·ÆËÝÅÑÞÆÊÂl9ú†z"MM uu M¸öç#ö—™Y®´wróÂÍõEP_:TÕ=ûÜ=úøaíiÏí[ÿ¼ÞŸû]§;Ú·µ>4À} +-þ’"…¼ÅŸ›•™!!ù““Èþx±H$Š‹‹ÅÀ>ÅÆÅáŸâxxŸ”¤?+'—*_®(*¡Ìd~kÛñöŽÓBDÝîaFáÑÈ"迵úÅP?-Y,Œö‡ˆîÎö6–æË— õ õY¡Ð¸j R´iXõ çS¤,3]a¹ÒÎÁÙÍsõZŸÁa‘BQB2jLZ°¥¸¬²¦®aÇnê±cídÿÏþ³÷Â>KŽý^¾È¾û]8›­‡š÷îl¬«®(UH³Ò7'Š„ˆ±M>Þ«Ü]l¬VàGÎ76Ô×ÕÒPåÙ?nÌè‘Jö?%öGû*Ãì¿ãêG_…CÿãèäПÑø.èÿ2ý>þyý;š« gú­-„~C] ÐßR—‘–’ ÂK28M±ÚÓÍÅÑn%ÊiÙúúÌ|ˆ¯Æ–:±¯+ЧØg;¨ïíã õ3¡þÖW«ÿÓŸXýW±þCì³Ü'ö±«÷èí¡»”rÿ +-—ûJ÷_ô~}m ‚Ÿƒ¿°@FÉùÓA?ìgø'&&$àà>âÄ=¼OM“øÙ¹Ò2¿¦¶¾AiþaÞ|.ô¯p¡ëNOï÷1I„>ÒOCý·P¿êW—Bý$±0<ØoÃZ/7'û•f˳ÔGék±BÁ¬ª¿ˆC#“ù /55·´¶û«p0ýƒB#…qñÉ©éÙÒ|yqYEµ’ý¶<ûWxö{ß'û?+G‰Î'cÿ»kW¾¹xŽØo;r¨‡³¶ºgSš%IIˆû×{{¹)ï6°¯§£¥®:{Æô©“'M?v0ûý±¯2¬þ;¬èÔþgŸú£ÆŒ?aП1kŽº¦ŽžÑCû4 yðsH|DþE1#¿ª™ßдs÷€Î?Õ ó)ô¯²Ð¿y›xºß÷ó‰ÒÐ@ÿ­ÔobêK¡¾Häçì¬-L—.¢ÔÇÔŸW¶ú+…§‹–,7³°¶±wrûë}ý‚B#¢ãâ“6§ãpÊ‹À~íö¦]{Ðñì8ÝMQvåÛÈ>Nè}ÆþuŽý¯;;N´A“íh¨­B’åçf¢Èâ¢Ãƒý}ׯñ¤ËÍ’]nFÿ²__AQeiÇk-ËÙ§PŒÄnh"ˆ ‚d$(HnFAI +-’s$G%6QZD„A "a)†‘ÑÁajõefvöi÷;çÞÛÝPŽã*S%Uœ*«ìGn}ßïü¼¬4³¿ØØŠÕö·ð±¿ûŸx©O¡¿ÐǩѦЗ‘WÕÿ8û¿pÙ_þi ݧDîÃÇxñÜJ¹ÏAî³ê ø«*0üùy¹¬l? ì¿ô‡s‹<èÿ ýíxðƒŸ†Ä‡ÈÏË/Àäã̯k`#ó9`~72ÿ)˜2A‘’¡8-¡Ð'Ñÿe} ÿ ê òÔÏõã@ý _Ï çlO›èA«©‡ŠÔÀ¢ƒ3æeÊuè]}#SóÓ6vga9½‚‚¯ßˆ‚&KÉÈÎ…(Cì7!ö»W³VtyíÙ‡9B+:ñbtˆ`¿½…]w¯²´0Ÿ•‘’Èôõvwqr°E·›¾.ºÝ”*ÊËHÓ%ÄDöìÞ)¼]HP€Œý ö×æ|ý¿côÿ±UPÐßµGDL‚&-#§ªÕÒÑ346?mkïäâæåËôoDÇ&¤d°ò K+ïÖ5¶´s0úC£ÔH-èÿkз +-}`iøÙÀ“^T­M µw+ýÜìŒÔÄÛ·¢n„]ògx¹“è›èë?vTýˆ +- +-}è&Ø :F£IÂ?€­ľ2ñ¦12µ´±wvõd0ƒ®­wõ?ý·KoˆÜŸ{93=59>ö|dèÙÓ~pÿ1á~k3] qQÁ?‡¤ìOINNþ¸~$%%'§€÷ø,$þ‚¢b’|œùÍ­`~'Ñùý`þÈó±ñÉ©é™—sóX¦7ú+Ñÿ÷:@ÿÓÕo#ÔÏõ£A}&¨ïŒÔ7:yâ8tŠòá}rbid§ÈÉ+B§(«ªiÓÖÑ38eB²ïæés1 ðêõðÈ›q )éYÀ~iÁ>ç!—ý)´£ kÆþoûhKáÙ¸ˆ—tjbltèé“ÞöæÆÚ»¥…yÙÀ~lôëW/3}½ÜÎ;ÙÛàë =jTà•“‘¢!öwíÞ&$¸•dÿÄþfÄþ¦ ö?ÿpÑß„ÐߌÐÿ†B_@h›ð}©}r +-pÃ\™YÚØ9žwóbø_¾zÐONÏÎ+,‘jlnÇõthtŒ(„þ?ú¿ý5èwóÐ/º“›ž’w3êÆõà €‹ /7ç³v6§ÍMŒ ôtµ!›T•£Ð—• ¢IJJà#)ICìËAì+¡ûMWÿRßÉÕƒÁ Dê'rÕç<ê}²ÞÔÿcöáãâ]%Ýö¹¹_xjb¥ûœŽvüõµþÊò2¿ÉOП•™™‘‘ü§¥rüHOÏÈÈÌÌ"À§Ä/+¯Dä×Ö7°›[ÚÚ;8]÷bó‡ùSP¼ÐK™Gi ÿ1õ_/.¬R¿ÔOõï1ž®Îö6–¦§Nêjkª«*Ú¯@d +-Œ,> ?¸/+G澆¦–Ή“§LÌ,­Ï88¿àéãÇ ¼—œž•ƒØ¯®©g·à%í†4›š~9;Ù_Zcö—¹ìOû#$ûmÍ µÕ%yÙéÉñ·¢Â}†ç…óŽv6–fF'àUƒî7¹}R4qѽ»1û|ìóbÓ†úŸuøÑ'RúÛwìÚ½WT\RjŸ¬ÂþCÊ€þñ(€­íΞ»àÉð¿t%$<ê Ÿ•[PRQ]ÛÐÜÖA ?26ãD¡Ï¦ ÿ¡aúSô_“èOqÑÈ!Я(ô³Òáùx3&*0ÀÏÇÓ g¬ýS'õt´55ÔT” ô ›ÐIHˆ‹‹‰‰‰‹ƒû4:,‘<õªÑ74±°†Gé‹Ô/"ÔïêYêÿûü¹ÿ#Îý…ù¹Ù>÷ž|Ûû¸» {+†Šÿnue–¿è'ìÏa±XÙÙpP~°X99¹„÷…„ø•ÕwQå7°›ZZÛïs<ìêFæð™?3;7¿€CÿGþЧÐÿÏ×þÿ£~¡~"R?ÉðpuÂêëëâ>¸ŸèÈq|ðÄ’ïS˜Ù#êGµ`A )ö=¼ý˜—¯„„EÆÄ&$§eåäò±ßÃeæ Ø_9L¿ó؇كه'ãøØÚÓGmM 5ÕåŹYiI·ý+—.úx\8wöŒµ\pÀ¾úe¸àd÷Ñ%û;wlß&ì#õý-|ìoÄþ眿qÕ§Ðßècõ· +-ú;1útiYùý‡”TÕ5µu!%,¬Ïœuvõð¹xéʵ°È›·“ÒàõX\^UÇŽÎG0MÏ0ú3ýÞ¬Fÿ÷/C™@DÐïÃOÇv}M5B?'+=9!.&2<äj ÓêÎ4°(UˆRAÔÃʪjG×Õ742µ°²µw<çêáíë¶4":6>9-“•_XRÎÇ~?°?¶æìÿJ±ÿóòÛ%x4~??;3=9þØïëö[›êkªÊ‹ïädû7#îAšy¸:;œ±²0¿kà†“‘¦KŠ‰ûÂÛ…ÈØß`ÿKÏ*ô7cô©ÔÚ.¼s÷1 º´ 䯒ª ùkneëàìâîíèÇÄ%¦fÂÛ±¬ê^=»õ>‰þóñIr”Þ,½]þ–£ÿ+FOÒ—¢??‹Þ€þàJô ós²Ò’bc"ÂB®\fúzúŽö¶V¦Æ†úÐGÕU•!šˆÐGæ‹ŠŠˆìÝ»WDDD±O'Þ5Jªð®Ñ34õ]ÜAý`Bý¼¢òê:özUÿÙlj†—•—ûÐi?,Âí +-_ÜŸÄî?èï#‚¿“ƒàoif76Pò#úÁþÒ’ÄÿŠSŒ´/-++GàSâ7465· ò9Dæ÷õ >ÆæO"ógç¿[xµ¡¿Ä }r’¨QúêÑÿ/õÅ?®~O¡~V?* Ô÷õíúzÇiàþ• iäТ‰åKÈ}˜Z5cÚºz\öݽ|ý!ÎB#¢oÅ'¥f²ò€ýª{uˆ}´ªýƒC£8ÐÖ„}j”ˆIzO±–uæŸÀ>ÚÕž®÷[Ùõ÷ªÊŠòs2Sãb"Bƒü¼Ý]œlO›£+?lá¥Iˆ‰ìÙõ?öë<ª§u àøb9Z÷/iNCiÔ<(Í*J©”¢ðKs¢R”R)RI§DˆHe §Cudh4ètˆC¦ÄµÜuËZ×Zç>Ïûî½»t\çÞZt—÷¯úý·÷zžÏþ¾„ýI û"Èþd<Çþ—†tLýñýï&Šˆ°è‹Š‰KJÉ úŠ3ç(«ªÏÓÑ72úµwpvóX±Jà»ÐÏÈÊ9PPX„£TUs¹ïmí]݃Ñ3âèí±ó6AÿgýcGÈÙ·g÷ÎíI[·lÚ¾.8Àwµ7EßÎ*b¾¡¾®–&4L„>¬’?Àì+‚úäg`¼ÀÂÆÞq)U?œªŸý§ê¿Æ'üêÕ†}vWé² +-s€ä>”ܪîÝíáÜoi¢Á__Ká¯DùËYúÁ~Ä¿èøqð¾äà_ðCrÞ3àŸ#âWRòkëiæ7µpæ÷ܽ×ûà·‡hþ3œ".ôé$q£ôµ£?Œú¿V¿óöMªþ¹²“Ç +-ò¨úÑ ¾ï*/wG{ËLþBê+²SKÂC‹¹OØ×Ñ3465³´±]äèìêî uæº!2:6>)%uWfVNÞAÂþÙóÕ£Ä>³¯˜8EÏ8ö1Ñ®7Ô_®e-+.‚@ËÉÊHÛžì‡û |Vx¸:;ÀÓRöÕU”ái ûR’âb¢<ö…±ÿý¿z†¤þw$õ…èKHÉÈÊMU•UÔçiëaüÚØ98¹º{ùüƒÖ…GÅÄ'mOËÈÚŸwèhQqÙYè‡Ëõ xkô{(úÏú_¼|õ—uÐý÷è?‚þu¸4RôOôóröeîÚ™’´5vSä†uAþ€¾§»«³ã";&ScC=‚¾úò@¾,9à>°±?‹ùÈ›õ—yùø†Rõ3‡ªßýk/§þ?Æ‚úCÙÿÀgŸyѼÜG÷Q÷¡÷ï û·Z[0ø¯50ð×ðäGúËJKK@ÿSÅÅð`ü?•””‚÷>OüŽ|Ìü–Ö[míwHç£ù¨ùƒBÿw }!ú¾rôÿƒú½©ŸMÕ ôõñZ¶Ô·õu´4TçBêϘN§v +-™YZù©ôŠ:GYEMöÔÀØÄÌšc_àº>2:&>1%5=–õàáB!û £Å>É`Ÿ­´»=Ýí·Z}X×ógK‹=”·/Z|LTøº ¿5>^î®NgìÕÖt†ÂT9Y) ñÉÈ>¨ìOä±?îûé >Q’èd@_ÑŸñýl%5M‚¾…5Ü]Ü=½×øÁ½qs\bÊÎÝ{aŽŽ?Y +-cô㥺†ë-·Ú;»{îöþö¨ï‰ýAÿÃH ßBÐÿ©ºòÂÙ2Dÿ`^NVæ®ÔÌ‡È ¡Aþ‚U+)ú¶ÖPÆzpsTSQžÃ&“쎌Œ´´´ŒŒŒ,²Ob¿rpµ1…çõ=}|¨úiÿêÿûèþ»¡¹ÿ±û]í$ø›øëxò#ýåçÿ3§Oƒÿü?œAîÁ{Ÿ'~C~c3ÉüöŽ®?3_úôÎ8FÐV}gFý_»‡ªŸÉ¨àëãIÕ75¦ñ;‡Ì-3¶xdÉÔÒÜgØ×502UµµwprY¶|…À/0t}DtL\brj:4Z.°_Äc¿qdغ³dŒþNÙï{ø ÷nÙØÆkWê.ýXqþLéÉãGæfû)‰q›7n \»ÆÛs™Ë’ŶÖð¼p·Ñ„» |å}iÊ>ýoìÿ‡C<¢? Ï¦þd1 IiÙ)òÓ¦Ã0ÍUÓÐÒ5065·²]´\¹zm`(A?9uמì\¸3ž,9S^Q}©îÊ5œ¡Î;€þƒ‡}8B°¯¡ÿ¯‘@¿Cˆ~Åy‚þáƒyû³2ÓSSãc¢#ׇù!úË\œ} ¸6èiSôg}¯8]˜äKáøa öA}ò™õÍ­íœA}Q?!…¨_ê_Ãêÿ1dUé«fsÿ-?÷9÷ûX÷{ÀýÎŽvþ›ÍMÿU¾ü@edÿ… çü°ÿí‘ûŠJ_(~!¿ È'™æ÷°æ÷qæóCÿ-ú|ôÙ§úÒow˜óÙê_õ Qý´”¢¾Ôwv°³675Ò×ÖTÇöU„Ôgæ–¦VÈ%u¶Ò\UuMm]}#(4«…,ûküCÂ"¢bâ’w¤gìÝŸ›ì—Röë‘ýÖÛ]£Å>YZÂ>îlk3°+[~¦66?7{Ï®Ôä„-›"ׇ®]½r9|å-´2‡Ïœ.s¹™>M~ŠŒ´¤„Ødˆ}¾²?Ùϱÿ¥5#‡>M}}Q1qIiD_ +-BUË×Ä æÈÑÙmùŠU¾!ë#7mIô3÷ýø؉’Óå±®Þhn%áÀ¢? DÿÝ( ß D¿ððÁÜýYé©É‰q1Ñ0D~ŸË}û…Ö LŒôuµç©«ÎUš »#OvGJJ’pöG/7³”æâåÆÈ„¨ïæéêGÅrê—VÿÑ“gcJýO³ÏåþšûÔýÇÄýû½à>'ÿ-,þAòý`?âúÿƒüTUUM¼ð‰ßLÈ¿ÝŽäÿæ÷Þ'æ?¦æÓÐà ý±…þ'Ôöä£~#U¿”S?6 +-Õ÷fÔ71ÒÓæÒW^N–¶ +-N­urö +-²¯¥£o8m¡Ýâ%KÝ<€ýµ!aáQ›ã¶íHËØ››_€ìŸAö/a¿odØÇ°O×ö)a·¶­µù–ZÕÅòÓ°³ù?ìËLß±mk,nl€ïªnÎŽö -¡Ñðv£Š·¾”¤¸˜(}aìcÿóÏ8N}}Hý¿ú} )%$eõy:z†&f–6öή0Dÿà°ˆèØ­Ûv¤gîË9PPxâÔés«j(úmt~ÂÒòÆg”Ñ/."èïÍHß‘œå°†CßÊ|Á|@_K“ ?Sq†Â4úÒ°8ôÀIËÐ؇۪†<2\nõC6°êâÔo¼Ù&Tÿ«þû¯_ý?†yÝä}³îã+ÇP£î¿àõþ}ü¿tcð‚åú‰ý€ÿO55à?ÿÀ ý%üÚ:Ÿˆ?ˆ|È|Bþ=Æ|Úù/¨ùX!Æ|:IAô¥ßì°g°úïYõ_ Õo#êWõ±êoAõݨú†zÚLù*`êK³“+Iæ–ä¾\S¡ÑTÔ4´`_MÍ-m(û^ޫׇ…oܼÙßMØ?Šì—WTÕŒûïùì¿èþ”ÙÛ®Ž¶›M7®Ö_®©ºp®ìTÑÑ‚9YiÛ“ý°`—‡«“ƒå‚ùðÈp½Qž=>tð“’Ÿ ì£úÀþDûã¾±ÿ™gXôiêO èKËÊa÷ÎVRÁî5„+#Ì“‹»\ƒÖ…GÅÄ'mOËÈÊ9pæ§ìÜ…J2>M7ÛÚ»ºé]ñéóþ—,úo)ˆ#‡~kKãõ†zŠ~)¢Ÿè§!ú›£ÂÃB}/·¥KÛÙÀ…q¾¡¾Ž–¦šŠò@6Gž3_œdcÔŸ‰×-]ÃùfV¶‹árã-ðçÔÏ¥êWV¿€ªO9ÔÿˆýásÜMÝï'î?æà§ÁßÑΓŸÒOìüëjkÁþ©%Ú×Cà_ih¸ŠÏ¿ƒf>Gþc¾ù¯ÁüO†þ×þPõq¨‰úý<õ¯þ|‰Q?—Sß_à½ÜÍy±­•™‰¡®–¾rdt™Éez…äþt¸§ö!Ó ŒM¡Óì9:ö}þÍ~½G唯_cµ´ÎZçè*G®‘»î¥û¢¤(º¨è¢«n”®Š.Ô(¢•Š¡¤S£™\š‰t™W:F“A£sX³æ8ëœçùýöÞï[½RfæÐZýþëõ×ޞ糿?ÿ@d?.a²ŸÅ²…°ë`ÿ5a¿ûm-MÀ>,îUWË!Ö +- r>˜ìÇFíØèçåîêdok³zÕ +-C]- r¿™?—°?EFZRBœ‰}¾²?û£8ú}D_”¢?ILBRzò†hábH !ã+W[Ûnpru÷ò  ‹Ü¹;)%íàác¹ù…gΕ]¾ZUCÐoôyý'ýþ?ýRDÿDöÑLD?aWLdض Ÿ-n®,ú¦FºÚËÔU•ýysaqf0¡‹#I²Oc–ÜoøêÛ€úî¬úû3@ý"T¿æË›cXýw³/ûÜ6Èý‡~.ùA~ ªÿö-‚ÿº:ð_ðÔ¡öÈý­ÛPø>ŠÏF~kë€Ìnþ€ÐCèPý/Aý²sE ~Æ~V}wPßÕ×£ê“î.;`tÉä’Ñ>2mÞ|\Y5`_ßÈtÅJ`ßÎÞ Ø÷ö ‹ ì§gf?QPøÁì SŸÏ>“„}œ ˜Ÿ§Oûí¼¶æ¦Æ†¯oÕÕÖTa®æçÀ⦥$íÞà»ÅÍÅiÃ:kË•PjÀ¾*sÁ™‰=YJRBŒa_TT öÇÙÙšú|ôÅ%¥&ÃaõÎÃêUQ×ÔÑ7^nn¹fÝzG·-¾Á¡1»“SÓ3æäŸ*>Wz¹¢ª¦¶F§±©¹×v…ÏzêëG ÿEÑ'ƒ3L.Œý/þv­â¢_p";+“¢èïãIÐ_»ÆÑ××ÕZ¦¦Â /7 j‰¿8ôÀöHcì³E -=#SPßÎÑ…Q?1…Q¿lÌ«?”ý¹O6^=¼{ØÚèþsÖ}ø“ŸÐOíÇð¿þ ü¥¹Gï¾ÆGñ›˜È Ÿ5ÿ9šÕðO°‡àƒú +-ý1þûÕ0Xý”ĸ¨0TßÅÑÔ75ÒÓÒPQ\Âfï_g—+–©Ó¦ÃðΑö—*ª¨ihéè™°ì»löôöCö£ãâ÷¤¤¥gö‹…³ßýAìÿg ûd}q{‘ýgð¨»:;Úy­Í÷)ûÕ¸»%ŧò ×ÒS“wÅD„oõñÜì ÷›5æpÁÑÑTWQdo8²ðÔR’âûØÿlœýœ¡èOôA}D_BJšò´øCôLÍ-¬à®è¼ÙÓgkphxt\ÂÞ}2²²óN•”^ª¸V}пûíýæV@¿³ë1ýW? ŽÍèÐýô+¯ ú…ýtD?.&",$ÐßÐw²·ôW®àÐ_ +-—Eù¹$–˜Ð‡µga_†Üpfà [KÏÐÔÜ’Q?8,*Žª_  þP¿óûî1¨þ‡,ëÜî>ü??ù¡ùïßCûüÿA#Ü£÷÷îCãó#ŸÏf>ßü¾>AóßúŸö«~‡úÝßwõˆúå ~§~°?UßÒÜÔPOKÕ‡fþ¦^„_Jš$‹,°?›a_YMöÖØ·°²±Eö=¼ýBB)û©È~îÿ‹}˜Ü_Â>Yß»õ7¿º^}íÊ¥ g‹NæegeØ·7!.:|{¿·Ç&g»µVPkzÚ°·ŠKè?vÒRâbDýqöG8ô' ú"}šúý)\ó*(«-ÓÖ341[eecg¿q“‡·ÐvýCGŽŸ8YtöÂÅ+•Õ׿ºY÷Û{Z¿{HÑÿÐ! ýw ÍoAÿ8¢Ÿ²'ž¢ïçí¹Ù…EßÄP_GKCMY‘ ?g6AŸ¿6bô û$ö釪¯‹ê[Û9¸¸{ùsêç úåDý†±¬¾pöÙÜâ>ü'ôö¢û$ø ü¤ø™ä'ô“ê§øƒþè?ÿàß”{RøÍ-ÐøLä“Ê'ä“ÌGó{…›Ï…þXB_Pý_õ_½ìç«ßÊW¿¤¨ ‡¯¾—»‹ƒ5ª¯Ë¨O£wÊ€éEø%iîËN›ã+?oÁ"`_؇Í]nŽìopö½ýðèØø$dÿa¿äwfÐ +-³ìÃ÷ û°À-îöaË/ž?{úä‰ãGíÿ|O|lÔŽm~^î®ímmV¯‚ÕEö•¸;<·¤û„}dÇþGfõÓ>‚èÓÔ¥èO“”žÌ%ïb%U -](†ÕÖ ®î^~ÛvDÅÆïù|ÿ¡#Çr NŸ9±œLMýh_24]»{ÈÌ°è¿ÁÈ š˜_¢ÿôèô3ÒSýèˆÐ?oDßÖÆÊÑ×ÓÑÔPEô ú3gL“eC·f9,ûäŽê/X¬ ¬®É©ïÆW? Ô/á«ßúð«~ÿËWŒú¿Ž õ±?4÷‡ºÁÿŒ ~€_ ùyß!ýÔ~ÿ&âÿ€ƒ¿Á?ï|h|*>ßäs™æÿ$Ä|¡¡?Ðúx¨~=¨_IÕÏ:Ä©ïæâ`KÕ×TWVX¼ÔÇù•™LУãK‡WR +-ÙŸ: Wn.°½¦ª®©­g`̲ï¼ÉÃË7 ˜eÿÀ(Øýì¿y#n=t…ÛZšî}s‡lðÕò²óPm¹ÇLKIÚ½32,$Àw‹›«Óxì•+Œ tµ4T•`uçÍe>wR’â,û¢¢ã±?Šó§>‹þD}qœZ¼òP J*êš:88–Öë ܶø„„EîÜ”’vðð±œüÂ3çÊ._­‚™¹ è7µ´Ñ‘éùñéó^vb~úäz8,ú¹ý¤øXŠ¾ ï¸Ñ7_Ρ¿dL–\§ÈH3[3iÒ_ðàêPõÉ%žÔWÓ„¯™¥µ­ƒ3§~Ú!Pÿ4¨_ ê×£ú¼±«>ß}>ûÂÜÿ™q¿¿ïü üPü4ùIó·?dìüAÿüðù¡¹GïüöGD|ˆ|ZùH>“ù/úú¡†3úûMwØWüöÝê76Ôߨ­®,/-9ê§%'ÄF†¢úΨ¾™‰®¦ª/?‡$/™_š,txÙ»*eþ’ªú2Êþ*h6dßÙß»;)™²Ÿì_û¿Œ–ý_8öatzŸ?eØçû wn×ÕÖTU\.ƒÎÏ9š™žšœ¸+&"4x«'ìïúuk,Í—éëhÂ%gé¢òô–#ðêÿ‰Äþ8û#=BÑ'êƒ}Lð}ó-QDôõLÍ-Ö¬]ïè¼ÙÓgkphDÌ®ÄäÔôÌ£9y§ .WTÕÔÖÁÄ465·ñÚ úOúýó22ôß~úGXôÃCƒ úÎ,úÆzÚšêªJ +-}¹Y}&ôaiü?ãÁÕAöÉ-gÆ,9øÞ¡ú: ¾£~PhdlB2£~iyeuíú†FFýž¡ê¿eŸóc›3ìžûÂ{ÿ%ºOƒŸÂÿ¤ç6ùÿÑÙù÷ŽÆ~ÀôÇÓÆú7¹Gï)øŒøù?ô<¡ä³™?Œùc,ôÕÿ÷`õ{º»«ŸÏ©äêÛÛZ[€ú:¨>Ø'GÔ‡–`æ—©1Z-ûSe§Ï@öç/öU€}]cS3`ÝzÂþÖ‘³ÿT8ûoGÃ>î1ŒN·Æí¼¶æû _ߪ«­¾Vq©´¤øT^vVÆÔ䄸èðíAþÞ°Ávk­,ÌLô´—©A³-œÏ<º ytû„}dÇþǶõ“=ú}‚>›úT¾i8786Êj †&f«¬lì6nòðöÚ—°wߌ¬ì¼“E80ת¯×‘yinåµwtv=ÆqéýûõÕcžÇüp±ì$—º(¥ûÝ%J÷(*]t/EH!T(*ÊÈ%ÊÔ(*S; “£ã²µ%m! m‹F¶Ø53fÆ:³ŸÏ÷û<ÏïéwIÌœùÍéó_õ×óôþ¼ž÷|ùo\[&-ïDÿ퇣Ÿ.@?,$ÐÑ_æ`‹è›™êë ú*ˆþôiS 7 úГùc(ûdmÈ™ê«À•£gHÔwZáîí.P?OXýNQõßH‰úâØÈ}^áGøIå'ò³ô? øƒþ8÷¸¡?ßGîÁ{ +->'>”|$ŸWóÑüW’Í—*ô%©ß+P¿ùf=Q¿â\qaÞñ#œúÁ~ ¾QßPoÞÜ9HSxe±ñÒs­—w’ÜdÂ>”65õ¹ótô Í,bÙ÷ò îÏ~Î;؇ÿÈ qì¿}'ûÜ&ÓEfØïê|ìßn¹ÕXãê•š‹°Æ¥ÅgNç⧦ìÞ¾&Ð×Ë}år[«Å Í ðÌQ#ûK¾xãeáÑ û22¼²?Äþ@3L¤êËÈ°èø06 +-Šp#ªÃ‰h™Yle¢»§O@HxdtlÜö]Éû:r,÷taqIÄ¥æÊÕõ–Ûw…ÐÇ°ÀÖöÏÊ ÐÿþýÐß›”¸=nsÌúua!ˆ¾  ¿t ‡¾:T…™ú\Ññé°ìã_yã8öGòØ6ľäAªþhPŸAŸ¸™Qøtô@>Kkûe.n«ýƒÃ"6lÚš˜´ï@fvÎÉO ŠJÎ_¨Â°\¯kh"YAôŸtãa( }1IùÑôW¹RôA` õt 1ˆ¾"4…)“ñBäzÒ˜1"ƒ{ÃW_‘¨¯kh2ß +-Õ÷bÔß•’– ê€úU þuP¿µíþP¿ûÙsTÿ•ª/±îà>…¿¿ü„~b?ÑŸøßoÈ/ ÷à=Ÿëø(>%æKúýÕÿ‘Qÿ%§~û]¢~mÍWU¥Å§ˆú»¶ÄD†ûyú¶ ¾ £>À'êËøÐ|&¿Ü¹:j›üÔé +-,ûÚzƦÀ¾•½“3°ïúNöoÀ>ùW À¾ ;ˆ°ßƒOüNÜåÖ榆:\åêª çÏäÌÉÎ<°/)1aë¦ aÁþ«=\]œì­-Í75Ò×ÑÂCg¦"”}öéQ}±ìÿÖ¾þ.‡C8¢?‚ O«>eO"3Ci¶Ê ì &k;ˆ‹‡·_Pèºõ·Äïܳ7-#ëè ¸ Ïž¯¨¬¾tÑïФPôûAáЗPõè“*ÄCŸ^…OÞ }/ýù}-}‚þD}Ö|øÞáÞŒEöeÇÃÊÈOÅCGMƒQßÖÉÅ Ô‹ŒÙ’@Õ?UP\ZQõUM-QÿnûƒÎ.ªþKFý¥KýŸ…þ÷q_,üT~ ŸÚøƒþâ柄{âýSžøbÈ6ÿ'IæKËû• ~U¿‘§þ1úA~^n.ŽD}è»jÊ þTy1d{ [[÷}\a(nòS±¹ÍR†êƲ¿˜°¿Ø÷öŸöû^oó‰ÛÌ+û ûì:÷õ>ïù¦›nsÛ–æ›ûëµÚË—ª++`—óóNÍÊHÛ»ggü–ë×…ùy¯Zéìh{lnb¨§­©¡—47y(näñIÙ'ì@ö‡±/y†‰T}Š>§ ìijúæ /µu\añ \³6*fó¶»SRÓrüTþ™ÏÏ•W~yñr-åfsË6ýozž÷ö½|L$¥Dý›âÑß“˜…èû úNö6ˆ¾©±ž6‡þ4¬ ±'Ðûp !Ÿ nÍXæÔÁçWœ ¯¥k@Ôwõ}ƒêã©ßø‡PÐî3…Ÿ?#?Óù~´ñ§þ÷úÛ§Ä{>_|ùLÍÿ£˜/Nýo…Ô¿ÕXGÔ//-õ³3RYõ}½ÜœAýE¨¾¨OÚ®ÜÄÇ e˜-.¤îsì+!ûZÚºF¦ó2ì»ö×FEÇnMØù`[Üwd¡_öÉ>w´·Ýn¹EÙ¿øå奟Ÿ9}êø'‡ÓSSvïض9&jíš@_/÷Ël­/436ÐÕÖT'½i¤º—ýˆa_FF¤ì±/2"èäÐGô&Mž‚-AYU}î<]c³V6ËV¸{ú„„GFÇÆmß•¼ÿà¡#ÇrOŸ).-ûâ/k®\½Qßx«åv[{ÇCö&샔¼Âå> þkú4$;ƒ~(EßзZÌ¡?GUy–}Rô™…mCÙ'/@–¯¾Ž‰ù"K[Gg7ONýÔŒlP¿¨´œ¨_×xKHýo¥S}öŸÿç¾~ü,ýÔ_üà©÷|ø|ò©ù?H2_ÊЗ ~ªÿ¸ë¨ßê_«­©®,/)ÊÏEõ“ã7GG€úž ¾å"sc¢þ ª¾,UŸë-Ls¡!Æ5–“‡=žAÙ×$ì›sì{úø Äþu(q”ý‡„ýû¯?Œ} WãwÁB·ãB7Ö߸z¥ö¹¬´¸ðtî±#‡îOÞµ=.6:2<$ÀÇÓÍe™½¥Å3#8u檫’ö6ö˜~ö@ýÑ¤ì ±ÿ[û»ýáˆþŠ>QÍ›€%Л—¡Ž>4 Kk{'7ÕþÁa6mMHLÚw 3;ç䧅E%e %ˆ~C†¤ãag×ãþÕ€´µ_‚~7E2Ò"ýTúþ€þJŠþBD_W[KÑWšè˱èÿy,Ý—Qìà @öQýI“áÖ¯ªo êÛ8:»‚ú¡Ñ›ã“QýÜü¢’òÊêšÚk ~ ¨ÿ¨ë1ªß'ÅêäþžûÂðóägèû{(ÿâ†üñ9 >O|–|^ÍgÌ#åæÓWû–S^ãwH «~ǽ;Dý+_3êçpê‡úzº:;õõu´P½Ó=þãû°ßAØïþì ít/°ßMÙ¿w·õïM õd£«.œ/)‚…ÎÉÎ<°/)1aë¦ aÁþ«= ÂÙY/gϯ1Ge¶~öoÊ>a²?|ˆ}ñ3L¤êËpUOClº¨ºÚz†Ðu—,…œ¸®òö +-]·~ã–xHIZFÖÑyŸ=_QU©khjnŃЇÖÛó¯^‘„¼ú´ôRô»è×½}w}sS£~èOAô?fÐâ/ƒÃ°O^~÷¦€ú³UÕá«GÔwõ}9õ³rõ¿¾BÔ¿s¯ƒSÏrÜ0ê¿•"š~úŸ0싺ß~N~¤Ÿ±Ÿê/vÈ_{©÷>'þñ䋘ÿ_aó¥êÍòÔ'‚úàSVýª~YÉg ~Vúþ¤T}×å¬úš ¾Ò ¬ºX^˜ª?ŠW]FóØŸ0In2ýyÀ¾ °oimç¸Ø_-žýs|ö[nßmÇ"GÙïíû•Øïy†Mîуû÷î´675àN_ª®¬€•ÎÏ;q4+#mïžñ[6®_èç½jårGÛ¥Kš›êikj¨©ÌR¢×¼zí@Ù—)ûCì÷ôGr胆€IQPœ¥¬¦ŽW¡±´[H‰—oàšµQ1›·íØ’š~øì×kXNéðk\‰Ù¶Í\HÇ("•Ò¶H”BQ¤(**ªqÌq”óNãXé ¥ƒ”J’(‰IIí(’C#{ Ùfsíýÿ?ÏZë]ë}ßÒبËó1}i¹ïßs?A¡‘Ôs™Ù9y× !¥w+ªjjâ.@ô›¥ ßJ>¤£ÿú7!úUú—¥¢ÿ“tôÇ2è"è÷åЧæwcV†»ø@ýC†úcQýÉ þœù¶¨¾÷ºM?ïÜ÷ ªêt +-Uÿ«~#>pˆú8ö;¤úíq_¿@~¤Ÿµñoí43Ü£÷>_@>3ó;‹ùõÿà«ÿâYcC=Q¿äV!¨Ÿ™ž’x*:œª¿i÷ +-W§Å¶óæÌ21š¬¯7^C >Cž(Æt»Ðc—ûb™qÂ)Ž€ DzoØû'yìß ìW‰±­n_­Ù^K°ÏÖÙ¯ª¸[zûfáµ¼œ‹™çΞIˆ=Þí·mÓúÕžî.NÐh+¸õ¦O5Ð×ÓÖTW=RIqè`ü°à°Ëäâñ/Æþ—vö«:ú]}Š>Š‡ì\@†®Šªº¦¶®¾á´3-¬¬.vrq_õÓº[}wí 8r<:6žƒ™/_ô‹I>ú4ý–OiáŠ~)AÿÊå‹™RÑ÷@ôŠÐŸ ;^S‡¾sÅEùPëóé)Iñ1ÑÇCìÛå»uã:ï•nÎŽö ­--fΘfh0Qwü85U•‘#‡úo¾>?ôîEÇ>a_Ùïò}ÉóÄÔïÆNýÞ8sû+à8¡¬2F 22qÒ#3sËù¶öŽÎn+½×úlÙ¾sïþƒG…GÅÄŸNI;ŸuùJ~AQñ2æ-øáæ%›€ ǧÑç=±ì$ /Áú·ôÏIGE¶™ ýQÊ#È‹Ðï×—Žƒž¢²È²§sõõ¤ïT_Ye¬†Q&¨oϪ¿7àppxtlbrzfvn>¨_ê?àÔÍSÿûiuþÌ‘øÏw_ ~V~Ž~b?Õ_Ú¡ÿúš>+~ Ÿ#¿Mó;Þ7¥SŸ§þ+¢þãú5U÷ÊJnõÓ@ý(TïŽm×zy¸8ÙÛ̳õ ôuµ4TU”‡ƒú +-ýÉÎe¦¾(Çt½@ŽÉܱ?˜°?Ù×cßU’ýDdÆa¿”e¿áÉÓç/~}‰ ÿ<öÙjÿö/ø»›žÃuGš] :²Ÿ{)+#-ùtôúØуû÷îܾÅg׊åËìlçÏ5731š2i‚Ž–†Tš4Z¯>öÁAbìcŸ;è˲è÷ôûQô‡+AD4´ !“ŒMgÏgcç°lù +-¯56C<ü ‹<—˜œ–ql¯¼²š¢ÿ”¢O§>Æÿ> òôóÛDßПèO3䣯8”CÿDÿ¯´+Ý™®tÅo KÇ>¹ûXõ‡+«¨¢ú ¾Å<{'¯µ·í êGúiDý›%e÷ªjÔ?&ê¿â©ÿŸŽ©~ëîKÂ/ŸÐOì§ø‹.öp?þõž€ÏŠßùÝü6Õ©_p5÷âù´ä„ب° ‘úŽv6VfÆS &êh©£úC#x忱3W4^dÅ؇FËÉ+ˆ±¯Ïcß¡öÏeûùÐl`¿‚a¿Q’ý¶}®Ü¤Û¯^û´Û5Õ•å¥%¸çr³/d¤&'ž:|ä€ÿž?o^¿ÚÓÃué’E6PkScœrÚZðÞ¥a VšÎ8ʾ¬û_ÚÚ¯æpèwAôe(úÌp''?` $DiähUuMm=}ƒ©ÓgÌ‚x,Z²ÔÕÃsõúMÛüvÿã—ÃA¡'à%˜zîBvNYåÕ5µëÓAÀ¡ÿN¸Ú;Ú¾¿tô ýqêD°ý¼Ô•fì3/TÿÇÁCQ}u-‰SÍ,¬lì9õ…EÅ&$§¿˜{µ€SÿI§QÿSî áçä§ôSûý¥æÞràsâ‹‘ßYÌ—ª>„ðCõëˆú·AýPÿLBLdXСý{ü¶ú¬ñtõX™ Ô$TŸdÑ«õ/Bö2ì« +-Ù·–d?$<ª}ì·|ûïxìC»áÂ{X[Så¾Yx-/'»{""4öÜn¿mÐìUî.N‹.°²˜5cº¡¾ž¶&|„‘Øj`_ŽvšyòÀWAö»|c_x¾“˜ú¬vä=HvÁȇŠªÚ¸ñº'A:fZXZ/\ìäâÙظÕw×¾ˆÆñèØ„¤³é™sò®Þ¼}‚Á ÿŒ—‹ÏA_ @rè“9P@ÑO=“× +-úVú:ôäåð5È슾È|RZòä!ê¨onµÔw÷\ã³ÕoÏ~P?2&á ¨Ÿêß&ê×õ_‚ú¿wõÛp_~‘üŒý þ¼ €wDÿÖÂyÏ_’üÎ`¾˜úïõ!äMH_]mMUyéí"T?#õL|Ldh §¾³ƒÝKs³é†“&èhª¥¤ˆê#wæl”yAfž­­³¯Õû‡ ûq‰°èû7n•À¤«ºí&ì7‰6] [ïO÷[‚ýæ—M/žQöïWÝ»{§¸¨Û}>=%)>&úxHà¡€}»|·ø¬õ^éæìhokmi>ÓdÚ”IaÍ©QQ1l^~rØjÑí'>ö¿±OŽú²ìÄí…ù@í† ®{Ñô¯ ZM…ý÷ô›ž?kl c€¢_Ô~ôõè”@¿»¨)2øà¡ìcWzõûÊ¡úŠJ£Æ¨kêL˜d8ÝÌÜrƒ3§~`hdLü™Ô T¿:påÕá3§ Á¨ÿ¾ƒ«/Õ})ðóägègìçŽyî¼ãÏ_*ùÜ|iê¿áÔTW{¿²¼´¸èzÞ嬌Ԥø“¡ýwûnÙ°z•›³Ã"PßÕ×ÖTCõ;yÔŽnÜîÝ™(3AîÊ°ÿ=Ç~Ÿ~rýyì«ûzâì{¶Î~eŸŒ:è7Ÿýwíg_Ôð·oÉŸÞü+°«®îÁ?ïWÞ++)†~ç^ÊÊHK>õ>vôàþ½;Þ¼a׊åËìlæÏmfl4öœ–4[i8e¿_ü û²ìio¿ŠÃ¡ßÑ—¡èSëzc:ä@8†+=V]S[OòÔ馳ç̳±[²ÔÕÃkÍ†Í ÿG‚Ã"!ÉiY—r¯Â°¤¬¼²š>1Í +-ÈÄÛv¼Å#Á=›yèWW”—ñÐONŒ‹‰:ô)ôU[Aÿ{ú2ìaÇ>4…\ròøäõÕ4µQ}SP‘ƒ³ÛªÕ¶øîö?q2>)5#ërÞõ¢âÒòÊûµu8õßtõ¥»/„Ÿ/?C?‡ÿ;±K@ìÇìo¿—_œüo>ý’9õáúšQý†GQý;Å7ˆúg“âNF„åÔ_¶d‘µålªþ8Fý¨~oF}A–Es_ûðÚûFƦ,ûË)ûÛ¡ÞûÉ<öËÊ+ªyì76ûÿFöß¼a+þ”²_]‰ ¿qýjnö… (ø©‘aÁGøïñÛ¶iýjÏÿ±_çQ=æ{ÀïÄÔ\sî%Ë0H$*¡T”„V¥E¥}û¥RÑB!S”R’%[¢}Õ¾N%QmJ¥$Q!Rèºçâ`æÌý|¿Ïó{~ÏoI¹î9i<΄Óç¼?¯ïûãêì`kefl »^CuÍ*…å2°Ûb Ðjà €ýIÔÕ“ØçûÆ>ëûŽ«ê“Ôý wÆÌY¨ˆI@2ää¡héè™Y2ì\¶íðöñ 8 eàÜ…˜„”4è%W®!ô¡ë¢Lú½l BÿÃ× ßK "šÀõkWJhèC(ú;y /ˆþt AúhOøiæãe¡©?“T¡¾ÞFS+ÛÍLõOœ‰ŒILÍÌÅê×ܾƒÔïzü©ÿ©ÿ¿w¤ú¿ÿy­bw(øIùIúYøs>œÿùóÙÄÿ,ùê9ÒÔÇAó/sp¯ Ún ¨_uýjIanFjBt䙡A÷{ïpß²ÙÖÒÔPOK]YI©/&*"<›TŸÖpé†YapšÑí:V³/Ìƾ2ž;ûç"£ã’0û°á×ýÛ¸×aö{Ÿõõóbÿ·°Ï±ä¯^öÃ¥Ã,vM uÕU°âÅ…¹YiÉ 1 Ö…ùûB«ÛæâdÏ°45Ò×ÑRWY­(/s€åFe&1E…WÙÿÆþ߸Ðç'¥Ãw$C‚±a'»båje5Mí M-lì·º{îÚëëtäXøÙÈèøäK™¹Ð®WU×54µ÷ ßÏãü}î<×;ú(¨dPè‡|ý¥Ã Oîɸqxl³ ÕŸ- Ïß"P_AIY]KÏÐÔÒvó÷Þû…‚úÑ ©¹…%0P¿å^G'¨ÿ Õ |ç ²?&ÔÊ}&üœò³ìçñpþ¯ÔâŸEþØ0ÿæðÐÀ>ÒÕ‡˜?íéê¼ßÖr§¾¦ª¢¬¤0'#%!úüéãGHõ–&†ºX}¹eK‰‰ÎCêOãP¢-’ý×À~Á~G{+<{µÕ•WK‹ +-r2/%ÅGGž C+¾w—§ûVG; à ښjÊJ°ßÒK$ÅΟ‡ØŸ£$w›9 :û£mî¨ú|˜::ˆŒiÓº9 ñEK +•ÖªB( Í­átóðÚ³ÿ``HØÉ3ç£P"rò‹.ãóÌkmôÈe—w àZˆÛîÞA8|™qô[›Qôó³3P .èû"ôÝx£/¶`>ý©Sp.ØЧÌg±/ðÃG/ ¨? ©?Ô_²L«¯khbÉp Õ?rüôùè„”ŒœÂ’²Šªšú;-m÷aOá÷§«ÿñí7mw¾âÂ} +-~J~šý<øç=Í{–ø4òLjùtõ?QêÿûÍ ]ýÆz0¯¬¸ '=%> +-©xÀg·§›³ÃÂÄ@WSmí*9i¬þœÙ@ݔɓ@º ´8³²<žÆþlì aö%ûËYì›q³!:>éRFv>Á~5lys+b¿›Å>^s”ôaÙçlwïö‰=öôIÏ#8vZq·«,/»Œ¶<51†pâhð¡û÷xyÀŽo²676Ð[¯¡ +-ƒX.#…öÎ4 Xob¹ax|ßØ'¾ï¸ª¾Uo§à~;g.\‰ÅR2(*Zº +[g×í;½}ü §#.Æ&¦¤£PV~ãfM=nº¡êö½À·Fÿýa«> }ZýÇÝ: ôë˜èçèŸFèû“è;Ú1x¢?…‚@ý¡Ð'ž@rX}x†©/-'¿j­š¦®‰ÃÁÙÍs·Ï@¤~T|JzNAqYEeu}#]}ØJýOcB}÷éð³ä§ÑÏŽÿPýçã%>GbF{_õ}N}@ïA;˜WW]Y~¥¸ ;=9.*âÔ±C~X}{ c¤¾‘ ¬fn"n·¨êC"Ä¡ßÊ®X©´Vm¶ž¡‰…õ¦Í[Ü=wí…Û/$,üldt\Ò¥Lh¹¥WQhhjik𰫇lƒd†¿ûØÐg}$úDèh'Ї€¿œLŒ~‰¾Ï0è ñBŸŸŽ>1Œq´yÀŽÀˆÔŸ5g.¨¿ÔW\£ºNGßØÜÆÎÉÕc×>¤~ø¹‹qÉiÙùE þ­ºRýÞ>4À[âÒKêsºÏ?;ý#ПãÇ9þ2Žj´ó¯ÿxªè €yOº‘úM µ·n\+-ÊËJKŠõÂ|÷zmõ­Íôµ‘ú+d¥°úBLõ)æ¸K °ÿ=ûÓx°¯¢N²Ï°sDì{3ÙÀìgæä]öoÖ Uom§³?ÈbÿÈÙ'–ý=mÙû`=]ñ®ß®­®¬¸ZZTý.).êü™“°éÙãåá¶eó&kscC½õëT×*),—‘Z²H|<³g΀ià‡qÐæÁ÷}&úôª/@Vý‰Pn§þ„П+"*¶h±” ŠƒªÆz]c3+[g×í^{ö8 —_ÄÅØÄÔŒl…ŠÊ[µèîƒ$`ôûú¨÷ÿýûÿ}xþXè·µÀû_ƒÑ‡$@Hˆ¹q¢„Ñ÷àDåÐèO ÑÿžBŸü¨²Ï®¾V_JvR_[ßÈÜÔßîµ×7 8 ÔMJËÊ+*½vãVmCR¿=|° cT}.÷¹äç²×_ÁõŒöoýÿøX‰GꣲûJýÇÝ;îÝmº]{óúÕË¿æe^JŒ½pöäÑÃX}ÇMÖfÐp5T àÊHIŠ/õgü„Û-©>Uõéqf^¯,öÙÙ—dcߘž¯PHØIXõ˜„ä4(x$ûõ¸á‘ì÷½ U<Ú¶ûƒ¯_ ô÷={ +-÷NgǽÖæÆÛµpñ †—žš »~âhð!?Ôï\l­ÌŒôuµ4`Ñåådà Ëg&ŒcŠà¤‰dÙà*ûaö¹Ð'‘ƒ@NžŠ™ž'ºÒ°LN^qµŠº–Ž¾‘©%ÃÞÉeÛŽÝ>~‡CŸ‚»/!%=+Ÿ}„Ææ»÷î³rð‘Gý‡Œ“ÎÇ£1xÜÓE¢_ÏD?—DÞ8û PàîcX ‰þ žèÏÌ}võ'Ã#ê‹,—”ú/ûõe–…¸Ð­q¦j×€a—aEE‚EE2‚€€ä( ( +-@@@rN’s$ ‰’QDtʸ8;«;:Δ{îýº›nºÁÖu–*œû¿»ê»÷œçœWD|÷Þý•Ô4˜XÚbõý‚¢R2r K+kšÛ:»ûGÆïOMSÔM¤^’ú¿-»>0€Ÿ^~æôgø3ú_ìïý2‡ªä±úDµÃ¦ ê?ž~@­~IaNƵø(PßËóÌ) “c:šªŠH}1‘HýMs¬å(ê/£]c>Æ>ÚöÅéØwö/xù\ ‹"±_ì7ÜÄÝÞ?ì߇ÒîÌ.yt ÿŸ7pÐï3¤~‡%oldp µ{c]Mdèö„˜ˆ@Øðκ9;ØZ™éëhª): ³WRBTnƒ5:Š>x +-þ…~æ°¿Øö.Ú¡ ¿Œ¨Œ> G„?\ P ¼üP »¥dää•Ô4´õ M-mì\Ý=¡‚ãã“ÓPTT×56·v@蛸Od>R¼~ó†0o¡ÈG¦}R È71:<ت€È|%EyÙé)‰ú‚|½Éè›!ô5æC=cô—Ó¢O¥þ·DöAê¿qR‡ˆR_QUS瘉…é3ž^ ~TüµŒœÂjõL?Fêσïç9ê/¿>0‚ú?é0ú×ÅþÒ/vÈw„*þ²úÿúqæ%Ús§Ü¾ÛwçvëÍúšŠ’‚œôäø¨Ð@ßK§ím,Œõu4TÈHí¦Sõ¬qŒØ_Á4ûÇŒÌ,mN8ºûÞÐíaQq‰)éÙyE%åÕ7nÞj'؇~ö °ÿïׯ‰†gŽý÷¸åß¾¥ZóžCàA³ob my]­Í 7ªaÉËÍLKŽ¿zåò%OwW'ûã&zÚÐìòrÒRÐëBü¼[6sràN'Ô'ØÇ]¾ì«gŸnÕ_AZõq1l@èsrqoåß.(¹OZœ;¬¥k`bãßåŒÇE}QqI©™9ùPttu÷Aä#ŠàɳçT‰×ÀèÏÉ{¸È“áŒþØ0ýøýê +-„~FJR\Txp€ ÆÅÑž ô×0>1ÉW2W}a±]R2U5tô-lìO{\ò ŠONÏ)(©¨©¿ÙzûÜÃؽ(ð<9ƒPÿÒ,-Â>0†ÿ³íŸçÏû¿ä™Uÿ=EýŸÈê?Äê÷Þé@ê—_/ÈNKŽ‹ ¸ŒÕ?nn¤¯­¡¢€ÔàßÊýMPÚ°Û®†º¦Þlç4 ûßѲÏΈ} ûöÐîÀ¾,yÐï)ÙùE°åaö;»{GHì?yúVœW¸ã™ØóæöÁ-?>:t·¯w|mUÙõ‚œŒ”ÄØÈÐ Ÿ‹g\NÚY›C»VQ<(»oÏ.1Áí|[¹¹89ØÑD­NZöWü±ì‡ýoHè¯\µ†J U7('*!¹wÿeõ#ú̬lO¢Ìç훈Š ¸¬²¶¾ Õ@ßÀÐÈø½I<ùQ 0÷èç>®€WyÉ0ó^7ýÒ¢|Œ~txp  ïÑ·23>¦«¥¡öÉè/[6Wýåäøê¯õ×Ä ÙÊ/ ,ŠÔWPÑÐÖ72?ŽÕ¿—œ– ó©ßq§«ÿ¬þOõß/MõÑ™ëO±Þ¿XìoûÒ‡±ú¯°úN‚ú½]·šêªË‹ó³Ò’b#@ý‹çÜœNX›és‡ä¤÷Hˆ +-aõa·…ÕvÍj¼Ù’[úšf’}áâ»)ìëûV˜}høÀàðhÄ~N~Qéüì“zþbÿŽýZBLDêøsnζVfFú:šêÊÐï{%%D!ûðñÀÜÈÎÍκ†èõ9“ð+fŸ…Jý?‘ƒR@•ÀºÇ>¨^~˜þ»¥dä)©ijëšÂìwr;{Þ _DLµô¬<(šºÆ–6È{¨îMN¡—ˆ{ä  ÿ+Ã÷§CŸêý!í=šžBè  ¹ßÚ܈Ð/ÎÏÉHM‚¼‡JM~§Yô•™Aú”+¡Zö¿Åwͱþ¯èFúB¢{¤å©ÖÒ32³>áävî"¨›”–•_\^]ס§wÔ‡é‡Õõu¨Î¼l/äÿG~´Øßô{õßaõÑ’åÕ>591:4ÐÓÕÞÒTWUVœ—•š|ÅçÂYWG;k3C]-`©¿Sh;ÏfPŸ ©¿j%I8êUŸ¦¤?‘}5ľ1bß Ø¿쇄GÇ'¥ûÅÀ~]csk±éá¦öŸ=IÍþ;&Øÿ•Š}¢í„á÷âÁþÄØð`°ßÜXW]QR˜—•– =àëåéî +--oij¨§­¡ª$/'- cwËfNÜîkYWwB; +-Y¾^öéVý¤U×Á„>'·]PDl×iYyEÕÃZº&ÇOÀä÷¼tùÊÕ0È{©™¹…×ËaîCtõôÆ cú1¼?FqÇDØ£AÿÝ,ú¯ ëúxêèwuúu5ýL„>šû(îAØbôµ}…ƒû÷I-„þw Ðgaa¡bŸZý?CüõÙÐäáÛ.´«¯¬®¥khfmçèzö‚Ï•àˆØÄÔ¬¼â²ªº¦–ö®ž¡Ñ‰É)hXPè}C4ÁRW þIg±¿åw:TUÔG{æîŸ/ÐŽ+ÎèPOg{KãªÒ¢¼Ì”Ęð«þÞçÝ]í¬L t¨+ÉËî“ß)ˆÔçä`ŸWý95Í}Vjöù ö¥€}e5 m̾­½“+°ï㟜š™SP\ZYƒÙïêé»;42Nìz˜ýW$öž³ì1³í½yýz¶ï=|71|·¿Úþfêòë¹ÐõqQaW¯ ¦wq9-3·àz°ßÔÒF°?Jbÿ)l{ ÙŸÙÿm¶óß’;ØŠÙGÛ^gû­¦úZèûü쌔ÄØÈÐ@?ï çNŸ‚®73Ò×9¢®¬pnDz~7´<š„ëX׬"³ÿ ݵ,¶Áÿ÷3[ +-ĪÑ'|[ͺ×ìµ[xù„Ðà—‘ƒ¸§©£ghjiãàìvö¼—/Lý˜„kéÙùE0ôëáõoßé Ìü§°áÎ0ýö´O?‹þlÐÃèÃÈ¿ÝÖÒT裙Ÿ–œ +-è_‚¬çì`kÑפB_ðóÐ§Ü úë6À$ääÚ»MPD\rï~y¸‘£&–¶'‘ú~AaÑ )¹…¥•µ ÍmÝÿe¿Ìß±Î÷0~uuºÎ\לÓ:95ͨf¤$Ù’"KQJÈ®õY²”d-B–,Ù÷}Ñ")²„È•PsZŽ¡3Í霖Îûýù~¿ç!Ñü0ýÀçOxߟûußw[GwïãþABýá×túM#êSo†÷Ÿ~Ì·Ç_ÿž¡>À><üw@]w{ksC-P¿¬8?+-1&¨ïåîìhkÉféji¨©(ÊËJŠ‹"õpÐkΟ›jµœo=k<ögOŽýõ\Ø×"Ø7?bëØ?íe|Ÿ’‘Ø¿J¿¥­½ °uÂþ0bÿwNßûì3Þü{E[¿§»ãþ½&p>Ô½2X>)‰±‘aÁ¾^.Çím,ÍLM  ë©«*¡ë%ÄDÖ®Yõó +-~ð<ßâEp* öyËþ´ÃþèÏ!Ÿ€üùÈ7„þŠŸðˆKÊÈmݦª¦¡©£oÌb[XÛõýÏ…ÁÔCñ‹Ë*pé¡ö]=9‰?UöÉ]à,…pØ?H}QqIYyE5 -]#ÛÒÖÑÙÝ ¨“˜–çê×6Àî|·ÀS¼þ7Cý÷ô¦ Ý8oöL[Àþ/T᣼Oa½ÿyìäÂþ[*ÿˆùŸ#ö?ìéê€ÂW_{«êZE)X?=9>:âü9p¾›ó1;k 6ËX_Gs—šÊ¶-r2’âë× ÁQpáUÌgÊ>³fOײÏË6ºêS?€|hµËW +- +- ÃØ“†^«¼c×m=#È|«£Ž'Üpé…†GÇ'§eÁÐ+¿v£º–ìD¡èI˜?Ê;4öê`[Ú8œp;íš™WTv¥²2®ÑígRÿ7õ?LKêÏ<žÇCýw õGõŸ@¿í‚z[_só:`.73%>:<$À甫“ƒÅ¡ý†û4w!õe6nê¯\|1P.Mý9PÿsØ_Ä…ý5ûÒ4ö÷h阰Øà|À¾‡ô½Ðð‹q‰©9ùÅ¥èýšºÆ¦{÷±ñQæ'؇OW¾É°?Þþèþ×#¿½zùüªòuÂòi¬«©¾¯0/+-)¼tÖÛÓõ„ãÑ#‡î7ÔÓç++ÊoãÃDß/[úªìÓØ'qÈs™¯Íá?÷¯úßêƒþ ùùW ú"bù +-JÛÕw£ö¦f–˜øÞ~!°óS3s KpæðÍ­÷;©•‡ºqt§FÞgdçQ {ì=ýç4ôÉÈ#ºCÜäd¦&‚ð÷8óœG¡‰¿u3j¿–žà„>‡úshêÏê/†³@®^+²a£ R—æ>Ãý‡,lœ\Où„@ ¦dæ•V\¿YS>ê÷ <%Ôa¨ÿn†ú3oú4õ ëÞü¤û‚®¿ïáƒÎû-wë€ú@¹œŒäø‹‚ýÏxº:Ù[›41ÐÑܹ]i«œôF1‘µ‚+ù@¼a©ý–—úŸúÖSþbb_m} ,|€}_ÿsç#.Æ%¥fæ—VPØoìwöû±óqÙŸúôSÃ>ñ?ûœÒ×÷¨·»ó>v¾Û7+¯\.!îº@Ìoocifjb°oïnuU%è{Rp¨{+øÁø|x—yõ¿™æe<ô™ª[:í2þPj…Ö­—”‘Cé54uôAyk»ã'aæ‡EÆ$¤d€îe׫ÈÈCÙõõ>£7 }FõI ÏYxc³~<Ѓª7ÓÐ/+.ÈÍ„´Ç‘‡ºcÜ[Y°MM uµú <¾8> =þ?ý1Ôÿi¸ô~X@…¥å¶*mß©©c`rÐÜÚÞÉÕóŒð…‹ñÉ9…—Êúuw[ öõ“áó+^zõÐÔŸÁþt~c©O}zšúƒýÐn;ÚZënW]+È¥'ÅE…;{ÆÓå¸ÕaS}赪۶ÈIKˆ­¼‘R»`ÞÜ¿MFý©a_@±/N°¯¤ +-Ø×Ö541óö]=½|‚ÏGDÇ'¥eæ””U\«ºU[OJãøñCðåÇàã'©?û Fû/_üó@Ü£©¡öVŒŸâüìô”„°¿¿ÏiwçcvÖl–±¾Ž&6¾-r2’âë× ­ëcÙçûnáî²?}±Ïý`ò ü€6dUõ—.ÃÄÅÀ—W„V»G[ÏèÀ!sŒ{·SgΡìÉéÙyE¸ñ@õ»-mídâÑ¢ƒè8€hN¢^=½¬¤0&^|tDXp€/Ùx »¾&B_a,ô—~9ô™Dd¨#ˆPÒî²NLBZnË6Õ{´õML[ÙwñyÜÛÝÑÖÜxçÖ«—Kò³Ó’b#Ïõö8yìè3Sc=m¨µÛ¶l’’¼A©ýq<õgO@ý)` ûò +-ˆ}M‚}3è|ÇûÞ¾XúÀÿiY¹…%eW®W´¶w>è¥kM€©õ>æ¼ý¹ÆÈð™>O?|ÐÕÞÖr·¾j_ù¥¢<@ÜÅðÐ HB,}GÜo¨Y¸]YÜ/!&*¼Fðç•Ë©Ã,DëSÎãÿ…7¿6‹ÿ¼7aÕ'ÒóåÉÌ“’ݬ ´]}7Ž¤½ˆð(ôù¦}æ2Üe õ„ÃÀ’ÚÔWß­­g W9z줇7$adlRZv~Éå«7nÝilnëèîÅDêSø_r ®Îóµé3ó¾ÎeÝõá×½‚??ðäQOW{ksCmu啲⼬ÔĘˆÐ ?/wgG[K6ËHWk·šŠ¢¼¬”8ÐmvÚ%¤Ò2vâª?9ö—rc_’ƾ†¦¶žá~S3KÀ¾³›' ,2j_V°ûÕûû€€Qì¿ùf¶)4?rŒÿq5¿W/ö‘XüêjnV"r3Sc£.„úzy¸8ÙÛL öí…0TÚºYí¿võ*âþ%”ùéÓüuú–}Þª?‡®úDù ¿ã#lûI`5ÀM\R:­ +-¨®£oÌ‚‰gü¤ûiŒú˜„”Œœ‚â2"yCÓ=ØwLп"”ã@ÿ³‚×›óhJp’ó wn£â— +-ó²Ó“b"Ar?ïSn}У^GSC@&žú˦ }î㌣þßÉi–àeV­—’•WTQƒ04b±-mݽü‚B#bS³òà&•Õµ ƒ]=à<ÈÞƒCý3ÔŸî‡úïêê?èCêßkª¯ê—åe¦&D‡‡úžv;á`cÁ>`¨»WCMYè¶ATà¶üÿì××S”ið­©µjÊ‹qaE]AÉArjrÎP@%ITrÎA@P$ˆƒ’QF×ÚQѱ­ÝÒÒÒ‹=çýºé¦‡Aœ©Ú½€ïO8çý~çyxÑ6nB%§úì›üøßüû[XìïEööÖvN®ž¾À~d4É}@@ieM¿4ÚíäôI~t‚+ú­‚}*ì3اC÷Y`D¿™©ñ£Ã€@wg[KcmeYz).&*sŸ‡‹ƒ¥)Ä> UÅòҒâ¢Âðÿ“°OâwÌ‹Èø÷¿YsìsD}‚>,÷ÎMZ>~غ¸$V<um] k{gwoÿ`\9¤Útèw¥•µ Í­]¤ÞÁÂgæØÛÝêÊÝôññ³¯{±Ü ôÛ¡ÝÕV–åá‡zè‡CýΚ ¯¥®¬pxô¹¿Œ>ÇtØÔ‡é„êoçåûAP&s:ºÎQ#s+{ß ÐÓQ± ÉiÙyÅå5 Í þÁáQTþé3¢>©þÇuõ×?¶·ê“´óŸC¶}µ€~~’íè½Á;=mÍõÕeE¹YiIñ1‘a!>îÎv43C=mPÿ ´$DÚÝü|hy@}xâ Ø–ªÏñ²¿ÈþŽEö%HìSQ×:rÔØ·wróò…àG H¾œy’A üD?¢aÿù˅׋Ùï=«cŸ8@…¿—Ï}``†d¿Á¾Û]­p +-+J +-r²Ò’ˆ°Ð`o0ÀÊÜÄ@ “‘"àhþ±•‡üÿDýÅ鬹°Ï>剳dëÛÈ­“’9$¯—^ßØŒf ýÎ/(ä©w—3s +-JÊ«ëñÌþ‡ ×NL³­›N¢í»÷«DŸóÆ¿}Õî%}Æ‘€àÓë®­*+‚rGö~Ð÷rs²·¶45BôUè ÿQô—̇y7Â?êóÀløøwÃh$¥‚úÚz†f4;gwŸÀ°È˜ø¤´¬Ü¢²êúæ¶Îž;ƒ÷ þLÏÍãH ÷àd„†úëì¯Ýõ?“ŽK½{T_ýH:c#C½Ý­MuU¥…9™—ã¢#NÝli¦†ºZjJi%ÄàóïÚ‰²qúTœÝ°T}Η½ûÜìì ûRLöõL-!ù¹yùûáQ1À~ZÖÕüⲪÚFÌ~„ÑãSTøc9°ªôÇœ%Á‡Lè,f§'þthà„¿ë×ê«Ë‹ó1û%Äž=s*¢Ÿ«£-Í ÐTS’ö‰Š@ °‘áPaŸ9ž5Æ>kñ¸v&kdé\‰ú¸rQ´°qU =CSKŸÜwl|bj”»²ªºk-7:I·à¦f1ªëƱÙ-_옻f4;ˆ=¸ì[]mÍuUeÅùxäI·;y<ÈÏËÍÙÞÆÒÌHŸ‰¾”„øŸAŸCý Ôx@}.ìA;wñÃlÄ$¤e+©iéšÒlܼŽŸŠˆŽK„cXXZU×ÔÚÑÝ;042†—ð BJ}*ìÃ@>¯‡ýµý±œûÄRè¯þñìÔøØý¡þÛ]à[]eiÁÕÌÔKÎ9yÌßËÍÑÆ"­¦ª¢œ¬”„¨ðßïÚAÔgÄYNõû´¿‚}qH~ûºúFf–6öÎî^˜ý€ý¸K)iY9ÅåUu-m]·û0ýý_^¼|õ5ì/Rð )øÀʯ^ü€ĿþÞîζ–FLyW2R‰'Žøx¸8ØXšB Òd¥% ü|¼8œÍÜ\›˜ì“°ÿWößÿëïÿçûmÔÿ–¨OVγ•ÄYRï¤dä”aß&VvNîÞþÁ¡¤Û¥¤gç–bµkëè¾Ý7xo„4;æ®}C_媗¢Ï:ðØë«žôá“b»®ƒÍ.=–7>ÈÏÛ¾®6¢H† /„èóþ!ôâPÆCÔß±ë{¸ˆR²rŠªš0KG7/ÿc'Ïœ»p)5ójAieݵëí]·û‡îOÍ>†¡ úpYêZWm˩Ľ&Âýühfbí]xóíÀ[EIþ•Œ”‹çφŸöótu°±0Ö?¢©¢('väY|ç›—ªOÞ÷2o{Õìó"ûBû‡€} m]}c3šƒ38ìŸ9 ì§gç””W“øGIðÓÉi6ößÐñݯ&þN¤ã%$<ž›™¹G(hmn¨©()Ì…øwñBtDXh0ÜC';+sc]-ued@lïA~ ûpJýo×dØ_õ7°E}³›·ú°oA!Ñ}û”WRÓ„ngF³utõôÅeŸ;Ÿ‘w]ßt½ý&;\õ$¤ZŒúÏ7ýîýûU£¿ØêHâa¢µî©udÓÝ7Z ×U”äf§§$Æ“bìïí'žff èk¨*Éö%ÅE……úÛ¶ð|=ú‹#¿b‰ú›ñw€éìáÈÈ)ªÀlŒ-l\=ý‚O„Ÿ=1%ãJ~IEmc ¨ßw÷>ŒeæÑÏøþ^cýYWý#Û맢-¥>¨ÿìé<ª?:<Øwëæ–†šòâ¼ìôä„بӡA¾.öÖæÆGu4TØ/°ýÀÇ»}ÛL³ðÊÉÿݨÿ—ձϳe²Ï/ ($,*. ìË+©ûÆæ4[ŒagcãS1ÿ•TT×_»ì÷öc f‰ðìà»E VÍ>Kƒ…—Ïÿ<&ܸÓs:P=Àü«™—“¾ž®Ž¶43££G4‚ƒà$Šð·Çów®¿±…ý k-ìsD}‚>,œì{3†Y^>~Òí$¥eÉ×34µ´]û; ÅVq%¯¨¬ŠøžÞ~f­£Ð_`ku˜Ä-¿gÆ–Ykf]÷…Ôžç¦'âyïïíé¼q½©žÜ÷ìŒT@ÿ9ðØëlixá9Ð'ÕŽý«FŸ#ì“_~ˆM\Üxyù@ý½âûRPÑÐ9jlnmïâáz:*6!9=;¯¸¼¦¡åÆÍ[}ƒÃ£¨þüÓgD}:SýLõ×Ù_«+êõ1ðÀËK‡‡ïþÉüÜôăÑ{ [g[s}uYQnvZR|LdXH ‡³•™‘ž¶º2À&)®ñóí$êc˜e ¶‚ú+°¿‘ƒ}>&ûÒû:z&À¾#¡Ø‡ˆä–VÖ4` îŽOÎ0" ¼{,¹”lðóÊê/†@䦂·Çòhv +-æ2|·¿·»³ JPUYQÞ•ŒÔKq1Qá'ŽÀlì­-L õ´5 ÉJKŠïþq7`+Ã*û1&´†Â>ú”i¸îMõy¨¨/ ¸GD ›‚²º^x+;'7rà#£/\LÆû^ZYÛÐÜÖ­Žìyj†Qê𺳡ÿq¥ã¾|¥{ûæ×ÅãN:Y3^÷¦†šÊÒBÜsRÂy@Ÿ,¹‰žAW ž}®¯GŸC}öq@Dýp…DÄ%¡)«kë™YÙ9{ø†„EÆÄ'¥eç•U×7·uö@}01=7ÿž?Œ…þ¦B]BæHÖÕ_£K}J8êé£úððÿùäñìÔøØÈÐ@owGkS]UiaNÖåĸèˆSǼÝli¦†ºZjJ‡e¥%ÄPý];·Õ¾c¨¿aEõ¿Ì>×öED÷Aþ““WRÓ$ì[Ù:ºzû'Nÿ—ý2ÿê9ßãø=g8×½Œ F—!II()E´ï‹ö}Ï’%)iO’J¡¤UQí©”ö¾¾%[Š…6ë8Hc¹s3sî÷õz¿?ß¾ßo¨˜3çÞsëó'¼žïÏãùx†ö$¦ " ªëØ—›·½÷C$û£’ý\ ìñìéhCäHà•‹õ¬êŠR
Iq1"P=Ü6op²³23‚ë¨*Ây‹-šËȾ#ûœìsǸ9Hcž9 U_XD~¹ `ME][ßÐÔÒƒÞáåFrNËÌÎ;sÛb¾Þ֛ʠÿ¼¤öíèBæϘ¯ÚáícÈ}Ý÷:¡ÛaÒ5²ë åâ,wÜtQ¡Á}uNvXïzÚ4öûòAèÏùjèóS"Cý©(A‚ЊH}IiXB*:&¶Ž¶lßé´7â`lbjú©œÂ’òjVÃ¥¦–6¨ÃxþðúêÙÿ#ûãÔ£ß'©¾óÓ@?Ðí!R¿½µùêÅúºªs%9™i) ‡„‡úxºm^ï`cnl ­6++½LbP¸ìwӈʥþgÀ¡Àg±?‡b1ƒ}%Uľ‰¹5( ÒÀ70˜8 à ãtnaqYE5«xÐÒ +-²3h£ÔÀ¡Øÿ…žå Þ…ÑÀ®;í­UçΞÉËÊHCD†…ùz!m-M õ´ÕUÖ®–“Y¾LB\TDeƃŽìOàÅÀŸKÝÿö÷±êO"Ô§ÃNü¢ÅK¥0he5-]ÌÙÞy#Žº€=ûöÄMå^Xr®²ö²è8Õþî=ÁÛè ÏÝsï~f"¦ÍN͸žUS‹Ž„ŒÝˆ)C¹Û[[˜r /³œÔ;úô´¯€>=?õ'õ¿#‚-´Hb™´,ÜG]ÛÀØÜÆaýf7OŸÀð‡ s +-JÎUÕÕ_¼ÚÜÚŽÔÇ:ÄÇÿöŸãÔÿðãyÿðú£ÔG©ýé%¼üÇûºïv´ßh¾ÒÈ®­,+ÎÏÎ8ž¶'ÀÛc›«‹½µ™‘>R_©ÔŸG©/0uÊ õ¿Žú#b b.…ÁIP@Š}}C k{§ ›Ý<ûÀÀ~RjzFV^aIYe «áâ•k@„$öÿE‘@ÿè°Ï/‚/û 7o4_½Ôp¾¦‰x4þðÁýûзoÙèlomn¼NWS8 ÔÒÅ‹€sçÌ&kˆ9Ѥ1&ûüª?‘Gõi31h!a1TYYyEU }#3+;’²·ÿî½ØíÉÇNœÊÁEG2†ABËiö—¯^óûp 3ùò÷úÏúøô¡Øûz°ØÉžk`AÄ%…Ðìé8è ã=}\tÎö6¦†ú:úrúó<u‚|Пô%ÐçRÿ›AêC1RêÏ#Ô_.#Ô‡ûXÛ»¸nóðØŸ|<#;¿¸¬²–Ý·Ô }ˆ—·mHË¡þ8öÇæÇU}B}‚7 ² ŒööÍë×._`×T”åe<–¹/Ø׎­›œí¬@fµÔ”ädjb"`8ÿ &Ë¡>ê^j>ýI öö‘óEDì¯^«¤ª©£ohja¸ÅÍc—_PhàáøäÔôÌì¼3Äû×ÛnuÜíݤLxC™Àk‚ÿžú¤ ±ÿú˜`o÷ÝÎ[„ õ¬j8N~v&AÂð½»ýw!œì¬ Š +-ò²Ò’KÄÅD„…³fÎ`hð7. ƆìQ}}â±$gT}ˆ™)«¨këaÈ.dÑ…„EFÁA—•wælyU»ñ2$ dëê%Bû¼Ÿð‡Q«>…>_¾œ5w·ƒÜp¾¶ç$|,‹öœD Íî`ci +-kª)㢓–„n¥)Sèã¯0ù‹¡ÿî™ðJƒÔŸň'ƒ1$#§ ¤¦²²sÞ´uÇ.ÿà}‘ÑqIÇNfåA%²/Àq`ëvõ>€ÇÿG\†iCÎYÆ©?&?.õ©Ô~`ŒçÕ@?<ýGðòïÀÃoºtá|MùÙ3¹§O¤&ÆÚºÛÏË}ËF';KSpYUÅÕr+¤–ˆ‹ŠÌ'H‘¢‘I;2õ‡Ãþd¤ûˆý¥’Òe5M#SK ÂÆ-Û=½ý ‡bãQ³ó‘ µì —®6ßh»Õy·»—`ÿy?<ýA‰ +-ŸÆqÁ~.Ú[[š.7²ëª +-Yi)‰GE†…€B+º8ØX˜@-ª"à Ä9Dšñ[ Åþ˜‘ý!ПHWi÷é3ȦZ°‘¶b%,:5M]csklöí;}‚±ØŽ?y:·ô: kî6®9N¾¯é˜ãkõ/>ê'^lu2æ.°k«ÊÏåçœ:q,9!ò÷ö„9çâ`kifd K¡/û)è;å+ ?”úp%z$2‡ Å—H­[­¨ª©»ÎÔÒÎiãw/¿Ý¡ûÅ&¦ž8 ï¿®ÓÒÔ¿ÿo3ðêÍ[f1‡§þýÿ>êãéþôÉÃû=÷:oµ¶\½ÔÀª>WR˜“™ž’pø`ÄÞ ßÛ7op´µ01ÐÑPY»j%š¬èxí‚ßϘŽûw.φ§þ°ØŸB°?-Á¾ÄR)iYyľ–®‘™¥­ƒË¦­îžÞþ»÷†GŠE(œÊ)(*-¯®£Ø¿y»ó`ÿÑ“§ûo8Øÿõ ±ÿËû÷ï.Pìë¹C±Ðp¾¦²¬¸0÷ôÉãDCƒ| +-ÎöÖæÆÀU¥5ò b Ùÿd_€‘ý¿rpðÿ}Þ 'pTŸ¦L4vö˜±øP}yE m}LØqÃf˜s𘸤Ô$ߊŒ9ˆ÷ÄÛ÷â}ö‚·Ô¥lû\º6;f<úF ý!Ô'g‚+a5 +-b3Â$¥W®Z«¢¡c`bÚ¾Ó7ho´bJzf”b5«;®Óƒ;ˆÌ ZˆQûcìãùàýS¶Ú@h_¾xöÀÖ:Û|åb}]UYqAvFÚÑø˜¨ð@O7×õ6æÆúÚêÊkVÉJƒÈ.B…ÇN4vg#P(ö'| +-û³gÿÀ‹}`‚:`ßØÌÊÖq½ëVwTAÀ~ô‘ÄtÁ‚âÒŠjV}ã妖VX¹ƒ\èàØàÈ`ø ñ8bƒmׯÁyXÕ¥EùÙ™é©Iq1ˆ¿]p! ‚©‘¾¶†Š"‘}ÜCÂ(û³¨ìSì“rœÀ‹ƒ?ƒ¸ÿ ßǪOCžJT"ž7IT­²º–Þ: ¬õ^¾8æ Þ´Œ¬<ÜrulH÷z[{Ç]°YàÚ3¶7£«t&Z¾FÙ!CŽfK*.9 ?t:N9€>–úN÷­¯•¹ñ:€¾Š¢‚¼ì +-€¾8>Iø@ŸŸúi9õ¿#W^¸Hb™´ìª5ÊêÚúÆæ6ë]Ý<}C£bâ¦ed—UÕÕC)¶Âyºa‘JÄãPêÿÆ¡þ¸ìÅ«ú„úm@6â³Ï~|Œ\ß¹v¥‘][YZ”—.¹oO€·Ç¶M.öÖfFzZjJ +-ò@´Å@ýy”úS§ RŸë°#Á`tØ—X&µ‚Á¾Þ:cs+;§õ®ÛvxöC#@ r KÊ*kXðð¯µÀË¿ÓÕÓ÷àñøö¹d Ïÿ dŸbŸ¢ÈþýÞ.,E ÃvÝØ/ó¯žó=ŽÏ=spgîAÈ2v-ÊR(Q*•Ò¢}_µj£¢’=)e©HÒ¢I*J‹T´~-W#ÆÖJážûÃeÆÅý…¹gÎ=ç>_ï÷÷Ó÷ûÍ çÜ{Žúü ¯çûóx>žõ5Uå¥E¹ÇJÙ—»=fÉ —›“°`„f\JT˜«8g¿Òx9ñ™þKx +-Í9EeUh,òÕ741³¤x}‚7lŒFºIÉ©G©Ó)܆fZr¬Ò{€µ¿³!÷’7ú‡£ýÍd!;¬ÐY´=»~¼Ë]Ô„!WYFÙR¥ïOôc"ÃCý¼=\í¬,LôïÂy*ÊPŸŸ}~+ñï PåÈ©?ÔWe{Hßhµ…ƒ«§ïºÐˆèm±ñû¤ãBE¥g«ëZ._»Ž¥{¿ûž>BôðŶ#œf˜úCð“PŸ ­¶2®Áfvuܾ ª5_¬­*/9™Ÿ™–’´gçÖ¨ð{ksC=- õªÊ +-³fL‹•+Hì Tÿ‹A`<Ç>TPQYeþÂEpA`ßØ2èèêéí´žl06>)ù`zfvÞwÐÁÊAìß¼}û ¡?–.ÂÅ>!dŸu"Ã>Â;?´·]5 gŠ óÍH%2lÞ¸!ÈßÛÃÅÁÆÒÌÄÕ¨¹Xm>®¤3±IÔ/û#†‚ìP}}æ°cǗ窯 „V_¤¡¥­kµ¶w¦)µe-9–í©ÓgÙãÑvöï8ÂÚk‰ê<ô±â^ü$Õç|Ɖšêj*ËKÙŽËHMNŠG£G†¯G¶ž®Nv֦ƆúÔé4å”Å¥ŽxÇ Ðÿê@_Vö…vÄ@åˆ3)«.P×ÐÒÑ341·¶§f ÚºsORJZfvþÉ’òªÚ‹Í—h ut=|ôø)•âÏ8ø:âã SH~R¿©¾˜úxþd³Ø¹}=:ïݾ¨5]8_YV\˜“MNŒÛìïíîlgefl «½t‰Ú|¥9³¦K¨·>xêÿ.ö¿’`â¤)²Ø_¡ohL`próô ZOdØÏ|ðx>ÐP^USßÐBBøØãéŒP¤=Âþ¯¼‘Д÷¡-ÔÉàp¹ª>{š±!íÀ·{wïØE>¸ÖÝÙÞštPW[ ‹hÞ\%.ûò㱉F÷SaÈþ;ª?J3Šwêt¤;8£pW­6g•î».$l5ú¾”C‡iÇ•R²-—ÿú=Í8Öç€>QMXqʵú²±¾âЧwÿ¨ŸÕù¥–†úóU–÷yò¾J6b}P€§›“½õ1ô‘-*Cʤ‰Ÿ +-ýÔÇ¥$ÔÇ”Tæ«-YŠn46³²sv÷ö‹ŒÙ—˜Œå—Už¿Ð$ºÚvƒj±§­ˆû¼xÉ—Ð[~©Ûü¿94üý/?‰ê3êó€–î ¢\¶ûþwoµ·]im¬‡Éž*ÈÍÊ8¸ïîí›á±~^nŽ¶–¦«Vê.'‹õgN͘à +- +-;XêûS9öUç«A û&fklìݼ|‚7lŒöˆ Y9ù…Å0ÂóýïÛ±s%JH¯ÿ{þ2NøRøúkÅ~'¼{ëÖèPSYVRT“uøP +-áæMaDž®Ž¶Væ&FÌi)Îa²O‡FѨ¡ ûæñòtÇ̾™6s¶*]m±æ2H¬1¢upñ ·1zë®=‰ûYŸŸ©8Ww±YDu~§£ëAO¯Ðæ/y¬oÞ|`ÉC•™pP–*/óÞn¶áëå–FjsŒ¸,W@'­¸à_/7g{›5f”,:vÜ\}–-«t1ôGýè >?Õè1rã&`MŸÉ¨¿Xs¹îÊU¦–¶Žn^~A6nÞ¾{ïþƒY¹§p£úÆÖ+míԋݸÛBԊ®3Lý!÷ISŸ´XcTƒô<ÔHeñøa²- uÕgK‹NäM?°/!v[tDh ¯§«ƒÍPÅ2M’XÅÙ3§1êÃY&AÙ`Ýf öGI°?N¬ƒÀ¾|Pm±†–¶îJ#3Kgw/2BÀagÜÞo¤ÉÊ9q²äLEuí…¦Vî„ û?I¤ðC|xû±>cØïía|@1Šš/Ö¢‹É ÓîOÜ:@ ý½=\p&3cC=eÄ%…ÙÌåûÉ #ûŸ-öÿ$™ŒêóJŸÌ†œÒÜy Õ—P²«V[XÛ9¹yù††G¢ÎY®ÙyqÔæM­W®]¿É6œªì„{_¨¿YåP¾àðì{{vñ.§ G©–œ<‘{ìm¸8ÄŠ6_çëåîì`c‰:_I+n±ÚU6ãX¡ËËBäÇC_–ú#F +-§bÔG=*âP‹4—­õQŽXD¡ÑÛböH?šs¢¨ôlu]CËåk×QŒ˜¹Ñ‹üB8Л·oÙ}†©?4?©€]±Ëâý“Êbè>ìê¸}" ¢U•—œÌÏÎLKIÚ³kkTxÈ:{k‹ÕFú:Zä°31Ë$Ôÿ²Ÿúƒƒ‚ öGJa_>8q2°!äØ×dØ_mniëàâ¾Ö/0$lÓæmä„ÓŽË-(*)«„6‰ <{ú˜Òó)⣰ÿ‹ø@ÿz-&´ÅØyïöM4c+¬°êìéSßå …;b"ÃC7';܉6ÉþwYRYšº@Ú“¾ž÷nÝh»*jºPSYV\žJNŒÛ±%2,ØßÛÝÙÎÊÜÄPO[ 0SQ†èL%êËŃç$¼êñØ!Æþ×\e°?o:è £g'´²utñðö#)ŒÙì§g +- êšEº\ qì?à…ïC„„¿J1âõ+:‘€î…W/aáJÐÂœ¬Ã©ÉIñÄÆ Á>ž®Ž¶–f&†ú:„‡ùªÊŠŒ“ä'ˆáÀe_¸ÖgŠýªÏ ’±'ÏU_AI‹§g` …µwF™­ˆÂ„£PÏ/,>Sq<]mk‡ÆÒ€"}‰H³ß¤•îqšoHEÞÇ‹ûíª¨‘V•—¢É³3Ó)ÓØíTå´àm­Ðåz”ªz?ô¿áЧ:ÿ˧@_VöÙ€†Ä,¢‚Ä©”UÐ(ÒC=ZÙ9»{û‡aÅ%&:r,¯°¸¬²æB®tãÖ½Î=¬Ÿÿü‚d‡SÿßÃÔªŸðpóá¿Ûº/Hdÿö¤·û>€ÖÞv¥µ±þ\ÅéS¹Y©û÷îÞ¾yÓ† ¿µnN€™±,SQšƒ7Ï$ƒì£¨ÿì“Ž%%ö•õ%K ûƦÖvN®žÞþÂ~RrjâÔéòªóõ-—8":t÷>~ŠçÿŒÞ?gÇþ eŸõ"+ÆW‚>îE5vÜ#H k«+ÎbÁ ÷Æíܱž´ÐÙÞzé*]m-E ç©()pÙ§†3šàЭÏVößQ}!XÊu"Sý9ŠØpHuù +-špVvNn^¾ëBÂPå»þË~™¿õ˜ïaÜu0Ìüp"c̘HZUdißW•TÒ¾©"…•uìÊR•J%•¢]‹R$²/e?3—™s†ášëœÉu8g®s¿?Ïó}ú~Ñœkæõü ïûó¼î×½%Ž\zVnþ‰SåUµõ´ßX‘s‰þø´s¾õh×<‰ú?s5έ·ûí| èñª26ߎ>¸ ýF‘.˜;ÇÛÜt ‚>BU$è#UVæR|›í5ô»PŸÉ>í"é#GÑ­”U'NÖÔ10±°¶stñ@=bE¯Ý¸mçžÄ”´¬Ü‚ⲪZø ¢vT#é›Cü‰Dê§~ßú„¿€ÿ‘ý‰yìã‡ÐX<ÿæ¦zXlQ~Nfjòþø¸-ÖDEfþ>îÎ`™±¾ö4 L K$cþÊéëà¤þ1ê‹a¨8ö¿ )•UÕ5F¦ÐB{'o¿yA!aá+b€ˆØ]{“S!†ùEŒç[Z93ì„Ä =¨¡$&:ÝðùOOä(Á©áÅæÆúZ‚ÄñœÌ´l¢X*:réâàùþ>.XEVfÆú: „d_N})^ö‡|ä²ßês±'}EªÔå -8S Ìa6ÜÜ %Q«×S‘#ÑŒì<šoèqzõÆ­6Ñz{úLȳ‡ñÖú|œ/ø8Y‹ãÕÓx£<ËY³õFúÜ|óp¡"·05¢H5ÔU•‘)«òwAÿO}IêæÎê£"ñ Œ'¯„Y4M[ßØ«ÈÙÝÇ?pQXDÔÔcüþäÔÌœü"Ü åH‹¨ ÝÈ®„‰Ë‰òÂþhõ¿×'öˆQŸ ÔÇÔÅûÎΟ=S]šegÀawÇn^¿zexhð|?/7'{[+3#=í©D²qxôôæiÜöŽúï}YûSö-­g88¹’#V®Z·q+3C@âXAqIÅiRCŽw9J@{$Üðýäð5qB¨F’C’ýGt¦„ Ü©²´¸0/” 5Ü„K0C/·Ù3¬-L!†Ó4hÇBz¸¹ì¿Mõª4ã2UPbN×ÀØÜÊÖÞÉÕÓ7 pa(zîˆO8pˆÕ8ò¬kàÇZ\'·Ý::z(ñnÛn”&.J¼‰m·âÄI-¾;n+ÆòäjÜÕ Zôi¾©ªðЧ&—þ¯@¿[êã\ô PEÊ+ª¨iLÕÖ32£[¹yùÍ _‰~ŒÝpàpF6fnE5Ú“ˆžýãoõŸsW§~¿ì÷­¯Sõ‰úü?@ÞóŒYì£ûwïܼÖÚr®{²ðØÑôCI{wmß´.&rÙâ ¹s<]!°–¦†ºZÌ_ÇËŽ!}•ìU Ø‡>õw`„øâËÑ ûJ*ª5¦jf–60C@Â~ðâ¥Ë¡†›¶I)i™9y…Å¥Õu MÍxþ7o·‹äã„€ýWvønÙgÕHWâ@ñ=Êñáýö;7±‰.45Ôž†æçf¥:LÀ —…. ÙGCšè’ìc£iI÷Ùƒ¾¤ê³&ÿr´ÌXâS}êq;GgwZoÈ3zÍ74ÞXœ`YYUM}£(ÍÎéÖ%Ì+\4ܸ,¹ +-Çr{À/7„Y‡?YˆéÆÒܱ %µÛ-0À×-ngci†<µ¦Nž¨ªÂýïd'ô?APo /œŒ?/üt®1²ãAýIS´t q¬™³\=1‹/‹ŒY·i;Nu(ýè±Â“eUµ çZZ¯Q;>bwb‹Ht%‰ÿG³¨ÿû>á7Tÿe³XÂÙÚºí°À¬¾ +-[›•–œ¸gP½àëáâhgmab £9™ôUNVf4ýyŽbªúºbûŸJb_¯^AIE Ðbjh3ÓÑÙÍ‹¹á²H`bóö$‡éYàÄɲʚ3gy;l¿ÏâoOñ¼Ÿvƒ +-æ‡4‰¨)n\»Ür¾±¾ýx HKIÜ»+vó7kˆAóü¼Ýq,¸!dŸ(¡8~ÜX*ÉÇu#ût²ÿ‡OHuà›ªÿ9§úã”'¨SšXL§ñ-X†íF%¾gÿÁÃG²ó +-ŠK+a°ç$–ËR|¸½iìÛUŸ+pñÝÆ¢üÜÙ35•eX¸¨ðÃi¹!ÌèHÖá˜nÎŽ3m¬ÌM t)N5%8 ýáÝ@`/ /)ûì`¬%i–Á2RFGjê˜XXÛ9ºxø,Y²á`jFÎñ¢’Šê3XExõm÷<þ–ꛈoÇNê÷Ë~_ú:Uÿ_<Î:ØÜ}Õ‡÷€ewn’Áž­;]~ª0/ûÈáûà¯ëW­ žççåædokef¤Œ©‘¼‚bä®"ˆõ’úÝbˆûRÃö¿bØW„‚À¾©Åt[{€ÂÛo^PHXøŠ"v×ÞÄäÔŒ£Ç +-*ê›%QÄ +-‘!¾â ±ì¿݉`ÁF‘`ˆ×._lnª¯Å­NäCS’öíŽ*à‡‹ƒçûûx€6–fFú:šS&á^òo‘ýAâŒè`ÿ'¿.ª/ªqQ‹CõQâpWi,Lk;‡Ùn¨ð %Q«×£ÁY”Ùy…l·Q“ÀÊØlË$ƒ|wŽ¯»Œ6Ê‘¯ï{m˜·dCí銒₼ìŒT–äÖ(ðˆ%!´Û<\¨Á-L¹,Õ'(sËí+úRÐÿä·@¿[êcQM²ƒ¡%1ôŒÌ¬líܼü懆¯Xµ~sì®}hž*?]wö|Ëe$=SgÏY=rí(ºS?õûÎ'ü‚ê¿ì Ÿ€cyO;þ€Ö çj«Ê௲½;·m\¹4$h®¯'0fmaj¨«ŠááËŽ!ˆI󯞨Ͽø^½v ì°ÿÓCâÙ¡²ªºé¡H1ÃÁÉ•üP±rÕº[!ˆI)i™xþÅ¥ÕudˆøøH|ž=öÿþŠ(‰}/hqÉhAŠx¦¦²ìd!Á"9qÏÎí›×¯Ž+ ˆ^n˜Ft/=mȾª²ÂxNö +-)n ýheÿ Õ«¾Ô0élºÉÊÉÓr›¢©k`lNsõô \ŒÅ Éñ àú»¸„‚óIÈ£>cÌç)‰Ïã‡÷Ún]¿r©¹±¾¦²´(?73-yüŽ­ÖD/_²(0ÀÇÃÙÑnº¹±Žæ䉀˜lgÔÈõ¹yÛ+Õð&ö‹°G/†}BQØŸªõöËý+Çtã³ÖvÌšÙ sBÊ«r¤œR:§¨t>(¥HQQˆ•CD¥¥ƒB"%¥“brÚ›I”´ÍžÙ¶Acÿ°™½Ö˜µ¯ï}?ïó¾oBƒöRÏŸð½îçs}. bž! "±ÂËge`0 qk4Á"ýàá£ù'¡ˆ•5õŒß·àñÁß„ý2Kü/ëG9^$Þmm¡c¡"«áˆEÇŽd§ïOŠ‡"†oÄ4Záí±²mĆšT—¨("Ù—žŒƒBÜGö»S}æ§ al¸©iLüª¯£ghjniã@³ An‹ÀjcõKÊΞ¯•¶·£°ÙzPÞ] /×Ýr“¥XOå]r2›bÜ½í¸’rtB}›cµÍ=+w¢f›ò(yèK³|Wè+Ê>ûÄ¢ÄÉ”i}«©š4ÆÁ]=¼}p¯H”drZÖ¡¼E§+ª0qYE¶Ýû;kÈ'bAʨß'û½ç“©þoËð`ïvÒÜ%ñim÷4]¬¯>W† 7'#5)n×öˆMë×ø¯ðrwÁã73š§3KkÚä `Øè‘d®x÷\\åö–’ÓûDìãÙ>‚c_B¬àØ72µ°´±wv#E\½´Ø¶sÏÞäÔŒìÃy'ø.6]ýëæ–VŸŸ/hðv±ÄWc_^0žò]DÀ,‰e„s‘$¦$ÄîÚF¸X¾ÔÝÅ5IŠ8SkõäØ1t2šG$ûJÌû÷ÿeÿUªÏ£ä®*Qçý­«oL«ÍÉÍs™¯?FÚ›bÌÌa›Ê›R¼ ŽÑdSìî_}ô…æ–lO;)C¡ºo7óņËJŠN »3R“i²E„mX»åM›ÍÆÒ”Ú{Ætä8^M¢Ê /ô·ýïúŠÔdðXÝläh:Ù4­Y:óŒÌ.²wq÷Zá¿fý&´d\RjFN.•ä¹jœ ÙÒÚŽŠ|ððçǬ!yAJOÕGýÞò‰‚¨úÏŸ1õá Ã?pç~Ø+0V\xìÈÁô} ±;±t×­ÄÜœí¬-L õæÌœ>uÒx5 웯Fí|2Dé©ß#ìù5V®ªDm™ ‰= †"öEd'>|@×joˆQ_SYqúTŒÝÑ8jÒw$ÑÎzÁ|c}]æˆ(JN‹á¾ì¿RõÙlcªÕ6~ÒMm ÌÐÔÂÊÖÑu‰—•7RŒ‰K¤ÉwEˆÕu ´Ø¨ºy†wJõõ¹ØÜ/z úÏþÃ$‡Þ;ßkˆðÖMjólÈ07'3ª{{$-6„è‰î¶µ²0CŠs¨¼i³©¢½ÅÑö>¡ß-õQ•ìh_}Cóhü¤©ÓgÎÁ:²°¶svÃ8Z½.tóÖ± ûÒ9VX|æìùºÆïèÍßÁ¹„aDžK”ýßû°ßK>¹A >þ‚Gô0{½yýÊ¥†Ú*PìDÞ᬴@,*|Cp æhkenb„iN¸ªŽE/¨ `¢µ¾µå¼Œýö?ýlè°áŒcTÇ©.€}=c³Ö¶Ž.îK—ûÀ7Gí0öÈ:Ä4±¼ĸtâsëN™y"!ãß„ .?¯Á¾È ¾‹Øµä˜qï.¦Ñ ºQVZ„ƒ¡&ãb@ hâJ¯%®Ž6V(JÌ#m&‰cU8.†²$\í”ý.ÐWPý¡\õ£©>ÊÛÀd>ÄÕÙÍ“B Ù´‹Uwn>AŒ"ÅÚûµ v¾ô¹w>~ôP:×0n¯_ù®±¾Å]\xœöE¸# +-Íà‡ÁæêhKÕm ‡5§Lš >N€þðaÂfCŒ»‡þÏR8œP–BWÒÕ¨*ÙÑ&NÑÄ<201GQ.öXæ¼!<*z÷Þ”´,Ô$¶QTçÊu~/V’O¤)Gý>Ùï-ŸLõ@öŒ¹ýð´cîÞ¸vùâ…šÊòÒ“ùGs2S“âc¶G„…ù¯ð^âê`³â:—Œ¼O_ÔVn­o¯ú]±ÿ± áÝ3ìÁ°?vv.³D=†µiâÊÀ`ckôîø$òÄ£ù'‹ÏTTÕÔ7’(~ßrç®ÀŒGO:‘ɾ`ŠoÀ¾TIöŸBöfÐhocÛ¨ «ªÀ8:ÎDqïž[·l"d,óts¶_„›èÎá²OU)ÊþVö»Ùê+«H¸êÏž;ÏÈl©¾‡÷ŠUlhnŠ0#{7O°ùvk»Lõ{´Ö^H Ga¬Éò£Ún¾q­µª³gJNæSoïOŠÇ\Û²)$8·“"41äПhÊPÌ£ØÄýéÙGŽ—«®klºŠ‹µÞí¸Ï¶oÉgÏåeÿ÷>ì÷ŠOîO¨/,Þ'b÷H]Á°†ÚªŠÓ§ +-ògHIØ ‚­ ô[î¹ØÉÎÊÂÔPÚÊøEÖ +-|ÑÈUz/Ôïûý^(uÁ¾D È`Ø×72µ3œÝ<—ùúÃÃ#·)i™9¹PÅÒòsçë5nÞºÝÖÞñÂ+ö /qƒƹñ¯þD²x=yíò¥†ÚógËàŠGeØ—» Ô€*ú-§ª4L ôæÌÔÂBÒeŸÝm°‚ì0ØWTý~2ÕgÎJªOªCõY‚Æà—z›\ºkj;'÷xá©Ó4ÖXkS|âVëYiw ï¹ëléTãéAsÊñâùVC|Û#ÑÚkü}i¬9ØàÕéÓZ£Õ$úTÜ´×K[ÿ÷ýn©¯ÄÚòóxúcƪ±³¡+M-¬p5Ïå~k7†GEïIH9u8¯€nVÛ€utóÖ¶{|¡&…ƒÉ¨ß'û½ã“©>ý ‚ýÐâ¥ß€ý0×k—/^¨!qÁ2S“á­‘a!A¾Þ®Ž6Ä/ÝÙÚš _Ê£˜´~ÆG.ƒ—ðìßíÉËa¿Ÿ"ö92èí«Jðø™)ê4¬l™*úQ;bâ™+B|NWTV×7âd‘¸¿€ËçF±/ÊþÓNô$ÖÑt2f‹õ5•Ô”\ãwGGm%lÀìh!éCIö1‘^!ûËãmŽ÷ÿóuQ}ýƒ” ðúòë‘P}5¦ú³t_¤úK¼|Vb¬¡µßþôƒ‡±ÕJ™·"½ÍL\ÿ!íl¹ð^ }&8ì­Ë†Ú“G´l…ÊæK á).䇩¶9t}P•¶ ¶Ú3c]ÖÚ”Õ68Lú,Â~ïú"ö…Óáõ u9”·¥*M$MíÙº´]=¼}‚BÂ"wÄÄ'§fb•–WÖ\¸xùÚf^”ìdèIN}ÙÁú¨ß¾—Uÿ9ÿ˜¹þx¿ãn+ÄõjS#̧¬¤ðxnvÆþĸ]Û¶„®_³ÊÇËÝÅ~ÑB3£y:³´¦MžÀégåðÙõ.ªÿÑ+°?  ö ªL5µA ãùpEGWÂF`pȦ-Åøÿ±_.N= k7³â˜ÙåصvvfÇ-—(·’¨”nºQDX)Ý•”îJ’JJ)¥È%Š(R©ärXvmî‹söÌîžsì²ÇÎsfÇ™ó}ž÷ýýúýºÐ3éýžçy?ßÏw'sãHYEeµ°ÅpPå…ü¨ëâPÿ¿í¡Cú"êÏŒÈq¡±îlÕÉòÒƒÅ{ØbDh°¿7Ía‰Š4CÊþ¨ÃZÉþŸº™ì·Qý¾ªª/Úö§3‘ÊRÛÎÁqw5„6¶—”’ÆU ™å5ÀnÜ$oª/v÷ûóç¯+jí6_»\$‡»©¡¶º²¢Œw—½‘Ž¦†å­XŠÌv°CU›ah€ÐÖ‹®6ŒR‡Ïûërè«Ë¾hI¸}]Lî‹!Ô‘t&RZšYÙbn®ËW¯õACŠŽOFVæbj•W®ÁsèàåÌøÜ_ôÈþûöÚU}BØA°G(¼Í°†ZÖÖâ‚ܬô”ĸ¨0àËc¥>ÀlÐËxº¾îm-¼>Q°K®7¢~Øï'±Uüô3éŠcpýŒ}3Kk{G”]÷/=}`‹1ñGæî¼Âý‡Xëš._½öMóm¸Š/>#ê¿jìà‘=W²ƒ…‘†vã:£ƒ|ñð}ù9»ÒR’â¢I½ÖðÜìf™›MÓ×¥¸%é3vÅÙ×è>²ßžêËý}"U_s”– m3¨þ<'Êl,oCX$šE6vwô8¬U5hëý‡°´êi„>-ŽŽý™J^£¦Ñæ®^¾ÐÀ-{VƒÄðñ¤¢¶ÈýÖÒÌÄЀ–‡ÌÖ$è‹Ð–]­_—B_úbv<:ÎK*IÚtõ§SGš¿p‰ÛJoÿà°¨¸Ä”ô¬Ü‚bŒíÔ™Ú† ˜Z3E¥¸÷'ÊzÔ#ûïÕSþI}¡? ØÓ_ÿ‹†opëÛëW/5Õל†µ–åçdîØ–±1ôr_ºØ ÀÂÔÈ` +-)+]ô\2Vºpù¼)õÛÃ~_öÀxIY7Æg[41³²™=wÐEß@#vKòötá‹ø@Gã…Ëj¨ʎÿûJeT#²òâùs46 +-KcêÖ„ØÈ0 ƒ|q±Ó<Ä%J’É>å%Ùâ`!û*°Ñmd¿#Õïߢú#FŽaÕŸnlja-T•Ç:?µ˜x¬.+woQ zZUu]ƒØÜ{¿XõU×aK{Ù^IÃÞ 8Š¸F³¥Å5bq§ŽS^ïÍÍÊØŽš¶!ЗÛ=m¶•¹ %6ïNsøP’ÁƒÐq( /„§w—@¿—jd*¨Ó‡ð 0ytãÆOšb`„ÉÙÏE\º£#mŒˆMض#3'¿¨¢sº¦ž²ò»‡tï˜ÚSîG")ը߃ýnýT&¦øB[©ñÞ¹‰Â‹_p¶ªŸ 0/;#59>:<$ÐÇsõ +-WgGRVézd¬šÃ.R>~qúo®ú½Za¿w 6Øxûƒ%öGkiŸ¤7ä0·²…/:».'t¬ÙaLÍì8v¢òLm½4FT^`ÿGî¼ô:¡Œ-3ýè…tFš°ÿ·GˆB«++ÊŽ”íÍÝ•¾ÆŽ¸\‡’䲈&gajÜ"û¢&µÈ~ßn$ûªþŸªÏ»cÕGbÛÎêSOC`cs‰€×4vÖúó—®È–Æqýøg•½½2­Û kÙѨØâÚ‘Ö×®\:__[]y‚öFq ÍÙE-mǪå®Èë9¶¨iÆÓ§"°µµF è#±iwýÕ–§Úo²>5ÙçÛgá¡š+f‡ÀÔ›jhb> yéìJ%)0$<:>95#;¯ðÀácUgÏ5^ÄÜnâÞ©!ѹ+ ’ÚËÙ^+Õ—Ô‡ê?ak%ù¹ÝüõW Wí™SÇÉYs³ÒS㢠¬Þ«Ü\ΟCÆ:]_w‚¶5]&õ\¡úoƒúŒý> +-[üHè"ÈÁ¾8z,ÐAØŸi1ËnÎü…‹—®X½ÖÛÆxìÌÞSP|°””±¶¡‰éqëîý‡•ÎøôWÖŸ×âCʬ¤±=þ§¬H·›¿a|Ôðàöæíô€2úx~éβokefbh0e²œË>ïCÕéuÙ•ê‹¢6LøªØ„uç5³%™âšöV.à¥Hk±¶ŸQv´W‡uë¥É¬V«h¼µ&„uUEyéAZ[fZJR\4ÒÚß›KÚÂù×3gLŸJ‹C^Ëšö©:ôû´@¿Ë©/2“#“†7dJ®öÔ¤f–68zjIÞÁaQq‰)é49—èH_}ÝÌå–çFa©ÌJ5Ù×\êyoñ)?ƒªÿpçeÕÿ;ÿ8륦úšÓ'ËKKŠòs2Á®ØˆÐ ?¯5îË;͵·&a2yü¸1#G@z®è/¹¥Ñ5Ôoƒ} >}ö +-ì1„Ø1V‡qÆLKk{Ç…KH}‚Aø¤”4éŒh¼gë/\¾zýÆM|!ôü?¡SØWjc @¨#}KqÙX‡’TVz²Ÿ•±=yK FçÏÎè¼€f7ÊٗӲ߿»É~§TŸòzÊ4#´4 {[ãå‹’†´ÆÚrò÷ÁX©£!¬åÖ Õ‡³Jz©/íÕ­eg0ŽjRÑÐÐlOŸDVØ—ŸƒŠÆ[  °^¶ÍÞ¢Ci’6f”€>5Ü +-ès`kt!ôÕ©¯ÑG‘™?ÆôØv™ž±)%&Õ¤5^~ÌØ´¤œü¢’R|M=OŽ-G Ž¯]5,•S{×dêyoï©ý—ø ²ó¼î±²^Ä7¨ª8vø@a^vFjr|LxH ¯çê®ÎŽðsøªÞ$XÏp¡«à]¿ÄÖ]Aý°ßOÁ6F¾æ¨1ãt&êêƒfV6pÆE.n+À a‘±[’·C÷?à>5çγ5Þ¼sïëOg´Q¥!)½²/' "´±-éF·/Ÿ¬5ifçEü@O²µ271²?Zsx·•ýTŸóZ¡ú£¤ê#­mXõ©£!¬#c¶¦ÊŠFè’K 퇟¤²þ¦tÖΩ¾úre?be2©ÿr‘ +-Z%vVÂQº5as$š¯×š•n.ÈêÙ6¨hFÓôu'ÂtDGûœ¡/÷Ö¯ë¡ßK55Åüèð©)‰ÌDÇÕ™¤g`hb>ËÎÁ‘†çéš”Wˆƒ-‰Êíí{T’d\*§¤~ìwó× +-_ÿ‘ÔöoÒ(+Øu÷kÐ÷).ÈÍJ'r…x{¬rs!pÁ{XWÁ­aCØVùüU¨ÕÐ5ö°2=†Âµ>ŒM!³ç99»._å±ÎÖµêÃ)9RVQY] ùÁ7¡Ò+¼ñ·ßŸ¿!É>Mç–Äao,/=X\°‰¹uKldh°¿÷ÚÕRö-gbzz“¸) cÙÔýdÿµª?”±ÅamÊÜZÈYí·~cx4Zú®œ½Ebgu ¢ QR·¬¬3Aý²mNãÔ©ÖŠzFAÝP[]YQv„W¶sǶĸèM!ëý¸ -vš7Çv–¹©1/³š+‡µX›ÊÞº ú­d_ PÌB²3Z ãCfšYRQrq[åÈ ‹BOJÏÊ-(>tšS‹Ùq`¢%Ñè8/•q©^‘Þ5›zÞÛzmUÿ…d—0V|„;Ty/A~@®#%Eù9™;¶%ÄF„ùy­q_†?`omajûà‡ö„É„ý™³ìð/%môAâ’RÒ2wçî'o¬:+Ò|ûîw\zù#¨0„¾‚Ú_hŸ"•–$óÁ=žÝ妆ºêJ!û9»ÒR’â¢ÃCÖ“7²ì£)™ñøÆv_Ùoý¶ª?ªÏYm`lÙ ªigž>(h"©±2WMýùKì«ØXÛz¦šÓìë±/µ˜ævöíŒv¡±îlÕÉò£‡öæQ=KŠ‰ØDA½b)Væ`gmAI=…w6’nþsZeõGªaÝ»+¡¯N} › =®óÃÑëO36µ°¶Çø–¹#3ƒB#b1½Ìœ|D&õ$ ó>_;dÿé¯<º=²ÿþ¼öUŸÐŪÿ=Èõ?öËü©ÊóŠãÎ5Î$j\:©“DEI3mh*²( àRM@AEEPAvA¼¬"à +- +-Ä}aÄÝHuâŧ?Ô&6N3mLêÄé÷œç}ßûÞ 3s§7<Â9çù|?ß›°øª¾tU“nEF, ò÷ñš; ز·™ duô(¦îÿM-õûŠú*ì÷Ø﯋ý\vMLÇŒ³øà–V ˆÃTW÷Ys=ø!Ñø™š<ˆciyå>0äÄItÞ‹W:„9v…Hꨚœvt\“¤Ä¼+ÔñGæQ‚™cöúô5hJáįys<Ü û6BöÇ*²ÿ–qɾ^Z+ªO–ö®VõA-R}O¨>úÙê¸ä´ llóv¡úÈé6ÖU€«S´³oerýÕW Ï)ÍÐç”ærvæÔɵG¥˜.ÌÓ %Ĭ +-_àëí9wꙣÍ+Ë?}`AýŒ“z„.ôû è÷5ôû¨O_¡>&8TîJãDjÚsUòòAhFDÆ¢)iò7Qfî;t E çN‘)÷¤oµ5I_ö_5›zßKz*v©þ‘ëQŸôçöë¤«Í µGVï)Û^R˜›•žl-]ìç Y>Íâóg|s3“÷ZBU%fNõû¨œQ‘F\¿Œ}ÖFƾÙØqï3Blí§¹y̞熄,‹ˆŒIHI_Ÿ¿I@ß ¡ùt;©#J¯L‘oá'üëûÿGߟ'zy,†÷·÷;©(u°;6Ö?Œ¦Dã˃:&ÅE­ ô#ˆH²Ï”cÓÈd¿GÕGAã•AU?DPccÓYõ)§#cSÒ³ «hg•ÀV­¼/pë®”Ò¼.×¥›ýô)£i[€þw¢š=@­!}¾ýt3G¬kó¦|¤tJblªm Ÿ×¼ÙnÓíÅÂÓf}9¨ÅÊxgÊÒ ·5Ù#ÄÙSnrY2ãØ´žd‡¢ßzû-]¾*Ÿ•[X²½lO55¥æÖö —;píT”Ddò­«SÝ«¦Sï{9O_XµªÏþ#qëê¥ód?5øå¥[‹!«kQxñ |ç2ÇÝÕyÊ䉣펪JÌ’MµÿK¡¾>ö*Þ8œ>Ä !ñ±ž4yŠ“Ëô™€ˆÏ¢ÅPǨ¸¤Ôu HÑ–»öT8r¼¾±¥õì…ËW|j½ä?jyì#ÚÙ=U@¢cw¹)1G(4!û;·ä#Âýb€}RG’}šà{Šì¿i,²¯^š²3IT‡I£z†œž4ÙÁÙÕ}ö\OÚ×ò•«ã“Ó25”Ò¼®šM¢›QHß»ÿ@Ú–RÍzÌèŸ%»Ñ‹hjµ´¬{´¬kW‘Ñ­-Mõ5GTïÁ¶Š7æd­KMŠ[½r9u3¬kæt¤ôäITÎþ0ÞÜlô(jgœÓ¢ßìú†§¾4Cç°á¿ÃML)7-¹,¹ºãâ}B–QWZ»>©YZŽªTƒn{æü¥«×DS’3SžÞ{eÿ7ðtÉ%ÀÅÄ_þƒÒ l]¹H²Zw쨵c˦Àë*bèôŸ}ˆ#aæÈ1·Àöíœ]f@},ôZ÷F26än,ÙVZ¾÷³ƒGé0GðÐz…=ªAòã ËþO]eÿÞ[¨J4¿SMõÇ $dyšÌ4ŠÍ0*K,ûœ›²ì¿‹Ž0*Ùïªú¯«U¤¬ú–’êÓº|‚ÑÍbÒ¹‹±-RýºFvUPë&-Kif/²«nW¥JèÎ/o}A»:×ሮ,/݆f¦ÉHKŽ¦Œð]ð)¶åêì`gcmÍÁºL ú¢œqL«sÚÀÐ×¥~?Urò )8Ét0B'—³æzùø¡,a‚š¼M[vìÞû °¥íìÅ+T•:¿âfË·®d¦õ{±o”OGXõŸü aK|*½×¡?쪀VEÙ¶’¹Yék¢W. ôóþô/3ÉT'Y3²Ì„¨ +-b)÷ÏçoXáÑÅþéþ±: +-Š˜’;2F짺ºÏšëéíŽÄ$¬Y+챬¢Š@ÒÐ|úóù_Iá? +-Iø+ü’?ê°„ÆÇ¡É(ö %7¹+µ·67 6÷URY"}LIŒ‰ŒHXö§OsDpZ‘<Ž53>ÙÕǺއê[Kª?Ï ª¿dùÊèx,+;“ÔÌXUÏ]ä]‰b¦›Ð?éÛjwµL@_Þ”* oßPzVµ¿ª‚:?{=®»Z‚s÷œ7Û÷N˲ÄÁƒjö‡ôP‚þª}½fpè+s¤»—ÏWס!"9Í-x†¸x7'm):aMzYNY&X‹k§Øä®$ç‘(¶?&xòD Éþ®@‰&smrüjçâE>DèãäI,ûãT²?ØHd¿{ÕC¥ú£ÍÌ…êÛÚ;ɪˆŽŠMJ]·!·ŠYÕþÃÇaª­gYõoÝ‘Uõ‘zS/¨ú?j[]ºXNýçlkK£¨e»vl)*@@§&ÅFQ/[äãÅ í„{Ç®Ðm)¢ß©d´ ýþú} }=Ù—³SDÃEtš˜Š¾4Ñv +-%ç'ó¢.­ˆŠKNËÌ.(Úº³¼#¬oBnÂqHöIqâÖ÷ÊþoèuQ}ú BõI€Ðz³ðšëÐy÷Y…yÖ¥BT×X(¼.NPŸ>Ä'°H|†ÕòªŸá©¯£ŽŠ;JØŽ{d ðB§8¹€$øþAðÇÕqIir7o݉Ò{ðh͉¦SÔz;ÀÔÞ¯»d0é–&Z…„ìßúB†IÝ1 +-ÎRªK4ÃXdp€ïô%Iö9:‰$¿§)‹ì¿ êó®ì¦JªU­"O]ŸMÍ›ªm8)jç³¼(0ë{Ú“´z„¾6¹”Q©å=q<·Q<Ó­cQÅXTFZr<Ší’ ÿ…ó±©.ÐÖQ/37CB£˜Ñ®†HÐçŒVBÚÀëÒ¡~?Õ9;GSœ`cïä2í–†“ˆäÌ+ܼcÍ°®±Áy¥ƒÚn]››êKï•}#~ú®ª0Kú h½„¬KçÏœfQ­ª ƒÊ‹è`y¸Mu°šj^á¥â (¸âû7¼òèc ôH|Þfì1· õ±¶±spvÅ/ ^N,Y›©É+,Ù^V^¹ïÐ1† ùÕ^ ¿ÿƒz¯0 ¡@zÔ•'O岄2N„ì Ù—êfX+’sKQ~öúµk&d²ì[ Ù7e”Œ6ÔHdÿ¹ª/v¥R}X*xEªïBšJùÌ‹ª¨bOmiĺuçÞý.ªßãšä3[’;­θôÛ7hM8õ憺c‡öWU”m¥lMBLdÄRij7ÇÝç.òÙÂ\lêm*·CD»øR¡¯L’Is Ì‘ÂýÖÜ‚ê-e§›O14let<¢3gcñ¶ÒŠªGjNprr]âbûð›GNy„z|Õ„ê}ªïÀ¿A˜*EµWU‹ü‡<õоÊÝ;,MfZR\4òüBáµ²¤¾kj‚O@@|…V†U}ùøu°?@òžAìŒ$>¥ÜÇqª ÒÓ›`›˜")ä®=Õ I]cKkû…ËW…CÒWNþ©ÅIϲÿ¬;‹Ôò¤“’³²ßÖÒTü0ád[I!25)S ‘eßÉÞV%û#»•ýÿKìwQý=ª¾›ÇÑÊÂWÅ$`O9ER)«mh>Ý.TÿË»R'ÓëI[ꮑaI8t)›qér%ÖTï¡p.ÈÉJOIŒZ*ÒÙà ¥Ìv"Iß;/ŠóYR}UI»2à²td_îLƒSzbŽ&¦c1GOgjLc0ÎÙ™©É/Ú²s79Ž½íÜÅ+4ÄίDrr¯•/ý©$ûÏz±o”﹪ÿ¢ú·o\ÇWh‡ÿ@Sñ¶ƒWYëRbV‘¥B~þÇ~¹xåœçq|ÕØ9gYvwözF!T®"·b2›;I¤{é•R#B]UˆÂ`܆q) If¦q—kÍºì †³.{qξ?Ÿï÷×ïyOOÍÏœ£éû'|>ŸïëýzWCõGá…ê›w0´RÕÄ(Ô×Æ~Kì·#–0ö;u¶°ê÷!…tt"š¸ºÏò ‰ˆŠEéMIË8ÿ”9Vñù• |•'ú,R¯FjÌPÑHÙ—ªoPÈ"å·n¢ì\¹ )&côœ!d˜”}«ze¿¥JÞØ(ÿtT_a•¶êS+³ª?f,¥³O@p©~rjÆ*¨þXêl ¼ª¤JÕÇ’$°VýWú’Yîèvt½êò…s•ä7GJŠöŠ%åf¥!›a8!´¥i“Ç#œ‡Û¶ôÿÒÝJ¦3ö$âY¾î¦Þè®´¨oòŽŸË7Âsá’4&8ŽÌN(Ž˜¢8õGͲÿSyºª/ƒ®êyúDùa©…ù¹YÀÕ‚¸èˆào·)ãÿþÁH¢•M/é¨ «vmñ꼇µÇ(Σ¢D°¤&¿þ­PHÐÄ¢;¤Ý‡á£œÑyÝfzùÍŒŽ[”œšž—_Hþ³¯µ÷,’¾Âõ[€è/¢è—}1Å»·k—/Q4dá™Ê@ ö÷ö˜Þ ìÿâm–ýzTŸZ™Ø“PT‚ÕÀ¡ŠêcKa¤úK–S6 +-I--;~òÌW"šyGš¼j¤êÿ[ f¶ÙÇHo8™Ë)™©ÕbG«ÒS““P4Ïöó¢F6v̨CÚÂq°¥.:p8S·m+¡Ïñ¬³¨7º)åìéê•QŠü¤I²çtëÑË÷΃œâæáôĵ£ÚfåænF³Exò­ëÈ~]t6Ë~S~¯«þ‹ç¢÷>¼ÿí=®½WWh½¥Åû÷ÀÖ¯Y•‘š¼(!vnX;ê˜Q‚Uw©¨ Oð«6†jÕ×8Å …BJóa‡$ìw4g‰ìÝ—x‚ÎËéí6g^|ââe+2rÖ¬ßH?µ·ŒèìùKW® ¢¿ðøIc¢-ûu©–ÆxçÕžg¿Rdç'ä‘™+—“ìÏ MI²ød toHöß2ê7Nõ­{p%sª?Ë',ä«°#Rý¢C •P}¹¢ûBõµƒÙ0ôÕ‰\æ:vãoè .ýðAóv´Ú59¼¢øysÃ(™§Nä¡ØR4[[bIfXß{[qðïjCß(‹Ò’}e–è·4J>xä'î]”¦q“\gxú…ÍMàδf=šížýÅ¥e§äÑkExÒ¥ó›e¿)?MUUÿqíô^Hêõ«—/­Ê*Úûév8j^vÚò%€UdH Ï¬éSYQ‡ìßço=­-á>ÒPUT™úz°ßJÁ $ò7ï1OØ"­{PÙ;:Á~&¹ºƒ(ÁQ± h½ä‘ø @JÉ‘c„ÉjQ|k!ûOëè?e_³1=&¡Bsü†M’dÿÄ1t& rËFˆ$Å'Ë~!e‚‹ÈÏ~,ûê(IöùvËþQ}2Nf^‘ìç´TÿÁC5— .H§ŒáΟ>áXþç]Žeº\.}7ü¹œ•–²‚A·îî:½–ûX?›^=­­ºvîÈ…LD³TýV­Œ }mê›( J³T´'ÒÑ Ý–ò30$2f>•¦ì¼u6s|-?yšI½V¤çc-Ùÿ_³ì7ѧOõŸ Õ õÚ•Kçñ*Ž>¸ŸZoÁÚœÌÉIÅUþ^3§MÿáhT^»~6„ªÎÌÚ³ rß­ûüŒðZÂ~; +-ÿ‚ÎL[;òHüƒ)ÓfxúÎŒ&‘LMÏ–LÙWŒ¯@½tõÆ­:¨|' ¢õôc_+Ïþ¥1ÈÈ>Åç™SÇËJÅ$ *ÈÏx’}´¦iÄ”¦)û ª¾© ’ÙNQ}wBUDtÜ‚$YǶìªq«þFV/ –1½ª_·Nåó_)ʘØϺÕÙé©ÉI æGGbA^3ݦÀpF wlÇ¢kï V$“YB_]’Ü’Q¨ßBLS9y1LJÐöf¸w”[Ìrˆº-¨p¸hM™9k d~²áÐ$oVkÄ§î ›©ßÔ^=ªÿT*+ªdÕÑCÅûv³¡f§§,]?¨òõtw8–•*¯Bª?qá}W‚ÊHª¯ƒý–(šD!4í`ÞÅß wßþ‡ 1š˜2ÝÃÛ&Ÿ¸PAíݸyÛ®Ï@%“Jž¿T%©òíƒZÕ% bE›+ŸB&Ù¿Ùÿ.Y~„[Ó–ë׬ÊàÙ³„ìÛ4 ûF³H#½F«~_òSV}7*(lî:¯UwAûáNÎ.h½3<}CÔÞÔt’Iê½ûŠK%W.^½f“ßCö_*d‘³¬†ìS‚ž–²¿ƒmRÈ~4sEʾC““ýº”ÒQ}Ä2í‡T©ìÕŸ¢ª>éi^þ®b%‡UP&_$?­¹}÷5±ïžh +-êë…¾îj(‘k‘Èwo×p£Ýœ<~´´˜"yó*µ©ÉIð›ÈÐÙ~žÈä .δ;[e‹Îb=¿—бÜJúÆÛ2P:yež"D•ædAݶßdèh8δ^~˜fl¢¥©TlE„–R¯•Ãl–ýŸÌ{Mõ_*ª_«øi•ª’¢½»¶mÞ ô4q~LdH sÊÅÙÉqè ÅN;˜ÖaJKN¥ú?3Œýv‚*ï›Â~,º+¤?B&%WæÄÄ'.^¶‚¾z/ÀrðpY_U'uÈbXö_©B)Тô¦š[,û•RöQœ6Cö³ÓR„ì#Cg6QÙ­ŽVýÑ¢Šù’êÏ';ÍÌá&ƪ\U}JäúT¿ÁöŒ6SÈtçJC§ýt;'r&Jm"ïÆßÛƒ#yôÔZ,Gf²ØŽ e }ÚV,eCZ1ªt'¾w9Ï®¢}8D]&NÎÍ)f~"[‘¡ÔkËOˆi^¿)ü¦V‘ý—ͲßT_ýªÿHÕS¨þ‚S{vRívìï5ÓM`jˆ­M/þ¨¼:”2ùq¨/±ßR~¥ò2VØ~Ì»ZZCØ&G~ Àâ›°¾B® ËÞ¢CT|á“._•ŸA-Z¤ûºF)ØrïØrMdèÉò£‡”æ„q.#ŸŒ!Úe_Wõß1¬úÎ.ÉÞþAá,§PýÕëtTÿŠb§*§^¬aúTŸÎ\ÍcºóϹ†ñf +-Öæf¥¥,]˜Œæî:iN‚3 oï¿ö´¶D$›µÿ3-ÅV^;‡²N*g?ºåI¹w*·¤n ÉéÑËÆÖnÈ°‘¨N“IqèÖQlWdpˆîܳŸ‡Çyí†ð´ÚfÙoÚ¯Né¨þ…³SE{a@\{INcæ„ÎöõtweJÙÓOPÝôwïáHQá•ŸÀÈÞ£å’ô ð Z·áo@öC`éjÅ:9`°ýpeüäi3<}C#£ãðRÓ³óò ?þ¡¸T +-%}†[5·ï²=~¢Ç(õ*¥¦ì?g¥¤q"DknÝpù?ûuâTåy…<6±šÄ8šTëtQ” "Æm,Á+‚VM¬qA‹ˆ  "û*(»È"›,¢±Æ¢Õ˜¸ Š€âFµZÜ£ÆÆÚ™ÈØؤ6™žsÞ÷ÛîW,×æz¿?á;ïyžß9u¢EÉN'Â~|L¤ñb_ õ»¿Þõi4ÑŒúÅõi2t†‰}, ¦Í+Lúÿ”ÍåÎ-À «ãúšjÐ fÓÆÂܬtìãp|én®sàªuV9Œÿ7£GÀh,P8ú4›žoÁl^7\è‹ÿ”ýRvݲ?Ú§/Þ¶ƒûcÆÚMP9ãe‹?Ô?ÛäTÖ¢Ûw~ +-À©©ƒ—.ûŸZ°oŠ}ãú4S_Fý“¨R +-©_¹mKY1œ½°  oÏ…óç°²µ ü‘h +-{ È¨N¤¾ld¹Âñƒ7/êö` ¹Åk¼zÁ?“\pæ#€B`’Ö®ËÎ/*­Ø +-»€¢åá ØÇmh7]´Å ÿŸ_Þ•°_/`siQ>Ã~8b‘€ýñF„ýR?Q?+·‡Ô#ü +-£:æÔ‡¹<Ö—úBÓXZÙ vo°ë-Wþú—?ŸemŒºÙ +-GXþúŒµIq1!˽=é +-›æâäOú˜&à +-™æMn1ô;y8Šªø¥„œæÔ£6¶öûðG=½ýâV'¦P2ào'Â>kQû¦Ô7¯mêuŸ¾° BHá2 €Òˆ¦þ¾K<àêýpšË$»÷Ç`FY 2c2%ê³Ôïj€ÔWÄþk| xì÷ê {ðsÆŸÁVÖÃGÁlM QzùøáÝŸœ–™S ò`Õ±:–.W®^¿Å $Û}°/´¨ôCÿÎPyU¬QŽýM%p<±?°|éâ…Ƈ}åp8õßÐúIk3ˆúü;^߀m|E¤©’úOu•ñ÷¯¨]Ì.Z6• §OÖ±2Ý”—äd¦­‰_…¼6†—s™½©VŠ¨ŠÒ¼¬tPd(ÂÔÍu6RßWa¸µÕ`sغy%—„úºbŸôá‚ü¡«—¥‹íxÇI.¿ý`ÖÜù {/‰ˆ‰#T•VP¾Ð2œTyT©0ßµý4°ÿ¸õÑ×"öy‘ž¬=&`#Ã>ÿ§ û“û£¾¿@}8Á¶õõÙPä˜:õu„¾õqÛ`Ã3g¸9väàÞOw²*^Ÿ‘šG˜7ðº_º½-N…ÊXKOi. }]ØçU +-Æ1Ç˪#þTÎâ¥ËB#¡IÓ³ò +-K+è¬=„¾9kÂþËòÉ÷á©vêß¼Ö|ùÒyBáÝ Ë¼b™×¢äR^½#É?|z÷‚EYúªR_¥ûÝÄØïýöÏúâÕKñ‚g/¢ÒiÊtÊ/¿À0RefNA ¨—¡ª¦î$` tõ†fÂh®ƒfÆhüSû²&ýlW%KûËŒû:¨/äÓ/­›ú kÒeÔ¯Bê+0lb}F¢‹úÄ"¾t¡ñLC]MNÚlâ5 «¢Â‚üð›÷U1¾ôQÇY æ]ŒSé%„~7Yè Žå¿Uxî¬Ké¯ÀËö½‘øÖUÎ(œ‹¼ð®…*MÍÀ—g-bÿX-ÞOøSojǾ¢I_tj™¾çût¸”­ºT¤>¾Œú›K‹àîÅe \îÍYê‚«VAžO +-•b ä±ÿO!^8*û› ‚³—Tiç r†€y+áðMIÏ΃„¡e\y¹·#æ!b_mtƾš,ûÿ ìßV``¹°Ÿ•¶ÆX±ßQêGDǵG}béãožèE}¡†Õ=|™žù‰ãG#n¶o­ØX˜—½.%uãï #™?çw3¦:«°‰á¥£oÌØSà°·.LE^ÆH}ûB™2ãô£Ë–ýV[{GÎÌÙ®x×ò.ÍÎ+*Ý̱/ÿ«ì Øÿ— ûFöéMýFõ7•lÈÉ„»7:"ØÙQßÁd=VAF}O]©ßùKÐE†}ÜXÀ~¯·Á?l+mlñî%¹ƒ+B"câ€@ëó‹Êp–Ì@ç/6IÒ&K­´Ô}E—îGYn.+°l|ØoƒúïèA}(â +-‰úgE•vŒúßj‡PÃU÷nÊŠ Ög¤&ÇÅ`{{ºãM;ÍyƒEL#ð«_ð&î)U±ZwòX©ßUø¯"öñ¿Òa‹Â§.+ÓÔÌœ %›dØo4aÿ¥øÚ£¾F<1êçg§§$¬Ž +- ôóöDJa€ú–ïâ*(ÒIݤ¿ŠØï&,ú‡½èJZˆÁÒËÇ/( 3&-3wCI9É TS×€!ÓÔ|íÆ­;‚ÄuÐ2ÚbF}±L?ö5¨OCÁ™´OýT¤~9§þÑã'N=QDé(ÕFýÿ¨—°pÐâ8ZpgêkX òqy ÍßyÕð<6 ã7pÔò‰ð§ÞCÑÄ ýW´Öé["öáÇZÂáØOœ("Äßw‰Çïç}ôá4—Iv̤æfýÕÃII}C؇Œ°‚+yÄô7ô®åPÊÊÒÕÍc‰¯pxtlbʺlNK0K܆–ë7oö™-[·3ü¿ +-múäÉ7Ô·|&ê·ÈLúHþ^k³W~÷‹›×[Ø4NÔ…‹JxkEiQ^6Þ^xÒúB ƒnfàM ó=bØPK8jÙ@àªåO±|$>Ù¯•c_ø³ýÍÌ ûøÔyâK‰ˆ‰K°¿“®Ú:†}?Ö„}cù´…“DýZ¨¿«_ þº”DN}w\†©j$í×·¬øGÌ&CQÿeìÓà"0ÿÐ&`ì„UÀ±±ï8Éß¹ Ü!eB#qЖeh =û(fNŸ;±©ùê @¬ÃCX‡gÆþwº±ÏëtûÖM 5±ïdØoŸúæmP?GƒúMWp÷t“T'õÿ­F}xå÷¾¸uãjsÓE þɺšªCûöü©rÛ–²âÄ NƒÞù‚¹³@7NŽxÓŽ|ZŽZ>ªa6S_‰}á×Âe ÄéÓ·¶(|êãìyŸºsì£oò‹à¡ãŸÕÀ~;GÔ‹Î.Ó×ѯl’¨ß¬IýÜÌ´äxN}7F}Gµ•$RXE4 ¤]Ô`)É’Î^¢%ܽƒ­@@cЖNS¦ÏĘñòYË°&-+— ´s¦º¦¾AÒ% š¯¥uÐPNì·Ñ§2ìghbßNìÿ_§þsS¿¨O\S' 㮑¶K}ÅãV©ñ •fñùîð̱‚ÓSV¯ Z± Þ9uðä‰ìÆŽ5|˜Õ`^Â|=ó0dè«5ªðo‘8ì°ÅBµ¦Bud…êƱŸœ–™«‰ýf½®¨]¦¯ƒßóQeXŸ©¯š0n,ÔB)QÿÍ7ðè5t2iÆ~71e¸-û›¡€—v*g–3‹—ú¢.c“Ö¢0h`9Z{â`Ÿ#ˆc_X‡oõÂþS5ìË |y¬êÙ°Ïÿíû²¨Q_–LíPÇîÏõÏqêßiƒúúœ]­@›‡0‰»Hý+MÏŸ;}²–ÙæØ\ZD à ³À“+˜t3 ºë`˜?½ã0Ü<4~n÷îDÄ> GjT6*žµ>~Aa+MØ¿6¨Âdº¡Fýí` NýHÜ"Þ½ãmq¬ÕL†ÜZî3„K–3CèðµµG}0 —.ßÐÈUñÉ©™,i*wíÙwHðeSó5EÔ(©û?ènÔ{Z°¿å°ßãG„ýΣ>°>“`´êW£>ågêkªí£I”—lÈÉÄŽ +- ôóQÐIû_öëü)ËëŠxl'…LÅjÒ6ScQÐ$6™Z  ˆ"AÂP†:Ö€Q@EˆHˆˆD@0ˆ,â‚q©M­¦.ˆ,A“1ÑÖ×L& .ƒZô‡žs—gÞȼ÷O¸çœïùœ©>t“Z 6W0µxyÑV—Ÿµ½SíßU¯TO/Ÿ©oýéωˆš¿hIÃþ¦­ÿU ûßuÞ¹kÃþOíiÍÃãG²`"Ò¤~qþšVâá;oPƒÉ—Þ½¯QŽ>ÏdD.©±Ïs†ŒЈQpø¾þ‡ñ$iÞz› Cìü‹—½—™‹QÓ°€y˜“ èRÉÙ8h(H7mØJ½'`ÿROaÿg½¸S­Qÿ5K¨OÏ®sŸ‚úOuøúæ5ÞåÇ[ëjìƒBlÛTV‚-´yòÂù±7oãI;ÑútÃJA7°X ÅåÕ‹©/þj§Ž!>ÑÛwÚtâ›9ó°ÑW~°&¿Xû¸S©niïT£óËöºñ¤±¤œ¤¾AºÔŽ ¹ä3ÉóMBýQ( röR1ö.õµbßN…!/Ф!¾Ë¢fÚtÌh4fÍš: {ö‚êAÝ»lSQZ\—“…mžÉ á…}ûtãÈ]àA¡/ÿ_ÙR¥­N€ŽgíTê›h3Ø¿zƒ,UÓº1:ÁlÏú§J%aAúÔ¯RŸÅ’ïdN}ˆ%%õ Á¨úÄ?,iè(¨¡ÀAÖa`Âœ3/1)%}Åû«q*˜AM­,m®\ÇáþC•1­Âþ×ÝÃ>d ûÏöyìkS ŒúˆÑîPŸ—á‰)êëÓ†œ\—Îó.‡å»ï“ÝÄ6ëÖ®ÎÎLO!m>3,$ˆÔö¹ëHÔ ktÂÞéÒRôZ-dÍ.nUŽ}G§‘û'3ì¿+Å~Åæê]:Ø7©£Ìö¬~ó@,úð¾Œú€ /ÚO´H©/I% õÿÔ-RSI +- Þžö`bÖpa^§—¯ 1P¦ NCn~1& è@M‹KÇÁbì_ÕÁ>ݪó%[ÕC¶U%Øg[µ/c_JÏŠÔ"§þ›H}°(]Rêo‚2(©¯USÔÿŸ’ú"m çÎ~)éòÛªÊ7åãÉ•š¼^´¡Á¤ nãHŸÃö…:УKäQ•Ð\«ôƒ9öGöÑ7Sì',Zš†¼Y'Å~ µ_ýëœ ûúº1:ÃlÏʧÎ$õ<‚õÛ$Ô/צ¾2”ë…Rï‚4öí±Yptrv´ÁËŒI —°hIZFVAææê{ oj…¼ÆáöÝ{]÷°q08ZØ¿o9ö#8öŵú²¸Vûö•SÿE¬§þDV¤þ‚äeËW®ZSPÜÃÔWцנ­µ‰vù®í[*K×~˜ƒEHJŒ‹‰Ä6 +-ðóñò¤'—‹³“#× ¿iíT¡ß‹•Püð/ø¦À±û;9öÛöuöªò‹N1Û³îiE’\¢·®ê3Õ@&ÑË·P̤Ù<“&Ði@I3ÉÞÞ(êK²†ˆÌ‚à vø"hÜŒwŸ€ +- +- ›N¦!%=•ùQ h7Îá£ÍÇOÊÆ¡Æ¡ëùıûÕˆý§Ú«}.öMQ¶¯ŒúT¢Ý¡¾ +-¢šР~ÇeB›“Ç[ëjì#mYIÑÚÜ2ÉÁEW¯ÿï #Gêÿ欂T—Aº}{³*ìÛÛó/þµÞ Ø/$Øß Ø¯¡ØÇÅzEX¬¦tctŠÙžUOAlº8D‘úça(‚}ºwõýððå‘4l(FÒ£©ÿŒŠ˜‚€2÷¸|ǹ‡Î˜Ó¿pI*2T^µ °¿ÿà‘úcŸ±q`ÎüžŽƒ  «±[û ö3Ò–H°ïØÇ°?L\¬RdöÕÔWRßõáð¥Ó RŸ ƒQ & d&†#]‰3Ý'xOñ'Ó‹Ðåæ•”Uaæì?XSwŒÃYèô0ö?FìãjEìÇÏâØ÷¢Øw•aÿ—ýûÚ uЧþ;H}d(¥þfºwÍQÿGÓÔ¾ÿñ#F›ïe´­mU¬Ë—/K^K +-èÏ÷.©Å ,^R¾y¥¼éå"È„#‡žµèÖèÚØ/±_Ø'»•èæ[©nØ?Û°ß?Ÿ2ôE qDŠópR¤þ–J1LQÿùÁƒä 5‚úÊQÀYD†cß ôÊØ7ƹyxaæ‡Î˜5;:.aÑ’´Œ¬œ¼‚õ:ljâ8ÈSç+±ÿð>,W}ì—ìg¾—²8‘a?a¥éì$dNÀ¾Šú¤õ‡!õ±@}ªÐ5õ÷´˜úü¾Š6§6Í µäû·o©,]_˜‡]¾4)!.†[~“½<Ý`í¾: +-àøÅ´ÏÔ7ä›ì‹.øFûÐçû•[DìŸÔÕÆMet–Ùž…O=Aÿy ¤ÎÃEJýÏ8õ)‚rI™£~ŸPèUìÛ Ðd™C¤I¦C' ($lf8 (qqJzfö굘:[é8k~~úÌ¿/\VÄŽ…ØgÁÓì‡ öÝØï#ßlúéSŸÆ‘“3¥¾ûDoFýH¡ÅDê7›§¾Öïk]Z]JÚ´o9´!ÔßTVR´»Úù±ï†Ï ¡¶!ÔãBÛ\ºvííT¡oLêk,WóØÏÄ£vCyÕ6Ž}¶]/Êtó>šþ´r¿f¶gÙÓ§~—Hý0èbÐÆ£‡‘ú€ ˆ ,šFÑúÔï+ Ë: ‚FŒr}…§Ž`0µfüÂäÔå+Waì”Wìlžh‡q8wñ +-ËÛwïÑqèì·2ìïDìóíš8°9#48Ðß×bÿYûT&Ÿ~ Ôw¥Ô÷âÔšO J©¿•QÿXPÿáïïpÚЕÛÖÚÔ@iS½¹¢´¸ oUVF*éòÙ³ð÷§ù¢mèÒemÎq#ü¿´TÀÜvÕÄ>ý蜼Âõ€ýí¨º^™nDìwÙ°ßÏŸ:ô%bÔ¿~õÊÅsg¿ú¢] è >CP?¡þ3²Ì¡¡Ã‡aÐ`n °&L¿ŠÍ˜¸Ä¤¥é+ w +-?Âq Úlhn¥ãÀƒ§S2œ›æcßöëö+ ö1xÆÇFE€6ƒüìK?z ÿh95{ý£uŸlïbêkPÿÕß3ê2ê'J¨_ÝóÔ× MKãѤ 9´Ö}¸:{EzJR"ty8ùü©>“<©m`ç:²Sk𠇲>7ôÿ»‹ýŠýÀ¾°_5u#üµ-öûáS)‚Hu\:óÐƺ ¨_J©ŸÚ]ê% iìÛÙKc‡NƒË‚}AQ±ó$cðÈÆ¡îXˉvYòè`_œ?êaÿ Å~­ûIˆ}ÂMÿ)€}<ì§ÅÜ×kþâÿY ”eRßìÜ 0‘ú9¸r%Ô?Á©ãé©OisiCnІP¿ª|CqþšU+—/K&»œþýx° ®Üá/emNw®FŸœú–b?‚`?5# ±_ª©üké†Õäщf{柚úOÔºz¨ÿ%P¿…tǶMeHýìÌô”Å€ H«¨oX ³@ćˆO @ï´éÁ¡3fÍŽŽKÀä¡ãPÁÆ¡Æ¡íÔiŒž+4zÈ8h ¨[ØogØGpVnä £‡zÓo²—‡Û8šJìK°˜‰“oXo7g{†}YÖ¯¼Ì±O¸){Gå©TNýù aãšYÚÒè]<}‰?‘ú˜¼ŒúCI}øå·õEÚtka´ÁàÉ•¥ ðñ û–þr<³æÏ3â ¢çßœg¯ïðûpWAر‰iYyÅåtÅþòh膧-îXÞLÔþÓñFM5mý»aõ‚:Z4ÖD~V–äd$ÇGa¹sÙŒMý)Z ¾ú0°æ¡ÓðêogÒêùýS 'Œƒ½‡Ô¬¼"‡½Ÿøbô8ü…ƒ +-‚ûpXÑ´wì㊠ôõpÙƱÏÂ6šm07ìK°aµ}%õ§üŠSÿåWäED©oïìæíû–S/£þñžSg%Ô¿ñÈÔÇ_~Æ><ÐÛhÛ–Q¿¼˜YaA~^®NtÝÒ_Ô7ž;ÇP´ ùæj¸ÑWø +-ìOû6 ûpXAÚQñÉ9¨›ö£nZ;ºz@7ß]±Ïþ¹¸ä£ë»Õ&ÞŸlX ‰-tëÆ5Š ¡þóHýîζ–&ªÏê²¢¼¬ÔĘö§¾•ùrmS_R<|¸è4 ‚ °{,zã­åfV¶kÄqÆqHÏ)(‘éޯåã AÐÃaÿ¶ûm£°µ#ØßË Û‡VÒ¦0‡ÞXÞîÛÙ¶¹Ñ,ƒbðÂ7—ãFoÑûxÔ2ìÃeqÇÝ”qÝ´´uÝœï¢[ZáŸÿK‰ý‰Ú×ôS–>1‡;·nâ8\á‚jomn¨#Ô¯()ÈNOŽ‹ +-Ãrv@Qê/QRš†¨¯00 /¼ÈDÊg‰ Sh]DLBj&ŒCÕ.2M0´~`¾'è¼)¢óQ°ê„À‡úû§eØ/ÎÏBìë}< ~„Ëj‰ûÊ«÷´eOAýÉTŸ<ø™†ê¯%Ôwró‚mŸ’‘[XVÅo,B}\¶#—.?.õoqêÓ ¨/ìÚêr  9±‚|=]6ëíVY[¬0ÁØá—㶕åο¹ö­*ö§)±¿„aÿÝ ’wT\rzvݲëš[yàÃ%ÿüÞO÷Yä£k_ß½6ñðTKŸÃí›7pAýAXBM‡Aîª*+ÊÍLMˆ ÇrQ H»ÔçÕ3Ê@¤|DΙk Ø_*ŒÃ8~ÁaQqIéˆÎµûö¬ÃqèbýóØØ¿§Ä¾X@»ªPÉñ°eý¼\ìÅÓêE ŒçŠØ^Š}IÜúJ[öä5¤Ä§Á,#i m Ô÷Aê'¦eåWìd'Ö±Žî¯žõ¤™_2ÿ¦÷TOWG+[µ5•%9éÉäÂòvwvØŒ»v­¥Ùò¥:þròË©m¦þZõ›ë»õÇ}r[9bàºpÔM.êæÃ?#Ç$~º÷›óý¸gyäwé?Ÿ¨ý§ë) +-ˆ7d®|?"EPCÝçŸî«Ezf§%ÅE†ùy¹9Ù#õíVÙX˜šŒ›úú›†gäå#Nƒ`ÎX?£ÆaÛvŸ]xtBJfna)‡–c0ç`8öEv>¸ˆý‘!ºg…ªÝY^œ—•š¡ @ìo¦Øç±þ‘nY!o}—øFµ§þó"õɲ¥©ã‰Å¨ŸL¨¿‹Q¿í¸¸jŽúÿQ£>=hÉ}uædwg[K¥>Ð&/“dèëá⸕®Zks þbva±];ý¹QÔ×À7WùècbßÄÔÂf•?®@7‘qIiÙ¸gk÷}úy]F~â$]´ôŸ_»qëö]ÎúÑå?]ßÝ6ñÆzªÔÿÇ}âN:Ð@‡<9‚ú•¥…¹) Ñá!>îÛõm­Ì€úAÚ¥þ$…Ø4ˆz°?{®1U§8®^~Aa‘±IÈÎr6ÍGÛY _|4ìÿ,Ç>lÚ«û¸h[û4rpgÃ>k +ÊNcÙšU\yó'ÉÅ®N}ì ¤þ¦Í¸ju1‰©„úµ"õOCõõ¯ŒŸúÿ•ïYF}~в󪧫½µ¹¡Ž,ÚŠ’üìô$¹›3Ò7­¥é²¥üÀ~9 ]صšøæãÅþ‚E 3+Û5¢nBP7°hK+‰n óÖ8j{é?‡ÐaÕÞÄU{ï§ûì£O`ÿ)yª¥Ï $ŒÃÈ ¸óÜ™¯º;qU#<Óc#Cƒü<]úï!õ­-V0yr)©¯‰qxFV?’i ¢ãðº8¤Ü½BvDǧdäÀ8Ôì³ +-ê%Ø¿Ä°›LÃø±/‘'Áþ2ì77Ö“óŠ`?!&\‡‹Öaó&z]­0ysñë¿{͈ïYÆÎ)ZľzÉä‰Ô_ +-™SêoÅM—Œ‘Ã}Å©âq¨ÿ³õGêÃ/?ôg¤MUYanf +-M܃Ñ­9ІF.ûåâªÕ +-õÇâû³Ù¢]aa-èÆÓ/(4261-+¯¸¼z7¹¯šZÚ:»ûçûG. ¼¹{_µµÿ”<µ»—MQ'‡‹C}AÇÛ67Ô‚öÔT–€;ã£v„ø{“Úð¥>AИÔ×L)§×þô^ä $RAŽ®ž¾A¡Â8öY„ê{bØÇ]K¬3'Ot¶ñª,…Гâ"ÃpÓ:nåçÀsá| ö§kûJêOá™3xÁ¦]ü&Dn³Ún=,Z‡íî>ºð˜„TLÎ+¤~3°“ïYBýëÒÀ‰úÿæÔ¿Ô¿£ >ùåudÍVçg§%Åbà^H›tÏš.CÚ`â3!qÙ/×”m‘…}¾iA7ï0Ýø‡ìˆŠONÏ)(©¬Ùƒ–xÔö à…%ò†æ.ütIòúî·‰§òÔî^¡ô©HýÀ8 :»;ŽT”—™šèëéâ¸õOïýáíµcQªæ¨?IQûÏR¡;…q0œCá¹ÌÌÒvõ:g‡`‡Œœ‚R6G„|BØçöDì÷tµ·²ª.ÇÔ¢ÃC¼Ýh Y›¯ ò$›2§Ø—VF"›úÓ%ÔŸ¿'çÕÉžõ +-‹ŒKJÇÀwáu…ê¤köÂPÿ*Ïû¡¨ÏþùßeÔ?ÿí¹ÓxжlanFJ<ͨ¿i]³@ýE 0pBá—«,ZmD®ÀþÔ±°O,GOßÀЈ˜ÄÔ̼¢²*û¡&~Ôâ‰Exó·ë7ñÆj_ý‰Ú×àS–>v›Á@#ƒ8G¿<,"ÔìïåæL¨¿nµ­%²¨?wŽáƒ¨¯ x +-ÓÀÝù¬û³ŒæQyš[¯äãàá¨ÃqÈ‚q¨Þ½÷“ûgÎ}Kt•ÙóîÃbÿŸJì÷±Üöñ‚Øc#Cƒp×n¡Ø·4]¶”¯ZµÐµ“¹¤õÅûJLœ° _e·þÝàš  NÀú)¯®…㪮ANýþúðÔv¬H}zZ=uB¤~uyq~VZ"ÛÕ‰ÐÆNJv\Ñ5Ë—'®÷È'Éþ¹*öÕtãæåË6;¿¤b'Éÿy'ùç„7ÂUËö-ù鵯ù7ªôÉ0ˆÓÝC tqh ǘ³±þ i‚ @§.ÀǃÖÏÛkWruÎ3šEúGBýÉZ£¾‚äã%„ô\€ô4µ´Y½Ž¶‡äôì‚’ +- ö{°†.à4<6ö™>ɺ•awuYQn&àsGˆ¿·›³=`/,sbOã×`ײ’¤. ];‘«õW'æM¨ÿþDgPhdlÆ]YCÍÙBÊçëïú(9¯‰i à?õo°°éeEÚF¶cK s2’iÚî¦ÍsÓ4yÐŽ +-]úÏöIìrÝÐÜ=|t°mS2r éÿ¼¹µ½«çÔYLxïÚ;"öp$éë»ã&Þ¨'›Ù0Üã‡/1Ðà>@Î/üýúþêê>ãNm{Žý¡fk« ¢¨i´Õý²‡ˆÄ­‰‘½—ld£Œ¯€ {ºW´66M"d(š“ž´."¢¦ÖŒ&?EÍ9}ÆçÞïD1’ÃåîŸðÜÏó~¿žc‡ö‚ŠòsÁœñ[Ãý¼0}–¹/rFtJû€ñ3¤§Nå°Ó`8„´×a¬ÛSeç¸cÈ“×!𹫴²v/c¿I è'aÿáã°ßu¶¥±äÀžêòâ|R\TX ¯çÆu˜C0wOs3ƒ K¦§BHoàšøáã +-Ði èÄq;¹.^ +-%ëáí“’‘Ó®Û'¨ßÆ‹â¤èÑöSQÚS'ßÆW^Z”Ÿ“%†½…¨O´™/ÓÆõ¥0êë`_¯lŸ{a¼˜»À>ê†n,/¿àð­ñP·¹ùEeU|ÔB߶´wu3o¸paö_öåØ¿¯‰ýQì+ñÓÙÎ\A iÈ@=´$ÎõÕå» óA‘!>žHý%n.Ž¶*¢¾¥”>Š¦¾Vê1À¾ˆ¡É€}Äç«ómì]uÖ!ôY\^]¿Ÿ°ÏÒÂþ'Ãþƒ°… WVGŽû¶¶¬Œä„èˆ`/"G;·íÔ)œC8wƒ²þ©ëRÿ×úÔÇ’ÓÆÓjùjêØ°¨¸$È6\VHýÆ–³]\±CI}¾«º;ÛÏ4ÂA{¶†_9ÏÚ{3І+h3›†m:iâŽUâ+ öǤŸ€HìÛêB>j±pš[;ˆ7—¯]‡‡NÃÇÊý¦>wî}=ìƾ’>ã¡/¸‰ÛÐãzÏ4ÐùÎ6\¼|÷bôìÌÉJEù‚–¹»:Ù rÊᣠå¯ÃXÊ¡qC¼¦æ–³@AV*[GyB#cS2Ÿ%€ýƒARöo>5ö¹riøи݈}Ž¢úê²âü\}lTh ç†µ„}{ëù¯rÝš2öÅàÇ* ûÆn+œ6žV¢c‰œ˜=‹—®|c½‡—pDtBrF¶gàÄäÑjX¦þWCA}|æõé ­,-¢WŽ£öeÚPÃ@¥¾òŽZ¨ÛqÆtãºÑoÚâ„…›š%ŽÚƒGO¼óîÄ›?¹Ä]øæýÑØWú§ú´ Ò2|û5ió ý^ä&‚§é´X‡ª²â‚ÜíéÉñŒ Š7[ç,K ‘=F¨?FQû ‹}£ë`6UðÓדh“—_PøÖ¸mäÏ2ÀþaD„ýKW?íZìSå"öiø{k+J +-Õ;pöáÁ~^X¸te-ÐÂþK€ýgõ°?F Ø7 þØ߈a‹Š%q⬉úk7xú†FÅBòäæã¨Ð]…Ôï– +-Vhs0“~RêÃA['& gPhãlo³À€6Ïhh£ÀW>àQ«…}I7¯©l\Ühö›½ýC"¢ã“ÓéWÕaåžzxÓýun/ŽŸJçÿ½¸µFc_ÁŸAè‹] kbêh@›l ÷ÿvס¦bw¡:;#%16Ô_³réâ…NvÖLýiSÍFõa_Ä>`_$Ñ öçXŽ¢Í>!‘1 )Ð +-Fö¯=-öµ +-Ø¿؇Îatx}UYQ>‡à»ŠÎ,k(®VØ°Óg¾<GMwy38ƒg‡º'M¹Ôï mHýÆëUž³!õû™úðÌ϶6 ê×V–ÂA›Iƒ†«Š¨ý +-Ô×¥T°ò]¥´W>ìktcç„wÖ¾o`hd,µêÂÝ5{ sOâ¥ÕÚqúåk0ÿÏoÑK‡€µË±ŸÖcî¬ýħ³ 9¸ ‚š´ @ þ¾ëtø^<ßÙ†±óΉ£÷Â:à囶-nkx#èõEÎ6›Sx^ЀS™Ô7yÄ: ‚x̧̀Γֲ((lk\R ´J¾&Œû·žû?`_6èçŸõ2ö¡t1püع@Ðmñ0}¨\#À¾Ô¸Òì¥Â•G?ܓכµN‘b¨?ð:ìCìë­aÂ("&!9ƒZó3bÿ&b_Ž#8µÞ>¼¿® +-K73%ÆïïMi´ØÕÉŽ:Ó*—†ÿüsÏìëÏ~øg-Z÷¬’¹ ƒFê¯Y·q‹/Ôkü¶ôíyˆMœ3P¿ ¬)·+Rÿ¿(Í' þ}#ÔÜÐE+SlS²kg6Žo*Ï kW/§vUm,µió[…ÓÆdPغ±RÙ9.äñ{úð;Oß‘W@¼¡[ :Öî?þyéjOïþ›ü 8ß áhUïhì+è{\èß»û%,J2·¡£µ¹B ´§¦¢¤P —oTX `sý+—º»:ÛÛ‚fNŸ +-û0qÄ샑u`"öIA°A%ìCE!öÉ u?ö¹xñô ö)Nÿn-ø廡pjáü¡tW/§KKÔÜŒÓH«ru±?¼£6ùªõŠ±ƒGbÓÛR'1%3ggQ©<æ3í˜9—¥rBêŸ×¦>Ø&w»tÐÒ+_ÌÔÿÓ+ZÔ§vU8mL«›ßá¥5uúL,Ýù6öÎpjñ; ‹Â[+›x³çÀ‘ãðš¡wÁ7ð è¥ñŸ/ïÞ}Åú¡¯µ +-ßá.Ü»{‡B¿ïúµ+ÿúäã‹ç;Ûp s‚J‹òs²Òèòõ÷ÞŒzÝÍÅÑVe5wÎ+³,-8vFÊ>¬ƒ¡‚¤u`ì/ƒ8ÚŒqØ'„îaì7ö»û}O}™¡wïà¹Õw]RcŽ­ÊRPhFJBtD°¿—åZˆP(]MéL؇o@ý±Òœ¥v!¥ÞT`M ¸miÛó +-v—CæðIÕzöÜìÖîÖ¨o,õEýÓê«qÈ1‘pÐò+_Ô_@ÔŸŽÔŸ8a¤ÐÆäاÒåù[€næ̵RÙ:º¸‰£Ö?8Ž­´¬Üü¢ÒÊZºjßýàÃ3mèzéûðÔñ/ˆ·Îå;û +-ûŒ„>­wDËÎü¨»³½ ‰Û°¯® +- ”·##™×¨¹f„Ž“µ°¦HÄæˆØ½u4$aß‚±¯ì»-Y±fÝFFPR*b¿tè°¯íPÀ>Uï^)‘ZûxmU—C³Ò’b£B}<9œY¡³,§™›Bë¾(°/ÿ—ÃŽý_褾†úÏ>¯)×?Ιû„ŸT^þÁЭ)Ùê]¥•uû#êCâ0õ¡Zoÿ›ªUŠ›APÿqê_•›•¨¿©Ÿ3ê‡ùñAK¯ÜjÙl²†6øÈå“jøÛÕè÷ìCëŠ jךŽ-|çž>!‘1Ä›‚â²êúý‡ŽýåÔ{§›ZðÞ‚—~¥®ÛøÔQ8X¾£±¯ÐOG?åЗĻêåeèî:ÛÚ܀΄ĩ©()Tgg¦BäÐ:¼õæªeî‹œl$Qè¼4^g”K}“G(Hû²B]ÝûÞHñÉézØoZìÿ ƒ}Iˆý‹ç;Úšd‡ª¡xã£Ãƒý¼ ‘V,q[èˆ ý2`ßlòèÈ­«)Ýá¿Þ˜9u˜ú/Nøý$SÑ­ó­iÈ MOŸÀP¨V„&&Î#ÇÿJÕ¹ 8ãžÞ¤LjÖ!¦>\´ôÌ‘ú!â åWþçÙtP™ÒAÅÕª¹¨”J£ÏœbŸt€{—ŽZ~ç^~AÄ›LhÞxèð zš[á¬ÅîàÜè¿u›N.©}ùOpÿ>M}…|:ú‘C_¬Ò‘IqCËÐÁ:q¶¡²´ˆ „‰ãÏë°ÄÍÅÑNEš2²Ê¥þÀ +-B…¾ ­ƒå,X+`¨ cßÓ—)53g'ba¿aè°ÿŒ})“º»Ú[D«ÊŠòs²Rc#C1’°x]e‡Zȉ$j× u‡wÌÒ”%jò'›QµBäØ:ÐŒ×oÚâNͪ.,©¨ÝKÌä#õ?íû ‘©S¬ƒ¢þPÿ"Qÿ}˜ðaœ0Q?)lã+Q_zåHýÿ³_/^9çyÀgÖ±kÏq[»kgf-I0f™\EÆmilŒ(%M"éé¦(‰JÒ=JB‘äRIÑF‰VfvÖÌìÅٱ׳ïÏ÷ûûýžßÓó<•Ë™çyÎéû'|>ßÏûóút ÍOtœúj¾¹ªn MÄ£=X„ÍëÞ  A´z÷$¦¤eÁ7E%e¸¸jÙòe} í‹F°¿þwá³ËzÑû:ð:ýg}„ Í¥Íë†êÊ gOC™Ù阆¸0Óßãâh¿ìŒƒ•¥ùä ã?cBbóðsH³_=›‡ŽØ ÃcŽ}sK+ûNl8ö“a öi^û¬b(5Sj«ö±{îß»;&24ÈÏ›2 Mö­QÖ1’ä{WûÚ«²J‘™4©ÆÆÓfEâ˜[%vpvóØè€Å»'é@FN^!âF:§ZïÁ˜"õÙ^}!¦þ«RÿrÍÅò³§…ókŠ¨ïÊöª@}ñ—«£Nr•o®N78jGIÿ|î‚ÅK—ÛÓÁµÑÇ?x{dL\B|CË?½²ºŽ€C౿þäYOìëèëú +-_0Ù(PÖ¤HܳkGXH %ê$j‰¢ £¤L¢(E’V Bý>? ÉJLΤÀ1› +-êÏ£ +-¯^ãîéí½ºÿ !Ô/¯ ,Rÿ‰òZ}]êŸ*:šÇ)úë@}Z«2êj¤Î~òŽß\Y7´yYøQK×ÌÙó8oÖº{²«6ŠN.ø†ÎZ4âb €Ót³ùNk[û´ ˜ˆ#Äþ 9=±¯Ocès_"i¾BŸÍµ†z“ݽù‡²ÒR(m·ùmÞ°ž dg eŠãf +-CÎÐOO¨¯NA}húIåØ;N ûk9ö#bâ^û*©¯û¬ï·1ì7Ô×TÁ¢ÅÇŽÊ<˜¼7.:BH%G{;[¢¨åÔÉ(”ŒÅPb•zÐK«Ø[)õÔ(T˜˜‰¼™4ÅbÆ,(vvõðòñ ‹ÚŸcRØœ9_IõmºÕrW¤>ê‹ y9êÿ£êSyÔß̨ÏlcÃê«¿Ô׌}®¡ 쟛²6€7¶v+œÙU´-7WbJÖ/Ž®3ç+ªjë®5ݼ á°ØÿšÇ>}vE;zb_žºÐgƒÀŽÞ¿<¥ Á(<€îÞ¦Y¸R{©òB†¡àpvú¤„¸˜ˆP¾?ssq´_¾tñ‚¹6V| L£á;¤T©O+ÔwäÔ·æ—Q¸ +-õUhóƒ×·{OU7}„>ðí ìgë—ubƬ9ó‡îàìÊ|³-|Ç®ø}ûœüBúê8¼ œ&üõVZÂâ±ÿLˆýïÅØR¿'öµô”§@5ô‰?,eÚÛØÕ ]ÖVUœ?SRDJKIÜìïãåáæ‚iXºxd 6"‚ÈÔuêkTû¿áâ¹4‹au׌ý–íû²hz!bÿéæч‚G¯^ÆáUVRT˜Ÿ“Á’)lk€ÏF7gptÁ\+‹)“LLX¿ +-ö•c_k]Ç6ÂR«‹¬?ÁlêtkDÍ'ËV®^˳{ßþ´¬Cà%_©Dý?RÊüùk¥Ú¾õëÁ›Î©o® þ¯ß©ÏŠ«'´éøÍåºaë—wÂhä¨ЊÉS-gÚ|Œ¾Ì¾ñØèã»'é@zÖ¡#ÇŠJÎœ¯¨ª­o ÓëNk[;kÈ7{b_ÇžúЧ„a#†þ—ï·Á?lj/U^(;] ]fg¤&ܹ¯YͦaÞlëéÌ@cG¤q`YbŠÒ¿yЄý¡@Ð(ÓD +-&Ž}‡®±OɤÀþ‹—ľ¤8½®ÿá +-–0°Ï£ ݈ »‹{ÔvѼÙ|S+ ‡É°/5¢—Ö°¯‰ú)Š‹KjÒ+õ÷Ÿ®rvõðò aµ=ž“WXTRÆ6*§~;¨ÿHNýNJûêÔÿL•úïõñË)ûåÂJÕùO®ûÂ? ýsƒÆ&£ÇâªÂ®Ú…KÐ øÆsÓ–€íØÁ{“S3²/>]v¡òR-»½°†±ÿ”bÿ¹Ð”žØ×öëú,_„Ð'ýÉt ` +-Q3h GºyÐÕЀ}L"Gºýk ûí¯„}±+Ïq~I"¥Ž45^­«²);=%íØ‚Ãk½«Óªå¸»æÎ’¢‰0Zñ‹AŠdê­„}m”W±SÅKŠ¨?µÆkË|É6ª½ãšuž›|ƒ¶ED³Ò—Å¥gËaK¾P?¿Ï©Xv]Y5Ô ûP‰úâ>•QßI ¾QÜX‘úTZêëø=KOþÍ¥ýËZñŸÃÆÝ5Ît²9V0/ò³ëú Þ¾œø}ûfæäÅíE½Ä¡ÏŽ–`säð¦(vqOìkïi +-}†Ì…þ#ú­-eãÕË…s¥§Næçf¥¥$î‰.ý6{y¸¹3˜â%‚f¤‘¡Bÿáò•¤wóÐöMìÏ”a_iØïR¤²tR!)]_„}N§‹ÉÍLMNˆ‹ßÆDêâˆ,d“é8` ήý•<ª¥F(Q¿÷%`²¤!_Ri?šh6m†´P×{möÞµ3^ªìùÊ꺫M%ö)£þwݺ¢4×UF}¬Ó²’¢nQˆ@ýþzG}ͺAìÿŒî.78¼ÆO0ö¡v,³wtqóðÚìG[8_=-+7¿ðÄ©Òsåk._¥ÏÞÒzÅþ#ñ¶í‰}xêBÿŸŠÐ§9 ý|ñ¡§“@¡_qþLI”YHˆ‹!ùlÄ0¬^¹š7{æôif˜†±£™Äq|)SæAã8(ô²ØoU„“ûÿêö“>ã&¥¦ét©‚°_p8;-…“Ôoó÷µè '´cÂx^ÆlÿJÌ&±½´„ý·•R_ܨBм7dØp±²–V6/\"ìÓ-[ãc’R3ró©°åU5õ ×°N[¥uÚMê+•õ9'ŽDýæõwAýÑTXõûêõßRÑ m`ÙQËxc0ÂØäÿì—‡WÖçÇÓ¦Æ$MSI{R+CEˆ[AQDAW4*{#[@*ÈFö½™²e‰ ˆ +-"Ô(¢± ÖZ›ÆôœäœÞû<¿ß»x_ÄØ‚oÏŸpïs?ßÏÖ±bõÚõÕ·nÓ3ܽ÷€‰… Äp@pxT\Rj&´¯ÒŠêºÆfÀ~Ïõ>XÊ—÷FûÐmYìÿ@3ý){" ÿ‚ }¸°Ÿ8„Á>,½í-à?•Š s³Ò’ã£#BO?êîâ`k Ç°gÇvM µ k׬\˜‘“‘–œÇ9^ —{&ûï½O$ˆ_öWñɾý„dÿ+û„N–}ÜË“Ç£XÀOý°”Ž¶Kõà¤EùYiÄIOøuw¶·63bèû J*#M2øãf½ ²Ï;Z6Pi"y*5;XuMýŸd0N½ý‚#bR2r ‹Ëª`®—;0 ú÷F>B¼4…±¾ø…ªÏ†i£úEyÌXUŸÊ Wõ?SÕb7ïðÊ>ÕúщߨihêÀOßwÇÁžz`HDt|rZfn!$ñź¦–vˆbØ +-dñ0¬åk‚ýgÓØ¿÷>:å(…>t^àK7–ÞúšÊ²bh½é @‘¡§Oúópu´³23ÂcÐÕRQ·T”_(‹$pâ¤úoqÑ$xce-•}á²ß&Töyñ$JöâX)Ý ,†á¬¥¯·»³½¥±–•ÒèˆàS~^®O;¶C÷Â…€“Â>0„ÿ@eŸÝÆo¦JöùTÏ`9q*¯¸t;×ÝûšYÙ;1i—”–•WTZqÇz•Œõî0‘Ê'蔯¤ú?ŽUýÁ[7{‰ê׊P}]ªú+ÕŸ'Öª/LöYìÏ¢z3WB +->º¼"Ä°’ +-”/-]ÈáýFfVvŽ®Ç|OžŒI8›ž•w®¸ >{d1®e$‡Áþ.ö_LcÊÞD¡NygèvÿÍ^„þ%¸„ò’¢ü쌔ÄØ3aA@O7'{ksã{wèioÝL¯AF +-ÝòŸÌáÈ¥ z³ïaì9¼‹ç@%h|Ù÷á“ý:*û ?wîÝøʲÛaõO>@¡ìwu@_¬((NMŠ …úuä0á¬DWKCmýZØv/Xȧt¬“Îà“ý)˜,O‹¢s%”aÓCǺßØÂÆÁÅÃË— Óœ‚ó¨úÍl…b¦ +-Yúísfª¢³t¬êóDéTû6Õ—wÕg—1¦Ôþöƒ©ÞàG—’Y°hñgKW¬V^?][Ǿº“NPüõ”ôì|øìU5 —Z/Ã^ûC öG‰æLcŠŸôâ…þ÷ ôá €-÷ánƒýôtu´57ÖV——ÿ¤&ÅE…ø`œáLÀ€ ñÔ6¬] +-„Œ‘–ä:÷ÄJ‚±ÿz²õ¿#ûß>{J uÿÞÔÒî+íÍ 5•Îd§'ÇG…AÿB@™±g‡±R\ È>Ã'®”2xš‚mWý™±Æ(,AĨ©kêèÃTM-íœÜŽxû†Db–æ‘,mjíèêá*ªþs}v¨Q}&IG¿FÅaT¿ª~aNFŠ êêqU!Wõg‰«êó|sÁRKô†~tâ7ÌOW×ܶÝú—‰…Í!çð•€àð¨¸Ä”Œœ‚¢ÒòêÚ†f¨¶Çý·‡ |5ý7âñÀÏ‚ÐG°Àümô +-ý¿ôÁ~ ó6‚þ]r3S“â£#BOøuwq°µ45Àèëhià1¬Z¾DQ~¡,^ã@¬Z²ç 64öfÎ}Ê'”}U®ìrvçÊ~#û ?×yd+ïsÙM}~DA$c ƒÝŒ ³^ÚÒTW]^R˜›™’‰„òts´µ49°w§¾h©Š2ìDa (j¥œ…¼=²ÏG}2¨–L…’•“W\ºrͺ ›¶hëîf†zÌçdPXT|2H%F)ÀåÊU¢úwï?˜øLÇ)Q})Ÿê×£êç£êG…a’z¸8PÕ'3ý?Rý·„•ZŽÞÐö5wžø¼"üt¥uª›4´tôñ«›ZÚ:¸¸=~"0$":. šmÁùÒ +-øíˆýžë7oA #öÿŠí–bÿûiìOÑ}¼æXèÀüô]¿öÓ‡Py¡¸Jor|td(¶^WG;+3¼]í-›0x D$ð>™ƒô;¸öÄJ‚Æ‘ýÙ\Ù'€âʾ)¿ìçÙoàÈþÝáŒì3^ú‚ÇKÇ‘ýóÈ>ö0VLa5m—XD%Ç ; a|ØÙÞÚ̼T¢úC( *ûœæZé䮃+3UÂT}ÎP@ƒÂ(ݨQºóóý&8So¿€ˆ˜„”ŒÜÂâ2š¤=¤C úùúÓ㌔ÍQîD¿c&ú&Ê©ODõsùUßL”êÏgÕ´æŸS½ÁúÅúÍÂÅŠK¡€©lܼE[×Öblfeçèêq̇`?>9- 6s¡òb]SKû•«°›[ƒ ö¿ì?ý åiìOÉãÿÿc¡}—¨ÏWG†,}7€,h?5•eÅçò²ÓÏ&Ä ô}½<Ýœì­ÍA*wêmÛ +-´v ƒÂ"T ¦øÎþ=‰¯½Tö•à„È~+ûM,¢^Cö¡‹±f +-ŒbÍ´»³½…2*'ãlBtDð)?/W*¦;¶oÛºYUEi"Jv¾ä<ê¥4ˆ9Z:é áSýÜ(ý©3EÕ_±šMÒ}ͬìƒSÂHã’Ò²òŠJ+.Ösƒ¹2úø Lô»WS}øòt œöt»ÿFOWG+“£Ù£ã«¾ÄÕ¿_.DöÙN£XZFn‘ÂgË@pÖ«Aë‚á›[Û;¹yzùž<“p6=+ï\qYeM=Áþ5û#9ØÿnûSó&}ÄÊ0¸Ï@ÿkÝ—[/5ÔT•—À!d¤$Æž :åç}ä°ó!   ‹¦†Ú†uJ«–/Q—C¾Ìý”^ë•cÏAîA”ì/ì —};Fö#xd¿¹í +-¿ì?ee<3"û¸ ©É©k)¨a%çò²R“b#Cý35=¸w—.ìµDaÑ) FLQï½KõöäË>õÙ™r’TRZTÙJ¥uªL›Û8¸xxùrëSYUmcs{gw/ÉÑš£*/iOBæÉQý{Tõ91 +-ªŸÂt\Õp›_Ozz÷«1ØŸÉÓja+´ÖÊÉÁY_]³{ßA ›C·xû +- +-;›˜’ž®¤¬ª¦þRëåNøï}ƒðá ös°ÿ¯iìOö{5èô{)ôk«ËK‹ +-r2R“â¢Âƒüuwq°µ45úb–Æ&Ub@äˆÑâ‹ZÉz%ï9ˆÅ=ˆ}Qà@ÙWæȾ1¿ìg Èþ—üš€ìsÝ)õ(EeŸ¥Ô•öæ†šÊ ç ²Ó“ã£ÂQMÝ]Y›ÃfH­Y‰f*˘)nåa²?™CeÃŽ” R´J©ùd¢«•×oT×ÔÑßIsÔ툷`Hdl"§=µvtõÆèDTÿgѪϦ(Wõ™yÕ7­úØhßgsTìT_ðŸ3QL[-60Zkç/X¸;˜²Šê& -Ø [SK[÷£Çý‚ãâ’R2rò‹JË«jûݽ7úï ö!öÿNLg|ìOsÿðDCÿ +-ýg|пÝTéêhkn¬«®(=_›™šxÂ瘇«#øœ‚®ö–Íx h@à”Ò’þQ r |$¶ç Rö¥9²¿‰GöÝ<½ý@öÎfðÊþÍ[ƒB(õrÙ§˜"ØÇ`æ`jh ïzO×å–¦ºêò’ÂÜLpÓˆ?oOWG[K“ ¥T”W-'j*IÕtö,’Ť€1K™Ìð©þŒw8VIU_BZFººE[Ïp÷>#3k{ŒÑ“§Ã¢â’ÓþÃ~y?E}§q<Îçw1¶Ë%9 M[$DÞ”& Å¥—¥÷ºTéK¯‚ôŽ`A@z/FÅPÑÄ9£Á‹“›Üåîfîù|¾…ÝÖ5gp–áó'<Ÿçy½_ïs•ô('»oïžÛA)1\À)]þHá…ç„äøÊþŸ’ý3.$¥R³r‹ì·v€›ŒÌÊ>:Ù_S|85ýhò>ÈþøèP)§ð=Y©I¬ÈЦ)£G”åH7…ÆC©•‹/û+¸¨OâÑeý£b’À™ý +-Jxž¦æÖv W/¿ ”¢Ù%ÕõÍí—¯ÒÝ ‚Bô%Ê›Bô¿ü2t«þè Lª¨>Q¢Ã‚|½\´ê+óªþº9ª/\…½s°¿ŠNcô1ö%¶ÁªïÃ9¨¬ª®¥kŠÍÖÙÝÛ/(,ŠØgç•VT×5µÂõô ŽŒÝ¸ykbûïõqî>è?èsoâ6†>¸Ï厶æúšóeÅùÙ)‰qÑáÁþL(½'éiiYä÷ËHïÙ%%)!&BõÞ5­Fp¡HˆÏŸì”Ú'+Oɾ%-û €)$ûõÍÐy{úI9|4äôÈ))û°þÿ&95õiPý  ‚oz5ƒúÔ±),û´V•—äg§'Ç#Nyºž±;enŸ£®BÉ©*a$¦¸Ütñ©O”¤ žçºõ)ú¥25N'w¦HdlbjfnaÙùÚÆÖŽ+Ý}ƒ£ã_Ýš¸Ó|úÝßž¿àPýýJÕ'†9ëÍ©zmNfJbldH¨¾£­Õ¬êËàN»„TŸWoÈE'âx ‘Ç7‹ˆ¡^ †³_^Qùˆ†–1 k;p¦px+1Ö,§º¾©­ƒÀþuûS¦—±ÿ~Þ[BÿþÄí¯ÿz}t¨ÿZ¸OsC ÈO~Nfj@?$ÀÇÓ•aocifb¤¯}NA Ô^q }âVÏ^ƒ°žƒÀ²ÿ%Ⱦ*–}s$ûž>´ìWbNuõŽðØ)’}býßFöÑ?a=&õtd°· d¿b*!6"ØßÛÍÉÞŠ²ÓC`§ÒPÃhNáFw0ü/‹÷-\ª¿ò÷´R®#Ð"*¾Mj×ç¢J‡Õ4u M̬ˆi†EÅ%§±ó‹Ë«êš.\ºÚÓ?2ÐÛ…U4735‘…TßÙž¥ÊÒT}ê_8±¿ŠÆ>)8›¶@$o߉v]îà!5Mø3+['7OŸ€ˆ˜øäÔÌœ‚âs•5 Ím¯ ì‚èÜž¸°ÿTpì/sÿ=>Ðÿèôvô[j«ÊK +-s³Ò’b#C}½ÜœOŸ27=f «©ŽüGvØ$ ¸l@ä1P× ô4Ÿìügl@Û8eßØÔü”¥§IiYyEçÙïÙG¤ÙÊ%ûÿäã§4«hA}M ê㇪®!TÕWW”dgœ òÃ~jnj¬§¥®¢¤€I%)!¶e¥§\ ZÄád —êƒO~Š‡)…lRNQEèñ“–¶ÎÌ€ÐHTœˆY¶]ììéÅ :õˆP}`Ék’ú ÷¦ùk(¬üä} £t€–—äg§“£tcØ[½éÈRU}ÞE'™üœµë¡ˆaìKl“‚]ÇØWU×Ô58Û~ÚÑÉÍË704°Ÿ–•[PR^YÛÐrÄþ8`ÿ® Ø_ÖýwùxÌqú?sAÿûYèßùêî0@¿óÒ…–F€~ia.;ýlBlTXŸ·»³#tÞÇ õ´ ô*‚ÿHïÙ%XÁ6‰ hõ¬ ±ñ—}l@²¯¦©kx|VöcI?%dÿZÿðØB¨â/ûܬzÍÍ*ø§Á¾î+­µ•eEHPc#Cü™îN6–'ŽèTøò‹=;·oÙŒýtí‚TD ûÝbÊ>—êSÔ'"ô“Ï6Vð,÷Ë+©@‚™ uõô +-‹ŽONÏÎ/)'G90 yçÞ7SŸ +-$ùé ÊÕš`’„êóä'¨~G+Rý¢Ü¬Ô$VdhªM§­ÌLŒô4‰•F£#G¹DTÿƒ9‹Î±é8“Ñ÷l]—ÚµGZf¿¼¢²ª†lû ëÓŽÎîÞ~€ýØ„³éY¹…%åUµ€ýÎîÞ…±ÿ}’ûËØ·O`èÃLÃÐ# ßÞÚXWUQZ”ÇNOIdôý™.gì¬-O7Òý9¬¤pùÏID•ŸÁ-lX·–†þª9Юsà/ûèD)ÙÿÑÐÖ'dP—œÆÎ+¦d¿opËþäÃi,û?ª`õýógß>y<…a56Üíê¥ ÍõUåÅùìôä¸è°@_O—3ˆU†ºšj‡åe÷!AÅ¡¼U+¹dñ¦ID(ž%G‚ŠˆmE£”!Gyì„…½“›·HDlbJfNaÙù²6ñLRüœ7>_B|~ ¢ó©þ¨>9HÜšbƒý¼Ýœìm,¨ü”“åQý5KCõ©¯áÄþ*û°êð?¸Øn•ÜÊØ¥ÃG4´õŒ@r¬¡Ûzxû…E±ûì¼ÂÒ +-„ýöKûÃðS¼ØŸYÆþoÿ8ù!ô'1ôoôûàÚ[›êª+ÊŠò²3Rã¢Ãƒú® {K3c}£jô÷îÞ*)ºe¾+¤ ÿ5 û ¨”ìÛ:8»3iVì7´´_F†:† •–ý™YXýò²ÿ#’}¤¨ÓðW·¾º>2ŠÚÞÒPSQZ“‘’`Å°·¶05Ö×ÖP=„ u÷èbðA˜UÊœ‚ºhÃ9KZõ?™ª*L‘•#k“™•­£‹‡O`hT\ÎϪº¦¶‹=ýCÜ­i憈@ªçk?«úhŽã0Gº4åe¥%±¢B}P|žBª¯Å¡údkBù¹zi¨>¯ß›NýÏÚõ>Æ».*¾u;,;}µ£ 9&f–6ö ¦px+1%ƒWدkl%±?Æû˜ûó`™ûÿ×ã…>fþÐÐp÷Î-ýA€>ÔݦúêóeÅùÙ©IýOW†ƒ­•™©±Ž¦šÊ!П}{áÿô "¨Bƒ_ƒ@²/µù-ûÖv W/ß °èøätv>«î¾¡¹²ÿFEå–}ì¨?’Žú„tÔÑ¡¾žÎ‹mMµ•ç€V©I¬ÈЦ‡³ÃÿØ/離Î4Ž»“1Nv'‰eÝdg‘"`I"* +-((½÷^.péUzïK/ +-Ê¥ (¢ ¨ØDMtMD°­1’ÍjÌî™Ùç}Ï9—sn!Ä]Ùáýžçy?ßÏ—}ŒTÔò4X­Z‰ õOTû`îdŸ©ú2' L!óSYU]S×ДdxtBj&§¨¬’KÄ祫×n Ý‚9ŽŒÏ~Ž¢UŸ#¯35Õs©ôŒÀªï@ª¾ +-¡ú2 Põ—ø ±XÈ>ÆþçûRÐlaG +-Š»ÕÔ÷ëè›YA6»{ù…öS2ròŠÊ©©o:ÖFÇþ=ØËÀþ¢îÿÐC@ÿ• ôoÐïh;ÞÜP[UQ^œŸ“™šÐö÷f³œì¬Ì t45ÐG@ú?AB\ }Ä”O?!TÙ2èÏ¿ß0 Ù—æ“}PTŸÀÈؤ´ìü⃇«š§i²?2:>ùäù ÊQi²/ÄQy¼”ÔÉñÑ‘oï}}k¨ÿ‰«:nEY!'3%!:,ÈÏÓÍÉUú˜$óf¹ ­VR]Œ«¹X5Jr’8?iƒ—–ÝôÅVˆÏ=ŸÆæÖ.loTš’ÒÑÔ4¶œhïìÂé‰Tÿᣠ¬ú¯fÑ™~åŸ"T¦)Feº9p½‡T}ÏÒ‚œŒäxRõíÕWSÞµpUŸÚû˨S‡6¶j5Vqh¶r°¤íûš:ÆæVvŽ,¶·Phdl"`?¿¨¬¢ª¦cÿüÅ+=‚ØÿžÄþëEì¿ŸÇõôÿ.Ÿý<èË€þI ýÊòâ‚\€~\TX°¿‡«“½µ…‰®@_ :/Òiúè+¬ A}†…¢@LÙÿ˜)û›Aö1­@öíÝ GMÉä–UpëÙ¿ÒÛ70LÃÕKÀÕìd_ÐR!¦yÕÜPsø`q^vZb,!©öÖfFzZ<\Iˆ¯Å²¿‚(cü€KW¯ƒì¼üó +-É>ðjFÙ'vG ˆEÖ£Q¨fw†ûz¯\8×Ñvìhma©qQ¡¾,G à42XȾäz±5ˆúLÙÿ`®dŸA}jŽ@”UˆúЙ¤ˆ1*«©kêšYÙ9»yù‡Ç$¦få•WVד•éú›·¿ùÛwÇ&ðiª/:;¢ó'":Ÿ=žxÑy¢³¯çò…³0ÄF趥…¹)ñQdc²bf'OõW,$Õ_"péÄŠÈ[GKÂÍv½$\;’Ôm÷iéšXXÛ;»zø‡EÅ%¥fæ—WVÕ64oëÀØ¿Þ?8,ûÿ °GqûÿåcpCô_#èOQП ¡gx ß}©‹€~·ò`I'+-)> ïëéæì`cij¤§½Ÿ€þWý ô ÿ!<ò#aП—¿a²/Å“ý}ÚúÆæÖHö¯R39Ee•\ÒRAö±ì>šD²ÿì€%ŒXS¯^¾€v6>6²kèƵ«—@S[›ê¹•eEœÌÔ„èð`?/,SC]MuU¥Û`OÈR× K¥ñj)Cöçddzâ1‚GPPxŠ‰KJËnúB~Ç.rŠ6,¶O@ÊÎœü’CGjcê!5Do~ž1:…''5C¤ú0Ãn<Ãæ†j(LùÙiI±!>l¨¾‰Îþ½*J +-Ä%°ê¯^hªO-ˆû„ìcìN`ƒ,¤3,J°¯­ghjacïìæép °Ÿ–•[PBbÿ¤pì?§cÿg>ì3¹ÿÿfè¼{¿ ýŠ„~/@ÿìé“­-ýÃK 9YéÉý@_Ow[K3#}íýêj»QåûÙ %!.¶ÿ„•úÄWXFƒþø 3Ë>ð +-J¯²*²TS}WßÀШ¸äôœVMcˉöήËš:—©?kÙÇ‹C É>xêƒûwï`Oíêl?ÑÒPsdšXÞlks¬©»wíÀš*!Ž ,š¥ÎɆª¿”6E2;%QvnSPRÙ †èäê韒™[XVÁ­kÂÑÙ}­èÖ׸0MR3üýªÏ!îKwï  ¾„Tÿh]UEY!'3%!: %§3¥ú0Cytì¨01£sÙÂP}¦àÐ cŽïI\Bjƒì¦-_mSPÜ­¦¾_[ÏÈÔÒÆÁÅÍÓ7ð@xt<`ŸSPr°’[Û8ö_2±¹/ û‹Üÿ]O8óñٓЇ’ Ðÿ~FèWcègôc"Bý¼Ü]m­ÌŒõu4 èKädHè“¥—}ô€Í$û«0°Ö‘²¯ ¨Bɾ‹»·ÿð˜ÄÔ¬¼¢òJn=I¬ÞþAD¬£ã O}ËóTѲOP3 ¥5Õ'“ã£XTû{»/ž;}#«´07#9>*4È×ÃÕÑ–ôTEù/7ËÄB{Zþ)MS?˜ÙgPŸÊNrˆàR2· èTÓÐÒ32³Â… Í0-+¯¸üpuC3™œDr?žþè1Ý—DŽðWa¤×¥ÛpõP—:ÛAõ!8KòsÒ“â"C}ú§Z[Žô•æe§§$ÄD„ùy±YŽvVæÆ:š{T”vnß +-(‘‘–DЇðgø $M°Eòмý ¿%ûbÓ²¯FȾöÔШøäŒÜ‚ÒCUµ ûg».÷ôÑ…DõÇYˆªpSÅÌš{8ͬ3§Z›ë«+Ë‹ò²Rbƒý Q5ÔÕTWUÞ¹#kýºµLO&Öû^5Erˆ8:&ËW3”D3”ß¡¸'§…‹íIö%ᱶŽ³®ôö ß¹wŸœ¢ëo€´¶4ÅP}ÈÍ+(77Õq+ËŠ8ÔÝ퉺´©>/8ùUé‚P}jG É>ºuòØ1öÿŠ°/)-#·Ý;,KCSGßØÌÊÖ‘åî埜Ž±˜[ÇÀþMö!¯auûpÿo™Ø_äþ;=‘Ðÿú/)èŽ|п-úEyÙýH€¾7›ådgmnb «E@¾ÁFYiÉõØ~þ‚¡ÿÉÇð>bB¾‘²¿|Zöá Î«²—D– Û;à@DlbZ6Õú¦ÖSgÎ_ê¾Ö?„d˜ÔŸ³ªúË/xy|Ðèë¹|állj–FÊTc#C|Ø.ÖæÆúÚû³ –ÉJKˆÓDõÄžèÔKb¨þRZrâŠá¾#TR}$ƒÓ/(,:!%“SX†ë1ÁC· 7GÆƉܜšEn +-Ä&OõÉؼ9p½çrWg;à¡’‚œŒä¸¨Ð@Ü–,M ¡Ù‚êãÜäMpå´ê¸PTŸyê´[ÇÍ_;ôÚuëû¡Ünß©¤Ø×506·²sd±½ü‚û ÉéÙœÂRaØ¿Kaÿ)Æþ+Œý×4ì/êþ;?Aæ3¡ÿfÐ? A? ìïÍvýûuâÎU¾p¼ž©æéNÓ^ÓÜ™6 Y²g'"²F‘}ß…} YC")„I‹´Ì´PdM{’=•¦Eu§f¹·ç¹Ÿï÷œóûãg»÷y47×ù¾çû}}Þ+scC}]MuUeE9Ô>Bü|<ú‹¢‡0‹z DCŽ»·Àûói¡**!-§´N]KoÓ3+{lÖŽ¨ø¤Ôô¬ÜÃG‰R…Ø¿yûÞÃVˆ}\ªpïßÿ±O©ÕÓÕñ¸åþæÆÚêJœªG eíOMŠÚäçµÕ¡¥¯³AMYAv ³T©¥l`¨Žñ!RêSG8sœ 7/¿ûÍm\=ˆ¹¹'-#;¿¨¤ìÌ9Ø–jꛘøŽ:ÀáRŸ65?~ §æ‹ç½=]í´ó«8]zŒ\–b"B|<\lÌ©±)ÙúßÒ®ú¸HýI ‡83ûsÑ¿"Øçáã“D쫪kêèo66³²utu÷òö£b’IöKc¿‹Å>Ìlâÿáð¡åþ'†ûµ¨_À7Dèèd£ÿŠ@¿‡~ýB@?F?"4ÐÏÛÃÍÉÎÚÜÄÐ@WKƒ@_\DH€‡›k~ПF Ï~ _òc<ög°b1Š}~!Tª +-Êjtô!ömÝ<·†FÆ’hãدªÁ©ÚB¥ê+¸öï1Z#Äþ¿Xl!õ߿퇑Ý­ÚI´j]MÕehÕÅEyÙÒ’wEG„øûx¸8X›oÙ¤§¹^EIŽHUn®¥‹)´ØêOù êOfªO;AÚÜ“”E4´á-mܶù†íŒKLIÏÄcóì…KW¯×6PËR/^–9¿‡&y|ÏzÑñÁ®Ô»ÒUØ•N?r873=%)ŽššVfúp~Šp~Œe‰66§MeÞô1;ÂÏñMfžÏtö Å Íh>!1Ii9EeUu-]}Ccs+;GW/ß@ŠýÌì<ûÕû°¦µutõÀíï{Øǹÿë¼ïþNc"÷ÿ£aþ'ZèãÐA—£ÿÐï{þ”…þAÑß“äçíéædÑ×ÓÒPSQ’—Y#.²Z`…þw ˆúÁ¿„©ãý!c&û?Z<-iy2öÍ­í]ܽýƒÃ£ãw§îÏ:Tpôø)R-ûí=cÿÏ!cˆX¶z:Û[­› 7®SlådîKIŒ ܾÍÍÑÖ„lUiI†ZsfÃÏ¢¡5æfÑOÍMö¶„Y²œ›g• ˆ¸”¬¢ÊzM]#¼,yûáóÛ»ÿ`^á1bjV×5ÞºûàQ[G7žš£Ù•è§‡Õ‡ëÉ«Ò¼*Ýmn¬«®º|±â454b"C¶{º9ÚX˜¢ãSV!v%îåKqêϧ©ÏÁþT|Ù)öç ëŽ~×2`•Àjq̾š†–®fßÉÕÃÛ704<*.!yï ì7û-­ûÏú`jÂ>#÷'ØÍÇúú¿c0P鼃[è¿ÀèwÑÑ¿Æ~|tDFßÙÞÚÂÄÈ@O{‰¾èjÁU¼+1úÀ¼²~¦3Ño3öÉw€Ru!Úy¹ˆØµˆØ7µ´sÚŠ[56qϾŒœü#%egÎýtb¿‰ÁÄêHl R«èRnAì77ÖVW^ºXqªôXÁ¡ƒûSwÇGíöór‡X55Ò×Ù ¦¬ »F±µb9ÞÌæÓZþÕWcûÌÔgM¼,Qç'*!-GLMcsWOŸ€ÐÈ´+±ŽïÚz<4ÛÈ¡ù¦“ñÛoìJƒnJƒÌ̳'-ÈÍJOMŠ +-öóvw±·6C«’ú:%9éÿԟļë,ö§“3³ÿ=f%/fŒ¼’ +-°¯g`hbnmçä†Ùœýz6ûÝû/)öá à–ûŸ&ÜÝlj>6Ÿ‰þÛ~ýgOŸôtu ôïq ŸŸ“ÅFß¡ocaj´ Ð_¿Ї}WXŸwåŠåKÑ3XˆÑGõÃΟ)ãýabÕª+ U…Å$eä×»q3fËÃÇ?$"zŠÕC…ÇJQìWBñ4ß¹ßò¸½‹æ¡ÝbÆ>®'Ým®¦úškW~:w¦¬¸(?;#-yWLDH€‡‹ƒµ9¸¥…Ü’’âçåæZº«±ÊVʘ«?™©þ×èüÈ©ùÝ÷?À®´’OŸÂZU š&–¶hh…íŒKJIÏÊ%W¥ÊëìÓC3óÌÌ÷#ÍÌ¡GfwGŒÌ[Mu5UøðJŠòs2öíI 7%'[KCÖÌħÇJýÙã4õ' LÜ8èoýíˆýÙhJÃ[ Ø\-*A²¯­g`dbamØ÷Ãì'Rì“ìWaöoìwv?é}ö؇€ØÿfŸÌ}’ý‰ÜÍÇ4 úáƳÐÿ…B¿­µå ßÔP[sí*ý4}Ï­ý-›6"ô×*È2ÑGÏ`.Bù¦賟Âÿ†}ô +-Pû@ìKHÉ)ª¬×Ô502µ²sÞêå´cg\bJzfîá#%'ËÏãZm‚Z}Ô×ÔùºÿíûQÆ>¡>– þâ"W»Ú·Ü¿s³¡åj9äêáÜÌô”ÄØa¾ÛÜm-L6oÔÖP]+/#)†juŲ%¸V‘[3h±ú9Ô'§&ûøfͦ†&7 M¼*§gfeïâîíŽfæƒy…Å'NW\¼ÌØ”˜‡÷çP‡Ç˜˜pvðúYg× +-g×Ü€¥ gÉEiïî]Ñá!þÞxd#S^yxóÇqêSw•8¸q¨ëÎf)bŸ_PXTBJØ_¿A[oɾçÐìߨol¾}±ßN°?ñüÅwxeûÀb"÷Gýq†>þàûŽ2‡Dÿå//žúÝúÍú—ú'ý< +-ýH}K„¾…¾˜°?<„>´Ïúø!LgèsÆ>ñ¾åˆý5¸Vµ!ö-l]=}B#b’ÓdSpUV×5â\íèzÂÌÕb`¯öS½úõjc]uÕ勧K‚\©»ã£Âƒý¼Üí¬L P®*B® +- ®‚¶ç* .ø]_5ûÌÔg¯J`È" „‹f¦¨„´œÒ:u-=´)ÁámŒMس/#'ÿHIYùùŸ¯Âȼ #³µ½sô‹ÇÑ¡=é%¹'=zpïVSý ؓΗ—•9œ“¹/%1ngXﶭNv–ÄÙ©(ÊJ‰S‹Òèºã‘ù ¾ì¬ÔÓ¡ùY¿ìOÅÿ‹ÅþÜy ."Ùç#ÙWX»Ž`ßÔÂÆÞ±Äd¿±ÿóŠýû=ö{zŸ>ïƒ'ðú Î}Ä>~´ÜŸ`øoøЇûŽ.®Ð«[ˆ^•ƒ” «¿Œ­þ˜Ç>S}<3Ù›Ò’eˆ€°˜¤Œ‚²ª†Ž¾¡©¥¹(‘gWzêì…K•ÕµŒ‰ù&æH{Ò§A×$<0»:ÐšÔ ³ ÌÅ…yìMÞ‚ÎÆܘ½' ˜˜3ÇmêOb^vûÓìÿýG`Ÿ›‡_HXŒÅþF&ûÑ$û‡û'Ë+.û×ý›û]Ùÿ±Oæþ?éî³ÿç_ÍìÿÖ7úÐÑÇ¡è÷ú=Ýíý»·Ùè—#ô òr2è»úfúªÊŠr€¾þ2ôÐÂ;‡ Gx_s¢?.žÂd†[ôØŸ‡cÞ/ľ8ľ²š†¶¾¡‰…­£›çö@Ü«iÙùEÅeÿf¿Îÿ¹Ê÷ŽßÇcZT³Õ45MÙ&I"%$¥”ÊP!”R¤­JJ*ŠY‹l!Ò¦MÙ×/¾H‘-Ëw±6EÍèVs¸÷ýùœs¾«/æñ·Çã{?á}Îy¾_ïû3s +-JÊ*«kê›[™Ã¦K¸X)»ÚYŒl½´(/ûÉûiÉ ±‘a8XO8r´·µÞ¼‰C—Ê\E¹YR3gL'{•G®UŸ7Ñð8+“<”äáPRU_¬­KnÌv{÷;¹¸¹{] åÞI|£ë~ý›ÐÂ,õÿ¤Rÿ=tÚ—¬¶´/«è´¢¼¬ŒxrQaÁ}<ϸg’•¹‰ñºÕ+t‰…©¨ ;K’;:)>©Ïû±×íÓÑ[›% ìÏöiìm0µ Ù?ÂÇ~bÿ>b?¿ˆVVQUý±ßÜÊ`±;:»{àMö"ö‰Ü§ØÍý¡žÍÿ7'ôásç¢ßÓÝÕÑÕXÿЯ(§ð£äÐ?I o‹ÐßÈA_]Ueîý$úß~3iâDúcÄ}^õŒ}¢WUÔi.Y¶ÒÀp½©ÅV ë€“ËIw/߀ð¨¸Ä"X‹Jé(X›ZDì÷öAæà]´]àõ®ï-.Vfksc]M5k.Ö”¤¸èðÐ_/÷“Çœöï±Ãv­]¥§«­¡.¬@õʾYöùSŸœ¹1gJJËÊÏVš§¶™å6›ÝÇ óräÕ„7ñ™T(p&Q“ûÄ3¹¡ÖåïWYVRƒ®¤T|%ù?{êøуŽ»m·ûRo©–N}yjrœ3i¼X¦¾ûc¸•C|ð˜ý\öUIö ÖqØßG°ï‰Ùàg¿¤Œì×Ö54ûLv{g°¹ÿçþ”ûˆýÑÜêúò„>…þëžîÎ6‹A¡_…ÑÏ%Ñ¿‘3ú–\ô50ú³1úP>Ó¦Bú|GµŽ|?‚xý ±ÿ=û$]ªêÚûk6šo±Þi¿ïó‰Óç¼ýƒ »Pìç–”WV×B±¶ «èØ'^+©þÇñ%k3NÖrZa.ÂëækW1^§Ž9à°Ëf«¥ézCƒ•Ë–h¢b…'-Éo7XÿGêãÑ}GÇ]˜Œp&é¯1Ú¸ Oî°³ëOŸ‹!aÜ}Y\Zñ¬¦®áU+cØW’ÀÜ>sëéä=’òáHºw+%1.*<$Àׯ˽v;¬,Lׯ#‡®$*õ§—­¸¦þ?xÙÿŠ`ù½£ØG_<—ý9À¾:´Ž®ž>ɾµÍ..û~!aÑq ×S0û™9ù…À~%Å~f¿³ß‡ÙïGìžû£îÿgÐÐç¢ÿû{9o~£ÐomF迨®ª(£äf=ôo¥ŠFߘ@_ ¡¯‚PìKHL˜Ä-Vˆ}û )¼Ì·lß¹gßác®gÎù\ ‹ŒMHN»û #+¯ˆF¯z^[ßÔÒÆj®^üÑÊÃW›ÙÚÜXWS]YVRóôQúíÔ¤øèðÐ_/ܬ{ì¶[™›ƒ^º ×|å9¿ÈÉHa½ˆdåÃk¤Þ˜Ðäˆ}‰¯¤™ä•¤¶Psɲ•†ëÍ,·Ùìv8xôø©³Þ~AÄ‘ÄÛËÎ܆³-y¦Æ¿,ÙŒV¼,+ÊŠóñØR`lWB/xy¸¹ iu#éhâmù tÚ–SyRœ˜¦>oìó°/!Ⱦ$°¯@°¯!̾ӱ˜ýÄ~,‡ýì¼ÂâÒr`¿æe}#°Ï`±;:}ÈŸ¾w8÷? Üÿ4šû¢Ÿa…>ýžî®Žv³­…D¿Ð/ÌÏÉ$ÑOÀèúûxy¡¿jÅ2@áÿ-ú¢c2•¬ûÊóhh-]®¿æ× f›9z÷ ¼s šõ>Õ¬5uÍ­L6Šý·Ð8¤úŸ±^"øâó ^i_ïˆÖvV[KS}íóªrZan­—‚üÎ{œ:~ä Ã.Š¯%‹âf••–ÄêC³’záØçSŸw]‘¤ 8wþ‚EZKõô×mÜ´Ùz§ý¾Ãήg<}.†„EÅ%¦Üº÷ðIv~qiÅ3ÜHÛð®œV”—•ñànZrBldXðEŸsg\ïÛ³sûs£µ«Wèj/V§Æ6}ñèFúš“úcÄ2õE±?bÊ?Nû ¥ŽŒ°¯¬¢¦®¡%À¾#fßÝÓ±%:öZfÿñÓ켂bZyEÁ~s+ƒÉnïìBì¹ÿG?bÿ#—ýÜÿÒð~ÁgðÐÿ„Bê}úÝ€>£­åUcC]Íóg•ôRŒ~ÆC@?å: 1úó••HôÆèOæ¢OücÄ}®]üÉú þPø@÷(ÎU!šbßÔÂj‡ÝÞýNÇNº{ú„„sù**¥?{ñ²áU ¢nÛ^ûø¬<öñËEoFU+‹Ñ‚«•^Z”Ÿýäá½´äÄØ(ì×iWçCŽö¶Ö›7møuþr-­ +-²³$Q´b¾šudÞâÍm¼97r[ÊöTUçÜHVÛÑØ\Üܽ.†^‰‰‡e™þ83· ¤¼²N¤æ6æ°O¤†ÖG¤>ï…” »2õúµ˜ˆKxW=è°Ûf›¥gj'Ò·|©?‚ÛòK>|ìùëìÛñ²L°Ÿ|óö½À~.°_VQUý¢¶®¡©¹µ Øïèêî¡ØçæþçÑÜ~D†þŸdèÇÞÏ ý×=]l£Я‰Ð//-.ÌËôÓï¤!ô£#ÂBýD¢¿£¯ˆÑ‡?]»8|&M$Òg>ú_úÓý[ÁØÙ‡_Ý»À—´Œ<|ÿóÕ5´—ê­Z‹£ÕÖÞñó‰Óg½ýƒ.G^M¸qóÄ~n!øõ¼¶¾übƒ_¨Zùý*ö‰lE€½îæìé£ôÛ©IñÑ᡾^î'9íßc·ÝÊÜÄxí*=]m uŽ_èåáwG­küÞFæ­ñ¥þXIRZV~¶ÒÈÈÊ+¢Ñ«`W6qv%øðRŸ<ÞAýôtµ ®Ê[)‰qQá!¾žœ¡Y˜¯[½]Hj*Jü»¾x ¡I¼>vžÏøÞÉ}M±?³ÿ3ɾÒ`ìŸó¾€ØºJ±ÿ$+· ˆVF§Øoic²Ú;:»Qî÷ö½ÍýÁžÁBÿ37ô)ô{º»:ÛÙLFksS _]UQN+.ÈË~ú˜@ÿZltÄe„¾§Ç)‘èÏSR5¤¥8èãð¡Ð+€¾˜ýü±?N0ö¥fÉáØ_¤©ƒý2µÜºc×ÞG\ÜÛªÕk?Ʀ¦¦~ä؉Óç."]ieçìᆋK’-$"„öxBš¬*ç£þ¿ßhJ83‡ eÖ‡dV 2ËÍLKÄG…ø¸;¡éÚ%P•ÇŽ U¹K¢ú+SýEöØ`9":0öׂÎVûÎî^öq± Éé™Ùyû5õM­í]™Ö70426>Á`±¹|H<aÑý—°î¿ZÒý¹§²èCТ?=%òy€þãÑáÁ~¥—ÐÝ _[U^Rø@?%1.¾‹£­è«ÁÐßµ‚>ОO€÷¬Y€cå{}yÙGÕç÷ð°c­ihj²¯­sGßÈÜÊ,0 ›”ž•[X*ÕV û“,ÐÖi ­Ï!½ùå•Tö_+–}aÿD¼õðV‘€Ë†½•Žzkia^VzR,.,ÐÇÃ"˜žîÍ«Ï>qô°úÁ}{1Ú +-¾` L}LjHW~²aã?Û²}çÈBÒ:yæüemôï[;¸zùÁU™‘_\^ R7Hƒ 30àÌž©Ù¼‘AûˆN!ÊöQJ|LD°¿—«£Í}ISÎÍLiU.¶Ç.yî2ì/“`ÿð烰¿L\eØ׃°oaß70$‡OHNƒ°_\VYSßØÒÞÙC$Séö'™l.O OMÏ Ø_Ò}…÷6Ñ‹þK‰èÏÎL‰E>—ÃbLè ôÑ($BWGk“ú™é)‰±Ñ‘¡A~ôÍ•B ý ïô•Éþê9ÚzÒÖ«7nëšZØ:¹y„DâR3rò‹+j`‚Qú·2Ù<•½õ××Ù—ŠëÓÙi‘€ÇfBë£dKŽöótq°67Ò¿££ {«&â­;·"ŸÙi I}9Õ_& PCV•¿ÒøF2 MÌB#ñ‰i™¹%Ò¦{2É₦œM Œðíª/KìÕ?~ž3Ɔúi½„N ú•²¢ôõp¶·’FvRKSãº`Õ—5åŠÅ®úJ°¿¸«U¾™¥½³„ýp>>9-ãa.À~Eu]cK[g7±—Jï}üd’ÉâðøB‘xzI÷ç9UE…>}±PÀã²ôÇÇFô©dROW{kS}MeYqA^vfzrBltDh Ÿ·»‹}Ãw‡þ‡‹úXÙG¶»ë?ݸ ŒÝ»%ƒ½õðVskO¿ ðè¸äô‡yEeUuMm]D2m ŒQ_†0Œ¸Î¥þ¯†ÁØŽaØèP?µ·§£µ±¦¢¤ '35âïíæhcÄõ×3§Ž£ñaòÞúÁBa_.4´*e™mÛ±{ÏÞ}’¦¼vS÷Ç{fVvÈ>ŠKÂFFEÉ`s¥*ª÷$¤ú’ž¤’º;Zj*Šós2àļݜl-L õnß@æÑuµý{AQnƒ‹™´)f ýîmØ_` „ý=s°`ßÀØ̾§o@Hx>>)`?¿¨´¢º¶¡¹­£›ÐK¡õÁØŸ`°8\¾@tvI÷ß;‹þ´X$äó8læä“Çc#ƒýtj/±§³½¥±Ný´ä<."$ÐÏËÝÙÁÖR诓@ÿ# ô?XÌÐÇL^öo•È>xûǾýîûKÂ,íœÜ}C£bq­âÚÑÓKíŸdq€¸NÏþíÙó†ýKÃÞ„ >1.›ñdlx€N&tµ5ÕU¡æèãîlgizOOeØaõƒûöîÙ½cÛç›7!â:a Ný 3¸)×AÔ—E¦©"»¬­ƒ¥«§_pDL|JFv~qyuCK{7‰Ú7crx˜Ä $(OLaMBñ¹,40"XYQÞÃÉqÑáAÈ:2Öÿá–öåógNjž<zr÷Ž­ 10>ÆÌ#¹Èås—Çþ‡Š±¿Iöuö ì;¹yú‡EÅÄ%¥>ÈÊyTXR^UÛÐÔÚÑE ‘i}C#cã &›ËES@÷!ì«®ûÿoÿîEvfJ,ð¹@tx°ŸFé%tw´57ÖUW”åç>ÌHKŽÇãÂC}!èÛXšèßRýÍóCÑS_Nöá` ‚0‰¸T?|ôø©³®\¿}×Àä¾£«—?Ì°ÙÃê›Û»‰ú 0W&›'1×ræªHö_c(†¨ë‹çÏ Ùð8ˆºRHÝíÍõÕåŲ$Ç#³·67Ò¿££}éûï¾=väkµý_JÍUŽa F}lSÊEåÖí»À<:Í#41C [G7ï€H|b*Ô“• '; ½´~°Ž&Á:Š¤ëHy`JóÂŽ£ÎÖÆÚÊ’‚ÜÌ´ÄبP¤&Íîý¨{óØ!8°í[u4·'¨(37GöQì„Áþ†y°¯ cßÚÞÉÕÓÇ?8,2&.1%Á~eM}SK{g‘L¥÷ú?Édqx|¡H °êþß—t_zª‹>} úS"¡€Çe³ãc#C}4 +-‰ÐÕÑÚÜP[…@ÿAjR<>*<$À×ËÍÙÞÆÒ @ÿŽêÐ_ñ¾@ÿ Ù_3 ¼èùËvH6×KÚ:wôÌ­ì=|ƒÂp±IéYy…¥•uMm2 1 1 ®?AêúËüêú†ìÃî:‡b­5%9™© øÈ/7G›û&wo]¿‚ªë ®»¶oE ¶vÍ*bà .ÃäU¹,±O7Èõä‰Óç.^Eב³‡O`.¬¬ +-ÖE$Ó@M2Ø\IM¾u)ØFÏ‘mÄcÃ-IÇ´dFJ|LD°¿—+’×íëW.œ=u\nIjRØ¢Wý9²ÿ_`ÿ®‘©…µ“«‡PhdtlBJzfv^AqYeM]cK[g7±—BC°?Á`±¹|P tÿé’îËÝ;‹þ´X$äó8,&}út*™ÔÓÕÞÚT_[U^Rø(' @?.&*,8ÀÇÓÍÉÞÆÂÌØ@‚þ¥ógUƒþò÷ú¿Ãü2†!æ +-dÿ³-Ûv~ñç½ûÕÔ »¡«ghja넨kBjFN~IEMCKG‰Ú78:>Áäð€ú*QLÆ~B0Æe3žŒ ÐÈ„®¶¦ºªÒ¼¬´¤Ø¨0à®Nv–¦÷ôto\½xîÔ )Ŷ~¾P½L]—-˜ìËSîI À hÁ}¹_íkÍc’š46·vpñô ŽˆÆŽ#Êkä%kÉŸçoIŒêcJrfJÈç²$quJâJOŠÃ…ùz¸Ø[I·ÑI-MCØ–„òZõ>©¾bì¯À`rì_¼a_ßÈô¾•£‹‡·_Ph.6!9-ãan~QiEu]CsÛد§(ï4€ãÞÜxç˜ñ“¹nA¢‰ÆŠ€ T‰-‚HコôÞ{ï½—¥ÃÒaYvY–¥ww)¢—1‰õ’™ËéÌÝï÷¾ûî¾Ë.JŒLnÀýžß»ŸçûôôQ¨tst|rzv~µøór»°ÿóBÿ;úÿ|°z ý¹™©‰±‘á!Ú¹·»ƒÔÒXWSYVR˜›•ž’àëåáêdgma‚ ¯ÐW~ú»9èïÜ&èó.^øØ)€Øþƒ¢G@ì‹KJË*žW¹¢ª¡­ghjeç싈MLËÎ/©¨©oiGÛÆ>Ö®Ož=ç¨ÿ¢Ø+áêsCÔñüécû«+KH¼2±x­(ÉÏNKŠöóÂSŒ“?súÔ‰/}ö©È^»âÛDõ±ñÖ$î8óR󺮡­ohfmïr×'lÉ”ŒÜ²ªÚ&Rgo?12>=·€ÜF€úÀƒ7ŒkÝi=Ó‚§sˆÚßÓÑÊ;Â}®ÖæFè’TV’;#uêÄqd\ûÀ¸ÖÜFÛ õwcÿwc_åòµë7 ûÆfV¶.îÿ ÐȘø¤T”ý*b}Sk[gw_ÿÀàÐ0šû ,öÈý‡ÜܶÑÜÿµ]ÞÔ?úë…þ‹µ¡¿Èº7? CŸÉ S)äž®vRsC-@¿¸ 7+-9!6*,8À×ÓÃÕÑÎÚ ¯{SAÿœÂ{ôùÂcÿîE;piWðá#íª®¥k`laãèFð +-‹NHÉÌ-*«®ƒŒQ c ^ÙK÷7¯±Ö+pìþ:62Dã8VZ˜“‘àíáboef¨§­¡zEW þáCxEC^<"ò†ïúýøR'o^‹¿ [òèq1q)îmdlŽŽ+<&!5+¯¸¼¦¾¹ ]’“3óÜ%¹Óèµ—Ø‘£Ãô>¸#k°âïåálgeŠMKQVZR¤>rýõOè’ü`7߸¶xêïdçØ—‘UPº€°¯¥£Ø·´upv#xû…FDÇ%¥fdç–”Wë[HݽäÙ¹½¸¼Üµr_(ú¯ ý‡ ô—جú“ã ô©ý}=m­MõµÕ¥Eù9™iÉñ1‘aÁþ>žî.ŽvVæ&wôñ蟖@/ý]Û }|ìããž—1Å _]½®¡£o„Ä«w@hd\rzNAi%±±µ£›L¥3Ç€c¬ÅᎽ6ö…A67=1ʤôvµ5×U—åe¦&D‡ù‚zµõª£©võ« Šr2ˆc‡cˆúà%…Æë;ÿ–ä뀲$OaKòæ­;&–vNî^þÁ±IiÙ%•Ä†–vtZS³ó¬¥dG>~óŽÄ§>L}Ί\f/€a0h”ÞNRwXáA¾žnŽ¶Æ·´ÐËèìi ä2âíHlZÜÓhë«¿.û»…±ÿ9ƾ<}#3K{g·»^~!áQq‰)éY¹Åe•5u ͤö®2…Jg0GÇ'§gñ¹ÿí†r˳/`þ«7†þêÊò"„þÌÔÄØÈ06ÐßÛÝÑÖÒXO¬*/)ÌËÎHMŠ‰ ò÷&¸»8ØZ™ÿô·ú8Åp±¿‡¯ÛwðÐáÏ¿øÇI é³ +-ç/^V½8fëäî铘š•Õ+e1:1=w½|ªÿýðq£êÿ$ >öòxÉõd¡d«+‹,¯c _É0_‰H¾&ÆFûyº;ÙZ˜ )Ÿ“?#uJìøÑ#ŸŠ€zý3®^yŽmŽúp\pI‚q+œÓèðgÇ8ÓR¹¢ª¡­ghf…îȨ¸äŒœÂ²ªÚFRgO?mhd|zŽw½fXBÔGgõìéãïY-YM1‡¨dx+Áa”ŽFw]ì­ÍŒôu4¯£+RJK7,ðÝïØ‘[úƒÇÔ+ö¯ªªkBöM-lì\ïzù‡GÅ&$§eæ•VT×Ö7µ¶uv÷õS‡†aîÏÌ¡¹¿úàá7ü¹ÿ£Üßì ý—‚¡ÏAú³Ó“ã£LJ!÷tµ“šëj*ËôSã¢#Bý¼ nζ–fÆwôt´n\¿vY /ûô?À¡¿}RÝ؇Žz݇իÔ9%åK×Ô4uo›Û8¸|ââS2r!dMdS³ ,dh¾âb÷AsŸ}w^ìƒ×æôë{avj|dˆÖ%«­B%‹’y8Û[™êißP½¢r^Ÿ¯²È€ú¿ß$õ…N ìHDýýE᎗D/#5MÛFÈ°|ƒÂ¢R3óŠÊ«9+rY‘‹ËÂ#ÁÔ•À]4<8Ðî¢úšŠâü¬´Ä°!½Üì,MïèÝäÌJZâ$<ŒDRÿ“½kRväÿå§þÙ?)!%s°ñd_ûÖmCS k;GWOŸ€à°È˜xÀ~N~QIy±¾±¥­£»—<@Ãr~µ¸´"û?ðåþKœû[š}aèãCÿGþÐÿ†úshè Rûûz:Û[›j«+ÊŠ r³ÒSc£ÂC}½îº9ÙÛXš`è_x¾ð>ö9õº|ûíý¨ÿwÙ2iYE,_M­ì=¼ýC"c“Ò³ J*ˆ -íÝäúðØäÌõñ—2,Ñ#G‹)NùÒ×êZ· L,8‡QlbZv>6+*‰Ìjie•·!!ëªO}8*xñ/H­UUU<•/ÁÕÑÆÜø¶®–ÚµKÊJð.B6$øöAꯙնIý|ìÿ–Çþ®õØ?†±¯xžÇ¾‰¹•£‹;ÁÇ?(4"&>)5#;¯°¤¬²¦®±™ÔÞÕÓG¹?:sámsÿ×&úÝÿ„£ ýBei‘µ0Bb „>m€ÜÛÝÑÖÒTO¬ª(-ÊÏÉLKNˆ ðõòpu²·¶0…èkª«^è+)ÈÊœ–?ñå{ôù¸?2n¾î;p‰}‰ÓgåÏ]¼ŒIæèæéÃé×:Я½”AÒ¯ìeû¾ýþ ø²õq”­«þ8ê¿xöô1x퇫+‹¬ù™É±aú@_w{ 7`Ãý<Ýœl-Œ tµÔ!erg¤ÄÅŽ="*²<èa¿î&Ù»ž:,¸"¡€ ä0âÎJnÈÜ —œžSXZUÛØÚÁ½‹Øœ»ˆ;*Á)L}Þ¤`ês&ŤSÉ`R ÄÊ’‚ìô¤¸Èô,23Ô×Ö@¤Œ¤¸Ø`T9£‚wÑnÞ]´]RÇ[±JJú¬dÿÊ×j7uõï›[Ù:8»¼ýC"¢ãSÒ³r ŠË*ªkšZÛ:»ûúhCÃ#cS ÷ïqsÿîo3ö×¢ÿ’ƒþ¿aʬú ô'ÇG™ŒA*…ÜÓÕNjn¬«©,/)ÌËÎHMŠ‰ ò÷ñôpq´³¶01¼}K¢éâ%y}±÷è¯ýý†²õ1É°~—’‘ûûõáTÕ™p8»³º3™L"›5qQ‚Á@è½wÞ›ôK/—ré½÷Þ{ï½÷^¤#6DLLVEÑÕ1;³Ùï;ç–s/KFfwÅó'¼çœçý½RrJªº†¦–vŽnxBPxtBjf…²éùEHØmJÀ"–Ñ,åõ“Þ=±`ŸÑìâüôÄÈ@OGK}uYbY(°Ìgca¢¯­®¢ #!*ȇ X +-eG¤ú¤ÃPÙÌ,¬à.â†w•:*/¿ ð˜ÄÔ¬üb¸ ;1 r}ƒö,Ú/õ1ƒzIÔãGh®¢±¡¾®¶¦ÚÊ’‚lò~ÄY›ëkÁII‚IqƒI±²Ï"ðéSÿèáJýhÙÿËþì3¢ìGf_^‰Ì¾-ÎÉÍÓ››œ–™“_TZQ]ÛÐÜÖÑÝ;04:>93wiqùò•«HîßÙ“ûO‘ÜGÙyاƒþo(ú/ úT¡ÿ 9ôoÐÿñ‡•¥…ùÙ©‰±áÁ¾žÎö–ÆúšÊ²â‚ܬô”ĸèˆ@?¼»³ƒ}Yi Qa>îèÓy(êcb|ù ŸCʉ”ñ VßÄÂçâé—œ‘SXZU×ÔÞÝ?<65·°|eõËöìï˜Ø§Âì)Àì!³%€Ùè`ogkcMEq~VjBLxïæhk‰¬¢¬”˜?7ç¹³dËŽ}^èÇHÀAßå»|t7$qTØ)-¯¬¦©gdn…žE‘±Ié9¥•è¤ÆÁ¤VÀ¤ÖÖ7·^³é¦þ‹çðï ^Kó3#ƒ½- 5åÅyÄAy¹9ÚYšêj"W‘°/¼ŠÀ~DRÿop?äYô?ý¼5ûœÜ¼üB"â’2òJ*jÚz†&æ–68'W/_ÿà°È˜ø¤ÔŒì¼Â’òªÚú¦Öö®žþÁ‘±‰éYšÜßÆäþÚÜßÙ%ú0ôŸ¢¡ÿ ýŸ`èßABÿ*ús3“ã£C}ÝmÍ uÕ¥Eù9™iÉ ±Qá!oO7g[+ S#}Mõó}) Q!}ö³ßœyôÃ/°OìÀ=þ%8rYΰ±spñ +-ŠH@Ë´˜ܽý‚#bÓ²óK*j@ÁöŽNÎ\Z{óöÆ]$öšA,Ã`FG}ŠfPýÝÇ;@ýû÷¶6××n¬^YY˜›B¶®²I؈`ow'{+3#2f<³ÓÌŒ_SìAXF5*tA³ˆ9‹˜N‘'%£ ¢®­oŒìG_°ãS2r‹Êªë©®¢Ûwhµw=ÒUŸ2§Ÿ±sîïno®«*+ÌÍHGQ8Šl.šh_8¯(+IZ`Pp=~¿}lê.õßýö¹xù!ûrŠûÆf–6öŽ.îxÿ Ðˆè¸Ä”ô¬Ü‚â²ÊšºÆ–¶Îî¾áÑñ©½¹ÿÌ}È>mî#ìÿëýeŸ.ú/ôI¡ÿúÛ´¡?=162ØßÛÕÞÚT_[U^R˜Ÿ“‘š@ðòpuÂÙZ™›"è+ÉËJ‰ôy¹¿ÿ¢ÏÂÌtò«èclìCõ©-#,¿°˜”œ’ª†Ž¡éE[GWýÇ;}bèߥ ý©ñÑᾞζ–ƺšÊ²â‚¼ìŒ”ĸèˆÐ _/G{K€¾ž¶†šŠ’¼Œ¤¸ˆ?/7çôé?Ô±”ûŸ~Æ€bÆ 1ãàæ•$%¬5ÎÅÃ' $2.9=§ ´²®©­«ohljvaùÊê[ë[4šíiØß1±OÅÙSÀ±DΖ.ÍLŽöv¶6Ô”çe¦&D‡ð®¶ au†âãædgc…š}yœ¨À쯠>í~¤#óéoÎ"ëQ\ZNIMS×ÈÌÊEþà(JJË.(©¬%ÎinaÌim}sëÞý_ÿñpçñ~Û‘nê¿xþŒ²7IËqf,ÇŽ–†êò"tLA¼›£­¥©¡®†ª’œù&:ÅHÞŽŸ|ŒÎéÈáKý7aŸeÿkÀþiÀþ9À>Ÿ °˜„´¬‚²ªº¦Ž¾‘©…•-ÎÙÍÓ›Ÿ”š‘WXR^YSßÔÒÞÙÓ78<:AÎýk×o®Ü¿‹æ>Ê>Ìýgàå?ïÙúÿ?>‚>ú÷1¡¿J +-ýɱ‘!ú­Í µÕ¥Eù9Yé) ±Qá!~>xwG;ë‹fƺZÔTåˆès‘Ðg$¡l_ôÿ|¨Ð§)Xf0a‘Øg:uÆ>¯€ˆ¸´¼2Y3/¿àð˜Ä´¬|JÃÎ\Zº bÿö»Û0öú»ˆfÎè¨Oñ ª¿ûxQksýÖÕ+Ë ³Sc bÛk+Kò³ÓAÄúy¹;ÙYšêjBÎÄ„ùy8Ïe=Í̈4,¶aß±fô| EpN\`Np;j‘·chT\rFnaYU}s;¸‰ÆÁMt¹‰ˆcÚ¡Œ‰f9ÒUŸfJk`J+ sSãÃýÝíMuU¥…9à$Š'‘§ ÎÆÂD_›²Á˜X˜OÇôé'ôn¢CóÑ¿ ûL§ö9¾çá•’UP:Ù741·´Å9¹zxùú…FDÇ%¦¤gå—UT×54·ut÷ ŒÓäþmî¿Žýÿ¶×ïäyú»OHè“CíæõkäП¡ßÞÒT_SU^RB?5)>&2,8€àíéæì@F_UYQNZRLDŸçú¯x° KŽ}T³/N€Ô9 bŸ“‡_HLJVñüÓ‹¶®ž¾aQñ)¹EeÕõÍgs‹o±”Ïãªbo\ûqeq~ñ¬ñ,xàãálomn¬§¥®,/-!"ÀK±à½’ÕDZOç(< Ûñ$Ë6v.xÁ1i˜À1á aÑ ©™yÅå5 -¤åøÃÕë·noÜ}ÝIôoì0È¢G€úÛä‹h½ˆk+Ýv£·»“½•¹‘ž¦qJ\ìlgN1„SBO¢ÓÿÉóGØçæ—’‘WRQÓÐÖƒìÛØ;º¸ã}üC£b’Ó2sò‹JÊ«jaîwõôÑÉý{ ÷)ì?EØñ³¿?úÏÁ÷ü ý4ô¾·½µ¹Cÿ:%ôÇG†z»;Úšêª+ÊŠ rAè'ÆEG„ùûzy¸:ál­,Lôu4ÕÏ++ÈJKˆ òAô¿ecEÑ?Aý#‡ýþD¥6öÿþʼn¯0œ‘"ÖÜÚÞÙÃÛ?$26)=» ô?ì—÷WTgÆóî1UÑH,tEQiC—.EÞ{ï½w)R)JÞA:‹ˆÒņA˜)€&¨ÑÝìž³»Ù}ß{g†”s¢''Á÷Oxî÷~žÏSQs£¥£«wàÞÈÄȳùâûxö?:Ùßh³ÓS&LJûº;Ûšê«Ê®_ËJONˆ‰öóru°A,ö,°X1„gÜ(ÏXvƒËDb?XP("˜vÒÇÄÉ ËQ–£’ª†¶‰¥­“»7˜Dq`åä—×4ÐR݈…ÝSÚ¼™ªþ?ù;C5Â@52„”B +-ñ÷rs´±0Ñצ."ÇxÁ":t€•¾wÐ.›]ýV±ÏºÿÀ!6ˆ}ÞcÇö…EÅ%ed”TÔ5µt ŒÍ,mì\=¼ýC£b.&&§fdæ\º_QUÛÐØÒu¿ê>À>Ôýg3Ø9 ûDyè>ûðþñgÆþV ˆþóå%2‘°¸^ôn÷Üêìhm¾QWSYVr=?7ëJZJR|셈РO7g[+sC=}UeE¹3R!“'ôy¸ÀÉèïûýu^ö!ÎöáÕƒ£{ˆ‹‡—_@#!#¯¤ª©ƒðÌÍ; $261%#{Íb‡Ç&MMÏÎá ¤¥•?½|õó„gt@cBý5¢ý§ÞëW«€údâÂ<ÔØ#wz»:PÍàíædKš¸¨à©ÇŽps‚FgýŽb±;?ÿœÆ³õ=™–#˜Dú ))«iêš"ݺñRÚÕÜÂ’ÊÚÆֿݺ}ghìþéé~‘Ò[æ!1¥>CF‹óØ™ž<œ½7Ñ †Aäébomf¤w^ý¬¬FAPG@5Ò…´Qõ·ÕÙoû{hØç> °Ïê´°¨˜¤´¬¼’Šš†–®¾‘©…µ£‹»—o@pXdt\Â¥ËéW³î—”WÖÔßh^Óý±‰É‡P÷gfqóøE‰¼°ÿ#øþ¯¡î3Çþ¯k¿Ëúmú@ô—ÑŸÃÎBчЇ¢ßE¿½¥±¡¶º¢´¨ðZNfFjrâبð@?oW'{K3cC=mMuUe9)qŒˆ úTè³ Ðÿ’ý¿lk诓ýŒ<;ÈN³X)YE•sZzÆæ6®ž~ÁÑñÉi™y…¥•u Þ45 Øwh,Ã%¬÷ØUè±€h8H´û£CwP¢U”ä^MMºx!,ÐÇÃÙÎÊÔPGSMY^F#$Àχh,ÐX¦@û@1­K‰Ö\È"“D‘ž‘¹5RL|rzVÞõ²ªú¦¶Îî¾Ááq´$ ú?Aôf“Aô+}D›ì!ØŒ“ã#wû{n¶77TS›1*4ÀÇÝÉÎÒÔÍH# 3:ÌÅqˆ6ˆ¾ú©Æ¿nWÕÿlSìƒ/û#öÁâå¤b_HTLBúŒ¼âYµsçuô MÌ­lœÝ<}üƒB#.ÄÆ'¥¤]º_X\ZQ]ÛÐt¿ ÑýáQ û îÏbçð "yibÕýuØÿ#öojÿÆ÷Nè¿E¡Ee™L¢?ÃÎÑüprbl„Nôëk*Ëèçe_M¿|)!.:2,8À×ËÝÅÑÎÚÂÔØ@WKC]EIAVFR\T@ÿø1^úö³~‚>“ÇÔb¿Ùµ{7Ðt ͬìœ=|Ã.Ä%¥^Í)(®¨ihéèê¸;2þàñÓgØùmí-s¢­ÝS¤ê“ø¹Ùé©G“cÃ}ÝmMuU¥×ó2Ó“ã£Ãƒý<]¨{FRLø4ðXz¢¡ÔßñQ©OYDhH€ +-h5Š Õ¨­olaëèæíODùEåÕ ÍíHF”ŒˆHF›7#SÕ§#Ñ"#º?6DQVzrBLD°¿—«£…±¾ö9EÚÍU/hF¦m·»ÿŒŽú›bï>ÖïöÙ!öòØÁHH‘STV=§©­ghlficïäêáís11ê~^AQIyUM}cs[ÇÍ[=}ƒC#P÷OÝÇâ扤¥å•í€ý-@By‰L$,àçpPôŸ@ÑFD¿ ˆ~ý²b(úWÒR’âc/D„ùûxº9;ØZ™›éëœ×P;«$/+-)&*|ú?€þan.6ú{X>Aý[ã htËÎÅÃËÇ/ $*!#§¤ª¡m`B#Z Úµ¢²jà±7{€ÇŽ¡‹'–V^€õJñX:¤­1¦Á+xóúå*Y2EdPE¶¾º¼èZvFJBldˆ¿—‚4-€4Y)qÁSÇáæ`;¨¿‡Îc?(õéCb¨FtñêS3ÒÔ10µ´svÍ…6cIEíú=„_$ˆV_ÁùÝ×GÄ”úhB¯„ÀÂÂ941zo ÷VG u]s(È×ÃÅ£.RŒRb"H1ˆàڽ뛴‡þhoKØÿŽŠ}ž#û'E0âR2r +-Ê*êšZºƦÖvŽ.î^¾Áa‘Ñqˆîgåæ—UT×54µBÝ¿ÝçªûOžN?›ÅÍã $òòÊóL°ÿïõØÿ½Áý›Ão +-ý•å%€þüv@ý¡Á¾ž[7;ÚšëkªÊKŠ +- è§&'^Œ‰ +- ôóöpu²·±431ÔÓ>Nõ¬¢Üi 1!*ô9?Aÿ]Qc)Dûv B46NÕÒ32·vpñô ŽONËÌ+,­¬kl¥GÚü"‘ 4æ"Ëp Œ& àÅ +-dŽÆ´.À´šŠâ‚œ+—“â¢B|Üì,M t4T•ä¤%D…P‘e‚4äË~hêÓ "}3 +-cÀRFöµ½‹§oˆè5¢¶ÎîÅøšRŒæ=õ7®!@}¥'LJÑ^l½˜Ÿq91$äíîdkij £©¦,/#àçãåáb§Í¡¯¿\+ÆmLý-cÿÁCìœ\Tì ‹ŠKJËÊ+©¨ihé虚[Ù:8»yúø…F ºŸš‘ u¿´¼ª–¢û½}w©ºÿóYì~@$/ìÿ¸öÿû§Àþ{¡ÿ@ÿùÊ2™D\\˜Çag¦ŸRDÿÞþÛÝ]í­M uˆèççfAÑOˆ‹Ž ðõrwq´³¶036ÐÕÖTWQV“‘Lj œ<ÁwBŸíàïY ²|‚>“·Ácw~O~÷ˆ46®ÃGŸ< ‘&¯¬¦©khjeçìAÙ+9Å5 -]½wGÆ<~ú ;·@ /?×üúç·Ì™¶vkPûj¯^ê/‘xÜìôÔ£ûcCwúº;[ë*K s3ӀɆ#&kef¨‹0M#Le þ^–]ß~‘eÒŒ_S÷7‘ˆ¥Ím\½üC"bRÒ³Ð9Ô~³§cB›õ"#õék‘Ð"- AP[c]Uéõ¼¬ôäø˜ˆ`?/WsÊ’„½~¤×bœCÛñò߇}È}€ý}ö9¸xóþŸýúpŠúL8~Î]Ì%¹XéUš´…eé½÷ÎÒ¤ "¨XE)RDTQzï½÷&½(v:v=u.‰qîÎÜû¾[ø-»ÄÌ 3NÐߟð컟çû‹ŠKHáää”U5´tõLÍ­l‰Ž.nžÞ¾þ‡Ž Ü‰K<s?#+· ¨´ä~SK{gwÊ}Èþ½3sóˆýga¨ÿи´07; BÿÖMúý=]­Í0ôK +-ór`è_L&…þ‰£Aöûùìqßíä`gmafl §­©¦¢HÀã¤ú‚üô™—Ñÿfuô?Ç·¿iß}C–™„,¿°˜¤Œœ‚²º¶¾±¹5ÑÙÝË/0(8,2&!™lZ]S;}ɾ&—,µ+bÿ¿XÕàK€ï¤ìÚ”­«*+ÌÍH¨ÅPQ³³23ÔÕTU’—•Ú%ºS€—›¶dW˜¶&3¢Ž²P$`Ï!9Âò„¼ý‡œŒŒM<ù*u/^Ã\C¯H×ú«¯}ÚùÀcÎC3Ôc¨C%ùÙ×R/œk1¬E´Má€åqh@|Üœì¬ÛW\Ck8¡?ç·ã>ûäÜì³°íàýÃGf_FV^AIU]SGßÐÄÜÒÆÞÁÙÕÃkï¾”û§"£ÏÀÜ¿œr?æ~M]cs[GW/ÈýÑñÉ›·îögç—=¦cÿ×õÅ> úÿ¡Cÿ5@ÿå‹çOŸRö5eû‡F'§îÜŸ™[|øäÙ ð–ß¼ý˜úÖàkøíÿW/Ÿ?}¼´0 [v|x ·³µ±–Ò²gNŸ +-=r`Ÿ‡‹PÍ@‡¬š°?; 3ÓVlÊ®jŒö"º†ÈkQ +-'¯¨ª©khjeçˆÖâ±áÑñç.^ÉÈ-„ÇP8†FÁ1túãó¡UŸ´éÆ3}ïöÍñ‘¾®¶¦ºÊÒÂœŒ+ÏÅGSo!{+3#=-5e‚,i+òp’ç³éKêc¿ì“~`xð‚ßø[ +-ûÛ¶³°ö¹xøøûÒ89‚¢²š†–®¾‘©¹•­½£‹›'Ìýƒ‡…¢ÜOH‚¹Ÿr¿¨¤¼ª¦¾±¥­³»ïúàðØÄ©Û«°ÿËúbú”wL‡þÒâü,ý‘¡þž®öÖ憺ꊲ₼lú—. Ð8y<†¾ŸÏ÷ÝND;k 3c=mMu%^VFr—˜ÈN!>nN€> @+ +-ý/è3ú6Р¶q9e·‘SVPXLBFNAY][ßØÜšèìîå“œ’–™[DQm¨vozŽÒ²oVmÙßèbŸAÌBÖ&FkU$Ö’â£Ã=´¯§«£¥©¡®¦ª"'ZV€Ò²›)-»–ª1\‹LP}Nn>t À1¤gdfmïìFšO$˜Ï¥«™yEåÕõh+Ž¡­8¿ø©¿ú-„AÕS-űap +-µ6ÔP—bXŠý}|4˜OÍ÷ÿùѾbR꿃ù':ô§ïôoLŒ ^ïëîloiª¯­*/-ÊÏÉJ‡¡Ÿ”€B?ôØáƒ0ô=Ý\ím­ÌM tµ5Ô” xœ4B_Ÿ‡‹“}+@Ÿi+Bÿ»/è3ü¥ì?¾ß¼… ¨ÏNVMJV^I ´¬™•jÙ£Çãã’.¦¦ç”TÖ6¶vö ߸u÷ÁìüÒ#¨þ¯ß®ÆÝ‹ wmq~æþ©ÉÑ¡þîöæúê²¢¼Ì´”䄘ˆ°à _/jÌ*ÉËbYÛ +-YCêo\{õI&Àc;>ìV´°!ºxxƒ[(ÜBgÁ-”_RQƒÏÂi)Âñ0^Štê“wâ¿à_NìD8 ÊtÊÁt®^JNŒ 9èçíîB´±0Ö×V'B"Büp)²`—"íx>߷ψý¿QØÿÃþv2û|döeñ%5Mm=cS k[¢È}o_”ûaá§aîŸOIMKÏÊ-(*­¨ªmhjmïêéìß¼ÙŸcÀþ»wë&öW¤>BÿW*ú¯y·ŒþÝÛSýáÁë½ÝmÍu5•e%…yÙ™×®ÀÐB¡t`? }Wg;K3C}-uU%y9œ´„¸¨° ?/BýoÁ{ÿ‚>ý·N5RËn…-ËÁÍ+ $".‰Ã+ªhè˜XØ:¸xøYK¬eå—×4 ˜]³o?¦þ¬úï~ϼ†—ÏŸÒÔl ¨Ùâü¬k—Ï'Æž> \Û‡\3‡®)ä¤%Ä„ùx8ÙÙX˜™¶l¦Æìš©Ïp+‚[ˆ ÝB¼üp<2x4K[ÇÝž{ý‚¥E^Š¥•t§Ð Ì)ôþý*©ÿú!ý[àp~„Ãyüpa^Bã#˜K(å\|tĉc‡|÷,ïD‚,ýtÖüú“«±ÿ5•}°àû,l;88¹yøwŠˆí’”ÆÉ•Õ4´tõLÌ­lì]=¼Pî 9rÿl2ÌýÌœüÂ’òÊšú¦–öΞ¾¡Èþ,û¯ û@ýŸHð~]Ä>í#þ7ýŸWC|tx°¿·«£µ¹¡¶º¢´¸ 7+ãjjÊyú§ÃÃPèûûzƒÐw"ÚZ[˜èikª«(ð²2R}>^n€>+ ó +-ô72FÿS?½OúÑ°¶q™µm0f¹xøaÌJËPÌš[Û;»yù‡EÄ$$§¤eæ•UÕ5·ÓºöœÞ5LÍÒ½ JÎ2€­·«­±¶²´ '=õBR\Ô©Ðÿ±_Þ_Qfw?»&Ñ]][¢0à CQY¤×¡÷Þ{PP"é½÷Þ¤HEĶºTTDݵM4É1žÜ{ßaú˜=gùEÂýž÷û~žÏsôÐ~/Wsc}mušÍ‚Ž‡\6KçúÆüûr¢>c)Â)$%§¨J›B¾‡ˆŠKJË.(étõŽ\Ÿ¼ +-;q–Ú‰oÞq[BlªÏ<„^Ì3VâpOGKCuyQ^f* '…ãhcab £¡ª('…–‰a Q;‘šÎ +-õÿ7ö‘îCìóàð¢‰,,Št_JFNAIUMC[×ÀÈÔÂÊÖÞÉÕê~àá`¤ûq‰)P÷ KÊ«jê›ZÛ;{z†GFÇ&®LqÀ>Uö±õ· dŸ]õ!ô?P¡ÿ†ú3Ó“—.ž?7Øw¶«£­¹¡®º¢´¸ 7+=‰þ‰Ð£Pô÷y{º9;ÚY[šêéhªS”åe¥$%Äwlà'ðáxy¶0@ÿ; úÆ4ƒþŠèÃÇQf†©OàD\“–S¢`\stóÚwÚì)šÍžéé¾péòôµ›·ï>§ ©ÿú-¼c´Y¹Ê>ÙÞ¿{ȶ0ÿäñ콟º~urüâÈ`og[Sm%]gøîqs²µdøÖKm³JN¡Í€ú0aQЉÒòJM]C3+{go¿À#!áÑñ)9…eUÔ%4615¹ÿpîé< +-ç[8ìªÏ5›û?ÿtcfrfÓÕÞ\WUZ˜“ž†Bæp©(È`•H"òá€ÿÐ+‘y ýŸŸ?ö¿eÃ>Òý›ÀçÞÊËç#ò“ÈB"û»¥eåU(êZ:ú†&f–6vŽ.@÷÷ù ÝŒ>u?+· ¸¬²º®±¥½³»w`häÂØ8 ûÁ¿2ÿüÅË_~}ó–ŠýH“þýÕË>‹Ö!¯ûÈýW/èпŽ ?z~x°¯§«£µ©¾¶ª¼¤(?'3-%1‰~ðá@(ú®Nö¶V¦FºÚjªJ +-r2R’»vBè“IDÇ»@d>ú«WÓEúô·xó«0®­^äf³DYdûN )YEum}cskϽþƒC#bR2r‹Êª©`»819uö!UgßrÕYÚQ|æì³ð"²MMŒêëno®GdKd +-ôóvw¶³25ÔÕ¤(ÉKKBê b:»ê,°ýáxèé¬YÃЉØ’Ø-£—Ž',2&!53¯¨¼¦¡…¥±!ô–:„þÉ6„>fùa$1í Ylž8ÛÙÖX[AoÄß=îNv–´lvíØ&,(@ÀÃ!´qÃë–º—Åû"ö¿§aÿo[xxq|~A!Ñí;Ä%$î+*«ªkjë›ZXÛ:8»zìñAºr<" +-ê~ZfN~QiÀ~sÛ™î³ýCçö¯2`áÅ+FìSeŸõùº³¹,ªþ?þåå-°ýgOèп216:2<ÐÛÓÙÞÒT_SYV\˜—q:9áTt$ý(ú.Žv6–f&†ú:Z%yYéÝ?îÚ)¶MDˆLâ'òáq<úTÑ_þ—›]»ný†M `Û%)#Áfdfeçìîí—œž]PZY×ÔÖÙ;xntüÊÕë·îÜ›}üäÙs°ZáhŨÏF6fêÓÑö msܽ}óÚôåK†û{:ZªË‹r3Sb"‚úïõ\ôYeà³ìdƒßz©ÀÆq pþ +-Âa©D úJ:•_RQÛØÖyv€)›¨vïÞÿƘÍبϦú°a4 Q4S—Ç`4gZjÊ‹ò2Sc#ÃŽÚïãåêhcAÛA;·ÓwÐb#"ê£`åþ±Çûk˜±¿•‡'Hda€}¤ûr +-J*jZºúF&æ–6öŽ.î^P÷9u?!ùtFv^aIyUmCs[G ûÀöoCì?~‚aÿ5x–…ìsRý˜êèÿúê%è ôvŸioi¬«®(-.ÈÍJOMŠŠ8EßÏg‡«³ƒ­µ…©±ž¶¦ºª²"} q ú"B‚$~Ž—LZ*ôײAÿÛè3>:ØVÑÁ¶¨³~A!Q1ñ¥å”(:&–¶ˆl‡!ÙÙŠ+j[é>{‡æ³¯Ñ£ÉJ“}õYd» +-(´ïÀú{IÚ«T¡mm¬©(ÎÏ:{ò8@Û>„6c}muÙÝ;·‹ID>HýMÖÓ}vIÈƉú´!ÄOZÌFdcjiçä¾Ç7 èØ z#¶wõŽüþÄ•ú l=ÆfÐäÄÅ‘¡¾.8ƒÊ +-s2Râ£#BúïõX,DPˆ;¶‰ˆ|8ð7УYº´\ìÃe÷ú÷!öypx>"?‰,$²M a_V^Q™¢®©£ghlfamçàìtßïÀÁ ¤û±ñI©éY¹ÅûõM­±ÿìù¤×o–‘ìsS}}(/àŽŸÓ ƒúmÍ µU¥Eù9™i)‰q1'ÃÃŽ9EßËÝÅÑÞÆÊÜÄH_WKCMEIA‰>€¾0YP€HÀãxèÓ ÿ=8õèá}ÃD6Lö×ÑÈÆì³Ææ6.ž>þƒÃ"bR3r‹Êªë[:ºû†ÎMLÍܼ}÷w í.Œv‘m³4¶ övµ5ÕU–d§%ÇE8v8Àw›“­¥é¢ÐŠ‹1 -úK‚6.ÙlÙÀFD;HZ^™¢© v½³Ç^¿À#¡Ññ)¹…ôh.O]у–2šeô¾aäþªUXÅcº°OÓý­<¼x>¿€ Ð}q I) ûªjÚºF¦æV6öN@÷÷úîGº~2&.1% b¿¬²†û·ögÍ=’÷ß[l.Ùçªúúà‡wütîÑìý»œ _^R˜—q:9áTtä‰Ð£A@Ñwsv°³¶036ÔÓÑT§(+ÊË"è‹m"“ø‰|x‚þÆ ÐÿË +-ô¹?N>»ný†MHö‰d„6ye5-= mÞ~A!áÑ@hsжA¡Ÿ¼ +-„öÞ,ЗxÆ@^0êÿ‹õ?3RÿãH} ¯^Ì?{øàîí›3Scç‡úº;èFŒÖÏÛÃÙÞÊ ²M ²MLTXŸ€Ôß ¨¿nI…–š ( ;‹Fb·ŒŒ¢«§Ï~Pˆ‘± ©™yÅå5 ÔteúÚ­;÷¨ûGCODFŸJHIËÌÉ/bÅþôÌ[À‘ öçÁQüÂ&ûŸ¾ZÙgTºO,ªÿž1Ð:ý;·n\›žDÐï§B¿²¬¸ 7+=5)>6*âxHðáÀý¾{½Ü] è›èjk¨©þ—ýòpªòÌâð¬nœ‰-¢Rnår)Š¢R¥wiÒÛ¥÷"EŠô.¢¢ˆŠ¨@A• " UŠ "Šˆfw³Æ“ݘÉì&Ùó~ßýnã‚É莫Ãû'œ÷œç÷ü@ôU•×+€èËJK1èT +-Y Ï}Ìn>g‹þôgz\êÏǨ›N  Zi9y… *µô M,lX>!1 ©™¹…ÅeG+«ë8lÂØ6‰³mf£ýmšp”vê7PZÜênå¥öægoO‰ßâïåædgif¬¯­¡ª„Œ–Ég´¶½3õg +-D°> dmÏr÷ &³¯¸¬¢²¦®¡ËÞþ¡,±ô +-·:!-ˆú‚%hŠ]‚ž`%ˆ/K ³3’ã¢Ãƒý½\ì¬ÌŒ t4Ô”Ö¯]-Ë”¤QHb+Wˆ|±”­úï+?±Ç‹ýy|؇?_ˆa.°/&N"ShtSZv•<¡ûÚºúF˜îÛ;²\=¼ýA÷£bâ“R3û» ‹ûÇ*«x°ß"p÷Þƒ‡ž<}ö¶5@L~ä‘ýO€úÕÿ+¬à.°ÆPYŸ‚Ö=¸7Œ ›cú§«1èØ·g×ÎìÌô”ĸm‘á!Aþ>žî.N¶Ö›ÍMŒ ôt¸¢/'Ô’¤Q)$ q$ú"Ë0Ñç>Îüù¼ÌŸ[yöãcÛœmK–.Y!*N`ÛhÃÁh3²ÁhKÊW®¿p¹ùzkGwßÀ0èË“Éçܦ^ÿ0Ü„mN7$ˆnÏžŽõ‡ú{:ÛZ®656ÔÕTV”äf‚ÒF°•Ö|“Ž¦š27‚¨Ï…ü8×hßÏd>˜ Aä¡.–‡.¾A¡¨eá-èËSgÏ_‚Á´wõ@ ‚Ÿq0ÓUÿþ4|ý +-Ë7h.£÷†ú{;Ûn^ûª±áLÍÉŠÃ÷íÞ™•–äëéâhƒJ¶ºª"ŠC)¾8äÌõùßlØGY¿„Ð}1Ð} +-•.)%-#·z ®ûZ:z†Æ&æ›­mœ]ܽ|‚BÂ#·Å%¦fdåäö–"ìŸbcÿf[GWoÿàð½Ñ±Ç€}°$$S3Ëþæøz³¨þ\7’:}ØãaXänè—èççîØž–œ¶%ÐÏÛÃåh‰¾‘¾®6!úò«d¥™ :B&ès¡¿Ö|úo3-Ⱦ™&É”Yµf¢ªº¶¾±™¥­£«§_PXÀmGngÎ_¥mïìíGp{»ÒrVã×·9moW;ÐíÒù3§N;|p?¢["Ð-Ð×ÃÅÁÆÂÄPWk£òy9iB]!²léÜÞƒÒ +-ÉC°>p>Q¬aƒQQ×Ö32Å—œ‘·§ˆˆC(A‡ƒ‡¿£ýÊ;ŒúØÁüS  ÝéÁ;йºêÊ£¥Å…»rØièãβ·FsÑœ>—Å ?ŸV‚æn€û„bç>†ýÅöEûd*M’Á”Ý_»t_M]S[×Àh“™…•½ËÍÓÇ?pKX`?%=3'¯`/`ÿíßl»ÝÝ×?4|Îeb’Oößà²ÿïVögWýèº''ÆÞèë¾ÝÞzƒ ýr€~áîüܬŒÔ¤ø˜¨­¡Á¾^î®Îv˜èêéhiࢿfµœŒ´”$J!KôÙÌýy¼ÐÿÐKöô¸l›QÖÜ +--x ‚¡´z˜Ò²<|C"bS3s ö—UTÖÔklºÚÒv»çÎÐȃ±ÇÏ8tû—Pºñí†P¼=Ÿ„xx°¯»£õzóå õ§«Ž))Ú“·##9.*,ÈÏÓÕÑ9­–ºŠâ:y9):• t[NÐmÁ‚ÿõa0 ‰Áq¸^IUÅ!»mÝŸ²=gWáÒ£'ªkÏ]ä™Ë8šËß¿{ùê5{.?ÿ,†üÔ ÃßþEØXÊKŠöægg$ÇG‡û{¹9ÙY¡¤¡¦Dt ’ØÊÜô~æòI>!Øÿ3ö!ìÃßöÅÄId +-Î’–ÝWì«nÝ×7465·´¶sd¹zxû!ìGÇ&$§gfö÷s±ù««7ZÛ;{úJ—”bÊÈ!Ýß ¤‚t_ÏÀÈÄl³•­ƒ³‹»—o@pèÖ¨˜„ä´Ììö«OŸi¸ˆ°«£«çÎà]؋ǘ죃yÅ/ûÿáÙò?ðøV˜}٘С%†ÛÆÜelôÞðàÞ®Ž[-ך¯ôk èäåd¦§$ÆFG„m ôóöpe9ÚY[š›êƒèoTè+€èËJK1è4 +-™¢Ïþ"ô?›ƒþ[õèÆvÚuJªêÈi-m]=ý‚¢â’ÒwäíÙèȱ/O= á­«wÖøoßÏ€·ß„ôÀi|êïél»y­©±¡®¦²¢¬x_Anfj¶ˆowg{k$µšjÊ„Ô"¼q¥–ÀÛ»|·°¹pÒÎ :®¡Éfß ÐÈؤô¬»÷:Œ¥ùzk{W6< ¿ÃÃðÍOBÂOõù²pŠ7 ±©´\mj¡ µiY¸ÔVÖÔ546]miëìéy06>*ë‹—luá3n_åÙêÃn`Ôþô aµ­×›y­6-1624Ð×ÃÅÁ†Ÿo‚o꿳ì é@p÷Ë–õÑXP*ª¨kÃXð0 ŠKÎÈÎßSTR~¼ê4VnhbŸ +-:möeóO…Ÿúì¡üô†òýÔ?õ‘$=¼?<Ø×ÝÐ…úÚªå%Ѐ²Ù ÈÛÍÙÎ +-e¡†š‘…$±•+¸Yø~*Ð'ûø°?À>Î}„ýEûÀ}„}q 2…º/-#·šÐ}-=CcSsK;GŽýðȘø$ûEËÊŸ¬©­?ßØôõÙ/ï¯*¯, /ÍšùA±ÎŠ(pá‚t¤]àÒ«ôŽ4EPT+ˆA©Ò{浪¨H·ÅÞQ“q9š¸2É$ã“™}Î÷}÷~·©™°–ã„ó'¼gïg?C£ °/S²ÿ†ô$Žð®Ìgñh6÷Ž«ú?rTÿëg“0Åwn~uubl–»·«½¥±®ª¼¸€‚þ>€~@ÝšUþ>^î.Nö+¬-ÍLŒ8¢¯¤°TŽ)Ã’X²˜&úbXô¡?cú"ž¼q¥–Á”SPVÓÐÖ341·¶sr÷ö Þ¹3ú@Üñ“éÙù%•µmˆoC£—I¾=ÿ+âïEX-g:hZ‹•àŽÖ>}B\gkcMEq^VZRÂáý{wDl +- Zåëéê`kiÊÖ×Y®®¢(/+-%Ô_HYí”ð7¾cˆ+†–®ª@NnÊ:*•äôìH¥© Ý¡±Ëœ[ˆ„ŽÓ€Þò5 ô?x +-ú»;ZªË‹ò2S!”Ø=œPWX™éë.WWU’—•‘’@ hþ¼9| hšú"žìsuèþŽî‹Ót_E ë¾¾¡‘‰¹¥Í +-g7o߀À À~$û™9ÅåUu­]}gσì£}¹û€Ð$ÙûÙʾÀ Qýûwoݸvy|äÒù³}Ý­MuÕå%¹\èo èû­ôtsq´³µ²05fS¢¯¬(¿DŸ!)D ?‚þl }Ä|ôgNCÿ½o"¨/6wÞÌ7æ›:É7GW/ßÕ¤ÕNHJËÌ+.¯ihéì9s~päåÖÝ'Á]^¾u¡f˜o„ý7ú¿p€P‚ׯ^‚ÀlܹyýòØÐÅs}§Ûšj+K +-²AkãH­]íçå†g «%8üûSD}Z¢§B»…Æp ÝWú¯ ƒsh@eUõÍíÝýƒÃãW®C(&ŸáP¾ EPõy2ùÈäXÎäÊØ0dÒÕÞ\WUV˜s*åÄQ(@Û·l Y°ÒÃÅÁÆ”ÍÒÁNáú)ä ez„<~ìAÇ>1ö‰/AºÏĺ¯ºL°Ï2`›˜YZ¯°wr%±¿Â~‰äôÌÜ‚’Šêú¦¶ÎžþsHö¯€Ü{ˆ†.ûÿX™O ó~‚âò3¿ê?¸w¦xbV»¿§³­©¾º¢¤073=91!Ž€þf€~`€¯·§›³ƒ¥¹©‘¡¾}5šè‹sDIÍ,Žè ƒþ§«ÿÅ7ƒo¼V+-»TQeÙr}¶©¥­ƒ‹‡OÀÚ[£vï;€Ë%‡´ií䳯_¼Wk…áßa¯E„»{ëú•ñá‹àµˆp¥…9@¸ƒ1»"·„ú{»;ÛY›êik¨)+ÈÉ0$ỡ˧µÿý§ »…°òD’f¢P4uXl {J(„²'öP|bjfnQyuCKý>}þ ±Ø´ôNõE÷Ÿ; I£CÐ8—0ù8º„‘á‚ý¼Ýè™0’ˆúÉœÙSV€þßß :÷iØÇ[0aŸàþ"Ð}I)iY9y¤ûêšZ:zúlcS +[{'w/ûÛwîÝwðHBbJzV^aieMCsûé^á1ý[wïS²J€dÿ'!¢ô‰YþÑ„©µF3üŠPý‡÷Qa½<6<8p¦÷t{sCMeia^Vz +-‚~, ý }W'‡Ö–f&l–.‚¾*}&ý%„è/@ÐâOBŸ`þ4ô?üx÷g 8îùÀÖjj³ àœÝ½ýƒÃÂ#wň;žœ‘]PRYÛÔvº÷ì…!˜b þÃ'OaˆÿFVÒ\þÅC8¾ùàHn‚È ¾yJ€†c|dðü™žŽ–†êò¢ÜÌÔÄxðÚ¨­CÖøx¸ØÛX˜²´±×2¥)Âq©ÿ; '"”…(8…òŠªêä)ttõô]´~*@GŽ%¥eåWÔ4¶¢L.N\»qû=“i™ü"‚ú<‡Œä)²¤W'F.A$­ 5åÅyYiI Göïݱi}Ðj_/WÜôu—£þ—Û¦(“?ÀãÁþL +-û”îÏÝŸÃÕýÅ”î+(îk€î뙚[ÙÚ9b쯦°{0îXRJFv~QYUmckGwß¹ —FÆIÙ%xñ’ܺ(ñ®Ìgð\Žª«o¾}Í£úã#—.œíëêhm¬­*+ÊÏÎHI:wˆ„~†¾»«“½­µ…™1[_OGKS‰¾¼œ¬Œ´”$ˆþ"‚ùú³1ôóy¡?cúï}´V i-Ⱦ$CF¨¯¡¥g`lfµÂÑÍËwõºõ›·Ñ ×ÐÚ ^KŽðÚW„×þƒÇ\„R_”ØÞ¾qmb†£·³µ±¦‚@ÜáX„¸Ð U¾ž®¶–¦l}åˆú²ÒR˜úó§Îky©ÏW€dää•TÕµt Œ '7/¿Àu·íŒF—0¼„¨ÿÀ%Äýçɇú ú¼Ôÿž[¨Cõ§£¹¾º¬(÷ß!Ä‘°t4ÉH$Ä¿ê£ÅÀ[ÁÓ¦wAÔãÇ>¥ûûtÝì‹/– u_QYt_[—e`dbniÃÅ~Øæˆí»¢c=~2õTNAIyu=XRÏ™‹¤ì?x4‰do 9BWæ3xBF¹5ÃÕŸº8ÐßÓÙÖT_]^\s*õäñ£‡b£wE‘¦ïãåîâhgkenjl¨¯Gˆ¾’%ú‹¹¢ŒfGôIèÏœ†þG<.à¾àRŸK8YD8ðZ#ðZOŸUkC7nÚ{(>153·¨¬º¾¥£»`pdüêWăºàÂÊO}î ó1î-—qPA +-ž<ºçæõËcCÏõuµ5ÕV–d§Ÿ<w zç¶ÍÖ­öórÃbk «…ÄVVFŠ+¶⦈ú<™À%\H»„Úz†ÆæÖvÎî+ýׇmÙ¾+æàÑ)§r +-˪ê›ÛQ$às<‘ˆ8„‚Ô'ACh‘È•±a"‘ºÊÒ‚œŒäãGÆìŠ  ô÷vwÆõGO[CMYa)“!9Õ‡ðòDaŸ~!º/ÅaÊî«öµtXl3ö1ö£vGï?"9-3·°´²¶¡¥£«ï,%û÷¡ "ÙÇRóñÓÏ‚+ó©qþ‘O娺Š]› î«HõÏŸííjoi¨©(-ÌÍLK>xôpôm¬ÌMŒ YºÚËÕÕT•IÑ—Ñ™Y@}ú4ÑŸ9Íü>^¯Åˆ¡™¿à/_Š/‘”f.UTY¦©Í24±°±çE\rFNAiU]S;Ûá±+”Ø‚ºà.¶œù•ßlÿÎ5[ap‚îö溪ÒB`Ü Ì¸-ãœì¬Í ô´ãäd˜ú õ1ã~/âDöÁH\<|Ö† C¸<„åÕ°ØPG&ð!$êÏk¢þP.÷Nõ…¶ŸçOÓÚÏéÖÆÚŠ’ü,¸ƒGöï…;¸ßA'¸ƒÆp5T•h‰Ì¥™¦þG¾üÜÇا龘ûH÷ÒLÙ¥ +- ûË4´tôø°¾mÇî˜GS2²ó‹Ë`_Ú:{úIÙ¿}ïÁãIrcÞZÁçD}¦TîÍ·¯(s¡Tÿ\wgkc]UYQ^VzJb‘1»wl ßHƒ¾¥¹ Û€¥£¥©®¦¢/Ç”aH },yÓÐÿíï?ì—gL•i†3ÑÙ˘UÚi€€(½7AA:RzïUPÄ‚Š€ˆˆEEQQQìŠ Epv²™î¨Qgv]×1&’ìhvŸ÷ýÊù¾SI˜‰¼?ߟOîçz®[õ Äa±`±52³Dbëîퟜ‘³f]I鎪šú¦æc'Û;/]»Ù݃Cü÷3Ì…ì«¿°'‘õGP„€ä  ö?Fù@RpõâÙÓ'ZíÛ[]¹}sqAnvZbL¸(À‡0[sc]†Ù27…fÜ8„:„žÚ|-T¬Qýñò†DÆ%¥¯Ê/Ú°¥lgMýþæ£ÄDîôôበ‘[-ﲩÏ:ƒoð¤ÒE ¤nwåö- +-ó²Ó’b#B}½\–ÙY[˜âöÓj?äD&×áWŸöźO`t&É}À¾²*‡ÇWSŸ±ohlfamKc_—˜š™“W°~ciYeumCSóѧ;ÙGR€< m tÁ7?¿}Ç È‡? õ?2#Lˆ ÔUœal.ߪõRgG[kKsSCmueYéÆõy«2Sã¢ÂDBúö}3€¾îÂ}5KŠ> }¦è“Ðg12å£=1⦈ÅvƬÙs€ú*¾Ú|í…z†¦6öÎn˜q±À¸¼B`\åî:i³Ä…õµ s‘Aý²ÔöùÐCmA +-Ž6ﯫÙYË_•N@Γ‚œ®Ž–† þì™3ÆÇlåÔŸ9™KOÄÈÔOÄÛ¾ƒ·î¨ÚÓÐtøØ©3¨ýtß@µj?ïF§þGIê¿e”Ÿ‡°0÷ïÞº~ù<*?k«+PùÉÍJMˆ fžAˆ@<<Ïn?_Ô“}J÷¿fë¾’² +-‡ËöµuöMÅØ÷ŠÂ£ã’Ò²V¯)Ú°y[yUMÝ>Rö¯vÝ&eÿ ¹1( „H®Ìã|ŒOv„é† ?f¨þY(¬‡4îݽsÇÖMÅ…ù9YiIqÑá"¡? } 3C}€¾Ö|u5>£ª Ð'™±žNB_®èO¦|ôÇfÜ4Šq¤Ù +-4´tt LÌ­/]îâé +-ILÍÊ-(Þ´­¢º¶ñà‘Ö¶¹»½ßbÈ þäþ'M}1åÀ ˆ2”{p¿ûæõËgN;ÜT¿§jGiɺ59ÉqQ¡B?/7g{ SBmù€ÜœqƒœÄDXwËgµŸ•þÁaÑ ©™«×®‡ìªm9æ„y|÷ §® 1˜ÇÖh)ñQaAþÞî+—ØZšé/Z ©åTŸ]~&©?ö'¥ûSIÝŸÆÐýY˜ûsA÷UT¹<º†¦¶Î"=&ö}üƒB"b’Ó³s×®+Ù²–ý³°07»{OBC•Aù¢ô»òVÕÕŸ@õq†‘êß¹qPýCûë÷ìªØ¾¥dÝÚÜìôäø舡¿}[€¾1}ŸËQQVb‹þ×’¢Ï†þDGèwÿd˜ít5¦¾*W@BΊ„\PXt|Jæj¤¶å”Úv^ºvÔö»ïþãÉÀaÊ\X}•-ûl1`¸í#”Úm4Öî*ß +-n»:3%>šM9mMu>W(7gö,p€?£,Œõ%ÛP¢¡¹@×ÀØÜ +-Aâ ¦eÃÜ k½—Q~z‰ò34üæA”Êä>È¡þ²ûŒŒ¼Çžô¨ÓOuŸW/žk?qôÙ}ŠP÷‰‹ úJ]AzõñZLnÄØžö§ØÇR„u­ûŠJʪ_ýÅ€}w/Ÿ€àÐÈØÄÔÌœüÂâMP)Ùï$‚=‰Ü˜WDBØÔÿɾd„IqÁ"÷ã‹áÁþÇ(à¯v]¹pŽVý²Òë òVe¤$ÄD†øx¹S¦Ð_¤£­©¡.àqUU@ôçbæÏbˆþ4Rô§NŠþ'¿¯dAŽR[_}¾öB=CS {g7/?ahd\rúªü¢’-e;kêöƒ»´Cc½q§§(¬lÊÉ6æþKcîgsÔ{ï݆„œ=ÝÚrpßÞêŠí›‹ r³RcÂE>.Ë—.¶236»í–ÛŠ)÷™J„*?ªDù1„òc·ÌÉÕÓ70$"6 æQ¸šÇÉösp©yH^A©îæ>ë¾yMlÌSæ8Ú˜ãÈNKŒ‰úxº:-³³671ÐÕÑÒPãq”¡û|CuŸÏ¾‚_ÞûŠÅ}û’ºO`ž’² +-ûf€ý%N.Þ¾¢°¨¸¤´,°$ý +-Zö/\¹~ y${Ñß¾“‘ æùØžT„Iq!ê*9Èpß½;ÐWÏÓª_¾mó†¢59™©‰±QaÁ¾Þî.NKèëaè« xUe%EZôg`ÑDZ&¡/%ú“ÃcË>²éÙP_!Íjˆrå|E±à¶y”ÛliE!î¢Üöé •áQú*¹ 3gê ”ÜîFr[˜—žèËÂœ€§Š1™ ©ÿ˜“Q~˜óq3r`«KwTí©gvdrOž=ùÏWÿ–»ÒLè“Ó ©OzÒógOxÕç>Q}N?| A\}¢Ã‚ýWz¸8â#¨OAö8&©ÿéo̺°¯Øç2°o ØwtvõXé' ‰ˆIHÉXûBÉ~Kk[Çy ÈyöüGyb0Á<ÓE\`£‡a£q†{ïÞîB+Mª~%¨þºµ¹ÙéÉñÑá"¡Ÿ·‡«$ôù<ŽŠ²Ò<úlÑŸ„þo~2('v[®@CsÁ"c3«ÅK—»x¬ NHÍ\½vý¦­å»j@cí8ùú­»÷¿•Àœ¹¥C"‡s`8#P»A :Ïœ<ÖÜT_Sµ£´¤(?'#9.2Tèçåæì`ocab¨·P{>)·s(¹ýLÌɼ‚¬î£odfi»Äq…»·PXt| +-=ŽFG1Ž^Ç£`¥G?‚2¨/û>èÁÓhgLc šFThŸ·;LÃÖÒÔH¦¡ÎçªÕg†Dõ™¤þ'<9Øgè¾­ûó•ÄØ×741³´±[ê¸ÂÍË' 84, d¿d¿²rø´Á‹W»nãˆCÖÁw("8#Ä™` éÉ]h²®ö?¦2|ýò…³§OЪ_\˜Ÿîä¿ÒÓÕÙq©%@_Ÿ„> ¯ˆ ÿͤèëcQîOõfÎúcŽËW×Ô^¤od +-˜spv÷ö +-ŠGr[„䶦¾©BŒå¶Ö'CRþ…™a¶ì³Ô€ +- êƒ »m;~„°[ð°Ûø¨° o÷ç0õù̹وs8ãA}´ç’ã€#¨GPŸycR³r¡úl«Q}ú‡†_üô¯W¯ß ê¿‘ÜhõáŸÆÈ{“€ú/†‡ú?úûßþÚw7ŸÓÐ|öÕ%1›n>⨢8wܦñå>)îO¥uŸÀþt™Ø×Õ721·²µ_¶ÜÖ%P ûBÈ~9´Áý‡Žž€ˆ€@$7fø%f0Á@Ó“I},.¸®>¥3Œ<îÔñ#Aõw–•–€êg¥%ÅE…øz¹­XŽ on"}Zô&EÜžæØrËS¹Õ34±°±[æäêå+ ‰ŒMJÏÎ+Üî²»n +-1¨Ë;÷ú¤9'Ëné°@'.„„ ôÞ»ÝuÌ µ2R]±mSqAnVjBtxpÀJŽKl­ÌŒõ-Дa·ŸK}GWž@CKG×ÀØÜMÃÓ'P›”†§QÓ@+ÝŽ§ÑÓ7Ú ü(‡úÿg¿¼ƒª:Ó0>;£LDŲH‘Þ.\zé½÷ÞA@Ä‚,`× ‚Š +-P@¸ +- +-jŒëºFE‚ÁMŒ àdãÚ˜‰™5»³ï÷}çÜ{nfÔÉ=ž?ßyžß÷{Þ0Á}á·»:Úð1š8µÌc¤%ÆDû{¹9Ù[››êëj©«()È¡å3–ÏÔ X>âo Ý—–Æ؇¢Ìš- Ø—#Ø×ÖÕg±M-¬A’ܽý‚Âìg‚ì¯/Ü1¨mhlFžù2ò°·Úƒ/?yêÓ}š«”ÆA†¿9wæÔ‰ã•åKŠ‰ê/Eªèëåæì`kenbÄÒÓåBúS)èÓ¢?Iˆù’x¿õÇ'ûR˜sgλõŽˆILÃv»춬¢º–ÓÔ‚ì Ö;÷<ê5Ãüԧ܀?% ·=0i½=CéíN¬·Yi‰±!þÞ| “' ›ñ9MýÉT Þ#¢¦} ôªkQo ‹~“3²—¯f,Ÿfzùüx÷AOßÀÐð/¿>…c¼"ÇG}AOBÃ~žè 43fá'ŽAž@Æ1$Ô¯O$ö'q±t`:Ö}‚}bûšÚ‹ô Í,mì\=}hÙ_æ`IYyeMý)lô„Æ =!!Éÿ>ì‹dqx®¢>ww¶ß¸ +-niâÔA¡ìݽ­ˆRý¸¨°`ow—ÅvÖ¦l–¾®6ú²}™úÒÒÑŸ°Oç°Ý‚ìËÉ+)«iê豌ͬì»z‚¼D'¤,Éw)B‹µ¼ªÔåk2Xoè!Ð!½:¾”,ÂÄ úzîß%)AƒðTýñÊ#Ð,X½<;=).24ÀÇÝÙÁÆÂÔÈ@¤ÞŽtbÞ@²|ñòa±Í,m]<}ââá+ð1JÈ1ZÐ1ÚnvácŒõŠ ¾°'¡ÆÜjoE·@šôïЗÐ@G[KS¶Á"m Õ…Š ðð‘ÁÃu„~%½x÷OŒîKaî#ìcÝçb_ò¡®©Z`bneëèìîEd?=kÙªµŠ¶#3@{ðôYð$nHèÆ<­1÷'’ú/©¹:Øß sõŸÄâ Ïõ5Ue¥Å;·l* ªàëéêdocifl¨¿H[“ ý™HôQš§p¡?Iýñ~t®Q¦¹ÔŸ>ƒtlS:ŸÀÐ(®ÞîÚ !>~Ô… Ön¬=½¹AþdXŒì‹ŒÉ@ÿ#²±ß¶¿Ý‡ývÅÒŒ”ø¨°@_!ÒÉé@0õ¥&Œú¨Ü¼cÈ+ +-<áÑ ©™¨ÑÔð©ãàBÓ×Û?ˆ©ÿüÅ+õÿC}øONñú7âIO‘'qsvÏÙÓ'A“ÁîÙBvOìžoüšáݳPaýŽÿ’O ö'ÓØ—À¾’²ª†–®‹mjam¿ØÕË~b*2ƒ‚­»öì?t´º–ÓÔBynLŸèÆ|²ÔgJÔyˆ®sGÛõ+—.@†‘¹ >oÞ°nU.¨>:ÈRìhkenbd°HGS:­À„þ´©úˆùRÑŸOŒÞÎœ%;wþ……*êZºúF&6ÎîÞþ!±IiY¹y°Xw¢«;96é«0긓'tLš8µÕe%Å;6oX»2gIjBtxŸ§ëb;+3c–žŽ†š²¢<Ïoq4ÆO}¾'†P>  ¾¾¡‰¹µ½“›—pDl"Æ9÷Íß¿mýîÖ÷äµÏÔÃ<ï¼w‡nL ó«–e¦&Ä„ûy¹9Ù[›ƒ#é€")É“Ý3c"väE÷ûŸ1±?gî|9À¾ŠH’¾!ˆ­‘ýèøäôl’Å%e0ë›Ïó<é!¤äç'ÿ¢óúµHOú¸?þ¹JSŸ7WúÝ”Ä5qêªÞ¿w×Ö‚5+r2S‘ºø@¡ím,LÙ,=]- Ue%€þ|ô¥ièO–@b>ÔŸ +-QÆÔç’ΘÎ/8<ùíJì·%eUµ D]èÁÚ?€©ÿìÅË· >•“ßQNF 'Hp‡÷>¼ÿ-¸çx‚»qݪeYi0ƒý™¨SÔ!êê¦qQ‡cñžÔ§oÁ >¾tšù„DÆ%¥£Ý³i+w÷ >ßh§,n€XÜ‹—¯È)ÄQ_°1#Ä“†‡ú°'Qin¬¯©„Ù³›Ìž%)ñÑaA¾¢@1§tãÝ?±Ø—BØŸBaÿ ‚}yE$4)Ù÷ô 5À…)Ú¾{ßA’ä×Á Þj~`¤ýÕæžû?ýÐ}«½õêå‹ç›jª*ÊJ‹wlÙ˜Ÿ·<;#9>:<ØŸ¨¾z‘¶È‹Â°—9LèFA_$ó%Á~çG}!¿÷WyEe5 ˆ1È‹NqXT|Ê’¥+Ö¬/Ú†B\I« BPŸ‹ºçbP'*'Âv@åäÛËÏ9“ððƒMùy¹ÙéI±‘! #}]-uÈ-¸ÓDî{Þ‚ùrw*ˆœÛÔÒÖÑÅÃ'04*>9ƒ{Šr| +-ôÞ¸ÙI=€C£>€"¨ÏmŒà%®ò_¢`õòìôä¸ÈÐG[KS¶ÔEu!(Ò<Ù š=’â>Æ>Ñ}öe¡- ûʪ`XöA ü‘&áÂnÛµ-º“§Ï^¸tåz[G¢þ[yÒGý13̘«Ïñ\ìï}xïr¸Väp(ÕG°¹à½šu DêboU_GS]e¡"LV°—Y_PП‚ /%ú:"ŸäÇ:”eH2y¶,Ê1uÎ>¡‘qÉHpó±àþê؉“X]ZA]àÂ`EÔÿ7PeXä`å³î?|†û„a¸ÄÀpQN¶¬^±4#9.*4bÍ:L}™Ï§‹ þ;eBøÒPjü.Pħ`±©0(,úœƒgÏ—ÜÙséÊ5¨óm\ç1$ŽIý?èƼþ4¨ÏmL^=gOsêªéÕ“— «'6", Vàû—˜†/!¡þ|buŸ}p$Ù¹¸.*j”ìÛØ;¹yù…EáÂäåoÚ²sOé¡ŠêZÄä íf–äI¿üúTõ?ì e˜*3¦þ@ÿ#”ᮎ¶ëW.]8{údݱ£‡÷ƒ¹ཚçúºZªÊJH^æÈ2¡ODŸ‚¾Dô'àMpå”TÔA^ŒL`²:¹yû‡DÀbÍÊ]µnã–Å¥‡ŽV×qˆº|×!~° +-ª‹0ì˜zAypïÇÛ]7Û®ýão_·45ÔV•—•|¹½hýš•9KRâ£Ã‚@PLØ,L}E0Üñ³N€úxöàš=PhCcsk;Ôg°¸ÄÔÌe".q‹\âñàÏ"Þ¿ÿŠ¡þæ!žñ¢£í4¢¢¬¤xÇæ kWæd¦¢Âøy¹.¶³276IRSV’—CŠ$fõHêñž¿î `_šDdæ¬Ùs ."û&æà.X“b“Ò² &DÊ«j›Ï_¼|&a7P¿QrÔE +-#”“õ1¾Qn˜V8n™9µÕ‡J‹Á\òórÑ^ +- òórs²·±@ƒR¬‚ë\˜¬3 /ý üøPG³ôr®‰¤ãû„tŸ‰},û2_Ì’Cd_˾™¥­ƒ3Ä$8"&!5 +-³¾hûî}T¯?uQ¿µ½s´œ07á‡æúèŸ(êC—ŸÁ\zÜ×sÿîÝí7®^¾n¨ù?ûåÁTÕµ†á¹s¯b FÅNKDéMPT¥7 t{¯Ø» t‘ÞAàQ#F DŒ½ HŒ"Bô–8ãܹßZkï³ËÙ8&sÖOøæ}Ÿõ¼DáÀ\ Ì°W]œì¬,Ìgcu!ª¯¬‹É •cèËD¿ëϺ^,Ã…äe’:Nñls kûÅËÜ<|×mÞ±çÀQ:ÄD]è7´;NPHR>r“ÒøâÙ“‡÷êj*K‹o^¿š—žtöÄaЃµ”¥Ž¶ÈL õ '  ¸ÃùŠÛ9Ø ü¼Õ£¡­o4êŒ$ÎÕÃÇoÓv|ˆ`î!Ð÷‡ñºù­ÄïOœús¯îveY14&/;#9>*<8àäÿ=Û7ùù¸»º8ÛY-˜; ,I[¤¡ +-ƒðèéâ÷'{Ü'û½hì;p°-û“Ô5´±À$tX¼ÜÍ +-ƒrr2 8<*ž±ƒTØ„¿²7!‹úìs¨O2ü×e”aÜ匔øèˆ`0—`.ëW{®\¾ÄÑÖ…xš¾v¸1*Hõ‡ ƒê÷íÓ‡ }™èKëqd¿'†äÙËP$/cÕ&ª3°srquØaÅ `+n©pˆÿà«‹((‚«Ñ®ë$)@»4íœìpPŒô´ÁÔ '  +-\ê3´“â!Puô™ïµy8Üés!bR/ žÖ¶÷Ÿ§>kóüëÃû6´y~k‚ÆЛ“›•ž›~¿ý»¶’ßÏÉÖý~ü; @mAwQ_zO"ö{÷&’ô-#ûaꛚÍ[hmï¼ Û*Ì Ø„ã’Ò³r¡0EP˜;¿4¦¶º¢¤° ÿJNfjbLdè¹ÓÇíÛ¹eý/Ð$›EóÌL uµ%©ÂæÆß<2êKë c_NŽ'ûJ*ªã&|7ESÇì€hÒ +-wïµQaNP…Éì`a¸IénºKzܽʘ Êpc=¦>d¸2œ›™–K›Ë¶k}ÜW ½Šºll ‹T_R}Hñyý^’ ßÝø“?vQ¿Žña#©‹Ó9n¨DÇ}×ö{‡¨ÿ‰àN8*wi‰± îÐ*$~`jl £‰©¯Œƒ2¨ß¯KŽË£>é3¹ÃEe|p8üûÙ ßÏ‹ü~ pa\…c6Ï;Þæë²ðäi~&þüªèÏ/%!}~GÉçç šdo??ê ªôp]"õ ª"+‰T^»ØDz?ú‚í@]C[ßhú¬9ó-mé `=8“˜š™s9¿ ô ¨/i +-E…÷º÷ÔãQ_XàJP†is9ƒ«¼aתï—:ÚZ.˜;kºep"Õ Žª³ ú_àµï¸£qŠuôÁ]Ì-Ðbuóð]·yûžGOGDǧdüó‡úùVYÕí:ÀÝó†—4îHˆy¸%…'0 omyûæ·_Ñ,|xÏB$Y,AØ +-QYùýG›Eó瘚В«¬Èà®·w¦>ÿ÷4N‘Þ1—W,sA¦Íåô1d.XàÐ^?g¦‰¡žÖÔÉ(ÄÊ´êCT_NNúÝ…¿ÀãRãbŒåe8•bâ.€;¼X}üîÎ…GÅ%§ÜäÖuDrEÔÿßçywóúÕ¼ìô丨ð Ä»Ý0 ½W­Xêdk)ŠÊ„qcTÀPRä¿!AA9éŒä²Ï@QŸ>ÃH%Ö,¬ìœ]\=|ü6‘Ï/$":!åùüÊ«p—áóƒ.¿•8y¨ÏùûšÐß‹ý}è +-YéIqÂÈßǹ‚)Ì%dI¸/¢+Ȩ/Õ'„}FöÒA!£ÐÀØÔlÞBk‡ÅËÜ ËÇ? ,lÍ}ÆÒÜ®æ®ö\¹|±ƒõB¤¹ðè¬ A ü ëÔç^úû´tY‹Ç‹,žgƒÂ.Æ%¥gå]½~³¸´²UùÙ n•ùG`CŸº]˜6Ž&U•Óƒ'*"4‰ öàÑPG…!__W {í?öy²’¢0t8¬Â1j'OÕÖ3BÔ·´uZºÂÝ{íFD}ˆJxT\rz6ŽJY%¡>$,Ùa_ø}Ü—@ýqP¹¦¢”Ù«açq‘·nÀ{ÕÑfÑü93M õ´¦õǨ(aÕ§Ô…Nñ?dÐÿOÐrñd¥Ü…¤Üe¸ËFâ.ÜSÀkd§XLs9YáO@® Eˆ½vž(3SC]­)ßM»ÑÜÞÖ\¡Å7hðÐá#UƨM˜ó8ØÉ~_Q_F*©`êké±Á{­dA`SŸ6K°/ þÝG}Rdbž¾ä_ÎÉLMŒ};}ì £o6Dßt5q‘UE!î'¦ú2èK÷q¨ÏžxìSš{æ|ØÅؤ´¬Ü+ùE¥5w~yðøY}cÓ«7Í-­mbì.âO,≲"®\Ï­,ÃÄËNOŽ‹ +-Ïõç)–!ƒÁ.¤ ¡ÓÔ—tReúë³²svqõðñÛDOHDtBÊ%2xÊ«jïÞô´¾áå«×Í-@ýŸ¥>ÜFt {‡hR(_“PaèŸn€~>Ö zºÈº"ÝÇ`Ÿ#ûýqT† ¾Ð³ÐØÔlþ"Ç%Ì,$}I‡¾\¿YTʱ$ÒJ“hêwüb©ênê‹Büôñƒ»µÕå%…7®]ι”šs!$ðÔ±ƒ{wl^çëé¶l±½µ…ùìÓ t4Õ'Këâž2è¹'¤¹ýåÿÏ~yGeqfaüd÷ìnÖ`,M”"ŠX. *"6PÞ¤I$¢%–X±€ +-**)R£ˆj4š¥£‰Š%qÏf7q÷ì}ßyg¾™ùæCDÁÏwÿœÿÞ;Ïó»Ï3b¤ì¨OÇ((akëÍ›YØ8,óðYñù_~õõîý‡ŽžŒKJËÌ-¸P\z­ª¦ï>"£b>ñ$Rÿ¢>¨¥»³­åÞ[Mõ5•åW.ågg¤$ÆDE†ïÛµmÓºÕ+ý¼Üœí¬–,š7g¦¾.'çŠïOoH}p#úc ð¨Lšª®5Ý`–ñ|SskûeîÞþAkÖoÞŽvp"6)53‡ÚAmC3\¾tùø;x)‘úÜ`Ãt¶£ð ƒbb’7Ä$k ŽaäE}gH¿ûŽt^=âaŸÂ~qñð X…ü²çP?N”’ꨔÔÑuÿ§GÙÔ§°Os¿_äÿCPŸq%ˆ¸(?'#•åã ìcsÓyƳ tµˆ•Ù"æV)ôßþpÂ>]Y‡ Ç*–WâÏÊÞ™sx(ç6!ê·uv?xø¸GbÎåQ_ è +-"/òÉþÞîÎöV8#Lµ¨"µÐÅ'–× +-wØÊ2ˆú¢hhOg9™º|ÈÉ'ãN§ÍåôQß!ñ¬àÔgêN'Ô;7›ê«Ù‡/BÌ0s؆Œ„È°R’”ú0| X~üBkÅZ”’@+G%h'Ê/¿bês±/qÞ=÷‰ˆYÔg|ÜM|ÌJo â°Ð[7¢ôæéædg)”Þˆ?ú;Ž.áFýwýëß« ʹPYG9w‚ê”iZº3çÌ[´ÄÒÎÉÍÓoåêu·î ‹ˆŠNHIÏÎ+ºt¥¼¢º® UÖ¶ŽnTYŸ>ûùŠú<äq¨OÔòo^3lýáûïn4ÔV}{õò7¹gÓ’âN=|`Ï×_}É]³ƳIÐUFAWNöÍ×Ûå#ùMGÏÐhîÂÅKm]–û¬Z»aËŽ½?Ÿ|&ëÜù‹%e(¿¡€“{]úì”ÔFQ¿¨ûfS]uEYÉż¬ôä„èãG"Äúyº:ÙJ2ŒÀᓺåm‹ú|­È±RÒ ”’, zx#êS½ðd\P¿Q¿ŠPŸôBHIH,tØÇØï ø9ì|î‹û˜)¬]€ú(ºTõ ó²ÓSˆÃˆˆ}=]m-/412Ô×ÑT›Ë]m–š-˜;ÛPO[ä2^IAÔ ©ŒðÆÔgV ; +-­QV0­ÀÒÖÉÕÓ/08„:|Ç£’áð¡TT×sßsšú¼º#@}ÖÝ{w¯ß½ÆZÎ ðÅÀ†ÑÓÁà €adêã”$µËÛnØgõB’’TTõ õÍúî@ý5ë õc“Ò2s .\¾z­ª¶O}öõEØïm„È?ØÜç©ÙQ¿çñCª°r£K<Š.”ˆÅE¬$ b6õßõ߆ÈøÏlä 6‚tµõ¨Êjãàâá@*ë!ve7ƒŒ[ÚéÊJTŒ˜÷’Å<†úÿ£ÕòMýç½%]‰!A€yý¦>ZØáS‡êŽ&©;VvÎn^¨îlÚ¶k_xdTLbJFv>ª;•5õÍ·îÜkiëì&FÞ›úðYÓv:Û[€úÍÐv®•_(ÈÍÄmçÐþÝܶ3µ©“¸woH?ïžtú8\ê±õ‰X”‘X´t fÍ™gjneïìîíDSÿ¡~qé5Æ.È.¸bµ0Øï øYì7Ü—D}¶¯#Ÿ?—u&™]|<\l(ë!«ðDÌŠ.Òì2 à º¢Ê:Š©¬ÚTe%á…È8<dœš™ƒeL3¯]€y¿÷…úÜjx ªa%Tâü쌔ʨˆ°}»¶mZ·z¥Ÿ§›“å’EóæÌÔ×Õœ6E•U …’nßW ÁÈòØÈL|㙽ªš†æ[Œ‘ÙwÛv¸Ôç. G´€æúšÊòÒâ¢üœŒÔĘ‘á°€Íë×ù{¹;Û[™›Î7že0]K £¬(?0røÇCeð¤ÔȦ¾PD0‡ˆàîEIJ/\L,´] µÐا¸ßûðÉ/ÀýA¤þoÂÔo¬Ö8Dý=Ttñ¡¢ ˆ¢ ±’ü˜Oå(ê#‹¢‹TÅ2••Ç<^Ä’nhXDTL“t«ë›nÞ¾ûHº~Ceí õ…£.‚^C Žºù9™©‰±z»·ó¡§«¥Ž¨¯HQ Ç«†}V‹€‘e`#?‘cß½ÙÆÐv¬–yx¯ mç0i;TÛi¼ñ­µGõÑúL}~Ù©¯®@g//;=%!Î*;Âg¯×Hýò–G$b¨@¨¯/²‹] OÄ& +-PÙÔ) ‡}‚}†üÿ1ôKâþàSÿ—ŸŸawu´‚ŠoÐÔÏ=›vVB}o÷eöÖÑE$bnt‘ªømPxáËXGßÐÈdábK['WOßÀà[wì=xäxt|rzV^áÅ’²Šëuˆú­]˜úÏhêó Ç¨…] ‘^êwµ·þðýw7j«®]½|¡ 73- ëe7Ñ‹èÅ”•DQ·¿Ð¿{¢¶£ 4^e’š†¶ÞŒÙs˜-µqtYî°jí†-°€ÃÇNÅŸ>söÜùoJʾ}åÄ¡OÞ/É/e% ÏeIŽ?uüÈÁ½;¶lXè»ÜÕÑvéâ…&F†ú:šj“'â²3JV ìH©? CÄBÔÂØÔ‚í2ÛSßÒÎ ¨¿’Ký|6õÛDÔ§Ã>`Ÿïÿî +-õ_ +-S¹¸±S»8»˜ÊnÞì솢‹²4º òèñà ‚ÞX€ÞÄÉj:z†\èá¨{ìT=á¨ûO¡¨+@ý^Sê†ñT7ê­ +-ðñpq°±0[0wö =m ºŽuC^JxÐ>þÛ‡CõGÐÔ' @go©­#}öv†¢³—Àœ½ê:ªìtô^v¨/xõk«X) ¿®ÿý@ýñJ +-Ìû?ò!2ŒÔ/9<µ`» ¥í2Ô‚©odB¨ï'¢~LbjEýÊšzD}¢–ÇOžbê³°ÿêa‘¿î4ôÅ+vñ}B}”ÝJ‹QvKMŠ=NSßËÍÙÎJ¨°J£Ë`ôXQW^IYeÒTuíé3fÏ7³°vXæá½âó/ÖoÞ¾{ÿ¡£'c“Ò2syõþ õiê½dQ‘‹¸^žcêww´õo6ÕU㬛—•žM²n'ëêé°©7QôÒê ù•YªìÓéÍ“òñÎаˆ¨˜„”Œì¼¢KWʉQzCï ¿ŸM}vHb¨ßÙÞrïέæ†Ê/9Ø/LJZáí]‡JI¤ë «''‹ºN¯žt^gz± E}5P Êlµ êGQÔ/*.-Q¿ Ûå) û€}Ä}Bþ_{ùyà<ìK þLýv6õóAʼnˆúûvmÛ´nõJ?/7';KŠú:õÅ +-«TÄ;\cêÉ ýxøÈOäF&¯¨¬¢:U]KרojneïìîåÄK/„zM"êõp¨÷{_¨ÿQÿñÃÝm{MõÕ•åW.åe§§$ÄDE„…îܺ1ãéæd ‚11‚ê#ÁŒ~#Á0ïç–ôþ±Šã&¨N™ïGÔ7·²Ãï_³~3õþX&½I¾zܮå¾Øódž_ƒŸŸŸ‘’Åø…•’ tµÔÁ/ÊŠò8%õ™”$5ÌŽ ]HH¢š!¡þbK[õQFHLá¸å.Mýž§ÏHØGØ'à‡ù—ÄaÈÏ€Ÿ‡ýÿ<ödüQŸj¬-@}’]Šòs2RAÅ õ)£è&V£LÌD7iaŒáȘPo(—zšº$ëÚ:¹‚ŽƒC6nÅY7:!%=;¯ðbIYEu]ÓÍÛwIgý?ûõTå™Å|fÇltU&šÝP„ØM ½ˆ5Vi‚4¥ (ŠÄ²–]ѵÄ"AŠ€RD£Q"Ho¢Hï‚4݉ggÏó¼ý½…¢—Ìdîùvï·sï9¿çúÃQ_\ØÍb†Ž nöć#WŸÝÿTêÕƒ[GU“xõLÌ­mEÜ:ùE¥eÕu Í´ú¨ýa«/æÔ ô#½ïw¸8l&÷…’øíKF‚5´úÊêZ”ú›±úä¶ õã õs ñ¶Ôaõ»~E·áÁ> ?QoEM?¿÷%Î>gŒß‘ê÷Ñê“KÌÊ.¼)ÖGêk©+#õd‘úS‘úÒƒuLŠœc~ÖeݬÔšZØØ;»ºï;tôÄ™ Þ¾!Qq‰) ~fNAqé«Êj˜c¬~o?ÁÞ;{œy!æ7ÞÀ°Ã䄘Ȱ ÿ«—Ïòô8°ÇmûV[ksƒu«–/ÑÑFØ~ûlõñ­ƒÖX^«¯¦¹héŠÕzL6ÙØ9¹ºï=xäøéó^¾ÁáQ± )÷¥gæäóÛÃm_}öº€ú½XýæƺêÊW¥Å9™éî§$ÆF…‡øz_8sâè¡}î®Îö6¦†úkVð÷å=i¨„Ž‹8õéŒ$D}:ºº{^÷’ì¿áèþFDÑô3ð³ÝöÅ©OF7òbMõCõí7[l4$ÔWã«/.cSÜô2æx"=ÇòŠ3=e5-Š=k;'»{W¯‡G’ì »o„…]!ê3Ç!¸×ŠÜõ‹ó ÷b#ïùz?}üÈÁ½»¶;ÙYo2Ù ·zùÒEšjß|5oö—Šò²ÿ˜3y”#Þ&ò×XMKÚ'½Ô£çGHÔ«ˆo(úiø ÷Ç”ý᨟‹ÔOMŠõýÈì‚ÔGÙO1RŸ5Å£Ýai¸„Þ¬v?›þwYù8ìªjê,Y¾j±¹•íÖmn{xxž:wÙÇ?(ìVÌä´‡O2²òŠž¿,¯ªmhbÔ§Ü{Ïržz`~ç¦Ý–ÆúšÊW/ í>ûåç)‰qQ‚iMŒ.51¼œ0R÷½O‘úÜSG›\c öû†ÞŒŽOJ…5~†Ö¸¼ª¦¶¸³©?8¤úð«ÐÍó×¥(/ ]:wïÄÜ‚KLJºt¶mµµ27¦/ôæ—³/Rõ%\âÔ—ç¨oˆÆÅ™§~Ò=<.($TêÃÀà°ßO™>ÈÖ¾_ (ü±ü‚îû‚êÓcÜÒTƸ¤0÷ÙÓÇR“â¢#BhõÝ]ìm6™RÙ…JnäOTÿþÇÿœ%dŽ'‚ú2 þr3”fÍ]°PUCgñ²•k×›YmqtÙ¹{ÿác'Ï +-­/‡ážHõûûõ›êkªÊ_ ‰õñÄ œ@_‡Ìu¨N^‡rH}™Ñ¦]žú¨ûI“§Ý+àîU4´q÷Ff–L÷—8ÝçëÍãªÏkž³.($Ý»ûæë?^¹töä±ÃûwïtqÜbif´~íÊe‹µ5T.˜;Ki†R_Fø¾Hæã—ˆm¡ÔŸ=Ÿ†"Ô¦Õ/~QVQ]‹ÔoïìêõûèdªÇÂ÷ÕKñ‰¤ÃϸωûcÀ>÷då«ÏßaHn^´úv6ÌÅÊÊ."¦øþÇÿ¤EÏñ8zŽ±{Ó>'Ü›¿P…N»–Ì _ð†´—”úàç_ˆøRYS߈nV8Yû†£>'î¾få„ç…yø.þ@ÂçÀÀ§®²pþœYJ +-ß´Ïd¦LžDŽÌÈÕÖ=çÍ[²l%\:fV¶ŽÔ¥s‰}édÃ¥ƒ·¸™Qÿ¿h©æ‡P€zòˆC§¤@ä“g¹Ñ?y¬æ?ç4?š'E_b%J}˜PÿËÙó¾Bê/]A¨oÏRŸ> Ѳ—¢y©o„éèÂa¿—æœöKÿšW$þ$üÈý·È}^Ü—<ûÂÔï§w˜=ƉqQXýó§9¸w¨o ꣋uçbå¨?Nª¾d‹Ÿv?÷¨£U8Zñ ¯Ö34µ°±wrußwèè‰3ç½|B£bSî?JÏÌÉǃ\s ê÷€úƒX}|ôÀ°&æ7vNhmj¨­®({^”—ñäaÚÝ;1·nùû@Üõô8°Çm›£­•™±¨¿DGC•wG Ÿ˜KG~ÚâoT5u–,_µÎÀÄÜÚvëö]{õ/_½›ŒšÏfšoÚüÿD¨ÿŽR¿«ßÜXW]ùª´¸ '3ýÑý”ÄبpNH²·±05D!IWKvìØØaúdeÂK¨OŒq0£þö­vÖæ&H}PV˜R_ ¸IÕ—\qÕǃ<‰9Z1|jšhõ6˜l²¶#à;~š„/&ânzFv~†o¨¸+D},ß È‡Õon¨õK‹ò³A¾´ä„˜È° kW/Ÿ;åéGÆ–;2z +-ÉnDóÓš7Ýdc‡ž<ÔÊðD1Þwuuuò +-¾BôðsÜ[ö‡¯~Bl$VŸcPñÊe‹ÙêO¢¾tŠ%XBÔŸ4y +-V_n†Ò¬¹ ªhh/^¶ríz#3Ë-.;wï?|ì$šäë8¿ÜûéñÓ¬ÜÂ’(¾4µ´uv‹–OŒúœ‘))È…óðAjb\TDH€Ÿ÷…3'ŽÚçîêlocaj¨êëj©)=oöLE"ïNUÞåª?aÂ'Ÿ"õeúr¤úêZºß~·Fßh£åfz‹ýÈìFöŽ^Ó:ÞP¿¥©©_R˜›õôñO÷’âoß ½þã•‹gO;¼÷N‡-–fFë׺hk¨Iã¡õaß9ÒyZ}?FýÌœ|‘*‘úÍ­m ~vœ,B|ì}T;§à L7upÜd,ÔÜò±úÉ ~X£> +-/fÆì1Vû6X6x"L±Tý1)r’DZ©Oȧ„äSQ×Æò¡Iv 'åÝ@1yw`8ê¿çÓ×ôÕô=úR“â£o†ú]¹øÃþý¯~¿ÃÙa³ÅF#ý5ß}««¥®üõü9 ¾¥þ(f†§>çÅSPš5g>çÅs$_¼³—àÅ»qîüâå²ïœ^æÎ![B}^R\tDH Ÿ·ÖµÕU uf]¤!i¬êã©ÿª²º¶¾±¹¥­½ƒPœ(:ácïÛÚÚZ9_ ú;©—‚qŒÙ¯~uE¨Ÿ ê§%'Ä€úþ>Œú[@}:¼cÌÞàæ6i®òî_QÞŠÔ—%󮚖.L²ž¡©…½“«û¾CGOœ>ï囘rÿQz&ºZË*«ë›±ú½0‰X¾wbÔ眇}½=x[›Pà}^˜‡ï]¼7D^ujf€¾ÑÞ‡"^<Ö£ª¡ƒÔ706³²uÜæ¶ç€‡'¨ïãv+æNrÚÃ'Ù°ÄeÕµ ÍŒúx‡RÿðŒT€3RJblTxH€¯uæ8á3G:sðƒ'ûž´FQAýôÌÿ³_gaQ\YÀ¿Œ“y· ‚ ¸EÇD‘UÜe”qCT\PDÅw£&š¨‰»F\ЀTQ@DDPp‹»"Ð4K7Mïݸ "J'#sî­ª®ª®jÔÖ&/}žê¥Î÷ó»ÿsŸV_o¬Aìc÷ŸPâㄽ7 ì2ˆþ‡øøëêž×CÄz‰â~ìÿ9êß¹qõâù³§S‘ú{È õŒÆ˜¡þßíê7W±ÕÇ“Ü +-&ÙÁÑÉ™œdo¿~ƒG‡N +-ŒŠ^²bõº[wîK8r<ít6EŸèS3è{ÅCŸib˜êÃÌÐê´*˜™Rq±if’É™1»û’÷¡»«ËçNLõ?…™iñêS­³—Ø¥ƒ{gPßÃ˯ïÀ€À‘cBÃÂgàÖ×nÀ­'OËÌ>¼ûèÁ“£¯æaíÓg–<õQç¯`[ÈÎ9))!.6fÛÆu«W,‰ŽŠ Ÿ<*0`P??o¯ÿùeçŽõÛØ×¥¹ÊZõ÷êŸË»Œ¦XTRV)W¨ÔZ=„}Ì>¸#þcJ|¾^¯×étZªà[§×#úkÐ[ñˆvŸŒû|ìÛ(ìóÞ¬XýR}±€³ÁTn›0.ˆ>Y9êjãf¨OÞ>_‚¾0³À›œšq67Ô/(†ü"S¨´z:ðbû`-…}FâÅö=­}Xú/÷aBq"ûf„‡…Ž0°¯Ÿ—¨ßÙ½VìkÉšwéÛºC;öƒg~ðàÌAžù™#”H+«”Œ3ÇÔ9¯úÌ+çµÙ•#/§Þ»\r[ˆÎ‰÷.,„èÜ×Ëãëî_6ݹ}]lQ þQ¤>¬~…\¡Tku#Šî¨zh"¯Õj45£4d?–¿þÚ'OÁýçà>‡ýFû6@ߢú8½Ðsœ‘š|øà~Zýé þh¤~ó“Õ>ÆÍW&úèInÕ¦-VßÕ­¨ßËÓ×Àa#‚ÆMœ1kÞ¢åßþðÓ8[>v2#+'ÿÊõÛE¢¤¾FoõŸÖÕ¿h൫>÷>TVUJ%ÂB¤þ…s™é)I‰ñTâ]0‡H¼ÿþ3ñ‚}V©Ï{æ´…3§=R¿ ½Ä£ÆŽŸ?û6 û<Lç6JýP?ÔGs¼÷ŽÍ?~¿jRò„±võÿôbÛgRÙêwéÖ£§§ÿÁC‡ãQžEŽ2²˜~ûø¯Eõ^Ôcõ: ¨_V",ºwëÚå¼sgÒOMŒß·kû¦õkV.]0wæ´ÉãÇbõûx÷õ»€úxhÚCó·÷³Î¡õ–&õÝ:¢Î{ûôátŽ—øØÉSY9yðÞ݃÷®ŒxwÕçi\O4."Ï9sêıC¨mY8—ÎHþ>žh[:¹¹º@ã õíÛbë²Rý],õ ŠEi…¬ªZañ ~ãª!ȇâ#ð««Š*F)†»ØGî×qØcÆ~3¨OÞ¬-N/b:½£ÕGslRß›Pß´ÀïÛìeu5e_Â>ï>ýM‰w™xcb㦤ggk¡P"õÕ:Vÿ9¥þMªßÈÆïÉãDäÅøÁÐäådaüöíâNTh Có^øñ½w­ñ{çB¿w…+g‚éÊÙŒ¯œd¸rrñ•S,*EWŽV_Wγºú—”údãoQŸ:rÈ玤þâ¹;`ö܆çδ-и½¬« þ;E°+å ¾R­Ñê #¸_ƒÄgâ#ðår™¬ÒT2™\ôð3Üoš}[„}Ö ÿÁV_¯5¿YYéeætrŽ™±ÍÉ®~sÛ><Ê­`”Ñ(»£Qöðöë7( pTpè¤ðȨè%+V¯Û¸-fo\BÒñ´ÓÙç/‚ú÷bi…¼Z­5`ü@ý†Wx¹ê›f†Bý—õu††:øv9ˆyƒ@ýtäuÆ‘·õûG^ Wì°‹«{§®Ý¿êåéë?`È°A!§FÌž¿øPËÏ{~ùõHrêé³¹¯Þ¸s¿X\ +-«¨Æ‘ú6fÛÆu«W,‰ž>)49~Þ°-?äȱ—ueú۹ꗖWÊJ²»Ä7èõ:­–$Äð+*ÊËËËÈ*/¯¨úA~€Ÿvß2û¶ ûï®>Ķ“8¶m§ÔGé…œãÞäîÔîLõ[ØÕ·}1íc² ¨øyxùö8rLHØÔ¿ïÖnغ“ƒ_¹Üy1~¯^s"/¯ú04¿3DÐÄûwn\½˜{ötjò‘_Ùóó–Ÿ@ýÅógGL4bØþ¾ž½¾êÞµ“»« šš¶m¬V¿c‡)õ‰Æ{1Š&‡çîõÜÝa>wµôsg~äð¨ÿ_Ö²´X}±÷}>ûtêñ# q{wnÝ°ö»oGGÍ 320``_?/¬¾{óm±g$—õê'‚ú™ þÕ·A}qiY¥¼ªÓ îEÅ|‚|$~Y™TZZZBVi©T +-öWü´ûdÜçaß–aÿíê—ˆŠúy þ B}ÓÍ:i¼yzáªÿûÛºšÀÏ,òŽ›8%bö¼EˉȻÿàáä“Y¹ùW®ß.(•–Ë*ÞˆÔ¯Ãê#ý t4š…}‹™÷I-~iLýæG͘Bèçë…ÔïÌQŸÌ +-ï¨>ÿsG9^~ýúÁ¡aŒ#'Žœ”´ÌlHn7ï +-$ÒÊ*¥Zgxð¨öi¨oê›W}îÊHbˆH7®æçžÍHM>ÌûÚõµôÚÙ3’ÍË*õ7ꧤgBNõï +-@ý +-Y•Ë îãB1Ÿ0‘/‘ˆÅ"²Äb‰¤ÉOÀO¸qŸÃþë׶ûÜ6 ²Q¯!Õ¿wëÚ弜3§NM¤ÕŸ9 ߬ ¾…ôòW»úÍQŸ0õ£ÕwplïìêÖ©K·==}üû:|ô¸ S¦Ï"ÌŽÝû:vâÔ™œ¼Ë×nÝ+•”~ >Ö¯þE¯~\õIþ@ýº§µtjeU¥T"(¼{ó·K²3ÓR’âbc¶m\·zÅ’è¨HȼÁ)órÕo;ìàèäLî°‡·ÚáQÁã'M‹œ³`éÊ5ë7úñh‡Ïœ»€ú.Jpß:ªï·«Ëhj»áE}{YPDÊÏÉÊ8yìðÁý»wlþñûUËÍ›1e¸ Cð÷ñìÕ£[×Nn®.í­»qìeeY£þz¶ú×±ú%Ò +-™œìà>”Å|Ú| ‰/ +-‚b²¡P$Fðî£ß!î î3ØÿýÕ+2ìÿÏvaŸ_ÌÕW*de”úçΤƒúñ±1&õÑúÜýå̱]}Û–™ú0Ë-[µnûRÿ ·ŽH}˜åþx–ÇOž6s.¡Ìr<º[ùõ³”y›P¿«oÔi@ý2‰°M͘š<5Ûè¬À¹Ú9X¡>»oR}ž¾‡“}/\Fö}àÐQúµš^»ÇOد]£Eõß°Ôg´]"dD¤CdDZµláÜ™Ó'O;zøÐÁýûøôîÙ£[—Žn_8·wtø¬mëV-¡m»úÍQV«ÏV_T"-¯”£°¯Rƒû >Šù¤ùùñ…‚⢢ÂÂûd (øÁý*EµJ­ÕéÍÙÿf-Þ…}>õéøÂdz‰Ô6‡•ÚþÏ~GEu_q?­Mõ¸à’¦UYÄhÍ1‚  +--6Øj*( €, ¸à¾Å¥j¢&Šu©ÑàDö}X`††f˜…MDv•UÔš¤÷÷{ofÞ”Iÿ˜ûÇûósϹ÷óû^¸YµêÿJ¥V?õ™wåjwïuë7ïØ{ð ”y¯\ÿ.*>9=+7Ÿ_,’–WÝ®½×ØÜ +-êwúO±~?ö«>=ôvv´ÝW™;·k׬Zaê[YÌ#øÓSð×[ý~ǦŸ×N—TßÌByãø+nœàЈ˜D“Åæ „â²Êêš:PÿA[GWwϹúô•ëK}ú‰ƒ;>7/+=%^±,ª´-ì¨mkÕ×@ BýU¤úŸÓÕg±¹ü"¡XZVI„}ì>Jùwkéæ#ò‹‹‚ÂB>Y……AQ1?¸yÿöÚ»÷êÕ°ÿüùð†}ºú/^66¿à/ûû?—­tq÷ò[¸}Ï#ǃÎ^¼r-<2%NA‘H‚ÕohnEü=ê!Ô¡Fý_~V™¬þEV¨«©®,—xl“‘|þô‰£‡ö¡Ðëó†Ð;þTÔGmÕ?ÔŸ¢«oꙘYZ/Z¼ÔÞÁÙÕÓ×Ó¶Ýû;yæ|ðÕ°ÈؤT&´-J°ú MŠ¶¿§µÝ—ú8!={ +-êwú­ ~ííªr©¨˜ŸŸ›•–~ýÊųAÔeÁi!D$¤¾ÞÔ? íÄÑÖkPꯥ©óQ“P¿TZVЮ©÷QùØü*d¾‚üB~ÇåróóóáËåð 1üØýŠJ÷ïÖÉÙïÀì#õŸ wØW·¿ô£ÅdB}d…ú^î.ŽZõÿJ¡Ÿr–H}]óf™˜/Àü9:»yú’ü]¸¬à§Ž?5¡W­úøB|Òó©ßÚÔ@¨/Äê§&ÅF†]õO;¼÷¶Mþ>ž®NöKmm¬-ÍLŒ@}C}]¤þD¤>ml†ª>­m¬þ2hÛ Ú†ÇŽh=vIj»>N5êÓ»nnÀêKDEœœÌ´¤¸Èðk—/œ :~äÀží¾^nÊe1†e™N.‹V}MÖ€ÕÿT®þNŠúqÉ©LV¨_R*‘•ƒÙÀ>¸_‹ÉÇæW’æËÉçæs8lv.6›ÃÉùüÈ}©¬¼Ý $û0û +-ûWâ VŸdP òÒÅ‹¬˜›ÈÕÇ뫃CÛ ÖW[oW}ñG½6¶z\=} ôîÚwèè‰ÓzC#b`x‚± ©_ßÔ‚øëîy,Wÿ%môê÷J½4ÿÊTýCêcÿ<ÝœíÑØX*ÇFmX¨úê»éH}Ssꉳ™râÀ +-§eåæó‹DR¬~cóý‡íÝ þ÷ýªßû¡½uÚ[GtÞ:_OWg‡þ»~º¡]–a­·T? ©Ÿ_ Ô¯Bìƒû5(æcó+ÊdRÂ|L>¼ÏÍÉa‘•““›ÇÆð#÷E¥)ŠûöÛ;PØ'Ù'Ãþëa ûý¨G+¨O;Z¯)ÕGñÅ™P_>Èú¤úã°ú¿×ª¯©RQ†yÌØqã'LúÃ'OÕŸêÏ™kfaec»Än…ÓÊáz)äÆ͘FFv·°¤TVqëÎÝúÆìUýWRÿñ£.›V”z¥¢"›Ì´ä8ÚØar"N+õå]ÓWxŠžZacÓùXýå+W»{¯[¿yÇÞƒ_|uêÜ7W®Ÿ’ŽÔ/.•–C×÷È®ê¿ì[}XÄW/)»‚ÔoiªGêËÄ%X}FbLDh\8'ŽÚ·këF¸pì–ØÚXÁ…3‡zá ºkm ½­þBýs +-õ³±ú"1»±Eš_^&•”Š„È|”òA|VvVVf&WffVv6+'àGî ÑOÊ•ìßÐÖÞÙ…&-ÞÊ°?¼êË'ÖW®~¯õ½|A©>=´ýy9È@ýÑZõ5Ytõñ0+Ô×›ö!e˜—¯Z½Ö{Ý4ÌØ¿ooþÁÝ +-þU À¿Þê÷'b4:Ïúꋃ{wl^ïçíî²r9V¾©ñÇÍœn ‡ÕŸ 3Žžz;4õ'½ÿÁdr…çÍWíú˯q×7£RÞôÖ½îSýW4õQÓ >4]!+-)äæeg0bnÞ¹ôßÿ|ýå¿?ß¹eãgÿZ»fÕ +-»%ŸØXY˜ÍEêOÓŸ*_mDÒX½#õ‹ °«ûPÕ¤ù2‰¸TXR$àã˜ÈÏdf¤§§‘•žžÁùY¹yØ}÷e +-ö›aÛ::»ú ûšU¿€“ƒÔDêËÖÊÑjfb¤Œ/Zõ5_}úÃ,O½ ‰ÔëâîíG¦Þ ³!õFÅ'§áÔ+’–WÝ®½×ØÜ +-þu¡ÌñŒHS_`# `10=%!úæo¿õ1€Öy¯]½jù§ÿøä¯ çÏÃêOÓ›:ùƒ÷'QÕÿÝ@ÔÿMﮩoºpˆ¶#WxëN• ‡Í+,Ë*ªkîÖCÖjëèRQÿ§7ª/ß²iôÔqó²ÒSà©#š†§Nµé¹ò¦Ñ²èh—Eƒ5Xõ7(Ô¿r=©Ÿ‘Ëá ‘×À>¸_}ëV•"è— +- ¸ùlˆù@~zZj*#%%WJ +-#5 ÁÝçòøâ7˜ý{ °v¶Ã>ê!Ô'WoXÂþ›Õ—ê'ÅE†QÔ÷'Õ·µ±¦­ +-õßÓ²¦J½úh˜§€ú3fÍ665_€Ô_æèâæå¸}Ï#ǃÎ^¸|-<2.)-3‡SP$’`õ`ü@4|}©ÿ‹À×tõ;Úpì­©®‰û½@‹ysç|4óCU:7½/œ1 +-õõ õÍ,¬ll—Ø­pZãáêïÚwèè‰ÓçƒCB#bL›'ŠË*«kêšM“ê¿ê_ýûHHò'*œ³AÇ üÀÐS§­·©w¤~p aدBäA_Šƒ~!Ÿ—ÏœŸ)ÄONJLL +11)9…ðgf±rÙùªì7µÀ¶÷öß©úýä—Öæªú©Hý«ÁJõ}<]ì—ØÚXYö:Zµêk¶ÈiAæ±:ã±úº† ¾‘‰¹¥õ¢ÅKíœ]=}6mÛ½ÿð±“g._ ‹Œ…ÕÅ%½Ä£G66¤€„úOzº»:Ú€úu5Õ•eb¡€Çf1‰1¡!—Ο>qôо][7~æã±Æi…š‹^s3f0±—®þÈQ£F#õ'"õuõ ‘ú&f–H}Ü´?Ù4¨5,5 Oº¦ 6ýs¿ê?…]A=«ì +-JHá(!úöl ðórsq\†Õ775š=k†¡.V¼ÎX…ú#´êw QýSX}ˆGŒŒ,PŸ_T"Keˆ}p¿²²}±Hˆƒ>‡ 9?#-‘Ÿƒ+66.>àg¤‚ûÙ9÷ È£¡²úNm]}csËý‡mÝ”°¯Tÿ' ¨ßÕÙ.Ÿä2‰M235)©Û+WßÔïc{µêk¶T$Õï  ƒ“«¨.ö–ˆeÀú¦`wÏcyì}©^}¥€/`nú„€M +-õ9,47ô¹¡¤ê8©?zÔÈ‘CUŸúÔéÓž:Gg7xêåOÝåka”§Œzà A?;“™æ'&ÄÅÆDGEEFF@EFFEEÇÄüÈ}&Äýÿ±_çAMŸiÀ§»;³;+jµîº*µ×z€ â}µ^€ +- +- +-¨°ŠUl‹m±-ÚŠÜ„@ á I¸ä”#„„C- °Ze»;£«Îìó¾¿$ürpHwvòüÁŸ™y‡ïóù}%û­mröûÿqÊþ ²ì?“³? ê“úË­›ò$Ãöfg¦0ðöjv¶¥„ú†„úÓ´©ÿ¶ÿßÿߣ +- J3ª½ï"õÿj4©¿Ä|ùªu·ì€48tìÄiâr ¦%²28y‚ⲪÚzISk{g7¨?áSS_õÊGï•·Ü{“Pï%ôt?ââ¤)ଙ¯.àhꎙ…%¨¿ÍÚÖÁÉÕÍÝÓËÛÇ×/0”B¥'§±syE¥•5B±¬©‡ÔW¾y,õUï›Õûv…¦ÜrCÒñK§æ5©_‡°FeO3B_B _‰Š~€——›ÅòSSXLf2&“•’š–žÉFîó…%¥åû²æÖöŽ®îÛ=}jeÿéSuõ_ûZ·W³³•ËÕ§‘Ô?t`¯=¨¿q-Rÿo-À꿇՟¢WrGSý?@š±ú†sMHi¶±wÜð(Jóù þæ¸Dfz—_ê‹$2¬~/¡þHjª¯r#Þë¿Ó‹Ôo‘Š…5•¥…¼\vZ2J ôóõñöòtwsur°µFê[Z˜aõ'Ö{•oÖØàÙ†ÆóAýÅfË,×løt›µƒóA7SgÏÁ›AýØfZV.©oniïDêúf²úðT>ùס'ƒÜ¸Û÷swg{kSc}mUY± “ÁbТÃ.~÷5Þ•ýxWPC2'’ÑúèÉzõ'e&¬>%–ŽÕç#õ«‘úˆ}<¨èKê…Jô¡èçpÀüÔfrƒ‘˜€'‘ÁHJøÓ3Øœn¾ °¸”ø©FYËõvrÙüŸœÃ9|ñÖÔÏËÎHÁIVª’¼ý³kWêÏõayõê¿!«¯žfc”fp%І$ Ÿš€ÊÞ;aõAý¤~g{‹L,õ‹ø¹YiÌ„XPßÿÂùsgOy¸¹:;ØYoûtÃP1¨?ßØP®þpp~‹‚3^õG|óRüæí6vŽÎèK‡Õ—é8\~1þÒ5‘¿t#Ý7ªê?WUž|·«/“ˆú|.'™vÅÔÿâó¿=¸ßÑÞïÊ2å®`õ§M5ÐÜý²¼©ÑU}.¿ðjyeu­°^ e_Ö„GýâB¢èg¦§²˜I >=žF£ÅÅÁŸx:ÈŸÄ÷3³²¹ù|ûbiSKÛNrÙ’—ýgÚ–o2Ô‡þ‚Ô€úÃý’ ê'yñ°ú3ÞUYÞßèÕŸŒÑÒ{ ¦MWé½Dïµuprus÷ôòöñõ#©fv.¯ðjEµP,Åê÷@å¸ÿàÑc\8pòFSÿŘf)ÄêÎŽv6ÛAý•ËÌppŒ5ƒ3žº ]}ù}£P_qß(78(<:.‘•ÁÉ õë õû´©ÿrLõIºnÍâÉnáCg³M÷'ëG·™˜úþdõKÊ°ú¸ìƒû2™TÚ(VAý´0?N‹‹¥RcðP©±q4zr?-#+;³_QU#¬—H›[Û;ºˆ²Ÿ(ûDI•ëåä¨W«\ýÚkåÄÕšHRÿ¨†úòÊ6œäßéÕŸ¬y‡L ªúsŒçú‹L-V¬^¿y«•íž}.GÜOžùêÛ~ºIOJÍÌÉÇê7H›¯wܼÕÓG¨ÿ +-‘<ͺ¡ÈÍKmê÷aõ›$õH}_¨?JpPñ}õ#ñMõ ¦N'Ô7škòÁÇ aƒWÁïع{ïCÇNœþò›ï¼êÓ)Ùy%å×ê@ýë7`ßúî¢'>Qt,Õ]ÓT_±*CÁ“ûÑyÓÑÖ" AýB^.;-™ŽÎ?_o/O8oœlçÍ¢ÑÎý®¼ÑÑE}Ø¡þµZ¡¨A ìK±ù„~­ý|n.úÉŒ„xZ,5&:ŠB‰„¡P¢¢c¨±´øF2+5ƒÙ/)­€kh”µ\'•}È¡²ìO’úÿRU¿©–7O}yájU¯lzõßÖ¨©ÿû?€úS§Ï@Î1š‡45_±jݦ-;víÞwàðñ“g0Á1ñŒ”Ìì|L`Cc3"P®þHj¨ÿ\¡þ?Ÿ ªÖõ#ñûo¾<}ŽÄ½ö;w õ—/]²ðãLú³f"õ 4Õ19ªOF*ú‰tZ,†'<""2*ܧ'&±RÓû|9Ô‰ÄÒ¦Ö6eÙðpð±R}"‰/^¿ú/5ÔW,¯–ʦ¸ZA}gGâjµDê¸`¸¿èÕŸì?gEñ½€‹/+ƒ“'(.¯ª…âÛz£«ŠïŠžâÌD}C«úÃ>%×…þ¾¤~scR¿ ?;3…|éG¬þñÃöîÞ¹c˦u«–›êêO—«?>Çõ¡[ O¶Ú…ΛãÊó&FËysG©>i×´Vý±^\/ÎÉLIÂ/ÆêŸ<~Øeßî]V[7úæ¦ðâ÷çÍ™ /ž/Ö«?‰£»úÅ¥U5uÂúÄ>˜OF¿HÀ#ÐGE?ŽM‰  ‚  ¤DSãâ’˜ˆ}n¾ èjyU°^B.û¿<„ iWÿõ°¯Mý!¬þ€ªú|PŸIRßÔw°³V¨¯Öú‹^ý7?*q6€8cõ çšâlcï¸ÿÐQ"ÎAaQq‰¬tWP\êKšZÛ;»îÅÑSS_5xc4ß[]×å͘Š ”7_…H}Â@0P¡þÎ8 TS-°Á´é3þ4sÖlPÿý?Ydj±bõúÍ[­l÷8¹q÷ôòöñEêSéÉ©ìV_,mië¸y[¡þÐøÕ×rÝ(¾spݤÀu£üÎí;÷ +-/Ö®£«ú¹„úÕµBQbÌ'Я®ªô ”èCÑGæùAW/ã ¼îGÅÄÒÌÔ `ÿܵZ‘úV;´yÙ»G$/ßó7«>˜cõþroàn/V_&úE|nV:3!vX}7W¥úf£^­zõ'a4ÕŽ³1Šób³e+×løt›£óÁ£§Îž;â›ÀLÏâò‹J+kDP9@ýÛ½w°ú` R}õàiWH¡þí›m-R1R¿—ÃNM¢S# õ½<ݸ8í±µÚºš¯…é¢Opóý n¾êÉ™úïýyöc¬¾™…%RßÚÖÁÉÕPß/089ËÃ/Ë°úc¼X]ýÿ(ÔW¬ +-¤®­M¸ ò8¬DZtxPÀÅï¾þâóÇíßk¿sûg×®Z¾tɘÌ5œÈu£]g¢ê‡R¨Ãê—ƒúu"(ûhêEuµ€~ÙÕâ~^¡ŸH‡¢ÌºrùR@€¿¿ŸŸ¿@À%€?$,‚-g?+'_XRVY]G”ý.´z >‘Ä_Õ¢øò©¯e¥ú5•¥Hý4PŸJVßV¯þÿÊ( $Ç™0ÔƒH}k;gW7u Á@¡ÒÀ~|f* |6–úòä õ!9ýwz±ú2±’SÈËe§%Ó©”Ð@?_o¤¾«$©o‰Ô%9¯ªþÙ¯§¨Ï4àsãd¼ ¢ˆåTDcA1‚T[r&—blˆ""Šˆ "¥÷Þ{ï• ,½/KG‰•¢1žç š›èœWž÷ýý¶±, âš™ìó¼3ÏÌó|Þï3iǬ.þ¹ìñÿÜ£i«ÿv"õ‰U¹ŽRUYq>5=9Ž HÆúz:ZjHýªJòŸo\¿©¿d‘¤Ä|q²a96°š‘ú®\êÓèU5õÍ f°ª£ßÜX_SUQF+ÊÏ¡¢¤æ{yz¸»»A¹»{xzùøú‡†GÅÄ'¥fdçÀ{å•58ì÷BØï¿?0ôOâó£,õß|Tõ‹ò²Óú¬Ý=‡wwÞ]¶ú¬ÄÆsµŠFY5uòUPÙ†’ïþCšÇOÅÉ×ÙÃ7(<&1-+·°´¢¦¡¥­«·©?Dœ™/È+ó]ÔÇ“ƒÔïGê³''˜Wâš«Ï÷ÏI°Ôç»n ŒY×M\r:5¿¸¼ª®©µ£-ÛƒARýÑ1NÀz+Pý †Uù‘kUx’4¬†VUÄê¯Z‰©/äzOõó°Ò,õ;ùím­ @¿¶º¢œV\KÍL'Ð +-ðóÝÝ\]œq¹¸º¹ƒû~A,ö©¹Å¥tvØ¿u÷ÞžDØ=Î( +-Y}Ö(»[ŠÔOŒåIlšDbÛF&6iR}q¬¾èjj RñÒåRÒŸ­“‘•SP&ÔW×ÔÖ=sÁДbê†E'¤fåÒè >³³·îL„ú(oÀཞ@ýÿM#ú^ÃÑ]‰Ôô$VôõõNhîŒàœ)än˜³À’œ–WRÅ ¬¦¡¥sZ/°›w@hT\rÆÕüõ!a=}Æ­>ϦM¦¾Àã†? q¾9þã†lX´*¶fEý:P¿³æ··1-M u5•ôҒ¼«Y€~|LdX}o0ßÅÙÉÑ—£“³ ¸ïí뛜–°Ã>¬º:qâB£HD®ñ d¶ÕŸ<±£Ã¥¾.¨¿Ÿ­¾ R¨/ê*R_Ø5N}˜g±yâ $$/]&%½z­Œìæ-Ê[wîúf÷>õ#ÇNž¹pÙÄÒÖÉÝÔOɼZPB¯®ofvöê?z‚óÆË äQÂ+ñ!Vÿzw¨_U^œOÍHõ¼Ým,Œ ôõt´4Ôö~ÿ·¿îPU"Õ_ñîÑ—_ýyH}hxíú›awr5L¨Ÿ’ —£†;z®£†'o˜_ý7¸áWHýgOŸ<Âê÷vµµ4ÔT”æf¥&Æ„ùz8ÛQLùVe"õE«"”šõšZú¨ÚÚ˜­-õkª*ÊhEù9Ù©Iñ(éúûxy€ùŽöv¶¶66¶¶vöŽà¾‡°i?.1%=;'ŸûŒ¶ÎÈwï»gç‹1¹ˆ»óßÂUŸ'Àd¥áQf«¯­©NŒ²²‚œ¬ÌZ‘ú³xÕ'$Ô_AªO ¸D}ã¹¢/ŒÞ{SE_Áê¿ý'(ˆÕ¿wçÆõžŽÖæúêò’ü«)ñQ¡,õÏŸÖ9¦q«¿Ui ¨¿võÊË–,’|'õÿ4‘ú¼ “ßÜAôÍç|s )™94ÞonÒãF°ú£„ú‡îݹÙ×ÛÉõé´Âœ¬Ô„è°@B}à gðªìþf׸UY«"R_˜õê'¤fRó +-Aýj¤> +-ûm`> Ïhnl¨«®,/-.È¥f¦%'ÄFè»»‚ùv¶6ÖVVŠ••µ­¸ïJ°Ÿ/械_Ûù£ûÚ·ˆòó/ÿ1‹Äò S}ÖÙÊ`Ò8Æð©>1Ê›Eêì}—,#çY^Iϳš†–Žž¾¡¾Hd\r5¿˜P¿GÿƒÁaV“ ê‡ú¸;ÙZš\>úä±#÷‚;A}4:H}îÑùd£3õ7§ ¼™è·45ÔÕTÑËJ +-ós²ÒSã¢#Bƒôìm­­(–¸,)VÖ¶öûÁa‘1 ÉéY(ìWT×71Ú»`ïô?øixäñ/xYËÇ›¹>¸ú“­8ÀÁf'©>×(‹Ô~ñ«Ï™çUX}EÕí_~ýݵÃGOè»ddníó›”NÍ+.«¬md´Cà¸&P®Ì‰âÆ'PŠì›‰³/¡ ŒÎI +-ÎPý¹Ð°¨¿©/%ýÙ:Y9Pÿ‹¯¾ýa¿º¦¶îYR}ß ð˜ÄÔ¬ÜÂÒ +-P¿ Ô¿u÷þO,õǦ¯¾ÀÛ¦jÜmƒ~9tÛì#o›™þr¢š…š‰úÜê—”UT×Ö76·´ûLŒ~sc}-'ê'ÅÇD†øúNv6V s33S(33s Š•Á~HxT\b*ñ‘TÕ6Â(ö ÄÅžEˆ\/?¾úäÙÊ¥>{u¨/e¡9Ðs¸æyÞühž—ƒúë6l’WTÁê8tôø©s—®˜YÙ»xúGÄ&¥eç•bõ»à̇Gf¨þ¡þÈÐŒ¨Ï ‰htäxÏÄigßqê³û]¼t9RÃ&9BýCšÇuÏ^dõ ê§eç•V@¿m]½d¿¡ßç‚ú¨þØ(Ú”Ÿ >è¿}ãzwGkS]Uyq>5#9.2Ä«ol ¯§£¥¡¶©¯ª$ÿùÆõkúKIJÌã_áŽÍ«f¨>š¤~.G}F+ }õ+ÊJŠˆ¨èëåз¦Xš›™šA›˜š™[’ì{û†FÄÄ£°_«¦¡™ÙÑwo`èá£'O¹—WýÙ`Ÿgu9ê?ç¨ÏZ]Rý°@~õß#°‰jÖJ‚ ¾Ô* +-âì›ÆSd_~õ'ö™X”›•Æ:­Ì®\<«{\óÐþ¾ýê‹m* +-r›6¬#Õ_¸`þ<±Oÿ§þµîvFS]eYq5= ©ïåê`mntI_ï„Öaµ½ß}ýåvUE¬þª•Ëÿ²dÑB‘ú®ÙR¿ ÔGÅ`´45Ö×UWÒ9Q?"4ÈÏÛÃÕÙÁÖšbafjltÅ×#cS3 Š5°ïæéã†Â~&½º¾©µ½«·ïæ{ƒ±†/ßk¡¨ÿŠXÝ'¼êÓAýL¬¾»“­¥ Rÿ˜HýßQ PP’̾2²r +-Ê„úêšÚºg/šRìœ=@ýè„Ô¬œBV¿&å RýÑwW382ŒÕ¿ÖÕÎh¬­,-ÊËNKŒöót±GêŸ;uüè¡Hýí*ŠXýUR˜A¬>ž©/ÎVŸç¶9|ôÜ6FæÖ°¿þ!‘±IéÔ¼bBýîk7n÷?&mtì[ý·ÕŸªÝ2Ôn«]PÿÜ©G؃ÔWQ”‡v×ðµû ´;G´)¼fCýªÚú†¦fÌ>GýúÚêŠrDýl"êøxº9£¤oafæ_6¸epÜ7ömì]ܽpØOHNφ7Ë«êàîìì黉‡G¼|¿þë·ß>´úoHõG_<ö©?pÿîMPŸÙÒPM§ð¨ùßïö]0¸®þ°Ïðù̼Ÿ×÷ýX;¸¸{ûžŽŒMLËÌ-,­„ÂÑq%úÆ»õŸóÕ ®ú<Ñy%ŠA(¿—Pù%d`Éò+ÄàtÕÿHP}¼¿r‹—*­\£¬¢ŽÔߧ¥£odF㪟Bgä—°ªš¡_õ‹VŸoÏ&SŸ8mØêwÃsÑiÃD§ ç'gÉó“Û0ÝŸœl$1Q¿±«ЇªßØP[]QV\›MGU?2,$ð„ŸÏQ7WgG;[k<6¶vNΈ}_ÿ“ADÙÏÈÎ+(A ¤µóBï +-#:<¹ËÇí ÒRÿî[cW±ú-„ú™¼ê›sÕW]¿v•Ò²Å‹õEž­²,¿ëáWš­þBR}ÕMÛ Ðûÿ}è;Š¹•=V?$"&!53§ ´¢©É#¯L¼GÜà × vt^ó¨ÿóÓ'Xýû·AýQP¿«½¹¾šUœÏÈH‰'Õ§™éëhaõÕU”׬TZª¸3ÈͦT†¨ýUDû«¬ªŽ÷Wë ¾± í¯_zn +-=§ õ«ö.¼hc7á¹ðsßT}ö¦”R}";bîD±¯ù“[€Ô_¶byÚü‹ï´9›˜š™ ê×¢ÓæâÀRŸlW‘ú赿ñ­™8õŸ¿i?²Àý©¿Im=R±ÂB¶úøµ2õ¥5o­>« +-©ßBªßAVýÚªŠ²âüÜìŒÔĸèˆP\õ=Ž¸8úÈ|s3sä>°ïäzÄã(*ûaQ± )Ùy…PAšÚÎw÷ Ž„\¾gŒú!lõAý}“«/˲‡Lô á@ËúËW~ êoõ÷jêè™Rm õÃÎœMÎ`0‹Ë«ë!y=pe‚úã÷pðO¼ÉõQv@}”áÆ`ÌÓÖ®RZ†îDäàlÒÁiª?‡P_Ô_½v½Ú¦m_C¨oaÍU?-+·°´’PŸØ³;÷8êÿ2™ú‚ÿ¸gø'âµ9™œœd^+ÉŒ$Ô¯olBêw`ô¡ê7««©d•1s²Ò“b£ÂC‚PÕwsur°ôÁ|SSpØ·sp&Ê~phDôÙ¤ô¬Ü‚ì^k'ÙA8•k²å“¾úe™úàð9HzÖì9X}yÅ% þ:•[¶ïüv¯æ=CSªãaOßÁHýôlfQyUîèʼêÿg’àýWŒúⲃÛošèö«*²ýNþ× +-¨¿©¿Am3R_Cû‰…µƒ«‡Ïñ Ð¨8P?¯°¬²®±µ³Ô‡×rÔJªÿrjõá±ø²yH^6ׯŒ÷ó\6)܈&ËF6’‰¨®©¥µØôÛÛZšêª+ËK +-óô´¤ø˜ÈÐSÇqÕw´³±¢Z€ùŠ±1…î[P­lì]PÙ?~&ÏœübؽÆÖŽ ½ãP¹n V®ß>õÝÄ«/&˲0¿ó§þ¼rò +-Xý 7ƒú{4èšX‚ú¤ƒP8òŠÊª°ƒ}ƒX}äàÅ:8¥ú÷ˆì ^¼ÐÙÚX[YV˜›êG…÷ñpu°¶ Ò&ÔW“˜ú3AýÏúèµ+V¯õñkµu àµõE¿öâµ"ÿq‚ê¿äUÿÇÜŸ ÕïAêW³Jòô”øèðS'yq²£™éëhíݽkÇVu¬¾â"9Á~4C¦¾4Fbê·ê·µ¶4«¯­®(+.ÈËÎHMŒ‹Ž8|ÒÏU}{[Œ>ÅØ1³oëàäêîåëp*,*6!…Î`•á˳«·ÔgW.îòqÔýžÕw­>y·ÊÔ# þ'Ÿþ…×A²ýnÇíW—·ýÆ’í·–l¿ßó´ß'‚Á§þK2;Oÿ‚úã7®]ìëõë*ËŠò²Ò’â8ê[šèjkìùæëí›Õ6 õ—(ȳ՟‰²óç?¨þ'Ÿ~JüãæŠÿÇ‘—M’¨ËæÁd— ¯ú¯xÔÆQ©?Ôßs¾­©¾šUœÏÈH>ËVß–jj¤§£‰Ôß²QEùË•Ë—*Êcõçp6E¶(Ršé«ŸÈV¿†T¿WýÖfP¿¦ŠUZ”Ÿ›•‘’{&<$ðÄ1o\õ­iú†0†˜}Kš5*ûžÞ~'ƒC#câ“Ó³ó +-K+jšÛ»zú‡8•Käò}hê¯]¥´Œ­þ›÷5ÙHrD·ß¿!õ*,Fê¯WÛ´ Ô߯}È€bamïâîíx:ÔÏÌ-,Å}ãÂő﯎ݺs—¼çbÔÿŸõÂÇ°úHýK¤úU ~v:R?ø„¯çaGKCÝ{¾Ý¹}óÆ ëBRýϦ¯>û²™ÿw9yE¬¾ÊÆ-H}Íz†¦T®úÉÙÌâòªzP¿G¼ú¯Äª/ôØäc‡úõË‹™Ù þ™0ò±TSC½š{á± >~,GýY2õ¥;ÓPßK„úÍHýv„~KscC]M%«´™“™žv*Àß×˪¾•¥¹)Ìÿ¸O15·„²ï|Øýè±A§#¢¡ƒdå” õ¹q”Šú¯ßBýýlõ¡¯-VàW_f韃D¢ÕWÝ´ ½M1·"Ô‰ˆIHÍÌ-€¾ÔïFêß¾{ïRÿ—__¼àž ú¯¦€°ª¼ˆ™Î¡%†_}¹óþ„Sª¯ êïص{¯¦Žž‘)ÕÖéZßðhPŸÁ,fUcõû‡F¯\¿9>q«ÿäéÏ<ê¿~õøŵÁ/?vŠ_œþÅÉÔ—öHNý6õ«+ËK +-óô´¤³1‘¡Á'ý|<ÝPÕ§Z˜QŒ}}=}`ßØÄÌʾ“«›—¯@H8ñÙ‚"ŽÝ}ƒ#—¯MR¹Þ·ú. >…T›Lýc„ÕG‰ž;oþœD«ãDkÔ76§¡ëÕ/«OÏ!úF{¨?zuì&¨ÿ«ÏP¼ú¯ùÔ‚Õ¿?1~óú•KCýœúËàÖ_'[²þîÞ¹cÚõ—g}?æ__Péò•ÿg¿>œ¢¼Ó8€On&—\,ÄX"£#Q£â€5¢bÔ»l_¶P–Þ‘"EŠ‚" ¢H—ŽtDPšbD,oÌxcÃxwIO“›Ë™Læžßï}÷ÝÂ.,BVf²ÏðÎüf¾Ïçý>ËWš˜cõm@}±Lýc9%• >zlïÀ-¤þÃaêÿ¢‰ú?"õÑ¢ =Bêß짛"¬~|LDH€·›³Ë´³Þai±a©±,ŠÒa£S_{3õs K*ª¤êwâ²ß ê·Ÿoki>]_sª¼¸07+3=%1>6*<$ÈÏÛª¾Ðó™0à>b—}ÿ Ðˆ½ðÙÔ ølieM¨ßÕs­ð6ª\“Uý`B}†­ÕvK‹õ«M•Õ×…ùmŒjõ‰D D¯õÂ6t6_,! „äÕ6êká0õ!Õÿ‘Rÿ!¨ÿ5Rÿ"¨ßXS êKO>ê‹ù,:¨¿©¿ÔÿTúzõÉÇš(=ýâT?ÿâÆ ¾Ò¢ ‹2ØÔo9S_U^”—•q8qt8RßIÀeØ©Y]=ÒîL úÝýŽöó­-MHý²â‚œ¬£iÉ÷ÇDî ôõr—8‰|.‡Åd0ìí &‹Ãå  ì»{ù†„ïK8t8ãx|¶¦¡éÜ…®ž«ý7°úÇH+ÄñçÉ¡~t¸JõÉ +-ƒÕÿà}Ýáªõ¡Ô–h ¡¬þîR][Û/^Zýך«ÿý¿ž=}‚Õ¿5ÐwåbG[scmeIa¥¾§DÌgÓm°úæ&+—/ýìSƒùXý§O›ú*+÷‹Óè°‘mÙ+U[6ºúŠ‹r¦®ªì¤T}´(N²EY¥Rýwu‹¢­™õ/`õ»±úηžmj¬«®,+ÊÏ9ž‘št`_tdØîO7Tõ9l&˜O§ƒûL6‡ç rtqóô ÞŸ˜rv¯¸¢º© Ô¿¥¬þðòVÔW3Qaàp]!¸R}í]³.ÍZ›w( ©ú;uºVžÁBÃ%ËŒLÌõi,žÔ ŒMHJËÌ.@}Ôï¾Ü{ýæ»ßÜðx«ÿâå+9õQýŸÿK¨Â£¨þÙÓµ•¥ >q(îöõ@ýÛ6o\g¾jœê+6©[_/Jý“¥§êNŸ=ßyéjŸÂ–½ Õÿµe¿¤þOÒE·¢E¹u£-ÊY¹zoEõÈcokµmËÆu >¼uÑ'ó õ©·Ê«¯íÐü±f"Ô?צ ~Û9BýÒ¢üìcGJˆ‹Ž ò÷öpuCÕg³`>î3Xl._(vvõðñß³ÿ`Jzfv~qyuý™2ÐBF¹=ß‚ú² +-C®Ö2õ A}ý9³f*¨¯ë0ZœÑÕ76[³aÓÖÖ4&OäìîC©Ÿ}®LPÿRÿžJõå%¤ÔQ¯AÂ+—:‘ú§J ) ýä w Ý5_nþb¹‰ê»f´?œn&jÆ«~mV¿]ª~R¿ùLCmUEÉɼ™é)‰ñ±Q{B}½Ü\…\6“AómmÁ}:ƒÉæ:ˆ%î^~A!áÑûÐwOà<ž>ÛÖqñJßÀdT¿«ê; ¹LP+¨o¦ >•æ?ëÔ×ê(©‘ž"•ÔG‚úHBk;Wèä&S?ú\™H}$á½û”„/UK¨±úª*¨ï$à0l­¶o±Xêḩ?gRªFw¢æêÃ[Ô[±úè­çÈ·ÞUñÖ×cPÿ;Pÿ1Vÿæ@ïå‹­Í5•%2õ=\Ä|}×W þZPöDª¾¬üTÝLÜL°úíçÛZ°úå%…¹”úÁ>žnÎbŸÃbØÓÀ|pŸfÏ`qùBG7/ßÀð½ðÝÔ£Yyp{ÖN:õÉÅ­¯*õ¦Âêû¸; yLÚ.¤þZ3#Yš©Í%ã¬c_[£¨þ›ôßÎKWûoý÷ɈýW½ú/‰ð Axîáðôtá𕫇¢E«í– ¾)¡þB}½‰P_ú‡Û`aIÞ5r¸ü¢1Þ5Êê¿&ÕE©ÿÔ¿ƒÔïnomn¨©()ÈÎLKJˆ õE<PŸØi;Ò›>U§¾–gBÕïÂê·¶4Ÿ®¯9U^\˜›u4-ùàþ˜È°Ýþ>® >Ô§Óúˆ}(û,O vvõô Þ—p(5#+÷dé©ÚF¬~ïÀM¤þƒÇC“Aýž® ç°úù'°úfw¹4“—«´¯ÁæNùàýa«« ôï=ª$œNH8Ô_º"½"m‘8ºÊÔÏ…¾Qwz\êS¾xþÃwHý÷ïÝ…ð\£Â#«  ¾Ô·FꯙõñNé®1BêoÚŠÔç Ý}dê—W7êßÄê“K¦‰ú¿*¨ÿ«?ô=õÎÍëXý¦†êŠâ|J}hGxOˆvd,UÎ,úocƧ~9R¿©ßìw)©_ ¯¾·‡ÄIäÀe3QÕ·ÙcƒÊ>“Ís9¹zø õcàö<ž[XZYÛØÜÚÞ}Ô¿£Rýׯþ°ºöoª®É-nS}uy1¨/×aàrµAê¯3_…Ô_Dª/gižuìke†«"ýÑÌÙs©H›+FzÏÞ}SŽÇ}®ÌÎKWúnÜBê?|òTªþO<¥¾ñÛðð(RHªgð:ie@êáÈeÚYï°´Ø°ÆÔ©¿pÁ¼q¨ÿ©þ P_Ô7\²ÌÈØŒPŸÆä‰@ýÀÐÈØ„¤´LP¿ÔÇK¦^ý_Õª?ì©Rõ¥Om ö$õT}!I³Fê¯!Õ'ž:ƒ(GïéÔ×â¼™ú I©êÔ¿ê7!õËŠ rŽg¤&Øäçí.q:pqÕô­­ûPöÙ\P_âáíß—ª_Cª}2¨¯”fªÃD…ùzHÄ|6Ýfç¶-×­^Eö5gTb¦êyÖ•}mjõ‰H H¯$Õ·±g;ˆ%2õspßÀWfßÀ-te‚úÏ@}5Wæ¨êË +-ð5(À#RhjlôùbC9õ§È¢£±úè©S§ë͘9ëcýy¤úk‘ú»h,žÈE¦~vAqEMƒbµzJ.Ù+K6¢úÏGÿÁ¹‘?¸­ª~p=U77cT_òÆê{¹»8 +-ùPU}kTöé —/t”¸#õ#câ£Ý+‘W_m Ñ‚úŠi&.ךŠ’‚ìÌôäq ¾Ÿ§ÄÑcokµÍÒbýjg´¹úÏž9ãÃéDaÓ•}-%á°Hë#õ—,_ib¾ö‹Í_~eCgóÅß t¾&§CɃ+SI}ž¡^}”µê÷á‘UB}Ñð¬/-ÀÑ «S6¥¾‰~*¨Ï¹üŸýúðŠòÌÂ~ÎnÌnÖ¬klkDQlØDÅ^bf€aè)*1¨A b,A,X" €)"VŒÔDcGQ1¶¨G»f÷Þ÷ý0ƒÀ#çìwÿƒ÷œçþÞç2O%êïØÉ.YÙòÔ꟪Ný—¨>mG7¯_½\UqÕßW›•ž’°e§¾›£µÔt:Y¦ukÒY#Žæ¦eÔÏËÝ•‘–¨ÿ]Ø ¹~Þ®Žö +-¹•LŠè›š"ûR™•Ô÷ðñ›ûõ‚ÅáËVF1êïùø곦ÖâîÍÛ•±c[Ü&P?",4x®Ÿ—«£‚Æ™Ý\=Ýî >ÓbIJ¯ýiB= p(K¡¥€BP(Ìø…ï©þs¢~Mõ­¿ü|ñB T†íÛxõg{8+mdf3AýÑ# ˆúºÐÈÈD§êÿ©±Ou<5Žy*|p¥Ì×TõíˆQÿÚTÿôñ’ƒû +-r²Ò’Aý5+—-Y8ž¨¯°¶ÕoÓêæådƒú‰¨þªåDý9~Þî.ŽJ[P«¾) –}™•\¡ttõðFõõ1ìñyæc¨¯¢®1‹{ìȽy»3R“â6¯ZFãÌœ®ds‡Òï«×³;É3¿ºbÙ×ê4®OœŠX ê-X¼t9)ÀÛÙäúB6yÏU&¯¾úÿbÂó’Sÿ6¨‰U?Šké¡8Ô·Gõ¿š4N¨~g¨¯ê¬ñ­sÖÕ9k=~BÕó¶Éêߥê—Sõós2Ó’ãyõ±YY˜N›<Þd¤á°Áú}{3[Ò¾*õµšÿ«Ñ¬ú% þbNý­›Ö¯aÕ÷åÕ§è#û¨¾­ÒÑ…QɲQëõ ©ú­A}º¸gOúEù»3S“ã7Ó8ÃéêãÓÍ516õ±ÅÐÕÅ@·ýì¯\¢Å²¯Q£~‡N]¾ÔéAÔ>bÔ؉Sg˜ÉäJgwNýØÄí;³÷7|eÒè5BýÇœú•e¥§HeàEF}{Kª¾±ÁPr'ªQ_…*Ôg¶—¨¯ê›ŒŸ4Mê;¸àö††E%KJÍØOÕ/¯¼tåªÿ¨ÿûËWøÒÆ©ÿŠU¿†ª_Y~Õ/õqMH9 +- ž ê;€úTŸl éFðRT¿­¨¾–§åÔOåÔÿ6t~à_/w¥­µ¥«¾D"!êK-­Q}woß9A!Œúظ²[úìâ–Ÿ=ÅÄ™œ®Ñ«"Ã…ø`_³4'y¦·+SØèñ*–}íOõ!Óm?ÿ;Q¿+ªßÔ7"êÏ’Ê•N ~`È¢ðÈUÑ1 ~zvnañ¡£'øäÝo@ý?T©ÿö U,|Ps—QŸV8w$ñêûzºØÛZš³êêßWO·»†Õ74&ÛkneK·—¨¿~s|Rj&ª_rÕ¿|åÚMFýgõÔ¯~õŸRõoƒúdMØr”Ç©ïëéê`ke.TŸy©Pý?‹êkg4£þANýÃõÕ_Šêøz¹9;ØÙðêK@}sTßÎÁÅÝ‹ª±âN}h\ÜîÝ©¿{-¤þ¿9õI]Cõaqù³¯ '+=%!6&zõò¥‹@_ót<[˜NŸ2aÌ(£áCö'5WØ]’he_Œu NmõI¦AýöŒú½û ŒêO˜‚êÛ9¹yûsê'¤¤gå0êW1É{øëoOš ~] oÔ²0#Õç,„ì`c˜¨¶°Ñê«Þ^V}²½^~¼úÉ©™9ùEKŽŸ>[^…êß¹{ŸUÿuãÔÿÀÿ–Êýoä¥ø¿IàkæKÅÑàhXý#Dý¡ú‘TýÙ¼ú}dÕ·±sp¦ê/$êodÕ4.m©ÿ¾®ú4ÎxºV•Ÿ;}âè¡â‚Üìôí‰[7®eóìåꨰ–Κ1uâØÑ#H {÷ì¡C­¾ì‹¹n¹©¥~›ZêwëÑÕf4rÌ„)ÓM¥ÖvŽDý…K–­\³aKBJ¨¿“w®¢êòÕë7Q}´ð…j ¹ðüQOýg|f*Ó€ãnÀÝš¡¾à¥¸½:vîZ{{Ma{AýyóÉKQý4Pª®Ùêók娚Q¿Õß›·+cÇ6þª™íábociÆ^5û÷ÑÓÕiÒU#ŽGsê—ÔVgj2QeõeDý™3‰ú2¢¾U?,â{T?±Õ¨‹{ÿî›×®þTUqþ ª_¸g×N’gÜÜ…óçù{»9)å2 ôx“‘†Ãèקö˜ÚeÿS®ì‹ì·ô¨T¿U¿;Uߪoa­ptã,õ“Ó²r +-¨…±Pú¯YõIxheÀC1?'35™WßÏËÕAae!T¿g]õÛ4G}ö¥új_ßÔ—6¨þ¯œúÊJO;²ŸªÏv#TßÙÞFFÕa0Ôï¥N}q9Z~´§¾§›³½ÂÆJfaêÏ„õÍ,dVTýÙõÓ³s?šú\œÙŽwçÖõ«?]¼p¾ôä‡!Ïx»Âæ®Y¹lÉ¢À4¯Ó&O3Êh8$šìn×.²ÿ¦ì‹ìkc¶°/±P3 ¸éê§%3ÙÆà‡w¢•…)ª…Q¿k玄êóª|h㮢¾·à㮚Ój®šwMUÿ¨ÕÇ-!ÝÔ_½|éâA ¾ÕŸ:q¬PýN¢úe4¡þ¾ýŒú% þÁÚêGõƒç¡úNªÕWØSõçõ×6Y}M±/ˆ3äY ~õ­ë4Ïx»‘ÍMؽ* 5Æ +-›µ…é L4\¯ƒôëÝ«¶ì“P‹ìkoT«/ÈôPCc>Ó^éаˆQ¨~jæîü"Tÿly%U¿†UÿUsÔ¿GÕ¯ êädav6pê»9bt¦O™0ÏDý¾½I_è¤yõ¥Öv ¾`È¢ðÈUDýtPŸì¨ÏïØáŽ5¤þ;Fýß_<#êã–ðݨpOöÎ퉼ú>îÎJ¹lîȨÉú°"]pC ÑZ$ª¯µÑŠúßÏó§êˉúª¾„¨/WØ;¹y¶*õ™Å}ñì “g¼]+ËΞ"›››•ž’ †ã54x.¬®“œ\¯ÐØHÙ[§ìö?Ù×ÎpÖËô—Ýu…ê›[Ù:¸xòêÇ%õ9v +-Ô¿êßV§þ{5ê¿ãÃèý*QÿÄÑC˜´úÞõ† †¾Ð³UrS_ýzù°úÃF¡ú³@}'Nýè˜XPÿÃ;Ö,õÏ€úÅ ~úöÄؘhN}'¡úú¡úìCÛ~Ƭ‡¨¾–¦%ÕOˆÝ¸Õ_Œêûxº²êÓªe_¥ú±­C}.Ï5Õ·o@_«,‡¾vôP1©1Ûâ6­‹Z«è=ÆÞÆÒ\» ‘†²¯_»ìÓ –.0 ¶È~ËŽ ÓŸ¨VßÀØdܤ¯$æ–¶ö¨þ×éïX· ÔÏØGÕ/«¼ôó/7õŸ>ñòÕë7oß6RýWLeõCPÿ ¨_L¨wbø¢@PßÎZÚ"êëôèŨ?vâÔ³¤r;'w^ýú;V}ïAýk²úçÉC s³±Å°õíäRª¾Ñp|¨@ý¿‰êky´®¾Ôœ¨?cQß\*P?4ì»Ö¥þsÈó£5wïÜõÉæÂñº7oWFjRüf(l‘áÐcæÌötuPXc¤'3166Ë~O(ûÿìÜRÝÔgrݦnÙÓÝ"£BýÏÛýƒU¿Oÿ þhP¦¹¥½‹Çì9¼ú;2våíEõK9õZT[Vß›Vg ©Eê?~ÚõáSÓÂû©É§>5{„ô©aG¨#jõíÿ@ê·¿mÅê£ä>þåçªò{ÅEWóQ9}üHB\LԶ𰠕Kû¸;;ØXBx©²¯(/'óƒÔxñqcF"Ùʲ/ªáÅ° õCóùvNn >!¨Ÿ’‘ýµêîZýªûwïܼ~éBö¹Bý[à›¸rÉ"Ô(õ5ù¨ÿ­€êõGƒúR¼ê‹.a,zš^ÔïyÑ®Ôÿ©C‚ªQ-¨_r»2’•~«¿3"<,8Š‘§‹£ ¡>‡P_šUÀFtê/öõrsüê“ÁýðoB}"¹Ïž‚úÕ袡°eg¤&H<' »­_»j™¿¯§+”}sºì«*Mš(‹ÎZ|,Ü5“ýoXöû:ªÿÝ÷]bÈ[C^``ØHbØÝéõ þÓÇÄ?ñæõˤúöîꬾž¶¦œMÔŠÕI.Êïy[õÕÏ[gõÿCªOV£¦ç Oaõq3õO&rÕ‡„¸@/2c„ÕWQÄêC)9bXgõâhþL#Jõ= õ­@}3Pߪ'õË*kD®>ôGªÆàä¾lzF\4.l—/æd¦A‘9¼ï®È­›BƒW,òÆeß•ý)ˆ¯2œ5*ûãÆŽöA}‚ý!,û"~êK"õ•hõ­@}/®úûáôRÎe_¸ÞõÑé½hHýÿRŶ·Äí õ¡Ô¿˜‘ßD†úÞ þ|Z}e¦úÃz§þ_zúÔÎ66ŸoïäŽÔ_ ጉCê§fä€ú·„¬~¡~nV¨pßnZ}PßÂdŽäCK]EQÔ:«þÌàPßw°¨Ï~µú÷úy ~2V?jÛ¦Ðu«—úÎÖX}}Îd®ú£™êsS1GógšþW?âëÔ??8ÔÇÝü¢±¢[NºðÚ¥ Ù©É'àÿ½cëÆÐuË©²o6o6”}]mMu%…‰²ð‰ÅìbÙéð¨?„ú þô™sM­l]½0Ô?EŽû•¤ú=žžêçd¤bõc"·nüÛÚU”úƳ )õe¡*Àÿñïð›n4ìV}yP²Ž>VßÚÞÙÝÇ¡þ‰¤ÔÌœ<¤þ=ZýJ}´gïÔG©ÿ²éR"R\Tp%/73 ÂU߯“ú²ÒR¼êw·';ÂWßžPÉŠÀWŸ>h*¹è¢©è¢"Syÿ.dn:+ýÌ©cGÄÅDm ßB—}8ë¹3gLÓçhA€ ·M”@ßX’ýïXöE2ݨ?AF©¯E¨o ê{2Ô?ô㩳éäé‘êó9=âöºVÿãº1PêWão"¥~BW}w'ûNê‹“ê÷¨a7êKËÊ+*«“ê[ê/c¨ŸÌTÿÑJýÖ·í}UÿÖ ¤>ô¢£ \õ}<œí­-`O}VýžQß|Щÿ¿Žê¿×¶V¢°Á÷µ¾îáƒ*”Ý‚«ùç:—’U&~OôŽ-ÑvDÙ·µ23žc4}ªžÎd UåIòr2a hn,û"Þ¨?«oãè‚Ô  ع'žT?Ÿ÷ôZ~}ýFõ )õ›Hõ±†s2S“@C®ú>´ú ¡°ÕWAêÎ6Aê{ø ð†nÚµ{R?-3—P¿¢ºöÑ“†.ÕïŒ~õ#Õ‡bDí™—C¨Oí 껃úÔžêÊ´ú½Û“á«~Gõé‹~ÿ®ˆnË«æçõ(»e%· ¯CeËLƒ²øÀ^ªì/ó‡íœì­-MçÍ24˜¢« }F‰e€†¯ú# õ¥ õ9 õý—3Ô?“žu>ÿjáí8½Úºú¤>Ò°­ýw>êéR}††\õ{ÐÔLC>ê“á¥ÔçèãðZ;8á%Ô?˜Hª_PÄGý÷‚¨ß»×ͯãë&/ÐëÆŽpg¨ïì6ˆÔÿÌTN¾¯Pö›_ &S[Sy¿ô5Yö’e?¯çãáâh7ßÜdîÌÓô9Zšj*J +-e¥'Àq³ì‹x:«? «/ŽÕWTÁêÃQ[ÂQ{ú2ÔO7ºè¦!»¸ìCx‰²_\T@•ýcÜW/Xäãáâh7ßÂdî,Cƒ)ºÚ“ÕU•'ÉËÉü0ARB8˾ˆ¦ë£–’–eªoÔGGM©"9-37ix¯¢iø¬ée_Ô¿DP¿¦¢ Ô¿š—›•–|’¡¾Ïê‚ú–^O®úñ‡@ýô¬óBU¿±ƒú§ê/!Ô7õ§êicõeHõG`õ¿eÕå°ê3Ù§Õ§nº½­Ž‡·±®ºº¢ìîmnÙO<»+r[xXÈšUËüz¹;;ØZ™›Ì™9cš¾®¶¦ºŠÍþXûCYöûwGýMêû0Ô?J¨åÆ­âþP?Ô?ÃU?p9¨ïâ`ƒÕŸÂÑBêËIOè«úcÆŠKBxU4 ¼ÓgÎ5µ´qtñ\ÈPÿGRýÂÛ%±ÚºúˆÞ³Üó“`ê7cõTÝÇê_@êc¨¿ÈÛm¯ú’ ¾¨ÿ=«¾¨‡U¿ƒúŸ)õñQ·ÃQãð6ÃÒ e¿”Yö$ìÛ½}ËÆÐà •Ký`C'{K3cÌ>‡Ë¾f_Œe_DÃGýá#G1Õ×Ñ70œmlamïìÎU?.ÔOÍÌéBýwBS?~ÏΈð°à¾ªO…¯Iì9©?N«¯¤ª¡¥ËP?€¡þ)¬>oÄZ~}ý†±¾¨Ô?¼Ÿ«¾­>´!U%VýVý.Ô§Ê>„ÿ`!½TÙ¿e?•}´âþ½1QôŠ>® ì­-MçÍ6š>U£¥©†Ø—eÙñt¯þ$e5P¨oN©¿Ž:2†WýòꟻSŸq{<êâU¿¶¦’Pÿ|V:¨ˆ¡¾'¨o)LõGêËð¨oëè +-ê¯bª/HÄ`Q^õÉ5¡µRê××=õ!×/QêÇFoß¼!$ˆPß–R_ƒU€‡UŸ©>]nvA}tÕÊ~áµËs²ÒÏž>~ô`|ì®È­›ÂBÖ¬^°ÈÛÃÅÑÎÚ‚d_GKCMEQa"büÿÙ¯§(®<à•T%ºkUÆ5«â•J6&jÁ[Áû(ˆ‚ +- +-*\5„ ¢A]e…¢äd¸SA@†ÎáAåÔè‚••Ú÷º{fºgz.œk—÷ý¾U¿÷éoþľº"E}]õÍú‡„ꇑÕçÖ7êó^¾RPýW|õ!‡Pý‡¹„ú·IêÛìÙif¼iÝ*Ã%@ýYàX¤ªÿ‘xMÅÔ?érÖý²'T?B1õÉ/DŠúìÒ¢‡¹÷Ó“ãïFÔÿÁÎÖʪjêO›2 ©¯± õ)ì“Æþ ÿ–4ö눱ŸŸ™–̈ +- ôóÝÝ\O8:9hcµk‡™É–kW-[Œ³ÿ5d2b_‘ªþt þl=Lý-Pýý$õƒÂ¢bR†©¾‡ðn„êC1õCHêÛ‘Ôןƒq8yÒø[¨tõ­„êûÜ"©_Ê®”ó‰)¦~Y}Lýu’Õÿ©¯Æ õiԇ쿣ûà'–Uf[351þndXpÀM/KXIGûÃöYYî05Ù¼c¾Þwôìÿ ±¯Ê(¤¾5I}?¡úÅ„úmÃTŸ'¦~zRà¤þR£ÕP}K¨¾Ó©ŸÝ.\ÁÔŒe¤0³ò HêÃۃ꿞úüŒs(:‚U ¾î”é„úK W¯ÇÕ?dOQŸ‘œž•WPTÊQúR~iú RŸÊþ{±±ÿš<ö›êk«+8¬’Gr³˜©‰ñšîçNÿtÒÉá¨íÞÝÛ·}¿ g>`&Áþ$ľš"Y}È!T®ÁB þzB}{1õóhÕÇnO!õ;Ÿ¶‘ÕOŽ¿(ªþf•ªo„©o ÕÇkbêGêCõëêK¨9$:‹¤ªŸÔªÿ÷£@ýfÆõ'ã5uúRŸª>yìÒŒýÆ:nU9»´¸0?ç~zJ½˜ˆ°à€›>^ÿtwsu>áäpä ­õîÛ·BöW ö5qÇ%ªˆ¤~¨zÕ·µ²ØŽ«¿P®ÒÕŸÍW+Y}ì‰Aõ™„ú ¦,õ‡ˆç!§ú÷¨ê$©?oά_aêÕï)|š9š¤>­úýwä±0`¿¥©¡¶¦’Sö¸¨ /;3-™äÃÛÓã(ê|ÂÑþÈAë];ÍûëV¯XNÇþX™ìkú*þ×#C’úCk[QõÉ*I}N)¸˜,LýP’ú‡dªÿ釩o@«¾ŸâêÉ©þ£‡¹™˜ú¿‘Õ߇«¿r9T振¾êÿuEWIê+óã&ŸúÕPý9ôê›oZ»rùb¤¾©O£>öz…cÿw|ì¿èc¿µ¹¡®¦ªœ]Z\ø ç>3%oêç{í*`ÿŒ ¬J°o"Âþ—_LÃØØWu†=‚o©Bý¦z¾úL ~$¦þ• n?Ÿr‚ê[bê Wý)5Ç€šcÅÕßB«~ +-V“Å©¾úp§^Æ“æ†ÚêŠ2’údõwõ7"õµ$H}:öÅÆþK^_O76ö[šjÁ#.{\TŸ“™ž’p/&2,T½võò…sg\N]ì³²¤²?{æ7ÃÙŸ ™ýûʉLõgÍÕÇÕ7!«ïé£"õ¹"ê_÷"«¿•¯þl%¨¯C¯¾¹¥õ~²úaÊR ¢°‡Ú)ê'Þ‹ê߸†Ô×Î õéÔ§û¼^xÜ€ýæÆznu‡Uòèa^vfZrB\LDXpì +-Ø? Ø?ËöMùì/²?±¯†(¢¾Tßñ¤ËY÷ËõÓU«¾­úªVÿ°¼ê *Iý]:Ú™ªþüyß!õ5¤>-ûü±ÿŽ4öÁ²m­Íuܪ +-viqáƒÜ¬Œ´$F\tDhPÀMPÖýÜéŸN?vo+Âþ ľš"EýIS¦ê/1\ÅWÿ’ú$õáí} úm­P¢îTõ(ê'¤0³ó iÔ‡-¥©O¼ yÕÿÇ1¤¾–©O«¾èØýªŸ××qû“–¦†ºšªò2œ}fj#6:<4Èÿ¦`ß °ïD°oÙ_»Ê±¯æÈ«þ:\};ªúñÊW¿ŠÃÂÔOaÄF†ITÿÛ¯¿”¨>‡ +-«¼Ý‹˜úQâê¿èéSúG€ú;L¿'«?uòDªú’[¢(=H}zö)cÿí0öûy½à¼qöëkk*9e‹ +-òsî3Sãc£ÂCýoøxy\rwsÅØ·Û¿gξÁ¼9ˆ}uE1õm4©¾5P‹¸úcúc>\}=ƒE@ý Tõå«Ÿñê¿“¡þ²úúZ¤>½úÄØOxû/y}½Ýྟ¶µ67Ös«+9¬Œýô”Äø»Qw ûÞ€ý_Ü\O:9Øß Ù_†ØWgd«?G½ú!|õ‹JÙÃUp@šúa"ê›Ó«¯£¨ú£Fþ3¦>x»$õ—­êï"©ïKR¿„UŽÔiAêK`Ÿ4ö öûy}=àãì×q«+ج’Gó²3ûXß@¿ÞžTö-ÌMûjEýO¤ªoF«>¼=ªúÂÛ“©>ôP^õ÷+Q}øviÔ_ÔßFUß_\ýöŽ.¥©Ÿš'¢þ^¤¾6©/A}ûøØÆ~?¯·çxÇíOZšê¸UìR‚ýä„{1û¾ÞžW.ýrÖÕùÄ0؇ê#ö•¹ÕߤRõ‡2Ô?<²Ô_±lñ|=²ú°%R_íAêKbS»îAbìƒìwì×ÖT•³K‹ äeg¤%'ÄÅD†ývÛÏ÷™}[¹Ù=šûˆ}%D!õ÷¨IýÂülfJE}M©¬õËËJ¤©¿fŲEH}-R_’ú‚±ΛÏ>¯¯·œ8d¿±¾¶¦²¼ ²Ÿ›…³|ûdÿ"è Ù?"“ýÏûªˆ6«…©ïqñœëÇ5©~\B*ú¯‘úÿÿAêKcÿŒ}8öqöûÁCî~Þõìi[k3Áþc>û ûW öùìo£°ÿ-ξ®,ö?Bì74W­<õÅoOqõÕRõûúo•£~0R_kƒÔ—¦>ìÃr?¯°ßÉg¿º’Sö¸¨c?‰±²^Èþnľº£=êwu´cê—³J€ú„ú¾"êoê/2ÐÃÔŸª;QÝê×64#õGRúr±?0€}ŒýÏ;;pö¹ûù¹YÌTŒýÐàû?Š³¿±¯ŽÐª¯£5êû“Õße¾M-êïžúCÊW´Dêk4H} êñÕe¿g¿²_Ç­®à° û9÷!û±ö/Kf_±¯êH¸êÏÆŸ®Zšú·Gˆúwú#8H}Iì¿aÿßBö»_töŸ´65àì—г†ÄþvI쎳ÔGì+-Ò¯©ÔÙAêKRŸÊþ ¼qœ}ž€ýÈ~U›Uòˆ`?>6:\Œýƒ¶Ö2Ù×Aì+12¯©ÔÁAêËÁ>6öEÙ&ý_ìÛ‹²¿°?‹ÏþDÀþ8ľrƒÔGê£HR_2û„ú|öÀ•¿ì÷ƒçÜý¼ëÙSœýÿ²_Q\yÀ/w"Š'‘ÞÁ‚€tTš¢((@AìXƒD¬X° èY¢16+¢b!Æ[ÄŠ&ÄcŒ†ÓØrzšÓKNïÞ{3»ûfwvvv-ñÞ÷?ø¾ùý>ûÛoÙØ_'aÿû‘„}͇¨¯LýrªïîêLÔ×iˆúŠÕ—û öŸ>agÿ4bÿb3Å~‘,ûÑQ‘¡ìì¿KØ,D}yõ3ÕS_–}¢þ[¢¾ªìƒc_žýK±?]Â~2 û û‡¨¯’úW®/¼ú¥D}½ Q_%öÿ%aÿû;²?ˆÉ¾sgØ×õ¬üq¢`ªMÍ,¬ÁTwîê¦#õk)õ×ãê§&Æ!õý}t¯þ/@ýçDý·=D}ØÉÂþmÈþUEì/ÃØÏbaßEž}#Œý¿öÕ +-ËTÿªon©LýM«·å6R¿©ñ¦þõ£0õ쬵¢þžý‡ØÔú&ê_¾pžKý¾á½‚‰úz¢>·úRöѱ¯”ý€ýC¬ì–e_äëEØ×LXÕ—RßAÇêWBõWèXýͺQ?"$8ÀW¿ƒq{¢¾öCÔWÂþ+…ì?~ôðþÏw)ö¯s±?²?QÌ~Å~O6ö;HØ7$ì¿AôWýjZýâ¢Âù“ßRõ¨’QQ_ŸBÔçÃþ¸Ù¿%ÃþQ)û«eØOSȾ•¥¹öÿLØW1â©F +-­þï¼ÕôàgLý3'ŽËªŸ+¨ú†mXÕêÇ1Õ_/¯þí–»Dýÿ—õù²ÿ;û7o`ì~ŒfëæO$ìçs³oÏd¿­ûïöùG·ê¿ä¯þ(Õ‡5‘ú &¦~Ï°>PýTLý5˜úç›ÔRÿ7%êoÇÕAÔ׫õÕaÿWvö¿쟓°¿[Âþb&û böƒûn\ì·’e_×󇈎ÕÏ…ê—áêg+T¿½êûøõ£˜ê¯«_«%õÇõ“ãcqõìm™êõµ¢¾ì·ð`Å~NV†*ìöÕ oõc€ú:V›ú€úF‚«?9FaQ1R¿R^}X“ú°¦ +-êçM$êëYˆú<ÔW…ý œì“gßG¾­û­ ûj…¡~kNõ‡ðTr¨¾ú_75 õkäÔÏêLjÕwëÚY¡ú,ß^±úÖv,êç2Ô¯>T{üÄõ}ñR¶¦šê—,ž?»€©~w?o¢¾®CÔ×û+XÙïØì»3Ø7!ì¿i”«ï# +-dW¿ ©8Ôú»+Ë6éHýQ|Õ—¯©Xý§`ÜûûO õVíê¯[EÔ×ÏõÕbÿ?ö«vïØØ_ Ù_ÙŸB³ŸØЯOxˆûûm0ö‰ú*D5õ³YÕ?×Ð$„ú?ÝþA«ê·gWHjf6®~™0ê?êÚ@ýn\k¾|S#®~:P?š¨¯'!êkžýMìì³ï‡ØïÒÉ °o Ø7•gŸû*…¯úQ”ú£´¬þǬê‹|<ÔP_AM¦ú1¬ê×ÔÒ5ù¨ÿ_ê Õ?]Ç®~Blt¿ˆD}=QŸ'û¯a¿²?*gXFjRÂ`Šý}Ow·®€}œývhûj„—úˆCJý\†úÕ«8”Qõr\ýÁšQÔÄÕÏÀÕßTV¹›¡¾’š¯%‹ LýúÓuŸ!õ·âêgQê÷…ê{¸:wê[[˜™õu¢¾†ØÿRŽý¥4ûhöãÅì"ö]Åì[RìÃc_Ì~+öu=5ú¥bêK9¤ÔWC9õS¤~=Pÿ(P¿©¿dÁœéS'ê§@õ‡´úN¶Bª/bU_¸š +-ÔßÇT$¦¾ÈÕ´§jÓ5 8j’¢¾†ÙGO!a¿pVÁTÈ>z œ}oÏnûv}3SpìöÛ"ö ¤ì“cŸOø«ÏäP@õiÅê_l€­ÙÇT$¥~? ©ÏúãV,ùq“ü¥¹®ò_Nõõ+¤êƒšYé) ƒêËÔ$êk3D}­±¿JÊþXô‰ˆýÞa€}Œ}Ä~)û­éÀŽ}²œáqûkçfQ+®~–2õ¹8ä§~(R?Öœ4uúœÔ_š +-Zýz¨þ5‰ú\+¦ºúÒšD}} +-Q_ì7S쟒²_ºi=dт™S'cì÷ïÛ;¬Wp ¿¯·d¿£#`ßÊÒÜÌDÌ~Vöu=7ún»¸tÃÕÏÄÔ_/§þ­Û-Á õ72ÕO ÔWƒCŽš¶N´ú=B{÷£Ô9Ž¡þ¾´b …S_35I„Q_ãì×ì¯ÚE³¿|é¢ù…3§AöGšž’C±ßbß¹sGG{[ö ©¥ Ù'ǾòðV ¬ú›Ë*÷T\}™#xµ0G0£¦§ú )Y¸ú[…U_£iH„Q_sìŸGìzDÂþGRöÇÓì¿'a_äëåáæB±omeanjW¢Z +-rì«l¨iõÛMØÔOLÍŽ«_.Q¿±éM©¿ªDKê{‹ºCõ£eÕ߸µb½b´úö û*†M}c¤¾#Rß×?¨ßŸR4_õ_¼|3õõ·#õÏŸ]7ªŸœËPßžâÐXª>öÕåkòV?]ªþªu˜úüWŒ‡úM õgN?ZS½»S?wTvF*T¿OXOZýŽvD}…¨/,û÷°¿—fåòâ…àE¦åM‚ìgBöESìˆ|<Ýݺvéää`gØ7;A³oH­Íþ;„}%á¥~¯°H¨~Pü\ýý@ý“lêÃÑãRNÆ!˜‡{RõÏž®;vä`Cý±#0õý¼=\‘úðÓ·o§õó +-fÏ_\Õß®’ú¯% ðJÜ“ªù Ì=­þ÷ׯõÏõkÅê¯(.*œ‘?™R?N¬¾'Q_Ç!êkŠý+ˆýz&û‹Ùÿ0oRýä!qƒ¢ûõ éàØw¥Ù·²473ìõ)öɱÏ?Lõ Û!õÁPãê‡õߣÕC½péß ú; úŸŸüSÿþÃÇŠÔgpˆ©ÿ ªÿð>TÿækÍPýS_Pê—âêKOŽî ÔwwuîÔ·²_žU}–šrêSêÛSêûQêÇ&$õÇNÄÕ¯:x„¹b÷žÝ\ºõu¢¾ ì?WÊ~õÞ]å[ û%Å çÁ7™”;zDVfZrBÜÀˆý@?oÏn®àr´·µ±²07…ËŽ}´äØçõáPóRÿ£O(õ?êÕx‰ú8‡”†´úO(õïüxó»«Í—/Pê¨Ú¹½tÃZLý÷úÔTÿOìËkjfÔwvEê‡DÐêÀÔ/Eê«;}¬Xóµ7¡ú 'X±g¬ê¿æV¿©ÿMS#RÿT3¦þðÌÔĸLõm€ú&@ývD}m‡¨¯ öïp°¿feÉ’…ófO’;:'+#-)aðÀ}{‡õ +-ô÷õöèæâŒØ·¶´0·Í>9öU‰Rõ½|úƒ€úCqõ·”ïØËTÿNË=Nõ1y«¿r™&Õ—_Þh°¼éÃ0õ7Ðêqêìù —›¯~wóÇ;”úOhõÿ­ªú·dÔ/ÇÔM©ß¨äï‹Ôw¤Õ7Fêõµ¢¾FÙ¿ÜÔx¾þ dÿðÁê½;+ʶlR²¤°Ÿ_%gXFjRüà˜þˆýî"_/w7—.œÀ)dmi¶®…‘Q[¶c_׳£¿áPßÞ±Cý¤´¡9¸úÛ€ú‡ÙÔÿ§@êoCê/š7kÚ úI´ú~^SŸZ^‰ú+×õwVÐœúû÷ì@ê/]8wæ‡SÆõÓ ú‘á½0õaO4Þ¨g+Žž$†¨¯Aö¯‰Ù?Y÷Y-`bx•%EsgMÏŸ2z–Äøؘ¨ÈˆÐžA"Ow×®ûVàê@ûˆýVøjåPnõÁPõƒú(õÁPO›5o‘¼ú@CZý¼™ú—.|Õ?|`/Cý19PýA¸úŽö6Lõ¹4Tº¼^~¸úTÏe©ÿ?öëÄ«Æ}ø:w]ÇZ÷›y5B‰Ôn. %ó*KÉ‘H7Q’¢hNóœL!J“æÙ˜dvp]‹{eÝç÷{ß½÷oÕN;ݵîûüÏï}žÏû} O¬>ôÉV¿®º¼ôæ5¶úaÇ9ê;ÙY™1êÿ¯£þ`±ÿøÑý.ûÅ4û ±ÑgÂCáYüìóöÚ¹ÕÃm½“½¥™‘Áª:KiÎSSV”—•š=súÔÉÇ3Â>ÅþðáLص„¨O5¡þ=¤þZŽú !¨!=‡Rÿn]SoêäPˆúOŸ<¢Õ/-)¾„Õ?Gªï$.õ{è“VßÈ| ¨¿‰P?Ô/@ê ö)¢úÿæQÿ ­~¨)?;=9î\$Wý \õç©*ú³õ‡°õÅÌþ;Xšý‡ˆýF`¿‚Í~fZrBLtdxhpà?ß½Þ^;¶lrsq\kmij´z¥.°¿@CUIANF +-‡ý‰ãÇÂþbÂ~«꟡Õ/.¢~¯~ãÓPP}ÐR?2ŒG}3£Õ áBÐP_4 ‡ O~õÿ‰ÕG}Þïhe«_êÇêCŸvÐ'[ý¹2ýì“)ñ£þ ±ßÍe¿¦º¢ ³ŸŸ“™šy*$8ððÁý{w{nß¼ÉÕÙÑn… K_oùR­…óÕU”æÊIÏÁìO7v´$öû]}µèøñ“î«/¢†8Pý£øn-Á›&L\7MÏ·dÑþn¢Ý4L‰·õû·n_¾˜Ÿ“쟊 9vÔŸ~÷ ël­Ì õW,Ó^¬9OMYQ^VjöÌéS'O?N ì3ê÷]‡ztCíê±ÍÓÛçà¬~¨_ˆÔ¯¼[ßõù3ðnno!Õ#Ôwõ­øÔŸ"6õçÈȃúšZ:+úv þ–°¼þÇ‘úÉéÙ”úÕu­÷{T_H£½«_RLß4gNqÕ_·v¹Ñj½eKÎScÔêbÔ;ûï1û/žwwQì7ûUˆýkÀ~vFJRÜù³a'‚ü÷Ù³kçVx'{K3#ƒUº:K-ÐPUR“é-ìÿ…a¿÷¢‡cH¨?vÜDÞ¡6€¡¶ç¨ê§däŠOýgõË‘úùÙiÉqÑ„úë‘ú,¬¾†ª"¨?S\êO!ÕקÔw'Ô#ÕoiGê?ƒ>ÿxÿ¡?êb«ßýä1R¿þnEYIñå‚œŒ ñç õ]ÔŸ1u2¯úÃõX1ê‹™}û|ì·67ÖÕT•cö ó²ÓSãÎ᧠8t`Ÿ·×Ž-n.Žk­-LY«õ–/ÕZ8_]Eq®¬´Ð°?Œ û¢TOêGêÏ–’U€¡^¤½|¥±…µ½3¡þYBýšú¦6P¿«¿êùòùVÿÍ«Ïžvbõk±úE”ú'¹ê;žú3A}EU ¬>ËÌÊÎi=¡~t\rZv>R¿œV¿“«þ§Ï_¾|¯ú•HýBP?«ä ·ç6PßÚÜ«?_M™«þhRý¿r{(fæÿ©õ‡ý7\öÛ[›êîV•—–\¿z©0/+ýBblô™ðÐàñóÝ»ÛsûfwWgÛ5æƆú+–i/Öœ§¦¬ /#%$ìÿÌ»Ìz¯ŸÕ1r¥þ´³¥å”Õ õÝõcR2s aôʸ£÷üÕ›·0zÙ£×—úx +-Ô¿}ãjQ~VZR?øè!ßßví@êÛZ™²ôu—.&Ô?9|q|Ý‘ß[X£"«ïÈUÿd¥~ÑÕ·Ë«kÙê£ÃêãF¿KýJýÜŒP?<$ˆ£¾=¨o°rÙ’E ¾‚¬ÔlP"Ì6£þP£þ ²ÿ¬»«óу{û•˜ý¢‚Ü̴䄘èÈS!Çccifd°RW‡}%ûsÂþp&ì‹T¢«obaêÿºÝkÏ~¿€cHýÄ”>G¯ÿê7êÇrÕß¼‘R¨¿@C«?V¾8õ›ïKýŸ¸êC£X}h”PñR]}–©•-¨¿yÇ®ß|ÁŽúIiYRÿ?´ú(õ»?¸×†Õ¿uR?æ,W}7g{k P¹6V_N«¢ÑTŸëÁ-F}1²ÿö€`ÿ%—ý¦†Ú»•wnß,¾RT“™š>*"ìDP€ÿï>{víÜêáæâhgmaÂÒ×ë3ì3ê÷Y}«¯¢¾©oê;pÕ= ê³G¯ª¦¡ïуáëIýwXý®Î‡Xý*¬~^VjRl¡¾‹£­¥©!¯úl û­þÏXý‘´úÓ°ú* @ýU,SK[G—„ú±õ«j@ý‡]ߣþ¿úo^!õÞkkõïܺ~¥073%«à·×ö_A} J}uJýiŒúCVŒúâb‡}‚ý·ûm-MõµÕe·o^»|1?;#%)îõ:~¾{w{nßì¾aƒ­•™±Á*]%|a,„} ¾°Ï¨ß[ bÈQ0¤ÕGšXÚ8¸läªG/TŸÆ°'õ9“@«O`ÈV0õï€ú)õO‡rÕwਯ®¢êÿí{Ô'#ÍQßÔw Ô‡F“R³òØê7·÷Ù(ù{ãS5J«ßPS…Ô¿˜›™ +-êŸ=ÆQßÔ7DêC£ŒúC\ŒúƒÌþÓ'Ýïhki¬¯©ª(»uãÚ弬ô ‰±Ñ‘á¡Á‡9Ïã´ÖÚ”µZo¹@Ø»!1©On³=–ðL¨¯ÈVŸC¬>Âð"`xa(6õi AýD¤>CPßÆÒ„­¾‚˜Õ'¥~oT£ìß4ze°Ío£L‰µõÅÁþŸ<ì¢Øÿ.ß—ÏûýæƺšªòÒ’ëW/äf¦%ÇÇDE„ +-8t`Ÿ·×Ž-›\!ì›ó†ýÙtØ-9Šöéí`Â~oÅ‹ápZ}IÀpŠÀ2<Ø‘ˆÀ ~Ú"°†Ý‚ÆD‰/ó4:¬Ï£Æ8jbD:jþàQsLÈQ£Žš9„ú¿PG,£þ+F}q±ÿ•ŸýwûݘýöÖ憺»•wnß,¾R”Ÿïwî ~?ß½œ°oI†}9™9³ö%ñrÐêó¬³BŠO}4Ó#$FIŽ;aÒ”é´úšC–©•­ãzw®úÑHý|¬~umCKûý‡O1†ï?|¤Gï+¯úßHõ¿ +-ªÿaX_S‰ÕÏÍLIŒ9ÂUßÔ7@êÏWW«ú“§Í Õ_¤½|¥¡‰…ƒ3¡þÙÎŽÑê Ù±¯„úßxǽgõËAý"Jýˆ“ÁõA}[}y¤þ$*ÏÀ`ã#–Qÿ‡£¾ØÙÿŒ–Øì¿~õâ9ä½Gîµ·4Õ×VW”ݺqíra^Vú…„ØèÈS!ÇŽúÿ/ìk¡°¯(/+L™4aR@‚RŸßf?„TOê㨯ª¡©¥³BÔ·õ·ì„™öDêÇ%¥e³Õoõ}¿úðÏÎU¿ Ô/õúAGúx{nCê[[¦úÊêó‘ú ¾=Gý pP?EØŽ½íQýo<ÓR~„£©ÿ´¢MKCm5V??+-).š«¾ûzG[+S–¾îR-M U¬þt˜ì±c$كͨÿ‹Q؇°ì¿yýòÅ3Ì~G[Kc}MUyiÉõ«E¹™©Éì"þl†Þ2íE 4T•æÊIÃnLÅ +-Àr x`ö£§"fZPýY ¾[}3+;'ŽúÇÃ"£ã’‘ú×n–L}tê½}ý©ÿ £µ ©_R|¹07#%á`õ@ýBر2ر¦ÿ²_/îT¥{ÀÏ9O™ç9Íè”zº +-•®¡R©iç¾]v$Gsä¤bR))éÞ¨I!¹mwÛ¢¨& ¹uQr§{f˜Ssžó{ßµöZ›½7›ÙÌ<Ϭßð®õû~Þï[Wßë|þ©ß54õ›@ýZ¤~qa^/‰‹Ô?è¿{§—¨Ï¶d™è#õ•A}¤þFýßdõ‡ƒýŸøì¿ö;;Ú[›Ÿ>yô ¦ªânÉ­âkWs³xÉ ±tÙ÷¡Ê>Ë €B¤€l` À™"L>úê“;=yšœÂ,¥ùʪX}S–›ã²…V?"Š›ÌËÎõKË«°ú­í`!¡~wÏÀêÿLªÿŽP¿•P¿B@ý giõ7Ú[ÃónÕr]¤þ|ô¸ƒÿ=Abõÿ$¬>:)VÚ ÅYs@zµõ–ƒú¬í7n¦Õ¿p)&!%#çʵXýGOš[ õß‘êÿ<õ_RêW•ßù¾¸0«B©ïÂõM±úPh”f)ÈM#Õÿ¢·úbNÊŒ‡Q_ê™ç³ßC³ÿæõ«¨ñµ65Ô?~x¿º²¼ôöÍ¢‚üœŒÔ$²¿«³#Ûjƒ™ñ}]­Åj* ç!¦ãJ4n¬ ­~¯VÄDxPR_KW•¨oÇA;½Ëoÿ¡£Hýhnr:¡~_ýN¬þ]zY8$õÓSâ‘ú§Žâ«oêúZ„úè–Ç¿[@ýþ,£þø “z§w-N/¥þ©³ ~|J:¡~ÅPÕïé&Ô‡“B³!Õ/Eêgó’¹Ñ”úÿþz ¨oÅ25õµús(õÇ2êü0êK…ý_(öqÙÇ-èŠ>$âÅ:žµAzR÷ Êþ¡²ÐßÏÇÛÓÝÍe£½Åz@@O{‰:ÊÆlEy9P¢ì8ª}ƨ?àPŠÛiåEx§M7X;Õ #¢ã‘ú×n`õÁBRý·BêÿOCZý|õÁB¤~UE)¨ŸŸžÕßï· ,õ­6˜bõ5)ÓêKlá€éåŸt:éæ¯è“^Šõ³‘úpÒ¡©Ï?éú¤°à„ú}Oê"tR!õG t`¯ï/0ÀÉÁÖ’µníêË–jj,úÇ‚¹J3!S&M”ÅééøœQàÛ€Eî44`ÚBªÒBaõÅZB[ȱC x<î†Ö€~Õ p¿‘¯iÜoÍôýv%^5Ñ—hõ%{ÕŒbÔ™aÔöQÙ'ÙÇe¿•ý¢ì—•@Ù¿’›ÉKŽ‰ ;rêXPÀ¾Ý»ð'âØY››¯Y©¯£µXMeá<%ŽI Æô‰Ç_õEΟ…ÕƒÔ—8 vZqöÜ°ÓÚzËW¯…¶Gêo÷Ùsàð±Óç@ý„” ¬þÝŠê¡5`ø÷ðçßSê?}ü°¶ªœPŸ—ÌEêŸ ôß½ÓËÔgƒú†ú:šÃ¥¾ª†–Ž¾‘)ËÊŽC©2$4"š›Ì£Ôøø)©þ!õE•VÿG¾úÏõ«+î"õs@ý˜KÎ>vøÀŸíÿõíAýµ«—ëjƒú æÌRÄ‹-;Žl3Œú#9ŒúRTŸ`—ý\ö!üoßô*ûÕ¨ì߸^m(1.*‚qüH ¿Ÿ·§»›ËF{‹õ&†%H}ŽéS'ãN$è/áˆT_†P:¡¾¨¿Ô7·¶wr¥Õ¿I¨ýæmØ<¬~Û ÕÇÔ‡ÿÞA©©ŸÅKâF…Óê»mâ°-Y&|õçá§V_æË1CUÌ—2”úJH}MPßÔgƒú^ÞÀ`¤~¨Ÿ…Õ/ç«ßÕßõáÇîžžÁªßF¨P?#%!&ò"­¾«“½µ9zÆêi/VƒWìlXlB}Qê3[=¬Ã¨/Mö©²è,û¨ì?…²_SUq·äVQ!ä"-‰‹¿Ñ‰àCöøîØæ±e³“ƒ­%ËÔhÕ +-½¥KÔQù›­(Õ—eÔ—|V_Em RßØÌÜÔßêéí»7 VúbdlB¯ÍÃê¿xõ6¯‹¿y«¿½½«_Y~çVqa¡þùoiõ)õÕUái7S^nª´ÔŸ*§0Siž²ª:Vß„eÉælr£Õâ&ñ²ò +-‹oÝ)¯Äê·´w aõñQPÿ¿¤úï)õëëú%7¯_ÍÉHMˆõÏ +-Øëëí¹Ô·17cÔÿ} £þp°O•ýøeÿ´¾†z ú^ô¾kWs3yÉñ1‘açCN=ßÈëë¯\A}Ôˆ–-Eåo>„Cµ?œ>„T>˜€ô^êÿíôßøêO.ê/õ—ê­\clfaãàL«ÿ]X$l^&Þ¼²{5b6opê7‚ú5Hý¢‚¼¬´¤8¤þ‰#÷}³c›;¨ok o»•ð»Ô—¡¾˜?Ýû¨}Ô—õ"õ—úë-ÙŽ|õ!dçãâ’Ò²ò +-Š~¥úúpTP¿±Zͽ2¤~nfjbldØw´úÎ6fÆkVBŸQSAêCAêÿµz­õGbõ¥ªþ/eÿ'‚ý·DÙoomݯ®,/½}ã:ž’{9<ôì©cA÷íÞ…¾‘³#ÛjúµkV.ÓÑÔX„*80m +-‘ZýÑŒúýM +-?ûœ TQ¨¢¾dé2P½…­ƒó?Ý·íøfßÁ#'@ýËq‰i ~Ñ­’²J¬~K[Ç`Ô «ßÖÒXÿøAMeV?3-1îr­>üo[‹õ&ð»ái§‚Õ‡—…ƒVŸ<êxYJ}ò¨ ¾­ã&ꨠþeP?«Gõ)õE†¬?õ©£ +-¨Ÿ–{Ô§êG5uT´×•é £¾tÙÿDÁ/ûoPê|ÖÖÒôôÉ#Ô¿YTŸžšqáìéãGúûíÚî ߈cgmŽ‘¾ŽÖb¤¾ÒL‘êbÔ?â +-°ìDšBMŠBg +-ÃzQ(F}ñŠV¿©_êçêCîÂIøa'aºàð³]p“û½à¾å_pý^pŸÄ\pýUìgI\pšäQѳf‚äÏf¤7Œúà>NŠÊÄ»· þs¬~ÓºµUw€ÂüœŒÔDntÄ…sЇ÷ûùx{º»ñÕ7Ð×ÕZ¬†Ã! þŒú8õ'PXU]SGßÀÔg;nróðÂ+ +-p¨Ÿ…Õ/—F~Ö§§øxPÀ^_o¸ål,ÌõÕTàe§( >!á ÔÇgõÇ’ÏÅÙs¨¨ê›YØ õ=½}÷?C„,‡¬ìÞ¯{Ö¼Ãê··À[ö!”¬~VZR\T8¨è¿{§—‡Û&G6¨oh ¯£©®Ê¨ÿÛ£¾tÕÿEP}\ößAþ_>ïìhomj¨¯{H¨_\x%'3-‰‹>ÒHÆþ=>ÞÛÜÝ\6ÚÛXàlðÕŸ¥0«?žR_€& "G`¥GQ+M¨?MNa¦Ò|eU ¬¾)Ë’Í!Õ >ÅMâeåêׂúM”ú]äæ}”T}¸ëáªoFêW“êg¤&ÄF^‡mÉ2Åêk¨*ÏÇu«?–ßfzmõÈoÍiõ¥Ìþ'2ü œ Üú^>‡T´67ÔC,€Èŵ+¹ ~| úH'‚íßãë½ÍƒV¹®v_õÇ2êK8”„B+Ô‡•õµtõ ŒLYVl¹ÒXýˆhn2/;Ô/ý?ûõýå•Æüìêº{b›ãŠ‚E1±RE•$1tÚPb ¸@QD*(½ÍÀPQÞ‡¢Åquh²çìsïûNaf€ÁŒüßç?xî}žÏýÞêz¬~÷“žÞ¾ «n½¿}ðàÎÛšj+Ë@}øÝ1AýX +-B}:¨¯ÔWUZ+uõ#õ×*©"õµA}:Wýs!—@}fFv¹dÍmí°dÏzûú¯&¬~šo¬~}uÅÝ’ÂüÜ,|d±úÞžnßÚë`cA3ÐÙ ê«#õäEÕÿ´:…RŠRÕïõ›‘úw õY @Éß÷4¥¾ôJTB¡‘^£¨‚GZÇFŒ´›§·ï…àðÈè‹M¨_SßÔÊAê# õ‡†ÇWÿ ©þ ¡>¼ôœÖ憚ʲÛEyÙéLxæ±ú^î.‡÷9ÚÑMt õ õe õgIA}YB}EB}]#Sºã¾Ã.î^§±ú1‰Ìô켂¢Ûe•5 Í­žúƒ¤úoÆWxˆPõŠÔç´ÂW–PŸÍb$DG†_ð%Õ·µ¤êìüjÛfuE¬>ô +-êÏT*¥þ¤¥>¥þŸ­Ä«Ï•P^a9ÒÚx¤‘„\õcéì\$!¨$$ÕG¾KBÉÔg§Ãç$ä©oK75ÔÕF"õä±ú’Pœú½nܼm;ê•nËWŸìu„úÝ’©?²××Ü^A}Ô+¨zÍåözÁ—Û«¥˜^G}á&{f>¬¢Ô—úc©ÿ ©ß ê7!õïê§ÁbÀ!ùûzSêK­ÆÊ¿rÍ¿Ò•òoŒ@þ%$Í¿ ª?e‚êãNô_C¾püMLÂ{}á$ø×ÈêÏ–ð_C•ÔŠR_zêóÐGêÃF`õ õŸ>yü°³½í~S}Meù’‚°g·¥©‘Þ®|õ—x9xêO +-EÔ~ÕHõÿ#=«þB¹% þêuJjšZ;vé›YÙcõOøø†^¾ ƒw]hð°ú/Iõߎ¯>¾vPžú¤>|ïê« õ³X)ñÑaýÏž:þï£H} šÎÎ/·nÚ ²^¼úS%SŸÛ¬õ׫¨oÚúåNš… ¹¾gý/†ú)¬,Býêú¦û:@ýžÞ¾çƒ/_‘[6ŽúoIõ_rÕïjokõËAý¯g¤&Å^»ÈUßÞÊÌF[KSC &Ô_"·lPÿ#œf(õ'©(õ¥†¾úC\õ!õýúK¨ß¹¯¥±®º¢¬´ø&$¿ŒÔäøèÈðÀógNyº¹8Ñê±u“ºª"$¢êÏ Ô—¤„ÔG=cÖìA}PÙŠÏV¯SVÓØòÅŽ]úÆæVöß8rìû“g°úqÉ©™ ~qiyUm#¼ÇxðúObõáÒá‡Ô¯«¾êßÈÉJK‰â©y ô³Ãêã'~!VŸw×ï¦þl¬þÂEŸB³ þPÿëo L,lvï9x”«~T|JZVÎ Pÿ©þã'=hË&¨þk¤>4‹Ôo¬­*/-õ3S“ã@ý ógN~ìÈoí­Ìõa´·h¨)ã<êËŸX¡f©©~ßE©/5õyèã}@ Ô|RÐý¨«ãAksRÿö­›7rØé̤¸¨ˆðà?Ÿ“ÇÝÐÙ[[Ð uµa5À¤þòeKĪ?…RÔE}B¬þzå  þ×ß蛘[ï&Õ‡Á»—œ–™sãfñ{Uu¤ú=ƒ7–ú|¹êÃ߇‡þÞb¸ñÌ´äø¨+?„¤úÖ&ú„úÊë1„£©?êEKÔ,V_ßÄš«>n6ž×luR¿KDý·’ª›%Õ¯«â5G4K¨¿ÛÚ5 ê¿s³TI©(õ¥‰¾¸¨‚Pï3HB;ÛÛî75ÔVAð+‚0”Åb$Æ^»gägtôÐ>'{Ø ]ííZ°þ>_¹|)¨/ó/PŽ€úS)õǨ1!$â¯2/þò ôÇâø+BÁÁ¯þï#Ô! ´ÇîÀ¾cü­ÙOxê¯ÃOÜñOÜõqž8ÉšþØ`õñÇæÊüµÈÇF–T&Ù,™f¨©~ßE©/%ôE£>¡þ‹þ>X P¿«ƒÓÚÒX_SY~§¸0?/;#-ŸQ¿¯·—DZ#÷:ÚYú:;¿ÒÒÔPSõ@}9”ˆú3gð–ƒ €Z±ÅsPd¢ed¡‰^³^E©¯c@³°qàª1,":>…••“_Xr÷^u=Rÿá‹¿OIõk«ÊKoÁ;Ÿ™šwírh O}+scý]H}5žúÄ¿îšÿÀODýêÏýdžÌB9R}5¤þ.}cs+{žú¡°eÉ©™×ü©¸´ü}l^T¿¾RMa~N+%>:"Œ«þ^ Ì6¨¯Ž‚<¨¿©?G@}~·“=5TQêKIýè‹Dýž'ݺÚÜon¨­®(»} ²;™xþì)Owç{léfÆú‡¶mÞ¨¦(È/]ŒÕÿ'¥¾Ä%è ¢çò'z¢ +-žhCš¥ šh7Ooß Á ~ƒÅÎEêWêw «ÿ›¤ê÷cõP?#5)©ïçsÂÃÕy¿“½•™±¨o¼ÒºU+ñ?ù¿‹ú¨Ûé3fΞêÏõ—._¹z’š†&¨¯glfeï´ßÙÕã„_ ¨ [voYUm#Ëú%Uÿ7AõûzaÄIõ+ú¹l#!:"<ø‚¯·§Ûw‡ö:ØZÒ !ÑlÛ¬®¢ˆÕ_,»`>šlJýÉ.J}©¢ÿ;‰>^PõvpÚZšpÔ/)*€àÇb$Æ^»àçsò8qD6–¦FˆÈCªHýÄjÌ#¥¾D%ªþ ¤>8½T^aÕˆ‰vÜw˜T?<2&‘ÎÎ-(º]VQSßÜÊéõŸõöõ þÔ_ý7BôÅëïë}êw¶·ÁK_‰Ô‡ß3)ö꥞úvt3#=ííZšU•Ö"õË-àª/ê „êÄUÜbPÕZ%µšZÛµõŒÌèv|õ/]Mbfdç‘[ÖÜÖÞ [†º…-{%©úÃC(Û  nAýNNks} Äš¢‚\v:#!&’Tßåð>G[KSC]mP£ª"Ñ­,Ñí,qÝNöÔ|PE©/5ôùQ¡OFýõŸBÔïÄQ¿¢~é­›ù¹Ù©ÉñpD¡Aþ¾§Ox;zh¯£•¹‰.0°Ecƒ +-ÚŒË>]„WƒPvC„j=„ê/âÔrP;¨kdJ·õ]ܽNŸ ¹“ÈLÏÎCêWÖ4 õu"õÑܽÅAõ õáÖÁÁ†šJä`^v:31Ô8wÚËõMt¥¨þøÝ:ñ»½:V·ÿ•¼Û×cuÉïÖqÜnÇÿÙP%¢Ô—šú<ôa†Hô_ <ïëý¥Ðïêà´¶4ò£~‹‘xþÌÿٯ﷨Î,à»›õÙ$Ä’„ÁRA iƒtdèUÁ‚mQƒ"¢ˆ"Q•&½ÃPT‘6 )bA1(°*›‰Éóìyï½Ó(*øÓ=ÿÁ¹÷œÏû=GýìÝåãåîlociJ5ÐÕRWQ¢Èɬ]%)¾\TXè[X Aó±¨Oª?Eñ¦ß¹\Êâé×h<ýÆ&é·¥ßOw°ŸÓAH¿à`七ÎöDú݈Ò歹‘~ùªÏï²1„ýµwãà²I„Ëf&ß8tÙt¢Ë¦šý²9s’uÙ8Àec„ÔWREê/f©?ŸlRýÏS¤ú³…þGúï^þûÐÛóøaWG[K#“Q]ADýdÖ +-¾÷6WG[ks#=M`@AVz r@Ô_º_ "‘êOVœêÿëË/¿Fê "…E–KH®–õU5´õŒL,m\=‘úG‚BÂ".]‰…¹ËÇæŽ96w˜ƒo¦Pÿ¯1áÌCï=Üx˜ú=HýæFUEY =7#%Ô ô÷Û·³¨o€ÔW”‡7~å +-PûÙÄ ? õÿÆ«>ÚßEãû+#¯8¾¿°¿~þÁ¡á ~BJF.½¤¬¢ŠÑÐŒÔïéëGÝŽ õýíÝ»±nù´Ë¡þ–úOvµ·62k@ý¢ü¬´±1—"ÂBpõ=]h–¦FzÚªJnI P_4Äh“ê¦"ÕŸ9ôÿ$ÐG«€E}@è%¬ŠútÞomªGQ¿”3êŸô?°Ïwû.4+3cÃÍ›4Ô”!ü­–’X¥¿¥‹Qüc©vƒ\Ž‰Š[}èy Ð@ ‹.—Z#-KQFêSM-iŽ®ž>¾û †¹KJËÎ/º]^ ê·¢¹ëÅæn˜}î¦R»òÞ¼z‰N¼žG:ÚšëUwKKè9É ×._SßÝÉÎÚܘ]}Ñeè‰dWÿ‹éªÏgEÙÕ76·¶srSÿÂåk É9ô’Ò»UŒú涎@ýÁWC#¯ßŒíN¡>Ñ.RÚ…lƒ©ßĬ©,¿]”Ÿ–séüÙSÇí÷õñtu¤Y™R‘úÊH}) 쎅vIõ?w‘êÏ úñAÿõ0ôúº»ÚÛš˜µUwnÓs³Æ?PPñœì¶Z˜PõuµÔU”(r2kWCEêcyhþ¼¯¿âÈärð­©Õ—£(«iêèSͬlݼ¶ãêŸ=u5.)=» Ô¯e6êpÏÝdêÿÁ­~/¡~-R¿Ôõ>}âèOÿÞ½ÝËÝÉÖÚÌX_GyøÝR|ÔgÿÕ·ûÎv‰ýBêK­•‘SÄÚ56³¶ur÷Ú¾ö÷ÄéŸAýxP¿©_K¨ßÛµûêcí"õt€úµ ~qAvzRüÕ(B}h×ÍÑÖÊŒŠµ Ó ê¯àQŸxäÈÁžå"ÕŸôÿG ?2ôjvÿYoÏã¶–ÆzFõ½òҒ¼ìô”ÄX>Qß|‹¡ž¶¦ÚÆ +-†V­A‹±dÑBÖf°©ÿwr9øÕÄáWˆ¿0u5>9=§ ¸ônem}bðɃìsÇ_ý?ÙÔK¨ "õ›êqsÒ“ƒcêó0ø1áwÊGN†ë‘#Ú=Ïj=rŸÖ.×#ׄ=rD»<œë‘ãÚüsŠÓ†¬™(Rý™C[Nôaž#ô!ÝoiªgÔTÞ-»YT“™z#þZôň³lßE}Sªî&uUeEùõëVCCQ-†À|Rý)Š]A¾-#¯ˆ ´±¹µh?ÿÀ`,ü&@ø¥£ð˘(üþñÁá·«~ó!üÆ…__O7Gš•)U_[CÔ—ž-õÑi£ª¡­O5µ¢9ºyúpž6ùŸpÚ¼çV¿8mè´¡Ãi“€N›Ðà@¿=;~pw¶³676ÐÕú~£¢<¦>šî¥‹‘êî"ÕŸQôgGÐЇ÷³½µ¹¡®¦²¢ìV1=7+->OÔ…ð3!ÇòDýïQÔ‡µ_.ŠÔ_²Wm©þ„Å«þ<èEK¾ùZ|åªuÄ@bíá«}=!%#—^RVQÅhhnëì~ÔÓ×?0øŠ]ý÷ÓU|þì)¦~#³æÞ[EùÙiIq1—"ÂBõ]h–¦Fz ¾ES.;üo²úЯ°¦¾,E Ô×32µ¤9¸ꇄEÀš%¥eçckÆll_³áVÿík˜õÁ þãîÎûÍ ŒªŠ²›ôÜÌ”„ëÑ‘á¸ú;½=œí¶Â€ƒú*P¨‘çE¶Ùž¼_²f Hõg}l FÙÐï{úäQwg{[s#³¶ªâÎí’¼ìô”ÄØ«—#Ï… +->vøàþÝü¢þ)C"Xøƒ½Àã{"Wƒoq*H¨/€«/"&.¹zÝz… *ê›6n±Øjïâá½sïÃÇNž9ê'¦dæÞ,«¨®kh¹ßÙýøi_ÿ‹ÁWÃ#¯ß‚ú¿½›Z}ìÕÿu© +-ê·4Öáêg¥Ýˆ½‚Ô:rpß®·¹:ØXšéÁWR•A}ü‡'üõ¡ß¹Ð/Rÿ;Pú•–UPRUߤgdbiãàºíÇ]û Bê_‰…5ËçZ3Ô/¬Ù(¶f¿O­>ô‹ÔÇûí{ŠÔoi¨«õ ó2S¯G_ßâ¯àÂqׂH}# BAPÿâ•ØÄÔ¬¼B»j;\}\A¤þd +-ò¨Ï©`c]5¨_˜—•š{…P©ïboca2‚ÓξÓå _{¼_ì•›¼ßIÕŸ¨ßgÜýÞÀúe½r.“½rÓ½mÈš"ÕŸôáäôô;ýzý¢ôqâÑÇ ?rü¨ÿ}¾;¼·¹:ÚZ[˜Põuµx¢>Z –ú¤ú—úhžç-\¼ä!P_Bj´,EIUC›È¾ž>cÙ7fÂì;}?$ûz°e_y¾êÏùPõçðU_žïmsn›ÔÌ<ÎÛ†ã•{7mõ9n›ÖFæØmúm|}<]h–¦FzÚªJYé5Rj°SÆ›Tÿ³©þ,£ßƒÐ¿ßÒTϨ©¼[v«¸ 7+-9!6&ê¹°S'Ä?Ž“½¥™±áfm 5®¨[±P€+ê“êOX©¿ô[!aQL}9Š2RŸjjEstóôñÝ(à8>vIiÙùE·Ë+k˜­hìz±±†±e_ÿWM¨—Þ üý¤~s©OÏÍLI¸èï·g‡·‡³ÝVó-ºZpÜɯ_»j¥¸Ø2\ýóçòª?YÃœê£ÆÔ_&&νÀ þ?ÿÀàÐðÈèë )™¹t¤>£¡©ßÓ×?ê õñ†ß³ï¯úDÃHý¡—¿<Ö‹©ßĬ©,¿]œŸ–uþì©ã‡öûúx¹9Ò¬L©ú:šjÊ9¤þ +-õçàÃMŽöì©þ¬¢ßÛóø!Ž~Ž>=/+=91öêåȈ³§ƒáÛøíÝåãåîâ@³2ßb¤§£¥®¢D™,êsÄ!r3xŠè/8æW™è +-P_ÔWÓÔѧšYÙ:ºýŸý:ÿæ:ßã~îé6ÍL í“Ý-»¬ CÉòµï;Y²$2˜T%¥´Q”]È®J*úJb(ZƸ•êÜsîLçžs_ï÷çóµ|}mcùe>¯ÿàõù¼^÷óåéóŒÆ.>%#» ¸¼ +-Ôol¦·wv#õß0݌ԇ‘úϺ;·µ4Ý»}£º¢´0'35!ö©¾—›“¥©V_^žyøáÜœÁùPÌKÊÊã60µ´sB ŒÕ?›š™SXZQ}ãö½¦–¶ÇÝÏú¨áá³VŸh¸ï94ÜNoiDê—äd¤Ä_8uìðÁŸ|=]l-L °úò2¸a^nŽÙ7LÕœ‹R¡Ñïîìh§·úõ·jýâ‚ܬË)‰Ïç9v0$h¯¯—ûNG[+3cšîvM"êK@Ô˜õ¿¦¢þô5‚¼A@P4±´Ebõ£‚9%åÁÆ:F°A4v¬ÕGsð'³ú}X}@©_^‚õº9ÙZ*OŽà’™«?a9FFÏÑ0ùÌ¡†S¨á6FÃä3 OþÌmX‡›”ú‹X”úó‰þFчÀèwaôïúՕ׊ s¯d¤&¢/s"âphHpÀoW';ks=m-­õe$ÅE…YDý1kA©Ïºþ1Qý0ϫ׮Ûó,€çYžœgK;gwFôŽƒè›[X2uôýsVÑw€9úf£è{öd}!úÒpô…_.œ— «ÏÎF^vãîºuL,ð +-ò¸áÂÇ‹ã&‚é¸iAÇͳÙ7ãÔÄÇMO×ã¶VÆq“›™šM7ÞîÎvV¦†z ¾Šœ³¢B|LÝôêÿüŒÔ_¼Äê?l¾çÖ¿®—]Í¿’ž|éü™GÙêït°17ÖGê+n–ÆêÃ_ø<¨s@Ç‚BH}E¤¾¾±¹ÃNP?hÿ/GOœ9)9ö¬ ïYóÃvrÏpÇ?}Æ{öÇ$êvü_è©OtLªÿðAÃ[5•×®æe¥'ú¸cks#¢c˜rQ!²ãÙ¾sT͵(õý'úwênÔ\Çèg¦%ÇÇÆœ9y¾Ë¾@ÿÝ^î.Ž¶VfÆ4]m-uUÅÍ2’â¢Â1úÐF0E}b+(õ'©©’/™| °>þ “ү䛺^†Ã36T˜¡~ïÓ_‘H}dàdà™ñ¢ä ¢äËO$ßU³K¾Þ¹o&}çÌ­Ð;GtŒÞ9Ôq%ÙqǼtŒÞ¹G¬Þ¹`–ïÜ_ºn¨škQê/úåø«¤'ÇÇÅœ:vp_Ð^_/NvVæÆzÚZ[Uåe¥ÄÅ„7 +-ðórsnX¿nÍê•TÔŸM‘ó¼dÌ8¨Ï‹Õ—Ù¬¤ª®¥C3¶°qt…ä| ,‚˜ºìüâ²ëµuã’ïïsO¾­êoBò-ÊËJCÉ72üPH Ÿ·‡‹½•™¡R_AN +-©ÏÇÉÔGÏ<&ð¯¨[õW"õ9yøúRr +-H}=C3+¸n¼ýF®›´_7Ó©×Í¿ÿíõ@¾nèÍ÷ïÖÕ^/+ÎϾœáìɈ° ¾§«£­… Mg›†ª„Pÿ^nRýïHõ—ŽðÅœ›¿WQê/ú¥Eù9€~B?òhØÁ ½{¼=\ì­-L õvlûQm‹’¼¬´Ä&!AÜ(Að[ÉFEýYÔXÇ37/gIy%Um:4 ['WOßg4uñ)ÙÅåUµuw›éíOºŸ>ïxÃ.ö Ð'£õ§-V²ë6ã,)+ÇÙÀÄÒΉçcQçbR3r +-JÊ«nܾ×ØBÜÙýìEß+¬þð Õgøùã0&Ô·µ4Ý»}£º¢¤0'35!©ºï§=^nÎv–¦º ¾²¼,&©®»YÈú¡[½fb˦–Äï EêCË™9…%ÕÐrSKn¹ŸÑògV‹Æ¤>‹–ûÈ–Ƕ|.jbËðÐAË#Û¬:ªæX”ú ŠþÃQô¯æçd¥§$\<öTäÑá!Á{|v¹9;ØXšÑt¶kª«*+ÀÝ+.*¼Q¢>l€ŒúË–AŸR²|¿|yø6Š0_q‰©™¹…¥ÓÈZý)¤âà‹ $‚¯|uç|'?o8GÎe8oÐCg qÞŒ>tÕ¬ºé[žðР⇮Ôo%ºÒ‘ó&”8oì­Ì õ´5ÕTäˆó†gä¼Yþ yÎRê/xQê/6úðI"‡îðóñôm-ÍŒhºÚ€¾Šâf)q1}Žï×­]À賊úÔRL¬ñê/ƒq^ê¯BêsúB¢âRr +-*jšÚzFfVö.Þ~!‡Â#OÇÄ%¦eå•VÖܬohjmëèêéõß½›aðý2Bৰú}ÏŸvw¶Ó›ïÖÕV•dg¤Ä_8{’PßÓÕÑÖ„¦ê+úb‚ >³úøOó³Éž—LÜ`P_PX ÔWõuh&¶Ž®ž„ú°hñ)ÙÅåUµuw›éíÝOŸ÷ ¼a^´©Î›/ õ? ¿74øöUÿËÞž®ŽG­êoÖT^+ÊËJKºs:2üPH ¿‡‹½µ™‘>R_QN©ÏÏÃ…Ô_…ÔÿGJýE(JýE¿iý&ôBè» ô tµµ4¶ª(ÊËJIˆ‰ òóòpq|¿~-ÀÎÛ@Eý“úhšW°±¯Z³öÿìׇSÕÙðI¢ÑØ)"ÒAQ”òàѱbAéU:ø@)+v…µ¡¢Æé ½IÅB‘*¸¢.JpGE™I6£»“sïï÷*y>Ðd&¿û|çžó9çHÌ•–U˜§¬¢F£ë-_ebfeïäîå¼+äàÑ“g.DÆ&¥fåaõ¡èúݽýHýƒŸ˜êTýw ~?Rÿé/mÍ µ þõâüìô«qW@ýc‡Bwo Üìíáì`m¾nÕr#}mM5P_AN«ÿ«/˜€#eõ¥å@}5Mm}ȼÎÜÚÁÙÃ{sà¶Ý¡‡Ž–ž_|Ô¯mhnCÖƒíÝ·¨™‘úúý¤úÍkîݾYV”—•–{%âìÉ£Cvlörw¶·63ÌzÚ´±d¦Þ˜¥þ÷F¿ê&‰þÕø„þÉc‡ ôý|.Ž€¾© B__G‹¦¶ÐW”ô%%f‹ÁáK®ú“Ъ?ZõG}|ö^iX@sk{g/, ¨6‚(ºb\t ¬¢c©EÇVÿábõ‡úHÀWÝH}°¼^œ—–Ç0€hÖ‹Ÿúä¤Ã™‰I™Ý!31éPæ$Væ‡Ü™?~Â&\f4épæüì4˜t¼“Ý7Ú\÷ ;óDŽ"ÿquóö(õ¿;úålô/"ôÄìa¡oÐ_½r™‘¾¦¾XeÁ|@_F +-ÐGw/‰þd„>µê ð8ä®æ¹2rŠ  º¦Žþ’«×™Û8¸xxûm'÷Þ¨x¼÷–ã½·…¹÷¾&ö^Aiï½{»í½©I±‘Î{¯/ÃÝÉÞÊl­ñ2C=:MUEY Ô—”@¿Ž>_wB©?i2¨?}¦ˆ¨¸„$¨¯¤¬¢ +-÷á2ãµø¾að¹onÃ}Ó4ì¾hÒ±ï›÷pß ÷MKCÜ7å%ù9éÉñQpß„þyÏö ?oO ¤¾Ž¦úâ…óA})¤þ¬ÓYêO ÔÿÞRÿ‡¢†D?£ïʾ. ¯ +-è+)@#HÎAèÏÂý›B_°7\ýiPÍ¢b³%ÉjV×Ò1XºbÍz › .ž›¶m‡j?uîRt|rFNA R¿®±¥íɳNP€·èø +-ø;[} Sý>Rý&P¿ª¢¬ðZfjb ¨âÈ};·úû0Üí,M‘úºt ¤¾¼¬Rÿ:ñç¨B#õg!õ¥då‘út]¤¾©¥£ÃÇëÎ}ŽœõcS3¯–UTq¨ß‡ÔÔ'Bæì´QÕïëéê|ö¤½¥±î~ueyIANFrBô¥s§@ý½;~Ú²ÉÓuƒ­Åú5+—èji€úJò2DhØo¦|KhêåQêOô«ýR@?“ýP„þ/„¾ ‰¾.]“>½â°ÿ0WýIÄ +-Dªÿ'Jýßp§°”‘Wš¿P•«š} š÷î;~úü¥è„”ŒÜ‚Ò•Õê[ÛAý®ž>¬þàÇ!Ôg8ôqð=¨?Ð×ÛÕù¼£½µ©þAuåÒÂÜÌ”„˜ËçOÛúûltu´µ4%ÄêË°Ô¾ö +-ª>Ǩ#C#õ‰Ð¦DhfèË1 )™¹…Dè¦ÖöŽç]½}oÞr‡þ2Bè/<¡±ú½XýÖF~¡aÔmtC¡Gu8ÔË£Ôÿï¡ïdoci†Ð_b «­©¡ºˆ@_zî Nô©U_àÇ­þ$ríuíS`í-…µwÜì!¬C–äf¤àµ—PŸsíÕÑR‡µW©?[ ­½S‡«?Zjnõ§ò9p …-l7¸zn"F>pð¨+Aê×˨ƒ§ 80êø8¾ 7';+3PßHNSõd¥‘ú"3gL#SSêÿG©ÿCÐO ÐGèïäDÝš•Ë™è/„&“•ž mÍO¢ÿ7¾èSýÀ÷ñ¨ŠyÚŒ™"bâsæJË*ÌSVQ£ÑõŒ–¯21³²wrgøï +-9ê_ˆŒMJͺVTê×Ô[ý?†ÈOýW=/}úK[KC-R¿8?;ýj\ÔÅüýØ¡ÐÝÛý¼=œ¬Í±úÚšÈ?E¡ý#{˜jE25RßÜÚÁÙÃÛR‡:w5=;¿©_ÛÐÒ†:­wÚ;V§šúß85´¡þ«nœº¹¡öÞí›×‹ó²Ó®Æ]‰`¦ÞÌ•Z§vÖQOøG©/$ú¿ˆ~;_ôÏs ï‹Ðwà@_KC}ý)ý¿²Ñÿ3…þמÀ[¯9l½à_×oݹWÛÐÜFÖÜk¿¡qôm½Ø?/wçѶ^þQ؅Þu4mâÂYçŽg](9ëP§ãNk`užu¤†Y×ÏšuuĬËI‡ f×…³~õŠ¥:Zä…#5m9”ú?ðQêúý ú†\èKúâ¢"³fr¢?‘}ªø?nþp1OƒbŸ-I³º–.f Û ®ž›¶m‡b?uîRt|rFNA Úzë[Úž¬þàÇ¡¯«ÿ;[}Ĩÿ©ß×Û…ÕozXs·ª¢¬ðZfjbLä…3'ŽØ·s«¿/ÃÍÉÎÊt­ñ2C]º†*¨#ŸÉßT<í…UŸ_lº®á2㵦–vŽn _ÿ­;÷8rÔILͼVXVQu·¦¾ «ßÕÛ‡ÔÔ'b ¦þÐÇABý^¬~kcýƒêÊ¥…¹™) 1—ÏŸ>¶ÅöÙèæhgÉ«/òí±©'ô£ÔH}AÐÙɃ~ÑXПƉþ +-}A¿¥wçÒ« +-K/æ–^7†‹¿Ë¥7ªî>¨ojmïxÞ ü ¼yË­þ—ÔG•ÁÅßÛ7,þš†ó·wâÏÕÑÖÒ–^CXz9øbéå{â|eØùoe»˜„”ÌÜB<ìêÉa7†Ø\îžvY©‰±Ìa'ƒçÄ™‡Nœ9âbBœ8ÔúQê ‡þ?dž¾íÈè‹ñEŸR_€Gó_8jù?ì×ùWûðu—…u¯”ÓÂ’´Ëœ!Ju’áÊÑ<ª¨T$)ÔI9dÈJ¥4Ï¥y$ +-¡yˆhØ®YÜ{ÖźŸï÷yönïm·Û{§ßžïð^Ïûy}>¤>tYÔ_¸dÙJyeUµttÌ,mœw{zûù‡GÅ'gdॷŽXzûˆ¥÷ƒÐK/«ßÜPƒÔ/ÊËJKŒ ½xö$Rßc×N»m&ú¿úkTå–/]4_>?Œü¢¤ú“Yù;7Cý‘X|æ¬9ä?,§¨‚ÿa}‹mv;‰çäÙ‹¡‘±‰pâ'N3û‰óIÐçRÿyV¿©®êþ[%9)ñÑWB‚üý¼=Ý]l¬ÌŒôújÊ +-+—-Y(Cõg±ª?™¬;Uõ {”úü£ÿ•ú}=Ϻ~2ú§Ððq×PŸ†Ô—SPVÓÔÞ¸YÏÈÜÊÖÁÅÝËçÐQÔe¢r…,•ë†Ê1Õ‡Êñ­þ§¡Xý:¬ÚšëkÜ-»Q”›™šqÔÿóß÷íqu´³67Öß¼Q[sŠVŸ6o.ÒÔŸösÔǹçÑ°ú +-*8·¾±¹µ£ëž}ðƒú—#bS3s‹n”Ý}PSßÜê÷Ð^pþj\Õÿ>¢>Ê ¡þ@_ÏÓÇÛšê«Aýë…¹×R¢#._8sâè!/wWG[È­‡r«±å&7õ„|”úü¡ÿ+úïß¾yý¯—‚¡¿ô§Rè òþƪßÜe´óâ.Ó;/¡ŸÅˆ~P¹ˆ˜ЯéW]ßÔFVîåë·ï rŸqå†ÇÔo˜©ßÛ×lúÝ-㦟•¹¡±ó‚~Üw^>>:¯‡6Ý8¬ÓΑ1í wtBêµ\bÚ±æ~#ln<íž>yÈ>íðƒ§Ý(7Îl–g +-«úTÛ'äQê‰þw&úx¡}ßÐÿulô§Pè ðØÕŸ +-]ž&2]l†øÌÙs Ë غlAtUîìÅÐÈØÄ´ÌÿøqgWÝ8+å•U5ÖnÐÑ52³²ÇÓÛÏ? Ý8ñ¿Ú¸oœAz/Ü8íÍ 5•å¥EyYiI±‘a—Î:vØw¿Ç.§Û¶šlÙ´NK}µÒª²‹HKê‹Aí‰M‡R¢¥þ˜ê³¡?Ìý~„þc„~ƒ°èÓFA2'úÔo0úã†ßt±_°úRÒ Ë®X¥´Z]ký¦-¦[·ïprÛ{ààác§Î] +-»›”ž•_\Z^QYÛÐÒê÷Ò±ú‡>óVÿÛˆú_p1Hõûûº»:;ZëªîݾYR‘|þ4Rßs·³½¥©¡®ÎzP_Iá'#%)øý4õÉà’R2(¸¼’ª†Öz]CSK{çÝ þ‘ã§Ï‡GÅ'gd”ܼ}¯ª®±µ£³«»¯«ÿ©OçOýÏC õû{ajoi¬Eêçg§'Ç]EÁ9x`¯›³ýv¾eÓz-u"øB"¸pãŽzÂ=J}AÑÿ2ú­ý‚¢/ËúÔª?ö#»<‰¥ÊÌ•WŠXy•ˆ•×ÐŒÄï ‰_\rzv>Ư¶±á×Û?øâÕvõ¿Ž¢>j+~ >©ø!õIü˜ø9Ùoßjj€ñc®¼’B¯¼¼ŽœÇ=w»¸$^ Á+!xûx‚ÂÁ_’Á9ÆyäÀ¸ããÈ™L–žêûD=J}¡ÑÇúgøC_btô'Qèó÷Xíc¯²„$ «¯ ¬†Ô×32³²upq÷òöó +-¹Ÿ’‘SP«‚Ʊ¬¼„^yé½Ïž¶OxõqrHŽÕŸ'½€ó'v‚ŸØ9¡‘±IiYyã=r 9Û‘óôñÃÖ¦ºêûwn]/̹–’}åò…3'Žòñrwq´µ27ÒÛ¼Q[SMEA’χö#õgˆNgªO-ûû(õG7œD@ÿú¹™é)‚¢G®8…þxÞhöá*ÓP•åTÔ4µ7nÖ76·¶utÝãåsèè h\DtBêµÜBܸú¦6²q õQãøVÿÓЬþ½©ßÜPóànÙ¢¼Ì´Ä˜ÈЋgOþùÇïû¥þD?J}^èÿýÿè¿ô_Œ ßÜP[-úò£ ÿ +-}á‡ú¨ÉLõ¥¤,–]±JiµºÖúM[ L·nßáäæ±ß÷ð±Sç.…EÆ&¥eå—–WTÖ4´´ÃÆÛKäoãýÆTÿ/Bý°ñ¾bn¼MõÕ÷ïܺ^˜s-%!úJH¨ÈÇËÝÅÁÖÊÌHo󆵚jÊ +-+—-Y(C“ÄꋉŠ0ÕÇ_Ÿ¯/OFŸÄò‹ˆŠaõ%i2 þJye5µtôŒÌ¬l\ÜáÊñ +-¹ÿZ!Ë¿ÖÍråü[°+ç#VÞ‹®œ–†ÚÊŠòÒâü¬ô¤¸«a—Ο>~äà½nNöÛ-M ·lZ¯¥®ª$ê/”‘’”€þ zB~5.9=;¿øæí{•µ-í]Ïzû õ?}æ[ý/¸¤úý}Ý]­MuU÷nß,)ÈÉH‰ +- +- ð÷óöÜíì`cif¨«³a­†ª²ô9Vý/_è¿ôa«é§÷v?}ÂDÿN‰~" ŠÐ?N ïF¡?ñM>ö&3^…‘…×ÆÁ…¤Þ¨ø”Œú}ïGèCã®>Oúj1}ùÙéÉqWà ¯3ç»ԟ3{¦ø/b¨¨ãQ²3ÏIö3ÇÎ{'7ÆÀ cxäÀ{õ†}à÷ÀÃgNyæ\`œ9Ž¶VæpælÔÖTSQ[¾tÑ|øú3D§sQŸªýï›ÌN¨¿Ô_ÿÓFxÅrðŠUð+>¯øÂ¥«×oßó ‹ŽOÉÈ}TXR^]×ÔÚÑõ²·Ÿvæ|˜÷™ƒ²ÓÕìëyñ¼½¥¡¶òYñ“üìôä¸ÈЀûw=Ü]œÎÛÙXY˜êiªíÛ½cÛi ¬þÚ5Dvx?°žÖ‡RèBèãW ´¹¡·o&Їc¶ª£Ÿž’HGÿúµ+Núßlf黰ɤ|x“Õ´ôŒL-ÛØÁ&»{Üõ ŠKNÏÉR\VUÛØ‚®/Ü0,Ü8^¸ùªÿá·Q¬þ`R¿±®ª¬¤0?'#9>*,ÐËwáŒíqKS#=­)òq2ÈÇZßæÎÁ?'ùŠE%¤‰ìšz†Ý–!{|r‘½®±Ô‡ì¿L~lÓªOÏþÇtÙ[PvPŸ–üñ ;ñãAöé~<ÖïjXJýy¨ÿ'QgȪ?2ü~*Íëè4]í€~- ýŒ”ĸ¨ðà€)èPè/ôLR-2ÛöeH}n>þ B7In–SPRV9 }ðÐá#'¦ë» _+–ïõgÉë1 +-ÛñX>Zß½sk¢ïêjªíÝ¥¸UVZ««ð#çŠe þ¢©êÏ/<³ú´W¼ +-Ý9‚ÂpçÈ2Ü9ðãÑ¤ô쇠>Ü9-äcÃwë?ÞŒwNxŸ·çk—ÎÂcvH_[]EYIANFRLDHP€‡{¼‚eìKØèá¿c!<5¬¥þ¼Ð‡½þH¢ÏîØ_ú/»;Û[›j«*ž"ôSIô½úÎNÎQ賡Ã7±ÈH}7/Ÿ€ °ˆ˜”Œüö{ö«ëè›……s¸|톧·PxLBjfnAQiyu}R¿w€Pì·ñÙÕÿ/]}T ð%8 ÛñÏÁ¾W ~sCm峧f§%ÅF†<ðñºåæ|Ñþ´õ1 ] U¬¾”¸ˆ° ¨¿ +-©ÏΠ>+ð‘Ïx–ðâR²[!¼ª†Ž‰ù1ëÓö]ozù<‰˜ôØ^õ ê}ÿdÿÏ|ÕGêCø×½¯º;Ûšê«+J‹ +-ò²Rc"‚ý}¼nº^qÏjzjXJýÙѧWý“{=2ünè-”¹þ^hsmÍ€~YI Ÿ™šèç}Ç㺫³“BÇÆè+ïT¤£/H¡ÿµ‡Ù=¼Èl°ÈË98¹ÈE•Þ²Uq×^5M]C +TwÝ`ßB"ã’Ò³ñ¾Õ’uwp¢î 7[ÝýkrÝ…C*ÁDÝÍLMˆ ò÷ö¼qí²ÃÙŸO5;¤¯­®¢¬¤ '#)¶Qh?7×JŽåËØõ!ý"¶ÅìË–s¬äâæYË¿Ahã&ÉÍr +-JÊ*´2;r‚*,Á‡Ng÷ç:¿3:=pè´À¡SVü$?;=9.*4À÷®‡»‹Óy;+KSC=Mµ}»wlÛ"-± Ôç_»f5J¿¥Ç¯€Ra‡Rvõ'Wý‘á÷Ch±¡Ï¼èêlki¬«©ôççf¦%ÇÇD„úùÜñ¸áê|Éᜉ¾Þôׯã£Ðÿº3Ž{K‘{«I÷ÈEVÓÒ32%ÙÝã®o`hT\rzNþ“ⲪÚÆ´oýhßõѾ͡þ'ºúhAÞÁ%‡`WGkS]uyIá£ÜŒ”„è° ¿{·¯_½táÌÏ'Ž6:¨u@Ey‡‚ÜfÉMHýµ<_æÞ´ÞDúõ?¡ôrôg|Ò_¸tõúí{¾aÑñ)9HýªºÆÖŽ®—½ý„úŒ¯mõiéGqúÁþHO£ª¬¤0?'#%>:,–Þö8-½CzòÏ£_:ßÿ ¿jýf(õgE¢êÿŽ›Ü(ªro Ëõõ@™koiª¯©,/}ú$?7+=9!&24ÐßçÎí®.—ìílQhãéÐç§ÐÿÚC.òw {̶„Övù@}1IzÛ=ŒÚ.áž_v/—Á½žÉîý1ƒ{ÿ›Û=h»9ÉñQ¡dÛ÷,Mô´ˆ¶»·Ýu´¶ »€Ùû"õ¿ŸéÒÙ¦ž¦ž¡©¥•ùçÌð罆ôãÌé?ïÏ›téœ .ý{vn——‘àãå^õ#ç +-&õ©²¿€C©?«úŸÈMVýÑ‘áwh­û{_u?oomj¨­Bè?ÊËJOIˆ òG‘Ý\.9ÚÛAfK&ôe}Q +-ý™iØ£íñ*n^>Aa1)ùí;÷ìW×Ñ76;zòÔ9ÇË×nxzû‡Ç$¤fæ•VT×7á¶;@¨?6ÿ¶‹¯A´!ÃïÐ)Ø×óây{KCm%¨ÿ0;=).24àþ[nÎNçíl¬,L u5ÕöîRܺEZ\©Ï»³êOÃÞ|óÏ ï:ˆ/*.-»Uq×^UM]C +ëÓö݈×—”ž_[mC ùÚÞüú—Î8Râ¿€×ÑÙÖ\_SQZT—•šüÀÇë¦ëÇs§¬™èh¨‚ú[e¥ÄE…§ÆgõÓ£†µ¡ÔŸ }†ªÐ~?„5 ÿ¢«£­¹±®ºâYqaA^vFJblTX$ö¼éærÙÑ"[YšêiSèƒaRÿïeï1/.»4ö4t LÌ!ö®¸Þôòy›˜–•ëVQSßÜÖÙýªoà5bÔgØ·ÙÕÿø­È¡þ@”‚¶æ†šÊgO?ÌJKŠAì¹9_´? ì™ ööì1—Ý/QšS‡éÓ“ÅŸž†Ž1ćOˆÌ¿ŒOWÎøèÐÕgŒßIŸ ñ#CˆOâ“Ÿž*ñéIˆÒNÎ/8u¨am(õgSŸ¹ê¢*U ¯çeWg{Kc}MeYIQÁÃœŒÔĸ(ì{Ïó¦ûÕËŽØšD_C £//+-I¡¿`ìþ?`±-f_ºœc%ì1?Þci¼Çjšz†¦V6vxïÜ\v_1”]rß>Í—½‘á™Ê®¿·'QvO57Ö×QßeW^FJ «ÏCSŸ®>^„yïÀ¤ütõ9@}>þ B"b’2ò +-Jpêh§ÎY‡éN¤>:u~}÷žéӛߩƒÔ¢Ÿ:øÔÉÏIOŽ‹ +- ô½ëáîâtþŒíqKS#=-µ}»wlÛ²YbÓF¡ ükyVs­õÙÓòSê/äPêÏ‚>y½Ò«þTý·¸ê¿ì~ÞÞÚÔP[U^úôq~nfZR|txH€¯·×-÷«(ð)k«#f&†}•=;(ôvfèºHýÿ³_æßTïk_÷vïºgU§áœÓ)™S"džC2Ïó<'B‘$’™2Ïcæ©(2gLD$¥\×-n³:g­ûù|¾{o{o{›â·ïó<Ïz?¯çõ`Ôã9.$*)sRQ…”co¿À°èøäôì‚’Šš†¦–öîÞAHý×S(nAÜaÜÔÿ“õ¿.QD$hÁäøè‹gCý=­Íµ•¥…9) 17¯ûû\<ïbomf¨«©¢(/#)&Ä©¨©·wãÔ£}õPÿ™YIý˃þu ͬì]ຆ„Ç$¤¤ç–VÖ66·vôô ={1:>95ý®ÛÙº­B}¬ÿÏÿ™Gý¿›z ûìëFýW”䤃þÃCýPÿV  bÿ¼\GÐÕ ±üêáØߒ©¿õ¿z™êO¼}>ؾžÎ¶–¦Æºªò’ÂÜÌ´ä„ب°ëW¯x_¼àælocaj¨¡¯p’ +-úŒ8ô7¹( Gîºû€ë²°qpr\Wº®™µ t]H½ zÔ#Åíw:Ô£¦>‘zÓS“dÔ«AÔKŽGÔó®koej¨£¡\W’†ëBè}+õÑÈ~ò=V×10µÄ®Þµ`ª«×78 úWNÿ«\½Ï˯üu*Ë +-s3à¯X€~kÒ¯#.,€~ì×Ù³ë{õqÙߺ©OúDÕÿLõç0Õ=>6Øþ']í­Í÷ë«+J‹ò²ÒSã@»AW¼=ÝÝœl,Mô´5ÐÐçÁ¡¿UEzÄ30±°æäæ—’=¥¤ª¥glnãxö‚§ïÕ ÐÈØÄ»™¹EeUu÷>îìéz>26>ùvúÃìtÝÅu¹.ÈÈ<üaB^½éínoij¨)/ÉÏNKŠ ¾vå’‡›“¥‰¶ú@} A¾cG³³2<°Pbû&Pi@{Ì÷˜OPDBZNAY][ßÄÒÖÉÍíqÔí¤´¬üâòêú¦–¶®ÞaºÍÌÎ}œ_ØÀ¯óqnvzÑØÈó§ýO:Û=¨¯ºW”—™z'.2ôFÀe/wWG[ c}-5e9iq4¦ƒ€úß2¼ÖQ8õé@ŸD}JÕŸÁTÿ%0™ÞîŽÇ4ÔT‚n³a·1¡7®ùùxzœsq°µ43Ò×ÖPUЗ–À¡¿…EIý€ï R]"ôÔô,ôܽ.èÅai«&¦ PâÍ[½Ozdq[‘ú_õPF ôÞ¿ƒ ùõé@o„^õ½â¼¬Ô;·£naÐs²µ0Ñ×&A›BoÕ]û–SŸìÙg @KßØÂÆÑ 4 “|ÝÈ0¿–À5!QŸÆZšê«Ë‹ó³Ò’À–Ÿ=øì¥|v¶'€S §>}êÓRýHõGGžöõt¶µ47ÖU•—äf¦&ÅÇFÞ +-ô÷õò t«¯£©ª|Z^@_Xà87èG€þßpèo¸1ÞF >L1 þ^D}fÖCG¸xˆ1V×10µ1†ªŸ”–_R^ÓÐÔÒNCuÿû¿ß~[Eu) ‡T÷ý’ê>~x¿©î]¨ºAW}=/œu´17ÖÓRS:%+%.ÌÏËÍÉÁƈ¨¿{×Nõ·m€ú„ ÷xç®Ýõ™!õyù…Åг£©gdní@xv"h<;àÙÁÎÞÚŸ/+=;%ÙéÉñÑá!~Þ¿œs±·25ÔÑPQ”—‘âçá:rˆ™PŸÞðUØä©Oƒúªÿ…Zõ'1ÕïÒÕÞúðA}MEiQ^VZJb\TXjö‚«“µ¹±Ž¦Ú}1ý£úÌŒ ~Þ‡Cs‹Bõi0ï/¿˜¤Œ¼¢Š†®¡™•½ L[`HxLBrzNAiEmcskGwßàð‹ÑW¯§Þ} ¤m¦mê]¢>0ƒÏýFd|l$¤§P¿¶²¬07#%16âæuŸ‹çÏ:X›éjª*ÉËH‰ ñóbÌcØOÁ¼õ›.Õ·Cœ¼{`ðî'  &` 'àãýfDLBJFNai%š@Oßг£ã“SÓh dû¶ +-õ± êÔÿ0=59> +-v¤¯§£µ¹±¶²´0'#%bz`àî‰QÞ=Úß¾ ›\8õéRÿ+1Í(Î ÈbfˆªÿªþãGMµU÷–z +-¸â}ÑÝÍÙÞÆÂÄPWKíŒâ)¹’b‚Çy¹á`g%B/ýÍ,ZÔ'¤˜‘…š®€°8•éBæÅ&¦dä–UBÓí¦K“y¿Óa5õá?HÁ¼nļŠÒ‚œô䄘%Ó53Ô%šîqhº¬Ìé‚P€LämõÁà·³‡òÛ‘¤XdìîÅ'§g”T o»{ãdwjkº{³HÀ·3DüvÊŠr3ï&¾wWG c}-5e9iqa¾cG³³0Üe¬¢þFF€×Z §þrè/) Ña‘ÄÌÍB{C¦úÍ÷ë«ËK s3S“b#oúûzyœsq°µ45ÔÓRWQ‚Ðäç=F }˜î;pèoRÑCÞRŠùDÄ¥å”Õ´ô-l]ݽ.…FÆÝIÍÌ+ÂÂÖù¤ÿé󑱉ɷÓ3³sú‹ë2ÝE¢é1xõò×áÁÞîö–¦†šŠ’‚ì´äøè°àkW.yœs¶³45ÐQ?súä QÁãy¬Lˆú{vò(G€y'Xä~Úw€8A‰r§Ï¨k˜XÚ:¹y€E‹¾”–•_R^ ©ßÕ;0LØ70‚ó ëýv>/|ú87;ól  þÓ']mÔWß+ÎËJ½s;êր˗<Üœl-M ´±ˆ ÁŽí¤Ã· §þ–N}ÚÔÿƒf¢Ã@ÕŸ…ª?9>¶¤ú µ• Õìô”ĸ¨°b«vVfFúÚªJ +-'e¤ÄE„ô¹0èƒhïR·g÷.ú›X„o#P†x¹è¢«ëäÙ‘W\^]ßÔÒÃ6ñæ- ydi[‘ú0%yóyïÞ êôbÈ+/ÎÏJMÂçåga¢¯­EWB„Ztw êÿ}#¢»Â»ÃÄÂ~˜“æá»q+*Û·jâ¾Á÷žÀMAÔ§1‡¾;ÎvV¦†:*€úÄw‡™{wÀbl|x­­pê/§þŸ$ê/©>t˜!ÕýjtIõëªËK ê'ÅÇD„Þ¸æçãéîælomnb £©¦|Z^VZBTH€‡‹óð!6°Üö ÿýNú›V¡A¼»vïýñ§Ÿ™Ù8õù…Ä$eäU4t ͬì]Îýâퟜž]PRQE·»w‰î ÛšE÷rѧÝN@ýºª{Ey™wïÄE†]õõtwu´±0ÖÓRS>%+-.,ÀËÍÉÁÆÂȨ¿—6õ×3„¿b—b€úŒ,lœÜ¼üÂbR²§”TµôŒÍmÎ^ðô½ +-ßÄ»™¹EeUu÷>ïÎÐß/ÔïÎ8X“Á¾îŽÖæÆÚÊÒÂœô”„˜ðëþ>Ï»8X›éjª*ÊËH‰ ó¯>|!6·pêÓ£>R}õA˜ç0ÕŸƒT¿Zõý}½<þÏ~™xcïqüÜéLMEH)Éž"²/QZ¬Ù²=ä¡G¶,…)mÚ‘Š¶¡K²„lCÉÊT7‰6ÉÌ©©“{oÝ3Ý9÷óýþžå÷<žì9÷œß÷?ø~Îûóú¼Þ[ý6ympu²·]g‹m¨¯£©®ªÂ‚>{Ž8ýÉ~<ÔŸÊë¹R2òˆxš,âÑœè &oÛ®}‡cãÏ]H»”[PR^UÛp«µ½óþÃîÞg/úxÂ6<õÿàRÔBf€ê ˆ´ÁºêŠ’Âܬ´‹çãbxÛCƒü˜ ºÍÚÂd•‘¾6A¿}óš¥ú½ÝÈã º6ÔU_/+*à¨~ÔÈÛBƒ|à£ÎvV¦P` tµÔÕT–(Ì Ý– A:ýIz|ÀƒÏÍ ñ2M]ƒ«M-mìÝ<½ýƒÃ"8ž{™í¹­÷»÷‚çž;ñþB<Âsû_ÄkoÅž[ÌñÜC{w‚çúnôpu´³Ï5ÔÓVWUVR•–š/KýñïsC˜#1´,¢¾º¶ž¡ñ3+Î&㾓€ûNôچƖö»÷€úÐwÆù†öëeW¯\ÎHùîôÉcÑöD„‡lòrwq°µ4]½b9,P†° ATíÆ7ÓXCëé£Þ¨Eýá©ÿm0o~#æIÏ#ä0·›oÖ×@u½ÊQý¶ê{{º»:Òl,ÍÖ‚Éèik,[ª¬¤(«-9_Ù úÓ(èOÊc…x +-)ÃüÀc…ØÖÁÅÝË' $|GähÈZRJFö•¢2vÖt=~ò¼ïÕÏÿøí Pp´ž‹ÝB¤ÐŸö :bP_Sy­8?'35ùì©ã1#w~»e³×—õvëÌÖ¬\®§¥®º¨¿ ¼éàMŒúx +-B°Éx¬Ó§¥Ë?„ƒ1ÇOIJÍÌÎ/*«¬©oln»sµphoß½ü'ÌàãðÔÿÄ¥þ{ð#Dý—Ïñî´5ã!ågg¦&‘†°qƒ+1öé“ç·ðP²ÿ…E}ÔÿD–¸AÜ[q–AãwÁFƒÇ݇¹V,PõéN¶Væ&«WêCUU^¼HAN­6@_LC^ï©ô'áñðŽMýY"bâs$$¥¤åúÚú†ÆkÍ­ì!ľ„æðÎ&§fæäƒæðZÚî7l‚©ÏÞ‡ ÖÜ¢+Ù)Ig°æî 4×™£¹Ë@så!óæõ!3ˆ8aêóo² _áq÷Ü„ +-Ï|úˆ…túF5A§o¾n´(-¬Â“Ã.<ûv¡ÂÃô ;ÒPá1Ò×ÑPSY¬('#%9o®8Z™˜õFó(êŠúoý+±Ð½Ý¡¸‚Ç5ÔVW”åç ‚ê9ÌU}Gšµ¥Ùc#¨¯j* sú’hµÅD±Ì°¡ÿ5ý‰¿ÏX.Ê°¤”Œ¼âb5 }£U&Ö4':ƒéYÛµïpl\¹ i—r JÊ«jnµ´ß½ÿ°»÷é‹—¬¬ þkdÍýƒ¬¹¿cê÷=ò¸ëÁO·›€ú¥Wó.§§|w:þhÔþ=aÁþÞžnÎö6ˆú À; >/ïx,wlctûðäˆ)à)Ø;¹1¼ý‚B·ïÞu6ùbzV^aiEuݦ֎NDýg}ý@ý×c)<ĈUùe ü¨ûáýÎУºêŠ’Âܬ´‹çãb£öïÞäïÍps²·¶0Y…§À¹}â½}ÔÍ£¨?„úÿå®3©¶â(ÃB÷!á;öˆæD­Œ5d¹Ïû^å¾™°åÞmo¹ÕP[U^\séû çN9Z°5Ðw£‡«£•ùZcC=m UeèÒRw$êOr‡;~¬1hë¯1·â¬òν‡ŽœH8›ü}fN~ñµÊšúFh<÷v÷°Ï›ñ4ž·¸ñ¼D‚ô÷Ÿî´57Ö×T–ågg¦Â¢9¹ãÛ-›}6np]o·ÎlÍJƒ:w ¼Ç’ý/ó(êKýÄ>cêC’a¡‘ÀÜiƒ®«¾YÎAß<}òø‘C`ra!›}™ 7g;+ “Õ+Yª¯D¨þvƒA >*„’§=È ÚZî®ççd¦&óàÎe½-ÂÝr=-Œ;Ù…\É%‚1ÔÇs‚U&W-]¾ãy0æøÉ3I©ÙùEe×kêoŽg Ÿ¸c ¨OC{K#¿køø%“ŽÓƒîHCÇSydˆÊ#:K˜ þxç@½Eýá©õYAý§ q°À@”+J¯^ÉΑKŒ?}pïÎm¡Á›¼6ÐìmÖ™­åW} P}Q–êÃV} +-úŸ¡¦þByÅÅ*jš:úF«L,¬iNtÓ¢¶kßáØ ç.¤]Ê-()¯ªm¸’{ì’ûi8ɽùã W²3R’Îœ<}`ODxÄÝÙÁÖÒtõŠåºZË–.Y$á˜7¨јí_?Ö*Ë`êkê¬Xmjicïìæ¹É?8,UžøÓ¤kšäÊÓÙÞzëF]uEIanVÚÅó‰q±Qûwo ò÷f¸ÁžX˜¬Za «ÉƒøįõF|õGIý_ùùUßó§=(É·›oÖ×T•—æ]ΑK€,“Ûèçíéfmi +-ÕU_Gs™ªòb~ÕŸ1¬ú_QÔŸàã¥þ4ˆðL!aÇ%ÓÎh·}÷þ¨£ñ‰ç/¦gå–VT×Ýhjíèê÷>{Ñ?Àµá©OJ «ö÷={‚ú`Çí&D»Ò«y—Ó¡ ÆE´ ö÷öts¶·±D´ƒx€ãíx÷k2íÆ:>ê ±;Œº~¤ëçíŠæ7d]0‡>bïH+'ú‚æðšwèúá9¤Àðõ Ã×ÏÅÛy–@ç‘ævö °Q»1Ù¢>?ô‡Ø »´ô÷aê·B’k*¡¶æf¥ƒÈá_îŽß²Ù—Épsv°³²0—ÓÓÖP[ +-qƪ4FŒRý/ðXžBJ0‚¢¾”´¬‚’²*;¶ë]ܽ|BÂwD‚㲓VÆNá¸ý£sÜ?‡8î;ÂqûÇíÀŽ[Ž÷rÜÃûvmÛäÇdÐhÖà¸Fú:j@}9¤@}‘Y|°õ B|Ž„¤”´œ¢’²š†¶¾¡ñZs+;GW¦o îéBv^qYÕõ[5õÍmÓ¾CŒûÇeõìÙîåîiÓz=mu9©¥B +-ŽRÐáÝ£©?%ê×ÕT3¨Ÿˆ©8(~ÒèoJR_YAÊIýyêÿDSŸWBýŸ¨—:um=ƒõ›·XÚ9¹{ïØqâtlbjfnaiåÕ›wê[ïu‘FCÔù0ɆûatxhôÈã‡÷;Ûšëkª¯U•åe]HŠ;sòØ‘ƒûývx{8ÛYA+Ôi ÔõÅ„¨ãTp§¤Å,Yf;€r +-ÊXŠM)ÎÄ&¦eå•V]«®©kjëèzøøiwO¢þ{ÈÜG¤Ä—ñ©ÿAýÏŸˆÕR ôõt#êw´5a)J‹r³ "9AH±ÍÃÙÞÊl3>€ÐdðZ€ÛÑôgýÆ}4õyOýM˜új@} ¾…ú¿Ì¤©ÏÓG¥>øþY³çþ6¡2°¬¼¢*.¸ÆfÖö.Pp÷â‚—t!+¯¨ ¡®PwŸ;ê8SŸ4Éd’@} +-êÀ"¨à–æ‚CbOŸˆe\S¢à*+¬”–’”sÌd¡þÔIÇU‹yó +-‹JH.ã8{£NŸKHÍÌ),™ðr“âo6)(œ=e¬³Ç—ÏVWksã†ú:šªJòЖHˆ +-a-f  r4ƒåÒáí£©Ï{êS»>MýïùþÁ©ßÎ"ú-A:0°’š–Ž¾¡‘‰¹ƒ«§Ï.ÿ‡?s>9ýb~qùåë·jšÛ;úÏ^ôô¿¢mü‚û'Qp‘GPÁ}÷æõ@ßËç@}°HãÝ;7¯T”äd¤&œ‹Ž  Ú·Û×ÓÍÑÆÂÄhÝZ]-5¥U+ÙIÎà!õ±üfâŠPIU´ØÈ¢EXdt ‘¹ +-”¹È܃GOž¿ìÅÔäìAy-ú{_<Çqii¼{ûÆ•ŠK3R΃aX /7G[ SB åUøÂî-¨»‡.ûßáÑÔŸõëkn1¨Ÿ„©à‡~¨¿…¤>ìVÙR’‹)Ô'ìÌGSŸG:¦,[,)%½RAY][Ï`=ÃÀD¿†~›‘SPRÁðAº~.¤›ˆúØ#c¤koi@¤+¿”1=å| ªP¿uaï·â"B þ¼Ö û¨O ó‚E"b‹—.—ùz÷:züäÙøäôlö ØK\À‘i^À.¸€x÷”ÀîIeîžÞîNv–[6ãÝ£¢ '³|)$ecÎlÔŽ¦+ý¸?šúßBýaõ!Òÿéê ©_|œ–öÔ—à¿ð“Ž¶àä †úºcÔ‡`/ÄÉžCSŸçK½Å G “STÁ Û¼ÅÊÎÙÝ{‡ßþàЈgbÓ2s K+¯Þ¼S×ÔÚÑEú QxäÃ$ûí‡Ñá¡A²<~x¿³½¹¾RVœ—} rR¸wç6g{+3(kVk€;8‚ŽRo§¢Æ?Ù†Ë Db(¨à8&ÆÁ# F\RZV^QYÕµêšú¦¶Dýîž>Æîùˆ´ø2>õ±_>þÔ~b ôõt?1:Ú .Õתʊò².@G1îGb¸Ø[›#14U'}øüH¤„NOMý‰©º Ž4*rP^:ÚP¦a³õÁÇñ1Ñ‘á¡Á`dOX­–fPæÖêjk¨*¡Ýºt±¸¨0Jö\AmL}²ÅÐØŸþ#ýËàß àÜ,Ù‚sçÍ'ý++¯¤ª©£o¸ÑØêíV¢Þƒz›t!;¯˜]s[ç8 ãL}èG {E€®‹ºÒ¢Ü¬´Ä¸3¨Þî÷#ëí&f½EC¼1oî¯Pø™ÔŸ:ç¨7 þ,9X aQ røPÒu:61•ã |Ëv¹‰1Á l@'°¼†O2>Gñðñtu°171B I Ee™¤„¨0¦>E ºìóþÑÔçDý¿¹PŸ˜¬@ý†ÚÛ7®T–¢öz0pï._O7';+3c£uz«1õ¡Î-‘@ÔŸ¢;ÌÌŸ‰íJ—}< +-æXÛ-pÚ-æé_# GWOßÝþ‡EFÇœOI¿˜©üòÛµ -í=yö¢·S„á³ñë-Xä,y÷æõ@ßËnä{­uwn^­,)ÌÉLMˆ=´oÏv/(¦FëÖç”Q%`rŽtâÜt0ÇF}㫸JIMKGL}AHs )9%ŒÐÏ_öâáj|ëða¨1:24j ¼Þþ;Ã÷ì‡æ“Û|9¿¸¢¦±µ­£ë6»à>y_N¼âMãKoà½Þ|ë«Ê +-s3ÓPó‰EÍ'ØÏÓÕÁÆÒÜÔH_›¥ +-‚´JAVQŸ;Ž9Aæ}â1ÔÀ¾€ºíôðS\Ya©o´_mi€ÎZ9NŽ?qd‚ìïíîlI†Úª§ÍRSA«šëB’úŒì‹é‘ñýŠL/¿Ür1§odjniëèêå 1;{<>)åbVnQYu}óÕkÝ=}÷~#c†¨?õæÝlí–ƒwÈn±Œ =~„µ «£­µ±¦¢8ÿrzjr‰#1Ñ‘á;ý½Üm1æt ÐIÌ¡`ˆCn…UŸoQõ¡A–6‡ 1ŽH<ŽdG^QyuC »oàþÃÇCÃœç/È­›FÓø(šúxÑ8ÐÂ`MzÎBûÒÇî֥¼8/ ÆOÃÛÍÉAM5¾#È«>_KÂlˆ8CýYR» N1¨\ï[ãÖÆÚÊÒÂܬ‹©gN;|`_dxH€‡‹£­Õö­&†ú:šê›À`V+ÊAq…03²/î'Œr@9L}9E_MÝÍ ·ÖvNîÞ3å¶+·€¹θ0Ì §þLÌMÒ0w¯¯‡À\uyÄ#–€.·f m ,·ò²R˜ú’ x”ãQÿ‹òm›©yHÉÈ+*­Û¨ª¡ET´ÎAa¨úÄN:—–™[XVUߌªOO/÷Â8ˆ#øþµv³:‚SÜ#Õ,‰8‚µ%ùTõùGTDH (’õö­?lÖÕRß‚¤(›‹ò‰y0 "¦ÇP_4õ)“#+§¨[ÝÑöKS]U|3ýüÙÄSq±1Ñ{"Bƒü¼Üœì¬-ÌL tµ4TÁ`”`·¥WòÉþßÙËã£þ73ÜVF~Pn—rÎ>¡Q8¾g/dà”5Q){ðèɳ‘±ñ/'^M¾¡b&Zné^ðfŠ”ÁÁþv¯·çÖö+ÍõUe…PÏA:Ø»;4È×ÃÅ~‡P_OKƒ¢r[>ÊñÜv®áï>p•Ön¤ÖÙÚÎÙÝ'0Ïm]FNAieß·mË„ìoÙW d¿ì3ØŸó„Ü< Hïbœ^Y…UkÖ+«²´õLÍ-m\=ý‚ÂPÊxn[Gw[”ûõé”CVp÷ÎÍë¿þÒU° ;ãrÛŸÛ€ÛÚn ÉØ°Z ôJDý…’ +-¢Î rBÎ o xUÔ4u  ûXÙ:¹Ýçî>—.ç—TÔ6âîs·¨?Ä»‚Ós¼‚d÷©¯.ÃÝ'wŸÈ]Áþ^nŽ¶–æ¦F:šj H°)´ÌáŸAfAÄóê‹¢>-ÄDc}ötðá}¨¬H^®¶4ÔT”äd^LMN8yìð}‘á!¾ž®Ž°ÚfeºìK‘²ãL`QŸÄ>Cý/y<ÆñÂËU[AÈyùïÜsäx|rjzV^QyuCËÕkÝ=}÷î?|üt˜ƒR6ñz +-Qÿý‡Ù¸-T_M¼„|à.8ÐRÐÑÖÚXSQœMðL‰#1û÷„ïô÷vs²µÚ¶Å˜ 9(Ë‘ ˆKmù¨Ï¿Î+¤ˆ3¨ÆÒ!Π£«—_0 ä`,9b4 ~7»o24Âyþ‚\»i´vES{Òô»·S“xa8#CѾi  ä $$ÀÛ݉<ƒZê¸üÈáò³„¯ü0²/îÇP_€ú´ SÔÇ!&ÜRŒ*kÏ­Îk°×uUeðÏôógOÙµ›}û²¯Ø_‰e%ûcdÎOˆÙΗX I0NF^QiÝF*½ÖöÎî>!QûEé½”ÍS[v? ¹qaN}¡{ÎÆëccµm¨./Ê£«­Ÿ—«£ R[}m–ªòú5`H–,ꋉqÂî šÈÒïÐDV)­SVÕÐÖ341³Øáàâé åg/.?)Dù©o†3H•ríøÏà§ò©38£ü”àò“xꔟݡ¾.ö;,ÌL õ´5T•×) Nd®wyBCýYQ‡¨ÏA2‡*+»» bÜ\_]^œŸ‘–’œpâèOHöÑ?é²NaV‡Y±IÌBûb{üÔÿ+ +-¯e¶Ò²òÈlqúˆq6˜q^²Äsi9…¥•uMTÈ¡Q°Ï§Ï^ÈÈ)@¹Ò~ãæ^˜È šÈï0‘דˆúÔÞ‰.?¼‰L¾Æ 3úLÈDR’`"÷ýìçIÝA–ºƒ +-X–.^( [á„Ùñ=†úB©OË0v9bÔXÁ]ž¢Ê +-òr£t®¶²´07 dÿçSqXöCƒì;€ìo%d¤n­–}˜¥‹öaÅçáD#‘a°ÿ¥G8šØRˆ#«¢¦©c`ljneëèæå¼+rßÁØãñI)³r‹Êªë›qt³EŒ›ú,ã¨ÿ–dÜØ(ŸÙÖU–b³ýù$2Ûˆ@wgЭ?lÖÕ‚Ô—“á!nò€9‹­à!œ!}$ꚺÆ[¶YÙ9¹{„„ïAí'×~`ínßíÇwpdlüÅŸ¿ƒÞwÚÏï‚í§8/+=éHL4(’¿·›“Õ¶-ƺšê*Ö®¦FÂwÙóc¨/šúÔZãõGQŠa±A^:;Ú`³«HÙOŠ'e?$dßÉÎÚÂÜÔx³ž6KmÓÆõkVcìO`Ÿ}JdþB³;&ÖæñŽ¤þÉEKqR3Ä–‡¸#'qé—ó‹+jZÛ:ººÙ}÷>æ<!{ !›þÏû(eq¢Ì–ì‚dDNMðÁ@?ûvWG[kcMEIþåKçÏâíß-g‹§£©†§ '½rù²%‹Q"0áÄM}¾}†ú£€êKGßÈÔÜ’:„Ñ1p“SÓ³òŠËkZh#!F‚öníÈ‘ü—ÉGr$S“ÄÂ#¹KŒ¤F’} £‡ˆCèál¿¡¡ž–Æ&²þ€¡úóí|1Í„y3C}AìÓ¨OVbÜX9(ÅPYûØ·o^o¿ÒÒP3SöÂý½=\l­¶o512ÐÕÒPUÙ°ª«ÄùûïÐŽKr±ÿ …}Fö¿à !œE8)YyD8U m=C3 *¼Q^”± œ±&*c”Øò…l¶ˆ›¦'(¶EyYS“ãÇŒŽÜìçåêhcinj¤¯ÃRS^™%·"Üܽ–o&_Ó.¡àLl\=ý‚ÂÐÞÅNJIËÌ-,«ªo¾z­“^þýÇlêÏÿ„Ô´0ã¨þ "K"ëOUiaNfÚ¹ÄÓq‡ìý1,ÈÏÓŘÉÿÙ/ϧªÎ-0Qg.FåK¤(‚€ôªØŽôÞ{PÀ‚" +-H^±Ñ«%v””ñ*×–Irgüp×ûî½Ï9Ö“Édf¿ÿÁû›ßzÖ³Te‰LØ›ð_”a/bƃg¡þLÔç¹÷Èæ&_²ÿäñ˜ìþžÎ¶k—›زŸÈ’}OWG[0]­MšªJò²ÒkV¯"°¿dñ"rûs)ìÏb°ÿ 8vuùæÍ_ÀªOvW†òZc GW/ Ü>á[®R„{22ölâÅËÉÿ¾y;•p\©ÏA¸wp b%yúøÜW[ëªÏ–åá(¹á¶ékoÖTWQ•–X%ÆöZ>^QŸJ… +-PŸŸãþQPV'ÚÊÞ™Ú„ñ° s OŸ92¹ÑÙ ›ðÁ#fÒ×ãÒTW]YVœGnÂý° ½Ým-¦Ý?K/7šÇ»P˜G õ§SŸ-sÔÁ +-êòzòÕ°ìƒÏÝÿå’ýëW.5Ö±e?>–õUg S#}-׫«(ʯ•’\½RT,†œûsìý›Qk)À¡î*©­ß¨¥khjiëäîí´{ÿ¡è#‰)Ùù%å•5õàµíÝ}7ïÜ{øøé(tìÅ×z-&òZ¨Æ@éµgNæd¦Âypop€¯‡³½•™‘ÞÖMëÕ”¡«DWbÀ-dî;­åA*³ç@*ÓV!„²ŽÅÎÉÝÇ?hψ˜¸c'Næ”VTÕ6ÀÜuôôß„ûgÝ?/^¾êÓ¨O¿&Ñý3>:ŒïŸ~—Öæ†Ús%§Nž8q`OP€»³•)E …½ +-Éh6C}^?†úÜ©OÍ5Kö_£‹ÉþðTÙ¯¤d?.&2lßî ?/7';ksC=íÍÖ©)+ÊÉHIˆØ_ +-Øç_Hˆ …ýï¦`ÿïîÄ?äÑù†«ËGVw™€°h­¬‚Šºæfm}Rk@k#bŽg®¹õ:¸‡CããÏÉŽ½Gû“ÜǨO–‚pcÃC@}À•€‹>€ó÷vw²³4ÅZ«¦$?MkqxÀ·RáG©,Y).É:€L,lݼ¶ïܽ?ügjž«©‡PÈU8«ðÛC™¶ +-s3S“âa††ú² EYiIq1¡å˜ú ÀŒˆ /bïBf:xðêsÁ>Ua²ÃD‰±»L•ý–Æúš*}ò¯ÑCwíô÷ñtu´µ236ÐÝŠ±¯ +³°/²Bùÿæ_HÊ>UjrØÙÿ‚ÇÆÑ\ºÕb¾IS|36·qpõôÛŸ”–•[túìù ¸b½·@kŸŒŒO|µÖbÀáfÜ»3Ø×Õ~írS}Meyq~vzJâ‘ŸÃ÷íÞ¹ÝËÍÑÆÂØ@gË UE¹)|ãÕr»€æ¡ ˆÜ… +-µ ©Tv¡T’Ó²òŠÊÎV×5¶\mëê¼MÞÄ×@ïÈè×°¤»·{»Ú®¶4ÖUŸ-+ÎËJONˆ…Tv‘©˜êÀ.TU’›¶ ‰ ˆ‘}?†ú3RŸì0Ub,û¤ìß%e¿µùâ…êÊòÒÂܬô”cGG±?kciºÍ@Gk“¦†ª’‚¬ô‰Ub€}eû ØØŸM¶šÁþ—=nxã¼aê ®…êÊÈ+©­Û¨¥khbiëäæ¬ö²ÚôìüâòÊêú¦Ë×Úºú>Å7®Ô§ñí5É·§SøV”—•–”²Ãmµê* +-Øj…¡ ˆúóà%ÞÈ\fq 4‹€ °(\@k”Õ‰‰ÆP \@‘‡ã§fæž>CîÂjâT`~I*üN¤»ð¹ oöu»ð\yIþ©ŒêòÁ‘ÞÖMëÕ”å×JI¬E±,^Ä /–!ó8C}.Ôç4j´ß"w£CÃdÿ6’ýW[šêk«À_ +-r2Ó’ãb"Ãöï ôórs¶·±05Ò×Ù²q½ºª’üZiÉÕ$ö— JSØŸËûw+þ FýÙ´æb©%ñ¦ Õ52³²söð Þs U÷ä©‚ÒŠsµ Í­×;ºûoÞ¹÷pèéè¯Ï¡b“P±÷¿ýþÇ—Xí[ÂjÇÇFž<‚#p §óÆ•K/À X˜“™zühLäÁ½Á¾ÎöVf4¼AÔÒ¨kðM ç2å¢/CSK;'wÿ ˆ%:ŽŒ¥Š Phxlü9mò>÷úº€À’†P,ý=×[/]¬­:SJÄrb ôõp±Ÿº Ù'ŠeJ.Ìp|ûc¨?3õÙê2]öÁ^z»Ú¡Èu5ðÛ¢¼lüÛ舃¡»ƒ|=Ýœì¬ÍM õ´öUåÖJI®^) +-žŠý9„ÌØgdÿ3nDqét—”–UTÑØ°EÇÀØÜÚÁÅÓ/0$4,êp|R©¥ðö†Ž·QŸÞF‡±ÔöwÞšjÏU”œÊ8AI­·»“­¥©¡®ÖÆujJò2kV¯Y±ü'Dýó¡Ýxá´\¶!L4?žh!‘•â’2rŠª8 [G7/t…³O tµÃ 4u¢Xþüt,S–á3X†èèí¼N óÄ ” 'Pø¾];ü¼\m,L t¶lX§ª$7-ÞÝ@Ìc?†ú3aÿwÙŸÀ7ë£ûwoö÷t¶]»Ü|ñBueyianVƉãñ±ðÝÐ];ý}<\í¬Ì õ¶nÞ°NMYQNFJRcÿ§¥K~Ã#JÍ’²× ö?óÑàF—ï‡ù 1õéNË¢Û>D·äôì¼â²ÊêºÆ–«m]½ƒ·¡aOFÆžM¼x9 ÔϪØ'¥|ãõ$PÕâ1P°¯«ýÚå¦úšÊòâüìôäÄ#?ÝvnÇt3FtÓPU”§])B8-?å´³ÿê?ýBÛPAE]s³¶¾±¹ƒ«§ß´ c’Ò²òŠÊÎÒrA“‡ryýæÝ'r™F}Ð$L}"—Û¹”ägg¤$Â6Ü¿oC;KS#=-ö $,(° ‰ëâM0Ìc=†ú3Qwxºì£›ìåá½_n ôuwܸÒÒT_ SR“™žrìèá¨pâ¿ð_K3c]û +-€} Àþ +-„ýÅû¤ìµþž’}æŒý¼7ƒÒ²à¶JBj­‚²:j®‘™•³»O@О1qÇNœuB-@À†Ÿ<º*ÐÓyãÊ¥‹ªÎ”p‹@póñp¶³23ÒÛJSÚ¥‹ñöçcQŸÍ6^Dƒöáœ9s9“¡A¦–vNîÞþ°EÃ:ÌÀë°ÖáõŽî~¼‡GéÁüïcÁ|à æÌ’$Î`Ο=×aZ‡»vüŸý2ÿæ:ßãø™sïçÜÑÔtçÎT¶VKö=!dɾo’( +-¡HF$QÄ·,YBÈ.„Rv_KˆÈ’´ßi›æ6·3¿Ü×ûýù|·Mßsî=ç~ÞÿÁçùy¾ÏçÓ‹5‚Ô`InÙ¸N£ïá@–ñr5©G>Šú aÿÒÄsÊþÔÄØè0¬ÖîŽÖ–¦†kÕå¥Eù9™4üÁ‘'Bƒüxy¸:ÛÛX˜é“Ø—•–Ø,²‰ÀþhÁ2±O´ÒØö—ò8ÐöQ£]#À`›2f›‰…­£«Ç~_ÿà°ŸNIHIÏÌ-(.¯®k¼ÙÚÑÓ7ƒJû*íKV¥ýð…•¶¢´(/ûBjb|Läñ@?ï½®N¶–&†zÚjÊ +-sÙFx€;hûÄ +-Z‰OZpÝFa1IyeUu-] ¬LR&.!…–•[XR^SßÔÒÖIïêßçAïg/ûŸŠÃ¹#h +- þžN¸•úšò’ÂÜ,ZjbÜ)P&À—PÆÔHO›#W£aæ!·¤¡ñ(ê/D}ÂĘeÿ5”ýç¸ìOÞ¿7ý…ÞÕ~ûfc}mUYIaþ¥ ZjÒÙØS‘áÇ‚üý|ö¹»:Ù[[˜éëhilUQ’—•’O ò¯ -o¶5ékfÙ§vìâï«O  ùv5ŸàÚ ›DÅ¥äUqL­ìœ÷x¢FN4Ú¬¼ÂÒ +-̶.Ûõ1Û[€ú$Û~O²íÅ3ðÁ6zgÁ¶‚ÜLZJø?,Øÿà~V£U…F+!£O\ÙÑÏU´ÍˆË Ò $§¤² VÐ.¼‚¼`…FDÇžKNÏȹ\\6~¾2oѹ<{Êà<¤wµ¡<¬„‚”}ñ|císs¶·2Û¥¯£¹MEINI³VCšfu_ú(ê/ˆ}βµ]ø“G€ý‰ñ{w‡úz:ÛnÝh¬¯©¼Z\—‘ž’ Ÿäïëíéîâdgenb¸SGS]m‹’¼Œ”¸˜ðFŒýUöɲω}ªì/úXdcÙ–wÙò¸êC¡Åh“WRU´c´qƒŽˆŠ=ûsá¯Ú†æ[íݽw†GÇ'¦g=! öì³í+Üh>˜GÜéëéh½ÙXWUV|9'#-ù\lԉРÃö¹ï¶·6g¡MÐ&@  Qh¿æ&õ¿úHrñ ¬]‘¼i#3+{g7OŸCGŽ…Ÿœ{z ÍäôÃGOžƒ4o··Ôô´$b=œž…ŠÔÝqûÆõk„4é MtDhÿA/w¶@œ3ƒ¸ª õ𣨿 õÙÊ>\8”ýW¿À‰ƒ‘LMŒÞèíîhmi¾^WSqõJAnÖÅ´äÄøÓQø›½=Ý\m­ÌŒ õv ì+ÊÉHŠ‹ +-ƒ©øÀÕÿø;ØšÄ>Uö?çÍSõ™d[# ´|+)« ¬¦¡­ghbaëèê±ß×?8ì§è3 )é™9D¡½MÚq(´ ÐÎAÛBÔ' Ú&Úz»ÛÚ*¯^aÚ£Ph=÷8ÛY™íܱ}ëEY)qÑMë…0Ù¾c'wú,§8< ["â›–”ahciëäºfPÈq˜A‰h•Và@ìê€4_ .& #߲ϠžNˆÕå%…¹Y´”Ä8@CH€¯÷^W'[KSC=m–6(ø%"© ç¢Nã Eý…±ÿáb²×!ÿòŒ<‹œ<6:<ØOïjomij¸V]^Zt9¾99!.&*",$ðùÑ–f» ÀÒÛT•å¤%7‹nÚ€°¿úGdëØפ±©²¿ÔÇ^gI°ý—´íj>ÁµPŸ•STÁ}ÖÔÊÎy'í(“l…¥5õM-mô~ öPÿåë7¿¾clI…í¿—ˆú³3Sc#Cô®¶–憚ŠÒ¼¬ ©‰q1‘,²™Ù4Ô”æöY"ö¹Ugç‰D$ÎJ$¹ƒdä•UÕµt Œ-l]<àö OA"Ò2s JÊ«A›VÐf¼½¥i3Ï ÂÚú}õ¦>«ì“>†úGNž†32t§°ûfSCmUyIQ~N& }tÌÉ¡Á‡xyìqv°±4Ý¥¯‹±¯ +%!&]F ØšÞ +-²ì“}æ¯TÙ_ÊãàéZV%À&-¯¤ª®©£olní°Ûð-²Wa/fŸeöÙ—¨Ïþöþwv²-ÖgÙPŸ}0ÅÙg r3ÓSÎDG„ûôòpq°176ÐÕRWU’Ç`['ȇÀ† 0Oå¶:Ë`1"QXTBZNIeˆƒ‰ƒn/ö\rZFÎåⲪk7к3Œw¦>ì ÏLDØA¯;h’mU•]¹œ“‘–|.6*"4èðA/w–8Êòs#‘1„¸¤õ(ê/ŠýË>ùŸÏ‘“¡ÀŒß»;4Ð×ÓÙvëFc}mUYIaþ¥LZj|udxhp€Ÿ—‡«³½µ…‰‘¾Ž–ÆV%y)q1áû«~@mf9‰}ž9eÿ¿íÿÝ7O›ý†q Q_@h=ØVRVAYMC[ÏÐÄÂÖÑ•¬³Ñg’Ó3s +-lu„½†GÇ'§bêØH}À`[ +-õaýž>‚í‡ÀÖ×ÝÁÛ¥Œ´Ÿl'Ž9|`ŸÛn{k²ÎÂà‡½·æZ{ðÿ¹Í5ö%ÄÌDPe"¨ƒ†yÔäò9x4õù‹ÙùEd$v÷€8 qÇ÷ïÅÅùÀG"ˆ3'i) qÀæ2…!´}ëEY)Pg=Re"SÎL¤NãËEýE¨Ï,ûLìÃj}þ°ÿ°?zwp ·c¿®¦²¬¸0ïRFzJÒÙØèÈðcAþ¾>ûÜ]œì¬ÍM wêhª«mQ”“‘…¦'¶^…®žQg¨²¿ôÇŽ5 >r-/éZÜf×äUظæíxôxdL|bê…¬¼Â’Ššú¦–¶Nzÿ i/Tg_¿ùõO×ٙ鉱ѡޮö[Í µ•W‹ò³/œOŠ9~4ÐÏÇs“¥©ÑÎ$×`î à6û{›Å‘Ï…_ÏŠH¶%„ZR†=÷î÷ 9y*.1•ê”êtцFÆ&¦fðñêü™!ôìñ,4¤±‘¡zW[ ¨SQZ”‡Õ9 ê9äãéæloEf¢’¹„øõW¢%ô £ý…*û\zõ—†}täö_CyñìéãYÔ`ÆF‡û{»;Z[š¯×ÕT\-.È;˜ž’:}·¿¯·§›‹£­•™±ÞÍmªÊÐô$6‹lB¶Fm=Uö?÷qPQf™X\·AXLBZ^IU]SGßØÜÚa·;a[ä®4Â]¸Ívõb®MÏÌ>Á\{;‡kóRÿc®½À\»\ë§w¶µ4Õ×T”æfÑR¡Í†A›Ý¿×ÕÑÖÂÄPWK]MYAFr³ÈFøÿk0Ö–3±Æ­ª?ïb†"»§˜X+«ªk$¦khäþøÃ'Ïõ_O1ÆëÆ76ûç ËßE0:<Ð×ÕÞÚÜXW]V”Ÿ•–wþ\(k:šHf¥ÄD°Ìò¯FGªÜ|Lµ¿úßRòAUˆW¡P…dåU5´õñV{0ŽbjfÞåÒ*Æò1âyÁmè*JŠ ã«Ht¡åD¢eŸÇ¦þ,ÔŸû“È``×MŒöï€Ä ì××V•æf¦%' />qÜÇËÝÅÁÆÒÌØ@çÀþ}Šr»¥%vÁXoÙ(ð Ù§©?ó㨲 ¨¡¡Ý°y› ˆ˜Ônye5Mƒƒ‡lˆ©Å.K ;Õž"ªM"ªqC}’jïÞ¢Y€QêS¨Ör­¡– ZBLdXp ¯·»³rÙý* +-{¤%D…¶oª·ýüiPc©,ObœEoõj´ÕÛEÄq@t qò‚.t&":>9=» ¸œ¸ŠÝÓ®âçäC\ÅÇÇÐUìélCW±ªôr^fjbÜù³¨ yâ.d¨«©¦,¿[Z\TˆÄ:‹ìeˆ^/y4õgÃ>“úxÁ_H쿆]…!°?2<ØßÓÕ~«åzc}meYQANfjRBlÔÙÐà ÿcžnÎöÖ¦Fà2jÊ +-{e¥ÄE¡ÃnÞ°žýœdÿôlÏòæ±31³‹—,[¾bå*¬²[ÊJƒÊî? k„¡æ P =—”–•_TVU×H ×ÐÈýñ‡O—"§ës\öÑăÑá¾®öÖæƺêòâüì´äøhþÏÃN¶¦$ԤġꡟUvA}âÏóÒd9'Ä*Cpw +-‹IÊÊ)©jà³èèzäØñ“§ÏžKJÍʃ€ðöuA@£÷Ç=ÁÔÍìBæÔ… X”qPo×mj@1@_/7tõ´ÔQ’Ø%Ä(C+!!¼ÿd%DË>/MýÙ¨?Möñ$3ùÇË稹ºßèïé¼°_WSYZ”Ÿ“‘’~šò톺ZêªJò{`¬…Áf6 üÂIö¿emz¶9<ÒÈ‘Å&»›ìÊŸLÛ%) C«®­olneïâîí“p)=§ ¸‚PÙ.6•5ÎÔŸjHe{;oc•-»œ—…Uöô‰ãÇŽ¸:Ø21ÐÑPU’“•ƒ¦·yü{&Ó8™,ï"¢´!â.þ´ŠÀ¦­ŒµÆ YÛ»xõ +- Š½˜’‘[H–¡Îž~8‹cŒ³øæ Î"« Ýhj¨2”›‘r162<$Èÿ¨‡‹ƒ5$¤’Á ­]Í¡ ñ0¢¯úÑÔŸûÿcÇþ»w¤ì³°ÿp°?4ÐØo½qíj]uE)þöĸ舰“¾Þ®Ž¶–fÆ:šûUåÙ߶—Øé²?ÚhÓ³ÍáqY„´¥€4rf· ŠˆKí–WVÓdš¬ÿ‰Óg£.$³…™ÖÑÓ?x÷ÞØÄ㧈i“0\ÿaNקT >ÿ¯^>ÿíÙã‡c÷F ñu´µ\k¨­,e1ÍÏÛÃÅÞÊÜXÿ#“EH[BÞ{ž#ÌèÊV/ü~ñdDëpD¢âDÒ32³´svóò >A½‹·:º Áúý1ùfŠ»„Hê¿{û[Bè.öt¶±ßÅГÇyvÄmèÀ~eù=Ò⢠Ex;õ—AD#½_ðhêÏJ}–ì„}¼ç¿Ø½;t§¯»£ífsSÕêò’¼¬´düñÁAþÇ<Ý\l,Lô´5Ô”öÈHŠ‰²¿vºìGËþ§UõúßQGv%SdE%dH¤™ZÚ9¹yùœ +-=Ÿ”–•_TVU×H̘ì8Ãd§X&Ë`ÚLö˜l_w;˜l}MEqAvzrBL̾¯—›“¥© ME‰´µk¨"‹ÿ;ùÛyôÓ9\FJZ‹ëˆy ZØ:öô9~"ŠÃ•W×563ÚÐø£'ÓÚwñã6ô`tx ·«½µ¹±®ºGCDîÎvVfÆzÄa”Ü%Œ#£-ÅJÄØohÙçÅ£©?Gì¿e`cÆ,fôîàÞ.ŒýúÚª²â‚ÜÌÔ¤„ب³¡Ì¯77™Qߧ$·V_h'»ì/¦È>MýÙШK%š°˜¤¬œ’ª†¶¾‰¹µ½‹»·_PpÌ,Ù,²­íÝih¶Ø‘ö#êÒ0õ™H»‘VV”Ÿ•–wþ)²6 u4Õ”åwK‰‰ÀŸß€î=".y<–Ç!ÍŸ?ý2þ—q§ð.2#b¯=ŽRëPZ¿¶Îž™#·QãÆþîŽ[7P*!êPÔ!ÿ£®Ö‡L t4Ta= #AÈh=áDËYJ4­Ñ«ñù¦þœ°ÿž û/_üŽ°?Øì¹Õr½±¾¦²´(?'#%1.:2üôÉ_oWG[K3c}mM5…½,ÙçgÉþ÷ì²OöLo' -\´xÉÒå+~úÙí‚¢âÒLµqt=‚F‹I´ÊÚ†k-m=ýƒwïM<~Šˆ6 ³Å½È¾'EßKtùáð Ýéélk¹~õJeéåÜÌ”Ä @´@4ks}m UE9Y¦ÇòaEמÐx”Yˆ˜§‘³Á^«ké›YÙ;Ãe $.cFNaIÊèVG÷ǽ}7KFlÔ÷- +-™ÑcfF7!£ª²¢¼¬Tò2úxv²µ`ö! Q¡[6 +-`'ZAœFŽFôå)}µ¦>÷ØDzöÀ>x`ÿWŒý{#Ãý=·[o\»ZW]ŸŸE~~pÿ1O7g{ëC uµ˜²¿ë –ý ÙG“MÝz´9¾é±n”^DuUK +-ó !â"χP2Y™îa•#žDs?c wSó¸Ô—;ö7S±ÿÎ bÿþ½¾Þî›ím-àéêŠ2Qa^¶,Ø7ÚñÍWúº:šhÄ.[ Ô‡MxFÊÙÐŒÓX©O¡¾0,•f`Øå+רkêèéoÙ¶‹‡ëé}ô[€Ø0±ÙùE¥(ήAœÄ2âì%gopœ½+õñÿCë£8{ŸOÅÙ*ÎÒ’b#BO÷÷=âµß ÖCìF- øõ¥‹T•e¤fØ)üq¶P3@(’ú¨(©.\²|åj¤šD<2‰àƒN ILåç +-Ee•µõ¸oßí|ðð1È$)ljÈ$UŽÅù9™) ÑaÔ$rwv€ó(2УuRSV$Ç1›½‰8ØŸìãR_ŽÔÿ7ûÈÎÄÏÏGÿúì)rô0€Ìž®Nûõµ•K‹ $°ïÏ€ý]Û¯7hõ-_@V,#8g¿å1– +-³(¿Î›¯¨¢†P­Æ°Ææ6.`¬c$ÍR3s De`¬Æ涎[€úÃ#ꂳ&±ÏÐÒìïëíêlkiª¯¹T&æòSbÂÏž úî/‡â4ãá4ƒ®§ý9nzÆ—Oí˪G†Pô&ÒEí¸ÇÔÊŽ´#\69Àüâ Õ—›[iÈ$Â:½“oש¶²\$ðÓc# !üáv´µ0¡7Ñ:´‰€‰¨ãDÜmLæq©?‘Ø£`ÿZ¯ÈцúûnwßêØ¿RW}‰ûûH;+3ž!Pß›´×ÈE8£‚Sqß,qês3ö×õ)»b„ýŒ°ë4µuÁ°;w›ZÚ9¹yòñ  ŒMJÏ–”WÖ6\†í¦§Í°ò¥Ù(N³‘aÌ°­Í4Ãf¤ÄG…9èwÔÛÓm¯t=„™®6 3êÏÇ!ìLýéR£HQYm1ºl ›P=î6±°ur —œžWÈÞD#ô&’»_A;bØø`¹‰J‹ò²Ó“ã¢ÎÃ}øùx{î¡ÌŠ¶è£z\³3EsÇÁÝÆ<.õåŠý_ÈÙ3b.ýYúÞ ™v8~ ûE4ìŸ9äï{äç>gB3úºÈ׫>Ç8#66‰ižáœÍxR¨/ɲOQ–¿®Z£®¥£g°u»!ÏÌÚÞ™–ø*#'¿!ì•k­T˜= Ãì%fop˜½+õ_“¥‡Ãìу!øùî›íׯá0ƒ¶OOŠ‹ =à{Ä˃ ,Týf4ðV¡¦WV¤¾œA°S¿î(­>¢{ÆLº‘RJl¥Ä£ÈFQDLb_ 1êñ>ªG +-ÕãÄ„zöô‡G#C’z¬z,ÈÉLMˆ&£èÏÝ]lÌh¥þ×JÍg­¢$õ9ØŸäãR_ÞØÇ°üü/²^‘£Ÿ€¥‡úïÞî¡a¿¢L$Ä°$Fpwq´µ4E4c ·Q |½bÙ’…ª$õÅÆ·b9g3Þ8€ù[ˆ2b×yóUÔ/[ýŠÖÈÄÂÆÑe¿dÙqœe©ü\¡¨ ùª¹­£«·¯`x£þ(K^„…ÆG;ïGÔ÷ðñÝ7Zšj+ËEB?-1&üÜ© ïŽá,³676ܾÕ@OG š,|9™wú’(›ê$ciE +-R"•’ŠxéoÙÆ<í“gâÄØ(¥:ÁWï?ŠRøHð(z8<Øß`D)U"d¥%ÅF„BDy¸:Áy («h5À>b¢yb©è‚äŽcÒK}9RŸûL؇ÛKcäC°ýZc}MeyiQ>°Lbl$LØïfûœ`Ãò ¾Ü¼iñ5ŒXÅù¤qFÊØÏH½i2’ ¡¾`q”©ÓQfje·×Íó_`pÈùȸ¤ô¬¼Â’‹Uu W¯KöÉOÏÁc½_–ÁßÿS’e¨îûz¡í`« Á¦ÄG‡9ñý·G½ìÛkoe†š^_W[“Ž21À’ÿ¤þtö,b$œöÎݦ–¶Nn UH—œžWT +-R¡Ut VÑÀнŠäîÇWÐâUý(^EEùÙÉñQ U –ÊÙÞŸU0‹T•)&š=K©û“{\êËûØÍ4żû}·»ì75ÔU¡û€qQa0aýf<ÝöÚ[ã ‹hF“øš±²p†3¶Ô“Ný ·ÎÔWV[¼ôóUk5´6n6غÝÐØÜÚÁÙýÀad+ +-`ó‹/TT_ne/©({ƒ£ì]©úGÙjûI”åeçCÕøú€5Á EæÝbôãdŸH’lúN}Ée+üŽnH|Ú«Ö ­Ð,2–Ì¢Óç"bӲ’òÊZfAb©žOT*¸t"F¸ ëk.•‰ +-rù©’Y´ßÅÑÆÂÎCÑJEQÜ ÖLö§æq©/ìcØÿ™ û? ýzÿî°pÿ—«ÁÔ…yÙ) ”>fÀÖ(ôu)š¡}-sÄr©Ï~Ódâ+ +-2pë¼J*€ú+V¯[¯MøÕøÕÕÃëˆ/d|PIFlÕÛ×?0 ¨¾_É °ðñÏÑ¿ÃÆDÛy£åjCmey‰PÀOKŒ8wê¸?N2(zįµ4˜üJ}øÌøÃ1¾Nñw³‡®Hê´çIv‘Žì"Cž™µ½ó>ª!ãR3s ŠËÐ 6·u ­)­Ä7ø~³i%™E U?S«Â¼¬ô¤¸ÈPhH? "';+S²‹t4Õñ.RU¢ÅbÃ>w“z\êË•úÿ¡aÿ4샥‡îõõvÝloE(SY 6'X&\ öðAwG[Klkœ˜fªP¾þÕË›~R¨O¥þ¬ÙsXøª®…ƒlÛÕÓû¨_à‰°krzv^QéŪº+À¯7üú7à×Èïÿe¿<œªL¯8<;“™˜ qf3;JÄÆ*½+¬bED¤(EŠ4Dš ]šAŠŠŠXa)Ò¤Y°!ˆ kŒ±$ë¸3ÉNÎ{ÞïÞûÝ ŽÞ‹ìL2ßû'œ÷œç÷üÆF +^ßÆ_¡à<Iýîàþ}ôŽ¶Û¶2 SGÉË +-ôU˜cSJ}ÞiK#õçÈÈ+(-R^Æ‹Hs«í;ݽý‚è°rò‹Ë**/B/jd÷¢WØ‹ÄNÈ´=czQñ¢êKp Å9GSè°<\œì¬-Ì "Èy A1úî[:-¼AFrÔ—üqÔûÙcÉþëW°Òxÿ÷ïöš®×\½(9ž—•ž|8æ`ø¾½¾0B}\k]¤þ‚ ©/ÅQ‚7^õÿ@TŸ±WÇÔ4u ŒŒ×mÜlacïäŠ[Ç×Wتú¦ÖŽn>Èþ6È>G}üwøvÙ0d=²:øóÊŠ²âüìŒdzF_·[‘v÷Ãr]-Œy,w„cÒ ÇÝn*©/hF4#eä0#5uøÓrvó¤Å()-+ïxé©s 5ˆDä[ˆÈâD$£FoE"²"òr£Ì4€ÄÐ@¸°"K:-=-ueÌȹ‘¼f4~\ÜuHò8êKJ}²Ðè1Dúðþ‡Ÿ<ºïv÷-(°u 2çÏž*=ž—.èëE*춭 3Æ@}-u¡+L}n¯Ç?öª²U&U}ÙyŠ ¯¢®­·båØV´W/¿ Ðˆèø¤tÇšÛ:{îô=ìyñ’Y«?Ž‰«¯o€úÐðȧßíé„?¿~íÊüò,äü¸§«³½Åæ댉½ª‚½ÎŸ'Gÿ[cS#¯ÌÀ¦1§ ó"Ô‡q‘ÛfÆ¥¡­o¸j­‰ÙÖmvN.>‘±‰©™˜‘U—É ¶Þê!kZ¿N4-J}œÖOdZ¯Óêíl‡ Œ¼ÿ—¸Ò }wz`§¡À¢Ê!d¤$ÆFü¼Üq«ÍLËùÔŸ`­9êOðXªÏ§oW¿ÕÈ+ص£ o[S2r +-ŠË**/V×Ö5¶´w¡½’­’Ä^ÇFÑ^߉Øk±W¨w' +-s¦&ÆB» ØãáâhG>œ`L[ƒ—ò ¯³ÿ2óÏ@}øîßOŸ"Õ‘ýéB·Mª‘"©FêZz+à¸MÍ­lv¹{û‡E’ãÎÉ/.¯¨¼T][ßÔÒÑÅoF¯^oF_–‘BÍèvWGkS=ñ¢3å̸¢Â÷íõñpuâ…¤P5‚yÍÂyq²ÿuG}1±/ý1^{}ýŠPÿ)P¿P¿¥±žXTBbi°~Äeì¬q«i… +-df&C}ÖZs6ÃzßAŒYUtWB±¹²òŠ (ÅȲšn±´ÙáìæéràPÜ‘´Ìc…%,y½Ý~þòË1& >“õ"ki$òZYQV 9òäï ån»•¹éúÕøߢc»ë”S_Šßfa7bRRMS×ÀÈxÝÆÍ8//ßÀЈCXŠJOÓjt³½CrðÙˆD!ÉÉ[ É‘¡A’=·ÚšYÕ(=)>:"4´ç²¿r…ž %±Íàdÿ+=Žú“¦þ?ú¯)õ“•îjoiê_¹Ô/. C Ôâ¨?©ÇV}–º2£»ºTUC[ßpåš dYÑ]ƒÂ"£'§gç#Å®ÖÅÚ:{€bý@±/™­ú[%¦¼bÁû‘ô»G÷ï’z‡;‡KKŠ'1ïëéæloc‰îj «©¶tÉÂù +-r2"“šZêÃ.GLLâÀdçÍ_°ø{U }^7rrñð Ø—˜ÊNIr„}û‡„çõñsó¢ÔÇyý$2¯^8~Jäd¤$ÄÜ°g7t#kèFkWèàÀ”``Ù¹Nö%|õ%¦þÇOP¿W˜ú¹H}Po\jŽú½O¨>]ÕïæÈÈ+(êóÕÕÂÚÞÉÕƒìTTlbêÑ\Ø©Šó—ªkë›Z:ºnß{ðøÉÓáç¹ëØ(-xè®ÃCÄ]»oµ6ß íîÌÉ…¹™©‰±Qáûöx¸8ñ ¦ÏR׿õgJÿiÆy¿æ:-42š“‚‰A9‚‰©@9Z1iEc28,2&!%#§ ¸¼¢’=°2°/ïFÂ))Ú``MÌÀJ +-e¦/ +-Á˜Üac¹…WŽT”abò²súÌÄ„Ûw>Žúõÿ'Þ„ª?ƒ¯ú²óÁ\UÔµa«×›š[mß±ÓÍË/04âP|RZVÞñÒSg«®\»Nvª›¨ëÀÐ0ªë[¢®Ÿ‡˜€úA¬«£¥±¾¶Õ5?'#9!&2 þÛ}—ƒ­•ù¦õ«W®€ï^¦¼H Æ7W„M5õ¥#› #›##§€×­©»œääK›În^¾tbéYyXŽ®ÔÔ5Ülïì…rôÊÑäcrdh°ÿáý;=mL9:]V”Ÿž|8'¶{—£í¶­›6¬œÔÑP%íˆ Ò‚ù JNö%|õ%¦þCý÷@ý¿Sê?yü 6šRÿ2¥~Rÿ@hÙiŽú’½qª/,®€0¥…K–ªjê®Zkb¶ÕÚÎÑ…·«`®ùÅe•¯ÖÔ5²ööF—ŠEý_ÇCLX]!éßê<|òèþÝÞÎvÃJ‹ò²Ò“âá¿yæJ¾ÛÈ@WS LANfƒ0F\¥~êOcÕ#é™4(áº,^ªª¡£#³°¶sr¡í(.15óXaÉɳU—yW9984‚9IÎðƒÈÄ>+ûèF$'ñH0'› '/?S~‚ˆ¶£½>®Nö6x!FËuµÔHP*ÈË`P²d_xf܈ý8ê‹}T†ú£Œö!õùÔóƒúzö!%1. +-(àîÇ£¾G}ñ{OªêÏ••ÕWVQ×Ò#«jJÅÕÓwoȨ¸#ag΄5µvtß¾÷àñÀÓáçh®ï'c®ÃCýÐîºoµ6߀˜¯:s²¤07“",ÀÇÃÅÉÎz«™ÉZ*®øÛ²øÛ Á˜ÏFo€ E¥hRâ̘z´fÃ&s+[‡]»½ýƒ÷GbP—WT^ª®­ojéèâìÕk2²/iGÿ׎„GÖÖ|‚’ÜÈñ¼¬4Ê8/÷Û¡mXõH[C…=3ARr²?ÉÇQ_<ê3» ËL¶%†€XÌðˆh ,ôÍƺÚj†úÙ)@!d¥±¿š™P“Aê+2;-(°Ó9•ÿXª?¯ú°¨Ò³f󼕨¾†¶¾!lÌÝÛ?(,2úprzv^Qéés®\»Þp³­s¼¸~aÿ‡0×á§lq­¬(/ÎÏÉHNˆ‰ ö‡w°å ~¼UQ^½•Dü À¦*à…©ÏD%34ìG‹”éy¯c’ÒË704":>)=‹™YM]«aP¾/(ÉÌ (i=zÁªGu5W/VV”‘™¥$ÄÜ°g·‹#“”F:šjË–d‡QÉÉþ¤G}‰¨ÿ ZÀ¿¨ÄPê÷Ã>ê77ÔÕöz²äx^vzrBìÁð½¾^n;úd¥úËXÔ2n§EŸ°êK±TµUFžLS×ÀÈxÝÆÍÖöN®>d£SŽæÂFQomoE‚‘•bFwêã' &×_(õyû‘E°ðÖ çN—åe¥So…ïvÞac¹›®¦ÚÒ% •ädæ0Ï|¶ÔoDýiÂScG¥¦Žáªµ&fÖvdhp†Qq‰´­ºLÏ°{|RŽŽ}‘ì33#v$””Ý­Mõ¼~t,3õH1#_O:4Óõ«X®',FP>!û_{lÿ÷£¾XÐGa¨?J©ÿþÝÛê:ò ÖùaßÝÞ®ŽVR^Acp¡ÿË~yeueax¹fpMVbÔÁ ,±¡X¢€ˆX¢FDéEˆB¥†^E:Ò)"  +-RéÊH@z;htÇ5IÖìsν÷»ß'H1˜_îùöÙûyŸ(àçåêtÏ@××mÊŠXdV.—ûŽú\å{|ªÏg­„_b —HH®Z#%-«°YeÇî}Zz†f–Ö ­¾!‘1‰)éÀjn7¶´µwtõöÿ{6øâå«ñx+D=ùóçèËû{»:ÛÛZoÇӋŽ†jç|òøQ c}Mu”ñŠr2RkWKJ,Y¸€æ×4õ'_ü²ÒgÔy‹Î_Œ¦¶M$¸o+›N®^þAaQñITTVAT¶Ü½×ÑÕÓO¢’7´qô#zh G0´¦ú[¬¨5òótu´³±27: f„oOmŲ%$+Y ‰“ý|õÇ +-}Õÿ/Kõ‘Ãàê +-ë\[,ö9ó|r|tDÈ)_Xhh¯&„ú[7ÃFcê/EÔý>‘áVšúlÕ§ðETÅê¯hkUÓÔ9lŒ7ÕmjT\RjFv^aqYåÍÚz¬úÝ},mýeŒÚÊL@[êª+¯—\¹œy>).*ì´¿|7â—ž6ùmYib­âbsEgóãk2U_ú¼°ž%ÂkHä¾wïݯ¥khŠ³ÒÓ7042ö칌‹— +-ŠJ+XSCÔΤ‘£òõ™‚D¦Ö׃ =µ|%átV1Ñ?tP]•4¤ ë(3Bcc‡%37Nö'ò8ê•ú ôéM¦¨OTóã¿ ºÞ‰)+¹’Ÿ›•Žgàãáâ€4Æ·×Í +-rÒØc–.Ÿ/¸ÑBÜF ¼U­úDZ7ÈRø:¨k`zäØq{wŸSÁÑ Éi°PÈZk¬ø5šêó¨ÿö-Ã/ô8ç_ó,k…j+ï`{ÌÒÔ@ýöö-J€/ñHZEEf ÏHøD}&-é¹áû^½– +-KUuÍCú&èÝ}‚#bRÒx ©µ­½ÎÊA”•ÿcV¾eg%\ +-JWG{[ Ó²ÒSc#CðØì¬-Í õ(5¢„®HhnÓ>edŸ3£ ?Žúã€>Kõß0ª Å–¹¦¦ª¼´¨0/çB¬3tWo7g{À€™ÑaM¬1J_cû£Ú+Ò?Žúïyï¨>ZSJõEæÌ¿`¦—”Œœ¢òÖo¾UËjecçèêéz¤5Hë[õM_ݽ,|Ñ+5"¾k}ó:Ô;À×ÀW'ü8ƒ/øï„èZZ-Œõá·÷ìܦ¬(/³žM/þ¿þÛ¤S +-‰KÁÍeÒRZVa3Ìm57\‘‚¢â“Îgf£°¬¬Ë/_–ücûõ4¶¡çOŸ<¤Ã²²²¬¸0/;3U¤ /7§ßG榺d_~ãz’–âÜ‘ü©£þØ ÿ?ô‘¾`ÕįúÐ\¯æƒú¥&ÅGG„úyº:Ä#ÐÓ>  åuÍ*I +-_Ïœñ9·Ð#¼T++Àk®˜øb‰å+¿\{ºiËö]ªêiguó +-†}¢éUÛÐ|/Ô¢×sP}²Qã–Ö'èË!çïÝ…˜¯®,+aèuÚßËÕñ4;#=mÊYqÄKJ,ÃðÂM)ë䪾€ìóJŠKѹóÅ-…ÁQIK×ÐÔÒÚÖáOßÀÐHHË ’–7kë›Ðܺû.HŽL uµ4öîÞ¡Â nÉB1—LI¢&ÇÉþÄGý±QŸ>––êƒö ªþŠÒâÂË9Òñ‚|PuµAsèàþ½ÀlÈb$SûÌ€M}nŸÉVõɖΙC­)¨¾´QV -=C3 /ßÀȘĔô¬Ü|´O5·±³öö£…“³þÁrVL/øt>gmª¿u³¢´¨àÒÅôs‰±‘¡°ñ^ºðÛ»w@±Û¸§¬è¯ivMýÈÔbç%krëeä•·íTUפãÒÝ' 8":!%í38Ô‘`pãéH¿1²ÿ+¥H¸# € Á©ð—‡r&ô´ŽËïÌë`9"g²zOö97úsGýñ@ŸV}ô‡ž?{‹ ªßÅRýkWa—3Ï''ÄD†‚û¹9#‡1ƒm†êºk‡Š’‚œ´ÔZ²ÎHÿˆÅL£-†£>ß›ÂÞQ~ÕFªOëúò úˆ]:úÆÔž…EÅ%¥fdç—URÊÚ‰”õ!µP¯7£ÀëwAx bx¡/ooƒ¯©*e͹–œàíî|òøQÈxømš]ðÙ˨^7ëŸ3¦¿ƒ®É¥þR“èÀüŒ:pÑyb KH®Z³NZ–äåm=#s+›N®èÂÑä2³ópIªkh†¸¼ßq % âòçÑâò÷aãË>Ä%.I×K®€OŽðqw¶?~ôˆ‰Á!œ—*J_Ën -éÙŸÊÉþ<Žú€>ZbtÿýÁgO£ÒÚÛ}¿ãø Rýr¬úYéô<ÉL  ¹îlÙö‡¶yÙ’E ˆÄ xëÌQŸï±TSŸVýé3aeÐ¥²c÷^ -]CSËc¶ö.>§‚#b±æä_-¹^US×€UŸf×Ðèìâ)ë[ŠúÀ®Aš]÷î67ÔVW–æeg¦&ÅE…AÈ#cµ27ÒÓÖØÅn³‚¬4A—¸Ø&Ї5¾ÛÒ{\U^ZT˜—À§«2˜=»¶«(ý!…Y¾éÝ\‘ÿ}Â9Ì;OPõ)p1ª/¶p1Vý ²hK‘¯20m²wv÷ †mÊ̹|¥äzeu]Có¼NHõ‡Ö÷¢‹Ö猰Þmi¬«©*¿võ2|xrBtxp€·;&—±¾Ž¦:;eˆxâ«$á¸è€úXÔŸB¦'DŠŽLtá¢ÌðPOÚúÍ·û4´õŒÌ­pb‰GÅ%¥ffç—UV×64CM§øá5©¿‡=»üܬ´”ĘÈ [kK3C=-ª'ÉIó ëѧLQú;Gý =Žú£S_úohèaèÃ÷vßÿñ^[kSC]ÍŠ²â+ù¹3R“†Q}XåmÊ›äÁ`Ö¬’$Å•_a¸ex#«þL¢ú -Eº*%#§¨ àR;à2³²¶süÁÓ/0426ñ\zVnAÞ¦Æ òÕ?rñ|u"äêë¹|µöUø𸨰Ó~^®Žv6VfFzÚ¸d¥ÑgC¯›MjóÕØV'õ§ùd*}áÓaz"¼¢„N| ŽL]SËc¶.¾!dxÃö$t‹¯GOÌ߆M̽ÝímtO*¼×r6îLØi/70¤ÿ³_NU^ižÌŽ™ÙLȬÆYcD#cšÄŠÁ +-H‘Ž‚R¤( EŽH‘"  t¤HïE:\àÂEP"‚€:º4«Ù8Édwö=ç|߽ߥy…àÌÎ|ç?8oy~Ï{‚D¦¦*ȾÜvi|(Q²¿”‘™¬ìÏû±Ô_ô'Ÿ?ûçý»Cƒý½=]mÍ µUåŹ`/‰ñ1@õéÿ#Õ×TÛ¿F2€`õª/þIÀ˜e–úÌ7«êÆPýõ¶`n)«iê™ZÚœ<…†) CW»‘êŽ3ÀÅŸ'T}‡¬W+€«¼8/ŽuÕÛÃÅÁÖÊÌØ@OK ¸%¿}+æÖÚ5ðË¡×tÀSØZì£NˆúüФˇWü‡MÒ2r +-{”T5t1=FW¥$jZÚ¹$2ï£È|ÆŒÌßg‹Lfñ0öai(Ñ‘9ÐËãrZj+©C)62,ØÉÁªg¨¯¥Žv…ÊL싱²¿àÇR>ÐÇÚBCÿÁ8Ü«C·ûûzº:9p±VW”^ÏÎH¹z96*<$Ð×kªêË#Õ‡³@ ŽGùïh”Yƒ™éMW}4¢Dõ[Hõ1¶¤¶Éþ¸T_[ßÐÄÜÚÎÑÅã,¶Õ„äô¬¼¢2&!n=Õùó¿·¨yšSõ™ºŠ¹5M¿3Ð×Ãm§¸u-íêå‹‘¡A¾^n”­êh¨*íQ•‘Úͦ±ÅÕ%Žú‘Ô¤ê'8•HhJnܲmU>|)9¹zú†ÀŽ_IÉÌ¡3“‡2ï¢PõÞçPÂÕC™91+3x 4‰df>ìKb|4¾”N;Ù·8zä )Ÿ1$š¬ìÿ9¥¾hÐÿƒ‚>š^¢ú/áX…õ„ ? âÒw³A¿®¦²´(/'3-)!.:â|°ÿlªý…?ÉD`˜(X\ü¿¼YT»*Pk¥ø‰uß®G3*·«>–Uþ^BØÊ/®¨®kjëè¾ykphxtŒ¨>ÃVEçßVŒ‚­ö÷vw¶5××T”äd¦\‰‰ ðñtu²·¶09¬¯È—U Høø¬ƒ€ç»*†Ö"3KHö?¦W\ V|ùŠ•«Ö¬¥ê'ꧥg`lfeëàâîí. ‡fv^QyuÙEFù¨Kéí<.¥§OÑåãur |•¥¹Thûy¹;Ÿ´µ4GB²¿K~ÇVR¿¯†ÄÊþÂKý¹¡/Pý¡ÿ˜‚þ[7yÜöÖ¦úÚª²âüÜkéɉñè÷>gÜœì¬-Ž¢1V} Jõ ØIžáͬú£UŸQIP}äªûÕAõÍ­ì0µ‚Ã"c/'¥eÁ,UÖ6´p¸¼Þ¬¾Y}-P}Q°…ÿ +-ú²ú`lddõ&Èjc]uYQ^vzrB\TX°¿·»‹ƒ­•™±ž¦šò^è6ÃUQ¯Å>RÕÅw!ê/aÆ&¿€p+ÉÈ*ìQRÕСRÓíŒoPè…‹—É.¢úµsyB§Ò|Bó Ú¡S©«½µñF©_b\txHÀYOWGœš û*øV’F·Cö?ee¥þÜÔçCo>Œî¯ú°üÏŸ¢íŸèÞêåq;Úšj«ÊK¨ÏÇF…‡úz¹»8ž°±436„)VSÞ·kšê}ay¦7‡ê/eª¾4¨>­£ÇŽŸp:í韘’‘_ ®Ú³Ô®zwdlâ!¸ê<©õϤËii¨­,-$®z!4È÷ŒÛ©6ÇŽ9¤£¡Š¡%… Í&ªú™Ýê%’ú‘Ò¹ù µã+¾ÿJâëï$7nÁ±©r@[ÿ°‰¹µ½£«§O* ¾•J*jê›Û:»{ûaGÇÌšš³ÖïwAý^R©9ŠSn¥&|+åf¦^½„ èåvꤥ©‰ÍeŸU¤…=–ú¢Cÿ·iЇí½wC¿ AÿFuEIáõìŒÔ«—ã¢#ÎùySŸ79rHWK]EqÏN¹)ªÿ9¨¾ØÕg™¼YU_L ú4³`DÕµô ŒÍ¬lœÝ½ü‚C#±ªæ€ªÖ7s:y4´=~J†éÍ/¿¾};‡êÿ—¡ú˜ZèÆC'\x£÷~ºÝßKA«8?'#%1>:‚VUsC}mõýñˆYë¿ýšMŸuüVãN/z£…dŸNTÂÏ—¯X¹jÍZ*7åwîUVÓÔ302³DDÇRTlBrzV^QYF›Ã› 6_LâÒëøî[‰_@›ã÷ï‘Øl‡Ø¬*+¼ž…¥pà…‡‹£Tð°¾öÅÝüÜ\K$‰”pJp²Ûò^¥þû@ÿ- ý—Lè ö÷ötupZëª+J‹òr2S“âc.„ûŸ=ãæì`gmæ3¬ª´T›Ô\ªÏÚ ã½KõùÈ’‘SÀªGÔÞÉÕól@Hxt\brF6Ŭö®ž¾;wGîO†>Z|¢2¡?~>ÈÏÛÿÜ~®§}@Uiï®ee¤7oüÄe&Õg‡˜ùDP} ¾êc`22µ´9yÊ Mè…˜KWR3sòAõÁS;@õ‘êOLUýßD'ÖkB,¸ñ íï ±Ú[oT•aO½ìçåî|ÒÖÒÔˆ,éÍM]¶t*¯>„êO¡þFvâ*®ÆÓ&©m² +-»U4tÈš;î¥ÊÚúfN'¯·ŸZGHÎIHNÑkø;]C~rŽcÙïä4ד{)í*)¢·»³ƒ­•™1‰Nìƒ(}«ÈÊþÂKýwC,šY¢ú/'_<ƒõ†þO·@ù¸úUåäß0»ÑçƒðÇì¬-L õu4Ô”÷íVmÙ²QòûoÖÍ¥ú,õÉ›MõÉx‚¥®&ª/%ƒyu@[ßÐÄÜÚÎÑÅÃÛÿ\XÑÔÂÒÊÚ†WXx”ÞÀ(½CõibÑÝÿõþÅsh=ëX5%¹ÿc¿<Ÿº¼Ò0<ÎŽã—‘èfË”¦H QPª *M*U@@Þ‘Þ«tQADlÞECÕl¢QÉÆX&›ugŸsÎûþ +-¡Ç!ö=ÿÁ¹Ïs®ûzÊŠò²RÎFû#M=zÄÜÄ@WSóJJB;\ñÙ@7<®V‹úkHŽty²cÜÄ/´e›ø—¸;÷ÐÑ76³²sD)…Gǧdä”V\¼RßÈYOquâß¾[0ijCü} "GuÞEÕy¹º¢´ 73%>&<øÌ)OWHÑÂÄà Ö>5Ü\²ÏÃÈþï: õç£>ô‘¨SÝCÐÿŽ‚þ0@¿A¿  _[SUQZt.;#%!6*,ØßÇËÝÕÉœÅÄ@O瀆š²Â.d-âÛ¶ +-cèoáV}Æ\è3êÿ™[õ®äUˆê[ØØ;£ ÆšWªy…ihdtlrúðê%¨þ’4õãlM}M4urüÉÈÐà@OçÝæÛõWª+J +-r2’ãaÖý¼Ý]í¬ÌŒ¥ª*BÉsàŠH*«à1­V塹dŸnOÈq#äˆÊ¾¹äW²r +-*|ÇШؤ´ìübèΫ×o5µvt÷ß8<:61MdÅ ;ÅGàL]mTw–ÃßIKŠ¤6&[«Ã$F¥]¸<‘ìó²eŸüFöWpêÏýÿ΂þ6ô_¾À ê$þ=€~[KÓ­ÆúÚKUeEçr2Rc£Ãƒý}½=\l­ÍM õu4ÁYwíDÒ"ºUXËß瑶0ª?çY‚ê cÕßÉR}$©îÞ¾aQqI逫r¢ú-í]Dõǧ¸,õ=ËR—Ä+ôøœ– +-ßÚt³¡îRUy1+Ÿ“'œl,M ‰¤ÊÉJKŠ‰ næ#´šå¨«£ú³¨¿–r=G{JHAŽJ8GüÏ]=OŸ Žˆ¡Ê³¦öÚ;-m]½tŒdcúõ!•ý_çؘžMM|ƒeb¤d¿¤ 7#%>:<ˆ’}sZöåÙÿ”‡¡þ<Ôg©þ,èÏè?›žÿæñð‚~'†þµÚKÕýüœÌÔĸèð_oO7g;k S#}]­}êªJ»ax¥$ÄDÐôò’ñÅÖ¨þgIª¿M'­úGìÜ(Z¥dæ–V Õ‡9êèá–ÔZõ—ˆ+ôüHõg`ÍC…OÿèÁ=Ôf$©+Ë +-ó2Sb"‚­Žµ679¤«©±‡rÔ­B¸ã¬¨†g+êêQ éO:Iv}nâÚ²ìLðÏuô̬lQ{ú†EÇ%gä”TT_†• ýÇ~X™žÀÊ„Ë“Cö—Qž,ÙŸ¦V¦ÞN’cM%8SVZbldH€–}K¶ìË  Ùÿ4‡¡þR ÇË@öŸú£ÃCîõ÷PЯ»T]YVœŸ›™ +-—Ž ð;åéFnmtHWkÿÞ=Ê +-ò;d¤$Å@Y6ó}ñ2½XZ(ka´…ã,Cõ•hÕ·u<îîå›”– ct¡¦¶å¨#OÆ'ŸÎ¦Õ/Ë£z|xû±Ñ‘¡ûý=w‰£ž/)ÈIOŽ‹ +- ôõv?îhk°ÒÞ¯®ª(¿+ª ?êx«ÐZG=õ*½4—ìÓQBnDýI')+§ ¬¶Oë Ô§½³ÛIôcIxgjmïîCí‰?$W{.œãíIË>jϾîvØ™®_½T…‚ÌHŽføò õ‰e_™–}A"û9ú“‘ýå†ú QÿWÖfJTÿÇô￧ ?BA¿õëÛýËÕ•åŹ™p瘈@¿SèÒGX6>tP›‚þviIñm[…av‘²àá¥TÝ:è3ó»ˆêõyÁP)ÕWPQ'¬ÕwEªŸ’‘[P +-ŠzQGw?'¬^¬Þ,¦ú4õ©÷÷=x}nXµ4Ýl¨«¹PŽõldˆ¿ÏI7gû#¦4«àÁÅD„7óaÕÿ W<U«¥ú³¨¿–.Ðõ<ì­ITBJfç.ª?Í­sõ8u&(œZš*ÑÒt»¹­³>$»>Ñüùíû–$»>â®ÏÁøCÍ·ë¯ÀÒT”—•J%yÂÙÁɾ6Ⱦâod=#û+? õ€>­úˆë¡oÿêø÷ß>…?:òèø^W;@ÿFCÝå‹úpåø˜ˆÐ@?¸³Ë±£6–fƵh¨©Ààn—þR\T„@Œ0ÀCA.ÕÿÿßUŸCP±êï= £oD«~@(2Ô¬sEHõ¯ÕZ¾ê³•îüWÀªoŸNŽ?A¬ê¥YUQZ˜›™tªµ™ñ!]M=Jª„à½Ñs³uíAý5¬0qƒr¬Mü‚[H*ª¨ï×Ö3:lië@mMqIé9ù%ç«p¶vôàþ›˜F?òåò–&î$_@’Sã²ßP‡d?mMÑa~Þ.¥¹ Š’SöùÙÿ݇¡þ|ÔÿQý_(ÕCÐÿñ5ÚLÑ´NŒ=yôðþ@/ý«W.^(/)ÈËJOŽ‰ „+»»³·±231ÐÓ¡ s+!*²Eˆš\$,ÔŸ–§ú0´ ~ÏÔÞ®¶–;7®ÕÖT–åe!RûŸöts²?babpPkŸšòn¹íÒ’b"4¨6|†;ž­§«§ú³¨¿–Ns=Ï$û¼›„¶B˜2¦* +-ÓØÌÚ‡·_Px44hnAiEõ•úÆÛÍøGν6ý{qÙ§ ô ò'zm"Y¶·Ü!²4. +-ɾ» koBaÊB˜Œì’ÃPêÓÐ'Ÿž¬¥¯_þðÊ$üûá¡Á¾n ýëõÔ}³ÓSÎFÂ…}¼Ü]ìmôõúêªú2R0µHVø>Ç ƒ‹'—Q}Ž³ÕGÃéêT?:>©þù*Pý›M­íÝÄO'°Ÿ’1R}X!©¦'aÏÄ~z«±þruEIAnFr< ºŸ·‡‹£•™±¾Î½ªJ”žÂnÇ;‹SðØú¨¿†U¢8NªC!M>~AVšêûµõ [Ú88Sš”–d ö¦Ñ±‰i¼7½žYfƒâ0߀ì¿â–ýJö+J s3SbP…bÙ·˜%ûB›XÊ-û ö—|êÏ }<¦K) *úõ/(è=¸××ÝÙÖÒЯ­©‚i=—‘’äïãåáêä`kmnj¨¯«…¡/¿CFZR /Ȧöoú„”®0Ðç<‹«¾KõU‰ê[Rªf(5+¯¨¬ò"ÖÓ6¢§£ úϾ{Î *šúç§>¨^cPMM@å?„ÇoomBzz¡¼ø\vZbldH€ÏÉÎ6–„S* +-ò²_êoD»¬vSs©þê<õœ²Kâä%qJoß¹[y†¦.Õ¡ž§ÏGÄÀWÏ+„4ÉâÔÕ;úd|ŠÈ>©Ð÷ì +-] ÌydäÑàYœêjpšHöC}AöiÙÿûåâÎUžÇñݧÑl»3]Øig+Õ4£‹”$Ý”J’\Ê’B!BDµ(rD$]G¹D„ÆlMã–j¦™.ÚÚ¶¶Ýg?ßï÷œó;ç÷;ôózöé|ÿƒó9ïÏëýúèQ²ÿ¿ìÓºý¿~õù©ÏRý_ÿ—¾ë µ üä6œ¥`{ý‹çÊK‹ egI9˜ÐðõöpuÆÐ7èëƒõis¡¡ý£@ŸRý‰­ptåÃN®ôª?—Q}k'P}ÿÝ{"câ“RÒ@õ;ŪÏåT?ô”9õDœ‚;¯ñê•Jl§ùtd§aÁ»|<]¬7šbLéÌ×TçÈ)Gõ?ZÕgS_´è¨EeåXóT›3o)Q +»-.îÞþAdœp9Âå+Yw­Ë>tèCÔ¡=Ïû9M'™&Ý¡Xö@ö/ž-ƒË);’ý];=9²¯Å•}X AöøêóBŸRý×$¥déŸ>Æ[GiëïÑUZ_[ giù©âÂüœŒ´”ƒ‰qÑ‘aÁ~ÞnΛí­7QÐ×[ÐWW©ò%>˜ÊX6ôÕ—xÒª¾Gõ·ïðEÙŒ£ä«>d¨¹å&`ª0õQýÒª¾ÈNÑ©‡1¿cêZ]5ÆÔñ¼¬´”¤ø˜ˆ=HN·m±³271ZU(5SeÚå‰ +-”›¢ÿMwü°÷B}Fö‡Ó›>jŒÈþxyE%Xõªt‹®7Ûdëèì†æIV2#· J´¢ª¶ž”hGW7ç“AŒ­Ó=ºD±ì——Ùÿú@4#ûV"ÙWïEö?d¿O >/õ9ª ÿü:IÑÖw¶ÿpçÖ ”S}¸JOžÈÏÍLK=”ÐôóEÁ_k²Ž†¾&†> +-¬$‰Š, ý¼Ðÿ°sÛÕ_ȯú™”êÓ”jmï$ª?9ýåçŸà҃߇^S}-E©œŒ#IŒÛ°s‡ÛVG›MfƆË/Ôž« 5YIQž¨)üp¢úÃ9ª?T¿šC}FöG–ê› 0Iy*Ô¨:Ô¨Þ²•kÖmØhmºkwXÔþ„C©G³1-zý»›·ùæù¦¯y¾í]öaZš¨Ų0a?º@öñ@±ìëòË>{¤‚ìKùêóA_\õAMHHñÖß½uó»o!¦5•Δ•œ=«}kxH Ÿ§Û6 +-ú†«0ôç!èOè+ORÄÐÿŒ}b*œÐ~ੈêÛ2ªËRýË5u ú7DªÏ¸é«~¹é pÓ'ÄMÛ›6_»ZwÞéR‘a»ý}<\œì­AMW¯Xª§3O“Ã(‘™ŠÄtH5{¦T‘Ò#…•Ÿ¨„{v]w‰þªµøx‚ô ˆ>”ÌÔhu]C{ èv’ºEye¿ÈþÕ+•”ìC‚ìï ôó‚ã©WÙG#Ù‹ìà ô®'PŸúŒ˜°Tg´»«B +-®k¥êÒ…³§KŠ +-ò²Òѧî +- ò÷ñ„ou°±4ßÐ_Y]П-‚þ8 ý1ú$±ÃEÐ2û›«¾‹‡·Оˆ£*@õAõyÕ´wHý‡¥ú8(l5…ί­¾táÌ©âã¹™G’ £|½¶oÛlkiNÌT[KcöL•i4¢ˆ˜2„öž¨ÏÈ>ݤ0S9,ûx×g¨ªÏOtZvÏÁ¤G3rò‹JËÏWT^©o¼Ž§.2Q´•/ÿ.m¾¡k”:ž2Çš(‘ý¬wʾ¢ ûƒzõy Ï£úOqDïßëlo½óý–ëõ(¤çN—’/MNŠßµ7 Ÿê„¡oŒ ¿X ¯!‚>J+HÊ"~4ôeÄ ÿg¶ŸªÅ”£ú©G³±ê_dTGˆVý—lÕïEMÅE«~7üÚL¿9W^r"?çèáC‰±QáQ®[l6š1ÕÄb:™"êy †žOêËÐC57éhÒ©h¦s¨óiƒ…•ýwT¤‘1ñSÒ³Žž,;+i['Èþ#ýž~ȾȤ°HýüèGX©¶»h¤×ÐH±ìç Ùdÿ÷êóP_Bõ{HB 1¹{ "ÚÔPWs2zª¸ðXvƑ䤄Ø}{Cñ—º89ØZZp ?kúW ôÿD OIÊïèK¼^TÿS¬úc%T% +-¦¸êçRªOÄ´WÕÿWªÿ–ê}¢Pëw´Ý½u£¥ùZ]õe$¦Çó²ÒR’âc"öùy»»l±³²01Z½bé¢óÀKUÀK'*L@ª/KzQ_†Cý¡Ÿ+Õ¥xªT•ÂPå'*M™Ë®¡¥­»DÕÚõf–¶Ž¨Ia)£ÑRfäQçSœOh+»I‘ö"ý§T²ÿš#ûÔNIÈ~JŸ²?YýÁ=ú’ÐgåôQýGdé[oCB›‘˜T\8Svd/3 2êëåîâähkeaj¼–‚þ\ ýi}Cÿ#ú¢×›ê©ü|¼¼¢Kõ $Uÿ­ú bªß#ê3b +- à!\zUŒ—&ÆíÛà»ÃÍÙÑeh°|±®6üw¬¥ŠXK1Ÿh+¥ð4ä?›#ûôXI—~Ž—d_U]s¾ŽÞ2ºJ]=|ví‹ÚŸÀ õ›J¼•7o·‚ìó5©”²ÿ‚Ó¤}ʾ˜ìOÙW ²?Fý<ú¼ÔWý'ÏÜë„¥Õ»Ž¶¼ätIQAnVzê¡Ä¸èÈ°à_/×­ŽRÓõkW¯DП 9 +-ÐW Зㅾ@}úõ­ú€'>Õ·g«>ä§Tÿ+—ŒêW‹T¿[¤úL„¤ÔR¦öÞïê`ñéÌ©âã¹™G’¿>@¬tû¶Ív–æ&Oº ´æÌž©‚¤T¤úŸü÷<üñaï‘ú¿,jS9Ô¦d®3TI™›n²qÜêæ¹3 õðÑœü¥åç+*é.mïìƲÿL$ûRPâ² Ë~ ‘ýüœŒÃ½É¾†„ì*È~Ÿ@} èÓá|ÍU}Hgg{+,}K3ºE+Ο9®ÇhrRüþ¨ð@O7çÍ {fëÖPПÅþX.ô? /ñÄ "Ù‹êkië: @õh¥hýëðÿAõKNäç=|(!6*KjS£ Vö[È\#c⦤gåž,CkYw —i[Ç=FöY?õß1VÙ·ì&Èþ€ž@} êsUÿ%[õÀNÒX_[uéâYØú‚ÜÌ4¸Ec÷í ò§¿ÒÌÄh>‚¾Ö5Õ*}@¸}ñÇ$J$¿êÏP¥UßÈ„£ú Xõ KNŸÅªßtºC©þ/lÕžDª/.¥7ZšáÔƒÿ_vòx^VZJR|LÄž ?owä¤&F«W,]¤CÁIþ;VÒÑ£h6Ép¨ÿ~f;ŒZv-L–l;Lv¢S§KôW­]o†»}³–¹EHö«j뛾ý+ìe{W÷Ñ\}õJª2eËþ¶ì7cÙ?Ç#ûö”ì£:ÕÀG”² ûƒxõ9Ôÿ·¤‘°T¿­õ6V’ºšË(œÅ°õ驇ã¢#ÐGz¹»89ØXšoXgh ¿To¡6úã1ôeÅ /#ý=ªbª¡?â÷Ÿ Õ—cŒT\õÄU¿ˆ¨þU1ÕÖ/ÕÃN©}â¤õWª*Îœ +-œãö…‡øîpsv´%Õ_¢«­¥1TŠ’¢¿PoÙJ´ï0YWŸÿ²_'NUÝWÀ'“8jšàE›1DM! û""*Š*û" ( RQAADÄ]£QT jÔ¸à†M“ÔÛš¦‰3;=ç÷»ëã=x`Ò×™ÞßpÏ=ç{>gMzV^AQIyeMýÁ£'šÎà\^ƒÂ>èyCõ²Mß0Û´7ìwÈÅþŠžØÇ+ê‚}ÁB•°¯ì“R_Nê  G¨ÏÎ|Jïú•/`蛡7ëkwï*-.,ÈÍÊHMŠ…S4ÐwñïÙžLè›™L6ÔW.ô%ê“÷Ž°Y*¢¾3Oý•bêQÿqÿ©/ÜûäØcÖ>¡þØúHýõ5•å%øûÓSc£Âƒý©Hím,ÌõµàÄ«N@*J&U“(õÉœQã44ÉB5¥óŽ¥õ +-[Ÿ¼63'öi™ËÆæ³Ú/Sìã`~÷ü­l¿Ö)Tö2ØÇÊö}[ûã~ÏÔ–`Ÿ»£¤ØïóI©/ }èýL¡÷R–úÎn:qôPÃÞꊲ’¢MÖg¦¥I"Âü–,ôöòœîæâhgmABbŸ¡ÿ®úÜ“G} &ìHõÍ{¥þ±“§ZÎ ¨ÿõ·yN¨Oúç—>²éL6!õ¡pí3"m=ÛÜxü0üÿ]¥Û¶`4%ů\èëC@êhgeN’i¼&¥þÈáj¬G‰R_%åå«;X0îêüFbië@k»4 4bEÜêÔŒì<øUµûö¹Ò>~ú'Äþ€ý¾÷iÿ±_D°¿Zûö™â +-°ÏVWŠý^Ÿ”úÂÔŒ¼¸1qæŸt1i;ßr +-†~=ùÄÍù9Ü'úCoΙéÁ„þg“¡;%ОÌ1J¦ÿ})ô8jŽÕ%¹7ž@£bêÿ÷¸(õq܇ eÊËìT<¤¦@u]Ý=½æ-ò ¥+•æîZZÜÖ¶Ž«×ouòØÿ+¿Qû®­x£¾PûûSì öa§ŽïýÁö•{Rê+J}Ú–¨‘ïqæ»9°Ô‡¾,ß¾uÓ†õ™i) ±ÑИè‘Ù3°3!ôIk +-C„ú}<ÔÿPm؈‘£ØX’¥~Oý­2Ô¿ÁPÿÏr¨ÿ¯þRŸ¬} þÕŽ¶ógN4¤®¾‘±)t¤£+¥~Æ’ˆú‡‹¨/È¥Rÿå áÚ¿| €Õha48,ý¨p&–Üœím,Ìú˜TÂ?/ +-%UfRì“N¶ê8 Mm]À¾)xOºTa2“×f®Ïß²^RǛ϶¶w|yã–h§¾‚ªduåÍWØ ôìã)Ø73™$ƾš„ýþ<)õ{¤¾ü™úˆJODý’"¤ÁHxXoþœ™n.ŽvVØ—ÀlL˜ü1úÃÙÐ"…¾ü'úØbêkõõТ–hQB}?L%õ=ÁRŸ¥o¡y^Ê£~ïå=A,]íhomêjØË`tÝÚ¤ø•‘a¾>ó¼<Ý]áEuÆkr¡ÄRt(õUVc¦Ä‚c +-^n©OÇìO±´upa·jDtÜê5Ùy›Š°¾û ¾MgΓѼsïÁ£§ÝXÞPÞžØW|I‘òþü“rØOKN ØTÑ[ÊJÂþÛ=)õ©/”žÌÌ?{ÒÅK¯‰¡>~_P/,ä‡Ö›1ÍÕÉ0m Ú¯©Á…>zäwRè+~ï{›Q QhDZ"¢¾»'„ÒRBýÄ”tJý +-BýFžúF}!Fe¨©„ pä@} n}°húšÄ¸èð % ¾‹ƒ%¥(œy4“àÈ“I*-²èšRCìã1¥¡¥M*lam#ku±_в¨˜„ä4¶Àu0š€ý íÌVÅÙ„úR줾JaÁ¾¨J€}v¯’kêCö¥ØïõI©ßkê³=Ù =yH¯­µ¥™¡>ô䦼ìu©Iñ1Ë)E¼<§Ou¶·±‹écWBèc[~„¡O9†þ{RèË<ê“Dúþ”ú$’4µuô '6ÅÒÆÁÙÍcÖÜ‹ õãêÿÂZôûçßÁÚÜEBér{ëYl€†½Õ¥Å[òs2ñÔ[¾,ÈÉ$;ksSc#}]müùcÔG)¤¾j~¹(õÉ9…‹•N<`¯),±•­£+`Þ¢¥¡‘ÜÌïØYU»ï౓§Î°kõácŠ}ÙËO}·ƒý.1ö¨« ÂûáBì››NÆk}Êb}¶ÈRì+|Rê‹SŸö$#‘åJúù9HKIŒŽ`$‚ÖÞ4FŠ@S¢EÔ¥ÐWæõ þ`õ!‘° õ­íœ€ú^IДú¹ õ÷ê·ŒúÿVLÑî§Þ»só:Í$lèïí[aëg¤®Ž[°t‰$[Øù¢ä熿žs¨Š©/L}1ö™ÍJFÞÈÄÌÂÆžY¬þÁáQ± Xâ‚Â’²Ê=uŽ|N÷굯nß}Àc_¶Â +-ÖªòدßC¯),1`?ŒÅ>º +-±¯‡¬"Æaˆ„}ež”ú²©O!‚-ÉIïôøó³œP?#5 ¿.Èoñ˜zwW°ÞŸ†zº4ôÇJ¡¯Ü“G}–¡Š©Ïõ 4äΪš}@ý&Jý¯n¿-õÿ)–èýÎÛЗ.œen½Š²âBhï´€è²`øÿsI"Áï'Ô×Ò Å@âªzê Ëü7ñüj…"ëB‘MaæÉfõñ ‹\¹ +-kœ³¹»¶á`k,ÖNľÜûxìŸBìïݽ«”b?%!6*<„Á¾«£½§&Àˆ}<V+P –°ß÷“RŸ}aêÓŽ‡üÀ:¥wõ‹¶ó-\CoÙÈR?¨7Ï §ÞÁ¬‡çç€Î=iI)ôûzŠ¨¯ÆS<2ÔØÌB@ýЈè¸Ä5”úeÕu,õ;ê?í?õ·ßÝ2 €·ÞÎ[7oX¿¶þŠÈÐ@üÿžî®Ž¶Vðû ‘¡”ú|ñq¤Ò.\®\™éÈ«eª<ÉÄ V« ¬Vï…KüCÂážZ“ž•WPTR^YSO±ñÒ‚ýçÔk%±ÿZö9ZÕ×T–o§´‚‰ "Ø÷p#Cf‚UÖ¦3°bGŒ]®ªÞ®ÿÓOJ}>õßÈK}hÈo¾îfréâ¹ÓM'ŽB?V•oߺiC6 }üÊåaHý¹³<¦¹0 1˜¨CCÌhz~bG•B_ñ4¢êk…õmI!õ¡mb˜¶ÙºcgUí[Sÿú?ýøêï<õIõÏfn½²’‚ܬtÜúáÁþKðÿ»9ÛÛà¥g0ÊÇ‘Ü4Ri¡9ì³uÆåÊ•YßÈØÔ܇~æœù>~AaPåäµ™9ù[¶•Âp6:ÞØÜÒÚÞñå[÷9ìãx¾=öïÜb¿š³UTlµÐw«“5Á>–™[®jö•}RêËI}–z0ô/Ù¡¿÷6£Æã‡÷×UW”âÇ¥$ƱÔ÷tŸêD§ÞPOW›éG}F{Rè÷òYÄPmÅa#FŽ"Ô×djamÝH¨±©Ÿ•[€Ôß#Cý‡¿õÉ­× Ôïhkån½Û6ç¯Ï\K·>(”Æ,ýɆúºˆPò÷Q_u]”ú¤Ðìveꬣgðöëü«ªëŠø¢Ž¿8€¨5®*âã<2 PA£V­¢â"E•ùùxðx>@æAPÁ©ÑU# +-(8Äã,6©Õ®VÓµÒ´]«{Ÿsîô£@÷‡{þƒ»ïÞßýÙãér3oáo¼¨6oÙ£JÒ¥gå•”ÆÝZ…ÓyãÖ)ößtö/Rì ¸ŠpE±?YŠý¾&°ß¹ûU¾OI}ó©OòòÅóoŸ=¥íC_K†þHEi1ú0ôaðm<õìBlm ôi;í QBßøYˆû‘£~lE4èP4èXlF'WL£ÅË|Öúo!MÖK¨¹©ùÆ­/¿nõâ¨O·¾äÖ£q´¿(/+M§QÅЭïã½dá¼9îF„ú#mqçèOÈÿ÷2 ¾8õ¥Ø·ä°?±ÛÕ °OOª°È¨øDmjFná¾2²\/ÔÔ56ì“2?!Áþ»ìVcì·Rìßl¹ÒÀcbŸè*\ÐbÆÔ‰ãলåpÅaŸß¯2X°r}JêKRû‘›zlGJ½Ö'ïß%ÝCþ´dè·oÙ¼1À—§¾Rÿ#Þ ôôìÅݞݕÐ7ý,LDOýŒ ”úŽ$Œ-]±Ú7 ˜©ŸÇQÿBRŸl}1B¯6ÖUã­i´·0'C¯UÇGáÖ÷[³bé¢ù^³ ŒÈÒ‡KÔÊ’e'PTTë®üÌã~µ°ëu¬WOvS cÏmתÚÏ;wïAq¹Š°ÿ^Ëõ°_ŒØ'¼ +-åy5ÛÝÅɱ/Tu%`_ZkeÆ ž’ú©/FíFzÍMõ58ô:D ¢MŒŠ ò_ë½8Rò˜úÃ8‚XJB¿›ú¦žõ{H£èƒß ¥ÂQ‰7P?ˆ©ŸSP\ÚÑÔ#¥þ >lýªó§O;BÃH—¤Š%[J¨ïêd‡YôáHré dÔ§QÄ'Q§ÿwƒ ÛCzkzUà÷ëì¹ ûXéðÈè„Ä”TX¯ûq½ž:w¡¦žÃþã§Ï¾ã±ÿîÛõíد氿'735E“@Ž*æ+/ÞW£¹RÓIƒR VÅ–åSRß|êóSÿôñžz¤+J‹ ²wƒ@bwD„ú­fÔµ¢¡@z*¡oþ™¢>†>ŸDCl†@ÇOšf'¢~ ¨J£KËbYdDý¿þíý©/ £—/žûìé£(ü7üÿéÒç©ßKLý.O}Cìwaß6,ÖzÔ˜±¦àØì“R‡Fðã ûõøÉ3•ˆ}¾Òû¯Ú}Vé¦úKˆýcû0jê8¸ª Ô,¶`íéY…Àúà·°a­xì÷Mš2f&ž’úoM}$N=ž_ܼ!ÔƒV,ÊÏJÓ1€¬_·Ê;уt¢˜ú؉8öâ»S }£gú؆$ˆz3êFê&Ôw˜éêáI©¿ž4^­ÕgÐ(BêWõ[(õ9¾õÿóó¿ÅK³¨õÉÃ{w™@)õ+ ·³Ów%íŒÝ±9˜Ôÿ?¥þp›!Üï—õÅØç«ÍV,-¶íH‚};GwÀ>­õ¦ðmÑ šX°0÷‡?ýó)˜Ïú¦æë¬ÔRÿ½c°¥¾F±Ïl^fZŠFgÔš ËÍÙÑ…õ¡XXüa…;¶«xÔ:µÞ²{Jê§>{j=*ûЊ7Zš.€|zè€1õÌÍ5"¡þàAÒF¤sÏ:ñ7Jè‹ž…¸ ± ©? ©?a2PßÅ ‚¨¿Æø3V•¤K'ID©_S×xõÚç·y€¶úðûyê÷Œ;õõÏ‚$:°’[;:2<$ýÉþ?=õ(?Ùïþ¾L¨/N}1ö{÷±´âª=Š­ØÙ]åHæS¬'Ø?x±/œU(öß}Áþ×ûtÔžŠ±ÏoØœÝúd56,6#ÖLŠýÑb‘aë©`ÿíOI}>õÿ'Mý7|ê£õ¾þòÖ èÄš gÁËöædè“wÆíˆ ~ê}<Ó?:Q"ë ü袄¾á³0‘B¤ 1†ˆ>ml¡ÇMœ:rÈÃó“ßÿaùªu”Ÿñ‰ÚÔŒœB >ÑùªZFý{<õÿÙfê¿â©ŸógU噓ÇT”î… Ú%úÿKéÿÇSoì˜QÃQŸXó1Dÿ¾èß˦à]ù©aßÆ–íX'÷9ä°‚Áß´e[ŒJ£#Ø/gØ¿ÜÔÌ›aÿu°ÿ/SØ¿ÚPWM† ‰•—•¦Ó¨ÈaèG°;ÖÅÑŽ]VÃLa¿›‚}³O©¿zÝz9¦>{Ú‰ú`½ºjœú£¥ÅÙé»’ðèÜ´qýºUDî.N\ÂÔ©·ìc؆Jè=ƒÐ‡&d)Ô§¯U¿þˆÏ¡ˆOŒ!{ˆ! þâe+×ø‘Žá[‘æGý¯8~¶“ú$ˆúä÷#?ñÔ;|`äPŠ&!z[ø¦ õDŸsáÿó§Ã'K!ÁžrÉ ƒ5Ûƒ=‡}˜{‚ýÎnû¤Üa[£âÔZ=îØ2ÀþggöiµŸµûŠýAŠ}B¬Ë—ª(öqÇfèµêx¸¬ Ü0n²fL8N+[Ro:o0nš•MÅåõ”Ô7‘ú? ©Ï=^ÈÊ3Їå%EùÜÔã͹rÙâù^³Ýœ± ¥'' ýJè›{y2êzr!4ì9ú£ñ“€úÎЈ„ú¾ˆÏè„Ä”ÔÌ\C'ÏTõ¯´ˆõÙvêó9ÔúäÑ}^Ÿdé$Ô×'«ãvl ý#ç×,þÔãì‰!$¡~yPß,öÉšcßÞÉÕ°§UÀÆÍ[¶Ç¨’téYùE%å‡8}±OËýðqkÛ±OvìkûÜeuµ‘Ç>.Ùt]ÒÎX8­ Þk`ÞÌ Ê²GeaÁ‡BÁÍœ2n†O©ï½²ÓS_2ù4õ¥>òãöÍkWjQh½=y™©ÚÄø¨­atê©=ì§Oá¨ÏM=Ò£§dì•Ð—>cê÷$Ô›Ï ŽžÓ!„Ü!„/óYëö¤ “_\B©±¦¾±ùºˆú/ÛAý×õñÒ#ø¤Ô/'Ô×iT1ÛLžzŒž¢ ’õ¥Øï&`æžÃ>]³ŽÎnì¶òߟ¨MÍÈ-ÜWv&ô,9­°Þß¼?öÍ-Y‚}¬w Ãþñ£€ýBHm"¹­6¬[µ°kÖ°O+ñĉmWñÄuvÍeô”Ô7•ú¤aîIêC}´\ac¨l_an±^Dhp€/4!7õ¬ÍQ_ }£g!î@lAžú\ ±ò?išdÐ,¯ù‹–®XíŒôLФ¤eæîÙǨ_]Û`LýïÛ™BH}Üù„úg?ê—aéµê8\úžH}7Ì ¤þ"ÏÖý¸¥¿_VÔ—Ž½p^ᢵ†E‹%…؇ÉwõðdÇU0Ž¾ŠŒ~qIÅÄ~Õ%î¶â°ßž-û#ì×\8ËÖl~vú®¤p\AÅý×öqâ\ìéu%çGŽžW=ì¿åuJê{É9õ¥>jÎý/>.žƒ“ƾ g74aìö-›Áz>Þxpº9;‚<$Sßàaº•dÏ€ú$€Hö±$ Ô·….Dê;`Í[¸Ä¨„òŒS'ëwg õê_bÔçéÙ!Ôx£çE ç±Ãå%EùYéº$U þ~*ÏyžA”úpêR¿»tçwvÑ%_±M+Ô°oçè°%ŒŽOLIÅ={àWÂ>"‹W ¬ÚªÊ3'éžÍÍLMÑ$Àu%÷]½b)]´Ž-VsÑÌ™‘Vg]>¯ÓS1M}˜b9¦>ÕâãÖæ¦z°b¯´¸ ›Œ=œA(lA¸7)<° „s“sN½Ò€¦ŸAèC2ê;ûõGêFÝ9%Rß/ÂS£KËÌꓪ¬®kÀ†¹#ȳc¨ÿÍW·?¿Nå ;Ÿ^z©ÚÄø¨È° þ@}aéé‡î”,}qþÈæï›Øµû°jÉ}Eƒ›FŸ`ΫÀàЈ8ûdÑ2ì×"öÅ%oãžý‘aJÞJ¯+,y}ÍÅsû%ÅùÙ»w%Ãy5‡‘óñ^²7íL2sPt[‚}k+z`‰v­B-ã÷맾¦m©ª³Sÿ.õáä$öhnÄÔ?yüHô`VšN“cï·àñ v ýtb=Ö€"v(Ǧ¹g!î?Qüôbù3hðÛ‘„3  1€–¯‚vÙ„îTkõ9Å¥4€úM”úxê¿zýý›vQÿÿì—÷W”gÇ—³Ù ?X6×ãIVE&#J¯¢Ò‹ ÒËÒ,(QŠ +-(E° ¢(]"8 % ݸ«±EÍÆ’dcâñ$?ï½Ïó¼ïÌ;3º"#óæîŸpËçû¹9Õÿ²[ÖŽªO¦_]Q¾¡hU^VZ²T‚ªÏÆoã'¡ÿ¾rè Ưí¦c©Ê>m;'û¬ëµ®nžä¿Â¦ç¬-.%IËÉ>÷^ݹ÷€Êþ³7—}¸7ú^q²ßÓÙÁd¿qGíV89ø¯ é ±(ûµN ûpt ZÓ§ì >¬Ñ³{i‰ƒúQRÿõ/ôvá9ؼwgÝÖ-¥ {Ù+RpéÙÛ÷‰®§Ï¹±ŽÑ_óU¥ªúºL:Qõ?°ƒ`æ`öÎÀ߀¥aQ±‰)T;Ë*¶ÕÁRê÷‚êß|»ªÿ ^Ø59ËɧÀø3—¿bèëêŠQõUdÿ]vù*²YëáC¬”tv£Õ4jŸ¦²/húðd_Ðô¾‹2}µõ5•›JÖc×S—ÅÇЬ]èâhK?,p-[þÅâÒvôîÔÖHR?’RߨØwê{ÿ?ê~õµ¶©Ou¿¨¶×Ò¼gGÝÖÍ%ðnf§''€ìÁ·éæJÏÞÔhÆtº~réPy5µ=tÑ”*ôœ“ÒGÏÀÐÄ TßÚÎq>àU_"MJÍDë,Ù\UÓ°›©~»¬»oàʵë +-Úù†ªÏÄ«þ¿þ‰ªßÉ«~}ueù†u«ò³pú,ó]l--fˆÒÉÆÿž˜U_xø +-?Ÿ¶ û&fæsæYÛƒì{¡ìÃñƒì®ý˜È>díác'Ï*Éþ“4!û¬ë_ ~‰'G³nn[E|XÐvP­(¶n®Îö6´ï3¦³´Å mKÝቤ÷Z¯‘£~|LdXð“úw¨îõÃ?ÜX[Þ±:¾MiLDp Êž£={½©lûÐ9FUÿ¥£@ýwxöpÊÉà3Ø8§ƒóJŸè¸Ä¶,d ›[Õ¿ÐÕKUÿöÝûSý÷èìz/*©þÚ‚\”Îèðà@? |zsfÍ4çäáÃ…¾UÿO‚ÖÿEQöiÜÒk¶…•­#“ý(&ûë7nÂ#Ý÷é¡ÏŽŸnkïìádÚþø©†dŸµ½¯[ÆÂvßî I í{’T‚²ïã±ÎeËÌÄ‹[}®ó\ëÅÖ{­×HS?àKýAJýc‡áð€ú×­ÊËJKŠ Gëê£ì™ÉÏ?ÍQÕe½Tõ©qöQå´sš¿Èá)‘&§eæQç¬mhlÚô9×ÞÙÝw Tÿ® ¯ú úÃQý› TõOúÕ߸nu~6:gdhÐb€¨¾§œ¼êåÐ#Êñ {¯"ûôÉ‚ÎÛØ;SÙ@ÙÏDÙ/Û² e¿eÿ¼@ö Köñâ}ìïíâÒvÏÎíÕðcAãW¤$Æ‘¸õr[àì@d¦ñ zx¬õü›5*\jJƒÔ—ÉÔS¿h(Ôß$6ê?úÏB}|7áòOk=ÐÔØPSI¨Ÿ‰¶¿&¹{Ë9æH}ø4‰rŒ§ìz£›'(ÅåÃíãȃûG„sªž¾¡ñÌY͵²upYàîíˆ;»’³’(guý®½Í<|ú¯ +-UœóÅo¿kJõÏâìáÏ«ÛºU•"Ÿ°‡ª¾¹™ZÕÿ«püÚî:Wje_¡÷äø±õvŽóQö—†EÅ⓵’—}·m ûòk8²ÿâ94þ'yã¯_»r©ãöÔñÏíoÚÝ€OJdfZ²TBòlËÉŽ´ÞÔÈ`ú´)ï³ÞÓÓSc\¢i¿VkÄ©ïïK¨Ô÷õW >¿O"¥~·ì<¹|Ø¿šÊò E…¹@ý¸¨0Ø>wtX>T¹ì)StïKGIõ ôÉúq¾9ÐÈôÃÙ–D8=}= Éé°ƒEÔ8™êöÕ¿…ªÿ艆U¿í4°U=Sý(¦úŽ¶VsAõ9Õ—zâ¿zÙÇæOT”}ìýw/ÿ%!1Ò$ü²hëwÊe¿oàòµëš•ýûwo3Ù§y{¸x²¿¬õ«Wæ¬X¾,>&"d‰¿·;íýG³fCâN•7Œ û"l¿6ëmRŸ…sÑ*¤þ²x G}/‚}/µÔo5õ¶‚uÔWSêg,êÃá{õÁöp÷¸»§²GotïÔ•ô™m‚ê—«>‚|Óšø¦7!O|RjFNÁšâ’MU5õ»ö}zðÈç¸+{._ýúß7oß»ÿð{uÆ9Õ¦ªúç zT?U?‚ª¾³½ U}½©¨úUTÿÏbS}5²¯«Ë=ZŸ4"W_.û‹hâÆÙ_³{ßð–dŸµþÛ;·n ìCàvÀÝßÔˆ½/c<Ä [àëIšoi‘kÂ5…vŒ 2—o¿â«%¢h¯F„úùYéË)õƒõ©ì{xê‡EI¤b§> +-Gý}@ýŠ2¼üŒå‰¨{þ”ús)õA8È› ¾¡pö£[§T:Š«‡»ÇdTÿ½ '¡êë!wˆê;8/póò ð¤gçà +-–Uß<ÐzôÄ™¶Ž.P} Ï[wqYT„sèªÿTA8åäÑSÕ_™½"%Áƒª?ßÑΊ Ú¹mŠ[õ•SW.ûØ~ÌÜéF û´ûî$r%¼ì“æ7SÙ—iPö%²ÿzïöM–¸xvŸ9Hþ¬ªM%Åk +-r3R“¤Döi÷­YæâíM&ÇÇBWWUöE4­•&¨¶Q_Ô?/¤þBýl|É$Qê©N©ŸC¨_5dêúC þ‰£‡xêÀ§™ +-¦›«“P„7|ƒÜ=•=Ñž½VKGtÈòÿÛØ>€þ4ÀŽ©™ùœyÖvN`›>‹ƒB# wr ×—n®ªÝDÕ?u®]ÖÝGTÿPýï@õ|‰o¾¶êÿð„©þuOŸ\õwÖmCÝ,ÌËLcÜñÂÄ·±äTÿLõlj]õ…·Ï?“}Ò&û´ýLöñN9ÙoÒ ìóÍÿ›O®eή§«£í̉£­H÷+Ê7¬[™ŽŸ´ßÁe¦±¡>¼Z˜ºHêrP¾¶Û.‚9êK%Qá!Aþ¾>@}À¾PßÇ×?R?)5CúZ‰™ú»xê§Pê{Qêã› ‡ÿÁ«¨¯í‹¥” «Ç 3–º¦ž¾¡ RÇÊÖÑeU?žÓƒòJØÀ½h›'Î|q¡«·ŸpTÿ!§úÏ•tshªÿX½ê7 m2ÕÕðõ\$W}ýiS>˜<‰Œè3_0~c²oJ_-^ö“Eøim×´ìÿþÛ ÚýŸ>þþ;ýoˆì÷uËÚÏ"²D©Ú\Z¼¶073-Y*‰ Z ýwu²'²oj„¿¹>Œ]o{£ÔWS:Š‹‡›Ç›&2‡WM +-{gW7êš± ÉéYy…E—nÙZ»£‘Êæ¹öÎî¾KW®]¿A°CUÿ—_Ÿ¿x-Û|Õ—QÕoV£úÞèš6– úäÏ£ªù2Õ×ø…3àGÀ?[»J²·ŒÉþfEÙïêéלì?£²ÿðÛ»·Hèö÷v]øâ éÿ^¸¼Êòº9@”x6€….Ž¶$vé³…€ÜÏr÷]Ù×´Q¦þBý“ŠÔß@©Ÿ$§¾7ž§—7RiHx4¥~¡~-G}¸eÑRO}‰ +-õÑ6& +-©/ß9mÏ[$¥£¤ú„8ˆœq9“qù ŒLÌÌç̳¶sœ¿ÐÃUöÛ“Êšú]{™k^¸ª•£ÈæOjT_l¾¡ê¯AèÈUß<^õ¹?O9òŘù +-Cx畲oËÉ~¤PöÉN WöUûÏdS÷Ú•K}ÝíçÈšwÔQ‘ÌËJã"€ã#¹ ×# çGƒw,Ÿ¼bŽ^m”f¨ž§~‡*õ×!õS“¤±Ñá¡KåÔ÷êû"õC#¢cè5ƒBpÔƒëá¨!nêÃé[ÁÞ™âÚ uOp÷Úž·HJ úpÆգġ¢9ÛŠ ÇË/08<:.1%=;ö˜S·cÏ'ZžÕ„E!ª ü€¨þ‡£ú?ÃÔ_®ú 1¨úÉR S}†ê•{¦ˆy£&z•eßd‚×É•È~8ÊþÿØ/ó§*Ï+Ž—´ì4nh34¸aQR"… A"Ü}ƒ \/—Ë.‹‚ +-.H ŠWD\ "»l""â‚R§ŽV((b:1NƦuj3ãtÚsž÷}ïÎ*Ëeæ>ÀûÃû=çóýõ¦¢ìWÕ6Ž‰ì3àÚ½ ²ÏÔnGûõVL ¢d?{wwêÖä@ʺ ‰€ãçCŠ÷³O©s‹n^‹YTÌÁ¥Ù½ÆÄ¿ñ£~±ŠúpADJyˆT"äsÙþ@}ò€úl.©ªŒZŸ˜LÏRþÉ¢’rc§~¶ŠúR1åëåá†Ô_ªI}Ti&êzfšc‡sÇð†h&ÌžõT}ç•„8„ˆfbrJÚîL‚œÂâÒŠšú&Ê4ïu>ìîí#Õ×dŽZõÏh«~ˆŽêDy&ŽZ3Xõ“}ªzI´ì¯¦e_©#ûêÆDö_½¤zd¯§ eŸDÐX[UVRDŠ7 ˜&‰Šx,Ò¼.NLTõÂÁŤ`®'ûFÄ¿±¥þU ~s“ŠúùD(êG©©ïGaßw­R_$‘Êhêã:çÒÔ¯§¨oJPvßÍE›úd樑3Q_çiBŸ‘LBý”e¢ê/´úÈv©½ƒ£“‹ ©LŸ´eû®Œ¬¿³çÊA4›A4o£hvõ<~ò O©>œÑ©þw¨þQ¢úÛ6mÐR}—AUÿÆ«úº'—žìãÁe‹Õûû•ã,ûo Ê~_o÷ÃN:ƒ¦úšŠRJ%÷e¦§‘{K)Ù‡êõþÂ}%upÙ,^DdŸŽAU¾:ØŸì?Éo<¨ßXWSUÔ?‰ÔÏÊ Ô‡„BeÒPŸÔìûõYl®@$ WI\î‘üSEçhêwLAêÏ·ü€¡¾Ý›ì¼á™éÀ†qÌ÷pð,P270zh™Î®îžÞ¾,®0 X®ŒŽCÍLÿ*Ý€Sy¡¡©åê ôLœ“¾þ¿} ƒBçÕ¿_ê_ÓTý}´êG0ªÿ¨þgƒ«þÏUõµ×_SögéȾ#û”ý¸ › ûZÍ;ì ´š÷ù3ýÇ=]B„ÐÜX‹Õ{ºàèÁœ½˜BBl„BFº×gµ‡ÄðéÇKm¡|aéHû2Ah]FÅD¾ñ¡þ…ªòÒâ34õw¥nM†^•ˆ< eß¡ïÏâðb ¾"÷9%-=3›¦~‘S¿‰ú£~zÐgs㘖„6D2W|îáåãÇnÂ"c’Ñ2÷þñP^𦼺îâåÖkíŒfÂœ<{þ=Ê«~}¾êé¨þâ…ó‰êÏ™:ª?¨ìÏ¥dßJ-ûÞkXl‰á }qu´_o½|±®º¢´¸ðDž\»Ó*‘оÇá ²¿l‰ÍbXAHvûW… ûê7:êgdå Dý ~=RZù8cOÊ&¨åźà@±Ïe£ì¯Eè³Ø\¾PÔ‹À…Þ¶cCý +-šú6NêçiP?¨ïk¢þ°Ÿ™žê›«T¶ TÁ"Š5ËWºƒbús…ÁreÔúDrîË=|ìDaq©š6pv÷öõÕAnBnµL7†U¿SKõOkª¾’VýÕT–¾ê¿c´œ@ög–}_ƒ²ž–ýÛjÙÆÈþ«!ËW[ö©ÍSÉ>äÐÓ…²Ï´oYIÜ\A&wnß²1>&B!“ÒI¸­prt°_jkmµv.`’…öß1æ +-ž°÷vÔ/Aê7 õúmm:Ô?¥Iý˜ˆ0yˆT""²ïïÏU_ ’HCäa‘±Hý{¾Úõ,îZ;PÿAê¿1&êó õW˜¨?¬§ýwUПe1Ic9¡•õ‚šn`˜l¾X*SDÄ&$mIÝ•±f¯³¼º¶±™MWÏ£'jǤæd8´aTÿ5­úA;¦†ê7\¨\õ?ÆÜÌCÕŸ;µTßìSaвo9LÙ¿8”ì¨}qõ蛫¯·[U¿Mõ5˜ÄÉc‡s³3Ów V¢”òàˆÂ×ÛÓÝÕ +-ØÞγ`˜C+ cŽcbÞ˜R¿PÿRc}muÅù¯¡”ñƒx¶m†VŽTõ€ú(ûþ}P}ž@$ UFáFo‡ïîÇ»@¨cÔïÿæÛñ¥þÿ†¤~'©_WUö5ܘjêË õ½¿øœ¡þËßš¨?ð3Ó m—´^ÂÔh>$~igïàèäâºÊóKJ0Cã5Ô9˜†Yy¡¡©åê dMçÿ¢êÔ0ŠÉÀæÍp`óÓàª_Wm@õ%Œê;é«þ{¿"œ™ª¯/ûæŒìÏ‘ìú¶Ñ²O,:º(Ù=’ú%I¼T'ýÛ…ýÛqóZks#EAÞ!°É]©[“b#à ÇÏÇ˃jàeKlƒzAÃΞ9ƒî`&u i ñƘúW¯´\¾t‘P¿¤Ó¡©Ÿ”¥ •Š…|}pŸÅÕç ÅÁ2ExÔúDâqðݼ‚ÂbÜh£¡þ7ºÔ?£AýpõGôÌôTß\m—`— ú Qz¹Ü@ãµÆŸø%L^bòÖ4$Í¡¼… Õu/·Â=¨…MÃüiÃÄ´5 s˜ªï­V}+µêϘJª?¨ìÿz¸²_ŽYÙ¿×iPö‡ŠBOöüÇ/¾ìƒìÃö=¸÷έm-˜EYIÑ©ü#ØÀ;·£M†C"©`7'Gû¥¶ÖV ç[~qÌÁ8¦CT&ìÓïm©_YC¨…¡~+R¿¡¶ºò| t2žb˜Î–¤ÄõQáŠuÁR‰HÀçrØÀ}6›Ãå Dið:EDt¬tê®?ìÍÁ•«mln½Þþ§»“Nýï4¨ß¦Gý >XE}ÇO–™¨?øÓ‡¾Š23gYÌA¹ÌXYSv¹ÂÍcµÏZ6_,•^Æ«®Aœ¼2Æ/ïàŒ¨HcHõ ¦ÕW f¿Zõ[iÕ?eXõÝ(Õ·ÑQ}ü”P}-Ù×lááËþ êî2(ûÿNÿ5xvÁòÑ ÜK¸£诩(-.$œ™ž–² ¸¢”@ûz{º»:/ÿÝ'öv6°…ó˜ dº*“ìSo,¨ßÔ¬Eýæ&ŠúPÉx‰a8)›6ÄÇD*CeA‘Ïã÷¹\_(’ËB•‘±ñ7ãNïË=œò ˆu1‚Çý¥»gú‡I£þã¤~P¿‰¦þ¡õƒ S6:†‰úÚOúZf9}&ŒÜÜ÷ª¿€†ÌrgpK¯5þ„2a‘±x î&Ç`…ð‚k7;Ð.»z=yªæÌ¿pHF úÿQ©þ Zõ{)ÕoêÿŸýòþŠòÌâøš-¿yàXˆTÀˆŠ‡•H0èâ!¬²Áh,T‡‘ŽôŽôRTT RDDÀ¡ ˆcAQE@Ac6Çh5k’]w={ïó¼SGDQ2Ïðþð~ïý|?w.¨åÌ÷PõÇYö/ŽEö¥^b<²O//~3¯ŽCJ8;3 }2"$À×ÃÅZØÔp#ˆ¦†úÒŪ 0èáé _ÂHdØgÞøPŸG¨ßB¨ÏãÖÕœ¬,/-.„l ’ã¢Ãƒ|½Üœì¬-@öM û††FƦf,¶¥µƒ³»×ŽÀÐÈ»’÷¥eÂg‰:4óú’Ô§Þð©ÿŒ¡>`€PÿR¿K@}ΉҢ¼ì õm-¶oZÔÿLHýÙ +-Œô‰œOFý?ø2E úB± fî|åªÀ ÍÏV­Ö[k°~“‘!ãé‹nI¤)Ã;…rõú‘;÷þIfD3cWý.P}”KU}¸Z Q}ÓWP}Aîï:_^Köw¡ìçHÊ~/#û„²ÿë(d_X©ì3y´µžmiâb ÎJ'„ûyC ÛX°àø÷ÒÕÑÖZ¾L]mÑB¥yŠPÄ3 ˆi&bØÿà÷Žýq¤~K Á>[_ÃAêÉC‚lâc"Bwx»»8ÚÛ ì›™Á3661Ûj¾ÍÊÆÞÑÅL.>+œ!N¯™OÍ¡·ð.ŠLÐBý¿eêÀÔ]o¿$¤~¾õ)õ¿ Ô× Ô'˜.ÜõO:ôÉÀÉÉO#„Q$b©¦®¡¹b¥Žî0Ë-&, dŒ0½3.,.«àÈ´¶µ‹¹%Qý'/RæTÿ ¤=®ªÿ ­œèŸ?Ìg€ÙWAö@"TöyŒìwA ƒ/“ý—a_‡°…1û4[=7®_½|ñ<ÿTc}uUyIQ>$²wBlTh ö°ÛÌhó}=XC(bÌDe>èׇè_‚P„˜ö'úßOÌ{ êgå€s1ÔGÕGìƒì7Ô×rªN”;’ŸŒ‡XdhŸ‡«Óv[kK6`߸Ì7Eèƒêowr󄥋ŠK¤ŸÅ¥®Ãj»Òâð.Q¿¢ô(¡~bldˆ¿·PŸ…Ô_£û7õGxS†à…Z%ÕJ9¸ýæ)1^©¥ „Ñ_GÅÒÞÉÍË/H4GKË«j¸ÈPý®›·`B¨ZÂ9øŠªÿ_)ªÿ=ªþàí[7eŒ¸ê'Š©¾É$Rýeÿ£—ʾHĈ²‰Œ\Ãÿ¯a&‘G‚Dàøêíî¤=ÜÜ+lÉËÎH´€Pøx¸8àùe¸‘ibM õ¥‹U(ìÏœŽ©LËç²?~Ôo£~uUÅñcE¹‡ lä°`_O7g} 6 °OžÙVÛ‚¨¾»—o@ªÜÞéDå@`©Áä`‚n1Þ@¨ÿô­Pÿ·_ê?§þÙ–Æz†ú©{…Ô·do§¾²ŒúÒŸ8ô‡HåTU_”?V]B´rÕj½µë7™™[Ú:¸zú„F"aÒ2³óˆXâ-xŽALßÀI³|uÆH¨þPýnTýVP}.Q}Ë´I¬úÃ˾ÂH²Ÿ8Döù‚"¦Kû=Dòh4=,)ûäúìÇ"î¸ÒÖz¦¥‘[Cί\0Jlâð ?owg{ëm,Zź:ÚZË—©«-Z¨¢4O‘Ä2M°±Ð\dØõ¤P¿ ©ú4b¿‘Ç­«>Yq¼ähááìÌ´}{ šˆÀÞ(ûvÖ–lsà>¼­,s¶…¥ ¨¾«‡·_ nurJjÆ!ºÕõ-g[/M õqîõáÄÄ ©L¨_]QÈQßNDýO5Ô õeÔ—ò¦H(%uJ2nròÓ`ÞfÍQœ§ xQS×Ð\±RGw ðe‹ ËÂf»3¨Fp8‘‚ "à•Ü&˜¸;»nöݦªÿ&D(–8#ϤC_bIUý:TýBFõ£ÂÇ ú¼h£ì» d?í`N>‘}.È>YÚný;¯+ûx~= ²MÜsãÚÕËÎ1÷WI­â„ØÈP’ŠÛÌhó}= –±ŠÈþ,…ÐÆr´™:Oæ]Ïæ¼±S?]@ý†ú§á¡ìõk8•å¥Åp†üzÿÞ¤ø‘¡A~> ûŽö¶ûä!ô­mAõÝ<}ýƒÃ¢bÐårò‹JÊ«j¸ôZ$Ú&GvúñPÿ»©_ ¢¾»PßdóõÕ@üdÔ—öDÐ'FIÙBá"ã6C¡¯ÄÐEK¤RÅ‹½“ZeTl"¨ÆA:ä$Z VÐ?€Ð-©þH^)¦ú¿üò”ñÊûô°ëíî¼ÖÞ—]ÕJ—dêÛO>Õ›ìÛ¢ì†E1²_H0qÙ¿Kdÿ¡ìÿ6r(Ϙõ#Øü观ì{wðvßÍîN”}8Àj9eÅØÅ©)Éñ1!>.PƦ†™\45Ô—.›?WXÇS‡ö±ö'úçOÀ7ê·Pê·œjjl¨¯åT(;v$?'+’Ù@dß`›mnÎfo#Ðw@ÕßÇ"®unц†æÓç.ùé¸ó šîô¿†Rÿù›¤>øCýþÞn°?Jýʲb¤~JR\Th€RߨoÔ×J}yrUʨτ¨¿ý†ª>‘JTýªò’¢üœLTý˜ˆ`FõÍ&êZö¿ÚbBdß“ÊþɵYëä2:Ù—,cñ\n\k¿t´quåñcGò²!˜Ý ±‘¡¤Ží¬ØfFà_úzØÇ4‚}…ÉF†}òƃúõ H}>Ÿ`¿¹‰Ç­«9YY^z´0/ûà×û÷&íÚFdßÍÙ°o܇gemÐwtvóDÕŽMؽ‘¹ÊêzÞ©3çq­»{ûèôàR¿=ê?PîK¤~¥~Måñâ‚\õí‘ú_ Ký?˨?EÂ&©N’Y#ÐW˜ÐWRY¸H „RKТ¿Ž¥½“›²¦APÊ’ò*œþy„Ë¢úˆ¼H—ð"….Eªß/Uõ÷$ÆRÕw`T_R©þheÿ ¼Â ”ý`*û™4™n#ÊþìK#ý—aˆì?EÙÝ`}7»uÜP{’&“‘š’âïãá‚јn$…¼Šd³DYÎTA:ØÉâñ¼ï{mêWrúÍ õùDöêk9U'ÊŽÉÏÉJOMÙ²ïëåî +-Ø·GîÃæÛô]=¨êÇÄ'íî5NÈ\û5\kp2<ÿ<‘Ô¿( ~!R?9>:,Ðשo +-@êk}òW†ú³ð¨£þŸ„f1ÑyOÌAŸÈ$Å +-åŠÌê$‹êâ“«Vë­5@²€P:¸zú„DìÜ•œ’šJðöËó©Êô ãë—äCÂè5.¢QQ1L˜0Ee 1,QQQéíçÀ9ôÞË¡wE^¥w°7Alc[ëì¦ÌN4qsßÏó¾ç=Y3”çx¿\÷û»~e]SkÇùKWoôôõÞ{ðè £”ä>F —aUØBU¿½¥S}1U}'iÕß0•Tÿ+Ù|>)û;©ì[ ì{ú¡ì§KÉþyÒÇwîr²OÿÜÇZǘ þƒO?¼}| û¸«½¹áDS{òxzR\tx°¿—HÙ˜›A#ëéêhA8jª*ÊPÉË@öûð;JaŸ“ýIÐľϣ~n~K}€~{{;bŸÈ~eyIaþé“Y©‰qÑ!DöÎŽ€}+ ྙ©©0ßÂÊÚÖžç,¢ê“ÿ?ZP\^]×Hÿë[d)¢2¼–¡þ¾8õ¯Pê—æõ“b9ê@êoÛ¼qPÍÊŠ¿#£r†úRO*2T‘#X™O ¿l¹Òª5*ªjk×mج³]Oÿ¯3261'>éíŸÌQ‚7{û´ÐóàŒr”lùQ¢ú/‰Q´Ü¸zé<¨~UýãéTõ=….Dõ¦¢ê_öPöC"ʼn©™Òº†²…<œì¿e³Ñ¼yõ‚)ä>šM+ΰÒ¼SÙ™©‰±Qa¾žB>ÏÖÒì𽆻w‘t4Ô¡“ÁÁ—.Q ¥L°ùÐVRË“"¢ |@ýj¤>¨~;>”ýFýªŠÒ¢‚39ÙÇÒ’ãÅ‘DöEn|ľ•¥…9y–V6v}¾›»¨~x4 E°9e€ÿš¹0†¿KSÿ¿?õß2ÔÿRÿÑ`¡> $#/'+£¾ù‘{ €Ú@ý?"‰ûõgËýúCêO·û"o$èÏ™‹T‘™T\±R°¢®¡©µeÛÎ?ï6Ü\±²ãñE^~AaQì,­mä±É¾$›ïß0üàÞþ^²Ã:Zk«Ë±’³2RÄ!>nÎ6ÐÉû÷`<ÚדR^­„ù@+/˜ͦÍ`b¨_ßH¨ßÑÑA°²_]YV|6ïô‰ã)Œì{{ˆ\ùÎ<;[k+KxVÖ6¶v}‘§PX¤lŽý±šÛ».\¾ÞÓÛÿ5³ñ·&—óî PÿŸHýW/¾êßêwõ«ú§õC¼E|G þ^ýêðf Ij’„ú³áÒæô-^J\©²~“öÖ(“û™ZVàÞÉÌÌ&\!;°ûâUª“DõÉu€Oþk4>9Dõ¥ÀrÿîÀmV'ëªQõO‚êÇE‡ù¢êVŒÇ¡ú“#òOȾüb„•ý Œì€R¶w¸{3²Ÿ²ÏüºWȯK…íÅG*yäp>¨d’ÎÍk—/tµ77œ# ñ$ÅE‡û{‹ ”­ÍMH>zº:ØÊjª*kV)-§Ø§ ɱa1Ëd49Bš¨7Ô¯­oln!Ð'ØGÙ¯­©*/)ÌÏÍÉÎDÙ +- ðõö"öíûäÙÚÙ;ô]EÞ~Tõ3²rr ŠË«j[:èN`„ÎDæp¾õßpÔ¿ˆÔ//Êê'ÇEI¨¨¯‡Ôû›¡þ‡ƒ>ñHJ RˆI.¦,W•TU[»nãfízú{ŒŒMÌ­í]ݽýC"bâɽ—UÕ6´ Àdl‡ ¹ŽO«þp\ùc&›T¿÷&Ö;b¥²´0ï¨>‘IT};«£‡©ê#TÔ§”êZö #ûƦ6ÐʞΗ“R¦²? #û4žãßûntCŒv2q/Ï@_SÊõ5L>‰±Q¤•ù<;+³Ã÷îÞµ¬¥© )¯Ä^V_øÛù¿?’Ã>'û“*¥ zE}TýNxDöêÎUW”‚쟢²àë…¶ïâÄst°·ƒgïàÈsr¸ô}‚‰ê§;q*¯pÈL›£¾@W"½› ¦þOR77„úO=Jýì Žú&÷~«¯§»eÓz†úK/’¡þ/¦7õe /9$ +-ÚBy‚eU5õu´¶èS ÷•´ãñE^~AaQqIi8 K+kê›Úèmô àdeòB+³I‚•w+D&QõŸ?{úe²¨~Gk#]\K]¡âæâQO]Õ£ìëPÙØ¡ìC-‹@öáç-ed[¹ÿL±'Ïèo)sS ì«¿·çú•‹Ý-µÕå°År²2RÄ‘!>$!ÓCû±—wlÕÞ´#ÂbV„ŒÐà™ûý)§3öÇIýðhƽ8êwêì77Ö×ÖTr²ŸäØwðx~Vb}sw8øcS]ŽúýŸ¸›ûõ¯^¬äŸ&Ô ôqðlúû¾ý ¥¾Ú~ à¨ÿ«ê5ôçÌ%@è+Â¥QÔ547ioÛ±‹ ÅÌÒLÒÃ704Rœ’™sælIQI2)T†qɱª>º$ •›×.£ê׳ªŸ‚ªïï-“¢úJSGõ?!ûóed½DöM,l¨ìC/Ó1Fe¿›Öò]ZË/_q[L: áZ™ [™Ûb/q‹a-ß¾Ejƒ1VUV”½œìkÌÞÚ‹Ù@_2Ú¸n­6³Òr ª™bŸ¦$‹ýY“+¨ x㡾§4õË*kjšZZQõ»ººö‰ìWU”QÙOMŠG…‡ö½=Ü…®¾‹3y.|«ÐÝ“B?:6!9UÿlIyumcK;ù³ûúïÁÝ|ÔgmîÿAýÁþ^ ~7Р¨Ÿ-¡¾1Pÿ–ú«•ú_/@û£Ôÿåô¦þ‡ÐÇ##ÔŸ g6oÁ¯¡F*­¦@Ù¸yëöoô öì?d +-Dqv%"Ã\[qYU­Ä$aÞøxSFTÉ÷RЗ¨>Ç”Á¾žë3§úÇÒ’°Þ}‰Hš³ªO‡úY9õÛ€ú]]ÝÈýŽöÖæ¦Nö¥§$ÆÅDRì{zˆ„n®Ÿ/¸º EúáQâø¤´Løb~QieM}SkçyÖ$gÃÊÂ[–úïê¿c¨ÿØ–ÄHýK„ú@ý™õ-M÷‚õÿ¤¦J¨$±`A0­©?K–%&šP‰œ,WZµFEUm-òDW5òà¸5'ÈË/(,:.)í؉Óù…ä4ÚØÓ$")…”Ñ›ä[Ö$)/©êß½s›¨~gÄLT?+#%!&"Øß UßrXÕW˜*ª?jÙWQEÙ×feߪ÷XXT,†„²_ÒFç›ÑxdŸ[cP̯_>g2‚9vý +-4sKcmuyÉÙ39’824ЪÙÑ–¦´{×èfM ŒIyå +-Å¥KhNsçHaŸ“ýi‡ýÏ ~FVΰ¯Êš:¤>@¿b¿­µ¹±î\uEYñÙ¼Ó'³2Ó’(öü|€ûî"¡ÐÍM(¹ó}ü(ôãS3ŽŸ8ª/ës Ïž¿`®Fʾ0õo²Ô/)È%Ôòõpu²ê!õu´4¥©?†úøfÉ¢DŠ%r¸²…ò +-H“•Ê(‘šZ[¶íܵÛ-ÒÒÖÑEèé)NüûåýUå}ÇñÓ´ù¥=9ÒÄ&m%âÁ`±ÔÀ½QQ Ü{"*ÊÞ—qY¸LÙ C@@¦,™nD +-Úôä´® Ïicæéûóý>÷¹\‚ûòüÏ/ïÏ÷õ~½£ã’Ò2²ó +-KÊ«j9Pnt(<òþÃ/¾”ê÷)’¢êw3Õ€R\@åÕ—ú’êÛZíêúÉÊe\õ¹Dj %ÕœìO`²?ÝpÉþjsŠÉÒú½³‡ƒ,Š€”x5ãý¶Òë’ ûß"£ïfŽ}Ï2R4³¸Çº:Û[©šÏÖ©,+.ÈÅ Kˆ £nvq°³µÚ»sËƵæ«W/š?Û“LOWí¬¡>ê}`*FØGR¼Ÿ{cÿuðʾCý3µŒúçñûõu5Õ•å¥Å§òsOd¤%'öeÀ¾¯ÄËÜwvrdŸ“3˜ïá%ôƒCåQ±ñIø!©~yµð´Û:nu+\^¶ø°xÉÔü@ýûwÔo¾T +-Ô©¿Ñâ“•œúúûÔÓõßV—EŸ +-ôÛ újo3–úã4'NÒÕc9±±‰©ùÚ[wB"í\=}€“ÈØ„n‘•5ÜODüJ„þ·ýC¿Pþ ÿìN÷­Ž¶–kWSmµ°Èx9ûy»c’ÙXîÞ¾y½…Ùªå +-›l*êYG oØÿË{û<ªaýBýª3µõ úÄý³ õýŠÓ%Ey9Yé©À~4Ù~ ÔÏÇÜwsuaŸ«˜ïíã'%ÓŒ‰KLIÏÊáªU¸tåZk{'ž6Tá.Sq ªˆÂË >£>–å¿ANýó ~YQ^vzr¼’ú»·m´0[¹LA}m°`ô¿RŸOBŸ.ŒQnlä»@ 7H]½¿Oa4{Þ¢¥+V›YlLöÛ¶wv—ø…Fpšä•1‰¤Ëhëä8ùϽ¿d)ÜÆàxòXà Yä=²HÂÉ Rý³õ5•PýÜ,¨~´\àëåêhg»ª¿žTñü9FCTõ–ý‘TÐ*²¿I¡ž±É¬¥ ¨Ù‡·)_ð‹¬gL}uó1a‘á%R9ß麉·¨˜d%§x;G…‡ (7§£P=¯[ÃFÙÜYÔÏT샿*²zK½L•ŽþeÅõìßsR?ûdAq£>©þú€ýƆ:`¿¼¬¤°àdvfzjÇ~H tÜ÷ôðpÇçáá æûú) <3›µWýæë7:nvÝa7COûÑ«¦>˜  ~gf%§~~vz +-Q_*qw:b»Ô_ ê/õ§õ5E꫱-9œ©ß'ôEpôÇrœ:ÃpÖÜ…K–“AnÞ¾Û,qrc +-—”– ˜””W #—Ñ}ç š (‘?õ)‘Mþy»«ªÏ²¼„©~BldX¿ÄÝùè!bÉF…ê QÕÙŸú±V“ýÍèg6Ê|B()&ûel“ñ'Œ íÌsúæirbA}Mí|ŸÚ™…Çxálý™Ê²â‚“'ÒS(©`©§«ƒ­ÕÞ[•©‰1 +-z&L YikRCSXzçmµØ“cÿá†ýç¦þ©â²Šªšº†F‚þE|à>a¿¦º²¼¬¸0?7;óxjR<°/ +-”‚û‰··——··Dâãç/ –…É£bâ’Ó2Näæ–ˆªß¢:¶EQøîeQÿ§~©ßÕÙÖBÔ¯­"êg¤ÄÇÈCDêoZk¶ +-8Ûpº¾Þ¯ÔïñýF•"LöŽàÄ Mmæ3ç,X¼ÌÄtͺ[wî;pðˆ£«§48< +-—–~â$@bÉåæë­í71é2îã2”0!!”CŠ0yøàSÈnRHKŠòs³Ò’â¢å0HB‰Íþ=Û7+U*©>dW}µ!¢úO%ûhh.û[wí;€‚vB#cRÒ…27a”õHª/Ùp“)ë™'õùg4ÊÚZX?×UW”åçÐ*‹‰em؆fÙ 34ô¢y³±ËôõtuPÑê£ÞgÍ°ÿ‡ß÷ÌkØaÿ™¨ïÞ‹úÕ >©þÅKøÀýógëýŠÓ¥Å§òrOöŽÅDÉÈûR?_öùÁ!¡áô³ròØïHèð¶o(ß6ºž>'žËË¢þÔÇ¥ Ôo¬­:3ËHIPRÏv¢þòžÔ‡ªRÿÍaI}諸# ¯è¿Ë¡?Nsâ$]=ýi¤‹Œ $¶ptñ€$1ñÉ$Ee‚´ +-: ŒÀgg‰Ò ±æ%çPìå%§¸@‚$~ÞîNGØÇü‘T.©>ãÈØ1£‡˜ê$ûjÂ2cÝKö„åéÎfYN>eÅ Z¹ÊxTªýÜŸì³wÈúY_exŒ(è–«MÏ5ÔTñYÆZèçåætôµånVÑ«–/Á03œA­£…¸Ô©¤Y^#X^<°a‰ýg¥~pX£>ÇtM}ãYýË—/ƒû ûµgª€ý"ûq±Ð}p?àâ  óÃä‘ѱq‰Éié€~AQiy„Ž«~Ç­ž#>mU{UÔ¿zùQ¿ÔO%êøx8=hEÔ7Ç…õú¦)Ùƒú¿Qðºe_Чó BîH!yÔÒÑFfΞ·péòUfÄKëCöÎîÞ~29I^ai9Ó¦«-"IHD|<ôR@_H(ayÿž@’v®úug* ú9™ITxˆÔÇÓÅúHYcjB‹ÎhWýqCPõ!û£ÇŒ0Q%-È>âÂ0Û‹aæ䆴PÑ}ì²’ÓUBXhè'eÀ¬z´0ËĆîêloUì²ÓÅTÑ©‰ÇxZ®ŽGÐÑ»¶mZ·ÆËlÁÜ™(é)“?ÒÖÏZš&ÖtŸØݼŠïù©_rº²º¶¾ñÜy‚~SS¸ßû%EûɉñÐýyx¨L̾™,4\s,>1… ² ƒÐá\š¯·¶÷3U¨ÿb ?ê7qêäd‚ú2%õ×õ€$À:sÀaNý O÷%¨£ú˜±ãµÈqc³æ.Xy\³nÓ¶]û€G7/_Øc”°)Á‘®­Ê ˆÃt@UõûñÇTüQ ’î[,`¦œ#)ñ1¡~ÞnNÀÈÞ[7X˜‘<Eô‘²ÖTýÁÉþ8.û3ŒcSä…’¶9lïâá# ¦¸Hö Ki˜‰i1wCE÷¹ËUôT4^c·0ÌÎ7ÖUSGçfO¦¸‚ü%.v¶V{wlÙ€ifb¼xþœ™OÓ×›TпrÜgØo`Ø/°Ÿž–Bº ð‡……â —G€ù±q I)i}ü¬B‡·ÝSõ煮 ¿–_&õ¿¨ÿ5§þ¿HõëªAýÜÌÔÄX%õwl^g¾ÔŸêOÆk¨âÔÇ|’úÃá¨èëú‚8Ž`Ð'süPc¼¦ö¤ÉSþ1Ý`æœóµäŽV¶vŒ"a‘±Ç¬Ü‚â2ÒÚ€­°Çn‚¾°ûàHÿª/è#çÈ‚êßF¾­×š9FJ óÐëÇ°`)(bØÚr÷vrGãEt¢ê«3ÕgH©þ e_‹dšÁLÔ4m³ [kiL³ˆ˜øä㔕4—}zÇÔÑ,®GŠŽþ™´~‡™"®/×]¶ÌºovÜà%][UÎòÂ4‹–ËÐÒîÎö‡m,i›¡¦W,]4o¶a_Wgâ^&Ïì­ÿ³_Þ_UÞw?鱚ÚÓ¸¢Më1qO÷@Å{ïmÔ(*"‚ŠŠ ·2Ùó÷²áÂes ²Üi«5ÖÖ4ñ$çXÓ¾?ßïsŸ;P¨é ×ç‡çx¾¯÷ë­šNj¿ÆØšù½ õƒPêõ ŠJJ}•JU îëa?IAºèïçësÙÛûû¼½/ûøúù^  ‹ˆfÐOË”CèJÊ*ªªëDÕç[wþÔÿž¨½õï +- ~Qž<#ÔeÔ÷<´ßyçÖ þ¼Y﩯û} ‹Æ5@à:wáÐïÝo€!Äæhcï0‹²fè£+®ÌëƒwG¹¢£¦îæmn$âä‡ñ¼QŒ¨wÈ Tê÷îpŠåçfQ­3wD<=Ü]vsudªo Õ­¯úíZê7.ûø<#Ù72ìŸhiÃeÕúÍÛv:»<.x³m&‘¦f°ÀÐÒì!ßðð‘v^–ô ½’òRO³/ïÞºQ[]Y^ÊKIŠ‰ š¾pæ$Û·gÇÖMëV-[4ö Zg漨Yf¬©Ù>Cj¿o«ÝÕ…ý·CýþAĤ”ŒìÜ: ØÀmÁè.hE´ÜQ‘úÚë*¨¾ùJ%Ä+ÞçO?rÐÕyç¶Í„¦ú–Pý‘ÃLŒè¨þZê¿BöÛ²&È~÷^}¸ì›bž ²¿fÖ™‹›“}ÆY~Qi9kšo3Æ_òsu`´´V`¼¦°šV'–—“™F=~-";qô›Ë.õÚ•K"³©¶ÔÔcšñÀþ}¨ª)5†}/kƒÃþÏ£þ‘ú R¼GP¿¸T Õ¯¬b_¥öÓS“¥‰L÷ÃCC‚ƒþö^ ºæGDÅÄIejè—–«®“ÑñÇ­¾•ïø­hÞö[¥þEêÿGŸú¾þJ›úI ~Ÿ†úkW,žçè`7y’™©@ýîݺêP¿µÁQ_úÜé´õÛµ'|0kì~ 42f>ÉzÊÔ³É×mÚºc·‹Û¡£' ŽW¯…GÇ'&«¸uG÷.šVÇŸª£ÈûE§ß¬ã易•&K€êùû\„82‚lÙÕgÞhmafÊU¿O¯î\õ;v`Òø»?ÔvÆ_3:È~k¡­5²ßƒšÉ°‘cÇ›[ÚØ9ÌšÚ`ðRgFE­((†ìר#Óñ·›JŒgšž~òø‘­³â…<3U–IóìÒ9/4õ~g§í,´…sg¡ª­Xj¬«ñ4)6`¿£8Ñ ûoNýÔ Žê²r@ÿ:ûªàûåeÊ’b-ì“îƒûa¡!ׂƒø 䇅GFÅÄÆ'$ÉRÒ úè2UŒî–¶ê?Õ;•ïŠú/^M}•XõãA¢þ1·½NÛ6ú󧫩oôžúC·ÕñcЃKc¿„1ãÌ,¬lí§;Î]¸tåÚÐƽû ç.ù7&ÈR3åy…%8Œq~óø‰>Bž7Š]s|*ª>‰£@lŠ7šy#rø€ëž[7­[µüp°³±4?†©~ßÞ=¨~ë–¡ú dŸ˜À¡ÐÁiÉþÈþ k[t5Úš [¶ïÚ‹ª>yæö‘A––™“ÇeóLÌìõŠúEâþîÛ§Zóìö jjeq~n6ßg¡TÕgO;|`ß ´õ«—/^0g&Å6q/käƱ߅÷‘8Òèö›¦¾ñÐ/£þ…Ëþêç–(Ë*T€~5}Ä}U…€ý\yVFZŠ,)Q ð‡…††à ˆŒ&æ'J“SÓ3åú•ÕµõÚªßðRÄCy[Ð-êççd¦ +-Ô?ï%R‰Hýá„„^õ; ‘ú/‡>7FbG§Î=É%zL´²±w˜5gÁ’„'gׇ:{‘óC"åÚ¨¬¨bùáÞøô[vÍ$óƧðF¦úZRý¼®àÇå gN=´ï.X#ðÕŸjkez b<°%«~“²ÿ ÃB_&û˜h–“™ì£¬±Ðöìs?|ŒºšË~rzv.KWµ¸Ïþ­ ­yM­Þg„}T5ž$Z^NVzr"º:äªÅæéáæ²{•õ²El¢MF[…àõêÉébÿ·쿧þëP_–š!ÏÍ/*Q2Õ¯®aq_UQ®,-.,ÈË•3ÝgÜ‹‰ŽŠŒŒ`_ddGÌ—¥¤ed‰ÐÇ&äÐ×Sý®ÂwAýçõ!jêß¹Y§¦¾4>: XÐPå’ù³§ÛõG‹Ôÿ'£~£¾>ô[8Ú¨¡ßžC¿k·Ïz‚ƒ>jìø‰€Ç´™äŒ«×oÞ¶ôðð„4^ö»Áð‘…ƒ5^¯Åd2ðˆñãµ´QŒõ9ƒ¾,ã´ñ/”-S}X#ÇǵßK˜r‡Ý÷íÙ±uãÚ•\õ'O2§Q}Ñ5ªßªE¨~²•Ö}ݧÿ@ã!ÃGAö­Ù¶;a¢=qšç#‘ªņç|ÿo¼«uZ#U­IMý¡«QWSlXhª²’ÂÌâf]µªL¤~°†ú›×qêÛL2dÔÿwÕ¹£>#‚S¿ç†ú:}ÜäèöY^}û"tŒo>Éz +-Ø1oѲUë Œ»]Ü罯À£âei™9œ\¡úÿæñ}|4˱â?zHÒx÷í8ÐC!ÏH•Jb"˜3ž>qäà~g§í›×¯^¾hžãt{[«‰˜1ìק'õú;kT¿MËQ}}Ùo¥-ûøL£ìh¥3Î|õ5FÚʵ?GrîØh—|‚Ã\rkkšh7o ¹ñçüý³&ËZ¡ eÍsã­®šÚº@‘MÁa£S]{?rÀÉmÙ°fÅô5EgaÆ ÙÑLÂkÏeŸw¶Ÿ!`ÿͨ—€'IÔ'ZWôëØGÜö+Ê”%L÷s²3Áý”diR"È/‰gŸD’ä'§¤¥gBôõ¡ÿ›„ôºÙ„ÿêK¢Ã‰ú§vwÙµ¨¿`ö {Kó&©ÿ›–~Mô髾}‘L úä‹&Ã@3 k[ûéŽs.%t|± Æxä¸×9ÆaM* +-Š•U5€Ç]‚ÇC½Øz<{èsÕgÎxÑV–—åçd¥%'BÁŽ‹gOyz¸»ì&c\±dÁœ™Ó¦`Ë3bèàA˜«>éâGÚªß2 ÿ2Ùo£+ûÝ ûý˜ì0ÑÊÙQac¥99»":êk&ûI)ÙŠ^×ê¦Üü=7>ÑôÚZÜh¼®yr¹Yé)Iñèë DwÌ+mç6*ìÅÈÎÁÎm:á è×»'°ÿçOÔÍâ38ì¿õøˆÑ›,-WU’ê×Õ×߸Q__î“îW0Ý/ÌWäʳ³2Ò ü2©4Iø¤„üTÆüEƒR„>á×PÉ+TÿÅÛ…¾>õüSƒRMýʲâ‚ܬ4N}Ÿ ê/Õ¢¾1AÁ©ÿè·VCwEØ€-~JÜ`d2tÄhÓ ‡Ã,øâÿدï¨*ï; à'¶ÑžÔ¨uÆ4­QDQ”@DÙ 2Ä-ˆâÞ"θ•ˆ{ ŠŠF8PöÞCÆeÃe‰šhgØôØœöùþ~ï½÷.ÞОBÞ?îðÏó¾ŸçùºÍ[¸t%äض ƒñøiÌ +-FGT-Æœ¼Ââ²ò*nG½ °Yô塾'ô<^˧~ueyi¦>[ŒœŽ¿“Gù`„žsç°©oaf¬/LýÁMOýNíBý†ìËÇ~7v©Q|ìP‰ôô q§±±ðÐØ8ÓöúbÙQaÓ•Æ¢+)ã}Íf\3tƒà%‡#íE­ÐוR]fZrB öõ+t¦òÝ»ã›ëV/_LáMw¢Êæé±ÎØïÛ§WÏ•ýfÔïpEêÛ8L‘«¿«žú ÉXb9’üB¿¬L*•üÜ}šû÷2ÒSá~B\l ÁÆžpˆÇÌÇÐçÿD@ŸM:|Ý/_ñwDôy·ÁÔo >B…úõ3IýÐÛAW.ž©?×eÆ{¦¾¶ þV}åè h`+öêÓ—£?xÈ0ÆÆ8c³ ÖpcúlWÌÅ5Þ›¶îÇNùŸ¿tåú­;aQ±$cq)€MÐñþƒ#åJtܯª#É|ãÚeÚ‹ Ž ^«–.œçæ<ÝÉÞÖÊÜÄ­Åáj,ßö<õEêwª7ö»vëÞCûA MŒ}}c3Œ}GZ„ž‹‘*wÚI¿€@„Ç›Ÿi¥Rd‡Âþ‰vƒ/úŸ-E‡R\ØŒý*œiEù¹Yhìø˜„‡;*ûà¾ÝÛ· =jî.èl{+sS#^Ú,¿hm +-PÁ~aGaÿÃÔwi¬~X$>ʴ̬œ¼üBB_*-Çø¹ûùy’œì¬ÌŒ´Ô”ä¤ ~È%<ÑÑ1± ?‘ÌgC_’_¨@ŸÞ|ÝÍMý6VÿoL‡'ÕäêoÛ´nÕÒ\}K¨¯«Í¶ LýÂì@ê7~Ž>Cƒ¶â(RÃÈt‚•­½Ó´YÄÆòÕë°÷ì;x”ÜÀûÌnÉ´ÌlI~Q‰´‚£ÿ´V¾þÞÂÔo Ç»wì„{õâ¹h/)‰qQawoa.ø8rÀÙz¯ÁZtw™9ÕÑή?VGKSc¦þ6õ™]ÛãÔoÍØÿRE•ýq†&æV6öN(mºÔ¼6lA|ÔÙlì‡DÄÄ'SzŠ;­ö¹<¼æÇ~£ðxcSxìN“W6¥r;}î âç¹yýÚ•¬´‘ߤ‰–hm=]8B]M•³ßõ6»Öv$ö?Tý­JÔÏÍ£©OèWÐø1øá~A~^.s?=-59)11!>>öÓÏÈO!óïeçHò +- +-‹KEèãy!G_é0hkõ_ êW•—âõâê]%õíÛ-SæËñÆúºÚ£;¶ú Ñg`t‘£ÏÈ ¥8PeˆšúˆQ_éèêšš[ÚLš;·¢µW,YàáêƦ>mEB#m~—M}¿“G~»{ûæõki)Ι5mò¤‰ÈÖ`ì×_¡®¦:H˜úÜ‹OÚåÔozìÊÇþgŸ‹Æ¾ž‘é+[dèìF×Úºß BÖÛ—¿¿J RmÓ­F>(´vkN5öMÖ½EkËn5|—e%…ù¹YHŽµàÔÛ!»Ö¼V-[ä9:ÙÛZ¡¹õ)Ä‘ÃQÝBŠ¬»…‹M9ûÿë Úè©—n“ê‰Ô÷ª¯>cLýÒ2 _UUÍÈOƒ¿¬´Xp?'›ËŸ‘.<™œ| ÌGi`èWTU×(A¿Í§~sêÿˆQ(Vÿ†Xýe ¡þT[¦¾Îè‘Wý>ªoaÑY†>F"¡ÏWâà¡Ã†­ýõXc3Ãiú¬9s=/_ 1v졡舗+84"&>)5#+7¿¨DZQEè SñðV4‹~=4~þY<Ÿ<þá™QLS?-9!&¹^»|áìéã|(’óÜœ1õm­ÌM õÐèä… +-…ûY{ŸúÊÇ>£rdu7}Jq¼ÅDŒ} +-‘šçÚ·ŽP†W®Óµ—(‹PÖÛÏ_Їý¶®®¥ùEø$ë%Èzû'êmÌ1azJb\TxÈí dxî̉#xs¯\F÷ÚÌ©“'ÙXšƒ}]t÷p5~±u`ö[V”6êÜÌÒÆž«¿’©€Ô¿¬P?G‚TIíʪêûÂøiðÓÞ—ÁÏäϺ' ¡ÏÞ ¥“à×DÿÃÕ?ìÛ‚ú=•«ß>_#¹úÍ¢‰8€°ÀK¥¥£«ghjni3iòÔ™.ÄÅʵë±}ö>~úì…KWƒnÝÅ»•@ïV^Aqiye5ÀÀN¬}ñR„~+‡¢BŒ×¯^>§L±å`$ÅGG`& ÿSÇÐæ;¶lð".\gOw²·±2717†¦¾¦þ_1õ™2* ÅïÛÝÔo4öAƒ°ùÑFIâfS×ÐÔÒA{›YXÛ9"G÷ù¸Ø¼7mEŒ¬»¿#!"… e÷ZÃ[{®ÑWI!¾BU7±zç&º›Åè»wçV*ï% <\gãd³³¶ol€ µ45PßHRÌþ?éPì· þê{rõ}©ŸGêÿ›ýú ªúL£¾kŸÝÄÞã¢tTƒX"‚Ò‹ˆ +-Ø{ï]‰½wTTD:¢(b)Âå‚‚(MQwtb6ÛÎó¾ÿÛàâ³3ߎ™‰ŸÎÿþžsDy ýÂÂ"¼B¢Ÿ~rŸàgò?I‡ýü¥“øù|%}’«‰eTŸåçådg<~pïöÍäëÄEȹÓþ¾T¡ÅÊ¥ ç̘2aüg{kËá&C¡"êiköRûI¨úBÒU±êW-ûÍde¿µ´ì÷@”¬ì66³i‹²ï1 Aâzc²íÞØ9‡FÆ`±¥`±=Lç1¢ì—òÁ&ü¶?'Å?Sdƒßn#-¶4v¼£Âc€ŸÏáý¸Þ^k$m6œo';$ÉØï×Qbµá€óÙÖ¶ »àûÍûµ«ßSC[¢¾ãèq¦0õ½¶@}9õïÜg},W¹~QÑ zL~VøÅy~&&ìç/33++äË™ÿèÃü +-%è7hÕÿÕwfê‚úºDƒ ~™úÍd,ü¿oW#ú¬JÑÇ¥N‘QaJ ÑÉ•¬˜‰Š¸r­×æí„…_ÀtĨظ„$®+‰ÏÐJ€>qñ÷ëß?~ü pQú +-‘ˆs‘)iq#ñÚ•˜ªú„Å®m›Ö¯^Î+¢›‹ƒíH 3¢B¿·®–zÏÊ«~S<ê5”ýoønã¼—†¶;à&æ–ÖvNt¿gÌY°Iâ|³ÍvöBXTìÕ„$\o""G”ÿ “­„oùÅÆÝgÄ(eÇ»¼T˜l9YüzSØlΞò÷õ>´Ib´-Y@÷ÛÝV›¥9¸¡~]m^Œý®œýÖ2ö›7ökQ¿®¹¢úžLý5‚úg/HÕø8êç‰9Ý/ŠÙcòK +-?¿(—Ó/}OI|"_Îü’šÑoÀªÿùZQ»úÑa‚üª©?Â̘©¯¥ŽBØØÔ¯Š~3}Ö~ûŽøž¨ª©kjë¡j:Ür” +-¢ûÄ©3ç.X²b â®}‡¼}ýOÊÈK¨ˆ|EfH± ŽXù®šJ¹ø—¬$Ê´x÷¶òu…ÐÅ“G¿Þ½•š”+N?z`Ï4D¢búdÏq®Øpbˆ«úXq¬êwh/´CYÕo¢bUÿOÕØWVöÕh·é26Ålspq£,iµ­ß¸•¢ÄýÆh‹‘‘ž‰óÍ7[y…Bõ¸ÞU7?ß<Éäë×.³ûMQbµm݈¾xþìé4Ûè‚ûF`'\Â~gÄÙ®”ý‚ý:Õ×Ó7àê;põ-gêbê‡UQ?¿€£ÿRx$?‡ŸägôËžH”ÇÉ—7¿ô´êË©ÿá Ôïß8Õ¯Ž~sú­9úœ ´CÝ>äÄPó£l]ÜÆO˜BýpùjH±s//ˆÁ¡‘1W®]O&ôaDŠÄ2+$ñ7eû¯,ªTD²"?/7;#ý!5DPqñü™V!Ūe‹æÎœ:ÑUßÆÊÂÔ˜êaoMu‰ŽR%ª¾ª!Ÿ©|Ùÿ–—ý®ß£ì÷¤8û 02 iÒ ÷œ<}ö|ºà˜mŽ##B#/ÅÅ'¥Üºûë£'™%+ûå(ûïÞ ?ðz&‰(ß ÷[%V?àWc£Ã‘eà‰cGpÁ·ü²aΛM'|Œ³ƒ †Û0ºáˆSK£'qÎ~[%ì7Qaöë£þXÏ)3æ2õwì=äãÈç›TýQ^¾ ÷ËW“Â_HðC~ÐûÙÃßÄùùŒ|n¾¤è+A¿ÚWÑ êªEý¨°à¯ê+wáÒUë~¡N»í\Hx4HNfŒ(,~UR&wÀ…²ÿG]Qʯ6ž¥0Ûòrè‚ß¿“–’ÝrîL€ŸÏaJÓkíÊ¥‹æÍš6Écœ«³½µ•…™ñà˜n`_±ÿ~ª2ö[IØoªÒì×­~_ƒƒ‡™[bÀá’3õ7l†úÞ~AUÕ#QoÉS”ôÃ~Ùø$>›ø7Ì|*ú5 ß`U¿šúüÓ¢jXVR\ôŒÔüà®L}ßú¨ßBµÕ—C¿‰ôÛrô»±j¨¥Ó[¿?¡of1ÒÆÞÙuœç¤i³æ-Z&¶ìØsà°_À™ó!áQ±q I)iø®Ò3²s +-Þß°CQ +-¥T(—‚÷C…('+ãñƒ{·S“QɉÓþ¾Gî݉v¸réÂ93¦L?JX7ŠXûêéhöRë#ºtâU_*„ªVýZË~»éŽwÿ[Ou-*û We߃òÄß°iÛ®ýˆ30(84Ã-ñK33[r¬×WÜm”¦X’æÍ솇]8‹8i¹mÛDì/¤é†+îdgm5ÜìèG‰ +-ìwûíûUÔoÙJP¿£œú†¤¾5Ô÷€ú —­&õzû3õ“oÞ–¨_õ9ú¥¥¥eeeø³”ä)“ŸìýŸÆþÌGѯ¬Ä×Pý­úRõéãú‡Dý÷µ¨ô«úÂSD¿©ýV2ô!Äw }u-½¾ý8ØØÔÕÐÉ•˜‰n¸r­×æí»¡•Ct‰Kqñ‰(¼Š8úäD¥úŸ …¬r'Š‹žäåfgR;×®ÄD\<ÏÊ!)±~õrÖ ÝÝ\mG²jHUŸša÷(W!!õA%«~µ²ß\’*…ÊË>Ö›¦6Ej4ÄDØ9áŒOž1gÁJWüèñ“§Î²<’Ør{’õT$–ÜðJa¸ýVßáÆ+»á~Úøm+G¿«þ¿%U_N}|W¯ÕÔ?ðU}öêBŸja}M OÅÐØt81z¬ûÄ©3ç.X²b UÃ}‡¼}ýDh$ë†ôUq%„rX( ÿLý·o^—³ª_ q%n¥$ÅDZnxêä±#öìØìµ–Œ˜>Ùsœ«ˆ07bDU_[£ï…: ×Öý–r:¨ UʾÀ‹UZö{Ð%ï­o`8ˆ¹ƒ‹‹ãmýÆ­;)Ql·‹áÑ—Y9$&²s0ÝgI™\žŸ¿Ü$Gœåɦ±ŸÏ¯8¥ív9g<(ðı#o[7âŽ/ž?›ÖòQ#̉}\r„JìÏ‹UÈUÕÙW¦þ·tË;w…újp¤¾±Ôwvó˜õ—®Z¿ êEžÁ¡‘¸âÉ©rê½( âô8ýL~N¿Â{Åwûß_¿~ƒï@ZôkC¿¡ª~uõY7|&ÎÍÆ‚¼›–’x56*4ø ©¿{ÛWõ?}ø ¦ŽZاßÃACM†[Ž²síæ>a +-Ã嫉ˆ½©_Œˆ!#x5Ì|š+ _V!é†2%þY·¿Ëªþ[¶Ü^½(|–Ÿ—“…<ïݾ™|F„‡œ;íïë}ˆˆX·jÙ¹3§¢º8ØXY˜ýÞ:Z¬V¯úÍT¸ê++û-¥e¿C'á–khë"U£!ÃÌGP¨˜oÓgÏ_L‡œÖÛ±(‡¸ãñ‰)iwî?L—%ŠíöVºÝêsÅ¥ÛMzÆ)Ñì oi)I q±Qá!´ÞþK~GÕ¼®qwÏÂ=ëZ8ç CB$§N¢H©4)vÓnØMR”’™±A* ©””Js*J»vJ” Kѽ\Ëi@ážã,wuÖ}ž÷ýí±rs×⮵{ÿŒÿ¾¿ýù~Rä!!ÓÍþë¡É9ö¶,sSc]mMLUÀþdÊ>ÉuX°/ÌUPæýÕ_ª£o¼Ôw†@7õ#cO$¥fd¤>N}2Üq|’ô‹½.æ*À™;Ÿoþ×E_BýT}t‚¨ÿœªëƵÚjª~*Qˆ`Ô‡Yh´|Ù0Tÿ/"ê Ñ'6Œ!èÿ耣p–ò€«p™ø`βµç¸y ˆ~È‘£±ñ †p?ÖÔ]»D´´Á2|þâeg·˜ø] > Åè“öwº ˆZ·¼´(ÿ< ĸèñý{pz­vq´#³PW{‰:Y…³aêOa¦þØá1õGu`²Žýñ2(„,¡ 8_Ec]nhÓR…*ß´-`ïÁ#´É3s +-.\¬¨ª¡EŽNð#í¥=þÙÇ›x¤ÈþÓvZäõiEÙ…‚hòd 5 î·€í›7øx­†ÎÆÒÌÔH_/8`°?c:¶9²?žÖ9ÃþH)fÿêO™>Õÿy¡QßÂÆÞÙÝkýÆ­{ŽŒOLMÏÎ+*«àbš·ïÞS¿‡˜ÿ†<¾ý=Ô~ñ×CÄç“/fþèÉ©ÿ§àÃ’PÿU¿ùV#Q¿8?;#5‘ª°Õç€ú¦D}µa¦þàèÿœŒýÉôU}2 +-MÍX6öN®k}6lÞ¾ }8—|&#+·€àÖ]x÷AËãvŠ>Ã^>úŸIÄz· ‡áÓöÖG÷›oݸ~•ì‚œÌ³)(ÎÂÀ€m}×­qãØÛX®21ÔÃ&WUž¯›púTÙI…6r•bôGˆ¦+:ö1Ú ?NÄdaìÏñ¿DKWßØÔÜʶ¡ÄŠ]~8"ú8¦ +-N”\ª¬®­o ¡B“ÃØïì~õ¦·oèEþ‡d¦ïßÂôU7mr*Þoµ¼ÊòÒâ|H¸èˆÃAÀþ6¼à ÌÙÖ«‘¾Ž°¯ +-7©ó©ÈþqöGI3ûbêP}5 èq£•Ööw/T?4"&>1%=+¯N·š:A‡ãéöò—.ïÄü^úDí—x¯_óÉ7ÿk¢/1õ™}[¡è'p°#ª/—Qõãc¨úþ>Bõ5A}bÆ´a¢~?ôG2èÓA(@>$°AeÁB @_ßÈÔÌÒ†íä‚:À( <w2)5=+§ ¸¬œËšpH´ÒOê—®!†Œ>éoþÔïƒ]ØÝ @ü£ãÉ㜅 õWª+/•æegœ!<„Ú·G¡§»³ƒ-ËÜq SÞœÙ3åH¨dúMýo¤X}!û"cÂ¥c®¸©­¢’²*&«g°b•…5ÛÆáÎ=˜+¹àÎÏÇXñ€»Õ|ïak?Uñûmˆ¡òï7˜e”ýNæ€k}H»c%–ù±¨<ávnÝèë Á:ÚY[@/Çd±Ï1Z`_–°ÿýÑRÍþ§ÔŸ†‰¢úš ¾©¹5›ãæéã¿egàÁЈè¸S)ga™•–WòH˜‚ŸèK2õ©åˆ9>!þTæ‘?ÿõ–/nþ èyõg¦Bñò|QaGÜl¬¿RUQVœ—žêG„$ê{ºsØÖæ"êÏ.ê€þ(ô²A„óU-}#“U–ÖlGwOo?@Ïþ Ü„'“RÎf‚ðAU_¹Ú€_”‡îW¯{Á‡áÇÁ÷aHS_€þ[@¿‡Y…m-ïݹÙx­ŽÇ-‡?.íô)hñ°`ÄÁýZW'¶µÅÊzÚ¸••æ*&ýˆ¡Ž#è‹©?ÀØÍŒ}¨ô Ä9ùÙs [¸â–ê,721cÙÂ8$É uì¶9žp—«®\½NÊö!¹à„±~F—ÿ[´ËE.¸Ž'4××ëjª._Ä6'Á‹ +-Ç:ß±…qÎvV-e_ Ï8†}¸ã†ûª?Ž¯þLÅù*jêT}+¶“›§÷Pÿ@Hxt\Âé´ÌœB¸Üxµ×ÉoTL}Á€§OTÑ××' Ÿ1ÿ7ù_ý?_ÕGFýwŒúÿ|Öêß¹Ù@Ô/ÊËJO9‡êîÜËÐM ¾ºš +-_}b£þ(éT@ôG ÑÿŽ /KÐ`ª/ÑÒYnˆƒÐÎÑÙÝs/.ÂýAĆĘ„yE%—.úp<Þ¹÷°¥íIÕAb~*ú˜$?J¾OÛ[ÑMXSUqñBANVz*NÂ#!ÐâÛ6ù {K3„K/Z‘Ι%/˜ú㘩?z8Lý~cŸ¶:äKãDÓ«ÛP}‰¶®ñJs+;G¼âü·ìØ}—|&#;¯¨ôReum}ãÍ;÷´<~ÒÁ´¹à„ûÜ\ÅÚœ²ßŽ7©ó.$[˜ G\ò©øØ£-°…îÆq°µ2ÇF_¶t1ÜqÊJÀ¾¼þ Ÿýo¥›ýÔƒêC¢ÐãDý§ž¡‰™•“ëo¿Í;àt;ußüwÌÕŸ>úü7B¾pçÿ.bþ—G¿ßÔ¨OÎG˜‡í­°"š®ÖpËK‹r³Î‚úÑá!D}oO7'¶•¤ú“ð^7vŒ«ÿYè+új ú+-¬ìœÝÖ¬óEöôcãON +-K`ÖÔ]Ø@Ðïô{ùèÿo›°¯ ¦>LB´ávSC}mu奒¢<¤!áxtÄá „›7øx­vq´ƒ@õuqþü“Ò\\ƒSdI¦ÌÔÿ+?Uéžú’c¤È؇SȾü,Œw¡ÆÒezPé–6lp=  8ŸW\NAqY¢…#îžðˆ“¨óOËÌ2ñ:ÿ¶¤Ì‡}N£åq+ÊH¡C¶qpÆû»¶C¸pÇqìmY.aÆ«¨€¥>¬ØD}ìqT®oT}–£«Ç:¿MÛwï;zìdÒ™ŒóùÅx¸Õ741Óìý•ÂÔïíEÖß1¦“÷n ÷žŠ䋘/6ô¿ +-ú¢ê+¯{ºˆ¨þí¦ë¨~IanæÙÓÀDxÈ= „÷W'@ÂÄPO[S}Q_Ž¨/#Ýê†þ·Bô) +-rˆ¾’2ŒÁÅÀ‚Á +-Xƒ¶7µëý·lßµ÷`€{0+·ðÂÅ +-.Ðoº}÷Á£Çp;>4áôÿÌ’£ Há"¤4´A–Í8yÜò²âüóçÒNã >¸sëF_pÁ‰mm¹j…¡Þ2M…ªÊóQº¿—/2õÅAøçñ¥Þ`cìxDbâd܆pÊ‘±¯¥£odjƲu€Cæ!¤‹•~üdRj:„‹gd{²\q½À¾d´Ÿîsa´¿B´„ýN~¶xÆÑF//-ÎÏÉLOM:y<:Ó…C;ÝÕÉÞ†eìëjkÂ)‡­NØÇZ.ìJý©ròp¼)«.Z¬¥k°b¤éâ±ÖwÓ¶]û‚Â"cO$¦Â:ƒ¯ª!QŠl³nª>Aÿ=Ÿuxï%ýó¯DüÌÿè Õ§C‚?õaF¼Aõáv|Ú†óðÆõ:¬ÃÂœÌ4‡QG‚Q}¿uk\íXf¨þú²R¯þE_†¢?MN~EAßØÔœekÏqõXë³Y8— .à,çòjaCÜn¾ÿH°ákê%2ˆ Â!N}ò7"$ÙÝù£Ä=Ø Y^½Ruùâ…ÂÜ,táXTx(®ÁM~Þžîζ ‚‘¾Ž  òÓ¼9³±Ç'Ó%8V|ê#åSD?öùçû¨Äô³‰…šÚØêÖvŽ.«ÿC~xõ˜ïq?çθÆe.ÓÜq}—QZ”${TÚ÷}ßC•¢´hQ)E”PT*EJB ƾ/áÎuçÎÕ`†sϹïÏ÷yžßïùÕψ9Ì9?Ï¿ðþ>¯ÏûMG=2:.‹wsiYeMÝÞ&¤Ëí8jˆ\¸’‹Nپƌ…Û~ýê%œô¯)] ¹ºšªòm[Š +-òØ’‹‹ûÁþ˜rŽ¶Vó(`°¯ÍæÙö•º²ÿž‚²ÏG*¨ßŠÕ×ÔÁŸ‰éfïìá±dY|rz†ÛÖí%vÛ1ì6Éÿ–SUŸ™ÿHBû#Ùï'áãÅçÉçÍûèÿOŒÅOè9u°×té<ÞRËÍMõ»ªËK‹7æ¯ÉXµ2. +-Løyº8Xóêã ¡8ÈS_ÑJá« TÕÇýI†@ßdž•­£«‡O@Èüˆ%1@?-“Êà–mUµ`áàá£Çé1]¸Ì¹Àêà=<¥×á‰p¾…:®à€Ÿjcm,T–•o\—›E*D-^Š.èâ`ca6‡UAªúè0ªú@@¤²U_q(ÿ‰ƒbæRf!S٧î2–"60š>PØ9¹yùQÀlÊå!_õFXÑÂÇËßt¤{_”î«œt™!dzxÏžjk=vôŽúnä‹)WGWìcËÑYwq 17›c_Sû}z+8û2‘ŠÕï+Ž8±Ý4µõ >n¸“»O@hxdÌŠ¤´ÌÜõ…[¶a·5à€·´²$¯!ÉÝÔÿ©/æ]üý,ýË’/cþ[EŸ{OÜs¢×DVüû›ÛxKè‡m­b_}mUyIñ†¼ìŒ”„X”à _Otù³¦êC} f8HÑÕïú¨ 9ôǨBAé38ô]<¼ýƒaª`2Ð'JË«jêö}4ˆSg/PdÃñ¿bžt}–ã/2,ýÛ7o\½ÌÊ`Ë‘Cû÷î©e]pýÚìŒU‰Ëc–„‡ùy¹9ÙY„éFzTõUFâ@`UŸo ުߥì÷rFÌJTöÙ„¬®¡¥«o8kÎÂÚÞR`ÌEÅÆ'qg}ëvXQ¿ï®ú‰“g$‘ò½Ï–èf¼Òr&u._6å®\¤«ÞŠ€4Ò–++Ù\H §&ÅÇF-f»;;ØXšQÆ“õuqÙǪŒÁ_;lˆ„}³B³/Tªþ‡4Þú íFêkhO40šaljiëäæí²pqôòÄÔÕ9´Û*ªwÕãWýòxûS¹ûÍý©¤>¡ßÙx1õð¥äË3ÿ ¢ß©ê?—Tý‡?¢!2+nµ_ÔhÜS[Y¶uSÁÚìôäøØ¥a¾Îö`‚Ô×™@ÕpÄp^ý¾õßW0õ_Ž¾Ð B_“C=ÐÒÖÁÅÝÛ?(,<è'¥®^“WP¸¹´¬²†L@lÅS:I²ïvà)qè‹UøUž +-ËàãŸÙõ~pïû»l´…ËÏ9yâØÑè‚0aûÖMòsV K-AtÆ 75FÔ×ÕÒPWe H*±H‰ö,xÐïTöß•}ÆÄßY;9ZYmR6˜2mÖ\3KÌ9OßÀPÊxeJzVî:D\^Yƒ1×üÅ—|Â8ë iÀ¯sÕYÀÔÏø³Î'Œ1×¼¿qÏ®êÛÙš£Ã¾"–æ\ .»³=í¹YŒ}-Æþ(bŽ» û=•ýÎêЋÔïGêãˆ#M•±ZsúlS GW/¿`\pD™±&oCqIYf¿¹ ¹ûÝ!V¿ óRëŸHÄ—’ÏÌ—Wôß4ú¿Š+"aÑÁ[‚Ȩ@?¬«Ù±êaVZRü²%á¡>îÎvVfsfN¬§£É©?DP¿bªß ý÷Äè³Ç# ôUÆ‚]ýÉF@ßÌÒÆÁÙÝË/(lábê©Ùk×âíع«¾q?C/ M+4ïsU(à‘°×ñR8ôŸU6Û·wþy £í5Ap°©¡®¦²Œ‰•ž’ |=]m-áÁ´)“&jSœ£G~Îòì úŠª¾€þ; ¾œ²/”CÚtýÙu1 +-9Ÿ £G1›˜[Ù9¹y±=·lEâ*X9· qeŒ5wúÜ…Ë|Gdw]sÄ@÷–Œ9þ® kîÜiŽý&̹ê +-ºì,äÄËpÚ)e7'{k S}qj˜tö?’V`öeÕggœSÿ¤‰¿ê×ÒõMÌ­\<}ƒæG,MHNÏ^[P„Ù†û½¿ùH yñòµBAûþÞƒL}ý®Ò ØKÅïL~ç¢ÿÐïTõ™ú·o^¿ +-+¾þªåHsSÃîÛ6®ËÍLM\¹0$ÀÛ͉œ õµ5Ñ G1%úÿíEêÿÑyÿþï7Ðg PŒþ}-B:J …½³›—_`(Ðgdç®ÛX\²}=ê’d5ÒCzežËpÿ^Ç]¾B„³§)ÉCèµUÛ¶a¶Q ŒY1?-ÐÉÎjžÉlh §3a<ë€Ã‡†ȳ_ße«þ;‚~ö™`ŸVÒÇŸP٧󮬪®) §Îœƒ‚èàâá²€n{rZfNþ†MÀb'öÜA®#ž£ËÎwD.cñaQÄò;e,̹vü­,dì9:í,et`åòZt8îNv˜tsfN›b G›NÂþ§ïûrÔïM.¥9x(~[eµñtõ 1ÜæYÙ;{ø†…ã€'¥eæ®/¤û½»aßAnµIÏ7ý¬÷ÙßÊÔ—ÿ™ïéS‘øù/0ÿÍ¡/¯ê?dý°¸Õ~íÊÅs§ÛZQ÷Õïª./-Þ˜Ÿ³zÕÊåÑ‹û{¹9ÚZ˜Ï02˜¨­ÁÔ6„”PRTõ_†~ß  +- Q0bÔhµq<úÀÀÚÞÉÍÓ70tÁ¢¥@?%=+wqPQ]»gožÑq¾^oÇ;’‚ÀÐBèwWÙø·Ù®]¾H5ØW¿{çjù9™©Iñ±Q¤»‹ƒ Âœ9Õ* ºªò?F2 +-0Ý”úAä)[õ‚€—~âÀ…¸{ñ^(ûŸ³¨5µõ ¦à¼Ï³´utEC Œ^¾’r^_¸¹´¼ +-±©™Óâü¥+×Ûoñ§ýþƒº2Ÿ±„ýÇBE£ÓγìŸjûŠÅŒEWU^ŠãŽœÓ’Á>®;‚öpu´³271fìëLûÊ2ì÷“ÇþŸ‡}õ{Ȫ?Ë êÓÄpÃ7³´sr÷Yˆ$W­ÎÉßXŒ k÷4àÎ7—#w¾;8õ +-êË‚ÿTü={&&ÿEæ¿ ô;Wýg¢ªO‘k¬!ž:q±²¬dÓ†¼ìŒ”„¸¨E¨‡ž®€ípʤ‰ZcUFÔçªáŠ¦þ Ðïù›èƒ‚ih€æÖvN°pÑÒ†u@T‡ªÚº†&”Àc@ÿì…KWùgô=#9èÿÚÈ<úüdã88ædÛqœo”À$Y¼q].:`B\tdxh * #vÛÜY `¢¶æ85JsøÐA|Õÿ+_õÿü®Uý.e¿wä{÷áË>Øg³Nu,ÄÉF3f›˜[Û;»{ûÏ ó¾jõš¼‚"êˆ4éia9KJ¢8æWtüm—ÆŒ’ÆŽ;å|ª­“Ž®{Meyé梂¼5`Iƒý`G[¬ºNìÚ‰ý^ +-ʾ<õ‘&§þœð1ªêtÁf›ZØ:ºyù/X—’‘W€šV‰ó½¿™åˆ’víÆMü®”#+i?2õyô»€ÿLú=—!_Žùoý礅LÕÿÏonßdX`1iÞ¿·qKÑúµYéÉñË–F„úz¸Ø[›3õuµÆ“úŸ ,Qÿ/Òf(¼—?:ïßùuýOyô•ÕÔ5´túƦæVvŽ®>!ó#–ýä´Ìœ|X@ƒñÀ¡ÿ“_î_=çy?ggÆšHcm"R4cÇ=ºßTB*Ý¥¤{©T]PS!º'¢FÑU)S.)ã~Ö.S +-93»®»“3ócÖìîóõþ\¾Ÿo7åæTïáùz?žçåk¼¶3ès4xÎh@8à ÿfü*‰‘I Ñ€rlcH0¨C}Ÿ(9D'ÆÅ’úyº»8ÙS–&ºÁœÙnÓU”‘&§ú<ôÿ(aÀøÿýzò²ÿ¡Dö‘÷xFŠ)ÓT™ .\¬­‡†_ie븖²‹ˆÚÁ¢¦QWZQ]s¶ž“ÄÛw€ ^%“ˆ”{ŸØ%t<ö4m:Ôû .險 +-ô{~îÌÔä¤xVð~^0ëì¬}C=mJÃŽu<-;”üǾ´Å¥ÔKË Yõç.X¬­oŒG’˜mÔß’V«oÊñÊõ· ûm÷Y{³;¹ êKÿk¼‰/ _>ïwýÿv“QõqD¤÷Zn0ij5U`E~nvú¾¤øØmðCoWg{Kè¡ž–æü9ŸÏRcœ`˜=©ÿFèéýù<ô—¯²±[ÿm‰ŒÞ @só ‹Ê*‚ó0@@¿±ùNk;¯€OÿõïNÜ;!p@TÞ úŒ·¿E{c³ÁQßGÌJÛ·;~GTDh¿7ü³mŲ¥Fzhð¹À€*œ(ðÉø±Š +-Õ 0ø¿?_wÙ籯0Fq‘BI‚¨®Ù§¸M-,©âÝ<}CÂ#Ù¬Ë8€¬‹IÏ5\¼Â¢¾ÛÊ:1i°B²éz ºë¦“&QÇ°ßFQß¼U×€‚¯BÖy¹2R€}„ ìûzòØ·0#ì/^È°¯FØWfاÃdÔÇpSeQjjéQ’Îë=|B·ÅÄ%%§eÊ+(.?I£íò5’}ú±,F’ýNú¥ ú=ð^Fü÷Èüÿõ|D/^p‹‘»¡0E$q¸~ùÂybyqAÞÁ¬ÔäÄ]1‘aÁþ^\œì¬W.[j=œ÷Qª2qbœ"¨ÏQ⣡CýþC_y*}¢€¶ž¡‰ùrK;Øß/?â@ôÎø¤äÔL€  ¨´¢ªæ ÍEQEèË p ,b$DŒß×q¿• HP®öT%ü/ïPvúþ= »Hÿ|6º­[C05Ö×Y²Yj¨Ï ÐpciÊ«þ°‚~7ì3Ù)øÈ?åj^¢¦–.å½jµƒ³ëêø­Ûcã(mì:H"ÃÅ¥«ýû­¦Á‘µ°êúõë°ßÉYʺ ¦††gaŸÆ®CÅ#í vÀ~Xp€¯§»«³£­õJûóhÛ ìw¡>Ò¤ÿËe©¤Œ(i·-Z¢kˆÙfmçä²ÁË?(,"zgÂÞ”Ìn´Õž«gí-‹QýŸ)Húæ÷|‘øïƒù½@Ÿ?!a/â‚Ú[™"^½ÔX!ÎÉHÙ“°‚¸ÉÏÓ}Ýø¡¹‰‘â/ŸÍ(&sÔWzÔïú‹Ð?áSýiªê³>#è/&è›-·´ôA’¿ˆ¨€~ +-ì/¯àxé‰*púè{»åwAÙ½5ôŹÅö+ï–&L6äX”—ûêpN&a vû–Í›ü¼Ü]œV¯Znnb¨K³0]eŠÒ¤?±á¦0šA_Nõý×À“ÏÇ>’]q,—9‹¬XˆÄ¶hyoÿà°ˆ(ZviY9\`Ø}Ã["U<,ñÑÂ…6‘¢ß³Nhx.ìgO„ŠGÚÜ°öOh¿ÇÊû&r¤ö>r0+ A’ûù{{ Iô÷²¥FÌü0ÛÔU‘%…É«þˆá©úÝdŸóCŠ]¨?aâ$%Æ +-Ù´ît Œ¹½“ %¾-fWžýhùüÂâ²ÊSµç¸’ol/dq.È û’´û¨xñÓŠÃŽ~-°ÿ ½•¾íßöÏÖžb-ÀÙ¶öCƒ0î¨ç û¦ÆºZ”¹ˆýICûrÔÿˆ¯p48E‰Ý6m7Û´õÍØj[ïá@9Æ%&§¢½ Šø¯ +-²ß!ªZ'ïj$k/eÔïÃñßó{„þ+¹ûáÇ"¯ú×.]¨;}ª²¬¨ ï`Vjrb\Ldxp€·‡«³½¥…©‘óC uUÒC¢þ…Q2ê0¨?`èÏž3O€>ÄÏÁð Ûº=Ї2:rôXIùI\O=s?:ŸVúd 8ázx ô©ú¯Õç1Àw·,ÆæÆ›(ï‹õ˜l,GR?0 :2<õí¶n%i¬¯³d‹rÆtúÿ¹ïχ)tøpS}1}‚’ Rîdˆ“§¨°ª,´t áˆD ¬;¿M¡,òäÔÌœÃ_£š?Swá’/=yÊ,ñ­–ÌÕèÛr²ö€ζj¾¶º²¼ãŽz‘ÇlÛäÌiÞ¡éö5 û2ì2¤±ßõDzG’ꬿµô iµ¡¾‘cP(6ÖÞcULöi³ 1þ(/û<õå™ÿ[ÈgÌï ú/¥[±»êWW”âtr2Rö$쌊 òórwYcg½rÙRCÝ%‹ÈÕ¦«(+ábÆñÔIÔ—ªþ =“B&}-]Ò¾•V ú}‚ˆ$~é0ÜN9”áìy‚>Ð|—›Š"~bÇÃNçMЗP€QÄØÒÄÐPwúë“ 9™){ãh³mòóÚàêì€ÑfnbˆÿÏV¢dªÏ²=Šûû#FtþàÍs ¯WÙ=†cÅŸ)wuÏ¿ ®×72-ì×®÷ð`óîËÝûÒùÑã¥Õ5\äàE˽6žTóü¶ãï?ö_ŠØÿ‘lÇ>ÆzžÃ~MueYqa>2Ǽûr'°¿ûUïd¿z•€ýRìOÚØ—†)R_àJÊ*ÓÕfQXm¨o+[Çun}7oÙŸ”ŒóDÙ¿‚ònllí1gk2Ù¨/…~_ć̗B¿—ãyö„9"»Aõ‰…PÄ´}Iñ‹@ßnkm­V˜›è`!䇌Šcp.¼J©ÿ{§ýÖïí¡ïoµÚÁÉÅm£? ¿-Ð'ÀûŠË+«}Nü›ï´J”¡ó¹À€ªŸ£¬»´Ýka1^¾pþLMUEéñ£GÈûvÇÃÿ÷XOA¢¾ô´‘$ú[ŸŸ Ù¦Èý‘âÇÿÃà/ñ¿îØÉ"c°˜1“9"hal¶ÜÒ’èîéê>;7ŸçEýÅ+×oÜd™s¼xúL°Ä~Œ»ß¤ã®ËÏźã|¾.›w uzYQa~nNfj2°I]ïí!þ¾Ž û¨ûa„}n¬ÁYs³mê´3iµ¡¾M-,mh´yû‡EF#Æ”Œ‡åe¿I,ocçóŸ~f9òØç©ßúÝ¿ò»c~/ЗŠ8ï¿ë¸ßz·¹ñ&§úµÕŒLwÅD†x{Àm,-p3Úœ Θ?œ8çÂé¡h‡ƒúý…þ$ú0Mú+úoÿ Í[}²¾ÌœÃù…Åe•Õt9€> Û‰e;Qú¯û†þäc»»£½•yÅx®ÚWT€òNß¿'aWtdxH ¤o=‚436ÐY²hþü}êo|ý Tà +-ôi·uQýß;–÷ù¤ð!¡B0ÄÑ +-}‹)*ªj³ˆšZz†KÍW¬ZM¸ðòÛ´ /.qo*b§wòëÓu ¬ê›8Mü់óŽh1€Ìö_ˆMÏ°ÿöËþ­ç{ãÇÁfç:rCn+™ÙAJ¥M’¨¢ÐJ!EÈmE%E­Rº¯åvÆÜUbÈ\;LņkGn~صë¼^¯÷ûsóýö-Ée|µ÷¿ð|¿ÏÇC¯bUϱŸ]±ÇÆDoŠ ìâÄ›ãŠÁöÇšö¿BÑ·ì+RŸEÉ’„ÙÖ«7®6¨oÊG›ÓthoŒ14<”m/É~¶XÞLØî2aã·Ë‚”d_ úõC}“Ìoúøsô%G,¿|Vb)WýøX ÅúˆÐ ïîn3œ¦LC41Ò'Vè€& *ȹ¶}¨ÿªÐÐÿý‰“§ôçÌ_è Ð_±> +-®?6>)%-t¡¸”>Îå +-ð…*€>×¾Gú"U}Ñû„¥î¾Ãº»üÒù³ßÂùçÅâb¢¡¼×àdƒãŸ í=y¢µ•¹‰¡>Õ·. ®6%ÕoÓbU_•ì ØEDX`øZ:ƒCáƒ$šZ .]\ç %‡„†¯Ç‰·/195CÒÄ +-Qd‰¯¸ïä©ÿï·Ç4ðì_Ãë=wæô‰oŠòs²ÒS“¡í!xÀ~hÖ=bß±om…Ø…ØÜ2°¯@ý¶Bó ûö×ÖÅa´™[ZC{cŒ‹|å²å] XÞ¸Ùj°öÆŸ*ÈþË ÿ&™_ú¿uAø7·G<ªŸËTLÄukV. ô[ä1×ÕÅ`ai†8|ØÁºÚýûjö$T~ø~P_ úmêC¿“Jèsè;M‡?ÆŸ&,"2jktL,ȇ>»~éßÈ¡ÿâåЗ•÷s®úxþŠÝ}îÌÉc%¹Yé‡1ÆÛèöƒ|·Ów´·€Âg ‡AB}÷ë£ÙãZmè·lÕˆ}2D¦ˆPú]>f´Ð‚7ôË£ ñ-­mì¦N›1ËÝÓËñbóö]’&çšs¯®••=‡E“c§…'–=äÎ&¶=÷[uÉÃÈþÇè û³ûSìl8öGöuZöëSÿ#êo ²{Í>˜#Ž6#S‹ñ£›ûo’ý(¡¼³s KŽ‹å-:¶·x¿Ïe¿!è¿Qä7ý6¢äˆE̹ꇅûû "N›jg3Þa†8P«_DŽŠÚ1ê·Vsê7ú£MÇôíúóxãåãŸU€ÓONMÏÊÉljˆ¿¦¼ò‡~u-û5Üš }ÖÝÕãí[7¸Zqùëî¼ìŒ´0>ˆqCDØ +->¹³¦;aŽ–fÐÞ´ÙÐö4éê;C³ÕÆU_}õL³ùOþ øà²ß¡“Æ¿‘½z÷ ­K¸Ð72k•ïàÖ=X0a¿0.øðÁÄ}=ÍM8b:â)戨ú»IõW-[iaoû•ÕXC}‚bï^¢ +-~(W}uüMƒ~‚~oX†}¸úQ}+k„¾‹+Ü=è^p@|/1ùpúü3¤ +-´oâéÿ\]{Ÿ/ĺWS>a±‰1JÝ}õ +-¶ÓÔÝ™ÔÝ1è{°Ø–,öÆòvv€Éfe9ŽÄöÖÕG߃F[§‚ê Í65óµž’ì °øg{Öûݨöµt 2l¸ž±©Å¸ “ˆóúPú\§gå”;ùíÙó—¨ð‰ñòà_/OwÂþ$ö?o9Ø +-\èoªï®l´a{SŒf‚ìcy-_)nÝ)„s +-ŠYŠeW®^çد½/Ž6„#8"©~€ÏÂùœ–fÆ£õ†2XW›bWb…ˆ +-9õßvÔÍy2æ7ýn úZáæ%èÛØM!è{zùáÙ£ímßµ è^^!A_þe8ôŸ°óèÿ¡túÏžBŽ,H¨ïúrè«wƒ¿ÞkÕJÎ +- rÄ5:SñSïÊ,qŒ™%òÂiú¬¹^¸ôÂ"6l†ø÷HIÍÈæé_¸\Q)h"ͼ&g߈¸aãÓ ß æØÏÍÎLìÇíÙ Ø_ Ø +-ð]äéî6ÓÙѱonb„cOûÁ¾ú®>ê·ý@¬oʱG/joˆq¤¾!n6Qöä)¦edç–câVÉ7»á‡ü†%ì+Èþ; }pDÉN”ççpÁ‘«þ”IH #¦ˆµhˆ5DVH~¨¦Ÿ£èÿC ú½TBßÑe&Bß ¿ +- ÿeϾ€~&@¿¤ž'ÔÈ>ŒÂá¿ìòr|üèá/xw‹ƒí8ž}Fj2u÷&èîK}yPŒv6ã-ÍÆàÉÃd¨ÅÚ›I£MêïÖê|é¯ýêɾ@ &‰ˆ‹Þý %ÂÐ7B^Lœìà ?4qɲ•ØúÑ1±ñI‡ Xz'N÷ýEŠyq¯¦V´Äfí<~Ř>=ê|®nTú„ý$Äþ¶MÖ®ìûð?Þ°oÀ°¯Ë°ßãýž2õ1HÈ‘6¸eˆ‘6ÛhcVÞ ûî”â*…óŠ ¼¿cå}ƒ°Û[T7ñŒdÿÝ‚>Ñâ@ÿǪëäˆçÎ%d.÷áoYª¨úæD RDü'‹Ná“ÈQm©ßªè·“ ¯!‡¾A„ýI}w‚þrø- ;úð]²è_,«¸úà ‚þ½‡ôŸ=—9«@Îþ×µ5÷ÄîÆÁv‚ ¶CIñ±1Ñ[6®] ݽØLoÆ4ŒDÏ•·®6åíM›­½8Ú„$[¬êÿMö?%‘ᢧ&Y"ñÂÀØÔbܦ‰óúø…„†GFmݱ;j?ýHNAq)µ~ùÒDyþuûMŒ_ÀþSYé×°3¦Ö§PŠØÏHKIŠÛ‡ _°ïÅï6±?áµ°¯nÿAH’)Ô7ooŒ NVÞbŠ`o¡áë7mƒ;N¤ó‹K©¼/ãW í £MÂþ‹zØÿ©ßôëžЗÿrD¸©¾…©‘©¾vÿ>¨ˆ] "+ø÷PËŸÑDèwmúÎ3ÝÜ=aô×nØ Ÿ%.!éPZfvnBUý–ŸîÜÅ£ÿEt½f]=+o€þý¡»¯”ã`;Iƒík>Ø¢"ÃQô »ç¸º8ÚÛâb36Ð>ŒÊ»ÏC_¨ïÖ-úõÿÎ>ÑpÁ~B—»Ò“ߧŸ ý¾ÁÒÄ)NÓgÍõXä¸tEXcïþÄäÔŒ¬\èýSg@Ë+yíW×Þ'KTl}>õêç¯Ôú/¤CþU²·×ð9ös@ßû;Ðßà”ñöDìëɱßSûðڽؗõ7«o©½»ðͦC²?J.ûž^~KW®†KÞ¾kïþ”bA±’½)aÿ™ û¿×ÃþÛ…¾Lîüt›–!W„"ÀEº„‹PÂÅ<®úVæc Á†~†´`ŠØYC„…’ê«ÙÇh2ô»KÐÿü ¼vÔúpïþ}ø*pð»ãâ“RÒ2ú¢"T*)‚Ìš}QõIõØÍ߯­þ™bÄÁv[Â` [à šGÝm3ÞÒŒÄ8Ž]“nsüW{&xTß©¾ +-ÙpÁ-‘ñB[WÐDs+뉓Þ‹—,C`l‰Ž‰ÅOy4¯è›ã§¸&Þ¼uû¿wû²Þ.Ã~Ã?@Õؾ/þÊrô7vÊYé©)âcá–ñ€Áög!öm%ìm!Ø—Qsbì¦JöœgΞ·ÀoyͺbŠÙy…%„ýKeW®^¿IíÍýMûªdÿ]€>("ÒâÖM€~ÙÅïÉ9.öïݵ}óÀÅÒ@?¨úÜuµ-HáƒÈ Qøo;èW|Í…¾»%@ßžCß> +-œ;XÞý,úú×8ôñâQô~{RW÷Tú( žüªOž•wµ#l…yÙ™i)XŠÂ`sw›1m*u·‰¡þH\lºÚúþŸýúðªêʾˆŽf5:3×8Š„bu0V, Hi +-ö®±a5T  +-R©Ò+FcA@)¢‰•(Rtfâ¬è¬Ùûœ{ï;÷x¸4Ïgæü ßÞ¿ómúy““MS¸Ùþ_õÉÓa¿#Ó9/´ÉÑ7dèðQpóYM²wvó˜5oÑW+ {ýƒ` b’R3sNà\…{½àþ†6²ÿJûÜÏÿàÞÝrïÑ) ì'ÆE +-‡ +-‡Ÿ¿×úÕpòûÓ~gì‹sì )ûÝä”} kèpÜɶvãr²q)rŸ÷åk×KÊÊ+9öäÙÿ׿UÊ~kè¿hjlô9-ª+ÊKK®úçÏäçf¥§`= ôóñÞc²b)[õGrQ»w/A  ‘ªºm¯ è÷’Aßš ?cÎ|‚>t<˜ØöCGâŽÂU˜CÑ¿Vt£ìVe5Aj^E_îÂ+Þxé…ÇñbƒšGbä¶ìÌÔ¤x<ØHŠx°‘Ýœím­ÌMÇp7\l½…Ï›?Ù:Ê ¯fQ¾Å'™ :„ ð‚ŽCœý~áÕ7NŒíFhDTlbr~þ´&–Ñ¿Ÿ¶Ä†Fa +-”½÷„unfÙ¶ٿγŸÉ±ä¿—²¿Bö»}`ì3ß7ý½¹›Mòy eß„žl.äd[îIO¶€`L1!9 >oÊ~‘ûð}?ÿ§4û¯¤ZEèÿ,}ɘäçegp\À”ìÚ¾eãZèófy¸IU}Òa>-¤ª¾Z ÅÛBÞzýp‚~Úq“sì˜Ü{ð¢ß(}eöýåK¦åÑ‹íÞ÷whŒøwŸ> /9!6*"tÿ>šâ*á`³¶0;z÷wÓ‹ b$[1ò¿7 R“|»O¦ì ^huí†ó5±Ž®\0Öm¢`„EFÇÁÍ—•—† œ|U·)üçc€ì·i öå•8Â~^vfZrblt$´8Xè[7IØwØ*ÅþŸä°O›@;µfŸQŸÆˆkÝ]\öñd³>Ù|üC0ÅD²Ïl‰Ã£M`Ÿì3]hüÀåEù> /sBGä¹À‹pÓ:ÏåKÌ™1ÍÅÑÎf"T} ®#bÕ×ìÄVDµ¬ú,úí¸çÑÿ´Uô'98»2èÃEèè“!QÔ ô…moCÉà ý&èxOɲ߹]u«ìÆH¶cGã¢#Â|÷ÈIqä0ãÁ†ý¹¿›¿Ø4…“Mªê«:U> ö9/4µ$5ÀèGÁcjnekÓ0sîÂ¥+Vó`@ˆOJÍÈ΃Q¸t¥°¸ôfEL¹ùžÕÓ’(çä“9¿?»Ñµ”ý*Êþwßœ쇅úö×!ûófOçØ7'Ãþç ûŸrìwPsöÅ1vPPöñdi2Î Šœ#{²íÚëBk\:ÞlÈ~!a6¹ìKVúÕoRöÛ‚>VD¢Å•KÎÁAxÂXÂ…Ÿ÷¶ÍP –.œ;ÓÎA[+sÓ1¢ªÿ9íˆ-DX¨:æ¶E=mîïf.¶Ž2è«U’oý±ƒÑž÷¦‚ÎD20úýŒ£ÇšYÀBöoÃ,”“³cŠÇþvÂþR û„ý/‘ý~ŠÙçÊ@{µeŸù½Åe¿«¤ìëÀZãß=ÞÜÒv²“«p²m¥Eîàá#ñx³ûç‘ýb8Ú(ûTξrè,ýÛýBDÿôÉœã¤#.`@¶l\»jÙâù³§Oâ`‡ã1Z~էꋫ¾ „4úí)ú)úý®ýžXìpÅeÑŸÍ¢í.2:– õî"]tÒïýZ}r ¶†þkYôI¸écM5ô»â«ã‰Üó˜ÃùcŠÖ¬„r7ËÃmŠÃ$+ Ó±R)Ò¿»³&¤ÈÞíÙÝVu:*~2e_¨‰0úý ƒž8a¢£‹Œ}ûÃ"£bIM~Hr,/+!íb$[TDèþ}ß¹¯ÛÅÑÎf¢Ù8.E}ݾ\Š¢¿[¦ê«:U? ö¹š¨©%C[GÏ`€Ñ¾'Ú;¹º3`øB 8t$î(x‘—O.¿"Â=üžÖÕ74ûJV€×òï>`¿?ž}ºÖ”ý,d?&*B¾'Ǿ e¼ˆ}è=)û8šû1eŸt:©¿[_òw[ÛÁÉ6O¶•k6lÞ)‡FDÅ$$¥fðk]kͲ_Ïÿß-±ÿ ÏL Ÿ‘’‘p±ók¯õÐ Îéîæ ³an:vÔð¡CŒÂdh U¿ Ã…H U‡¬ôk ýΰÜ-¡oï — ¢¿‚CßÑŠMEÿÎ÷÷è¿à†C +-}Å{N£$èC’tÍ1ȇ÷¸Kr,ºvùbÁ™|òwÇECµ ðÝCSįÛÝÕi²­¥9,8 o4À@ORì‰)~Öµ‹–¦øï– ¯>A¾«§!ò‚«‰Œ.0FöûàÈôDè‰Þ{ýƒš^œ8uöÂ¥+…d àô#ZHJ@só/’qh™ý_å±_'°Ï·9a±)û~>ÞÒì[Oœ b_›cJ]×.\Pö™Ï[|²17”}þïž`i3O¶Ùó/[µv#¤èã,o±å²ÿóoÊþ¡U\ B÷.6oX³ò«EófyLâ`g %qôˆ/ÿ1ˆ-‰BÕWý¿ˆÐ7V€þv}¦H.ÁZ\rÒíÈ–ÿ¢ô– å®™nùó¦Fìvú5UtÇ ÎžÊˆá` bç½MH‘|ÝÌ×Ý—~Ý4EMºÙäï¦1ªYŽïðÉ”} ¦'öÅžˆì›Œ3ƒžè=‘cËöÝßìÛ5f"-3çÄés€‹’ÒòÊê2P›ä D맟<öKØ/‚‘¸pî´Ðç"B9ö7Êae__Wçƒd_ödãË~IˆÌßmnEN¶s,Yî‰)îò!«›È±_Àö9U²ßvôKôA‹ä„XR| kW-[<Ãq²%ÌÅHIIô[®új2 +-o‚þ@è¯ãЧ…z]EÿŠúuòÐWfÉÅ;NÐBš]MuE9æˆ~"'3-™þÝþ{wÁ~s)Nâ(ùº2_7¤¨Å¤¨ž1¾Ó§! Ǿ×{âhè 0lì·A ÿn kr²Íœ»p)¦ìïõ 'ì§û§Î\|/Øô¯óèg¦&'ÆFE†Ò¹X»jù’sf¸»:ÙÛZ™Ó’8h`?ý/úöaJ¢¸ê \¨:b%‹~;ýYô»ôÿ&B4EßA +-}D?"*† Ÿ‹è_¢èW²sÑôЇ$ŸÕQô¡×•—•ÐOæO?–‰÷î[7­ó$)Âr“¯Û¿nCòuÿ~ÝŸÁ^k*HQmr|·OCF{ +-ß±üAß/ô`6† >ŠöDg7wN@¯mÞXÉ?š‚]¸¸|­ˆT»?ÜøøÇ'üPü„Cñò¥Ò3CñRÄ> e¿†²M–}_1û® ûÆŠÙÿ„gŸŽH;µc_AÙïƨ !0· ì· žl³æaŠ°Þ;€ý ˆo<ÚÞöÛŠ~EÿbÁÙS€~Z2j臑p±pîLw7g‡IÖ\I4ìo «ÓBIT³Ž(‹þxô?iýÿq_/^5§kÀWXŒå2GMW‡PR’Ü0ÑEMÑM×éê’Ür+¢R!÷KTRB©”ä>55)1„q,Ëœ3¹kœµfbqÖ:Ïó¾ïÞû÷Û{ÿ¶-V»ß¼ÿÂ÷y>ï÷óaôa»ËÎ],¯ôënñÑ—Öº–AÿOŒòÝ[n­Ãý~üo\ï+?þŸ7l÷±œ¬tŒqcb\LԲŘâ,òuÛà× ‹m2÷Zúu÷ ]Žl¸ ­é€ÚÉSCÚ¿ÄùÐÇžØßx°éP‹áÖÐhO$`Ì[°dy4©‰;ö¤e>r¼ ¸¸¨¤e ñÞÊ>ëÌŠV°ÿ‡ädì?~ô؇2sAÙ/ÁP‹} Æ~_åìwVƾ…ÿw …8V|8þÝ6S¦ÁÉææå† ›”1òÙ¿¢iö?ý³§‹ óæ-vlÝ´;"räïã9ÓG‚”DK(‰2/z©(‰šŽX§%‡>+ú|ôu` Œ$èµÀ"0îëIŠè¯•¡Dýû8¤Ô½à¡ßºõ†$›i’d»!ȆúÚšËäó>Y€•.mÆ¿&zù’ó EoOòuO"_·ÅP¼×„¿nq¥ØOKý.L 2!¤ôƒù2t˜•¬'zùÏ_‰51)%uçÞ™Ù¹yÈLFõÕÚú›·ï?@,šž<{ñòu³|x/8²ÿ¯¤ ¨ÏþNAö¿–cßÈ&D‡±ß°Ï¦„‰¨ê¾PÙç†ØŸ„Hþnr²¹º“ñ󎊉K„á÷NÏÊ9–_XÒ.Øÿ,èƒ)I ±Ø‘‹/7W'‡iShI„yPé…t 4°:k>ý.täÐïÇGÿ›iöÓ]}?>úÛ$èIпèß¾Kv[‚~³t"ÔF_²Ýo[hÕÿ­ùõËÏž4a’î7Þ¾‰èÃjcŽy¹Ù™°Ù©)I°Ø+"†ÏÆ]œì§N&_7ç^ÓÃ&×SðëEŒmòø=±í‰0%8#Ú:p õZ0ÈÄÌÜRÒ 9ó±&Æ%&o†á8ˆ-±¨¤ìÜ¥Šªê«×oàh,š¸“!£Bõ`°ÿØobì7û×á +-DöOö³2ÒT²Ýj²ßO‘ý®bf_EÙç„8Ðdˆ9ý»ádsüv†;4»ø¼áfÃá÷nOì·ý+ý’Âüc9YéPA‹„¸˜(ìˆÀ…¯—»«³Ã´ohI†Ó@¼0ÐÃYöBÓ«ñ„Ñï*E_[Š~c,2ôœÔAÿʵ:²Ù>z¬}în«¬úÒ,¥îÙS‚þ?I¡ƒß»ªâö¹ü£Ù‡îÛµmsr"lKÍŸòl5¦È¾n¸×²{.twºÎ°Íx_·Rl«§ÐebôÒ†!14ÂdjfÁz"‚ááíŠ51zMüz8wïOÏ:r îÀ3çQ lw ˜&Þ¨&ûïåFCV`6$ìß$ìÿPŽ[^”/ľe²?‚±ß_ʾ6a¿û_‚ýJ.¶žc!ûÆôï¦ìÛO‡Éç 7ÄÈc¿HÆþ ±ÿyЇŠ˜œ½| vDäb†³£ídÒ†q¼Ð¥“ÐMyÕˢ߽C_ÐïCÚÐŽÃÐZô›>ú%ësäÝ;·êp¯/?s +-Úä¸÷ö-×ÇãÁ174ÐÏvÚÑŽ}Ýô^ÃõYˆü{MT_w›=-öybèéb5Àf=q4Ãe¦§O@0ÔÄÈ«`@6mݱ'-棠¸µ¸\S[×€XÐJ€V4£¿ÿþ1gàŸrì¿bÿ{ìâ{ÌöI½£ì1)é×ÇÊv¯/{ÒAá³ßQTì+/û"ìz/Iˆäïf'ÛTLÑÃÛ/n6ˆ~o8ÚRwîMË€ï[óì·ý2ô‹x诉^¹0:¢©€þÄñ8 +-æf0 ˆ¾!üÿÚâ®ú\ô;*A瀠oÈC}oAôK„Ðùºù7œ¹:§ÆbC–ï¤è7Ó(q­1ɆºÚ òLéÉ‚ãGgÀŶuÓ†u#laAþ>ž3]¦ÛCŠ’{͘Ük +-Q)¶áã‹Ñ‰ŠÑU&†öÄM†˜[ZA50œ\ݼ|¡&Î_´tåêØ„$h‰{dfçæŸ>‹RS[óv#α‚ŒÇY'hût<¸ìß#ì_U‡}'dw}8‡}Cʾ¤¨`¿½OŒŠ¯+ž.„HÿnSØukÊ>®º§·`(Ä¿7mÉ›·)°M#ì2útR7''Ư‰^¹pþœìˆ3ÉÝg3aì(øÿII$^Àà/HKì$®ª¯¥úº<ô‡ô'rÐQ…þýFŠþ¿›ž>SŠ¾ºkMÐÿƒ–9ú¤ËÕ×Ö\®,¿xötqa^nvæÈ1%)!vÄ[€¯—›«“¤8žs¯õ†{MbW1†ØÆOAŒÎ<1ô û0(¬'˜8:ÏpŸå:7bñ²¨˜8h‰0#åÍ'#RQU k±‚ ¥¢¥åãJû¯(û¿°ZðAögcÓ±?JÆ>)yzº<öéaÈÜï ¢º¯ìëæ\l,Äädn=zkxnž>þA¡sá÷–cÿ²±\Cì· +-}eg_òúø5 Å¢ùsBý½¡#:1ô­a LDôÁ É |Á>~1U}®ù$æ³C¿wŸ¿SôÍý±Rô= úáýXôaÐóŸÖ¡a¶Ð¥¦UîIFùàþ]Ò䪫*.ž++)Ì?š}èà¾]cbÜê•K!F<ØÜg8;Â6“¯[z¯‰>Ķ~ªŠ"Ã{¢1í‰Æd[»éßB9ð +-›·`Éòhàbã–í»÷§£'O•¿TA‹Á»?3öŸ¿x%eŸ{ þ¯ì?'#òø‘pÅ“±¿€ÏþDÂþ0Ê>Ì +-ÖgãÛŽýσþ.†þJDµô úÀ…¥¹ž{¤$êIãcÕ×â¢ß‘‡~WL_òëëêcþ}S@ßÊzôØ l4€þ»·üè?zˆQ6Ô×Ö\®,¿p¶´¸ /÷p&üÞ©)I ±«VD. ‡çKþî©Sl&Œ5Sd÷šž®Ž6†(ôsk:¦öø´Ø—E¬ ú†À>ôD;ÔÄiŽÎ3÷~îu Zƽçìû_x¾^÷óuÐ/ˆƒ>o"ô¿¥è?Bÿ§‰ò‹>[â0Laô‡‡ôßëîºÓù ù¾›êªÏ–—@9)Gáó ‚úæ¶Ç‰üÝ[6m4Ô‡ÕWôa…ååÄþÜR°¹sö&.Š¤(,U"=&FNCcS3˜[{gà"<*6!9 ´à—VTÖœoüªõr[û d¿§¯pˆPAêÁèØë e†ÙÇ­?q,ëó”£ñ1Q"ìo%ìë1ì¯$ìCÝ“ç÷=æBdÝ—2öeD¿n&Dy²øª´ìiëêÃÍÆ°ï„ìûRörÙ¯Ÿ ög +-ý|ôCýýãÑ_³j%[ù^ˆk‰R¹}b>³½ì'' LÐÿ„ùó ŒŒM·lý”¢¿Ïƒ Ÿ”’ž•;ú÷ úßô_£ÿÏé£OwùõØèË‘Ÿ=Å,‡‡ûûz`“oÞhÇ$Ï×T–—ó ÈÔ¤øø¼ýz¹»:ÛÛî´‚ƒÍxƒ¾®6ûuÃÃþrC”¦Ÿ{îÞDE‘VÚ M8IMÜnmçsÀ7ðPDt”ĬÜüÂSeU0-Í­WÚ®wÀ°Üííü–aÿÅÈ«Ñ1Ñ~ðv:ì‹ßûÉÙòƒa؇ãÐÔØÈ@gf ªÊ2!öÉàpê¾ûù²ÏËÏ?OyVƳ?6ûç„Ù ì{¾g½ýӭаðikj¨óÙWœ˜ýùRÇ>çëa9e_o6ˆØ·¶å°ƒìgQöeógýYBßm“=E“úËý%lì 0ô߉¶DÉÏ›ßM„¾¢} M@ßÐÈÄÔ ÑÇä}ÿ Ðßý·œ4Ù0 úOÓ5î%è_¿våbó…úÚsgÊNæçfÁÉq(?oG;Xà-£žŽ–†:ýºqy!JÙ¹6§OLQä‹!'¯ `àÜš¸ÁØÔÌbœ‡N®nžýƒIILÉÈ9~²°¨®khj¹tØïÆy&ì †Ó`ÿßâ؇q™Œ}މܬô”¤øXdߟ°ïdoKÙ71Âí§ì«©b] ¥G‡6Qöe¤…}™ñów+,U†}Ü~Ê>»ü”ýpû¿ºû³Äþ  –ýïýú¶Ö€>h±A½¶&E9¹ñ„З&0D‹>}ÌœE_ASWUcÑ×'è[ðÑ?àã›”šž=kèÿG<ú/q‹Ÿ<~ô³ìíîºÝ Q^½ÔÒÔP[ Iäe§§Àïäçíé†ÛŽm$F]­u¸¼ôë–—ù¹¥å\›ë'®(R1hOT&ì“šh€ì[Zí´µwvu÷ò!%1>)Ùÿ¢¤¼²¦®‘ŒÌ›·îÀÄô?ö¿ç°ÿ÷7È>™bÆeÜe8Eö¿$ì—ØŽ ò‡‘a›…Ùf(}ë ûdŸ +-°H–Ã>㾌TÔ}¡ê÷ÿbãœlLŠ«ö¹ì{ûÎ1û3‚~ ýpú´"n ¡Cæ+0sNIn‰’Ưxz±sП|‹ùÝíÍ sŒ†‰è=è¿×ÝuçÖMˆòÒ×MuÕ•åäñœŒÔ¤xø½ƒ¡µ¹»:ÛÛî´²035Æá`ûdå +-þ×Í Qä\›ë¨$ùÍË> œ58:F&›Í-·[Û9¸ìõ %1*6!9-óØ ^qiEUÍù/¿j½ÜÖNÙïëfzÂÈËѱל‰ù×ôÙ3=ö³ÓS“ý``¿›+`uÁœ²W"é}+–«(Ce@p€8u_ÚØŸÏ¿ØìË ³¯#ľ«(û“”¾Y`Ðôõæ¢oÌ ¿šp½ýÒ–‘üª/}7,-Í›œwŠJÊ*ä¾[³vFè›[lÛacçàìŠè úq É©ýòwAÊ;LÐÇ4ýÑ—#?>{ +-aúƒý}=°À7o´·]n…ý­©ª(-æ8–™–œ¿·—Ç^gÈÑV×È`½Ž¦9ØTø)rC”’sM·(ÎçEJ„}ðBKGÏp#r£ã¸gjq(":.°ÈÍ/G;z±êA]S§è+q¾n6Dé8×$ãqçˆ)Š0ì#K•hM\»N[Z¢)œ‰;ví†+ÑÓÛ/(4ò`‘žWPt¬¨m¸Ðrñêµë·ýû86‘ý#¯¸ìOsh&eÿ/"ìóòó²3R“‘ý°à‚aßÊÒ0Уìª*p+*òÙg%f_ÒÝŸ7û ÊH÷S•Dögýqè›BÜô±#*°èÈDýžt€1®èsÐ_@²fÐW„%iSôõ ð¸3·´bÐ÷ôö  ‹<—˜œ†è"úÕ³ˆþ/\ôq}Ÿò··— Ë{±åB}í¹3e§‹ +-ò²Ó!É#‘¡A~ädÛ½kÇ6 D__Wków+ RĞƆ(ñJÌŒ’@ 2E²‹`† 7(#û0@šÚ„ 3K«¶öήî^ýƒÃÇÄ'¥fä?‰VT×54µ\º +-“Óy»«»çá£ÇO~xFØgæf¼3Å>Q öÜÙò’âBÊ~bÜ‘È°`ßÓE»];­,·Röuµ5×’ ¢ì+0ìËrØçh Uì³°·(ûZÄþÜ ¿ø#.ú¢-Q²3 Or /Ëš ¯F¿xm]=# ¶v×nG—½îž˜vØaŠ~N^Aaq)E¿yjè¿ëö2i’å}òøÑC ³·»ëvç7†ÆÖÒÔPW}ö§‹NÏÉHMŠ9ìÐÓ‚„­µ03Å‹MªE©Â&E\Wnˆ¡½ñìÓžH¦›x¡Ç"i‰F&p*‚Î{=¼|B£b’Ó2Á +-h •5u”Š›·îtußë04LÙçNŽ`pÞN<8☄}p Ù¯>[^Z\X—“‘†ì ôCö]wà Œ ‘}Bšêòeh=™9_÷¥†ýùÓeßyÙÿÐ×Ò`>xe%ö_È/‰Òˆ¾pч˜IÎd]}¨i°°,ú†F4j>ú~˜õ‘?$~––‰èŸ*-¯ô/Ì<úoÅ ÿ’Eøoúïuwݹ…Y^úº©±®¦²¼ä‹“Çe¦%'ÄF…‡øxaW³µ¶²4ßlbD>ï5«>VSÅ¿›®+©úÿGÿžhQü=‡}âV‡ z†7áÙØ9ºìÛÀ7ðPDt\âgŸgåæóŠK+ªþtïĶöÀþ_{úúýï¾gØû/ûõþåyÅü‡´jt¡,‚2™Œr×Å]¹ +-³„€€paAÈB¸ +-B€‚€\Q0QP¢ Vë%¥”:ŽÃ8A­­hfZkg’LÏyžwßÝeQ©,ò’ñù¾ç|žï™‰ýŸæÊþ_ì£'O ûMõ5U”ýÌ´ä¤ ,$ˆ²Øn á\$ìÃAw@ t™ºOJ &ûw_M„Ø×å"ûó†þ–¡ÿ¦*ú¿â>úEôñs§1aKCô×[ +-„¢Í¶$h‚~PHØ&MÐ/Fôýö—Eÿù«; ý)š&AÐÿîÛËÏöc[ë8z¸¹¡¦¢$èÇÇÊvlðóöpsÁ EV>æHÑ×ôW°è/Õü¹:®Åð4Ë> ñ.FCäb‰™…%²oï(qq÷ô,¤Ñq `E°_^UÛˆTœ8yº·ÿ,ŒÏaŸLÏäÝûþñpêÑcfxžj—ýïýs”ýcÈ~²_\—I0Iý?Zím­aŠ,¸ û0H<%ûôl$$0îsŸ}õ"Ȳÿ›¹²?7 ¸‡¾îŒès ôIÀL=ƒˆ•èóXôa[×úV"k[{GŒÙËÇ/ЗÊvÊ!çÌ=yŸ—VôÛXô/ ohý§to)úîßÄ4oŽÝ!aö÷žÆ®v¤¹±¶ª¼¤pïžÌ´¤øØhiØÇ~>žî.Ç÷mÄ°®f&$GCúw«¦8íç^è¸Ç›‘}œ&Æ ¼ $( …­½“³ë‡^mÝó a?¿¨´¢º®ñÜŠ]§N÷ ö‡GFÇèüLÞ£ìÿ d6wâìÙ¿¢d¿½°_Q +-×âžÌ])ŸÊceÒp–}‰£½µØj£‚}"‚>^”„7YöÕëþ¢céìÙßÆ°ŸòêØŸú'ç }.g˦«øÕ•Sô¯DÌ ¿a£•ØÚKƒ~h¸T+')úeUµ M‡µ‹þÏjyôIœ¦ú÷&išc£#ÃCæÙ¾Ó§°©j¬­®(-ÊÏ(â¢a_·mýÈËÝÕÙÑÞ‚´´0‡]%è¯ä‘ˬ镪Ïá 9ø¦‰Á€Áx¡£«Ç.°?¬5…IŠ¬íœ 8C#¢bÀŠô¬Ü‚â2¤ŠCgWÏ™>¡KW¯ _Å š@öÿþàŸ§è=™oö75ÔVU”RåÐÂCƒQ8%ŽÀ>ÀGöÑ8a˜@¨@XX:}N»¯Éþ’³o»pìkýým³DŸüê‹}¢ÏžrK—Á’ÒxqM}¨gï¬Â€¡ Yð!a± ìªÄÅͺàÐðÈèXybJ:ɸ¬¢º¶¡чžÖKÑš/ô«¡ÿ×ÑëÃCW/]87Ðw¦§«³½µå`]5ìkAnV:DäI:;Á®Š„Ö››BA3†E]‰õŒý»™¹®qñ©Š¡ƒv}Â>Ñ‚G#báæáí¼="j§<15#;PQÕ¡£³»‡4`Ÿ@qëöÄïïö)Ùÿ¯ÖÙ¿@D8EØon€îP$äìNOI„“12‚eGÉF¼I¸oanŠ*À4A‡@t.(ÙW¡aQ±ÿëg°¿ê•²ÿ ÷Ÿ±VзýÅ¢OÌŸ†>}’.¢oŒñš"úB@ÿ}'gýˆÈè¸øÄÔôÝ9{ ?/Û_]Ûˆèw"úýªèßÒúç“'ÿVÙØÉïïLܾ…i_Cô!ÌžîÎŽ¶–¦úûý¼ìŒÔDùÎ(ØÕ_o7HÑð1HŠ¾> ¿Bý%4Å×èÿÿO9XJ0–Qö p9’’hbfa)°‚aúƒÄÅÝÓÇ/¬ÅÆ'¥e**k <í8ÞýÕ×ýƒç/^þöNÑMûÊ!Òœ¡¹±ƒe¿÷ô)(À>œŒûË>/Ü›“•žš*@ð€³Ñ‰tA¡À’°%ÂÈŠ§d_AôºÏaö5px.û& Êþ«EÕŒèk–D†ªŽ¾JÑW$«DŸÙ­2~÷=‚¾¥@¸i3ì©“³«»§·¯?ÄŸ”šž•“_ùV×5â²Rô¡¤ú#t]µŽþ#f_ý›˜æµ«—/ž„0»w=ÜÔPS YúiIñ±²Ûƒý¼=Ý\$°§b+ßÂÌ„üÞ†#¬(ƒþ2µ¹"WߌìãT1\àí쿇—£%baï(qu÷ò+¤Ñq É»€ýÂ’ò*¸ýòÄɯz)ûXÆöqŒ¦æý¡+Ðû û0IÍuÕû÷•æçde¤&%ÄÅü}½=}ƒÈJ` 2˜àíˆ}Ð@ŸGf +-l`p`u`Ùç°û‹‡}Ž¢ÏÙH•¡*Ð'EŸäªŠÙÛï­ô×`´ÐÍD4[ýQ1q I©Y¹ù…%˜n#¬ªýó +-ôÇ)ú“ZAÿ?OÔã$è“Ž†è÷÷b˜G47ÔT•—îÝ“ èÇEKÃ>Üêãåî*q´Ç$¡›™¬aÐç‘1¾FnO­PÉB/.ttõx¨Ž”©ùz87ÛÁåˆVøo ŒùØß“_TZQUÛx¨õ‹c'`”ÎþéÏd’ÆÆo*˜Ò`ÿGí°?BØ?ϲäPcÝÊ}%Eù¹YP!P†° ?/¤ÊZdµ‘ag +-Ø_ ìëê¼õ;ÊÃr–}ÆýÅÃþ3²¯ƒì¼röžÙüùGßdvès ô‰ù +-ô—/W}=¬e$WŠþ†V"k¨f˜¬—_@PHF›œ–‘›_T²¯’d«ŠþUý ­£?ÅÆ èÁªbšgqSOƒ0k«ÊK‹òsvïJNˆ‹Ž (½>tuv²§Iš›b132|öד©ú£Æ׽Б-®§&×öWè0%Ø_kºŽ¿A(²¶s€‰òØâëT¤gå—VT×lim?ÖuêLexdtŒ:£ô€aÿ_ÓØî Í‚ý›”ý« û=Ý„ýƒõ*ËKŠ +-r³3Ó’Á™Ø ì»@°³ÃLñ-ÌM™Nhh@|Ða€`…X,u6ìóšýW¾>ýËg@ÿ £ÿÌ¢¯ˆT}}‚¾1¤ºÖÔÜ‚±Š­íì%.,úR›œ–™[PTR^y ÑÿòxwÏ™>@ÿ" ?LúÙÜÑÿQmUôÜ¿;IâÅ~èôA=;ÖÞ +-aVW”b9K‡,c"ÃCƒü}·x|ðG';k‘’4] èÓß–Sý%t/_£ÿ²O9aJ/–1ì¿EØǹ±2[ÇX‰mÀ +-7o¿€àíQ;剩ÙyÅeûažZÚÚ;»`œ¾9‡bø:Ëþ=`ÿáÔ£ÇÌ,=;ûÔz7Ž ûx8öéé¦8Ô×TB‹(ÈËÎÜ•ü©Ì¶ ¼!)ûŒ,¯Ùyöð¿ ØyBŸ÷‹BŸ}(ƒ¾*™¡t2}p“ØÆÎÁI +-©‡†Ke±rˆ5sìhiye  ßúE@‹èÿ¤Dÿ)“' ÿпGÑÿ ?'ÉSj´ÚøÝÿ±_7>QßwÀãŒ]]2Àéå¦õ§ˆÇÓyôB@@(B¡<p¡€ èQP(…@‘jq:- µ”áS[çšÆ9¦›vnM³%sÙûóýÞqwM gw,üþ…÷ûóú½¿K¬)Q;')Eêîéí«E?N©JIÍ P‹ö”WÖhp¢GFѼp GúšÐfŒþ—7¯ }¤y¢·»³­¥é ³(?è§$Æ¿äUÆÑ·³åIŠ„,H¦.Ç)ôMñ•ŒyÁ¸Ðiaa)`ì£Z6«ìÈ +-¹½ +- *bTj°ŸûþîR¼ëš[Ú9ý¬QÌ êî½û=þ듧3`ÿê4ûäÃ}ö‡‡.] ö?fì75ÔijªÊIˆ¿ÌHS«”q "48Ðß×ÛsÝZù™Tâ¨e_«„€ØçsÖ›£PLŽ¹?!ö7ü€ìÿoÐÿñ¤CÿûC_÷rãaÎ&ô­p—,N-úŽ©lzûú‡"Ñ8e’:-cûÎ]ˆ´ªFSßô;ºz)Ð?ÇÑ¿ÉÑ¿kbôù6úwq£,ÎaZf”fïGí-8Ðûö–î~?7;3-%1!æÝðMA¾Þ +-9EigkƒËdè ÿÞ”£ýifâ¤øŒÀ ’Í0`Ÿ=$À‹¯ÈUöNRÞž´C7GÅ*Uêô¬» +-ŠÁ¾¦¾±P T§Îû—‡¯ÞøüKV©{ ÙÿÎÔìßäìŸû ¢§«S¢¡¾¶¦ +-µ*À 23MÄ öI …ÜUæ,q´Û®XŽwä[xH¢^ +-ƾvWŒZ1Z3sûfÇþ‹51ú&‚¾y†¨Gßh賓ԡoi%˜ô"LÜ¥­ØÞQâ,s•+èñDèÇÄoIR§gnß™W°»toÕþZ ßÒÆÑÿͧ„þåá‘ëzôN } +-”ÐÿÎý÷ýÛ ýËØeýgNQšíG›ê5Õ¥fVºZ•…,ü¼=ÝÝ¥“ý*›åÖKá,çcŒ£?ƒÏ0óýuOŽOß4=3µì£aXóû¨×J1gŸQ«L‚XÅe•5µõ‡[?ìê9Þ§eÿw`ÿÖ(ûúNû¯\©qÙ¿«eïÇË—>;7À`ì77Ö×B‰Ò₼œìÌtb"&*",$(Ào½—‡ÂÍÕÅíÛÚûè—HHTX°Çä(Z-&ÁÜŸ ìO¡ÿÒïCÿGº¡Ïsúú”¤PD[Œ£ïà´ÚÙÅÕMááE臄EDÅPšé™Ù9y…˜dûö×ll6Dÿ³1è?ž(úÿÒ£ÿ!ú·>¿89ú}¸N¤ÙX¯©©,+.úÛ¶&)c£"BƒéÕæîæ*“â,Wâ*9úVsçÌÖ¡?SŸãúüŒ¼Ð±Ï§ë*&q+Ð/‰³ Qá³!08,2:nKr*ØÏ+,)¯ª©xB;ÞG/HrâÚ/tì21¶Tãuê%ì3†ý«Œ}ÆÄñcݘäDEYqa~N6º•œ˜FRøxaSüÂåm©“ƒYA³bXˆ}>÷g½©û3´s,ûfÕ7sb|&tiN¡?Þ7vèsôõCŸ§HCßÂR€q’‹–XSvNR$éæîéåCQ†GFÇ&$"ˬìÜüÂⲊ}>úGÛ;»q›º4‡¯}¤ùzÐÿ‹ý/n\cqœ=ÝwüXWGëáƃµ@¿¤0o' 3w¸Á‡²tq–8ˆW®XFQŠ„,IÜ#Cÿ)ôMùeŸi¡ÇBÀÙGÅlí8û^>þA!á‘ïÅ'&§flÏÉ/ÚS^µÿƒC¿:ÒÖjäì_¹FkBÏÄSÓ²ÿ³ÿ‡ßûÔ¬ó€âTgŸ¤8P]QVR”Ÿ *RST`?2Vøûz{2©Ä‘³Ï¹Î0/ûÚ¢Mš¹o~ì?åú/ú^:ôµêз´Ìò­yŒ©l|í:Oo_ÿ@Ž¾R•‚5¶#7¿¨¤¬²úó°ýSg>ýíyžåM–%&Gÿé+¢ÿŸñ®“åùTŸ'Gÿ +-Gÿ$.³£õ¥YU^‚9¶=#•ÂŒ ô÷ñòàèÛÙâ"9úŽ¾vê#H=úÓÌ/ÄÉõyAm›aÌ>¶¬XHËÂf•Q!Wxxûm +-7&>1%-›¢P ]M-mݽ'NžF·.rö9÷6Ë$ì?ûØŒŠQöéy¼—[q¨î@ueyIa‘‘–¢RÆA‹Ðà@_p¡»Êœ%Žöb[¼'ãA)’¬h:38“aî›–ýRS°ÿÜ(Ç)ô_ô½xèÏ0ú@Ÿ†>"ŠpŽ‹—.[nc+FˆÎ2W¹)úù‡"Æ8¥J–A9bŒUVkê€~+‚ì%ôûÙaê“|­èÓ »6r…èŸèíîl;Òtˆ¥Yô3ÓRfxH–˜‡BNYÚÙÚüÜzÉ" ?_`i1š¤6Hv†Ó¦¦¾ >}åôZÌÔ±?{Î\ +-û¨§Bîîéí)¢bTêt°(ð’¬khjiïü¨÷9qþâÐðˆvQü‘¿"Ÿ<¥n}k +-öŸêØ×bqã*&ÅÅóƒ`õ‚­èW¦¦ª|Ïî‚];Ñ0uÒ–ø˜¨Ía!A~ë½<n®.Ϋ°-l–SÏ.Á ±?G;0&ÕÜ7+öuî?%Ÿ™?ôKÿÿÑèÓÎÒ },0(Zðm0 oçà´úmW7…‡×z¿€ °ˆ¨˜ø-Iê´Ìí;wìÞS^U£ÁQaècŒéäèßxè?þóƒû:ô¯\ºxžâÄUv¶·à(°_xn6NR•Caøz{ºËy–6Ëé¥ÀÊbîœÙ:ôgꃜBß$Ÿ:öYÝ~BeûdÅBZ+ÅöNR™«›;¦Å;C7GÅ*“ÔéY;P±ÒŠjM}CóÑvìß1`åšû†ízø@Ï>^’C/ ö³UÑÓ…·dSC}mMÀ(ÈðHßšœö#ÂB@†—§»ÌâIIhX/ajàUÉØ`ìO²¹oìoî?7DŸ¥8…¾Ñ÷²¡ÏŽ²Ó¡o‰ý%äñYS~v)èîéåƒú ‰É[±Ãròp‘{«jjë~[GWÏÇ@ÿlÿà…‹CWF®éÑðð‘nMýoÿAgù„­1mž@X‹þ'˜bí-Í ušê +-–fVºZ¥ŒÚºñ¿õ¸FW™Ô Y._¶”¡?¡ÿSŽþSè›ü3æ‚uN‹«³B(ÒR!v ö¹Á¡ÑqÊ$@eQ\VY£©ol†=p³âÂ¥¡aÆÄW_ß¹;Êþ3S±~=2b„±?pö4Äûm-ÍõµDFqa~NvÖ¶ÔäÄ„ØèÈpBëbÝZù™Tâh/ÆÜ_¶t1ʆw%à°`rŒ™ûÓÍ|î›3ûSèÿkþtáϒcÑYPvBÑÏ.¢ýec+¶w”8ËÖÈ×®óôöõܸ)<2:6!1%u[VvN~a1%X‹ƒlaèòëÓgè$ ÐÿÓXôÿ9ôÿþlý»w¾æy³%¦‹©©®,+.úÛ¶&)c£#BƒY˜ }ñÊË(K‘EIãk4I=úÓÌ-ÅÉùq1]Ï¾Þ +-g ÃVì qv˜!a‘Ñq[’SÁ~^a د=Øx¸õC”¬ïcÿ2{LÞ&öñ–d S°O}"ã«Û·ˆýá¡KÎ œ¥’õtwû„FEYIa~.ÔHMQ)ãÀFhp ¿/ª¦»þ—ý:Šú<ã>Ó¦Œ™è4Ú( ^ Q ²á†•£»,,,°ë®¬,B œr +-¸\rº È}ÈY(P„€•`q4ˆb$ˆ¡CÑqMƒ6ÖI;5ujgú¼ïûûíÁa¢â€‘÷¯ßÿßçùü¾ËÊÂŒ°ËëtZªÕ}šýÅ^÷’}ú?® CÕý'O” ªñÚ£?WѧÑW+ú«5l¡î&½-}3 +–­›ëìê.yzAzA¡áQ1²Äýi™Ù¹ù…%Gj¡…µwtõàÏ]@= П¸u{ôÍ'ú·oaô/úgúamý#´°2@?+#§äï#õyðy&ËÊÜÄØhë=‚>C%Júo¨å¸Ðé½òO9{Ôài¨³¿z ¨ÐAófhÄ4…i³gsyn±ÄÛ÷Ãà°ÈY´‹Ü‚âò*p¢ºÅI`Mf‚°fìáìì?}Â~š}²‰ñ˜}¢FßÉž®ŽvÌFEiQAnöô”DYlt†ÃK"º»ò¸;–5t &²CoÆc­6ê>f_µîkÌ]÷Íü-<û4Äý' +-òQ|$¿%ôé7»ù82 õ¢¿m &C{-ÉMÇ41³´fÙ9p¸<¾»P,‘úøŽ•%¦¤ÈÎ-(*­8Ré!ôaq|ׯŒ]»1Ž÷‘Bÿás£ÿD‘(½‘Sß=„…œü†Bÿ:äIÐï;ÙÝ èÿ¡¶ª¬¸ 7+#5IƒÒô•JD>ËFè›2 a u}mÚ@Uô5¨Êµ„þ<>5-(,–Ñì¯\…Šžá6&’ØwqŠwyìgç..‡Ik†“ .JÌéóÆþTÙ‡)ûû½É¿Ý½CØ¿6åⳡÁOÑ õ8êª+ËŠ +-òÊ3R’âã~>R ØÁwqâ6–榤îo~WWgÌø¡¨ûË—Sì¿ +-u‘°¯¨ûŠ‡Ã[B_õýTÑGË·\QôQhk×þ»Yý÷MÍ-m¶ÛÿÞÑÉ…ÁôÃ"÷ÆÅ'¥dÈæ—UVú­Ý TÁ>‚ð®üE‰þ$¤÷¼èÿonôïô'úŸ]8wíbç±ÖfgqA^v& izKÄ7.Û…ÉÜfhèë@– ÍÕï¬ZI£¿L™äúóùÔµ ÙÇ“·Í°¯…Ù‡™) flwà8¹¸ !áÀ~rÚ`®ÊºF`¿«§÷atûß¿0û¦³ÿ5Í>–chúÅ©Þ@Gksc}MeYñáC9òŒÔäÀ#,$Ðß×{×N œ³#ÛÞÖÆÊ ³šÜ—ëàÀÔ¤Ù§!Š,úº¿Àì?Raÿ¿jæ+д„>zO-úxóp^4úš -\ô¡vmÙŠÐ7³°²±µg;:»¸ D;wyûú†„EÆìKHNÍç:\\VUSßØŒÑï=Õf`pèŽîÆøM¼‹Jôx)è_¿úÅèçýÓ§Nötkkn¬CqúiÉñ±Qá!¦XèÕ Ð·4ƒ0¡waôµ0úoÿvi\jèÿjQÅøŠ?5-ÈøQVຩX»I¡¿õ=c¸.ml8ήî;vzíö ŽKö*,©¨®kliëè‚a;™»Šú(ÙW(¡:hÏÅ>™´(Ù¿ùWÄþèç—†à¬< ìwwkkiª¯©*/)ÌÏÉÊLÛŸ°/&*<4üðò Ý]áºt°cY[˜™0!z`®û R÷ß&ŒÌY÷•î/t€Ô[LìøÉ×újOÝüY‹þ[3‹>¦‡cÂþY³ì8\ž«»Päé¡…†GÅ@ji™Y9ù…%å€~SKÛ±În´‡gÎú£tp4úÜJn^ÐÿžFÿîWÓÐï=ÑÕÑÖÒXW]ãôã¢ÃCýv{íÜáîêÄq°µôßÛªÂ\¿g‰× +-:Êè/–_õ§œBj)+¨á*„}˜;#cs¨ +-O/¿ÀЈ½q ûÓåÀ~ie5Ì[{t ÄÄÐ¥Ìþ,JP£ö,“¦Æþ¿ìߟD ë¦mäÒÅó0nÀa¿¡öHEia~n6D±'8ÀÏG* =ø<'2ÄÒÜ×}<]¨ûÚZŒ5tÝ_ñ*Õý…aJ}¥û*æ«¡?õ:£ÿóŠþ +-•¢¯½nýF]¨\¨è›š[Ú@`'ßc‡X"õñ Þ+KLI?›_XZq¤¶ ©>{îüEXÃ/®^'±Ýùú›Éû³åö<è?ú÷Ì¿øÄø«c¨}Až€þÇí-õÕ°ƒ8΄¸èˆÐ@?/Oœ&BßÜÄ؈„©Š>ªú4úo,¡ÿ2Þ4ö£Îþªß­^˱ݘ†FL`ŸPÀ؉<¥>þAÀ>rB=£´jÆGípZ~¢`ÿÚË`_1mû_QìŽ _„–€ÀmÙÑ‚@Ï(-*È;(OOIŠÛì{"7gG¶½­•…bêþ&] ©û˜ýŸ[÷Ç,. û$QºîÓðãOÚôŸõë‰þ4óç.ú}(ú°w8+ؼ­€¾‰™T.{¶£³‹›òòöõ ‹ÜŸ”’!?˜WPTZQ]‘µwtõœ„ÌΞ»pqxäÊþ]ŒþÕíÇgF-â\èßÄè`ôÿü F¿©¾ºÐÏ‘úûöF„ùûH=E|”&ËÊÜ„id›‡Ð×f µSE_ƒÚ·%ô_ÂS²bÍþJÂþº :À¾á6¦©°Ïæòø‘DêûaОH¸/S2à¼,*«¬ih¢™@ì_ö)%Èe9¥Âþ³O„f +-³OK¸ Äþ•‘aLHf¿µد,+Dä©É ûb¢ÂBý}½½ŠŠibfiͲs`s]Ý…"O¯Ý€~hxT̾„äÔ yΡÃÅe•ÕuÍ­Gú}ý8±áËýñ‰[ý{ý©DÿñÜè_ƒ¤Ð‡<Û?jj¨©,-ÊÏ‘g¤à8ƒü}¥‘€Ïã"ô-L}¨[:&F%þ2e”Ê$:Ã_ÒSÇ‚fÿMÌ>AtjöáÎ$PØûn±ÄÛ9#ƒ²‘•[PTVUÛ€˜€ó²ÿ̺._:ûßÞ'#wûÖž9@dhpàLܗǶ67Ö×T•—@ÙÈÊLÛŸ(‹‰ +- H¤±ÐƒÏsâ%pgš¢ºo ¿™ªûZ ÌÉ̺¯¡`ÿ×Kì#ö`öq¢Ääþcùþ?Àè?XBŸŽ‡ ¯1[ч”Z¸èCׂ­32~ßÔÜÒ’â8ñøB±D +-Y…†GÇÊ÷§eBç*,)¯ª©GèÿøDoìßàä…пý%ìþ·ÓÑübèOaô'©@)ôÏ <»Qž 5UeEù¹Y€¾,Åéë- Üx\¶=I¶ŽB_sõ;°qý7gEQù‹yjXQ¤¨ÀÍŠ‡&AÝÍútŽíö'7¡x—÷ÁaQÀ~j&°_\^L´íìþSfîK¥Àþö|.ö+™ûŽfÿΗ„}Ä»3§Oõžèî<ÖÖÒÔP{¤¢¤0?7û@zJ’,6:bOp€ŸYâæâìȶ·µ±² ê¾Þ&ºîkάûÿg¿NŸ¢¼²0€ÑD§˜‰Š2”ŽÉˆ‚È"[š}miÁfiéYš}ß‘UöšAPP( ®”DDƲ¬Ä"5¦¢“15ÉL͹÷}{…V"p?tÿÏ9¿÷9¤*ïqÝ_&öÉDÑ—œç>ñó…âZ­è¿®è“æ‹}ÈHýOöEÿSm]Šž‘©¹•5Åtrvõðòñ +-‹Œ9•˜’–™SP\ZQ][ßØ ËwñJl_ÿ N‹@ÿ!}¡¸È \8ú¯$¡ÿÅèðÐlß5Œ~ÃÙꊒ¼,@?6 +-âdÚÛÒ­ÌM0ú&T-„¾Üv@ÿÏ°n<ôׯ¡¿ÔO0‘ä4’TRÈ`)ää +-ŠûU€} +-اё®lŽ_PXTlBJ:°LÔ5Àäu’ìß!ÙGc7óxÑìÿ[œ}ìÈÌ7Óˆ}’‘Ûƒ}½Ý]¨n´67%•¥Å¹Y駓`ø‚|9l7ÓacM³056 Ñ=uØGuÿãÝ»vÊ¿±î¿§î¿]öÓÆ>>à°û¿äCT¸. ýô•†¾óßPôåwîÚý ô,%”‘¦Ö!Ý#TCc3 šµ ÃÉrqcs|‚aïâ“N§gå—UBRMýKW»º{ûoY!ô§QéýF Ðÿí÷£ÿ£ÿð+"ÐÑ;ú—;ÛZý3%E€~Jì]‡íŠâ¤ÓÌM ©- 5•ýŠ +-(My9¦ &}©5ô—ò‰X!D…@ +-Y’ý½ŠÊ*Ꚙ}S Ú±ã'œÝØph†EÅ%¦`&*1ûíÀ~wïM`O9xˆ}þÜ-”ýßÞÀ>¦dbüîô›½È’Îös-˜ý2na^vFjrBlTxH Ÿ·§;xâ`gK?jifb¨¯wXG[󠚊²Ò>\÷wγî¯cùó³ÿX„}ûóEм†þº…}%eHH[ç°ž¾¡‰™åQº­#„äîéí—œš‘WÈ%Ðo9‹A¡ÍŸÀIñÐ:ú¿.ýÇýbè··67ÔAÝ*ÊËNOIˆ‹ô½Ù®Î'Žƒ¦E ¯®¢L¤ èË +-…If)%Võ—;Æ•÷D­ ©bËVÙˆ}˜C%eUuMm]Ò †ƒ“³›§·0 `âéŒì|è5uÍ0}W qܼ…ØŸxkìÿ:ûpd>žy4ýðk’ý183±&0}ÀIC]MUyIQ~NfZJb\tDh¿—‡«³“#bmenjd@¥èÂÁ©®ŠTáÕý³êþÆÿƒº¿tìwHdŸ—¨À}ò‘æ“A=•ˆ~Ç +-FÿÍE㬢¿ý¡èC<ªêŸÒ¥P ŒLÍ­¬!!¦“³«‡—PhD4T­´Ìœü¢’òªšº”´­ë(¦¡áQú_?œ~›÷ÖÑÿ@ +-׃û°x(ª[Ý]ýƺšÊÒbœ' ìïÍvÃèqêjkbô÷`ôwÈnÝ"„¾´ Ë5ô—òÍÍþ’}™?}´e›,@7'fÿ Á>T†£“‹›§O@p8b"#NͪšúF( öocöÿrìÿWœý_(0{0|ˆý'˜}ÄÉý{S“_Ž‚'ý7 t\¹Øq°¾¶º¢´¸ 7 ‘àËa»¹°˜ :ÍÂÌØ +-¬h êþîyÕý÷Òýåc»ÿ3rÉ~Fßfbõ¢/Ùü×ýE›¶}M-H‡jhlfA£Û0˜,76Ç7 8,2æTÒéô¬Ü‚âÒŠêÚúÆæÖó°t×{nôCH£c_NNÝ»Rš†”`ïžý€ÌÇ}ë_p‰¡/yóæþ=ý[ý+íç0úeÅù9€~tx°¿§›‹“ãØQK3ýƒªÊJhÓvAš}ý s¢¿ìI®È'bQEÖóØG)Äþ>¥ªÈ =c3Kk;G–‹»—f")Øç’ìwØç±ÿˆÏþ Ô Ë>?Ä> +-š?`‰2Øß×xéB[ks˜RYÆ-ÌËÎHMŠ +- ôóötVílaÍMŒôõ(:Úó©ûH¾ûs±¿ÜóùnÙŸ&ØöüGAÝ'àGÿ¼¢ÿãs2£éU…¾ÐPˆ Oš¿ž0_RÑßK}mŠž¾‘‰¹åÑc¶vŽŽ»§·_`HxTl<ì[v^!·¬jjnm»péjWwO_ÿ Ž¡ÿà+þ§2""Gÿ {7oôoè_l?×ÒX_SUV\è'Š ðñtwqrdØúÆGt!NÕJûxèoÛòìýõkè¿«'˜ÎuÂìÃTâ5dÛv9Ä>ܤÀ>Üœ0‰¬“î˜ è©™À~yUm}Áþçˆý`jñìÿgûäòÙLj͑áÁ¾Þn@šGKSC]MUyIQ~NfjrB\tDh¿—‡«³Óþ¸µ•…©±†‘W÷ˆºÿ—Yuÿ~Ýÿƒäº¿Ì#úîÙÇ=ò9Q$!U ?"™Oï±U†¾$óq¼¢ÿ¤¢¯À/úºG¨ƦVÖ6Çí™Nή^>þA¡Ñq Éi™9ùE%åU5u °oíô¬Áá‘»_LüýxåDî1bé‰þË|ôñп;ÂC¿ƒDŸ è§&á<}¼Ü]XŽv°i€¾ç>…¿aô·èÿq3?L²Q­¡¿ôO„ +-4›¤2 +-9yä„‚â~5 ¸;õ M0ûLb"04"&>953·[^]ûYS Ü›H‰~qö‰üi±ì¿°#øýwßÅ©21>6:<4€X¹v¹¹ÒP_[]QZ\›•–’x*&2,8À—Ãvsap`ØÒi–f&†úz‡qÝWQ_ö̪û™‰º/-Z÷ß3÷—˜ý^qögøìî#ø1ùØ|>ú3âè÷®dôç4_¨èKEÿCœÇœE_YýÃzú†&f–4º-ÃáËÅÍñ ‹Œ9•˜’ž•[P\ZQ][߀Âé¼| ”‡†GÇÆ'P¯.!ûüsóÙS’}ìÊÔ$°gèVÿžëhÛZ›ëÏž©,ãæ-Iñ±Qá!~Þžî'í€+sS#*꾆ºêIu3®ûuÿýtéÙº3ÊcŸ¸ß¾ì?XÀ}?&ÿÅO(¾É˜ú(›þëÍ'Ð߈‹þfIEÿ€ª:4+] +-ÕÀÈÔÜ +-R±str>éîéíŸt:#;¯[Vyæl}csk[ÇÅ+]×{`Ù ›±ñÉ)ápx§ØK8Ö ý~tºaô?«­.çúÉ€~h /òdÚÛÒ}C*EGKCMe¿"}Yô¥a®Uýwñæfƒ€ý-[ewìïUDE„`ß‚FGL¸zpü‚B#cý,Ì>VâÁþà푱·Ë>o +-EØ'ë$ÄIÜ'ûûzº»®^ºÐvfñlMUyIQ>ÜÉ qÑ¡Aþ>^P÷™ö kš…™±!££¥yPmκÝß´I¸î·¨Ôje’”…¬“ˆÔ÷±ü >êùDÑþ"O®Vô¥¤ˆ„Šþ¦MØü9‹¾ÚAM-ÿ±_çOUgǧKœ¨)3Ú(HJ]Q£¸ÇÑ:Œ *Šì ˆ‚‚€ì‹€€€ìû¾oBAQd'  b&jE” K„8±bê¤>Ïûžsî¹— © K)ç‡ûÜçy>ç{`";vîSÓÔÖƒÐ?qÒÂÊÖá´«»ç9¿ Ðˆè¸Ä”ôóËÍ/,†K«¨®­‡SÃï°{xkì‡ØôñÜþ»{ûuXô‹>” èûúÎ6–f'Œ} Uýu +-Ì8 ús¹iN¡?¢ìKQöa3ÿ²x©üJ`ãf(`Bå†ÎaC#sK[Gg7Oÿàð¨¸$aöoµ`0ì÷ŒÀþ¯ïÃ>¸¸ôõö<ïê|ÚÁ²ßrëFCý·Õ•e¥%Å…/dg¦§&ÅÇÀ—§¿—ÇgG;ëSfûGëh©:°Oy×7JŠÛ¶nÞ„¹ÿ%—û²üÜÿŒÍ}ÆýéÓý1d' +-ì÷ö©û(?þ¢ùý^‚~Gûÿú#˜?g>™Ã¡¿ ÎKQé›]ÊûR×Ò…‰@蟲¶st>ãá埔š‘™ S).)űÔ7À¡±èw<íìzÎÌ…|„úwZ ¯ú—È@ýð`ÿsžnζ–f&F8OU•½»ýÍ×)¬‚¦"èKô¥ôgL¡?`UÙÏQeÖsÎÜÏý/äö× û šÀ¾±‰¹•­£ °Í°_$Ê>ùêÄ]xö¹MüåÍ ¬â+šû”`Ÿòr·ñÖ͆ku5Uå¥ðåy1/'+#59!62À×û¬›‹“½ 澑¡>¤ˆÚÁý{wïܱœ’û2˜ûŒû$÷?åçþt†ý‰äþ(²¹¬²šcŸ¾È /}Œû?}^2æ÷±S¡/cŠ>¼‹/OJôÅš?5ŸEÿS.ô‰ùóæË }Æö;wïÝPMC[OßЈ„¾½“‹ÛYo¿Àð¨Ø„ä´Œ¬œ¼˜IiyUM Ïìî}ú2æÐIBÐ|ó‹è©‰¿5Þ©½ý{xf,úEý$‚¾ ïhkinbdxXGã +-™çV@ͪ•òTr0ÎyŸÏÃG_òÌ5M¡?v¸¨(Ȇûóö—¯\½fý&Âþž}Ⱦ¾¡±©¹•£‹;°‚ì§Ï¦ìWá—'ÃþãØû»Ègÿ”}ÜÆ>R•OŸ0ì£0×ëj«*®^¾TTŸ Æ$'ÆEG„úótw=MrßÄø¨ÁaMuUÌý¯¡GÄä>.(²OÄ™ÉËý‰éþh²µØoà±UÙì1?Èâÿ<æ#úÝü/0I ™Œèk¾ß|˜EÌú_c諨ªCS9jlbÆ…¾PhDt\b +- $7¿NìjEUmÝõƦæÛ úxeðÖGÏìïÌ} ú¯è÷<Ç+ƒ~6 4.º +-Ðwq´µ2716Ô×Ñdæ è¯ô— ¡ÿÇφ ?m +-ý±{„¥àAA"NÈö—Qö ¥À¾š¦®þQ¾“‹»a?ž°; "Ì~çh±?ÐOŒù±óéƘÖføø¬¯­®(»RR\˜!;3=%)>&2Lû–æ¦Çêëji"¹¯$”ûËØÜ—æåþl’û|÷%$ôL ÷Ç„ý;û?>ïî¡îüôé§æ÷0èß™Ôè1ÿ÷ó§óÌÇÿŸúÒâC_‰„>LBWßðØqSsKú¾Áa‘1ñI©é™U…Å%Wðë .¬©¹•y“Ã÷pÿ¡Ï\Ùpè?æЯ¯­*ô úñÑá!>^î.ŽvVæ¦ úûöô7­_³šC>†ÞÓ,Á49ô§Ô³G,ûŸˆ²/û…lèr† Edÿ š°ÜÔØwug”HNËDöKû 7nQ$†°ÿŠ²Ï[Èá÷ñßCÙ‡…|-`ÿ…HZ¶ÂR35•å¥%àL^NVFjrBlTx“û¶V'O@îëéhªAîïáçþ*&÷å˜Üt¨û³ˆû”}I6÷'–ûcÀ>L_ähZR÷~Åñ5Ÿ~|Ñ.¼}kò¢ÿ›æSôÑüYÔ|üÿièË ‡þú{ ôÕ4uô ôOZXÙ:œvu÷<盜–‘•“‡Ã(-¯¬!Óhôïó?¾^Ð-zc¿Ž|cÿ½18±Ñ/%ègruwq²³²05>ª¯«©èïTRdæ¹|ÙD_†ŒSŠ§Ð4§ÐÛç7ØG'æûÈÄ2dbe_y?²o€ì[û D`HD a?O”ý6ûý¸“”ýÁwaH‡öÁ}d—²«óYGûã¶÷ïâZÞl¼V{yõ2,f~.P“’äïãåqÆÙÑÎú”äþ‘Øûö+‹Ï}XSd‡É}\ՙ¹ÏdÊÄq”ØÏaÿîý0ÒŽg$÷Á}€Ÿ>}`> ýgO˜Y¡Ÿ;©Ðoþ4Ö|AèÏÄ¿ž }0þþaB†1uCÿ”µ£ó/ÿ Ðˆè¸Ä”t˜D~AÑ%EUmݵFÁ,Úa]ô¾~óèÿó}. Ð亊A¿“Eÿ6DA¿¤¨ ÐOfÑwu²³¶0=~Ô@WKí ú0OYQô?™BüñìÏ°?—ϾÂÚ _mù«âŽ]À¾:°ìøI kûwdŸlå{²ÿ–²O¿?q-‘ý¾žnÚ— 5ÍM#ÕeWJŠ ó!HÒS“âc"Â|½Ïº¹8ÙÛ`îèiór+?÷aî/ ¹Ï¸?{6Éý‰ìþh°ŸÊc¿û’Rƒ}Iráïúáȧ¡ß]Ü ¸¡ž‡~ê¤AŸ7êßh>þï³9ó!ô`è/â‡þV^èkëÀзwrq;ëícÈÈ̾p±°¸äJYEumýõMÍä¶ðŒƒèîéCô_’ë¢çõ†œ×ÇC¿í‡{ß‹A?&"$ŠèŸdÐ߯LÐÿjÃZ…/W°èÏûÓ\nœSèó#$…„(ûR„}iʾüŠU +-ë€ýmÛ‘}Uu-=dŸ*áí“œž™“WP<ºìÓ½dsØïí&›ÙþzäûïZ[š`7¿­©„ånòr²2Ò’b£ÂCýÎyº»ž&¹obLr_]4÷W“Ü_¼è‘•A÷‘}âþ,Î}IÆ} a÷ùŒã,?"ûq|öÉD[Zý>¢¹ß…ðƒü(>ßECÆè·¶"øèÇMô‡7_‚1ѧæÏ"æ#úh¾Œ,üó “Ð_Í}e}è(€±‰ }WwÏs~!áQ± Éiç³à¬` +-¥å•5ðÑu£©¥õ;¸¬‡ÚÉiu÷úìmñŽkÔÐ/æÐ ôõôíýczZê€þ®Û·m¡èËSô¥…ПÁ¢/1…þø<"±{+ɱ ;Ù_ì/^JØßÈ°¯¢ª®­G”°±?}ÆÃÛ/04R”ý›•}‘ÍäØï'ìwubd>|@½¹Ùx­®¦ªüêåKEù NzJ"äïãåArßÒÜr_hî¯U€Ü—_ºdÑB¹?Ë.€uesŸ¬,ºOs_’Íý äþGc߉²ΰŸÏ²ó¦í1€ó¬“ÀO$¿¾¸Ú·qïÞë,úù úá}§ÿeôG4:kþ 4Ÿüå\èKËÀÉ-\´d©<„¾ÂÚaBßÜÒ†„¾—P(¼xSÒ3aE—`Uµu×oÒw/ýäêì"è÷‹CŸžÖ¡=õL,ú9™éÉ ,úä-Žèk««rè¯SXµB~)})ú’,úÓ¦ÐG +-\]¤S°R€ ¹…ÀþJd3a¯Šªaßl(û…£Îþ›Áׯì“$é"Ù†ìß¹ÝÜÔHÈ)»RR\xñBvfFjR|LdXp€/É}[+Ìýÿ°_çOQ]iÇ«’)MR–„ 64Ѐ, +-n8Qƒà‚ŠK‚Q£Á˜d’ŠQǵ\K‰I`$ÊHÄq EPeWÙ7;-X‰3U£èdÆÔ<ï9·oßÛ4‹°¸?Ü?àœ÷|Î÷,ü`nËýI>Þã‘ûžä¾+ôq`¹¯´P ¤ÜÜ7áî¿"¸ß«ë¹ÿÌØ? öiGÁ~îõ"¹_][Kð«§&òkk««øÅ[p=—¡OoüÉçý¶Ìï%˜ÿ +-7ßD4k®°P²ÐwÀ²»’ùžýñÞ>“d¡¿dÙŠÕ<ôƒCBwïùû÷ÇÄÇ‘:{ž]¼×²sóo0ôÙ{KÕˆþƒM; +-ý†¶Ðݵcû–ëVÿe)ÛPBßO@G_eMûÙÿÍ~f8@ÆÑïQ¿>CöE'8Œýzö]Áþh¦±?÷ƒ@bÅêu›¶lßIìGF6Îþ-z‰JÙÐìÓ|û ÚÛ> ¼4ÎÕ+©)’Î!51¤Ñ÷ïÛöÍ×,÷×­YÉrÿ£f¹?jÄ0wÊ}G–ûD9¹ö™û}ip»°ûÏ„ýÄ>ßÑ4:7K‘šè}À_w _ÈGçWV”•ÞÔ]»iœBÿÀó~só_hÁ|,6?=¯¿NÙ4¡g¡ïH¡ï>lÄ(yèÏCèB¡¿rͺ<ôÃÂ÷îÛ0úȱxlKº’š~U|mU²3¥¹­m ôïáPuúžýM ý?3ôgM÷›äCè6Ôu°¡¯Ô£oÒW²=èwîg”ý—ôì¿.aOSWw‘}ý/–®X³nÓVb?\Ï>•I3öäì?4œOããù›Œ}Ї¼Jt¹öiDÕu5Õ•œý¼œ¬kép'9ñì™Ó€'æPTdÄwc¹¿eÓz–ûŸóÜŸc,÷ìíT6VJKÜsŸ$êÒî?cöSÒÒ¯eå;Å%¥åä~uM èǯšÌ//-)?å9C¿æ÷–™/†>ÌWX*­lTvöN-„þB„þç,ô×oÚòׯ(ô¿‹ˆŒ:ƒµ?}ælb2î\¾øtç–WV×Ö©Ù‰j¼« }œ©&Ý™zÒCÅÏ”QôË Ð?yìÈá¨HB'C¡HJècCGËÑ@Ñd*ì§l;{ÐOmöÁ„9cC;ÄÕ}¸À>”˜» ðc=û!û„Dbò¥T‘ýò`ÿ±”}þÕÍèÏ4¤ÚzúVmuUEY‰.7¯\¾tá<õÔñØ#‡aËýÛ·²Ü_Þ<÷lj¹…ìmUÖVJ Å@Ê}Á}ûœ}÷_èt÷ŸŠ}?ûö#¾?p˜³^—›Èý¢›%¥e€¿²Š}• ¿¬´äfV>­t<´Îsô±ðúdèûu'ô[0ÿE™ù„¾`¾‰h>ÖZa¡´²VÙÚ;`¹ÅÐ' ý(ô—óÐß¾ãëoú¸o‰=~Š­<J÷Ð*)«¨ª®½¥ÖÔké<éпÏÐ$E¿•ÐoýŸuè׶ˆ~8¡¿uÓº5+–~! ï/¢ïî:ÄÉ£oÎöSþK=èw¯}ìcr­möG1ö'ëÙ_¶bÍú¶Ø¯Õ±ÏÞ£-±ßÆkTò•¦ Æ´ñŽö¶†¿H…Üçø\LJLˆ?}âØÑèƒû)÷¿Ýµ“åþZYîÏòŸÆr¬Ï}7—ÁNŽƒìlm¬• ÈœÜïg&ºß§˜û]ÍýeØcìÓûíÌYà“z%#3;¹ä„ûeååøÊËËÈüâB,{nvfÆ•T\·gÏ0"}\¶_mëÆè·Û|¬1¹/7߬™`²TZÛØÚ rtìâÆCßk, ýiþ³d¡¿–‡þ®oqÙFî?}ô؉Óñ ‰xeñë¯,œ¥ +-ÖPšÛÚ;ôùqú½çÉ8úÕ•-¢¢GÿãÀstO·Ñ#‡3ôí{ÐïÒŸtš…A&ö_~Yd¢ßýÁ>)aï *áí ög3ö?Ø"ö#"coÒ–ÙÿõiØž¤ ZLªº®†jáõ¼œ¬ki—/&3âbc!÷÷ìe¹¿™åþ—<÷ç ¹?¹ÿ6 1Ìc¨ëgŒ®ÊÆJi©€û<÷™û}[pÿÅ®à~³Lìӎ°ŸÌš3+ÑYPXøKJÙWò‹ +- ðÄ¢EÇ‹w-Ð$ôƒ»3ú­˜ÏÑ7b¾ú0_a©´²QÙ!˜œ‡¸õ@èÿñOo#ô' +-¡?Ÿ‡þ—,ô7o¥Ðݽ¡(&6ŽÝµÉ/§Ñ¢ç]ÇUK'©¦NÍŽÐgæ? ú¿¶…~a«è/Ó£?™¡?ŠÐwv°·ú +-sÙ~â¼Ûù‡ô;ý3Œýv±ï5N`Þ‚EÄþJý0‘ý„D2âj&Ø/4Îþ})ûmw¯+ᚥÐ/(Â!ª¨ª©£S¤½ÓxWDÿ>Cÿ‘´ŸþÛÆAzlÐOôo7B?HDÑ‚yúã¼ÚB¿wú]èkξŒ Ó×Ìd컸yŒÐ³?‡±¿„ØßlÈ~ÒEcì7°ÿ¨ýì?–³/>LùË´±A‹§©º®†M,å~Nº|éÂy -ÂÔ"÷ÃÃ(÷·Qî¯sÞœ÷f͘æ7ÙwÂ;ã„ÜŠ·ª“ƒ½ÊÆJi©ÈÝ7cßKî~§ÿS³ÿ¾”ý `ìè^ý~{B`¥é‚ %ô7oX»jywCßù­˜ßGg>}2ßBie­²µwÀòº¸Áü‘žc¼ÆŽ÷ö™4eªÿÌwæÎ_¸øS!ô7RèSèÓ» +-+}ât|¢)%5ýjfv.C¿¬¢ +-H­©×òpºGå$G_úíG¿I‡þ=ô‹Û@ CŽý†è›á ÙÏô»Æg”}Œ4š”²÷ê`—¡#<ûSÚÍ~±1öÿÕŒýö¼MeS1Thhï6ÜÑÖÓÔÖTU UŠþÇ~>Eu¥q¯šÑ$šµtRq4ì‚È"‚¬"k³C³É¾4 BEÀIÔ8*„€ÑR´E.ˆlƒ¢ÑX–¥1 A1¸Ä%“ròfjj~çܾMß涂mª8/ú8ý<Ÿû=W¯\FîC£æÆ‚ +-´äÐ6÷·²¹Ÿ+Š I>^î®'ûå¶Ël¬,–˜šè/Ð¥î÷iî³îOÃ@3î¿ÃuÒvÿÕ°ŸÀ²¿ýÃRŒûÍ­èýöÎÎó]]pººÎwv¶£ó[qÍõÒÏëa ¯ëý„q…¾²ÌW0ÿ™ùtKf0æãbçâf54µ±,úFÆ&¦K,¬l–Ù.·w¸º{!ôƒBÂ#E±ñ‰lèo%¡GÕþ‡JðªÂêœÂ5ãëŠÐ¿|åê5MÝ=½t}Iè3èK»é,ÐÈÑÿï0ôç ›ý +-9ô73èÇ1è{rЧ(6僿Sôߣi4¾JåìS%¦ÏdØŸ§¦¡Åa_öýeìgŒ€ýÛ”ýdl™Tác_ÉÐrÙWH:¶ÈÜôßîíÁàÊr¿ã\"ÕTWÀ#ä~¡|ˆaRtDrß×ÛÓÝÅÙѹomin÷ êëéêhkR÷ç°îÏwŠŠ¹ÿ*Ø1ì“”°_´•UTÕÐÜ'î·þŽŽŽÎNü€ü6b> ýš*"Ä}E}Á /?èØü)ræO—™?æ«QóõôÂ|3sKk„¾½£³‹»§·/B?,"ßUqJª|è"ôñm­ ßV<©ÚÎuÈBŸìNïíþº<}üäéúÌúŒz†Ðÿ÷o¿‘hz0ýŽç¢!‡¾•¹©‰‘Á]-ú‡²èÓ?ë1¾ +-®“øØg”g©­ãóد`ÙïPÂ>ÜÑ°ÿ?öÿøÏ32¸lîß¿7xw€Žn÷7oHs¿³ý,L:ÍŸû™ÈýäÄø8Qr?ÐOèåá&pr°ƒûVpñ"#è¤7_GKSC ó<äþt™ûS¹îO~ãî¿2ö™JÙ—”­údwž‘Іþs–‡ý§,úRôÑKWÐ/æCßßÇÓMÀE_Cþ¡Ø¡?¡þ›>Š±ÿ|öñl51%ûW,L±á•gÿóF1û +-“;ôH}Âäþ Š¥¿¯·§ÉrýrÿÛ ç1¿-M õ'Hî—Érr?¹Ÿ–š’”°26:2,dE€¯§»«ÀÑ~¹í2+‹%¦p߀¸¯­¥©®†ÇëXÝÃ>6ö½Xö“ûYHÑœÜ|¶DIîÃý†3MÍ--­8--ÍMg`> }ék*?7·›EÐObÑ÷Ryô9”¢ù“Gbþ\j¾ö|Ü©Ì7]bae³Ìv¹½£ÀÕÝÓÇ7`EHXdt,î6%5 ¡ŸÛÝ%ú5u'êšZ°4ç/ÐпNj©§·¯¹4HBŸ]L£+&Îê°ÁÄ¢?HÐï•¡Q†~5ý .úŽvè#Eôgó¡?Iºè«ÊQÂþ”)%æÈØ7æ²:œýbû)û$ZXög_:¼£™]¶Xèô>}BÙÇCu ŸÎ/rOÕï.]ìêlokm>súäq£C¹¿¹¿1szT¼*.&*"48Ð_èíéæâìhÜ·¶„û&ÆFú tᾆºÚ<ÆýÙ³¨ûïs_ +-¿¢û¯9øÇÎ~h¤(Ž°ŸŽL»IŒ$1ZYMÜ?YøÏ4Òsäן$æWÓ»=Hîv7>©xI¥ôãD‘¡ãýQ›O.ò}jþ¬ÙŒùóÔÔ5¨ùú†Æ&0ßÒ¡oïèìâæé-ô ˆŠ‰[%Æ;j]æF„þvùЯ¤¡¦¹µ­½³ë"EŸì i¥þ»} ÿøÉÓ!ô‰ù£CŸîÍ0ô²è÷tӡ蟕G¯Rôm¾Ð×1ú@_µÎK°oÁ²/T`ØßKÙ¯fØ?ûg±Ïæ>_6÷ïßdÞªa’ûWñZEîŸýWK#'÷‹ +-òˆM[²7mÈHK]”+Š  +-ðzy¸ œì¨ûæf‹MŒ ôõtu´55ÜgrŸuÿo¬ûSøÜç þ×õwŽ™ýÕkÓ×›vîÞSP´ï@±äHq¿¶🪯?S_ +-ä×ÕóËŽHŠì+*س{'ùž®Oã}ò9æSòyÍgBŸ˜ÿ‘º†¦¶Ž®žþB˜¿ØÌœšoçà$póðú…„GŠbã“V§¦elØ”½…|Oó +-Šhè—IC¿±ûrþ·—¯\½†ÐÇÆÜBèceîÝgC_¶4ò[óêÐÇÂ\ľ´rÐÏ{.úÆ2ôçpþP¬Äú*|øØ[ûz/b?e¿–°ßŠ1ûWYöûùØW|ªŽŠ}äþïìc•ÎðÝ;ý}½=x®åþ¹á¹ŸŸ›ž>ß¼1Qš"NX¼"À×ÇÓÝUàd¿Üv™•Ü_dd¸PÞýyÝŸ:r÷ÿì±#ûB°!"ÿèšôõ›²Áþ—yù…_ÓÜ/‡ûÇj¾©ƒüô¯«û¦æÌ/§¡ÿua~Þ—¸ÕìMëÓ×"D@_¨Úè+Í|Eó§È™ÿžœùÎaÍŸOÌ7Zó-¬l–Ù.·w¸º{úø¬‹ˆŽY™ NÁ*sãæÏq«9¹ùò¡R1ôøég²/wîÒ…ù•ÝúC+3"ôe;#_Jdc°0¤“úÑoúµ@_ƒ~¨úèß3œý·øØŸ; +-ö%„ý㧚(û—/2öñ^ež«œ×꨺…a2Ä„}:ÄÌ#÷ïbŒûnýŒ9æÍýr’û´Jwýó‹-ÙY2Ö­Yœ£¢ÂCƒý…Þžî.ÎŽR÷—˜R÷èÍ×ÑÒÔPƒûsøÜ—ÇýIoÈý—dßZ}ñê5ë2Q¥_ìÈÉÅ ¹¸¤´ìhE௩¥§äWU-+-9ŒÐßû՞ܜ¸ÒM™¸Q±úÖ*‰þ(ÌŸÊ5¦œùjšZ0ÁB˜oºDj¾£³‹»§·Ð?084< +-š˜ŒÍØ…+Eè“ ýrÞпICÿö²-ÒJâîËË-Œü¾HÑ¿+C»r‰A¿áÔqEôÓ‡ÐrÑ×S†þÛè«ôQdò0ögÍþàÅì§ó³ßΰ²ßDzÿhììsÚE–û¤^hîwÿôÃ÷Êrÿàþ½…ù¹ÓmŸoF™¦¥¦$%ÄÇŠ"ÃC‚ü„^n.ÎvŸ|¼ÔÚ+â¾:ÜÿëþL©ûÓFäþ냬ìûÑTœö¦Û`T^rîKŽ ø+*+«ªª««ª*++ùG$0¡_‡ïè6ò|Z·&EL‰òWeôùÈÿ‹Œ|Eóßå5W¨¦NÌ×%æ›À|Kë¥bçàìâæá%ô  +- ÅÆ'$¥¤¦áõ„ûÄó)7¿p/}>­’…þ9YèOC¿†þ=Yèc[ž=“…þ˜ÑÄ¢ßGѿΠß.C¿TR¼_Š~Ö ÑŸË‡þ[è«òQ`‚O û†JÙÏ’²¿¿XRÊaÿ;)û·†Ø,ä±³?”/hîÿB†æþ 6÷Û9¹/A›}µg7ÚtëgYpjí§ÉâU+c¢#‚Wøúxy¸ +-œ¤î››Á}C}¸¯=÷'ËÜÝÁ?föÉ?/†ShÓ϶nßIr¿ˆ¸HRr¤´¬¼ü(NyyYé‘É!b~ ýÛq™2ð ÇÇ2D¨.ú/ÌüáæOcÌŸ¡h¾6Ì×7ÀV˜š™KÍw¸zxùø¬‹ˆŽY¹JœüéÿÙ¯ó§¦Ï<€ã3»¶Ó¶^Õ®³3ênµeÛµ­Š¶Ô“¢(J¹@Â}ßW¸ï„!nä’Ë£­xt­ÚŽÕvG»^ ¢v;Ý]wtº?ìÎ~žçûýæ"„p¨Øáùáû<ßçózÞOÜ¡°™ðvÃfÂÛ©É(ôÏR¡ÿ-ÌÉßnÞºƒ2BŸDŸ,¤¹£ MÊ@úÍÉw0&¹ô¥)ú2@Ÿoúk^_= ýÑ_Èk:öW²oƒØ·Ýn·Ó<û|`_†Ùo'Ù…ÙG s% <[õ‡™8ËGÙª“Le£€Áîû(÷ïܾ‰sÿªiî÷uwµ·jU8OE§ÅEù@;91.&2,$ÈŸÉðöòpsq>t`¿ƒýž];À}Û™»ÿ¢9÷ŸüsgŸìÇU§EÅ%¡¨JŠÜoP©5MZm3,­¶©Q£V5 ó¥h'K`'s2áôY }£ß`½ùË;-eþÛÈü-¶`þŽ]{ìö8äìâæáåÍ`ú…„EÂF&³á…äㄇ“ªQÛj.ôÑ|C|B?&:ô‘ùú@²jTt}ôè‘>PaôÑè’è··4©ú3B…¹ú´^n‹kÆËðøë•xi–ìW öUÀ~fÿ³Ñ³_û_°?aÄþ£°?Eî?"†Ìý{è@£Ü¿¹Å4÷{t¶µ4i”ŠZ¹*·0´JMJˆŽ dù1èžnŸv"Ý·÷·l~oÓŸÞFî¿è¾>ø—èàªîω}üGY!áQ±ˆýì¼B.r_ŒÜ¯UÔ7(U*µZ£Q«U*eC½¢™/†mäÃ6f#ôc£ÂC0ú°… }säÿJGþò§3ÿo¾æoÂæ`Gšï[èáIgø±ƒÃ"¢c’Ráö„m$_Mµ +-¥¦©¥­óH¯¹Ð¿n.ô©)±:ôÿ7iLŒÑÿÁ}£/¿8; +-óèwY¾Uè/¦þ]S³ÿ²1ûë¿áÍ°ßsthäfÿ¢žý;˜ýLØÿÙ b¬¸RìS¹O²W2÷¯MÊý!”û­Íꆺ™D,,+)æäfgXñ1Qá¡Á,_º§»+¸ï¸ïcìþÛl·¼ÝËÔýU:÷_5ãþäà7Í'ú?gÃ>ú£4:É~B2;#+·€¹Ü—Èþ:…¢/…¢È—Iù¼‡Yìä}: ±àП&ógeþû[l·aó÷~¼ÏÌwu§Ñ}|YÁ¡áQ1ñpufdã=,Š«d5u êÆæÖúCæB ÈøÝ{ä„#‚Cè‰aQèß›À‚чñ¸H ?2ØßC _cŠ>Ëjô_ZDÿ9YÆJ,1e¹žý?˜eŸeÊ~ ^4wWçCÁý½»wNëþ +-÷1üÜ +-ðÏ}ûÄ¥ÑÌ€à°È˜ø¤ÔtÔ©r_TY%•ÉåÕ5xUËå2iU¥™Ïã ÷RzjR|LdXp“A ¿Ï^‡¾Í@ß,ùæ¿``þoHó_Å毀X¥7˜¿AgþV0ÿ£»‘ù9ƒù^Þ¾Lÿ ðȘ¸ÄdvzVN~—/(UJ«kë•mK; +-ýÁác'!ôÏ‘¡… ýÛcPE÷îS¡OÈc< ú ™úº.ú;‰þ-Œþý3zôú•09™l‹è¯7FÿåEôŸ«5/ìÇ'³3s +-8|AE%f¿Ù€ýó¿ö¿E5£cÿÇŸ RÆjö§È}ľaîOL•û'F†úzº:Úš›ÔJE\RYQVªc+!.:2,$ПÉðö¢¹¹èÜÿÜߊܹ¿Á¬ûËûºà'Ü‘tßRð?‘˜ûvFì…FDÇ%¦ Ü¶Àý2a…H\Y%‘HaI$U•bQ…° ÌÇ—f;%1.:"4È}»…‚¾É–O•ù”ùˆüéÌgÓ»Øüõ滸yxy3˜þ!a‘ѱ I©iÄ¥YZV!–Èk ê¦æ¶Ž®ž¾¡‘&¡ +-ý‰û(ôþÛ¨Šf1TQèÿ¨CÿÆ÷סˆ.ýÕEŒSúÍ*>£O¢O³ˆþrSô—ÿÐùÿŸ‹k–eöá䯄c¿æwæÙ§aö#ŒÙWûmûŸžÒ±ÿ×kˆý±q2g¨ƒ=ìS›pÿ…Ü?>ñG]=¼|üP®Freçq‹ù¥‚²r_$‹áS!,/”ò‹¹E°s™ipcÆFÁCÉßÏÇËÕ bÁ ?“Ì'Í™¿l*óm°ù›·nÛŽÍ·wØÀ ™ïIgø±ƒC#¢bã“RÒ2`ç8Å%¡¸JV]%¤mmïìî=:8||rèß BÿAèãÙ˜ úÃfƒH"TD0ãc}4—a,Ο;sêSŒ~gF_jˆ~Ä"ú¿Üe}ŒÄÌØVJkJ`¿³ž²Çýsç/Àù&Ù¿=6~—|Å’X|´­=Ù:ö©œÑçþCãÜ›”ûgQîèï9ÒÙÖÒ¤QÖ×Ê¥•¢rxÐRÅÀòóAîrØ Ü·ßƒÜß¾mëf#÷×Qî¯ÍVb÷—êÜŸ&øŸ,üsaßÉ؇_ŠŠ5&>1™îçr¸<~I©@P†—@PZÂçq9…ù`~:;¶ ½’@@ßÙi¡oMæOiþJئÕ:ó×›1×lþa¸+=é>¾¬€àÐð(Ø6ê•Ä/-UJåµõJMSK[ç‘žþ¡c(ôÏN +-ý1ãÐhúú"²n4tèAæÿëŸ?èÃXÜ&чº€Ñ?><Ð×ÐW"ô…žýÀéÑ_¶ˆþsºæÌ~ Á~FN>‡‡Ø¯V(5ˆý¾Äþi‚ýo0û7QÔè›Fwºÿceîÿ×rîÿC—ûãúÜ¿Jåþ™QÈý‘Á£}Ý]­ÍêE\"®(+åq ós²`q1‘P­L_:ÍÝ•r—‰û ÜGÁÿ€åÈ}<‚ÿ×fÝŸßé˜ûÛívì¶wp„lu÷ôf0°ˆhÈýÂý‚Â".·˜ÇãÃâñŠ¹Ü¢ÂÂüýè¸*™ oOwg'GLijGß<ù“3Ÿ0‘O˜¿6ˆ4ÿuÒüufÌß¡7ßæ3à…—œšž™“WÈå•–Uˆ%òEƒº±¹µ£«»ïèà„þè*ô¯š }b*fúTékˆŒ!Š»071úßèŸÖ£¯Q*ª ôós2ØIV ¿ +-¡¿týçuÍûÑñIûb̾–bÿsxÎ^¸„9:ã˜}”5&ìÿl%ûfš†xÉ’Uc9÷OŸúìıáÁþÞîÎö­FU_W-« %Åœ‚¼ìÌ´Ô¤„¸h× &”«¡û; Üÿ#åþZp¿‘ûdðOrßbðÏç„Ì‚ý͘ý½Ž»¸Ñè ?Ò0ì~VNn’¿¨ˆÃˆŸ—›“E˜OÜ“þ~ :ÍÍåðAG‡½ýÍÏýiÉŸ2ó ó_CæÿvÞüzómuæ;æÃëˆéžGèžLMËÌÎ+à—À TɪëêUmK{ç‘ÞþaýS§­ ýÇ0ó‡>ž„>tÐw(ƒ.]øó¹ÓŸŸ$ÐoÕj”uÕR±°”B?£OŸ}ôGÑ.—‰ÿg¿ÎŸ¢>ïŽÏdÆøCÚ8FLÓjÛD"FT@‚\‚¨( ñ¹¯……–{aYŽu¹‘{–û>–û¾EQX¯¡I”0Z±Í4Ó‰™ô§vúyžï± ¬î.Š6ÏŸð|?Ÿ×÷ý(fÿw‹Ù?@±Ø÷¤Øç'¥"ö‹€ýºF)°ß?4:~ Ø¿ìߟAìÏìÿ@±ÿ31âj³OM¸lÄéÜÿÇóstx ¯§«½UÚX_SU^*‹òs²2Ò’ùñ<.'"48ÚÕÛÓÍâ»ÔÚêå¾®œû[±ûDðÀkëaÖÑîcø ÷_7üª³O~Q̾ÁcSsKkø¤v§ìÏ:£Ügb÷Ã"~n ‹Ãò#°ùLúÎgíOÙÖ–æ¦Æ 0ú;1ú|è¿|E™/3¼ù¿ÿŒ‘Aæú3ýצ®\ôûa¤úy}~—†Ð÷|yôWÕÿÿ>/˾É~‡K°ŸWPT‚Ùoëì!ØŸ‚¼‘±ÿøÉ;ÁÏáDEEÉŠâpù!ll>ùƒ2=˜¯Aš¿i36«óͱù'àÿæ;»ád ;4œÍ‹ã ’S32sòD…Å%å•Õu Í-mݽC#(ô§ˆÐ¿«  ôéuPcþ«häÐ'–áñ£¹Yý¯1úúmýò„~…~Fßaý·ü(d!¡*ûNˆý‚ýÄÔŒìZ¢žý„vÐSý}”?ÓP?F(ô«}B?‘ËDè3<Ýœú6«è¿ÕG~MHößU¾ž É>Ã/€Éå'¦ddå‰ÄÀ~mb¿op³Æý[` +-gþ)¢oèQW“ýçþÓE¹ëæõé©+aâúz:Û[¥õ5U¥qA~nÖù´”Äs ±1Q‘a!ì_†ˆæhZæ¾)åþ¾=Ú´ûŸPîãàß°áƒõ°~Â}ùàWþW°1곿{Žž¾¡ÑA3 +ëcÇ)ÑÀ}†/ÓŸò³ƒñaƒø,¦/›ïè€nèø1k+ ³ƒF†úz:{v¿ ôß¡Ròå2ÿ·(óaÆ7À|(3ÿ“-`þÍ»žg¾=º!/†/<ˆBÂ"£bbãÏ%¦¤ÏÊÍ/KJ+ªjꥭí°ú.N\™š¾~ó–Ú¡¯útùÿú‘@­Áìƒo!~ýëÓ“—aaÚšj}±(/+#…@ŸM£o‹ÿãJÐÇ_tý_éYÂþÙ·€4´µö]=L‚ýÄ~®H,Aì7·vtìON_§Ùÿ³ÿwrÜ—Éþ‚W­‚Üÿåþ߈܇‰‡·-tÎýñ1(Þîζ–憺šÊò’b±(?'+#-9ñ\|,7*",$(ÀÏ—A”ì"÷ —¸Û°yü54°ûŠ‚-éþ™û+ÿrØߧ§ŸÔÔÂ~å(÷Ï`÷=¼¼}|™~þþ,VËßßéëãíåÍ?ƒCÿèaK SB_oß›@_ ù Ì_« óa¾Á| ”ù¤ùËÌ×óõ˜_C _¿€ à°ˆ(nlþ¤JÑWýw^Ñ]=¯å,—}S‚ýSÀ¾b?42:6A’ž•+KÊ*)ö‡Ç.NL^…Ò!؈G2‡fGÎÂÆyU¹ÿå>¼naèoÓ¹?:<ØßÛÕÑ&mj¨­®,+)*æådf¤&'òãy\NDXpËÏ×{‰ûf Ü×ÒܱýSì>üà>rîäþ:ÚýÿJÁ¯œýõòìo×DìëîG´lGŽ·%Ýwqs÷ôòføøø’ÇLJáíåéîæBšo{üT¡9zí×Eèkn—GýJ£¯ùÏÍ|ôÜHdþ¦Íú36ûM-dþ>Åæ;¡—¯+(84‚ÃåÅóÉ©™9y¢’²ÊêÚ†&i[GWoÿàð(ú·aþg¾ù`îÑ+}b ¨À+€7ÂwÏ=4þW''.Ž èW–IÄB„¾ ‡Ðg1€þ)}Ð_³Šþ¯õ¨Íþn`ß@ƾ=fŸÅˆæ%’Ó3s……À~M}°ß;0<6ì_ƒ¹¿{ÿ¯ß|‡¦žz’ýgäÈ«Çþ’ÜÿEqîÏáÜŸ¹÷Ê}Âý‘¡¾ž®öVic}mUE™¤¨@˜—™žš,àÇñ¢9¡Á¤ûN‹Ý724ÐÇîïÞ¥µÜß&ï> +-þ 8ø×-~µá™õQ‹ý-Û¶kj}¦½Ww¿¡‘‰‘û_Ø!÷Ï:9»º¹{xxzzáãééááîæêìt™¯BßÌ.e¿î^íÏ´4·Ã}¼&ô—\˜Jä/Í|¸‰ ó!ó±ùŸ.0ß6ÿØqÒ|0ßÇΉæÅñI©é™Ù¹Â‚"IYEUm}£´µ½«§o`h„0…þ»÷gpèÏ)ý_†¾Šè£ Âç‰>d¨ˆxëÞºyíꕉq@‚§µ©¾Ð/æf¦'#ô#úÞ€¾=…¾ñ*úoûQ‹ým4ûÆ4ûŽ®ÞLVb?±Ÿ#,,Æì·´wû£ãWà‹ØŸ!Øüd·šúŸäž·ª±¿`æ•çþ,ä>äý×®N^¾4>62ÔßÛÝÙÞÒÜXWSU^*äçfŸOOM$ÄÅDsÂCÙྸï²À} Ê}Ý}{±ûÐ¶Û øI÷qðk,~ +-þµjÿìR™}ø¢Sìëèé”EíW§NÛ;8:9»¸¸ººáãêêââìäè`š4ý +-MÂB±âè/½)eäS™ÿm>™ù(óeæoÝæïÔÚµ[{/˜¯Í7#¯ÄöKÂ|70ŸÉ +-d‡†GFÇÄ%’RÒÏgçæˆ%¥åU5uÍ-íݽýC#cã—.CïÜ@Á]ýYúó/}5€T=xúñðÏ?ÙŸ¥Ð¿ÑôÛ[ú¥Å…œ̴dA¸ÿ-¸X”û:Ä}uUp_ž¸?ükEÿçLð/þÅ]¤°/¿(~ÉÕ54µu9È}K‚Ü>'g—®®Ýܾ"ÇÍí «ëg§}vð:,IèèÁÛÐPÇ,D"¤môE¼"±äÂO¾ÈÌ_Ce>š™æ+(*© ù,4_Î|¦óóýƒBB#¢bâ’SÙœ,n^AqiyUM]CS Ì|gw/ú·îÜ›¸? s?=½ó|ö%oòCþ®+Qè £OL>þ A·Ü±Ñ!@ÿZA¿¼¤0/›ƒèG…‡õ;}ÊãÄѯÐ×\Fÿ£?‹a_“fßÚÖÙ?rÂÃë´_@PHxTLBr:';·°¤¼ª¶¾©µ ØïÇEšgš°ÿ’ÙrßðzGÄäKÄ>½ãŠÌ}Lžç˜ûÓBôà¸A»ßÑÞÛn}]MeyiQA^N'=59!.:*<4$(0ÀO¤ûÝ.t_‹µÝW÷ådùÝ +-~üŸñÃÿ‰0üK,ÿ¼T ûë)öe)öYZÝ.Æ};{G'gçý..ÈqqÙïììäè`ogدb§‹B_–B½8ô?Ü Ä$ÿSò)ó¿àÏüus™æËÉ+(*«¨ªoßæëóM„Ì? +-æ{1æ‡GEÇ%$¥¦s²rò +-ŠJË+kêê[.·µwÐæCè߀֡ÇÐŽK®¸ÐÿPèK„>³è2ƒÿ†É¨˜zzh»·ÇÇF†úaÁmkmª¯­ôs³9iÉ 1ˆ~€ßi/G}[k D_ÐW§Ñ—^Fÿ£=bÛP} d_Ø×ö÷XûNÈþq/d?,*&>9-#;· ˜a¿³§päúø-ûp^¾‚ùdÿoø%\rß›û¸ébîÿå)d\Xvï€û×G†úzº:Ú¯´67Ö×VW–—äæde¤§&%ÄFG†‡Sî{Ís±Û½K_¸¯¡®¦¢¬• ÁO»/ü+xîóÃÿé‚á_è•’Œ}üE7Bån••WPRQƒO9b·k·1¸oae Áoïà°ÏÑщGÇ}@¾í^kòŒw“ÏT¡šŠì<ð¤7RDü +-è‹z' '_8óç̇̇w ¬¢†æk‘×€Ÿ?Ñæû‡†GFÇ&$¥¤gdæäæ•”UV×Ö76·^iïèêé¹æß¹÷ý˜xXp™ÐÿÛ†¾ú˜;Tí¼eЇÖyõRç)>ì·×Gû{:ô‹ r³3Ò’ãc¢ÂBÎøùxyGôý=Æ<ô–ÑÿØÏÙWà±oL±ïrØw÷òñ 8Ÿ”–‘ì—U"ûWÚ;{ú€ý°îö€;@±ÿ¾Æ ð3¹ïèܧÇÉrîÀ³ŸBî?š‚[p®ÁØ(q¿óÚUp¿áRmuEYIQ~nNfFzJR<㾿(÷-)ð ôtvji¢ûªà¾ºÏüëÄ¿8øÿ ÿ‡Ê/£öW2ìo–ÎòHîkëè÷Í ø­÷ÚØÚÚÙÙ“cggkkä[š›1¯@› +-}%b«Ìfý• ¿˜‡)þïøÅIþç|äÏËüMTæËÊ)( PS×Ø¡©µSG>}FäÓ'l¾7eþ…ðÈ‹±ñI)i™Ù¹ù…%eÕµ—Àü«8hþèØ8L;TÎÔ#œwXoaà—0ôôÉÌcêüLЧCçtɨœ[9ƒ0ëíWZ/ÕT–p³2Ò’âc"ÂÏøúx¹ú]hô ‚þï—ÑÿmŸE±¯­k`ÈcÿÐáãîž>¾þç‚Ã"£ã“R3²¸ùÀ~Í¥Æ`¿»opêãgêÑÂþ,S>oHîó±¿4¹Ïsrÿ.¼x¦|+ïMpx°¿·Ü¿ÜÒîWU”æçfgf¤¥$ÆÇ^ë¾5¸oJÐÓÝ©­ÉÒØ®¦ª¢¬¨Á?ç¾pðÕ‘þ%’_rö¥6nÚŒ­+¯¨Œ¹ÏBôÀ}#cS€ßÂÒÊÊÚz/9ÖÖVV–@¾©±ýÙcaè++ÊËnÛ"³yÓF©¥G_"ñEÿG~ò)óW0™¿V0óá“'櫨ªm×`iÒ뎥HóÏ2æ'¦¤±3³¹ù…ÅeU5—šZ.ƒùݽýƒÃ`þÍÛw'`ÖIèãn;KWš¿D¡/€>/sþújöFΓGS¸ÚÂf;<Ø×=‡~>7‹š|Îß×ÇÓýøáCüèkk‡\‰ýUË複ÿFIľ”!°¯OØ·±'ìs÷ôöõ ˆŽKLegró‹J û—¯vt÷ ÂÒK³?ó#n¼?tû0é³höçå>¹xHîÏ>†;ï“G'ñ.܆Ë0BÜïhoC÷ëjª*JÁ}nv&;-™rÿ¿ûG¾!î;:Ø¡ûf Ÿ¡>¸ò©}JŠòtðKo¢‚à_ÃÀÏ¿øùäŸÿ¢å$Rû« z û_nÙ*+¯òÍÅ®!Ào‚ò››[€ø&@¾á.}fÕQUQR‡ïÝ—ýuüDü/ôö "Å$Ÿ'>MþŸ„ÈÿɇÌ_ÃË|Ê|Ì|xpexrøâijïÔÕ30Ü _ôÍÑá˜rˆD¿´(Ÿ›ÉNMŒ‹Ž ô÷õöt?†è;ÚÛX!úúËèÿ_IØ_%†}s+{Çý®ÀþIOï3þçC#.Æ%¦°3s€ýŠêº†f`¿«w`ht è>n½@„ý¿3ì¿¥/s~Ylî¿crŸ×??aÁe îOMÞŸ€ÅwÜèëéB÷›ëÁýrp?›Í!îÇÌwÿ›«‹3å¾…™©‰觫ƒîk¨«©‚ûàß6^ðo`‚õª•+©àÿû“_¤üï»gBNŠe5t¯þ¤2˜¼˜û´ûºú~cSú˜˜òákG›OB_nÛVüÔmú³äèKþïK ¾(ò?$’Ïd¾_æËÊAæ+«âS³´´ñ© aË1³@ó‰ùGÌ£ÌOes²¸yÅ¥å•`~cs+˜ßÕÓ70æߺsoâþä1ò×Z^èÿ‹ ýw‹ ý_xC%Î[}²×’µvúñC˜ò»·a§èíô›êª+J‹òr2Ù)‰q#BÏúŸñö< è»îGôÍM ú, u•£¿¬þoõ,œ}u –¶Ž¾¡‘)ÍþWß;ù­÷™ïÏ_ˆ¸›˜’ž™“WXB±ßv­«·hdlÙŸ|øèù zí}M}–2÷÷!÷_<ƒûð\ˆ©p#Àý±QÚý«WZÑýêJp¿ ›Åa§ +-¹JÐ}Û½Vf{LŒvÓÕËÒØ®¦ +-*`ðo‘¡á—ZOÿjQð€üó°dŸï]½Ü°Qz³Ì–m˜û”€šZÚ¿Êÿ_öë,(ª+ àxլ̘LÅèˆ×[dmšfßADDE}_DQ%‚¸7DA ÙwYDÄYÍL¦&5¾ÌTfj¾sîÒ·›ÛMãäI9/úاø¾ßý>Ÿo +-þ1Aâs|=Â|øÒ¡ÝŠï–«B¨ÁEÙˆ`A_Ùß®H|YòIñÙÈ_€É‡Ì_Œ3_ƒ4e>|è4µ8’Ž©Ì·±Ãæoݶ}Ç.Âüp†ùGhó/ƒù7±ùe+ óÛž€ù0âý0ã𤟘œ"§ÌÿCŸè"oÈ)ôG‡IôaÂ[›j«+Ë"ô¯^:ŸŸ›s"+óPZJR|Ldh¿ï./ +-}S#&úêsèGyöÕ)öµ0ûÆ ö}üƒB#bâSÒÒ3³²sró€ýkEÅwK–WŠjšZÛa)0ûCãh#ÞýLGöå.æç>½ïerÿíÔ›‰ñÑ‘á!؉þ¾Þž®Np¿¥©¡®FTI¸_ŒÜ¿|ñ|>›ûÁ÷]œû–BߘÇ5Ô×ÓÙ¬ÍAé Á¿FüþÅ(1ü ”¶ò³n‹˜ŠÙ_ª®±œÌ}ª|Iø¹FF<òqIòé× úË5Ô—Î}e~·’â«JG>&¾,ùùjèžË˜™. \VOßË3æ› „–`¾ƒ“bósrÏæƒù…`~ñÂ|QM]CS ˜¯ÙÞ¾~<à#0áð • ý÷’)Ÿ6æ3̹ô©G/Z˜ðá!1 ž³í­M µ"@¿änq _—›“•™ž–’äçƒÐwq´CècôµæÐÿ´ÎLìÿ™•}]̾…µ£Ë`ß/04":>19-ýpVö©Ü¼‚‹W®böË*DµõM-íϺa-ÄÀþfÿ¯ öÉ +-¢"è·Ùçþ¿é܇@+ÁpjòÍÄØèÈk¼}½Ý]í ÷KîÝAG¸ï¿»ïáîîÛÛZ[Z˜›™šðŒ pþ¢àÿ~ +-þeKˆÿ"eàg&¿ +- ürä—Y<65?cc¹¿j Ü_¹šrŸCÀ¯§¯o```þÑ××#ÈçPæ¯^‰B_>nè†  Ë± Ï¦¾ÂŸÌ&þ¤Å—D>ƒü?É#2 Î|D>•ù?l >pºz†F<¾™¹ÐÒ™ïâæN™ŠÌß+c~eþ½’RÚüÖöŽÎ.nˆñ:"4Ðßî±з¶ô¹º›9€>z½aôÕôá:‡þG|³Jì«aö¿[¹z-°Ïö¹Æ¦’ýí;wû†DDÇ%&ïO?|ôø©3gÏû7nݹ_ZVQUSßØҫуÙ=2†Z­žüÜŸ}–Ü'–oé>äþä›ñ±Ñá׃â—/žCÁn´67ÖׂûåJ ÷¯‚ûÓÜ!Ý÷ñÞéå‰Üwv÷­,̦&ÆF\ü›¨à_K¹á_ð£üÓ’ŸU~¹ô+¤“úƒ2Ù'r±>å(÷WP L¿YGG—>::›Iò7æ¯ZCºÞ_Y(…¾ª|ô•ûՊħ#ŸIþRä-M¾LækÂáÓ¦oÀ5261˜[XYÛÚ;"ó=<½vzûìñ—gþ…Ë…WIó•Wˆªkë›Á|xÇöÂCv@<ø’fÌûŽ4·$kfúÿ•úúÄpÃl ÑîlG[Kc}MÕc@ÿÎ-@ÿ¹³gN?zøàþ䄸èð@¿Ý;)ô4úëÖ®†×›}ü‡¿èçsè¬G.ûŸÿ- !a9b°¯­«Ï5æ#öœ1û{C£âöí?˜qôøÉÓgÏ]¸üÓu`ÿÁ£ÇU5uÍmOžvõÀr¼öa5ÈÍø;ìÊ}yìxîÿÊÈ}ÔCã(ˆ_ ô¿xÞÓýìéÂýêª +-ÊýëÓÜOÅîGE0ÜߺÅÜ·³±² +-ÌøÆ<. +-~P£(üþÅü_Ë…_qò+ýòý¤b_úCŽØ_¸¹ˆs>櫈&àçlÚ´I›<ð_E>q=|;t7µo-$ÐÿB}úw¨ø’ûË‹ü™ÈGwSWgÏÌ|}C.Ϙo&ZXÙ€ùή[¤Í‰Cæ§Éš6¿Š0¦úY7ŒuÿÀ«Á¡al4ŒÐÿõÿ }vôñlSEAïØAxÆ>ïézú¤­¹±®ºêñ£÷nß¼þÓe@ÿôÉãG3îß—°£ïì` èó¹úºÚúË¿UG·EsèG)öÁˆ%K)ö×ìó€}+[g·­ž;vï ŠMØ—z0ãȱ“§Ì?ìß¼}ïÁ£òÊ꺆æVX’ýáÑñ‰É©w?Ó»AåYCä^|xî“=ÄtòÍĬ¸ÿ²¿Üo“q¿ˆÅýdÂý° ?ßÝ»vlßî»89ØÙX[ +-ÍÍÈà×eÿšÕ+IøÕ—)„Ÿ%ù•_YH%|Ê°?Ÿfå>ªa¦û~M--­äÿj"ò¥Ì‡}èÏN}ÖÄ—#>3ò‘O^ ™O}Ñ$™Ï3á›™ -­mìœÀü­Û¶æ…„EDaóS¥Í¿æI›ßæà öy_? 5¼aGá;É4ÿ2æHè³F›~ÈR=c=591>ŠbÐG)ÓÚÜP[ ïWýKçó<}òØ‘Œ©ûöÆF…ú;<·ºúVBŸG ¿~ýOòÌÌþWû$ûšmľ™bßÛ7 8,2voRêCGŽÈÉÍ?©ðZQñÝ’‡å•¢Ú†¦ÖöŽgݽ}ýâ¡aXÉ©·°4ûÿ|/DšûdÁvàõ Ü;E¹/Fî÷ötu‚û-M +-ÜÏÄî'%ȸïáîîÛÛZ[Y¦ŒàçILÿ ð) ¿D~U¦ü*ìò+Á)ƒP…ì/¡Ü'‹Ë¿~}Öcñ™¯u"ô%èÏ—‹¾Ò?sšø*LñU™â3ÉÿRùÄ$—"1ŒÌ7˜[XYÛÚ;8¹¸¹ƒù;víöõ  ÌOJÆæ•6ÿ–Äüº†&Òü^d¾˜2Ï46O5®âû{…>>žiixÁŠ` »Ÿu´·6Õ׊*Ë–Ü-.ºVèçæœ8–yè@jÒÞØÈ°à_o}3>ÏP_G›£I¢¯A¡ÿýysèćýy +-ÙßìòLûöN®îˆ}ÿ °È˜½I)i‡2³²sró +-.ì—–Uˆjê›ZÚ;:)öG`G¦Þ¾ƒ!ØG¹OîÇ,ØŸæ¾lîSY„º¹?>6:üzP<ðò¬IWgv¿®F¾ûéØýøØèÈðÐ`pßÇ{§—'¸ïêìhogcÅ~=ÍÚüš¨,ÆFb$ð/”†ºüóÈ?ú™Žª0þ ô_”Õ}0Éÿý:ú|ć밚Ï@Ÿ6Bå3%Õ—>‹øóXÄg%_"ŸñƒÌò¥2_ ´´²±µwtvus÷ðô’˜Ÿ@˜Ÿ)kþmÒ|Q 6†¹ ¦ùÅË1z½Ž#ó!ô¡°ÓC_IóeÑÿ}r¤QÈÀ@Ã< qîéhki¬¯U”•ÞGè_¹X—›“•y(-%)>&2,Èß×Ûk›»«“½  o‚Ñß8úªsèÄGjIöUYØ_L°¿j b“Žž¡°oiƒØßæµËÇ?(4"&>1%-ýpVö©3Àþ•«7nݹ_Zö¸ª¦®òêèù‹—¯¡`M`Kþö ûïqî³mˆ2 Bgåþ{"ŒH÷ÿÇ~}U}åP×1‰ÎW£âª±&±Ð{ïÍ‚ +-ˆ`CªTéU:ÒAPTÄ‚t)ÒD5JUAÚÎÄìN’Ýd3ÙÝ<ìïœóo÷Þÿ”Ììœ'x;wîï÷¹ßóž¸? +-{B¹ÿ-vÿ1q¿–ÏýÔdì~DX(㾓ƒvßÊÒ|?¿©‰‘¾.ürü’8ø§¿Hò/â&?%ÿù…éç—USNì3ìsrŸu )7ý[¶âÀ¿›6²oòAèÐç Ï—úS]Nüyà³â/$â G>!™PåÿE|È|)i9y%&ó ŒŒMwï5ÛoniuÈæÈ1[;§“®îž”ùQ1Øüt®ùw°ùÕÄ|x·vÁÃõÛW=}ýƒ¨aFpÄСÿãOäùú ×|ºd¦‡>·dئCÿû÷0Í1ðvì‡Q~Þ ×–G k*ýÛ7Š®úY©Iñ±Qá¡~ޮζG)ô tµ5T•ä¤ý¯¶lÚèK¬^É‹>ù:¾Éÿ¯Tsç<¢ìÏça9°/ìoØ´å«ohöµtYöí\=¼|C¢bãS3²rò +-®ߺ[Z^YS×ÐÔÒÖÑù”bÿíðÈèøŠ#!ög˜ûxK¨4‚5Á{º?>6 +-«òöõ`_rÿ)¸ßFܯæu?1¸èïë î»8Cð?zØÚ +-‚¿‰`ðËËÊH£àÇð3…, +-ÿTÉÏ'ÿdô +$*û‹1ût¸ù!úéÿl€Ï@ˆUtècô‹AÞT·š|^ñ'‰|~ò±ù„|IiY9”ùêœÌ߻¥•5Ê|ÖüÀàÐ0b~r*1¿€2ÿ^iÙƒJb~‹°ù0ɸ`(óñ0ãi&Wfœ?&ôÿà }}eT0ÃhýgO;;ÚZšêª+ËKïÞ*¾VX—“•‘’èëåáêdÐ7ß·¡¯¥¡ª¤ èƒÐ_OÐ_ΠÿÉú³äLÆþ'„ý¥4ûk×cö·KJË*(©ªûF¦{ö™´>rÜÞÉÅÝË7 8,2&.1%=3;¯ ðb¿¬¢º®¾©¹íq'ìËËž¾TH(ЮPìæP‹Bçþï3Ë}²)dU(÷'ÀýwH”ûÏaaÀý>÷ss(÷ãb£#)÷Oy¸÷Qð„à7㿆šª²’¢¼œ¬Œ†Ÿ +-þ)àŸJþ? ÊÏ¥ŸÏ~^Vç‹aç>ë>†Ég>è/_Ÿ5‡¾ô…ÕŸübBàÏç€?©ø“’Ïd>"_JZV4ó÷˜í?`qð 2ßÞÑÙÅÍã”·¯?1?6.!‘2ÿ¢óa†Ÿcó^ãÆxœÌñßþN&‡þ¿fú¿S¡Ï¢OO2šã¿NÀC½ ôõ¼„vnnª¯­®(+!èçfg¦§œ‹‰ ðõrwq²?~Äú  ojè«ô·ô×Òè/C¶a§´¬¼’Šº–Ž>þ£‹û)Ÿ€àÓ1qg“Ó2³só/_½~óNIYEUm}cs+tR7fðÍлÔHT"ýô侈û¿B¢éû÷ûŒûý½=/§pÿ|fí~øé ?/þ“Nv¶ÇŽ@ð[Bðïå¿šŠ²’‚¼œŒ4ÀO‚_~ ~l'†'ÿü´üâ£_€þI‰'¨>Í>|£è+¥s9'’äç¸7&ŸÜ|9úHL…¾€úÓ¸?øB‰O‰Ï¿„D>!ÿÏèâbÉ߶‘/ä+*£Ì×ÒÖe3ßÜÒêÍ‘c¶8óióO‡GFÓæŸÏÉå1ÿcþËž^dþÛa4ÃlèÿˆÇ˜;Çl¾hèã9fBÿýwèÍ:ònèÍ BÿywדöÖæƇµUÊJîܼ~õr~nö¹´ä³qѧƒý}N¹»8Ú1èëëh©«(ÉËJïdÑ_µrÅú³óL‡ýÏ¡¬V®’Xð/…Ù×öMv›°qÿj eü+ȧ, +-}1èÏŸÆu„¼_¼ø"‘Oß®Œ~ªÉ߱ȗ•SPTRQUÓ 2ß„É|k”ùØ|wO/¿€ bþÙ¤”´ŒLÖüÛwKîSæ7"ó;:Ÿv ˜?*`>õd¥‡˜™â¡O½Y)ôñƒutºe°¿^«Ýí-ÖT=¸ïö¢+—.^8.-)áLtDh¿§ÛIG»c‡Y0Ûmèkbô¥ô×ô?ŸCVždãæ­_û2òŠ*jš:z†4û'œÝ<½ý‚BãÎ$$¥fd]¸xéJ°_Z^YS×ÐÔÒ›ó ±?ðÖm ZÂ>Ê}†ý³ 3ƒÜgÜÿëþ(vr¿ûigŸû…—ò9îÇDE„…úûzŸòpsqv´GÁoÁoŽƒßÔØÈ@_WGKS]MUà—Cðï†~JQ€)“ü‚ò/bäG¿ ýüG@}šýOQ;£Ü§ÝGˆbùÁQö¬Æâsn»”„>Á Ï£þ”×þB +-|añ—ñ ùÔmÅ“/‰È—WTRVUS×äÍüöŽÎ.t懆EDÅœ‰çšµ¨ø&2¿¼‚×üÁ7o‡„ÌÿcþLCÿ¿ì#ôÿù‚>_4½0¼¯úz_½€béhkij¨«©,/½{ £Ÿ“•‘š”èçíéæìp‚FßPOGSMEQ^Ðÿzëæ<è/šCvIØ_$Âþº/ûÛvHÉÈ)*«ihëïÚ»ßÂÊ樭ƒ³«‡—_`HXTl|bJFVN^Aáµâ[wKË+ªëꛚÛ?yúìÅËž>`èÝè,ÝJ(÷ak~ýàÜÙ÷fÖ†q ÜBî÷Må~Þ…ì¬sé©É‰÷©àw°CÁoMÿ.cC=]m- u5€_Á/Éÿ”Ï`é +-äŸD~>ú§k? ¬(ûKH=SñŒáL¹g%C>e>}ôL÷&\ïEÀ+>7òW ß'øu‚gÉÚuˆüäK!ò””UÔÔ5´´uôô …2ß–d¾°ù©éç²²/äå_*dͯ¢ÍoÇæÃÜööÑæ1æ3Ñò³¨ù1ÀlèÿŠ«…ý÷ß¡Ñ…É…‡j_ÏËϺž»Ã²/’û˜J¬û¿±‹ƒ6‡¬åþ8¸?̸ÿBÀý1î'ÄÅFG†Ÿ +-ð÷I🠂ßâÀ>³=»MMŒ õõt´55ÔU~~ø×ü"ÉÏ/ÿ§”üâéçÚÏ«.GYZ}šýÏÓ Í‚ +-òcûñA¯üiB÷[üƒ>G}qì ]pÁ¤à/"àóŠ/ù@þzDþ&^òUÕ54µutõ ŒŒMéÌ·†Ì?Ž3ßÕÝÓËÇ/ (ätxdtl\Bb²Xó›ˆù]ÈüWÈ|¨•a0Ï-˜O&—Œ.,¿ ˜?£Ðgч¹ƒ±}3Øßû +-Z¥ëI{ë£Æ‡µUÊJîܼ~õr~nvfzÊÙ¸˜È°àÿ±_ŸAU¥gÇ'Ù][2³q]\¥‰XÖ­Š  ôÞ{ï½JGéˆH•Þ{ï½)‚ë8 *ê¬;ÙÝd²L2î$ÎäyO¿çž«HÌä¼ßøtÞžçwÿoä™Ð O +-}m 5e…“²2ÇÒè o¢¿áÏÚØÿc_ ±±/ì+(«jhë›YÚØ;¹zøø†„GÆÄ'&§^ÊÊÍökê›ZÛ»z†G'¦fæP7á쯶;L”û¿ ÷|I¸¿‚Ü Èý–¦†ºšªŠ²’¢‚¼ÜìÌKŒà ¢ƒßÁÎÆÚÒÜÌÄØÐ@OW[KC ü ?ÀÉ/.NÂäÇ]åŸýüô ´Ÿ}hg‰Ø'Ùg¹®"ùG]×| +-}*õ·¼Ç%(ï¹À'ŸK|D>ú="Èò÷#òñ‘/ä+*«¨"òuôô LÌÌ-™™ïÀÎüìܼ‚¢’²Šªš:†ù£‚̆ÌÇÞ¨¿PæcÏTÔ+ÌÐ_“ùœ¡ÿšx§’ÏTbh_<[…‘ÅЇy]˜›™šèíjoAè—åçf]º˜œèïãáêdocifl «­¡Š¡/…Ð?ŒÐÃÐÿ|ý ~ÞÅ>¸³¿c_òàá#_ûÒ²ò +-JªêZ4ûÞ~!áÑq‰ÉÓ3só‹J+ªë[Ú»zú‡Fǧ®Ì]]¼qkéîý‡–a‡`…ð ¢rŸJ¦÷Z®ÜÿÈ}Òý_q÷±ÜGî?àþ8î~WG›÷‰àÄ‚ß‚ßÑÞÖÆÊÒÜÔÄÈP_OG[SC]UEY‘~<ùHBòïƒäåM~LW†ü¼ÑÏG?Ÿý‚äe`KÆ>û„û8ü¸ýØÁÿ¢.õ)}fê¿•}æíx¼çŸN|Z|êBE>¿È—Däƒø‚È×ÄÉ765·°Â3ß e¾‘ùÜæ74µ´1ÍŸ…Y`þŸÉ‘ý•6ÿŸ<æ¯gn ôÉG*ú?ÿ  óºü^§K·n,^…Qêïéloi¬«®(-ÊËÉL¿˜œàçíáêhgmÐ×RWUR—•–:úí×G”ôE„÷`è#óßþÿÙ¥Íó¿=ogË}`_ØÛ'±ÿí÷RÒ'äO)©¨kéè™ZXÛ9º¸{ù‡ŠK8Ÿ’–™“WXR^UÛÐÜÖÙÓ78269=;¿x6éþCÈýÇOWŸÃÁQìã¹O-п֗ûl÷_Ý´&÷'‘û}=„ûµÕ•å¥Å…ù—s²2ÒSS’“âc£Áï Áïä`okmeanjldÀ ÿ1€ŸHþCQòKàÉ/*",Œ'?Ÿü¼ÑÏ¢Ÿe?þ‡ò–TŸ`Ÿv7–}°ÛÐæÓèêo]óÇYÞóO%>—ø{ö +- câCäK È?HD>F¾ùjšZ:ºú@¾™…¥µ­d¾;#ó#£cã’’SRÓ3²r.ç—–“æwtõ`æSæß"̇§éc>óÿ†¿O_­×|ŽÐÿ} +-}W˜Vxœ>ÆCÿöÍë‹ó³Ó“c#ƒ}ÝmÍ µUå%…y9i)çb£Î†øz¹» ôMôu´ÔU”NÉŸ–úG_G_ˆ@ÿ›èoèÃÌ}ö·mGH öw’ì‹“ì“>!wJQEM±oneëàìîå{:(ôlT칤”´ŒìËÅeUµõM­Ý}ÃcÓ3ó ×nܾsï°¿ò6  íƾÀܳ.÷_¿§ûׯÎîáî·67ÖÓîÓÁƒ +-~/7WgG;kK 3 ~]-M 5üDòüÌäCÉÏ+ÿ.¦µÜôóÚOáÏ 0Ýmtìÿ–ƒ£–uvb÷øý „Ýø¼ '[{’{¦÷à3~v±ÅcF>N>ùÜ䛘™[ZÛØÙ;:»¸y@æûã™Ag>e~eum}c3f~ß2R€ùÏ™æc‘Âcþëu›Ïú}lV±Ð_…AÅÑ¿qmanfzbtx ·»£µ©¾¦²¬¸àrvFê…¤s±QgBƒNûz¹9;ØZ™›êëhª©(ž’;!}ŒD_œD'†>üC·oãCÿw›èo”Ãbÿ#œý-löwïÙ+"ŠØ?ôåWÀþq¹“ŠÊjšÚz†&ûnž>þA¡g"câ“.¤^ÊÊÍ/.«¬©ojiïꟺ2wjéîý‡–Wž<…€‚]"ò åþ«ÿ*÷ßðç>±Hä& rÿíþôäøØr¿»³s¿¦ª¢¬¤¨ /Ü'ƒ? þ`~_oOw7'G{;+Ks3cC6ür<ðãÉ’?–ü|òóE?›~û)üiýùÃ]:öéÀ&ágüô³ƒL}šýw~“âžá='øtâó‹‘¿"ÿù¼äËó¯Goeckïèäâêîéíãw:™ùÈüÌìܼ‚¢’²Š*ÌüÖöNdþИ?}evþêâõ·™O +-™(|¡ÿ>•‚O+ù6%…ýŸaN!ôŸ=}¼²üèáý»K·nÀ‹ôÊÔøèPoW{Kc]MeiQ~nÖ¥Ô ‰ñ1‘gBý}Êý|°Ü'û (Âý¿2ÜN¹ÿÜ_Bî/ÌÏÎLON ÷û{‘û-M uÈ}<ø³2ÒSñàÅ‚?‚ßÏÇËÓÝÕÅÉÁÞ–‚_?$??3ùA~ .ù…(ù¹égÚOâOë¿õ-øn'Õ'Øg¸ÏC?þ7m>Ž>õÜüs³•õA’{Ú{.ðIñ…¸Ä— Ä'"Ÿ$"Ÿƒ|Ss +k[{'gWw/_ÿ€ ”ù‘xæ'§¤¦ã™™_S×ЄÌïîíóÇÀü™5›=K©A]Oè¿úúhH_þðâùêÓÇ(ôïß¹}óú"TÉäøÈ`Og[sc]uEiQ^NfúÅäĸèˆð@?oW'{K3c=m Ue…“²2Ç~÷ B?…þgú;ô?ÙDÃ~ö?ædÿ‹½Â¢âûöJÉÈÊ+(©jhéRì{û‡EDÇ%œOIÏÌÉ+,)¯ªmhnëèž™_¸vóö{€ý•'«ü¹ÿ÷õåþqÿ&rnfz +-Ü÷»:ÚZš ø«+ËÁ}<øÓðàCÁàïëíåáæêìä`gkmeanJïð+)ð³“ä—dÉÏý¼ô³ì'ñ§ôgðÏ ðJ}’}†ûÌó)Ç7Éï½û[¤ö8÷<Þs‚O'>K|IŸ#ò1ò•¸È·sptvuóðòöõ? +-™Å“ù`~qiyeu-˜ßÒÖÌ›ÀÌ_@æ/ݹ‡Ì_æ3ÿ/Âüµ†þO0 è=údeЇÇèk ó3ÓcÃ}Ý­Í µUå%…y9i)çâ¢Ï†øy»»8ÚY#ôuµ4T•äee¤Hô÷‰‹ +-ïýb·Ð.~ô?ÞDÃ&û¿çe;Åþ.œ}1Äþá#ˆ}iYùSJ*êZºúF¦ÖvŽ.î^¾§ƒÃÎFÅžKJIËȾ\P\VYSßÔÚÑÕ;04:153wõ¬Öد¯ ¨²4€ãUû°3ê–c¹Š ÉÁ1ŠˆJh¢da (Š’sMÎI$‰‚€ä;G iÉAdPÁ¸U[;;û05ëÖ¬³µ{ν}›{ow3jáÓò=öù/çûõÿ€Ü_zö +-®تUö±Üÿð©¹/×ýòÜÿÇZîC÷‡<.›I§ ôõtu¶·÷aðWU–£ÁŸ‹?TDXHp ¿ßmŸ›Þ×¼®Èß ÂoD€_’ü@~­5äG¢Ÿ@?Áa<þ²ú“†”Üxö òK~Ø*G}™G†Üï`Ú¯rOþÁÀ'$¾¬ø òuÑÈ?B ßÈ’o.ükÞ7|nûú‡„E€ÌO„™Ÿ)ÉüÒr$óë56·¶wtõô óÙž@8,921…˜¿ˆ˜ÿRŽù?“Ìÿðyæ“BÿzCWCÿ'x;áå|µ²ü|iqa*¾²|ñe"ojÈ·¢XÛJÈw»è‘Ë×? ($,<2:&.! f~>ókjëAæ·¶wvói &›Ë ˆÄm¾¤J÷sBÿ_ï±Ë ¯&¸™ïÞ¾~¹ò }ðâsYŒÁ¾îζ憺šû•e%Eù9™©Ô„بð_o¯Ëžî.Žö¶ scC}½ãGôµ4úûöîÞ¥´ƒ€þWèoÌï³Üìïܵ{ï¾ýªjöÐ78c|ÎÌ‚bcï育ï“@MÍÈÎ+¼SZÙojíèî 39|á0Ȫə¹'€ýç`½Þ¼û X®ååþoëû8÷ßËuÿtqÿ)âþäø˜,™Ïå°ôÁþÞž®Ž6üuWƒ?Z +-51!.&*2<4$(Àß÷~g~Š•¥€$?~DþƒdùUQù¥ÑÑOÈþmŠT^ÕÏófE£è¯¥>úù_ÀLü€¼•mÄÀÇÀ_M|(¾*Yüƒˆøòaäò-qä»ò/]¹Š’ïŸHM™ŸËüê‡0ó[Ú:ºº{ûi ‡ËŒŠÇÆ'§ffç¡ùÏ›ÿ ÉüÏ +-ýÿ*ýb¡ÿ÷Áµ·ÄxƒBô'ÁtXÈã0é½Ý­Mj««*Jïæeg¤&ÅÇD†øÞ¼~õ’DßÆÊÂìœñýÇ$è«¡èïèó7Ðßüüûhîcì«öµu¿=tä؉“gŒÎ™·²±»àìæqéêõ›·ýƒB#bâ“RÒ³r ŠK+ªªk5¶´wõöÓ˜lž`X$Ÿœž_XYs,Ü/ ûÄÜÿíSrÿ#Üÿe ÷—P÷§''ÆŽ <›I§ ôõ€àom–9 þü™é©ÉÔÄøؘ¨ˆðÐà ?YøüÖþóæ~Ròãå×ÖÒÔÔPW‡òËÒ¯„ÑO²ÿ²ÍÎ8¡ñ¿àÈ—˜¯}Œ}Â٤÷Gæìod¼GÁW’Š¯®®¡©©¥_&òMLAäòmò!ùž ò¯^».%?,"*:6>1)95=#+'f~éjæ7ƒÌï™?Hg²8< Ðü Ôü§ˆù+_Æ|…¡ÿ«$ôQôá„OÐׯÀ…\Z\˜Ÿž‹†<6ƒÖßÓÕÞÒX_[}¯ünqAnVzJR\tDhÿm}7ç v6VçMÏ18yâØ‘Cßêjkj¨©ìß·A ý ô7?k³¿EʾÒî=û”UÔÔ5ö¿;~òÔi£³¦ç-­û®¿¿ríÆ-¿ÀЈè¸Ää´Ìœ‚â»å÷<¬olnëìéd°¸|WcShîƒ-{-“ûè~Áíú€Ïý/çþ[èþ2âþÂütô•h,—ÍbÐú{»Að·Hƒ¿qa~nNVFZjrRB|ltTDXhp ~7g§ ö~ +-„&??&ÿ²ü’èWAä—ÐOÊ~‰ýþ2úK–(ý'âÈWh>Îý­äS±³e%k¹'x¾|(¾Š4ñ‰âÁÄÇÈG#ßÂ’bmckïÉwCÉ÷äß„äBò#£cã’’SÒ2²²sóaæ—Á̯™ß2¿³»·o€Æ`²¹¸W^R”Ÿ“™–œèwëƵ+ß_tur°³¶15=;7¿ðô`þ24ÿ­"ó%è+0½Bÿ¯ ôß¼z¹ü>zLOßÀÐØÄÌ‚bkïè⎰’žWx§´¢ªºöQSK{Wo?Éæ †Dâ±ÉéÙùPX/V^]«ö7™Üÿurç>¾B÷Aa¡î/.<™›™šŽ <›I§ ôõvw¢Á__[óàþ½Š²Ò’₼œìÌôÔj¢ø¯^¾äéqÑÍÕÅÉñ‚ƒ>ùÉOˆ~u$úû!ý$û1üIúË›0øœ—¾úF:¯=Æ=Ñ{|è=L|uBâ¯%>ùv ò\\!ù—dɉKH¤¦¤¦gfåä—Ü-«Í|:“Åáñ…Ã#£â±ñÉ©™Ù¹'ˆù/ ùo>Åüõ ý÷äÐý±Bqa~vzbL,pÙ ZOW{Kã£ÚꪊÒ;…yÿc¿¾‚¢J³ŽWÍÖŒ£³U[cŒ( +-*%""‚HÎ9Óä,H$çœS74MÎHΚîAÔQw¶¬Úrvvkj·¦ÖÝÚ‡ýîwCßneÔ§éóÜ}ŸîùÿMJˆ‹Ž  ô£x¸:ÙÛXš›Ü3ÐÓ½©u]íš’ÂÕ˲¥Ï=}ò„„8@_XèÈ!^ô¿ /ÒÝÇÙÿe?—ýÃBÂ"¢bâ’8ûròJ*jZÚ·ô Í,mì\=¼}‚Ãî?ˆMHJÍÈÎ+,)¯ª¥50ZÚ;{ú†G'¦fæ—™ ÷7žÂÜÿæþÛÏ‘û{qÿg^÷_÷·€ûëö*seiq~nfzrbltxüôzj]MUEyiqQA^NvfzZJR"8~Wg'~kK sSc#Cnòù!ü<ò_’•ôKãÑOÐí'²Ÿ°Ÿ¨?Êÿ÷;âÍ/ý÷;ή7àý'ĵçåž×{4ðñ‡ࣉ/ À—‘½Ä#>$‹|Cù¦æ–Ö6¶öNÛŸ˜”’šž™“WPX\ZVQÅÍüŽ®ž^$óAsLNÏÌÍ/.­0WÙœµ'›[Àü—¯¾Œù¼¡ÿß÷BGŸúO7Ö9,æòâÜÌøØèëéloa4Pk«ÊK +-ó²3R=Œ}p?,8À×EßÌØP_ï–¶–†šŠ’¼Ž¾¤„¸˜¨ˆ°Ða.úûQô¿FÐÿ†¾Àüßýð±çþ¾}¼ììGØ—:Aæ’œ¼¢Šª†¦¶Îm}CcS k;Gw/ÿ Ðˆ¨Ø‡RÒ³r ŠË*k¨õÍmÝ}‡FÆ'§ç°ÜßÂs.¶nŸ’û¿Å}ØYÀý€û µÖ×جՕåEüÓSã£Xðwu´µ63hTüe%Å…ùy9Y™é©þXü¾oO~G{;k+ s3Scü0ùüDò£òúå®ðG?/ý\ûùñ'ô'ñO\€]çàŽóñ>D`kÏÇ=×{>ðyˆ/¯@‰|(>ˆ|ùÆ ò-¬¬mìò]Ý<<½)¾~(ù‘ùÉ©éY9yù…Å%eå•Õµu´þÌŸ˜šž[X\^a²Øœõ' :žìà5ÿç/cþn¡ÿWPhèomÂÐ_Z˜›žzÜ×ÝÑÖÜXO­©,+.ÈÍJOyäïãåîâhgmajd¨[G[SCUEQ^î’Ì…óRgúÇ!úGôÿD ¿o7ôè ²ÜGÙ?*v °ê dÿÊUEeUuÍ:ºw[Ù:8»yRüCÂ#câ“Ó2sò‹J+ªëêéM­í]½ýƒÃcÓ³Hî³×@{rÿÍ®¹ÿe݇ÁºÿÔÖæÆú‡µÊ\Æ‚|l„þ¶–&½žVWS]Y^VRT˜Ÿ›“•‘žš¼-üî®.NŽv¶6Vää×»%?”_ÊD¿7ú!ýXõóÛÏ?®?äõ=ä#°ÝÚq>ê_‡ ë!ö˜ö|ÜóyO> +->–øˆøŠP|U\|$ò¡øDä[ÙØÚ98:¹lGþCŒüìÜü‚¢’Òòʪš:j=½±©¥µ½“ÈüñÉ©™Ùù…¥å•U¼y›Àü¨ùù»™ÿî“Ìç ý_yCÿ- ý_¿͇þüìÔÄØð`oW{kVW]QZ”Ÿ“™–œèGñtsv°µ271º{GW熦ºª²âÕ+(ú§NH?&vTD Cô¿ /lÈìõ>ûhîö… û'N9{Nú"`_Aùšúõ7uõ [ÚØ;¹zxû‡EFÇ%$¥fdç–”WÕÒ-m=}C£ãS3s ËL®Í­ç/^¾þó_vÈý“Vno Çïþ»í܇{ƒÿ \=ÄýgÀý'ë6‹¹²´¸0Ç þ~,ø›ꩵ5U•å¥%Eù¹Ù¼ðG„…øûúx{y¸»¹8;9Àä·Éo’È&?*?Œ~ ?ˆ~y,úyè—Âè'Ûσ?IÌô7àóþl!Üz²ödîÉÞ£àKñƒ$>_ ŠÀ'Ä‘ˆÏÈ„ù.nî^Þ>¾þAÁ¡a÷£òÓ¸äWTÕÔRi ŒæV"ó‡GÇ`æÏ/.­0WÙœµ'ÀügÏ¡ùxæïÕü=†>¹;þõO4ôÿŽ~kb¡ÿ } ý™©ñÑ¡¾žÎ¶Fµ¶ª¼¤0/;#5)!öÁý°à_oW'{K3“{zº7µ®«]SV¸zEö¢ô¹³} ýƒý?~'@_0»Ìî쇲°/|Tô˜¸Ä‰“§öe/Ë)(©¨ihißÒÓ746³´±stq÷òñ +-»ÿ öᣔô¬Ü‚â²Êj}cs[Gwïã¡‘±ÉéÙ…¥•U6XÀ§ ¹vÈý_?)÷wwlÞ/˜û?î#ÁÜßz +-Ü_c³VW–—ægg¦@ð!Áß3ƒÞ@£ÖVWU”—c𧽿ŸÅËÓÃÍÕ™›üf ùùïàòãш~”~YŒ~i”~²ý|ø“ôGýG~xîy„v˜ü{¸f=Y{^îIÞ£àKcàË¢à‰ O|\ü;P|c3nä;#‘ïEÙžüÌìܼ‚¢b„üêÚ:ZÑÔÒ†d~æ3YlP›[À|˜ù˜ùoá‹·ƒùäêØ«ùÿã}ù¶ ý70ô_€Ð²Æ^]YšŸž|ÜÛÝÑÚÜX_WSYV\›•žòèalTDh¿—»‹£µ…™±¡¾Þ-m- 5%¹ËýÓ'OHˆ=*,täŽþû¿ /˜ggö¿ÝàÎþ¡ÃBÂ"¢bâ’ûç/öåUT54µunëß52µ°¶spvó¤ø…FDÅÄ'&§eæä•VT×ÑèM-í]=ýƒÃ£S3ó‹0÷Á>ÿáC¹ÿþÅÛ}íöàþ?Þwìàþõ5{ þyžàïéêlomibÐëiuüeüy$øãb¢£"#ÂCC‚ýý|)ÞžDòÛZ#ò›’äçF¿:ý€~‚~Xý¤ìöóàÏÕçúìïÀoîƒD°G‹bÖãØÚóp{ŸTø|øÊhâ«sŸ$¾)"¾µ-ù®îžÞ_?ÿÀ ÐðˆÈ¨è˜¸øù…Å¥e•ùõôƦ–ÖöŽ®žÞþǃC#£ã ógÌ_f®²8kàu{ºõ f>×üŸ0ó¯Ýç6ÿáÿ†þÆ:‡Å\^œŸ™šèïéjoi¢Ój«+J‹òs2Ó’ãc"ÃCý(žnζV¦Fwõoëhkj¨ª(ÊË]–¹p^ +- /)!.&*",tX€¾`>vv`ÿ~ö@öKž6ÿ9eþßá{õÌß)ôÿµ›ÐßX_YZ˜›™êïéêhmn¨¯­*/)ÌËÎHKŠg³"ÂC®\õõºäyËI;kKs#Ýã} 5UeE„þú}h¾}ñì01Ý߇Üÿ Ê}À¾fÿwŸAö%¥eää•UûšÚ€}}C3 kÛ'Ýθ{\ôò쇄G°ØñI©œ¬Ü‚â²ÊšÛ M-íÝ}ƒÃc“Ósó‹+kTî?ÊýW¯ÑO‘û¿¢û? ÷™ÁÿgüOAð?BÁ¿ƒia~nvzjb|tdh°ÃßÚÒ,nvV'-59)!>ŽÃ"ÉŒ“ÿŠŸhùIô3é7240Ð×#ÙOu?¦þ„ä?ZhÐK€Z{êr "E=´ž‰=ÖžÁ=å= +-|=}C#&ø$ñE‹ïÄ¿æt=˜D>+†Ÿ”œšÆÉÈÊÎÍ+"¿£³ “?:>15=‹3‘ùOÁ=æó2_”ùük>ú?Ó¡ÿú 1ÀEã…þÚòâüìôÄØð`_wg{ ýšÊ²â‚Ü,Njb\LÔ­°à ÿ+>^=ÜO»9;ž°µ¶031Ô×=~D[󠆚Š’¢¼œŒ´$D˜O¡Ï ý}LóÅ苇Œ0û(÷?ù„°r³/+¯¨¤¢¦~PSûÈ1}CcS +[{G'×Óîç/\ö¹âv+*&.1%=3'¿¨´¢º®¾ñNÛݮޡщ©YîÂò*ûßîûø2sÿí®ÙßÁ}ô +-éöBñõš¸ƒŸrÿ3¾à_‡Á¿À›™žœèïíéêìàÁ_]YàÏÏÍÉÊ䤧¦$%&ÄÅÆäÉå÷%ò{zÐòSÑè·ô[úMMŒQö ØOðç×òOù7^d 07Á®‡þ"9 ªŒ~@c/¤=á^Ð{øÆ&¦| ¾ŸJ|Z|O"¾/? D~(‰üùI)©éœÌ¬ùuLò{û††GÇ&&§gæ¸ó‹K+ŒÌ3ÿ[*ó¿#™o¼jè® šÿ†Ü·÷ ú¾‘Ì — Dj ¡Ðÿ#ú«K Ü™©ñÑ¡Þ®Ž¶; ô+J‹òs2Ó“b£#o†Þ¼æçsùÂù³§]ím­,L õtŽAôÕUU”äee¤ ú8ôýÿµ4âù?&û ±rÿ³ßþÅI)À¾‚’²*`_ëð1=#Ss+{'—SgÏ{^òö»x#ôfdtlBrZFv^aI9Ìýæ֎ΞþÁFî?üZ8÷‰ûÿeî¿—ûð5¾$îcø¡û$ø¿¦‚?wöð—Aø³33ÒÓRø’?,ÈÀl~OþèGôÛ‘êÙo†²Ÿi?Á•?CÈ?ñ-¼ð Ö5J¿0|& ÓôPzÊz€=C{T÷˜{~ïAàð-IáÛ!ðùß“Ùø@ü0¾ÈOIKÏ€äç—–UTV ß70ÈŸœš™åÎ/,-¯®­of>2ÿ»çÄü—üæÿŒƒwÕÞ×ü½…þ3:ôWçç¦'ÇFûz:Û[›nÃÐ/ÌËæ¤&ųYá!×®úz_òÇèÿVýÅè‹g‡Ù™ýO%öï§ÙÿRRJZVNAQYUMãÖá£Çu ŒLÌ,­íNœtq;sÎ㢗ïÕ€ë!á,v|R*'+·åþWM-mw»{†y¹¿bl‡Üÿ/÷©Ç¸§—øN÷‚îƒ _$~’"‚ÿ þÍ{ëk+þ¹Ù™©Éñ±‘áÁ>aøËKKŠ +-óór²³28i$ùÙѬ¨ (C~_ù™ôÃ꧳Ÿi??¥?jÈ?ñ-¸ð ¶Ùï1Ô÷Ô)ç±ôzÚzŒ=¥=Ž€÷8ðéÂ'à ˆïË?ˆÅŠf“ÈOãddeçäå•ìDþ$zvn~aqyeuýÞÆý­í‡ ó¿A™ÿ'fæã°WŒ2ÿ§nþ[¦ù$ô_cô_ˆýåîìÔÄèð@o÷ݶ–¦¯êªIè§$ÆÅDÝ +- ò¿âëuÑÃýŒ›óÉvÖ–f&FúºÇ!újªÊŠ}i)É/iô÷ï—øTŒ¾xv9»eÿ€”´Œœ¼¢² +-`_SûÈq]}Cc3 kێή§Ý=.\ö¹âv+Š‘ûUµõwZ;ºzú‡FÆ'gææ—@îßß~GîÿH* ¾ÇS¹ÿv÷qwîÿ“r¦ ~žû øÿƒÿуí­Í{ë«+Ë‹þé© ð××ÕVWAø‹ òrs²xÉÍŠ¤å"ò E?¢ß ÒOg?e?Ä߈àOôGíOóO/¸ð [€ìÆ2ØixŸ#_ħ µ0õÐz{ÔöD{̽äžç= |¾_(ñ‰øA´ø‘¬è˜X¾ÈÏ+(,.)-¯¨ª®­«"t|’Ï]X\ZY]»·±¹µýÜ*þÌÇæÿõº]àz½‚]!Ò|ù{5ÿ ¼b}üòGF胻õÑ¡?>2ØßÓÕÑÚÜX_[U^B?#-9!6:òfèÀk~>—/œw?íêìhokeafl¨¯{숶æA 5%Ey9i©bôųÇÉ>t°/Ùîö%¥edå•TTÕöé蛚[ÙØ;8¹ž:{Þó’·ßµÀ¡ŒÜ/.«¬¹ÝÐÔÒÞÙÝ78<61=Ë]¹¿ rÿ±@î¿Àì¿‘ûoÞ/Âvë>Ž1ø2QðÏ? +-þÇ>ؾà_[]YZ\àbøGùà¿ÓÔᯩª,/+-.* ÉŸžš’œägóËÈ'¿@õƒìwÄöÛòºãolLô'íù‡þ“€6\ÔÀk@“± vÞçðµð)z(=¤—=Àž´=Öä=âž×÷¶Ø{¾³@áó‰È/>ˆŸ˜œ’šN"¿ ¨¸´¬¼²ª’ßØtG˜üŠüõÍû[@æ?Ê|t±þö›ÿý—ü æ  ÿ†úÐ|:ôÑÅzÎ }€>3ôûºï¶ƒÐ¿]SYV\›ÅIMŠg³"ÂC®\õó¾äyîì)'{+sSc=„¾ºªŠ’‚¼¬Œ´$@™Ñ—€èCóÅè‹gWóÓý}|¹ÙǹØ—ì+()«ªkÒ:|TGÏÀÈÄÜÒÆÎᤋۙs½|¯ Ü‰KLIÏÌÉ/*­¨®¹ßÖÑÕÛ?4 +-sAdî/"÷‰ûŒÜÿPI»’Œü ËPð?ýÿÃí-ÿúÚêòÒâkÞÙQé½h " ÒA"Ò«iö†ÅBGiREiÒ;ÒEШ» ‰®5jv7[6®ÑlL&«Y³™ì&3ûÿŸsžvïelÌ$;sÏÛû<¼zÎç÷%=-äOæåO¤òËF?¥³ße?ßý|øü1ý‰þ”ê?.7l؈Æ`¼#_6ñ©ø‰¼øÉ ~JZzFùEù‡**«jŽÔ!ù­mräž=÷!È¿äCEò¥™O¾*ø¬hOPó˜`ó¹ÐgIñ/Iè?a¡…þõkW ôÏþá4„þ`_OW{k„~EyiQAî¾Ì´½»vlÛœ¸nõŠ„¸¥‘á¡Aþ¾Þžî®.Nö¶óçY˜›Ížejbd ¯«­¥©è³Ð§è‹Cÿ±ùJô•GÑy û$÷ýiÓÕÔ5´´uõ ûVÖ6öŽÎ® =ùø†„GDÇ&`îoÚš”¼'5#;'¿°ä æ~cK[g·lîß„Ü¿Írÿ©2z?I‘û2¹?1îK‚®'ÜO¸ xCI—}) ~¨3~è3„ÿâŸ.|$ _O÷Q„¿¥©±¾®¶¦ºª‚%aA~^Îþ}Y™驼üÛˆüÒOªŸÏ~Î~/OþLlÊ?ó@غtæ +-c øpÏÐW,èûVz”©ç¬ìIÛSíEÜ{xzqÞóO +-_!øˆøÛxñSÓ32³öíÏÉË/(d‘_QU]S[WßØÔ‚äíîé“?vîÀüK@þÇH>d¾„üG4󿦙ÿfþs>óÉw%gþ/oa¾lè“–Pú—!ôÏþñÌ©ÃÇzv¶57Öaè—æçdg¤îINÚºiÃÚUËãc£#ÂBý|y.tuv´³±¶¢èèúêjÓ§1ôßU¢¯‚_€Ÿ?Àá¿Dáãà:6Øß׋𷷶476Ô× +-É_\x  ?W,ÿ."?F¿T~Ž~Ìþ0Ì~f?t¿Ïboþˆ?¯?áŸúO'€l²Ü°c)=¢_¸‡‰ò„ytÞÿ*G=µž`ÏiO¹'yï½Ø‡ö=z†Ï/Ÿˆ¿K,~n~ÁÂb!òkë›[ZÛ‘üÞ¾þÁcCÃbòÏù—üë7ù˜ù@¾ùhþÓ§\æ?£™ÿ‚Ïü76_„¾œù4ôÉ÷$ +-ýÏ1ôoɆþq ýýÚjúyû³ÒSvïܾeãú5+—ÅÅD- ð]ìåá¶ÀÉÁÎfžåÜ9ï¿7ÓÄØP_OG[SC}†€¾ªªÊd ú“ÄèÿÚ²(Ïoø¼ûS¦"ûjšZ:ºú†Fûómœ\Üܽ¼}ýƒBÃ#—Æ%¬X½.qó¶»ö¦eîËÅÜ?\ur¿½³»o`è%¹ÏÜÇ2{!rÿ rÿ•Ý'÷Tüe‚ŸÀῠ🗅áïêhokm%yYiIÈŸÇÉŸFä‡è§òK£ŸV¿ýÔþÀþ|ù3ý ÿœÿlpppè +-аáÇ`œÃ=C_±%¯ÛSè™ô@=g=ÁžÓžÕ=áÞ? z/>-|¹Äñ!ñ‰øiœøy ~QIiY¹(ò›[ÛÚ;ºÆ'ÿ +-’“#_Èü/e2Ÿ|Lo¾€>oþ òß#gþWOà3úBýëפ¡ßÝÙÖ¡_uø ýÌ´½»vlÛœ¸nõŠ„Ø¥‘á!Aþ¾Þžî®.Nö¶óçYš›!úFúº:ZšjˆþÔ)}%úÊó†G!ûÔ}dŸæ>°¯®©¥­«g`db:k¶™¹…•µ­½£³ëBÏE>~!aѱñËW­Ý°ikRòžTšûe‡*!÷›[;ŽÊæþ Èý[ŸÝ½÷às¸°x]ûÿ$uU&÷'Ä} +-?^T +-ÿó—?…ÿ“›Šà?92|àïïíéîêìhã“¿º²âpùÁ²Òb©üýDþ$9úIöÇÅ’ìûY÷‡1ü©þÞÞ<ÿœÿt¸ À #@g€-=vÒ#ü`Ï%¯91ç)ôŒzö`=‡=Õžç>(8„õ=xOÁïåÀO"âCâKÅ/.-;X~¸¢²šü¶ŽÎ®îžÞþÁcLJGNÊ’ÉÿD–|’ù_±Ìÿ–eþsF>gþOl>ý–Ð| ýï(úø ý]ú_½Œ¡?FC¿Ÿ„~„þ¡²â4ô““¶nÚ°vÕòø˜èˆ°@?ŸEž ]ím¬­,ÌÍfÏ2562ÐÓÕÖÒPôiè3ô©ùJô•çµ,û¢ÜGöIîûÓ¦«©khjëè›ÎÂÜ·²¶±sp^àæáµØ7 8tITLܲ•kÖoܲ}'Íý‚¢ÒrÈýz>÷Ož:3Êrÿ:äþ§·ïܽÿào_Àåþ3r[˜x÷ÿ#¸ÿ*Á/ÿþ³ÿ€ÿÄðñ¡cý}=Bò7ÔÕ©®ª¬8$•?;+“È¿Gý¢ìGû¡û!üÃþ¨¯?Æ?ðOü§€ À&€Ž®€ [n ä÷£3{xcǨQÖ3ì9íP{R÷4ï¡ï9ïYà+?3+[*þ¡ŠÊªê#µu Bä÷ôõ:>|È?䟕!2Ÿ‘Ïgþc.ó¿QùÿeþD™/„>ÖÃ3ÙÐpÿîÛŸ’пrIúíúG0ô‹ +-r÷ÑÐß²qýš•Ëâ–F- ð]ìåá¶ÀÉÁÎfžåÜ9ú¦Æ†z:Úš€>„>Aÿ÷ïŠÐ§æ¿#6_‰¾ò¼ìüNì¾”ýÉ*ªªû3Ôûú†Æ&3‘}Ëyómœ\ÜÜ=½}ýƒBÂ#—Æ&¬X½.q3ÉýŒìœüBÌýÈý6iî_÷årÿ_ÓN#•öBä¾ø²¾æ]¥—õgY÷”¸Ïÿ7\ðsðß¿ÇàÿËŸ üW üþ1€ÿ4À?2<ÉßG“¿’¿©¡^Nþü¼\"Æ8ôÓìGû±ûãÀ~þ€?êÊéÏøçü§ €€€#@g€ =®Šÿ«}š¼èAœGè©ô@½`=bOµGîÃEÜÇÄÆaߣ÷4ðÇ?ƒˆŸ›—/'~}CD~;ü>ˆü¡á ÿ4?†ä_’™ç.ŸùøÌGòùÌçÍÿQÖüŸßÄü_Æ1ÿùQ0ÿ1|9ðáÜ»óÙ­¿ +-¡?Ê…þÑŽÖfýJú9Ù©{Hè¯[½"!6:2<$ÈßÇÛÓÝÕÅÉÞv>CßÄÈP_WGKSBŸG_UUe²}åy«#›û +-ØŸ2•°¯®©¥£«o`d2sÖl3s +k[{Gg×…ž‹|üƒÃ"¢câ—¯ZKrwJzÍý +-Èý¦–ö.Iî_ºrMœûñîr¹îOÜç3íMr_Þ}veâÝ/øŸ`ðsðßø1ø%ðŸGøG~HþHþAHþ^HþNHþ–æF”¿†—¿¤¸ˆÈŸÃÓò‹é§Ùöc÷CøÇ“ð'åAõñþs L€7]œ¶ÜÈîGOú,yÍ›:O¡GêI×ë9ì©ö‘Q"î!ï±ïÑ{øbðQ|ü"~Qq /~ Šßâ·µwBä÷BäBäœøà?ŠäŸ—'Ÿd>%3ÿ Ëüoå2_Æüÿ¾ùúôû¡æO¾Š>~6åCLúõúå¥$ôÓSvïÜŽ¡¿jy|LTDXp ŸÏ"…®ÎŽö6ÖVæf³g™šèëjkiª#úh¾Bô'‰Ñÿµ5Qžÿ“3û辊 +-²ÏrØ×øûu\Uyp|°ã Ì´Jro–›{³} Ù÷}!; «Š²¨¬6ˆ²VhVé¨È°T[*KÙµˆfß0@§LAÐÚ©NŸå¼ï9÷æÜ !Ngîó19ùö>¿ç7wO“Ùâãì?iJ@`phDTl|RJzfvn~QÉœù˜ûKW¼¼šsÿ ÌýJî±Íý†¦–ÖöŽ®nˆ6Ê}vr 7WÍýAt_ÿ·ö‚Ÿ¢ á¿&à§àð_þüÁ¾à‡ä¯–É’¿ ’äߣʿý-–› _D¿¦ú9ûE÷CøÏ£ð§ò§ôçöWø'ÿé¨'o_<| hûŽøU© OIÏУôD½b=cÏÚÍ,Öpy/úž_Sø"ñøÛXü·¶«âïAñÿ¼¯ "ÿ Œüjˆ| ¿æ<‘éóËzäcæ÷ÞÀ7c7óE3 ØüõÌ¡O/ß ý^ +-ýŽþCÿ] ým[(ô_^±ô…EúsJŠòs³3ÓS’âc£"Bƒ¦PèûûùXÌ&@ßàê"CÐwrRÌw ï˜Ç]öŸ”ìSî#û¿áj0º{˜¼,>¾#G=5vüÄÉS§…†GÆÄ%&§eLÏÉ+,ž ¹¿pÉKË)÷7m¦ÜG“ûUÕ'O©¹_ßØܹß[Ü‹;ÌÑFɦ,ï ¸ÿƒ¾û6Áÿµ~Øa„¿׸ÇüŸ]$ø!ùO©É“ÿÃûµòï`ù•èߦ~²Ÿè×ØÝÏáø[ë¯ðOþÓà À'€^ºé| ä¤JוQ¾I§?`åÉy€¤Ô+Ö#öRû9sç î!ïeß³÷ >z¯Müm"ñIüZñ÷ƒøùG0òQäŸ: ‘äcäëO™ÿU/>ì‘ù_ÛÏ|ù? ŽùÈü{lþmê„^x,]ím-ÍõµvCÿú›ÖSè¿´dáý⼜éiɉq1‘á¡AÓ¦N&ôGúz[¼LîFƒë‰þ0 úl¾}Ç p†hÝÿ™šûÀþP'gg û.£›‡§—ÙÛw$äþ¸ ûA!a‘ѱ I©éY3r fBî?ûübÊýW×Qîÿ^“û‡)÷OËܯkhj†ÜïìîÁx“¹î£¸ÿÝ ¹/áÿ^Ù_ýàgøoIø»­à¯¯“ðcò#ü˜ü'(ù+0ùAþ2kùõ£Ã‘ý¥œýhÿR°_ *©?ó¯øO€/Ÿ¼xè Ð!àÉÒñ[ú‘Gåyz^PÏÖ3öR{ª{%ïÁû¥è=~©ü ôßZü2ÿð‘ +-Šüù@>F¾ ¿®¾/ùðRn⿆ýd¾ùÿ\óïãƒáLÀп‰ÿötwv´µ676À¡Ð¯9«úoP迺šBÿùgçÏ)™Y;#+=5)!6:2,BÒ„qcFûûùz›½<=ÜŒ®.ˆþ/~Nè;;; í‹þúŽÀ<œ}vØw5¸¹{šÌ?ÿÑ”ûÁ¡Q1ñ‰)i™Ù9ùEųç=óæþªRÊý­¿•¹¿Oæþ™sJî×Ö76µ´µwvuÃ:cî+îÃósîÿS²ÿˆîÿ¨ë¾ýà'øoÃ.cÁá:ü]~‘ü*ü”ü§9ùAþrù÷"ýRþ7µôÛd¿ì~*­þ’ò\>xðà ;À§@œáºþ(þ @0¯@ÒõŠõŒ½µöÌ=ä½ì{›Àׂÿ¦Áßk#~9‰‘Ïâ_ä‹È$òµ™oýbÃ|FŸŸ‹jþ]Åü[71º»:Ú[[š ôÁ|ýóç ô÷ ýÍú«–cè?3ovqa~NvfZJb|LTDhp`‡¾¿ŸÅlòtw3úJèë¡ÿ„}Ç<ÆhÙBeÝwröeîûFw“—ÅÇwä(bê´ ðÈ踄äÔŒé3ò +-fΚ‹¹ÿâ2Êý¯÷Íýcûgk0÷Áýº†ÆæÖ6Ìýk¸Ñ·þFë|ç.î2¬òÅ}ÝÜ÷•àðßé~%ù~MòŸÉOòWù”íWåßÙ—~›ìGûWƒýŒ?—¿ÔŸùWü§€O€rðÐàK@S¨3âwüe1+̃ó=K¯PÖ3öR{®{æ¼_ÞÛ~_ðwªâï/; įâSäkÄ¿"ÈñmÈÇim„þ+$òíf¾µùø^´æ‹Ð‡wB¯D˜£žG— ý+—Áü úÕÇŽ–Cèï·ýuú/.†ÐŸ;kfAÞŒ¬ŒÔ䄸èÈð iS'Oèôõ¶x™<ÜW }B8 ï䤘¯‡þÿZÇüŽ.ûOJö‡IöG¸Œnž^fo_Èý1ã&LšŸ”’ž™›_T‚¹¿èÌý5kEî¿­äþG‡ŽTVÇÜ?îqµ¶¾¡©¥µ½û:¬µÈý;°Ð°Ï÷Ï}ø¿ï'øa§a©a«µðwümvà¯ÑÈ´R+ÿ>»ô‹ìWíü×0þPþ«V®PôWùWü§€O€8tèð-°7üÁlúx.+̃óRz ^µž±W´_±rÔ=s}¿Võ^¾]ð÷iů<ª¿ÆùmD~·ùËü (ó­A}(Væß#ó }|×{ºá]´675Ôaèö׿`èŸ8^Uaú[)ôK)ôŸƒÐ/)ÊÏÍÎLOIŠŠƒÐŸ2i¸1£ýý|½Í^žnFƒ‹Šþ0 úl¾}Ç<öز/rØêäìŒì£ûȾ«ÑÍÝÓd¶øøù‹Ü Š‰KLN˘ž“WXå~ùÑcÕ'!÷/|zñæ~}csK[;¬7,7n6»÷¿í~Ÿà×Âÿ»ð·Køû“¿ +-é×—_¥_d¿´ð_ÏøCù¿²º”ÒÛÅòe +-ÿèÿqàð À#@g€r æ+AŒüÙ|þ†>Ç¿[ œèAz¢^µž±Gí!îKW¿Âuܯî¥÷"ðUðõÅGð«ú_’ßþÉÿI™?æßÇçAÿ *¡æ_ƒ7ÑÞÖÒÔX_«†þÉêc•å‡?¶ ýúË0ôŸ†Ð/Ì›1=#-91.&2<4C<†¾ŸÅlòtw3¸ºŒPÌô†:ÐwÌ`Ï­û¶ìCî—¹ïâj0º{˜¼,Þ¾#G=E¹?-($,2:6!)5=+;· ¨dÎ|Ìý¥2÷ù¿[ÉýŠªã'>‘¹ÿe]Ccsk[G'l8ì·ê>l6§œ²Ôwßj¡åJ[?ïõCàïAø;~›ä·#¿nôËêçìWíß²ùu ÂÝÚ×(ý•öWøÇü‡ .Ÿ:xèð)àY`5òÇüý)OÎô$=Pom=bÚCÜ¿¶v×=pÿúæ-ª÷ø²ðí&¾Žø6‘Ïäw ù= +-ù7ù·­ÉXæ’ùßiÌ¿+Í¿Ñ žC[KscCÝ—W8ôÏžþäÄñ£G~T¶ïƒ?îÞ¹ãíí"ô×Pè/‚ПSRT›•žš”4BÐ÷õ¶x™<ÜW5ô‡Sè[¡oe¾}Ç t†Øæ>±Ïî#ûÃ$û#\ F7O/³7äþhb? 084"*&>1%-szN~añlÈý…V¹ÿ;‘ûû?üøPy%äþ©3œû_\­­ohjimï€=¿ŽKŽì³û÷ÈýªûV%7÷õƒŸáÀðÓü×þN„_$­Uò?D~I?eÿŽw9û¥ý€ÿV‰¿ÔŸÚŸù/U€¸pðÀ 3€w€OÏb›‘¿ ÏðPyf¡'ézõ”öØö÷7ýZp¿¸—Þsàø»vKð"¾Uä׊ÈGò;‘ükzäß!ò•Ìä?~æ÷kþ·ü,ðMù'󿂧¡µ¹©¡¾ö*˜ñÓóçÎœ:Y]UY~BÿOïïÙõÞ;ÚÐ_‰¡¿B¿¸0/‡B?>& +-B?0` +-„þ˜Ñþ~>Þf/O7#„¾D¡Ïæ;ÐwÌ ûjî;;ûè>°ïjps÷4™->~ûcÇOœ<r?<2:.!95#kFnÁL½ÜßN¹ÿÁ¾²ÿ°_çAQßgÇÇô¯"©ù£Ê)È!jÒ4MšÛûÊÕ$¤mÚ¦­mšÔ;jµ‰­©&QåPîSîû^D…öbw9TiI;íh2éó<ßï÷wì.xÉ´³Ï¿»û×ßë󦸴¢ªrÿdËé¶p¿»Wo0™-ýð²Ã«>*åþUµû·§Ñý‰‚ŸÃÝ1ü£—GF~h¼–ü&žü +-ùÛl䟀~ÊþÊ~a?àÅð‡òçú#ÿ{ÿŸò €#@3€;@KÀn»Ý‰Oè{â/væz’ž¨çÖKØKÚ³º{á=~ +-þàۈߦŸG¾‰E>É¿ƒIɧ¿ ™?æ3ô¥ ó¯“ù,ôÁü‘á‹À|KŸÉ ëíî:öLÛi ýºšªr +-ýLúaRèo•Bÿ'<ôWbè?ý ¡à·BßÓÐçæú..6¡¯Fÿ›VÃyÿãgËþ·”ìÙ—rßÍÝËr?0HÎýe+V­¥ÜÛ>÷÷³ÜOHNËÈÎÉ/,)«¨®Õ@îŸjmï8שíéÕMfk?¼òðÂÃÛ.Ü¿îÃ[~SrÿÎÜŸ$ø•ðßTÂU ?4Þ?&ÿ &¿…%?Éß­u$¿2úý`?ÐOÙ/ÙÝÏßÊ?2"õ§öü‡ð €#@3€;@KÀî/v'>¡ïíÄ_üM0Ð é‘z²ža±GíÃ#"YÝ3îEß“÷ø~~_™øŽÄ§È×Xä#ùƒƒùŒü+ðGÀÉÿ#ŸÌ¿'ò§ÇüÛÜü›øÇ@ Ìü±+`þ¥ Cý³É¨ïí†ÐïhÇÐoÐÔVW”•bè§&'ÄÇFG@èïµ ýŸÿô­¿þ†þ +- +-ý'ŸxB?(‡¾»›ú®úNô7s7K龂}tÙ§ÜgìÏsó Ü÷X¸h‰Èý¥ËW®á¹ÿåþF‘ûŸBÜOIÏ<ž[PTZ^YSW߈¹r_Û£3ûÌVH=½Ë_·û_2÷ïÿ¸€^{Lþ!Hþ~L~’_Ïäïò·3ù¥èWÓ/g¿°?ìgáOøsý©ýÿä? €X˜ÜšÜZv»ìN|Bßû,˜Gè…ôŒúƒ*ìQû˜#±±qñÄ=ä=xŸ*¼—_ ¾”øLüv!~_OâcäùCHþ0ü³'ÈŸ|úSæ9•ÌŸÀü;¶æ_“ͽ Ï~h°ßjî3êu=ÚN +-ýæõu5•å%E¹ú‰Çâb ôC!ôw‰ÐŸ‡þ›?zõ¥u«W.—CÑB ýù^žúú³ }4_B_e¾}çMýfÙæ>±/rßsÿ;Ì}`sßÇ×/ 0hñ£<÷_\¶bõÚõ¯¼ö†Mîÿr/ä~Dtl|BrjFVN^aqYEU­¦¡ Üoï÷»{uSŸÞ~x÷GÈ}`ŸÜÿbæÜwüô¶«á¿Æàÿ'Â/>¼ù,ù/Šä·bò£ü:¥üý­§yô3úkýH?f?ÚŸËíÏÌHgáÏÊõGýÿä?X6¸04¸´ìöØø„¾·±O0Ð éõ2ö’ö¬î÷é™Ü{ üB |¿‚Ï¿‰'>Š¦C)¾ÅÇÈ·ŠÈ¿È"žüF>=}$Å·!º2ÿÍÿ‚™ÿ93ö~pÀjé3t½Ý]d~ËɦMMUEiqa^NVFjRBü‘èˆCúÁúñÐÿ-†þÛú¯¬_»jŲEè/ +- ðóõñö‚П7—›軸H¡ïDßy3v¶ì‹Ü'ö!÷]åÜö=½çû.ð„ÜŒrÿ¹–._µfÝ˯¾þæ[˜ûXîoƒÜß¹w41%-3;7¿¨¤¬²º¶¾ñDó©ÖöŽsÚî^½Ñd÷A(¾QžûÂ}|çoñ÷}Jî; +-~øÿ= üŸ#üRò_¸üµüZ”_ýD£L¿È~a?t¿Ô? õüsÿùÀ° €  ÀÀ %`·ßîÄ'ô=4þ þò9Ð3é9õÌz=jqŸ’š¦àž÷½ð_Ÿ¿E‘ø(¾V-¾…‹CIùÿÀÈ—É¿~wòm2úÍg¡æÃÒô[Ì&ƒÌï<×ÑÞz +-B_S[]YVR”Ÿ›™–œx46&òpXh„þNý-,ô%…þš•Ë—¾ÀBÿ±%úþ |ç{{z¸+Bß•BŸ£ÏÌW£ÿM[á¼ÿ›S徂}tÙÇÜŸ3çdž›‡§×|Ÿ~ !÷‰ýgŸ§Ü‰çþ»Rî¹ ¹("úH|BRjzÖñ¼‚âÒòªšºzÌý¶3gÏwj{tzcŸÙÚ˜ûä>¾ü{ðâßš ÷åà¿ü(?Á?ÎágÉò (å×£üýrô#ýÍý` f¿lØ/㟕™ú3þUþÓˆÀ ÀÀÀ`K@wÈÁ‰Ïè‹ø¦<:Ï é9õ²õˆ=Ó>#3Kæ¼/’½ÇÀ¯ï%ð1ñ[åÄñ»Q|½RüÁ¡!&>E>‘?Îȇ‡~äO!ó'3ѧ'ÏæžÌ»‚3ßo5›Œz]̇Ðóëëj*ËK‹ +-òŽg¥§&‹?qè„þnýíªÐC5„þóÏbèïQ +-ý>ó½<1ôýGæ ú³ }4_¾3ô7ý7Ë6÷‰}‘û.û‹ÜŸ¹ïåíãëç¹ÿøOþðÛÜÿÍïÞÿËýû!¡a‡#cb&&§edçä–”UTÕj„û]ݽ:ƒ±Ïb .^¾,»L¯ûS‚åÇäÉ?|é¢CùUѯ¢¿ è‡ìWÙ_ZRLáOå/é¯âŸü§€`@#+@;À– šÏ݉Ï蛈<*̃ó’ô@=·^Æ^Ò>µ'î‹KJUÞCàøM*ðU‰ïP|xÌ"òÇ0òÇEäOBþíÉÈŸ&óoIæ_•Ì½ ™Ìï3t=Ý]çÏ‚ù-'›45U¥Å…y9ÙiÉ Gc£# Ù¡¿ƒ…þï1ôß¡ÐyÝšUúÏ=ƒècèúûùúx{yú"ô})ô9ú9ÑwÞLû"÷‰}È}WWÁþÜyîžÞûþ )r¥mîoÚü§íû»ƒ÷î;p(<êHܱ¤”ôÌã¹E%å•Õµõ'šOµ¶wœë÷õ¹ 8¢t`L·ûÿQ¸ÿ•Â};øoØÀÏ“ “ßF~+Èßòô:ý¶ô·4Ÿ´µ¿ª²‚ãOåú þþÓÀ° `@+€3À–€.Îá‰Oé«ø#Î<8Ð3é‰zÙz†=Óž×=q_QYeëýÉæ[ðyâëô¿Ä·Ú‰?ŠâK‘¯ ÿÆäß‘ÈÿêÁÈ0óGàºÁ«¥ÏdÐõ‚ùç:Ú[OAèkj«+ËJŠòs³3ÓRÅÅD…‡Ø÷Yðî!ô·nÞ´ñƒ÷6Ø…þÓOýàûú‹òÐ÷p§Ð'ô]])ô9úŠÐÈi¾ófèTî+ØG÷‘ýÙÈ>¸ì»¹{ŠÜ_,çþŠUkÖÛäþ–mî€Üßzðpdtl|BrjFVN^AqiyUM]}#å>¸¯íéÕMfKÿ¸0ÌÜGîÇýûì=uðß~»äÿ;&?¨`'¿*úþN™þ¶ÖÓJûê5šºZŽ?•?Ó߆òŸ€M®Î ]âÇ?¦ï"ò¨<0Îô$=POÖ«±gÚóº'îkë4šú¥÷§[Ûdð;ørâÛ‰?‚â_Añm#ÿ~ÈÐÌŸÜü×ñ1+͆';Ðo1›ŒúÞm§0¿¾®¦²¼´¨ ïxVzjRB|ltÄáƒûCö|¡ÿçm[þH¡ÿî/~æ0ôƒxè{BèÏý.šèÏ&ôÑ|5úÎÐwÞÌ]îû"÷] ÷–rßrß—r‰ÃÜÿå¯7¼÷ÁÆM›·Bî¼;ø³}£bâŽ&&§edçä—UTÕjšÈý³ç»´=:½±Ïü_öë+6ËëŽã¸Ú¢T8†R© {5´jè}Õ›†$M˜3lÀ6ØÆ{ï½÷Â{ï½÷^˜ Þlc›Ù4Š !…Ò`ˆÔó?ç<ûymƒÁéÅû¿}ÏÃ¥ÏïËë>É}ìþSìþówæþÃÈ$¿bùIôËÐßÕy“d?g?Š?Ñ_Ä?öY˜´x`ðäÐ1Ppô~ ßå3γÒ#ê±õBì‰ö´îqÞsÞ“À¿ÙÙ%>Iü…ÅE>w…äÏ/‡|Aæ/Á|@_dþ2¿·»óƵ+—:Ú[›êª+ËKŠ +-r³3Ò’â¢#ÃC‚ü}¼Ü]Pè[š› +-C0ôÿ°cûÖ-‚ÐG諨°¡OÑÿ¥}å½ï“°Ïä>f循*ËþGë7nÚ¼uÛŽ‹sÿKÈý£'4!÷ ŒÍ,¬íœÝ<¼ý‚Ã"¢bâ“RÒ3sò +-‹K+ªjê›[/\¼|õúÍ.äþàÐÈ(vfvîrÿŸÄýÇKrÿõ* ÿ¼~"ÿ36ù~Åòß»;77;#Œ~ýý}½½=Ýœý¸ûYüqùSýücÿÑ€ @#€gv nÁG_ÁEðe ã<•S­`qOëžrOûžñ¾»§··¯Ÿ¾0ñÑsîî½ħäÿ›’OÄ·ä/Ùü§Ø|úÈü{è9=u{bltdh°™C¿½µ¹±¾¦ª¢´¸ /'3-%1>&*"48À×ÛÃÕÙÁÖÚÂÔØ@OQèÿùO»>F¡¿•†>EŸ†>EŸúJô•÷¾Oûà>°ÿ!°Ïåþfœû»Ê}CsK{GwOÿÀðóѱ É©Y¹ù…%e•ÕµõM-mÔýž¾þÁá‘Ññ‰É)‡¨ €?66>Á‚Àñqâ+_ùK!ÿí3ÿ'á®/jþCžù·†úù7®]¹ÔÑÖÒÔPW]Y^RT›‘–œäïëåîêdokenjd wFû”æqý½2¡¿B#?ôUù¡OÑW†¾òVì$ì3¹Ùä>bæÍ[¶mß)Íý¯öTS?¦qRKGWßÐÄÌÒÚÎÑÙÍÓÛ/08,"*6>)%=3'¯°¸´¢ª¦®±¹•ºßÝ‹ÝCîOc÷pî?YÄýWÞþ×øùÉÿBœüŠä'ô?`¢¢èŸ"ôÓìçÙOð—èOùgüG@&€n^˜ºüŽý<äAy`œGÐéõÈz\ö{±ö„{‘÷8ðü)þ ŸˆÁW(¾(ò_ˆÅ_.ùò濘ÿLùsè?k“·ÇÇn !ó»;±ùí­Í u5Uå¥ÅyÙ™é)‰ñ1QaÁ~ÞnÎvÖ–fÆ$ôO@èïC¡ÿ© ôw¡Ð߆Cÿ#b> ÿ!E_úJô•·B§€}âþjqîoظi‹4÷ÿŽrïC‡×<¥}F©¹•½“‹»—PHøùèØ„äÔŒ¬œüÂ’²ŠêÚúÆæ¶ /_½~¹ß?04BÝŸUäþ3û/ß•ûBø_‰á—&?–ÿ;EòËÒÏf?c¿ þTÌ?®ä?X˜ØX²d +-:ú +-Êóà<žR¬ÇeO±ÇÚK¹ç¼g_|EâÇÑÈ—ÿæÙ×bó\Äü<óG†ú{Áü«—/^hmn¬¯­ª(+.ÌÏÉJOMJˆ>èïãéîâhocenbtŽ†þaú{¸ÐßÍ ý \è#ôUTÄ¡ÿ+¥ùÊ[Ù“¸¿J.÷×­Ãì rÿ/lîŠrßAµ#ÇNœ<­sVßÀØÌÂÚÖÁÙÕÃÛ7 (4"2&.19-#;7¿¨¤¼²º¶¡©…ºßÕÓÛ?842:6q{ +-»1÷»ÿúux#øEò?•—_Ž~±ý¤ûEøSý9þ‰ÿd````È !hgÖ@îØä}eœ'ÐSê‘õì©ö"îy}Ïy/ ¾¬øO%â¿Gò˜ÿBdþžù÷ïÎÍÞ™žº=16:24ˆÌïºyÌokiª¯­®,+)ÊÏÍÊHKNŒ‹Ž  +-ðõòpur°µ¶056Ð?«s…þúŸ‰C'„þ&ú¿ÿ2?ôMC•2ô•÷sœ‚Üÿ€Ÿûk™Ü_Ïæþ¹¿åþþC‡ÕkœÒ:£{ÎÐÄÜÒÆÎÑÅÍÓÛ/08,"*&>)%=3;¯ ¨´¼²¦¹ßÞqé +-v¿¯p˜º?³ˆû/tYð¿–Ÿ—üù¿ùŸùyÑ/K¿Ð~>þTÜþˆâ?º0°0dè»(sܯä5þ˜çz"=¡žX°ÇmOµçq/ò^|^âcñŸ€øßˈÏ|1ù¯—Aþ2ÍŸ¡æ#ó{8óêj*ËK‹ +-ò²3ÓRãc¢"‚ü¼=Ýœíl,ÍL ÏéžÑ:¥q\ýð¡ý{¿ü\.ô·ðC- ýÕØü¡¯D_y+|¿¸Ï²ÏË}Uœû¿•æþn.÷?C¹@íÈÑš§µÏê™ZXÙÚ;¹º{ùø†„ŸŽMHJMÏÊÉ+,.­¨ª©kln÷¯ÝèDî€ûã“‹¹ÿûóËraø'¿¬ü8úåègíçu?ÅŸÓ·?âŸø/X¼0dè»*sܯä5þ˜çzž¥žX°ÇmÏiO¹çõ=ë½ø8ñåÅ_(òßù2æÏ3æã¿üé8ó+6¿™ãÚ•Kí­ÍÈüªŠÒ⼜ÌôÔ¤„بóa!þ>žî.Nö6Væ¦FzgµOkž8zDíÀ¾¯¾X(ô úkTUù¡ÏG_i¾òVþ$¹¿ŠÍ}Â>äþo¹¿]šûŸ£Ü?xXý˜ÆI-]}Cc3Kk;gWo߀ ÐðÈ踄äÔŒ¬ÜüÂ’²ŠêÚzÎýnäþÐð-Öý{|÷óÜNÜÿ¯Àý÷¿|ò‹åÿÊñÈÒÿ ¡ÿkB¿ÐþYb?Æ—?£ÿ(èOø§þÓ€€ À#@f€Yv$ÇýÜIÞãoypž‘žROÊa?Ø3ÚãºÇÜO“¼zÁÿš€ÿ >L4ÿ‡ÄGþ;'ÿMÍŸœ½5<8€ÌïdÌo¬Gæ—æçde¤&'ÄEG†‡ùûzy¸:;ØZ[˜êëêhÔ8¦®vpÿÞ@èÿí¯$ô?á‡þz~èSô•¡¯¼ÿ‹“°/Ì}”ûkx¹¿QAîrÿБ£Ç5OiŸÑ;gdbnicïèâæéퟘ’–‘[PTR^ î·´]¸xù*¸ß˹gÉî¿\¾û<ø’_‘üÏyò éÿ–­þúqösö3áËŸI¤?Ë?øO€Ý²dzÙ1PxÌ+òQ?ež…¤'ÔsØíqÜãºgòžóþ#øLá+ÿì×wp”uÇñ?ŽÑñfîî/=•jBz("B ¤g“MÏfÓ{ï½÷ºé½÷JGDÄóTôË9RæŒs ‡w"ÜIf¸_y~OÛçÙ’8#™y¾ï³ì3óú¼—ÿšÄç‘Ïz z}\óª™^Ôm¾ùWYæñÙùsÁæŸ> Ì?rèÀÜÌÔøèð@_wg[KcCmuEYqa^vfZJb|LdxHÒß×ËÃÍÕÙцþ¶­À|-¡ÿ[ÁЗЗî×:Žû¿aåþ³ê¹ÿÎýU ÷×›šáÜßbs¯½“‹Lîéí§ ‹ˆŽMHJMÏÊÉ/,)¯¬©S5µ¶wõôMLÍ÷;ŽÝÿà,pÿSèþ…‹—EÜ¿ 8áºÏ~ž‹„_-ùøÅäÇôßbW?¡ŸØºŸ…?WÈ?ã?¸hààÀ3@-ö£>ŒžDÌÿ}%=¤ž±·=K{÷¤ïIàðIáß"à‹ŠŸˆ¯%òCþcNæëdþ<4ÿmþþÓ™Ó'O?Ìß7351:<Ø×ÓÙÞÚ¤ª«®,+)ÌÏÉJOIŠŠ V*|½=Ýe.Žö0ô­­¶lÞ´q½HèÿúÏR¡¿L2_º_ÿDrÿäþsZs¸¿uÛvûvήnr/ÿ€ °Èè¸Ää´ŒìÜ‚¢ÒòªšzUskGWoÿÐÈØäô쾃‡YîŒÜÿR›ûwÅÜ_Lðkƒ_XþŸhùyÑOÓÒOÛÏ +-Œ?Oâ?ÕÿhР À+@í½¢G>…Â_prIO¨ÇÖ󵧹'yO{ +-||NâSâÿ$.þ/E¾HæÓæߣ̿«ÉüËÀü/¿øìS`þYÚü£‡웞ìïéêhmVÕ×T•—åçfe¤&'ÄEG†…øùxÊÝ\@èïÜŽBÃ:KsS#Cƒ5j¡ÿ;úÏ!óŸ‘B_º§çDØ×1÷×oÜ´y‹•õ˜ûŽÎ2wo_…2(4<*&>1%-3;¯ ¸´¢º¶¡±¥­£»w`hd|rzn?tÿ­·O½C»ÿ¹îîß#î?váð‹Ëÿ@H~!úyÙOw??G†èÿ<ö/ú€GÏY]ŽúüEü4ú&=”žP­g°gkÏpO÷=7ðÁWÿ.â/ômqÍȘßÍu1ÿs`þÇØüSÈüƒûg§'ÇF†ú{»;Úšëk«*J‹ ò²3ÓRãc"ÃCƒ”þ¾^î®Î ôwÛì BßÒÂÌD—ЗЗîi:=sÿE”ûk LLÍ-×mÀ¹¿¸ïàä"“{zû)ƒÃ"¢c’RÓ³rò KÊ*«ëšZÚ;»û†FÇ'g€ûGÞxºÿî{ÐýO4¸¸ÿ@º/ü6*"4X©ðóö”Ë\œöîÙE‡¾…¹©±úÒ-½Ó+÷Ÿg羉™…%É}›Ý¶vŽÎ®n^>þA!a‘Ñq É©Y¹ùE%å•5uª¦ÖöΞ¾Ááщ©™¹‡h÷ßÿÜ×!øŸP§Yò?äÈÏŽ~uúÕì§ðÿÆêOø'þ£@ €&€jè%ÐzäãóÔã´ó´ô´õ{¨ý÷X{Š{5ï…Á§ÿ'ñ(¾¦w$’ùæß¡Í¿Á˜EÀü÷ßÃæ¿qš?5>:<Ð×ÓÙÞÒ¤ª«©,/)ÊÏÍÊHMNˆ‹Ž ðóñ’»¹:;ØÙ²B߆¾ ýåRèK·´NÍýe:æ¾±©¹Î}+k˜ûöŽ.2wo_…2(4<*&.19-#;· ¨´¼ª¦^ÕÜÚÑÕÓ?8<ÜßÇvÿCàþy®ûW÷oÐîß¡Ý¿GÜ ~Vž<Ñ$¿üÙðó奟g¿:þDšÚ4x¨À+À,G?ñwü Wièê‘õ{¢½:÷<ïÅÁWÿgžøº“/ðv4d>6ÿÛ|ðËßÒÇüC€ù£Ãƒý=]í­ÍªúšªòÒ¢‚Ü쌴äĸ˜ÈðÐ ¥¿¯—‡»ÌÙÑ„>2…¾ú+µ†þ2É|鞶Ó?÷—ÃÜ7Xkdbfs¸¿mûÎ]¶vN.nrOo?E`phDTl|RJzfN^aqYEUm}cs[GWoÿàÈØÄô,vÿÄIÝ¿ôîßEî/2øµÃ/"ÿÏŒü"ôóíÀéOóOû-µÔ ïŠÀñ>BžÄßóFzšzd==Ô^€{5ïÅÀÀ_£ø‚äkz/Bä‹d>1üÒà7f›ÿ5cþy`þ‡ló÷ÍNMŒó{»:Z›ëk«*J‹ ò²3ÓRãc¢"Bƒ• +-?oO¹ÌÅɘ¿sû¶­¯óA蛚Ð_-…¾tKóÙ×”û/-_±’Ê}3û7mÞbe½Ãf·­£³«›‡—@`HXDtlBRjzVN~aIYeumCcK[GwïÀÐÈØ$rÿè±ã'NžFîÄqÿkèþUÊ}?йÿ#tŸ +-þû ~-ðë.¿ ýœìçØÏÆéÏåû€š2Ô +-0K í˜Ï_c˜'Ò3Ôó°‡Ús¸çxÏ |að,¾æ7Â{lòÕÍÿ‘1ü Èü«”ù—ÔÌ?yâ86zbld¨¿·»£­¥±¡¶º¢¬¸0/'3=%)!6:",80ÀÏÇKîæêì`g»Û…þ¦ëQè¯5|…þKÚC_B_º§ðôËý`î¯Xµ復¹åº ¯R¹¿g¯½£‹ÌÝÃÛ×? ($<2&.!95#+7¿¨¤¼²¦®¡©¥½³»¸?Ý?x»†çþ%âþ·ß÷Qð#÷€îß¡Ý ~á_€ü:Òϵ_¤?æù/Ù²dè»&p¼POþ“|Óu–ôˆzl=Âi¯Î=×{ÝÁ_˜ø:/˜ùÄ|øƒ_÷øMo ÌÿþÚwß +-˜ÿ2ÿ40ÿØÑÃÐüI`þ@owg[KSC]ueYIa~NVzjrB\tdXHP€¿¯—‡»ÌÙц¾µ +-ýu(ô Ö¬^µ„>m¾úÒ-­Ó?÷_^±rÕšW ×›˜YX®‡¹Ý¹ïàä"“{zû*”Á¡áQ1ñ‰ÉiÙ¹E¥åU5u*è~p¸?·_“ûóØ}üÀý›ÈýÛÐ} ÁÿˆOÎbá•_„~žý<üý1ÿØö `V€½ZõÌuò=Ô÷ÞdQ­GØ3Úó¸ç{/ +-¾ñE¾N™e>0ÿ6d>2žeþ9Êü3”ù÷óÇù}Ýí-MªºšÊò’¢üܬŒ´äĸ˜ÈðÐ ¥Â×ÛÓ]æâ„Ìß¾ ˜BßÒÜÌ…þª•+^†¡Ì—B_º%yzæþqî¯104265·¹Ü·²ÞaÝwvu“{úø)ƒÃ"¢bã“RÒ2³ó +-Š¡ûõª¦Väþ0pFÝýsÈý¯.^º Üÿ†ã>~àŠå¾Á¯~½ä×N¿šý,üYúcþ±ÿÔP @M³œ%Ðv¬gó”óDzL=¶cÏҞŽš÷º¯§øº¯1óïÂÌæÿ‡oþ7ÀüË—.~EÌ?Ë5˜? +-Ìïélo…æW•—äfg¦¥$ÆÇDE„+~>žr7W';ÛÝ6;¬­¶lÞ´qÃ: 3Scú+Aè¿H‡þï¥Ð—n žî¹Ýgrß`­‘‰™¹åú ¯¾ö:Ìý]{öþŸýú +-Žê:8>yH‚Aˆ‡0IŒ´½i«VÞ«$@HB½÷Ž„ +-BHô–1¶‡`lOÜâ8÷„PGmW»«¶SœÓÛÐ=‰óÛïÝ»«»2³ßû=gu~ß_+VE¬ŽŠŽKLNÍÈÊÉ/,)+¯¬®­kضc÷Þ‡^8rô•cÇO¼Éç~;r¿oÀB¹ÿÃ}þëXð#§÷Ý¿[øþùËÏK¿³ýLü™úüþ €ZÔ`o‚±†ùuy4A=a=Ž=S{&÷<Þ»ß3ñÿ;Æ»»%Ÿ‘ù¸ùèáå0óá#Òü ̷̄ ôñ™ÿ0ÿÏ`þ±WŽyáÐþ½»wl«¯«­®,/+.ÌÏÉJOMNˆ‹ŽZ± +-B™¡h4è4*¥\&‹üPèãæ£Ð÷ñ†¾w&àüJXîûR¹ÿGÈ}‘D*S(Õ­Þ`2Cî“î‡G®‰Š^Ÿ˜’–‘›_TRVQYS»¥aÛNä~ã‘£¯î¿ëÚ}ûÐðrÿû¿î£à×û·ûî‚ÿ)ÁÏ‘lúùì'ðçÑŸàŸZä`,ö&{XßÑÇ‘Òß&o¼ëJ{‚{>ï…ƒ/D|ÈçÏü;(óÁük×°ÌÇ̇ÌGæ ÙÝ›ÿ&iþ½»wnk¨«­©¬(+)ÊÏÍÊHKNŒó×D†ƒù‹Ì›æ›M½V£V*dXè?ïqè{Ñ÷ÎÿáÉ}pá>Ê}?‘X"“+TêÞîÏž;áâ¥ËW†G®]³>>)%-3;· ¨tCEUÍæ- ÛwîÞwàpã‘—Áý×¹î7û­í]˜ûVÌýQÌýüó‡ãÁ‚lCŒQîóÿONŧò»¤Ÿm?‰?[‚ÒzP+€½<æw8Ò“ÖØs´'¸çxïüñˆ/˜|—™eþ-Xˆù˜ùxæcæŽ ;ì6«¥Ìïêloó›æ¿K˜ÿêÑ#‡ìCæo©­©ªØPRT›™–’¿>f˜¿rùÒÅ(ôg†›z]€Z¥K%bú¤ùÞÐ÷΄a¹?•‘ûÏÏð‰¥2¹R¥Ñê ¦À °Ysp÷WE¬÷ã’RÓ3sò +-ŠK7lDîoݾsËý·yÝïéëGî;Àý‹¸ûxð_¾Á þÛn‚ÿ ð ¿0ùÝÒϵŸÄŸ«?å?¹è À\N›ÀÍ°?ºÃ8Ž¼‚¤þõ#8Ú“Ü;y/|aâ»%ÿ?îÈgfþm,óÁü+,ó/]"Ìïqiþë`þËGØ·gçö†-›kª6n(-*ÈËÎLOIJˆ‹Y·vue~XHP Ñ ÓjTJ¹L*ùÏ`†þToè{gb‡¹ÿû?@îû‹$R™B©Ðê &sp(¸?oÁ¢%ËV€ûQѱq É©éY9y…Å¥å«6!÷wíÙwðpãKàþk\÷Oû-­í„ûƒvǸ‰á> +-þkdðßqüã‡ß…ü‚è§íwŸҟâŸöŸZô +-pÚž ëúìûNÖSØSÚ;sO{ï9øB×ùIé—$Þ“ùwÈÌ¿†2Ÿ6ÿ[ÂüAë˜ßÝÕÑÞÚæŸb˜ÿ6×ü­[6oªÚX^Z\˜—“™žšœ æ¯Z±lÉ¢óæÌóÍ&ƒ^«Q+2©D¡O›BŠ7ô½3±Ç£ÜÿÝt,÷ýDb‰L®P©tzc ¸?s6á~x䚨èõñ‰É©Y9ù…Åeå«7m®ßºÃµû߀û͘ûÝ=½ýÖA›chÜGÁ¹ÿU<øo¹ þÇ´Vã‚_¨üüôóáOëOóOûÏܬ%à¼ Ü ç»{¬C—=tÆžÒž—{·à ßsòó‘™2ÿ*žù`>Ê|dþðÆÌïEæ·µ¶4ƒùßpÌ Ì©ñðÁ}{vmßZ¿ySõÆò²âÂüœ¬ŒÔäÄøØè¨5‘¤ù³g†›MF½.@­RÈe1˜¡™O†þdoè{g¢ûÜŸ„rÜ÷õ¥rÜ÷‰¥2¹R¥Ñê ÆÀ pîü…‹—._ ÷SÒ2²ró KÊÊ+«7Õaîï?xøEpÿO÷¿"Üo#Ü·`îŒbî“Á?rŸ/øÇ¿pùÝÒïÂ~&ÿ ÿYÀi Œg8ç=`Þõˆ{&÷®¼ ¾°×tAþO\ò`{Î|Üü+—/Ó™æŽ Ùmƒ–>0¿“2ÿ+Êü·˜æïß³kÇÖú:Ìü’ÂüܬŒ40} ˜¾rùÒÅ çÏóC‚]€F¥”ˤb‘?2Ÿ }_2ô'yCß;|ÆÎýÉS||Pî“îCîû‹$R™B©Öhõ“9($lÖÂýˆÕk‘ûIà~vn~QIYEeum]ý6®ûoîörÿLsËù¶ŽÎî ½}«Íî÷/2Ü'ƒÿ7øï“ÁÿˆdìÁïR~÷ô»ÄŸ©?ËöàÙž÷¸‡¬ËX?ã‰î=_à3 +- ßEæß 3Ÿ62dØa·Y‘ùùç[šÏ ó¿ø 7ÿÚüæW‚ùEù¹Ùi)I`þºµ´ù³ÂÀ|“A§Õ¨• +-™T"‚Ч͇Ð÷ñ†¾wž™+÷ŸÃr*‘ûÓ±Ü÷‰%2¹B¥Ðê&sp(¸?oÁ¢%ËV¬BîÇÆ%€û™Ù¹E%(÷÷îÃݹÿÑ'˜û§1÷ÛÁýž¾~‹uÐî÷!ø1÷ñà¿Âü÷°Èe¿'ð{$¿3ýûYø³ùgûÏÙ|[ÀÃq:ïçÂ'®°çrïì½kð…>Ÿ;òŸðÏÍü+xæÿð/<ó/Ž9ìƒVK_Ï…®Îö¶óçšÏœÆÌÿä£ÿö×÷8æïݵc[}]muen~&˜Ÿ毎XµbÙ’E æÍóƒÍ&ƒ^ V)äR‰̇ÐóñПŠ…þsÞÐ÷Î32‚s™û྿H,•É•*M€No +-9›v?*¹Ÿšž™‡»_S[×Àãþ{ïð!îþIpÿr¿ ¹?`´9††GûTðÿè&øŸ2üžÑ?þlýüw±<ÞS97s´›{ÁùIò òéÌ¿Igþtæ{ 2Èa´ô÷bæ·ž?wöÌé“_ãæð>aþqŽù5•JŠ +-Àütd~l4Óü™¡Áæ@£^ Q)å2‰XäÌ'Cß×3¡ÿ[oè{çá¹Oº¹ï/’He +-¥Z£ÕLA!àþÜù /]¶"3¼¾ï"侤®¹¯Ti´ºNƒÑÔcîí°\¾ +-ƒÿk¶à¿ÿ¿¡ûÜáŸ2ù™ì§ÓŸéàò¸k<#õŒÚ»ðÞ­ÏC÷˜ÈɧÉü{”Ì¿3ÿÈüáAë@_¯¹Çd4èuZJ©€æ7ÔI ùÅE˜ùYŽæ¯æ¯æÿõ/ó—,æ'ÆÇÆDE†‡…‹„AÈ|<ôüiCß‹}~Óbô¹?Þû¿B¹ÜŸesä~`H—˜œÝñåW¡ûo½ýæþ*àþ²û©Ðý,ÜýâÒòÊjÌ}¹B©RkuzCpßÒ×oÁÝ!øïØ‚êág¢ÍýÌø3ðïê ð|ŒŽù„./çÖW™,ù óGAæß¡fþ̴߱ö÷YÌݦ.ƒ¾C«nW*äRd~uey)n~62?ÕÑüUÐü?ýáÜü—_\ +-ÌOINŒ‹‰ŽŒ óç“̇¡/àCŸßtž3û^öÜ÷Ár¸ïïr¸s¸/‰CBÃ#¢¢cã’’Saî/{ý7 ÷W2¸ŸCq¿±Y*W´µ«5úÎ.c·ÙÒÛ?084ôùM“qÈ}ß™à~@€-÷¡ûABQ0î~|BÒ‚”EÏ=Ïîþè~æ~n^A!æ~Mm=p_ÖÚÖ®Òtè: Fü½}ÖÁaüׂÂ?::6>ƒ~Îð»N~í¸Øï·ÞwÇéOs¸‚ÛíÝ8™?3ÏüÛÔÌ¿2e~¯¹Çd4tê´•²­Uͯ­©‚æ_,,ÈËEæ§#ó÷PÌ_i3ÿ×1óŸæ'%ÄÇFGE„‡†ˆEBd¾-ôüQèûÚBß›}~ÓrTöŸ"ç>áþLÌýY$÷ç ÅÁ!aá‘Q16÷_x‰âþ +-÷÷A÷Ó3÷/^*)«¨î74µÈZJ•Z«ÓºL øûPð_¦ÿ¿Pðcð áÿ‡ÿGføb†Ÿ A6ú¹ØÏ•^O~™Û™=yòhÏï >3ùß“É¿ƒÈ'gþùƒ0óÍݦ.ƒ^§U«” +-¹¬¥©š_QVrÉf~243£ù/<Ì_͉Š   ƒÉæÃÐÀÐ'Ìw }Þ|~ÓfŒ¹ï Ù÷Ár¦Àº?{î>ÈýÀ ‘88w?1iÁBäþ+ îoFî@îgž:Mr¿ZRÜ—ÊÊvµ¦CßÙeìî±0?ÿ˜Kø9%¿GòsµßCþ§hœÏèⲜ®Æùlä;>6È¿ ÉwÊüáAë@_¯¥§ÛØÕ©ïШÛÛrisSC¤Únþ™Ó§2‘ùXÍå%hþÂI‰6óÅÀüùvóaèûùAó}‘ù>dóyôùM¿1ºoÏ}_”ûÈýgæ÷AîÛ܈ŒŽ‰‹OL^°p1rÿ5'÷?GîoEîÂÝ?sö\þù EÅ¥å•ÀýúÆf©¼µ­]¥éÐuŒ¦jðÿ¸OÀÀ€Âø9ÉïŠ~7ðwfò±SÏå‚Ü®ò¿I‘2ÿ6Ê|Dþ’3¿Ïbî1 :­FÕÞÖ*“67Ö×Jª+ËK‹‹.œÏ?w7ÿÈ!dþV’ù+H濆Ì_ŒÌ‹‰ŽŒ ‹€ùóžÅ̇¡àï›oý|èó›Æ£aß‹È}Âý™ÈýÌ}˜ûÈ}¡HBq «ûÛ‘ûGŽsp¿ª¦¶¾±©EÖªPªÔÚ½¡ËDþ«äà‡ðßðŽŽSáÿÁÿGø=“ß5ýîâO+ç#bžû¥8ž›Q|‚ütäO8’OÊük0ó‡(™¯U·+­²–&`~MUÅüãÇŽ"ównGæ¯uî|dþ`~²Íü±H͇¡?w.2„¾@@5ß›l>>¿i8ÆÜ÷†ìC÷}¡û~ÀýY÷ƒ„¢àÐðˆ¨èظ„ÄäÂýåv÷ÿ†¹¿v=rçnÌýã'NfeçäæŸ/¼x©¤¬¢ªFR×ÐÔ"•+ÚÚÕŽÁ?‚¿ þ›.ágK~wåçB¿Çú?ÊMò?»ß9òiÉäßäß$‘2ÿ²CæwÀÌWÈ¥ÍM u`~YÉ¥‹…y¹9ÙY'O ó÷ïÝ™¿ÞÙüå$óùáÈü Üü_#óAèû¡ÐÇÌ÷!›Ï‡>¿i<öIîÛsßæþì9v÷ƒ„bG÷—:ºÿ>îþ†Èý½û¶¹ŸW€Ü/¯¬–ÔÕ76Ke­mJ•F«#ÿ þkסûü·üwÝŸ‹ülñÌÍþ_ ÿSqpvñ#ß=òo|ÈÇ2¿Ÿœù*e[«LÚ 2_R]Y^J5?õðAÜüpóßw4)0?šÍv0¶Í|rèÏ ýÇýOÊß&÷½ˆÜ·»/øù#÷ŸÁÝŸ7s?Ì…û|ˆ»¿i î~jZzFæ©ÓgΞË?¡¨¸´¼²ª¦¶¾±©E&W(i‚ÿòRðs†ÿ¿=ù]É?%ô?î`êú³'ⳓ #ŸÈ|Hþðu ¿×bîÆ3_ 3_ÖÒÔP_ 2¿¼´¸èÂùüsgÏœ>•™‘ž†™¿cÛ–M¸ù~àÚ|±0(p>a> ý'ó½éÍçÑç7 Gãþ Â}Üý™Èýäþ\è>È}ྐྵ‰ÜOJNYDïþGŸàîoÛ±kϾîƒà¯¨ª‘Ô545Kåöà7¢àïÁ?Œ‚ßÿ7þÛ´ð߇ð³%ÿdäw›ÔGôxt*öcqÿ'B|ÇÈÿŠ‘ÿ ù(óù óù(óÍN™ßP'©®ª(ƒ™O6ÿÐ}{vÙÌÿä#Fó“ù‘áa¸ùóžEæÏEæƒÐèÍ÷âÍç÷$Ì}’ûOîûB÷ý€û³û(÷ ÷C¡û1±ñ¬î¶fÝýCGŽ;~âdVvNn^AáÅK% ø«%ÎÁßm¶ôöXað»€ÿ;¿SòÿÇùÙé÷PÙ)|ê¿‹øl‘Ï@þ7ò/òúPæwᙯD™ß2¿ºd>0¿ /7';ëä‰ãÇŽ!ÌÿêË/Ö­ùŒÉüE$óCƒÅ"dþoC6}h¾a>úüž¨Ñ侑ûOã¹os6Å}¡îñåW›·nß¹{/Ù}üÅ¥0økíÁ¯Övè;að›Að€àGðC÷YàÇ“Ÿ +-¿-ùYåw“þÉÒëšã‡ýûn€Ï$>Mäÿ€G>Fþ+ùÃCÖþ>‹¹ÇDÊ|¹´¹ d~ Ìü⢠xæcæÜ¿w÷Îí[7Ó›¿Œl~|lŒƒù0ô¡ù³ìæÛCŸ7Ÿß8ºÜ§q_ ðóçìþ2›ûï¾·bå*ªûûNMKÏÈ¿'ktîÏ Ü÷qrÉý à~HhX“û¿ÿ㟑û«?þôóµë7lÜ´eÛŽ]{0÷ñàÏ+(„Á_Nü£©Û à€ðÃেÿ„Ü?‘ü.äçB?û™ús97wðÙÅG‘O?É¿çH¾-ó!ùV@¾ÅÜm2:uxæËì™_Š2?/7'; ËüCöýŸÝúŒŠêÌã8~’µd`’ó.ºçÄŽ ¥ ÃÌÐ{ïˆ –Ø»"b ½—¡3CzfÙ7«Xôìn’Ýìž³›Í‹}žÛæÞ;Ï,IÎñþÞÃýÏ›Ïó=sêDÌñ£‡ˆÚKšïëí©ÅüU4óAècæëQæ/%ÍçCŸß[:n÷—¨Ü_¶LO_ùûÐý´»/ÆÜwuG»îÂÅK—¯÷ñà—±ƒ¿»·o`pxdt|âú›·¾þÂþ9 +-~ZòÓá_ˆüúu²ÿ÷¡¿n—jò^7ñqòÿÉŽ|‚ü94ù†äû ÿÆõ‰ñÑ‘!µÌ—c™ŸOd¾FóÝ]¡ùb`¾ÀÂÌ„2ýÚ5«9Í_Æ›Ï9û s •û4÷Wp»obf! Üwt&Ü +- ˆÜ³oÿÁÏ‹Ž=yú,ü‰É©éxðÁ¯¬oljikïìêéíŸø’„ÿ®Fø_0à×.¿ú_ÞþßÂÝ/Cü,màsˆOFþ4ò_ÐÉŸb‘#ÿk@þ—ãc#Ãý½=]0ó›ðÌW`™_€g~râµ+ ñqçÏž>}ìÈç÷ïÛ@˜ï¨›ùAóß_®¯͇ècæ/Q™Ï£Ïï­wîku%‡û"±ÔÖwßÇ/@Ý}*øÓ2TÁ¯¨ª©­khlnmëèìîéë¿àÿ +-ÂG þ)ÿÓg³³sóó~VòkýÚè_þoò Xè¨_ò +-|õÄçŸù/žÏÏÏÍÎ>{J‘?©"ÿ.FþW€üëãc£ÃCý}=Ým-Í uµdæËðÌOIbf>Ý|?/Ì|{[©X¤Íüjæ¿G˜¿˜7Ÿ¿ºÿV÷ÍVBÒ}7/Ìýл>Û½7êÀ¡ÃGÇœ8u¸O&üòÊêe}CSKk{GWwoßÀàÐÈèØ€ÿ„ÿ6þI?Hþ™þç ø5ȯ!úu°Áø¿ÊCð*ßB_ôž#ñQâÿ_Eþs’ü@þŒü*òï0Éìïëíîêhomnj¨WÖTWÊaæ♟Je>aþ¡Q{w¶kghp 4ßà 3_" ­æÐ|Ãm[èæ¯d˜ÿ—ù‹xóùñC²¯r)ÒýYîoÙfˆ»o Ü—÷\ û¾þÁ”ûdðŸ‹O ‚?‹ þ +-EUum]}cSK[{gW„‡ÿ¦ü ü øŸÍÎÍAø&¿.ôsØÿŠü¿¹q]‹î{øTâ#ÅgFþóù¹¹Ùgù‘äßäOŒŽ ä·45Ö+k««ªÌO#3ÿüÙÓ'c£Á2Ÿ0ßßטïâäÌ· -æ¯ÓÉü¥ÍçÑç÷NƒûKèîëéé/îÈá¾澑‰)æ¾ pߺïé Ý ˆÜ³oÿAà>ü—.Óƒ¿¨¤¬\^YU£¬khl&àïÇà§àÿNÿ}ÿ#ÿôÌSõäÇäÿ‘)ÿ¿ù9é粟ÿßÿÎû…üŸ9À§'>R|Hþ Uä?™†ä?‚äßG‘?>:2<8ÐßÛÓÕÙÞÖÒÜØPW[S¥——–É°ÌO'2ÿâ…sDæcæGF„‡…Aó=Ý¡ùv¤ù¦&F˜ùêæLš¿\_Onþ•ù|èóã‡Ëýźºÿ)Ë} K¡µDjçàäìêÜ÷ ‚îãÁøèñ2ø¯àÁŸ ‚¿ °¸´¬B^Y]£¬ohjnmëèìFÀ‡Kþɇ!üœÉ–_gúYökÂÿ×´ÃÅ=å=| â«"žùü‡| >Nþm$ùm­ÍM uÊšêJyEYIqaA-óããˆÌ?zøШ½0óù~>À|WgG;©ÄÆZhiÁ2ÿS5ó?D›¿˜7Ÿ?ÖÞA¹¿ˆæþ{À}À>ÒýOîo5Ünd Ý·²¶÷û^>~Á¡;w÷ñàŽ=Iþ´ üù²¢âÒò +-EUu­²¾±©‡¿¯`hxdŒÿ{dò?˜Éÿ˜žüù Éÿ!ÿ¿)ù‘ôÓígã¯Mÿ7õèôYö­ÿC€ÿ_]Àçÿ9_ù€üIœ|(þ½;(ò» ò땵ՕŠŠòÒâBY~.Èü´,ó/™}ìžùÀüÐà@?/7`¾½Tlcmeiafjl´Ýp+ÃüOæCô™æ/âÍçÇ56û÷ÿ¨Ýýõ 6î›Y¬¬Eb©­½£“‹›‡—·¯`0 þÈ=ûöãÁâü—að§¦gfçäÈŠJÊÊ努šÚ: þvüXñß á¿K“ÿ=ùgçæòÿÿGL~tô3èWÙ¯ù‰·`áÿWý6÷Ág'>Jüy(¾*òÁÈ'É¿‹ ¿’ßÞÚÒÔX_W[]¥——–É +-òr²2ÓS“é™sÏü=‘á óý}½==Ü\œím%b‘ÐJ@™¿É`ãzíæcè£ÌçÑçÇ*÷_ÞýÆ&fæ+¡H,±µwprqu÷ôöõ  +- Â?ê#ø@ð'¥€àÏÎÍ/(,.)«WÒàï¢àƒðßdÀHþg0ù¹ägÓO³ÿ? ûÑáÒÿ%ø-C\ÂÐ^{Â{nð5‰?G_ùtòoÝ„ä!ȯ©ª”——•äåfg‚ÌOúd~<žù±DæïÝ 3?$(ÀÏÇÛÓÝÕÅÉÁÎVb#Z +-ÌÍLŒwlßö +-æó¡ÏŸúÞy î¯îo0Ø´yë6Â}K¡µDjçàèìêîáåãºþƒxðŸ„ÁñþÄäÔôŒ¬œÜ|Yaq)„¿ºFY×ÐØÜÒFÂ?HÁ%?„Ÿžü@þ'¤ü³,ùÿåÿ“Ÿ ÿ'4ýœö³õGñÿ+¼è¯²NûY³÷ZÁÿ‚¯&þÓ™éé©' òÒ#’E>šü†:%$¿¢¬´¸P–Ÿ›“•‘–šœx dþÅ ôÌ߇e~hp ¿Ÿ—‡›«³£ƒTbc Í751‚æoÞd°˜¿š7Ÿ¿×5-î/ÕâþJÌý5¤û†;ŒLLÍ-,­¬mÄR[{Gg7/o_ÿ@üáôà?ƒ?.>áÊÕ/’RRÓ3³sò +-dEÅ¥å +-ü½üãüÌäò?òOMMϨËÿWJ~fô³ègÚ¯þ\ü¿®G@Ã?W»D÷tï9Àg$>]üYšø ò¨E>FþÄ8A~/A~3F~u¥’_$ËÏËÉÊLO™õrB|Üy˜ù1xæGa™2ßß×ÛÓÃÍÅÉÑÞV*Y[YZ`æBó7ó×`æ¯ÔbþRÍæóèóãGÓ}2÷‘Ü_…¹¿vý†›6oY¬„"±ÄÖÞÁÉÅÕÝÓ›þ]´àÁîþ+דRÒ22³só +- +-‹Jpøkqø[Û;:qø‡ ü ùéðãÉäŸò?FËψ~‚~Íö«áO×_-/÷ƒ°€¿B}”~¥=‹{„÷jà«ŸÕø3ÓSS¸ø òÿ‚G>|ù€üá!$ùå¥%E²‚¼œìÌô´”¤ÄkW@æŸ;2?ú˜*ów‚Ì™ïéîêìä`g+‹„V 3Sc£í†Û¶`æ¯ÅÌ_E™¿‚7Ÿ¿W›ýw¹¯ƒûÂÜ_·a£Áæ-[ ·›˜™ ,…"‰ÔÎÁÑÙ•üTðÁö|\ü¥ËW¯%&§¦edeçæãðËU,øûüÃ#üxòG&?”ÿ>ÿ!C~TôsÓO·Ÿ†þhÿü +-,€yuëiÚ£¹WyÏ>"ñ‰Æâ?ÆÅ¿ÿvë+8ªëŽãøÄÎxœ‰A€Ày±'Ži*»«mê½K¨w­zïuÕ{ï¡Þ{ï…î ÄÆN&˜FðâñðÏ$ï9çÖsË +-É o÷÷~Ï}ûü¿˜ø¬È‡äÿ’ƒ$•Aþ`oOwWg{kKSC}mueEYIÈ|uÌüD˜ù‘Dæû€Ì¿äâìhogceinfbl¨”ˤ±¾ž®Îhþ¿?Œùúˆùæ ¦qœÜ?ºû_üºQWO_,1ɆF&¦æV6¶öN.®nxð«ÈàOJÁŸ“WPX\Z^QUS[ßØÜÒÖAÁ?†Á?á_]ßØÜÞÙðß„ðß¹KÁ%?&ÿ[þrä'£Ÿ¦ÿ_ýˆýðGôgûà Ðxû [zÔzZ{>î™Þk_ƒøû¤øO0ñä߽ɿ ÈßÝÙÞä’ß×Ó}¹³½­¥©±¾¶¦ª¢¬´¸0d~&ÌüV滹º89ØÛZ[Y˜›š*ä2Ìü‹À|ùG1ÿׂù„v÷?|—û'¸îy¸¯£§/’Hå +-¥‘±©™…¥µ­ƒ£³+ü~ øC@ðGàOLNMÏÈRçæ•”–WVÕÔ‘ð_¡áŸ†ð/aðoíì^ðߺ áÉÿ-"ÿ£ÇüòCúqù¤Ÿe?/þ´þ þyÀÑÎÀ!çHbOjÏÃ=ÃûŸqï™à‰‹À‡â¿fˆ¿ÅçD> ÿö-@þÕÝ-Œü%.ùm-Íõu5U•å¥ÅEy9ꬌ4ùñ ó#@æã™ï3ßÁÎÆÚÒÂÌÔØH©K $"}=`þY–ùÚÀüG6_@_˜0 ûeîkîøq÷Ï÷uõEb‰T¦P›˜™[ZÙØÙ;’Áï$þüé™ÙêÜü¢’²òÊꚺ†ÆæÖ¶Ž.þÑñ +-þ5ÿöîÕk×ü ù!üdòså±ÿòå«×þ7Œè'éKÒ϶_#þ”þÿ,ÿ¼GÏÓÈŸ)ìIí9Ü3¼GMü70ñ_¿zùrÿ"þc\|„|,òoݼ~íêîöÖæú$žK~kscC]MueyYIQA~®:;3=d~Èüp<ó}½==`æ;ÚÛÚXYš›™*2©D,ÒÓæŸÃÍäÅüó… ;Âþ÷‰àÇÜ?AGWO_,1ɆF&¦æV0ø`ð{âÁ¯ +- ÁŸ˜œ’–‘™“—_X\RVQY][×ÐÄÿüâÒòêÚ:€À’ÿ+"ùïQÉÏ+?ý|ôÓÙOÙ¯JšÔ 'àà‹pˆ/ÒÓÔ³±ççñžþ ð¡ø¯øÅgGþW0ò¯]ÝÙÞÚä/Còg"¿0?7';3#-%)1>d~X¨*ˆÌ|W˜ù¶ÖVæ¦&F† +-¹Ì@"Öæ_8™Of¾`¾0aïm¿ÈýSÐ},ø¡û ø¡ûû"‰T®P›šYXZãÁ ~¿€ à°ðÈ蘸„ÄäÔôŒ,uN^AaqiYE/ü“Ó3só KË+kë›Û; ùoàÉç.€_£üÏ_ìïCùéè'èÿÒÿI?Òý|ø3õçõŸs}4Ï•ž¢ž=®=—{ïQð‘ÄõrÿÅóçFˆÿŠÿ€ÿ›¯ï‘DþÎöæÆúêÊòÒ$rbŒI~SC]mueEYIqa~^NvVFZjrbB\LTdxhHp`€Ÿ+óM” +-¹Ô@"Ò×™þ–ù„ùŸBóOóµ´ŽÌ&ìÿ<û»츖áþÔý/Ï÷utõEb‰T¦P›˜aÁo¿‡—¯`*4,"2:6>!)%5=3K›WPÄ„¿“€xtlbrjfv~aqyeum$ÿ.žü·©ägÈÿÈÿd渚è§éG³µŸ…?¡?Á?ÿì ù<žGÐü‡{\{&÷LïßÞ£…'þkFâ?Ý{BŠO5>ù·©ÈßÜX[]YZ\˜›™‚ä °È¯ª(+-.,ÈËQge¤§&'%ÄÅFGF„…¨‚ü}½aæ»02_)—I%b‘¾.0Ë|Úü3§dþ‚ù„q¿Èý“ÀýÓ¤ûŸáîƒà×Á/–Èä +-CF𻺹{zûø«BÃ#¢bbã“RÒÒ3³ øËðw÷ôö ŒONMÏÎÍ/.-¯RÉL~Lþïù¿'äÿ”‹~’~Â~H?’ýÐþ·¸ýLüqýyùGóh<ï÷ äÿfZbiÏàž×{|è=L| |,ñqñâ?äFþu2ò×@ä/ÎÏÍNOMŽ@ò{¹ää媳2ÓSS’âc££"ÂCUÁþ~>^žîtæ[Й/Ö×ÓÕ™™ÈGÌ?IšÿÛ#˜/ /LØ¡wx÷!üÀýã¸ûÚ¸ûTðC÷/÷Eb*ø-AðÛ98:»\róðòöõ +- ŒŠ‰‹OL&àÏç…¿o`pxdt|bjzfIþ]<ù9ò߇ò?|ôDÿÞÞÓgDôãô³³Ÿ²Ÿ…?KÿÔ /ãh8ý=ò4“zöLíiî¡÷?¡Þàÿƒ,|:ñøøâßçDþ.ùË‹ ó³3Ó“ã£#Ã}½WòòósÕÙ™éi)I‰ñ±1Q‘á¡!ÁA~¾ÞžnŒÌ76T*dRùz óÏŸC23_7ÿ8n>$_0_˜°÷°ÃºÿÄý¤ûxðŽ?p¿ˆ ~<øm휜að{ùøú©BÂ""£câ ü™Ù9 ø›[ÚÚ;»º¯ôöõŒŽMLNÍÌÎ-€ä_É¿…%?Sþo1ùAô? £_#ýXöSö³ðgéOðOøOú0¯ÿ-àç#äAú/?£ÖÓØSÚ3¹g{Ïþ3 |ø@ü`âcâßc‰"‹Œü…¹Ù™©É‰±Ñ‘¡Á~H~Wg{[ —üŒ´”äÄø¸˜èÈð°UP€¿¯—‡û%Wg',óÍaæ*ä2"ó/^À3Ÿ0ÿwŸæŸ`˜ÿ±`¾0aïg‡sÿcÂýOH÷O÷±à§Ý'ƒ_B¿©¹üžÞ>~þP,„?¿ ¿£ëò•ž¾þ¡áѱñI"ù—@ò¯oÀägËÊ£ÿ{:úyé§íÇ»Ÿ‰?W–ÿä`Üæ`…:{Œgè×QêÙØ“Ú3¹'½§Ÿ þ|øPü¿`âÊ¿ºÄŸŸ›™žšèïë¹r¹«ƒ ¿¦º’M~$?’èïçãåéîæêâähogÃÉ|]˜ù˜ùŸF˜˜Š4ÿÁ|aÂÞÿÞéþG÷µp÷Oãîk ~cS3sK+"ø1ø}ýƒU¡áQþ$ü•Õ5uõM-­í—»{zû‡GFÇñ䟇ɿº’Ÿ#?Œþïþ £ÿ>ý,ú¹ö¿!ìGðçèÏðŸ8ô `\ž[pÀØßÑ/’?Á©Ç­§±Gµ§¹gô=ø(ø=$ÿ¯0ñ¡ø_ÿ‰-þÖ&y ˆEþøèÈðà@_oO÷åÎŽöÖ–¦Æzù©üXH~¨*80ÀÏÇÛÓÃí’‹³£ƒ•ùJ…\ +-2_„eþy$ó1óOóOž<¡Å1ÿ#Á|aÂÞ×~u°ûTðSîÃÜ?yJ[ºÏ~üb<ø`ð[ZÛØÙ;BøÝ=¼ üAÁ!,øÕ¹yüµõ MÍ­m]Ýÿe·>«<Ï8Ž 0•Ä&l2^%R+%€ ÞÛÆ{ï…±ñ8^ÇÇãxã½m ‚mH +-Iš(ŒHZHC™a(mÚ4MTµjÚJéßÐûº÷ýœç8¤PUÏõÒœç~Çç÷:2=3wôc ‹ÇQòŸ<õŽ#ùqôß`Ñ/Ñÿèÿ‚ÒÏíÿì—Âëÿ­FÌ¿ì?_>ÚÐœuíɯ°§eê‰õ{¦ý·D{)ïÕ¾ð‘÷þ# |žø×qâë‹ÿ.ˆÿÖ ùs3ÓG¦M˜èïíé²u´·¶45Zò òöòS’ããb¢##Âv‡øûúx{z¸ï´Ë|bþ–Í`þúõ8ó]œŸ“Ìç™o˜oœqOèþ÷]Ö®¥îo"îSø_U‚ßÝÓË‚?(àŠŽKHLNIsSKk{‡­«§·o`pxdl|b’zvîè±ù…Å ÿÛDþÓªürô#úoëÒ¯ÚÏŸ”¿¤?kÌ?ñŸ ]6Ò +-èlãS?úŒ¾.Q/¬gØ+ÚîqÞKÞð à?Ô‚‰•&¾,þ"þ;o#ñß<±¸0ì(üɉñ±‘áÁ¾¥ÈÏÉÊLOCä'ÄÅFGE„ï  +-ô÷óõæ™ÿš&ó±ù›6"ó×aóÁüÕ?È|}ãŒû/o)÷4îüÜýuë7@ðoÙªÿYðïÄÁïë£iYye†¿¡©¹µ­£³«»·¯ph„&ÿáé™Y”üó‹ÇAþSöò³èú¯ié¿ÿà¡j?Æì·Çô—ù—€.±š)øNYÝ¿'ÉŸ£ÏÿCµ^Æžj¯r½î•Àøàþý_ßãàßäàóÄ×ÿ8ÿ¹Ù™éÃ4òG†ûûz»»:;ÚZ››¬uµ–êªÊr-ùÉ„üÈð°Ð À?_/’ùÛu3Ì߀ÌžšÏ2_6ßÉ0ß8ãžì=®û"ø‘û.kŸWƒÿe +-? þ×Pð»¢à÷ðòöñó +-ÙðÇ'$%§êÀo©­ø[ÚÚ;mÝ=½ýCRòÏÌ!ù°ü'™üœùyôcú¯Hô~ûλ÷hö3ûÕðgå/ôWøÇþ“ @'@¬€²ò©¨Ë'}ùOþÜß…ô˜zn=`OÛžhÏê^É{á=ü{wïð¯øö‰š‰ +-‹¿ˆÄ?:73}dŠEþÐ@oO·­³½­e)ò“âcc€üÝ!Áþ¾>Þˆü]n:™ÿÉ|dþzl¾‹ dþ–ù†ùÆ÷TÏ‘û+ºÿ¸O‚#þt‚û7¿'ƒ?àv¿ÙRSWßÐØÜÒÚÞa£É?<:6~`òà’VÈÿS!?~Lÿe™þ7o±ì¿ÙÏì§áñÿ’âOõ§üsÿñH @'€€ºò©¨Ë'}É#Ðcéõ¬ì)öRÜ#í1÷$ï…÷,ðo~ëÖÍ´ð¯øšÄ׊¿âÏN9˜¿™¿nÍ|‡æ¯0Ì7θ'á>_rßÜGÁ¿ÿfÝà}ÛW¿‚ß×Ï?àøã4ð—šÊ+ªÌÕ5µõÖƦæÖ¶šüƒÃ#£ã&!ùg@þy*ÿIE~Bÿ'œþÏýW¯]—²_Óý\þ$ýÿ´þ±ÿx¤`#Àw@šùdÔ¥ãßü½Bý —žQϬ'ØsíqÝKÜó¾ÇÞ“À'à&À§‰ÏÄðOjÅ?4y`bltdxF~G[ksS£µ¾¶¦š_\ThG~4èïç‹È÷@ä»bò!ó_U33Ï|jþjf>!ß0ß8ãžò鸿\v¥ì>ß‚ÜGÁ¿I'øüü®n»Ü=<½}|ýƒBþ(þܼ|€¿ÄTVQi®¶ÔÖY!ùÛXò Œ!ùrùÍSù5Ñ/è¿Dé—²Ÿw¿þ¸üYú“ögü3ÿÉHÀV@^y tOþá_ùçô9ü6–^¦^žµ=ÖsÏò^õþµ«¿BàÿI_M|*þ<†Š?ŽÄP"ßZWk©6WV”™J€üü¼\-ùá»CC‚ü|}ùîˆ|”ù„ü%2ßEÊüURæ ó—ægÜS¹e:ðs÷$÷í‚ü2ü8øü;)üþZøSþl€¿ pqIiYye•ÙRSG“¿½ÓÖÕÓÛ7084<ª•A•_¡ÿcJ?²ÿŠ°ÿ&±_ÁŸéÏÚ_ã¿X2tè ([ lº|â£?Ógè£_3ê¿"ÔSë9öDûGD{Á½½÷(ðø¿°_%þ¼hüƒHü1$þ ¿§ËÖÙN#¿®Æb®ª,/+-)Þ_Xäggeè“ïÈßµÈG™¯/2ƒœùkXæ ó´æ/3Ì7θ'?ÔýÕÄ}5ø·Šà…?†ß à÷"ðcø#£cbãþŒ¬ìœÜ½ùûö•”šÊ!ùkhò·¶wtÚºí䟦òk£ŸÐÿ!вÿçÈþË(ûE÷_ûü±þ¸ý9ÿ’ÿ0xÄ°C ¯þÉ?ü†}ý'Vôªô@=X/c/k/¸ï¯ ïià#ð/^À×$>vFˆ?ŠÄ@âwÛ:;Ú”È/7•–íßW¿77‡’Ÿ¨’ïÈ÷òÝùù@¾]æcó]ˆù« ó3î蹿B¸Oà÷Yð»,ü~W€ßÁïgjzFfvΞ½yû +-‹ŠKL4ùkë­ MÍ-mHþ.$?—Ë£ŸÉ¯­~”ýçYö+ö_û%ü…þ,þê? ^<xè +-ÐÇ@º¯íÿ$~þ}€¼ö&=Íz žZÏ°Wµ—¸}/>ÿÜY»ÂÇâãÄÇâœÔŠßŽÄoj°Ö×ÒÈ7•î+ÈÛ»'';3#=U%?˜’ï ä»ròE濸d毒È_ÉÉ×3ÿYÿ0θÿÿû>÷µÁ¿FüEðkáßð{hàŠ‰KHLJIMËÈÌÊÙ“›—_P(’ßR[WomljnUäÁò£è§ò³£ÿ} ²ÿ#”ýÜþK—?ü¯ðWôÇí/ñÏ€-ž¼tèHc ßíÿô¥ø=}€¼ö;;é™õ {¬=‹{ÁýÈ{Þ÷Ràcðßãà‹Äñ!ñ±ø#Lü.$~¿ÑZ¯D~aA~^îžœ¬ÌŒ´Ô”¤Ä„¸Ø˜¨Èˆ0;òwØ‘3‹N毱Ï|Ã|ãŒ{ö§ãþrÖ}‡Áá÷üÛ¶«ð!øÃüñ‰IÉ©ié™YÙ9¹RòWT™«kü T~È߇å#òv@?dÿýŠý4ü?…ð'åð§ú3þ‰ÿtØà À@V€î€4òýÞþO_ˆß“ïÉ[¿‘¤'Y/¬giϵgÜ‹¼çÞ³Àðö®.øGˆø(ñUñ[‘ø HüšjsU…ù¹9ÙYéi©ÉI‰ñ‚ü F¾‡=ù4ó_€Ìߤ›ùó¸ùË ó3îÞã¸Oà_å8ø·@ðSø_!ðCðcøÝ1ü¾ þðȨ蘸ø„¤ä”ÔôŒÌlžüÅ¥¦²ŠÊ*³Éom›¿¯ŸÈO¢Ë/Ñìúyöû?üèüù /~ü à‰àÏõ¿JÚñ/ûO€l¼| Ä,uü§ôSü.z=HO¨çÖcìqÛ3í ÷,ï/^8Oúy/ƒÿæ ð'°øƒý ¾Mßb®ª¬(3•óÈÏÎÌHOMINJˆ‹‰ŽŠ GäkÈß¾íuF>Íü—^„Ìßì0óW1òô}™o˜oœqOõ–éÀ¿‚ÿÒQð;Cðø7!ø·ü/SøYð«ðû!øƒþl|BbRŠHþü}…û‹KJMåHþjU~–G?•J¥gÿIœýÔ~ÔýgΞcáÏËŸê/óÏòŸž¶dè°)`÷@çäg‘'îRæ1ôTzB=±—=ÅžiϹ'yîìÒ÷<ð1øÇøÚÄñÿÍ~=gYŸaE‹RJHÈ›=Ȧì­,µà:‚ì [ l D +-HYTpDEÅ 7t­È¦¶¶´ÓNÇ:Óô 3íøGõ¾®û¾Ï’ç}’0„ôwŸæù½‡Ÿë›W)þ ˆÌÅö™½{úvõöìÐÈß$‘ß¹vÍêU+„ü§„üÅ a–|É|?ÉÈGæ7T*)òK2?š/Þ0»r÷Kƒÿ¾±55ãj þFÀßZÿCsçþEÿâ%ÿÒeËW¬\µÆ’¿K’ÛŽ=½»Eþ}YùOP~Fÿ™tôƒ~±_éO²ßìÿãõ?yøèCÓ?Ç¿øŸ þð àpl~kP~áÛô-ç?æ< ÒëYö†=´ÿ»joÜkÞ[ß‹÷ ü« üPø™Ä[ŸâŸ<ÿ‹¿»·gçŽmù]Iä¯X¾l©¿ä/"ùóæ¦È×Ì'ù­$_2üøºÚÚq55 ¿<óïH“Ío\û·gÜ0øëÆ×øÛªÀ?Ÿð?ò¨ÀÿÄ“*ù7JòwKòïìÙ••ÿ(åGô«üoæègö ýÌ~·ÝÿûïþÀð'þ,×?Ë¿ø¯` € Àp¸œŸ¿ÿ\úïö„ï¡<˜ЋôJ½[ϲö‰öV÷{É{ë{zÏÀWð?ý$ ¾&þkL|Šìhhü}—ˆ¿]Äßܵ1ùK%ò…üG!ùó«ßFò%óëëI>3ÿgCÉüÛ#ùñâ +þ; ~…¿"ð7þö,ü3~I~ÀÿØã¿'ÿj$ÿzIþÍ[¶BþÞDþƒ”ÑOùOЯÙÿYÆþ+b¿†?ñgùÿø›þú¯` € ° Ðà Øèý»ä’¯ôʃy8èEúõ´Þ°Wí÷Æ}È{ñþŠ{¯^?>ÿ%&>Å?t04>Å߶UÄß´q}6òŸX"‘/äKä;ù3gdÈo'ù’ùÉüº:#æƒü¢Ìïo~Ìüxñ†Ñ•»_ümmÝø üü–üþ_-üIò¯”äïè”äù»Sò?Cùý”ÿÅBú-û³öu鲆¿ãÿðWýÿ¬ú¯€ÀØè +-pt ôþUzá3}Å_€ò`þøm—^©O¬ö®ýuhϺWî%ïÅû‹Þ÷ üsøýÁgâgâSü}ýÄßñ׬^ÉÈŠ‘/ä#ò|übòÇ“ü%¿4ó祥ùÑüxñ†Á¹?@ð'ðMÁß ð7§‹ß“’ßáGò/¶äz¹$¿È¿ŽòoQù{T~D?å?R…~ËþŒý‚ÿ—Yü¿ùöwªŠúï  à€Ðàp ôþYzá3}ÅàO©ó +-}–zZ¯Ø«öŒûo¾¾æÜKÞ‹÷Ÿ{ßBï-ð‹À?¦â#ñUü^¿›â¯_ñW­¤øˆüÅŒ|#‘oäO’'¿AɯùcSä&ó£ùñâ ËZðßíÁ¯ÿØšqÕàŸœß“‘'¿Èäù;:×¥›¿ѯò¨J¿e°ÿœØ/ø_ðwü/]¾ôOñOÿ}t0ØŒ€ÎvÀ¦àF؃â ßÜÐ7|þ½1/Î+ôYêi½bŸÒþÊåKνå½÷ý‡ôÞ¿ +-øU|$~oºñׯë¤ø+–»øˆüEIä§ÈŸ<© +-ùã@þ}Fþ=üÂÌÉo¸ßP‚ÿ.¸?&üÅð·þIÅð/tù5ù³òoéòï)¡ß²Ÿö³û?û-ü½üûåEÕŸíoüÓÿÐð à +-`l l ì¾Ï_êoöõßøô¯¦¼0oЫô õ´þ›¯¡ý´½i¯u¯ÜKÞ‡¾§÷øUÁßëâKâñ;T|D~aùmÕÈ™?æß3?^¼[ùp¿0øKào +-ðO ðÉoÉ_ ÿÖé·ìöKøŸµðWü¡ÿÓ?áŸþsø€.&@ÿ ÐÐ!àðþ2ÀùwúŠ?p]™Wç!=«>P5Á>há³ó9îÅûwØ÷ôÞ¿üíiñ×&â#ò ÅäOùžù£Ë2?š/Þ-pC þ»5øsð×eàoü÷ü%ÉŸ–mGgùóôköÓ~vÿ›gÞ²ð×òÿèãsA¶¿ñoþstt8XÌ€-·ÀïzÿKýU?'ñ0žAoÎ ô"ý5HOêÍz`ÿ°ÚŸûø£À=ò^¼#xo_~?ñ‘ø9ñù?ùFþý ¿µœü{ù1óãÅ7øàWøÇÂ_Ûþ „ß’æ¬AÉ_ý™ê·ìÝ/áÿºâÿ6Ëÿ½³ï3ýMçŸþsø€,€N€V€;`Sð­ïAõó¯ôß_£òæ|>Pÿy‚½µýG~øÁûïŸ}Oë^ó^¼•}Oï-ðC5ñs‘¯ä‹ø$BŠüJ ùcŠÈæÇ‹w ßàƒ´uø+ +-‹Àßø5ù§¥“pògègö+ýšý¡û%üOeð‡þïšþÎðŸà € Ðÿ¸Ü]ƒp×Ò—þÃUý–ï`ü%üÔEw^ wé…z·Þ±gÛ3îsÜ‹÷/…¾·ÀOÀï˃?8ñ=ò§iäƒüv!¿EÈoü»IþèH~¼x#èü?ñàþƦfIþ6Iþû™üS-ùƒüóûË_ý ý}F¿f¿w*üÿÓ¯¿ôÿgøï  € À +-pt ¸z__øûEýžO¿På…y8¯ÐSzRïÖ;öÐþŒi¸GÞ‹÷Ï£ïé½¾¿{W~qâçÅ‘?s†FþTF¾ß&ä7’ü˜ùñâÄ»íÇ„¿¾Ò Éß*É?!Iþ5ù]þùsÑ_@?³ï3‰ýè~ Å_ÊÿåS¯˜þàÿLàù/à  €À +-`8¶¶ÕÎ?¹ /ΫñPÌ‹ó +-=¥êƒõ{¶=´åÔËZ÷©¼÷¾×À'ø½=Åàg¿P|FþƒIä ù­B~SScCC¥>’/ÞÿïÂ?*ÿNƒôà—äo—䟈äŸÂä§üsúÉ¢ÙÓ©èwúÅ~¡_³?Ø¿_ìÏà/åÿ≓¦?øÍùÿmð@'ÀG€3€Ð)à}Zzö‘>Ác /Ê'Î ô"=³þí·h½bZ±7íOžxQë^¸·¼}Ÿ +-|‚¿9€Ÿ$¾‹ðsâ3ò§OCäOAä ùíB~ËÈÝŸüQEäGóãÅ»o(Á?ü¿RihlljÎ%ùç«üýOzô;ýZý©ìöïû5üÿß9zôØqÓŸíïü‹ÿ6¾2º\̇À¶@ç ôì3}sV‘7æ úDzP/Ög°7í;ªu¯Ü#ïÅû=Á{~7?¾'¾‰/à÷:ÄÏE~sSccC¥ñA~Í`È™/Þˆ½~È_W”ü"ÿd‘ÿÈ?#%ÿ<ÈoÑÿ¸E†þÐÏì‡ýÛÜþ]»û,üÿCÏfú[û+ÿæ?À@&@7€+€ÀèðÞàì3}„çoáwȼAïÒ+õb½cÿ°7í?wèÐÁä^ò^¼ïï{Ý{~à¯Í€o‰¯â?üKÞÜœø˜øE‘_‡Èˆü|æ’Íï–¾2÷‡?ä¯Ï&‘ü³!?¢A:úûѲßíG÷ïØÙð—òß÷ìþ´þοùÏàèèp0Ø‚7lÊÏ>ä#ÿa$þ<$¾ˆ?+'þÄ”øŒüŠF~­‰3äGóãÅ™Wp¿þjÉßÔÜÒÒÚÖÖ>A埜“_¢®G?èÔ«_ì_ŠìOÙîß°q“†?ñß¾cçΞޠ¿óüçptt¸˜ì€NÁI›ƒò³ùÏ<‚^è]z£Ö;öÖö¦=ë^ó~s×&ñ~½z/¿Ê_À2>¾'¾ˆ?SÄŸ–B{[[kK įù¥ä§ÍäÇ‹7òﶛ†ÿ§€ÿ^‡?•üUåŸ*òOùgΚ]@?ª_²ÿ Ë~±…Ú¿fm‡†¿ã¿¥{«¥?Ú_ùÏøÏÐ Ð à +-`°:ÇmÊÏ>ä#<òGð{t^ wéI½[ïØgµwî%ï×uvhß›÷øþã¥À—ÄŸk‰/âÏPñ§–ˆŸDþXü{!þÍ’Íoä]™ûƒ…?›ü¿ò7ɯÑ/ôÏ™óó_ýó²ô'Ù¯öK÷¯\µšáïøoÜÔ¥ú[ûþÍ€,€L€nF+€Àè¶9(?ûðÈÄïÑùÿ±_¯ÏYUWÇ[ic 々$’H ‘›‚¥¨#تµ—7:Îèt¦Óñÿݳ.{ïµöåìs‚á Éïû¶çœ'¥3Ÿßª@?HÏÔGë{ÒþßFûÄýpÞûÍ_¢÷æÀÿìÉcþ]8ñoýagkkó†ÿýLüxäÏ!ÿ ÈGè45zð×áùþüäò_%ùW£ükëÞ¸±¹µus[ŽþÛwv#ýzõ?úäÓhÿ³`ÿWÏ_ðáïðýÿÑþ?ÃÈ„ àà%øE× “>ù ¿ö?Až”ÿ/}—¡géõb}Â>hÿ¿ÿM¯{æþÏ_¿xñü+öþsñ^üO?yäÀÿhoמø,þÆÆúšÿ½L|{ä ù"~—ü7@>B§§¹ðwN~’ŸO~¹ùWIþk*8ú«ôßðPÎþÇO> wÿç_|©‡¿âÿͷ߉þÿì?À°2²¼4´²2ýôY~Œÿ}éçà¼@?HÏÔ«õ{Ñž{½îõ¼7ÞÇÿáƒûUðIüÍM=ñ×®_#ñWE|"_ÄïùsȇùüæÀ¶„?üËîäÏ俾¶žŽþ›Û;Žþý»ßã³?ØÏw?þÿ Æ?ûÏ @@#@+@3ÀCð“ŽÁ„ôi~“'å‰ùÁy~>P¯Ö'ìƒö½\÷Äý³?=Õû>x?ø÷>>8¸»¿ÿÑ^ ~:ñ¯Ñ‰ŸÄ7GþrqäòÏ‚|„PÑøýÉ®}ò;ù¯ù‰þëtô¯ÓÑŸÑgwoèç³?ÙÅ_ô¯ðÏþóÈÈÐÐÐ +-Ð ðü cûÑçþ3}žß%äIyb~p^ ¤Ô³õ9ö¢½ãžÏûtߧo÷ÎÛ·ü‹À×ÿ:ø"~?¿<òÏ•G>ÈGÅ~;þÆÉïå·Gÿûáè_££?Ò¿Môß"ú½ý÷É~ÁÿIÀ¿Ð_ùgÿ‡0 6€F€g€v@§@úW»ô¼D¯ò¤<1?8/Ћôõl}ÄÞkŸq½? ïõÀWð· øñÄÿ 8ñUüK$~óÈù¡ñ:ðŸñð×NþRþxô_µG¿£Sèg´ßþáòwúGþƒÿÃȤ 6à{žÞ҇ùMBž”'æÉy^¤¨OÖGì“ö÷™÷·åÀß&ï ð ñWzâÇ#ßfœ|˜Ðim:üõ“¿'Iÿz ¿b¿Å¿¢¿òÏ×ÿàÿ0²ihhxh¾Ó-¾o•ù«¼C¯ò¤<1OÎЋôB=[Ï—½bïµ÷ÜÞðï+àwÅoù !Ô­ÿþ)'¿È¿Lò_ùÍÑŸÓ_Ú?‚¿ê¯üÿeÒÐÐÐð èèLHŸfâ¿æ¯<æÉy‚~^¨Öóe¯Ø³ömîsï+à›ŸÅ¿Lâ/'ñ§ù¿ËÄù¡²ðç'¿“_è·òóÑߦ¿a¿Ã_õOüóõ?ø¯0,€Nm­€Lö¼yJ^cã yRžèIz¡~°>Ã^µwÜx_ŸO|'þR¸ñ“ø­#ä#„¦ÖƒìäOò_tò;ú¯ô›³ßØŸã¯úóíøÿethÂð +-èÈľ¨fŸ—žÉž*ó¤¯Gé…z±ž/û{¾íU{½î#÷Æ{wà‚IOü¥xâñÇŽ|šØøÝÉoä¿`äô¯ýïúßúõì÷ö{üþñ_ -M€Ì€ nAìi%÷€¾$_x,ʳó½J/w½XÏ—ý€½ÓÞsï½þ*yŸ¿¢à÷Äoù !4«&ü£'¿•ÿ¼•¿ ?]ýéì·ö×ðú ÿ»Ê]€0´¼:a b+¹ô-6þí:OЫôr×Gëìö;¤}ƽõ>øðUüó³Åù¡éå`´Nþ¾ü9ý—-ýæìOöWðgýoªþ‰ñß.Om€¬Í÷Àõ°š{$¼È_¹ÇhŸsï¼çÿ +-y__Oü¦øgøý#ä#„zµá¯ümù ýæèô‹ýW3û=þ¢¿ÜþÂòŸ ,@˜™°a ú…Çôõ}UžÒëYOÔËe/Ø[í7HûȽ÷>ø=ð/ð§ŠòB‡l2üUùsú߶ô÷ìÏðOú'þÕZ€8¼²<q +-bûÕÜ#áEþ +-+Ï=C¤'êÕú„½h_rßö>ÿN~S|:¢%¿?úýýîì·ö;üsý•½þÉÿ0idxâ¤5èŸà¯1óìü6ÿ˜Ro¬OØçÚGî÷5ðßÎÀ˃ñB¯¢ ðÊŸýþâìWûþéô'ý•ëø?2¼2¼i vÌ ´rO†×åcÌ<;¿É?f¨'ë öª}:î÷é¾Wï—ÅûþÅüâÄÏÅù¡#©¥+ÿï“üÅÑí_Jg¿ÚYì÷øëénÿÀôŸÀL€Ž€¬@‚ÐͱܓáuQþ†|y#H©'ëöæ¶×ãÞp_÷~)yŸÄOà¿Yžø“Äù¡—nþBþ‘£Ÿé¯ýÁ~søüƒþáøþÇà ÐHKð¡„FîÉø¾~O>¡gé™úpÙìƒö–ûá>xŸøì}:ñ ø}ñqä#„Ž¬±“¿%þâìö[ükúÇë_üçH   #† ´ÞË?¿"è“ôL=[±¯i_pï¼¾=ñ-øóÄù¡_¹iò·~¡?;û£ýmü£þÌò_À,€n@œ43J¯~¾¶š OÒë{§½ã>ž÷Þût໿>ÄG- ’›)ò;úó³?Ù?ëŸø7þËÈ„ 0CíA3ÿxüŠ~õª^¤êÙzÆÞkŸ¸ç}îý[¹÷‡ä#„Ž´qù{ô—gnÂ?éoø7þëè褰[0=ûrü¢þ‚•^¨ëû\ûÄ}ÝûùàC|„ЂªèÓ‘?Ð_9û­ý9þ…þ¿€8ºqò1˜’5|ðÝð +õ—û\û‚ûŠ÷o:ï#øÓÅù¡WXOþ>ý5û-þþŽõ?[€¸iüLÊ¿¿~ÂK¯Ö[ì­öŽûš÷SÁ‡ø¡cÒ ùý£ö×ð··à_ýO 7 ­@>SÊÞß¼”~çK}À¾¢½ç¾ç½â#„Žq5”æПÙ_Å?ã?ø N€¿sʾ‘>žK¬Wì3í3îsï >ÈGƒúò[úGìÏñúGþƒÿaÒ¤ p3·\Ô|Ô|oÉüÌEOý…ø§eÚçÜw¼÷à×Å_ôÿÎ!”špô7èOöøGý#ÿÉÿ8qüäK0µüæëñõÑúˆ}Ô¾äÞx?|ˆ:†Õ½ÊèoÙ_Á?éŸøOþÛ0àg /7Ý©že?iê¼ùΕØGíëÜxßâ#„Žsóéwöü“þ†ã¿€l*S0½ò;þ‡ õÆú„½ÑÞqï¼ø¡Tƒ°œ~oË¿õß@±£kЪõ ÿC–zcýY÷'·¹Ï½oñB¯WSéÏì÷ø{ýÿnŠ è¯A_÷*ó^úÌz}Î}á=ÀG´Z¬•öã_úï Ü€þôuo8_P_`ßç¾é=ÀG½þ5…«ØŸã_ê_ú_NÀ”5˜¢ûôê ìkÜ·½ø¡“T»šýþuÿë0>“j|µ&} û*÷#Þ|„ÐÉlĽ:þ5ý[þ®À!ù¡ê_Výï0Æ=ÀGüF¬ãßò¿3Y˜ûjëOh`ßáÞ#„NSã ¶ñ€ÃÍÀ|äÇ©ïsðB§µžŽãú÷àW®÷Çtµ‡÷!ô›)øwõ?‚˜þ“´÷!”5ÎyþuÿàEÿ»"„бn¢¥‹€Þ¢ÿ%Bèuj¯G;sÿhB/Ñlt_nÿk‹þ‡B¡ÖKø„-ú_!„N~‹–Ö#„ÐÂô!tªò!„B!„B!„B!„B!„B!„BèÕõzÑm +-endstream endobj 204 0 obj <>stream +-ÿÿÿ((( +-endstream endobj 86 0 obj <> endobj 205 0 obj <> endobj 206 0 obj [0.0 0.0 0.0] endobj 207 0 obj <>/ProcSet[/PDF/ImageB]/XObject<>>>/Subtype/Form>>stream +-q +-/GS0 gs +-244.1599945 0 0 245.4399945 59.3429222 55.4917377 cm +-/Im0 Do +-Q +- +-endstream endobj 208 0 obj <> endobj 209 0 obj <>/Filter/FlateDecode/Height 1534/Intent/RelativeColorimetric/Length 418298/Name/X/Subtype/Image/Type/XObject/Width 1526>>stream +-H‰ì×gw׆aŠP@Ý )65º@4ŠlÇ1Á¤‘Äé!½÷Þ~xæm»ÍÞSŽŽ<*ÏýÑš9ËK:ëzvì@!„B!„B!„B!„B!„B¡q´³WCÿß"„ê^?áq Bh“µ>Ìã „ÐÆiéK ý»@¡-ÛؤÞ4¶ú·ƒB[¤5Ã>zà!„>¶P~¬W`èßBm’6–ôk½Cÿ6Bhö~ÖïîØúù?ôï!„6Pã¾+îýÿCÿ¦BhØÖˆ}W´_ëؘŽìG¡´‘¹îýéÀ~„ÚÑæ}?ëÛ´þÄHxFÁè?B­g½¹ï%}3åŸliÄCЙØÚVõã¾›õ£ñÞ¯îG ›þ !´åëã};ö˜ß3–:vþûØ?ôß +-!„ÖTwï[´o„>öÞ1ÔzZüoÃô#„¶RÁoâ¾H}›ñc¨í@þíúï‡Bë +-~™û<öEèk`ª­}U­5ßü(êßh?èGmÖº_ô>§}–ú&ä÷%íï\úfÓÈ€œþ]í‡ü¡ÍU'ðKÞ7iŸ¡¾€|lødCSSM?-Þ‚ü ¨óŸÑ¿›ý!´)ê ~ÎûTû:öuèóÄO%Mw,}/ê' Ì ÿ‚ý !´yê~ƒ÷)÷ëëÌx?Pî`Uà Ǡ~ +-þðo±¿ýCÿ­BÛ½vñ³àæ}Vû¬õuæSÓ}‡z¿™?É Èúëßj‰~ÈÚ@~aßg¸µ­O¯ó~8êHçâ÷êÇ ½ÿ#ý#üÛìïCÿÐ{„Ðv«‡ø¥Ÿ™÷!÷ö¡õô òßGÃŽu.z­~ â#€ÿ@ÿÿ&û3ô·É?ôW!´}j¿ ~fß׸ßï¹O±©Oy=ìx¢Óc߀Úø÷øïOñÏØß‘~È ÞâGà‡ÞïõÞ'Ü{í=öõ!ôòÎîÖLÔÉbñsîõô„7 8ÿž§ºüködzò#„6NÅo¿ì}{§½·ÞK: oŸ +-šíXøNrÂ3œœÿN‡ÿdŒbnö×èo–èïBh+Ö(~iâ×ÀŸpà;ï'Íûˆ{ÓÞaï­O 7¾ßÐNG)?go'ÇÀbÿÿ¦ ÿØþüì‡ü¡Áë%~}âg~´ï ÜGØ›õ‰ôù„ö³®sioºj?òo%ÁŸÌ0ÿCþsø×ìwô³?7úwgèü¡õ©iä·OüühàÞ+÷6î•û{£>†>0>Bý-ë|Ú§]µ¹—¢³ÜøØÈðoÛ?Æ?µßè÷³O~Èúøê2òÅÀoô>æ^µWìCëMzÇ|`|¤úíbÚœ«ö#{'º +-ÁpGÀ.@â¿ò¯ú×–Ý~£ßÍþüè-¡WƒüCgB›µ.#?#~<ñ3à缸×m/Ú+öõ&½1¢>¯-Ä-&%?¶·Â³;vbÿ•Ñ_·Šd2û£ÑÐß&?àG­¹âïn?œø +-¾ü~è}Ƚh¯Ü‹ö‘õôƼ7>`}IºäºÜ’R_ Ž‚¿v‚ ùïôüOºéÏø§öûÙ¯ôïKé/È¿ò#„ÆY÷‘_?˜øøÞ—´wØ«õ*}ȼ#ž¿"]Õ®…]OŠ~hoè¸sà΀½ÞÇNÿØþcF¿ØÀÍ~?úýäü¡µ5ªø{ñýÄ/€oÞϨ÷÷¦½ÃÞY/Ôôʼ3Þ»~CZvÝlÉ?©¯ú›àî€àÈpþ3ÿþ†¿,ÿt÷×fÿTDÿ(ò~„P¯:ü‚ø5ð§Rð#ïyßÛ¼÷Üó¶7í {±>’^wÈ;Üoq+Òm×bþ}I>Áwü ðÀü7þ½þþ<ü#ûƒÙo«:¤_G¿É¿7+ûäúK…Ú¨•Éï)þd<ñëà«÷¼ïyÞŸ!ïCîU{[öŒ½£^¤WçMyž¿ËÝ“î[osè+ò¾;vôè @ùOôñíŸQûuöý6ú§s£¿¼ù['ÿÐ_-„ÐÆ«ùNü=9ñðfÀŸ‘¯û^¸?GÜ¿q什bï¬géÅyc^‰w´?à>#=´>[Ì=¢¯Èûî è!Ž€œ>æ?óëïð'ûßûϤöÇôòôG£¿,?àGõ®(þ®ÂÈoÿ Nü#$~ühß÷<÷N{^öŒ½·^¤è•y5ÞÑþ9î÷ØzÒ{HÞ‘÷ÝAÐ; GÀ>ÞæŸ×¿è¿Hú þÑðvDÿ±˜þdôäÏL~Àjn”‘_Ÿ'þ!7ñ‘øþÉüØ{á^½7îI{]ö¡õF½s^•7àÉð§Ü*÷÷n‡äIyK>Áî=rüðþ»õ/ÛßðÏ ³¿Dÿa¢ŸG³üm“ð#„’:‘_ùB~I|ÿ¨¦~ì}Ž{¯½bÏ«^©7è•y5Þxú<õ>÷×ÙüÏåy~•?ÄŽÞwäèà8þ½þ%ü+ûKôŸ0úk£?‘BäÏMþþTþ¡¿q¡k!¿yä7‰O້ïÀ~ä}‰{Óž°Wë™z–^œWå•x£ýõEî9÷akòœ¼Ã¯ÛAÐC WÀn€\:ê¿ÌÑ?‹`2ûSúMþ£mò·L~À +-êG~0òKâöâ—ÁwŸ½wóÞqŸ×^°©gè…yE^'À_T}‰û2õë«…Üü¸¼IŸaÇ@ï€\¾|ü0þ³ú;ücûçÌþ<ýÇýèo•?žü€!T¯ ùm#¿M|ÿL>|¿ïuÞóºwÜçµë•z–^œåUx³ýkU/¹¯sßû¦+úÏò¤¼EïÛ=ÐK WÀn_=äAÅŸ—Íþpö3ýgþtô“ü‡cù;Lþþ€¡íZ/ò‹#šÈ¯‹ï&>ƒ6ß|Ù÷ËÎû{§}Œ=YOÔ³ô ½0/È+ð¦úGÔ·¨oKßiIãWøe» +-z +-ä ÈÐÀ€ùñïôgüyùóð¿Eÿ²ÿÙ™ì¯fÿ<Íþ„~7ú³òO“üùÉøBió‹ä'#?ÿPN|?ñ3àËÀ—}¿¢Þß'ïyÝWÜó¶´÷Ø“õJ½B/Ì ò +-< þݪïQߧ~ ý°1}ˆ_àWé3ìÈ!+À7€O€;ä¿ãßé¯Û¿ÂŸ—¿ ±Yí—Ù/ôóê?OôŸ;—ŒþP~‚?’?;ù»Â?ô·!´Î@~fä°‘ŸŠ?KâÛÄ?žÀ¿87?ƒ_ |·ï+ïmÞWëþ ­ûŠ{Ýö¬½Ç^¬'êYz†^˜äøŠðWÔª~ÌýDúiCúˆ|èÐüWþ+ý«íÿmÂ_–¿ ³µ²ÿñc¢ÿaHÿÍ›:ú¯øÑáBM~?ùI~_'7øóî~„¶DM3¿…üIO¾ù¯ÓÈŸ!òÄ牿Lÿömÿ~þ;ïVà;ï_¼°yÏë^Æ}µíM{ÅÞ[OÔ+ôƼ /¾“âÿªú7õî¿ÒÿŠéò4¿HŸ ÷@\>zä8ÿ•ÑŸ·?M]þ6üÉ~ÚýïWö»ÙÒ{¥¢yÙF^þÙYšü*:ù×ÿÐßV„Ðù:òëÈŸ}ãôé3gÏ&â_"ñ¯]sÿî½{ þCÿ)ÿÿÁ³gºïÉû—/eÞÓºî_½¢m_iÏËž±7ë…z…Þ˜äÅwRüÿì×ësUgÇñ ÒBé$!wÈ…r©Çâ !H©J‹I !娄$äFB´aFt†iu€ +-±hAI-¡! ŠVï÷ûýþ߸Öo­õìgŸ³÷9I;#ŸßKÎ~xÅ|Ö——hŸæÃŽËFS§È×xȃÞ9rpôØPÿÁ?êŸô§öïïçô·ò·ðwÝßÚÒÂÙßØÑ¿žé_ÛЋþw­\™!mmÍ"“¿¢Â’?þ¹Ið{îøÃÂî»%š?3ÃüòqägD~•D>‹_Oâ/‰‹¿ +-â¿âøœø®ð›šþ–¶6ö~»yßÑ!yßÓ㸗¶7í{±^¨WèyA^}'Å?Ã{™wû¬ìs)ÓŸå[<Ã_ ç@\=và¿ò/ú[ûþTþþqûÛ¶liýM ƒÐÿäºuQô¿gÕª¸üKHþúzIþ…ÕUUšü¥–ü…þyS?¸vlR™ŸJ>‹_À‘Ïä—2ùQä×ÔÔÖÕ™ø˳Ä_½FÄgð‘øQá[à·ïÜi}ßÕÝ-y?0 u/Ü8ÀmOÚSÙ+öb½P¯ÐÃyQ^„7ÛÇh'yŸÇNɾ2ýY¾Å3~o÷@.]Üœ;ð_ù§ú'ý©ýÐôGù høGöïl'û™þ6¥_ªŸåýu–üËYþGIþºº„ä+ð‡à »?ö¶É/ôÈÏŠüÅDþÒeË þŠ4ñ>?þ®ç8ðµï{ûú4÷÷Òö¤=•½b/Ö3õ*½:/È«ðjûiÞÞ±/ÉÎ&N”/ñÏõè%3 7À]>ð_ù§ú'ý¥ý9ýÿáa µ¿“í·ì÷«ŸåúMþ51ùW@þe,ÿb’¿¶V’_à/Ï‚ÿ‘dø˜ üwû_pXXØ6ÙÌÏM>‰ï‘Ï‘Oä×Õsä/] +-ñÏ¿!.¾Ïâøø{{z¸ï÷ jÞŒHÝ3÷÷Òö¤=Ê^±7êUz8/Ì‹ñÊ;K>N{…÷eÙ«ºsY³_ôC<â×väÈ#À'@/€ãõOúKûsú3þ\þ##qû‰þî.¡ÿ¹ˆ~È/ôûò7dÈÿø;Yþ¥K–xÉ_Uµ ²Ò‡¿(ÿþüaa÷Ù¦ùyÈ/++¯¨¨\ ä{‘¿ü1Ž|ŸÉÏ-~"øøÎ{äýÁƒR÷Ì=Ž´=i²WìzH¯Î‹òb¼òÌÏÓ^ã]}%ÚE7ïõ3<á·vôÈÀÀ Ð ÀøGý‹þÔþ†?—ÿÁƒþf”ý‰ô§ËÏðCþÇ–/wÉ_CÉ_-É/ð—ü…€Þ[‡ÿnÿ[ Ë»ÄÌŸ™Ÿ@þœ$òKüªªê…L~]ù+VJäçßÀ‡ø|ò^ÀwÞ#ï’ºWî©íM{.{Å>¢^¡wÌ‹ñÊ;D¿Ä{÷†îrêì |Ž‡vôÈ# ' :Ê?êŸôeý©ý}ü%üÅ~é~¥¿Ï£?Ÿük|ùW®€ü–üµ”ü  +-üIð?ìÃ?;þ™1øCð‡…MŸM2ógÃ|Ÿüy äW +-ù‹˜üúúxä«ø ?.~BâûàøÖ÷â=ç}œ{i{ÒaYÏÔ+ôp^”Wá ÷+´¯bW±kn‹~‘/å¿·s —À®nN€óù¯úSûKú£ü&û?Éö‚ýƒýŽ~ÎþTú³ägø#ù£ä¯¯«Sø«þ2†¿˜á/È‚ÿAþ°°é¼ôÌŸ•”ùJ¾e~6ùÕD~ “¿XÉÏŽü˜øâg¿8?òþSìýQòþØ1ážâ~lŒÛÞ´WìÙz¦AoÐCy1Þxg̯c7x_ÓÝÌ1ûä­=rppðß9ä¿òoúSû!ýÿcÇ4üÕ~éþ8ýýFRô'ÉŸ•ü=ÿ(þù ð?dð¿# þà~XØtÙ$2ß'ÿ¡8ùÉä×2ù.q䧋5~BâüÄÁw}ô%òþøè¨Ô½rú´Óe/Ø‹õNz^˜â ÷¯ó¾Ý¾éö­ŒE¿È—ò +-9rìè0ÿÁ?êŸôGûŸ>íðçò—ð?zö¿ûèÏŒþÉÊïà_Ìð×(ü•ü…üs3áÁ6ý–n¾Ÿù³a¾’?7Nþüâ’’DòIülòó‹Külð]ß‹÷œ÷V÷½´=´WìÙz¥^¡çEyÞÉþ&ïÛØmÝwRg_È÷xê.‚ž¹vpÜ ÿ•ÓŸÚ_Òåò¤†ÿè(ì?röç ß“û6“¿Ñ—?~NþºÚÚüðÏQø3‚?¸6-6µÌŸ#™ïÈ/L$¿ÎÈgñ™üxä;ñ›2Äw‰Ÿ|öþxäý)Êû3gâÜSÛ“öRöWÌz¥Þƒ^”WâîßåÝÁ¾'û~ÎéGòÝ9ÐC WÀ;îˆÿW´þIjÿþgÎhø«ýljýiôGÑŸ)“ÉOþ~I~þ +-‚¿´´¤8þ<ÁÜ »÷–žù3ã™ÿ Ëü‡Õ|#¿8'ùÉ‘/â7o‚ø[ãâ[⧃ÏÞŸˆ¼ç¼î%î/1÷¦½`/ÖƒzH/Ð ój¼Óý¼b?Òý8çì+yƒçîè#`'@ü'þ#ý_çöçôWüÇÇãöŸxö'Óï¢_åïPù·BþMÍß’ÿ}ÉÉŸ~qð‡à ›fK2?WæÏõ2ŸÈ/ù¥D~E>òã‘ñ7·°øÛ|ñ{!¾KüðÙ{ß¼ç¼?wÎÕ=ÅýæžÚ^µgìÙzD}$½8¯È›ð@ü'¼Ÿb?Óý<çì+yƒçîØ#€`@ÿ Àþÿ‘þ„ÿN+ÿsçâöŸƒýIô»è‡ü}1ù·±ü”üÍMšüï—äŸ +-üEE!øæïr›ŸœùJ~A&ùU)äkä7¬õ#ŸÅoÝBâoß‘!þÄw‰Ÿ>{Oà›÷çÏKÞ»ºîÑöªý›‚½O½@/Ì›ñN÷_ð~)û•î×9fßèò]<ÿ»ìÑþ™2ï}ä]wôè °ÿÑÿRÿNÃÿöm ¶Ÿ»ÿÚÕ«ÈþK—"úÏúÑ/ò…ü/˜ü#$ÿ~’¿¿¯wowWgÇîkòoimÙÔÜÔ¸ñ™§7üëþ5éðWW1üå à/,œ\ð÷ÃÂîÞ&c~îÌ/+cò9óA>™ŸDþ:"ÿDþF"Óæ‰üv‰üî½=}ýƒCû‡?úü‰ÐÄ? ñGEü(ñ=ð/ü‰ë>úž½—¼¿sGêÜGÚûØ‹õÞ 7æ#â…òÉþí?©ó>ÒgÞ9pgÀn€žøïóïôþ(ÿ;wþfÿÍ›.û/¿ÁÙŸI¿F?ä?k~’xÿоþ¾ž½Ý{:$ù·>ÛÖÚ²™àÿPüO8øá¾Á¿€á/#ø‹‹ó–û3‚ûaaÿÛ%˜?Ó™ÿ@¶ù™™_J™_ÌgòÿË~}=GuÞaŸ$À„1–@HcÈE;qBS×JÚ]õÞ» PïÒª—U[õÞE/N“@(È€M°Æ0É 1iŽSœ^þ€¼½œÝ)ÃÄsžë÷\îç÷]šù”|g äGFEÇÆÅ'&%‹‘Ÿ›—_XT\ZVÄ7ˆoBâãÄŸ° >ü‹Þƒ¼Gu/rµ'Ø£¬ÇÔ ÐSæ9ñDò'x?çûÈê„Gä3ñ°3@o9ø?„¨¿€?*þ‚ý/\`Ù¯¤ŸE?’¿[’ßP]UQ^VZ\T˜Ÿ—›“}%ú®´”䤄ø¸˜è(  €_¯„Ÿ?Ók~GGËÁ/º¿’¹o)ø_öïAºÏûžgþ*j>$ŸšÏ2ßdþF˜ù›iæ#òAæsò=ùZL~HhXDdTLl\BbRJjšùÅ%eå•Õ†šºúIü$>O| þ)þ÷ ø?¸À¿z{ƒxòqϵçe°çÔèóœx"ùS²_ˆû¥…IèWâ9àg€Þ|È üóú'úüiøsû¯ûIöŸ?ÏèWD?’Éoò7ùk Õ•å¥%Å…ù(ù³23öìÞ•–šœ”Êá×@ø] ü(ø)üÈýÍÏ ~Õ}uê^ö¾`ÍüÜüçfþ&šùœü­Û ù.–ÉOHLNIÝ•¾goFÖ¾ý$òKJË**« 5µõ @|#¿‹‰?†Å_þeþççYß߆ރ¼'uO¹giÊ^´žP/9/O=ÿÛ¯—0þZ¾ü °ÀóŸÔ?‰†?*þÜþë×Iö_ºd…~"ÿ¸™üM@þÚCU%Mþƒ9Ùû÷efìÝž–š’”˜ ï#ð»Bø·›Ãÿú¦M–‚ÿóà_Áà·à¾ +-¿:uŸÉþ+óYæÛ³Ìßòj>!û@¾+ _#“MÈOƒägfí?Í#¿ªÚP[WßØÔÜjlâ›$ñQâ#ñ9øç øW®ðÀ'}½gyO¹'m´gØcëEé9ó’ï¿¡ûXÚo-L~Á>”n?â`þSþ‰þ¤ýþrøûoݺyØm~Ò™ÐåÿÎÛBôËò›€ümÆÖæ¦ÆúºZCuIþ¼Üœìû²2öîIßEà‘á÷ð»AøwPø™û[̃߆¿ê¾:u/sÈçæ¯̇äcóm ùRæ¿.g>&' ß ïå£Õùúù›‘¿{O$?ç`^~AQ1‰üºú†¦æc[;¿»·¯_)¾œøBá_»~¾è½÷,î‰ö{b=¥žB/ ¯¤ý¶ß-aüµò g€žá`ÿ)ÿDšþBøcûA÷/,ܹ ìÇô_›«ŸG¿™ü@þnSWG{›±¥™'IqQA~îÁìû³2!üi)É"üþ~z ¿;„'‚ ÁOÝ_-¸¿Ru_º¶ç™¿J4Ÿd¾¥Ì‡ä‘3ïÈwä{kuzH~0$? +-’ŸDÉß·?’_XTRZ^Q #¿¡±©¥ÕØÞÑiêîéëâBñ§ÍÄ'à_ºÌ +-ÿæ­[8ðïÞ½wÿ>óžæ=çµ=ÕcO¬§ÔsèEã©á¿gûÃ2Æ¿’opØ €øù'ú£ö§ø“ðGöÓîGÙè¿É«Êáû‚ü'ŽsùÇ€üƒ@þžnSgG»±µ…$eEYiqQa~ÞÁ ÿnËð{{i<üÎN~üo¾a1ø×±à…¿u÷¿¨º¯NÝg1 æIa>"_4ß™3ßÁ<óùÛ¶ïtrvqs÷ð$ä@òÃ1ù‰"ù¹y…Å%eå•UÕ5µ$ò;:»º{zû‡FFÇÌÅ‚?þ >üpß#ïuµ"h±§Ö3é¹ó +-áÿ(ìÓeLüNq ø `@ðóôGø?Áøãò—íÿ ´ŸÑ‡U?ŸÐ£_!ÿ È?48Ð×Ûcêê$É_W[S]UQ^ZBáß—™¡€?Âï«×ùx{yø]ü0ø¿õ–…àwÁogÝ·…îsø™û–‚ÿeÿRÔ©û|lùæÛ@ó×aó7l2ÿk$óù;v:»¸ò5Þ>Z½¯@`p&?Îù†šºúƦfù]¦îÞ¾þÁ¡áѱñ‰©éQü3 +-ñ!ø7nÒ¿‡Áÿ |Ô÷<ïYÝ#îEíëeé%å™ÞöçeLüNy +-„À.€à¿¬?JVþ$ü‰ý‹‹$ûß{ЗVÿaú¹üçÎùAùgü@þá¡Áþ¾^’üÍM õµ5†ªÊò²’₼ܜlþè¨`€Ÿ¯^ëã­ñôpsuqÁ¿m+þ¯KÁï‚= +-~[üªûêÔ½ðY3…ÂüÕÄüW¡ù0óíÖÛÛ£ÌÍGä{+ ßÉÅÕÍÝSãå£ÕùúAòCÃ#¢¢äÌÍ/(*.-«¨¬6ÔÖ546·´¶µÓÈŸ˜œž™â3ÿ*‚û/| >üG0ðEïeîEíEìõ"ôJàÿ"î¯Kžô™òˆ'€ÿ‚þ2þÌ~Òý,û1ý°úoÿÑoEþãPþ9 ÿäÄøèÈðà@?LþŽö¶Ö–¦ÆúºçÁá×i}¼4žîn® øw àÿ¦ü¯¡à·§Á/¸¿Záþ +-Õ}uê>“-Ù|H¾`>Ê|G’ù[xæòAæ;9»¸¹{h¼¼µ:½Ÿ`ÐÉ7¶ut’È›˜œšž;Ä?ŽÄÿ.Ÿ&>€ÿ® >|Ùû§Ð{T÷”{¢½ˆ=§^‚Þø¿)ö÷gNùÚüH'€ÿ2þ¨üŸBü%û +-íçôÃê¿é_€ôcùýLþ3Hþ@þÇæf§§&iò÷twu¶·[šêj Õ•e¥2ü©)I‰ñq1Ñ‘a¡ÁAþ~zÖÛKãáîæâìdü›åàÇî¿ +-Ü'Á¿$÷_öoFºÿç=Ãü•fæ¯æÛÚ®]GÌß°q£˜ùoH™ïá©ñöÑé}ý‚‚CÃ""£cââ“RRä—WTU×ÔÖ745·Û;ºL=½}0òÇÆ'¦¦gæ>rìø‰“Pü3Jñ!øHü»÷€øï?xÀ +-ÿ1¾è=Ï{ʽ¬=Ã^ ^†ÞšïÿXÖ¬Ýù@äŸèÿ ÕáOÂ_´ß"ýïúïAú‘ü,ú©üg‘ü'üG¢É?48Ð×Ûmêìh3¶ŠðqøÓ)üQþ_½ÎÇ[ãéáæê‚»…à߸aqÝZ[[èþ3÷Wªî«S÷?ßrÍ·AæÛÙ­·Gæò‰ù8óß‚™¿ÓÉÙÕÍÝSãå£Õûú‡„…GFÅÄbòÓ÷ì…ä瘑ßÖÞÙÕÝÓÛ?04<:6>953;wøÈQ þ©Ó@ü³ç°ø—ñø ,ñ>Äà?"à³ÀÿƒÏòþcâ=á^Оa/RoƼÀ÷?•û×3göÜÒ%O?”¡ýqúÓò'áí²Ðÿ3Jÿââ!ý$úï°èò_&òŸƒòŸ>uòı£Ghò ô÷ö˜º:ÚüM õµ5üY™{!üÉI ñ±þð°àÀ?_ÖÇ<ø¹û(øìíU÷Õ©{{¶ù«ù_–Í_‹Íw æóÌ“f¾³‹«»‡§—·V§÷ó +- ˆŠŽOHJNMƒägAòóò›Zù}ýƒC#£c“Ó3³‡‘êôÛPüwÎ#ñ/Kâ¿‹Älj¿¸¨Ÿ¾à=Ë{ν™ö‚õJç­úþïeÍê-PÞÁIÿO¹þ¬ü­Ø/Ðÿøñ£?£È¿ ÈËþ ?HþS4ù§&'ÆF‡‡úûzº»:ðBø@øw§§¥&'&ÄÅFGE„‡†úûÁà÷’‚ÿÊàwtÁog·níZ[›ÿ°[_±m]wÇ‘p’¢±HNÛ§,Û¢I‰Ejャ½÷–¨M‰Ú{ïmí½‡eyHNÛ¤m’>vPÇ–ä‘ÔŠEÑä¥@Û¤è9÷^^ž»(ÊR‘<Üßóy=ŸÿqÿUÌý³¼ûüøæŽ4ÿÔü×5æÀ̧˜Ïžù.®î^Þ¾~A!¡áQ1±ñ I)©ù…òÛÚ;»zzû‡GFÇ&&§ffç@䯀Èâo߀âïï‘ø>Úß?8<Ä Ÿÿ8øDß#Þ#Ük´×bO¡ž…yŠàçÚ?ˆq>à8ô€øOòèãÏ´Ÿ•þý}môßâÈÿ©Vþ»{˜ü ù·6ñ䟟›žš»62<8Ð×KÀßH‡?Ÿá ðóõöòpwuqr„Á¯à ~è>~û¯óîóã÷ÿš~æ¿F1ÿ ù?ýa>žùFŒÌwrvuóðôöñó¼ ÉONMÏÈÊQRÉo&ɾ6:>19=£| þÎM(>Œ|ø¿%Ä¿ÅðOüC˜ø(ø¸÷"½'ó^Ë=‹öë™Î³Âζ’ÓõŠã Ð.Â?©¿¦ýµøÓìg£ÿñc,úÑÏK~(?Hþm"ùægg¦&'ÆFG†‡ú{{˜ðçç)³³2ÒR““âb£##ÂBƒ¯úûùxÁo¯ ~!üZ÷aðs¹ÿ +-ï>?~§´—è³›ÿ#ùçqó qóµ™é2È|S¡Hl!‘R3ßÇ×?àjPHXxdtL\BbrjZFV¶2/¿°XÅ$ph’?5=;7¿¸´LDþŒ|L|ùhããâþ9žø8øϨàCï¿"úõž¨{í)Ö3¡ç„eß’ÓùŒó +-ÐÂ?Cû5ôCû úŸ=ÓDÿ#"ú?»_+¿&ùüšäßX_[Y^Z˜Ÿ›™žš½FÀ߉À¯.Uæç*³33ÒR’âb¢#ÃÃB‚®øS‚_® ~ྺƒ¸ÿECCàþΟ×Ë}ž}~üŽ9½ÍäkÌ“Å|ùcS3¡ÈÜBj)£e~@`PphxDTLl|bRJZFf¶27¿°HUª.¯¬BÈïÃÈŸœš™[X\ZY‘¿EF>.>ù„øŸ‘âh€ÿ_ø¨÷ß Þ³jO³^‡òßêÜwÄt¿Òqhþ³êOµÿkºý8ýÐ~²úµÑ¿¿Ï”O~ ?™ü×Aò¯­®,-.ÌÍBøǘðW”«KTEù¹9Ù™éi)I‰ñ±1Qá¡ÁA0ø=Ü\AðÛ‘Á/Áo,Á¹O?Ýýcî¿Æ»Ïß©ìEÍ¿H1dþ#ùf"±¹Dji%'3ßf~àÕà°ˆÈèØø„¤”Ôô̬œÜü‚"U‰º¼¢ª¦¶¾±‰IþüÂâòÊÚúù»xäÓÄÇÿ!!þ“'Dâ?Ç)|màS¼grjÏÀ^—òßxº®ÿˆþ(þtû©ô…U?F?ý\òS“sc}ueÂ?35Iƒ¿¡¾¶ºª¢L]R\T—›“•™žš’” ƒß‡ü–R‰¹Xd‚¸‰êþEàþ›Z÷‰àçÝçÇï„;žùçο@˜ÿÖO4æÃÌæ €ùB‘ØBb)³RXÛÚ98â™ï 3?$4<2*&.!195-#+G™WPT\¢.«¨ª®­ohjiEÈŸ˜œ†ä/-¯®­on]‘ ‰|øXä£ÅgK||4ðiÞk¹§hÏ´^/åÿuÌéu˜þ3õ'ñG·_“ý”ê'èÑÏ.?„“M~ÿÎöõ­õµ•å¥…y*üü¥%Å…yÊœ¬Œ´ÔäÄø¸˜¨ÈðÐ2ø]°à·VXɤ ±HÜ÷AðkÝ‹wŸ¿SÃü—õ0ß3̇™Ì¿b$065ŠÍ-¤–2¹ÂÆÖÞf¾‘ù¡aQ ó“RÒ22³•yù…ŪҲŠÊêÚ: ù½Zòçæ!ù›[Û7vnݾ³Ëùâ#‰O_—÷ îéØë ^'çÿÖ¹c]ÿ©úkñç´Ÿ‹~Môñ»üÔäßÛ½sûæÎë[›ëk«¬ð775ÔÕVWøUÅ…ù¹ÊìÌô4üñ±ÑQa¡hð;ØÛÚ(ä2K©…¹Hhfj,0ÂÜçmÜ}ü†Àý çÏÓåþ˼ûüøé·™33ÿ20ßÄÔL$6—HeVrk;{Gg7wOo,óÃÂ#£Aæ'%§¦gfåäæ©JÕå•Õ5€üæÖöHþJþ +-$ÿúö›€ü=@>ù¿¡Šÿ€U|"ñqðÿL> +->»÷¬Ü³[|ß³#O—þþdø#ö³ÑO‰~6ùü•O~ÿݽ;·oíÜØÞÚÜ`ÂßÝÕÑÖÚÜØPWS]Y®.Uäçæde¦ƒàOˆ‹‰F‚ß¿½µÜÊR*1‹ÌLMFW.cî“Áÿ¢îß‹¿âXÍ?s„ù†Tóß¿Ì761ŠÄÐ|…5Ì|gW7/o_ÿ<óc@æ'ƒÌÏÊQæ—¨Ë+ªjêê›[Û:ºº òÇ™äïîÝ‘ÿáGšÈÿù@ü}Vñµ‰Ï>‡÷TîY´?óÿ9ÆŽw¸õGñgØÏFÿ_(ô³É¿ËOM~ÿ/àß½}ë&+ü}½Ým-Íõu5Uåê’â‚’ûgèìóîóã‡ìóÏmþ»Ð|#±©™P Í·’[ÛØÙ;:»¸yxzûúÌ™Mf~.È|U©º¼²º¶®¡©¥µ½³»§o`pøÚ(Nþƒü!ùXää?À"ÿàðS|jâÓÁgë{îu[”Ûÿ=Æ^à°éOÅŸÅ~.ú5ÑÏ%ÿáÁ=ù!ü¿úˆþ‰ñÑ‘áÁþ¾ž®ÎöÖ榆ºšêJüª"ü9ôà÷óõötwsqv´·³±–[YJ¡ûfÀ}#àþ{ïíþYÞ}~üôÚ‰ÍGk¾Hl.‘ʬÖ¶vNήî^>¾ óƒAæGÁÌOÆ2?f¾d~M]}csk{GWO_ÿàðÈèøÄÔ4$yuAþÇùHäïÃÈòô)ÿKšøÌÄgŸË{=´?ãOtôÐ_—ý,ôéG£‘ÿùó?| äúä žü˜üø?ý„€ÿüs³ÓSc£#Cƒý½=]m­Í økª*ÊÔ%0ø•Xð'Á ‚ß×ÛËÃÍÕÙÉÁÎÖZa%“JÌÅB3ÓSsÿûþjüøý0¦‡ù¯ê0ÿmÌü+Fh¾…ÄR&WØØÚ;8¹¸º{zù€Ì™ 3? Éü² +-ùõM-mݽýC#£c“Ó³s ÿc·ÎŸ¢8ó8Ž'‚°QÀÛ­èVÅlLb¢‰Wä¾A‘O<â…H¼oQPƒÈ}ß0Ã0Ã5\ +-Êpß +-j¶jwU@Ž–I•k¬ì®ûÃî>OßÝótO D]éÏÐÕÕUýú¾eLò«ä“‘›ˆü¿ÂÈ"¿¿ÿáÀB|Tâkƒòž—ûWýKž>üùíGÓOG?Jþ<ù`ÉÿvòCø›ü6üŠ|Y^NVfzZJRb|lLTdÄ¥‹áçCÏžÁô0#ø@ðûûúx÷ÝV8;9ØÙZ[Z˜™bîµàËùŸ6ï“?A÷ÿ(äþï$÷¥I1®ùSPæ¿'lþǘù_Pæ›[XÙØÚ;:¹¸ó=½}ü`æoÂ3–ù!ÇA懞™y%:6>!)%5=3 ’¯PªŠŠKÕDå×òYäß%ÈÇ#¿¯%þB|Vâ“à‹ð^‡ö¯Žz±@¦ý‚ôòÿLÉ?BËÿ—ÿþ½{Dòë€_¥TÈe¹þÔ”¤„¸Øè+—#.à=‚?þÝxðoÁïçãå¹z•›«‹“ƒ½­µtÙ’Å´ûC÷çðºÿÊý)’ûÒ¤1÷.}®ù†˜ùÓÐæÏ&Íÿš¿ð«E‹—.[njniecgïèìâºÒÝÃÓÛdþ†<󃘙2ÿò•¨˜¸„ÄäÔôŒ¬œ\™M~A>ùùTä ë_|®÷‚Ú‹gù?ãÚ8øGâϲ_›þç8ýÂò ùûû©ä‡ðù øÛðª +- üÙYi©É‰ q ø/1<ì3øñàîûûz{‚àwuqv´·µ±²07]¾l)pá—_|þÙ§:ÜŸ†¹oˆvÿ]É}iÒÞÑ}=}„ùÆhóçbæϧÌ73·´¶±spt^á¶ÊÝÃËǘ¿Ëü]»‰Ì?†e~øEùQ1±ñ‰É)i™Ù¹yrEª°¸D]VQ É¿Á&¿‡ ˆÿ7­Èâ¢ÅG$¾vࣼiíLJüœü9ö£è§£ŸGþÑQ:ùü}½½8üdòkÁ_ á/S—@øóåy¹Ù™i)I‰ñ±ÑQ‘ øÃÏcÁ”~à> þõký}}¼€ûn+œìl¬,ÍÍ û‹h÷çB÷gk¹oŒv_åþëþï¤I{]ã3_Ÿcþtæ/Xøõ¢%K¿YnfaimkçàäÌ_íéíã·fÌ|`~ ‘ù!xæ_€™—”’šž™“'Ï/PRäWsÈïfïþ}näâ‘ÿ$Ÿ#þs\|v⣟×û×*ý˜.€NûéÇåÿ…-?ø´ˆäïëƒð“ÉàïaÁ_ ᯪ,/+-)*TäËòr²2ÓSS’@ðG_aÿ‘CxðïÜÝÁïçãå¹zpßÉÁÎÖºÿÍÒ%˜ûóu¸?ã¾¾ä¾4iô¸æO¡ÍŸ*Úüy óMÍ,¬¬míù®+¡ù¾þk1ó·íÀ3˜Odþ,óã@槦gdåäÊòÊ¢’Ò²òÊ*H~m]}ù ù2"ÿ1ùÚâó$¾(ïß<ëQ‰¿HúiùŸ#ä'“„Lþ‡ý ùàÉÏ ¿J©È—åæde¤¥&ƒàÁ‚?ŒþÃÀ}<ø·nîûûz÷Wºº89Ø÷-ÌL¡û_/\ÝŸ'Úý©´û\ö%÷¥M¾¡BŸ2߀cþ ]æ/#Íwtæ»{xAó×oÜ´Ë|hþ¡#Dæ‡ã™2?-#3;7O®(P—ªË+ª®V×ä·¢Èï…ä °"_‡øTâ3À¡¾ïÇ ô…ö[ñ/l?ƒ~±òcÉ?Š%?„&o/ü õÿÕªŠruiq‘ª@!ÏËÍÎLOƒÁ‹ÿy2øìÃ݇Á¿~-tßúïÜ·åþ Žû‚î¿î?Pš´W;”ùz‚æÏâ514ßÜÂÊš¿Â šïã·†6?xï~*óÃ8™Ÿ'Ë/P—¨Ë0ò¯×jêIòoqÈïƒä¢#ŸO|:ñÑàëö~‚}¹ Õ_7ýtôÿƒ !?;ù!üÃCƒ0ùûúPð·að×ij¯×\»ZYQ¦.).TäËò@ð§3ƒÿÜY*øƒƒwn'Ü÷óñÂÜwîÛ`î/p– ûz’ûÒ&÷t™oøÒæ[ZÙØaæ¯Z™¿nCÀæ­ÛvìÚMg>0ŸÈü82óer…RUTRZVQyõZÍõšº†Æ¦–Ö6~ò‡XäÓâ?#¾øãå~" ŸÈ+ Ö~áè§äåÊKþ‘‘G?þÈ7„¿ÀßÔX_§¹q½À_^VZR¤R*ä2üXðÇÁJ¹ÿÖÍÖ­ÁÜ_嶸oÜ7‡î/æwÿ®û†„ûú’ûÒ&ùPèëcèæCôùFÆ&&Ðühó?Ô69n¾n¾§·/Òü³çˆÌ¥2_ž_ *,.U—WV]«†ä×765·¶µCò»9ä÷“ä?z42:ªùÏä3Äÿ¯øÂÞ¿1Ô÷Œ~ù¡äg$ÿc,ù!üCø{ üþf-„¿ª¢\]Z\¨*È—ÓÁMÿé“ÇCŽ:°í¾·çjÊ}KsÓåÚîÈqßÄÄغç¾!™ûúûÒ&ëøÍŸJ›?2¦nó­ùN.„ùþk×oÜ´åÛí;ƒ‚÷î?xø豧ÈÌŠ¡3?_¡,,*QÃ̯®¹Q«©ohjnikï€ä÷è&Ÿÿïâ¿`ˆ/ +-ü7{ÄÆŠÿØåg&ÿ˜üþGhøoCø;ü-ÍM õšÚ5 ø+`ðÁŸŽT$'øƒƒwnÿv˦ë×úûî;9ØÙXëvæLÒýi’ûÒ¤½ƒ6_4ß`ìæ»®ä3Ï|`~4;ó‹ŠKËð̯ÕÔ546·´¶wtvòo#ÈÆÉ ÉgGþÅø¯[x¡M(ýÚòÿJʯ•ü:à¿áïð·¶476Ôi°à¯$ƒ_ƒ? þ+ºÝwáw6Êýé”û¤ûz’ûÒ&Ý8èó˜?ÝÈؘÿ>ËüÙhómqóÝ=¼Hó·íص{Ïwû:rü$n~D$žù©é0óådæWa™_WßØÔÒÚÈ¿ È¿s—A~Eþ›|fäãâÿJˆÿOJü³Äÿÿ™{Î^Ú~qò£“Ÿ€ÿ'ÿc>øïøoÝìêlokmnj¬¯Á_}µª¢LÍþÔd<ø#.];wöôÉã!GØ÷ݞݻ˜î»¯t…îÛj»ÿ‘–ûï÷µÜ—r_Úä*ôõ1ô1ó!ú”ù30óú´ù ™ïã·f݆€Í[™æŸ:z>ü"‘ùI)i0óe ó ‰Ì¯™_ßÐÔÜÒÖÞÑuó$ÿ‡?ó’ÿ’OGþ3¡È+þ[Ã={ã¥_—üüP~>ø{ øAðø»üím0øë5µ×k˜ÁŸ ƒ?ºO?ËýÛ¶n€îûxyð¸ÿ æþÂ}À>æþ Ú}Ⱦ!™û’ûÒ&Ó¡¯O†¾!úÀ|#¦ù ô¡ùs0ó?gþÞý=v‚e~2Ìüœ#òµÄÁŸ_üߘ{Õý’›ðw£üŒäÆH~ÿ-øø±àÿáîížî[]m­-Ìà/-)RàÏËÉ‚ÁŸK¸zæÔ‰cG¤Ýß°nŸ(÷ñܧÜ72¢rŸr_r_b_ÚÛ=„ùz¤ù„ùÓ0óM0ógáæÿþ¸ùsŘ¿30(˜4ÿì¹° —""£bâ`ægfç‚ÌW‚ÌW33¿µ­½³ëf7È|Œ|"óµÉÿ™—|1â‹ÿÍa~Â^RèI|ô£åçIþ§BðcÁá¿s»' þ&,ø«ÉàW*@ðgg¦ãÁqéBéþþ½ÁA¢ÜŸ‹»sº? sßÄ„È}Ì}¦ûRîK{ÛÇ1ŸúLó§CóÿÇ~?7qÞqŸ)¸´ Û´%?´Ø:-ß·1æ¾B¹Ï¦†’”’ CHBB!Ü`076Æ÷mY–dI–|ÈÖå +-mgÊa0>0mL t¦ßçÙ]iWÞ•dKÐÁÝÏ ùyfôzÞF¡Oš"‰½2ÿ­wHó?þäÓ ]Ì?™Ÿ“WPT\Z^2_£Õ™ß ™o‡Ìg’É ù,ä;Å¿ë^|Qú ¡÷ýæüŒaÉï ü—ðCð·Ø­s“©‘üü…y9Ù(øÒÝß¼iã†O)÷—¿Ãé~ +-Ý}±Hâpÿ·¿Aîr4ï>¿ÿ‡±„þh*ôÇ`ôæw1_‚ÌŒŽ‰‹OLNa7ÿ7IóW¯!Íß²uÛö»öì;p0ãd~æé3¹ùE8ó•ôÌ·@æ·¢Ìw’‘I~/Aþ¿˜äß&ÈwD¾/â?lÔ³ÌÏôsËÏÿ ü]'‚ÿâ?)øqð·ÚmVüõÎà//+)*€à÷!ø3Ø·g׎íÛ¶îòñÒý·Þäv?>.&:¹/‹BéØCÏýQ<ûüFìXÌE™O…>˜/óƒæ‡bóå4ó§ 6 iþ«°ùŸ}þÅ—”ù釰ùYÙ9¹ù…Å¥eŠ*”ù:GæÛ óÛ‰Ìÿû?ˆÌò;ü.&ùÿ&ÈwùÃÿÁiÿŸ¡mx_âÛQ¼Ÿžü·±üìðw“ð_Áð;ƒ¿£þfZðW)*ÊJŠ óss²³N1Üßòå„û«W‘î¿Áâþšûr†û°ûÁà¾@ÀÌý>÷ùìq†¾Óü±Øü Â|„>6_(–H‘ùQÈü¤”ÔÉØü¹l濇Í_·ž0ÿÛïvîÞ»?ýÐá£ÇOfžÎÎÉ+(*.-¯T(UjFæ· Ì?çÌ| 2ÿd~w·—äÓÅ¿Ç*¾oBGû! +-ïïWÀ—s±ËÏU~–ägƒÿ‚ÿ2~2ø-TðkkÔ*¥¢²¼´¸¨ ÜϸŸuêı#î…Ý_û·û3§ÓÜ@î‹Áý‰N÷Ç#÷È}ZîÐsÿ<ûüFÈ8Cÿ—´ÐÀü`ºù!B‘X* ó£cã’’Áü©nÌÿ›¿ ›¿cקù9y`~y¥B©R×èôc}ƒ©Él±ÊüËWPæwuQäßùž@ô|Oâ æŸ}œïúûY~Žägƒÿ‚ÿ +- ~*ø­s“©¡ÞhÐëjÔ*p¿¼´¸° /'›rßž]Øý͞ݟ +-î''%ÄÅFƒûa2‰XBw?8»?–îþhºû|îó c1ßúó!ôƒ‚°ù€>a~¨H,‘…É#"‘ù‰`~aþü ¹Ì߈Ì߶2ÿøÉÌÓgÀü¢’²òʪj•F««5@曚ÍDæw¸fþ5ÈüîîAä¸'ÿAŠÿ‰÷ñðU~¶Óþ&ü½½=Ýÿ5?{ð›ëë µ:­F¥¬ª,/-)Âîgž¤Üß±¹¿i#rÿC÷.˜?»Ÿî'"÷##äÈ}!v³O¸ˆr¹?¹ïÌýQ|îócýzè#ó!ôÇ;B™/K¤Øü˜¸x0?›?g˜ÿäÓÏ濆Ì_N™¿™¿•0?ýÐá£ØüÜüB0¿BQU­ÖhõµÆ:ÈüfÖÌïD™2¿·‘ßï ù>ˆÏI¾/ÐßóqC|ƒhòsÃÿ= ?ÿõë(øiðŸGÁßÖÚb³Zš›ꌵz­F]]¥¨(÷ósÏœÎr_€ÜçsŸßÈ»ù£éæ'€Ðv˜ÿû?€ù"‰T&ŒBæ'¥¤¦M™6ceþó/bó_g7ï~ºùÅ¥`¾R¥®Ñé ÆúFS“Ùb³·@æŸuÍü.Èüœùý(óùß»’ÿ“gò}Ÿü¡Zï«ñÃz¼¦ß—»üdð÷ßèëëíø»º\ƒÿ,‹Ýf17™ê½¶F]­Dî:ÝOßÝߊÜß@wÿuìþ‹Ï;ÜŸ1mJZjJRb|lLTd¸\&ƒûiîîu¸ÀåþÿúçËßÐç&ôá¿[Â|ý  Âü Øü‰!B‘X* ˆŠ‰Oó'3Íù6ó· ów“æŸÊÊÎÁæ—W‚ùš]­¡Ìo6[möÖ¶vÈüóhä£Ìï¦2ÿ¦#óo!ó=‘ïÞ9ïÅ÷¸î°çú®¿æÿÞÐïÓ•°Ü„øo1à'ƒ¿? þ (øÛÛZí6«¹ÙÔX_gÐëjÔ*¥¢²¼”éþ^ìþ÷—"÷_y™éþdp?¹†ÝÁîûØý prß‘û|îó ó"ô‘ùÈ|2ô‘ù¡"±›æOÂæÏžûèc“æ¿ +-æ/óWp˜™ŸWP„̯ªVi´ºZc]CcS³Åjoi…Ì?Ç–ùùýäÿH‘ÏôÎ_¼ ΠüOßWO€ûýy1>Àßág ~p¿£½µÅfµ4756ÔkuZJY…Ý/ÈËÉÎ:Eº¿›îþjpéþ«„ûO<þØ£sgÏœîO÷ãb££"äa2‰X +-î;rÜÄîÿÚé>Ÿûüþ¹ ý_¡/€Ð&Bÿú!¡B±D&ˆŒŽ‰KHLó§NŸ‰Íâ©g°ù‹Àüe„ù«iæï$Ì?F™_R†ÌWk´úZc}ƒ©Él±Ù[ÚÚ;Pæÿmpæ÷õ!òo’ä òx`ä»ÒæÖ{/¤wïøžçõ#À¿[ø}ºæqÂÃÿ‚€„ÿ&‚¿¯ +-þN +-~pÿü_Áý¶»Õbn25Ôkõà~5r¿¤ˆpÿÄ1ÂýL÷W‚ûËÀýEÈýçžyŠrjÚäIɉ q1Ñ‘à¾T"†† Ü'Ý÷”û¤û|îó{èç1ôÇâÐ +-¢›?1T(’HeòðȨ˜¸x0?5fþs/¼æ/óß^¾b%aþz†ùGhæW(Àü­Þ`¬o45›­6{k[ûY0Ÿ+óoÒ2Ÿ"ÿÎ òYPóQ|WÕ8Áwgýt¿ãiÞ½\úsÑïÇ;òþÛøÉà¿Éüç!øÛÛZí6Ò}ƒ^[£÷+Êœîa¸¿~ÝÚ5„ûo/[ºd1¸ÿÒ Øýùó÷SS’ãcc¢"Ãå2©X$„ÜGîOøvŸÏ}~#kLó9B?B<…>˜*KdaáQ1±ñ‰I)`þ´³æÌ›¿`!6ÿZ´x ˜ÿç+ß_µz‹ùLó•`¾No¨#Íoimë8{2Ì'Èïdf¾“ü[ˆüÛLòïrïkä»zÆ>ö”çBý¶§yñ°óÏF¿¿Ü÷ þ[ø]ƒÿʕˤûÀýŽ¶Ö›ÕÜlj¬¯3èuà¾RÁp?c°ûï¯ü/ûõ\U™Çq|œÕÙÕ¥8£ã +-Éí½å¦@!„Þ{»é½÷ÞI! !„Í ®: cEìŠ:® +-H !=4wvw}±û<§Ü{žsÎM‹;qÎïõ¹oþ3ù<ßäeg¦§÷c¢ ûþ¾Þžîn®.ÎNÀ};=t_!—JDBºOæþ“\îsû=5ô#Cÿq2ôWRB˜ÏŠÄR™B¥ÖêôvkHóýƒ¡ù†„¤Üü’òÊ꺆¦–¶vºùâæúÙß¿8|ä«ã'Nž:34|ndl|b +-˜OÏü¦Ì¿ƒfþý¿hÈÌšÏ>;ös)oõŸçݼo›ÿLûYä·ä¹XOf~³Áÿ)øûÓSãc#熇Μ: Ý? Üÿ”pÿÝýö¶–¦†ºêÊò’¢‚ÜìÌ4ྸhrßq p_§U+2©X$äó¬±ÜÇÝ_¹b–ûOp¹Ïm©i>=ôÿL„>0ÿ©§¡ù«­x|H,‘É•jNokÌ_¿aã¦Í^ÐüÐp`~|RJZfv.Íü^Šù¯8øö»ï“æ…柆æŽMLNMÃÌ7™ÏšùòAÈÿuîn½OÃþËêC|&÷ìÔÏ‹ûÝEÎü[Àâ?Í~ºü–rÑð7Bá7ÿ5<øq÷/]îOŽîÇÜÿ sÿÝ·xâ~oOw'é~YIQ~nvFZJb¼!&2ºïãå±yÓÆ ëûö¶zF­”Ë$b‘€Ï³ÂÜú)Üýå˜û\îs[Ú3ú$CúÀ|kž@(–HåJ•FkÌ_»Ž0ßÇ/˜mˆOLNËÈÊÍ/*)«¬®mhjnkïDÌ7ÿChþç˜ù_óÏ`æŸÇÍÇÈÇÌG3’s Í|D.óäß^s›OŸ®=+õf}ÿéÆö 0ýGìg—ßRî3åŸ~jðßÃÝÿÉü³dð_½àÇÝ¿ÜŸ>{æôɯuôðŸC÷?|sÿUºûÍM µÕe%…ù¹Yiɉñ±ÑÀý ?Òýukìmm´•B.•ˆ„ž5pߘûÀýeË`î?Îå>·¥ºGô ó…æSCÅ +-£ù ô­y|¡H,•)Tj­ÞΘïìâêæî Ì +- ‹ŒŽKLNÍÈÊÉ/,)«¨®­ojnmïìêéíæ?‡˜šÿåá£Ç ùCÐüñ‰Éi`>5óù33XæßbËüß„|VóQò©àÓ´g‘žÕø;´ý¸ð¡?¤¿ ÿ©öSéGà·œû÷ ?-øoÞœÁÿ½)øûçûãF÷îBܸß×ÛÓÕÙÞÚÜTÝ/.ÌÏÉÊHMNŒ÷½=ÝÝ\]œ€ûvz­Z¥IÅ"!Ÿgå>á>—ûÜ–øæ +-ý?¡¿„þ“8úÐ|+_ Kdr¥Z£ÓÛÙ¯qtÂÍ÷öõæGDÅÆ%$§¦gåä—UTÕÖ7.ÄüSÀüs#cãSÀüKTó¯óg1óoCóY2ßÄÕ|äß'Y¨Z(WfÄG¹§SÏTüöŒù°úÏNÿè§d¹£%N8üä!iÁþðà¿Ž?îþeàþ4æþ¹³C§Oaî9·ûõµU¥Å…y9Yé©I q±Qa!þ¾¤ûŽkìmõ:Z)—IÄ"æþ³árŸÛï`0Ðg ý•¦Ð_meÍÅ©\©ÒèllùëÖoظi³‡—¯`phDTŒ!!)5=3'¯ ¸´¢ªš¿µ³k{o_?0ÿyhþ+¤ùŸ@ó=v1ÿ"nþ·Wpó±Ì¿ 3ÿö<™ÿðȧŠÅb¾I|JáSµG¨g8O!ûm?,bÈioâ?“ýFùéð3i‘3Î?{ðß&ƒÿÆ ÄýKÀý©‰ñ1ÂýÇŽAܺÿ·%º‡>iþªÕÖ<¾P$–Ê*µÖFoç°–4ßÇ/ 84<2ÆŸ”’–™WPTZ^US׸¥ukG×ö}ýs˜fhøÜèØøäÔôÌ|"óIóhXææÓ3ÿW–6µ(ù,¡oŽ|øíQêÊSø¾‰nv£~Ïx¨E£ýˆüÿfùßÉ’î3ä§Ãÿ+~¶à¿…ÿÌ æ>?æþÅ ÓS“Ðýá¡3&÷?¡»?Ðß·c{Wt¿®¦²¼´¨ 7;3-%1Þà烹ï Üw°ÓÛhÕ*…L* ù<,÷ŸìC÷—/çrŸÛÒ3ôÿ€„þôÐ_BŸC_&Wª5:½}'gW7wOo¿€ °ÈèØøÄä´ŒìÜü¢’òÊšº†--[;¶‘æ¿ÍÍœù“Sç¡ù óqó¯]æÏ’æ/.ó-I>Kè³f)N> ¾Ñ{Šö(õtäM†Ï »±€Q>§¿ÔÕŸJ?)ÿ/¬—µ,ûæá_HðÃ3bîÏB÷Áor”Ýý× û/îoëØÚ²¥¡®º²¬¤(?7+#-91>6:2,$(ÀÏÛÓÝÍÕÅÙÉä¾^§Q+å2‰X(àƒÜ_eÌý•\îs[z[|è[YóB‘D*W¨4Z[`> }h¾¯`HXDTl\BrjFVN~aIYeu]CSK[Ƕî;ûù/Aóß ™5ÿŠùÀ2 ðj¾Ì¸äSŒ2g>‹øFïÚS©G™gè~ÙµŒò9í! ¼FþIûiôß3^—y^úi-wÔùág?¼&î>ü¸ûÿ€îŸŸšœ0ãþÐý—€ûƒý;wtoëhkij¨­®(+)ÌÏÉÊHMNˆ‹Š ô÷õö¹¿ä>pßF«Q)äR Ì}k,÷ ÷¹Üç¶Ô¶¸Ð毶âñ"±T¦Pªµ6z;‡µÐüM›=¼|üƒC#¢b I©é™9y…ÅeÕµõMÍmíÐü]ƒ{€ùû ùo¾eÆüi`þeÄ|Ì|Ìüù3ÿ¡‘Ï@ߦÀÈ??Å~D~æ)~(‡e…ßLðîÿˆ¹’êþ7¨û'÷ßzº¿¸¿gp`×ΞîmímÍMõµU¥Å…y9™é©I †˜¨ðÐà@?/à¾3pßÁN¯Óª• +-™T,ÂsÿÙEæþÿû/7|¬æ?:Gè¯ÆB_,‘É•*NoBßÉÙÅ„¾_@PhxdŒ!>)%-3;¯ ¸´¢ª¦¾±¹µ½³»gç®Ýƒ{öó÷cæ¿óÞ‡>FÌÇÌ¿„›å*aþ,f>pé2ß2±¢O‚„zD6>>á=©½Ñz*ôò„ÞWÉ]A÷-ûЈŸRßÓ @òOào²Ÿ*ÿÏŒCÓzߢÇ}€à‡×e¸¸?ÍtÿãC¼÷æþ~àþÞ=ƒ»wõötw¶·67Ö×T•—äeg¦¥$Æ¢#ÃC‚ü¼=ÝÝ\]œAîëu•R.“ˆ…žµ—ûÜ–äÌ„þc¬¡ÿ }k_B_®Pзµ_ƒ…>0ßÛ×?($,":6>19-#;· ¨´¼²¦®qKëÖήžÞ]»ÿºgïß^Ü·ÿeÂüæ2Ï|Òü[¨ùH‚þVäÓÑ7bÄB">>Á=©½QzªóTã˜ÿ˸.lÆï©é ý'ô'ðÇíÇè'å¿ËòÀ>Dö¿Ùà¿?¸/æ>€wÿáþêþG„û/ïß÷âÿدï 6ï;Žã×k.½öüoÓKb;‰Ëvz„ä wÏçïçÑÒÝëûV{kKc½RQU^ZT›™.MIŒ—DG†…ø }øn<';û[aîoX·vµ¥Êý—.¹ÿ;.÷¹-¬ý·õ†þ» ô—’з„¡¿™¿c—µ­½ÏÕï-ôó +-‹ˆ’Ä%&Ke™òÜü¢’òJ…²®±˜ßÝÛ?8lÒü¿cóŸBóŸ#ó!D/I~Ê|ä¿.óõ ¯kþw˜¡—D|6ø˜{ª=¥^ã<Ûxâ÷²¿iï¯ú§ý~“u˜@ýÇúcü)ýH~Úü üúÜŸ öMÁ¯/ø÷ÿ£qŸ¿I÷‡û{»;ÛUÍuJEeyIQ~®4ˆÉüW¦2ŽÈ7€>C#з,ò‘ø,ï±ö{J½Æy¶ñ„ò¿Ðýy6#ï°®sÈ üSü5ô3òc÷§}íäÐÎûÓá7ü¯ø‰ûÏûϨû_êsÿÜêþžQྺ»³MÕÜPWS]YVR˜Ÿ#Ï¥&'ÄÅD…‡ŠE¾/O7gG;›Ý;·oÛ²yÓ'0÷­,ÌV­Xs1Ìýw¸Üç¶P¦…¾vèÿÊ`è´lÅJ3sËÕk™Ðßmcçàäâæáå#ˆCÂ#cb’RÓ2²rò +-‹Ë*ªkjšTmÝê>hþ¾ÈüSg ùÆÍþ~þ˘?ËÌ}F_Û|R˜|F|â=Öž`O©§Î³ŒÇr?ÆûÝg>òþÍ '€øÏèOì‡ô?ƒôcù5ð³¾zæØÎ%û&à7üèÖ‚ïݨûÈýSÈýû€û}êîŽ6USCmMUEYqa^vVzZJR|ltdXˆ8@$ôá{¸ñœì`îoý çþjKs3&÷ß5™ûûÜ~›uè¿¿xÉ(ôÍ-¬Ö|¼‡þŽ]Ö¶öNòþæÀðOñGöCú©ü°ùøõ¹O¾û¹cßüºÁÿýô“KÝÿÚ¤ûã'Ž9Ýèëéêhmiª¯UT•—äfg¦KSã%ÑaÁAþ~o¾»+ÏÑÞÖz“ûk¬,̹Üç¶À¦ƒ¾ÉÐ_BBß„þº Ÿ€Ð߶}'}GgwO/¯`phD”$.1Y*Ë”çæ•”W*”õ-­í]=½C#cló/#óo5Å&6ç%jÞ3Ÿ­ }ÄŽ¶ùZä3⣾‡Þcîì õlæY¾ÿï>Þ=fwŒ>C^BÀÜr°ÿˆ‚?±ŸÐOåÇð£à׸~&÷µ¾÷¹úÆÿûì~7÷oߺyýÚÄe¶ûc#C½=]í­ÍõJEeyIQ~®|7ž“ÈýŸÃÜ߸þc”û+AîÀå>·0è› ýUfV(ô7mÞBßÚÖÞ‘çêÎ÷øù‡EDKâ“RÒÒ³²ó +-ŠË*ªkêšTmÝêþÁa`þÁÃGOŒŸ<}öüLÍiÈüù%ß$úßj"ó9Âjó¯¾Ââcð±÷ˆ{„=¶^=ƒ¼†÷I´›h7˜]72ú ~¾Í|ÿ‰þh?¡ŸÊ“Ÿ?ë·˜oöMÃÏvÿ³uÿüÙÓ'Ç= ÝìWww¶©šjkª*J‹ ò²³Ò¥)‰ñ’舰à ?·§»«³£=ÌýmÐý \îs[HÓBÿ'‡þn;g7O/¯(P%‰KL–Ê2³s ŠJË«µõM-mÝê¾ÁáÑ=Ðüã_`ó¯\½~srvæOMQkæß|cèk !æ#òÿ‰"‹À‡Þ3ÜSìõzª<#uWG[KS}­¢ª¼´(?Wž)“&'ÆÅD…‡ŠE¾>^n.Nv6 ÷·~öéïQî[ÂÜ_f*÷ßÂîsìs{S3úý†þ.úN¹ø  @ø‡úcüAøú¡ü°ù ü÷_¼À§ø ±o2øõºOnñt÷÷oM޸ܿpîÌ©ñÇŽ÷ÇF†ú{{:ÛUÍ u5ÕeÅyÙYéi)‰ñ’èˆÐà@_—§›‹3ÈýÝsÿ·º¹ÿ6É}Ž}nof¿ÐB_'ôú‹ +-ý54ôw€Ðwpâ¹yxùøŠÅ¡áQ1q‰ÉRYfvnAQiEUMmC“ª­³[Ý?82¶wÿAùÀü[wîó!óŸ4ÿâ…š¯›ùÚæÏ™7 9úм0¡O;áÌäÃƇâCð‘÷{¨=žRœ'ÌSá!àgÐN£Â;izäIô|_|Ð@þSýþÀ~Bÿƒ‡@~œü~m÷á_0øË€clý¹ÿŒ?rÿ{ãî?Aî?îßEîOhÜ?¸ïØð`¿º»£MÕÔP«¨*/-*È•gÊ¤É q1Qá!â‘ЇïáÊs¹¿Ëtî/ZDØ×É}Ž}nó8Ðÿ% }ˆ>0ÿ70ô)ú ôßÓúÛAèÛ;:»ºó½…~A!a‘ѱ I©² yN~QIy¥BYßÔÒÖÑ¥îæ>z™ñ20ÿæÿÙ¯Ï種3Žã“À˜äLf’1(ÆŽÛ_ã8™Ä˜:˜bªPï½÷Þ{ïZI«²êZíª!!Ô*¨"dìlãÆ yžsÎ-Û„IŠû{©½WoÎÌç|/š?…æÏé6ÿÛgš¯§Ìq³úËWâ ‘âCácßï9íIÕ£õTzê<3žã½ ×J¦¤SkQ›ð {_Ã@/zýgüSüÁ~¤ª|båGøUÝGöñxt³¯ÇƒP…_—ûìp´»?‡îO¡ûÃà~ßåKè¾BÞÔP'«ª(“äeg¦¥$ÆÇD…‡ùûz¹»:ÙÛZY˜=}òøÑÃöíÙµrÿÏ|5÷ƒ¹¿Ý_aÈ}Önè/gès¡¿JúÆkMÖi„þúÛ¶ïÜCBÿ䩳çÍ-mì]Ü=}üCÂ"câ“Ó2²s Š$eÒ*Ym=˜ßÚÞÙu Ì™¿ð¼æë=ól8aÔÐHÑ×b>#ŸŠ}Þî{©öh='=už!Ïx'˜ËqÍdMlºÇ=BžÇ7Ù}@/v ÿ‚þÌ~B?'¿¿ªû÷Reÿ‰ +-ûú9 mÁÿî/÷á|¦&ÆÇF‡‡Ñý®ÎöV…¼±¾VV)-+)ÊÏÍÎHKNˆ‹Ž ôóñtsq´³±4?æÔ‰cGíß»{çvÈýŹÿ—ûÆ4÷Kr•8÷—S÷ ì¦Ç© Ï‡>‡> }}ú¦úo +-¡¿Bÿ£wìf¡æÜ k;g7o¿€àЈèØ„¤ÔŒ¬ÜüÂ’Rieum}cs 5¿·ÌŸ˜š¾> ¢`Iê4ÿ;4ÿ‡—Âüç@Ÿ3_…| +-z/Ò­gÒSçò xT¼WOVGW+¬F4á¯ì9|_fw¹È €þ#ÿLÀì‡îïä'ð«»ÿ²°ÿóÜÿÝÿN§ûxJóèþ4º?î÷÷÷•-Íõ5Õ•å¥%…ù9Yé©I ±Q¡Á¾Þ®Î¶ÖfçNzü“Ã÷ý}׎!÷ÿÄåþ»$÷7m4%¹ÿ—û¯ÒÜçØç¾}Ãô0Ð_ÆBÿqè#ú*¡ÿ„þ{4ô߇ÐÿÛ¶í»öì=pè(†¾™¹•­½“«»—¯PhxTL|RJzfN^a±¤¼¢º¦®¡¹EÙÖq±»Ì¿rudìš6ó¿ÔeþÚÌ×/ùOÕÔ'®ˆÐ§žˆ5¡æ‹ÉGñ øà=pÏiØ#õôLy&<çº W«âV©kÜäq|]ä W»ÿDÀí'ôSù)ü4øo°“ºÇÝÎôœÄìÓÓÑ£úOµÃ¯âþºÜÿRtRðAFjâÚØÈÕ+à~O÷ÅŽ6eKSC]MUE¹¤¸ /'3-%1>&*<$ÈßÇËÝÅÉÞÆÊüüÙS'=t`ïžÛ·‰sÿµÜ'ì‹sÿ–ûË ¹o˜¾¦¾JèÿZ#ôM ô7‘ÐW=ô÷<òÉ }Kk;Gg7O¿À°Èè¸Ää´ŒìÜ‚"IYE•¬®¡I® æ÷ €ù£`ÉôÌì Vbó,bþ“%5ÿYè«„>˜?ÏÌgäSñ±ð»‰÷À=ѱç©'ÐSåñî0)®œ®LX©Ê„¿Óñ|™ÞôÀ€úüý´¿“Èå§ðcð3÷oû˜ûÿr©Ù×íþ“EÜ rŸ|•÷g¦''®‚û}ÄýV…¼©¡VV%-“äfg¤%'ÄEG†úy{º9;ØY[\8wæÓ$÷wkæþ’û&k׬rßȈ±¿‚±¿ÜÀ¾aú™ +-ú*¡¿Í_ɇþï~¡¿FýwÔCßÃGŸ<}ÖÌÂÊÖÁÉÕÃË7 (4"*6!)5=+7¿°¤TZ)«­o”+ZÛ;».]ó‡†G¯ON!#ó·nƒù”‘/3ÿ§—À|‘ú"ô¿WG_-Ñ|¬|F>¿ƒxÜSí{´¥§ÎóÈ3ÞQs ®WÌV´ØØ3ä|“ÞôÀ+/žÐðÇðúyù)üüÔýYîÀà’Vgÿ{ƾþÕ–û?-æþàþ?ð’^ —ôõ<¯Ñá!pÿò¥®ÎöVEsc}mu¥´´¤0?'+=5)>6*"4(À×ËÝÕÉÞÖÊÜL-÷?PÍýÖ¯3Yc¼šcs%ºOÙç¾}Ã^à4BŸCŸ }‚> ýÕ\èoÑý,ôO9ÁÒÆÎÑÅÝÓÇ?0$<2&>1%=3'¯°¸´¼¢º¦®±¹EIÍïóÇÔÍÿ'׎ È7?Çü¥ _#õ9ô‹Ñ‡vüœ„þÜÍYfÈ"‚äóâøè=pÚsØSê9ç©òTx4¼V€Ë'Ëã–«cÜïäi|Þ§W¹ð@ÿÿ ?àOìúyùþþÁ!ø6C÷¯ÏÞœ›¿}Î ŽLÌþã¥e_+ü‹»ÿ ï>æ>û8›cîûƒýp`]mʖ憺šêŠrIqA^vfZJb\LdXH Ÿ§›‹£å…ó˜ûGîÇÜÿHœûo ¹o,ÎýUj¹¿Ìû†½èi OÌçÐ'¡Ï£¡¿vÝú 7¿. +-ý?ª…þ93 k[gWo¿€à°ˆè¸„ä´ŒìÜ‚"IYE•¬®¡I®lë¸ØÝÓÛ€Œ]c~Ü"~æߦùK˜ù-âÔçÑHÑGA>»·pç6†þÌ41ÿ*šOÉçÅo¢Þ÷"ì‘z„ž:O”gÀ#ã9°l\Y&· ­ã~%Ïâ[ð6½ È%€7úÏóúcú× ý¼üþÞ>ê¾ð}vgŽ N²ÿP`ŸœÕ’¨¿Hð/æþ}M÷ñûl>Ï®^÷{º/v´)äM µ²*i™¤¨ 7;#59!6:"48À×ÛÃÕÉÁÖÊÂììé“ÇIîïÒÌý×Iî¯]c,°OsÿWª¹o`ß°8ôE¡èó¡è“Ð7^k²Ît ý·¹Ð_úÇ0ôÍ-mì!ô½|üƒBãbã“RÓ³rò KJ¥•²ÚúF¹¢•†þÀÄcb’kÆ…ÿÙ|=ª¢=õJÈ× ýÏý[ó<}½=— ò|N|ŸxÚöÔz”žÄ‡þJ@ÿU}ý5$ô7oyój¡¿CúV6öNú¾úQ± I©Y¹E’2i•¬®¡I®lë6z¡‡GÇÆ'Q›óÈƽϘùÿFóÁŽ‡/µùÚSÿ1¦>¢ä`è×g¦X-öóÛÛ” +-yscŸ_‚qÚöh=RO¤Gç©ò”x&{,.MÅí?ì×ipUõÇñQÔÑúBInö•}GÙBØZp@…[¬¶X´RA‘]a $!d_ÈB6²ö]Šv:6CÉÍrIز€Ø^ ý=Ïÿÿ?çÞ$‚ˆWç>/ï=çÕ3óy¾g}«Qÿðsü +-^×€¯]:ÒðÏøÇýR~$N.ŠŸƒ_¸ÿï¯pµ‹ŠÏƒý +-É>¶×(ا½=îØ×·ôCÝÿF¹_Ïî#÷éhWi¸Úô¥F <~ôð}ùyÙ»3RSb£#ÂB·mÙðÙªåŸ~,rÿmóÜãï7\Ïý.*÷‘ûŠ}ä¾Æ¾tÿI[îÛæ§ ôÍBŸÐ§ÐoO¡ß±‡~gGƒBßÃËÇ·uè¿júKúk֮߸ekHXxTL|brjzfvîž}!ôa>È((d‘Š&˜Ð¯­£Ðoüæ÷8Íoúwdê ô¯[ þ\¥"È Ttè°ÿàúSûÃ~I?ä'ø³sòð­F;T‡¹Î’}þLcöyq"öŸú–î÷î×ÕQîÃ}>ÖŒ¥ÎãpÒáæÜ?rèÀÞ=¹Ù™é»’wÆÇD…oÙºyãúµ«Wê¹ÿåþ äþ$Êý"÷ûôBîûzËÜû”û:Rî·çÜ'öŸ±±o›ŸmZ†¾BŸCèÛ۫Сopvqs÷ôö¡ÐïÝ—C¸Ÿÿú³´Ð_„Ð_Ðß°)(8tGdtÜΤ]i™Y9ãàác'>×2ñÜù’R#À0]dó9ôFÓ/ÁüïI}‚C¢_{õŠŽþךèD˜ÌÏÚMä“ø|xî {e=QOÐ æÙxé;Y¾³Šf%Ï +-5Ë[ú‡Ÿ£7èUq ø +-Ð  Àþƒè,íˆdùÑü€?#3 §{¯¸ÝbìÓÝìÓú¬#öïý÷›„ûµÂý‹&Úbi‰¼Ýb¼Fl1#-%)!.:bG趠MëdîÐ:÷GRîìß·wOä¾—§»›‹³ÁÑÙÿ å¾½=³/s_°oéþãöÂ6¿‚i‰þSæèÛý}„¾ƒ£“³«›‡—7B¿G¯>ýPè5zì„IýZè¿Ð_ŠÐ@èo ‹ˆŠOLIÍØ—¿ïÀᣪÏ‹â’RhQi¢JÔÌoli~óÍ ŽÜ³T_¦þm•ú ƒÑ¯±Dÿô©“ºù™éi»R’âY|€/¼'í5ë…ôŠy6^úN–/Ã|J³”ç5·õ?GoЫâð  üÿŒ _ÊOð'§¤RðçòùÖV©³_Ãìc‰*öo[EìëÛºûÍšû·„ûºû5ÕM•Ʋ %Å´Iþf£U:°/?7{wzjrb|lTxXÈÖ-Èý5Èý%Èý÷DîÏ–¹?–sÿ¥ôëÓ«‡È}7Wg'Gä¾b¹oggcß6?ã<ÑúOKô)ôÛë¡ÿBgGƒ“‹«»§B¿{ÏÞ}û„Ðé?fÜÄÉS§Y„þb„þj„þæ àí;"c(ôÓ3³ … Ä/E —\(3VT" a>g"ĸ%Í¿mµæ·‘úÍÍ +-ý¦Æ†úÚkÐBG_HqâØ’‚ÍOMIfòÑø,>ïI{Íz!½bž—¾“åK0‹i>âù‡šE­FýÃÏÑôª¸|èˆ@üCÂöKú!?ß°3 îg°ûj›tÁuö/_¹V[ß@[ìcÖûúÂîëþmÝý›üÁÖ ÜGîã£Ý?_\tVûlÃ6qÁ±Ì´]I;ãb"wlÚ´¹¿¹¿HæþÊýiS'Oǹ?xç~÷®È}wW'ƒcgÎýN)÷Ûsî ö¥ûìÛÜ·Í£Œúíú2ô¾½Ž>BßàìâæîéíÛ¥‡þ‹/ 6ÂO ýÙ2ôRè/GèŠÐŽMàÐÏÉuøù?¿€ùÿ9s¶N”Ë+«L0ÿ2b=…~Ó-ÍWè[—ù÷K}⢾VÔ úg}b‚B_šŸ´3>.&‘OâKðá=¸'ì…õBzÅ</}'Ë?Äüæž÷Õ,l5ê~ŽÞ WÅ5à+@'@âú3þ‚~’?$ðGEÇƳû™Y9yùj¡:ûøj«¹|õZ]=-ÒÚbÿÞ}Ýgö5÷¿e÷o°ûõ´Ê+侩ª²ÜXZrþ\ÑYì“Ü_nùyÙ»3RSb£"ÂB¶!÷ûKUîÏ“¹?eÒø±£ýF "s¿[_oOw7grÿy•ûööÌ~ëÜ·±o›GŸ–¡o¾Ðï ÑGè;œœ]Ý=¼||»ÊÐüòð‘£dèÏœõÆ„þ;úQ诡¿3¡Ÿ›¿ïÀ¡£ÇOž:ÍiX$JJ)Á™/B¿‘͇ßZ¿ùfê·‘ú×êjˆÕ +-}*}´!Œ@èç²0?6: +-•ŠÆ‡ø >¼'î {a½^1ÏÆKßÉò¿Ñ¼‡Y æ¯jþÒbÔïâ1zƒÞ×€¯qˆè¿ŒÒöƒ~’óÀ¿=,å>ܯÆǧ[iI16Z >ÞN§·=¹Ù™é»’UîoFÜÿr>çþÌßM{…rÔÈá/k¹ïëíåáæêìdp@îKö‘ûvvm±ÿ¤}Û<â´DŸÍèSè·×Cÿ…Î2ô½|ôÐ:ÂÏìøIS^Ρ?O ýe2ôC9ô“RÒ2²röìÝèȱ"ô +-¿.*.¹Pf¬¨¬ºX]cf~“2ŸÑ·nó% wÍÕ×S¿¡¾öÚ(QUaÔÑ' öï݃ÐO0?2”Ë+«LÕ}e~#Ì¿ùË1_Oý»ý;ZꃉºkW/×úCsôóó8ôâÈüÐà­A›A>ŸÄ—Þ/&í½ ž gçòBxûŸhþHó–˜yÚüAí'ñ?Nï‰sÀg€O]øOú#þa?…?Ë¿j5ÿiKжv?!‘7›—¿ÿ ³½âû­¤”دÁJûZìß‘ìßµ†Ø¿÷î߼ɹ/Ü¿|©¦ÚTUQŽ­â–Ÿ=£r_~ÂqîÇÇD†ËÜ_e‘û¯Ïšù[äþ„q£G†ÜЯO¯Ýûžn.ÎG‡Î:ûöfì?Ýû6÷móðc~;}˜ÿìsv@¿ƒD¡ï`prvu÷ðòú={÷í?pСÃýüÇŒŸ8eêô¯Í~s.…þ‚V¡gú§N úçŠKJËÊ+ªLa>B¿®žCŸÍ¿¥™ß¬™o†¾õ˜ßVê7·L}SeyYIqQaDÿà~†¨2˦ ëÖ®YÆ'ñ üEàÚ3öD½„^0/Œ—º“迧™K3GΛß;â~˜ÞAœ:tØèú_û™~’ŸáX¸qsÐ6êý˜8ÊýLt°ŒÙ/(Ä\Yy¥©eì7[YìßkÃ}}á~³æþ-ºâ7Dî×Qî_ª¹hª¬(/Ã5Ç7rî#÷åWr?‰s?¹¿^Ïýw‘ûsß ÜŸ:eâø1þ~Ç4°?r¿{W_/wWg'ƒr_²Ü·³{îY=÷ÛI÷mìÛæÇNËÐÿ?ûuõyp|bÚT01m]ñ¹ïû¾oEQðÂ[£ÕV«ihM“ØèhªVcŒŠ¢ˆ¨\"ײ˲À.‡Ñ ¶U§qÚçyÞßï· 5igÄ™}þÜý½½3ŸçûEŸ}C#‘BßRbck7‰BßÞÁÉÕÝÓÇ/08,":.B>…þÊ¡ÿáGù¤Ð/»^^Y]S[ß •ÉÊÖv•º³‹Ìg¡ßÓ eH¡æ?ÑnþóQdþõ‡¤þ}>õ• +-¹´¡¶¦ª‚Gÿä tB¿ðdþÎPùù >þòeö¨=YOÒsÎ3ä9à‘ñ˜dœ$6‰ü$ þö!žÁô +-Ø`üþAÄ)£äçàßþ.º¿ï½÷ ÿ„¹;ßqXûU5µ R¸Z>öïû/ûî¸ÿ\»ûOÈ}Ì}¸Òæþ=t¿»«S­‚ÜWÈeÒ†:p¿Wúåâ çð!wì3-¹Ÿ‡¹??=-9!.:",8ÐÏÇÓÝÕÉÁžå¾­µÄÒÜÌD,ö!÷ ÆcîÃþûºùA3}2Ÿ¡¯§§?®úFÆ"@ßJbƒ¡?CßÑÙÍÃË×?($<*&>1B?k …þz!ô ¹Ð?qòô™³EAúu MrEKk›JÝÑ¡/˜ßÛυþ3ýÑjþPõ¦þ]JýÖ–æ¦ÆºšêŠëeúÇ?;rèàÇþñƒý¿ßËÌߺÈ/Xâø9Ä}aϨç gÊsÄs²ÇãÄÑIJ‰i¸oè{<ɶ-ܸˆПð_ŒôƒüÐüÿ&æþîßíÛϯudj–zEuM]cSsK+Åþ]­±?ŠÔÉ}bÿ™ûœûx÷!÷»:Ô”ûò¦Æ†º[7!÷¯]…Ü/&÷ VaîgeBî'ÆÇD†‡ùûzy¸9cîûû6+ 3S±ÈØÙŸ`@ìÓ×ÓãØçÜ×±¯›:ZÑçB_CŸCBßXlbjniemkèO>BßÅÝÓÛ/ 84":6!95B?;7Bÿ-¡þBqI)úM²æe[»ª£³›B̧Ðïë{ÕÌÿ·àÅw¼úOP}Jý\ê·)2iý­›•7Ê®\¾ÈÐçKpßžß’ù›6¬_ äçç¡øK˜÷™¨=bŸÆIOÎ3å9àñh˜(œH6ü„kþ?ö)žÂã´ +-hЀ@ü#þÌ~”šà_]°nýFtçoöì…Ü?ðÑ'Ÿrì_„·ÜÊ›·ê¥2…²‹ýû¨þ^ýï„{|Ù·GóÂî?†ºìã+îÎW·»:;Tí­JE³LÚXÏr¿¬t¸Üß¼s?7{ä~jRBltDhp€Ÿ·§›‹“Ãì™Ó§¾ ìÛZ[Yš›šˆ ößØCǾnþ§y­?ú¯B__ŸB¼†¾¡‘Hlbfa)±±µ›4yÊ´³ìœ]=¼|üCÂ"câSÒ221ôóWPèïÄÐÿ€Bÿ(…þ¹"A}© C¿]¥îìêFó¹Ðï?~µÌ >¡ÿŒKý>Jý¯1õÛ[[äM µ5Uå×J5èòç…»wý;ú‚ÕPùËr¡ñA|?#Ë°gÔ“ôä÷{x÷!÷»;;ÔímÊ–fY“&÷KŠ/œ”û»Yî¯]M¹¿`ÞÜÔ¤øبðÐ _/7gÇ9ûS&CîÛH¬,ÌLÅ"cdŸË}ûºù?LóÇðæ èÓ ohd,215·´²¶µcèÛ;8¹¸{úø‡EDÇ%$Cè/\œ³ŒB H0Lè—WV×ÔÖSè+!ô;:»ncèƒùú}}d¾úœùÿÝækQŸKýÞG…ÔWÈ¥ µ7+o”]¹táÜ™S€ ý}{@‚m[6­_Kæç@å/Èœ—â#øÄ=hÖsÒ3ç9äyÞÑs_6ÞÂx áö!â¶ÛÜÿAÀÒ?éOJ†æøf-ÎF÷W¬Û¸…6<Çþ‘¿ûç.\ºRv£òfmƒT®bÿá#|ÅáÍŽ^õ‡qHî“û}}”ûø–» îwuv¨Ú[• +-¹Œr¿z¤Üß²‘r?gñÂùiÉ qÑaÁ~Þžî.Nö3§O}Ø·µ¶²075jا¯§§aÿGûctìëæ…G+úoúc ý7Jècè‰Ä&fæ–@Òä)Óf̲wtvõðòñ +- Œ‰OL™ ¡¿déò«)ôwìÚ¡`pèßÀЯkhl’7·´¶©Ôúw„ÐïE÷3ÄÐÙ> ž "«©,p©¯f©_SU~­ôòÅó_~þ·cGЇü[·f3!‘âøä=pOØõ½FyžwâÜǃ»fÜæö)žâ¶[´Ðàð‡ö'ûQ~„?=cþr?Ÿv[·Ã}ûÛ>sþâåÒkåU5,öÕ\ì?êÁ•Ž±K—: +-ÕïᄊÜ׸ÿ—z/ŸûwïÜîîê—ûà~•–Ü/ÄÜß…;ÈýË—.É‚ÜOIŒ‰  ô÷ñòpuv°Ÿ5cڔɓìl­%–æf&b`ÿ?gìcî ìÿXǾn¾ÿ ƒþO}}} +-ýño!úÆ"±©™…¥Äf" ýÙs]Ü<¼}‚B#¢b’RÓçcèç­\퇡ÏÚïã¿>Ò/ô¯³Ðo”ÊšʶvuGg7„>o>„þ·ú/dþh”bˆúƒ|C©¯jm‘Kë1õ¯–=}òøÑà¡¿cûÖM€ÀʼeÌüô´Ôä$hü½õ$=ƒž!/øNœ»Ò¸°qÆiàhþ`Ò!~Р @ õüÉþðˆ(h~‚.s?Ö<¼íxöaË>zìäé/‹ŠK®bì×Kå-­*Šýo<„~Ôמû÷Ÿrîcîƒû=œûýs¿r¿¾¶¦ºsÿ2ËýãBîÃSî¯[³2/7r?=5)!6*<4(À×ÛÃÍÅqÎì™Óý_N´‘XZ˜™ŠEÆÀþÏÞ2O¹¯¯¯7V“û:öuó}æµþè¿>}=}ƒ ˆ¾‘±ÈÄÔÜÂÊšGßÞÁÉÅÝÓÇ/08,2:.19-#3‹BŸ`ï{ïŸbèŸú +->ô¿Âпÿ€B¿¯ÌÐuÌ >Ú€AøÏ` >zxŸ¥~»&õ/ý‡ýúŒªêÊ8¾F×$Q“QG¥÷ªˆÒ«Ò{ï EPƒÑHP°AP¤)ˆ€4é  ¨€ £FŒ‰FŠÒ{S‘jV–Æ™5³Ï9÷Ý÷(OÌ'a­·¿¾{?w~ûoT])+)ÊÏÎLOI¢Ð?´?Êïb¾;T>D>ÀGÞìõDzÂ<ƒxZvu2jdTgò~…± ÈÀ€øô'öý–ÐüöNΛˆûðu·; :tXô)é™ÙùE%eWªnT3b¿©¥ÄþÐðú–Cê¿}÷fŸ>ÓO}~SfV÷©Ü÷ÇÇYr¿¿·§»³£­µ¹éyC]-ÊýÖÜ/$¹Ÿ”€szÊ}_o·MNö6Væ¦FºÚ4ÔTå×ËÊûâ¢ÂBü¼<܈ýåËff!+û÷9Ã~>ŒþýU\Ü<|ü‚B"¢â’ÒkÖ®“SPRQ×ܨ£ghlfamçàìêî¹eë×ß|KB?,<2‡~Æl¡ß¡?Èý1Âó)ôç…ùÿeQ§þÄøè¤þ`?¤~[óó†Z*õ¯U”—äde¤&%Ðè@èoߊÍwqrDäcñ|Ä=ÒY¥'ÎSÊ3}WÁ£ŒG‰Å™‡þ<Þd첨€ô'öý&¦~;{Gìþ_øÀ#çìÇœLHJÍÈÊ)(.-¯¸FÅ~mCcsÄ>¨ÿêõÈ(Zì8öiõçbìÿû4ûL÷ß ÕN»¹ßÛÝÕÙÞÆ’û¹_Žr?7;3#ç~dxXhðœû_oÝâéîêì`kmafl §³QSMEIAr_ZR\TDHŸ‡›‹Éþ’Å‹qØçÌßVó0Ìg¢ÿåW}}.n^>Aa1 )„¾¼¢²ªú-}CsK;G·Í^>pùéæ‹ŠK@¡Ÿ•“_8=ôëqè·£ÐïC¡ȮПÀ¡?Åü™ÑÿÔ"Ì0“ÕÇPltxèÕ‹¾žÎöÖ&ÖÔ¿t±0ïüÙ´äÓqpû}tùwúmóõöDæ;ØÙZ[Y˜ñõõ÷H{d=-=¥<-<¦\6ŸBÿ_K—.û7BŸ‡—_@HXT\BjµŒìzyE5 ÚºF¦æV¶öNpõ½}·ïØå¿'è@p(ýøÓÉ©ú¹Å/•_­œúÍŒÐ`†þø86ŸFž™ÏNýñ±‘á¡—ƒý½Ým-$õïâÔ/)ÎÏÎL?“WŸŸ—‡Û&gd¾¥¹Å×FÞ#î‰õDzÂ"šä~Ðÿ];¶ûz{¸or²·µ2752ÐÕÞ ¡¦¬(¿^Vfµ”„˜(fŸØ_±|ÙRœûˆý/€ýÏ8ìsæcçCè/&è/[ŽÐçÆ苈ŠKJ¯‘‘•SPRQÓܨ£ghlfamçàÌrï†>CÿLÚÙ¬œ¼Â %8ôoMý.ú/™¡ÿæ ‹ùú3š?7} ÕG, o‘ú€ÁèÈk¬~WGkóóú§ÕÜ¿s›¤~nVFjÒ©Ña¡Ð{ý-ž›]]í‘ù¦&F†ˆ|- >x¯Š°ÇÖèÌÓÂËeȬ¡g5û¡Ÿ!ï0Vµð@ü#üQù«#ù1üüØ}GgWwO´óáø÷ +- ‹ˆ>q*)5#+Å~ÕÛwî×ql”rr¿MîWU\.+¹P˜—u6íLâ)œû‡CîÛK¿»+¬|k Sc=íšj*J +-ˆ}iIqQa!~^n`Ÿä>°¿±ÿ9‡}Î|ì°G…>}.n>~A!1 @í:9eUuM-}C3K{G7/Ÿm~;wî‡Ø;v<ú +-ýôsçs Š˜¡ +-ý6¡?A…þ$óßÏ#óYÕÕþ ê¿z1Ð×ÓÕÞÚô¬î÷ß~yp÷Ç[×+ÊK!õÏ¥%ŸŽ‹9~ìpðÀê֣з±BæèòA|Uä=Ò[O¤g0OOI.GŠ9’ì‡~†¼Dojà€ôü¡üqõcøutÁ}SsKk[êS¶~àþàÃGÇÄ%$§ƒØ/-¯¸~ëÇ»~ØÖÔÚÞÕÓ7ðâÕë‘QôQ‡Nyî«ÏÆ}–ÜG ìÿ1kîÿ ¹_s¿ôbQ~îùsé)8÷;Ÿz»wúmóñÚìæâhgcifb¨¯£¥©®ª¤ ·ní`_LDHŸ‡›kû‹8ìsæcç¬è/œ†þ—ú+Wqqóò  +-‹ŠIH­–‘]/¯¨¬ª±A[×ÀÈÔÜÊÖžºò;vùï :sòT"„~fv^aqIÙ努©¡ßB‡>mþÔÐg1úŸÚö3Mý?¡'ÆF‡‡úÝm- µO~}xÿ§Û7«®–áÔOIŒ +-?r0îRÿýÜWŸÕýɹÿþ#r¿}Jîßƹ©¤¸ /;3åþɘÈð°ÐàA{üwíØîëíÿ{[+s#}]­ ªÊŠòˆ}) 1aA>^n®U4ûK¦²¿Ã>gØÍ èÿ“ý¯0ú+}^~!aQq‚¾‚’ŠšÆFm=¸ðÖvή›=·À…ÿö»½û†>—”¡Ÿ“_t¡´üJåµ›ÕÌЯǡßB¿…>2„ý?'‡þ<3Ÿúãc#ÃC/û{»;ÚšŸ×?}ü¨æÞê•—©ÔO8zhß^=Œ>\x ScC}d>T>âø˜{Œ=¡žá<“xJrQjD&ðÔ™ô+yƒ¹ ¨@üGúƒýˆ~9 ¿ªš:r_¯~Ä>ü üvúïÙwèû°ˆè“ŒØ¿\y£úνšGOj›Û:º{û_ÍCõÙ»ÿ«û(÷'pî¿ž”ûÍûµ(÷k ÷¨¾y­òJYé…¢üœ,Èý¤„¸Ø¨ˆ£‡CîÛûõ½çêŒV¿©±žöF 5Eùõ²2«¥$ÄE1û<\«V®XŽØG¹ÿ!ö9îs†9¬æ/`†þgŸA¡CÐçÆ苈ŠKJ¯Y»NNAIU]®»¡‰™¥#Dž—Ï6¿»÷úþȱȘñ§“S32³s ŠK.]¾ZuýÖí;wï?À¡_¡ß<=ôÇÇÿÏ~}EE•¤?»söŒãîuT@2ˆ  £HA‚YA$IÎ9gA ’sÎ9§¦ÉH2(QtFÇÖÃìºUuûvßD}›Þíï•ËSWý¾!óß"óéC±ùj>á& õßÓÔ +-Õ_˜Ÿšœ¸96<Ø×Ejm¬«*+ÊËJK©èçåîlomab¨Ñ?©¬t„¾<4_R‘ÄàCîöõTç Äã¢sÓ†ëKCý’° ð€ùõöúE(ð‹K@÷åö:¢tâ$|ñéšXXÛ;»yùÂØOJËÊ+*«ªkl%uõ Ž\»9195;©ÿüå+ŠúïqõÿÍ?î÷?âKË}ä>-÷çñÜ¿r ¯§‹ÔÞÚÔP[]QZ\ r?éJlTxhp ¿§›3xñ™ƒs £­©®ªrâØ჊ò²{÷Hˆ‰îì mìssr`ìÿ¸v Ê}Èþ*Ä>Åý¿2sŸ9ËÌgÐÿ¢¿š€> +;7/¿†þnqÉ=2ûÐ]WFw]×ÀÈÔÂÚÎÑÅÝË ý¸„ä´ÌœüÂ’òJúäîÞ~úױП¡ ý0ôß¼æÓBÿ##†þ§åÕ Õüè— ó3w'ÇoŒ ô’;Zj*J +-r2Rb#Aêûx¸8ØZšéëhi€ÒW:r„>¸ìÐ|Œ|a>äaO‘žÆ<ïœøpÐ ûâ¡û+þ?´=@ÙHˆ? Êà‡îKJIËì“ßö?8 +-:úF¦–6.0ö#cR2r +-J*jZ:ȽÃc7Æ'§fæõŸõ_3œúߘûÐ}ºÜŸD¹?24r¿³£­¹±æ~a^NfZrB\tDXHP€¯—»‹£µ…©‘®6¶ÿÁQ뤸èÎ"Ûûü¼Ü\ìl¬ýuk1öWCö ¹ÏdŸ9KçóèÃЧ¢¿‘…u;'¿€àVáí?íÚ-nºœÂCG+ŸRÓÐ:§wÞØÌÒÆÞÉÕÃÛ?08…~JzVnAQiE +-}ý«Ãc×h¡ÿˡψæ/«>(¿õçfîÞ¾u}t¨¿§³½¹¾º¼8?;=)>:üH}7';+sc]- 5 +-ú ô¥$Ä¡ùˆ|(>rYOužŽx\ôM´aûÒP¿$.|`üCüýH~?t_Ld_ ]c3+;'û—£ã“Ò³ó‹Ë«ë›Û;{ú‡F¯ßº}wfnáÁ/?}þ‚!Õÿ‚ûïûo‘û´ÜDÉýiJî_¹O&µ·4Õ×VU”åçf¥§$ÆÇD†‡^¼àçíáêdocif|^ïÜYxŽƒgŸ‚œŒ´$8 ?öøyyû›XY62ÙgÎ×ÏÊèÿƒ‚þ†,l}n¾ÍôÅ$¤öÊÊ+<|ì„Šªº¦–Ž¾¡‰¹•­ƒ³›§O@PHXD4 ýŒì¼Ââ²ÊêºÆ涎NúƒC#c0ô'¿)ôÎüOÿ¡Wÿ®þ3¨þý{sÓw€ú#WûºImMuUeEy™©‰qQaÁ`êÛX˜êÓTWUV:Š£/&Š™/‚Oážb=yzßY ÃòCûš¸ð €ø‡öúü[ûÛwìÜ~{qöÕ5µõ M,Pì_‹ŠKLÍÌ+*«ªkj#u÷_êß™ž»wªÿ ¨ÿªÿŽ^}Fùiîãì$æþÛ½yƒçþ“%¹?†r¿«³£µ¹¡®º²¬¸0/;#5é +-Êý@O7g[+sCøðSWU9~ìðE9YpûÛ…·öùx¸8ûpöÿ¾ú‡˜ì3g…!¢ÿÝRôÿ‰Ð_ÐçàäæåÛ¼Eh›ÈŽ¢bÔK~âäé3šÚºF¦ÖvŽ.î^~.^ºŸ˜’ž™“_TR^USßÔÒF"£Ð…¡ ý…eBŸ`>ã†þRõÿÜÿ×/_<{òëßïß›¾3qóÚÈ`_©µ±¶²´0'#%!&"4ÈßÛ¤¾™‘ÎÙ3§UŽcèïAq·CDd>$Š½Ç´Ç¥§SžªøFÂløŠ!|N\ø@ú#úü~è¾Èv˜û؉O?Õ3gu Œ`ì»{û…FÄ$¤dä–VÖ6¶’ºúG®Ýœ¸3={ïþÏ}òìÅKð»3¤ú+çþûræþmjîw“Im-õ5Uå%Eù9™iÉ0÷/_ +- +-ðõrwq´³¶052ÐÕÖT?}òı#÷ËïÛ»VdËf>nNŽMl€ýõë û0÷±ÿ“}æf)úC询 B ÏÊÆÎÁÅÍËOA–Ì>pÅAÙ©9{Nï¼±™¥½“«‡·`phxT앤ԌìÜ‚âÒŠêÚ†æÖöή<ô'VýwýŒúŸ–Qÿ7¢úó³S“7Ɔ{É- 5%ÙéÉñÑá!~ž®Ž¶0õµ5ÔÀ?|€ŠþvÔùùP|è={šóK€_O˜¿bh_Óí| ü)òsƒâ‡î m¦†€Âðø;©¦bßÖÑÕÓ70$<:>9=» ¤¢¦¡¥ƒÜ;8Œ}ÆSy÷?âî/“ûérÏýž®ÎöÖ¦†ÚêŠÒâ‚ܬtû±Qá¡Áü¼=\ìm,ÍŒÏëpJYé¢;wˆlÚ²™Ÿ—› °Ï +-Øÿqí”ûLö™óÙùË"ô)¡Ð_M@Ÿ¡ÏÃË/ ¸UtÝnq)i9pÁaשihé蚘[Ù:8»yú…„EDÇ%$§eæä–”UÖÔ56·u»{)¡?BzvîÛBŸÁ̧Wÿ®þ«—Ï‘ú ó3S“ã7ƆzÈíÍõÕåÅùYi‰qQaÁ>ÎöÖæÆ0õUU”ŽT”“‘F„2‘ÀǸǭ§WžÆø:ºY»â¿¤_Tÿ)öCù1øû0÷1öeäÁóOž±¹µ½³‡O@pXT\bZV~qyu}s;¹w`hìÆøäÔÌüRÿùËW¸úNý%î/“û¿-Êý‡„ÜÇr¿¿·›ÜÑÖÜXWSYVR˜— r?!.:",$ÐßÇÓÍÙÁÖÊÜÄP_GKCí|ÿP@§b÷.Ⱦ bŸcÝZ*û«û÷‰ì3Ýÿ¢ùô¿_„þFÖMìœ\<|8úbR{eåªSU×ÔÖ502µ°¶stq÷ò ¸xérdL|bJzVN~QiyUm}SK;©«§o…þ-úS(ô|)ôÿ`ØÐÿ´²ú€úw'ǯõ÷t¶5ÕU•åe¦&ÄF„^ô÷vs²³4©¯ Rÿè¡ýò²ÒRâ»aÕm„YÌGäCð1î©Ô/Bž¨ùšoÅ‹€ê?f? Ÿ?xÂs^€¢â’Ò²òàb_ľ©¥“›·ÿÅЈ؄Ô̼¢²ªº¦¶Îž¡Q þÝÿõ—Íý?h¹ÿn…ÜŸ¹ äþðÕ¾2©½¥©¾¶ª¼´(?'+=%1>&òrHP€¯—»‹£µ…©‘®¶¦ºêÙ¯¯¨(Ï4€ã9‰ŠîF{¯ëºAD¤—¡÷Þ†ÞAzïC:Cï½w†*]zŠ€ )b‰›Mv½HN’³Ç}ßwf`†®7{Äy®¿Ë÷ù}ÿG ^€¢ð.¸ÐøwÀþ•KΟ=sêä‰uöY(ìEÏ>3÷™³=ú‡±¦¡üÄÉÓgοxéʵ}t\¼üBÂb é”Õ4µõ MÌ-mì\=¼}ñAaÑq‰)éY¹E¥ÄªšºÆæÖö®ž¾ÁáGcO¦@èÏî!ôÿ¤¢ÿ©š¿½ú?!õçgŸ=$!õ+ËŠr3S¢ Áxœ‡‹½µ…‰J}q!~´Ü¨é®]¹ŒÌ‡äCð)ܯ[¿…ñÝ0Ùe¿füÐø‡ô¯Á_¸o@öÙ9@ƾŽ‰…µ½‹LˆNHÉÌ-*«Dê“O>}Õ_êÿô©«¿µû"÷wÍýYû€ý±GÃ}=]í­Íu5UÄÒ¢üܬô”ĸhBhÞ×ÛÃÕÉÞƲ¯­©¦¬ n@aAð2îÝEì߸¶ÆþqFö0ÙgýìŒþ +-úßÒп ЧÝ=n^!PtrŠ*êX€¾…•­ƒ³›'Î/ 8,2&>)5#;¯°¸¬¢º¶¾©¥­£»—DŸxBæÅüÂË%Jè¿e ýßv ýÿ÷vÈl«þÛÕ þTl„Lênoi¨­,-ÌÉHŽ +-ò÷vw²³27ÒÓÒPQE©ÏM]mXt‘ù ò!ù|ö›˜gÀüȇÎæÁÿˆ~ ?€¸s°¼ÁÛÀÀØWÑÐÒ32·²sr÷ö +-ŠOÉÈ-,­¬mhiï&‘GÆú‹¯–WVßîõ?6÷—^.Ì¿˜¹ÿdbæ>©·«£­¥±¾¶ª¢¬¸ /;#5)>:",8Àçéæì`cinb¨§­©®¢(' ž†/xð ¼ ÙoãÌi:ö³:ÄdŸ9 ³ ú`Ù¿>ú ØíS`±/\¤åÜNn> è9y%U ¬Ž¾‘©…•£‹»—`HxTlBrZfN~aIye̓†æ‡íÝ}ýdú'Aè?Ÿ›¡ÿÃë•7û9ôßo­þ»ÿüBQiqnfzjbl˜ÜÕ¯©(-ÈIOŽ‹ ôórs´µ45ÔŪ)ÉKKÀÔçä¸s›}d> Ÿ>õ[xðì8ŒßnüÐð‡òøAñ÷ÏœEì_§Üœ(ö¥å•Ô°º†¦–¶Žn^~aQqÉé9¥5Pý> þPn]ýwŸ¸ú™û?€ÜŸŸ›}NË}r_wgÛæ†Õ•å%…y9™iIñ1‘á!þ>^îζV¦Fú:Xu%yIqŒ7|ˆý«àìŸ:qüÛc}˜ûLö™Ã0»¢B,öI„>m«ÙØ98yø1¢R² +-ʪZºÆf÷­í]=¼}ñA¡„¨ØÄ”ô¬Ü‚¢RbUM]csk{Wi`p˜úÏh¡ÿ†þ?ÿõóÏŒ¡ÿû~ ý÷{W¿«­¹¾†XRžàëéê`cab £©ª(+EI}v6úšƒæƒÊ?FûMÊo6ýОfëÿÀ:ÿˆ~?êýuöA°ßãâ“’UTÕÔ10¹oãàêé—”ž]PRQSßÜÖÕG›˜šž™[\¢¨ÿË>P÷Üÿm=÷)쯾yMËýgߣÜ õtµ·67ÖÕTK‹òûÉ ±Q„Ð ¼¯·»‹£õ}3c]- U%yY)qQŒ ˆv6Ö[7A@öÏ"ö¿/ƒÉ>s6 =ú_Сp#úh§¯ÐпÇÅÃ/(,*!-§ ¬¦©­ghbnicïäêó ‹ˆŽKLÉÈÎ+(.«¨®­ojiëèîí'ŒŽON=F¡ÿr§ÐÿcŸ„þû½©?:<€Ô¯&–äg§%ÆF„øxºØ[[ëkk¨(ÈHŠb@êß½Ãú:ôQç;v%>ûÍÐoÁùÁ=Î65ü‘ü~Šû´'ríÆMjìcD%eT4´õ-¬\<}B#b“Ò²óKˆÕHýý¨þGäþ*Êý—(÷§Ÿ>™"“z»;ÚZëk«*ÊŠ r³ÒSã¢#‚|½=\ìm,ÍM õ´5Õ”d¥%D…ùy¸@°¢cðò%ÄþIø@Ž®±É>sÐì€>Ë:út п}ç.(9~!a1Ii9Eu,@ßÔÂÊÖÁÙÍ矔 +-Ð/,)¯¬~ÐÐü°½³§¯pøÑØãÉ©ïAèÏ-,.½Z~½²º†þv¡ÿ©›¿gõ{;[›êª‰ÅùY©‰1„<ÎÃÙÞÊÜHOK]Y^ZBDˆšú¨ä ú0ô)æCòiào!ýšØãl÷ Ù৸؇µñÒ0ö¹ù„D$¤å•ÕµôŒÌ­ì=|ð!1‰iYùÅÄ꺦ÖÎÞáÑý¨þ&öÿKŸû¿o™û+¯—_--.ÌÍ‚ÜŸš|<öhx°¿¯»³ýaSÃêÊò’¼ìŒÔ¤ø˜Èð?œ§›³ƒ-•}uE9iI1a!~^®{0 û  .œ?{\ƒëì³0²ÿ“ýÏv6£ÿåfôÑ>Ÿƒû 2îÖw}Nn^!qIy%U ¬Ž¾‘©…µ£‹»—P(!*6!9-3'¿¨”XUS×ØÜÚÑÕC€¡?ñ„þÌ‹ùúË+oVÜï¡ÿ~Oê?¢ª_^œ—•šCÆãÜí,ÍŒt±jJrR₼\´ÔGw‚Òq_Sȧ‚¿•ô[qþÕžfÛŸÀšýH~èþûà™\¾ŠbŸƒ‹WPX\JNI «kdfeçìŽÃbS³òŠË÷·ú;åþŒ¹ÿoŠû?‚Ü_¹¿0ÿbæþÈýÁROW{ksc]M%±´(?'3-9!6Šèïãåîâ`keaj¤¯ƒìËËHŠ‰ ðröow‹z"öofÿK&ûŸõl@ŸúôSÑ_ßfúœÜ|q)Yˆ¾–®±Ù}k;'Wo_|PXDt\bJzVnAqYEUm}SK[Gwo?yh…þôóÙ¹ùmBÿ×ÝBÿSÜÿR¿ +-¨Ÿ™šMö÷vw²µ45ÔŪ*ÊJŠax8ï²±RS®3}ÐùTò´ÿâ?ä'°F?‚ÿí"<~âÔé³ç.\ºzýo·XÙîrò`ĤdU±º†f–vNî8ÿ`BtBj&P¿jŸ«¿{îÿŠrÿݦܟŸ›}> stdˆLêíîhki¬¯­"–äf¥§$ÆEBƒð¾Þ.ŽvÖ÷ÍŒ tµ4T•äe¤ÄE0|Üœ4ö×NÂì¯å>“ýÏrȩ̀CÿÀFôOô/€„»ÐgecçàäáĈJHÉ*(«ij뚘[ÚØ;¹zâüþÇ~}FEyfß$›£kv÷ –+R¥½AAE * #U@z—¢ ¤ Ò¤Kï½w°Š 3È''j<›äd7ÙçyßiÈŒÀ¸»á~æ÷þæÿøø†„EDÇ%$§¦gåä—UT×54·¶wõô |ûç/p„É©i2„þwˆù¯>åÐÿ}©êg¤&ÆF†õí°æfMŒ¡úªŠr2b¢Â‚HêÃcFÑ¡T>C|.Òùá3~è>‹ýÍ[`€:=(!#§¨ª¡Ô76¹hfµsrõòBÔÏøôÕ_JîÿÝìÓ(äé©IÂîÅsÈþ@_OW{kSCmuEYqaÞã¬ôÔ䄸èðÐ@OWç[vÖV(û'>¤¥¡ª¬ '#ö²¿—ÉþÆõ(û_!쯙Ëþç«ì¯¨ùŒ+úà˜é§Ì +-8€¾ °@_#§¨¬¦¡­{ä(}K¬½ãmw/߀ »a‘1ñ‰)iÙ9ùE%å•5uÍmݽýƒÃ#£ ôqxâ$išB¥±Bÿ 3ôþäBÿwÕ÷ótu´ꛚèik¨(ÈJK@RëfÁýõ+ùsµçL÷ŸyÎþ3á_Ç „ È®€Gá^!‘ƒÒ² +-*Úz†Æ&¦fæX;GW/? ~ì +-QŸýßæçþϬÜÍÈý•2Mš$âq ÷GG†û{»:Úšëj*ËJŠòs²2ÒRã¢#ÂîøzºÝv´·±²¸våâù³Æ€ý#ºÚjÊŠrÀþaäU¸c;²+lìÿe•ý=  ÿ·¿£èoFÑßCG_R#¯¨¢¦©Ð7µÐÿõ#èê[™_1=‹¨¯®¬ +%~`¿8exÉ›7mÜÀ†>Jþ|îyB~Q¿ øQ÷éìÃmÏÂ]{÷G¡¸”¬‚²:TßÈÄôŠ9ÖÖÑÕsE©Ï•}¸ô܇ì#¹°?;C¥ISDÂÄø’ûý½Ým-Mõ5Uå%O +-r³!ûñ1‘÷ïøz¹»8ÙÛ`-¯›]º`rú”áÑ#º:šj*Šòi&û»ìo ¿ ßÇþªûŸþ,ˆ>Œ7ˆþ¶¯¿èó  +-‹—”–•WRQ×ÔÑÓ?v ùªù›¶ήÞ~!¡áQ±úó +-‹K+ªkšZÛ»zú†FFú8D1Ÿ]|.bÁëp±Ÿá>Û¾€Ø‡êïÙ'ÕÇ@õuúgúV+Oýsÿ'˜ûoÙrä>yzj’€Ç½@Øèëélomj¨­®(-.Ì{œùèa҃بðÐà;~Þ®N¶7o˜3Ø××ÓÑTWQ’—•–GÙÛ_†0ÖÓ÷e•ý<‹CŸA'D_h?D_FVAIU]ë‚þ™s¦}+k»[Înž>þ!aÑq É©éY9ùE%e•5uÍm]½ýƒÃ#£ÏÆÆ'ðÄIÒ4…Jc }ýCÞåsÔ~yÚ¿tõ#Yê_@ÕWS–ÇH‰‰îäß³ ž1=õè3Åÿï0¿˜_¦û€ýuë±Ï^†ßìÜÃ/¸_TL +-#¯¬®¥«¿xõ_½þqy«¿äãÆ>÷ܧQ)Ó¤I"7>öltdx°¿§«£µ¹±®º²¬¸0?'+=59!.:<4$ÐßÇÃÕù–õ ó«—MÏ1:qL_ï–º*`_FRü Ø~„ým[6󭲿:\Ñ_;ýí,ô%¤dä”U5´68~Òøìù‹W®YXYÛ;Þvóô ºŸ˜’–‘[PTR^USßØÒÖÙÝÛ?ôô[úãâ‰L¡ÿÝKh>Dÿí[ú?-ús/jâ/'ù9«ÿŠ]ýáþžy껾«¾¤˜¨° ÿî@}Ðnë7¼–~Ã,ò¹ý9¯Ã…~Ô}”}úÊ€·!T7?xŠIõÕ€úÇ™ê{AõãS3s +-ÿxêó´ssþòþÜõp°?C£ISDÂÄøÌýÁþÞîζ–ÆúšÊò’¢üÜ쌴”ĸ舰»A>žn·í¬­,®ÑÙ78|HKCUIAVF +-²/ÙßÉýµ«ì¯Àyúë˜èoâÛ¼¢¿{/Dÿ€Š¾š†¶.ýë–X{'w/ß;Á÷îGÆ&òþ½ _/÷ÛŽö6X‹kW.ž?k|ò8`_[CUYANFJ‚Î>ؘí`eø61Ù_·ÊþJœ%¢¿OPX¢‘STVÓÔÖ=rÔðÔi“ —Ì®[Þ´uprñðö»‹¢ŸWX\VQ]×ÐÜÚÑÕÓ?8<2úll‡GBŸ +-CŸŽþâC=¤%‹ÿÎ~¤aÞ;'õI¨ú=­µ¨úIP}¨>–¥¾2KýíÛ¶À f¥>ýÿöég²ÏŒ}¸4àuÈA}3s¬T?8 ¨Ÿ–™[XRYÛØÚ Ô}>>A$‘©³/ÙÕÿuY©ÏóÞÍûÉþÜ܇ì#¹°?K£R¦I“DA NM“)4€>jþk4ôÁ‰/ý™e`]ý_ÙÔÿþå, ª?þ|¨ß Ô¯,-ÌÍLê‡õì°æf¦&F†¨ú˜¹ê#÷ Ïw Ûù.MüÏÞ7‹Ÿ±7k½k3O}um=C#S3 ¬“T?*>)-+·¨Q¿Qԧ;üž‹úùßÇkmpž9¹Ïbì3÷û34 +-™4E$LÐÙïïíîhkn¬«©,+.ÊÏÉJOMNˆ‹ +- ôóöpuv°½y°Áäô)CÀ¾Ž¦šŠ¢¨ÿt ·³µ ¨_”›•–Ô÷vê[ êèi«¿£þÆÿ°_×_Q {À¸g×ãquõzõ(âŠt—Ø…¢"‚ŠHwÒ-ÝÝÝÝÝÝÝ9ÉÌ€{×ZÖ=Æ÷}g†™aòèÂQ¾Ãó|Þç…êéOTŸŠþJm_éѹO›œ-¿@õwÒ¨ÏÁÍOR_JFNAU ¨omïÔNHÍÌ-*«ªê÷@õQI}8þ^_ê/'{«cŸäþG†sŠ€ŸÄ¢Qˆñ±‘¡¾ž®ŽÖæƺšªò’¢üÀ~b\tDH Ÿ·‡«ãKKS#=-uEù'²€}‰W/‰‹Ùg§aßžÿ.Ìþ¿6ØÿÎo>ú?Q«KBÿßôYˆèŸ!¡/"váòµYô•T5´õ ͬlí\=}üƒB#bâ!ú¹Å¥UµõM-mݽýƒÃ}$ +-ƒÅáÁЧ ?3‡þß«ú Á_¤ˆkìú€}0ëÞ¾êã0(¢ú­MuUeEy™© 1áA¾ž.ö@}}-U9)’úüÜtêÃòR»;Çü¯*ýBôÏf‡¢þVõ?u¨/ Õ—”’•STÕÒ72ê{ú…Ç$¦fåAõ›Z;iÕÕ‡¿¿õ£þÊr·R÷Í}2ûÓ<‹A!'ÆFàÜïêhki¬¯­ª(-*ÈÍJOì‡ùûx¸:ÙÛZšêik¨Bö¥ïKö/_äãád?w†Ä>ó,û¤Oâjt~Ú`ÿ8Fèÿ<ýÝ}&€þo¬ ¿}.~A‘óý›·ïJ=|$÷LIUSGßÐÄÜÊÖÁÙÍÓ7 8,2&>)5#;¯ ¸¬¢º¶¡©µ½“ˆþèø™Äú$ó!útCÿóJ†þRâ3îàšÊAUŸ8ö)êcQcÃ=m$õ³Rcƒý<]lÌôµÔåd¥$oõ…úçNŸ8 +-Ôgêÿ‡¢þ&X]Ò`ûģºOû ;›(ꃵ°— ªâô9~áó—®Ý’| ûTQM¨oãàê铘–•W\^]×ÔÖÙ30<†@a)êƒXÀ!°>Ô_MîVÊ>eî Îý÷ïˆîö§¸I 91> +-Ùïîloij¨­®(+.ÈÍÎHMŠ‰ ö÷ñts¶·µ276Ô×ÑPUz&÷²ó`_DŸ‡ ° +-²ÏÂ|€ °¿{û?o°ÿcô7ÍC/ýc'ú\¼üB"ç/^™E_AYMSçù  k;gw/߀ð¨Ø„ä´Ìœ¼Â’²ÊšºÆæÖö®ž¾¡‘±q +-Ħ¨CŸý•ýeŠÏ°‚khÇÂê#€ú½]mÍõÕåÅùYi‰±Áþ^®6ÆϵՔžÊ>¸{ëÚ¥óÂü<$õY2íå¥UîÔÿöæÏeć¬>ŒHÎ>¦ƒ,Dõ9y úwy+sŸ:÷!û”¹ØÇObÑ(ÄøèÈÐ@_OW{ksC]ueYIa`?9!6*,8À×ËÍÙÁÎÚÜä…¾Ž¦š2`ÿ¡ÔÝÛ€ý‹çE„û€ýÇX#²¿wû›6ØÿniôwÌCŸˆ¾(@ÿú­;÷È<~ +-Ð×Ò}ndjaýÒÑÅÝÛ/ —ÑÏ/*)¯ª©olië £?@a°8@Dc'q„©iÊЧAECŸqï>Óà +-®1ûsÔÿ4«þ[¢ú“h$QýŽ–†ÚÊÒ‚œŒäø¨°@wç—V¦†ºš*Ïž<¼ûÆ• ¢‚|\ì@}ÖÃÌöïÙ½kçŽíÛ¶’jK«þ·4Ÿ6@têŠ0=;wì`>ÌzüÔYv.>!¨þûŸ(¨hêšZ½töð ‹ŠOÉÈ),­¬mhéèîGbHê¿]Gê/½¥é_ûóç>dŸ2÷§§¸I,‰ ³ßÙÞÒÔP[]QZ\ØOMŠìùûx¸:ÙÛXšèi««(Ê“Ù¿z‰ÂþéYö÷öw‘Ù‡«aóûßû-þ¶_Ièï!¢ø뱓Dôù„Åú7$$ïKCôU5´õ Í­líÝ<}‚Ã"Ièç–”UV×54·vtõôGÆÆ(€>ž†þ,ú3 ×ýÙ¡OEeæÓsÏÐ~ý[+@èÔÿªÿû4~ƒœêïéhmêæf¦$D‡ùz8Û[›½ÐÓTU“‘ºsóêE1!>nö³§Ž³>t4—¤þ/[`k«ÿ#D§þæÍ0?³êú ªÏÁÍ/$vñêMI)9U-ýfÖö.ž¾AáÑ )™¹PýÆÖŽžþ¡Ñ  >a|ß¾û“¢þ—µUUÑ[)ü´ì¦°Ò1CaÿÕØG!ÆÇF†úzºÚ[›êª+ËŠ ó²3û1‘aÁþ>žnNö¶VfƆzÚªŠòOd¥ïKJÜ€ì ðqs’Ù?|ˆÊþöm0?ì÷·Bôè³sòð +-‹]  ÿLIUCGßÐÄÜÊÎÁÙÍË7 8<*6!9-3'¿°¤¼²¦¾±¹  ß?8<26Da°8üDÿ50¢¿ª¡O×;š¢}š{ó¸اªÿ…ªþû·¯ÿø}š€Ã ˆêw¶6ÕU•åe¥&Æ„ûyºüŸýúð‰2Ïã8žÜ]÷?äþ»·À}ˆýù¹™i,59¾Ì~Gksc]MeyIa~Þ³ÌôÇÉ€ýˆÐ@?OW'{K3c}Íö/œGØ?qœ… Ç>Ž}’=öwÁÛ<ú´úœú’Ò²×o)ÞQQÓÔ506·ºïàìæùÀ?(,2 Ÿ–¡_TZ^U[ßÔÒÖÙÝ ÐŸDc¦¦gúHèúîîóWÞªýí<ûø/Ç>Pÿ#¬þ¬>51:4ÐÛÙÖT_]^\“™–œäëåê`cn¤§©zGáúU)qQ‘³|§¸€úL t4ÔT‡“‘ü¼¬þ¾õêÿùg„»¢¨ÿ3 ùCTÔ4ô LÇNppâ?+"&!uõºÂUM=c W/¿àð˜Ää'™¹ÅåÕõÍm]½@ý vEýÐu|þ}gÕÿÆí;¾oÇ·ØÿLÀ>’û€ýÙé) zr|ldh°¿·«£­¥±¾¦ª¼´¨Ç~R|LDh¿§›³ý}+3cM5•;Š·û’€}Á3|§¸÷Øß•o3èX…>„¾€ úêZº&æV¶Îî^‚Ã"c¦¤edå<Q\ZQ]ÛÐÔÒŽ ?Bc§ffç@è/£ÿ”„þ'}d›4Uæ#3û´î­àÆîïˆ!êC±6 JîÕÜ4=1:<ØÛÕÞ\_SQò"7ëIJblD°¿·›ã} }-5eŲW$ÄÎ òórqœ8Æt”žRŸ¨ÿoX}$ö öº w„¨ŽèŸ°úà‚È(€ú‡ié2õ¹yÏž»péŠì Ee5m}K[G7oÿˆØ¤”ô¬¼%5 Íí]½ƒÃchìÌ(ƒp"pêï´ú_3ÿkµA¬8¾yÞ_ðîC¹Øÿß#ì¿~57;3…EONàØïîloiª¯­ªì?ÏÉÊHKyìÿÀËÍÙᾕ¹±®ÌþuYiˆ}˜}N„}Z˜ý{ìï‚÷]èóBè‹^\F_ùžº–ž¡‰¹µ­ƒ‹»—o@px@?õÉÓì\€~YEu]Csk{WOßÀËáQýé™ÙyýEýï}b³#€þ·å·†þõëÛqöqê‚ÔÔÔŸ™BOŽ öu··4ÔV–æe§§&ÅE†ø¸;ÙZ™h«ß½}óšôå‹ç…Îœæ>Évœùè0[ʃd¤ÐfÿµÿΫ¿wB¤d)9Lw„‘ù8ÛIžÓBç/^–¾v붊ºŽ©•³»O@hdÜÃÔŒìç…¥•µ -Ý}@ýIô¤þ þûÕêÿè¯7}m¬jŽ-¹¿aî€sÏþ<Ì> +-°?ür ¯§³½µ©¡®º¢¬øÅ2û ±QaÁ¾^î.¶Öæ&†ºZê÷ðì‹Š +-ðñrsr챿ËÞ–Ñgá/п$%-{Cþ6@_[ÏÐÔÂÚÎÑÅÃÛ70$<*.ñŒ~~aIYeM]cskÇ2úã“( @  ý¯ ¿eóWk¿æ­…ÿ`•úŸqêÿúv§>frläewGkcmUYÑógÅG…>ðp¶·63ÔÕPQ’—“‘àãádgead £¡¦£%%'‹WÿïÛ­>îŒö!ê“’ƒÔ§¦¡c`daeç<ÅwVXT\RFN^鞆®‘™µ½‹çƒÀ°èøGŸ>Ë/*«ªklíèé92>‰™š™ýŸ7‹oÅ©ÿyGÕßÀãM‘äØBî°ÿÇ>ì>ÄþÜÌ4ƒš…Ùïêhmn¬«®,+.ÌÏÍ~ú$õQblTxH€¯·»‹£­µ…‰¡`_ù¶<Äþ¥‹{ìïη9ô)©¨ÓÒ#èóðò/£/s F_C[ÏÈÔÂÆÎÑÕÃÛ/0$":.1ùqzæ³<€~yeM}cK[GWoÿàÐ@™šž›‡B}0h}x«±™ ­îwüêp;û¸þ­ ¿¾gŸ˜úÿ}=?;…Aõ{:[›êªË‹ós2Ó’¢Ãƒ|=]lÌõ4Uï(\¿*%!&r–ÿljcL ô´ÔT‡ÀfÁdaõûˆúÛ.õ SVܤ>-ýQ¦c'8¸xùEÄ$¤®ÞPPVÕÒ3¶°qpõò +-IHNËÌ)(.¯®kjëìéGa¦gçAüê½¾5Ç÷Ûw·Lÿ†Éñ­;ÿ‚w™}èHÜìÏNOaГ€ý¡Á~À~[sc}Mey `ÿYf:`?.:<$Ð×ÛÃÅÑÎÚÂÔPO[bÿÆ5)ˆ}!À>'Ûû»çm} +-}€>+‚þ9<úwU5´õL-mìœ\=|üC#¢ã“pè•–WÕÖ7µ´uvÃèML¢±S3³s¯Ö ¿Aè±ÕLîÚG°Àåñá··“쯨ÿeEýw‹ úÓXÔÄèÐ@oW[s}MEIAnÖ“”Ä؈`o7Çû–&úÚjÊŠ7e¯\ºpNè /÷I¶ãÌG€ÑR¤ #…»ûÛ¬>rG+©Oqò—Ãà¯"óq¶“ܧÏ¿pIúÚMÅ»jÚ&–¶NnÞþ!±I)éY¹/J*jê›Ûºz†F'PXXý…Åw+êÙ)õ78?b×G$:ððoÞýUŸø ˆý÷û¯_!ìö{»;ÛZšêkªÊKŠ +-òû““â¢#Bý|<\ìl,Môµ5TïâÙ?'$À¿Â>=íaj*Ê=öÿÒoKè32CèsáЇп© Ð×Ñ72³´±wróôñ +-ˆè§edå<èWTÕ64µ´ô^ôQ0úóúÀ|ý¥%(ô×£¿Uóñ›ƒ•_ZýVè_ãþzö·_’?؇½æ¼nn‹žìëjoi¨­,-ÌËNOMŠ‹ ðqw¶³25ÔQW¹}KNæòEQa>NvVF:8öÁb‚cß6Æ>‘Ôÿ ¤>9”ú4t Œ,¬ìœ<|¢â’2r·”T4t ͬìœ=|B£â¦fdç–VÖ6´´w÷ B˜™{.ÜÉ\Hêï€úDÐ'4£Ü ¬ŽšcsîãÙGri ff~vf +-‹FM ì·ök«*JñìÇÇD„ùùxº:ÙÛXšéëö•pì‹áÙgì3 ìƒtØcÿ¯ù¶ˆþ1ýÓÿg¿¾‚¢J³Ž?lÕŒµ[kíŽ3³ëŽ9ŒŽ£ŠŠ‚ Š¢ˆ‚0 ( +-‚dArÎ9‹ (HÎ4±É9§N4(Q‘Â݇ý¾{o÷í€,²ƒPÊyjžnuõ9?þ—¢I\B +-A_E]K÷‘™¥ƒ‹»—_`Hxt‚~fN^a @ŸX×ÐÜ +-Ðïí"‘©4:@ }6ôÙî`qó¹J ;:üwlô;>üöV—}õÑØêO@õ)Ã}Ý­MõÄJBq~vzjR|Lx°Ÿ§«ƒ­¥‰Á} EùëÒ—EÏ ñóñò:°oÏ®í[¡úhìÿ9×ÏûKý`‰~øq3X¡]{ö8ÄsŒO@èœèe éòwU4ï˜ZÙ:¸zùGÄG}3ÍŸc[¿…ªcq÷ÿ7ûŒÜÇÙGr²O§QÉ$À~owg{ksC±ª¢¬¤0/'3=-åÙÓ8À~ ¯—»³ƒÝCK3£ºZê*}Àþ¥ €}~À>`ßÞÝëìé³\ôqô”TÔµu›YÙØ9º¸{û†FDÇ%$=ÐÏ/*!TTë1ô‡Hê}„þ‚>àzË }Ü|ôæpïß² ƒ~üøæ¹^.ýü”p¨ÿvz +-œòè…4ÔßÓÙÖÜP[U^Ró*-9!62ÄßÛÍñ‘µ™¡®–ªÒm9Iñ‹"gNŸ<~äð¯û÷îÞ±í§Íÿøaˆý¿~îØçJýo©ÿ·ïÀmÞ²mÇîŸ÷ÿzøèñ“§…Ï_¼rMFš–ž‘™µ“›w@HdlBò‹W9%åUµ Íí]=ýC$êÈ(„©é·¨úê¯ôçY×ï=woàÕÁ¶{óËrc²ÉýIû öûQöë‰Õ„’Â|ûÑ!~Þî.Žv6–fÆtµÕU” ûRâûÇ×Ùÿ:æÓÑ? Ð?É‚¾<@_C[×ÀØÜÊÆÞÑÕÃÛ/(4"æ D?#+7¿¨”PY] Ðoëèêès¢ÏúKBóÑ“cz?Ã> ú™Á¿û«ûˆú0õg¦&ÇúTòÐ@oW{Kc]uEianæ˔ĸ¨Ð@wgû‡æÆúÚêÊ +-7e¥®Š]8+xêïoùyÏÎí[ÐØ÷úÖØÿÓçSÔÿþÇþkËö õòðžà<{A쪔ì-…{ê:úÆ6öξaQOŸ¿ÌÌ-,­¨®kliïê"#êONͬ1õÙÐgMîÞÀ«c–eùðí[ûhî³±ÿz”>B¥†!û]m€ýÚêJBi`?ãÅó¤„'Ñ¡A~Þ.Žö6VfƺÚ*J +-8û‚ëì%³lô…QôeåúªÚz}[{'Wÿ ÐH&úE¥å•5µõM-ý¾Áa2…62:Ðæs Ï¶þKCŸË|ìâ òÓœƒÑ¹Ï¸¼…Ùÿ옠_ +-Uî=ªþ›1:<<Ð×ÝÑÚT_SYV”—•þüY|txŸ§Ëc[Kƒû*Šò7¤%.‹žà;väÐý{wíØÊûȱ®tìs¥þ·˜ú õ7ÔÿiëŽ]{Aê9vRàŒˆèeÉßoÈßUѼo`jiëàê韔šž•WTVYSßÔÚÑÝ78L¡ÑÇÀ¶À]A^ ÁÏõŸÕQ™æ³ì¾‚,ÙÈ¿<÷YûoŒý9øH&ûcô… Øïëì·4Õ×ÖT–ös³Pöc"Cƒü½=\ím­Ì ô´5T•äåpöOö¯³ÿ…Ï’Ñß‚£Ï‹ /" +-З†è+«jè蘘[Cô=}üƒÃ"câ“S_¾ÊÎ-(.+¯ª©m` ?ÄD }˜oÈ)³ ÿ‰¡?n?ãæЋƒ§6gäô9Ü_ì3¿ûHÃÍ‚Kžœ€êSHƒ}=mÍ Ä*Bq~vFZòÓ؈/7ÇGÖf†zZªJwäd®]¹t^øô©ãGaìïÞ¹ ‰ýﱿ;öWäPñeBWé›…Rÿç_þvôÄ)Aáó—®\“¹yGIMKÏÈÌÚÎÉÍ; $26!9-#;¿˜PElhnëìé$Qh£c`]¦gÔêc©¿jê/Œ>n>Sû)–aèÏ]¬îRî³²¸ØEØÀØo@Ø/.ì¿LMNì‡ùûxº:AöM ôtPöeöE„×Ùÿæ“Ñ?ˆ£/vE¢¯¨¬ª©£ghbamûØÉÍÓ' 8,*C?¯°¸¬¢ª¦®¡©µ½³» O"SitpÄãúïô?.ï"賚ÜÜ,j>rr î'X³ƒŸY\Ü_uõç¡úïÞNO3¡’†ú{»Ú[k«ËK +-r^½HIŒ‹ +- ôqw¶ha¬¯£~OáÖu©«bÎ +-ñóñò:°oï®íœ±ÿ-Wì¯À¡r¢ÏLýl©àÏ1>¡s¢—%¤¯ßR¼§¡óÀØÂæ±³‡o`XÔ“Ä”—™¹…¥åÕµ-í]½ýC$êÈèëñ‰©é·ˆúó«§þÇÑŸC3ó~’c8³[?ÜýOÌ}ôÙÈ“ác‘ÜìÓiT2 °ßÛÝÙد«©*/+.ÈË~Ù €ì?¶µ671„ì+Cö¥%ÄÅDQöy—Áþ¿Lë³b³<ôpôo#èëCô=vvóô GÐOK‡è—ô‰uÍúýƒC$ +-u„>úšýÅr{ñÐç0ŸyrȽAçÇἃ|BéGnwm±¨ÿSfjrªOèíîhmª«©(-ÊËJþ,>:<ÈÏÓÅÁÖÒÔ@WSåîí¿KŠ_9s”¸Xfìoú;v­à­2b¥.•m™°UâHým;w#©üÔia‘‹â’2r·ïªjêšZ=rpõò ‰OJMÏÊ+*«¨©kjíèî&Séc¯Ç'§f0õ?0Ô_ÍÔçDŸcÙ6eùÛ7Ãéþ’s¡9ýwû Pöû!û­Í uĪŠ²âB&ûQáÁ¾žnNY[@ö5U•!û’WÖÙÿ*æÿEÿ&@_ ¢ojñ¢ïå÷ôYJZzf@ŸPQM¬g¢?̉þ,ŽþRV~Ðg1Ÿ|Œû×ø øcðƒËûûkDý¹÷ðŒ''ÞŒÑi”áÁ¾žÎ¶æzb%¡8?;#-ùilDˆ¿·›“µ¹‘ž¶šò›²Hì òŸ@bKìoDÔßÀˆý•»TöeBS3õ¿g¤þ>ú¼|üBg/ˆ]•’½¥ ¬®­odþÐÎÉÝ; $26!9-#;¿˜PElhnëìé$Qhô±7“à›E^ WM}w¹ÑÇ7p‚¹ø öObëDzs,¹¿Ä·]<|°çÏβ²?B¥àì7Ö«+ÊJ +-ór2ÓÓRžAöC|½Üœ!û¦†ú:šjÊŠ·qöÖÙÿ¢ç@ÿžšæ}}gw/ßÀðhúùE%„ÊêZ€~[GWO@ŸL¡€n{ÂmGžý%î;úðâÞs\¼7àüœQtàG„~ôòÀáaw·6ØÇÕ‡ì#ý6û\ñÄÙ¯³ (¯4ŒãeʘTrÅHÔXeÐàĸâ'f4ê0â¸EEP ˆŠŠ" ˆ " +-²ïû¾ÓtÓ; ÍÖ +-ÌÔH2©š÷œó¯¿n Â2ˆ:œ«x×T¿Ï/ÿ† 7‚…|^UyqANfjb\tø£à Wç‹çlÏœ2;rpï®Û¾ß´á«5+`±óçÎ6àÄþXNì)û=¡Ï¤þ4õÿ@SѲ(õ·lÛi¼÷§#ÇOYÙsrvõô¹—”–™[PR^Å%2E#t‚ +-¾0’ú]¿Ð¯iÕïŽ>ç©ø-ô™ãka»ã¹VwpÝïoîk°îûÍÊƆz™T,¬ãóªý"`?#59°/Ø÷@ì;žµAìÁìo×bÎûoäú ÕèoÅè›9vÒÂÊÆÞÑéÊ57›¾ýÐð'1€~F¿´£/’`ô›}ýNFÜn×ÞÇÐgÌ'™…Ç%s¯ä>B?†_…Üǽ¥Íþp«¯Ž}p¤mÔWÈ%"AmuEIa^Vzr|LdXÈÝ€[^n×.?kmyâ¨ÉþÝF?þ°ù»¯×®Z¾˜Æ¾ŽýuÆÁXÉV‡–ýЃÐï}¸¤qÝR9IýíFÿØèèIËŸÏž¿|ÍÝË7à^HXdL|rzv^aiEumH*GêC' J@곩ÿ²Õï–úZèsÌ'È&‡ºZ\÷»ç~ßÙA?b¿ ³¯K% û¥Ey˜ý¸˜'á¡!ˆ}oľ“£=aßd„ýÿ×Oôgõ„þ„¾¥•­ýy„¾' DÑOIËÌÁèWÕÔ +-Ôè·RôáÔ5±íû«C_Û|ÜXho|…BQ¯~ +-¦–ǸV×ýáŽ}ª>fþ,UksSC½L"ðªÊK +-r3Ó’â¢#BÝöñt½êähgmqÂÔdßî¿ÑØ_Bb:‰}]û˜}˜ê-Uó˜FãcB·„O ]’.ÒTH}6õ¿þnóÛvï79zÂÒú¬ã¥«nž·nß}—”–•[PR^Å%²zHýV|W8õA}ú% êk£ÿìc>=A|„ôÑûc°ëþ sŸù jöáj”À¾ ±_[ìû™i)‰„ýûA˜}ľ­•åI3ľ1°¿e„ý7ú +-ýÍ€¾Bß”¢ïìâîéí€Ðˆz +-è§ú…Å¥}¡Æ«hTÂ|†þo=Ä >sMóÉÞˆøõõr¹\Æ>ø‘Ÿºß†?I»šýW#ö‰']LìÂÛZš¡ÚD‚ÚêŠÒ¼¬ôäø§OÂBîÝñ½éîrù‚½Íióc‡ìù»FìÏ™9C­uÒGÆë ­’©ÙR{:&}’ú“>ÖLý¯6lú~ëÎ]{63?cãpáŠË›~wî=|üäiBJzv^QiEumH*W€úmðUubõ»ºhê£úlYôÛÛ{ºAt„ô1éòü$øY÷5rÿ×þç>eÿ_,û-ð!0ûBAmMUEiqa^—ý_oO7g§ó”ý\ö GØß@Ñ_èoä onimë@Ð÷Aè? ôã“RÒ³rò ‹Ëô¥}d­ŠH«†¶ÏèÿGë-37ͽAbÁÜÐØd2©T¢~R)¦í»OrŸÃþ0Ç>GûXýŽögmʆz©¸Ž_SYVœŸ“‘šþ(8ÐßÇÃÕÙ霕ÅqÓŸökžÁôOô¦N™’Áì¹ó?ÿr‰!Iývï31=aamçètÕÕÓçvPð£ðèØÄÔÌœ‚â²Ê¾P,«oP6·ªž‘£“ùe˜Ôï-õ¹è£ßšØ|L¾œ!ûÈÖ3ðÓò`q’#ìó&º±ßÅaÿ9e~%Š ûeÅ…ù9™éÀþÓ¨ˆ0ľŸ·§;aßÚÒÜ̱oìoaÿM}FízŒþ#ã½jô/9_Çèß fÐOÅè— ôùý‚>ýN³ýBŸšÏ¬n›æfœXˆ|"¾X,R?±˜ÈgGG§bØ'?<†5öÙ¿”ªÙ‡«Z››a¼B¯ª¼¤07+-)>&2ìÁÝ_/÷k—ÏÛÿ|úä±Clì¯Y±lÑ æÁZõ§áØ×ýPg3Õw{aSÕ úLê£SÒ©¯7M Rñ²•kÖKSÿ˜ùiû —]ÜoúÞ¹Ÿœž•WXR^ň$2”ú­Ð +-}Žú¯@êsúš l|„¨;äì²O¹Àüä'uŸæ¾zý›SB(÷чR/“RöK€ý¬ô”¤xÄþÃ``ß±鼃ûûÎþhö˜þ7·4ò†ðq‡Šw:ºÏèo`Ñ?ÄEßËÇïŽýŒ¬Üü"@¿šÇ¯‰¥r@ݸ +-£¯ÙÖƒ +-}|ßZsCcCà …uœ'bùavrÄ~#Î}Ì~GGç«û¤#»˜ØGómijTÈ¥¢ºÚêŠÒ¢ü쌔„§O?¼èïíqÝùâ9[«S(öw“Ø_·ÊpÉ—ŸÏŸ;Û`ŒuÊäIM¯3v(Ùÿô?§§èÃ%͘‰S©áêußlüË_·ãÔ?naewÎÉÙÕÃÇ¥~TlbJFN~¤~mœRÅ“ú]ì74,êk¥~7ôñMl>“BÎcÛƒI%ë~;i!z†Í}ÎOø<èãûr`¿ŽÏ«¦ì§Röïbö¯sÙßkl´£?ì¿=Âþëóz@ÿí Üü´µÃ…KWYôGFDzè—Wbô%}b,-ë~£ÿ+ûK–Ž]ž“ù˜|$¾@Àçókñƒÿ°ühuÄ}mö{‰ý—«ÊoœØÇêw´Ãz›•lb!¿¦²¬¸ 73-).:"bÿ–—'öwáØ_¿få²Å ÌûlÖ§Ó§éM2y¢.—ýwzaÀ[õ{èÕ?ANiªÞ'Ó f}öÇ?-\¼|åÚõßþyË6ÍÔ÷ò ©Ÿ”–•[€S_(‰Êf¨…öF}6õ‡O}nê«ÛšA›/CW(b®ß!:@‰N{(é>ë=÷Á~e_"BìW–•åçfe ö£#ûwü|¼¸ìê'ûcFØ}^èú7¼|üýGý„äÔŒìÜ5ú2¹¢®»uðè÷ú*µ¡Ì¡­!ïy¼úx<Ø»CîwgŸ|¨cÿåªÂU³"4Š}‰H½VZ˜—žÌľŸfìAìoüfÝjÃ¥(öçÌœ¡? ¶:i¢.3Õ÷ßÓd_cªë¨QZ·DÑç]Î-éNœôñT½iúŸÎœ3oÁ‹–®Xý“úûMLOÐÔ÷öÄ©Ÿ’‘_TZQ]['bR_ßÑ?É7Ī?_G}6õYb¹gÈ\!s†äáúÀñá§GH¯ð9ÍýÓÜgÖÑypŠˆùLð‘,ûå”ý„ØèÈLj}ÿÿ²_§AU^gÇ'm:‰Öš˜èXâ8†°( D\"Š‚â‚‚ˆˆ(Š‚¢¨5®AEÅ £5©F«ÖF«¬²ï;— \6bDÄ]²Ìô9Ïy÷{/\ˆãÅ”ó…|ðÛ9Ïó»ÿCØܽckDxXHpÏØ[ û/Õªþó²ŽôßÖ ýY*ÐôÏ3è§"ú%bôïIÐ×°f¸¡þYUèw¨Y¶j¿¢B.——“+*ý?トýg*ÚaŸû¦¨t2±Ë ÉÖÚr»±¾c?/;#%‘ÆþiAìBìÏ5ÃÕy’£½­•Åh#C}=ÜUXÕwaUÙ@SË~×õ.чabЪó!%=}ÃOMÇXZÛŽsœì‚©ï븊¦þ>’úÿ$©—”š‘“_TZ^Y­¨§©ÿA›úܯrßH}°8‡üRñ+ÉVà2#¨&>Ú{™ûRö;U²ßIJ_R˜Ÿ“•žrÙ¿xÙ?¬’ý)êØ'³ÔÏþkwºEÿ]DÿCŠþ'Êè{ Ð߅蟠Ÿ›_èWÞªQ úw(úY]Eè÷0ôñ û” }Ø5¥e#«{V.“ÉÊØ#“ý°vŒû"ö©úOú^ì£ú>hoõ¿ojPÔTÉËŠ r3¥±±amðŠ?ïùžîÓa[ìlÆš›2øÛÇ#†ëcV•ÙTž}vU{ë¾Ä|á,1èÿy %†éÂ(陌¶°²±?qÊT7wO/¿€ ÕkùÔ?÷¯+×n$$§eåËäU5u ˜úmíÈ áÜp©¯eõùÔ‡‚÷˜}f «0<ÊÉ â!ùAfP‚G§$÷5cŸ[nGÄìß#ŸEٿűŸÊ²öÌ©˜~öÿÎK@ߟA¢,æÔ×ý«× ú}9A¿¾¡‰àÊÙÊ%ug/:†}¿Â¦=Q +-}Æ|†|X´²ÒÒ’’’b<ð¥¥D~9uŸlǾ(öû”úÈþ#Bʽ»°¸uµ°¶%…yÙéÒØß²2Ðßw!Äþ4—ÉÆýÝÚrŒ)ÙÕ‘”ý!ïîŠýÞ¸/5_%úafi˜îðd”ŒÍÌa’&8¹L›9{ÞB_ÿå«BÖ“Ôß©þÒþ—”’‘MS¿¶¾ñ6y&’ÙQúÚP_uêóèssXAç‘L"L Ì`™¨>”ÝÇÜÊ. ¿%=Ê}ZF4ŒpEȇûŠš[•À~Q~nV†„ý¨È=ö½ûÙÿ­—‚~PphØF1úW®^KDô ŠJdýFýv.¨5GÿåÇ+—1lÇ0æßFó1óɪ••ï‹Š +- àÀŸ¢"°àG÷aáHhQöqÛTǾ6Ôç\ÁhÃÝíxpŸÆ~½¢c?b?^û»¶E„¯]àçã5ÇÃmªó¤ñö¶V°«†úz#ɪê ûƒT²ß;÷U™/š%ýÁïôÿúш‘zŸ~j:ÆÒÚÖÞq’³«›Ç/Ÿ%Ë‚V¯ ؾ+2*úIý_½‘p3-R¿ R_ÍÐÒú“ú¨¾är^ÙÝt™ú8Š údIè³éA‘9¤?P~¹Ä}qîÓ5éAî«aŸ~Ï~=a_γwý*aÿëS1Çým ûþ]³?„²³ÔÏþërº@•¢?¤gèŸô/!úÉ©Ù€~)~‹ýç=CŸåŸÔ†>šßÔÈ™äð +-òóóØ“Ÿö1îÃÂá¾ÁºµÜ¹Ë~œrì¿bY„±ÿœý6Œýû2&öc1öÿsôо=;>ß´>dÕò¥¾ çÍž9ý3§‰v6cÍÍLŒ ôéªê òž}ºª ì+»ßÍξ¡Òüß“Q£?Ñ×ÁYÒÓ742maec7~â”Ϧ»{Î÷^¼typèúÍ[wìÝè¤þ…ËLêç‘Ô¿U[×x»ù¤~;\ó›L/G[wÃ]Ž$õ™ nAôµ50ˆ´=@üBœDzH€¡ü?ç¾$÷cî¿4öÛ™ƒ-Aöe%EÈ~"°EÌþÆ°Ðà ÍØØÏþksºF 2ú&=A?MŒ>Ã*3ËÂQL²Fƒü£ ô‹BŸ˜×Z03È/$àçææäd³'''èøÉÂÉ+ ³(ûÍ-°l¸kÌç1°hYåØ¿ÇÆ~¥$öOŽŠÜµ}Køº5AË–,Z0wÖ W—ÉÆ‘]53e@VUWÂþì r_侺µÿ›ß)…¾ý÷Xô?Ö70263‡Qr˜àä2mæì¹ ù®\³nã–í»#£Ž@ê{ñÊ5U©ŸÞÎ3üIÖÒ;L¢¾RêcÀ(ôé$b|0“£ˆ'—™BòîäܯÃþh¦‚«Âå>Ù +-‰{…ü,,¤§ÒÏcÙ/ö³3R“‘ýKÀþi Ø7²?Xûì õ³ß׎p[™<“ ?¸èï‹ŠFô/ðèç!úUDUÕè ò¥'õÂä ÎñCQè³yEÌ'›V{àgeeff0'33++à‡Ã}#ëV‹O‘f|ŠÜWû¿¼zZ$êÿȪÿðû5|ìÇÑØ?yôÐþ½;¶nÞ¼"`±÷|O·©Î“ím­-ǘb¡®;Œ²ÿŽ}6ÑÔ»ßÝ›OG‰Ÿ%ŠþP@_w8Ì’Á(cÓ1–Ö¶0Jήns¼|üV¬^»aó¶{†Ô?{áòw×¹Ô¯àR¿¤þcz7ZK}å»é¤9ͦþÝÖ–f}|qRóa³qñÀ2cHßÔ}EL"ÙaîSöùFÒ8÷¹Hêžý4 ØwRÁ¾e_’ÒØïg¿¯ᾊѧuFÑ×¢o®ýˆþI)úÅ¥² +-@¿®A¿­×èÿ,mîÍJÐgC¿¡¾®¶¦ºªëŠ,ìYxŸž––Êž´´t ?+›,\Qqie¿Nø»DÕÆ«¯µ ôä Ê>qc¿Qû LìŸ8r0r÷[6†…¬ ô÷]8o¶ût’hv6V£MaUõFö?Ö>Ú†}6÷{î¾À|úýRô‡é1’Ì¢o?~┩ÓÝ=ç{/^º|UHئϿسïà‘§¿!©›œ–ES¿ZQ߇R_x5¢»AT¡@Zï4ßÔ³HÑÇQÌÃQÌÌHO‡a$'Ž! ¿ðÝI +-¤EÀ>·0Âùì·±ìÃV!ûy<ûýè¨}½dÿ­~öûðQþ[êÐ7dз¯„þýsú™bôqŠyôŸñ%ÝÝ‹C_ø`egÚâ +-ö¬¡NQÃ/i+ ?ÀOIN¾Éžää”T€݇ܧì×p)Œý/´­>”ÂØÿAû|ì;|àËÛ"Â×®Z¶dÑ‚¹³fLsqšà`g3Öb´‰‘¡¾2ûBöI¢ r¿gîKÌÇIÂ~@FIŠ¾Î’…•ÃD'—i3gÏ]°hɲ•kÖ…Glßõåèã_ÁÔOJUN}üE¤¾¶Õÿ‰¹šç|ê“i$¯N[ØäÉIóg†‘œ””Tf üè~¹¼²ŠŒb}“û”}>÷ û-dkT°Ož#ä««*d¥ÅRöO"û;U²oÛ+öµÍ]ÿÁÓ+ôIž9uþµñRô›XOÛ;rý+ÐÆ 0ƒ>ú +-سª +-9c>ìY³”ä›II‰ ñpàObRÒM€ö-;¶­¸؇]ƒÄ‚ºÓ*ˆ}íÚ"|ç‚ò‘rìçÒØ¿rñÛoNÇ=‘¶uÓúÐà~>^s<Ü\';Ž#…f¦Ä>¬*î*²Ïå¾Èýîäçþ™À|:IÜ( zG„¾¾¡ ‡ “]\a”¼|üV‡nؼuÇÞý‡ŽÆ¨Mý{äYü{Ì Î«»ågX§ŠÔ'B¤¬¤BŸŸE2Œô9Ä!ð³Op¿ºFQ§”û û¯2û¸6¸5jØÏäØ?§1û0K,ûôåÈ=ßìg¿)úo2è`6•EU}.ÑObÑ/WFÿÑc5èk8¼-0½OT‡~U¥\FöŒ˜i…ä'&ÄÇÅÅÆÞÀðS÷³rróiíÃw*ê!°Z1(¹ØïÔ".êb¿CUì'Å]ÿîò…³g¾:¹kû–a!+ý}Î÷tw›:e’ã8[kKs3c#ÂþG<ûÿc¿Îc¢¼ÓŽgÓzl²Û¬QëíZ[kÛX‰–h̉F×s%Rqµ¢PQPTªVWYÏUë}¡rÃ=ÀÌÃ0Ã%‚T/TÀŠZÏZcµ»û<Ïï=çÑ6e6á—h¢þóÊû<Ÿ÷ûûŸhlYeî‹ð[§_òÏoÉÍç&IDßIŽ¾3¢?aâäi3Ý?Ÿ÷Åâ%~ëþù¯í»öw#¹Kìß4g?×)g›œýé2ö)!¬²ß¥“}<–èw±…þ{ïÛ‡~ ŸŽè"úÕRôÙeõüªÊ®=ÅòB]vSчÐÇém‚ñ¥¶ªcmuª”Ö ÄÏ6deéõ™ìèõY‚¿ÀTT ËFì×caá“Bì·Ýá¾NŽ¦þOôÁãc¿‹ý‹ûeŦ¼lXWU¼224øð~h´Më׬Z¾ÔÇkçœÙ3¦âªŽsÍØ:„cßI`_Ì}›î¿âX1Ÿ&É*ú#>é<ÆeÌÒä©3g{x.Xô岫×nÚúï=ŽTÆ«Ôéúl£©„KýËv¤¾¼úO©ÏkÊ¡¡Ï #N#Œ#Ì#üf0ð BÁ RS{®^Èýf¼{bîßðÐ|uìÍ}Kö°Æþ·°5Ä~¾möÉÙÇ›£À>%„„ý®ì;ె~Wú=qQyôYúÓ ýE¯F¿Ð?'EÿŽýgö¢/Ï)úpO}È]T¿kmiæBÿÂùúºÚšªÊ +-4¿Ð•äë3uépÒàWF†.áÏÍË/(„]Øo¼Œ±ßJ¸ˆIi¡Ëoˆ‹T—¶cÿÛºš3§K‹òs³tÚ”ÄXEøÉc‡öíÚ¾yã×_­ô÷õ^8πUuìùñˆáƪöÇUuêÉØçs_æ>;ò¿%’/7'‰¡ß“B‚þhBbÎÜù^>K—¯Z³~Ó–»÷ +-‰ˆŽKJÕê yE§3õm^Â(õïbêßÄÔo„{g¡¡_Èä‡æŽNÇ5Ào*$÷+¹«gC#lNÓ Êý6!÷9öñÿÜnö–±ÿŒgŸžTú}BöËO"ûéÀ~œÀþVÆþRûã¤ì÷ïdÿÿá؉~)úãdè/µý†þ})ú’Z±ýçÏ©©„±¥ÐÇ^Á£Ð?ϧ3¶Ì⧧iµF£Ñ¦¥üY†œ\Ì}d¿ +-KxØ[L®)Ÿ9ŠúÖcÿ¦û%…Æ=lkBLT؉£öì„D[à·dñBXÕYÓÿ6ÉÍuüØÏûüªööqWe¹oÅ}ô‹ÿ*3_ú4JfèôÇ»ºÑ,ÍýÇBo_ÿ•_}½qóö]{=“¬ÉÐçä–Â…±¶þ¤þu1õË^K‡«ÏqÊ«"¡T@B߈Ө§q„y¤“F£(kòJ˜Fˆ ,÷o6Ã@Þn؇¡4¦×aÿ¹ûòkÉ«Ù_ɳ?KÆþp)û=xö»w²ïxÇúÝyô{HÑ.CþJD+C?ŒÐ×0ôKxôinåè?ýè ¡/¢º +-ƶ‰ý³úåe¥ÅEh~¶AŸ‰äkÔ©))É줤¤ª~p+Ù§Ecž–¿–X‹ÊßR—ÿ +-?[±ãÚ•ÆŒ}Xׂ ß»O_îÖÈ¡?П4eú,w˜¥ÅKü×A?ìÜsàÈñÐHe¼J–™g*>UQcÔpéJ“õÔÑAèË_ ~ŒÅ×¾ÆÍ,õ!Bjªú8ŽYzGuj*L$ü¦fðcð‹wÏZÊýË”û¸?m܉dç +-ÉÙÿIÎþ}Æ~Ëk±?Ïû}m³/Q¿“ýŽ;¿“©o ý¾6Пg~¨-ô›l£ß~¨ØDÿñ#†þ¼¡Â†ÁЊ]ÀãËŠ[2Ø1?Y•””˜˜'11)I• ðkÓ`Õ Ä~iY9ìYûVß›ùÒ¡êÛŠý;,ö/CRÖVWž.-ÌÏÉÊЦ$Æ*ÂO;´o÷Ž-›Ö¯Y…«º`ž‡ûL«ì÷íÓ»—±Û*w_¿ý2ðò¥æ³ÐôzúƒDô?cèO›éî³´lÅ굂`”ö‰€IJÑê²ró‹ õák ctM’úO õ-Õ§·òäÿ1æÅ +-Á¡yÄkgF:H² +-Šf‘‹œFpÆ*ä,Ëý+¸AÍ­pÿ¼#äþðøQÎþK;Ø)eÿ©ûð‘2c_cÆþ:Kö]Æ8”²ïdýÎØwcžú–è;‰èâ:q±DMôÏTך¡Ïì› /T +-•˜)úPU0±U°a ¸bÕ,ô Œ`~¦v V, ¼‹‹¥Ÿ˜¤JIÕhÓuÄ>ìäUMí91ö©*rêóÀtˆúvÅþ%hʳUeÅ&c¶>]­Jˆ‰ +-;qôàÞ]Û7o¤BóñZàé1ØŸ8ᯌýOˆý!ƒP¢IsŸs_ +-¿ ?ï¿üÏ]dä3ó¥¡ß«ŒÒ€AC¬¡ï¹`‘ÏÒå«Ö¬ß´eÇî}‡Ž WÄ$À$ésŒ¦’2Lýó/]u´Ô·¢>L&Í%¤ %K}Rô $¡ ¢Qc‚à@²“€Ã˜LÓ˜ÁÜÇË'æ~ —ûW¯]¿ÑÜr r_`ÿ ±?„7‹'«ìKøT‰û»åì» ìvæf ÙÇ‹#¤Nöï´‡þŸý>RôG è»ËÑßm}F(4fÊ+Ñ·gV¹a•£û»[-Í,S.Š¡/1_š¬Jñcc”Êèh…B­Œ‰øÁ}5Ç~]NªXì3`nß¹g™•?wûíÇþõk°®õu5°­Ey]ZjR¼22ôø‘{vn£Uõ÷õñšï9göÌ©“Eö¡Ð† 2h`ÿ~ïBîû–î‹ð›Ó/_ ßÜ|BBÿÝ~ý2tØû~„³„èO˜èÏô½||ýáÖ¸qóö]{=¥ŒW©Ó2 yÅ0H5u0Gxk½eõ8†ú§øÌåÝ6öRXê×TUœ† +-áÐת©Ap c`$•Ê˜˜XœÆDU2»}feçe¹ßÐ÷O\#J~ÄE²3Ÿþó*öaŠÚ¤ì×Úd?ˆ±ï7Gƾ›«„}*}œ¢ßwïÖɾã«èwëŽûú úgCEô]Ý8ô©Îý «è—µƒ¾tT_'PøQåчЇa…¨‚ýjÄЯ­ÁÐ/)2IW,!ÄVDEFFЉŒŒRüqñ‰IÉ©š4`?×h**-Ã؇»„Â´Ü¢Ë >16UǪo3öa§Qì7]``[+O—æçdehS`W#B‚ïÿ†V50ÀÏכ؟!°«úчûƒè'É}Á}9ü¼üVNW3òyóùЇ;c¿ú0ô]ýÉ€þÏù^Þ¾þÛvî9pä8ŽRRŠV—•›_Tzº²ÞÉE˜#|%mÜ+q„Ô^ÊK õ…wr¹o`Õ•Hh&2#MCG©ˆb¦QÉgˆFtŸrÿlÝ9,ø\¿ÙÜJ›tOÞO¿ûð¡âŸ¹öý‰}`Ê$7×ñc]ØÍ BdŸb¿“}G:æè¿-AÿïÈÐ6|ÄÇ#GÑ¢ºMšè{úþoˆþ¿ýǸ{)$U+*D$JÝY1ô9óUI°aÊè¨Èˆð°°ÐÐÐÐаð€ÜOàØφ§†%ƒØ‡ƒ§¾N}÷Þý1¯¾eì?|ú¸®$aª*ÊJLÆl=ìjB¬"üä1XÕ[ƒ6¬]à·Ä{áü¹û´ªÎŸûïýe0.+Ë}rÿtŸ ~~&¿\᯺ ä³ÌÍg¡“—FBÿSý©„þBï%~k7À,}³ÿppH„"F)CŸc„IªÀW‚b¼~µQê?vŒÔ·¥>{%¤>N%¥~Yi‘ G’Ðg©øûuÕ•Åü‹f™IMÄ]ã  +-7@\ƒ‚\¢‰‰Íh…Š5Z:ƒ%Ž”X¢´Ð¬ ÍÖ@³v²Ê*› ‚wA†t„(‹¦Ô¤25sι÷õ{ 8@’øÀ­JªB¾¼êû?¿û?IÈ$œ8Šc"À…_·~V`Áº“tGé~Û7ˇö%Ó4ø8éæI§çχÅ~0gÿÈþû"ûf æûoÍœ>u +-ÄèMbÿuÎþ¸1öGüôG<¡ÿ:¡ÿ&L딩ӡŸ!ús¥è¿/¢ˆ£üÿCS*Ä´—å´Ààâ^JE¬â\iI‘0aɉZ˜¯˜hµ:*’(µ:à×Àœ¥¦ûg +-KÊÊ+«/bÙ¯o€bŸÆŒõÿ[ÙÔÓ…ìô10¬Õ•åg‹òs2S“5±0ª +-?¹ÌÝÍÕÅyÿž/>ÿÃöm›‘}Uk«%–f 晚Ï™m8KW÷u}_(ü?“_Š¿È=Ÿ‘¯g¾®èÏ2„$™ÀÒhfa¹ÄÊÚ³´~ã¦-Û¶úÎ.€¾LB¥ŽÓ$§Î9STZ^YS{nßaýíkTT}‰úì!þ§î!îbÚ¿®@©(/-.„Hf¦Ãæ‰-;ˆš¨"XD´‰ÉHÁ}¬ûy݇ ´^>œ¦ÎññcãÄæé…”ýŸ~Eö¿äìçœN?%°/×±ï„ìÈÙ_ÞŸý RöDZ?âg ô_ÑŸ@èÏàèÏ7³X¼l9GÿíŸìØå¤C_. õ,Gý» ýB¿÷ Oý.(TßB£ºßÚÓÕÀ‹þE(úegiÀ˜ùš$?*2B'<\¥ŠˆD÷´Œý<üðóUXöéÃa¾Ú@ý‡’fÉŒaõ_Zö»x³dÆ\¾³ZR˜—‘’”¬ðõòpw;ìâ¼Od-cébd†U¬û辺¯?É/Á_Ê=_B¾Ô|¡èC’ýÅK­VØز,ú_ìÙçìrØÍ]&÷U@–b5I©™Ùù…gÏUV_ i¸«÷ 2âU¿Ÿút#Nán>›ëë¨êC(K +-Ï0ô“´h>–l"b÷ó ŠJJ¡î×èê>”˜§¶öŽÎï€}ú%žÐDÑÞ#©!ÏT_ö{a?>&’³Ùß ìï°QšÏÙŸÑ—ýWöÇÔ¹£§þÐ_ªC ¡¿Ñ?ÊÑúOžýŸ¤è¿` #úð»NÊhkK³Xôkª T•ÉËáæÓ|øa¡!!ÁtBBBÃÂÉýx YÆi˜±âRVöoÔI«%ªÿdT¨ÿò²Èðj‰ÃJÈ\¬:_V\›•ž’¦ ö¹>è¼ïÄþ6ª¶6+`V™/„a¥º-Mpúþî>À/È/â¯;üÏ$>ÏÌŸ 5ÿ­ßCÑ761;¡ù"ˆ o¯þA@ßÃËW¡ Ã,¥ddå””a”à>`gÄW¸½S¸§,E#^õÿ-½Rÿùs¶}A!¡gø^Kó݆۸}ÕžyÙ§}I&ÃB!•!¡¡XEþH¤–"™›Ïê~5¯ûwh¢î·ñ‘ê‹Ô¯Á>-ŒýÆþÝAØ?ÀÙ§,9ØõeÚÔÉ°?VöGðô­ú ý×ô &Mž: Ð74’ oçÀÑßé´{ïŸHÑúφƒþ¿ôЧx‚rÄÕÛB¿£½JèSчNuîlqA~nVf:3?:*R¬ +- Tà R‡€ûQŒý´Œ¬\¡ì_¹~ëvCS3|:ªßÕóèñ¨R_¯ì ìK”ùº¹©¡ž”©*/->“{:í”6>:"TàãéqìÈზ²ïho»rÅòeK,Í¡î›òºßÇ}‚_”_Ä_wØ_ñYÍó'éÌçEß‹¾åXWÚÚ;öEÿ˜‡—O€2,"³”• ¯0¿z„ïµ ×ñý“QSõP_¸¶|Á +-•¹—¯êJ¨"…ùÐDúÑ`~†R„G ù~ŒdbrJTØ@KÊ„º³®Ù‡÷‡ +-öÐ.‘ý~cõ3Øö2ökû±¯ð“ËŽuEöw;í$öׯq°[ ì[Z`062œÅØ7ØmŒý?CC–¡‘± ô3 K¨g+íÖ¬ÇA%ô÷8äzô¸Lî§&ú/~9úTô¡ÝR<Ûî·b>êën^¿ +-EÿBEyýl¯$6^áa!ÁAŠ?:þþŠÀ p_©FöSÒ3³óXÙ¿tù~|sK+|{ç¦þÓQ¡þÀeÿJ`7>ÈL3Î*cælQ~NfZ²6NäïãyâØ‘¿0öwûÖ9ÚìZ[-±´0ãußÈPâþ¤‰~Q~þÂaÄgäƒù“Eó xÑGô­¬±?8®ÛÀ²ÄÑ?rÌÃЈŽÓžJÃ,ámÔb”à6î±Ûèî},¬^£¡ê¿D}~l÷jj¬¿…»“ªH¦2F æcQ@.á_ +-½*î§gfIêþ•k7nݾÓØÉ„£ØïˆýA'kö_ …}x±Òˆý0‘ýýÄ>di#±¿‚±oj2Æþ(<¢ÿªý)ÓfÌ$ôM }+†þF}ý0B5Ÿ¡_; úB6iZúØHDô»>èü¶ý›¿¡sTôo\ƒe´º +-‹~!ý´”$m™Ó¨ð÷óõññ–ãñööñõóW*9ûÚäT^öñͺz£îNã_¡R1õ{ñ½ºå(Pÿ%eÿü äLëWØ.g +-ó³3S“5±jUH¿·Àþ`Ç'[?ú`ú5«WÙX[-]¼È|!«ûsf‹îKàçò#ýoèø'ìß`à3ñ9ù ÑüÙsxÑ7_´’d³jµÃšu>øh+lŸïæèŸðôñ +-PÇi“Ó2)Kì ®ƒ(ÁePÕ׉?Â#]õUŸV¯Ûlõ:_VR}9E@?D‰Ec‰Ç" ò+ƒCu+hªX÷/ÔÔ^¾z~ŒÆ&¬¶öŽNX}º{èd}Š¿„ÃgÿÆ>ÍÖØFö}å2÷£®.öïÙMbgßj©¥ùÂyŒý™3¦M‘²ÿêû#yú¢?N@ÿ7¿%ô'JП·ÐúGÓ–mÛqP }w™ÜÑ.ú?òqú”ËÐïãý6ˆ&GÿúÕ˵5*…¢Ÿžšœ¨‰‹!óƒ0[r/OÏ“'OÊàO/¹·¸ªŠŒŽM€ï§²_v¾ª¾ÿV}cÓW ô©îQ¤þ@e_pæ1¼ƒ:Ù¬b½¼Žì4…yÙ©IšØ(UH À¾ó>UbfõÝÕ¶ÐÑ–ñºojò¶±‘è>~?“é'ûõÏïø$>‘5_4ßÈøm]Ñ_;£íêw1J„¾“>ú*u¬&953;¿°Dxë!J }\¼¾çèCŽ~ñª¯¯þ\}\½è †ËÐß¼ êg¤&kãcÕ‘ºXz˽ ˜ž^^ÐF Œ`(ÉýmRJ«û¥ç*ªª/}yÞÀú-'Ÿ­žÞGÀ>ý(C¯TÒNÅÆk0ökDöµÈ¾’ØwsuqæìoFöí!I°7ŠìOö'û ¾Àþ¸1öGæôC<¡OUŸ£?½ú¶ö8©›9úÎ.®nî2/_…Ñ×þïÑAè?{Jè÷öúÐl)˜ õu7A¹K5UçJŢåÂáò'òOÊ}Âþ; +-ö'ÔG‘úcÑÿËdD ¯>o> ¯£o¸è³¿š®\cf›ºÅÑÅ ÑŒDÿ”¬ø,¢‘¢Eÿþxè¿ðL27Чd&©n8”ÃÌTô÷ݤ跷^nj¨¯©‚))’‘ÐÏqŸ…Ÿ‘éW#ø+5â=#>K>1>˜¯¡µPGWß„¾éÊÕkÍ-,­¬m7#úî^8KJègfçæÀ­«œ¢OÞÄÍ>D^Å03IÌËxóè?Oýþ>P³‹~€áM”`êg9tcÐóa.äÒPI)æÈŽ¨˜Øxêþ?d&¹_xúÌÙ²òJÜ®æ–6`ÿ:²û5ˆì?P°槱ìÿÎŽ=SÚ±ße¿•²_ƲŸ–’”AØ÷!ìoúb£%e1eÿÓùóÔ?šýáŒépUœÌ²ÿ®œý‰Ø½ç-åԧ迫@ÊÔýýO5ú‹)ú–ô}úÑñ I)i,úeýÖ—„þ³ñÑŒè?€¨ý~f²²†²£½„««©¬(;wæt!†þ‘ÃéÒöíMÚ æGïˆ  •ˆCD"!‘(D*… ‹Fö÷îK;€±ŸWpº¤ ³©¥½óXsû;UtìSið +-„»ŠìãªvûõÀ><’üÑìC¡y¹»:C¢ÙÚl´üÜ|Í}pß@á>ü~F~ Ÿà/÷_þÿw#>!ŸÉ|…ù`>„þòUkÖ­ÿÜr£íæ-ŽÎ®€~ÌRhDT‹>^ºJË™KW'Þûè­ëÁ0êFÑ'ƒô‹jªnâ«‚7që[¸vÑAR,ËÇÔOߟ–èã`F„CŠˆÅ!äˆ%P#á‘;¢©û#ebîÈŠá;x¡º¶¾±©¥íJgWwÙ°Aü>x8üz؇›#e?'ëœýм9z¸9;~¹É†eßØPOg¡aaÊhößž`ÿõžè¿-GÿýèÏ¢èkéè³èÛlúÒÑÙÍÃÇŸ‡‹—”œvðPVE¿‚ÔÙ £ÿÛãøëXô’Ï#ƒþ]@'Ñï¼ÒÖÒÜx±¶úBy) %älV†¼§pµÂ¤±H,ðÉ‚…à~aWR2ÆþÑc'òegÎ6˜˜ð°0UNý±ì³±ÿãc²«CtU{¯Ã¨¥©±¾´Aö)ØÇU ðóöpuÞæ`o÷Åßÿ¶s¥)¸obld ‡îkjP÷™âgå'ö3ü3Øï|*>SùÔ| M4_ÏÀÈØ͇Ð7³ØwF;{‡m.nÞ~ÁÊèÍ=™š¼@¿¾d–0j¡i=fSÿg•HýßP>Àð&`DoߺAÕo¨«®(+)*Ì;žƒ©¿oo"3™¡’˜Ì`˜MøC9"‘â\¢ûIØ#é˜û'ó ‹Jί¨ª©ohºÜÚΰ_C\²{À>óhžüaö}1ö;•Ø/dØONJˆöáæÈñQÚJØ_¿nõŠe”}-–ýi +-öߟ`ÿœç ¯öÁ´3è/^²lÅêuë ú[]=|8a÷ždÌý#P$§à;VYS×p©¹µ½Òª÷Æ;~ºf÷}˜Ò‘§Ã.Ús7í²ß¬`¿]Ò’`–BE|Ç›°og³qa‰‰±ž¶œý™À¾Ëþ{ì¿3úïFÎÜ?ÑÐÒôM(ú¬lìúÞ_„u–˜¬Ð’¢ßü*Ðÿ7Aÿ S³ÃÌ0ô÷Ý$èw´C…4ÔÕTV”AÓœ:q,k +-k÷Îø˜(4_$€øÜÿn`@H؉O@pÒ3³só +-ŠJÊ*ªë›[‘›oûúQSlìÿL¿ŠOð›HîA  <œ=ÝW;Ú.e?q'šT, âr|<¿Úîä¸e³ æ¾9äþr¹ûúº:Ú µÀ}ÿ¼¹êêsý`?âOø'‡üczàÏQWŸ;æk-óõ±óÑ| }s }»Í[·åéÃáò…bi$„}‹>|{»‘6zk|8üÃ£Ç ú*“úã©ÿD¡þw·o~CÔ/+ËÏ˘JNÙßÞèáRM>Œ&7€(€_(b˜û™Y9ÇóòeÅ%¥åªk/Â%¨MÎ>,Þƒ M`Ó˜›Ð+`¿wûE#Øö¹owW§­öv6VröûŸ|™Cù ’”%“ˆ1KF]ƒY¼ +-= ÃXW]Y^z¶XVw<çhf ýRS`~0?ˆÇõçøùúúãëÇñàòƒC$aQ±_ï‚Ø?x8ëffiEU]üŽ«Ý£ÕÇÂT)õYöŸ>ebŸ²a>‰W¯´]ƇìËÙO…'&òyþ¾^î®.Û˜Ü_o†î/#îèëéjÓàGø©ü„~‚ÿlò`þ‚ÿ‡àñò5Á|]=¹ùËÐ|3yè;lsqu÷òõçñ…’°Èhøð&A.\W»{°g}`í¨FQ¾êªÿOTÿz|{/Õ×\8ZæÏÎÌ ¯ >†  æÀlúÁtúúá`ryxE÷£bâw’ÜO?|$;÷$ìY <›ªÚúFx8W:!LH_ Þº;–ýÚ¶ÿ™ý<Â~jrâÎبp‰G÷íNövÖVÌ×®Z¾Ù×ÕÖ\€ìÏž5sú´©jS&õ ûï(ØŸˆýWÞRVI}DŸ¤>ƒþ‡}M‚þgK—¯ZkèÛÚ;8mw÷öƒ<ôc ú€~ÞkBHûSöÞÐ÷ƒ8ˆýÎ+m-MkÁµÒ’"€-7;ë0Ȇ¡³#B*Á½âù>Þ^žžžž^Þ¿?—²Ï˜ƒ?åÄ) §¼ª2“¨«@Õ7öYöɪ!û·à&t²_«Ä>˜“ŒæD†ID‚À?o·íN[Iî[YZ˜¯[#w‘‘¡ ~Íÿ²_çAQŸgÇÇM¦ñÖDñà5(UP‰Š‚€À.ì ,ç +-È}(ž(¢‚ÜÁ‚ŠÜ‚ B`‘Z¨'Õb‘¯¬¢ª®¡©-5ͺÏ7n¡ÐçÙØÚ;:»I¼|üƒBqÚŠÆ@ý+WÁµë7nvýÐ拾ęƆ®þ“ô6Ñ‘úÏ9õï0õ¯5Ö×T–•œÏ‡_ %1Rÿà¾=ÒÃéágÓYŒË™N¦&¸¿;|ï>ÊýøÄä3éY9¹ù…ÅÊ*ªjëáM„»ÖÑ ûs7ˆØ§aH*öÈØoûòZ#±_BïWêéSð~Úì{ïtûÛ·mÞHì/×ÖTSY̱?“±?aûÿÖ˜©?SŸCÂDô«¨ij3ô7nFô­mÄn;½ý@?¥Ì@ôK."ú×¾l“¡ÿàU ÿw¬XôŸ>yü¨÷áƒ<†²ÍM õµÕ—.ÃÜ™“•žšœK¡¿'<48ÀÏÍwu;9:ˆDö°D"G'±‹›;Ü-?¸ZûGŽÅÆ'ÁïRtáRÕå+M-ðMnvËÔÿšsÄ©?û°I8 õ²@ë¢@“g?!x£05ƒ|½wº»89Ø (÷6oB÷õÈýåKµYð#üRù‘þyØý´Hz\ø7_*>#3_{Ùr2_Íß´ÙȘB_`çàäâ¾ÓÛ7 xwDäÁ¨èãq€~ÆPèß¾ÛC—ì,É¥úC«ÿ¦>üw@ËhäƺšŠ‹%…y9™iTȇÀ´à»Ë‚{ÄÑ–#%‰;%‰PHXåþ Øž”4¬¼‚¢Ò²ò*… ±Úpê¢aˆ‹,6± ×÷êÙï²_…•OìÃØrØö%nb‘­µ•ùö­Øÿdîl`Æô©S&O”±?žØ;Êþ›Xã?iÊÔé3fÎúhöÜOæ/\¬¬¦èë®^èoÝnè‹Äno¿ÀЀ2æd¡Ÿè—Wqèw¼ôÿ&Eÿ™ý{w8ôÛ€´†ºÚ*:‹ +-áf"jqRú»Cý}¼áZ¹:Ã¥²·³³â²µµ³9:9»ûØšûÑ'âSÒ³áË”^ª¬½r•Sÿnσ¨¾ûl§~ü‘=ŽÜ6á.É Ìö«ýbš…Ri‡¢(6ývyz¸Rîó-w˜šlã܇Þ×]¡³œ?ÀÏÉ¿PiÁ°ðGþ¹…€ûùð¿”râ#ù,óuVèræo31ÝaɧÐwõð„77$ ÞÜ(T-9U}»ØØØûÕcêX†~ßHBÿߨÔ_@CPY\ûE [±”úðèúí’žNO;[øgMâÌFQ¿€àPÊ}…’Rh‡°±Ê+kð¾µ´¶_‡ÊBöïËØgÑwƒØÿù¥Ùï–²__[ÅØϦ/sä`dDh ¯·ÄU,Z[š›ûkVëê,ÓÖPS^¬4Øÿˆ±?‰cÿýQößäý÷ÐÿÐW"ô—éú6o51·´ŠÄ®o_@?ÐMÀ:ãЯ­—¢ßýjÑïëGÿÏÏè>ü#  Žàëím-Z] B +-ÙÌ´”¤,Y +-}.¥àV9ˆ@|5-¸ïW˃Õæ6¸$§eÍ/,)«¬­¿Úü?£þÏý[õ½l£àq” 4Æ>Ö~q!±Ó=Œ˜›þ>^Ê}¡5ÏÂ\æþZýÕ«t1ø ~©üH?ÚkÜÂÏè=€/ŸÈÇÌ×]µZ­Ì|s žµ…>÷âîÇ”O$ôó Ñÿ=‡þ£ÇOXŲ³˜É¥ŽXõ{eê·45\®*¿Ptî·0k%ÅŸˆf©O{ÇÓ§ÀN¦ªàÇYÔÃÓÛÇ?rÿðјXÜ£ô¬œÜsçq“ª/×76µ´Ò.ußbwŽGvé¾}Õì÷Ü¿{kû…ù89&Ñì{I\DB¾¥™ÉVà Œ}- UåEŒýgΘ6u²Œý÷†bÿmëøº ÿ.¢ÿž ýÉS§Íø€C‘²ª†‡¾¡‘‰™%_hïä*ñôÃýc± IgÒñ¢@ÿÖÝû=/ƒþσÐÿŽ,{è?&ôïß•¢ßÚ‚ó&påq.7‡ysôð +-}?¯Ü¥ +-¬ù<ž-ßÜGöÝ°7ƒðûDÁ÷9š™“êWÔÔ76·Ždõ‡dÿû°UŠ7Už}ˆÒä¶)ŸFÌ}‘­€o…îoÝ‚î¬Õ׃à_©Cðk1ùUU”•Ñ~X‹ä~ï••UT™øZD¾ÎJÈ|½5k úÍ·â lE,ôñ½•–’– SãèÃa’¢O–ý0¢Rÿ…êÃO€êßFõÛZš®\®ºTz>ÿlVzJbÜñ£‡öcêûzÃù;Šìm¡Høp@y<>N!F‰ØÕ]B»$}ãN>“ζ©´¬¢º¶¾¡ ÷©£ó&D=ÄþdŸÛª÷­¡Ø§Ôêö[8ö‹9öãcapŒ  ðõòpu²ð-ÌLŒ€}ýU+}uÕ%Rö?Ìþ»RöGcÿõ­12õ9ôÇ1ôõkýé€þÇsæ}ª´h‰ªºÖ²ÏV®Ò_è›YðöN.^¾!á‘Éxýbý@¿“¦Í_Šþ?^€þ·¥ÃûU/W°Ì²Öæ¦ÆúËÕ„YnNVú™Ó§âd wÊÓà ͷÚðyV–;hYXXZñ¬B{,N]BÂöî?}¾PƹÅ+jê@ývPÿÖÈV û}ýìËßThŠì÷Da!þø:ºˆa£lÐýíÆÔûë Ö­à—Âòkj¨««ýÐýÈ¿lÁGø£ššºº†&‰Ï‘¿JOÍ:ƒõûÍ·×VÌ…~HØž}£¢ŸLHýîÛr1<ú#Týž{·»oÞ(¯^©­dê§%Ÿ:qäÇ=·vB0¨¥œMK¹*q¥ +-Tܨì³yE¥epëê`§Ú¤ìý£©èéìÿô‹Ùÿfûíð†û49Â+³Ë±(˜]B|¼<\‰}c#Ãõë€ýÏ–2ö?7çc`ú´)“'M$õ‰ýqŒýwFÙkŒ|ê÷£O©èOAôg!ú -QQ×\Jè¯ßddljÁØ;ºxxúú{}02%=ël\TB¿©¥­}úß¼úxò8ÆúÑïAô»nvbÀ675Àé«(+-‚2} PæˆÅGòÍÍLi™™›[Xòø6À¾›Ó?hwľCGÇ%¦pêW×5^kmïø]ªÿ§aÔkÔ Œ}Ü0|$¹ýúúù3¸©½rìSí×û8)<,÷%n.Nàë}pßp#?ÿ +-”š_[ í‡îWGÿÙÂÿ†?÷ZÚØø þ +-$µ>eþFÃ~ó…vðÔºI¸Ð—KجœÜsçKäÐgcãÀ‚ø¾¯oàYzËèÿgê7_­¯­,+)ÌËÉL=‹H†A{㦋hÓñ€š›Á27ßÇÓšÜïß+éP”œš‘}÷êb9íÔVûõÀ>ݼáØöò ˾ÂabìÃÅóT@ì'ÆŸˆÆoàãéîâh'àY˜oÙı¯©®²dádÖLÆþ)ûã‰ý±£ì¿Î¥€þXB¼ý  ý™ ý… ý¿Ñô·›îàÙØ9º¸úÁa{`'úXgЊèC?}öèÿ4úOŸ<~ÔûOC¿󵡮&ÍÒ"8|٩ɉñ±1ÿb¿Nƒ¢Ì®0WÍ^3UqßfFÍ}_'î²tÝ4tÓ4«²*K˾È* ( ²*È* +- +-Š¨ +- +-‚c’2fʸMYN¢V*V,SɼçÞïënQgt¢NyIÿûŽç<ç=[R’È1ôùHa¢lTJ¥5{J•ZÃb§»§¯6(42&>)5}[.>©¢º¶þÈñ–¶Ž®®þõ×Týþì‹·›Ô°I½ÛýnÆþñÆÃŒ}}¹hGF…‡i‘;Åz‘û +-¹ÌÜLbj ø—/[Âäýd?ð‡þ†?Ì£„ðñ‘òŒM)æËzóÝ‘_ýµABÐ7€¬JY‡}ÃfÒ)öøñk…þs«²‰Ô¯,-B4ÞºeÓÆبpŠúÞÂ¦Õ “¨Ð£JÚÓ–ú“Ü÷ôæq?*&~ ÙÒÚÞÙu®ì åºy›-É¿÷gÿÙã÷“ÙçâÀþªò’Ý;·Ó'}|’Ÿ‡Û*G•ÜÜÔhù’ß.˜7{Æ´É"û#G :dÐ[öÿo@ô?Ð ±°H!èoÍÊÍßµ»¤¬ù¡¾¡W£€þeôïrÄ„fz,4Sô_õijÔïíî„ú‡ì«,‘Y›“b"Ãõ}p‹®r²·£Tbm…UX¡?•6jýšôÅ=I[25M,XeuÍÁCGŽ6µ´žîÄð‰»v]dÿÞÎ>Ÿ¿çÀg°¯Ï¹zEöë`öJ +-é›h“}­¯‡ë*ÊJfÆÙŸ;kÆT°ÿåø±Ÿqö ì4 û¯ZÉ_ÙÓG}=úöEÌgcÇùõÄÉSgÌÑ—Y©lV¹z ‡GÅýŒ¬í; Kʪö¨×£éê7§?ý÷GŸ²Æïoß¼®C¿÷\Wg{k Ń5}FX*%×È°` +-úžî®.΂_ +-K¹Lf'“É-Ö>W¯ñôñÓ‡ÑW¥eæ䖔ﭩk8Öü¨ß?ì?Áþ½'Øïí>ÛqúTsÓцúƒ5Õ•e|Qò¸MŒU)ºïhô©´VüfRÀo´R ö/^´üëþÄK8ø+ˆ|©‘O•Vkìuæ‡F ¹‚0}!º’aõ G›šOî8ÛÝk€þmú,¹ê›é¿¼™^=úÏ£þE¨ßÆկس{gî¶ôÔ¤øèˆ@D}ô¨“+5õ({”Lx0Á=ºÆƒâ~Phe’x}¶'Å’Ñq„ù»úØ¿öï¾<öœŽ·Eö1Ýœýb¿¬¤pG.­20a`ßÛÃÕÙÁV¥™™¬\¶øÛùŒý _ûcF>lˆŽý‰ý÷Dö߆ý—ÿú¡ÿ^_ô‡ >rG¤©ÓgÍÿíâe+M¤2…ÒÖÞÙÕÝÛWD<&oÎÈB*.úµh;†~·ú· ÂÙß‹þc}Ðà~ è_ãè3À:OŸji:Jè0–[ɯ$ÄֈР-}àEv±Ì*ƒ]fR©Ô Éä˜*=f +-#“@L~A±Ný³=^sõ„ýG?ƾAÕhUÒ}TZ\¸3»RRB\tTxhðzrßËc ö¥£p$ÑÂüÊüFF+W¬Xü—-eг‡–/_!€/‘HÍ,d"ùvŽÎ.ÀË‹Ì_¿xÐßYX\ZNBp=ÖÔr +-Áè_ꇾØÍôêѪú·n\ãêwu¶µ?R_[]±@f¦¥$ÆQ,öCÔ_`"ö¨…9= *?‘P:÷C±+é>ÊÌÎcUÏ£“ì<:Oì_!öÅÜuホýG/Äþ§ãÎ>]Ž” j÷U–ìÀøÑ… »lµ³½­Ra!åìÏ™5}ê$ýQ"ûŸ|ÌÙŸ³ÿÎ[ö§GÿŽþûý?ÐAè#ô§LŸ5G@ßB¡TÛ;¯v'âb’7§oËÝQP\VÉÐojik?ÃÑ¿òôpöBèßú·€þwWÑqH­=úÔz`ÿÞ +-¦WºnS"2kxH`€¯ Q|žˆ|©Ä”= ¡V*µÆaßk­`HD4¾+#;ŸUõ¦©ß—ýÇOcÿÒ…Þsg… ép]- +-‡m‰¸Ê¥¥nJLˆŽ4pŸ~ÀÏb(]Jý&ÆÀÉoû~066áàc­ÊV‰|[;ó ÌŒŽMHÜ”š†ÐŠ ¿›§ÖºÃÇN´´¶w²«è_ýG£ÿêÿž_ýò’ÂüœÌ-›(P*F2±µQ +-MŠ£„¬†Xš*:“Vá"õ^ç¿>8,2:'RZ¦p!aY¢nÇ‘»ÚÏtõœ¿(°ÿWÎþ`ÿÕíáKgCH½Ô}­„¬«­®,-.ȧìG†‚}/÷ÕNöj¥¥…ÔxÅÒE çÏ™9}ʤ _}1îóOÇŒ1|èÁƒXØ×±ÿî[ö‰×ýwú}õþPBÿÓÏÇ}ñ¡?sμ…‹–®0–ZXZ«íœ€ãº€@ŠÄI©@™¸´²º¶ŽÐo%ô‘ÎÐp/ýG:ôïs»¾¿uC‡þù–3š7Ð]Ù™H¬ã¢#Â×û¯óöX³Z?NfRÑ*#¢ ITŽ‘²µwrqóôñ[õã“R3²òv•Uí?Hê·¿êÿ4ö¯ûÏŸë:ÓÞvòÄñƆzIUå{°0ósQ¼-)ɉñ±Èý@­¿ïZoOw7W¿Fm£"ù-ý‚M|‡¢šl•U°ŠÀ—3ñU”ò‰|W7wOïµ¾þÚ@n~|brÊ–ŒÌlôaWuÍA!³¯sç }¯ÐüÚ¡ÿêÿêw0õkö–—ägoÝÂt ô_ëEQ_ú”ô© mOº–(ïÛÚ9°¸¿ÖO±!WRI»vsöq#8‰u©«œ°.ïèØÿçKb_h¦›7Ø‚ýýÃu5`¿¨Û,=5)^ü0';µµ¥¹„±?oöÌiS&~ÃØÍØGØØÿàIö_±•¿ž7 ú1ô3hÈÐa#FŽfè3qÊ´™³9úsKk;'–ˆC#ÉÆôÌœü‚¢ÒŠêä Ž~GÇåÍþsú"è?¤f{ôäâèC®ÈÕzòıFÖ}€«çeÖÖ´Ôä±"Bƒ´~k½ÜÝô5j3ÃdlÄr)%S#cS ±¯´AØwu÷öÕ‡oˆKLMÏÚ¾«¨ê>Ö|êPÿ öÅêýëIö ‹×ÑFgÒ‘C¨Å}”//'kkúæ”ä†î#ð ð;Økl™üD¿¥œð·ÿú‡?Á½Ü’ÀgâÛjìòó Íߘœ²9}kVNòjIYÅ^&×ѦæSm,±^â‰õ:O¬¯?úÏRÿ/¤~OWGkó±†:¨_\—±99>:"d½Ÿ§›‹£-µ©¹T‚.5.'cÀof÷Ñ¥ˆû®k<}|C£bâ“°3·å€}œIؘ`cxZw%ýYÏþßîÝï[¼gÿØgéë—wÍa ²د(-Ú•—“™–’D_öÙ—ÙXËÍ%ÿc¿¾ƒšNÓŽÏÝz«³;sg/»–m*vº QªTé= %ôÐ tB¡0HA@lØlãíy7WƽuÝÑ=ï›sv{ž÷—Ä€k[Ùœáq ü—Ïûù}Ÿ#43#Ý}{tÔì¯_·fõJû+沿û yž§>A¢¿\þJ +-ýO·lôuöìÓ5021£±±wtq÷òƒ ŽŒ¥‚¸¨´¢ +-Š¸Ðïƒår#ãÆÍÛT!úýiФÎÕûª\½ Ã6>:<ØwRÙÙÖ,¯«•ˆËEù¹Yé)œvtDX0ƒ„¾«³#šäÓ,ÌñXXÐ[µö\0öÉ“˜œ–•W$UË[ þÈ8¨?}ó΢WÿsÔ9ûÚ‹$ÚÕ©‹çÎâKs s¿µ ž`u¥¨¼´¤(ÜÏHKMæ$Ƴc¢"à üôÀ”ß›ÐOìwqqvÿU>;ïÐ{¾7ŠH'ä‡GFÅ°ã9É©i*óKËEUÕÒ:yS+†~ïÀÐéÑñ³ç.N]…~¸}÷Õè“iZTè¿Výû¿×R¿³­©®F\Iœž’ÂÀÔwuô­­pLi4Q ©:N\Ý< ÷éÌÐð¨Øø¤dH¯¼Â¡¨ª6%Œ/X”FÆàñ]¾z}o"Åþ7óÙö³Ù×^ÏgÿòÅsÀ~ßÉ®Žy]M%°Ÿ—­~¡úy¹»8ÚYöõu÷íÖÙñåçÛ¶|ºiãúµZì/Gö—-±¿ðçWÚ©¿Œ¤¾ú«Ö¬]¿q ÿù—;tvï; Oз¶stqóò d†FÄÄs°‡a¹¬¬Ý²£‹Bfm>úçÞÓw@çìé?žPƒ†èÿñˆþÌôÕËq±DôO(}YM•¨LP˜—“™–‰ +-eÒ|½=¨‚ó‘|³C䘙™[Ѐ}[{çãÞÔ-›–Å/*IdòV…òåêS±¹øÔÿï‹OðUìã„]iâÌÈ©Á¾žî.E[Kcƒ¬VR)*Óvƒ_0“DÉôƒýîîÀ?¼ðà7ø…xàñƒèÌ`ù˜ùÚæ—‰*%µ²†Æ–6EWwOßà©‘3“«ÏÑÿæÕè¿Çê7ÖU‹…ÅyÙéɉì(V0ÝßRâÐ'ib†ò„vXå>É}ÿ F+2&.‘ËËÈæ +*«¥õÀ~Wwï>AÍ[“b.ãÃGß?~òƒ6ûot_ËþCŠ}¸Œ·gUìÃUìîjo›XY1ßh1¡Œ@_/7;kK‹C õìÝ­³b°¿ +-Ùÿø#ŠýßPìÿz‰ýd>7…—ž™›§6¿FV/oníèTbèB©^˜ºrmzæÖ’ª¯A‘¥þ[©ßÝÙÚ(« ‹ò²Ò’b#ØA~Þî®Nv6êA555Ð'æÄ}È'W7Oo¿@zpXD4;‘›šž•[P\Z.ö[Ú;»{û±À&᪖%ê.ûÚò©û0JwoÏN#ûã£ÃƒpÛ!ÀªÅÀ>?+,2¡°Èxº9;ØZöõ€ýÀþÖÍÀþ:Â>‰}`ÿCÂþKì/èyý}’ú€þêµë6lúdóÖϾؾs×Þýzú¶PÞ>Œðè¸Äd¨áBA™¸ZÖÐŒƒ68<:Ž[åô,© -ôŸÎ¹§?} XOxòø{2dúЩ7ý ¸TªÐo¬—VÃZY\ÀÏNOå&ÆÅúŒ@?oO }ÍUñð41Eö­l쨯G‡¯ÏIÍÌ-TH¤ò…²÷Uêÿg‘©ÿ¦ì?Bö5ûÒ,Nûp;Ûš¤Õâ²’`6™èðz€çqçc¶V‡ÍM õöïݵsûŸmÝüÉF`õ*ˆ}dÅ\ö—Ô_˜ó<õµÐ_AÐÿíïú ú_íصg¿ž±©ù᣶ǜŽ{øøÓCXQl@?3· ¤L,‘64·u*{}ˆ @ÿÖÝ{pSÕ36}2boƒþ?‰>Vê×÷ú©“€þP²³½ЗˆËK‹ós³ÒS9 ì舰`z€¯—ÇqúG-Á|¸IÆF†ä#û‡@ì;¹zxû£úqI©¹‚Š*P¿ã=SÿÍاž#lLþÓ}ò 1÷/ÁëslôôÐ@ßIe—¢ ܯ#î— Å…ù| ~„Ÿ“˜€Éò‡³(ûƒ™Lºêàg&3˜òžNćÈW“™ÏÏ/,ËÕæ·´+º”'û†NŽMœC­¦gnª¸úËß¼©‹ý·P¨¯[Ñ*—I*J ù™>?áç¥$Còƒül¤ìGüYaaa¡š?°{ðÁg£øIÜä’ŸÃÏ'™ÿÜü64¿·hxäÌ„þ”&ô+¥o¿ƒ­ñÐ_,€×«éüÄÈPŸÔ—J*…¹™©œ8ŒaJEH} +-}¨}r T“j£jwÌÉÅÍÓÛ/ŠŒ‰KLæedç–EU52È0ʼn“}ÀþØÙó—._›ÆGI±ÿ`ûÿ~wöÿ9‡ý¯ïݹ5sÙ95УT´5Õ×ûÅp!a—‰dùy»»:ÚÛ¥™™ýŸýúŠúÌã8>GLr“ü{‰-6:,E@=; EzQzg]ª°ôeuiR좢ˆŠ(ûE—èY¨¨gÔ™$we&÷ù>¿ß +-Üé¨Q'a†çvùoŸù>¯çýêéh©«Îž1}êäI/a±¯2Ìþ{Yýè«pè<ý±ã'Nš9 èË‹·Vm£²8xøèñŽÎî³þ~ùÛ BÿÙ{C…úèáƒèª3]§OÇs²yﮦíµÕeEò|iVz*fL†!óY»ÚÓÝÅÑÎÆÊ‚…þf>Ätuu=¸Ã´`!bßÂÚÖÑÕcõ:_¼ebÄÉ’¬&2$`ãºÕ®Ž¶Öf”ú(}6¬˜V>Qæ™ Q0¬æh{'W¯5ë6ø†„GÅŠS$™9y…Š¤X}ãÎ=ûÁþ±v¼œp‰ÒÃéÆÍ[ìÝÄíæïaÿ×—³ÏNæ=žý«—/ñì·Ø·«©¾¦²¬¨P–“‘š$Ž‰ +- òÛÀ~¢~âÒE Læ´5ÕÀþ´)`cŸÅ>Øÿd˜ý÷¸úSú|ê5zì¸ “¾œ2í«™sÔ4´uõçý¥¦ÔÁqí¿ ÐÈqRjFv^aQYE ªbß–V†þùKì)©œ­=y9ú¿þôŸFÿпpîë®SÔ÷ïÙÙX¿ è+ +-e¹™’ÍIâØèˆ@?_ ïáêdSdnÊBßOækkiijjjiióìSì/7·´±wv_µv^3BqÔ/äÕoZê¿!ûØоû÷zïÞ¡Eî_f¹ß=ÈýÛë¶UW–—• ø óóþŒô´T^~±ˆÙ/ŒŽŽÿ¸Ø¢OQQÑÑBa Ÿ?5-‘Ÿ—_ˆÌ/)+¯¬ÞV·½qùÝ,ô )ŠÓ;w{ïáÑÈêôÙ«ÑWNÓ½ïÜz+õë™úY’dqLD•°‡‹ƒ­Õ +-S¤þ<†>Š–6›U¸olB¹¿ÜÌÂÊÆÎÑÅØß#JLIËÈÉ+ØR²µ²†c¿¥•±[Ê=ØÑì{öÓ/4LÏ°ÏõØ¥ógºO·km9°wWc}MEiQa^6ZL¸iÃÚU.¸Ùè7‚}}]m µÙ3¿š6åˉ`ô(Ä>±ÿ×Áìÿe˜ýwZÿƒþBÿSý/F3nüD†þl5 -]}Cãù —p }6}Qâæt ¯(­¨©kÄS’ÍV×™ó4ZtVqTyôŸ¿j°ÞýÇÊž¸yƒ„PèÒöc/ЯÜZ¢(ÌÃS2%Q‚ñZ·ÆËÝÅÑÞÆÊÂl9ú†z"MM uu M¸öç#ö—™Y®´wróÂÍõEP_:TÕ=ûÜ=úøaíiÏí[ÿ¼ÞŸû]§;Ú·µ>4À} +-þ’"…¼ÅŸ›•™!!ù““Èþx±H$Š‹‹ÅÀ>ÅÆÅáŸâxxŸ”¤?+'—*_®(*¡Ìd~kÛñöŽÓBDÝîaFáÑÈ"迵úÅP?-Y,Œö‡ˆîÎö6–æË— õ õY¡Ð¸j R´iXõ çS¤,3]a¹ÒÎÁÙÍsõZŸÁa‘BQB2jLZ°¥¸¬²¦®aÇnê±cídÿÏþ³÷Â>KŽý^¾È¾û]8›­‡š÷îl¬«®(UH³Ò7'Š„ˆ±M>Þ«Ü]l¬VàGÎ76Ô×ÕÒPåÙ?nÌè‘Jö?%öGû*Ãì¿ãêG_…CÿãèäПÑø.èÿ2ý>þyý;š« gú­-„~C] ÐßR—‘–’ ÂK28M±ÚÓÍÅÑn%ÊiÙúúÌ|ˆ¯Æ–:±¯+ЧØg;¨ïíã õ3¡þÖW«ÿÓŸXýW±þCì³Ü'ö±«÷èí¡»”rÿ +-—ûJ÷_ô~}m ‚Ÿƒ¿°@FÉùÓA?ìgø'&&$àà>âÄ=¼OM“øÙ¹Ò2¿¦¶¾AiþaÞ|.ô¯p¡ëNOï÷1I„>ÒOCý·P¿êW—Bý$±0<ØoÃZ/7'û•f˳ÔGék±BÁ¬ª¿ˆC#“ù /55·´¶û«p0ýƒB#…qñÉ©éÙÒ|yqYEµ’ý¶<ûWxö{ß'û?+G‰Î'cÿ»kW¾¹xŽØo;r¨‡³¶ºgSš%IIˆû×{{¹)ï6°¯§£¥®:{Æô©“'M?v0ûý±¯2¬þ;¬èÔþgŸú£ÆŒ?aП1kŽº¦ŽžÑCû4 yðsH|DþE1#¿ª™ßдs÷€Î?Õ ó)ô¯²Ð¿y›xºß÷ó‰ÒÐ@ÿ­ÔobêK¡¾Häçì¬-L—.¢ÔÇÔŸW¶ú+…§‹–,7³°¶±wrûë}ý‚B#¢ãâ“6§ãpÊ‹À~íö¦]{Ðñì8ÝMQvåÛÈ>Nè}ÆþuŽý¯;;N´A“íh¨­B’åçf¢Èâ¢Ãƒý}ׯñ¤ËÍ’]nFÿ²__AQeiÇk-ËÙ§PŒÄnh"ˆ ‚d$(HnFAI +-’s$G%6QZD„A "a)†‘ÑÁajõefvöi÷;çÞÛÝPŽã*S%Uœ*«ìGn}ßïü¼¬4³¿ØØŠÕö·ð±¿ûŸx©O¡¿ÐǩѦЗ‘WÕÿ8û¿pÙ_þi ݧDîÃÇxñÜJ¹ÏAî³ê ø«*0üùy¹¬l? ì¿ô‡s‹<èÿ ýíxðƒŸ†Ä‡ÈÏË/Àäã̯k`#ó9`~72ÿ)˜2A‘’¡8-¡Ð'Ñÿe} ÿ ê òÔÏõã@ý _Ï çlO›èA«©‡ŠÔÀ¢ƒ3æeÊuè]}#SóÓ6vga9½‚‚¯ßˆ‚&KÉÈÎ…(Cì7!ö»W³VtyíÙ‡9B+:ñbtˆ`¿½…]w¯²´0Ÿ•‘’Èôõvwqr°E·›¾.ºÝ”*ÊËHÓ%ÄDöìÞ)¼]HP€Œý ö×æ|ý¿côÿ±UPÐßµGDL‚&-#§ªÕÒÑ346?mkïäâæåËôoDÇ&¤d°ò K+ïÖ5¶´s0úC£ÔH-èÿkз +-}`iøÙÀ“^T­M µw+ýÜìŒÔÄÛ·¢n„]ògx¹“è›èë?vTýˆ +- +-}è&Ø :F£IÂ?€­ľ2ñ¦12µ´±wvõd0ƒ®­wõ?ý·KoˆÜŸ{93=59>ö|dèÙÓ~pÿ1á~k3] qQÁ?‡¤ìOINNþ¸~$%%'§€÷ø,$þ‚¢b’|œùÍ­`~'Ñùý`þÈó±ñÉ©é™—sóX¦7ú+Ñÿ÷:@ÿÓÕo#ÔÏõ£A}&¨ïŒÔ7:yâ8tŠòá}rbid§ÈÉ+B§(«ªiÓÖÑ38eB²ïæés1 ðêõðÈ›q )éYÀ~iÁ>ç!—ý)´£ kÆþoûhKáÙ¸ˆ—tjbltèé“ÞöæÆÚ»¥…yÙÀ~lôëW/3}½ÜÎ;ÙÛàë =jTà•“‘¢!öwíÞ&$¸•dÿÄþfÄþ¦ ö?ÿpÑß„ÐߌÐÿ†B_@h›ð}©}r +-pÃ\™YÚØ9žwóbø_¾zÐONÏÎ+,‘jlnÇõthtŒ(„þ?ú¿ý5èwóÐ/º“›ž’w3êÆõà €‹ /7ç³v6§ÍMŒ ôtµ!›T•£Ð—• ¢IJJà#)ICìËAì+¡ûMWÿRßÉÕƒÁ Dê'rÕç<ê}²ÞÔÿcöáãâ]%Ýö¹¹_xjb¥ûœŽvüõµþÊò2¿ÉOП•™™‘‘ü§¥rüHOÏÈÈÌÌ"À§Ä/+¯Dä×Ö7°›[ÚÚ;8]÷bó‡ùSP¼ÐK™Gi ÿ1õ_/.¬R¿ÔOõï1ž®Îö6–¦§Nêjkª«*Ú¯@d +-Œ,> ?¸/+G澆¦–Ή“§LÌ,­Ï88¿àéãÇ ¼—œž•ƒØ¯®©g·à%í†4›š~9;Ù_Zcö—¹ìOû#$ûmÍ µÕ%yÙéÉñ·¢Â}†ç…óŽv6–fF'àUƒî7¹}R4qѽ»1û|ìóbÓ†úŸuøÑ'RúÛwìÚ½WT\RjŸ¬ÂþCÊ€þñ(€­íΞ»àÉð¿t%$<ê Ÿ•[PRQ]ÛÐÜÖA ?26ãD¡Ï¦ ÿ¡aúSô_“èOqÑÈ!Я(ô³Òáùx3&*0ÀÏÇÓ g¬ýS'õt´55ÔT” ô ›ÐIHˆ‹‹‰‰‰‹ƒû4:,‘<õªÑ74±°†Gé‹Ô/"ÔïêYêÿûü¹ÿ#Îý…ù¹Ù>÷ž|Ûû¸» {+†Šÿnue–¿è'ìÏa±XÙÙpP~°X99¹„÷…„ø•ÕwQå7°›ZZÛïs<ìêFæð™?3;7¿€CÿGþЧÐÿÏ×þÿ£~¡~"R?ÉðpuÂêëëâ>¸ŸèÈq|ðÄ’ïS˜Ù#êGµ`A )ö=¼ý˜—¯„„EÆÄ&$§eåäò±ßÃeæ Ø_9L¿ó؇كه'ãøØÚÓGmM 5ÕåŹYiI·ý+—.úx\8wöŒµ\pÀ¾úe¸àd÷Ñ%û;wlß&ì#õý-|ìoÄþ眿qÕ§Ðßècõ· +-ú;1útiYùý‡”TÕ5µu!%,¬Ïœuvõð¹xéʵ°È›·“ÒàõX\^UÇŽÎG0MÏ0ú3ýÞ¬Fÿ÷/C™@DÐïÃOÇv}M5B?'+=9!.&2<äj ÓêÎ4°(UˆRAÔÃʪjG×Õ742µ°²µw<çêáíë¶4":6>9-“•_XRÎÇ~?°?¶æìÿJ±ÿóòÛ%x4~??;3=9þØïëö[›êkªÊ‹ïädû7#îAšy¸:;œ±²0¿kà†“‘¦KŠ‰ûÂÛ…ÈØß`ÿKÏ*ô7cô©ÔÚ.¼s÷1 º´ 䯒ª ùkneëàìâîíèÇÄ%¦fÂÛ±¬ê^=»õ>‰þóñIr”Þ,½]þ–£ÿ+FOÒ—¢??‹Þ€þàJô ós²Ò’bc"ÂB®\fúzúŽö¶V¦Æ†úÐGÕU•!šˆÐGæ‹ŠŠˆìÝ»WDDD±O'Þ5Jªð®Ñ34õ]ÜAý`Bý¼¢òê:özUÿÙlj†—•—ûÐi?,Âí +-_ÜŸÄî?èï#‚¿“ƒàoif76Pò#úÁþÒ’ÄÿŠSŒ´/-++GàSâ7465· ò9Dæ÷õ >ÆæO"ógç¿[xµ¡¿Ä }r’¨QúêÑÿ/õÅ?®~O¡~V?* Ô÷õíúzÇiàþ• iäТ‰åKÈ}˜Z5cÚºz\öݽ|ý!ÎB#¢oÅ'¥f²ò€ýª{uˆ}´ªýƒC£8ÐÖ„}j”ˆIzO±–uæŸÀ>ÚÕž®÷[Ùõ÷ªÊŠòs2Sãb"Bƒü¼Ý]œlO›£+?lá¥Iˆ‰ìÙõ?öë<ª§u àøb9Z÷/iNCiÔ<(Í*J©”¢ðKs¢R”R)RI§DˆHe §Cudh4ètˆC¦ÄµÜuËZ×Zç>Ïûî½»t\çÞZt—÷¯úý·÷zžÏþ¾„ýI û"Èþd<Çþ—†tLýñýï&Šˆ°è‹Š‰KJÉ úŠ3ç(«ªÏÓÑ72úµwpvóX±Jà»ÐÏÈÊ9PPX„£TUs¹ïmí]݃Ñ3âèí±ó6AÿgýcGÈÙ·g÷ÎíI[·lÚ¾.8Àwµ7EßÎ*b¾¡¾®–&4L„>¬’?Àì+‚úäg`¼ÀÂÆÞq)U?œªŸý§ê¿Æ'üêÕ†}vWé² +-s€ä>”ܪîÝíáÜoi¢Á__Ká¯DùËYúÁ~Ä¿èøqð¾äà_ðCrÞ3àŸ#âWRòkëiæ7µpæ÷ܽ×ûà·‡hþ3œ".ôé$q£ôµ£?Œú¿V¿óöMªþ¹²“Ç +-ò¨úÑ ¾ï*/wG{ËLþBê+²SKÂC‹¹OØ×Ñ3465³´±]äèìêî uæº!2:6>)%uWfVNÞAÂþÙóÕ£Ä>³¯˜8EÏ8ö1Ñ®7Ô_®e-+.‚@ËÉÊHÛžì‡û |Vx¸:;ÀÓRöÕU”ái ûR’âb¢<ö…±ÿý¿z†¤þw$õ…èKHÉÈÊMU•UÔçiëaüÚØ98¹º{ùüƒÖ…GÅÄ'mOËÈÚŸwèhQqÙYè‡Ëõ xkô{(úÏú_¼|õ—uÐý÷è?‚þu¸4RôOôóröeîÚ™’´5vSä†uAþ€¾§»«³ã";&ScC=‚¾úò@¾,9à>°±?‹ùÈ›õ—yùø†Rõ3‡ªßýk/§þ?Æ‚úCÙÿÀgŸyѼÜG÷Q÷¡÷ï û·Z[0ø¯50ð×ðäGúËJKK@ÿSÅÅð`ü?•””‚÷>OüŽ|Ìü–Ö[míwHç£ù¨ùƒBÿw }!ú¾rôÿƒú½©ŸMÕ ôõñZ¶Ô·õu´4TçBêϘN§v +-™YZù©ôŠ:GYEMöÔÀØÄÌšc_àº>2:&>1%5=–õàáB!û £Å>É`Ÿ­´»=Ýí·Z}X×ógK‹=”·/Z|LTøº ¿5>^î®NgìÕÖt†ÂT9Y) ñÉÈ>¨ìOä±?îûé >Q’èd@_ÑŸñýl%5M‚¾…5Ü]Ü=½×øÁ½qs\bÊÎÝ{aŽŽ?Y +-cô㥺†ë-·Ú;»{îöþö¨ï‰ýAÿÃH ßBÐÿ©ºòÂÙ2Dÿ`^NVæ®ÔÌ‡È ¡Aþ‚U+)ú¶ÖPÆzpsTSQžÃ&“쎌Œ´´´ŒŒŒ,²Ob¿rpµ1…çõ=}|¨úiÿêÿûèþ»¡¹ÿ±û]í$ø›øëxò#ýåçÿ3§Oƒÿü?œAîÁ{Ÿ'~C~c3ÉüöŽ®?3_úôÎ8FÐV}gFý_»‡ªŸÉ¨àëãIÕ75¦ñ;‡Ì-3¶xdÉÔÒÜgØ×502UµµwprY¶|…À/0t}DtL\brj:4Z.°_Äc¿qdغ³dŒþNÙï{ø ÷nÙØÆkWê.ýXqþLéÉãGæfû)‰q›7n \»ÆÛs™Ë’ŶÖð¼p·Ñ„» |å}iÊ>ýoìÿ‡C<¢? Ï¦þd1 IiÙ)òÓ¦Ã0ÍUÓÐÒ5065·²]´\¹zm`(A?9uמì\¸3ž,9S^Q}©îÊ5œ¡Î;€þƒ‡}8B°¯¡ÿ¯‘@¿Cˆ~Åy‚þáƒyû³2ÓSSãc¢#ׇù!úË\œ} ¸6èiSôg}¯8]˜äKáøa öA}ò™õÍ­íœA}Q?!…¨_ê_Ãêÿ1dUé«fsÿ-?÷9÷ûX÷{ÀýÎŽvþ›ÍMÿU¾ü@edÿ… çü°ÿí‘ûŠJ_(~!¿ È'™æ÷°æ÷qæóCÿ-ú|ôÙ§úÒow˜óÙê_õ Qý´”¢¾Ôwv°³675Ò×ÖTÇöU„Ôgæ–¦VÈ%u¶Ò\UuMm]}#(4«…,ûküCÂ"¢bâ’w¤gìÝŸ›ì—Röë‘ýÖÛ]£Å>YZÂ>îlk3°+[~¦66?7{Ï®Ôä„-›"ׇ®]½r9|å-´2‡Ïœ.s¹™>M~ŠŒ´¤„Ødˆ}¾²?Ùϱÿ¥5#‡>M}}Q1qIiD_ +-BUË×Ä æÈÑÙmùŠU¾!ë#7mIô3÷ýø؉’Óå±®Þhn%áÀ¢? DÿÝ( ß D¿ððÁÜýYé©É‰q1Ñ0D~ŸË}û…Ö LŒôuµç©«ÎUš »#OvGJJ’pöG/7³”æâåÆÈ„¨ïæéêGÅrê—VÿÑ“gcJýO³ÏåþšûÔýÇÄýû½à>'ÿ-,þAòý`?âúÿƒüTUUM¼ð‰ßLÈ¿ÝŽäÿæ÷Þ'æ?¦æÓÐà ý±…þ'Ôöä£~#U¿”S?6 +-Õ÷fÔ71ÒÓæÒW^N–¶ +-N­urö +-²¯¥£o8m¡Ýâ%KÝ<€ýµ!aáQ›ã¶íHËØ››_€ìŸAö/a¿odØÇ°O×ö)a·¶­µù–ZÕÅòÓ°³ù?ìËLß±mk,nl€ïªnÎŽö -¡Ñðv£Š·¾”¤¸˜(}aìcÿóÏ8N}}Hý¿ú} )%$eõy:z†&f–6öή0Dÿà°ˆèØ­Ûv¤gîË9PPxâÔés«j(úmt~ÂÒòÆg”Ñ/."èïÍHß‘œå°†CßÊ|Á|@_K“ ?Sq†Â4úÒ°8ôÀIËÐ؇۪†<2\nõC6°êâÔo¼Ù&Tÿ«þû¯_ý?†yÝä}³îã+ÇP£î¿àõþ}ü¿tcð‚åú‰ý€ÿO55à?ÿÀ ý%üÚ:Ÿˆ?ˆ|È|Bþ=Æ|Úù/¨ùX!Æ|:IAô¥ßì°g°úïYõ_ Õo#êWõ±êoAõݨú†zÚLù*`êK³“+Iæ–ä¾\S¡ÑTÔ4´`_MÍ-m(û^ޫׇ…oܼÙßMØ?Šì—WTÕŒûïùì¿èþ”ÙÛ®Ž¶›M7®Ö_®©ºp®ìTÑÑ‚9YiÛ“ý°`—‡«“ƒå‚ùðÈp½Qž=>tð“’Ÿ ì£úÀþDûã¾±ÿ™gXôiêO èKËÊa÷ÎVRÁî5„+#Ì“‹»\ƒÖ…GÅÄ'mOËÈÊ9pæ§ìÜ…J2>M7ÛÚ»ºé]ñéóþ—,úo)ˆ#‡~kKãõ†zŠ~)¢Ÿè§!ú›£ÂÃB}/·¥KÛÙÀ…q¾¡¾Ž–¦šŠò@6Gž3_œdcÔŸ‰×-]ÃùfV¶‹árã-ðçÔÏ¥êWV¿€ªO9ÔÿˆýásÜMÝï'î?æà§ÁßÑΓŸÒOìüëjkÁþ©%Ú×Cà_ih¸ŠÏ¿ƒf>Gþc¾ù¯ÁüO†þ×þPõq¨‰úý<õ¯þ|‰Q?—Sß_à½ÜÍy±­•™‰¡®–¾rdt™Éez…äþt¸§ö!Ó ŒM¡Óì9:ö}þÍ~½G唯_cµ´ÎZçè*G®‘»î¥û¢¤(º¨è¢«n”®Š.Ô(¢•Š¡¤S£™\š‰t™W:F“A£sX³æ8ëœçùýöÞï[½RfæÐZýþëõ×ޞ糿?ÿ@d?.a²ŸÅ²…°ë`ÿ5a¿ûm-MÀ>,îUWË!Ö +- r>˜ìÇFíØèçåîêdok³zÕ +-C]- r¿™?—°?EFZRBœ‰}¾²?û£8ú}D_”¢?ILBRzò†hábH !ã+W[Ûnpru÷ò  ‹Ü¹;)%íàác¹ù…gΕ]¾ZUCÐoôyý'ýþ?ýRDÿDöÑLD?aWLdض Ÿ-n®,ú¦FºÚËÔU•ýysaqf0¡‹#I²Oc–ÜoøêÛ€úî¬úû3@ý"T¿æË›cXýw³/ûÜ6Èý‡~.ùA~ ªÿö-‚ÿº:ð_ðÔ¡öÈý­ÛPø>ŠÏF~kë€Ìnþ€ÐCèPý/Aý²sE ~Æ~V}wPßÕ×£ê“î.;`tÉä’Ñ>2mÞ|\Y5`_ßÈtÅJ`ßÎÞ Ø÷ö ‹ ì§gf?QPøÁì SŸÏ>“„}œ ˜Ÿ§Oûí¼¶æ¦Æ†¯oÕÕÖTa®æçÀ⦥$íÞà»ÅÍÅiÃ:kË•PjÀ¾*sÁ™‰=YJRBŒa_TT öÇÙÙšú|ôÅ%¥&ÃaõÎÃêUQ×ÔÑ7^nn¹fÝzG·-¾Á¡1»“SÓ3æäŸ*>Wz¹¢ª¦¶F§±©¹×v…ÏzêëG ÿEÑ'ƒ3L.Œý/þv­â¢_p";+“¢èïãIÐ_»ÆÑ××ÕZ¦¦Â /7 j‰¿8ôÀöHcì³E -=#SPßÎÑ…Q?1…Q¿lÌ«?”ý¹O6^=¼{ØÚèþsÖ}ø“ŸÐOíÇð¿þ ü¥¹Gï¾ÆGñ›˜È Ÿ5ÿ9šÕðO°‡àƒú +-ý1þûÕ0Xý”ĸ¨0TßÅÑÔ75ÒÓÒPQ\Âfï_g—+–©Ó¦ÃðΑö—*ª¨ihéè™°ì»löôöCö£ãâ÷¤¤¥gö‹…³ßýAìÿg ûd}q{‘ýgð¨»:;Úy­Í÷)ûÕ¸»%ŧò ×ÒS“wÅD„oõñÜì ÷›5æpÁÑÑTWQdo8²ðÔR’âûØÿlœýœ¡èOôA}D_BJšò´øCôLÍ-¬à®è¼ÙÓgkphxt\ÂÞ}2²²óN•”^ª¸V}пûíýæV@¿³ë1ýW? ŽÍèÐýô+¯ ú…ýtD?.&",$ÐßÐw²·ôW®àÐ_ +-—Eù¹$–˜Ð‡µga_†Üpfà [KÏÐÔÜ’Q?8,*Žª_  þP¿óûî1¨þ‡,ëÜî>ü??ù¡ùïßCûüÿA#Ü£÷÷îCãó#ŸÏf>ßü¾>AóßúŸö«~‡úÝßwõˆúå ~§~°?UßÒÜÔPOKÕ‡fþ¦^„_Jš$‹,°?›a_YMöÖØ·°²±Eö=¼ýBB)û©È~îÿ‹}˜Ü_Â>Yß»õ7¿º^}íÊ¥ g‹NæegeØ·7!.:|{¿·Ç&g»µVPkzÚ°·ŠKè?vÒRâbDýqöG8ô' ú"}šúý)\ó*(«-ÓÖ341[eecg¿q“‡·ÐvýCGŽŸ8YtöÂÅ+•Õ׿ºY÷Û{Z¿{HÑÿÐ! ýw ÍoAÿ8¢Ÿ²'ž¢ïçí¹Ù…EßÄP_GKCMY‘ ?g6AŸ¿6bô û$ö釪¯‹ê[Û9¸¸{ùsêç úåDý†±¬¾pöÙÜâ>ü'ôö¢û$ø ü¤ø™ä'ô“ê§øƒþè?ÿàß”{RøÍ-ÐøLä“Ê'ä“ÌGó{…›Ï…þXB_Pý_õ_½ìç«ßÊW¿¤¨ ‡¯¾—»‹ƒ5ª¯Ë¨O£wÊ€éEø%iîËN›ã+?oÁ"`_؇Í]nŽìopö½ýðèØø$dÿa¿äwfÐ +-³ìÃ÷ û°À-îöaË/ž?{úä‰ãGíÿ|O|lÔŽm~^î®ímmV¯‚ÕEö•¸;<·¤û„}dÇþGfõÓ>‚èÓÔ¥èO“”žÌ%ïb%U -](†ÕÖ ®î^~ÛvDÅÆïù|ÿ¡#Çr NŸ9±œLMýh_24]»{ÈÌ°è¿ÁÈ š˜_¢ÿôèô3ÒSýèˆÐ?oDßÖÆÊÑ×ÓÑÔPEô ú3gL“eC·f9,ûäŽê/X¬ ¬®É©ïÆW? Ô/á«ßúð«~ÿËWŒú¿Ž õ±?4÷‡ºÁÿŒ ~€_ ùyß!ýÔ~ÿ&âÿ€ƒ¿Á?ï|h|*>ßäs™æÿ$Ä|¡¡?Ðúx¨~=¨_IÕÏ:Ä©ïæâ`KÕ×TWVX¼ÔÇù•™LУãK‡WR +-ÙŸ: Wn.°½¦ª®©­g`̲ï¼ÉÃË7 ˜eÿÀ(Øýì¿y#n=t…ÛZšî}s‡lðÕò²óPm¹ÇLKIÚ½32,$Àw‹›«Óxì•+Œ tµ4T•`uçÍe>wR’â,û¢¢ã±?Šó§>‹þD}qœZ¼òP J*êš:88–Öë ܶø„„EîÜ”’vðð±œüÂ3çÊ._­‚™¹ è7µ´Ñ‘éùñéó^vb~úäz8,ú¹ý¤øXŠ¾ ï¸Ñ7_Ρ¿dL–\§ÈH3[3iÒ_ðàêPõÉ%žÔWÓ„¯™¥µ­ƒ3§~Ú!Pÿ4¨_ ê×£ú¼±«>ß}>ûÂÜÿ™q¿¿ïü üPü4ùIó·?dìüAÿüðù¡¹GïüöGD|ˆ|ZùH>“ù/úú¡†3úûMwØWüöÝê76Ôߨ­®,/-9ê§%'ÄF†¢úΨ¾™‰®¦ª/?‡$/™_š,txÙ»*eþ’ªú2Êþ*h6dßÙß»;)™²Ÿì_û¿Œ–ý_8öatzŸ?eØçû wn×ÕÖTU\.ƒÎÏ9š™žšœ¸+&"4x«'ìïúuk,Í—éëhÂ%gé¢òô–#ðêÿ‰Äþ8û#=BÑ'êƒ}Lð}ó-QDôõLÍ-Ö¬]ïè¼ÙÓgkphDÌ®ÄäÔôÌ£9y§ .WTÕÔÖÁÄ465·ñÚ úOúýó22ôß~úGXôÃCƒ úÎ,úÆzÚšêªJ +-}¹Y}&ôaiü?ãÁÕAöÉ-gÆ,9øÞ¡ú: ¾£~PhdlB2£~iyeuíú†FFýž¡ê¿eŸóc›3ìžûÂ{ÿ%ºOƒŸÂÿ¤ç6ùÿÑÙù÷ŽÆ~ÀôÇÓÆú7¹Gï)øŒøù?ô<¡ä³™?Œùc,ôÕÿ÷`õ{º»«ŸÏ©äêÛÛZ[€ú:¨>Ø'GÔ‡–`æ—©1Z-ûSe§Ï@öç/öU€}]cS3`ÝzÂþÖ‘³ÿT8ûoGÃ>î1ŒN·Æí¼¶æû _ߪ«­¾Vq©´¤øT^vVÆÔ䄸èðíAþÞ°Ávk­,ÌLô´—©A³-œÏ<º ytû„}dÇþǶõ“=ú}‚>›úT¾i8786Êj †&f«¬lì6nòðöÚ—°wߌ¬ì¼“E80ת¯×‘yinåµwtv=ÆqéýûõÕcžÇüp±ì$—º(¥ûÝ%J÷(*]t/EH!T(*ÊÈ%ÊÔ(*S; “£ã²µ%m! m‹F¶Ø53fÆ:³ŸÏ÷û<ÏïéwIÌœùÍéó_õ×óôþ¼ž÷|ùo\[&-ïDÿ퇣Ÿ.@?,$ÐÑ_æ`‹è›™êë ú*ˆþôiS 7 úГùc(ûdmÈ™ê«À•£gHÔwZáîí.P?OXýNQõßH‰úâØÈ}^áGøIå'ò³ô? øƒþ8÷¸¡?ßGîÁ{ +->'>”|$ŸWóÑüW’Í—*ô%©ß+P¿ùf=Q¿â\qaÞñ#œúÁ~ ¾QßPoÞÜ9HSxe±ñÒs­—w’ÜdÂ>”65õ¹ótô Í,bÙ÷ò îÏ~Î;؇ÿÈ qì¿}'ûÜ&ÓEfØïê|ìßn¹ÕXãê•š‹°Æ¥ÅgNç⧦ìÞ¾&Ð×Ë}år[«Å Í ðÌQ#ûK¾xãeáÑ û22¼²?Äþ@3L¤êËÈ°èø06 +-Šp#ªÃ‰h™Yle¢»§O@HxdtlÜö]Éû:r,÷taqIÄ¥æÊÕõ–Ûw…ÐÇ°ÀÖöÏÊ ÐÿþýÐß›”¸=nsÌúua!ˆ¾  ¿t ‡¾:T…™ú\Ññé°ìã_yã8öGòØ6ľäAªþhPŸAŸ¸™Qøtô@>Kkûe.n«ýƒÃ"6lÚš˜´ï@fvÎÉO ŠJÎ_¨Â°\¯kh"YAôŸtãa( }1IùÑôW¹RôA` õt 1ˆ¾"4…)“ñBäzÒ˜1"ƒ{ÃW_‘¨¯kh2ß +-Õ÷bÔß•’– ê€úU þuP¿µíþP¿ûÙsTÿ•ª/±îà>…¿¿ü„~b?ÑŸøßoÈ/ ÷à=Ÿëø(>%æKúýÕÿ‘Qÿ%§~û]¢~mÍWU¥Å§ˆú»¶ÄD†ûyú¶ ¾ £>À'êËøÐ|&¿Ü¹:j›üÔé +-,ûÚzƦÀ¾•½“3°ïúNöoÀ>ùW À¾ ;ˆ°ßƒOüNÜåÖ榆:\åêª çÏäÌÉÎ<°/)1aë¦ aÁþ«=\]œì­-Í75Ò×ÑÂCg¦"”}öéQ}±ìÿÖ¾þ.‡C8¢?‚ O«>eO"3Ci¶Ê ì &k;ˆ‹‡·_Pèºõ·Äïܳ7-#ëè ¸ Ïž¯¨¬¾tÑïФPôûAáЗPõè“*ÄCŸ^…OÞ }/ýù}-}‚þD}Ö|øÞáÞŒEöeÇÃÊÈOÅCGMƒQßÖÉÅ Ô‹ŒÙ’@Õ?UP\ZQõUM-QÿnûƒÎ.ªþKFý¥KýŸ…þ÷q_,üT~ ŸÚøƒþâ柄{âýSžøbÈ6ÿ'IæKËû• ~U¿‘§þ1úA~^n.ŽD}è»jÊ þTy1d{ [[÷}\a(nòS±¹ÍR†êƲ¿˜°¿Ø÷öŸöû^oó‰ÛÌ+û ûì:÷õ>ïù¦›nsÛ–æ›ûëµÚË—ª++`—óóNÍÊHÛ»ggü–ë×…ùy¯Zéìh{lnb¨§­©¡—47y(näñIÙ'ì@ö‡±/y†‰T}Š>§ ìijúæ /µu\añ \³6*fó¶»SRÓrüTþ™ÏÏ•W~yñr-åfsË6ýozž÷ö½|L$¥Dý›âÑß“˜…èû úNö6ˆ¾©±ž6‡þ4¬ ±'Ðûp !Ÿ nÍXæÔÁçWœ ¯¥k@Ôwõ}ƒêã©ßø‡PÐî3…Ÿ?#?Óù~´ñ§þ÷úÛ§Ä{>_|ùLÍÿ£˜/Nýo…Ô¿ÕXGÔ//-õ³3RYõ}½ÜœAýE¨¾¨OÚ®ÜÄÇ e˜-.¤îsì+!ûZÚºF¦ó2ì»ö×FEÇnMØù`[Üwd¡_öÉ>w´·Ýn¹EÙ¿øå奟Ÿ9}êø'‡ÓSSvïض9&jíš@_/÷Ël­/436ÐÕÖT'½i¤º—ýˆa_FF¤ì±/2"èäÐGô&Mž‚-AYU}î<]c³V6ËV¸{ú„„GFÇÆmß•¼ÿà¡#ÇrOŸ).-ûâ/k®\½Qßx«åv[{ÇCö&샔¼Âå> þkú4$;ƒ~(EßзZÌ¡?GUy–}Rô™…mCÙ'/@–¯¾Ž‰ù"K[Gg7ONýÔŒlP¿¨´œ¨_×xKHýo¥S}öŸÿç¾~ü,ýÔ_üà©÷|ø|ò©ù?H2_ÊЗ ~ªÿ¸ë¨ßê_«­©®,/)ÊÏEõ“ã7GG€úž ¾å"sc¢þ ª¾,UŸë-Ls¡!Æ5–“‡=žAÙ×$ì›sì{úø Äþu(q”ý‡„ýû¯?Œ} WãwÁB·ãB7Ö߸z¥ö¹¬´¸ðtî±#‡îOÞµ=.6:2<$ÀÇÓÍe™½¥Å3#8u檫’ö6ö˜~ö@ýÑ¤ì ±ÿ[û»ýáˆþŠ>QÍ›€%Л—¡Ž>4 Kk{'7ÕþÁa6mMHLÚw 3;ç䧅E%e %ˆ~C†¤ãag×ãþÕ€´µ_‚~7E2Ò"ýTúþ€þJŠþBD_W[KÑWšè˱èÿy,Ý—Qìà @öQýI“áÖ¯ªo êÛ8:»‚ú¡Ñ›ã“QýÜü¢’òÊêšÚk ~ ¨ÿ¨ë1ªß'ÅêäþžûÂðóägèû{(ÿâ†üñ9 >O|–|^ÍgÌ#åæÓWû–S^ãwH «~ǽ;Dý+_3êçpê‡úzº:;õõu´P½Ó=þãû°ßAØïþì ít/°ßMÙ¿w·õïM õd£«.œ/)‚…ÎÉÎ<°/)1aë¦ aÁþ«= ÂÙY/gϯ1Ge¶~öoÊ>a²?|ˆ}ñ3L¤êËpUOClº¨ºÚz†Ðu—,…œ¸®òö +-]·~ã–xHIZFÖÑyŸ=_QU©khjnŃЇÖÛó¯^‘„¼ú´ôRô»è×½}w}sS£~èOAô?fÐâ/ƒÃ°O^~÷¦€ú³UÕá«GÔwõ}9õ³rõ¿¾BÔ¿s¯ƒSÏrÜ0ê¿•"š~úŸ0싺ß~N~¤Ÿ±Ÿê/vÈ_{©÷>'þñ䋘ÿ_aó¥êÍòÔ'‚úàSVýª~YÉg ~Vúþ¤T}×å¬úš ¾Ò ¬ºX^˜ª?ŠW]FóØŸ0In2ýyÀ¾ °oimç¸Ø_-žýs|ö[nßmÇ"GÙïíû•Øïy†Mîуû÷î´675àN_ª®¬€•ÎÏ;q4+#mïžñ[6®_èç½jårGÛ¥Kš›êikj¨©ÌR¢×¼zí@Ù—)ûCì÷ôGr胆€IQPœ¥¬¦ŽW¡±´[H‰—oàšµQ1›·íØ’š~øì×kXNéðk\‰Ù¶Í\HÇ("•Ò¶H”BQ¤(**ªqÌq”óNãXé ¥ƒ”J’(‰IIí(’C#{ Ùfsíýÿ?ÏZë]ë}ßÒبËó1}i¹ïßs?A¡‘Ôs™Ù9y× !¥w+ªjjâ.@ô›¥ ßJ>¤£ÿú7!úUú—¥¢ÿ“tôÇ2è"è÷åЧæwcV†»ø@ýC†úcQýÉ þœù¶¨¾÷ºM?ïÜ÷ ªêt +-Uÿ«~#>pˆú8ö;¤úíq_¿@~¤Ÿµñoí43Ü£÷>_@>3ó;‹ùõÿà«ÿâYcC=Q¿äV!¨Ÿ™ž’x*:œª¿i÷ +-W§Å¶óæÌ21š¬¯7^C >Cž(Æt»Ðc—ûb™qÂ)Ž€ DzoØû'yìß ìW‰±­n_­Ù^K°ÏÖÙ¯ª¸[zûfáµ¼œ‹™çΞIˆ=Þí·mÓúÕžî.NÐh+¸õ¦O5Ð×ÓÖTW=RIqè`ü°à°Ëäâñ/Æþ—vö«:ú]}Š>Š‡ì\@†®Šªº¦¶®¾á´3-¬¬.vrq_õÓº[}wí 8r<:6žƒ™/_ô‹I>ú4ý–OiáŠ~)AÿÊå‹™RÑ÷@ôŠÐŸ ;^S‡¾sÅEùPëóé)Iñ1ÑÇCìÛå»uã:ï•nÎŽö ­--fΘfh0Qwü85U•‘#‡úo¾>?ôîEÇ>a_Ùïò}ÉóÄÔïÆNýÞ8sû+à8¡¬2F 22qÒ#3sËù¶öŽÎn+½×úlÙ¾sïþƒG…GÅÄŸNI;ŸuùJ~AQñ2æ-øáæ%›€ ǧÑç=±ì$ /Áú·ôÏIGE¶™ ýQÊ#È‹Ðï×—Žƒž¢²È²§sõõ¤ïT_Ye¬†Q&¨oϪ¿7àppxtlbrzfvn>¨_ê?àÔÍSÿûiuþÌ‘øÏw_ ~V~Ž~b?Õ_Ú¡ÿúš>+~ Ÿ#¿Mó;Þ7¥SŸ§þ+¢þãú5U÷ÊJnõÓ@ý(TïŽm×zy¸8ÙÛ̳õ ôuµ4TU”‡ƒú +-ýÉÎe¦¾(Çt½@ŽÉܱ?˜°?Ù×cßU’ýDdÆa¿”e¿áÉÓç/~}‰ ÿ<öÙjÿö/ø»›žÃuGš] :²Ÿ{)+#-ùtôúØуû÷îܾÅg׊åËìlçÏ5731š2i‚Ž–†Tš4Z¯>öÁAbìcŸ;è˲è÷ôûQô‡+AD4´ !“ŒMgÏgcç°lù +-¯56C<ü ‹<—˜œ–ql¯¼²š¢ÿ”¢O§>Æÿ> òôóÛDßПèO3䣯8”CÿDÿ¯´+Ý™®tÅo KÇ>¹ûXõ‡+«¨¢ú ¾Å<{'¯µ·í êGúiDý›%e÷ªjÔ?&ê¿â©ÿŸŽ©~ëîKÂ/ŸÐOì§ø‹.öp?þõž€ÏŠßùÝü6Õ©_p5÷âù´ä„ب° ‘úŽv6VfÆS &êh©£úC#x忱3W4^dÅ؇FËÉ+ˆ±¯Ïcß¡öÏeûùÐl`¿‚a¿Q’ý¶}®Ü¤Û¯^û´Û5Õ•å¥%¸çr³/d¤&'ž:|ä€ÿž?o^¿ÚÓÃué’E6PkScœrÚZðÞ¥a VšÎ8ʾ¬û_ÚÚ¯æpèwAôe(úÌp''?` $DiähUuMm=}ƒ©ÓgÌ‚x,Z²ÔÕÃsõúMÛüvÿã—ÃA¡'à%˜zîBvNYåÕ5µëÓAÀ¡ÿN¸Ú;Ú¾¿tô ýqêD°ý¼Ô•fì3/TÿÇÁCQ}u-‰SÍ,¬lì9õ…EÅ&$§¿˜{µ€SÿI§QÿSî áçä§ôSûý¥æÞràsâ‹‘ßYÌ—ª>„ðCõëˆú·AýPÿLBLdXСý{ü¶ú¬ñtõX™ Ô$TŸdÑ«õ/Bö2ì« +-Ù·–d?$<ª}ì·|ûïxìC»áÂ{X[Så¾Yx-/'»{""4öÜn¿mÐìUî.N‹.°²˜5cº¡¾ž¶&|„‘Øj`_ŽvšyòÀWAö»|c_x¾“˜ú¬vä=HvÁȇŠªÚ¸ñº'A:fZXZ/\ìäâÙظÕw×¾ˆÆñèØ„¤³é™sò®Þ¼}‚Á ÿŒ—‹ÏA_ @rè“9P@ÑO=“× +-úVú:ôäåð5È슾È|RZòä!ê¨onµÔw÷\ã³ÕoÏ~P?2&á ¨Ÿêß&ê×õ_‚ú¿wõÛp_~‘üŒý þ¼ €wDÿÖÂyÏ_’üÎ`¾˜úïõ!äMH_]mMUyéí"T?#õL|Ldh §¾³ƒÝKs³é†“&èhª¥¤ˆê#wæl”yAfž­­³¯Õû‡ ûq‰°èû7n•À¤«ºí&ì7‰6] [ïO÷[‚ýæ—M/žQöïWÝ»{§¸¨Û}>=%)>&úxHà¡€}»|·ø¬õ^éæìhokmi>ÓdÚ”IaÍ©QQ1l^~rØjÑí'>ö¿±OŽú²ìÄí…ù@í† ®{Ñô¯ ZM…ý÷ô›ž?kl c€¢_Ô~ôõè”@¿»¨)2øà¡ìcWzõûÊ¡úŠJ£Æ¨kêL˜d8ÝÌÜrƒ3§~`hdLü™Ô T¿:påÕá3§ Á¨ÿ¾ƒ«/Õ})ðóägègìçŽyî¼ãÏ_*ùÜ|iê¿áÔTW{¿²¼´¸èzÞ嬌Ԥø“¡ýwûnÙ°z•›³Ã"PßÕ×ÖTCõ;yÔŽnÜîÝ™(3AîÊ°ÿ=Ç~Ÿ~rýyì«ûzâì{¶Î~eŸŒ:è7Ÿýwíg_Ôð·oÉŸÞü+°«®îÁ?ïWÞ++)†~ç^ÊÊHK>õ>vôàþ½;Þ¼a׊åËìlæÏmfl4öœ–4[i8e¿_ü û²ìio¿ŠÃ¡ßÑ—¡èSëzc:ä@8†+=V]S[OòÔ馳ç̳±[²ÔÕÃkÍ†Í ÿG‚Ã"!ÉiY—r¯Â°¤¬¼²š>1Í +-ÈÄÛv¼Å#Á=›yèWW”—ñÐONŒ‹‰:ô)ôU[Aÿ{ú2ìaÇ>4…\ròøäõÕ4µQ}SP‘ƒ³ÛªÕ¶øîö?q2>)5#ërÞõ¢âÒòÊûµu8õßtõ¥»/„Ÿ/?C?‡ÿ;±K@ìÇìo¿—_œüo>ý’9õáúšQý†GQý;Å7ˆúg“âNF„åÔ_¶d‘µålªþ8Fý¨~oF}A–Es_ûðÚûFƦ,ûË)ûÛ¡ÞûÉ<öËÊ+ªyì76ûÿFöß¼a+þ”²_]‰ ¿qýjnö… (ø©‘aÁGøïñÛ¶iýjÏÿ±_çQ=æ{ÀïÄÔ\sî%Ë0H$*¡T”„V¥E¥}û¥RÑB!S”R’%[¢}Õ¾N%QmJ¥$Q!Rèºçâ`æÌý|¿Ïó{~ÏoI¹î9i<΄Óç¼?¯ïûãêì`kefl »^CuÍ*…å2°Ûb Ðjà €ýIÔÕ“ØçûÆ>ëûŽ«ê“Ôý wÆÌY¨ˆI@2ää¡héè™Y2ì\¶íðöñ 8 eàÜ…˜„”4è%W®!ô¡ë¢Lú½l BÿÃ× ßK "šÀõkWJhèC(ú;y /ˆþt AúhOøiæãe¡©?“T¡¾ÞFS+ÛÍLõOœ‰ŒILÍÌÅê×ܾƒÔïzü©ÿ©ÿ¿w¤ú¿ÿy­bw(øIùIúYøs>œÿùóÙÄÿ,ùê9ÒÔÇAó/sp¯ Ún ¨_uýjIanFjBt䙡A÷{ïpß²ÙÖÒÔPOK]YI©/&*"<›TŸÖpé†YapšÑí:V³/Ìƾ2ž;ûç"£ã’0û°á×ýÛ¸×aö{Ÿõõóbÿ·°Ï±ä¯^öÃ¥Ã,vM uÕU°âÅ…¹YiÉ 1 Ö…ùûB«ÛæâdÏ°45Ò×ÑRWY­(/s€åFe&1E…WÙÿÆþ߸Ðç'¥Ãw$C‚±a'»båje5Mí M-lì·º{îÚëëtäXøÙÈèøäK™¹Ð®WU×54µ÷ ßÏãü}î<×;ú(¨dPè‡|ý¥Ã Oîɸqxl³ ÕŸ- Ïß"P_AIY]KÏÐÔÒvó÷Þû…‚úÑ ©¹…%0P¿å^G'¨ÿ Õ |ç ²?&ÔÊ}&üœò³ìçñpþ¯ÔâŸEþØ0ÿæðÐÀ>ÒÕ‡˜?íéê¼ßÖr§¾¦ª¢¬¤0'#%!úüéãGHõ–&†ºX}¹eK‰‰ÎCêOãP¢-’ý×À~Á~G{+<{µÕ•WK‹ +-r2/%ÅGGž C+¾w—§ûVG; à ښjÊJ°ßÒK$ÅΟ‡ØŸ£$w›9 :û£mî¨ú|˜::ˆŒiÓº9 ñEK +•ÖªB( Í­átóðÚ³ÿ``HØÉ3ç£P"rò‹.ãóÌkmôÈe—w àZˆÛîÞA8|™qô[›Qôó³3P .èû"ôÝx£/¶`>ý©Sp.ØЧÌg±/ðÃG/ ¨? ©?Ô_²L«¯khbÉp Õ?rüôùè„”ŒœÂ’²Šªšú;-m÷aOá÷§«ÿñí7mw¾âÂ} +-~J~šý<øç=Í{–ø4òLjùtõ?QêÿûÍ ]ýÆz0¯¬¸ '=%> +-©xÀg·§›³ÃÂÄ@WSmí*9i¬þœÙ@ݔɓ@º ´8³²<žÆþlì aö%ûËYì›q³!:>éRFv>Á~5lys+b¿›Å>^s”ôaÙçlwïö‰=öôIÏ#8vZq·«,/»Œ¶<51†pâhð¡û÷xyÀŽo²676Ð[¯¡ +-ƒX.#…öÎ4 Xob¹ax|ßØ'¾ï¸ª¾Uo§à~;g.\‰ÅR2(*Zº +[g×í;½}ü §#.Æ&¦¤£PV~ãfM=nº¡êö½À·Fÿýa«> }ZýÇÝ: ôë˜èçèŸFèû“è;Ú1x¢?…‚@ý¡Ð'ž@rX}x†©/-'¿j­š¦®‰ÃÁÙÍs·Ï@¤~T|JzNAqYEeu}#]}ØJýOcB}÷éð³ä§ÑÏŽÿPýçã%>GbF{_õ}N}@ïA;˜WW]Y~¥¸ ;=9.*âÔ±C~X}{ c¤¾‘ ¬fn"n·¨êC"Ä¡ßÊ®X©´Vm¶ž¡‰…õ¦Í[Ü=wí…Û/$,üldt\Ò¥Lh¹¥WQhhjik𰫇lƒd†¿ûØÐg}$úDèh'Ї€¿œLŒ~‰¾Ï0è ñBŸŸŽ>1Œq´yÀŽÀˆÔŸ5g.¨¿ÔW\£ºNGßØÜÆÎÉÕc×>¤~ø¹‹qÉiÙùE þ­ºRýÞ>4À[âÒKêsºÏ?;ý#ПãÇ9þ2Žj´ó¯ÿxªè €yOº‘úM µ·n\+-ÊËJKŠõÂ|÷zmõ­Íôµ‘ú+d¥°úBLõ)æ¸K °ÿ=ûÓx°¯¢N²Ï°sDì{3ÙÀìgæä]öoÖ Uom§³?ÈbÿÈÙ'–ý=mÙû`=]ñ®ß®­®¬¸ZZTý.).êü™“°éÙãåá¶eó&kscC½õëT×*),—‘Z²H|<³g΀ià‡qÐæÁ÷}&úôª/@Vý‰Pn§þ„П+"*¶h±” ŠƒªÆz]c3+[g×í^{ö8 —_ÄÅØÄÔŒl…ŠÊ[µèîƒ$`ôûú¨÷ÿýûÿ}xþXè·µÀû_ƒÑ‡$@Hˆ¹q¢„Ñ÷àDåÐèO ÑÿžBŸü¨²Ï®¾V_JvR_[ßÈÜÔßîµ×7 8 ÔMJËÊ+*½vãVmCR¿=|° cT}.÷¹äç²×_ÁõŒöoýÿøX‰GꣲûJýÇÝ;îÝmº]{óúÕË¿æe^JŒ½pöäÑÃX}ÇMÖfÐp5T àÊHIŠ/õgü„Û-©>Uõéqf^¯,öÙÙ—dcߘž¯PHØIXõ˜„ä4(x$ûõ¸á‘ì÷½ U<Ú¶ûƒ¯_ ô÷={ +-÷NgǽÖæÆÛµpñ †—žš »~âhð!?Ôï\l­ÌŒôuµ4`Ñåådà Ëg&ŒcŠà¤‰dÙà*ûaö¹Ð'‘ƒ@NžŠ™ž'ºÒ°LN^qµŠº–Ž¾‘©%ÃÞÉeÛŽÝ>~‡CŸ‚»/!%=+Ÿ}„Ææ»÷î³rð‘Gý‡Œ“ÎÇ£1xÜÓE¢_ÏD?—DÞ8û PàîcX ‰þ žèÏÌ}võ'Ã#ê‹,—”ú/ûõe–…¸Ð­q¦j×€a—aEE‚EE2‚€€ä( ( +-@@@rN’s$ ‰’QDtʸ8;«;:Δ{îýº›nºÁÖu–*œû¿»ê»÷œçœWD|÷Þý•Ô4˜XÚbõý‚¢R2r K+kšÛ:»ûGÆïOMSÔM¤^’ú¿-»>0€Ÿ^~æôgø3ú_ìïý2‡ªä±úDµÃ¦ ê?ž~@­~IaNƵø(PßËóÌ) “c:šªŠH}1‘HýMs¬å(ê/£]c>Æ>ÚöÅéØwö/xù\ ‹"±_ì7ÜÄÝÞ?ì߇ÒîÌ.yt ÿŸ7pÐï3¤~‡%oldp µ{c]Mdèö„˜ˆ@Øðκ9;ØZ™éëhª): ³WRBTnƒ5:Š>x +-þ…~æ°¿Øö.Ú¡ ¿Œ¨Œ> G„?\ P ¼üP »¥dää•Ô4´õ M-mì\Ý=¡‚ãã“ÓPTT×56·v@蛸Od>R¼~ó†0o¡ÈG¦}R È71:<ت€È|%EyÙé)‰ú‚|½Éè›!ô5æC=cô—Ó¢O¥þ·DöAê¿qR‡ˆR_QUS瘉…é3ž^ ~TüµŒœÂjõL?Fêσïç9ê/¿>0‚ú?é0ú×ÅþÒ/vÈw„*þ²úÿúqæ%Ús§Ü¾ÛwçvëÍúšŠ’‚œôäø¨Ð@ßK§ím,Œõu4TÈHí¦Sõ¬qŒØ_Á4ûÇŒÌ,mN8ºûÞÐíaQq‰)éÙyE%åÕ7nÞj'؇~ö °ÿïׯ‰†gŽý÷¸åß¾¥ZóžCàA³ob my]­Í 7ªaÉËÍLKŽ¿zåò%OwW'ûã&zÚÐìòrÒRÐëBü¼[6sràN'Ô'ØÇ]¾ì«gŸnÕ_AZõq1l@èsrqoåß.(¹OZœ;¬¥k`bãßåŒÇE}QqI©™9ùPttu÷Aä#ŠàɳçT‰×ÀèÏÉ{¸È“áŒþØ0ýøýê +-„~FJR\Txp€ ÆÅÑž ô×0>1ÉW2W}a±]R2U5tô-lìO{\ò ŠONÏ)(©¨©¿ÙzûÜÃؽ(ð<9ƒPÿÒ,-Â>0†ÿ³íŸçÏû¿ä™Uÿ=EýŸÈê?Äê÷Þé@ê—_/ÈNKŽ‹ ¸ŒÕ?nn¤¯­¡¢€ÔàßÊýMPÚ°Û®†º¦Þlç4 ûßѲÏΈ} ûöÐîÀ¾,yÐï)ÙùE°åaö;»{GHì?yúVœW¸ã™ØóæöÁ-?>:t·¯w|mUÙõ‚œŒ”ÄØÈÐ Ÿ‹g\NÚY›C»VQ<(»oÏ.1Áí|[¹¹89ØÑD­NZöWü±ì‡ýoHè¯\µ†J U7('*!¹wÿeõ#ú̬lO¢Ìç훈Š ¸¬²¶¾ Õ@ßÀÐÈø½I<ùQ 0÷èç>®€WyÉ0ó^7ýÒ¢|Œ~txp  ïÑ·23>¦«¥¡öÉè/[6Wýåäøê¯õ×Ä ÙÊ/ ,ŠÔWPÑÐÖ72?ŽÕ¿—œ– ó©ßq§«ÿ¬þOõß/MõÑ™ëO±Þ¿XìoûÒ‡±ú¯°úN‚ú½]·šêªË‹ó³Ò’b#@ý‹çÜœNX›és‡ä¤÷Hˆ +-aõa·…ÕvÍj¼Ù’[úšf’}áâ»)ìëûV˜}høÀàðhÄ~N~Qéüì“zþbÿŽýZBLDêøsnζVfFú:šêÊÐï{%%D!ûðñÀÜÈÎÍκ†èõ9“ð+fŸ…Jý?‘ƒR@•ÀºÇ>¨^~˜þ»¥dä)©ijëšÂìwr;{Þ _DLµô¬<(šºÆ–6È{¨îMN¡—ˆ{ä  ÿ+Ã÷§CŸêý!í=šžBè  ¹ßÚ܈Ð/ÎÏÉHM‚¼‡JM~§Yô•™Aú”+¡Zö¿Åwͱþ¯èFúB¢{¤å©ÖÒ32³>áävî"¨›”–•_\^]ס§wÔ‡é‡Õõu¨Î¼l/äÿG~´Øßô{õßaõÑ’åÕ>591:4ÐÓÕÞÒTWUVœ—•š|ÅçÂYWG;k3C]-`©¿Sh;ÏfPŸ ©¿j%I8êUŸ¦¤?‘}5ľ1bß Ø¿쇄GÇ'¥ûÅÀ~]csk±éá¦öŸ=IÍþ;&Øÿ•Š}¢í„á÷âÁþÄØð`°ßÜXW]QR˜—•– =àëåéî +--oij¨§­¡ª$/'- cwËfNÜîkYWwB; +-Y¾^öéVý¤U×Á„>'·]PDl×iYyEÕÃZº&ÇOÀä÷¼tùÊÕ0È{©™¹…×ËaîCtõôÆ cú1¼?FqÇDØ£AÿÝ,ú¯ ëúxêèwuúu5ýL„>šû(îAØbôµ}…ƒû÷I-„þw Ðgaa¡bŸZý?CüõÙÐäáÛ.´«¯¬®¥khfmçèzö‚Ï•àˆØÄÔ¬¼â²ªº¦–ö®ž¡Ñ‰É)hXPè}C4ÁRW þIg±¿åw:TUÔG{æîŸ/ÐŽ+ÎèPOg{KãªÒ¢¼Ì”Ęð«þÞçÝ]í¬L t¨+ÉËî“ß)ˆÔçä`ŸWý95Í}Vjöù ö¥€}e5 m̾­½“+°ï㟜š™SP\ZYƒÙïêé»;42Nìz˜ýW$öž³ì1³í½yýz¶ï=|71|·¿Úþfêòë¹ÐõqQaW¯ ¦wq9-3·àz°ßÔÒF°?Jbÿ)l{ ÙŸÙÿm¶óß’;ØŠÙGÛ^gû­¦úZèûü쌔ÄØÈÐ@?ï çNŸ‚®73Ò×9¢®¬pnDz~7´<š„ëX׬"³ÿ ݵ,¶Áÿ÷3[ +-ĪÑ'|[ͺ×ìµ[xù„Ðà—‘ƒ¸§©£ghjiãàìvö¼—/Lý˜„kéÙùE0ôëáõoßé Ìü§°áÎ0ýö´O?‹þlÐÃèÃÈ¿ÝÖÒT裙Ÿ–œ +-è_‚¬çì`kÑפB_ðóÐ§Ü úë6À$ääÚ»MPD\rï~y¸‘£&–¶'‘ú~AaÑ )¹…¥•µ ÍmÝÿe¿Ìß±Î÷0~uuºÎ\לÓ:95ͨf¤$Ù’"KQJÈ®õY²”d-B–,Ù÷}Ñ")²„È•PsZŽ¡3Í霖Îûýù~¿ç!Ñü0ýÀçOxߟûußw[GwïãþABýá×túM#êSo†÷Ÿ~Ì·Ç_ÿž¡>À><üw@]w{ksC-P¿¬8?+-1&¨ïåîìhkÉféji¨©(ÊËJŠ‹"õpÐkΟ›jµœo=k<ögOŽýõ\Ø×"Ø7?bëØ?íe|Ÿ’‘Ø¿J¿¥­½ °uÂþ0bÿwNßûì3Þü{E[¿§»ãþ½&p>Ô½2X>)‰±‘aÁ¾^.Çím,ÍLM  ë©«*¡ë%ÄDÖ®Yõó +-~ð<ßâEp* öyËþ´ÃþèÏ!Ÿ€üùÈ7„þŠŸðˆKÊÈmݦª¦¡©£oÌb[XÛõýÏ…ÁÔCñ‹Ë*pé¡ö]=9‰?UöÉ]à,…pØ?H}QqIYyE5 -]#ÛÒÖÑÙÝ ¨“˜–çê×6Àî|·ÀS¼þ7Cý÷ô¦ Ý8oöL[Àþ/T᣼Oa½ÿyìäÂþ[*ÿˆùŸ#ö?ìéê€ÂW_{«êZE)X?=9>:âü9p¾›ó1;k 6ËX_Gs—šÊ¶-r2’âë× ÁQpáUÌgÊ>³fOײÏË6ºêS?€|hµËW +- +- ÃØ“†^«¼c×m=#È|«£Ž'Üpé…†GÇ'§eÁÐ+¿v£º–ìD¡èI˜?Ê;4öê`[Ú8œp;íš™WTv¥²2®ÑígRÿ7õ?LKêÏ<žÇCýw õGõŸ@¿í‚z[_só:`.73%>:<$À甫“ƒÅ¡ý†û4w!õe6nê¯\|1P.Mý9PÿsØ_Ä…ý5ûÒ4ö÷h阰Øà|À¾‡ô½Ðð‹q‰©9ùÅ¥èýšºÆ¦{÷±ñQæ'؇OW¾É°?Þþèþ×#¿½zùüªòuÂòi¬«©¾¯0/+-)¼tÖÛÓõ„ãÑ#‡î7ÔÓç++ÊoãÃDß/[úªìÓØ'qÈs™¯Íá?÷¯úßêƒþ ùùW ú"bù +-JÛÕw£ö¦f–˜øÞ~!°óS3s KpæðÍ­÷;©•‡ºqt§FÞgdçQ {ì=ýç4ôÉÈ#ºCÜäd¦&‚ð÷8óœG¡‰¿u3j¿–žà„>‡úshêÏê/†³@®^+²a£ R—æ>Ãý‡,lœ\Où„@ ¦dæ•V\¿YS>ê÷ <%Ôa¨ÿn†ú3oú4õ ëÞü¤û‚®¿ïáƒÎû-wë€ú@¹œŒäø‹‚ýÏxº:Ù[›41ÐÑܹ]i«œôF1‘µ‚+ù@¼a©ý–—úŸúÖSþbb_m} ,|€}_ÿsç#.Æ%¥fæ—VPØoìwöû±óqÙŸúôSÃ>ñ?ûœÒ×÷¨·»ó>v¾Û7+¯\.!îº@Ìoocifjb°oïnuU%è{Rp¨{+øÁø|x—yõ¿™æe<ô™ª[:í2þPj…Ö­—”‘Cé54uôAyk»ã'aæ‡EÆ$¤d€îe׫ÈÈCÙõõ>£7 }FõI ÏYxc³~<Ѓª7ÓÐ/+.ÈÍ„´Ç‘‡ºcÜ[Y°MM uµú <¾8> =þ?ý1Ôÿi¸ô~X@…¥å¶*mß©©c`rÐÜÚÞÉÕóŒð…‹ñÉ9…—Êúuw[ öõ“áó+^zõÐÔŸÁþt~c©O}zšúƒýÐn;ÚZënW]+È¥'ÅE…;{ÆÓå¸ÕaS}赪۶ÈIKˆ­¼‘R»`ÞÜ¿MFý©a_@±/N°¯¤ +-Ø×Ö541óö]=½|‚ÏGDÇ'¥eæ””U\«ºU[OJãøñCðåÇàã'©?û Fû/_üó@Ü£©¡öVŒŸâüìô”„°¿¿ÏiwçcvÖl–±¾Ž&6¾-r2’âë× ­ëcÙçûnáî²?}±Ïý`ò ü€6dUõ—.ÃÄÅÀ—W„V»G[ÏèÀ!sŒ{·SgΡìÉéÙyE¸ñ@õ»-mídâÑ¢ƒè8€hN¢^=½¬¤0&^|tDXp€/Ùx »¾&B_a,ô—~9ô™Dd¨#ˆPÒî²NLBZnË6Õ{´õML[ÙwñyÜÛÝÑÖÜxçÖ«—Kò³Ó’b#Ïõö8yìè3Sc=m¨µÛ¶l’’¼A©ýq<õgO@ý)` ûò +-ˆ}M‚}3è|ÇûÞ¾XúÀÿiY¹…%eW®W´¶w>è¥kM€©õ>æ¼ý¹ÆÈð™>O?|ÐÕÞÖr·¾j_ù¥¢<@ÜÅðÐ HB,}GÜo¨Y¸]YÜ/!&*¼Fðç•Ë©Ã,DëSÎãÿ…7¿6‹ÿ¼7aÕ'ÒóåÉÌ“’ݬ ´]}7Ž¤½ˆð(ôù¦}æ2Üe õ„ÃÀ’ÚÔWß­­g W9z줇7$adlRZv~Éå«7nÝilnëèîÅDêSø_r ®Îóµé3ó¾ÎeÝõá×½‚??ðäQOW{ksCmu啲⼬ÔĘˆÐ ?/wgG[K6ËHWk·šŠ¢¼¬”8ÐmvÚ%¤Ò2vâª?9ö—rc_’ƾ†¦¶žá~S3KÀ¾³›' ,2j_V°ûÕûû€€Qì¿ùf¶)4?rŒÿq5¿W/ö‘XüêjnV"r3Sc£.„úzy¸8ÙÛL öí…0TÚºYí¿võ*âþ%”ùéÓüuú–}Þª?‡®úDù ¿ã#lûI`5ÀM\R:­ +-¨®£oÌ‚‰gü¤ûiŒú˜„”Œœ‚â2"yCÓ=ØwLп"”ã@ÿ³‚×›óhJp’ó wn£â— +-ó²Ó“b"Ar?ïSn}У^GSC@&žú˦ }î㌣þßÉi–àeV­—’•WTQƒ04b±-mݽü‚B#bS³òà&•Õµ ƒ]=à<ÈÞƒCý3ÔŸî‡úïêê?èCêßkª¯ê—åe¦&D‡‡úžv;á`cÁ>`¨»WCMYè¶ATà¶üÿì××S”ið­©µjÊ‹qaE]AÉArjrÎP@%ITrÎA@P$ˆƒ’QF×ÚQѱ­ÝÒÒÒ‹=çýºé¦‡Aœ©Ú½€ïO8çý~çyxÑ6nB%§úì›üøßüû[XìïEööÖvN®ž¾À~d4É}@@ieM¿4ÚíäôI~t‚+ú­‚}*ì3اC÷Y`D¿™©ñ£Ã€@wg[KcmeYz).&*sŸ‡‹ƒ¥)Ä> UÅòҒâ¢Âðÿ“°OâwÌ‹Èø÷¿YsìsD}‚>,÷ÎMZ>~غ¸$V<um] k{gwoÿ`\9¤Útèw¥•µ Í­]¤ÞÁÂgæØÛÝêÊÝôññ³¯{±Ü ôÛ¡ÝÕV–åá‡zè‡CýΚ ¯¥®¬pxô¹¿Œ>ÇtØÔ‡é„êoçåûAP&s:ºÎQ#s+{ß ÐÓQ± ÉiÙyÅå5 Í þÁáQTþé3¢>©þÇuõ×?¶·ê“´óŸC¶}µ€~~’íè½Á;=mÍõÕeE¹YiIñ1‘a!>îÎv43C=mPÿ ´$DÚÝü|hy@}xâ Ø–ªÏñ²¿ÈþŽEö%HìSQ×:rÔØ·wróò…àG H¾œy’A üD?¢aÿù˅׋Ùï=«cŸ8@…¿—Ï}``†d¿Á¾Û]­p +-+J +-r²Ò’ˆ°Ð`o0ÀÊÜÄ@ “‘"àhþ±•‡üÿDýÅ鬹°Ï>剳dëÛÈ­“’9$¯—^ßØŒf ýÎ/(ä©w—3s +-JÊ«ëñÌþ‡ ×NL³­›N¢í»÷«DŸóÆ¿}Õî%}Æ‘€àÓë®­*+‚rGö~Ð÷rs²·¶45BôUè ÿQô—̇y7Â?êóÀløøwÃh$¥‚úÚz†f4;gwŸÀ°È˜ø¤´¬Ü¢²êúæ¶Îž;ƒ÷ þLÏÍãH ÷àd„†úëì¯Ýõ?“ŽK½{T_ýH:c#C½Ý­MuU¥…9™—ã¢#NÝli¦†ºZjJi%ÄàóïÚ‰²qúTœÝ°T}Η½ûÜìì ûRLöõL-!ù¹yùûáQ1À~ZÖÕüⲪÚFÌ~„ÑãSTøc9°ªôÇœ%Á‡Lè,f§'þthà„¿ë×ê«Ë‹ó1û%Äž=s*¢Ÿ«£-Í ÐTS’ö‰Š@ °‘áPaŸ9ž5Æ>kñ¸v&kdé\‰ú¸rQ´°qU =CSKŸÜwl|bj”»²ªºk-7:I·à¦f1ªëƱÙ-_옻f4;ˆ=¸ì[]mÍuUeÅùxäI·;y<ÈÏËÍÙÞÆÒÌHŸ‰¾”„øŸAŸCý Ôx@}.ìA;wñÃlÄ$¤e+©iéšÒlܼŽŸŠˆŽK„cXXZU×ÔÚÑÝ;042†—ð BJ}*ìÃ@>¯‡ýµý±œûÄRè¯þñìÔøØý¡þÛ]à[]eiÁÕÌÔKÎ9yÌßËÍÑÆ"­¦ª¢œ¬”„¨ðßïÚAÔgÄYNõû´¿‚}qH~ûºúFf–6öÎî^˜ý€ý¸K)iY9ÅåUu-m]·û0ýý_^¼|õ5ì/Rð )øÀʯ^ü€ĿþÞîζ–FLyW2R‰'Žøx¸8ØXšB Òd¥% ü|¼8œÍÜ\›˜ì“°ÿWößÿëïÿçûmÔÿ–¨OVγ•ÄYRï¤dä”aß&VvNîÞþÁ¡¤Û¥¤gç–bµkëè¾Ý7xo„4;æ®}C_媗¢Ï:ðØë«žôá“b»®ƒÍ.=–7>ÈÏÛ¾®6¢H† /„èóþ!ôâPÆCÔß±ë{¸ˆR²rŠªš0KG7/ÿc'Ïœ»p)5ójAieݵëí]·û‡îOÍ>†¡ úpYêZWm˩Ľ&Âýühfbí]xóíÀ[EIþ•Œ”‹çφŸöótu°±0Ö?¢©¢('väY|ç›—ªOÞ÷2o{Õìó"ûBû‡€} m]}c3šƒ38ìŸ9 ì§gç””W“øGIðÓÉi6ößÐñݯ&þN¤ã%$<ž›™¹G(hmn¨©()Ì…øwñBtDXh0ÜC';+sc]-ued@lïA~ ûpJýo×dØ_õ7°E}³›·ú°oA!Ñ}û”WRÓ„ngF³utõôÅeŸ;Ÿ‘w]ßt½ý&;\õ$¤ZŒúÏ7ýîýûU£¿ØêHâa¢µî©udÓÝ7Z ×U”äf§§$Æ“bìïí'žff èk¨*Éö%ÅE……úÛ¶ð|=ú‹#¿b‰ú›ñw€éìáÈÈ)ªÀlŒ-l\=ý‚O„Ÿ=1%ãJ~IEmc ¨ßw÷>ŒeæÑÏøþ^cýYWý#Û맢-¥>¨ÿìé<ª?:<Øwëæ–†šòâ¼ìôä„بӡA¾.öÖæÆGu4TØ/°ýÀÇ»}ÛL³ðÊÉÿݨÿ—ձϳe²Ï/ ($,*. ìË+©ûÆæ4[ŒagcãS1ÿ•TT×_»ì÷öc f‰ðìà»E VÍ>Kƒ…—Ïÿ<&ܸÓs:P=Àü«™—“¾ž®Ž¶43££G4‚ƒà$Šð·Çów®¿±…ý k-ìsD}‚>,œì{3†Y^>~Òí$¥eÉ×34µ´]û; ÅVq%¯¨¬ŠøžÞ~f­£Ð_`ku˜Ä-¿gÆ–Ykf]÷…Ôžç¦'âyïïíé¼q½©žÜ÷ìŒT@ÿ9ðØëlixá9Ð'ÕŽý«FŸ#ì“_~ˆM\Üxyù@ý½âûRPÑÐ9jlnmïâáz:*6!9=;¯¸¼¦¡åÆÍ[}ƒÃ£¨þüÓgD}:SýLõ×Ù_«+êõ1ðÀËK‡‡ïþÉüÜôăÑ{ [g[s}uYQnvZR|LdXH ‡³•™‘ž¶º2À&)®ñóí$êc˜e ¶‚ú+°¿‘ƒ}>&ûÒû:z&À¾#¡Ø‡ˆä–VÖ4` îŽOÎ0" ¼{,¹”lðóÊê/†@䦂·Çòhv +-æ2|·¿·»³ JPUYQÞ•ŒÔKq1Qá'ŽÀlì­-L õ´5 ÉJKŠïþq7`+Ã*û1&´†Â>ú”i¸îMõy¨¨/ ¸GD ›‚²º^x+;'7rà#£/\LÆû^ZYÛÐÜÖ­Žìyj†Qê𺳡ÿq¥ã¾|¥{ûæ×ÅãN:Y3^÷¦†šÊÒBÜsRÂy@Ÿ,¹‰žAW ž}®¯GŸC}öq@Dýp…DÄ%¡)«kë™YÙ9{ø†„EÆÄ'¥eç•U×7·uö@}01=7ÿž?Œ…þ¦B]BæHÖÕ_£K}J8êé£úððÿùäñìÔøØÈÐ@owGkS]UiaNÖåĸèˆSǼÝli¦†ºZjJ‡e¥%ÄPý];·Õ¾c¨¿aEõ¿Ì>×öED÷Aþ““WRÓ$ì[Ù:ºzû'Nÿ—ý2ÿê9ßãø=g8×½Œ F—!II()E´ï‹ö}Ï’%)iO’J¡¤UQí©”ö¾¾%[Š…6ë8Hc¹s3sî÷õz¿?ß¾ßo¨˜3çÞsëó'¼žïÏãùx†ö$¦ " ªëØ—›·½÷C$û£’ý\ ìñìéhCäHà•‹õ¬êŠR
Iq1"P=Ü6op²³23‚ë¨*Ây‹-šËȾ#ûœìsǸ9Hcž9 U_XD~¹ `ME][ßÐÔÒƒÞáåFrNËÌÎ;sÛb¾Þ֛ʠÿ¼¤öíèBæϘ¯ÚáícÈ}Ý÷:¡ÛaÒ5²ë åâ,wÜtQ¡Á}uNvXïzÚ4öûòAèÏùjèóS"Cý©(A‚ЊH}IiXB*:&¶Ž¶lßé´7â`lbjú©œÂ’òjVÃ¥¦–6¨ÃxþðúêÙÿ#ûãÔ£ß'©¾óÓ@?Ðí!R¿½µùêÅúºªs%9™i) ‡„‡úxºm^ï`cnl ­6++½LbP¸ìwӈʥþgÀ¡Àg±?‡b1ƒ}%Uľ‰¹5( ÒÀ70˜8 à ãtnaqYE5«xÐÒ +-²3h£ÔÀ¡Øÿ…žå Þ…ÑÀ®;í­UçΞÉËÊHCD†…ùz!m-M õ´ÕUÖ®–“Y¾LB\TDeƃŽìOàÅÀŸKÝÿö÷±êO"Ô§ÃNü¢ÅK¥0he5-]ÌÙÞy#Žº€=ûöÄMå^Xr®²ö²è8Õþî=ÁÛè ÏÝsï~f"¦ÍN͸žUS‹Ž„ŒÝˆ)C¹Û[[˜r /³œÔ;úô´¯€>=?õ'õ¿#‚-´Hb™´,ÜG]ÛÀØÜÆaýf7OŸÀð‡ s +-JÎUÕÕ_¼ÚÜÚŽÔÇ:ÄÇÿöŸãÔÿðãyÿðú£ÔG©ýé%¼üÇûºïv´ßh¾ÒÈ®­,+ÎÏÎ8ž¶'ÀÛc›«‹½µ™‘>R_©ÔŸG©/0uÊ õ¿Žú#b b.…ÁIP@Š}}C k{§ ›Ý<ûÀÀ~RjzFV^aIYe «áâ•k@„$öÿE‘@ÿè°Ï/‚/û 7o4_½Ôp¾¦‰x4þðÁýûзoÙèlomn¼NWS8 ÔÒÅ‹€sçÌ&kˆ9Ѥ1&ûüª?‘Gõi31h!a1TYYyEU }#3+;’²·ÿî½ØíÉÇNœÊÁEG2†ABËiö—¯^óûp 3ùò÷úÏúøô¡Øûz°ØÉžk`AÄ%…Ðìé8è ã=}\tÎö6¦†ú:úrúó<u‚|Пô%ÐçRÿ›AêC1RêÏ#Ô_.#Ô‡ûXÛ»¸nóðØŸ|<#;¿¸¬²–Ý·Ô }ˆ—·mHË¡þ8öÇæÇU}B}‚7 ² ŒööÍë×._`×T”åe<–¹/Ø׎­›œí¬@fµÔ”ädjb"`8ÿ &Ë¡>ê^j>ýI öö‘óEDì¯^«¤ª©£ohja¸ÅÍc—_PhàáøäÔôÌì¼3Äû×ÛnuÜíݤLxC™Àk‚ÿžú¤ ±ÿú˜`o÷ÝÎ[„ õ¬j8N~v&AÂð½»ýw!œì¬ Š +-ò²Ò’KÄÅD„…³fÎ`hð7. ƆìQ}}â±$gT}ˆ™)«¨këaÈ.dÑ…„EFÁA—•wælyU»ñ2$ dëê%Bû¼Ÿð‡Q«>…>_¾œ5w·ƒÜp¾¶ç$|,‹öœD Íî`ci +-kª)㢓–„n¥)Sèã¯0ù‹¡ÿî™ðJƒÔŸň'ƒ1$#§ ¤¦²²sÞ´uÇ.ÿà}‘ÑqIÇNfåA%²/Àq`ëvõ>€ÇÿG\†iCÎYÆ©?&?.õ©Ô~`ŒçÕ@?<ýGðòïÀÃoºtá|MùÙ3¹§O¤&ÆÚºÛÏË}ËF';KSpYUÅÕr+¤–ˆ‹ŠÌ'H‘¢‘I;2õ‡Ãþd¤ûˆý¥’Òe5M#SK ÂÆ-Û=½ý ‡bãQ³ó‘ µì —®6ßh»Õy·»—`ÿy?<ýA‰ +-ŸÆqÁ~.Ú[[š.7²ëª +-Yi)‰GE†…€B+º8ØX˜@-ª"à Ä9Dšñ[ Åþ˜‘ý!ПHWi÷é3ȦZ°‘¶b%,:5M]csklöí;}‚±ØŽ?y:·ô: kî6®9N¾¯é˜ãkõ/>ê'^lu2æ.°k«ÊÏåçœ:q,9!ò÷ö„9çâ`kifd K¡/û)è;å+ ?”úp%z$2‡ Å—H­[­¨ª©»ÎÔÒÎiãw/¿Ý¡ûÅ&¦ž8 ï¿®ÓÒÔ¿ÿo3ðêÍ[f1‡§þýÿ>êãéþôÉÃû=÷:oµ¶\½ÔÀª>WR˜“™ž’pø`ÄÞ ßÛ7op´µ01ÐÑPY»j%š¬èxí‚ßϘŽûw.φ§þ°ØŸB°?-Á¾ÄR)iYyľ–®‘™¥­ƒË¦­îžÞþ»÷†GŠE(œÊ)(*-¯®£Ø¿y»ó`ÿÑ“§ûo8Øÿõ ±ÿËû÷ï.Pìë¹C±Ðp¾¦²¬¸0÷ôÉãDCƒ| +-ÎöÖæÆÀU¥5ò b Ùÿd_€‘ý¿rpðÿ}Þ 'pTŸ¦L4vö˜±øP}yE m}LØqÃf˜s𘸤Ô$ߊŒ9ˆ÷ÄÛ÷â}ö‚·Ô¥lû\º6;f<úF ý!Ô'g‚+a5 +-b3Â$¥W®Z«¢¡c`bÚ¾Ó7ho´bJzf”b5«;®Óƒ;ˆÌ ZˆQûcìãùàýS¶Ú@h_¾xöÀÖ:Û|åb}]UYqAvFÚÑø˜¨ð@O7×õ6æÆúÚêÊkVÉJƒÈ.B…ÇN4vg#P(ö'| +-û³gÿÀ‹}`‚:`ßØÌÊÖq½ëVwTAÀ~ô‘ÄtÁ‚âÒŠjV}ã妖VX¹ƒ\èàØàÈ`ø ñ8bƒmׯÁyXÕ¥EùÙ™é©Iq1ˆ¿]p! ‚©‘¾¶†Š"‘}ÜCÂ(û³¨ìSì“rœÀ‹ƒ?ƒ¸ÿ ßǪOCžJT"ž7IT­²º–Þ: ¬õ^¾8æ Þ´Œ¬<ÜrulH÷z[{Ç]°YàÚ3¶7£«t&Z¾FÙ!CŽfK*.9 ?t:N9€>–úN÷­¯•¹ñ:€¾Š¢‚¼ì +-€¾8>Iø@ŸŸúi9õ¿#W^¸Hb™´ìª5ÊêÚúÆæ6ë]Ý<}C£bâ¦ed—UÕÕC)¶Âyºa‘JÄãPêÿÆ¡þ¸ìÅ«ú„úm@6â³Ï~|Œ\ß¹v¥‘][YZ”—.¹oO€·Ç¶M.öÖfFzZjJ +-ò@´Å@ýy”úS§ RŸë°#Á`tØ—X&µ‚Á¾Þ:cs+;§õ®ÛvxöC#@ r KÊ*kXðð¯µÀË¿ÓÕÓ÷àñøö¹d Ïÿ dŸbŸ¢ÈþýÞ.,E ÃvÝØ/ó¯žó=ŽÏ=spgîAÈ2v-ÊR(Q*•Ò¢}_µj£¢’=)e©HÒ¢I*J‹T´~-W#ÆÖJážûÃeÆÅý…¹gÎ=ç>_ï÷÷Ó÷ûÍ çÜ{Žúü ¯çûóx>žõ5Uå¥E¹ÇJÙ—»=fÉ —›“°`„f\JT˜«8g¿Òx9ñ™þKx +-Í9EeUh,òÕ741³¤x}‚7lŒFºIÉ©G©Ó)܆fZr¬Ò{€µ¿³!÷’7ú‡£ýÍd!;¬ÐY´=»~¼Ë]Ô„!WYFÙR¥ïOôc"ÃCý¼=\í¬,LôïÂy*ÊPŸŸ}~+ñï PåÈ©?ÔWe{Hßhµ…ƒ«§ïºÐˆèm±ñû¤ãBE¥g«ëZ._»Ž¥{¿ûž>BôðŶ#œf˜úCð“PŸ ­¶2®Áfvuܾ ª5_¬­*/9™Ÿ™–’´gçÖ¨ð{ksC=- õªÊ +-³fL‹•+Hì Tÿ‹A`<Ç>TPQYeþÂEpA`ßØ2èèêéí´žl06>)ù`zfvÞwÐÁÊAìß¼}û ¡?–.ÂÅ>!dŸu"Ã>Â;?´·]5 gŠ óÍH%2lÞ¸!ÈßÛÃÅÁÆÒÌÄÕ¨¹Xm>®¤3±IÔ/û#†‚ìP}}æ°cǗ窯 „V_¤¡¥­kµ¶w¦)µe-9–í©ÓgÙãÑvöï8ÂÚk‰ê<ô±â^ü$Õç|Ɖšêj*ËKÙŽËHMNŠG£G†¯G¶ž®Nv֦ƆúÔé4å”Å¥ŽxÇ Ðÿê@_Vö…vÄ@åˆ3)«.P×ÐÒÑ341·¶§f ÚºsORJZfvþÉ’òªÚ‹Í—h ut=|ôø)•âÏ8ø:âã SH~R¿©¾˜úxþd³Ø¹}=:ïݾ¨5]8_YV\˜“MNŒÛìïíîlgefl «½t‰Ú|¥9³¦K¨·>xêÿ.ö¿’`â¤)²Ø_¡ohL`próô ZOdØÏ|ðx>ÐP^USßÐBBøØãéŒP¤=Âþ¯¼‘Д÷¡-ÔÉàp¹ª>{š±!íÀ·{wïØE>¸ÖÝÙÞštPW[ ‹hÞ\%.ûò㱉F÷SaÈþ;ª?J3Šwêt¤;8£pW­6g•î».$l5ú¾”C‡iÇ•R²-—ÿú=Í8Öç€>QMXqʵú²±¾âЧwÿ¨ŸÕù¥–†úóU–÷yò¾J6b}P€§›“½õ1ô‘-*Cʤ‰Ÿ +-ýÔÇ¥$ÔÇ”Tæ«-YŠn46³²sv÷ö‹ŒÙ—˜Œå—Už¿Ð$ºÚvƒj±§­ˆû¼xÉ—Ð[~©Ûü¿94üý/?‰ê3êó€–î ¢\¶ûþwoµ·]im¬‡Éž*ÈÍÊ8¸ïîí›á±~^nŽ¶–¦«Vê.'‹õgN͘à +- +-;XêûS9öUç«A û&fklìݼ|‚7lŒöˆ Y9ù…Å0ÂóýïÛ±s%JH¯ÿ{þ2NøRøúkÅ~'¼{ëÖèPSYVRT“uøP +-áæMaDž®Ž¶Væ&FÌi)Îa²O‡FѨ¡ ûæñòtÇ̾™6s¶*]m±æ2H¬1¢upñ ·1zë®=‰ûYŸŸ©8Ww±YDu~§£ëAO¯Ðæ/y¬oÞ|`ÉC•™pP–*/óÞn¶áëå–FjsŒ¸,W@'­¸à_/7g{›5f”,:vÜ\}–-«t1ôGýè >?Õè1rã&`MŸÉ¨¿Xs¹îÊU¦–¶Žn^~A6nÞ¾{ïþƒY¹§p£úÆÖ+míԋݸÛBԊ®3Lý!÷ISŸ´XcTƒô<ÔHeñøa²- uÕgK‹NäM?°/!v[tDh ¯§«ƒÍPÅ2M’XÅÙ3§1êÃY&AÙ`Ýf öGI°?N¬ƒÀ¾|Pm±†–¶îJ#3Kgw/2BÀagÜÞo¤ÉÊ9q²äLEuí…¦Vî„ û?I¤ðC|xû±>cØïía|@1Šš/Ö¢‹É ÓîOÜ:@ ý½=\p&3cC=eÄ%…ÙÌåûÉ #ûŸ-öÿ$™ŒêóJŸÌ†œÒÜy Õ—P²«V[XÛ9¹yù††G¢ÎY®ÙyqÔæM­W®]¿É6œªì„{_¨¿YåP¾àðì{{vñ.§ G©–œ<‘{ìm¸8ÄŠ6_çëåîì`c‰:_I+n±ÚU6ãX¡ËËBäÇC_–ú#F +-§bÔG=*âP‹4—­õQŽXD¡ÑÛböH?šs¢¨ôlu]CËåk×QŒ˜¹Ñ‹üB8Л·oÙ}†©?4?©€]±Ëâý“Êbè>ìê¸}" ¢U•—œÌÏÎLKIÚ³kkTxÈ:{k‹ÕFú:Zä°31Ë$Ôÿ²Ÿúƒƒ‚ öGJa_>8q2°!äØ×dØ_mniëàâ¾Ö/0$lÓæmä„ÓŽË-(*)«„6‰ <{ú˜Òó)⣰ÿ‹ø@ÿz-&´ÅØyïöM4c+¬°êìéSßå …;b"ÃC7';܉6ÉþwYRYšº@Ú“¾ž÷nÝh»*jºPSYV\žJNŒÛ±%2,ØßÛÝÙÎÊÜÄPO[ 0SQ†èL%êËŃç$¼êñØ!Æþ×\e°?o:è £g'´²utñðö#)ŒÙì§g +- êšEº\ qì?à…ïC„„¿J1âõ+:‘€î…W/aáJÐÂœ¬Ã©ÉIñÄÆ Á>ž®Ž¶–f&†ú:„‡ùªÊŠŒ“ä'ˆáÀe_¸ÖgŠýªÏ ’±'ÏU_AI‹§g` …µwF™­ˆÂ„£PÏ/,>Sq<]mk‡ÆÒ€"}‰H³ß¤•îqšoHEÞÇ‹ûíª¨‘V•—¢É³3Ó)ÓØíTå´àm­Ðåz”ªz?ô¿áЧ:ÿ˧@_VöÙ€†Ä,¢‚Ä©”UÐ(ÒC=ZÙ9»{û‡aÅ%&:r,¯°¸¬²æB®tãÖ½Î=¬Ÿÿü‚d‡SÿßÃÔªŸðpóá¿Ûº/Hdÿö¤·û>€ÖÞv¥µ±þ\ÅéS¹Y©û÷îÞ¾yÓ† ¿µnN€™±,SQšƒ7Ï$ƒì£¨ÿì“Ž%%ö•õ%K ûƦÖvN®žÞþÂ~RrjâÔéòªóõ-—8":t÷>~ŠçÿŒÞ?gÇþ eŸõ"+ÆW‚>îE5vÜ#H k«+ÎbÁ ÷Æíܱž´ÐÙÞzé*]m-E ç©()pÙ§†3šàЭÏVößQ}!XÊu"Sý9ŠØpHuù +-špVvNn^¾ëBÂPå»þË~™¿õ˜ïaÜu0Ìüp"c̘HZUdißW•TÒ¾©"…•uìÊR•J%•¢]‹R$²/e?3—™s†ášëœÉu8g®s¿?Ïó}ú~Ñœkæõü ïûó¼î×½%Ž\zVnþ‰SåUµõ´ßX‘s‰þø´s¾õh×<‰ú?s5έ·ûí| èñª26ߎ>¸ ýF‘.˜;ÇÛÜt ‚>BU$è#UVæR|›í5ô»PŸÉ>í"é#GÑ­”U'NÖÔ10±°¶stñ@=bE¯Ý¸mçžÄ”´¬Ü‚ⲪZø ¢vT#é›Cü‰Dê§~ßú„¿€ÿ‘ý‰yìã‡ÐX<ÿæ¦zXlQ~Nfjòþø¸-ÖDEfþ>îÎ`™±¾ö4 L K$cþÊéëà¤þ1ê‹a¨8ö¿ )•UÕ5F¦ÐB{'o¿yA!aá+b€ˆØ]{“S!†ùEŒç[Z93ì„Ä =¨¡$&:ÝðùOOä(Á©áÅæÆúZ‚ÄñœÌ´l¢X*:réâàùþ>.XEVfÆú: „d_N})^ö‡|ä²ßês±'}EªÔå -8S Ìa6ÜÜ %Q«×S‘#ÑŒì<šoèqzõÆ­6Ñz{úLȳ‡ñÖú|œ/ø8Y‹ãÕÓx£<ËY³õFúÜ|óp¡"·05¢H5ÔU•‘)«òwAÿO}IêæÎê£"ñ Œ'¯„Y4M[ßØ«ÈÙÝÇ?pQXDÔÔcüþäÔÌœü"Ü åH‹¨ ÝÈ®„‰Ë‰òÂþhõ¿×'öˆQŸ ÔÇÔÅûÎΟ=S]šegÀawÇn^¿zexhð|?/7'{[+3#=í©D²qxôôæiÜöŽúï}YûSö-­g88¹’#V®Z·q+3C@âXAqIÅiRCŽw9J@{$Üðýäð5qB¨F’C’ýGt¦„ Ü©²´¸0/” 5Ü„K0C/·Ù3¬-L!†Ó4hÇBz¸¹ì¿Mõª4ã2UPbN×ÀØÜÊÖÞÉÕÓ7 pa(zîˆO8pˆÕ8ò¬kàÇZ\'·Ý::z(ñnÛn”&.J¼‰m·âÄI-¾;n+ÆòäjÜÕ Zôi¾©ªðЧ&—þ¯@¿[êã\ô PEÊ+ª¨iLÕÖ32£[¹yùÍ _‰~ŒÝpàpF6fnE5Ú“ˆžýãoõŸsW§~¿ì÷­¯Sõ‰úü?@ÞóŒYì£ûwïܼÖÚr®{²ðØÑôCI{wmß´.&rÙâ ¹s<]!°–¦†ºZÌ_ÇËŽ!}•ìU Ø‡>õw`„øâËÑ ûJ*ª5¦jf–60C@Â~ðâ¥Ë¡†›¶I)i™9y…Å¥Õu MÍxþ7o·‹äã„€ýWvønÙgÕHWâ@ñ=Êñáýö;7±‰.45Ôž†æçf¥:LÀ —…. ÙGCšè’ìc£iI÷Ùƒ¾¤ê³&ÿr´ÌXâS}êq;GgwZoÈ3zÍ74ÞXœ`YYUM}£(ÍÎéÖ%Ì+\4ܸ,¹ +-Çr{À/7„Y‡?YˆéÆÒܱ %µÛ-0À×-ngci†<µ¦Nž¨ªÂýïd'ô?APo /œŒ?/üt®1²ãAýIS´t q¬™³\=1‹/‹ŒY·i;Nu(ýè±Â“eUµ çZZ¯Q;>bwb‹Ht%‰ÿG³¨ÿû>á7Tÿe³XÂÙÚºí°À¬¾ +-[›•–œ¸gP½àëáâhgmab £9™ôUNVf4ýyŽbªúºbûŸJb_¯^AIE Ðbjh3ÓÑÙÍ‹¹á²H`bóö$‡éYàÄɲʚ3gy;l¿ÏâoOñ¼Ÿvƒ +-æ‡4‰¨)n\»Ür¾±¾ýx HKIÜ»+vó7kˆAóü¼Ýq,¸!dŸ(¡8~ÜX*ÉÇu#ût²ÿ‡OHuà›ªÿ9§úã”'¨SšXL§ñ-X†íF%¾gÿÁÃG²ó +-ŠK+a°ç$–ËR|¸½iìÛUŸ+pñÝÆ¢üÜÙ35•eX¸¨ðÃi¹!ÌèHÖá˜nÎŽ3m¬ÌM t)N5%8 ýáÝ@`/ /)ûì`¬%i–Á2RFGjê˜XXÛ9ºxø,Y²á`jFÎñ¢’Šê3XExõm÷<þ–ꛈoÇNê÷Ë~_ú:Uÿ_<Î:ØÜ}Õ‡÷€ewn’Áž­;]~ª0/ûÈáûà¯ëW­ žççåædokef¤Œ©‘¼‚bä®"ˆõ’úÝbˆûRÃö¿bØW„‚À¾©Åt[{€ÂÛo^PHXøŠ"v×ÞÄäÔŒ£Ç +-*ê›%QÄ +-‘!¾â ±ì¿݉`ÁF‘`ˆ×._lnª¯Å­NäCS’öíŽ*à‡‹ƒçûûx€6–fFú:šS&á^òo‘ýAâŒè`ÿ'¿.ª/ªqQ‹CõQâpWi,Lk;‡Ùn¨ð %Q«×£ÁY”Ùy…l·Q“ÀÊØlË$ƒ|wŽ¯»Œ6Ê‘¯ï{m˜·dCí銒₼ìŒT–äÖ(ðˆ%!´Û<\¨Á-L¹,Õ'(sËí+úRÐÿä·@¿[êcQM²ƒ¡%1ôŒÌ¬líܼü懆¯Xµ~sì®}hž*?]wö|Ëe$=SgÏY=rí(ºS?õûÎ'ü‚ê¿ì Ÿ€cyO;þ€Ö çj«Ê௲½;·m\¹4$h®¯'0fmaj¨«ŠááËŽ!ˆI󯞨Ͽø^½v ì°ÿÓCâÙ¡²ªºé¡H1ÃÁÉ•üP±rÕº[!ˆI)i™xþÅ¥ÕudˆøøH|ž=öÿþŠ(‰}/hqÉhAŠx¦¦²ìd!Á"9qÏÎí›×¯Ž+ ˆ^n˜Ft/=mȾª²ÂxNö +-)n ýheÿ Õ«¾Ô0élºÉÊÉÓr›¢©k`lNsõô \ŒÅ Éñ àú»¸„‚óIÈ£>cÌç)‰Ïã‡÷Ún]¿r©¹±¾¦²´(?73-yüŽ­ÖD/_²(0ÀÇÃÙÑnº¹±Žæ䉀˜lgÔÈõ¹yÛ+Õð&ö‹°G/†}BQØŸªõöËý+Çtã³ÖvÌšÙ sBÊ«r¤œR:§¨t>(¥HQQˆ•CD¥¥ƒB"%¥“brÚ›I”´ÍžÙ¶Acÿ°™½Ö˜µ¯ï}?ïó¾oBƒöRÏŸð½îçs}. bž! "±ÂËge`0 qk4Á"ýàá£ù'¡ˆ•5õŒß·àñÁß„ý2Kü/ëG9^$Þmm¡c¡"«áˆEÇŽd§ïOŠ‡"†oÄ4Záí±²mĆšT—¨("Ù—žŒƒBÜGö»S}æ§ al¸©iLüª¯£ghjniã@³ An‹ÀjcõKÊΞ¯•¶·£°ÙzPÞ] /×Ýr“¥XOå]r2›bÜ½í¸’rtB}›cµÍ=+w¢f›ò(yèK³|Wè+Ê>ûÄ¢ÄÉ”i}«©š4ÆÁ]=¼}p¯H”drZÖ¡¼E§+ª0qYE¶Ýû;kÈ'bAʨß'û½ç“©þoËð`ïvÒÜ%ñim÷4]¬¯>W† 7'#5)n×öˆMë×ø¯ðrwÁã73š§3KkÚä `Øè‘d®x÷\\åö–’ÓûDìãÙ>‚c_B¬àØ72µ°´±wv#E\½´Ø¶sÏÞäÔŒìÃy'ø.6]ýëæ–VŸŸ/hðv±ÄWc_^0žò]DÀ,‰e„s‘$¦$ÄîÚF¸X¾ÔÝÅ5IŠ8SkõäØ1t2šG$ûJÌû÷ÿeÿUªÏ£ä®*Qçý­«oL«ÍÉÍs™¯?FÚ›bÌÌa›Ê›R¼ ŽÑdSìî_}ô…æ–lO;)C¡ºo7óņËJŠN »3R“i²E„mX»åM›ÍÆÒ”Ú{Ætä8^M¢Ê /ô·ýïúŠÔdðXÝläh:Ù4­Y:óŒÌ.²wq÷Zá¿fý&´d\RjFN.•ä¹jœ ÙÒÚŽŠ|ððçǬ!yAJOÕGýÞò‰‚¨úÏŸ1õá Ã?pç~Ø+0V\xìÈÁô} ±;±t×­ÄÜœí¬-L õæÌœ>uÒx5 웯Fí|2Dé©ß#ìù5V®ªDm™ ‰= †"öEd'>|@×joˆQ_SYqúTŒÝÑ8jÒw$ÑÎzÁ|c}]æˆ(JN‹á¾ì¿RõÙlcªÕ6~ÒMm ÌÐÔÂÊÖÑu‰—•7RŒ‰K¤ÉwEˆÕu ´Ø¨ºy†wJõõ¹ØÜ/z úÏþÃ$‡Þ;ßkˆðÖMjólÈ07'3ª{{$-6„è‰î¶µ²0CŠs¨¼i³©¢½ÅÑö>¡ß-õQ•ìh_}Cóhü¤©ÓgÎÁ:²°¶svÃ8Z½.tóÖ± ûÒ9VX|æìùºÆïèÍßÁ¹„aDžK”ýßû°ßK>¹A >þ‚Gô0{½yýÊ¥†Ú*PìDÞ᬴@,*|Cp æhkenb„iN¸ªŽE/¨ `¢µ¾µå¼Œýö?ýlè°áŒcTÇ©.€}=c³Ö¶Ž.îK—ûÀ7Gí0öÈ:Ä4±¼ĸtâsëN™y"!ãß„ .?¯Á¾È ¾‹Øµä˜qï.¦Ñ ºQVZ„ƒ¡&ãb@ hâJ¯%®Ž6V(JÌ#m&‰cU8.†²$\í”ý.ÐWPý¡\õ£©>ÊÛÀd>ÄÕÙÍ“B Ù´‹Uwn>AŒ"ÅÚûµ v¾ô¹w>~ôP:×0n¯_ù®±¾Å]\xœöE¸# +-Íà‡ÁæêhKÕm ‡5§Lš >N€þðaÂfCŒ»‡þÏR8œP–BWÒÕ¨*ÙÑ&NÑÄ<201GQ.öXæ¼!<*z÷Þ”´,Ô$¶QTçÊu~/V’O¤)Gý>Ùï-ŸLõ@öŒ¹ýð´cîÞ¸vùâ…šÊòÒ“ùGs2S“âc¶G„…ù¯ð^âê`³â:—Œ¼O_ÔVn­o¯ú]±ÿ± áÝ3ìÁ°?vv.³D=†µiâÊÀ`ckôîø$òÄ£ù'‹ÏTTÕÔ7’(~ßrç®ÀŒGO:‘ɾ`ŠoÀ¾TIöŸBöfÐhocÛ¨ «ªÀ8:ÎDqïž[·l"d,óts¶_„›èÎá²OU)ÊþVö»Ùê+«H¸êÏž;ÏÈl©¾‡÷ŠUlhnŠ0#{7O°ùvk»Lõ{´Ö^H Ga¬Éò£Ún¾q­µª³gJNæSoïOŠÇ\Û²)$8·“"41äПhÊPÌ£ØÄýéÙGŽ—«®klºŠ‹µÞí¸Ï¶oÉgÏåeÿ÷>ì÷ŠOîO¨/,Þ'b÷H]Á°†ÚªŠÓ§ +-ògHIØ ‚­ ô[î¹ØÉÎÊÂÔPÚÊøEÖ +-|ÑÈUz/Ôïûý^(uÁ¾D È`Ø×72µ3œÝ<—ùúÃÃ#·)i™9¹PÅÒòsçë5nÞºÝÖÞñÂ+ö /qƒƹñ¯þD²x=yíò¥†ÚógËàŠGeØ—» Ô€*ú-§ª4L ôæÌÔÂBÒeŸÝm°‚ì0ØWTý~2ÕgÎJªOªCõY‚Æà—z›\ºkj;'÷xá©Ó4ÖXkS|âVëYiw ï¹ëléTãéAsÊñâùVC|Û#ÑÚkü}i¬9ØàÕéÓZ£Õ$úTÜ´×K[ÿ÷ýn©¯ÄÚòóxúcƪ±³¡+M-¬p5Ïå~k7†GEïIH9u8¯€nVÛ€utóÖ¶{|¡&…ƒÉ¨ß'û½ã“©>ý ‚ýÐâ¥ß€ý0×k—/^¨!qÁ2S“á­‘a!A¾Þ®Ž6Ä/ÝÙÚš _Ê£˜´~ÆG.ƒ—ðìßíÉËa¿Ÿ"ö92èí«Jðø™)ê4¬l™*úQ;bâ™+B|NWTV×7âd‘¸¿€ËçF±/ÊþÓNô$ÖÑt2f‹õ5•Ô”\ãwGGm%lÀìh!éCIö1‘^!ûËãmŽ÷ÿóuQ}ýƒ” ðúòë‘P}5¦ú³t_¤úK¼|Vb¬¡µßþôƒ‡±ÕJ™·"½ÍL\ÿ!íl¹ð^ }&8ì­Ë†Ú“G´l…ÊæK á).䇩¶9t}P•¶ ¶Ú3c]ÖÚ”Õ68Lú,Â~ïú"ö…Óáõ u9”·¥*M$MíÙº´]=¼}‚BÂ"wÄÄ'§fb•–WÖ\¸xùÚf^”ìdèIN}ÙÁú¨ß¾—Uÿ9ÿ˜¹þx¿ãn+ÄõjS#̧¬¤ðxnvÆþĸ]Û¶„®_³ÊÇËÝÅ~ÑB3£y:³´¦MžÀégåðÙõ.ªÿÑ+°?  ö ªL5µA ãùpEGWÂF`pȦ-Åøÿ±_.N= k7³â˜ÙåصvvfÇ-—(·’¨”nºQDX)Ý•”îJ’JJ)¥È%Š(R©ärXvmî‹söÌîžsì²ÇÎsfÇ™ó}ž÷ýýúýºÐ3éýžçy?ßÏw'sãHYEeµ°ÅpPå…ü¨ëâPÿ¿í¡Cú"êÏŒÈq¡±îlÕÉòÒƒÅ{ØbDh°¿7Ía‰Š4CÊþ¨ÃZÉþŸº™ì·Qý¾ªª/Úö§3‘ÊRÛÎÁqw5„6¶—”’ÆU ™å5ÀnÜ$oª/v÷ûóç¯+jí6_»\$‡»©¡¶º²¢Œw—½‘Ž¦†å­XŠÌv°CU›ah€ÐÖ‹®6ŒR‡Ïûërè«Ë¾hI¸}]Lî‹!Ô‘t&RZšYÙbn®ËW¯õACŠŽOFVæbj•W®ÁsèàåÌøÜ_ôÈþûöÚU}BØA°G(¼Í°†ZÖÖâ‚ܬô”ĸ¨0àËc¥>ÀlÐËxº¾îm-¼>Q°K®7¢~Øï'±Uüô3éŠcpýŒ}3Kk{G”]÷/=}`‹1ñGæî¼Âý‡Xëš._½öMóm¸Š/>#ê¿jìà‘=W²ƒ…‘†vã:£ƒ|ñð}ù9»ÒR’â¢I½ÖðÜìf™›MÓ×¥¸%é3vÅÙ×è>²ßžêËý}"U_s”– m3¨þ<'Êl,oCX$šE6vwô8¬U5hëý‡°´êi„>-ŽŽý™J^£¦Ñæ®^¾ÐÀ-{VƒÄðñ¤¢¶ÈýÖÒÌÄЀ–‡ÌÖ$è‹Ð–]­_—B_úbv<:ÎK*IÚtõ§SGš¿p‰ÛJoÿà°¨¸Ä”ô¬Ü‚bŒíÔ™Ú† ˜Z3E¥¸÷'ÊzÔ#ûïÕSþI}¡? ØÓ_ÿ‹†opëÛëW/5Õל†µ–åçdîØ–±1ôr_ºØ ÀÂÔÈ` +-)+]ô\2Vºpù¼)õÛÃ~_öÀxIY7Æg[41³²™=wÐEß@#vKòötá‹ø@Gã…Ëj¨ʎÿûJeT#²òâùs46 +-KcêÖ„ØÈ0 ƒ|q±Ó<Ä%J’É>å%Ùâ`!û*°Ñmd¿#Õïߢú#FŽaÕŸnlja-T•Ç:?µ˜x¬.+woQ zZUu]ƒØÜ{¿XõU×aK{Ù^IÃÞ 8Š¸F³¥Å5bq§ŽS^ïÍÍÊØŽš¶!ЗÛ=m¶•¹ %6ïNsøP’ÁƒÐq( /„§w—@¿—jd*¨Ó‡ð 0ytãÆOšb`„ÉÙÏE\º£#mŒˆMض#3'¿¨¢sº¦ž²ò»‡tï˜ÚSîG")ը߃ýnýT&¦øB[©ñÞ¹‰Â‹_p¶ªŸ 0/;#59>:<$ÐÇsõ +-WgGRVézd¬šÃ.R>~qúo®ú½Za¿w 6Øxûƒ%öGkiŸ¤7ä0·²…/:».'t¬ÙaLÍì8v¢òLm½4FT^`ÿGî¼ô:¡Œ-3ýè…tFš°ÿ·GˆB«++ÊŽ”íÍÝ•¾ÆŽ¸\‡’䲈&gajÜ"û¢&µÈ~ßn$ûªþŸªÏ»cÕGbÛÎêSOC`cs‰€×4vÖúó—®È–Æqýøg•½½2­Û kÙѨØâÚ‘Ö×®\:__[]y‚öFq ÍÙE-mǪå®Èë9¶¨iÆÓ§"°µµF è#±iwýÕ–§Úo²>5ÙçÛgá¡š+f‡ÀÔ›jhb> yéìJ%)0$<:>95#;¯ðÀácUgÏ5^ÄÜnâÞ©!ѹ+ ’ÚËÙ^+Õ—Ô‡ê?ak%ù¹ÝüõW Wí™SÇÉYs³ÒS㢠¬Þ«Ü\ΟCÆ:]_w‚¶5]&õ\¡úoƒúŒý> +-[üHè"ÈÁ¾8z,ÐAØŸi1ËnÎü…‹—®X½ÖÛÆxìÌÞSP|°””±¶¡‰éqëîý‡•ÎøôWÖŸ×âCʬ¤±=þ§¬H·›¿a|Ôðàöæíô€2úx~éβokefbh0e²œË>ïCÕéuÙ•ê‹¢6LøªØ„uç5³%™âšöV.à¥Hk±¶ŸQv´W‡uë¥É¬V«h¼µ&„uUEyéAZ[fZJR\4ÒÚß›KÚÂù×3gLŸJ‹C^Ëšö©:ôû´@¿Ë©/2“#“†7dJ®öÔ¤f–68zjIÞÁaQq‰)é49—èH_}ÝÌå–çFa©ÌJ5Ù×\êyoñ)?ƒªÿpçeÕÿ;ÿ8륦úšÓ'ËKKŠòs2Á®ØˆÐ ?¯5îË;͵·&a2yü¸1#G@z®è/¹¥Ñ5Ôoƒ} >}ö +-ì1„Ø1V‡qÆLKk{Ç…KH}‚Aø¤”4éŒh¼gë/\¾zýÆM|!ôü?¡SØWjc @¨#}KqÙX‡’TVz²Ÿ•±=yK FçÏÎè¼€f7ÊٗӲ߿»É~§TŸòzÊ4#´4 {[ãå‹’†´ÆÚrò÷ÁX©£!¬åÖ Õ‡³Jz©/íÕ­eg0ŽjRÑÐÐlOŸDVØ—ŸƒŠÆ[  °^¶ÍÞ¢Ci’6f”€>5Ü +-ès`kt!ôÕ©¯ÑG‘™?ÆôØv™ž±)%&Õ¤5^~ÌØ´¤œü¢’R|M=OŽ-G Ž¯]5,•S{×dêyoï©ý—ø ²ó¼î±²^Ä7¨ª8vø@a^vFjr|LxH ¯çê®ÎŽðsøªÞ$XÏp¡«à]¿ÄÖ]Aý°ßOÁ6F¾æ¨1ãt&êêƒfV6pÆE.n+À a‘±[’·C÷?à>5çγ5Þ¼sïëOg´Q¥!)½²/' "´±-éF·/Ÿ¬5ifçEü@O²µ271²?Zsx·•ýTŸóZ¡ú£¤ê#­mXõ©£!¬#c¶¦ÊŠFè’K 퇟¤²þ¦tÖΩ¾úre?be2©ÿr‘ +-Z%vVÂQº5as$š¯×š•n.ÈêÙ6¨hFÓôu'ÂtDGûœ¡/÷Ö¯ë¡ßK55Åüèð©)‰ÌDÇÕ™¤g`hb>ËÎÁ‘†çéš”Wˆƒ-‰Êíí{T’d\*§¤~ìwó× +-_ÿ‘ÔöoÒ(+Øu÷kÐ÷).ÈÍJ'r…x{¬rs!pÁ{XWÁ­aCØVùüU¨ÕÐ5ö°2=†Âµ>ŒM!³ç99»._å±ÎÖµêÃ)9RVQY] ùÁ7¡Ò+¼ñ·ßŸ¿!É>Mç–Äao,/=X\°‰¹uKldh°¿÷ÚÕRö-gbzz“¸) cÙÔýdÿµª?”±ÅamÊÜZÈYí·~cx4Zú®œ½Ebgu ¢ QR·¬¬3Aý²mNãÔ©ÖŠzFAÝP[]YQv„W¶sǶĸèM!ëý¸ -vš7Çv–¹©1/³š+‡µX›ÊÞº ú­d_ PÌB²3Z ãCfšYRQrq[åÈ ‹BOJÏÊ-(>tšS‹Ùq`¢%Ñè8/•q©^‘Þ5›zÞÛzmUÿ…d—0V|„;Ty/A~@®#%Eù9™;¶%ÄF„ùy­q_†?`omajûà‡ö„É„ý™³ìð/%môAâ’RÒ2wçî'o¬:+Ò|ûîw\zù#¨0„¾‚Ú_hŸ"•–$óÁ=žÝ妆ºêJ!û9»ÒR’â¢ÃCÖ“7²ì£)™ñøÆv_Ùoý¶ª?ªÏYm`lÙ ªigž>(h"©±2WMýùKì«ØXÛz¦šÓìë±/µ˜ævöíŒv¡±îlÕÉò£‡öæQ=KŠ‰ØDA½b)Væ`gmAI=…w6’nþsZeõGªaÝ»+¡¯N} › =®óÃÑëO36µ°¶Çø–¹#3ƒB#b1½Ìœ|D&õ$ ó>_;dÿé¯<º=²ÿþ¼öUŸÐŪÿ=Èõ?öËü©ÊóŠãÎ5Î$j\:©“DEI3mh*²( àRM@AEEPAvA¼¬"à +- +-Ä}aÄÝHuâŧ?Ô&6N3mLêÄé÷œç}ßûÞ 3s§7<Â9çù|?ß›°øª¾tU“nEF, ò÷ñš; ز·™ duô(¦îÿM-õûŠú*ì÷Ø﯋ý\vMLÇŒ³øà–V ˆÃTW÷Ys=ø!Ñø™š<ˆciyå>0äÄItÞ‹W:„9v…Hꨚœvt\“¤Ä¼+ÔñGæQ‚™cöúô5hJáįys<Ü û6BöÇ*²ÿ–qɾ^Z+ªO–ö®VõA-R}O¨>úÙê¸ä´ llóv¡úÈé6ÖU€«S´³oerýÕW Ï)ÍÐç”ærvæÔɵG¥˜.ÌÓ %Ĭ +-_àëí9wꙣÍ+Ë?}`AýŒ“z„.ôû è÷5ôû¨O_¡>&8TîJãDjÚsUòòAhFDÆ¢)iò7Qfî;t E çN‘)÷¤oµ5I_ö_5›zßKz*v©þ‘ëQŸôçöë¤«Í µGVï)Û^R˜›•žl-]ìç Y>Íâóg|s3“÷ZBU%fNõû¨œQ‘F\¿Œ}ÖFƾÙØqï3Blí§¹y̞熄,‹ˆŒIHI_Ÿ¿I@ß ¡ùt;©#J¯L‘oá'üëûÿGߟ'zy,†÷·÷;©(u°;6Ö?Œ¦Dã˃:&ÅE­ ô#ˆH²Ï”cÓÈd¿GÕGAã•AU?DPccÓYõ)§#cSÒ³ «hg•ÀV­¼/pë®”Ò¼.×¥›ýô)£i[€þw¢š=@­!}¾ýt3G¬kó¦|¤tJblªm Ÿ×¼ÙnÓíÅÂÓf}9¨ÅÊxgÊÒ ·5Ù#ÄÙSnrY2ãØ´žd‡¢ßzû-]¾*Ÿ•[X²½lO55¥æÖö —;píT”Ddò­«SÝ«¦Sï{9O_XµªÏþ#qëê¥ód?5øå¥[‹!«kQxñ |ç2ÇÝÕyÊ䉣펪JÌ’MµÿK¡¾>ö*Þ8œ>Ä !ñ±ž4yŠ“Ëô™€ˆÏ¢ÅPǨ¸¤Ôu HÑ–»öT8r¼¾±¥õì…ËW|j½ä?jyì#ÚÙ=U@¢cw¹)1G(4!û;·ä#Âýb€}RG’}šà{Šì¿i,²¯^š²3IT‡I£z†œž4ÙÁÙÕ}ö\OÚ×ò•«ã“Ó25”Ò¼®šM¢›QHß»ÿ@Ú–RÍzÌèŸ%»Ñ‹hjµ´¬{´¬kW‘Ñ­-Mõ5GTïÁ¶Š7æd­KMŠ[½r9u3¬kæt¤ôäITÎþ0ÞÜlô(jgœÓ¢ßìú†§¾4Cç°á¿ÃML)7-¹,¹ºãâ}B–QWZ»>©YZŽªTƒn{æü¥«×DS’3SžÞ{eÿ7ðtÉ%ÀÅÄ_þƒÒ l]¹H²Zw쨵c˦Àë*bèôŸ}ˆ#aæÈ1·Àöíœ]f@},ôZ÷F26än,ÙVZ¾÷³ƒGé0GðÐz…=ªAòã ËþO]eÿÞ[¨J4¿SMõÇ $dyšÌ4ŠÍ0*K,ûœ›²ì¿‹Ž0*Ùïªú¯«U¤¬ú–’êÓº|‚ÑÍbÒ¹‹±-RýºFvUPë&-Kif/²«nW¥JèÎ/o}A»:×ሮ,/݆f¦ÉHKŽ¦Œð]ð)¶åêì`gcmÍÁºL ú¢œqL«sÚÀÐ×¥~?Urò )8Ét0B'—³æzùø¡,a‚š¼M[vìÞû °¥íìÅ+T•:¿âfË·®d¦õ{±o”OGXõŸü aK|*½×¡?쪀VEÙ¶’¹Yék¢W. ôóþô/3ÉT'Y3²Ì„¨ +-b)÷ÏçoXáÑÅþéþ±: +-Š˜’;2F짺ºÏšëéíŽÄ$¬Y+챬¢Š@ÒÐ|úóù_Iá? +-Iø+ü’?ê°„ÆÇ¡É(ö %7¹+µ·67 6÷URY"}LIŒ‰ŒHXö§OsDpZ‘<Ž53>ÙÕǺއê[Kª?Ï ª¿dùÊèx,+;“ÔÌXUÏ]ä]‰b¦›Ð?éÛjwµL@_Þ”* oßPzVµ¿ª‚:?{=®»Z‚s÷œ7Û÷N˲ÄÁƒjö‡ôP‚þª}½fpè+s¤»—ÏWס!"9Í-x†¸x7'm):aMzYNY&X‹k§Øä®$ç‘(¶?&xòD Éþ®@‰&smrüjçâE>DèãäI,ûãT²?ØHd¿{ÕC¥ú£ÍÌ…êÛÚ;ɪˆŽŠMJ]·!·ŠYÕþÃÇaª­gYõoÝ‘Uõ‘zS/¨ú?j[]ºXNýçlkK£¨e»vl)*@@§&ÅFQ/[äãÅ í„{Ç®Ðm)¢ß©d´ ýþú} }=Ù—³SDÃEtš˜Š¾4Ñv +-%ç'ó¢.­ˆŠKNËÌ.(Úº³¼#¬oBnÂqHöIqâÖ÷ÊþoèuQ}ú BõI€Ðz³ðšëÐy÷Y…yÖ¥BT×X(¼.NPŸ>Ä'°H|†ÕòªŸá©¯£ŽŠ;JØŽ{d ðB§8¹€$øþAðÇÕqIir7o݉Ò{ðh͉¦SÔz;ÀÔÞ¯»d0é–&Z…„ìßúB†IÝ1 +-ÎRªK4ÃXdp€ïô%Iö9:‰$¿§)‹ì¿ êó®ì¦JªU­"O]ŸMÍ›ªm8)jç³¼(0ë{Ú“´z„¾6¹”Q©å=q<·Q<Ó­cQÅXTFZr<Ší’ ÿ…ó±©.ÐÖQ/37CB£˜Ñ®†HÐçŒVBÚÀëÒ¡~?Õ9;GSœ`cïä2í–†“ˆäÌ+ܼcÍ°®±Áy¥ƒÚn]››êKï•}#~ú®ª0Kú h½„¬KçÏœfQ­ª ƒÊ‹è`y¸Mu°šj^á¥â (¸âû7¼òèc ôH|Þfì1· õ±¶±spvÅ/ ^N,Y›©É+,Ù^V^¹ïÐ1† ùÕ^ ¿ÿƒz¯0 ¡@zÔ•'O岄2N„ì Ù—êfX+’sKQ~öúµk&d²ì[ Ù7e”Œ6ÔHdÿ¹ª/v¥R}X*xEªïBšJùÌ‹ª¨bOmiĺuçÞý.ªßãšä3[’;­θôÛ7hM8õ憺c‡öWU”m¥lMBLdÄRij7ÇÝç.òÙÂ\lêm*·CD»øR¡¯L’Is Ì‘ÂýÖÜ‚ê-e§›O14let<¢3gcñ¶ÒŠªGjNprr]âbûð›GNy„z|Õ„ê}ªïÀ¿A˜*EµWU‹ü‡<õоÊÝ;,MfZR\4òüBáµ²¤¾kj‚O@@|…V†U}ùøu°?@òžAìŒ$>¥ÜÇqª ÒÓ›`›˜")ä®=Õ I]cKkû…ËW…CÒWNþ©ÅIϲÿ¬;‹Ôò¤“’³²ßÖÒTü0ád[I!25)S ‘eßÉÞV%û#»•ýÿKìwQý=ª¾›ÇÑÊÂWÅ$`O9ER)«mh>Ý.TÿË»R'ÓëI[ꮑaI8t)›qér%ÖTï¡p.ÈÉJOIŒZ*ÒÙà ¥Ìv"Iß;/ŠóYR}UI»2à²td_îLƒSzbŽ&¦c1GOgjLc0ÎÙ™©É/Ú²s79Ž½íÜÅ+4ÄίDrr¯•/ý©$ûÏz±o”﹪ÿ¢ú·o\ÇWh‡ÿ@Sñ¶ƒWYëRbV‘¥B~þÇ~¹xåœçq|ÕØ9gYvwözF!T®"·b2›;I¤{é•R#B]UˆÂ`܆q) If¦q—kÍºì †³.{qξ?Ÿï÷×ïyOOÍÏœ£éû'|>ŸïëýzWCõGá…ê›w0´RÕÄ(Ô×Æ~Kì·#–0ö;u¶°ê÷!…tt"š¸ºÏò ‰ˆŠEéMIË8ÿ”9Vñù• |•'ú,R¯FjÌPÑHÙ—ªoPÈ"å·n¢ì\¹ )&côœ!d˜”}«ze¿¥JÞØ(ÿtT_a•¶êS+³ª?f,¥³O@p©~rjÆ*¨þXêl ¼ª¤JÕÇ’$°VýWú’Yîèvt½êò…s•ä7GJŠöŠ%åf¥!›a8!´¥i“Ç#œ‡Û¶ôÿÒÝJ¦3ö$âY¾î¦Þè®´¨oòŽŸË7Âsá’4&8ŽÌN(Ž˜¢8õGͲÿSyºª/ƒ®êyúDùa©…ù¹YÀÕ‚¸èˆào·)ãÿþÁH¢•M/é¨ «vmñ꼇µÇ(Σ¢D°¤&¿þ­PHÐÄ¢;¤Ý‡á£œÑyÝfzùÍŒŽ[”œšž—_Hþ³¯µ÷,’¾Âõ[€è/¢è—}1Å»·k—/Q4dá™Ê@ ö÷ö˜Þ ìÿâm–ýzTŸZ™Ø“PT‚ÕÀ¡ŠêcKa¤úK–S6 +-I--;~òÌW"šyGš¼j¤êÿ[ f¶ÙÇHo8™Ë)™©ÕbG«ÒS““P4Ïöó¢F6v̨CÚÂq°¥.:p8S·m+¡Ïñ¬³¨7º)åìéê•QŠü¤I²çtëÑË÷΃œâæáôĵ£ÚfåænF³Exò­ëÈ~]t6Ë~S~¯«þ‹ç¢÷>¼ÿí=®½WWh½¥Åû÷ÀÖ¯Y•‘š¼(!vnX;ê˜Q‚Uw©¨ Oð«6†jÕ×8Å …BJóa‡$ìw4g‰ìÝ—x‚ÎËéí6g^|ââe+2rÖ¬ßH?µ·ŒèìùKW® ¢¿ðøIc¢-ûu©–ÆxçÕžg¿Rdç'ä‘™+—“ìÏ MI²ød toHöß2ê7Nõ­{p%sª?Ë',ä«°#Rý¢C •P}¹¢ûBõµƒÙ0ôÕ‰\æ:vãoè .ýðAóv´Ú59¼¢øysÃ(™§Nä¡ØR4[[bIfXß{[qðïjCß(‹Ò’}e–è·4J>xä'î]”¦q“\gxú…ÍMàδf=šížýÅ¥e§äÑkExÒ¥ó›e¿)?MUUÿqíô^Hêõ«—/­Ê*Úûév8j^vÚò%€UdH Ï¬éSYQ‡ìßço=­-á>ÒPUT™úz°ßJÁ $ò7ï1OØ"­{PÙ;:Á~&¹ºƒ(ÁQ± h½ä‘ø @JÉ‘c„ÉjQ|k!ûOëè?e_³1=&¡Bsü†M’dÿÄ1t& rËFˆ$Å'Ë~!e‚‹ÈÏ~,ûê(IöùvËþQ}2Nf^‘ìç´TÿÁC5— .H§ŒáΟ>áXþç]Žeº\.}7ü¹œ•–²‚A·îî:½–ûX?›^=­­ºvîÈ…LD³TýV­Œ }mê›( J³T´'ÒÑ Ý–ò30$2f>•¦ì¼u6s|-?yšI½V¤çc-Ùÿ_³ì7ѧOõŸ Õ õÚ•Kçñ*Ž>¸ŸZoÁÚœÌÉIÅUþ^3§MÿáhT^»~6„ªÎÌÚ³ rß­ûüŒðZÂ~; +-ÿ‚ÎL[;òHüƒ)ÓfxúÎŒ&‘LMÏ–LÙWŒ¯@½tõÆ­:¨|' ¢õôc_+Ïþ¥1ÈÈ>Åç™SÇËJÅ$ *ÈÏx’}´¦iÄ”¦)û ª¾© ’ÙNQ}wBUDtÜ‚$YǶìªq«þFV/ –1½ª_·Nåó_)ʘØϺÕÙé©ÉI æGGbA^3ݦÀpF wlÇ¢kï V$“YB_]’Ü’Q¨ßBLS9y1LJÐöf¸w”[Ìrˆº-¨p¸hM™9k d~²áÐ$oVkÄ§î ›©ßÔ^=ªÿT*+ªdÕÑCÅûv³¡f§§,]?¨òõtw8–•*¯Bª?qá}W‚ÊHª¯ƒý–(šD!4í`ÞÅß wßþ‡ 1š˜2ÝÃÛ&Ÿ¸PAíݸyÛ®Ï@%“Jž¿T%©òíƒZÕ% bE›+ŸB&Ù¿Ùÿ.Y~„[Ó–ë׬ÊàÙ³„ìÛ4 ûF³H#½F«~_òSV}7*(lî:¯UwAûáNÎ.h½3<}CÔÞÔt’Iê½ûŠK%W.^½f“ßCö_*d‘³¬†ìS‚ž–²¿ƒmRÈ~4sEʾC““ýº”ÒQ}Ä2í‡T©ìÕŸ¢ª>éi^þ®b%‡UP&_$?­¹}÷5±ïžh +-êë…¾îj(‘k‘Èwo×p£Ýœ<~´´˜"yó*µ©ÉIð›ÈÐÙ~žÈä .δ;[e‹Îb=¿—бÜJúÆÛ2P:yež"D•ædAݶßdèh8δ^~˜fl¢¥©TlE„–R¯•Ãl–ýŸÌ{Mõ_*ª_«øi•ª’¢½»¶mÞ ô4q~LdH sÊÅÙÉqè ÅN;˜ÖaJKN¥ú?3Œýv‚*ï›Â~,º+¤?B&%WæÄÄ'.^¶‚¾z/ÀrðpY_U'uÈbXö_©B)Тô¦š[,û•RöQœ6Cö³ÓR„ì#Cg6QÙ­ŽVýÑ¢Šù’êÏ';ÍÌá&ƪ\U}JäúT¿ÁöŒ6SÈtçJC§ýt;'r&Jm"ïÆßÛƒ#yôÔZ,Gf²ØŽ e }ÚV,eCZ1ªt'¾w9Ï®¢}8D]&NÎÍ)f~"[‘¡ÔkËOˆi^¿)ü¦V‘ý—ͲßT_ýªÿHÕS¨þ‚S{vRívìï5ÓM`jˆ­M/þ¨¼:”2ùq¨/±ßR~¥ò2VØ~Ì»ZZCØ&G~ Àâ›°¾B® ËÞ¢CT|á“._•ŸA-Z¤ûºF)ØrïØrMdèÉò£‡”æ„q.#ŸŒ!Úe_Wõß1¬úÎ.ÉÞþAá,§PýÕëtTÿŠb§*§^¬aúTŸÎ\ÍcºóϹ†ñf +-Öæf¥¥,]˜Œæî:iN‚3 oï¿ö´¶D$›µÿ3-ÅV^;‡²N*g?ºåI¹w*·¤n ÉéÑËÆÖnÈ°‘¨N“IqèÖQlWdpˆîܳŸ‡Çyí†ð´ÚfÙoÚ¯Né¨þ…³SE{a@\{INcæ„ÎöõtweJÙÓOPÝôwïáHQá•ŸÀÈÞ£å’ô ð Z·áo@öC`éjÅ:9`°ýpeüäi3<}C#£ãðRÓ³óò ?þ¡¸T +-%}†[5·ï²=~¢Ç(õ*¥¦ì?g¥¤q"DknÝpù?ûuâTåy…<6±šÄ8šTëtQ” "Æm,Á+‚VM¬qA‹ˆ  "û*(»È"›,¢±Æ¢Õ˜¸ Š€âFµZÜ£ÆÆÚ™ÈØؤ6™žsÞ÷ÛîW,×æz¿?á;ïyžß9u¢EÉN'Â~|L¤ñb_ õ»¿Þõi4ÑŒúÅõi2t†‰}, ¦Í+Lúÿ”ÍåÎ-À «ãúšjÐ fÓÆÂܬtìãp|én®sàªuV9Œÿ7£GÀh,P8ú4›žoÁl^7\è‹ÿ”ýRvݲ?Ú§/Þ¶ƒûcÆÚMP9ãe‹?Ô?ÛäTÖ¢Ûw~ +-À©©ƒ—.ûŸZ°oŠ}ãú4S_Fý“¨R +-©_¹mKY1œ½°  oÏ…óç°²µ ü‘h +-{ È¨N¤¾ld¹Âñƒ7/êö` ¹Åk¼zÁ?“\pæ#€B`’Ö®ËÎ/*­Ø +-»€¢åá ØÇmh7]´Å ÿŸ_Þ•°_/`siQ>Ã~8b‘€ýñF„ýR?Q?+·‡Ô#ü +-£:æÔ‡¹<Ö—úBÓXZÙ vo°ë-Wþú—?ŸemŒºÙ +-GXþúŒµIq1!˽=é +-›æâäOú˜&à +-™æMn1ô;y8Šªø¥„œæÔ£6¶öûðG=½ýâV'¦P2ào'Â>kQû¦Ô7¯mêuŸ¾° BHá2 €Òˆ¦þ¾K<àêýpšË$»÷Ç`FY 2c2%ê³Ôïj€ÔWÄþk| xì÷ê {ðsÆŸÁVÖÃGÁlM QzùøáÝŸœ–™S ò`Õ±:–.W®^¿Å $Û}°/´¨ôCÿÎPyU¬QŽýM%p<±?°|éâ…Ƈ}åp8õßÐúIk3ˆúü;^߀m|E¤©’úOu•ñ÷¯¨]Ì.Z6• §OÖ±2Ý”—äd¦­‰_…¼6†—s™½©VŠ¨ŠÒ¼¬tPd(ÂÔÍu6RßWa¸µÕ`sغy%—„úºbŸôá‚ü¡«—¥‹íxÇI.¿ý`ÖÜù {/‰ˆ‰#T•VP¾Ð2œTyT©0ßµý4°ÿ¸õÑ×"öy‘ž¬=&`#Ã>ÿ§ û“û£¾¿@}8Á¶õõÙPä˜:õu„¾õqÛ`Ã3g¸9väàÞOw²*^Ÿ‘šG˜7ðº_º½-N…ÊXKOi. }]ØçU +-Æ1Ç˪#þTÎâ¥ËB#¡IÓ³ò +-K+è¬=„¾9kÂþËòÉ÷á©vêß¼Ö|ùÒyBáÝ Ë¼b™×¢äR^½#É?|z÷‚EYúªR_¥ûÝÄØïýöÏúâÕKñ‚g/¢ÒiÊtÊ/¿À0RefNA ¨—¡ª¦î$` tõ†fÂh®ƒfÆhüSû²&ýlW%KûËŒû:¨/äÓ/­›ú kÒeÔ¯Bê+0lb}F¢‹úÄ"¾t¡ñLC]MNÚlâ5 «¢Â‚üð›÷U1¾ôQÇY æ]ŒSé%„~7Yè Žå¿Uxî¬Ké¯ÀËö½‘øÖUÎ(œ‹¼ð®…*MÍÀ—g-bÿX-ÞOøSojǾ¢I_tj™¾çût¸”­ºT¤>¾Œú›K‹àîÅe \îÍYê‚«VAžO +-•b ä±ÿO!^8*û› ‚³—Tiç r†€y+áðMIÏ΃„¡e\y¹·#æ!b_mtƾš,ûÿ ìßV``¹°Ÿ•¶ÆX±ßQêGDǵG}béãožèE}¡†Õ=|™žù‰ãG#n¶o­ØX˜—½.%uãï #™?çw3¦:«°‰á¥£oÌØSà°·.LE^ÆH}ûB™2ãô£Ë–ýV[{GÎÌÙ®x×ò.ÍÎ+*Ý̱/ÿ«ì Øÿ— ûFöéMýFõ7•lÈÉ„»7:"ØÙQßÁd=VAF}O]©ßùKÐE†}ÜXÀ~¯·Á?l+mlñî%¹ƒ+B"câ€@ëó‹Êp–Ì@ç/6IÒ&K­´Ô}E—îGYn.+°l|ØoƒúïèA}(â +-‰úgE•vŒúßj‡PÃU÷nÊŠ Ög¤&ÇÅ`{{ºãM;ÍyƒEL#ð«_ð&î)U±ZwòX©ßUø¯"öñ¿Òa‹Â§.+ÓÔÌœ %›dØo4aÿ¥øÚ£¾F<1êçg§§$¬Ž +- ôóöDJa€ú–ïâ*(ÒIݤ¿ŠØï&,ú‡½èJZˆÁÒËÇ/( 3&-3wCI9É TS×€!ÓÔ|íÆ­;‚ÄuÐ2ÚbF}±L?ö5¨OCÁ™´OýT¤~9§þÑã'N=QDé(ÕFýÿ¨—°pÐâ8ZpgêkX òqy ÍßyÕð<6 ã7pÔò‰ð§ÞCÑÄ ýW´Öé["öáÇZÂáØOœ("Äßw‰Çïç}ôá4—Iv̤æfýÕÃII}C؇Œ°‚+yÄô7ô®åPÊÊÒÕÍc‰¯pxtlbʺlNK0K܆–ë7oö™-[·3ü¿ +-múäÉ7Ô·|&ê·ÈLúHþ^k³W~÷‹›×[Ø4NÔ…‹JxkEiQ^6Þ^xÒúB ƒnfàM ó=bØPK8jÙ@àªåO±|$>Ù¯•c_ø³ýÍÌ ûøÔyâK‰ˆ‰K°¿“®Ú:†}?Ö„}cù´…“DýZ¨¿«_ þº”DN}w\†©j$í×·¬øGÌ&CQÿeìÓà"0ÿÐ&`ì„UÀ±±ï8Éß¹ Ü!eB#qЖeh =û(fNŸ;±©ùê @¬ÃCX‡gÆþwº±ÏëtûÖM 5±ïdØoŸúæmP?GƒúMWp÷t“T'õÿ­F}xå÷¾¸uãjsÓE þɺšªCûöü©rÛ–²âÄ NƒÞù‚¹³@7NŽxÓŽ|ZŽZ>ªa6S_‰}á×Âe ÄéÓ·¶(|êãìyŸºsì£oò‹à¡ãŸÕÀ~;GÔ‹Î.Ó×ѯl’¨ß¬IýÜÌ´äxN}7F}Gµ•$RXE4 ¤]Ô`)É’Î^¢%ܽƒ­@@cЖNS¦ÏĘñòYË°&-+— ´s¦º¦¾AÒ% š¯¥uÐPNì·Ñ§2ìghbßNìÿ_§þsS¿¨O\S' 㮑¶K}ÅãV©ñ •fñùîð̱‚ÓSV¯ Z± Þ9uðä‰ìÆŽ5|˜Õ`^Â|=ó0dè«5ªðo‘8ì°ÅBµ¦Bud…êƱŸœ–™«‰ýf½®¨]¦¯ƒßóQeXŸ©¯š0n,ÔB)QÿÍ7ðè5t2iÆ~71e¸-û›¡€—v*g–3‹—ú¢.c“Ö¢0h`9Z{â`Ÿ#ˆc_X‡oõÂþS5ìË |y¬êÙ°Ïÿíû²¨Q_–LíPÇîÏõÏqêßiƒúúœ]­@›‡0‰»Hý+MÏŸ;}²–ÙæØ\ZD à ³À“+˜t3 ºë`˜?½ã0Ü<4~n÷îDÄ> GjT6*žµ>~Aa+MØ¿6¨Âdº¡Fýí` NýHÜ"Þ½ãmq¬ÕL†ÜZî3„K–3CèðµµG}0 —.ßÐÈUñÉ©™,i*wíÙwHðeSó5EÔ(©û?ènÔ{Z°¿å°ßãG„ýΣ>°>“`´êW£>ågêkªí£I”—lÈÉÄŽ +- ôóQÐIû_öëü)ËëŠxl'…LÅjÒ6ScQÐ$6™Z  ˆ"AÂP†:Ö€Q@EˆHˆˆD@0ˆ,â‚q©M­¦.ˆ,A“1ÑÖ×L& .ƒZô‡žs—gÞȼ÷O¸çœïùœ©>t“Z 6W0µxyÑV—Ÿµ½SíßU¯TO/Ÿ©oýéωˆš¿hIÃþ¦­ÿU ûßuÞ¹kÃþOíiÍÃãG²`"Ò¤~qþšVâá;oPƒÉ—Þ½¯QŽ>ÏdD.©±Ïs†ŒЈQpø¾þ‡ñ$iÞz› Cìü‹—½—™‹QÓ°€y˜“ èRÉÙ8h(H7mØJ½'`ÿROaÿg½¸S­Qÿ5K¨OÏ®sŸ‚úOuøúæ5ÞåÇ[ëjìƒBlÛTV‚-´yòÂù±7oãI;ÑútÃJA7°X ÅåÕ‹©/þj§Ž!>ÑÛwÚtâ›9ó°ÑW~°&¿Xû¸S©niïT£óËöºñ¤±¤œ¤¾AºÔŽ ¹ä3ÉóMBýQ( röR1ö.õµbßN…!/Ф!¾Ë¢fÚtÌh4fÍš: {ö‚êAÝ»lSQZ\—“…mžÉ á…}ûtãÈ]àA¡/ÿ_ÙR¥­N€ŽgíTê›h3Ø¿zƒ,UÓº1:ÁlÏú§J%aAúÔ¯RŸÅ’ïdN}ˆ%%õ Á¨úÄ?,iè(¨¡ÀAÖa`Âœ3/1)%}Åû«q*˜AM­,m®\ÇáþC•1­Âþ×ÝÃ>d ûÏöyìkS ŒúˆÑîPŸ—á‰)êëÓ†œ\—Îó.‡å»ï“ÝÄ6ëÖ®ÎÎLO!m>3,$ˆÔö¹ëHÔ ktÂÞéÒRôZ-dÍ.nUŽ}G§‘û'3ì¿+Å~Åæê]:Ø7©£Ìö¬~ó@,úð¾Œú€ /ÚO´H©/I% õÿÔ-RSI +- Þžö`bÖpa^§—¯ 1P¦ NCn~1& è@M‹KÇÁbì_ÕÁ>ݪó%[ÕC¶U%Øg[µ/c_JÏŠÔ"§þ›H}°(]Rêo‚2(©¯USÔÿŸ’ú"m çÎ~)éòÛªÊ7åãÉ•š¼^´¡Á¤ nãHŸÃö…:УKäQ•Ð\«ôƒ9öGöÑ7Sì',Zš†¼Y'Å~ µ_ýëœ ûúº1:ÃlÏʧÎ$õ<‚õÛ$Ô/צ¾2”ë…Rï‚4öí±Yptrv´ÁËŒI —°hIZFVAææê{ oj…¼ÆáöÝ{]÷°q08ZØ¿o9ö#8öŵú²¸Vûö•SÿE¬§þDV¤þ‚äeËW®ZSPÜÃÔWцנ­µ‰vù®í[*K×~˜ƒEHJŒ‹‰Ä6 +-ðóñò¤'—‹³“#× ¿iíT¡ß‹•Püð/ø¦À±û;9öÛöuöªò‹N1Û³îiE’\¢·®ê3Õ@&ÑË·P̤Ù<“&Ði@I3ÉÞÞ(êK²†ˆÌ‚à vø"hÜŒwŸ€ +- +- ›N¦!%=•ùQ h7Îá£ÍÇOÊÆ¡Æ¡ëùıûÕˆý§Ú«}.öMQ¶¯ŒúT¢Ý¡¾ +-¢šР~ÇeB›“Ç[ëjì#mYIÑÚÜ2ÉÁEW¯ÿï #Gêÿ欂T—Aº}{³*ìÛÛó/þµÞ Ø/$Øß Ø¯¡ØÇÅzEX¬¦tctŠÙžUOAlº8D‘úça(‚}ºwõýððå‘4l(FÒ£©ÿŒŠ˜‚€2÷¸|ǹ‡Î˜Ó¿pI*2T^µ °¿ÿà‘úcŸ±q`ÎüžŽƒ  «±[û ö3Ò–H°ïØÇ°?L\¬RdöÕÔWRßõáð¥Ó RŸ ƒQ & d&†#]‰3Ý'xOñ'Ó‹Ðåæ•”Uaæì?XSwŒÃYèô0ö?FìãjEìÇÏâØ÷¢Øw•aÿ—ýûÚ uЧþ;H}d(¥þfºwÍQÿGÓÔ¾ÿñ#F›ïe´­mU¬Ë—/K^K +-èÏ÷.©Å ,^R¾y¥¼éå"È„#‡žµèÖèÚØ/±_Ø'»•èæ[©nØ?Û°ß?Ÿ2ôE qDŠópR¤þ–J1LQÿùÁƒä 5‚úÊQÀYD†cß ôÊØ7ƹyxaæ‡Î˜5;:.aÑ’´Œ¬œ¼‚õ:ljâ8ÈSç+±ÿð>,W}ì—ìg¾—²8‘a?a¥éì$dNÀ¾Šú¤õ‡!õ±@}ªÐ5õ÷´˜úü¾Š6§6Í µäû·o©,]_˜‡]¾4)!.†[~“½<Ý`í¾: +-àøÅ´ÏÔ7ä›ì‹.øFûÐçû•[DìŸÔÕÆMet–Ùž…O=Aÿy ¤ÎÃEJýÏ8õ)‚rI™£~ŸPèUìÛ Ðd™C¤I¦C' ($lf8 (qqJzfö굘:[é8k~~úÌ¿/\VÄŽ…ØgÁÓì‡ öÝØï#ßlúéSŸÆ‘“3¥¾ûDoFýH¡ÅDê7›§¾Öïk]Z]JÚ´o9´!ÔßTVR´»Úù±ï†Ï ¡¶!ÔãBÛ\ºvííT¡oLêk,WóØÏÄ£vCyÕ6Ž}¶]/Êtó>šþ´r¿f¶gÙÓ§~—Hý0èbÐÆ£‡‘ú€ ˆ ,šFÑúÔï+ Ë: ‚FŒr}…§Ž`0µfüÂäÔå+Waì”Wìlžh‡q8wñ +-ËÛwïÑqèì·2ìïDìóíš8°9#48Ðß×bÿYûT&Ÿ~ Ôw¥Ô÷âÔšO J©¿•QÿXPÿáïïpÚЕÛÖÚÔ@iS½¹¢´¸ oUVF*éòÙ³ð÷§ù¢mèÒemÎq#ü¿´TÀÜvÕÄ>ý蜼Âõ€ýí¨º^™nDìwÙ°ßÏŸ:ô%bÔ¿~õÊÅsg¿ú¢] è >CP?¡þ3²Ì¡¡Ã‡aÐ`n °&L¿ŠÍ˜¸Ä¤¥é+ w +-?Âq Úlhn¥ãÀƒ§S2œ›æcßöëö+ ö1xÆÇFE€6ƒüìK?z ÿh95{ý£uŸlïbêkPÿÕß3ê2ê'J¨_ÝóÔ× MKãѤ 9´Ö}¸:{EzJR"ty8ùü©>“<©m`ç:²Sk𠇲>7ôÿ»‹ýŠýÀ¾°_5u#üµ-öûáS)‚Hu\:óÐƺ ¨_J©ŸÚ]ê% iìÛÙKc‡NƒË‚}AQ±ó$cðÈÆ¡îXˉvYòè`_œ?êaÿ Å~­ûIˆ}ÂMÿ)€}<ì§ÅÜ×kþâÿY ”eRßìÜ 0‘ú9¸r%Ô?Á©ãé©OisiCnІP¿ª|CqþšU+—/K&»œþýx° ®Üá/emNw®FŸœú–b?‚`?5# ±_ª©üké†Õäщf{柚úOÔºz¨ÿ%P¿…tǶMeHýìÌô”Å€ H«¨oX ³@ćˆO @ï´éÁ¡3fÍŽŽKÀä¡ãPÁÆ¡Æ¡íÔiŒž+4zÈ8h ¨[ØogØGpVnä £‡zÓo²—‡Û8šJìK°˜‰“oXo7g{†}YÖ¯¼Ì±O¸){Gå©TNýù aãšYÚÒè]<}‰?‘ú˜¼ŒúCI}øå·õEÚtka´ÁàÉ•¥ ðñ û–þr<³æÏ3â ¢çßœg¯ïðûpWAر‰iYyÅåtÅþòh膧-îXÞLÔþÓñFM5mý»aõ‚:Z4ÖD~V–äd$ÇGa¹sÙŒMý)Z ¾ú0°æ¡ÓðêogÒêùýS 'Œƒ½‡Ô¬¼"‡½Ÿøbô8ü…ƒ +-‚ûpXÑ´wì㊠ôõpÙƱÏÂ6šm07ìK°aµ}%õ§üŠSÿåWäED©oïìæíû–S/£þñžSg%Ô¿ñÈÔÇ_~Æ><ÐÛhÛ–Q¿¼˜YaA~^®NtÝÒ_Ô7ž;ÇP´ ùæj¸ÑWø +-ìOû6 ûpXAÚQñÉ9¨›ö£nZ;ºz@7ß]±Ïþ¹¸ä£ë»Õ&ÞŸlX ‰-tëÆ5Š ¡þóHýîζ–&ªÏê²¢¼¬ÔĘö§¾•ùrmS_R<|¸è4 ‚ °{,zã­åfV¶kÄqÆqHÏ)(‘éޯåã AÐÃaÿ¶ûm£°µ#ØßË Û‡VÒ¦0‡ÞXÞîÛÙ¶¹Ñ,ƒbðÂ7—ãFoÑûxÔ2ìÃeqÇÝ”qÝ´´uÝœï¢[ZáŸÿK‰ý‰Ú×ôS–>1‡;·nâ8\á‚jomn¨#Ô¯()ÈNOŽ‹ +-Ãrv@Qê/QRš†¨¯00 /¼ÈDÊg‰ Sh]DLBj&ŒCÕ.2M0´~`¾'è¼)¢óQ°ê„À‡úû§eØ/ÎÏBìë}< ~„Ëj‰ûÊ«÷´eOAýÉTŸ<ø™†ê¯%Ôwró‚mŸ’‘[XVÅo,B}\¶#—.?.õoqêÓ ¨/ìÚêr  9±‚|=]6ëíVY[¬0ÁØá—㶕åο¹ö­*ö§)±¿„aÿÝ ’wT\rzvݲëš[yàÃ%ÿüÞO÷Yä£k_ß½6ñðTKŸÃí›7pAýAXBM‡Aîª*+ÊÍLMˆ ÇrQ H»ÔçÕ3Ê@¤|DΙk Ø_*ŒÃ8~ÁaQqIéˆÎµûö¬ÃqèbýóØØ¿§Ä¾X@»ªPÉñ°eý¼\ìÅÓêE ŒçŠØ^Š}IÜúJ[öä5¤Ä§Á,#i m Ô÷Aê'¦eåWìd'Ö±Žî¯žõ¤™_2ÿ¦÷TOWG+[µ5•%9éÉäÂòvwvØŒ»v­¥Ùò¥:þròË©m¦þZõ›ë»õÇ}r[9bàºpÔM.êæÃ?#Ç$~º÷›óý¸gyäwé?Ÿ¨ý§ë) +-ˆ7d®|?"EPCÝçŸî«Ezf§%ÅE†ùy¹9Ù#õíVÙX˜šŒ›úú›†gäå#Nƒ`ÎX?£ÆaÛvŸ]xtBJfna)‡–c0ç`8öEv>¸ˆý‘!ºg…ªÝY^œ—•š¡ @ìo¦Øç±þ‘nY!o}—øFµ§þó"õɲ¥©ã‰Å¨ŸL¨¿‹Q¿í¸¸jŽúÿQ£>=hÉ}uædwg[K¥>Ð&/“dèëá⸕®Zks þbva±];ý¹QÔ×À7WùècbßÄÔÂf•?®@7‘qIiÙ¸gk÷}úy]F~â$]´ôŸ_»qëö]ÎúÑå?]ßÝ6ñÆzªÔÿÇ}âN:Ð@‡<9‚ú•¥…¹) Ñá!>îÛõm­Ì€úAÚ¥þ$…Ø4ˆz°?{®1U§8®^~Aa‘±IÈÎr6ÍGÛY _|4ìÿ,Ç>lÚ«û¸h[û4rpgÃ>k +ÊNcÙšU\yó'ÉÅ®N}ì ¤þ¦Í¸ju1‰©„úµ"õOCõõ¯ŒŸúÿ•ïYF}~в󪧫½µ¹¡Ž,ÚŠ’üìô$¹›3Ò7­¥é²¥üÀ~9 ]صšøæãÅþ‚E 3+Û5¢nBP7°hK+‰n óÖ8j{é?‡ÐaÕÞÄU{ï§ûì£O`ÿ)yª¥Ï $ŒÃÈ ¸óÜ™¯º;qU#<Óc#Cƒü<]úï!õ­-V0yr)©¯‰qxFV?’i ¢ãðº8¤Ü½BvDǧdäÀ8Ôì³ +-ê%Ø¿Ä°›LÃø±/‘'Áþ2ì77Ö“óŠ`?!&\‡‹Öaó&z]­0ysñë¿{͈ïYÆÎ)ZľzÉä‰Ô_ +-™SêoÅM—Œ‘Ã}Å©âq¨ÿ³õGêÃ/?ôg¤MUYanf +-M܃Ñ­9ІF.ûåâªÕ +-õÇâû³Ù¢]aa-èÆÓ/(4261-+¯¸¼z7¹¯šZÚ:»ûçûG. ¼¹{_µµÿ”<µ»—MQ'‡‹C}AÇÛ67Ô‚öÔT–€;ã£v„ø{“Úð¥>AИÔ×L)§×þô^ä $RAŽ®ž¾A¡Â8öY„ê{bØÇ]K¬3'Ot¶ñª,…Гâ"ÃpÓ:nåçÀsá| ö§kûJêOá™3xÁ¦]ü&Dn³Ún=,Z‡íî>ºð˜„TLÎ+¤~3°“ïYBýëÒÀ‰úÿæÔ¿Ô¿£ >ùåudÍVçg§%Åbà^H›tÏš.CÚ`â3!qÙ/×”m‘…}¾iA7ï0Ýø‡ìˆŠONÏ)(©¬Ùƒ–xÔö à…%ò†æ.ütIòúî·‰§òÔî^¡ô©HýÀ8 :»;ŽT”—™šèëéâ¸õOïýáíµcQªæ¨?IQûÏR¡;…q0œCá¹ÌÌÒvõ:g‡`‡Œœ‚R6G„|BØçöDì÷tµ·²ª.ÇÔ¢ÃC¼Ýh Y›¯ ò$›2§Ø—VF"›úÓ%ÔŸ¿'çÕÉžõ +-‹ŒKJÇÀwáu…ê¤köÂPÿ*Ïû¡¨ÏþùßeÔ?ÿí¹ÓxжlanFJ<ͨ¿i]³@ýE 0pBá—«,ZmD®ÀþÔ±°O,GOßÀЈ˜ÄÔ̼¢²*û¡&~Ôâ‰Exó·ë7ñÆj_ý‰Ú×àS–>v›Á@#ƒ8G¿<,"ÔìïåæL¨¿nµ­%²¨?wŽáƒ¨¯ x +-ÓÀÝù¬û³ŒæQyš[¯äãàá¨ÃqÈ‚q¨Þ½÷“ûgÎ}Kt•ÙóîÃbÿŸJì÷±Üöñ‚Øc#Cƒp×n¡Ø·4]¶”¯ZµÐµ“¹¤õÅûJLœ° _e·þÝàš  NÀú)¯®…㪮ANýþúðÔv¬H}zZ=uB¤~uyq~VZ"ÛÕ‰ÐÆNJv\Ñ5Ë—'®÷È'Éþ¹*öÕtãæåË6;¿¤b'Éÿy'ùç„7ÂUËö-ù鵯ù7ªôÉ0ˆÓÝC tqh ǘ³±þ i‚ @§.ÀǃÖÏÛkWruÎ3šEúGBýÉZ£¾‚äã%„ô\€ô4µ´Y½Ž¶‡äôì‚’ +- ö{°†.à4<6ö™>ɺ•awuYQn&àsGˆ¿·›³=`/,sbOã×`ײ’¤. ];‘«õW'æM¨ÿþDgPhdlÆ]YCÍÙBÊçëïú(9¯‰i à?õo°°éeEÚF¶cK s2’iÚî¦ÍsÓ4yÐŽ +-]úÏöIìrÝÐÜ=|t°mS2r éÿ¼¹µ½«çÔYLxïÚ;"öp$éë»ã&Þ¨'›Ù0Üã‡/1Ðà>@Î/üýúþêê>ãNm{Žý¡fk« ¢¨i´Õý²‡ˆÄ­‰‘½—ld£Œ¯€ {ºW´66M"d(š“ž´."¢¦ÖŒ&?EÍ9}ÆçÞïD1’ÃåîŸðÜÏó~¿žc‡ö‚ŠòsÁœñ[Ãý¼0}–¹/rFtJû€ñ3¤§Nå°Ó`8„´×a¬ÛSeç¸cÈ“×!𹫴²v/c¿I è'aÿáã°ßu¶¥±äÀžêòâ|R\TX ¯çÆu˜C0wOs3ƒ K¦§BHoàšøáã +-Ði èÄq;¹.^ +-%ëáí“’‘Ó®Û'¨ßÆ‹â¤èÑöSQÚS'ßÆW^Z”Ÿ“%†½…¨O´™/ÓÆõ¥0êë`_¯lŸ{a¼˜»À>ê†n,/¿àð­ñP·¹ùEeU|ÔB߶´wu3o¸paö_öåØ¿¯‰ýQì+ñÓÙÎ\A iÈ@=´$ÎõÕå» óA‘!>žHý%n.Ž¶*¢¾¥”>Š¦¾Vê1À¾ˆ¡É€}Äç«ómì]uÖ!ôY\^]¿Ÿ°ÏÒÂþ'Ãþƒ°… WVGŽû¶¶¬Œä„èˆ`/"G;·íÔ)œC8wƒ²þ©ëRÿ×úÔÇ’ÓÆÓjùjêØ°¨¸$È6\VHýÆ–³]\±CI}¾«º;ÛÏ4ÂA{¶†_9ÏÚ{3І+h3›†m:iâŽUâ+ öǤŸ€HìÛêB>j±pš[;ˆ7—¯]‡‡NÃÇÊý¦>wî}=ìƾ’>ã¡/¸‰ÛÐãzÏ4ÐùÎ6\¼|÷bôìÌÉJEù‚–¹»:Ù rÊᣠå¯ÃXÊ¡qC¼¦æ–³@AV*[GyB#cS2Ÿ%€ýƒARöo>5ö¹riøи݈}Ž¢úê²âü\}lTh ç†µ„}{ëù¯rÝš2öÅàÇ* ûÆn+œ6žV¢c‰œ˜=‹—®|c½‡—pDtBrF¶gàÄäÑjX¦þWCA}|æõé ­,-¢WŽ£öeÚPÃ@¥¾òŽZ¨ÛqÆtãºÑoÚâ„…›š%ŽÚƒGO¼óîÄ›?¹Ä]øæýÑØWú§ú´ Ò2|û5ió ý^ä&‚§é´X‡ª²â‚ÜíéÉñŒ Š7[ç,K ‘=F¨?FQû ‹}£ë`6UðÓדh“—_PøÖ¸mäÏ2ÀþaD„ýKW?íZìSå"öiø{k+J +-Õ;pöáÁ~^X¸te-ÐÂþK€ýgõ°?F Ø7 þØ߈a‹Š%q⬉úk7xú†FÅBòäæã¨Ð]…Ôï– +-Vhs0“~RêÃA['& gPhãlo³À€6Ïhh£ÀW>àQ«…}I7¯©l\Ühö›½ýC"¢ã“ÓéWÕaåžzxÓýun/ŽŸJçÿ½¸µFc_ÁŸAè‹] kbêh@›l ÷ÿvס¦bw¡:;#%16Ô_³réâ…NvÖLýiSÍFõa_Ä>`_$Ñ öçXŽ¢Í>!‘1 )Ð +-Fö¯=-öµ +-Ø¿؇Îatx}UYQ>‡à»ŠÎ,k(®VØ°Óg¾<GMwy38ƒg‡º'M¹Ôï mHýÆëUž³!õû™úðÌ϶6 ê×V–ÂA›Iƒ†«Š¨ý +-Ô×¥T°ò]¥´W>ìktcç„wÖ¾o`hd,µêÂÝ5{ sOâ¥ÕÚqúåk0ÿÏoÑK‡€µË±ŸÖcî¬ýħ³ 9¸ ‚š´ @ þ¾ëtø^<ßÙ†±óΉ£÷Â:à囶-nkx#èõEÎ6›Sx^ЀS™Ô7yÄ: ‚x̧̀Γֲ((lk\R ´J¾&Œû·žû?`_6èçŸõ2ö¡t1püع@Ðmñ0}¨\#À¾Ô¸Òì¥Â•G?ܓכµN‘b¨?ð:ìCìë­aÂ("&!9ƒZó3bÿ&b_Ž#8µÞ>¼¿® +-K73%ÆïïMi´ØÕÉŽ:Ó*—†ÿüsÏìëÏ~øg-Z÷¬’¹ ƒFê¯Y·q‹/Ôkü¶ôíyˆMœ3P¿ ¬)·+Rÿ¿(Í' þ}#ÔÜÐE+SlS²kg6Žo*Ï kW/§vUm,µió[…ÓÆdPغ±RÙ9.äñ{úð;Oß‘W@¼¡[ :Öî?þyéjOïþ›ü 8ß áhUïhì+è{\èß»û%,J2·¡£µ¹B ´§¦¢¤P —oTX `sý+—º»:ÛÛ‚fNŸ +-û0qÄ샑u`"öIA°A%ìCE!öÉ u?ö¹xñô ö)Nÿn-ø廡pjáü¡tW/§KKÔÜŒÓH«ru±?¼£6ùªõŠ±ƒGbÓÛR'1%3ggQ©<æ3í˜9—¥rBêŸ×¦>Ø&w»tÐÒ+_ÌÔÿÓ+ZÔ§vU8mL«›ßá¥5uúL,Ýù6öÎpjñ; ‹Â[+›x³çÀ‘ãðš¡wÁ7ð è¥ñŸ/ïÞ}Åú¡¯µ +-ßá.Ü»{‡B¿ïúµ+ÿúäã‹ç;Ûp s‚J‹òs²Òèòõ÷ÞŒzÝÍÅÑVe5wÎ+³,-8vFÊ>¬ƒ¡‚¤u`ì/ƒ8ÚŒqØ'„îaì7ö»û}O}™¡wïà¹Õw]RcŽ­ÊRPhFJBtD°¿—åZˆP(]MéL؇o@ý±Òœ¥v!¥ÞT`M ¸miÛó +-v—CæðIÕzöÜìÖîÖ¨o,õEýÓê«qÈ1‘pÐò+_Ô_@ÔŸŽÔŸ8a¤ÐÆäاÒåù[€næ̵RÙ:º¸‰£Ö?8Ž­´¬Üü¢ÒÊZºjßýàÃ3mèzéûðÔñ/ˆ·Îå;û +-ûŒ„>­wDËÎü¨»³½ ‰Û°¯® +- ”·##™×¨¹f„Ž“µ°¦HÄæˆØ½u4$aß‚±¯ì»-Y±fÝFFPR*b¿tè°¯íPÀ>Uï^)‘ZûxmU—C³Ò’b£B}<9œY¡³,§™›Bë¾(°/ÿ—ÃŽý_褾†úÏ>¯)×?Ιû„ŸT^þÁЭ)Ùê]¥•uû#êCâ0õ¡Zoÿ›ªUŠ›APÿqê_•›•¨¿©Ÿ3ê‡ùñAK¯ÜjÙl²†6øÈå“jøÛÕè÷ìCëŠ jךŽ-|çž>!‘1Ä›‚â²êúý‡ŽýåÔ{§›ZðÞ‚—~¥®ÛøÔQ8X¾£±¯ÐOG?åЗĻêåeèî:ÛÚ܀΄ĩ©()Tgg¦BäÐ:¼õæªeî‹œl$Qè¼4^g”K}“G(Hû²B]ÝûÞHñÉézØoZìÿ ƒ}Iˆý‹ç;Úšd‡ª¡xã£Ãƒý¼ ‘V,q[èˆ ý2`ßlòèÈ­«)Ýá¿Þ˜9u˜ú/Nøý$SÑ­ó­iÈ MOŸÀP¨V„&&Î#ÇÿJÕ¹ 8ãžÞ¤LjÖ!¦>\´ôÌ‘ú!â åWþçÙtP™ÒAÅÕª¹¨”J£ÏœbŸt€{—ŽZ~ç^~AÄ›LhÞxèð zš[á¬ÅîàÜè¿u›N.©}ùOpÿ>M}…|:ú‘C_¬Ò‘IqCËÐÁ:q¶¡²´ˆ „‰ãÏë°ÄÍÅÑNEš2²Ê¥þÀ +-B…¾ ­ƒå,X+`¨ cßÓ—)53g'ba¿aè°ÿŒ})“º»Ú[D«ÊŠòs²Rc#C1’°x]e‡Zȉ$j× u‡wÌÒ”%jò'›QµBäØ:ÐŒ×oÚâNͪ.,©¨ÝKÌä#õ?íû ‘©S¬ƒ¢þPÿ"Qÿ}˜ðaœ0Q?)lã+Q_zåHýÿ³_/^9çyÀgÖ±kÏq[»kgf-I0f™\EÆmilŒ(%M"éé¦(‰JÒ=JB‘äRIÑF‰VfvÖÌìÅٱ׳ïÏ÷ûûýžßÓó<•Ë™çyÎéû'|>ßÏûóút ÍOtœúj¾¹ªn MÄ£=X„ÍëÞ  A´z÷$¦¤eÁ7E%e¸¸jÙòe} í‹F°¿þwá³ËzÑû:ð:ýg}„ Í¥Íë†êÊ gOC™Ù阆¸0Óßãâh¿ìŒƒ•¥ùä ã?cBbóðsH³_=›‡ŽØ ÃcŽ}sK+ûNl8ö“a öi^û¬b(5Sj«ö±{îß»;&24ÈÏ›2 Mö­QÖ1’ä{WûÚ«²J‘™4©ÆÆÓfEâ˜[%vpvóØè€Å»'é@FN^!âF:§ZïÁ˜"õÙ^}!¦þ«RÿrÍÅò³§…ókŠ¨ïÊöª@}ñ—«£Nr•o®N78jGIÿ|î‚ÅK—ÛÓÁµÑÇ?x{dL\B|CË?½²ºŽ€C౿þäYOìëèëú +-_0Ù(PÖ¤HܳkGXH %ê$j‰¢ £¤L¢(E’V Bý>? ÉJLΤÀ1› +-êÏ£ +-¯^ãîéí½ºÿ !Ô/¯ ,Rÿ‰òZ}]êŸ*:šÇ)úë@}Z«2êj¤Î~òŽß\Y7´yYøQK×ÌÙó8oÖº{²«6ŠN.ø†ÎZ4âb €Ót³ùNk[û´ ˜ˆ#Äþ 9=±¯Ocès_"i¾BŸÍµ†z“ݽù‡²ÒR(m·ùmÞ°ž dg eŠãf +-CÎÐOO¨¯NA}húIåØ;N ûk9ö#bâ^û*©¯û¬ï·1ì7Ô×TÁ¢ÅÇŽÊ<˜¼7.:BH%G{;[¢¨åÔÉ(”ŒÅPb•zÐK«Ø[)õÔ(T˜˜‰¼™4ÅbÆ,(vvõðòñ ‹ÚŸcRØœ9_IõmºÕrW¤>ê‹ y9êÿ£êSyÔß̨ÏlcÃê«¿Ô׌}®¡ 쟛²6€7¶v+œÙU´-7WbJÖ/Ž®3ç+ªjë®5ݼ á°ØÿšÇ>}vE;zb_žºÐgƒÀŽÞ¿<¥ Á(<€îÞ¦Y¸R{©òB†¡àpvú¤„¸˜ˆP¾?ssq´_¾tñ‚¹6V| L£á;¤T©O+ÔwäÔ·æ—Q¸ +-õUhóƒ×·{OU7}„>ðí ìgë—ubƬ9ó‡îàìÊ|³-|Ç®ø}ûœüBúê8¼ œ&üõVZÂâ±ÿLˆýïÅØR¿'öµô”§@5ô‰?,eÚÛØÕ ]ÖVUœ?SRDJKIÜìïãåáæ‚iXºxd 6"‚ÈÔuêkTû¿áâ¹4‹au׌ý–íû²hz!bÿéæч‚G¯^ÆáUVRT˜Ÿ“Á’)lk€ÏF7gptÁ\+‹)“LLX¿ +-ö•c_k]Ç6ÂR«‹¬?ÁlêtkDÍ'ËV®^˳{ßþ´¬Cà%_©Dý?RÊüùk¥Ú¾õëÁ›Î©o® þ¯ß©ÏŠ«'´éøÍåºaë—wÂhä¨ЊÉS-gÚ|Œ¾Ì¾ñØèã»'é@zÖ¡#ÇŠJÎœ¯¨ª­o ÓëNk[;kÈ7{b_ÇžúЧ„a#†þ—ï·Á?lj/U^(;] ]fg¤&ܹ¯YͦaÞlëéÌ@cG¤q`YbŠÒ¿yЄý¡@Ð(ÓD +-&Ž}‡®±OɤÀþ‹—ľ¤8½®ÿá +-–0°Ï£ ݈ »‹{ÔvѼÙ|S+ ‡É°/5¢—Ö°¯‰ú)Š‹KjÒ+õ÷Ÿ®rvõðò aµ=ž“WXTRÆ6*§~;¨ÿHNýNJûêÔÿL•úïõñË)ûåÂJÕùO®ûÂ? ýsƒÆ&£ÇâªÂ®Ú…KÐ øÆsÓ–€íØÁ{“S3²/>]v¡òR-»½°†±ÿ”bÿ¹Ð”žØ×öëú,_„Ð'ýÉt ` +-Q3h GºyÐÕЀ}L"Gºýk ûí¯„}±+Ïq~I"¥Ž45^­«²);=%íØ‚Ãk½«Óªå¸»æÎ’¢‰0Zñ‹AŠdê­„}m”W±SÅKŠ¨?µÆkË|É6ª½ãšuž›|ƒ¶ED³Ò—Å¥gËaK¾P?¿Ï©Xv]Y5Ô ûP‰úâ>•QßI ¾QÜX‘úTZêëø=KOþÍ¥ýËZñŸÃÆÝ5Ît²9V0/ò³ëú Þ¾œø}ûfæäÅíE½Ä¡ÏŽ–`säð¦(vqOìkïi +-}†Ì…þ#ú­-eãÕË…s¥§Næçf¥¥$î‰.ý6{y¸¹3˜â%‚f¤‘¡Bÿáò•¤wóÐöMìÏ”a_iØïR¤²tR!)]_„}N§‹ÉÍLMNˆ‹ßÆDêâˆ,d“é8` ήý•<ª¥F(Q¿÷%`²¤!_Ri?šh6m†´P×{möÞµ3^ªìùÊ꺫M%ö)£þwݺ¢4×UF}¬Ó²’¢nQˆ@ýþzG}ͺAìÿŒî.78¼ÆO0ö¡v,³wtqóðÚìG[8_=-+7¿ðÄ©Òsåk._¥ÏÞÒzÅþ#ñ¶í‰}xêBÿŸŠÐ§9 ý|ñ¡§“@¡_qþLI”YHˆ‹!ùlÄ0¬^¹š7{æôif˜†±£™Äq|)SæAã8(ô²ØoU„“ûÿêö“>ã&¥¦ét©‚°_p8;-…“Ôoó÷µè '´cÂx^ÆlÿJÌ&±½´„ý·•R_ܨBм7dØp±²–V6/\"ìÓ-[ãc’R3ró©°åU5õ ×°N[¥uÚMê+•õ9'ŽDýæõwAýÑTXõûêõßRÑ m`ÙQËxc0ÂØäÿì—‡WÖçÇÓ¦Æ$MSI{R+CEˆ[AQDAW4*{#[@*ÈFö½™²e‰ ˆ +-"Ô(¢± ÖZ›ÆôœäœÞû<¿ß»x_ÄØ‚oÏŸpïs?ßÏÖ±bõÚõÕ·nÓ3ܽ÷€‰… Äp@pxT\Rj&´¯ÒŠêºÆfÀ~Ïõ>XÊ—÷FûÐmYìÿ@3ý){" ÿ‚ }¸°Ÿ8„Á>,½í-à?•Š s³Ò’ã£#BO?êîâ`k Ç°gÇvM µ k׬\˜‘“‘–œÇ9^ —{&ûï½O$ˆ_öWñɾý„dÿ+û„N–}ÜË“Ç£XÀOý°”Ž¶Kõà¤EùYiÄIOøuw¶·63bèû J*#M2øãf½ ²Ï;Z6Pi"y*5;XuMýŸd0N½ý‚#bR2r ‹Ëª`®—;0 ú÷F>B¼4…±¾ø…ªÏ†i£úEyÌXUŸÊ Wõ?SÕb7ïðÊ>ÕúщߨihêÀOßwÇÁžz`HDt|rZfn!$ñź¦–vˆbØ +-dñ0¬åk‚ýgÓØ¿÷>:å(…>t^àK7–ÞúšÊ²bh½é @‘¡§Oúópu´³23ÂcÐÕRQ·T”_(‹$pâ¤úoqÑ$xce-•}á²ß&Töyñ$JöâX)Ý ,†á¬¥¯·»³½¥±–•ÒèˆàS~^®O;¶C÷Â…€“Â>0„ÿ@eŸÝÆo¦JöùTÏ`9q*¯¸t;×ÝûšYÙ;1i—”–•WTZqÇz•Œõî0‘Ê'蔯¤ú?ŽUýÁ[7{‰ê׊P}]ªú+ÕŸ'Öª/LöYìÏ¢z3WB +->º¼"Ä°’ +-”/-]ÈáýFfVvŽ®Ç|OžŒI8›ž•w®¸ >{d1®e$‡Áþ.ö_LcÊÞD¡NygèvÿÍ^„þ%¸„ò’¢ü쌔ÄØ3aA@O7'{ksã{wèioÝL¯AF +-ÝòŸÌáÈ¥ z³ïaì9¼‹ç@%h|Ù÷á“ý:*û ?wîÝøʲÛaõO>@¡ìwu@_¬((NMŠ …úuä0á¬DWKCmýZØv/Xȧt¬“Îà“ý)˜,O‹¢s%”aÓCǺßØÂÆÁÅÃË— Óœ‚ó¨úÍl…b¦ +-Yúísfª¢³t¬êóDéTû6Õ—wÕg—1¦Ôþöƒ©ÞàG—’Y°hñgKW¬V^?][Ǿº“NPüõ”ôì|øìU5 —Z/Ã^ûC öG‰æLcŠŸôâ…þ÷ ôá €-÷ánƒýôtu´57ÖV——ÿ¤&ÅE…ø`œáLÀ€ ñÔ6¬] +-„Œ‘–ä:÷ÄJ‚±ÿz²õ¿#ûß>{J uÿÞÔÒî+íÍ 5•Îd§'ÇG…AÿB@™±g‡±R\ È>Ã'®”2xš‚mWý™±Æ(,AĨ©kêèÃTM-íœÜŽxû†Db–æ‘,mjíèêá*ªþs}v¨Q}&IG¿FÅaT¿ª~aNFŠ êêqU!Wõg‰«êó|sÁRKô†~tâ7ÌOW×ܶÝú—‰…Í!çð•€àð¨¸Ä”Œœ‚¢ÒòêÚ†f¨¶Çý·‡ |5ý7âñÀÏ‚ÐG°Àümô +-ý¿ôÁ~ ó6‚þ]r3S“â£#BOøuwq°µ45Àèëhià1¬Z¾DQ~¡,^ã@¬Z²ç 64öfÎ}Ê'”}U®ìrvçÊ~#û ?×yd+ïsÙM}~DA$c ƒÝŒ ³^ÚÒTW]^R˜›™’‰„òts´µ49°w§¾h©Š2ìDa (j¥œ…¼=²ÏG}2¨–L…’•“W\ºrͺ ›¶hëîf†zÌçdPXT|2H%F)ÀåÊU¢úwï?˜øLÇ)Q})Ÿê×£êç£êG…a’z¸8PÕ'3ý?Rý·„•ZŽÞÐö5wžø¼"üt¥uª›4´tôñ«›ZÚ:¸¸=~"0$":. šmÁùÒ +-øíˆýžë7oA #öÿŠí–bÿûiìOÑ}¼æXèÀüô]¿öÓ‡Py¡¸Jor|td(¶^WG;+3¼]í-›0x D$ð>™ƒô;¸öÄJ‚Æ‘ýÙ\Ù'€âʾ)¿ìçÙoàÈþÝáŒì3^ú‚ÇKÇ‘ýóÈ>ö0VLa5m—XD%Ç ; a|ØÙÞÚ̼T¢úC( *ûœæZé䮃+3UÂT}ÎP@ƒÂ(ݨQºóóý&8So¿€ˆ˜„”ŒÜÂâ2š¤=¤C úùúÓ㌔ÍQîD¿c&ú&Ê©ODõsùUßL”êÏgÕ´æŸS½ÁúÅúÍÂÅŠK¡€©lܼE[×Öblfeçèêq̇`?>9- 6s¡òb]SKû•«°›[ƒ ö¿ì?ý åiìOÉãÿÿc¡}—¨ÏWG†,}7€,h?5•eÅçò²ÓÏ&Ä ô}½<Ýœì­ÍA*wêmÛ +-´v ƒÂ"T ¦øÎþ=‰¯½Tö•à„È~+ûM,¢^Cö¡‹±f +-ŒbÍ´»³½…2*'ãlBtDð)?/W*¦;¶oÛºYUEi"Jv¾ä<ê¥4ˆ9Z:é áSýÜ(ý©3EÕ_±šMÒ}ͬìƒSÂHã’Ò²òŠJ+.Ösƒ¹2úø Lô»WS}øòt œöt»ÿFOWG+“£Ù£ã«¾ÄÕ¿_.DöÙN£XZFn‘ÂgË@pÖ«Aë‚á›[Û;¹yzùž<“p6=+ï\qYeM=Áþ5û#9ØÿnûSó&}ÄÊ0¸Ï@ÿkÝ—[/5ÔT•—À!d¤$Æž :åç}ä°ó!   ‹¦†Ú†uJ«–/Q—C¾Ìý”^ë•cÏAîA”ì/ì —};Fö#xd¿¹í +-¿ì?ee<3"û¸ ©É©k)¨a%çò²R“b#Cý35=¸w—.ìµDaÑ) FLQï½KõöäË>õÙ™r’TRZTÙJ¥uªL›Û8¸xxùrëSYUmcs{gw/ÉÑš£*/iOBæÉQý{Tõ91 +-ªŸÂt\Õp›_Ozz÷«1ØŸÉÓja+´ÖÊÉÁY_]³{ßA ›C·xû +- +-;›˜’ž®¤¬ª¦þRëåNøï}ƒðá ös°ÿ¯iìOö{5èô{)ôk«ËK‹ +-r2R“â¢Âƒüuwq°µ45úb–Æ&Ub@äˆÑâ‹ZÉz%ï9ˆÅ=ˆ}Qà@ÙWæȾ1¿ìg Èþ—üš€ìsÝ)õ(EeŸ¥Ô•öæ†šÊ ç ²Ó“ã£ÂQMÝ]Y›ÃfH­Y‰f*˘)nåa²?™CeÃŽ” R´J©ùd¢«•×oT×ÔÑßIsÔ툷`Hdl"§=µvtõÆèDTÿgѪϦ(Wõ™yÕ7­úØhßgsTìT_ðŸ3QL[-60Zkç/X¸;˜²Šê& -Ø [SK[÷£Çý‚ãâ’R2rò‹JË«jûݽ7úï ö!öÿNLg|ìOsÿðDCÿ +-ýg|пÝTéêhkn¬«®(=_›™šxÂ瘇«#øœ‚®ö–Íx h@à”Ò’þQ r |$¶ç Rö¥9²¿‰GöÝ<½ý@öÎfðÊþÍ[ƒB(õrÙ§˜"ØÇ`æ`jh ïzO×å–¦ºêò’ÂÜLpÓˆ?oOWG[K“ ¥T”W-'j*IÕtö,’Ť€1K™Ìð©þŒw8VIU_BZFººE[Ïp÷>#3k{ŒÑ“§Ã¢â’ÓþÃ~y?E}§q<Îçw1¶Ë%9 M[$DÞ”& Å¥—¥÷ºTéK¯‚ôŽ`A@z/FÅPÑÄ9£Á‹“›Üåîfîù|¾…ÝÖ5gp–áó'<Ÿçy½_ïs•ô('»oïžÛA)1\À)]þHá…ç„äøÊþŸ’ý3.$¥R³r‹ì·v€›ŒÌÊ>:Ù_S|85ýhò>ÈþøèP)§ð=Y©I¬ÈЦ)£G”åH7…ÆC©•‹/û+¸¨OâÑeý£b’À™ý +-Jxž¦æÖv W/¿ ”¢Ù%ÕõÍí—¯ÒÝ ‚Bô%Ê›Bô¿ü2t«þè Lª¨>Q¢Ã‚|½\´ê+óªþº9ª/\…½s°¿ŠNcô1ö%¶ÁªïÃ9¨¬ª®¥kŠÍÖÙÝÛ/(,ŠØgç•VT×5µÂõô ŽŒÝ¸ykbûïõqî>è?èsoâ6†>¸Ï厶æúšóeÅùÙ)‰qÑáÁþL(½'éiiYä÷ËHïÙ%%)!&BõÞ5­Fp¡HˆÏŸì”Ú'+Oɾ%-û €)$ûõÍÐy{úI9|4äôÈ))û°þÿ&95õiPý  ‚oz5ƒúÔ±),û´V•—äg§'Ç#Nyºž±;enŸ£®BÉ©*a$¦¸Ütñ©O”¤ žçºõ)ú¥25N'w¦HdlbjfnaÙùÚÆÖŽ+Ý}ƒ£ã_Ýš¸Ó|úÝßž¿àPýýJÕ'†9ëÍ©zmNfJbldH¨¾£­Õ¬êËàN»„TŸWoÈE'âx ‘Ç7‹ˆ¡^ †³_^Qùˆ†–1 k;p¦px+1Ö,§º¾©­ƒÀþuûS¦—±ÿ~Þ[BÿþÄí¯ÿz}t¨ÿZ¸OsC ÈO~Nfj@?$ÀÇÓ•aocifb¤¯}NA Ô^q }âVÏ^ƒ°žƒÀ²ÿ%Ⱦ*–}s$ûž>´ìWbNuõŽðØ)’}býßFöÑ?a=&õtd°· d¿b*!6"ØßÛÍÉÞŠ²ÓC`§ÒPÃhNáFw0ü/‹÷-\ª¿ò÷´R®#Ð"*¾Mj×ç¢J‡Õ4u M̬ˆi†EÅ%§±ó‹Ë«êš.\ºÚÓ?2ÐÛ…U4735‘…TßÙž¥ÊÒT}ê_8±¿ŠÆ>)8›¶@$o߉v]îà!5Mø3+['7OŸ€ˆ˜øäÔÌœ‚âs•5 Ím¯ ì‚èÜž¸°ÿTpì/sÿ=>Ðÿèôvô[j«ÊK +-s³Ò’b#C}½ÜœOŸ27=f «©ŽüGvØ$ ¸l@ä1P× ô4Ÿìügl@Û8eßØÔü”¥§IiYyEçÙïÙG¤ÙÊ%ûÿäã§4«hA}M ê㇪®!TÕWW”dgœ òÃ~jnj¬§¥®¢¤€I%)!¶e¥§\ ZÄád —êƒO~Š‡)…lRNQEèñ“–¶ÎÌ€ÐHTœˆY¶]ììéÅ :õˆP}`Ék’ú ÷¦ùk(¬üä} £t€–—äg§“£tcØ[½éÈRU}ÞE'™üœµë¡ˆaìKl“‚]ÇØWU×Ô58Û~ÚÑÉÍË704°Ÿ–•[PR^YÛÐrÄþ8`ÿ® Ø_ÖýwùxÌqú?sAÿûYèßùêî0@¿óÒ…–F€~ia.;ýlBlTXŸ·»³#tÞÇ õ´ ô*‚ÿHïÙ%XÁ6‰ hõ¬ ±ñ—}l@²¯¦©kx|VöcI?%dÿZÿðØB¨â/ûܬzÍÍ*ø§Á¾î+­µ•eEHPc#Cü™îN6–'ŽèTøò‹=;·oÙŒýtí‚TD ûÝbÊ>—êSÔ'"ô“Ï6Vð,÷Ë+©@‚™ uõô +-‹ŽONÏÎ/)'G90 yçÞ7SŸ +-$ùé ÊÕš`’„êóä'¨~G+Rý¢Ü¬Ô$VdhªM§­ÌLŒô4‰•F£#G¹DTÿƒ9‹Î±é8“Ñ÷l]—ÚµGZf¿¼¢²ª†lû ëÓŽÎîÞ~€ýØ„³éY¹…%åUµ€ýÎîÞ…±ÿ}’ûËØ·O`èÃLÃÐ# ßÞÚXWUQZ”ÇNOIdôý™.gì¬-O7Òý9¬¤pùÏID•ŸÁ-lX·–†þª9Юsà/ûèD)ÙÿÑÐÖ'dP—œÆÎ+¦d¿opËþäÃi,û?ª`õýógß>y<…a56Üíê¥ ÍõUåÅùìôä¸è°@_O—3ˆU†ºšj‡åe÷!AÅ¡¼U+¹dñ¦ID(ž%G‚ŠˆmE£”!Gyì„…½“›·HDlbJfNaÙù²6ñLRüœ7>_B|~ ¢ó©þ¨>9HÜšbƒý¼Ýœìm,¨ü”“åQý5KCõ©¯áÄþ*û°êð?¸Øn•ÜÊØ¥ÃG4´õŒ@r¬¡Ûzxû…E±ûì¼ÂÒ +-„ýöKûÃðS¼ØŸYÆþoÿ8ù!ô'1ôoôûàÚ[›êª+ÊŠò²3Rã¢Ãƒú® {K3c}£jô÷îÞ*)ºe¾+¤ ÿ5 û ¨”ìÛ:8»3iVì7´´_F†:† •–ý™YXýò²ÿ#’}¤¨ÓðW·¾º>2ŠÚÞÒPSQZ“‘’`Å°·¶05Ö×ÖP=„ u÷èbðA˜UÊœ‚ºhÃ9KZõ?™ª*L‘•#k“™•­£‹‡O`hT\ÎϪº¦¶‹=ýCÜ­i憈@ªçk?«úhŽã0Gº4åe¥%±¢B}P|žBª¯Å¡údkBù¹zi¨>¯ß›NýÏÚõ>Æ».*¾u;,;}µ£ 9&f–6ö ¦px+1%ƒWدkl%±?Æû˜ûó`™ûÿ×ã…>fþÐÐp÷Î-ýA€>ÔݦúêóeÅùÙ©IýOW†ƒ­•™©±Ž¦šÊ!П}{áÿô "¨Bƒ_ƒ@²/µù-ûÖv W/ß °èøätv>«î¾¡¹²ÿFEå–}ì¨?’Žú„tÔÑ¡¾žÎ‹mMµ•ç€V©I¬ÈЦ‡³ÃÿØ/離Î4Ž»“1Nv'‰eÝdg‘"`I"* +-((½÷^.péUzïK/ +-Ê¥ (¢ ¨ØDMtMD°­1’ÍjÌî™Ùç}Ï9—sn!Ä]Ùáýžçy?ßÏ—}ŒTÔò4X­Z‰ õOTû`îdŸ©ú2' L!óSYU]S×ДdxtBj&§¨¬’KÄ祫×n Ý‚9ŽŒÏ~Ž¢UŸ#¯35Õs©ôŒÀªï@ª¾ +-¡ú2 Põ—ø ±XÈ>ÆþçûRÐlaG +-Š»ÕÔ÷ëè›YA6»{ù…öS2ròŠÊ©©o:ÖFÇþ=ØËÀþ¢îÿÐC@ÿ• ôoÐïh;ÞÜP[UQ^œŸ“™šÐö÷f³œì¬Ì t45ÐG@ú?AB\ }Ä”O?!TÙ2èÏ¿ß0 Ù—æ“}PTŸÀÈؤ´ìü⃇«š§i²?2:>ùäù ÊQi²/ÄQy¼”ÔÉñÑ‘oï}}k¨ÿ‰«:nEY!'3%!:,ÈÏÓÍÉUú˜$óf¹ ­VR]Œ«¹X5Jr’8?iƒ—–ÝôÅVˆÏ=ŸÆæÖ.loTš’ÒÑÔ4¶œhïìÂé‰Tÿᣠ¬ú¯fÑ™~åŸ"T¦)Feº9p½‡T}ÏÒ‚œŒäxRõíÕWSÞµpUŸÚû˨S‡6¶j5Vqh¶r°¤íûš:ÆæVvŽ,¶·Phdl"`?¿¨¬¢ª¦cÿüÅ+=‚ØÿžÄþëEì¿ŸÇõôÿ.Ÿý<èË€þI ýÊòâ‚\€~\TX°¿‡«“½µ…‰®@_ :/Òiúè+¬ A}†…¢@LÙÿ˜)û›Aö1­@öíÝ GMÉä–UpëÙ¿ÒÛ70LÃÕKÀÕìd_ÐR!¦yÕÜPsø`q^vZb,!©öÖfFzZ<\Iˆ¯Å²¿‚(cü€KW¯ƒì¼üó +-É>ðjFÙ'vG ˆEÖ£Q¨fw†ûz¯\8×Ñvìhma©qQ¡¾,G à42XȾäz±5ˆúLÙÿ`®dŸA}jŽ@”UˆúЙ¤ˆ1*«©kêšYÙ9»yù‡Ç$¦få•WVד•éú›·¿ùÛwÇ&ðiª/:;¢ó'":Ÿ=žxÑy¢³¯çò…³0ÄF趥…¹)ñQdc²bf'OõW,$Õ_"péÄŠÈ[GKÂÍv½$\;’Ôm÷iéšXXÛ;»zø‡EÅ%¥fæ—WVÕ64oëÀØ¿Þ?8,ûÿ °GqûÿåcpCô_#èOQП ¡gx ß}©‹€~·ò`I'+-)> ïëéæì`cij¤§½Ÿ€þWý ô ÿ!<ò#aП—¿a²/Å“ý}ÚúÆæÖHö¯R39Ee•\ÒRAö±ì>šD²ÿì€%ŒXS¯^¾€v6>6²kèƵ«—@S[›ê¹•eEœÌÔ„èð`?/,SC]MuU¥Û`OÈR× K¥ñj)Cöçddzâ1‚GPPxŠ‰KJËnúB~Ç.rŠ6,¶O@ÊÎœü’CGjcê!5Do~ž1:…''5C¤ú0Ãn<Ãæ†j(LùÙiI±!>l¨¾‰Îþ½*J +-Ä%°ê¯^hªO-ˆû„ìcìN`ƒ,¤3,J°¯­ghjacïìæép °Ÿ–•[PBbÿ¤pì?§cÿg>ì3¹ÿÿfè¼{¿ ýŠ„~/@ÿìé“­-ýÃK 9YéÉý@_Ow[K3#}íýêj»QåûÙ %!.¶ÿ„•úÄWXFƒþø 3Ë>ð +-J¯²*²TS}WßÀШ¸äôœVMcˉöήËš:—©?kÙÇ‹C É>xêƒûwï`Oíêl?ÑÒPsdšXÞlks¬©»wíÀš*!Ž ,š¥ÎɆª¿”6E2;%QvnSPRÙ †èäê韒™[XVÁ­kÂÑÙ}­èÖ׸0MR3üýªÏ!îKwï  ¾„Tÿh]UEY!'3%!: %§3¥ú0Cytì¨01£sÙÂP}¦àÐ cŽïI\Bjƒì¦-_mSPÜ­¦¾_[ÏÈÔÒÆÁÅÍÓ7ð@xt<`ŸSPr°’[Û8ö_2±¹/ û‹Üÿ]O8óñٓЇ’ Ðÿ~FèWcègôc"Bý¼Ü]m­ÌŒõu4 èKädHè“¥—}ô€Í$û«0°Ö‘²¯ ¨Bɾ‹»·ÿð˜ÄÔ¬¼¢òJn=I¬ÞþAD¬£ã O}ËóTѲOP3 ¥5Õ'“ã£XTû{»/ž;}#«´07#9>*4È×ÃÕÑ–ôTEù/7ËÄB{Zþ)MS?˜ÙgPŸÊNrˆàR2· èTÓÐÒ32³Â… Í0-+¯¸üpuC3™œDr?žþè1Ý—DŽðWa¤×¥ÛpõP—:ÛAõ!8KòsÒ“â"C}ú§Z[Žô•æe§§$ÄD„ùy±YŽvVæÆ:š{T”vnß +-(‘‘–DЇðgø $M°Eòмý ¿%ûbÓ²¯FȾöÔШøäŒÜ‚ÒCUµ ûg».÷ôÑ…DõÇYˆªpSÅÌš{8ͬ3§Z›ë«+Ë‹ò²Rbƒý Q5ÔÕTWUÞ¹#kýºµLO&Öû^5Erˆ8:&ËW3”D3”ß¡¸'§…‹íIö%ᱶŽ³®ôö ß¹wŸœ¢ëo€´¶4ÅP}ÈÍ+(77Õq+ËŠ8ÔÝ퉺´©>/8ùUé‚P}jG É>ºuòØ1öÿŠ°/)-#·Ý;,KCSGßØÌÊÖ‘åî埜Ž±˜[ÇÀþMö!¯auûpÿo™Ø_äþ;=‘Ðÿú/)èŽ|п-úEyÙýH€¾7›ådgmnb «E@¾ÁFYiÉõØ~þ‚¡ÿÉÇð>bB¾‘²¿|Zöá Î«²—D– Û;à@DlbZ6Õú¦ÖSgÎ_ê¾Ö?„d˜ÔŸ³ªúË/xy|Ðèë¹|állj–FÊTc#C|Ø.ÖæÆúÚû³ –ÉJKˆÓDõÄžèÔKb¨þRZrâŠá¾#TR}$ƒÓ/(,:!%“SX†ë1ÁC· 7GÆƉܜšEn +-Ä&OõÉؼ9p½çrWg;à¡’‚œŒä¸¨Ð@Ü–,M ¡Ù‚êãÜäMpå´ê¸PTŸyê´[ÇÍ_;ôÚuëû¡Ünß©¤Ø×506·²sd±½ü‚û ÉéÙœÂRaØ¿Kaÿ)Æþ+Œý×4ì/êþ;?Aæ3¡ÿfÐ? A? ìïÍvýûuâÎU¾p¼ž©æéNÓ^ÓÜ™6 Y²g'"²F‘}ß…} YC")„I‹´Ì´PdM{’=•¦Eu§f¹·ç¹Ÿï÷œóûãg»÷y47×ù¾çû}}Þ+scC}]MuUeE9Ô>Bü|<ú‹¢‡0‹z DCŽ»·Àûói¡**!-§´N]KoÓ3+{lÖŽ¨ø¤Ôô¬ÜÃG‰R…Ø¿yûÞÃVˆ}\ªpïßÿ±O©ÕÓÕñ¸åþæÆÚêJœªG eíOMŠÚäçµÕ¡¥¯³AMYAv ³T©¥l`¨Žñ!RêSG8sœ 7/¿ûÍm\=ˆ¹¹'-#;¿¨¤ìÌ9Ø–jꛘøŽ:ÀáRŸ65?~ §æ‹ç½=]í´ó«8]zŒ\–b"B|<\lÌ©±)ÙúßÒ®ú¸HýI ‡83ûsÑ¿"Øçáã“D쫪kêèo66³²utu÷òö£b’IöKc¿‹Å>Ìlâÿáð¡åþ'†ûµ¨_À7Dèèd£ÿŠ@¿‡~ýB@?F?"4ÐÏÛÃÍÉÎÚÜÄÐ@WKƒ@_\DH€‡›k~ПF Ï~ _òc<ög°b1Š}~!Tª +-Êjtô!ömÝ<·†FÆ’hãدªÁ©ÚB¥ê+¸öï1Z#Äþ¿Xl!õ߿퇑Ý­ÚI´j]MÕehÕÅEyÙÒ’wEG„øûx¸8X›oÙ¤§¹^EIŽHUn®¥‹)´ØêOù êOfªO;AÚÜ“”E4´á-mܶù†íŒKLIÏÄcóì…KW¯×6PËR/^–9¿‡&y|ÏzÑñÁ®Ô»ÒUØ•N?r873=%)ŽššVfúp~Šp~Œe‰66§MeÞô1;ÂÏñMfžÏtö Å Íh>!1Ii9EeUu-]}Ccs+;GW/ß@ŠýÌì<ûÕû°¦µutõÀíï{Øǹÿë¼ïþNc"÷ÿ£aþ'ZèãÐA—£ÿÐï{þ”…þAÑß“äçíéædÑ×ÓÒPSQ’—Y#.²Z`…þw ˆúÁ¿„©ãý!c&û?Z<-iy2öÍ­í]ܽýƒÃ£ãw§îÏ:Tpôø)R-ûí=cÿÏ!cˆX¶z:Û[­› 7®SlådîKIŒ ܾÍÍÑÖ„lUiI†ZsfÃÏ¢¡5æfÑOÍMö¶„Y²œ›g• ˆ¸”¬¢ÊzM]#¼,yûáóÛ»ÿ`^á1bjV×5ÞºûàQ[G7žš£Ù•è§‡Õ‡ëÉ«Ò¼*Ýmn¬«®º|±â454b"C¶{º9ÚX˜¢ãSV!v%îåKqêϧ©ÏÁþT|Ù)öç ëŽ~×2`•Àjq̾š†–®fßÉÕÃÛ704<*.!yï ì7û-­ûÏú`jÂ>#÷'ØÍÇúú¿c0P鼃[è¿ÀèwÑÑ¿Æ~|tDFßÙÞÚÂÄÈ@O{‰¾èjÁU¼+1úÀ¼²~¦3Ño3öÉw€Ru!Úy¹ˆØµˆØ7µ´sÚŠ[56qϾŒœü#%egÎýtb¿‰ÁÄêHl R«èRnAì77ÖVW^ºXqªôXÁ¡ƒûSwÇGíöór‡X55Ò×Ù ¦¬ »F±µb9ÞÌæÓZþÕWcûÌÔgM¼,Qç'*!-GLMcsWOŸ€ÐÈ´+±ŽïÚz<4ÛÈ¡ù¦“ñÛoìJƒnJƒÌ̳'-ÈÍJOMŠ +-öóvw±·6C«’ú:%9éÿԟļë,ö§“3³ÿ=f%/fŒ¼’ +-°¯g`hbnmçä†Ùœýz6ûÝû/)öá à–ûŸ&ÜÝlj>6Ÿ‰þÛ~ýgOŸôtu ôïq ŸŸ“ÅFß¡ocaj´ Ð_¿Ї}WXŸwåŠåKÑ3XˆÑGõÃΟ)ãýabÕª+ U…Å$eä×»q3fËÃÇ?$"zŠÕC…ÇJQìWBñ4ß¹ßò¸½‹æ¡ÝbÆ>®'Ým®¦úškW~:w¦¬¸(?;#-yWLDH€‡‹ƒµ9¸¥…Ü’’âçåæZº«±ÊVʘ«?™©þ×èüÈ©ùÝ÷?À®´’OŸÂZU š&–¶hh…íŒKJIÏÊ%W¥ÊëìÓC3óÌÌ÷#ÍÌ¡GfwGŒÌ[Mu5UøðJŠòs2öíI 7%'[KCÖÌħÇJýÙã4õ' LÜ8èoýíˆýÙhJÃ[ Ø\-*A²¯­g`dbamØ÷Ãì'Rì“ìWaöoìwv?é}ö؇€ØÿfŸÌ}’ý‰ÜÍÇ4 úáƳÐÿ…B¿­µå ßÔP[sí*ý4}Ï­ý-›6"ô×*È2ÑGÏ`.Bù¦賟Âÿ†}ô +-Pû@ìKHÉ)ª¬×Ô502µ²sÞêå´cg\bJzfîá#%'ËÏãZm‚Z}Ô×ÔùºÿíûQÆ>¡>– þâ"W»Ú·Ü¿s³¡åj9äêáÜÌô”ÄØa¾ÛÜm-L6oÔÖP]+/#)†juŲ%¸V‘[3h±ú9Ô'§&ûøfͦ†&7 M¼*§gfeïâîíŽfæƒy…Å'NW\¼ÌØ”˜‡÷çP‡Ç˜˜pvðúYg× +-g×Ü€¥ gÉEiïî]Ñá!þÞxd#S^yxóÇqêSw•8¸q¨ëÎf)bŸ_PXTBJØ_¿A[oɾçÐìߨol¾}±ßN°?ñüÅwxeûÀb"÷Gýq†>þàûŽ2‡Dÿå//žúÝúÍú—ú'ý< +-ýH}K„¾…¾˜°?<„>´Ïúø!LgèsÆ>ñ¾åˆý5¸Vµ!ö-l]=}B#b’ÓdSpUV×5â\íèzÂÌÕb`¯öS½úõjc]uÕ勧K‚\©»ã£Âƒý¼Üí¬L P®*B® +- ®‚¶ç* .ø]_5ûÌÔg¯J`È" „‹f¦¨„´œÒ:u-=´)ÁámŒMس/#'ÿHIYùùŸ¯Âȼ #³µ½sô‹ÇÑ¡=é%¹'=zpïVSý ؓΗ—•9œ“¹/%1ngXﶭNv–ÄÙ©(ÊJ‰S‹Òèºã‘ù ¾ì¬ÔÓ¡ùY¿ìOÅÿ‹ÅþÜy ."Ùç#ÙWX»Ž`ßÔÂÆÞ±Äd¿±ÿóŠýû=ö{zŸ>ïƒ'ðú Î}Ä>~´ÜŸ`øoøЇûŽ.®Ð«[ˆ^•ƒ” «¿Œ­þ˜Ç>S}<3Ù›Ò’eˆ€°˜¤Œ‚²ª†Ž¾¡©¥¹(‘gWzêì…K•ÕµŒ‰ù&æH{Ò§A×$<0»:ÐšÔ ³ ÌÅ…yìMÞ‚ÎÆܘ½' ˜˜3ÇmêOb^vûÓìÿýG`Ÿ›‡_HXŒÅþF&ûÑ$û‡û'Ë+.û×ý›û]Ùÿ±Oæþ?éî³ÿç_ÍìÿÖ7úÐÑÇ¡è÷ú=Ýíý»·Ùè—#ô òr2è»úfúªÊŠr€¾þ2ôÐÂ;‡ Gx_s¢?.žÂd†[ôØŸ‡cÞ/ľ8ľ²š†¶¾¡‰…­£›çö@Ü«iÙùEÅeÿf¿Îÿ¹Ê÷ŽßÇcZT³Õ45MÙ&I"%$¥”ÊP!”R¤­JJ*ŠY‹l!Ò¦MÙ×/¾H‘-Ëw±6EÍèVs¸÷ýùœs¾«/æñ·Çã{?á}Îy¾_ïû3s +-JÊ*«kê›[™Ã¦K¸X)»ÚYŒl½´(/ûÉûiÉ ±‘a8XO8r´·µÞ¼‰C—Ê\E¹YR3gL'{•G®UŸ7Ñð8+“<”äáPRU_¬­KnÌv{÷;¹¸¹{] åÞI|£ë~ý›ÐÂ,õÿ¤Rÿ=tÚ—¬¶´/«è´¢¼¬ŒxrQaÁ}<ϸg’•¹‰ñºÕ+t‰…©¨ ;K’;:)>©Ïû±×íÓÑ[›% ìÏöiìm0µ Ù?ÂÇ~bÿ>b?¿ˆVVQUý±ßÜÊ`±;:»{àMö"ö‰Ü§ØÍý¡žÍÿ7'ôásç¢ßÓÝÕÑÕXÿЯ(§ð£äÐ?I o‹ÐßÈA_]Ueîý$úß~3iâDúcÄ}^õŒ}¢WUÔi.Y¶ÒÀp½©ÅV ë€“ËIw/߀ð¨¸Ä"X‹Jé(X›ZDì÷öAæà]´]àõ®ï-.Vfksc]M5k.Ö”¤¸èðÐ_/÷“Çœöï±Ãv­]¥§«­¡.¬@õʾYöùSŸœ¹1gJJËÊÏVš§¶™å6›ÝÇ óräÕ„7ñ™T(p&Q“ûÄ3¹¡ÖåïWYVRƒ®¤T|%ù?{êøуŽ»m·ûRo©–N}yjrœ3i¼X¦¾ûc¸•C|ð˜ý\öUIö ÖqØßG°ï‰Ùàg¿¤Œì×Ö54ûLv{g°¹ÿçþ”ûˆýÑÜêúò„>…þëžîÎ6‹A¡_…ÑÏ%Ñ¿‘3ú–\ô50ú³1úP>Ó¦Bú|GµŽ|?‚xý ±ÿ=û$]ªêÚûk6šo±Þi¿ïó‰Óç¼ýƒ »Pìç–”WV×B±¶ «èØ'^+©þÇñ%k3NÖrZa.ÂëækW1^§Ž9à°Ëf«¥ézCƒ•Ë–h¢b…'-Éo7XÿGêãÑ}GÇ]˜Œp&é¯1Ú¸ Oî°³ëOŸ‹!aÜ}Y\Zñ¬¦®áU+cØW’ÀÜ>sëéä=’òáHºw+%1.*<$Àׯ˽v;¬,Lׯ#‡®$*õ§—­¸¦þ?xÙÿŠ`ù½£ØG_<—ý9À¾:´Ž®ž>ɾµÍ..û~!aÑq ×S0û™9ù…À~%Å~f¿³ß‡ÙïGìžû£îÿgÐÐç¢ÿû{9o~£ÐomF迨®ª(£äf=ôo¥ŠFߘ@_ ¡¯‚PìKHL˜Ä-Vˆ}û )¼Ì·lß¹gßác®gÎù\ ‹ŒMHN»û #+¯ˆF¯z^[ßÔÒÆj®^üÑÊÃW›ÙÚÜXWS]YVRóôQúíÔ¤øèðÐ_/ܬ{ì¶[™›ƒ^º ×|å9¿ÈÉHa½ˆdåÃk¤Þ˜Ðäˆ}‰¯¤™ä•¤¶Psɲ•†ëÍ,·Ùìv8xôø©³Þ~AÄ‘ÄÛËÎ܆³-y¦Æ¿,ÙŒV¼,+ÊŠóñØR`lWB/xy¸¹ iu#éhâmù tÚ–SyRœ˜¦>oìó°/!Ⱦ$°¯@°¯!̾ӱ˜ýÄ~,‡ýì¼ÂâÒr`¿æe}#°Ï`±;:}ÈŸ¾w8÷? Üÿ4šû¢Ÿa…>ýžî®Žv³­…D¿Ð/ÌÏÉ$ÑOÀèúûxy¡¿jÅ2@áÿ-ú¢c2•¬ûÊóhh-]®¿æ× f›9z÷ ¼s šõ>Õ¬5uÍ­L6Šý·Ð8¤úŸ±^"øâó ^i_ïˆÖvV[KS}íóªrZan­—‚üÎ{œ:~ä Ã.Š¯%‹âf••–ÄêC³’záØçSŸw]‘¤ 8wþ‚EZKõô×mÜ´Ùz§ý¾Ãήg<}.†„EÅ%¦Üº÷ðIv~qiÅ3ÜHÛð®œV”—•ñànZrBldXðEŸsg\ïÛ³sûs£µ«Wèj/V§Æ6}ñèFúš“úcÄ2õE±?bÊ?Nû ¥ŽŒ°¯¬¢¦®¡%À¾#fßÝÓ±%:öZfÿñÓ켂bZyEÁ~s+ƒÉnïìBì¹ÿG?bÿ#—ýÜÿÒð~ÁgðÐÿ„Bê}úÝ€>£­åUcC]Íóg•ôRŒ~ÆC@?å: 1úó••HôÆèOæ¢OücÄ}®]üÉú þPø@÷(ÎU!šbßÔÂj‡ÝÞýNÇNº{ú„„sù**¥?{ñ²áU ¢nÛ^ûø¬<öñËEoFU+‹Ñ‚«•^Z”Ÿýäá½´äÄØ(ì×iWçCŽö¶Ö›7møuþr-­ +-²³$Q´b¾šudÞâÍm¼97r[ÊöTUçÜHVÛÑØ\Üܽ.†^‰‰‡e™þ83· ¤¼²N¤æ6æ°O¤†ÖG¤>ï…” »2õúµ˜ˆKxW=è°Ûf›¥gj'Ò·|©?‚ÛòK>|ìùëìÛñ²L°Ÿ|óö½À~.°_VQUý¢¶®¡©¹µ Øïèêî¡ØçæþçÑÜ~D†þŸdèÇÞÏ ý×=]l£Я‰Ð//-.ÌËôÓï¤!ô£#ÂBýD¢¿£¯ˆÑ‡?]»8|&M$Òg>ú_úÓý[ÁØÙ‡_Ý»À—´Œ<|ÿóÕ5´—ê­Z‹£ÕÖÞñó‰Óg½ýƒ.G^M¸qóÄ~n!øõ¼¶¾übƒ_¨Zùý*ö‰lE€½îæìé£ôÛ©IñÑ᡾^î'9íßc·ÝÊÜÄxí*=]m uŽ_èåáwG­küÞFæ­ñ¥þXIRZV~¶ÒÈÈÊ+¢Ñ«`W6qv%øðRŸ<ÞAýôtµ ®Ê[)‰qQá!¾žœ¡Y˜¯[½]Hj*Jü»¾x ¡I¼>vžÏøÞÉ}M±?³ÿ3ɾÒ`ìŸó¾€ØºJ±ÿ$+· ˆVF§Øoic²Ú;:»Qî÷ö½ÍýÁžÁBÿ37ô)ô{º»:ÛÙLFksS _]UQN+.ÈË~ú˜@ÿZltÄe„¾§Ç)‘èÏSR5¤¥8èãð¡Ð+€¾˜ýü±?N0ö¥fÉáØ_¤©ƒý2µÜºc×ÞG\ÜÛªÕk?Ʀ¦¦~ä؉Óç."]ieçìᆋK’-$"„öxBš¬*ç£þ¿ßhJ83‡ eÖ‡dV 2ËÍLKÄG…ø¸;¡éÚ%P•ÇŽ U¹K¢ú+SýEöØ`9":0öׂÎVûÎî^öq± Éé™Ùyû5õM­í]™Ö70426>Á`±¹|H<aÑý—°î¿ZÒý¹§²èCТ?=%òy€þãÑáÁ~¥—ÐÝ _[U^Rø@?%1.¾‹£­è«ÁÐßµ‚>ОO€÷¬Y€cå{}yÙGÕç÷ð°c­ihj²¯­sGßÈÜÊ,0 ›”ž•[X*ÕV û“,ÐÖi ­Ï!½ùå•Tö_+–}aÿD¼õðV‘€Ë†½•Žzkia^VzR,.,ÐÇÃ"˜žîÍ«Ï>qô°úÁ}{1Ú +-¾` L}LjHW~²aã?Û²}çÈBÒ:yæüemôï[;¸zùÁU™‘_\^ R7Hƒ 30àÌž©Ù¼‘AûˆN!ÊöQJ|LD°¿—«£Í}ISÎÍLiU.¶Ç.yî2ì/“`ÿð烰¿L\eØ׃°oaß70$‡OHNƒ°_\VYSßØÒÞÙC$Séö'™l.O OMÏ Ø_Ò}…÷6Ñ‹þK‰èÏÎL‰E>—ÃbLè ôÑ($BWGk“ú™é)‰±Ñ‘¡A~ôÍ•B ý ïô•Éþê9ÚzÒÖ«7nëšZØ:¹y„DâR3rò‹+j`‚Qú·2Ù<•½õ××Ù—ŠëÓÙi‘€ÇfBë£dKŽöótq°67Ò¿££ {«&â­;·"ŸÙi I}9Õ_& PCV•¿ÒøF2 MÌB#ñ‰i™¹%Ò¦{2É₦œM Œðíª/KìÕ?~ž3Ɔúi½„N ú•²¢ôõp¶·’FvRKSãº`Õ—5åŠÅ®úJ°¿¸«U¾™¥½³„ýp>>9-ãa.À~Eu]cK[g7±—Jï}üd’ÉâðøB‘xzI÷ç9UE…>}±PÀã²ôÇÇFô©dROW{kS}MeYqA^vfzrBltDh Ÿ·»‹}Ãw‡þ‡‹úXÙG¶»ë?ݸ ŒÝ»%ƒ½õðVskO¿ ðè¸äô‡yEeUuMm]D2m ŒQ_†0Œ¸Î¥þ¯†ÁØŽaØèP?µ·§£µ±¦¢¤ '35âïíæhcÄõ×3§Ž£ñaòÞúÁBa_.4´*e™mÛ±{ÏÞ}’¦¼vS÷Ç{fVvÈ>ŠKÂFFEÉ`s¥*ª÷$¤ú’ž¤’º;Zj*Šós2àļݜl-L õnß@æÑuµý{AQnƒ‹™´)f ýîmØ_` „ý=s°`ßÀØ̾§o@Hx>>)`?¿¨´¢º¶¡¹­£›ÐK¡õÁØŸ`°8\¾@tvI÷ß;‹þ´X$äó8læä“Çc#ƒýtj/±§³½¥±Ný´ä<."$ÐÏËÝÙÁÖR诓@ÿ# ô?XÌÐÇL^öo•È>xûǾýîûKÂ,íœÜ}C£bq­âÚÑÓKíŸdq€¸NÏþíÙó†ýKÃÞ„ >1.›ñdlx€N&tµ5ÕU¡æèãîlgizOOeØaõƒûöîÙ½cÛç›7!â:a Ný 3¸)×AÔ—E¦©"»¬­ƒ¥«§_pDL|JFv~qyuCK{7‰Ú7crx˜Ä $(OLaMBñ¹,40"XYQÞÃÉqÑáAÈ:2Öÿá–öåógNjž<zr÷Ž­ 10>ÆÌ#¹Èås—Çþ‡Š±¿Iöuö ì;¹yú‡EÅÄ%¥>ÈÊyTXR^UÛÐÔÚÑE ‘i}C#cã &›ËES@÷!ì«®ûÿoÿîEvfJ,ð¹@tx°ŸFé%tw´57ÖUW”åç>ÌHKŽÇãÂC}!èÛXšèßRýÍóCÑS_Nöá` ‚0‰¸T?|ôø©³®\¿}×Àä¾£«—?Ì°ÙÃê›Û»‰ú 0W&›'1×ræªHö_c(†¨ë‹çÏ Ùð8ˆºRHÝíÍõÕåŲ$Ç#³·67Ò¿££}éûï¾=väkµý_JÍUŽa F}lSÊEåÖí»À<:Í#41C [G7ï€H|b*Ô“• '; ½´~°Ž&Á:Š¤ëHy`JóÂŽ£ÎÖÆÚÊ’‚ÜÌ´ÄبP¤&Íîý¨{óØ!8°í[u4·'¨(37GöQì„Áþ†y°¯ cßÚÞÉÕÓÇ?8,2&.1%Á~eM}SK{g‘L¥÷ú?Édqx|¡H °êþß—t_zª‹>} úS"¡€Çe³ãc#C}4 +-‰ÐÕÑÚÜP[…@ÿAjR<>*<$À×ËÍÙÞÆÒ @ÿŽêÐ_ñ¾@ÿ Ù_3 ¼èùËvH6×KÚ:wôÌ­ì=|ƒÂp±IéYy…¥•uMm2 1 1 ®?AêúËüêú†ìÃî:‡b­5%9™© øÈ/7G›û&wo]¿‚ªë ®»¶oE ¶vÍ*bà .ÃäU¹,±O7Èõä‰Óç.^Eב³‡O`.¬¬ +-ÖE$Ó@M2Ø\IM¾u)ØFÏ‘mÄcÃ-IÇ´dFJ|LD°¿—+’×íëW.œ=u\nIjRØ¢Wý9²ÿ_`ÿ®‘©…µ“«‡PhdtlBJzfv^AqYeM]cK[g7±—BC°?Á`±¹|P tÿé’îËÝ;‹þ´X$äó8,&}út*™ÔÓÕÞÚT_[U^Rø(' @?.&*,8ÀÇÓÍÉÞÆÂÌØ@‚þ¥ógUƒþò÷ú¿Ãü2†!æ +-dÿ³-Ûv~ñç½ûÕÔ »¡«ghja넨kBjFN~IEMCKG‰Ú78:>Áäð€ú*QLÆ~B0Æe3žŒ ÐÈ„®¶¦ºªÒ¼¬´¤Ø¨0à®Nv–¦÷ôto\½xîÔ )Ŷ~¾P½L]—-˜ìËSîI À hÁ}¹_íkÍc’š46·vpñô ŽˆÆŽ#Êkä%kÉŸçoIŒêcJrfJÈç²$quJâJOŠÃ…ùz¸Ø[I·ÑI-MCØ–„òZõ>©¾bì¯À`rì_¼a_ßÈô¾•£‹‡·_Ph.6!9-ãan~QiEu]CsÛد§(ï4€ãÞÜxç˜ñ“¹nA¢‰ÆŠ€ T‰-‚HコôÞ{ï½—¥ÃÒaYvY–¥ww)¢—1‰õ’™ËéÌÝï÷¾ûî¾Ë.JŒLnÀýžß»ŸçûôôQ¨tst|rzv~µøór»°ÿóBÿ;úÿ|°z ý¹™©‰±‘á!Ú¹·»ƒÔÒXWSYVR˜›•ž’àëåáêdgma‚ ¯ÐW~ú»9èïÜ&èó.^øØ)€Øþƒ¢G@ì‹KJË*žW¹¢ª¡­ghjeç싈MLËÎ/©¨©oiGÛÆ>Ö®Ož=ç¨ÿ¢Ø+áêsCÔñüécû«+KH¼2±x­(ÉÏNKŠöóÂSŒ“?súÔ‰/}ö©È^»âÛDõ±ñÖ$î8óR󺮡­ohfmïr×'lÉ”ŒÜ²ªÚ&Rgo?12>=·€ÜF€úÀƒ7ŒkÝi=Ó‚§sˆÚßÓÑÊ;Â}®ÖæFè’TV’;#uêÄqd\ûÀ¸ÖÜFÛ õwcÿwc_åòµë7 ûÆfV¶.îÿ ÐȘø¤T”ý*b}Sk[gw_ÿÀàÐ0šû ,öÈý‡ÜܶÑÜÿµ]ÞÔ?úë…þ‹µ¡¿Èº7? CŸÉ S)äž®vRsC-@¿¸ 7+-9!6*,8À×ÓÃÕÑÎÚ ¯{SAÿœÂ{ôùÂcÿîE;piWðá#íª®¥k`laãèFð +-‹NHÉÌ-*«®ƒŒQ c ^ÙK÷7¯±Ö+pìþ:62Dã8VZ˜“‘àíáboef¨§­¡zEW þáCxEC^<"ò†ïúýøR'o^‹¿ [òèq1q)îmdlŽŽ+<&!5+¯¸¼¦¾¹ ]’“3óÜ%¹Óèµ—Ø‘£Ãô>¸#k°âïåálgeŠMKQVZR¤>rýõOè’ü`7߸¶xêïdçØ—‘UPº€°¯¥£Ø·´upv#xû…FDÇ%¥fdç–”Wë[HݽäÙ¹½¸¼Üµr_(ú¯ ý‡ ô—جú“ã ô©ý}=m­MõµÕ¥Eù9™iÉñ1‘aÁþ>žî.ŽvVæ&wôñ蟖@/ý]Û }|ìããž—1Å _]½®¡£o„Ä«w@hd\rzNAi%±±µ£›L¥3Ç€c¬ÅᎽ6ö…A67=1ʤôvµ5×U—åe¦&D‡ù‚zµõª£©võ« Šr2ˆc‡cˆúà%…Æë;ÿ–ä뀲$OaKòæ­;&–vNî^þÁ±IiÙ%•Ä†–vtZS³ó¬¥dG>~óŽÄ§>L}Ί\f/€a0h”ÞNRwXáA¾žnŽ¶Æ·´ÐËèìi ä2âíHlZÜÓhë«¿.û»…±ÿ9ƾ<}#3K{g·»^~!áQq‰)éY¹Åe•5u ͤö®2…Jg0GÇ'§gñ¹ÿí†r˳/`þ«7†þêÊò"„þÌÔÄØÈ06ÐßÛÝÑÖÒXO¬*/)ÌËÎHMŠ‰ ò÷&¸»8ØZ™ÿô·ú8Åp±¿‡¯ÛwðÐáÏ¿øÇI é³ +-ç/^V½8fëäî铘š•Õ+e1:1=w½|ªÿýðq£êÿ$ >öòxÉõd¡d«+‹,¯c _É0_‰H¾&ÆFûyº;ÙZ˜ )Ÿ“?#uJìøÑ#ŸŠ€zý3®^yŽmŽúp\pI‚q+œÓèðgÇ8ÓR¹¢ª¡­ghf…îȨ¸äŒœÂ²ªÚFRgO?mhd|zŽw½fXBÔGgõìéãïY-YM1‡¨dx+Áa”ŽFw]ì­ÍŒôu4¯£+RJK7,ðÝïØ‘[úƒÇÔ+ö¯ªªkBöM-lì\ïzù‡GÅ&$§eæ•VT×Ö7µ¶uv÷õS‡†aîÏÌ¡¹¿úàá7ü¹ÿ£Üßì ý—‚¡ÏAú³Ó“ã£LJ!÷tµ“šëj*ËôSã¢#Bý¼ nζ–fÆwôt´n\¿vY /ûô?À¡¿}RÝ؇Žz݇իÔ9%åK×Ô4uo›Û8¸|ââS2r!dMdS³ ,dh¾âb÷AsŸ}w^ìƒ×æôë{avj|dˆÖ%«­B%‹’y8Û[™êißP½¢r^Ÿ¯²È€ú¿ß$õ…N ìHDýýE᎗D/#5MÛFÈ°|ƒÂ¢R3óŠÊ«9+rY‘‹ËÂ#ÁÔ•À]4<8Ðî¢úšŠâü¬´Ä°!½Üì,MïèÝäÌJZâ$<ŒDRÿ“½kRväÿå§þÙ?)!%s°ñd_ûÖmCS k;GWOŸ€à°È˜xÀ~N~QIy±¾±¥­£»—<@Ãr~µ¸´"û?ðåþKœû[š}aèãCÿGþÐÿ†úshè Rûûz:Û[›j«+ÊŠ r³ÒSc£ÂC}½îº9ÙÛXš`è_x¾ð>ö9õº|ûíý¨ÿwÙ2iYE,_M­ì=¼ýC"c“Ò³ J*ˆ -íÝäúðØäÌõñ—2,Ñ#G‹)NùÒ×êZ· L,8‡QlbZv>6+*‰Ìjie•·!!ëªO}8*xñ/H­UUU<•/ÁÕÑÆÜø¶®–ÚµKÊJð.B6$øöAꯙնIý|ìÿ–Çþ®õØ?†±¯xžÇ¾‰¹•£‹;ÁÇ?(4"&>)5#;¯°¤¬²¦®±™ÔÞÕÓG¹?:sámsÿ×&úÝÿ„£ ýBei‘µ0Bb „>m€ÜÛÝÑÖÒTO¬ª(-ÊÏÉLKNˆ ðõòpu²·¶0…èkª«^è+)ÈÊœ–?ñå{ôù¸?2n¾î;p‰}‰ÓgåÏ]¼ŒIæèæéÃé×:Я½”AÒ¯ìeû¾ýþ ø²õq”­«þ8ê¿xöô1x퇫+‹¬ù™É±aú@_w{ 7`Ãý<Ýœl-Œ tµÔ!erg¤ÄÅŽ="*²<èa¿î&Ù»ž:,¸"¡€ ä0âÎJnÈÜ —œžSXZUÛØÚÁ½‹Øœ»ˆ;*Á)L}Þ¤`ês&ŤSÉ`R ÄÊ’‚ìô¤¸Èô,23Ô×Ö@¤Œ¤¸Ø`T9£‚wÑnÞ]´]RÇ[±JJú¬dÿÊ×j7uõï›[Ù:8»¼ýC"¢ãSÒ³r ŠË*ªkšZÛ:»ûúhCÃ#cS ÷ïqsÿîo3ö×¢ÿ’ƒþ¿aʬú ô'ÇG™ŒA*…ÜÓÕNjn¬«©,/)ÌËÎHMŠ‰ ò÷ñôpq´³¶01¼}K¢éâ%y}±÷è¯ýý†²õ1É°~—’‘ûûõáTÕ™p8»³º3™L"›5qQ‚Á@è½wÞ›ôK/—ré½÷Þ{ï½÷^¤#6DLLVEÑÕ1;³Ùï;ç–s/KFfwÅó'¼çœçý½RrJªº†¦–vŽnxBPxtBjf…²éùEHØmJÀ"–Ñ,åõ“Þ=±`ŸÑìâüôÄÈ@OGK}uYbY(°Ìgca¢¯­®¢ #!*ȇ X +-eG¤ú¤ÃPÙÌ,¬à.â†w•:*/¿ ð˜ÄÔ¬üb¸ ;1 r}ƒö,Ú/õ1ƒzIÔãGh®¢±¡¾®¶¦ÚÊ’‚lò~ÄY›ëkÁII‚IqƒI±²Ï"ðéSÿèáJýhÙÿËþì3¢ìGf_^‰Ì¾-ÎÉÍÓ››œ–™“_TZQ]ÛÐÜÖÑÝ;04:>93wiqùò•«HîßÙ“ûO‘ÜGÙyاƒþo(ú/ úT¡ÿ 9ôoÐÿñ‡•¥…ùÙ©‰±áÁ¾žÎö–ÆúšÊ²â‚ܬô”ĸèˆ@?¼»³ƒ}Yi Qa>îèÓy(êcb|ù ŸCʉ”ñ VßÄÂçâé—œ‘SXZU×ÔÞÝ?<65·°|eõËöìï˜Ø§Âì)Àì!³%€Ùè`ogkcMEq~VjBLxïæhk‰¬¢¬”˜?7ç¹³dËŽ}^èÇHÀAßå»|t7$qTØ)-¯¬¦©gdn…žE‘±Ié9¥•è¤ÆÁ¤VÀ¤ÖÖ7·^³é¦þ‹çðï ^Kó3#ƒ½- 5åÅyÄAy¹9ÚYšêj"W‘°/¼ŠÀ~DRÿop?äYô?ý¼5ûœÜ¼üB"â’2òJ*jÚz†&æ–68'W/_ÿà°È˜ø¤ÔŒì¼Â’òªÚú¦Öö®žþÁ‘±‰éYšÜßÆäþÚÜßÙ%ú0ôŸ¢¡ÿ ýŸ`èßABÿ*ús3“ã£C}ÝmÍ uÕ¥Eù9™iÉ ±Qá!oO7g[+ S#}Mõó}) Q!}ö³ßœyôÃ/°OìÀ=þ%8rYΰ±spñ +-ŠH@Ë´˜ܽý‚#bÓ²óK*j@ÁöŽNÎ\Z{óöÆ]$öšA,Ã`FG}ŠfPýÝÇ;@ýû÷¶6××n¬^YY˜›B¶®²I؈`ow'{+3#2f<³ÓÌŒ_SìAXF5*tA³ˆ9‹˜N‘'%£ ¢®­oŒìG_°ãS2r‹Êªë©®¢Ûwhµw=ÒUŸ2§Ÿ±sîïno®«*+ÌÍHGQ8Šl.šh_8¯(+IZ`Pp=~¿}lê.õßýö¹xù!ûrŠûÆf–6öŽ.îxÿ Ðˆè¸Ä”ô¬Ü‚â²ÊšºÆ–¶Îî¾áÑñ©½¹ÿÌ}È>mî#ìÿëýeŸ.ú/ôI¡ÿúÛ´¡?=162ØßÛÕÞÚT_[U^R˜Ÿ“‘š@ðòpuÂÙZ™›"è+ÉËJ‰ôy¹¿ÿ¢ÏÂÌtò«èclìCõ©-#,¿°˜”œ’ª†Ž¡éE[GWýÇ;}bèߥ ý©ñÑᾞζ–ƺšÊ²â‚¼ìŒ”ĸèˆÐ _/G{K€¾ž¶†šŠ’¼Œ¤¸ˆ?/7çôé?Ô±”ûŸ~Æ€bÆ 1ãàæ•$%¬5ÎÅÃ' $2.9=§ ´²®©­«ohljvaùÊê[ë[4šíiØß1±OÅÙSÀ±DΖ.ÍLŽöv¶6Ô”çe¦&D‡ð®¶ au†âãædgc…š}yœ¨À쯠>í~¤#óéoÎ"ëQ\ZNIMS×ÈÌÊEþà(JJË.(©¬%ÎinaÌim}sëÞý_ÿñpçñ~Û‘nê¿xþŒ²7IËqf,ÇŽ–†êò"tLA¼›£­¥©¡®†ª’œù&:ÅHÞŽŸ|ŒÎéÈáKý7aŸeÿkÀþiÀþ9À>Ÿ °˜„´¬‚²ªº¦Ž¾‘©…•-ÎÙÍÓ›Ÿ”š‘WXR^YSßÔÒÞÙÓ78<:AÎýk×o®Ü¿‹æ>Ê>Ìýgàå?ïÙúÿ?>‚>ú÷1¡¿J +-ýɱ‘!ú­Í µÕ¥Eù9Yé) ±Qá!~>xwG;ë‹fƺZÔTåˆès‘Ðg$¡l_ôÿ|¨Ð§)Xf0a‘Øg:uÆ>¯€ˆ¸´¼2Y3/¿àð˜Ä´¬|JÃÎ\Zº bÿö»Û0öú»ˆfÎè¨Oñ ª¿ûxQksýÖÕ+Ë ³Sc bÛk+Kò³ÓAÄúy¹;ÙYšêjBÎÄ„ùy8Ïe=Í̈4,¶aß±fô| EpN\`Np;j‘·chT\rFnaYU}s;¸‰ÆÁMt¹‰ˆcÚ¡Œ‰f9ÒUŸfJk`J+ sSãÃýÝíMuU¥…9à$Š'‘§ ÎÆÂD_›²Á˜X˜OÇôé'ôn¢CóÑ¿ ûL§ö9¾çá•’UP:Ù741·´Å9¹zxùú…FDÇ%¦¤gå—UT×54·ut÷ ŒÓäþmî¿Žýÿ¶×ïäyú»OHè“CíæõkäП¡ßÞÒT_SU^RB?5)>&2,8€àíéæì@F_UYQNZRLDŸçú¯x° KŽ}T³/N€Ô9 bŸ“‡_HLJVñüÓ‹¶®ž¾aQñ)¹EeÕõÍgs‹o±”Ïãªbo\ûqeq~ñ¬ñ,xàãálomn¬§¥®,/-!"ÀK±à½’ÕDZOç(< Ûñ$Ë6v.xÁ1i˜À1á aÑ ©™yÅå5 -¤åøÃÕë·noÜ}ÝIôoì0È¢G€úÛä‹h½ˆk+Ýv£·»“½•¹‘ž¦qJ\ìlgN1„SBO¢ÓÿÉóGØçæ—’‘WRQÓÐÖƒìÛØ;º¸ã}üC£b’Ó2sò‹JÊ«jaîwõôÑÉý{ ÷)ì?EØñ³¿?úÏÁ÷ü ý4ô¾·½µ¹Cÿ:%ôÇG†z»;Úšêª+ÊŠ rAè'ÆEG„ùûzy¸:ál­,Lôu4ÕÏ++ÈJKˆ òAô¿ecEÑ?Aý#‡ýþD¥6öÿþʼn¯0œ‘"ÖÜÚÞÙÃÛ?$26)=» ô?ì—÷WTgÆóî1UÑH,tEQiC—.EÞ{ï½w)R)JÞA:‹ˆÒņA˜)€&¨ÑÝìž³»Ù}ß{g†”s¢''Á÷Oxî÷~žÏSQs£¥£«wàÞÈÄȳùâûxö?:Ùßh³ÓS&LJûº;Ûšê«Ê®_ËJONˆ‰öóru°A,ö,°X1„gÜ(ÏXvƒËDb?XP("˜vÒÇÄÉ ËQ–£’ª†¶‰¥­“»7˜Dq`åä—×4ÐR݈…ÝSÚ¼™ªþ?ù;C5Â@52„”B +-ñ÷rs´±0Ñצ."ÇxÁ":t€•¾wÐ.›]ýV±ÏºÿÀ!6ˆ}ÞcÇö…EÅ%ed”TÔ5µt ŒÍ,mì\=¼ýC£b.&&§fdæ\º_QUÛÐØÒu¿ê>À>Ôýg3Ø9 ûDyè>ûðþñgÆþV ˆþóå%2‘°¸^ôn÷Üêìhm¾QWSYVr=?7ëJZJR|셈РO7g[+sC=}UeE¹3R!“'ôy¸ÀÉèïûýu^ö!ÎöáÕƒ£{ˆ‹‡—_@#!#¯¤ª©ƒðÌÍ; $261%#{Íb‡Ç&MMÏÎá ¤¥•?½|õó„gt@cBý5¢ý§ÞëW«€údâÂ<ÔØ#wz»:PÍàíædKš¸¨à©ÇŽps‚FgýŽb±;?ÿœÆ³õ=™–#˜Dú ))«iêš"ݺñRÚÕÜÂ’ÊÚÆֿݺ}ghìþéé~‘Ò[æ!1¥>CF‹óØ™ž<œ½7Ñ †Aäébomf¤w^ý¬¬FAPG@5Ò…´Qõ·ÕÙoû{hØç> °Ïê´°¨˜¤´¬¼’Šš†–®¾‘©…µ£‹»—o@pXdt\Â¥ËéW³î—”WÖÔßh^Óý±‰É‡P÷gfqóøE‰¼°ÿ#øþ¯¡î3Çþ¯k¿Ëúmú@ô—ÑŸÃÎBчЇ¢ßE¿½¥±¡¶º¢´¨ðZNfFjrâبð@?oW'{K3cC=mMuUe9)qŒˆ úTè³ Ðÿ’ý¿lk诓ýŒ<;ÈN³X)YE•sZzÆæ6®ž~ÁÑñÉi™y…¥•u Þ45 Øwh,Ã%¬÷ØUè±€h8H´û£CwP¢U”ä^MMºx!,ÐÇÃÙÎÊÔPGSMY^F#$Àχh,ÐX¦@û@1­K‰Ö\È"“D‘ž‘¹5RL|rzVÞõ²ªú¦¶Îî¾Ááq´$ ú?Aôf“Aô+}D›ì!ØŒ“ã#wû{n¶77TS›1*4ÀÇÝÉÎÒÔÍH# 3:ÌÅqˆ6ˆ¾ú©Æ¿nWÕÿlSìƒ/û#öÁâå¤b_HTLBúŒ¼âYµsçuô MÌ­lœÝ<}üƒB#.ÄÆ'¥¤]º_X\ZQ]ÛÐt¿ ÑýáQ û îÏbçð "yibÕýuØÿ#öojÿÆ÷Nè¿E¡Ee™L¢?ÃÎÑüprbl„Nôëk*Ëèçe_M¿|)!.:2,8À×ËÝÅÑÎÚÂÔØ@WKC]EIAVFR\T@ÿø1^úö³~‚>“ÇÔb¿Ùµ{7Ðt ͬìœ=|Ã.Ä%¥^Í)(®¨ihéèê¸;2þàñÓgØùmí-s¢­ÝS¤ê“ø¹Ùé©G“cÃ}ÝmMuU¥×ó2Ó“ã£Ãƒý<]¨{FRLø4ðXz¢¡ÔßñQ©OYDhH€ +-h5Š Õ¨­olaëèæíODùEåÕ ÍíHF”ŒˆHF›7#SÕ§#Ñ"#º?6DQVzrBLD°¿—«£…±¾ö9EÚÍU/hF¦m·»ÿŒŽú›bï>ÖïöÙ!öòØÁHH‘STV=§©­ghlficïäêáís11ê~^AQIyUM}cs[ÇÍ[=}ƒC#P÷OÝÇâ扤¥å•í€ý-@By‰L$,àçpPôŸ@ÑFD¿ ˆ~ý²b(úWÒR’âc/D„ùûxº9;ØZ™›éëœ×P;«$/+-)&*|ú?€þan.6ú{X>Aý[ã htËÎÅÃËÇ/ $*!#§¤ª¡m`B#Z Úµ¢²jà±7{€ÇŽ¡‹'–V^€õJñX:¤­1¦Á+xóúå*Y2EdPE¶¾º¼èZvFJBldˆ¿—‚4-€4Y)qÁSÇáæ`;¨¿‡Îc?(õéCb¨FtñêS3ÒÔ10µ´svÍ…6cIEíú=„_$ˆV_ÁùÝ×GÄ”úhB¯„ÀÂÂ941zo ÷VG u]s(È×ÃÅ£.RŒRb"H1ˆàڽ뛴‡þhoKØÿŽŠ}ž#û'E0âR2r +-Ê*êšZºƦÖvŽ.î^¾Áa‘Ñqˆîgåæ—UT×54µBÝ¿ÝçªûOžN?›ÅÍã $òòÊóL°ÿïõØÿ½Áý›Ão +-ý•å%€þüv@ý¡Á¾ž[7;ÚšëkªÊKŠ +- è§&'^Œ‰ +- ôóöpu²·±431ÔÓ>Nõ¬¢Üi 1!*ô9?Aÿ]Qc)Dûv B46NÕÒ32·vpñô ŽONËÌ+,­¬kl¥GÚü"‘ 4æ"Ëp Œ& àÅ +-dŽÆ´.À´šŠâ‚œ+—“â¢B|Üì,M t4T•ä¤%D…P‘e‚4äË~hêÓ "}3 +-cÀRFöµ½‹§oˆè5¢¶ÎîÅøšRŒæ=õ7®!@}¥'LJÑ^l½˜Ÿq91$äíîdkij £©¦,/#àçãåáb§Í¡¯¿\+ÆmLý-cÿÁCìœ\Tì ‹ŠKJËÊ+©¨ihé虚[Ù:8»yúø…F ºŸš‘ u¿´¼ª–¢û½}w©ºÿóYì~@$/ìÿ¸öÿû§Àþ{¡ÿ@ÿùÊ2™D\\˜Çag¦ŸRDÿÞþÛÝ]í­M uˆèççfAÑOˆ‹Ž ðõrwq´³¶036ÐÕÖTWQV“‘Lj œ<ÁwBŸíàïY ²|‚>“·Ácw~O~÷ˆ46®ÃGŸ< ‘&¯¬¦©khjeçìAÙ+9Å5 -]½wGÆ<~ú ;·@ /?×üúç·Ì™¶vkPûj¯^ê/‘xÜìôÔ£ûcCwúº;[ë*K s3ӀɆ#&kef¨‹0M#Le þ^–]ß~‘eÒŒ_S÷7‘ˆ¥Ím\½üC"bRÒ³Ð9Ô~³§cB›õ"#õék‘Ð"- AP[c]Uéõ¼¬ôäø˜ˆ`?/WsÊ’„½~¤×bœCÛñò߇}È}€ý}ö9¸xóþŸýúpŠúL8~Î]Ì%¹XéUš´…eé½÷ÎÒ¤ "¨XE)RDTQzï½÷&½(v:v=u.‰qîÎÜû¾[ø-»ÄÌ 3NÐߟð컟çû‹ŠKHáää”U5´tõLÍ­l‰Ž.nžÞ¾þ‡Ž Ü‰K<s?#+· ¨´ä~SK{gwÊ}Èþ½3sóˆýga¨ÿи´07; BÿÖMúý=]­Í0ôK +-ór`è_L&…þ‰£Aöûùìqßíä`gmafl §­©¦¢HÀã¤ú‚üô™—Ñÿfuô?Ç·¿iß}C–™„,¿°˜¤Œœ‚²º¶¾±¹5ÑÙÝË/0(8,2&!™lZ]S;}ɾ&—,µ+bÿ¿XÕàK€ï¤ìÚ”­«*+ÌÍH¨ÅPQ³³23ÔÕTU’—•Ú%ºS€—›¶dW˜¶&3¢Ž²P$`Ï!9Âò„¼ý‡œŒŒM<ù*u/^Ã\C¯H×ú«¯}ÚùÀcÎC3Ôc¨C%ùÙ×R/œk1¬E´Má€åqh@|Üœì¬ÛW\Ck8¡?ç·ã>ûäÜì³°íàýÃGf_FV^AIU]SGßÐÄÜÒÆÞÁÙÕÃkï¾”û§"£ÏÀÜ¿œr?æ~M]cs[GW/ÈýÑñÉ›·îögç—=¦cÿ×õÅ> úÿ¡Cÿ5@ÿå‹çOŸRö5eû‡F'§îÜŸ™[|øäÙ ð–ß¼ý˜úÖàkøíÿW/Ÿ?}¼´0 [v|x ·³µ±–Ò²gNŸ +-=r`Ÿ‡‹PÍ@‡¬š°?; 3ÓVlÊ®jŒö"º†ÈkQ +-'¯¨ª©khjeçˆÖâ±áÑñç.^ÉÈ-„ÇP8†FÁ1túãó¡UŸ´éÆ3}ïöÍñ‘¾®¶¦ºÊÒÂœŒ+ÏÅGSo!{+3#=-5e‚,i+òp’ç³éKêc¿ì“~`xð‚ßø[ +-ûÛ¶³°ö¹xøøûÒ89‚¢²š†–®¾‘©¹•­½£‹›'Ìýƒ‡…¢ÜOH‚¹Ÿr¿¨¤¼ª¦¾±¥­³»ïúàðØÄ©Û«°ÿËúbú”wL‡þÒâü,ý‘¡þž®öÖ憺ꊲ₼lú—. Ð8y<†¾ŸÏ÷ÝND;k 3c=mMu%^VFr—˜ÈN!>nN€> @+ +-ý/è3ú6Р¶q9e·‘SVPXLBFNAY][ßØÜšèìîå“œ’–™[DQm¨vozŽÒ²oVmÙßèbŸAÌBÖ&FkU$Ö’â£Ã=´¯§«£¥©¡®¦ª"'ZV€Ò²›)-»–ª1\‹LP}Nn>t À1¤gdfmïìFšO$˜Ï¥«™yEåÕõh+Ž¡­8¿ø©¿ú-„AÕS-űap +-µ6ÔP—bXŠý}|4˜OÍ÷ÿùѾbR꿃ù':ô§ïôoLŒ ^ïëîloiª¯­*/-ÊÏÉJ‡¡Ÿ”€B?ôØáƒ0ô=Ý\ím­ÌM tµ5Ô” xœ4B_Ÿ‡‹“}+@Ÿi+Bÿ»/è3ü¥ì?¾ß¼… ¨ÏNVMJV^I ´¬™•jÙ£Çãã’.¦¦ç”TÖ6¶vö ߸u÷ÁìüÒ#¨þ¯ß®ÆÝ‹ wmq~æþ©ÉÑ¡þîöæúê²¢¼Ì´”䄘ˆ°à _/jÌ*ÉËbYÛ +-YCêo\{õI&Àc;>ìV´°!ºxxƒ[(ÜBgÁ-”_RQƒÏÂi)Âñ0^Štê“wâ¿à_NìD8 ÊtÊÁt®^JNŒ 9èçíîB´±0Ö×V'B"Büp)²`—"íx>߷ψý¿QØÿÃþv2û|döeñ%5Mm=cS k[¢È}o_”ûaá§aîŸOIMKÏÊ-(*­¨ªmhjmïêéìß¼ÙŸcÀþ»wë&öW¤>BÿW*ú¯y·ŒþÝÛSýáÁë½ÝmÍu5•e%…yÙ™×®ÀÐB¡t`? }Wg;K3C}-uU%y9œ´„¸¨° ?/BýoÁ{ÿ‚>ý·N5RËn…-ËÁÍ+ $".‰Ã+ªhè˜XØ:¸xøYK¬eå—×4 ˜]³o?¦þ¬úï~ϼ†—ÏŸÒÔl ¨Ùâü¬k—Ï'Æž> \Û‡\3‡®)ä¤%Ä„ùx8ÙÙX˜™¶l¦Æìš©Ïp+‚[ˆ ÝB¼üp<2x4K[ÇÝž{ý‚¥E^Š¥•t§Ð Ì)ôþý*©ÿú!ý[àp~„Ãyüpa^Bã#˜K(å\|tĉc‡|÷,ïD‚,ýtÖüú“«±ÿ5•}°àû,l;88¹yøwŠˆí’”ÆÉ•Õ4´tõLÌ­lì]=¼Pî 9rÿl2ÌýÌœüÂ’òÊšú¦–öΞ¾¡Èþ,û¯ û@ýŸHð~]Ä>í#þ7ýŸWC|tx°¿·«£µ¹¡¶º¢´¸ 7+ãjjÊyú§ÃÃPèûûzƒÐw"ÚZ[˜èikª«(ð²2R}>^n€>+ ó +-ô72FÿS?½OúÑ°¶q™µm0f¹xøaÌJËPÌš[Û;»yù‡EÄ$$§¤eæ•UÕ5·ÓºöœÞ5LÍÒ½ JÎ2€­·«­±¶²´ '=õBR\Ô©Ðÿ±_Þ_Qfw?»&Ñ]][¢0à CQY¤×¡÷Þ{PP"é½÷Þ¤HEĶºTTDݵM4É1žÜ{ßaú˜=gùEÂýž÷û~žÏsôÐ~/Wsc}mušÍ‚Ž‡\6KçúÆüûr¢>c)Â)$%§¨J›B¾‡ˆŠKJË.(étõŽ\Ÿ¼ +-;q–Ú‰oÞq[BlªÏ<„^Ì3VâpOGKCuyQ^f* '…ãhcab £¡ª('…–‰a Q;‘šÎ +-õÿ7ö‘îCìóàð¢‰,,Št_JFNAIUMC[×ÀÈÔÂÊÖÞÉÕê~àá`¤ûq‰)P÷ KÊ«jê›ZÛ;{z†GFÇ&®LqÀ>Uö±õ· dŸ]õ!ô?P¡ÿ†ú3Ó“—.ž?7Øw¶«£­¹¡®º¢´¸ 7+=‰þ‰Ð£Pô÷y{º9;ÚY[šêéhªS”åe¥$%Äwlà'ðáxy¶0@ÿ; úÆ4ƒþŠèÃÇQf†©OàD\“–S¢`\stóÚwÚì)šÍžéé¾péòôµ›·ï>§ ©ÿú-¼c´Y¹Ê>ÙÞ¿{ȶ0ÿäñ콟º~urüâÈ`og[Sm%]gøîqs²µdøÖKm³JN¡Í€ú0aQЉÒòJM]C3+{go¿À#!áÑñ)9…eUÔ%4615¹ÿpîé< +-ç[8ìªÏ5›û?ÿtcfrfÓÕÞ\WUZ˜“ž†Bæp©(È`•H"òá€ÿÐ+‘y ýŸŸ?ö¿eÃ>Òý›ÀçÞÊËç#ò“ÈB"û»¥eåU(êZ:ú†&f–6vŽ.@÷÷ù ÝŒ>u?+· ¸¬²º®±¥½³»w`häÂØ8 ûÁ¿2ÿüÅË_~}ó–ŠýH“þýÕË>‹Ö!¯ûÈýW/èпŽ ?z~x°¯§«£µ©¾¶ª¼¤(?'3-%1‰~ðá@(ú®Nö¶V¦FºÚjªJ +-r2R’»vBè“IDÇ»@d>ú«WÓEúô·xó«0®­^äf³DYdûN )YEum}cskϽþƒC#bR2r‹Êª©`»819uö!UgßrÕYÚQ|æì³ð"²MMŒêëno®GdKd +-ôóvw¶³25ÔÕ¤(ÉKKBê b:»ê,°ýáxèé¬YÃЉØ’Ø-£—Ž',2&!53¯¨¼¦¡…¥±!ô–:„þÉ6„>fùa$1í Ylž8ÛÙÖX[AoÄß=îNv–´lvíØ&,(@ÀÃ!´qÃë–º—Åû"ö¿§aÿo[xxq|~A!Ñí;Ä%$î+*«ªkjë›ZXÛ:8»zìñAºr<" +-ê~ZfN~QiÀ~sÛ™î³ýCçö¯2`áÅ+FìSeŸõùº³¹,ªþ?þåå-°ýgOèп216:2<ÐÛÓÙÞÒT_SYV\˜—q:9áTt$ý(ú.Žv6–f&†ú:Z%yYéÝ?îÚ)¶MDˆLâ'òáq<úTÑ_þ—›]»ný†M `Û%)#Áfdfeçìîí—œž]PZY×ÔÖÙ;xntüÊÕë·îÜ›}üäÙs°ZáhŨÏF6fêÓÑö msܽ}óÚôåK†û{:ZªË‹r3Sb"‚úïõ\ôYeà³ìdƒßz©ÀÆq pþ +-Âa©D úJ:•_RQÛØÖyv€)›¨vïÞÿƘÍبϦú°a4 Q4S—Ç`4gZjÊ‹ò2Sc#ÃŽÚïãåêhcAÛA;·ÓwÐb#"ê£`åþ±Çûk˜±¿•‡'Hda€}¤ûr +-J*jZºúF&æ–6öŽ.î^P÷9u?!ùtFv^aIyUmCs[G ûÀöoCì?~‚aÿ5x–…ìsRý˜êèÿúê%è ôvŸioi¬«®(-.ÈÍJOMŠŠ8EßÏg‡«³ƒ­µ…©±ž¶¦ºª²"} q ú"B‚$~Ž—LZ*ôײAÿÛè3>:ØVÑÁ¶¨³~A!Q1ñ¥å”(:&–¶ˆl‡!ÙÙŠ+j[é>{‡æ³¯Ñ£ÉJ“}õYd» +-(´ïÀú{IÚ«T¡mm¬©(ÎÏ:{ò8@Û>„6c}muÙÝ;·‹ID>HýMÖÓ}vIÈƉú´!ÄOZÌFdcjiçä¾Ç7 èØ z#¶wõŽüþÄ•ú l=ÆfÐäÄÅ‘¡¾.8ƒÊ +-s2Râ£#BúïõX,DPˆ;¶‰ˆ|8ð7УYº´\ìÃe÷ú÷!öypx>"?‰,$²M a_V^Q™¢®©£ghlfamçàìtßïÀÁ ¤û±ñI©éY¹ÅûõM­±ÿìù¤×o–‘ìsS}}(/àŽŸÓ ƒúmÍ µU¥Eù9™i)‰q1'ÃÃŽ9EßËÝÅÑÞÆÊÜÄH_WKCMEIA‰>€¾0YP€HÀãxèÓ ÿ=8õèá}ÃD6Lö×ÑÈÆì³Ææ6.ž>þƒÃ"bR3r‹Êªë[:ºû†ÎMLÍܼ}÷w í.Œv‘m³4¶ övµ5ÕU–d§%ÇE8v8Àw›“­¥é¢ÐŠ‹1 -úK‚6.ÙlÙÀFD;HZ^™¢© v½³Ç^¿À#¡Ññ)¹…ôh.O]у–2šeô¾aäþªUXÅcº°OÓý­<¼x>¿€ Ð}q I) ûªjÚºF¦æV6öN@÷÷úîGº~2&.1% b¿¬²†û·ögÍ=’÷ß[l.Ùçªúúà‡wütîÑìý»œ _^R˜—q:9áTtä‰Ð£A@Ñwsv°³¶036ÔÓÑT§(+ÊË"è‹m"“ø‰|x‚þÆ ÐÿË +-ô¹?N>»ný†MHö‰d„6ye5-= mÞ~A!áÑ@hsжA¡Ÿ¼ +-„öÞ,ЗxÆ@^0êÿ‹õ?3RÿãH} ¯^Ì?{øàîí›3Scç‡úº;èFŒÖÏÛÃÙÞÊ ²M ²MLTXŸ€Ôß ¨¿nI…–š ( ;‹Fb·ŒŒ¢«§Ï~Pˆ‘± ©™yÅå5 ÔteúÚ­;÷¨ûGCODFŸJHIËÌÉ/bÅþôÌ[À‘ öçÁQüÂ&ûŸ¾ZÙgTºO,ªÿž1Ð:ý;·n\›žDÐï§B¿²¬¸ 7+=5)>6*âxHðáÀý¾{½Ü] è›èjk¨©þ—ýòpªòÌâð¬nœ‰-¢Rnår)Š¢R¥wiÒÛ¥÷"EŠô.¢¢ˆŠ¨@A• " UŠ "Šˆfw³Æ“ݘÉì&Ùó~ßýnã‚É莫Ãû'œ÷œç÷ü@ôU•×+€èËJK1èT +-Y Ï}Ìn>g‹þôgz\êÏǨ›N  Zi9y… *µô M,lX>!1 ©™¹…ÅeG+«ë8lÂØ6‰³mf£ýmšp”vê7PZÜênå¥öægoO‰ßâïåædgif¬¯­¡ª„Œ–Ég´¶½3õg +-D°> dmÏr÷ &³¯¸¬¢²¦®¡ËÞþ¡,±ô +-·:!-ˆú‚%hŠ]‚ž`%ˆ/K ³3’ã¢Ãƒý½\ì¬ÌŒ t4Ô”Ö¯]-Ë”¤QHb+Wˆ|±”­úï+?±Ç‹ýy|؇?_ˆa.°/&N"ShtSZv•<¡ûÚºúF˜îÛ;²\=¼ýA÷£bâ“R3û» ‹ûÇ*«x°ß"p÷Þƒ‡ž<}ö¶5@L~ä‘ýO€úÕÿ+¬à.°ÆPYŸ‚Ö=¸7Œ ›cú§«1èØ·g×ÎìÌô”ĸm‘á!Aþ>žî.N¶Ö›ÍMŒ ôt¸¢/'Ô’¤Q)$ q$ú"Ë0Ñç>Îüù¼ÌŸ[yöãcÛœmK–.Y!*N`ÛhÃÁh3²ÁhKÊW®¿p¹ùzkGwßÀ0èË“Éçܦ^ÿ0Ü„mN7$ˆnÏžŽõ‡ú{:ÛZ®656ÔÕTV”äf‚ÒF°•Ö|“Ž¦š27‚¨Ï…ü8×hßÏd>˜ Aä¡.–‡.¾A¡¨eá-èËSgÏ_‚Á´wõ@ ‚Ÿq0ÓUÿþ4|ý +-Ë7h.£÷†ú{;Ûn^ûª±áLÍÉŠÃ÷íÞ™•–äëéâhƒJ¶ºª"ŠC)¾8äÌõùßlØGY¿„Ð}1Ð} +-•.)%-#·z ®ûZ:z†Æ&æ›­mœ]ܽ|‚BÂ#·Å%¦fdåäö–"ìŸbcÿf[GWoÿàð½Ñ±Ç€}°$$S3Ëþæøz³¨þ\7’:}ØãaXänè—èççîØž–œ¶%ÐÏÛÃåh‰¾‘¾®6!úò«d¥™ :B&ès¡¿Ö|úo3-Ⱦ™&É”Yµf¢ªº¶¾±™¥­£«§_PXÀmGngÎ_¥mïìíGp{»ÒrVã×·9moW;ÐíÒù3§N;|p?¢["Ð-Ð×ÃÅÁÆÂÄPWk£òy9iB]!²léÜÞƒÒ +-ÉC°>p>Q¬aƒQQ×Ö32Å—œ‘·§ˆˆC(A‡ƒ‡¿£ýÊ;ŒúØÁüS  ÝéÁ;йºêÊ£¥Å…»rØièãβ·FsÑœ>—Å ?ŸV‚æn€û„bç>†ýÅöEûd*M’Á”Ý_»t_M]S[×Àh“™…•½ËÍÓÇ?pKX`?%=3'¯`/`ÿíßl»ÝÝ×?4|Îeb’Oößà²ÿïVögWýèº''ÆÞèë¾ÝÞzƒ ýr€~áîüܬŒÔ¤ø˜¨­¡Á¾^î®Îv˜èêéhiࢿfµœŒ´”$J!KôÙÌýy¼ÐÿÐKöô¸l›QÖÜ +--x ‚¡´z˜Ò²<|C"bS3s ö—UTÖÔklºÚÒv»çÎÐȃ±ÇÏ8tû—Pºñí†P¼=Ÿ„xx°¯»£õzóå õ§«Ž))Ú“·##9.*,ÈÏÓÕÑ9­–ºŠâ:y9):• t[NÐmÁ‚ÿõa0 ‰Áq¸^IUÅ!»mÝŸ²=gWáÒ£'ªkÏ]ä™Ë8šËß¿{ùê5{.?ÿ,†üÔ ÃßþEØXÊKŠöægg$ÇG‡û{¹9ÙY¡¤¡¦Dt ’ØÊÜô~æòI>!Øÿ3ö!ìÃßöÅÄId +-Î’–ÝWì«nÝ×7465·´¶sd¹zxû!ìGÇ&$§gfö÷s±ù««7ZÛ;{úJ—”bÊÈ!Ýß ¤‚t_ÏÀÈÄl³•­ƒ³‹»—o@pèÖ¨˜„ä´Ììö«OŸi¸ˆ°«£«çÎà]؋ǘ죃yÅ/ûÿáÙò?ðøV˜}٘С%†ÛÆÜelôÞðàÞ®Ž[-ך¯ôk èäåd¦§$ÆFG„m ôóöpe9ÚY[š›êƒèoTè+€èËJK1è4 +-™¢Ïþ"ô?›ƒþ[õèÆvÚuJªêÈi-m]=ý‚¢â’ÒwäíÙèȱ/O= á­«wÖøoßÏ€·ß„ôÀi|êïél»y­©±¡®¦²¢¬x_Anfj¶ˆowg{k$µšjÊ„Ô"¼q¥–ÀÛ»|·°¹pÒÎ :®¡Éfß ÐÈؤô¬»÷:Œ¥ùzk{W6< ¿ÃÃðÍOBÂOõù²pŠ7 ±©´\mj¡ µiY¸ÔVÖÔ546]miëìéy06>*ë‹—luá3n_åÙêÃn`Ôþô aµ­×›y­6-1624Ð×ÃÅÁ†Ÿo‚o꿳ì é@p÷Ë–õÑXP*ª¨kÃXð0 ŠKÎÈÎßSTR~¼ê4VnhbŸ +-:möeóO…Ÿúì¡üô†òýÔ?õ‘$=¼?<Ø×ÝÐ…úÚªå%Ѐ²Ù ÈÛÍÙÎ +-e¡†š‘…$±•+¸Yø~*Ð'ûø°?À>Î}„ýEûÀ}„}q 2…º/-#·šÐ}-=CcSsK;GŽýðȘø$ûEËÊŸ¬©­?ßØôõÙ/ï¯*¯, /ÍšùA±ÎŠ(pá‚t¤]àÒ«ôŽ4EPT+ˆA©Ò{浪¨H·ÅÞQ“q9š¸2É$ã“™}Î÷}÷~·©™°–ã„ó'¼gïg?C£ °/S²ÿ†ô$Žð®Ìgñh6÷Ž«ú?rTÿëg“0Åwn~uubl–»·«½¥±®ª¼¸€‚þ>€~@ÝšUþ>^î.Nö+¬-ÍLŒ8¢¯¤°TŽ)Ã’X²˜&úbXô¡?cú"ž¼q¥–Á”SPVÓÐÖ341·¶sr÷ö Þ¹3ú@Üñ“éÙù%•µmˆoC£—I¾=ÿ+âïEX-g:hZ‹•àŽÖ>}B\gkcMEq^VZRÂáý{wDl +- Zåëéê`kiÊÖ×Y®®¢(/+-%Ô_HYí”ð7¾cˆ+†–®ª@NnÊ:*•äôìH¥© Ý¡±Ëœ[ˆ„ŽÓ€Þò5 ô?x +-ú»;ZªË‹ò2S!”Ø=œPWX™éë.WWU’—•‘’@ hþ¼9| hšú"žìsuèþŽî‹Ót_E ë¾¾¡‘‰¹¥Í +-g7o߀À À~$û™9ÅåUu­]}gσì£}¹û€Ð$ÙûÙʾÀ Qýûwoݸvy|äÒù³}Ý­MuÕå%¹\èo èû­ôtsq´³µ²05fS¢¯¬(¿DŸ!)D ?‚þl }Ä|ôgNCÿ½o"¨/6wÞÌ7æ›:É7GW/ßÕ¤ÕNHJËÌ+.¯ihéì9s~päåÖÝ'Á]^¾u¡f˜o„ý7ú¿p€P‚ׯ^‚ÀlܹyýòØÐÅs}§Ûšj+K +-²AkãH­]íçå†g «%8üûSD}Z¢§B»…Æp ÝWú¯ ƒsh@eUõÍíÝýƒÃãW®C(&ŸáP¾ EPõy2ùÈäXÎäÊØ0dÒÕÞ\WUV˜s*åÄQ(@Û·l Y°ÒÃÅÁÆ”ÍÒÁNáú)ä ez„<~ìAÇ>1ö‰/AºÏĺ¯ºL°Ï2`›˜YZ¯°wr%±¿Â~‰äôÌÜ‚’Šêú¦¶ÎžþsHö¯€Ü{ˆ†.ûÿX™O ó~‚âò3¿ê?¸w¦xbV»¿§³­©¾º¢¤073=91!Ž€þf€~`€¯·§›³ƒ¥¹©‘¡¾}5šè‹sDIÍ,Žè ƒþ§«ÿÅ7ƒo¼V+-»TQeÙr}¶©¥­ƒ‹‡OÀÚ[£vï;€Ë%‡´ií䳯_¼Wk…áßa¯E„»{ëú•ñá‹àµˆp¥…9@¸ƒ1»"·„ú{»;ÛY›êik¨)+ÈÉ0$ỡ˧µÿý§ »…°òD’f¢P4uXl {J(„²'öP|bjfnQyuCKý>}þ ±Ø´ôNõE÷Ÿ; I£CÐ8—0ù8º„‘á‚ý¼Ýè™0’ˆúÉœÙSV€þßß :÷iØÇ[0aŸàþ"Ð}I)iY9y¤ûêšZ:zúlcS +[{'w/ûÛwîÝwðHBbJzV^aieMCsûé^á1ý[wïS²J€dÿ'!¢ô‰YþÑ„©µF3üŠPý‡÷Qa½<6<8p¦÷t{sCMeia^Vz +-‚~, ý }W'‡Ö–f&l–.‚¾*}&ý%„è/@ÐâOBŸ`þ4ô?üx÷g 8îùÀÖjj³ àœÝ½ýƒÃÂ#wň;žœ‘]PRYÛÔvº÷ì…!˜b þÃ'OaˆÿFVÒ\þÅC8¾ùàHn‚È ¾yJ€†c|dðü™žŽ–†êò¢ÜÌÔÄxðÚ¨­CÖøx¸ØÛX˜²´±×2¥)Âq©ÿ; '"”…(8…òŠªêä)ttõô]´~*@GŽ%¥eåWÔ4¶¢L.N\»qû=“i™ü"‚ú<‡Œä)²¤W'F.A$­ 5åÅyYiI Göïݱi}Ðj_/WÜôu—£þ—Û¦(“?ÀãÁþL +-û”îÏÝŸÃÕýÅ”î+(îk€î뙚[ÙÚ9b쯦°{0îXRJFv~QYUmckGwß¹ —FÆIÙ%xñ’ܺ(ñ®Ìgð\Žª«o¾}Í£úã#—.œíëêhm¬­*+ÊÏÎHI:wˆ„~†¾»«“½­µ…™1[_OGKS‰¾¼œ¬Œ´”$ˆþ"‚ùú³1ôóy¡?cúï}´V i-Ⱦ$CF¨¯¡¥g`lfµÂÑÍËwõºõ›·Ñ ×ÐÚ ^KŽðÚW„×þƒÇ\„R_”ØÞ¾qmb†£·³µ±¦‚@ÜáX„¸Ð U¾ž®¶–¦l}åˆú²ÒR˜úó§Îky©ÏW€dää•TÕµt Œ '7/¿Àu·íŒF—0¼„¨ÿÀ%Äýçɇú ú¼Ôÿž[¨Cõ§£¹¾º¬(÷ß!Ä‘°t4ÉH$Ä¿ê£ÅÀ[ÁÓ¦wAÔãÇ>¥ûûtÝì‹/– u_QYt_[—e`dbniÃÅ~Øæˆí»¢c=~2õTNAIyu=XRÏ™‹¤ì?x4‰do 9BWæ3xBF¹5ÃÕŸº8ÐßÓÙÖT_]^\s*õäñ£‡b£wE‘¦ïãåîâhgkenjl¨¯Gˆ¾’%ú‹¹¢ŒfGôIèÏœ†þG<.à¾àRŸK8YD8ðZ#ðZOŸUkC7nÚ{(>153·¨¬º¾¥£»`pdüêWăºàÂÊO}î ó1î-—qPA +-ž<ºçæõËcCÏõuµ5ÕV–d§Ÿ<w zç¶ÍÖ­öórÃbk «…ÄVVFŠ+¶⦈ú<™À%\H»„Úz†ÆæÖvÎî+ýׇmÙ¾+æàÑ)§r +-˪ê›ÛQ$às<‘ˆ8„‚Ô'ACh‘È•±a"‘ºÊÒ‚œŒäãGÆìŠ  ô÷vwÆõGO[CMYa)“!9Õ‡ðòDaŸ~!º/ÅaÊî«öµtXl3ö1ö£vGï?"9-3·°´²¶¡¥£«ï,%û÷¡ "ÙÇRóñÓÏ‚+ó©qþ‘O娺Š]› î«HõÏŸííjoi¨©(-ÌÍLK>xôpôm¬ÌMŒ YºÚËÕÕT•IÑ—Ñ™Y@}ú4ÑŸ9Íü>^¯Åˆ¡™¿à/_Š/‘”f.UTY¦©Í24±°±çE\rFNAiU]S;Ûá±+”Ø‚ºà.¶œù•ßlÿÎ5[ap‚îö溪ÒB`Ü Ì¸-ãœì¬Í ô´ãäd˜ú õ1ã~/âDöÁH\<|Ö† C¸<„åÕ°ØPG&ð!$êÏk¢þP.÷Nõ…¶ŸçOÓÚÏéÖÆÚŠ’ü,¸ƒGöï…;¸ßA'¸ƒÆp5T•h‰Ì¥™¦þG¾üÜÇا龘ûH÷ÒLÙ¥ +- ûË4´tôø°¾mÇî˜GS2²ó‹Ë`_Ú:{úIÙ¿}ïÁãIrcÞZÁçD}¦TîÍ·¯(s¡Tÿ\wgkc]UYQ^VzJb‘1»wl ßHƒ¾¥¹ Û€¥£¥©®¦¢/Ç”aH },yÓÐÿíï?ì—gL•i†3ÑÙ˘UÚi€€(½7AA:RzïUPÄ‚Š€ˆˆEEQQQìŠ Epv²™î¨Qgv]×1&’ìhvŸ÷ýÊù¾SI˜‰¼?ߟOîçz®[õ Äa±`±52³Dbëîퟜ‘³f]I鎪šú¦æc'Û;/]»Ù݃Cü÷3Ì…ì«¿°'‘õGP„€ä  ö?Fù@RpõâÙÓ'ZíÛ[]¹}sqAnvZbL¸(À‡0[sc]†Ù27…fÜ8„:„žÚ|-T¬Qýñò†DÆ%¥¯Ê/Ú°¥lgMýþæ£ÄDîôôበ‘[-ﲩÏ:ƒoð¤ÒE ¤nwåö- +-ó²Ó’b#B}½\–ÙY[˜âöÓj?äD&×áWŸöźO`t&É}À¾²*‡ÇWSŸ±ohlfamKc_—˜š™“W°~ciYeumCSóѧ;ÙGR€< m tÁ7?¿}Ç È‡? õ?2#Lˆ ÔUœal.ߪõRgG[kKsSCmueYéÆõy«2Sã¢ÂDBúö}3€¾îÂ}5KŠ> }¦è“Ðg12å£=1⦈ÅvƬÙs€ú*¾Ú|í…z†¦6öÎn˜q±À¸¼B`\åî:i³Ä…õµ s‘Aý²ÔöùÐCmA +-Ž6ﯫÙYË_•N@Γ‚œ®Ž–† þì™3ÆÇlåÔŸ9™KOÄÈÔOÄÛ¾ƒ·î¨ÚÓÐtøØ©3¨ýtß@µj?ïF§þGIê¿e”Ÿ‡°0÷ïÞº~ù<*?k«+PùÉÍJMˆ fžAˆ@<<Ïn?_Ô“}J÷¿fë¾’² +-‡ËöµuöMÅØ÷ŠÂ£ã’Ò²V¯)Ú°y[yUMÝ>Rö¯vÝ&eÿ ¹1( „H®Ìã|ŒOv„é† ?f¨þY(¬‡4îݽsÇÖMÅ…ù9YiIqÑá"¡? } 3C}€¾Ö|u5>£ª Ð'™±žNB_®èO¦|ôÇfÜ4Šq¤Ù +-4´tt LÌ­/]îâé +-ILÍÊ-(Þ´­¢º¶ñà‘Ö¶¹»½ßbÈ þäþ'M}1åÀ ˆ2”{p¿ûæõËgN;ÜT¿§jGiɺ59ÉqQ¡B?/7g{ SBmù€ÜœqƒœÄDXwËgµŸ•þÁaÑ ©™«×®‡ìªm9æ„y|÷ §® 1˜ÇÖh)ñQaAþÞî+—ØZšé/Z ©åTŸ]~&©?ö'¥ûSIÝŸÆÐýY˜ûsA÷UT¹<º†¦¶Î"=&ö}üƒB"b’Ó³s×®+Ù²–ý³°07»{OBC•Aù¢ô»òVÕÕŸ@õq†‘êß¹qPýCûë÷ìªØ¾¥dÝÚÜìôäø舡¿}[€¾1}ŸËQQVb‹þ×’¢Ï†þDGèwÿd˜ít5¦¾*W@BΊ„\PXt|Jæj¤¶å”Úv^ºvÔö»ïþãÉÀaÊ\X}•-ûl1`¸í#”Úm4Öî*ß +-n»:3%>šM9mMu>W(7gö,p€?£,Œõ%ÛP¢¡¹@×ÀØÜ +-Aâ ¦eÃÜ k½—Q~z‰ò34üæA”Êä>È¡þ²ûŒŒ¼Çžô¨ÓOuŸW/žk?qôÙ}ŠP÷‰‹ úJ]AzõñZLnÄØžö§ØÇR„u­ûŠJʪ_ýÅ€}w/Ÿ€àÐÈØÄÔÌœüÂâMP)Ùï$‚=‰Ü˜WDBØÔÿɾd„IqÁ"÷ã‹áÁþÇ(à¯v]¹pŽVý²Òë òVe¤$ÄD†øx¹S¦Ð_¤£­©¡.àqUU@ôçbæÏbˆþ4Rô§NŠþ'¿¯dAŽR[_}¾öB=CS {g7/?ahd\rúªü¢’-e;kêöƒ»´Cc½q§§(¬lÊÉ6æþKcîgsÔ{ï݆„œ=ÝÚrpßÞêŠí›‹ r³RcÂE>.Ë—.¶236»í–ÛŠ)÷™J„*?ªDù1„òc·ÌÉÕÓ70$"6 æQ¸šÇÉösp©yH^A©îæ>ë¾yMlÌSæ8Ú˜ãÈNKŒ‰úxº:-³³671ÐÕÑÒPãq”¡û|CuŸÏ¾‚_ÞûŠÅ}û’ºO`ž’² +-ûf€ý%N.Þ¾¢°¨¸¤´,°$ý +-Zö/\¹~ y${Ñß¾“‘ æùØžT„Iq!ê*9Èpß½;ÐWÏÓª_¾mó†¢59™©‰±QaÁ¾Þî.NKèëaè« xUe%EZôg`ÑDZ&¡/%ú“ÃcË>²éÙP_!Íjˆrå|E±à¶y”ÛliE!î¢Üöé •áQú*¹ 3gê ”ÜîFr[˜—žèËÂœ€§Š1™ ©ÿ˜“Q~˜óq3r`«KwTí©gvdrOž=ùÏWÿ–»ÒLè“Ó ©OzÒógOxÕç>Q}N?| A\}¢Ã‚ýWz¸8â#¨OAö8&©ÿéo̺°¯Øç2°o ØwtvõXé' ‰ˆIHÉXûBÉ~Kk[Çy ÈyöüGyb0Á<ÓE\`£‡a£q†{ïÞîB+Mª~%¨þºµ¹ÙéÉñÑá"¡Ÿ·‡«$ôù<ŽŠ²Ò<úlÑŸ„þo~2('v[®@CsÁ"c3«ÅK—»x¬ NHÍ\½vý¦­å»j@cí8ùú­»÷¿•Àœ¹¥C"‡s`8#P»A :Ïœ<ÖÜT_Sµ£´¤(?'#9.2Tèçåæì`ocab¨·P{>)·s(¹ýLÌɼ‚¬î£odfi»Äq…»·PXt| +-=ŽFG1Ž^Ç£`¥G?‚2¨/û>èÁÓhgLc šFThŸ·;LÃÖÒÔH¦¡ÎçªÕg†Dõ™¤þ'<9Øgè¾­ûó•ÄØ×741³´±[ê¸ÂÍË' 84, d¿d¿²rø´Á‹W»nãˆCÖÁw("8#Ä™` éÉ]h²®ö?¦2|ýò…³§OЪ_\˜Ÿîä¿ÒÓÕÙq©%@_Ÿ„> ¯ˆ ÿͤèëcQîOõfÎúcŽËW×Ô^¤od +-˜spv÷ö +-ŠGr[„䶦¾©BŒå¶Ö'CRþ…™a¶ì³Ô€ +- êƒ »m;~„°[ð°Ûø¨° o÷ç0õù̹وs8ãA}´ç’ã€#¨GPŸycR³r¡úl«Q}ú‡†_üô¯W¯ß ê¿‘ÜhõáŸÆÈ{“€ú/†‡ú?úûßþÚw7ŸÓÐ|öÕ%1›n>⨢8wܦñå>)îO¥uŸÀþt™Ø×Õ721·²µ_¶ÜÖ%P ûBÈ~9´Áý‡Žž€ˆ€@$7fø%f0Á@Ó“I},.¸®>¥3Œ<îÔñ#Aõw–•–€êg¥%ÅE…øz¹­XŽ on"}Zô&EÜžæØrËS¹Õ34±°±[æäêå+ ‰ŒMJÏÎ+Üî²»n +-1¨Ë;÷ú¤9'Ëné°@'.„„ ôÞ»ÝuÌ µ2R]±mSqAnVjBtxpÀJŽKl­ÌŒõ-Дa·ŸK}GWž@CKG×ÀØÜMÃÓ'P›”†§QÓ@+ÝŽ§ÑÓ7Ú ü(‡úÿg¿¼ƒª:Ó0>;£LDŲH‘Þ.\zé½÷ÞA@Ä‚,`× ‚Š +-P@¸ +- +-jŒëºFE‚ÁMŒ àdãÚ˜‰™5»³ï÷}çÜ{nfÔÉ=ž?ßyžß÷{Þ0Á}á·»:Úð1š8µÌc¤%ÆDû{¹9Ù[››êëj©«()È¡å3–ÏÔ X>âo Ý—–Æ؇¢Ìš- Ø—#Ø×ÖÕg±M-¬A’ܽý‚Âìg‚ì¯/Ü1¨mhlFžù2ò°·Úƒ/?yêÓ}š«”ÆA†¿9wæÔ‰ã•åKŠ‰ê/Eªèëåæì`kenbÄÒÓåBúS)èÓ¢?Iˆù’x¿õÇ'ûR˜sgλõŽˆILÃv»춬¢º–ÓÔ‚ì Ö;÷<ê5Ãüԧ܀?% ·=0i½=CéíN¬·Yi‰±!þÞ| “' ›ñ9MýÉT Þ#¢¦} ôªkQo ‹~“3²—¯f,Ÿfzùüx÷AOßÀÐð/¿>…c¼"ÇG}AOBÃ~žè 43fá'ŽAž@Æ1$Ô¯O$ö'q±t`:Ö}‚}bûšÚ‹ô Í,mì\=}hÙ_æ`IYyeMý)lô„Æ =!!Éÿ>ì‹dqx®¢>ww¶ß¸ +-niâÔA¡ìݽ­ˆRý¸¨°`ow—ÅvÖ¦l–¾®6ú²}™úÒÒÑŸ°Oç°Ý‚ìËÉ+)«iê豌ͬì»z‚¼D'¤,Éw)B‹µ¼ªÔåk2Xoè!Ð!½:¾”,ÂÄ úzîß%)AƒðTýñÊ#Ð,X½<;=).24ÀÇÝÙÁÆÂÔÈ@¤ÞŽtbÞ@²|ñòa±Í,m]<}ââá+ð1JÈ1ZÐ1ÚnvácŒõŠ ¾°'¡ÆÜjoE·@šôïЗÐ@G[KS¶Á"m Õ…Š ðð‘ÁÃu„~%½x÷OŒîKaî#ìcÝçb_ò¡®©Z`bneëèìîEd?=kÙªµŠ¶#3@{ðôYð$nHèÆ<­1÷'’ú/©¹:Øß sõŸÄâ Ïõ5Ue¥Å;·l* ªàëéêdocifl¨¿H[“ ý™HôQš§p¡?Iýñ~t®Q¦¹ÔŸ>ƒtlS:ŸÀÐ(®ÞîÚ !>~Ô… Ön¬=½¹AþdXŒì‹ŒÉ@ÿ#²±ß¶¿Ý‡ývÅÒŒ”ø¨°@_!ÒÉé@0õ¥&Œú¨Ü¼cÈ+ +-<áÑ ©™¨ÑÔð©ãàBÓ×Û?ˆ©ÿüÅ+õÿC}øONñú7âIO‘'qsvÏÙÓ'A“ÁîÙBvOìžoüšáݳPaýŽÿ’O ö'ÓØ—À¾’²ª†–®‹mjam¿ØÕË~b*2ƒ‚­»öì?t´º–ÓÔBynLŸèÆ|²ÔgJÔyˆ®sGÛõ+—.@†‘¹ >oÞ°nU.¨>:ÈRìhkenbd°HGS:­À„þ´©úˆùRÑŸOŒÞÎœ%;wþ……*êZºúF&6ÎîÞþ!±IiY¹y°Xw¢«;96é«0긓'tLš8µÕe%Å;6oX»2gIjBtxŸ§ëb;+3c–žŽ†š²¢<Ïoq4ÆO}¾'†P>  ¾¾¡‰¹µ½“›—pDl"Æ9÷Íß¿mýîÖ÷äµÏÔÃ<ï¼w‡nL ó«–e¦&Ä„ûy¹9Ù[›ƒ#é€")É“Ý3c"väE÷ûŸ1±?gî|9À¾ŠH’¾!ˆ­‘ýèøäôl’Å%e0ë›Ïó<é!¤äç'ÿ¢óúµHOú¸?þ¹JSŸ7WúÝ”Ä5qêªÞ¿w×Ö‚5+r2S‘ºø@¡ím,LÙ,=]- Ue%€þ|ô¥ièO–@b>ÔŸ +-QÆÔç’ΘÎ/8<ùíJì·%eUµ D]èÁÚ?€©ÿìÅË· >•“ßQNF 'Hp‡÷>¼ÿ-¸çx‚»qݪeYi0ƒý™¨SÔ!êê¦qQ‡cñžÔ§oÁ >¾tšù„DÆ%¥£Ý³i+w÷ >ßh§,n€XÜ‹—¯È)ÄQ_°1#Ä“†‡ú°'Qin¬¯©„Ù³›Ìž%)ñÑaA¾¢@1§tãÝ?±Ø—BØŸBaÿ ‚}yE$4)Ù÷ô 5À…)Ú¾{ßA’ä×Á Þj~`¤ýÕæžû?ýÐ}«½õêå‹ç›jª*ÊJ‹wlÙ˜Ÿ·<;#9>:<ØŸ¨¾z‘¶È‹Â°—9LèFA_$ó%Á~çG}!¿÷WyEe5 ˆ1È‹NqXT|Ê’¥+Ö¬/Ú†B\I« BPŸ‹ºçbP'*'Âv@åäÛËÏ9“ððƒMùy¹ÙéI±‘! #}]-uÈ-¸ÓDî{Þ‚ùrw*ˆœÛÔÒÖÑÅÃ'04*>9ƒ{Šr| +-ôÞ¸ÙI=€C£>€"¨ÏmŒà%®ò_¢`õòìôä¸ÈÐG[KS¶ÔEu!(Ò<Ù š=’â>Æ>Ñ}öe¡- ûʪ`XöA ü‘&áÂnÛµ-º“§Ï^¸tåz[G¢þ[yÒGý13̘«Ïñ\ìï}xïr¸Väp(ÕG°¹à½šu DêboU_GS]e¡"LV°—Y_PП‚ /%ú:"ŸäÇ:”eH2y¶,Ê1uÎ>¡‘qÉHpó±àþê؉“X]ZA]àÂ`EÔÿ7PeXä`å³î?|†û„a¸ÄÀpQN¶¬^±4#9.*4bÍ:L}™Ï§‹ þ;eBøÒPjü.Pħ`±©0(,úœƒgÏ—ÜÙséÊ5¨óm\ç1$ŽIý?èƼþ4¨ÏmL^=gOsêªéÕ“— «'6", Vàû—˜†/!¡þ|buŸ}p$Ù¹¸.*j”ìÛØ;¹yù…EáÂäåoÚ²sOé¡ŠêZÄä íf–äI¿üúTõ?ì e˜*3¦þ@ÿ#”ᮎ¶ëW.]8{údݱ£‡÷ƒ¹ཚçúºZªÊJH^æÈ2¡ODŸ‚¾Dô'àMpå”TÔA^ŒL`²:¹yû‡DÀbÍÊ]µnã–Å¥‡ŽV×qˆº|×!~° +-ª‹0ì˜zAypïÇÛ]7Û®ýão_·45ÔV•—•|¹½hýš•9KRâ£Ã‚@PLØ,L}E0Üñ³N€úxöàš=PhCcsk;Ôg°¸ÄÔÌe".q‹\âñàÏ"Þ¿ÿŠ¡þæ!žñ¢£í4¢¢¬¤xÇæ kWæd¦¢Âøy¹.¶³276IRSV’—CŠ$fõHêñž¿î `_šDdæ¬Ùs ."û&æà.X“b“Ò² &DÊ«j›Ï_¼|&a7P¿QrÔE +-#”“õ1¾Qn˜V8n™9µÕ‡J‹Á\òórÑ^ +- òórs²·±@ƒR¬‚ë\˜¬3 /ý üøPG³ôr®‰¤ãû„tŸ‰},û2_Ì’Cd_˾™¥­ƒ3Ä$8"&!5 +-³¾hûî}T¯?uQ¿µ½s´œ07á‡æúèŸ(êC—ŸÁ\zÜ×sÿîÝí7®^¾n¨ù?ûåÁTÕµ†á¹s¯b FÅNKDéMPT¥7 t{¯Ø» t‘ÞAàQ#F DŒ½ HŒ"Bô–8ãܹßZkï³ËÙ8&sÖOøæ}Ÿõ¼DáÀ\ Ì°W]œì¬,Ìgcu!ª¯¬‹É •cèËD¿ëϺ^,Ã…äe’:Nñls kûÅËÜ<|×mÞ±çÀQ:ÄD]è7´;NPHR>r“ÒøâÙ“‡÷êj*K‹o^¿š—žtöÄaЃµ”¥Ž¶ÈL õ '  ¸ÃùŠÛ9Ø ü¼Õ£¡­o4êŒ$ÎÕÃÇoÓv|ˆ`î!Ð÷‡ñºù­ÄïOœús¯îveY14&/;#9>*<8àäÿ=Û7ùù¸»º8ÛY-˜; ,I[¤¡ +-ƒðèéâ÷'{Ü'û½hì;p°-û“Ô5´±À$tX¼ÜÍ +-ƒrr2 8<*ž±ƒTØ„¿²7!‹úìs¨O2ü×e”aÜ匔øèˆ`0—`.ëW{®\¾ÄÑÖ…xš¾v¸1*Hõ‡ ƒê÷íÓ‡ }™èKëqd¿'†äÙËP$/cÕ&ª3°srquØaÅ `+n©pˆÿà«‹((‚«Ñ®ë$)@»4íœìpPŒô´ÁÔ '  +-\ê3´“â!Puô™ïµy8Üés!bR/ žÖ¶÷Ÿ§>kóüëÃû6´y~k‚ÆЛ“›•ž›~¿ý»¶’ßÏÉÖý~ü; @mAwQ_zO"ö{÷&’ô-#ûaꛚÍ[hmï¼ Û*Ì Ø„ã’Ò³r¡0EP˜;¿4¦¶º¢¤° ÿJNfjbLdè¹ÓÇíÛ¹eý/Ð$›EóÌL uµ%©ÂæÆß<2êKë c_NŽ'ûJ*ªã&|7ESÇì€hÒ +-wïµQaNP…Éì`a¸IénºKzܽʘ Êpc=¦>d¸2œ›™–K›Ë¶k}ÜW ½Šºll ‹T_R}Hñyý^’ ßÝø“?vQ¿Žña#©‹Ó9n¨DÇ}×ö{‡¨ÿ‰àN8*wi‰± îÐ*$~`jl £‰©¯Œƒ2¨ß¯KŽË£>é3¹ÃEe|p8üûÙ ßÏ‹ü~ pa\…c6Ï;Þæë²ðäi~&þüªèÏ/%!}~GÉçç šdo??ê ªôp]"õ ª"+‰T^»ØDz?ú‚í@]C[ßhú¬9ó-mé `=8“˜š™s9¿ ô ¨/i +-E…÷º÷ÔãQ_XàJP†is9ƒ«¼aתï—:ÚZ.˜;kºep"Õ Žª³ ú_àµï¸£qŠuôÁ]Ì-Ðbuóð]·yûžGOGDǧdüó‡úùVYÕí:ÀÝó†—4îHˆy¸%…'0 omyûæ·_Ñ,|xÏB$Y,AØ +-QYùýG›Eó瘚В«¬Èà®·w¦>ÿ÷4N‘Þ1—W,sA¦Íåô1d.XàÐ^?g¦‰¡žÖÔÉ(ÄÊ´êCT_NNúÝ…¿ÀãRãbŒåe8•bâ.€;¼X}üîÎ…GÅ%§ÜäÖuDrEÔÿßçywóúÕ¼ìô丨ð Ä»Ý0 ½W­Xêdk)ŠÊ„qcTÀPRä¿!AA9éŒä²Ï@QŸ>ÃH%Ö,¬ìœ]\=|ü6‘Ï/$":!åùüÊ«p—áóƒ.¿•8y¨ÏùûšÐß‹ý}è +-YéIqÂÈßǹ‚)Ì%dI¸/¢+Ȩ/Õ'„}FöÒA!£ÐÀØÔlÞBk‡ÅËÜ ËÇ? ,lÍ}ÆÒÜ®æ®ö\¹|±ƒõB¤¹ðè¬ A ü ëÔç^úû´tY‹Ç‹,žgƒÂ.Æ%¥gå]½~³¸´²UùÙ n•ùG`CŸº]˜6Ž&U•Óƒ'*"4‰ öàÑPG…!__W {í?öy²’¢0t8¬Â1j'OÕÖ3BÔ·´uZºÂÝ{íFD}ˆJxT\rz6ŽJY%¡>$,Ùa_ø}Ü—@ýqP¹¦¢”Ù«açq‘·nÀ{ÕÑfÑü93M õ´¦õǨ(aÕ§Ô…Nñ?dÐÿOÐrñd¥Ü…¤Üe¸ËFâ.ÜSÀkd§XLs9YáO@® Eˆ½vž(3SC]­)ßM»ÑÜÞÖ\¡Å7hðÐá#UƨM˜ó8ØÉ~_Q_F*©`êké±Á{­dA`SŸ6K°/ þÝG}Rdbž¾ä_ÎÉLMŒ};}ì £o6Dßt5q‘UE!î'¦ú2èK÷q¨ÏžxìSš{æ|ØÅؤ´¬Ü+ùE¥5w~yðøY}cÓ«7Í-­mbì.âO,≲"®\Ï­,ÃÄËNOŽ‹ +-Ïõç)–!ƒÁ.¤ ¡ÓÔ—tReúë³²svqõðñÛDOHDtBÊ%2xÊ«jïÞô´¾áå«×Í-@ýŸ¥>ÜFt {‡hR(_“PaèŸn€~>Ö zºÈº"ÝÇ`Ÿ#ûýqT† ¾Ð³ÐØÔlþ"Ç%Ì,$}I‡¾\¿YTʱ$ÒJ“hêwüb©ênê‹Büôñƒ»µÕå%…7®]ι”šs!$ðÔ±ƒ{wl^çëé¶l±½µ…ùìÓ t4Õ'Këâž2è¹'¤¹ýåÿÏ~yGeqfaüd÷ìnÖ`,M”"ŠX. *"6PÞ¤I$¢%–X±€ +-**)R£ˆj4š¥£‰Š%qÏf7q÷ì}ßyg¾™ùæCDÁÏwÿœÿÞ;Ïó»Ï3b¤ì¨OÇ((akëÍ›YØ8,óðYñù_~õõîý‡ŽžŒKJËÌ-¸P\z­ª¦ï>"£b>ñ$Rÿ¢>¨¥»³­åÞ[Mõ5•åW.ågg¤$ÆDE†ïÛµmÓºÕ+ý¼Üœí¬–,š7g¦¾.'çŠïOoH}p#úc ð¨Lšª®5Ý`–ñ|SskûeîÞþAkÖoÞŽvp"6)53‡ÚAmC3\¾tùø;x)‘úÜ`Ãt¶£ð ƒbb’7Ä$k ŽaäE}gH¿ûŽt^=âaŸÂ~qñð X…ü²çP?N”’ꨔÔÑuÿ§GÙÔ§°Os¿_äÿCPŸq%ˆ¸(?'#•åã ìcsÓyƳ tµˆ•Ù"æV)ôßþpÂ>]Y‡ Ç*–WâÏÊÞ™sx(ç6!ê·uv?xø¸GbÎåQ_ è +-"/òÉþÞîÎöV8#Lµ¨"µÐÅ'–× +-wØÊ2ˆú¢hhOg9™º|ÈÉ'ãN§ÍåôQß!ñ¬àÔgêN'Ô;7›ê«Ù‡/BÌ0s؆Œ„È°R’”ú0| X~üBkÅZ”’@+G%h'Ê/¿bês±/qÞ=÷‰ˆYÔg|ÜM|ÌJo â°Ð[7¢ôæéædg)”Þˆ?ú;Ž.áFýwýëß« ʹPYG9w‚ê”iZº3çÌ[´ÄÒÎÉÍÓoåêu·î ‹ˆŠNHIÏÎ+ºt¥¼¢º® UÖ¶ŽnTYŸ>ûùŠú<äq¨OÔòo^3lýáûïn4ÔV}{õò7¹gÓ’âN=|`Ï×_}É]³ƳIÐUFAWNöÍ×Ûå#ùMGÏÐhîÂÅKm]–û¬Z»aËŽ½?Ÿ|&ëÜù‹%e(¿¡€“{]úì”ÔFQ¿¨ûfS]uEYÉż¬ôä„èãG"Äúyº:ÙJ2ŒÀᓺåm‹ú|­È±RÒ ”’, zx#êS½ðd\P¿Q¿ŠPŸôBHIH,tØÇØï ø9ì|î‹û˜)¬]€ú(ºTõ ó²ÓSˆÃˆˆ}=]m-/412Ô×ÑT›Ë]m–š-˜;ÛPO[ä2^IAÔ ©ŒðÆÔgV ; +-­QV0­ÀÒÖÉÕÓ/08„:|Ç£’áð¡TT×sßsšú¼º#@}ÖÝ{w¯ß½ÆZÎ ðÅÀ†ÑÓÁà €adêã”$µËÛnØgõB’’TTõ õÍúî@ý5ë õc“Ò2s .\¾z­ª¶O}öõEØïm„È?ØÜç©ÙQ¿çñCª°r£K<Š.”ˆÅE¬$ b6õßõ߆ÈøÏlä 6‚tµõ¨Êjãàâá@*ë!ve7ƒŒ[ÚéÊJTŒ˜÷’Å<†úÿ£ÕòMýç½%]‰!A€yý¦>ZØáS‡êŽ&©;VvÎn^¨îlÚ¶k_xdTLbJFv>ª;•5õÍ·îÜkiëì&FÞ›úðYÓv:Û[€úÍÐv®•_(ÈÍÄmçÐþÝܶ3µ©“¸woH?ïžtú8\ê±õ‰X”‘X´t fÍ™gjneïìîíDSÿ¡~qé5Æ.È.¸bµ0Øï øYì7Ü—D}¶¯#Ÿ?—u&™]|<\l(ë!«ðDÌŠ.Òì2 à º¢Ê:Š©¬ÚTe%á…È8<dœš™ƒeL3¯]€y¿÷…úÜjx ªa%Tâü쌔ʨˆ°}»¶mZ·z¥Ÿ§›“å’EóæÌÔ×Õœ6E•U …’nßW ÁÈòØÈL|㙽ªš†æ[Œ‘ÙwÛv¸Ôç. G´€æúšÊòÒâ¢üœŒÔĘ‘á°€Íë×ù{¹;Û[™›Î7že0]K £¬(?0røÇCeð¤ÔȦ¾PD0‡ˆàîEIJ/\L,´] µÐا¸ßûðÉ/ÀýA¤þoÂÔo¬Ö8Dý=Ttñ¡¢ ˆ¢ ±’ü˜Oå(ê#‹¢‹TÅ2••Ç<^Ä’nhXDTL“t«ë›nÞ¾ûHº~Ceí õ…£.‚^C Žºù9™©‰±z»·ó¡§«¥Ž¨¯HQ Ç«†}V‹€‘e`#?‘cß½ÙÆÐv¬–yx¯ mç0i;TÛi¼ñ­µGõÑúL}~Ù©¯®@g//;=%!Î*;Âg¯×Hýò–G$b¨@¨¯/²‹] OÄ& +-PÙÔ) ‡}‚}†üÿ1ôKâþàSÿ—ŸŸawu´‚ŠoÐÔÏ=›vVB}o÷eöÖÑE$bnt‘ªømPxáËXGßÐÈdábK['WOßÀà[wì=xäxt|rzV^áÅ’²Šëuˆú­]˜úÏhêó Ç¨…] ‘^êwµ·þðýw7j«®]½|¡ 73- ëe7Ñ‹èÅ”•DQ·¿Ð¿{¢¶£ 4^e’š†¶ÞŒÙs˜-µqtYî°jí†-°€ÃÇNÅŸ>söÜùoJʾ}åÄ¡OÞ/É/e% ÏeIŽ?uüÈÁ½;¶lXè»ÜÕÑvéâ…&F†ú:šj“'â²3JV ìH©? CÄBÔÂØÔ‚í2ÛSßÒÎ ¨¿’Ký|6õÛDÔ§Ã>`Ÿïÿî +-õ_ +-S¹¸±S»8»˜ÊnÞì솢‹²4º òèñà ‚ÞX€ÞÄÉj:z†\èá¨{ìT=á¨ûO¡¨+@ý^Sê†ñT7ê­ +-ðñpq°±0[0wö =m ºŽuC^JxÐ>þÛ‡CõGÐÔ' @go©­#}öv†¢³—Àœ½ê:ªìtô^v¨/xõk«X) ¿®ÿý@ýñJ +-Ìû?ò!2ŒÔ/9<µ`» ¥í2Ô‚©odB¨ï'¢~LbjEýÊšzD}¢–ÇOžbê³°ÿêa‘¿î4ôÅ+vñ}B}”ÝJ‹QvKMŠ=NSßËÍÙÎJ¨°J£Ë`ôXQW^IYeÒTuíé3fÏ7³°vXæá½âó/ÖoÞ¾{ÿ¡£'c“Ò2syõþ õiê½dQ‘‹¸^žcêww´õo6ÕU㬛—•žM²n'ëêé°©7QôÒê ù•YªìÓéÍ“òñÎаˆ¨˜„”Œì¼¢KWʉQzCï ¿ŸM}vHb¨ßÙÞrïέæ†Ê/9Ø/LJZáí]‡JI¤ë «''‹ºN¯žt^gz± E}5P Êlµ êGQÔ/*.-Q¿ Ûå) û€}Ä}Bþ_{ùyà<ìK þLýv6õóAʼnˆúûvmÛ´nõJ?/7';KŠú:õÅ +-«TÄ;\cêÉ ýxøÈOäF&¯¨¬¢:U]KרojneïìîåÄK/„zM"êõp¨÷{_¨ÿQÿñÃÝm{MõÕ•åW.åe§§$ÄDE„…îܺ1ãéæd ‚11‚ê#ÁŒ~#Á0ïç–ôþ±Šã&¨N™ïGÔ7·²Ãï_³~3õþX&½I¾zܮå¾Øódž_ƒŸŸŸ‘’Åø…•’ tµÔÁ/ÊŠò8%õ™”$5ÌŽ ]HH¢š!¡þbK[õQFHLá¸å.Mýž§ÏHØGØ'à‡ù—ÄaÈÏ€Ÿ‡ýÿ<ödüQŸj¬-@}’]Šòs2RAÅ õ)£è&V£LÌD7iaŒáȘPo(—zšº$ëÚ:¹‚ŽƒC6nÅY7:!%=;¯ðbIYEu]ÓÍÛwIgý?ûõTå™Å|fÇltU&šÝP„ØM ½ˆ5Vi‚4¥ (ŠÄ²–]ѵÄ"AŠ€RD£Q"Ho¢Hï‚4݉ggÏó¼ý½…¢—Ìdîùvï·sï9¿çúÃQ_\ØÍb†Ž nöć#WŸÝÿTêÕƒ[GU“xõLÌ­mEÜ:ùE¥eÕu Í´ú¨ýa«/æÔ ô#½ïw¸8l&÷…’øíKF‚5´úÊêZ”ú›±úä¶ õã õs ñ¶Ôaõ»~E·áÁ> ?QoEM?¿÷%Î>gŒß‘ê÷Ñê“KÌÊ.¼)ÖGêk©+#õd‘úS‘úÒƒuLŠœc~ÖeݬÔšZØØ;»ºï;tôÄ™ Þ¾!Qq‰) ~fNAqé«Êj˜c¬~o?ÁÞ;{œy!æ7ÞÀ°Ã䄘Ȱ ÿ«—Ïòô8°ÇmûV[ksƒu«–/ÑÑFØ~ûlõñ­ƒÖX^«¯¦¹héŠÕzL6ÙØ9¹ºï=xäøéó^¾ÁáQ± )÷¥gæäóÛÃm_}öº€ú½XýæƺêÊW¥Å9™éî§$ÆF…‡øz_8sâè¡}î®Îö6¦†úkVð÷å=i¨„Ž‹8õéŒ$D}:ºº{^÷’ì¿áèþFDÑô3ð³ÝöÅ©OF7òbMõCõí7[l4$ÔWã«/.cSÜô2æx"=ÇòŠ3=e5-Š=k;'»{W¯‡G’ì »o„…]!ê3Ç!¸×ŠÜõ‹ó ÷b#ïùz?}üÈÁ½»¶;ÙYo2Ù ·zùÒEšjß|5oö—Šò²ÿ˜3y”#Þ&ò×XMKÚ'½Ô£çGHÔ«ˆo(úiø ÷Ç”ý᨟‹ÔOMŠõýÈì‚ÔGÙO1RŸ5Å£Ýai¸„Þ¬v?›þwYù8ìªjê,Y¾j±¹•íÖmn{xxž:wÙÇ?(ìVÌä´‡O2²òŠž¿,¯ªmhbÔ§Ü{Ïržz`~ç¦Ý–ÆúšÊW/ í>ûåç)‰qQ‚iMŒ.51¼œ0R÷½O‘úÜSG›\c öû†ÞŒŽOJ…5~†Ö¸¼ª¦¶¸³©?8¤úð«ÐÍó×¥(/ ]:wïÄÜ‚KLJºt¶mµµ27¦/ôæ—³/Rõ%\âÔ—ç¨oˆÆÅ™§~Ò=<.($TêÃÀà°ßO™>ÈÖ¾_ (ü±ü‚îû‚êÓcÜÒTƸ¤0÷ÙÓÇR“â¢#BhõÝ]ìm6™RÙ…JnäOTÿþÇÿœ%dŽ'‚ú2 þr3”fÍ]°PUCgñ²•k×›YmqtÙ¹{ÿác'Ï +-­/‡ážHõûûõ›êkªÊ_ ‰õñÄ œ@_‡Ìu¨N^‡rH}™Ñ¦]žú¨ûI“§Ý+àîU4´q÷Ff–L÷—8ÝçëÍãªÏkž³.($Ý»ûæë?^¹töä±ÃûwïtqÜbif´~íÊe‹µ5T.˜;Ki†R_Fø¾Hæã—ˆm¡ÔŸ=Ÿ†"Ô¦Õ/~QVQ]‹ÔoïìêõûèdªÇÂ÷ÕKñ‰¤ÃϸωûcÀ>÷då«ÏßaHn^´úv6ÌÅÊÊ."¦øþÇÿ¤EÏñ8zŽ±{Ó>'Ü›¿P…N»–Ì _ð†´—”úàç_ˆøRYS߈nV8Yû†£>'î¾få„ç…yø.þ@ÂçÀÀ§®²pþœYJ +-ß´Ïd¦LžDŽÌÈÕÖ=çÍ[²l%\:fV¶ŽÔ¥s‰}édÃ¥ƒ·¸™Qÿ¿h©æ‡P€zòˆC§¤@ä“g¹Ñ?y¬æ?ç4?š'E_b%J}˜PÿËÙó¾Bê/]A¨oÏRŸ> Ѳ—¢y©o„éèÂa¿—æœöKÿšW$þ$üÈý·È}^Ü—<ûÂÔï§w˜=ƉqQXýó§9¸w¨o ꣋uçbå¨?Nª¾d‹Ÿv?÷¨£U8Zñ ¯Ö34µ°±wrußwèè‰3ç½|B£bSî?JÏÌÉǃ\s ê÷€úƒX}|ôÀ°&æ7vNhmj¨­®({^”—ñäaÚÝ;1·nùû@Üõô8°Çm›£­•™±¨¿DGC•wG Ÿ˜KG~ÚâoT5u–,_µÎÀÄÜÚvëö]{õ/_½›ŒšÏfšoÚüÿD¨ÿŽR¿«ßÜXW]ùª´¸ '3ýÑý”ÄبpNH²·±05D!IWKvìØØaúdeÂK¨OŒq0£þö­vÖæ&H}PV˜R_ ¸IÕ—\qÕǃ<‰9Z1|jšhõ6˜l²¶#à;~š„/&ânzFv~†o¨¸+D},ß È‡Õon¨õK‹ò³A¾´ä„˜È° kW/Ÿ;åéGÆ–;2z +-ÉnDóÓš7Ýdc‡ž<ÔÊðD1Þwuuuò +-¾BôðsÜ[ö‡¯~Bl$VŸcPñÊe‹ÙêO¢¾tŠ%XBÔŸ4y +-V_n†Ò¬¹ ªhh/^¶ríz#3Ë-.;wï?|ì$šäë8¿ÜûéñÓ¬ÜÂ’(¾4µ´uv‹–OŒúœ‘))È…óðAjb\TDH€Ÿ÷…3'ŽÚçîêlocaj¨êëj©)=oöLE"ïNUÞåª?aÂ'Ÿ"õeúr¤úêZºß~·Fßh£åfz‹ýÈìFöŽ^Ó:ÞP¿¥©©_R˜›õôñO÷’âoß ½þã•‹gO;¼÷N‡-–fFë׺hk¨Iã¡õaß9ÒyZ}?FýÌœ|‘*‘úÍ­m ~vœ,B|ì}T;§à L7upÜd,ÔÜò±úÉ ~X£> +-/fÆì1Vû6X6x"L±Tý1)r’DZ©Oȧ„äSQ×Æò¡Iv 'åÝ@1yw`8ê¿çÓ×ôÕô=úR“â£o†ú]¹øÃþý¯~¿ÃÙa³ÅF#ý5ß}««¥®üõü9 ¾¥þ(f†§>çÅSPš5g>çÅs$_¼³—àÅ»qîüâå²ïœ^æÎ![B}^R\tDH Ÿ·ÖµÕU uf]¤!i¬êã©ÿª²º¶¾±¹¥­½ƒPœ(:ácïÛÚÚZ9_ ú;©—‚qŒÙ¯~uE¨Ÿ ê§%'Ä€úþ>Œú[@}:¼cÌÞàæ6i®òî_QÞŠÔ—%󮚖.L²ž¡©…½“«û¾CGOœ>ï囘rÿQz&ºZË*«ë›±ú½0‰X¾wbÔ眇}½=x[›Pà}^˜‡ï]¼7D^ujf€¾ÑÞ‡"^<Ö£ª¡ƒÔ706³²uÜæ¶ç€‡'¨ïãv+æNrÚÃ'Ù°ÄeÕµ ÍŒúx‡RÿðŒT€3RJblTxH€¯uæ8á3G:sðƒ'ûž´FQAýôÌÿ³_gaQ\YÀ¿Œ“y· ‚ ¸EÇD‘UÜe”qCT\PDÅw£&š¨‰»F\ЀTQ@DDPp‹»"Ð4K7Mïݸ "J'#sî­ª®ª®jÔÖ&/}žê¥Î÷ó»ÿsŸV_o¬Aìc÷ŸPâㄽ7 ì2ˆþ‡øøëêž×CÄz‰â~ìÿ9êß¹qõâù³§S‘ú{È õŒÆ˜¡þßíê7W±ÕÇ“Ü +-&ÙÁÑÉ™œdo¿~ƒG‡N +-ŒŠ^²bõº[wîK8r<ít6EŸèS3è{ÅCŸib˜êÃÌÐê´*˜™Rq±if’É™1»û’÷¡»«ËçNLõ?…™iñêS­³—Ø¥ƒ{gPßÃ˯ïÀ€À‘cBÃÂgàÖ×nÀ­'OËÌ>¼ûèÁ“£¯æaíÓg–<õQç¯`[ÈÎ9))!.6fÛÆu«W,‰ŽŠ Ÿ<*0`P??o¯ÿùeçŽõÛØ×¥¹ÊZõ÷êŸË»Œ¦XTRV)W¨ÔZ=„}Ì>¸#þcJ|¾^¯×étZªà[§×#úkÐ[ñˆvŸŒû|ìÛ(ìóÞ¬XýR}±€³ÁTn›0.ˆ>Y9êjãf¨OÞ>_‚¾0³À›œšq67Ô/(†ü"S¨´z:ðbû`-…}FâÅö=­}Xú/÷aBq"ûf„‡…Ž0°¯Ÿ—¨ßÙ½VìkÉšwéÛºC;öƒg~ðàÌAžù™#”H+«”Œ3ÇÔ9¯úÌ+çµÙ•#/§Þ»\r[ˆÎ‰÷.,„èÜ×Ëãëî_6ݹ}]lQ þQ¤>¬~…\¡Tku#Šî¨zh"¯Õj45£4d?–¿þÚ'OÁýçà>‡ýFû6@ߢú8½Ðsœ‘š|øà~Zýé þh¤~ó“Õ>ÆÍW&úèInÕ¦-VßÕ­¨ßËÓ×Àa#‚ÆMœ1kÞ¢åßþðÓ8[>v2#+'ÿÊõÛE¢¤¾FoõŸÖÕ¿h൫>÷>TVUJ%ÂB¤þ…s™é)I‰ñTâ]0‡H¼ÿþ3ñ‚}V©Ï{æ´…3§=R¿ ½Ä£ÆŽŸ?û6 û<Lç6JýP?ÔGs¼÷ŽÍ?~¿jRò„±võÿôbÛgRÙêwéÖ£§§ÿÁC‡ãQžEŽ2²˜~ûø¯Eõ^Ôcõ: ¨_V",ºwëÚå¼sgÒOMŒß·kû¦õkV.]0wæ´ÉãÇbõûx÷õ»€úxhÚCó·÷³Î¡õ–&õÝ:¢Î{ûôátŽ—øØÉSY9yðÞ݃÷®ŒxwÕçi\O4."Ï9sêıC¨mY8—ÎHþ>žh[:¹¹º@ã õíÛbë²Rý],õ ŠEi…¬ªZañ ~ãª!ȇâ#ð««Š*F)†»ØGî×qØcÆ~3¨OÞ¬-N/b:½£ÕGslRß›Pß´ÀïÛìeu5e_Â>ï>ýM‰w™xcb㦤ggk¡P"õÕ:Vÿ9¥þMªßÈÆïÉãDäÅøÁÐäådaüöíâNTh Có^øñ½w­ñ{çB¿w…+g‚éÊÙŒ¯œd¸rrñ•S,*EWŽV_Wγºú—”údãoQŸ:rÈ玤þâ¹;`ö܆çδ-и½¬« þ;E°+å ¾R­Ñê #¸_ƒÄgâ#ðår™¬ÒT2™\ôð3Üoš}[„}Ö ÿÁV_¯5¿YYéeætrŽ™±ÍÉ®~sÛ><Ê­`”Ñ(»£Qöðöë7( pTpè¤ðȨè%+V¯Û¸-fo\BÒñ´ÓÙç/‚ú÷bi…¼Z­5`ü@ý†Wx¹ê›f†Bý—õu††:øv9ˆyƒ@ýtäuÆ‘·õûG^ Wì°‹«{§®Ý¿êåéë?`È°A!§FÌž¿øPËÏ{~ùõHrêé³¹¯Þ¸s¿X\ +-«¨Æ‘ú6fÛÆu«W,‰ž>)49~Þ°-?äȱ—ueú۹ꗖWÊJ²»Ä7èõ:­–$Äð+*ÊËËËÈ*/¯¨úA~€Ÿvß2û¶ ûï®>Ķ“8¶m§ÔGé…œãÞäîÔîLõ[ØÕ·}1íc² ¨øyxùö8rLHØÔ¿ïÖnغ“ƒ_¹Üy1~¯^s"/¯ú04¿3DÐÄûwn\½˜{ötjò‘_Ùóó–Ÿ@ýÅógGL4bØþ¾ž½¾êÞµ“»« šš¶m¬V¿c‡)õ‰Æ{1Š&‡çîõÜÝa>wµôsg~äð¨ÿ_Ö²´X}±÷}>ûtêñ# q{wnÝ°ö»oGGÍ 320``_?/¬¾{óm±g$—õê'‚ú™ þÕ·A}qiY¥¼ªÓ îEÅ|‚|$~Y™TZZZBVi©T +-öWü´ûdÜçaß–aÿíê—ˆŠúy þ B}ÓÍ:i¼yzáªÿûÛºšÀÏ,òŽ›8%bö¼EˉȻÿàáä“Y¹ùW®ß.(•–Ë*ÞˆÔ¯Ãê#ý t4š…}‹™÷I-~iLýæG͘Bèçë…ÔïÌQŸÌ +-ï¨>ÿsG9^~ýúÁ¡aŒ#'Žœ”´ÌlHn7ï +-$ÒÊ*¥Zgxð¨öi¨oê›W}îÊHbˆH7®æçžÍHM>ÌûÚõµôÚÙ3’ÍË*õ7ꧤgBNõï +-@ý +-Y•Ë îãB1Ÿ0‘/‘ˆÅ"²Äb‰¤ÉOÀO¸qŸÃþë׶ûÜ6 ²Q¯!Õ¿wëÚ弜3§NM¤ÕŸ9 ߬ ¾…ôòW»úÍQŸ0õ£ÕwplïìêÖ©K·==}üû:|ô¸ S¦Ï"ÌŽÝû:vâÔ™œ¼Ë×nÝ+•”~ >Ö¯þE¯~\õIþ@ýº§µtjeU¥T"(¼{ó·K²3ÓR’âbc¶m\·zÅ’è¨HȼÁ)órÕo;ìàèäLî°‡·ÚáQÁã'M‹œ³`éÊ5ë7úñh‡Ïœ»€ú.Jpß:ªï·«Ëhj»áE}{YPDÊÏÉÊ8yìðÁý»wlþñûUËÍ›1e¸ Cð÷ñìÕ£[×Nn®.í­»qìeeY£þz¶ú×±ú%Ò +-™œìà>”Å|Ú| ‰/ +-‚b²¡P$Fðî£ß!î î3ØÿýÕ+2ìÿÏvaŸ_ÌÕW*de”úçΤƒúñ±1&õÑúÜýå̱]}Û–™ú0Ë-[µnûRÿ ·ŽH}˜åþx–ÇOž6s.¡Ìr<º[ùõ³”y›P¿«oÔi@ý2‰°M͘š<5Ûè¬À¹Ú9X¡>»oR}ž¾‡“}/\Fö}àÐQúµš^»ÇOد]£Eõß°Ôg´]"dD¤CdDZµláÜ™Ó'O;zøÐÁýûøôîÙ£[—Žn_8·wtø¬mëV-¡m»úÍQV«ÏV_T"-¯”£°¯Rƒû >Šù¤ùùñ…‚⢢ÂÂûd (øÁý*EµJ­ÕéÍÙÿf-Þ…}>õéøÂdz‰Ô6‡•ÚþÏ~GEu_q?­Mõ¸à’¦UYÄhÍ1‚  +--6Øj*( €, ¸à¾Å¥j¢&Šu©ÑàDö}X`††f˜…MDv•UÔš¤÷÷{ofÞ”Iÿ˜ûÇûósϹ÷óû^¸YµêÿJ¥V?õ™wåjwïuë7ïØ{ð ”y¯\ÿ.*>9=+7Ÿ_,’–WÝ®½×ØÜ +-êwúO±~?ö«>=ôvv´ÝW™;·k׬Zaê[YÌ#øÓSð×[ý~ǦŸ×N—TßÌByãø+nœàЈ˜D“Åæ „â²Êêš:PÿA[GWwϹúô•ëK}ú‰ƒ;>7/+=%^±,ª´-ì¨mkÕ×@ BýU¤úŸÓÕg±¹ü"¡XZVI„}ì>Jùwkéæ#ò‹‹‚ÂB>Y……AQ1?¸yÿöÚ»÷êÕ°ÿüùð†}ºú/^66¿à/ûû?—­tq÷ò[¸}Ï#ǃÎ^¼r-<2%NA‘H‚ÕohnEü=ê!Ô¡Fý_~V™¬þEV¨«©®,—xl“‘|þô‰£‡ö¡Ðëó†Ð;þTÔGmÕ?ÔŸ¢«oꙘYZ/Z¼ÔÞÁÙÕÓ×Ó¶Ýû;yæ|ðÕ°ÈؤT&´-J°ú MŠ¶¿§µÝ—ú8!={ +-êwú­ ~ííªr©¨˜ŸŸ›•–~ýÊųAÔeÁi!D$¤¾ÞÔ? íÄÑÖkPꯥ©óQ“P¿TZVЮ©÷QùØü*d¾‚üB~ÇåróóóáËåð 1üØýŠJ÷ïÖÉÙïÀì#õŸ wØW·¿ô£ÅdB}d…ú^î.ŽZõÿJ¡Ÿr–H}]óf™˜/Àü9:»yú’ü]¸¬à§Ž?5¡W­úøB|Òó©ßÚÔ@¨/Äê§&ÅF†]õO;¼÷¶Mþ>ž®NöKmm¬-ÍLŒ@}C}]¤þD¤>ml†ª>­m¬þ2hÛ Ú†ÇŽh=vIj»>N5êÓ»nnÀêKDEœœÌ´¤¸Èðk—/œ :~äÀží¾^nÊe1†e™N.‹V}MÖ€ÕÿT®þNŠúqÉ©LV¨_R*‘•ƒÙÀ>¸_‹ÉÇæW’æËÉçæs8lv.6›ÃÉùüÈ}©¬¼Ý $û0û +-ûWâ VŸdP òÒÅ‹¬˜›ÈÕÇ뫃CÛ ÖW[oW}ñG½6¶z\=} ôîÚwèè‰ÓzC#b`x‚± ©_ßÔ‚øëîy,Wÿ%môê÷J½4ÿÊTýCêcÿ<ÝœíÑØX*ÇFmX¨úê»éH}Ssꉳ™râÀ +-§eåæó‹DR¬~cóý‡íÝ þ÷ýªßû¡½uÚ[GtÞ:_OWg‡þ»~º¡]–a­·T? ©Ÿ_ Ô¯Bìƒû5(æcó+ÊdRÂ|L>¼ÏÍÉa‘•““›ÇÆð#÷E¥)ŠûöÛ;PØ'Ù'Ãþëa ûý¨G+¨O;Z¯)ÕGñÅ™P_>Èú¤úã°ú¿×ª¯©RQ†yÌØqã'LúÃ'OÕŸêÏ™kfaec»Än…ÓÊáz)äÆ͘FFv·°¤TVqëÎÝúÆìUýWRÿñ£.›V”z¥¢"›Ì´ä8ÚØar"N+õå]ÓWxŠžZacÓùXýå+W»{¯[¿yÇÞƒ_|uêÜ7W®Ÿ’ŽÔ/.•–C×÷È®ê¿ì[}XÄW/)»‚ÔoiªGêËÄ%X}FbLDh\8'ŽÚ·këF¸pì–ØÚXÁ…3‡zá ºkm ½­þBýs +-õ³±ú"1»±Eš_^&•”Š„È|”òA|VvVVf&WffVv6+'àGî ÑOÊ•ìßÐÖÞÙ…&-ÞÊ°?¼êË'ÖW®~¯õ½|A©>=´ýy9È@ýÑZõ5Ytõñ0+Ô×›ö!e˜—¯Z½Ö{Ý4ÌØ¿ooþÁÝ +-þU À¿Þê÷'b4:Ïúꋃ{wl^ïçíî²r9V¾©ñÇÍœn ‡ÕŸ 3Žžz;4õ'½ÿÁdr…çÍWíú˯q×7£RÞôÖ½îSýW4õQÓ >4]!+-)äæeg0bnÞ¹ôßÿ|ýå¿?ß¹eãgÿZ»fÕ +-»%ŸØXY˜ÍEêOÓŸ*_mDÒX½#õ‹ °«ûPÕ¤ù2‰¸TXR$àã˜ÈÏdf¤§§‘•žžÁùY¹yØ}÷e +-ö›aÛ::»ú ûšU¿€“ƒÔDêËÖÊÑjfb¤Œ/Zõ5_}úÃ,O½ ‰ÔëâîíG¦Þ ³!õFÅ'§áÔ+’–WÝ®½×ØÜ +-þu¡ÌñŒHS_`# `10=%!úæo¿õ1€Öy¯]½jù§ÿøä¯ çÏÃêOÓ›:ùƒ÷'QÕÿÝ@ÔÿMﮩoºpˆ¶#WxëN• ‡Í+,Ë*ªkîÖCÖjëèRQÿ§7ª/ß²iôÔqó²ÒSà©#š†§Nµé¹ò¦Ñ²èh—Eƒ5Xõ7(Ô¿r=©Ÿ‘Ëá ‘×À>¸_}ëV•"è— +- ¸ùlˆù@~zZj*#%%WJ +-#5 ÁÝçòøâ7˜ý{ °v¶Ã>ê!Ô'WoXÂþ›Õ—ê'ÅE†QÔ÷'Õ·µ±¦­ +-õßÓ²¦J½úh˜§€ú3fÍ665_€Ô_æèâæå¸}Ï#ǃÎ^¸|-<2.)-3‡SP$’`õ`ü@4|}©ÿ‹À×tõ;Úpì­©®‰û½@‹ysç|4óCU:7½/œ1 +-õõ õÍ,¬ll—Ø­pZãáêïÚwèè‰ÓçƒCB#bL›'ŠË*«kêšM“ê¿ê_ýûHHò'*œ³AÇ üÀÐS§­·©w¤~p aدBäA_Šƒ~!Ÿ—ÏœŸ)ÄONJLL +11)9…ðgf±rÙùªì7µÀ¶÷öß©úýä—Öæªú©Hý«ÁJõ}<]ì—ØÚXYö:Zµêk¶ÈiAæ±:ã±úº† ¾‘‰¹¥õ¢ÅKíœ]=}6mÛ½ÿð±“g._ ‹Œ…ÕÅ%½Ä£G66¤€„úOzº»:Ú€úu5Õ•eb¡€Çf1‰1¡!—Ο>qôо][7~æã±Æi…š‹^s3f0±—®þÈQ£F#õ'"õuõ ‘ú&f–H}Ü´?Ù4¨5,5 Oº¦ 6ýs¿ê?…]A=«ì +-JHá(!úöl ðórsq\†Õ775š=k†¡.V¼ÎX…ú#´êw QýSX}ˆGŒŒ,PŸ_T"Keˆ}p¿²²}±Hˆƒ>‡ 9?#-‘Ÿƒ+66.>àg¤‚ûÙ9÷ È£¡²úNm]}csËý‡mÝ”°¯Tÿ' ¨ßÕÙ.Ÿä2‰M235)©Û+WßÔïc{µêk¶T$Õï  ƒ“«¨.ö–ˆeÀú¦`wÏcyì}©^}¥€/`nú„€M +-õ9,47ô¹¡¤ê8©?zÔÈ‘CUŸúÔéÓž:Gg7xêåOÝåka”§Œzà A?;“™æ'&ÄÅÆDGEEFF@EFFEEÇÄüÈ}&Äýÿ±_çAMŸiÀ§»;³;+jµîº*µ×z€ â}µ^€ +- +- +-¨°ŠUl‹m±-ÚŠÜ„@ á I¸ä”#„„C- °Ze»;£«Îìó¾¿$ürpHwvòüÁŸ™y‡ïóù}%û­mröûÿqÊþ ²ì?“³? ê“úË­›ò$Ãöfg¦0ðöjv¶¥„ú†„úÓ´©ÿ¶ÿßÿߣ +- J3ª½ï"õÿj4©¿Ä|ùªu·ì€48tìÄiâr ¦%²28y‚ⲪÚzISk{g7¨?áSS_õÊGï•·Ü{“Pï%ôt?ââ¤)ଙ¯.àhꎙ…%¨¿ÍÚÖÁÉÕÍÝÓËÛÇ×/0”B¥'§±syE¥•5B±¬©‡ÔW¾y,õUï›Õûv…¦ÜrCÒñK§æ5©_‡°FeO3B_B _‰Š~€——›ÅòSSXLf2&“•’š–žÉFîó…%¥åû²æÖöŽ®îÛ=}jeÿéSuõ_ûZ·W³³•ËÕ§‘Ô?t`¯=¨¿q-Rÿo-À꿇՟¢WrGSý?@š±ú†sMHi¶±wÜð(Jóù þæ¸Dfz—_ê‹$2¬~/¡þHjª¯r#Þë¿Ó‹Ôo‘Š…5•¥…¼\vZ2J ôóõñöòtwsur°µFê[Z˜aõ'Ö{•oÖØàÙ†ÆóAýÅfË,×løt›µƒóA7SgÏÁ›AýØfZV.©oniïDêúf²úðT>ùס'ƒÜ¸Û÷swg{kSc}mUY± “ÁbТÃ.~÷5Þ•ýxWPC2'’ÑúèÉzõ'e&¬>%–ŽÕç#õ«‘úˆ}<¨èKê…Jô¡èçpÀüÔfrƒ‘˜€'‘ÁHJøÓ3Øœn¾ °¸”ø©FYËõvrÙüŸœÃ9|ñÖÔÏËÎHÁIVª’¼ý³kWêÏõayõê¿!«¯žfc”fp%І$ Ÿš€ÊÞ;aõAý¤~g{‹L,õ‹ø¹YiÌ„XPßÿÂùsgOy¸¹:;ØYoûtÃP1¨?ßØP®þpp~‹‚3^õG|óRüæí6vŽÎèK‡Õ—é8\~1þÒ5‘¿t#Ý7ªê?WUž|·«/“ˆú|.'™vÅÔÿâó¿=¸ßÑÞïÊ2å®`õ§M5ÐÜý²¼©ÑU}.¿ðjyeu­°^ e_Ö„GýâB¢èg¦§²˜I >=žF£ÅÅÁŸx:ÈŸÄ÷3³²¹ù|ûbiSKÛNrÙ’—ýgÚ–o2Ô‡þ‚Ô€úÃý’ ê'yñ°ú3ÞUYÞßèÕŸŒÑÒ{ ¦MWé½Dïµuprus÷ôòöñõ#©fv.¯ðjEµP,Åê÷@å¸ÿàÑc\8pòFSÿŘf)ÄêÎŽv6ÛAý•ËÌppŒ5ƒ3žº ]}ù}£P_qß(78(<:.‘•ÁÉ õë õû´©ÿrLõIºnÍâÉnáCg³M÷'ëG·™˜úþdõKÊ°ú¸ìƒû2™TÚ(VAý´0?N‹‹¥RcðP©±q4zr?-#+;³_QU#¬—H›[Û;ºˆ²Ÿ(ûDI•ëåä¨W«\ýÚkåÄÕšHRÿ¨†úòÊ6œäßéÕŸ¬y‡L ªúsŒçú‹L-V¬^¿y«•íž}.GÜOžùêÛ~ºIOJÍÌÉÇê7H›¯wܼÕÓG¨ÿ +-‘<ͺ¡ÈÍKmê÷aõ›$õH}_¨?JpPñ}õ#ñMõ ¦N'Ô7škòÁÇ aƒWÁïع{ïCÇNœþò›ï¼êÓ)Ùy%å×ê@ýë7`ßúî¢'>Qt,Õ]ÓT_±*CÁ“ûÑyÓÑÖ" AýB^.;-™ŽÎ?_o/O8oœlçÍ¢ÑÎý®¼ÑÑE}Ø¡þµZ¡¨A ìK±ù„~­ý|n.úÉŒ„xZ,5&:ŠB‰„¡P¢¢c¨±´øF2+5ƒÙ/)­€kh”µ\'•}È¡²ìO’úÿRU¿©–7O}yájU¯lzõßÖ¨©ÿû?€úS§Ï@Î1š‡45_±jݦ-;víÞwàðñ“g0Á1ñŒ”Ìì|L`Cc3"P®þHj¨ÿ\¡þ?Ÿ ªÖõ#ñûo¾<}ŽÄ½ö;w õ—/]²ðãLú³f"õ 4Õ19ªOF*ú‰tZ,†'<""2*ܧ'&±RÓû|9Ô‰ÄÒ¦Ö6eÙðpð±R}"‰/^¿ú/5ÔW,¯–ʦ¸ZA}gGâjµDê¸`¸¿èÕŸì?gEñ½€‹/+ƒ“'(.¯ª…âÛz£«ŠïŠžâÌD}C«úÃ>%×…þ¾¤~scR¿ ?;3…|éG¬þñÃöîÞ¹c˦u«–›êêO—«?>Çõ¡[ O¶Ú…ΛãÊó&FËysG©>i×´Vý±^\/ÎÉLIÂ/ÆêŸ<~Øeßî]V[7úæ¦ðâ÷çÍ™ /ž/Ö«?‰£»úÅ¥U5uÂúÄ>˜OF¿HÀ#ÐGE?ŽM‰  ‚  ¤DSãâ’˜ˆ}n¾ èjyU°^B.û¿<„ iWÿõ°¯Mý!¬þ€ªú|PŸIRßÔw°³V¨¯Öú‹^ý7?*q6€8cõ çšâlcï¸ÿÐQ"ÎAaQq‰¬tWP\êKšZÛ;»îÅÑSS_5xc4ß[]×å͘Š ”7_…H}Â@0P¡þÎ8 TS-°Á´é3þ4sÖlPÿý?Ydj±bõúÍ[­l÷8¹q÷ôòöñEêSéÉ©ìV_,mië¸y[¡þÐøÕ×rÝ(¾spݤÀu£üÎí;÷ +-/Ö®£«ú¹„úÕµBQbÌ'Я®ªô ”èCÑGæùAW/ã ¼îGÅÄÒÌÔ `ÿܵZ‘úV;´yÙ»G$/ßó7«>˜cõþroàn/V_&úE|nV:3!vX}7W¥úf£^­zõ'a4ÕŽ³1Šób³e+×løt›£óÁ£§Îž;â›ÀLÏâò‹J+kDP9@ýÛ½w°ú` R}õàiWH¡þí›m-R1R¿—ÃNM¢S# õ½<ݸ8í±µÚºš¯…é¢Opóý n¾êÉ™úïýyöc¬¾™…%RßÚÖÁÉÕPß/089ËÃ/Ë°úc¼X]ýÿ(ÔW¬ +-¤®­M¸ ò8¬DZtxPÀÅï¾þâóÇíßk¿sûg×®Z¾tɘÌ5œÈu£]g¢ê‡R¨Ãê—ƒúu"(ûhêEuµ€~ÙÕâ~^¡ŸH‡¢ÌºrùR@€¿¿ŸŸ¿@À%€?$,‚-g?+'_XRVY]G”ý.´z >‘Ä_Õ¢øò©¯e¥ú5•¥Hý4PŸJVßV¯þÿÊ( $Ç™0ÔƒH}k;gW7u Á@¡ÒÀ~|f* |6–úòä õ!9ýwz±ú2±’SÈËe§%Ó©”Ð@?_o¤¾«$©o‰Ô%9¯ªþÙ¯§¨Ï4àsãd¼ ¢ˆåTDcA1‚T[r&—blˆ""Šˆ "¥÷Þ{ï• ,½/KG‰•¢1žç š›èœWž÷ýý¶±, âš™ìó¼3ÏÌó|Þï3iǬ.þ¹ìñÿÜ£i«ÿv"õ‰U¹ŽRUYq>5=9Ž HÆúz:ZjHýªJòŸo\¿©¿d‘¤Ä|q²a96°š‘ú®\êÓèU5õÍ f°ª£ßÜX_SUQF+ÊÏ¡¢¤æ{yz¸»»A¹»{xzùøú‡†GÅÄ'¥fdçÀ{å•58ì÷BØï¿?0ôOâó£,õß|Tõ‹ò²Óú¬Ý=‡wwÞ]¶ú¬ÄÆsµŠFY5uòUPÙ†’ïþCšÇOÅÉ×ÙÃ7(<&1-+·°´¢¦¡¥­«·©?Dœ™/È+ó]ÔÇ“ƒÔïGê³''˜Wâš«Ï÷ÏI°Ôç»n ŒY×M\r:5¿¸¼ª®©µ£-ÛƒARýÑ1NÀz+Pý †Uù‘kUx’4¬†VUÄê¯Z‰©/äzOõó°Ò,õ;ùím­ @¿¶º¢œV\KÍL'Ð +-ðóÝÝ\]œq¹¸º¹ƒû~A,ö©¹Å¥tvØ¿u÷ÞžDØ=Î( +-Y}Ö(»[ŠÔOŒåIlšDbÛF&6iR}q¬¾èjj RñÒåRÒŸ­“‘•SP&ÔW×ÔÖ=sÁДbê†E'¤fåÒè >³³·îL„ú(oÀཞ@ýÿM#ú^ÃÑ]‰Ôô$VôõõNhîŒàœ)än˜³À’œ–WRÅ ¬¦¡¥sZ/°›w@hT\rÆÕüõ!a=}Æ­>ϦM¦¾Àã†? q¾9þã†lX´*¶fEý:P¿³æ··1-M u5•ôҒ¼«Y€~|LdX}o0ßÅÙÉÑ—£“³ ¸ïí뛜–°Ã>¬º:qâB£HD®ñ d¶ÕŸ<±£Ã¥¾.¨¿Ÿ­¾ R¨/ê*R_Ø5N}˜g±yâ $$/]&%½z­Œìæ-Ê[wîúf÷>õ#ÇNž¹pÙÄÒÖÉÝÔOɼZPB¯®ofvöê?z‚óÆË äQÂ+ñ!Vÿzw¨_U^œOÍHõ¼Ým,Œ ôõt´4Ôö~ÿ·¿îPU"Õ_ñîÑ—_ýyH}hxíú›awr5L¨Ÿ’ —£†;z®£†'o˜_ý7¸áWHýgOŸ<Âê÷vµµ4ÔT”æf¥&Æ„ùz8ÛQLùVe"õE«"”šõšZú¨ÚÚ˜­-õkª*ÊhEù9Ù©Iñ(éúûxy€ùŽöv¶¶66¶¶vöŽà¾‡°i?.1%=;'ŸûŒ¶ÎÈwï»gç‹1¹ˆ»óßÂUŸ'Àd¥áQf«¯­©NŒ²²‚œ¬ÌZ‘ú³xÕ'$Ô_AªO ¸D}ã¹¢/ŒÞ{SE_Áê¿ý'(ˆÕ¿wçÆõžŽÖæúêò’ü«)ñQ¡,õÏŸÖ9¦q«¿Ui ¨¿võÊË–,’|'õÿ4‘ú¼ “ßÜAôÍç|s )™94ÞonÒãF°ú£„ú‡îݹÙ×ÛÉõé´Âœ¬Ô„è°@B}à gðªìþf׸UY«"R_˜õê'¤fRó +-Aýj¤> +-ûm`> Ïhnl¨«®,/-.È¥f¦%'ÄFè»»‚ùv¶6ÖVVŠ••µ­¸ïJ°Ÿ/械_Ûù£ûÚ·ˆòó/ÿ1‹Äò S}ÖÙÊ`Ò8Æð©>1Ê›Eêì}—,#çY^Iϳš†–Žž¾¡¾Hd\r5¿˜P¿GÿƒÁaV“ ê‡ú¸;ÙZš\>úä±#÷‚;A}4:H}îÑùd£3õ7§ ¼™è·45ÔÕTÑËJ +-ós²ÒSã¢#Bƒôìm­­(–¸,)VÖ¶öûÁa‘1 ÉéY(ìWT×71Ú»`ïô?øixäñ/xYËÇ›¹>¸ú“­8ÀÁf'©>×(‹Ô~ñ«Ï™çUX}EÕí_~ýݵÃGOè»ddníó›”NÍ+.«¬md´Cà¸&P®Ì‰âÆ'PŠì›‰³/¡ ŒÎI +-ÎPý¹Ð°¨¿©/%ýÙ:Y9Pÿ‹¯¾ýa¿º¦¶îYR}ß ð˜ÄÔ¬ÜÂÒ +-P¿ Ô¿u÷þO,õǦ¯¾ÀÛ¦jÜmƒ~9tÛì#o›™þr¢š…š‰úÜê—”UT×Ö76·´ûLŒ~sc}-'ê'ÅÇD†øúNv6V s33S(33s Š•Á~HxT\b*ñ‘TÕ6Â(ö ÄÅžEˆ\/?¾úäÙÊ¥>{u¨/e¡9Ðs¸æyÞühž—ƒúë6l’WTÁê8tôø©s—®˜YÙ»xúGÄ&¥eç•bõ»à̇Gf¨þ¡þÈÐŒ¨Ï ‰htäxÏÄigßqê³û]¼t9RÃ&9BýCšÇuÏ^dõ ê§eç•V@¿m]½d¿¡ßç‚ú¨þØ(Ú”Ÿ >è¿}ãzwGkS]Uyq>5#9.2Ä«ol ¯§£¥¡¶©¯ª$ÿùÆõkúKIJÌã_áŽÍ«f¨>š¤~.G}F+ }õ+ÊJŠˆ¨èëåз¦Xš›™šA›˜š™[’ì{û†FÄÄ£°_«¦¡™ÙÑwo`èá£'O¹—WýÙ`Ÿgu9ê?ç¨ÏZ]Rý°@~õß#°‰jÖJ‚ ¾Ô* +-âì›ÆSd_~õ'ö™X”›•Æ:­Ì®\<«{\óÐþ¾ýê‹m* +-r›6¬#Õ_¸`þ<±Oÿ§þµîvFS]eYq5= ©ïåê`mntI_ï„Öaµ½ß}ýåvUE¬þª•Ëÿ²dÑB‘ú®ÙR¿ ÔGÅ`´45Ö×UWÒ9Q?"4ÈÏÛÃÕÙÁÖšbafjltÅ×#cS3 Š5°ïæéã†Â~&½º¾©µ½«·ïæ{ƒ±†/ßk¡¨ÿŠXÝ'¼êÓAýL¬¾»“­¥ Rÿ˜HýßQ PP’̾2²r +-Ê„úêšÚºg/šRìœ=@ýè„Ô¬œBV¿&å RýÑwW382ŒÕ¿ÖÕÎh¬­,-ÊËNKŒöót±GêŸ;uüè¡Hýí*ŠXýUR˜A¬>ž©/ÎVŸç¶9|ôÜ6FæÖ°¿þ!‘±IéÔ¼bBýîk7n÷?&mtì[ý·ÕŸªÝ2Ôn«]PÿÜ©G؃ÔWQ”‡v×ðµû ´;G´)¼fCýªÚú†¦fÌ>GýúÚêŠrDýl"êøxº9£¤oafæ_6¸epÜ7ömì]ܽpØOHNφ7Ë«êàîìì黉‡G¼|¿þë·ß>´úoHõG_<ö©?pÿîMPŸÙÒPM§ð¨ùßïö]0¸®þ°Ïðù̼Ÿ×÷ýX;¸¸{ûžŽŒMLËÌ-,­„ÂÑq%úÆ»õŸóÕ ®ú<Ñy%ŠA(¿—Pù%d`Éò+ÄàtÕÿHP}¼¿r‹—*­\£¬¢ŽÔߧ¥£odF㪟Bgä—°ªš¡_õ‹VŸoÏ&SŸ8mØêwÃsÑiÃD§ ç'gÉó“Û0ÝŸœl$1Q¿±«ЇªßØP[]QV\›MGU?2,$ð„ŸÏQ7WgG;[k<6¶vNΈ}_ÿ“ADÙÏÈÎ+(A ¤µóBï +-#:<¹ËÇí ÒRÿî[cW±ú-„ú™¼ê›sÕW]¿v•Ò²Å‹õEž­²,¿ëáWš­þBR}ÕMÛ Ðûÿ}è;Š¹•=V?$"&!53§ ´¢©É#¯L¼GÜà × vt^ó¨ÿóÓ'Xýû·AýQP¿«½¹¾šUœÏÈH‰'Õ§™éëhaõÕU”׬TZª¸3ÈͦT†¨ýUDû«¬ªŽ÷Wë ¾± í¯_zn +-=§ õ«ö.¼hc7á¹ðsßT}ö¦”R}";bîD±¯ù“[€Ô_¶byÚü‹ï´9›˜š™ ê×¢ÓæâÀRŸlW‘ú赿ñ­™8õŸ¿i?²Àý©¿Im=R±ÂB¶úøµ2õ¥5o­>« +-©ßBªßAVýÚªŠ²âüÜìŒÔĸèˆP\õ=Ž¸8úÈ|s3sä>°ïäzÄã(*ûaQ± )Ùy…PAšÚÎw÷ Ž„\¾gŒú!lõAý}“«/˲‡Lô á@ËúËW~ êoõ÷jêè™Rm õÃÎœMÎ`0‹Ë«ë!y=pe‚úã÷pðO¼ÉõQv@}”áÆ`ÌÓÖ®RZ†îDäàlÒÁiª?‡P_Ô_½v½Ú¦m_C¨oaÍU?-+·°´’PŸØ³;÷8êÿ2™ú‚ÿ¸gø'âµ9™œœd^+ÉŒ$Ô¯olBêw`ô¡ê7««©d•1s²Ò“b£ÂC‚PÕwsur°ôÁ|SSpØ·sp&Ê~phDôÙ¤ô¬Ü‚ì^k'ÙA8•k²å“¾úe™úàð9HzÖì9X}yÅ% þ:•[¶ïüv¯æ=CSªãaOßÁHýôlfQyUîèʼêÿg’àýWŒúⲃÛošèö«*²ýNþ× +-¨¿©¿Am3R_Cû‰…µƒ«‡Ïñ Ð¨8P?¯°¬²®±µ³Ô‡×rÔJªÿrjõá±ø²yH^6ׯŒ÷ó\6)܈&ËF6’‰¨®©¥µØôÛÛZšêª+ËK +-óô´¤ø˜ÈÐSÇqÕw´³±¢Z€ùŠ±1…î[P­lì]PÙ?~&ÏœübؽÆÖŽ ½ãP¹n V®ß>õÝÄ«/&˲0¿ó§þ¼rò +-Xý 7ƒú{4èšX‚ú¤ƒP8òŠÊª°ƒ}ƒX}äàÅ:8¥ú÷ˆì ^¼ÐÙÚX[YV˜›êG…÷ñpu°¶ Ò&ÔW“˜ú3AýÏúèµ+V¯õñkµu àµõE¿öâµ"ÿq‚ê¿äUÿÇÜŸ ÕïAêW³Jòô”øèðS'yq²£™éëhíݽkÇVu¬¾â"9Á~4C¦¾4Fbê·ê·µ¶4«¯­®(+.ÈËÎHMŒ‹Ž8|ÒÏU}{[Œ>ÅØ1³oëàäêîåëp*,*6!…Î`•á˳«·ÔgW.îòqÔýžÕw­>y·ÊÔ# þ'Ÿþ…×A²ýnÇíW—·ýÆ’í·–l¿ßó´ß'‚Á§þK2;Oÿ‚úã7®]ìëõë*ËŠò²Ò’â8ê[šèjkìùæëí›Õ6 õ—(ȳ՟‰²óç?¨þ'Ÿ~JüãæŠÿÇ‘—M’¨ËæÁd— ¯ú¯xÔÆQ©?Ôßs¾­©¾šUœÏÈH>ËVß–jj¤§£‰Ôß²QEùË•Ë—*Êcõçp6E¶(Ršé«ŸÈV¿†T¿WýÖfP¿¦ŠUZ”Ÿ›•‘’{&<$ðÄ1o\õ­iú†0†˜}Kš5*ûžÞ~'ƒC#câ“Ó³ó +-K+jšÛ»zú‡8•Käò}hê¯]¥´Œ­þ›÷5ÙHrD·ß¿!õ*,Fê¯WÛ´ Ô߯}È€bamïâîíx:ÔÏÌ-,Å}ãÂő﯎ݺs—¼çbÔÿŸõÂÇ°úHýK¤úU ~v:R?ø„¯çaGKCÝ{¾Ý¹}óÆ ëBRýϦ¯>û²™ÿw9yE¬¾ÊÆ-H}Íz†¦T®úÉÙÌâòªzP¿G¼ú¯Äª/ôØäc‡úõË‹™Ù þ™0ò±TSC½š{á± >~,GýY2õ¥;ÓPßK„úÍHýv„~KscC]M%«´™“™žv*Àß×˪¾•¥¹)Ìÿ¸O15·„²ï|Øýè±A§#¢¡ƒdå” õ¹q”Šú¯ßBýýlõ¡¯-VàW_f韃D¢ÕWÝ´ ½M1·"Ô‰ˆIHÍÌ-€¾ÔïFêß¾{ïRÿ—__¼àž ú¯¦€°ª¼ˆ™Î¡%†_}¹óþ„Sª¯ êïص{¯¦Žž‘)ÕÖéZßðhPŸÁ,fUcõû‡F¯\¿9>q«ÿäéÏ<ê¿~õøŵÁ/?vŠ_œþÅÉÔ—öHNý6õ«+ËK +-óô´¤³1‘¡Á'ý|<ÝPÕ§Z˜QŒ}}=}`ßØÄÌʾ“«›—¯@H8ñÙ‚"ŽÝ}ƒ#—¯MR¹Þ·ú. >…T›Lýc„ÕG‰ž;oþœD«ãDkÔ76§¡ëÕ/«OÏ!úF{¨?zuì&¨ÿ«ÏP¼ú¯ùÔ‚Õ¿?1~óú•KCýœúËàÖ_'[²þîÞ¹cÚõ—g}?æ__Péò•ÿg¿>œ¢¼Ó8€On&—\,ÄX"£#Q£â€5¢bÔ»l_¶P–Þ‘"EŠ‚" ¢H—ŽtDPšbD,oÌxcÃxwIO“›Ë™Læžßï}÷ÝÂ.,BVf²ÏðÎüf¾Ïçý>ËWš˜cõm@}±Lýc9%• >zlïÀ-¤þÃaêÿ¢‰ú?"õÑ¢ =Bêß짛"¬~|LDH€·›³Ë´³Þai±a©±,ŠÒa£S_{3õs K*ª¤êwâ²ß ê·Ÿoki>]_sª¼¸07+3=%1>6*<$ÈÏÛª¾Ðó™0à>b—}ÿ Ðˆ½ðÙÔ ølieM¨ßÕs­ð6ª\“Uý`B}†­ÕvK‹õ«M•Õ×…ùmŒjõ‰D D¯õÂ6t6_,! „äÕ6êká0õ!Õÿ‘Rÿ!¨ÿ5Rÿ"¨ßXS êKO>ê‹ù,:¨¿©¿ÔÿTúzõÉÇš(=ýâT?ÿâÆ ¾Ò¢ ‹2ØÔo9S_U^”—•q8qt8RßIÀeØ©Y]=ÒîL úÝýŽöó­-MHý²â‚œ¬£iÉ÷ÇDî ôõr—8‰|.‡Åd0ìí &‹Ãå  ì»{ù†„ïK8t8ãx|¶¦¡éÜ…®ž«ý7°úÇH+ÄñçÉ¡~t¸JõÉ +-ƒÕÿà}Ýáªõ¡Ô–h ¡¬þîR][Û/^Zýך«ÿý¿ž=}‚Õ¿5ÐwåbG[scmeIa¥¾§DÌgÓm°úæ&+—/ýìSƒùXý§O›ú*+÷‹Óè°‘mÙ+U[6ºúŠ‹r¦®ªì¤T}´(N²EY¥Rýwu‹¢­™õ/`õ»±úηžmj¬«®,+ÊÏ9ž‘št`_tdØîO7Tõ9l&˜O§ƒûL6‡ç rtqóô ÞŸ˜rv¯¸¢º© Ô¿¥¬þðòVÔW3Qaàp]!¸R}í]³.ÍZ›w( ©ú;uºVžÁBÃ%ËŒLÌõi,žÔ ŒMHJËÌ.@}Ôï¾Ü{ýæ»ßÜðx«ÿâå+9õQýŸÿK¨Â£¨þÙÓµ•¥ >q(îöõ@ýÛ6o\g¾jœê+6©[_/Jý“¥§êNŸ=ßyéjŸÂ–½ Õÿµe¿¤þOÒE·¢E¹u£-ÊY¹zoEõÈcokµmËÆu >¼uÑ'ó õ©·Ê«¯íÐü±f"Ô?צ ~Û9BýÒ¢üìcGJˆ‹Ž ò÷öpuCÕg³`>î3Xl._(vvõðñß³ÿ`Jzfv~qyuý™2ÐBF¹=ß‚ú² +-C®Ö2õ A}ý9³f*¨¯ë0ZœÑÕ76[³aÓÖÖ4&OäìîC©Ÿ}®LPÿRÿžJõå%¤ÔQ¯AÂ+—:‘ú§J ) ýä w Ý5_nþb¹‰ê»f´?œn&jÆ«~mV¿]ª~R¿ùLCmUEÉɼ™é)‰ñ±Q{B}½Ü\…\6“AómmÁ}:ƒÉæ:ˆ%î^~A!áÑûÐwOà<ž>ÛÖqñJßÀdT¿«ê; ¹LP+¨o¦ >•æ?ëÔ×ê(©‘ž"•ÔG‚úHBk;Wèä&S?ú\™H}$á½û”„/UK¨±úª*¨ï$à0l­¶o±Xêḩ?gRªFw¢æêÃ[Ô[±úè­çÈ·ÞUñÖ×cPÿ;Pÿ1Vÿæ@ïå‹­Í5•%2õ=\Ä|}×W þZPöDª¾¬üTÝLÜL°úíçÛZ°úå%…¹”úÁ>žnÎbŸÃbØÓÀ|pŸfÏ`qùBG7/ßÀð½ðÝÔ£Yyp{ÖN:õÉÅ­¯*õ¦Âêû¸; yLÚ.¤þZ3#Yš©Í%ã¬c_[£¨þ›ôßÎKWûoý÷ɈýW½ú/‰ð Axîáðôtá𕫇¢E«í– ¾)¡þB}½‰P_ú‡Û`aIÞ5r¸ü¢1Þ5Êê¿&ÕE©ÿÔ¿ƒÔïnomn¨©()ÈÎLKJˆ õE<PŸØi;Ò›>U§¾–gBÕïÂê·¶4Ÿ®¯9U^\˜›u4-ùàþ˜È°Ýþ>® >Ô§Óúˆ}(û,O vvõô Þ—p(5#+÷dé©ÚF¬~ïÀM¤þƒÇC“Aýž® ç°úù'°úfw¹4“—«´¯ÁæNùàýa«« ôï=ª$œNH8Ô_º"½"m‘8ºÊÔÏ…¾Qwz\êS¾xþÃwHý÷ïÝ…ð\£Â#«  ¾Ô·FꯙõñNé®1BêoÚŠÔç Ý}dê—W7êßÄê“K¦‰ú¿*¨ÿ«?ô=õÎÍëXý¦†êŠâ|J}hGxOˆvd,UÎ,úocƧ~9R¿©ßìw)©_ ¯¾·‡ÄIäÀe3QÕ·ÙcƒÊ>“Ís9¹zø õcàö<ž[XZYÛØÜÚÞ}Ô¿£Rýׯþ°ºöoª®É-nS}uy1¨/×aàrµAê¯3_…Ô_Dª/gižuìke†«"ýÑÌÙs©H›+FzÏÞ}SŽÇ}®ÌÎKWúnÜBê?|òTªþO<¥¾ñÛðð(RHªgð:ie@êáÈeÚYï°´Ø°ÆÔ©¿pÁ¼q¨ÿ©þ P_Ô7\²ÌÈØŒPŸÆä‰@ýÀÐÈØ„¤´LP¿ÔÇK¦^ý_Õª?ì©Rõ¥Om ö$õT}!I³Fê¯!Õ'ž:ƒ(GïéÔ×â¼™ú I©êÔ¿ê7!õËŠ rŽg¤&Øäçí.q:pqÕô­­ûPöÙ\P_âáíß—ª_Cª}2¨¯”fªÃD…ùzHÄ|6Ýfç¶-×­^Eö5gTb¦êyÖ•}mjõ‰H H¯$Õ·±g;ˆ%2õspßÀWfßÀ-te‚úÏ@}5Wæ¨êË +-ð5(À#RhjlôùbC9õ§È¢£±úè©S§ë͘9ëcýy¤úk‘ú»h,žÈE¦~vAqEMƒbµzJ.Ù+K6¢úÏGÿÁ¹‘?¸­ª~p=U77cT_òÆê{¹»8 +-ùPU}kTöé —/t”¸#õ#câ£Ý+‘W_m Ñ‚úŠi&.ךŠ’‚ìÌôäq ¾Ÿ§ÄÑcokµÍÒbýjg´¹úÏž9ãÃéDaÓ•}-%á°Hë#õ—,_ib¾ö‹Í_~eCgóÅß t¾&§CɃ+SI}ž¡^}”µê÷á‘UB}Ñð¬/-ÀÑ «S6¥¾‰~*¨Ï¹üŸýúðŠòÌÂ~ÎnÌnÖ¬klkDQlØDÅ^bf€aè)*1¨A b,A,X" €)"VŒÔDcGQ1¶¨G»f÷Þ÷ý0ƒÀ#çìwÿƒ÷œçþÞç2O%êïØÉ.YÙòÔ꟪Ný—¨>mG7¯_½\UqÕßW›•ž’°e§¾›£µÔt:Y¦ukÒY#Žæ¦eÔÏËÝ•‘–¨ÿ]Ø ¹~Þ®Žö +-¹•LŠè›š"ûR™•Ô÷ðñ›ûõ‚ÅáËVF1êïùø곦ÖâîÍÛ•±c[Ü&P?",4x®Ÿ—«£‚Æ™Ý\=Ýî >ÓbIJ¯ýiB= p(K¡¥€BP(Ìø…ï©þs¢~Mõ­¿ü|ñB T†íÛxõg{8+mdf3AýÑ# ˆúºÐÈÈD§êÿ©±Ou<5Žy*|p¥Ì×TõíˆQÿÚTÿôñ’ƒû +-r²Ò’Aý5+—-Y8ž¨¯°¶ÕoÓêæådƒú‰¨þªåDý9~Þî.ŽJ[P«¾) –}™•\¡ttõðFõõ1ìñyæc¨¯¢®1‹{ìȽy»3R“â6¯ZFãÌœ®ds‡Òï«×³;É3¿ºbÙ×ê4®OœŠX ê-X¼t9)ÀÛÙäúB6yÏU&¯¾úÿbÂó’Sÿ6¨‰U?Šké¡8Ô·Gõ¿š4N¨~g¨¯ê¬ñ­sÖÕ9k=~BÕó¶Éêߥê—Sõós2Ó’ãyõ±YY˜N›<Þd¤á°Áú}{3[Ò¾*õµšÿ«Ñ¬ú% þbNý­›Ö¯aÕ÷åÕ§è#û¨¾­ÒÑ…QɲQëõ ©ú­A}º¸gOúEù»3S“ã7Ó8ÃéêãÓÍ516õ±ÅÐÕÅ@·ýì¯\¢Å²¯Q£~‡N]¾ÔéAÔ>bÔ؉Sg˜ÉäJgwNýØÄí;³÷7|eÒè5BýÇœú•e¥§HeàEF}{Kª¾±ÁPr'ªQ_…*Ôg¶—¨¯ê›ŒŸ4Mê;¸àö††E%KJÍØOÕ/¯¼tåªÿ¨ÿûËWøÒÆ©ÿŠU¿†ª_Y~Õ/õqMH9 +- ž ê;€úTŸl éFðRT¿­¨¾–§åÔOåÔÿ6t~à_/w¥­µ¥«¾D"!êK-­Q}woß9A!Œúظ²[úìâ–Ÿ=ÅÄ™œ®Ñ«"Ã…ø`_³4'y¦·+SØèñ*–}íOõ!Óm?ÿ;Q¿+ªßÔ7"êÏ’Ê•N ~`È¢ðÈUÑ1 ~zvnañ¡£'øäÝo@ý?T©ÿö U,|Ps—QŸV8w$ñêûzºØÛZš³êêßWO·»†Õ74&ÛkneK·—¨¿~s|Rj&ª_rÕ¿|åÚMFýgõÔ¯~õŸRõoƒúdMØr”Ç©ïëéê`ke.TŸy©Pý?‹êkg4£þANýÃõÕ_Šêøz¹9;ØÙðêK@}sTßÎÁÅÝ‹ª±âN}h\ÜîÝ©¿{-¤þ¿9õI]Cõaqù³¯ '+=%!6&zõò¥‹@_ót<[˜NŸ2aÌ(£áCö'5WØ]’he_Œu NmõI¦AýöŒú½û ŒêO˜‚êÛ9¹yûsê'¤¤gå0êW1É{øëoOš ~] oÔ²0#Õç,„ì`c˜¨¶°Ñê«Þ^V}²½^~¼úÉ©™9ùEKŽŸ>[^…êß¹{ŸUÿuãÔÿÀÿ–Êýoä¥ø¿IàkæKÅÑàhXý#Dý¡ú‘TýÙ¼ú}dÕ·±sp¦ê/$êodÕ4.m©ÿ¾®ú4ÎxºV•Ÿ;}âè¡â‚Üìôí‰[7®eóìåꨰ–Κ1uâØÑ#H {÷ì¡C­¾ì‹¹n¹©¥~›ZêwëÑÕf4rÌ„)ÓM¥ÖvŽDý…K–­\³aKBJ¨¿“w®¢êòÕë7Q}´ð…j ¹ðüQOýg|f*Ó€ãnÀÝš¡¾à¥¸½:vîZ{{Ma{AýyóÉKQý4Pª®Ùêók娚Q¿Õß›·+cÇ6þª™íábociÆ^5û÷ÑÓÕiÒU#ŽGsê—ÔVgj2QeõeDý™3‰ú2¢¾U?,â{T?±Õ¨‹{ÿî›×®þTUqþ ª_¸g×N’gÜÜ…óçù{»9)å2 ôx“‘†Ãèקö˜ÚeÿS®ì‹ì·ô¨T¿U¿;Uߪoa­ptã,õ“Ó²r +-¨…±Pú¯YõIxheÀC1?'35™WßÏËÕAae!T¿g]õÛ4G}ö¥új_ßÔ—6¨þ¯œúÊJO;²ŸªÏv#TßÙÞFFÕa0Ôï¥N}q9Z~´§¾§›³½ÂÆJfaêÏ„õÍ,dVTýÙõÓ³s?šú\œÙŽwçÖõ«?]¼p¾ôä‡!Ïx»Âæ®Y¹lÉ¢À4¯Ó&O3Êh8$šìn×.²ÿ¦ì‹ìkc¶°/±P3 ¸éê§%3ÙÆà‡w¢•…)ª…Q¿k玄êóª|h㮢¾·à㮚Ój®šwMUÿ¨ÕÇ-!ÝÔ_½|éâA ¾ÕŸ:q¬PýN¢úe4¡þ¾ýŒú% þÁÚêGõƒç¡úNªÕWØSõçõ×6Y}M±/ˆ3äY ~õ­ë4Ïx»‘ÍMؽ* 5Æ +-›µ…é L4\¯ƒôëÝ«¶ì“P‹ìkoT«/ÈôPCc>Ó^éаˆQ¨~jæîü"Tÿly%U¿†UÿUsÔ¿GÕ¯ êädav6pê»9bt¦O™0ÏDý¾½I_è¤yõ¥Öv ¾`È¢ðÈUDýtPŸì¨ÏïØáŽ5¤þ;Fýß_<#êã–ðݨpOöÎ퉼ú>îÎJ¹lîȨÉú°"]pC ÑZ$ª¯µÑŠúßÏó§êˉúª¾„¨/WØ;¹y¶*õ™Å}ñì “g¼]+ËΞ"›››•ž’ †ã54x.¬®“œ\¯ÐØHÙ[§ìö?Ù×ÎpÖËô—Ýu…ê›[Ù:¸xòêÇ%õ9v +-Ô¿êßV§þ{5ê¿ãÃèý*QÿÄÑC˜´úÞõ† †¾Ð³UrS_ýzù°úÃF¡ú³@}'Nýè˜XPÿÃ;Ö,õÏ€úÅ ~úöÄؘhN}'¡úú¡úìCÛ~Ƭ‡¨¾–¦%ÕOˆÝ¸Õ_Œêûxº²êÓªe_¥ú±­C}.Ï5Õ·o@_«,‡¾vôP1©1Ûâ6­‹Z«è=ÆÞÆÒ\» ‘†²¯_»ìÓ –.0 ¶È~ËŽ ÓŸ¨VßÀØdܤ¯$æ–¶ö¨þ×éïX· ÔÏØGÕ/«¼ôó/7õŸ>ñòÕë7oß6RýWLeõCPÿ ¨_L¨wbø¢@PßÎZÚ"êëôèŨ?vâÔ³¤r;'w^ýú;V}ïAýk²úçÉC s³±Å°õíäRª¾Ñp|¨@ý¿‰êky´®¾Ôœ¨?cQß\*P?4ì»Ö¥þsÈó£5wïÜõÉæÂñº7oWFjRüf(l‘áÐcæÌötuPXc¤'3166Ë~O(ûÿìÜRÝÔgrݦnÙÓÝ"£BýÏÛýƒU¿Oÿ þhP¦¹¥½‹Çì9¼ú;2våíEõK9õZT[Vß›Vg ©Eê?~ÚõáSÓÂû©É§>5{„ô©aG¨#jõíÿ@ê·¿mÅê£ä>þåçªò{ÅEWóQ9}üHB\LԶ𰠕Kû¸;;ØXBx©²¯(/'óƒÔxñqcF"Ùʲ/ªáÅ° õCóùvNn >!¨Ÿ’‘ýµêîZýªûwïܼ~éBö¹Bý[à›¸rÉ"Ô(õ5ù¨ÿ­€êõGƒúR¼ê‹.a,zš^ÔïyÑ®Ôÿ©C‚ªQ-¨_r»2’•~«¿3"<,8Š‘§‹£ ¡>‡P_šUÀFtê/öõrsüê“ÁýðoB}"¹Ïž‚úÕ袡°eg¤&H<' »­_»j™¿¯§+”}sºì«*Mš(‹ÎZ|,Ü5“ýoXöû:ªÿÝ÷]bÈ[C^``ØHbØÝéõ þÓÇÄ?ñæõˤúöîꬾž¶¦œMÔŠÕI.Êïy[õÕÏ[gõÿCªOV£¦ç Oaõq3õO&rÕ‡„¸@/2c„ÕWQÄêC)9bXgõâhþL#Jõ= õ­@}3Pߪ'õË*kD®>ôGªÆàä¾lzF\4.l—/æd¦A‘9¼ï®È­›BƒW,òÆeß•ý)ˆ¯2œ5*ûãÆŽöA}‚ý!,û"~êK"õ•hõ­@}/®úûáôRÎe_¸ÞõÑé½hHýÿRŶ·Äí õ¡Ô¿˜‘ßD†úÞ þ|Z}e¦úÃz§þ_zúÔÎ66ŸoïäŽÔ_ ጉCê§fä€ú·„¬~¡~nV¨pßnZ}PßÂdŽäCK]EQÔ:«þÌàPßw°¨Ï~µú÷úy ~2V?jÛ¦Ðu«—úÎÖX}}Îd®ú£™êsS1GógšþW?âëÔ??8ÔÇÝü¢±¢[NºðÚ¥ Ù©É'àÿ½cëÆÐuË©²o6o6”}]mMu%…‰²ð‰ÅìbÙéð¨?„ú þô™sM­l]½0Ô?EŽû•¤ú=žžêçd¤bõc"·nüÛÚU”úƳ )õe¡*Àÿñïð›n4ìV}yP²Ž>VßÚÞÙÝÇ¡þ‰¤ÔÌœ<¤þ=ZýJ}´gïÔG©ÿ²éR"R\Tp%/73 ÂU߯“ú²ÒR¼êw·';ÂWßžPÉŠÀWŸ>h*¹è¢©è¢"Syÿ.dn:+ýÌ©cGÄÅDm ßB—}8ë¹3gLÓçhA€ ·M”@ßX’ýïXöE2ݨ?AF©¯E¨o ê{2Ô?ô㩳éäé‘êó9=âöºVÿãº1PêWão"¥~BW}w'ûNê‹“ê÷¨a7êKËÊ+*«“ê[ê/c¨ŸÌTÿÑJýÖ·í}UÿÖ ¤>ô¢£ \õ}<œí­-`O}VýžQß|Щÿ¿Žê¿×¶V¢°Á÷µ¾îáƒ*”Ý‚«ùç:—’U&~OôŽ-ÑvDÙ·µ23žc4}ªžÎd UåIòr2a hn,û"Þ¨?«oãè‚Ô  ع'žT?Ÿ÷ôZ~}ýFõ )õ›Hõ±†s2S“@C®ú>´ú ¡°ÕWAêÎ6Aê{ø ð†nÚµ{R?-3—P¿¢ºöÑ“†.ÕïŒ~õ#Õ‡bDí™—C¨Oí 껃úÔžêÊ´ú½Û“á«~Gõé‹~ÿ®ˆnË«æçõ(»e%· ¯CeËLƒ²øÀ^ªì/ó‡íœì­-MçÍ24˜¢« }F‰e€†¯ú# õ¥ õ9 õý—3Ô?“žu>ÿjáí8½Úºú¤>Ò°­ýw>êéR}††\õ{ÐÔLC>ê“á¥ÔçèãðZ;8á%Ô?˜Hª_PÄGý÷‚¨ß»×ͯãë&/ÐëÆŽpg¨ïì6ˆÔÿÌTN¾¯Pö›_ &S[Sy¿ô5Yö’e?¯çãáâh7ßÜdîÌÓô9Zšj*J +-e¥'Àq³ì‹x:«? «/ŽÕWTÁêÃQ[ÂQ{ú2ÔO7ºè¦!»¸ìCx‰²_\T@•ýcÜW/Xäãáâh7ßÂdî,Cƒ)ºÚ“ÕU•'ÉËÉü0ARB8˾ˆ¦ë£–’–eªoÔGGM©"9-37ix¯¢iø¬ée_Ô¿DP¿¦¢ Ô¿š—›•–|’¡¾Ïê‚ú–^O®úñ‡@ýô¬óBU¿±ƒú§ê/!Ô7õ§êicõeHõG`õ¿eÕå°ê3Ù§Õ§nº½­Ž‡·±®ºº¢ìîmnÙO<»+r[xXÈšUËüz¹;;ØZ™›Ì™9cš¾®¶¦ºŠÍþXûCYöûwGýMêû0Ô?J¨åÆ­âþP?Ô?ÃU?p9¨ïâ`ƒÕŸÂÑBêËIOè«úcÆŠKBxU4 ¼ÓgÎ5µ´qtñ\ÈPÿGRýÂÛ%±ÚºúˆÞ³Üó“`ê7cõTÝÇê_@êc¨¿ÈÛm¯ú’ ¾¨ÿ=«¾¨‡U¿ƒúŸ)õñQ·ÃQãð6ÃÒ e¿”Yö$ìÛ½}ËÆÐà •Ký`C'{K3cÌ>‡Ë¾f_Œe_DÃGýá#G1Õ×Ñ70œmlamïìÎU?.ÔOÍÌéBýwBS?~ÏΈð°à¾ªO…¯Iì9©?N«¯¤ª¡¥ËP?€¡þ)¬>oÄZ~}ý†±¾¨Ô?¼Ÿ«¾­>´!U%VýVý.Ô§Ê>„ÿ`!½TÙ¿e?•}´âþ½1QôŠ>® ì­-MçÍ6š>U£¥©†Ø—eÙñt¯þ$e5P¨oN©¿Ž:2†WýòꟻSŸq{<êâU¿¶¦’Pÿ|V:¨ˆ¡¾'¨o)LõGêËð¨oëè +-ê¯bª/HÄ`Q^õÉ5¡µRê××=õ!×/QêÇFoß¼!$ˆPß–R_ƒU€‡UŸ©>]nvA}tÕÊ~áµËs²ÒÏž>~ô`|ì®È­›ÂBÖ¬^°ÈÛÃÅÑÎÚ‚d_GKCMEQa"büÿÙ¯§(®<à•T%ºkUÆ5«â•J6&jÁ[Áû(ˆ‚ +- +-*\5„ ¢A]e…¢äd¸SA@†ÎáAåÔè‚••Ú÷º{fºgz.œk—÷ý¾U¿÷éoþľº"E}]õÍú‡„ꇑÕçÖ7êó^¾RPýW|õ!‡Pý‡¹„ú·IêÛìÙif¼iÝ*Ã%@ýYàX¤ªÿ‘xMÅÔ?érÖý²'T?B1õÉ/DŠúìÒ¢‡¹÷Ó“ãïFÔÿÁÎÖʪjêO›2 ©¯± õ)ì“Æþ ÿ–4ö눱ŸŸ™–̈ +- ôóÝÝ\O8:9hcµk‡™É–kW-[Œ³ÿ5d2b_‘ªþt þl=Lý-Pýý$õƒÂ¢bR†©¾‡ðn„êC1õCHêÛ‘Ôןƒq8yÒø[¨tõ­„êûÜ"©_Ê®”ó‰)¦~Y}Lýu’Õÿ©¯Æ õiԇ쿣ûà'–Uf[351þndXpÀM/KXIGûÃöYYî05Ù¼c¾Þwôìÿ ±¯Ê(¤¾5I}?¡úÅ„úmÃTŸ'¦~zRà¤þR£ÕP}K¨¾Ó©ŸÝ.\ÁÔŒe¤0³ò HêÃۃ꿞úüŒs(:‚U ¾î”é„úK W¯ÇÕ?dOQŸ‘œž•WPTÊQúR~iú RŸÊþ{±±ÿš<ö›êk«+8¬’Gr³˜©‰ñšîçNÿtÒÉá¨íÞÝÛ·}¿ g>`&Áþ$ľš"Y}È!T®ÁB þzB}{1õóhÕÇnO!õ;Ÿ¶‘ÕOŽ¿(ªþf•ªo„©o ÕÇkbêGêCõëêK¨9$:‹¤ªŸÔªÿ÷£@ýfÆõ'ã5uúRŸª>yìÒŒýÆ:nU9»´¸0?ç~zJ½˜ˆ°à€›>^ÿtwsu>áäpä ­õîÛ·BöW ö5qÇ%ªˆ¤~¨zÕ·µ²ØŽ«¿P®ÒÕŸÍW+Y}ì‰Aõ™„ú ¦,õ‡ˆç!§ú÷¨ê$©?oά_aêÕï)|š9š¤>­úýwä±0`¿¥©¡¶¦’Sö¸¨ /;3-™äÃÛÓã(ê|ÂÑþÈAë];ÍûëV¯XNÇþX™ìkú*þ×#C’úCk[QõÉ*I}N)¸˜,LýP’ú‡dªÿ釩o@«¾ŸâêÉ©þ£‡¹™˜ú¿‘Õ߇«¿r9T振¾êÿuEWIê+óã&ŸúÕPý9ôê›oZ»rùb¤¾©O£>öz…cÿw|ì¿èc¿µ¹¡®¦ªœ]Z\ø ç>3%oêç{í*`ÿŒ ¬J°o"Âþ—_LÃØØWu†=‚o©Bý¦z¾úL ~$¦þ• n?Ÿr‚ê[bê Wý)5Ç€šcÅÕßB«~ +-V“Å©¾úp§^Æ“æ†ÚêŠ2’údõwõ7"õµ$H}:öÅÆþK^_O76ö[šjÁ#.{\TŸ“™ž’p/&2,T½võò…sg\N]ì³²¤²?{æ7ÃÙŸ ™ýûʉLõgÍÕÇÕ7!«ïé£"õ¹"ê_÷"«¿•¯þl%¨¯C¯¾¹¥õ~²úaÊR ¢°‡Ú)ê'Þ‹ê߸†Ô×Î õéÔ§û¼^xÜ€ýæÆznu‡Uòèa^vfZrB\LDXpì +-Ø? Ø?ËöMùì/²?±¯†(¢¾Tßñ¤ËY÷ËõÓU«¾­úªVÿ°¼ê *Iý]:Ú™ªþüyß!õ5¤>-ûü±ÿŽ4öÁ²m­Íuܪ +-viqáƒÜ¬Œ´$F\tDhPÀMPÖýÜéŸN?vo+Âþ ľš"EýIS¦ê/1\ÅWÿ’ú$õáí} úm­P¢îTõ(ê'¤0³ó iÔ‡-¥©O¼ yÕÿÇ1¤¾–©O«¾èØýªŸ××qû“–¦†ºšªò2œ}fj#6:<4Èÿ¦`ß °ïD°oÙ_»Ê±¯æÈ«þ:\};ªúñÊW¿ŠÃÂÔOaÄF†ITÿÛ¯¿”¨>‡ +-«¼Ý‹˜úQâê¿èéSúG€ú;L¿'«?uòDªú’[¢(=H}zö)cÿí0öûy½à¼qöëkk*9e‹ +-òsî3Sãc£ÂCýoøxy\rwsÅØ·Û¿gξÁ¼9ˆ}uE1õm4©¾5P‹¸úcúc>\}=ƒE@ý Tõå«Ÿñê¿“¡þ²úúZ¤>½úÄØOxû/y}½Ýྟ¶µ67Ös«+9¬Œýô”Äø»Qw ûÞ€ý_Ü\O:9Øß Ù_†ØWgd«?G½ú!|õ‹JÙÃUp@šúa"ê›Ó«¯£¨ú£Fþ3¦>x»$õ—­êï"©ïKR¿„UŽÔiAêK`Ÿ4ö öûy}=àãì×q«+ج’Gó²3ûXß@¿ÞžTö-ÌMûjEýO¤ªoF«>¼=ªúÂÛ“©>ôP^õ÷+Q}øviÔ_ÔßFUß_\ýöŽ.¥©Ÿš'¢þ^¤¾6©/A}ûøØÆ~?¯·çxÇíOZšê¸UìR‚ýä„{1û¾ÞžW.ýrÖÕùÄ0؇ê#ö•¹ÕߤRõ‡2Ô?<²Ô_±lñ|=²ú°%R_íAêKbS»îAbìƒìwì×ÖT•³K‹ äeg¤%'ÄÅD†ývÛÏ÷™}[¹Ù=šûˆ}%D!õ÷¨IýÂülfJE}M©¬õËËJ¤©¿fŲEH}-R_’ú‚±ΛÏ>¯¯·œ8d¿±¾¶¦²¼ ²Ÿ›…³|ûdÿ"è Ù?"“ýÏûªˆ6«…©ïqñœëÇ5©~\B*ú¯‘úÿÿAêKcÿŒ}8öqöûÁCî~Þõìi[k3Áþc>û ûW öùìo£°ÿ-ξ®,ö?Bì74W­<õÅoOqõÕRõûúo•£~0R_kƒÔ—¦>ìÃr?¯°ßÉg¿º’Sö¸¨c?‰±²^Èþnľº£=êwu´cê—³J€ú„ú¾"êoê/2ÐÃÔŸª;QÝê×64#õGRúr±?0€}ŒýÏ;;pö¹ûù¹YÌTŒýÐàû?Š³¿±¯ŽÐª¯£5êû“Õße¾M-êïžúCÊW´Dêk4H} êñÕe¿g¿²_Ç­®à° û9÷!û±ö/Kf_±¯êH¸êÏÆŸ®Zšú·Gˆúwú#8H}Iì¿aÿßBö»_töŸ´65àì—г†ÄþvI쎳ÔGì+-Ò¯©ÔÙAêKRŸÊþ ¼qœ}ž€ýÈ~U›Uòˆ`?>6:\Œýƒ¶Ö2Ù×Aì+12¯©ÔÁAêËÁ>6öEÙ&ý_ìÛ‹²¿°?‹ÏþDÀþ8ľrƒÔGê£HR_2û„ú|öÀ•¿ì÷ƒçÜý¼ëÙSœýÿ²_Q\yÀ/w"Š'‘ÞÁ‚€tTš¢((@AìXƒD¬X° èY¢16+¢b!Æ[ÄŠ&ÄcŒ†ÓØrzšÓKNïÞ{3»ûfwvvv-ñÞ÷?ø¾ùý>ûÛoÙØ_'aÿû‘„}͇¨¯LýrªïîêLÔ×iˆúŠÕ—û öŸ>agÿ4bÿb3Å~‘,ûÑQ‘¡ìì¿KØ,D}yõ3ÕS_–}¢þ[¢¾ªìƒc_žýK±?]Â~2 û û‡¨¯’úW®/¼ú¥D}½ Q_%öÿ%aÿû;²?ˆÉ¾sgØ×õ¬üq¢`ªMÍ,¬ÁTwîê¦#õk)õ×ãê§&Æ!õý}t¯þ/@ýçDý·=D}ØÉÂþmÈþUEì/ÃØÏbaßEž}#Œý¿öÕ +-ËTÿªon©LýM«·å6R¿©ñ¦þõ£0õ쬵¢þžý‡ØÔú&ê_¾pžKý¾á½‚‰úz¢>·úRöѱ¯”ý€ýC¬ì–e_äëEØ×LXÕ—RßAÇêWBõWèXýͺQ?"$8ÀW¿ƒq{¢¾öCÔWÂþ+…ì?~ôðþÏw)ö¯s±?²?QÌ~Å~O6ö;HØ7$ì¿AôWýjZýâ¢Âù“ßRõ¨’QQ_ŸBÔçÃþ¸Ù¿%ÃþQ)û«eØOSȾ•¥¹öÿLØW1â©F +-­þï¼ÕôàgLý3'ŽËªŸ+¨ú†mXÕêÇ1Õ_/¯þí–»Dýÿ—õù²ÿ;û7o`ì~ŒfëæO$ìçs³oÏd¿­ûïöùG·ê¿ä¯þ(Õ‡5‘ú &¦~Ï°>PýTLý5˜úç›ÔRÿ7%êoÇÕAÔ׫õÕaÿWvö¿쟓°¿[Âþb&û böƒûn\ì·’e_×󇈎ÕÏ…ê—áêg+T¿½êûøõ£˜ê¯«_«%õÇõ“ãcqõìm™êõµ¢¾ì·ð`Å~NV†*ìöÕ oõc€ú:V›ú€úF‚«?9FaQ1R¿R^}X“ú°¦ +-êçM$êëYˆú<ÔW…ý œì“gßG¾­û­ ûj…¡~kNõ‡ðTr¨¾ú_75 õkäÔÏêLjÕwëÚY¡ú,ß^±úÖv,êç2Ô¯>T{üÄõ}ñR¶¦šê—,ž?»€©~w?o¢¾®CÔ×û+XÙïØì»3Ø7!ì¿i”«ï# +-dW¿ ©8Ôú»+Ë6éHýQ|Õ—¯©Xý§`ÜûûO õVíê¯[EÔ×ÏõÕbÿ?ö«vïØØ_ Ù_ÙŸB³ŸØЯOxˆûûm0ö‰ú*D5õ³YÕ?×Ð$„ú?ÝþA«ê·gWHjf6®~™0ê?êÚ@ýn\k¾|S#®~:P?š¨¯'!êkžýMìì³ï‡ØïÒÉ °o Ø7•gŸû*…¯úQ”ú£´¬þǬê‹|<ÔP_AM¦ú1¬ê×ÔÒ5ù¨ÿ_ê Õ?]Ç®~Blt¿ˆD}=QŸ'û¯a¿²?*gXFjRÂ`Šý}Ow·®€}œývhûj„—úˆCJý\†úÕ«8”Qõr\ýÁšQÔÄÕÏÀÕßTV¹›¡¾’š¯%‹ LýúÓuŸ!õ·âêgQê÷…ê{¸:wê[[˜™õu¢¾†ØÿRŽý¥4ûhöãÅì"ö]Åì[RìÃc_Ì~+öu=5ú¥bêK9¤ÔWC9õS¤~=Pÿ(P¿©¿dÁœéS'ê§@õ‡´úN¶Bª/bU_¸š +-ÔßÇT$¦¾ÈÕ´§jÓ5 8j’¢¾†ÙGO!a¿pVÁTÈ>z œ}oÏnûv}3SpìöÛ"ö ¤ì“cŸOø«ÏäP@õiÅê_l€­ÙÇT$¥~? ©ÏúãV,ùq“ü¥¹®ò_Nõõ+¤êƒšYé) ƒêËÔ$êk3D}­±¿JÊþXô‰ˆýÞa€}Œ}Ä~)û­éÀŽ}²œáqûkçfQ+®~–2õ¹8ä§~(R?Öœ4uúœÔ_š +-Zýz¨þ5‰ú\+¦ºúÒšD}} +-Q_ì7S쟒²_ºi=dт™S'cì÷ïÛ;¬Wp ¿¯·d¿£#`ßÊÒÜÌDÌ~Vöu=7ún»¸tÃÕÏÄÔ_/§þ­Û-Á õ72ÕO ÔWƒCŽš¶N´ú=B{÷£Ô9Ž¡þ¾´b …S_35I„Q_ãì×ì¯ÚE³¿|é¢ù…3§AöGšž’C±ßbß¹sGG{[ö ©¥ Ù'ǾòðV ¬ú›Ë*÷T\}™#xµ0G0£¦§ú )Y¸ú[…U_£iH„Q_sìŸGìzDÂþGRöÇÓì¿'a_äëåáæB±omeanjW¢Z +-rì«l¨iõÛMØÔOLÍŽ«_.Q¿±éM©¿ªDKê{‹ºCõ£eÕ߸µb½b´úö û*†M}c¤¾#Rß×?¨ßŸR4_õ_¼|3õõ·#õÏŸ]7ªŸœËPßžâÐXª>öÕåkòV?]ªþªu˜úüWŒ‡úM õgN?ZS½»S?wTvF*T¿OXOZýŽvD}…¨/,û÷°¿—fåòâ…àE¦åM‚ìgBöESìˆ|<Ýݺvéää`gØ7;A³oH­Íþ;„}%á¥~¯°H¨~Pü\ýý@ý“lêÃÑãRNÆ!˜‡{RõÏž®;vä`Cý±#0õý¼=\‘úðÓ·o§õó +-fÏ_\Õß®’ú¯% ðJÜ“ªù Ì=­þ÷ׯõÏõkÅê¯(.*œ‘?™R?N¬¾'Q_Ç!êkŠý+ˆýz&û‹Ùÿ0oRýä!qƒ¢ûõ éàØw¥Ù·²473ìõ)öɱÏ?Lõ Û!õÁPãê‡õߣÕC½péß ú; úŸŸüSÿþÃÇŠÔgpˆ©ÿ ªÿð>TÿækÍPýS_Pê—âêKOŽî ÔwwuîÔ·²_žU}–šrêSêÛSêûQêÇ&$õÇNÄÕ¯:x„¹b÷žÝ\ºõu¢¾ ì?WÊ~õÞ]å[ û%Å çÁ7™”;zDVfZrBÜÀˆý@?oÏn®àr´·µ±²07…ËŽ}´äØçõáPóRÿ£O(õ?êÕx‰ú8‡”†´úO(õïüxó»«Í—/Pê¨Ú¹½tÃZLý÷úÔTÿOìËkjfÔwvEê‡DÐêÀÔ/Eê«;}¬Xóµ7¡ú 'X±g¬ê¿æV¿©ÿMS#RÿT3¦þðÌÔĸLõm€ú&@ývD}m‡¨¯ öïp°¿feÉ’…ófO’;:'+#-)aðÀ}{‡õ +-ô÷õöèæâŒØ·¶´0·Í>9öU‰Rõ½|úƒ€úCqõ·”ïØËTÿNË=Nõ1y«¿r™&Õ—_Þh°¼éÃ0õ7Ðêqêìù —›¯~wóÇ;”úOhõÿ­ªú·dÔ/ÇÔM©ß¨äï‹Ôw¤Õ7Fêõµ¢¾FÙ¿ÜÔx¾þ dÿðÁê½;+ʶlR²¤°Ÿ_%gXFjRüà˜þˆýî"_/w7—.œÀ)dmi¶®…‘Q[¶c_׳£¿áPßÞ±Cý¤´¡9¸úÛ€ú‡ÙÔÿ§@êoCê/š7kÚ úI´ú~^SŸZ^‰ú+×õwVÐœúû÷ì@ê/]8wæ‡SÆõÓ ú‘á½0õaO4Þ¨g+Žž$†¨¯Aö¯‰Ù?Y÷Y-`bx•%EsgMÏŸ2z–Äøؘ¨ÈˆÐžA"Ow×®ûVàê@ûˆýVøjåPnõÁPõƒú(õÁPO›5o‘¼ú@CZý¼™ú—.|Õ?|`/Cý19PýA¸úŽö6Lõ¹4Tº¼^~¸úTÏe©ÿ?öëÄ«Æ}ø:w]ÇZ÷›y5B‰Ôn. %ó*KÉ‘H7Q’¢hNóœL!J“æÙ˜dvp]‹{eÝç÷{ß½÷oÕN;ݵîûüÏï}žÏû} O¬>ôÉV¿®º¼ôæ5¶úaÇ9ê;ÙY™1êÿ¯£þ`±ÿøÑý.ûÅ4û ±ÑgÂCáYüìóöÚ¹ÕÃm½“½¥™‘Áª:KiÎSSV”—•š=súÔÉÇ3Â>ÅþðáLص„¨O5¡þ=¤þZŽú !¨!=‡Rÿn]SoêäPˆúOŸ<¢Õ/-)¾„Õ?Gªï$.õ{è“VßÈ| ¨¿‰P?Ô/@ê ö)¢úÿæQÿ ­~¨)?;=9î\$Wý \õç©*ú³õ‡°õÅÌþ;Xšý‡ˆýF`¿‚Í~fZrBLtdxhpà?ß½Þ^;¶lrsq\kmij´z¥.°¿@CUIANF +-‡ý‰ãÇÂþbÂ~«꟡Õ/.¢~¯~ãÓPP}ÐR?2ŒG}3£Õ áBÐP_4 ‡ O~õÿ‰ÕG}Þïhe«_êÇêCŸvÐ'[ý¹2ýì“)ñ£þ ±ßÍe¿¦º¢ ³ŸŸ“™šy*$8ððÁý{w{nß¼ÉÕÙÑn… K_oùR­…óÕU”æÊIÏÁìO7v´$öû]}µèøñ“î«/¢†8Pý£øn-Á›&L\7MÏ·dÑþn¢Ý4L‰·õû·n_¾˜Ÿ“쟊 9vÔŸ~÷ ël­Ì õW,Ó^¬9OMYQ^VjöÌéS'O?N ì3ê÷]‡ztCíê±ÍÓÛçà¬~¨_ˆÔ¯¼[ßõù3ðnno!Õ#Ôwõ­øÔŸ"6õçÈȃúšZ:+úv þ–°¼þÇ‘úÉéÙ”úÕu­÷{T_H£½«_RLß4gNqÕ_·v¹Ñj½eKÎScÔêbÔ;ûï1û/žwwQì7ûUˆýkÀ~vFJRÜù³a'‚ü÷Ù³kçVx'{K3#ƒUº:K-ÐPUR“é-ìÿ…a¿÷¢‡cH¨?vÜDÞ¡6€¡¶ç¨ê§däŠOýgõË‘úùÙiÉqÑ„úë‘ú,¬¾†ª"¨?S\êO!ÕקÔw'Ô#ÕoiGê?ƒ>ÿxÿ¡?êb«ßýä1R¿þnEYIñå‚œŒ ñç õ]ÔŸ1u2¯úÃõX1ê‹™}û|ì·67ÖÕT•cö ó²ÓSãÎ᧠8t`Ÿ·×Ž-n.Žk­-LY«õ–/ÕZ8_]Eq®¬´Ð°?Œ û¢TOêGêÏ–’U€¡^¤½|¥±…µ½3¡þYBýšú¦6P¿«¿êùòùVÿÍ«Ïžvbõk±úE”ú'¹ê;žú3A}EU ¬>ËÌÊÎi=¡~t\rZv>R¿œV¿“«þ§Ï_¾|¯ú•HýBP?«ä ·ç6PßÚÜ«?_M™«þhRý¿r{(fæÿ©õ‡ý7\öÛ[›êîV•—–\¿z©0/+ýBblô™ðÐàñóÝ»ÛsûfwWgÛ5æƆú+–i/Öœ§¦¬ /#%$ìÿÌ»Ìz¯ŸÕ1r¥þ´³¥å”Õ õÝõcR2s aôʸ£÷üÕ›·0zÙ£×—úx +-Ô¿}ãjQ~VZR?øè!ßßví@êÛZ™²ôu—.&Ô?9|q|Ý‘ß[X£"«ïÈUÿd¥~ÑÕ·Ë«kÙê£ÃêãF¿KýJýÜŒP?<$ˆ£¾=¨o°rÙ’E ¾‚¬ÔlP"Ì6£þP£þ ²ÿ¬»«óу{û•˜ý¢‚Ü̴䄘èÈS!Çccifd°RW‡}%ûsÂþp&ì‹T¢«obaêÿºÝkÏ~¿€cHýÄ”>G¯ÿê7êÇrÕß¼‘R¨¿@C«?V¾8õ›ïKýŸ¸êC£X}h”PñR]}–©•-¨¿yÇ®ß|ÁŽúIiYRÿ?´ú(õ»?¸×†Õ¿uR?æ,W}7g{k P¹6V_N«¢ÑTŸëÁ-F}1²ÿö€`ÿ%—ý¦†Ú»•wnß,¾RT“™š>*"ìDP€ÿï>{víÜêáæâhgmaÂÒ×ë3ì3ê÷Y}«¯¢¾©oê;pÕ= ê³G¯ª¦¡ïуáëIýwXý®Î‡Xý*¬~^VjRl¡¾‹£­¥©!¯úl û­þÏXý‘´úÓ°ú* @ýU,SK[G—„ú±õ«j@ý‡]ߣþ¿úo^!õÞkkõïܺ~¥073%«à·×ö_A} J}uJýiŒúCVŒúâb‡}‚ý·ûm-MõµÕe·o^»|1?;#%)îõ:~¾{w{nßì¾aƒ­•™±Á*]%|a,„} ¾°Ï¨ß[ bÈQ0¤ÕGšXÚ8¸läªG/TŸÆ°'õ9“@«O`ÈV0õï€ú)õO‡rÕwਯ®¢êÿí{Ô'#ÍQßÔw Ô‡F“R³òØê7·÷Ù(ù{ãS5J«ßPS…Ô¿˜›™ +-êŸ=ÆQßÔ7DêC£ŒúC\ŒúƒÌþÓ'Ýïhki¬¯©ª(»uãÚ弬ô ‰±Ñ‘á¡Á‡9Ïã´ÖÚ”µZo¹@Ø»!1©On³=–ðL¨¯ÈVŸC¬>Âð"`xa(6õi AýD¤>CPßÆÒ„­¾‚˜Õ'¥~oT£ìß4ze°Ío£L‰µõÅÁþŸ<ì¢Øÿ.ß—ÏûýæƺšªòÒ’ëW/äf¦%ÇÇDE„ +-8t`Ÿ·×Ž-›\!ì›ó†ýÙtØ-9Šöéí`Â~oÅ‹ápZ}IÀpŠÀ2<Ø‘ˆÀ ~Ú"°†Ý‚ÆD‰/ó4:¬Ï£Æ8jbD:jþàQsLÈQ£Žš9„ú¿PG,£þ+F}q±ÿ•ŸýwûݘýöÖ憺»•wnß,¾R”Ÿïwî ~?ß½œ°oI†}9™9³ö%ñrÐêó¬³BŠO}4Ó#$FIŽ;aÒ”é´úšC–©•­ãzw®úÑHý|¬~umCKûý‡O1†ï?|¤Gï+¯úßHõ¿ +-ªÿaX_S‰ÕÏÍLIŒ9ÂUßÔ7@êÏWW«ú“§Í Õ_¤½|¥¡‰…ƒ3¡þÙÎŽÑê Ù±¯„úßxǽgõËAý"Jýˆ“ÁõA}[}y¤þ$*ÏÀ`ã#–Qÿ‡£¾ØÙÿŒ–Øì¿~õâ9ä½Gîµ·4Õ×VW”ݺqíra^Vú…„ØèÈS!ÇŽúÿ/ìk¡°¯(/+L™4aR@‚RŸßf?„TOê㨯ª¡©¥³BÔ·õ·ì„™öDêÇ%¥e³Õoõ}¿úðÏÎU¿ Ô/õúAGúx{nCê[[¦úÊêó‘ú ¾=Gý pP?EØŽ½íQýo<ÓR~„£©ÿ´¢MKCm5V??+-).š«¾ûzG[+S–¾îR-M U¬þt˜ì±c$كͨÿ‹Q؇°ì¿yýòÅ3Ì~G[Kc}MUyiÉõ«E¹™©Éì"þl†Þ2íE 4T•æÊIÃnLÅ +-Àr x`ö£§"fZPýY ¾[}3+;'ŽúÇÃ"£ã’‘ú×n–L}tê½}ý©ÿ £µ ©_R|¹07#%á`õ@ýBر2ر¦ÿ²_/îT¥{ÀÏ9O™ç9Íè”zº +-•®¡R©iç¾]v$Gsä¤bR))éÞ¨I!¹mwÛ¢¨& ¹uQr§{f˜Ssžó{ßµöZ›½7›ÙÌ<Ϭßð®õû~Þï[Wßë|þ©ß54õ›@ýZ¤~qa^/‰‹Ô?è¿{§—¨Ï¶d™è#õ•A}¤þFýßdõ‡ƒýŸøì¿ö;;Ú[›Ÿ>yô ¦ªânÉ­âkWs³xÉ ±tÙ÷¡Ê>Ë €B¤€l` À™"L>úê“;=yšœÂ,¥ùʪX}S–›ã²…V?"Š›ÌËÎõKË«°ú­í`!¡~wÏÀêÿLªÿŽP¿•P¿B@ý giõ7Ú[ÃónÕr]¤þ|ô¸ƒÿ=Abõÿ$¬>:)VÚ ÅYs@zµõ–ƒú¬í7n¦Õ¿p)&!%#çʵXýGOš[ õß‘êÿ<õ_RêW•ßù¾¸0«B©ïÂõM±úPh”f)ÈM#Õÿ¢·úbNÊŒ‡Q_ê™ç³ßC³ÿæõ«¨ñµ65Ô?~x¿º²¼ôöÍ¢‚üœŒÔ$²¿«³#Ûjƒ™ñ}]­Åj* ç!¦ãJ4n¬ ­~¯VÄDxPR_KW•¨oÇA;½Ëoÿ¡£Hýhnr:¡~_ýN¬þ]zY8$õÓSâ‘ú§Žâ«oêúZ„úè–Ç¿[@ýþ,£þø “z§w-N/¥þ©³ ~|J:¡~ÅPÕïé&Ô‡“B³!Õ/Eêgó’¹Ñ”úÿþz ¨oÅ25õµús(õÇ2êü0êK…ý_(öqÙÇ-èŠ>$âÅ:žµAzR÷ Êþ¡²ÐßÏÇÛÓÝÍe£½Åz@@O{‰:ÊÆlEy9P¢ì8ª}ƨ?àPŠÛiåEx§M7X;Õ #¢ã‘ú×n`õÁBRý·BêÿOCZý|õÁB¤~UE)¨ŸŸžÕßï· ,õ­6˜bõ5)ÓêKlá€éåŸt:éæ¯è“^Šõ³‘úpÒ¡©Ï?éú¤°à„ú}Oê"tR!õG t`¯ï/0ÀÉÁÖ’µníêË–jj,úÇ‚¹J3!S&M”ÅééøœQàÛ€Eî44`ÚBªÒBaõÅZB[ȱC x<î†Ö€~Õ p¿‘¯iÜoÍôýv%^5Ñ—hõ%{ÕŒbÔ™aÔöQÙ'ÙÇe¿•ý¢ì—•@Ù¿’›ÉKŽ‰ ;rêXPÀ¾Ý»ð'âØY››¯Y©¯£µXMeá<%ŽI Æô‰Ç_õEΟ…ÕƒÔ—8 vZqöÜ°ÓÚzËW¯…¶Gêo÷Ùsàð±Óç@ý„” ¬þÝŠê¡5`ø÷ðçßSê?}ü°¶ªœPŸ—ÌEêŸ ôß½ÓËÔgƒú†ú:šÃ¥¾ª†–Ž¾‘)ËÊŽC©2$4"š›Ì£Ôøø)©þ!õE•VÿG¾úÏõ«+î"õs@ý˜KÎ>vøÀŸíÿõíAýµ«—ëjƒú æÌRÄ‹-;Žl3Œú#9ŒúRTŸ`—ý\ö!üoßô*ûÕ¨ì߸^m(1.*‚qüH ¿Ÿ·§»›ËF{‹õ&†%H}ŽéS'ãN$è/áˆT_†P:¡¾¨¿Ô7·¶wr¥Õ¿I¨ýæmØ<¬~Û ÕÇÔ‡ÿÞA©©ŸÅKâF…Óê»mâ°-Y&|õçá§V_æË1CUÌ—2”úJH}MPßÔgƒú^ÞÀ`¤~¨Ÿ…Õ/ç«ßÕßõáÇîžžÁªßF¨P?#%!&ò"­¾«“½µ9zÆêi/VƒWìlXlB}Qê3[=¬Ã¨/Mö©²è,û¨ì?…²_SUq·äVQ!ä"-‰‹¿Ñ‰àCöøîØæ±e³“ƒ­%ËÔhÕ +-½¥KÔQù›­(Õ—eÔ—|V_Em RßØÌÜÔßêéí»7 VúbdlB¯ÍÃê¿xõ6¯‹¿y«¿½½«_Y~çVqa¡þùoiõ)õÕUái7S^nª´ÔŸ*§0Siž²ª:Vß„eÉælr£Õâ&ñ²ò +-‹oÝ)¯Äê·´w aõñQPÿ¿¤úï)õëëú%7¯_ÍÉHMˆõÏ +-Øëëí¹Ô·17cÔÿ} £þp°O•ýøeÿ´¾†z ú^ô¾kWs3yÉñ1‘açCN=ßÈëë¯\A}Ôˆ–-Eåo>„Cµ?œ>„T>˜€ô^êÿíôßøêO.ê/õ—ê­\clfaãàL«ÿ]X$l^&Þ¼²{5b6opê7‚ú5Hý¢‚¼¬´¤8¤þ‰#÷}³c›;¨ok o»•ð»Ô—¡¾˜?Ýû¨}Ô—õ"õ—úë-ÙŽ|õ!dçãâ’Ò²ò +-Š~¥úúpTP¿±Zͽ2¤~nfjbldØw´úÎ6fÆkVBŸQSAêCAêÿµz­õGbõ¥ªþ/eÿ'‚ý·DÙoomݯ®,/½}ã:ž’{9<ôì©cA÷íÞ…¾‘³#ÛjúµkV.ÓÑÔX„*80m +-‘ZýÑŒúýM +-?ûœ TQ¨¢¾dé2P½…­ƒó?Ý·íøfßÁ#'@ýËq‰i ~Ñ­’²J¬~K[Ç`Ô «ßÖÒXÿøAMeV?3-1îr­>üo[‹õ&ð»ái§‚Õ‡—…ƒVŸ<êxYJ}ò¨ ¾­ã&ꨠþeP?«Gõ)õE†¬?õ©£ +-¨Ÿ–{Ô§êG5uT´×•é £¾tÙÿDÁ/ûoPê|ÖÖÒôôÉ#Ô¿YTŸžšqáìéãGúûíÚî ߈cgmŽ‘¾ŽÖb¤¾ÒL‘êbÔ?â +-°ìDšBMŠBg +-ÃzQ(F}ñŠV¿©_êçêCîÂIøa'aºàð³]p“û½à¾å_pý^pŸÄ\pýUìgI\pšäQѳf‚äÏf¤7Œúà>NŠÊÄ»· þs¬~ÓºµUw€ÂüœŒÔDntÄ…sЇ÷ûùx{º»ñÕ7Ð×ÕZ¬†Ã! þŒú8õ'PXU]SGßÀÔg;nróðÂ+ +-p¨Ÿ…Õ/—F~Ö§§øxPÀ^_o¸ål,ÌõÕTàe§( >!á ÔÇgõÇ’ÏÅÙs¨¨ê›YØ õ=½}÷?C„,‡¬ìÞ¯{Ö¼Ãê··À[ö!”¬~VZR\T8¨è¿{§—‡Û&G6¨oh ¯£©®Ê¨ÿÛ£¾tÕÿEP}\ößAþ_>ïìhomj¨¯{H¨_\x%'3-‰‹>ÒHÆþ=>ÞÛÜÝ\6ÚÛXàlðÕŸ¥0«?žR_€& "G`¥GQ+M¨?MNa¦Ò|eU ¬¾)Ë’Í!Õ >ÅMâeåêׂúM”ú]äæ}”T}¸ëáªoFêW“êg¤&ÄF^‡mÉ2Åêk¨*ÏÇu«?–ßfzmõÈoÍiõ¥Ìþ'2ü œ Üú^>‡T´67ÔC,€Èŵ+¹ ~| úH'‚íßãë½ÍƒV¹®v_õÇ2êK8”„B+Ô‡•õµtõ ŒLYVl¹ÒXýˆhn2/;Ô/ý?ûõýå•Æüìêº{b›ãŠ‚E1±RE•$1tÚPb ¸@QD*(½ÍÀPQÞ‡¢Åquh²çìsïûNaf€ÁŒüßç?xî}žÏýÞêz¬~÷“žÞ¾ «n½¿}ðàÎÛšj+Ë@}øÝ1AýX +-B}:¨¯ÔWUZ+uõ#õ×*©"õµA}:Wýs!—@}fFv¹dÍmí°dÏzûú¯&¬~šo¬~}uÅÝ’ÂüÜ,|d±úÞžnßÚë`cA3ÐÙ ê«#õäEÕÿ´:…RŠRÕïõ›‘úw õY @Éß÷4¥¾ôJTB¡‘^£¨‚GZÇFŒ´›§·ï…àðÈè‹M¨_SßÔÊAê# õ‡†ÇWÿ ©þ ¡>¼ôœÖ憚ʲÛEyÙéLxæ±ú^î.‡÷9ÚÑMt õ õe õgIA}YB}EB}]#Sºã¾Ã.î^§±ú1‰Ìô켂¢Ûe•5 Í­žúƒ¤úoÆWxˆPõŠÔç´ÂW–PŸÍb$DG†_ð%Õ·µ¤êìüjÛfuE¬>ô +-êÏT*¥þ¤¥>¥þŸ­Ä«Ï•P^a9ÒÚx¤‘„\õcéì\$!¨$$ÕG¾KBÉÔg§Ãç$ä©oK75ÔÕF"õä±ú’Pœú½nܼm;ê•nËWŸìu„úÝ’©?²××Ü^A}Ô+¨zÍåözÁ—Û«¥˜^G}á&{f>¬¢Ô—úc©ÿ ©ß ê7!õïê§ÁbÀ!ùûzSêK­ÆÊ¿rÍ¿Ò•òoŒ@þ%$Í¿ ª?e‚êãNô_C¾püMLÂ{}á$ø×ÈêÏ–ð_C•ÔŠR_zêóÐGêÃF`õ õŸ>yü°³½í~S}Meù’‚°g·¥©‘Þ®|õ—x9xêO +-EÔ~ÕHõÿ#=«þB¹% þêuJjšZ;vé›YÙcõOøø†^¾ ƒw]hð°ú/Iõߎ¯>¾vPžú¤>|ïê« õ³X)ñÑaýÏž:þï£H} šÎÎ/·nÚ ²^¼úS%SŸÛ¬õ׫¨oÚúåNš… ¹¾gý/†ú)¬,Býêú¦û:@ýžÞ¾çƒ/_‘[6ŽúoIõ_rÕïjokõËAý¯g¤&Å^»ÈUßÞÊÌF[KSC &Ô_"·lPÿ#œf(õ'©(õ¥†¾úC\õ!õýúK¨ß¹¯¥±®º¢¬´ø&$¿ŒÔäøèÈðÀógNyº¹8Ñê±u“ºª"$¢êÏ Ô—¤„ÔG=cÖìA}PÙŠÏV¯SVÓØòÅŽ]úÆæVöß8rìû“g°úqÉ©™ ~qiyUm#¼ÇxðúObõáÒá‡Ô¯«¾êßÈÉJK‰â©y ô³Ãêã'~!VŸw×ï¦þl¬þÂEŸB³ þPÿëo L,lvï9x”«~T|JZVÎ Pÿ©þã'=hË&¨þk¤>4‹Ôo¬­*/-õ3S“ã@ý ógN~ìÈoí­Ìõa´·h¨)ã<êËŸX¡f©©~ßE©/5õyèã}@ Ô|RÐý¨«ãAksRÿö­›7rØé̤¸¨ˆðà?Ÿ“ÇÝÐÙ[[Ð uµa5À¤þòeKĪ?…RÔE}B¬þzå  þ×ß蛘[ï&Õ‡Á»—œ–™sãfñ{Uu¤ú=ƒ7–ú|¹êÃ߇‡þÞb¸ñÌ´äø¨+?„¤úÖ&ú„úÊë1„£©?êEKÔ,V_ßÄš«>n6ž×luR¿KDý·’ª›%Õ¯«â5G4K¨¿ÛÚ5 ê¿s³TI©(õ¥‰¾¸¨‚Pï3HB;ÛÛî75ÔVAð+‚0”Åb$Æ^»gägtôÐ>'{Ø ]ííZ°þ>_¹|)¨/ó/PŽ€úS)õǨ1!$â¯2/þò ôÇâø+BÁÁ¯þï#Ô! ´ÇîÀ¾cü­ÙOxê¯ÃOÜñOÜõqž8ÉšþØ`õñÇæÊüµÈÇF–T&Ù,™f¨©~ßE©/%ôE£>¡þ‹þ>X P¿«ƒÓÚÒX_SY~§¸0?/;#-ŸQ¿¯·—DZ#÷:ÚYú:;¿ÒÒÔPSõ@}9”ˆú3gð–ƒ €Z±ÅsPd¢ed¡‰^³^E©¯c@³°qàª1,":>…••“_Xr÷^u=Rÿá‹¿OIõk«ÊKoÁ;Ÿ™šwírh O}+scý]H}5žúÄ¿îšÿÀODýêÏýdžÌB9R}5¤þ.}cs+{žú¡°eÉ©™×ü©¸´ü}l^T¿¾RMa~N+%>:"Œ«þ^ Ì6¨¯Ž‚<¨¿©?G@}~·“=5TQêKIýè‹Dýž'ݺÚÜon¨­®(»} ²;™xþì)Owç{léfÆú‡¶mÞ¨¦(È/]ŒÕÿ'¥¾Ä%è ¢çò'z¢ +-žhCš¥ šh7Ooß Á ~ƒÅÎEêWêw «ÿ›¤ê÷cõP?#5)©ïçsÂÃÕy¿“½•™±¨o¼ÒºU+ñ?ù¿‹ú¨Ûé3fΞêÏõ—._¹z’š†&¨¯glfeï´ßÙÕã„_ ¨ [voYUm#Ëú%Uÿ7AõûzaÄIõ+ú¹l#!:"<ø‚¯·§Ûw‡ö:ØZÒ !ÑlÛ¬®¢ˆÕ_,»`>šlJýÉ.J}©¢ÿ;‰>^PõvpÚZšpÔ/)*€àÇb$Æ^»àçsò8qD6–¦FˆÈCªHýÄjÌ#¥¾D%ªþ ¤>8½T^aÕˆ‰vÜw˜T?<2&‘ÎÎ-(º]VQSßÜÊéõŸõöõ þÔ_ý7BôÅëïë}êw¶·ÁK_‰Ô‡ß3)ö꥞úvt3#=ííZšU•Ö"õË-àª/ê „êÄUÜbPÕZ%µšZÛµõŒÌèv|õ/]Mbfdç‘[ÖÜÖÞ [†º…-{%©úÃC(Û  nAýNNks} Äš¢‚\v:#!&’Tßåð>G[KSC]mP£ª"Ñ­,Ñí,qÝNöÔ|PE©/5ôùQ¡OFýõŸBÔïÄQ¿¢~é­›ù¹Ù©ÉñpD¡Aþ¾§Ox;zh¯£•¹‰.0°Ecƒ +-ÚŒË>]„WƒPvC„j=„ê/âÔrP;¨kdJ·õ]ܽNŸ ¹“ÈLÏÎCêWÖ4 õu"õÑܽÅAõ õáÖÁÁ†šJä`^v:31Ô8wÚËõMt¥¨þøÝ:ñ»½:V·ÿ•¼Û×cuÉïÖqÜnÇÿÙP%¢Ô—šú<ôa†Hô_ <ïëý¥Ðïêà´¶4ò£~‹‘xþÌÿٯ﷨Î,à»›õÙ$Ä’„ÁRA iƒtdèUÁ‚mQƒ"¢ˆ"Q•&½ÃPT‘6 )bA1(°*›‰Éóìyï½Ó(*øÓ=ÿÁ¹÷œÏû=GýìÝåãåîlociJ5ÐÕRWQ¢Èɬ]%)¾\TXè[X Aó±¨Oª?Eñ¦ß¹\Êâé×h<ýÆ&é·¥ßOw°ŸÓAH¿à`七ÎöDú݈Ò歹‘~ùªÏï²1„ýµwãà²I„Ëf&ß8tÙt¢Ë¦šý²9s’uÙ8Àec„ÔWREê/f©?ŸlRýÏS¤ú³…þGúï^þûÐÛóøaWG[K#“Q]ADýdÖ +-¾÷6WG[ks#=M`@AVz r@Ô_º_ "‘êOVœêÿëË/¿Fê "…E–KH®–õU5´õŒL,m\=‘úG‚BÂ".]‰…¹ËÇæŽ96w˜ƒo¦Pÿ¯1áÌCï=Üx˜ú=HýæFUEY =7#%Ô ô÷Û·³¨o€ÔW”‡7~å +-PûÙÄ ? õÿÆ«>ÚßEãû+#¯8¾¿°¿~þÁ¡á ~BJF.½¤¬¢ŠÑÐŒÔïéëGÝŽ õýíÝ»±nù´Ë¡þ–úOvµ·62k@ý¢ü¬´±1—"ÂBpõ=]h–¦FzÚªJnI P_4Äh“ê¦"ÕŸ9ôÿ$ÐG«€E}@è%¬ŠútÞomªGQ¿”3êŸô?°Ïwû.4+3cÃÍ›4Ô”!ü­–’X¥¿¥‹Qüc©vƒ\Ž‰Š[}èy Ð@ ‹.—Z#-KQFêSM-iŽ®ž>¾û †¹KJËÎ/º]^ ê·¢¹ëÅæn˜}î¦R»òÞ¼z‰N¼žG:ÚšëUwKKè9É ×._SßÝÉÎÚܘ]}Ñeè‰dWÿ‹éªÏgEÙÕ76·¶srSÿÂåk É9ô’Ò»UŒú涎@ýÁWC#¯ßŒíN¡>Ñ.RÚ…lƒ©ßĬ©,¿]”Ÿ–séüÙSÇí÷õñtu¤Y™R‘úÊH}) 쎅vIõ?w‘êÏ úñAÿõ0ôúº»ÚÛš˜µUwnÓs³Æ?PPñœì¶Z˜PõuµÔU”(r2kWCEêcyhþ¼¯¿âÈärð­©Õ—£(«iêèSͬlݼ¶ãêŸ=u5.)=» Ô¯e6êpÏÝdêÿÁ­~/¡~-R¿Ôõ>}âèOÿÞ½ÝËÝÉÖÚÌX_GyøÝR|ÔgÿÕ·ûÎv‰ýBêK­•‘SÄÚ56³¶ur÷Ú¾ö÷ÄéŸAýxP¿©_K¨ßÛµûêcí"õt€úµ ~qAvzRüÕ(B}h×ÍÑÖÊŒŠµ Ó ê¯àQŸxäÈÁžå"ÕŸôÿG ?2ôjvÿYoÏã¶–ÆzFõ½òҒ¼ìô”ÄX>Qß|‹¡ž¶¦ÚÆ +-†V­A‹±dÑBÖf°©ÿwr9øÕÄáWˆ¿0u5>9=§ ¸ônem}bðɃìsÇ_ý?ÙÔK¨ "õ›êqsÒ“ƒcêó0ø1áwÊGN†ë‘#Ú=Ïj=rŸÖ.×#ׄ=rD»<œë‘ãÚüsŠÓ†¬™(Rý™C[Nôaž#ô!ÝoiªgÔTÞ-»YT“™z#þZôň³lßE}Sªî&uUeEùõëVCCQ-†À|Rý)Š]A¾-#¯ˆ ´±¹µh?ÿÀ`,ü&@ø¥£ð˘(üþñÁá·«~ó!üÆ…__O7Gš•)U_[CÔ—ž-õÑi£ª¡­O5µ¢9ºyúpž6ùŸpÚ¼çV¿8mè´¡Ãi“€N›Ðà@¿=;~pw¶³676ÐÕú~£¢<¦>šî¥‹‘êî"ÕŸQôgGÐЇ÷³½µ¹¡®¦²¢ìV1=7+->OÔ…ð3!ÇòDýïQÔ‡µ_.ŠÔ_²Wm©þ„Å«þ<èEK¾ùZ|åªuÄ@bíá«}=!%#—^RVQÅhhnëì~ÔÓ×?0øŠ]ý÷ÓU|þì)¦~#³æÞ[EùÙiIq1—"ÂBõ]h–¦Fz ¾ES.;üo²úЯ°¦¾,E Ô×32µ¤9¸ꇄEÀš%¥eçckÆll_³áVÿík˜õÁ þãîÎûÍ ŒªŠ²›ôÜÌ”„ëÑ‘á¸ú;½=œí¶Â€ƒú*P¨‘çE¶Ùž¼_²f Hõg}l FÙÐï{úäQwg{[s#³¶ªâÎí’¼ìô”ÄØ«—#Ï… +->vøàþÝü¢þ)C"Xøƒ½Àã{"Wƒoq*H¨/€«/"&.¹zÝz… *ê›6n±Øjïâá½sïÃÇNž9ê'¦dæÞ,«¨®kh¹ßÙýøi_ÿ‹ÁWÃ#¯ß‚ú¿½›Z}ìÕÿu© +-ê·4Öáêg¥Ýˆ½‚Ô:rpß®·¹:ØXšéÁWR•A}ü‡'üõ¡ß¹Ð/Rÿ;Pú•–UPRUߤgdbiãàºíÇ]û Bê_‰…5ËçZ3Ô/¬Ù(¶f¿O­>ô‹ÔÇûí{ŠÔoi¨«õ ó2S¯G_ßâ¯àÂqׂH}# BAPÿâ•ØÄÔ¬¼B»j;\}\A¤þd +-ò¨Ï©`c]5¨_˜—•š{…P©ïboca2‚ÓξÓå _{¼_ì•›¼ßIÕŸ¨ßgÜýÞÀúe½r.“½rÓ½mÈš"ÕŸôáäôô;ýzý¢ôqâÑÇ ?rü¨ÿ}¾;¼·¹:ÚZ[˜Põuµx¢>Z –ú¤ú—úhžç-\¼ä!P_Bj´,EIUC›È¾ž>cÙ7fÂì;}?$ûz°e_y¾êÏùPõçðU_žïmsn›ÔÌ<ÎÛ†ã•{7mõ9n›ÖFæØmúm|}<]h–¦FzÚªJYé5Rj°SÆ›Tÿ³©þ,£ßƒÐ¿ßÒTϨ©¼[v«¸ 7+-9!6&ê¹°S'Ä?Ž“½¥™±áfm 5®¨[±P€+ê“êOX©¿ô[!aQL}9Š2RŸjjEstóôñÝ(à8>vIiÙùE·Ë+k˜­hìz±±†±e_ÿWM¨—Þ üý¤~s©OÏÍLI¸èï·g‡·‡³ÝVó-ºZpÜɯ_»j¥¸Ø2\ýóçòª?YÃœê£ÆÔ_&&νÀ þ?ÿÀàÐðÈèë )™¹t¤>£¡©ßÓ×?ê õñ†ß³ï¯úDÃHý¡—¿<Ö‹©ßĬ©,¿]œŸ–uþì©ã‡öûúx¹9Ò¬L©ú:šjÊ9¤þ +-õçàÃMŽöì©þ¬¢ßÛóø!Ž~Ž>=/+=91öêåȈ³§ƒáÛøíÝåãåîâ@³2ßb¤§£¥®¢D™,êsÄ!r3xŠè/8æW™è +-P_ÔWÓÔѧšYÙ:ºýŸý:ÿæ:ßã~îé6ÍL í“Ý-»¬ CÉòµï;Y²$2˜T%¥´Q”]È®J*úJb(ZƸ•êÜsîLçžs_ï÷çóµ|}mcùe>¯ÿàõù¼^÷óåéóŒÆ.>%#» ¸¼ +-Ôol¦·wv#õß0݌ԇ‘úϺ;·µ4Ý»}£º¢´0'35!ö©¾—›“¥©V_^žyøáÜœÁùPÌKÊÊã60µ´sB ŒÕ?›š™SXZQ}ãö½¦–¶ÇÝÏú¨áá³VŸh¸ï94ÜNoiDê—äd¤Ä_8uìðÁŸ|=]l-L °úò2¸a^nŽÙ7LÕœ‹R¡Ñïîìh§·úõ·jýâ‚ܬË)‰Ïç9v0$h¯¯—ûNG[+3cšîvM"êK@Ô˜õ¿¦¢þô5‚¼A@P4±´Ebõ£‚9%åÁÆ:F°A4v¬ÕGsð'³ú}X}@©_^‚õº9ÙZ*OŽà’™«?a9FFÏÑ0ùÌ¡†S¨á6FÃä3 OþÌmX‡›”ú‹X”úó‰þFчÀèwaôïúՕ׊ s¯d¤&¢/s"âphHpÀoW';ks=m-­õe$ÅE…YDý1kA©Ïºþ1Qý0ϫ׮Ûó,€çYžœgK;gwFôŽƒè›[X2uôýsVÑw€9úf£è{öd}!úÒpô…_.œ— «ÏÎF^vãîºuL,ð +-ò¸áÂÇ‹ã&‚é¸iAÇͳÙ7ãÔÄÇMO×ã¶VÆq“›™šM7ÞîÎvV¦†z ¾Šœ³¢B|LÝôêÿüŒÔ_¼Äê?l¾çÖ¿®—]Í¿’ž|éü™GÙêït°17ÖGê+n–ÆêÃ_ø<¨s@Ç‚BH}E¤¾¾±¹ÃNP?hÿ/GOœ9)9ö¬ ïYóÃvrÏpÇ?}Æ{öÇ$êvü_è©OtLªÿðAÃ[5•×®æe¥'ú¸cks#¢c˜rQ!²ãÙ¾sT͵(õý'úwênÔ\Çèg¦%ÇÇÆœ9y¾Ë¾@ÿÝ^î.Ž¶VfÆ4]m-uUÅÍ2’â¢Â1úÐF0E}b+(õ'©©’/™| °>þ “ү䛺^†Ã36T˜¡~ïÓ_‘H}dàdà™ñ¢ä ¢äËO$ßU³K¾Þ¹o&}çÌ­Ð;GtŒÞ9Ôq%ÙqǼtŒÞ¹G¬Þ¹`–ïÜ_ºn¨škQê/úåø«¤'ÇÇÅœ:vp_Ð^_/NvVæÆzÚZ[Uåe¥ÄÅ„7 +-ðórsnX¿nÍê•TÔŸM‘ó¼dÌ8¨Ï‹Õ—Ù¬¤ª®¥C3¶°qt…ä| ,‚˜ºìüâ²ëµuã’ïïsO¾­êoBò-ÊËJCÉ72üPH Ÿ·‡‹½•™¡R_AN +-©ÏÇÉÔGÏ<&ð¯¨[õW"õ9yøúRr +-H}=C3+¸n¼ýF®›´_7Ó©×Í¿ÿíõ@¾nèÍ÷ïÖÕ^/+ÎϾœáìɈ° ¾§«£­… Mg›†ª„Pÿ^nRýïHõ—ŽðÅœ›¿WQê/ú¥Eù9€~B?òhØÁ ½{¼=\ì­-L õvlûQm‹’¼¬´Ä&!AÜ(Að[ÉFEýYÔXÇ37/gIy%Um:4 ['WOßg4uñ)ÙÅåUµuw›éíOºŸ>ïxÃ.ö Ð'£õ§-V²ë6ã,)+ÇÙÀÄÒΉçcQçbR3r +-JÊ«nܾ×ØBÜÙýìEß+¬þð Õgøùã0&Ô·µ4Ý»}£º¢¤0'35!©ºï§=^nÎv–¦º ¾²¼,&©®»YÈú¡[½fb˦–Äï EêCË™9…%ÕÐrSKn¹ŸÑògV‹Æ¤>‹–ûÈ–Ƕ|.jbËðÐAË#Û¬:ªæX”ú ŠþÃQô¯æçd¥§$\<öTäÑá!Á{|v¹9;ØXšÑt¶kª«*+ÀÝ+.*¼Q¢>l€ŒúË–AŸR²|¿|yø6Š0_q‰©™¹…¥ÓÈZý)¤âà‹ $‚¯|uç|'?o8GÎe8oÐCg qÞŒ>tÕ¬ºé[žðР⇮Ôo%ºÒ‘ó&”8oì­Ì õ´5ÕTäˆó†gä¼Yþ yÎRê/xQê/6úðI"‡îðóñôm-ÍŒhºÚ€¾Šâf)q1}Žï×­]À賊úÔRL¬ñê/ƒq^ê¯BêsúB¢âRr +-*jšÚzFfVö.Þ~!‡Â#OÇÄ%¦eå•VÖܬohjmëèêéõß½›aðý2Bৰú}ÏŸvw¶Ó›ïÖÕV•dg¤Ä_8{’PßÓÕÑÖ„¦ê+úb‚ >³úøOó³Éž—LÜ`P_PX ÔWõuh&¶Ž®ž„ú°hñ)ÙÅåUµuw›éíÝOŸ÷ ¼a^´©Î›/ õ? ¿74øöUÿËÞž®ŽG­êoÖT^+ÊËJKºs:2üPH ¿‡‹½µ™‘>R_QN©ÏÏÃ…Ô_…ÔÿGJýE(JýE¿iý&ôBè» ô tµµ4¶ª(ÊËJIˆ‰ òóòpq|¿~-ÀÎÛ@Eý“úhšW°±¯Z³öÿìׇSÕÙðI¢ÑØ)"ÒAQ”òàѱbAéU:ø@)+v…µ¡¢Æé ½IÅB‘*¸¢.JpGE™I6£»“sïï÷*y>Ðd&¿û|çžó9çHÌ•–U˜§¬¢F£ë-_ebfeïäîå¼+äàÑ“g.DÆ&¥fåaõ¡èúݽýHýƒŸ˜êTýw ~?Rÿé/mÍ µ þõâüìô«qW@ýc‡Bwo Üìíáì`m¾nÕr#}mM5P_AN«ÿ«/˜€#eõ¥å@}5Mm}ȼÎÜÚÁÙÃ{sà¶Ý¡‡Ž–ž_|Ô¯mhnCÖƒíÝ·¨™‘úúý¤úÍkîݾYV”—•–{%âìÉ£Cvlörw¶·63ÌzÚ´±d¦Þ˜¥þ÷F¿ê&‰þÕø„þÉc‡ ôý|.Ž€¾© B__G‹¦¶ÐW”ô%%f‹ÁáK®ú“Ъ?ZõG}|ö^iX@sk{g/, ¨6‚(ºb\t ¬¢c©EÇVÿábõ‡úHÀWÝH}°¼^œ—–Ç0€hÖ‹Ÿúä¤Ã™‰I™Ý!31éPæ$Væ‡Ü™?~Â&\f4épæüì4˜t¼“Ý7Ú\÷ ;óDŽ"ÿquóö(õ¿;úålô/"ôÄìa¡oÐ_½r™‘¾¦¾XeÁ|@_F +-ÐGw/‰þd„>µê ð8ä®æ¹2rŠ  º¦Žþ’«×™Û8¸xxûm'÷Þ¨x¼÷–ã½·…¹÷¾&ö^Aiï½{»í½©I±‘Î{¯/ÃÝÉÞÊl­ñ2C=:MUEY Ô—”@¿Ž>_wB©?i2¨?}¦ˆ¨¸„$¨¯¤¬¢ +-÷á2ãµø¾að¹onÃ}Ó4ì¾hÒ±ï›÷pß ÷MKCÜ7å%ù9éÉñQpß„þyÏö ?oO ¤¾Ž¦úâ…óA})¤þ¬ÓYêO ÔÿÞRÿ‡¢†D?£ïʾ. ¯ +-è+)@#HÎAèÏÂý›B_°7\ýiPÍ¢b³%ÉjV×Ò1XºbÍz › .ž›¶m‡j?uîRt|rFNA R¿®±¥íɳNP€·èø +-ø;[} Sý>Rý&P¿ª¢¬ðZfjb ¨âÈ};·úû0Üí,M‘úºt ¤¾¼¬Rÿ:ñç¨B#õg!õ¥då‘út]¤¾©¥£ÃÇëÎ}ŽœõcS3¯–UTq¨ß‡ÔÔ'Bæì´QÕïëéê|ö¤½¥±î~ueyIANFrBô¥s§@ý½;~Ú²ÉÓuƒ­Åú5+—èji€úJò2DhØo¦|KhêåQêOô«ýR@?“ýP„þ/„¾ ‰¾.]“>½â°ÿ0WýIÄ +-Dªÿ'Jýßp§°”‘Wš¿P•«š} š÷î;~úü¥è„”ŒÜ‚Ò•Õê[ÛAý®ž>¬þàÇ!Ôg8ôqð=¨?Ð×ÛÕù¼£½µ©þAuåÒÂÜÌ”„˜ËçOÛúûltu´µ4%ÄêË°Ô¾ö +-ª>Ǩ#C#õ‰Ð¦DhfèË1 )™¹…Dè¦ÖöŽç]½}oÞr‡þ2Bè/<¡±ú½XýÖF~¡aÔmtC¡Gu8ÔË£Ôÿï¡ïdoci†Ð_b «­©¡ºˆ@_zî Nô©U_àÇ­þ$ríuíS`í-…µwÜì!¬C–äf¤àµ—PŸsíÕÑR‡µW©?[ ­½S‡«?Zjnõ§ò9p …-l7¸zn"F>pð¨+Aê×˨ƒ§ 80êø8¾ 7';+3PßHNSõd¥‘ú"3gL#SSêÿG©ÿCÐO ÐGèïäDÝš•Ë™è/„&“•ž mÍO¢ÿ7¾èSýÀ÷ñ¨ŠyÚŒ™"bâsæJË*ÌSVQ£ÑõŒ–¯21³²wrgøï +-9ê_ˆŒMJͺVTê×Ô[ý?†ÈOýW=/}úK[KC-R¿8?;ýj\ÔÅüýØ¡ÐÝÛý¼=œ¬Í±úÚšÈ?E¡ý#{˜jE25RßÜÚÁÙÃÛR‡:w5=;¿©_ÛÐÒ†:­wÚ;V§šúß85´¡þ«nœº¹¡öÞí›×‹ó²Ó®Æ]‰`¦ÞÌ•Z§vÖQOøG©/$ú¿ˆ~;_ôÏs ï‹Ðwà@_KC}ý)ý¿²Ñÿ3…þמÀ[¯9l½à_×oݹWÛÐÜFÖÜk¿¡qôm½Ø?/wçѶ^þQ؅Þu4mâÂYçŽg](9ëP§ãNk`užu¤†Y×ÏšuuĬËI‡ f×…³~õŠ¥:Zä…#5m9”ú?ðQêúý ú†\èKúâ¢"³fr¢?‘}ªø?nþp1OƒbŸ-I³º–.f Û ®ž›¶m‡b?uîRt|rFNA Úzë[Úž¬þàÇ¡¯«ÿ;[}Ĩÿ©ß×Û…ÕozXs·ª¢¬ðZfjbLä…3'ŽØ·s«¿/ÃÍÉÎÊt­ñ2C]º†*¨#ŸÉßT<í…UŸ_lº®á2㵦–vŽn _ÿ­;÷8rÔILͼVXVQu·¦¾ «ßÕÛ‡ÔÔ'b ¦þÐÇABý^¬~kcýƒêÊ¥…¹™) 1—ÏŸ>¶ÅöÙèæhgÉ«/òí±©'ô£ÔH}AÐÙɃ~ÑXПƉþ +-}A¿¥wçÒ« +-K/æ–^7†‹¿Ë¥7ªî>¨ojmïxÞ ü ¼yË­þ—ÔG•ÁÅßÛ7,þš†ó·wâÏÕÑÖÒ–^CXz9øbéå{â|eØùoe»˜„”ÌÜB<ìêÉa7†Ø\îžvY©‰±Ìa'ƒçÄ™‡Nœ9âbBœ8ÔúQê ‡þ?dž¾íÈè‹ñEŸR_€Gó_8jù?ì×ùWûðu—…u¯”ÓÂ’´Ëœ!Ju’áÊÑ<ª¨T$)ÔI9dÈJ¥4Ï¥y$ +-¡yˆhØ®YÜ{ÖźŸï÷yönïm·Û{§ßžïð^Ïûy}>¤>tYÔ_¸dÙJyeUµttÌ,mœw{zûù‡GÅ'gdॷŽXzûˆ¥÷ƒÐK/«ßÜPƒÔ/ÊËJKŒ ½xö$Rßc×N»m&ú¿úkTå–/]4_>?Œü¢¤ú“Yù;7Cý‘X|æ¬9ä?,§¨‚ÿa}‹mv;‰çäÙ‹¡‘±‰pâ'N3û‰óIÐçRÿyV¿©®êþ[%9)ñÑWB‚üý¼=Ý]l¬ÌŒôújÊ +-+—-Y(Cõg±ª?™¬;Uõ {”úü£ÿ•ú}=Ϻ~2ú§Ððq×PŸ†Ô—SPVÓÔÞ¸YÏÈÜÊÖÁÅÝËçÐQÔe¢r…,•ë†Ê1Õ‡Êñ­þ§¡Xý:¬ÚšëkÜ-»Q”›™šqÔÿóß÷íqu´³67Öß¼Q[sŠVŸ6o.ÒÔŸösÔǹçÑ°ú +-*8·¾±¹µ£ëž}ðƒú—#bS3s‹n”Ý}PSßÜê÷Ð^pþj\Õÿ>¢>Ê ¡þ@_ÏÓÇÛšê«Aýë…¹×R¢#._8sâè!/wWG[È­‡r«±å&7õ„|”úü¡ÿ+úïß¾yý¯—‚¡¿ô§Rè òþƪßÜe´óâ.Ó;/¡ŸÅˆ~P¹ˆ˜ЯéW]ßÔFVîåë·ï rŸqå†ÇÔo˜©ßÛ×lúÝ-㦟•¹¡±ó‚~Üw^>>:¯‡6Ý8¬ÓΑ1í wtBêµ\bÚ±æ~#ln<íž>yÈ>íðƒ§Ý(7Îl–g +-«úTÛ'äQê‰þw&úx¡}ßÐÿulô§Pè ðØÕŸ +-]ž&2]l†øÌÙs Ë غlAtUîìÅÐÈØÄ´ÌÿøqgWÝ8+å•U5ÖnÐÑ52³²ÇÓÛÏ? Ý8ñ¿Ú¸oœAz/Ü8íÍ 5•å¥EyYiI±‘a—Î:vØw¿Ç.§Û¶šlÙ´NK}µÒª²‹HKê‹Aí‰M‡R¢¥þ˜ê³¡?Ìý~„þc„~ƒ°èÓFA2'úÔo0úã†ßt±_°úRÒ Ë®X¥´Z]ký¦-¦[·ïprÛ{ààác§Î] +-»›”ž•_\Z^QYÛÐÒê÷Ò±ú‡>óVÿÛˆú_p1Hõûûº»:;ZëªîݾYR‘|þ4Rßs·³½¥©¡®ÎzP_Iá'#%)øý4õÉà’R2(¸¼’ª†Öz]CSK{çÝ þ‘ã§Ï‡GÅ'gd”ܼ}¯ª®±µ£³«»¯«ÿ©OçOýÏC õû{ajoi¬Eêçg§'Ç]EÁ9x`¯›³ýv¾eÓz-u"øB"¸pãŽzÂ=J}AÑÿ2ú­ý‚¢/ËúÔª?ö#»<‰¥ÊÌ•WŠXy•ˆ•×ÐŒÄï ‰_\rzv>Ư¶±á×Û?øâÕvõ¿Ž¢>j+~ >©ø!õIü˜ø9Ùoßjj€ñc®¼’B¯¼¼ŽœÇ=w»¸$^ Á+!xûx‚ÂÁ_’Á9ÆyäÀ¸ããÈ™L–žêûD=J}¡ÑÇúgøC_btô'Qèó÷Xíc¯²„$ «¯ ¬†Ô×32³²upq÷òöó +-¹Ÿ’‘SP«‚Ʊ¬¼„^yé½Ïž¶OxõqrHŽÕŸ'½€ó'v‚ŸØ9¡‘±IiYyã=r 9Û‘óôñÃÖ¦ºêûwn]/̹–’}åò…3'Žòñrwq´µ27ÒÛ¼Q[SMEA’χö#õgˆNgªO-ûû(õG7œD@ÿú¹™é)‚¢G®8…þxÞhöá*ÓP•åTÔ4µ7nÖ76·¶utÝãåsèè h\DtBêµÜBܸú¦6²q õQãøVÿÓЬþ½©ßÜPóànÙ¢¼Ì´Ä˜ÈЋgOþùÇïû¥þD?J}^èÿýÿè¿ô_Œ ßÜP[-úò£ ÿ +-}á‡ú¨ÉLõ¥¤,–]±JiµºÖúM[ L·nßáäæ±ß÷ð±Sç.…EÆ&¥eå—–WTÖ4´´ÃÆÛKäoãýÆTÿ/Bý°ñ¾bn¼MõÕ÷ïܺ^˜s-%!úJH¨ÈÇËÝÅÁÖÊÌHo󆵚jÊ +-+—-Y(C“ÄꋉŠ0ÕÇ_Ÿ¯/OFŸÄò‹ˆŠaõ%i2 þJye5µtôŒÌ¬l\ÜáÊñ +-¹ÿZ!Ë¿ÖÍråü[°+ç#VÞ‹®œ–†ÚÊŠòÒâü¬ô¤¸«a—Ο>~äà½nNöÛ-M ·lZ¯¥®ª$ê/”‘’”€þ zB~5.9=;¿øæí{•µ-í]Ïzû õ?}æ[ý/¸¤úý}Ý]­MuU÷nß,)ÈÉH‰ +- +- ð÷óöÜíì`cif¨«³a­†ª²ô9Vý/_è¿ôa«é§÷v?}ÂDÿN‰~" ŠÐ?N ïF¡?ñM>ö&3^…‘…×ÆÁ…¤Þ¨ø”Œú}ïGèCã®>Oúj1}ùÙéÉqWà ¯3ç»ԟ3{¦ø/b¨¨ãQ²3ÏIö3ÇÎ{'7ÆÀ cxäÀ{õ†}à÷ÀÃgNyæ\`œ9Ž¶VæpælÔÖTSQ[¾tÑ|øú3D§sQŸªýï›ÌN¨¿Ô_ÿÓFxÅrðŠUð+>¯øÂ¥«×oßó ‹ŽOÉÈ}TXR^]×ÔÚÑõ²·Ÿvæ|˜÷™ƒ²ÓÕìëyñ¼½¥¡¶òYñ“üìôä¸ÈЀûw=Ü]œÎÛÙXY˜êiªíÛ½cÛi ¬þÚ5Dvx?°žÖ‡RèBèãW ´¹¡·o&Їc¶ª£Ÿž’HGÿúµ+Núßlf黰ɤ|x“Õ´ôŒL-ÛØÁ&»{Üõ ŠKNÏÉR\VUÛØ‚®/Ü0,Ü8^¸ùªÿá·Q¬þ`R¿±®ª¬¤0?'#9>*,ÐËwáŒíqKS#=­)òq2ÈÇZßæÎÁ?'ùŠE%¤‰ìšz†Ý–!{|r‘½®±Ô‡ì¿L~lÓªOÏþÇtÙ[PvPŸ–üñ ;ñãAöé~<ÖïjXJýy¨ÿ'QgȪ?2ü~*Íëè4]í€~- ýŒ”ĸ¨ðà€)èPè/ôLR-2ÛöeH}n>þ B7In–SPRV9 }ðÐá#'¦ë» _+–ïõgÉë1 +-ÛñX>Zß½sk¢ïêjªíÝ¥¸UVZ««ð#çŠe þ¢©êÏ/<³ú´W¼ +-Ý9‚ÂpçÈ2Ü9ðãÑ¤ô쇠>Ü9-äcÃwë?ÞŒwNxŸ·çk—ÎÂcvH_[]EYIANFRLDHP€‡{¼‚eìKØèá¿c!<5¬¥þ¼Ð‡½þH¢ÏîØ_ú/»;Û[›j«*ž"ôSIô½úÎNÎQ賡Ã7±ÈH}7/Ÿ€ °ˆ˜”Œüö{ö«ëè›……s¸|톧·PxLBjfnAQiyu}R¿w€Pì·ñÙÕÿ/]}T ð%8 ÛñÏÁ¾W ~sCm峧f§%ÅF†<ðñºåæ|Ñþ´õ1 ] U¬¾”¸ˆ° ¨¿ +-©ÏΠ>+ð‘Ïx–ðâR²[!¼ª†Ž‰ù1ëÓö]ozù<‰˜ôØ^õ ê}ÿdÿÏ|ÕGêCø×½¯º;Ûšê«+J‹ +-ò²Rc"‚ý}¼nº^qÏjzjXJýÙѧWý“{=2ünè-”¹þ^hsmÍ€~YI Ÿ™šèç}Ç㺫³“BÇÆè+ïT¤£/H¡ÿµ‡Ù=¼Èl°ÈË98¹ÈE•Þ²Uq×^5M]C +TwÝ`ßB"ã’Ò³ñ¾Õ’uwp¢î 7[ÝýkrÝ…C*ÁDÝÍLMˆ ò÷ö¼qí²ÃÙŸO5;¤¯­®¢¬¤ '#)¶Qh?7×JŽåËØõ!ý"¶ÅìË–s¬äâæYË¿Ahã&ÉÍr +-JÊ*´2;r‚*,Á‡Ng÷ç:¿3:=pè´À¡SVü$?;=9.*4À÷®‡»‹Óy;+KSC=Mµ}»wlÛ"-± Ôç_»f5J¿¥Ç¯€Ra‡Rvõ'Wý‘á÷Ch±¡Ï¼èêlki¬«©ôççf¦%ÇÇD„úùÜñ¸áê|Éᜉ¾Þôׯã£Ðÿº3Ž{K‘{«I÷ÈEVÓÒ32%ÙÝã®o`hT\rzNþ“ⲪÚÆ´oýhßõѾ͡þ'ºúhAÞÁ%‡`WGkS]uyIá£ÜŒ”„è° ¿{·¯_½táÌÏ'Ž6:¨u@Ey‡‚ÜfÉMHýµ<_æÞ´ÞDúõ?¡ôrôg|Ò_¸tõúí{¾aÑñ)9HýªºÆÖŽ®—½ý„úŒ¯mõiéGqúÁþHO£ª¬¤0?'#%>:,–Þö8-½CzòÏ£_:ßÿ ¿jýf(õgE¢êÿŽ›Ü(ªro Ëõõ@™koiª¯©,/}ú$?7+=9!&24ÐßçÎí®.—ìílQhãéÐç§ÐÿÚC.òw {̶„Övù@}1IzÛ=ŒÚ.áž_v/—Á½žÉîý1ƒ{ÿ›Û=h»9ÉñQ¡dÛ÷,Mô´ˆ¶»·Ýu´¶ »€Ùû"õ¿ŸéÒÙ¦ž¦ž¡©¥•ùçÌð罆ôãÌé?ïÏ›téœ .ý{vn——‘àãå^õ#ç +-&õ©²¿€C©?«úŸÈMVýÑ‘áwh­û{_u?oomj¨­Bè?ÊËJOIˆ òG‘Ý\.9ÚÛAfK&ôe}Q +-ý™iØ£íñ*n^>Aa1)ùí;÷ìW×Ñ76;zòÔ9ÇË×nxzû‡Ç$¤fæ•VT×7á¶;@¨?6ÿ¶‹¯A´!ÃïÐ)Ø×óây{KCm%¨ÿ0;=).24àþ[nÎNçíl¬,L u5ÕöîRܺEZ\©Ï»³êOÃÞ|óÏ ï:ˆ/*.-»Uq×^UM]C +ëÓö݈×—”ž_[mC ùÚÞüú—Î8Râ¿€×ÑÙÖ\_SQZT—•šüÀÇë¦ëÇs§¬™èh¨‚ú[e¥ÄE…§ÆgõÓ£†µ¡ÔŸ }†ªÐ~?„5 ÿ¢«£­¹±®ºâYqaA^vFJblTX$ö¼éærÙÑ"[YšêiSèƒaRÿïeï1/.»4ö4t LÌ!ö®¸Þôòy›˜–•ëVQSßÜÖÙýªoà5bÔgØ·ÙÕÿø­È¡þ@”‚¶æ†šÊgO?ÌJKŠAì¹9_´? ì™ ööì1—Ý/QšS‡éÓ“ÅŸž†Ž1ćOˆÌ¿ŒOWÎøèÐÕgŒßIŸ ñ#CˆOâ“Ÿž*ñéIˆÒNÎ/8u¨am(õgSŸ¹ê¢*U ¯çeWg{Kc}MeYIQÁÃœŒÔĸ(ì{Ïó¦ûÕËŽØšD_C £//+-I¡¿`ìþ?`±-f_ºœc%ì1?Þci¼Çjšz†¦V6vxïÜ\v_1”]rß>Í—½‘á™Ê®¿·'QvO57Ö×QßeW^FJ «ÏCSŸ®>^„yïÀ¤ütõ9@}>þ B"b’2ò +-Jpêh§ÎY‡éN¤>:u~}÷žéӛߩƒÔ¢Ÿ:øÔÉÏIOŽ‹ +- ô½ëáîâtþŒíqKS#=-µ}»wlÛ²YbÓF¡ ükyVs­õÙÓòSê/äPêÏ‚>y½Ò«þTý·¸ê¿ì~ÞÞÚÔP[U^úôq~nfZR|txH€¯·×-÷«(ð)k«#f&†}•=;(ôvfèºHýÿ³_æßTïk_÷vïºgU§áœÓ)™S"džC2Ïó<'B‘$’™2Ïcæ©(2gLD$¥\×-n³:g­ûù|¾{o{o{›â·ïó<Ïz?¯çõ`Ôã9.$*)sRQ…”co¿À°èøäôì‚’Šš†¦–öîÞAHý×S(nAÜaÜÔÿ“õ¿.QD$hÁäøè‹gCý=­Íµ•¥…9) 17¯ûû\<ïbomf¨«©¢(/#)&Ä©¨©·wãÔ£}õPÿ™YIý˃þu ͬì]ຆ„Ç$¤¤ç–VÖ66·vôô ={1:>95ý®ÛÙº­B}¬ÿÏÿ™Gý¿›z ûìëFýW”䤃þÃCýPÿV  bÿ¼\GÐÕ ±üêáØߒ©¿õ¿z™êO¼}>ؾžÎ¶–¦Æºªò’ÂÜÌ´ä„ب°ëW¯x_¼àælocaj¨¡¯p’ +-úŒ8ô7¹( Gîºû€ë²°qpr\Wº®™µ t]H½ zÔ#Åíw:Ô£¦>‘zÓS“dÔ«AÔKŽGÔó®koej¨£¡\W’†ëBè}+õÑÈ~ò=V×10µÄ®Þµ`ª«×78 úWNÿ«\½Ï˯üu*Ë +-s3à¯X€~kÒ¯#.,€~ì×Ù³ë{õqÙߺ©OúDÕÿLõç0Õ=>6Øþ']í­Í÷ë«+J‹ò²ÒSã@»AW¼=ÝÝœl,Mô´5ÐÐçÁ¡¿UEzÄ30±°æäæ—’=¥¤ª¥glnãxö‚§ïÕ ÐÈØÄ»™¹EeUu÷>îìéz>26>ùvúÃìtÝÅu¹.ÈÈ<üaB^½éínoij¨)/ÉÏNKŠ ¾vå’‡›“¥‰¶ú@} A¾cG³³2<°Pbû&Pi@{Ì÷˜OPDBZNAY][ßÄÒÖÉÍíqÔí¤´¬üâòêú¦–¶®ÞaºÍÌÎ}œ_ØÀ¯óqnvzÑØÈó§ýO:Û=¨¯ºW”—™z'.2ôFÀe/wWG[ c}-5e9iq4¦ƒ€úß2¼ÖQ8õé@ŸD}JÕŸÁTÿ%0™ÞîŽÇ4ÔT‚n³a·1¡7®ùùxzœsq°µ43Ò×ÖPUЗ–À¡¿…EIý€ï R]"ôÔô,ôܽ.èÅai«&¦ PâÍ[½Ozdq[‘ú_õPF ôÞ¿ƒ ùõé@o„^õ½â¼¬Ô;·£naÐs²µ0Ñ×&A›BoÕ]û–SŸìÙg @KßØÂÆÑ 4 “|ÝÈ0¿–À5!QŸÆZšê«Ë‹ó³Ò’À–Ÿ=øì¥|v¶'€S §>}êÓRýHõGGžöõt¶µ47ÖU•—äf¦&ÅÇFÞ +-ô÷õò t«¯£©ª|Z^@_Xà87èG€þßpèo¸1ÞF >L1 þ^D}fÖCG¸xˆ1V×10µ1†ªŸ”–_R^ÓÐÔÒNCuÿû¿ß~[Eu) ‡T÷ý’ê>~x¿©î]¨ºAW}=/œu´17ÖÓRS:%+%.ÌÏËÍÉÁƈ¨¿{×Nõ·m€ú„ ÷xç®Ýõ™!õyù…Åг£©gdní@xv"h<;àÙÁÎÞÚŸ/+=;%ÙéÉñÑá!~Þ¿œs±·25ÔÑPQ”—‘âçá:rˆ™PŸÞðUØä©Oƒúªÿ…Zõ'1ÕïÒÕÞúðA}MEiQ^VZJb\TXjö‚«“µ¹±Ž¦Ú}1ý£úÌŒ ~Þ‡Cs‹Bõi0ï/¿˜¤Œ¼¢Š†®¡™•½ L[`HxLBrzNAiEmcskGwßàð‹ÑW¯§Þ} ¤m¦mê]¢>0ƒÏýFd|l$¤§P¿¶²¬07#%16âæuŸ‹çÏ:X›éjª*ÉËH‰ ñóbÌcØOÁ¼õ›.Õ·Cœ¼{`ðî'  &` 'àãýfDLBJFNai%š@Oßг£ã“SÓh dû¶ +-õ± êÔÿ0=59> +-v¤¯§£µ¹±¶²´0'#%bz`àî‰QÞ=Úß¾ ›\8õéRÿ+1Í(Î ÈbfˆªÿªþãGMµU÷–z +-¸â}ÑÝÍÙÞÆÂÄPWKíŒâ)¹’b‚Çy¹á`g%B/ýÍ,ZÔ'¤˜‘…š®€°8•éBæÅ&¦dä–UBÓí¦K“y¿Óa5õá?HÁ¼nļŠÒ‚œô䄘%Ó53Ô%šîqhº¬Ìé‚P€LämõÁà·³‡òÛ‘¤XdìîÅ'§g”T o»{ãdwjkº{³HÀ·3DüvÊŠr3ï&¾wWG c}-5e9iqa¾cG³³0Üe¬¢þFF€×Z §þrè/) Ña‘ÄÌÍB{C¦úÍ÷ë«ËK s3S“b#oúûzyœsq°µ45ÔÓRWQ‚Ðäç=F }˜î;pèoRÑCÞRŠùDÄ¥å”Õ´ô-l]ݽ.…FÆÝIÍÌ+ÂÂÖù¤ÿé󑱉ɷÓ3³sú‹ë2ÝE¢é1xõò×áÁÞîö–¦†šŠ’‚ì´äøè°àkW.yœs¶³45ÐQ?súä QÁãy¬Lˆú{vò(G€y'Xä~Úw€8A‰r§Ï¨k˜XÚ:¹y€E‹¾”–•_R^ ©ßÕ;0LØ70‚ó ëýv>/|ú87;ól  þÓ']mÔWß+ÎËJ½s;êր˗<Üœl-M ´±ˆ ÁŽí¤Ã· §þ–N}ÚÔÿƒf¢Ã@ÕŸ…ª?9>¶¤ú µ• Õìô”ĸ¨°b«vVfFúÚªJ +-'e¤ÄE„ô¹0èƒhïR·g÷.ú›X„o#P†x¹è¢«ëäÙ‘W\^]ßÔÒÃ6ñæ- ydi[‘ú0%yóyïÞ êôbÈ+/ÎÏJMÂçåga¢¯­EWB„Ztw êÿ}#¢»Â»ÃÄÂ~˜“æá»q+*Û·jâ¾Á÷žÀMAÔ§1‡¾;ÎvV¦†:*€úÄw‡™{wÀbl|x­­pê/§þŸ$ê/©>t˜!ÕýjtIõëªËK ê'ÅÇD„Þ¸æçãéîælomnb £©¦|Z^VZBTH€‡‹óð!6°Üö ÿýNú›V¡A¼»vïýñ§Ÿ™Ù8õù…Ä$eäU4t ͬì]Îýâퟜž]PRQE·»w‰î ÛšE÷rѧÝN@ýºª{Ey™wïÄE†]õõtwu´±0ÖÓRS>%+-.,ÀËÍÉÁÆÂȨ¿—6õ×3„¿b—b€úŒ,lœÜ¼üÂbR²§”TµôŒÍmÎ^ðô½ +-ßÄ»™¹EeUu÷>ïÎÐß/ÔïÎ8X“Á¾îŽÖæÆÚÊÒÂœô”„˜ðëþ>Ï»8X›éjª*ÊËH‰ ó¯>|!6·pêÓ£>R}õA˜ç0ÕŸƒT¿Zõý}½<þÏ~™xcïqüÜéLMEH)Éž"²/QZ¬Ù²=ä¡G¶,…)mÚ‘Š¶¡K²„lCÉÊT7‰6ÉÌ©©“{oÝ3Ý9÷óýþžå÷<žì9÷œß÷?ø~Îûóú¼Þ[ý6ympu²·]g‹m¨¯£©®ªÂ‚>{Ž8ýÉ~<ÔŸÊë¹R2òˆxš,âÑœè &oÛ®}‡cãÏ]H»”[PR^UÛp«µ½óþÃîÞg/úxÂ6<õÿàRÔBf€ê ˆ´ÁºêŠ’Âܬ´‹çãbxÛCƒü˜ ºÍÚÂd•‘¾6A¿}óš¥ú½ÝÈã º6ÔU_/+*à¨~ÔÈÛBƒ|à£ÎvV¦P` tµÔÕT–(Ì Ý– A:ýIz|ÀƒÏÍ ñ2M]ƒ«M-mìÝ<½ýƒÃ"8ž{™í¹­÷»÷‚çž;ñþB<Âsû_ÄkoÅž[ÌñÜC{w‚çúnôpu´³Ï5ÔÓVWUVR•–š/KýñïsC˜#1´,¢¾º¶ž¡ñ3+Î&㾓€ûNôچƖö»÷€úÐwÆù†öëeW¯\ÎHùîôÉcÑöD„‡lòrwq°µ4]½b9,P†° ATíÆ7ÓXCëé£Þ¨Eýá©ÿm0o~#æIÏ#ä0·›oÖ×@u½ÊQý¶ê{{º»:Òl,ÍÖ‚Éèik,[ª¬¤(«-9_Ù úÓ(èOÊc…x +-)ÃüÀc…ØÖÁÅÝË' $|GähÈZRJFö•¢2vÖt=~ò¼ïÕÏÿøí Pp´ž‹ÝB¤ÐŸö :bP_Sy­8?'35ùì©ã1#w~»e³×—õvëÌÖ¬\®§¥®º¨¿ ¼éàMŒúx +-B°Éx¬Ó§¥Ë?„ƒ1ÇOIJÍÌÎ/*«¬©oln»sµphoß½ü'ÌàãðÔÿÄ¥þ{ð#Dý—Ïñî´5ã!ågg¦&‘†°qƒ+1öé“ç·ðP²ÿ…E}ÔÿD–¸AÜ[q–AãwÁFƒÇ݇¹V,PõéN¶Væ&«WêCUU^¼HAN­6@_LC^ï©ô'áñðŽMýY"bâs$$¥¤åúÚú†ÆkÍ­ì!ľ„æðÎ&§fæäƒæðZÚî7l‚©ÏÞ‡ ÖÜ¢+Ù)Ig°æî 4×™£¹Ë@så!óæõ!3ˆ8aêóo² _áq÷Ü„ +-Ï|úˆ…túF5A§o¾n´(-¬Â“Ã.<ûv¡ÂÃô ;ÒPá1Ò×ÑPSY¬('#%9o®8Z™˜õFó(êŠúoý+±Ð½Ý¡¸‚Ç5ÔVW”åç ‚ê9ÌU}Gšµ¥Ùc#¨¯j* sú’hµÅD±Ì°¡ÿ5ý‰¿ÏX.Ê°¤”Œ¼âb5 }£U&Ö4':ƒéYÛµïpl\¹ i—r JÊ«jnµ´ß½ÿ°»÷é‹—¬¬ þkdÍýƒ¬¹¿cê÷=ò¸ëÁO·›€ú¥Wó.§§|w:þhÔþ=aÁþÞžnÎö6ˆú À; >/ïx,wlctûðäˆ)à)Ø;¹1¼ý‚B·ïÞu6ùbzV^aiEuݦ֎NDýg}ý@ý×c)<ĈUùe ü¨ûáýÎУºêŠ’Âܬ´‹çãb£öïÞäïÍps²·¶0Y…§À¹}â½}ÔÍ£¨?„úÿå®3©¶â(ÃB÷!á;öˆæD­Œ5d¹Ïû^å¾™°åÞmo¹ÕP[U^\séû çN9Z°5Ðw£‡«£•ùZcC=m UeèÒRw$êOr‡;~¬1hë¯1·â¬òν‡ŽœH8›ü}fN~ñµÊšúFh<÷v÷°Ï›ñ4ž·¸ñ¼D‚ô÷Ÿî´57Ö×T–ågg¦Â¢9¹ãÛ-›}6np]o·ÎlÍJƒ:w ¼Ç’ý/ó(êKýÄ>cêC’a¡‘ÀÜiƒ®«¾YÎAß<}òø‘C`ra!›}™ 7g;+ “Õ+Yª¯D¨þvƒA >*„’§=È ÚZî®ççd¦&óàÎe½-ÂÝr=-Œ;Ù…\É%‚1ÔÇs‚U&W-]¾ãy0æøÉ3I©ÙùEe×kêoŽg Ÿ¸c ¨OC{K#¿køø%“ŽÓƒîHCÇSydˆÊ#:K˜ þxç@½Eýá©õYAý§ q°À@”+J¯^ÉΑKŒ?}pïÎm¡Á›¼6ÐìmÖ™­åW} P}Q–êÃV} +-úŸ¡¦þByÅÅ*jš:úF«L,¬iNtÓ¢¶kßáØ ç.¤]Ê-()¯ªm¸’{ì’ûi8ɽùã W²3R’Îœ<}`ODxÄÝÙÁÖÒtõŠåºZË–.Y$á˜7¨јí_?Ö*Ë`êkê¬Xmjicïìæ¹É?8,UžøÓ¤kšäÊÓÙÞzëF]uEIanVÚÅó‰q±Qûwo ò÷f¸ÁžX˜¬Za «ÉƒøįõF|õGIý_ùùUßó§=(É·›oÖ×T•—æ]ΑK€,“Ûèçíéfmi +-ÕU_Gs™ªòb~ÕŸ1¬ú_QÔŸàã¥þ4ˆðL!aÇ%ÓÎh·}÷þ¨£ñ‰ç/¦gå–VT×Ýhjíèê÷>{Ñ?Àµá©OJ «ö÷={‚ú`Çí&D»Ò«y—Ó¡ ÆE´ ö÷öts¶·±D´ƒx€ãíx÷k2íÆ:>ê ±;Œº~¤ëçíŠæ7d]0‡>bïH+'ú‚æðšwèúá9¤Àðõ Ã×ÏÅÛy–@ç‘ævö °Q»1Ù¢>?ô‡Ø »´ô÷aê·B’k*¡¶æf¥ƒÈá_îŽß²Ù—Épsv°³²0—ÓÓÖP[ +-qƪ4FŒRý/ðXžBJ0‚¢¾”´¬‚’²*;¶ë]ܽ|BÂwD‚㲓VÆNá¸ý£sÜ?‡8î;ÂqûÇíÀŽ[Ž÷rÜÃûvmÛäÇdÐhÖà¸Fú:j@}9¤@}‘Y|°õ B|Ž„¤”´œ¢’²š†¶¾¡ñZs+;GW¦o îéBv^qYÕõ[5õÍmÓ¾CŒûÇeõìÙîåîiÓz=mu9©¥B +-ŽRÐáÝ£©?%ê×ÕT3¨Ÿˆ©8(~ÒèoJR_YAÊIýyêÿDSŸWBýŸ¨—:um=ƒõ›·XÚ9¹{ïØqâtlbjfnaiåÕ›wê[ïu‘FCÔù0ɆûatxhôÈã‡÷;Ûšëkª¯U•åe]HŠ;sòØ‘ƒûývx{8ÛYA+Ôi ÔõÅ„¨ãTp§¤Å,Yf;€r +-ÊXŠM)ÎÄ&¦eå•V]«®©kjëèzøøiwO¢þ{ÈÜG¤Ä—ñ©ÿAýÏŸˆÕR ôõt#êw´5a)J‹r³ "9AH±ÍÃÙÞÊl3>€ÐdðZ€ÛÑôgýÆ}4õyOýM˜új@} ¾…ú¿Ì¤©ÏÓG¥>øþY³çþ6¡2°¬¼¢*.¸ÆfÖö.Pp÷â‚—t!+¯¨ ¡®PwŸ;ê8SŸ4Éd’@} +-êÀ"¨à–æ‚CbOŸˆe\S¢à*+¬”–’”sÌd¡þÔIÇU‹yó +-‹JH.ã8{£NŸKHÍÌ),™ðr“âo6)(œ=e¬³Ç—ÏVWksã†ú:šªJòЖHˆ +-a-f  r4ƒåÒáí£©Ï{êS»>MýïùþÁ©ßÎ"ú-A:0°’š–Ž¾¡‘‰¹ƒ«§Ï.ÿ‡?s>9ýb~qùåë·jšÛ;úÏ^ôô¿¢mü‚û'Qp‘GPÁ}÷æõ@ßËç@}°HãÝ;7¯T”äd¤&œ‹Ž  Ú·Û×ÓÍÑÆÂÄhÝZ]-5¥U+ÙIÎà!õ±üfâŠPIU´ØÈ¢EXdt ‘¹ +-”¹È܃GOž¿ìÅÔäìAy-ú{_<Çqii¼{ûÆ•ŠK3R΃aX /7G[ SB åUøÂî-¨»‡.ûßáÑÔŸõëkn1¨Ÿ„©à‡~¨¿…¤>ìVÙR’‹)Ô'ìÌGSŸG:¦,[,)%½RAY][Ï`=ÃÀD¿†~›‘SPRÁðAº~.¤›ˆúØ#c¤koi@¤+¿”1=å| ªP¿uaï·â"B þ¼Ö û¨O ó‚E"b‹—.—ùz÷:züäÙøäôlö ØK\À‘i^À.¸€x÷”ÀîIeîžÞîNv–[6ãÝ£¢ '³|)$ecÎlÔŽ¦+ý¸?šúßBýaõ!Òÿéê ©_|œ–öÔ—à¿ð“Ž¶àä †úºcÔ‡`/ÄÉžCSŸçK½Å G “STÁ Û¼ÅÊÎÙÝ{‡ßþàЈgbÓ2s K+¯Þ¼S×ÔÚÑEú QxäÃ$ûí‡Ñá¡A²<~x¿³½¹¾RVœ—} rR¸wç6g{+3(kVk€;8‚ŽRo§¢Æ?Ù†Ë Db(¨à8&ÆÁ# F\RZV^QYÕµêšú¦¶Dýîž>Æîùˆ´ø2>õ±_>þÔ~b ôõt?1:Ú .Õתʊò².@G1îGb¸Ø[›#14U'}øüH¤„NOMý‰©º Ž4*rP^:ÚP¦a³õÁÇñ1Ñ‘á¡Á`dOX­–fPæÖêjk¨*¡Ýºt±¸¨0Jö\AmL}²ÅÐØŸþ#ýËàß àÜ,Ù‚sçÍ'ý++¯¤ª©£o¸ÑØêíV¢Þƒz›t!;¯˜]s[ç8 ãL}èG {E€®‹ºÒ¢Ü¬´Ä¸3¨Þî÷#ëí&f½EC¼1oî¯Pø™ÔŸ:ç¨7 þ,9X aQ røPÒu:61•ã |Ëv¹‰1Á l@'°¼†O2>Gñðñtu°171B I Ee™¤„¨0¦>E ºìóþÑÔçDý¿¹PŸ˜¬@ý†ÚÛ7®T–¢öz0pï._O7';+3c£uz«1õ¡Î-‘@ÔŸ¢;ÌÌŸ‰íJ—}< +-æXÛ-pÚ-æé_# GWOßÝþ‡EFÇœOI¿˜©üòÛµ -í=yö¢·S„á³ñë-Xä,y÷æõ@ßËnä{­uwn^­,)ÌÉLMˆ=´oÏv/(¦FëÖç”Q%`rŽtâÜt0ÇF}㫸JIMKGL}AHs )9%ŒÐÏ_öâáj|ëða¨1:24j ¼Þþ;Ã÷ì‡æ“Û|9¿¸¢¦±µ­£ë6»à>y_N¼âMãKoà½Þ|ë«Ê +-s3ÓPó‰EÍ'ØÏÓÕÁÆÒÜÔH_›¥ +-‚´JAVQŸ;Ž9Aæ}â1ÔÀ¾€ºíôðS\Ya©o´_mi€ÎZ9NŽ?qd‚ìïíîlI†Úª§ÍRSA«šëB’úŒì‹é‘ñýŠL/¿Ür1§odjniëèêå 1;{<>)åbVnQYu}óÕkÝ=}÷~#c†¨?õæÝlí–ƒwÈn±Œ =~„µ «£­µ±¦¢8ÿrzjr‰#1Ñ‘á;ý½Üm1æt ÐIÌ¡`ˆCn…UŸoQõ¡A–6‡ 1ŽH<ŽdG^QyuC »oàþÃÇCÃœç/È­›FÓø(šúxÑ8ÐÂ`MzÎBûÒÇî֥¼8/ ÆOÃÛÍÉAM5¾#È«>_KÂlˆ8CýYR» N1¨\ï[ãÖÆÚÊÒÂܬ‹©gN;|`_dxH€‡‹£­Õö­&†ú:šê›À`V+ÊAq…03²/î'Œr@9L}9E_MÝÍ ·ÖvNîÞ3å¶+·€¹θ0Ì §þLÌMÒ0w¯¯‡À\uyÄ#–€.·f m ,·ò²R˜ú’ x”ãQÿ‹òm›©yHÉÈ+*­Û¨ª¡ET´ÎAa¨úÄN:—–™[XVUߌªOO/÷Â8ˆ#øþµv³:‚SÜ#Õ,‰8‚µ%ùTõùGTDH (’õö­?lÖÕRß‚¤(›‹ò‰y0 "¦ÇP_4õ)“#+§¨[ÝÑöKS]U|3ýüÙÄSq±1Ñ{"Bƒü¼Üœì¬-ÌL tµ4TÁ`”`·¥WòÉþßÙËã£þ73ÜVF~Pn—rÎ>¡Q8¾g/dà”5Q){ðèɳ‘±ñ/'^M¾¡b&Zné^ðfŠ”ÁÁþv¯·çÖö+ÍõUe…PÏA:Ø»;4È×ÃÅ~‡P_OKƒ¢r[>ÊñÜv®áï>p•Ön¤ÖÙÚÎÙÝ'0Ïm]FNAieß·mË„ìoÙW d¿ì3ØŸó„Ü< Hïbœ^Y…UkÖ+«²´õLÍ-m\=ý‚ÂPÊxn[Gw[”ûõé”CVp÷ÎÍë¿þÒU° ;ãrÛŸÛ€ÛÚn ÉØ°Z ôJDý…’ +-¢Î rBÎ o xUÔ4u  ûXÙ:¹Ýçî>—.ç—TÔ6âîs·¨?Ä»‚Ós¼‚d÷©¯.ÃÝ'wŸÈ]Áþ^nŽ¶–æ¦F:šj H°)´ÌáŸAfAÄóê‹¢>-ÄDc}ötðá}¨¬H^®¶4ÔT”äd^LMN8yìð}‘á!¾ž®Ž°ÚfeºìK‘²ãL`QŸÄ>Cý/y<ÆñÂËU[AÈyùïÜsäx|rjzV^QyuCËÕkÝ=}÷î?|üt˜ƒR6ñz +-Qÿý‡Ù¸-T_M¼„|à.8ÐRÐÑÖÚXSQœMðL‰#1û÷„ïô÷vs²µÚ¶Å˜ 9(Ë‘ ˆKmù¨Ï¿Î+¤ˆ3¨ÆÒ!Π£«—_0 ä`,9b4 ~7»o24Âyþ‚\»i´vES{Òô»·S“xa8#CѾi  ä $$ÀÛ݉<ƒZê¸üÈáò³„¯ü0²/îÇP_€ú´ SÔÇ!&ÜRŒ*kÏ­Îk°×uUeðÏôógOÙµ›}û²¯Ø_‰e%ûcdÎOˆÙΗX I0NF^QiÝF*½ÖöÎî>!QûEé½”ÍS[v? ¹qaN}¡{ÎÆëccµm¨./Ê£«­Ÿ—«£ R[}m–ªòú5`H–,ꋉqÂî šÈÒïÐDV)­SVÕÐÖ341³Øáàâé åg/.?)Dù©o†3H•ríøÏà§ò©38£ü”àò“xꔟݡ¾.ö;,ÌL õ´5T•×) Nd®wyBCýYQ‡¨ÏA2‡*+»» bÜ\_]^œŸ‘–’œpâèOHöÑ?é²NaV‡Y±IÌBûb{üÔÿ+ +-¯e¶Ò²òÈlqúˆq6˜q^²Äsi9…¥•uMTÈ¡Q°Ï§Ï^ÈÈ)@¹Ò~ãæ^˜È šÈï0‘דˆúÔÞ‰.?¼‰L¾Æ 3úLÈDR’`"÷ýìçIÝA–ºƒ +-X–.^( [á„Ùñ=†úB©OË0v9bÔXÁ]ž¢Ê +-òr£t®¶²´07 dÿçSqXöCƒì;€ìo%d¤n­–}˜¥‹öaÅçáD#‘a°ÿ¥G8šØRˆ#«¢¦©c`ljneëèæå¼+rßÁØãñI)³r‹Êªë›qt³EŒ›ú,ã¨ÿ–dÜØ(ŸÙÖU–b³ýù$2Ûˆ@wgЭ?lÖÕ‚Ô—“á!nò€9‹­à!œ!}$ꚺÆ[¶YÙ9¹{„„ïAí'×~`ínßíÇwpdlüÅŸ¿ƒÞwÚÏï‚í§8/+=éHL4(’¿·›“Õ¶-ƺšê*Ö®¦FÂwÙóc¨/šúÔZãõGQŠa±A^:;Ú`³«HÙOŠ'e?$dßÉÎÚÂÜÔx³ž6KmÓÆõkVcìO`Ÿ}JdþB³;&ÖæñŽ¤þÉEKqR3Ä–‡¸#'qé—ó‹+jZÛ:ººÙ}÷>æ<!{ !›þÏû(eq¢Ì–ì‚dDNMðÁ@?ûvWG[kcMEIþåKçÏâíß-g‹§£©†§ '½rù²%‹Q"0áÄM}¾}†ú£€êKGßÈÔÜ’:„Ñ1p“SÓ³òŠËkZh#!F‚öníÈ‘ü—ÉGr$S“ÄÂ#¹KŒ¤F’} £‡ˆCèál¿¡¡ž–Æ&²þ€¡úóí|1Í„y3C}AìÓ¨OVbÜX9(ÅPYûØ·o^o¿ÒÒP3SöÂý½=\l­¶o512ÐÕÒPUÙ°ª«ÄùûïÐŽKr±ÿ …}Fö¿à !œE8)YyD8U m=C3 *¼Q^”± œ±&*c”Øò…l¶ˆ›¦'(¶EyYS“ãÇŒŽÜìçåêhcinj¤¯ÃRS^™%·"Üܽ–o&_Ó.¡àLl\=ý‚ÂÐÞÅNJIËÌ-,«ªo¾z­“^þýÇlêÏÿ„Ô´0ã¨þ "K"ëOUiaNfÚ¹ÄÓq‡ìý1,ÈÏÓŘÉÿÙ/ϧªÎ-0Qg.FåK¤(‚€ôªØŽôÞ{PÀ‚" +-H^±Ñ«%v””ñ*×–Irgüp×ûî½Ï9Ö“Édf¿ÿÁû›ßzÖ³Te‰LØ›ð_”a/bƃg¡þLÔç¹÷Èæ&_²ÿäñ˜ìþžÎ¶k—›زŸÈ’}OWG[0]­MšªJò²ÒkV¯"°¿dñ"rûs)ìÏb°ÿ 8vuùæÍ_ÀªOvW†òZc GW/ Ü>á[®R„{22ölâÅËÉÿ¾y;•p\©ÏA¸wp b%yúøÜW[ëªÏ–åá(¹á¶ékoÖTWQ•–X%ÆöZ>^QŸJ… +-PŸŸãþQPV'ÚÊÞ™Ú„ñ° s OŸ92¹ÑÙ ›ðÁ#fÒ×ãÒTW]YVœGnÂý° ½Ým-¦Ý?K/7šÇ»P˜G õ§SŸ-sÔÁ +-êòzòÕ°ìƒÏÝÿå’ýëW.5Ö±e?>–õUg S#}-׫«(ʯ•’\½RT,†œûsìý›Qk)À¡î*©­ß¨¥khjiëäîí´{ÿ¡è#‰)Ùù%å•5õàµíÝ}7ïÜ{øøé(tìÅ×z-&òZ¨Æ@éµgNæd¦Âypop€¯‡³½•™‘ÞÖMëÕ”¡«DWbÀ-dî;­åA*³ç@*ÓV!„²ŽÅÎÉÝÇ?hψ˜¸c'Næ”VTÕ6ÀÜuôôß„ûgÝ?/^¾êÓ¨O¿&Ñý3>:ŒïŸ~—Öæ†Ús%§Nž8q`OP€»³•)E …½ +-Éh6C}^?†úÜ©OÍ5Kö_£‹ÉþðTÙ¯¤d?.&2lßî ?/7';ksC=íÍÖ©)+ÊÉHIˆØ_ +-Øç_Hˆ …ýï¦`ÿïîÄ?äÑù†«ËGVw™€°h­¬‚Šºæfm}Rk@k#bŽg®¹õ:¸‡CããÏÉŽ½Gû“ÜǨO–‚pcÃC@}À•€‹>€ó÷vw²³4ÅZ«¦$?MkqxÀ·RáG©,Y).É:€L,lݼ¶ïܽ?ügjž«©‡PÈU8«ðÛC™¶ +-s3S“âa††ú² EYiIq1¡å˜ú ÀŒˆ /bïBf:xðêsÁ>Ua²ÃD‰±»L•ý–Æúš*}ò¯ÑCwíô÷ñtu´µ236ÐÝŠ±¯ +³°/²Bùÿæ_HÊ>UjrØÙÿ‚ÇÆÑ\ºÕb¾IS|36·qpõôÛŸ”–•[túìù ¸b½·@kŸŒŒO|µÖbÀáfÜ»3Ø×Õ~írS}Meyq~vzJâ‘ŸÃ÷íÞ¹ÝËÍÑÆÂØ@gË UE¹)|ãÕr»€æ¡ ˆÜ… +-µ ©Tv¡T’Ó²òŠÊÎV×5¶\mëê¼MÞÄ×@ïÈè×°¤»·{»Ú®¶4ÖUŸ-+ÎËJONˆ…Tv‘©˜êÀ.TU’›¶ ‰ ˆ‘}?†ú3RŸì0Ub,û¤ìß%e¿µùâ…êÊòÒÂܬô”cGG±?kciºÍ@Gk“¦†ª’‚¬ô‰Ub€}eû ØØŸM¶šÁþ—=nxã¼aê ®…êÊÈ+©­Û¨¥khbiëäæ¬ö²ÚôìüâòÊêú¦Ë×Úºú>Å7®Ô§ñí5É·§SøV”—•–”²Ãmµê* +-Øj…¡ ˆúóà%ÞÈ\fq 4‹€ °(\@k”Õ‰‰ÆP \@‘‡ã§fæž>CîÂjâT`~I*üN¤»ð¹ oöu»ð\yIþ©ŒêòÁ‘ÞÖMëÕ”å×JI¬E±,^Ä /–!ó8C}.Ôç4j´ß"w£CÃdÿ6’ýW[šêk«À_ +-r2Ó’ãb"Ãöï ôórs¶·±05Ò×Ù²q½ºª’üZiÉÕ$ö— JSØŸËûw+þ FýÙ´æb©%ñ¦ Õ52³²söð Þs U÷ä©‚ÒŠsµ Í­×;ºûoÞ¹÷pèéè¯Ï¡b“P±÷¿ýþÇ—Xí[ÂjÇÇFž<‚#p §óÆ•K/À X˜“™zühLäÁ½Á¾ÎöVf4¼AÔÒ¨kðM ç2å¢/CSK;'wÿ ˆ%:ŽŒ¥Š Phxlü9mò>÷úº€À’†P,ý=×[/]¬­:SJÄrb ôõp±Ÿº Ù'ŠeJ.Ìp|ûc¨?3õÙê2]öÁ^z»Ú¡Èu5ðÛ¢¼lüÛ舃¡»ƒ|=Ýœì¬ÍM õ´öUåÖJI®^) +-žŠý9„ÌØgdÿ3nDqét—”–UTÑØ°EÇÀØÜÚÁÅÓ/0$4,êp|R©¥ðö†Ž·QŸÞF‡±ÔöwÞšjÏU”œÊ8AI­·»“­¥©¡®ÖÆujJò2kV¯Y±ü'Dýó¡Ýxá´\¶!L4?žh!‘•â’2rŠª8 [G7/t…³O tµÃ 4u¢Xþüt,S–á3X†èèí¼N óÄ ” 'Pø¾];ü¼\m,L t¶lX§ª$7-ÞÝ@Ìc?†ú3aÿwÙŸÀ7ë£ûwoö÷t¶]»Ü|ñBueyianVƉãñ±ðÝÐ];ý}<\í¬Ì õ¶nÞ°NMYQNFJRcÿ§¥K~Ã#JÍ’²× ö?óÑàF—ï‡ù 1õéNË¢Û>D·äôì¼â²ÊêºÆ–«m]½ƒ·¡aOFÆžM¼x9 ÔϪØ'¥|ãõ$PÕâ1P°¯«ýÚå¦úšÊòâüìôäÄ#?ÝvnÇt3FtÓPU”§])B8-?å´³ÿê?ýBÛPAE]s³¶¾±¹ƒ«§ß´ c’Ò²òŠÊÎÒrA“‡ryýæÝ'r™F}Ð$L}"—Û¹”ägg¤$Â6Ü¿oC;KS#=-ö $,(° ‰ëâM0Ìc=†ú3Qwxºì£›ìåá½_n ôuwܸÒÒT_ SR“™žrìèá¨pâ¿ð_K3c]û +-€} Àþ +-„ýÅû¤ìµþž’}æŒý¼7ƒÒ²à¶JBj­‚²:j®‘™•³»O@О1qÇNœuB-@À†Ÿ<º*ÐÓyãÊ¥‹ªÎ”p‹@póñp¶³23ÒÛJSÚ¥‹ñöçcQŸÍ6^Dƒöáœ9s9“¡A¦–vNîÞþ°EÃ:ÌÀë°ÖáõŽî~¼‡GéÁüïcÁ|à æÌ’$Î`Ο=×aZ‡»vüŸý2ÿæ:ßãø™sïçÜÑÔtçÎT¶VKö=!dɾo’( +-¡HF$QÄ·,YBÈ.„Rv_KˆÈ’´ßi›æ6·3¿Ü×ûýù|·Mßsî=ç~ÞÿÁçùy¾ÏçÓ‹5‚Ô`InÙ¸N£ïá@–ñr5©G>Šú aÿÒÄsÊþÔÄØè0¬ÖîŽÖ–¦†kÕå¥Eù9™4üÁ‘'Bƒüxy¸:ÛÛX˜é“Ø—•–Ø,²‰ÀþhÁ2±O´ÒØö—ò8ÐöQ£]#À`›2f›‰…­£«Ç~_ÿà°ŸNIHIÏÌ-(.¯®k¼ÙÚÑÓ7ƒJû*íKV¥ýð…•¶¢´(/ûBjb|Läñ@?ï½®N¶–&†zÚjÊ +-sÙFx€;hûÄ +-Z‰OZpÝFa1IyeUu-] ¬LR&.!…–•[XR^SßÔÒÖIïêßçAïg/ûŸŠÃ¹#h +- þžN¸•úšò’ÂÜ,ZjbÜ)P&À—PÆÔHO›#W£aæ!·¤¡ñ(ê/D}ÂĘeÿ5”ýç¸ìOÞ¿7ý…ÞÕ~ûfc}mUYIaþ¥ ZjÒÙØS‘áÇ‚üý|ö¹»:Ù[[˜éëhilUQ’—•’O ò¯ -o¶5ékfÙ§vìâï«O  ùv5ŸàÚ ›DÅ¥äUqL­ìœ÷x¢FN4Ú¬¼ÂÒ +-̶.Ûõ1Û[€ú$Û~O²íÅ3ðÁ6zgÁ¶‚ÜLZJø?,Øÿà~V£U…F+!£O\ÙÑÏU´ÍˆË Ò $§¤² VÐ.¼‚¼`…FDÇžKNÏȹ\\6~¾2oѹ<{Êà<¤wµ¡<¬„‚”}ñ|císs¶·2Û¥¯£¹MEINI³VCšfu_ú(ê/ˆ}βµ]ø“G€ý‰ñ{w‡úz:ÛnÝh¬¯©¼Z\—‘ž’ Ÿäïëíéîâdgenb¸SGS]m‹’¼Œ”¸˜ðFŒýUöɲω}ªì/úXdcÙ–wÙò¸êC¡Åh“WRU´c´qƒŽˆŠ=ûsá¯Ú†æ[íݽw†GÇ'¦g=! öì³í+Üh>˜GÜéëéh½ÙXWUV|9'#-ù\lԉРÃö¹ï¶·6g¡MÐ&@  Qh¿æ&õ¿úHrñ ¬]‘¼i#3+{g7OŸCGŽ…Ÿœ{z ÍäôÃGOžƒ4o··Ôô´$b=œž…ŠÔÝqûÆõk„4é MtDhÿA/w¶@œ3ƒ¸ª õ𣨿 õÙÊ>\8”ýW¿À‰ƒ‘LMŒÞèíîhmi¾^WSqõJAnÖÅ´äÄøÓQø›½=Ý\m­ÌŒ õv ì+ÊÉHŠ‹ +-ƒ©øÀÕÿø;ØšÄ>Uö?çÍSõ™d[# ´|+)« ¬¦¡­ghbaëèê±ß×?8ì§è3 )é™9D¡½MÚq(´ ÐÎAÛBÔ' Ú&Úz»ÛÚ*¯^aÚ£Ph=÷8ÛY™íܱ}ëEY)qÑMë…0Ù¾c'wú,§8< ["â›–”ahciëäºfPÈq˜A‰h•Và@ìê€4_ .& #߲ϠžNˆÕå%…¹Y´”Ä8@CH€¯÷^W'[KSC=m–6(ø%"© ç¢Nã Eý…±ÿáb²×!ÿòŒ<‹œ<6:<ØOïjomij¸V]^Zt9¾99!.&*",$ðùÑ–f» ÀÒÛT•å¤%7‹nÚ€°¿úGdëØפ±©²¿ÔÇ^gI°ý—´íj>ÁµPŸ•STÁ}ÖÔÊÎy'í(“l…¥5õM-mô~ öPÿåë7¿¾clI…í¿—ˆú³3Sc#Cô®¶–憚ŠÒ¼¬ ©‰q1‘,²™Ù4Ô”æöY"ö¹Ugç‰D$ÎJ$¹ƒdä•UÕµt Œ-l]<àö OA"Ò2s JÊ«A›VÐf¼½¥i3Ï ÂÚú}õ¦>«ì“>†úGNž†32t§°ûfSCmUyIQ~N& }tÌÉ¡Á‡xyìqv°±4Ý¥¯‹±¯ +%!&]F ØšÞ +-²ì“}æ¯TÙ_ÊãàéZV%À&-¯¤ª®©£olní°Ûð-²Wa/fŸeöÙ—¨Ïþöþwv²-ÖgÙPŸ}0ÅÙg r3ÓSÎDG„ûôòpq°176ÐÕRWU’Ç`['ȇÀ† 0Oå¶:Ë`1"QXTBZNIeˆƒ‰ƒn/ö\rZFÎåⲪk7к3Œw¦>ì ÏLDØA¯;h’mU•]¹œ“‘–|.6*"4èðA/w–8Êòs#‘1„¸¤õ(ê/ŠýË>ùŸÏ‘“¡ÀŒß»;4Ð×ÓÙvëFc}mUYIaþ¥LZj|udxhp€Ÿ—‡«³½µ…‰‘¾Ž–ÆV%y)q1áû«~@mf9‰}ž9eÿ¿íÿÝ7O›ý†q Q_@h=ØVRVAYMC[ÏÐÄÂÖÑ•¬³Ñg’Ó3s +-lu„½†GÇ'§bêØH}À`[ +-õaýž>‚í‡ÀÖ×ÝÁÛ¥Œ´Ÿl'Ž9|`ŸÛn{k²ÎÂà‡½·æZ{ðÿ¹Í5ö%ÄÌDPe"¨ƒ†yÔäò9x4õù‹ÙùEd$v÷€8 qÇ÷ïÅÅùÀG"ˆ3'i) qÀæ2…!´}ëEY)Pg=Re"SÎL¤NãËEýE¨Ï,ûLìÃj}þ°ÿ°?zwp ·c¿®¦²¬¸0ïRFzJÒÙØèÈðcAþ¾>ûÜ]œì¬ÍM wêhª«mQ”“‘…¦'¶^…®žQg¨²¿ôÇŽ5 >r-/éZÜf×äUظæíxôxdL|bê…¬¼Â’Ššú¦–¶Nzÿ i/Tg_¿ùõO×ٙ鉱ѡޮö[Í µ•W‹ò³/œOŠ9~4ÐÏÇs“¥©ÑÎ$×`î à6û{›Å‘Ï…_ÏŠH¶%„ZR†=÷î÷ 9y*.1•ê”êtцFÆ&¦fðñêü™!ôìñ,4¤±‘¡zW[ ¨SQZ”‡Õ9 ê9äãéæloEf¢’¹„øõW¢%ô £ý…*û\zõ—†}täö_CyñìéãYÔ`ÆF‡û{»;Z[š¯×ÕT\-.È;˜ž’:}·¿¯·§›‹£­•™±ÞÍmªÊÐô$6‹lB¶Fm=Uö?÷qPQf™X\·AXLBZ^IU]SGßØÜÚa·;a[ä®4Â]¸Ívõb®MÏÌ>Á\{;‡kóRÿc®½À\»\ë§w¶µ4Õ×T”æfÑR¡Í†A›Ý¿×ÕÑÖÂÄPWK]MYAFr³ÈFøÿk0Ö–3±Æ­ª?ïb†"»§˜X+«ªk$¦khäþøÃ'Ïõ_O1ÆëÆ76ûç ËßE0:<Ð×ÕÞÚÜXW]V”Ÿ•–wþ\(k:šHf¥ÄD°Ìò¯FGªÜ|Lµ¿úßRòAUˆW¡P…dåU5´õñV{0ŽbjfÞåÒ*Æò1âyÁmè*JŠ ã«Ht¡åD¢eŸÇ¦þ,ÔŸû“È``×MŒöï€Ä ì××V•æf¦%' />qÜÇËÝÅÁÆÒÌØ@çÀþ}Šr»¥%vÁXoÙ(ð Ù§©?ó㨲 ¨¡¡Ý°y› ˆ˜Ônye5Mƒƒ‡lˆ©Å.K ;Õž"ªM"ªqC}’jïÞ¢Y€QêS¨Ör­¡– ZBLdXp ¯·»³rÙý* +-{¤%D…¶oª·ýüiPc©,ObœEoõj´ÕÛEÄq@t qò‚.t&":>9=» ¸œ¸ŠÝÓ®âçäC\ÅÇÇÐUìélCW±ªôr^fjbÜù³¨ yâ.d¨«©¦,¿[Z\TˆÄ:‹ìeˆ^/y4õgÃ>“úxÁ_H쿆]…!°?2<ØßÓÕ~«åzc}meYQANfjRBlÔÙÐà ÿcžnÎöÖ¦Fà2jÊ +-{e¥ÄE¡ÃnÞ°žýœdÿôlÏòæ±31³‹—,[¾bå*¬²[ÊJƒÊî? k„¡æ P =—”–•_TVU×H ×ÐÈýñ‡O—"§ës\öÑăÑá¾®öÖæƺêòâüì´äøhþÏÃN¶¦$ԤġꡟUvA}âÏóÒd9'Ä*Cpw +-‹IÊÊ)©jà³èèzäØñ“§ÏžKJÍʃ€ðöuA@£÷Ç=ÁÔÍìBæÔ… X”qPo×mj@1@_/7tõ´ÔQ’Ø%Ä(C+!!¼ÿd%DË>/MýÙ¨?Möñ$3ùÇË稹ºßèïé¼°_WSYZ”Ÿ“‘’~šò톺ZêªJò{`¬…Áf6 üÂIö¿emz¶9<ÒÈ‘Å&»›ìÊŸLÛ%) C«®­olneïâîí“p)=§ ¸‚PÙ.6•5ÎÔŸjHe{;oc•-»œ—…Uöô‰ãÇŽ¸:Ø21ÐÑPU’“•ƒ¦·yü{&Ó8™,ï"¢´!â.þ´ŠÀ¦­ŒµÆ YÛ»xõ +- Š½˜’‘[H–¡Îž~8‹cŒ³øæ Î"« Ýhj¨2”›‘r162<$Èÿ¨‡‹ƒ5$¤’Á ­]Í¡ ñ0¢¯úÑÔŸûÿcÇþ»w¤ì³°ÿp°?4ÐØo½qíj]uE)þöĸ舰“¾Þ®Ž¶–fÆ:šûUåÙ߶—Øé²?ÚhÓ³ÍáqY„´¥€4rf· ŠˆKí–WVÓdš¬ÿ‰Óg£.$³…™ÖÑÓ?x÷ÞØÄ㧈i“0\ÿaNקT >ÿ¯^>ÿíÙã‡c÷F ñu´µ\k¨­,e1ÍÏÛÃÅÞÊÜXÿ#“EH[BÞ{ž#ÌèÊV/ü~ñdDëpD¢âDÒ32³´svóò >A½‹·:º Áúý1ùfŠ»„Hê¿{û[Bè.öt¶±ßÅГÇyvÄmèÀ~eù=Ò⢠Ex;õ—AD#½_ðhêÏJ}–ì„}¼ç¿Ø½;t§¯»£ífsSÕêò’¼¬´düñÁAþÇ<Ý\l,Lô´5Ô”öÈHŠ‰²¿vºìGËþ§UõúßQGv%SdE%dH¤™ZÚ9¹yùœ +-=Ÿ”–•_TVU×H̘ì8Ãd§X&Ë`ÚLö˜l_w;˜l}MEqAvzrBL̾¯—›“¥© ME‰´µk¨"‹ÿ;ùÛyôÓ9\FJZ‹ëˆy ZØ:öô9~"ŠÃ•W×563ÚÐø£'ÓÚwñã6ô`tx ·«½µ¹±®ºGCDîÎvVfÆzÄa”Ü%Œ#£-ÅJÄØohÙçÅ£©?Gì¿e`cÆ,fôîàÞ.ŒýúÚª²â‚ÜÌÔ¤„ب³¡Ì¯77™Qߧ$·V_h'»ì/¦È>MýÙШK%š°˜¤¬œ’ª†¶¾‰¹µ½‹»·_PpÌ,Ù,²­íÝih¶Ø‘ö#êÒ0õ™H»‘VV”Ÿ•–wþ)²6 u4Õ”åwK‰‰ÀŸß€î=".y<–Ç!ÍŸ?ý2þ—q§ð.2#b¯=ŽRëPZ¿¶Îž™#·QãÆþîŽ[7P*!êPÔ!ÿ£®Ö‡L t4Ta= #AÈh=áDËYJ4­Ñ«ñù¦þœ°ÿž û/_üŽ°?Øì¹Õr½±¾¦²´(?'#%1.:2üôÉ_oWG[K3c}mM5…½,ÙçgÉþ÷ì²OöLo' -\´xÉÒå+~úÙí‚¢âÒLµqt=‚F‹I´ÊÚ†k-m=ýƒwïM<~Šˆ6 ³Å½È¾'EßKtùáð Ýéélk¹~õJeéåÜÌ”Ä @´@4ks}m UE9Y¦ÇòaEמÐx”Yˆ˜§‘³Á^«ké›YÙ;Ãe $.cFNaIÊèVG÷ǽ}7KFlÔ÷- +-™ÑcfF7!£ª²¢¼¬Tò2úxv²µ`ö! Q¡[6 +-`'ZAœFŽFôå)}µ¦>÷ØDzöÀ>x`ÿWŒý{#Ãý=·[o\»ZW]ŸŸE~~pÿ1O7g{ëC uµ˜²¿ë –ý ÙG“MÝz´9¾é±n”^DuUK +-ó !â"χP2Y™îa•#žDs?c wSó¸Ô—;ö7S±ÿÎ bÿþ½¾Þî›ím-àéêŠ2Qa^¶,Ø7ÚñÍWúº:šhÄ.[ Ô‡MxFÊÙÐŒÓX©O¡¾0,•f`Øå+רkêèéoÙ¶‹‡ëé}ô[€Ø0±ÙùE¥(ήAœÄ2âì%gopœ½+õñÿCë£8{ŸOÅÙ*ÎÒ’b#BO÷÷=âµß ÖCìF- øõ¥‹T•e¤fØ)üq¶P3@(’ú¨(©.\²|åj¤šD<2‰àƒN ILåç +-Ee•µõ¸oßí|ðð1È$)ljÈ$UŽÅù9™) ÑaÔ$rwv€ó(2УuRSV$Ç1›½‰8ØŸìãR_ŽÔÿ7ûÈÎÄÏÏGÿúì)rô0€Ìž®Nûõµ•K‹ $°ïÏ€ý]Û¯7hõ-_@V,#8g¿å1– +-³(¿Î›¯¨¢†P­Æ°Ææ6.`¬c$ÍR3s De`¬Æ涎[€úÃ#ꂳ&±ÏÐÒìïëíêlkiª¯¹T&æòSbÂÏž úî/‡â4ãá4ƒ®§ý9nzÆ—Oí˪G†Pô&ÒEí¸ÇÔÊŽ´#\69Àüâ Õ—›[iÈ$Â:½“oש¶²\$ðÓc# !üáv´µ0¡7Ñ:´‰€‰¨ãDÜmLæq©?‘Ø£`ÿZ¯ÈцúûnwßêØ¿RW}‰ûûH;+3ž!Pß›´×ÈE8£‚Sqß,qês3ö×õ)»b„ýŒ°ë4µuÁ°;w›ZÚ9¹yòñ  ŒMJÏ–”WÖ6\†í¦§Í°ò¥Ù(N³‘aÌ°­Í4Ãf¤ÄG…9èwÔÛÓm¯t=„™®6 3êÏÇ!ìLýéR£HQYm1ºl ›P=î6±°ur —œžWÈÞD#ô&’»_A;bØø`¹‰J‹ò²Ó“ã¢ÎÃ}øùx{î¡ÌŠ¶è£z\³3EsÇÁÝÆ<.õåŠý_ÈÙ3b.ýYúÞ ™v8~ ûE4ìŸ9äï{äç>gB3úºÈ׫>Ç8#66‰ižáœÍxR¨/ɲOQ–¿®Z£®¥£g°u»!ÏÌÚÞ™–ø*#'¿!ì•k­T˜= Ãì%fop˜½+õ_“¥‡Ãìу!øùî›íׯá0ƒ¶OOŠ‹ =à{Ä˃ ,Týf4ðV¡¦WV¤¾œA°S¿î(­>¢{ÆLº‘RJl¥Ä£ÈFQDLb_ 1êñ>ªG +-ÕãÄ„zöô‡G#C’z¬z,ÈÉLMˆ&£èÏÝ]lÌh¥þ×JÍg­¢$õ9ØŸäãR_ÞØÇ°üü/²^‘£Ÿ€¥‡úïÞî¡a¿¢L$Ä°$Fpwq´µ4E4c ·Q |½bÙ’…ª$õÅÆ·b9g3Þ8€ù[ˆ2b×yóUÔ/[ýŠÖÈÄÂÆÑe¿dÙqœe©ü\¡¨ ùª¹­£«·¯`x£þ(K^„…ÆG;ïGÔ÷ðñÝ7Zšj+ËEB?-1&üÜ© ïŽá,³676ܾÕ@OG š,|9™wú’(›ê$ciE +-R"•’ŠxéoÙÆ<í“gâÄØ(¥:ÁWï?ŠRøHð(z8<Øß`D)U"d¥%ÅF„BDy¸:Áy («h5À>b¢yb©è‚äŽcÒK}9RŸûL؇ÛKcäC°ýZc}MeyiQ>°Lbl$LØïfûœ`Ãò ¾Ü¼iñ5ŒXÅù¤qFÊØÏH½i2’ ¡¾`q”©ÓQfje·×Íó_`pÈùȸ¤ô¬¼Â’‹Uu W¯KöÉOÏÁc½_–ÁßÿS’e¨îûz¡í`« Á¦ÄG‡9ñý·G½ìÛkoe†š^_W[“Ž21À’ÿ¤þtö,b$œöÎݦ–¶Nn UH—œžWT +-R¡Ut VÑÀнŠäîÇWÐâUý(^EEùÙÉñQ U –ÊÙÞŸU0‹T•)&š=K©û“{\êËûØÍ4żû}·»ì75ÔU¡û€qQa0aýf<ÝöÚ[ã ‹hF“øš±²p†3¶Ô“Ný ·ÎÔWV[¼ôóUk5´6n6غÝÐØÜÚÁÙýÀad+ +-`ó‹/TT_ne/©({ƒ£ì]©úGÙjûI”åeçCÕøú€5Á EæÝbôãdŸH’lúN}Ée+üŽnH|Ú«Ö ­Ð,2–Ì¢Óç"bӲ’òÊZfAb©žOT*¸t"F¸ ëk.•‰ +-rù©’Y´ßÅÑÆÂÎCÑJEQÜ ÖLö§æq©/ìcØÿ™ û? ýzÿî°pÿ—«ÁÔ…yÙ) ”>fÀÖ(ôu)š¡}-sÄr©Ï~Ódâ+ +-2pë¼J*€ú+V¯[¯MøÕøÕÕÃëˆ/d|PIFlÕÛ×?0 ¨¾_É °ðñÏÑ¿ÃÆDÛy£åjCmey‰PÀOKŒ8wê¸?N2(zįµ4˜üJ}øÌøÃ1¾Nñw³‡®Hê´çIv‘Žì"Cž™µ½ó>ª!ãR3s ŠËÐ 6·u ­)­Ä7ø~³i%™E U?S«Â¼¬ô¤¸ÈPhH? "';+S²‹t4Õñ.RU¢ÅbÃ>w“z\êË•úÿ¡aÿ4샥‡îõõvÝloE(SY 6'X&\ öðAwG[Klkœ˜fªP¾þÕË›~R¨O¥þ¬ÙsXøª®…ƒlÛÕÓû¨_à‰°krzv^QéŪº+À¯7üú7à×Èïÿe¿<œªL¯8<;“™˜ qf3;JÄÆ*½+¬bED¤(EŠ4Dš ]šAŠŠŠXa)Ò¤Y°!ˆ kŒ±$ë¸3ÉNÎ{ÞïÞûÝ ŽÞ‹ìL2ßû'œ÷œç÷üÆF +^ßÆ_¡à<Iýîàþ}ôŽ¶Û¶2 SGÉË +-ôU˜cSJ}ÞiK#õçÈÈ+(-R^Æ‹Hs«í;ݽý‚è°rò‹Ë**/B/jd÷¢WØ‹ÄNÈ´=czQñ¢êKp Å9GSè°<\œì¬-Ì "Èy A1úî[:-¼AFrÔ—üqÔûÙcÉþëW°Òxÿ÷ïöš®×\½(9ž—•ž|8æ`ø¾½¾0B}\k]¤þ‚ ©/ÅQ‚7^õÿ@TŸ±WÇÔ4u ŒŒ×mÜlacïäŠ[Ç×Wتú¦ÖŽn>Èþ6È>G}üwøvÙ0d=²:øóÊŠ²âüìŒdzF_·[‘v÷Ãr]-Œy,w„cÒ ÇÝn*©/hF4#eä0#5uøÓrvó¤Å()-+ïxé©s 5ˆDä[ˆÈâD$£FoE"²"òr£Ì4€ÄÐ@¸°"K:-=-ueÌȹ‘¼f4~\ÜuHò8êKJ}²Ðè1Dúðþ‡Ÿ<ºïv÷-(°u 2çÏž*=ž—.èëE*춭 3Æ@}-u¡+L}n¯Ç?öª²U&U}ÙyŠ ¯¢®­·båØV´W/¿ Ðˆèø¤tÇšÛ:{îô=ìyñ’Y«?Ž‰«¯o€úÐðȧßíé„?¿~íÊüò,äü¸§«³½Åæ댉½ª‚½ÎŸ'Gÿ[cS#¯ÌÀ¦1§ ó"Ô‡q‘ÛfÆ¥¡­o¸j­‰ÙÖmvN.>‘±‰©™˜‘U—É ¶Þê!kZ¿N4-J}œÖOdZ¯Óêíl‡ Œ¼ÿ—¸Ò }wz`§¡À¢Ê!d¤$ÆFü¼Üq«ÍLËùÔŸ`­9êOðXªÏ§oW¿ÕÈ+ص£ o[S2r +-ŠË**/V×Ö5¶´w¡½’­’Ä^ÇFÑ^߉Øk±W¨w' +-s¦&ÆB» ØãáâhG>œ`L[ƒ—ò ¯³ÿ2óÏ@}øîßOŸ"Õ‘ýéB·Mª‘"©FêZz+à¸MÍ­lv¹{û‡E’ãÎÉ/.¯¨¼T][ßÔÒÑÅoF¯^oF_–‘BÍèvWGkS=ñ¢3å̸¢Â÷íõñpuâ…¤P5‚yÍÂyq²ÿuG}1±/ý1^{}ýŠPÿ)P¿P¿¥±žXTBbi°~Äeì¬q«i… +-df&C}ÖZs6ÃzßAŒYUtWB±¹²òŠ (ÅȲšn±´ÙáìæéràPÜ‘´Ìc…%,y½Ý~þòË1& >“õ"ki$òZYQV 9òäï ån»•¹éúÕøߢc»ë”S_Šßfa7bRRMS×ÀÈxÝÆÍ8//ßÀЈCXŠJOÓjt³½CrðÙˆD!ÉÉ[ É‘¡A’=·ÚšYÕ(=)>:"4´ç²¿r…ž %±Íàdÿ+=Žú“¦þ?ú¯)õ“•îjoiê_¹Ô/. C Ôâ¨?©ÇV}–º2£»ºTUC[ßpåš dYÑ]ƒÂ"£'§gç#Å®ÖÅÚ:{€bý@±/™­ú[%¦¼bÁû‘ô»G÷ï’z‡;‡KKŠ'1ïëéæloc‰îj «©¶tÉÂù +-r2"“šZêÃ.GLLâÀdçÍ_°ø{U }^7rrñð Ø—˜ÊNIr„}û‡„çõñsó¢ÔÇyý$2¯^8~Jäd¤$ÄÜ°g7t#kèFkWèàÀ”``Ù¹Nö%|õ%¦þÇOP¿W˜ú¹H}Po\jŽú½O¨>]ÕïæÈÈ+(êóÕÕÂÚÞÉÕƒìTTlbêÑ\Ø©Šó—ªkë›Z:ºnß{ðøÉÓáç¹ëØ(-xè®ÃCÄ]»oµ6ß íîÌÉ…¹™©‰±Qáûöx¸8ñ ¦ÏR׿õgJÿiÆy¿æ:-42š“‚‰A9‚‰©@9Z1iEc28,2&!%#§ ¸¼¢’=°2°/ïFÂ))Ú``MÌÀJ +-e¦/ +-Á˜Üac¹…WŽT”abò²súÌÄ„Ûw>Žúõÿ'Þ„ª?ƒ¯ú²óÁ\UÔµa«×›š[mß±ÓÍË/04âP|RZVÞñÒSg«®\»Nvª›¨ëÀÐ0ªë[¢®Ÿ‡˜€úA¬«£¥±¾¶Õ5?'#9!&2 þÛ}—ƒ­•ù¦õ«W®€ï^¦¼H Æ7W„M5õ¥#› #›##§€×­©»œääK›În^¾tbéYyXŽ®ÔÔ5Ülïì…rôÊÑäcrdh°ÿáý;=mL9:]V”Ÿž|8'¶{—£í¶­›6¬œÔÑP%íˆ Ò‚ù JNö%|õ%¦þCý÷@ý¿Sê?yü 6šRÿ2¥~Rÿ@hÙiŽú’½qª/,®€0¥…K–ªjê®Zkb¶ÕÚÎÑ…·«`®ùÅe•¯ÖÔ5²ööF—ŠEý_ÇCLX]!éßê<|òèþÝÞÎvÃJ‹ò²Ò“âá¿yæJ¾ÛÈ@WS LANfƒ0F\¥~êOcÕ#é™4(áº,^ªª¡£#³°¶sr¡í(.15óXaÉɳU—yW9984‚9IÎðƒÈÄ>+ûèF$'ñH0'› '/?S~‚ˆ¶£½>®Nö6x!FËuµÔHP*ÈË`P²d_xf܈ý8ê‹}T†ú£Œö!õùÔóƒúzö!%1. +-(àîÇ£¾G}ñ{OªêÏ••ÕWVQ×Ò#«jJÅÕÓwoȨ¸#ag΄5µvtß¾÷àñÀÓáçh®ï'c®ÃCýÐîºoµ6߀˜¯:s²¤07“",ÀÇÃÅÉÎz«™ÉZ*®øÛ²øÛ Á˜ÏFo€ E¥hRâ̘z´fÃ&s+[‡]»½ýƒ÷GbP—WT^ª®­ojéèâìÕk2²/iGÿ׎„GÖÖ|‚’ÜÈñ¼¬4Ê8/÷Û¡mXõH[C…=3ARr²?ÉÇQ_<ê3» ËL¶%†€XÌðˆh ,ôÍƺÚj†úÙ)@!d¥±¿š™P“Aê+2;-(°Ó9•ÿXª?¯ú°¨Ò³f󼕨¾†¶¾!lÌÝÛ?(,2úprzv^Qéés®\»Þp³­s¼¸~aÿ‡0×á§lq­¬(/ÎÏÉHNˆ‰ ö‡w°å ~¼UQ^½•Dü À¦*à…©ÏD%34ìG‹”éy¯c’ÒË704":>)=‹™YM]«aP¾/(ÉÌ (i=zÁªGu5W/VV”‘™¥$ÄÜ°g·‹#“”F:šjË–d‡QÉÉþ¤G}‰¨ÿ ZÀ¿¨ÄPê÷Ã>ê77ÔÕöz²äx^vzrBìÁð½¾^n;úd¥úËXÔ2n§EŸ°êK±TµUFžLS×ÀÈxÝÆÍÖöN®>d£SŽæÂFQomoE‚‘•bFwêã' &×_(õyû‘E°ðÖ çN—åe¥So…ïvÞac¹›®¦ÚÒ% •ädæ0Ï|¶ÔoDýiÂScG¥¦Žáªµ&fÖvdhp†Qq‰´­ºLÏ°{|RŽŽ}‘ì33#v$””Ý­Mõ¼~t,3õH1#_O:4Óõ«X®',FP>!û_{lÿ÷£¾XÐGa¨?J©ÿþÝÛê:ò ÖùaßÝÞ®ŽVR^Acp¡ÿË~yeueax¹fpMVbÔÁ ,±¡X¢€ˆX¢FDéEˆB¥†^E:Ò)"  +-RéÊH@z;htÇ5IÖìsν÷»ß'H1˜_îùöÙûyŸ(àçåêtÏ@××mÊŠXdV.—ûŽú\å{|ªÏg­„_b —HH®Z#%-«°YeÇî}Zz†f–Ö ­¾!‘1‰)éÀjn7¶´µwtõöÿ{6øâå«ñx+D=ùóçèËû{»:ÛÛZoÇӋŽ†jç|òøQ c}Mu”ñŠr2RkWKJ,Y¸€æ×4õ'_ü²ÒgÔy‹Î_Œ¦¶M$¸o+›N®^þAaQñITTVAT¶Ü½×ÑÕÓO¢’7´qô#zh G0´¦ú[¬¨5òótu´³±27: f„oOmŲ%$+Y ‰“ý|õÇ +-}Õÿ/Kõ‘Ãàê +-ë\[,ö9ó|r|tDÈ)_Xhh¯&„ú[7ÃFcê/EÔý>‘áVšúlÕ§ðETÅê¯hkUÓÔ9lŒ7ÕmjT\RjFv^aqYåÍÚz¬úÝ},mýeŒÚÊL@[êª+¯—\¹œy>).*ì´¿|7â—ž6ùmYib­âbsEgóãk2U_ú¼°ž%ÂkHä¾wïݯ¥khŠ³ÒÓ7042ö칌‹— +-ŠJ+XSCÔΤ‘£òõ™‚D¦Ö׃ =µ|%átV1Ñ?tP]•4¤ ë(3Bcc‡%37Nö'ò8ê•ú ôéM¦¨OTóã¿ ºÞ‰)+¹’Ÿ›•Žgàãáâ€4Æ·×Í +-rÒØc–.Ÿ/¸ÑBÜF ¼U­úDZ7ÈRø:¨k`zäØq{wŸSÁÑ Éi°PÈZk¬ø5šêó¨ÿö-Ã/ô8ç_ó,k…j+ï`{ÌÒÔ@ýöö-J€/ñHZEEf ÏHøD}&-é¹áû^½– +-KUuÍCú&èÝ}‚#bRÒx ©µ­½ÎÊA”•ÿcV¾eg%\ +-JWG{[ Ó²ÒSc#CðØì¬-Í õ(5¢„®HhnÓ>edŸ3£ ?Žúã€>Kõß0ª Å–¹¦¦ª¼´¨0/çB¬3tWo7g{À€™ÑaM¬1J_cû£Ú+Ò?Žúïyï¨>ZSJõEæÌ¿`¦—”Œœ¢òÖo¾UËjecçèêéz¤5Hë[õM_ݽ,|Ñ+5"¾k}ó:Ô;À×ÀW'ü8ƒ/øï„èZZ-Œõá·÷ìܦ¬(/³žM/þ¿þÛ¤S +-‰KÁÍeÒRZVa3Ìm57\‘‚¢â“Îgf£°¬¬Ë/_–ücûõ4¶¡çOŸ<¤Ã²²²¬¸0/;3U¤ /7§ßG榺d_~ãz’–âÜ‘ü©£þØ ÿ?ô‘¾`ÕįúÐ\¯æƒú¥&ÅGG„úyº:Ä#ÐÓ>  åuÍ*I +-_Ïœñ9·Ð#¼T++Àk®˜øb‰å+¿\{ºiËö]ªêiguó +-†}¢éUÛÐ|/Ô¢×sP}²Qã–Ö'èË!çïÝ…˜¯®,+aèuÚßËÕñ4;#=mÊYqÄKJ,ÃðÂM)ë䪾€ìóJŠKѹóÅ-…ÁQIK×ÐÔÒÚÖáOßÀÐHHË ’–7kë›Ðܺû.HŽL uµ4öîÞ¡Â nÉB1—LI¢&ÇÉþÄGý±QŸ>––êƒö ªþŠÒâÂË9Òñ‚|PuµAsèàþ½ÀlÈb$SûÌ€M}nŸÉVõɖΙC­)¨¾´QV -=C3 /ßÀȘĔô¬Ü|´O5·±³öö£…“³þÁrVL/øt>gmª¿u³¢´¨àÒÅôs‰±‘¡°ñ^ºðÛ»w@±Û¸§¬è¯ivMýÈÔbç%krëeä•·íTUפãÒÝ' 8":!%í38Ô‘`pãéH¿1²ÿ+¥H¸# € Á©ð—‡r&ô´ŽËïÌë`9"g²zOö97úsGýñ@ŸV}ô‡ž?{‹ ªßÅRýkWa—3Ï''ÄD†‚û¹9#‡1ƒm†êºk‡Š’‚œ´ÔZ²ÎHÿˆÅL£-†£>ß›ÂÞQ~ÕFªOëúò úˆ]:úÆÔž…EÅ%¥fdç—URÊÚ‰”õ!µP¯7£ÀëwAx bx¡/ooƒ¯©*e͹–œàíî|òøQÈxømš]ðÙ˨^7ëŸ3¦¿ƒ®É¥þR“èÀüŒ:pÑyb KH®Z³NZ–äåm=#s+›N®èÂÑä2³ópIªkh†¸¼ßq % âòçÑâò÷aãË>Ä%.I×K®€OŽðqw¶?~ôˆ‰Á!œ—*J_Ën -éÙŸÊÉþ<Žú€>ZbtÿýÁgO£ÒÚÛ}¿ãø Rýr¬úYéô<ÉL  ¹îlÙö‡¶yÙ’E ˆÄ xëÌQŸï±TSŸVýé3aeÐ¥²c÷^ -]CSËc¶ö.>§‚#b±æä_-¹^US×€UŸf×Ðèìâ)ë[ŠúÀ®Aš]÷î67ÔVW–æeg¦&ÅE…AÈ#cµ27ÒÓÖØÅn³‚¬4A—¸Ø&Ї5¾ÛÒ{\U^ZT˜—À§«2˜=»¶«(ý!…Y¾éÝ\‘ÿ}Â9Ì;OPõ)p1ª/¶p1Vý ²hK‘¯20m²wv÷ †mÊ̹|¥äzeu]Có¼NHõ‡Ö÷¢‹Ö猰Þmi¬«©*¿võ2|xrBtxp€·;&—±¾Ž¦:;eˆxâ«$á¸è€úXÔŸB¦'DŠŽLtá¢ÌðPOÚúÍ·û4´õŒÌ­pb‰GÅ%¥ffç—UV×64CM§øá5©¿‡=»üܬ´”ĘÈ [kK3C=-ª'ÉIó ëѧLQú;Gý =Žú£S_úohèaèÃ÷vßÿñ^[kSC]ÍŠ²â+ù¹3R“†Q}XåmÊ›äÁ`Ö¬’$Å•_a¸ex#«þL¢ú -Eº*%#§¨ àR;à2³²¶süÁÓ/0426ñ\zVnAÞ¦Æ òÕ?rñ|u"äêë¹|µöUø𸨰Ó~^®Žv6VfFzÚ¸d¥ÑgC¯›MjóÕØV'õ§ùd*}áÓaz"¼¢„N| ŽL]SËc¶.¾!dxÃö$t‹¯GOÌ߆M̽ÝímtO*¼×r6îLØi/70¤ÿ³_NU^ižÌŽ™ÙLȬÆYcD#cšÄŠÁ +-H‘Ž‚R¤( EŽH‘"  t¤HïE:\àÂEP"‚€:º4«Ù8Édwö=ç|߽ߥy…àÌÎ|ç?8oy~Ï{‚D¦¦*ȾÜvi|(Q²¿”‘™¬ìÏû±Ô_ô'Ÿ?ûçý»Cƒý½=]mÍ µUåŹ`/‰ñ1@õéÿ#Õ×TÛ¿F2€`õª/þIÀ˜e–úÌ7«êÆPýõ¶`n)«iê™ZÚœ<…†) CW»‘êŽ3ÀÅŸ'T}‡¬W+€«¼8/ŽuÕÛÃÅÁÖÊÌØ@OK ¸%¿}+æÖÚ5ðË¡×tÀSØZì£NˆúüФˇWü‡MÒ2r +-{”T5t1=FW¥$jZÚ¹$2ï£È|ÆŒÌßg‹Lfñ0öai(Ñ‘9ÐËãrZj+©C)62,ØÉÁªg¨¯¥Žv…ÊL싱²¿àÇR>ÐÇÚBCÿÁ8Ü«C·ûûzº:9p±VW”^ÏÎH¹z96*<$Ð×kªêË#Õ‡³@ ŽGùïh”Yƒ™éMW}4¢Dõ[Hõ1¶¤¶Éþ¸T_[ßÐÄÜÚÎÑÅã,¶Õ„äô¬¼¢2&!n=Õùó¿·¨yšSõ™ºŠ¹5M¿3Ð×Ãm§¸u-íêå‹‘¡A¾^n”­êh¨*íQ•‘Úͦ±ÅÕ%Žú‘Ô¤ê'8•HhJnܲmU>|)9¹zú†ÀŽ_IÉÌ¡3“‡2ï¢PõÞçPÂÕC™91+3x 4‰df>ìKb|4¾”N;Ù·8zä )Ÿ1$š¬ìÿ9¥¾hÐÿƒ‚>š^¢ú/áX…õ„ ? âÒw³A¿®¦²´(/'3-)!.:â|°ÿlªý…?ÉD`˜(X\ü¿¼YT»*Pk¥ø‰uß®G3*·«>–Uþ^BØÊ/®¨®kjëè¾ykphxtŒ¨>ÃVEçßVŒ‚­ö÷vw¶5××T”äd¦\‰‰ ðñtu²·¶09¬¯È—U Høø¬ƒ€ç»*†Ö"3KHö?¦W\ V|ùŠ•«Ö¬¥ê'ꧥg`lfeëàâîí. ‡fv^QyuÙEFù¨Kéí<.¥§OÑåãur |•¥¹Thûy¹;Ÿ´µ4GB²¿K~ÇVR¿¯†ÄÊþÂKý¹¡/Pý¡ÿ˜‚þ[7yÜöÖ¦úÚª²âüÜkéɉñè÷>gÜœì¬-Ž¢1V} Jõ ØIžáͬú£UŸQIP}äªûÕAõÍ­ì0µ‚Ã"c/'¥eÁ,UÖ6´p¸¼Þ¬¾Y}-P}Q°…ÿ +-ú²ú`lddõ&Èjc]uYQ^vzrB\TX°¿·»‹ƒ­•™±ž¦šò^è6ÃUQ¯Å>RÕÅw!ê/aÆ&¿€p+ÉÈ*ìQRÕСRÓíŒoPè…‹—É.¢úµsyB§Ò|Bó Ú¡S©«½µñF©_b\txHÀYOWGœš û*øV’F·Cö?ee¥þÜÔçCo>Œî¯ú°üÏŸ¢íŸèÞêåq;Úšj«ÊK¨ÏÇF…‡úz¹»8ž°±436„)VSÞ·kšê}ay¦7‡ê/eª¾4¨>­£ÇŽŸp:í韘’‘_ ®Ú³Ô®zwdlâ!¸ê<©õϤËii¨­,-$®z!4È÷ŒÛ©6ÇŽ9¤£¡Š¡%… Í&ªú™Ýê%’ú‘Ò¹ù µã+¾ÿJâëï$7nÁ±©r@[ÿ°‰¹µ½£«§O* ¾•J*jê›Û:»{ûaGÇÌšš³ÖïwAý^R©9ŠSn¥&|+åf¦^½„ èåvꤥ©‰ÍeŸU¤…=–ú¢Cÿ·iЇí½wC¿ AÿFuEIáõìŒÔ«—ã¢#ÎùySŸ79rHWK]EqÏN¹)ªÿ9¨¾ØÕg™¼YU_L ú4³`DÕµô ŒÍ¬lœÝ½ü‚C#±ªæ€ªÖ7s:y4´=~J†éÍ/¿¾};‡êÿ—¡ú˜ZèÆC'\x£÷~ºÝßKA«8?'#%1>:‚VUsC}mõýñˆYë¿ýšMŸuüVãN/z£…dŸNTÂÏ—¯X¹jÍZ*7åwîUVÓÔ302³DDÇRTlBrzV^QYF›Ã› 6_LâÒëøî[‰_@›ã÷ï‘Øl‡Ø¬*+¼ž…¥pà…‡‹£Tð°¾öÅÝüÜ\K$‰”pJp²Ûò^¥þû@ÿ- ý—Lè ö÷ötupZëª+J‹òr2S“âc.„ûŸ=ãæì`gmæ3¬ª´T›Ô\ªÏÚ ã½KõùÈ’‘SÀªGÔÞÉÕól@Hxt\brF6Ŭö®ž¾;wGîO†>Z|¢2¡?~>ÈÏÛÿÜ~®§}@Uiï®ee¤7oüÄe&Õg‡˜ùDP} ¾êc`22µ´9yÊ Mè…˜KWR3sòAõÁS;@õ‘êOLUýßD'ÖkB,¸ñ íï ±Ú[oT•aO½ìçåî|ÒÖÒÔˆ,éÍM]¶t*¯>„êO¡þFvâ*®ÆÓ&©m² +-»U4tÈš;î¥ÊÚúfN'¯·ŸZGHÎIHNÑkø;]C~rŽcÙïä4ד{)í*)¢·»³ƒ­•™1‰Nìƒ(}«ÈÊþÂKýwC,šY¢ú/'_<ƒõ†þO·@ù¸úUåäß0»ÑçƒðÇì¬-L õu4Ô”÷íVmÙ²QòûoÖÍ¥ú,õÉ›MõÉx‚¥®&ª/%ƒyu@[ßÐÄÜÚÎÑÅÃÛÿ\XÑÔÂÒÊÚ†WXx”ÞÀ(½CõibÑÝÿõþÅsh=ëX5%¹ÿc¿<Ÿº¼Ò0<ÎŽã—‘èfË”¦H QPª *M*U@@Þ‘Þ«tQADlÞECÕl¢QÉÆX&›ugŸsÎûþ +-¡Ç!ö=ÿÁ¹Ïs®ûzÊŠò²RÎFû#M=zÄÜÄ@WSóJJB;\ñÙ@7<®V‹úkHŽty²cÜÄ/´e›ø—¸;÷ÐÑ76³²sD)…Gǧdä”V\¼RßÈYOquâß¾[0ijCü} "GuÞEÕy¹º¢´ 73%>&<øÌ)OWHÑÂÄà Ö>5Ü\²ÏÃÈþï: õç£>ô‘¨SÝCÐÿŽ‚þ0@¿A¿  _[SUQZt.;#%!6*,ØßÇËÝÕÉœÅÄ@O瀆š²Â.d-âÛ¶ +-cèoáV}Æ\è3êÿ™[õ®äUˆê[ØØ;£ ÆšWªy…ihdtlrúðê%¨þ’4õãlM}M4urüÉÈÐà@OçÝæÛõWª+J +-r2’ãaÖý¼Ý]í¬ÌŒ¥ª*BÉsàŠH*«à1­V塹dŸnOÈq#äˆÊ¾¹äW²r +-*|ÇШؤ´ìübèΫ×o5µvt÷ß8<:61MdÅ ;ÅGàL]mTw–ÃßIKŠ¤6&[«Ã$F¥]¸<‘ìó²eŸüFöWpêÏýÿ΂þ6ô_¾À ê$þ=€~[KÓ­ÆúÚKUeEçr2Rc£Ãƒý}½=\l­ÍM õu4ÁYwíDÒ"ºUXËß瑶0ª?çY‚ê cÕßÉR}$©îÞ¾aQqI逫r¢ú-í]Dõǧ¸,õ=ËR—Ä+ôøœ– +-ßÚt³¡îRUy1+Ÿ“'œl,M ‰¤ÊÉJKŠ‰ næ#´šå¨«£ú³¨¿–r=G{JHAŽJ8GüÏ]=OŸ Žˆ¡Ê³¦öÚ;-m]½tŒdcúõ!•ý_çؘžMM|ƒeb¤d¿¤ 7#%>:<ˆ’}sZöåÙÿ”‡¡þ<Ôg©þ,èÏè?›žÿæñð‚~'†þµÚKÕýüœÌÔĸèð_oO7g;k S#}]­}êªJ»ax¥$ÄDÐôò’ñÅÖ¨þgIª¿M'­úGìÜ(Z¥dæ–V Õ‡9êèá–ÔZõ—ˆ+ôüHõg`ÍC…OÿèÁ=Ôf$©+Ë +-ó2Sb"‚­Žµ679¤«©±‡rÔ­B¸ã¬¨†g+êêQ éO:Iv}nâÚ²ìLðÏuô̬lQ{ú†EÇ%gä”TT_†• ýÇ~X™žÀÊ„Ë“Cö—Qž,ÙŸ¦V¦ÞN’cM%8SVZbldH€–}K¶ìË  Ùÿ4‡¡þR ÇË@öŸú£ÃCîõ÷PЯ»T]YVœŸ›™ +-—Ž ð;åéFnmtHWkÿÞ=Ê +-ò;d¤$Å@Y6ó}ñ2½XZ(ka´…ã,Cõ•hÕ·u<îîå›”– ct¡¦¶å¨#OÆ'ŸÎ¦Õ/Ë£z|xû±Ñ‘¡ûý=w‰£ž/)ÈIOŽ‹ +- ôõv?îhk°ÒÞ¯®ª(¿+ª ?êx«ÐZG=õ*½4—ìÓQBnDýI')+§ ¬¶Oë Ô§½³ÛIôcIxgjmïîCí‰?$W{.œãíIË>jϾîvØ™®_½T…‚ÌHŽføò õ‰e_™–}A"û9ú“‘ýå†ú QÿWÖfJTÿÇô￧ ?BA¿õëÛýËÕ•åŹ™p瘈@¿SèÒGX6>tP›‚þviIñm[…av‘²àá¥TÝ:è3ó»ˆêõyÁP)ÕWPQ'¬ÕwEªŸ’‘[P +-ŠzQGw?'¬^¬Þ,¦ú4õ©÷÷=x}nXµ4Ýl¨«¹PŽõldˆ¿ÏI7gû#¦4«àÁÅD„7óaÕÿ W<U«¥ú³¨¿–.Ðõ<ì­ITBJfç.ª?Í­sõ8u&(œZš*ÑÒt»¹­³>$»>Ñüùíû–$»>â®ÏÁøCÍ·ë¯ÀÒT”—•J%yÂÙÁɾ6Ⱦâod=#û+? õ€>­úˆë¡oÿêø÷ß>…?:òèø^W;@ÿFCÝå‹úpåø˜ˆÐ@?¸³Ë±£6–fƵh¨©Ààn—þR\T„@Œ0ÀCA.ÕÿÿßUŸCP±êï= £oD«~@(2Ô¬sEHõ¯ÕZ¾ê³•îüWÀªoŸNŽ?A¬ê¥YUQZ˜›™tªµ™ñ!]M=Jª„à½Ñs³uíAý5¬0qƒr¬Mü‚[H*ª¨ï×Ö3:lië@mMqIé9ù%ç«p¶vôàþ›˜F?òåò–&î$_@’Sã²ßP‡d?mMÑa~Þ.¥¹ Š’SöùÙÿ݇¡þ|ÔÿQý_(ÕCÐÿñ5ÚLÑ´NŒ=yôðþ@/ý«W.^(/)ÈËJOŽ‰ „+»»³·±231ÐÓ¡ s+!*²Eˆš\$,ÔŸ–§ú0´ ~ÏÔÞ®¶–;7®ÕÖT–åe!RûŸöts²?babpPkŸšòn¹íÒ’b"4¨6|†;ž­§«§ú³¨¿–Ns=Ï$û¼›„¶B˜2¦* +-ÓØÌÚ‡·_Px44hnAiEõ•úÆÛÍøGν6ý{qÙ§ ô ò'zm"Y¶·Ü!²4. +-ɾ» koBaÊB˜Œì’ÃPêÓÐ'Ÿž¬¥¯_þðÊ$üûá¡Á¾n ýëõÔ}³ÓSÎFÂ…}¼Ü]ìmôõúêªú2R0µHVø>Ç ƒ‹'—Q}Ž³ÕGÃéêT?:>©þù*Pý›M­íÝÄO'°Ÿ’1R}X!©¦'aÏÄ~z«±þruEIAnFr< ºŸ·‡‹£•™±¾Î½ªJ”žÂnÇ;‹SðØú¨¿†U¢8NªC!M>~AVšêûµõ [Ú88Sš”–d ö¦Ñ±‰i¼7½žYfƒâ0߀ì¿â–ýJö+J s3SbP…bÙ·˜%ûB›XÊ-û ö—|êÏ }<¦K) *úõ/(è=¸××ÝÙÖÒЯ­©‚i=—‘’äïãåáêä`kmnj¨¯«…¡/¿CFZR /Ȧöoú„”®0Ðç<‹«¾KõU‰ê[Rªf(5+¯¨¬ò"ÖÓ6¢§£ úϾ{Î *šúç§>¨^cPMM@å?„ÇoomBzz¡¼ø\vZbldH€ÏÉÎ6–„S* +-ò²_êoD»¬vSs©þê<õœ²Kâä%qJoß¹[y†¦.Õ¡ž§ÏGÄÀWÏ+„4ÉâÔÕ;úd|ŠÈ>©Ð÷ì +-] ÌydäÑàYœêjpšHöC}AöiÙÿûåâÎUžÇñݧÑl»3]Øig+Õ4£‹”$Ý”J’\Ê’B!BDµ(rD$]G¹D„ÆlMã–j¦™.ÚÚ¶¶Ýg?ßï÷œó;ç÷;ôózöé|ÿƒó9ïÏëýúèQ²ÿ¿ìÓºý¿~õù©ÏRý_ÿ—¾ë µ üä6œ¥`{ý‹çÊK‹ egI9˜ÐðõöpuÆÐ7èëƒõis¡¡ý£@ŸRý‰­ptåÃN®ôª?—Q}k'P}ÿÝ{"câ“RÒ@õ;ŪÏåT?ô”9õDœ‚;¯ñê•Jl§ùtd§aÁ»|<]¬7šbLéÌ×TçÈ)Gõ?ZÕgS_´è¨EeåXóT›3o)Q +»-.îÞþAdœp9Âå+Yw­Ë>tèCÔ¡=Ïû9M'™&Ý¡Xö@ö/ž-ƒË);’ý];=9²¯Å•}X AöøêóBŸRý×$¥déŸ>Æ[GiëïÑUZ_[ giù©âÂüœŒ´”ƒ‰qÑ‘aÁ~ÞnΛí­7QÐ×[ÐWW©ò%>˜ÊX6ôÕ—xÒª¾Gõ·ïðEÙŒ£ä«>d¨¹å&`ª0õQýÒª¾ÈNÑ©‡1¿cêZ]5ÆÔñ¼¬´”¤ø˜ˆ=HN·m±³271ZU(5SeÚå‰ +-”›¢ÿMwü°÷B}Fö‡Ó›>jŒÈþxyE%Xõªt‹®7Ûdëèì†æIV2#· J´¢ª¶ž”hGW7ç“AŒ­Ó=ºD±ì——Ùÿú@4#ûV"ÙWïEö?d¿O >/õ9ª ÿü:IÑÖw¶ÿpçÖ ”S}¸JOžÈÏÍLK=”ÐôóEÁ_k²Ž†¾&†> +-¬$‰Š, ý¼Ðÿ°sÛÕ_ȯú™”êÓ”jmï$ª?9ýåçŸà҃߇^S}-E©œŒ#IŒÛ°s‡ÛVG›MfƆË/Ôž« 5YIQž¨)üp¢úÃ9ª?T¿šC}FöG–ê› 0Iy*Ô¨:Ô¨Þ²•kÖmØhmºkwXÔþ„C©G³1-zý»›·ùæù¦¯y¾í]öaZš¨Ų0a?º@öñ@±ìëòË>{¤‚ìKùêóA_\õAMHHñÖß½uó»o!¦5•Δ•œ=«}kxH Ÿ§Û6 +-ú†«0ôç!èOè+ORÄÐÿŒ}b*œÐ~ੈêÛ2ªËRýË5u ú7DªÏ¸é«~¹é pÓ'ÄMÛ›6_»ZwÞéR‘a»ý}<\œì­AMW¯Xª§3O“Ã(‘™ŠÄtH5{¦T‘Ò#…•Ÿ¨„{v]w‰þªµøx‚ô ˆ>”ÌÔhu]C{ èv’ºEye¿ÈþÕ+•”ìC‚ìï ôó‚ã©WÙG#Ù‹ìà ô®'PŸúŒ˜°Tg´»«B +-®k¥êÒ…³§KŠ +-ò²Òѧî +- ò÷ñ„ou°±4ßÐ_Y]П-‚þ8 ý1ú$±ÃEÐ2û›«¾‹‡·Оˆ£*@õAõyÕ´wHý‡¥ú8(l5…ί­¾táÌ©âã¹™G’ £|½¶oÛlkiNÌT[KcöL•i4¢ˆ˜2„öž¨ÏÈ>ݤ0S9,ûx×g¨ªÏOtZvÏÁ¤G3rò‹JËÏWT^©o¼Ž§.2Q´•/ÿ.m¾¡k”:ž2Çš(‘ý¬wʾ¢ ûƒzõy Ï£úOqDïßëlo½óý–ëõ(¤çN—’/MNŠßµ7 Ÿê„¡oŒ ¿X ¯!‚>J+HÊ"~4ôeÄ ÿg¶ŸªÅ”£ú©G³±ê_dTGˆVý—lÕïEMÅE«~7üÚL¿9W^r"?çèáC‰±QáQ®[l6š1ÕÄb:™"êy †žOêËÐC57éhÒ©h¦s¨óiƒ…•ýwT¤‘1ñSÒ³Žž,;+i['Èþ#ýž~ȾȤ°HýüèGX©¶»h¤×ÐH±ìç Ùdÿ÷êóP_Bõ{HB 1¹{ "ÚÔPWs2zª¸ðXvƑ䤄Ø}{Cñ—º89ØZZp ?kúW ôÿD OIÊïèK¼^TÿS¬úc%T% +-¦¸êçRªOÄ´WÕÿWªÿ–ê}¢Pëw´Ý½u£¥ùZ]õe$¦Çó²ÒR’âc"öùy»»l±³²01Z½bé¢óÀKUÀK'*L@ª/KzQ_†Cý¡Ÿ+Õ¥xªT•ÂPå'*M™Ë®¡¥­»DÕÚõf–¶Ž¨Ia)£ÑRfäQçSœOh+»I‘ö"ý§T²ÿš#ûÔNIÈ~JŸ²?YýÁ=ú’ÐgåôQýGdé[oCB›‘˜T\8Svd/3 2êëåîâähkeaj¼–‚þ\ ýi}Cÿ#ú¢×›ê©ü|¼¼¢Kõ $Uÿ­ú bªß#ê3b +- à!\zUŒ—&ÆíÛà»ÃÍÙÑeh°|±®6üw¬¥ŠXK1Ÿh+¥ð4ä?›#ûôXI—~Ž—d_U]s¾ŽÞ2ºJ]=|ví‹ÚŸÀ õ›J¼•7o·‚ìó5©”²ÿ‚Ó¤}ʾ˜ìOÙW ²?Fý<ú¼ÔWý'ÏÜë„¥Õ»Ž¶¼ätIQAnVzê¡Ä¸èÈ°à_/×­ŽRÓõkW¯DП 9 +-ÐW Зㅾ@}úõ­ú€'>Õ·g«>ä§Tÿ+—ŒêW‹T¿[¤úL„¤ÔR¦öÞïê`ñéÌ©âã¹™G’¿>@¬tû¶Ív–æ&Oº ´æÌž©‚¤T¤úŸü÷<üñaï‘ú¿,jS9Ô¦d®3TI™›n²qÜêæ¹3 õðÑœü¥åç+*é.mïìƲÿL$ûRPâ² Ë~ ‘ýüœŒÃ½É¾†„ì*È~Ÿ@} èÓá|ÍU}Hgg{+,}K3ºE+Ο9®ÇhrRüþ¨ð@O7çÍ {fëÖPПÅþX.ô? /ñÄ "Ù‹êkië: @õh¥hýëðÿAõKNäç=|(!6*KjS£ Vö[È\#c⦤gåž,CkYw —i[Ç=FöY?õß1VÙ·ì&Èþ€ž@} êsUÿ%[õÀNÒX_[uéâYØú‚ÜÌ4¸Ec÷í ò§¿ÒÌÄh>‚¾Ö5Õ*}@¸}ñÇ$J$¿êÏP¥UßÈ„£ú Xõ KNŸÅªßtºC©þ/lÕžDª/.¥7ZšáÔƒÿ_vòx^VZJR|LÄž ?owä¤&F«W,]¤CÁIþ;VÒÑ£h6Ép¨ÿ~f;ŒZv-L–l;Lv¢S§KôW­]o†»}³–¹EHö«j뛾ý+ìe{W÷Ñ\}õJª2eËþ¶ì7cÙ?Ç#ûö”ì£:ÕÀG”² ûƒxõ9Ôÿ·¤‘°T¿­õ6V’ºšË(œÅ°õ驇ã¢#ÐGz¹»89ØXšoXgh ¿To¡6úã1ôeÅ /#ý=ªbª¡?â÷Ÿ Õ—cŒT\õÄU¿ˆ¨þU1ÕÖ/ÕÃN©}â¤õWª*Îœ +-œãö…‡øîpsv´%Õ_¢«­¥1TŠ’¢¿PoÙJ´ï0YWŸÿ²_'NUÝWÀ'“8jšàE›1DM! û""*Š*û" ( RQAADÄ]£QT jÔ¸à†M“ÔÛš¦‰3;=ç÷»ëã=x`Ò×™ÞßpÏ=ç{>gMzV^AQIyeMýÁ£'šÎà\^ƒÂ>èyCõ²Mß0Û´7ìwÈÅþŠžØÇ+ê‚}ÁB•°¯ì“R_Nê  G¨ÏÎ|Jïú•/`蛡7ëkwï*-.,ÈÍÊHMŠ…S4ÐwñïÙžLè›™L6ÔW.ô%ê“÷Ž°Y*¢¾3Oý•bêQÿqÿ©/ÜûäØcÖ>¡þØúHýõ5•å%øûÓSc£Âƒý©Hím,ÌõµàÄ«N@*J&U“(õÉœQã44ÉB5¥óŽ¥õ +-[Ÿ¼63'öi™ËÆæ³Ú/Sìã`~÷ü­l¿Ö)Tö2ØÇÊö}[ûã~ÏÔ–`Ÿ»£¤ØïóI©/ }èýL¡÷R–úÎn:qôPÃÞꊲ’¢MÖg¦¥I"Âü–,ôöòœîæâhgmABbŸ¡ÿ®úÜ“G} &ìHõÍ{¥þ±“§ZÎ ¨ÿõ·yN¨Oúç—>²éL6!õ¡pí3"m=ÛÜxü0üÿ]¥Û¶`4%ů\èëC@êhgeN’i¼&¥þÈáj¬G‰R_%åå«;X0îêüFbië@k»4 4bEÜêÔŒì<øUµûö¹Ò>~ú'Äþ€ý¾÷iÿ±_D°¿Zûö™â +-°ÏVWŠý^Ÿ”úÂÔŒ¼¸1qæŸt1i;ßr +-†~=ùÄÍù9Ü'úCoΙéÁ„þg“¡;%ОÌ1J¦ÿ})ô8jŽÕ%¹7ž@£bêÿ÷¸(õq܇ eÊËìT<¤¦@u]Ý=½æ-ò ¥+•æîZZÜÖ¶Ž«×ouòØÿ+¿Qû®­x£¾PûûSì öa§ŽïýÁö•{Rê+J}Ú–¨‘ïqæ»9°Ô‡¾,ß¾uÓ†õ™i) ±ÑИè‘Ù3°3!ôIk +-C„ú}<ÔÿPm؈‘£ØX’¥~Oý­2Ô¿ÁPÿÏr¨ÿ¯þRŸ¬} þÕŽ¶ógN4¤®¾‘±)t¤£+¥~Æ’ˆú‡‹¨/È¥Rÿå áÚ¿| €Õha48,ý¨p&–Üœím,Ìú˜TÂ?/ +-%UfRì“N¶ê8 Mm]À¾)xOºTa2“×f®Ïß²^RǛ϶¶w|yã–h§¾‚ªduåÍWØ ôìã)Ø73™$ƾš„ýþ<)õ{¤¾ü™úˆJODý’"¤ÁHxXoþœ™n.ŽvVØ—ÀlL˜ü1úÃÙÐ"…¾ü'úØbêkõõТ–hQB}?L%õ=ÁRŸ¥o¡y^Ê£~ïå=A,]íhomêjØË`tÝÚ¤ø•‘a¾>ó¼<Ý]áEuÆkr¡ÄRt(õUVc¦Ä‚c +-^n©OÇìO±´upa·jDtÜê5Ùy›Š°¾û ¾MgΓѼsïÁ£§ÝXÞPÞžØW|I‘òþü“rØOKN ØTÑ[ÊJÂþÛ=)õ©/”žÌÌ?{ÒÅK¯‰¡>~_P/,ä‡Ö›1ÍÕÉ0m Ú¯©Á…>zäwRè+~ï{›Q QhDZ"¢¾»'„ÒRBýÄ”tJý +-BýFžúF}!Fe¨©„ pä@} n}°húšÄ¸èð % ¾‹ƒ%¥(œy4“àÈ“I*-²èšRCìã1¥¡¥M*lam#ku±_в¨˜„ä4¶Àu0š€ý íÌVÅÙ„úR줾JaÁ¾¨J€}v¯’kêCö¥ØïõI©ßkê³=Ù =yH¯­µ¥™¡>ô䦼ìu©Iñ1Ë)E¼<§Ou¶·±‹écWBèc[~„¡O9†þ{RèË<ê“Dúþ”ú$’4µuô '6ÅÒÆÁÙÍcÖÜ‹ õãêÿÂZôûçßÁÚÜEBér{ëYl€†½Õ¥Å[òs2ñÔ[¾,ÈÉ$;ksSc#}]müùcÔG)¤¾j~¹(õÉ9…‹•N<`¯),±•­£+`Þ¢¥¡‘ÜÌïØYU»ï౓§Î°kõácŠ}ÙËO}·ƒý.1ö¨« ÂûáBì››NÆk}Êb}¶ÈRì+|Rê‹SŸö$#‘åJúù9HKIŒŽ`$‚ÖÞ4FŠ@S¢EÔ¥ÐWæõ þ`õ!‘° õ­íœ€ú^IДú¹ õ÷ê·ŒúÿVLÑî§Þ»só:Í$lèïí[aëg¤®Ž[°t‰$[Øù¢ä熿žs¨Š©/L}1ö™ÍJFÞÈÄÌÂÆžY¬þÁáQ± Xâ‚Â’²Ê=uŽ|N÷굯nß}Àc_¶Â +-ÖªòدßC¯),1`?ŒÅ>º +-±¯‡¬"Æaˆ„}ež”ú²©O!‚-ÉIïôøó³œP?#5 ¿.Èoñ˜zwW°ÞŸ†zº4ôÇJ¡¯Ü“G}–¡Š©Ïõ 4äΪš}@ý&Jý¯n¿-õÿ)–èýÎÛЗ.œen½Š²âBhï´€è²`øÿsI"Áï'Ô×Ò Å@âªzê Ëü7ñüj…"ëB‘MaæÉfõñ ‹\¹ +-kœ³¹»¶á`k,ÖNľÜûxìŸBìïݽ«”b?%!6*<„Á¾«£½§&Àˆ}<V+P –°ß÷“RŸ}aêÓŽ‡üÀ:¥wõ‹¶ó-\CoÙÈR?¨7Ï §ÞÁ¬‡çç€Î=iI)ôûzŠ¨¯ÆS<2ÔØÌB@ýЈè¸Ä5”úeÕu,õ;ê?í?õ·ßÝ2 €·ÞÎ[7oX¿¶þŠÈÐ@üÿžî®Ž¶Vðû ‘¡”ú|ñq¤Ò.\®\™éÈ«eª<ÉÄ V« ¬Vï…KüCÂážZ“ž•WPTR^YSO±ñÒ‚ýçÔk%±ÿZö9ZÕ×T–o§´‚‰ "Ø÷p#Cf‚UÖ¦3°bGŒ]®ªÞ®ÿÓOJ}>õßÈK}hÈo¾îfréâ¹ÓM'ŽB?V•oߺiC6 }üÊåaHý¹³<¦¹0 1˜¨CCÌhz~bG•B_ñ4¢êk…õmI!õ¡mb˜¶ÙºcgUí[Sÿú?ýøêï<õIõÏfn½²’‚ܬtÜúáÁþKðÿ»9ÛÛà¥g0ÊÇ‘Ü4Ri¡9ì³uÆåÊ•YßÈØÔ܇~æœù>~AaPåäµ™9ù[¶•Âp6:ÞØÜÒÚÞñå[÷9ìãx¾=öïÜb¿š³UTlµÐw«“5Á>–™[®jö•}RêËI}–z0ô/Ù¡¿÷6£Æã‡÷×UW”âÇ¥$ƱÔ÷tŸêD§ÞPOW›éG}F{Rè÷òYÄPmÅa#FŽ"Ô×djamÝH¨±©Ÿ•[€Ôß#Cý‡¿õÉ­× Ôïhkån½Û6ç¯Ï\K·>(”Æ,ýɆúºˆPò÷Q_u]”ú¤Ðìveꬣgðöëü«ªëŠø¢Ž¿8€¨5®*âã<2 PA£V­¢â"E•ùùxðx>@æAPÁ©ÑU# +-(8Äã,6©Õ®VÓµÒ´]«{Ÿsîô£@÷‡{þƒ»ïÞßýÙãér3oáo¼¨6oÙ£JÒ¥gå•”ÆÝZ…ÓyãÖ)ößtö/Rì ¸ŠpE±?YŠý¾&°ß¹ûU¾OI}ó©OòòÅóoŸ=¥íC_K†þHEi1ú0ôaðm<õìBlm ôi;í QBßøYˆû‘£~lE4èP4èXlF'WL£ÅË|Öúo!MÖK¨¹©ùÆ­/¿nõâ¨O·¾äÖ£q´¿(/+M§QÅЭïã½dá¼9îF„ú#mqçèOÈÿ÷2 ¾8õ¥Ø·ä°?±ÛÕ °OOª°È¨øDmjFná¾2²\/ÔÔ56ì“2?!Áþ»ìVcì·Rìßl¹ÒÀcbŸè*\ÐbÆÔ‰ãলåpÅaŸß¯2X°r}JêKRû‘›zlGJ½Ö'ïß%ÝCþ´dè·oÙ¼1À—§¾Rÿ#Þ ôôìÅݞݕÐ7ý,LDOýŒ ”úŽ$Œ-]±Ú7 ˜©ŸÇQÿBRŸl}1B¯6ÖUã­i´·0'C¯UÇGáÖ÷[³bé¢ù^³ ŒÈÒ‡KÔÊ’e'PTTë®üÌã~µ°ëu¬WOvS cÏmתÚÏ;wïAq¹Š°ÿ^Ëõ°_ŒØ'¼ +-åy5ÛÝÅɱ/Tu%`_ZkeÆ ž’ú©/FíFzÍMõ58ô:D ¢MŒŠ ò_ë½8Rò˜úÃ8‚XJB¿›ú¦žõ{H£èƒß ¥ÂQ‰7P?ˆ©ŸSP\ÚÑÔ#¥þ >lýªó§O;BÃH—¤Š%[J¨ïêd‡YôáHré dÔ§QÄ'Q§ÿwƒ ÛCzkzUà÷ëì¹ ûXéðÈè„Ä”TX¯ûq½ž:w¡¦žÃþã§Ï¾ã±ÿîÛõíد氿'735E“@Ž*æ+/ÞW£¹RÓIƒR VÅ–åSRß|êóSÿôñžz¤+J‹ ²wƒ@bwD„ú­fÔµ¢¡@z*¡oþ™¢>†>ŸDCl†@ÇOšf'¢~ ¨J£KËbYdDý¿þíý©/ £—/žûìé£(ü7üÿéÒç©ßKLý.O}Cìwaß6,ÖzÔ˜±¦àØì“R‡Fðã ûõøÉ3•ˆ}¾Òû¯Ú}Vé¦úKˆýcû0jê8¸ª Ô,¶`íéY…Àúà·°a­xì÷Mš2f&ž’úoM}$N=ž_ܼ!ÔƒV,ÊÏJÓ1€¬_·Ê;уt¢˜ú؉8öâ»S }£gú؆$ˆz3êFê&Ôw˜éêáI©¿ž4^­ÕgÐ(BêWõ[(õ9¾õÿóó¿ÅK³¨õÉÃ{w™@)õ+ ·³Ów%íŒÝ±9˜Ôÿ?¥þp›!Üï—õÅØç«ÍV,-¶íH‚};GwÀ>­õ¦ðmÑ šX°0÷‡?ýó)˜Ïú¦æë¬ÔRÿ½c°¥¾F±Ïl^fZŠFgÔš ËÍÙÑ…õ¡XXüa…;¶«xÔ:µÞ²{Jê§>{j=*ûЊ7Zš.€|zè€1õÌÍ5"¡þàAÒF¤sÏ:ñ7Jè‹ž…¸ ± ©? ©?a2PßÅ ‚¨¿Æø3V•¤K'ID©_S×xõÚç·y€¶úðûyê÷Œ;õõÏ‚$:°’[;:2<$ýÉþ?=õ(?Ùïþ¾L¨/N}1ö{÷±´âª=Š­ØÙ]åHæS¬'Ø?x±/œU(öß}Áþ×ûtÔžŠ±ÏoØœÝúd56,6#ÖLŠýÑb‘aë©`ÿíOI}>õÿ'Mý7|ê£õ¾þòÖ èÄš gÁËöædè“wÆíˆ ~ê}<Ó?:Q"ë ü袄¾á³0‘B¤ 1†ˆ>ml¡ÇMœ:rÈÃó“ßÿaùªu”Ÿñ‰ÚÔŒœB >ÑùªZFý{<õÿÙfê¿â©ŸógU噓ÇT”î… Ú%úÿKéÿÇSoì˜QÃQŸXó1Dÿ¾èß˦à]ù©aßÆ–íX'÷9ä°‚Áß´e[ŒJ£#Ø/gØ¿ÜÔÌ›aÿu°ÿ/SØ¿ÚPWM† ‰•—•¦Ó¨ÈaèG°;ÖÅÑŽ]VÃLa¿›‚}³O©¿zÝz9¦>{Ú‰ú`½ºjœú£¥ÅÙé»’ðèÜ´qýºUDî.N\ÂÔ©·ìc؆Jè=ƒÐ‡&d)Ô§¯U¿þˆÏ¡ˆOŒ!{ˆ! þâe+×ø‘Žá[‘æGý¯8~¶“ú$ˆúä÷#?ñÔ;|`äPŠ&!z[ø¦ õDŸsáÿó§Ã'K!ÁžrÉ ƒ5Ûƒ=‡}˜{‚ýÎnû¤Üa[£âÔZ=îØ2ÀþggöiµŸµûŠýAŠ}B¬Ë—ª(öqÇfèµêx¸¬ Ü0n²fL8N+[Ro:o0nš•MÅåõ”Ô7‘ú? ©Ï=^ÈÊ3Їå%EùÜÔã͹rÙâù^³Ýœ± ¥'' ýJè›{y2êzr!4ì9ú£ñ“€úÎЈ„ú¾ˆÏè„Ä”ÔÌ\C'ÏTõ¯´ˆõÙvêó9ÔúäÑ}^Ÿdé$Ô×'«ãvl ý#ç×,þÔãì‰!$¡~yPß,öÉšcßÞÉÕ°§UÀÆÍ[¶Ç¨’téYùE%å‡8}±OËýðqkÛ±OvìkûÜeuµ‘Ç>.Ùt]ÒÎX8­ Þk`ÞÌ Ê²GeaÁ‡BÁÍœ2n†O©ï½²ÓS_2ù4õ¥>òãöÍkWjQh½=y™©ÚÄø¨­atê©=ì§Oá¨ÏM=Ò£§dì•Ð—>cê÷$Ô›Ï ŽžÓ!„Ü!„/óYëö¤ “_\B©±¦¾±ùºˆú/ÛAý×õñÒ#ø¤Ô/'Ô×iT1ÛLžzŒž¢ ’õ¥Øï&`æžÃ>]³ŽÎnì¶òߟ¨MÍÈ-ÜWv&ô,9­°Þß¼?öÍ-Y‚}¬w Ãþñ£€ýBHm"¹­6¬[µ°kÖ°O+ñĉmWñÄuvÍeô”Ô7•ú¤aîIêC}´\ac¨l_an±^Dhp€/4!7õ¬ÍQ_ }£g!î@lAžú\ ±ò?išdÐ,¯ù‹–®XíŒôLФ¤eæîÙǨ_]Û`LýïÛ™BH}Üù„úg?ê—aéµê8\úžH}7Ì ¤þ"ÏÖý¸¥¿_VÔ—Ž½p^ᢵ†E‹%…؇ÉwõðdÇU0Ž¾ŠŒ~qIÅÄ~Õ%î¶â°ßž-û#ì×\8ËÖl~vú®¤p\AÅý×öqâ\ìéu%çGŽžW=ì¿åuJê{É9õ¥>jÎý/>.žƒ“ƾ g74aìö-›Áz>Þxpº9;‚<$Sßàaº•dÏ€ú$€Hö±$ Ô·….Dê;`Í[¸Ä¨„òŒS'ëwg õê_bÔçéÙ!Ôx£çE ç±Ãå%EùYéº$U þ~*ÏyžA”úpêR¿»tçwvÑ%_±M+Ô°oçè°%ŒŽOLIÅ={àWÂ>"‹W ¬ÚªÊ3'éžÍÍLMÑ$Àu%÷]½b)]´Ž-VsÑÌ™‘Vg]>¯ÓS1M}˜b9¦>ÕâãÖæ¦z°b¯´¸ ›Œ=œA(lA¸7)<° „s“sN½Ò€¦ŸAèC2ê;ûõGêFÝ9%Rß/ÂS£KËÌꓪ¬®kÀ†¹#ȳc¨ÿÍW·?¿Nå ;Ÿ^z©ÚÄø¨È° þ@}aéé‡î”,}qþÈæï›Øµû°jÉ}Eƒ›FŸ`ΫÀàЈ8ûdÑ2ì×"öÅ%oãžý‘aJÞJ¯+,y}ÍÅsû%ÅùÙ»w%Ãy5‡‘óñ^²7íL2sPt[‚}k+z`‰v­B-ã÷맾¦m©ª³Sÿ.õáä$öhnÄÔ?yüHô`VšN“cï·àñ v ýtb=Ö€"v(Ǧ¹g!î?Qüôbù3hðÛ‘„3  1€–¯‚vÙ„îTkõ9Å¥4€úM”úxê¿zýý›vQÿÿì—÷W”gÇ—³Ù ?X6×ãIVE&#J¯¢Ò‹ ÒËÒ,(QŠ +-(E° ¢(]"8 % ݸ«±EÍÆ’dcâñ$?ï½Ïó¼ïÌ;3º"#óæîŸpËçû¹9Õÿ²[ÖŽªO¦_]Q¾¡hU^VZ²T‚ªÏÆoã'¡ÿ¾rè Ưí¦c©Ê>m;'û¬ëµ®nžä¿Â¦ç¬-.%IËÉ>÷^ݹ÷€Êþ³7—}¸7ú^q²ßÓÙÁd¿qGíV89ø¯ é ±(ûµN ûpt ZÓ§ì >¬Ñ³{i‰ƒúQRÿõ/ôvá9ؼwgÝÖ-¥ {Ù+RpéÙÛ÷‰®§Ï¹±ŽÑ_óU¥ªúºL:Qõ?°ƒ`æ`öÎÀ߀¥aQ±‰)T;Ë*¶ÕÁRê÷‚êß|»ªÿ ^Ø59ËɧÀø3—¿bèëêŠQõUdÿ]vù*²YëáC¬”tv£Õ4jŸ¦²/húðd_Ðô¾‹2}µõ5•›JÖc×S—ÅÇЬ]èâhK?,p-[þÅâÒvôîÔÖHR?’RߨØwê{ÿ?ê~õµ¶©Ou¿¨¶×Ò¼gGÝÖÍ%ðnf§''€ìÁ·éæJÏÞÔhÆtº~réPy5µ=tÑ”*ôœ“ÒGÏÀÐÄ TßÚÎq>àU_"MJÍDë,Ù\UÓ°›©~»¬»oàʵë +-Úù†ªÏÄ«þ¿þ‰ªßÉ«~}ueù†u«ò³pú,ó]l--fˆÒÉÆÿž˜U_xø +-?Ÿ¶ û&fæsæYÛƒì{¡ìÃñƒì®ý˜È>díác'Ï*Éþ“4!û¬ë_ ~‰'G³nn[E|XÐvP­(¶n®Îö6´ï3¦³´Å mKÝቤ÷Z¯‘£~|LdXð“úw¨îõÃ?ÜX[Þ±:¾MiLDp Êž£={½©lûÐ9FUÿ¥£@ýwxöpÊÉà3Ø8§ƒóJŸè¸Ä¶,d ›[Õ¿ÐÕKUÿöÝûSý÷èìz/*©þÚ‚\”Îèðà@? |zsfÍ4çäáÃ…¾UÿO‚ÖÿEQöiÜÒk¶…•­#“ý(&ûë7nÂ#Ý÷é¡ÏŽŸnkïìádÚþø©†dŸµ½¯[ÆÂvßî I í{’T‚²ïã±ÎeËÌÄ‹[}®ó\ëÅÖ{­×HS?àKýAJýc‡áð€ú×­ÊËJKŠ Gëê£ì™ÉÏ?ÍQÕe½Tõ©qöQå´sš¿Èá)‘&§eæQç¬mhlÚô9×ÞÙÝw Tÿ® ¯ú úÃQý› TõOúÕ߸nu~6:gdhÐb€¨¾§œ¼êåÐ#Êñ {¯"ûôÉ‚ÎÛØ;SÙ@ÙÏDÙ/Û² e¿eÿ¼@ö Köñâ}ìïíâÒvÏÎíÕðcAãW¤$Æ‘¸õr[àì@d¦ñ zx¬õü›5*\jJƒÔ—ÉÔS¿h(Ôß$6ê?úÏB}|7áòOk=ÐÔØPSI¨Ÿ‰¶¿&¹{Ë9æH}ø4‰rŒ§ìz£›'(ÅåÃíãȃûG„sªž¾¡ñÌY͵²upYàîíˆ;»’³’(guý®½Í<|ú¯ +-UœóÅo¿kJõÏâìáÏ«ÛºU•"Ÿ°‡ª¾¹™ZÕÿ«püÚî:Wje_¡÷äø±õvŽóQö—†EÅ⓵’—}·m ûòk8²ÿâ94þ'yã¯_»r©ãöÔñÏíoÚÝ€OJdfZ²TBòlËÉŽ´ÞÔÈ`ú´)ï³ÞÓÓSc\¢i¿VkÄ©ïïK¨Ô÷õW >¿O"¥~·ì<¹|Ø¿šÊò E…¹@ý¸¨0Ø>wtX>T¹ì)StïKGIõ ôÉúq¾9ÐÈôÃÙ–D8=}= Éé°ƒEÔ8™êöÕ¿…ªÿ艆U¿í4°U=Sý(¦úŽ¶VsAõ9Õ—zâ¿zÙÇæOT”}ìýw/ÿ%!1Ò$ü²hëwÊe¿oàòµëš•ýûwo3Ù§y{¸x²¿¬õ«Wæ¬X¾,>&"d‰¿·;íýG³fCâN•7Œ û"l¿6ëmRŸ…sÑ*¤þ²x G}/‚}/µÔo5õ¶‚uÔWSêg,êÃá{õÁöp÷¸»§²GotïÔ•ô™m‚ê—«>‚|Óšø¦7!O|RjFNÁšâ’MU5õ»ö}zðÈç¸+{._ýúß7oß»ÿð{uÆ9Õ¦ªúç zT?U?‚ª¾³½ U}½©¨úUTÿÏbS}5²¯«Ë=ZŸ4"W_.û‹hâÆÙ_³{ßð–dŸµþÛ;·n ìCàvÀÝßÔˆ½/c<Ä [àëIšoi‘kÂ5…vŒ 2—o¿â«%¢h¯F„úùYéË)õƒõ©ì{xê‡EI¤b§> +-Gý}@ýŠ2¼üŒå‰¨{þ”ús)õA8È› ¾¡pö£[§T:Š«‡»ÇdTÿ½ '¡êë!wˆê;8/póò ð¤gçà +-–Uß<ÐzôÄ™¶Ž.P} Ï[wqYT„sèªÿTA8åäÑSÕ_™½"%Áƒª?ßÑΊ Ú¹mŠ[õ•SW.ûØ~ÌÜéF û´ûî$r%¼ì“æ7SÙ—iPö%²ÿzïöM–¸xvŸ9Hþ¬ªM%Åk +-r3R“¤Döi÷­YæâíM&ÇÇBWWUöE4­•&¨¶Q_Ô?/¤þBýl|É$Qê©N©ŸC¨_5dêúC þ‰£‡xêÀ§™ +-¦›«“P„7|ƒÜ=•=Ñž½VKGtÈòÿÛØ>€þ4ÀŽ©™ùœyÖvN`›>‹ƒB# wr ×—n®ªÝDÕ?u®]ÖÝGTÿPýï@õ|‰o¾¶êÿð„©þuOŸ\õwÖmCÝ,ÌËLcÜñÂÄ·±äTÿLõlj]õ…·Ï?“}Ò&û´ýLöñN9ÙoÒ ìóÍÿ›O®eή§«£í̉£­H÷+Ê7¬[™ŽŸ´ßÁe¦±¡>¼Z˜ºHêrP¾¶Û.‚9êK%Qá!Aþ¾>@}À¾PßÇ×?R?)5CúZ‰™ú»xê§Pê{Qêã› ‡ÿÁ«¨¯í‹¥” «Ç 3–º¦ž¾¡ RÇÊÖÑeU?žÓƒòJØÀ½h›'Î|q¡«·ŸpTÿ!§úÏ•tshªÿX½ê7 m2ÕÕðõ\$W}ýiS>˜<‰Œè3_0~c²oJ_-^ö“Eøim×´ìÿþÛ ÚýŸ>þþ;ýoˆì÷uËÚÏ"²D©Ú\Z¼¶073-Y*‰ Z ýwu²'²oj„¿¹>Œ]o{£ÔWS:Š‹‡›Ç›&2‡WM +-{gW7êš± ÉéYy…E—nÙZ»£‘Êæ¹öÎî¾KW®]¿A°CUÿ—_Ÿ¿x-Û|Õ—QÕoV£úÞèš6– úäÏ£ªù2Õ×ø…3àGÀ?[»J²·ŒÉþfEÙïêéלì?£²ÿðÛ»·Hèö÷v]øâ éÿ^¸¼Êòº9@”x6€….Ž¶$vé³…€ÜÏr÷]Ù×´Q¦þBý“ŠÔß@©Ÿ$§¾7ž§—7RiHx4¥~¡~-G}¸eÑRO}‰ +-õÑ6& +-©/ß9mÏ[$¥£¤ú„8ˆœq9“qù ŒLÌÌç̳¶sœ¿ÐÃUöÛ“Êšú]{™k^¸ª•£ÈæOjT_l¾¡ê¯AèÈUß<^õ¹?O9òŘù +-Cx畲oËÉ~¤PöÉN WöUûÏdS÷Ú•K}ÝíçÈšwÔQ‘ÌËJã"€ã#¹ ×# çGƒw,Ÿ¼bŽ^m”f¨ž§~‡*õ×!õS“¤±Ñá¡KåÔ÷êû"õC#¢cè5ƒBpÔƒëá¨!nêÃé[ÁÞ™âÚ uOp÷Úž·HJ úpÆգġ¢9ÛŠ ÇË/08<:.1%=;ö˜S·cÏ'ZžÕ„E!ª ü€¨þ‡£ú?ÃÔ_®ú 1¨úÉR S}†ê•{¦ˆy£&z•eßd‚×É•È~8ÊþÿØ/ó§*Ï+Ž—´ì4nh34¸aQR"… A"Ü}ƒ \/—Ë.‹‚ +-.H ŠWD\ "»l""â‚R§ŽV((b:1NƦuj3ãtÚsž÷}ïÎ*Ëeæ>ÀûÃû=çóýõ¦¢ìWÕ6Ž‰ì3àÚ½ ²ÏÔnGûõVL ¢d?{wwêÖä@ʺ ‰€ãçCŠ÷³O©s‹n^‹YTÌÁ¥Ù½ÆÄ¿ñ£~±ŠúpADJyˆT"äsÙþ@}ò€úl.©ªŒZŸ˜LÏRþÉ¢’rc§~¶ŠúR1åëåá†Ô_ªI}Ti&êzfšc‡sÇð†h&ÌžõT}ç•„8„ˆfbrJÚîL‚œÂâÒŠšú&Ê4ïu>ìîí#Õ×dŽZõÏh«~ˆŽêDy&ŽZ3Xõ“}ªzI´ì¯¦e_©#ûêÆDö_½¤zd¯§ eŸDÐX[UVRDŠ7 ˜&‰Šx,Ò¼.NLTõÂÁŤ`®'ûFÄ¿±¥þU ~s“ŠúùD(êG©©ïGaßw­R_$‘Êhêã:çÒÔ¯§¨oJPvßÍE›úd樑3Q_çiBŸ‘LBý”e¢ê/´úÈv©½ƒ£“‹ ©LŸ´eû®Œ¬¿³çÊA4›A4o£hvõ<~ò O©>œÑ©þw¨þQ¢úÛ6mÐR}—AUÿÆ«úº'—žìãÁe‹Õûû•ã,ûo Ê~_o÷ÃN:ƒ¦úšŠRJ%÷e¦§‘{K)Ù‡êõþÂ}%upÙ,^DdŸŽAU¾:ØŸì?Éo<¨ßXWSUÔ?‰ÔÏÊ Ô‡„BeÒPŸÔìûõYl®@$ WI\î‘üSEçhêwLAêÏ·ü€¡¾Ý›ì¼á™éÀ†qÌ÷pð,P270zh™Î®îžÞ¾,®0 X®ŒŽCÍLÿ*Ý€Sy¡¡©åê ôLœ“¾þ¿} ƒBçÕ¿_ê_ÓTý}´êG0ªÿ¨þgƒ«þÏUõµ×_SögéȾ#û”ý¸ › ûZÍ;ì ´š÷ù3ýÇ=]B„ÐÜX‹Õ{ºàèÁœ½˜BBl„BFº×gµ‡ÄðéÇKm¡|aéHû2Ah]FÅD¾ñ¡þ…ªòÒâ34õw¥nM†^•ˆ< eß¡ïÏâðb ¾"÷9%-=3›¦~‘S¿‰ú£~zÐgs㘖„6D2W|îáåãÇnÂ"c’Ñ2÷þñP^𦼺îâåÖkíŒfÂœ<{þ=Ê«~}¾êé¨þâ…ó‰êÏ™:ª?¨ìÏ¥dßJ-ûÞkXl‰á }qu´_o½|±®º¢´¸ðDž\»Ó*‘оÇá ²¿l‰ÍbXAHvûW… ûê7:êgdå Dý ~=RZù8cOÊ&¨åźà@±Ïe£ì¯Eè³Ø\¾PÔ‹À…Þ¶cCý +-šú6NêçiP?¨ïk¢þ°Ÿ™žê›«T¶ TÁ"Š5ËWºƒbús…ÁreÔúDrîË=|ìDaq©š6pv÷öõÕAnBnµL7†U¿SKõOkª¾’VýÕT–¾ê¿c´œ@ög–}_ƒ²ž–ýÛjÙÆÈþ«!ËW[ö©ÍSÉ>äÐÓ…²Ï´oYIÜ\A&wnß²1>&B!“ÒI¸­prt°_jkmµv.`’…öß1æ +-ž°÷vÔ/Aê7 õúmm:Ô?¥Iý˜ˆ0yˆT""²ïïÏU_ ’HCäa‘±Hý{¾Úõ,îZ;PÿAê¿1&êó õW˜¨?¬§ýwUПe1Ic9¡•õ‚šn`˜l¾X*SDÄ&$mIÝ•±f¯³¼º¶±™MWÏ£'jǤæd8´aTÿ5­úA;¦†ê7\¨\õ?ÆÜÌCÕŸ;µTßìSaвo9LÙ¿8”ì¨}qõ蛫¯·[U¿Mõ5˜ÄÉc‡s³3Ów V¢”òàˆÂ×ÛÓÝÕ +-ØÞγ`˜C+ cŽcbÞ˜R¿PÿRc}muÅù¯¡”ñƒx¶m†VŽTõ€ú(ûþ}P}ž@$ UFáFo‡ïîÇ»@¨cÔïÿæÛñ¥þÿ†¤~'©_WUö5ܘjêË õ½¿øœ¡þËßš¨?ð3Ó m—´^ÂÔh>$~igïàèäâºÊóKJ0Cã5Ô9˜†Yy¡¡©åê dMçÿ¢êÔ0ŠÉÀæÍp`óÓàª_Wm@õ%Œê;é«þ{¿"œ™ª¯/ûæŒìÏ‘ìú¶Ñ²O,:º(Ù=’ú%I¼T'ýÛ…ýÛqóZks#EAÞ!°É]©[“b#à ÇÏÇ˃jàeKlƒzAÃΞ9ƒî`&u i ñƘúW¯´\¾t‘P¿¤Ó¡©Ÿ”¥ •Š…|}pŸÅÕç ÅÁ2ExÔúDâqðݼ‚ÂbÜh£¡þ7ºÔ?£AýpõGôÌôTß\m—`— ú Qz¹Ü@ãµÆŸø%L^bòÖ4$Í¡¼… Õu/·Â=¨…MÃüiÃÄ´5 s˜ªï­V}+µêϘJª?¨ìÿz¸²_ŽYÙ¿×iPö‡ŠBOöüÇ/¾ìƒìÃö=¸÷έm-˜EYIÑ©ü#ØÀ;·£M†C"©`7'Gû¥¶ÖV ç[~qÌÁ8¦CT&ìÓïm©_YC¨…¡~+R¿¡¶ºò| t2žb˜Î–¤ÄõQáŠuÁR‰HÀçrØÀ}6›Ãå Dið:EDt¬tê®?ìÍÁ•«mln½Þþ§»“Nýï4¨ß¦Gý >XE}ÇO–™¨?øÓ‡¾Š23gYÌA¹ÌXYSv¹ÂÍcµÏZ6_,•^Æ«®Aœ¼2Æ/ïàŒ¨HcHõ ¦ÕW f¿Zõ[iÕ?eXõÝ(Õ·ÑQ}ü”P}-Ù×lááËþ êî2(ûÿNÿ5xvÁòÑ ÜK¸£诩(-.$œ™ž–² ¸¢”@ûz{º»:/ÿÝ'öv6°…ó˜ dº*“ìSo,¨ßÔ¬Eýæ&ŠúPÉx‰a8)›6ÄÇD*CeA‘Ïã÷¹\_(’ËB•‘±ñ7ãNïË=œò ˆu1‚Çý¥»gú‡I£þã¤~P¿‰¦þ¡õƒ S6:†‰úÚOúZf9}&ŒÜÜ÷ª¿€†ÌrgpK¯5þ„2a‘±x î&Ç`…ð‚k7;Ð.»z=yªæÌ¿pHF úÿQ©þ Zõ{)ÕoêÿŸýòþŠòÌâøš-¿yàXˆTÀˆŠ‡•H0èâ!¬²Áh,T‡‘ŽôŽôRTT RDDÀ¡ ˆcAQE@Ac6Çh5k’]w={ïó¼SGDQ2Ïðþð~ïý|?w.¨åÌ÷PõÇYö/ŽEö¥^b<²O//~3¯ŽCJ8;3 }2"$À×ÃÅZØÔp#ˆ¦†úÒŪ 0èáé _ÂHdØgÞøPŸG¨ßB¨ÏãÖÕœ¬,/-.„l ’ã¢Ãƒ|½Üœì¬-@öM û††FƦf,¶¥µƒ³»×ŽÀÐÈ»’÷¥eÂg‰:4óú’Ô§Þð©ÿŒ¡>`€PÿR¿K@}ΉҢ¼ì õm-¶oZÔÿLHýÙ +-Œô‰œOFý?ø2E úB± fî|åªÀ ÍÏV­Ö[k°~“‘!ãé‹nI¤)Ã;…rõú‘;÷þIfD3cWý.P}”KU}¸Z Q}ÓWP}Aîï:_^Köw¡ìçHÊ~/#û„²ÿë(d_X©ì3y´µžmiâb ÎJ'„ûyC ÛX°àø÷ÒÕÑÖZ¾L]mÑB¥yŠPÄ3 ˆi&bØÿà÷Žýq¤~K Á>[_ÃAêÉC‚lâc"Bwx»»8ÚÛ ì›™Á3661Ûj¾ÍÊÆÞÑÅL.>+œ!N¯™OÍ¡·ð.ŠLÐBý¿eêÀÔ]o¿$¤~¾õ)õ¿ Ô× Ô'˜.ÜõO:ôÉÀÉÉO#„Q$b©¦®¡¹b¥Žî0Ë-&, dŒ0½3.,.«àÈ´¶µ‹¹%Qý'/RæTÿ ¤=®ªÿ ­œèŸ?Ìg€ÙWAö@"TöyŒìwA ƒ/“ý—a_‡°…1û4[=7®_½|ñ<ÿTc}uUyIQ>$²wBlTh ö°ÛÌhó}=XC(bÌDe>èׇè_‚P„˜ö'úßOÌ{ êgå€s1ÔGÕGìƒì7Ô×rªN”;’ŸŒ‡XdhŸ‡«Óv[kK6`߸Ì7Eèƒêowr󄥋ŠK¤ŸÅ¥®Ãj»Òâð.Q¿¢ô(¡~bldˆ¿·PŸ…Ô_£û7õGxS†à…Z%ÕJ9¸ýæ)1^©¥ „Ñ_GÅÒÞÉÍË/H4GKË«j¸ÈPý®›·`B¨ZÂ9øŠªÿ_)ªÿ=ªþàí[7eŒ¸ê'Š©¾É$Rýeÿ£—ʾHĈ²‰Œ\Ãÿ¯a&‘G‚Dàøêíî¤=ÜÜ+lÉËÎH´€Pøx¸8àùe¸‘ibM õ¥‹U(ìÏœŽ©LËç²?~Ôo£~uUÅñcE¹‡ lä°`_O7g} 6 °OžÙVÛ‚¨¾»—o@ªÜÞéDå@`©Áä`‚n1Þ@¨ÿô­Pÿ·_ê?§þÙ–Æz†ú©{…Ô·do§¾²ŒúÒŸ8ô‡HåTU_”?V]B´rÕj½µë7™™[Ú:¸zú„F"aÒ2³óˆXâ-xŽALßÀI³|uÆH¨þPýnTýVP}.Q}Ë´I¬úÃ˾ÂH²Ÿ8Döù‚"¦Kû=Dòh4=,)ûäúìÇ"î¸ÒÖz¦¥‘[Cί\0Jlâð ?owg{ëm,Zź:ÚZË—©«-Z¨¢4O‘Ä2M°±Ð\dØõ¤P¿ ©ú4b¿‘Ç­«>Yq¼ähááìÌ´}{ šˆÀÞ(ûvÖ–lsà>¼­,s¶…¥ ¨¾«‡·_ nurJjÆ!ºÕõ-g[/M õqîõáÄÄ ©L¨_]QÈQßNDýO5Ô õeÔ—ò¦H(%uJ2nròÓ`ÞfÍQœ§ xQS×Ð\±RGw ðe‹ ËÂf»3¨Fp8‘‚ "à•Ü&˜¸;»nöݦªÿ&D(–8#ϤC_bIUý:TýBFõ£ÂÇ ú¼h£ì» d?í`N>‘}.È>YÚný;¯+ûx~= ²MÜsãÚÕËÎ1÷WI­â„ØÈP’ŠÛÌhó}= –±ŠÈþ,…ÐÆr´™:Oæ]Ïæ¼±S?]@ý†ú§á¡ìõk8•å¥Åp†üzÿÞ¤ø‘¡A~> ûŽö¶ûä!ô­mAõÝ<}ýƒÃ¢bÐårò‹JÊ«j¸ôZ$Ú&GvúñPÿ»©_ ¢¾»PßdóõÕ@üdÔ—öDÐ'FIÙBá"ã6C¡¯ÄÐEK¤RÅ‹½“ZeTl"¨ÆA:ä$Z VÐ?€Ð-©þH^)¦ú¿üò”ñÊûô°ëíî¼ÖÞ—]ÕJ—dêÛO>Õ›ìÛ¢ì†E1²_H0qÙ¿Kdÿ¡ìÿ6r(Ϙõ#Øü观ì{wðvßÍîN”}8Àj9eÅØÅ©)Éñ1!>.PƦ†™\45Ô—.›?WXÇS‡ö±ö'úçOÀ7ê·Pê·œjjl¨¯åT(;v$?'+’Ù@dß`›mnÎfo#Ðw@ÕßÇ"®unц†æÓç.ùé¸ó šîô¿†Rÿù›¤>øCýþÞn°?Jýʲb¤~JR\Th€RߨoÔ×J}yrUʨτ¨¿ý†ª>‘JTýªò’¢üœLTý˜ˆ`FõÍ&êZö¿ÚbBdß“ÊþɵYëä2:Ù—,cñ\n\k¿t´quåñcGò²!˜Ý ±‘¡¤Ží¬ØfFà_úzØÇ4‚}…ÉF†}òƃúõ H}>Ÿ`¿¹‰Ç­«9YY^z´0/ûà×û÷&íÚFdßÍÙ°o܇gemÐwtvóDÕŽMؽ‘¹ÊêzÞ©3çq­»{ûèôàR¿=ê?PîK¤~¥~Måñâ‚\õí‘ú_ Ký?˨?EÂ&©N’Y#ÐW˜ÐWRY¸H „RKТ¿Ž¥½“›²¦APÊ’ò*œþy„Ë¢úˆ¼H—ð"….Eªß/Uõ÷$ÆRÕw`T_R©þheÿ ¼Â ”ý`*û™4™n#ÊþìK#ý—aˆì?EÙÝ`}7»uÜP{’&“‘š’âïãá‚јn$…¼Šd³DYÎTA:ØÉâñ¼ï{mêWrúÍ õùDöêk9U'ÊŽÉÏÉJOMÙ²ïëåî +-Ø·GîÃæÛô]=¨êÇÄ'íî5NÈ\û5\kp2<ÿ<‘Ô¿( ~!R?9>:,Ðשo +-@êk}òW†ú³ð¨£þŸ„f1ÑyOÌAŸÈ$Å +-åŠÌê$‹êâ“«Vë­5@²€P:¸zú„DìÜ•œ’šJðöËó©Êô ãë—äCÂè5.¢QQ1L˜0Ee 1,QQQéíçÀ9ôÞË¡wE^¥w°7Alc[ëì¦ÌN4qsßÏó¾ç=Y3”çx¿\÷û»~e]SkÇùKWoôôõÞ{ðè £”ä>F —aUØBU¿½¥S}1U}'iÕß0•Tÿ+Ù|>)û;©ì[ ì{ú¡ì§KÉþyÒÇwîr²OÿÜÇZǘ þƒO?¼}| û¸«½¹áDS{òxzR\tx°¿—HÙ˜›A#ëéêhA8jª*ÊPÉË@öûð;JaŸ“ýIÐľϣ~n~K}€~{{;bŸÈ~eyIaþé“Y©‰qÑ!DöÎŽ€}+ ྙ©©0ßÂÊÚÖžç,¢ê“ÿ?ZP\^]×Hÿë[d)¢2¼–¡þ¾8õ¯Pê—æõ“b9ê@êoÛ¼qPÍÊŠ¿#£r†úRO*2T‘#X™O ¿l¹Òª5*ªjk×mج³]Oÿ¯3261'>éíŸÌQ‚7{û´ÐóàŒr”lùQ¢ú/‰Q´Ü¸zé<¨~UýãéTõ=….Dõ¦¢ê_öPöC"ʼn©™Òº†²…<œì¿e³Ñ¼yõ‚)ä>šM+ΰÒ¼SÙ™©‰±Qa¾žB>ÏÖÒì𽆻w‘t4Ô¡“ÁÁ—.Q ¥L°ùÐVRË“"¢ |@ýj¤>¨~;>”ýFýªŠÒ¢‚39ÙÇÒ’ãÅ‘DöEn|ľ•¥…9y–V6v}¾›»¨~x4 E°9e€ÿš¹0†¿KSÿ¿?õß2ÔÿRÿÑ`¡> $#/'+£¾ù‘{ €Ú@ý?"‰ûõgËýúCêO·û"o$èÏ™‹T‘™T\±R°¢®¡©µeÛÎ?ï6Ü\±²ãñE^~AaQì,­mä±É¾$›ïß0üàÞþ^²Ã:Zk«Ë±’³2RÄ!>nÎ6ÐÉû÷`<ÚדR^­„ù@+/˜ͦÍ`b¨_ßH¨ßÑÑA°²_]YV|6ïô‰ã)Œì{{ˆ\ùÎ<;[k+KxVÖ6¶v}‘§PX¤lŽý±šÛ».\¾ÞÓÛÿ5³ñ·&—óî PÿŸHýW/¾êßêwõ«ú§õC¼E|G þ^ýêðf Ij’„ú³áÒæô-^J\©²~“öÖ(“û™ZVàÞÉÌÌ&\!;°ûâUª“DõÉu€Oþk4>9Dõ¥ÀrÿîÀmV'ëªQõO‚êÇE‡ù¢êVŒÇ¡ú“#òOȾüb„•ý Œì€R¶w¸{3²Ÿ²ÏüºWȯK…íÅG*yäp>¨d’ÎÍk—/tµ77œ# ñ$ÅE‡û{‹ ”­ÍMH>zº:ØÊjª*kV)-§Ø§ ɱa1Ëd49Bš¨7Ô¯­oln!Ð'ØGÙ¯­©*/)ÌÏÍÉÎDÙ +- ðõö"öíûäÙÚÙ;ô]EÞ~Tõ3²rr ŠË«j[:èN`„ÎDæp¾õßpÔ¿ˆÔ//Êê'ÇEI¨¨¯‡Ôû›¡þ‡ƒ>ñHJ RˆI.¦,W•TU[»nãfízú{ŒŒMÌ­í]ݽýC"bâɽ—UÕ6´ Àdl‡ ¹ŽO«þp\ùc&›T¿÷&Ö;b¥²´0ï¨>‘IT};«£‡©ê#TÔ§”êZö #ûƦ6ÐʞΗ“R¦²? #û4žãßûntCŒv2q/Ï@_SÊõ5L>‰±Q¤•ù<;+³Ã÷îÞµ¬¥© )¯Ä^V_øÛù¿?’Ã>'û“*¥ zE}TýNxDöêÎUW”‚쟢²àë…¶ïâÄst°·ƒgïàÈsr¸ô}‚‰ê§;q*¯pÈL›£¾@W"½› ¦þOR77„úO=Jýì Žú&÷~«¯§»eÓz†úK/’¡þ/¦7õe /9$ +-ÚBy‚eU5õu´¶èS ÷•´ãñE^~AaQqIi8 K+kê›Úèmô àdeòB+³I‚•w+D&QõŸ?{úe²¨~Gk#]\K]¡âæâQO]Õ£ìëPÙØ¡ìC-‹@öáç-ed[¹ÿL±'Ïèo)sS ì«¿·çú•‹Ý-µÕå°År²2RÄ‘!>$!ÓCû±—wlÕÞ´#ÂbV„ŒÐà™ûý)§3öÇIýðhƽ8êwêì77Ö×ÖTr²ŸäØwðx~Vb}sw8øcS]ŽúýŸ¸›ûõ¯^¬äŸ&Ô ôqðlúû¾ý ¥¾Ú~ à¨ÿ«ê5ôçÌ%@è+Â¥QÔ547ioÛ±‹ ÅÌÒLÒÃ704Rœ’™sælIQI2)T†qɱª>º$ •›×.£ê׳ªŸ‚ªïï-“¢úJSGõ?!ûóed½DöM,l¨ìC/Ó1Fe¿›Öò]ZË/_q[L: áZ™ [™Ûb/q‹a-ß¾Ejƒ1VUV”½œìkÌÞÚ‹Ù@_2Ú¸n­6³Òr ª™bŸ¦$‹ýY“+¨ x㡾§4õË*kjšZZQõ»ººö‰ìWU”QÙOMŠG…‡ö½=Ü…®¾‹3y.|«ÐÝ“B?:6!9UÿlIyumcK;ù³ûúïÁÝ|ÔgmîÿAýÁþ^ ~7Р¨Ÿ-¡¾1Pÿ–ú«•ú_/@û£Ôÿåô¦þ‡ÐÇ##ÔŸ g6oÁ¯¡F*­¦@Ù¸yëöoô öì?d +-Dqv%"Ã\[qYU­Ä$aÞøxSFTÉ÷RЗ¨>Ç”Á¾žë3§úÇÒ’°Þ}‰Hš³ªO‡úY9õÛ€ú]]ÝÈýŽöÖæ¦Nö¥§$ÆÅDRì{zˆ„n®Ÿ/¸º EúáQâø¤´Løb~QieM}SkçyÖ$gÃÊÂ[–úïê¿c¨ÿØ–ÄHýK„ú@ý™õ-M÷‚õÿ¤¦J¨$±`A0­©?K–%&šP‰œ,WZµFEUm-òDW5òà¸5'ÈË/(,:.)í؉Óù…ä4ÚØÓ$")…”Ñ›ä[Ö$)/©êß½s›¨~gÄLT?+#%!&"Øß UßrXÕW˜*ª?jÙWQEÙ×feߪ÷XXT,†„²_ÒFç›ÑxdŸ[cP̯_>g2‚9vý +-4sKcmuyÉÙ39’824ЪÙÑ–¦´{×èfM ŒIyå +-Å¥KhNsçHaŸ“ýi‡ýÏ ~FVΰ¯Êš:¤>@¿b¿­µ¹±î\uEYñÙ¼Ó'³2Ó’(öü|€ûî"¡ÐÍM(¹ó}ü(ôãS3ŽŸ8ª/ës Ïž¿`®Fʾ0õo²Ô/)È%Ôòõpu²ê!õu´4¥©?†úøfÉ¢DŠ%r¸²…ò +-H“•Ê(‘šZ[¶íܵÛ-ÒÒÖÑEèé)NüûåýUå}ÇñÓ´ù¥=9ÒÄ&m%âÁ`±ÔÀ½QQ Ü{"*ÊÞ—qY¸LÙ C@@¦,™nD +-Úôä´® Ïicæéûóý>÷¹\‚ûòüÏ/ïÏ÷õ~½£ã’Ò2²ó +-KÊ«j9Pnt(<òþÃ/¾”ê÷)’¢êw3Õ€R\@åÕ—ú’êÛZíêúÉÊe\õ¹Dj %ÕœìO`²?ÝpÉþjsŠÉÒú½³‡ƒ,Š€”x5ãý¶Òë’ ûß"£ïfŽ}Ï2R4³¸Çº:Û[©šÏÖ©,+.ÈÅ Kˆ £nvq°³µÚ»sËƵæ«W/š?Û“LOWí¬¡>ê}`*FØGR¼Ÿ{cÿuðʾCý3µŒúçñûõu5Õ•å¥Å§òsOd¤%'öeÀ¾¯ÄËÜwvrdŸ“3˜ïá%ôƒCåQ±ñIø!©~yµð´Û:nu+\^¶ø°xÉÔü@ýûwÔo¾T +-Ô©¿Ñâ“•œúúûÔÓõßV—EŸ +-ôÛ újo3–úã4'NÒÕc9±±‰©ùÚ[wB"í\=}€“ÈØ„n‘•5ÜODüJ„þ·ýC¿Pþ ÿìN÷­Ž¶–kWSmµ°Èx9ûy»c’ÙXîÞ¾y½…Ùªå +-›l*êYG oØÿË{û<ªaýBýª3µõ úÄý³ õýŠÓ%Ey9Yé©À~4Ù~ ÔÏÇÜwsuaŸ«˜ïíã'%ÓŒ‰KLIÏÊáªU¸tåZk{'ž6Tá.Sq ªˆÂË >£>–å¿ANýó ~YQ^vzr¼’ú»·m´0[¹LA}m°`ô¿RŸOBŸ.ŒQnlä»@ 7H]½¿Oa4{Þ¢¥+V›YlLöÛ¶wv—ø…Fpšä•1‰¤Ëhëä8ùϽ¿d)ÜÆàxòXà Yä=²HÂÉ Rý³õ5•PýÜ,¨~´\àëåêhg»ª¿žTñü9FCTõ–ý‘TÐ*²¿I¡ž±É¬¥ ¨Ù‡·)_ð‹¬gL}uó1a‘á%R9ß麉·¨˜d%§x;G…‡ (7§£P=¯[ÃFÙÜYÔÏT샿*²zK½L•ŽþeÅõìßsR?ûdAq£>©þú€ýƆ:`¿¼¬¤°àdvfzjÇ~H tÜ÷ôðpÇçáá æûú) <3›µWýæë7:nvÝa7COûÑ«¦>˜  ~gf%§~~vz +-Q_*qw:b»Ô_ ê/õ§õ5E꫱-9œ©ß'ôEpôÇrœ:ÃpÖÜ…K–“AnÞ¾Û,qrc +-—”– ˜””W #—Ñ}ç š (‘?õ)‘Mþy»«ªÏ²¼„©~BldX¿ÄÝùè!bÉF…ê QÕÙŸú±V“ýÍèg6Ê|B()&ûel“ñ'Œ íÌsúæirbA}Mí|ŸÚ™…Çxálý™Ê²â‚“'ÒS(©`©§«ƒ­ÕÞ[•©‰1 +-z&L YikRCSXzçmµØ“cÿá†ýç¦þ©â²Šªšº†F‚þE|à>a¿¦º²¼¬¸0?7;óxjR<°/ +-”‚û‰··——··Dâãç/ –…É£bâ’Ó2Näæ–ˆªß¢:¶EQøîeQÿ§~©ßÕÙÖBÔ¯­"êg¤ÄÇÈCDêoZk¶ +-8Ûpº¾Þ¯ÔïñýF•"LöŽàÄ Mmæ3ç,X¼ÌÄtͺ[wî;pðˆ£«§48< +-—–~â$@bÉåæë­í71é2îã2”0!!”CŠ0yøàSÈnRHKŠòs³Ò’â¢å0HB‰Íþ=Û7+U*©>dW}µ!¢úO%ûhh.û[wí;€‚vB#cRÒ…27a”õHª/Ùp“)ë™'õùg4ÊÚZX?×UW”åçÐ*‹‰em؆fÙ 34ô¢y³±ËôõtuPÑê£ÞgÍ°ÿ‡ß÷ÌkØaÿ™¨ïÞ‹úÕ >©þÅKøÀýógëýŠÓ¥Å§òrOöŽÅDÉÈûR?_öùÁ!¡áô³ròØïHèð¶o(ß6ºž>'žËË¢þÔÇ¥ Ôo¬­:3ËHIPRÏv¢þòžÔ‡ªRÿÍaI}諸# ¯è¿Ë¡?Nsâ$]=ýi¤‹Œ $¶ptñ€$1ñÉ$Ee‚´ +-: ŒÀgg‰Ò ±æ%çPìå%§¸@‚$~ÞîNGØÇü‘T.©>ãÈØ1£‡˜ê$ûjÂ2cÝKö„åéÎfYN>eÅ Z¹ÊxTªýÜŸì³wÈúY_exŒ(è–«MÏ5ÔTñYÆZèçåætôµånVÑ«–/Á03œA­£…¸Ô©¤Y^#X^<°a‰ýg¥~pX£>ÇtM}ãYýË—/ƒû ûµgª€ý"ûq±Ð}p?àâ  óÃä‘ѱq‰Éié€~AQiy„Ž«~Ç­ž#>mU{UÔ¿zùQ¿ÔO%êøx8=hEÔ7Ç…õú¦)Ùƒú¿Qðºe_Чó BîH!yÔÒÑFfΞ·péòUfÄKëCöÎîÞ~29I^ai9Ó¦«-"IHD|<ôR@_H(ayÿž@’v®úug* ú9™ITxˆÔÇÓÅúHYcjB‹ÎhWýqCPõ!û£ÇŒ0Q%-È>âÂ0Û‹aæ䆴PÑ}ì²’ÓUBXhè'eÀ¬z´0ËĆîêloUì²ÓÅTÑ©‰ÇxZ®ŽGÐÑ»¶mZ·ÆËlÁÜ™(é)“?ÒÖÏZš&ÖtŸØݼŠïù©_rº²º¶¾ñÜy‚~SS¸ßû%EûɉñÐýyx¨L̾™,4\s,>1… ² ƒÐá\š¯·¶÷3U¨ÿb ?ê7qêäd‚ú2%õ×õ€$À:sÀaNý O÷%¨£ú˜±ãµÈqc³æ.Xy\³nÓ¶]û€G7/_Øc”°)Á‘®­Ê ˆÃt@UõûñÇTüQ ’î[,`¦œ#)ñ1¡~ÞnNÀÈÞ[7X˜‘<Eô‘²ÖTýÁÉþ8.û3ŒcSä…’¶9lïâá# ¦¸Hö Ki˜‰i1wCE÷¹ËUôT4^c·0ÌÎ7ÖUSGçfO¦¸‚ü%.v¶V{wlÙ€ifb¼xþœ™OÓ×›TпrÜgØo`Ø/°Ÿž–Bº ð‡……â —G€ù±q I)i}ü¬B‡·ÝSõ煮 ¿–_&õ¿¨ÿ5§þ¿HõëªAýÜÌÔÄX%õwl^g¾ÔŸêOÆk¨âÔÇ|’úÃá¨èëú‚8Ž`Ð'süPc¼¦ö¤ÉSþ1Ý`æœóµäŽV¶vŒ"a‘±Ç¬Ü‚â2ÒÚ€­°Çn‚¾°ûàHÿª/è#çÈ‚êßF¾­×š9FJ óÐëÇ°`)(bØÚr÷vrGãEt¢ê«3ÕgH©þ e_‹dšÁLÔ4m³ [kiL³ˆ˜øä㔕4—}zÇÔÑ,®GŠŽþ™´~‡™"®/×]¶ÌºovÜà%][UÎòÂ4‹–ËÐÒîÎö‡m,i›¡¦W,]4o¶a_Wgâ^&Ïì­ÿ³_Þ_UÞw?鱚ÚÓ¸¢Më1qO÷@Å{ïmÔ(*"‚ŠŠ ·2Ùó÷²áÂes ²Üi«5ÖÖ4ñ$çXÓ¾?ßïsŸ;P¨é ×ç‡çx¾¯÷ë­šNj¿ÆØšù½ õƒPêõ ŠJJ}•JU îëa?IAºèïçësÙÛûû¼½/ûøúù^  ‹ˆfÐOË”CèJÊ*ªªëDÕç[wþÔÿž¨½õï +- ~Qž<#ÔeÔ÷<´ßyçÖ þ¼Y﩯û} ‹Æ5@à:wáÐïÝo€!Äæhcï0‹²fè£+®ÌëƒwG¹¢£¦îæmn$âä‡ñ¼QŒ¨wÈ Tê÷îpŠåçfQ­3wD<=Ü]vsudªo Õ­¯úíZê7.ûø<#Ù72ìŸhiÃeÕúÍÛv:»<.x³m&‘¦f°ÀÐÒì!ßðð‘v^–ô ½’òRO³/ïÞºQ[]Y^ÊKIŠ‰ š¾pæ$Û·gÇÖMëV-[4ö Zg漨Yf¬©Ù>Cj¿o«ÝÕ…ý·CýþAĤ”ŒìÜ: ØÀmÁè.hE´ÜQ‘úÚë*¨¾ùJ%Ä+ÞçO?rÐÕyç¶Í„¦ú–Pý‘ÃLŒè¨þZê¿BöÛ²&È~÷^}¸ì›bž ²¿fÖ™‹›“}ÆY~Qi9kšo3Æ_òsu`´´V`¼¦°šV'–—“™F=~-";qô›Ë.õÚ•K"³©¶ÔÔcšñÀþ}¨ª)5†}/kƒÃþÏ£þ‘ú R¼GP¿¸T Õ¯¬b_¥öÓS“¥‰L÷ÃCC‚ƒþö^ ºæGDÅÄIejè—–«®“ÑñÇ­¾•ïø­hÞö[¥þEêÿGŸú¾þJ›úI ~Ÿ†úkW,žçè`7y’™©@ýîݺêP¿µÁQ_úÜé´õÛµ'|0kì~ 42f>ÉzÊÔ³É×mÚºc·‹Û¡£' ŽW¯…GÇ'&«¸uG÷.šVÇŸª£ÈûE§ß¬ã易•&K€êùû\„82‚lÙÕgÞhmafÊU¿O¯î\õ;v`Òø»?ÔvÆ_3:È~k¡­5²ßƒšÉ°‘cÇ›[ÚØ9ÌšÚ`ðRgFE­((†ìר#Óñ·›JŒgšž~òø‘­³â…<3U–IóìÒ9/4õ~g§í,´…sg¡ª­Xj¬«ñ4)6`¿£8Ñ ûoNýÔ Žê²r@ÿ:ûªàûåeÊ’b-ì“îƒûa¡!ׂƒø 䇅GFÅÄÆ'$ÉRÒ úè2UŒî–¶ê?Õ;•ïŠú/^M}•XõãA¢þ1·½NÛ6ú󧫩oôžúC·ÕñcЃKc¿„1ãÌ,¬lí§;Î]¸tåÚÐƽû ç.ù7&ÈR3åy…%8Œq~óø‰>Bž7Š]s|*ª>‰£@lŠ7šy#rø€ëž[7­[µüp°³±4?†©~ßÞ=¨~ë–¡ú dŸ˜À¡ÐÁiÉþÈþ k[t5Úš [¶ïÚ‹ª>yæö‘A––™“ÇeóLÌìõŠúEâþîÛ§Zóìö jjeq~n6ßg¡TÕgO;|`ß ´õ«—/^0g&Å6q/käƱ߅÷‘8Òèö›¦¾ñÐ/£þ…Ëþêç–(Ë*T€~5}Ä}U…€ý\yVFZŠ,)Q ð‡…††à ˆŒ&æ'J“SÓ3åú•ÕµõÚªßðRÄCy[Ð-êççd¦ +-Ô?ï%R‰Hýá„„^õ; ‘ú/‡>7FbG§Î=É%zL´²±w˜5gÁ’„'gׇ:{‘óC"åÚ¨¬¨bùáÞøô[vÍ$óƧðF¦úZRý¼®àÇå gN=´ï.X#ðÕŸjkez b<°%«~“²ÿ ÃB_&û˜h–“™ì£¬±Ðöìs?|ŒºšË~rzv.KWµ¸Ïþ­ ­yM­Þg„}T5ž$Z^NVzr"º:äªÅæéáæ²{•õ²El¢MF[…àõêÉébÿ·쿧þëP_–š!ÏÍ/*Q2Õ¯®aq_UQ®,-.,ÈË•3ÝgÜ‹‰ŽŠŒŒ`_ddGÌ—¥¤ed‰ÐÇ&äÐ×Sý®ÂwAýçõ!jêß¹Y§¦¾4>: XÐPå’ù³§ÛõG‹Ôÿ'£~£¾>ô[8Ú¨¡ßžC¿k·Ïz‚ƒ>jìø‰€Ç´™äŒ«×oÞ¶ôðð„4^ö»Áð‘…ƒ5^¯Åd2ðˆñãµ´QŒõ9ƒ¾,ã´ñ/”-S}X#ÇǵßK˜r‡Ý÷íÙ±uãÚ•\õ'O2§Q}Ñ5ªßªE¨~²•Ö}ݧÿ@ã!ÃGAö­Ù¶;a¢=qšç#‘ªņç|ÿo¼«uZ#U­IMý¡«QWSlXhª²’ÂÌâf]µªL¤~°†ú›×qêÛL2dÔÿwÕ¹£>#‚S¿ç†ú:}ÜäèöY^}û"tŒo>Éz +-Ø1oѲUë Œ»]Ü罯À£âei™9œ\¡úÿæñ}|4˱â?zHÒx÷í8ÐC!ÏH•Jb"˜3ž>qäà~g§í›×¯^¾hžãt{[«‰˜1ìק'õú;kT¿MËQ}}Ùo¥-ûøL£ìh¥3Î|õ5FÚʵ?GrîØh—|‚Ã\rkkšh7o ¹ñçüý³&ËZ¡ eÍsã­®šÚº@‘MÁa£S]{?rÀÉmÙ°fÅô5EgaÆ ÙÑLÂkÏeŸw¶Ÿ!`ÿͨ—€'IÔ'ZWôëØGÜö+Ê”%L÷s²3Áý”diR"È/‰gŸD’ä'§¤¥gBôõ¡ÿ›„ôºÙ„ÿêK¢Ã‰ú§vwÙµ¨¿`ö {Kó&©ÿ›–~Mô髾}‘L úä‹&Ã@3 k[ûéŽs.%t|± Æxä¸×9ÆaM* +-Š•U5€Ç]‚ÇC½Øz<{èsÕgÎxÑV–—åçd¥%'BÁŽ‹gOyz¸»ì&c\±dÁœ™Ó¦`Ë3bèàA˜«>éâGÚªß2 ÿ2Ùo£+ûÝ ûý˜ì0ÑÊÙQac¥99»":êk&ûI)ÙŠ^×ê¦Üü=7>ÑôÚZÜh¼®yr¹Yé)Iñèë DwÌ+mç6*ìÅÈÎÁÎm:á è×»'°ÿçOÔÍâ38ì¿õøˆÑ›,-WU’ê×Õ×߸Q__î“îW0Ý/ÌWäʳ³2Ò ü2©4Iø¤„üTÆüEƒR„>á×PÉ+TÿÅÛ…¾>õüSƒRMýʲâ‚ܬ4N}Ÿ ê/Õ¢¾1AÁ©ÿè·VCwEØ€-~JÜ`d2tÄhÓ ‡Ã,øâÿدï¨*ï; à'¶ÑžÔ¨uÆ4­QDQ”@DÙ 2Ä-ˆâÞ"θ•ˆ{ ŠŠF8PöÞCÆeÃe‰šhgØôØœöùþ~ï½÷.ÞОBÞ?îðÏó¾ŸçùºÍ[¸t%äض ƒñøiÌ +-FGT-Æœ¼Ââ²ò*nG½ °Yô塾'ô<^˧~ueyi¦>[ŒœŽ¿“Gù`„žsç°©oaf¬/LýÁMOýNíBý†ìËÇ~7v©Q|ìP‰ôô q§±±ðÐØ8ÓöúbÙQaÓ•Æ¢+)ã}Íf\3tƒà%‡#íE­ÐוR]fZrB öõ+t¦òÝ»ã›ëV/_LáMw¢Êæé±ÎØïÛ§WÏ•ýfÔïpEêÛ8L‘«¿«žú ÉXb9’üB¿¬L*•üÜ}šû÷2ÒSá~B\l ÁÆžpˆÇÌÇÐçÿD@ŸM:|Ý/_ñwDôy·ÁÔo >B…úõ3IýÐÛAW.ž©?×eÆ{¦¾¶ þV}åè h`+öêÓ—£?xÈ0ÆÆ8c³ ÖpcúlWÌÅ5Þ›¶îÇNùŸ¿tåú­;aQ±$cq)€MÐñþƒ#åJtܯª#É|ãÚeÚ‹ Ž ^«–.œçæ<ÝÉÞÖÊÜÄ­Åáj,ßö<õEêwª7ö»vëÞCûA MŒ}}c3Œ}GZ„ž‹‘*wÚI¿€@„Ç›Ÿi¥Rd‡Âþ‰vƒ/úŸ-E‡R\ØŒý*œiEù¹Yhìø˜„‡;*ûà¾ÝÛ· =jî.èl{+sS#^Ú,¿hm +-PÁ~aGaÿÃÔwi¬~X$>ʴ̬œ¼üBB_*-Çø¹ûùy’œì¬ÌŒ´Ô”ä¤ ~È%<ÑÑ1± ?‘ÌgC_’_¨@ŸÞ|ÝÍMý6VÿoL‡'ÕäêoÛ´nÕÒ\}K¨¯«Í¶ LýÂì@ê7~Ž>Cƒ¶â(RÃÈt‚•­½Ó´YÄÆòÕë°÷ì;x”ÜÀûÌnÉ´ÌlI~Q‰´‚£ÿ´V¾þÞÂÔo Ç»wì„{õâ¹h/)‰qQawoa.ø8rÀÙz¯ÁZtw™9ÕÑή?VGKSc¦þ6õ™]ÛãÔoÍØÿRE•ýq†&æV6öN(mºÔ¼6lA|ÔÙlì‡DÄÄ'SzŠ;­ö¹<¼æÇ~£ðxcSxìN“W6¥r;}î âç¹yýÚ•¬´‘ߤ‰–hm=]8B]M•³ßõ6»Öv$ö?Tý­JÔÏÍ£©OèWÐø1øá~A~^.s?=-59)11!>>öÓÏÈO!óïeçHò +- +-‹KEèãy!G_é0hkõ_ êW•—âõâê]%õíÛ-SæËñÆúºÚ£;¶ú Ñg`t‘£ÏÈ ¥8PeˆšúˆQ_éèêšš[ÚLš;·¢µW,YàáêƦ>mEB#m~—M}¿“G~»{ûæõki)Ι5mò¤‰ÈÖ`ì×_¡®¦:H˜úÜ‹OÚåÔozìÊÇþgŸ‹Æ¾ž‘é+[dèìF×Úºß BÖÛ—¿¿J RmÓ­F>(´vkN5öMÖ½EkËn5|—e%…ù¹YHŽµàÔÛ!»Ö¼V-[ä9:ÙÛZ¡¹õ)Ä‘ÃQÝBŠ¬»…‹M9ûÿë Úè©—n“ê‰Ô÷ª¯>cLýÒ2 _UUÍÈOƒ¿¬´Xp?'›ËŸ‘.<™œ| ÌGi`èWTU×(A¿Í§~sêÿˆQ(Vÿ†Xýe ¡þT[¦¾Îè‘Wý>ªoaÑY†>F"¡ÏWâà¡Ã†­ýõXc3Ãiú¬9s=/_ 1v졡舗+84"&>)5#+7¿¨DZQEè SñðV4‹~=4~þY<Ÿ<þá™QLS?-9!&¹^»|áìéã|(’óÜœ1õm­ÌM õÐèä… +-…ûY{ŸúÊÇ>£rdu7}Jq¼ÅDŒ} +-‘šçÚ·ŽP†W®Óµ—(‹PÖÛÏ_Їý¶®®¥ùEø$ë%Èzû'êmÌ1azJb\TxÈí dxî̉#xs¯\F÷ÚÌ©“'ÙXšƒ}]t÷p5~±u`ö[V”6êÜÌÒÆž«¿’©€Ô¿¬P?G‚TIíʪêûÂøiðÓÞ—ÁÏäϺ' ¡ÏÞ ¥“à×DÿÃÕ?ìÛ‚ú=•«ß>_#¹úÍ¢‰8€°ÀK¥¥£«ghjni3iòÔ™.ÄÅʵë±}ö>~úì…KWƒnÝÅ»•@ïV^Aqiye5ÀÀN¬}ñR„~+‡¢BŒ×¯^>§L±å`$ÅGG`& ÿSÇÐæ;¶lð".\gOw²·±2717†¦¾¦þ_1õ™2* ÅïÛÝÔo4öAƒ°ùÑFIâfS×ÐÔÒA{›YXÛ9"G÷ù¸Ø¼7mEŒ¬»¿#!"… e÷ZÃ[{®ÑWI!¾BU7±zç&º›Åè»wçV*ï% <\gãd³³¶ol€ µ45PßHRÌþ?éPì· þê{rõ}©ŸGêÿ›ýú ªúL£¾kŸÝÄÞã¢tTƒX"‚Ò‹ˆ +-Ø{ï]‰½wTTD:¢(b)Âå‚‚(MQwtb6ÛÎó¾ÿÛàâ³3ߎ™‰ŸÎÿþžsDy ýÂÂ"¼B¢Ÿ~rŸàgò?I‡ýü¥“øù|%}’«‰eTŸåçådg<~pïöÍäëÄEȹÓþ¾T¡ÅÊ¥ ç̘2aüg{kËá&C¡"êiköRûI¨úBÒU±êW-ûÍde¿µ´ì÷@”¬ì66³i‹²ï1 Aâzc²íÞØ9‡FÆ`±¥`±=Lç1¢ì—òÁ&ü¶?'Å?Sdƒßn#-¶4v¼£Âc€ŸÏáý¸Þ^k$m6œo';$ÉØï×Qbµá€óÙÖ¶ »àûÍûµ«ßSC[¢¾ãèq¦0õ½¶@}9õïÜg},W¹~QÑ zL~VøÅy~&&ìç/33++äË™ÿèÃü +-%è7hÕÿÕwfê‚úºDƒ ~™úÍd,ü¿oW#ú¬JÑÇ¥N‘QaJ ÑÉ•¬˜‰Š¸r­×æí„…_ÀtĨظ„$®+‰ÏÐJ€>qñ÷ëß?~ü pQú +-‘ˆs‘)iq#ñÚ•˜ªú„Å®m›Ö¯^Î+¢›‹ƒíH 3¢B¿·®–zÏÊ«~S<ê5”ýoønã¼—†¶;à&æ–ÖvNt¿gÌY°Iâ|³ÍvöBXTìÕ„$\o""G”ÿ “­„oùÅÆÝgÄ(eÇ»¼T˜l9YüzSØlΞò÷õ>´Ib´-Y@÷ÛÝV›¥9¸¡~]m^Œý®œýÖ2ö›7ökQ¿®¹¢úžLý5‚úg/HÕø8êç‰9Ý/ŠÙcòK +-?¿(—Ó/}OI|"_Îü’šÑoÀªÿùZQ»úÑa‚üª©?Â̘©¯¥ŽBØØÔ¯Š~3}Ö~ûŽøž¨ª©kjë¡j:Ür” +-¢ûÄ©3ç.X²b â®}‡¼}ýOÊÈK¨ˆ|EfH± ŽXù®šJ¹ø—¬$Ê´x÷¶òu…ÐÅ“G¿Þ½•š”+N?z`Ï4D¢búdÏq®Øpbˆ«úXq¬êwh/´CYÕo¢bUÿOÕØWVöÕh·é26Ålspq£,iµ­ß¸•¢ÄýÆh‹‘‘ž‰óÍ7[y…Bõ¸ÞU7?ß<Éäë×.³ûMQbµm݈¾xþìé4Ûè‚ûF`'\Â~gÄÙ®”ý‚ý:Õ×Ó7àê;põ-gêbê‡UQ?¿€£ÿRx$?‡ŸägôËžH”ÇÉ—7¿ô´êË©ÿá Ôïß8Õ¯Ž~sú­9úœ ´CÝ>äÄPó£l]ÜÆO˜BýpùjH±s//ˆÁ¡‘1W®]O&ôaDŠÄ2+$ñ7eû¯,ªTD²"?/7;#ý!5DPqñü™V!Ūe‹æÎœ:ÑUßÆÊÂÔ˜êaoMu‰ŽR%ª¾ª!Ÿ©|Ùÿ–—ý®ß£ì÷¤8û 02 iÒ ÷œ<}ö|ºà˜mŽ##B#/ÅÅ'¥Üºûë£'™%+ûå(ûïÞ ?ðz&‰(ß ÷[%V?àWc£Ã‘eà‰cGpÁ·ü²aΛM'|Œ³ƒ †Û0ºáˆSK£'qÎ~[%ì7Qaöë£þXÏ)3æ2õwì=äãÈç›TýQ^¾ ÷ËW“Â_HðC~ÐûÙÃßÄùùŒ|n¾¤è+A¿ÚWÑ êªEý¨°à¯ê+wáÒUë~¡N»í\Hx4HNfŒ(,~UR&wÀ…²ÿG]Qʯ6ž¥0Ûòrè‚ß¿“–’ÝrîL€ŸÏaJÓkíÊ¥‹æÍš6Écœ«³½µ•…™ñà˜n`_±ÿ~ª2ö[IØoªÒì×­~_ƒƒ‡™[bÀá’3õ7l†úÞ~AUÕ#QoÉS”ôÃ~Ùø$>›ø7Ì|*ú5 ß`U¿šúüÓ¢jXVR\ôŒÔüà®L}ßú¨ßBµÕ—C¿‰ôÛrô»±j¨¥Ó[¿?¡of1ÒÆÞÙuœç¤i³æ-Z&¶ìØsà°_À™ó!áQ±q I)iø®Ò3²s +-Þß°CQ +-¥T(—‚÷C…('+ãñƒ{·S“QɉÓþ¾Gî݉v¸réÂ93¦L?JX7ŠXûêéhöRë#ºtâU_*„ªVýZË~»éŽwÿ[Ou-*û We߃òÄß°iÛ®ýˆ30(84Ã-ñK33[r¬×WÜm”¦X’æÍ솇]8‹8i¹mÛDì/¤é†+îdgm5ÜìèG‰ +-ìwûíûUÔoÙJP¿£œú†¤¾5Ô÷€ú —­&õzû3õ“oÞ–¨_õ9ú¥¥¥eeeø³”ä)“ŸìýŸÆþÌGѯ¬Ä×Pý­úRõéãú‡Dý÷µ¨ô«úÂSD¿©ýV2ô!Äw }u-½¾ý8ØØÔÕÐÉ•˜‰n¸r­×æí»¡•Ct‰Kqñ‰(¼Š8úäD¥úŸ …¬r'Š‹žäåfgR;×®ÄD\<ÏÊ!)±~õrÖ ÝÝ\mG²jHUŸša÷(W!!õA%«~µ²ß\’*…ÊË>Ö›¦6Ej4ÄDØ9áŒOž1gÁJWüèñ“§Î²<’Ør{’õT$–ÜðJa¸ýVßáÆ+»á~Úøm+G¿«þ¿%U_N}|W¯ÕÔ?ðU}öêBŸja}M OÅÐØt81z¬ûÄ©3ç.X²b UÃ}‡¼}ýDh$ë†ôUq%„rX( ÿLý·o^—³ª_ q%n¥$ÅDZnxêä±#öìØìµ–Œ˜>Ùsœ«ˆ07bDU_[£ï…: ×Öý–r:¨ UʾÀ‹UZö{Ð%ï­o`8ˆ¹ƒ‹‹ãmýÆ­;)Ql·‹áÑ—Y9$&²s0ÝgI™\žŸ¿Ü$Gœåɦ±ŸÏ¯8¥ív9g<(ðı#o[7âŽ/ž?›ÖòQ#̉}\r„JìÏ‹UÈUÕÙW¦þ·tË;w…újp¤¾±Ôwvó˜õ—®Z¿ êEžÁ¡‘¸âÉ©rê½( âô8ýL~N¿Â{Åwûß_¿~ƒï@ZôkC¿¡ª~uõY7|&ÎÍÆ‚¼›–’x56*4ø ©¿{ÛWõ?}ø ¦ŽZاßÃACM†[Ž²síæ>a +-Ã嫉ˆ½©_Œˆ!#x5Ì|š+ _V!é†2%þY·¿Ëªþ[¶Ü^½(|–Ÿ—“…<ïݾ™|F„‡œ;íïë}ˆˆX·jÙ¹3§¢º8ØXY˜ýÞ:Z¬V¯úÍT¸ê++û-¥e¿C'á–khë"U£!ÃÌGP¨˜oÓgÏ_L‡œÖÛ±(‡¸ãñ‰)iwî?L—%ŠíöVºÝêsÅ¥ÛMzÆ)Ñì oi)I q±Qá!´ÞþK~GÕ¼®qwÏÂ=ëZ8ç CB$§N¢H©4)vÓnØMR”’™±A* ©””Js*J»vJ” Kѽ\Ëi@ážã,wuÖ}ž÷ýí±rs×⮵{ÿŒÿ¾¿ýù~Rä!!ÓÍþë¡É9ö¶,sSc]mMLUÀþdÊ>ÉuX°/ÌUPæýÕ_ª£o¼Ôw†@7õ#cO$¥fd¤>N}2Üq|’ô‹½.æ*À™;Ÿoþ×E_BýT}t‚¨ÿœªëƵÚjª~*Qˆ`Ô‡Yh´|Ù0Tÿ/"ê Ñ'6Œ!èÿ耣p–ò€«p™ø`βµç¸y ˆ~È‘£±ñ †p?ÖÔ]»D´´Á2|þâeg·˜ø] > Åè“öwº ˆZ·¼´(ÿ< ĸèñý{pz­vq´#³PW{‰:Y…³aêOa¦þØá1õGu`²Žýñ2(„,¡ 8_Ec]nhÓR…*ß´-`ïÁ#´É3s +-.\¬¨ª¡EŽNð#í¥=þÙÇ›x¤ÈþÓvZäõiEÙ…‚hòd 5 î·€í›7øx­†ÎÆÒÌÔH_/8`°?c:¶9²?žÖ9ÃþH)fÿêO™>Õÿy¡QßÂÆÞÙÝkýÆ­{ŽŒOLMÏÎ+*«àbš·ïÞS¿‡˜ÿ†<¾ý=Ô~ñ×CÄç“/fþèÉ©ÿ§àÃ’PÿU¿ùV#Q¿8?;#5‘ª°Õç€ú¦D}µa¦þàèÿœŒýÉôU}2 +-MÍX6öN®k}6lÞ¾ }8—|&#+·€àÖ]x÷AËãvŠ>Ã^>úŸIÄz· ‡áÓöÖG÷›oݸ~•ì‚œÌ³)(ÎÂÀ€m}×­qãØÛX®21ÔÃ&WUž¯›púTÙI…6r•bôGˆ¦+:ö1Ú ?NÄdaìÏñ¿DKWßØÔÜʶ¡ÄŠ]~8"ú8¦ +-N”\ª¬®­o ¡B“ÃØïì~õ¦·oèEþ‡d¦ïßÂôU7mr*Þoµ¼ÊòÒâ|H¸èˆÃAÀþ6¼à ÌÙÖ«‘¾Ž°¯ +-7©ó©ÈþqöGI3ûbêP}5 èq£•Ööw/T?4"&>1%=+¯N·š:A‡ãéöò—.ïÄü^úDí—x¯_óÉ7ÿk¢/1õ™}[¡è'p°#ª/—Qõãc¨úþ>Bõ5A}bÆ´a¢~?ôG2èÓA(@>$°AeÁB @_ßÈÔÌÒ†íä‚:À( <w2)5=+§ ¸¬œËšpH´ÒOê—®!†Œ>éoþÔïƒ]ØÝ @ü£ãÉ㜅 õWª+/•æegœ!<„Ú·G¡§»³ƒ-ËÜq SÞœÙ3åH¨dúMýo¤X}!û"cÂ¥c®¸©­¢’²*&«g°b•…5ÛÆáÎ=˜+¹àÎÏÇXñ€»Õ|ïak?Uñûmˆ¡òï7˜e”ýNæ€k}H»c%–ù±¨<ávnÝèë Á:ÚY[@/Çd±Ï1Z`_–°ÿýÑRÍþ§ÔŸ†‰¢úš ¾©¹5›ãæéã¿egàÁЈè¸S)ga™•–WòH˜‚ŸèK2õ©åˆ9>!þTæ‘?ÿõ–/nþ èyõg¦Bñò|QaGÜl¬¿RUQVœ—žêG„$ê{ºsØÖæ"êÏ.ê€þ(ô²A„óU-}#“U–ÖlGwOo?@Ïþ Ü„'“RÎf‚ðAU_¹Ú€_”‡îW¯{Á‡áÇÁ÷aHS_€þ[@¿‡Y…m-ïݹÙx­ŽÇ-‡?.íô)hñ°`ÄÁýZW'¶µÅÊzÚ¸••æ*&ýˆ¡Ž#è‹©?ÀØÍŒ}¨ô Ä9ùÙs [¸â–ê,721cÙÂ8$É uì¶9žp—«®\½NÊö!¹à„±~F—ÿ[´ËE.¸Ž'4××ëjª._Ä6'Á‹ +-Ç:ß±…qÎvV-e_ Ï8†}¸ã†ûª?Ž¯þLÅù*jêT}+¶“›§÷Pÿ@Hxt\Âé´ÌœB¸Üxµ×ÉoTL}Á€§OTÑ××' Ÿ1ÿ7ù_ý?_ÕGFýwŒúÿ|Öêß¹Ù@Ô/ÊËJO9‡êîÜËÐM ¾ºš +-_}b£þ(éT@ôG ÑÿŽ /KÐ`ª/ÑÒYnˆƒÐÎÑÙÝs/.ÂýAĆĘ„yE%—.úp<Þ¹÷°¥íIÕAb~*ú˜$?J¾OÛ[ÑMXSUqñBANVz*NÂ#!ÐâÛ6ù {K3„K/Z‘Ι%/˜ú㘩?z8Lý~cŸ¶:äKãDÓ«ÛP}‰¶®ñJs+;G¼âü·ìØ}—|&#;¯¨ôReum}ãÍ;÷´<~ÒÁ´¹à„ûÜ\ÅÚœ²ßŽ7©ó.$[˜ G\ò©øØ£-°…îÆq°µ2ÇF_¶t1ÜqÊJÀ¾¼þ Ÿýo¥›ýÔƒêC¢ÐãDý§ž¡‰™•“ëo¿Í;àt;ußüwÌÕŸ>úü7B¾pçÿ.bþ—G¿ßÔ¨OÎG˜‡í­°"š®ÖpËK‹r³Î‚úÑá!D}oO7'¶•¤ú“ð^7vŒ«ÿYè+új ú+-¬ìœÝÖ¬óEöôcãON +-K`ÖÔ]Ø@Ðïô{ùèÿo›°¯ ¦>LB´ávSC}mu奒¢<¤!áxtÄá „›7øx­vq´ƒ@õuqþü“Ò\\ƒSdI¦ÌÔÿ+?Uéžú’c¤È؇SȾü,Œw¡ÆÒezPé–6lp=  8ŸW\NAqY¢…#îžðˆ“¨óOËÌ2ñ:ÿ¶¤Ì‡}N£åq+ÊH¡C¶qpÆû»¶C¸pÇqìmY.aÆ«¨€¥>¬ØD}ìqT®oT}–£«Ç:¿MÛwï;zìdÒ™ŒóùÅx¸Õ741Óìý•ÂÔïíEÖß1¦“÷n ÷žŠ䋘/6ô¿ +-ú¢ê+¯{ºˆ¨þí¦ë¨~IanæÙÓÀDxÈ= „÷W'@ÂÄPO[S}Q_Ž¨/#Ýê†þ·Bô) +-rˆ¾’2ŒÁÅÀ‚Á +-Xƒ¶7µëý·lßµ÷`€{0+·ðÂÅ +-.Ðoº}÷Á£Çp;>4áôÿÌ’£ Há"¤4´A–Í8yÜò²âüóçÒNã >¸sëF_pÁ‰mm¹j…¡Þ2M…ªÊóQº¿—/2õÅAøçñ¥Þ`cìxDbâd܆pÊ‘±¯¥£odjƲu€Cæ!¤‹•~üdRj:„‹gd{²\q½À¾d´Ÿîsa´¿B´„ýN~¶xÆÑF//-ÎÏÉLOM:y<:Ó…C;ÝÕÉÞ†eìëjkÂ)‡­NØÇZ.ìJý©ròp¼)«.Z¬¥k°b¤éâ±ÖwÓ¶]û‚Â"cO$¦Â:ƒ¯ª!QŠl³nª>Aÿ=Ÿuxï%ýó¯DüÌÿè Õ§C‚?õaF¼Aõáv|Ú†óðÆõ:¬ÃÂœÌ4‡QG‚Q}¿uk\íXf¨þú²R¯þE_†¢?MN~EAßØÔœekÏqõXë³Y8— .à,çòjaCÜn¾ÿH°ákê%2ˆ Â!N}ò7"$ÙÝù£Ä=Ø Y^½Ruùâ…ÂÜ,táXTx(®ÁM~Þžîζ ‚‘¾Ž  òÓ¼9³±Ç'Ó%8V|ê#åSD?öùçû¨Äô³‰…šÚØêÖvŽ.«ÿC~xõ˜ïq?çθÆe.ÓÜq}—QZ”${TÚ÷}ßC•¢´hQ)E”PT*EJB ƾ/áÎuçÎÕ`†sϹïÏ÷yžßïùÕψ9Ì9?Ï¿ðþ>¯ÏûMG=2:.‹wsiYeMÝÞ&¤Ëí8jˆ\¸’‹Nپƌ…Û~ýê%œô¯)] ¹ºšªòm[Š +-òØ’‹‹ûÁþ˜rŽ¶Vó(`°¯ÍæÙö•º²ÿž‚²ÏG*¨ßŠÕ×ÔÁŸ‰éfïìá±dY|rz†ÛÖí%vÛ1ì6Éÿ–SUŸ™ÿHBû#Ùï'áãÅçÉçÍûèÿOŒÅOè9u°×té<ÞRËÍMõ»ªËK‹7æ¯ÉXµ2. +-Løyº8Xóêã ¡8ÈS_ÑJá« TÕÇýI†@ßdž•­£«‡O@Èüˆ%1@?-“Êà–mUµ`áàá£Çé1]¸Ì¹Àêà=<¥×á‰p¾…:®à€Ÿjcm,T–•o\—›E*D-^Š.èâ`ca6‡UAªúè0ªú@@¤²U_q(ÿ‰ƒbæRf!S٧î2–"60š>PØ9¹yùQÀlÊå!_õFXÑÂÇËßt¤{_”î«œt™!dzxÏžjk=vôŽúnä‹)WGWìcËÑYwq 17›c_Sû}z+8û2‘ŠÕï+Ž8±Ý4µõ >n¸“»O@hxdÌŠ¤´ÌÜõ…[¶a·5à€·´²$¯!ÉÝÔÿ©/æ]üý,ýË’/cþ[EŸ{OÜs¢×DVüû›ÛxKè‡m­b_}mUyIñ†¼ìŒ”„X”à _Otù³¦êC} f8HÑÕïú¨ 9ôǨBAé38ô]<¼ýƒaª`2Ð'JË«jêö}4ˆSg/PdÃñ¿bžt}–ã/2,ýÛ7o\½ÌÊ`Ë‘Cû÷î©e]pýÚìŒU‰Ëc–„‡ùy¹9ÙY„éFzTõUFâ@`UŸo ުߥì÷rFÌJTöÙ„¬®¡¥«o8kÎÂÚÞR`ÌEÅÆ'qg}ëvXQ¿ï®ú‰“g$‘ò½Ï–èf¼Òr&u._6å®\¤«ÞŠ€4Ò–++Ù\H §&ÅÇF-f»;;ØXšQÆ“õuqÙǪŒÁ_;lˆ„}³B³/Tªþ‡4Þú íFêkhO40šaljiëäæí²pqôòÄÔÕ9´Û*ªwÕãWýòxûS¹ûÍý©¤>¡ßÙx1õð¥äË3ÿ ¢ß©ê?—Tý‡?¢!2+nµ_ÔhÜS[Y¶uSÁÚìôäøØ¥a¾Îö`‚Ô×™@ÕpÄp^ý¾õßW0õ_Ž¾Ð B_“C=ÐÒÖÁÅÝÛ?(,<è'¥®^“WP¸¹´¬²†L@lÅS:I²ïvà)qè‹UøUž +-ËàãŸÙõ~pïû»l´…ËÏ9yâØÑè‚0aûÖMòsV K-AtÆ 75FÔ×ÕÒPWe H*±H‰ö,xÐïTöß•}ÆÄßY;9ZYmR6˜2mÖ\3KÌ9OßÀPÊxeJzVî:D\^Yƒ1×üÅ—|Â8ë iÀ¯sÕYÀÔÏø³Î'Œ1×¼¿qÏ®êÛÙš£Ã¾"–æ\ .»³=í¹YŒ}-Æþ(bŽ» û=•ýÎêЋÔïGêãˆ#M•±ZsúlS GW/¿`\pD™±&oCqIYf¿¹ ¹ûÝ!V¿ óRëŸHÄ—’ÏÌ—Wôß4ú¿Š+"aÑÁ[‚Ȩ@?¬«Ù±êaVZRü²%á¡>îÎvVfsfN¬§£É©?DP¿bªß ý÷Äè³Ç# ôUÆ‚]ýÉF@ßÌÒÆÁÙÝË/(lábê©Ùk×âíع«¾q?C/ M+4ïsU(à‘°×ñR8ôŸU6Û·wþy £í5Ap°©¡®¦²Œ‰•ž’ |=]m-áÁ´)“&jSœ£G~Îòì úŠª¾€þ; ¾œ²/”CÚtýÙu1 +-9Ÿ £G1›˜[Ù9¹y±=·lEâ*X9· qeŒ5wúÜ…Ë|Gdw]sÄ@÷–Œ9þ® kîÜiŽý&̹ê +-ºì,äÄËpÚ)e7'{k S}qj˜tö?’V`öeÕggœSÿ¤‰¿ê×ÒõMÌ­\<}ƒæG,MHNÏ^[P„Ù†û½¿ùH yñòµBAûþÞƒL}ý®Ò ØKÅïL~ç¢ÿÐïTõ™ú·o^¿ +-+¾þªåHsSÃîÛ6®ËÍLM\¹0$ÀÛ͉œ õµ5Ñ G1%úÿíEêÿÑyÿþï7Ðg PŒþ}-B:J …½³›—_`(Ðgdç®ÛX\²}=ê’d5ÒCzežËpÿ^Ç]¾B„³§)ÉCèµUÛ¶a¶Q ŒY1?-ÐÉÎjžÉlh §3a<ë€Ã‡†ȳ_ße«þ;‚~ö™`ŸVÒÇŸP٧󮬪®) §Îœƒ‚èàâá²€n{rZfNþ†MÀb'öÜA®#ž£ËÎwD.cñaQÄò;e,̹vü­,dì9:í,et`åòZt8îNv˜tsfN›b G›NÂþ§ïûrÔïM.¥9x(~[eµñtõ 1ÜæYÙ;{ø†…ã€'¥eæ®/¤û½»aßAnµIÏ7ý¬÷ÙßÊÔ—ÿ™ïéS‘øù/0ÿÍ¡/¯ê?dý°¸Õ~íÊÅs§ÛZQ÷Õïª./-Þ˜Ÿ³zÕÊåÑ‹û{¹9ÚZ˜Ï02˜¨­ÁÔ6„”PRTõ_†~ß  +- Q0bÔhµq<úÀÀÚÞÉÍÓ70tÁ¢¥@?%=+wqPQ]»gožÑq¾^oÇ;’‚ÀÐBèwWÙø·Ù®]¾H5ØW¿{çjù9™©Iñ±Q¤»‹ƒ Âœ9Õ* ºªò?F2 +-0Ý”úAä)[õ‚€—~âÀ…¸{ñ^(ûŸ³¨5µõ ¦à¼Ï³´utEC Œ^¾’r^_¸¹´¼ +-±©™Óâü¥+×Ûoñ§ýþƒº2Ÿ±„ýÇBE£ÓγìŸjûŠÅŒEWU^ŠãŽœÓ’Á>®;‚öpu´³271fìëLûÊ2ì÷“ÇþŸ‡}õ{Ȫ?Ë êÓÄpÃ7³´sr÷Yˆ$W­ÎÉßXŒ k÷4àÎ7—#w¾;8õ +-êË‚ÿTü={&&ÿEæ¿ ô;Wýg¢ªO‘k¬!ž:q±²¬dÓ†¼ìŒ”„¸¨E¨‡ž®€ípʤ‰ZcUFÔçªáŠ¦þ Ðïù›èƒ‚ih€æÖvN°pÑÒ†u@T‡ªÚº†&”Àc@ÿì…KWùgô=#9èÿÚÈ<úüdã88ædÛqœo”À$Y¼q].:`B\tdxh * #vÛÜY `¢¶æ85JsøÐA|Õÿ+_õÿü®Uý.e¿wä{÷áË>Øg³Nu,ÄÉF3f›˜[Û;»{ûÏ ó¾jõš¼‚"êˆ4éia9KJ¢8æWtüm—ÆŒ’ÆŽ;å|ª­“Ž®{Meyé梂¼5`Iƒý`G[¬ºNìÚ‰ý^ +-ʾ<õ‘&§þœð1ªêtÁf›ZØ:ºyù/X—’‘W€šV‰ó½¿™åˆ’víÆMü®”#+i?2õyô»€ÿLú=—!_Žùoý礅LÕÿÏonßdX`1iÞ¿·qKÑúµYéÉñË–F„úz¸Ø[›3õuµÆ“úŸ ,Qÿ/Òf(¼—?:ïßùuýOyô•ÕÔ5´túƦæVvŽ®>!ó#–ýä´Ìœ|X@ƒñÀ¡ÿ“_î_=çy?ggÆšHcm"R4cÇ=ºßTB*Ý¥¤{©T]PS!º'¢FÑU)S.)ã~Ö.S +-93»®»“3ócÖìîóõþ\¾Ÿo7åæTïáùz?žçåk¼¶3ès4xÎh@8à ÿfü*‰‘I Ñ€rlcH0¨C}Ÿ(9D'ÆÅ’úyº»8ÙS–&ºÁœÙnÓU”‘&§ú<ôÿ(aÀøÿýzò²ÿ¡Dö‘÷xFŠ)ÓT™ .\¬­‡†_ie븖²‹ˆÚÁ¢¦QWZQ]s¶ž“ÄÛw€ ^%“ˆ”{ŸØ%t<ö4m:Ôû .險 +-ô{~îÌÔä¤xVð~^0ëì¬}C=mJÃŽu<-;”üǾ´Å¥ÔKË Yõç.X¬­oŒG’˜mÔß’V«oÊñÊõ· ûm÷Y{³;¹ êKÿk¼‰/ _>ïwýÿv“QõqD¤÷Zn0ij5U`E~nvú¾¤øØmðCoWg{Kè¡ž–æü9ŸÏRcœ`˜=©ÿFèéýù<ô—¯²±[ÿm‰ŒÞ @só ‹Ê*‚ó0@@¿±ùNk;¯€OÿõïNÜ;!p@TÞ úŒ·¿E{c³ÁQßGÌJÛ·;~GTDh¿7ü³mŲ¥Fzhð¹À€*œ(ðÉø±Š +-Õ 0ø¿?_wÙ籯0Fq‘BI‚¨®Ù§¸M-,©âÝ<}CÂ#Ù¬Ë8€¬‹IÏ5\¼Â¢¾ÛÊ:1i°B²éz ºë¦“&QÇ°ßFQß¼U×€‚¯BÖy¹2R€}„ ìûzòØ·0#ì/^È°¯FØWfاÃdÔÇpSeQjjéQ’Îë=|B·ÅÄ%%§eÊ+(.?I£íò5’}ú±,F’ýNú¥ ú=ð^Fü÷Èüÿõ|D/^p‹‘»¡0E$q¸~ùÂybyqAÞÁ¬ÔäÄ]1‘aÁþ^\œì¬W.[j=œ÷Qª2qbœ"¨ÏQ⣡CýþC_y*}¢€¶ž¡‰ùrK;Øß/?â@ôÎø¤äÔL€  ¨´¢ªæ ÍEQEèË p ,b$DŒß×q¿• HP®öT%ü/ïPvúþ= »Hÿ|6º­[C05Ö×Y²Yj¨Ï ÐpciÊ«þ°‚~7ì3Ù)øÈ?åj^¢¦–.å½jµƒ³ëêø­Ûcã(mì:H"ÃÅ¥«ýû­¦Á‘µ°êúõë°ßÉYʺ ¦††gaŸÆ®CÅ#í vÀ~Xp€¯§»«³£­õJûóhÛ ìw¡>Ò¤ÿËe©¤Œ(i·-Z¢kˆÙfmçä²ÁË?(,"zgÂÞ”Ìn´Õž«gí-‹QýŸ)Húæ÷|‘øïƒù½@Ÿ?!a/â‚Ú[™"^½ÔX!ÎÉHÙ“°‚¸ÉÏÓ}Ýø¡¹‰‘â/ŸÍ(&sÔWzÔïú‹Ð?áSýiªê³>#è/&è›-·´ôA’¿ˆ¨€~ +-ì/¯àxé‰*púè{»åwAÙ½5ôŹÅö+ï–&L6äX”—ûêpN&a vû–Í›ü¼Ü]œV¯Znnb¨K³0]eŠÒ¤?±á¦0šA_Nõý×À“ÏÇ>’]q,—9‹¬XˆÄ¶hyoÿà°ˆ(ZviY9\`Ø}Ã["U<,ñÑÂ…6‘¢ß³Nhx.ìgO„ŠGÚÜ°öOh¿ÇÊû&r¤ö>r0+ A’ûù{{ Iô÷²¥FÌü0ÛÔU‘%…É«þˆá©úÝdŸóCŠ]¨?aâ$%Æ +-Ù´ît Œ¹½“ %¾-fWžýhùüÂâ²ÊSµç¸’ol/dq.È û’´û¨xñÓŠÃŽ~-°ÿ ½•¾íßöÏÖžb-ÀÙ¶öCƒ0î¨ç û¦ÆºZ”¹ˆýICûrÔÿˆ¯p48E‰Ý6m7Û´õÍØj[ïá@9Æ%&§¢½ Šø¯ +-²ß!ªZ'ïj$k/eÔïÃñßó{„þ+¹ûáÇ"¯ú×.]¨;}ª²¬¨ ï`Vjrb\Ldxp€·‡«³½¥…©‘óC uUÒC¢þ…Q2ê0¨?`èÏž3O€>ÄÏÁð Ûº=Ї2:rôXIùI\O=s?:ŸVúd 8ázx ô©ú¯Õç1Àw·,ÆæÆ›(ï‹õ˜l,GR?0 :2<õí¶n%i¬¯³d‹rÆtúÿ¹ïχ)tøpS}1}‚’ Rîdˆ“§¨°ª,´t áˆD ¬;¿M¡,òäÔÌœÃ_£š?Swá’/=yÊ,ñ­–ÌÕèÛr²ö€ζj¾¶º²¼ãŽz‘ÇlÛäÌiÞ¡éö5 û2ì2¤±ßõDzG’ꬿµô iµ¡¾‘cP(6ÖÞcULöi³ 1þ(/û<õå™ÿ[ÈgÌï ú/¥[±»êWW”âtr2Rö$쌊 òórwYcg½rÙRCÝ%‹ÈÕ¦«(+ábÆñÔIÔ—ªþ =“B&}-]Ò¾•V ú}‚ˆ$~é0ÜN9”áìy‚>Ð|—›Š"~bÇÃNçMЗP€QÄØÒÄÐPwúë“ 9™){ãh³mòóÚàêì€ÑfnbˆÿÏV¢dªÏ²=Šûû#FtþàÍs ¯WÙ=†cÅŸ)wuÏ¿ ®×72-ì×®÷ð`óîËÝûÒùÑã¥Õ5\äàE˽6žTóü¶ãï?ö_ŠØÿ‘lÇ>ÆzžÃ~MueYqa>2Ǽûr'°¿ûUïd¿z•€ýRìOÚØ—†)R_àJÊ*ÓÕfQXm¨o+[Çun}7oÙŸ”ŒóDÙ¿‚ònllí1gk2Ù¨/…~_ć̗B¿—ãyö„9"»Aõ‰…PÄ´}Iñ‹@ßnkm­V˜›è`!䇌Šcp.¼J©ÿ{§ýÖïí¡ïoµÚÁÉÅm£? ¿-Ð'ÀûŠË+«}Nü›ï´J”¡ó¹À€ªŸ£¬»´Ýka1^¾pþLMUEéñ£GÈûvÇÃÿ÷XOA¢¾ô´‘$ú[ŸŸ Ù¦Èý‘âÇÿÃà/ñ¿îØÉ"c°˜1“9"hal¶ÜÒ’èîéê>;7ŸçEýÅ+×oÜd™s¼xúL°Ä~Œ»ß¤ã®ËÏźã|¾.›w uzYQa~nNfj2°I]ïí!þ¾Ž û¨ûa„}n¬ÁYs³mê´3iµ¡¾M-,mh´yû‡EF#Æ”Œ‡åe¿I,ocçóŸ~f9òØç©ßúÝ¿ò»c~/ЗŠ8ï¿ë¸ßz·¹ñ&§úµÕŒLwÅD†x{Àm,-p3Úœ Θ?œ8çÂé¡h‡ƒúý…þ$ú0Mú+úoÿ Í[}²¾ÌœÃù…Åe•Õt9€> Û‰e;Qú¯û†þäc»»£½•yÅx®ÚWT€òNß¿'aWtdxH ¤o=‚436ÐY²hþü}êo|ý Tà +-ôi·uQýß;–÷ù¤ð!¡B0ÄÑ +-}‹)*ªj³ˆšZz†KÍW¬ZM¸ðòÛ´ /.qo*b§wòëÓu ¬ê›8Mü់óŽh1€Ìö_ˆMÏ°ÿöËþ­ç{ãÇÁfç:rCn+™ÙAJ¥M’¨¢ÐJ!EÈmE%E­Rº¯åvÆÜUbÈ\;LņkGn~صë¼^¯÷ûsóýö-Ée|µ÷¿ð|¿ÏÇC¯bUϱŸ]±ÇÆDoŠ ìâÄ›ãŠÁöÇšö¿BÑ·ì+RŸEÉ’„ÙÖ«7®6¨oÊG›ÓthoŒ14<”m/É~¶XÞLØî2aã·Ë‚”d_ úõC}“Ìoúøsô%G,¿|Vb)WýøX ÅúˆÐ ïîn3œ¦LC41Ò'Vè€& *ȹ¶}¨ÿªÐÐÿý‰“§ôçÌ_è Ð_±> +-®?6>)%-t¡¸”>Îå +-ð…*€>×¾Gú"U}Ñû„¥î¾Ãº»üÒù³ßÂùçÅâb¢¡¼×àdƒãŸ í=y¢µ•¹‰¡>Õ·. ®6%ÕoÓbU_•ì ØEDX`øZ:ƒCáƒ$šZ .]\ç %‡„†¯Ç‰·/195CÒÄ +-Qd‰¯¸ïä©ÿï·Ç4ðì_Ãë=wæô‰oŠòs²ÒS“¡í!xÀ~hÖ=bß±om…Ø…ØÜ2°¯@ý¶Bó ûö×ÖÅa´™[ZC{cŒ‹|å²å] XÞ¸Ùj°öÆŸ*ÈþË ÿ&™_ú¿uAø7·G<ªŸËTLÄukV. ô[ä1×ÕÅ`ai†8|ØÁºÚýûjö$T~ø~P_ úmêC¿“Jèsè;M‡?ÆŸ&,"2jktL,ȇ>»~éßÈ¡ÿâåЗ•÷s®úxþŠÝ}îÌÉc%¹Yé‡1ÆÛèöƒ|·Ów´·€Âg ‡AB}÷ë£ÙãZmè·lÕˆ}2D¦ˆPú]>f´Ð‚7ôË£ ñ-­mì¦N›1ËÝÓËñbóö]’&çšs¯®••=‡E“c§…'–=äÎ&¶=÷[uÉÃÈþÇè û³ûSìl8öGöuZöëSÿ#êo ²{Í>˜#Ž6#S‹ñ£›ûo’ý(¡¼³s KŽ‹å-:¶·x¿Ïe¿!è¿Qä7ý6¢äˆE̹ꇅûû "N›jg3Þa†8P«_DŽŠÚ1ê·Vsê7ú£MÇôíúóxãåãŸU€ÓONMÏÊÉljˆ¿¦¼ò‡~u-û5Üš }ÖÝÕãí[7¸Zqùëî¼ìŒ´0>ˆqCDØ +->¹³¦;aŽ–fÐÞ´ÙÐö4éê;C³ÕÆU_}õL³ùOþ øà²ß¡“Æ¿‘½z÷ ­K¸Ð72k•ïàÖ=X0a¿0.øðÁÄ}=ÍM8b:â)戨ú»IõW-[iaoû•ÕXC}‚bï^¢ +-~(W}uüMƒ~‚~oX†}¸úQ}+k„¾‹+Ü=è^p@|/1ùpúü3¤ +-´oâéÿ\]{Ÿ/ĺWS>a±‰1JÝ}õ +-¶ÓÔÝ™ÔÝ1è{°Ø–,öÆòvv€Éfe9ŽÄöÖÕG߃F[§‚ê Í65óµž’ì °øg{Öûݨöµt 2l¸ž±©Å¸ “ˆóúPú\§gå”;ùíÙó—¨ð‰ñòà_/OwÂþ$ö?o9Ø +-\èoªï®l´a{SŒf‚ìcy-_)nÝ)„s +-ŠYŠeW®^çد½/Ž6„#8"©~€ÏÂùœ–fÆ£õ†2XW›bWb…ˆ +-9õßvÔÍy2æ7ýn úZáæ%èÛØM!è{zùáÙ£ímßµ è^^!A_þe8ôŸ°óèÿ¡túÏžBŽ,H¨ïúrè«wƒ¿ÞkÕJÎ +- rÄ5:SñSïÊ,qŒ™%òÂiú¬¹^¸ôÂ"6l†ø÷HIÍÈæé_¸\Q)h"ͼ&g߈¸aãÓ ß æØÏÍÎLìÇíÙ Ø_ Ø +-ð]äéî6ÓÙѱonb„cOûÁ¾ú®>ê·ý@¬oʱG/joˆq¤¾!n6Qöä)¦edç–câVÉ7»á‡ü†%ì+Èþ; }pDÉN”ççpÁ‘«þ”IH #¦ˆµhˆ5DVH~¨¦Ÿ£èÿC ú½TBßÑe&Bß ¿ +- ÿeϾ€~&@¿¤ž'ÔÈ>ŒÂá¿ìòr|üèá/xw‹ƒí8ž}Fj2u÷&èîK}yPŒv6ã-ÍÆàÉÃd¨ÅÚ›I£MêïÖê|é¯ýêɾ@ &‰ˆ‹Þý %ÂÐ7B^Lœìà ?4qɲ•ØúÑ1±ñI‡ Xz'N÷ýEŠyq¯¦V´Äfí<~Ř>=ê|®nTú„ý$Äþ¶MÖ®ìûð?Þ°oÀ°¯Ë°ßãýž2õ1HÈ‘6¸eˆ‘6ÛhcVÞ ûî”â*…óŠ ¼¿cå}ƒ°Û[T7ñŒdÿÝ‚>Ñâ@ÿǪëäˆçÎ%d.÷áoYª¨úæD RDü'‹Ná“ÈQm©ßªè·“ ¯!‡¾A„ýI}w‚þrø- ;úð]²è_,«¸úà ‚þ½‡ôŸ=—9«@Îþ×µ5÷ÄîÆÁv‚ ¶CIñ±1Ñ[6®] ݽØLoÆ4ŒDÏ•·®6åíM›­½8Ú„$[¬êÿMö?%‘ᢧ&Y"ñÂÀØÔbܦ‰óúø…„†GFmݱ;j?ýHNAq)µ~ùÒDyþuûMŒ_ÀþSYé×°3¦Ö§PŠØÏHKIŠÛ‡ _°ïÅï6±?áµ°¯nÿAH’)Ô7ooŒ NVÞbŠ`o¡áë7mƒ;N¤ó‹K©¼/ãW í £MÂþ‹zØÿ©ßôëžЗÿrD¸©¾…©‘©¾vÿ>¨ˆ] "+ø÷PËŸÑDèwmúÎ3ÝÜ=aô×nØ Ÿ%.!éPZfvnBUý–ŸîÜÅ£ÿEt½f]=+o€þý¡»¯”ã`;Iƒík>Ø¢"ÃQô »ç¸º8ÚÛâb36Ð>ŒÊ»ÏC_¨ïÖ-úõÿÎ>ÑpÁ~B—»Ò“ߧŸ ý¾ÁÒÄ)NÓgÍõXä¸tEXcïþÄäÔŒ¬\èýSg@Ë+yíW×Þ'KTl}>õêç¯Ôú/¤CþU²·×ð9ös@ßû;Ðßà”ñöDìëɱßSûðڽؗõ7«o©½»ðͦC²?J.ûž^~KW®†KÞ¾kïþ”bA±’½)aÿ™ û¿×ÃþÛ…¾Lîüt›–!W„"ÀEº„‹PÂÅ<®úVæc Á†~†´`ŠØYC„…’ê«ÙÇh2ô»KÐÿü ¼vÔúpïþ}ø*pð»ãâ“RÒ2ú¢"T*)‚Ìš}QõIõØÍ߯­þ™bÄÁv[Â` [à šGÝm3ÞÒŒÄ8Ž]“nsüW{&xTß©¾ +-ÙpÁ-‘ñB[WÐDs+뉓Þ‹—,C`l‰Ž‰ÅOy4¯è›ã§¸&Þ¼uû¿wû²Þ.Ã~Ã?@Õؾ/þÊrô7vÊYé©)âcá–ñ€Áög!öm%ìm!Ø—Qsbì¦JöœgΞ·ÀoyͺbŠÙy…%„ýKeW®^¿IíÍýMûªdÿ]€>("ÒâÖM€~ÙÅïÉ9.öïݵ}óÀÅÒ@?¨úÜuµ-HáƒÈ Qøo;èW|Í…¾»%@ßžCß> +-œ;XÞý,úú×8ôñâQô~{RW÷Tú( žüªOž•wµ#l…yÙ™i)XŠÂ`sw›1m*u·‰¡þH\lºÚúþŸýúðªêʾˆŽf5:3×8Š„bu0V, Hi +-ö®±a5T  +-R©Ò+FcA@)¢‰•(Rtfâ¬è¬Ùûœ{ï;÷x¸4Ïgæü ßÞ¿ómúy““MS¸Ùþ_õÉÓa¿#Ó9/´ÉÑ7dèðQpóYM²wvó˜5oÑW+ {ýƒ` b’R3sNà\…{½àþ†6²ÿJûÜÏÿàÞÝrïÑ) ì'ÆE +-‡ +-‡Ÿ¿×úÕpòûÓ~gì‹sì )ûÝä”} kèpÜɶvãr²q)rŸ÷åk×KÊÊ+9öäÙÿ׿UÊ~kè¿hjlô9-ª+ÊKK®úçÏäçf¥§`= ôóñÞc²b)[õGrQ»w/A  ‘ªºm¯ è÷’Aßš ?cÎ|‚>t<˜ØöCGâŽÂU˜CÑ¿Vt£ìVe5Aj^E_îÂ+Þxé…ÇñbƒšGbä¶ìÌÔ¤x<ØHŠx°‘Ýœím­ÌMÇp7\l½…Ï›?Ù:Ê ¯fQ¾Å'™ :„ ð‚ŽCœý~áÕ7NŒíFhDTlbr~þ´&–Ñ¿Ÿ¶Ä†Fa +-”½÷„unfÙ¶ٿγŸÉ±ä¿—²¿Bö»}`ì3ß7ý½¹›Mòy eß„žl.äd[îIO¶€`L1!9 >oÊ~‘ûð}?ÿ§4û¯¤ZEèÿ,}ɘäçegp\À”ìÚ¾eãZèófy¸IU}Òa>-¤ª¾Z ÅÛBÞzýp‚~Úq“sì˜Ü{ð¢ß(}eöýåK¦åÑ‹íÞ÷whŒøwŸ> /9!6*"tÿ>šâ*á`³¶0;z÷wÓ‹ b$[1ò¿7 R“|»O¦ì ^huí†ó5±Ž®\0Öm¢`„EFÇÁÍ—•—† œ|U·)üçc€ì·i öå•8Â~^vfZrblt$´8Xè[7IØwØ*ÅþŸä°O›@;µfŸQŸÆˆkÝ]\öñd³>Ù|üC0ÅD²Ïl‰Ã£M`Ÿì3]hüÀåEù> /sBGä¹À‹pÓ:ÏåKÌ™1ÍÅÑÎf"T} ®#bÕ×ìÄVDµ¬ú,úí¸çÑÿ´Uô'98»2èÃEèè“!QÔ ô…moCÉà ý&èxOɲ߹]u«ìÆH¶cGã¢#Â|÷ÈIqä0ãÁ†ý¹¿›¿Ø4…“Mªê«:U> ö9/4µ$5ÀèGÁcjnekÓ0sîÂ¥+Vó`@ˆOJÍÈ΃Q¸t¥°¸ôfEL¹ùžÕÓ’(çä“9¿?»Ñµ”ý*Êþwßœ쇅úö×!ûófOçØ7'Ãþç ûŸrìwPsöÅ1vPPöñdi2Î Šœ#{²íÚëBk\:ÞlÈ~!a6¹ìKVúÕoRöÛ‚>VD¢Å•KÎÁAxÂXÂ…Ÿ÷¶ÍP –.œ;ÓÎA[+sÓ1¢ªÿ9íˆ-DX¨:æ¶E=mîïf.¶Ž2è«U’oý±ƒÑž÷¦‚ÎD20úýŒ£ÇšYÀBöoÃ,”“³cŠÇþvÂþR û„ý/‘ý~ŠÙçÊ@{µeŸù½Åe¿«¤ìëÀZãß=ÞÜÒv²“«p²m¥Eîàá#ñx³ûç‘ýb8Ú(ûTξrè,ýÛýBDÿôÉœã¤#.`@¶l\»jÙâù³§Oâ`‡ã1Z~էꋫ¾ „4úí)ú)úý®ýžXìpÅeÑŸÍ¢í.2:– õî"]tÒïýZ}r ¶†þkYôI¸écM5ô»â«ã‰Üó˜ÃùcŠÖ¬„r7ËÃmŠÃ$+ Ó±R)Ò¿»³&¤ÈÞíÙÝVu:*~2e_¨‰0úý ƒž8a¢£‹Œ}ûÃ"£bIM~Hr,/+!íb$[TDèþ}ß¹¯ÛÅÑÎf¢Ù8.E}ݾ\Š¢¿[¦ê«:U? ö¹š¨©%C[GÏ`€Ñ¾'Ú;¹º3`øB 8t$î(x‘—O.¿"Â=üžÖÕ74ûJV€×òï>`¿?ž}ºÖ”ý,d?&*B¾'Ǿ e¼ˆ}è=)û8šû1eŸt:©¿[_òw[ÛÁÉ6O¶•k6lÞ)‡FDÅ$$¥fðk]kͲ_Ïÿß-±ÿ ÏL Ÿ‘’‘p±ók¯õÐ Îéîæ ³an:vÔð¡CŒÂdh U¿ Ã…H U‡¬ôk ýΰÜ-¡oï — ¢¿‚CßÑŠMEÿÎ÷÷è¿à†C +-}Å{N£$èC’tÍ1ȇ÷¸Kr,ºvùbÁ™|òwÇECµ ðÝCSįÛÝÕi²­¥9,8 o4À@ORì‰)~Öµ‹–¦øï– ¯>A¾«§!ò‚«‰Œ.0FöûàÈôDè‰Þ{ýƒš^œ8uöÂ¥+…d àô#ZHJ@só/’qh™ý_å±_'°Ï·9a±)û~>ÞÒì[Oœ b_›cJ]×.\Pö™Ï[|²17”}þïž`i3O¶Ùó/[µv#¤èã,o±å²ÿóoÊþ¡U\ B÷.6oX³ò«EófyLâ`g %qôˆ/ÿ1ˆ-‰BÕWý¿ˆÐ7V€þv}¦H.ÁZ\rÒíÈ–ÿ¢ô– å®™nùó¦Fìvú5UtÇ ÎžÊˆá` bç½MH‘|ÝÌ×Ý—~Ý4EMºÙäï¦1ªYŽïðÉ”} ¦'öÅžˆì›Œ3ƒžè=‘cËöÝßìÛ5f"-3çÄés€‹’ÒòÊê2P›ä D맟<öKØ/‚‘¸pî´Ðç"B9ö7Êae__Wçƒd_ödãË~IˆÌßmnEN¶s,Yî‰)îò!«›È±_Àö9U²ßvôKôA‹ä„XR| kW-[<Ãq²%ÌÅHIIô[®új2 +-o‚þ@è¯ãЧ…z]EÿŠúuòÐWfÉÅ;NÐBš]MuE9æˆ~"'3-™þÝþ{wÁ~s)Nâ(ùº2_7¤¨Å¤¨ž1¾Ó§! Ǿ×{âhè 0lì·A ÿn kr²Íœ»p)¦ìïõ 'ì§û§Î\|/Øô¯óèg¦&'ÆFE†Ò¹X»jù’sf¸»:ÙÛZ™Ó’8h`?ý/úöaJ¢¸ê \¨:b%‹~;ýYô»ôÿ&B4EßA +-}D?"*† Ÿ‹è_¢èW²sÑôЇ$ŸÕQô¡×•—•ÐOæO?–‰÷î[7­ó$)Âr“¯Û¿nCòuÿ~ÝŸÁ^k*HQmr|·OCF{ +-ß±üAß/ô`6† >ŠöDg7wN@¯mÞXÉ?š‚]¸¸|­ˆT»?ÜøøÇ'üPü„Cñò¥Ò3CñRÄ> e¿†²M–}_1û® ûÆŠÙÿ„gŸŽH;µc_AÙïƨ !0· ì· žl³æaŠ°Þ;€ý ˆo<ÚÞöÛŠ~EÿbÁÙS€~Z2j臑p±pîLw7g‡IÖ\I4ìo «ÓBIT³Ž(‹þxô?iýÿq_/^5§kÀWXŒå2GMW‡PR’Ü0ÑEMÑM×éê’Ür+¢R!÷KTRB©”ä>55)1„q,Ëœ3¹kœµfbqÖ:Ïó¾ïÞû÷Û{ÿ¶-V»ß¼ÿÂ÷y>ï÷óaôa»ËÎ],¯ôënñÑ—Öº–AÿOŒòÝ[n­Ãý~üo\ï+?þŸ7l÷±œ¬tŒqcb\LԲŘâ,òuÛà× ‹m2÷Zúu÷ ]Žl¸ ­é€ÚÉSCÚ¿ÄùÐÇžØßx°éP‹áÖÐhO$`Ì[°dy4©‰;ö¤e>r¼ ¸¸¨¤e ñÞÊ>ëÌŠV°ÿ‡ädì?~ô؇2sAÙ/ÁP‹} Æ~_åìwVƾ…ÿw …8V|8þÝ6S¦ÁÉææå† ›”1òÙ¿¢iö?ý³§‹ óæ-vlÝ´;"räïã9ÓG‚”DK(‰2/z©(‰šŽX§%‡>+ú|ôu` Œ$èµÀ"0îëIŠè¯•¡Dýû8¤Ô½à¡ßºõ†$›i’d»!ȆúÚšËäó>Y€•.mÆ¿&zù’ó EoOòuO"_·ÅP¼×„¿nq¥ØOKý.L 2!¤ôƒù2t˜•¬'zùÏ_‰51)%uçÞ™Ù¹yÈLFõÕÚú›·ï?@,šž<{ñòu³|x/8²ÿ¯¤ ¨ÏþNAö¿–cßÈ&D‡±ß°Ï¦„‰¨ê¾PÙç†ØŸ„Hþnr²¹º“ñ󎊉K„á÷NÏÊ9–_XÒ.Øÿ,èƒ)I ±Ø‘‹/7W'‡iShI„yPé…t 4°:k>ý.täÐïÇGÿ›iöÓ]}?>úÛ$èIпèß¾Kv[‚~³t"ÔF_²Ýo[hÕÿ­ùõËÏž4a’î7Þ¾‰èÃjcŽy¹Ù™°Ù©)I°Ø+"†ÏÆ]œì§N&_7ç^ÓÃ&×SðëEŒmòø=±í‰0%8#Ú:p õZ0ÈÄÌÜRÒ 9ó±&Æ%&o†á8ˆ-±¨¤ìÜ¥Šªê«×oàh,š¸“!£Bõ`°ÿØobì7û×á +-DöOö³2ÒT²Ýj²ßO‘ý®bf_EÙç„8Ðdˆ9ý»ádsüv†;4»ø¼áfÃá÷nOì·ý+ý’Âüc9YéPA‹„¸˜(ìˆÀ…¯—»«³Ã´ohI†Ó@¼0ÐÃYöBÓ«ñ„Ñï*E_[Š~c,2ôœÔAÿʵ:²Ù>z¬}în«¬úÒ,¥îÙS‚þ?I¡ƒß»ªâö¹ü£Ù‡îÛµmsr"lKÍŸòl5¦È¾n¸×²{.twºÎ°Íx_·Rl«§ÐebôÒ†!14ÂdjfÁz"‚ááíŠ51zMüz8wïOÏ:r îÀ3çQ lw ˜&Þ¨&ûïåFCV`6$ìß$ìÿPŽ[^”/ľe²?‚±ß_ʾ6a¿û_‚ýJ.¶žc!ûÆôï¦ìÛO‡Éç 7ÄÈc¿HÆþ ±ÿyЇŠ˜œ½| vDäb†³£ídÒ†q¼Ð¥“ÐMyÕˢ߽C_ÐïCÚÐŽÃÐZô›>ú%ësäÝ;·êp¯/?s +-Úä¸÷ö-×ÇãÁ174ÐÏvÚÑŽ}Ýô^ÃõYˆü{MT_w›=-öybèéb5Àf=q4Ãe¦§O@0ÔÄÈ«`@6mݱ'-棠¸µ¸\S[×€XÐJ€V4£¿ÿþ1gàŸrì¿bÿ{ìâ{ÌöI½£ì1)é×ÇÊv¯/{ÒAá³ßQTì+/û"ìz/Iˆäïf'ÛTLÑÃÛ/n6ˆ~o8ÚRwîMË€ï[óì·ý2ô‹x诉^¹0:¢©€þÄñ8 +-æf0 ˆ¾!üÿÚâ®ú\ô;*A瀠oÈC}oAôK„Ðùºù7œ¹:§ÆbC–ï¤è7Ó(q­1ɆºÚ òLéÉ‚ãGgÀŶuÓ†u#laAþ>ž3]¦ÛCŠ’{͘Ük +-Q)¶áã‹Ñ‰ŠÑU&†öÄM†˜[ZA50œ\ݼ|¡&Î_´tåêØ„$h‰{dfçæŸ>‹RS[óv#α‚ŒÇY'hût<¸ìß#ì_U‡}'dw}8‡}Cʾ¤¨`¿½OŒŠ¯+ž.„HÿnSØukÊ>®º§·`(Ä¿7mÉ›·)°M#ì2útR7''Ư‰^¹pþœìˆ3ÉÝg3aì(øÿII$^Àà/HKì$®ª¯¥úº<ô‡ô'rÐQ…þýFŠþ¿›ž>SŠ¾ºkMÐÿƒ–9ú¤ËÕ×Ö\®,¿xötqa^nvæÈ1%)!vÄ[€¯—›«“¤8žs¯õ†{MbW1†ØÆOAŒÎ<1ô û0(¬'˜8:ÏpŸå:7bñ²¨˜8h‰0#åÍ'#RQU k±‚ ¥¢¥åãJû¯(û¿°ZðAögcÓ±?JÆ>)yzº<öéaÈÜï ¢º¯ìëæ\l,Äädn=zkxnž>þA¡sá÷–cÿ²±\Cì· +-}eg_òúø5 Å¢ùsBý½¡#:1ô­a LDôÁ É |Á>~1U}®ù$æ³C¿wŸ¿SôÍý±Rô= úáýXôaÐóŸÖ¡a¶Ð¥¦UîIFùàþ]Ò䪫*.ž++)Ì?š}èà¾]cbÜê•K!F<ØÜg8;Â6“¯[z¯‰>Ķ~ªŠ"Ã{¢1í‰Æd[»éßB9ð +-›·`Éòhàbã–í»÷§£'O•¿TA‹Á»?3öŸ¿x%eŸ{ þ¯ì?'#òø‘pÅ“±¿€ÏþDÂþ0Ê>Ì +-ÖgãÛŽýσþ.†þJDµô úÀ…¥¹ž{¤$êIãcÕ×â¢ß‘‡~WL_òëëêcþ}S@ßÊzôØ l4€þ»·üè?zˆQ6Ô×Ö\®,¿p¶´¸ /÷p&üÞ©)I ±«VD. ‡çKþî©Sl&Œ5Sd÷šž®Ž6†(ôsk:¦öø´Ø—E¬ ú†À>ôD;ÔÄiŽÎ3÷~îu Zƽçìû_x¾^÷óuÐ/ˆƒ>o"ô¿¥è?Bÿ§‰ò‹>[â0Laô‡‡ôßëîºÓù ù¾›êªÏ–—@9)Gáó ‚úæ¶Ç‰üÝ[6m4Ô‡ÕWôa…ååÄþÜR°¹sö&.Š¤(,U"=&FNCcS3˜[{gà"<*6!9 ´à—VTÖœoüªõr[û d¿§¯pˆPAêÁèØë e†ÙÇ­?q,ëó”£ñ1Q"ìo%ìë1ì¯$ìCÝ“ç÷=æBdÝ—2öeD¿n&Dy²øª´ìiëêÃÍÆ°ï„ìûRörÙ¯Ÿ ög +-ý|ôCýýãÑ_³j%[ù^ˆk‰R¹}b>³½ì'' LÐÿ„ùó ŒŒM·lý”¢¿Ïƒ Ÿ”’ž•;ú÷ úßô_£ÿÏé£OwùõØèË‘Ÿ=Å,‡‡ûûz`“oÞhÇ$Ï×T–—ó ÈÔ¤øø¼ýz¹»:ÛÛî´‚ƒÍxƒ¾®6ûuÃÃþrC”¦Ÿ{îÞDE‘VÚ M8IMÜnmçsÀ7ðPDt”ĬÜüÂSeU0-Í­WÚ®wÀ°Üííü–aÿÅÈ«Ñ1Ñ~ðv:ì‹ßûÉÙòƒa؇ãÐÔØÈ@gf ªÊ2!öÉàpê¾ûù²ÏËÏ?OyVƳ?6ûç„Ù ì{¾g½ýӭаðikj¨óÙWœ˜ýùRÇ>çëa9e_o6ˆØ·¶å°ƒìgQöeógýYBßm“=E“úËý%lì 0ô߉¶DÉÏ›ßM„¾¢} M@ßÐÈÄÔ ÑÇä}ÿ Ðßý·œ4Ù0 úOÓ5î%è_¿våbó…úÚsgÊNæçfÁÉq(?oG;Xà-£žŽ–†:ýºqy!JÙ¹6§OLQä‹!'¯ `àÜš¸ÁØÔÌbœ‡N®nžýƒIILÉÈ9~²°¨®khj¹tØïÆy&ì †Ó`ÿßâ؇q™Œ}މܬô”¤øXdߟ°ïdoKÙ71Âí§ì«©b] ¥G‡6Qöe¤…}™ñów+,U†}Ü~Ê>»ü”ýpû¿ºû³Äþ  –ýïýú¶Ö€>h±A½¶&E9¹ñ„З&0D‹>}ÌœE_ASWUcÑ×'è[ðÑ?àã›”šž=kèÿG<ú/q‹Ÿ<~ô³ìíîºÝ Q^½ÔÒÔP[ Iäe§§Àïäçíé†ÛŽm$F]­u¸¼ôë–—ù¹¥å\›ë'®(R1hOT&ì“šh€ì[Zí´µwvu÷ò!%1>)Ùÿ¢¤¼²¦®‘ŒÌ›·îÀÄô?ö¿ç°ÿ÷7È>™bÆeÜe8Eö¿$ì—ØŽ ò‡‘a›…Ùf(}ë ûdŸ +-°H–Ã>㾌TÔ}¡ê÷ÿbãœlLŠ«ö¹ì{ûÎ1û3‚~ ýpú´"n ¡Cæ+0sNIn‰’Ưxz±sП|‹ùÝíÍ sŒ†‰è=è¿×ÝuçÖMˆòÒ×MuÕ•åäñœŒÔ¤xø½ƒ¡µ¹»:ÛÛî´²035Æá`ûdå +-þ×Í Qä\›ë¨$ùÍË> œ58:F&›Í-·[Û9¸ìõ %1*6!9-óØ ^qiEUÍù/¿j½ÜÖNÙïëfzÂÈËѱל‰ù×ôÙ3=ö³ÓS“ý``¿›+`uÁœ²W"é}+–«(Ce@p€8u_ÚØŸÏ¿ØìË ³¯#ľ«(û“”¾Y`Ðôõæ¢oÌ ¿šp½ýÒ–‘üª/}7,-Í›œwŠJÊ*ä¾[³vFè›[lÛacçàìŠè úq É©ýòwAÊ;LÐÇ4ýÑ—#?>{ +-aúƒý}=°À7o´·]n…ý­©ª(-æ8–™–œ¿·—Ç^gÈÑV×È`½Ž¦9ØTø)rC”’sM·(ÎçEJ„}ðBKGÏp#r£ã¸gjq(":.°ÈÍ/G;z±êA]S§è+q¾n6Dé8×$ãqçˆ)Š0ì#K•hM\»N[Z¢)œ‰;ví†+ÑÓÛ/(4ò`‘žWPt¬¨m¸Ðrñêµë·ýû86‘ý#¯¸ìOsh&eÿ/"ìóòó²3R“‘ý°à‚aßÊÒ0Уìª*p+*òÙg%f_ÒÝŸ7û ÊH÷S•Dögýqè›BÜô±#*°èÈDýžt€1®èsÐ_@²fÐW„%iSôõ ð¸3·´bÐ÷ôö  ‹<—˜œ†è"úÕ³ˆþ/\ôq}Ÿò··— Ë{±åB}í¹3e§‹ +-ò²Ó!É#‘¡A~ädÛ½kÇ6 D__Wków+ RĞƆ(ñJÌŒ’@ 2E²‹`† 7(#û0@šÚ„ 3K«¶öήî^ýƒÃÇÄ'¥fä?‰VT×54µ\º +-“Óy»«»çá£ÇO~xFØgæf¼3Å>Q öÜÙò’âBÊ~bÜ‘È°`ßÓE»];­,·Röuµ5×’ ¢ì+0ìËrØçh Uì³°·(ûZÄþÜ ¿ø#.ú¢-Q²3 Or /Ëš ¯F¿xm]=# ¶v×nG—½îž˜vØaŠ~N^Aaq)E¿yjè¿ëö2i’å}òøÑC ³·»ëvç7†ÆÖÒÔPW}ö§‹NÏÉHMŠ9ìÐÓ‚„­µ03Å‹MªE©Â&E\Wnˆ¡½ñìÓžH¦›x¡Ç"i‰F&p*‚Î{=¼|B£b’Ó2Á +-h •5u”Š›·îtußë04LÙçNŽ`pÞN<8☄}p Ù¯>[^Z\X—“‘†ì ôCö]wà Œ ‘}Bšêòeh=™9_÷¥†ýùÓeßyÙÿÐ×Ò`>xe%ö_È/‰Òˆ¾pч˜IÎd]}¨i°°,ú†F4j>ú~˜õ‘?$~––‰èŸ*-¯ô/Ì<úoÅ ÿ’Eøoúïuwݹ…Y^úº©±®¦²¼ä‹“Çe¦%'ÄF…‡øxaW³µ¶²4ßlbD>ï5«>VSÅ¿›®+©úÿGÿžhQü=‡}âV‡ z†7áÙØ9ºìÛÀ7ðPDt\âgŸgåæóŠK+ªþtïĶöÀþ_{úúýï¾gØû/ûõþåyÅü‡´jt¡,‚2™Œr×Å]¹ +-³„€€paAÈB¸ +-B€‚€\Q0QP¢ Vë%¥”:ŽÃ8A­­hfZkg’LÏyžwßÝeQ©,ò’ñù¾ç|žï™‰ýŸæÊþ_ì£'O ûMõ5U”ýÌ´ä¤ ,$ˆ²Øn á\$ìÃAw@ t™ºOJ &ûw_M„Ø×å"ûó†þ–¡ÿ¦*ú¿â>úEôñs§1aKCô×[ +-„¢Í¶$h‚~PHØ&MÐ/Fôýö—Eÿù«; ý)š&AÐÿîÛËÏöc[ë8z¸¹¡¦¢$èÇÇÊvlðóöpsÁ EV>æHÑ×ôW°è/Õü¹:®Åð4Ë> ñ.FCäb‰™…%²oï(qq÷ô,¤Ñq `E°_^UÛˆTœ8yº·ÿ,ŒÏaŸLÏäÝûþñpêÑcfxžj—ýïýs”ýcÈ~²_\—I0Iý?Zím­aŠ,¸ û0H<%ûôl$$0îsŸ}õ"Ȳÿ›¹²?7 ¸‡¾îŒès ôIÀL=ƒˆ•èóXôa[×úV"k[{GŒÙËÇ/ЗÊvÊ!çÌ=yŸ—VôÛXô/ ohý§to)úîßÄ4oŽÝ!aö÷žÆ®v¤¹±¶ª¼¤pïžÌ´¤øØhiØÇ~>žî.Ç÷mÄ°®f&$GCúw«¦8íç^è¸Ç›‘}œ&Æ ¼ $( …­½“³ë‡^mÝó a?¿¨´¢º®ñÜŠ]§N÷ ö‡GFÇèüLÞ£ìÿ d6wâìÙ¿¢d¿½°_Q +-×âžÌ])ŸÊceÒp–}‰£½µØj£‚}"‚>^”„7YöÕëþ¢céìÙßÆ°ŸòêØŸú'ç }.g˦«øÕ•Sô¯DÌ ¿a£•ØÚKƒ~h¸T+')úeUµ M‡µ‹þÏjyôIœ¦ú÷&išc£#ÃCæÙ¾Ó§°©j¬­®(-ÊÏ(â¢a_·mýÈËÝÕÙÑÞ‚´´0‡]%è¯ä‘ˬ镪Ïá 9ø¦‰Á€Áx¡£«Ç.°?¬5…IŠ¬íœ 8C#¢bÀŠô¬Ü‚â2¤ŠCgWÏ™>¡KW¯ _Å š@öÿþàŸ§è=™oö75ÔVU”RåÐÂCƒQ8%ŽÀ>ÀGöÑ8a˜@¨@XX:}N»¯Éþ’³o»pìkýým³DŸüê‹}¢ÏžrK—Á’ÒxqM}¨gï¬Â€¡ Yð!a± ìªÄÅͺàÐðÈèXybJ:ɸ¬¢º¶¡чžÖKÑš/ô«¡ÿ×ÑëÃCW/]87Ðw¦§«³½µå`]5ìkAnV:DäI:;Á®Š„Ö››BA3†E]‰õŒý»™¹®qñ©Š¡ƒv}Â>Ñ‚G#báæáí¼="j§<15#;PQÕ¡£³»‡4`Ÿ@qëöÄïïö)Ùÿ¯ÖÙ¿@D8EØon€îP$äìNOI„“12‚eGÉF¼I¸oanŠ*À4A‡@t.(ÙW¡aQ±ÿëg°¿ê•²ÿ ÷Ÿ±VзýÅ¢OÌŸ†>}’.¢oŒñš"úB@ÿ}'gýˆÈè¸øÄÔôÝ9{ ?/Û_]Ûˆèw"úýªèßÒúç“'ÿVÙØÉïïLܾ…i_Cô!ÌžîÎŽ¶–¦úûý¼ìŒÔDùÎ(ØÕ_o7HÑð1HŠ¾> ¿Bý%4Å×èÿÿO9XJ0–Qö p9’’hbfa)°‚aúƒÄÅÝÓÇ/¬ÅÆ'¥e**k <í8ÞýÕ×ýƒç/^þöNÑMûÊ!Òœ¡¹±ƒe¿÷ô)(À>œŒûË>/Ü›“•žš*@ð€³Ñ‰tA¡À’°%ÂÈŠ§d_AôºÏaö5px.û& Êþ«EÕŒèk–D†ªŽ¾JÑW$«DŸÙ­2~÷=‚¾¥@¸i3ì©“³«»§·¯?ÄŸ”šž•“_ùV×5â²Rô¡¤ú#t]µŽþ#f_ý›˜æµ«—/ž„0»w=ÜÔPS YúiIñ±²Ûƒý¼=Ý\$°§b+ßÂÌ„üÞ†#¬(ƒþ2µ¹"WߌìãT1\àí쿇—£%baï(qu÷ò+¤Ñq É»€ýÂ’ò*¸ýòÄɯz)ûXÆöqŒ¦æý¡+Ðû û0IÍuÕû÷•æçde¤&%ÄÅü}½=}ƒÈJ` 2˜àíˆ}Ð@ŸGf +-l`p`u`Ùç°û‹‡}Ž¢ÏÙH•¡*Ð'EŸäªŠÙÛï­ô×`´ÐÍD4[ýQ1q I©Y¹ù…%˜n#¬ªýó +-ôÇ)ú“ZAÿ?OÔã$è“Ž†è÷÷b˜G47ÔT•—îÝ“ èÇEKÃ>Üêãåî*q´Ç$¡›™¬aÐç‘1¾FnO­PÉB/.ttõx¨Ž”©ùz87ÛÁåˆVøo ŒùØß“_TZQUÛx¨õ‹c'`”ÎþéÏd’ÆÆo*˜Ò`ÿGí°?BØ?ϲäPcÝÊ}%Eù¹YP!P†° ?/¤ÊZdµ‘ag +-Ø_ ìëê¼õ;ÊÃr–}ÆýÅÃþ3²¯ƒì¼röžÙüùGßdvès ô‰ù +-ô—/W}=¬e$WŠþ†V"k¨f˜¬—_@PHF›œ–‘›_T²¯’d«ŠþUý ­£?ÅÆ èÁªbšgqSOƒ0k«ÊK‹òsvïJNˆ‹Ž (½>tuv²§Iš›b132|öד©ú£Æ׽Б-®§&×öWè0%Ø_kºŽ¿A(²¶s€‰òØâëT¤gå—VT×lim?ÖuêLexdtŒ:£ô€aÿ_ÓØî Í‚ý›”ý« û=Ý„ýƒõ*ËKŠ +-r³3Ó’Á™Ø ì»@°³ÃLñ-ÌM™Nhh@|Ða€`…X,u6ìóšýW¾>ýËg@ÿ £ÿÌ¢¯ˆT}}‚¾1¤ºÖÔÜ‚±Š­íì%.,úR›œ–™[PTR^y ÑÿòxwÏ™>@ÿ" ?LúÙÜÑÿQmUôÜ¿;IâÅ~èôA=;ÖÞ +-aVW”b9K‡,c"ÃCƒü}·x|ðG';k‘’4] èÓß–Sý%t/_£ÿ²O9aJ/–1ì¿EØǹ±2[ÇX‰mÀ +-7o¿€àíQ;剩ÙyÅeûažZÚÚ;»`œ¾9‡bø:Ëþ=`ÿáÔ£ÇÌ,=;ûÔz7Ž ûx8öéé¦8Ô×TB‹(ÈËÎÜ•ü©Ì¶ ¼!)ûŒ,¯Ùyöð¿ ØyBŸ÷‹BŸ}(ƒ¾*™¡t2}p“ØÆÎÁI +-©‡†Ke±rˆ5sìhiye  ßúE@‹èÿ¤Dÿ)“' ÿпGÑÿ ?'ÉSj´ÚøÝÿ±_7>QßwÀãŒ]]2Àéå¦õ§ˆÇÓyôB@@(B¡<p¡€ èQP(…@‘jq:- µ”áS[çšÆ9¦›vnM³%sÙûóýÞqwM gw,üþ…÷ûóú½¿K¬)Q;')Eêîéí«E?N©JIÍ P‹ö”WÖhp¢GFѼp GúšÐfŒþ—7¯ }¤y¢·»³­¥é ³(?è§$Æ¿äUÆÑ·³åIŠ„,H¦.Ç)ôMñ•ŒyÁ¸Ðiaa)`ì£Z6«ìÈ +-¹½ +- *bTj°ŸûþîR¼ëš[Ú9ý¬QÌ êî½û=þ듧3`ÿê4ûäÃ}ö‡‡.] ö?fì75ÔijªÊIˆ¿ÌHS«”q "48Ðß×ÛsÝZù™Tâ¨e_«„€ØçsÖ›£PLŽ¹?!ö7ü€ìÿoÐÿñ¤CÿûC_÷rãaÎ&ô­p—,N-úŽ©lzûú‡"Ñ8e’:-cûÎ]ˆ´ªFSßô;ºz)Ð?ÇÑ¿ÉÑ¿kbôù6úwq£,ÎaZf”fïGí-8Ðûö–î~?7;3-%1!æÝðMA¾Þ +-9EigkƒËdè ÿÞ”£ýifâ¤øŒÀ ’Í0`Ÿ=$À‹¯ÈUöNRÞž´C7GÅ*Uêô¬» +-ŠÁ¾¦¾±P T§Îû—‡¯ÞøüKV©{ ÙÿÎÔìßäìŸû ¢§«S¢¡¾¶¦ +-µ*À 23MÄ öI …ÜUæ,q´Û®XŽwä[xH¢^ +-ƾvWŒZ1Z3sûfÇþ‹51ú&‚¾y†¨Gßh賓ԡoi%˜ô"LÜ¥­ØÞQâ,s•+èñDèÇÄoIR§gnß™W°»toÕþZ ßÒÆÑÿͧ„þåá‘ëzôN } +-”ÐÿÎý÷ýÛ ýËØeýgNQšíG›ê5Õ¥fVºZ•…,ü¼=ÝÝ¥“ý*›åÖKá,çcŒ£?ƒÏ0óýuOŽOß4=3µì£aXóû¨×J1gŸQ«L‚XÅe•5µõ‡[?ìê9Þ§eÿw`ÿÖ(ûúNû¯\©qÙ¿«eïÇË—>;7À`ì77Ö×B‰Ò₼œìÌtb"&*",$(Ào½—‡ÂÍÕÅíÛÚûè—HHTX°Çä(Z-&ÁÜŸ ìO¡ÿÒïCÿGº¡Ïsúú”¤PD[Œ£ïà´ÚÙÅÕMááE臄EDÅPšé™Ù9y…˜dûö×ll6Dÿ³1è?ž(úÿÒ£ÿ!ú·>¿89ú}¸N¤ÙX¯©©,+.úÛ¶&)c£"BƒéÕæîæ*“â,Wâ*9úVsçÌÖ¡?SŸãúüŒ¼Ð±Ï§ë*&q+Ð/‰³ Qá³!08,2:nKr*ØÏ+,)¯ª©xB;ÞG/HrâÚ/tì21¶Tãuê%ì3†ý«Œ}ÆÄñcݘäDEYqa~N6º•œ˜FRøxaSüÂåm©“ƒYA³bXˆ}>÷g½©û3´s,ûfÕ7sb|&tiN¡?Þ7vèsôõCŸ§HCßÂR€q’‹–XSvNR$éæîéåCQ†GFÇ&$"ˬìÜüÂⲊ}>úGÛ;»q›º4‡¯}¤ùzÐÿ‹ý/n\cqœ=ÝwüXWGëáƃµ@¿¤0o' 3w¸Á‡²tq–8ˆW®XFQŠ„,IÜ#Cÿ)ôMùeŸi¡ÇBÀÙGÅlí8û^>þA!á‘ïÅ'&§flÏÉ/ÚS^µÿƒC¿:ÒÖjäì_¹FkBÏÄSÓ²ÿ³ÿ‡ßûÔ¬ó€âTgŸ¤8P]QVR”Ÿ *RST`?2Vøûz{2©Ä‘³Ï¹Î0/ûÚ¢Mš¹o~ì?åú/ú^:ôµêз´Ìò­yŒ©l|í:Oo_ÿ@Ž¾R•‚5¶#7¿¨¤¬²úó°ýSg>ýíyžåM–%&Gÿé+¢ÿŸñ®“åùTŸ'Gÿ +-Gÿ$.³£õ¥YU^‚9¶=#•ÂŒ ô÷ñòàèÛÙâ"9úŽ¾vê#H=úÓÌ/ÄÉõyAm›aÌ>¶¬XHËÂf•Q!Wxxûm +-7&>1%-›¢P ]M-mݽ'NžF·.rö9÷6Ë$ì?ûØŒŠQöéy¼—[q¨î@ueyIa‘‘–¢RÆA‹Ðà@_p¡»Êœ%Žöb[¼'ãA)’¬h:38“aî›–ýRS°ÿÜ(Ç)ô_ô½xèÏ0ú@Ÿ†>"ŠpŽ‹—.[nc+FˆÎ2W¹)úù‡"Æ8¥J–A9bŒUVkê€~+‚ì%ôûÙaê“|­èÓ »6r…èŸèíîl;Òtˆ¥Yô3ÓRfxH–˜‡BNYÚÙÚüÜzÉ" ?_`i1š¤6Hv†Ó¦¦¾ >}åôZÌÔ±?{Î\ +-û¨§Bîîéí)¢bTêt°(ð’¬khjiïü¨÷9qþâÐðˆvQü‘¿"Ÿ<¥n}k +-öŸêØ×bqã*&ÅÅóƒ`õ‚­èW¦¦ª|Ïî‚];Ñ0uÒ–ø˜¨Ía!A~ë½<n®.Ϋ°-l–SÏ.Á ±?G;0&ÕÜ7+öuî?%Ÿ™?ôKÿÿÑèÓÎÒ },0(Zðm0 oçà´úmW7…‡×z¿€ °ˆ¨˜ø-Iê´Ìí;wìÞS^U£ÁQaècŒéäèßxè?þóƒû:ô¯\ºxžâÄUv¶·à(°_xn6NR•Caøz{ºËy–6Ëé¥ÀÊbîœÙ:ôgꃜBß$Ÿ:öYÝ~BeûdÅBZ+ÅöNR™«›;¦Å;C7GÅ*“ÔéY;P±ÒŠjM}CóÑvìß1`åšû†ízø@Ï>^’C/ ö³UÑÓ…·dSC}mMÀ(ÈðHßšœö#ÂB@†—§»ÌâIIhX/ajàUÉØ`ìO²¹oìoî?7DŸ¥8…¾Ñ÷²¡ÏŽ²Ó¡o‰ý%äñYS~v)èîéåƒú ‰É[±Ãròp‘{«jjë~[GWÏÇ@ÿlÿà…‹CWF®éÑðð‘nMýoÿAgù„­1mž@X‹þ'˜bí-Í ušê +-–fVºZ¥ŒÚºñ¿õ¸FW™Ô Y._¶”¡?¡ÿSŽþSè›ü3æ‚uN‹«³B(ÒR!v ö¹Á¡ÑqÊ$@eQ\VY£©ol†=p³âÂ¥¡aÆÄW_ß¹;Êþ3S±~=2b„±?pö4Äûm-ÍõµDFqa~NvÖ¶ÔäÄ„ØèÈpBëbÝZù™Tâh/ÆÜ_¶t1ʆw%à°`rŒ™ûÓÍ|î›3ûSèÿkþtáϒcÑYPvBÑÏ.¢ýec+¶w”8ËÖÈ×®óôöõܸ)<2:6!1%u[VvN~a1%X‹ƒlaèòëÓgè$ ÐÿÓXôÿ9ôÿþlý»w¾æy³%¦‹©©®,+.úÛ¶&)c£#BƒY˜ }ñÊË(K‘EIãk4I=úÓÌ-ÅÉùq1]Ï¾Þ +-g ÃVì qv˜!a‘Ñq[’SÁ~^a د=Øx¸õC”¬ïcÿ2{LÞ&öñ–d S°O}"ã«Û·ˆýá¡KÎ œ¥’õtwû„FEYIa~.ÔHMQ)ãÀFhp ¿/ª¦»þ—ý:Šú<ã>Ó¦Œ™è4Ú( ^ Q ²á†•£»,,,°ë®¬,B œr +-¸\rº È}ÈY(P„€•`q4ˆb$ˆ¡CÑqMƒ6ÖI;5ujgú¼ïûûíÁa¢â€‘÷¯ßÿßçùü¾ËÊÂŒ°ËëtZªÕ}šýÅ^÷’}ú?® CÕý'O” ªñÚ£?WѧÑW+ú«5l¡î&½-}3 +–­›ëìê.yzAzA¡áQ1²Äýi™Ù¹ù…%Gj¡…µwtõàÏ]@= П¸u{ôÍ'ú·oaô/úgúamý#´°2@?+#§äï#õyðy&ËÊÜÄØhë=‚>C%Júo¨å¸Ðé½òO9{Ôài¨³¿z ¨ÐAófhÄ4…i³gsyn±ÄÛ÷Ãà°ÈY´‹Ü‚âò*p¢ºÅI`Mf‚°fìáìì?}Â~š}²‰ñ˜}¢FßÉž®ŽvÌFEiQAnöô”DYlt†ÃK"º»ò¸;–5t &²CoÆc­6ê>f_µîkÌ]÷Íü-<û4Äý' +-òQ|$¿%ôé7»ù82 õ¢¿m &C{-ÉMÇ41³´fÙ9p¸<¾»P,‘úøŽ•%¦¤ÈÎ-(*­8Ré!ôaq|ׯŒ]»1Ž÷‘Bÿás£ÿD‘(½‘Sß=„…œü†Bÿ:äIÐï;ÙÝ èÿ¡¶ª¬¸ 7+#5IƒÒô•JD>ËFè›2 a u}mÚ@Uô5¨Êµ„þ<>5-(,–Ñì¯\…Šžá6&’ØwqŠwyìgç..‡Ik†“ .JÌéóÆþTÙ‡)ûû½É¿Ý½CØ¿6åⳡÁOÑ õ8êª+ËŠ +-òÊ3R’âã~>R ØÁwqâ6–榤îo~WWgÌø¡¨ûË—Sì¿ +-u‘°¯¨ûŠ‡Ã[B_õýTÑGË·\QôQhk×þ»Yý÷MÍ-m¶ÛÿÞÑÉ…ÁôÃ"÷ÆÅ'¥dÈæ—UVú­Ý TÁ>‚ð®üE‰þ$¤÷¼èÿonôïô'úŸ]8wíbç±ÖfgqA^v& izKÄ7.Û…ÉÜfhèë@– ÍÕï¬ZI£¿L™äúóùÔµ ÙÇ“·Í°¯…Ù‡™) flwà8¹¸ !áÀ~rÚ`®ÊºF`¿«§÷atûß¿0û¦³ÿ5Í>–chúÅ©Þ@Gksc}MeYñáC9òŒÔäÀ#,$Ðß×{×N œ³#ÛÞÖÆÊ ³šÜ—ëàÀÔ¤Ù§!Š,úº¿Àì?Raÿ¿jæ+д„>zO-úxóp^4úš -\ô¡vmÙŠÐ7³°²±µg;:»¸ D;wyûú†„EÆìKHNÍç:\\VUSßØŒÑï=Õf`pèŽîÆøM¼‹Jôx)è_¿úÅèçýÓ§Nötkkn¬CqúiÉñ±Qá!¦XèÕ Ð·4ƒ0¡waôµ0úoÿvi\jèÿjQÅøŠ?5-ÈøQVຩX»I¡¿õ=c¸.ml8ήî;vzíö ŽKö*,©¨®kliëè‚a;™»Šú(ÙW(¡:hÏÅ>™´(Ù¿ùWÄþèç—†à¬< ìwwkkiª¯©*/)ÌÏÉÊLÛŸ°/&*<4üðò Ý]áºt°cY[˜™0!z`®û R÷ß&ŒÌY÷•î/t€Ô[LìøÉ×újOÝüY‹þ[3‹>¦‡cÂþY³ì8\ž«»Päé¡…†GÅ@ji™Y9ù…%å€~SKÛ±În´‡gÎú£tp4úÜJn^ÐÿžFÿîWÓÐï=ÑÕÑÖÒXW]ãôã¢ÃCýv{íÜáîêÄq°µôßÛªÂ\¿g‰× +-:Êè/–_õ§œBj)+¨á*„}˜;#cs¨ +-O/¿ÀЈ½q ûÓåÀ~ie5Ì[{t ÄÄÐ¥Ìþ,JP£ö,“¦Æþ¿ìߟD ë¦mäÒÅó0nÀa¿¡öHEia~n6D±'8ÀÏG* =ø<'2ÄÒÜ×}<]¨ûÚZŒ5tÝ_ñ*Õý…aJ}¥û*æ«¡?õ:£ÿóŠþ +-•¢¯½nýF]¨\¨è›š[Ú@`'ßc‡X"õñ Þ+KLI?›_XZq¤¶ ©>{îüEXÃ/®^'±Ýùú›Éû³åö<è?ú÷Ì¿øÄø«c¨}Až€þÇí-õÕ°ƒ8΄¸èˆÐ@?/Oœ&BßÜÄ؈„©Š>ªú4úo,¡ÿ2Þ4ö£Îþªß­^˱ݘ†FL`ŸPÀ؉<¥>þAÀ>rB=£´jÆGípZ~¢`ÿÚË`_1mû_QìŽ _„–€ÀmÙÑ‚@Ï(-*È;(OOIŠÛì{"7gG¶½­•…bêþ&] ©û˜ýŸ[÷Ç,. û$QºîÓðãOÚôŸõë‰þ4óç.ú}(ú°w8+ؼ­€¾‰™T.{¶£³‹›òòöõ ‹ÜŸ”’!?˜WPTZQ]‘µwtõœ„ÌΞ»pqxäÊþ]ŒþÕíÇgF-â\èßÄè`ôÿü F¿©¾ºÐÏ‘úûöF„ùûH=E|”&ËÊÜ„id›‡Ð×f µSE_ƒÚ·%ô_ÂS²bÍþJÂþº :À¾á6¦©°Ïæòø‘DêûaОH¸/S2à¼,*«¬ih¢™@ì_ö)%Èe9¥Âþ³O„f +-³OK¸ Äþ•‘aLHf¿µد,+Dä©É ûb¢ÂBý}½½ŠŠibfiͲs`s]Ý…"O¯Ý€~hxT̾„äÔ yΡÃÅe•ÕuÍ­Gú}ý8±áËýñ‰[ý{ý©DÿñÜè_ƒ¤Ð‡<Û?jj¨©,-ÊÏ‘g¤à8ƒü}¥‘€Ïã"ô-L}¨[:&F%þ2e”Ê$:Ã_ÒSÇ‚fÿMÌ>AtjöáÎ$PØûn±ÄÛ9#ƒ²‘•[PTVUÛ€˜€ó²ÿ̺._:ûßÞ'#wûÖž9@dhpàLܗǶ67Ö×T•—@ÙÈÊLÛŸ(‹‰ +- H¤±ÐƒÏsâ%pgš¢ºo ¿™ªûZ ÌÉ̺¯¡`ÿ×Kì#ö`öq¢Ääþcùþ?Àè?XBŸŽ‡ ¯1[ч”Z¸èCׂ­32~ßÔÜÒ’â8ñøB±D +-Y…†GÇÊ÷§eBç*,)¯ª©GèÿøDoìßàä…пý%ìþ·ÓÑübèOaô'©@)ôÏ <»Qž 5UeEù¹Y€¾,Åéë- Üx\¶=I¶ŽB_sõ;°qý7gEQù‹yjXQ¤¨ÀÍŠ‡&AÝÍútŽíö'7¡x—÷ÁaQÀ~j&°_\^L´íìþSfîK¥Àþö|.ö+™ûŽfÿΗ„}Ä»3§Oõžèî<ÖÖÒÔP{¤¢¤0?7û@zJ’,6:bOp€ŸYâæâìȶ·µ±² ê¾Þ&ºîkάûÿg¿NŸ¢¼²0€ÑD§˜‰Š2”ŽÉˆ‚È"[š}miÁfiéYš}ß‘UöšAPP( ®”DDƲ¬Ä"5¦¢“15ÉL͹÷}{…V"p?tÿÏ9¿÷9¤*ïqÝ_&öÉDÑ—œç>ñó…âZ­è¿®è“æ‹}ÈHýOöEÿSm]Šž‘©¹•5Åtrvõðòñ +-‹Œ9•˜’–™SP\ZQ][ßØ ËwñJl_ÿ N‹@ÿ!}¡¸È \8ú¯$¡ÿÅèðÐlß5Œ~ÃÙꊒ¼,@?6 +-âdÚÛÒ­ÌM0ú&T-„¾Üv@ÿÏ°n<ôׯ¡¿ÔO0‘ä4’TRÈ`)ää +-ŠûU€} +-اё®lŽ_PXTlBJ:°LÔ5Àäu’ìß!ÙGc7óxÑìÿ[œ}ìÈÌ7Óˆ}’‘Ûƒ}½Ý]¨n´67%•¥Å¹Y駓`ø‚|9l7ÓacM³056 Ñ=uØGuÿãÝ»vÊ¿±î¿§î¿]öÓÆ>>à°û¿äCT¸. ýô•†¾óßPôåwîÚý ô,%”‘¦Ö!Ý#TCc3 šµ ÃÉrqcs|‚aïâ“N§gå—UBRMýKW»º{ûoY!ô§QéýF Ðÿí÷£ÿ£ÿð+"ÐÑ;ú—;ÛZý3%E€~Jì]‡íŠâ¤ÓÌM ©- 5•ýŠ +-(My9¦ &}©5ô—ò‰X!D…@ +-Y’ý½ŠÊ*Ꚙ}S Ú±ã'œÝØph†EÅ%¦`&*1ûíÀ~wïM`O9xˆ}þÜ-”ýßÞÀ>¦dbüîô›½È’Îös-˜ý2na^vFjrBlTxH Ÿ·§;xâ`gK?jifb¨¯wXG[󠚊²Ò>\÷wγî¯cùó³ÿX„}ûóEм†þº…}%eHH[ç°ž¾¡‰™åQº­#„äîéí—œš‘WÈ%Ðo9‹A¡ÍŸÀIñÐ:ú¿.ýÇýbè··67ÔAÝ*ÊËNOIˆ‹ô½Ù®Î'Žƒ¦E ¯®¢L¤ èË +-…If)%Võ—;Æ•÷D­ ©bËVÙˆ}˜C%eUuMm]Ò †ƒ“³›§·0 `âéŒì|è5uÍ0}W qܼ…ØŸxkìÿ:ûpd>žy4ýðk’ý183±&0}ÀIC]MUyIQ~NfZJb\tDh¿—‡«³“#bmenjd@¥èÂÁ©®ŠTáÕý³êþÆÿƒº¿tìwHdŸ—¨À}ò‘æ“A=•ˆ~Ç +-FÿÍE㬢¿ý¡èC<ªêŸÒ¥P ŒLÍ­¬!!¦“³«‡—PhD4T­´Ìœü¢’òªšº”´­ë(¦¡áQú_?œ~›÷ÖÑÿ@ +-׃û°x(ª[Ý]ýƺšÊÒbœ' ìïÍvÃèqêjkbô÷`ôwÈnÝ"„¾´ Ë5ô—òÍÍþ’}™?}´e›,@7'fÿ Á>T†£“‹›§O@p8b"#NͪšúF( öocöÿrìÿWœý_(0{0|ˆý'˜}ÄÉý{S“_Ž‚'ý7 t\¹Øq°¾¶º¢´¸ 7 ‘àËa»¹°˜ :ÍÂÌØ +-¬h êþîyÕý÷Òýåc»ÿ3rÉ~Fßfbõ¢/Ùü×ýE›¶}M-H‡jhlfA£Û0˜,76Ç7 8,2æTÒéô¬Ü‚âÒŠêÚúÆæÖó°t×{nôCH£c_NNÝ»Rš†”`ïžý€ÌÇ}ë_p‰¡/yóæþ=ý[ý+íç0úeÅù9€~tx°¿§›‹“ãØQK3ýƒªÊJhÓvAš}ý s¢¿ìI®È'bQEÖóØG)Äþ>¥ªÈ =c3Kk;G–‹»—f")Øç’ìwØç±ÿˆÏþ Ô Ë>?Ä> +-š?`‰2Øß×xéB[ks˜RYÆ-ÌËÎHMŠ +- ôóötVílaÍMŒôõ(:Úó©ûH¾ûs±¿ÜóùnÙŸ&ØöüGAÝ'àGÿ¼¢ÿãs2£éU…¾ÐPˆ Oš¿ž0_RÑßK}mŠž¾‘‰¹åÑc¶vŽŽ»§·_`HxTl<ì[v^!·¬jjnm»péjWwO_ÿ Ž¡ÿà+þ§2""Gÿ {7oôoè_l?×ÒX_SUV\è'Š ðñtwqrdØúÆGt!NÕJûxèoÛòìýõkè¿«'˜ÎuÂìÃTâ5dÛv9Ä>ܤÀ>Üœ0‰¬“î˜ è©™À~yUm}Áþçˆý`jñìÿgûäòÙLj͑áÁ¾Þn@šGKSC]MUyIQ~NfjrB\tDh¿—‡«³Óþ¸µ•…©±†‘W÷ˆºÿ—Yuÿ~Ýÿƒäº¿Ì#úîÙÇ=ò9Q$!U ?"™Oï±U†¾$óq¼¢ÿ¤¢¯À/úºG¨ƦVÖ6Çí™Nή^>þA¡Ñq Éi™9ùE%åU5u °oíô¬Áá‘»_LüýxåDî1bé‰þË|ôñп;ÂC¿ƒDŸ è§&á<}¼Ü]XŽv°i€¾ç>…¿aô·èÿq3?L²Q­¡¿ôO„ +-4›¤2 +-9yä„‚â~5 ¸;õ M0ûLb"04"&>953·[^]ûYS Ü›H‰~qö‰üi±ì¿°#øýwßÅ©21>6:<4€X¹v¹¹ÒP_[]QZ\›•–’x*&2,8À—Ãvsap`ØÒi–f&†úz‡qÝWQ_ö̪û™‰º/-Z÷ß3÷—˜ý^qögøìî#ø1ùØ|>ú3âè÷®dôç4_¨èKEÿCœÇœE_YýÃzú†&f–4º-ÃáËÅÍñ ‹Œ9•˜’ž•[P\ZQ][߀Âé¼| ”‡†GÇÆ'P¯.!ûüsóÙS’}ìÊÔ$°gèVÿžëhÛZ›ëÏž©,ãæ-Iñ±Qá!~Þžî'í€+sS#*꾆ºêIu3®ûuÿýtéÙº3ÊcŸ¸ß¾ì?XÀ}?&ÿÅO(¾É˜ú(›þëÍ'Ð߈‹þfIEÿ€ª:4+] +-ÕÀÈÔÜ +-R±str>éîéíŸt:#;¯[Vyæl}csk[ÇÅ+]×{`Ù ›±ñÉ)ápx§ØK8Ö ý~tºaô?«­.çúÉ€~h /òdÚÛÒ}C*EGKCMe¿"}Yô¥a®Uýwñæfƒ€ý-[ewìïUDE„`ß‚FGL¸zpü‚B#cý,Ì>VâÁþà푱·Ë>o +-EØ'ë$ÄIÜ'ûûzº»®^ºÐvfñlMUyIQ>ÜÉ qÑ¡Aþ>^P÷™ö kš…™±!££¥yPmκÝß´I¸î·¨Ôje’”…¬“ˆÔ÷±ü >êùDÑþ"O®Vô¥¤ˆ„Šþ¦MØü9‹¾ÚAM-ÿ±_çOUgǧKœ¨)3Ú(HJ]Q£¸ÇÑ:Œ *Šì ˆ‚‚€ì‹€€€ìû¾oBAQd'  b&jE” K„8±bê¤>Ïûžsî¹— © K)ç‡ûÜçy>ç{`";vîSÓÔÖƒÐ?qÒÂÊÖá´«»ç9¿ Ðˆè¸Ä”ôóËÍ/,†K«¨®­‡SÃï°{xkì‡ØôñÜþ»{ûuXô‹>” èûúÎ6–f'Œ} Uýu +-Ì8 ús¹iN¡?¢ìKQöa3ÿ²x©üJ`ãf(`Bå†ÎaC#sK[Gg7Oÿàð¨¸$aöoµ`0ì÷ŒÀþ¯ïÃ>¸¸ôõö<ïê|ÚÁ²ßrëFCý·Õ•e¥%Å…/dg¦§&ÅÇÀ—§¿—ÇgG;ëSfûGëh©:°Oy×7JŠÛ¶nÞ„¹ÿ%—û²üÜÿŒÍ}ÆýéÓý1d' +-ì÷ö©û(?þ¢ùý^‚~Gûÿú#˜?g>™Ã¡¿ ÎKQé›]ÊûR×Ò…‰@蟲¶st>ãá埔š‘™ S).)űÔ7À¡±èw<íìzÎÌ…|„úwZ ¯ú—È@ýð`ÿsžnζ–f&F8OU•½»ýÍ×)¬‚¦"èKô¥ôgL¡?`UÙÏQeÖsÎÜÏý/äö× û šÀ¾±‰¹•­£ °Í°_$Ê>ùêÄ]xö¹MüåÍ ¬â+šû”`Ÿòr·ñÖ͆ku5Uå¥ðåy1/'+#59!62À×û¬›‹“½ 澑¡>¤ˆÚÁý{wïܱœ’û2˜ûŒû$÷?åçþt†ý‰äþ(²¹¬²šcŸ¾È /}Œû?}^2æ÷±S¡/cŠ>¼‹/OJôÅš?5ŸEÿS.ô‰ùóæË }Æö;wïÝPMC[OßЈ„¾½“‹ÛYo¿Àð¨Ø„ä´Œ¬œ¼˜IiyUM Ïìî}ú2æÐIBÐ|ó‹è©‰¿5Þ©½ý{xf,úEý$‚¾ ïhkinbdxXGã +-™çV@ͪ•òTr0ÎyŸÏÃG_òÌ5M¡?v¸¨(Ȇûóö—¯\½fý&Âþž}Ⱦ¾¡±©¹•£‹;°‚ì§Ï¦ìWá—'ÃþãØû»Ègÿ”}ÜÆ>R•OŸ0ì£0×ëj«*®^¾TTŸ Æ$'ÆEG„úótw=MrßÄø¨ÁaMuUÌý¯¡GÄä>.(²OÄ™ÉËý‰éþh²µØoà±UÙì1?Èâÿ<æ#úÝü/0I ™Œèk¾ß|˜EÌú_c諨ªCS9jlbÆ…¾PhDt\b +- $7¿NìjEUmÝõƦæÛ úxeðÖGÏìïÌ} ú¯è÷<Ç+ƒ~6 4.º +-Ðwq´µ2716Ô×Ñdæ è¯ô— ¡ÿÇφ ?m +-ý±{„¥àAA"NÈö—Qö ¥À¾š¦®þQ¾“‹»a?ž°; "Ì~çh±?ÐOŒù±óéƘÖføø¬¯­®(»RR\˜!;3=%)>&2Lû–æ¦Çêëji"¹¯$”ûËØÜ—æåþl’û|÷%$ôL ÷Ç„ý;û?>ïî¡îüôé§æ÷0èß™Ôè1ÿ÷ó§óÌÇÿŸúÒâC_‰„>LBWßðØqSsKú¾Áa‘1ñI©é™U…Å%Wðë .¬©¹•y“Ã÷pÿ¡Ï\Ùpè?æЯ¯­*ô úñÑá!>^î.ŽvVæ¦ úûöô7­_³šC>†ÞÓ,Á49ô§Ô³G,ûŸˆ²/û…lèr† Edÿ š°ÜÔØwug”HNËDöKû 7nQ$†°ÿŠ²Ï[Èá÷ñßCÙ‡…|-`ÿ…HZ¶ÂR35•å¥%àL^NVFjrBlTx“û¶V'O@îëéhªAîïáçþ*&÷å˜Üt¨û³ˆû”}I6÷'–ûcÀ>L_ähZR÷~Åñ5Ÿ~|Ñ.¼}kò¢ÿ›æSôÑüYÔ|üÿièË ‡þú{ ôÕ4uô ôOZXÙ:œvu÷<盜–‘•“‡Ã(-¯¬!Óhôïó?¾^Ð-zc¿Ž|cÿ½18±Ñ/%ègruwq²³²05>ª¯«©èïTRdæ¹|ÙD_†ŒSŠ§Ð4§ÐÛç7ØG'æûÈÄ2dbe_y?²o€ì[û D`HD a?O”ý6ûý¸“”ýÁwaH‡öÁ}d—²«óYGûã¶÷ïâZÞl¼V{yõ2,f~.P“’äïãåqÆÙÑÎú”äþ‘Øûö+‹Ï}XSd‡É}\ՙ¹ÏdÊÄq”ØÏaÿîý0ÒŽg$÷Á}€Ÿ>}`> ýgO˜Y¡Ÿ;©Ðoþ4Ö|AèÏÄ¿ž }0þþaB†1uCÿ”µ£ó/ÿ Ðˆè¸Ä”t˜D~AÑ%EUmݵFÁ,Úa]ô¾~óèÿó}. Ð亊A¿“Eÿ6DA¿¤¨ ÐOfÑwu²³¶0=~Ô@WKí ú0OYQô?™BüñìÏ°?—ϾÂÚ _mù«âŽ]À¾:°ìøI kûwdŸlå{²ÿ–²O¿?q-‘ý¾žnÚ— 5ÍM#ÕeWJŠ ó!HÒS“âc"Â|½Ïº¹8ÙÛ`îèiór+?÷aî/ ¹Ï¸?{6Éý‰ìþh°ŸÊc¿û’Rƒ}Iráïúáȧ¡ß]Ü ¸¡ž‡~ê¤AŸ7êßh>þï³9ó!ô`è/â‡þV^èkëÀзwrq;ëícÈÈ̾p±°¸äJYEumýõMÍä¶ðŒƒèîéCô_’ë¢çõ†œ×ÇC¿í‡{ß‹A?&"$ŠèŸdÐ߯LÐÿjÃZ…/W°èÏûÓ\nœSèó#$…„(ûR„}iʾüŠU +-ë€ýmÛ‘}Uu-=dŸ*áí“œž™“WP<ºìÓ½dsØïí&›ÙþzäûïZ[š`7¿­©„ånòr²2Ò’b£ÂCýÎyº»ž&¹obLr_]4÷W“Ü_¼è‘•A÷‘}âþ,Î}IÆ} a÷ùŒã,?"ûq|öÉD[Zý>¢¹ß…ðƒü(>ßECÆè·¶"øèÇMô‡7_‚1ѧæÏ"æ#úh¾Œ,üó “Ð_Í}e}è(€±‰ }WwÏs~!áQ± Éiç³à¬` +-¥å•5ðÑu£©¥õ;¸¬‡ÚÉiu÷úìmñŽkÔÐ/æÐ ôõôíýczZê€þ®Û·m¡èËSô¥…ПÁ¢/1…þø<"±{+ɱ ;Ù_ì/^JØßÈ°¯¢ª®­G”°±?}ÆÃÛ/04R”ý›•}‘ÍäØï'ìwubd>|@½¹Ùx­®¦ªüêåKEù NzJ"äïãåArßÒÜr_hî¯U€Ü—_ºdÑB¹?Ë.€uesŸ¬,ºOs_’Íý äþGc߉²ΰŸÏ²ó¦í1€ó¬“ÀO$¿¾¸Ú·qïÞë,úù úá}§ÿeôG4:kþ 4Ÿüå\èKËÀÉ-\´d©<„¾ÂÚaBßÜÒ†„¾—P(¼xSÒ3aE—`Uµu×oÒw/ýäêì"è÷‹CŸžÖ¡=õL,ú9™éÉ ,úä-Žèk««rè¯SXµB~)})ú’,úÓ¦ÐG +-\]¤S°R€ ¹…ÀþJd3a¯Šªaßl(û…£Îþ›Áׯì“$é"Ù†ìß¹ÝÜÔHÈ)»RR\xñBvfFjR|LdXp€/É}[+Ìýÿ°_çOQ]iÇ«’)MR–„ 64Ѐ, +-n8Qƒà‚ŠK‚Q£Á˜d’ŠQǵ\K‰I`$ÊHÄq EPeWÙ7;-X‰3U£èdÆÔ<ï9·oßÛ4‹°¸?Ü?àœ÷|Î÷,ü`nËýI>Þã‘ûžä¾+ôq`¹¯´P ¤ÜÜ7áî¿"¸ß«ë¹ÿÌØ? öiGÁ~îõ"¹_][Kð«§&òkk««øÅ[p=—¡OoüÉçý¶Ìï%˜ÿ +-7ßD4k®°P²ÐwÀ²»’ùžýñÞ>“d¡¿dÙŠÕ<ôƒCBwïùû÷ÇÄÇ‘:{ž]¼×²sóo0ôÙ{KÕˆþƒM; +-ý†¶Ðݵcû–ëVÿe)ÛPBßO@G_eMûÙÿÍ~f8@ÆÑïQ¿>CöE'8Œýzö]Áþh¦±?÷ƒ@bÅêu›¶lßIìGF6Îþ-z‰JÙÐìÓ|û ÚÛ> ¼4ÎÕ+©)’Î!51¤Ñ÷ïÛöÍ×,÷×­YÉrÿ£f¹?jÄ0wÊ}G–ûD9¹ö™û}ip»°ûÏ„ýÄ>ßÑ4:7K‘šè}À_w _ÈGçWV”•ÞÔ]»iœBÿÀó~só_hÁ|,6?=¯¿NÙ4¡g¡ïH¡ï>lÄ(yèÏCèB¡¿rͺ<ôÃÂ÷îÛ0úȱxlKº’š~U|mU²3¥¹­m ôïáPuúžýM ý?3ôgM÷›äCè6Ôu°¡¯Ô£oÒW²=èwîg”ý—ôì¿.aOSWw‘}ý/–®X³nÓVb?\Ï>•I3öäì?4œOããù›Œ}Ї¼Jt¹öiDÕu5Õ•œý¼œ¬kép'9ñì™Ó€'æPTdÄwc¹¿eÓz–ûŸóÜŸc,÷ìíT6VJKÜsŸ$êÒî?cöSÒÒ¯eå;Å%¥åä~uM èǯšÌ//-)?å9C¿æ÷–™/†>ÌWX*­lTvöN-„þB„þç,ô×oÚòׯ(ô¿‹ˆŒ:ƒµ?}ælb2î\¾øtç–WV×Ö©Ù‰j¼« }œ©&Ý™zÒCÅÏ”QôË Ð?yìÈá¨HB'C¡HJècCGËÑ@Ñd*ì§l;{ÐOmöÁ„9cC;ÄÕ}¸À>”˜» ðc=û!û„Dbò¥T‘ýò`ÿ±”}þÕÍèÏ4¤ÚzúVmuUEY‰.7¯\¾tá<õÔñØ#‡aËýÛ·²Ü_Þ<÷lj¹…ìmUÖVJ Å@Ê}Á}ûœ}÷_èt÷ŸŠ}?ûö#¾?p˜³^—›Èý¢›%¥e€¿²Š}• ¿¬´äfV>­t<´Îsô±ðúdèûu'ô[0ÿE™ù„¾`¾‰h>ÖZa¡´²VÙÚ;`¹ÅÐ' ý(ô—óÐß¾ãëoú¸o‰=~Š­<J÷Ð*)«¨ª®½¥ÖÔké<éпÏÐ$E¿•ÐoýŸuè׶ˆ~8¡¿uÓº5+–~! ï/¢ïî:ÄÉ£oÎöSþK=èw¯}ìcr­möG1ö'ëÙ_¶bÍú¶Ø¯Õ±ÏÞ£-±ßÆkTò•¦ Æ´ñŽö¶†¿H…Üçø\LJLˆ?}âØÑèƒû)÷¿Ýµ“åþZYîÏòŸÆr¬Ï}7—ÁNŽƒìlm¬• ÈœÜïg&ºß§˜û]ÍýeØcìÓûíÌYà“z%#3;¹ä„ûeååøÊËËÈüâB,{nvfÆ•T\·gÏ0"}\¶_mëÆè·Û|¬1¹/7߬™`²TZÛØÚ rtìâÆCßk, ýiþ³d¡¿–‡þ®oqÙFî?}ô؉Óñ ‰xeñë¯,œ¥ +-ÖPšÛÚ;ôùqú½çÉ8úÕ•-¢¢GÿãÀstO·Ñ#‡3ôí{ÐïÒŸtš…A&ö_~Yd¢ßýÁ>)aï *áí ög3ö?Ø"ö#"coÒ–ÙÿõiØž¤ ZLªº®†jáõ¼œ¬ki—/&3âbc!÷÷ìe¹¿™åþ—<÷ç ¹?¹ÿ6 1Ìc¨ëgŒ®ÊÆJi©€û<÷™û}[pÿÅ®à~³Lìӎ°ŸÌš3+ÑYPXøKJÙWò‹ +- ðÄ¢EÇ‹w-Ð$ôƒ»3ú­˜ÏÑ7b¾ú0_a©´²QÙ!˜œ‡¸õ@èÿñOo#ô' +-¡?Ÿ‡þ—,ô7o¥Ðݽ¡(&6ŽÝµÉ/§Ñ¢ç]ÇUK'©¦NÍŽÐgæ? ú¿¶…~a«è/Ó£?™¡?ŠÐwv°·ú +-sÙ~â¼Ûù‡ô;ý3Œýv±ï5N`Þ‚EÄþJý0‘ý„D2âj&Ø/4Îþ})ûmw¯+ᚥÐ/(Â!ª¨ª©£S¤½ÓxWDÿ>Cÿ‘´ŸþÛÆAzlÐOôo7B?HDÑ‚yúã¼ÚB¿wú]èkξŒ Ó×Ìd컸yŒÐ³?‡±¿„ØßlÈ~ÒEcì7°ÿ¨ýì?–³/>LùË´±A‹§©º®†M,å~Nº|éÂy -ÂÔ"÷ÃÃ(÷·Qî¯sÞœ÷f͘æ7ÙwÂ;ã„ÜŠ·ª“ƒ½ÊÆJi©ÈÝ7cßKî~§ÿS³ÿ¾”ý `ìè^ý~{B`¥é‚ %ô7oX»jywCßù­˜ßGg>}2ßBie­²µwÀòº¸Áü‘žc¼ÆŽ÷ö™4eªÿÌwæÎ_¸øS!ô7RèSèÓ» +-+}ât|¢)%5ýjfv.C¿¬¢ +-H­©×òpºGå$G_úíG¿I‡þ=ô‹Û@ CŽý†è›á ÙÏô»Æg”}Œ4š”²÷ê`—¡#<ûSÚÍ~±1öÿÕŒýö¼MeS1Thhï6ÜÑÖÓÔÖTU UŠþÇ~>Eu¥q¯šÑ$šµtRq4ì‚È"‚¬"k³C³É¾4 BEÀIÔ8*„€ÑR´E.ˆlƒ¢ÑX–¥1 A1¸Ä%“ròfjj~çܾMß涂mª8/ú8ý<Ÿû=W¯\FîC£æÆ‚ +-´äÐ6÷·²¹Ÿ+Š I>^î®'ûå¶Ël¬,–˜šè/Ð¥î÷iî³îOÃ@3î¿ÃuÒvÿÕ°ŸÀ²¿ýÃRŒûÍ­èýöÎÎó]]pººÎwv¶£ó[qÍõÒÏëa ¯ëý„q…¾²ÌW0ÿ™ùtKf0æãbçâf54µ±,úFÆ&¦K,¬l–Ù.·w¸º{!ôƒBÂ#E±ñ‰lèo%¡GÕþ‡JðªÂêœÂ5ãëŠÐ¿|åê5MÝ=½t}Iè3èK»é,ÐÈÑÿï0ôç ›ý +-9ô73èÇ1è{rЧ(6僿Sôߣi4¾JåìS%¦ÏdØŸ§¦¡Åa_öýeìgŒ€ýÛ”ýdl™Tác_ÉÐrÙWH:¶ÈÜôßîíÁàÊr¿ã\"ÕTWÀ#ä~¡|ˆaRtDrß×ÛÓÝÅÙѹomin÷ êëéêhkR÷ç°îÏwŠŠ¹ÿ*Ø1ì“”°_´•UTÕÐÜ'î·þŽŽŽÎNü€ü6b> ýš*"Ä}E}Á /?èØü)ræO—™?æ«QóõôÂ|3sKk„¾½£³‹»§·/B?,"ßUqJª|è"ôñm­ ßV<©ÚÎuÈBŸìNïíþº<}üäéúÌúŒz†Ðÿ÷o¿‘hz0ýŽç¢!‡¾•¹©‰‘Á]-ú‡²èÓ?ë1¾ +-®“øØg”g©­ãóد`ÙïPÂ>ÜÑ°ÿ?öÿøÏ32¸lîß¿7xw€Žn÷7oHs¿³ý,L:ÍŸû™ÈýäÄø8Qr?ÐOèåá&pr°ƒûVpñ"#è¤7_GKSC ó<äþt™ûS¹îO~ãî¿2ö™JÙ—”­údwž‘Іþs–‡ý§,úRôÑKWÐ/æCßßÇÓMÀE_Cþ¡Ø¡?¡þ›>Š±ÿ|öñl51%ûW,L±á•gÿóF1û +-“;ôH}Âäþ Š¥¿¯·§ÉrýrÿÛ ç1¿-M õ'Hî—Érr?¹Ÿ–š’”°26:2,dE€¯§»«ÀÑ~¹í2+‹%¦p߀¸¯­¥©®†ÇëXÝÃ>6ö½Xö“ûYHÑœÜ|¶DIîÃý†3MÍ--­8--ÍMg`> }ék*?7·›EÐObÑ÷Ryô9”¢ù“Gbþ\j¾ö|Ü©Ì7]bae³Ìv¹½£ÀÕÝÓÇ7`EHXdt,î6%5 ¡ŸÛÝ%ú5u'êšZ°4ç/ÐпNj©§·¯¹4HBŸ]L£+&Îê°ÁÄ¢?HÐï•¡Q†~5ý .úŽvè#Eôgó¡?Iºè«ÊQÂþ”)%æÈØ7æ²:œýbû)û$ZXög_:¼£™]¶Xèô>}BÙÇCu ŸÎ/rOÕï.]ìêlokm>súäq£C¹¿¹¿1szT¼*.&*"48Ð_èíéæâìhÜ·¶„û&ÆFú tᾆºÚ<ÆýÙ³¨ûïs_ +-¿¢û¯9øÇÎ~h¤(Ž°ŸŽL»IŒ$1ZYMÜ?YøÏ4Òsäן$æWÓ»=Hîv7>©xI¥ôãD‘¡ãýQ›O.ò}jþ¬ÙŒùóÔÔ5¨ùú†Æ&0ßÒ¡oïèìâæé-ô ˆŠ‰[%Æ;j]æF„þvùЯ¤¡¦¹µ­½³ë"EŸì i¥þ»} ÿøÉÓ!ô‰ù£CŸîÍ0ô²è÷tӡ蟕G¯Rôm¾Ð×1ú@_µÎK°oÁ²/T`ØßKÙ¯fØ?ûg±Ïæ>_6÷ïßdÞªa’ûWñZEîŸýWK#'÷‹ +-òˆM[²7mÈHK]”+Š  +-ðzy¸ œì¨ûæf‹MŒ ôõtu´55ÜgrŸuÿo¬ûSøÜç þ×õwŽ™ýÕkÓ×›vîÞSP´ï@±äHq¿¶🪯?S_ +-ä×ÕóËŽHŠì+*س{'ùž®Oã}ò9æSòyÍgBŸ˜ÿ‘º†¦¶Ž®žþB˜¿ØÌœšoçà$póðú…„GŠbã“V§¦elØ”½…|Oó +-Šhè—IC¿±ûrþ·—¯\½†ÐÇÆÜBèceîÝgC_¶4ò[óêÐÇÂ\ľ´rÐÏ{.úÆ2ôçpþP¬Äú*|øØ[ûz/b?e¿–°ßŠ1ûWYöûùØW|ªŽŠ}äþïìc•ÎðÝ;ý}½=x®åþ¹á¹ŸŸ›ž>ß¼1Qš"NX¼"À×ÇÓÝUàd¿Üv™•Ü_dd¸PÞýyÝŸ:r÷ÿì±#ûB°!"ÿèšôõ›²Áþ—yù…_ÓÜ/‡ûÇj¾©ƒüô¯«û¦æÌ/§¡ÿua~Þ—¸ÕìMëÓ×"D@_¨Úè+Í|Eó§È™ÿžœùÎaÍŸOÌ7Zó-¬l–Ù.·w¸º{úø¬‹ˆŽY™ NÁ*sãæÏq«9¹ùò¡R1ôøég²/wîÒ…ù•ÝúC+3"ôe;#_Jdc°0¤“úÑoúµ@_ƒ~¨úèß3œý·øØŸ; +-ö%„ý㧚(û—/2öñ^ež«œ×꨺…a2Ä„}:ÄÌ#÷ïbŒûnýŒ9æÍýr’û´Jwýó‹-ÙY2Ö­Yœ£¢ÂCƒý…Þžî.ÎŽR÷—˜R÷èÍ×ÑÒÔPƒûsøÜ—ÇýIoÈý—dßZ}ñê5ë2Q¥_ìÈÉÅ ¹¸¤´ìhE௩¥§äWU-+-9ŒÐßû՞ܜ¸ÒM™¸Q±úÖ*‰þ(ÌŸÊ5¦œùjšZ0ÁB˜oºDj¾£³‹»§·Ð?084< +-š˜ŒÍØ…+Eè“ ýrÞпICÿö²-ÒJâîËË-Œü¾HÑ¿+C»r‰A¿áÔqEôÓ‡ÐrÑ×S†þÛè«ôQdò0ögÍþàÅì§ó³ßΰ²ßDzÿhììsÚE–û¤^hîwÿôÃ÷Êrÿàþ½…ù¹ÓmŸoF™¦¥¦$%ÄÇŠ"ÃC‚ü„^n.ÎvŸ|¼ÔÚ+â¾:ÜÿëþL©ûÓFäþ냬ìûÑTœö¦Û`T^rîKŽ ø+*+«ªª««ª*++ùG$0¡_‡ïè6ò|Z·&EL‰òWeôùÈÿ‹Œ|Eóßå5W¨¦NÌ×%æ›À|Kë¥bçàìâæá%ô  +- ÅÆ'$¥¤¦áõ„ûÄó)7¿p/}>­’…þ9YèOC¿†þ=Yèc[ž=“…þ˜ÑÄ¢ßGѿΠß.C¿TR¼_Š~Ö ÑŸË‡þ[è«òQ`‚O û†JÙÏ’²¿¿XRÊaÿ;)û·†Ø,ä±³?”/hîÿB†æþ 6÷Û9¹/A›}µg7ÚtëgYpjí§ÉâU+c¢#‚Wøúxy¸ +-œ¤î››Á}C}¸¯=÷'ËÜÝÁ?föÉ?/†ShÓ϶nßIr¿ˆ¸HRr¤´¬¼ü(NyyYé‘É!b~ ýÛq™2ð ÇÇ2D¨.ú/ÌüáæOcÌŸ¡h¾6Ì×7ÀV˜š™KÍw¸zxùø¬‹ˆŽY¹JœüéÿÙ¯ó§¦Ï<€ã3»¶Ó¶^Õ®³3ênµeÛµ­Š¶Ô“¢(J¹@Â}ßW¸ï„!nä’Ë£­xt­ÚŽÕvG»^ ¢v;Ý]wtº?ìÎ~žçûýæ"„p¨Øáùáû<ßçózÞOÜ¡°™ðvÃfÂÛ©É(ôÏR¡ÿ-ÌÉßnÞºƒ2BŸDŸ,¤¹£ MÊ@úÍÉw0&¹ô¥)ú2@Ÿoúk^_= ýÑ_Èk:öW²oƒØ·Ýn·Ó<û|`_†Ùo'Ù…ÙG s% <[õ‡™8ËGÙª“Le£€Áîû(÷ïܾ‰sÿªiî÷uwµ·jU8OE§ÅEù@;91.&2,$ÈŸÉðöòpsq>t`¿ƒýž];À}Û™»ÿ¢9÷ŸüsgŸìÇU§EÅ%¡¨JŠÜoP©5MZm3,­¶©Q£V5 ó¥h'K`'s2áôY }£ß`½ùË;-eþÛÈü-¶`þŽ]{ìö8äìâæáåÍ`ú…„EÂF&³á…äㄇ“ªQÛj.ôÑ|C|B?&:ô‘ùú@²jTt}ôè‘>PaôÑè’è··4©ú3B…¹ú´^n‹kÆËðøë•xi–ìW öUÀ~fÿ³Ñ³_û_°?aÄþ£°?Eî?"†Ìý{è@£Ü¿¹Å4÷{t¶µ4i”ŠZ¹*·0´JMJˆŽ dù1èžnŸv"Ý·÷·l~oÓŸÞFî¿è¾>ø—èàªîω}üGY!áQ±ˆýì¼B.r_ŒÜ¯UÔ7(U*µZ£Q«U*eC½¢™/†mäÃ6f#ôc£ÂC0ú°… }säÿJGþò§3ÿo¾æoÂæ`Gšï[èáIgø±ƒÃ"¢c’Ráö„m$_Mµ +-¥¦©¥­óH¯¹Ð¿n.ô©)±:ôÿ7iLŒÑÿÁ}£/¿8; +-óèwY¾Uè/¦þ]S³ÿ²1ûë¿áÍ°ßsthäfÿ¢žý;˜ýLØÿÙ b¬¸RìS¹O²W2÷¯MÊý!”û­Íꆺ™D,,+)æäfgXñ1Qá¡Á,_º§»+¸ï¸ïcìþÛl·¼ÝËÔýU:÷_5ãþäà7Í'ú?gÃ>ú£4:É~B2;#+·€¹Ü—Èþ:…¢/…¢È—Iù¼‡Yìä}: ±àП&ógeþû[l·aó÷~¼ÏÌwu§Ñ}|YÁ¡áQ1ñpufdã=,Š«d5u êÆæÖúCæB ÈøÝ{ä„#‚Cè‰aQèß›À‚чñ¸H ?2ØßC _cŠ>Ëjô_ZDÿ9YÆJ,1e¹žý?˜eŸeÊ~ ^4wWçCÁý½»wNëþ +-÷1üÜ +-ðÏ}ûÄ¥ÑÌ€à°È˜ø¤ÔtÔ©r_TY%•ÉåÕ5xUËå2iU¥™Ïã ÷RzjR|LdXp“A ¿Ï^‡¾Í@ß,ùæ¿``þoHó_Å毀X¥7˜¿AgþV0ÿ£»‘ù9ƒù^Þ¾Lÿ ðȘ¸ÄdvzVN~—/(UJ«kë•mK; +-ýÁác'!ôÏ‘¡… ýÛcPE÷îS¡OÈc< ú ™úº.ú;‰þ-Œþý3zôú•09™l‹è¯7FÿåEôŸ«5/ìÇ'³3s +-8|AE%f¿Ù€ýó¿ö¿E5£cÿÇŸ RÆjö§È}ľaîOL•û'F†úzº:Úš›ÔJE\RYQVªc+!.:2,$ПÉðö¢¹¹èÜÿÜߊܹ¿Á¬ûËûºà'Ü‘tßRð?‘˜ûvFì…FDÇ%¦ Ü¶Àý2a…H\Y%‘HaI$U•bQ…° ÌÇ—f;%1.:"4È}»…‚¾É–O•ù”ùˆüéÌgÓ»Øüõ滸yxy3˜þ!a‘ѱ I©iÄ¥YZV!–Èk ê¦æ¶Ž®ž¾¡‘&¡ +-ý‰û(ôþÛ¨Šf1TQèÿ¨CÿÆ÷סˆ.ýÕEŒSúÍ*>£O¢O³ˆþrSô—ÿÐùÿŸ‹k–eöá䯄c¿æwæÙ§aö#ŒÙWûmûŸžÒ±ÿ×kˆý±q2g¨ƒ=ìS›pÿ…Ü?>ñG]=¼|üP®Freçq‹ù¥‚²r_$‹áS!,/”ò‹¹E°s™ipcÆFÁCÉßÏÇËÕ bÁ ?“Ì'Í™¿l*óm°ù›·nÛŽÍ·wØÀ ™ïIgø±ƒC#¢bã“RÒ2`ç8Å%¡¸JV]%¤mmïìî=:8||rèß BÿAèãÙ˜ úÃfƒH"TD0ãc}4—a,Ο;sêSŒ~gF_jˆ~Ä"ú¿Üe}ŒÄÌØVJkJ`¿³ž²Çýsç/Àù&Ù¿=6~—|Å’X|´­=Ù:ö©œÑçþCãÜ›”ûgQîèï9ÒÙÖÒ¤QÖ×Ê¥•¢rxÐRÅÀòóAîrØ Ü·ßƒÜß¾mëf#÷×Qî¯ÍVb÷—êÜŸ&øŸ,üsaßÉ؇_ŠŠ5&>1™îçr¸<~I©@P†—@PZÂçq9…ù`~:;¶ ½’@@ßÙi¡oMæOiþJئÕ:ó×›1×lþa¸+=é>¾¬€àÐð(Ø6ê•Ä/-UJåµõJMSK[ç‘žþ¡c(ôÏN +-ý1ãÐhúú"²n4tèAæÿëŸ?èÃXÜ&чº€Ñ?><Ð×ÐW"ô…žýÀéÑ_¶ˆþsºæÌ~ Á~FN>‡‡Ø¯V(5ˆý¾Äþi‚ýo0û7QÔè›Fwºÿceîÿ×rîÿC—ûãúÜ¿Jåþ™QÈý‘Á£}Ý]­ÍêE\"®(+åq ós²`q1‘P­L_:ÍÝ•r—‰û ÜGÁÿ€åÈ}<‚ÿ×fÝŸßé˜ûÛívì¶wp„lu÷ôf0°ˆhÈýÂý‚Â".·˜ÇãÃâñŠ¹Ü¢ÂÂüýè¸*™ oOwg'GLijGß<ù“3Ÿ0‘O˜¿6ˆ4ÿuÒüufÌß¡7ßæ3à…—œšž™“WÈå•–Uˆ%òEƒº±¹µ£«»ïèà„þè*ô¯š }b*fúTékˆŒ!Š»071úßèŸÖ£¯Q*ª ôós2ØIV ¿ +-¡¿týçuÍûÑñIûb̾–bÿsxÎ^¸„9:ã˜}”5&ìÿl%ûfš†xÉ’Uc9÷OŸúìıáÁþÞîÎö­FU_W-« %Åœ‚¼ìÌ´Ô¤„¸h× &”«¡û; Üÿ#åþZp¿‘ûdðOrßbðÏç„Ì‚ý͘ý½Ž»¸Ñè ?Ò0ì~VNn’¿¨ˆÃˆŸ—›“E˜OÜ“þ~ :ÍÍåðAG‡½ýÍÏýiÉŸ2ó ó_CæÿvÞüzómuæ;æÃëˆéžGèžLMËÌÎ+à—À TɪëêUmK{ç‘ÞþaýS§­ ýÇ0ó‡>ž„>tÐw(ƒ.]øó¹ÓŸŸ$ÐoÕj”uÕR±°”B?£OŸ}ôGÑ.—‰ÿg¿ÎŸ¢>ïŽÏdÆøCÚ8FLÓjÛD"FT@‚\‚¨( ñ¹¯……–{aYŽu¹‘{–û>–û¾EQX¯¡I”0Z±Í4Ó‰™ô§vúyžï± ¬î.Š6ÏŸð|?Ÿ×÷ý(fÿw‹Ù?@±Ø÷¤Øç'¥"ö‹€ýºF)°ß?4:~ Ø¿ìߟAìÏìÿ@±ÿ31âj³OM¸lÄéÜÿÇóstx ¯§«½UÚX_SU^*‹òs²2Ò’ùñ<.'"48ÚÕÛÓÍâ»ÔÚêå¾®œû[±ûDðÀkëaÖÑîcø ÷_7üª³O~Q̾ÁcSsKkø¤v§ìÏ:£Ügb÷Ã"~n ‹Ãò#°ùLúÎgíOÙÖ–æ¦Æ 0ú;1ú|è¿|E™/3¼ù¿ÿŒ‘Aæú3ýצ®\ôûa¤úy}~—†Ð÷|yôWÕÿÿ>/˾É~‡K°ŸWPT‚Ùoëì!ØŸ‚¼‘±ÿøÉ;ÁÏáDEEÉŠâpù!ll>ùƒ2=˜¯Aš¿i36«óͱù'àÿæ;»ád ;4œÍ‹ã ’S32sòD…Å%å•Õu Í-mݽC#(ô§ˆÐ¿«  ôéuPcþ«häÐ'–áñ£¹Yý¯1úúmýò„~…~Fßaý·ü(d!¡*ûNˆý‚ýÄÔŒìZ¢žý„vÐSý}”?ÓP?F(ô«}B?‘ËDè3<Ýœú6«è¿ÕG~MHößU¾ž É>Ã/€Éå'¦ddå‰ÄÀ~mb¿op³Æý[` +-gþ)¢oèQW“ýçþÓE¹ëæõé©+aâúz:Û[¥õ5U¥qA~nÖù´”Äs ±1Q‘a!ì_†ˆæhZæ¾)åþ¾=Ú´ûŸPîãàß°áƒõ°~Â}ùàWþW°1곿{Žž¾¡ÑA3 +ëcÇ)ÑÀ}†/ÓŸò³ƒñaƒø,¦/›ïè€nèø1k+ ³ƒF†úz:{v¿ ôß¡Ròå2ÿ·(óaÆ7À|(3ÿ“-`þÍ»žg¾=º!/†/<ˆBÂ"£bbãÏ%¦¤ÏÊÍ/KJ+ªjꥭí°ú.N\™š¾~ó–Ú¡¯útùÿú‘@­Áìƒo!~ýëÓ“—aaÚšj}±(/+#…@ŸM£o‹ÿãJÐÇ_tý_éYÂþÙ·€4´µö]=L‚ýÄ~®H,Aì7·vtìON_§Ùÿ³ÿwrÜ—Éþ‚W­‚Üÿåþ߈܇‰‡·-tÎýñ1(Þîζ–憺šÊò’b±(?'+#-9ñ\|,7*",$(ÀÏ—A”ì"÷ —¸Û°yü54°ûŠ‚-éþ™û+ÿrØߧ§ŸÔÔÂ~å(÷Ï`÷=¼¼}|™~þþ,VËßßéëãíåÍ?ƒCÿèaK SB_oß›@_ ù Ì_« óa¾Á| ”ù¤ùËÌ×óõ˜_C _¿€ à°ˆ(nlþ¤JÑWýw^Ñ]=¯å,—}S‚ýSÀ¾b?42:6A’ž•+KÊ*)ö‡Ç.NL^…Ò!؈G2‡fGÎÂÆyU¹ÿå>¼naèoÓ¹?:<ØßÛÕÑ&mj¨­®,+)*æådf¤&'òãy\NDXpËÏ×{‰ûf Ü×ÒܱýSì>üà>rîäþ:ÚýÿJÁ¯œýõòìo×DìëîG´lGŽ·%Ýwqs÷ôòføøø’ÇLJáíåéîæBšo{üT¡9zí×Eèkn—GýJ£¯ùÏÍ|ôÜHdþ¦Íú36ûM-dþ>Åæ;¡—¯+(84‚ÃåÅóÉ©™9y¢’²ÊêÚ†&i[GWoÿàð(ú·aþg¾ù`îÑ+}b ¨À+€7ÂwÏ=4þW''.Ž èW–IÄB„¾ ‡Ðg1€þ)}Ð_³Šþ¯õ¨Íþn`ß@ƾ=fŸÅˆæ%’Ó3s……À~M}°ß;0<6ì_ƒ¹¿{ÿ¯ß|‡¦žz’ýgäÈ«Çþ’ÜÿEqîÏáÜŸ¹÷Ê}Âý‘¡¾ž®öVic}mUE™¤¨@˜—™žš,àÇñ¢9¡Á¤ûN‹Ý724ÐÇîïÞ¥µÜß&ï> +-þ 8ø×-~µá™õQ‹ý-Û¶kj}¦½Ww¿¡‘‰‘û_Ø!÷Ï:9»º¹{xxzzáãééááîæêìt™¯BßÌ.e¿î^íÏ´4·Ã}¼&ô—\˜Jä/Í|¸‰ ó!ó±ùŸ.0ß6ÿØqÒ|0ßÇΉæÅñI©é™Ù¹Â‚"IYEUm}£´µ½«§o`h„0…þ»÷gpèÏ)ý_†¾Šè£ Âç‰>d¨ˆxëÞºyíꕉq@‚§µ©¾Ð/æf¦'#ô#úÞ€¾=…¾ñ*úoûQ‹ým4ûÆ4ûŽ®ÞLVb?±Ÿ#,,Æì·´wû£ãWà‹ØŸ!Øüd·šúŸäž·ª±¿`æ•çþ,ä>äý×®N^¾4>62ÔßÛÝÙÞÒÜXWSU^*äçfŸOOM$ÄÅDsÂCÙྸï²À} Ê}Ý}{±ûÐ¶Û øI÷qðk,~ +-þµjÿìR™}ø¢Sìëèé”EíW§NÛ;8:9»¸¸ººáãêêââìäè`š4ý +-MÂB±âè/½)eäS™ÿm>™ù(óeæoÝæïÔÚµ[{/˜¯Í7#¯ÄöKÂ|70ŸÉ +-d‡†GFÇÄ%’RÒÏgçæˆ%¥åU5uÍ-íݽýC#cã—.CïÜ@Á]ýYúó/}5€T=xúñðÏ?ÙŸ¥Ð¿ÑôÛ[ú¥Å…œ̴dA¸ÿ-¸X”û:Ä}uUp_ž¸?ükEÿçLð/þÅ]¤°/¿(~ÉÕ54µu9È}K‚Ü>'g—®®Ýܾ"ÇÍí «ëg§}vð:,IèèÁÛÐPÇ,D"¤môE¼"±äÂO¾ÈÌ_Ce>š™æ+(*© ù,4_Î|¦óóýƒBB#¢bâ’SÙœ,n^AqiyUM]CS Ì|gw/ú·îÜ›¸? s?=½ó|ö%oòCþ®+Qè £OL>þ A·Ü±Ñ!@ÿZA¿¼¤0/›ƒèG…‡õ;}ÊãÄѯÐ×\Fÿ£?‹a_“fßÚÖÙ?rÂÃë´_@PHxTLBr:';·°¤¼ª¶¾©µ ØïÇEšgš°ÿ’ÙrßðzGÄäKÄ>½ãŠÌ}Lžç˜ûÓBôà¸A»ßÑÞÛn}]MeyiQA^N'=59!.:*<4$(0ÀO¤ûÝ.t_‹µÝW÷ådùÝ +-~üŸñÃÿ‰0üK,ÿ¼T ûë)öe)öYZÝ.Æ};{G'gçý..ÈqqÙïììäè`ogدb§‹B_–B½8ô?Ü Ä$ÿSò)ó¿àÏüus™æËÉ+(*«¨ªoßæëóM„Ì? +-æ{1æ‡GEÇ%$¥¦s²rò +-ŠJË+kêê[.·µwÐæCè߀֡ÇÐŽK®¸ÐÿPèK„>³è2ƒÿ†É¨˜zzh»·ÇÇF†úaÁmkmª¯­ôs³9iÉ 1ˆ~€ßi/G}[k D_ÐW§Ñ—^Fÿ£=bÛP} d_Ø×ö÷XûNÈþq/d?,*&>9-#;· ˜a¿³§päúø-ûp^¾‚ùdÿoø%\rß›û¸ébîÿå)d\Xvï€û×G†úzº:Ú¯´67Ö×VW–—äæde¤§&%ÄFG†‡Sî{Ís±Û½K_¸¯¡®¦¢¬• ÁO»/ü+xîóÃÿé‚á_è•’Œ}üE7Bån••WPRQƒO9b·k·1¸oae Áoïà°ÏÑщGÇ}@¾í^kòŒw“ÏT¡šŠì<ð¤7RDü +-è‹z' '_8óç̇̇w ¬¢†æk‘×€Ÿ?Ñæû‡†GFÇ&$¥¤gdæäæ•”UV×Ö76·^iïèêé¹æß¹÷ý˜xXp™ÐÿÛ†¾ú˜;Tí¼eЇÖyõRç)>ì·×Gû{:ô‹ r³3Ò’ãc¢ÂBÎøùxyGôý=Æ<ô–ÑÿØÏÙWà±oL±ïrØw÷òñ 8Ÿ”–‘ì—U"ûWÚ;{ú€ý°îö€;@±ÿ¾Æ ð3¹ïèܧÇÉrîÀ³ŸBî?š‚[p®ÁØ(q¿óÚUp¿áRmuEYIQ~nNfFzJR<㾿(÷-)ð ôtvji¢ûªà¾ºÏüëÄ¿8øÿ ÿ‡Ê/£öW2ìo–ÎòHîkëè÷Í ø­÷ÚØÚÚÙÙ“cggkkä[š›1¯@› +-}%b«Ìfý• ¿˜‡)þïøÅIþç|äÏËüMTæËÊ)( PS×Ø¡©µSG>}FäÓ'l¾7eþ…ðÈ‹±ñI)i™Ù¹ù…%eÕµ—Àü«8hþèØ8L;TÎÔ#œwXoaà—0ôôÉÌcêüLЧCçtɨœ[9ƒ0ëíWZ/ÕT–p³2Ò’âc"ÂÏøúx¹ú]hô ‚þï—ÑÿmŸE±¯­k`ÈcÿÐáãîž>¾þç‚Ã"£ã“R3²¸ùÀ~Í¥Æ`¿»opêãgêÑÂþ,S>oHîó±¿4¹Ïsrÿ.¼x¦|+ïMpx°¿·Ü¿ÜÒîWU”æçfgf¤¥$ÆÇ^ë¾5¸oJÐÓÝ©­ÉÒØ®¦ª¢¬¨Á?ç¾pðÕ‘þ%’_rö¥6nÚŒ­+¯¨Œ¹ÏBôÀ}#cS€ßÂÒÊÊÚz/9ÖÖVV–@¾©±ýÙcaè++ÊËnÛ"³yÓF©¥G_"ñEÿG~ò)óW0™¿V0óá“'櫨ªm×`iÒ뎥HóÏ2æ'¦¤±3³¹ù…ÅeU5—šZ.ƒùݽýƒÃ`þÍÛw'`ÖIèãn;KWš¿D¡/€>/sþújöFΓGS¸ÚÂf;<Ø×=‡~>7‹š|Îß×ÇÓýøáCüèkk‡\‰ýUË複ÿFIľ”!°¯OØ·±'ìs÷ôöõ ˆŽKLegró‹J û—¯vt÷ ÂÒK³?ó#n¼?tû0é³höçå>¹xHîÏ>†;ï“G'ñ.܆Ë0BÜïhoC÷ëjª*JÁ}nv&;-™rÿ¿ûG¾!î;:Ø¡ûf Ÿ¡>¸ò©}JŠòtðKo¢‚à_ÃÀÏ¿øùäŸÿ¢å$Rû« z û_nÙ*+¯òÍÅ®!Ào‚ò››[€ø&@¾á.}fÕQUQR‡ïÝ—ýuüDü/ôö "Å$Ÿ'>MþŸ„ÈÿɇÌ_ÃË|Ê|Ì|xpexrøâijïÔÕ30Ü _ôÍÑá˜rˆD¿´(Ÿ›ÉNMŒ‹Ž ô÷õöt?†è;ÚÛX!úúËèÿ_IØ_%†}s+{Çý®ÀþIOï3þçC#.Æ%¦°3s€ýŠêº†f`¿«w`ht è>n½@„ý¿3ì¿¥/s~Ylî¿crŸ×??aÁe îOMÞŸ€ÅwÜèëéB÷›ëÁýrp?›Í!îÇÌwÿ›«‹3å¾…™©‰觫ƒîk¨«©‚ûàß6^ðo`‚õª•+©àÿû“_¤üï»gBNŠe5t¯þ¤2˜¼˜û´ûºú~cSú˜˜òákG›OB_nÛVüÔmú³äèKþïK ¾(ò?$’Ïd¾_æËÊAæ+«âS³´´ñ© aË1³@ó‰ùGÌ£ÌOes²¸yÅ¥å•`~cs+˜ßÕÓ70æߺsoâþä1ò×Z^èÿ‹ ýw‹ ý_xC%Î[}²×’µvúñC˜ò»·a§èíô›êª+J‹òr2Ù)‰q#BÏúŸñö< è»îGôÍM ú, u•£¿¬þoõ,œ}u –¶Ž¾¡‘)ÍþWß;ù­÷™ïÏ_ˆ¸›˜’ž™“WXB±ßv­«·hdlÙŸ|øèù zí}M}–2÷÷!÷_<ƒûð\ˆ©p#Àý±QÚý«WZÑýêJp¿ ›Åa§ +-¹JÐ}Û½Vf{LŒvÓÕËÒØ®¦ +-*`ðo‘¡á—ZOÿjQð€üó°dŸï]½Ü°Qz³Ì–m˜û”€šZÚ¿Êÿ_öë,(ª+ àxլ̘LÅèˆ×[dmšfßADDE}_DQ%‚¸7DA ÙwYDÄYÍL¦&5¾ÌTfj¾sîÒ·›ÛMãäI9/úاø¾ßý>Ÿo +-þ1Aâs|=Â|øÒ¡ÝŠï–«B¨ÁEÙˆ`A_Ùß®H|YòIñÙÈ_€É‡Ì_Œ3_ƒ4e>|è4µ8’Ž©Ì·±Ãæoݶ}Ç.Âüp†ùGhó/ƒù7±ùe+ óÛž€ù0âý0ã𤟘œ"§ÌÿCŸè"oÈ)ôG‡IôaÂ[›j«+Ë"ô¯^:ŸŸ›s"+óPZJR|Ldh¿ï./ +-}S#&úêsèGyöÕ)öµ0ûÆ ö}üƒB#bâSÒÒ3³²sró€ýkEÅwK–WŠjšZÛa)0ûCãh#ÞýLGöå.æç>½ïerÿíÔ›‰ñÑ‘á!؉þ¾Þž®Np¿¥©¡®FTI¸_ŒÜ¿|ñ|>›ûÁ÷]œû–BߘÇ5Ô×ÓÙ¬ÍAé Á¿FüþÅ(1ü ”¶ò³n‹˜ŠÙ_ª®±œÌ}ª|Iø¹FF<òqIòé× úË5Ô—Î}e~·’â«JG>&¾,ùùjèžË˜™. \VOßË3æ› „–`¾ƒ“bósrÏæƒù…`~ñÂ|QM]CS ˜¯ÙÞ¾~<à#0áð • ý÷’)Ÿ6æ3̹ô©G/Z˜ðá!1 ž³í­M µ"@¿änq _—›“•™ž–’äçƒÐwq´CècôµæÐÿ´ÎLìÿ™•}]̾…µ£Ë`ß/04":>19-ýpVö©Ü¼‚‹W®böË*DµõM-íϺa-ÄÀþfÿ¯ öÉ +-¢"è·Ùçþ¿é܇@+ÁpjòÍÄØèÈk¼}½Ý]í ÷KîÝAG¸ï¿»ïáîîÛÛZ[Z˜›™šðŒ pþ¢àÿ~ +-þeKˆÿ"eàg&¿ +- ürä—Y<65?cc¹¿j Ü_¹šrŸCÀ¯§¯o```þÑ××#ÈçPæ¯^‰B_>nè†  Ë± Ï¦¾ÂŸÌ&þ¤Å—D>ƒü?É#2 Î|D>•ù?l >pºz†F<¾™¹ÐÒ™ïâæN™ŠÌß+c~eþ½’RÚüÖöŽÎ.nˆñ:"4Ðßî±з¶ô¹º›9€>z½aôÕôá:‡þG|³Jì«aö¿[¹z-°Ïö¹Æ¦’ýí;wû†DDÇ%&ïO?|ôø©3gÏû7nݹ_ZVQUSßØҫуÙ=2†Z­žüÜŸ}–Ü'–oé>äþä›ñ±Ñá׃â—/žCÁn´67ÖׂûåJ ÷¯‚ûÓÜ!Ý÷ñÞéå‰Üwv÷­,̦&ÆF\ü›¨à_K¹á_ð£üÓ’ŸU~¹ô+¤“úƒ2Ù'r±>å(÷WP L¿YGG—>::›Iò7æ¯ZCºÞ_Y(…¾ª|ô•ûՊħ#ŸIþRä-M¾LækÂáÓ¦oÀ5261˜[XYÛÚ;"ó=<½vzûìñ—gþ…Ë…WIó•Wˆªkë›Á|xÇöÂCv@<ø’fÌûŽ4·$kfúÿ•úúÄpÃl ÑîlG[Kc}MÕc@ÿÎ-@ÿ¹³gN?zøàþ䄸èð@¿Ý;)ô4úëÖ®†×›}ü‡¿èçsè¬G.ûŸÿ- !a9b°¯­«Ï5æ#öœ1û{C£âöí?˜qôøÉÓgÏ]¸üÓu`ÿÁ£ÇU5uÍmOžvõÀr¼öa5ÈÍø;ìÊ}yìxîÿÊÈ}ÔCã(ˆ_ ô¿xÞÓýìéÂýêª +-ÊýëÓÜOÅîGE0ÜߺÅÜ·³±² +-ÌøÆ<. +-~P£(üþÅü_Ë…_qò+ýòý¤b_úCŽØ_¸¹ˆs>櫈&àçlÚ´I›<ð_E>q=|;t7µo-$ÐÿB}úw¨ø’ûË‹ü™ÈGwSWgÏÌ|}C.Ϙo&ZXÙ€ùή[¤Í‰Cæ§Éš6¿Š0¦úY7ŒuÿÀ«Á¡al4ŒÐÿõÿ }vôñlSEAïØAxÆ>ïézú¤­¹±®ºêñ£÷nß¼þÓe@ÿôÉãG3îß—°£ïì` èó¹úºÚúË¿UG·EsèG)öÁˆ%K)ö×ìó€}+[g·­ž;vï ŠMØ—z0ãȱ“§Ì?ìß¼}ïÁ£òÊ꺆æVX’ýáÑñ‰É©w?Ó»AåYCä^|xî“=ÄtòÍĬ¸ÿ²¿Üo“q¿ˆÅýdÂý° ?ßÝ»vlßî»89ØÙX[ +-ÍÍÈà×eÿšÕ+IøÕ—)„Ÿ%ù•_YH%|Ê°?Ÿfå>ªa¦û~M--­äÿj"ò¥Ì‡}èÏN}ÖÄ—#>3ò‘O^ ™O}Ñ$™Ï3á›™ -­mìœÀü­Û¶æ…„EDaóS¥Í¿æI›ßæà öy_? 5¼aGá;É4ÿ2æHè³F›~ÈR=c=591>ŠbÐG)ÓÚÜP[ ïWýKçó<}òØ‘Œ©ûöÆF…ú;<·ºúVBŸG ¿~ýOòÌÌþWû$ûšmľ™bßÛ7 8,2voRêCGŽÈÉÍ?©ðZQñÝ’‡å•¢Ú†¦ÖöŽgݽ}ýâ¡aXÉ©·°4ûÿ|/DšûdÁvàõ Ü;E¹/Fî÷ötu‚û-M +-ÜÏÄî'%ȸïáîîÛÛZ[Y¦ŒàçILÿ ð) ¿D~U¦ü*ìò+Á)ƒP…ì/¡Ü'‹Ë¿~}Öcñ™¯u"ô%èÏ—‹¾Ò?sšø*LñU™â3ÉÿRùÄ$—"1ŒÌ7˜[XYÛÚ;8¹¸¹ƒù;víöõ  ÌOJÆæ•6ÿ–Äüº†&Òü^d¾˜2Ï46O5®âû{…>>žiixÁŠ` »Ÿu´·6Õ׊*Ë–Ü-.ºVèçæœ8–yè@jÒÞØÈ°à_o}3>ÏP_G›£I¢¯A¡ÿýysèćýy +-ÙßìòLûöN®îˆ}ÿ °È˜½I)i‡2³²sró +-.ì—–Uˆjê›ZÚ;:)öG`G¦Þ¾ƒ!ØG¹OîÇ,ØŸæ¾lîSY„º¹?>6:üzP<ðò¬IWgv¿®F¾ûéØýøØèÈðÐ`pßÇ{§—'¸ïêìhogcÅ~=ÍÚüš¨,ÆFb$ð/”†ºüóÈ?ú™Žª0þ ô_”Õ}0Éÿý:ú|ć밚Ï@Ÿ6Bå3%Õ—>‹øóXÄg%_"ŸñƒÌò¥2_ ´´²±µwtvus÷ðô’˜Ÿ@˜Ÿ)kþmÒ|Q 6†¹ ¦ùÅË1z½Ž#ó!ô¡°ÓC_IóeÑÿ}r¤QÈÀ@Ã< qîéhki¬¯U”•ÞGè_¹X—›“•y(-%)>&2,Èß×Ûk›»«“½  o‚Ñß8úªsèÄGjIöUYØ_L°¿j b“Žž¡°oiƒØßæµËÇ?(4"&>1%-ýpVö©3Àþ•«7nݹ_Zö¸ª¦®òêèù‹—¯¡`M`Kþö ûïqî³mˆ2 Bgåþ{"ŒH÷ÿÇ~}U}åP×1‰ÎW£âª±&±Ð{ïÍ‚ +-ˆ`CªTéU:ÒAPTÄ‚t)ÒD5JUAÚÎÄìN’Ýd3ÙÝ<ìïœóo÷Þÿ”Ììœ'x;wîï÷¹ßóž¸? +-{B¹ÿ-vÿ1q¿–ÏýÔdì~DX(㾓ƒvßÊÒ|?¿©‰‘¾.ürü’8ø§¿Hò/â&?%ÿù…éç—USNì3ìsrŸu )7ý[¶âÀ¿›6²oòAèÐç Ï—úS]Nüyà³â/$â G>!™PåÿE|È|)i9y%&ó ŒŒMwï5ÛoniuÈæÈ1[;§“®îž”ùQ1Øüt®ùw°ùÕÄ|x·vÁÃõÛW=}ýƒ¨aFpÄСÿãOäùú ×|ºd¦‡>·dئCÿû÷0Í1ðvì‡Q~Þ ×–G k*ýÛ7Š®úY©Iñ±Qá¡~ޮζG)ô tµ5T•ä¤ý¯¶lÚèK¬^É‹>ù:¾Éÿ¯Tsç<¢ìÏça9°/ìoØ´å«ohöµtYöí\=¼|C¢bãS3²rò +-®ߺ[Z^YS×ÐÔÒÖÑù”bÿíðÈèøŠ#!ög˜ûxK¨4‚5Á{º?>6 +-«òöõ`_rÿ)¸ßFܯæu?1¸èïë î»8Cð?zØÚ +-‚¿‰`ðËËÊH£àÇð3…, +-ÿTÉÏ'ÿdô +$*û‹1ût¸ù!úéÿl€Ï@ˆUtècô‹AÞT·š|^ñ'‰|~ò±ù„|IiY9”ùêœÌ߻¥•5Ê|ÖüÀàÐ0b~r*1¿€2ÿ^iÙƒJb~‹°ù0ɸ`(óñ0ãi&Wfœ?&ôÿà }}eT0ÃhýgO;;ÚZšêª+ËKïÞ*¾VX—“•‘’èëåáêdÐ7ß·¡¯¥¡ª¤ èƒÐ_OÐ_ΠÿÉú³äLÆþ'„ý¥4ûk×cö·KJË*(©ªûF¦{ö™´>rÜÞÉÅÝË7 8,2&.1%=3;¯ ðb¿¬¢º®¾©¹íq'ìËËž¾TH(ЮPìæP‹Bçþï3Ë}²)dU(÷'ÀýwH”ûÏaaÀý>÷ss(÷ãb£#)÷Oy¸÷Qð„à7㿆šª²’¢¼œ¬Œ†Ÿ +-þ)àŸJþ? ÊÏ¥ŸÏ~^Vç‹aç>ë>†Ég>è/_Ÿ5‡¾ô…ÕŸübBàÏç€?©ø“’Ïd>"_JZV4ó÷˜í?`qð 2ßÞÑÙÅÍã”·¯?1?6.!‘2ÿ¢óa†Ÿcó^ãÆxœÌñßþN&‡þ¿fú¿S¡Ï¢OO2šã¿NÀC½ ôõ¼„vnnª¯­®(+!èçfg¦§œ‹‰ ðõrwq²?~Äú  ojè«ô·ô×Òè/C¶a§´¬¼’Šº–Ž>þ£‹û)Ÿ€àÓ1qg“Ó2³só/_½~óNIYEUm}cs+tR7fðÍлÔHT"ýô侈û¿B¢éû÷ûŒûý½=/§pÿ|fí~øé ?/þ“Nv¶ÇŽ@ð[Bðïå¿šŠ²’‚¼œŒ4ÀO‚_~ ~l'†'ÿü´üâ£_€þI‰'¨>Í>|£è+¥s9'’äç¸7&ŸÜ|9úHL…¾€úÓ¸?øB‰O‰Ï¿„D>!ÿÏèâbÉ߶‘/ä+*£Ì×ÒÖe3ßÜÒêÍ‘c¶8óióO‡GFÓæŸÏÉå1ÿcþËž^dþÛa4ÃlèÿˆÇ˜;Çl¾hèã9fBÿýwèÍ:ònèÍ BÿywדöÖæƇµUÊJîܼ~õr~nö¹´ä³qѧƒý}N¹»8Ú1èëëh©«(ÉËJïdÑ_µrÅú³óL‡ýÏ¡¬V®’Xð/…Ù×öMv›°qÿj eü+ȧ, +-}1èÏŸÆu„¼_¼ø"‘Oß®Œ~ªÉ߱ȗ•SPTRQUÓ 2ß„É|k”ùØ|wO/¿€ bþÙ¤”´ŒLÖüÛwKîSæ7"ó;:Ÿv ˜?*`>õd¥‡˜™â¡O½Y)ôñƒutºe°¿^«Ýí-ÖT=¸ïö¢+—.^8.-)áLtDh¿§ÛIG»c‡Y0Ûmèkbô¥ô×ô?ŸCVždãæ­_û2òŠ*jš:z†4û'œÝ<½ý‚BãÎ$$¥fd]¸xéJ°_Z^YS×ÐÔÒ›ó ±?ðÖm ZÂ>Ê}†ý³ 3ƒÜgÜÿëþ(vr¿ûigŸû…—ò9îÇDE„…úûzŸòpsqv´GÁoÁoŽƒßÔØÈ@_WGKS]MUà—Cðï†~JQ€)“ü‚ò/bäG¿ ýüG@}šýOQ;£Ü§ÝGˆbùÁQö¬Æâsn»”„>Á Ï£þ”×þB +-|añ—ñ ùÔmÅ“/‰È—WTRVUS×äÍüöŽÎ.t懆EDÅœ‰çšµ¨ø&2¿¼‚×üÁ7o‡„ÌÿcþLCÿ¿ì#ôÿù‚>_4½0¼¯úz_½€béhkij¨«©,/½{ £Ÿ“•‘š”èçíéæìp‚FßPOGSMEQ^Ðÿzëæ<è/šCvIØ_$Âþº/ûÛvHÉÈ)*«ihëïÚ»ßÂÊ樭ƒ³«‡—_`HXTl|bJFVN^Aáµâ[wKË+ªëꛚÛ?yúìÅËž>`èÝè,ÝJ(÷ak~ýàÜÙ÷fÖ†q ÜBî÷Må~Þ…ì¬sé©É‰÷©àw°CÁoMÿ.cC=]m- u5€_Á/Éÿ”Ï`é +-äŸD~>ú§k? ¬(ûKH=SñŒáL¹g%C>e>}ôL÷&\ïEÀ+>7òW ß'øu‚gÉÚuˆüäK!ò””UÔÔ5´´uôô …2ß–d¾°ù©éç²²/äå_*dͯ¢ÍoÇæÃÜööÑæ1æ3Ñò³¨ù1ÀlèÿŠ«…ý÷ß¡Ñ…É…‡j_ÏËϺž»Ã²/’û˜J¬û¿±‹ƒ6‡¬åþ8¸?̸ÿBÀý1î'ÄÅFG†Ÿ +-ð÷I🠂ßâÀ>³=»MMŒ õõt´55ÔU~~ø×ü"ÉÏ/ÿ§”üâéçÚÏ«.GYZ}šýÏÓ Í‚ +-òcûñA¯üiB÷[üƒ>G}qì ]pÁ¤à/"àóŠ/ù@þzDþ&^òUÕ54µutõ ŒŒMéÌ·†Ì?Ž3ßÕÝÓËÇ/ (ätxdtl\Bb²Xó›ˆù]ÈüWÈ|¨•a0Ï-˜O&—Œ.,¿ ˜?£Ðgч¹ƒ±}3Øßû +-Z¥ëI{ë£Æ‡µUÊJîܼ~õr~nvfzÊÙ¸˜È°àÿ±_ŸAU¥gÇ'Ù][2³q]\¥‰XÖ­Š  ôÞ{ï½JGéˆH•Þ{ï½)‚ë8 *ê¬;ÙÝd²L2î$ÎäyO¿çž«HÌä¼ßøtÞžçwÿoä™Ð O +-}m 5e…“²2ÇÒè o¢¿áÏÚØÿc_ ±±/ì+(«jhë›YÚØ;¹zøø†„GÆÄ'&§^ÊÊÍökê›ZÛ»z†G'¦fæP7á쯶;L”û¿ ÷|I¸¿‚Ü Èý–¦†ºšªŠ²’¢‚¼ÜìÌKŒà ¢ƒßÁÎÆÚÒÜÌÄØÐ@OW[KC ü ?ÀÉ/.NÂäÇ]åŸýüô ´Ÿ}hg‰Ø'Ùg¹®"ùG]×| +-}*õ·¼Ç%(ï¹À'ŸK|D>ú="Èò÷#òñ‘/ä+*«¨"òuôô LÌÌ-™™ïÀÎüìܼ‚¢’²Šªš:†ù£‚̆ÌÇÞ¨¿PæcÏTÔ+ÌÐ_“ùœ¡ÿšx§’ÏTbh_<[…‘ÅЇy]˜›™šèíjoAè—åçf]º˜œèïãáêdocifl «­¡Š¡/…Ð?ŒÐÃÐÿ|ý ~ÞÅ>¸³¿c_òàá#_ûÒ²ò +-JªêZ4ûÞ~!áÑq‰ÉÓ3só‹J+ªë[Ú»zú‡Fǧ®Ì]]¼qkéîý‡–a‡`…ð ¢rŸJ¦÷Z®ÜÿÈ}Òý_q÷±ÜGî?àþ8î~WG›÷‰àÄ‚ß‚ßÑÞÖÆÊÒÜÔÄÈP_OG[SC]UEY‘~<ùHBòïƒäåM~LW†ü¼ÑÏG?Ÿý‚äe`KÆ>û„û8ü¸ýØÁÿ¢.õ)}fê¿•}æíx¼çŸN|Z|êBE>¿È—Däƒø‚È×ÄÉ765·°Â3ß e¾‘ùÜæ74µ´1ÍŸ…Y`þŸÉ‘ý•6ÿŸ<æ¯gn ôÉG*ú?ÿ  óºü^§K·n,^…Qêïéloi¬«®(-ÊËÉL¿˜œàçíáêhgmÐ×RWUR—•–:úí×G”ôE„÷`è#óßþÿÙ¥Íó¿=ogË}`_ØÛ'±ÿí÷RÒ'äO)©¨kéè™ZXÛ9º¸{ù‡ŠK8Ÿ’–™“WXR^UÛÐÜÖÙÓ78269=;¿x6éþCÈýÇOWŸÃÁQìã¹O-п֗ûl÷_Ý´&÷'‘û}=„ûµÕ•å¥Å…ù—s²2ÒSS’“âc£Áï Áïä`okmeanjldÀ ÿ1€ŸHþCQòKàÉ/*",Œ'?Ÿü¼ÑÏ¢Ÿe?þ‡ò–TŸ`Ÿv7–}°ÛÐæÓèêo]óÇYÞóO%>—ø{ö +- câCäK È?HD>F¾ùjšZ:ºú@¾™…¥µ­d¾;#ó#£cã’’SRÓ3²r.ç—–“æwtõ`æSæß"̇§éc>óÿ†¿O_­×|ŽÐÿ} +-}W˜Vxœ>ÆCÿöÍë‹ó³Ó“c#ƒ}ÝmÍ µUå%…y9i)çb£Î†øz¹» ôMôu´ÔU”NÉŸ–úG_G_ˆ@ÿ›èoèÃÌ}ö·mGH öw’ì‹“ì“>!wJQEM±oneëàìîå{:(ôlT칤”´ŒìËÅeUµõM­Ý}ÃcÓ3ó ×nܾsï°¿ò6  íƾÀܳ.÷_¿§ûׯÎîáî·67ÖÓîÓÁƒ +-~/7WgG;kK 3 ~]-M 5üDòüÌäCÉÏ+ÿ.¦µÜôóÚOáÏ 0Ýmtìÿ–ƒ£–uvb÷øý „Ýø¼ '[{’{¦÷à3~v±ÅcF>N>ùÜ䛘™[ZÛØÙ;:»¸y@æûã™Ag>e~eum}c3f~ß2R€ùÏ™æc‘Âcþëu›Ïú}lV±Ð_…AÅÑ¿qmanfzbtx ·»£µ©¾¦²¬¸àrvFê…¤s±QgBƒNûz¹9;ØZ™›êëhª©(ž’;!}ŒD_œD'†>üC·oãCÿw›èo”Ãbÿ#œý-löwïÙ+"ŠØ?ôåWÀþq¹“ŠÊjšÚz†&ûnž>þA¡g"câ“.¤^ÊÊÍ/.«¬©ojiïꟺ2wjéîý‡–Wž<…€‚]"ò åþ«ÿ*÷ßðç>±Hä& rÿíþôäøØr¿»³s¿¦ª¢¬¤¨ /Ü'ƒ? þ`~_oOw7'G{;+Ks3cC6ür<ðãÉ’?–ü|òóE?›~û)üiýùÃ]:öéÀ&ágüô³ƒL}šýw~“âžá='øtâó‹‘¿"ÿù¼äËó¯Goeckïèäâêîéíãw:™ùÈüÌìܼ‚¢’²Š*ÌüÖöNdþИ?}evþêâõ·™O +-™(|¡ÿ>•‚O+ù6%…ýŸaN!ôŸ=}¼²üèáý»K·nÀ‹ôÊÔøèPoW{Kc]MeiQ~nÖ¥Ô ‰ñ1‘gBý}Êý|°Ü'û (Âý¿2ÜN¹ÿÜ_Bî/ÌÏÎLON ÷û{‘û-M uÈ}<ø³2ÒSñàÅ‚?‚ßÏÇËÓÝÕÅÉÁÞ–‚_?$??3ùA~ .ù…(ù¹égÚOâOë¿õ-øn'Õ'Øg¸ÏC?þ7m>Ž>õÜüs³•õA’{Ú{.ðIñ…¸Ä— Ä'"Ÿ$"Ÿƒ|Ss +k[{'gWw/_ÿ€ ”ù‘xæ'§¤¦ã™™_S×ЄÌïîíóÇÀü™5›=K©A]Oè¿úúhH_þðâùêÓÇ(ôïß¹}óú"TÉäøÈ`Og[sc]uEiQ^NfúÅäĸèˆð@?oW'{K3c=m Ue…“²2Ç~÷ B?…þgú;ô?ÙDÃ~ö?ædÿ‹½Â¢âûöJÉÈÊ+(©jhéRì{û‡EDÇ%œOIÏÌÉ+,)¯ªmhnëèž™_¸vóö{€ý•'«ü¹ÿ÷õåþqÿ&rnfz +-Ü÷»:ÚZš ø«+ËÁ}<øÓðàCÁàïëíåáæêìä`gkmeanJïð+)ð³“ä—dÉÏý¼ô³ì'ñ§ôgðÏ ðJ}’}†ûÌó)Ç7Éï½û[¤ö8÷<Þs‚O'>K|IŸ#ò1ò•¸È·sptvuóðòöõ? +-™Å“ù`~qiyeu-˜ßÒÖÌ›ÀÌ_@æ/ݹ‡Ì_æ3ÿ/Âüµ†þO0 è=údeЇÇèk ó3ÓcÃ}Ý­Í µUå%…y9i)çâ¢Ï†øy»»8ÚY#ôuµ4T•äee¤Hô÷‰‹ +-ïýb·Ð.~ô?ÞDÃ&û¿çe;Åþ.œ}1Äþá#ˆ}iYùSJ*êZºúF¦ÖvŽ.î^¾§ƒÃÎFÅžKJIËȾ\P\VYSßÔÚÑÕ;04:153wõ¬Öد¯ ¨²4€ãUû°3ê–c¹Š ÉÁ1ŠˆJh¢da (Š’sMÎI$‰‚€ä;G iÉAdPÁ¸U[;;û05ëÖ¬³µ{ν}›{ow3jáÓò=öù/çûõÿ€Ü_zö +-®تUö±Üÿð©¹/×ýòÜÿÇZîC÷‡<.›I§ ôõtu¶·÷aðWU–£ÁŸ‹?TDXHp ¿ßmŸ›Þ×¼®Èß ÂoD€_’ü@~­5äG¢Ÿ@?Áa<þ²ú“†”Üxö òK~Ø*G}™G†Üï`Ú¯rOþÁÀ'$¾¬ø òuÑÈ?B ßÈ’o.ükÞ7|nûú‡„E€ÌO„™Ÿ)ÉüÒr$óë56·¶wtõô óÙž@8,921…˜¿ˆ˜ÿRŽù?“Ìÿðyæ“BÿzCWCÿ'x;áå|µ²ü|iqa*¾²|ñe"ojÈ·¢XÛJÈw»è‘Ë×? ($,<2:&.! f~>ókjëAæ·¶wvói &›Ë ˆÄm¾¤J÷sBÿ_ï±Ë ¯&¸™ïÞ¾~¹ò }ðâsYŒÁ¾îζ憺šû•e%Eù9™©Ô„بð_o¯Ëžî.Žö¶ scC}½ãGôµ4úûöîÞ¥´ƒ€þWèoÌï³Üìïܵ{ï¾ýªjöÐ78c|ÎÌ‚bcï育ï“@MÍÈÎ+¼SZÙojíèî 39|á0Ȫə¹'€ýç`½Þ¼û X®ååþoëû8÷ßËuÿtqÿ)âþäø˜,™Ïå°ôÁþÞž®Ž6üuWƒ?Z +-51!.&*2<4$(Àß÷~g~Š•¥€$?~DþƒdùUQù¥ÑÑOÈþmŠT^ÕÏófE£è¯¥>úù_ÀLü€¼•mÄÀÇÀ_M|(¾*Yüƒˆøòaäò-qä»ò/]¹Š’ïŸHM™ŸËüê‡0ó[Ú:ºº{ûi ‡ËŒŠÇÆ'§ffç¡ùÏ›ÿ ÉüÏ +-ýÿ*ýb¡ÿ÷Áµ·ÄxƒBô'ÁtXÈã0é½Ý­Mj««*Jïæeg¤&ÅÇD†øÞ¼~õ’DßÆÊÂìœñýÇ$è«¡èïèó7Ðßüüûhîcì«öµu¿=tä؉“gŒÎ™·²±»àìæqéêõ›·ýƒB#bâ“RÒ³r ŠK+ªªk5¶´wõöÓ˜lž`X$Ÿœž_XYs,Ü/ ûÄÜÿíSrÿ#Üÿe ÷—P÷§''ÆŽ <›I§ ôõ€àom–9 þü™é©ÉÔÄøؘ¨ˆðÐà ?YøüÖþóæ~Ròãå×ÖÒÔÔPW‡òËÒ¯„ÑO²ÿ²ÍÎ8¡ñ¿àÈ—˜¯}Œ}Â٤÷Gæìod¼GÁW’Š¯®®¡©©¥_&òMLAäòmò!ùž ò¯^».%?,"*:6>1)95=#+'f~éjæ7ƒÌï™?Hg²8< Ðü Ôü§ˆù+_Æ|…¡ÿ«$ôQôá„OÐׯÀ…\Z\˜Ÿž‹†<6ƒÖßÓÕÞÒX_[}¯ünqAnVzJR\tDhÿm}7ç v6VçMÏ18yâØ‘Cßêjkj¨©ìß·A ý ô7?k³¿EʾÒî=û”UÔÔ5ö¿;~òÔi£³¦ç-­û®¿¿ríÆ-¿ÀЈè¸Ää´Ìœ‚â»å÷<¬olnëìéd°¸|WcShîƒ-{-“ûè~Áíú€Ïý/çþ[èþ2âþÂütô•h,—ÍbÐú{»Að·Hƒ¿qa~nNVFZjrRB|ltTDXhp ~7g§ ö~ +-„&??&ÿ²ü’èWAä—ÐOÊ~‰ýþ2úK–(ý'âÈWh>Îý­äS±³e%k¹'x¾|(¾Š4ñ‰âÁÄÇÈG#ßÂ’bmckïÉwCÉ÷äß„äBò#£cã’’SÒ2²²sóaæ—Á̯™ß2¿³»·o€Æ`²¹¸W^R”Ÿ“™–œèwëƵ+ß_tur°³¶15=;7¿ðô`þ24ÿ­"ó%è+0½Bÿ¯ ôß¼z¹ü>zLOßÀÐØÄÌ‚bkïè⎰’žWx§´¢ªºöQSK{Wo?Éæ †Dâ±ÉéÙùPX/V^]«ö7™Üÿurç>¾B÷Aa¡î/.<™›™šŽ <›I§ ôõvw¢Á__[óàþ½Š²Ò’₼œìÌôÔj¢ø¯^¾äéqÑÍÕÅÉñ‚ƒ>ùÉOˆ~u$úû!ý$û1üIúË›0øœ—¾úF:¯=Æ=Ñ{|è=L|uBâ¯%>ùv ò\\!ù—dɉKH¤¦¤¦gfåä—Ü-«Í|:“Åáñ…Ã#£â±ñÉ©™Ù¹'ˆù/ ùo>Åüõ ý÷äÐý±Bqa~vzbL,pÙ ZOW{Kã£ÚꪊÒ;…yÿc¿¾‚¢J³ŽWÍÖŒ£³U[cŒ( +-*%""‚HÎ9Óä,H$çœS74MÎHΚîAÔQw¶¬Úrvvkj·¦ÖÝÚ‡ýîwCßneÔ§éóÜ}ŸîùÿMJˆ‹Ž  ô£x¸:ÙÛXš›Ü3ÐÓ½©u]íš’ÂÕ˲¥Ï=}ò„„8@_XèÈ!^ô¿ /ÒÝÇÙÿe?—ýÃBÂ"¢bâ’8ûròJ*jZÚ·ô Í,mì\=¼}‚Ãî?ˆMHJÍÈÎ+,)¯ª¥50ZÚ;{ú†G'¦fæ—™ ÷7žÂÜÿæþÛÏ‘û{qÿg^÷_÷·€ûëö*seiq~nfzrbltxüôzj]MUEyiqQA^NvfzZJR"8~Wg'~kK sSc#Cnòù!ü<ò_’•ôKãÑOÐí'²Ÿ°Ÿ¨?Êÿ÷;âÍ/ý÷;ή7àý'ĵçåž×{4ðñ‡ࣉ/ À—‘½Ä#>$‹|Cù¦æ–Ö6¶öNÛŸ˜”’šž™“WPX\ZVQÅÍüŽ®ž^$óAsLNÏÌÍ/.­0WÙœµ'›[Àü—¯¾Œù¼¡ÿß÷BGŸúO7Ö9,æòâÜÌøØèëéloa4Pk«ÊK +-ó²3R=Œ}p?,8À×EßÌØP_ï–¶–†šŠ’¼Ž¾¤„¸˜¨ˆ°Ða.úûQô¿FÐÿ†¾Àüßýð±çþ¾}¼ììGØ—:Aæ’œ¼¢Šª†¦¶Îm}CcS k;Gw/ÿ Ðˆ¨Ø‡RÒ³r ŠË*k¨õÍmÝ}‡FÆ'§ç°ÜßÂs.¶nŸ’û¿Å}ØYÀý€û µÖ×جՕåEüÓSã£Xðwu´µ63hTüe%Å…ùy9Y™é©þXü¾oO~G{;k+ s3Scü0ùüDò£òúå®ðG?/ý\ûùñ'ô'ñO\€]çàŽóñ>D`kÏÇ=×{>ðyˆ/¯@‰|(>ˆ|ùÆ ò-¬¬mìò]Ý<<½)¾~(ù‘ùÉ©éY9yù…Å%eå•Õµu´þÌŸ˜šž[X\^a²Øœõ' :žìà5ÿç/cþn¡ÿWPhèomÂÐ_Z˜›žzÜ×ÝÑÖÜXO­©,+.ÈÍJOyäïãåîâhgmajd¨[G[SCUEQ^î’Ì…óRgúÇ!úGôÿD ¿o7ôè ²ÜGÙ?*v °ê dÿÊUEeUuÍ:ºw[Ù:8»yRüCÂ#câ“Ó2sò‹J+ªëêéM­í]½ýƒÃcÓ³Hî³×@{rÿÍ®¹ÿe݇ÁºÿÔÖæÆú‡µÊ\Æ‚|l„þ¶–&½žVWS]Y^VRT˜Ÿ›“•‘žš¼-üî®.NŽv¶6Vää×»%?”_ÊD¿7ú!ýXõóÛÏ?®?äõ=ä#°ÝÚq>ê_‡ ë!ö˜ö|ÜóyO> +->–øˆøŠP|U\|$ò¡øDä[ÙØÚ98:¹lGþCŒüìÜü‚¢’Òòʪš:j=½±©¥µ½“ÈüñÉ©™Ùù…¥å•U¼y›Àü¨ùù»™ÿî“Ìç ý_yCÿ- ý_¿͇þüìÔÄØð`oW{kVW]QZ”Ÿ“™–œèGñtsv°µ271º{GW熦ºª²âÕ+(ú§NH?&vTD Cô¿ /lÈìõ>ûhîö… û'N9{Nú"`_Aùšúõ7uõ [ÚØ;¹zxû‡EFÇ%$¥fdç–”WÕÒ-m=}C£ãS3s ËL®Í­ç/^¾þó_vÈý“Vno Çïþ»í܇{ƒÿ \=ÄýgÀý'ë6‹¹²´¸0Ç þ~,ø›ꩵ5U•å¥%Eù¹Ù¼ðG„…øûúx{y¸»¹8;9Àä·Éo’È&?*?Œ~ ?ˆ~y,úyè—Âè'Ûσ?IÌô7àóþl!Üz²ödîÉÞ£àKñƒ$>_ ŠÀ'Ä‘ˆÏÈ„ù.nî^Þ>¾þAÁ¡a÷£òÓ¸äWTÕÔRi ŒæV"ó‡GÇ`æÏ/.­0WÙœµ'ÀügÏ¡ùxæïÕü=†>¹;þõO4ôÿŽ~kb¡ÿ } ý™©ñÑ¡¾žÎ¶Fµ¶ª¼¤0/;#5)!öÁý°à_oW'{K3“{zº7µ®«]SV¸zEö¢ô¹³} ýƒý?~'@_0»Ìî쇲°/|Tô˜¸Ä‰“§öe/Ë)(©¨ihißÒÓ746³´±stq÷òñ +-»ÿ öᣔô¬Ü‚â²Êj}cs[Gwïã¡‘±ÉéÙ…¥•U6XÀ§ ¹vÈý_?)÷wwlÞ/˜û?î#ÁÜßz +-Ü_c³VW–—ægg¦@ð!Áß3ƒÞ@£ÖVWU”—c𧽿ŸÅËÓÃÍÕ™›üf ùùïàòãш~”~YŒ~i”~²ý|ø“ôGýG~xîy„v˜ü{¸f=Y{^îIÞ£àKcàË¢à‰ O|\ü;P|c3nä;#‘ïEÙžüÌìܼ‚¢b„üêÚ:ZÑÔÒ†d~æ3YlP›[À|˜ù˜ùoá‹·ƒùäêØ«ùÿã}ù¶ ý70ô_€Ð²Æ^]YšŸž|ÜÛÝÑÚÜX_WSYV\›•žòèalTDh¿—»‹£µ…™±¡¾Þ-m- 5%¹ËýÓ'OHˆ=*,täŽþû¿ /˜ggö¿ÝàÎþ¡ÃBÂ"¢bâ’ûç/öåUT54µunëß52µ°¶spvó¤ø…FDÅÄ'&§eæä•VT×ÑèM-í]=ýƒÃ£S3ó‹0÷Á>ÿáC¹ÿþÅÛ}íöàþ?Þwìàþõ5{ þyžàïéêlomibÐëiuüeüy$øãb¢£"#ÂCC‚ýý|)ÞžDòÛZ#ò›’äçF¿:ý€~‚~Xý¤ìöóàÏÕçúìïÀoîƒD°G‹bÖãØÚóp{ŸTø|øÊhâ«sŸ$¾)"¾µ-ù®îžÞ_?ÿÀ ÐðˆÈ¨è˜¸øù…Å¥e•ùõôƦ–ÖöŽ®žÞþǃC#£ã ógÌ_f®²8kàu{ºõ f>×üŸ0ó¯Ýç6ÿáÿ†þÆ:‡Å\^œŸ™šèïéjoi¢Ój«+J‹òs2Ó’ãc"ÃCý(žnζV¦Fwõoëhkj¨ª(ÊË]–¹p^ +- /)!.&*",tX€¾`>vv`ÿ~ö@öKž6ÿ9eþßá{õÌß)ôÿµ›ÐßX_YZ˜›™êïéêhmn¨¯­*/)ÌËÎHKŠg³"ÂC®\õõºäyËI;kKs#Ýã} 5UeE„þú}h¾}ñì01Ý߇Üÿ Ê}À¾fÿwŸAö%¥eää•UûšÚ€}}C3 kÛ'Ýθ{\ôò쇄G°ØñI©œ¬Ü‚â²ÊšÛ M-íÝ}ƒÃc“Ósó‹+kTî?ÊýW¯ÑO‘û¿¢û? ÷™ÁÿgüOAð?BÁ¿ƒia~nvzjb|tdh°ÃßÚÒ,nvV'-59)!>ŽÃ"ÉŒ“ÿŠŸhùIô3é7240Ð×#ÙOu?¦þ„ä?ZhÐK€Z{êr "E=´ž‰=ÖžÁ=å= +-|=}C#&ø$ñE‹ïÄ¿æt=˜D>+†Ÿ”œšÆÉÈÊÎÍ+"¿£³ “?:>15=‹3‘ùOÁ=æó2_”ùük>ú?Ó¡ÿú 1ÀEã…þÚòâüìôÄØð`_wg{ ýšÊ²â‚Ü,Njb\LÔ­°à ÿ+>^=ÜO»9;ž°µ¶031Ô×=~D[󠆚Š’¢¼œŒ´$D˜O¡Ï ý}LóÅ苇Œ0û(÷?ù„°r³/+¯¨¤¢¦~PSûÈ1}CcS +[{G'×Óîç/\ö¹âv+*&.1%=3'¿¨´¢º®¾ñNÛݮޡщ©YîÂò*ûßîûø2sÿí®ÙßÁ}ô +-éöBñõš¸ƒŸrÿ3¾à_‡Á¿À›™žœèïíéêìàÁ_]YàÏÏÍÉÊ䤧¦$%&ÄÅÆäÉå÷%ò{zÐòSÑè·ô[úMMŒQö ØOðç×òOù7^d 07Á®‡þ"9 ªŒ~@c/¤=á^Ð{øÆ&¦| ¾ŸJ|Z|O"¾/? D~(‰üùI)©éœÌ¬ùuLò{û††GÇ&&§gæ¸ó‹K+ŒÌ3ÿ[*ó¿#™o¼jè® šÿ†Ü·÷ ú¾‘Ì — Dj ¡Ðÿ#ú«K Ü™©ñÑ¡Þ®Ž¶; ô+J‹òs2Ó“b£#o†Þ¼æçsùÂù³§]ím­,L õtŽAôÕUU”äee¤ ú8ôýÿµ4âù?&û ±rÿ³ßþÅI)À¾‚’²*`_ëð1=#Ss+{'—SgÏ{^òö»x#ôfdtlBrZFv^aI9Ìýæ֎ΞþÁFî?üZ8÷‰ûÿeî¿—ûð5¾$îcø¡û$ø¿¦‚?wöð—Aø³33ÒÓRø’?,ÈÀl~OþèGôÛ‘êÙo†²Ÿi?Á•?CÈ?ñ-¼ð Ö5J¿0|& ÓôPzÊz€=C{T÷˜{~ïAàð-IáÛ!ðùß“Ùø@ü0¾ÈOIKÏ€äç—–UTV ß70ÈŸœš™åÎ/,-¯®­of>2ÿ»çÄü—üæÿŒƒwÕÞ×ü½…þ3:ôWçç¦'ÇFûz:Û[›nÃÐ/ÌËæ¤&ųYá!×®úz_òÇèÿVýÅè‹g‡Ù™ýO%öï§ÙÿRRJZVNAQYUMãÖá£Çu ŒLÌ,­íNœtq;sÎ㢗ïÕ€ë!á,v|R*'+·åþWM-mw»{†y¹¿bl‡Üÿ/÷©Ç¸§—øN÷‚îƒ _$~’"‚ÿ þÍ{ëk+þ¹Ù™©Éñ±‘áÁ>aøËKKŠ +-óór²³28i$ùÙѬ¨ (C~_ù™ôÃ꧳Ÿi??¥?jÈ?ñ-¸ð ¶Ùï1Ô÷Ô)ç±ôzÚzŒ=¥=Ž€÷8ðéÂ'à ˆïË?ˆÅŠf“ÈOãddeçäå•ìDþ$zvn~aqyeuýÞÆý­í‡ ó¿A™ÿ'fæã°WŒ2ÿ§nþ[¦ù$ô_cô_ˆýåîìÔÄèð@o÷ݶ–¦¯êªIè§$ÆÅDÝ +- ò¿âëuÑÃýŒ›óÉvÖ–f&FúºÇ!újªÊŠ}i)É/iô÷ï—øTŒ¾xv9»eÿ€”´Œœ¼¢² +-`_SûÈq]}Cc3 kێή§Ý=.\ö¹âv+Š‘ûUµõwZ;ºzú‡FÆ'gææ—@îßß~GîÿH* ¾ÇS¹ÿv÷qwîÿ“r¦ ~žû øÿƒÿуí­Í{ë«+Ë‹þé© ð××ÕVWAø‹ òrs²xÉÍŠ¤å"ò E?¢ß ÒOg?e?Ä߈àOôGíOóO/¸ð [€ìÆ2ØixŸ#_ħ µ0õÐz{ÔöD{̽äžç= |¾_(ñ‰øA´ø‘¬è˜X¾ÈÏ+(,.)-¯¨ª®­«"t|’Ï]X\ZY]»·±¹µýÜ*þÌÇæÿõº]àz½‚]!Ò|ù{5ÿ ¼b}üòGF胻õÑ¡?>2ØßÓÕÑÚÜX_[U^B?#-9!6:òfèÀk~>—/œw?íêìhokeafl¨¯{숶æA 5%Ey9i©bôųÇÉ>t°/Ùîö%¥edå•TTÕöé蛚[ÙØ;8¹ž:{Þó’·ßµÀ¡ŒÜ/.«¬¹ÝÐÔÒÞÙÝ78<61=Ë]¹¿ rÿ±@î¿Àì¿‘ûoÞ/Âvë>Ž1ø2QðÏ? +-þÇ>ؾà_[]YZ\àbøGùà¿ÓÔᯩª,/+-.* ÉŸžš’œägóËÈ'¿@õƒìwÄöÛòºãolLô'íù‡þ“€6\ÔÀk@“± vÞçðµð)z(=¤—=Àž´=Öä=âž×÷¶Ø{¾³@áó‰È/>ˆŸ˜œ’šN"¿ ¨¸´¬¼²ª’ßØtG˜üŠüõÍû[@æ?Ê|t±þö›ÿý—ü æ  ÿ†úÐ|:ôÑÅzÎ }€>3ôûºï¶ƒÐ¿]SYV\›ÅIMŠg³"ÂC®\õó¾äyîì)'{+sSc=„¾ºªŠ’‚¼¬Œ´$@™Ñ—€èCóÅè‹gWóÓý}|¹ÙǹØ—ì+()«ªkÒ:|TGÏÀÈÄÜÒÆÎᤋۙs½|¯ Ü‰KLIÏÌÉ/*­¨®¹ßÖÑÕÛ?4 +-sAdî/"÷‰ûŒÜÿPI»’Œü ËPð?ýÿÃí-ÿúÚêòÒâkÞÙQé½h " ÒA"Ò«iö†ÅBGiREiÒ;ÒEШ» ‰®5jv7[6®ÑlL&«Y³™ì&3ûÿŸsžvïelÌ$;sÏÛû<¼zÎç÷%=-äOæåO¤òËF?¥³ße?ßý|øü1ý‰þ”ê?.7l؈Æ`¼#_6ñ©ø‰¼øÉ ~JZzFùEù‡**«jŽÔ!ù­mräž=÷!È¿äCEò¥™O¾*ø¬hOPó˜`ó¹ÐgIñ/Iè?a¡…þõkW ôÏþá4„þ`_OW{k„~EyiQAî¾Ì´½»vlÛœ¸nõŠ„¸¥‘á¡Aþ¾Þžî®.Nö¶óçY˜›Ížejbd ¯«­¥©è³Ð§è‹Cÿ±ùJô•GÑy û$÷ýiÓÕÔ5´´uõ ûVÖ6öŽÎ® =ùø†„GDÇ&`îoÚš”¼'5#;'¿°ä æ~cK[g·lîß„Ü¿Írÿ©2z?I‘û2¹?1îK‚®'ÜO¸ xCI—}) ~¨3~è3„ÿâŸ.|$ _O÷Q„¿¥©±¾®¶¦ºª‚%aA~^Îþ}Y™驼üÛˆüÒOªŸÏ~Î~/OþLlÊ?ó@غtæ +-c øpÏÐW,èûVz”©ç¬ìIÛSíEÜ{xzqÞóO +-_!øˆøÛxñSÓ32³öíÏÉË/(d‘_QU]S[WßØÔ‚äíîé“?vîÀüK@þÇH>d¾„üG4󿦙ÿfþs>óÉw%gþ/oa¾lè“–Pú—!ôÏþñÌ©ÃÇzv¶57Öaè—æçdg¤îINÚºiÃÚUËãc£#ÂBý|y.tuv´³±¶¢èèúêjÓ§1ôßU¢¯‚_€Ÿ?Àá¿Dáãà:6Øß׋𷷶476Ô× +-É_\x  ?W,ÿ."?F¿T~Ž~Ìþ0Ì~f?t¿Ïboþˆ?¯?áŸúO'€l²Ü°c)=¢_¸‡‰ò„ytÞÿ*G=µž`ÏiO¹'yï½Ø‡ö=z†Ï/Ÿˆ¿K,~n~ÁÂb!òkë›[ZÛ‘üÞ¾þÁcCÃbòÏù—üë7ù˜ù@¾ùhþÓ§\æ?£™ÿ‚Ïü76_„¾œù4ôÉ÷$ +-ýÏ1ôoɆþq ýýÚjúyû³ÒSvïܾeãú5+—ÅÅD- ð]ìåá¶ÀÉÁÎfžåÜ9ï¿7ÓÄØP_OG[SC}†€¾ªªÊd ú“ÄèÿÚ²(Ïoø¼ûS¦"ûjšZ:ºú†Fûómœ\Üܽ¼}ýƒBÃ#—Æ%¬X½.qó¶»ö¦eîËÅÜ?\ur¿½³»o`è%¹ÏÜÇ2{!rÿ rÿ•Ý'÷Tüe‚ŸÀῠ🗅áïêhokm%yYiIÈŸÇÉŸFä‡è§òK£ŸV¿ýÔþÀþ|ù3ý ÿœÿlpppè +-аáÇ`œÃ=C_±%¯ÛSè™ô@=g=ÁžÓžÕ=áÞ? z/>-|¹Äñ!ñ‰øiœøy ~QIiY¹(ò›[ÛÚ;ºÆ'ÿ +-’“#_Èü/e2Ÿ|Lo¾€>oþ òß#gþWOà3úBýëפ¡ßÝÙÖ¡_uø ýÌ´½»vlÛœ¸nõŠ„Ø¥‘á!Aþ¾Þžî®.Nö¶óçYš›!úFúº:ZšjˆþÔ)}%úÊó†G!ûÔ}dŸæ>°¯®©¥­«g`db:k¶™¹…•µ­½£³ëBÏE>~!aѱñËW­Ý°ikRòžTšûe‡*!÷›[;ŽÊæþ Èý[ŸÝ½÷às¸°x]ûÿ$uU&÷'Ä} +-?^T +-ÿó—?…ÿ“›Šà?92|àïïíéîêìhã“¿º²âpùÁ²Òb©üýDþ$9úIöÇÅ’ìûY÷‡1ü©þÞÞ<ÿœÿt¸ À #@g€-=vÒ#ü`Ï%¯91ç)ôŒzö`=‡=Õžç>(8„õ=xOÁïåÀO"âCâKÅ/.-;X~¸¢²šü¶ŽÎ®îžÞþÁcLJGNÊ’ÉÿD–|’ù_±Ìÿ–eþsF>gþOl>ý–Ð| ýï(úø ý]ú_½Œ¡?FC¿Ÿ„~„þ¡²â4ô““¶nÚ°vÕòø˜èˆ°@?ŸEž ]ím¬­,ÌÍfÏ2562ÐÓÕÖÒPôiè3ô©ùJô•çµ,û¢ÜGöIîûÓ¦«©khjëè›ÎÂÜ·²¶±sp^àæáµØ7 8tITLܲ•kÖoܲ}'Íý‚¢ÒrÈýz>÷Ož:3Êrÿ:äþ§·ïܽÿào_Àåþ3r[˜x÷ÿ#¸ÿ*Á/ÿþ³ÿ€ÿÄðñ¡cý}=Bò7ÔÕ©®ª¬8$•?;+“È¿Gý¢ìGû¡û!üÃþ¨¯?Æ?ðOü§€ À&€Ž®€ [n ä÷£3{xcǨQÖ3ì9íP{R÷4ï¡ï9ïYà+?3+[*þ¡ŠÊªê#µu Bä÷ôõ:>|È?䟕!2Ÿ‘Ïgþc.ó¿QùÿeþD™/„>ÖÃ3ÙÐpÿîÛŸ’пrIúíúG0ô‹ +-r÷ÑÐß²qýš•Ëâ–F- ð]ìåá¶ÀÉÁÎfžåÜ9ú¦Æ†z:Úš€>„>Aÿ÷ïŠÐ§æ¿#6_‰¾ò¼ìüNì¾”ýÉ*ªªû3Ôûú†Æ&3‘}Ëyómœ\ÜÜ=½}ýƒBÂ#—Æ&¬X½.q3ÉýŒìœüBÌýÈý6iî_÷årÿ_ÓN#•öBä¾ø²¾æ]¥—õgY÷”¸Ïÿ7\ðsðß¿ÇàÿËŸ üW üþ1€ÿ4À?2<ÉßG“¿’¿©¡^Nþü¼\"Æ8ôÓìGû±ûãÀ~þ€?êÊéÏøçü§ €€€#@g€ =®Šÿ«}š¼èAœGè©ô@½`=bOµGîÃEÜÇÄÆaߣ÷4ðÇ?ƒˆŸ›—/'~}CD~;ü>ˆü¡á ÿ4?†ä_’™ç.ŸùøÌGòùÌçÍÿQÖüŸßÄü_Æ1ÿùQ0ÿ1|9ðáÜ»óÙ­¿ +-¡?Ê…þÑŽÖfýJú9Ù©{Hè¯[½"!6:2<$ÈßÇÛÓÝÕÅÉÞv>CßÄÈP_WGKSBŸG_UUe²}åy«#›û +-ØŸ2•°¯®©¥£«o`d2sÖl3s +k[{Gg×…ž‹|üƒÃ"¢câ—¯ZKrwJzÍý +-Èý¦–ö.Iî_ºrMœûñîr¹îOÜç3íMr_Þ}veâÝ/øŸ`ðsðßø1ø%ðŸGøG~HþHþAHþ^HþNHþ–æF”¿†—¿¤¸ˆÈŸÃÓò‹é§Ùöc÷CøÇ“ð'åAõñþs L€7]œ¶ÜÈîGOú,yÍ›:O¡GêI×ë9ì©ö‘Q"î!ï±ïÑ{øbðQ|ü"~Qq /~ Šßâ·µwBä÷BäBäœøà?ŠäŸ—'Ÿd>%3ÿ Ëüoå2_Æüÿ¾ùúôû¡æO¾Š>~6åCLúõúå¥$ôÓSvïÜŽ¡¿jy|LTDXp ŸÏ"…®ÎŽö6ÖVæf³g™šèëjkiª#úh¾Bô'‰Ñÿµ5Qžÿ“3û辊 +-²ÏrØ×øûu\Uyp|°ã Ì´Jro–›{³} Ù÷}!; «Š²¨¬6ˆ²VhVé¨È°T[*KÙµˆfß0@§LAÐÚ©NŸå¼ï9÷æÜ !Ngîó19ùö>¿ç7wO“Ùâãì?iJ@`phDTl|RJzfvn~QÉœù˜ûKW¼¼šsÿ ÌýJî±Íý†¦–ÖöŽ®nˆ6Ê}vr 7WÍýAt_ÿ·ö‚Ÿ¢ á¿&à§àð_þüÁ¾à‡ä¯–É’¿ ’äߣʿý-–› _D¿¦ú9ûE÷CøÏ£ð§ò§ôçöWø'ÿé¨'o_<| hûŽøU© OIÏУôD½b=cÏÚÍ,Öpy/úž_Sø"ñøÛXü·¶«âïAñÿ¼¯ "ÿ Œüjˆ| ¿æ<‘éóËzäcæ÷ÞÀ7c7óE3 ØüõÌ¡O/ß ý^ +-ýŽþCÿ] ým[(ô_^±ô…EúsJŠòs³3ÓS’âc£"Bƒ¦PèûûùXÌ&@ßàê"CÐwrRÌw ï˜Ç]öŸ”ìSî#û¿áj0º{˜¼,>¾#G=5vüÄÉS§…†GÆÄ%&§eLÏÉ+,ž ¹¿pÉKË)÷7m¦ÜG“ûUÕ'O©¹_ßØܹß[Ü‹;ÌÑFɦ,ï ¸ÿƒ¾û6Áÿµ~Øa„¿׸ÇüŸ]$ø!ùO©É“ÿÃûµòï`ù•èߦ~²Ÿè×ØÝÏáø[ë¯ðOþÓà À'€^ºé| ä¤JוQ¾I§?`åÉy€¤Ô+Ö#öRû9sç î!ïeß³÷ >z¯Müm"ñIüZñ÷ƒøùG0òQäŸ: ‘äcäëO™ÿU/>ì‘ù_ÛÏ|ù? ŽùÈü{lþmê„^x,]ím-ÍõµvCÿú›ÖSè¿´dáý⼜éiɉq1‘á¡AÓ¦N&ôGúz[¼LîFƒë‰þ0 úl¾}Ç p†hÝÿ™šûÀþP'gg û.£›‡§—ÙÛw$äþ¸ ûA!a‘ѱ I©éY3r fBî?ûübÊýW×Qîÿ^“û‡)÷OËܯkhj†ÜïìîÁx“¹î£¸ÿÝ ¹/áÿ^Ù_ýàgøoIø»­à¯¯“ðcò#ü˜ü'(ù+0ùAþ2kùõ£Ã‘ý¥œýhÿR°_ *©?ó¯øO€/Ÿ¼xè Ð!àÉÒñ[ú‘Gåyz^PÏÖ3öR{ª{%ïÁû¥è=~©ü ôßZü2ÿð‘ +-Šüù@>F¾ ¿®¾/ùðRn⿆ýd¾ùÿ\óïãƒáLÀп‰ÿötwv´µ676À¡Ð¯9«úoP迺šBÿùgçÏ)™Y;#+=5)!6:2,BÒ„qcFûûùz›½<=ÜŒ®.ˆþ/~Nè;;; í‹þúŽÀ<œ}vØw5¸¹{šÌ?ÿÑ”ûÁ¡Q1ñ‰)i™Ù9ùEųç=óæþªRÊý­¿•¹¿Oæþ™sJî×Ö76µ´µwvuÃ:cî+îÃósîÿS²ÿˆîÿ¨ë¾ýà'øoÃ.cÁá:ü]~‘ü*ü”ü§9ùAþrù÷"ýRþ7µôÛd¿ì~*­þ’ò\>xðà ;À§@œáºþ(þ @0¯@ÒõŠõŒ½µöÌ=ä½ì{›Àׂÿ¦Áßk#~9‰‘Ïâ_ä‹È$òµ™oýbÃ|FŸŸ‹jþ]Åü[71º»:Ú[[š ôÁ|ýóç ô÷ ýÍú«–cè?3ovqa~NvfZJb|LTDhp`‡¾¿ŸÅlòtw3úJèë¡ÿ„}Ç<ÆhÙBeÝwröeîûFw“—ÅÇwä(bê´ ðÈ踄äÔŒé3ò +-fΚ‹¹ÿâ2Êý¯÷Íýcûgk0÷Áýº†ÆæÖ6Ìýk¸Ñ·þFë|ç.î2¬òÅ}ÝÜ÷•àðßé~%ù~MòŸÉOòWù”íWåßÙ—~›ìGûWƒýŒ?—¿ÔŸùWü§€O€rðÐàK@S¨3âwüe1+̃ó=K¯PÖ3öR{®{æ¼_ÞÛ~_ðwªâï/; įâSäkÄ¿"ÈñmÈÇim„þ+$òíf¾µùø^´æ‹Ð‡wB¯D˜£žG— ý+—Áü úÕÇŽ–Cèï·ýuú/.†ÐŸ;kfAÞŒ¬ŒÔ䄸èÈð iS'Oèôõ¶x™<ÜW }B8 ï䤘¯‡þÿZÇüŽ.ûOJö‡IöG¸Œnž^fo_Èý1ã&LšŸ”’ž™›_T‚¹¿èÌý5kEî¿­äþG‡ŽTVÇÜ?îqµ¶¾¡©¥µ½û:¬µÈý;°Ð°Ï÷Ï}ø¿ï'øa§a©a«µðwümvà¯ÑÈ´R+ÿ>»ô‹ìWíü×0þPþ«V®PôWùWü§€O€8tèð-°7üÁlúx.+̃óRz ^µž±W´_±rÔ=s}¿Võ^¾]ð÷iů<ª¿ÆùmD~·ùËü (ó­A}(Væß#ó }|×{ºá]´675Ôaèö׿`èŸ8^Uaú[)ôK)ôŸƒÐ/)ÊÏÍÎLOIŠŠƒÐŸ2i¸1£ýý|½Í^žnFƒ‹Šþ0 úl¾}Ç<öز/rØêäìŒì£ûȾ«ÑÍÝÓd¶øøù‹Ü Š‰KLN˘ž“WXå~ùÑcÕ'!÷/|zñæ~}csK[;¬7,7n6»÷¿í~Ÿà×Âÿ»ð·Køû“¿ +-é×—_¥_d¿´ð_ÏøCù¿²º”ÒÛÅòe +-ÿèÿqàð À#@g€r æ+AŒüÙ|þ†>Ç¿[ œèAz¢^µž±Gí!îKW¿Âuܯî¥÷"ðUðõÅGð«ú_’ßþÉÿI™?æßÇçAÿ *¡æ_ƒ7ÑÞÖÒÔX_«†þÉêc•å‡?¶ ýúË0ôŸ†Ð/Ì›1=#-91.&2<4C<†¾ŸÅlòtw3¸ºŒPÌô†:ÐwÌ`Ï­û¶ìCî—¹ïâj0º{˜¼,Þ¾#G=E¹?-($,2:6!)5=+;· ¨dÎ|Ìý¥2÷ù¿[ÉýŠªã'>‘¹ÿe]Ccsk[G'l8ì·ê>l6§œ²Ôwßj¡åJ[?ïõCàïAø;~›ä·#¿nôËêçìWíß²ùu ÂÝÚ×(ý•öWøÇü‡ .Ÿ:xèð)àY`5òÇüý)OÎô$=Pom=bÚCÜ¿¶v×=pÿúæ-ª÷ø²ðí&¾Žø6‘Ïäw ù= +-ù7ù·­ÉXæ’ùßiÌ¿+Í¿Ñ žC[KscCÝ—W8ôÏžþäÄñ£G~T¶ïƒ?îÞ¹ãíí"ô×Pè/‚ПSRT›•žš”4BÐ÷õ¶x™<ÜW5ô‡Sè[¡oe¾}Ç t†Øæ>±Ïî#ûÃ$û#\ F7O/³7äþhb? 084"*&>1%-szN~añlÈý…V¹ÿ;‘ûû?üøPy%äþ©3œû_\­­ohjimï€=¿ŽKŽì³û÷ÈýªûV%7÷õƒŸáÀðÓü×þN„_$­Uò?D~I?eÿŽw9û¥ý€ÿV‰¿ÔŸÚŸù/U€¸pðÀ 3€w€OÏb›‘¿ ÏðPyf¡'ézõ”öØö÷7ýZp¿¸—Þsàø»vKð"¾Uä׊ÈGò;‘ükzäß!ò•Ìä?~æ÷kþ·ü,ðMù'󿂧¡µ¹©¡¾ö*˜ñÓóçÎœ:Y]UY~BÿOïïÙõÞ;ÚÐ_‰¡¿B¿¸0/‡B?>& +-B?0` +-„þ˜Ñþ~>Þf/O7#„¾D¡Ïæ;ÐwÌ ûjî;;ûè>°ïjps÷4™->~ûcÇOœ<r?<2:.!95#kFnÁL½ÜßN¹ÿÁ¾²ÿ°_çAQßgÇÇô¯"©ù£Ê)È!jÒ4MšÛûÊÕ$¤mÚ¦­mšÔ;jµ‰­©&QåPîSîû^D…öbw9TiI;íh2éó<ßï÷wì.xÉ´³Ï¿»û×ßë󦸴¢ªrÿdËé¶p¿»Wo0™-ýð²Ã«>*åþUµû·§Ñý‰‚ŸÃÝ1ü£—GF~h¼–ü&žü +-ùÛl䟀~ÊþÊ~a?àÅð‡òçú#ÿ{ÿŸò €#@3€;@KÀn»Ý‰Oè{â/væz’ž¨çÖKØKÚ³º{á=~ +-þàۈߦŸG¾‰E>É¿ƒIɧ¿ ™?æ3ô¥ ó¯“ù,ôÁü‘á‹À|KŸÉ ëíî:öLÛi ýºšªr +-ýLúaRèo•Bÿ'<ôWbè?ý ¡à·BßÓÐçæú..6¡¯Fÿ›VÃyÿãgËþ·”ìÙ—rßÍÝËr?0HÎýe+V­¥ÜÛ>÷÷³ÜOHNËÈÎÉ/,)«¨®Õ@îŸjmï8שíéÕMfk?¼òðÂÃÛ.Ü¿îÃ[~SrÿÎÜŸ$ø•ðßTÂU ?4Þ?&ÿ &¿…%?Éß­u$¿2úý`?ÐOÙ/ÙÝÏßÊ?2"õ§öü‡ð €#@3€;@KÀî/v'>¡ïíÄ_üM0Ð é‘z²ža±GíÃ#"YÝ3îEß“÷ø~~_™øŽÄ§È×Xä#ùƒƒùŒü+ðGÀÉÿ#ŸÌ¿'ò§ÇüÛÜü›øÇ@ Ìü±+`þ¥ Cý³É¨ïí†ÐïhÇÐoÐÔVW”•bè§&'ÄÇFG@èïµ ýŸÿô­¿þ†þ +- +-ý'ŸxB?(‡¾»›ú®úNô7s7K龂}tÙ§ÜgìÏsó Ü÷X¸h‰Èý¥ËW®á¹ÿåþF‘ûŸBÜOIÏ<ž[PTZ^YSW߈¹r_Û£3ûÌVH=½Ë_·û_2÷ïÿ¸€^{Lþ!Hþ~L~’_Ïäïò·3ù¥èWÓ/g¿°?ìgáOøsý©ýÿä? €X˜ÜšÜZv»ìN|Bßû,˜Gè…ôŒúƒ*ìQû˜#±±qñÄ=ä=xŸ*¼—_ ¾”øLüv!~_OâcäùCHþ0ü³'ÈŸ|úSæ9•ÌŸÀü;¶æ_“ͽ Ï~h°ßjî3êu=ÚN +-ýæõu5•å%E¹ú‰Çâb ôC!ôw‰ÐŸ‡þ›?zõ¥u«W.—CÑB ýù^žúú³ }4_B_e¾}çMýfÙæ>±/rßsÿ;Ì}`sßÇ×/ 0hñ£<÷_\¶bõÚõ¯¼ö†Mîÿr/ä~Dtl|BrjFVN^aqYEU­¦¡ Üoï÷»{uSŸÞ~x÷GÈ}`ŸÜÿbæÜwüô¶«á¿Æàÿ'Â/>¼ù,ù/Šä·bò£ü:¥üý­§yô3úkýH?f?ÚŸËíÏÌHgáÏÊõGýÿä?X6¸04¸´ìöØø„¾·±O0Ð éõ2ö’ö¬î÷é™Ü{ üB |¿‚Ï¿‰'>Š¦C)¾ÅÇÈ·ŠÈ¿È"žüF>=}$Å·!º2ÿÍÿ‚™ÿ93ö~pÀjé3t½Ý]d~ËɦMMUEiqa^NVFjRBü‘èˆCúÁúñÐÿ-†þÛú¯¬_»jŲEè/ +- ðóõñö‚П7—›軸H¡ïDßy3v¶ì‹Ü'ö!÷]åÜö=½çû.ð„ÜŒrÿ¹–._µfÝ˯¾þæ[˜ûXîoƒÜß¹w41%-3;7¿¨¤¬²º¶¾ñDó©ÖöŽsÚî^½Ñd÷A(¾QžûÂ}|çoñ÷}Jî; +-~øÿ= üŸ#üRò_¸üµüZ”_ýD£L¿È~a?t¿Ô? õüsÿùÀ° €  ÀÀ %`·ßîÄ'ô=4þ þò9Ð3é9õÌz=jqŸ’š¦àž÷½ð_Ÿ¿E‘ø(¾V-¾…‹CIùÿÀÈ—É¿~wòm2úÍg¡æÃÒô[Ì&ƒÌï<×ÑÞz +-B_S[]YVR”Ÿ›™–œx46&òpXh„þNý-,ô%…þš•Ë—¾ÀBÿ±%úþ |ç{{z¸+Bß•BŸ£ÏÌW£ÿM[á¼ÿ›S徂}tÙÇÜŸ3çdž›‡§×|Ÿ~ !÷‰ýgŸ§Ü‰çþ»Rî¹ ¹("úH|BRjzÖñ¼‚âÒòªšºzÌý¶3gÏwj{tzcŸÙÚ˜ûä>¾ü{ðâßš ÷åà¿ü(?Á?ÎágÉò (å×£üýrô#ýÍý` f¿lØ/㟕™ú3þUþÓˆÀ ÀÀÀ`K@wÈÁ‰Ïè‹ø¦<:Ï é9õ²õˆ=Ó>#3Kæ¼/’½ÇÀ¯ï%ð1ñ[åÄñ»Q|½RüÁ¡!&>E>‘?Îȇ‡~äO!ó'3ѧ'ÏæžÌ»‚3ßo5›Œz]̇Ðóëëj*ËK‹ +-òŽg¥§&‹?qè„þnýíªÐC5„þóÏbèïQ +-ý>ó½<1ôýGæ ú³ }4_¾3ô7ý7Ë6÷‰}‘û.û‹ÜŸ¹ïåíãëç¹ÿøOþðÛÜÿÍïÞÿËýû!¡a‡#cb&&§edçä–”UTÕj„û]ݽ:ƒ±Ïb .^¾,»L¯ûS‚åÇäÉ?|é¢CùUѯ¢¿ è‡ìWÙ_ZRLáOå/é¯âŸü§€`@#+@;À– šÏ݉Ï蛈<*̃ó’ô@=·^Æ^Ò>µ'î‹KJUÞCàøM*ðU‰ïP|xÌ"òÇ0òÇEäOBþíÉÈŸ&óoIæ_•Ì½ ™Ìï3t=Ý]çÏ‚ù-'›45U¥Å…y9ÙiÉ Gc£# Ù¡¿ƒ…þï1ôß¡ÐyÝšUúÏ=ƒècèúûùúx{yú"ô})ô9ú9ÑwÞLû"÷‰}È}WWÁþÜyîžÞûþ )r¥mîoÚü§íû»ƒ÷î;p(<êHܱ¤”ôÌã¹E%å•Õµõ'šOµ¶wœë÷õ¹ 8¢t`L·ûÿQ¸ÿ•Â};øoØÀÏ“ “ßF~+Èßòô:ý¶ô·4Ÿ´µ¿ª²‚ãOåú þþÓÀ° `@+€3À–€.Îá‰Oé«ø#Î<8Ð3é‰zÙz†=Óž×=q_QYeëýÉæ[ðyâëô¿Ä·Ú‰?ŠâK‘¯ ÿÆäß‘ÈÿêÁÈ0óGàºÁ«¥ÏdÐõ‚ùç:Ú[OAèkj«+ËJŠòs³3ÓRÅÅD…‡Ø÷Yðî!ô·nÞ´ñƒ÷6Ø…þÓOýàûú‹òÐ÷p§Ð'ô]])ô9úŠÐÈi¾ófèTî+ØG÷‘ýÙÈ>¸ì»¹{ŠÜ_,çþŠUkÖÛäþ–mî€Üßzðpdtl|BrjFVN^AqiyUM]}#å>¸¯íéÕMfKÿ¸0ÌÜGîÇýûì=uðß~»äÿ;&?¨`'¿*úþN™þ¶ÖÓJûê5šºZŽ?•?Ó߆òŸ€M®Î ]âÇ?¦ï"ò¨<0Îô$=POÖ«±gÚóº'îkë4šú¥÷§[Ûdð;ørâÛ‰?‚â_Añm#ÿ~ÈÐÌŸÜü×ñ1+͆';Ðo1›ŒúÞm§0¿¾®¦²¼´¨ ïxVzjRB|ltÄáƒûCö|¡ÿçm[þH¡ÿî/~æ0ôƒxè{BèÏý.šèÏ&ôÑ|5úÎÐwÞÌ]îû"÷] ÷–rßrß—r‰ÃÜÿå¯7¼÷ÁÆM›·Bî¼;ø³}£bâŽ&&§edçä—UTÕjšÈý³ç»´=:½±Ïü_öë+6ËëŽã¸Ú¢T8†R© {5´jè}Õ›†$M˜3lÀ6ØÆ{ï½÷Â{ï½÷^˜ Þlc›Ù4Š !…Ò`ˆÔó?ç<ûymƒÁéÅû¿}ÏÃ¥ÏïËë>É}ìþSìþówæþÃÈ$¿bùIôËÐßÕy“d?g?Š?Ñ_Ä?öY˜´x`ðäÐ1Ppô~ ßå3γÒ#ê±õBì‰ö´îqÞsÞ“À¿ÙÙ%>Iü…ÅE>w…äÏ/‡|Aæ/Á|@_dþ2¿·»óƵ+—:Ú[›êª+ËKŠ +-r³3Ò’â¢#ÃC‚ü}¼Ü]Pè[š› +-C0ôÿ°cûÖ-‚ÐG諨°¡OÑÿ¥}å½ï“°Ïä>f循*ËþGë7nÚ¼uÛŽ‹sÿKÈý£'4!÷ ŒÍ,¬íœÝ<¼ý‚Ã"¢bâ“RÒ3sò +-‹K+ªjê›[/\¼|õúÍ.äþàÐÈ(vfvîrÿŸÄýÇKrÿõ* ÿ¼~"ÿ36ù~Åòß»;77;#Œ~ýý}½½=Ýœý¸ûYüqùSýücÿÑ€ @#€gv nÁG_ÁEðe ã<•S­`qOëžrOûžñ¾»§··¯Ÿ¾0ñÑsîî½ħäÿ›’OÄ·ä/Ùü§Ø|úÈü{è9=u{bltdh°™C¿½µ¹±¾¦ª¢´¸ /'3-%1>&*"48À×ÛÃÕÙÁÖÚÂÔØ@OQèÿùO»>F¡¿•†>EŸ†>EŸúJô•÷¾Oûà>°ÿ!°Ïåþfœû»Ê}CsK{GwOÿÀðóѱ É©Y¹ù…%e•ÕµõM-mÔýž¾þÁá‘Ññ‰É)‡¨ €?66>Á‚Àñqâ+_ùK!ÿí3ÿ'á®/jþCžù·†úù7®]¹ÔÑÖÒÔPW]Y^RT›‘–œäïëåîêdokenjd wFû”æqý½2¡¿B#?ôUù¡OÑW†¾òVì$ì3¹Ùä>bæÍ[¶mß)Íý¯öTS?¦qRKGWßÐÄÌÒÚÎÑÙÍÓÛ/08,"*6>)%=3'¯°¸´¢ª¦®±¹•ºßÝ‹ÝCîOc÷pî?YÄýWÞþ×øùÉÿBœüŠä'ô?`¢¢èŸ"ôÓìçÙOð—èOùgüG@&€n^˜ºüŽý<äAy`œGÐéõÈz\ö{±ö„{‘÷8ðü)þ ŸˆÁW(¾(ò_ˆÅ_.ùò濘ÿLùsè?k“·ÇÇn !ó»;±ùí­Í u5Uå¥ÅyÙ™é)‰ñ1QaÁ~ÞnÎvÖ–fÆ$ôO@èïC¡ÿ© ôw¡Ð߆Cÿ#b> ÿ!E_úJô•·B§€}âþjqîoظi‹4÷ÿŽrïC‡×<¥}F©¹•½“‹»—PHøùèØ„äÔŒ¬œüÂ’²ŠêÚúÆæ¶ /_½~¹ß?04BÝŸUäþ3û/ß•ûBø_‰á—&?–ÿ;EòËÒÏf?c¿ þTÌ?®ä?X˜ØX²d +-:ú +-Êóà<žR¬ÇeO±ÇÚK¹ç¼g_|EâÇÑÈ—ÿæÙ×bó\Äü<óG†ú{Áü«—/^hmn¬¯­ª(+.ÌÏÉJOMJˆ>èïãéîâhocenbtŽ†þaú{¸ÐßÍ ý \è#ôUTÄ¡ÿ+¥ùÊ[Ù“¸¿J.÷×­Ãì rÿ/lîŠrßAµ#ÇNœ<­sVßÀØÌÂÚÖÁÙÕÃÛ7 (4"2&.19-#;7¿¨¤¼²º¶¡©…ºßÕÓÛ?842:6q{ +-»1÷»ÿúux#øEò?•—_Ž~±ý¤ûEøSý9þ‰ÿd````È !hgÖ@îØä}eœ'ÐSê‘õì©ö"îy}Ïy/ ¾¬øO%â¿Gò˜ÿBdþžù÷ïÎÍÞ™žº=16:24ˆÌïºyÌokiª¯­®,+)ÊÏÍÊHKNŒ‹Ž  +-ðõòpur°µ¶056Ð?«s…þúŸ‰C'„þ&ú¿ÿ2?ôMC•2ô•÷sœ‚Üÿ€Ÿûk™Ü_Ïæþ¹¿åþþC‡ÕkœÒ:£{ÎÐÄÜÒÆÎÑÅÍÓÛ/08,"*&>)%=3;¯ ¨´¼²¦¹ßÞqé +-v¿¯p˜º?³ˆû/tYð¿–Ÿ—üù¿ùŸùyÑ/K¿Ð~>þTÜþˆâ?º0°0dè»(sܯä5þ˜çz"=¡žX°ÇmOµçq/ò^|^âcñŸ€øßˈÏ|1ù¯—Aþ2ÍŸ¡æ#ó{8óêj*ËK‹ +-ò²3ÓRãc¢"‚ü¼=Ýœíl,ÍL ÏéžÑ:¥q\ýð¡ý{¿ü\.ô·ðC- ýÕØü¡¯D_y+|¿¸Ï²ÏË}Uœû¿•æþn.÷?C¹@íÈÑš§µÏê™ZXÙÚ;¹º{ùø†„ŸŽMHJMÏÊÉ+,.­¨ª©kln÷¯ÝèDî€ûã“‹¹ÿûóËraø'¿¬ü8úåègíçu?ÅŸÓ·?âŸø/X¼0dè»*sܯä5þ˜çzž¥žX°ÇmÏiO¹çõ=ë½ø8ñåÅ_(òßù2æÏ3æã¿üé8ó+6¿™ãÚ•Kí­ÍÈüªŠÒ⼜ÌôÔ¤„بóa!þ>žî.Nö6Væ¦FzgµOkž8zDíÀ¾¯¾X(ô úkTUù¡ÏG_i¾òVþ$¹¿ŠÍ}Â>äþo¹¿]šûŸ£Ü?xXý˜ÆI-]}Cc3Kk;gWo߀ ÐðÈ踄äÔŒ¬ÜüÂ’²ŠêÚzÎýnäþÐð-Öý{|÷óÜNÜÿ¯Àý÷¿|ò‹åÿÊñÈÒÿ ¡ÿkB¿ÐþYb?Æ—?£ÿ(èOø§þÓ€€ À#@f€Yv$ÇýÜIÞãoypž‘žROÊa?Ø3ÚãºÇÜO“¼zÁÿš€ÿ >L4ÿ‡ÄGþ;'ÿMÍŸœ½5<8€ÌïdÌo¬Gæ—æçde¤&'ÄEG†‡ùûzy¸:;ØZ[˜êëêhÔ8¦®vpÿÞ@èÿí¯$ô?á‡þz~èSô•¡¯¼ÿ‹“°/Ì}”ûkx¹¿QAîrÿБ£Ç5OiŸÑ;gdbnicïèâæéퟘ’–‘[PTR^ î·´]¸xù*¸ß˹gÉî¿\¾û<ø’_‘üÏyò éÿ–­þúqösö3áËŸI¤?Ë?øO€Ý²dzÙ1PxÌ+òQ?ež…¤'ÔsØíqÜãºgòžóþ#øLá+ÿì×wp”uÇñ?ŽÑñfîî/=•jBz("B ¤g“MÏfÓ{ï½÷ºé½÷JGDÄóTôË9RæŒs ‡w"ÜIf¸_y~OÛçÙ’8#™y¾ï³ì3óú¼—ÿšÄç‘Ïz z}\óª™^Ôm¾ùWYæñÙùsÁæŸ> Ì?rèÀÜÌÔøèð@_wg[KcCmuEYqa^vfZJb|LdxHÒß×ËÃÍÕÙцþ¶­À|-¡ÿ[ÁЗЗî×:Žû¿aåþ³ê¹ÿÎýU ÷×›šáÜßbs¯½“‹Lîéí§ ‹ˆŽMHJMÏÊÉ/,)¯¬©S5µ¶wõôMLÍ÷;ŽÝÿà,pÿSèþ…‹—EÜ¿ 8áºÏ~ž‹„_-ùøÅäÇôßbW?¡ŸØºŸ…?WÈ?ã?¸hààÀ3@-ö£>ŒžDÌÿ}%=¤ž±·=K{÷¤ïIàðIáß"à‹ŠŸˆ¯%òCþcNæëdþ<4ÿmþþÓ™Ó'O?Ìß7351:<Ø×ÓÙÞÚ¤ª«®,+)ÌÏÉJOIŠŠ V*|½=Ýe.Žö0ô­­¶lÞ´q½HèÿúÏR¡¿L2_º_ÿDrÿäþsZs¸¿uÛvûvήnr/ÿ€ °Èè¸Ää´ŒìÜ‚¢ÒòªšzUskGWoÿÐÈØäô쾃‡YîŒÜÿR›ûwÅÜ_Lðkƒ_XþŸhùyÑOÓÒOÛÏ +-Œ?Oâ?ÕÿhР À+@í½¢G>…Â_prIO¨ÇÖ󵧹'yO{ +-||NâSâÿ$.þ/E¾HæÓæߣ̿«ÉüËÀü/¿øìS`þYÚü£‡웞ìïéêhmVÕ×T•—åçfe¤&'ÄEG†…øùxÊÝ\@èïÜŽBÃ:KsS#Cƒ5j¡ÿ;úÏ!óŸ‘B_º§çDØ×1÷×oÜ´y‹•õ˜ûŽÎ2wo_…2(4<*&>1%-3;¯ ¸´¢º¶¡±¥­£»w`hd|rzn?tÿ­·O½C»ÿ¹îîß#î?váð‹Ëÿ@H~!úyÙOw??G†èÿ<ö/ú€GÏY]ŽúüEü4ú&=”žP­g°gkÏpO÷=7ðÁWÿ.â/ômqÍȘßÍu1ÿs`þÇØüSÈüƒûg§'ÇF†ú{»;Úšëk«*J‹ ò²3ÓRãc"ÃCƒ”þ¾^î®Î ôwÛì BßÒÂÌD—ЗЗîi:=sÿE”ûk LLÍ-×mÀ¹¿¸ïàä"“{zû)ƒÃ"¢c’RÓ³rò KÊ*«ëšZÚ;»û†FÇ'g€ûGÞxºÿî{ÐýO4¸¸ÿ@º/ü6*"4X©ðóö”Ë\œöîÙE‡¾…¹©±úÒ-½Ó+÷Ÿg羉™…%É}›Ý¶vŽÎ®n^>þA!a‘Ñq É©Y¹ùE%å•5uª¦ÖöΞ¾Ááщ©™¹‡h÷ßÿÜ×!øŸP§Yò?äÈÏŽ~uúÕì§ðÿÆêOø'þ£@ €&€jè%ÐzäãóÔã´ó´ô´õ{¨ý÷X{Š{5ï…Á§ÿ'ñ(¾¦w$’ùæß¡Í¿Á˜EÀü÷ßÃæ¿qš?5>:<Ð×ÓÙÞÒ¤ª«©,/)ÊÏÍÊHMNˆ‹Ž ðóñ’»¹:;ØÙ²B߆¾ ýåRèK·´NÍýe:æ¾±©¹Î}+k˜ûöŽ.2wo_…2(4<*&.19-#;· ¨´¼ª¦^ÕÜÚÑÕÓ?8<ÜßÇvÿCàþy®ûW÷oÐîß¡Ý¿GÜ ~Vž<Ñ$¿üÙðó奟g¿:þDšÚ4x¨À+À,G?ñwü Wièê‘õ{¢½:÷<ïÅÁWÿgžøº“/ðv4d>6ÿÛ|ðËßÒÇüC€ù£Ãƒý=]í­ÍªúšªòÒ¢‚Ü쌴äĸ˜ÈðÐ ¥¿¯—‡»ÌÙÑ„>2…¾ú+µ†þ2É|鞶Ó?÷—ÃÜ7Xkdbfs¸¿mûÎ]¶vN.nrOo?E`phDTl|RJzfN^aqYEUm}cs[GWoÿàÈØÄô,vÿÄIÝ¿ôîßEî/2øµÃ/"ÿÏŒü"ôóíÀéOóOû-µÔ ïŠÀñ>BžÄßóFzšzd==Ô^€{5ïÅÀÀ_£ø‚äkz/Bä‹d>1üÒà7f›ÿ5cþy`þ‡ló÷ÍNMŒó{»:Z›ëk«*J‹ ò²3ÓRãc¢"Bƒ• +-?oO¹ÌÅɘ¿sû¶­¯óA蛚Ð_-…¾tKóÙ×”û/-_±’Ê}3û7mÞbe½Ãf·­£³«›‡—@`HXDtlBRjzVN~aIYeumCcK[GwïÀÐÈØ$rÿè±ã'NžFîÄqÿkèþUÊ}?йÿ#tŸ +-þû ~-ðë.¿ ýœìçØÏÆéÏåû€š2Ô +-0K í˜Ï_c˜'Ò3Ôó°‡Ús¸çxÏ |að,¾æ7Â{lòÕÍÿ‘1ü Èü«”ù—ÔÌ?yâ86zbld¨¿·»£­¥±¡¶º¢¬¸0/'3=%)!6:",80ÀÏÇKîæêì`g»Û…þ¦ëQè¯5|…þKÚC_B_º§ðôËý`î¯Xµ復¹åº ¯R¹¿g¯½£‹ÌÝÃÛ×? ($<2&.!95#+7¿¨¤¼²¦®¡©¥½³»¸?Ý?x»†çþ%âþ·ß÷Qð#÷€îß¡Ý ~á_€ü:Òϵ_¤?æù/Ù²dè»&p¼POþ“|Óu–ôˆzl=Âi¯Î=×{ÝÁ_˜ø:/˜ùÄ|øƒ_÷øMo ÌÿþÚwß +-˜ÿ2ÿ40ÿØÑÃÐüI`þ@owg[KSC]ueYIa~NVzjrB\tdXHP€¿¯—‡»ÌÙц¾µ +-ýu(ô Ö¬^µ„>m¾úÒ-­Ó?÷_^±rÕšW ×›˜YX®‡¹Ý¹ïàä"“{zû*”Á¡áQ1ñ‰ÉiÙ¹E¥åU5u*è~p¸?·_“ûóØ}üÀý›ÈýÛÐ} ÁÿˆOÎbá•_„~žý<üý1ÿØö `V€½ZõÌuò=Ô÷ÞdQ­GØ3Úó¸ç{/ +-¾ñE¾N™e>0ÿ6d>2žeþ9Êü3”ù÷óÇù}Ýí-MªºšÊò’¢üܬŒ´äĸ˜ÈðÐ ¥Â×ÛÓ]æâ„Ìß¾ ˜BßÒÜÌ…þª•+^†¡Ì—B_º%yzæþqî¯104265·¹Ü·²ÞaÝwvu“{úø)ƒÃ"¢bã“RÒ2³ó +-Š¡ûõª¦Väþ0pFÝýsÈý¯.^º Üÿ†ã>~àŠå¾Á¯~½ä×N¿šý,üYúcþ±ÿÔP @M³œ%Ðv¬gó”óDzL=¶cÏҞŽš÷º¯§øº¯1óïÂÌæÿ‡oþ7ÀüË—.~EÌ?Ë5˜? +-Ìïélo…æW•—äfg¦¥$ÆÇDE„+~>žr7W';ÛÝ6;¬­¶lÞ´qÃ: 3Scú+Aè¿H‡þï¥Ð—n žî¹Ýgrß`­‘‰™¹åú ¯¾ö:Ìý]{öþŸýú +-Žê:8>yH‚Aˆ‡0IŒ´½i«VÞ«$@HB½÷Ž„ +-BHô–1¶‡`lOÜâ8÷„PGmW»«¶SœÓÛÐ=‰óÛïÝ»«»2³ßû=gu~ß_+VE¬ŽŠŽKLNÍÈÊÉ/,)+¯¬®­kضc÷Þ‡^8rô•cÇO¼Éç~;r¿oÀB¹ÿÃ}þëXð#§÷Ý¿[øþùËÏK¿³ýLü™úüþ €ZÔ`o‚±†ùuy4A=a=Ž=S{&÷<Þ»ß3ñÿ;Æ»»%Ÿ‘ù¸ùèáå0óá#Òü ̷̄ ôñ™ÿ0ÿÏ`þ±WŽyáÐþ½»wl«¯«­®,/+.ÌÏÉJOMNˆ‹ŽZ± +-B™¡h4è4*¥\&‹üPèãæ£Ð÷ñ†¾w&àüJXîûR¹ÿGÈ}‘D*S(Õ­Þ`2Cî“î‡G®‰Š^Ÿ˜’–‘›_TRVQYS»¥aÛNä~ã‘£¯î¿ëÚ}ûÐðrÿû¿î£à×û·ûî‚ÿ)ÁÏ‘lúùì'ðçÑŸàŸZä`,ö&{XßÑÇ‘Òß&o¼ëJ{‚{>ï…ƒ/D|ÈçÏü;(óÁük×°ÌÇ̇ÌGæ ÙÝ›ÿ&iþ½»wnk¨«­©¬(+)ÊÏÍÊHKNŒó×D†ƒù‹Ì›æ›M½V£V*dXè?ïqè{Ñ÷ÎÿáÉ}pá>Ê}?‘X"“+TêÞîÏž;áâ¥ËW†G®]³>>)%-3;· ¨tCEUÍæ- ÛwîÞwàpã‘—Áý×¹î7û­í]˜ûVÌýQÌýüó‡ãÁ‚lCŒQîóÿONŧò»¤Ÿm?‰?[‚ÒzP+€½<æw8Ò“ÖØs´'¸çxïüñˆ/˜|—™eþ-Xˆù˜ùxæcæŽ ;ì6«¥Ìïêloó›æ¿K˜ÿêÑ#‡ìCæo©­©ªØPRT›™–’¿>f˜¿rùÒÅ(ôg†›z]€Z¥K%bú¤ùÞÐ÷΄a¹?•‘ûÏÏð‰¥2¹R¥Ñê ¦À °Ysp÷WE¬÷ã’RÓ3sò +-ŠK7lDîoݾsËý·yÝïéëGî;Àý‹¸ûxð_¾Á þÛn‚ÿ ð ¿0ùÝÒϵŸÄŸ«?å?¹è À\N›ÀÍ°?ºÃ8Ž¼‚¤þõ#8Ú“Ü;y/|aâ»%ÿ?îÈgfþm,óÁü+,ó/]"Ìïqiþë`þËGØ·gçö†-›kª6n(-*ÈËÎLOIJˆ‹Y·vue~XHP Ñ ÓjTJ¹L*ùÏ`†þToè{gb‡¹ÿû?@îû‹$R™B©Ðê &sp(¸?oÁ¢%ËV€ûQѱq É©éY9y…Å¥å«6!÷wíÙwðpãKàþk\÷Oû-­í„ûƒvǸ‰á> +-þkdðßqüã‡ß…ü‚è§íwŸҟâŸöŸZô +-pÚž ëúìûNÖSØSÚ;sO{ï9øB×ùIé—$Þ“ùwÈÌ¿†2Ÿ6ÿ[ÂüAë˜ßÝÕÑÞÚæŸb˜ÿ6×ü­[6oªÚX^Z\˜—“™žšœ æ¯Z±lÉ¢óæÌóÍ&ƒ^«Q+2©D¡O›BŠ7ô½3±Ç£ÜÿÝt,÷ýDb‰L®P©tzc ¸?s6á~x䚨èõñ‰É©Y9ù…Åeå«7m®ßºÃµû߀û͘ûÝ=½ýÖA›chÜGÁ¹ÿU<øo¹ þÇ´Vã‚_¨üüôóáOëOóOûÏܬ%à¼ Ü ç»{¬C—=tÆžÒž—{·à ßsòó‘™2ÿ*žù`>Ê|dþðÆÌïEæ·µ¶4ƒùßpÌ Ì©ñðÁ}{vmßZ¿ySõÆò²âÂüœ¬ŒÔäÄøØè¨5‘¤ù³g†›MF½.@­RÈe1˜¡™O†þdoè{g¢ûÜŸ„rÜ÷õ¥rÜ÷‰¥2¹R¥Ñê ÆÀ pîü…‹—._ ÷SÒ2²ró KÊÊ+«7Õaîï?xøEpÿO÷¿"Üo#Ü·`îŒbî“Á?rŸ/øÇ¿pùÝÒïÂ~&ÿ ÿYÀi Œg8ç=`Þõˆ{&÷®¼ ¾°×tAþO\ò`{Î|Üü+—/Ó™æŽ Ùmƒ–>0¿“2ÿ+Êü·˜æïß³kÇÖú:Ìü’ÂüܬŒ40} ˜¾rùÒÅ çÏóC‚]€F¥”ˤb‘?2Ÿ }_2ô'yCß;|ÆÎýÉS||Pî“îCîû‹$R™B©Öhõ“9($lÖÂýˆÕk‘ûIà~vn~QIYEeum]ý6®ûoîörÿLsËù¶ŽÎî ½}«Íî÷/2Ü'ƒÿ7øï“ÁÿˆdìÁïR~÷ô»ÄŸ©?ËöàÙž÷¸‡¬ËX?ã‰î=_à3 +- ßEæß 3Ÿ62dØa·Y‘ùùç[šÏ ó¿ø 7ÿÚüæW‚ùEù¹Ùi)I`þºµ´ù³ÂÀ|“A§Õ¨• +-™T"‚Ч͇Ð÷ñ†¾wž™+÷ŸÃr*‘ûÓ±Ü÷‰%2¹B¥Ðê&sp(¸?oÁ¢%ËV¬BîÇÆ%€û™Ù¹E%(÷÷îÃݹÿÑ'˜û§1÷ÛÁýž¾~‹uÐî÷!ø1÷ñà¿Âü÷°Èe¿'ð{$¿3ýûYø³ùgûÏÙ|[ÀÃq:ïçÂ'®°çrïì½kð…>Ÿ;òŸðÏÍü+xæÿð/<ó/Ž9ìƒVK_Ï…®Îö¶óçšÏœÆÌÿä£ÿö×÷8æïݵc[}]muen~&˜Ÿ毎XµbÙ’E æÍóƒÍ&ƒ^ V)äR‰̇ÐóñПŠ…þsÞÐ÷Î32‚s™û྿H,•É•*M€No +-9›v?*¹Ÿšž™‡»_S[×Àãþ{ïð!îþIpÿr¿ ¹?`´9††GûTðÿè&øŸ2üžÑ?þlýüw±<ÞS97s´›{ÁùIò òéÌ¿Igþtæ{ 2Èa´ô÷bæ·ž?wöÌé“_ãæð>aþqŽù5•JŠ +-Àütd~l4Óü™¡Áæ@£^ Q)å2‰XäÌ'Cß×3¡ÿ[oè{çá¹Oº¹ï/’He +-¥Z£ÕLA!àþÜù /]¶"3¼¾ï"侤®¹¯Ti´ºNƒÑÔcîí°\¾ +-ƒÿk¶à¿ÿ¿¡ûÜáŸ2ù™ì§ÓŸéàò¸k<#õŒÚ»ðÞ­ÏC÷˜ÈɧÉü{”Ì¿3ÿÈüáAë@_¯¹Çd4èuZJ©€æ7ÔI ùÅE˜ùYŽæ¯æ¯æÿõ/ó—,æ'ÆÇÆDE†‡…‹„AÈ|<ôüiCß‹}~Óbô¹?Þû¿B¹ÜŸesä~`H—˜œÝñåW¡ûo½ýæþ*àþ²û©Ðý,ÜýâÒòÊjÌ}¹B©RkuzCpßÒ×oÁÝ!øïØ‚êág¢ÍýÌø3ðïê ð|ŒŽù„./çÖW™,ù óGAæß¡fþ̴߱ö÷YÌݦ.ƒ¾C«nW*äRd~uey)n~62?ÕÑüUÐü?ýáÜü—_\ +-ÌOINŒ‹‰ŽŒ óç“̇¡/àCŸßtž3û^öÜ÷Ár¸ïïr¸s¸/‰CBÃ#¢¢cã’’Saî/{ý7 ÷W2¸ŸCq¿±Y*W´µ«5úÎ.c·ÙÒÛ?084ôùM“qÈ}ß™à~@€-÷¡ûABQ0î~|BÒ‚”EÏ=Ïîþè~æ~n^A!æ~Mm=p_ÖÚÖ®Òtè: Fü½}ÖÁaüׂÂ?::6>ƒ~Îð»N~í¸Øï·ÞwÇéOs¸‚ÛíÝ8™?3ÏüÛÔÌ¿2e~¯¹Çd4tê´•²­Uͯ­©‚æ_,,ÈËEæ§#ó÷PÌ_i3ÿ×1óŸæ'%ÄÇFGE„‡†ˆEBd¾-ôüQèûÚBß›}~ÓrTöŸ"ç>áþLÌýY$÷ç ÅÁ!aá‘Q16÷_x‰âþ +-÷÷A÷Ó3÷/^*)«¨î74µÈZJ•Z«ÓºL øûPð_¦ÿ¿Pðcð áÿ‡ÿGføb†Ÿ A6ú¹ØÏ•^O~™Û™=yòhÏï >3ùß“É¿ƒÈ'gþùƒ0óÍݦ.ƒ^§U«” +-¹¬¥©š_QVrÉf~243£ù/<Ì_͉Š   ƒÉæÃÐÀÐ'Ìw }Þ|~ÓfŒ¹ï Ù÷Ár¦Àº?{î>ÈýÀ ‘88w?1iÁBäþ+ îoFî@îgž:Mr¿ZRÜ—ÊÊvµ¦CßÙeìî±0?ÿ˜Kø9%¿GòsµßCþ§hœÏèⲜ®Æùlä;>6È¿ ÉwÊüáAë@_¯¥§ÛØÕ©ïШÛÛrisSC¤Únþ™Ó§2‘ùXÍå%hþÂI‰6óÅÀüùvóaèûùAó}‘ù>dóyôùM¿1ºoÏ}_”ûÈýgæ÷AîÛ܈ŒŽ‰‹OL^°p1rÿ5'÷?GîoEîÂÝ?sö\þù EÅ¥å•ÀýúÆf©¼µ­]¥éÐuŒ¦jðÿ¸OÀÀ€Âø9ÉïŠ~7ðwfò±SÏå‚Ü®ò¿I‘2ÿ6Ê|Dþ’3¿Ïbî1 :­FÕÞÖ*“67Ö×Jª+ËK‹‹.œÏ?w7ÿÈ!dþV’ù+H濆Ì_ŒÌ‹‰ŽŒ ‹€ùóžÅ̇¡àï›oý|èó›Æ£aß‹È}Âý™ÈýÌ}˜ûÈ}¡HBq «ûÛ‘ûGŽsp¿ª¦¶¾±©EÖªPªÔÚ½¡ËDþ«äà‡ðßðŽŽSáÿÁÿGø=“ß5ýîâO+ç#bžû¥8ž›Q|‚ütäO8’OÊük0ó‡(™¯U·+­²–&`~MUÅüãÇŽ"ównGæ¯uî|dþ`~²Íü±H͇¡?w.2„¾@@5ß›l>>¿i8ÆÜ÷†ìC÷}¡û~ÀýY÷ƒ„¢àÐðˆ¨èظ„ÄäÂýåv÷ÿ†¹¿v=rçnÌýã'NfeçäæŸ/¼x©¤¬¢ªFR×ÐÔ"•+ÚÚÕŽÁ?‚¿ þ›.ágK~wåçB¿Çú?ÊMò?»ß9òiÉäßäß$‘2ÿ²CæwÀÌWÈ¥ÍM u`~YÉ¥‹…y¹9ÙY'O ó÷ïÝ™¿ÞÙüå$óùáÈü Üü_#óAèû¡ÐÇÌ÷!›Ï‡>¿i<öIîÛsßæþì9v÷ƒ„bG÷—:ºÿ>îþ†Èý½û¶¹ŸW€Ü/¯¬–ÔÕ76Ke­mJ•F«#ÿ þkסûü·üwÝŸ‹ülñÌÍþ_ ÿSqpvñ#ß=òo|ÈÇ2¿Ÿœù*e[«LÚ 2_R]Y^J5?õðAÜüpóßw4)0?šÍv0¶Í|rèÏ ýÇýOÊß&÷½ˆÜ·»/øù#÷ŸÁÝŸ7s?Ì…û|ˆ»¿i î~jZzFæ©ÓgΞË?¡¨¸´¼²ª¦¶¾±©E&W(i‚ÿòRðs†ÿ¿=ù]É?%ô?î`êú³'ⳓ #ŸÈ|Hþðu ¿×bîÆ3_ 3_ÖÒÔP_ 2¿¼´¸èÂùüsgÏœ>•™‘ž†™¿cÛ–M¸ù~àÚ|±0(p>a> ý'ó½éÍçÑç7 Gãþ Â}Üý™Èýäþ\è>È}ྐྵ‰ÜOJNYDïþGŸàîoÛ±kϾîƒà¯¨ª‘Ô545Kåöà7¢àïÁ?Œ‚ßÿ7þÛ´ð߇ð³%ÿdäw›ÔGôxt*öcqÿ'B|ÇÈÿŠ‘ÿ ù(óù óù(óÍN™ßP'©®ª(ƒ™O6ÿÐ}{vÙÌÿä#Fó“ù‘áa¸ùóžEæÏEæƒÐèÍ÷âÍç÷$Ì}’ûOîûB÷ý€û³û(÷ ÷C¡û1±ñ¬î¶fÝýCGŽ;~âdVvNn^AáÅK% ø«%ÎÁßm¶ôöXað»€ÿ;¿SòÿÇùÙé÷PÙ)|ê¿‹øl‘Ï@þ7ò/òúPæwᙯD™ß2¿ºd>0¿ /7';ëä‰ãÇŽ!ÌÿêË/Ö­ùŒÉüE$óCƒÅ"dþoC6}h¾a>úüž¨Ñ侑ûOã¹os6Å}¡îñåW›·nß¹{/Ù}üÅ¥0økíÁ¯Övè;að›Að€àGðC÷YàÇ“Ÿ +-¿-ùYåw“þÉÒëšã‡ýûn€Ï$>Mäÿ€G>Fþ+ùÃCÖþ>‹¹ÇDÊ|¹´¹ d~ Ìü⢠xæcæÜ¿w÷Îí[7Ó›¿Œl~|lŒƒù0ô¡ù³ìæÛCŸ7Ÿß8ºÜ§q_ ðóçìþ2›ûï¾·bå*ªûûNMKÏÈ¿'ktîÏ Ü÷qrÉý à~HhX“û¿ÿ㟑û«?þôóµë7lÜ´eÛŽ]{0÷ñàÏ+(„Á_Nü£©Û à€ðÃেÿ„Ü?‘ü.äçB?û™ús97wðÙÅG‘O?É¿çH¾-ó!ùV@¾ÅÜm2:uxæËì™_Š2?/7'; ËüCöýŸÝúŒŠêÌã8~’µd`’ó.ºçÄŽ ¥ ÃÌÐ{ïˆ –Ø»"b ½—¡3CzfÙ7«Xôìn’Ýìž³›Í‹}žÛæÞ;Ï,IÎñþÞÃýÏ›Ïó=sêDÌñ£‡ˆÚKšïëí©ÅüU4óAècæëQæ/%ÍçCŸß[:n÷—¨Ü_¶LO_ùûÐý´»/ÆÜwuG»îÂÅK—¯÷ñà—±ƒ¿»·o`pxdt|âú›·¾þÂþ9 +-~ZòÓá_ˆüúu²ÿ÷¡¿n—jò^7ñqòÿÉŽ|‚ü94ù†äû ÿÆõ‰ñÑ‘!µÌ—c™ŸOd¾FóÝ]¡ùb`¾ÀÂÌ„2ýÚ5«9Í_Æ›Ï9û s •û4÷Wp»obf! Üwt&Ü +- ˆÜ³oÿÁÏ‹Ž=yú,ü‰É©éxðÁ¯¬oljikïìêéíŸø’„ÿ®Fø_0à×.¿ú_ÞþßÂÝ/Cü,màsˆOFþ4ò_ÐÉŸb‘#ÿk@þ—ãc#Ãý½=]0ó›ðÌW`™_€g~râµ+ ñqçÏž>}ìÈç÷ïÛ@˜ï¨›ùAóß_®¯͇ècæ/Q™Ï£Ïï­wîku%‡û"±ÔÖwßÇ/@Ý}*øÓ2TÁ¯¨ª©­khlnmëèìîéë¿àÿ +-ÂG þ)ÿÓg³³sóó~VòkýÚè_þoò Xè¨_ò +-|õÄçŸù/žÏÏÏÍÎ>{J‘?©"ÿ.FþW€üëãc£ÃCý}=Ým-Í uµdæËðÌOIbf>Ý|?/Ì|{[©X¤Íüjæ¿G˜¿˜7Ÿ¿ºÿV÷ÍVBÒ}7/Ìýл>Û½7êÀ¡ÃGÇœ8u¸O&üòÊêe}CSKk{GWwoßÀàÐÈèØ€ÿ„ÿ6þI?Hþ™þç ø5ȯ!úu°Áø¿ÊCð*ßB_ôž#ñQâÿ_Eþs’ü@þŒü*òï0Éìïëíîêhomnj¨WÖTWÊaæ♟Je>aþ¡Q{w¶kghp 4ßà 3_" ­æÐ|Ãm[èæ¯d˜ÿ—ù‹xóùñC²¯r)ÒýYîoÙfˆ»o Ü—÷\ û¾þÁ”ûdðŸ‹O ‚?‹ þ +-EUum]}cSK[{gW„‡ÿ¦ü ü øŸÍÎÍAø&¿.ôsØÿŠü¿¹q]‹î{øTâ#ÅgFþóù¹¹Ùgù‘äßäOŒŽ ä·45Ö+k««ªÌO#3ÿüÙÓ'c£Á2Ÿ0ßßטïâäÌ· -æ¯ÓÉü¥ÍçÑç÷NƒûKèîëéé/îÈá¾澑‰)æ¾ pߺïé Ý ˆÜ³oÿAà>ü—.Óƒ¿¨¤¬\^YU£¬khl&àïÇà§àÿNÿ}ÿ#ÿôÌSõäÇäÿ‘)ÿ¿ù9é粟ÿßÿÎû…üŸ9À§'>R|Hþ Uä?™†ä?‚äßG‘?>:2<8ÐßÛÓÕÙÞÖÒÜØPW[S¥——–É°ÌO'2ÿâ…sDæcæGF„‡…Aó=Ý¡ùv¤ù¦&F˜ùêæLš¿\_Onþ•ù|èóã‡Ëýźºÿ)Ë} K¡µDjçàäìêÜ÷ ‚îãÁøèñ2ø¯àÁŸ ‚¿ °¸´¬B^Y]£¬ohjnmëèìFÀ‡Kþɇ!üœÉ–_gúYökÂÿ×´ÃÅ=å=| â«"žùü‡| >Nþm$ùm­ÍM uÊšêJyEYIqaA-óããˆÌ?zøШ½0óù~>À|WgG;©ÄÆZhiÁ2ÿS5ó?D›¿˜7Ÿ?ÖÞA¹¿ˆæþ{À}À>ÒýOîo5Ünd Ý·²¶÷û^>~Á¡;w÷ñàŽ=Iþ´ üù²¢âÒò +-EUu­²¾±©‡¿¯`hxdŒÿ{dò?˜Éÿ˜žüù Éÿ!ÿ¿)ù‘ôÓígã¯Mÿ7õèôYö­ÿC€ÿ_]Àçÿ9_ù€üIœ|(þ½;(ò» ò땵ՕŠŠòÒâBY~.Èü´,ó/™}ìžùÀüÐà@?/7`¾½Tlcmeiafjl´Ýp+ÃüOæCô™æ/âÍçÇ56û÷ÿ¨Ýýõ 6î›Y¬¬Eb©­½£“‹›‡—·¯`0 þÈ=ûöãÁâü—að§¦gfçäÈŠJÊÊ努šÚ: þvüXñß á¿K“ÿ=ùgçæòÿÿGL~tô3èWÙ¯ù‰·`áÿWý6÷Ág'>Jüy(¾*òÁÈ'É¿‹ ¿’ßÞÚÒÔX_W[]¥——–É +-òr²2ÓS“é™sÏü=‘á óý}½==Ü\œím%b‘ÐJ@™¿É`ãzíæcè£ÌçÑçÇ*÷_ÞýÆ&fæ+¡H,±µwprqu÷ôöõ  +- Â?ê#ø@ð'¥€àÏÎÍ/(,.)«WÒàï¢àƒðßdÀHþg0ù¹ägÓO³ÿ? ûÑáÒÿ%ø-C\ÂÐ^{Â{nð5‰?G_ùtòoÝ„ä!ȯ©ª”——•äåfg‚ÌOúd~<žù±DæïÝ 3?$(ÀÏÇÛÓÝÕÅÉÁÎVb#Z +-ÌÍLŒwlßö +-æó¡ÏŸúÞy î¯îo0Ø´yë6Â}K¡µDjçàèìêîáåãºþƒxðŸ„ÁñþÄäÔôŒ¬œÜ|Yaq)„¿ºFY×ÐØÜÒFÂ?HÁ%?„Ÿžü@þ'¤ü³,ùÿåÿ“Ÿ ÿ'4ýœö³õGñÿ+¼è¯²NûY³÷ZÁÿ‚¯&þÓ™éé©' òÒ#’E>šü†:%$¿¢¬´¸P–Ÿ›“•‘–šœx dþÅ ôÌ߇e~hp ¿Ÿ—‡›«³£ƒTbc Í751‚æoÞd°˜¿š7Ÿ¿×5-î/ÕâþJÌý5¤û†;ŒLLÍ-,­¬mÄR[{Gg7/o_ÿ@üáôà?ƒ?.>áÊÕ/’RRÓ3³sò +-dEÅ¥å +-ü½üãüÌäò?òOMMϨËÿWJ~fô³ègÚ¯þ\ü¿®G@Ã?W»D÷tï9Àg$>]üYšø ò¨E>FþÄ8A~/A~3F~u¥’_$ËÏËÉÊLO™õrB|Üy˜ù1xæGa™2ßß×ÛÓÃÍÅÉÑÞV*Y[YZ`æBó7ó×`æ¯ÔbþRÍæóèóãGÓ}2÷‘Ü_…¹¿vý†›6oY¬„"±ÄÖÞÁÉÅÕÝÓ›þ]´àÁîþ+דRÒ22³só +- +-‹Jpøkqø[Û;:qø‡ ü ùéðãÉäŸò?FËψ~‚~Íö«áO×_-/÷ƒ°€¿B}”~¥=‹{„÷jà«ŸÕø3ÓSS¸ø òÿ‚G>|ù€üá!$ùå¥%E²‚¼œìÌô´”¤ÄkW@æŸ;2?ú˜*ów‚Ì™ïéîêìä`g+‹„V 3Sc£í†Û¶`æ¯ÅÌ_E™¿‚7Ÿ¿W›ýw¹¯ƒûÂÜ_·a£Áæ-[ ·›˜™ ,…"‰ÔÎÁÑÙ•üTðÁö|\ü¥ËW¯%&§¦edeçæãðËU,øûüÃ#üxòG&?”ÿ>ÿ!C~TôsÓO·Ÿ†þhÿü +-,€yuëiÚ£¹WyÏ>"ñ‰Æâ?ÆÅ¿ÿvë+8ªëŽãøÄÎxœ‰A€Ày±'Ži*»«mê½K¨w­zïuÕ{ï¡Þ{ï…î ÄÆN&˜FðâñðÏ$ï9çÖsË +-É o÷÷~Ï}ûü¿˜ø¬È‡äÿ’ƒ$•Aþ`oOwWg{kKSC}mueEYIÈ|uÌüD˜ù‘Dæû€Ì¿äâìhogceinfbl¨”ˤ±¾ž®Îhþ¿?Œùúˆùæ ¦qœÜ?ºû_üºQWO_,1ɆF&¦æV6¶öN.®nxð«ÈàOJÁŸ“WPX\Z^QUS[ßØÜÒÖAÁ?†Á?á_]ßØÜÞÙðß„ðß¹KÁ%?&ÿ[þrä'£Ÿ¦ÿ_ýˆýðGôgûà Ðxû [zÔzZ{>î™Þk_ƒøû¤øO0ñä߽ɿ ÈßÝÙÞä’ß×Ó}¹³½­¥©±¾¶¦ª¢¬´¸0d~&ÌüV滹º89ØÛZ[Y˜›š*ä2Ìü‹À|ùG1ÿׂù„v÷?|—û'¸îy¸¯£§/’Hå +-¥‘±©™…¥µ­ƒ£³+ü~ øC@ðGàOLNMÏÈRçæ•”–WVÕÔ‘ð_¡áŸ†ð/aðoíì^ðߺ áÉÿ-"ÿ£ÇüòCúqù¤Ÿe?/þ´þ þyÀÑÎÀ!çHbOjÏÃ=ÃûŸqï™à‰‹À‡â¿fˆ¿ÅçD> ÿö-@þÕÝ-Œü%.ùm-Íõu5U•å¥ÅEy9ꬌ4ùñ ó#@æã™ï3ßÁÎÆÚÒÂÌÔØH©K $"}=`þY–ùÚÀüG6_@_˜0 ûeîkîøq÷Ï÷uõEb‰T¦P›˜™[ZÙØÙ;’Áï$þüé™ÙêÜü¢’²òÊꚺ†ÆæÖ¶Ž.þÑñ +-þ5ÿöîÕk×ü ù!üdòså±ÿòå«×þ7Œè'éKÒ϶_#þ”þÿ,ÿ¼GÏÓÈŸ)ìIí9Ü3¼GMü70ñ_¿zùrÿ"þc\|„|,òoݼ~íêîöÖæú$žK~kscC]MueyYIQA~®:;3=d~Èüp<ó}½==`æ;ÚÛÚXYš›™*2©D,ÒÓæŸÃÍäÅüó… ;Âþ÷‰àÇÜ?AGWO_,1ɆF&¦æV0ø`ð{âÁ¯ +- ÁŸ˜œ’–‘™“—_X\RVQY][×ÐÄÿüâÒòêÚ:€À’ÿ+"ùïQÉÏ+?ý|ôÓÙOÙ¯JšÔ 'àà‹pˆ/ÒÓÔ³±ççñžþ ð¡ø¯øÅgGþW0ò¯]ÝÙÞÚä/Còg"¿0?7';3#-%)1>d~X¨*ˆÌ|W˜ù¶ÖVæ¦&F† +-¹Ì@"Öæ_8™Of¾`¾0aïm¿ÈýSÐ},ø¡û ø¡ûû"‰T®P›šYXZãÁ ~¿€ à°ðÈ蘸„ÄäÔôŒ,uN^AaqiYE/ü“Ó3só KË+kë›Û; ùoàÉç.€_£üÏ_ìïCùéè'èÿÒÿI?Òý|ø3õçõŸs}4Ï•ž¢ž=®=—{ïQð‘ÄõrÿÅóçFˆÿŠÿ€ÿ›¯ï‘DþÎöæÆúêÊòÒ$rbŒI~SC]mueEYIqa~^NvVFZjrbB\LTdxhHp`€Ÿ+óM” +-¹Ô@"Ò×™þ–ù„ùŸBóOóµ´ŽÌ&ìÿ<û»츖áþÔý/Ï÷utõEb‰T¦P›˜aÁo¿‡—¯`*4,"2:6>!)%5=3K›WPÄ„¿“€xtlbrjfv~aqyeum$ÿ.žü·©ägÈÿÈÿd渚è§éG³µŸ…?¡?Á?ÿì ù<žGÐü‡{\{&÷LïßÞ£…'þkFâ?Ý{BŠO5>ù·©ÈßÜX[]YZ\˜›™‚ä °È¯ª(+-.,ÈËQge¤§&'%ÄÅFGF„…¨‚ü}½aæ»02_)—I%b‘¾.0Ë|Úü3§dþ‚ù„q¿Èý“ÀýÓ¤ûŸáîƒà×Á/–Èä +-CF𻺹{zûø«BÃ#¢bbã“RÒÒ3³ øËðw÷ôö ŒONMÏÎÍ/.-¯RÉL~Lþïù¿'äÿ”‹~’~Â~H?’ýÐþ·¸ýLüqýyùGóh<ï÷ äÿfZbiÏàž×{|è=L| |,ñqñâ?äFþu2ò×@ä/ÎÏÍNOMŽ@ò{¹ää媳2ÓSS’âc££"ÂCUÁþ~>^žîtæ[Й/Ö×ÓÕ™™ÈGÌ?IšÿÛ#˜/ /LØ¡wx÷!üÀýã¸ûÚ¸ûTðC÷/÷Eb*ø-AðÛ98:»\róðòöõ +- ŒŠ‰‹OL&àÏç…¿o`pxdt|bjzfIþ]<ù9ò߇ò?|ôDÿÞÞÓgDôãô³³Ÿ²Ÿ…?KÿÔ /ãh8ý=ò4“zöLíiî¡÷?¡Þàÿƒ,|:ñøøâßçDþ.ùË‹ ó³3Ó“ã£#Ã}½WòòósÕÙ™éi)I‰ñ±1Q‘á¡!ÁA~¾ÞžnŒÌ76T*dRùz óÏŸC23_7ÿ8n>$_0_˜°÷°ÃºÿÄý¤ûxðŽ?p¿ˆ ~<øm휜að{ùøú©BÂ""£câ ü™Ù9 ø›[ÚÚ;»º¯ôöõŒŽMLNÍÌÎ-€ä_É¿…%?Sþo1ùAô? £_#ýXöSö³ðgéOðOøOú0¯ÿ-àç#äAú/?£ÖÓØSÚ3¹g{Ïþ3 |ø@ü`âcâßc‰"‹Œü…¹Ù™©É‰±Ñ‘¡Á~H~Wg{[ —üŒ´”äÄø¸˜èÈð°UP€¿¯—‡û%Wg',óÍaæ*ä2"ó/^À3Ÿ0ÿwŸæŸ`˜ÿ±`¾0aïg‡sÿcÂýOH÷O÷±à§Ý'ƒ_B¿©¹üžÞ>~þP,„?¿ ¿£ëò•ž¾þ¡áѱñI"ù—@ò¯oÀägËÊ£ÿ{:úyé§íÇ»Ÿ‰?W–ÿä`Üæ`…:{Œgè×QêÙØ“Ú3¹'½§Ÿ þ|øPü¿`âÊ¿ºÄŸŸ›™žšèïë¹r¹«ƒ ¿¦º’M~$?’èïçãåéîæêâähogÃÉ|]˜ù˜ùŸF˜˜Š4ÿÁ|aÂÞÿÞéþG÷µp÷Oãîk ~cS3sK+"ø1ø}ýƒU¡áQþ$ü•Õ5uõM-­í—»{zû‡GFÇñ䟇ɿº’Ÿ#?Œþïþ £ÿ>ý,ú¹ö¿!ìGðçèÏðŸ8ô `\ž[pÀØßÑ/’?Á©Ç­§±Gµ§¹gô=ø(ø=$ÿ¯0ñ¡ø_ÿ‰-þÖ&y ˆEþøèÈðà@_oO÷åÎŽöÖ–¦Æzù©üXH~¨*80ÀÏÇÛÓÃí’‹³£ƒ•ùJ…\ +-2_„eþy$ó1óOóOž<¡Å1ÿ#Á|aÂÞ×~u°ûTðSîÃÜ?yJ[ºÏ~üb<ø`ð[ZÛØÙ;BøÝ=¼ üAÁ!,øÕ¹yüµõ MÍ­m]Ýÿe·>«<Ï8Ž 0•Ä&l2^%R+%€ ÞÛÆ{ï…±ñ8^ÇÇãxã½m ‚mH +-Iš(ŒHZHC™a(mÚ4MTµjÚJéßÐûº÷ýœç8¤PUÏõÒœç~Çç÷:2=3wôc ‹ÇQòŸ<õŽ#ùqôß`Ñ/Ñÿèÿ‚ÒÏíÿì—Âëÿ­FÌ¿ì?_>ÚÐœuíɯ°§eê‰õ{¦ý·D{)ïÕ¾ð‘÷þ# |žø×qâë‹ÿ.ˆÿÖ ùs3ÓG¦M˜èïíé²u´·¶45Zò òöòS’ããb¢##Âv‡øûúx{z¸ï´Ë|bþ–Í`þúõ8ó]œŸ“Ìç™o˜oœqOèþ÷]Ö®¥îo"îSø_U‚ßÝÓË‚?(àŠŽKHLNIsSKk{‡­«§·o`pxdl|b’zvîè±ù…Å ÿÛDþÓªürô#úoëÒ¯ÚÏŸ”¿¤?kÌ?ñŸ ]6Ò +-èlãS?úŒ¾.Q/¬gØ+ÚîqÞKÞð à?Ô‚‰•&¾,þ"þ;o#ñß<±¸0ì(üɉñ±‘áÁ¾¥ÈÏÉÊLOCä'ÄÅFGE„ï  +-ô÷óõæ™ÿš&ó±ù›6"ó×aóÁüÕ?È|}ãŒû/o)÷4îüÜýuë7@ðoÙªÿYðïÄÁïë£iYye†¿¡©¹µ­£³«»·¯ph„&ÿáé™Y”üó‹ÇAþSöò³èú¯ié¿ÿà¡j?Æì·Çô—ù—€.±š)øNYÝ¿'ÉŸ£ÏÿCµ^Æžj¯r½î•Àøàþý_ßãàßäàóÄ×ÿ8ÿ¹Ù™éÃ4òG†ûûz»»:;ÚZ››¬uµ–êªÊr-ùÉ„üÈð°Ð À?_/’ùÛu3Ì߀ÌžšÏ2_6ßÉ0ß8ãžì=®û"ø‘û.kŸWƒÿe +-? þ×Pð»¢à÷ðòöñó +-ÙðÇ'$%§êÀo©­ø[ÚÚ;mÝ=½ýCRòÏÌ!ù°ü'™üœùyôcú¯Hô~ûλ÷hö3ûÕðgå/ôWøÇþ“ @'@¬€²ò©¨Ë'}ùOþÜß…ô˜zn=`OÛžhÏê^É{á=ü{wïð¯øö‰š‰ +-‹¿ˆÄ?:73}dŠEþÐ@oO·­³½­e)ò“âcc€üÝ!Áþ¾>Þˆü]n:™ÿÉ|dþzl¾‹ dþ–ù†ùÆ÷TÏ‘û+ºÿ¸O‚#þt‚û7¿'ƒ?àv¿ÙRSWßÐØÜÒÚÞa£É?<:6~`òà’VÈÿS!?~Lÿe™þ7o±ì¿ÙÏì§áñÿ’âOõ§üsÿñH @'€€ºò©¨Ë'}É#Ðcéõ¬ì)öRÜ#í1÷$ï…÷,ðo~ëÖÍ´ð¯øšÄ׊¿âÏN9˜¿™¿nÍ|‡æ¯0Ì7θ'á>_rßÜGÁ¿ÿfÝà}ÛW¿‚ß×Ï?àøã4ð—šÊ+ªÌÕ5µõÖƦæÖ¶šüƒÃ#£ã&!ùg@þy*ÿIE~Bÿ'œþÏýW¯]—²_Óý\þ$ýÿ´þ±ÿx¤`#Àw@šùdÔ¥ãßü½Bý —žQϬ'ØsíqÝKÜó¾ÇÞ“À'à&À§‰ÏÄðOjÅ?4y`bltdxF~G[ksS£µ¾¶¦š_\ThG~4èïç‹È÷@ä»bò!ó_U33Ï|jþjf>!ß0ß8ãžò鸿\v¥ì>ß‚ÜGÁ¿I'øüü®n»Ü=<½}|ýƒBþ(þܼ|€¿ÄTVQi®¶ÔÖY!ùÛXò Œ!ùrùÍSù5Ñ/è¿Dé—²Ÿw¿þ¸üYú“ögü3ÿÉHÀV@^y tOþá_ùçô9ü6–^¦^žµ=ÖsÏò^õþµ«¿BàÿI_M|*þ<†Š?ŽÄP"ßZWk©6WV”™J€üü¼\-ùá»CC‚ü|}ùîˆ|”ù„ü%2ßEÊüURæ ó—ægÜS¹e:ðs÷$÷í‚ü2ü8øü;)üþZøSþl€¿ pqIiYye•ÙRSG“¿½ÓÖÕÓÛ7084<ª•A•_¡ÿcJ?²ÿŠ°ÿ&±_ÁŸéÏÚ_ã¿X2tè ([ lº|â£?Ógè£_3ê¿"ÔSë9öDûGD{Á½½÷(ðø¿°_%þ¼hüƒHü1$þ ¿§ËÖÙN#¿®Æb®ª,/+-)Þ_Xäggeè“ïÈßµÈG™¯/2ƒœùkXæ ó´æ/3Ì7θ'?ÔýÕÄ}5ø·Šà…?†ß à÷"ðcø#£cbãþŒ¬ìœÜ½ùûö•”šÊ!ùkhò·¶wtÚºí䟦òk£ŸÐÿ!вÿçÈþË(ûE÷_ûü±þ¸ý9ÿ’ÿ0xÄ°C ¯þÉ?ü†}ý'Vôªô@=X/c/k/¸ï¯ ïià#ð/^À×$>vFˆ?ŠÄ@âwÛ:;Ú”È/7•–íßW¿77‡’Ÿ¨’ïÈ÷òÝùù@¾]æcó]ˆù« ó3î蹿B¸Oà÷Yð»,ü~W€ßÁïgjzFfvΞ½yû +-‹ŠKL4ùkë­ MÍ-mHþ.$?—Ë£ŸÉ¯­~”ýçYö+ö_û%ü…þ,þê? ^<xè +-ÐÇ@º¯íÿ$~þ}€¼ö&=Íz žZÏ°Wµ—¸}/>ÿÜY»ÂÇâãÄÇâœÔŠßŽÄoj°Ö×ÒÈ7•î+ÈÛ»'';3#=U%?˜’ï ä»ròE濸d毒È_ÉÉ×3ÿYÿ0θÿÿû>÷µÁ¿FüEðkáßð{hàŠ‰KHLJIMËÈÌÊÙ“›—_P(’ßR[WomljnUäÁò£è§ò³£ÿ} ²ÿ#”ýÜþK—?ü¯ðWôÇí/ñÏ€-ž¼tèHc ßíÿô¥ø=}€¼ö;;é™õ {¬=‹{ÁýÈ{Þ÷Ràcðßãà‹Äñ!ñ±ø#Lü.$~¿ÑZ¯D~aA~^îžœ¬ÌŒ´Ô”¤Ä„¸Ø˜¨Èˆ0;òwØ‘3‹N毱Ï|Ã|ãŒ{ö§ãþrÖ}‡Áá÷üÛ¶«ð!øÃüñ‰IÉ©ié™YÙ9¹RòWT™«kü T~È߇å#òv@?dÿýŠý4ü?…ð'åð§ú3þ‰ÿtØà À@V€î€4òýÞþO_ˆß“ïÉ[¿‘¤'Y/¬giϵgÜ‹¼çÞ³Àðö®.øGˆø(ñUñ[‘ø HüšjsU…ù¹9ÙYéi©ÉI‰ñ‚ü F¾‡=ù4ó_€Ìߤ›ùó¸ùË ó3îÞã¸Oà_å8ø·@ðSø_!ðCðcøÝ1ü¾ þðȨ蘸ø„¤ä”ÔôŒÌlžüÅ¥¦²ŠÊ*³Éom›¿¯ŸÈO¢Ë/Ñìúyöû?üèüù /~ü à‰àÏõ¿JÚñ/ûO€l¼| Ä,uü§ôSü.z=HO¨çÖcìqÛ3í ÷,ï/^8Oúy/ƒÿæ ð'°øƒý ¾Mßb®ª¬(3•óÈÏÎÌHOMINJˆ‹‰ŽŠ GäkÈß¾íuF>Íü—^„Ìßì0óW1òô}™o˜oœqOõ–éÀ¿‚ÿÒQð;Cðø7!ø·ü/SøYð«ðû!øƒþl|BbRŠHþü}…û‹KJMåHþjU~–G?•J¥gÿIœýÔ~ÔýgΞcáÏËŸê/óÏòŸž¶dè°)`÷@çäg‘'îRæ1ôTzB=±—=ÅžiϹ'yîìÒ÷<ð1øÇøÚÄñÿÍ~=gYŸaE‹RJHÈ›=Ȧì­,µà:‚ì [ l D +-HYTpDEÅ 7t­È¦¶¶´ÓNÇ:Óô 3íøGõ¾®û¾Ï’ç}’0„ôwŸæù½‡Ÿë›W)þ ˆÌÅö™½{úvõöìÐÈß$‘ß¹vÍêU+„ü§„üÅ a–|É|?ÉÈGæ7T*)òK2?š/Þ0»r÷Kƒÿ¾±55ãj þFÀßZÿCsçþEÿâ%ÿÒeËW¬\µÆ’¿K’ÛŽ=½»Eþ}YùOP~Fÿ™tôƒ~±_éO²ßìÿãõ?yøèCÓ?Ç¿øŸ þð àpl~kP~áÛô-ç?æ< ÒëYö†=´ÿ»joÜkÞ[ß‹÷ ü« üPø™Ä[ŸâŸ<ÿ‹¿»·gçŽmù]Iä¯X¾l©¿ä/"ùóæ¦È×Ì'ù­$_2üøºÚÚq55 ¿<óïH“Ío\û·gÜ0øëÆ×øÛªÀ?Ÿð?ò¨ÀÿÄ“*ù7JòwKòïìÙ••ÿ(åGô«üoæègö ýÌ~·ÝÿûïþÀð'þ,×?Ë¿ø¯` € Àp¸œŸ¿ÿ\úïö„ï¡<˜ЋôJ½[ϲö‰öV÷{É{ë{zÏÀWð?ý$ ¾&þkL|Šìhhü}—ˆ¿]Äßܵ1ùK%ò…üG!ùó«ßFò%óëëI>3ÿgCÉüÛ#ùñâ +þ; ~…¿"ð7þö,ü3~I~ÀÿØã¿'ÿj$ÿzIþÍ[¶BþÞDþƒ”ÑOùOЯÙÿYÆþ+b¿†?ñgùÿø›þú¯` € ° Ðà Øèý»ä’¯ôʃy8èEúõ´Þ°Wí÷Æ}È{ñþŠ{¯^?>ÿ%&>Å?t04>Å߶UÄß´q}6òŸX"‘/äKä;ù3gdÈo'ù’ùÉüº:#æƒü¢Ìïo~Ìüxñ†Ñ•»_ümmÝø üü–üþ_-üIò¯”äïè”äù»Sò?Cùý”ÿÅBú-û³öu鲆¿ãÿðWýÿ¬ú¯€ÀØè +-pt ôþUzá3}Å_€ò`þøm—^©O¬ö®ýuhϺWî%ïÅû‹Þ÷ üsøýÁgâgâSü}ýÄßñ׬^ÉÈŠ‘/ä#ò|übòÇ“ü%¿4ó祥ùÑüxñ†Á¹?@ð'ðMÁß ð7§‹ß“’ßáGò/¶äz¹$¿È¿ŽòoQù{T~D?å?R…~ËþŒý‚ÿ—Yü¿ùöwªŠúï  à€Ðàp ôþYzá3}ÅàO©ó +-}–zZ¯Ø«öŒûo¾¾æÜKÞ‹÷Ÿ{ßBï-ð‹À?¦â#ñUü^¿›â¯_ñW­¤øˆüÅŒ|#‘oäO’'¿AɯùcSä&ó£ùñâ ËZðßíÁ¯ÿØšqÕàŸœß“‘'¿Èäù;:×¥›¿ѯò¨J¿e°ÿœØ/ø_ðwü/]¾ôOñOÿ}t0ØŒ€ÎvÀ¦àF؃â ßÜÐ7|þ½1/Î+ôYêi½bŸÒþÊåKνå½÷ý‡ôÞ¿ +-øU|$~oºñׯë¤ø+–»øˆüEIä§ÈŸ<© +-ùã@þ}Fþ=üÂÌÉo¸ßP‚ÿ.¸?&üÅð·þIÅð/tù5ù³òoéòï)¡ß²Ÿö³û?û-ü½üûåEÕŸíoüÓÿÐð à +-`l l ì¾Ï_êoöõßøô¯¦¼0oЫô õ´þ›¯¡ý´½i¯u¯ÜKÞ‡¾§÷øUÁßëâKâñ;T|D~aùmÕÈ™?æß3?^¼[ùp¿0øKào +-ðO ðÉoÉ_ ÿÖé·ìöKøŸµðWü¡ÿÓ?áŸþsø€.&@ÿ ÐÐ!àðþ2ÀùwúŠ?p]™Wç!=«>P5Á>há³ó9îÅûwØ÷ôÞ¿üíiñ×&â#ò ÅäOùžù£Ë2?š/Þ-pC þ»5øsð×eàoü÷ü%ÉŸ–mGgùóôköÓ~vÿ›gÞ²ð×òÿèãsA¶¿ñoþstt8XÌ€-·ÀïzÿKýU?'ñ0žAoÎ ô"ý5HOêÍz`ÿ°ÚŸûø£À=ò^¼#xo_~?ñ‘ø9ñù?ùFþý ¿µœü{ù1óãÅ7øàWøÇÂ_Ûþ „ß’æ¬AÉ_ý™ê·ìÝ/áÿºâÿ6Ëÿ½³ï3ýMçŸþsø€,€N€V€;`Sð­ïAõó¯ôß_£òæ|>Pÿy‚½µýG~øÁûïŸ}Oë^ó^¼•}Oï-ðC5ñs‘¯ä‹ø$BŠüJ ùcŠÈæÇ‹w ßàƒ´uø+ +-‹Àßø5ù§¥“pògègö+ýšý¡û%üOeð‡þïšþÎðŸà € Ðÿ¸Ü]ƒp×Ò—þÃUý–ï`ü%üÔEw^ wé…z·Þ±gÛ3îsÜ‹÷/…¾·ÀOÀï˃?8ñ=ò§iäƒüv!¿EÈoü»IþèH~¼x#èü?ñàþƦfIþ6Iþû™üS-ùƒüóûË_ý ý}F¿f¿w*üÿÓ¯¿ôÿgøï  € À +-pt ¸z__øûEýžO¿På…y8¯ÐSzRïÖ;öÐþŒi¸GÞ‹÷Ï£ïé½¾¿{W~qâçÅ‘?s†FþTF¾ß&ä7’ü˜ùñâÄ»íÇ„¿¾Ò Éß*É?!Iþ5ù]þùsÑ_@?³ï3‰ýè~ Å_ÊÿåS¯˜þàÿLàù/à  €À +-`8¶¶ÕÎ?¹ /ΫñPÌ‹ó +-=¥êƒõ{¶=´åÔËZ÷©¼÷¾×À'ø½=Åàg¿P|FþƒIä ù­B~SScCC¥>’/ÞÿïÂ?*ÿNƒôà—äo—䟈äŸÂä§üsúÉ¢ÙÓ©èwúÅ~¡_³?Ø¿_ìÏà/åÿ≓¦?øÍùÿmð@'ÀG€3€Ð)à}Zzö‘>Ác /Ê'Î ô"=³þí·h½bZ±7íOžxQë^¸·¼}Ÿ +-|‚¿9€Ÿ$¾‹ðsâ3ò§OCäOAä ùíB~ËÈÝŸüQEäGóãÅ»o(Á?ü¿RihlljÎ%ùç«üýOzô;ýZý©ìöïû5üÿß9zôØqÓŸíïü‹ÿ6¾2º\̇À¶@ç ôì3}sV‘7æ úDzP/Ög°7í;ªu¯Ü#ïÅû=Á{~7?¾'¾‰/à÷:ÄÏE~sSccC¥ñA~Í`È™/Þˆ½~È_W”ü"ÿd‘ÿÈ?#%ÿ<ÈoÑÿ¸E†þÐÏì‡ýÛÜþ]»û,üÿCÏfú[û+ÿæ?À@&@7€+€ÀèðÞàì3}„çoáwȼAïÒ+õb½cÿ°7í?wèÐÁä^ò^¼ïï{Ý{~à¯Í€o‰¯â?üKÞÜœø˜øE‘_‡Èˆü|æ’Íï–¾2÷‡?ä¯Ï&‘ü³!?¢A:úûѲßíG÷ïØÙð—òß÷ìþ´þοùÏàèèp0Ø‚7lÊÏ>ä#ÿa$þ<$¾ˆ?+'þÄ”øŒüŠF~­‰3äGóãÅ™Wp¿þjÉßÔÜÒÒÚÖÖ>A埜“_¢®G?èÔ«_ì_ŠìOÙîß°q“†?ñß¾cçΞޠ¿óüçptt¸˜ì€NÁI›ƒò³ùÏ<‚^è]z£Ö;öÖö¦=ë^ó~s×&ñ~½z/¿Ê_À2>¾'¾ˆ?SÄŸ–B{[[kK įù¥ä§ÍäÇ‹7òﶛ†ÿ§€ÿ^‡?•üUåŸ*òOùgΚ]@?ª_²ÿ Ë~±…Ú¿fm‡†¿ã¿¥{«¥?Ú_ùÏøÏÐ Ð à +-`°:ÇmÊÏ>ä#<òGð{t^ wéI½[ïØgµwî%ï×uvhß›÷øþã¥À—ÄŸk‰/âÏPñ§–ˆŸDþXü{!þÍ’Íoä]™ûƒ…?›ü¿ò7ɯÑ/ôÏ™óó_ýó²ô'Ù¯öK÷¯\µšáïøoÜÔ¥ú[ûþÍ€,€L€nF+€Àè¶9(?ûðÈÄïÑùÿ±_¯ÏYUWÇ[ic 々$’H ‘›‚¥¨#تµ—7:Îèt¦Óñÿݳ.{ïµöåìs‚á Éïû¶çœ'¥3Ÿßª@?HÏÔGë{ÒþßFûÄýpÞûÍ_¢÷æÀÿìÉcþ]8ñoýagkkó†ÿýLüxäÏ!ÿ ÈGè45zð×áùþüäò_%ùW£ükëÞ¸±¹µus[ŽþÛwv#ýzõ?úäÓhÿ³`ÿWÏ_ðáïðýÿÑþ?ÃÈ„ àà%øE× “>ù ¿ö?Až”ÿ/}—¡géõb}Â>hÿ¿ÿM¯{æþÏ_¿xñü+öþsñ^üO?yäÀÿhoמø,þÆÆúšÿ½L|{ä ù"~—ü7@>B§§¹ðwN~’ŸO~¹ùWIþk*8ú«ôßðPÎþÇO> wÿç_|©‡¿âÿͷ߉þÿì?À°2²¼4´²2ýôY~Œÿ}éçà¼@?HÏÔ«õ{Ñž{½îõ¼7ÞÇÿáƒûUðIüÍM=ñ×®_#ñWE|"_ÄïùsȇùüæÀ¶„?üËîäÏ俾¶žŽþ›Û;Žþý»ßã³?ØÏw?þÿ Æ?ûÏ @@#@+@3ÀCð“ŽÁ„ôi~“'å‰ùÁy~>P¯Ö'ìƒö½\÷Äý³?=Õû>x?ø÷>>8¸»¿ÿÑ^ ~:ñ¯Ñ‰ŸÄ7GþrqäòÏ‚|„PÑøýÉ®}ò;ù¯ù‰þëtô¯ÓÑŸÑgwoèç³?ÙÅ_ô¯ðÏþóÈÈÐÐÐ +-Ð ðü cûÑçþ3}žß%äIyb~p^ ¤Ô³õ9ö¢½ãžÏûtߧo÷ÎÛ·ü‹À×ÿ:ø"~?¿<òÏ•G>ÈGÅ~;þÆÉïå·Gÿûáè_££?Ò¿Môß"ú½ý÷É~ÁÿIÀ¿Ð_ùgÿ‡0 6€F€g€v@§@úW»ô¼D¯ò¤<1?8/Ћôõl}ÄÞkŸq½? ïõÀWð· øñÄÿ 8ñUüK$~óÈù¡ñ:ðŸñð×NþRþxô_µG¿£Sèg´ßþáòwúGþƒÿÃȤ 6à{žÞ҇ùMBž”'æÉy^¤¨OÖGì“ö÷™÷·åÀß&ï ð ñWzâÇ#ßfœ|˜Ðim:üõ“¿'Iÿz ¿b¿Å¿¢¿òÏ×ÿàÿ0²ihhxh¾Ó-¾o•ù«¼C¯ò¤<1OÎЋôB=[Ï—½bïµ÷ÜÞðï+àwÅoù !Ô­ÿþ)'¿È¿Lò_ùÍÑŸÓ_Ú?‚¿ê¯üÿeÒÐÐÐð èèLHŸfâ¿æ¯<æÉy‚~^¨Öóe¯Ø³ömîsï+à›ŸÅ¿Lâ/'ñ§ù¿ËÄù¡²ðç'¿“_è·òóÑߦ¿a¿Ã_õOüóõ?ø¯0,€Nm­€Lö¼yJ^cã yRžèIz¡~°>Ã^µwÜx_ŸO|'þR¸ñ“ø­#ä#„¦ÖƒìäOò_tò;ú¯ô›³ßØŸã¯úóíøÿethÂð +-èÈľ¨fŸ—žÉž*ó¤¯Gé…z±ž/û{¾íU{½î#÷Æ{wà‚IOü¥xâñÇŽ|šØøÝÉoä¿`äô¯ýïúßúõì÷ö{üþñ_ -M€Ì€ nAìi%÷€¾$_x,ʳó½J/w½XÏ—ý€½ÓÞsï½þ*yŸ¿¢à÷Äoù !4«&ü£'¿•ÿ¼•¿ ?]ýéì·ö×ðú ÿ»Ê]€0´¼:a b+¹ô-6þí:OЫôr×Gëìö;¤}ƽõ>øðUüó³Åù¡éå`´Nþ¾ü9ý—-ýæìOöWðgýoªþ‰ñß.Om€¬Í÷Àõ°š{$¼È_¹ÇhŸsï¼çÿ +-y__Oü¦øgøý#ä#„zµá¯ümù ýæèô‹ýW3û=þ¢¿ÜþÂòŸ ,@˜™°a ú…Çôõ}UžÒëYOÔËe/Ø[í7HûȽ÷>ø=ð/ð§ŠòB‡l2üUùsú߶ô÷ìÏðOú'þÕZ€8¼²<q +-bûÕÜ#áEþ +-+Ï=C¤'êÕú„½h_rßö>ÿN~S|:¢%¿?úýýîì·ö;üsý•½þÉÿ0idxâ¤5èŸà¯1óìü6ÿ˜Ro¬OØçÚGî÷5ðßÎÀ˃ñB¯¢ ðÊŸýþâìWûþéô'ý•ëø?2¼2¼i vÌ ´rO†×åcÌ<;¿É?f¨'ë öª}:î÷é¾Wï—ÅûþÅüâÄÏÅù¡#©¥+ÿï“üÅÑí_Jg¿ÚYì÷øëénÿÀôŸÀL€Ž€¬@‚ÐͱܓáuQþ†|y#H©'ëöæ¶×ãÞp_÷~)yŸÄOà¿Yžø“Äù¡—nþBþ‘£Ÿé¯ýÁ~søüƒþáøþÇà ÐHKð¡„FîÉø¾~O>¡gé™úpÙìƒö–ûá>xŸøì}:ñ ø}ñqä#„Ž¬±“¿%þâìö[ükúÇë_üçH   #† ´ÞË?¿"è“ôL=[±¯i_pï¼¾=ñ-øóÄù¡_¹iò·~¡?;û£ýmü£þÌò_À,€n@œ43J¯~¾¶š OÒë{§½ã>ž÷Þût໿>ÄG- ’›)ò;úó³?Ù?ëŸø7þËÈ„ 0CíA3ÿxüŠ~õª^¤êÙzÆÞkŸ¸ç}îý[¹÷‡ä#„Ž´qù{ô—gnÂ?éoø7þëè褰[0=ûrü¢þ‚•^¨ëû\ûÄ}ÝûùàC|„ЂªèÓ‘?Ð_9û­ý9þ…þ¿€8ºqò1˜’5|ðÝð +õ—û\û‚ûŠ÷o:ï#øÓÅù¡WXOþ>ý5û-þþŽõ?[€¸iüLÊ¿¿~ÂK¯Ö[ì­öŽûš÷SÁ‡ø¡cÒ ùý£ö×ð··à_ýO 7 ­@>SÊÞß¼”~çK}À¾¢½ç¾ç½â#„Žq5”æПÙ_Å?ã?ø N€¿sʾ‘>žK¬Wì3í3îsï >ÈGƒúò[úGìÏñúGþƒÿaÒ¤ p3·\Ô|Ô|oÉüÌEOý…ø§eÚçÜw¼÷à×Å_ôÿÎ!”špô7èOöøGý#ÿÉÿ8qüäK0µüæëñõÑúˆ}Ô¾äÞx?|ˆ:†Õ½ÊèoÙ_Á?éŸøOþÛ0àg /7Ý©že?iê¼ùΕØGíëÜxßâ#„Žsóéwöü“þ†ã¿€l*S0½ò;þ‡ õÆú„½ÑÞqï¼ø¡Tƒ°œ~oË¿õß@±£kЪõ ÿC–zcýY÷'·¹Ï½oñB¯WSéÏì÷ø{ýÿnŠ è¯A_÷*ó^úÌz}Î}á=ÀG´Z¬•öã_úï Ü€þôuo8_P_`ßç¾é=ÀG½þ5…«ØŸã_ê_ú_NÀ”5˜¢ûôê ìkÜ·½ø¡“T»šýþuÿë0>“j|µ&} û*÷#Þ|„ÐÉlĽ:þ5ý[þ®À!ù¡ê_Výï0Æ=ÀGüF¬ãßò¿3Y˜ûjëOh`ßáÞ#„NSã ¶ñ€ÃÍÀ|äÇ©ïsðB§µžŽãú÷àW®÷Çtµ‡÷!ô›)øwõ?‚˜þ“´÷!”5ÎyþuÿàEÿ»"„бn¢¥‹€Þ¢ÿ%Bèuj¯G;sÿhB/Ñlt_nÿk‹þ‡B¡ÖKø„-ú_!„N~‹–Ö#„ÐÂô!tªò!„B!„B!„B!„B!„B!„BèÕõzÑm +-endstream endobj 42 0 obj <> endobj 81 0 obj <> endobj 83 0 obj <>/ExtGState<>>>/Subtype/Form>>stream +-/CS0 CS 0.729 0.729 0.729 SCN +-1.351 w 10 M 0 j 0 J []0 d +-/GS0 gs +-q 1 0 0 1 262.472 35.6399 cm +-0 0 m +--162.11 0 l +--197.855 0 -226.833 28.977 -226.833 64.723 c +--226.833 226.833 l +--226.833 262.578 -197.855 291.555 -162.11 291.555 c +-0 291.555 l +-35.746 291.555 64.723 262.578 64.723 226.833 c +-64.723 64.723 l +-64.723 28.977 35.746 0 0 0 c +-h +-S +-Q +- +-endstream endobj 210 0 obj <> endobj 82 0 obj <> endobj 211 0 obj <> endobj 212 0 obj [1.0] endobj 213 0 obj <>/XObject<>>>/Subtype/Form>>stream +-q +-0 Tc 0 Tw 0 Ts 100 Tz 0 Tr /GS0 gs +-0 TL/Fm0 Do +-Q +- +-endstream endobj 214 0 obj <> endobj 215 0 obj <>/ProcSet[/PDF/ImageB]/XObject<>>>/Subtype/Form>>stream +-q +-/GS0 gs +-297.1199934 0 0 297.1199934 32.8574219 32.8570574 cm +-/Im0 Do +-Q +- +-endstream endobj 216 0 obj <> endobj 217 0 obj <>/Filter/FlateDecode/Height 1857/Intent/RelativeColorimetric/Length 26176/Name/X/Subtype/Image/Type/XObject/Width 1857>>stream +-H‰ì×K“ÚØÆñÙŽäMPÑHâ¶i5U„„$Ðè~— +-éjøÐ\ Íõ@·Ã¹.²$ +-ƒ ð½ãÞYÙ¶em•ŠRxch:Ey¤Ì©7MªM7ˆâ$I^“ýJê/öóå'Rfqø¾wȧÇuÅiQ³¥»áäóûº®š-X‘¦I‡—*ÕÕÙ¸O=Ê]ûÚøVÍt•¹¾¤áü²‚¶ó|¦ÓÊ}»_™†ö4õQœð#4EÚ+¬GWÛc±ý¼¢‘p,cŽ…«ãi8ÓÌ5ÛΗð¬)<›ítlCUF25'–~,Ö£òPißöA›¢çæqßÞO륪 ÅÎÏ×þN¸S|w ¨KÏ(-šédG“º3ôkK§žÜ0p=¼ Ê#e®[ë½Æ»©Î,EË< ÝýÊxšºQøÁšô\Ø;7LòŠ½ëèaWfmw.µf;q*àpž<šiK{óìGÉKŠVtcùǽ˜D<õá‡á»ý6=㬬ڣX¤4ž[ÛPi;qàÖP‹öÇ3u¹Ú{mŠ’ªÌ³È?¬éÑ?xÀ“¾;N‡3­MϲªO§šÆ3òŽȩCÝ 7‹î¯¨½94+Z²­ò$òö¢C±óóµ?Þ0®;˜Rz=àNìýFGÞoêl,÷:O¸u4¢ýfE·n@@pªË<ö÷+ãiÚïâƒïëö§ªµ=^Î\[žûµ©ÍFÂ^ZÑ¡B5pðãŒî³ó¹.³Ø?n-uÚ¸k¼1œ0`ëé†iѬ'¶ÀÝšš2’ðb€Wˆ¤ÑL³v^”U]×U™§¡Kª p«Á_†¨=Ͷ=+v̲ØÛ¯–óIÇ ^1¾;P4Óyö£”n·Š64 Ý¥)èPø+4íÙ¬gV”e™gq{¾†Rë ¯×mBts bºã؆¦ÝqèPøV\—µçåd•EÆg«¥:ÅÉ€·ƒg7Ýrµwô(ëº*Ò¦¦èPø³>µgœåe‘§qpܘª2’p¦àái¨¨æÎÒK‡†î +-JÛžízEžÅþóÆœOú8LðFqÝ¢Ù;êмÙФéPe€f€ÿkOÍÚÃv=SZOÇ õ°žð–± ¥tø´¡iäíšņÂWáʼnjÑJò¢¼¬çrþˆõ€{@¡hÖŽ]e]WEÊ:Tˆï®ýapó8¡?Ó7Göü*Ëí ÷‡:tÊ:4J‹ª®è&ŒÜ1C†Âjâsç'Í¡Éÿyƒö€;Ôt¨½k7”:4ñ÷¶6qÂF¦Ï¢®ë" ´žhO¸SÔ¡ŠjÒ†fe}ªË,v·ú/Ã.®Dø6>½$¿¼¶v–Šõ€»Æ6T³~RT§SÝfèDzwíÏ‚›Â ýK|V´žiènte€õ€»Ç? gºãFyIZæ‘·5fƒ.wíÏ‚[Á‹sŠÏ¸‰Ï<ñv–6ñÆ`xqB¤eÍ64¥ U'=L(^š.œ6>kŠÏ£³Pð¼øŒïR†n]ª 6¡YänS‘¿öWÁµ½“}CÇ¢¬ª2Oü5D|üJ&C ÊЪˆÝ>íaBïG¯*cë'Ÿ‹Ï®  €ßc&õF”—õ©ÊªPº0¹k\ß›¨Ö¾Ï<ñv–:A|üWïÄ©¶¢ -Ù­¹tk>ŠhŽ;Ä‹Ó½¥²²ªÊExÜ®7Yl¼&>‹4|v4Ä'À×à%E߃„ò£ÌoKŠ +-½#4Ÿ›ÏúT‰¿7ç=Ì'À×áÿÉ~½î6ŠeQþm°qI£ +-Ð=3Œor:¾lò…›Ã¹ êýŸepU÷¨g4­©JœÇYß,#í½—ÑŸ:ç*ªó mV¨‰úA(wýÙ6ÌÏë““$XÿþY‘ àQþöëxüQCÐB?ŠÖ=ÝN„ Ë à™ÚæhéÿÇ +-Å,½qçõ¹Þ'yÉX™ÇÁj„õ ð,ª1<·P*ª¦ŽÄ>ZèmSîìGwŸŠ¢È’£·šøn€çj›Ã…f%œæßV(*ÉjÖçÔÝEi–7ÛÓwf}|5À‹¨ú`¾Þ'å¼Ì#´Ð¥Üõ§ëóúÌÒh¿ž ý¬ÈŽðî©Ÿÿ1^q^2ö½…š¨&7FÑû³Í>>×gà>Ú:~à2Ts´ôã¼i¡Í +- ÐBo‹ªçÛcšåYÎoö~àrTs¸ø}…q°B ½ª>XxቒÅ;÷±‡õ paÍ +-]ç*Ø·Šz ZzsEyÉ(Iî#Ú'Àk8·Ð &¬ª8I‚å@Wd'‚Ò¬™åLœ"ofëXŸ¯C5G«ý‰ŠºâEäͬŽì@ðª9v9• ÙÁa}¼¢ö/7ÌYU73÷èŒÍ¶ì@ð\Š1\IÉ«¦~ž¯!Mv €§õ~\0!8I‚åµå}jéý…åÍ?²"]‘àæ©Æ°Y¡9eœ±¿šX¡ïOÇšnìlþ0ýåÐÀ¼…f….ý(/ùyüž[hKv"ø)Š1v)aŒæN €·ÔnZ¨åLÖ´ÐY¯+;ü8E,ü¸ ŒIsþmÙ>”¦…®vi)êŠåáf‚ó^´îú³m˜•Œ’ôàŒL¬O€·Ö6'ë0gU]Ñl¿êŠì@ð:÷ÓÍñD(%§ãfz¯ÉÎð!u{s?&¼®‰½™Õ‘þŸ–>|Ú§¥enfý;=r(Æp$¥¨ÍŽÎØÀ<¾nkæEyÉhûó¾®ÊÎð©æèi*…à$ æ=MvøkŠ1v'B)IÎÈhËÎðÁµ™¸ÇŒrNóp=11–¯T뮿ðãœÒ2 ·3 §€|ZoîǼLw«¡®ÈÎÿCÇšnìdeûó>> à*(úp¤„ ^4ӹוþ›bŒœÃ‰0FÒ½32TÙyàwª1Y‡9¯*–‡ë‰~s]´ÞÜO +-Æhm§–&;üI·7ÒRT‚¦»¹zEcì3ÊÏõs5ÐqÝ\Å<—PVU¼ˆ6cúZ4õ3Hã4 ·_P?®Ö›y1UEO»%JèuøV?ósýLüÅàw À5RôáÓ>cUÍISB kùÎõ3%¼©ŸGgdª²ãÀ_hÿ2ÙD„W¢)¡s”PÙþ\?g¾àšuíåîD«Š!J¨dçú™”ßê§;ÖQ?®›bNÖQñ½„.PBåù^?çMýœ÷ð×Oûw PB¥Ñ¬¹ŸoõÓáÞÕœlþ(¡s”PZúÈ=f”3’3K“~P%TªöýÔ‹ ;×Ow¬«²ãÀSÌñú\B«¦„.zh@oK³WûSÉšúéÏ{]Ùià§hörbU-ŠÐ`ˆ¿¡–>rÃœ²¦~:#C‘~’jN6uEobª²ã|íû©”6õsfi²ÓÀ3t›š±ºæÙnaud§ù 4{µ;Zfáz¬ãlxŸTóa›”U-ŠÈ|’æ#hé#÷˜•”¤»•Ý•ž­;pÃBÔM¼S‘ææµï§^TPšG›ÇûŽì4ðš5ße¼®y¾_ö4Ùin\Ç^îRBËìø4Ôq®¼oŠùॴþ*H躲ÓܲÖÝÈ9f%%énaá¥Þ¿îÀˆ¨+šxS•æfµï§Û(§emÿÙ‘.@ë-÷«+–5Õ£ýuhöj—J²£3ºSd§€‹PÌÉ6)«Z‘3ø$;Í-jé#÷˜•´HwK»+; \Lwà†…¨+šx&úÑ¥µïg~\PšG›ÇûŽì4pAš5ße¼®y¾[Xñ—Õ±WûSÉÊìø4ÐqžÜÅ|ðRZ}$túšì47E8aÁX™î–VWv¸¸îÀˆøZÑx3ü$;ÌíPŒñ&&œ—‰7ýÒ‘^Ö[îs^×,õŒ–ì47¢cÍý´äœD›±®ÈN¯B1¶)­kžífÊÒ%tì§CF+BwЕ^Mw¸Iʪæùѱ±A_Në»aÁ8ÍO¶&; ¼¢nß Q 9}4¦—êÖ1á¼Lü™…{ඵ{‹}Æ*QÆë:Ó‹(Æd›”œ“ÈŠì4ðÊT³ûTˆ2YO0ö_ }? RÊY>Ù]Ùaà |®#Ây™s«-;̻ձW‡Œqší—–&; ¼ Í~:æ”Óüðdcö?OÇv‚sšúÓ/Ùaàt¬y–œ“Èícƒ>G³?#"D™lƺ"; ü‹ýz[jYÃ0|lÅ’r4vN‚…$pyUÀ€,ã2¶µA›nµ\äþ¯e²­©Y+0:–Þç +->éäíÿÍÃq”ˆ}’È·u9@–·ï§zü}ïuo¼)Û,¨Lç'ô™zƒq—JUqèYºÇÞ˜í…qµ/h¶˜ ßésPúGg×IYËrK? ‹ÌÇ‚îê|uáôu9 æñå*«duw¸¦î1 ,7Ø”j§ŠMÀ%õd¦¬óJ”Éâ|D? ›úÎÅ*¯wˆ#<éÎ6…Åvv:4thòîÃd‘Õ»LCßÖ=æ ìû¹-¤Ì7WÇü0è²÷'󴾿—)7èS<ô³Ü÷s}éXº·´²ü¯åýµŸúÉsºî{A¹AÅúÞÏ¿ +-`ùQZï¸AÉòBú øá¡ r·“IDAÿ·Þ`ÅôðË‹Ñ4"O††î1¨þèl‘TRÜÝÒOÀ7–Æ•R"[N¾î1¤þñåíU¶º8¢Ÿ€oL7XRÉb¸–î1 ó8ز®’ŧ¼0?˜Ît™ ¥ª8ô(èßíßÛ²®«8:ºÇþ(Æp2OEÓÈ$¢ cº³mõø¸ðmÝ[ÛR¹ÛÉ4ò)èÏöýŒ«F‰8äiø¶¦òþ¾Nçô'_úÙˆ$¢Ÿ€dîoÐú¡ Ü ?ÐOÀ/ÙÞׂrƒ~C?O`ùó¬þü¹Î(è?úÉü¶¿¿A?sƒ~E?OôíMIý<Ã÷4òºþq°¥Ÿ€'z¼Aï jêÞ¢ý<Ëã z/“ÐírA{£ËM©ý<Õ—t'ãÀ1toÑgpv[Ôýôè'àinP¹kªÍôƒî)ÚXãŬ«˜~žÎz,¨*–[÷M,/JľŸ!ý<ƒí…‰hd6÷»YPÓ ãJÒOÀs™þ<J$‘gꞢé楬’ȧŸ€ç±ýy&÷ ;xƒ~é§È§ÝûvÀKÙ“e¡š.Þ _ú)ïVŸº§Ðpº®šL»vƒ~íg~{ñÑнp€ 'ˆÅî^¦ÝºA¿õs}yÔ×½pún˜È‡‚†ž¥{Ë›é›â±Ÿ£.=¯Éò¢´¾¿—Iävåë]®é'à…¾4pÞéÞò6g«\ÐOÀ YþCAwbsñA÷”7a¯³JÐOÀK=t×”«ÿ¼×=å ˜^˜T¢Ø\:ôð2–?ßTå‹K÷”ßÎtgq)Ëíý¼Ø¾ Y½«³¹ßö‚>ö³®’ÙqÛ¿ðì“E®v2¼vßeý}?+%臨î)€V°'«¢idºm.¨1ºÚVJ•·çCÝS-1¼ØTM#âÀ1tOù}†çë²iªm0jñGÞÔ;'ˆ÷­ÖÓögöd™«ý#!tMÝS­ÑwÃD4ªXŽ-ÝS~Ë¿Îj%’УŸ€×cyû‚*™E~; jzQ*•L#¯ßÐÅô£Tì/´¨•šé~yÌ[ú>ècûóLª*™¹í+¨áÛJÕùÍø½î)€Ö±'ËB5Õ6õtOymÃéºTª¸=è^h¡}fª}A7çt/yeÖø&¯Uµ½<2tO´á±hT±œØº§¼*ÓŸgR‰8pLÝS­ÔwônÔݵoéžòŠúî,LC·M_ø“X'×wjW§¡×ž[­7ºÚVªÎoNmÝS­eO–EÓˆ8pzº§¼–Áùm©T¹>ê^h±átS5Mµ>è^òJ¬Ó›»ZUÛÀ1tO´˜1 +-bÑÔùblëžò*ún˜ˆZÄ¡kêžhµ}qR¡d:÷úº§¼‚ÞèjSÖ"û–î)€–³ü(“ªŠÇÐ=ååþ:[åRd‹±­{  õ¬É²¨Uµ™u/y1óô:2_ t/tÀpº®”*–“C?Ûúî,®d±¹<2tOt€áÌÙÔÙÜ3uOy‘ÞèrSÈ2œÃþÀ¡0½yV7"ž9=ÝS^bp¶Êe•Í}[÷@GØ“e^«r}>нä¬ÓE&D¾útÈ8,ƒóu©ê|1>Üã­ï†q%‹ÍåÈÐ=Ð='ˆ…’éÜëëžò/õFW›RVñÌ5uOtˆéF©T" œ½ßg«\ŠìúÔÖ½Ð)Öø¦PªÚL‡º—ü+Öxq'd¾úô—î%€ŽN7•RÅr|ˆ'\ß “J›‹†î)€Ž1œY"›:›{¦î)ÏÖ]ÅU]ÅsxÛ‡ÎôæY­Ä¾B=ÝSžkp¾.kyw}bë^è {²ÌkU®Ïº—<“uz“×uy{6Ô½ÐI‡œÚr§–î%Ïb‡©T"™9†î)€Nê9A\Õ%êéžòÃé¦RõÝâä°ºhÓ SQëó¡î%Ï`o +-¥ÊõÙ@÷@gíc”K™ßŒç˜3ŽÃT6"¾:2tOt×pº.k‘„NO÷’§N7•’Y蚺—:ÌpÂDÔåú| {ÉYãe¡T~sjë^‚ÿ²_oËikY†sk ã‹”‘Hœê€AP®lF „NkI*òþÏÒäл“Ž“8;[Z8þ¿˜cÜÍð¬Õ{Î^ˆý}¯®ºÉ£hí©/³Äµ›ª›ž9ÃÞÄ2ñ¦­3ÕMôÝ4þ´­©nxæ´ÖÄKdìMÕM¡Þ_FY.ûª›ž½óž +-:ýºê&?¥µ§Èwh¨nÀ s¸‰¥ð¦í3ÕM~Æ´Ý$þ¤¥«nÀ ­5õRoN~×ÕûË(“¡Ó««nÀQ½çì¥'þ˜´öÔYâÚ¦ê&|dÚn,SoÚÒT7ù‘cË$þ´}Ò-ψ֚x©ŒO{Û÷œPÊÐé_¨nÀgçýãsÊ¢åM]u“ï:kM|‘%îÐPÝ€¿˜¶›æ2˜µ5ÕM¾§1ØÄ™ð'-]uþ¢µgAV¤Û“ÝwZç~/eèô.T7à õþ*)òhaÕT7y˜9Ú&2ÙŽšª‹ð•æ­/ éݽR]äAç}'”"¸ïꪛð•šåDy‘¬o.T7yÀYkâ¥2Z¿k¨nÀÿ1í­(òp~­©nò-c¸‰d²»ý× v?NP«Ô jŽv²îà²Ì*ôr°•éÌ3´Î"ÊóhÑÑJ  Jg]'.ŠØ±J|nÇ'- +-±³ò"¨˜9ö²C¶³/Ë‹x=Ýgy¼èÖÊ‹ bzo™Šhþ¦¼„þ*É¥72KK zæm¿››ÒöáqãÊìä¥Å&tÍÔyÑáªòÕoCuXÊ ·BËd웩ëÆ©”§©©ƒ[uæYQdó®‘2'XçJ¼<#mØË'R‹mà˜(ó¢ÃUå«k¢ ‹9ÁVh™D¾‰²NœJyšuLt`µî<+Š,6ñé9Á&Wâ}äèÀnþ8‘Z¬C÷ñ*/:\U¾úm  +-˹ÁVh™ŒýÇ«ºq*åijâ˜ÀvyVÙ¢ûp‘lr%ÞÿxF`;œH-¶óh‘®ê¼¸&V`9'Ø +-­’È´¨§Ržf£°^w~ÖE?úñ9Á:Wâ}ä€íüq¢´Xîc5^t¸ª|õûÁ¾ 7Ü +--cÿ±šNœJyš>zÈð]tæYQdóîC%Î`+ñþÇ34 +-ÛùãDéË&p)iüÙ u^ \S«°œn…–‡Qã‘’æäx•§YÇÔ(¬×{˵:MZttç©ï#ÏÔ&¬×šžŠâ¼è=Pá›\æëkl¶kŒR‹íðßÏ‹B¦q×Ü(l÷y>^´JÆþý8•×ãkËÜ(¬×™gEq^Ü?:ÁúR\ßÿ4 ŽÀv^”¨RlçÞ‚Æèp-.›û ø†œpw-U2ºû€lMÓÇNX¾£Þ[^é´õ@^§ûó|K­YZè|Ñ»3î?/Xyøs÷ À·äE‰*¯Ûн/î¿‹R¬ŽÙUXÎ ¶B«äÕ¿/Þ]œµÎâŽÙQX¯3ÿüÏ‹î]a'Ü^K•Dw~¿|[þø¨J± œ{Â^”¨êº ]Ó«°œÈQãžðË,ÓåeÙ7= +-ëõ–—R§ÓÖÙªÌâÓ›°ÞWäÛ=W¤;ÜË}ûÆG`;/:•Ü Ý;¢ã£þPû{¢|sn¸“Uq×ùŸ«±¼çxà»ë-/UyŽ_ê'ûKñQgw$øö>ïȲ«úw¤3Ü«}Œ¼'ŒÀvÞø¨?ä>tj£Ï ÚÝg¬Àrîp/?ŠdÔ¨lM³òC¬þ÷ŒQX¯¿•N'ͺ¹ö"¯ª|Þ~Æ&¬×žŸËò×þ¿>Þ2ÖþxøšÓT——·^͘;Ü˪HF§ŒÀvÞ(Qåuº5cѱ¨®› f € ·BËCäÕ‹½Ì2]拺‡+?EwqÖE:{©—ê½å¥N§­çlÀz­é©Ðù[½[òón½V*©{·ðc4FY^·S/”¨JîB÷Y«°œ:ŒuBÍiª+±ê?kÖë//eqš4ëdÚó¼,óEûY›°^;>k}Ž_êdú+Q•Ù¬õ¬MX¯99éòòÖ¯qÂüÐDZ÷´QØ®1JTuÝ Û#^”jÖˆðøŸçdU$Qs²9Mu%–uŽV~šþòRélÖº=ÑžŸË2Ÿ·Ÿ· ëµã¯ïpQã;ì-E¥ÓIóy›°^sšêJ¬ú7œáNVE2òž8 +-Û5FIQÉ}è܈¾»Ð}æ*,ç„ÿ”[ÍIÍ“€Ÿ¨¿•>½þºõýK|.Ë|Ñ~æ&¬×žŸµÎ¦­[ßwy©Óió™›°^sšúß|Qö——R%‘÷ÌMX¯%Jço½Ÿ;á»Ðyê(lç~ýˆbº·=oŒR_ÞúÏ€õúË\ËèqÛë_¯GUdqû¹›°^{~.ÔiÒ¼íukzRê4m=wÖkÍÒâó¦|¹íu;ΔLÆ¿ž» ëýšüŸý:éi+MÃ0¼7«rÔxVUD%‘€ñží3X6$¤†þÿÿ¢!ÕI¥»Û|GGÉu­ŸÅ»»õ’tÜ®m·ÞëL’ù»£âËÞ¹W|s§ÓÞþVãÂáå,™]þRxᣠï +-‡Wót~u¸Uk¥Óîvµ€ïÙ~wšÆ7GÅm¶»A’NÚµ—¾ r¯Öž¤Éàdw›mùt”¦ã³ÊKß¹WiÒdØ,o³­žMéèt«-|×ÊÍáÓWYÝf»ß.’Ac«o¾k»'ƒd1íîo1-^ÍñÍÑO/~ä]ñÍm²Œ._ïl3½‰ó‹Ÿ /äÜÎáU´Lnß¾Ú<Ý=éÇ餳÷òG@îí÷æËÅ°YÚ¼,5I2jU_þ&ȽZgºZŽ[•ÍËrs˜$ÃÓ-–ðÝ«žM–ËI{‹¿²Ò%ñ Q~ù› ÷*­ñr5ílÐêÙ8û'»/ä^©9Z¬fÝúæå~wšF7oŠ/äÞ«·ýt9??Ø8,¼¾ŠÑÕáNG@Þ^_GËèú°°iX|{›,g[”~ç³e|{TÜ´+5†‹Õ¬[Ïâ&ȽzgºHÇ»›våÖx¹šujYܹW=/’a£´iW9›¬VÓv5‹› ÷*­qš›åM»êÙtµšœU²¸ r¯|:JÓÑéÆ0VÛÓår|º1´ðC(7‡i:nU7íjé24v³¸ ro÷d,&íÚ¦Ý~o¶ˆoŽ~Êâ&ȽâÛÛd1ël˜/géìâçB&G@Þí¼¾Ž—ñõ¯;ëgÅ£wódÜÞËæ(Ƚƒóù*¿Z¿Ú=¾âa«šÍM{õîün9>-­_•NúQ4hV²¹ r¯Ö™ßÝMÏ6¤±ÔøÐr67@îU;óûûY»º~UnÚPø˧€Î;Û´/ ð_Õöl«€ãÇ€–²¹ r¯ÒžÝÝÏ»µ «Ó§€ž(ü¥r6Ù" Õ³qÝïfsä^©9ZÞÍ{õõ«½î4nŽŠÙܹ÷긟®¢óƒµ£Âë«h]îdtäÝÎëëx]ÖŠoûÉr¾¡²ð#9èÍñÍQqݦÔ-ïæ½½¬n€Ü«µ'iÜ?Þ]·©´&w÷Q¯žÕM{ÕÖ(‰û'¥µ›öìþ}Ô«euä^åtG›Ú™¿ÿ (|Qn>´±6 µnôáA@àoåæ z hyݦÖ€/¶ +-h/~ø˜œ (|Vn ¢ùÆ€&ZÏê&Ƚr£/ ð\Ïh-«› ÷¶hO@à³í?(|å) Ñ}ˆ¾(7›Ú?|ˆº +-Ÿ} +-è`S@£÷ïçjV7@î=4ŽÍ ßßÏÚ +-Ÿ•ž:<­¬Û<ôn5i­,üPžšŒZk¿Ëzw¶ZŒš¥¬n€ÜÛ=éÇé¤][·Ù?Ÿ-“Û7?euä^ñÍm¼˜õÖL +-‡Wót~ùK!³£ ïv¯ãUüî×oOŠG7Q2éìewäÞÁEt·žüëÛ‹ÝãÛ(µªÙݹWïE÷w“VùÛ‹R£ÅÃf%»› ÷j½øÃûygÍùÐhÐ\“Xøá<ôá!îÖ¾½(7m(ü­ÖK>~LzëÚ| h_@à+õóô·ßÒóú· +-ÿðÐß_\(ÐC€Ÿ´»ÕÕUÙ©hUm-Lï&˜y­nyy9Ø]¼ÑØèWÃãíš<;ínqqþa§yÿb~}Г×5?*<;“€~m6î_Ì­îW£Óîòôn€™·ÜŒ«ýÕ?î_¼\yWŽË÷¿œÞQ0ã^¬¼-Fƒ7ÖÕq¹Wœúk¯¦v̺¹Õ‹êdw©nÓîçg'ÛÍiÝ3o~m¿(¶ë6­Nqq~úºvÏJcý (7ê6“€^^€[I@û›ÍºM«S^^–Ö´n€™×¼ èÁF}@»åÕUÙP¸uÐÁƒ­®¯«ž€À­I@ h{Z7ÀÌ{l@? î| 躀ÀS|h£n# ð€À÷€6ë67½®î| èÆcÚšÖM0óÐNyuUunMZ<ÐâòªP¸ÓÜìß´Q·YÜ\\ +-(üpÐâ`½6  ;§ç…€À…­Ã²Ø¯hcëøì¼è¶§u̼ţI@×æë6¯Öú£ÅÞò´n€™·Ô9©ïÿ™«Û¼üë}yV¾[y1­£`ƽXy3Þ>ÐÆåÞ`\í×Wž‘¹ÕýrtÚ]®_µw?ŒªƒµùéÜ3o~ãp8>í´ëW‹;Çê¿Ñ˜ÎM0óš[Çã³ÓÝVýjaû¨š´9›à?öë¦)ufÂðø £CJ 8Ú†‰IZ‚„ïtw%þÿ¿rÜgOÎhX­ï}×êZ³§´×÷“ú=[ N¤¼£(.€?ú~úq@—'¨år@ø?ƒåÇM›Pqôú_³ íý> uâŸ8½yXŠhÁàß´Š=ëï©Û§C)cø5›ÐÞp•Vò8¿ý{ª;Ý—2]ßÍ&´7Þdª ÿó÷”ao Uì&¯€æ>.c.ó—_ƉÜx“Wâ03¿dºë>¾"YŽN冫¬V‘×ûŠMhïve´œÊ –Y]'~ÿ+6 ½ÞüP–Gïäa,Ó÷÷tyòÐð¯`¹aY†®u*×÷Óú=[q@øÍòŽt~ú€.’ú=_¿bÚë{QYžz§r=7ªÞóÍÝWl@{?E0»=•3g¡z/^î¿bÚ­SY컧rÉ[Y—oã+F 9c²-T¾µ;'“÷Ïy-Ó“—€®ˆ*ÛÜŸNÞ­²JŸnÛ߀özîQUÙúîtrà'•Š\«ýMh¯¿ˆ«:]%•Šýö7 ½Á2­ëÄop-/RUº¶¿ íÝ­²ºŠÖédo~TU¾¹oÚ»Îk¹½ÓIÓ9ȺÜM:í@sÉ®¬åÁ1›EßåaÖ +-Àg:øøVÚFƒìÇgõ½Š¼ŸU~¸Þ<”*[›d‡«¬®¿ßö&´g¹G)cÐ$Û÷“ªN—²üh}/âèZM²=7Ru¶¶½ í üX”‡§Û&YsvUþ|ßö&´7Z'²Ø?v›dÉ®¨Šm´= +-Íök&³W»Ó(=Þdª ¦®-?Xwº/dº7K—‰áÓm»›ÐÞí<2^›¥û^$ÄѵÚÝ€ö,/’2Zô›¥{ó°ÑbÐî&´7ðc)Ây¯Yº;Ý"YÚÝ€öÆëT•Óm–6ì×Ld/v§ÝQhΰ·¹Ê·¶Ñ0?Z'²Ø;f«£Ð9 J™®ÇMó?–âèZmn@{=÷(dìšæ-/’*^6Îð#}ü(•Œ¼Æ?ÊÛy(«lÓøÇ +-À4^gJ„O½¦ù®ˆªØÙF›£Ðœ1ÙUL» ö¶¨Å¡y€ÈtÊ­ÝiÜo²J翬ü@–©*[›7~R©Ä´· íýïÆçœÃóO.?Îx“Uòèöš7Lç «b;é´7 +-Íö®¨D0í6¯t&»¢ÁÌloš3@TùëÃ9ßÉߟVyVk£Ð]Ï=J•¬Fçtˤª’å°­MhoàÇRFÞàœNÏT?ß·µ íשá¼wNÇt².ß&F[£ÐœaosUî§Ý3KE-CÇlkš3@¨üõ¡sVk¼Î*{VK£ÐåER%«Ñy­þ"VUº·³ íV‰’‘×?¯eÎBYÛ‰ÑÎ(4gد¹‡™y^­3Ù•µ88gÖø!ºÓ}©Š­}îWr¼É*yV+£Ð]o +-•®Æçö~RUÉrØÆ&´7XDRFÞàÜ^Ï=ª:>ûðð#ŒV‰,ç޹½î4u¹›mŒ@s†ýšËâí±{~q[Ôòà˜m¬@sæt_ÈôåáüäxV*ò¬F ;Ë K/Gç7û^$UrI€oïn‹2t/øGšN Tþbw®? +-Í/©È÷Ýó«{›«2pÌë¯@sÝé[.Òç_ÆÝÑ*‘âèõ¯> +-ÝYó°,#ÿ +-™®Ç×Þ€öî–±(së’n÷q_¨b7é\{š3ì×LäoÝKÊÿ<¼æJ„³›k¯@s7NPÈôù—qQûãûªTâß]yºú‘‘?¼¬}óÊ*µ/;¿|WÆÃK&Ë`vsY½3Ù•8\Zà›2 TùÖî\دÓJÅ‹þUG ;Ë‹¤JW£Ëû±ª²Íøš›ÐÞÇRÉȽøi΢.ß&—þ`øŽ:“]Q‰À1/}À°·E-ÃÙÍ5W ¹›§PVÅÖ¾üy·L”ŠýáG »óWUéz|ù ·O¡PÙóÃå'€ïÆ°·E­"¯ùÉ6WÅÞ1¯· +-Í™N jq˜}æúV‰ÇÏÜ`¾™¾©:ßÚÆ'Þ°ÜPÈd5ºÚ(t7Z¥J%þÝgÞè>î ùÉ# ÀwbL¶¹‡ÙÍgùçá%“eà|꾑›YPªìÕî|ê•¡ ->õàùsúüOž¾›ÿ²_7Kj›iÇÙFb< JƒôÂŽ”¨uŒTê¶$H¼*rÿ×2™mb;¼ú õÿ]À9Ïî©ãgB7oØ2sgyq¥e¶q½¸4Àƒpüôët´ïÌù:dO/wYÄ|×<¾"¼ûñMüLÔÍ#¶LÀÀY^\j‘ùÎÝA«¤ªeæOL\ÀÀMüT¨2ö컓áI«bw÷”àÌwG)¡·çl2©«xeÝÀÀY^\*‘nœû£ìURi‘™ˆ`à&~zQe왘ó°Pª01f¸ùî(e±››Èšø™ÐUbä0d–—J¤¾c$l•TZdþÄD6ñÓ‹*cÏ6’¶ ¥ŠÝÂHÃ5ߥ<†s3iÎ&ºŒW–™8ÊòâR‰t㘉³›8-2Sq ÔÄO…*ÏÔdœ‡…R§—…¡8†i¾;*Yìæ¦ò&~&ê*Y™zÈ ‘åÅ¥©ï \%U-3s ÐÄO…*cÏ6–¸OZŸv c Ï<¿<™ gó°Pú¼ÿhµíuoëq ÙôÉ^'•–ùÖm%üÓ«¸êcÐJ8=rƒ\ê*Yµ3Ÿ^NõµŠ<»•túb-£R«"\´ïlru•ÙÆi'€ž8~*k™ú-}8{Wu}úí©xz²Oº.£¥ÕRþìù ®âmm·”@Æë×K-ÛfÁUŸgmЃÛ@¬«d5n­añÒLÜ*^1Aÿ¶—Zᢽ +-ÇÏäUåím\:çnsY‹ô×I{Ö2:k}Ž>ZíuÐ)k¹¿=·Ï¿´ùܦÛL´ü¤èÔÄÿ"´Hýi›%–•Zwó6KèÐ|w”ê´_Ú­¶¸A&d¯Ç­¶Ð{•”Jd›VhSãE'yÉŸgíÖÐ7È…:ï—mOÃé6kzâU»C€nØ«¨ ùÖm¿()µÈƒÖ‹èÀm€ê2Yµ=@G£EX(]F^ûM´Íöâ²VE¸h¿j⧢–ùó¬ý*ZÖ Pu•©ï´_e}Ü—u]ÆžÝ~­²Wqu­ËhiuPÖçê*s&(ࡸÛLÔ2ïk€Þ>x\Õuyã¾.à‡ÙËè6@û|_³çÃm‚ö÷ÂøaÓm&otÖß c/.µ>GžÝß üËÛŸ{^n -²-ð(šÚÿï²—û“’ç½7îó +-¾ÛíuIYì—}Ðæû_*uÉžg½^À÷r·éE–oþ´ß3¬÷»ƒPçäÓ¿û½€ïò¯ut—<|oõ~H\*y|ùÐ÷!|ÛOïwùEœ¢õ»¾/Í‚\èKºqû>€ošþúvÕ ¾ÖØ‹ÎZŸ#Ïîû¾Áúøù(Dñùã¸ïKÓm.¯2f}À7L7i%«/þèhd{qY×U¼Â7àÏÙÞþ$e3@í¾/ùj4Tþûs߇ð—fAvQÍö}Èl/:××Ëë§w}_À_x·ŽÏJ¿ý2Œ:MýT\u~°ú¾€?õÓûðð?öël9m¬ ÃpŸZFRŽ ü £í¿mÀ 2¦„Aš¶¶Täþ¯¥ÉP]I%鎧,†÷¹‚w}{)<^ïȺ-j9QQfËþÎðƒêí2Õ*˜4wçÞ³{‹´(¢‡óSé~áô|iÏ/-é’oÔï|U(P“àêCo»UÞ .ò­/«žÌ{¶t ?e]ºI¡£Y·"]òêí2Õ*œ¶ é~ÂhM‚\§Ë~Mºä{Fs¨"]õëÒ%üDµÿéÒ &;wé™—óXëxÞ³¤Køyñåyôp±{3U믲B‡Ó›vNšc?Óéò¶*]ò#£5 u™­v± päÎnIžùãæ.^yVÏMÊ"žW¤KøŽÑqB¥¢‡ Kºä§êw~^æþèÒ!|§Ú_&*]êÒ!?W9ˆ‹2]ôlé¾a^ÌÖY8Sé’_¨öWª,"§mH—ð“ÆÈK²È½>“.ù£5 u™{út ÿ¨Þ¸Q–¬î>ìî}g÷ܤ,S·gI—ð•Ùu‚4 ¦Ý]§ZßS½ž¶O¥Køì¤q·ŒÓõüº*]òoŒ¶³Ö¥ò†ué>;»v×i¼¼kÒ%ÿÊî¹iQ&nÏ–.`«rîIâ;]Sºä?Ô‡ž*õÚiïöÐŽÃIãn§k÷úLºä¿mg­Kå ëÒ%üU½v×i¼¾ßý»Îî¹IQ&î¥%]8zf× ’ÄŸvöa”jý•*õzÚ>•.¹“Æh§ëùÿ«Ò%¿Ãh;k]*oX—.¹³7Jãå]Ã.ù-vÏMŠ2YôléÀQ3/îƒ4õ®)]ò›jO•zí´O¥KGÌhŽVI¶v¯Ï¤K~—Ñvֺ̽a]ºpÄj·‹(KVÃ÷†tÉo³{nR–éâÊ–.-ëbfiàt-é’'¨õ=µ)¢û½Š³=õS¹×Ué’§0ÚκØäÁ¤iH§Ž’Ñ­R•®FýZ"»ç&å&[õëÒ%€£T½}LrÞŸ[Ò%OT¬Ô¦LÜ+[ºp„¬Ë‡(ÏãÅuUºä©ŒÖ$Л"šu÷múû¯Ò™†J§«á{C:åɬî,*6:œ´ö¯°ßŒæÈË´ +-&-S:åìž›”å ëÒ%€#Së/SG¶tɳÔžÚlÒEo?óûʾœÇZ'ýštÉóœ6ÇþXD÷]K:pDÌŽæE曆tÊ3™ÝY\lò`²·/ì£9öU‘‡NÇ”Ny¶wW‹´Üd«~]ºp4jýeªuôpiK—¼@}¸Re™¸WûüÀ>±zóXÉãmMºä%ŒÖ$È7E4ëZÒ)€£`v0/2ïîƒ!ò"VwNZûýÀ~0šc_y8m›Ò)/d÷ܤÜ(oX—.Z™:z¸°¥K^¬>ðÔ¦LWûÿÀ®³/ç±.ÒÇ~MºäåN›ã@,âûs𶬎æE曆tÊ+0»³¸ø¨C§S‘N´JkìeZNÇ”Nyï®Ü´Ü¨`Ü:•N°“ÆÝ2ÕùúáÒ–Ny%õÁJm6ÙjP—.°êÍ"ÎóxqS•.y-Fsìç›2YôÞI§–u9[«<~¼7¤S^ÙqB½)¢ûsK:p ÌöÄOódu×4¥S^‘u>‹t™Óö!½ +-°;*­‘—¨Ô·ëV{wåÆE©¼QÓN “Ãe¬²Ð9·¥S^Yív™EºìפK¨z³ˆ”ŠÜëªtÉk;iŽ½¬ÐñüòоyÖÅ,ÌTü8lÒ)¯ÎlýL«pÚeA¯ËêLýTÅËQ«"òÌÎ4ÈtæO;¦t +-à lo´U’%«qû0ÆîNCµ]ÐIÇ’N³5ZÆY²½Ðu_¬Þ<ÖEæMÚéÀÁ8mÞm÷3 î/lé”7Së?¦E‘z£æ©t +-à@œ|>FY¶ž_ŸI§¼£9ò²í‚.uéÀ8»™¯·û¹è¿7¤SÞP¥=ñUQ$nït +-à X÷AšE‹Á‡ŠtÊ›²:Ó@•:š[Ò)€`v&^’EÆ)òƬ®æe:]ðRf{¼ÝÏxywðûù×_öù,Òe° €—Úîç*Q©?næØ=7.XPÀ‹™±—æ*œ]ØÒ)Dm°ÌÊMLYPÀ lïO/+t²¸­I§ü§Í‘§6Ÿ´Ã‚žËìLü¬,²Õ¨aH·ü!•Î4øº ¦t `OU>ÝŸe©üIûxÆÄêL¶ zd¼&£9ú²ŸÇuŒ™ÝO7h™y£¦!ÝØGµþcZ”*˜v-é”?Êþtƒ–EúدI§öݛǺ8¾ýüzƒ:ž÷léÀÞ±ºN˜ëÌ?¾ýü|ƒú™V¡ÓeAOcu¦~–ç~~¹A3ÓŽ)ø›ýº[N;£0<§`$rdá´‘†"±Á„  ôƒ~öÖå¹ÿk‰°»SÉtOÚq÷ó>W°JªÚë['Åýùµê¸rUŠx9²ºÃŽH½5ðªþ,Òª? ÝaŽÑ™ø©T2ÝL:Ü€/öh‹BîÖmúó[Œ—/¤T¸ +-xUí«MZ"ZÜ_ÓŸßV¿x¡(KÎhPÀ Ù¹R"ôúV]w˜ãÕìÎB±ßËhÖ¥A‡ýé¯ÓªÛÔå¨57”Ïû‚üö²?_†UH-|ÑEòù™öç48ô'¥ðÕ}mP¯ÛÔ ýùCþ½A½[ΙéL·yYÊþ|›jƒ†r¿/âù u¡; @“ÚeÏ ²B úóÍ gŠr_$«»¡; @‹‹ëû§ “2ÛºýùVfgâgj¯RÒá«À92ìÇe”‰<^O:†î0'¤a?¬’b_æëðÝàü7ãÍ.i8¶éqqõy,Ë2ÝnSwÀ/fv&~"DâO{­ºî0§æo·^T5¨g4(œÓ™úiÕŸ›ñ ðãÌî,UƒFÞ€óÎHÍêͶUîÖmSw˜“d:n+%âåÈnèøE×÷ó0ùnýÐ6t‡9QFg²I¥’éfÒá€ó`Ü<®ã\dÑrtMþ¿ {´Œ…RyàÞ6u‡üfgâ'BfáÓݧ†î0'¬ÞêϼT"z´êºÓ~²šÕwƒTÊt;ë]òìÿ%f÷Рe±[ŽÚœ"ð±5Ú÷ó0«úÓŸ:MÝaNžéL·¹*UêO:¦î0€ŸÈ¼¯w¹Ɇÿ=‰Ÿª}™n—ï WÓ™ú©,òxõxcèó!íárW”¥ˆfƒV]wÀOQoõ½ /Š,ôîÚ Ýi>ˆÚÕà)UƒÆË‘ÍQ‘a–±PEºÞZŒ¥wÓìºÕY¢dº™:MÝaïÎìNý´¨ús3¾áO¦3Ù$Ryè ¬šî4€wUo ¼0W¥Ü­lSwšÆ°‡ó(WJÆË¡mèNxG†=ZƲ,E´¸ÿÄÿÞjVß ªó¤H6“ç |Mgê§E©òÀë[uÝi>¢¦39|á" fý_>†z«ï…¯ûhê4u§ù öh ¥D´Ù†î4€wðò´KUŠ˜§ý'ª·^J¦>g +-|¦3ñÓ¢TY0ëµêºÓ|dMgºI¤Ryè ¬šî4€¿¤nõgA®Ê"ÙŒ;좟˰‡óH(%ãåÐ6t§üF{¸ˆ«']Ä‹á5OúÏV³ú^øz®L:¦î4€ÿ›Ù™l©Š,ðú­ºî4ç éLü´8|q—/§ªÞêͶY¡d²™:MÝiÎDÃ-c¡T-F6#N‘aça^/O¹¡;ÍÙ¨·ú^ÉB$·g1BàÔÔ.{“uœK™nÝ^‹wüj:“ÍN2 ¹\àäíû§m"d¯ošºÓœþ +-Ój„î6SŽ8%5«;YE™È“íÓÝ'FЯV³zÓMò:B‡¶©;àí;o›ä"‹V“[‹¤ia&‹<Ù¸ŒP8 µËÛñ*Jó|·õîÚÌ=j­¾»Ùå/#tdºã¾Ë8ÌÏ]–§áê±ËüÔ§¡OaVbçOûŒP8r5«û2?³ïÝ}b~êT³z®ŸÈ¢8ŒÐþ3£}ïù/ós9î^²z4«Fè"Ìd!Ö¿jèŽøu«7ù™ºã೚Õsý´Øï‹t;0BàÈÔ­ÞtgBdÑrܽä™>"¦=ZƢܗ2^:ŒP8&æÍhfRŠd;»kºãà¿Ô[ƒÙö0BUxƒ« ÝyŸ]\õ]?…Ì£Õ¸k1?Žy3œ‡y¹ßËd=¾åÀQ¨Y·«(/”H|ïîÚÔßP·n'ëä0Bóp>²ùI ŸiçAV¨"Î%ãæH5þ>ð‚LíK™øîડ;œ¹‹«¾ë'²TÕ³<í]]è΃?×ì<®b¡J•G«Ç[‹Sô©[·Ë(y“CÛÔÿSýõÚQe‘…‹‡Û +-zü‹ýzÝQÉÃ0þ96ÉJhL™M¦±Q´ÁÆ[|>V¹ä¾ÿkÙÑ̬V3›lèvïï +-,¹To=ïº÷ÖÆOK.ósi iÞ¾Ÿ-ÇÏʪb©ïXŸñâhÂûO“/)h>SƒËø<(]}ê„94¡ÞúË]«é¸:ª6^죜q–…ît¤!?Ïý¸Õ!e¢®Êx77zjÓpU”îhêiÉXï—ãBæŒü㓹 2&DUDÛ™ŽŸðjÔ®>ÝxIQ–y|Xýô¡é‚ŸòNÓm7̹<][×P¡¯AÕFÓÿ<Ÿæï]¥é/‚Ÿ¥öt{U-x8Óþ!À‹S¨>?-+ïÁ¼ï¢^Î’ÚÏ÷I)jÁRÿÁüçû¦?àÂ}ølmü”U£r±î5ÌçÙjÝ}Yyô+EUÆû¹_ ð‚([V‡´|ºs—c­ÕôÁ¯øðyêYI¯¡ÔßX÷·JÓp¡TM··QAó)/\óÓ‡¦?~ýÑéÆO‹²ÌãýzrßÅ„œžÚÓmêF½’Ît„ËöÈG‘ãÅY‘§Áne¢BNM¶ŠC­ÂyIóiëšÚôÁi´4ÝZ¢4K“p·B…œÔ±>ý¤`¬H}×Ö{˜Ï ¢tGÖÃ>L², vkT(ÀÉ´Žó™ÊùL|YŸ­¦¿NKíÞOV» IÓ8ܯM½ßƆü*¥3ÏÜàÛ|NGêó)·÷æzÄT¡áÁYLîñ›~‰ªÌå.ÌÊã|n¦:îÕKõ­B³t”¦¿ +-à R:ý±íxIÁ+Q•‰¿™¸0¯›Ú3hB3.kÊÐÝÊijÓðÆ´d|nŠO!¨>½…øšP}êøiYÕuU$¾kv°¡ß(ŒÏ8—óÉòØ{0G]Ì'UÓ­õ>Ê™¨kÁ²h¿²ô΀¤ã3ÌJ^Uœeáv9ù½‹Ê€gJgøeæø eh]We¸³ñ +-WOéôe|&9¯D%ãÓ±A[iú³àMiQ†®(C¹¨ÏÃÝÊ2úœ¸^J»¯S|«„m±]š#­ÕôgÁÛ£v†cÛõS™¡‚‰¿]Z::®ÓÓzº^œËù䟛©1@VÀ_P{ºµ¦ =¾¶XË E‡ÀÕ9®çÂõ¢¬äUÅYn—“{Ä'üåvøÅv|ùä’‡&G‡ÀµùÓz2^ñ2‹=Ç6m´ü/-md­¶´¡ôðúÞ¡::®ÁŸÛ“sFëé»Ks„ø„£v Ù¡œ:´|ÞPt(\¶?Ö³`ÇõŒ¼í¤Ë?Néôïú}C>6.Ô­gì¹”¸öàçýÑ¡Ïš7t¨Ýà-Fißé“…ƒö„S9vèò[‡VLvèz6Ñûmœ)¸Ê6 ötQŠö„¢•‹6”ÉeyÒÉ2)D1¢pöh<‡úÄ^¹‡0ÍåzÔž.µgí 'pìÐÕ÷åô:ów빉çœ5ºÜF“g§yÉXYÈö\ =ᔞ;Ô‹³ò)D‹4ò·KËöÚ8gp~(=†¹p½0ÉŠ²,‹"KBZÏ ÚNŽžjºµ”‡-g\ÁYž»‡¹‰€ó¢´µ>±W®e%'eNM°ß,L´'¼Ù¡t涾ÜÐJT+²˜Fta?ÞuÛx´À[§Ütï†Æd¶raLëYUœixØ,¦ÿ¡=á%)7ÚplцFiÁ* +-ÑŠ—Yì7ËÙÄh78}ðVQxÒvÚ‹õÖ “¬(ç¬Ì“ðàÌ'£A÷¼¼cˆÎžB´u]‹ŠÎ`äoW4¢”¢7jÓ_ð”v÷î£aÎåvÆéq;i<‹T^\ö×û~×¼¢ÆT†hVrQ?>Òˆ2zÈy»‡…ý´¢xËÀ[@Ý)·s¶|Øù´ŒW„³"‹ƒƒ³°Œ¡†ë +-^ÛSˆ®wA’—¼BЙ,‹, }ZQ´(4îØcÚÎÍÞ’¬8ÞTôÚ/颢ñœ~õ;¸¥ ¢ÇÖâùl~›Qy8#ZÑå̤Õnñº€W¦ÜÜÊîœPwîƒ8•¯ü§ñäe‡w5û: =¡aj§G§Ô^¬]/J F#Z×µ<¥ùÓŠÎmŠÑ~v=xij»«õî†t)Í—;zÛÓvÊKIÞJ¬Hã`·žO¿êOx+”›.Xs¾Þz!¥èÓˆÖÇãšD¡·{X-fS¹£w½n§N®¡ÞÝà·±iÏh:é.Šé2b\^Å®X'V3¤RF8`@B€$P ÈÉNîÿ.Ò¿„c²˜ÔTÍ"có>×ÐÝ_w]¿/S\qv RIÒT‚4^Ì'ÉÑ®c«$µLÓ4¤•’¥þ=IMÝ0ä|XµF³-•S:çxÅ«u¢NΦ:;êyò»÷<<>>~p6då¾~ùüéã¾È7ÙI~V"‘¶¹. g4ún×éØíf£~cºvEëÄ+&}TÓ Óªhw=?z½þ`2Ÿ +-Ãh! 5ß<è?íÙw/×o´ +-ÐC±)æ/÷a6»—¶¾ïu;Í¿n%6uΉóRURÓ²ÊVjÛgeC½–‰j¢y!v΄Úø<ßn²dµ˜×qÔU°íêHØUÛ´äxúõ[ +-'Îj¥š¦?+ªíÒN‡ÃáÀY‘µHËôœÖßeÃTª!—âú’Ô~ïâ®ê©r à|”[oY–©ko/þô!àEù!À¦6Áñ +-endstream endobj 56 0 obj <> endobj 57 0 obj <> endobj 58 0 obj <> endobj 59 0 obj <> endobj 60 0 obj <> endobj 61 0 obj <> endobj 62 0 obj <> endobj 224 0 obj <> endobj 223 0 obj <> endobj 225 0 obj <> endobj 226 0 obj <> endobj 222 0 obj <> endobj 227 0 obj <> endobj 221 0 obj <> endobj 228 0 obj <> endobj 220 0 obj <> endobj 229 0 obj <> endobj 230 0 obj <> endobj 219 0 obj <> endobj 231 0 obj <> endobj 232 0 obj <> endobj 218 0 obj <> endobj 233 0 obj <> endobj 32 0 obj <> endobj 33 0 obj <> endobj 34 0 obj <> endobj 35 0 obj <> endobj 36 0 obj <> endobj 242 0 obj [/View/Design] endobj 243 0 obj <>>> endobj 240 0 obj [/View/Design] endobj 241 0 obj <>>> endobj 238 0 obj [/View/Design] endobj 239 0 obj <>>> endobj 236 0 obj [/View/Design] endobj 237 0 obj <>>> endobj 234 0 obj [/View/Design] endobj 235 0 obj <>>> endobj 44 0 obj <> endobj 45 0 obj <> endobj 46 0 obj <> endobj 47 0 obj <> endobj 48 0 obj <> endobj 49 0 obj <> endobj 50 0 obj <> endobj 51 0 obj <> endobj 52 0 obj <> endobj 53 0 obj <> endobj 54 0 obj <> endobj 55 0 obj <> endobj 246 0 obj <> endobj 247 0 obj <>/Shading<>>>/Subtype/Form>>stream +-q +-0 g +-/GS0 gs +-130.2232208 0 0 -130.2232208 181.4170837 178.7505341 cm +-BX /Sh0 sh EX Q +- +-endstream endobj 248 0 obj <> endobj 249 0 obj <> endobj 250 0 obj <> endobj 251 0 obj <> endobj 245 0 obj <> endobj 252 0 obj <>/Shading<>>>/Subtype/Form>>stream +-q +-0 g +-/GS0 gs +-120.39328 0 0 -120.39328 180.528183 176.5283051 cm +-BX /Sh0 sh EX Q +- +-endstream endobj 253 0 obj <> endobj 254 0 obj <> endobj 255 0 obj <> endobj 256 0 obj <> endobj 257 0 obj <> endobj 244 0 obj <> endobj 258 0 obj <>/Shading<>>>/Subtype/Form>>stream +-q +-0 g +-/GS0 gs +-0 -0.4444444 -0.4444444 -0 170.9031067 125.0784531 cm +-BX /Sh0 sh EX Q +- +-endstream endobj 259 0 obj <> endobj 260 0 obj <> endobj 261 0 obj <> endobj 8 0 obj <> endobj 18 0 obj <> endobj 19 0 obj <>stream +-%!PS-Adobe-3.0 +-%%Creator: Adobe Illustrator(R) 24.0 +-%%AI8_CreatorVersion: 25.0.1 +-%%For: (janek) () +-%%Title: (keepassxc.ai) +-%%CreationDate: 12/20/2020 5:21 PM +-%%Canvassize: 16383 +-%%BoundingBox: -224 -228 324 320 +-%%HiResBoundingBox: -223.39905511811 -227.480944881889 323.480944881891 319.399055118111 +-%%DocumentProcessColors: Cyan Magenta Yellow Black +-%AI5_FileFormat 14.0 +-%AI12_BuildNumber: 66 +-%AI3_ColorUsage: Color +-%AI7_ImageSettings: 0 +-%%RGBProcessColor: 0 0 0 (R=0 G=0 B=0) +-%%+ 0.403921574354172 0.729411780834198 0.176470592617989 (R=103 G=186 B=45) +-%%+ 0.988235294818878 0.988235294818878 0.988235294818878 (R=252 G=252 B=252) +-%%+ 0.192156866192818 0.450980395078659 0.16078431904316 (R=49 G=115 B=41) +-%%+ 0 0 0 ([Registration]) +-%AI3_Cropmarks: -131.417322834645 -131.417322834646 231.417322834646 231.417322834645 +-%AI3_TemplateBox: 50.5 49.610236220502 50.5 49.610236220502 +-%AI3_TileBox: -235.600006103515 -358.899993896484 335.600006103516 458.899993896484 +-%AI3_DocumentPreview: None +-%AI5_ArtSize: 14400 14400 +-%AI5_RulerUnits: 1 +-%AI24_LargeCanvasScale: 1 +-%AI9_ColorModel: 1 +-%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 +-%AI5_TargetResolution: 800 +-%AI5_NumLayers: 5 +-%AI9_OpenToView: -373.888888888889 363.332458442724 2.25 1992 1274 18 0 0 78 121 0 0 0 1 1 0 1 1 0 1 +-%AI5_OpenViewLayers: 77773 +-%%PageOrigin:-247 -370.8897637795 +-%AI7_GridSettings: 72 8 72 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142 +-%AI9_Flatten: 1 +-%AI12_CMSettings: 00.MS +-%%EndComments +- +-endstream endobj 20 0 obj <>stream +-%AI24_ZStandard_Data(µ/ýXäjš›µ+@Šy€1,q7­¬óyƺ€ÑŸî3•˜™92£¶97"€h +-! œ»ÞÙw<Ì{×õþ^ßžýænƳï|wº{¼u眾ÞûÍ;Οs×ÜÅû{Ü/æ^s7ë>ïük¼?ï¾kîf¼ã¼o×ïî6Ö›»™ÖWûý/抅—»,v"î¹çî…Ùkï=¯X଻Ýíî÷=ÅââÜ=ÅbwÝûï}¡½˜ûåýrÜqÝuþïýã˳ÞYóß{—eܯ߹þsÜyç³Ö÷ߎ»óܵîúúÜu¼ëÝuÆ]ã‹Ïø{Ÿsî.Þ¸Ë÷wÌõíÜW,>0ÌŠE¨‹¿=Þ}îÇí}ÚS,:ͯ}îZo.*ÝÑ‹bøý®XàîÓ_Æßýî‚ß÷¼ïžbÑm^±×¿ÞyŸ»î9Žoß—uvþwÿÌõ.ËÝÍwkŒ»Î˜Û7盽ïøþ;ïŽcÎwYï0÷s—½Ïš÷›1ÖØgîo×½öžïíqîö÷Ý¿~óïwÎW|û8f½;Þñ=êQg<ÞQEQ E½óö<ïyÏóøÃ/þñ_{™{×=ï}Ïó>ôBOôFï~øËŸþö7òQy¼ã(†"(zâ»Ø‰\Ôb¯8†aø…?ì¡bÁCâpCð?èÁÜ`¯÷ù¯ûö§ÁžCÿ»Ï‹ûEzísØÁîñ¾ÇNäݹȹb±¹¹¨yÿÝûŠEï6îW±?­X€ž÷Žsͳb÷ ;×Yk/ãñ‹_±?Èñ¾ŠEØÃþN±ð]ç¹»ß×ãV,Äþí»}'n‹c†^ØCæð†!‚øÁrPƒ¿ðû>ÅÂûü×?þé/ø=Ñ =Ðû<Ïûž÷º×yÜãÞö´—=<~ñ‹?üàÿþ÷½ïÿÝï¾bÁÿþûëŸþøßÿèE/úЃôŸÿ¼ç¿ÿÝw¾óÜs¿½öÚgŸ=öØ_?ö±‹]ìaW,Àö¯Ýë¿ÿî{ï½wwÞwß]÷ÜsÇc'vbv`v_çu^÷;ßù®w]×u¼ÛÝît§Xäw¸»ÝÈG.òƒä÷¸Ç?÷¼óÎ;Îùæ›kž9æ˜_>nq‹;Üàþö·½ý·ß}÷Ým¾ ƒÝ×?ÿýÏû¾üÂOüÆï‚Ì 7ÈÁì ?è‚!(‚#xCæP‡;äa*=ôá¿P oèõŽoÅ"ߌÃïcÅôvö|î¹Ë]æy‹X±Ð"ß{ë­wÞxß=jQ‹:Ô þ´§¿þÚë®;ÍõÖZk5ÖWYÌaó—¿ìåŸ}V,zîòÎ:gá,’sÎ7Ó]Æ8_Žow{w;ï4çœ÷w§3—yÖù®Ãž÷ÌsßœöY—ñÌÝ,g~ã®çËûõÞßûùÍ_w{ÿÝ1¾Î=ÿWßñ÷Ús·g[ïÿ{wñî{sž»ÙÍ´×øÞ˹ÆYïÍóÝ=ãûñÞ—»YÎÛkþwï½{~9Ý»¾ïçþEQoxÁ+î|½÷¾Ã¹ç®ÿÞ±×>ß}/w³¾ïíûæŽwÿËÝLßnïŸq‡µ¿s7ãw˜w¸ûì·Æ†¡Žá±˜E-n‘‹ØE/~Ñ?CqïˆÇ<êq|ìÆ>úñÞøàŽâ8Žô4Îã{Q,rÆùæ›G,âƒøÃþØãŽ;ÌñÆc|ñxÅ^ð~×»ÿúÛowùÝWß|ñ½W±0Ø}wÜ»÷Ùsýyßœæ+w¸[¡bøÝË~¨M±}¨-»g—g]†³œÝ,ËÖµeû*½ã½=þûû‹»¹ÞÞ¸ËóÍ]Åí}æ¹_ÿ¹î¸«Xt÷fÜ=¿¸óù~î* ŠÅêËrv3Å"òyÆY+[•0EIÌÒ¢¥¹"× úe+Ê +-QV¶,QyªÌv%A0Ö<ÓŒ€¨`zØZž*Q»zíê¹Z„*ˆ²H©’.Q¶Bc© +-KËÖŒ‰²µ\¡&ËÕ’ 3MGgšŽ2[¿LeºTrm™çI‚¦¶DÉÔ¢&éYI”<Ù”éq©ZÑš¶æJÌеl[2`¶ªReפ¦g)akÊ*CHÉÊ•<Ljj’$‹´PSE®£ ’EZU)‘RÈVesM[UY‚() ݨ±tÍ f+v‚P>A±h¡f‹š+MP(®ÆÚRÔJÏt¡f«d[´„ÁRp…ŠÛ¦Xˆ>ܽ•1Z¶-yŽ¨Ÿ7öwýÿüoþ_Ïù,÷•¹fPý÷®»þ½çn×”¬ïL± fË\Ê ê½wJ³„–ªÆg¾{œížq–ÿÇÏ\ÎvîyoÏwÖšÓξçt×”R:BKUõ3 »–H,–àÛØ™²e¨-[+9BqLžãY®ÒÏ/OR%*[+éAíŒ3 Ûš(i-ÏXèÞ½Eíê¡x‰¦ ™€ÒPî¬ÓÙö»û^ÿÿ¿ç<×”Œc®/îî½·ã¸Î”ÓÌ—ßœ;/3Î]^¶ä©ÂÊÏYÇw·µÏYw¼9¬1%³°¯•„©éy@SÓl•¡¼¾Œc|Éþ>A²ë}?ÖÛ÷ÛaîfŸw¾_þõõÿò}þ¸ë|ÇqþøËd™çƒÄwï±ß?s½ÿ||YçñA&Ó„ Ù÷¿ã.~ûî:ænæ?ÞÚ_ß1Þ?wîf¹ãÍõîç¯ïæn6¹_v2Ù=Anfù2¡Ì¶P³mKQÙ"aTÏ,e‹dI(Ýu™e-S°XÂê4c*ㇳ–„­éXžæˆâoS,^*òü2Òó,OÙ¢e‹üd(IÌ,ìšž)Ȳ¥*]A-ZÂbª4üXgø묳ï=ö~ïýæzΔ c1ç÷Íi¶ ™š¬³uæs¦d;gJf~-Ô\¡±ôÛ6ÅB{ÝáÌR0Y–€’P†³…g7ß\¹¹’qf)[2DS3b’œjË’jY¾ ™¥<[s´mŠE’E^%JJ@2ËšŽÛ¦X`îrq2‰JgQ{±É£"?v†ûýýzÿ;o%á++rÅAÍkêZMRm×R€jeU+ôLa©¦›»§ŠÅøâNßßýŽ»»=ÿ]æ{cÞݽÿÕ>ÿ¾7÷÷öÞýÆ8o…Êk%Woß1æ÷nãŽ9ýyD ’eåš²Ê/[¡¤:@Ì:Òéejº†ÙÍüö˜ë»¯ö]Ç×{¯MG‘¤Û¬Ä—wóû¹ë5çïÜq—’í߽ט÷N÷í;w)Y¤@*ã§é|¯ÄwºB&L£Ù¤Ì»ËÿÕ~ß}1︛óíü{¾óïºÓœh–<ØÆD&dnîÚw}ãWª`Ò"¾ ïZ¶*¹ò<"ÐËä±x€Ò÷*ñ +-vÜÍ®Ç7wÝßXoýÿÇ…èL| Ó»z÷î^þ»}ñÅ=c½=ç¾cÍ]J–w÷ñÏøvýã.s—’zï øt+ì¥8f˵E7•ìò­JCå +-‚d'Y†*.”Ü;¿ %M–‘™Ì#aÒtÓÔ NÝ…±gœaÌ;wCè†yª¬B²j®­¨’Eʕɶ1H…Å!åiŽ•,Ò–,‹¥‘R +-ª hÄb•ûæû;~3×éßu›ïßùÏýr—’ußïí/w]Ÿ×»°€É±“NU+ŠwW+´ –, ’iúU²û}­/ß’‹Ô‡ …ó4Çó4ÇÖŒ­ÐlWTÉ‹‚,+P,²$S,²‚ŒU†Åbe +-™²»Xe÷¡!ûdgd8“ÈnÆÉ®bAÀ”Ý̲*Wkª*CmšPÉ,•DS³U™aE± XÎ\¾Òµ©L–ü^*²)“5K• +Y%’¡&éײ=ͱâU ‚¬„‘ •,r ¦T ‰É®˜ì MQ¢XX2€íT ¶< ´¢võþÅ;g7ÃÅ"Q,V¨ˆò\©¸T±t”U"k¹Z²µl‘(ùÉþÇ·Ë]÷Üe±öøbÝq·ï¿{ëÛ5Î÷ïÝ1Ǻ_ŸÿåýwÝçý_çÞõÅýóþõ÷Ÿïœ·ö{noýýÎ_wÚk®ë²,ã]ÏŸóí»÷\¾\ÿÌ1îîƼã¯ý׿wÜy~owwßóî»søgš_¾}÷¸ãÞ¹îbŒ±þ=_~ΘËz|ÿî]Çwϸg¿¿–ÎÙô›Hš ãðË„¢š`B B§‹rBÄ×àš`ÂÍÂ5ž† 1uòM±`dL#þt«Hž ÐuMˆ>•AÆÓkšè‹IMáT’ÁÍ¡ÅJ¦ÐìÞ‹…¨q´{LN"ÄðÜ<€",òqc +-\˜0@ø? ‹A‹­ „ÊA<ÈŒ"¾†³îòËÉÐÜvâ°¹„˜&ß‚kl…*ÓÓjLánŠÅùÔTããq<®‚e"!¥t,äÞËé²Bò Ôм2Ÿ~í£ ´eÁ`çϤruëÂL*ŸIåVR%̤GðËD±h”#Œ7^A‰ÕeJ¢Q˜)‰Z–ôèµì¤mÌË”2% +-¶c‚d¦J‚"Ž*t“Ûj²`K¦ÒUåá\ÂÒÕ¥JÑôÃjÑMšòÊ Ûäl²Ì-W2¶€_k +-@»z°t[e(ô­é9Z=äšéLš‚›²E‚®ª’oóLAY5W‡¢/4–±&+ÍJ6–$¢›Œ%3—*Æf橪dÖÆR䙑fVªÈSÍÒ6[•%šÅRkš˜j’­j¶æªÌÐ4CÉSÍb)’eI7† ”ÌX2+O“•¡dÖBM$›¡¥ €ŒÍ²ÒÕfåJf%[ºF”f)U2´,9¾Vò³–ŸÙ²eH€\3åiŽ0ϧI¢)XÌ5*[r-Ñ2ƒ÷k%?0s­ä +-%[QJ–„CPÆÏì ¤!rÍ Æ„ñÆË ¦ª\A¤J¤J=å©šíû”HÑÆsµ¤: eJ¢U™‚¥*TÌ”D¹%ÕLIÔ¢é˜)‰JX«dQ-Ô~Öt–Ì›5¤.QX€Ú‹KŸµEØL— ÖÒ‡°–œÖV¹a˜à—?±)m’ª(Hm(ܬ\R®”Ak8iËu‚ôàVT¨~ˆèãC(gÌ0˜Èv™°ÇN§_ NR•`_Ý K¯Õéø¯ƒMK•€MD¨“Ø‹‡'5,¤³ â°Íu}®¬r  Ú¥¥ì«…rˆZuK#°^¬˜‰A¥šÐhV¨<Ë/À¨ä—³ËHC ¶Z¯ja%Ñ"èV䦓ª0+RmŠE©MðªPJ²¦@¥U)… +-R  MŒ % éÚ ª¶"â…Q0"¶Ù‘ˆ‰Ë¤Bu Ù D‰C‘$Ý„`Ð ¹!ú9J<¢ÒCÊ’Pð°)îA{¸¨)‡æ:hªƒˆÃ%±j€héNƒ„eáOD„H-£Ë€e’ZŸN)ÒCxê““êój™ +- “ă¦3‰ÖÊÀØ|«å1lŠÅ} ÑÁ*}.®O @ðÒ«`´’DH–NÃGj”TRŠÕ¶F +- hd€ùÑÄ¡Ôˆ„(ªdD$GYqH °¦âK¡.¡1¡ ª@B‘nÂZØ‹ òéèb¬m¡…hQ ˜fj® z¼Ä ‚£A!_ˆP¡`üp +-¡ƒ,!¡ÁÄÎKpµú$A+ø$>Ù$>àg^>% G> %—Gâ=DžM±ø2êÀsZ=ÄÓš®Î'ËP§à Ã6(@:—²äâ<¸F"ΤQ^8 9ᬙ/±U ¤D$âm.Á¦uJ`š‹è2i^+(Ô€5kd2‘ù¨¶‡Ì¦XL"› „§ðÌAÄ¢eØV!5’^eÂø]•‚‘•`xŒ'˜Ä=Í$F$þÍ‹£"Š>jè¹BŽSà„l‚BW1Ó@XʤX §mEàÅ“=PK8pS,&ªUý™â[¯Úù`±…ÿI¼ Ÿ‹|Hx,†ƒ×:­DÏl µ÷z€Ð<õ[!hD„ðÐÝC¨d*ŸTWLH0’GUÀ<¬ Ì ¤P0ÕT/›bÑ?P—¤“pyH…—µ“!¸hÎQ:%ÔÊE&DV’ËxÂP"°& "ž4ب\ SD0à È5`¸d[ðà0¬ +-<ᨀ}„aÁ˜wAzv +-6Å"<™ÕUž, ƒcѣŲp2%¯þ‡2â¸Ä…¯–ßuÊü3‚BãK tLŸPp à÷v¼ªÑx…Å{©Û%éºê¯|)uS"Ó7Åb\E~ﶃ¤;N¢;!gªC‰B£NTùÆN}‡ù$’®K&ømQT<¢P!ñ 3œÑ>o%¯ g4»ÙS¹Û‰i3&'Îvtƒƒ=ÛÊÞ‹«ÀÀؾå‘ÐÿAs¾Ò¤êˆÈî4* +-#úÑðLä.*W9ÃILùvò)¦—OZ‘Ȥ•¶’†ó%q Ï”¢LO2u,HÊ­‘¼¶#™:I£ÁÁI&á&áþœˆlŠft1#-ˆ0€Sdõâ@6œÈD8¹x<=š€•ˆªüFçk!ÝýNˆGå¬ *ÒÁâ¡#È%œ| ¦‚Q„´^âbé~1}Ñ.ȦX`^íµñÀ“SÇz|\1ˆ‡ +-1˜‹è±)l;í|‡‚…‚÷PÚS¥¤<( ¬ãÁ¡ÄCˆ:xÙrló’ŽTf!€ã€À1r /ÓÇÑ)uǦX@<ÁÑ€AG£o‡ +-spŽ…ÕëáØäJsÀT,uE $¶Î”Xm¯b3µŒÓ†ÀuÑ9è|6ׂ+³‰X÷Û.ŽƒmâµÝ†’ xsxÄ&›'ÁäØ6Åâ V m\¦UblÄkÀÕù°rTª8 d,ÃÀKà “ÏÅÓšÁMí\&PFÒø€D§à¸2“Hð`a-ÏÁ6\`mlŠ…D'K4`¢VÙXIÙ`¨ÿ¡ñˆ4N ÊĨ±@ƒƒ§1^‘¦¡ÀI$B VA„Aƒ%a¾1ÑÞð'šNDi0¤ÌHÃ…ÙŽÆÀ*b4:Ò£elŠÅƃTƃڀ1&N$“‘7,†&ÃR ”&B1§çÀ( ï‰1*µ$ºp†û³R`(h<Œsó°aìÄÈ…\ câ´"0 ÈÇ…á€Z +-G‚gp,œ±)°ÖŒòsKa\ 8aL.ÃÑøŒÏ§61r£14™ Õ&TZ†SHµ‰“¦i®ã¥µdêÒ<—KPM+M*¥4>ŠÐέ“LÚ¦X¸P4‘ 5i ‰XI#™.IÛŸH3½Ô‚¶é -2Á$h¨ôh^ŒÒѪÂFsP7†0µÕ!j¨F¨…˧M0Š µJMs¹hÁq mŠE«RhÉ¢iöø5ýAðÚŠÂ]ƒhtÇÀÁµŽÓÚ@ÛÐZÙY¬-€`W;0[-BIqš„è@ÑJ%íc,L4® #ÑR‘ÑN DË\ËCÛ ®pàÐ4Wß´Ô$h !AC³<8šCÓ4m£hšVÀ·",Âä¤0t®O!cCÓ4í¢`hšä[$Ú„)!¢1$†¦iZËÁh¸Šš¶BM“ЬLUihih +-\>Ÿ/ÔVÈà(ÞK=@„ eÅ^†•ÅoâÒb"/õˆ<ÎCÓ +-xø¯ Þ¨VO³ØJï©ŸŸ>ÎoS,›Õ&lXø”o"11òXSÇ‹Ü”¨ a7n€õ=au*/‰ Â7²ˆÖ!wq€õM±hW-DDž…ƒöµ½L´çU)¼‘0º£ZHýX°`&$ŒîÜv„ÑØžøZÇ8ÒÁgÐŒát ×F"o$\›ÍF¢ !Ö‚Pf.†½´M+kZšVDŽÈ"Gä•éË"$‡9  ð ût ¶©erA[+’ØJ:xä<’Dñ–: >¤ñ ™n ƒŠöÖè@ñräȈ쳉¸øêè6s´¸ÔæA +-ÐÈhud°§‡H¨|$[L‘}j-J 6„I—Õè`e&˜°›D¤#ÑŠ8e#dàT>¿ÂÑ&¦2X6‡Ë$‡UÈûØ•7[„ðZÕO…maÂÙˆˆˆ­§Hl`â¢ñ¡ÒÕ`E_‚_©Pì%°Æ‹%ƧÝèòB+L(\Dlu0 ¾%3ö†ÙuS,ߣ90hN5Ñ$\ÚHÂE >GüŠ¡=Š&B”P (Ek±¢àu? ù³MŒc•=:"Ta8TØkAX·Ã&Ô™Á7€§{r…#:V8uO¦“éĦ2È:q¦e2M@ˆ…u7Ä‚XX1ˆƒGM& Är+܄ÄYW=•ŒÓ¶ +-"7ñ`ÝI„Æ<ž³£'Áà‹-IT”Ѩ(#Ê\Ô“ÈCˆÐ\E–·‚"KYÞŽ¶`Áĺ‰? cŒáÀ8yâhNc80£ƒ11õh–ƒ1®]ìCv±9òp@Ú‡ Áˆ̦Xl¸û5éeb/•ÖôåL‹G— iZì¥]{&&¨(“ÙÐÌÁ´—I†M¿ôC3+H¦õ¯Ìj2.(Œä31HQË\&£V NZ%8]&"Dæ_ÄÐAÄ*ÁIdPN"„ȦßJpRA%8H$Œ‡dEð$غL`Ð%¤!p¬îöBÅVí@Q6V± +-&`ÆŠÒ86š©k8h N‹]-7CžvªTym!ÍÃmNª„Aââ ¤³`BxÐ 4þ´f2—kˆS£S辑12"ûHA\üV@ž…h¯ð•\8ªCÑÀ×e¢V(-i€h£Š@A”4†PH á‚ŽDCQœ'/¶¼“´RàIp'Á›bA)ð$XRàI°~±åMKiI—2$Sjñ$8Â= ÎŽÕG¦‘idŠD8 +-ÁD‰Dh.ˆQdya  ”¹ˆL0H„æ‚lú=šûè¨6ýöFÂhmÁ‚騑FwÔH“0ú ‘U¢m$ŒnAÌ„Ã'þ€Žq0&-e.ÎÄПQ £±c80†e@kŒÛHD&2—É&»F‰O‚ۂًǤ}ȉM£eòF"¢¡ìƒH>Vw#!1 ù +-{iÁŒ2}yS,.‡òt +-ô¦XhZ‘ŽÁL4Œ—éË’J£S—‰&kZ,„éË—öba™&¬›Y•J‰ò’PdcàuðÈ ÎðåÌ*ó/›b¤´ÿÒ<HœYeL¼ú×Ä^Phà@Ö@>=‘Sà&^:_ì!$„àsðÈjó_—ÉȦßDN©Me.™–AVHmy7ÅU DìèdT†[^±)0Pæâà@åmPNžÆLÄ’ƒH`i˜•–àäˆDd(§ËDüB¤JpJ¹õ¦ЉYW=e.“O‚¿¹C},˜I¨ +-KWEÅD‚ÍÅ%A~L…­ÑmŠEe52L§j›ÄÅÙ +-÷ÐËGAU0¡€™±‚, žžGRf¥ñ1`y4× ¬kÌtP¹Ô* §JjÀ8ºqÑ¢]¹ªˆ_&“NåA÷ãm+œ Æá©cF#øh+Ƭ+X¢*Ü$Á ¥/„M±ÀtÖ§BbûÂfµryì‚iÔ`’Á +-ëvÈG•«F@ŸØðX]PBC[!3 qqô$™ˆ‘†p †]M4¼bˆWÃ-‘¬y˜ÉG™úx¢Câ°qh(…ª6ÓegÎÆ .“ â2¾` _.½4*¨•è[Ä%tÐ*©a–P'E²00K¢ÀœþăŒ 4פT …FWÀRHe :ñ¨8²÷€ ]!Iö– ¨›.´ó/v„¾kt½”ØÀ‰CktŽÐ“àØ¡¹® /œ,)„ƒ¤éPdyÏ E”)CãÙ +-Ç-X0ŸE‚³'-½u½¢]¹hŠ\×Í ZtDÂV \œÒÁ˜Ž¡)˜´ cu)›‘íÊÝ íBbWÍ`ƒO_¤tÐÝÓ8Rv=p¬îÅÁŽ TlKg‘D\ƒryd é ‰èª£bÇênŠ…Hy@Дϙâ%´‰h[QÊu7ÅBû¯S%,åd®wWü$Ñè6/…‡‡‡”xù„ ÃUhT©Ñ±nS,õÀa$mÚÃ` ÔNéf6ÅbÁ%j¡$ !¡Ôt,#‚]JÃ^×M±¸ZTvô£@JX%,Æ|n1®^½Ñ‘¼›a”"2—<ŒwS,2,4Ð[##’pÿxO§)¿GÄÅñéò` <.Ó†è vba׈fð±*}S,FˆJkEâ(K$”*=¬›b!¦< >3}´3þñ],év¬î£å›f`DD»r9Yå°nŠ‰-ølçáI™ÐÇTØ,êÈ`Áµ) ßh¼§ýY~ Ñ`îxB)ȦX p±UM¬ƒaðò¶¿5˜Á³›b‘)d¨K¤vâaX_zoŠEØ‘°cu%–ÌØ&Ï‚%Js!¢]¹Ÿ0ò°šØ‚ðäXÝ3Ã/“TÄ)–3þÃæ˜÷hn7«« $°é7É–ƒÝ_¦Ê5ÃMjˆ€.„‚#¨COD$üé6 •X©¢Â1դ̟QåÓß&ù›bAp;“î ‘š«DÔ‹CË\&Ú÷h–Ñ-=%D´ñu™h" † :P4I‚ADSàTí3f-¯+ëi½Gs!ÐôàHä‘Û–Ÿ›aA‹¥>ÞDø!œÜ碒Ì3¹òp|Z¤m:!ƒç3cßZ† Iw™øˆM±¸D(`¶n]! œdLOo.B$çŸài2”ë¨d”vÑLS¢ Ehf` ʳù¸wI6,V@F02"I£‘0, Å‘†A…A‡)Å”sŒÈ&Ò™Ds…u ˜êïD&[x€sWi)¬‘}•¢©BV5¾ÛÛ‚^(„&ã¢ø ¾`»˜¤GºèI0¯ðp7VÊ*x«²±«ò·Iö^à´J²ÖÁæà6ÎLÁ2W‰™Ø¨_\ßðÍ•Ç@’•²(×Ì,6ì‘æü0VªàML,­‰ÿƒÛ;îÑ®æß±¶ +‚ÁL¼§ã¹\»Dz—£8´çЩV‰n“2~;œá¸-›”Ò/$õl×6=7 öï(ÜÅÊeæ«q§†‰B .œv©l^ ”³ÜÆK.Àþ/­‹ê› RkcK¶_î΀ğû˜ø“Ø'FU‹¼kÆå¢~•}i¥ÜïÜ?êV0¬F6ö2È䃽…¿†½óG-ÕŒ2¢F!ªX1I¢ÆW£§þCÂYKûÎEõFß‘œËyêüÀ(ŠÞµ´K4AHØ”!ít¨ðâ.ÖSGÏ×èv/tsú Šbp½¦t&º©.~åFa¯i’g5kßN™#&Ïx\«ŠQ=‹' Ñ2æhÕ&øдœâ†ÝÆ‚7ÊŠVcÂa]gW$‹þ5 :v¼Ÿíéåˆ õ}…±I_É®ŒhÁ lÂ¥¨ +-Ã];¸aŠÅèùè3ZªÁ°Œ¾FÑ]*5¸#~¹‚ž¤g0ßc‰àc‰`gðEþ|’&%NáÔé²r¢ÛÑ>%8CÎàk®ä¸?];ƒ5eÜHœœ¨ml1Œ% 4 ö”ßvÔÉgiTQ4•tG8˜ür@LühÙŽm®QçÉ!Ò—dj8TÃé±Ghãqkã÷ÏH¯)K>ÖË„¤£r¤º¨tCÜ’¯õ×2’ÿ"fê–7‚«dT”¬%ÿ>lxt‘„ €k ì‹Ðz&4Zq0XcÄ÷€.÷AdœÔeÕÄ¡UJe(ih"|iç)ñx5 +-g¢}ä‹ÂÉ“ƒã6~“Lnb`àà“@ÈóðµxÀ!LNe  pƒ!“qZ6T8N•% 0gñ£2“QâK5R7Êí­¢©&wÄØú‡¾uš¶Fø¤ü>Ä»S´ ‚àl/ï%ÁØ°Sa\Ay3jßNŒn^OnÂ`à‘·å$Ý@°XLŽ?²õ=11Ââô €á +-ßjãGÄ3ÐDU¿îâ$N­´×µ­hŸ×OA@n=ó¼ŸLñSí}²—›§ií>RžÙšfú0´Nß`—‰7lð"¨Ò÷aö³–ô³·¡9ݸc&Ý^—èKÞà0@Ë•668&yÄ©9ÜQmî÷‰}lðDÖCqŽgFrøþ§¦^`lp¼8Òý ÓÀT’='ꂸ®-Ê}ƒ£=¼®ÕæY6X™!ŒÍ¼ÁnP’YÝSÐL`ht?µÝ WúF4ú'‰´‚úî‡ÝžÏßO%cɈ©U‹ç`Áy𞱋÷Èò§V¸d.‰BPµZcp‡i¥¨þ*gn<PÁäU´ÌAƒš1`Æœ!YÛž{eÄû¨`˜ºÄãägÓð™J‚Ã{!Êü$S ƒû–~:ßÌôiõš6Êe-b}¨R8›¶"u¢7É•ã)T4ÉŽd*‚r…¥Ö]þd.M^Œ)8øì07"èÍ<ç±ÔðJH3ˆò&ahûÊûœY1Ms¨ NÌ /ìtm‹:10>œŸƒƒ•5|CeJØêåQR\\@‡8°‘ .P†NµßÓÏŽDOv`=Ž¸ðR? ò¤VµEj¿!ÀË*ÙRAÚ}dzɣÃDf̲øì)€'QË?­Nàç*ù," +-Po‡ê¡ÞˆÍÅb‡º'†6^YOÇ——%¼;¤§tdzÜÍ"¤²/—p¸®:Òï!i4Pl4LDÖp<Ÿ¢´RhšË À-ŽWü¢ƒxLŒú‹~à†Çéï½ZiBlyÖÕã‰ê$„*&þb‚“’Cþ"%$—¢UÝypêEõS7w¬Q`‚:p¼V¤E Û6Õâõ¨Åq.“XC¢_MÀR®Ã¦Ýª’rà³ãBÙ4v©IUq'_Á3ì"!Í-b¯ÂoØú[ÈðGx)åêúœ0J‘Ol§y"˜ÏÕ6Š×j‰.ÇYmvÙâY[Þåð×[œ.j>mB_Æ¡#Ú°Pº$ =0ßx­óØ„ûÀ÷ Žjc­Sô;!Y¦înt}Ú?ðqOvœœ_ç×TdNGNcúÅtÝé2¸l2ÎP‡œØ¨öÑödãIœH+­«Ï%rgæ¤_ŽÒ+{¡=×vü‹1‰g9éQpYñuxzÿÏ.¦r%Ö¦€,NÌ.V¹Æ—†ûWó¸*ãDCïèÍó6£^|‹e<’9Q;lÐüÙ©Ë€ÁOé2\36yÑwWŒÕ¨ñƒg¿½sg`;¥Sõþü'³}#Qò—½QǵYò©-…ùØUŒ®6šÞÿ¯ +-×ïÚ;´²üÊûÏöšmût~î Óýö~Ñ&Ô›ý¨4d’ÑëÁåüïæ×@eÅC9°CÅÞ—Èù5J'*°0‰ÄtaƒKhÇÄœ7‹ B¡ÎGÖ>—t>K®+ÇOˆ«O‹ÊÆ@ç%}za¬ja©]š að‰ü¹EóÂ÷Oôø¼ü4 +-ÏZn¸t§¸5.Œ}éU•¸ô½Œ &"/%÷{P!…¡Uý2DTÌm`ß©lø6ƒºq‰–JEÂÑ/{ ÿs5 qWªçKë‹MXòv^HYÚ*y 6;Ùë<Ÿ@8UÐÔžïzd39gå¢z|UÚ0IH™|mH˜a)}ÃøÄò×Y*jèå3ñv©P‘ô?„ØeËÓ8]ì¶gM¨ÏIßȾæÏ·^ß»†¾+¨ÚAf'ÒøCágB·DüpSÃC±¼2DåçÆnì«>y‡™¿¢^wñ†RSùqÒÚËWr&œ•(„È™°gr£{Þ¬])œ¶¹ îð­e@±i$¾ÞÉ1”Ó–õŸ¢‘3’Ñ–µáíd¨ó“%×ɯ€œ ^4lQád.C·NaÂÂêk Ð¥0Thn1ò K½øÈø ºA)Ë“ñZ ~@åÑ[R™Óž„cNa‰Å„ Þ]ÛíE~í´I,5´5§tÑú°ïwœ’ùÂPbºÕ¥ÞQõm,Ù¥4,lÆlDî+ò7 ®ïØ^]™¼r¯€m”䮉`"£ÄK0 CÙ©®pf§'3á†j¼{ÿTßÅØ[NX}8ëÔÀ@:ŽåÌ•áê0ÖE”þ6òŠ%ȱõ5ú––÷Ô”©b,á>ãfê(æ¿ŸMKP)ñQXàçN2¯·½M¦îj”=<Ë×[´q|hIj_kpx5ŠAŽA´IãŠè›£:™°£‡e¿¿ŸÅY_ßUÔct¼•O\×àÌw"8ÚO +-ª^_CãȳaeÉ›NÔ¿ö<âú²Õæd„Ëëkc=o΄¨ï|}YQ3«¹Lx}wÙõ^•ÚøDà6ÅUŠÿg›úv1Lr}áŠç¼˜e“—¤í<Ó‚ƒºHz"¡yXÙZ +-M™>˃ƒB¸>xÌppÀø°°DW5C„“ý\9MÇ;8ÆîâSZÂàiÓ’Pù„q'j½@éKGòÀ`Öeü A×±>94Vp³Ÿ¨~]mú»’ö‚ƒ »¼¾œÆeu¸oµ Í%µ8jîk‰C ÓÇüÿð¢òÓ^SÜZ3)Ñ;…’íàmÄÇð ³êvBb·È.eßvPÛÊYÝ° €#¡Jx +-p#«Vb[—¡ K]Ÿ:ÏbÜ-óË¡# Ëçó2M¹_YjUfœ­TŠÁصVÞ4¶|'(äwXÅ+Eƒa…nö7QzDÿÛè@ñµÜ}óÙòSwG=Åè:‹ÚêüK±ÒJ@.d¾K—•ÏuÐÖKQ˜Áƒ;aC¡dûÃèò>|mNê8õ#«þÞ Yf«)©.Þ.‚}½«æ;8R¸j(@L8Ýó»ø@ó`¡"GAc¿ëYàÆo,z?!Pœ~=Uô©2$Ð{%Ç°Æe(sâk s—,T îC8h1Zs¸ØNcä¾Ì켨­|zÈʉæ&â„þf›&YldõjEcî¯5°a1ö6g˜·’ ?gþNš’9êP"I‡în‹ †î´muâcã}lR@ÿ1ThvÎ…=*F@zbq‘$´šS‘)Ó ¹•S‡ÕEçEh)(—6eÞíDb¾®‹£Ù +-ò½õà 'AâÄ">ëfb³üðîm:5ÃD±r3í¸(”„QœúµŒ¹°é]8µ‚ˆ‡Ê^XÀœtïóÉsC?„q>rÌ:ÍݦTcy}¿]ìV¨8`„c÷JŽð^JR"Ÿt +-ˆ¢)zœô;¨Ïhé‰_PJ|X>áJR*ÎØ^der!ÖeY˜Â‹! ýß³èiŸ‡îÿ›#oDz8/)bÙ{ÝÅ|\Þþ3%UÁÃâKpŒ,†äÐ+xÊŽˆ—C`­æDâ7 mbV +-ºáÒiú«™\½^λÔøŸïZAØö0q~cW*HÌó¾øè„SD.·oCWκ3qv«x]ÃjÉYRP¤ÏC‹‡™`¸SRÖU$¦-ô(…Uš|óÓ8︗Ì$ë¸Rs•hò„Ñà{¹AÊE¥Û_]kø™».x1¼'Ð]m,©Táà÷{$óï~«ë•ÖqK•ÆA{ºè…;o×Øi̾—Õ…©˜@:¡p›YGW¹k>Kƒtˆyf!—‰·â°\ô“‘¸Å˜ö¥TSeDÙ«pÀMIU)KTὌn<걉¢àŒ„3œKŽÂ9]ná$„8üðÙeåpè;&®$«„St†óT +-%€ç›•­v…ú™_¸õDá›s4UyTíPƒ +-â*‹âkÑ3B `àè ÖÀW>*!4›p¥ Æ•üï:^tƒ|ÉPŒ"ã„[ÅS;^fõp}i&ùçªìf½Uš#GÈêÒØÍê'N&µîïœljò¥VQ¸37Sðjøw8ÄFàö°ÃÑã‚°:0|Ñ +-“vãÇ•ºJíB­¢o"ìWšDÅ%þÌRIµÈâµh&úµØC +-o'“s & +-<Éeø¾ +-+[FoQ2ŬÔÊŽ">;77~ó+¦tÉÞˆt¢Q!ˆï‰‘¤Þ,OpŽ+òC/2ºð1h»ú:J+< çS‰Ü6…x”ï ü¾)A_üÁ„© èâ€E4¨aØuAoÕä‘´l»áR €-SÌȦ…`°¡]b¸›r¤Ãò¦Ó,BYà°a2…ŽTÌ‚šî"ŠÌE·|q4дBlM3ÎGè‚fã}k—`Ô(Þ9X%”6¼Õ!C‘,·Ó®¤ð…¢‰¶êøÖÉ"p_#÷šõr¸ið1~€m5o}ú˜f}?ƒN,Ü69=Õ†«Z‡ãÁ½³ƒ>!qêÎxQ\çgKØ>iι_? ³æ~Þ°Ž#ò +- óX¹f¥ñ=T”!­ ÇùÈ£EàWœ%Wñ$èS!w!ç=ÊÔŠaVÈ·™1 Ñ3 `øVìÀÅ +-ŒP0-“B·Hë<¹¹Ô7ËF'2Jí(”¨ÓºDš…†èr蹚iœ¹å¾[ŽiNœ3,umÙýLøx`üü³J›Ž4U“÷Ê#ÉfUÑjíàÃ|ò Q¢Fiz‚¯`³Ë±—¸I8u ÃñŪqN÷Ö».8Áç8"<Ìó¢#Ã6·‰ŒúI£Eí•øîÆl­-·£ ¶¢Âï%ºçëgf[þßK£©ÿQÑÖâø%oøDxð'²KRø8¥ç»cƒŠ’Ø1WÚ¸¨è°B¨?•Í ïµb¤«ä&ë,‹0hÑOä)³Ø…™áOç‡ñã¾@ës,%¸Èó㣧B:¦öéÌfq L3Ö×W¬;ûïaé!hÌx¢c5W*•9†>¡}½—€hÚ‡¼vœö bÇ÷Aê˜"r+ÃÚîB¿pèQÚ*LÊ»€AŸ *Œs"#üØ~åŽæwùסésŽáÍ~ÍQÒ¾vd]Xñ$ îÅ6=™ÝûŸÐê³È¨’„îôdNì +-¢uE,ÒÙÎ,#!6†sñpǃìÕ¡ao†`}d„ +-òÁÆÚnmO4|"C†¼Àô6ƒÎ/m¡ÑJëEE÷[÷Ò—kiÈ‹Úæà»?´Â_*…ÖÊŠPÑÉ.× Rð'ÚÓ%–`ÂðX´&×JƼ¸ï˜lçDš§5û(ÌÓ0–1+«æ¯¢;¿NjnÉÆ­Tž(Ìæ}‡P7ò4ÿ©*\À¬'q‘œû {3@!c=´³L Çûúº.Þt©¹0€Ë–o«î²–òëÈbº-öâÏym8ü-©d êxñŽr*ÑodkIÎE‘“æœý4uÀÈ6òˆKù1rnüÔ‘Òªæ'‰™»ü¨Ø;8«|ÿ\ý¿û:ÛH~ wŠûò«…¸²ï ³½fE½i¥å·¤]ÔˆX5ó§«íwñrV.Ù9w³®0P qkD5`PĆyTë’/Î_û:ïH›òMiÏ2 +-øÛÔúÞÛÄâëXÝŸŸ©Æ™-K„oX.‚ÅpSû’ýì$†`èzÙôªy&dÀ—æe¬‹îÃÊVþ©fÕHÔ¢Ò(L®nBbå$MšHïô‘§—C-oæ”Àì4ïÅBZA 5»¸úùŽ‚èán®‰üÎeæ&‘Ø vÖ«ÄU>œ ƒä¨ý"õ-“„3g4z>\ù‰C +-§xź†0@Þxu©ÅåËê°Ô€Z>óœ +-pËëòa— N¿ÞÒ?´Ž&¬ÖÁ.˜”ų?\ôv›Çƒ84Z}?wøä(Tè>A!%^E>=µ ’Ö÷lA3þmèŸ,ºª¹zÙw¾bã%øaZ]zÁzNÝA9=ÈôÚD®ócž ×å”e7~@ÿdäF“­‡=a1òÙcÿÒÅõLE)`ž×7N€Ù*18ìe/(½ý¶hOÎFØa:‰î``Ö‡3ê)™›35ìnfUGo‚û±ë’ôP‚T&¹›nÿLÞ¥æ3Í/9ÛÈ‘¼ ½EåpÙ(À[L¢k!ƒá„!’؃ç/.ì ÷X?•µ ¥^[îÜÏ…EdÓ*)Üq*L43a€öt©×&dªWûRÀC—)ôP’QDÁò£ZË'­˜ @!•(Rò{Þ‘)i +-êä(µÉ_Ø ^Ä$ Ýf†wsû dV/?jZ…Zp—Ûÿ£D¡ògæH@÷ÙÓ]t³»ƒ-â’§/Õhø5âßÑÚwÀL¶ÎĶÃ2§Ê¬Ì›éðÉdø£’]Ù¦¤gEŽAW¤Y¹¼VÁì»òÐ bÈhS8ö÷›k8-§%ÿ§TÆ+áÜÖs›2 ÿtLq=>©ÁƒéNm0VhÜsk’¨.¢Ò¥ì +-šxBÚ÷Üì½môà?Cqœ{á'FBôhß%)¡Œ’Lh`Zƒ—Q¼ÒK¬rˆ³g¤Æ‰Î-z:C¿1™a(+¯´hÖ+ðiÓòW©šm–®fç +-HhâgûeN³ κ½Í±ººÔ¢¶!X‚Nì™'±ìXØÞq%¡Îh@ßå{KTÍŒ‚¸å¯ëÈ$zð‹>rŠù¶Àt„롧ªÁ¤f¶X龞;,vãaÔèn,9Ñ­`%çÑsä˜V½B%n„ï:PvÞÈÛxÛ[¨ÀسϤÙÕ††Ã0DÊ;+ÍÅ \Úæ™Àu7Ö +-L蛺«Nro:•:R?_} +-ÀL—-|¬ÞÐJg~À{«ƒàF3$vÏé—…S–Þ†,¼Ü ñÖ&Ü4…oИìˆöé€[Šs3“51Qgµ€,0rE•·Ñ¥åèNþ²æðA|Ϩ;YlWx± l#Þ ³=pær Ç´_”yò™|.”ш­déaqûˆ?«9«¯s*…Ü|?'ˆÑ¾;€“]¨œ v=Õn<Ê ¦ª÷”™¥ú='°ï ­t··D¤€7«S!ê†-CœˆivÈ ²ÅH—n™c1üÕVå×%6,Î¥^ Ï\'¯ùÓjT#¦ÚtKQNV¥ëo ûÁd“5ÑB Qꖦ른ølÐ.¬-о~'@Ø¡ù—°ë£]°zf¼ÊW\6Œæa€ +-ŽV\B v£@–{c°.2ß„nÎ €·¡¼ñ>±¡^Æ90sž¤æY›×Ô”É&fÅ»müü £ýeeà +-*VÈ6æp®¤qÿóƒîyÏî|ˆI°¢büvtÓ)k'ûî«ŸÆX%Þ’¬½Ñ XŠC!_{PàCÝßõŠÐð¨ø6ññë”UÅéá³Ê»µ´{^=¢2/i¼›F7"‹i•aV#bZlÅb£ëçøF:w€L›D5 +-7'Ø ùóˆüéã†×Ø37X}¹c+ü󳜿{WÒ ì¾ºâŒ¸¾Ç;„•„ðSÒâ'›ò‹_`&Aä}K ’ÎC¶ÏH'Æóf©·èÙ¡}ÔÏ6°J©E0@ ¤­Á6°‘Gêð©¬@@Œ÷ÔÀI_›äá rþa5ÁFA;3…TN4‘Ò3º!¾sqOKà +-ºÉøý“$ÖàÞŠ‰G$Qpyئ'u8£ÁônM5€‚݃p™çBÁ.»NMJ9 +-lÊØG‡íùê!hìÇÖ'€X‡šÉz£’  ÷ò+RÌH2j'¸öìSÝÉϦW7,)âVáĬs­ÿ)1µÕ +-¹bÅ'q9–9Ù‘±õ1L漕ésseb^ +-Þ>*Rn–;APÈ +-+W-¬¿RXL ˜ÅèâèM曎?FÇ4»ŽD³`nd*(”Uqèt•¡r²r¥‡k +-4ÑXt1pdQe‘ˆV´ ¦f».¦õÌ¥˜THÙÉ*׺­+­µ8(MG6sÏêm—r ô/²•vÝzþ­õ!£‚Ór×Eu„­»Ò‘kTLEZ>hõ£ÞÏ÷‹ÞØZÅÊ hÅ­´°Æy°þ’®o³IØ×úSDiñÓÓ|\QøtN.6ì+Ô#¤ÿí–[¾‰ hÄ&ñÕ[Å:Én$57!37 %.3¥¶¯$fbOÎé„ÍцëY´|‘f]~BÈgÃ8w;Ÿð"}¢Ê8É°,Yyuq¬¿¶¢ÛŠCÙå÷úJ娭:tzRm"c3¤ÚôÐm܃>ˆgãï˜O¬\^Q#s¸×’+‰øG òµÚÐ×ÊñKÅ=¯¯ÀôZ§mÈè•[ÐÃÔůY¸ +-q×G‰­d@eó£]c¦¢}"Ê0y¸—°Bô„ÍU…-vµ …®Ìhæj.äºâ¶9¤iøˆ‹x‘ˆÞ–½é(/{.+fù_¯Í“R +-9Ý7X|+£D9ˆ]“«{2ÕƒogÀ!XŸS&ç´â5Dù‚ô+}Þ·¿¨0àV+ö*UÁ}Ý>t%* èk¬©ÏjòÀïµÍL§e1‚"½OÓš;ó%3_$Þ{Ô®¾;èø»šq‡B@]ýc'þ5ÒÌ*Hn¹Øáš>ÝÿyKà`uœåO_Sª8Z¢³˜éàÏLx3ϲ oÈe§\ÐÈËY¥kó²û"ã Ôìë +-*‹¦×ì{Žs Á8è“ø=ƒKR0²ð3_ÞXŸò9Ñ_3ìæŽÖ4®Øë±Q—'œôÇÁÎR»¬þfÎ7ñ·ÉÏšx€%MPg’/àIí—Ø»d¶%™Y¢z%*UL ÑjG‰^¯j÷¦T“×KD#½utH_ <ÈÊön˜[^lÕ[8®œÎòägŸ&IiB¼É¨1øà¸>œE–öøeÍ#ØÔÖé””ÔªNúÃeÏ+•S^úä÷o¡bÖdb[DV"’šFdQNfªId23©ë%ÅæSz¸ +-§ßÓ©]ßUW‘ï´T˜€¨¸4@9x=ÍÓãHB ™<­»`!v§¾—¥s0'Qµ—÷9ãдÌìÖø1λ(Y;YIˆ¡úÖ^‹,"½çƒÌÈH â äjDmW±~z6Q8·ñ„xº?3Äšˆ™<ô›tó`3™ÕðÞ–ÉCž£ºÌyÃJ,º ®A‘ƘIšd4¨³Ô3wr‚QÎySQ0Š>6a‚Ìn·­A†Ý±vÄgçS<ùh%˜’÷MTy"êcj¿a¯>õôö£´Mªµ±H¥Jh'}ÅxñÝ µò4„J²„(µ*‘[!pÁTÜȳ“çO5ËGJ<øz¿jõ$äaøŒ¸´5@¡i h†,hKŠýß;4ðzÔe1Ô*Õ^U[©Ògä’`bƒ4l§ï³”¦çu×7-¼}§ &¾E½PSI/̆ЋÂVÁ! ¿èZs©Þ¯v,Bd%ˆʤ‚à߬K†ýg°õî6ÎUÉôZ…Ÿè=ýfp¹|0ù5ÀYnC¥l`¿{è^CýÀ¿kÀmÐçNò궰ǎ¢ßl»&žS 7ŸŸ>?c×òð±sàUž²¼¹0â6­5¿V»iá­ŽÆöaƒNÁ¶4FèþªéO-Á§¾tö(VäåPú @÷ßR-./¬Ü!“™ú ù8`î^(®ñírÚ¥àgÅÁäõ¸{E‘fÖe»ä Çàâ1Ã^ƒiBÃüU.Zýþìjã1;\ªu ݳyU€ñ×i_;÷U˜—È»j%YY`/Æ\)qgüfál wgDÉØ€ëŒLÁžq(ô•¹©r¼­ ö Ú‚ƒ¯ÂäŒÆw$.’¶§5Z¿¢]Å?Z’ÊÖlqE±”;ü™ù3Uitð ir|\œr¢ÚÒ{ƒãN‘2`S"žÑõV‚ÖÚÞ"TGR +-ˆY¾ÜPö/A üøðAnÉWm„û4t@Š¢~”¢€ª +-92_½uvCï-¥«Èèª*Sdv5wT¨o§ÃGç`î­œ7N®ÂæzK öO…Ç8ÂUÉ.Oˆªe:æ°o5¶˜Ã«à€^V¥³å@ÅGÚû^1‰¿ü”²íÞM`!âï!Ð}€IèÛLð3 +-ŒP|~zÔ DK½­2HòÈ==az¸ÝXØuÝñ·DóSÌÓaRÈ©°nßùÎå]¸^lûq@OQÜCj¿ñÈ G]ü|ÁL_Y2¦mþ} +-•Æb L­"ÇþC0AQt] žÆ ö÷ƒ#²Q 8]¥’ÑŠ;‰ŒÆÙáñ£Î¤»Œ«¹éŽ&‚éuÉC¶:Y–ÞOî9´ãJ?ꪚV®HE(¨Pý§È@æ1ɉÔÿ}‚Bô†É$3E!¦’‡ÎLè{#Í*$*C‰ šÉã(äÊÀ AÏycÅlþ]äñ!{OªÔô¥ÉNÏΆã(Å",Ks3[J™ÚÍ¥借£þ¢V¥ÀÙnžÁÊîFÚb™ë›ÛÌS@‰1• þÄ+ܱI·r²\aÖ²†Í‡³è@5ä¥Ö¶®ëÝû“bnÀXµ:&³þk6&]Â~±¤÷™GÈã0fRnJu>1à ´Õ«®¶-Ž¡ªŠ $åÁ`›q%‰,¿§˜´Îû€lÿ]‰ÿçŠ(ûÌ·Ÿ3Ñ"¸ãJü‡Ìà0a(|#,ŽÈ?Xœ%àmƒÍ˜ÄŸ ŠRp9ï¼rù±”‹pÐH ¹Ò†rÂmW„@Ê@ÌL#8¥@‡Ö¥½«EችŽÉ\®nRƇUbOÅê&Ì .Bâ«q—ò5 5$ ÙßÒ%¢e$Ƹøþµ€Ä¢@‰'ìÍŒô4ÔÉ2oÓTz½õÂU˜š0‡Hn[…åÐù0b’ó€õÿ‰ÌßnݵlÄU‚MêÞøRÖg‰Þ ä¦Èã4Z-Á<60kÃ<Ïó<Ïó<Ïó<ÏÉõÍÿ›<.C”ÉÅ0“‹!¢ÙMvK±E,‰‰sæ¤ñ’¶=nÏXÂĸíKâ°UOxž0Tž¢Fx:><7‰Éç²”– +-£\¦lÕ°ßç”:¬'zÉãɺ&gâ™ÉÓ|êk3„~m¦!“G?èר˛P£ëK¢œïÈÚ‹ªí‘PëÍúµùˆ[O~b«Üxr8çÉ‹@›/l1•ûmB£_GöCÅ)¡Z˜í¸ vçôoú ÞHKã‚tÁÌsaä&gÅ@Œžƒ~}Æ6•­_P…TÝ_bUŸ[¢¹g*3ƒ~B™A¿.{-Õuýzþ(–R=F{x úµFUCçxo +-¼ùÜy|©|á’NáqpŠùÈ€9%-åHæû)‚'S£ävì<†(®8I<üÍûFÁص朣Ïg¢Æ²ÇÕÛ4M–ŒÑ¯IAoqCŒ~mˆÝXbŒbtN1¿Ð_N1'Mòê -ëµQУà'¢ÑôŽ  z$‹o$[]ú|&êB@U¤8pA9Í…©Òß(3+¿/ƒ_)Üå‡9Õòkľþ$±¯?ª?ùS!?·ä!?9÷’ –‚§ÅEå¦ÞX$Lj¸0)Øy«\Ku<¤®Âb’ÊæäX­˜ðœ/Tß$Øüê‘ÛBJ¢tG¬¸€¨„‹Ã#²9æ)7·3pÅ)l_¬è…;Ï£¢„ÆÆ‹ÀA=±|> b–Î6Bçµ9t«@ÙÌb Jól D $ØšWý4¶µ0¾TõñRÔ7ÔânŸH¨`çå@4MARe_r44Å%b¯¦µx¶+ˆÉ{úülýzÅ"pÃyÕoV;/÷­º„‹CTÉ¢e/0ö +-%𮲆‚€‘ÁÐð¹B$OÚZXâK¼‚•œŸgœæ°¹¨0åfϬçæmt›·;gÄʉäóÄq§ÆÄ[r©Ä/‚‰2ÄEOùá¹GÉÃe8îá­×­Ã=°‡/Îʆ¿X² wµ p“%Báå"s +-Œör53y9£ pùp]v-ãh¦áÐ Ûoh5àa~¯¸TøTC/|¡ߌÂpôæ£èªÄÛ)LóÁ‡õ!Åàzƒâ»vÀ4Û|™™ì<›HȤîž¡ÂÔUÑcBSšˆâ,Öesšyª€µÇϽà¯s¯Î%´APi²-nŠŒíyf,˲<›¸Èhq¹üØF9%@uV` :»½Å?äȲ%k+´j ÁßãuìÆbOCì6Æn,n`˜la4¡NʤC6òF¦™§˜³``0ðü2ŒI#°ó^ÄÉý88ÓyL<)Ëcã¯iªô7‰}ýQ(5ù9Øy.›«kEìU,óªì‘Ò݆¦–­™ˆT}NÍpË4¡ªŒ„J›ýºF€`Ã$ ó vžæ!;om žÎ1 °óÀÎo.Øy›žCaŸS¸‹æ†êœ’üž¸“Lß²7ó^O°ó>’¤êë·j½$ ”ð²"®§z M°ó41I#í$œéý8L³õ°ó­Q‰mÙ“1²¹Œ”@ØóÇÃQ_!˜voƒ-zÓ»9Øy¶³å¨± ·£–0iÈå¬,Ô\†ì¼ð7 –Øy,‰~/„æñBhú%X…\°óÌ +-åR4±-›¬Æ­0ÛѬ[Y¶f¹½j·r«#Ù#ƒÿŒj”¥Ù%U +-w‘ÆÞ]7­„ÄΫn§”Íúq)0*×:p¥ÃaXNëê@ÄjŠ@Äꢂ!1ÀÎK¸8§ E% DúA3–Ô4ûBÓá)¥^Í‘Þ³ šº +-Ò6£ga ´‹ þä s_ ”ÓÌ0 `ç  ÆÖÖ.kßL€H«nÕ–v&v3¢[a,—‘j(ŒBq*ÖÓô +- ¿k0u~ûÍꙚ=Zì|Ò˜­é5j¤“Ê/F'm_RŠ¹¬³öÆKT5ôY¥àÃчÍÈíó ì<“ê„rS-{2µ°Õf UëgôëAè1·ÒwÓÜ2­–ph9*ÅẨƒ˜4½ 9¦¥6¹àIçð…±$ |m›ùB©@ÌmT BiÅ€Gi +-žô´m³4æžPnj{GnAÍõã‰É›Nù‘ó<þS-¿ÍëÉ/dô§)ìò‹”<äÇ°8FËëÉo5Uú[„,ã‡È4%TF‹ +-vÞI¸-\éž“aËv?[ªçRq=e¨Ü…P°ðä!ÊC#N8úK°”¢ ânA¿†LR¨Mó(xžº‘|ù›ÓÒ‘Û+§ ä SØPàvÞh‰ÊþβU[NNsHÚýp‘½œ _—šBvѪäv$¯>#ËÏ#è~Ñ ,_àÅ7Ytó2Fɺ¹•­ßdìÆ⢠Åâ(÷99ªzùº‘<98ÅÜ°y¼uÙ|V§˜‡;\ñy`3|±\!¿Õ©–DѾKÍF~’Â.?ˆCѾ6öõç)ìò;Xãv^ˆ;CÓ“F +-_xΆ/C«/=T'Û‘Û5©Í0ÃG‘”ÔÉ‘U£/D«_ÌTŽZ›$^ì©vT–ñè xgk@›+ +-Ùzy/¶5–X ójtÖÐu4š„Ñœq §ŒÙü¶º‘|OÝHžk0››Ìæ¹2‚!QÕÐ5‹YàP17 N1÷xw úõù–qO q—åÞo9¸HKJìÀ úµÁ¶ÂÝÅÖö„•(•*MÑ(Übœ˜^²óýÎ"yõµˆÕ ts±LtsSÄm>ƒÐ?Mæë“iV)›1ÝYÌ)æ&‹B:¡Õ£ q¡ØØ‚ˆÕYšÝÂyaš?Ï,ë–†+ÎýË,I¯ý‰þY³•Ç!>·ß}Ÿb¾·¹ËMî}Š1†ÍN`Ám€ðä©“ä¾@P¹Y3éi’¤N³È@’`çÅ켘f vža<}PZgwÓ>¹ç|ì’8¿[N°ó^èÜŠ !J³´ +-±‘:g‘AËQ®!Xln­ƒ†A'@`’âɸŸéÝ<Ý_>P$‚ˆ£ ¬Ë椌Ë;N“é‘W¿ÍÜÉV€ê]Ôϲ1r» a*F–7*x_ÁC¾@p‚¢w!V¿š‡ #Ãì¼ñæ=7Ê +-hh˜Þ¼Ë8Ì3J^}#ÊBóEŒ ,È€’©¯A3½ªË8|¦·Ðá¨#ƒ øÛ!÷9à´EJ¼X«Ð1¦J¹B~¦ˆ ¢ÿœ© ›¬ÏŽëÀò¬¨/¦ÙÞAyu["÷RßL+–n<ûê!›ý`çv^ +-‰}ýñRQ~äjÏ•IÑ:ߥT”_CÑŸ…ð"¿‚ÒŸde"¿÷ Ó_*†ôg)ìòóš–ä8\?C¦÷„n3Z‡E|z g!-»òh1éEM$TCÉ‚vØy`çè"rç!]qàè` p(8èDWðÉ®è‡3@ +-Ýì&ˆ:Ï"VXÃRÁÀjwçÁr F±ó=×y¬ÈÞyj wž ì¼nVM<À´‘nV]5À;oF Œ)J€8àE"€¢>°H|€wÞÌŠ²š¹&ðÐß2î yÙÑ€°­pç³wȉ~üÎJœX5°ó¼÷›$M²{õ8‚7;/C8K˜µ-èfÔà^ZЯK³wm1<`ˆ„³5ÒœD¾˜þÈ’ý4ãd'èךýZ³côëY‚»i[ÎôF[¹G^ý Ä]3Ðñ€ÞBŒv+阼9 3Rì<ŽÉÝ5FàvŠ™eã*©¬W¤]H Y“X7·´2ë µ9D|Õãí©QuÍÇ1á8$“¶‚“®)­²AòŸü7 m©§#yu°óÈÊä Š¯qAB¿F5,ቛ)<×X9½AéI4þhx=8ô€S­: +-·¹˜v¸óNeʸÐDÛÜV9™Î¯äÁÎK«Xª㢘Û¼ÔÄ«Ôæ'*µ}dñ})µ»(µù¡¤:—S»“º¤PÔÀ$=§Ë ÍW‘–Ã*¤/¬Xd’‘ P}q¢€ôàócðµ>E˜mè`6'Øäu_0›Ïª+(þvP^Ì榳yîë@ºÞ<p#ùq$¯Þ@†+nFàÍÁÎ#Y¸ô€Kýòwä“ØOz|Ò˜ø£Ó:PZ¼,E†Ö¶ÂÈ +-`qŠÅ·)rAl—‹ìµ Øy4ŒéÕ^aCY¦#ùmùöêÝó¥ÞçbážCÝT<`šMxÌ®‘½1Ž3=L½ÙHhÊO”0F+y‹D£Qs7Ü¿æT¶`C2©kq¸^MIô !¥Ï/iØÌ¥z6F +-Â$lé£O*`CÓÙŒ6 B^URºoNaÜÙ†²¨ó˜‰¢†™A¨D@D€À   ˆ&cQeÔõÁʤ©Tb(AÆd 1Æ ŒA„ M }³ù—ÄìÅ/ñéhëñºjû/ïðÙdŒOÿ[ãé¢O,/ #Ú:3íÆ{ʲŒi»Ûu¤üÇÑÅM<:etª%ØÅ€X zÑ ìâŽdniLÓît•3ìt-(vê ÝXã’º5—H iʵ_,ÊUóZi¯<Ëc#u?tJl4 ÊH‹wª7ü‡œ‡óï˜ ,R…AõÔÚü9 ARÜ]p󲮞jË2t^â$ýFýûY>m{‚Xn¦„§p3fOÎa™ŸIˆß–¦Iº’Cç½¼Êèë„ÞÂÄ‹ûv®ý¨ñçC^jb>K}‘üÈ«!º’ÂíÔkNÖ²·éÉöq$rÞ€¤^QeÔ@!ãWuÃú²y舩{ÿÕ «jË’o;añ!]žR(:Y­ÎäŽTÅõgyØotƒ* gŠoir^'1åfŠc†8 sfbÁ$¸£¨ +-ó€¯@íâ‰iAîÛTA[ ²œƒ…*rôüåäŒå¼¦Ô~¿'ø7)%áû º#s>^“hö›˜)â›®íß'}Ã*ûÝÛ¿/8Î#ûÝñïÝà" +-ûÝça‡âÄb‚Ã\ ŒŒ7 h@-Ú +-¨ÀýŽ¨A¿„:U¿ßŒíú#*°@Žî7ÜûpÙf€â˜"`˜±h6°r¹±ù7Ù2O”€‡ý>$''c.Wm—­·ß›C®ºuÃ}ÖIÁ Æ—]ÀÑ(?‡ûý®p,""qÜ(4 ®A/õ­#D£3{ˆý|í©Â…^.ŠÅa³ß/ŠÐÂ6–£xU¦ÃË)x;è~= Y°c‘^ð7ìƒìw®gÿåE”)eÜïÕ®þçßÓ´Ê\ö[Í¿|BX 3§¯RþAöûÇ¿kµ©”ýF÷o5üý>¢D´5128K H86Ë‘‰©×n\õã¹”wŒ +-*?þú°‘ÝϨ}=SLØü˲¦Xáš°p׆Ã%NábÈ¢iÂ4ŠGUÝú\6GFG·.¤Çaì“Ô·æûšÛ –ª3*ئ]²Äx$I7¦0âЧ§ˆoCÖ±2-tè—å…AÐuècíAˆŸsç¶”ß ÆMw±lÖ†q‹€Y[Co³ù€&/ÕyÎF#;3¸bgˆ…=v7÷è^¯ÕÂÖ¿‚ë£úÅ¿ñ “WŸpx|u{äÃfY“­Dô‚ûô¨&T¸ Hx9}Ñ'¤mI勪0A‘gÑI%ƒ] ÈâIéÒ‡š§À® –¦­“R|¬OÒ°iž1lëa}„b¯íœ|—3$ñ~UŸ–Ú:ÙœLÕ6ßÜe:Sƒ¾Ä ÝjD4.¥ÁÓÈs aök¬Qb¡dŽ¹@fd›™A¿|«Ô{+Aÿr.Äm{…ºo L™i6dNüW¦[ú0ô²ÙH¨+§!"«ÉÚd€œ¸ÀŒ¡Í=$<ј¿Lœ–í]M÷øË+έ@,º©.k)œØ©±]>Ñè±|ë.@ò-’E†õz0Ã…9µÝQ !qñBÑìåÍ€v+™¶›[8D˜5å®Íô^ì›·Ü±Í ÎÊÞ. S=h}”¼|ÕW¼2ÁÙ¼4ÏLF‘[ƒ2˜5ÐÉáàcBâÄ"S6!|ÕÀp +-Z_¦±m]rèp”¬£XÄÁ¯L±›c®MO‰ð3]DJ®§QDr[²ÐN,þŒ(â°!̹ ãš9öÑÔœç}‰õkŠ¬"i ûÒ ÞX¨)þÂ#0¹ËcéSý{ÆCfG£äëk¨ÔÒ~¾.Ìî¨å£–Q5ª¿=‘ …³1¸[b‡D‰-“)A;È;¡lÝk/“u[¦áDúH TÔ¶Z +-$>XüxôËþ°–GØq‰„ötšç£eháµÎ軬"“¶&]2+åßß ‘¾uF³àr3ÜÐ.½X-S@E,šê†´rŠ¼qÛ­›DãŽ2z;õÁ2c:G¹rç‡kLõƒå0ܾ „yœGÆÌn +𪼩·¡HÙJǬÿóꈣû/\±AO Ò?ëzÓ±ý3XŽþLוà2Ž¡˜N©b››hSÕ¬êÆiq€;H©sô5~<…Q‡ÆK¿ò¦4¶;$MÝQ ‹d­5ŸÊZ„´è¹tR\B‰ž=‚w )¢Ä¥ƒ³¬X{æE`ð$Õ¶hiÓ㇢ʪ¸[`ó®]´¢[øz.úG‡"­‰E3Áòa`ÿ‡Øû´©Ñ9ð‘{ïJÊ7}3°%B€ î’Œ0ŽE<%°1}5•H'«ò«L`üÉë<ÿ@¼o§&¾ZñcªËÐæ’Ç{Ö±ïç{4áy›×ØWΓãƒ`}ÕRI¬bÉÿŸœAÀ+ÝÙ"NZŠY)ñº\¢UÖNßÈB» £KI¢Ù¼‘AŠ’ï)ŒM*A? NOˆæž-J)MüNñ2Í“>e¦œLýjÿ–Ê4ãdäU½Àô”ï$`›–fU´µg¬f>bä\-]ü»ñå¾+í ¾±RŽSwÔO øé›Ý) (ο= JÝ@±1ŒÛ($Ò—•'`׊[¸cNÒ\×c°Zçêh4º×¹¼ä{ª~F£ä-Y›šycjc‹#yà©Ž­ OÉ€Èú!÷1t—žû¾_t)'1š´{Ž-h.Ǫ-Õ–sý©>³=BrÏ +-É&ˆ¤0\Ø1œ 'Q_y±ùÉÀBù'ý¾‚ãR-Æ<Æ¿Ûï„?WÎüùÿ›9`Ý[Õè‡ó¿Ë0¤Œòè­>°ë•Þ1£ðÌ°Î%f‘µaÝoy37ú…2ó1U튎ÁDþChmµ î†5Ÿ¦FìOKºåiÝç¡›ï‰$$7:}ÊKŒòiݭů4t&µŠ¯ëa—“¸(Ò4BÞ¢I\1%}6?Bi—†Ÿ5E`pV¢°Koyæ´÷A[K„1·¿Wû:ýs²œ÷£ Å9kâ,äË\iƪýŸÇ"\<ˆWGœÅrpá¶yÎ`¦vÈXµu¹s`‚HZlÝÔ¹©ˆ½HŒâ†úàÈÝQÖ Ö#>~ÿê"‡_ æW€Bª/T%7F('Ï^%pRþ‹5ا'¦—kÉ„&ä0]}~¯¿[^J,æ×+ú:,iÞN8«¢+A( œŸñ/2%«¶ÃÎ80"Á¡kùɧA…ÒÏ«qõçŸZµ&k6{l[]Ê5¸ „E³<^ápe¤C„^¨ò*wÓZ<þYþ¡°@¦Gö`À¤’U»Û£õ²èSE)ƒ™rVŠ²K%°}¤Û/)뀕x @ÁA‚}¹óà›ý¼Å•>X\28ÄÖ3„†ƒûµ‹2 -)ÂHkÜߦEÉpÔÌi`(´ž"áÛ Àaoˆ§Q÷“O½è’…îàŠpøiÞ…nL;÷h0Ì÷ŽüpÆܤ2ÉG¬{VTtv%˜Šy¾8Ž~HÄ$9–pnNüI°"öäÍÒœ½‘Tä®ônPÖ»o ¬ÎQ°6ˆ¯'²xòdÖÅ ÛF>BTÂútB…å§-ÈâÖ © ô  ( ¿QåùG~'Í +- +-X@ÐzøÅ׌Q}I¥ +-4ä³`¾(É—Ÿq ˆ6ãÞšL2Gw³]Ò“þ±æ/)UÖÝÏÀ;#äGÓ—ÔBú,t>YKªQ²J~:Ê°¼*GÄçš¿¤ˆN½Åó‰”îT ÍʤÞ„–4r˜Kƒâ¶~IúÅÎö’këÏÁán~O|3ʬÐÅXªqZèmd­ ï4¡j¹¤0õà%„ßXUE€ÑùŸ +-] +-°Ç<€@=">mõÀfÙlhóÀõÉψ$d£ ¬íhrñ9”/œšljŸH¼»„ÐÃt$æuÄ¥¯ãWÉÊ想æb›ex$šøb;3MÞEŸ#ÌRn¦Tr¿Ï&u@^Ö\—¡Êi ß Ã³5N¾µ´— ̸/;k˜¤Êl5oIˆø,ü¡¾úaÌ×qYhÔñ¦w½ô©8ª8ÞPbÛ¬@Ùåk,þU”fnKåJž‰@ Bë»=Tna !8Ð)9Fwàap%X¼Çpò? ¡ëø)Ç_,‡«P€w4#Qud¢ªâÆ5XOý¾ÕÿçÔ½¯(vb‚|M~â'!8„ÅO&çö8U+&U«çÕ!ëä<-ZYQ¢‚äô¤IJ²J„F¨kU›”ŤT¶jLLK¢I!§´Ç•SKc0 +-õ û–ü}61)–éÒþ2øeébîDÂ"Ó¤J]·6¾˜T³æ÷„‰-»˜ˆJd [ÿmªÿ«S©ö¬Ðx-½\‰àš¿?3LÏV¢9ê}g+ª‚‘Ô’Î9¥5œ7¦Kï•2PÒ¢Ž?ÒÁ'§è?Íy}M¥èÂLlIoPcÐËŒr*¨} +-ÃÁ‰??o&²‚Ü7ËÅ}…•†'@¼ÚBý£6UmcœH/•Di›\8 +-ÚÐöý\=I5'Äc”½S·¯4ƒäÃNÀ`3v”ÕP,pDÌÄOÒßùá=.Í(Z›ŒM¢÷½<£:=·ÊlÈ”2vªêÆÉ•Åd‘馧ƔŠº$z¶4ÉÄ“&„é:¼¨ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ|ÿ þ@Aÿ¨Ûs6Ìÿ2 ðýòá ³‡C¾>jö (T×"0ÎÝú@á©E³>Áö (øÕ"èÐ…®ú@>ÚLS€M{h$굇™ œ>€€W{° jéõÚÃO0G>Øг¢‡ÛOa‚Ó‡¦Õ‡+Ì5Z*è ‚Ø¡pt%ö@(¼Û`Š= +-ÝöA'àb„²}Ð ÊØ¡kt7ö@(œÚ‡#ˆÇ…Gû  ²B¡Ï>ÁFöp(”Ù“= +-PöᲇCÇ>Xöp(€Ø‡#ÀË…ºÕ´3þÑ¡@|z‚óõ(àÞÐ}= +-©÷¡'¤_„‚æ}è ø×C àxtÂö@(ð݇ž`= +-p÷A'”`„‚×}è 4ØC  utÂö@(݇ž …= +-1÷A'a‚È}Ð sØ¡ Kÿ +-œ5`àô¤*Ô¿ôJz®è!”ôhÿ 'PÐÓý;@Sèÿ gSèÿ ©ô˜ÿÐÓ$=éè€ö?úHÐÿþ;@ßHúåè“ÿ÷µÿ ÿ 7ÿÐïØ5ûúûLÿÿÿ3 Ѓ‰ +-Ѓ´?8@*@Þþà=8¨P=œûÃô€ ‚ôïПèß 8ÐCÁ?8@g +- ‡ˆX€¼@ÿà=H)€LþÁz0R =Èüƒô £ zØùè!Fôpô Њ-ûWDÿ3ÿà©Bôpå Ц +-И?8@Œ*@iþ°=ª =Èùƒô §Bô°ç Ð +-С?8@h*@þà=|© =dúÃô`¥‚ô êЃ’ +-Ðê?,@D*@´þà=ਠ=ûƒôÀ¢‚³õWT4” zXï‡è@Ð}?8@ø*@ýý°=È«P= øÃôÀ®‚ôÀàи +-ÐC…?,@Ú*@þ°=P« =øƒô€¬BôÐâ Ѓ° +-Ѓ?,@¹*@<þà=ÀªP=ùÃô ª‚ôàäïð¯d4¾ÿ€ØЙ +- +- ‡È~X€¼TP=\öÃô€¥è´ ‡'@¦ý°=$© z`íèHÐCm?,@:*€|ûazˆQAô@ÜЊ +- +- ‡æ~X€DTP=L÷ÃôÀ¡è» @åý°=(«Wlÿ4fü°=« z éèWÐCO?,@²*(€†úaz`UAôÔ Ѓ© +- +- ‡§~X€@U =`õÃôp©‚èÁ« ‡H@dýà= ª zhë‡èAPÐÃ\?,@|*(€òúaz°Sô Ø ÐC› +-†à_dÿ4”ó¡bÐ8?,@+(€ÌùazHXAôÀÎ ÐÃÀ +- +- y~X€úUP=àóƒô@¯‚è!  w@ý°= « zhè‡èA\ÐÃD?,@Ü*(€2úaz°Vô Ò ÐC³ +- +- ”~X€ŽUP=©+|5º*èZAô€É ÐÃÕ +- ‡M~X€¨VP=„òÃôà´‚èá” ¤@­ü°=­ z˜å‡ègÐC.? @9+(€xùaz˜YAô Ì ÐCË +- +- d~X€NVP=8óÃô²‚èš ‡@Úü0ÇT3õaŠ ‡Ï@Vü°=d® zàâ‡èarЃ?,@+(€Ðøaz8\ô°Æ Ðá +- +- ‡8~X€üVP=ÜñÃô€·‚è¡ ‡º@€ü°=¼­ z0ä‡è!mÐ#?,@c+(€$ù¡©þ|ÿ5øü@Á ÐÃö +- ‡ ~X€°WP=tðôP½‚è„ ‡ç@&ü°=$¯ z`á‡èaxÐà ?,@À+(€jøzè]Aô€Ã ÐÃí +- +- ~X€bWP=ñÃô°ºèሠÔ@Mü°=ˆ® Nu\ÿ4“`z¸àèa{ Ð?@á+@€"ø¡z _Áô°ÀЃú +- ‡~@€ÚW°=ðCô0¿èáЃý +- ‡ü@ü+X€æW€=ü¯`z€_AôPÀÐCû +- +- ~X€ÎWP=8ðÃô¾‚„ùWdÿ4xÿÅÐCé +- ‡&~(€PW°=ñô°º‚èˆ +- ‡Ø @AüP=Ю`zØá‡èAw ÐC ? @½+@€jø¡z^ÁôðÂЃñ +- ‡~@€’W°=˜ðCôð¼èa„ +- é,@üP=d®®d4-+(€äV°=ôñôP·è¡ +- ¼,@wü€=ì­`z ã‡è!pÐC?@„+X€Öøz8\Áô€ÆÐCã +- ‡2~(€ W°=|ñô0¹‚è‹ +- ‡Ì @YüP=p®`z˜âèásð¯d4—òAh ÐC+? @E+@€Zù¡z@ZÁôpÊÐƒÓ +- ‡P~@€¢V€=„òCô@µ‚èa“ ‡« @›üP=h­`z¨ä‡èl ÐÃ#? @c+@€ù¡z0[ÁôÈÐCÚ +- C~(€ÞV€=H©W|ÿ5ù*T¬zèæ‡èc ÐÃ5?@+X€¢ùzYôÍÐÉ +- ‡e~@€NV€=,óCô ²‚衘 ‡– @ÅüP=À¬`zøåèaf Ð/?@9+@€rù¡zàYÁô0ËÐÃÏ +- ‡Y~Pë¿Tÿ3Tô!  ‡x @ýP=Ы`zØçèá^ÐÃ>?@ú*X€êùzèWôPÏÐÀ +- ‡w~@€V€=¼óCô`°‚è! ‡„ @éüP=0¬`zçèáaÐÃ8?@+X€ºùaÁþ|5‰+@éèAY ÐCI? @Í*@€Jú¡z€VÁôðÑÐô +- ‡~(€¬U°=dôô­è!£ +- n,@ý€=|«z˜è‡èA\ ÐCC? @å*@€ú¡z@WÁôpÐÐú +- ‡ƒ~(€ÜU0»º\4 @©*@€’ú¡z`UÁô0ÔÐë +- ‡¡~(€dU€=õô «‚衧 ‡Z @=ýP=àª`z¸éèaWÐÃM?@¾*X€búzVôÓб +- ‡•~@€ŽU€=¬ôCô ¬‚=úWd4tÿ°¨èᬠ‡E @gýP=8ª`zëè!RÐCX?@”*X€¶úz¸Tô°ÕÐÃ¥ +- ‡­~(€4U°=TõôЩ衪 +- P,@Oý€=ŒªzxêèaTÐÃS?@¦*X€jú¯dÿ4=* @…ý€=´©z(ì‡èN ÐÃ_? @s*@€þú¡z°SôÀ×Ѓ +- ‡¼~@€òT€=äõCôÀ§‚èa® ‡? @sý€=ü©z˜ë‡èAP ÐC[? @…*@€Úú¡z@TÁôpÖð¯dÿ4†ð¡³ ‡* @ý€=T©zèì‡èK ÐÃe? @[*@€.ûzØRôpÙЃ— +- ‡È~@€ÂT€=Döô¦è!² +- 2,@‹ý€=œ©zXìèáLÐÃb?@j*X€ +-ûz`Q¯d4|ý€=ô¨z¨í‡èHЃl? @@*X€^ûzRôðÚÐà +- ‡×~(€ŒT°=¤öô¤è!µ ‡$ @©ýP=0©z0íèI ÐÃh? @O*@€FûzxRô0ÚЃ” +-ÿ¯d4ÚôE ÐÃq? @+*@€ŽûzXQôpÜЃ‹ +- â~@€\T°=÷ô£è!¸ ‡ @ÁýP=ШzðíèF ÐÃn? @7*@€vûz¸Qô°ÛЃŽ +- ‡Ú~@€zT€=ô¼|ÿ5-ü`¡‚è!» ‡  @Ùý€=d¨zÈîè!CÐCv?@*@€¬ûzàPÁô0ÝÐÇ +- ‡é~@€>T€=L÷Cô ¢èº ,@Íý€=”¨zhîè¡DÐCs?@(*@€”ûAeuTÿ3•õa½ ‡ @ëýP=(¨z@ïèAAÐz? @ +-*X€ÊûzhPôPÞÐCƒ +- ‡ò~(€ T€=ˆ÷ô¡èA¼ ,@ßý€=L¨zøîèaBÐÃw?@*@€¸ûázþt5ÙüpßÐþ +-ÐÃ}? @û* @÷ý€=ì«€=Ü÷ô°¯ôpßЃ¿ +-Ð}? @þ*,@ñý€=¨zˆïè!@ÐC|? @*@€âû¡z PôàÞÐ +- ‡õ~@€T€=¬÷ôp ‚7Õ\4#*@€ÞU@€üzxWzðèá]èaÀ +- y @€äU@€üzWzðèA^…è¡¿ ‡z ‡þ~@€êU@€úûz¨Wzèï‡è_èA¿ | ý~@€ðUp™\4{ñÁ\èÁ s @€ÌU@€üz0WazHðè!]è!Á ‡t ‡@€ÒU@€üzHWzHðè!]è!Á +- v @€ØU@€ üz`Wazðèá]è{ulÿ5H +-ÀU@€$üzWzðè\èA p  @€ÀU@€$üzWzðè\…èáÁ ‡q ‡@€ÆU@€üzWzxðèa\èáÁ ‡q ‡(€ÌU@€ü!Ñÿ +-Lÿ3ýñàm  @€´U@€0üzÐVzÀðèA[…è¡Â ‡n ‡ +-@€ºU@€*üzèVz¨ðè¡[è¡Â ‡n ‡ +-@€ºU@€*üzèVz¨ðè¡[è¡Ârî_l5G*løôp­ô°áÐõ +-ÐÆ? @×* @þ€=\«€=løôp­ô°áÐõ +-ÐÆ?@Ú* @þ€=h«€=`øô ­ô€áЃ¶ +-І? @Ú* @þ€=h«€=`øô ­ÂÿD3ºöáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZ…^ûWlÿ5þp­ô°áÐõ +-ÐÆ? @×* @þ€=\«€=løôp­ô°áÐõ +-ÐÆ? @×* @þ€=\«€=løôp­ô°áÐõ +-ÐÆ? @×* @þ€=\«€=løôp­ô°áJêLÿ33÷aà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaÃä_l5}þ°áÐõ +-ÐÆ? @×* @þ€=\«€=løôp­ô°áÐõ +-ÐÆ? @×* @þ€=\«€=løôp­ô°áÐõ +-ÐÆ? @×* @þ€=\«€=løôp­ô°áÐõ +-Qê +-\4å+@€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U8Œ\4:óáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèAFulÿ5„*¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðeþ+Lÿ3³óaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaÃë_l5ý*ØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZ…(þ+T4%èáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZ…ƒúW\4ºÿp­ô°áÐõ +-ÐÆ? @×* @þ€=\«€=løôp­ô°áÐõ +-ÐÆ? @×* @þ€=\«€=løôp­ô°áÐõ +-ÐÆ? @×* @þ€=\«€=løôp­ô Û\ÿ4^ +- ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ P‚\ÿ43ðaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡:u\4›ý€=\«€=løôp­ô°áÐõ +-ÐÆ? @×* @þ€=\«€=løôp­ô°áÐõ +-ÐÆ? @×* @þ€=\«€=løôp­ô°áÐõ +-ÐÆ? @×* @þ€=\«ýT4ðôáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZè§Wlÿ5:üp­ô°áÐõ +-ÐÆ? @×* @þ€=\«€=løôp­ô°áÐõ +-ÐÆ? @×* @þ€=\«€=løôp­ô°áÐõ +-ÐÆ? @×* @þ€=\«€=løôp­ô°á«+Lÿ3iõaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaÔç_l5³ü°áÐõ +-ÐÆ? @×* @þ€=\«€=løôp­ô°áÐõ +-ÐÆ? @×* @þ€=\«€=løôp­ô°áÐõ +-ÐÆ? @×* @þ€=\«€=løôp­ô°áÐõ +-›ª+\4*@€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®Uˆš\4pñáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèulÿ5: +-®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üÒÿ +-Lÿ3éñaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaÔî_l53*løôp­ô°áÐõ +-ÐÆ? @×* @þ€=\«€=løôp­ô°áÐõ +-ÐÆ? @×* @þ€=\«€=løôp­ô°áÐõ +-ÐÆ? @×* @þ€=\«€=løôp­Â†ÿD3¦öáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZ…hûWlÿ5ðýp­ô°áÐõ +-ÐÆ? @×* @þ€=\«€=løôp­ô°áÐõ +-ÐÆ? @×* @þ€=\«€=løôp­ô°áÐõ +-ÐÆ? @×* @þ€=\«€=løôp­ô°á^êLÿ3÷aà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaÃ(ä_l5iþ°áÐõ +-ÐÆ? @×* @þ€=\«€=løôp­ô°áÐõ +-ÐÆ? @×* @þ€=\«€=løôp­ô°áÐõ +-ÐÆ? @×* @þ€=\«€=løôp­ô°áÐõ +-eê +-\4Ñ+@€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®UØŒ\4&óáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèÁHulÿ5p*¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðoþ+Lÿ3Ÿóaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaÃ(ë_l5é*ØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZèaà‡k ‡ @€®U@€6üz¸VzØðèáZ…2þ+T41ôp­ô°áÐõ +-ÐÆ? @×* @þ€=\«€=løôp­ô°áÐõ +-ÐÆ? @×* @þ€=\«€=løôp­ô°áÐõ +-ÐÆ? @×* @þ€=\«€=løôp­ÂFý+<3`ð}vñ0vôKüØÑaìè—ø±£ÃØÑ/ñcG‡±C¿ÄÆŽ~‰;:Œý?vt;ú%~ìè`ìè—ø±£ÃØÑ/ñcG‡±£_âÇŽcG¿Ä:Œý?v˜nc–®ö?ôÿ5@ +-`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°Ä^ð¯Üÿ3ïña‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø"ú+ô59*,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`GÊÿ¯Ô3¬övô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0lBüÿ5ö}€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~@Y]Üÿ3%÷a‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–øÁ{þü5oþ°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`xU]ä4*ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèCÙü+ä4,óvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`G@ª+üÿ5v*l€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ? ú_Üÿ3¥óa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–øÁëþü5ï*Xâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0¼ø_Ô3bÐìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`(·ôÿ5¬€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~S¯Üÿ3ÛÐÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñŠü+ô5%ða‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À§®ä4½+ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèÃkü+ä4âôvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`G +-ê +-üÿ5,|€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ç¿Üÿ3[õa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–øµþü5¥ü°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`Èã¿Ü4•;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ /õ¯ä4bñvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`G +-üWôÿ5, +-`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°Ärð¯Üÿ3Ûña‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø%ú+ô5%*,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`Gòÿ¯Ô3˜övô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0¼Büÿ5â}€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~àY]Üÿ3÷a‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–øA~þü5[þ°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`V]ä4ó*`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€!oþä4óvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GTª+üÿ5b*l€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?ðú_Üÿ3‘óa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–øAîþü5Û*Xâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0 ù_Ô3NÐìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`È·ôÿ5˜€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~0T¯Üÿ3ÇÐÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñü+ü5ða‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:ÀР^ä4©+ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèÃpü+ä4Îôvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`Gê +-üÿ5|€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~0è¿Üÿ3Gõa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø·þü5‘ü°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`hä¿Ü4™€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØц¡úWä4Nñvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GKü€`ÀŽ–ø;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰°£ ØÑÃ?`G°£‡%~ÀŽ0`GüWÿ5 +-ÀŽø;z8;z@âìèáì艰£‡°£$~ÀŽÀŽø;z8;z@âìèáì艰£‡°£$~ÀŽÀŽøa;:À€=,ñvt€;zXâìèvô°ÄØÑìèa‰ á_ìÿ3ÊñAˆ°£‡°£!~ØŽÀŽŠø;z@;z(âìèì衈°£°£‡"~ÀŽÀŽŠø;z@;z(âìèì衈°£ª£$~ÀŽÀŽø;z8;z@âìèáìè‰~¢¿5*ððvô°vôÀÃØÑÃØÑ?lG +-`G?ü€=(€=üðvô vôðÃØуØÑÃ?`G +-`G?ü€=(P=ñvôvô ÄØÑCØу?`G `GBü€=$€=ñvô€ü+Ü3xöÁìèa†°£ª£~ÀŽÀŽlø;zh;z°áìè¡ìèÁ†°£‡°£~ØŽÀŽrø;z`;zÈáìèìè!‡°£°£‡~ÀŽ¨Žxø;zX;zàáìèa^è¯ÿ5¼ý° Õу +-?`G˜€=¨ðvô€ Øу +-?`G˜€=¨ðvô€ Øу +-?lGKÀŽZø;zXvôÐÂØÑê£~ÀŽ<€=Àðvôàì膰£`G0ü°=8€=Ìðvôàvô0Ã\«+ÿ3÷aƒ°£‡Ÿ€=lðvôðª£~ÀŽxvôàÁØÑOÀŽ<øa;zÈ ØÑC?`G9;záìè!'TG$ü€=vô@ÂØу`G$ü€=vô@ÂÛÑÃ&`G'ü€=lvôpÂô¯45eþÀÀØу¡€=0ðvô`(`G ü€= +-ØÑ?lGƒvôðÀØÑàP=Hðvô(`Gü€= +-Øу?lG•;z¨àìè¡`Gü€=T‚ê胰£I€=`ðvô °£ ~ØŽ~¯ê +-$4µ*`G;Auô ¿ìè'ÀŽôW€=àØуþ +-¶£‡š;zè_vôPTGü€=ÈØÑ?`G2vôÀÛÑã€= ðvôð(TGü€=0 +-Øу?`GŒvô`ÀÛÑC¢€=$ðvô(°Í¿$4Ñò¡¥€=”¯;zh)TGè+ÀŽT +-ØÑú +-°£•vô€¾‚íèᤀ=¬¯;z8)TGî+ÀŽH +-Øуû +-°£’vôྂíè!¤€=į;z)TGô+ÀŽ|ìè~ØуO€=Я`;zØ °£Õ<ÿ5*(PP=@¯;zP€=@¯;zP€=@¯`;zø)`GÓ+ÀŽ~ +-Õуõ +-°£žvô`½‚íè!§€=d¯;zÈ)TGÜ+ÀŽl +-ØÑ÷ +-°£›vôÀ½‚íèa¦€=|¯;z˜)TGâ+ÀŽ` +-Øуø +- þ¯,ÿ3ÈóAvÛÑC‡‚êèwØу†ìèwØу†ìèwÛÑÃ…‚êèÁwØÑ…ìèÁwØÑ…ìèÁwÛÑC„‚êèxØуƒìèxØуƒìèxÛÑ‚êèAyØÑ‚ìèAyØÑ‚ìèAyÈ÷¯T5!+ \Ávô°£ :zÐ\vô€£;zÐ\ÁvôP£;zè\vôP£ :z]vô £;z]Ávôð¢ :z0]vôÀ¢;z0]vôÀ¢;z0]Ávô¢ :z`]vô`¢;z`]Ávô0¢;zx]vô0¢ :z]vô¢€Áÿ +-,3Ñ÷!Kvô·ìè!KAuôÀ·ìèÁJvôÀ·‚íèaJAuô ¸ìèJvô ¸‚íè¡IvôP¸ìè¡IAuô€¸ìèAIvô€¸‚íèáHAuôà¸ìèHvôขíè!Hvô¹ìè!HAuô@¹ìèÁGÁ¬ý+Tÿ5 ÿЧ :zÀZvô §;zÀZÁvôp§ :zðZvô@§;zðZÁvô§ :z [vôà¦;z [Ávô°¦;z8[vô°¦ :zP[vô€¦;zP[ÁvôP¦ :z€[vô ¦;z€[Ávôð¥ :z°[vôÀ¥;z°[ê +-<ÿ3=ÑÍ +-°£°£šlG*TG:+ÀŽ0TÀŽtV°=T¨P=­;zP;zZÁvôð Buô`´ìèAìèÁhÛÑC‚ +-ØÑCÒ +-°£‡ª£¦`G*`GL+ØŽT¨Ž¤V€=¨€=H­ÀYþ\5œðAaØÑ’ +-Øу +-¶£‡"ª£ˆ`GB*`G+ØŽ~T¨Ž,V°=ä¨P=p¬;z°Q;zàXÁvô0£Buô ²ìèFìèAdÛÑC‹ +-ÕÑÊ +-°£°£”lG'*TG.+ÀŽHTÀŽ\V°=„¨@¡®T4Ú*ØŽêT¨ŽÀU°=¼©P=˜«;z`S;z0WÁvô¦BuôÀ®ìèÁLìè]ÛÑØ +-Õу¼ +-°£0°£ylG]*TGø*ØŽ®T¨ŽüU€=P©€=ø«`;zˆR¡:z Xvôà¤vô@°‚íèaI…šøWD3`àô^õ–¦ïQ¦'Bš~H]š¾æÒôCªÓô ¤é“T§é‘HÓ?U—¦Ç—¦R¦¿‘¦¯R—¦o/M_¥:M_#M¿¥:M?#MV]š^^š>Luš#MVÕ¥é÷aêïu´÷ÿ5ü R@šTXš~‚¥é¡A§é'@š&Tpšl¤é!C…¥éa&Xš2Tpš`¤éáC§éAQ@šJTXš…¥é¡D§éP@šVTpš,Òô£ÂÒô0 –¦‡œ¦H€4=ܨ°4=ô¤éAGöþ+ ÿ3¨÷!JÓô€¡iz¸Rà4=H(@šº,M +-¦0NÓC‚‚¥éaLÓô` izHSà4=(@šÞ,M=¤éANÓôpSXšê8M4¤éaOÓôàR@šTXšV +-KÓC€ +-NÓJiz8PA×þ<5 ÿ€¡ÀizˆR°4=l(pšœ M! +-œ¦$HÓÉ‚¥é¡HÒô ¢ÀizøQ°4=´(pšx M3 +-œ¦HÓCŽ‚¥éaFÒôÀ£ÀizhQ°4=ü(pšT ME +-œ¦HÓÃ’‚¥é!DÒôà¤ÀizØP𹺠3"ÒÄ +-HÓOà4=4¨€4=ˆœ¦‡–¦‡’‚Óô@ Òô°Rpšü M1§éOÒôpSXšê M:§éáMÒô ÀizHS°4= (pšÌ M +-œ¦0HÓçéAKÒôP¡`iz¸RpCÿ +- ÿ5KñK¤éÁ§éAJ¤é§éI¤éáNÓƒ‘ +-HÓC&8M@* MG°4=ô¨€4=è§éáF¤é8M1* M–ÀizXQiz œ¦‡–¦‡CÁizQizhœ¦¦‡™Àiz°PizÈ JÔ+¼ÿÿ% ò‚q*Põ°MÈz™4xê¡›úhÆ_H,d‡\S4ÓC4íAgzX&=MÅÔƒÑ\¿Ä€ØƒÑT!õàKéïhPN£‡6fœ¦‡³* M‡œFa* Ífpš¶¨°4= á?>¸$ÿQðp ó<H }'`ÀC ïxJ8?€0BûåzÀ˜“€À°ÁGy=` è¡@z8'ÐÉ€’¥Wdn·£‚–=$‚è< ê<4˜ÀõLp{N.HéÃÐ=,@á¤@äz)Ѓº€6 +-ô/ ‰=ä è¡@ÿz0(ÐCÁ€ÊøÔ€R÷ÐO ‡(Äùƒ+<‡z ЃS±Ú†bè– +-ôð°ÀCP w@ß<„ð(À)LÀƒ4–“‚“(F¤PT c=üèY@6z¨ÐL‰žÚƒ¾}pŒÿƒæ€ŒxPsÊ¡€5P ÖÃPðV N=˜•Ê©=ø%îa¬@a@Ê<`6ðððÀCP t@@Ó<ÜTðhÀÊU’ƒ³J€‚®=¸ +-è™\ÿ¸†=ì> ôð& ‡É=à èA±@„z,Ѓ¢€ðÊÚÔ°bM÷PW  ·<¤Ä à¨àn@zxp*ÀCPÁàø€‚þïÁd! °ó·w؃ª?BõC[à¡Òò‰þznA€þàx ó͇5 <|ù!ôÖéM +-±e=p ©à¨‡¬PµpìA!xð=”VS*ìš<©@l6Q¥ì +-\‚>ô ~ˆ€—‘îü@¨ö°2øÌAíøòÅzô 2ø,?àÀƒÂà‚xØü0ï‚>àa\ðÃJ<\ ~¸ €‡eÁCðð+øá)f?tÃW|ÿl®Õ¡£iÔô0=øÁ‚?4Àƒìà‡/xü°”ƒúà¡pðC"<Ø ~Ø€‡³Á§ð€µÊ˜ï1ª?xèæ@Ïð jê™ÌzHüð=¸¤ÿ pógÛ@þP÷îáÖ†>$¹ù@úÀ“=„Ù ïCJôð†>”~Wàƒî³!¸ú`jˆ?ðá"ö o÷ د{€vÒ‡ÐC | =`€ù߃ø°x ÿ ÄÇ8ýæ¨ßÿЧrW¼ÿ* Ðûañ’‡¾è!C>tч"`Œ=ÇZú‚dô`àÙ‡$£‡©ø0R:ÀŒ=˜Ä¨zÐ3zø‡wíƒÍèa>lÖ˜‘=ôâÏ|È-öЋÜÂÀèáÒz‹díz8Š±—=XXâQô°¥:WÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDýÿÍ ÿÿÿÿÿÿÿÿÿÿÿtÿí6œ. I9¸¤² ˆ4C"bˆF¶òÉ€ ÙÊ'ÙÊ'F¶òÉÈV>ÙÊ'[ùd+ßÊ·råÊ•RJ©{XXÁ€p8Ž¢Œâ „A0†€aŠ!BcˆŒpˆùf¾e6¡Cõ“?Ó²žÊTÌ°ÛÃ6W'MÿÈÒÇ ÜkWƒ$coÑ'“^…oL +-'QI^Ø_Ì(½‰ç`Aøa˜‹¦ªï7 +-µ—ù€Œ[+Rýðà`ÄÄìÌPB _`CÝ×Gv9ÄŒèqW@'8 èÄ Éc´Vf° =€óDTïÛ†’ïéO‰$t€”ì¸ýŒrÒjïER=×V:e„ï½Ùqû?å¤ÕÞz®­tÊß{³ãö0ÊI«½Ïµ•Ná{ovÜþF9iµ×V:e„ï½Ùqû?å¤ÕV:e„ï½Ùqû?夕Ná{ovÜþF9锾÷fÇíÿ`”ä§*ë +-†ƒá¢â{ov¥4Q•u )ª>Çíò"i¢*ëVFwÜïEÒDUÖ%=tÊß{3·ÿƒQNZí} Hš¨Êªè”¾÷fÇíÿ`”“V{(’&j’"蹶Ò)#|ïÍŽÛÿÁ('­ö>P$MR=×V:e„ï½s"L(ZÅ %*‰Ê©ŠH&­bÁ¢÷ì’(+"™P´ŠVM‘kŸ É„ÉÞ»ãˆH&Hb׎ Ò`X.ë‚Ñp< ,˲ʱ¿•Pd FÃñp\×e½ý#…H(²£¡À*†H(²cÑwl8`ˆ„"S +-íPÁpÀ ë‰ïÜþ/R×€P00f°,+Ñl8‚æ¡U’4NG`€ ³]"Ñ•Ìí’n͆Óèh¶ÙÌm·ŒfÃéln…Ž;Îz˜-£Ùp:KßqSÌ–Ñl8™ÆsܳJŠ fËh6‹ÇÒÈíoBdÇÃpÁl …B¡( :¡›ö9$*–€ fË\*ÇíL«X.˜­¢e×ýv­b ¸`.ZfyÇ…7¨óÆ#`«0@Èf3á\$§IŽRd@0@"€ø£=ø â«o¯þlìˆ×`­Ë°&{ ÝÅ93>ô™çóƒEMM&’o!µ}tlX-heõ'XÕwÕà  ¡ôAVo ûVAY]Zü¯Z<ŸW I«¤¾Úö¼*Øøê[¬gƒ•@E@Z™ËŸ,vj·GhJ«‚±j†í³ +-l ŒÕúP$øO·Z¿þÞÕÛ$XºJõ9¯¢ÉØ‘ÿ®Vã«5 kO°R}Nï}Ž¼S§U=Š‚U ®jãU¡çê$XïZÅIVÃS¬ê-XÝÛmṊuÐ’1PðÙ{¯ß@#Öm"ˆ<‚Rs4d»§Ærä” ª±þgX«.¬ªÀ¬ž4@Ahõÿ«&—ÕピnÕ\ÕóˆW›rº +-©‘+#ÖKd1}Æš¾êG¨Ž¸<5ªözª ýG`ªÖ^V«ª -XÍG+tƒ€>% SwËnÕÔÙ{‘犂a ï•žüX½ëU§°š>XA„õXw:æ<þ'@qjÚ#·[«¾Å*<™U讪†´úNVmÿ4#o•RÝó™Wô„ì‰]o̓õ»ÂzXQ«'ÄêÏáRî%`áÔS¤†þÉøT¬Ê±ÿl ,Ê*É®jZõ2¢[Í+á·DßÕ{XW·3Ðë0‘Ú«’ ôãMVBAÐPaÝ› +-}Æ£BÆÔøIþRµ USGNõV››¬RuU·V}_U'"Pßê4«:ê£(bUI\z°Ž6[XÓAªbÕF¬üà±C4à^©7—dyU7áUi°jµU3ʬ^uUß x¯ªg ¼DV§0Öu/W(‡®PüécØÛâÕÕÈÆîw¯ºÃ«ìh ƒlaMÑ_UĪŽ°J%Ö¬¯Ãs5 À"¡6ªhDÊŸWµ[U¬»ª9ÕòJp¥Võh[Á“ôòlU¯Ý¯ÿ«…ÍÖÍàÉ@tÞ«;8÷*E-V7ê&Y|Ÿn~Å‚ÅÔÔ¤:«î¹ªªj?dõÅXæiu­_•™¸¬mÛåG'ù,¨@kƒ b—Ó`žp‡ÕˆX«Ç*$+£±ŠÓN'ØWj .CU$TmRÕøÿO«ªJzVó b¹ºw××*‘²ŠÍV]Æ~-~‹ÐIë4aÝVÝb½ V ²B|å<ª€ˆB-%TªC†€AÕõRÕÃÿx±ª[²Ú VEÍ +-u<±ê¯¬näT@©7«ÑôƒÄ«6ÕàT ¯‚a¥íö?Ða Öb- Ym~^þ¶~‡òO©ÓKò¦zeªä_«Žî?ϳj ¬!´êÙW VÛ`X’sbOVAí»Ôúëý7Ð- +-kj`]\ A$«’£z2@‚P“zê#óÎTWR5(«PV;_U­ºYZ@®ä‚®ú¯ +-dŒ‘·êÅji @WIí{[7“ðH¾ºý«å~uƒX÷kü ªëg]rþòú"4pRóg’¨Ú ¨J¡ÿ Âê΢"@¯oU; ­®Ûj÷žUË~LSkÇr ꯖÄ-¤‰Õ'¬«Kd…›ÚY9 ðÕ¦T¢+9ÙHЪŒ^Õ6=ƒ²šÚ¬ ±¬^âY­iÀRÿÁÚצDqZ ÇÓ‚ÿ }uëWy Æb2¬ PP5²¬Á`>»h’QƒÕ“ƒªåðmSÕ/c5V'™*8VKë‚FVDúŸƒußÁn F“«c m¿JÌ¡Y±fkhc á%BÏ6©Y0)=–ª¯Så諸ÌjVM.@¡»ZMÊ*O °x•j¢ ¦"q¾÷äÕìêÕ5¾šDˆ•4±‚ÈÊø&QñŒø´ËS9uUGªž=Uk¬z²:ãThZÝT®ÄÞ¦d5wVŸVðP€‚°XÇA_F7²žðYÇÒ>·BjP=V¤2ÕK®š„ÕAYu®Í0­ú«„B ( +-ïìV®âU¿:ânÿÕAÆ…ìX§MÐÔ±r…€mý,‘]©‘G5‘«RXUVÝiÕº®ŠÂUG¹â +-«ˆ£Uoì‚`zM¶»j+¬E¬%ÇjLVZææÇ>(BMå]ª‡87UM»ªR«Z{³:Œ ò\ÃÀ€®Ò»ÔWˆ°²÷@ì躌m+ÖšÀÀ—X¿²²NjG$Ui©¶Û?Lÿ󛪳:ûª[V@ã¨Õq/HVz°>R²Ü`vÖz‡É¯­Ý—÷r©ÁYòoäþªz€®ª€$ú?\Žs–³ºAt€52bÕVš@Ð^Úò˜Cé +-€5¨>©Zæ©6öc•¿³*gðX«)9p(AJOD„ubø@é"¨ªœ2Óåb#þï_Iý\2ÕYC:­êGÿ¤ÿŸWO ñ7¬æûVSþÀqÔŽ£†õ9üEК–<\N.2êÁ“¼¦zÔV]ÜXÁ…S°]ìij®@»ŸÆ€ãý†ŸÔxÿJJ¥†[ÐÈhRÅŽªþç¼Q ;©2á5ØQ·ãaû¤Ì^·JP‚ì6¼·Kîò0Êî [‹Ÿ[ ö[n~Ø{9<㩬çáÔ kRðzyÊ<[g|ºªzýÝÍ1œðÝ@-ü[næz™ÔjR‰Þ¸ï¹WgBg\ŸÇz`ŽñNã8ñ”Ðìó2¹Á¥ ÎM=ÞŠè¿eEÒÎ?*æý§Å‚.ªEëï5$¶áÏÝY›v°&O˜åWËJ]½Öonon4w<š¡k¾œ¥öf¢vø¹ÛʃýÇÒl /G؃¯–OŒ!|YÖàdÌÚ$ÊÔ*Ž§ M‘àOÈõÐ’a[`×fÛÿâü^½,[Ðeqï/s¡hE3–·¤b4SÆ©1±íq[ð“4¦FZ`X–Ù·`µP" €H} mÿ ~HBJÖƒ‚Pmå€ ^“Jý@Ûþ9…ùÚÖHþg"¢œT"©T0à_ìmàiä,H^û_œÃüÔ‰ž½ë tÊçp€iüŽÒÃ$h‘×þ7|·]ä™ÒÙìýn¢œ ®þ»ÝlûmŒ%› G*({¿»(›'…aþù^4íq]ŽUUç}¾ïˆeˆÓ”É×냢š(›DÂáÈ:KÍ··€€Á “.®K{ø“iB<…Ç`YÚãûnDç0æ÷Þ €GÆYˆ”jß\PG>†Éû:!´»¶zÛ,TZ‡»'·ƒËßþ(ÚD*5"\˜/6cU=ão*©ë*xq˜¿¯'"¨‚LË|aÆ×/ç “VÄÀëû5Á +-ˆòàxlþaÆ÷-‘FV¤vYUIRe„Ô¨“‰7 .«ºì€Hád¢$†aBŒc 1Aúl5…¬>d@£‚‹—Þ:Z@ƒ;põDôîdtõ£Yˆ¶@tF_uWÓ¤ãÕ—=[ÅœÕ —–•"5«Þ¼‚`@8ü¶[GþÀ•ßïc´Z=®nº­«ó5 ¾X؉wˆ ×Ö󰾫Ü<Z(lv•y„¡Ú¦Ýª(¯`¸'ÑYò£Uu—U9óí +-k«¢ÒY¼:d\a^²fÚËU4?}Õ~Ã+‚­¢g5¤#žÅmü=V…/K>ò +-"º6žVÇ‘«8Óœ««Ö’°³½x ÄcÒW_¹ÍU¨]ýI»š g÷9D[5­K} è¸]¡¬W8™ä[\å9-âê6 t¼äª!q•)2fWá-]¥çÕ%ˆ¢rwuÜ`ïWVÏ*Ĺ‚†§"«ñøƒ]J´Ên4 ÓÀ¾³Þ««c!¸ª+WïËý”Õ ûÕ!4;jl±Ê¯•Rc@czËÙcÏUÕãRWy; ÄQ,¿ñUÿ½Jb JC³\£C[½šÖ:RIyOa­2 zZíw(®Òf[Wƒáµõ[ 68¢_Ý_ NZ°4„SÀ+XS2WÅb«¨N¬êÌåY ²×ÒDÉ^ ès­¶ƒ6u–JÂîí¶@žîüªœ{x'XïÅ´svÄÛ­²NWPa@Ô«VFÅÕ„ëD;áék&˯ðjwü«ÉÀh5±! +-n0W¸²¾ˆ[Õw¸?pZå7 mn3{½Ð§YHÕƒ“²àªZ7ìøãªØ\í*WÛZ •h¬«ë’^µó4‘yÊŠ*0°Ÿt@±€’ê|ïš+Ô‡dÚÕ'­N¹UØs!ìØÄX  î1NBz¿jծ .­T¸W+åXEèžššè×+#ØꜬŠÉ ˆœÓrõ‰ì»Y ï«™»ê²ebÈ Ž¬Òöª*ò«IÿMœŠÓ6„¨Ün•-4&«í¾›íZm}hB—a°Œþ*ƒUöûÍNƒ‘óÂ&3O¸‚“Ê«F(§w»‚w¯åBVϾçæj°ð•²ÀºiÒâéªø*ZhaWû +-Í]ÅHÀµ¤]jU!"p¤m%˜U0c5|Oë²*ôûê¸Úa¸®ZO®WMƒ)Pì㮶a O^ rv5\ƒ¯Ä+âs¤4€fÀºJåËê¢ +-h‰6C}8²Õ³põˆõgã«êc ¯ÖÑu6²XJ«¥@_Ȫô³Žt«ÆfÕiN@fj‹wxÐ>¥Õˆ@Úu­ÊrGÜG¾ü«ŽvU= $NW¯²:H`eÌ« ƵCÉ/ ¯Gµª«O#2 ±W@ÕeµY¬^.ßjŸ±kÒê¬ÁU¿•¶@æxæ_åÐU  ôḧrP<¬y ‘5˜2DËãï4µúg «Ô· +-Õok]0# R|x5­N Ç[" \Lš^÷’_»ª„³@åŠðñ…ÆŽÀŠ§,7ЪFUQl ËH«w˜¯:«±fÝc .Þª²bh5~âá2 +-ÊW‹t9Z˜³¬¡•s±6¨ `¦³À¢¨=öªó zˆyXÍ䬒̪Ê’Õ§u½AZµtüï·•RD…¯ºÑ—Ç@ĉpÎd Ó¾zB +=ωÃÐ˯"ÒAòeµŒ}¬~™u)@[!Œ£ž«ëZF·ª^ôUDèª>…2ÐRÞ«°±ÂªCºpëÇë…A +-[.ÑXŒ#è œ­N)«šhp]áu\e5VÉ„¬&[á]pô’Ža÷—^çÅY ßHšWMw°.†µªÙÅ• +-Úce[ Û~Ž£€©ã:¬f¸à0¬€u)Å: ÝPaõ!ÊÍäh«ß——AWÅñGØŠ«ßù*ñ(¬” „ káº%`fTya¬t¾´p8¬âZ•n-Ôª#«†$|À·­¶E7÷Wac @´ÀÜK ”½*ŒHD>7P-¬’‹½šz•„="ïCÐItèðvàôZݵB¤¬~ +-˜Xm…V7{³ZºóÅñ4OÒW*v^UãÖuaMRŽuÇoüž#a§±Öèë”ÎYW«:!@(wUBYÅŸuƶzV•Îj„HW|€J1 jV/Åõ9]õŠJ] ã*ñƒµ^†e1ˆu'Š!ÎÊU&¨-gU»æî„Vq†P@ÛÉËá{«­òãÀWë*b»Ú䮊 T|µW¯~a½Q| SHn +{O±P¨èÀ©Ð­ƒ]e•Ó!hÕç[V§ÐRº‚ÚÇj'( ŠÓw˜ß”̯2¾«°/ªWy•H ÖáÂZÝf×ë$> î‚À‡Ä¾Ë*rõÐê8ñÒlu•U1÷}5/ð*‚]­`#‰6_E¢ìt‡õO¬*deß‹ÅPÅ2Au=;tz6W-xX]!L­–Ö ²Ú) öœ®P†d¬6øz$õE˽DÈ_uÚÑÈ@;uUÌ]íV:aÍ!V3Q”õBOüÍ#vàÔèáÇÇ2r‘Õ‰VÕU«ò±»‰sÕÍY%-¼UÅ»€øÉÔê^ôF¿«Ï[ òBñêfFÂÅ4Ðݳ’óªLXM>)¹5îƨ»¤‘½ƒÓ%§3«Fað„VÉd5¥óä­¤, Óê‘Õ˜ù›œÕ‹jÁ«{h?«Àa +²DÖ7ÑXŠ…£ OÅâ"?Õ#û:«ò=ã\«Ì„V4Æü1«QVué¹|u“†W5›ŒÀêöUšj hXÿÿ@mÁ @Îᙹ¤¢h„ …ŽÎ#‚ +-’‰á&984U¡úN‰ £¤7—fá®R¡(°÷[†F L·¥D… !ã·Qd ½w×iHQ>ÔÐ>ïÍ,™ÇïmíBIlšh Ò–aH®ï±¨F¹xPDa”Ui ·UU’"Réa½¹‹¢Λo„ñ@Þû¶ÄÅÒž1ŒÁÚûsâTà÷®SV×Ývož(ŒÂÞPÂÇïí$лýÎŒÞ}_P`œ"_ÏUL×¥rÇ»Îg-Å°ù÷Mè{‚ÂÞ9¯Œ1L9ÙÖ^­Êy`"l¡)”ÊceŠSe—a´ƒ'¨í‚ ‚§`(² ÁH†Qƒ2ÈC @D|dáЀüÙ?\Á[g×mOáê °À”WÁW£sð2³ ³Y`‡q0£Õ*³zÚ‘XŽÄ€q]wpÕ%8å*WG¹­>¨ŽtµçÌ‚¶+†‹Î¦@^@žW@„ü +-#°åj1Æ^ ìp¹ZGY@¦™L'®Ú=Øù+á*„Œ"xѨaËF®Ê çL ýÄB—ÈÝ÷ªùÝôÒ@‚I¹˜v„>¼ÂÃÕAàT£ÖOÒ«4Ánd>ÂJÔꟗ„~ŒÞ–w‰Fm@ÎV@ÖôŸ«ÐS ¢-$WÕnÕgv«¨@x°@—Ìh•—;]@±á꓇½:º ¤®‚ààƒë*DˆÑm.ÍA«„d -1±cuÇh Àš\ÕNz˜@ÅíVmp1 „ P.Z…®)…n‹¿j@ïj` [¬èÑ)`cÊU±ÂÑü³,(¡MI¯ª »‡Ü{Vg‘ÕW,û~kîÑ’Î* ¹ø¢×»^®>œ@Ëã‚®–¥YÈò+Ô!£Å€ê;Õ´]A¯ðÝ€¤P£‹a sÕ¸i¤ +-®>T ºÌÂTÈ×b´Šø Ý‘W»‚SÙ`ôª¼FW¿ö¿ +-pÿ·P +-}…²:!-y7«*¿BßÀ­;Rqb0ßÚd¸Ô9xEsß(k1 ¶@ø€ª0Ð^A|…äX²à•«’.n æi‰a¹Ú«Ä4ðœ0ÓÕ«þUÖVéNÒêø‚WhûÖÉà*Èdõ.ŒŽ6Aöj-C¸zÖ ÙœÔÕÝfáç'Õ®ÂÄòÜ›iÕÀWhdJH‰s¬¸ +-¸ +-º¾®k^!^eC­P JÊÿ)Ò+aŒ‹-ˬ&™–™\mp\\Õ'¢c¿ãñü£®Si Ý=ЀÚÊÙke\…xoÆY`ò‰uu|ë§@ÚUË8…J£§ˆdèE"6À€>=ðÁgIhI‡'ز!«3«ÊKW ³ ‡‰«© Ä+ì$!ýªÜ3‹‰Å +-(Àqܲ0„]¤UKï +-Eüç+€¼­\õÁüš3 éö}°Ó}«òò’1$€ŒÖ¯jòRøzäÂ×7ÕWȲÝ\äD­®N" È¥ ›Ì„Úà6³ ýVÕ3Æ&X  b_µcðêüOí­ûPÑ–·n AZmº½°t•«Y˜´@Fåê^à«©Ÿv^%j«>¨€(xÝ]^Á)ƒüü¿uäé×Ì"P^2¦@rüü_½CEó*Ü°Uò Yåv–Ø<ð'ý†hµîÙ€¨'­³8èªNni,s!¿ê3+ÖÕ^š¶J’û ¨_Iéiu¨€W¸lãj Ï©˜…±®TR[Á£Yð¶@i#¹j™uWõ³æÕó:jÚk}oUœý=ðöf¾®Nq«gëê²Ø,|xpUC®Jý*:»Ú@WOÛÏŽÅ[çc³-|ЬJ[Ðð²G«±$P­Ž5TZ=Ì`7¶Ž«m`kruÓ°«朗ÉÕ"xuÍZc¬'&P50ÈÙ?y©¡žGn8å苾ì../Îoç"$ ah¸i5ňnϦ6óÉû‡ =‹,5¦æýZ,ϼ=M ôwžô؇~ÿ®ÌõQŒ†é¿uµ—v˜M¾ò;Z†Kµâ6Úe°“ºþçV-ؤ+ë“Qáš½;ÔÇÚÆìÝá)l úžRµõ£œœP?&G©ž™¤n’ôŽt¿“Xrx]!£\O‘ˆà„«îuc“1ýÄRˆQœÁÅi¦p{†är©ŸYEˆ ‚¨Bìr V<å¼¼@ &I¢( +-! 1€€b>œÚ^ý‘mMóa|hnðàkvq€|l§X:Íu_ðWÀ¬ +-Éüë)1³áÕL!„ŸYÝV3W…¼’@¥ÒV¥”&½Š.<¤]\!=W}ÝÖ¥ô¿®c¨AoÆ):¼j"Œþ«äª›XHÕtIX)îÆÐM¯¾»„ayJw;«Ài›‚×íù‚…— +ºW/Úr3[ÝB”…—Lh5HÔÎæÝÕá¡i ¯¾÷  Ö°EÏûmçªõÙ¿Î!¨†˜!®œL]aÎI_çU¼Ýc"®ž€ y¦ˆÕz½ŠWÙø¨C7Ȩ GPj5Z +-C2Ÿ}õj¿Ü9Wƒo—ì/_hŇÑ]­ájãU^…êÔ%ëåUDhhUùHN:X«Nfõ%hôJœŸ-Wðp?²Ù¾ÕÝ ~¿÷ËŒo¥^!0Ä´`VsÂíí.§ íºpZ3Þš«v[î`fF¥Ü«r9´TöÝ1^«Hä±Z­=–%®Á‰¦ÏŠûO‚öjÚÎ7 ãÔq«cÈB â¾Phÿ:ˆ{§2£Ž\íÆNU^½øŸØJ Ø=Ëmk‘â:ùi‘b=‡N~þÒ|¬™ØwîUq\¦>j•Yï¬ÞÈuH=û¢] ðEs9du+±èÇ G¹úª-f&:xõ«þ:AQ`ǃUéáAά¢Â€< +-‰Ž¸ªSágAõêÏÍþ-à*€6b°Öˆ-$ì²À`÷ƒê*ùUάjÄ-a¹jü•£WñSU Ç[ª>î$”㪧–,¯º²&PúÒÿºšg¯öؼŒw ÈD¸WI¸QŸÀrÕO&ÐßrùÕ¡2Æ5ÕófV«`@Õ5ûõ<ä*÷ÐxõóËB˜`W ôV m*}4û»I\õ¬ëÕH}ñh‹Ï­F`'¸Ê&ÈÕ ¡QûjV±7¢î{ÔsĮ۽>ËÕNÃ^%ìË‚ ¦-äôUÑÂB[’Ö~ý- ee Ha]lÃ]›H°•ºÚ\‡R´WÅ5lÙáü+ `@'Ýrõå;!̱s±,¨ÀKf WÕg×. d»FmÎÕ3À^¥Wo +-'? ݲKî—Aݪ>+Ð\\[-=뇵I8?v¦A’ü +-Š [“ˆ¬Ž« `/¯Ž¸KR®’M§«NÃ`û‘Ô¸¸ŽåWPLW«Á}¯¶Wé\iNP Œš4®#ð’«]I“«È•…¤e!j€"V ³«¥­RÎIQ\@F˜U€¿xç*qب 4tÍM[¤ëÕÙ_M[ô°|+i³:×aÐZ\—Ž\•ûj\{•T·#«;_ ÃU¤Ó±Ë±D-‚Ì(`På ð;o±ãBŽäâ`»§{§YXU”%$d –·={‰,÷%Ðœ—ÑøC};AOYœÛ%ˆ½””tî:ÅÙ*³wý½¨Äþõdb€CUp7Úă9mE’ª Ž‘u Ó·ÑµCAñv>‡ÇZE 9”.^;Æ\4nRÃÄtUUo- Ê Žôqõx‹âê«ôÛœÝêCÚºÂ/kžw*3Á¿Ž2 ÐRXëê5éRÀåãVUH Û[îµZõTƒ +-ƒš ®„kI(5L‡Š«êg„,t$ƒ“äV©’,dz¡ˆ>4Á½'Á­.«Czz;:lµý芎«nõ`þl‘ÊIh2> Hq›¼Èuð2 ÁÚ6é”붞à \Ž n·ª & e7W‹Ö}h4Xp!Áí[Csª¼¬ž ¨Ž«Ð¦HQ…[­’@ŸµUÇN! ­róèÕ» +-ØIqµCt«ixu  ´´Rç:þlPa¸Zl!hÏU4¡:L…[%¯B>“…´9Òj®.ˆJЪ Pò€~®b-Ýr¸U†2¸ð"Oµ%¿®½èb´ºŸ®Û‚…â]\:Š4"Ю[}[KþxµÕ (j@Ôƒý+$6«œ W½ˆrÁ­>“Ú0zõ^dÑ b’£UY®¾?ÅÁ­Òþ%Y˜ïU Š\¥åŒ¡U~ (5[≭^1ÕÁ­ÎvbH±BšÄ«škŠ­¼Y’t_þË`YdZÝñ)eÉåÜ*ÞÆFœ,Ãõ* )|¤ý€Á‚&¡UWcGoÒH¿ÿXà±Àù×I’7I èf‰|˜Ö€€è+l­bØV#P5ÑÜj‚"J¨^¥3‘«ØsÝ~ 8|‰Vwq•]‡Aª€èVGòÇÂÔ"ЋWk;sõ›áyçфח¹î*,y@!¹jGJ‚°±P®t‰@l•Î^u,|ù‡&Ó`¡cp-YæjÓ[Ýꃤ%Ì5øt^ÕÒõ ÁDµÌÐd@¯]]¥BÐ'PDÙ!ØzuN¢"¥ y*sÕ‚ZeåVeI 5x¼ +-p¢øs-QΌ밂†vW#[“„ -¸¿Ž¶\¯²½°~^‡Ì*)<Èu°‘ÑjŽ¦ê–³AÉB½jr<«Ÿ¾1×™‚…ä­æ¨:¸ $ÊØêMdà‰ˆW3W¥ °wšÁWhq_4 Ó`a\Å£^œÜª]ð¯Külq«f<äê›Y]Ô€X"sÕìÔ5Ø*I7zkm•mÓ^å€5äªý‡¹î€Vƒ<›ÕFa«^í-8­gÓ7^ÍÑ«-¹îìhµU„H¨VÚ*¿ÿ¯R$üJðù+XЃ« Õ ' È5xšRƒ´Rõ0ÔÊ«ì¿góÌ€H¶€PB41X7€ö÷ 蔫¯ôd!yÕ0!W÷n™V•àFš9[픪J55ø$¯î,æ½ Ï*çš0TÎ|ÊP;Z7O¬ð×Q1éí%xuˆðŠr-y •ýrõ~ÖdÁjÄ„¼ZêïŽ_‹ù…ØbÂUiªmÁ 9²U(ï?¹Jy5§9W7¡¹Î;X€Œì‹—D,bN-`N­D&*ÖZ‘'€W6 h,ba²ˆ´Œ‚ –^ã^µUG¯&4£Ðù.¥luÁÕ>.Ûj÷\âqd›«¾nüÆBßô0([üØ*BWÛ“uÒE“Á„@L%ÑÖtµíÕ\È4½L8ÇÂØ­ë +-¶:æj ™¸º<c®ú:vÄà¬.\ýÇDÞ!•×µU\W77ëÙ늭pu'¶ŠìÁÙ› €‹½¶ŠÂÕÌ(¤µ³Ó½îëF^†ë—ìÝ£ ˜àXëÎR´Õø®n-ߺÃUûÄŽ,¼ôj¯­©¹Ê)°À1z{4°Ø*ÉUU—Tûº•ÁÆ‚.ȯ:ï4áE]7ˆmɦ«F•¨c¥©# t2®,ïPXP뺃Ø*‚«Ý—…<’òjfú“Í%žý)dsˆsÙ€f7 Þ )0¿ÂŸy±[Åïê¼2¿l'å¨s-ÀWWÌLm ¥?°ÀšÄl•çª0L da ¶ªöº +-W‰6qa¡’¹Í‹o`«tWš‰«Û÷lGdaÑ%>Í«‡u•¹Ü€}`á; ƒÊ¾M8\UÙ×I²X¨²[ͦÅýò¼:G•¯tV)÷üg]‡íª¦‘•@r¶VÜf&û¢¼¡!,ìj«Âˆ«RO4YÀìª?õjžË¹ˆ° ]×í}WŸžy±V·o¡}Uy«x*Ÿ‡ßY¥NXô¸ZÚŠ,¬D¯v»ªµä"¯,Pþ ':Âã[]EY€;ƒ±Ð•±ðß{UJ”+7 JÚW}6GSˆÌGʬª£àh˜ ²@º„ÕŠ‰ÝjŸ”“On@TéD:(,,71®ÖÖ¬!C6Y«4SHAcíÕ´drx@¤U§+2 °®ªcʸbpÛ4Â8’w£ç 47é­Úo@[iKB¶Õ3ÇUpnâª}¯ó&kUMG ­"·zMó‰Q±؜ՄÆÖÖUbM5ò²‘æ’$` +-iϨ"ˆƒh`Ñ‘0 ‘ ÈAÚ¿V8¾ñÑ\§tËr•Â©€‚0ÆŒ'P!J´ +-ÝkI̪¾·2XPXh»®Æ3SìÊYÜýW稸 Ô‘ÿ?QC(ƒhÁ HÞ¦paÁâÆUŠ& ²ƒ0VjIÊ T#q»ÕX$åðmrV϶ +-Ìy!R90Æu«Ö”(Û´s‚·/Á›kÆ5i»è’.™–ò*«;$(n@+ øè!ß®…«ÓÓçܪDq¡©Jºî¼YŸ=DKW§6Ó­F Û„1Þ¯3·JÃŽlVAèÂb«à®:=í”m˜@MåjBRv#ùE¶UçMÌD÷ëZ¹UîbPIððqQnñ߀܊ ž8|5üD²Õ1ÈÂQÒ +-sÕÔPýzd®¦^:^ÉàUaݪ•ºD$äجv\$а`Ò\÷šwušŠý¼jĪ—Èfµ´³%d@h6WûC_L ®J—˜íVÁ ¼:q~Ås4«¤ÙÂèÍÜ€D¶úµÊV}ÄUœÏ%ž"îìÀת’…†+ûž•| %`P€„æ §fZ<÷”V +-endstream endobj 21 0 obj <>stream +-'0ÐùÃw[CÆ7H§±‚§û#1>d«í78ÀÈ_Ùoù¢h$ОOì¿h^_-¯„© ïÛñJÞßüªiv`BíÜ~¼kÏÛC솘¤[ÓC!ý‚;”Ø-g%ÓðX¬MÛrœ±Éí\‚]üÅo"OýÁ€G R_Ðô½Ö?ŽÃÊú×ÚˆI„;ÞIeàî4û3ú´Øoýq8`·ÍÞšº?KYêïgêZ@Ô‚~—4ø[Õ£=^çÄã"&ñ-¿lœùA +-øˆ%ö ÒQsìÔua}>åójo0…”ïÒ‹ÀQ +-Э¾2ŽÜñŒóÐöÇziK4þ…­%æÏ6+¶ƒƒ%oЖn“ug)@úTÄ ^¿;¸º¡Xýø‡ TòbUØ1àV…pŸýø_øcßÄöà³ãêqÀ8àu?§ƒN3•{]ðKN§7ã<»çXî¸nqùQ¿ûÇl ¤•Ý‰9èbn‚UýÌ}ÌóÐã;ª³ÃCQÚ ’â…Qa,ûÕ·Æóô-õ¿jC‡°J}Yš5(¡êS¸šæeûš½Æí8³9‡`ØLŽvÝ€WW 'é_\êÈwôv>‰k²@[ß{ÊgR—?¾q#®%§JöʶK^ô‡m:®Uñ>0ð„‡AòÖ›¥ÓÇ»zwÈŸîÍÅj°æ9Àcú…I7´Ü/Hb{G·Ú—fLŽòÃÓì!iÏàæÄ$4m"1¡êQ,gÃq¡ñŠHÝ™­ã,ŠÈ<32VéáÃw(~rý„-ùeVP<¬/ºáÁ ~Ç›9J+( ö=Îoüàâøˆ^SŸñøxpGfK¬¿l…Ì”IëvUªI`ÚDÛ‡Â;J¨ëfp²Y $¦/S>xÉ×E|½ë‡G…k7î ›ãœ¯È±úZüÜû&6jc‰0T.×"÷ ÔrdºãxX—ñ2ê&NßÜbàZN,a=‡ìîÊû:Ñø ¤ÃNïOœjûå&®Ñ(Ò˱·¡hë¹Éw¿'¢ÜKÀ0‚$¢­W³%ü€ü =ˆíÍ´•¤òÙá3WRõt@tLë}u7[ÜŸŠ_hSxßYã&Ÿåˆ笖†Øª{~C³2¥Þ)aœúš80“%’ÊÊSØ×pb<ɈT2‹Yˆæ.¥%8Ñ1jGçS“lìÙ„n›\ÇùPæÃå±Ú;ˆ#|”ÖAmt´…(ê©\K.έK‘EÑÞˆ0tAº.ïUšŽˆö«EiźŒ£t§*ÀLÿhïùÛ>X­3â1æµ¹wFûþnm]¶µµ |À醶L¨Ì·^ kÇ·ØÃeÀðkKš-£WûÑþ[¼¼pòûëh´×ç¾’Pð`ÎIjrnœþrýV …XŸ}mß­+² 1)`Û ”¨+¿¶ï°×î—Ž1áÀcŸ`°†Mã£yðu"ïxŒ5)äL7rH{X@ç›L-’ì¸ø­¯~óAÔ+ˆˆ|i×>ò ¿ù÷Kðiâ˦|Ö<žqw´…¾"§;^çâaX5Xr]ŽÏî8έ˸¯nâ˜Jõ/ÿŽ?|­wMÌkk?ºJ&˜;kGõ~Y´ËE~%ýw/€ãÕ:1éW¬O`›ö .ÇÐ`£@ íÓWøËGW9i8üüøø!°­ö;N<Øý³@íþô@øÉ\wk¡_齄‚ÝÖŠ‡+äaŽ Îdáiq2(ûÐÓdípFu_>|âx‡·Vh`~6!³HÜh´/và–ì|ÿIkÇšõˆ%Ÿ‡UÚ¢?r;æcù,®~Ëøhî¯{<ãÍ3™…ì±Iç¡Zr%†äDÂì¹I“;Ž¹±,¡€¹ú)ÓÛßó÷8!ZåEsSJ*ëÔ_viÿ´Ò7ÿ*Ûd»Ú0 À_²ê±õk'×¼ëºS£¤÷GÐÔÃû’(Ÿ\Y¡Ç¡sÃýê» YTåhœÎ<ƒ_R&ýªÕ(2¬û/mbg‡G$…ZC…Ћì[®$÷òYsPe…*ðÀHÒcë'‹Î˜nä¨Ú,_E™´?“£ˆ§cÔâú±nQ‰¦¯Î>û@òõH«=Õdo!åû÷æß:ÅÂa'÷LvÕ°×3Yq|EÞ¥îcxDMj@²WÁÀVdû«ƒx$²‰T÷üý-ɬWýaäjûUøª‡¨ý-w#>~?š[ÒW€œW˜6È–ûÎ~·p¥H?&Vr¿Iy¸óI¬°3ÙàM¥ò›ìE—wÿЪ.ÂÅÈOO$ »+´¿žÒïñ‰‚ÌĆ߬C´©ÿ;S”ÏÊâ•[Ñ`Ø#-±/M6e]çh›` §%Î1Îò´>G½ÛaC*}¦´M §~Ô¨~¬ïéÇš ùRD¾ +-g [,‡”oBÂh²Ê £°û{¤ÆîZjlnÇç:l†:&ÅòÚeœ´¤Xwuçöîà0øþ¯ƒã¸á»·G¥5sgí9m«ï"íßÚâŒö4 «|ñ§ž<ô»©ýnCAunÕæ K‰Šd·C¸47WWÐïþábu_Pé1IÊÔ~I˜xœ×ô _bcõ“0céÒîGU—ûŠîŸXÕúW?Øgêʨ¢í;ü÷±µxÂôÑ"x±$h߸/îØÔu‡Ñ )°ìCéÖ™]|ó¡ó´6”lìÆÊmS+ßäp¥ŠHùvžµ›«dÙ„ ˆ8"ê°‚öt>v5ÅhI‹" " ‹Âð!{Jr°…ÜÔYܵug˜÷îàAÂ*…ïf\±Ä52ûcøl«?xÕÊVcZT½%»Òîúö!ŸdöÂDðùSz÷hM?óõ~kǺœdŠ¤z~GHf-?;L¼ïð¿û^Î’úcCa„¿µœú)tûÓ‡w+ †]ó@[A*d¬µw\Ó-–€“Y—l ·<äÞ“O;Ùz@Bœê÷Žà|ôm;Îå(H¾†9h‰}7Zˆ®GŸÐ/wõºÌF®Nl0x§)߸;äžpánqœ[åç +-ìSz@+¿æ"€}œóAXÂü*æW’¨À"¾üj€¸'ëê&¾ywp'ýÝó·¥Lc½Ô»¶ûY–ªd ¸?"ð!qÓTÍ~ŽìƒþÀ]_®p·qüH?¥v¿þ¥§«§zqß +-µŽÅTb]PG;ÍécFÛÚ&΃ŠÝ×Þm=#À|ìXê-ÀϘ뎴~€‹‰åêYKE-Ô†ZäñKîçóïB<«{ë%4Ù{ì–[°‰ï"´ xÐ?xY Ð^(·êkg&t_½¸O€ÿ}O²ŒôYÕqm2¸1ec4½²ßúœ%ÙبÕd¸ì°é›G&áõ÷è¸[|ƒÍ¯zI<Õ[Pzzå‰I†ª6áÔ5¼Ž> ¯Ñ®½v ª³k¸ßÂ)»öûÃ÷pÑÜ6Pgg#ùÀ—þÈsg=gt¡ýd=Ù6þpÜáù!ý’Ùc)¢‡ñ~DznŠ8Sftb¿ò!¢©#US}ëÝ?Ž¦ïñ®­Ù<.Y¨ÕÍ€ +-`g~£þe+õsÎǽÿ4¼ÖÔî­RÚò”UÞÄÙ€V5/7Õ=îbµ¸u>ã>;2‘tvGÛÚ)ö5¾c0}¦ g<Ÿ{÷:nE#Xc¡¦Oàh´îÃäOÓóc«z{\±‡ä7Dø­Œý°ºpl²{M'‡õ÷}—ŸpÁç½ÖÝNÐmZ¤Š_¶ÜíPˆ*”]÷éw ÜOOrÓÒÞA0ÑÚuÙmC}¬§ÜSvuå»ù©ø›@-¿¥„í†ÿ ìÀ­OÈ>-<÷½! a–ÿUõöG.¯°X„Åʵîõ³O?ù9Á +-­Aj,dizg¹®³*Ñ$›n·y­Ã,gª…Önøæß kŠ…§ÇJã^R{ê“€¹£-,cåWb"°Ø«¦ƒc%,+uÏDOx¾;xŸ0„û#ýÙŠœ}Þ\’äÀNz[[K1‡:çÑXvéMÏ~Êèñ±âOÎé*…]–¬K=½ +-Õÿô“ÌYö3õ늈Åìøº¦“ßÉ}÷¼ñBAŠmZͨ…$Ôhƒ¶"ó˜„ôû”<¹SG‚UÙUR]õ¼êÙ +-ÕO’¹ÕWÇpVö)Bâ pöá}£ó ¯–X ¬é<ÙÇlûJ:>—gƒl}Œ¦9^½VWßGù8• +-—]‚²÷_.ÉV%’IÁÚf-‚²¸³{_»ìj¸aè`|)‚+èVÍ7µŠ‚ìj€ÿ·$¡Þ·o§ýÙ­ æß–×ûÃ$—x+â–´[lüJü‰uYòЊ2¥wGÖãnwÇÐðtÖr«÷ãÝä´cÜ–½ÉçÅqêÝ–0€ù?‚µu üþf_÷‹ê÷è +-ü„[ƒ´Miá19 Tî&l˜ŽJʱïla;mrÒÄ…Ù­¢Ï!Rä™V0.P}ÚÜñ‘úÄ%×Ó\(–ù¦N5|ä·c;Ñ×\;ÊåºÖ’­¬I¾¡Ûû’¯‘ÅÇþæß”Àç‡zÕi~H_îÛ<½*_DÂ\_TË«²[(%P%àÏÿYÚŸçž¿µÄ®ZÕ/8d7Øêܪ°Ûǹ³® /4/€[Òþݪ0GȦûÍz ÄcëÁÛãŽül¿’]0ÑXD&R+¿M€ùPåIrz¼?S« úËÝúa+ê–»@Ö³¾‡Pæ(Ãùq¡ìRAðÇU·ú0„Ü-€ÊÃ&/ê”âúÎRó'˪ñõŠ{príx È6ÝÈ;iµÏÛ¥?£‹Àj½Ã¹„“M@_0híÞiaºV©jâí¼Õ”Ö×YvFU«*ã?¦2©ú]l¦ðÎ+|w·¶þë·»Ï5^io¿‡‹Øø‰¬~i—%Ã.͸·R±Ï9‰[=jäg™¶_â ?)RšV(êªc§üÖâIŽ¼Â7N;|¦;ƒß×M/ñe Ä`ðÆ~uj¢ÄVg=`:ʇ4`KƾÒû´C”ºÆ+‰(>ªmÝ¡É;ôMc¥>e@EXÜ’õˆO]_ìÄöòÌ¥6°’cÔS‘ð_°ãEX½>P ‡æ£aíªµ½A›ìR¾«ñU8‡“­S[§z~7¡5OUÿ¢Šd·i€Š‚ è"u:Q™i1?èÓ «Àšÿ‘]4÷ª3Ú= ÎæÎúÎ$W nIÅÆ"`/hÌð1Û½•ŠIK#=ÚnaòKs¿€Zùq¤œúTx8 ÚÅd“ç~gì Eƒù›³ßDÒ8Wpâô9À"Õ a2þ‡ÕZ³$YYJéÿÿ¿ïzKI<6ß]bxz{PL·XÙĬ¤áæÅ¡AÌÇJÍR.ªª¦ŽRI›Çp€”Ââ^¦^2ž¨êòí—ɺš*:…MŠµ¬/ßü{–"§–UV/¨¡yEûçëb"+ëê!×–V‡)$-™ÒÖUÑÎFÝשP¶8Y³’Úy-HÐÝŽœŸ¨_À­àUK%”I€ü€tD$\›ùîÕcÈp˜uUµÊ'Ùßœ‡HÊ +-­‡ÏÖ°«+8óˆÀn+ÀŒv¸ÙOW0*¨¤a!! ³«:5ûm$Tül ¿º†Á©ZL?“DNˆ0oþTcn£àÖ×0øK—-xv1è|öæ¯Å& þ’Ê剅 +-RL› +-!åò +-&ܪºi9‰˜ÂªèG‡÷oÐ NÑÓÔ×0¯X8Ÿhf~û~mO×`.a×W×.3¦”z¸ ’Š&°Žv6ï5 ÁCJlcWÞýñ TU——Z›%“&™™N0/y¡yÍÐñï]k§²B×Ù¶¿ÅÅÂ?õÿ° $TôáÃ’QqG à\„Ÿ,ý];Ó•ËClìqƒï +-j)&Þüë,·&Çéj /ÈSΖïNãÝ€c0‡!ä‘Ç¢üæÑ€Upð0ˆäE[O@5ßücìVCLË?Ë\¦éÎc™–Ÿo.c³sß?ÓZ:îò¬•ÑÖtü½Æne°5­ÝÖrüÓ5¶[ÓÏ7ŸéúÆKƒûsþôV¦?߼dz‡;÷çßcš›þ|óùû›,Ï27=?><42s¼ygzFÀú7ŸwÌòæßcz‹`(È+Ç}å™ÎâÉñó=ßä4@2Òöÿxð%Pd´´dT€+÷ç›?õæ(rbʱéößü¹^!"£¦$ŸíóÍ¿Çs­•ñBrêûcyTSÒÍoþ1·Ã… SQNGÜmÌ7ÿX¦» 4H É¿ù÷¹§HëÁÑóæßi" +-[\]^\O1Ù¾¿ÇòLÐÔ×XÓ ß{+ ìK‹ê(“¨¤÷¾‚“àÀã¨(ˆ!*ø5F6˜†bT›JÃ,ˆ!„Æ€! 0 á÷°C7Ç×1EɇÎ{ÑL÷LÖ¹½ÕaªJ«ÜJ`ÓDÀ3ཿ‰aÚµ-¢ÐwÏ‚“/ +-ñu‰Žò>Ô«{oY?‚g¯–ÛZQ$ÈÀ€ôñ+ȯþ\µ^ÿe¸øÌ#"ØQ=Qw¾ÝRïÓþ~{õ>À2ù¥®nÏü¬ v`õXè曤.›œ¿¨ËÂp]£BÔS«òý½mÉÚ.Jä94¼glt½Ã@ñ´ä]JÈŠ`.c=v˜üÀx|ïÕß¿÷ôÆÑŒtø¾ÕÚ‡ôÌgØ*æ×f}eÇ÷zoÙl¯[õˆŽ®F7ʶ眹Kº’ ·ÿV +-è6@€8”¡êïäfËí÷SÆQêFóµúPqä;eC¢|à°ÆÜ÷Àí°ç÷'Ç»–¦EÁ,Øð>v5ü+Ëú >Rï?n>âßH}¬ïvéªækW+B|çž2 óÛÃ1/­h׳±Ï«on»[ ~ «À[) ê¥Tåcá¿û¸M@Æ6;»\X+¤¾Ô“|Žpà)É‹bKé +-•>•fÝ+™Ð&¨û£dm?hÕÒnùÄ7çßÍ~ äçý«уåŒû£¢Ô¿¿­í4‡ +-q‰HiGï#!;XOoÛ`îöñ¯ãÛP„Û’‚ŽîÎÀãt/¿_%¶Ìzn^‚M°=ÐE¥ÄîZÁ5àYA{ ŠþÂ~ì×ßzÏP:«¿C£¾uü7ó *ì=¾—àSípv/Bhfï]O‹^°<,.^§UL”æÃÃ!½Àj!ö/âðB ì§í#~§†x¤ß,IèóqaߺÿÒg>Ïù­c¯ ‡ÄjÕ@èõÉ÷÷i½3ÎÿÆžïÍ©¨8±¶2…ªÅan UtÒÝZuÇþ€fúe*ë$ï ¸Á}G‡?´8¸FùûÆ*꣗mùŠÉtË7²q|…ïà `u­_àêMÀ{cp‘;Au*¶Œtðßù›ZÏ'r§³âú 4 С¿¥³{íx ôógâo=˜’?u×!7À;Sgo“«IïÝl+¤oö¨àEäûB²|AüÇoCH¿áÌ¥íUt‡!9jYMÈøܸ:ÖÙ»=‘ +-c–c®c©èÒ•þµ•>çF?×ëûÙ.7 òÇv\K„»zþgó•õ/È7êˆ÷…t?îQ¶ç¯]°ð7ˆº·:ãÍe€7wÞOçÐ"0=ÇuGq{…å=±ø|ðÿäýÃÝ£­?qhðæ5s°LÁ>móÉÅíØ·Eœá/±ù"v.Ÿr&é­Š¶Çj€qÜC<þ¸æ¬wE^û@NséîüK® %“õãâÍͳ¬Ø„¿3ô&~£?ÿ}De@Í+0óqc÷·fINùó=bœ psÝ#Ô¿ÚQü Œ?„ßÁ7L쎑ŸÈçÀj¨ÅÒ8»ÕGY)v¶+òy„ÑSßTüÃ/¸‘`ØôÁD2cÀªºxÛ{‰N°¢ÖÀö_€ÿY¸¦?AÑ{~‘à´G—ú»‰aòj +-öSkË•ê{™ÀŽ{ò‰Kâ~>“9[á1z®¹ý8‡¾7ì3Mþx-Ãûk®óðZð¹ÆKŽãîë¿šX°òþù˜¤iý3Àošÿˆ>©ÞjÍrÅÏGGSü=[xš4q”HÒƒ>»R)_o'чði¾c5õÈ™ýâcöw_šãQ†gœ4ùãjÛDjÉ£#û©+·%Ï!Ø:*Øë»öÕqÅ5lmPsÂÐåù«þd›~PÜ/ÝÚ>´ãï1Qì‚éÑç·©üŸÑ@F?ôDô€ð¼òa¶|ÃI¤ó½8ã÷wŠ./6ÍÞ Ù-N’{ºiÔ4 Á¦ãZÉ¡SUe›KZCR,¹›ÀlN}-B*~ÀÄñÞÞkåôÚöÔ:É?0ˆì¡§ÉÀ»ýýŒ´©ø‡Áó¡ÍðÕ[`píß›- gúxDˆÌÇ™…ìÎâ ²rßÏ~âߧ¢ÙžvÕz¥Šâ,yTïÇcNç•/êÙP%¼ÐÊ[ÇOôZ„zW688Þ{=V+¡þGÓßØòÇdh?E¢½¾Ä¾€?÷-웃[ þ^Z¢Ï¯@ýóGì&(ðñoíiü²™/E²e–Û9³­Bï™ÆTCÃ;h‘B –<ÏègýÇÜ:`É“ê§ù5 +-ª'è² 5.AØ:Ôc(Öô(ÿFÛ{ø„÷ÇLŸEƒM—îñß ’Ž‘ +-°ï-Ñ–ÕÏ~Â}“Ûå{ˆ\¾ÂÈœM¬ ‡oUn6W8U‰ˆ©æ©mæYN-ùň6¹Š6™F›|K>&ì\o‚4¿ÀȃÓPt·z˺W‰ƒÐÕþ¯@ÿZÜšø$ùþþ„ý> ‰‘{ôQ÷pm rÁúežõAÝ…¾#øôêq|Q»Ü“ĵñ!_›Î3í¬9>pÃܵ0§–ÜíѲ¥M•X‚%?À)›*•MùúýèÄÆZ¶JŒ»õõ®öAâŸIï’ö㉉oÜèã8ÓšèÃ@ûy4„ÇAÖ¢¹Óšpç} íðí¸4•¼`O«Ø{VìSæ+Ò×Î!çsÜãÕ +-8Û$<}C( *kŽSêŠ\VORʨÓÂzŸh†/M%|¦R¸À47„çRè&ÞÀøÚ]>¥Á?èyˆò6¡q×û`\¯¾ìJh¼ŠïVÍß>Ödc›E_x¥©’‡ñÑtGÞ¨ƒ×ÑÚ:f~ÂÃYÁжº|Dñ%Ž››¸±r£$ñÇ&dTJ÷’¢ÇpÇÈã†fš¡Õ9uI¥Ħ6?ª]ÃhùÏÓgp “Ø(:“›®¢úŽT?éöS:¢ŸÈ#›Ç¾_ëªiê%šîÖ9®ïÐDÑWR`ñp¾=ñQ–¤ LÏ7øDc·ø/KF<™èv4¬5µäWNéK^³24Q·ív§ ä¿< +-ø‡nâ +-=¨`}4ÍÚ ‰ÅõÏ FU5ëʬÁ]’øxý­Û~¥ çâÏN[²­ôÝÏ…,šè£f>4óMLRúƼÙPή›§œä ‰bƳŸ¸ÛÒð‡&Ò5d“€nLÀÁê^n4–ïÅ®=°äsàIj-Û…QEòO€ ê;ÍÇ;8Âðë2fÝ¿ƒ7h>^>NÝ_^Ë–¿—¾]ê㥴\;¡\Ñç•4 uÝ:`ôb$¯pž%y‡äWߣ¤’SÏ3êæíªä>¨•1¯:h½:˜¥ +-žöõ4lÆg†²teÐNÀ’?¡'òä ˜:Ž³Ðeüˆ€†:ˆÿý_&»G55§ÎÖZ$ÿV¹SþyËƦíëdž3ú ¨ÇöHF?s3¨_åû_Š šrßòê|@ã…µD²•Ú‘ÖGø:6‚&}a¦ÏY õô[)‹ÅL^¶²k›Ø‡¬vY=I´zþLiᦖœúŒk´'—‡!éèpõD>6p¯:Ž3 Ëø_N’èP’‰ ýïzûjõoòç*LÚš#3h ÛHæ‡^ýaÈjäGZï¿i_³g¸ +-h¾Ì8àÁ‹ù’}Ý‹°›¾ýªjùvóݼ©à³œ’Ä}àÁŠö¿À½/_ºôõr[7SK~Ù+K® dãòs«¦'òóâîãéQÇñÞì—â»ù” +-ÛÖÑÀ²A±ùhôUÌŽºßIk–çI%§Šý&ƒ1?ãDý@„ü=4ˆøhé«uº—‚´±ýV0uéÄÉe‡S¸Ý|~jNéÛ/µÍSè¶÷ðãiœHž HªÜ'Ðò]ì6;gÍqý‹¦…Zòª¶ t³l Xò"Ú·6ÍæZÑMpÅt'ãôU¼b`D܇ĸ&[ÚÜ&¦²Gß]>îšñšò<$óÊq›ñˆ%¿ªßøà3~eé õºö Ô´ì+}N-ìîp8_–ª°Êð°ñaÌFÆ•÷æD\¾EñåÒ}¢jºêïiH£i°+òÔ’«y¿Ò­€¦_\,yEz"7ëMŽ.ãUVq@$Àº…áØçÉ-`ïörÔGªÕQÅwQ_;ýUÝŽ›7wöìGYDê·„IË~7ú}ž©+ƒFgq:Sœ¦s·°ñÅ ~ümî[ù=2¶ÏUÖrý9=²ži¿Dæg–¿<$ÖÏ/¿«ÓÏ£QXHJ¸¤Æn»(2+G]wçÝÎ&´¶_ú lú—7+ïÁï¶!Ò©b[¯ÜÚá³Lk¬úhòÇ©ÞVæPKþû<%éjêN• Xr–‚µå¶d`çï+ÌTu•tbª€þ%ˆâB¨èùÚp'›ñŽÈ5õak*1÷ºçK+Móai7Ò“:µ ²ü$š6úü©}Í»‹_÷‘r}»P/‰Ò6© ¿.¯=2U€ß‘àÖÂÉ·¶Z!KöæFíý|öõ»¥{(_³:ž(•/“Áçhžk|0ùã=:Ôeb™„¡CYQÀ膉›ˆX(X¨Ê,TÕîãX‰Y6º/“šØ3¸¿E?4t]á xòùÅwþðãNˆ×µ‘(k¬~°?2ž¯ç/Ðuºü•Ö/MÈÖ­Òû@ú +-4ÒÞ •vþ; 0\²ÂpÆÒPK ‘§òÀëŧ#$4î5öãÛùàÃÂnq>5Ç)à•Ô敦¡ZrP£óQ¹€%g«`Ñ«„³ÝÇïù5YM`Û ã2ƒUöø¸i­èkÿQÐßÚ_8ëPÞG%(ʇÉýqë7ñN‡ˆWßüé¸ ÓwËì¹€k'¬ñ=ÖVÇó‡#¸—¬hšçuú¦‰¥†Fìˆu¾U{ÓRùcÕœh“ÔÞ)}º +-6Ö+ÁÂÃúhÉÚO<Ýâ-¬9¾ @òë'ª •ã9ÕÁ’[iû¬I»ö”ªÉѯŽã.?«™ÿ}ľÄBB þc}è{•£hü{ Ý€ŸšnĈ éí·äŸ{ +-Ü·†²ýò/|¯MµÙ÷ñi +-¸E¶cîÚ—·ï±ÛVe‡vtÉ—™>6ádÅ£çÛš`æÊ7 :Ðñ‘ð¥< ±Ïx€CÑçä£~\¡Zò‰,ñøÙ‡éy'?,¹ð7(7KD–%Rɵ’ž I6=Hñ®”Ø?€$Î"¼&ÆM¡‡Þm}Ákã®–® :~±¿|H‹7Ù_ò6 Aüñ‡ö°Ø–`{«éöÁ’æöÏ'2êjt-T›=º\B`cÁtó9ò‹ìaÞlíð»ÃÀfcEàß'À<[h…1ÔpRÇùÖ +-ãç_O +-‘£µäóT®€Í6œ½fdÀ’‡+øBðÞîãrVl BR)­çÎô#ÿƒ‹Ë þNf~Æ +-(îÿÊÇ?>r€~pZ¸ñÎÄLçû3cõi¾³¾d²#]pÃf¡±0Ã2¬„ +-2âô$AÂàÃJ„´!9Á=l¸Öû5f +-£–œI€ùC,9è¸ŒÇ [z"W㤛t¥Õç®ÕAœñ4Hlúj2³šô”-—¸¹Ì#[LyèO²&xêXÞùK]í!3Rz¿ß +-WÞ‰`_ùoñizVE;ö™¯½¬FŸ4ÅÛ¿afhO¨Ø,HP ’:ßEÈxáQ><ãÇû˜(®r`1 mj´*•KÎ{¿|w¿T×ô ¤ál¬Ýs/ê5¨½®áýCŸMAWYðÇõæ´ì‚êA>ûm†÷¨¼„ß=€ß}d!úÝ …S\³äý~e+3}eò/ô¸ åêÓ$ðX_ljÞË‘1ñ|ÞŠœ›nf Ϧˆ,öì'þZøãŦÈäsïŠüЩl\µ†pÝ`ü‚åyŠ\m–²t¯ì ÝÄå(ƒòè)QaShøkð~ïæ#Bïò5G§±.óc¹5A¬Jôc}ÎøÞ¢Zû–Ð×®|§Xµ;tŸÜc%Îfþö”ß2ªGƒ”®Õ—±V“~p4Y¦…?9VÅþ›¢úb=6,oLÚ&ôÕÞ¬)T?1ˆÈƒ}©;/Û˜†qý*ø´ÕƒìJÂígÛKn ,ùíôD.ü 1‘€+d•Áéú.5©úÒgÖ°%îÀ‚¿näØ£Lˆ{îw /æ…Ð)þ¾ï™ÒïúbÝ2«}O¹b°ïÄÁ]úo〿0)g>YvA] J¢bãiÃ=.ž2X~ß›úR­†ŽZ|¾ªypKs¼P“ Cв¿+ò©< +-.’Ç  +-Xr8”„Ÿ1<¾ æ‰?hÜB7qfÏ À“£/µÿÔ5"˜ÑRÕ´}ᨫ«÷3³x ½ÜM¾ÇmZ÷1ø^¦É žO>>¢»u?oSË„[ ·ìA@é/›ë´oÙ'uéìð ¼~¦£ì-þŒ‘:iC$-ØÊ— ôÈw¸Ö2Á"ðŽÄ7çá â]º‡(5Çkr ›7ƒ÷]‘×Á^ëIÓHVŽ2˜4î"á²@qè2>ÀN€îPÍÖ¤ø?ò:Ÿ‡ŒM…~7ËÖ¦ä XwbÝ ïÊqÂUÆ]õn¨ ß´˜í+¾ÄÒ•ª/9×>uÌ9H[ßË¥³‹L°™ªõéwتØaâ”Ïó Q¾/r-Ât8ÉõaÈý$ +-n?ñþá>So~‹‘5Ü™Ñj`É­%óHÁdž„ ŸmgÊ8{Ä r ‚|ù2s¿8õ±ÏÚ|ÐÕX “éoÈ߆€YP¥l ï± •¿;äÇKèGº‚w{êwçù¾íŽ¾Ã=<·¾UúŸbû=à€&„Ú±¬¯:ô^Ú»:ˆ!QEßLu}ç£ ô0ž£ŠÉÇ +-âþr"àLþøÙ~wOµä"^nñÔIÚÖ`CAÉÊXéoú°)Âö ºôÅÜUÖØBS€‰2´Ö|Ü~ 2XÍžñp©Ž+"³Å.„·Š?×’ãö~ïjç´bº é£8òNµHÑW|±ßœ5ëvxŽí»¢öÖàETA7xÎ{ˆ­bË·eVªk;v6éëØ'O‡DâF¢GBcEè(QÉ pi—I°í%'J*Ë Ü…qBáâ”XÀzðÑõ@™V4wP%¯ì¢ V”^ǧœ˜Ù?F6jŠc·£Xé' êpÙÏŸ¡? ÓhKÜ^<ûFÖv²Èßnß›w×ò¾ +-G=V½¢ßŠ÷í +-·Å‘+¨—rIptGõ軥^iSùr8z¸WJ\šŸMƒ£qê«:õÉë›ô±K7ùÅ5•É5ùDF/dEçZ«”_r£ô)uH‡8˜Ðþ.›¬ŽÕv`êCô~TÃiò|õ‡IE¤€œZÄÔ”1”Û-¬Ñ¤LÇ÷ÓÝÌ»w"C?~é«ZWÀ÷©¾R^íŽâܼ}P-‡¹[¯fÔÙú¥Ób>íœmÉÝ|ÄÛ:ð“_˜å¦cßù¯3Ó¾ êA£¨û0 +-G5Û;ݳ+òÐÔ’s]×ZžxŒ}b:Œ%_+SÁ +-½8—‰Ë1…>×?qì¾AýtÉ…©y +-¢:ÂÁYH¹öþ¬"ˆÙo÷2Ÿü¶0&N/&jb"¢<øð‡s6iK°ßžLEUÒkM¬•ÌFŸØM¸6HÀ5\ƒ$}´WÑrÌvP ÷_¸‹‡3úºý®#žä“!}€­¼ê ããvŠ–vàž‚fUì,¯žãl‘;yóïJˆ%#ø;½#t{ÀZO[Ö5ÜÞÁ3ÂWÙ ï±tŒ)ج3%¨¾ßwõS7«ñn«íœÁxs²^uÖÜö ýˆôÛÚÊ> ¤¶{kû«×¥¸oÎŒ¹ÛJzü¿;¤ÙGf"öž;¶Ú{“bS$Øê¾F¥¬Ïâ|~nÄpOÛ¸Ówø¯š“6K|ùùþÔÖ¡Äî:9®X]±âZ®A(6û<”(€0ûòîÂsÁG*óUò}‘ŽûzˆîL<èª2ŠÛ +-~¾,Û8Ú‹dÿìñç§òùÔVÚòÈT2ÿuÏ@ø‚qÃa‰-tñ‡†¤DÆRë?§±¥Ÿ)ÙÃkŸ_¶è +-'ÌêŽþŒ©Ë¼ yÇÑ"¥®:„:Q7—Ùª’Eš–ÑFÁù 6O:§Í`ß|¬•/¿>|¢ù·“pŽÇ) »i‚¿DÅbê*é½ÛóOþø!Ñî´ÁèKOÓ^`ÉÍC§ í>ŽF—q±€À‡üîþ¼Ð]€„?ß¼&È#üïo=|$$²0ÓÕŠ´‚xÁ÷åã›~Ù#®ìG¢ZöÝHŒ*©ä­ºmßWRÅ3›ÖüCBVM9£r­ˆ=CSïu.nDÀÍ*9^ÓŒ®>Cgñ,|#›­ŠÇÀšãŸ â&ïR,Ÿ¾è4úÆØ|î}Ð2ëZÙ?ø•™ò3€ÇË—¼óIÈ Íù£ùö·nvtÑd²7G„§Éè;dýn;Z«‚·åPmF?±uÝ{ã——ü¸%tœRÓ³´ß'å3¦¹œç’p>KŸE}©£R»àÕŸ&}̶߰‹HS¯gË€Þä‹X> ^†ÆSF‹¦&jtí4½.”X¸xl.¸d[U7£“?Þpò‘ú@o…$(†J„½D%³—Í@joÐísïB#nÝA×íÏlÒsf Ññ·v¤©¿Ç¤ Üï%õÝQD£ç9ò¢žf#ÎCJ ëñ‹îŽ>e?æIO׃Öê¤LP¹ïUÆRßz@^Ô›ok/¯hÒ½¶CŒ>Éã¬Å@tèmÊúj¥Ï¶ ÐOi|ùJí|‹[ùdûÄÁ}4Õs»[‘Óe'_t€¢ƒ ‹~0ú$‰ÉKç,ùp5ßÚk¾ÕÊ@<âªÉÙíoÔ÷Š4u²ðS® +-ªÝÃß[%¤ÌÛ?ú-n²Çä¯S´6»¿ß¤TZ¡Æ-!šzõùvGÎí`Ymgõ¼Á} uMFzWÔ>*Hšú”G6„ ÊŽ ß +-^}«¯ïbÞî`>©Î¿¸ó ÇÞ„£½“ý¦þä+ž çµÓ8Ùá/<üèfÒ QŠ¬™ɪ’UÙ±ùƒG?œ†>¶ç£W>×oôWj9šRnG û7bÊÝøÙÏ{¯1r‚úx7"ÁGŸWM='ÚÖãÌb7™#P)xÂH_—U^ìëóñk¬‚«¦¢èØ÷–±-wɧ2½üéë „+b´pÌPú>£5ôm_JVùvÎaìqÜÃØwQÃ3ÞQ<Žf*Qnkú%vMì&‚€›»z‚ŸRjôùÝuº‰‹²BØ_î“oÓÁºå{x¿Õ7Ù“bý¼@T)|¼ˆvîܤ5ía(ê'Ö˜ˆd³|áÞáñcÖÝQwd_k·~·xÂÚí>laM$¬#Tîï3 µ0ûö!<‰=ú *Řb}Ÿæ›7]G>ë %Ê÷JØsSù¡Z Ôi‡gü°Íý«ßö+û×wÆä cR´6u&NÒnÄd%¨æ¯n!_•kG¹gù¸xý=;öª’Axeóøóc˜ß-­óO¿Áݬz|œöëk€Ì/¶÷Õ½c;¾5UÄ´ú®¿ê"»C‰úÊÓÇjYŽ\Ú0‹nQmNTŸ öQ€7@ƒùÖ¢H¤ï‚»›ÊÃod§µË;H(^,ðN•Ã°=ùíùI1Vyª\Õ9e› ±/›¶Ì–Ñ1ß.wEÞ‚Åþ™Ã¿ ­d‘ʨóÀu¾e?öæó‘ÔáÔ’¢¯¥ÿ³ŸÛ— P},æeõAw3  0P쬓«WA|ÄÝ«}¿¶ºÁp¯1Ï0¸a2²CIúÐÆx.ú&=\;ùeì»U¤"Ý,r, Jvt®D¹YÔ›otFßw@×(Q¾%?µ< m¬³!‘"'Ѫ…5Ç H‚Ô«vÁžG{îÌÇmŠ%®¾–²~à|ÍÏ‚…û(ü—nÅ÷Óƒ8ÈÂçræ-£?ÒÝckB¦zi;ªAŸ³CL¡Ì¬ú‘míØ 1µÖƒ[=L5'<ÜMðå¿HiÕCýž½¯´ k¯õÌóÑ:¼yÃIéù±šœÁ>Ž”Ns¹-N^• ì‡y›A ð|Sê}T[O‚ÄA·=_‰¤àg9rƳ£ùhyœnüA÷!Ô^)»” Ø¡)~ü™Ü·Þi +-’1ÒÏø{2K~ai?Þü¤–NßtuÇG¢’w—oo†§£; éØTö6—`¬<ý¹0ƒr5“¿»ï2«óeð4ßïÆ⺆)âÊ·mfˆC~¾'°~”V=|¾{"å×UˆK•WH;Z*4tÙš'æÎó%dÉ M¥Øø’Q­úo`P’+¾á‚ìÏV¤à°ì:ÀM/óHÙcÇqÂvÙ”oÂdj•é=‚ì +-ÎÆ»¶ûO”î.{ÈY¿¦ ‡ö Ȉ;Ò”Uô±@_.ú$æa~;Á±0ú’í{Ì!)“°¹Æ 6”ü|ÕM½]ò‚:p#(§L„\Zl\­äøW`0™L§Q³Ncã\t{Yó5€{Wâóïá?€pÚòmèx¹~ÒÕ¾ÆÛþøP¼0yHBŠOÊ©œ›ßG|BDŒÁET«6eM-Â~ŸÇz:×ä°Kß¼ Òå" ¬RdÔ."¾ôúÃjgŸ0jžoEv÷(5_?±àMÏuìyôU¨×|ëäËfø¨ÜÛW¨m^ßá» ÖÛ(D€ðˆ|5LPÿ ZxŸªòi럂>G8æÉÚú£öDøo×Å£›XœüíöíiËŒ~µ˜V»[1‰ {;å´›98?Ü©Þ‡qKwÈVÖ±|AxÐ'žpK_ÕöÌ€iII­œö ”UÆÍ'øvôŠ>°ê³!ùö‡½íäZ•Yc„¥û~"Hì°.‹lEäH¾žß‘´áéǹf‚Y$Èàzþ° ßKù˜€wðö¿ +-GðžŸëïÍM?íZÇs:iôÈÐÖ/CÖL•X¦ÑŸŸ‚"Ÿ}?îåØen—öIeÎÿ¡L§¢JÖC¤®åW¨S3Æ=SHVY Ûʘ¹ãøiÒ:Íï!nzű-'UoÎí;¾µAXÛúCr?K½Á©ÒDV_Y6·i"ßëåË3Ù[$€JXÿ’£HÙQ’’ ô' îÄðî“@$!ËÕ0xF0|¶#>è?Må’&«Y(X°Èn8ùx“[-\i´±&äÂ7 dWQþ$4Úa&;‡»Y¬2•o‹LmNâôCOoöö×~á`£ÅynÞ÷ýGÜ40Pïˆ7Aô6µ¸u͆¦NpdŸ=|ãMžÒ|ýú®»AÀŽk¡ÆQ·ãð WUG½æ³fâó”.WøzÍÛ£ÙCÃÚµùƒhØ +-È8T0²Ã8;¬½úôQÎäDi ;„û[YV†'kœ{ݯG·R +-í½ç…«ù¹X{ÙŠ‚‡?úáÁ”éðÏ\^#*fu«÷Q»srs7܃P½Dv‡±ÿR7ehºC+út° r{uKl,ð­ž#¦e=¯¢a‘ZíCü¸×+Ê}¨Ïø|<â,Á”lq[/³ƒJ Ž¤až±-øŒ¿S„=ú£‘¿ÔÌ3H+@,ÌÉ‹÷o2ÿ !K£[WµÕ¯)¢ô@{¿_xï\ú½>ía̧ É7ÅC§ ×.èª!ê™PXi¸ÛÅ~ÞŽ_' f$”Þ‰­üd¡ñ êóÈF+jT©+ô]ÒŸoTŸŸÁ2 +-0l:3°ÛÍ×/b~ÍŽçBEá'[B¸jiB¤lf/|ì0ø~æ¨I4HÍfîœýŽÃºÝP÷þL¬?Z)•øüßÈñ7j“®ƒ?¨yÓéÏÍ:§Ÿá“ˆ«Dùcˆ¾©KùWÀÌs¸jlŽ˜Šz¼š÷+ýÎûvç”Þ?'’MbW8™â¿ ³Ë”`Ž4»e—^ }˜ÿ ñZÔç_º¤”~èã„C›„ò ¶i©ƒÇÈwß{Ã3MJÐÈÍ$èíøÑw ˆÖÎy‡·c9ñ$£?zñ/㨿éÅ«¹OܹÞ‰«òg‚ÂgIx vmC$þa`&ù½2¬Ó#7øü¢¯ò~ߟOàùS«KäÆ}kÄÝk€²n>»ôßy‹†Î6OÛ‡«îQ¡°{[‡Êl¡vˆÝÛüò%&`ðÖBYŠzº:öꌠ®ië͆(ƒXÅITï àœ€îw‚6SBOg+e©¼X4¬P¾¾¥}ß'¯õ-»ÈyàüÖŸÀÆoh™â°ôsuõ@áž4ñÜ-þWŒÄÛï€|Ê@ׯ„wŒ\G€­ß±Ð¸¾½x~@¼A“U†&¾F^}㟞2Ohû¬ÙÚ}Þ24VÝùÔÓàD±DuÚÊuO>»è6X‘»ï±ƒ¨Œéuqñ¡6Ç?ܦ ½ s•™? +-t‰uëTçϯêˆómLw‰ýÄ×_µ\8³šp/¶ÖØùúHÍßç» |`øè!.X~]¾ —Ô,f^e~î•ë÷³ 9Y7Ü·TjžÞa)n¨îÖWª¥îàÌOòý%jµþ|H‚ P¿(pÄG;N­Çmg™/Eè«¢‡ßÉ ÎDÝÕ"½Þ†˜;SwþËWÃðóJ†Õñ§ßÓ? +-‡û3ÿ?墟ή8ÀlÂ9Rªl~Zs7ûÕ3o±¦±Ü¸u…+Q¸ß®ÐbÂZùŠg.…‘ß0Bî+=ö“Oª´`ÓpÓÇ–è›'Ñ!p/ŒÓ¡dƒ:’¥âkÏdAŸô›}ÍOä‚f‡ó±“Sàª{Æ©ÈôB4bÆ|@óŠñ}`¡Lr=éФKùpЫ%ó +-i:ÖÐ[¼lT >_¥Z×ÉR ‰{A„“þ>7]ò‘ùÓiW;Ô´&¥e ÿèö÷L?«ì!]D¨œPçëê¸|Œzô¸Jê¼o›CûöƒÓZ¯˜ îÁI_6.ù´d«bà4èüãͶY“·¸¡šöùw¬Ä ÈÐPï%Ì™´/D®–wó=†dÌUXçãs¡¢þújç¥ß¬rïÖ—‘r·À°ÿÎ;VýÓß–>Îû×`—þnµ©õá?[´ߟiVÅ_,F Aíôñ–Ùö$•=Ήy;0]¢HÎKÄ/u?2Ãq÷uw¾ZäŽþÆW– ÒÑ),ÀRõCµY¸×Ÿˆ7º*¢žw¸(îhô­Çaf÷v|€ ýNðÅiØUQÑÖîÔÄ «ÈZ:c-›s‹ÇШ5u÷n—¼Ëçd1úÓ–j¤¦n¤ôBê&ø¸ö¿c¨ý]9ÃÇ. (;~Ïñ‡ þ( W2Ja§Rëñ]¥Pîüb-߀­[áðtt•ÏóÜÊЋû0 úòÎ'©¡°i ßœõ)$jÆ#ž¨ +-v›^}œ´Ð©;÷[íKñÿÍ<«ì^‹<ã†T²BiÖdðnœòløðƒöD)(0ñB¯Èõ_E¾5ûkÚÏ%Y ?ùñ†Þ±t¼Ç÷ÜdMþÚÞ !5?çš–G‹ õózå›=ÜŽKË‘½íg^†ñ”'‹AÔoïî_߶·Œ¦·†UGkžØ;lè‡ô#¼I«?T/{Km?<ÁÀ¹žqÚw ÜmV´>Ð[õ5ýÉ_‡ÌýÔ´·TÛÛÆïh Mkï†4!­>À{ +-àž2y±Os,ë8…,ƒÓ3smÍÙ´Ú‚§l=’°<^´¡+þJ‚¯J¸­+îVÃûÕ%ôȤÉø!îßc„ïÌÚ8r+×GÎ(\"$ÄŒ»‹ÊŠ´xæRÐ7 >“p@[_MÌŽUÙPè¤}ße;` UÝÂCÏÊ÷ÿßOM†3õCö7ãÛGÇŸ¸§wÐÂå;È/ˆí>'øGV 9ñòÚJ:>ÿòVëWÂG½\_†¿ÕÃ7m9]”퀀>šÎ¾ùdŸj€åŸ"?¼ÎÄ+xÙ=§vsMJ=fqxÔîË +-]¯ï‹ñ|ã5åj¤o.3RñÜQim%ëUŠg™ö‰˜†TApƒÎØðõ¥Û–ïåÒ×Þ°í¿¦ìw^}Ë–öÒ }P ÷÷>€{Ûý;ø +-¤tábû»ð!ì‰yûë–fû™ÝCtìAwTN{àÛ‡ ôƒÔ>Dk»›T²Ô²-~ÊqúINëªn·bûI¢Âý]L­H‚—D\ªŒ-^s‚Ôj[#ö)­O‹Ü‹¢¯\Òm´›åùÅq…8ûì¥Ìü܆D{÷ìŠ+ÿ;7Àp±zì>€Pó9eµßôõ[žYq€ß?Ïì#ÛgHÔ'á½Cež”z?6 m?ˆ~ê–@c/"æÿWÎý1•ƒ%êÓ#†ÍGÕ@ó‡8çä~ïkVNž‘êqIƒ»Iú¾ƒºäáOµ01°ŒŠ$ K*²Ê¢TBj[}5tí›~ ×¯Q¤-A²›ìuôX£N™þŸÒ‡!Da$'¿ œN ‰"aDqp8•(Ûùsêpº”±ÿS¾Óõ9Õ^«fíÓ¦ÔƒU牪h¿2i3Çvsù|^XeP™ƒ/£6+#5;ø*ªD¡pø©>uùy…u¬û¢bfûÉ°€TH<0(Ž$ò°°°àã^Ú;v×»«Wééö\[·ó’»w_‡«UÙŠE}퇜ÉûCí·½tûjTŒƒjÛ°Õ, 9Q"ÔÚ°úPŠ‰ +- Žfi–²æó¤ÌY+æÃ7[+që\Kûb2#Õ1Ç°¬Z³¸óÊèת˜Ø›m«Íˆ\T‡A²n=“w™zùîµYdž¨¿*ÆLjýõù‡ÚÉ÷»æeµÚc*æëÞä̶c­Öe5=nj<îÄý«¹‘Q-w7M©-Q"(  px‚n°p4K³4K³HÈÝKd´þÒÖOÛ·íȵUt=W¥öëŸ^U‘ŽÌ¹ÊJ==EÍg5Õ©fŽòeÞÑ´~|*æ`/ó=Wo‘w·)8œr8P»Š)ó¤å±Š›tO/éki7£d[6%æs•e¦guÕSÕϱ »)íçZ›±tWwùz˜k\Em?¼}Ô(ŽDiœ´*£ßײ¸·Ö÷ÚgJlº?¶e÷é_o¹sÙúÞš¦œvÙ‹ŒÅ?%³ÕuŸÖ/³ö1]ý\U•ºÏ½0)¹‹ßF̉â03Þ×íž[fÅd>ínvq¯rä0õžÏ¼‘&¾¯Ôš( N)§ ð€Á©Ÿ œŸ +-N¼ž(&q*QX8 +-‹ +-‰ +-N e‚ãÔ©<Õ{2íàÅ¢‚âÀ0 ‡ƒãš  ˆ0 &LÐôƒ†2áB¢aÁip@*Pq.204œ  Œ†_ Yš¥Yš¥Yš¥Yš¥Yš¥YšÅÑ,Ø,ÍÒ,ÍÒ,hȸhÀ„Ëp@r,.,X4˦Y˜fùy³$J¤Yš¥YÃÍÒ,š(§20šúƒ†ç‡AƒM çáG qݺ”}漟ÅJÖgŽý?µk¹Á”Úþxñ˜¤Kdʪpí¾QüϬe¾«ÒRÙê첺ÊL¶V!c[W}7+Ã͵j|\¼˜×îYñ_xŠ¯|^$À˜â(C~«Õ_#²j/¿07µÖl—ÏšÇ=4E5Ô=\®½fÛ]kÕòxVx|šY¨\[­Ö0Õb¦ÖmsUS#²1?O§¶×ú´,ÚãíkóTçˆUZÚ´¬h·[ý+²eR—­ÉÊ8ßhkÛÝtO®ë½.í̱£Ù*sðÊÕøÏ{¦¼ÚhTTû*3ŒÌ¦öýð¬Mñ¸sõò?³‰¬jÖL¯ÝI”s–™sì>¼›5³Ù™ŒªÌmçlÞ¦ÿGSÏ”éúã[M­Ÿ•þ'Jäà±ñWj…™)aÂ( ÂÄD3(PTT @Qñ@cá"‚uÖ¶Ù—™Si«ÍmªFgÇ·ÕÇ>3ÇjÏý–i–ÍL…ÌÉÌëãíL\BcŽàÌëÎÝ¥Ísm<ÎdëSVŸ6™&Š#ë캆ª?Zl>>×_1UVï›V—Y÷ÄŠH¬\ÅeÌ‹µ§ÒDi¨Ñí½¿eSßá4ü÷ˆ›Ô–( kļÓÌü祥m^ù•ˆXœõŸ1ýîJ‹Õšû´;‹¬‘³pK·—±ŒÿåícU¼¬ë+Ùìú²!ê17ñ×ÚiÄwöŽ±ÒZφFˆ‰Ò°ãµz÷æVf³u65æž6õZ&sïõ٪啲V3÷£ÞR¥5=ÅɈDAÄÃÀ#ãñ°,‰‚÷çç×) +-§Náï@à^z½’†_¥…p‡ey qbµºÖ.å?sI³PyôŽ‚çe@{/ªº +-7p÷áÊJ;\?:I ’Ol= W>˜{ÊÓ‰jbn7 +-¢|,Ìa¸a틈­cˆ¦ÅäXÞ‡Z⋶ƒ£2R%7ÿXVeá€=XãPÒ‹‘BömΡ!™¶C!' f&Œ« UIª˜žb.ÉÕþÒþýd“cRtj.üËÕ™ÉÚkÆúÁa Ø‚'ëœwÞD±iòØ[—@5 ܉šÛ!ç«7Pe=n¸´S-˜Ò$;E™f§&@u0ŠDãCÂq´Ó‰ž˜‰%æ‰C4\d! fP?Ü]Âx²%:Šò£Ëå‚ïé8 ñYÿÔ RXü¢]~â$ïÈ]ô ΦØmi¼ƒt3LGIk9ÅxÖƒÎÑ-uÑo_t×fò +-«+Ìׇ‘§éF½Í÷ ';@£¶­ª h>Ò2­4ßNZ#Ú±âŸ3[üEìê¸á5ú·© ¤ç²dB›¼$‰˜gÜŒÄ c„‚Fb½($/¥%5/nŒ p¦˜Ä¬çZùèf&‘aón“’C³è\sNÁÒ±ºÏ„JÔWÌ”TL3Ö†þ@Ç Ržâ(wB¦+ò´ÂŠý"!–aÇ:Ýg6´m¼‹ê ª£‹©):¡«¢ óv›äNÝ+”%¸«ª"&”•/ i¯/ä$ôÍÃ"V‰/8Ý¡Û"呼€ä¬“(`Ž0ÁOoÈ©`ªœª•«¥¹üøIç®ÚH·'ò„й˧D“‚c4Ë$ŠsED~€‘²ˆ ³ªT™Cy¯3RÇ(D¸à3ˇ…ƒPpÉ™ZŽò*C¤¬> +-L¬Ž ÕW&ë2+Î)}~@ôˆC+áE@¨‡Ç¦þ[¤ÊOæo_ÛâÂ¥È ÆÀeMQ Öc±xˆ_l%G¿õqôžF]ƒÌ€'1 ý§Þ×aaISSõ0h-øqñPݽöã ´ÉhQØ¡Öl¯+là}ÊàciÌ<.+™áÖˆ­ž¹©Y‰yœÜO„•L®5çÒ^ô®€X;Xô¿Äш»%þn#Ã-“Í}BÌ”ÏäŪ«õ¼07¾&ö²5ÒtgÎ%‰ûòB Ò< ‚GK¤VïÏóÁ6ß þ·šÇšÝo×sQl)9¸Ñ‘×-t&þ”…í©¤Q=ÊÎ ì)ײN õÒpó‡™à¦$"!åÞú…“°–Æ@–é}÷‚γŠ•c4•5R*2¨<Þeäû­¸‹É1óàP>CqÏ,\Öe•Ôµb´JQš0=°œ Å†J£r¯®‚rŒqûê ó=x‚3©(£Ò)õ²·¬Æ!íÕyPpsÇËc€ãž7|Ú¢T»±éu4ìÛxQÍ@Úb0Ö\/P»Æfe.- géS/–På/œ³­As@Ò‹óÑGدtüo§âöZ(/ *®?¬Vfc {Hð!ærÁ,ýnÍo3±˜\¢V14;èÂñÀµE¡ *€"9 +-‡OYÒ6¶AÓp² èÆ„ †:»±3qXe/ ¬ÿ¶•Æá"“áH¦ñÓúæÂ?'¶2B·6ÄÌ WÐ×xx3-ĈÒ#@ 3R’àÅÉôR¾t>Äbà ` +-ç…P&Ø4s^8ˆìÁ`˜@,ÊÈ-ÐZS:¤t; Mrë5aßÀíiXËÈ> D/Œ«ÏYM¾¢ðõ«ª¢×ªášt%µÏªÔp™l·nÞ"ͱÕ ©p`‰#!`ã¶S@×™X¡‚ESâyLjÛ"0E·5 ´2 WÔК#" R¦"RÁÜ5¨*rÔdv¹“édþ§¦Ï^eú(ÜJ}øŸ´\„r›h’|Žª'ðîžÈËIvñÉöÊifM™ËÀ÷<%·žÉ_†Á ÞÀÌ>¯¶6"‘ÏÄ +-ÔjMiQ0¥dÛ¹MŸ~›±DÂj›`t¾!ÒAÄöˆåôÛDb,ž4WdË—îÑP×úmÏ ü@ Xæjŵo£X¢Å—ˆ¬E_‚Æ-ÔMCRØ¿½ôhRŒ Ñww:ðRIvÌf‰öLˆÐ„ü8åû¾<üUÄ7ÁØ£ ’6ö“{ÞŠýãM‡§7Úòçšw¨)@f,†V®Ò$y ¡×ÎÏ ÐÚ$U¥Áˆ2ÄMråÓ4¼%h.4´n óç˜+YŽŽÑþ78&Õì| +-ëÏž£¶ +-Õ`áP)ý¨TrY›Š€Ô5‘H }ÀL©U}]ˆ¡A¥Œ&¹nI€râ"a8UÙa2‘GHCVw@ZŠ®ô¬¯·Üú….¡p® éq‹(x¾‘9.æÂ+’MÜh,›í”W: ›¢o.·8/ͱùÏ©gh‡8=oXW Ò3 ’Ý#ÂÀÅ ÀÆß1Tö"$G~*~a#§à~­áÈ` ¸/7pÅ"ÝË=Ž "lÿPŠã9òÄͽE÷¥72ß ÞÏx Þ À +-!—øk‹³1ÜÂVÆá–Ô4džgù%F+}¢7Ì)Ô  Ž±@Jm¨{ϹIƒ—СS5Oîeu(:¢ƒ1Ü$fáJÕ¥¾½s…C÷&_½vˆTd´U¿wè~+\ò‘ƪ̾jÅØ*kR) Ûû}>¨Û'aô¿Ç ØNY8¾”€t‘œ—¢še R"œ[ÚîH°Y‚E1­*Nh›a_ØB‹,XŸ%ëåÅ~’¨¼Y ÅWd>Ç›ÏTZ%ÛR]ví#ÚL¾¿ƒRÏbOEO7{^^’…™JÎÍ0IE¡D2ë#]s3mdÆ:É"Q'²‚ˆqHU…œ¨‚Pé*—î&¢îI©Ê,}Ìd¦‡<ÞT„õŸœ(Ýq¶kôÄ%ª¬sÄDZÁj¸ë•¯8Ò'Š¹B\Té¡wâ&¤Y6‰%.’L;*JÛq¸…Ë9!Š +vŸ/ Ôü9ÜB’ +-Èþ`Ihä“þínRÓ—g[ü‹Pt1=òÕž9Öq®LÐZE?gø(Ò¶î0ûU¤ËL$„®º˜¾æYw$)c€+‹ ãë#­øÓÙlMDÊÁ)SïgI¸Y¨*|OÈ_„ý[GOùEº’Üó€jD.‹'¡ÌŠÒŠÃ 10Þ ;&ßwìùœ×•Ð vWÅ"7£óÂ?`ï3÷ÑÎÇ!µ±Ð«ÿŬƒ¸„p"/Š‹à.‘Qz’Ô¼&}€®²ÖÔ±ÛºÃõò)&”¾©xÓz’õ Š7Q%í4~›øS^ &Ú¦úeÎDg°Àš¸xþ²ÈwMP¦°9ص)§Š]p°. ÆMõt‘V?Ë&vh'§¶s-8ÞÒ„¸Çå¥_}‹âΑ8ç²›.¢¿îk„F/…qf¹O‚Ÿ Zî¾Y´>9ŽEcî\v´±HÆ‚ì- Ö<kŒÒ§o˜i¤Bò$'H…´£Ëfì~åKAÉm³²‚$½‹±,5;ïŸ/²È?gßÿ³ +-r@G «äÄüv4äá¸ÍO‘ÃÆî†UêfP%\0`Wc­ûÊëU.L–|<ú2kHæÒ¼Š\ðêù\dÕ1sd¥,\Òa?bø÷Àü’lWŠ]J×|DŠRàÕ½âÜ+Ê­%•†!-Æñ¨e‹ yÞ Ø n˜Ë…úÜLJ-|7ü= +-ÚKöæÚúd'$ËÒÐX2 Wþ»VQ÷×õ[ ;K­äs¿Ú'ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDýÿÍ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìxÿÿÿÿÿÿÿÿ@3€Ÿ +-¨ààI€jT>¨Ùðµ@Å€ŸêØüP“àO8JÁ#\Ôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ-Pwj‘RT!©LÀ;)0•“ºü•‚Qi©gÀ)Õ˜j¼œ:VåBà ÔB•@ ü‡z£r¨DRÔ*xœ•aà/V¤·W-þYõxTU†àU Þ$tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ7PΫEö=ƒúàgPvß?¨~åøýƒb_I(Ðï+TôJBá~_¡lWJùû µ¹ÂPâß{¨¾•‡¢ÿžD}­BàO”ÏJE…¾Eu¬ZTàa¿jFEÞFa«rTàT¬êG|,”ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ9PŒ*—ºyïR§þ˜öySžþ˜>zS•~šzzOÓŠ~šÂzOS€þ›þz¯Óuþ›F{¯Ólþ›Ž{ßÓ`~Ö{ßSVþž| .ù{šñý€úãP+ß(5þôý€’â7PRß(””ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ9P)ªH3»iÿO«Ýÿ$ã/ÒÛîE +-â_ÒáîKá/ÒêîKúß_ÒðîK +-ß_ÒùîKêÝÒÿîQÊÜÒïQÚÛÒïWºÚÒïWšÙ¿RïWzØ¿Ò&ï]Z׿Ò/ï]:­ +-ì„ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ8Pt9÷65üÛϽMÿ6õso“¼N Ýç4îŸSE÷9]ûçÒ}NÈþ9ÁtÏS®N<Ýó¤êÏÓR÷ÐÜø–ä´·?P<í=o‰P{KžñUÔ>ÐÊøBj(cü@Iüô”ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ9POÐO²“?É7{Hpò'g?éLþ$åì'yÉŸ4½¥*ù“¸³Ÿô$’xö“ŒäOZÏÞRüIôÙO¢‘oI?{K+ò' hoID¾%í-eÈ·$¡½¥ ù“<´Ÿ¤ ßðô”ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ9PDö!•Ë‡$•=¤où°²‡d-RXö åCRËÒ±|HpÙCò•?É.{H¸ò!ýe?éU>$Äì!™ÊŸä˜=$Pù“(³Ÿt)Rgö“åO2Í¢üI¬ÙOú“?é+~ô”ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ9P9ô{:͇Ď=¤¢ù=뱇ô3¿ç>öræ÷$Ⱦ'Ì|H +-Ù÷T™ "{H!ó!Ydic~Ïì!İ„’}O†ù\²‡40MöúåCÒɽ|HCÙCr—‰`~ô”ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ9P1ò{ÆÎ×ùˆ}OÔù=+±ï):¿ç&ö=9ç÷$žçäüžªØ÷lœßûž‡ó{ÚbßÓo>$^ì{âÍïYŒ}O¹ù=—±‡”6¿g4öÆæ÷Ôƾg×üžàØ÷¤š)•~ô”ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ9P,ð{.Ð×Yƒ}Ïú:w°ïù?_gö=óçë<¾çü|MØ÷lŸ¯Ó +-{äó{ra¯Ó{~O1ìubÏ½Néù=Ý°×É<¿'ö=‡ç÷Ôþgïüž€Ø÷¼¯“Ê~ô”ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ9P*þ:Ëè…_¯ó‹þÑùõ:³èëT¿^ç}ð×ël¢¯ÓþzDô{ò_¯Ó‡~OìuâÐ×¹€½Nú:#°×ÉB_çö:MèëìÀ^'}#ØëÔ ¯3{ôuþßä”ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ9P+üG¹ô ¯?š¥4y½ÎVúG™×ë<¥ôy½ÎPúG¥×ëܤ´z½ÎJúG±×ë|¤t{½ÎDúG½×ë¤4|½Î>úGÉ×ë¼£ô|½Î8úGÕ×ë\£Ô}Ü”ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ9P,ª£ƒúGB×Ô?BºþhŸþ‘ÓõDøô¢®?’§tuý;ý£®ëÌé]Nÿ(íú#múGo×QÓ×)wý‘3}x×!Ó×éwýQ1ý#Âë~émMÔ”ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ9P8‰¤êÝ[ôTŸ¨ßú£¤úD× Õ'J¸þ¨§>ÑÃõD:õ$®'¢©„q=‘Ký#ë‰Pê…\$Rÿèäú£úD-×eÔ'š¹þh¢>QÎõG õª´tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ7Pôd­'º¬O„k=Qd}¢]ëë[O„XŸèØz"ÁúGÊÖñÕ?‚¶žÈ®þÑ´õGsõ‰²­?j«OômýÑY}¢rë‰Èê­[OäUÿÈÝz"¬úGÀÖÜ”ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ9PNò‰à¬'Ê®O4g=‘u}¢<뉠ëýYOÔ\ŸHÐz¢ãúD…Ö×'Z´žÈ·>Q¤õD¸õ‰.­'ª­O¤i=Ñk}¢NëRëZOdZŸ(Õz"ÐúD¯ÖQªÜ”ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ9P—ð3c¬'Ú°ODc}&†}¢ë‰$ìõXOô`?sÈz¢ûDFÖgØ'J²žÀ>Ñ“õDúõ‰ª¬'º¯O„e=Q|}¢-ë‰Üë…YO„^ŸèÌz¢òúDjÖ5®Ü”ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ9PÝþDòÕgjÙ'ª¯žèÊ~æ~õDQö3¬Ït²OD`}&’}¢뉊ìg6XOôcŸÂúLûDÖÙØ'Ê°žhÆ~æ‡õD-ö‰D¬ÏT±OTb=‰}¢ë‰ û¬ch ƒB;A@EQDA‚@„!!…Ô$0+×°¬E{÷êk_: ]¡óƒN¹£­éráºFè÷œÞ.Övtç®UzyÎèÇj/ú×a]7çÐR¨Qè|{õØ›9e'NSÐÏÎñn/ÌÙ / Ÿ¿íkíîË™ÛKÚy¾¶û•~ïÊ} ;Kv‰GÊQõF4à<ŒØF>(Ç»ZmnÖm°úü"§Ü&ž}ænE…•êíq;g“ùn ‡­öâ8­tsLßþ¼€ÿ_¨Àà…}ˆ@ „€"ˆ"‚ˆ "¨ˆ"À&B„ÓgE"—Nû€X§yu.šö×éÞÕ¥Ó|Õé4/x×é„7î´¯óBÓ|¹¶Ó;Ø»N¯¦ÜéÞù]§MÚiþMÓÚFÜé\N§›=­i2R0:}T³Ó9_xš^þòNws¸:r‚¶£Ž¢ +-\Ÿ±Jo#;PÇø/® Y£‹7I6Ë¥ÙdüèÿU˜`øÿÿ#˜‚8"`°~ª(]ÝétšÓÕƒ7tš1­:-•¦Óu½Ó è:ý¬ë†äÒé/`ÙéB æÙX;=•£ÓƺÓ­:mάN éôçgï´s²N7J[§£ýtÚ[vÚr¬Ó®·­ipÓéïÞÚiWdöôèÿT˜pøÿgx à”&Èúà)P¿œÙéÊü¬ÓŸ&º·@ê'';]¡uúS£N÷VT~©¸ÓVµÓè4Hë4àÞhRA]s î´tnwë´uœÚéÎXöÀ)n²Öi*¢Þi._ ÖU:í £ÓVPµÓ§¼S+äàT˜pøþ"™`­ ê¥õôä~ï¤:­`Ô[G ÔU†íôS*éô…Þ Æ~¥ ¦Ð»ÓïµT§Ü€zë.ºÊ­~ +-&¾»Ó\š©Ó5®5ú45 •NïÎæÖ\ÔNߨJvúC9uÖçnç:‚³Ó×ÓäèÿU˜`øÿÿÓDÁZÃ@ýµ‚Z0ïNWôІdÔÏ!Ôïs;‰µy¨O¨ßÕ‚A‹Úò ¨Ça¬Ó½‡ê²5zøNŸ²Îm;¨r¨ï·: 2ê´ŽêA}óc@MXÝé„L§q= j¢"jʧNŸôŸšäèÿU˜`øÿÿ+ÁÑ@ýÈ )¨¡ñÔ1 @}t nëÔ÷ Ôk @Ö_ f¾ÔEýjKŠ@P ~‰Ô$êB‡A L fZÔ jrA {P >¼Ó´“æÉ ¨0P»ü·Ób„a¦+óA-‚bÛ;´èÿT˜`øÿÿsŸ`ý~6µø8€š­DPoš¨§G@-n fÔ›éêiP‹§¨Ù>õ&;€zºÔâìj6A½ù žÖµø;€š-CPoʨ§/@-. f³Ô›õêi +-P‹×¨Ù&õfI¤äèÿU˜`øÿ à»¬‘ Ó1js eÔÿèµÑhuÙQ›3-£þç&¨R¨ËhŒÚkõ?4Amôš@]cÔæd ¨Ÿbµ¥6úø5¨j Ô¬\‚Ún7ºœ¨E» Ô«ƒš$¸@M=ÔâÁ ÔM(‚ÚrœñôèÿU˜`øÿ#šà³ë§‰Ä4êÓ|j-ÌŽšƒ¯ŒºsPÿP3H>êL‚5êÎ’ƒ:¤°@íÈÈQ!–Qg2 +-ê€ÅjFCGýͱF­Û¨…"¨Y êƒÈ52à º,PkõÔt—êF½G}®F_oP§u6°°=ìèÿU˜`øÿ?MðY×½gõ «š—÷Q»a¥QssõÌ«šƒmGýðj£þ´êãaÔ›`õYº–QOÈÒ¨ý[u›Zº[ÕQÏÔ¨yTõ»¶ê¥¤F=W£î'%¨ŸÌ¨¡z6j¨]uç ö’W¨§3ÔèÿU˜`øÿWCðY×Ö•Ázž¦FÝïî¨[7iÔÖîFÐ £~h;ê?uÿºQGÒ¨]Ôµ(ŒúmÔóC5ê~tGÝ2J£¶:7j„QõcÙQÿ1Õ¨ûÈ:Ê”Fí*î¨ RÔAnÔQ©4j—pGm +-Ä…ÄèÿU˜`øÿ[Á5X?ì±€Q£-jÔœþŽúgFÝßoÔ™Œ2êç>G}ã¨Qû㵌£ÚSïQûDÚ¨ïòF #R£îÈÔ/‘4êã{£F¡Ô¨9Ùõ%ŒºŸÞ¨3.eÔOsŽúæR£ö77j™KµgÜ£öÑ4ÉŒÜèÿU˜`øÿÿ¥àϲ~¸Ž:úÏÁQàÓ¨½34uÁûÀÔ¾epÔ>þ4ê^ F-áO£î› ©}H¦þ<áQÃÒ¨{>jAu·Á£†)¤Q÷|Ô…4ꮂG SH£îø¨9iÔ]‘FÝ#ðQs ’YÕFÜèÿU˜`øÿÿ¤àϲ~¹:Ž:^úwcS÷ÐFý¿Á¨åàhÔµúS;£öÆà¨;æhÔ.ŒzÒœFͱbSK’Fý_Ѩ‘ìlÔµ‰ú_"S#~£ö–à¨;òhÔ"ŒzRžFÍñaSKRhr1ÜàÿS˜pøÿÿŸà*ë¹G­ùŦžXE£^ã¨?K9ê aõó™:L1Míó'FƒŒ£~d¢Q§iÔþI0µ‹enj´I2ê3Œº·£ÆqÆQ?‘©ÃDsÔþ‡8ê,5µF­GQ{íÁÔ¬^ã¨{hÔ)mâgÉìèÿT˜`øÿÿ œàg¨¬– >%S·Ù¨{TyÔ}j0jNUŽºü L͹•G­wF£îm…©žÑ¨°xÔ\afêäYuT˜Lím–š%ŒFÝj‹Qxɨ½lqÔj÷¹5ä–ú3—M­hK£æå…QCTÉÔ\~á¨Ó“ôèÿU˜`øÿÿ"šàg°¬ÇË|¤©…jÔ~’pÔ,25ÛJ5ÄŸL±’MÝèÏFÝYIS ýÓ¨ý0á¨Yòdj¶›4jˆ<™:ã&›ºQžºÓ“£–´ƒQÿy⨱æÈÔ­¡<ê©9š?”šºiÎFÝNJ£†h“©3žò¨;Ú¨0,GäèÿU˜`øÿÿŸàï²~ûIëѨc—`jN}pÔKõcL èRFÍ È£v¡Ä¨½aÔ“H0õ¶Aõ^¤Œú9ˆ¦‰QëâQ»eÔ®†µü¢LÍ#‘ŽºeQ£îL¤©/Ò¨»yÔ~ˆ5?#ŒZ^h¦þöˆ¦žVH`CìèÿU˜`øÿÿ(—àϺ~,È,£© ¼jÔ:h|Ô\©bjâ5Œšd*L½±†Mý–j£v]ƒ©§jÔ:n|Ô\£bjâ8Œšä(L½‡Mý6j£vƒ©jÔ:t|Ô\bjâ;Œšd'L½q‡MýÖi£v½ƒ©wjÔ:z|Ô\š +-)ŒìèÿU˜`øÿÿ(—àϺ~]&NÁÔƒ5j+>j®]15qFMr¦ÞȦ~ÛµQ»fÁÔÆw5j.>j.\5?F-Vk¦æú‚£f«%SSÑÔk1jÜ/jê¦Zµ§Gæ¦Þ(ã~xSÛ–ÑÔ_1j½2nê”WdÎÎìèÿU˜`øÿÿ.”àϲ~ŽDaÔçšeêï#>j¶f2uùM ÐL£þ;‚¦®jƨ9ÁÔÃÍ2ê%<êc1uyGmê¦îjâ¦&:Ö¨½6ÑÔÆÇ2êž&lê›cu#G}"¦ÎœÂ£æ &SŸN‘©Aƒ5êShj§`"„ÇìèÿU˜`øÿÿ,–àϲ~¼tkhê ßõN 5µÂ7ŒÚ‡£6“-SkîàQ÷d‹©kwhÔóÙ0µç6u[6ŒÚs‡¦6ž­QëïPS7dè=}8j3Ó2µfuÏ´˜º6ˆL=8 S{aS·Mè=ƒhjãÓµ>uW³¡côèÿU˜`øÿÿ>Mð–õmq +-šzp¦fI¦6¬Ó¨3¦€©ë4ê)ÐÔt2uå Gí¬\Lýò£ÎUn¦®¿€©CËej§jêC¹ºã ›:XN£æõ¦&SÛkhÔ!¾ÁÔî:ê ß`j{ ™:ä[¦vª¡¦>|›ñµFÌàÿS˜pøÿÿ:OðgU?_™힣ŽÝLpï¨ÿ쀩«îqÔ|;ÈÔ ô4uãÚ^MðƒEýM-°¦¤`S‡lê… 0ê?ýhêÒuÆ~˜Zì‚LÝÜoS/\SökjÀ `jG?:Ã15e?£6zÁLíÞïQù¦®Ö×ÔÂlÔúîijŠ2jœ÷0u°ƒŒ:Ç=šÚ¦ƒL]~¯© Î³ÜèÿT˜`øÿÿê|ÈÔöŒzT™ºs Gí—=ôèÿU˜`øÿÿDJð –õtL>ÄÔ¢`ê÷Úš L}ÿ© ˜©/ijK0õýa£&²€LÝúðQËR@¦¦ø¨IS;ÚÔbêJ†L-‚@¦vf¸©oШ?&ÄÔ¢0ê{ oê»õ½ ™p™ú’¦¶,€1ñÜèÿU˜`øÿÿ@Kð'.?™Š+njà™šYqSSþÇÔÔŠLþS;*:jÿ1õµb£núS¿*vÔ?ÿejcÅ£&òS¿$ÖÔuÈÔu‰›˜˜Ú!‘¦&#¦6JÄÔÀ +-`ÔzjêKdÔ3u¸uü‡›ÚXáâ8ÄèÿU˜`øÿÿ@Kð×?¾ˆ72ê’ü1µ³‘£ÖÉS×35?¦v`¤© þ25‰1SùcjFššà/S“3u?¦v`¤©‰ÿ5EL-üߨû*ÒÔÕÿŒš¾â¦þgÔõojâF]_qSÿcêfEMmø’Àc¼èÿU˜`øÿÿHHðÇ?æŽ1u¦n6ÚÔT~˜Úܨ©Ãü1u³±¦&òÏÔçÆM=䟩Ÿ7õ‘¦>7nê!ÿLýl¼©ü3õ¹qSùgêgãG½'¦6n|ÔDòcêöÆGM/Lmo|ÔÅógjöÆG=/? yâÄèÿU˜`øÿÿ4Qð×? Ý7nj@þF»ñ¦¾òcÔÛ›š˜£îm¤©MùõæÆL-Îߨ{7jêGþº»qSòkÔû75!£ÆÞ¸©ÇüõîÆMÍÊQw7bjaþL½ÝXSÓòÏÔôFL=Ì/S36jêDþÞ#¼èÿU˜`øÿÿ2Sð× +-ü6嘔_¦foÜÔ©üµc¦çoÔ¹75"ÿFÝݸ©EùõÎÆMíÊŸQc7bêQ~Fý»qS+òoÔú›:œ£îoÔÔŠüu#¦åר¿oê*?Fݸ©Gù5jÎF›š–?”IŽ¼èÿU˜`øÿÿLEð3°?^âÆG]9?LÍnì¨éÊ©‰Zðü1µµ±¦žòËÔûÆMåÇÔΛš?S[72õ0?¦~oÜÔ´ü™º¸‘©Åü3õ»±¦¦òÇÔåFM-䟩Ý4õ•?¦&7jj ÿLÝl¤©…üÁ6ǤàÿS˜pøÿÿ@Kð· +-üŘõßQ߬˜©'ÿúΊM½úï¨oVÌÔ“ÿF}gŦ^ñ×ÔWŒ˜Â?S?1fj…¿M}ň©!ü™ú#S£ø×Ô'ƘZ௩_125Š¿¦¾ndÔìò7õëÆ£>“S_72êù#êîäèÿU˜`øÿÿFH°CÐ ¢jL=F€M–XSGSgê–ÜÔ–D™š šZ(1S»À¦6UlÔ2ÿcjPEF=ïM}«Ø¨ûþÏÔ㊺ßÿšúV1S—ÿkjqÅLíþS_ejâÿ¦V”©Ýÿ7µ­âL}ÿwÔÈ,/wÜèÿT˜`øÿÿBKðgY?¸ .à¨O$ÄÔO pÔbêS0õ¡LíBÀ¦>1„© `ꆘÚMmõP£æY@S‹>Ô¨ù°©­ÊÔô4õèaLÝ( ¦®xˆ©O hj°‡˜Ú±:ÇÃL]_€£ó0S·àQç"”üèÿU˜`øÿÿ@Kð–õÚ‹AS œ©ØÔ3u}MS©aê75u `L]IAS lÔùE ©‰N1îìèÿU˜`øÿ?B ÓüY×!H›ÐÔ€î05ƒ ›Ú̦>5©ÇÝ•jhL ©Uñbjõš:o¦6Ž ©Íâeê{¦Úz3õ„šzFO¦Ö‚°©£ô`ê+›šˆ¦&¡©…ïaê§4õݽLMÛASÞÃÔ®>j|Ý £ÈFÜèÿU˜`øÿ¿A Uðk]?C†ehê@q˜º)ƒM]'S eÈÔPq0µQ†M]TS—_ÐÔÁr2µá…šZU¦³0Õ!C—©]XØÔ't3õ‘…MD7SŸY¸©Eè0õ= M^S·R¨©ë`ê} +-˜:°S¿›°©kîJ «ÔèÿU˜`øÿÿTCðgY?b:LœS‚ ©Ófê±Mf-S·} ©KÖbj¡˜`m¦>ú°©k²eêú˜:˜-¦6ì@S ²ÍÔcš:Œ[¦nã@S—¸ÅÔB05€ÛL}ÄaS×|ËÔõ0uð[Lm¨¦|›/FÔèÿU˜`øÿÿTCðgY?„ðSuÉÃÔPhj +-±™º +-¦ƒ©PØÔ’c™š´‰¦9†©MØÔ¶c3õP M R–©™”ØÔÊ0õQ M-n6SŽ°©%Í25éM-Ò S?ˆ°©mÐfê!š-S3±©-¦¡G¿ìèÿU˜`øÿÿLEð–õ#qŽZ²W3u[Œšº K¦.Š¡©Eµ6ês}¡©ïjajË/˜Z¸¦~çBSÓàÊÔÅ\4µ×LÝ梦.ì’©‹YhjÑ®™ú•G –]™šØŠ¦õ•©­ØÔ&¾0õ½L ,S7N±©MÁƃµ¼àÿS˜pøÿÿRCðgU?`™Ñé¦&ÒSc@5µk:šZÔ¦>Ò1S‹Fiêã825m”¦®u#SƒLmêV74õÂM½vS¥2êí¸†¦&¦ÒÔäk`ê‰TL͈¦N²²©ÇhÄÔVLݦF¾º©«eÈÔƒWøïâÌèÿU˜`øÿÿZÁß`Q?‘M-BtS¹©‹0µ8™ú°HSS’©íŽ25ؘúꨦ–"S#15È ™Ú©¦¦S¯)ej 2õ’¦¦$SÛ/ejp0õõRM-ÑC¦jbj=2µ[SMMÓ¦^wÊÔ îÌèÿT˜`øÿÿNFð‡U?nNÎijáP0µóMmæI¦®ÚÉÔOfj¶šúä L}΃©!›hÔy乩˜ÄÔ[>M=ˆ ¦vûó¨ýUI¦®þÉÔ€J6j|ÿÐÔIdj« M”D¦n²©uÄÔÛBM=ȦvC´©MÞ¤ôèÿU˜`øÿÿHH0C°–õ¢ÌnqÔHæ’©Û·lj2[2µµ—¦´S;†qÔèÌ"S_†aj±Yõýahj,3µ ¦Â"S7ÏØÔ”V`êã™MV%¦n«©©IªÌÔä6z™S0µc››ZrJF½s¦#S¿ÀÙÔF¤XÐ3ÜèÿU˜`øÿÿJGðwY?Ö +-ij0j0õóG-¦h2µu¦;S·ÜÔgfêkG]Ô2˜ú9‰¦6X¦Q—™dS‡‘©ÛLnê 23õõ‰¦³Qû÷dS[ ƒ©­¥0õ°0™Ú¥Š¦>û%S[Vaêa^2µ M}Æ˨ŽäèÿU˜`øÿÿHHðwY? É–0jÍÞ‘©™%jê;0u…¦³S·W|Ô·¤ƒ©¯W05˜9˜úÕ…¦¦1S_Ç0jÄÆ‘©™1jê80u†¦ƒS·o|Ô·tƒ©¯o05˜6˜úU‡¦¦ÑS_÷0jÄ®‘©™=jê5€ùkäèÿU˜`øÿÿDJðg]?D0êó aÔûÔÔ7…`j³MR¦f7°©KaÔ17`ê!‚05#MmE¦¾°©#aÔû'ÔÔ7`jsG]tŸ™Ú™Á¦®àSÓ9hê >0uËGý£™šþCS‡Ê“©ÝDhj"y¦²ûôèÿU˜`øÿÿ8Pð×{ŧµù•2u‡ôGío¥FÝ{:S¢”©;¼?j%5êÞß™zP¤LÝA~S;ˆS›×5ø0êõšúˆ#˜útߨÁgS?íkj¤Œ4jÝûL h‘LíRG­a"˜úÄL- Lí M­ðz2äèÿU˜`øÿÿ,–àǬµA‹µèSuwñMMĦV¹lÔæIeÔyË5õ…Q0µy´QŸ*SkFÔCiÔÞÑ›:¨™ºõúQëé‰Qÿ^oêAbj–îŽÚã&L­¼Û¨GÞÔ¨s»ij$šbjÊñF-£Ö1®©¸„“\GÜèÿU˜`øÿÿŸàÇ +-°~ìêPG-k£î!}Ô~miÔíSG-mk£î9ÝÔZÔ’©ß¶µìYõ§õ¦^C¦æ8ë¨åÃbÔ=³º!¬úiû¨'¶ÂÔ9r9jßVuk.SÂJ¦þö먽ªÂ¨Ÿ¿›zXUŒš_¸£f<íRìèÿU˜`øÿÿ !x¬ë™î;jùË0j_ßM݈2™š}°QÇGÖ¨ûoê§È4jvã&]L£öItÔ‹5ê^FF=_£æ}ì¨_…mÔ¬’GMú—L­¹ÒQ?ü…Q{+7uA¾djîÍŽº/¯FÝ¿¹©í’©±…zÔ¿¹b–­´àÿR˜`øÿUCðU׆°o:j•Q;vã¨Yõy7£–äjÔýÚ:êÖWFm¬QgÄ6êçkŽÚ©¬Q÷_kÔQ´ŒÚ‘GýXۨϩµ¤[£îÖQ·â2jãhŒ:C·Q?;sÔNwºßY£ŽêeÔŽË(Ï üèÿU˜`øÿ~,–೬™ŒE¨…±4jÜò>j€ZY€ºžÁA†À¨q$è¨ÿêVõ¸CFí=à£æ@¨QÔuOµ—F ^©_PÔ`Ô~÷}Ô u=}ƒ: „QãˆÏQÿ™Ô­îêq“ŒÚ{½GÍ%apôèÿU˜`øÿࡆÁú¼ +-)¨Eªš“GƒÚ ¨yÔ¢Û@Ýn£AMãeÔglԠɺFƒš†Ì¨ÿ¶Ø¨A«u»Š5šQÿ=±Qƒ†êv j8£þb£mÔíÔ4y@}‰aPñê† +-u8€ßÔèÿU˜`øÿ¤à±‚®̦å ÔÀR@}g“ Þ¡ê=›€:¾ +-¨ïfÔ;W@½“Q/§Ô-0 êÊm ®j9¨At€úAËAmÓ Ô¥T50P»Q)¨m†€ÚÞI 32jq–ä¨ý1ê*’€:Äܨë+òQ—!%àMFÌèÿU˜`øÿÿ[ ÁPÐõÜ„E êÀr v‹JP ¨š–Ó ¿Ñéì´Ô .ãj¡¥€:¨ïÔ +-B@]†TPƒu[QƒÚ¦¨©„jP ~'tP×Mj±ŸAh¨o~ +-jš @=ÆP>õ]΂Z!*ЯFìèÿU˜`øÿÿû4ADq AƒõéÄØjPœNãU­;ý¨)¥Ô ~gÖ ¦héô­ÉÒiPÞ€úa¬Am'êC` +-ÔÍÀÚé;€úR× ¯éôï´Ô†À@}¤5P5ÓUƒšPB§9\•N›4ÔLT jB€CT¨ÿ]˜ PˆD*ADTAB DŽ@BˆúóÐ"^§ë´½Ó3[øN|j¬j]Ô;íÍ‚ïtÓ töïô®£@Mˆ_AíÞB§yŸ/P PÓlïN7ƒµ¼õÖé´ÊíÒi¬ÔNÔE§U¶õrê¥,n1\tZeP7óP#ñÈìb?T(ÿÿÿ@¨àƒ‘¹Rè°J‚†àÿŠ€eYŠà;ÖD@Í- Ç‹–`‘%ØœU±Án œ´sc»bk‰˜Jõ«GкÄ@^ºà²¾ +ºsæBKÒ úvä6ܸ8ô5ˆžj|QÝÞR–HV–£ûÁ·0¸,Áôº.}ˆì–i]Ò÷ŠòqˆUZÐ"M‡Ó9榱tvMÙç#âÐÔÓÎ,È´ *TWhqâîF 8F1 C@1 ADQACÀ0 ²G¸bòDÍ0÷µ1ù.VûØ°Ãï«„òhL ëX¡?_ÊlÙF,Q¹-ËÄ=fbȺ$‰ ‚)¼c´ä!_/¬w”Üz黌Œ±.±*`.û<ëÉÒ…Mî%Ùw|Ž”e ›×kòïuúXÆq›¦3åWM†Î–9ðÀ2èZùYK¢ëe€°§<.?Ô{ôÈŒ@ö+¿ËïV陯Ù~E´þ?œÿZ¨àRq‹¡8Aƒ "€ ˆ`‰"€ (€8Â'þÅôÜ ›¼ -i3âN_I[iA†ªßo’â²~{¶E³¼Eö¦A;Åíw8š0# Ý—±KÅpz3« ~«ït1~Ï\Fp©‘Æ(¸ß­Ìpàf§Ž…pþA™4@ÁÍÎ;áük2[€ƒ›ô2^þ2)Àƒ;·²8Ü}A2>à„ëõ62"n¿™0 …{Ú=2%®œ # †;ú\2+Þ?…ÌY+(?”ÿ6 qFO R6=ÀvòÆ` ŽùÀÛ¨‹ÝíN@¶ô^]"„–l¼mû€xMòå¯]Èå–ðAÈb>P7íâƒ7a¿º„°Æì–ÌU£%ìºdÛ>TâŠàÔÒCwQ\>X@Ü-h°°ëá ²E`783e {@– Œ“‘…@&œaç{Í{öAäa}H/‡ù`a5°µüòÜÿ$ `óT8kö³}˜8{ج—×B«K|P8ÞÃ]ŽA@+Ó½¶ö>HKd‚^}À þ¦‡Ùú€ozÈ­õ†r;y냼õð[>’ñ]r=8µ½Û4a¹|·¢Ëm³ê*qû mëẺ¤±þã +-Ìÿ& Qçwy·¤%ÇöÄà–œàu=LµX×CV}ºÕÃWu Š„}s,Ùƒ&”Õ‡¤ÛZ}ºÜêCÏí®>Ü\ôp×€ x‚Ëõ0U†0ʵ²JLJ°ôá®"E>hÂc}à¸*ËUøÄ ÿ6 !ÇHÜ„›4Öò8_¹ô¡6_¹ì4ßréƒe¾réÃQàöÂ9u‰äÃæ +-p@^Y¢‡r:ÖxMÙ‡wŽÔ|X–˜ÐÎÕì–<¥>°H|è–({þp>à„ {àgÛ>„0€Œb4ZLô¡ÈÔ‡¼ë§|˜»|êCÛUDÕ%>œëA©n Lå;Wühÿÿ/ à÷ %ñå^éCòõwµôaøú;Š]úÐ{ýE0}¸½þŽâ˜>Ä^GÑLV¯¿£˜¦¥×ßQdÓ‡Ïëï(¾éCæõwåôaò|Ï’Q_¶t`èréGÁ|È¥ ™ |=äÒ ¾¾Uw¼0ÿ' ‘ç×òªÿ E¢°0ú°„=˜‘EØ}øAéAŽºd|ÈAZ2=1–Uv öàGZ°BŽ'HKz ¢õ+q¸ ~ý-Š0úÁ +-ç×ߢ¸¤á×ßQtÒ‡íëïQŒÒ‡êëï(R郩ýõ +-ôÿJ¨à1N0gGa¸A#€†€Áþ#$€XŒ$˜!hÌ ×}/‡4‰É¥ÂÛxX¡=ŸË)ÕK‘–z–é› +-É MX +-7ë\DÑ ënC• ß[…äð@ò{K"b0è‹6¼Ž,ßšpî¾6î‘ô NTž~W,_˜ݾɤ0úkSìVhŠ¦yÁL¸ƒ0ÝþußâÀý0!ÆZ!–ü‡†"ÑŒ¡NŒ.œŠ¨R!ìýÜÿ_¨à1R|Šƒ8D¡ˆ!@ „B‚?‚0ˆ#„€Nø&ˆ%ÿÆs™¶‹Øo|šÁx„‰0 6p Ú‘– =ŒÒ U“>œ&Áƒ¸Ú‡³EA>DÎ|P;PÂT©7®üÿÿA¨ð ÁQ\Z`@à(Žàÿß‚q†À!Pí]£ª©%®3–Ä×Zq•é¤%|*gD·kÛ¯ ô*cÚÑ0›-¬(øh©Í²Äo¥CÆËélQ–@X,·ØÁÎZq µc¹sÚ·!¦K²Í¤%¨-)ÏO+“6—.áD³r7‘i®ð*·Ž@=q?”[-úK—@qákBEœÿP¨à±Æ\Ü…"ð0 ÃLðÿ—$žù”A • Ï؉6Ñ`²²@ýi¶ÿ(‹j!É€DUHRbøŻQÚG[Ù}>:’¡à¡,¡Hóir¬Ú™yB¾]–\†jIaêàÒŠë«°½@Ö£¯PÑ%6:ÁŽ%Ñ´|ú§p'ºd¦(z¹“­«X6¹IKþ”¡ö”•x6i‰tk7ÌP\È,*{˜¬ñÿi¨à3íxRðÿ‡`áÞ}ãyŸAh—ùܨASÛx€¿4BœÅÆÌ4ŠƒˆéOs¤˜ÚnE†a¬ÓáØi™/¤™øýÌÁÓa#T=WŸ.Ó„X“oñÑ;27ègÎcfí@ßôg@‚@U!PN Z~ÌL;´ÔV¡ô ¸0uA4ç ü<ÃO)רhE—œÿq¨à3íøqx†€!ø­%¬ðcAÛ¸Äw,7‘$ÈbÄùÀ>ãPÖ‹“½çQ@‚Þ¤lhâs !^UŠ1­è3Ò^y)Ø2¬ÕàGJàYJ7Yk¹ä¼šK]8±{Š š—›ÅÎ:ÉE@ù¯Â 0™è +-'ÅŽù^üt›S,•þºÌ„SM9![yhjŒ1­P‰ÉÒ©Ù2xr­"ÜÉæGz¸›´ÿq¨à3íøQT&ø .¬ÀCQæ*Jf.¬S@ ˜mbŒ† +-5‹uÂÈî€/Ò!ºÿ…©@¬ALéáÂ#²°óR †h/ÑØ0ó ¯Xª;†aÅáT Eú!O¶ SLŠñŽpÃÚ!(ÁâzíCt –8ÖÄ¿¨#²xV¬DdDwˆÜÔß‘X42#7ˆµFø"wcùV’šJ‘†Èä’rI»c~Ìÿq¨à3íø!P4.ÁÿO‡„u?ÇG-ºîÞXý(§—‰ä)ð €Ë÷Q…^}õ€¸Ì­ ¾xÁ3àó<0@sþljƒŠd^\9¿A„ºÀÍï8=  ýCA Ù}Ç 0À…ÁÏwyê| ïeP +-n®DŽG`ñqèÜüŽy³ ª<š½Ù˜(41—[®Ô„í! ò[AèjÑ&B%6?Tÿm¨à3mø<6CÀü?Â>þ”a Ø=ÚË?[e‰ñq‡í¦Æõ‘¬¯ ¹CñŽØæ“¢¬†9û Ïmø3@S™ç‡C>½Ý/ך +-éìä|ÃñGÄEYk€¯¾Êío‚Úì㿽ÐÑ—¬ç$¹8ü[÷ŸÏ´ßÁÿ|¹ÃŸ·džýŠw¿'JY^¼ç=î;  Ñ tþto8ËE9Âõãø_·¬þ´ÿq¨àsÍøç Yžàÿ³–ÅÁO´Ç‰„¦ ÔGHG’‡ÞT-ä ½qK,®ûÔ)ü6·ufÐ?±\E-£]3Ÿkmzu }0j zŸÄ%Y´ ˆJ'Ðxƒ­+„5ËÔõðç`ód”ÕËðí5pzcûúâ…±Ão[§Ý0•±/€ ÿêÛÝcó`a^Z·F +-]–mA¶Ë{ϧÁ€È•Òÿ¬ÿq¨àsÍøw ¸ Hð¿dгR:Û¶jfŒÜxçê}Fî¬!"VEǵ‚µ{ߎ'‽Ïéê4Te)b¿‰ç:áB„¶{4øø › sûÀn@× ¬¸écÅ$D©r~Ò.Bôø!:+6¾Óû™lFtQ•Õ~bË é.ÕŠWƒ‹s›E …X¢´‡†ÏŒieèt­8:-ºœ±DSÙÍâäÿq¨àsÍøß"@’$B€ü&X˜8x–“„qV” âíÿ¶bCþõ–0A€ÖÀUšgÚŠ©]oL¨¦±|’s1€NWSîaFØ3mœ®Ë›Ñ™Ü|â´Fú«p  - ‡6pÏz‰ýdÚ"P4 N`C€*µ•Ôù¬3S'ðãÊžp”r(/ñÏuëR™zK¬4¢Á0ÈPÐ-i’#HÉb—áv RœzH1(" ÈpþDÿq¨à€sElø ƒ€ÄqB°DÒRðòó {£¸ÌÀ£øV‚ìI©_c +-Éí~qHT»ìÛ´mŠ~ß­"]vS ‹3ö;®òÍ…¸š:¿×>¡TNÌœãýü+Çó¸’î }ŸîÏo Ɉ¯öHÿbÿ¾K*\Á-°(|-»QßšN€…/ /m`žÝO bAfÉpoýhØs ”µ‰¿€£i…ÚÀ²‹Á 6bÖ»õ‘h_ëDÿe¨àp2%'øÿ· (bDA‚ÚX ùuõÊ’ùo|úb~yø, }™¯ÿŸ¿ªV7´ž1ß,ál!CXŠ^H¨iµnA„~"ËPâ)àt¹à•i‰Úm¬äy¬«Pd?U@y½T¢’þÞ› á6(‚Hô]žŸ1Ù êØ£åCmÇjHÞÄ3ºMØxQÒY  /„a¤]!aB9cQSsÃ%¬ 4.XnHßö V¿›Ìt øôÿ" ðõзLö…à!¦ö«°g‰bTÐ<ð(H,T<)ÐPР†àaI—‚¸ÎT¨@ ‚ià!J’ +-*Ø¢à©à§ )ð@¥@T?¦óùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDýÿÍ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿtÿ?œ.Û@9¸ì::\H$ Œå ·»“ :•ÚAudî‹Ó]ö íÁæ)‡l6¢'GIKäñx<‹Åáÿÿ°ï÷ß-Ÿ½V§Ò(ô©3i ÄhIé™ìt¸ŠYìÁ°B™p»¦I#Ñè²ñÒ)¥ÐáŠÉh¶Üņ‡nWrâû±ƒ0ŠGdRÉÔN§ Žtß÷}Z½fyí¶ûõ¿;Zk¥N÷}ߣЧÓél.“Èã‚1 ‹ +-J7@„##w«Í&$Zùà +-…€ßvMH´é”j½b²͆ËYdøÐéBv%'=ŸÏ‡¢â Ècq&F²ü|>Ÿ¯Ç ¢Ót¸Èán5 +-ÙÌ‘C4(¨P¥û¶kšD‰hÇM ªÕjµàÀÊóŸÞ~|æû_nVgÇyÖ ‰0->ÝFŽsA, LwM +-‰Ht}›R ® §ñ1ÂKy*HÖ8¡QêU»ó5ŸËerïåòÙkuߥ;ÕŠÍòÛî·ïû¾ÿÃâðî½Ü¬ušcÓ¤1ÎY|D8.l3‰¼a•PºkzèÚÆO*ˆŒÂ†ÁBR å%†x¤i>q¤Ô+Ï ‹ÏerÙ|îéé9›Ëd°ÿíj±:{Î^“,Ê[~&;\MöÊP¦ÛÆM¨U«›Uä4<8IqÊ‘ËæÝ«W~ëí}ðÿ‡Åâñ˜\.›Ígžžr™<‹ÃÿÎZ©Ò©4c€+(¼Æ&“ˆxXH!àwM“>µ}—N©V &£Ý.6>DH +- x"PpT.›T,¯åz{ß÷Áÿÿ‡Ãâ1¹l>óœÍerÛnþÇâßÿr±S'M†åd×aAƒåü´rhÅj#'+B¢R‡JuøÌóÝá¯ÕýX”®üz&»¹[…l"öŠÈY¦JµZ­XyÞ’°Ð"BÂ멸‡DcrjÍn»ä²ùì{·ØjôYsœþJB6p³‹e²iÒˆTߦë%³i€ôX„D$Ó&ZÅn½þËæsïåòX©4ÇÆÙ¬Q"Ä¡0\ùõz<‘ˆÇÆEÞ’ˆMTÜp¹\Î"ƒD§ Ù™œÀÈI¦þ„Fwª5«í~ûðu‡êK£ P…'€Ã¢k9¬J6=}lü¤jÈ_2FÇŽ§D°€¦y¥^µÝÞ|6—Á~ÿínù,VgºK£Ð§Sכˤ Œ0øb¥çKi…C¢ñˆD"‘J¦®ëN›žÚ.¥Z3\€]ïEÙÄËç²Öºã8—Æ™àJD·aQ!“ˆxP@!à¦Ë£¸atàý^†Ådó&ZÍr¿¾yYª”€`Ô`,…^“ìj!‡Õ0>¤‰J=‡šÝéÿð¸l>÷Çá_ +-Õ—Ça J‰HG®&“hÝ¡PîŠQØ.6@FNT€Ãb’i“3½j½=X·Ö]ÜÌõ B¸é©¾T-ÙMCg¢$*uœ)–ûå‡ÿ»Ã[wœ'Siœ¶üpµY̲oVKb‚ÂfÀC@IÏp¨¹Ôozðþý.¯#µ©1]z# ¨’M…@¢—즡+ùgÌrùû_.oFoôšä‚˜¾œ6‹½"X +U‚ Ço»®kú4‘Hö—N©•BDî‚MPTà~-Á¡d€Â¨A­B +- DÀ@Ä +-B\=À ‰(iŽ!Á@ü@oŽ€CBd-"~åD+WâÉ€ÈÅpÀ0dcÓËÄ9¼9%¸bL½‹ÌF$Nz¯U뮎ÖErâÊhoLß…!;Û)ObSõ4‚(1Ì&éPˆb8¶I‘⎑‹Ô§+µoH"¿!ÕRiƒ ö‹¶r'cŸíÈýÃrÃD!Zq8|9“̼"â6"¢K¦óQd —N*ö[N“¿Yá¯Agà›¸0Ž 8Õº˜k}Y!1 ·Wª*©`7†ÑH¢•Ù†Ïê}fúLÙåh¯Õé•Z±ÛBó%&ë%£É^ì´e‰Ì ðéf-Ôh„jÍt½ ÆG‚&Ì•+ÖÕ|ÛýF#è( +-ˆàél Ÿa w „”°œÓ;»Ý¿×éò7[}2E8†¹ ¦*…>üÿO¨”zÕ„ÈeËt†>«w¶û«µJL +- 7{­P$Ñ™R®˜MÇ‹^“&Íh•¦6¯Ñåo6Æe…äh€‡“±N"Ȥ‚ÙrˆÈ’&Œu6§w¾Ý¿¨u2x;C*XŠ‹$z9Ž;©d6ÝîaÂbDY#>§×|ÛífójìÅR¡*$GÁžnæB‘B ‘‰•p[ðQ?°Dc°^²®ÞÏ㚬u +-e1IvdTv +-·GåŠÕpyï'à‚©d¶¼TÕ;ßæ÷´9¼½J("=ÝÌu@ +-}8›ÿ¿A° çv˜#”k¦àj$™Ðmø¬öμ¨ˆ˜àÝ^£ÿèäªå?‹å»½§ÍàlÕyR@èS !°b8žÑHÂsíŽõ5ßîßožÁ†Ð—":›ÿG(—mäŠõ5ÛÝ¿¯0,ÊÀ†œ¬…Ø l$QžTìלÞÙî÷[[•Bž þÈ TÆ ÖƸ¤ŒpTüx8Yë+ø(Š % +-¤35c]Í·ûw{G—½4Ò&‰‘Ä@.UmÙ‹¥>yÿó;º\3󲂀cø 0#¥^7 % +-¦íž)ÂQ!ÑûMëÜ»ùµ.æZ£*#BŒe¸j9ÄÐH²òbåŠõu,šÓmc•>ü ¥Óêí{±vº’,sÙJ„B¸õM ×¾çà?–7”OkãT h°$è" ™/Xp¿£ÅZi +-2%˃JgL·œæÝ}ÿî¿W— ˆþ¿«¶ iR·âöZca˜ DßÍ%ËE‘fµKÖƒ»šëÔ‘R0œ¯Âc µvËi¾Ý÷ïw]v n.S¨ƒÿÏ(Óý0’+Ôí½÷}›O“»VèÒƒøÛ‹j^mö^¡&G¼ZËêàß#B½pÈì9¬²  Fª˜‚ø±ÜÛ}ßq*7&v4V ÄÁèäº9 ;–Ðë׬.×X]N@üòß@1ÞR›"E`.S‘>üw@¦Vm7±¡l‰á’Óìµ.ÞV[‡¾\‚ªTÛ1BP¢W¯ù ¦ya" Dä`©Ñgƒ’*¶ ¢“Ñ èÈ&O®½óirWæYbл! DžÍÿÏõÐ%§ùvÍ5šRáÇ-TmÎJU’E ÃlUÊHªH³áóšíón¯É@dbM±àwšÜ•.=*|¸aônöÊ4X8ÔV¤ÏæØBÃ$š£Õå.5ÅC˜™ÓnY½•¢tw²”ȳùÅçõ{^³Ã3ÎŒ‹äÁÍw1âœë»¦q)Ù #­j="’¥Ú-«Ùm2wŠrœX€` Ƙ-9mU ‚û;áñF;Fó-"¾î©h=âšívWWÁ°¾æ ^'ÿPš°¾µ"ì{V›kª* øgv H·9·›¤ UúlðOZÕ,4e¼fõ„Å–j6jÂÌP¡þr”Ïðù¹%§÷4™;MùòD±|¸|ÉŠõ‘gƒ×Í·Ë4“¾[k¤¢5 ?˜Rí½ç±”¯Í^Ÿ¿W§²€„îu +-qðÿ)µn>"r…Ê%§JàŽ¶z ‚¤H³.%Á®<ý÷/gH÷Ã+q”B¿Ä$È{¾–Yˆë¶÷³+ɼ;ÈÕ2E‡S[è—(ì¹¼ .õ¶¤ë°K²ºq‹£Cþ’|SB!ªYËš‡B-xðèp…¬Ù~Ââg= u:ªÃ3 CH·ÙDþpN"ŽÓˆ_V&ŸyÈϱCˆö×Ëb)ÍCKV„QhqJ–=÷v¼‡‡P »ÆŽtÜU¢s~ßÂl=ñ˜åŽÎû’×ù@×+!XЕœõÙ&`—óÀ¹'Dü’DýVy‘ͦse%"Ù¸‹*Iˆ @!ƒ @AD^:ÞØh:¤<ßÝ Mú¤Þ*#‡)ˆúš¹øž¯Å—\&`%!B†ê£ Ž|‚¨ 랎%Œ*iÞr3K?½N2côÁǃB¤ä#sFqv(´¬d˜RŽ ®®}}á Ø>²-F=^O*¾èè°§ŠõÔé[±+žYEòµñ’e-ÇŠþk"*õÿ}çÉŠX ,½Fs +-&¢u}òÈØ1.:ÅÙˆ•ôèNñ +-bø>dˆÅ¢Þ„;¼ª¬DØ*a +-¸Ò„ †¢Pc/Ct«J§íïªä®vdCÙœ±‚Ê!$J‘€kÁß\ +-@L•œ2‡)$* ¤C¸XTÅ¿;ÂUJ9{‡<7!uZ˜d°Íç!vW²!Óî‹­‹ŽU%ÓÚ{ÎÄ)¡^Þ!öM.#Îàlw"!;3TB½Å‡Nˆ” +-10Àˆä§«Û¡+ª"ã‘z‡°óñDŒe''Z&ÒŠ‰CÞv8ÞUnˆ¶Kðê¶H^b̨qW W‡®Éx»îµJžèÕ#â„#‹C!ùó*F¨òŸMÔ!ûôº¯_ý»~‡©kˆ "]‹°#âk{ôµKy±Rø8\ÞÛP‡ ëCˆIÂDŒU5‹?y RçÎáùwÄt¸¿Ã—zG6[Í+8•yæº`ÝS"Et@ÄNu-Hr™R.‡òË!©X~P‰U#[FýsL¦¤m’jƒè;ÐBï'þr‹!:|"‡Ô(®bb­‹)ua.xõGd›´Í†“ù-0äÐ/ŸºŠ‰_÷ñ6¹5Èæ—Câ!2R‰Òë šzsøŽPºÙ±3ý3 ½µ»ð'‰óŒrü†^Û/c"UÄc uZ*"ÏM2ä^8kCNqŸvӤ톃u9ËH€ /…‰#Ê´ë0;qð³%«ù)Š1¨C0}6øŸõ,’-3`}gï:øúÙ|Yƒ…ˆ“&ŒÞÙmw›½ÖÁ×–Ä‚h`ÉV—»S#Є @á¡ã5¯Ùm@ݬx@A»Í§ÇX _M%êà´ºE(‰jÇíÄí¥4°„Ñ’Ó|»ín7‘`'çÿÐAŒWÒ´‚õívkaNŒ«š€H‹õ{^³Ûnw›W—¹Ò¥¹ɳùŸ’+ä8™rÝnöZo~BNqD™ºgœ#³”¨ƒÿÍ¡Í¢Hòœ ëÝ)ó8¡ð2}6ÿo”$r3ÞD¥ZcV³Ýn,†¯f;˜éƒœJÑ 4L¤]³šg·Ù&¿Œa¢`&¬ïlñŒ‚ %þA³†òeKVñ@à’§yv›Åc"×"uðŸÀ#Ž@³ã4ßn·$+x (çÛí6{}öƤV¢þK¯|@H M;AÂ[N—6•ˆƒ’K7áÁbë5Tæ1˜s•>›ß»yòjò6ªü«›„jy¾*©àÅX$6–R®˜¦%Y±K0}6æPLÝ’Õ|z¬–ˆ¸­Füç>Xd¾çµ•åcBÁUòlþ)W‘l1{cT<(T5(VŒæÛíV£þK.… •ïyÓ8G  `¸ŸÍßÙl~G‡¯,AkÔÁÿ)Ö€‘¦[Vóì*ÊD–œæÙì&ˆPÁEêàŸæ+–ÀtÙìµþAÙX@ãLsN耱q2­1?“*[„¦–¬&k]hH8}6ИóÕ÷aò™§a`8Ì@œŸ;c˜òZhÄhµ¹;=Ùˆ¨¥Dü+˜£÷šéÉFÉ¥›øhΈÑûúìar@ybÇks¦¤è£€6ôh^u®’ÿ ^´ät&FCìÚ|Ñ +-ìP‰ùêk6›¦åÀfúlþoãdÚ5«ÉÚ¨ò¢A¤ºý  T½Y½Y.Ø¡ó=¯Ócì3Y8Š'=ƶ€m Í—ëëßÕæ)УI“.o¡IºUˆóG–1ºÌ}ùW®a}Íó»ÚÜ•’sרóC)H'¿Cl0eÀúšç— °Rÿ,…".Û²zçZ#>{Ø[S @ÈNüwH¹ L׬Î>q½ŒeÕ+živHÔ@›ãa˜P½XAiÍyͳù==Î:A&¨BœoŠù4Pª_}󻚜}&èX"Îÿ hR¬<;*2\p:xM¢ƒåÖ•Hü«=X®b4L‚‹†„’ÿ¢€àG vç©Ëb/ÁôÁ¿h• spüAvúàÄ€ï¨!•1H1¤ªh@Ñ@„¦´wÀP‰¥(!0€!@@ø!³\éÁÖñÐÓSì!rxÈ^©µÌµŒŠ]aU#aÃ2˜K\býSèW —ÌM7Nÿµu ê>¬;T¡]I¾ƒ›½*´•.øN¨)·j¸Ÿ:(V\…¶R2>ˆjª®ï!\éÊUCßk á[SõµoÑ”ö AtòÌRI7 YôÇÂCA´[Xª‡P‘p! †|A„Fõ0]ÜÛIº$ãÿÑ…O=´p¤;n‹ê¿Å j7S÷ÅèåÂq¹ƒw$:í¡¾p‡.ìÒjÐãú ê³n©Ðõ\õðÆ/A4Áœ÷CH7{Û&ˆÇæ¼ù„è¡6Âü "Z * ܧS~ â[l+u¼DÃpãŠYØÃð s:ˆÀÄ“H‡mô062Aü—ØE‡~S[ï¡5ÊñodÇî¢qšöUÏî¡2Ë1,n~øŽ +-Aù=4Š3¨·ðÌq2GX ì:´!gèCQëUž18ÓÓ¦˜UeÑñÕÔ“—´tÖ;έ&ˆc? Y ØX¡`ª "¨¸ZoågÔ;2 ,ÉŽ£’TëÌKLØÃò–ø|6A<ý­Ô˜;¬’Æo–‘B“Ë„È¿ÈïKZ:ÂaÑÀ’Ô¡äÞÈé$Íú‡Ã#3LÃ’MÂᇊ¿²ïQ !–øX~È /QÔKRf£\ +-KiŽ¦|u8:>àÀ +-; ¡žÀ’^¦ãKj3uZ´©2&,Ùu| nÌ \áõþÀµYpÕØÂ’+®ãKˆä<ïÚo’f‡óe|o—0«dÑ*Íø¡¸üÕCî—¹î÷¢ß‰—€ž§Ÿ*1ƒM*äY®YýÖ1iŸ0à•ÜãùIŒ°Í 4› _Т>Vª9Bt’¹([‹=rÄ$W-H  «œC˜+‘ã7×Át3 Dtõõö ¥îb¸0¡~C(pªÐætJ°†Œ“˜lËG€êƒÿRìÁÀÊLdžúl¾+'’H»æ—‘ºUhólAäSK–AÑðÅLü‡V9I¨¶œŽYy£Îg)T €éšk¦%;[Ø1zçù5Z<Ãb|ñ2NbÀúzŽ Z#Î?É ¤XÁºö‰œ¸¥@›/ƒ0îüž&g!¸Uˆó{Ëê÷¬ÞaT(°DœŸºM Y²˜¦éÁB Ó5«Ë"ïEêàÑè¾ÖÁÖ3ÔgóG­ôÎïktøªbBfòàwQ2­9«w~WŸ¿Õ“/IáíàƒT ˆ„ni'þ[ù… õ{V¯‹;—ˆóY %Ô¯®Þ™(¸pËéõ¾N“³-3“ï”8XhÆèõNƒà`¡£×û®>{§Êa +-€Pä¥kVïûž&kÀêƒ3\,«`}½ïk´xFeÃáEêü]ñD&Œ^ï*œ€d´kF}ðß¡ KN`‘·DœOûu(ÀŽu/5AnÀÈK×|€—m~CñŒŠ_B©ƒ#ðŠ'2è1Mó13yð_A"­9—·Ð íàƒiqlÒŒO2žÚòÙ;UZ,°BœpášÕ0*Z"Î?ͬ)êuÚ\#E0ÀÁÿŒÀÔ˜Ójuúì’ s*ÐæYhÄhõZ=âü •™°®^«Ñ㬂ŽŸÌÔÁP½çôZ6w_D(P¶‰¤ ÷³¼`h‰8ßs¢¡S +-ð\"Î߈Z»"Š ×%d"Å +-ÖÕkuº¼u ÖNÜ4 òÔ’ÓêµZ_U6`¤Î òÒ-§Õkõ³¼ÈY¡Í_-X”¤Í5Se…Â*´16iÆhõz&g[<~2SçC`Éèõz&kÕïY½^«ÏÞi¢NÚ|ÜÒš³z½^ëaô˜†…×@âüWO#åF¯÷5ÇZmî?è–ŒV«ÑäíÓÃ$ –YPP}ðƒV9Š5¬-w]²Rç›fÀÑn½c…6?ÔÚH™ £ÍÝhrÂvêà“mBä%&g9?­‹iV +-ð\¢Íw5l¬Ðˆõ´:}þVKˆ:Õÿ¤ˆŽ–,V ¸¡<øM)š¬mé€H u¾ŽXRýžÓjµ>Ʋ0À‚£ÕjõSBTX6?ááÔ’ÑR‰™©ó ˜Ä€Á2'Ð-H;yp G;F[Q2x®çC\¸å´šdÀ’i¹û"B‘rÅ69|¯ç;p°ÐŒÅ4+`$ÎÇ éšÓ€Å¨Q B!ÆŠ!lá'å¸ë@ Œ‚ˆ†`€‚á@PšéÐiÌêPt:¢2ãùó;4JaV\ü0*myج@hGŠ‡t Áƒ÷C”'§7äÂC÷£F¹dNâ:j:é{ˆ‡x«ì¼f€^xø7è’¼¼tä¬ê¢IàahŽ|˜/s ]™•ÀØí0Kèµ?tUq<˜éêExX˜?ÔM¶z»2NÂï~ˆ”­FQæç.Ú@@§?<Ù~Xà=É$Üy;ZÜõó!¢ªî0— ýH7P>°Dòçñy3ª#¿ªrVå´]?k1æÇLWvEL”C¶x #¢]¾KDz¨˜¿‘àÃû~HAw-QÈ7=FÅ>ke £rÓ¼„ZìeÉ› +-rÓòV†”%ï >”Øô—œ%Èü€åa ¦ "ñ-Êu³ªîH¬·D¡s›Õl¯J‡»^¾Rù*WŸÈ6·YuD€Øt"ÿo5 !\I ;$™¦¦ƒ@[uH•‘ºÄ] †¼î‡}È®á%uŸ{ÁÿG.;<«É’ø>ÂKŠ0èˆÙµ{W²'°`d²±OnbþÓ±Ý×úUÜHê’õëÃNšäAGï%Þß”S2[™iÓ÷ÁøŒ²êd–ÌV(ŠOªÖÙŒÐìpÁ%³•{LNÄéåÜÁ K¸ËµÊ$>tnä}£Æ-I·‰è aœÞi+úHËC…°Cb9yqì’±³“fEíž´é’àôjfK+$“®ÈzÞz·˜ç¶=ÞÀZÂc|Yìem£àôIJú'²´¥ŠœîàJÀgÀëÀ$/WùÏÐÍÒÿ6 A|N§Óh²¶Åè€ Úü(·ŒV§uñL'l=! Kyð¼˜2#ÖIœ¯@àÄú’ÎJœ_£@0õs©þaÎæFC+´ù¾c‹6«À`@‚ê7¦¤ʃë,–Ö°î’°dÇP_ˆóK²¢]3º%Úü”b¾á_…F¬×NÏ‚™¨™:ŸÁÔkfX¡Í€té–Ñê4zœe1ÐCm>‚ƒQA–ë‚ 0+uþ‰ 8ÁÀÿ¤rÄ’ð,sr±Ó:; `#Î7*4â3Z7‡¯L …Ô'ÃØ(«ÎcEIÌ׬£Ïcm‹±ç +-m>,å–u´^®‘²Äº”­v,Øñ­úà:Z7×p> +-@…I øŒFëäíÓ6Úüt×ü¥*ÜN«ÁKv¬£Ñgq‹·Á’ëi4 ´ù´`ò¥[žâ*LdÀgtZ"Fâ|ÕŠ5|F§uòÖÙáCm¾DH”[F§Ñ¹>z=t8µd=>‡¯LŒ…ÔõtZg›H¦^3:6{¥#4S'9‹¥5<ÀVâ|…¢ +-˜„‚Vâ|žÙñ9 6ÚüÛ°…€îÀƒ¿tËz‡ƒ+´Ùb’ +-8z-Ž]ÉXH}pƒMÈÕ3¶hÉ/dLR:Œ”™˜’áíÔùGç6@Œ´ù&›€14+òŸE`j$¼¹Ð˜hósK°YGŸÅ3)º”oõ8h½T¥[ƒØñ­›¿U¥›‰óuP®á³Ž>‡gR^ºÝ(26Ú|ÚĈ´Æ¬ÁØæÆnÂ;ž[2XfiCu~Fc­S¨¬~Ëçsù[URÌHœÏœ ›õ3¹ ùå ÌÔ¼øÁD›_Pó­*W<ÛçÑ¡ÂcÀ¤´&‡êüH”E#W}pŸ‡ —|Ö Ì&P½å³n_Q,p§ÎWí6šYnA´ù8âÒ6ëç²—JB1+q~Îå6ëzÙK ÎJœÿY1èg2…²ú5ëú9l}=|@¹d]?“µ- ¬.‚ý¼Ô”uôyœmnìVÜ`bdê5ëúYL“‚¡;ð|cË–üm~€×¨a™AÌ©ªˆAaF Œå< @Qd ` ^  @VõÖtA\¢šÝÁä½(AœÛù æ jiýÊŠ¸RU åcÑJ>¡|y°V>>‘j²ß²Qèa¥1¨¸¢càCKÄb›“»AÃû‰ü¥šƒÿ÷|ë?T'ÑH©µNbuóƒY0ÔvZÿà»"ÝÑ®Z Ù #•=+†âÐæ[ŽÇDƒóé—õ&xdŒ&ÀSÙñШ'ÉsVƒÓ~؇†y”¶zš”3&Í’Íd иöˆJÃÄ Yµ›7QæŒ\„gäÉñx°‹Có ifîK€ò¬ÜíCת>æïJªmcèYl%V¿òA#cS¹AÀV£gÚHpÿŽ%L…4Îë“vI¤†Ã³¤ÌÊ DLq»l Ê.<Ë,¹o#6o<´KøøàYŒRÈÀ,ËȵÉ"Wy$('þô2ÚVçúVf9 ÑeY¯ýàË5·ö ¾@ÓoYC ­@[£Xw×ùåY n'rŒ%r0ŒêÚÉ®dUxÑ[‚™Ë Ï•ïÛ˜-0šAçÝL¬‘ÇL$RÅ2°óË: +-XŽ…w»Y|¤ŠÀؽ"ó +-B0TwO~Ï¡P:^X¤ézöî¯'4"[FugaÓï[ YÓÖ]_7?ئž}ŸÒõfp~bcžZ1RªEïø‹7×_U¿#ŠŠcëmÅ;ÈdTùŽ$$nÇ/b«Å=·I}η#¶Rù݈z5IÊFlueà|©øªÑ9G\*Ç/®¬­¬›¯ÃH™ +Ø`P}>Ù<1#q>Æ‚¬Ø|6‹±+EªóñË÷á›Ïe°Ì²âvê|(wl>0qþÎ@‹vl>›Ã4*E…”çÃÔÏçò7&‰ó= +-ŬØ|6½S`l´ùˆ'Èî|&w£ !œBó5ëgçç,Ùñ™·úà’Òšò™àÔùÏ-ù¬+x¾Ë,¦YÉPHyp‰0'D'Î7®n—Íe1–EcáÀó B`ºã²yÜ…9 m~Q…&|‘;u¾t;.›É^*IÙ\[O*n&ÎçhÑÊ,+n&Ž¸l&ci$Î_(À‚—Íå0M +-†Õù¿—îØl&{§#À„Ñæ`΄Ëf³8ÛÜ`P}pÙª—l6“»/H„^² M¬[h‡C „W˜È€Ëfó˜ íph}ðÙIÕ[>›ÉÝ—ßKæòXÛb€!åù@’jVÕ»±pÐù°#S/ÇNåÁ7ä +-¨Î¯ùàp'Îyyp…pð “h+qþ‡åàÝ€…ðå°VÚ|‚`l´ù©\£™URÌH›¯ÑÌr8µâ²™ì­’D›_6“k¤"`!Ü‚9FuþëW/­ß¦Fžò| ‚-ÔÃÂ)”U§±E&ˆù’Íe±¶…c§úà F¦^²¹<満< +-Y )Ï70 ™6ŸöಠeÕ;&'ˆ6?»…zÔ”ÄTÉbn´âÄúe}ðBïÂ$%`!Ü[%ÂBx  +-°`Ãäò˜\/h(ȆÉD”™åÄŒ¤b0Т“Ëãî ˆ¯ÂmD”+˜\&eLV½Ž§V\.‹¹/ ¬^.e¾ä2|E‰r]>X¼ü€oƆ•*c¾esÕù¤5ä€Æ¨q•bŠ)@`!aDÀ $Õ`aŒ‚!@‚€ € € !`Œ€ &Ýþ»ÛŒöáÙ éªT§¦”lY(R–°Qáy"AáƼ€SR"¨Š{PÿÃFU8à `Œ‚€! ¢•‚¬(r¸QVø%€˜4’.‘‚`~9´È¯}xŽhãH@‚±@éÝ5´âöÅóá˜xVh8hõ~‹¼ÊÛ²gª¢HG«è‡gÅp +- 5øZ“†=”n«*Dï^¦€ +-•Ÿ^À €´kÄÐUëC„Üýa¤UµE‘?ý¸?MBí•äâ€Ú^ B¥²Ÿzˆ]vK…ü˜‚‰Pº‰5l“â²Ó—@¼ +-”®±fzè˜f~ÔHøµ‚ 2£~ž +-Ò%8Œ~˜|äâÕóz°E`}\\áú2AaŠ‹=dg+ÜÔVâ‰]Â}3a›)ƒ^&râK‡ÀlŽ›p#@d3-™ ߊdþšéÏ|µÃÉ3`áŽÝ/ÏÂY“†¤„ì!™Š?‚àCêdÉ«¾ŠÙSìDww<~ö°‘OÐÉ…Ê€<šðY‹eÊkLŽ¥“%ËôŠ{Rß78Úኬùàµú`Ff×ÝPYCô"KÜ0£­Øu74v ]jt€>JÓGú]„Óç„öá-="iÿËÜ98Xð”®Øðžã´wh6§,Ö$ÚásÂHµkKW-çhÛÎ jô´ìÝŠá)½A(dÞöºÚÛ²ðæAÚGPöbÏeâTÜÚàžòOºfIý!`¨£Ýðß¼d":+J\áL§Ë5}¿·–z(mêG(„gŸssqr%2[—Š“ëW<k[4ª^ñ8Ì}qXy>1eæ+èJ<°<¿ƒe:òs}þI'¼@8§@€‘M,x<c›`!<ƒ©5ⱸ†Š@&A—b"œ6¿W”ñØzRQ#m¾ªó” ¨‘6ß â°×z2¤6–È —æ+g˜Äió?-ˆä´‡»S‘ŸëóiÀbñ—f@‰óA#S¤åùb0¶Y@gâü07 +-æ•1$­ÓÀªóC1¡ÉfT«èØt>>¢ ]<R"Ù€koåùV¨1Ÿ6`iõ†Å_–Œœ‰ó]?‘i7,™Wo8ìQ¹¸•8ßà ‹ÃܤÃÊó 8¥Æ +-Í7ö~D¥"®Ï7é–CÚhÓQ5x@µ N†Ýª‹Ã51Ê ,„o´dÁâpŒ‰€˜_õ<\¶`q¸Ëù p„È´ƒµOŽüÄùÈnX æF?RO²Y¨ ‰p\F5"ðÁ 8©$@¸l'ÅëpIB´>#@&ÂWÌ™b´‘ ((m ¨Â‚ b&JdjÂbpV†Â‰ó_PkÂb°öiÌQ€ª¨¡!bÑ@˜Dx†¡»;Àð@ c Ša†à_ ø×Ñ ±2MØÐâÀ¸BJ/PíW ññîh W»¸ •~ñkVÒic²±¤¢R†;û5 É|ËåWÝž[¢Ù¡†2hÓ•.:•½ 6&Xд<Ñ9óº§; ¡†\Õìì‹(ãÒeDÒÇ…D`j¬Ã‚DªPµà;õ#ÿî-Éúõ WÖF©²B°‹yVÓ ñ¢U(QèVÞv&”U¡IVâ—ˆ´ €búÀQ²õÚìÖ'LPpäïãð‚ +-påU©'$Œêy ²%^eߤo¾ˆ!Ðó6a$ègDd,¼úÎ)Æ2v¬àg1a¥0ü°Ûˆ‘e o\‰+]ôÀ%B"~h|È-Óf®<÷Çõ¹í(æCÁuȈ ElÁ»ðÚ +-y(E€dh‰/0TÈÃÚB]ô¿ÀÆ|Hâ1§?Jž‡ôôm™„'×î«©ª«ÄÚŸr¿`o+")å~Á^l3@i3‘ ¦ ×\™µnЉn¿àoöiÌOœ?D±Ö€Á!<7B³_0xûÒSuþ +-Í7 îVI€ ?‰hy¾FKö{þíBeæ×Ä$¾@øC‡Ëo£=UçW \½apÍʇ„á‚Ã_-ôÈpÐù25à°w&ÅÂFÚŒP»àð7Û²¡pâ| Iµþb›¸ÒÆ VfM„7|DµÞo KñFÚ$P”Ät¿ßnL‚ Çz¿ÌkÍ÷Ë-²Ðx¿ßí ²§ê|Q¦µæûíVPíì] +-ˆ…ð˜í쥙r¿àš« +-iCá +- +-äLœ¢HáϬüÕB;çÓà +-4±^ðw â[y>”k øÛ¥"p}~n„j¿à¯V°”é~¿]a,„; _¶_°KRí~Á5Wfœ_Á¼v¿^môƒwÀù0È^ªó `[4t¥*I×ç»h½ßîUÅ¢6Ú …p/i“ Ù.Vf¢¼NH6EÁ€3ëýÖ`hèLœÏõz¹1 ‚¯ÏyÑz¿5W• i³ò…Àlg"ü‡€Êõ2¡Yï·†&äåRH´>Ÿ¦æëͺt0 8ÿBåZóõj_¬Ý¯w+M>¬<_¶†ëõr«Êàëóy(Ù÷~»–.'2Üšš,´9ÓõÖÐ(ÐÀ•6?ÔmMÍv*Áòü]4[ãå6|Dµ5^®Ì‰€‘”nkj¸U%áóK9šow¦Y¼‘6&2\o&ÄAÕùÄk×[“…Pœ±2Sã­É>9Nœz±<cZ0>³5Þš™ icð”n½Þ®Œ  ôH·'.Yï·ffå¢6Ú PüZžOð4 ` +-€®¨ÁB©€«A;ã¼f`Aˆb( h€ p‚€ 8 Øçy“*ÌjâºÁ¢xÅ|XÄEPD£…Šéä,laSrÃëä)YQKŒÅ­b WRùÿ¦sƒíÍÌF²wË`6ˆ-k–R†/@«„æŽwZ2¥#Â{˜.¹á˜ÞA%SzÞÚ“¢ñ]øz"y€)¡ÞmJ•Ûd¥s1¥s“0šC=Yé4þÓ¿("¿5LéÇ„é›èN`® ñOœ[é€cf:cPCvÍ,âh€¾ü){DŽ•n8øLgU9MÖ^H# N£â*m÷<”à•qã2 ã ýXòXXä±ùâ/P*Y.:+ìèCí’Ã%N"‰}7®Ä½ UŠK 0߸·7t ˜ÛÑg„9Ò3‚Õ’V”ˆG»_Ô8…2?@*ŽÂ1Á3ê-†Çñ³*™œ˜~W¸$Y²˜E$A€Î‰“–Ã%¸­²ÈίƒY"9\b¦F»!Ðê3‡KpÚȲåZÑ-ŽË<>è¢4˜ )s„)Ò Y=öƒÓZŒµFÌϯVbË/.œ‡ xQbÜŽ†ÕCndÐb…ë(½µ:[=;ãÂ}*½µâJ±¡tWÓ£‡ÓQøȸpšå”#xVn^ôî"Š£ËdãÄ=…ãXªºôÖ7fsiñd¬·V[ßØ QªŠb‘°˜@7 )ÜÔÒyatT!÷¢€€=$Œ¶ÛÝN›3Ýî5…8áÕmM7ëÒÅ>9L›O# råÂð©:_Áø,™xþCòºraá°c~ÚüËÌC‚åùÆçÊ•[ÃaÁ¸‘6B“˜mM{Ã`™áÖp»]­4Åvk¶1K QRÕv¹4Nm·v±råv¹× šÉ®:sÊ;\>¿[³•9 ýê¶ÛÕ¾ 8FAi3dZ¹5]š–¸ÒÆ@‚„ºív³QÞçç6Zhº5\+Ê0Â=¢ÙnͶª àúüW–âm„'a²Ü-MFóºåj«&¯ÏwÒp¹Ù)‚ˆUç¿ {)Îçn­Ì +-YçδhàJ‰Ž ŠÁÃËåÚPŸ-¹Ò&4#¦„8¤:_ÄâúÅÛÿ¡Ø€™m—{mfá"R-—‹uùà¡8_£e†ÛÝÆ,…0ЧávTâ,ôA\h´Ú™ç1?mŠ,Víò‚Õjgž¯‰ª€e5»ÕÊDi´ZhG~Ú|®@3@Ëó\µÛì”D¢åùQ,(AÀIŒv«µª ‰pߘìvKí`8m~–ª àòü™-7;E Ñòü(v»¥qñà¡8?FËÝZ™ÄYçn€§¨ñ2Ĺak&¥¼°XƒA@ÀA@  Á ýKÔ&Ý_€Í: “Îu¢×ù×Ý\â¾Þg%–4¢–ܲ™½T6sIZÀÍ oì`ºõtÌ”ÒPpã¤øms´}ƒvvòºpTM+ :—˜‡'‡*è\‚û8Ño;?ç•Â øãc&{‹†J[Jg hÚo€¡KÒߊãVÄô#ß a\Ç šž[œ€þ^ ;ŽIHÙôÁšàa#㈹°Æã'@¥‹~€C·HÉ|¬U;7Ç•g°ŒB=7OÂ#pÆz™ÖˆISksýžæšÂËÈ“Í׊”æ ‡.|7¨N{íé)šÆ¢)5†Lš²ê¸zÙP3I)´[Æ g¢¡˜E+ñ¨Y+UÌdá×z4 Œ€Â¤FcŠ‘¡˜M +-Rúÿª%o–šIÛÅ!3•‹®Ü—ºº¨›i1û>©,#î°4þô-"‹²Q×ÂtqzxiÌ‚c Â©=CLzüèh»t‡Cº~š´‡;uéþ5€Hôa`g:JôâŒ{è&ô-Œ)ŸvJûkoÔP'_—1-<UD©Üå2 +-Áf®î`€:Û¡Ò¶‡æ‘)©%†ÂC“Ö–u=†Kî°ÀC‰Ö‘^Š©´Ü ûÚöpÂá(î{UF êv"wcƒ‚#,6^Dø|‡sF«ÅF‘ (ÎW0>g´Z—j¢Èh·Ùª Åëó;¬)v«µ®\ÔD¸A»Õ^À‘pšEŠ I‹}9àâ|hB6æD@è+S^ èJ ®€‚+ĪóQŸ… J… ôµÚ'‡‚i#‰Xu¾AS –ç( àšÍÒDAx¨Í7˜ÉfgžFÓf¤ŠÕbYÊa ôy.4ÙìUŽ´ÁÉji`DTßâB£Õ^[6r¥Í«ÍÆ0+d ¯ÍV—@ÿ”¡3Zí ô˜›6-!½çψ)2Úm–ª Ðò|•O»ÕZ›·¾ +-X¬LˆCŠƒÍÎD8p>ƒt&‹•a¡Éb«(ÃèS.ÏÏm´X³ÙëÓ¸`Úh(¸f³3ÏŽÜ´.«Ø,ÍtDJ¥Éf­,E›·P ½„ô8ÿ´ó€ á,”  _BÅj±¥ËµùO á¾$ 6+³rQ á1Y-6ÒìŒôe;3µÒÐÈ°dØDxJ ÍõéÁpÚPi°×—+–¦ +-°¬Ò`g^øRœ¡ƒÅ^¡ §óŠÅZ›`f°4Ô’ ÏŸÒàX¬µe#G±Øëó˜›6&Tš,ÁoÕù/32€ +-¬XìÕiT(mh²4"03Ylõd@耱¨ðH`$ ‘;æ¤ìà@†Áˆa€ hÞæh~a@Då-°¶¤ÄÃî +- y%.pô R,ÔÅWÀB©<³qiLŽ¼f•Êdyô}'˜6‚±ëÄ`R+Õ0½oû,ø9XkÏ£0½-£Ptªtm6&®\žˆ¥ƒÍ¾Û^4ÊY{6Ø"–îwûu_à²W(àȯD›Ù`ŸÜ¢? ,¿°×@D;XÐ<òxæVÛ¨eEÕkr•îÁa™E]#š¥ûA±($CÉ¥›¤tmËtKóð[2iÐ}T'VÄÅ•V(œ€ž5´Õ î@½Zà @Þ¡ÑÁ'æêÞí¯—È;Rq_z?{3Úé'Éñ-%ÿ˜ÆÏùÖ~wˆãA4oÌC¡/—ñ zã9ö÷¡Í"Aû†,â*Šö +-õÈM§•†&f£&Âi¨&žcm1#áM8nªÎ™™‰ifØDx ƒ%ffæJs…Pq~²)33c¡R™‘é´€Jé•æª3¶ÈÌÌTS,d Ocz<­4 OëÌ õd@ÂçSgh¬PÔæ' Q¨33Ö™™j +-YGºXif¦-`é•æyHq?÷€Zg®S +-„Ï¿ÎX¡»ÓfÀ ufF¦Å¨#m8œ233TfE ôƒ­Î–Lgh¬Ñ'FdräH8΀™™™ è÷D¯4Wi`«ó%H¤WšëKÒ!ÅùTbffdhá¢[ FM„?DŒU§³zµ.§VëUæÙ‘›püj…Q[o@AÌÕó=¯ ¤Ö« Ž›r§ÌÌUš èòü–˜ë•z2½^eZŒ ¥ô:cíxÊÌ\§K¯Ï7-23×)…‰ô:#óôÈM'ÓëŒ G‹ÌÌ õD쀚¨ÐHdf ` ±@x@à´ø`Q€ !†@ ‚u€?ŒRĪ^\L%äRª!¢²¹@5òÆ)¥èr+ ([zˆÀír|è|Š&ûg®íRÔCÛCYr¬Aº8Ûjon3ýÝ +-£äš<ꃨ‡Ó÷ÜG„€ÐB­7¸  +-ÑÓq—ô4|wá¾8ÂÇ¡œá_bâ^|â)YM%sùÎI¨tuò¨Œ†èDOuoË·Ñ +- W¦uM’SRcÐln•2EÇŒœkñµÀC#¬…Y\L†ÒO¨6yE" =c@ÓÅ£<Áȸɲ!®®/½óŸyUGZãìv rÆÒäÙÅ(:F ÝNƒÄm±•Eg×âãÆB˜‡LÜ`¨f¯ø 3&Ü6fí¥—IQ>Ãþæ/J üºtŽjñ˜éŸeg ÒNÚ…ƒÆéq®£¡­.CÞל†VzëÝPD{¨„RWiâŠô˜Å©ð,w㽪&8ïéèc ‡K‡Ü õÈL¨ÏÄÚÑðZì;µÒõYIpiŠóZ1´%pIx F«“öèè ^B³'`y¶ÌÓ“ÿÛÚ=›ä*gL‚Ø!€q€º7Ä ‡ã„‚ƒ…Ñ'ºPÂ(L¤2V*K› ÁBµÊHM(<Ÿ¤3²t$\ù"c­Â$¶:ß5‘FÆJmnàF¸AµÅ¨@ÂŽ-U«Ì I€Vço4©V© .É‹Œ5ÆyÌK8^Ê;œ1V™e€Vço4«V«ÔDøò|áRjµV›2Ö˜«A %¼jqI>¤8SéRÌóO¤22Ó³Ðá6<ä3Æ épb OdNed¦(DèCc¬1PdµáôB\b¬1O$ï´10¨@™ÊÈL™f O»P¡ÊÈHO† Ÿo`ÀàñŒ±Æ¸$})NêAÄ%ÆãôÈMŒZ/®8c¬2%¼¥öù0110ËaÂç{8©1Ô'Hjó¬ÆP[:rÓ&&FÊ´˜…~Ê4&¦„Á£`T@•©B“¾G!â#CUÀ¡#á/11Ó•¢M„`¡Êļ(°:Ÿ…*ÆÈPY4ŒðhŒLÎ@“*ÍX™ÊļP”ÀÈÈLUŠ6.Sm1ÈÔ†ú¿Ç Ã +-@‚°„q‚xä&ü¥sR‘ðù3 ¦4¦úRBàù1ÔgHµñ%¡Õ˜iÓ@n„•ÑjŒ4£ú1Õ(‰Uçk¬Lcª.#¿U§3UÉ°‰p—jÌ”e7ÂuÍi iLõ%AÐÕù%/Uj µ¥c!€¨àÐ0‘@xF•”ó`°(Šƒ‚€‚þ"€)àŸÈÙ¡k#.¤•vì¥ßŠ.~±UÒjÕ¶—`ÈîZ@P+­T«¾×ì•‚ª»fÔ̸öö˜w¾É´Eán¨À5@‰açgâ.¹j‚Ö†ÛDÖ!®uZîâ¨D-úÖdK$£f‘µÀP»–*;×7¦Ö²•Ÿ§FɺB*|^\߇ö›éÔr<«Ôð»,jÍZBï>ɒʧÙ,h£¸à}ÌSÊbì:âúë·Sž ÿ–†WÊKhùO(ñÊiø°gàMÒ®#nÔ,°¼õZj‚jYR¹¡oòLÀþZñÑDÖó©‘ Ÿ¸J¦¾È짬ššz4x +-ÌñåWÇ›'²x âÃ@­‰E|ÛH|.]Bá.‹éÏ…—¡ˆYÔÎ>ÀˆWÂÚ„ö¡%<ý±péCÂmð©Ðêo5áÌÛ*®z8æL|vÿ䧸Ñ)¢ G²  /4®B ìäᴪ̢YPADu‚«¬M ú'‹\ÝH+³°qÁ¬©âa¤%WŒUTSv:Vzˆ§1X_}*ÙiÀ‡"Q¬ÒÃìÌÖÃÁUé¡wgùÔQA<ÓC,´Éø'ªYb„l >uBX2Zkð”ŸU;ÊïT¤õï²!W£ƒ‚ƒƒ+ .Ô* Óbú½'µ*eÙ0§թócwÚ,_ªÔh ‚§úR"T0­N[<L›iµTF©U˜b ô/˜0Uª ‰UgEZ¥rV#PjUªR¬…~J­JW +-ÜD¸´J}†8 60UjT luªNjÌTÁq¡„ 0©VaN†°Ï7¸i÷Ñ"…N§Ñêô™|Hqž8¿è”ú‚b!C:§T•7Î"¥Jx0˜L¢Tª‹2Øê K¢TªK‚ —Ç€£)¥J[m¼=*¾®ô¼½Ðž +-âfÊïu¥“@­MvõZû飔;)„Ô/=®¥¯–îa"±ë¿™òbŸè˜ˆ²8}ÞÕ ø-(+Í@/nº¬Q+¤jÕ¶‹Œswt^ꎲÎ-ÒJêäí¹'|— zz{yQ• #\ÄùóTN¸:%P˜—–˜ ¼Ó&¤åZ2æù,/0Ñ' T9áêø8(Q)ÇdÌó›4Ð_y‘¾ €J¥PX&.Rç‡%*…izä¦ÍæÀåbú*"*NGnÚœXÈ@¿FE! }ƒ/Ï’ 1öùL—— £çËK‹ÈoÅIð|‰*€¾DYŽyIAôåY"æù,Ñè èãœ//Α¬Î‰ Ì KG^ÚY^`\p*ÀVÇÃQ¬…~J›O*@ö8ŸXÅz åš@ÀËóW¢0.Ì [è«Da(ÅZè+p‰¶ ¶:C†Óæ²|ìN›dK4ÅåÅ…™aý•RAôå™@øò|èKtå¸PÂ)”Ñ–d„ŠSdº¼¸¨làF8CKôåiRûü!ìóQ /.*:$q¾D[@¤8$Η¨‚)Î ôÅe…CGÂ?šÑ#¬N +-4 +-=Á …¾ŠKô¹´þ…˳|F]TŒ:NÒui"{¨MKÔEÁ‡Æ 4 +-MÙÀp—¨sÅ%ú,&|> +-4 +-e¸‰ðŸˆ‚¨‹‚$„Š£tF]š ¨É3ê²bT(áȦKÔI2áò¨@£Ï—(4€—¨Àd˜ ‘…2%íˆaEÀ Á@ ==3âòžî´H©¬Øá¨S[Fã56l˜Øé¥C1S°Ø™ã>ÈtXX;!GšïpÉé™RTdMYjäN2u%²‹«c½Öî«pôÅhqèz<ËÓÓj–5Ÿýì2«†qu»cmïÀ5EÜäÖRJ >J Ñj; ‡éyñÃ$é™jªD‰¶«g&n+A ,àÍbúÇ2mŒš¸G¤‹±šA´Ž'äÖÞD× +- é¢5- +-Õ'˜à4“. }–©‹3.@›M[RìçjI@T`©c@†œÚjëšÙbðH³%‘]…XÁ{‚´ŒÔj1³áEΞ%6€®ówñ"“ðñq="lHƒÄg‰(.áá7{#i ”ÁmÉ0š-ñãpBÛ[Å%Og±%{Ð_J?áæg̃…I—Øš­`Kèw9Ö¡Ÿ{¬8¤µkô®m 3/J?ça©tj¶2f³q(.¡ÂçE¢Ž':iŽf¶Dõ£¸Äàfù ä@0†Â..Ñ4ë‡×°lÉÐÇŽN–AËg£1³25‹Šñ É,[,Õé;kxø9Kdz¯ ¯J;µ’º¶4ëpäq–-¾®!ÍJ{Z »ã…¤×]popoÍ_ŠsòtyB]Z”B¨‹³dóügô‰R´¹(HF¬8ÂgÔe嘛p‰O”}>“gªÂ¡áAZ¢. +-B|œ“'‹KÔ©"xþŠKôiR‘ðùL¨—¨‘ˆ'3êÂâÁ`Úx\V:rn +-$œå m&#V'4å mI0„y:TžP‚®Ž‰údjáÉ&ôÉ‚ì¡6 +- PÔ¦ÄéòL1á ,P—ÁVçéâ4!Æ@Ÿùtq. Ì@ M¨‹‚‘¬Ž'aXât"hq®|ðN›¤h,H_Šƒ ùt®8+H_Š“â|6P xþ²åÙ²D")H<)OgK 'Q}ªH¸/„åùd yPqœPç  ôUžÐ¥˜ç?¡ +-H„ž¿tB(¶Ð?Є>YB|)ŽèS¥ƒÁ„'h>S8 ŸÒòT`˜ðù*Î'KR‚ÕI àÙr’a ý,O§Šµay:SŽ¹ W*x:™¸®â|²€PqNZž-%2Ðß`:Ÿ +-H¼Œ)Îgs$Øê”´<[–4Ðgq:W@6#:²ât€œ¨GhÁ…wŠ1w=`p8À0@Á@°@  XеÈÃ@›WåÄf¶¿Ä8’M;sS½pr‹©(òCVfR›;Å‘,Ck¶vq~qR’/«nA”R*L\z*qƒ¿NãKószéqò¦jýÉ\«ˆŽ»\tôr&ëz|åTÎUðãT:ò‚;YÁBKV(¸#ʽʵ“{ŽL ŒÌ’§âr›qU9Ú:CoÑKÔ o!z­Ào‚ä¡(‰Æ9/ÜÅX)¥Æq;©¬¨ÈC1aÆùœ¬<“‡çtâ˜KöæÐ1³‚HÔÀ¡Íh.Þ:1·Q´lÍ0‰î³|óµ„Ûv +-ˆÍ†«_+Üè…w ð]W»“VÒ˜•Zæ´u‡Íš@Üî#›èk,Ú:2s@W!ù}ŽôÚQOS·¶¡®*«–•QŒÁbt›ÔdýRb¹ Š›ãΪö¢’Í |­·áµ„@¶ÒJÊ7ŸV… h+­f7‰‚7ÉVZù 3µâÊ[³`i5ÀI½1vê:›ë„LJ«p@s/­û„SZµã\Ãät–;¡M(­ÜrFž”¨L¯SéÞû؆£n¼t0ï ‹í± 1+MMµûÁÒ“âptÇšfceg)-N–¿Ug©ÀÙ,€Òâl’ €y¾‘Ùâ$&PàT°Ä¨…~K‹ÊGj#Ââlaº&FXœ-(¹ÎQàT`B`úN”–Î'Æ>Ÿç¡â|²„@¨8I–§S¥#7á«ÝiƒRàúƒÀVçDAËÊÈ„«óMš-,ÊŠ„Ïg*hQAB¨8$,-Íe†-ôCTZ0 ¦ÍM„Ÿ(hY º:¿¤ÙÒL@Œ}~Š* ¾–'ˆð+- +-˜Æ…²ÒÒ’Ò±;m”M§‚c$Xb+ÊaÂçw0› +-R>stream +-„0YVJŠ7n`€,€y °¬, (”pƒd +-‹J‚ èOVVHTXpË&FÉ +-KÊ`§ÍHÊJÊÈØçk˜¨¬œxøRœ”æ Ë󨬠 ¬N‰Ê +- +-HĪKRè6LTVN:8;ã2„éó8ù@YQ1AYQI€Q }ÞñDEeÉ‘‹0WRTÄ>_e夣w°!IYaF¬8%*,Ì­NrÁó7–+,(*Ž +-‹ +-É0öùÆZ裰¬¹þq¢’’àD%%†-ô;–*)%!(*L Ù‡Ã$%Å„ƒá´óüeGï€s`ÂÕù«)*' ?V‡„©‚tu~IŠŠS…)"æù»Óe%…ÄBöù½Ž“ ] /ÚB?eE¥$ã&Â;NVTL6r$üs%EI`úK•¥‘!€Š¨ÀH¤L‘…wÈ@(€p@ ,¼@ðACÀmôj0Šajåc•VU<ñ0Av¼¬L´\¢ðÄà xi£¶¦ ½‚U·LËKó\ÏkË=/¾wP¶{´º‡tiÀÄó®GщØÙyËõ{ñÐœx¸ïƒo®yðy£)kÔY†léfÂÛ ä†”à +-oÖÑ!ÉEVŠ—Ý›¹¥ä_ñÄNpàÜîîKc¨8*á+£‡0y¢ +-Ùx³ç+Ò–.Ô*RÞé•`Šüðqš‚g’iDòÎO׆ÛäHÔÊØwÚ»M«…™Š¹E4ÙÑ¡åS/<Œ¡Ú]+ˆ«À;P¥Ñ]ÑÊ>‹MF|¼#+ÕÅÃ.rº˜ÎÞù~€fg<Z;!€Ýa;D9ý#P 7Šªšë¢%ú‘ïøu8ÜŠHž–8²HNgÉvR¡NøF,©é¤‹¤·<;k'ÿMr©8ÖìÔ’ “üp†²[zHš Ø©%IPì:µ¤UrP¶¤tZ²DI[²=ÙeY£¤vK4¨ulÕ˜dK2ø™ÅbÁULuµÇ®Û—ÉãizR]MiM¾ô®#þÈíÎ)LˆE(»|¶¬ W¡~~›ÈI +-“äh’ÂL`„{,S˜J [è,S˜Ê‹ZèMR˜ +-àH80ä$…‰€(û(a2K ä¦M%E£„™bbDÀLA9Dðü)*KGÉT¦¨œ %X)*'*ÎBŠÊòØ€ÚP$QT˜#>ß@nÚ˜¾AK& +-‹èM˜(&L%†‡ ¥ÁXÂDIP7‘K&ÊHEìó7Lƒ‰';Ôf€J +-Ê Ïg¦,;RfÊ 2@«±â\(™)ˈÇ3å lu~FfŠÉÑ!ÅAIAIR¼<_£„É 8IAa2K4JÆ&Š2€—‘}> +-J‚: Y2OD† Ÿ¯qà„yr@øòü ¥È sty¾ ë3#Aašx@¨8#(Ì%ˆD«c``PT¢0O˜'!Á PPJ8v¨ÍæIRóü…(( 6LÈ%óddû|Ž&Š²Ž„ÿ>”''J…²DY†L x2”'' 6Ná% +-É JŽ†ƒÍPäÅäC¢ÕAp‚Rұ✠”t<¬8HNPJŽ>gäÅäãÇ꜠”{)ŽÈ s‰º<ßÀµ9rÂÙçŽiþR)¢0¯Š´DÎŽ’ö`Ùë zÒ›v.ˆë ”z- AótIKªàŽ- ùô.r¤AZâ9`»Äe5ô2xFoí±¥!{ô +-¶X¹#´Œ%¾A\yíÝ;zG3ßs+N/ö#íyc}ó=§;8ôóÚï¾Ny±ôÇ1 ®2m1É>[ˆÁ‰žæöc,¨8#&K¥±—Jšœ”xüXË¥Ò@jbrbÀåù$Ë¥rƒá´™(@²€ "x~Ê¥ÉQöÙ Yš ¸¸‰pˆŽK“ä0áS‰ ‚"Ž„{$X–„aÀ‰Œ ])Dðü"L8HɲˆàùL–$;ÔÆÀ ¤d™ @e‰Ò#èÊu(K€L¼<¿(’ H1WÂ$& B$))Á@Â$&%ÉŠØç#0)!P°˜8HLJDˆ²ÏçP.MFÐ@ßg¨À Àfñ…—!±0 Š‚‚ÿÿo1Š <=fHùÉßÈðf÷ñC<‰ÛC(í(…·j’1Ûü'ê+(ndx»æž­AÆöžêÀÆÎç„o«?ÐÞÑúað¾c–œ´¤²öïâÉßnOvfÕþz»Éí(Ÿc8@LŒÅõ¦ú`{)â‡Ö7ÒÒ¯í 8Á±$jëÙ¡ã +\ƒ­‡ 9©ôÅ[ß&Cîôí×ÓKx‹ôÚ8Gd!?¶7 Æ öηî]ÏÿyÉ1iÏ“=n†€#?Œ·žŸ,ñ¹¿§}ŽfrKÏ ÏmØû ìÓ®N=óM†úpîá–¨{Wu3°sXÕ3x6¢ê! +-Iˆ¡zmO¿Âõ"cGŽ²Ä¶zê+¼ßÝKÈñï¼ Ÿ8 Î#7h­—‚¢y©?´ sŽ7"|+ΰÀî 7 !Å"$5x)ŽIrÃAÅ1¨A@’Ì`@m <ˆp@°:!ÀP0m€#$#Æ_+‡# q!9J¸: 8@GÂÆ@„ÎÇH’°¸pŽ%‚ +-˜‡!CDIr€H ý % R@¯BjÐQ’„ +bŸßP!ûlŒ$PÆ>Ÿ§1’@y€8}# ”!>" ”I6‘AŠ—IWQ*E.p$’$@„$ H<¸:"J¥†A5 Ñ…÷”@‚)TÙëVª²—ÛLϲîÇúe‡?¤öédîÛO?¨gw?ÿ‰0-HrÉ”ÉØ ªÅt㢽ïgÃy`øàÏq¼‡ÿY¯ÿ~ôßTBÈÞÀžŸ¸ÿÁq•Rü{R¥þÑz™Äß«çÂôè(`Í—?jï·¥¿áèßÂäº{˜¿?xïo»^ôÁ|ü¡ŸØó¿F" eáéOµÿ°WcþèÆ ?» +-ý¬ ‘Ÿ5аÞÕ¯¿iï~”ãJÿüUy@µþǽeUôâ +-#†………­NÈÈHˆÅm„Cpˆ é"xFµÐ÷m$ŒxPÀ< Ãè÷48€`d@,‰`D@ìóQ»ŒFCŸ’‘!Ìó‹ !ÖD?Â8B2Ò|yþ…ÅmÀÕù:FHFŽ?WÇâ.t%<è1B"ÂÁê|b’Å…ÓÆ Ÿ¡2"2œ…þÆ‘äˆàùÈ$Ñ6âHŽ$®Î·@Šˆ -Œ"#I"Rd$äBgÚ<¬:È‘‘b~ÚÐè¥8»ÞdÁ  #d0 8##B0N›I«‘‘ ] A bŒh…ŒŒ„À‘p"F‰" D´:Ÿ""‚´È•pƒà1ù+@DF §ÐCdä@žŠ#Û ø ÉàpÄ@=#"°O߃Àx@äÀÆ«óG¶ +-ÓÆÀ`¢#)R §â0 x$EÅ݇¢#)’Ñâ ?’"È‹…Óæ˜ Ùx`u@,r%ü€IWaᜳÐç cŸ¿+"E’b o`P D$Ù1óü)’üÒBÿaã€ÈcÏ'""Büq$€¨ÐFBuÑ@xH€ ƒŒ¨€(þÿßÉCÀãAœbóhiÈ–½&íFÏ 0š‡iÈÅyÖçÍóìŽù(ƒõ¼=Ëá ”tåíúæ6ì=€å¥•< +-„›µ‡(ÛVóP…}WÍ£–4w”–d3/"ÿ4êL  ;ü)-„û©Õsßpßþ¶§mWôÀ=»²Óqƒ/zÐûœ;é!Ý{ø éeFŽ;å䢇x3›%öÍ!ß•¦‡Üµ=Ÿ@Èô(Ò@«ÏÆ7-Q¤Ã%I}e4vøÒí6»yy6†ÎÓ½8¯®‡¯÷4Iƾ ¾ü<ë%†kϯwÖ«‰‡–W=ƒÒõ02×uì92<Ø#kã¨Ò°#{hŠÿØ{ro;¶xÕAq4ÝS·vÕƒa*9…÷ä¼®^(„šAŸ~¢ë1¼a;çÞæÊ–žçÚ¹ÞŽµ´ØL{»É2×£áƒËUzò ÅH·ï ¤Ñw‘1ò„½íS¸$y C(i “ŒÁ—çI&?†5!"8~®Î'‚$“ D 700¬ŽÇ·~i@Âå¹ø8Ò!@úÆ !Ç Øç8Ð!`†L†pH x¾ÅGòÓ&£§âÈ83’  (Îñ@I@gÚ Hp°*n$bc-ô 4d BȤǰf $b>BƉè_|„ 1Ðw(‚äðò|¢GHHÇ›¨±¢Ñê ;BB<ˆ¹Òƈ<’ÑSq:B|;B|`0 8Æ C>,t¦ 2HŽ`Âç= €°Ï·è@‚…4„ÆòC¢Õ‘ÈãWÚAz{ª²ƒÀ‚‰ô £8@¤GÒAÌ•6¬ŽAÆGÒÀÁ‘Bú>BF ! ¬Îic`òQlHq(ŽÈ‹€”¨àdFb±@xF€…G€ð8Œˆàÿÿ”búì\Îü/ÆÜíZ¡t㣙]:r<†‘zww"4zw%öt¤iÕrfÓꀤi•åNaír+Àž4tç¯A‘¦•$‘l§YÔª‰{ýñïÐœÈs—AH²ŒÃ;^P«Ž#M«Ô;&Ó’…·­ŽÌù4Çbð¢ñ+ÞÖq{„•1Þ±~3ºÃRx>6¯ùfô;¤%΃zÈךïzø¤@k]ïásWÊK»Ã“A‹‡ÔÅ£Ü$…¿ÝcT$¤x˜+^TótÄ#UxŸ©€Y ‹P²<)ÉÃVHñ0MÎÃ=jé#åµZú­¼©—§£•”Ç¥3³Þ{iHyf9§'_)/-ƒ¶çWô+¼ç›jiki6 +-¦MnÀm„#x AŒ²ÐŸˆe| A6 x¾±‰< +-øm€ ? +-<°:G$²ƒ˜3m‚ H ^ŠCaAz\08"‘ +-§M€ äG†oÕ©¸‘ðHŸËC  b¤˜…¾AÀ Ž‹†ÇàãÃ8PÂ!ZáL„7`x€|`x€|û|ÎiÁ¢äÃ(¤‰pˆ ZFc®ôÒÁKq&8>@:  §ÄƈGÑ¡ârp#áÁ×çÇ oqüð00! ý‡ ð *jCÁáñq$.œ6½Uç6ÂY"\Áè8~xlc _ìøðÐø!xþÐøñÁ!À6ÂE‡UGÈñña$*œ6>>Ž9j¹N£0àáa$. 6GÜÃÃÀÐFÂ0Ž~F ` ô-Œ.ÏÀááap›0àq$*œ6¯‡ŒŽŽŒ‡Vçox|/x)ŽÇ¨BgÚT?>8„µîðùÇ `B€‰¨ÐhFÍá…Wˆ9«F`8 #h‚ÿÿï!à4ÀË·ƒëê.D\g6žÎ1ÛÓ9ðW•.]eÎÂñåÑÏN6§x#¾K¯¥¥K¿nn&Sº.½¶ÌÒGuTÄi›÷¾°téÿæp¸•Î*]:X j'\ºt!$ ¨ÇäχL߶?ÉúO ÝW¹Ë[º€¹¶Ú¡ydþî„ $$?V嶫ãBf·;Ò1V© thHÀÉ圬4Щc®0c}'+ HÓe.¶’cÓAË[tÀSˆ|-׉÷º;Dó}Iþ'gºÒX%#íɨ£ûÛï:ˆ¡µÔ1<üì3Øa*í¬]áõf"~êÈ'Å¿±©$÷hg ¶™¨ÞÕ¶®ZbcMx[¾Šv3©$qçÍF©–(§œñF’ôª%V<¶$qVv!‡mcìÍ »æêw¥ÁzgO*è[²æG6|F°›Ð ^L ÈvŸƒTÖœÄÇœpz~¼wü‚“† hàýA9Íš¸Dº6Äò†[Ãýñ¼áf‹ûá:•pÉÛcâBÖtá¹\“[âªw-;\rDŠ–î9B´ìpÿÇ…¸j‰n`kœ`ýŒ.3)YmrN+ÕªœC{ ·ý€ˆÓñ £Éãdˆ«ÐšÄ«=í r΢Ì]à„L$ç°,#Þ7Œ™Ü¦\ÿ>ŠJ혃r·P¾“|pàA¹®Š*1.·èG58Éø$¼Ä +-7)/BJLKDG9HLKF8-A 8FKKH='4DJKIA,JKIA. !9GKKGIKJ(>HKKE6;GKKG:#BJKJC0 5EJKI?* +-6EKKH?/BIKJC1" '=HKKF7,@IKJD43-FKKH<&)0CJKJBH?+ +-7EJKH>(AIJIC2%GJJ#: .&.@HIHA0%;FIIE&*0AIIE9(=,?GIHC37DIIF=' 3CHIG?,/#:EIIE:#GIID7EIIF;&1BHIH@.*>GIIC5 !8€Œ¨àd€‰1†FAj ÀH†a€ € øÿ  ? 0 —ðµ%i¸„Pà F½³øŒKhQ %8&‹ÚÐúЧ®¨-i-yR•QKüDmÉÃh]™ÂËo +-¼%¢mi®ÙÑbÑP«£šà–U ©´{)Ķ»ÓôÝæHš>,vš 5*ÝmÖs:­qhè^Û¼¶[¯Á?¡d'–ŽLsÁ+×ð.Èb'–^¤Và~.q«f!Q Ñ$Œ²í/yFªñ¡P L^Ê]¡±„¥ÂÐöˆ°–+^Û’&vLÚ­õ»Þgi%±¶tß¼‘­d]Kªjóhµtm>rL’·ófô”VÕÛà¦ìnK››Ž,­H·Ôªèèfi¥”VLvâØ,·Ž‡ ¿Ñ@»YZµ°µA¨yJd³ô©IiØöéà/„h Q(ääÅ#´iÄ•xÃÄ€ÒpØfëÐp. oxTÝ&…C_fnºG='X–"÷`~ +-`LäN›bFŒaCk@±@¿˜OåŠ +-˜AXÐÈòXž4ŠB +-œiƒ¡¡A "!„54.ÐF8 CÞÊs¡¡‘!@a¢¨¡Qœ`Ú h : hh¡¡¬‘60462ä©ŽAÔÆÀÀ ¸ÓÁ¡¢˜Q¬è¹>7 X ã ƒ@FF ÜD¯¢Õ0Ì(A|xðFÁ[i3“ P @Q@žêÄ", +-(Ø­<BŒ.ÔHø€b !¼"£@F…ƒëóƒ +-`LàLƒBö`‘QÀ""& |6`022ˆ1Nq‘‘A@‚FÚd``Xy~Â…TÇ 7q‘‘A €­´PÌ(Vø`!¼7,f+^ Í,‡A7²·Œ&Û±¶-M*&ãÿ(ãuÍ’ “áÒƒ.úfÑBדµÎªÙx›:-KÁ”éÌ(. ¥–´Ï:-‹þ':€h–õN¨ÚâOt°²Tï€Öp ÂÌ4ÙàQ[b¾ ÃŒ¢¶¤^3¦…@oï7Ã%ÃAŸ%E›A‡FÒ6»–ð£tÎo÷£¶dÜ3bŽ¶›a\’Ћ”—à|~{|¥ k'€FÅCÂÆÅ€×ç°ÀÀ Z``Xq'BoÀÆÅ€¨Å@ゆE[éGÄÀ @±êü +- ÂÝÊCƒø£‘6B²>ÄÀ¸°ÀÀ 0¡p´(-€N›EŒ¡Âs1"Fñ $ˆáÅ……pÇú|Ú¯ââÂbbAÕùº ÅÅE…„­´¸ 0ô%ˆ\\ЀÂ9¦[âÅ…E0w|9ÀBŸ àÄ1%UpG}Y#nE¢•ëÁñ¬@xÚgi¾!µe0½H.¼8ZÞZI«JТÚ;ý²Z´â´V rÙoªohZ¶NVvÒJ\+œ¢puuî4µµzA¸^ovfkŸw‹¾p‚¡¬dð¾k· ø—ÀJZá毗j•Dz«fŽ.WûI+ —j•dØûPXo¤±ÎGvòò%_ÀúèåŠW»Ó˜´²ªk"°Œ-á1š^ +-GgÊ\›è “ôzpeÓãªy*1ú]Ú˜ʺRÞaõ6[ø4ðƬËRµ¢Wµ¥+ºkl/dü˜,96û®]:Ä¢Ù‹‚ž5è÷L½2 ½nf= ¼=îõ¥;µÖżÔ+{¥oìõ¥7lIméâ_1]L[¿¸A¹+„ŸjB ; P€0Ø›•8_÷£ `À'‚B€Š\êóG @¡aP€!p÷m@Pð`;u>ƒ€Òæç~„¹”ç{1Òæ×NŸA1`€p†ÂE0^PÀ)Ï7Èý„¼†ió¸‰Ûç#0HP)‚½N.bB(œ€À¥<¶ @!¤6ÈJœ^BH!Á€ ÚØ|A¡â·Ð +-!äBaÐfê|…ß„P|°t¾""·úà¥XP(¤òF›1!@ñÓIPN<ÜPÀ@(@8áP{˜ +- €¥¨ ‚ n±@xHÀ¤¤`@Æ`@À @ðÁñùÖ•µdBTy +-õ:øá|—Á0xCʼnð“ªÔÇp@j +-¡˜!ýû•.{[BÅ&Šû™]|‚2¹y½psÈ=fÐTBRa)Ë ûÝB0ÁF7è—žóˆÔ$Qb¯=l)X1\¥+ ¡ª³to AÞX­b–Nˆ¡0=" 9£&AmHT¦ALœ~˜¥»ªÒÅCaúg~³tr#™Þî3*¢°"-’^«.^VÄÙÈYúH‘Öl)Óë/Ϥˆ¤d`é=&’éM« w”ìñLLCÌ’IŠÑÎä+©=ÐwhUÍ, LTzv9„nö¨é¤\ÄgC„…-R*°µ0pŒ–—óo®V˜”Ñwhe0#Ì®ít‘”SK€ÙhÃÔÆi–$žT7m¬“ßÑJV‹?6Z|ŸbÉýŽV yd¦Tí;Z™TÄUÛ¬#©¶4Ð@ìíÂ29…”÷VO¾WÃÕÊ >*ç¿n:“zÒ$I˜î(áwjT·ÈÅf’/](Ãdòwé¥nœþM°S¸’XÃ}ÁÒ ‘‘— +-¯X7.í®Ur@¥›gzih¾3!%6vÊd©ÓÀôR¡©k樎ža¹/ͧ§–á2Ñ'>«ü–ZQXº”l3!È°î9•+KNKž³›ÃS%öó_±!À9¿ý.ÀÒé9?Ú] ÍiÆ£cj:ÊNn§•ë®ôT•Ïæ4;©QM+å§é£UfÂÆPX:§ùJ¥"ªÕ´„ðÐÏK®à4Ä‚jC¼T–.lƒ¦#fb¾KZ:zTOÕ"gõ!61T6ù’¬E8È&øJ#ñçG=h?ÿé9{É3åu¿åÃUEAt¦¿_r«ž::¨¦¥¥)Çx½Ñ0 A,HJx'àúP¿àÁ…€éëŽÍî;±c+f”Ó‰Ýïdƒ&FˆbÇÙhÝñé1BÔÝ­›š¶ €­¨àhf ÑK)€9†â†!`‚€ 8 øx~֓Ňµêž¥^˜hSµê* –Ñ«E«„÷3TœµÒ‚|´Ñ—«ÇØ7Êú²VÛã9MŠ˜·˜ôÌô–‚Ps"*¬UY#™l¸ß (ÌF#vjÈ.y¢©ôÖψéô‹„—Ù9Fõ3ÅP!zàÉÑLl« Ÿ‰vs"eh\4øó0øp‘Æy8j¢YjÒx£l‚$M×fÀA˜µ5þ{–Ë%  éRË +-ÚD£Õ mÄf±«‰Ë”ó´É¯Á¥ÎêšY$rÿ8n¡³) Ì}·S6à(Ž®%C¶Áø|Š>f;‹‹ÄÚwC“7uêŠ-sñLÌ~o°WÂyY²}ƒ‘‹öàtªˆ®%…œm‰/k,4çãt-):®é\ü€®%ºç”¸øýêçZ”N‰k«/.=×’!:Î`<>”_ÎW-)XɤӴ³ÃNvˆeÌkÉÈg.‘¢ ¬<Ûm¬d ‹ÈRµD¯²fóê°÷ Z­ôò_¼/̇ž[YY\ÒÒŸyñEG­ðÔÀ噑‡ÕÞ`ú!Ü©i‚Ó‰ g€êŽ"Šñ=A†€inb1¾ewb|1¶$g€*QGBZ€å´ÉUPU”®Äî—| ê š‰—–V¨½ÖüSÓ#z¯-»+À´žöÚSâ œ&í½èäqˆj+¥½·ê©ŠÏ´÷¢âBÚ{- 9DK‡§4Ûh1¾¦§0}ñ5?E€`’4]£„´_2‚K3¾µ¨)qžÊ§µè$’0]‚Cb¢-¿†ä´-½… éjOkQÒk€¦µÖ§£Ãc‚Z‹NNQ+<Õ¢ãVA0 Öc‚ÞkÉ.`Ú!9íµ&ȘšL F9õ1ž(JMÒÒÑÒT{ò˜`ƒr ÛxÚF§æ”Óƒ¬ðÔ‰· Ú“=Å­‚ª´´SMÔ¢ewW€i€&jQ3Ä(§!‚…W¢=E­zjGr¨öµö‡(€Â¨°ld ±@xHÀ´l@ðPà €a@ þ•~.à «H¢`ŒI„´ºC!x€>D É€£iÌ^\Â3 :nÏïß—2KˆH¶Øš¼Géø˜è*D ê ³6¡B5ÈgPäs—8XF5Ô°b—Ë‘'Áh€‘_ †AäÏÍOáA:PAÂ[¦ˆ¯t£€hf$Àff:Ë _éØk’‡yžÔ}¾ÒLéóÈΘn×L7še`K*ÉË°6ÓwyªXR¢—X­¨•9å›ÀWút ™Àï•ž´„Eú^éM fºBtc¸¤Mì¡oùÜ.ôÁÂ?,UÖ%ZJc¸?”•@¦EÇt(&nŠ6— +-ju!%ãC&«Å•ÇÉ”YbB¶À•ÕÊ6Åi‡!nx(•á¹*€Hy};T§@@˜¾²kÛxXC¥+ªÂV–­bâJÃã–Ï¥"iš®+ÏC¬‡WÜð°n% {ÈäkG_꿦…K/ÁeA‚¾qW»_øRv 8ùŸ×ùB(|·pôæG}FN¹…ëýQT¼ˆ=œ»aCé‰F0ÀC®]ì!Ÿµöäþ¢ÇááÜ‹=ä3ÝèS +-¦0E€‡ÄÆ<öÅ^²OƒÔh•kÞÏtÐêfxhLØU,âÆû× d~ s£©na}yÎh.×”æfl"ÌW[[ZZ™Ä<ѳ4Qôœt +-Ó…§B¦+¨¶@ÑM¤Eá‘'Šš"gEKy¢§)Ñ Pm@"29Qô!Ó–'z–¡ƒðœ“È`:4Qô,¿åTÔ°‰&Šž¤ÇP’ò<͉ǘœV¨ÒÂÒ=PÎØh1sN<‚ïG اdÄ/öŠõ!ŽgÑ×ç3¢Äj]±—Þj|H±4À©k‹BÕó¡óˆ­¢²Þà+–Ð1 KÄ“…BÉ«°‡SU¤ Ø'ÙÂËÿb›-ZlÙËéb 2E¨¡ïSÔÇTÈ7Ž×KjÅ22œLøåCõT ¢[Â¥ÞeX7,–ÒoPá-¹šRþÉÛ™Te±Ä 1@dÕæ†ÂBŠš³Å,š¼h‚Üb 4Ü0ªE\çGÓ‹¬È~á–ŸÑÐ èBÚtÀ*˜š7ãр#/ðâ ]ï&š³*3 "ptþ+ÔS‡µ_ ®cDÇ? å-"u‘ÑÝAˆŒèaîëfI¹fL9BXÁð­ÁZœ†z¸a5ýøèö{VƒŒ¼IïØN™9φz8²µJ-Uzhå´¡†WkµOs4äcñwøtGëB{òi–è„û¹›:ê-? Ü‹¶ýÑZ é6|n–ÔB+1w´V{l#’îÇûOÜ¡ñIÆ^À`+Ïh¨Ç bGqº]”5H~ÆãÖ"w4ÈÕC‰{ú‹! ½Ý’)6ñoÚˈ$ÀÖÊÄ-Ì,ø~œÄ'—IHIIžØ4£s|â„$'á†0M`DÄkjß8!Éܦ—‡bD v0M-Hrü2 Àô@‘LHr´D-M=µê©ŠÒ1‘…ÝÚ'N&ñÓŠÁSÛàðÄq2Áí`:>®É©ŒT9¼ éÇ%hê¸!*¬“L&“ä.AåðÄ 9A.!h:*4:É„œŒa AS‘pG'£øiˆ@Óá8M_Üò¨àâ:¬Š˜V”«Qˆ–Fl ç0HÅ#'“Qa ¥ '“Qô²$„,¨g X58: 79•,(hi­¢¥Û'œéâ>qGIç0<ÀH£Š–FlŸ—Y€¦B2‰¸¸ä'…º{úo°Ù,áõ%T/œÑ>   Ã]c½ÿUl1I‘Ð a4Ã?ýÀÎrÊ +-f9Šú£Ü!÷ö¿ÑjÁÅ_|HÇN@¬àáÍaß,q|žýyM G@\Ì*îõˆ +-Á€·-ûÿëg¶ü +-LBð¡Ë€XE€&I°@ zà•@ü wÓÈ p1`ä8@B@Ú‚/Àˆšµ€‰(Šaר$¦5O"Ž¢Ä«X'!@KK +-HÈô!ÐTHÒa‰é@Ó HXˆ˜4U Zj‰é©½ DL ŽÈ)(hi„Ö…‰$ô´kð, ¨/”HÂïÁ(DLo^—N%,_(‘HÀf4M`<¾fšº„Q"1m9ºï!@ha‚ݦ "¦CIzÜ¢ 1Õ+@S Y§ @LOOm©°x4"ã\´4f4uñèÈ€AÀ„ÖmYÀz, +-Ó‹V°!‚óS! +-ÐÔRÅàÓñÁ³´TXlèqŒJjjY$`hPM…–n!búkȆ!è=†@S¹ÄàYºb<<0 Ã/’!¦/ Cðƒ`VÀ©M][€é¨A¢"‚7Ä4®`À0Ž£H¢„A‚‚~€€Öw´´˜%!o¯»ÝETÌ!¸îa˜]2?$÷È<– ÏµÞ%Øtÿ(ä~†Â°ë|—à¯s³D~,éÑ+£õ +-—´ kÔIõ®?Ø +-w–ßw›éDì=ÅMµ³äØK»KêB<6U\}g‰ Þ%D.#=;ÐÂ1|¬Î’ià.ÅM»žÊ7+eÐpg¡‡ý=ëj–Ú.ñ.©k¨c¨[}à?îø?Šýë¡Ý… -~šÏœ¸8£q…Ž_4G=«  [ñÿ…Uöw¨ëYZ†­bµuîPtœð`†­pþLŒw(=¤ô‡™Èðán}wØ »g|(P™;Ó·|¦­™—JƒÍí¡ww-¸p‡bèbšcL®F?ëwEoáÃ’ŠûßX´Ô^i`ºÃ«§ ˆb0 +-_Ú³4Œ;|P³ |˜Ü°®1!`‡QÜ!…úèRv©ÏþBJaÃoµ >tÇx€/ÞŠ +-Ä.٨ăv¤Dëò!Ù¥“‡â’Ó–&m—·Ú¤o°âÍ·Â}¦ßj—û–p³9D@ÜçjºV‘&ßn[š3qó½à§JÆ"ïïÉÚ@/W`cð2Á\//Þˆ&©YŽ;^CP;n†Ñ0xíü2v2²ý¨ã}TV~ƒâÂÈýãÎ +-TùG6hG°;c†]lÚÃð›8ÉÁþ³¢ K8êürÆþ×*Qÿ´ÃfSü@ÿØ°ÂÍŽñ” +-ßIغrö¶È2€f´CÌžñCö01€©6`šÒýϪfÊÏ2h ½´[@7Ô"—ŸccbcЄÀÝ÷}_'ø<ˆcë¾ü¼ˆ¦(HLx#‘A¼¿îÑ00´‹Š˜ÚàºH–  ¦ˆ‚àç=0‚B«MíÂb‹ôtx`‡éYºÞ‚ YlÝ‚àѸ„ùÀtj+Vƒ["W‰Ëp–^lMb1]@aá@  ¥=-‘A:ïû¼D„‘—àYZA˜Ú .r$¦vß÷y×°¦gi‚"ƒ0¬€ã ˆ¦ HMm®ó¾ïë˜VhÞ÷}^d[Míµ£Î x–fÝ£ó<Ï‹<Vcƒ4¬ ZúÐØ"ƒ‹<2…"s$(©©m𼮡Ex–f¢ã"žçyDSTgéj¡A<; ¦¶¨¤ó<ˆ¦(œÚƒv˜ ¥3H÷M„„cƒDƒ¨©]¸$ÒMœÚÝ p–Î\vÏÒÚ#‚%Ú ¦¶DH`¤ëº.rè<¯ƒp¢RdHà,Ý)*€³44846öÈ®Cck0íH„ËÁEº† ¢&€ÿ¨"*¢Ù€qaF ¤µ€a¤(†A(D€!~Ë颔%¬dÇÜg$°EæYòú±Ž1œôY—X"„X‡õÑC§öê’Äð[&/"KÞƒ‡ý_/Ul\èz¥DÚW K\õ —ø  ruÄ/ÕÀîMÇë%*˜,9ò5°öµ]ÚèÈà€X‡Àò’¶…îÉûk´ ”Hf«ëò·*D¯J¾¼“Ò˜—Ë Â £rÙ +-r¢<͈&»œôJ辈7ÈôW\]Rü¤8éùyÉŽn4ýÜãeFyŒÚ]Oz#Å›^ÑNŠäFµ–MŽòáªbüQ|$Ö<Áuÿ"ܨ[\Ø7$¥\B9Ù`Ò 6…xô¼É燌,ª ÷‚C,A(Ëé’Œß$Cí'‘¼Ä8~¸Ÿ<W±DÿOª}QÙÍxX¢%¦×”F¥Í‡R&]g m¬%=?&nƒ†‡@˜ôYæ7ýëZPìÈq< ÛõÃlŠ=½Åͪ®ÔLyýP[„F ²¨ài3{_/ á!>Hý0gëʶ•)ÀCf¨ö b+TôêϺ̘…¢<\€hHm ›®+±:EÕˆðP9ꇻN6\êifloÇ€mí¨ö°`Ù¨³6àÉÕ±]š"çÞûa¥´ÏZØLûS Â%M^l!"J5¶ÒGÎóyØ¥¿›z7«lWãÄÑ~3€ÒÑ[m·é™rQ¡²gôñˆÒ¯®kÈGõ ›74vˆô,¡Qz伞yf÷òÞ´Ž„Õ;î6û +-â‡×íM¬±•Ag”î:V€à Äé«oƒxt¿ì°oY÷Pt£:íO5'$§uØ!ZÕº‡WakQ¼ëjÜE¶ñN®¸”ÓsG…\#WXXWUL÷A‚<6ÇU ¦6580 í‰D" ‰D"—-Ï#‰D".ò*-aÙÃj‰zdŠÉZhŽà,O pe\sj/ -ኅA1Ý¢±A%Æȸ<¸Œx@ ÑÈ8$ Ö5µ ë¨YšhhÆ@j–¶&¨©`hlƒl…Æ8Pgé몠ɀ *…cƒ@:zhK'° KOµYÖ,ÍaZÆ@S{q¤A‘q‰&Ã…mŽÅai¢©J4´Í±°(éaj ªDC³(ÉYj +-‰Æ@r–†ÖBQUàaêÀZ4ÀÃÔŽ´‡é67Зa:,0mã8-j–nÀÀºÙÆ9‰²„ÀÃÔŽU‚ñx<¸- äñà²F;¶Ç#k$ªÃÓ¸n¶GaádÜj €`dÛ⸠Sä,!¨1*m@qaF ¦ `aŽã0Š €  €À¦qX!“x>FƒYA=po~Ò +-|É; ®.£¿ñY(uD¢`VÒÓ ¤†gu8HÉR‹×ùfÖø·‹E]-,ÊQô‰/±¥ :Äý‘N´IýËi%éµ:,~8àØwµVWä‰$4¦‡ku¨îi1ø’‚ ªÂ¬øêä•üÔ¡Ü¢ÓQsî*%åzoFöh¨øƒùçx%åÓ/*Çd"",Ãa;D¾É^Ìjâ•dVF§‡¢pŸGè´=” Ì +-Z6*Ÿ¡`,§‰ð¦*BÑveŸõÎãÁq5hÉB›ö—I?=Œ_2­ydeèÄ÷pivÄDz7ÇŸ#[u‹s¡!7S×Zö‰¸&½‡dk7qƒK¸i£ÅÛbØŽHÖ¦kqYYq9)&ÒϹ2¨o&Ýβ´ø0öéf+áDÇW \'@Û=­9VÌ9¶VR—<Ùá¤ø³]5¶èÃò hb;Eqýºzqv­ámñ¡`(’Ðb‡œ8}è‘…ßnžî81%±³[>D*x‰…Hü]DþºžcÓ‘_yÉV+$²äÃíۑбéZ¼$,°Ójw”1wªˆ…ˆˆ L(Lámšƒ‘0 N$(¬``H0°lÛ‰ª£á h8—Eè©*ôË´mË°¢š¬«á`, +-‹B,°lÛº‘i#QM’ÃÔ¦ŠF–¨‘ €Xd˜¢6³qÇq›&i—5*÷xpÜ5K+0ms,j'*Aä,ÝUãj–V“#Ó6D5\Œ&X‰E#€ešV СHO³ÔT Ç¡ @(×2$˜CÓ! ÁAY‰Å Ђ‚u1°LS4óHƒ*±h,†©p¸0¦¶B°¨@ôHƒê h82-ÁÀ2mÛ6ã: T‰E#Ó6ÍÑPKw¦mÇm\Š†CS,B…ƒ‚•P0°,0¨Yƒq!,ˆ*ÓÅ,ì²£Ç*.ÛŽŽ5­$ùCL‡W 7Ä¿ñ„gCûh‰,vÍgbL)"€Ùy}­’YP˜ÈˆNõ‡’üá +-˜ 8¦Uá¡Ï;¼3*JP'aìêë⊢AP¼oÅY\¼Þ¦ÃŒ'¢a×v=]óD­×òß‹9,ÑaµšÁDù§þÚ% ÄRJòž‡=ÇG‡}ÐY‚ýÓ.Tˆ>i!›öÄ”úLn4y™´h¤ÿé. DÆ +-Rë£tb¸ æ·UûÕ&ÄV•C†œi” Py¨˜ÃÚj:V_¢RùÆ`€( ¤àÄ<Äßî§ãFÙ—xØì$ Q©*ø&—ÏK ÝÁC~/¨èKxòùN¡­Ý”[\@: åEc"¢ñ;ÌëâA[ÉÔÐÏó° ¹/Q•³Ý2¿DWf0 |½tþ éZˆ—‹n¿ÄˆWi×2ç7CÃCJÝ8®Æî$þ ^GA¤Ö€ÇûcOúIÂÄk ŠêÈÅXˆA„D<|†ôqÛ!0›E¢dÝ,ÂÛ&€k FˆË”=¾,{~˜:DKQQˆïÀñËãDlj‡c\T5Of¶E¥µ{BNÐè+•Ls©YžÍ/:$ý!Ú¹è›Ò’g\46ä ԯ䖿UüЄ‚Ý ˆ!õ¾$¼>np4çb¾ù ü[ÄkØ÷íè‚-+w«Wb_ž^êܦÇ}- 勯@û#ÛÍ3½0pƒ_2Ò^7J›Žö{ñTHÛ>çÜ>Væ ,‡\r¼¶ãTßék\o„²Õ7`è‡ä Ó—®y>¤v™¢Ô9f0€ƒ4@²/iË{^˜!€µUáñép»™Dâ3¾DÛð¼FpµXïí›VbTˆ¥ÇØ­•èZÏ%>ÔCÔˆÉ vf&zàµ÷‹Wš"KseõEQ +-é/0b8|‰‚6ðÓ›Ô¡ü•žÕ•¨hx¾Ä¤é­1òp÷ýÇaõð ,)í¬/ÀÃ~»Q$›5 ÎÓ…MÆB l1#sqssÄåp„ AOGR`‚œÆQQÃ,Ke!&@K€‰°P$ §a–*ˆëp)‰ƒ¡@ ÔO •…˜ÑÓ@R` +-4C00WâPU8TâR +-=MG€‰ª,Ä¥p Å…°¦ L ‚E(TÖ±`4˜Ã=Ýh` †%EPW†*T ‘0@ÓTŽƒ¡"P“ ˆZ0 ƒu@$ ‚ ¢±P(ˆƒU¨ a– +-L¡2‰Ë8XšI0p\+CXUšR=NÓÁ€P0TÁ`X£ÁX,ŠËªªB¢ƒI $IŠ"‚œç$ Ó€¢D"q] +-Å‚Áh4 Œ1˜€ª Å•@ «ª +-T9MÃ0ËR‚Á:‰ë¸Ž5ˆ çq˜¦qœ‚¢H +-‹R!Á@Zj?‚ÁÀ¨I‚ž§Öå)T£*€ÔóLÕ  +-U¨ ,A OÅX£Å•H ×u]‹F &@ZšÆ 0ÆâJ ,CU( +-j0 )LƒEQ…BUY–u8 *»¨A.¢Á@¨Bê`@q’§AL1B   „€ *yŸ?À½êô±W„I¯çÖs†^ [Æ£ãâ¸`¸ˆqè¨ \ÌA¿zY“>ÄuÂÕ<\-«g¬ÀLC˜sËEqKÓP«}¾lh¶Lx¢`’nP¿ÚéHܨšlÕRÿCœ¢cu¢UtçJ"\—d :é/d%q)/ ëX >G¯SUw`4¬ñÁþ6™èu9M"¿ÁŠ%ƒâûmþ–8·×T²p©²QŸY¯®q¤C̺­'y¢ýµ˜ˆdŠ”ÆŒ^~K‰Q§Pšy¡ñjømö†ÈíÞ5”›e‹L2âGº`JDX:ð#Id‡P1Í'=ÕÛE;TKö»a„s—*¦û4¶›“AH§Ì;§’»#öuµ‰(¨±8Ü%JôàݸÇ™÷½0-D°øñ §¿x©£ðS àEœxßîúˆ0)Žx2hŠ8=xh,ÂÜp ºc†Hb˜Ónœ™ir6Aý9'M<&ÆJÜ©i$~ŸÄŒØ¨ @¨N……46´ žõ Ù°òfø\áƒÂ;5,¾˜8Wa`EâfâD;n©@_kuÙT]µã°p×rãŽ6üx†%Å0Z!*3Ù.†[š¢ðÄÁNLŠ‰ÿWb‹ÄøŒª~»Ï‡ø¤5)â"õ`ö18tŸÃüTFJÞÚпáO:ª†ßV cÖªŽ'ŠÁ¡b’k¹Õ7¢:o^)EtoˆÍ+uL‡8ìühq9Œ¥8„rCš5Ü®Ÿ»É.yÇEN"˜UĤÃàòð\4@?)T¾È?p˜WšáÃU!J˜ ƒ³@TÄ4#ú|DÒˆTÅs6 +-CÒäw¼Auµ0jPá3ÝÔxÙ°²!ÇÍD ªQgˆ¼ˆån<=ˆN"*UO @F"‚¼fVDåÇ47ØŽ(ÙDäEÄz«&å 2<ˆ=q?P*á•Ê´2ÜvrØ~Z:LDN¡Lø"¶üEDpU…d¸úÇ]> ‡.zíÂ!,rXÐ ýºÜ bU¢/b¡! ÜCLDÎY,ÎW{¿Kó} ÀaHx•t• ª‹˜e"£e”ôïEªV;à³´«Õø­Ù”ð§Ã‚ÆÄ»ˆB†ØD™ˆÝ¶oÁˬ~¸B§eâIö­t~9ëÆaÿ9_ Cl-Ä$„øs¢^¢†³[ѹE4¦Åá\ö~Ã2‡ +-’º…’+•ˆiéÓ昳 Ë0‘4ÂÚ¡ŽygC±žTâtX• ææT"ÆÅĆãzýÈbŠ1 RQ¢Ü¡3µ UâÕ!Î@ˆ8œ­!2°+ï¼@ô`6UtØ8¼E w(ëªC‡•ý@P1‰gCˆâÿïC6Gr%I[1°—CI‡Œ¦ b‡ÄD8-ÄÙ‚¯_s úr bi$‘f|o%M3¡ oó§hÍYmï};»_%•€ûÿSúWXc`W•Š­¬„ÃR¬æ¹’½˜t„“§i O¹Š¸E1áJ¤Õ—ÂèVD.Šªu_?:h+.îr™O§Ëj‹ tG¶˜š*ŠIRå'µÅË·ÊXJ„ 9yÚb +-–Åle%Fh ýhz.Yúõ[¬ÃòÚûUùžOž¦ úA(kPÖ šhɤÂÐ`‰TƒÚbc)"cñ$Mù¡«ütÓ{)‘žyï<|ÿ'u—yq£{ѤîÂ7ýR*ÐÉ$õ:E˧³ÂúO+¬õßןBÝÛyQ~•V))¾«Ïç”Ñ¡òî ¶ØEScuùOÆqÞ{ú¿„Õk­µBª¤j‹ežŽP[L#j‹Ý§Ô›°‹%< ´ÖÚbW²”E¦o¦ªÌÍR_ÉbÜÊVƶï†ÍH‹å‹™l–¸’…hm1çòí°  P1…c!Ãó4¦ðÓ`ww¯pº3è.ç{¤ÕÝQ(ŸtœêŽk¡|0 `ÀÜêM‰úµ¡ª…‰h-Ša8ì³BÑÞ  Bì¶vF%À.g¤ ãw0JgP™ÎÒá.ÓŸ›wÃdàq_L›ÑáRöÞpàå´p"@Jɳ5‚øƒ½)Ä…=…Ÿ>À º°F–Þ/al +-h*çB +-endstream endobj 23 0 obj <>stream +-1ÑúrGÒ ÁI{ž¸ûΓֈ‘ϲDÖÊw­½å.,ŽƒWÅз¶ôYÃZ=×Ô‰¤îÎHd½¤­½%¢ìYäê‹Õ@8<^_@ +-56Õ®”Ósï^gblç I-¸ä8ûáS× +-„¨`íÆ÷ AÀ(•»óÓ¼â &H¨Qr@xIbG ±0ŒA’£0! €`€@ ØD xùºRŠÁ‘«hÔbn` Q¶º:NpäëŠw:®2M;è™Rú5*…4ÁOO˜(f«; Jóœ+ôº1ø¸ÚXÏ¢ÑnIú ¾8]'±@ ¼7.±Mf ®ëÇÕx©­ +-ofz¢Ýxhðê…¸ÚE- ô·Uâã]¾®5®Š-½n("ÐÓg(]Éú\K׬•ª` ç¨Ü5@ ~£„ñu¤·âV©%—¼ÊpµYB3‡4˜É-Éùß°«iƧ™K ÁD^ +-µ¤ydWy¦¯KQ¸%Ÿl522‡Œß™N’™Q\…ÿW«ªåK¬\ÝÂVQ?bð¥ÒªÁÂòGß$) ZàêûÔJm×ýÚjßÿ +- C {£ùoÝ~R.é3¿s\åCýf«löËù¯ xW#Žyõ‚±q÷q5…šàq$ÙÖ‘ñWOSc8 h«^Žèö úW±U–T;¶ÕÌP\OoH šèº-Ìвհ£øüŠØÀÕ«ª-‹­Æ:¹ÙŠF¹¤yâK努¿¡ôbr 3H³;'ðmR¸rŒ†¬Ám` ®BŽªm2è´Lùb–”Úû»,UÀõŽRcý£¸ +-ßyÅV‰ƒ5­® Ò6µ­®îWãºÐVÛT*—˜Îvû0þ¹„“«浚UŽ¬•vT‰Ú°[-8¹‡ÁÙ²]m5š…Wë2¸MD“–µU¿]EoÎWÿM^µ¡áoKTÐVqW…q¶f˜¬ÕÓŒ›Ñ§8<Ù*㮂Բ­v"q¶aG×(2fðªç™j¶"W‡2qµþ\r² NEtñjS ´®KÕÂVCÞÕl³WY…$?…Ÿ]uŽŽÃVCÍÕqK{Ýq vIËà}Õ`&Pô?)«­½«±d¯…4칤Aq0.¼¤}Èà4>… +-¾ï¶Õ¸º™‰«â0è?úºôˆ˜@ùÜü!²‹&€ÌÝ Yh¯€s<ëßÖ=ˆ,Ý¿—Ì…38_›`±†ë{z’éÇ „ÝJ'öy1û3à(€•ÄD×z‘jƒÈe·¶«Ò0cù><\P¦ŠFG]—Ð^hFj¥ì›í&qî÷E,£Cƒ³]¡Õ¿é²ä£A—†¦¤ùÞƒa«Û¨þ}YB1%@˜¸\U±P€e´¨av@øH1x‘@ FaŠ£8Æ(c0@€â’ Pñ¢éEÞlß ñ4íw äúµ"î…1g (µBȱ P»­2…þ)(p[(µv"¤–‚w'ñPºZu#Ê)”.Û¾2lÃŒSàÔáꪻ©>5  PCWÙ +-0¯ûÁtqµ>HäMSÂBØV» +-7|(UNÈüÓëx-(õ1{w +-‚ó³^ çÃquNݬO Õb’c«!%QÍ¢‰…™ÿFL}9\å¥:,ÐÚ‹ "“°Ùj†1k5úy, €ÖëÐØôÆú1„ŒËåB”(‘}ë¬Õ•OHÕÇB‰½ºemD”ñ®F3D ÇÕ*NÕ®¶N; pKA [=Ú±\"er,¸µ\î­«ìÒRÕì°0iß\‰‡è‚kzÆì÷ÁÕØSmUÜ”ã` mWƒ‹y‰cF”|Õ@ |Ý—W¥ »ê­LaaO[=ÌÑZÍþ9õ:6(¤™Ç«žÔà°`Ì^Üà¶U™F£9ÀÆÕàvu˜ª]‡,29,˜‡@n‹ç.|ÆKÔW•¤Úu¼¹6 Ej@hõ««¨"¥áë¾_¸#ÁðT­"ˆA¶ÔþÏQ±ÕÄÇ‚7}[¯‹½²{ÞUé-¯Î°°Z}µU¤¢4ü ¡D)_'!®R>M«·³XªéC ¹¢ŠÔeÕªXhÝw’jŠ®4l«Au5"öxì!‹$pÌUEAP±(éÉV-ñå參ÈM„|v +-{ÙüâNm¬ì„t\§l â›­¤ú쎀eYÔ_Ãí”-¡°|•œe®èZ1‹Š¯Ã”!r«ž´¯hÀU4ɳÈQCh}dQÿ8Š“³ +-ÐþAb%;Æ·Š ºÝ&ÀôŠÃ¼Î”êfàs·¨qú@ø ;› ‘8%qŒÃ ƒ1À@"€ €¸€PŒ…‚á7¶Š¿Ò»Î @!#¹ú¼€ â\ dæ—XžÇŒÆB&²Ü‚X(¯t5¸¾SžXXÙ‚gáó &ïg«¥­Ãˆ…Ì»Š'¼°Œƒ<ƒiÂlqÈۮ௠è£]ð ¶_pý¦› 7lb»\bካôÄ \l± A5\l9_|A\ßvuiØb,´ÆY9­d'>Õªb¡üÐÕôaflµzcÁ˜Å…€E,`g½UXàÉwhÀX@, Ÿtu™Z·P÷Ú€æ!MKYtKä,=f«Š­"t•†¶r³0 QÕjÉUXaïò’#¨T¯e«¢ÈB ê;Þ$[ãiºª#Ü’$ÿÁ]§ÕÿMÛ¹à­æ?]`˜t N«ÚšVë‚r¯s°Xëk?ÎCH%Í7«²¢«þÀ8ZÎA¯}†VµýVŠ]µñ<¾.Žh]eòu"¡6 9]=v8­6-›È%Q^½€MTD«I˜9D,¼¹ª-Œè¡g"qÉ,`šµ@œ4Öˆ*ºÐÜ\;H™R%‹ îGìØj‡MµM­ +-ç*I"[5J$¹ä£"Yq¨Õ7tW!rd«²K Á*›ŽÕjÚÒÕÀ«Õã_€ÌTÙO©Œê&œ[°°ùjµ×UÃ`Åm”5Œ=d ¤²EýC­Jr•Xè6|l,|'.Ña佥Ή…AWiz„ë|Ò…ÀTÙ°x5ÛÀrM€ñV2ìD½S‡Vñßt«ÎÌ´“͆‰½ÿ”S熃Ù"—Òô*Ô!”ø‰49™@;Z”ÅÄÇ;NCNXÄ¢ R€ë¨PÁÆ0h@0–Â(ŠƒŒabˆ!Ä"4@„€ÝE1M=§N³‡1ŸšÆýYW¹^ß’ù°DÞA9t‚5#6¯­&SWÏ… }jœ#Ò*­‹VO|KæÁö}üâU„²}H1ªÝ8m ˆ> uè¾ÀÕ 2,\"‘V¡¢ní…W´Š×ü[ U¾JÈ¡öZ¡Öu +-9I«¨P7q#*Knùàuu¸ ñ§<ãꀞ©qN‰½³$q«Z†EÙ"ƒ]Í·´ +-FWf3wUiºFQçÍap *"Іă@”÷Šƒ±„Â-ââËó1¼¥«¶nSÌ4Ѭ®’ ±Aq‰Ì.x±wõæW$@Ù2¼«k­ H.øH÷™Mã€ru@¬ ½ë­èÃóýíæà .Š½*.¡h·Odâpv•´ †ƒ0w¤ÓѪÍÈ/¸D5º‰ÜÀ¨«»Ê™¬£ðºÃ­Ö~‰8ÎRˆ!e¡­´Zפ¸ø9QÉ,… Í®®AUW¼`|—¢¸7d +-œSˆXàtÝÕçqYð’:xÈœ\êq¥<ˆ”0@"' ä[ ŒÁmðÁ‰«ÐaÄG„TA‹z6Tà‹Z€|pLüÿ9Lüÿ9L@üÿ9Lüÿ9Lüÿ9L@üÿ9Lüÿ9L@üÿ9L@üÿ9Lüÿ9L@üÿ9L@üÿ9Lüÿ9L@üÿ9L@üÿ9Lüÿ9L@üÿ9L@üÿ9Lüÿ9lšû·zr£Lüÿ9Lüÿ9L@üÿ9Lüÿ9Lüÿ9¼âFP”ëv¼Ï¬Qr#øZÇû<—§º¸IóƒUS,ê..7‹Ê’‚[Höªô Âo±0c*Œ„A:\.2’äÕ·SŸEmÂÊHQh€nããÛYÞaf”ÀÃ_øyÐ0K­ÖN^¨€tá뇞 P(Â@ +-E „@B‚‚„ !øG€›ôT"p*ÂSX*ÇV +-·­]E'8ꉼ›n9n WDš+Ìî_8ñ«™Ã†‹"<¶§ØI bÎ>¤PZÜnlñ9Uµ%[pL—O±ý…ß«ÍèÚ¿û5(nEàß­Y]+Ip䧶SCX©§ÐxÌÀî}º:0Uö7Ȫ0¦V­Uc+ìBHp–zµ¡#s#—.Dì» v‡‰¼"0Æ…‘41Mú9~Ÿˆú*q¤Rf!sÚ[/¿Ê3"‡gÿuÚ8‰m ÍÚÌï÷›ȆQŽÕªˆ©7î/=“-¿õj«!‡§ 0ŒàªïV«ä!O Iö¨·EK¨n ‘Æ Ü•à°8£XƒˆÁ# †‚ ˆïÏáu. ÙJÖ2Ìòç§×ÅòxÝ>uÕv«×U«“Z-)®†Žå‰×ýêjv®×9˜©UÒA臎Êû¡e>BNÀ®f³–Ù».Zm[ áí: ­‚Õl&ÛA½»3oõÒÌÒ*¡baó+@ Wq½ëVÔj,¼ô)ï‹ ÐU×h©U4ÀÜjàÆ°£&­bØrw3‹Ô*O’^ÈŠ´*^YWý·Ôj¸àÂýèªD¼}1j»:s]è‚ïSýFdÁ)hW­½qÁUˆq}ïc±WAvêuÁ§.Û®³©<î-Y%V•ö® þGø¹j™XpÍíªŸ® ^,ÄÂôXÐ" Æ´uw÷ ¬+h‰M¼»0"¤t÷#ÐoÁFÈÄJ30\\Ÿ± ¨€uXD™a!·íE,”DÏ ‚+µ«m¾ ¢£y@Ê«ÔÿxUpµ,6BÎ}‡‰KÂÄo"‚ßúVþÙ¶/r +-u@Û5ìêð]qIdo#4ðºntÕ#QtÜ +-„'Gn;b¡Ò6ß磌!eë1 .9•[Mã2kÙêÃë€Å0ÔÑáÅ)µ¾Vˆ»«V‡îº#”ÔšÛë‚W ¯[+þ1HâAB.»¨ý°l)DKú ™È…Bþà 1tmѪz$¤‹…¢îsÖ_L/¦·z Ò1~qÃñ¿a†A:2|KZÚ¢Õsí½Ñ £Ë˜39aû7¯þ­1D\Ù°>l.lÿ* Ë875‘èꥣUÁfùÖG…â†ÒÃØÑ;›½4£‰’ˆ§aŠâðVc>"‰¸¾…’c"Ð8 +-<»×Ûvt픋)Œ"Ë#púÁ.¡´ †èôëÑ“v*ó´+±B*¸é~••­–|•@sDI¨Dº!tU¨ƒ¬%b°U]Uð‰£ñÂð¯«nÔCþ²V¡F[W›“/3[m©V™_' D6DR¤†a«Å¬è¡‘9lù0øÉQMwöºê‰'‰”µJb9(%%P6¯š¦ì€nNº:n†—@Àã^§Šl…@:[=§®–ýá$wÕ•$Ú¡±Õƒì82 䀫îÃÈgt‡µ +-Þ_d¡0$K ÏP£­ YȺÊ{mÓ½‚dX¶J'dUÂÂèÈÖÓnÔ²ÙªÝuQÄ뎕>¸SJˆŠ2{WÇæÀ€@n›¶ªm·Ë0{?ñ€8ðñ`E¼òÖšNEÅD_( H]õ½•@‰îu±ºjäBX¯·$’„@ „¶ZZ]É2Š…n\ðî{]tzqX„ì¯ ôH°HJ L{]d]' +-_ÜaêêÕJ(uӟ݈‹­À½ëq’V½a]5öTɶ¹ä}kmUf±ÃGú0#Ÿ•7è:4•ÊÕ¢Ñä0t+2N-PÈiçÆka’Obê j;·C„¨­3FÝFÉ"23•ƒú¶÷øC(NĥᲇA°´ª³lùΗÀvè³ø,¾vI ìÃc +-¨(0ûe»jn%þ"Æ}±ìý²Éé +-Óøñ]Ûq Ä›¯óê´è Ù†3e@÷²£Ay,L©©jÎ]KŠ+…¸Áaÿz†¨NŠG +-‘)Æ~.É©Õ7x'¹n•âñp1pA‚(¨âì² ‚€à”"Ší`Ñ0 $IŽÃ Æ2!D € „XÀ¨èº¤|°°!×eiÉÕ¸I œ¼˜,T¶©#œ ´ÖV7ßSºî`Ê`!ÌUêÉÂönµö««FÑçYº4ÁÅþ‘’£Ðh\ÖXªrµí4x|B 3øWÅ¥ÑÙ%Ù¬­ÞuC3b‚'Ñ«‡91’…/·*wN šâjëih•ù²j°9W½ aH :Yˆu«ý<[ID€ß1 +-aàêàl‰ˆr¦Ó4&¸òò3¤úåÉB{ßM×nUwÆ=[ ½ŠÀô­V‡²Â8í;ϸšá¢Wåiðˆ[u£_w’¸*­Õ;£U˜7Xfk@»0& Ob–s«DŒ@5¡ÂH…VŸ7«mœÁB®Z3Îq« ã KšÁgòê“Ò´¶ Uó¸¹Ê¯£[}˜“™àůK¦« $\ƒú€¦t“xñ¶,œ«wD´W{x­Rt«ÂëÎ%Ë|©A¸Zl >lp >Uš®CkVM@rU"1·®[•ÛM *àêÜ­‚f÷Å­>< @‰{iðïu"D˜‰cAÞr«kb‘èÄÂø8ñA:b,\Ñj¢Á'®–'fågë¼ùcÁ ´ ƹžZïÉu‹]7ˆqY­£UbŠ®d«`âg¸·w, +-¶ãc@¾åº0®fèX‡â.ÇB:HjЫ”žÿ©H;]W<[¢x@Ž‘Ùjôóõj%èl±ö*"èÂT}´Úƒ«Ð‹£q«Õž­hL õÈB½èÒð ˆ° ­º#jÄ.2 +-gÑXpÉÃz5O<…Ô'8™Þ¼ìÚâ WÇÃã΢š†«³ŒéWµ•rx¹ú2Ò­’|ÁÂAg•å×ÒJA©1Opµ¨šË‰Ò–,àÙKpÌêq¹Jo¼uQÊè4²° +-®FQó.Áåñ€¶QúutˆȯµZWKåWS!''m“Ù€ˆ,L¸)ž¯ÚçN ³ØêÔ@„¼ð\ÁÙ($$9g‹ÿ”HcK($ŠH­ªé*ZOaNŸ¶¤ê HЗÕC¸jõˆö,ªtXŸ„Á’y@{pšM ´ÅÕ¢-g`ACÆ—ba¤NðÏZ½p•IKs½`«û" Kæj8Vóùê¬FT ®0fÂD¯t;LWlÕaÃUIA¯æ[Ì&BgåÔ–@û?¸j†Lý"&Œ! åuß©KWÁâi«Ú9«ø/Ì ÿÞüÊV/“¡ÙªRˆxAŒðáêÎ^Æ÷= Ð*äæÚ éÒí¿Ú×»Ôͺ¤7 ¡á¬ÎhKú¸µäk)•BréëV¯FwÒ÷ò„"q5š$o#F—„Y! RN[*,|à#‡­Q=bQ…(dÓrDά{iO ˆ„Ôc‚õMRºÙc÷o,¸$ÄUG¦GJ2–>„îåªéú†¤(¦6@Zó×;¨\i84ì³µUM/00’:Âà ÈÍÚŠö:ëâ©ryÿ&Y5;;,â»b›éç_Á“bàStÖxÝ#Â2Œ‹2ï–îÖišÔ4Ux—d¶‰ØJÚÒ•9(žöÌÊ<´Kmw¦¶°ã;g ùÅ‹µl¯’˜›ˆx‡»ùr‹É¹ tÈ–H5‘A£\U:’â{V1·N¶´©>ö¬ö…B8Ë¡Ðè›ÕL׋’íòÂ,›yÏ÷™Äfb-Ý €ªC!°Üj‚¨BäR <ÄÀu€±PŽ9Ž£ d 2†B@€@ |™JNƒ»hz„³Æ£é†«¹·hy5¯ÝŒÛ2-Wgë»üu·Ð[]q[— °|`±õ+Dà=œÕø;ûôâ+¸‘­鄦—û:ÂÕ;;¼ê +-¿æª.°¥SôŒIºq58ÎvâV oÞ䣺ÄW[„1G®¦aÜ‘@5xu…Å=jI–ú>C Ëà0ä+$­*üÆÑ©âg †´MÚ²§‹}á =*s²-Ö?—\8£Ù‚ÒØ[;þÊÕ^Á×yÝ×9Lœ.´é¹ú~ç`,¤½ºD[͸ªì¹ªÞú“xY«;ίͣOH%'®{µ{ .‘YeC¸*Bø`¸^µ`Z™« é:eÎu„@”Ã<‘y®F Õ®¼ +-\Õ~E«Gù^¸šø:ÃÉ«œüu_U¶Z³ 5€«m ZKZ…>Â÷*)m54h ZÄ«še54ÁB‚Ï\}†8ô×½h¨zBK•–àå#[V/䪜†^ýéŠ@ì3Éþ _—ɹTÍ ½˜dÙ}… "Š«Ô€xÛ_woÁ"5¬“…‚¸«–#ÐrSm5…ö&8˜…‰IÏÕ©@O÷"ÐÞ{²`nõ’W9\E«¡ùèxb«õd…wqùhÍôÙDLeÿ—,x0À«)ÔëÐj$ ƒdÿ +-j@xä*_#檒…Izû~ÞëLŸW—¢ŠV“4Á7Uapi@ÛtZKô¨†^­=›¶V& ‹aUí2ì×yµºZ—â´êᲺ ŒÍUÎ`µfðK²À¾ª4¨øu¡ +-d!Õ]XÑjáa‚{ mŽÂ\gÇÕ×ÐhÇàêÌ”,ÐÑÙÒaãÕa +-Pý·i´1&7@J;þ¯ +-ˆì«×Я€àîµ »Ptb3//œm® …ßwRpdܶNÉ£×=,ZäÍ$*YÿpÒûVÁd¿8p–ÈiïúXn³Åâ³>[¼ìëb“õ™*@•ûbÖ‰&sv("õm5 "g½Mð ö‘õš«`ñ´ +-3±·f²êÕÝ{¦K…™oMdYZ¡@ÐÉû¦ºù× z¼ÃÙ}3 +-r¿¯@›šís ºÈ?‹íE¦òBIô6Û½™:”Ê}U!ßœ‚¨Âìò ‚€`†ç0˜7à 0f9£( +-!d 0† !|†ìêÓÔšm] Þ%#½@éÕ:Ì\5GOÂ5È| KT,Øâíh?mž¯ÚGAˆâLWCル;Êo®ÂÁÌUû}ϬRœVOÝ*©·š7å,Œ~Áš° CWAZŒÁU-&§Ú ik××ViVX¹¢UsÙ:7ªÕô”·Òuõö`§òV3W kY9·J=†i—™Uí"ø;_Áá­ë$¸Uגּ޲@dg¿!ú–…0¼š\‰÷ø<³:—V[\ouý²2X>N]§¹*²¯ôMmˆUÆ æa B…©Ðª‰^áX\V5 øÄñe,p•¬´–V2PWåjÌBÃÁU7ãu®ÂË“9x×mþ +-:³ +-ÈÄ[+nÝ$,«¥8m•¯t‚ðÙ¯j‡ñ¨@X»z5x‚‹ V³JŸ$‹D«Ynµ¸ú°H@J\¦R£ùJqqß2¤Hñ*%Ù'W+h@Ue¢UYe7LW¹­@›˜@-ø^]½u{éë*«$Nt 茷n%\É/ƒ@Y½`@"²Z=˜®¢òn⣺¸yu#b®ê ®ó6z´ÍÏšÕ- 8zÕÖòÞuu5³1;æàj/·^U>ÌU;Œàóá MÜ€€a¢UÀ¬2'¦«vè‚ +-„y²Pº,ÄìQ MG ûdvŸ5´a‹×™Û¬¢ž6ÈBJ Ñ*hVy ÓU«@é- ï­v døþ´¨^gÜsµe ’Œ¤aU]Î=³ ·Úú…«Š&7x÷æ*ÖâÉÁÕÀYZ¥PÁùYídLW¿š× +-„‡ „ùD)H,bt×Å‚+ü +-;1¸ÎP€V-¨Xâ˶‘Y€?ÁU½—モèÕùÅ\ÕXYõ™^áÕm@}‘U­î¿’ë…¬4m1ãºÕL˜@ÿ78 “Š\}Äu–ëZ¶ì”U ¨_AG¢%Ñ’ K‚Qö¬@›á*phO´÷0 dÍÕYa$µú³¸Nf•´‚­žÂÐ%N+ÐNgY˜HRƒ;Ñ«ÉâhÉ-‚Û/0ãàºÎ3Í̪ro È¥ËîÄH ápUª2Ví{•!1W)Œà#[ HÔ$çÝê¤Ù»çÕgY¨$°‹f€÷jIa® +-~™FU†fÿ.ãªóØ9V ús«3Ï«¤¹²h9îÒAZ–×£¬*ÿ +-s··NöêÜꢆ•j²0íU#`7*¤c\¥«ú毀å/™\Õ•åÞ«t?ÑŽx¢Q‘@‚›«Ï4xqÐà¢ÿïâ£øWøwãê šßèV«–…ÅÆtYH+x½jb®–WKb(ÌêÌVkÃÁÕ7xžïâUˆ_wẫ€²JŒk™U¸ú;Q4\UÁïëÞË«ñᨕ«¥Y pÞº ºÕZ™`÷“Gòƒ‰&”W»àvHÉ;·ï!W¥ˆƒ«¡s«›)î¤÷jƳ=\àj)í I˜Þ”,çUùÖªQÏ>Óߺ¹â:ïpÂÕóVØryš[êäÕ“àÎÝó+ˆÀ ¿ù¼F”W½*Ý5KVçÄm¸:[£‚ÁñêzãMÙc\uÚËÕ}[3Cÿ„¡eðöCI¼µB-Ù»¶ºcÃk›&U³Cz^ÅZv§çhζ.WïÙì\Œh +-¨Ws»wò³ehP•œÚ± ¨^MÜíÉÕ°X³ŠÕ¶:³óa*¯oŒoYE0ÂÕ¸çÅÄK¦ÚQŠÃŒ:wŽ+©1bp­7rÿNJJÐÂÉw:?Øeè>Z´ÜÒÍ ¥êå†Ó¡ZdA`‚Å‚Ñ𸡖° å¨`x½C@€79Ý:ÎúnP¡HÜõ}v[F`¹!D¤ ‘©`‘›õ/×[ +-FCè¾Vj±N—¬“ÿXå-7Õ0Ä;ašXëÌ.ÇË­ùs2Š]î'ɶwì¿ÓOìl˜ Àr¿ÂDn4ZfyôroÂø¿; †ló5D¶ŸdMÞ%¡êO'c¡H–ûI”CRq9Œ¨ïŸÈéë²¹×wÊEÐîãºl_¥„"G¿¾ÏŽ‰  ’&Nw*;™·Ûþ.#CQ¡‚pN=äG!²èÿSz:šŒ2* Ì}§¢^o?êÿNg7„JTu!¸SéÑ`GƒA-wƒù¨Âä’ €à +-Gy2 @¡@’…9ŽÃ(…Œ1įPèÝÎ0¯ÀÁY}´\á&¬z‡d5Ö*^´˜ÚY]¯'AŽ$ Ý´ÄJßEëɺ®ÆøùÕáë%#=8D® +-£7wÇK0ôîÚž0 ÚèÀ£¾UdÜⱚJVáp.U™TìU!¢ĽÖÔ +-+î _]TÚÕÚÅ.j`ʳ_¥¨µ–ÈÜä[A®ÚIíÿ[M«²ÚQ«$EĺW4^.îø}ƒú¶ Qº¬Ôòê®æìjqN#W…êfáws?Ä饕_{x½‡ ŽéÆ%UÛ üy«Æ­f Êʺi€\š$y;ÄJ[rÁzFý50öÞ*`Ÿ_%ÅÌÈî÷ô%:ʪÕVÉ}Ò«°üBÇö‡„õ‡ârnHšr(úÑ\e<Ò´䪋{ÉZ‡¯Òj D%efèÕ +-ß6ÂÕŒ ˆ”¬N*VIP-[%$­r…Ô¦V²d ­p££*"Vi¤XE1tÕ£¦g~ñ«QÐOìU± W"«g•»Yp4†Ç÷Zš–ÕôVI{1ÍjÆb%%¿Ê‘ Ó ÚªùUgÁf᛺‚W¯»94®*1À„´Õøîo@½®UCKt'6ÐÕBúF&˼Šþmîê9kØ-b:-Ð\×,फEƒ½µ;I×~Ê).½~[ÇÊ&Valµ¦Š;¬ŠÃ–¬–ï.zMùÕ´úP꘮ŠU4#szÄUÄÌY(h"îàHÇ«ÜßWUan2²*—©­&J YUb[Š«ªD+ÍÁÚÑcýªpwâX µfÁ©¸ªfÁ$¶Æ»×­#€Bl«ÒÃ-) «°ººZ-Âd„´„uÝWáüÕˆaÇœ< ô“®þËæêœi-Œ)W[YpdV“ÕŠÓYM{÷FµNçVóMž$|e6)ðªÞäj– $"³`'WÇÈf©ºZB®ö'lùªÀ€ þ°©­†Së°¹À “®8L#µ”ÕÀp¸ˆyyàšÂÅòM@¨ (”YRõh Èj¯ºÁ¹BÙ«¯æwð¨¶Â“oR úš;Z=Œ¡ýŸ¥f•¹\¡ÁÅÊê{Éžé˜u÷çÎ÷«y<8®"¹Gꪊ aëUMêmV{Mp™‚ºÕ€ +-È V‘±U}ÒùjqÖÝÉÁe9]±®‡V³3 HÂÅu„06ûY…j‹Vÿûγ .™ÎdøêŽd.ÈK”qµÀ«ðê>ealZ…—Õ¸3È +-:ð瀫…Ô#„3Lm\®7_M †ŒEWrfÁà ôTZhh5ú±ZÑ+àðPouÍzVK'å¬òçt$¡_%œY ?™®uu(-bmVQ߇eÕK¯0Mq[ݤ€”˜]AÆϦ¬€œú§ÐÇ»_Åa÷ W›* tº*%{«0c¯zƒF ø¥%ú)«c HB[g­n[Àjtž tû˜ÒU»ê¶Gè–ˆ¿ƒ3kÆK\™…ÆXáU {Û¹4¾Bï kÓá±J´W‡“]¶:gšÕü•ëY‚}unA]•D½YÿUæ&àlœé÷ApiäËÜö +-Ò§¶ƒïV:tLZ_…f,P~3ºª¿2ïUòš³e³a½uªDÂH >ðeË­–Ͳê:«ÒY"¼¹š®’¶@ÂÚ›huµ‰\}NjœÕÑ€¢J«°½£P6«4¹L@“Y}#e íê"Gn|9\ÂÚò‘«XïEêªR&¸ºÇ¹Zöߣ´šþ®àçVû9/ õ³ZêõU]½‰v×r|iïøØe–ó[·B +-è)¢×½±Õò‡$“¹‹8#\ËU‡Èh3¨«ƒv8'PyË‚“Ñ HúRiV¯ƒ–x÷¯®šk²v³:ÃuòdUˆhu—e@Rx…D—*v¢"Í^­uµ® +-UËÂ_sµ›Ô%û4«áû +-Œ©€v`ˆÀƒ·:¯§ÌŸÞE”:TÇ­«)v¸Útƒ§¹aL[–#<Ý ÷ülXo×Ö€2@p Whânµ©øºs+”iö^_XÛ`éšA6î×qbe“X]Zªpÿ««rÝ*¤«&‹½•2‰ g!²þƒa#]·1-‰ÁnÆD]÷d…€„ûþø¡îʪž”ÿ]Ð=Ù«š‚Ú¾ççÜ•½FÙßjˆÜ”‰–¯ãƒcoIŠaôüæßÞÇs<è5ø6 #y|™£O!gC{²ÿIƒg)äÌd`ɤ¤H=þ„ËTWZŽ•þh@• ‰š"ôu-Ñ™ Ɇ<¼­šþ-.‘T²×œ¹ïœ¬äÇ)¤èþ]¢ÁT]˜è-8K‚tÆÖý-Î ÁÊ´M$ÅÎ@¹½‹n ™9bPƒmv",$;Íÿ.f6J1ô·ù#ËÓlŒh1¢¨Y† Ó,oŸÁEÞbѽ•:Ðñ–UUUU¾öÝB’ui†‹¹öý—œaªÁï~/,C Ž^Þýí–¸ÞßÞmKpŠ­ÁþöNE¼N¡eØAû ·!¦À»½i²(}‹5…qŠc…Ÿ¨óŠ/C àà}^ÝFæBÑ@šFAÃBÆb ñŒc5Åzaà +-z€ÕAŠ!’Wµçý5§UXÍb½jC«)þªJÿ±QÕ%„ÖgãAWTfƒ–Z+h]›ê5d%Õ«ž¯’Âjç@„u°þS¸ì«äè-²€y~Ps—"#vT+ü`±¡¿jNWÅêÿª°XuBUU´`[0p„>† +-”MžUWY±È*7dmUy«QXU¾ª—Óëîã^ 4®˜Ç–Vc¨ˆ°:6@¯: B覯zÚ§:QU%}ªà70ZBJ­KZ¯³Ú,«Vk2ÖN¬K`Õ7¬àæX«µ¸ ºš¢<û¦U¼j…ªaõãªI±êµêâªüªªJU× ª™R%‹á°ŠÐ4÷Ö0­Š˜Yäe¬‡¬û±*i±V¡¯öEÂ9jT2%ÛaIFã“lá±JG@àÙ +-2­POV-­ªxÕyUF©ª~ªkYªá+îè÷^›Š ]km Uè˜u{ÕåX}±Îë&¬O `ÍöUíøßuLÓ*.”ŠbÕ2€üXU¹j·V¨J ¢Ÿ R2ƒv ye¥Ï¬ÏfV:CVö=V‘¾­ëÉWË…ÕæR®Êyµ ý›Ù <­ª6û¬"\µoÕøUk«*˜ª?TýOuï"lJñsk¥¨µÆXÙÌšJr²â¸a­A°Ê‰†g£`u~ÕÆ0´0ñþ¨O[«1ôU©Åêñ,̳*ªõªž¬ª;ÕêPáD•Þè#;(í›°à[ƒ´¢³N3Va=+#XMkVn/°žW^ÿªpý‹ÂFA­Âw²®¹jt®Z¸ªoUõ˜[ò7âÊoÖƒ²¾ŽÕí kjûb-íx+Qõ*1ˆÜº¯žÎßµ÷j½î +-m…®ˆa‚€¬RXºªÀª²U%ÞF*‡…ÙîûW°/´rÑÚÌ:û°B²ª*b}ô@BXß²¯FG¬«qV#w¬^„oÕnªð¨êU©îæÑL…€D·µ‰VùLYçûX!.V°ÎÃ:Í«ñIxw/Ù€.Ð|Õ<¾~¶jUV}(6xU1=¬Ò«Ò­ºb¨ªµ‡'Â3 dŽ´r—µ¢^ÖØ°ZûãU:t°.ÿ*%¯:6PÁ:¿q¢¯fðªßªN‰Еê!Rh5ÓV …U}HV±JaÕɪ«fUƒQt +-! ‘0ÀɉV)•õt¬‘OÖívÅ +-¼„Um"îÕk(É®ëê]ÅUÌ@x˜ Tû¤9ì®wàv¿âG@W +-h6Z‡+¬ÇêîW}uYÅ{ +-P‰UòVµ]uý`U¹DÔ¬ ç@å2è8YÓ²¶âDøX¿l {X¥d(Ù°ªž“¯¢ßKÖtŒK±¯tßÐ +-@òÅdUÂô¤Vë +-Y½Âªäªú$˜USªjL£â™UYV„³îkC6¬1“XC{ +¬4y|5¬È\¸ì«ríïn· +- «à +-#cÕx€pVYí µV•"® +-¬ª‰°ª‘Cä  ^¬™ž¬À©ÅªñU±°Òõl që§ÅnL±»4‰Ð_­Y ùë·:—º‚6¬rJ@5Ñê´«JrU +-X•^5¶®*NL݃pIy!V1Yu• ¯<±Š´Î*[)ŒU Uµ‰ gE4Yï¡(Vö‰“ø`¸@þ-¦ÆùUl7 Ï“ÙÌVñuW@ ³;¬V¿Y=«“UwIfuq¬zk⼆•}dy5å-xb U4d¸È¾êµþ tµ›¹Èi¶Š³¤ô\Þ´n\¬¶Éê4µk5Ä•uØYýwÕã\DOòy¥5šR%V°_mªà₼« +-É( ädêWsêÀ®OW½?m +- L輂ýXׂt ¬+¬–¤uEÔ*«IË(Z’BÞ!Tø~„ +ub§°u¬fò*:Á@Ì×ܟ¡Á6±þU…Äq© [m/VuY%X_«’¬ÂÄIAžmùŒAæþe®¸K¬Š6âz¸kèbg˜W!ÓUR¯_]·—«±¸úù8l²ëVîµìÂ*@V£raõH@XÝb+èB PT)Õ3"›Ë›eá’,u«i[7X¹`C žxlgˆ_µ äPWQçÚŠz[ý®€ŠÕêú« HkЂGS QV¸ë&¶ð­¿KÖLãQN@" ‹÷D¹YäÔ‰`U÷ÂDžxïþ÷{ò؇ ›í²€0ä< ’?´«ã‹Bü¸ù‹8o`¸Ã‘Úe6P!€£{¸ëâéJâ }+–·\‹q´i ÙH$ ·!Ã…3ý +- ‚T<—¢1#“Â'TÞ¨¥Uå|(4Á²…ÚÒÂtö¹(.ÀYÙ–mö;Ok¬‚C$µc.•EdÐÅrk¯¶ÿ2)K)¿¶ªU€!·­Dk–OÂ…e=UÏÝaüøï©&´UZTyo$C ”^wUiÊöØÓ*G'Uÿ!‘Y lÌèyÇy7ØqÆIleó‡/ØðÃã“8LgdtƒÃˆ°ƒPò”V„³É:†|Åzq½z¨.)½ê> HC©¶¬@VëA@ÐP0@¦…«× ³òªZUÅØÔ)äñ^±DzÚ>뤬øš ËïÇúmb}÷šòUgë©‘|( ?ÜYýXA‹X•´8&þl"$[bÃY Îÿƒ‰¬‹í@m+d„µ,&XqŒ®¶ßŠ]½luËghõ¬Fë«ú«sW5žV¿ªØIÌÓCÖlÈúßéð~[ð°ØŠ‘ÖÇY3º².Á±*VV¡¯Ó:>iá2¡O^¥7ç$D›¬ü †]3UnÈ«¹8@1)«Ä®ª|U[«­ªÒ/TUnÝáxÀP(5ì*¨ ‘Õ±îŠÃZ+V…€Õå°Ž¾Zh)A tÌ^•5PÚZí‰R^5\V }U¥«cWXõêýçäT…aª¥|0ô’úüúšò‚€vVÇYyŽVYÓ–±¾5…5Þ¨qëU§tU`)²ê8!Kú—¬Ê5«^»jõÄêªX¬ú€ªÄ¹?´¨Âc’ÝÇݲ@<­>i]œ³/«€# '¦þ¹&à’j*1–Ñ<ÀUCFªˆ0ÌsÑÝdQúOrQí#QI>ÿø¡Ã¿B,çÁ©?¸›·¬»2JÇQËyáAw›kÁr5+”ó Bõàí.ËŽj¨~Ëyp¢ê¤éƒXÕÞþàGåýíGYþ +-Ò±¢Õ±aÂÒlÒSS* +- •$s8¬aù"l2—»Ó„5sd +-1úÈF¼Ë—Ãîƃv³.Ë•.W$½Ó´ÙÈ°k‰qVJ¥Ic¬¤ŽÉ–76 î6´ms¡ ›¬CãÚ4mÛ&’þŸ&¬ùˆàpæ6íf¸£Ã²‰91™òꥷ&ÃVNè¥HÁá.c‚iÂ&ßî +-þ e2iðâÁk2¹&m#+¥·OGŸ™ªe•þi:§Ÿ®òiûùƒ˜É·KODÖøÝeœa—Ã4†37g Hÿƒ—ÉœO}P›³eý9ÌÌÚÜxSíÛÅ##!ZüÁ vÞ2éÏ×Ó–6~|©E•-_ú¶³e¤QõÏè£×§eÒ#ÉÿèNén!J5Ëy0Ó5ª$==gôû?§Cm¨¶–¯R=Mi¥ŒzºÝ¥8Žå<èí-[ZŒª½NûmÑß’NÈB]QõÇåð•q`ŠÄr<¨ú;±œœaðk™åÀŽ~Ëq͆å<ˆ©J#g +-ßq˜#W09Óh2ÃÚån2ŠklîÂfÂŽ®ô-uIßúŒ ªŠÖN¯’Ö)Å +-yGUNúò£ÈºtÈ{Ú(ÅÈ«D­»}È»J*¹•¤‘»ô7¥±Ji'µTþŒP€Ê¨ñ@¥™™ñ !SI'@à@¤(C@’ã 3!L@%"¸öQŸ9ŒXFäs‡Ôû +-…;˜Bðê®C›Ÿ¥V°;jíWKu/az—]×½nÿ´«³UÃÇ–6Î.©Ð.r×>Ux’Ñå_¥ýh8KÑ1jlP<œíž#$’±Œ–Ê}í%ÐÜrPì:NSý×Ârƹ +-èßÆ;›»¶NÆ¡ºÇž¸+;È©:€Ö‹}×:f ¾MS¹’MkÕn4Œ™œ¿þQÄïUÚø&Üú§ '£¶°]“×—%i =ãäœÍ·k"·cœŠÁ´Ûû§ì8PÊ4†î/;V-k!iš\_óæó§ÿÜ6 pÊ!" Ò0²›üF€J´ðð‚ +-FC¹ˆn•6¬!‡ y,ú9U€Í·–µú$ÓŒMŒ¯Œr”[zƒ<#`†Ûš^ EQÒ•«f„ÌîwoŸ.å.WÒzðŽ‘‰ÍÃ`0h¡’làhÚ‹sÎþÿÿ}ßù¢[fQRãaµyÑda›7)Ñ›5÷ÿ30000TÈ èuÝ–U +-Åã4ÎÓ€¦+Û¸Îó¼ïû>ïGÒ­T*_ÔC.»$SäX8ÌAeœ…Cª.û&å‰Ú›5ÿi¥ÂP©¤ïí½÷ùšoË°ëʸDoÖ›kÍ»ÿiZ©¤¿olÑÓ,G±Ó0kŠÆY<$ÊB/Æ9û_@ððàÐP€@åó|-zš¦y¢W÷ï;çãkORì´ì²$SäxÅAm®LÛ6ÎÇÒ<ϵXó_!P Á¡¡¡Jú½ïœo½7ï>­0(ÐààððððààÐP€CÚ7¶çI =nÓ´Ì¢$Çã4Œâ :ϳp`™Æ}Óf½÷æ[ç¬õæœ÷Þ;ç[ç‹–b§a×uY’j!r,žÇi˜ƒz `šÆqÆCª0ë:Ïë¼oBš¥Y–ä(~×uÜ–]”Ôxã< Æ#š$Öe]×eYVµ9‹çq˜ƒ:°(˜†au Q¥…Þ›/«"Fb‰L'–Wwÿ¿Ï(h¨¥$úC­rQ•éï<£$¨QQ¥__³Ñ êj´HÔ…yO\4ˆÊ<‰ÂºIiñîþÛRì0 +-b$ª$ÙÄÒâým%9DmPi3÷¿’ ¢*Q…uÓê]ŠFIEƒXÀ´ë»H,C’láh^Ý}Z1)߆UÒRaº¿1J†›$Á€.N$Q¼ûOI±Ó,ÄM–ÖMx¶å¤Ã¨ˆ‘XšFDa]Záþÿ¬’¢N—æMLûGð±X8 …êÊ8‘q,¹¾¨Èñ0µyeaZŽ&zóî?­00TÒôïùÖ:ã‹–“NË°ëz0Œ±Ô˜»{®íèI ’xÓbŒÑ2Ôõ+1÷à5KtåÕœëkŠÛ”  (ð¾gtÂM +-ð2sÿéçwì(ˆ¢Bhbf dÊ>ÇåWE˜j%ÞÝwÏñ³"gñ(å'‰0²¼Å›s¾o¹W[ò“@ÍÙþûžÏ WAM%jT„Y$‰·Oß–ü,©‘¨à%5•¬¼Ü§éç³@&-4/ùY‘S ùHë÷%AKj$–HâhæèèI ga"Ô&š9Ÿ“­Š4K¥…%Þ· µ Ò,`iû¶¤gI ň¬Ïó'òÓÔslN(-ܸl(X ù»¶dˆ}#šùÿŸ3µªM41÷ÿûí£˜xc3”®´™wO‚ï½ïŒŽŸ%-u  ‰PZ12aÅäGš¥´Ì(Ä"2]żA­‚ˆÊè;GŒDÍ>Šyõæ|ƒÙ’aFÕìÏ›7ï[ßÌý9Œ‚‰¢0.$Q¬yÏBÒæݽï\ßsüÕi\½{ï\QF±»÷|‚‚Gæž~nE bÉg^+D÷ÿ>—…``ðXèF»;Ï&X!8 +-‰û¯—xf.55¡ +-Ϭ˜:l~‚Âöû7…fˆ2ñÌœgt’EM­¾wßó J ¦Ö«ÃSw¿qùUÝhõ†(¶ÑR4…§ Ê&'B¥Q‹œR}%Þ\¨”QªBq£Õ{ãSÄ † Ì>M{.¿ +-&Ž‚æ½3Já&@—h÷ßœ‚Ì(pãå?õú /¨YšÍ÷Ô5äÝœçs’IM%`ô%? j–…k;vÓ¾ïÎ÷-% Â€fîÁ`À€ûßµ ZPS¥Œb·×ž‚(›ìKÑ$g0呸ÿÔoT¼"gI ¼sïù%=jëó\‚ ÚäÌ›ëK~ˆ!à¾ï[‚ä, 9Â,Xâ2p<íµ'¥« f¹»÷}Ë„ $OkÑRä(SÎõ-µ‰äiíI†ÛQTÝûƦ¸U†Ê>Ši¯=ÉP›ǫ̃Qb¡@1A ŠZê  Ž‚(@„`@X€! ü0´˜ò,Ze5‰=´…ˆNg’Æ¿åU«ÕVÀ먖VŽ4ÕC«Ø‰Dž\iŸ¤Xp‘äCˆq„"ˆÏJîîLEbè,s{.öÊ°„"®ƒ³öA¦Îr—žHµíl¥íãèú!íà²ù[K4+(OúK¿ÓïÖR|ˆœjã×à„WµAUfè°” î†"m¬1§\zoÉ=ѲÃû3Dš½œO— ‹4m2ì^£Èœ=T¢P¸Ûǵ‘à +-÷ÚÐ>‰ÂU“L2e1ié›Ò[òov$xòÒ3¸„Û\¯íª´´a×Ï9P.åJÎRš¡WB_µï¼å]O±5jù‡]؃ïv‰¦†l¢W!;U [‡ZÔŒÎRlR }Ò³gYE‘74XFcÙ*fÝeLØVÏ•ë«CCüd¹¤+:›K4É•KµjØÍ[ÃiÅE¦€Èp‘2´–Fª°AÝßµêN´ÇD+€ŸóAÔî 5zt€M— ½'/ç‰^7EF ’ä´`p-ƒštÿkrüÕ`:xeŸ"Oq…Ûé­¶ÿ-‡|çcüvŠú9ø7Yˆy]å|6u‘,«†ýÜ¡¯Q~ú3£eO¨Ÿõ–)¹’<ön©è%Ëýż‰§=¼7¤Ei RMþ‚@ÈV –úM‚ê#@E°×4v1ÜÜŽ¨3-´3]—nÉ€‚>qÄ7ÞÏ?VU´èæš8errˆÐâ²hŒŽ/Å‚Ml¢C5P61”³Ï‘ÚQ§íŠ\Ýy>Øù3 ÁAzz=(:D›JÁkb¿¬uþÌôa‘‰nɾQ‚Mô™Þz«•®‰'U1îÄ6z)h ™h Ò½Ù%báÞaò¹&Û?Ë9&>=¥úÐ0;Jd4ˆÑŸ:&º·†ªÌ˜äðöƒ Ø…ÞçÞ +-YtêŒnˆ¦Ü³ ?†EÐÀŸ£-²èpâòÒÅZ¿]‘‡ðÿÙò%+ °‡¾QÆž3¨ ~Å96… ¡åP+:‡èú–Q•à |@®šUÉûìqa%¥¢,Zcç–kÒ›†ˆ`ðOÇKEǾݳ°G³¹ßþ±ªùù÷ì‘ŸÃ(Æ~‘NÿŽN@ОH¤¾­$¸• hÝü A5»Hm.ä °ŒŠï‡.?C´çl篟kK‘©d —“틨„´ÜVÀaëÁp|'E§˜cº¿`tß+N}upæ41ÙŸÛæób凟 GyÒ¢%FpbD­´O\%Qç¢.Žéùc¢04ŽI7R¯ô|lEç1²s‘²êüxÚj$GG½.`À[רt­´‰Ä=m‘1 Ì@a£³£fç‡çúkêhTª["‚J"ùÒM^fk×þEô¦ó.ÛÙ™uFŽ<·+ÄÙÜ®9±ºé•y•‚„Pžýs«5Js +-T. ü@Ü|âZ8.sß2ÄŠø¸Š[$Ý@4Y]³š§ãÊéÒ2Ÿˆ”Ô°x—V²ÏZÖ]È´+’•ÎïØb¾.ûc’Ãgædhâ… eúµ2{À‹{Œ‚üäú2ïú–é—:Ù⫈Ôdü‰çÛ]ÊRË$Ø×^j5ÌQáíÓœÿ¥"MçQ¸üæúÒ«AÐÀRÖ½Î%2có<(k}©uá´yY¿¥($šŠ÷þ*i ª*i 02²8¼yî2ˆ¢™X‘Qôn¾¿‚äœ,Ýëüm$ã¤4O_Ìû;Ë4£Â[ ‚2.zµÆvòxâfsïÚË$…Œ¬b­/w1˜ƒ‹{¾ U,ÎùÛ¨HJˆâ“ÖáÈMýfAiÝýk+‘)3WÈ‚ õð{TôæümÓŒMAÆÝüž6)¢f™f„\2IÑTÌ.øo…$„Ôb Ïùó\-#iéþë÷žëu!ŒhÝ¿·Q3Öç<[ló0ö4jÆY´yŒûð4OsýiÓ”Sv¹ŠØÄíûüq‡AÓÀìï}i}´b Wý½q€¾”‚¤³1g1˜Š÷¾”š±¢<žáľÖßFÍè½~O›¦„0øZ C" æ=ã®â8<“E204Óâ^6ÏU³°1,Óéa Sɺ}- •Ë{”†¡³À,æ°~{Eθ^Q„ð/­f¼ìoÌU“Oó¯½ù/CBÄC»›¿Î^æ80ÏDŸw­?MJ*î{ßw›ÍB®Vä@Ù¼°mî=W+ŠWͽ­ ‡b]»Q3ZÜïëÕXX¨á¡1T4£MA0Æ:€ðH +-B  @€ € |À I;Z"ë9ôGÆx=3#‡ž <Ù‰¢#C¡mÂIôc€Z·<Ï(Ö½³Dä¨Æið% Gï†öè–Ðî¹W6º6´1Ä_?«ŸMD&›\À‡UÀrÜ8´q§’:Eb¿€¥0ßYõ6Ì-bz8õ\2 q(ðÊ]! s-jzÝÒ½½Ò84+Ÿ%’ð¸æÝêð +-ZœVüOhsm…qè¿ÀB3âÐÊE? ÚbpCÏPPôŸã2ª8´y€²è ŠCCáÐð2Ä9@x^–àÄ +-ô&j†÷ fC$ ²Z‡\YnˆŒ´‚ž`öëW™–/€k½Φ:уƺ¹û5ç3G ýt¹ÁAWñÙÓƒñ™Â·× ‡&ó†ösT4AÁ¡?†‹´GäÐ +-Š†¶ý"å ¡‡^®h>æ= 94¬S´oÉ÷‘¼PP±#‡NBª†g/PÉ*W·}%‰3‘1Ú©J\¯©<ઊ™D/ȱBÑI}0s(r«ŠÎÐCE¾†àB&‹ŽÆÀâ«íR4]aÀH`0Q¡.Œ­:œ ^€ž¢ÉD”0FD¼Ýh|âø ,JdÊìÏ@ÙˆÒ"˜ò0„Ù¥–[Ÿ@­|gò+ÁVT}}èCü¨íZ% ¯€Ò»æˆÖ Ç•)u˜'DTå&M-Ú*àw®r?’&â¨w• \O•Úž\D #ý²¼ÿ­”r]Ùßrkȹ¶h:|~A +p1qa>‘p¶³CeåëŸà *lCBpèY¸<ºÞó•®¾©WäÔXÀüƒ•–Àª\(¯¶Jb`.Ápq1[@+ʬ&r>50¶€f×»ix˜ä†nÅÖúÂÿ3uª)Wþ]¸Ð¥[:[ºgºuR èKügR9q -.ø¾YŒßªÃþóv.ö† ås: +-ès<Žè*C Ã$èv*hMžu]#Õ>ƒ$èb?DOàðVät ÝÈ‘}êÌõü+wôš˜™šä¢w®Õl&7c mWçn +-ÚÝúàÈ<­?ËcÀ˜¶À˜tYßmzî^3ZQ„°¾þjAѾ–‡u¶’HJÅÓsÕl(Þº£4œ‡åî}éô0‰i»{…¼÷Õ p@!û´¾[$ÁìíU¼¼¾”š ×và@Hq7ól#Û÷¥f”X§y®—æáËUP @¨|›Ã C{ $TºÇŒ!µ7aH‹9¬¿Z3Òûtz ’æ5ú³(`‡±ÅòÓ¹£4œû]Åq (ÞÙ^P„ð{O“†Ëæýõ0š÷ºÒ=¶’EԮΥ!¡ÅßUW¿µ"‰ó§E†ºêk\«Ùd‡uyc:%˜íê|™,äAA{ @˧õ—) ¥áLºl¨™ë‹ä@Võ7æ¨O0q™çAl7ß 2Ð`Þæ·Â0_$³a®­¥`àgqX6ïJ=†Å‹“.RŒöÀºŸt™ªEÅiW¿­Lþn²ˆÚ—/G)ªúk›?ËãµR0™,¤Ö…!3檇±_q8D(Þ“î¿›0¤—q­f¼dçKU +-F.$—wd_ÎÝd!’ËçÏ¢pÐ7_I4ï/WÍTýìQÒj‡å˘Jˆ†Q¹Ìe?wØ@Í=SÈò]þ­b¸Ì3'YÌÓû«4äݹVÝ„­úûjÃß 2ðiÝaÄþ_$3¡¿Ÿ‹ ¶›?Máp0éô¾Ùc{AÌá¡a®»k2ð½Ì!`5úøK§„¡òqþUŽÅÁ"B¢ùfÏ¢p`æÕmþÛc ó ÙåÛ›4‘ĨÑBˆ¨Œñ‚ã(5 à8†‚€€n†àé$~¨¼vÇmv78ïŒñãß—jFTcyÇC{<×7ÊàŠJfn`hu,oÆCdZÅ›0‰ç3µˆÈWX" âaÔ"Â;DFq¢‘ÐÃé'‰Ôª/ß ‘¢žð‚ã6Ùc“ƒ@ÍÔÜ`PÀHósk†!E,¡s¼ºàBÙñòÃz^B6¥:4Kzn…eYÌ·£ó™ò¶ÐDÁô‡ú0x.Õì¡ÂÖ—Ø^“l¤H¶l…Úˆ„S¥ È?Áz,³¡ »¥,³ÒÂE_0’%.Ýrr,ª áf)Z¸FCf›m¾Ke†Tà$Z¸B€¸zf†JEÕœ½ðt£`Ü9œ²'²a»h,?èqMë³8«¨ìçÄ_¸Ä:Ì.ëÈ[×TÛ¥ˆ+E'gÄ—.W9Q÷ŽÙ»>‹¥uJȵÄ> Tà85.J©#3Á…4j³$75{&B$–ÄqÚ,‡1†GÈ>_W9nÒrQÁú Â9w5‘Îî…íîsâ“eý´rëšó‹Ø¯ªP뻲ï-kš”¢cy) 0QöAÃÎu÷{L(ØÅÀÐ÷»ÙŸjû·myÓ$ACÛ +-žê¯¬Îèÿ(вí"t#Paâ’PÐß±”’ЀæuhG¼£z¡‡œ‚YˆˆàùÌääé²Itœ€NÆ7Kƒ'¸,D z³+R§®1|ûX!UÃhEG•×Ë)b¦ZõË„¨æ”WHÓë§gùRêhlJ±ø±JÂdØŸ&z‰’‘š”ð¥Œ?•,¸\L(#á ãÚ¤•þA«¹åu÷Á=O±ß¼ûŽŽÌ*ZÛ©‡)TíëÔbKÇg,ˆìS-õDLce¸ÿÌ'jÕeÔ­Ú)ÖÉp+rPmÍBc,fÚ-\1¿#ñcîklçt®}^i´•ÍYx Ãù±*œ6›¼/2Á´ÌÊ¢±üÒ% +-tô&vnŽ€Ì¥=‘¥À( ’q:«C¨(`Ç­Î#в]Ά††]ÅØìõ®ÆœŒÊ³U“Å×^ÏbÈ›+% +-ø²Ý$„l,|`î$2çïjH¬+âªz×…gR8ðu¹G#!ìþÿ¥@Ò¡:Ý·GuÇ4cÄÿ{fÈ©·»î Íí=kÑ»Ï/šœù'ˆúÁÊÔÌË~7ìòM+°½d óàt¸)åÄD„òpwƒ3Ü;ÆÙ8Ûƒ4”†¤Ü§;X‘fª€¿=ˆÃ÷7QDÅ„n~±g‚ûb´;s¦j\™ƒuá‘•›éÕŒ©¡Ø2LM´˜^ ‰éÕݺIˆš}Ö³²^ÏjÈIg?MBx×nSc¶YL­†Œ‘³Ÿ¦€¸<üÙšcBòÁðnàÞƒát×Ü´ä0¼AUù_ì‘NäûÍ€iù·G9ÝðßgÍ1¯ÛÃœEó¡àçµRt<äÕé®9iअ‘*ºïâäþµZ,&•?Æ ÙÁÍ°åß”JðO’ˆ1Æý8‹æÇ{Ö¢ùœFÓÁvN#N7Ç!Xö㌲Üß¼êªÈbÙümµˆQëo¢È$c¼ä&¦’ùÍ )¡{×ÉBÖ¢‰¹æ¦åw÷`â2qšã ’õßZ‹Èk¥èv×݃‘‘–;§‘ ’ «~ûæ¦åÁrØ;E)‡rpöH +-þ¯•ñèx¸»³HY»µÿ{$õ}nŽCßåèð?I‚ò¨ÐF¤¸@(&×Àp0 +- @@‚ hšÍÀÐræîáúIÂ^\ö¹}ÄxD.ûZ^?tƒ&œ4Ãã}î˜/®±S· ´×t º„Ý·¸n{nq™U—˜r‹ëBžŽË€#·K^Â^Ó²gŽŽÅ(PZWB•"Mî½nn€4q›œèÇ´ef‹·7%²efçò’üÞ&" 5+õ·‰Hê£j¸Ó W~c¼=6Ô½5"D>¹%¢ü^ڔɈ´ÕD"‹&:Q²àðå¿Ö؈p)y›ÙÐXç[#%5'£H×eù1ìù.ó·iÒL‰€@¶QRóá˜í±ä¥Þ'Á2Òaá–çš[gü«bhœ 0—©í„VWãÁ³)A 3Ë&?çöÈ«f³¥Ñ“ó¼\øG$’™Ìé ‹¡ € •O†ÖlAÔ;yÅ_f ªe’‚€r‡Ú·SåéDUÉHO.œ$ñ‹}YU +-Õ§[¡1pf×–&ƒÐ§NélÛðŒîöà=‰¥7LËûˆPÙÆR+<ˆ‚Êë¯8WË$q+#ÓØ ñŸ’ÆËÅ)êŒôîk´Ž”2vJJ™¡ûš»îiì0Nãc.xÂXýÂÝæêqn»ž&b?»¢¸hd IøcáT¼é +-ᛲôd± èKÑ™ŒÆ:“Ñ&R›hYCC&9ßu_1_㻕oã¼:•EÛ|’}á‘PøýÄOSÖWbTÚ¾Ô¡äS<×Þ0 €¼¨Ðl„H1†w€ÈIà° `„@€à ÃXŠ!†$‚ snWˆˆ9o?§6ëŽW[¹+G9'~Ltgã¦vy~@-69Áü¨½ +-‹$ÂÕ‡ëc‚>&%˜H•€¾d7³•ä;CÐdEÙ_6u¿pE%è7W‹±w¢Êá‡P‚ÎêæÂ/\Úÿ;ÒPl’ €“ˆË©NÍÑUˆ! Ökl^ÿ›Bö{ s0Áã²ÊÅ úQÒØæ¼ñ\ÍNã$(öÑ!·¸Ð«[®^LtÀhH˪æ9§:½‘j @½1b–F¦w+7Z/Ò_+Þ„ñ‡!¿mÂõüĈŠ+"Ï{M€_´S¨aM*"=láPû-±H_“ܪwèX2úÄŸ‡Gtl +-ÜVCh7̱s Ú†Ež_o?ÚOÅÞ.¼Ö8—¦ 1"¹ÚCÌàGÔŠ GКBªà{W8‚ÎÐyð»áz–ª +-Úˆf8‚>É»Ê>&`8‚V$Á#zb‚ÅÞÉmBcvsåw8«ÚŒ¬–S²*xÝ{3‘trÉ |mdòŠ-”—¡(Áà}Õ¨÷]]ÜENæƒÙíWuå/ÄXÛâc$ ½tou5‡kŽF6¸R¾¯\‡É2ŒIÏÌ°“‡SÙ,Ô×^l_aª —ËjWLüÿ9Lüÿ9Lüÿ9Lüÿ9Lüÿ9Lüÿ9Lüÿ9Lüÿ9Lüÿ9Lüÿ9Lüÿ9Lüÿ9l^`/Ø2WŒ&CШ԰4æ0nŽÊ"ªQÄF©èQUÞ“E0sx‡ˆ:::?‘ÇÈgN¤hþZBÀ°ú‡Â¾Û!±Ú)»æd¦ú ‘ÏL¥% /ÆtÂÙTïm.蔀ð›.6@"R ÅÙ«äÎU +-˜ ›-ãP¸ürPÂYüÀžÅwM ·«¸G-Ž*>µe–„£…áʼn}$|¬ù\GÅΊx+Å\}J hɮӼš~®@™xÛlÚÞñ`_¾‘R+–Œøëü³dç_q¥âvŒ»[íÁ„!÷»A bf~7(¹!K€lß&FQª_¬a°¬[ z7_ÆîoÔBà€Ë=qÀ n*)Êv?#D÷„$º¼I ‰ºkÑ’;+aʾËB Ä}Œ5 ýœ½ëv.Г,IÍúÙRNgJÇðWÊLw*)¶œ·I²½k"waÖÝE`¥óE€Þu³O"DDšgkàÐ-ÿŒí³5p®›{aw÷‚žì·”ãعRŽ‚³'/£a·Õó,.»,8Ìî)1Û?Eñ›ÅÃÁ!û9ëÀ M§¦e´(41–eà 6—Ð0dø¹ *p]«ç5š÷ IÐÆ2Z*õž +-Þ†û&Y8ÚŒ($Å· …ëñ±¬3‘ÙáukAìVÖqæÐ0Ö"ŒS©©j_,BkAïz­ž÷7‹PQ"ÌD/µz¬ÔDgŽC<\ŒW%‹î'$ñÜÅ(üý–9oSó¿MMîz húWÊyZ¨A²ª¡ Ä$í`Ð8ˆ€€` ` ŽÂ@Ž)$Bà'®ï)  غ28ÐÆ“.æ·+®Û +-šá<–¼¬l0í..íÒo롆ÝåÞz¸~wqI*$[ÔÇ+âr{Zu÷¸’BQ\ +-+g8 ³¿iÍ.–†kEu¹&Ÿå­x+ËkŠöÈ$¿DW*w+é…‰àÖ;Ÿ  ˜wìzˆ¦{3šÞegK‹wƒèjí(ùõ­,K¨»Ârw$°÷FrÇ­p"¬8™rg}3ÛiÓÙîÍR 0`§=)iÁîe–§Öll@>¢Ž9Ž½gRƒçŸÒ·Õþ_'#‰›¾ƒ€TkKbÐ×½BXÄJ‰/jÖ ;é]Äv¾ ØLDƒÎ@‘lT‘ŒPéò~ÖßEÝ•Î’ÃQös”,¥IÇÎäoC2Ñᥠ´Š_šæ뻟ö[²4dˆ‘.yÁ-…¤~øFÁJ ˜² ¢7Fnf±¶X54µfŸ½ëˆhû;P ?LbH'Úü}‰‰ƒU +-¼ì\5€æø`§@F»ÙÌ.óZ·;§B?n® ÇkPƒ®„Y¼µj§ÄyødgWƺhZàj¶ç#B7‘ò3û ÌÞ/%YÎF +-yHÁ\®ŸÁäˆ<·¸NDÿBô +-ý&´]–ý”Dܹ1C +-jI0¼¡çˆˆ&^£ø›'ªÂm7VbÀ­¹çv°Z’‚d ®ù m4¥òƒÁjÆ}>„à…0ôC;8¹M-\/CÛçð¾<„#.oõ\ÜÞì"­¯¸qÕ'· û<¼ñ%äø³‰È„˨ØuN“±¢›“JÝO€Axri–ˆÝe‡U×±ê¥ãÖ¡±t—\¾w¾&5â‚ž,E[äšïK‡v«é‡ÜyKÁ}Ñ£OHºÄ’4 áªJj_ÓpÍ Pî¢nˆD%V¥q N¥cmJd³b çî"q¤g!ª?Lå£-À”jfgÙãÀ9ç0¼udá9”Ñ) ªâŸLŠLÀ`un JüæW”ÀÚ–ëÃ2 Z~‰ŒŒÄ~»‘>p{I#f˳[Pbó J`;å5”Í8› °S¡çÝìþÉdàtRd8ñ˜Ca¿£ç\dq_Q¹ sãål©…²=•Ñs[ÙV΃δ7•[H¿ŒW¿/ii¨úMe¤×³é<碫ßB¯²Þ—ŒÙ;æP`ŽítÈjÜÁ%- +-ãJ5ʬW§RüŒ³ÓÈ7ò@¦!ËY«š÷4Jü–´q¥œ‡óÕøBD‹Õ¹¾cå%L“·G@`!¢QÉ4 ¤º¾#1^§óKeœ™ßKFF¢÷ëtž»®×é¼È@Úo+ç1% FâY‹<ðf§2V”l.‘±Ò¶ÍÎF‰x*£oNeÜ´Z„ 4׬h‘“nÌa¡Lj]–Y7•Ì3³¾Ô $<0[=½Í'``R¿%åÁúµ¤xÝ×  eâžQÍ£ªF5OZ÷%£‚måxöKZ0®³y9k•ó<÷%Åí¨"¢©â á…Á1ˆAÙ€À8† € €!‚‡¡F>äS NAmUE"¶Êƒ—üº rýY被ßܪêã`M+†¥X}(©[ÝÇHêYªN¬ïcÂEî°&ôâ<àW߸7° zr㽂ZzÆ4jV:ÉÆ«á̹Vœ­'®äpìÁDò À8£¿›Š\£ ½ FÁ2à§ðV@¶MÓÖˆס1í@ ÄõáýdA—èºt ÝN zÐuõ˜aC +-úüu¹„Ž¡³‚N5KÌž‹îNp߉—56©$ñâë@IèÐPCÎô &À€UF‚0Óܪˆóã„Ä ïŸ•rXɳܜ7tÏþpšpHzµDüö¼¬[½K×ýÞG{wt•‘>öWT2& 5 +-DÈìÊR¸„¤PÊ~FÉ›f£©îA,»² ,c>”ÿ(EUHãÀm– E„‹÷ôÇýysé#\Àn6¡Ag‘‚leMéCÝØçcê¿·*YéYh±TùYnïô¼=\xh›¥ UB× ZŠË< BŸÜZŒªþ…/÷~æ_.Ð|)#q}æTXƒvD‰ÛÚþ;N—a³z™gD®D<XKs ®+V+NíUJ‹·÷¹Œ¯}m¤D¤ëm#‘Às)”i›#2\Œ#KÛH$BÊÆ+ÔÓM‰ˆm«P"¾¼s½EÊÛ¦îúŽ´ÛÐZ°óŒÈL\ÈáF-¢·ž”…zhQü`\þ›œHŸ˜­oeW\%"äæ¸ÅeQ…2?Ëp Œ…x ¬< +-xÈ5B¨ØÜÒH²ÏwEK%ñj"Ö‘Xô0Kœx¸¨‚6ö&f·8;?.(58ˆ(ö¯­… ØÜì¨[¸0ra€j¼P‡‹vwâÝé“j¢¾ Ì ,*ÊNwqÑ$©ÅÕç­î• D,¦6§€èÖ05ñ5;@ ÂÿAç;!|º[²Q’ ‡ažž¡%¹ËÍ@õÙ§ÜfŽ¾-#itsüA´ù?N²»Ü»ØzD˜y«cQ›šÍ-çp®ð³íϵ˜EÞÿA +-Í™Rr«Zׂx ßÝÞÕybQCõ¶\ÃÙìólVϲU­édQØûvŽÃÄÞóMµˆ1¨X'1ظ;þI³®[ÃùÎ+eQð®~0òXS÷FžI²(,4ëëA]>hA¨û¦ʹ‹Ùd˜ÐÝõÄ¢¦«9SJÃá,ïøsg[9@|çÖwñý,E“ûæ(¾a&I ݃ڼ/NΠ»œöiwÈo? j +-÷N Cv–oK¹G@Á6ÞúY +-æƒ$œ)£¤ˆ Æ[¿JÁŒšc0òHJ ­ÚÂ`ù¾ŠÊ«wä 0×£&mã­^¥`²Qw RÙ¼wûÁ b0툽¯wÐÄÇÕ‹ 0ˆù®À²,Nt…[Њ 3sM' g‘PõÙ|CL’tw-j“D¨ÔŒÇIÃpt–÷^Pƒxt5çÚ=ß÷Ž?„gÌúz•‚¹&îürWdÐDà’z·ÞRFÉ\±[×ÍápüEž…êÛLš˜7/¨©J‚¿³¨M2AÏ *T¬ÖukzÇ Âs`Prf“aùÍ?Ä&9sï´ Bg%™;!1q¾à5É]9Çá°,•Wß‚—$Å̳¨Qβ,R©Ð· 6É ÕÏlr–Å0€ÐÑ¿SÂp8»71ÉéÆÿq{ì½ÿ´` ¼{ß +-$!™÷«WAƒ„ÿÕ³"‰…¯±˜Q‡ë³o¿K’Yøúg6ÉÈò*¾a69T&býá%ÉH¥â­ê ¨á‘2fŠÌ6‚”ë 0b€"@!€À!á(C?gA=Õv-1Еùrµ<Ì¿CäÍC­ãÓÒÅù!kùa‰¥˜T²èšzN0´È³&С$YtØòôéºv‹UÝýšÝÍzvÉiù©Ë¦œÌ¸8`D?³¡z/µU -6Å?8-½/zÒïmw<ИÝÊŠq@Qx!¢ÄÜo¯åˆØîC)ù ˵®„oi0±T»Ç<C§(Ú›Y ®ÔDžwv¯ 3M5•àjåü³ã¡æ¤Ó‰“1”KÕÏþ±:+ømëMy'¯ xq $ +-‡Ыñ$Þ‰ù„9‘•O¿ToW CAf4EõÈhÂ6¸*<4 DÈZšôh|3kŒÐÅžM±@om~ЭúF±³èæéé» IÐPúM”YäE4‚æʉ0pHß0Î ŸÍ²1;S—ÅéN‰ O˜‡ÉîŒÐT–n4fŸá©nBGjRÃIO°Ýg<ñÇ°}桘<õÞ¤ãT…ë çAÅqÙƒO…>†Ø2ú犋‘„spÕùP ËH6W™IT¸d°i. Äb¡Â]莡ÂU´L`pcdT¸ü =*¨p¤•Eì$Ÿhã +-0ƒ‰óž‰kûsŠšs¦ô 1 . I‘«À¦p•Òhã +-ÆUôÑV^ã› qYÌ(g›¯±¨Q‡eÁ&çõç³ÉÑ°é…¯«ÞŽ'60ÞñÌ(‰9ïxb“ƒ…˜ó/É°Wïšš>¾cWEÎÖÓåUŒm8y( dóÞ7Ì('€‘}ã +-b #™¯÷ ³F ` -†lÓþ»H$+÷m8y ´£ˆtãý2‚9DU…þWïš<µãòè?õ,É ïÞXœ<…ƒIXÿŽ•*’róL9È`uâ};·$½ª¹¶ž%9ŸÅØ‚’Ç@£™ï³É‚#€)$1sŽÃ½ïwMÎÌý^“ä_ÅøŠÅ`X…~Æöæ|ÃÉ$‹u¶_ÆH4h³Ö@+9áE|­_¤(ä¤*k ­1­\Ó‘V;:[Ps$ñ·Æ”ùZ‡Z#Ñ42Ðæ«gMðêóÖÔF +-<(ó÷Æò`±ÖwN !t#Þú2‡Þ¬1­X“³,5ë\½‹r*ë|AŒ:,®¯f¹Jc …6ç jD“Íß;ÛBFN¼NÄ›ogÚ+vÑ|5sžë}HB(óê­m89ˆœéRp™˜EʼnŸóÓ +-ÖH0™Å@4†§‘yô¨jó´‡BB(¡ÍSc ˜e0мÑRæòÆÏÙ†’È¡"\X¯?Í@!ïXÁ íï­“« V¡7cR Çâ¦ýK?Í@a8 •‹` $½o'gQ¦2~Æ5”< éÄ‹Ÿ~’‡B†ç+ÖtX– &¨áBffFf±@…“<€IÀ!‚€ `pºñ ˜µ \ªu@0 ™Ä °&ÖÐŒ¿OÚzƒK¤0“[åžÚäl@Ï3(伅A‡áÙ 3â1 A#(…™@…dEö t’©H–¸ï™— âyVQ¤·H–†‡j nï)ùÏñ §ßÏ×"Ù þ­ Ë1º¶3¥X¦/.A<µ^pB®À•bx +-oÏl¿Ê]㊊n%x‘¬Àµñ·½Èu6²5Úæ_‘\WIˆó?ƒÊI\YB\†r‘+{+&ÁÈ‹]‰<‡=¡ÑRäš‹\bLᕺè#EœÀxq…³Û?5ÀÕdqQ8»ª]DIÓŸËàK“g‚’(9Yµ+Ð?ü_·ÑAZ^v@œ:KíFÿÆ…€ÑíÆé;†h(Ñé]$’ÈOX&2 +-‡‰Èåô2‘r'ì€pbWUÞDª<ú%5=†~¥ka)DüF‘ † +-Q‹`XŸ -ºfÃè“iôzêúJh'Çu<ÛÃ.ˆ•w’!‚Ï/¦ëòëYZ ‚Bø¡ðóWÓÿôÐ;Èþ0ü¤€ˆû‡‰¨À©¨õü›éw!Õ3A¶gÝ‘ìåUeè9¿f{è–—)á¤Ð`Öcð7ëpË£sÄ>úAÞw öI-ëXðõ*å#)MpõÓ©)~cè+–uÏŒµ«î϶ %!‚?ú(éŽ8!ŽŸ +-pJ¸ø‡¡íy’¯QzlCK% efÙÐx¸q=¹ÐË‚:qãz,:_ †Ÿn"ºÁÁF1†õ`ñÐf?r í^).4ý×<4lÇs%<´ö{èàÈ`Ù&DžØ»¼›jC¬¶~,x›}J–?ŸJŽÃÆ›XµÔ‚‹7½Ò”ÔWz‚ä%`ÊPíq’$m†a&cÕFqÜ™ =?ª$2—Ïúàx€|½ólégEŒRyòâŒ+â*jSƒQÙ©c“¹)á Q‘à%)I‚x ‰{Tó^KŠ›#aQ ë£Vs®/ý,¨1àDÒbl룣KY ½t«½ø–Ž‚ƒÄ»wÍ(Ó&’7klŽŸ1 +-&? j÷¸Ô« Fñèåþ3 +-å‘_¥#iûB6©Q"ìanÿ½c@y~©G)@ÐÑËÿù·}`R£(KÂÔVs¾/­>÷z]†Ô0uÔ«ŒY`Íýæ@‚½µ½ +-Zÿ?Ǥ7%@{˜™ó}ɯj, &šÛŸŸ_È&1J£+æçò‘IŒbà(pãåþ÷\¿ +-ZÞÝ{‚èåÞoL?JˆÝ½ïK=*a9P}$æ¾ï$WЂ–Ä +-uZe»»ß +-Änÿ;¦œ‚cP}dæcêM xdîÿs+bÐ’ ,p«;Ï5´ åÀ%Úý¿ÏWXóæÚB4©Q”F£¸ÿÏï¸)0 ÛhõÞ˜ü(—£ñ$’ ãD:eàXbÍ{çùV¸YhÁfM8Ö›ù—MÐ-!_6A +-æ8.Nû2ä ’äÀ,"»!JGó‰¢'‘@SŽ%×»{ßy6)˜M‘"¡€ÔÄ›÷Þ!ßw6i¸Q ÆÀwžy÷ÞólÒÏRX$ åfZHÍÌýÿ¾QF3w¢´ZÝÿyú})hI‹„â¡‘<µ‰5÷EæY!]§ß–~—Â"‘àÐBß7®!æ¿|pÄ(KcêF3óÿ=ÏæøY’"‘X µÚŸ‘ÓïF¡¼ñîþCmj0Ô&–¹Ÿ‘È︂WÔ(QåQ»ý÷]Ûñ³¤'‘$’wûóüz1 Z£ÜúÖ,+}|Ü–]“´p†Y Ó8 +-iº2óDZKóR‘Ë,´h +-…qáXÍ«ûï\ckÖ1ì4ì²& Aá4Ë!iœ‡9ª+Û:q¬¥½šwžç -T'’æÕüü}g[R±Ó0Ë-œ†YÊÓ<ŒÈaaZ'öd4 ¥±pm ¤šxwßv9"†Ã’ÆaDÓ¥u"--Þ<£$sH ÕæþklKúð´k’²N¤Õb½»÷ÿ[Rä²BšXûÎõ5©Øi×1‘$VÖ‰cµ™ûF"çï—4ܪhÁ’'aÁÚøÖ׬cÈaSÄpD¢‡9®-¤¥ÍÛÿó<¿¿EÃ}jsÈe–#Z0ˆD9.Í{ïîÿÿžë[Òp£¤sHT™©W›5Z8Ë!Y†DeHšXsï¿Jæ=hyóî½+D2aHÚÌûÿ¿ólëjô$GŽÕb­÷ÞÛ:2‡DA4‹òj¾±9fàhb½9ßùš$Ü,Œó?¯ã²jI8`ªªÊ¸šßÛ2쪞ÇY4,¬óD¥$ÙÏ`À†Ïóøø¼®ã¸MÃ(„Çi¢ª².,Û@Zæœyÿ'ƒ € ,°`Á,X°À +-$€À ‘±­oËŽÓ,EÉ´­óÄ‘’µ–æÕÜŸ†­µÖ{ó~FNÎ÷曡¡¡¡¡áô¼c4#Z¨.­ËYï½9ç‘Ós}ͲV’Žâ÷}`‚ ~ßçyž>(Yk­•$I’¬µ–¥y3÷'CCCCäüß{Ÿ¯j!b<ÍrP¬lë‘,9ç|o1Æ_[Ò˪(G„ P<Š…âyB䨬뺰ló¤ysÖZkÍûyž‘ÈYÖQô¶ +-û‘HÄše%)Dô¸mÛ4†a–åà, Ó8‚D]Ú¶q×}ZKÓZ¹ìª ÈQMÛ3Æ.‹Zˆã8MÃ’¥iÇyÒT]X¦q߃4íÅz÷ôámØ$1šå4 Èaa\—¨Q¡BÈ™ Ñ „9‹é`pq’„ˆ‚! B €AIz~êêÆZgD™´÷OYÂaäØ–o‚´¹]m8·$^Ø‘ÉR?àluP8®â|9à$†N‰²u1wŽ»ûVVq­,òIì±ì2cé +-¼<ÄÏÂ%D„…¯2³@cÃ{sc“žh¨¨ñ‘4 )Ï1½±Ü²¿ÑùȶÊòægÏ›/© ò¥#±Ã(•û—mzÖàÚTƒtVèð³kC +-ï¡và: ‡”P„þçßÀü?"½bÓ +-BQÇ×"y +-(KžGèái@D}ìéáò.X€˜•ƧTÎÙAi{í±”[ß +-¯Xœ`Hb‰zÈ>W‡g2«ºt*gkkÛpÓªÑÀïž{ôÕ”¢ÇÍ$ev›JzÛ*ζzÐV–­Y ÈXoîgÈô™‰Öc‰q“!Çå¶L<$* ú%i]?4QKJ§áG°£r/‹xY¬n£âpìyèB’ È›áÑ4Ú?£Ë),¨j¾åî€z~8Œ1\¨Oéã“—¯hɬtÐË%k¥wÏ0äуô<¼Œþ±ˆ‘’\Æéˆl’vZÍ:@\õ‰+’¤l3ZocJï÷%P—ÝÊ‘Ÿ”KRïÂKY ”5j·nkÊE×”ñ¦Þwt•…kÛ »‡Í‚t´¥ÜÈŸy©ºÚ’9-àsáX4 €k}VfQDÓð@îu»k¢m#<é¾A:w&:8ÇŸ¹CÐ¥ÍÅ©ÚDg@`wzüyÓ|ñ”,šífèÓ&A£“UGðÍ0cwûë³4Lr&ú¶žKbjÓ¯CŽ"h‰t>E«¡Ÿã­1nÐæSÏ¢¹‘e½Ù{ü¬möó$è¼gÑ°Et y×wØ[zöóLÐ!Ã}âwŸü÷–öóU†¹\õ@«‚óï ôsh Rô "šÅ·«uÁD¶·À~aD=¶¹*.ˆ„Fu‰"úâIpöàzü<â.¢"­¿Ÿ¦ÔŸ)‚ÒÊÍY<ç!½ùùÊeßý¾”%& h4ŸüŒlÓ¾•€šNM¥ï¶€Ê$›¨äJlÞ¦ßëy?3Š; R¦AP$0ÚëÕ`Úåäºáq[ÑXfŠl{ Í´ª®Nnˆå£/M19î²Ívkh6°Oô±ó¸v‚#bë’Rñ«3‹Ür \Q)´µPRëý!Þ +-U¢;6óÊC…w}^ªMPr?$ôC +-ßU‰ž×G5‹™¡AÜ#æ˜|ò!¤æÙLtLňø»ßlZ(ÉufßÌË™ @VrÂül/PËm¹'[¨Ùs¢P‡¶dA8ñ߆É*´1˜- ¹¹þ ¬¯; ¿‚‹rÀÌÑ•}¼ D›S×3ê´Ü°î:ûPKa¹˜ÆT‰_#×:*„èæ_[ÁôWOÝY…¹,Ï`ËEýjùÚ¦ØúƒëŒ†ah„æï?sÔb,´2MÊk M¢<zLÀ¥÷ŸÙäXá{M0 Ýgðþ|9úhd7pKüÿÿÿÿÿÿÿ „H +-µŠI$É$¿t«ÚˆPÓX6Ô´P¨&½÷ÿÿïÝ來Ñýuà (6‹Q*© JµP!¤nnȆëP\××œÍ ©© u±ŒJnjjnêb‘ +-»?m{×=·£ÙÚ=¸n[suêh>çç¦ýÐU}ÍvðÕßùkª¿Ž&„ÜÎùƒÝ>vt1JêSQG˜PÉGþÓXLâi,ö4a¢%Bbâ$]$ÊAVT$‰‰å‘pÅpdò'Gb2É#wÂãBŠh¡˜ˆQӚśfa×P4Åk,Äq‚" +-Ȉ‰„D¬"ĆH‰0‘è-&éxqäe’¨*Be,Ò$ñÈŠ¹9Eäˆ?6/R×LÀþ¶è¸-êx‹A2ƒŠSFª,DEEOc±Oc1*ª."š Ãm°¹Ý{ÿ6פóÓ×ÚokÜñÓïæ°ák‡ÏßÏÿ­ý ›º×ÿÿ{îp7¯ ásËÍ9;÷ûZŸƒÛýø÷_ÀbIêb°Û>gøÝÍQ×HܲseÞv§-7ÙV-’ì§Î?¿s6_çûÿöëM²¨Q½Ah@Dˆáé(dç`,Iqƒ@ÈA‡À @@€I4$bFyPrÂðÀ˜i­rÖ…$¹#é”4öÝ£Zl &VYV’K3+3¼ŒÆ´qǤ4X>ïæfìžòïE :ÜV¾áŸy 'h…šèÍö«™c§>6£;tIyÉòœ ÞÐr:LV¢3bPÔy ©[ ð +-.y‚¤ šh¥’õñP‰®N#ðØo€ûã‹Gþø¾P‡„7¤žË +-~›Ÿbh*,Pè&¹×ÛõaæDüÔe=ÕÒ¢I®‚ÄÔ4ïMr®°ï5æüj8à LzËÏL²JáM·H»"_G.•ýý>J@KUêtK‚Ú G „\Àyç¹{G±Ù„8É¡îôVV% +-:h‡t‚ƒê«7ré7k‘i°gåÕ×Xn]vÜ®5ö[ìŤÿzê㮓B`Ê%†Vúì¿ ¿’g»ÅOªìÞ‚X ÊçTö¤8‹Š†åìT(1£)ɱR)7ÊWò¨¯scÉi US k5—Ñ?<ÃF„åîÌKoó’ÖØqX†Av¦¿4b¬³’fãÏ&¥“¦xQ±êËþíPÄ6ܘpîùEƯ*Û·dؤ;jí&oµ¥‘z‡Ž.À?â²zM|'ŽÓ¿šì-¹*.±)VÕ:MBÖºû”ð×áã ÁKøªÛ@Õ’¿‘ÄÀIà %;NZrÀn´æpšBÄœk¼"ŸÕ¼YÜg6á¹ìjIË%"s€à ’ºSO¸°®2u¸\!Kýœ¾¿ŸÒñ,c™+ʆ P÷±ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¤Pÿvÿ©:XìãÿÒT׊}¤À‡Õ©bVðABuªØG"|øVû†¦ê‘bþðAM½Mìã)>d¨7ˆ}(ÇuH] xÿ,Ó? ð_.öQåüg‹}´ùÃþêf±D_-ö1êÅ«³Å>vý¡uu³Ø‡µ?H®Îûˆ÷‡»ÕÍbÿµºYì£åvV7‹},ýCÇê`±·ÈWÝ,öÑøÛªƒÅ>bÿáVu­Ø‡OW\€ÿ.üÑWý—‹}ŒôCQÿåb5ý0Ó¹ØÇQ?„ô_.ö‘Õý—‹}¬õC?ÿåb}ý°Î¶Ø‡d?Xó_.öqÚÁüg‹}ðö+ÿåbÑýpɶ؇y?ò_.ö±ßmüg‹}LøCÿÙb(þÄ#ýlxÿ+¶×ƒ +-?øø/ö‘Ã/þ—‹} ñˆÿñbWüá¹ØG?ü÷_.öÇðýÇ‹}òCxÿåb™üðܹØ*?÷_.ö¡Ë®ýÇ‹}$óÃgÿåbÛüÐعØG;?ìõ_.öñÏiý—I=T€ÿ.ðak ÿÇ‹}œ­ àÿx±¹Ôû_.ö!¸sÿãÅ>W í¼ØGç +-–ýûH]Á¯ÿåb¸+€õ?^ìƒx¤þÇ‹}L¯ Òÿr±ñú/ö¿‚;ÿËÅ>øÍÿx±~àò?^ìcƒšüïO±,€ÿ,Ò*áÅZU°û¼ØG® +-^ÿû(VÁèÿñbÑ*¸ü?^ì£[‹ÿÇ‹}¤«àïÿx±zÌý/ö°‚³ÿãÅ>V°õ¹ØÇ +-˜þû@YÐÿñb4+ ù?^ìh(ÿÇ‹}0­€ãÿJ¡g<x-Úó¡@cðûˆPÁüãÅ>:T°ÿx±Á?^ìCF6ðïûØQA üãÅ>ŽTÿx±)TÀ?^ìãK ðû@SüãÅ>èT@ÿ¼Ø  +-Ðÿû`T÷ÿñb˜*€þ¿_ì#TñüW,€ÿ,‡þ‹=à©ÿ~±@Îá/öѨÂ6üãÅ>,U†¿Øǧ +-ÉðûXU¡þñb´*п_ì£W…UøÇ‹}$«ð ÿx±i,á/öá­‚"üûÅ>ÎU„¼Ø¼ +-xðûàW þ…Óg4x-€÷ÁM^üûÅ>îÄÅ?^ì@´ø÷‹}$¨ðÿx± ¬âß/ö±¡BSüãÅ>HT Š¿ØG‹ +-;ñû°QA&þýb?*¤Ä?^ìIø÷‹}D©pÿx±.â/öa¦‚@üûÅ>ÞTpS]$€ÿ- Ø¿ØÇL¡>þñb<öø÷‹}(¼Ø‡ƒíø÷‹}\(ˆŽ¿ØG‡‚åøÇ‹}˜(Ž¿ØÇ‹‚ÜøÇ‹}à(€¿ØG‚ÓøÇ‹}()ðŒ¿ØÇ”‚ÊøÇ‹}p)`Œ¿ØG™‚Áø‡Ÿ Ä€ÿÿ+ÓK›üãÅ.É¿_ìã/ù÷‹}(P%ÿx±˜äß/öá#ù÷‹}lBüãÅ>xüûÅ>$‹üûÅ>…ùÇ‹}0 +-òïû ,äß/ö±4È?^샤@ ÿ~±A¯ì<`àôЪ5ù/-“Ï^ßM¾IËä××_S¤eò÷ë¯É×IL>ý5ù1•©¯`ßM>¢eò'ì¯É´L~†ý5õ)•Éÿ°¿&ߧ˜|ûnò5ËÔ±¿&_Y&ÿÆþšüQL>ý5õÁ2ùFöÝäweòŸ,ý5õ=3v­´þ>¼ÿ:Bða°>¬É)eò!±>¬É&bòA²>¬É‡!eò³>¬É‡eòÁ³>¸Éeòá´>¬Éeò¡µ>¬Éeòa¶>¬Ébò·>¬É‡ eòA¸>¬É‡ eò¹>¸Éeò!º>¬Éeòáº>¬ÉŸ‚˜|¯kò¡¦P&$æ_ìÿ<‰ý°&jT(“&õaM>¼¨P&XêÚ|HQ¡L>ÈÔ‡5ù0¢B™|À©nòAC…2ùTÖä… +-eòá¨>¬ÉÊäCS}X“*”ɇ©ú°&T“\õaM>ä)(“bõaM>Ì)(“hõaM>´)(“nõaM>œ)(“tõÁM>x)(“}õaM>`)øP]Üÿ;S*”ɇdú°&U(“ÏôaM>ªP&ªéÚ|T¡L>lÓ‡5ù §B™|§kòN…2ùpNÖ䃛 +-eò¡>¬É4ÊäÃ<}X“b*”ɇ|ú°&¸T(“ÿôaM>X©P& +-êÚ|€R¡L>,Ô‡5ù ¤B™|ˆ¨kòH1ù QÖäÃŽ +-eòaòÿ +-Ô;NðaM>˜«P&êèÚ|W¡L>ìч5ù ­B™|¤kòZ…2ùpHÖ䃳 +-eò¡‘>¬ÉdÊäÃ$}X“Â*”ɇLú°&xU(“ŸôaM>تP&JéÚ|€U¡L>¬Ò‡5ù ªB™|ˆ¥kòT…2ùpKÖ䃧 +-eò¡—>¬ÉLÊäÃ0}X““®üÿ<†*¸QA™| ¡kò!FeòA…>¬É‡”Éú°&JT€&fèÚ|QA™|È¡kòCeòá‡>¬É ”ɇ"ú°& TP&–èš|hPA™|p¢kòá@eòŠ>¬É‡”É-ú°&öU(“`ôaM>Ô«P&ÌèÚ|xW¡L>°Ñ‡5ù®š|èà¿Ô:óaM>ü© L>pχ5ù§4ùð=Öäƒ +-ÊäCù|X“p*(“ëóM>´© L>¸Ï‡5ùp¦‚2ù@?ÖäC˜ +-Êäƒþ|X“[*(“ôaM>T©M> Ї5ù ¥‚2ù@Öä“ +-ÊäÃ}X“F*(“ôM> © L>`Ї5ùУ‚2ùàAÂÿ¯üÿ<Zý ¬‚2ù9Ðäñ +-Êäå|X“Á*(“šóaM>쪠L>€Î‡5ùP«4ù0:Ö䃬 +-ÊäCê|X“¬*(“¯óM>¤ª L>È·5ù0ª‚2ù€;ÖäC§ +-Êäƒï|X“—*@“ÁóaM>Pª L>χ5ùਂ2ùÐ<Ðäâ +-Êäô|X“…*(“6ê +-ì;§*Hškòaeòái> É‡„”É©ù°&VP&°æÚ|èWš|ØškòA_eò!l>¬Éz”ɇ³ù€&âUP&ÔæÚ|XWA™|€›kò¡\hòan>¬Éq”ɇ¼ù€&¾UP&øæÚ|ÈVA™|œkòaZeòq>¬É‡f É‡ÅùÐÐìÿ;1ð!jeòAa>¬É‡¥”Ɉù°&ŠV€&&æÚ|ZA™|Șhòágeòc>¬É‡œ”É‘ù°&fV€&JæÚ|€YA™|X™hò¡eeòÁe>¬É‡“”Éšù°&BV€&næÚ|ðXA™|è™hòaceòh>¬É‡Š”É£ù°&VÐûì;þ°,Öäƒâ +-ÊäC´|@“‡+(“ÔòaM>®M>\ˇ5ùà·‚2ùÐ-ÐäÃÞ +-Êä¸|X“u+(“æòaM>¼­M>¤Ë4ùð¶‚2ùÀ.ÖäCÚ +-Ê䃼|X“c+@“õòaM>€­ L>ìË4ùе‚2ùà/ÖäÃÕ +-ÊäÁ|X“Q+@“óaFuüÿ<& +-ÐäCò +-Ê䃤|X“Ã+(“˜òaM>ô®M>lÊ4ùл‚2ùà)ÖäÃí +-Êä©|X“±+@“§òM>Ä® L>¨Ê‡5ù°º‚2ù+ÖäCé +-Ðäì|@“¥+(“¶òaM>|® L>ðʇ5ù¹4ùð+ÐäCæ +-Ê䃰|X““+(“ÈòaM>4®@Œÿ +-Üÿ:Wñ!K>¬Éþ”ɇ/ù€&òWP&ÄäÚ|˜_š|(“hòa~eòM>¬É‡ö”É7ù°&ÎW€&âäš|8_A™| “kò!|hòáN>¬Éï”ɇ>ù€&¶WP&åÚ|¨^š|”hò¡zeòÁP>¬É‡ç”ÉFù°&’W€&Êã_ ÿ<Œ+@“5üP&LäÚ|xá4ù"Öä ?”ɇù€&Rø¡L>Èȇ5ù0Âhò¡F> É‡~(“8òaM>tðš|Ø‘kòAƒÊäC|@“üP&ˆäÚ|ˆà4ùp$ÐäC?”É%ù°&ø¡L>@ɇ5ùPÀhòaJ> É‡~(“VòaM>ü¯ A½üÿ;;*@“óñM>”ñC™|°kòá‹ÐäC~|@“_üP&øãÚ|Èâ‡2ù ÖäÃ? É‡ù€&¦ø¡L> ȇ5ùÐÄhòaA> É‡&~(“òaM>ñš|ˆhòáˆÊä…|X“AüP&4äÚ|Øá4ùÐ!ÐäÃ?”Éù°&jøM>Lú_ü;xþ€&*ù¡L>LJ5ùðÈhò!9> É‡G~(“ÌñaM>$òš|xŽhò!‘Êäƒt|X“ƒü€&ªãš|ä‡2ù€ÖäC? É‡íø€&úø¡L>xLJ5ùpÇeò<>¬É‡8~@“çñM>ÄñC™|PkòaÐäC{|@“küP&àãÚ|0Q] ÿ<B +-~ùM>dÆ4ùðËeò3>¬É‡\~@“ŸñM>äòC™|kòa–ÐäCi|@“³üP&PãÚ|hå4ù°ÐäC+?”É×ø°&NùM>ÄÆ4ùpÊeò6>¬É‡P~@“·ñM>„òC™|Ðkòa“ÐäCo|@“›üP&€ãÚ|¨ä4ùp´ºä:gñaM>¤óš|x‹hò!Êäƒ\|X“ãü€&êâš|ç‡2ù€ÖäC7? É‡½ø€&ºù¡L>øŇ5ùpÍhò!0> É‡k~(“„ñaM>Dóš|8Œhò!šÊäƒb|X“Ëü€&ãš|Xæ‡2ùÖäC1? É‡Éø€&Šù¡L>XƇÒøWÿ<´+˜è4ùPÐäÃD? É‡¢ø€&&ú¡L> Ň5ùÐÐhòa)> É‡†~(“NñaM>ôš|ˆŠhòá ÊäU|X“ý€&®âš|è‡2ù ÖäÃ>? É‡®ø€&öù¡L>€Å‡5ùPÏhòa,> É‡z~(“fñaM>¼óš|H‹hòáÊäÀ^ü;>+؈hò¡§ÊäƒG|X“7ý€&Bâš|¸é‡2ù@ÖäCL? É‡“ø€&bú¡L>¨Ä4ùàÒhòA%>¬É‡•~@“-ñM>¬ôC™|€‰kò¡¤ÐäÃL|@“%ýP&lâÚ|øè4ùÐäÃG?”Éžø°&2úM>üÄ4ùÑeòA(>Ìú_üÿ;©þÖeòA>¬É‡­~@“ýðM>lõš|è‡hòa«Êä@|X“Uý€&âš|¨ê‡2ù`ÖäÃS? É‡„ø€&žúM>$Ä4ùðÔeò!>¬É‡¤~@“ñM>$õC™|ˆkòa¨ÐäCE|@“CýP&0âš|ê4ù€ÖäCO?˜ü_ü;{þ` ÖäÃ_? É‡lø€&þúM>dÃ4ùð×eò>¬É‡¼~@“ßðM>äõC™|‡kòa®ÐäC9|@“sý€&Êáš|˜ë‡2ù€ÖäC[? É‡uø€&Úú¡L>¸Ã‡5ùpÖhò!> É‡³~@“ñðM>œõC™| ‡kò!¬ÐäÃ=|Ø]]üÿ;¤ña´Êä.|@“ ý€&páÚ|èì4ù° ÐäCg?”É_ø°&.ûM>Ã4ùpÙhò!> É‡Ë~(“ÄðaM>Döš|8†hò!²ÐäÃ1|@“‘ýP&”áÚ|Xì4ùÐ ÐäÃb?”Éhø€&ûM>@Ç5ùPØhòa> É‡Â~0_]ô;µñA> Éß~@“šðaM>ìöš|è„hòa·Êä(|@“¸ý€&@áÚ|¨í4ù0 +-ÐäCm?”ÉSø€&dûM>˜Â‡5ùðÚhò!> É‡×~(“¬ðM>°öš|`…kò!µÐäÃ+|@“©ýP&dáš|0í4ù ÖäÃh? É‡Zø¤® ÿ<7*@“Üý€&øàÚ|Èî4ùðÐäCv?”ÉAø€&¬ûM>‡5ù0Ýhò¡> É‡é~(“ˆðM>@÷š|@„kò¡¹ÐäÃ"|@“ÍýP&áš|Pî4ùàÖäÃq? É‡Hø€&Žû¡L>PÂ4ù@Ühò>¬É‡à~@“—ðM>÷‹ºüÿ;„*(“dðM>Ð÷š| ƒkò!¾ÐäÃ|@“ñý€&Îàš|ˆï‡2ù ÖäÃz? É‡6ø€&ÖûM>´Á4ù°Þeò> Éô~@“pðaM>”÷š|˜ƒhò¡¼ÐäÃ|@“åýP&ìàÚ|øî4ùÐäÃw? É‡<ø€&¾û¡L>ù_ü;;ý€&üM>0Á‡5ùàhòá > É‡@“OðM>$øC™|‚hòÁÀÐäƒ|X“þ€&ªàš|ð4ùPÐäÀ?”É,ø€&üM>`Á‡5ùÐßhòa > É‡þ~@“[ðM>ô÷C™|ð‚kòá¾ÐäC|@“÷ý€&Âàš|x[]üÿ;µý€&hàÚ|ñ4ùpÐäCˆ? É‡ø€&Bü¡L>èÀ4ùàáhòA>¬É‡ @“=ðM>løš|èhòaÃÊä|@“þ€&€àÚ|¨ð4ù0ÐäC…? É‡!ø€&*ü¡L>Á‡5ùðàhò! > É‡@“IðM><øC™|hX]ü<8ˆÀ4ù`ãhòA> É@“"ðaM>Ìøš|(hòaÆÐäC |@“3þP&Pàš|€ñ4ù€ÖäC‹? É‡ø€&ZüM>¬À4ùÐâeòÁ> É@“.ðaM>œøš|ˆhòáÄÐäC |@“'þ€&bàš|8ñ‡2ù@ÐäÃJ¯üÿ;˜*Xò‡2ùÐä’? Éø°&ŠüM>LÀ4ùPähòa> É‡"@“ðM>ùC™|°€hòAÈÐäƒ|X“?þ€&2àš|øñ4ùÐäÃ? É‡ ø€&~ü¡L>pÀ4ùÀãhò>¬É‡@“ðM>äøš|ø€hò!Ljä_ô;K+ðÿ‡5ùpåhò!> É‡+@“ðM>\ùš|€hòáÊÊä|@“Tþ€&àš| ò4ù@ÖäC”? É‡ø€&¢üM>À4ùåhòá> É‡((“ +-ðM>8ùš|P€kòaÉÐäC|@“Kþ€&àš|Xò4ùИÿ¯ìÿ;¥ýæeòAþÐ䃙? Éù@“fþ€&äÿaM>Œùš|¨ÿ4ù0æhò¡þÐäØ? É‡ú@“cþ€&êÿM>ŒùC™|Àÿ4ùæhòÿÖäC—? É‡ý@“]þ€&öÿM>tùš|Øÿ4ùÐåhòaÿÐäC—?”Éÿ@“Zþñì;vþ0þhò¡ÎÐäÃø? É‡:(“æÿ€&äüM>˜ÿš|ó4ù`þkòáÍÐäCú? É‡7@“éÿ€&ÞüM>¤ÿš|xó4ùþhòáÍÊäû? É6@“ìÿ€&ØüM>°ÿÚ|Hó4ùðþhò!ÍÐäÃû? É‡4@“ïÿðËìÿ;µð!ÐÊäƒö? É?@“Úÿ€&üüM>hÿš|ðó4ù ýkòaÏÐäC÷? É‡=@“Ýÿ€&öüM>tÿš|Øó4ùÐýhòaÏÊäø? É<@“àÿ€&ðüM>€ÿš|Àó4ùþkò¡ÎÐäÃø? É‡:@“ãÿ€&êüÁ}uì;›ñÁùÖäá? É‡è@“‡þ€&¢ÿM>úš|ˆþ4ùpèhò!úÐäá? É‡è@“‡þP&¨ÿM>úš| þ4ù@èhòúÐä¡? ÉêX“þ€&®ÿM>úš|¸þ4ùèhòáúÐäC ? É‡ë@“þ€&®ÿáU½üÿ<]* ÉH@“Èÿ€& ýM> ÿš|€ô4ù€ükò¡ÑÐäÃò? É‡F@“Ëÿ€&ýM>,ÿš|hô4ù°ühò¡ÑÐäÃò? É‡F@“Ëÿ€&ýM>,ÿš|hô‡2ùàühòAÑÐäƒó? ÉE@“Îÿ€&ýM>8ÿš|Pô‡$uìÿ;R*@“Âÿ€&,ýM>ÿš|°ô4ù ükòaÒÐäCñ? É‡I@“Åÿ€&&ýM>ÿš|˜ô4ùPühòaÒÐäCñ? É‡I@“Åÿ€&&ýM>ÿš|˜ô4ùPühòaÒÐäCñ? É‡I(“Èÿ€& ýM> ÿš|€ô4ùpæì;vü€&2ýM>üþš|Èô4ùðûhò!ÓÐäÃï? É‡L@“¿ÿ€&2ýM>üþš|Èô4ùðûhò!ÓÊäƒð? ÉK@“Âÿ€&,ýM>ÿš|°ô4ù ühòÁÒÐäƒð? ÉK@“Âÿ€&,ýM>ÿš|°ô4ù ühòˆÿ +-ìÿ;qý€&xÿM>púš|àý4ùÀéhò÷Ðä§? ÉÞX“™þ€&~ÿM>dúš|øý4ùéhòá÷ÐäC¦? É‡ß@“™þ€&~ÿM>dúš|øý4ùéhòá÷ÐäC¦? É‡ß@“™þ€&~ÿM>dúš|øý4ùéhò¡huì;ÿ€&8ýM>ðþš|àô4ùÀûhòÓÐäï? ÉN@“¼ÿ€&8ýM>ðþš|àô4ùÀûhòÓÐäï? ÉN@“¼ÿ€&8ýM>ðþš|àô4ùÀûhòÓÐäï? ÉN@“¼ÿ€&8ýM>ðþš|àô4ùÀûhòáD½ôÿ<ñ*dúš|øý4ùéhòá÷ÐäC¦? É‡ß@“™þ€&~ÿM>dúš|øý4ùéhòá÷Êä§? ÉÞ@“œþ€&xÿM>púš|àý4ùÀéhò÷Ðä§? ÉÞ@“œþ€&xÿM>púš|àý4ùÀéhò÷Ðä§? É‡Ì+ì;é*þ4ù`éhòAøÐ䃥? Éá@“–þ€&„ÿM>XúÚ|øý4ùéhòá÷ÐäC¦? É‡ß@“™þ€&~ÿM>dúš|øý4ùéhòá÷ÐäC¦? É‡ß@“™þ€&~ÿM>dúš|øý4ùéhòá÷ÐäC¦? É‡ß˜ƒìÿ;ý0éhò¡øÐää? É‡â@““þ€&ŠÿM>Lúš|(þ4ù0éhò¡øÐää? É‡â@““þ€&Šÿ¡L>Xúš|þ4ù`éhòAøÐ䃥? Éá@“–þ€&„ÿM>Xúš|þ4ù`éhòAøÐ䃥? Éá@“–þ°÷ì;ÿýàühòAÑÖäÃò? É‡F@“Ëÿ€&ýM>,ÿš|hô4ù°ühò¡ÑÐäÃò? É‡F@“ËÿP& ýM> ÿš|€ô4ù€ühòÒÐäò? ÉH@“Èÿ€& ýM> ÿš|€ô4ù€ühòÒÐäò? ÉHX“Åÿ@Õìÿ;2ðÐÐäõ? ÉB@“Ôÿ€&ýM>Pÿš| ô4ù@ýhòÐÐäõ? ÉBX“Ñÿ€&ýM>Dÿš|8ô4ùýhòáÐÐäCô? É‡C@“ÑÿP&ýM>8ÿš|Pô4ùàühòAÑÐäƒó? ÉE@“Îÿ€&ý¡Œÿ +-ì;ñüÐäž? Éð@“xþ°&ºÿM>ìùš|èþ4ù°çhò¡ûÐäÞ? É‡î(“~þ€&´ÿM>øùš|Ðþ4ùàçhòAûÐ䃟? Éí@“~þ€&´ÿM>øùÚ|¸þ4ùèhòáúÐäC ? É‡ë@“þ€&®ÿáEuüÿ<o +-Ðä›? Éö@“lþ€&ØÿM>°ùÚ|Hÿ4ùðæhò!ýÐäÛ? É‡ô(“rþ€&ÌÿM>Èùš|0ÿ4ù çhòÁüÐ䃜? Éó@“rþ°&ÆÿM>Ôùš|ÿ4ùPçhòaüÊäž? Éð@“xþ€&ÀÿM>àùƒ”zìÿ;·* É‡ý(“`þ€&ðÿM>€ùš|Àÿ4ùæhòÿÐä˜?¬É‡ú@“cþ€&êÿM>Œùš|¨ÿ‡2ù`æhòAþÐ䃙? Éù@“fþ€&äÿM>˜ùÚ|xÿ4ùæhòáýÐäCš? É‡÷(“lþ€&ØÿM>°ùš|È÷¿ô;ü€&œüM>(À4ùàäkòá> É‡(@“ðM>Dùš|8€eòÊÐä|@“Tþ€&àš| ò‡5ùÐäÕ? É‡ø€&®üM>À‡2ù åhòÁÿÐ䃖? Éÿ@“Zþ€&üÿM>hùÚ|Øÿ4ùÐåhòaÿÐäƒ(ÿüÿ;Áü€&8àš|àñ‡5ùÐäÃ? É‡ øP&„üM>XÀ4ù ähòÁ> É!@“ðM>ùÚ|˜€hò¡ÈÐäÃ|(“Hþ€& àš|@ò4ùÐä’? Éø€&üaM>4À4ù°ähò¡>”É'@“ +-ðM>8ùš|`_]ô;Hÿ€&TüM>¸À4ù âkòa> É‡@“+ð¡L>Àøš|@hòÆÐä +-|@“0þ€&Pàš|€ñ‡5ùPÐäÃŒ? É‡øP&lüM>ˆÀ4ù`ãhòA> ÉX“ðM>äøš|ø€eòÇÐä|@“<þ€&8àš|¸S¯ ÿ<³*HøÚ|‚hò¡ÂÐäÃ|(“þ€&€àš|Àð4ùÐä†?¬É‡ø€&6üM>ôÀ‡2ùàáhòA> É@“:ðM>xøÚ|¸hò!ÄÐäà |(“$þ€&hàš| ñ4ù@Ðä‰?¬É‡ø€&NüM>ÄÀ‡2ù âhòAL]ü;*Ø‚hò¡¿ÐäÃ|(“þ€&°àš|ð4ù€Ðä€?¬É‡*øP& üM>HÁ4ù`àhòA +-> ÉX“OðM>$øš|x‚eòÁÐä|@“ þ€&˜àš|`ð‡5ùÐäÃ? É‡$øP&$üM>Á4ù áhòÁ>Ä¿üÿ;çü Þkòa> É‡ò~@“sð¡L> ÷š|€ƒhò½ÖäC|@“ëý€&ÚàC™|pï4ù Ðäƒ{? É5ø€&ÜûaM>œÁ4ùßhòá >”Éú~@“dðM>Ð÷Ú|ƒhòá¾ÐäC|(“úý€&¼àš|Ðï4ùàÐäƒ~?$Á¿ü;ý Êäƒr? ÉGø€&”ûaM>,Â4ùÐÜhòa>”Éè~@“ˆðM>@÷Ú|(„hòaºÐäC!|(“Öý€&áš|°î‡5ùðÐäCv? É‡?øP&¸ûM>ðÁ4ùÀÝhò> Éî~X“yð¡L>ˆ÷š|°ƒhòA¼Ðäƒ|èë¿üÿ;ðµÐä+|@“¬ý°&Ráš|xí4ù +-Êäƒl? ÉSø€&dûaM>ŒÂ4ùPÛhòa>”ÉÜ~@“ ðM>àöÚ|è„hòa·ÐäC'|(“¾ý€&4áš|ðí‡5ùp ÐäCp? É‡KøP&ˆûM>PÂ4ù@Ükò!> É‡ã~(ê¿ü;ð¡>”ÉÇ~@“ÊðM>8öÚ|8†eò²Ðä1|@“”ý€&ˆáš| ì‡5ù Êäƒf? É_ø€&4ûM>øÂ4ù Ùkòa>”ÉÐ~@“¸ðM>€öÚ|¨…hòa´ÐäC-|(“¦ý€&dáš|0í‡5ùð +-ÐäCj? É‡Wø0¤º ÿ<p +-ÐäƒZ?¬É‡uø€&ÚúM>¬Ã‡2ù×hò> É¸~X“åð¡L>Øõš|‡hòÁ®ÖäÃ7|@“yý€&¾áC™|àë4ùÀ Ðä_?¬É‡løP&ûM>XÃ4ù ØhòÁ> ÉÁ~X“Óð¡L> öš|€†hò±ÖäC3|@“‹ýp¤ºôÿ;* +-ÖäÃC|@“Iý€&âC™|`ê4ùÀÐäS?¬É‡„øP&¤úM>Ä4ù Õkòa > É‡ª~@“ñ¡L>`õš|ˆhò«ÖäC?|(“^ý€&ôáš|ðê‡5ùpÐäCX? É‡{øP&ÈúM>ÐÃ4ù@Ökò!>”ɵ~@“úÿWü;0ü€&DúM>ØÄ4ù Òkòa&>”É”~@“0ñM> ôÚ|h‰eòÁ¥ÐäƒJ|@“.ý°&NâC™| é4ù@ÐäM?¬É‡ø€&núM>„ć2ù ÓhòÁ#> É~X“ñ¡L>õš|Àˆhò¨ÖäCE|(“Fý€&$âš|Àä¿üÿ;Ÿ+X“]ñ¡L>øóš|ЊhòÁŸÖäÃU|@“ý€&®âC™| è4ù@ÐäA?¬É‡¨øP&úM>8Å4ù Ðkòa)>”Ɉ~@“HñM>@ôÚ|(ŠeòÁ¢ÐäƒP|@“ý°&~âC™|àè4ùÀÐäG?¬É‡œøP&DúM>ô_ô;vÿ€&œùaM>Ƈ2ù@Íhò0> Éj~X“ñ¡L>hóš|ð‹hòA›ÖäÃ^|(“àü€&ðâš|ç‡5ùPÊäƒ9? É¹ø€&ÌùaM>¼Å‡2ùÀÎhò-> Év~X“iñ¡L>Èóš|0‹hòAžÖäÃX|(“øü€&Àâš|¨R¯ ÿ<ê*òš| hò”ÖäCl|(“ªü€&\ãš|På‡5ù°Êä,? ÉÔø€&`ùaM>”Ƈ2ù`ËhòA4> É[~X“Ÿñ¡L>ðòš|àŒhò—ÖäCf|(“Âü€&,ãš|æ‡5ù0Êä2? ÉÈø€&ùaM>4Ƈ2ùàÌhòBuô;X +-Èãš| ã‡5ùÊäƒ? Éïø€&ôøaM>lLJ2ùÈhò;> É@~X“Õñ¡L>òš|ŽhòÁÖäÃs|(“Œü°&’ãC™|ä4ù`Ðäƒ$?¬É‡áøP&0ùM>Ç4ù€Ékò¡7>”ÉO~@“ºñM>xòÚ|¸wð¯\%`po€q3|>Ú×ÚÏ£ëk]šòíhý®uFŽú`óÛ(ú`»¾ííŸÑþØ>í›]?ŒhÆ~Ù>¹>Ú°¾`ûc;¶áCÛfô±íæ—¶c«í÷¥ÿjß±ØöõòK;ü!¸1õ}¤>üYgT^ ô hàC* +-íf0L ô°hàÃ(]š2@ ôiQ}Ð$ÐÃ¥—z¸´›Á| $ÐC§‘zètiÊ|p$ÐèuFõa‘@¦>è!ÕÀA=¼øðG ‡•~p¤ÿi>”è!É¥)óAœ@OÖÕ‡o=HøM ‡*»Ìk=lø0M ‡-  ôfàƒ2Î |8&ÐÙKSæ1Ú¬3ªÁz€3ða—@sv3˜¸zÈ3ð¡–@y.M™ þà +-´cÑCƒ}ð¨&ìFõa*ª‡ û Q=|؆ê¡Ä>$T%öÁ zX±ÕCŒ}è§bìƒ>õpcî©ûO=ôØwêaÈ>¬SÙêtÿu@…èº +-ô@]àÃU®ËÍ>Pè¡»:£úàT ‡ñ– +-ô`^àCQÒ |*ÐÃ{?z/ð!§@õ>Øèa¿À‡™=øøÐR ‡T +-ôp`àI |Ð]+Tÿ¾z,ð!³@•>Xèa³ÀÈ=„øÐX Ò ôpZàaZ |ð+ÐÃl{z°-ð¡®@¹åf ä +-ôð[Q}`+ÐCqiz@.ða¬@Ë-M™çÓƒ+dÿÓ€šª3ªÞz˜*ð»@Y>Tè«À‡ç=|øÀ\ ‡²Œ ô°VàÃpÜ +-|è-ÐC\ºz¸+ð¶@}>Äè°À‡Õ= ø€Z ‡ÄD ôðXàC—Wlÿó@…= ø0b ‡: ôQ¥éðAÃ@ÕÕ +-=tøà` ‡‘ ô`RàCX +-|ø/ÐÃKüz¨)ðÁ¾@;>Àè!¨À‡ö=øp^ ‡£NÀ† у+´7ð¡—>¸YÃôaÍz0¦eÖ3}ø²¤éC–õPM¬¬‡múe=„Ó%ëáœ>Yêô!Èz€§;ÖÃ<}À±ò郌õðOX¬‡ùW|ÿÄ€~ ô GàC®êh¦}°5Ððz¤Î¨>¨èáÀR=4øài ‡I6 ô`IàC¥8 |x4Ѓ(‰z@%ðaÐ@«ÄÍÐ>è!–À==ÜRgTrìƒ+T¤>løq ‡ôpBàÁZ|ð7Ðà øzÈ!ðAÞ@?ÔÕv=ø`n ‡%À ôEàƒ¶®|¸6ЃÑz#ðaÙ@f>èô\´ÿ‰ÿ v=ϲë¡y>x]ÓóëzÈžR×Ã÷|`ºÊçƒÑõ°>€®‡øù s=ÜÏšë¡>¸\ôåzH "×Ã}à¸*èƒÛü+4+ q‡å[X-÷!é$ø¡ðŠ`Iÿ€Á…ÿðzHú~(üèi?ðCá?À@Iÿ¡… +-ÿAzHúü0C[Íÿôê=\q€¸³®<Ô@óz¸œ”×Cçøàx=ŒÎÄë!u>ž^‡|໘уìø`w=ìθ놾ìÿ<þºÄX…Œþ¡v…ÿP +-=ýÃî +- +-ÿáz0ú‡àþƒ%ôôÇ+@ü‡Fè!éšW€ø‡ÐCÒ?X¯ ð¡‡¤à^Aá?ìAIÿ ¾‚¨ƒŒþa}…ÿÀ=$ýCü +- +-ÿÁ zHú‡ûþôôý+(ü-è!é ø¡ð¢ ‡¤`à‡ÂPQ¯Ü;…*\DFÿ`´ÄˆˆŒþáiˆÿ€=ýCÕ +-ÿáz0ú¯ þC>ô`ôd+@ü‡yèÁèÚVPøíЃÑ?Ì­ñ¡‡¤È[â?lCIÿð·Ä¨†Œþqˆÿð =ýCä +- +-ÿ!z0ú‡Ë þC/ôô+@ü‡[è!éFW€ø±ÐCºìÿ<Ï*új,þ`ô`ôÚ*Xü½èaèÆU°øtÑÃÐ?°«`ñТ£WÁâ?ˆECÿ°¯‚ÅàŠ†þ`ˆÿ0=ýƒÂ +-ÿA)z0úˆ,þQô0ô+@üŸèaèDV€ø5уÑ? ¬`ñX¢£ˆYâ?˜DCÿ ³Ä舌þhÿýWÌÿ:/üà= ý× +-ÿ¡>zú‡5,þÃ{ôôq*pü‡ñèaèîTàøÝÑÐ? ª`ñ¨£‡¡HTã?,G@ÿP©‚ÅŽ†þaS‹ÿÀ= ýC¨ +-ÿa6zú‡V,þƒjô0ô³*XüÒèaèxU°ø›ÑÐ?«`ñ$£‡¡XVÁâ?äÚ¿ìÿ<iþÐóÛ*DþŸôÐóä*DþœôÐóí*DþÙôôö*Dþƒ—ôÐó*pü‡*éèTùLÒCÏ?P¨Àñ†¤ ÐPAä?èH@ÿ0¢Çˆ‘€þEŽÿ°"=ýC +-ÿáCzú8þC†ôôG*pü‡éè TàøÒÐ?d©ku¼ÿ:Êþ0=èü• +-”ÿ0=ôüC— +-”ÿp/=èüCš +-”ÿ°.=èüƒœ +-”ÿ .=ôüÞ +-”ÿ-=èüá +-‘ÿ-=ôüC£ +-”ÿ@,=ôüC¦ +-‘ÿà+=èüC© +-‘ÿ +=ôüê +-”ÿ*=èüí +-‘ÿ*=ôü° +-‘ÿ@)=ôüC² +-‘ÿà(=ôüƒ´ +-‘ÿPAÿ +-Ôÿ<òáæjhþçôpóA +-4ÿrz¸ù‡&—ÿ 8=ÐüC–‚Ëð›nþALÁå?ÈM7ÿà¦àò̦‡›¸Spù]ÓÃÍ? ¨pùQÓƒÎ?0¨pùHÓÃÍ?`¨@ù?ÓÃÍ?¨@ù3ÓƒÎ?¨¨pù'ÓƒÎ?ب@ù!ÓÃÍ?©@ùÓƒÎ?,©`¤®¤ÿ< +-`èü‡&ê!æèü‡ ê!æèü‡ê!æ6¡óR¨‡˜ø ÿÐA=ÄüàÐùÔCÌ?< +-ÿP@=ÄüÃNÐùùÓCÌ?œ:ÿ¡}z ù˜Bç?„O4ÿÀSèü‡êéætþCòô@ó +-4ÿxz ùšÿ@;=Ðü‹ÍHŒÌ: à÷ îõ¡S…p~HUa_{èT¡XU`×4Uøç‡Tºµ‡NúUgí¡S~HUAX{èTÁ¤RU°Õ4U¨é‡TNµ‡N‚òCª +-›ÚC§ +-MýÀª£öЩW?¤ª¨=tª€Ö©*Ðiš*ÜõCª +-eÚC§ +-ƒýªB–öÐiUx,2ü¡ó²¨È~q´ÿ;ñ+`Uá{{èT!XU€Þ4UØàV|·MZø!U…×í¡S…~`Ut{ÐTa‰XUpÜ4Uèâ‡Tþ¶‡NÒøU¸íAS…=~HU!l{èTáXUÚ4UÈä‡T†¶‡NJùUšíAS…[~HU¡d{èTa˜XU°Ø4U¨æ‡T*ê_œ;Òƒ¦ +-ò*xUœ{¸TAa¬*¼‡KžUUÀ{ T¡]…WÒ»‡K +-T «‚s÷@©Âˆ +-^U˜í.UØQÁ« +-›ÝÃ¥ +-S*U°{¸TÁM¯* u—*ª€U…©îASL¼ªàÓ=\ª«‚WLº‡KUðª‚C÷p©¸ +-XU— ÿ2 ðõ‘‘š Àƒº +-F€$* S<Gü*Q *«ðÿ=*¬¬Âð÷°¨ÂOðUò{XTA¥°«Ø÷°X ¸*Ì|Ž*)ÀU!á{ˆTaMA­ +-åÞC¤ +-*ÔªìzˆTaF…Z:½J¨T¨UÁw{wÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDýÿÍ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿlÿýܸ\ö®ÄT%P,òí$)4IlxùwíÈúö—?Ž!||˜ÿyô2ÿhiD3ߦLówj›¯Ód4ufö« ÔÊ @€2jBB8Ó‰¢("’§­€ƒ!³,Ëú¾ó­3ÆYoÞýŸ¨Êº°L#l…-›¾ï|ëŒ/ÎzóîÿDUÖ…eA˰˪¨éûηÎøâ¬7ïþOTe]X†]VEMßw¾uÆg½y÷¢*ë²*jú¾ó­3¾8ëÍ»ÿUQÓ÷oñÅYoÞýŸ¾ï|ëŒ/Îzóî¿ï|ëŒ/Îzóî;ß:㋳Þ|ëŒošûÅâ‚Éh6œÎ¦êYmëJË“Ñd0$I’[k€ …¬”–‹¥¤xÆÜ1J&²BRÆ0 ¶5Îûû>H(FFÉD2>‚žçi¿˜j8PŒˆ¡Þd4ÈÃÑu]×ùÖïJñ-@Fƒ*úÖ:ãË»ïžâ[| +-Žã8½y÷€Ct /qàkÿ+° Ñ!¸‚æ;Ç8ëí+ëÂ2° %Ô‘L}_œû¦;³t¢©º²§(j\g„d–N4U×qýÔ‘ÌÒ‰¦jšž¤Çáø¾ÄïçN1D#’Y:Ñ5E›r2ATÓÅ™ÿ$E#’Y:E–Ž}ˆ@4"™%3Tzǹ— hD…0’m»¸ô|@!ÁÆWWXÇó…@ÃôÅÙÊ qät<Ÿg†”ÎýWWF³át4—Ëå²/ÎÛ"8.kA{r8e9AÜŒQ–$vUÑŽd~ëëq®lË®*:’H’< ØU¤‰DÄЀ]Q$©+Û´l!D",»‚`feF¥²­ìªZ,”ï»f2MH´²­úÁ`"¢èy–…«ïGKMÕ•m B“‰Øußó<¡65AŸR下óï&•Ï‰¦êʶ­š–e¥†‹…Á@íë·­K$<féDSue[õ †z¨ƒXgÀ†Ýç€ÆF³™DžASFc€@€„Gý ëÂcxGð4©Ð‡×M4Ä o#^PŒFëY¼µ±…ŠÀQô `÷l¥Œ«._¤>„–ž°rÜÛiå•ë$åHw“žˆÆ»·¡ZàÒ²;piè~%<š~u²¼È ëÙ°–‡‡£Cx‹G£'ÅsàžÜ1Hu¡mµIP·ë|“šâŠ9tBŪÜi¯æn¿©Y²ç@*ÒÝÉSã y—î_» é³Ýá‘ñ#•’ƒÐ :$Ý  +-3ixÓtŒ—Ÿ¹òÓû-{cиË&¿à¯Xt§ýìîI— +-0wCÆ”±À2ÂW”–1kîTIîZAõVÉ~Õ½w‡>gVáQÐ xr¡DÐà~ýá9žƒ4g"¼Uñ¤8 .»äfk°¾X~. fxFãÎÐW›¾én€$=ÈžìNÜÔ¸#Êèºì€>6u!qç]Gw†´®ðJ‚FHðFÁڊР¶Oyx(ïâ¹’†—)GÔ*ÞŠ—^0¼×,Yµ<’»€î¶Påkº;'§–c-L·VÆt Þ½ºÛXáɼ¡! +-<¥wÐH^› ÏPxv…‡sxËѺÎx^!òL¦GQÒݺEÇYÏÆÀåvØ·£»îVS†8Ü f긻ܦÆ3-H$twÜʈîÆ;ÍcS—ð2–ÝyÐ#<Sð¨ÁÚj5$B,H†ˆ$é|ì&4;|j»B³óáN=d}»WtW&wqŠ©‰VÆ4˘Jwwš;~ÊÙÃ5óoª‹£‡—ðE#̈çÃÓ‹$žïiÜD ƒ÷QD¬3‰ã|¡‡Îœ}pvq=¼ÝwÉ>w§&£¨;ó£ ®’Û½äI¼;”>È;–€åƒM‚W,øÃkž³h`$ñ² ϾxO\ñPÇC ïÈílk©qP"ÀR—Ç­¿ÏYmWv»›A±Üu‚[2¦'cw÷–:m“Q³í.%t§Õ©Á¼ë!¨‹Ÿ}GÚ0‡÷&±íÉìJµÓÛŽ¶v…í «fîüêŽwÉдÔ1'§Ý_Ä=ˆkQʘ™)’$¤=ˆ½ð(‹×2Þy<-Ç»'OS^μ|Ò½oÊ >¬º:Nc­]êìÄ·Ã~v i;Q·Ã}»OwÙ;¿MF¦ž6wÅ-Ý mDC¢‘sm·Äë]xÞâÑâ©:ñx2ªµµäåËÛ™·¹´}8éD¿:žØíh®]g;ævèµs¶bE]øv~4º1w¥.z‘Ðpö}Þ Ñ Eâ] үųÂÆ‹>ž'yå7/ù¦+Î J…è¢Á5§×a³#×f;Öí`Ð2â5HQ_¿Ý¨ÉàöÊ:m©²Üýÿue¬rÇóHƒ‡ˆD’ˆÈz½ðXŽÆ½Y«Šçà·p÷ãq§†òx§ò’Ë™Gf“%OðRGEºêê²b‡ ;ë²³lG"íøíPÜ C†¸9Ægd°KÆ|Û5å ƒîÜYZ Ïd£ ðÎÏOé4$ÏÌ&o°¼¹yGŽ5[ÔéIgŽ[Øuh§l»Îí*ÜE¦³O¹K wi(ƒ'w‡®ŒÐ”T +- xº|º¯Ùð,‹D<×xxNóx¤ãiŽ<¤òðæ%a·±M*òðJ—ð[?¹Ž£;;ÀÅÙiowÃϺc4e»õpwˆ; Ýîê-ÅŒ$îX‰—çÏ Óà6Þîñô/yXåáÌ[£~%Ì>\•.ź(vi_gÖ.vvfhg»„;q‘ÁÿíxÝÅL”»å¾ªŒÏÜñF)x‹V4¬‡¨’ÄŠW1ÞƒâíŽws¯ò¬æ éY4<µð b:oHáuóìrµKm‡¾ 2Pª]ôۭȘXçF@[<¢”Ç+ ÈÃBG6 +-Yž‰Iè¸È¶t¬ ²«mç°1$q'Iw#ª¼Å!ËÔåÔŸÍòGY…x™VÆ»as²…¶zÒ>„Óet ÇN?4h‡7íÁ%$UšÉ·é;4±êê¼YÄ> ‡"©vp'ÇÒñÖqÉî¤vGë›Ò³B˸¨tСÓEVAdèÚb[u$K'ŒQka§Á®ŠRºÅ݉»h› Y#\©¤ª7‹Ì'+O鶪*ïÊ$Ø„Ä¡©µÉ{@ŽµDU¯›{ô´Â d䬩üéʪ$è…˜U}EñÄDÒäöÉ ÑÆo50I_Ñ‘€Á‚帄mp ¡­díƯt$͉RD½Hu³¸Z/úù0== +-KŸ+2cÌVg]a___…mË™{Šž+Ë~> -˪‹5{PÀ–4ËØUžç›·B@`PÐ0êbˆ¥Ó!@Ù•Dm6ùr\È{-ƒ¡!z<%”5(:Ãa_ Ð阧AA[u…o“ÀkPЦÊ„ÀÎA›Š¡ÖtÚƒöšz¿6¬AA+ñÕ eEbáâ=­mAA«M=ß^®¬gŽalkP ÁÛÀ¡l[ ÐóÕl6êA!»™SY{†&Ç¡cC(^dˆû#=$jPК ñê{SÚÂóàú®)Iy|Š¿ó]„¢ +-u,ñ.Ķ`’U¸ñ!HÛlÒ¼ª FW¦: ‚ƒ‚ÿ×u°’Œ¬kd¥hVP‡qM\_Ü #2°lÜ© +-Š¦,g2]þɵ-0(¸x½!å¦ÀàÀÄdFAA{Ž>™È¢=0¨$z&3¬AAË/Ft /RÑl¨½(9Lø’É¥`j +-Z2 ÑÎA$Û„p¨3Zçs ‰**ØE‡¤áá@EA £(Æ d @@ÀdÀD±¸Ô€ßɼÂþŸhÍu(ÂŒuYâ½ëEåå”Î’g TP™Ÿ#’"œæäz×8$‚çÅ3VÒwsbpËÉÏÅ÷Õ`ÿ¸Ëazï† B×å=L1xHåZsìΞ¬˜Zÿ¢Z—z—P’ßàµÎ¦ŸARϸ’&`Çz‹ÚNmwÒ•¥á´aòuϦŽ‹i3†T°»ƒ"ÕßÕIð0úî žq×Õ/ó ]i•&`¢ŸQ.o“!]Ãi{z×·!$°ÒýwNúŽUWó컋]} ÞuàtwLIjw¾…9)°êACvÕtµh`<6] õ^ÊÛjòÚ“ZÞO:$=ªÏª;¼²wëõŽæ öóûn¯~ã¼lº0xEežxK +-]¶ÝÝÒQÜQ ¥îdþ>ŒÞõ®d¥$<¡åÃïtßHó©vèg\ÙÕpS¹ÐÊÀ0FvgÔWNªI’î’í 'ÞwFO<]¥ßñ;IxŒ¾x¤”±zxGMw Ï3\(¦9RÔÂÞíêIðBù]>û®ð8¨ðR°,­»w‘—± þZ„™á0Q-¯û€÷NN‚½¾Sbú æÀ#<w·Å¤yÐî¸iÜÐت»6ØÔ^FÇü½CËIð\àwÀ•>C%à5œ»zpá±è¶Ò†2 %ÏË°#ªSqù¨æ†î=Šì]\ÝùàÝUJ‚ç:o#ª}ÆÀcj¯F£%ÒMêR(=:,x†9»-ã3Ý…GµŽ:T‹vìS½ t§d^wXõ¥Þ}†É![Ã,] ¼wõEÀ;ãÕwáýÑïà=yå]ú2RAǹ öæ+˜a†zïÿèÝ@JÜ…g`©ÀÜyF3ŽÔÑÕ5©v¯ÖÿÓ +-¯Ø”w +-ö—ax³cîawäîn+†t¡%_ÐÕâL÷K&G’òj|ÏØ©W ¾z–ú Kùb8òŽ5îPS:ö³;6wŽÇ_cèÝ]L¬[WÓ’€§ß3pþ®áU‰½iˆJèoÕêç¦~`¯?­7C˜>)³AÐËàã±;ÌØ‘Ùè]›Üjkóõ6ÏÐt#õ™€—Ú3L½Wxè’ÀãôGx#ʾcë€ Y6÷W÷Æ.xÅj85›¼;Fw¶’Ž>À§é2¾zz7·*÷Ž¢}'G¢x?C—›>È«¯oô«1žè]|¥<ŸÁë8ÒÐúõELx©vϾm§ÎÄ…Ù°» ¨»jg˜:"†ê¶,#(Ĩ¶‚ã0]J+>ãw5í}g§8ðþAÃëübÞwxð&¢ü^æ]a¹+ê©}|óeHž;ÓQHžz×–mŸñ¤gàÝîjq_áUäS¼‹)-(ï8 š‘¬As7‘Ý¡(d½»0 ¿ã,.€'ógä:ö‚†9𠼟WĪå}R jîÆl˜¹Ó„TxîæzjÀÞ ͽÓÈ•ßEµgI¯ €G¡ +-¯ÁKhìî°@kÈëNþ’ßé©ý;.ƒË2p{êH»CÓ]y˜‘p ÚW´ñ#<ûjžü®Ÿ1Ûž—µùi²°Ùc¨Q±»œÉ¤3tÖþ G¯ŽäÕáÿÕp 1ù¦÷Àúhh ‘Ãã^ZBÖÝ6dhÈðö"®ˆ ·»)ˈÒrêÂlÖ_Ū¹ïyw‡©1ñ3¤U¯^*<ÃdÐè^¼ÀÀ44‹a¢u=ÕØ&¯"¢Y›¬þ_»c_Øè´etæÎÓLÁ;ˆ¨æw¦hcº›Ÿ!”ψôÕ|ú»X×ï¯ ò!)"ÖàɈFåƒx°ðþ­ÂŽý„´¯5w°º­£)µöÃwrý”¡Dr7(wùLŽ¹“±îFRÝÝÙÝx=áÅÏøŠWµþ»òW;ý»9?1h ј7â͹ïg•ìê?AMéHXÓãÖr†¹;Bº‹bÜ¡¤¤òî.°`Ìîf¥)‚æ«ðlsÓöHÿ®ÝÏøò‘Þ#‚'B# ¬t` Ï6<×{­/…|D0vP)ê.ZªÎnê)‰îX¹ |î§ÞŸ»¬„D‰î†„ݹwg}3w?C¯¶øý;—]Lðì qax¡/ؒ䉑Ä+Ox?I#Î~ +-Æ5…i­0âtˆ.8ÝYjíí‚Ý!䎤©íËsËðbç¿Æðnš1äûpÄ>ÖGGGEéf>8D)(`G^¢ÃÛ-*Y諈œa¢Cp‡‰gÄ£M=sT +-endstream endobj 24 0 obj <>stream +-Pàù +-X$ê6Jûƒ¶gÝ ž1"Þoâzo‘ª&4ÍèŒ :âßùìD☸€Ábk²À>&\‰CgH%ò鶸AŒFGcâù¾1’t`Éû³¨¾xëlùæý[Vßi%hÙß™Ðz©T°ŽF¬gºy“Lƒ§T]þÍ£æâqçÓ\Ï-^0!‘h%‘Ùg-zr |<ÍòV´’‘s}ñB¢ì‡TlÛr¬ °P$‘VOkŒ='\.H;g‚¶ /Ö„‚û¨âÄ+ò +- €€F¹`@ÁPG9ŽB!C1€ !€Ã¿ëse~$#ÕÝjš<#‹×tz“õþåxå8$%5ðNìïÖ"äwUkº'#IÈÚŠžx† ð¸ø'™ÑŠ'̘ðAðnøŽ(©ùAk*2gè½Õï:C²àªØîBªK×^9d¼Kö0¶„ ÇèA¶ +-ûÃZíyFÚï +-’~-Åá 3dÓ©†cOó¶†ÄÏeÇ·‚ï²p_”ï ¦5é»Õ¿ÿMðŽ³€/Êîd•tªdØ‹wBsÂïv–5à¯ÎãxðhèwXP\™ßXù=¦ùTrH$ˆÈtSÌPʆdÞƒiüîfæ­ÆÏ0„«£Å 9äõ ™ºYw±Hð.Ãw4pÂïxøNÂx¯—àUe$Kì®B©þ@¦Þ§ï3¼Ë×; C$ù‘ ¹Õ…®©‘¾ã,ów àÞ0ãý”̘`Nµx‡ß ‡pËw˜e$9% þœa]g¨L1Z®æ†!ÜG•Þ]ÉÐÀË(*N52 ‡¤ôn DÚ2Œ<Ý­¦í½kd«3}軎ÇÈI4¬)3ó0‘Ü|¼‹£|gDÍ7gðVÅHÍÉyW àk0xb¸& »sö˜â>ª qaüS ïì÷ÞÙ(1€¸Õ¾”€ yÆ‘¾³”¼—õ9#I»ÃBˆ´öbuª×á]‚á;Rv‰[­(å3Râ¡ïÖig”ýø¿Pâ5ÕòÕÝe_F.3"„â]¦ê#1 ¾ãvMç;Ÿé;›©gl‡Z11}¤¿&Ù¦:ên¾ÌØ[w0zå´ï!±ã­f<º¦q}Gißxdð îôŽ©©¶Ê·S’y*+Ó»“Ÿø€¹á;9ç %Ï8Ôw*Ùggù»ŒszÇÊToª;˜2‚gHG¼ûлÈwAáwt2|‡há\ßáW5p«Õ4cÍÝÁÁŒ.%) +-™Ê·¡í߇CRê[VbJSg$ÎHR[ ã¸.xÕ˜zÆ¢œÞkHÅï&QÝ}”33Ä»"'³k¤XfÀ{÷°dLjwü´pÃwsÐ'¬ë»º‡§åà'û»é2aîîžQw7ìîrÉŒG üÂ;€\ô<£<:=‡ž·£%0 .'~'ÿ¦wÂ’”Ý1½›62cŸ<4¦/€«)` Ç”Mð´Òw e/xá)“P1ô<ªñ êî'ŒÝ½®ïMï ±8gìf ®^j«ÑófßïÃ3ª-%{ïÐ ©f™ØÝÃ`ïhÊà:úÎW‡ßUƒ÷mÝß™¼+w׈öRiHÓ#vW%3ž¹xwºϨƒ«íÛOþß<¦wbÒfª·®îtxˆ žÁW##Ó…ŸÿpþÖòþ +->U)¹[ÒpG5×èŽ2Ã5 ˜amHf$Šñ¦ïhpu64Òáéà•ßí–ß»¯_¢!™2û PÔ;Ìoú®É3Êé©æ ž±ŸßÁcïQP ðîôå[ǧ‰ìá³wGp)y3ÝAxñÀôdœOð|¡ÀÀ6øÝ•Þ½• Ò Õ…`{ïd”ÀŸñ¡ïbº¦=^S\©à4®&r.m.8ÚÝ• ÆtîËÐÈ`ºŽ^ÇTfœ>!wï˜Ë¸CßU¬íRÊ<Ù…9`Ö;eØ]A¼›°q4 Tk\O¿8;¥ O{wì::J{×`w²ÙЦ}Ujõ>f!ÞŒÝà}hSMøØ;x5Þ¯•Fšòš®a.4¢<±Ñ /9NìÞÉÌ¡ïÚvÆ'*Fþ(ñàiš6Óï.ï¸íõ—¥‘ÝÝxçÏ?pF…/ðßéŽ O`¡ºƒüb†ÒÞÉgLçqµ«Óš­3–ù!ƒwÞ‰¯:RݸZz)ïú‡àwq‚WöÏ‘ì‡~wÜÑBr!¡X!‰œ@€¨Ø»æÅ;CðÛEAãÇò÷˜z¬²-õ'j¿”´5 / #bˆà.£Qp@‚Ú¨²´m" D +-â@áXGI DÈcˆ!@€ˆ0”3£Â’C ä_y(H¾#À€³:¹ˆ3(ñ]%F²î ˜€'H_ꋜʙVU¦ÉtoõÜwÐBµ½îäŸù¤µz㻪`¤—v¿cÝZ(ÌXE;²8ÕMC%$Ä œô]ºÒä–øn #±lÀ”MÈŠ ‰wÎà ìRû%@b8CßYßu…‘lØäÏ鲌3Cd{±<ÿÊ{H~+»ãHÕã]D;â»@jg¤ÍÍ´z8¿k;ECØTgfxˆ‡ôÌîœÉSµ_íðd #iÆK“ö»Œx—w©fHŽL7î’Ýõjò-–8cŠÂwÃdgl·¼S(Cnf¼3V.pßU(¸Z=µšÒ&K÷®ÜVsYÓœæ|÷íñP_»³ðhf‘÷û. ÞõfwÆÈöçÙÛêélÒ XçUÛBÆ!¥GÕìN!0ŽCbn©ªÄ»| ¦ÙPŒc«ÅÅH´55¼}uxWNÑ!‰Ÿ‰áÌŒbð°3ÎC1@¶úOûÝU{x§@Õ)°»–ŽÜwdC¸ïŒ¶{gf«Ñ'¾^ýî«ŒD‘>ÓÆÚQtH° 3ÃÒ«){ŠYf« ŠYb;ƒ¼-rx×D0ã\ ê(±;=¾“%ag°KØÈJŒtηw#‰ñ;Ñ´ãÀ»ÇU—'83n:èx•î]¡b«—“ÀÜú4|wjé«Ô]ÊÇtÀ†€wRÕTïšìXØD|çAîaâ*mµ¤:`0RT¿+RÌ™Á[Œ ïâãÁŒ:$n`vHÞsSÍÝñnuce«gŠy\ZΠFªÃ3.ŠÃ»JõºJ2í·¨š¾3ø„a~³Õ˜GÓö.µüµaÎNJàͺñŽA2}êÏ 6è»+"jÒ8Ùê]Ö”ü_ˆ½V®eÓîtŽJõêÌh—Õ8¼S<([­¦Û;󻶞7[&Þ醺#™Šù0¡˜g†<.ì ­~Gãð»<¼¯ŠÁ[9‡w Óσ€jSM÷û®Â„¯‰ƒ% ºOÐûÝé†SŒ$¿+ºœ›8¶»UZÝåâ +-ª6 Ì Å+ü× úq†®¨½›¡ô|ÇÏè„Nr…ç8¤æ²ä7ùºÓ¬îösJžfY2ØêçÜ9üî¹{‡K¤x<ϬÉùE¦°iЮÚa¥~Ž8ünÝÝÔóɺK¼þ)™:*C¼ã¿€2óMp¿›ù€%6M (HYUO5.0ÃpC +-ï’fÇèyµÔÀîÈäw-; ž°Šò¼K‹ª5ßÑÖp1—ßÁ͈\«{Æ3âŽ,™ñÑïl‰“eG“d»wlȃ~÷"Å+ÀÃ>Õf?¤×|§(¹|‘Ðkµ±õ‰ x +-ìiv÷ýTê_³Þ ™ïÒì‘PIßµÚ_5Õz€Gf SÝ]¢ÿX*µþÕÔªúŽ8ÿi¡}WtV“‰3Tåwݵ=5U7Ÿê󇤛øŸÓr gžÕìµÚRÑΰ`ÌÒ1•^é_OõgÄÉw·}Ÿp†¿†ï¥­~x¹–ËÀ§ôÃH,UÿŸj“ÿ#¾ÓkxráŒ9㞇ï\ÈïZ{¬Yåîæ4Uÿ׿v¶t¢7¾[ÉOgçLÒ$ @_«MÔÉÆ'„‘òÍê”ÕÓfBÀ†ŸS5¾“Ì Ð¼«œõÓÈåäó0{ø"£ÏC³3€Ç½¤î®ˆ©“Ì kwÄýRΙ¡öŽÕÀ+I`]êK&$f쑪¡×¿vR¨3ôžÕI–8Cß쌥àÓÍ1ã$»û»IÕ*d†¡ïàþU‘Z]1ÒÞ'õ Lu[bÆ”2=?Õƒ ßáêïgX«=søN˜ ¼Ñ­ðœÙ]D Bªn úÎ~¿;¦µšœhït+wÆ-x|¢Û”vw£ó€¯ðMÿ0T@¨ÕËÚ»?ð8<½f+gÜej–¢&OÃwÌ04>¤#S*wqÀŠ|çVó ¯iöîÀ­F+¸A5Ü9Óôf¬»´H=`ÍlØ+š,ëx>x‹F¤Õ`à.$+[2I¢ñ#h*²QAâ9RY²c©8´¤‡"€Šd¡À¾Ih€=ïH¦‰"ë‚ÖM&¼<–̆S: ìªöƨ {YüR¼Ž;PÚšhYòýØIû 3b[EÆ»zB"SS¼¨qr!QÖ‘@ŒA£(!b€!°øqØ"ù²Õ;Ÿ§)1ðn¬3»=Öpw!1#©%ðî·zQ°˜z×eENS}-çŽçî”+Ó«R3²Uýb½òŠG½{@V»ÅQø£ç=ÂÝéÈòӺቩz;McÉê<ðtƒ;OC€->xœ»+‘HõUý½^H½C;M áÀkܦØ1 Äd¹»š‰šï¬¨Þ•;M™d5.M•rn†ú´”Þè'· õîe +-!DzÒª^iýxý4ý[xÍÙ@wC€©úƒ"™|w‹[½3=Mn!î0ðžÖÞ‘,5MC$¤™ñˆ­¨ÞmNÓY=™=iàáÝ&Ô1tÛ¨HÕmf‘¾û|ýmGßY Æ›ÏÜŒZí´'6 p¿ò‚ÌP¤êóf¢¶U½[FV'~ÀÃ×ýÛ÷E¨dF»;Öwsl$*—¬6=^cl&uß:ˆ™^úîF¶*NSûA :ðjÇd»SÓáCŠ»LÞ­yï’Õ0±H¡5*f[~¼ò!}3/ÓïHú>Mí`‘6I\^!¾#¥j_3¦ÌŒî6UOVë©€ÝmÙbµ8yúÎgÜBÏC,ëÁ3ˆ´»–T‘’’d +-áµÿ.ô®J¥)˜kPtηf#+|'Ú®– +-Éj.àÍÒÇ'rƒÌá;Ðí fbhàoXçGw%3¾+©x¢ús™„(LpóûàÙì/Üðà²cÊã^a½>Æô!‘ìÄ×€gBºï€SU°!U³4qP]€wëØÚ¶©:ï|“ó¡ÝÙ°f†ðÓÔÑÒtXA;3ƒÀK ‹ßƒªïÔÝ·[{=Ðÿ¸ÞÃàuäã»ï†š¥xøïåã;Ã¥w½úkÏÉóP <¸øFäÞüÞw}“gC¤\¸…º…Þ<7!-Õ £cÆ:r=ÄkΕòQ`}'=ÿ.á‹HÀ#jCÌw,/O ÄÝq7MLiR8a _aŠ:!‘vó +-<¿xÅò᪮Æëâ^]øKçèá8ȹðÈgW=Ø\«9©rßµS^NnC1÷nÔ_mÁÅ©n FTÛ1ÂTõ±;4—}hx j¡û…<-¶Ÿ­ºvÉ>÷XFîÍn‰v#ßaðª†ËÁ»F™q%½£˜ <‡©Í('’¦¨Y½»Kß1n snÿÁ»€ˆTð˜JÍÍ0i5M¯O°ê¦êkû¯À»¦ïr&†ì]äí<IέªÖﲚ!š™›1MašÇjÍÀs¬Ñäu“û¯ ˜{#ûid‹Ê¦)"Ŭ†ˆKµ%9 (Ä(víCv!îlïÔ¬Hˆ³úèžÅøtœª—˜)@ï¾CSÙ—‰É#¬®ŽµpV/oü® «ú|ÿ¥Îa»ÈôŽ^³Ò4= 5HÕø9gœ6cñT=¹ÿŠ1ˆ™¼+ïlï²aµ +-ßÖ1çé»[A@|Ù2U£WàßùB›¦å ØF@¢½«V߀ie1U? æ±C÷}Ñ™Š9«Cnàí^÷ªFª­1S+ô.Ã37#gæÏjHÀÀ{ÉǽçuîtSuî9|*"¼c\^›Õç{$ƒÒj{wðBYÕTûn†«±Yí¤›µß@P­j²ùŽ‡*’<è]@pà3ÊŸ‹àãÀô†jvÍ8¶6«/p†ùð +- ÐçÞžU Ãï¡s†ÒX]¢WÀKlÀ³éŠZÕá˜)íg{W5Vc@88#1à™ ú×VuÝw?ç Ÿ °WšZàŒ%³šžfF¿ª¶;VÍ( ýY³ÑåÁö˜®{HT¨L¿æDß}¢¦gõÈ“lá*Rx&Ë03ø$3~«ºaÿ¥Ö ¬èY­PiŠœq>ðdjN`f$‰«:œïf¡£bË„3³Ú¤ç‘j%õÁ5ä¢êϪ6ƒw4ÐBœÝ $8ƒàe)…÷•ÉiËÌ0á`ûn Úó_øäž1œQéþC$`=ÍŒ·ªðî&´ó>8þ"]Õ»9ðœ)©´>AŒˆØ̨YÕ¶éØhžÕ-û 5Õ»Ð"‰‰sב ©Ý Ĉ“{}GÂÚÎx±Y¨AàÉZƒì«éB¤™a™Ì`„w‘k8#ñ~´Ej*ðXöAEÔPÉÜRÔYÕßH?YÖÔ"ñ,´úÃw‡*Ò13ðŽd g˜öµH‡è]’@{cà Ñ]|†Hšf†eWµuŒ>øFÒµH4JϼB~?äîÀ +-‘É òÝŽN¾c^ÝͨµH”¨wóÝîÎY™Æ迆S¦ŒàC=I3õ.Å$€99hç}šî>ìÇSb± Gƒ±Î MÕ‚ŸUǨäÛz—˜œñ[¾[YGfªÀªI^÷&5Ã~»„ÞÑ NÎ~Òy&½Ïbá;ŒbQá’ÞÝIÍx¾•Õ€¢wkÀ™²ú‘¥©vfŸHŸ(k2ƒëݽ„uòf€ô¢wÃÓ_¦!güR3\ +-‘&bÕ±tÑ»ÀêÃÙŒ‰µøúÒôéïÀšá«†”kÜÏÏ´o)¤f@½»èµ›Â€ÐœA‡ï¼9jÆD˜=d1ÜT]RîîT.ßKQAÊ´‘¥…ã28 ’ìbA쉚¡åUÎôn\ÎPt ;lIÃ5L iªY†NªµÇWãF¹ !,X©È§ª ùîeØ%‹”a†5¸™…ÕMµwl¾Ê…´ÛNþWÙŠ¬¿2‹$TFõ:´wÿú®*Þy­ˆñtÍÐ'ÞX$ÚƒÂjdò¼ë¹½cóJ <\R»CèC@þšQ {É aõçôî!ßE6ð»-©:çC »fèÄ|oö³wðëÒ»æ¯]=tw^’‘*aBÖ ü'Ó +-#+ˆIu]/Á±$¶¤a—B„(…b&í$U×õ¬”ó@$¦!±ýGkPп£”,j¢ 6+ÀçÁÅDÚƒŠQ@gAˆœDÆíj®ó®rA]2›Q RDÅž é“XƒMfÁhôÊ^{~ö,/™vC9 ìÉT,R»P$V +-DÀ6-CYLsݨÁnq0´ qP…Q ä0dˆ1@@qÂ{ð]=ҔתÔ ½cZ= ]Zb´7KT4ÓGˆþëÝ_•ÿkŠ”vôünöX4Ó"†‰Þ廲Yb"ôªS–œž7ÊwNÓŠ™Š1ÏõŽ–ï‚ÖØîwó*奪‹@"Ž„ªéÝSknzC¾STº^À›`¸ Ú)MD@‰Þ}°Æ,U¾Ó¬ŠfJF»¡t¤w…_ù®ÐØ@ß0ãá1"ßÕŸÐ /¦™ºFØé] Ë$5˜ÅJ¾éøîO¢&#RŸ Y‚îÎz÷[4,5˜ÑtwŠÄ³V¤|}¼JÂî¥Y5ÓÔé])K$MyŽïh¼™l²¶fŠxâÈâå@“8È#aQôNÕú5r¤©¨ÓfÔör5²jˆ´uQïò»Žó¯Ãw€‘‡$"¡#0¸"øK+fE¢ŠÕAc¤é‡‘æôQ3_¤wŠÍ˜I<øî;y·;…ˆÑÿEB ‘”D^ÁòzsžâŠôíÐfàsdµm9þ—03 #ÒÔIœ!&AïÊbùî…ʉÿ«–<óâ™!±{_4Stz·þJŠÄ×f¼ð]­˜BH0"‘Ù½:ÍtJïHŽ]‘DmF³×T$ÁUŠ‚ÆôˆDÞ´]‘Ê‘ÕwÀ[@‡¬òˆÄ¾ÞÑ4»"•¤ÍàÌ­É)%zϺB<5§ê +-3w­w­fµ*ËjÑÀ­Ën(R‹jRê)mW¤Ë¯š"ߥ°ê黓Ý@qª†¦wGmµq|Õ!auv*Æ +-êL"¤•U³\¤:Ê`:,ßLv€ `p²š©ô u€ç™ «¦OÕ¬G¤NÍ8z¶ÞÉÁsÕ¬øW&¬ÔŽHNkW¤ïPß@„hÞyõº¬ÚwËÌPEïBµ+ÒPY½Ã§áßx*!ÂJ™±ø¿¨Ýõ.^í9dµ5#Z'~@Uí8"½Èþ« ¦w5µ¬Êjè%åÊw9~#ÎÝàÄìZo¨Õ»œ¶ŸV[ ½{òÝ}d®ª³±j¹šŽV1YmiÞy¾ö×›‘sê,ˆ@VU=€UGÖŒ@×£’Ä/1™Í; 4|‡šaSX÷f\¬:ðÒžµ´|W¡¬–\bw£w˜ƒ#à!ÉÊŠªÞº•Õí#ônLÁQÁ>Ä °êT½#Q+«¥|vt‰#Ymô.´!g°¬XˆwÇ9ÄHUÕ“5#r]Y½Ãï͘ÀY‘U[Ôbö¢šÑbk¢0zG»§øDêÜywL‡¹#Ò,®¬Nàè=@E23Ä&âÝý)3hèÝ˸²šôî™3æ‡Ï“TA V‡)½û´å;"ß¼CòvhñÓ?eu+ºB¤"×72£ +-½;ž{‰‰ë„Ç¢"…ìr†Ê6'ÝÑubõ®Æ-ßeåöš £"¹¼˜o Qsƒ\È,ˆd²€Ô’pÞ&ÀSðµ$Ƀ†ÃjØ• ö¬‚ä˜l$t€ŠÇzÝã:7àÿàÆëªKù„,ú`³AÜãÄ£±_^˜¶yŸI$aØh|_×mÄÏG\ŒDŽˆ ÁI#¿{ÜE¨ÁnAÁ@„-iÈÒ pHÊ8AŒ!†ˆF€‚øFSßJŒÅßå^Mk%‡ë[ÓÑth°â/Àwÿ4l>S ³ÞÙrX‘5Wä»ÏàeEC½«;å¨aøÎ>ÖåþT-ºwÇ'%Z$‘­\ÄDÚU%íïÖ43”Ç]õ±Bñƒ›Qšï>wq81ie»£XU{‚wP6c›9Z‰¨]µ¢¯ºšªw$™éªUc1¯ÍðØ̲«^ö«®ŠÕŒüMv:w^Õù‘Êó*bz6`³îqCñCŠ_uÎLx®j~슙GG3mlÕdÍP»êQ±úæ9O´`½;6ƒ»`_U—Ñ»ŸÏ˜¤I:ZJ&[5åHZ¬^?åãÄ f—ªÖ‘™¶6ã^çFàÑÁŽÍXËt:J«n½¹~Õ¿7hn#]à1ÿ´jÓUݼ»v6ÀB«¡£H§øóO«6)"0£Þ)ŒÆjvÀwÊ7"ˆ ºkP­:Þæ;b$5‰)®Žo@Ø<šœC$²Sm†ç !V[ñU7ÁwH88hÕñ?dµ €ÕmÔÿ½5¥å;µ—È)"?ÿ¯Â·êÿ›‹MbÐçû½˜ŽVi¬ÅwÃœWé°6jÕÐ1"6«•ØŒã¿‚ŠäTÉ:E¤`gF…«šˆ“† ÏžfÐ4H~Žø7­Z­“&xªH~ šÊÀýnv$‘üqëéÏnEŠz¹#þ­UNààÙÝU$¤Ñ´_72œšQP©ènÈêÌlÆ®Ðy¬ÞÂE•"ÀCp†Ç×ä1³k]¸ßË„ùÏê‚D¢y¢²¥ü*’‹|§r3ÿÊÒì–3SÕ"Oz—ÝÏ MiK*y‹êfŽ9É!(X?GKYy''N¾Ñ€F"‘‡´‹H¦õ.&ºÜyÕèn·­ÇE"ÑyÊQÞñw†¦»Ëwí™Ó›DšlÕ:›!ª¼;¢”«hçhÚ¢ŒšDL„hY©(ÌL¹ïae("£RT¤’Ñôg04>³/ð‡O¶™N$y«^EM BZ¡™ÍˆÕ3wÇ]I¤\dfjNïnг05H©X½Ýël¦Tõ­zô .ý£©S^Vn1FB›/TEbä×à­Äh㌠2ÝHà‡È¤éÖ-ˆÅ›i„sWŒSzQÓÍ…ÇÁÙùᦄ>…KLÅRÙÛ |åhI5‡é8»²Ù¡$(wQ=Hæì„£ö§Ô\Ñ….PsÄ` õÈzrÄà¤pWZ”‰1%¨ìƒUCPîPxœ +-V€A Œ’ÑiÑö V¨vFø¤º3 ‘8 +-9Ž‚(Š‚ŒA†`" ü€å|PxÕ¾l´*mÔhc«Vvðw¿•)Rî@A ‹3¢ÑB°êò„ÍCZÁÁã )ä¿+•÷X‰ È¢Gä]ídã–pÕ|0N$ä6ƒt¡Šö$,­ª/‘–È;Ûéì^`œ0òpJ›¡Eº¼«ßfeᜠÎŒì;;ÐÛÌ.U¬ú£ìÂíìá” ›!k²ßë¢Ó&#Œœ’*mF’èŒ"¦®ÍˆWÈ;bé8Áñˆ¦ÄÚµ™Ñâ™œøE áRf$Î`ˆBÎ<ˆ Ñ"ÚT½»”6#ÅgŒ;‚^#вÍHôàqx÷Ž.‡pêDÕï¸ÊfD¾T´Ày´)‘«ªLØŒäUugD‘ÄÈ×v„V5‘ɦeÌ jy‡MFYãœ'Í çÔáŒR´Šfµõ^?ÝD6 àbª^¼I{)!hp†/ +-3ãˆb3˜Þpi(’ÑêÙâ]ãmÝ^¦™ÔÆšýÊ‘¼|zg»±j!:pf¯l¦ÏüΊLkݦibs\ÞUø¢&gÆ)³6cH®„cPÍÈL$@ï‚E±gž”‡SºÉéÁ7OÆdŠ„gô‰â½JÀG¤5œÍ@…4ù‰¤6E¢Å`K(Bvf¯‘œqþŽŸLðS¤ !½Ó!툴1°Õ#ÓÔú(üL™ ôŽ¥"%éK$l#"å$¢E—w•)R°@¯“ßeH[Lï6‰–w¡—)Ò´µW=NÄZÕà üX™§^ÞW¦Héõª)•HCýoéÒHûJa"1Þ0)ß½DQ·‡ŠDøû,ï‚P>‘ÞˆÄ8à ó¡—¦ÌT>6J$ªI–ðp,*N'‰[Dz‡õ_"ÅlFˆ’Þ·W=ߎ,AFi†ÉÌŠó˜K$¤½G{ƒêµ7”éwfùwv¡Ä°ê´ï>¢H›BÍ{{T³…:'²‹;¸L8Éù‡r²ÜY9‘±=yšÍÏEñ,™Ä´-N‰¬0µÏv€TL@–‘¢pYqÿèàQQ!ÂJƒP¨{‘ÊäU@Œæ8¥ BŒACB€ðü‚ÀfÜ,Z©×ù]QÕ'>U§RI$y_ÜRÞ”¸«}28u jFk‘Íæð"àÒ»ÿ,5£™ñ$üRÝÉ€ž+¤rjvP3žrYãk6C~¤ä°™¢=®Zz±‰2#À¥w#J6yGyE ‹Ûaï&úÝŒ5×U‹?wbaµéÓS÷L5Cxq­º²†¶ õlRÐåÁ#3WJ!€Š€“O6ή'¤ôŠ‹«hÌÜ"ÀÎ ©‡3~Û;JÚgŽ`ÈŠ@î¿ 4f^~SN€%GåïV”¦$*±Æ]u[£ñN)ð(¼{™ÞuQczGÖ®š#HŒèm}ÿ­: «)ü.³ÉU«œA®°J¤À»„®š»h¼S{«^hø;%Jôàej¸j8ÉJÂ**`˜…3¬$CêU­¦U‚:²U€åçïžOìjÆ$}ô¬^KeÕ€*› +-°õ2ZÚºj±÷ÎÛäªç½$€Aö’]u6&*ÌÙâwŽ!»êÖ‰ôDïÄP®Z±‹¸Ôz¯ê¬¼£àØUOï{KÔ(aÆUƒÿ®ªÚž©z·§rÕòòN «•+Yú™Â3u¦íâZÅ`¹¦:̉GÑSšÒî¹jÔÂê:˜×Dš÷A‹fG3ï.uÕàþ®î(š‰^BPH¤üžÉry·wdo¸ˆX„¦¿ó:lÓÍô´H¤‡G'R¢ehÚõ;¯ùž„ÜLÉ €¦‘¼4:‘®è{ïþùÇ$1i8ƒYZÀ[]5P¼ë<þL-ŒBÓ‹—‚rÕ +-m&Ï©fô»ÇE¡è0´ôcjùfê´¼cRLÀkJ¸¡–ôîÙ´Ú™Vçϸê§Èд•_ͽ[z¦#Ù!Qñ?`DŽA³¿KG†¦Ø’˜•Å;qœ±åĈyRæŠpÀòê(‰©ìh0 +-½Ûo’wŠ‡­îw²Íßå%ÕBÓX­a%ˆY%&©„Í=Ê„¦ÃïBaõâa›öŽŸ›ÙGrÕ™ÇitvjM¤¨ñøÀ”ˈ!ËåªËƲñ™«¿gö^+l#‡ª¨R0)4–)#Aèw (pD*¡íN½€É·¸KJ¿]î7LÒ©0Â]R2ðL“ÊŸÀÒ‘ôÊ›&àìE—ÉpÉ +‹)uöåw`麈” ÌÊ»û?Ü g¨Ñr±@„9@(»à8’ãP…0È(@@€ @@„ ‚@ð½Ð\õwùwÈhj@ê­šWâ(*ñý³Ø¿«9•3¥#«VMHD«ö;h›òL#,gz›DÝŒZÉ™–ÑüÎ1±gê—MÛýîžÊ3ÝDD“i!á<ƒšžùu +-é™þƒ0b¶&’Æ0&H†M}„”ažéé¿ÓE <úbü,RÅ;[”<Ó¶>ä¤iŽß\½=Ó3i˜š†±­žÃîwD›©°Vx¦!Š¦±&¯“wú E•ž©ü‹`päæZKÒìXZµD‹pô¤)‰¢µâXi~—¬{ש*x‡HÍú âX’äÏïÆQ?×Јw¤À0¢OåW³ÌĻ½µªEùÌ£Æͤfð c3$ÀrV£±Ä»"y—DƒßFöË”¥x'íwQDònÉiÕ6#Ôߥ±Ä»1)‚ÈYùg…BÌT*½Ái@çïŒ +-“¤§WHbHâ¤É]{-Ú’ÕÝqç Ù—x×LQYŸ ïÞÜK¼ý]ÂDj¤äP¡EÑï¦)ÁâÝ$üï`b” –VãE™HiàLb¨DCð(ÒÔ½¸‰®–x/æ,g—>ø¡£ß%û0ù‰oRgÎ;³‰tø݇ú4udEâTÍàÎØœã|h›a˜êq.FÉR–U +-C&’&1;©ýï.©Gˆ·Á·%‘Œ~×F|EgXí ÀoȪÓÿ]îáˆ"d^ëlè{ùOJL¤®73^Ÿ‡¡Hæ#Uµ™FþŽz89“gZ¥Wñw´Ø'5§„d¢6ïCÝHø¿£YD‘õ½ï¿ûŽÞ9Oˆ£ôÞrÕLE(}¯PØiFyÇFÕˆÍD2Ô‰!tM¦»KuEï=þîõb$ÆËÓ óôT:9]p>3lÄj¢¿ÃMœóÅ¥ä4c +-C'5¦1šäªŽ„«VA¿¼–ÂfÈïÅþwë•”Õ±sû»qO€Ï4ç¿d`5ˆT4ãEhJq7Û“ßö𽈣¢²ñ»dw½ÔËlÊyÄŸŒL¤îFŸ©&ä‰ü¿Ëç¦p¦¶0B=3C7<;K6,/ +-"2%(E+:9*D'$ !1C.5JJ%K;"B62EqçGA3€P +-Ä Šb(B†€!ˆN‚ÿì>õÔWEïu½˜¢-Ÿ]BW¹ã‘Znq!@¾:¤ñ,üNVX»·QËó®NžŸÁñD…Ï5^ç_V2î˜5¦ãK±]¯¼]ð[ç·¬s2¡;çâÖ ñXîæ±¼Øÿ:'¶óµÂæFèõ¢9!+-¸ØÇØtxæ²ê0b‚²Ç˜¦V•ÝÎY•èì‘¿-9õR +-8ú ËÓo"€ÜÐ`v O fôn–õ9nö•ˆÙ¬,G–8Óiü;áCeÕl ZQð½¸8dƇTq;”Äý +- -]Ý…=‹^GD4¶r¥g§;ˆ4ÿ" Q0À•¦3ÝàÎH$€PYðLö$¤¥¿:’„ÞŒ9:¢ üŸ¶”9œ‡;7ø4H¢FDÞ¨~‘ÆÏD€c7Q8Œ1#ˆ!Æ`@ø€€Ð#c²_Âîr+Œ@1(ŒKbÛl‘H瑆4CZöwD$fíʈscØ3hgˆ (¨UÿŒ +-4ý3©Ö¾Ås,ÀÛTÂ#"Pöd§ÆÎDZ—‹)02:ùŠ‰TopâýZdi¶+HŒ]¶ŠÅ!ˆZ‡¹:¿CAô;Z«ñe:žé,؇_åò@á<Õ`"åôˆwïa’tm3¸xdžCx¼¢ŽÛÕ׊ÒLq‘Ešßá«$üæ Q@œú)äeÅ#<Í3UùB;’ßñF¡äÀÈ“èXèˆÑL¦)'Œ¶7áßõ…±ãëL+®‰ªT…ïýÈ™vîïðªÕ¼=}nün9S‰dÑ,$Þ=zè{fÜ슩ÆÔ8Å8âîœøÇ Äå©(Ö6¾à‡ P#¦×éïÕwÏ+„2Á÷ž‘µÈ¬‰JÀ§F8&‚f`‹O½49æGŒa@ƒK²"«. +-ô*ÁWCaÄ4ˆaSzv‘X@ƒïÎC£@¸‘+Ž\7":NÁê1DØ]Ò ¿Ê°º‰Òþn$ã¯>xÔ¢²vü¡¬>ï@|b¶XAIir&.Ïæ)FØžûÖƒ¥;DÃEßEe"ü¯!°¸ÀÂ"m*·'füeÂo%¹tèXA@"2&’i;€óXÂâ-vU0^~ë;÷»™·ÌÕ]<>0-áT¨Á@øŒÊŠzaHŒä@”C9B!€!B ü€À³€'F Õ÷ô"v‚2x—¿©NQ¤!ÑM$™-Åò§Ò:¼‹6½ë!žÃDºb)k£H"ßh"ù‹TÜ~ 0FôãÌŸH~7{²¥Þdy„þ¿#"Q…Ol·„R‰«^H5‘d”¼É» qVs¬a"™Vý.[äá_q£ß§‚u-ÞåŸ|Déïøá˜áŽá”ô\uuªâÝy6ƒâ®È†±Ësjwg),xøËh …èwÉѿø"¶JXñ»5iÜ<üˆTÇfÅ;>:9+5Ú*V­®PÖoˆe.bj”y÷ê&öóùÏ{·GÙNçª,äÝRïŒrówIÊ >ƒBfèÿþðlñ®ñ®º5Éš@Þ!Ÿ‡„‰w7Pሑ9 šnÝ¡ƒ8 ‘GN!¡é™f fï@s¦lñ.ÊDŠ–²D²þÍI¬uÎÁÁýîq?ì«z˜Ò×Dx'Í(8Þ‰•: 4:'IL/H19)7D9, 6//I 16% +- 8I9O¨1?@x@ªœ‘ à`( EY¤0Ê‚Œ  @ø|Ï `¾Ë»Ô­šÙU³Ó»Ô¸øUs¹j¹‘É +-°€‘/lsèD¿ëO)Àò™³Š!®ÚJ‘Šu›!ɶü@bÄÂj°QÔ%ÈUWQT]5·ß!Áøöºjîò.k +-v0ÜUëpÆ{ÒUoý™Pøm„ÓUW0~:JVÍ”wq+XÝ6ŽX³—Ì*V°:Y´ž ®üã¼W¡à¿k:Áê “ñ.#Åk]zGQ¤wÕ« WÍlŠ +-V7ᣌj¹j¿›ÃÂDòÁ*âîDÀf£8‚Õ?ENÜt¥~—^žÁ\Æ;ßß!]uÒz€ÀZøÊ»»§q`u[tß¹jMÿNn1U£vìdRÜ!ÀêqÆiÑUÇsÃÕìhïÌÀüçTßô–¨ÙŒã¢«.2›©<®1Ìå$ +-««â{u¹ÈŠÀÄï¢ð“Ìg pÕO-ô.Íå4Cw$æÉF%(ï5í$*¤6ÓÀLŠHUͳå?ͨXÍð:gJP&‘+¿¿cPëõ¨g3q¦tøÌ(w×Q꼚—x®¿Š~wÆ…&—»êGQ+‘®Îk’V+ÌFÍ€#<ÊïZ((GQIÕÊGÞI¹jŒ¼›E\…Õ ¹ïˆÞ&‘Q G“W+ç±%š1 UÍpù#fëHÌÃ:…–:«f/tèÅßuPøH©Mf‘Œß͆T3¾®:ü)’Í`tâïþ‘‰½«ç!‚䜕þhþïnŸ>bta3Fà:Zí9ƒêþ¿3Š‚ÕĸÛ<œ¿h5ƒ$ï²Oú^Vq²y¤¶j„ßý_,HÍ`HHN{c^–¢ˆ/ †¦áyqFU3z~§ŠÄÐ,gwòÞ…&ºÀP3~Wä”™Áæåìï\âÑì·GÕú€+5E%7 ¢eNÉjiÿw*‡bE€Í˜D2»Duãìª]¦Œ. +-žUðCs@<kQ\͘ ŒÈèJ'Šd+<A›Hg¿Û¦ú5‘†¡HL$ÂU×NDp0g¯bc7ûñ†^^¾gÔǺ;÷C€j *xéú ²È"¨ù^ž +-xJ,–j"˜Tf' ­–ªäŠG<06‹ŒPT ¦Äø7ª•=€5H³‡ðºãmŽkvraÒ_aÀ>ø›7q¨á~±O‰ª +-=¡(‡QŽÂ(ÈCŒD@àÁ¤H™Äæé½CŠÌªÞ©Dêµ¼DbÂL­a“È ‡oà Üú¨yE¶Á•R¤þø½žþ.9yY%RÁf0$¥H÷`ùL7­7ËHvÛRK¤ý(ÍÂCñ{¹èøy†tU/é޻͕”"uHsèj.šH¥:Ž +-N+JîØ÷wå¢3ò{Ã*Ò»°Fd\‰cD‚ì»fºfåÕfˆ%ElzñŒÔŒœÏ§¼Š„'ŠýF˜‡ z·—’•$˜w¬n3V£ùQ=ÝÉ ws…NÂwª°ã¿Ö1,] œI¶W(¥H¹|Ù]²¢B‡ÁÈðÆ[ÃG½0GA ËvAÓšñ´ÂJZ¸ã7 +-Xã®›Áu›qJIòz‘pÕÎý4Ž(/^Ifœâ¸Gýîl´ +-y¼ipÕ¿þ.šLcõ•cL` rí†%'H—X*9ÿ€™ÚÒ¿d¦C¥2ß“¥wã•òŽÛfˆI Oï&Ê¥¼“¢èÝæß%\Ê;n)Ã0ÁEÒ_€€˜>š ¼k*ÍãçÀ¶IL^Ùït"£onà„w8þªÎÙL’~èO )Ž¼Ûþ]‹t„oˆ$FüÎGyÇï –¯ð²×—9®€Ð à‘wáâ Ç«½Ó=â)︥ 0ez÷öðåÝ3.Ög{@ö†!ud_rQÞ÷T)4ÅßËK^ÝÈ¢w°×o£X3==,-uX¿ŒXh%ïZIl¶\.i‚iÁ` ¿Ó’ìL'pÕñÝm%‘êgê½×Z +-Íwœð;T‡â¤Ç:SL'^DW&ýžlJÅžæTÞ &6X‚½¤ÉaøÀêeÏyŒˆ˜ß‰hU™NÁ ñ;Y&zGg MåDÊ~cgÚ+x8¸°UÝl3ÌIq¬P3ò¿c<‡¢ÏäX:SÌß1N£ŸeQœÞ?ºjw¦=›!”Bü$Ž™Î—@üqpx·óŒ;.t¦ÿŽ¦É‰”|ØÄEï¶~—DNŒ¯ê˜ƒ;Ó 6ƒRJ- &A%n(À"}øA¼3üÃ4¿Rã²…Õ` B|œV‰"×D@"q6Cöpù"Áê‘@1‰5V¿SáDV¯¬Ï¬ò»êi8ø@“†ì©:­QOÏ&QƒJÁg®ÖàSÒmfoFôT)tÁÉ_iÀJ6¥¨<²j–بgi$¬€oj¯œ4± ƒCEŠŽ­OvKhe T¨á~©ˆD8à€ +-¥Iã(Æd 0B ÂÄ|Ì¿Ì 8€vv“Ð-"Dó²Ô²àƒo¸jÔpFß&«Ùf 2&ªI;;ˆ2Ô{Ðy•mFÐ%FƒGþÇ™ˆ°• Ñt„4ZiVXÃ8§e3¦ÛÙQ5»R›¡(ÒgÜç; 'ÇŸ/jìßgøô”g×(ϟÔèèÿÁ™° •…–Lαy3µ÷—Бå8ðÓfܬwz!Ií¥À …ÌVÚ sH¶¦h+È;Æ°™xkÂLJãìŸÍ°­Þ™@ÞUé"@ ¡# M6·mF1 RF¹ú±M°‹a¾‚mÆ¿[…¦×߆óužÄ”Ú NN›!z½“ˆØ€w6£`Ä{äP‘Š*g´h–HŽ6 ïÅå"EbtÈ¿#oÉ)_Ö÷ 1D6ò®‹ãʼn\*.Fï Èì6^ÄÑ -”wšG÷õ½†Ç†ô¼öT’A+‘òù» =O$ó•Pà õ(…“G‰dm3„²ýøü$s†&vUSWp9d÷±ïô*°R ¦4•@‰µäŸåÖ9T{e'Š–8`¢ `½q*ÁzZ;¹ÄŠ-Q+&ÙÓ“ ¦Òz^².§qí0¨û1a 9æ àP(Ã,bF!0@±AqðÙH¤E8P)có<òœ“1e¨“3£OïZ¿S^£n‹jqnx”ÔsÃS¾Ã¡%‘Rå9çß]õÀR‘€QY5µU•¼§ŠáÒª©ÿîçf4¤á±uR|cœ&…ÏÙI¤mß±ñL ,§"í|z+ÁÑNèÀĬù~1> ‚øª¹+^çYÀ»çšŠ.1£DïFëü[aj?STìF¾ƒÅ¢¥Š‚ŠHR=†Çˆ˜˜è*óî®-:X;T•ªw͸Øk<™ˆ‹J"AÀwס:\‰¬"‘"u°iÄjO¡)Ï?D·Y'K’ßnôìi%y&Ÿ}Ä€3j¡'ÍÔ.‘ ÃDkJd¾[ó€ÿª'œC˜wÚóªNèÎ#ÈÏ<ø»‰ uW´úZ$(ÝMT±š–€ Š´²¼3¶jYlŒ3£QïšðÐsš øƒú8#M$]I¯ŒªæÀÐg†ŸÔWfœ!݉ժ½àÎ%‹Þeã4I¬öhl¹853HH3- ‘<|¶‰g°ÔW}Y{¶µêzŒÑ> +-þNOÌ{¼“«8MÂyH>·jrÌßwd##|-“/ÓÕ»xßA§Á|Ý­¨w_l*œ½Û÷;µÍîøo ßͧþ¨wßÕÕ8ÀpWbòH½kîBPêVCvµ{ó$©ß%Óˆ˜Û‡ï,%‚¤3Sê>¸À@}W©éY‰ùVà&^†´Þ…ÿÄÌmÔVNï®Å"ŠfE"@öä;ðÍQ|g·Øs’Œù™D%—ˆÉð»2EÉBEŠ/F¡XdkélG€Èhê0œÑ´¨³_‰€>0„¾3miwiMq/%ÐC$l>½b$ÍÍ­DJù¤ÙSÞuDCëÝeý¿ÂÓÝñf QvÙbÜÁÙß­¯V(¶ WN€¶tVïÌa Ä8Ý¢ùµÔ¦(#C·ÊwÂÍùxª£BÂ4,7m©ãÀw÷£Ìt35¡ÞmüŽÈ«ö•ª¯Î‘×F¾»!2žrfv@‚¨î ßIW4òE;šŠ¿iá ©ÈwJ((ßÌ^Iï–¿“HÃw‚ñ aÊ»ìÈU¤ñ5 Ë)ȃóî`ß•³á;žO$Ôk±ožpFvÖ41DµU»€›)ÊßåÑZÈNü8°×ïìl†³‡xò Õ!­ò¬’«U¾ûÛ(ïd z£HT±C&KãrU11R¿û¨M±Nü®škU$wJQ“ª "@‚ÆUõËÀý =$à»ÝB§WNG) ²¡€÷w”DÂG™HVÂÍtøw²7^97xäLErÊwâ“’H„•Ù×;Žò® *’${±º]1¤ ˆ‰Ž2‘–æ +-'¡AÓ…U(ºSÒWÍ$o!šÛ-54*3 $™b3RYHUZ3ØZ4 •Î  !8&»Ž6®´N4Ì¢Jí:I ªª=˜’“½äÒšj´R[øx#¨Î@è#à¦ÇdG]5ZÓVm3@ŒÖî·+UUx* tUwðXeÇ‘W +-ë^ä’k±û“úHHRä ¡Ž¢s2VdE$“ã&Õêz⨱rQF†œb°L±PŠZ rȃ0@@ADAðõ¡YºãPsèݦÊj:…J X¯…s +-Wv—Ýû­;þi[3Þ?Þ «»Tb@{v‚rF=¬1‹UâŠîè­;æö–•Dßw¸Û:¬fœ¥…²Ôê]ˆB"Æt ¼ªfû¿Æé]ï‡b#e5dúƒ|7Ý:[q)úÊÔ»|UÇŤÍ@§ÞYŠÕìˆÄÔn€wXré]ž%²zÊk3¦ð]ª}4Uâ³· T3ª“Õ+RÈqŒv®8¬zë»V#Êê!Õ6"r!T \§œÑ¥KKy[Yu­Þù‘¼ú?MQ–Õ–Ä2Vw‡ëš¡ ½Ù®•P[ô.‰¬N{š*ñICJš²¦J×twí†Í<™Þ9 ‘ÕTUÆ©!Ñ|—G‰jN©ÛéîžQ%|¢šA@be¶"u«× <ݾ6ÜvDâ‡HC™™¾CE¢ÍÖß+jEr^øn®ø˜·#™™1\6cBåŠoÏnŽï"YQaÝÝ’ñл ÉAó.Ù>KVÄ­fÊÕÝ­ÁL½Ka$g<¼Á¼Ó?(hòÌw©ûH«™ +-º0.ÙQ%ÁÂ5c:eEº¨ð8Ð ÁfÔ»{ZÍ”U¬zã»ÎTV$ºÁBØd¥Ëj@ÄøÀdÍ4¸Ù¥ÌÔ»)’{¯HŒö€ÀdäݼŽ "óíL¥ùòªeF‡î.4Ö;âNV¤ +-ZÀIñ]†¬gÓ2£¼À×»x'+Ò5jF‡±&¨gXbpèÎëzy¶9ˆ¢–U׎œ™ór¶,‰P¾ó¬ôµ×¶k4S~ßHÒ½¬®PGÀŒŽïT6` eJ3eÈû39‘¿kÐxÖäÚxïÞÉë¬)š©ß¡u"«—þSÜ耎¹ñ] Ù}† +-ò²ò´;&×LþÔmônÞÄ'iz =[3°å»!Öé|î#°P½#E!Mn‰Éè]Š:psønhýÿ!U·]»{(ã^Vzç¦ iÊ6Ò +-vÉšä 6¡œ¦}«®äA«ðå §ý¯‰1tŽHS,1‚žýµ‹`=“6ÌÝ™ùÛ4¡±,." ÝwP)¹å<Ö²|ç3‘8$à¥sa vyŽ)ŠÿŽŠâÙ|áûá;Ó4i—Iþ¯:¥šˆb$|'=¥# ¹à“Åw¦­zG(uÇí×°æ!"@ü;()aõ$»°á;_±ZÕòòˆ.e.ƒf|禸jMŽôÐ19¥õ¸ø®~wL']¸òÄ; U­_©­&¾Ó¹¾Có4^KïfY‘crÄÈBSH °b¥HA,õÅ«wfR,1ŒÜ 0ñ¯ñ<õžfÀ˜¥fJRü¾›‚ýUï¦ø Çu·V,‚uôª"¦5¾ëuõ]½Ëø®-ÿÞrzÕ©òìÖÑô^EÔ‡@(hóÿ5ü;e‹»ÿ•ïÒ^Héî¸!³Ë.ƒ˜º˜^BÝÑïp#–ç¨j#`¸›Ñ–:§-"’&îdÂPˆTúwz´æ®œ'“Š"›‹Æ@$>°&•*ŒÏR[„éöC±êèKੱP€ Ç‘¤h-83"d@ÍvB02 Vó˜UG:`‹H:@Ûg‹óÇ +¨F—:ôÓ¹1@¥ "!H[w2œM~d̵4Ð@(«Ù˜ÍZú@çÀ!mEœ+`-eš‚¥Õ°i-@˜-¦Ð¨ÿͨÁòa!€!Ó‘0Š§I’‚(ƒ"„@|ÁxÍ ªObÂÂQj†ÉáºB¿$/V7cZiÎfÐm3ô|fÔá¡¢ªEâ—-A$xßY9À7©0ªÎlï7CL¥(nB:™ñAUSD‚× ˜OI$VŸøæÙ³Ó xpáš1 ÌžÚÃ'."µö ³`5´X-laZQÌf¤bTiÿ®Z׌pD$KÍ LaïL±zdÎPZz¢cï°× Õ©deI©^‰Ôf™3‚¼Ž¨“wáe +-ehU8•Ð%Öà]p°Ž@*•õÛ ¼¬®UB{— …crÄdF*Ô½ xW{‚Eb¥#0gMJ9þ |g†æp¹£T 1 Ò½”mÔñ…Äãô`u–ÎCºÍxð8–¸f̨˜§Nͨ¡øZ_V6ºFb¯PV[3ð%ÖÙ™0sÆ Nì>åkFÀ ‚/4òœáAËè.´MÕHÕíŽ ˆ„× )‰‹VwÎHRšÊ‡ÏHƒá¶=ƒÄÔ…”—T/S\·;6ï&®“œ>{sߌ«YöÏ áé^\ª€Û]¼»(ìݬúòKÓU)fŽ@b){­}fó ö]ª‚Ú£ZÆeÌDÍxP°#¦d¯Éƒg˜üäØ;œªšQ`ÁÝœ‘läcÉËañ5C<Å#ä ‹ß æ²§Ñ ¼xfƒY¼B“3üÁËèÇd)’5#˜Ç›q¾yÇ <½<µ†böF[3¤%Ñ»‹É_5£nÆÉœÙ#€ÉêÚß%ï*¬xßšó‘3”¬•˜éúŽµ›œ»ë/;©¡gpΈ5ï,¡w7¥@×6ˆÀÃ>ÛÀ´ m5HÎHüwØ\VýêÂ(£fx䌹•˜æ$x$ºpA$5kFMGÎðÄ#pM Î|‰yö;‚«'ï 5ãt +-rF,ôî6ðR¼ºŒw—«f`ò˜s† FS4á|‡‚›¶=ƒ×vÍ ´±ÛŒÕ^ãBï¸Vû¸5ƒÂ¼;ˆ€E5ƒÊÑìÀƒÞI‡€ÁÉêúä[fÆÿCÜ^3‚…-è]ÌLøŽ[ +-n=ªDåzwÚÔ &Ž(—è]—å݇¬®ŸTÛ‰˜U“N½;Íø~Í}0ÌC·’²ºJ&Òë—i”p¹wJïŽuO%™L5ƒ‡#²1ˆÞõ’ÕÔ'm;"AywȨÀÖPDV =¡ðšrYuÂ1Ïœ›š¡C4ô®^aµM.«&Y†©wwÐáÐK Š£B‘3¬KÚ[fqÿ´úõša¯Þ1AïXåß[ÈjõÿœamBl™ «êóÞÚµÞQëHäVr“ÀF Èj«WümÆ«¹jYµû Ò¡ª¾öœ;æ5cÁ#oÜØ93CÀȘé\Èw<$–™AÀ¯îø¬î]óîDø.›¿ûWÝ€¬ö[œï@~gSü+ *‹OÁJb +-£ 0PI‰øX Z æ¦%(¼êüu:›LÅ€=(N…·E)0C*奨…ú€VƒÊDá]N_8-¡‚ÕìPÙ„R¾ÁjɬW.ÀûÃ~:ši%(G  c­% +-V³cí«b:k‚›0-iámlI Dƒ,XMëgž§Äv8Œå5e®Û@”9fžJlÁéÁ˜kb€¶1IL±§gáÝ‚¨BÍ  ( Xe àäÀÐPi¢”RÈ%ÄÄ|¾°[$.ôÎgV+<ð~¥½Ìª&^ö±0ùUûŠÇÚy¼rÀϬֳwöê>ÅnfÉ «øŽ©œ‘€å¬–|˜¥§jä¨Z8DB³ªýÔ¯ºg€šIö}†™Õ2ÀC&ˆÏ˜)©Ú¡Ú]Ã!@Ÿ!€ÃwZ$i01Ú°:ªmßüÁÞµ6§ñs¯pd'"‡¤†ï*̯Ø&ƪž€½Íj!ÀCœžµøð+“CÅÎß…\™RyÙGøn÷œQ |¬¶wÊË.üϳzg:ƒÝ,4Vµpx·°$p¼Îê…r%õ€'Λ 1®-Óƒ©Zt¾K@˜¥YÝ™8Yü³÷ˆï~âg ŠqUÏò”œaS˜ÕÓôùÏ.?½ËwkF}“;Nn™Ê[ï¾f5Ó4C{‡;Äe¨ù‡åª÷_œø.΀ÇʬÞ7MÛöÎRàÉ@Ã;¸UÈÝwppfu{Ó” +-«í¤wqV“2áÓ…˜-¼°¥xÓ´6*’É7ã‡*?؇y`b`(L%ož¾#6=«»yPk¾+CkïÂÏùÎEx÷í0)ĵªC}ç0«Cº™¨°ú%à!~ÐËÊ üI!fkUs5£:aVÿš˜¦¯‚Ö¾µšB¹(TfD‰;êsûα`É–ÃL̔ڌ9ÓÞmܽ$UÓà&î]›qŒY=›ððáÝÚíŽ,¢öC‚i•‰ÁVØ»†žHCÃ;„ûö!•Võ ß +˜¦pžw–°éxh™áÝž2ƒÕ -ö!i—w÷ðŒÆx̽ÎCåfÌ| òÝäÈäÁ»ôªÔw¢ï.ø Û»ÆÀø­ÖÝ ­ÌHHÕPnßQ›LÓ {7B’,ULÞMØÝá0S³³f 0LÚ;'‹j|'"KvvâÜðîžTmâ»u {wû ŠT %Ňòº¼»#¶n˜l…ŸYŸÕÞýq„wíßѾùìÊÞ1¯"Ißá‰.8!æi¹LU¥ ¼[ˉɇߠÀ$`uÎ,R­PŒE$<á2ÅcœzßÙK8´¯½Cs'¼‹¡繧ð.8á_æúx¨"Å9à ðÄX¾‘ Ù.S©ßîÀ +-f`âƒEZ•ÕG¶ãíÁPxw8¾£7 ¼nÚ»“+†ö"æÌá]›ˆÔŒe0òÃG` Xíx°ÄwD$¨ðŽóݬ…ÉÏþ¥,RÀ7YDbÓáݽfüàùØg‘"b5ö7ã½Ãu¬"6º÷ÀiûN’†G¹ÿ4V‘BÅêíͳ´ïœTq̽µf˜EØ;(¹N V“/M[s…,"ñîe|ìûnA §¢™<‘Là; äÀ«b‘B‡-Ò¸„²›¶Gfä¿Ùw¨åÀ«º‰QDLJxG„1øá´úêã­—Ývµ,ÄY’¦õ§’zHÙ$í®€/Jc¡ËÃô£ü?ÎœñÚAàÅ-’{Óã;»t*#À[ŠNºMoˆÍüW†ïüåyx!`°pïyÙ0¾ËfWúÕEAzgŽE²´»,M…¼z‡„|•û.•üª{ÇO£á›í!Èø´‡¼•xwC`q<øŽdŸ[NSæ à9¯LûÜ‹®’fñÚ;ð¾µBJV§ùT7«éFÜv—)5lÔAô0Eç.:ÝÐ0gÒw_÷J?€tAÑVÈRµåƒ¬4"߉àƒ›˜j21t’¦ Ñ;ÙŸÕLÝ|1h@ÊwÚpU? 1B§éáJÓ$nU.SÕ“×ã»X¾ŸGÚ«w¤è»n±ƒ­ŠË´?Ý seúª¶¸ìÜ]ûø_ÐN˜Ö>M Šàg»#œ¼µï‚äjø$«» ¾ôù ›½ÛÄmÁ¸°!Ð`t¿žq¯Üný˜qiµ»i˜ú΃¿r<÷iLÀS´Û!’îμL­g“RµäùÃßYW’½{WïFЕÐ<«êÛzˆÔ§öƒ_óõÝÝ*§)·z—_<;3—Öè‡Î½`õ_ZùN>]ø4­¨w¦„Õªà ³šŽ‰»óXªö_ššªw–+RIÎЯ–±Þ‘°Ü]žþK!†@Dä»ï»9²šºÔ»iìl÷÷Y}§¨­µ‡HsLÜØĬˆï8߯þÐ@{µ‹GBÑÄt^­#M­0™11Ý€"žâ»þ"Õ˜åÎÓžÖ"‰Â¬¾¤Ño; +-%aˆ„Oä;w°í|íAoŠZ™eŠ"=~Hødekß!ñ¿¦€‰¼Í€4r{Ǽã`yþZ–Ë”¿€»åGÏ~P‹T©L®1°Nf`ȇDÙÙ>6¸»¾3™¿]SÀÚ@cgÄ·fõ½ã;í@dC%í®9]ßýîMl‘˜àŒúCàÙ:µv3£%C@‰ÉY5¨EªRš†í›+™ÓÞQø®—n÷|H„½™‘"eë;äù¬²EJS8cxu£KÛÌ@£n¸bó]Éo¨E"{}Z¡€3¢¡w:gõÝôYh‡ xÙåg ’ îð'ßÞ‰¦GåñY ¬¡|hÌŒºÿÅ#w§›fñH †YM;µïîGÕ•^vg2Ã3Dšî»4ráŒð±ZÿwU•†wßû/`3ƒB†Í)’qͦÜ)SÎ.¢=K$äuÜÁâ›.ë«dF-é0][°ñ7UÎA€³êJÊt'­é¦7/LÈÒd TÑá’!• ÔKIrªA€H]Ík¥Œk nUtÀ¹Àiœ@¢PIN"ºÀÔX¬G€s¶#®¡*§T,"CEà:ïûˆˆîÁ©+æ}`ÃÀ$Pž›v²ˆT@ò„.™õ“ÁyÐù˜%V“¹T +-)e`À‘ºÆÕIk¤£Š²lÝð¨‘r‘0i„6à°H%9Ã(ˆ c ˆ€=â^Ó½ ™aOÕ÷ÝÈÌð]ƒ§Ì³3tI +-ÊjLrÆ:ÀûØ=q_»kH/T¾7™bÂî\¾ûï¦ASPøZ-8!lÏfùCrgŸØwXw÷Ò03Ì”â;¹juÞ¡]Ü8ð®ó9zßIä³Wv¿§Öî;–§æœÁ‡Lˆy‘–RSŒ€WÄï;ÒXvȬN”1f¦êw2ÞqúÄB‹„$ œ7àErMMo^ò¾ï"œHˆ9õdtw¤§øî­T9ÃÀÞ]é•„\¤\;CŒô¶}eº0Dtª¥ ÅŒ}w'ÅwÝPâ;k9ÃÏÞmkGoà}㧎ð¡j í.ð ð¼T µšp‹T…½ãèB‹¥èÊÕçOí{2#眪â]Àê–œA¤{‘p5žWö¯zc|!`¢ÝñÈ ‡©úèÌ_­Õáf£Ò™œQUäxR~QîÒ5T¡¾3´Z¡ïà +-à!=ò§÷PµøC +-¶îî TÞ;Câ”3/vö.É)àyþ½¾z(YºÆv÷+µ„Ý +-Û¿¦‘¾[Né>±wYg€xjôMCTßùIÕLßmUy€H/R·©z§ïøš¢À;§Oá;$Ò¸'UóÎŒ÷«]9ÃÖŸšâ¯€Ô"Yß¡ìæ!Åë°O¾Ó4 ¼»{Çïœ1 ç}·2=Í8Ú©¦EüAo¨zv2uvêîlÊâ;m ˜¦41ºpoÆ<ƒv¶À[~ï;Bï_@ÚÝèÉTwá;òUúÓoVÏcákåJgØ—>ï€Få¤M!°q!à!îÕ'3ê}×ÊÓq¤¦‚}Ï“¬oÈï)yyD=¥± î˜ü¬ÆŒÚ™Qòo<æ±úìéZÅÞ½·Æ½ã¨kQÌ(æ!ùÐwè¸/ÒURÓ— XåùÚhA»l}7b7#_$°(=Í—·Ž]ži±°Á18%USÆ}‘>4öî­´§8`Þ:Ÿª¶ôÃM¥ƒä¿ÿËwªÛq{‡ 4_CxóæIyyHÚPµ7NöäíE@ày±ïŠc×;²ó¡}‡vÿê ¨L3ãð·ÊH`‡mÀímÈ Kß•éNÓé‡0ÀC‚>{·L+F%‰<ÈîÌç<™0¾žW2ýwž²qà­mæ}G{ìN(„ïÆ¿HU(b<øòwbñ{Äwxošyr3J•çaØNùèD} ´¸ðÜb½ è;Àì¼CÀCÕ|Þíæö¯ OXùõãéï*͆xC€yßÑ•wX\¨›üI¨À#ßMî–e;NùNŒ2ðBGöA^7ù#FTM‹‡4ÝŽ†*¼ff ï])1\MÄÃwÞárÄwˆõ¯³ÓÝi¦]oðîï: 'ÀÃ/ÀHQ”GÅá;n­fÈ)` Ð"eJÒ§è»C1®ßÙ!F"åð•\Ôê»ú? UÿV¨Ävw!µ£ÏC*3›ÞùkÜ +-ß}9k!ÒÞÍã"‘³Ú§ð4[úo#í–2Ý°òyH¾XßM$¦ña¤±8ƒ“‹$ªÕõÏ|~ù¦E+ÜîBÌ°aföN£rgð‚Ïsp†"@´s±€g[>üϤjöŸÂÝ•b†–™Qô©‘Á« ß½juUjg¤ØeT}Xvw'¯; +-¼Ãg}Wx²l‹ï8©ÕðxŠ2Ÿ©ºÀS­fwÇ13$zçP&ĬæðÝÀEªV7#gH\wüÿDHªæD¨dçî6J¦ˆžÙùU3h1ªéÑ VÃ<§ZŽµ¿Cjç©ÚÁš2M¾î 6ß-!…á;‚¥êx|‹´úÞÉ(—®õ©š¡þ• dêÐ;K›%Ë:1¸M‘Z]d¼ÝÞQ̯Ý!3LÅ *7Ü]*ß¡Ï Þ¦½ãÊEr§Vwº<Ëé àCZ\Ù‘<ÕÃõ/Òwc7•Íjµ¬EÉïŽ;}ôúú¢í_¼T–ÆÝõzgüYH«¦P’G)ž½#§¦Fâõ+Óûû/TÎ&SÓÂøo§ßùÏòÕ äŒ^ˆ¼ò.‹n8Œ>‡TCBCAš¨À3Š¼ +-<úµ$AÃyc([ÀÙd4¡MMœ=™“P±_X0iÁ'Ó?K´iˆ“÷b„e^êèéD •³0`Í®›0G$[`P@ÀÚT èjÀ–6ͯQkð1`¹phWHc|(d®ÀÃ0ö œl'ອÁ:"á;R®˜S vÆ£ÁXöÖ)¹&e.Ø΀aÁxH Δ Ó䔚Ocj²O(m8?ÂwÀšOŠþqB xwcim PŠgœù/|ª;™‰Õ  ]ÏÇö‡Eh`©05}½³¬D&ƒWpµ‡¾Ó‘ØyÆ ¬ žã¸]Xwñ±#´R=Kxšj ¤zÒÑ1]…!eæš–àA;#ß!ÎHwgˆ0~÷ ÿ¶ s´îj ²»¥³3½¾%x¨@&Nâj½¾ó#Ù[-‘ïJ. C2ÙV˜ì®õ˜F±°wÚY‚§¶3|k_ßu\SÈhF»öü®-2Áb’»3šjyS.D½+Õ%xW\Ðw+yüoua‘âx×Ê ˜‚À»ƒÑTÃÛÔ;á+±)Aª“•€ŠøΪgÀâ2ƒWÝ]†ÌìŽ +-*ÞÞE³ žW*ž±MáV›>y‡yXÿ’Ǻs†–•jkÇ´Ø{gJLð¸:$œG´YÓg¤Ôž¤õÁÝÓšr|ï–e]”БCyë.­ÉŽFvW~ï.ÌO«3¡øŽÂŒthž!ÜœáCñÍI¿3ËŒKL…ò²D™±gwÁS½£½š¿Ó»Ñ%3RÀ9UgŒ±Vã,å»èQw³Ah©öU¾¿¿ 4Vy¨¤¥Þ‘é ^Iú.Wñ V£½üxÝÚ_R…Þ`Æ{dº´TÛ“ü›j17w¶ê»b<#m£òd¨°÷ÆBòäÿ¦? ª•”ï}–@[ã*ù›#"‘Íù~ªd—Æy7(p`œ‚ߢm’æ’%Ù.¡~o6QÕ{_+2y/¬¨?£!h‘…î¯y:y’ ·!½óXQÐ ‹R +- ‡@ŸÂU’TvÙ½I€…"QâïSÃÆ°õ `Ì÷ ±*¶;Ÿ%ˆÜ×ä@ÿ¿&—À*­,häÎ*äŸ4ÅýÓjBrfh6bÄ&:ÑúxBD´V6ctÚß¹Üt—EQÚ8ðB¢ˆ½¯È¹82[Uj–ûÙ¢ÕÁ^¦¢ ¡çs¿?«ÖÆ7#uXŒ$Iòæ ¨Y÷ ÐjÛù +-„¨czçÖÀ€ ÀgÒú®€„ÆÂÁPÎ Qƒ1Æ  €òûÀU.Þ…aîÞË\¢e¨”»”e;_´ˆ»@|°e6HQ o:àуFðb~FüÂ÷Öƒ÷Öx.Þ¨Ž +-—!Õ20Þ‘€eª–á\î:8í®²EÂ~?¸r²N¾Ô,Òð í a§ñ;Xý”l…§\µ`aÊ®8LôŒ|>´ ¥”ºÓ-Ý™±2æ®™áëŽÊx»Ý@»ÉŸ^g°vƒÆ$oª®Wk8t©- qòwslSé+9qW³ÙRvpKÚCºcTHéÀò(ö€ä-×»”ïn« +-ðC”d že¾:¼û«{!x©=R0Hx¤=ÃÁ6%ìwÁaòŒæ;‰ÎîB’æßeDŒåŽÖÜ?ÞÝÜ€­Qh€íð*_ +-<áA#Ú#ñ…'h°© Pó ìýŒ*mƒÐeÕOiî:»óWêeàŠw‹ænÖS̾2ˆÛIèˆjƒÏ„¡+¤Sðâë¦~OßßáwÙ#0ÏÊSFWe—D=vgõÜù$¤¦§¶»»î,IÄcY”‚áÍ!ýNƲÏp³eÍôîÉî®ýtW[Ùë±¼ÛAu¥„T6BâFwiçΆj / ÷ãë8À›žÎ~.<ég„º>à•]ÍÎï*ÿŽ5,–m +-¾vçOÞQÔWËð>w„„©ÝHH†–qö/wsÐSXÖŸµ³O¡é hüøŒeÝ`ñÐãx Ý o˜±¡±Ý­°²°8MáÝO)ÒÓ-%h$!Òì…7ðLŽ¹Úý¯žßáö]\z÷b—¤Ý¥¨èŽêï"Ÿî3wê:´îXxs¼:Bîj˜n$T¶ x!Þ*,êN}1²íά½ø)À»wå.~*£ì-ÑšGªq…÷Ë«½û®×ï4´)KËïðO>b{¦5ê4_ïÕÄ.C5ë—Ëèûe´¯Qw›ºóîXǵ¾Ú$ÆÞ¦W}×sÀ«|ß}û;s [•_ex²±—!ftØBr¢ìíGtaG=Þ=sw~Š'@‘{t2ðbvµM€ãÕOï}Wð;=;CÚÈ’iÏ0õ•ÞuÃŒD’ì[F‡ü…ésW‚îîfþß/¨þ9€k¹VÇcº»fMÔ.Ox7?c€ àÍBq¨àuëf)Oª»Bv÷Kw 4æ]/Ò2‡b»!Ðù;{á¹éw ‘ÄòŒ:¿ãá¯Üj~Ϙ)ד,zÿ£;Ê ÝýÒÝ>ÒËàË;haj„ÔQž­»ë³‰`a ¯¿g˜ô» b&~gÓ•He]ðÄBÙ½ìBfÄFµ*FRTsDwiƒ.C(won-bL,÷3~¯GJ MÅùÝiÁþîP/¡w5˜ÑÑeÔbáÂ/c™y®»±º\3 +-ÏâgüÆ‘úZÚ´ÈWÓÕ:âýݤUas$ à8G{ƒi)ɽJv&ýaº‹¯´Ð PMý¹£Ôš©ð?Cnß O|Æ®®[Ï K +-.Gï.º ›hwWs/ƒœygÏ]£QáÕGAr$yû$WùŒ¿«ºWðtFîRîNCr `†);ªž;×|¼Ã(³-‘kDúg ô 3Ù”úó]_äw¯®vTˆø»@u(w×4]†£fpüèåDN.ãþ2ªÔ]N—ñàS÷(ôwQ)ëAOÇ]zŒ>ãèò;Û®†Û÷w @ñz—0Rw3Ì Õ»#Àð¤ãYwY¡Ix•œ^Þgø2‚·é­6Pg$ZïUAì0·½ŽiÄ–Q]°˜R^HºiwÕ¡;¬Z:sS#¬Çô’Ç«õÀ»|†‘‘ß‘Äà=ŒMéÝ»º›áöÝîžémóŽS±$¡7ÿØxØ»:^ßÑ º$›%ż£ôŽÔËø¨»2ºóNn¹yGÕ¹3ÿ-v: .Ûð0ŸáWèê#·Z!CVÇW–æà ¥w¢_.¤žºC‹î†GuËBråä^Æ'{[gfî»À›º‘^~÷>ÒÕ QÇ—’ƒàéÞIïÔEõ¹tÇCÝ-oFu·‘wúKÍÆEågø}ÚÔPß%cºšæ­Š áêýþlMz‡uÙ®t§ª»ì.f {ºîåRØE¦ÞãÒÕp¦3œ†,IgÊwòäêÁ»ìº;Ù%€™áQwÔ†žŒê8âgÖ¯|eÞð¨ŽxF@²„•ƒ÷ž Š{§ŽÝÝHwd+¨Á •°;Mwô¶KÂKÝ>£žQ±3Ø1Á“&‹ \XïÔ¥»è0C7Ý ºÛ˜Ê‚×=›À3¬Ð@ Þ«˜ôÎV2º+–ÈÞˆ+±»z#¢F¶Í±ï¾ùz®¢dð̉Àê÷;6“ô.@kdO!,ª‰ºŒž\2‹8ŒnݪêSŸ‘×Õ5%ˆ n§ Íf@Í@ÄHÿOdT.˜ŽgC1\„)ëí£ $ÕϺv*fõ»–ÊSe?Í¢$)ÏuÖÑÆuhÇó±M€‚ßï[_Z爴võºG¡¨PŒäC¢Ù¬ì'ú°«õ5$­¬!÷mAzž Ód,ò¾6pbé„Z×ÕXÑþ„Îû>0)—ÖuSIàçñÍ;¥Ë9Žã¨(d;ëÍû€ ‘%Ãlœ¨©ñ½ùta!ÃlœhôªÜœ7: iäá8áv þöÖ¶ˆHÒ ¥bI#QoNaéDyˆƒÎ†R*– &£ž ’%yu¦“ †ÒYÿPt¤–‹ªH|×y£LæQnš–0蜽4ysª¢&)ú¾ó­3@Ö›wÿ#i¢¤ïóîR%õ½4Q•5 \XvY“ô·ÞRe –eQç:wÿ£ Ë +-†€ù¾³ÿ‘58þÖYwÿ/ì€Hh×y7°~ß¼ÿ¬ m\ç}`(~ƒç[oÞ½¡óBQ‚·M\sŸDE†Õ¨Ó:W#@! +-@ äǺ@‡§²ÙDŒ’¦2B @<Œp容îw»*µ{)»;¥¥Óigýz{‡Íiõg5*î-b5‹MÓ„@˜ñ¿®Ü•“ zTå ™‡ß>žÁN爷pVõÓªi(Ðâ?úÛ¡?µó²3™yÑ?Y*“ +-zØyó,”@¦xÝ^¼ê°$;¡ö‰Ò]h—ºŒ·KæŸíÖ”íÖ’(†«îƒç=ó”&åQc‚ü7ì1Þ=ϸUŽ‹/0Fš[IÊÐíÎ wýÆí\Û ¹À3ÖáË;›ŠMb”®ûûç»M¼lË^czz:–÷ÏgyD"yH¨ñxâEŠw„mxÅÞˆô¢A&o}º*x#o§-î´bÈ°HíŽ &&%µ÷lø2MïÜž÷ÈkygÊ’wkïWgI#çJ¼Vç.þ¥Ý9Ú^JÛ¥úæÜ¥¸ûµ]³]e»kÚ%Õ.cð¥»<™RHþéåÛó.YãYÞQžññæäIeâ‘ŽgOJrKª„ç'^£ðZÅÒð*á4‚)$–Q_ÄnãÎåŽîÛu¸Ûo7$ê-®ž“c2l>8'‘{‘yÝËC0Í›*$¯‡¼¿¦Œ·Åð¨Åsn†gaâõ † …ÉVQ•¡‹k/ÝæN$uÎí×ÎõNí.íÄc´Øƒ]¶nÎp¡×œ$á©£§xžÝ¼À¼ƒU î´p‡S2<¸«g»ÓÚ%Ûŵ³í³•‰Ý »n׉‹Wµ†ÓÔž|¼c>/Zy2óXXy÷€<ëxSâeúU¼Å>O@x˜Ä:ÆÁC2X“Ó¨¤7@s4$ Á‹7%ïÁtÓøú¤ÀWü°ÝI:úÕîŒË ÝçN²d‡ÛíºÝô1’"ŽvC™ÜuÒ¯_*Ï}^É<5S^®CêxaÆ#±âAË&^Lxu¯g[5ß4<Y‹ˇwº• °eü9° ÙÜáW3îÒ«ŒÆÈÑÝär·fÄÛ lg+ÓXo=«ã­C/=Ãæm<å9ï·:h¼~ñvÃ;?0ñÔc=' ±Ž¨Ž5<ÖÍX +-0{x÷BŸ:t_‚§æ³ŒØîøªŒCî~+Ý©ä.öíîÄÑv‡µ³U»”®Ý¯1v35˜Î“]@èZ ½W@ÔhÖäÙïOa–Æ× ^4˜ˆÇS4¼„×8ëÃ3<´à)ØIቚ‡wÔ~êþ‚îÔ x0w†‰‚Û•´ŒŒ£í­5Ï„›= ­eÐyê"îŽü^z¬Â¸Ã“»Ž;àʺB›•Bʯ +-zDy-ÈkAsãq^4º$ž‰X?rxÿ€— I½:š{† ÷w…xµTáÐ¥`ï|eÜ·ŒÕS¯XÆ|ƒÜ 7õª¸ë¬;òÜ Â]F,ósIl´\O“y°é„¥âI6¼jŠ"Þ£pZðv ÖAhˆ ºÂSúî¸à审î€?u*ÝÁšóîªMÝ¿ÜAàNÏ@:ç.R&£bèÛŽ£Þ0;¿Áßm‘­å?^u(LÃãû‰W,NÏ2<ˆÐ â#yï¦ó²«+ <úÞ¢ÜqxÇúÔ¸ç•Ñ!¡»ú“Ü%Q¡‡ÝÕRïqc2þµ ¸kU3TöDF¤•ð!Ïrh „x¡CÃË+<¨ohÈ`ð\¡x€G»›ž#<õ »õÒ’|wr·Œ»áçRoE’þHvÖÎ"Å£ýâeyik†7ú¿Ó!xjòw!« àµ¤¼»ö@‹eÀ-ã +-„„±»‹~¬ CeügêŸkÍ]ÛyÖö‡guh¸NÉ7DC8¬?MRh|^6h,öH }Ær÷³Wo9[ÞeÀ;§×Z+íõeCuªîÐ/wBzj^Ó2º Ìv7“q§ïgmQ˜4Ò†¬ êM 4Âñ3TÔ3”îêj›Y&áýYcÞÌ[r7¥;{”Ý-èN^þز-NãiÓ9exj°~¼rа†ŸKxvu ›åOØúŽ‰]Íd +-@€Ÿ¨ð à‚‰@¢Ü`@PDÄHcÀŒf„„c`` ÞôdwâP•ÆAbQe@êœZ¨p8¡~­ &¾E89 šü÷_ä!þ_æá´©ª!¾±!kýT5E_òœE7K½çÛ: M¿Ì~É! YˆI©ÿU?˜|81öZ¹LdòÕX|”Š‚ÜýÑvh'»×ÝKŸqÈ£¼z´.é)ÛUÜëÄvƒy^×ÁÛ-µ†ÕÃgéÜNËÞ_NØ>ÿÿÏ8N¬iL¬IŽåÉ‚µ’m0V²I–—Y«ðöòe9&Üc lc'›*ª–ˆ EeAÛ°ˆÄÉ#ÁÚdÁéR¡ˆ½TjªL–ƒ½,Ç2öR%ˆge;½œ¨J»'SI]¥ºÝÄ‹d÷Û€D$$êU!› +-Q-‡T©˜ÈB8[¡&늢 +-š(‰g³2Ô’Rþgä ÷¨k§ÐAçv\ÿÉ7)ŒÉ‚µ†­°*UM4A.ËñL¬5`Í’®L…ˆ(‡IŒ8¬%°V¯ +-‰(‡Å@Ñ#}››)7;¼¼îè{QÒU«²‘„©%ÁØfÍòX^¦àzìŒNÝJ¦MRéï›®sÄH tnãŒ/ŸJÞλïÏ8úÃÈîH÷…Íó¯óko*ç|ºH)Ó)uß|燎5hòC‡ORØ?cóë(ŸüùðÉÉ?!}‡ÿ%uùdoSøfóœ’å-S˜° –{7Û[ayl$ˬ9|R!-è€Ñ¨Q-QÆ™ÀÀ` * @0‰(K‘`¨cˆ H0@€ƒ´†Bº9sÿ6%GˆL[«e„+àJð2A½zÜÁ ŽY„#†Ùšd3ÞË°ïq`@ “_9nëWï†SÕ`åƒÿxÙ¸øD|á~"Gñ2«ª‘ù<3V 8ÍlЋ}lÕ7iÊÉk½Š¿IàŠA(¡ü!úÈ°àMü‡ØýXíÑØþ˜Ãº(BÛJFsˆÞ'(í¥UÆ @#’ýˆ¥ñ_Ú$Œ·›ÿYb`_s¢¯˜o¿‚hDÀŠÿP`¸¤ã *O–Ê8^ +-2–4¨5(â?p,Äh4Ð<…_µÓˆÀ" ó@råµRP‡`Pd2Ý)K4O ¶Ð%1ã[]XŸ#(ãðóƒ…H€éÅ ‰‹Ú‹þßÌ_dtí6V…Ó¥ ïgPœWG`ñЇ³µCì‚L‘õä†A2èÈ.‚„Ÿ ÁœXÐë~#Oˆ‡Ü#„ÓëpÁ7qv¢I§>I—ÜkF þVòå“ ­Hä-“fù‰ýO!Kå¬KqñC6ÁÜ»F”(ì» æþv«¯(r¿ßèK*”›]H+ýªü·H§¥%üœ=3J |`MŒ•±ƒÊ¨T¶0èÌ»öh"KÁ¨zp,À¨-Ö3š@Åؼéöõ»ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDýÿÍ ÿÿÿÿÿÿÿÿÿ¤ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@+@M?艂*þAoTðAOTTðÀ@…Ï TŸðu@5 ïTðð!@ÕT¨ø] &Àÿu9þ¨ðTA=ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿPÐËòzßÉ/é="¿ª÷sü¿ÞoñS{oÄÏî½ ?Á÷üßðÇ|o¾búÞyuöýìêï{ÌUç÷}+ÜïaUðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿP§ýiÝÓöïu/ÚßØýd?g÷ý®Ý¿õwßÕ/ÝýR?y÷9ýöÝŸô#x_ѯá=@ÿ‹÷îüDÞgó[yÌ¿d?ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿPóÒWú_rŸè?ʽž-÷kþÁÜsùOsßäÿÍ}ÿ:÷2þýÜø3tá¿Ñ½€K÷óý9Ý“÷/u/ÝßÕ}4øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿPÞ*¬êí™þÁ·úgßžæ{”ÿî3þ'¸oøÿà>à…ûzÿîÍý¸×ö¯â~Ù?Œû_ÿ6îaýù¸'õ§ŒèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿP ÖëÿËlÿ¿³}ùÿÑöÙÿSÛ7ÿsmOü¶=î?Ýö¬ÿ€Ûƒþ3nOù¹=â?éöÿ­ÛÏýçnOöoŽ}DøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿP þ™ð!µ‡„Ï©=!|Tí÷àÇjÿ_W{3øÆÚwÁÖ> +->¶öHðɵç¯= |~íOàl¿ßa{ øÛÀÏèèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿP@ÙƒÄgÐþ"~…ö ñ=´ˆ¯¢}>|íááóh_H{oøNÚKÃ×Ò>>˜öÀðÙ´¿…_§ý*|?íEá÷QDøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿPLñIã#f¿ß1{ÉøšÙ'ÆÍ0>köwñe³‹›=Z|âì¿â+goß:û¦øÜÙÅGÏ~'¾{ö2ñõ³O‰Ï£lÄÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ,P~+ˆìøõU~‹ì-ø¡Õ~ŽìQøGÕ~”ìuøáÔ$~—ìŸøoÔ3~šìÛøÙÔ"?Pö—ü(åæ7ʾ;>SöÔñ±²_Žï•}q|²ìyãÃe?ß.{Õø/ÐÔÄÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿì]ø…T.ü†Ø£ð ©Vø±/áR¡ðKb/Â/¤៟´¤ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ:PÐSòŸ¨"ù«¯ä?Q9ò{_ȯ¢Zä'¿¾¿EUȯ~½ ‹Jþz>~Õ¿ýõyü0ª<þÿëíøgTsüØÏñϨàø°Wã·QµñS`Æo£Rã×ÀžŒ?GEÆ‚}Ž*Œß{/þÕÿ ö<«ôÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ=P™Óü*k~¼ë¡ùTÐü~×+ó¨šù ¯?æOPó+^ÌÏ "懼ޗÿAåËoy=.¿„j—ŸóúZþ +-U-¿èõ¯ü*Y~ÔëYù1T¯ü®×§òo¨Lùo¯å÷Pò÷^Ê¢êä¾¾“?D¥ÉŸ|ý%?‰ê’ø?””ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ9P{Ócô7«ý$×KôC«ý*×?ôO«ý0×'ôg« ý6×ôs«ý<×ô«ýB×ëó—«úüH×Óó£«÷üN×Çó¯«ñüTׯóÇ«ëüZ×—óÓ«èü`׋óß«âüf×sóë«ßül×gó÷«ÙüE×ìÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ=PŸ+¶~;õ­¿Ùú´~>5­Úú±~Au¬?Ûú®~Dµ«ÿÛú«~Gõª¿Üú¨~J5ªÝú¥~Mu©?Þú¢~Pµ¨ÿÞúŸ~SU¨_ßúœ~V•§àú™~YÕ¦ßàú–~\¦Ÿáú“~_U¥_âz’þ`•¤ãzþcÕ£ÿsÜÒ…àBüªªªªªªªªVUU5_˜~@ $D‚ˆ !H"‚„ !ˆ „`Aª¹à¶ËQG-ûG{ºXh‚± Á z]¾hÀí„;ƒ`âhÆPjŽcM¥Æ@iŽ)”©/+c¦iÍœYÞË3ê´i̦ÜM“n3Zi’‘ÒH(ÍRíHsÿ€ƒ,‰ŽiüjkÌRj¬µÆü%‡kØÂ|{áÌ{Ø*àV—O¦¥”ÆUUUUUUUUUUUUUlXøÿÿ- +-Dz‰ÀCÁC>—“#‘ŽA²”;G‚³„l(¿ŒCf ÍP~ ’Œê¤< “0'«Cùš“H'{B¯Ú °lŽQÎc¦Q°e©° ¾Ä€¢$ÌPÙ{·=ï–Eù™M%ЭÁ¸-H¥mæÊÒ²%¬¬¨+‡³Wäõ(®U¯ØÎÔRb•Á¬ºÔâ<Û…§©±CåMË/´ƒªªªªªªªªªªªXXøÿÿߌ4°ªù³®˜qùʆ\î‡6¨¯r€ÑËc`ƒû5Ǻü‰6`ç ÁËi ‡v x9rüÀüPÿrÌ¡ó£Ú˧óÀ„õÛ˹ó(ÃüõåÓ~Ãü`äòÆ?öaŠh}¹!/1‹€zyh!¯ØE,ºü‚ÆØ"]^¡ˆ)qo¼ƒUUUUUUUUUUUXXøÿÿX+k>£êD!)WŒfë Sž°Ú'òDy?'œ[Uœ;åxœè·R±-ÊÏ9ñâ²(oKK Z£Ü -W0VEù0*]ÂpåUµÀui—##í +-Æ¡.?Æ»Ë<¸¼'/3Øìr`”^ÍÓåcÌ8{iƒà¼ƒªªªªªªªªªªªXXøÿÿZ«j>wÅ[¸ƒu¯Cèj åZ¼< ¼«f×ño1ÐWl0ã±aÈ`íáXŽO·†ÕÃà:Þì‹vq¼± y¬CÔ*òÝ©È##Á,äƒUUUUUUUUUUUXXøÿÿ#W5.þà’ý Š«© âß—œàâ ¾ âS”1ÁÿÈ€AUB<Ž vT%4ѵø@Jµ„,Ü ÔTW¸¡Â…ðÁSµTø†$ܪJààˆ¯P³j…Šx%ì«V( ˆKP‚Êê +-åqíW!eCì³¸í­°µŠðBX죪ªªªªªªªªªªZXøÿÿ_A€ØyEp‹%òéJ w¬ûóOüäÜHí_A1Óçþ€$9wLp¡4pvO€"ª‡j7#4¢ˆ¼2`µ=Í[Ï®Q¨“¼éh 5Á7äý ©ˆ)ßhNp“2A—ð-ÆM© ^áï]ØKÍJÿ¶r‚÷‹dcÅUUUUUUUUUUUVXøÿÿÿªÃ +->Âq¿ð­#Ž/™ÞÿÕë…ôK&ý|ûýžé>ßaçK_5½ÏkØóîWMúç@¶ûm“~¸Én÷¾mÚßÖ³ÃÝ/œú«áì6÷;§þgŸ]­~ç´Ÿ¬j?Ó_;õCÛaúOý½n»×þæ)`«¶mí'Ÿ\Z”³UUUUUUUUUUU [Xøÿÿÿ°Â +->õîj.z&©û+®þLZÿjÒ_¯ŸIÜY4Öu’ûT%Íj½OT¦¥®§”ƃòéQî/¥x < Ô]«$^“Rwv,Å¿L՚ܥô(­ú¥{n }d«¦[¢çÖ"ãÕKè¹õâø}ÄlˆþѯdcŪªªªªªªªªªjVXøÿÿÕ@|uÆhùwW&.Î1*÷•¿‹›FÊq»òoq§tkÇœ]|oTÞº1[/ÿ O;fÓ媣èÍ»º8÷²7kVÎAWöÍ”ËHщ§³òrÒº`{F¬œC²î랣ë®ïhßèl¤u¸ ×:”¢ Ô£UUUUUUUUUUUZXøÿÿÃÊ +->’qO‚NBîÌo<è`J­ú}‚4¹Ë¡ßL †I;?ô˜˜rû‡ˆ c@n‹È70±ø>ù¦OÆûqs‰Š»/cú¸E¿Óc÷¾"ââñqúÜ\QqîþXüï^ñu–lÝ÷ºˆxtKŽN¼]¤\9%G›ÜƒªªªªªªªªªªªXXøÿÿ«U5LEž&´öã&äièì<6®?Lﶞƒéš£5hv6š®O§‚fÃwŸ‘uDö0zw¬¹AeSzoÁ÷­· +-­B²%|8;!”ûî;‰¬;!¸÷о‡ÍŠÛüÙh!¸chÀ7˜Ýò­„¬ÂÙi§c̃UUUUUUUUUUUXXøÿÿÿX+k>2 ú›çZÍýм1×ÞØ|ù-M~f•éÍì×ihîú€fŒÅfÆæׇi`Rlc4+~@ßeËîtãÇ4Z\¶.6?L£’h»Z÷cz*‹öšÛ?¦qâµEúþaš“\›Ð Ó#™¶ÝbM» ‰Ð'ÓŠ¤ÁZÔƒªªªªªªªªªªªXXøÿÿÿZ«j>iD5q»“òOKTQŽ»;•ù„D‹Š8ÁS™L? +-'”[R¥Xz,âÑܤVÊÒÇ:ÊArS ©üñм‘6Òc5æ5TŠVVóhî¡¢È㧇æt*„*kz4¨§ +-´²²Gs{l?*Ÿ=@Ç£VÙSYܺ:ž•ÅTÅ̃UUUUUUUUUUUXXøÿÿÿV­j>ØŒXµA¹ÚÁ¹œÄKsJªÌåpŒY³äÙ`uŽÄ˜1KÏ +-nç8Ƙ_’ì`FbÃZ&Ækt<ŒeqGÇ1½\“^“:ÓU7Ñ•X©ã±[ŒÓ­ˆû:Ž‰åК˜×áX¬ÞI¬Ä’•­bŸ\EÜÚ¡L)ÕÇÔÊJeaÔ“UUUUUUUUUUUYXøÿÿÿX+,øåD˜Ã»œ›¾-l„²‹ÝLÁ.¡]ç ß®Có5o +-–ß#úï.þ_ü÷ ?gи©wû”t|Ž›ª¹ëNªkg\lM»jb;qÆõÖÜEfÂ+s\½f_,}^/á2lìÊêIÙ.a³/“nÏ”pG6|éùš÷³ÙWGç'H»;¾kô;‚{Ûìë¢ÿS£Ýµ ß)ºÀÙ½möÑ Ñîæ†ï"Ÿô³UUUUUUUUUUU [Xøÿÿ+—|@µôůû’õÍTKï{·Úß \é^±t“­g¬5nw-zF\k9·Ö¢gàŠö™]›lCc­eû¬²k14âúÊÒˆµCW®_-×jKqÍške]‹¤—UÒfª¸H»Bým§VÛÓˆkÓz êZ<»Žr8JÅÅÓØ•è“{´ÚÐœ¬cŪªªªªªªªªªjVXøÿÿÿX++ød̲rW¥¶}…cªuö0=Û+?Y°mØ¿ú1ËÒ:žRýu"S­Óêi^+™e ÝR….»’©ÖfFÕ3²•Ìµ`îª6ÝÊ$«2»ZÙVæZ7V’ËneªÅ˜ieŒl1s-‰c«Äe3Õ2L¹F¶˜¹–Ááಛ“Vì£UUUUUUUUUUUZXøÿÿ*—|o|eÿÁìkÆ×øÌý¥š`¾^Ÿf¬/kÓë÷¶†÷Yu0¾Jo°ÕãUó–£ù¬P˜dÏ:ÇÏŠ†ùzwÇ£û¯7Œ²]_®g5Ä,+zB]ÖOŒWœ›Îyub–µÜë'¦ìÅ]䳞1¾&üþÕ³,Þ Éoó´sÅUUUUUUUUUUÕWXøÿÿÿVÃo>E¥6]d5Ä'!Õé2ël±©gXé0 :Hý»ÀŠ†g¸AêßV.œƒ R//°ZaVúzU ÿ€‚Ô× ¬>¸ˆ°¾^`ÅÁHp õøÂ+ ^"©ßXAp`ý¾ðJ©hë÷…W|…Rï/¼" .Àz:ÚÜ“UUUUUUUUUUUYXøÿÿÿXIN>!(õ%#|'GO-¥¢Ä—£$S¯¥T‹ìõišk‘z!5"Lq-¥ÄÓ$Sµ¥T|lýùhšn‘ú`GÓwK©àp@8Lu·H¥FP£iÀ%VdÈà›6.¥òb ½0Uã25»` ©YKáU`*sÁê‰zðÄÔ¤K©’D€|܃ªªªªªªªªªªªXXøÿÿÿZÕ:SLóh¿’éi„öi‚ZX˜6 ц¦Q‹Ñ y­Ð8J±`º™¬ š£*¦5õ›ÉÔÅ´f^k3Ž‚,¤>&qS樖…iÄðîcõ²0Í—Œ¦, ¦q ãv9*g‘š,¬¼–F-Lcåв¢)Ñ‚iSÒ:Sš*Z¤Ö s%S“U±ÜƒUUUUUUUUUUUXXøÿÿÿZÕ:ÙkÔ7@‹›FÓ*GùF´qè°Âèo‚6n‚jVŒÆ Ñæ&PϊѸ­Ù8ʬ0š› -›£š£qC´³ Զ´lFk6‚’+ŒÎ&h³æ¨rÅhÙmku®-›Ñj£ä +-¦­ Ú¬ *^aš5D{šFý+F³f´Nã(¿‚éiŠHä“UUUUUUUUUUUYXøÿÿÿV–|´, ::í)ŽZe¡Sç¡hëP¶r€>TµÎÊ.P‡ +-PÖ±,åU¨8 +-–UŽ$•££cYÊÙ)Rq:,KAy*AGDzˆT§"(tX–8‚òTŽ^Že'¨NÅQå°¬o¥ª½ËòMPµŠ ÊaYßÊV9º8–å› Bë +-ÌsÅUUUUUUUUUUÕWXøÿÿÿX—:”ô=;ž:ù(A¿'±»c'’¨{.VwtJR€~ÏÄrÇNWŠNîIìîØI¥Šž‹Õª Ó3±Ü±Ó•zû:v‚)€¢çb]G§0èôL¬uìô¦%žÄ¾Žl +- â¹X×Ñ©Mz< A½)@q§²£c'ž¨6Ô죪ªªªªªªªªªªZXøÿÿÿTX|}ÊW÷ÐÉ Üé@|åž:¤¯î©³ƒ¢Óüê=5o(€H_Ý“f ¨ùUzv>Qè ¾¢§Î&ŠNò«ôì|¢Ð }EOMäWé©yFt?úŠž4Ë(@ÕG±Æ³óŒh}$VQCàz?5Û'vJ\ï§fûÄN ëúìlŸØ)!p]Ÿí;„¯ëS³€b'ƒðu}jPìd¾®OÍŠÂ×õ©ÙA±Ó@øú=;;(* <ƒUUUUUUUUUUUUUUUxXøÿÿ/ŒÁÁÓ¬".© 6š'kV—TPMŒ“5«ˆK*¨ „&ÆÉšUÄ%ÔBãdÍ*â’ +-j¡‰q²fqIµÐÄ8Y³Š¸¤‚Ú@\"ÜÙCtRA 4‘Nîì!:© šH'wöTPM¤“;{ˆN*¨„&ÞÉš=D'ÔBïdÍ¢“ +-j¡‰w²fÑI5€ÐÄ;¹3†è¤‚Z?‚3ÇUUUUUUUUUUUUUU sXøÿÿ ¤½ò _MÔÌ##JB^MhÞ£ ¡BÕ 5·&\æÑ‘T§fšZ“5ÙHH(S1(ͬIšn$Ó©”¦×dÍ0Ò’¨T Zk’æu‰4ê¥é5QŒ¶•ÕÜš¬)F_b uƒhvMÔ #/ŠA^ÚMh£,¡BÕ /ç&h†Ñ—T§f—r“;©HK(S(͸IV”%Ó© ”¦ ÚÐ$sÇUUUUUUUUUUUUUUÕwXøÿÿ/LdÁÁ^×D¢^±B%C/©L^¾¢P©@!—[&/Q¢T ÎË-“—ß(N*POˆæ–ÉË{”%¨'Dsˤæ= +-’ +-Ô¢¹eRóIê ÑÜ2©y‚¤õ„hn™Ô¼GARzB4·LjÞ£ ©@=!š[&5ïQT žËE“š÷(H*POÈå¢IÍ{$¨'ärѤæ= +-’ +-Ôr¹hRóIê||$cǪªªªªªªªªªªªªªjvXøÿÿ/Ld½ò» Ô¢¹_òòë$%j ­é/ñRwà§u†ÒÜ—py<ÞC:CiîK¸œã¡N¡4÷%hNëP§ÎPšû4¿Çr¨Sg¨Ë‰ šëã7Ô©3ÔåÄÍû1êÔêrb‚æ9 uê u91Aól†:u†ºœ˜ ¹AC:C]NLÐPÍu“5U Y+P¨æºÉš*¬¨TsÝdMHÖ +-Ô z¹n²¦„kê½\7YÓµuƒjéáZºA5wMÖô€p­@Ý š»&_Ú@²V nPÍ]“/m Y+P7¨æ®É—6¬¨Ts×äKHÖ +-Ô ª¹h²¦ÄjêÕ\4YSbµuƒí$ €¤h €@Æ8@àþÁ\Pêzy>(3;h‹Q‰ö¹âWÆ6­mÍïqrÁÔäa${øU-ó\69(íz– šî6‡Æ±*¢‹šTµð)¥]ÅòCÓå&Ð…"]EnqÓª£Z~ÊAi׳LÐtß4šˆXXÔÄê¨[ù´Üä iW§Tè»ôt”hZ‘,âDuTƒO3hÌõ)sún73#úV‹8Qµði¹:åOßå&¦CDëŠd'ª£|šAc®O™Ów»™iѽ"XĉꨅO3hÌÕ)ú.71X$‹8QÕàÓ pýË„¦ÛÍ@ÇÁ"NTM-ˆjA£­~ùÐt¹ èøÐÃ"Yĉª©¢ZÐhë_&4Ýn;´±q¢jjAT mõˇ¦ËM@‡NÉ"NTM5Õ‚F]ÿ1±ùv3Ø€¡£%0ˆUOA§É(é·^š\ +-ÿÿ€”¨à0ˆ™0øÿÿO …u*…8Õ+3ú& +-9b7YAÓý&ÐÑï¡ÐQö¨vÚ¶lÏn¢"V“54Ý7 Ý;` ˆ‹µ_µÓ—ätl¢P ö‘è»÷:t`B.ÊÕN/É鸉B‰ØGbè»÷tqÀC‘/þÞÕN‹êãnšPÒ`ûèÏZÅÙd8 IÂxŽ‡NªAÄÏ}ûÖ’˜Ñ7EHüµ”šn6……ŽÄñ¹ +-j“?HömS„诤¬ éfè”YŠpQö¨‚Úq*Bü¯OY¡éj34Å|™"Z„ý« Ž’ÓqS„ò¯›ÄÐwï è¾€œ"_ü½« ¥ÓaS„Î_1‰BßÍÐኰ¸{VA-púAÄ×™,§ïºÉ´²<¢"]Ü^UPûœ~ðu&ëé»n6M+©µ*¨ƒ¢æÜ +-ÿ€–¨àQA`;øþ€àasy²¾ÕKÑIo¨:+¹™î=×üPÙ ¹­zéqҚΒn¦[Ï5ïɈBGØ©^ªOJCQ³î¡ïÆ3è³)P¡È6«—Þ'¥¡¬Y:’Ðwçyh0W(丽ÕKÕIi¨4«Žúî=ýJY ¹­zéqRÍÖ‘†¾[žƒ^’&‹°S½Ô"…¦6iÈ/û‘µ™î<߬$ Åa§ª©ni EÊzdl¦ÏšïQC‘#lV5=Ü~Ùt!ÙFÖÐt»èYf(t¬ÝUM%K]¨"+úî=ýD9 ¹­ªéñZœ,”x,m\ +-ë)ONMÑg,6A¢ï¬j +-ÿç³]m*n¹^šL©ÂÈg›ô{桘Õ[gRfŸféä>eÕΦËÀ)ÆÒ®Sˆ1“µ‚t €¡¨àADìpøÿÿo—ÊìÑ ¼‹c(žÜ…†à9¾ 3}g@ªq;¨ÆãÛPƒä(,|Õ õH{Õ¨"Ø£ÚtÂEÌà=‡H¿ö±™.<ß^¡Š‹"£uT[Ô,;ì¯ÍsˆäµÑšéÂ3ÍÉ‚A‘CGT#]Æ MÏ!‚×ö"l¾ëКo+šAAGŽ¨FÚŒC[Ï!Ò¯ÝEÔ|—Ð7V`ƒâ¦iÒ(5Ö梀¾«ç kÏAaGG«Fš4 +-D-µé(šéê¹æÁÚs\8²î¢º*¥fÞdW={™¶¡™®<×üV‘8|Ô*¥)¤=4MÛŽÒLWžk¾ªMµJé8‚¶<{H›ö±ù.BßœSaŠ4j•ÒRš£­F}Wžƒ>© µJi +-©ÍÑV£@ß•ç OjCBÃG­RšBªC´)Ítå¹æ“ZZR’Æÿõ| ÿ€ª¨à0c)Cøÿÿ¯Ì…µ®q¯AŠ;™W%‡ýå‡bÑoî¹2]…R–9úþ¢È¬"J'‹ds±•é>å‡úˆèâ*¢…hs +-Å"¡¹wØÊwGŠòÀáþ El±ŠhÐ*šÊÃm¾ëК»[pA.T­ZEyÜPÊtºò»U¥˜c)©ê¢¤ã,ÙýP)úÄ"W¦«PÊÒF¸òí/6eº EyÎp…‹GlQÕÑŽ¢L”»ÍÅ¡L—¡+YÅpÑ.­:º°˜7óø<“èà–‹L3])~Üÿf¨àÆ PøÿÿYIEš{Cp4ÜžÃIŠ¦˜áÒ×O5²ñ2ú©l«9æqdÒÙO5"º"ú¼.—b#r,ºÚ¿ÿZÏ?t·;Ðfk͉3Ô¤‚Ö »¡6û1ê2Ž OÆ´wè‘‘ß¿6’÷…©_öÍt“ ÖЃY˜ôbõ"´îÚ”é"´2ÊSÊ5OQ§ÕBõ»ñeô¡^ôÖ‡keº„¢ìïôõKE6šj¡ÙÐfêEb]XH)ßiådǸ_<"‡¨ÚÝ"Ÿ®/$šï*Ts¤cã/ñ†®ZÝ"…®F$•é:4å”û¼ÿA¨à ãØDð7ÿÏÌ qf²ÇÜ,¶r‹œ4ÓƒâygKO§ø ãËê´1Uc­h9º j…f8/ÇΟ ]³`!3/[¾ÕA ØÍ`~bFL¸s1“'uÏ¥˜°SŸ£û Í \ö™O“nažpG1誋f>1ãýÛÈÔÉ“ºŒ#Ó!ìÔÛ¨ÎÐÛG#&ÑÐ UOqn‚UK=úÁ×XigO82Œ€…?¤ €ª¨à 1\øÿÿ¯Œ%Öé¾}^ +-¦kÕƒ=Å?&ËUÕ䙩I´Å†'Äw­*qUi ÓÌ´ªšvfjRmñáñÝ«NÌVšAÇ.3MUÍ×+±žjQ1íi0]ªÜYÒ¨5ÏÜjWm“Ü/¾ŒvJIı‰é~±Ø@Ô¤‰j›½4)é‘Xóžø®UEܹԀÎ/{ªÚ&ÔóxN)©’ó.ñ]U!^@§—4QmÓ.ÍHz^¾$¦ûÓ‰Y˜êƒPó ­Ä*œ„…ñeôNiløù‚˜îO'f1­ßá%NTá ¾Ë©#‰ ËžßµªÄLï;y¹É*œÆl.ÒÇpìÅ㻟v,Ë}‡/5¹ +-gËæ"í +-›ß#¦ë)ÄMÜA­¹&VëꜤÅ3ºSDº>¿ ¦ûÓ‰IM»wx‰Õ9‹ÇÒV:H1c½…=YcCsj/Y#°`1'}6Ãq_ŽZ¨8,‚ùŒç –pä?„ ÿ€«¨à¡ÆZ`®øÿÿ\T¬>àK×­øâ†Ë1ZǦ«z™Ô²–•“ƒï¢upãÜ6FêÌrU/CZÖRRrrð]·.{Æ([¶êeJËZÚQ^èK—V}§ç‚1ºS¿Ä"ªaF‹/ãW}%¸äêÀ`ºQÌ>w‹‘:³\5ÌP—¯”Kæœ|×­ƒ èn +-Í-[ ³tOÕWK~n ¾‹ÖÁt«I3ËUà uÉJYdÚÉÁt­:¸‰n£tj,j•Ì¨³$ zª©„„\;(˜nT–ÑMTM-U%v ÕT²BNÝ ¾‹Öƒt‡USKUÉ €iJõÇÕ‰Äw¡š¸’n if9U2C`šRòxr0]«.¦{(š[¶zf:æ(íO ¦‹ªÁÛta­ùKªgÆ¥gãÚ â»V…øžî +- hê’ê™Ñ1A©Îø<1˜.T—Ô-$Í,WU3df'å8÷_~ü +-ÿ€£¨à@c)ÃøÿÿÌEµª:­iý6l—®°í‚È¡b(LV¥¬;9MÁÏÚö»t›]DN*&€À†ª”T'¡Éö lÒ÷n`ó•ÈIÅDÙ°*%ÃIhB<Û›Ú¥;ìvQrD1biÅj•ÖCY²?­Ê´rÆêK­|Ùä:1%¨&V«lD©L)go{¾w‡/šNLÀÆj•ô(• ÈYÛÔ÷n`ã Êéd„ØP­’å1›NúÒMk¾Z9‘˜¢ «X2¨$&L³½)ß»ƒ/Y$£:`cKÁ5xn%¦NóÞ0ß»Âæ‹,Éh0YŲNe0…1‹ÜûÒMk|}9…˜bf…ê–Vâdÿ­¾ôÁ 9Ô—.­úJÌ2jgOW·Ì¸ƒýV_Z0ó½+l¾(s~ŒÖ “Õ-ëWîRè²Â}ðÝ´&4':`CuKê•»dZ†‘ž‰t ÿ€«¨à¡ÆZ`®øÿÿÌ%Åê-2ûpé:.qP')mÐê/s7ž¥'v5É Ü»³«G”Ô£¾´:düÇxz¨î™Ä¥‹Yp‹ã:a©`ÈETŒ”é;ëN\jŸÁ¸t›×5.*)FqIÕÈ€ëôD3¹{³ì¶Æ¥’ú(,©rê§KpébÜà8©¤6Ú%«I&ŠD§ä4Ò$\ºš;•Ô£¾´šd¼Èrz™î™Ü½‹Yv‹ãRI}–T“ŒYNÕÒ« pébnpœWRU—[Ä*“QT²ýå`¿ÉBújÀ.ÝaÛŽëJŠQ\Re2€ä7=H'MîÞÅ,»Åqµ˜ +-KªLŠ|ö›¤“6wïb–Ýî¸WL…%U&£HrSUtlÂ.]ÀÚ“Jj£]²údbÉlÊCSMÚ½«Ù»óq¸bÔ—VŸŒ/iMOÐe“¼u oÜ*¨‹Â’j”º†$ü< ÿ€¡¨à c)CøÿÿÌ%•²61+jz»º²önrY›&žÄ )8S¥±cEÕ¶,ÉÒ]®²mâN¼(%-½¢êô€LÏö¡VµlÔÒ­mµV‚Sñz +-To,ÌøPUí÷Jµw—km8,2Ѭê…*Ÿýa©–n¶¬í ãå”|ã«:Zïdjmª™ýaS-ÝØZK"¨ ÖM|°ªcÝFƒªdX½;[qÄå`‘‰fUu,ØhPiìKµt³emƒX,›ølµÇzŽUÃ>c©–îl­­÷ƒE&šUí±#@%°?,áÞÍ–¸Ýa…°lâ³Õë9TõúÉR-ÝÙZÛ®‹LÒ¨+ªi!éÍêÓºõ’ \º ×;ð"¬›à@ÈúT·¾±„{w¶â‡[’¢ͪYàñž2Ög–pé6KÜâ°KXf’sbuHë‰@¦w–žšôqw$ €§¨à‘Æžà,\øÿøasY­ë<â +-¼ÒïW¬Áñ5~mÒj‰ØsêGœUÑë]{¸—! &TKD ѦráÄŠ^é’×+ÑÀû_‚5XªŠâéep²¼3E'–ôJ—¼^YöËÈ‚‰UÑI„©Yð\Ù»æEVb™Y8¡Š"‰05­ðJ×¼¼J 0@fN¨®ˆp¢JM~+ÈÞ5/²ú ÈÌ ÕNT©ÉïbÙ»æEV\ƒ—S8¡º"‰'5íÝ­ K×¹À@fN¨ºˆ "IÍyG+ÈÞ5/²Ê$¼œÂ UT © ïh…ڻΥVV@…—S8¡ê"‚Š!5Û®@–®s‘•€áåN¨Æˆ\Ö¹¥êö–,{Þd1ox!å«1¢·¸Q“Üõ +-²t‹¬¦/§p‚*0bÔ w½‚,]ç"+( ÄË)Œúg? ÿ€£¨àqÆžÀ.tøÿÿ fv±y ÆAv;«Š+RúgjÖ»†Õƒ81n2[0ô XÑÑÿS§Ò0©Äq“Ñت…! µŠ‚þœšõnÃj@\7­Z’P«Èç/ªSéF˜Tâ͸É@s1ZÍp§)Þ_ï—ª2Îõ°Òõ7«õhÜÈfY5çBªrp®O†õî²N³®Í+ãU3L*Œ*'ó•*¬tÿ•uz˜5nd¯Êa‚¡S¹—OTa½»°¬»Ã¸kóÊxª&.•KùPVºÿʺ;Œ72d"ÆU?Ü“Å_†ÿ‹Tcr¡ú¬tùÕt„xm¯ºPýð³aQáÈ­”½ÞýׯÇá”×öº1Õ3‚üV+ÝÍz½¶×©Š˜ñð§P㇪^ïþë×Ýpëµ½nLUÄŒ‡?…?Tõz÷_{} /ëÆTEÌxÈSh¨±»~l ÿ€ª¨àPƒd(ˆá¸Aàÿ ‚wX @PqÅú”ú|÷ãåE£r»¯¯—2ˆ‹Ñÿ4Ù/¸\”4Øtã‡b®Z×°ÊŒ6è³6¿Œ(SbéÓÖ‚Ö¸Uó°†U5š×“¿#ŒªÒÖˆzë +-%3[¥pXÖÆ7yÚß?†…ZºRC­Eg«ÿ–½ñÝ {ÙpÓVêFw×øŒêÆ÷* Ûã`ÐᘾR1Ý­Fæ« +-š ¬«Tf‚A —:Ieêîš3£ª ÑÀº:e¿%Ú”®Š›ª$źcí²$[ª $âýõ„ßjÝ–¨Tº–êôëNµ°¢Ú`™à[¯ÿ¤2õ®Š§*FªGYY©6XL­2ë•©œJWáS‘‘Ôî¬VÖ«V ¦Õ²zZ*Rï¢x*&Ò»8“íÚ*„ƒf5¡¾œŠTº$<•ÉÝk¿õØ¢:!¡ò¯/?LÁ¡ÐKVm«5XéP#—¬¶@Gp¢}êçh°úWÔ ®ûWEH \¾¸‚ŸÂñ4 f¸zYïÀ¸C×CÝÿµ]½÷ZüY!Ý\Ó‡ŸWE‰;¸€’L¥¾¤µ¤rpUûÙU .αHZPÂë"=Ž/BAˆ÷ê*V9,gŽ­ €³qb ŠC…ÀÁy¥ +-WA¢Á‹LD[ B îG±EƒUÄ¢ eÝ¿!Bø/æêÕý§Ç°¡UÐÞâιRä7yÞÍ8Ü‘+¤™ë;}¨³Õœ v ©A}5è›$^YãnûêjT™çÔm  ²¥úH'Á äÕÕ´’hΑ/Z l‰& BtA1V ¬_8é‚QM!Wü¤.Èâùl0PÍ,½0ë[¨Pê>|·Â±Ñ¯‰X¼Ž¨ÂVeÞõ¨CЕ•ø¤ €º¨àP(8@à?@ ø€Å¡u]â?^Lö9¿4( ž«Uù›N%­;°±4Eà_thPU­ ¿.ßÍ/°´||8Ž³Êd ê_+ÀéNö½#è¶ÓŽ²†>D»þÓ‡9R… ÓšÂ,¼”ÌVE…ƒ@îÑ7«%p1Öù„ÁR7Š†ìuÑEðÀ›U +-¤ŒK©„áº,-%Ë^ä0=¢›Õ§ÊìŒ'‘„Ð`Å4ÙN6@éâ!8°J–,¨3žÊøYz ~Àë5…4¨šW9Ðb—ŒŒ&H[2Ä^ã¬b2PÕ±àt'ï‰ÄܹN7Zá "]ÿééf„"ø ¦, RÕ“ÿbÁrÈHÄþfÕ¥Bc:VBz0[ê‘‘/Æð½YªP€ÉEIH öKÔLŠ±õÅÐC»YŪ\ÎxòGH ¶ÌÉîÖ~ä ÿ€Ã¨àP 8@à `h¡áb÷+ÿ±›äÇ¡Órµª„-ò¥’‡…ü¾‡µå¿?0c +- U²Fž» I`šü¼³KÀ·(/¯ïéoVë!y"¤Ⓠ)„Þ†‡oVêy/b = yÐæyÑÍ4¼OV3ªz™Ä±oÚ ÒÑ$+D@védu¥ª'þ4“@µî‡8‰Øõ0á³GNV{j{b. XíBè¨ K8í«O¾V1Þ”Ø&¸{XMàûy0Ñ´\ +ðG‹|‘ä !Èïmù7¿# Õ¹6Ÿ»ýG(.=6¸+ÌÏlQ&¯ïômUý‘}ýáÕxJà0ÌUûw‹ª÷$ó›Uˆj߈xøM‚3(t‡Œ(ÉxØ®'«"5¿ 1M™„-HuiIÇœ‡‡½¬ÒTþ¾Ä"\¡`Úñ¥>dÈl<­jÔùLL‰Ñf~ ÿ€µ¨àP 0øþ>„#“Öé4ïÔž¢Õsd=zÌÄè½ìƒá½@± ˜GÇ|‰ ¡y}; +-Ѹ;P)¡f%Ú%v"l†…¾£Œ”üÄ¢O•ÿ$KG³ð7{ Ê[LH,JJŽ¨@'&ˆ’¢©)èœÝ×zh‡ªÞ$æÄàîlŠzXWtËþÝÙ»ùR5 +-ÏwyÇtàP¶èíö»ì¹q¹1¶Z•Ò×pIÎP¿=²²Z€9Úóõ™>°yÕt$‡äR{>Ô'=Ùcpˆü-U|V øP,‡$`24K#äñ-U…;)d¬Ÿ¸!žI±RF#l¶ÌSo©f4ìà¥uâ}ø'•ÂY‰¿Ù <[m¬¢Ôv‰ˆnZ:4ªX$Z†œ3 ÁáÕ›ì}(X¡LH kÅPi ;ã]ÅU5JÞ}ÁÝ»”b¬Ø¨| ÿ€£¨à€ó0øÿÿPð†üä¬ALcõ•dˆ z ¥^|Fn)™ÇBV_}"(.½Hm—gþˆh_ÁU­ÞŠ QÏJì<HHvºÓj­ó…U «K“2ÀÅ„ ÈHÃê +-TŽ«”&´åô‘£š êz©_\—”¥¥Åƒ¦ïüR@ÔQŸ”‘±#™…¦cªF í(Y¤Pÿ´·Š%‚c­!°UèpTž¾3)h÷,ü½²!Øù©ÛÙ‘lÓ3ŸÅíÎÎV4@;¼ù6›’dzø¿Ð]¾œ» +-8n?‡ŸÌ¾$–„eê‚ÞFþ‹ëºµÀ–XÓ'½×Ð{"* è]ZDO~§Fú4Æx5”Ѧ,,XãÙ ôèysy4Œ ÿ€Ÿ¨à³RøÿÿP§éæ€ÜÞ/Œ+,i²`þ]X›ç¦™Y¹Þ㻿‰&íeä…y^ªÌþ1ž°2ǶÏعD-Žœ#„ÌšH÷0'§5Î[^«C6‹³½Û=Ìí9-3O–§wjÐ]£ÄlùŠEœž\FÀ²¼žŒ(ñ}d˜ÝkOcqÊi`3Ú/ž¯;ѪcZæѪ93zÒ:´×“ïy{F52Yÿ¬9ÐÌ6½¦õx{jò§AÅX[ò]{–±Üì÷³Ý»^Æ–f¦Ü52¬Hžeqè”Û?< ÿ€¡¨à€ó0øÿÿ¿Aà†.pn›s +-§ZMBÖn&åØä¸çܦ6ãÔŽ´¤˜€lÎÇ¿éqÏéÍsÆ©WhI.ÁÙ.8/§Ç=g8ç§^›%§„h»p>¾N{Nrþ3N½*K6 Ñvᬼœ6÷™ä\h™zU–TPÛ%3ôo +-Ýg’s¡eêõX2H¸¶KfèåºÏ<çEËÔ+±$Ž m—ÌÐ×)tŸ©Î‘–©!Ã’2¸E2C§Í=g;G§F€%S„q‹d†~O›{Nx¾4N]ôJ‚é¶àÜ| *÷ŸöœÓ>µ +y!¼[só„ªÜæó¨}jáVÒA·çæU¹ÿäçTûÔök2|‰çܼ¢PîþóÕ?|Y™’ùÅüÿ€ ¨à€ó0øÿÿ_ ÀÅ+t«ôœå<ÄÂç3ìS¹ì¹X¹?9–)‹=Qi>¹¨HÍ fe³B¢|R#{Qix2¢Š‚k•fý©y£\öD¥éÉ¢JÔ.>Øz,ª3EÑì•VóÉKEG]*ËWè‡ +-Ú­†*U1ºØ¦”+âOÓ e´'ZMUUârq¥ ×ãO¬ùIjO´šU.*:äI¯¸Ÿd‡§¯½h5T™¨rÂÅ%^á~Ö^'µ½ÏjÚò§‹ ¼sÚMNp{ŸÕÜòOÑñ Ê~ÅÅÉ÷7õí9«!Ì8UÌ-Ö'ýŠ8“x6 îqVS˜9•8[L'ö8qoÜãÄæ™sŠ¶ÀMYÜLÄ7#üW?| ÿ€£¨à€ó0øÿÿ_ƒ¤{u7ÚûMhi O¶$1†Ì'æ˜Ì8“êÑ)d&³“g +-‰³†Ù¦KdŠ\€z™Ép²L%qcà`¶©3å-£^f2;y¦ˆ1 ˜mºDf¦°…©—™ 'ËT +ðåPm˜Iªj=õ8™ÙÉ9ƒ3y©dÆêYªzœÌp2Neða€]&Õƒ™¼JÖV“™œSd˜™ËHÝ 3YÃÖãd'ãTÆåS ˜I­^õ8™ÙÉ9„Y·ìÔ2Ãu+m=Nf8§P0p-ŸjÀLvÅÊ\“™œSØ ÌDKªÞŽS^Wµë}>£“?uµáe±Õ¦qú‹ª|½Ïgtò§®Æ/\,¶Ú4N +-‹ª`ïóü©«å Ó@ú?< €ž¨à€ó0øÿ?@àNd0 BA’Žk.NöBÈOªÐ¥‘Ú衽'C²{&{1ä“*i‚lôPÈëg¡ä½É^Y“Ò³hä5ºçdø¥øžI`$ù¤ÚšÀ }srÿG(oHvRnþŒ¤FCßœŒ ” g˜H6©mò ˜fCÛ˜T!T¡7 Ì$ŸT˜9“FC¢aXÒ0 +-Òзf’YŠJ›ÉžáÑ*&±2Ñ·f’YŠÊ™É›áÑ*&áÉè[3É,E%ÌdÌðh“ˆL€|ô-‡™d–B²ere4 –”ü¯"ýLc ùLý¨2(™*õ±¥•ó¥'Ó˜I–)OF?æJy°ó¼ˆéYãÉ-Õ#ÉtƤR˜ðg?Œ ÿ€¦¨à€ó0øÿÿdcz\Ƚ±Dƒ^RØè +-ר¹{óÓó—r(¶YÅô6ºÆ7j.ÞpóüÒÜŠB»£žÞFWÆ8j[7<‹ÉFc¤ÑQRoc,m|£ÎÄ ûÎ2 é´8zê…¤åƒT·ùÚyM0ƒm¶zAÒÒÆC*ÌÚðë\SØl+£³^HZÞ8H…A›O×£1Þ¾(¯·‘–<¾Q[ʆG§›¶†ô.úë…¼eƒTU°ùË™N* +.‹ +-{'uÉã'õ´k8rÞéiHËMQdï¤.{ܤžjÍ/Îw:²èš¨³wR—<~RO¯† 瞆tݽöBêrÈA*)Õü߬'“iGDµ½“½ò“5œ7õièIàùPpïd/‡Ü¤†:Í aZüT ÿ€œ¨à€ó0øÿÿw@0$:åœóê&DÛ±s¯Y–yÅ¢”pju‚‡úØå…RLŸúE™aÕréä $KYç—¾ö5Š2†iTË¢“-d,Uäy.mèo†5ªËŸÓ"H—(ÚÌ,}ö+ŠÒÃ*JdÎyzd‘+Ö–6îo,…‡5ªE˜Ó +-BI‹4šH+èkD…Ä6 +-¡Êù¢I…5*ê)ê7¢¢Ä7j!É +-Ê…*‚ØP +-×oDE‰oÔB” U„ÛMŠÛWDÅŠWÔBŒú” U„ÞJŠÞWDÅŠWÔ?‰ñ“•û©È`’ ¯q•+¾QðNЧ,áѸáÄAÒ•+RåN‰\š«QÆiFO£+b|£Îõ›xo ‹T +-€š¨à¡'¢Äõ8@ @ A7ACÀ0 DÀÅœx5ÿRrrè^ÓézôAòÍÇÏt>´ÏàáÁ=¨7ˆï=XÂ}¯z‰yÆ/ú `"¸×Ä®–½K€ÙÂC¦ %±¾?–ðèõOê4Î*BR?Àøúº‡‡£Ù ì· ÿÐcl4ÜÇãÞ8 û­±v-¯5R еQˆõ´mƒ´ý€ ´ç©Ò +-)Gž¼6d&dt%òu?øÜÿ€…¨à ƒÊ.qøÿÿ@9.€¿º’ÖóGÄÁEIËÄuµçÊÕ´XC¼kFÖ®z~æ]ÙæuS*¢U<ÙñTóù’jéù¢w¢ƒ²øìè5]eAƒ¯Ýºv°“'²L^5=•Ûojëðm$uüŽ$cÙ•e1=1ÍÇ–"—‘Í0¸åz7};9K~h-Ȧ±1òµ‹e9eãÇi>*ÛcRûò*ó<öl†ÀzªcZØ*´ìOw³û‡7´Få6Û&/»î­ê ­ˆddF/_ cH(ÿi¾Ð>ÓŒØÄaŒæ5Ò,†õ¶ööaí‹ H‹‘º¦ +-Á&AßÙšâ?²­#ïJ +-×`“0úŸ›[`(ÿ ÿ€„¨à0Ênøÿ@à +-•aðzè%$"Á¤fH#ö†7›œó EÅ*Ñ¢ç) ªÏë Ž©Ìs4îEzà±”è6ž–œ–ÈŸ‘H8 ¥*“ źâ$JúÒ0yiÈ !Pö¬ÓÕü‘\Á“„ÿi¨à ËcáøÿÿO00z›|‡¯*×E-®Ý¶Îyë·^±&6ìý¦èŵhxß0¿º;ô¼<# k«íª£ˆUL™< ±¨Å¨#L1±hùgÆšv.Y{p _ ‹,i£ä*•UÚ¡Tp¯²¢Õ‡ Xa}®B/ÄÙgA«ù6m#Z;’…‚ˆh©õì·Ñ kÕ/5k-gµÙ¢X°E‡ÆH?[Íê­•æÔÖÐØ; +-lm1›¡–ªåV j“A8¿µ,8Úh+\ô ŒI‚ g²€g<ãÚß:æ”ËfœÈN«?¨Ê\ÿd¨àËN…øþ„Ìä‹>»+TDKÝ]‘¿"]´tºfkûäGljôOŠ‰›FWmáPéâîÐÎì°粘M¤4íSì–ãGÚ~Â\LJ çãú¯î¤(W€1ÔšŠé@¾fíÀT+¤XõY þåv€«—ñaV«h=€¦îZ!®Ìšúª®vÀ«>²7ŽPý¡•ÏÝ`›å2­¾mLEluQWЩ¨e·™€å‚ZAæ˜MæËzÛn?K+OD"{Cä[kûÑ׫ÈÕk“Âɲ…×Ù>îUa ðìÿQ¨àPeÉ8øÿÿ_ÔÒ‚s„5JÀk?¤°ŠÃž…¸ê¸Ükl°¾„ 9Ö®¹×õª:öZõ1ÖÓã°ÉÁZšÞ¨Æ_Ï%S¨áÂTø¸è=oG!ˆz®¢(uÞœ­fž<„¼@T£YO”í5C“Œˆw¸‡è|ëŽRa[šnXê¨w;ï êwRªL¦T5“6²Ý1:p}_=J+,«kRI²›$¬”ÒÜöB 7ŠÒê6†T?Äÿ:‹ý*=Týƒ´ +-^ÿp)=`ý¶ +-aÿà(=Tý¹ +-^ÿP(=`ýƒº +-aÿÀ'=Týƒ½ +-^ÿ0'=`ý¿ +-aÿ &=Tý‚ +-¼þ!LzÀú„ý–ô€õ*ðú)é¡ê@TàõIÒÖ?˜¨ 쀤‡ªQ×?ÜHXÿ€£‚°p‘ªþH^ÿàZÿ +-Üÿ<Äð¡ê„Tðú‡“éëTûé¡ê¨Tû‰é¡êÀTðú‡„éëÌTû€é¡êäTðú‡{é¡êöTû‡uéëUûqé¡ê Uðú‡léë,Uûhé¡êDUðú‡céëPUû_é¡êhUûYé¡ê€Uðú‡TéëŒUV¯Ôÿ<8 +-F„ýÃðôPõ/ +-ÂþávzÀúaÿà:=Tý‘‚°ªþJ×?dNUÿ¥ 짬Sö„ÓCÕ?¸)û¼é¡êôxýÃÛôPõ*„ýÃØô€õ *„ýƒÖôPõ*„ýƒÓôPõ$*xýCÑô€õ**„ýÏôPõ6*„ýšü+|:-õ¡êÂþ¡Œz¨úÂþ!‹z¨úÂþ¡‰z¨ú‡%„ýCõPõ9!ìj¨‡ª¨aÿB=TýC¢öÔCÕ?ÔaÿA=TýCH!ì +-¨¬P)„ýÿôPõ6…°€ŸªþA@AØ?OUÿà  ì°§‡ªÐPàõÏÓC¦ÿŒÿ; ðõCw<°G=$À‡RXÈ£úÿ!Ö.äQîÿì y¤ñ`ö…<êaú¶}`!z8þ‡s?¸G=àþƒ½XÈ£XÿAàò¨Ðpø…<êò4~`!z(ü‡”=°G=äýCÍ,äQmÿô y${ûÖÿ‡¦g†Âþè\\;ÖðA>÷ÀBõ° ¦ûàBõ ÊûàBõ  è{`!zX…~p!zà„~p!zP„$>°G=ìÁ‡XÈ£ÞàÃ\È£Ààƒ“,äQQð¡Ë.äQBðÍò¨‡ø°çò¨ø è yÔ|ØP]dÿ<˜*˜å yÔƒy|@æƒ yÔu|Ðæƒ yÔÃo|xçƒ yÔCk|è yÔf|°èƒ yÔƒa|@éƒ yÔ]|Ðéƒ yÔƒX|`êƒ yÔT|ðêƒ yÔƒO|€ëƒ yÔK|ìƒ yÔƒF| ì…<êa!>ŒöÁ…<ê!>ÔöÁ…ÏùWDÿ:nóÁi>€­à€<êf>ø­°AõP12Wp@õ /hWØ zø–Ï+lG=ˇó6È£^åÃÿ +-äQ—òá‚0äQòá…0äQgòáˆ0äQRò‹.äQ=ò!Ž0äQ%ò!‘0äQòÁ“.äQ_ÿWLÿ:'ñ!zÈ®U +-6!zÈ«5*x zp©€*0G=ÈÓ^È£x郼 +- +-äQŒôAD äQbôI äQ8ôÁNäQô¡SäQíó!XäQÉó¡\äQ¨óÁ`äQ‡óádäQió¡hÄ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDýÿÍ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿlÿEÇËlq®„²Ä 4C"!"#3C µ™ÙÝáÿç NffþÿïîH1f +-)—ê +-bC„r©®P.Õ¥R@¨ñiØ;pƒ"2`9.KR¥Æ(rÂL8;17Ý  /éÈc\^Ѽ LUáæg4Ñ©Nr]Bìj™] ˆ¼4Ì‹f\ÑÞû–ª‚¢ìœŠpÊYS*ÆT”Îâ.MDxøÊx#R4Õ%*vC#càŒåìM  !!!!"""""#""""!!!!  !!""#$$%%&''(())**+++,,,---.../....---,,,++**)))(''&&%%$##"!!    !&'())*+,-../00122344566778899::;;<<<===>===<<<;;;::9988776554432110/..-,++*)('&&%$#"  !"/0123456789:;<=>>?@ABBCDEEFGGHIIJJKKLLLMMNNNONNNMMMLLKKJJIIHHGFFEDDCBAA@ +-endstream endobj 25 0 obj <>stream +-?>=<;:99876543210/-, +- +-  *+,-/01345689:;=>?@ACDEFGHIJKLMNOPQRSTUUVWXXYZZ[\\]]^^__```aaaaba``__^^]]\\[[ZYYXWWVUTSRQQPONMLKJIGFEDCBA98764321/.-()*,-/0235679:<=?@BCEFHIJLMOPQSTUVXYZ[\]_`abcdeefghijkklmmnooppqqrssstttuuuuuvutttssrrqqpponnmllkjiihgfedcba`_^]\ZYXWVTSRPONLKJHGEDBA@><;:875421/.,+*('%$#! !"$%'(*+-.023578:<=?ABDFGIKLNPQSUVXY[\^_abdefhijlmnpqrstuvwxyz{|}~~€‚‚ƒ„„……††‡‡ˆˆˆ‰ˆˆˆ‡‡‡††……„ƒƒ‚‚€~}|{zzyxwvusrqponlkjhgfdca`^]\ZXWUTRPOMKJHFEC976421/-,*)'&$#!  &')+-.024579;=?ACDFHJLNPRSUWY[]^`bdegiklnpqstvwyz{}~‚ƒ„…‡ˆ‰Š‹ŒŽ‘’“””•––——˜˜™™šš››œœœœœœœœ›››šš™™˜˜—––••”“’’‘ŽŒ‹Š‰ˆ‡†…„‚€}|{yxvusrpomkjhfeca_]\ZXVTRQOMKIGECB@><:86431/-+*(&% "$%')+-/1246EGIKMPRTVXZ\^`bdfhjlnprtuwy{|~€‚ƒ…†ˆ‰‹ŒŽ‘’“”–—˜™š›œžŸ ¡¢£¤¤¥¦¦§¨¨©ªª««¬¬­­­®®®¯¯¯¯¯°¯®®®­­¬¬««ªª©©¨§§¦¥¥¤£¢¡¡ Ÿžœ›š™—–•”’‘ŽŒŠ‰‡†„‚}|zxvtsqomkig[YWUSQNLJHFDB@>;975320.,!"$&(*,.0BDFHKMORTVY[]kmoqsuxz|~€‚„…‡‰‹Ž’”•—˜š›ž ¡¢¤¥¦§©ª«¬­®¯°±²²³´µ¶¶·¸¸¹¹ºº»»¼¼½½¾¾¾¿¿¿À¿¿¿¿¾¾½½½¼¼»»ºº¹¸¸··¶µ´´³²±°¯®­¬«ª©¨¦¥¤£¢ Ÿžœ›™˜–”“‘ŽŒŠˆ†„ƒ}{ywtrpnljgeca^\ZWUSPNLIGEC5)'%#" /1368:=?ADFIKNPSUXZ]_bdgilnpsuwz|~ƒ‘“•—™›œž ¢£¥§¨ª«¬®¯°²³´¶·¸¹º»¼½¾¿ÀÁÁÂÃÄÄÅÆÆÇÈÈÈÉÉÊÊËËÌÌÍÍÍÎÎÎÎÏÎÎÎÎÍÍÍÌÌËËËÊÊÉÉÈÈÇÇÆÅÅÄÃÂÂÁÀ¿¾½¼»º¹¸·¶µ´²±°¯­¬ª©§¦¤¢¡Ÿœš˜–”’‚€}{yvtromjhec`^[YVTQOLJGE420.,)' ;=@BEHJMPRUXZ]`behkmpruxz}‚„†‰‹’”–˜›Ÿ¡£¤¦¨ª¬­¯°²´µ·¸º»¼¾¿ÀÁÂÃÅÆÇÈÉÊÊËÌÍÎÏÏÐÑÑÒÓÓÔÔÕÕÖÖÖ××ØØØÙÙÙÚÚÚÛÜÛÚÚÚÚÙÙÙØØØ××ÖÖÕÕÔÔÓÓÒÒÑÐÐÏÎÍÍÌËÊÉÈÇÆÅÄÃÂÁÀ¾½¼º¹·¶´³±°®¬«©§¥£¢ žœš˜•“‘ŒŠˆ…ƒ€~{yvtqnlifda^\YVSQNKIFDA><97520!!#%'),.1358;=@CEHKNPSVY\_behjmpsvy{~ƒ†‰‹Ž“•—šœž¡£¥§©«­¯±³´¶¸º»½¾ÀÁÃÄÅÇÈÉÊÌÍÎÏÐÑÒÓÔÕÕÖ×ØØÙÚÚÛÜÜÝÞÞßßßààáááâââãããääääåååååæååååääääããããâââááàààßßÞÞÝÝÜÛÛÚÚÙØ×ÖÖÕÔÓÒÑÐÏÎÇÆÅÃÂÀ¿µ´²°®¬ª¨¦¤¢Ÿ›™–”‘ŒŠ‡…‚}zwtqolifc`]ZXUROLJG42/-+(&$" &(*-/247:;8630.+)'%&(+-0258;>ADGJMPSVYpsvy|ƒ†Ÿ¢¥§ª¬®±³µ·¹»½¿ÁÃÅÇÈÊÓÔÕ×ØÙÚÛÜÝÞßàáâããäåææêïïïððððñññññòóôóòññññððððïïïîîîííêêæååäãâááàßÞÝÜÛÚØ×ÖÕÓÒÑÏÎÌËÉÈÆÄÂÀ¾¯­«¨¦£¡ž›˜–“Š‡„~{xuqnkhTQNKHEB?<9641!#%(*HKNQUX[_beilosvy}€ƒ†Š“–™œŸ¢¤§ª¬¯²´¶ÉËÍÎÐÑÓÔÖ×ÙÚÛÜäååæçìôôôôõõõõö÷ø÷öõõõõôôôôóóóòòòïïççæÙØ×ÕÔÒÑÏÍÌÊ·µ³°®«¨¦£ š—”‘Ž‹ˆ…‚~{xtqnjgd`]ZVSPLIFC@=:7$"   "%'*,/EHKORVY]`dgknruy|”—š £¦©«®±³¶¹»½ÀÂÄÆÈÊÌÎÐÒÓÕ×ØÙæçèòòóóùúûúùööööññððïîîíììëêééèßÞÝÛÚÙ×ÕÔÒÐÏÍËÉÇÅÃÁ¿¼º·µ²¯­ª§¤¡ž›˜•’Ž‹ˆ…~zwsplieb^[WTPMJ+(&#!!$&),.147:>ADZ]adhlosw{~‚…‰Œ“–¬¯²µ·º¼¿ÁÔÖ×ìííîòòüýüûúùùùùôôïïîíìëëêØ×ÕÓÑÂÀ¾»¹¶¥¢ž›˜•‘ŽŠ‡ƒ€|yuqnjfc_\XTQMJFC?<9630-* -0369=@CGJNRUY]aeilptx{ƒ‡ŠŽ’•™œŸ¸»½ÀÂÅÇÉÌÎÐÒÔÖØÙÛÝÞàáâäåæçïððþýüûúññäãâàßÝÜÈÆÄÁ¿¼¹¶³±š—“Œˆ…}zvrnkgc_[WTPLIEB>;841.+)&#!  #&(+.148;>BEIMQTX\`dhlptx|€„‡‹“–š¡¤¨«®±´·º½ÀÂÅÈÊÌÏÑÓÕ×ÙÚÜÞßèéêëìíîïðññòóó÷÷÷üÿþýüòòàßÝÛÚØÖÔÒÐÍËÉÆÄÁ¾¼¹¶³°­©¦£Ÿœ˜”‘‰†‚~zvrnjfb^ZVROKGD@=$"!#&),/269<@CGKOSW[_cgkosw{ƒ‡‹“—›ž¢¥©¬°³¶¹¼¿ÂÄÇÊÌÎÛÝÞàâãñíìëáßÞÜÏÍËÈÆÃÀ¾»¸´±®ª§£ œ™•‘‰…}yuqmiea]YUQM741-*(% 36:=AEIMPTX]aeimrvz~‚¦©­°ÃÆÉËÎÐÒßàâäåçèéþóòìëêéçæåãáàÑÏÍÊÇÅ¿¼¸µ²¯«¨¤ €|xtpVRNJGC?;851.+ ),037:RVZ^bgkotx|…‰’–šž¢¥»¾ÁÄÇÉÌÏÑÔÖØÚÜøøýþþôïîíìêéÝÛÙ×ÕÓÐÍËÈÅ¿¼¹¶²¯«§¤ œ˜”‹‡ƒzvrmie`\XTPKHD@<   36:>BFJNRW[_dhmqvz~ƒ‡‹”˜œ ¤¨¬°³·º¾ÁÄÇÊÍÏÒÔ×ÙÛÝßáãåæôýþøõõìëêèçåäâÕÓÐε²®ª¦¢žš–’Ž‰…|xsojfb]YUPL41.*'$!"%(+/2SW[`dinrw{€„£§«®²¶¹½ÀÃÜÞéêôüüüü÷÷ÚØÖÓÑ»¸´°­©¥¡‚~yupkgb^0-*&#!!$'*.159=AEINRW[`einsw|…Š“´¸¼¿ÂÆÉÌæþúúúëêèæåÐÍÊÇÄÁ½º¶²®«¦¢žš•‘Œˆƒzuplgb^YTPKGC?;730,)&"  -048<@DIMRVsx|†‹”™¡¦ª®²¶º½ÁÄÈËÎÑÓÖÙÛÝëýþÿûùïîíãáßÜÚ×ÕÒÏÌÉƬ¨¤Ÿ›–’‰„]XTOKFB>:62.+($! ?CGLPUZ_dimrw|†‹”™ž¢¦«¯³·»ÕØÚúùøø÷ööðæäâàÞÛÙÖÔÑÎËÇÄÀ½¹µ±­©¤ œ—kfa\WSNJEA=851-*&#  FJOTX]bglq§«¯´¸¼¿ÃÇÊÍÑÓÖåçèûþÿúúùùïîìëéçæäÕÒÏÌÈÅÁ¾º¶²®©¥ˆƒ~ytoje`[VQMH/ +-!$'+/37;?DHMRW\afkpuz…Š”™ÀÄÇËÎÑÔ×ÚÝßáäæèéëíîûöñðïíìêèçåâàÞÛØÖÓÐÌÉƤ ›–‘Œ‡‚}xsmhc^YTOKFA=951-)&""%),048=AFKOTY_dinsy~ƒˆ“˜¡¦àâäæüÿéçåãáÞÜÙÖÓÐͱ­¨¤Ÿš•‹†{vqlfa\WRMHD?;62.+'$*.26:?C‡Œ‘–› ¥ª®³·ÒÕØÛÝàâåçéëìùÿøæäáßÜÙ×¹µ±¬§£ž™”‰„ytoid_YTOJFA<840,(%! +-  @EJOTY^dioty„Š”šŸ¤©­²¶»¿ÃÇËÎÑãíîðñþÅÁ½¹´°«¦¡œ—’‡‚|wVQLGB>%"!$(PV[`fkqv|‚‡’—¢§¬°µ¹¾ÂÆÊÍùùÿóòñïîÏÌÈÄÀ¼·³®©¤Ÿš•Š„ytnic^XSNID?:62-*&!%(,059>]bhmsy~„Š•šŸ¤ª®³¸¼ÁÅÉÌÐþãáÞÛØÕÒÎËÇÿº¶±¬§¢—’Œ‡{vpje_ZTOJE@;72.*&#)-15:>CINSu{€†Œ‘—œ¢§¬±¶º¿ÃÇËÏÒÖÙÜßâäþåãàÞÛ×ÔÑÍÉÅÁ½¸³¯ª¤Ÿš”Ž‰ƒ}xrlfa[VPKFA<73/ 6:?DIOTZ_eˆŽ“™ž¤©®³¸½ÁÅÉÍÑÔØÛÞáãæèêìÿýóëéçåâàÝÚÖÓϦ¡œ–‹…ysnhb\WQLFA<83/+'# ;?EJOUZ`flrx~„‰•› ¦«°µÓÖêìîïñòôóòðïíëéæä¼·²­¨£˜’Œ†€{uoic]WRLGB= +- !%)-16:?EJPU[agmsy…‹‘–œ¢§­²·¼ÀÅÉÍÑÕØÛÞáäæóñðî¾¹´¯ª¤Ÿ™“Žˆ‚|voic]X +- !$(,15:?DJO€†Œ’˜£¨®³¸½ÂÆÝàãåüüüòñÔÐÌÈÄ¿»¶±«¦ š”‰‚|vpjd^XRM.*&"   $(,0tzž¤ª¯´¹¾ÃÇÌÐÔ×úâßÜÙÕÒÎÊÅÁ¼·²¬§¡›•‰ƒ}LGA<7 #'+049?DItz€†“™Ÿ¥ª°µº¿ÄÈÍÑÕØÜßâåçþÿƽ¸²­§¢œ–‰ƒ}wLFA<72-)%! "&*/38>CINTZ`gms«°¶»ÀÅÉÍÒÕôÿƒ¨²»)ƒŒ# ´M‚ 0€`dTö€0©,r”BÆd@@ƒ€%´pG×w;ž q­;fÁRwlYCïÀ”ƒ34ßuìŒ?~ç¼Á©vÛ؈p»üÓ¤>Ž¸Ó*wlºá»ÔÎÒÍž_¿Ûäq*K•;5&ƒc€»ØŇîÆPnWK,·¹Ñh’Ö»Íï)üîM¹¹º À_Ý­€rž ¦eGÆcLFv;Ñݸ)Ã"ð–;j*èŒ=<¶ßEkòŒÇß­HRÊú·ãS) ¸K˜œ´L ð~×Sž±ýî>#rW|r§öH ŠÉàp÷¨»½zÁÕ9³:í8ÃëŒÇïœÊÀ ¶’[ɶÜM‘Û¿'#s¹ènêÝNœ‘?€wèpŸ¼ÛßÙi‚_ÓFó+WµlX2^8“ºk&Â!—êÜžzÕ¹¾³‚§Ùg…7gŠC³µÊñe»…¬Š¶C¹ã…“¡Œ»ÏM†±»Þâ‰3Ô.ïu‚çæÕƒ¿ã^fŽÁêƒA1wá·kÀm'ÃÝk燬¡ÿúÝ¿g¬¼äÏ0 +-N:ߎ®,ŸöÒíÄÝÓ¹sª“«»å<´ºÑSM/R|—œàÕ€7c\xç_é?j;š¹Åí&ÿÛ™LFép'y2ÞNCw ¿‡ÝwìèñJð$þŒ<“ZA<_UŒ»U»‰dÀÊܵœ Ýåí:ŽÁÓžRð¤Ã3z|—†¬GÛÏ×NmsÇâd`èµïÊwÒ~÷ožñ¡à!äïN>hl<$Ô´¬™NK&»‚;'À]š;ÞdüáÎ HדQéî2ðud¤} ÞÀ˜ÂH¼/¼%è3MÔ_¦ô =lç«íwí®·s› \àn2”ÃÝ€ZÞ0øL‚‡¯€—ùA*4¬"3¼y;‰­8eÖ|i·ó} î^„;Ty»\™ L'µDþzÏ5ºIC~Wቅho•ÂÂHñ…k°„JízCù1Ê#îDÜv»·ëµÛźû$¡kýî¬ÓH !xç¼ó„—¼nà¡`ð’oÿ‡á#f¹è±Ó˜Ú]ò1>2îÁFp;õs‡j2bÏ莅îwTWCoðŠ Ï‹á™Ä Þi¼ Qš³G[£Eȱ´]ÞÓÈÎnéNkÇ’ÜÉiH§Q„ƒ·tðD‰Ç2<¹xÚL<«ù x[ö‡obËnî×®Ú°·+åÚé(îfB2\RÉPwžÏ8€‚ýϘlÂC{xî>ë«âÏì­ûUñyûí¹È3šÝ´v\ÂvãÝŽÇlWƸ“LtîÄÂ9ŠÔš_`cÞ‹ðÞ O‚ÂÛ xÍxàñŒ“gñzqç¹ ±ãvv“ÚAÛyOÚ¤n}»E‘ú0Ü Õ‘´<+¨/AÅCG×&/œ‘ÅêyEê gC8#Ùu@;<¶SMÛ)©cAò;u×ñ˜b¿£œÁk‚xgñ(*}<3yæŽÚïÄ>%Ñd 묲óqvv°ì¸Û1Ûíœgçî_>O ø <«¿Cáý'Þ±x2·y€ò€2O3.E…„Ï):¥oÝÖ)ì&ÄŽW°{ÐŽ«ÚÙ€íèïva‡;æ.ߤàõ}†x¹gÔQ +-oŽ0(ç•ê%7ÏŒÄóƒ,:ëéöZ‡Äî*Ù!Á´SåíÊî\̽Lò|V^}ºŸñ¼ /ÃÅŽ·yByO˜'ô”i¨D2»tŽê‚ÖáƒÝae§Pkçv¸‹ä>¢QüèQ2⦒àIÔð3è á ‚€÷Þái.Åkw]¨gîƪX-T¡#žÎìËI³sºíä}»În»1‚ €Ü\úèfâ3nž^óqxzy‡Ò<°@ÓÈþpùí:G±«àœêv&HF´1½ ß– +-ï÷†È#œËs€îàk÷Û唜¯„§ªëàÕÏ‘Oðíb_»Ñ Ûuj;ZŒú¢Nu¼¼ 1&yYx"üã𨖳3Ýír‘™wg£„g*¬'bx‹…GD™áå§!D-íªo»ê·ÜIc>!#‘»æ”ª^~^Jˆ79¼ò`Zµóz»`ÚEánŠÔï¨à=ï§EãgŽx2×8†íðiW¥vŸk‡©Éâ3µ]ž ÞàxrÕ6–¦ìÎ~;RÜJá‘)N<ßœâyñw@#»¿œ9íµ#Y»fC xð¤¼àáÞ,i´;Ÿƒ¡ Žb]6vÆì\’˜0n;.{  u´“ÿûéçäáÞÛ×ÔÐËǽ¸³­¨vpjc]WQKF@;61-($  .27=BHMSZ`flsy€†ŒÊÎÒÖÚÝàãñóôõþóòðîìêçåâßÜØÔÐÌÇþ¹³®\VPJE?:50+'# +-  $(-16;AFLRX_elry†Œ’Ó×ÚÞáäçéùùøêèÕÐÌȉ‚|uohb[UOIC>94/*&"5:?EKQW]djqx~…‹’˜ÓþÿúôóñïíëèæãàÜÙÕÑ­¨¢›•ˆ{tmg`ZTNHB!%*.OU\bipv}„Š‘˜ž¤ªò鸳­§¡›”Ž‡€ysle_XRLF@;50, $(,16CJPW]dkszˆ–£ª°¶¼ÁÇÌÐÕÙÝàþúúåâßÛ×ÒÎÉľ¹³­¦ ™’aZSMGA;"&+05;AGMTZahpw~…Œ“š¡¨®´ºÀÅÊÏÔØÜàãæóáÞÚÖÑÍȽ·±«¤ž—‰‚zsle^8-28>DJPW^elt{‚‰¾ÄÉÎÓ×ÛßâæéëìêçäàÝÙÕµ¯¨¢›”†~wpib[TMG@! !&*/5:@GMT[bipx†Ž•œ£©°¶¼ÂÇÌÑÖÚÞáåèëíòðîìØÓÏÊÄ¿¹³¬¦Ÿ˜‘Šƒ{tmC=72-(# +- #',17=Cmt{ƒŠ‘™ §­´ºÀÅËÐÔêìïñåâßÛÖÒÍȼ¶°ª£œ•Ž†xpibZSMF@:4/*% ).49?FLSZaª±·½ÃÈöûõóòïíêèäáÀº´­§ ™le^VPIB<61+'" +06ELS[cks{ƒ‹“›£ª±¸¿ÅËÑÖÚßãæêíïîëèåáÝØÓΟ—‡wog_WPHA;4.)$-29?FMU•¥¬³ºèëîðóôöõôñïìéæâÞÚÕÐÊľ·°©¡™‘‰yqh`YQIB<@GOV^fnv‡—Ÿ§®µ¼ÃÉÎÔÙÝâåéìôò𿹲ª£rjbZRKC=60#(.4:AHPW_gpx€‰‘™¡©°·¾ÄÊÐÕðÜØÓÍÇÁ»³¬¥•„|tkc[SL!$)/5;BIQX`iqy‚Š’›¢ª²¹¿ÆÌÑ×Ûõ÷öôòÙÔÏÉüµ®¦Ÿ–Ž†}umd\TME>81,&!70*$ !'-3:AIQZclu~‡™¢ª²ÿûùøöõypg^UME=6/)$  &,29@HQYbkt}Áüûúø÷”‹‚yof]ULD<5/(#  %+18?GPXajs}†˜¡½¶®¥œ”Šxne\TKC<4.("å¨ñ¥‘€`Ð$Á@H!¨€qQ2Èca€"H„É5‘þö»pÌËîœú„?~Ç :b:¢†¿›„$S?(ê»ƒÇ 5¢fHŽ˜¢ºåïF¶¨è{wfN òPšÙ)èwÈr2í’¸ë@Hج±yfúÑß¹…uBSg”;gw@V½ò4õÈCfÕÅax×ï§~6ÕÛkJú»š(Ùøåݹ¸JšßN‘Êœ>‰-GÁÝpH~îlùÒ0°ˆxG}jJ¥ßâŒS*ñ¨35áî`­È€›Ð¾ØªÁäïŒòŽŽ3ê±XÄ],†HN²ÝAFò;ê»w…ÕûèFËÉ 2‚âî%4õïN‡ŒÐZ3ŽÇßÙé]TÄc:S´þâ¥f»Û-HQÖõ8˜ìFïdüN›è¥ËQ‰ÄÝÝÝ5e ¨ŒAV“ßÉ)ŒÞ%óÝTSÊÈ`£½wØîNe“ß}Äì Ò?•‘øx©fwj›š¤áäw¥wxœá.ñHID…G°TaReœFÜ}îîlîÂMÝÅ&Ô z yÇ+Îøä;yè{<¦Æ˜(ªŒ•»+áŸì]úd3^œá VŸù®« w=à*£lîЄ2(8)¿“½ãq†¿Ž¦¿ñ]GŒ×îXŠ]ê”q´»J¦†å((Ò^#4ņï¼ûŽ¹©˜*˜ânHʺ9V 50§°,ÇËwT/w"RFÍîtšÂfÄÃÐM±úA¾“Æå¼Ã] +-n©¯2S܉v§ ”Q½HåwRÕ¼á»N X(°ÀV\ƒÊÊ?CÍWq'ÕÔ»S+°:ôî§z÷ËêÝœ1l)çr'¹p÷F*Þ»û«Ê, rqxÕæÓfHdõà‚õ,´µm7@…ÍÈ8U†L-±;óTÁ£èÿ‰©w?†‹ïUt~)à.èÉtr§PzeˆïN·Àò»lœñ,æ]8ëŸEò³w_íó‘3:_¼¯”RôɘsË$î„v'AV8éÝ:k3þœïâœ!Î,"Í#t^. õK©Ž©ñuq‡V›ºS¤íà –ç»­½{ xìƺá E˜:I™‚¸“Ì–ËâŒB‰ïàÃÿ²ú¬ïš…uwpàŽ³Ë]Ä« Ep'KìÒf€ßy3gHŽë»D š}߀*)¸sÊ@€äŽ«2*v×Æ…ÞÚq†È¬vIßõ…¯îî îHIî"*Cñ·TapÆá»&«wàyu +-Ói©¹1ávUלñαzrðÝÊíÝóz×*ðdB­îF>e‚2Ò Aq§&Vc:ïtë¨e5)ëúÎý=Vw—ߢ2 +-ƒÁèóÎ5ðÝiæŒWœÑ´¾ã»[X´†”¾ÝÖ#t»»D«©cEÚ£¬V±½sa`ÉïŒÚ¨º›Š&wRDÎð´NoQJ ö¥CwÿÀRÇ1õr72|‡w@Y 9<“±xÃBXÒRSÆaÈD3|—dY-59c¡À“™5í¥9‰ïzõ +-H³ +-ugbj»tÑL½“ã…’36­€·ï{eî·ÖíOƪROèNwß.ip·x2ÄJÿSêxiê5gLŽ½[rà ÷»¤^/”OÆ涛½e¥vƒqWPp§cêr·y4‹HÎXÕL€7[ÓüÎ?・TPêÂ_wm¦ 宧³É­ž_'¶ßÉ¿vFk\"“o˜Ô‘¤Ôó_w]êÀ“!Ow¯—3ÖϬ®çÀËòZÏ°lqÕä·TÈ7>FNW`ir|…Ž— ©±¹Ä½µ­¥œ“‰€wmd[RJB:3-'#)/6=EMV_hq{„— ¨±¹ÀÇÎÔÚßãÑËļµ¬¤›’ˆvlcZQIA92,"(.56/(#@HQZcmwŠ”žÕÛàåéìðòõ÷øÿùøöóñîëçâÝØÑËļ´«¢™…|rh^ULD< "(/6>FOXakt~ˆ’ÆÍÔÚßäèìïòôêæáÜ×ÐÊ»²© —ƒyof\SJB:2+% !&-4;DLU_hr|†™£¬ïñôö÷õóðíéåáÛÖÏÈÁ¹°§ž”‹wmcZQH?80*$%+29AJS\foyƒ—¡ª³»ÃÊÑ×üüýìéäàÚÔÎÇ’E=5.("#)07?GPYcmw‹•žÐÖÜáöø÷õÙÓÌŽµ¬£™†KC;3!'.5FOYcmx‚—¡«´½ÅÌÓÚßäùüöôò×ÐÉÁ‡}rh^TKB92*$ %+2:CLU_it~‰“§ØÞãýüõóòóôúóñîêåàÛ¢˜Ž„yodZPG>  +-HQ[epz…š¤­Üþóïíìíîîþìè䔊€uj`VLC;3+NWalv‹– ª³¼ü÷ñëêéèèèäçççèèèééêêëëìõïëçâÝÖÐÈÀ¸¯¥›‘†{q70)" +- 8r|‡’œ¦°¹þ÷íãââáßßÞÞÞÞÝÝÝÝÝÜÜÝÝÝÞÞêëýŽ´«¡—Œ‚w<4-&   -5=ƒ˜¢¬µ¾ÇÎÿèçææåäãÛÚÙÙÔÓÓÓÒÒÒÒÑÑÑÐÐÐÐÏÏÐÐÑÑÒÙâìýþÞØÒʺ±§“ˆJA81*19BKT_is~‰”ž¨²»ÃËÓÙóíÙÆÆÆÅÅÄÄÄÃÃÃÂÂÂÂÁÁÁÀÀÀ½¼¼¼¼½½ÀÀÁÂÂÃÃÄÉÊËÌùâÜÖÏÇ¿¶­£™ŽƒyndYOF '.5>GPZdoz„š¤®·ÀÈÐ×Ýâ翾½½¼¶¶µµ´´´³³³²²²±±±°°°¯¯¯®®­­­¬¬¬¬«¬¬¬­­®®¯°ÉÊÕ×ØâãôôñíéåàÚÓÌÄ»²©Ÿ”Šti_UKB91*#$*2:BLU`ju€‹•ÍÔÚàåÿáàßÞÜÍ»º¹·¶µª£¢¢¢¡¡¡  ŸŸžžž™™™˜˜˜™™ž¥¦¹º¼¾¿ÁÃÄÆÈÚèéêëïìè㮥š…zoe'!!'.6>GQ[ep{†‘›¥¯ðóõâÙØÖÕÓÒо²°¯­¬«©¨§¦¤£¢˜—–•”ŽŽŽŒŒŒ‹‹ŠŠŠ‰‰‰†…‰Š‘’“œž§©«­®°²´¶ÇÉËÍÏÝÞàáãôñîêæáÛÔÍŽ´ª –‹€uk`VLC:2*$ $V`kvŒ—¡«µ¾ÆÎÕÜáæùøðïíæäãáàÒÐÎÌÊÉÇÅù·µ³²°®­«—•”“‘Žƒ‚€~~}}||{{zzyyyxxwwwvvrqrrrssttuv‚ƒ…†‡“•–˜šœž ¢¤¦¨ª­¹¼¾Ýßáâäæçèêëìóôþùø¹°¦œ[QH?HQ[fq|‡’œ§±ºÃËÒñóÿøìêéçåäâáÖÔ½»¹·µ³±¯­«©§¥£¡Ÿž‰‡†„ƒ‚€~|{zyxvutonmlkkjjihhhggffeeeddcccbbb_^___``ablmnoqrtuwxz|}–˜­¯±ÀÂÄÿõ¾µ¬¡—ŒvlaVMC:2+ MWalw‚—¢¬¶¿ÇÏÖÿÿíëèæäâ±®¬ª¨¥£¡Ÿ›ƒwutrqi[[ZYXXWWVVUUTTTSSRRRQQPPPLLLOOP^_`bcefhjwy{}€‚„‡˜š·¹¼¾ÁÃÆÈÊÍÏÑÓÕåç÷ùúûßÙÓËú±§’‡|qf\RH? R\§±»ÄÌÓÙ×ÈÅÃÁ¾¼¹·œš—•’ŽŒ‰‡…ub`_^\[YXWVUTRQPIHGGFFEEDDCCCBBBAAA@@@???<;<>>?MNOQRTUWY}‚Ÿ¢¥¨«­°³¶¸»¾ÀÃÅÈÊÍÐÒù÷õóïìçâÝÖÏÈ¿¶¬¢˜‚wlaWM #*˜£­¶ôñíêåáÝÙÕÑÍʵ³°­«¨¥£Ž‹‰†„|zxvQONMKJIHG@7665554443332221111000001GHJLMOQ^`qsv†•˜›ž¡¤§ª­°²µ¸»¾ÁÄÈËÏÓ×Ûßãèìïóöøúü¨“ˆ|qf\   &\fq|ˆ“¨²»ÄÌÔÚàæêîñôðìèãÝØÓÍÈÿ»·³°urpnkigdb`^CA@?((('''&&&&%%%%$$$$5678:;=?@B|‚…ˆ‹Ž‘¤§ª­±´¸¼ÁÆËÐÕÛàåêïòÿãÝ×ÐÈÀ·­£VLC:1*#1:BLV·ÞöÿüúøôñìçáÛÔÍÇÀº´¯|gdb_][XVTRP=;:8765.-,'&%$$##"""#+,-.01346Nnqtwz}„‡Š‘”—›Ÿ£§¬±·½ÃÊÑØÞäêïóöùûüýôòÌÄ»²¨ž[QG>5-& -5>G¼ÄÍÔÛáæëîöòíçáÚÒʺ²«¤ž˜“‹‡„€nkRA?=<-,! #*+-/PSUX[^adgjmpsˆŒ•› §®¶¾ÆÎÖÝäêðô÷èãÞØÐÉk`VLB91)" )19BKV`kv‚˜£­·ÀÉÑØÞäèíð÷óïéâÚÑÈ¿µ¬£š“Œ†€|wtA?=;975420( GILOgjmquy}ƒˆ–ž§°ºÄÍÖÞæìñõøûüë¼²¨“‡|qf[PF=4-% +- %,4=FPZep|‡’ïûøõñëäÜÓɾ³¨“Šzsnida]ZW-+ 3579<>ACF^bfkpv}…Ž˜£®¹ÄÎØáèîóÿúéäÞØÑvk`UKA80("!(08AKU_jvŒ—¢ØÞäéíîèàÖÌÀ´§›„ypha\WROKHFC@ &()+-/@CFILPTY^elu‰•¡®ºÆÑÛäëñõùûü’‡{peZOE<3,$ +- $+3;864$ +-/1469î.Ò®™’ÃWFÕ;ù/sTÆiºÃƒÇ]×2âîàÝõ½³â]~±]f0á••ºl©aÜd¯;?6}2"Ñòìœz¡e!ÈþÞèî‡Ð'7CW¡QnÑÁÖ€ÅÀGg+J»›Yî Â;*C“–»fOý?Ó"¦S瀞xx»ÔœÚ +-]úÐeJãÆm£[!뎈Kß‚ß €/#*Ñç`)ŽÄC¾CïV]îQ\­²5ÂÐŽ%Ë¥7m…YëðénÑ–;ôIö$ìŽ%7Ó#ÿÇ»Œ^:WbKo©yË©x¡¸hô¸hæ'o,|q6uwàjÑ[Š¤â\5wiÁ¥¹“ô@tp¹ñ¹<´blúVmõ¦‡ò)–0ínù qwr^Ü5Ó]ñðCJeö˨w¨$R[â1´ã³dU®[hµ’ñq™•œE@×ܘ¦©YqäÄŠ+÷*®}Ì-âÖ¬·±lÑV¿ªOÎ2áC‘üQÿb)Äî¦_ê~SgœeeÐ.`zÿ‡®¹Ý5Ñ;I$I«Fƒl IwòÐsKóªèh<3¶ã´¢)\®½÷¹…vhÎÍ;7í­AÖ[KgÊ2z‰ýÚQ1+ç,*fŸRÒÆ’®ÖÏš¼}’Óno>ôȈ ™îôb63(QïhWµ”k¦ì»ïÊÞx´e‘3—“YCµRþõ-¦¡[ Eó¾ K4›9-|gÙETÀ¾bËïmä½S‡ÛÊá—ÞˆÝøV5¾Å»9‰„lÕ£‡ÒŠ˜8Þh§sfþ‡ÄÂDQ-‹y.„tñˆÅt(c-W hæ +-˜™kÚYí§´nN‹+ì'ª„Vaå]ÿ¾SSÍA2`éæ©0bD‚¿;'Þ9þnßî»:ã`ãïœs0™Çt)»~¶±¸Š-‚ç\ì ⊛˴¿[f8)CYº¾n2.ÂœVçI($igw&:ã]ñ;µá·ÎJwÛ‡x[Õy ½[¶j`›a›qßÕy5CH¥ðÃõÿgÊ|1Ï]+åäDÉg„ŠHáŠù®>¨+-U +- N¢ò ÑQZBL§3j¶cL‹{a€É»¿S›ä›Õ|€åÝÞKV•´ô &Áß6.¸åÁ'ŒBÔ\Ñ"ó†V¤ûoBHòÞhKmvÃ0h<\eBíâ/Û # ߧ. ŒY®_žNÍt—1>¡wI@"9 +-¼k™fÐ=u´N–Û¶¼ä!kñïÃ=ªDMù X$Ú6nyå!1ËŸìÚâÏÅ’<5¶gŽ…îLZd˜Næ*´¡™ $ûȇMÁ†¥èAÃö3¸°ŽbüRYÒ©¡g®x©&ªX6ÓwšqÉí»}å¶Í²}…vW »Oü»·M%'ý0LÐg†AÚ†n²~­í&Ê3LZwKþ‰¨„’Å G„„½‚ØZ +-jgægóUEºÃ(ŠÍ´ò ‘ØaÕ[›‘ÿÝyÅßžx®†AÈÑFȱ¼Ì¨çÑÈ +-ÈXpTÜ3Ïè`%zæ cOÞ‚$¯bŠ¤CÉ@bùÈfO›±ÝŽn×xg<¥Ê°ºƒ¿z‰ÔçV]ª”HfàžÉœ"^®;!þãðU“W"òÆ…ùß’XU@ô-œ¿¯UQrf#"™1–^‡ú X¸²/¾Gˆª vtjþÊ’–‚z[µÛf´–wÂ, é¾™ @„CÊ*µÐÀìc˜uJf"(b*êJ(åÛ£$¬"’Âù0ÎÇûuxcU" +-Ãݳ¯ÝVí€e€êÔù¾©©&m‰.Á»õÞ*™Rr“7ñ›N"8``ØiM‘ˆ¯Hd®ŽH‡ŽÈu踅>Þú°ßÄYéø»‰€_çw• þ­`v&‰aPÜA",c}§nŸî†YA"%¸­úôm†íð.ô{×lyŸZnÛGºã &0É¥E ”ÜlÔz4Ë`–eÔ8YFŽÃo¢Öo§êøݼÙõƒˆ± ¯SëÚ§;DSAž[µËmF»¼{,œl2Ù¹ÐoÄwCž×ž<7D!@—œrýpJ℉'¸‡N×Ö± Àì|a ^àTܵ`–QYâŽVWœ…V s›‘gŒ˜¼¼#Ñå4Æ:ŽêRC XŽ„£Öq£¶ÆÚ ­ÚÐ9'¥Sd)ª+K¢5þ@î„ R⌻GÞ©§E¼û)x'B6Þi¾šgÅ«ïÜÅMf·äÜ/¤Ù}ðwÈ +-®ûÜÒ}+Ò­E¿Á©-Eq—b§þªE¼sKÁ»œþÈ;øå,Ék‰â,>NtrQàofY ¿2çšIMM‹»YFüŸ2ÔèNÑ£Uóš6ö"Pñ»öªÈ-G¼KŽ¼NBXʸ<¹£¿ArÜ/mëÔ¥´Åt…"ä6ƒ²jÃß) â<§è'K1µ@OT†¸‘; ’¼bbP†0(bF]6Ã)ïj†Ìf œ÷LiÿPEkr§Ä)C´Ãà)6£€òîÒUûW{çÈÄ©WÊ2ìÆÊî‹Á™Ž†U«¤DŠ^yw(Þɶü-O:Ä]Èœ:8‘;2YÆ>ÝéKÃfP¬Dz yçV3²÷n:¿@=T—8µç"wJUÍiØ ¾•H+ïn"Á¸ûýÙÝ0à1Ha&§>Ë2·6Cµ¼S?W]þïD~$æ-ñÄ5a)ÒÚzÄ ½¤Ë°B4#hF½+Ô •gî Äg¢2¶f‘@™•¤2´ãÔù[BÌŠf\ÿ&R¥½Âê@Š6»Ë>ƒtsj‹ä•8Š3‘âìwýßsM6u›ÜK!‡ÊøqjÇh>\5þÑ\\gxGî^SFüœ:>\5]6‘LùNÐ<5—Ý­©Œ N}Ü5C ‰wí=Š$« «Ìa˜2ˆâKÇpêähØ):”‹t¢'.6?IS^it€‹ÈÐ×þðéàÖ˽¯ ‘‚tg\QIB<73 .159>EMVan{Š™¨·ÄÑÜåíòûÌÄ»±§œ‘…zocXND;2Xcny…œ¦ÿÿÿþþüú÷óîæÝÒÅ·§—‡wh[OD<4/*&$! +-  "%(,18@IUbpŸ¯¾ÌØâêñöùû×ÐÈ¿µ«¡–Šsh] +- \gs~Š• «µãèíðüúöòìäÙÍÀ° ~n^PD90)$  "&-5>JWfv‡˜¨¸ÇÔßèïôøòïëæáÚÓÌú°¦›„xmbW "Valwƒš¥°ºÃËÓÚàþýüùöðêáÖÉ»«™ˆveUG:0'  $+5@N]m‘¢³ÃÐÜæíóÝ×ÏǾ´ªŸ”‰}r,% Zeq|ˆ“Ÿ©´¾ÇÏÖûùõïèßÓƶ¥“o]M?3(  +- $-9FVfx‹®¾ÍÙäìîêåàÚÒ˹¯¤™Ž‚vk`UJA8/(! '.6@IT_ju˜£®¸ÂÊÒÙàåêôîæÜв¡Ž{iWG9,"  '2@O`r…˜ª»Ê×âêñöìèâÜÖÎƽ³©ž’‡{pdYO  :CMXcnz†‘¨²¼ÅÎÕÜâíäÚÍ¿®œ‰vdRB4(  +-"-;J[m€“¦·ÇÔàéðõúùßÙÒÊÁ·­¢—Œ€ti]SH>5-&%,4=GQ\gsŠ–¡¬¶ÀÉÑØßåÿòëãØ˼«˜…r_N>0$  *7FWi|¢´ÄÒÞçïùìçâÜÕÍ…y0!(/8AKU`lxƒš¦°ºçëïþýüúöñêáÖɹ¨•‚n\J:,!  &3BSexŒŸ±ÁÐÜæîôñ« •<3+$#*2;DOYep|ˆ“Ÿª´¾ÇþýüùõðéàÔƶ¥’~kXG7* +- $0?Obuˆœ®¿ÎÚåíó÷õóÓÌù¯¥™Ž‚vj_TI?6.&%-5>HS^iu€ŒÞÒÄ´¢{hUD5(  "./#  )6FXk~’¥¶ÆÔàéðöùôñîêäßØÐȾµªŸ“‡{od +-BLWbnz†’©³½ÇÏüú÷òìäÙ̽¬™†r_M<." '5DVi|£µÅÓßèðõùÚÓ˸®£—‹sh~Š–¡¬·ÁÊÒÙøëãØË»ª—„p]K;,  +-&3CTgzŽ¡³ÄÒÞèïùöôñíèãÝÖÎż±§%,jv‚Žš¥°»ÄÍüú÷òëâ×ʺ©–‚n[I9+  %2ASeyŒ ²ÂÑÝçõòîêåßØÑÈ¿ '/8AKVž©´¾ÇÐØÞ䧔mZH8*  %1@Qdw‹žóð˹g\P#)1:DOZeq~Š–¢­·ÁÊÓÚáæúÕȸ¦“€lYG7* $0?PcvŠ°ÀÏíéãÝÖÎƼ²-%$,4=GR]iuãèíñôöùÿöñêàÕÇ·¥’kXF7)#0>Obu‰œ¯ÀÏÛßÙÑÉcWLB8/' &.7@JUamy…‘ùöðéàÔ~jWF6)/>OatÛåíóçâÛÔrf[OE;2*"9CMYdp}‰•ýƶ¤‘~jWE6(  "/>Natˆ›Å¼±¦›‚vj^SH>4,$35,%]iu‚Žš¦±¼ÆþàÕÇ·¦“kXG?Pbv‰ÚÓÊÁ·¬ ”ˆ{ocWLA?IT`l¿ÈÑÙáÖȸ¦”€lYG8*$1@PcwŠž°ÜÕÍĺ¯£—‹rfZND:0(! ALWco|ˆËÓôëâRdx‹Ÿ±ÂÐÝçþäÞ×ÏƼ²¦›Ž‚ui]QF<!(0‹˜Ýãéûo\JBSey ²Ãùïëæà©ž’…$"*2›§²½ÆÏ×ßåêïòì4öôðìè·¬¡•ˆ|ocWK$,4>HT`lx…’žªµ¿ÉÒðÿL<.!hñîéãÝÖÍĺ¯¤˜‹rf' -6@KVbo{ÂËÔÛ‡t`)6FWjÏƽ²§›Ž‚uh\PE;2)" '/8CMYer~‹—Ö݉vbP?0$YlþþýýëæàÙÒ‘…xk_SH=4+!)1:EP\htŽš¦²½ÆÐØÿçÝбŸŒxeRA2%  +- ,:J[o‚–¨ºÉ ”ˆ{nbUJ?6-%3IUamz‡“ ßÓŵ¤}i#/>N`t‡š­¾ÍÚä¼±¦™€sg[OD90(Wcp}‰–¢®¹ÃÍÕÝãöñêáÕÇ $1@QcvŠåÑȾ´¨œƒvi]QF BMYfrŒ™¥°»ÆÏ×Þÿëâ×ɺ©–ƒo &3BSfyîþâÛÓÊÁ¶«Ÿ’…yl_SH=3+#1:DP[hu‚Ž›§³¾ðòìãÙ̼«M=."(6E´ÅÓÜÕÌø­¡•ˆ{nbVJ? +- ")2i§!ÉjîLà]a5#ãžåÑ›¥Rpº[Ý!‹†+#i« ÆÜé$w«àð«[ï®1ðþËT¤TŸ8ZÆh»2v›»œÝÞÉU=ðÉ™ñ¢äõ™˜Ñþh™ÊA¦¹ÓoqDâˆ$[3Ü"AªÞá¶ð¶ŒòLO $ÞÁ²AB'"Ej†Í»¦ãb)GW“÷œ¢@îB¡e $xËÀ©À»éš!fÕM™FQ½ ßÈÝ°eðüÊ@H!s‡€ "IäÌPòî”05 c*P¹Ù<ûô—¾@îQË°Ì]Í‚!¦Ç5C÷î +-™*Ê°T›½S®;S6²–ñ`îrªz–™¶£fˆ33êšQ@Ÿ Ø»’À†èræ®É©eÕ/Bjì$ˆHÛ¨5Cè„x#RdóÅÇô‘½ $c:^ s&èAeI×2RA@7U·™iº±Ô ÅÁÆÆ¢±w¼/"J,9õ¬+C¬~¹@Hš#PÕê¥Ì€®.'ÖkçÀ1]Sã®ÞµÞ SU†½ZFo•AÆ;[YÂË4šX3Š¬šY3¥Z†óÇðHµŽ»ƒïÀ4±zj¢oÜͯ2V©uê]b2¼ÃÞ-¬«ð-6»Û¶7£ˆ˜š§v¶ŒP`ÚP VÍ(3V©Þ]  +-½+Aí…¶Iíìe HìAZÛ2öV83F0ˆÀ)«Öp#Ò¾ðÜÀŒšÇ»–—±}òÃôxžÑ2V8/@<‡ˆ¹!"AD ?©>kó¹ŸÇçäkT˜Žo1-œîðî’«Î@3ehf^LÌ(¿íÎ +-ïs@y/sKì‡|"Zug¨èbÕ«;"58Œw³­€ÿ˜’¨,‹Þ‰×ÍcŒÙ &þb:ao<ëKƒäµŒæ¼»Ü‘éï*ý›j\$žˆGµ‹ ÚšClîKªsº;5§– wh9ˆÀ»±ê¬éÝ=;лŠ†ÇZ'…’8;@ÌÏ#„EIµf”&ÍY8õ¨­wn†3C~ÁÌ°^ï¤ÀõÏîä ï€xeÃûò +-?äÁre/Í‚$åÏ zÊÙÝÁ( ;ˆ—ÊÐÀSŸk`Õ=‘äw—$((Œ#¿!u•‹Áã†~xj&¿…q-ÁºµãèKœž•³œÃÑA0™”•±O]ˆnj²e¨† 5ƒG$V‰ÀÁ õì®ox1ă"Ÿ-‹ó®Ü2¨Lµ ”uKí¤9Êu:^P,ƒ dt§H©e Bƒ«æG$ÅxÓ»º»ÑïŒxvWkÞe==XzÚœ¨ï^¢¾–™qýƱöÂŽJðýï#·öð¨¹íŽ§ ݱ¦óù²j ìt#Ò¢Ô»«4Ó½¹—‚ž0êvªx.E¥GðˆÁÕ¶]èñç«:”ö¼UÖ¸kKrÓÞEåšÁ 1y´.Ýõ-N­ÑSïrçÒÁBD¦„¸ %2@Qdwªž’…xk^RF<2)!'/9CNZgsŽšìðôöùÊ»ª—„q^L (5DUg{Ž¡³ÃþéãÝ ”‡zm`TH=3*  (0:EP\ivƒ©µ¿ÉÒÚáçþ*8GYkßòïêäÞÖÎĺ¯£–‰|o!kx…’Ÿ«·ÁËÿyf-;K]pêïëåßØÏƼ±¥˜‹~qdWL@6-%"*3=”¡­¸ÃÍÕÓŵ¤‘$1?Patˆ›­¾ðìçàÙÑȽ²§Y +- #+4?JU£¯ºÅÎýüù–‚o]K;-'4CTfy[OD9/'6@KW±¼ÆÐØßæëðóý½¬š‡taO+8GYk~‘¤µÜÔËÁ¶ªž‘„wj]QE:1 +-%-7AMYer€š¦²½ÈÑÙþüúøóíæÜÏÁ±ŸŒ ".4 (0:EQ]jw…’Ÿ¬·ÂÌäÙ;®œŠwdRA3&!-:ÆÔßèïõðìæàÙÐÇcWK@5,$!)1;FR_ly†”¡­¹ÄÍÖþþüÝÑó¢|jW1?O`s†™«ùñíçáÚÑȾ³§šreXLA6-$GS`mzˆ•¢¯ºÅÏ×ðéàÕǸ§•‚o]L<.# (5DTfyŒž°ÀÎÛåŽtfZMB7. "*3>IUao|‰—¤°»ÆÐØàæãØ̽­›‰vcQ ,:IZl’¤µÅÒÞúøƒuh[OC8/ +- Vcp}‹˜¥±½Çñÿ|iWG8* +-…˜ª»ÉÖáê·«Ÿ‘„wi\P#,5Œš¦³¾ÈÒÚáÿõïèßÔǸ§•ƒp^L=/# )6DUÚääÞÖÍø­ “…x0' +- LXes€Ž›¨´¿ÉÓ' üù×Îĺ®¡”‡yl_RF;1( ftœ©µÀÊÑó¢}kYH9&2@Pbt‡þù÷ôðëæàØÏÆ»¯£S%.8BNZhuƒª¶ÁÌÕȹ©—„r`N?1% +8FWi{Ž ±ÁÏÛÐǼ°¤—‰|naTH=2)!&/8CO[iv„‘Ÿ«·ÂÌÖÝòëãÙÍ¿¯žŒygUE6$0=M^p‚•§·ÆÓü½±¥˜Š}obUI +-/9DP\jw…“ ¬¸ÃÍÖÞîçÝÒŵ¥“€n\K< +-)5DTewŠœ­½ÌØâëúÚÒȾ²¦™Œ~pcVJ>4 'kx†”¡®¹ÄÎ×üþêá×ʼ¬šˆ( #.;J[m‘£´ÃÑÜæíüõòîqdWJ?4+#  '0:FR^ly‡•¢®ºÅÏúåÛϲ¢}kZI:-"'4BQcu‡™ªºÉÖàéðúþãÜÓÊÀ´¨›Ž€reXK@5, (mzˆ–£¯»ÆÐÙàöïèßÕȹ©˜…saPA3'"-:IYk}¡±ÁöùÀµ©œseXL@6,${‰—¤°¼òòöñëãÙÍÀ°ŸŽ{iX'3APas…—üõäÝÕÌÁ¶ª‚tfYM )2IVcq~Œš§´¿äàÛÖÒÏÌÊÊËÍÑÕÚàåëïó÷òíåÜÑÄPA3' "-:®¾Ë×áýêåÍÍÍÏÒÖÚØÏź­¡“…wj"*3>JVcq›¨´ÀËÔÜäéîöÖÐËÆ¿¾¾ÀÃÈÍÔõðéá×˾®žŒ{iXI:.# (4APar„òÿþýüûøõÎÉÅÃÁÂÃÆÊÏÔðñìç஡”†xj]PD9/&4>JWdr€Ž›¨µÀËÔþò×ÑÊľ¹µ²±²´¹¾ÅÍÕÜäêðþŶ¦–„raQB4) $.;IYj{ž¯¾ÌüôÎÆÀ»·µµ¶¹½ÃÈÏþìçàÙÐÆ»¯¢”†xk"*4?œ©µÁËÕùåßÙÓÌĽ¶°ª¦¤£¥¨®µ½ÆÐ̾¯ŸŽ|kZJ2' ",8FUev‡˜©¸ÆÓþÜÒǼ±¦•ŒŒ‘–¥®ÜóõèáÚÑ–ˆzl^QEÖÞåÛÕ˜‡€|yy{€ˆ’ª·ÃÏÚäëþÞÓǹªš‰wfVG9-# 3@O^o€‘¢²ÁÎÙþÿÚÐĸ«Ÿ”‹„€~‚‡•ž§±ºÂòíèâKXesª·ÂóðíèÁ¸®¥›‘‡~wqmklpv‹—¥³ÁÎêãÙÎÁ³£“‚q`PB5) $/;IXiy‹›¬»ÈÔÞçþÎÁ´§™ƒztqpsw}…ŽâȽ°¤ÿ³©Ÿ”Š€vngb_^`fnx…“¢±îçßÕɼ­Œ{jZK=1&!+7DSbs„•¥µÃÏÚãÙÍÀ²£•‡{qjecdhmu}‡îèâÚÒȽ±ÃÍÖßæãÞ™Ž„yof^XTRSV]fr€ ¯¿ÌùõñëäÛÐĶ§—†ueUF +- ?M]m~Ÿ¯½ÙÍ¿°¡’ƒuja[XWY^emv´½ÆÎÕÜòîéâÛW}si_VOJGFINVan}Žž¯¿Íôïéá×Ì¿±¡‘€o_PA5)  $/;IWgx‰™©¸ÆÍ¿° €qdZRMLMPV]f¥¯¸ÁÊÒù !×ßÀ¶mbYPHB><=@GQ]k|ž¯¿ÍÚöòíæÝÓǺ«›‹z ",7DSbrƒ“¤³ÁÍØâéýÚÎ`TKEBACHNV_itŠ”ŸöþD 3>g\SJB;6335:BMZj{ŸðêãÚÏõ¦–†ueUG:.$ )4@N]m~Žž®¼ÉÕßçíóíåÛÏÁ²¡}m]PF>978;AHPYcny„š¤¯¹ÂòPD9. dú÷¢laWMD<50,*+/5>JYÂèàÖ˾°¡‘p`QC6+"&1=JYhy‰™©¸ÅôîçÝ~l\NB93//15;BJT^hs~Š•ÏÖÝk^PD8)rïë?70*&$#%*2ûî( ñ[nÆ~Ǯޥlxí€+<äeÀŸèŽ¡ê¡»SIJDWO,\¢Häm_ÃZƒô¢ìð€wÇökù.Ç3 X +-Q½s7d“¯wŽ-1%9þ#º»‡jƇdæîâ¨úrPyc¡Ë¾xl\“¶tglP‚ÞÇ»lÅ. þ+º4ro)¡Ä7ΚIô®ŽAcí"nÉAçk‡=2šÝ„Üô ÅXµ<©ôÅ%:‚î’*ñ~§.ÞìÝ^Àw––ñS½ßíÛ˜\Ædfб »ÑdÆ3ãfCê²¾FÒŸN)`ŒØ7vºƒå‡Š¦8¼KÁrðõ¾[ï»Ô†E3 +- ´+ÎM„ޅlØ6Öp ïžÃf2…!Zò›U:ÌRiÒHð¼ïè>$ö8Ð ó™07É&Ùe«eИbpÄÑËÓ™6S½Ã{½Û^ +-8AºÛߊHòNõI~Îw|š1ën¡çTüŽG½Åàs/ÃûB3ƒx¼óØ¡|#YÀY?£áB Áy‡Ç÷i®ï1θ¡Š˜v Ä”¿Y`Œ»ÕЗQ¢™1J»3iŽ)§ö§Ú7¾•¤mð‡äÎ9wõ%¤"žÚwt ½Í,H›)¨¦EÀv'Šêñ—!á|fôº£Jç®/$®bŒº^ù-/e€"nSÞu¯ãérLßi‚œ¶¹Ò–÷¿gå±à2À/£ÄE3c¿š ¹´ŸdÞ‹Q@Hvâ:S^WÉ|Gjðê(íWn~£8ìröÛcp¯à2ôvÒ©CbYCZ‹_ŠòQn¡!øô^Ì!û•¶¼ÃÂøÙ2gÓw±â +-Г]…’±SFØÆ!ÓC!l}%ÉtF¼S<‰ÈÈaáÈôfXÞÕÐûNÕÀ6ˆç¢¶cmë£-¦Rg† +-Ù"ªÇ UL`p*ð.nãm¿Ìn*%pt®Œ†Äy'À2ÿQ7ßØ¡weYÖ’(Ç)ìnáÝk”N)0ÈsH%·+‚ôÆŽ”[t{Bÿ fðzß_Ò õÖò]±qYnñô¹ÄÁ¼i(˜ng!¥»Ã«eˆDr­4(„wqB ¼ +-³›'é. +-ãZP@º2àÌ»ñ›Ï;hÑîDÓHÔ@œTTW])¯V³»tÍYHºÏÝ,»ÄŒëRM¶9sþ| Äè.þ°#êTä]ÁòªúJÐî`ÛˆæÉlÆÿ(Ò˜N{ªk®#%»qSÖu7¸ÏãÌ»ô|@òþòØ};=vv¼°‘¼«Ÿ¥÷ÝÜ€HÕLcDEˆK¦0¦v´ÆšUàš˜ +-zÃ;ÌS]îrŠ2z-¸—¶3œo#²éäˆÜ¥Ì;®è#é»çÚ]OÔ5(Ö4kÌ;ó. c`£šc»óÈ1¼ÊŒÍÍ!ÓÕ-Ñi+Jíañyê"¼ãx}Þ¥e³Nín¿ÈR:nnLàH£J”áͦd}v7èŠLçÇ!Ídòæ4CUËíæœR‡îîj"Æ2<5Û•!íÞµí}7"U+*•ü{œØí)@Ðéݹ1b[,Cw‘íÎ.^vœ˜¿ŒÛÌw׊m–F~³îmœuh‘ ¦)º2LÎ0(÷cð¼r!°‚\ö)ú¯µË…Ï®©5]óvËg!]ŒCŠBÝÚtUzÒoÍ‹{?ùQTS{žÄõ£¿T}¨—©ªÀl¡wöv>søÿ™oáZ#ØÝe…’{ªÙC¦asY…áÃãAá‘Qž …Â~5Ôê‹É;:C|ßáä3,AW_uŠÿç¼Ñ)\K³;ó¶êw&Øè…-+ty}ù'åÎÞ®ŒfÞ™ï^º!¤î®ÓwBÔ žLk[2XþRÕMÙ©6*ën“½ÔýŸheò3V”»~¼c\â#3ÚÒ-DjMz>c\ ÌPÕ@Nðҗµ¬ìÈ\¤Lqþ)‚w¬ÊGf4HÕU¹LŸpjnï(3ªí2B…jãìT#gtY™Ñ#;…ž”»TòÔòzE¿!àŒÐwó#! 3p`›Ê¯)¶È ² ü@ÈOÕªr\<5 ïJ}¸ãä^¦¤‘膉üÀ fÅ4zÚ~/ÃR¼ 0€¡–¤cŠÓ7õ7ëKÕ?»L‰!’z.•ðï^Bƒ•fu"RC—ÁCv|8у äÓX=`Ðè2ý…HD÷²ûNÛ_fbš fhÚ®)386¦.Ü;–ò³aªý†À*\¦!æœÌ0*ŒDr­%8Xy3 ÃfàÕ]Ž¹s<ô±ie´±_å¼{›ˆ_ÔwÙ(ƒ}‚iúà‹}@ÓéÜ`™d?Eô«æú%¶d½\¦¡Xý—i«ú_¥÷CªÀäDÖ|¶ãmHv׌¬@î^x·1þ.;Žú!ùSõ}uP6ü€Ö¦ê¯JŽ¬ÙË]ÉCÙ]ÊwKEŸš`XÇ#$ªr×É;€ôçîþ.D’¬jFwœÎùêŽdtGLÈn§+€Ý=ôšÎ§VÈt½9¥G„Äzÿ©vB$TÌŒ Su+k`àìMØxãf§¿BžÝ}z‡8GUe§æüÔò“b^\Õi:!;`Šj0ºëæ±;Ç=¦ “êœcü›žOm=,.0â`ðŸƒcf¨vUsOF RFTgêî}ÇîŠ6ÈÕ IéùÔݼSëËPÞõ>t„˜âdF¶fÆ«ãþ¨€‡TsÕz÷˜ÞÅ…öòô2(@¦€Î§~ΰ " Ä8c¦ÓîM#Õx)¦>uz)r à´©n¼;À |jzÁ2hDH4 DjZÍŒûíÎud¨"°’K4‡)úÔûì2ê™j¡¢»ä‹kïnays ¦’¼‹˜˜™aŠ«Ú~»K×½  td!Å~7ŠþŠ f>„fÒ?5>ïTÌxºªmðŽøØ/ÜCv0ïe°¤ú›òÓaüüdê )2=IVdr€ñîéäß‚vk2+&!!'0;IYk~‘øô¶§˜ˆwgXJ=1'  +-",7CQ`p€ ¯½ÊÕÞçíÇ·¦“n\L>3*$! "%*08@IS^hsŠ• ªµ¾ÇÏ×Ý£–‡C8 +-cr€Žœþż³¨žQ"%/;JZ÷óîèà×ÌÀ²£“ƒsdUG:/%!*4@N\l|Œœ«¹ÆÒ܃p^M>2(!!&,4KYhxˆ˜§µÃÏÙâ`N?1'"(07@JS^it‹–¡Ø¼xj\OB (1Oat‡›ïéáÙε§˜‰yj[M@4*!%/:FTbr‘ ¯¼ÉÔÝåìÏÀ°ž‹'JT_ju€ÁÉÑÙÑǼ¯¢”†wi[MA6,# 0;GTao~Œ›¨µÁǾµª •‰~rg +- %æßÖÌÀ²¤•†vgYK>3) %.9ER`o~Ž¬¹ÆÑÛãïçÝÑò z %,43)$-8CP]lz‰—¥³¿ÊÞ×Ј|q!,:K]pƒ—øöòíçà×͵¨šŒ}n`SF: #+5@LYgv„“¡¯¼ÈÒÛãêïôš;DNXco{†’¨³½ÆÏ×ÝäúøõòíçàØÏĸ¬žsdV#,7BO\kyˆ—¥²¾ÊÔÜÕÍÄ»°¦›ƒxlaV†™æÞÖÌÁ´§™‹|n`RLYguƒ’ ®»ÆÑÚâéÿο®œˆuaO>0!'/7@JT_¤¯¹âÿñíçàØÎĸ«€(N[j±¾ÉÓÜþò¬h\0>Oau÷ôðëåÝÕËÀ³¦˜Š|n`S$,6A‘Ÿ­ºÅÐÙâèîþÐÁcQ@1% ,4JWetƒ‘ ®ºÆÑÚõò‘·é³¦™‹?iw„’ æûýý„œ§²ëåÞÕËÀ´§™Š{l^(1áÚο®=/ ïéãÛÑÇ»®¡’ƒtfWJ>2( 7CO]lz‰˜¦´ÀÌ÷ïë´©ž’†7°ùåÞ×ÎÅsg[PF<4,my…‘žÛÏÀ¯œ‰ub’žîéâÚÐƺ­Ÿ‘‚sdVI"+6AN\jyˆúäÞÖÎƼ±¦šŽ‚vi^RHð‚vkZep|ÂËÿž€qcU!*4¤±¾ÉÜÔÌÃ~rf'4CUg{Žðìç᪞’‡{odYNE<3,%)08@JT^iuŒ˜dDOªœŽpaSF:/ )3?KYgv…”¢°½ÈÓÚÒÊÀ¶«Ÿ“‡{nbWLA8(5Eé—@80)# &-45-)6FXj~’¥ãÝÖÍÅ»±ncXOE=5.T¡Ùü¾ñìæßÖÍÁµ¨0GPYd¥âèìèßÓÅ´¢|hUD\ht™¥ÞÖËÀ´¦˜‰zk\q€ãÜÔÌø­¢–‰}p•¨¹þðë繯¥š„zod[Q  DMV`jtŠ•Ÿª´¾éîñ£}iVE5NYeq}ŠÿÊ¿²¤–‡xiZ$œª·ÄÏØðìçáÚÓÊÀ¶ªŸ’†zmaU +»÷½´ªŸ•Š€ukaX% T]fp{…ÊKVanz‡“ «þëäÝÔɽ±£¨ÙÑȾ³¨œƒvj^RG=4;K]p„ì|rh_VME>70+%!BJR[Öé>HS^kw„©´çÜÒȼ¯¡’ +-"+5ANêåÞ×ÏÆ»±¥óÎƽµ«¡˜ƒzpf^UME>7).4;BIQZblȸ¦“lY")2;¼ëéãÛÑƺ !)4?LZix‡–¥²¿ËÕÞÍù®¢–Šs†îéäßÙ¨ž•‹xof!&*06JXgv…”£±½ËÁ·« “‡ ‡óÈÀ +-DKRZbjs|…˜¡ª³åÿâ &n{ˆ”¡­¸ÂÌÕÜÿò-$ HVdtƒ’Ü©‘„wk^SG=4/ôåàÚÓÍ’‰€xoC<72-($! +- /kt|…Ž— ©±ºã$+4>HS_¶ÀÊ×ÍÂŽt1$ÜðìèãÞØÒËļ´¬£›’ŠyqiaZSLF@:51 38=CIOV^emu}†Ž—Ÿ¨°¸ÀÈ÷ œ¨´¾ÈÑþìæßÖÌÀ³¦—ˆ8D«¸ÅÐÙÅ»°¤˜‹~qeYû´¬¤skd]VPJD?:51-)&# !howéí» (09s€Œ™¦±¼ÇëåÞÕʾ(",6B›©·ÃÎØáäÝÖ•ˆ|obVK@ö»´…~voha[UOI/+(%# $'*-GLR‚¸èÊ»©—Xdp}Š—ü< !*5@N\jz‰˜§µÁÍ×ßÿãÜŸ“†yl`T%2ARdxŒŸ±ùõóð˜‰zsmf`ZUOJEA=952/, "47;]cjpw~…”›£ª²¹ÀÆÍÓØÞË»ª—ƒp 5?JUaïêãÛÒÇ»®TG:/hw‡–¥³ÀúÊjÃ÷ô¾·°©€ysmga\VQMIDA/," !"#%&()+.0258;?B^djpv¦­´Þâ#+3=GS_鬎o`RE=IWfu„”¢°¾ñȾ³§›Žtg[OÿøÀ¹³¬¦Ÿ™’Œ†_ZU@=;86+*))(('(()**DHKOSX\afkqw|‚‰–½¼;EQ]õÏ|m^PC6,";GUcr‚‘ ®¼ÈÒÐƼ±¥™Œr&fy ³Ãåáܘ’Œ‡|vqmhc_9867>@RVY]afjot›¡§®êîðÿ˜;Ú§˜‰zj\M@5$-8ERapž¬ºÆÑÚïÅpcWz¡æâÞÀ»µ°ª¥Ÿ™”Š…€{wrnjWKIHGFEEDEEFGHJKMOQSVhlpty}‚‡­³¸¾Ù ìæßÖËÀ³¥–‡wh,6CP^m}Œ›ª·ÄÏÙá¹­¡”‡zmaTI>4+TfüçãàÜ×ÓÎÊÅÀ¡˜“Š†~zvsolj[VVUUVVVWXYZ\]_acfhknqtx{ƒˆŒ‘•šŸÂÇ£¯»ÅÏëåÝÔʾ±£”„u…“¨Ó˜Z•bH!㣠 * Åb)Á€Á ˆ"²8R Ä @Œ–À@wl¸¥’ßuyϽYÉä,p¬äÞì;öxïZåîþÝ»SLSº£M±ÐâtH&+\§5ÅFšòSà¡Áf¼³ˆ](Š{wˆ‘¼O€è#u!íìëÊ]R± ?Î6™qðÅãÙä ¼Ïå_™DÍXÍ;è6H{§® 'e7r—VQÑhS–ïéÕ1⳨¡ þ§¹h¥[ŽöK`!‘(\Þ»ÓŒÛ}ĺ+Èy€Eü©{WÇø`‰‹h»r'ËèYl2ÃITÑòéÛn‚ÝÍ÷îCIíøCŠÛ3ê2탚ŒŒÞÅ*9ÊPr´)«àtHä.8w5縸Ž¯î §^–WºÅVFÊpùÝ¿[L¡ŽŸ•"i+[LÛNbäÉ:ü©moxg!˜»ÑÂãXËØŬSÚØêã þÜ—7fº‰v.b¾»ãæÌÖî]<ßê5ØÊL…emŠ\CŸGô.œbP€Ïæ·_Ìô;HåˆSø¶_‚±ØÍdØc_×±Û(zÏÒãv´d€†fº –q±z4›µŒ¢¦¥ÈŒ„¾-çCz§ tº¦µ6»IDaßÈ.ýõèð ¨ü ßéêÁ$ÃE1Sli-Htwæ/¸6 vþV.ø%Ì}-å´_ƒ/ÛÎ3‘e\¢BHôÎeþ¿ƒèQ˜ªÒò"¸ öY⑦2B’O¨Ÿæo“-¾X™.õ•ɪn•ÿEZ3¦9&Ú;lšÇ¥)ó½ŸiÑy6*‰ÞnðTDËíaó²l82<8HFeJBòÃÜ»±cÜÜ‘0v¯­“w•Å*°7Š–6kÃYXÄ©¢õ¥oS=™JT¦óÚ"Ì@¿°x4Nä+o E>&í•v!=Ð.ý²f òÓtõ°ÉpÓ!µÇY¬d=ÐÍX¯Âuá/Ërö;HÛÁÃ2øhÈ—5ê<;D1<È'”KÃÁv-úÔ6ƒ‹€ é~B½­ ¦áÆ*Ú^Nßvì»i4œz÷E)õÎ7^½žf~aïãê²°[w4e¾¡Y¨N†Ëâ‚hþà_½r‹++Ñs…ëIÅÿ4ãÁƒ ù²Qê]ºÛƒŒÉ…dÜ»UáõNÑh˺Œ3i²® ìCØö»ú¶8¨iMëLÕtèPï¬\Gšy+71z|p[ÆÀU}_*é ˆŒÄ@KÁÌå–x¿&,èJû;¿„±‚:õPqõNV¹P2à{7V…Іƒ¡PÙµOÝ©½÷…é s=!´Œ–àNÕ&ôm©ÝL̨վƒòÏ/c¥ãD$âgŽZÚ‘CÖ;õNïˆm²œ-<Ï ðš3`f`5ýŒúRliiÚ-›};HWÇ:ð¦qŠÚ@¾üÃÔfĺu÷`‚D¨?À—“k+;`N´l–wmXË0xÍ÷H;£-/žn2CQ»{cÐwfL¯©úCxëbtð‰Aº³ôákCÔ¹ä¾Ô ilÒ:¢úómYqwEk÷ê*ɉÁ(DAßwˆQÞkÇr¿o†|yo•5aªÏ«Hî¡VÆèïÔ^ë™»fî`Ï»_·0=1!ÅxÍ‹g½³Ø>ÙŽucoLUÃ]3Z漂ïªÞ]W…®R;~¨0z÷¥6q òáûdt3©€Š:çàÍÛ©‡šöÚqÆ÷Kà¨JŽjÆ’æÖå©H~tè0ÓÈ1 lîÄ"¶·¼Ÿ¥dÖ|ÑÒR&·_Ðî{#³ï¨zJø¬,‡»§ªTc@ò··ÙU]sImÜê}©Æ¤±IŒ!á­£ÇÙ÷HÇɇîqŠ¹q0äóž*GV‰êëòÒÞ™ÄEÒÝTûYaæ»]0MÔ.#¬OÝã.¸äóÖÁívØGBÕå}£­uŒÿõŠê™±ƒÈ» 8Ò³€™–Þ¥¼‹–¬¨{_ªØ, +-œÏßqÃ,m5!k\¢ ‡'P›ÊH•¼%½ÜŠ´dÙž<‘±lvHÇÌAš)ûd°2©ÅD*¶úÔ‡‹dæî{B’Ù} ö† ¬L ,…LTëV7»š!\·À¼c?õ‡ìUlA««‡?G„‹*¢Ôl‚‡mA¾¼·ÚCñÆì–©Í@ë2 õ¿!0þ 0U‚éýå$ÑáâÂ#m¼}gÇco  ðé\µ(p~weQZb5j„1 ¡7€©+‰qæ䃠±‰R¾TWºÅÑm ^òeO=™**²¨’C"V €×;ôòæRa ”ÒE9 sXÝá"—w$ó.°*Ó„˜^ ͯ9%€øÔc1Ü:Ê#T¼Pp1…Ä(Dö˯9ö’k òsÉÝ÷>æèqƒeC¾Ìé‰8‚•OsNEQS£: è˜%u¹2ÈOs£¥Äƒ{Éç³h–¡Ë{@S.›7jU™š5 êXÛ±xtÌ£=çK"(¸÷ª„d“Þó›¢\HÊÃpz£Å1ÈzåÜã~AîK-Ú(ᙋ˜8¯Ô~ 4ù2~®Ûâ"r.š›uTÜ£œ ‰X‰ruI£Üš€s7n˜ºvf¯O=w¸š¨âÍ_™žˆMEAàSÁ‡E‘í ¸½f4eŠ2/£I£LÖ>ÂËåÃ5[sëêá×{ÇäŸ^¡à®Yš$úNÄ:îÉ=vöÎh@w¯eÇÜí,ÒŠwþ¦7ܳ2ÍyHÕ²;<øU;lAbÊœOâjÆ;¡sf"F3í¯ònP¥ÌÜ—*nwÝ3ƒPòO ýme-§¤C.e¹uÌcLî Š$^Ó¶]UÿY¢êh6ñUf¸/ÄÈÔ–1ÛŠ{!$üeDáXïóCŸ Æ +-¾ƒÍá]VË7ß׌†ú"Vs•j¢ÊQ@ Ç-´ÎµVG®qø}©°¸#ÑÓ£…¼kßÉŒL–• 0ö>iÒ<5aÍF"¥-C㵋·k¦—†QùÔ‹2¼ÈgÌXæó@Ôµ5E0ËR3PÚÑa(Mlêîïè…Ã;¸q¸önnZ~©YÄ›òÀºcÇöê»Øå ݱ g7ÞZ¤SÜúÑcå+Ò#ŒL’ix€qi#™—!»õÚŠç]ˆX5öÛ«Œgª‘‰x)öÊ"!MDÍ»èÊʺÆáÞEfÑ“dZȇÍ.è;vEF¯Ñp‰; çÓ>IyÛËbØ·Œ^]êí_Öþt&ÃwùÈÊï_óéƒ'EL–IÊU¿cþÉD¸¨Î* ¼m;X+ýiòîñ¯ÞÜ­KC§ÅwwØìÒü¾C“#”{®¦wO/![ð«%°[FÍ܃ ¼ƒßtë•bªW¯ï:óµ­‘j¸Ðò½ˆPb·¦!“˜p=™ò›â¦Â¨ïð••3!QÆÓB–ƒØ¥cîn(îVé?'á<°BÇb75>ƒÿÊø{Þ•?&ãQ¼+ú_ÎCr绥™!Aƒ1¦ŒÙ¥PŒ›º#¦ª9ï^t®Å訂·Å0î)æ8ÍøŽ™íÒ.ž½›ëršÄðqþúÆÁ@[FëòTA±Ù&»!Y¹§ZÕåó¾‹Óæ†s†ÈüÏ>$÷] ¨ÎKÝ1ÿ]‰P ǼC £Š¿°K7}…¨1çÌš<6ÿ`3ÜÅ>$eÖ2®ä9g†®Ád”;)•ûÎèñ‰°”és¢K}ÏûÒ;¸Á!Ê ÍüZ IA•s}7)Zè\[øìÒ‡y—‘ª Æ)ñˆò(äîþ vâœþàÕ2Ê>‚w½ðÔÿ¸éˆÖÀõUùDxï*˜ð@N¤éµYÿœ&§ZhLSMPDwk{ýî«ðÔwÃ’K/-Ħҩ! +-Y:Œ¸l\†ˆR/¯ÿíêñXÐØ饨à ¬œ&»©3'’ïtEa ˆWOŸØïòÜü7Õ,/r;Pc­1’¸;÷ÊS ©«ïÓsF!…ãõ^CÞ}¸»¶¾“Î0õÏïÉ ÆHOÝUð®…)J¬>Ë‚¸ïúƒžÜ‘zWth̹0ñ÷K›AöJz a>à Ý­òn)}"ï$fFgk>IÆ‹©a`®jwBO͈LîÀL9Ϧ!>Ѻ⾋j»1ÙZÆíû^½sWk Í;`V €¡ÔïR5†ïŠq $"XƒCëŸRQS¹§^Iˆ•’g7y×s¡îtß A!9aoE¨ŒZ¥ìù¿Äþ |+T¬élfD"H¬Aj;ֳʿÇSÇ*zj¿fóΉá%ƒªÄ$ì;N¯ŸÛâ»fz§àý¶²jïQì¶ù€H¸’·çwá»XƳkif¤ø Ö @Ý–,ºã朾 Ù:Ýq ,ïòUõvä…—ïV½dñxhÎð6þÓIø2΄jŽõN¢¡ÈèÁä¦æÛvx‰=/Æ妼ÃSCAïkË>ÓußÕÇ «ò]±¯cÃ&WXÖ:ô!ßt¾Œ3ïÏ€Akð ª–‡bÌ6jÌ ­TšŽ@CŒ¾ìÍ5a` SiÞ­÷ÏÕu£’^>Õå‘¿ð/ÆÅçùÉ÷¾þ’æ©ž¨ó3•Èsyfd‰wÏßPŒ!c³Ê Á%†NÉ8þa§0óîCÑ©cĘÔjM\kz‰™§µÂÍØþŸG<3õóÖ³®ª¦¡Š†ƒ€}zxusqpnmhhhiijklmoprtw“—›Ÿ£¨¬±µº>®¹ÄÎÖäÜÓȼ® ‘‚ÌÖßæÜÔi\PE:1íêçäáÞ»·³š–“‘Ž‹‰‡…}}|}~€ƒ„†ˆŠ¢¥©­±µ¹ÕØÜR^kxïêD8-$&01rµÀËÀ³¥–†vgXI<1& )4@N\k±¤—‰{n`TH?š¨´°¢’ƒscTF:.'2=—–ˆzm_ ³¿ÊÓþëžo`QC7,/;GVet„”£±¿ËÕ•‡yl^ˆÛ}jWbp~‹™¦³¿ÉÓÛПª›Œ|l\N@4*#-8DRaq ®¼ÈÓ¢”E:=M_s‡|hVD5'!)3=‹˜¦²¾ýµ§˜ˆxhYK>2!*5AO^m}œ«ærèÞÓÄ´¢{gUC ßÖË¿²¤”„te (2>LZiy‰™¨¶ÃÏÙáßØÏK]q„˜«¼Ëò¾ÉÒ¼¯ ‘qa%0;H¥³ÀÌ’„vi[—ª»þýûùôï ŒyS`m{‰ôðêäÛÒƹ¬}m^OA5*!#-8ESbr‚’¡°½ÊÔ7+9I[n‚–¨º±ž‹wdQ;FR_±ûyiZL>2(BP^nÇø¬Ÿ‘ƒu¹ÉÖâþÏÀ°Š¤îçà×ÌÀ³¥•†vfWH;0?L[jzŠš©·ÄÐÚâéƒug)7GYl“¦¸ÈÕáý/'0:ER_lþ½°¡’‚rbSEIWfv†–¥´ÁÍØàÿtfYLAWš‡s`N=." &0:EQÒǺ¬žŽ~n^OB¢±¾Êö…r^L<-!&/zéâÚÐÄ·©šŠzj­»ÈÓÜXL@5+ à×ÍÁ´¥–/%ÅÐs+#þøöòí%/;H¦ñ?%1Aȹ§”€úøõñëåÜÓÇ»­A5*#,°¾ËÕßæß×Î?4+"ŠÛÿþã ÇÎøÚÔƵ¤‘u'1>KZiyãž‚*r†ÓæßÕÊqaRD.:GVeu…•þí¬ž‚t!„Ѳ ÓÜëå}m]N"+7‘¡°ùÿñ¹¬Ÿ‚•ñ$ê÷ôïꨙ‰yhYJ)3@N]l}¬ºÇÒòíç8HÕ0möÍÀ³¤•„tdUF9 +-JXhxˆ˜¨¶ÄÏÚ⺭Ÿ‘ƒufYK?5‘¤õͽ¬š†sR˜¦ìæÞÔɽ¯ €#-9FTdt„”¤²ÀÌ×àÓŠúøõƹ«œŒ{k\M?3_oŸ¯½ÉÔÞæìøɺ¨•0ÞÙÏõ§—‡wgWI2>L[j{‹›ª¹ÆÑÛäëðé%°ÁúòîçàÖÌ¿±£“ƒ +-/:HVfv†—¦µÂΆwh ¶'0;åÝÔȼ®4 ‚’¢±¿ËÖȽ°£• ò³¡Ž{Í×êãÛÑŸ©šŠyiY3@N]m}­»ÈÓ¾±¤–‡xj\N ,:K\pƒ—1;GTbÿáØÎÁ´¥•…0„ß81!Õü Ìʪ÷¾ãBÈ«ü®§„Ä24þYT¥äùóÑÌ*·ÎŒïX!^bL9”áÓì}8³‰ï`çÝhÉ2.q>À)…¤y;u9”Ü„@Öë®=/¡ŠÓç­,[õЩå›Æ4*°)¦¢Ž©¶Ý„>Ó³:¼;>“à÷è3 +-É@Éóanå†À„Búeå†[¢‘˜AÍ4õŸ–ë¦ï¼¯¾ "ª4Q¨V¿ÇÆ1¤åFN$«B\»ŸÊ_’¡K„ÜÝ3|×þ~Ѐ€g‚JüvmÞ.ÑÇÆ·܃êzžäÄ<§±—ÌæN6ìÅ„T‡@*Ä73»›7ˆïŠ57‚û‚$@€®ˆÙ,Îýƒò2ªÛa<”Ь;•íÄ4ê‹3¶EN¿Ms'ÌË/;.¯êjAPÉ=dwOË “«*ò¬­ç;B¤Ð‡¶ š³ð2Âîa–/ƒ+õ¬¼SRwtg÷mî.‚ß©*×ÅënêŸÊÚÿ0•<ú@Þýhï â;æO—±¨Å3ã@´Ã0`‰º“À´§À»¥Ýë%º¹ë ømZåÌMbF•î.û‡¡˜ŽÜûO¾cªgöé÷åE‡![cF‡#zNxõWñÞñWw"Ónu ÃèY–ñCwZ!¥R!NLÌ誻cÆéßSíùÝEk¾2VzaÄÓ ¥Ã„´m”-·¬•,„!U=BDÝ2¨fAü¾i˜¢ÝQùÔ_ç×Ý´twf,¾ƒZsEwÔ™…ôb/…ÊReýðê¸#Ÿ#¬¸P0ùç]ñ {ïÕt³c@ÐÝóåî¦Ìº;¨ýa–’ ñwWÂ,®ÑÑOÑ]Å&áÝ +-¨;}¯îZ ¸ïø°X[H…ÂxK >—ñh)yŠàiab°¦%›¼¼¡šPýÔ8†)«îº«P—`Þ”ªãªïxkW…2²ôù]_è°Í]:¸ç0•°'xçŸ:$fE‘>wœÛ0ÿÝçÏRuàxòÅwΦNØ-¡š›–*ßS÷3iw‡C ªªNf(¡è'K¯ãž"9™úÓÜ¥ÃØs jY1=ýp;°6îÝžÒm¼¨Žï]8DYÞ éÉ›lD=ÀïŽõª¹‰š†)ßÒàÞÉ$ÓV1U‡É gpŒÌX(î_¹Ýg¾Ñw +--6FÁûè]ÿëÇlu7ÒàñxÃãìÝ°ªl}1RïÚ[yȉ¬÷:(KŒ‹¸Bõü=u…J]ÿbOÕïWÚwö Õ4¶FXY+R‡N%3¥”ç.ªo¢½ýÝŽ¤®hvÜ$ÃàÇ:”wŸn\Uçà¹ÀmµúpŽî`)£Á’# °SOØÕ§ÿ"Léª ‹ÔþQ[Ù¡RØ]ß©–6P2,¯3©ž§~§š îÞù‡0[Óœˆ»©?¹¡Ò‡¹öÒIt8ÁH×SK7x~gQ±W¾/¤H’¿ wOÐÑÞÆÛ8ï`ÎÈ\/E¨Ær¼¢°m»£™B:™¡r\ïAöàvº iè˜Vþ]ÇÉGwp½ËÒ1÷ÊlxU´èP/<]Eº_ãðÁóëå®ÃLk—Èz€—©Õ«ŸTsá©Ÿ”Õ2Bø€ÁPÝþ§Ëkˆ7`m8ë¶ú,2ãò`(u𘳨zƒÛû’²^H¯°úÚ +-ö(lûxÚ-{‡åy³qys(ù™[Ò­ÒžøŽÉ¾ö£Zzï0h˜°Ð“-Õø¶§Ê¤C¯ÍñOîüŠ¹>µ‡jn§!ÒSõlõCAoä Èdcˆ‡ÌÎ…Ýþ+ôöÛ´w0ÿp ‚ÈE»e"µ]Æuj*Õ¬½¤(DE‚çENwðŒù]1ÞúmÉG`2)e®¯ª=®×ŽÿbÆÛ#3XèD$Âl!™¯eJåjÿïNøÓ×{©`’-×ÛÊ‘å^oÍŠçnµ&ÑYd;ƒß~hei!øîÃ:|)áb‘°ËhÜôØ0äû+î%f®oE˜Žª;o®×Žwlõéd†Ê…› –û¼zþ—tü?šª…,CÊú+õ\ ;éç@995í– ý\Woß´À2Xë-vÖ⾃¤Š3i]r´üл¤dEH¶^¶ºKöÝûÊóâ-cª¡º\e(mnµc°­þ&™±ûL8„˜œ:aÜ‹Å?n|÷¯z'x.ãÏ}0 ‚’¯5ò*ìÈà¿m ÷ö®#®kê—0T´²T4Ÿ”—O•½c;FOŒˆo¡üØTÞ5Ó i.»¼Â\ïŽ Î]+ d[ýÖ‡D¼ÝM&g! i<¥w–î®b}w'ï“¡j¥ØÒy†éNk[IjÐúíWµª†S¼Ò-,öK´’EUu\oÜ`ûësX§lš|ÑsW-ïõ+m°LæúÆJ¼*_mõ÷?¤ýÉ4erW]B˜Û«ú®ô@âsW´)Çg±¹!õH(n»o-ˆ‘prÐý. >‰{ç¾Éx~jË°Ð…‡â’šX'$Ð õ;Cu@»˜AJfðåÒÄŸ\în ¡DÔB–7&Å°^ÕÑ; ñoàÉpA˜Ql©›óÒĵ@Á­”ß~­ZYr‹8…üw4o°Ó +-þÞñ í§ž,ãʼ›ð„y4<™ë7´ŒÁøÚd†?vwŠÉN ÿ =‹ûç:Èwé wxɈ'(’™ŠÕѦxÙAI.²úÏݺþí—OŸzHô}-¥ÇïÞô½Û¤ùëÐO}_•€`²oâb­0·Õ½Ê3×Gj0¦ÓUT $†”YÿHÿÕʾ°PB6*",8ETcs„”¤³ÀÍ×¥—‰zlõÌ` (žî[L>2' )4AO^nŸ®½É¦˜Š{m^Q{Ò)s‚‘Ÿ­ºÆÐÚêvfWH:/$&1=KZjzŠæßRE9/eyŒŸ²ÂÐÝmZI9+XftÇ¿±¢’‚Ueu…–¥´íç?PcKYguÓÈ»­ž}m]M@ `p€‘¡°¾þçàœpaSç"*5@LZhw…”£ôˆxgXk{Œœ«qbUG;Á"+5èáØÍÁ³¤”ƒsc$.‡—§µÃÏÚâî謟rùBOæÞÕ~n^N@4)!+6CQÇ»® ‘ƒteWJWj}‘¤¶ÆÓßû… ]l{Š˜§ëä‰yiYJ<0?M\l|¬¯¡“„ufXñêâ×ɺ¨–‚$.ÿéâ„tcT$/;HWgwþ”…vhYL?4›èçßÕʽ¯ n^OA7DRbr‚“£²ÀÌåÝÔ[MA5ìV«óƹª›ŠziYJ=(3}Žž­¼ÉÔæÞÖÌB6Ø'1KXÜÒǹ]m}ŸT¹§!*4@¤¦–…udUéâÚ íP”ïêä/=M_s² lÎå'2?M\”…vgX‚úÛο`n~œª¸TF.:¸ÅÑìæÞÕË¿²¥*7GXì=/":FSbq€âO  *6CRarƒ“£ß×ÍÁ´§5Uh0;HUdsþ%'2>L\l}ž­¼Éö©š‹%2Afu„“¢ãÚtd#.:GVfwˆ˜¨·Å¸«œ~o`Rý3?LYhw†–¥³N *5BQaqãÛÒÇ»­ŸqbTù5AM[jyÒǹª›ŠyiXI;/$[k|­»äÝÓɽ¯¡’ƒtdVH<0'~’èâÙÏ´¥•„s"-9—§¶ÄФ•…(Õ[I9¬¹ÅçßÖʽ¯Ÿ~m]N?)4AP_p’¢±ÀÌ×íçß×ÌÁ´¦—ˆxiZL?4‰£|iWcüÜÒƹªš‰xgWH0>KÀÌÕʽ®žŽ}l\L>(3@N^n¡°¿Ë€qbEVi|–ƒ[jÎÑŸ¨˜ˆhyŠ›«ºÇÓÝdVH;0&Rex‹ž°ÀÏkXG8*Œ›ª¸ôïéáØÍÀ²£’p` *6DRbs„•¥´ÂÏÙÿ²#0>¬½Ìýópž­ºÇüÞÔÉ»2>M\ÊÖßû-;•¨:GUcsì! #-9GVfwˆÙÐĸFXj}£µÅÒþº©—„pWfvÖèá×Ì¿°¡)4BP`q‚ÛÒǺSexŒŸ°Áƶ¤’lYH8+óÿŠyhXI; +-¯¡’ $0?OatÐD5AO]l´¥”„sb!+7ETdu†•…vf;ÈÙÌ ­Ê½¯Ÿ'2?±¿‰yiZL?]°½ÉÔÞûñìåÜÒŸ©˜ˆwfUF9-"#.:HWíé] '3BSv†•¤ôðéâ_OA4 *5CQarƒ”¥´ÂÏÚãêëäp`RD7,>¼ËÛÏÁ°Î÷󬜌&0ž®½ÊÖ!,:J[nØ˼0]m|Œœ«¹Å¦–…tcSD6+¨·ÅÑçà×ÍÁ)6³ÃÑ”n\J:DRap€Ÿà×̾° ~m]M>2ÀÍØâéïâÙÏ÷AR¿%/:GUdtƒ“£$.;IXhy‹›«íóº äÚÍ¿®'1=JXgw‡—¦´ÂÍýƒ³¨•L)"š ‚ ‚`˜©AW` a ‰9Š1   Òˆ~¡jÿ§rÓºãÓÒ0V”ž2õ1UGÈè0០IÍ÷¬ “®Šs´iövÕßE˜¿îÊi–âرwBwç³cw±äñIzQíß]T­öOå +-v7V“w1&E»@QÔX¾“ó'x?w.1µíyvN:µ³³5ë¿27Ý‹D$šb!­·¿àÍ0ô_@ð†>>ÉÕÚ6ð¢j)v·X¤O?lKç&ÏÆ øÓ3bW=Õ 9íUÐ+F'ì z%n7Èa®#V|Åtœ»Äã“5¢šØoÆ-vG8·bÊkŠqcp7ä`Ï ï!_†lv§5 +-ÕV7.ã©8r/}Å3w‰8vö#Õ©*Q¯Û»GìN¼ËåB†mÀG¢FªÊ Ýýƒ÷Õç䣺 8[·yÌÍÆî´š†(OFÓ 2½ZÒˆ‹jé>ðÖ]©°»ÝíÕ*´4þTO¹gçå¨öGwnÊ°±¶ŒßLIu—QÀ§ž!{z:w€¨.u)9˜J¢s×µaèŒ4«þ©Ä<3(Îâ¢T}v\1X¾ãç î¢µDCõ»Ì=Rݲ»vöXìo4€¡˜öPÁd§8ãܽÊÛº³†Ø¹BÞ¶",¥!çØ(oýKhE¸©îœYG/RÝéŸW,â÷òÆ œç"8¦+ »ÄüÔ¢õºÇ'1S_ìn\•Ù<3Ž§LªÏ’¬8„(½9L:Dé›O »“?¦ †•Ø±y¡:ŸJn£‡ é<ÎöY¯Ë»»òf53>†X×;žpç+Nþ`uš}5¥êN€å»«{LyÈÖ2>rÙÍë˜ÃP­ä¶΄tÃS™/vgE„@ó”ýßQ9iÐDK!É ¿Hc!o¶ºÓâgœªÙìÌûñ˜JP„û«$¡šKeh†’Û]dù†v!o³)û?†ëgŵ(-'6.Ãvªô[8gC¹“$ÝIñ˜vð%v éu|ÉbÕ—q­’Û¦;Äh,ämgÊù°¼â&3²‰ÀM-ô¢¥ªç®’n1½DqbÎ!áÿRùå' T!sAr"KSïÜ}¶\ûŽª2Ó˜ЃϷ…ÌpéCJ ˜H׿c•ªÛawÚmœö—œ¯ÇF˜îÁu—`Ö•8—Ê¡†j!²¾…»xä¡ën´„‚£ªÌ|²Ï Ý… +-i2.º±ùÎÃyZæ¯|ŠÝÁ³ß*’$»À€@äæÒÂt'¤k-ãªsÉQòÚüÉnJnSí•” +-ys(õRñÌ t4ÃP©ÏÒª:Œ5çf?à&ÖZˆDN¤æ<ü,¾“êþzGe¥–qm ñØê©=²½½Œ\ø6äŒk0ƒ<3.Èdzþ/ÎæµÍP,^{·21…Â~@ÅüõëIR]Óïܸ·*:ÕIËÀÒ¹ØÛüÉZ^FØÀh¤*3çÌ(D2ƒ_ѳ5AKé›(WT;óWW#‘©éî¦:Xt¸Uf´e¤]l +-öAüh“©5g¤ç$%ø•)U ÝÜȱ%R!W  +-¤º„š'èÄäŸÎÍ‘Ðêeø­PuRܽ%J3:/±Ð>6Ì£¼Œâ÷ë.â1£a õL`WvJ»a˳d¸ :Àú&O +-¶‘‡‰W2.úBºÀ «ÐÖ¹÷zÞ}&¤TÕ/ãüOÀGS)'uj½uMÛÞ#ןòFP‰„Ç +-›½¤º•'Œìlrú@õ1Ó¨õ R± Ia@5Z¿ãЗQ5Â}hft2Õ¿SÝWá^þëꊓ ¾ 2&ݘœø™Ë˜†]o4Ò5kÇkÿˆ掩3Ñ.LÙĢWe&Üõ2@H<3PÆÄ©6£F£Ì0þ6ß¿:¤én&T—Üø™D?Û0cÍÑu•»K73µ0<Éç—ÊB•™Ê~ô-¼ô3ƒ)~»SM,@²qÂß.À×ë\ÈÞô2†ÍŠfhÉm˜ý¿b¦NyN1êؾ 1[FP<3. f{fdOTÎÜ€:ËÁ€ª†Øó‘?`î^Æ}$´_'P MT€ñÞ%²ˆêQ‘Ú&ZB ª+·ÏË°Ká;™áëTïs?Å)2f쥈n'øóòxSpÉH+ŽÍaT"¾*ô œ>†T£7µµËù°™wÿ@öݱ:ÐëÍT†¨£åËàYÏ tª+IÙ´©ï׃æNÊvÌ63™þRK Ið=œ9ËEXĸ|î5$b‘œO“}SàÀ2ZøÔ+£¾1P}éˈø0]ql§º9.j—佇 +-&‚¹? ´´³Ã½[HÞ*Ñn4иõ=„oz=y'KH¹TO½ ^×ØãìºF oUqŒ²ˆ>šŠ£Ü!ÚCªDÅï^r®1&oÓäx°Íä¦DÊðÆ{Kaªþ£X +-T7¿ cfP=§Ò:ßoW'Ìr–xbÞ÷ŠhâÔ¼k †dE҂þE¯!Á¥;ƒÒ_õ`'²Õ⽡œDõ\òöQHcPBªål³ë˜Nµc©ÑCÚå.WQ|—tÝm•LáöûÛŽ’gòíÚëô®QSýtˆagÇäs_> +-ËB÷G!­l¨ÞôbpªÕÕòÝlûû!ðs;ºµ U}G%æxüŸ.CÒ6JéN^¢éE¨çÜîøNíõþ ¶Lßñ€$«”B +-ª…ÃXâTƒ)‡X‘w<è3Ðó–?“Ç.Ì8Œ°óÔÊS­’OT0†äGÑFÖC­Ã’jfhÆòZ +-S_ +-)L”þ±S-³ðüÔ¼BšãW¾CÌçv»[DµÉMsŒ!}+…hœ¨;LÁøWTa¼¸Ó2§P( “8jc²Sýòþ„ »Ë‡uî]˜ $Ä¥!©Ú¾½Ò]_Dš7åìhQÇS1uYÕDÀç9Ú~uǘÕ>q¼ã‘òt*Ä!ð„µY“8$ôŸ‚vωêG߯t~¡©ü‡d_Rþ+9IZl’¥¶ý_ )4@M\k{‹›ª¸ŽŸ¯çà”…z9+"+6CP_oõñìäÛÑĶ§7!Î1@PbËØã5(ùÿ×Ì¿° '3@N^o€’ÙÑ|l]NAþëâIxg.:HXhy‹¼®üÆ·¦;ÙΠ)5BQarÖÌ¿²£”„tdœ®¾h +-!+6YJ;/$%ŽÏ^q„—©ºÉÖáþ̽­›ˆucQA2&¢±ÿ‡˜¨¸Å\ +8HÄÒüþÈÂÎØ~m\L=1%&2?M]n‘¡±ÀÍØ7¯óîæÜ}j¸Åƹ©F8,!"-9GWgx‰›«º¤ $0>NþòìãB3_n~âÙÎÁ²£’o^N@3'(4A¤êâÚÏĶ¨9ü=/#crƒ“àçœ‹yhXHYi{Œ­¼ü|l´(5ŸH8+ ³ÀÍ¿±¡m\M>1&N^næÝÔȆÌ&0=JY",9GVgxŠèà×Ì¿±¢“‚üàÕǸ£’p_N OöÜÐÂXG,WH:-" #.:IXizàÿ?©ëâÏäÛÐõ¥”ƒr s„•¦¶Ä9IZl~‘£´ÄÑÔ{jYI;.$/N_q„–¨¹ÈÕàá×ʼ«š‡ubQA2…•¥áØÌ¿° }l[K=0%L\m~æÞÔOA9HXj}¢³ÂÐÜåôîçÞÒŶ¥“€n[J;-0&2?£³ÁÎ<0 #/N_qƒ–Öɺª™†taP@|Œ¶¦•„raQ —‡vf8GXj|¡²lZJ:-"  !*6CQ`qú|#}Ž1'3AQbu‡™«»ÊâØ˽­œŠweTC5ú…sbRB5) CRct†˜¨p`QB .;K[m€í¦0$'1þK[lÙ—‡ve6{hWF5Bá†ucSTdv‡™©¹ÇÓÿ&†s#.9ÛêâÙÍÀ±¡~ %0=L\m±¢åÛÏÂ&­Ç¹©™‡vdTD 7ETewˆšªãÛ +- &3APat†˜ªºÉÕàáÖSC²ÀÌØÙÎÁ²¢‘m\L%1>M]n€‘£³ÁÞÔÈ»¬Œ|;JZl~ĵ¤“€n\L˜¨·ÄßÔȺªšˆweTE7 fw‰šþØÍÀ²(5CSdv‰›¬¼Ê¾®‹yfçÚÏÁ³£‘€ÂÑÅ·¨˜ $/=L]o“¥¦•ƒq_N>ï»EFUfx‰›¬»ßÕɼ­ž|l *7EUgyâÙÍ¿°Ÿ{iWG:GWgõä€o ^o“¤´ÃÐÛâØÍaQ %1?ôîçÞÔǸ¨—…'2>Ÿ®ÕÉ»¬›‰xfUF8F¬¼ÉýåÜÒƸ©™ˆw# !,9GÀãÚÎÀ± }kYI:-"!*6CRbrƒ”¤´¤“o^&1?NòŽ~m\M©¹ÇÔßç˜†tcQB4(;HXhx‰šª¹ÆÒÝúøôïèàÖɼ¬›ŠxgVF8ƒž¨â”N©™¡¢ € hJ°=@°P$ÑrÄ0€p €´IŒRé„ ©ÐÎe33.›ì´ˆ{ßÇ‚;v‰õ,LpH°ñNϽ H{˜*ÁŸ SÇ )S»+ñ6ã_ÝáÆš"ç×3cË œî‘C×Bò× LìfØ tªu/ÿSˆ¶í·€rÃp’ ü…YA,Þµé7 .ˆ 3ãFÞ)Óí ^¶Œu«óI Ãû+^ÚÌ8ÞîeThÄ€Sv'2ÿâsò€œIk +-æa™¬EËB*#%òü“ÁžàJ) x¼ ™…i¿Xª£fw ¯K¨Ê¤öÌHXÝàÃbÕ?vZ ©mÄû ÛdGÙŸŒª§Z¨6Ææe0 K¨å‚ù ñj&=ý\W*ôÅÆ–P•V>L1~“B”NZÛÌÀ¦B•zÞeðPç®0F5áª!úã¯8¼¦aÆMvDY¸Æqª³¸” xò-ƒöýb‰V S<7 JÂê6u€ø>öÿtf ‚ +-¤-4aŸÍ";w¤7oP‡²¿"€SíUlBœ"c/ÃðK]ܶŒ8EK d |£}Ð såX> ÞR { |ßÛw1²fƸSÝgtGAw‰êÃWH™ ×pªÁb“ZÒmŸ—áÆTzú‚n ç0^d"ƒ*|ímo1!¥M5éd–7N§º)<“ȼ*Cµý¬âTg­»¥Ë²:¿¢ñ2æ€òŒNOŸ¸èºarv¸“PØð8èïcI¦Ä‡hDaj YbVWÜá¨FÂaT=Û0ëÊÖ1–µ–¢ŽÁ¼ xçúrBzúPô£dù)MÄ.Eh€¹˜H¦j$mY\°ò ¹+ú<XŒ²PÐ]Ò¨žvƒn_Qô k9+Ÿ +-cÃP¶Œã„˜:^zúO±Ãy¦*Ú 4(û£϶8š¿“[­ïTćî´Gõå“¡ì¸Ei.º­?‰b9LvIØâxÒ|j;9ö^Ã4"=x94~/{<%Óܲ#ãȶXL`Aonè!)a_AЮŽk#¸‚îj/‘­ÖEuÂ;0àÎËâ]wÖȺCß ¹p-¸VðàðÙ¶$˜88×äqY‹¿‹µT õ€b líS…=§¨ãØ¿€ bš#=ýÖ‰;‚ÈYçá©‘©6Ñ'ÜL(mHuÅjI¨?0ẠEâ´—aèÈN~l¨7Ñ—1uöäØ#éé_ÉlN±îdöè1¤ì1}ÊÌò² +-3–¼ ëoÒ ‡^d*äõ •š_a¿ !öC!%nZŽÅjüpq'¤ +-Ä4ÅdóÄpÉÎò…§'¾æܵ›c ËAÄzòž¿µ!ޖˇÉe9µa 0óãýsî+¨f*´  ?! FLM†i%Ój‡tyŽ|B‘-QV²5p2Cýay¯ä·I™ƒèû¾CÙª„*G‘<‹ˆ©3³+(;p‡ygh©è!…Zb¼T“8”Ä{?‘Üg(°o¾æzžT´³UŸk`øX7H¥Ú÷2ö©BjaÆÞ ;¡Z{tHùˆj…ÁC2¶sÅÿƒLaÕ|¦eë°nŠ°Ã‘^Õ0L Toˆ/ÿ‹+ùG:!µb¶æö†´·>ÎÂÑò'±=œ<¾ËìÀ ?ÅeY@¸FL«ÀÀn;=t)£qû©§Œù4Ç.RH[äΞª«ÏZñm±¾¸:/5`nŽÓ=έ_w@„`FT¡`ÂŒü…=Œãk¯.̨—¸Öv@Â|@ŒB¢!j<¬|掿v#­&âþ¥ú܆¬Î:ÿÏŽ°’ô ÷ÌM®+îÎëÀŒªì2.· ÍÇAŠäBä˜uÀ†3u¿såó§.i +-ÿ”l´×;$,óljKµêOÿ[»;ÀK +-ÌØÝet€l©; íTW+jµqO¬žßËVH’I½ {f—j +-nSÞƒ˜AöÖáYÌHÊQ¦tÒ5K y•·®Óƒ=ŒóAw#»˜òŬû¶˜˜ +- ˆiǃÀd/Õ+èÙ%œE¢üì.ÝÝÑ0-°ŽÉEiàÌ` +-Ø3ÜKö~¤Ànîb ¤bR.û¶x_…„qrDQqÌ&ÿ"Òì°PE+( îÎ4K~ìcÃŒùj„­yH§bGa«³áu>€øk÷Ûâ¸Bª²‹Û¯1ŽI“”•˜‹,'pÃà_q+Æ Æ’Õ„ƒVq~sÈ ÖÛ~¥z)£dŠ=…´/Œõjà -cX!é2³ÖÇŒ¨¥¨â—)…aJTJY‹"¦‡×4³`FâlB¤p ö½†„Ç€6¬Bw((LsôC1Š¨”À_bý§ÖUHÍo¾ì£ê˜ÐÅâ1,+dZÖ(S-á´X!‘M€þA0#‹sIŽDÚ?Šè¦èÜå„­d’¢;Ã}\jŠ'ªE+$Fô홾ÒD#T¨œÄ!ŒÍhàõÆÐüŽØ@T“槄4CÊu¸.5ýœÇn~5:[¢ÚX!Q“œjDg±!%U?‹ˆøŒ‚+ew§?<WHÔOÿ’¨&2E 1ý•()#eFѱJtwž… —‹¢wà¯\%¤ÜÛ’•‹ª;gÆŽþ­Íi”(HQCãBŠ'ª˜aDfH97¤«Ë?!Lô=Ýiè¸(ª¬ Ú÷§nüˆE§ò +-U—™ÚqPùNÕë^Â9b£O·¿?_¼=ؘ¿:w¹!áBöàxËûæŽ;#ËøšŒ¨¶=WþEmQ5¹#gjGFÜŠÉS¦(iƒ¶ß@Ä…TK/áÏÛÈÞ,¢×1‚¬ß©˜~UˆfüAw© S{-ðWðsî’HT­#ýõŒÜ©ÏVªvg ÅWL*$ãRÃ5¼7¤k‚€RÍ~˜ªÁÑ¥9¢»ÅP>5NÕr€wQµ·u×4 n!´¹ +-ç/ÍTm3Š ü¼^H0cÅè±!µ‹ @4Sb °6„ºäéñÄB_èÎûŸ”Ÿ-ªU­k +-PõŠ–†Œ*¹ž©RõlŽ•ßW=)ü¹ú X©ggRIàew× ­c ˆa²>òs†¹3”¹[ºº(ª6ëõ]TmýŸJvg'ýÖoª†0 i8{!•\°éOòÈ·ïƒÍènãkCJRd©P“Oú@TÛë&4=Ts¤9!œD6+!²äÚ~l[J;.#3?N]n~ îN?p“¤µÃÐÝÓh(4BRcu‡™ªºÈÕßàÕÉ»«šˆvdSC57DSct…•¦àÖʼ­œ!y‹éþl‘¢³Â³£‘m\K1ÜåÜÑe¬ £³Ê>"-=0%n€’û5)»Š&2>M]m~ ø»úçWM^o’¤´ñäÚÏ´+6–§¶ÄÑ䣒€n\Ââ›èÕÉ»«›$/uy Ð{Åã ·Œc*~f°»¶ETÍÃ7;ÛŠûÍn6…•ß9„M4~˜º°^®NwÏþª±~e†à]) ÷e©&š¼¾^KT}À k…8Lg…ŸñlZl(;0ï ¾¢§›E+oÅææ–¹P–ÛBBãuåxÙøvùsûCL;ª[Ñðúö˜@/êÑÔþÌ‚£XeÅúÌàªGô_Aò­»îvJX +-Z®¸ÖîÒy”˜ +-DÚ`ú1í€R}'^j½z±T?í ðqtÒ`S\¨o|²,DT?3 —ûS0sRÚ–Ðq¿ Ç}ÀÇILYz°4I™ÔëŠ`ÂïŒýe ÒA`//ÀŽ+TøÓC_Iˆìç éÔZ¾ke¬ý1& +-üOí̈‡KLk­.±s­+_XyzÅÝ%Zƒ×ͯ)Y25ûÄ%Þê²™5fà˜x!€«x|j|§ãë®Ù ì‡UÿØ®¡1† -ä« ,ˆu©À”>1zP#Sè4â/ÍXH§£ÓaÜÎL¶º~à Êß˸d؉U Àºk?‹(kAÓ‹SÞ‘£¬ŽbY©«ÿ0ÖiµSôjdê8Ë ¬Á»sñÑéno·íÆK‹Ç¿™À+Æ^ûiXwuŠª1‚æ)zs&Ò|tUÖ/ïáÒÈôZ©»=4 Ä=ñÑ =^ŸˆØÌŠÇ뾌ƒÆþ Zw5P›f®ŒA)"«Ž uå¤7&Eì¦"$¦þè42¥¾±7¯Y¢G!èèT·OÜŽ´ßŒI€ +-ÙÆw2z­JJ¦EKAsš‹LKM‘î¥ÁìsTã1±›´HL]6½R :õ8ÅYPù“¸]!¨ŸQ£óÈYŒiÈ|4“"Š#`‚¦¦î•¡ò«ê}w8!᎘ªÂ•ð†‰ŠÄnºïTnÜtC…uìYü£˜‡bq{ö +-e¸µt+ªÅDu_%«Ë"jFdA$ÑaÞ2Sv±?¦Cóª%¦æ.yœ,ðK૪JðqÇ;7PÇÜóuC;n‡øÎö,\†Ó"ªVö—ç$SЬñ‚”»>¤ÅÐ+({{ÃhóÓ{7'I§ð¯S¸†V¹L¨Ž†-«„TrÇ&_«œš=yÈJ=ƒ·ø­ò.ÊÁe$Šz¯"¦Ñ‡OÃÆ“ ÜýÔf›$؆Ò$¶ñ”Àc·Ã]ªA†w¶ã·” óË.Â,h"¶à/¢)À„½©0•«f`l¹ÇùpJÏ«MŽ +-‡Ü&ªÖs¥”åµnÏäj¬I©F çã–²œM½­B°«@òÊŸ Öed#A”·ngD¯¿C™ãô8Ÿpöun¯s%ÿJU¿§ìö‘A’óî› z]ŒÙ ‰«ÂÀ;(éQCIaeDñå,Cn¿Èˆ¶ ¯=GÄ£ªEp`sö™oEWµŠ/ÿFÂ}6±­öèïqwzY¤õ} +-4éW„`éRFžÅ_4øÐEG/œ z”ñΟÈ<ÈDÕ_ë=¯C Ã;Û{/ZµîÆdr¢É"§ãXTWզ؋1¢+5q‘-zÕ·YjO4)Ÿ 2 ¼¼­“•˜‰ïèªyHZ5³+zÿ,¼Û7¿ç½T BDT_»²ü‹´(.G*ìóg¨ç  Ý4¤Úc +-éÐÝpTQuÇ%Á«Kzu@(¬îXsCïT¼9ÌÜíº¨†®É‚†éÐß\(DU½ ÚôýàËŠ™¸z& ØÝÔî„@ ìÝÜÖ3à»dæJ ]Œ‰j•ðù¼ž×šEº… +-Ô‹î|j×3^„› Uó°»îÔxF:FÔ0dc3î„wd?o£$.à˜”Õ…ó~‘cƒ éî›ÅJJ)q®ÕÝùÚ˜ÍPuKØßP°»Ÿ(*±1îZ(Ôl@Rÿ¤3Ò øg&-t°ÔÁóßQm›Dù–Ý餧ûaü{PowT~d‚GçBHQ5QAP)¡ÝÕBõ«%0ÕÝÅ”$ ¸Vͱõ« 3 P~ˆèÀ¨NžÇõ È´ÁÆ [“§Aÿ3¼ÉŸcw)Ñ_c1Û]ÞV£ŒÔÕÑ£kMæÐì²µ`TVLz €—f—^5òq• ¿˜!ôÁª&4ú ?g±>ɺ¸•ž"Ád¾Á‘ì®a]ù¼cÑöJèÅ~CÑ‘)YÕ4 4ÙÈÚõ´E7‘ØLÞs+ æQpȹ»HCuÌÆîpåË÷—ïØÍ¿° ;/u†—ØÎÁ´¤E7+8õðêâùÒ…sbQBZjÿhÑJZl~Ì¿°ŸŽ )Õm]NšóÉ»ª™‡ucQAPasé·§–…s +-#–bS%0ÏÁ± ¾¯Ÿ ‹Õÿ 0>N_pÒÅ·§–„ra)5AnÚygVE7áž{8•èïçàÖËevß“o]#'hy‰™©µ¦—†vfV$Úý›‰cu‡š@Nª›‹dvˆ™òíåÛÐkö üo_PB5*!L\m…â‡áTF*6DSÀ°ŸzhW)6¯¾Ì(2?ªX$/=K¦/$M^îÝÑÄ´£‘!}  +-  (2=JWftƒ’螀q&àÖɺª0=M^qƒœŠxfYgv…“ïÐź­ŸÚÎÀ°Ÿ(4CSewŠ^M>0MZh® ’>2( ÀK;YÙÍ¿¯ž„ugXàtbQ@2&—ÛÒ…vhZL@".‘Ž{hW(HÜöÛÒȼ°£!-:Åö6í%1?Oas†™Ñô£’‹þ±\O +-¯ƒ×¨R½Šˆ&â 0 @€Á8E‘è€ðHŒgIbˆ„ÓR  É qWå8/Í¿†ÔZfûN`ÓÁáH¯:\<\™£È;þ–wƒøËÙÀwÂ^éq1’‰/d¨p˜¡|Ý[$îª,ØÞ¹‚À ÿ Æj¥+?¤ÂrÒ2ýo\´*ïXÄAßézA0Ð÷×ð…PUqª›v-™Š×«7á])©‹e"­&dh©§³ Õ÷VýîŒøG§ÙÁswš]wŠ€jÔ:í®F&Üš‰˜Q}h.ךX©2"§ºk9ÚüÔf‚èeÛ[3Bo`f”¡Z+ñéWyUü µÀºî<6ºv…´;ãH×Q}oÐZNu`F6Žƒ¸±§ŸxU¦¢š#î˜EìamËP ­6uiöˆ¹~l¨%= ™sUËhßÜyªAÕ4F5ãC¿=ÕlãêJ Ìæ'PÏà]AR“VéD‡ÝÍŒòhÓ@K|ÅB.¢6Ô² ׸º¹âWÄ7¯•LÖù›»õ@uÅ&€Fukt?ÍËöÈÌÈ ˆ&ˆhý˜Yà]T’G„’iE¨ñåÄßÜ)©¬Ÿ¨¡–£§G( µÜ"† ‚˜.óŸ;Ù¦Âh-&8ããà·J™—©eQg3A}¼›»X*ÔЖ!°³Eja^Vª*Ð •ÎçÎh’燣Zá@qpò0¿¢î2c~|º7xç/ÿG]‘œèðÝAmum©‡Oˆb Œðù¢à2̬V!lŽŽj ¨.P²½‹Ýjû›4ø'¹ª9p¼óHÄ—üëúA·N+@t7È–¦Ç„F¶jfFØ]í¨Ž.'+ê¨î ôc›íÅÓÈ­Ôâð®x8±u·’~”99¦ÑÑrÈÜ í,0iò‚™sðÆîJ2~Y‹-c÷ׄbTgU÷­#QCŽ®%¼ë&¥Ââ ðånTJ1¹­Ð1Q»+S ’âèa;Ÿ +-ÁòâFw »;³ËG5Û2@F5yu÷f)3!‹m"ÞÕBà—Ë3¡åÑÝZg[kçÛAvšLïÄVw°;¨m¦ñ©.Üç5Õ"u«-„C’uûÙ‡aK•‘¨³Ê¢@ŠTËÐ]û·&Ñû1Ma¥*`¦^a£Ã_³íOº»Ò¾ÂaÛø@é@¼Xº‰Õ,„;”²²«º•Ô\m±— ×-¶BwÁELGfs)ÙkÕ¼3ý33ôó?Zá û«±õdÖ¶ŒOéÞsXº‘rH—Þ]§êï²ñ’pÌÂUtתJ—akA2š \ÀL»­]ߪ@ø :’Þgk/¼À¸˜"‡Úh~¸AŒ±ú8$iæ_ÕMbÍÕÛ²Ø(FùٶÊA -ïSdöVŽ!zÙá b㕲u3.`NýhwÉ4°Iæµ!Õ1K£§Zo­!y0äàà˜d†‹yûøø0Zò:Y£ w•HQ ï8WpÊF™ e‡ðqüª”öÒûÈÇA×úÉvs]ÄeéL·Ú}=l=ôœ¨º-áu¼ß̇Caè$󢕪dfzΌևìÂmwY8à(³Rëû/…d¡S¢’°¨`ŽÌÁ»eš4;w¦KúÑ“¸mö £‹ãi’ ‰Òÿ ±í9ÃjÔê÷û4ÓîDwþ‡©ö”Ê}2)GÕª»‡drÐÀn û¼žQ”ù/ã”Þgs:÷±»d-eÇŠû'à ³JLºVk²TÝgzRH%…ͨî¨+ðbÐH™²é9ç2n c^L®óï&ær˜R¨Ô ,ä EUgzŸ°ÀÎ &/:FR`n}Óɾ±¤–ˆyk]PC8-$§¸§•ƒp^L=n€“¥¶ÅÓÞç·$ +- '0;FSao}‹š²¥—ˆzl^PD8.%ÀñëãØ̾­œ‰vd2@Pbt‡™«¼Ê×âêÿÙÍ¿8+'0;GŒþþýÓɾ²¥—‰zl^QD9.% ÉÕýþþæÜÑÃG8VhzåÕȹ©—1;GTúÒ{l^QE9/&l‘£¹¨–„q^MK\ný³¢ (1<Üøâm_ (ŠweS&u‡š¬¼Ëö¬šˆÊýòîèâÛÒȽ±¥—‰{m_RE:çô£~kY)Ž ²ÁÏÛĵ¥“n\L ¿ÊÔÜãéîòâÚÒȽ±¤*7©.;K\o¾¯ž‹ygUE62‹™§³¿ÊÓñÑ0r…—äeSCQbËØâÔǸ ¦³¾ÉÓÛâèü÷õñíçáÚÑǼ°¤–ˆzlÝÒÄ´£‘*ÂÐÁ²¡1|Š˜¥²¾ÈÒÚâèíññìçàÙÐƼ°£–ˆzl^Q'4BRcvˆšùáÖɺ©—„rÇõš‡ucS`n±½ÈÑÚáçíñõ÷ùðìæàØÏÆ»¯¢•‡yk#//#'0;FR^ly‡•¢®ºÅÎ×ßåëïóöùóïêäÝÖÍø¬Ÿ’„wi\OC8+'0:EQ]kx†“ ­¹ÄÍÖÞòîéãÝÕÌÁ¶«ž‘ƒvh[NC8.%uêÑ8)6Eˆu'/9DP\jw…’Ÿ¬·ÂÌÕÝüù÷õòíèãÜÔÊÀµ©œ‚tgZNB7.%.¶ÅÒÝçàÖȹ !ÓÒŵ¥“€ +-&/8CO[hvƒª¶ÁËÔÜãèñíèáÚÒÉ¿´¨›Ž€sfYMA7-$Ù;®œŠw1?UE%.7BNZgtœ¨´¿ÉÒôþûù÷ôðìçàÙÑȽ²¦™ŒrdXK@6,$*(5D±©%-7ALYer€š¦²½ÈÑÙëåßØÏƼ°¤˜Š}pcVJ?5+# 9Õȹ¨–ƒp^!,:I[mèýÐkYI9,! $,6@KWdq~‹˜¤°¼ÆÏØïêäÞÖÎĺ®¢–‰{naUI>4*" (4̾®œ‰$0?O`s†™«»ÊS #+4?JUbo|‰–¢®ºÄÍÖÝäêÜÕ̸¬ ”‡yl_SG<2)" #ÜÑó¡|i5C "*3=HT`mz‡“ ¬·ÂÌôþñíèâÛÓÊÁ¶ªž‘„wj^QF;1)!Ÿ±éàÔǸ§•‚o +9HYl’¤µÅÒ !)2N_r…—ªºÉõðêáÖÊ»«™‡tb (0:DP\hu‚›§³¾ÈÑØàæüþåß×ÏƼ±¦™€sfZNC8/&Òþ Ž{hVE6'4BSex‹¯¿Íç '/8BNYfrŒ™¥°»ÅÎ×ÞäéîòþôñíéãÝÕÍĺ¯£—Š}pdWLA7-%Æ·¦”n[J;+8GXj}£´Ä‹y%-6@KWcp}‰–¢®¹ÃÌÕÜâèíñô÷ôðìçâÛÓËÁ·¬ ”ˆ{naUJ?5,$ +-q„â×˼«™‡ta#.»ÒÄ´£ ×˼¬šˆubQA3&+4=HR^jv‚Žš¦±»ÅÍÕÜãèíðôöóðìèâÜÕÍĺ°¥™th\QF<3* +-€Þƒp]L<.",9IZl€“¥¶ïçn ")2;EO[fr~Š–¢­¸ÁÊÓÚàæëïõòïêæàÙÒÊÁ·¬¡•‰}q( +-DãÙ̾­›2&˜ªz LWbnzÇÐ×Þäéíñô÷…ymaVK@7.& O`r…˜©ºÐ²¡Î»«™†taP@5?IT_¥°ºÄÌÔÛáçëïóõøøõóïëçáÛÔÌú¯¤™ui^RH>4,$!èßÔÇ:-ÞÓm#+359HçÞÒŵ¤8+ Ž¡²ÂÐÒŵ¤: EOZeq|ˆ“Ÿ©´½ÆÎÖþèâÝÖÏƽ´©ž“ˆ|peYOD;2*#SdwŠœùÚÎÀ°(8AKValwƒŽš¥¯¹Âéíñ˹¯¥šŽƒwl`UKA8/'!#/=M¸ÇÕàáÖɺª˜…r`N?0 %-5>GQ\gr~‰• ª´¾úüþÝÖÏǾµ« •Š~rg\QG=4,%æþ³¡|iž°ÀÎ #*2:CMWbmy„äúøöôñíéåßÙÒ˺°¦›„ynbWMC:1)"ÌØãý¿¯ž‹xfTC  '.6?IS]htŠ• ª´½ÆÎÕÜáõòïëçâÜÖÎǾµ«¡–‹ti^SI?6.'  ]ýüú>$+3;DNYcny…š¥¯¸ÁÊÑØÞäèìðóøöóðíéäßØÒʹ°¦›…zodYND;3+$² ƒN¨b¤N)33 ´áò €`Ę& € Y–ˆ1Ê@@„7™ ‡6$óÕZ$2cf—Æ{<&+ãíre YÆÁÉïHtw—PfjÒw~¡µÞfl{Ò HsCÚù¾Ä£»é€SýÕçššüYƦ…Dz£Võ¢fà»VG‰¶É ãfÿÆ…mæ†Sª%Ô•wŽ'ì&ֺâ‚@SÖ2¨ïNhI3ŠñÂëÝÝk¬=æyu¼`Ʋ·lƒ.¤=’.˜L2|#v|7˜c\âÀK¡y¾ù•ªw̲¡Br”»óÇÀ1[¦{ßÝèTï@Ý݃°~ˆJ0}ŠÍ¹SªKjû<†¹!ÜÀ;ÇB¾¨ã‰Yêñ0?¯Õ2¨ +-ÝCç»Ë—èEoÍ€»—ZirªØ.}ä¿aª…êÿ…th¿"@à†R©MÀvAÀ7¶×Ú‘§’;ÞÑ]æ ¼yzïšQ†wV· Rö +-†¯Â •VW‘mªk¾e¤úù=¨TOΉîÐå~Û ‘GAWêt•¹cˆ2ÌÐS÷ºó%ƒâ]ÞQÖað +-T˜1$*Qý~!;òÍT¸Óš–CrÏ`¡ïЩ Ó[™»Cº#Ö!Ò;úT-Û2qÑ|]ˆêÝ…¤G¿ô Z#¨T7¹‘åviSeîtÐf!½Û¾«ê`à]»Jÿë¦Eà6P×¢‡¨F@þVæSK“šR]¬jªKìhìp¾Æ#æc†ð¨O†î¬ãшøš1ïÈ«:lLSоäe¯ƒžCTSïŽF矠ÎY”êf†ä¼HfT‘ü–!ß2>igºÃì)éÝú׌_„w«’¬êÚöi¼+5͆_)$Xs:Q-ÐÕ{î2”ò0EMIÃÐ\85ÙO˜<¸EH>uÑܦ;#Ū#V5-áum(„†WÕ\-ÜœJü #%=¢:ƒ¾ÌÃ0’!ad†¿fY€šìëî ‡õú)w?Œ˜îüõQzYÕ|¾J¡Ê¨à’øâ0„ˆê483EÝ¥©;H®Ëºwâ©øÔG¶ŒŒáª¤ˆU=vIÑbTèP#P,{™ [ò…”u‘¯F+Ëê Ø<ŒØ•0;õé8#, n5VÍà"pˆ4x4Ví…z‚ž*„ÌèãV +- tμöZâþÅ¢i鈰€ {ƒ°>rVpê´00;^5afÔ‡H„j¥pYغž¹uÒyî2&ŠMº n—ëœp˜;Zª»…3˜†öSG§¹\uVA°føB$£ïLî‰MD! D2ÿ, !ªeYR(eÁÂ``Ü¡!Š}eñØœaΛr7{swjÚV†«, ïJú¢Äi)|¡»Å~† +-?ÌèáÊ$ª?C"¾Q âˆÌhCà‡ÎÖèaJÊ —1-à aÊ Í¾Sw"œ‡7t—Ò=&Ï^í³~K0xÙËx$¸„áOq½|¢wÕÝfî~¹\%ÝÝ¢ïvLÜ+8ÌLˆªs}-cƒ«xÌ2·Á¯½Œ“Ýø¹3¶Áüýeñ.Eæ®DŒé +-ï^‹"Í¡Ýs¢K@M²µ ÌŽtJ?³3Îd/<ƒâqÆÿ>¢FÒê“Ž§· ÞQ¦LФ(­z˘՟>UêU)S•Gô#ƒ=¿9A`-3&0öŽ¹{%aÅ«z¬ï w‚Tέ,…0Æ >ö­­eˆ+LͽŒ°ìZÉŽ!:ÌÈ„-E K¿ ÉBLvŽû+u”«ÎAàÚ©öÎzx—ùÔŸU½šS¾cƒÏ'1ئfÉÃà@©¹Ó턵LUž¿a²ËŒóAZ»T(ÖíäÒS;}ê3ݪ†>fF+¾£¥°0 NG9YÑ­œe‚[†Så‰:sz“‘º¿ž_=Ì€ý{Ù¥šíTCäµõˆH¸4öª¹+v‹}Ø 㘡סϬŽMºÈoŠ[†_¨È0# M§»Ÿº¿¬2ã£C¨ žjy¶×µ¦>K‡žšûÔxÍž™Q뻺:ÇíþðIÅ´#&1aF”©Ê“ü2d¬@fT–®h:Árª§4JŒÏ»Þ»EÉÝâ;tþÌ…fšËâøKÕ]†šzÀ„øÓk^7Ê ì?è>Õh`Fè ï:%a:‰z_ˆT¹ó_îóÎgŽôù<ª)³œI—Áß2ä0ƒs™¦ ÓðÊ ×I'þL_§:tålÝíåå.?˜î©~Ü]  s/ùªÑ›ì­È¨¶Šéfh5u”ôˆqöµ¡®Xí^YñÅ=ïÄ•;’ÞïPßaݼB[tZ$E +-f´SL¡*3¸ì˜íåw²—RÅ, »5Þ‘;¡ñÿàà±oP&íAÈÌ»SfÌÆŽQñVí׌²#‹wÖ\;í;Ö2qî?ý‚ñtf´Ë8ï2ã¼ÎXЬ–£4KÞ&ç®(Ú Š·¥è»ê—ÅþžÃþ23ÂíÁ ÆE§Ì¨øiÎXÚêÑÐ +-æf]žK[Þ¡5" kù.„nã †¶jT¿L«J"{»ÂŒ' §Ì€cSBmÖ|{c^ÏÐÚ8%Ö@Íÿ˜ÕúλÔQË®]oŠô]ÅaúâG5dšhfÁŒ¹›+mJ–}¥Ò˜sTJKE’wá!$èN=HÐI ßïtm€n¯s!ñê¨kSfܱ#DCš¬ò<÷g éã¦ú¥Ÿyá]5¹Æ8±Zú.“©ÈEb!9 +-Ìyé;æ?¸1zaÆΘsìøÓ´æ(.RCú©,rÊÙªØýsøÔ{ …w’‘e·Åwàêžœ;ž@ gdÝû€Y0[š£U¤ú^å¸O£¹Äƾ áȪ1¼»›Œ3žç»h‰¹i•, ät‚THB`†ãÍ0ÃCk‡†Ô"á˜Y2ª•©#»ñ%¼£s'8*4$øîA¤às~l!‰”8®Ãµ=H¦Ù5Ûy @b/#váôŠ¬A÷”Ø.ï@ÉHóno2µ&~,¤á4ép¾F p*$Y—qTÐICÂN@0Œí$aüfæ™zˆÀóv„$†¹ËKug§¨F¾;D>,$¡Ø"ù{k¡ü•½¯c Ö…¿ŒŽô %1@Pb½÷9,! !(/7@JT^itŠ•Ÿª³½ÅÍÔÛàöþîêæáÛÕÍƽ´ª –‹€ui_TJ@7/(! &3AQcvˆG8+ø +- %,4FOYcmw‹•Ÿ¨±ºÂÉÐ×ÜáæêîñôñîëçãÞØÒËļ³ª¡—ƒxndZPG>6/("æàÕǸ§ÞÓÆ$*19AJS\fpz„Ž˜¡«³¼ÄËÒØóöøöôòïìèäßÙÓÍƾ¶­¤š†|rg]TKB92+$3BRdvŠœ®`O>!ÿgU &-4FOXbku‰“œ¦®·¿ÆÍÓÙÞãèëïòåàÛÕÏÈÁ¹±¨Ÿ•‹wndZQH?70)# +-8GXk7'4þþ$*19@IR[dnx‚‹•ž§°¸ÀÇÎÔÚßäñíêæáÜÖÐɺ²© —Ž„zpf]SJB:2+% eÕȹ¨k~‘¤µ +-  &,3;CKT]fpzƒ– ¨±¹ÁÈÏïëçâÝ×ÑÊû³«¢™†|ri_VMD<4-'!#/>M_ëãÙ̽-;KÉÖáê"(.5=EMV_hr{…Ž˜¡©²ÝöñíéäßÙÓÌĽµ¬£š‘‡~tkaXOF>7/ $Ùã#)07>FOXajs}†™¢«´¼ÄÌÓÚàåÿÇ¿¶®¥œ’‰vlcZQH@81+$ÛåìóÝÑÄ%+18@HPYbkt~¶¿ÈÐ×ÞÚ§ž”‹wne\SJB:3,& êáÖɹ¨–ƒp]K;-"õÍ¿¯ &,3:AIQZclv€‰“ž¨²»ÅÎôæàÙÐȾµ«¡—ƒyof]TKC<4.'" ,:Jºª—…q_ "'-4;BJS[enxƒ˜£®¹ÃÍÖÿèáÙÐƆ|rh^UME=5/(#)6EUhþüúøóíæÜÓ70)$2š¬7 û5( #)/6=ENXbmy†“ ®ºÆÑÛäëæÝÔɽ±¤—Š}qf[%ÕÿÈo!ÿ $*08@IS_kx†”£±¾ËÖðéáØÍÁ´¦˜Š|obWLC +-0”n\J +-  %,40\n‚•§¹ÈÕáêð #-9GWh{Ÿ Ž|jYI;.$RB3/¬¼ËØRdþ:J\n”Ä´¢|iWE3%0«þþþâØË%)6Ǹ¦”m[Vi|¢„—©ºÊ×âþvý« +9I[m€”¦7 ,:JÉÖâëñéàÕÇ·¦“lYH8üŠ .=M+9IZm•§ýüùõðéßÔƶ¤‘}j¶Å¡Ž{h%1@®¿ÎÚä*8HZm€”§¸ÈûùõðèßÓÅ´¢{hUD(5DT¥’+DUgzŽ ²ÂlZI9+ *7GYlïèÞÒó¡ŽzfTC3&ÌØp]L­½Ì]ÏÀ°ŠvbP?0$þ£‘ÁÏóíåÛο®œˆuaO>/#Õȹ§•ÿÚ;­›‡s`N=." ˼«™†üìäÙͽ¬š†r_M<.!ÛÎÀ¯ŠwcQ.ƒK¨ÂœL)4 ˜Â €àá@¤«=`q‡9ˆ"!@XÞUJÐ;CiEŸ[ÝÝDwˆd>ä/ë†i”»Û²2šö`Zäž-¨‰D¿‡ËòYòz·U¤ÈC™½†¼.)ç.d¤hôn* +-@‚§†ÏÇt_‘ÑŸ2RXÏÄ0 .4ô.{§ýŠê XL·ap÷ÄÔð‰T%c{?¦ºûŠ§«Ó´Ý {¹K ½ NEË~ϵáGí8q wl]PTQâwQÛ šG 7ô7'bô#e…‡2?Cïò†¶”˜F}É Èb*çŽMj¸¹äc:ñ0¨Ê ØH#¦©³¬'´˜?„Þ…¢vÄ£eBt,Lºôb:ÏÈáˆvà :âaXA l®å¹ITòBïSÖWbôqجcºJ{l1 ?“xÞ°cb‚Ž3*O +-ÿÔ<ônô˜€cåe×æ&LvnE—Ã’xš†à¥;®´T¼áçàÚ6jíÿ$…}ù{×äiKU¼=ú„ö~Öñ±Ž5ý±´âa: +-Q*Š\y$4.u²¸±^âô®ÓŠÜ¹äLÍšÌï±s×Ï:’H’aGu,¹ÛS°§ò°¸d +-•!¼õ?`÷_|nø}Ù2€?ö…ÕTH ìQJ‘Þ½yÊ é`^²0ü ÉaZ57¤ \¦jìŸJËß{‡—UJŸ¿¸‰ùÞ¤•*}¨Ò‡€ Ò…W3ñP~R{2‚‹í#Ÿ«ÿ»·‚Dµù£ª5Иո i>w]R]Rlòt—³;æ–œD,¥Ú>’sΠZÒ-½M½$~Î<Ã+Þ^îñ^ø®Z*¾±79¸Œ”ÏjEÒ~ø2´ØbGñj¬Wjûk‰ŒsQý ˆä­0e ̶hGˆÐNjYÞ…;ÉIÙu+ÔÝ ¡ZÃeèõW÷’”¡–çÜ`w%BFô¡™ .V˧ŽëSX¦9lšå]Â2ËÑ>$¸Ô=.Ã}“ÒÔT&»K®«Ògfæ¹e¥:8È2èƒÜY8œ»ì|ÈÆëCO»Úœ)L(ž\¦™³¸üDÔ4ºCÇeTR­ÎìÎE–œÐÇd»Ž9Ù_!½C YFýe%$ÌkmEùÍ–*®:!ï>mF²ÑÐçŽC kÔÊc\“Å¥bwù6ÑCº3©Ì ²ŒQÐ/í{/LÙ>gIè HãlF”!•ˆ¦!—³ºCn_«dw Dk¡'‰0x\Ÿdw;A ´6ÌÞ„ÿþeôÓ•>°Œ| ãàƒ’£Êh ß]⚺Lß©°±ed›÷Åaªîªò×w%G'ÙÃeŸ¹S:á0&ûîò3x@ÄdC¼S(þ‚|TÈa3Dê]»RpèêžirV´÷Ø—0%µL +-/HU `2Ý9ØÝb°úïL¹,8H´'Ë"7qÃú‰É7$U5#Óªw×;Ð>»U…B³ ER"’QþJÔäGh[­aðÓ¨ggœÜV!Ðn©â*;JgÓ¯fL§Æ‘ØmÓû®ò»3gÕ˜z‡ôÅ–Í¡I¡NÙëŠ\7LY ð£=MV5¦¶3¢W1¼cÉ J&áщ À¿»VG3‘ +-$Ò°ÞáÏn“³+xí1¼d²w‰3MVTî“žš’7A )™9šÛõ9ʉ@e˜´.Ô¿»xõ.Øäk dËè÷¼IÉչ㓺©ÚËÎpN +-˜¦3÷W„iÞFfl¹£;/•¡ÔÔ§$ò˜š¡«ÞÑOÌèÆ£¨]j-caˆ9mÖ¤Dv!±JR‚À +-KxkÎ)#„@'vrèNÄïˆ~.ºêæwgL>80òW¹"¦ëZÆûˆ§fJSwœL¦­âs͉À€:f4̘z¤d¨Ë,•2¡áwv­wå#bÁä¯oÄôdŽNMS;6\‰)}¹²Jvç”’kÙ™€Ô›€iÿ –’ÕZF$Pº[»;3Âïá]5z·…V^ñ–¡:ðuã³³kÇVêxO“H®ùÆ’ý‰Sœ©C¸Qb!3<R™©~é÷»kÀ𻅼ЉÎÙ-Z<À{…´:Æ +-¢,ƒínÞ’f)3P#Ö|]®§ÎÏ2Žw§ûw„͈ãõn!ß™h0co—Á(¹wí¿ +-µ¼à'9ËRy`6¦±õ98™A +-0‹UdeŸî"°Œ1"¿k +-ZµmAï˜/ÌhAB ¢ÌÒT݉öÊ¢ÙèáYf|Ïd-#Q,C±„CH¤-ße +- t˜A·ÖƒçÄ é#¥ZP”V$,ÿöñëâÖɹ¨•nZI9+ sa\ȸ§”€ŠìdR}jXF7*àÕÇ·¥’kXq¢|hVEvŠ¯þ±éà~jWE6(ûàÔÇ·¦“€lZDUgz?Óŵ£|iVUÊ’¤¶È¹¨–ÄgU‰ítaO>0$\o‚ÞÒÄBóíŸò yeSÿïçÞÒÄ´wÏubPбŸ‹xdQ@1%(mïɺ©—ƒp]LæÜÏÁ°žŠvcå»*åÛÏÀ¯œ‰ubOM_r…#ýѲ¡óíåÚο®›ˆt`N=/I[ÕÏÁ†™«¼ÌØãóíäÚο;­š‡s_M<."6EWþhVDª˜…qÙ̽¬™…r3BRøÔ'4CTgz ²òìãØ˼«˜„p]K; #ìê7FWðiVE6ëãØÊ»©—ƒo\J:,  +-s`N[n•§åÛö¨•‚n[žŠwd` ¹§”mZH8*ó¡Ž{g?PbuˆÉº¨–ƒÕȸG1›®¾’~kXG7*èßÓ¥’~kXF6)„—ý(5à +9HZl™…Úο¯h®œ‰!,©ºÉ=´¢{gTC4&±ŸŒyN`s†þêáÕȸçÞÑó zfS£²Ÿ‚Õ&3 yf ¥è,6EWi}£ÚÍÏÀ¯†sÈÕà^Lc—©»È¸§+² yfT‡ä +-endstream endobj 26 0 obj <>stream +- +-}Ïþ0Â,ðcv‰œYlù¯ŠvcP,:K\ñµ=M_äTðÞ| ?Pbv‰À¯‰gz¡ÉVh|£´º¨þ*7GYk“¥·ˆubOɳ5þ·ÆÁR!-ìþÏÁ°ž‹wýþUh{>Oatˆ›­¾Í¾þýýüüüûüüüýýþ %2ARd~dwâØÊ»ª—„-üüûûúúùùùùøùùùùúúûûü0 ‚بB­JÕÌ H +-€à„1–Ó Y FAŒ B X¾pÕJsšE¥PHöÄà…ƒ©Ú}AùzGÞÙs;o1¹;)¿»»Èí"±Œ‡€+î}å)•øGàØÃ'=—ëø¥!(è}c*Sòë­û‚zø-8„ar»vÐKoÉÕ;º©âÑ52£èÎz¨Ü=‡ávíZÐ]ÆO^àö6¨’ ÕÕ/È›¢D|ì¾ æI2ª!i¹¶“YöŽÆ´Gràk@LÛto»yrg‡ž7@`û.o‘~2;¾¸WrˆÅâR]k÷“ asaìÐ;éÓPM©OqKî^<±@y˨‰濫‚4¦‰‹ÅäD—d„ì/ʾî úÂåNƒÞý(ŠRy (%ó™Ëب±¡ç[Æ{ˆ¢©¡jLïBºÒgcRýÚ}Á~w×2õ ÿ+Ä:›<½ %î»ä•P‹!qÔ˜¦!ý fL2]Ѐ¤8`1n÷'„u'ªš¿Däy?Õ" &Œ°À†1{åÒ¡VðU£/$µÞU0£r|¦úMÜî N z7E¸ÑøÀ›îÚ¬Ü öz#hŒ:Sf¸¢E8<œ}ÆØ™ëÝÔ-ôZÐE‹‡9šËcöf¥HG©Ïg¤˜?äÄJ eµû‚ ÁtÇ”-l‚)†"u«r —qŸ¤cIÿÅ-°ãbª££RШég÷ÿ„ÞÉ­’jœ¢š/nA‡^ÆÕHVÅÃS’«yTÙ}*¬“Xì¾ m¡wõXRíÏj‰Vó2З±»ð©ЂhæO¢©ÆØ}Ás†Þ!«æHµ{h¯ñ2Ø}3\wG9íÓä“qαû‚ŠBïgIu[­ËL¹ÆËÐú!ÍNÿ¼˜éIJù:©3PAA5 ‚°û‚ó ½»^!Õ1;Ùåe©kÖ$x\ûu~Ôn1Õ¤A»/x8èPjkå¡OóÞñ &¯®ÔOHL·^†y,Ò/G©(ç¾ËnÃÇB÷)“”Ý=Vͬû‚ÍÐþýA†d&…IÆBÊëcßvŠÃàÁµ9½ŒC<˔ݲâKè b+ƒ0+§î ªz·Õ³¬µh­ ”†‚“x?J"£ŒJ"í2º${weðMm| +-VO8û‚*RfIpwWTP8Ž×3q“Àw#;Ì«‚öè2ÝU1XR'¥ð3`@P<ÞdFhÀо¯”¥›2‹Z&¦‡ç°÷2R&ñŸ‚${/ö|ï¦ã1$9§Jv9P‰à:Ö,ôÎÌôrÅ%©ÈS¤è™¿$ý'5HÓï?lxL ð0áó•‚DwÁƒÞQ2Ž:P ù'H'TþþbŽƒ?(P—¤‰Ñdñ(j!ì“­ß +-©¾¦TSƒžeAwŠë¸ÝînÌ®‹)êÄ´è7™@·îºŸ¤ÉÔ¾ùÑ H„aª›‘€‡ÙŠ!}Ž^‚'F–YÐBÂt÷ól•Ã$ Ók^öº ÖQšcRHdN9¢U¦ä™,…Äòàš¡ïQ~þR”º#4è]¡NÍÏÈDÆFûP-¿ì5«ˆ2!n Ì?,ÇþbH“±d|ɇ‚äàÞSÑȇk– ½3OíY“Í“ÃpRpÊ6âà w4i•¤ŠJ‹¢JÀRËî˜hTt's ‚z×%uªF5áÿ毹‡jíÇîŽA>ª»S…ñ2 +-WC1 +-o±»€ÐýÝ}r™ ½P‚l À·‘J›¿ú‡j3épR:Íæ´“¥4­gzŒ +-è€o‚fgDóW|¨öÉþ +-CF4ÕÞ& Db¸­Òkì;²JEw…Þí£v¦kp¢ñLž~€,£ÐlÔ^ðwKš•Z^\1ãCò¾¤‹ù†ötg¢}*ºÓ›AÒäàî€RYRña½O«UݙՋ[†ÐüÕa ×bª +-²‰É°F2ŸMTtwŸÈ\ƒéî/ê°å0a);TÁ ´™lööŸK[@2©6Ák½gçš•ñ©Ñëê­Bï†RŸ@ Õål m¬ÒÿÈèâŸ\ ÿǵšê1.ël8â9‚ÈXUÆÈÃÐ;0Ó U|ø7— ‘êôI É}S}±=ø2\æ\*ºë2ôPB‹¯äæö”Tï.ªOYÛT‡Íˆ¶'iqÅ^§È:ÒÀô´‹†–ôN§¨µ¸;?~Rn“'f0HõB"Mµ‡y÷ªºñÞoGÎðŠˆîêz—„Z&(‡$­©îušæIÛ€˜TÇiªûbÉr kÆîbÛ³.vˆVQtGùâz—aɵ^û+—Ò4ñœà/ê±µ IsØ]ù^Q•,¬‹¢;¼Âݲ*jì-PÉ>Õ&Sd‡2`W•!±!ìð°;Âö—EÚ;:wû£(º‹F¸»a)GÕ÷ø©–F&')CÚmªA%-L¯Åëà2­Ph6Ÿ.¤rÐ_^±“v3êΡ¡ÐoyuW7S'Ò…ðÚTE %R†Äýu|n ©?»k¢ Uöèл¤,Ÿå/L¨;ŠÜdŠéOt¶©{/7¦Š@@†ö?4Т#XÓhïtÕ…4Añ$4¦»eª§gRwž¬@Ü‚/Ë^ÑDá#7¦¤eOu€Ý9ü 鞬$gBËÈ6oü„h=Õûúùø÷ööõõõôõõõöö÷øùúû„˜ª»ÊØâ뻪EVð÷õôóòñðïïïïîïïïïðñòóôõ÷IZm”§¸ÈÕ8Dz¡zgúø÷õóñïíìêéèçççæçççèéêìíïñóõÿj}¿¯ëÛwdQ@2îëéæäâàßÞÝÝÜÝÝÞßàâäæéëîñÿ¡Â±™«¼ËÙtûúøäáÝÚ×ÕÓÒÑÐÑÒÓÕ×ÚÝáøwŠ°ÀÏÛ殿„-òîêæáÜ×ÓÏËÈÆÄÃÂÁÂÃÄÆÈËÏÓÿ­¾ÍÙþþüûùöóïêåßÙÓÍǽº·´³±±°±±³´·º½ÂÇÍÓÙßöñ”*ïðëåÞ×ÐÈÁº´®©¦£¡ŸžžžžŸ¡£¦©®´ºÁÈÐ×ÞåHº©–EVi|ïççàØÏƽ´¬¥ž˜”‘ŽŒ‹ŠŠŠ‰ŠŠŠ‹ŒŽ‘”˜ž¥¬´½ÆÏضÆÓÙ̽)7GXÐôðêãÛÑǽ²¨ž•Ž‡‚~{ywvwy{~‚‡Ž•ž¨²½ÇúÖËÀ´§œ†}vpkhfdcbcdfhkpv}†œ§´ÀËÖ2ÏþÛÑŸ«ƒxnf_ZVSRQPPOPPQRSVZ_fnxƒ«¸ÅÑÿ#/>Nat‡ =M×n[âØÌ¿±¢”…wk`WPJFCA@???>???@ACFJPW`kw…”¢±¿;L^q„˜ª(Ç·¥“kYº«›‹|m`TJB<8521000/0001258,ºÅ¨®æÇ‹¿þÏ1MÓ¿û‚’½Ë •´’z%Z¬+t}!,Ð^H`š ÍÔ¥0/Ýe—·û‚)«¯.½ƒ³~Úo/`%¦§&­jâ®Ð&?ð¨k B°@ kFÓ_Øé0ƒ†x_0ˆÀÝuã/áq\E¢š™ÕU{!›i¶™–îîÜkdP§;ƒuw3¦=é^ðñÙ*ƒ‰ênwLhŒ²ê¶áPúcE..JwàU 0èí|Á +-ƒÞ•ËÂü¬ 2¦Â["WoÞ4/}à{”«Ý'Òþ:ê€%¦›l²”Sç Z›a ÃZú.^¸&u‹¼MΘvºÕ¯6Mp¢åE£ÆÔž¢†àœL]†aC =¦¤ÃÔÝÔOèÝØعª©éy""Éû¼ NôŒé,~§¿ì¼ Y&þ¨Iîu¾ Tt—–i³n¯°Ìu,HˆªlæZïHRËñYOÍ,—¿vœ³X*–ØÒñ£5Îêq m{÷—lz'¹'ýaÏH[唄³wÇ@úË/Õ­<ÿdW¸éбüõôbé®ÆÛ0BÝÙ•?«w˜•L+=t÷tzGô¿hØåiƒLE©»¢>.sn_Ú»ø[ É!\ó­tGý)¦sµQácë'Îë|¦·Ýp -[¶qDöŽ/¬òWFúß‚ò•ËJw½(7I¶ l¤î¼o>AÝ(0¶`^Ü}A·~KÈ­:é#î×Á~rWì8rA@L7ótÊ'n÷0„ûÔÒÙó!wÌDµÎ'ò±L¶Ú¸ßg$þÖù‚£Ú«I£\ÖŠÛÈoš»GUvóäÕót§Ó=i^ô.iÙ?Àg ùVŠ¾…‹!m͸âûƒACj$° +-þ!˜T!Ú}Áëêl!$¯Ñú™È³ý9r¢ë]t*ÙRÑPMS²œ&ñ¸)%ÂÔŒ!1žÑQ “sÜH—„ÎlÙ=N'{v_ð6Ö¡ˆý˜qÄYëbíEïžç×€”ñtP½b¸ƒ(1½B(õ$-y‡n´ú« Sâ|6v_0°½I†ÈæÇ ZÖcöTg¦wfí? ‡)âìaO_CØÅÓu‡ÑÇ;^ˈFcuD6ÉŽ¸Ïî j\GKH5ûqÜbO2 Ãv@ïNÕ»‰²èäze)¬i^ÎaÈÝ °XTKfy 8ÉÓÈL¤µÆ +-)6µ Ò›ˆta*ÕýÓ)ÖþÙÉ$1ÐÐ$ +9J±Ÿ‹wdR0?Obu‰œôp„åB«óò›:×Wp\ýcÉéexŒŸïÿ8¡³ÃGÕÇû -!'4DUhé€ <Ž n[I† jd÷òÏYþcÁ°+9IZn×u#ÂYI +9J[o‚tý§•„):—ÿŸ­‹ziYJ<0&BØÛÐô¥E9óÙ¼­žŽ#*Ë)ÚÐĶ¨˜‰yjåý9Ì¿²¤•†vhYL@ùö¤Ûº¼¯¡’ƒufXK?þ0>OaŸ‘‚teŠÜ7ÿŹ¬ž‚sÄþcvŠÿõòíçàØÎĸ«ždw‹ž±ÁÐÜçÿ¥ñìæß×Î÷«ïÑûÍeyŒÍ÷ªWbÏ–¢&J?œƒp{Ž>3'4Cüy +-<rdWJ>3)!†i€rdVíߎ€rdVI=3)!¼ +-6þcÖÍ·ªœŽ€rcVI=2) ËM +-6¥þ1‚Þ¨’ÝHC€ ² +-(!a! +-‚K °HŒf)Œ¢ !@„ `rñaNëOO†Ô»UÚEü¨þxð£êF|,ø禿3øxWøjŠS߉èÝMz‡Ì*ø(bìÓÇ$´U"žè2€:ƺx24ÁžQƒ‚k´È¼£‹áîˆõAî¹æî“\Ɔ‹¿,ð +-–H{ázgU®¾KWªzH”<¡Ó]ïKdÿ¾i–ƒ¬8d·Öºk'vÂ>|R¢Rß­ÞXw[€Õ^}@U°q*¦nÃ¥â!ÄÞ¨Æ4E6]jŽïD "ÕüDƒZ¤=¡JÊ(F½³sè‹s-¿3}.€h¥gH·ïP½“›Mñþ5ógbLqT@à÷‘ðÅÅ•Þ¹TÄ,;íî;Í wjµR€·5¨€E4º¸n'¼ºc÷I×Pr[ƳH¾óÆï- +-cF)èÉwò†íö›æ$ÉýH\ônm?¡@ÁY¥›þ4¸Bø¸¼;Àð¬Bï|-v,´c}#‡Ö…µZ3ëõíõ§öX 8&}‡6pwôºPAq‹iQ­®N]dTƒº U©d=V/ Lr£•<|)|çtÐÀº£Zòß2l¸ŽõA„¶¶U/£ÑŒUm]‚¥ÔëØa”çYý¥ðåú.–œÑ%ƒÞ%¹TY É½ ‚´Wn¼»îê]lFi¯€÷«¿0³ËóK®ïv6OœÞ5m¯Gâr{¢ÇÀfÌΚkaÃfüžÍ +IüpH‡m±^âèä¡íeÞUaYÖw\Kµ6´š°3bèÓ¦»»¬è.5ðH<¥ÔòÜÖ;'.ã6e› +-A‹› 7«ªt¼¬ï0¢n kç… wn¡üÏGâ„âL%¤Àa-‹7Bˆ«ô7*Ñ_eÀtÔQ/hP„‹­ïPqk_å‚3—ô>¦œPS[ØãAGš›Í*±‚þºo0¥D]T 9 6ôjKåÖã[ÏÆaƒ¥£mƒ0¶Ò„ªð>v’¨ôhPê]Sùrà\ …¨¦ìN†¹Q¤Xê:Qñ¿ÈŸóð(Ú ¤‘G ¥#E^Gs…¦9ÀÝ‘,M½kÊy1¦á ‘ŠhœˆzçtkX‡=jJçbŽ~ô`-ƒŽÎÑ¿ˆ„m…jküý¨Ææÿ¨Íé]S;“#\H®Á*t¾:Æ8*Ú4®ül]›?ñ±§‘—é%%ʇÙïL $­@ïȹÀGâ­Šî| +-ˆOTl*Õ +-~ýñ +-Ùq<_sì(‚• ²ü~²Ä,· +-jú·Y. Ð’ „b½‹ A*ºC>ŽVìr;LßOtq0.ŒY U±³þm¦‡Âµ÷AïÞØ4·j£ÃD ,V€¤3ÇdK —†å¯Ý—q­ut˜yï`~­)øBTpzkÁÜÙ–æ”ônfcé˜Ôµ?<2r cÿÉŒO×FŠ1••F‚.a:\ü\WŸF½`¿´:…1HYD\’‘¬;ò:èè/øÔ±«LJš&‚ö!Ùß6F½xy‘!„Þc¢‰E[LÑ_è¼Óm´É²qd;¡Ä˜Cä˜;?!CoÊíÝô.Ø&@ûûá?Ž7]¨ ëÐtÔìUð’–dÿ¸¦Çº”œ½LÄZy +-ïá|л*‘ +-*v$>ôU.8«7͇:ñzÕ„ÎE’-xàçA¼dž9ñ¡w“m úb†ó¶Üú’ qt3¬ N_#˜ð6«¶j´z@ &£š9«î3µDfE¾.$C *0k†`7-H«k8\Ñ]õÛêr)®¥Aïæ×å]IPg!{CÓÔ;§t¤î©Ì»Hˆ3ÄQ×°Üw°ùE½ éV:áú}YÄe Òa°²§!š¿Í²Çb,k±SHWf…R¬(Õ¨Vf(C¬àéÐ}å¡ùrœ¯GZ§ˆÒ…ØÖ×ñýÈÅÛ»Tæ:_ø•„ ô.XŒý¹3牳}  nÁÊQÍtÓ ,Ô ÿ¶qcU–ξ­›‡tcÖͶ©œŽqcUH=2( [n=/ÜvëåÞÖ̶©›pbUH<ºÉFXkÁµ©›~×tG¸ÎëåÞÕÌÁµ¨*ÈšŒ~pbTÿÕþ€ÖÝÕËÀ´*ä§ÕÍs`M +-Ô€Öo°‰v¬!öa (ò^5ýÐÁ…µó†_‘íW¶ +-_~þ ÕÛ"ôÛ*€ÖþF·ÿÁ¹NÐP@‘}ùd­"õy:;ð }iWÑOÕÇ·¦G<1?}¼¨Á>z'C*ב †1a„‚€ Œ€a€5œäÊßr˜<¸&å«÷¾K‰4ƒõÜc³”.ŸPË_ca”²v¥$¿ú®v™/c×òXÛ¤¯€¡3ò Û,-JïXs„¨J@hOÊÇepõõÝqÝ©…}.‡SüÅ6¼\P؆ÐÅN;áJSñmÃÒôÝÇ5(ìJ‰®úŸA×éc¬1åÄBÜ0ÙTÕ¬¬ ÏÆeèöÊà“Õ:Nc¬}|Ï!{VïRCirç )¢Ä~Û°À„h82œ¨Nõ]t'*p°L*i]­ |æ—‹¶Ð¤øì…wö® *ˆAPº›„™°ú‡5ƒ—Ř•Üƒ¸¶RùS"KylŽhÞYÆÝE›jH¥…¢)+õ±<4Ü:¢š8MHм[ CÄì³wF†å±ÙÚ(Yké2YCœü¬ô B‘‚Hg´»´è_eˆn¦äfâ4C>5ö ºÊóו‰k¯¨ï¼D˜Òn烵Æï« óï ‡‰’´PÊÙ¨ BF}÷¡[òÐL‘¶WN9†Äƒ;‡À;”)Í`P_dÏ_OÚƒ¯mT˜Ž~’bЃ¤)þ ìí–©ïüò2ÛB"ÇÂ%”‡ˆ¢ªd aJä6„Nó.(Ž#E42"„Ìac`QïTNón-†D´” +-V'¦3æRŒ)õUŒ.#¼; îÖá^?Þð +-—L[ç’V2&žh-ZÝD`€—ûêÎIÁg5*­ÈÞM1¤wyÇ7õîc»L\~áÆ5¹5‹)„e²/%SŒFÚIYCq¡BúºiÖ*Ž4pÑ^]¼œz7°¥Ó”´F¤Tl:qTP1f¼¸!KA÷å0l:­è%cšÈÖulÀ»æ©wÝ­&ÅÏÙ&Ò#ÒÌ +-Æ|œÊXzá¼:£Ri‹u+¾p1M#³–þŠ”š\Íתwæ«I±ÏjECá…ŸÐN7c:@Æè{¶¶ÆëoÖê0;ŪÛ|—!j°êˆ®/裸lßB_y£ã¢_—±Ù¤dT›÷+©ÞI¸H5Ü9Ñ‹ÞöæsdÙ2Ö§å‡\hµ!ºØpíFõ¬×˜§z7•ål×n°XŠ~oE±Ã\rPÍœ§qj™åFu–\†D:;í2È’RìVcøÓîØa`æÄEç$›Ž³ºh€æàJkSFõ„Wª©«bŸç/sKz! ›Â* +-MU0ãߟOÒxö“¼R’Nkļ˜·êrKá¥D¸Á÷É!1‚¾º÷žÕ2‚­ØZïÌWF@e·DSÉ›ë1 i€ãaéô¦é5dÀç²àx+ì:°r•Ó˜Uï^‡++g·Js +-¸búz¸FŒîÔcCDîBÂ&¸7ÐvkjµG+°e*Euw‘òÙÃc§Á÷9[n}+×;0‰£t¶ìÉM@ uaÕŠ÷„0Ë%‹Þ54[Ä}¼FØ…Uœˆ"ª+¯Ô5Npèh©<ÇXâ!´}zž2•#–0öä‘,¹Œ\2µK¸@Ô|a´¹æ2#;Õ» wª¹QôÛ…!mg©¿öå(*L‚•Äž)ëÊãetOmɧëÖ2å´]K&FúK(›!Ö°ƒß•[1³fø¹lš`à§Ê‘3V%,°ö·÷Odnlœwu9/alžx¡º»…UÝ.}'ï7&¯=yRÊ5²Q°9Ò]ôç(wÛΈs%f ÛÄÀ‚dÀˆôÚ³œB×>컆!wÒ_F©ô*׈³ Tqšž¹”1ûZ·|k•ëLõÒkíår«ÙVúN€n_`“ÃDîÐœå!{fóË@ÑžWgwm5µÌר˜¨jBp(Å4CQ“¤Pµ,•¡.¨)yç «Š”µ ¥ ½‘ë>Ò¥ð×±qè¯ï…ìC|HÉÏ; °ªRÚS·½­NûîjêÝ| CZf¬Ò}ÄB¢õ:*ôØG|«”ÌB“+óå Íq6ÍÓÐŒ.¦ÞÜ}Bœ· P_b˜ÞŠÖ:{³SûÑ2Od@dö#¾ƒPº;3¤Ly^扴׈ƒÂ;ÕËÙ¥%dT· cL"ãÀ2 hÆñaþx=9Q¾äZMPä(~aˆ8«¤ ïLí×fGðÝËQÌ &ÝstTÚŽ7L¬H­£ úKAyÑ]gvŽòñ³;Ÿ- +-aþ² ­o˜QtÔY‰xþW9/¦×”\G2>߉tMóÔjß^ó„„|šV9§†Û€s…ËàV¹ŽUŸï”Pô˜Aótw(¹Ö÷*&è¿ ž˜Þ–zx´˜²‡nJ×}õŽ«=Q‡¤Ë@ý‘X£Mí‘…Ô#à³"O.ìò屎M¿;¡¨w*±²8‚£fÁXï _¤ Új +-57× çO7@‡ï:wWó…EÃœõJ¢¢JwÔÖOÃzµÁÖ‚k_#Јì7;œßuá§Ø«äEAPo¸‰|i£7''?¬]`‰ÛÀN Ãy vÆW/)¥‡ˆ\?§œ`Ûzèxe=€òÀ Û,€ð|²7 +-Ý9ùyu,,%¥¹y ßÙõ.âb)±(yCø°*Ƙ ôY š^t‘RU.ïjÒ½Ôˆ4€z7€‹w.xþ´`O¨¨­ÂÚâaoKf%vŸ ÙMù0P¿¾;A‚ǹÇ’@Dp–½’”ô:ÆFìNø4•ï®Fùú.aéµÞk­cJ¢»‰È\~t±GŸ:™à1ÊJ9sž7 ¾»ÿÄžr/°ËrLd;4<&‹s;'?|¼ÝGñ]·GYT—Ã6mF…XoŒ´uUUÿÿÝÊ;A%ñ‰T0µ¾S¾4ãLs»®QC'ªúŠWµ,ƒoø[^£f~fÄPõg+ ôocÈ»fõ”f¨_º“ á9µ±>˵c'&ð‘.8è;Á)3ÀŸÝÁàWý µqbÑ=+!C%aCì= tåý}®¦^_”‡ë@å])Ò»Pjd  ¨ƒ[ŒŽêR|™´#ÙÌ5à‰jw‹FPAB—{FΓjœk¸Ãžð.é]|e¨£±¯lNŸ“£>ê($põ)•KÖ©K˜ âZGþË”(áÝFÒ»5ÑŒÉ #ÜF`i‘$áFDìù§qŒVù¡§áE–˜ÖQ~ +-מ*ïÒ’ÞÅØ4½10=hÊ8…ÉOƒcH§¿†$í«žî$ãàyòDVëC+{Ö‘pö¦ò¸_˜&hBðYÝ"¼Èº.AÕùäÂ[{‹ïàÚ5òdוòCòúñ%bO#';ÅÛ4,2x\tG¤8K«ÂØþÁÕ»pÃz*Þ®ÓÆ$@úÊ{G éId”jî’¦ÕLÍ{¥”`Møå]Qé]¯ +- B¦—Ó˜+«áú${¨ÚVƒ†ä¹å2äg¿‡” ð.¾Ò»4Õ˜KðTêzXp 9 f´ŸªYƒÄõh15–j¡±q˜Àà3ÚÌ;ÉÒ;±ufÿ“P îdb Xþâmè +-²ºR¹ÄѽŒÅuÚw.£H(‚w¤¥wô+¥¦‡!6ÀjØŽ ERÇ@¦\}ÖJÈo†ÔâÑÒñ AHïL—Þ¹±`èB®ClÖ.)cjr?-ȼ ¿?ÁŸejÞM/½[¸i÷½Ãða؆š€}ÌìH'<£÷p†bµˆÞÄÔçA ZyyVj&yÁôŽ‡ÁF~ÈvTÌŽ(ªÓ´Œ,1ÈJâ¼GD´á§j¦wö­£z²Ïï%Y„)éü´¨Rrzû†yW \Æ ‘³ä]Ó»fË›› ªÀǺ£°¥»R‘{ÐÝX…p¦¡Ý#8Ø™B‹â2‡).y'dzg©611¢Ú¿ ’wh½‡dò/\fJ• ÃyNb«äžéÝü +-õÚ.9†ØpU?¾ä_ ¶”Xö| ‹è:)„¥ä§éÜbbc·üYÚÇJêNõëXĶ±óŸäyÇXd©ÞT“™·ªIÞÅšÞ!H«4Ù¹FtÂOÛ(v¨»Wbx~lËÃzliˆ‚ÚfIÞQ›Þ‘³Ï© 2j(`SwþaÅ€ù$[ÇôK oÙ©yâFònÜôn+7†¤€O’"¢ˆÓ2êŠ,TÂãª/)8ü}6HÞ œÞI¦ÑŽîöþÄ1Q¨„|ÉÿTå#Ë«ç}0Šñ°aH ’wìæÜÝÿz>‹©—n#`p3"fðÏFñéÕó°…¦uÕrý)úÀÜ#ï–@‰k@QÞñè¡hŽŸ/ÃŒéÇ@?ëôüÊè¼o%áÈ»m§w×Y\­ ÃÊæ)râp슩Üðš3AE´”0&Öó×—käÝáéÝÕºþJ•2Ñ&t›¨»ºoUM¨NÏÓ§7U1eÈ× ç¯ÁÈ»ÓÓ» „{DVõ^Á% “¦½Úi<5÷¾5ØÚOÍSo‘wÛ§wK®fDá6ÌüÎU@Ç”®>’à*—‘ö™XýJ‘wIPïvP ¸<ÐW,Ó§9¦Î”Ž½vÀ6}<JWП®Ñ¹9‹¼#twV†ú‰ô刓êƒÇ–’¡Žqw³{BÜ ˜_¤Éa"ÒÝÈ;<À|çO­Hªè¦+´+ñQ¨ &g%qF5.@×IþåÆ%ÛDu݆¿·­‘wQ¨wx,d¬Dƒ `—Ô(HO‡ÞåÊOý·¦Zz«äsÈ»:Ô»‚–Î^ç¯#i&"…^Ÿn&½P¾çÖ$%CÞuD½ Ü@c gÊhì òwµ»q{d†©ÿ¦{‡jžþn{3go*ä]PÔ;è,u‡A R×ܹêŒa!iÍÅuŒjêšýï-BéÎònÏy!ÉØ}²Ë˜&BöëuLOþŸ®t˜Á0Ž5îL+d½,Z¿Ë-… œ¿‘¿wÕQïº×D5:Ì/lÓÆS²L>Lïh¢7á uåÛ/`u!AE”EÅ;©w¤ÖEvÆB„0M>´ÂË'ÔPö`8È¢2xÓÊwÍG1U·XÝÃÉxâݘ§¤œ®VN­üDô®¥}àˆÜVU¥„`KÖÒ"s¶ ¥YÂÆ5?óîTêÝÅu4cƒš‚híʘ£o¤þ)TlEÔº:Ïã*=äßïÎ!–æh>ɺ2"/=N_ï;­›ÆºÊèÿ6›«˜:Üèÿ)»9I[r1‰‡ç–ŽÉv‰ta“Œ-;L?Ü ¨•‚n½¬™†*7FXwÏ-;ðm=ý÷r_7FçþwäÈ2ó¡ëåÞÕËÀö€+ÖhÎö©œýÀÚП«€qcÇåÜÓȼ® ‘‚sdâ©×ÌÀ³gXK 囋{k\NA5+ÝUDÀÁ²£“ƒr¼­|(ˆÔVG:.$JsudS˜ðîçßÔȺ¾þ˽×!?1êã„scTF9. ÝÓǺ¬OB6_q„—ªºÊ×{‚†¨2¦$€² €@ p†ã`’Rô €( +-ÈIŠa@ø@„$2Ç¢¬:ò54˜è6ÁåÔvD¤q‘hcŠ¾õ3 /Õóô.¦Ø2y†(b–$/CšªBß%Œ—Á&×DYí!óæ®d}”¾gž'¾ÛØuh­z¿‰o¡*¹zW|¡.Mm~bUùè*¼Íº€6Ø„¯tÅ‘¯‹)S¥ÿ +-[F´TwûiÎÃå„t¦£­n wržÈpŒ¯ÊGG°6+3)yRÒSð»Áÿ=¸bð¼ ‚JîÒ×ùú„Æ õWˆGè]ÖæYùèάâÑèjûÃÇÀ‹“|Þƒ,¬Bè#ÈßĶGá¬z]=ôN?i\A FWK¥ðÄÌÿÓÅ3 +-¶R¥u1D:Àª<{LÙxÞ†ÿ׊çÄÿÆÄò›Òw <Bï$!66ÈÝõü™/# -'¡«^ýPÙ!hãBV¡ý%¿€EàÜCµoÉÅÕÐÜv[:u wþS壯Ø:ñ›â2%(úÇCõhk®Jx¸yÃ/üJñ4ª±¹pvÅ ìË3ˆ¤ô¡*½0¤»û+J$€c•L ’¾†Gu£CnA3¶ž®€ènüzL쯥UßòpZ× :½«&…’#ˆÝqR›\{j ¢äwþ u®O$3¹Á5üµµŠÜì÷ñÄ&! ÿÔÓÓ`˜ÓQ wöŸdUw•ùID*M¦njŠï,˜d³f×~bÒÖ(+unJàtbŠ »ªµÉìƒlÐ;¥ÒêFØá~vg"ÍšµJ80q½þýR)äš¾º»Œz nc„ÀD½ëWew& ;NY¡zµžQ’jpt#õKå˯Ã" §ºƒþ8Ñ­ÒPm­Ü[Âewam)9Õ¹-»˜òµfìlY›ìzï2³ÅddsTPØ‚²„_¶§ +-FuéDÄê„ô.' +-¹„cmÁr‹â5rƦA‰¤ X±¶/ìÚ¡wsÓ°ãi˜b©ä›á–¾7&+úé7З‰ÆÄSg¦=‘ÌÞ¬ wËÔ)–þÂÔ]…C©!Cí‰4Rmg:tŸ#ªbrg]½cGƒÞ]"êi/ ‚稞©ö¥lù¦Ï&ÅB\ry7zÇ¥Nlr“‡…c½s5B…e2÷˜g-üU쎎$ZG—qË»¡wVºª)¸çâls%q­§2ãŒÅtÐÆ?LL'[Þ- ½kÔ;)«õ“Ìs,ï0Wç]Õ°w$ÕŸhLŽS;=Ë¥]¸Ý\œ‹éWË;™Bï”X lb•TŠÆ$‘¾p$·õÞã” š%¸²‰©MË»n¡wl *]àœê´ƒ>ð&‰3]¥N l{PS\c¡´ì SË;ÉÐ;ìP52'2zÑÃyLád²¼¿Z`¥È©“¢“á0Š¬r.íA%k~ï,ïò†ÞY§T-=è<š:):Ǹ֑$U°âm¹ÐÔÙÓYÞYëNªxLÕÕ7re=6 %²B Yï$ÅE4†ìZ’ëo*K,ï*DïØè ÕÞÞÅ‹lgçjÞ@À¹qÍuu³6Óx²ˆ;7³Dõ¸“|YÞõˆÞX]#jÉ”€îÑ’Ü©Òø.ãÞùâ‰Ù–ßpÞ? Ø2l’²?"屃å^"ýF^x.çàÖ¯[‚8’óy;(A2¦{qneÁø#Š2¸PW åX¢w¥Ò¤§»Ü~Æ£Ò'ay¼Þâ9L´(¤LàXŒF*¢Å4¸òŽŸè£µ¶\ ÀoV@c禊ˆ¢—Q™äºä©de–ÑR+j¸ÆHµoå]Eï©Jìo;­Õ¾€,Cºò†¼MSW ?d!ôLvÁÌ|…TOìoõäÊ;]Ñ;äTeoV°ž·0!'h0Cx )W=Š)%|î^æO¼ ’¸ÂCµÁÊ;œEïlU +-eÊÎEØßLô2ìG¶Ÿ¡’àJó€8ŒŸ±Ê;ÿ¢w¨ûZ#Q˜›‚5Õ·ÛÏöwf”Â+q”ƒ'UÂV¦˜¿èª¼31z§5ulãU_&•ü¢ÌMý¨½´xô2RYsîQLÍ{Q4ŒT\î®­¦é­æÂÿ*¯ˆQ<3ÇlJ©e»sL0q%$97Y#Õ=)ï€G¦»hÓ(dE4ZHØÎÁ´¦–‡whYLþÖɺª—„qòìæÞÔɽ°¡’ƒteWJ÷òìüú÷ƺ¬ž(Õæùöó<×Íã18HYk~’çÿõå¨v‰ÒÔo-;K7a%7̽,ÞþzýJÎ+ +-÷óìåÛÖ*‘cãÙ_Üë". ¾ó ôŽ‹,ÂϘµŽ©x€¯^Kíß•¬š]^2:5³ÍGÊ&ï¢â†¾«NzçTÈ<êŸâÙôz¢ð:CöØaî~ù!ÝHädä"=¤OD8€&Ï*é;Á¤w8Á”q¤§Ä”¬cÚÐG XqLõ–JfffWwÔVâf··Ç­!+}ì5ì½ ˆ¾“Jz·`$[ÔØ`8Cß1µIu/2ÖËUg[X4N.$¦—c…t¤lÜ-CI÷#Eß’Þ[%©‘(q™1ÒlHâ}—qšÙ IÓBMGÊF;…2§ìFB/úŽé1z¦(ÔÄqÚYdFü"E(¬ߨ»˜k:NÓùZßS))ž¶Ñw´HïÄ”S†äþ•k¬å%#+„ȵ¨+¦{'yÞ°…N…2#0ã8úNÒ»=’†—Å¿Œ6™A‰ÒèuÂ+E‚@rÌ/ã6 &gÙ·°‡ÆGßqÞ &Ý_¤²¿]&Ù{¬Œ$‹­˜¢3h¤ïžÞÅ–í¡ÓB™ŠR‰ñ}Ç«e|æ0áåH˜Ða†‘ôÕ£wòN™~^ +-a˜;*†ÔWP}äÊ=rœ(¦!dP©eG +-3 IßõŽÞ}IbftøÊ@a憞oCû vª‚IÅ^dö6Ëœ(ú¯ç*Ì€*}×9z7¿*3V:KDŒeu"þ|ZñZ1@mü“@w¡Çx˜‘¶ôßèÇg©2#³…Éér—y-q½sdö‰žu¤f¤Kß9½ƒœFebðBH"´é¼–Xè3êŸå•{= ¾¹Ï· »‰­`點ѻœÐÌM¤Ç|t9¦‘ð?³õ”—Qjé~šadŸÍt7™¦ïlŒÞ¡z!$^LÅTXÓ‘þðÄ:/#™úéÓ´rÇ9Ü¡!¦B„é¦ïÌEï-Ûð…,ïiJVÛ©ŸjÍ#¿L}ô3ÑuGÓlPfœNßé½_Î !qñ¦ÔJáÔ¿!ÕíkKž&ºXÕÙîYŽÝM¶0ãðôZÑ»Å2•G½˜ò‘êÞϽ¨‘î¾ý{át—ÓRjµêcìAº›„3ð§ïjŠÞ½@È…Šß2œ8Dð„ŒÿNðe`ç)s"«†A ºpaù¢eð * õ˜èÐKê…P‰%ä”ê"5%Bµ|kÅ뼸„Ê º«ß„J*þ:¬ ÕZÔwl‰Þ‰AçPÍÙ/„¤X +-§žÇ—ÛFê\ÇSÂÞç.£ŸÎ„å–×E¨ïÒˆÞfÒ^ ±@43¸]Þ`›‘L7™ñBpÐ?eÙo0'œRßU½›kÊŒáaUeC +-l¦¨@%;‰ÊŠÝü"5¸ +JˆjÅÔwå¡wL ”jƒÈ>°;¾0$·KJ™@gø¹óÉmÈx@TËSßU½³5ÅŽÈ&¥D8¡ +-wÓ–â ]¼,ght÷-þVàšíǤúNnèXHZð2`p!;Õ 6 šßJ쎫–rÈÇöYÖ‘A›2ZUßu†Þ}Ãc²æèÍ.aÛe ~iÙÚ|Ÿe9[oXÈâjÕwËBïÒœc0×ZFGžœaØD:dwïÛˆÙÁ̱ý£&îøó[;Œ”Ÿµú­Ð;Cæôh!úCfÕ†1R,åØþ½6xÒî3®ÍOήBxën퀺å1ȨÕÝuwèÃz'¦DψM^¬ IÏ{>È •)=¯äCÖ5犅 ).÷ËŸDLÌZôƒÐ»®ü êáP6¤“È +-ä2êðuˆ~¤S¦nµg^Lù§EWo.f°ïʃÞùU7$0Ò´îÛiÆ jí½>P©ä«êâ+TFý$ !ûßt–3ù1xá;nÐ;“ÎÂù&€:<ÆËYùÛ½K¬¼@ioI9Ì +-ùë±LÊ –éƒÐÿ^ °zBŠ¡ŽûíÏ·ÜÙÔV¶‡5#„ç(½¬ +-d=#ò:T䩹/$\@€rç¹¼TÐ;Úi6fÚàHùˆÀ”g›å&3U”©EŽcпõªPGO9ã­Œjµp8 îN§sXpw'cÓ q×é/ÊL}¯ÃÎ%üb0ÝÒC¡BnÀSþ…;è¿&`ÊÙ )O#SßqrB@ÔDbÚ;Ö¢mè uæßmVý©Æ?Ìä1TäAH`ŒÞpBˆšÛ_L:ïÒwpoë8Ò»ì³;÷x·Ù®½*p±ñ-@ª/òºhÐ;`Ì"¥ò×aî)vÙÒ-Ñ@ÙT|=´FÌð­eü_ÓûH‘hF˦õ0A$îFIaÓÝ–IÁ|L•m/2€ý%³ 8Ì€ÿ +-!ªÁ¾o» †ycáæ/AÞAB”3Ï¥w”{0$¿S2§å:J³º<åLQ´½ùÞÒŵ¥xŠ‚×!,: s…˜ªºÉ<:ö¶¤ +-ü{l^PC7-3AQbu‡š«¼ÜÔÊ¿²¥—ˆyj\NAWi|Óɾ±£•†wgYüãÛÒ4CSewŠœ­»ªîéâÚÐÅÃÑÜ>Àÿ¥•…tsœ<*6EVgzà×Ë]M>”#áØÍp_Ocvˆ ýÀ²NöžŒygV NÈýŶ¸šˆvcñìåÞÕʾ±¢’‚rbR€åÛÏæß×͵§˜‰yiZK=½¹¨—„ªœ~o_QÇÿ7rcUG;/%r„–n]áÙÏź­Ÿ‘ƒtf¼¬›Ðź­ ’„ug/‘9ô!® ’„vhZdvéŠ)O“6,#:MÕ=Nzö5 $0=M^ÓÞ)5CT½Ë×ÐJçüºª™‡tb".;J[m‘£ö¬ö ˽­œ‰$‚”kÐKDáP´-EÏÿ¿°Ÿ{iþüçÝÒÆò!,ÛáÙÐƺ®¡aÜÑĵ…€ø)‚Ô¨â­C€ â G()dü`0 ¨9Š‚@€€ €HjàðGàaêgK¬!ýÒûJF†÷Y‡~n—pëÄ•ÍÌ;õ¬0oô. Þ ¡_-òFZž!x(’vÏzrª4lˆÄn—0ŸášºZ°Ð0:íW°”éÈ×õ¬…¨´oâèÝá‹ä·R X±…5à|E bóHA³lC’/ëv 5}ÑcÒx—íè R°âa¶—3ÌeUkç‘ýåþYvcõiJ±B‚K†·Kø†Ó½èÇ;–Gï¢üVòÈÙÃT×Jö>[.OÖT„Ƙ^? Ù… Îã»gmùxçüè]Qó$ |ÏŠéØ×pï»í€R§:PТˆão„EJᬹ”'A¹ÒQÊ ÞÉö0o0·KXÑÇ»¤wó ª*áa bwÆ’zõ!˜ C»3Mˆ¯ +-q†„ï°Ø·Kxb!¡{¼…ôNÚN®ãÒ½ÿJ¶ü=OWŒÿ첸I_éGa•[o,ôhŠ)È“h!]óx'—ôNø“Ò±ïr`ðr&+î—1«ò–-R7xB?“ÇÝf§Œ Èãõx×7éÝ0l¼¥9‡$ZÅ{%Ofô>£ÈJ´µŒ7Q!jæy¡-¤:ﬓÞUNxKsÔ][Qdõ"Ì°‹³u3¤€bwlf×Ap£Ëï|(½«* &Í«qŠàjþýôœGÇÉ Î>«´šÓ¼‘°çµƒê’ÌŠ¶ ¼ãRz'´¸!´.ÊvKs ½¿êH«)Š_½Cò¬ï¨Ñ`Bx4(±f8ÞêÞ!©ôNü›IeuKsÝ–j‡S{´—7ð,á¯,ÓÒs^œG‚ +-Z³L3m:¡‰ …$C¥v°Ý¼;Vz7_;› kJ…de¬µÓøË„´A¦þeÉcŸ ï"…Tò¨™×$±ÎS*`J È;KïÄ#/ø;«‚Ͷ<Õ…5¼“ a\œºÌk2Â%£Ú3Ú­DjW~¨‰Õa¼Kjé·¨-b¬OH›ìGþÁL Ú52ƒ„În 0Éñ>ñ5¸ÑN°áúà Irjêæ¼[\ztH¥ÆirÀ/Äyµ~fp»âøá÷L¯[³ÝºŒÈ²m`FuÁ 1 OöÄàRÞ ^zgøïd–‡÷2­®ï)dx˜ñ‘–™&;«36ÆU-Ó’ZÔ0à ,»‹ò@–w4Lï”ù°5Zªú§F¸ø«Ò“ŒÌ@îLÎ#(ƒþ¤JŒ Õ›@€þ–7Å»˜˜ÞY˜¯H¼8Õ.$›•’cÏI;d†Ÿ“°€^ö‚ƒÇr,3ªíÝ쇥An!{þõÜl¼[dz—EgœÄ·8Ÿ/—`!MÂ;ùo†+QÔ4A0c(m3$N£Ú·hg×΃äÝ0Ó;TÓ¿@ÌðŒÚÓLÆsp£˜w^F¥³m†œ¾a¬“N+:®Q ù5®’ÝÊ’d¢›7"‰¤é4Ñ*Æ—!·j³åBB$Æ‘v/¦fè¢E d¤Tž*%¼»=ªíÔkG­pñÙBþjZr8XÓ;ƒ°ËCJ`ã<Š\Ó©©ü ’€|cªmŽ®…T˜AòæŸ×žÐ»ópÏ{ÍÝTŒ™®sG0p­©ûav›ÞÉuŸ„ Rbd뎢BBÑXNúís¿÷ûŒòÝÀ Ê j±^Y¿· âôŽXlÒ:H<«G^íC½:¡ðV“iĸlƒóÆŠ£]й­&FÓΧ+öBå¹eÓ;°¨Ö[ßéuÇÑàšw˃}ù{&Ì ]I¼lngÌ +-ŸIi‚m Ñᤱâ!ï¸mÞMˆ½Ô}ëN&׌q)¾“ 3$qÖšµ-Mg {¡;‡eI¯OµÈTË]ñÊs·ˆJXMïÆ ;åcœ'©=kM‡gÐã¤HÐÈ·l/ÿŠöñîH·˜èvš£Åü’5{ƒW4½G*@c2Ùº{-L:4A#ÙÓÔÍÙ|72Ãän,¤aÐ5Åí†KN$tH#@*»B¾KœéÐù› ixûš]'}j¾A•êgب·Èp#güX´3O‰ÞóòÊsWŽ‚Åü}·Éô.tΓ7qHhÉ€¼€þvèñ@ßâ,GQ‡ Íè`TuGk¥f­(¯< ò"¦wîrž¤ÜÏãLd +-Wmtíx3.fN]˜šûêø½Rõ˜ëä ­´Ù!zåYŠï˜ÞÉî·Šá•“@Ž©®Ú°­R-°¹Ýn ´%±?câ0h}ËÑ> Z¯<+ì÷-…ùŽ÷Ò»þ rLb¡¤Tó‘f™‰CAçŽQþ¬EÖPÝw˜O&7’Yc~s$¬ã;”Kï\'È1 €T(Q`ø?²ÏûRâ*֫Ά¬;\H+ˆ¨èìø!IbN‹€ áÓG¾#·ô.×yªwbßbfÛ|ì+Öå¹:-KDõÆT^Å_€”jûm_@R.C ßá²ôÎÏ9¦ùn& »ª¹Í^á`t-cá* +-¼äì ÿþøŽ_é] qJTâP`€Uy$ËÒYhÇð6¤›Í\R¡M"¯#Íñü–'jõ¨©û0¿HÙWè ÿ>}ÇVé]êí¦M_qƒÒŶO?ãzk^¯¿ÍØö+8GXi÷á×˽l^P'åÜÑĶ¥”‚Q,9¯é­œ +-&2@O_qƒDUfyhzŒ®¬]M>+8c‰w_1€“ýœü)6E^öþ1Âœ­½ÊÖá+™øÏ1,Ñï_G%ýŠ÷ôðëäÝÔÊl&2?OŽ2 +-ÞÕËÀ³¦Q"‹­û% ©àÖʼ¬œŠygVF8,ÍÁµ§/'3@O`qƒ”¦¶¥“2&êâÚÐÄ·ª›Œ}n`-9HXé𭜋y枀paS(3AP`rK¥”ƒq`O@²Hž¯¾6*7EŒzhXHƸ©™‰xhY þîçO`ÜÑĶ¦•ƒrÀ±¡n^OA #.;IYj|Ÿ¯¾ÌØhVF8Áûøô¾¯ž{jYI:.#ɺª™ˆveUF8-#)5BRbt…“o$/M]n€¶¥”õ¢‘%›«»ÈÕyßÔȺ«š‰w¸'2@N_pq¨Úϳ?èÀ° Ž| G”{~k‚4$’²  ‚æ0Ž9¤ü€À@ŠIIŒ€ @x˜VpxrÄê‹æ@•ÇBHâ¤ÕÕ}€Yĵf5ƒÞ‹‘¬vŠ.ÓŽn{ù‘Èôá¹¢ÒÔ= +-£wk¬µ#ü¨G‹A(:rÈ3gÔÿæ ÜõÉzÇùWkÞ5^Ú’V5ðÎb=nzQC:„G5ò\æR“eL,h×›:nòË%XÕ1ÅQ{Ç^lzWÚÀÔÍfÂX¥Þçmߊ¦èü:V=Šof$än½S·iÖÇãê,Ì„kM ;¦:RD½šBïLz\üëï.¯êG']f‚j ?Ñ~Ø#qtKE%R£á¯tt>˜CØAïdaãÃC2I䎥ÞA@{µpïðÚ({Q÷óT[oZYHdÛRrš«Sø+„®³E¶”æ6Ï[ô®Á”­Ôßû˾6ÍþÓ|F?Íçf!Žá³µÙ¿¹Hõ¬#l«½t#d„|¹Ud zǵAÙ™N,4ĬÏï7ê27Í{²#sMÛÂðTN!5!ŒÝé¤<ë½¿Ë +-h©¾«ŒúúEåù.w¶WлìÞìæ¦éYótþ“ˆ®âøQ‹"ê®Äøw¹¹/£VÄî4‡¤<.‹F»âú«d“ja`ªc wR`³øy+§ÿÿw)úQ¿ ºà˜Q*Ót§lÚ¬c;~Tä&t–AΧ&Î tžÿPH.èè¼ÒÁ‡î ôŽåœã¯5úßåÞ¯@ÎK~ê”Máv7øÞ9° |—¥Ù#ðø*:›Íˆº’”Å Ww¾¸0G€ÞáÁÛ +-Ü^©æB.DÂr½]ó Ý<¡ +-¿¡ýAtþõ˨Qp˜†GÎ/ éh@ ûôô¡¶B†'»º»jé Ù2ruN™±%’Ñ8msWûD= ’T¡²iF‘ +-Q{äö·f0ÂÕ¦Á'èÝ< ñÉêåü€á©`ÆŸƒØR5#€LâR º’DeÓ×·-›Ó%{c—{pQ nüåÚ@œ¡½ ¬‘h¿+«»ôKÎ!²Äc¡Á/ +-XÅ’OÄ•"гe¨é\†ƒ,…ñæŽiÚð˜Æβbkú†Äay½KX¼þÙÜ·J5tëëb^ði5p½]"\– |×@ß½Ï=câÏÒìÊ`wö…DcwžÅ;Šê9¸éñ@ï¤äBÎ×q{Æסþø­’E@$½—¬å%ÀA*qÔ›ýÜÈvw wiòêŽï"ÿp™è3·ºcNÜ@Óö¸&”yB3Î!I´áE× +-’Œ «$aÜ£š*Óùˆ-Ó@!Q™8VWˆ Úûc@w<½S½9È´U²¼îêÆo$ÌÊXüÛÅ¥º¯4ñ)ªU£ÝÏñÅÚ}ˆß +- Ý5 ôÎz0¾Ã–›Û]“Ÿ–øú“7à?Ñ'Í*)êBbíè“ÝÝŠöξÀ¥ wçz¨¼>¦Ê³Œ5u^ws²ŽvÁñÓª@Æt–jÓPXtê[û)ìî¤t·­Cþ#p+ù︽ÃÄ;ÇhH„S¸¶¥Zö©.=mÉÄ=ˆÜîN®ýrœT9 »lAï˜ìæŽwsœ½öÔÅðTã™æ¢mPÍ€c9½»S+òŽ5è®WY`$Tãݤì¾dsQs&S‡è¯Q=1þJàÀª€Ó]†.8 1—’¬„Ïæ'ôX݆v7¡$ë(±tª¿“FKáßuëåZlô…Ý-+ò®<èl>¼[Úb5¤!›XS­œêW”G¤];Wjˆ¸Qa| ´»'´BãÝ¡wV}xÇQ¨À«*œ³×âZoÙž£fàQš>‚HŸ ã3ÑîFäjÄ»±„ÞYíðŽ›’u´y…úrª2­cÀOvÉu=;ìN¢ é‹x'¤Ð»RùÂ*2#zž‡Ù’qIb6M/ÇüªLÅŠªmGêÏÒ¨6lˆå>—Ë—îbˆ¼“/ô®” ùd›’u”¬ÐŒ£¼æûT?‰6vºü>­;oŽ²Ru ƒÊwL†ÞA{”¬£Þ í"÷0ùõSÝðX°eÅOša|ƒCEÅÒ·ŸuÌ¿"ˆ¬‡_O-P±ý<‹­â]Ûл# Yh¹2zP÷ï~êaEti2úÒR×K˜QUYñí˜Ãx¢'¾ëâDƒ ñzžPy'vè]8&ë¨暴Fe:‹(§îäHc.„µp‚jŽ²d½er¬.NH‚w¼‡ÞÑ>)å*}DI3!IX¹ÅâЙ•1lÑÞ¿ «s7o +-}Yý•s¤øki&Ÿ1\ã Ñ;ipxá§pBacAGŸŠN?ý$—&¡]j°Ìøˆ@4ã] ¤eN»8dÞÉ"zWèúáN(ýŒXñþJmV];»çrLò±&G«¡.—>7QÁröÂÕã2Àzj(ÒÉT ¤e+Ê;S¢w:j19‹L4CÍÄá],q’¡±½|¬»ÿÑ°œ«8ƒ?à)\ A3™ëÆò7̯ SÞAMô¬{ #} ”nñø–s€¦øJ†…FÛCnö׆n\Ê@¥ŸÎh×xGRÒ²ú)A”wBŠÞ•|ƒs‹7г ÿK¬;4³ŽûFóªìå´\±¢ –uÚ•Y\"¦¼›Wô΀Éø1-0rBlÁG¦hgÝUWâ»Ð‚yc·ìµxÇAl ìs3[–7÷É;ߢw:eñ2Â"×A¬¬–2šƒk ”:Ì*mnajRzøåÝY†ûPsv Vátш³x'»è]! A€°â¦dÈ:ŒÜ¶&Ö]_ä×|0 9 +-é °Ì8¹äÉUÃåîãiHAò@åÊ;ð¼“Çè]‹sù­,æ&åÕAl +-òæÏXŽé¼0 p,.ª¨9åÖ†'¼+tîmnFï|k.`ÅL:·œv7Èïü×`Nt˜O$à[T <[€ØߎÉÌì®-ÇW4ŽjÊ;iÞ…npf9”]ô$öŒCRbs…–§ÑŶlÌØ 0=L]nÿÌ¿°ŸŽ}l[K< +-ä;7ETdv‡Ý éü¸©˜‡udTD"&1?üM^&,«ºÈâØ ¯«š‰xgV3AO`q‚㕃pÆ´¤“‚p_OAiâîèßÕʼ­Œzi *„–¦ÑĶ¦–„ÿ¾¯L+ÔÇb÷ÒveUE8+?ýÚÎÀ±"ÎÍÀ²¢‘€}j-‡t» #þüäÚÏÃþáÖÕÈʽ®ž|kZmZI³Â¨—†udTE7±±¡‘n^N¤åûöòíæÞÓǺq‚””ƒ ß[§äv$'2?N^^µš«º­œ/ÿe*5C&1=L[l}Žž®½ÊM>",9墲!ÿøôðé6jz‹œ¬»ÜÐÃ&‚ÐûÞÔɼ­Œ{jSct…–¦µÃÐú§3 °¾á×Ì¿±¡‘€o^O@$.;HXhy!Ý‹ziYIM\l}ŽŸ®½àÖÉ ¾¯ ~n] +-#.:GVfwˆ™©¸ñõš‰xq‚“£³Áþßðê&1>L[k|­¼ÉÔÞ³ŸŽ}m\M#-9GßeÕÜÑŸ©™ˆw BQ`q’¢²ÀÌ÷³“‚raRC6+!{ŒˆwÞÕɼev‡—§¶ÄÐÛãëm¡øÛÑÅ·¨˜P`p’¢±¿Ì× duœ¬»ÈÓÝæìÕŒÚ0¼­o½´ÉÇ´Å/£ +ˆ/N¨kzçUR8\·7Ú`(¾oä/#Óæ‰wåkw~Ô1Ðô$93^Fç+Tƒ¯ê/Aï’ê6?]"ס€Äònšm>Š¶V9Ìà&«»FâÝŠ”;IFµFçÁ}TÔË­ï1“õ^!¢­R}Õ!\T„ÞYF„åb ]Ït¿þ´²–¬˜6Oóƒ ¢&yÂ}Ø]eó§Eg†…0wQg–mt-í¤æŸ"z…ø¢#0WÏ »Õ ÒIãLq¼‚¨5: ¶–qí0 +-é—{^F=U+]A>¬>†@è]Ã&Š¹-á6ß*¹¿391mö°[úc‘gç®Ó-¾P}  q^Ö˸°ì0“뎘-ôNU`!þ²'܇yÁîúìåj0â†ûت²ûà[>?Í$ ñ‰¾†R13úŸ´è/BÀ»¥ÍãÌÙ…U(m{IE,ðnoluK›³»l=…™¹-JF÷Î]ÐeþH‰—~ÔIëQ¡wB¦)¿}˜]Ôïª9wbÀ†Yt_B<&@õe>”\ ” wî¨[ùꈙ?àc‡Èø-–½ó5îÔ±„Ë¢ð1{U»#F°íþ,ô¹SÚ2fÑ©_‚Õ_½[‚úèÃÐ ̱'˜CY$‚ñNßkÞ97­Ýõ7½ûó$¼\Cú2ôdÛ•/ÈEp‚ÞulawbàmÁQð yç¼õ{ë³7“ü€?•üvìÛ]ÂèoÞéØ;gøÎ@¦þ²ÙES¡wnˆ_Ì©îÂãc"fØ¿Ä5aMä¶jDM êÒ[álîk$.ëNY¹—[ S?BVzfþÈëÿ¡ z~8±Ø¬<äö¾Ã/—)áZØŽPnµ»Ú%ª•nPMôÕb!2&QNô®±½Ìƒ9 «d``yÙÊ"IÚ´¦&rabw†$=3æT翸/J +- +-­4¡w¢ÃY ßÇx +-Ö±‘c3@Éâ~+N¬oVV¼Ý>BÙ(ȉj øëJl*²ù#ôÎr.C*ÖPH÷ +-¯BÕÐðòjäXêz° +-¿ŒM×`-Þ±‘cÌa»°¨Öiér×:л(-hn“}Ô'U¯¬ÅñkôYQã r“çÚ4Ĩªã§Ý¥æê´ ¤¾ß*ÃZì8Ë]ŸT§¤ +-zg œS‚e=ÿF„®’›†˜N@xm“J'œ„kÞÏ$NÄÇkŠ¡€JGÒ2’á,‹Tþ²· RóG® z‡†kÖUWjl0MÁ5ú4ØXPªvï|fG &"6ñëo¯ð+ŠêÜÁ zÁ›®R]¤ÂhWÖèsבYðn*k<ÿª¼Ÿ)P[¥=);!†'¦giñ×Ô_™‚ÞYoY0¢jqv%R´Ž æÈÇ9Ñiuí+_~=ÇbÏ[›CËp'ª¡„FºûyECrл$ ²p%Î^š4ìê+ß2@ň¦åGÝ]£Öç)¸E´ÁÕÇ5œ‡Àzb¶ô®1RžTœû9úæ›H1ÁyyJulÖJÛÅxÃÅ_v˜ænü9˦eðh–û2òÿ=1‚Þ¹!?Lgï•ï–ÒZŽ|\B©¶4Ž¼\z+Au_oÏz¸©G…j®b'iÐÀF1Ë;©gDô®Y—èHWXܪíK!Ÿ›„S‚ {Eû~¨Z¸£SYàÈÔ?¬"Ðø‘-¹æ[ úÿþ@ï*á¨ÂL0×R­~b‡*­‡kt•ì¼+ÙŽfºqÝé¡ÂÙÝÕ(Í­E…äè°h®n“¡¿"*í w‰CsëÇçNp‡„…©cÌÛtdªµki[¢`*ë­­m…”¥IÙo0æ§zg6»!¥¨é]2Ec1Öª#S/—òÊ/NÀº ªY…ÂU÷ÓUHÃ9K»ñþ¿‡=è]k>.žØÜm£öµu ¥¬È±!uØo»Ï£îw¼‚@’ÁÕ6¹ò†éÓžR7ž,/ˆmÃì wóÑÓ%eš[¨¼‰¥€'&†'´äƒ¤š&±èÃôS» ‰j15¤Bz{îÃÐSл¬CúO–jM‘›ÆóaŒÉeEBh+¥HÑç@É=Û? ½Ç}ÀZ•Ï• Bjk2O C‡BF”@ïüŸ…LSL§“¯µÍhÖëk22µ=H1¡üÝðŒöFæû_ëFÕ¼R¨Mª´"¨ü+¡ô®i·º¡­4V…] 8®õ¼#S鉫E‰æÀ×Ä#~ª 7Jd«û€’½¶*r!ˆz‡L6¸~QðaîÀdR³’‡bz˜bðA½Dàt¿cÙ¸…>7uâ…ËÂ>à+èSÙ +-)È—»>AƒÞ)¤f–êa÷¡úÉÆLZUÜhøQ§€®ÙÅÄ“0¦O<*«cªmæ_V±_uè:ãUˆ½kþ¼à÷:6ˆt|¢=X¢¸(‘iË· ‹¤qd9Ò$fÄôþÿž:©!+6CQaqù„µÁL\l|èàÖʽ®ŒziXH:-Ž$w‡˜¨µ¥”‚'3ë+7DRbr‚“£²ÀÌ׊ygŠ›«»ÉéáØÎÁ³¤•„tcTE8-(3&€ o_OA5%0ƒ“£²¿Ùný¥–…ueV*5BP^n~ÔÝæ÷óÓßÕÊqaÅØÌ¿±¡¾øõñë|l]N%/;HVfv†–¥´ÁÎûìåÜÒÅ·¨—†…êâÚÏĶ¨˜ˆxhYJ=1",7DRaq’$þÛ)4AN]m}¬ºÇÓþraQB4´¯ €p`'1=KYiyÔøõ\M@:GVeu…•¤³ÀÍ3ðµ‘æ©,du†˜¨íçàÖÌ¿²£|œ«ºéá×̾° ~l\Ž'2>˜¨¶ÃϦ•¥µÃÐÚNéÌ×àçÕiYXçíÙÎYJ=6#,8‘ ¯½ÉÔþ³£“‚p'3çß/%!*5AO^ÆÒÛ!,8©¸ÆÔɼ®D7,(2>LZÌ¿° ~m%0Ÿï}m]OWfÛÐ+Ïö¨™‰yiZ$-9E¡°½Ê.;IXhy‹›«öîç…ufWI"+6CP_n~Žž(3¯¡‘‚rbš©·ÄÐÚæÝÒƹª™"ðëäŽ~n_QC'2=JXgw‡—¦´ÁÍ]&0ÚÐÄ·©š‹{k %/;GUdt„“£±¾ËÕßæíòöøþÐõ¦Qarƒ”¥àØhYK>2'#-8ERap€Ÿ®¼ÈÓÝå›æßÕË¿±£”Bœ«¹éâ×÷þ qbSE?M[jzÎÙŸ©˜‡vf¶Ä¹«}n^PC =JXgv†Šzk\sƒ’¢°¾ÊÔÞåƒr)4BP`ðà×ÌÁ´ ­»XH“<0&¸Å&2>M\m}ŽŸ¯½ÊÖäÜTF9.!*á, *6DRbs„•¥´ÂÏÿƹ«Ž~o_QD7-#ƒk¨²}53$¢ @€¥Q’7Ì€àPŽGAŠ aA„ÀŒ–6çZrþdDM:UÙ'ŒñÖåp8Ø|ÙžZõ`Æ%(SFÇNc¦:Xš#—Ÿ:£e´~ü$uÐ;7…ÌxÔë_ÃT­u­"3H—3 |h1ã’²ZSˆÎO]”4ßõ$©Ò0µ Õ«¦]Æh{ü`zW„BfØRõ/]Su,‹û£L­úÑñ¹>Ìü“æ}ÂHüK3,ÃŒ$Çkö½2Àâ˜ÜÎI=Ãtª 맦Gwdÿ;z®Œû†H“AÔµ¬ŠµÈDN–—£Ü j V ’Ï^¸'¿Žs× &[•ô¡zTÆÈÔÿÿT½ 5¢Â&`ñ ej£j‘A¯>Ì¡ê)|A=¬º¢´Ì‘ÚZì…{iƹ6L”½¹A\¾²;¤ ðNÈU¡w@¯ì†LÿÓÄî.Jye9û°×åy;BÕ®ÚÈc_¶|ƒK¶”(io í4¦¡ZÔÈ@jAïŒÀšT½Ñ’3Ñ9º 2 E¤@4Çd¡ê^Ö‡n9?]¾Á-R£>¨ýz–_|jv S„ê¿ÿ'½›“ª¯QI¦aö¸žD#_ DÕ^¬—oðËß¾K_†Š¢†A Õ-!ÿÕ +-½Íòm¸p¤Ìµ\ #Ü'^i“¡j W¦WT;ý¦š°I„ꙑÿ¡z纤ê¡@ÊônÙ}WA F[¡ÞÑ­ø•ÖRϨ3ˆ|ƒÓ–ß"´ÔfèoCukÈ@é…ÞiaöaÇjÇA«ÜPØÙ¬%Íy“2…ª;z*YRG#ßà,ð—Å]è.·8fÜ ÓP‘ÿ€j…Þi¤¡·snE„ÌXd“˜W!¨²’Æ?(CCÕç +-ÒűC*\ü󼧦;IT»cõ²¼°¹“Dw#ÿZìë!,»™*"C˜#µîb:œ"ÓÈÝѦƒki•§ÑÇ]ä“y–êvHUkþ4=rY‰@ËX´¥ ½£¹ód ›-OŒª¿XeZMEé;mî¶'‡Ð¿õ.ªîî<²œ²F¾ÅD7ÖOÃx=qÏR%%Ÿõ„àRõTi£ OHTcäK‡ –û¿qÐ]ÓÜ‘_î.Aþ X þœõÕÚ¦½ƒ÷ÄÝéÏ!Ž'MQL‚ n­æŽ…EÝÔt÷~UBJ +-ÑÝ,ƒ¥ä?À´wÐ2Р|¤zçAäî6ªÌNz¥­áÖJ·âk' ßÒ²âfÍ4CVrìÓ&êHâLoŽÝ-êƒÃ³£þ¢oné†D;Þé“ýKûœÔp¦„ewgÞ©vÂ˸A]’àokì8€L¢’Å«ã ÷ŒøŒ™ÉË%Ǭ ºÓþý…åpx#ù\Áff^“ºõ bÓ;u»ÝÒØcœ›õœw=q‡Ú!¥äKì|€¼˜©éð„4ŠPQGèN´ä? ‘–Óì¶Þ¹;ˆ‚i˜K‹’>ÀsÊÓ!Ó­8Uqá +-+¯M~¾Î˦THÌ*êX)«ëW«÷ }ò0hLcQ©qõnüCÿÒ°ËJèI>%å±5 º§·-¬g¯ˆ­}°½Bº÷›ˆQHaèN3¯… Õ_ãjO$‘äÞ9¿Á—†{Hç!S97T5©€©Ù!íbüÖâxߎk…0¶Œ +-)+Ðò¤M“ó(‰õ.ÝCfîãp€øaâ†V8Zò$S®u,f¬óX +-l=”…èfªãèNå? š¥V‰Ñ.éVÇ[C¼õŠéà¶-Ë!º'¥ÙuS2µTV§ë,]Ê,„1‰ÈR±ˆ†Bú1ê8,ìíŒòàúJÕè<{×Px[s_ÎCʉ 'œÒºFÙA2-:CP%ôÁ‰÷mì5‡Gˆê¢_˜Æ +-7ÒócT>+Iû¿7×l›¡jýÿ·½{žþû‡?öH>€êinìA šžBB‘4é‚*b(Žegõ Ê±Eƒè]f©(ªiA ;”BŸÆŒàa9ƒlË5<>Lr@>Ž8(°GSöÈÖ£¸TߢT)¿ÃRmÑß —½ó$òÞl4‘ý bŽÉ!…p ¡ŽÜÓ/:ÉŠ[ v2(°¡ûe¸_Gª"xw:LT¿tº "ª¿¶÷Yk:‡ÞÉ2Vy{G™’$OÛ—Ë,8þÅT²Êß.Y-aÀ>àŸ+¦qRÊÓ ³©E#Þe24èqòºw™?:Ò©±`ÏóŸ“©€EÜñtQÙå9=1‘±ºØ6R)XñsÈܽVœO+?.°Kd¹1,ÿ³ÌÙ|7Kïà‰¥ –ˆs‡m$#vf;ЬRÂva>þµí]Qñ^û„Ü0f²e´X¯ËP-M!–ÿѽ“ƒY`£¤kÐRcïoû ëU+ô`âÇŒUÐ/ûj›TâÈIõä°ŸÊØ1SÛˆŒ—Qm¸Ëõ)÷N[þøÆb9Ò Žz÷TÈ +-Åm–úXćY’Ü׫¿U§€й¨c'ßÿ¯ö%£©sm8T0u!á·iAç(cÆÅÌÆ×;yAËÁ 8ÖGÌ6œb]Œ¥Ø™˜TbÒ  •ª£;æg …¿Åö2Æþm]üXƆiÒ5ß6ÿ4¡w¬JÅÖ~úC!LoP!\ÀÀ,þ•'&5=8©Ä*Ù^òòƒFR¤«€34ÑîPÃË ¼eHåaz¯¥±î=‹i½»îl­Ð»ì!ÿyKNî[Ì"” +-ŠâHÝÆ&‘•mVdÇ·Ê°c9B +-tì-Fø×Ú—aêòà#¡wWÔº¿¶õ.Æ Ãû¡eš¿¢ý%ê$‹&Ý{ô÷é+·ÛS¯Li%”ù½Åó2üüXƒ(£º ŠzÐ;¨TÍ›ý.c2љі8(þŠÐò ¸jáWÉz}¸Ô|´I(ÞÔÈ»ZJ$/Š›«Ãl]OKYhw†•¤²¿ËÕú~m]1­»ÉòîèáØÎö¨Õ'1L\l}žæteWI=àýz#-7CP_m}Œ›©·Ãþ  *6CRaH 3BO]k{Š™§µÂø›Šy$.:HWgwˆ™¬/´¢ixˆ—¥³ÀËÖ˾¯ '2?ž®}n`Qþ •!+6CRbrƒü(2=JWetƒ“úz +-$.;HWgxþÀ´¦˜‰zk\NA6Ï'1JXftƒ’¡éðVfv†—§µzk1>KYhx‡–¥²¿Ïĸ(2=IVºÆÑþåÝÔÊ¿²¥–*5AN]kÝáÙÏŹ¬ŸrcT(1L[j{‹~p#,6AN[iw†”¢°¼îÖË¿±¢“‚r +-!*5BP_oÞþ¨šŒ~MZhw…”¢¯¼òéwfWHTct„”¤ö´§š+5@MZhv…“èÜÒƹ«?hxˆ˜¨¶ÄLYgu„’ ®ºÆÐ)3@N]"ƒ’ ­ºÆÐÙæftƒ‘Ÿ­ºÅ¨=eu…•¥´ÁÍØ܉4?KXft‚‘Ÿ¬¹ÅÏÙáçý}yŠüÜmŸ¬¹Þ n~Žž­»ÇÓ0&#+5ž¬óî襕ƒ”¨µLÑF  F1ÏQ`ð`EIŒa@„? ^Á86Åq-¹-Ž\#È6wêzI±g¥éÃ;3»ïôºI_ ìÜ Æ¨»›¯~•ÌC‚ø^¡tZnO²±ËH'”;Óï²ê6ï€.¬X¶C· ¤ôh½WQèøÒèäb<$º’¥Y'í`/i5 ãŠI -xÑ\aŒmˆwÙþ©û}×½h% •ý—:u…Ÿ%SHÒî`N¹5ƒ=ý;çRN7ñNÞ×wDÑHú‚ÛX7‹O›ƒ´ÄCšrªáõ.qÓK÷m?¥Wwh™ D:€ª×Inmâûºaßu"é‹jE¡MÛÅm6U}.Ìb˜´MÀôB§º jR‚ƒ*‹BB†$Ö\!Ä»Ǿ"é övË63ZuÝŠÊýjx”~˜#Ç‹EÄ“A™ºä§ô¦Rw ÔWkL€æÁG~xWw™fpˆ +I_ÄÇ=cj¾«ŽHÓ¸+c§ªœ¤8TGˆK!‰à î xœïýiF|B&L Rà4}1‡¨œÔÍK †4ÓÔýÏóëЪ¬×jGÕ¶?ç~yöp‚eŽIû#1ñã‘ ³å;»Smp3ÓõÒ¼¸[ÄãÔžÿ¯…¼@u=t@X'ð&è2Ö«¤Ç`+¬}…2a8ë&ˆ5é™ÉZ\ +-·{ ÜÕýZ?òúÙ³­ VV–m„~%c¿ <˜r +-lÔŽwO/‹Sø‹‡´Æš)ßÁ‡¨P¿~p ¤¦öï•€6|7úx +-+ê Å…ù¸óNrûNe”˜Ç+bH+´vF ßéþ~5üj»0IºË@¾KªÅ($Ôh"0ùÔPŒJà•w, ›w¨žÙ¸th #IŠG9ù¡)á1v¸ã°A á•Ôe¼w–G®§± +-íhÃw÷l˜öœö; Z Çœá Ûµ•mF¥¼'˜wù-[vÕY€-ÚM\( +-­¬4N¶ãH ŸÑ©>˜¸ô¢î!GshéT^…„¶Ù´"gøTÁÓW¾ƒÊ D§xç“ǶËJj9bW|1'/™²ÿà`O3ÞÉ©ÖµüRE¨ãxÙE~ Ó1bå:·B†äŸ>'Vî ö©õÛG-Å»Y,¤-—ííÞÉy^nãÒ0¬EPZßs‚rcra;±TÄÆ“¨Ò•¨ÖŽŠà^Іï¡À¨Îc9rÓðL£å]„(òõ7n%ïNî=Äç4½õ¤U´ðg,í'òNpêNà$w»8YÚ†™!”þ„:é#mø^“ ÃmÌÝ1Ø6° «ïìH÷òŒ[ið®f~©k`‹n>s3ùÅRÀ˜‘ØÒ~ìÔÔ˜ {n&sÝ\w~5|mþÅŒ?†•ÝSZ"Y¾?y…ÈTª?³/ðÎâ¥~¸…6ríy×j¸(a-êŠ×IL‡¥ý,jj¤±áTY=øGFÖWÃ;|Ž/;3n#÷»¤d/Wyür®ê̈ÌÝc¦òNÎþ Ä³FÖwÙ¼³¯þì§àÀ nÞ£,ÐÕ XÙ²}Š=;h^+2üÕ‡ÄÙüù0i£N÷S£X%0‡Ïå#‘€ÔÙ–FÃpÌâ~éäS+ º%û/$[=#'XÏ;CDÍZÔA&ü’Õ#¡C{š•ÇwI;¨ ž@&Sº€ÅhKý2ƒ«,ðZÍ:I¦®`:úFí̱¶àß v¼sÁ-þ¾~”A,9µðÌ“›·9âTÏbø f„Åé Â=´ë/‰S©+ûͱ¸`ÿ–¶’-<]¿.b£ +-à29  3nGXEöXm!N…0Õê®*#é_]ö?¤ÙåXªÍŒ0~ýY†Ž;Í3ð¾)—¤Çœ= 0¾Ñܽˆw†r¢0S1ʼn±‘èÄ7O<:T»%ƒ*ÔSM¦ÿ$°Ò,½“) +-fý¿ õSh*è +-ĵ]+m¬‡^ ;åƯkY`]žN°7òKmìóˆa‡TM 2 ¡ì_ž0XOÃm3¾âM¦ò3CÀ Ò@5VíËp]± îcB:´0eû ¬Ìè}¦N¹40ï ªGA/ž±-7Aú¨LI «&¡5X‚¿f+f@ 'ÓR03Ô¸ðËøo®eãh/Ç»f÷~?jË ÓÔµ¹¾'ëıÒaBŽj„"$Jp¾ùeü‡O˜ÈFšøY󇔲§¹òÌ8À¾"ä.Ž*án½Œ Ó&dôÉLç\vù2ï¬6–#ÑúÎ-˜ß´Îf¤ùc]ßÎ…\HF +-jÃ8³Éùv»Ÿž©ïÒ +-32g†cÒ¯aŒXíeÝ2<çm×4 E?2:ÄÜ FêX¯9¢{„…suW ³¢b8U¶”SŸT“{Á¼ÏìMø­ì*ròÌØuf¶ƒ~õ>Wý2ö¨óû·j_ €Éy$F{Ô… [TB‚ÀK:äv/ [ÜÅ×òÛáØ>×z¬ì@ÁÎ %„À/‹×[ì=‡é6¼ŒÍJË0°?jñ¨siÞE[»Œ ŽXú˜­;Šì$£ÃeFÔ;ÃyÿA«Õ¢®evf¤ 3c õê=ÝEî-ƒH`Ùc’6ŽÄ„Ä Šª)÷Nš0!á¡«a~1´‘@í1%WÚtÍ$Jܦð;3ÂÐ5m£_}À¯ßm£‘/#f +-,´ ïÍ.ßGH¶G6ÚÁÍ&úK–Î8äªeè Ú„‰º’/²Yçd¥UÂ+« g†þNbغk;jñÂvsl2¾Œ•;J>鞺Þgü®çËŽNrŒþ’*¦ÿ’Ù+º)¢¤Þ0áCFƒov¢Ç œê½ +-Þ%bôöݽHo[ +-Ž÷1ô®ù99þœ%õö0Œ˜ìXbä3æ.…£þjÂø m' õN»IP˜`R1c™aë²Ái8¤Ïn/’ˆÔ‰Ÿ£ «„’S\S®Îùq/C&Å9mÈÏüò5àö€ æÓöIÌ%î³à†Þ¡Â$Ë5?_&ç× Rd U+÷òÜ&LLiÖgF<>‹â„Bc…<7Zíaº_† +-Ë1…Ï€Ö=!Q˜Ç–ý4¡_j½C÷Eq¾jæ¨Ì€c$”^h pAV­»;ìN39ïǃÖhÆêbËØvïiîò(3´ ¼ÆÀìBï¬ñZf®ckgªv›Z}“lîÃPÁ§N´þ{&<ë´•NQ˜y_mc-c£„qòˆŽÐ; ßL?crv”ªýB€µAJÓU-òuîRÔ¯OßË(buPRkjÌÿ€“…Þ!øx­~d†#RÚd÷õ (vl ¤XS¼Ü?µÚÄ0%fîZ·[S;]$L¿Ç2¬mü zgòÌð‚DkF+Qeowç„8×½AoWépÿ箸´a–NÎèÞ‡ÇÔ‘ÑB_˼Ôw•Ã}&‘ ½ã*Y;‘8œ1V*íÑÃ}=kl6v—z±ØÖÕ6if˜žßJ´e §4AZlªþÒz—TÝÁPÆžpªi—©]"U/S›¯©“ðR­q ©%Á¨º±z‡+†¼¡¼ ªEuN^ËÃñ€kèB ~2Ì‚td8¢@«ìã©î LÃÎ×ÓÇ»¬Ž}mã{m_R #,5@LYûø’‚r!*5Bä¥ 6ôÿ–†v-Þ²`SG$,6AMYgŠzj%0;I×àü˜Š|n`S$-6AMZguƒ‘Ÿ¬ðB5*(2?L[jzÏöò¦˜Š|n)-7BNZhÄû-³¦™‹}oaTH= [hv„’Ÿ¬¹ÿ¥q‘¡ÜÓÊ¿~pbUI=3*!8CO[iw…’ ­¹ÄÎØ HÌcVI>3*"\iw…“ ­ºÅÏØà>KáóÔÊÀ´§šqcVJ>4+" &/9DP]jx†”¡®ç¯ ‘qaRD]m}Œœ«¹ÆÑóïêäÜÔËÀ´¨›rdWK^ky†”¢®ºÆõË¿²þµ©›Ž€reXK@5,$ (¯»ÆÐÙúÎÂK>2%/:¿õÕËÁ¶©œsfYLA6-$ (1;FR_lzˆ–£øÚПª›Œ|l\N@4Yh×àäÝÕ̶ª‚tgZMB7-% !)2IUbo}‹˜¥²½òý¥–†vgWI<1&$.9FTbr‚Ýåúåß×wj]PEb5?JVcq~ŒÒý™‰yj[L?3)ª·ÃÍ× [hu‚œ©´¿ÉÓÛ÷©›‹æìæàØÐƼ°¤—Š}pcWK@6-JWdr½„‘žªéãÚÑƹ¬Žo`4@M\jz‰ØÇeYMB8.*s"*3IUan¹ÄÎü¾°WI3(FTbqŸ­ºÆÑø­¡K@6-_")1;EP\htŽš§²ßÖÌÀ³¦—ˆyiHVdsƒ’¡¯¼òÎź¯eYMC9+4=GS^kw„‘©µ¿§™Š{(2>JXgv…”£±½ëæߎth\PÁËÔÜöòí·©›Œ}n_Q)4ý©„wk^SH= ŠÍ«ŽpaS+5AN\·« “‡znaVJP[gs€™¥±¼ÆÏ×ÞrcUG ƒe¨Ò´J¡™™!ò  à”%!œÀàXAŠa„€ 5“q+”î;üMw’MêÎ0cScˆ63„tã–Þ|G° Ê ]/¼Cºª#̌۟ú™‘‘ûª^ÌPŠ…™²±Ýá†ziû­Œ*Ÿ²Ã>nºF”Ío-ƒ~á"ß}1ì"€H Wµ€™q®ÖàÙôU+Q“é&2ƒ­`[˘ áÖVwh¹Ø2ePaÛ]Ü ôž.U~ÊÊ(°ðΩà»!à]b9»XÕlþ¢–âþè·ê’ wº ›Æ@ ѻ»âU•Å‰á]ýqË ˜;Ò¸òÎÔÁw}ð.Û‘¶8ÉW5f†,]lšI_Lo_5Ú²·–‘wBz6\¾G½°ŒÜö£·dÌ›wÝ ßå;À»ßÃLÙöª&ifB$É«'Ÿw}Cf¬tÿ6>ÄÕv„dr÷!þpW²¹Ë ð. y¼ðŽ^ÿÖ@Ÿ-ÎffT"@šöƒ'H"eQ³½B@ÙÄ™cRw¿ðZÆñ¥R!½ù:ÄG~jOêžèµðŽ0ß ƒã1E®¢Í .îî '—°êÖâÅ`Y +-,2H‹+‘†pÍMyÆnô‚S¨°ÔåVŸ:[ûjBß=õsÏ•ŒKççg&xY™Ê°›ÅpÅd¯³‹„W}ñ…3­èI¯e¨+¾xV™FH&óÝt;+»^ûð.Hyó)â;.ƒÏ%ºº¬J(rÍÃ7’pŠ’F÷BÕÌàˆ2¨»_Íî¾AÌϬ2!YmKö¨ì$Ëø½w0ï‚Èãc‚ãúNdP¨Ï¹ÆÐÕï\‹Ur¢Ýå¹@b°–ÿãIÒùE@> Il«.ûM° ¼_¾ßneÔLK2¼ Þ…›ßáËç^bU«¥Ê3žuûàÔg„‚÷ƘkG÷\ÛÕ.4ƒErêD‰æHËxðb:‡rºé‘ B:85<®Ùð.ˆ>$Þµ |—¢s§šÕ/bU§ØÕ¢GàùçŠQžƒ³iF*¢B•foNiÂÕVÒ­˜-ãºbÇRÙßj„”ëS'Vï‚øšwøVöï`…Û6Luˆï¾ë; F -OÖ†ÁvžjírìDu`-;õ©¹dnÐì0Û˜ä>uâ‡wA Ê»8D‡û¶PÞh¹pé´Ì;«Z»óº·RRu…Ö†%Ù !ºÂ^ )fó¿<˜&Š–Á2ÌnxD>yWJ}NðʼÂÌHŽÌXxÑó‘ªf§j +-j¡:À6XÕá÷V3Q+¶Û5!îÙ!‰°Œ´ +-$ÞÑ’wƒ°ª!ß56ff$Aóú_¦"ü‘°õdw°¸'–çj©úÕmJ“ÆÓÐÌkÉÏ°x÷ÍFÿTö`õˆwA4æMbFm⻼~\×Sxð)^¡rC ß…0)ÕS^ª&£Ë:TsŽ™Éh:­¯Ìº!UåÂß¼2¦ß m`Þó®\eTâ»)…µ; °“ã]d_3.GêH™Ü0Tªf£LµvNÇ1Tc3¶ZºÚ43Àí¦¯dï¾aŸ©†üð.È„y×;¤{Ëw[Â%·ÝéqˆS”í”±VÙcjª–çä³åk”[Ó-T3kNš\ÿGOê¡ 5W‹\ôK¼ RœwT§ ü&¾ëgL)x¤¹j ù¿§£ñký‹°xª9)ÓïZýç+‚«+®ãÍ+ÚóŒ<‘¨›É»eNÏç'‘›Š™xdχ©æ¡Ÿùž'VpwM|‡FÖl;vÁ©šeÊц©¦Yùr5T÷+ˆ¸ Ô"Ìï²UåÀƒ©œiEêð.ÈÉýðîtÈ¿ßMkÛMÈä8ù׉Ü÷¨þËËE4e*å ã´Ù‚Éâ+vîƉª'l©‡ê.¨¦vwNÑèŽT Û´+h-re–qÕU’¼sÞI ú.¤¡!ðªóµwyçŒ`Έ‡%ϸ@ƒÎ44º“'¸²ñ&xÃ;ùPDÆ$ƒi)œwæ!ezŒDJÞ¸;¢™QÍ}t÷›;Ji+&|šw"óĶu ïNÑÛwÌúú3¾»o*S*øî¢o-÷îÎÞЇ¦ mÕ ª3û¥Ã;M[˜ãšGûñ]-Ið£$4¹»Rú8ÎmźãÉb6§¸Ö¼;îÁ±Admx7ôØõ]×>{«ÆÝEL ꘡òw-ºK‚pÕR‡¼Ó€«5-‡wBKßås`W3)  %/:FSbpŽ«¹ðëæàÙÑȾ³¨œ„wk_SH>!(09C‰–¢­¸ÃÌÕÜãèíñþLÐìçáÛÓÊÁ¶« “‡A7/' #*2IS_kw„ÇÐØßæëïûÍXgóê䦚Žui]RGALWbn{‡Ò¶LZhw†•£ýï´©‘…ylaUJ@6.&"*2;DOZfr~‹—£®¹ÏĸªœŽ[²¿ÊúúËÁ·¬¡•‰|pdXMC9,5>HR^iv‚Žš¦äêîò¬ž Àôûù÷ôñíĺ¯¤˜Œ€th\QF<37AKVamy…’ž©´¿ïÐsd^m|‹™¨µî½²§œ„xk`T2:DNYeq}‰•¡¬·ÁËÓÛéâÛ>2(n}Œ›©þëæàÙÒÉÀ¶«Ÿ”ˆ{o4>GR]iu™¥°ºÄÍÕÝý¢“œñþù÷ôñìèâÛÔ‹sg\QF‘¨³½ÇÐØßåþhZLUcq€õòîéäÝÖÎƼ²§›ƒwk`UJ@7.' #ÊÒÚôðꤖ‡xj[IVdsŸÑÉ¿µªŸ“‡{odXNC:1&-5>H¤¯ô÷åÝÔË¿³¥— )2>‘Ô˹®£—G=5!(08BLVbÏ×Þú!)3?KXfu„ÖÎż²§›„xlaUKA8$+3GQ\gr}‰”Ï×ÞãéíúvhZM1;GTªŸ”‰~rg\RH1:BLValw‚Ž™¤¯¹ÂËÒÚàæêïòõ…wh[MAbqõòïêæàÚÒ˹¯¤™Žƒxla‚ÄÎ×à &-5>GQ[fq|ˆ“ž©³½ÆÎÖþªöóðìèâÜÖÎƽ³©ž“ˆ}9BLV`kv‚˜£­†xj\Nr·ôòîêåßÙÒÊÁ¸®£™Ž‚w¬¸'.p|‡’¨²¼ÅÍÕÜ=Íż³¨/'!+‘ê2:Œ—¢­·–‡yk]OC8-$Vÿù÷ôñîéäßØÑÉÀ·­£˜ƒÅäm‡’§±»ÄC*Íż²7 +-‘Ÿ­$+2:C¬éízùøäÞmb’ý\æùõòïëæh]SI@8#„ÐÝ|;DMWalw‚QD9/%Ößæûúøö™ŽƒxmcXOE=4-& #ˆ’¨Úàæ +-X峩Ÿ”‰~si^TKB91*,6A® =EO˜£­¶ÀÈÐ×ÝãèíòîèâÚÂÍÁ¸®¤š„yo.“};$*29BK“ÄÌÔÚáúóþÕÍŽ³ªŸ•LC6>GPZdoy„™¤®·ÀÉÐ×Þí¼°£WÊÁ¹¯¥›†{p#DMV`ju€Š•Ÿ©³¼ÅÍÔÛáæërœÕçáÜÕÎƾ´«¡–ŒwlbXNE=5. #R\fq{†›¥¯¸ÁÉÑØÞäéýñ•‡ykJW©¶ÁßÙÒ˺°§’ˆ}sh^TKN!'.5=FOXblw‚Œ—¡«´½ÆÎÕçáÙÐÆ»¯PDøâÜÖÏÇ¿¶¬£™Ž„yod[N %,3:CKU^is}ˆ’§±ºÂÊÒÙßýÐÆ»¯¢• +->JVdr›¨µÀËÔÜîêåàÚÓÌÄ»²©Ÿ•Š€=5.'!ƒ’¨²´J¡¡`² € é`œDèЀðX'Aˆ‚B @€ R ‚]ï.ψï>Û°ï¼ê²‚2·‰ÒÆ `.~¶Ÿ’e„ €—§æ +-ËèQðnÕëh¨Z0høâL‰¨Ú ¢Þù@¼ÅÁÃøÀËJÞÇòî×làM½@=îåV;»_ŠI}âXäziï;D·iFëÈ2õAïÒcquêÛ)1¬;äÑTÑwTö`åw y¦@+Qî\-^¸;üÒUû+ ˜$ïà#Æwžß)ù2ܧYïÆ +->“€Ùw{¾4¼#Žb“¸•á7È©£ßЄ=g~ïhS?ä.È’y×iXÎâ¾;º_É¿×Áß1½Û¶e“ðê)ÉúYÎ`Íw#òuÇ 3Ç;NTÝ1>ÐûR,£j» æˆ%é;ÔúÐ ¯alRíwCïVÄô0‰îCÀ®Y±¥ô¼³+˜",ØÖtÇ©¤§óW`çÊwnÉzß‘‡ÏUïòõcê_Ô»@Ít J²ôë;™zIäßj.ƹ]†IÁT«Ý0¨2à\øZ÷/b@rD‚wàýúÍø.šLÖVwž^õn~…¬^ñÓ’neÔ\,×Û%+0E¯A +- rwΫÜÞ¹S{BÈ]+xľË|ëÇÁTto3vÒ k&×;™JÆ1J–3èuZ}»[xû@Qe”Aènt¸ÕWÚ©9±É»¢ý¦ïBô<Ò0Ã;GõîÓ‡—3µM˨B%e„øå]¥k=Øhq‚< ½"Òž¶Ÿ_tÞr¤¼³ve3»»Ø%÷½¿™KyBYÕøc½S2"é_Ì«Pã;í®Ç¶š‹%y7çnè{êJÏÐûú^¾®¥Iw:$·ÜáÝ:=ßM¢ Æw¥zjT4¼ãû=½c<"QŠr ]ˆa I|÷k}]#´J¼+"´ŒÞœšè¤A¹#¶Bˆ§¿Ö›KèõË;|Iyðk¼üí»£ õŽ÷1Ñ/g8óÆö:hyç5ˆ‘æåÔ´~6›îø#ò½J3ÆåKLyÏå=rŒï–w 1Ý=õîËÞÕßžÌFËǸ^…w^ßµ/ +-¥‹ŽµÏ JE¤­ôî +-æ‹jd;O/‰#îS5/Iˆªh›º›ÞáÞ2Œç+ƒ?º{“ðîBí;›¿Ê2«n«f`Ù­My×yžs8a&/ÁžHÆˉ*žß÷’c£ÀÀÄߘ¡¤}Â;¾ïèúR6²j5C;çð}_€@ŒÁ2¹ÎªìáɳóÀÌ}è«âv9)žÓ2BÈzºSKx‡|G ÂÃØÕi"ÎRbÞ¾ 8Di¦_}Wø¢jT/؉ÓY#¹ÞT€wd8î£ãz<îÆ -CÇS¢ðŽdøŽÐ?‹"ué•ëÌ|”ƒw¥T}´÷«ãÛrCÀÊw¡Å¯QÖ®ÿ?£…s%¬b¨ã¼×,CjÁ%ëÇÝþøôZ:ÆDšðNW|§ AñþsÜ*íÚÝIñy·Hdà݉¡z8•¦÷.\·Dô€+L\LÞÉãæ. Yn-£2¯Œ²§>HáÉñÝó‰A Íuº»ÒS~==v.F4€•ñÝMm–†aoÑMÈ[_¨WÝx™"ü’»Œú–qrÂ;Sò]ƒ¡fø$¹ö…E¤QÌ4:Jv)TgçCpžÒJlv]'¡¹ïæ­QðÜÂþɾZÆg…w¼å»-Gí ó Q3ΪùöÇSàãÁLÛ3dOžÕå'3w}‹h†c(Íš{@|`îVU®S¦á5Þ)šïd‚ÉÔŒÙhº;ŒºåƨZßRÍŠÿ—;µ’¹«ü¿pÉl_Qá=&`~ÉÝÉZ¡Â»ç»1 +-Ä-~¦jÆ£ww`çÉ]W²o8·2mBÌ`’‰,1{”\sIÑ\<øý×Ý_Ð;{2¹SÓ©ñÐe…w Ñw”BDÍpäï¾6ñD ïÀÍŒ(4žßá)%™Ñ z6ZвtBJ±Š3žeÞbit‚©þ4s÷á +-ï4ßw +-ÊŒ¦²»Ã]Õ¹f†ÑWqy Vþ’ˆbF ©ì— +-(¨ôÀ´Í$HQ[eoy„Ž™£­¶¿ÇÏÖÜâçþçàØ”†xj3>JVcqš¨´øõóðìèãÝ×ÐÉÁ¸¯¥›‘†|rgoa"(.5=ENXakv€‹•Ÿ©²»ÄÌÓÚàåþñ®¡“†xj\PD8.!*3>IÜþîêƽµ«¢—ƒyndZQH?80*#þ CKU^hr}‡‘ìðóæßØÏi\OC8.%=IUbpöóðíèäÞØÒËú±¨ž”Š(" $*18@IR[eoyƒŽ˜¢¬µ¾ÆÍÕÛáæêþæ’„wi[)2=H™¦²üÈÀ·®¤h^UKC;3,& üýýý#)/6>v€Š•ž¨²»ÃËðóö×h|ŠñüåàÚÔÍŽ´«¡—ƒyoe[RIA91+%üüûú !'-470) ÷ùúûûúø:BJS\fpz„Ž˜¢«µ½ÅÍÔÚàåêîýÕÌ·ªž;ÐÙæáÜÖÏÇÀ·®¥›‘‡}si`VMô÷øùø÷õ %+18@HQZcmwÃËÒØÞþøÁ¶ª‚tfYL•£¯éåßÚÓ¢˜Ž„{qg]TKC;4-'!àçìðóõöõôòî#)07>FOXakt~ˆ’œ¦¯ôÜÔËÀµ©œŽseXL@5,#ly‡ÅÏØßû²©Ÿ–Œ‚xnd2ÏØàæëîñòñðí70)$ÖÝáåææãß  &,2:AIR[dnw‹•ž¨±¹ÂÉÐ×Ýô÷ÚÒȾ²*&/8CO[hv„ÖäÞÙÒËļ´«¢˜Ž…{qh^UMD=5/(#ÃÌÓÙÜÞÝÛÖÐȾ³§™ PYblu‰’œ¥¯·¿ÇÎþçáÚÑǽ"Zgu‚ªòîëçâÝ×Ñʺ²© –ƒyof]TKC<4.("Ÿ¬·ÀÈÎÒÔÔÑÌż± +- $*W`js}‡š£¬µ½ÅÍÓÚÐǼ°¤—2)tœ©þÛÕ°§ž”‹wnd[RJB;4-'"M‘ž©´¼ÂÇÉÈÅÀ¸¯¤˜Š$)/6=EMV_hr{…˜ØÞãçìïòýØÏÅ»¯£$,6@LXer€Ž›¨´¿óðíéäßÚÔÍÆ¿¶®¥œ’‰vlcZQIA:3,gu‚›¦®µ¹»»¸²ª¡•‰|naTG#)/581 P…Ž— ©±¹ÁÈÏÕÛàåïëå—‰|obUI>4BüúùÒÌŽ¶®¥, $)/379::851,#(-4Ÿ¨°¸ÀÇÎÔÚßäÎzm`THLXerš¦²½ÈÑÙþñîêæâÝ×ÑËĽµ­¥œ2,&! $(+-.-,)&".Q{„–¿ÇÍÔÙßãèëïò¸¬ “†yk_RF<5@KWcp¼Æðóðí“_VNG?92,'"  "#"! +- $).4;B§°·¿ÆÍÓÙÞãžE:1( n|‰–£¯ºêéåÊWOG@93-'"  +-  /5;BJ|¯·¿ÆÌí‚uh[OCS`mz‡”¡ø÷õòÖÑÊļ”h_WOH@:3-(# %*06ELT\dlt}†Ž—Ÿ¨°·¿Æí𺮢–‰|5,8CNZàæ•Œ„{rjbZRJC=60+28?FMU]emu~‡˜ ¨°¸”‡%.7ALX¤°¼Æ¶®¦ž–…|skc[SLE>82,:@GNV^fnwˆ™¡©±^ݶ¯§Ÿ–Ž†}uld\UMF?93-(# %*/5;BIPW_gox€‰‘™¢ª±¹ÀÇÍÓøáÚÑÈ\P#+4=HÔž·¯¨ ˜‡~vnf^VOHA"&+17=CJRYaiqy‚Š’›£«²ºÁÇÍÓÙÞÐǼ²¦™C8")žÒÒÌÅ¿¸°©¡™‘ˆ€xph`XQJC<61+&"#(-28?ELS[cks{ƒŒ”œ¤¬³ºÁÈÎÔÙÞãçź¯£—Š}pdWLA7-§ðíéæáÝØÒÍÆÀ¹²ª¢š’Š‚zrjbZ)/}…•¥­´¼ÂÉÏÔÚßãçêîéaU¥°»õòðíêæâÝØÓÍÇÁº³«¤œ”Œ„|tld\UNG@:4/)% "'+16EKRZaiqy‰‘™¡¨°·¾ÄËÑÖÛàäèE;>I«ôîêçãßÚÕÏÉý¶¯§ ˜ˆ€xpiaYRKE>83.)$ !&+05;AGNU\‹“›£ª×ÜàåèìïïêåßsgZNC90'R^jw„©´¿ðýñîëçäßÛÖÑËž¸±©¢š’Šƒ{skc\UNGA;50+&"7=CJQW_fnv¬³ºÁÇÍÒØÝáåéìïòÍĹ®£–Š}p1:EP[¦²üûúù÷õóñîëèäàÜ×ÒÌÆÀ¹²«¤•…}unf_XQJD>82-( !&*/4:@FMSZbiqx€ˆ—Ÿ§®µ¼ÂÈÎÔÙÝâæéíðòôöø ”‡z q~‹—£¯ºÄÍÖöôñïìéåáÝØÓÎÈ»µ®¦Ÿ—ˆ€yqib[TMG@  $IPV^elt{ƒ‹’š¢©°·¾ÄæêíðòõÉ¿´©‘=Vbn{ˆ”¡¬·ÂËÔûúù÷öôÞÚÕÏÊĽ·°©¢š“‹ƒ|tme^WPJC +- "LSZahpw†Ž•¤«²¹ÀÆÌçëõ×ÏƼ4>HT_lx…‘žªµüøöÛÖÑË–Ž‡xpA;60+'#  $)OV]dksz‚‰‘˜ §®µ»ÂÈÍÓØÜáåøú£—‹~reYƒÌ¨rœ !dH@@d˜r 8 @2¨'Ê  0Y1 +-B ! @R-Ó`ð©m9W¾™»?΃€K¤ŒkMî 2e”ç eï<9-ÒT%ÇwÁ=†Õ8úÎ’¼+pTú®õŠóyx?ï²€êí$ü¬:'ˆæÎ_$ jjô¡Üe©;¿u|IΨ•Ô»_c3–Ó» x‚wÉæ«Z¬˜ }´ÿRv½ L]s¦Ý .š•rCX.¦Üù¿‡| +’jø„ßµ¯ ÞÙÚŠ·¢ðlWD¸’ôSVîéï/¿aÏîz=²zŸ¿oÊ0Ûh…+|Ù}„ˆ’à§ì¿|˜€’.;¤™FV”õ?RZ.8-0hî¢vTeJ[˜^EÜI¦fáÎîô1ýÙæ&zå»ìØ;Žðù`ÄbéP’P ßfâíýJ Ö©±Œ—ÕšÌÜÅ´»R¢'î`×q¹#jq±‹á;„ß5ŠwÔÜ3]ä¸ø’/°«gÉÌHÁí•7Æ%6¥™“ûï¡»r¹ V9ín˜2ê¥|GÞô®f¾­eW~W6=ØOD2ßò“̘Tßi×±÷f¡îXÆd*:W©²ØQ½”Y`wâ.ÏÔXMî *Êws~'µÌ'&J×Avˆð¦}…媎—ŽªÒ ° FEèìëÍêïÔ[kÚ]CS§w(P:;m¸CcvbËwN8cP w¥ü.#Š¶ïñZÎfF¹©‹žÞ_–"ï¿„>5ù²´;cpWe´…»¡4$P¾#çö­éà¿3þrxQþP@íÿ ‘~é[´†‘nÌl(qô§^€˜v×S³‹2È©îTà14¦~Š+ïô½ËòïF/Ô`M:su°C8Pm*÷ç¦y£ñXÆäS…(™ºÉF_D•aZ ÓÝ1¸+A‹G>«âŒW”ÞEH<¿›Gæ¯û¸G IÏX¾ó)°Ä„rõ„Bu|ÎÂñ#oEHiXÆ¿x>èSc%×î–RF€¸£2"¥ ;Äu­DÌgq†ÞÂêöüŽP#Æ=ª{qîb é”Ó~"qœ¡é»ŽI—Í›V„™‰’a vj'Pí®« 1Ä]wwˆ•ê°W´=g„Ó;ÍÆf4ûwüÑ 0ö.Á¢T­ÌŒ°¨Á +-w'ÓÆùÆ›[ æðf—ÂðêÂË ó©+ó˜Áv7kê½Ê(ìôóà¯x,ž<½sYÛ÷;9]˜„ö˜P¸G‹õ2Å6C|µñMœ—’•ácz>uШÙ]ü(Hj•Á”v…ƒ…„Ù“¹ÔÂê›$FÃJýL D0ºD°ÏÅÝݲ=&ýÝrk­!±¸‡³¾²Þù ¡`%œºÔÔuûîzéDe0½~ ˜pÂ!RˆŽ|W¿Ò»B$&±¼«ß±àÓšzßêDÑ(Á>4ÂV·8œ±MÇD~#ˆ(YJ‹îÈŒØÃÜÚMýÊjLåÂçøN¸T·ö¥¨ü]v‰u>Á½…‹ààâÇTÝã»Ö §A'å£øy¸Ö1ÇÿÒÎŽÎ];éK u*£#±;MM¼"üÜêRß]Ì.5±û;ý­×œ‹»j¶<–&´µip“Ö9F ØZy%B5(€gK¿€†¿2mî`é•8 g„ý½;ç[¨HÃc[‚‹‹ýÓŒ¸Þ½cíª¥“k[ƒ(®@¦~3¸¹Eå(ŸËN1Éy¬Ä\"úU#Òl8õÎît2NTFÅ7r¡³Ü©c +-àh\jÆY"Ä)üN[©°„@Ç‹ïªVî®çt¾ÓÑþ³§MŸ€°~åNq¤ßD…îæëœ:Ôïvëf³»0ŒÝ(áÿ؆Wµì]ÎW38Ã;v:ÀM±4tÿYO-EÞ•E Ò uJqW2&¿»c¿¿Î= ·‚•ï²ß{‡Ê»Æi´ƧédÃ36"ì? íÄãW¶Jˆó¶¨ÛõŒ­ÀBîÊÜþ³=`‰¡TD¾Súïvy7[U‰UäÌ:pw,5Ê4¨¨ÚDBc{6w9Šˆz>,úŸy0­qS>UÏ´SÆ廳¯ywÊ ­õøNþÿqE±ÏÚ uoðxßÝBÉ}ÈÖh[êbžÛwt¿åà©maÛÒ)tôì— +-×ïÎÿä®»ýúNþöÞ#&Òl›Á«Å¦ÕÀ®ðÉ!5Z¶6žg#jñ×…]ýOœl= ÌNi*NÛU‘;mItwÝ.zÝ•Q@ß):ïßmq ïú”fÀWÁ@}Q'#¾ø&ÑVbè;ˆè¾îòÇŽ‡Î‹­Í<8+Dîn‰~!tÄ1üRvÇ©‹»Ây§·Ô!"¾Ó> â™6 M$Á6Åã*P¾e‚ÌAÆǾëxÙB·P]º0Y.,Ûè„Á»C€qŸðKUNM`T†ùî•“–A§4¹Ã¦ï|ðß=¶Ôµm¶á~ô8ÞÁöJs·è$¡Ø@Ñ8 +-oöñÂÜyJtêhÒ’¸ñЧp*c¨ç]ïÙfÆÜÁ|'?ÿ ¬šáâÓŒÅ!£qÿZq™Ì­‚é»`?d!æ;—d„Ò5îÓ·jCžÌËY $Ÿý¼³ñ³ %åÔ#¤mžwÕžwL +-è»)ô«§³êá¼6,¼U«†à·ü+£ÜwØ2Ï»Œ¦ÍúÜÈ]G§b£ÜÑÅ£S+–¡,î‘)¶;UÏ;H_"Ÿ¾ VžÞ£«xy÷±%¶jðˆ:Ù×¾ díOáQ{O ³óËþ˜šr*¶Ž,ã=•1¼_wÈ#Vû<}§Uë® 6CV«ž‡pnß’oq3YÄ·Ìwen{Øqv[ wŠq`y‡Dèò:õ=ª2dw'#rPw¨ô]’îªM¥¼K”ÙOH$^(> `ò𺸫iߊx$¾ÓÉÀ¢[`ßÿ”'¾­|ÍÖBòz ±† ¤.ß·S/É]oN®˜,ƒá o“Áw‡fª¼»r›A[µQéÚÏ ¾c^ó!ßMgîGð„éëß©;°¦øµù“›VÂAÊ*.±ŒŒÝy,ø·®B}W{w¦¬Ky§‘ˆÁ®wl,ðßNƾ“žžw ÷q¶ßËå,KðL0±?ìN]$UF}É8ð.B|ÇVIå]{m¤UK¡w™[N¡'–Ù¶&ù»çÅ”wÞ·Jã´`[öf?caqw^r&·Äe¨ŽïÔ+ƒ¼»6ƒ}Ü =Ÿ½‘K§%ñ’ê}7úçI)?+Ý¢eT/"•qúK©i§–þ*£ÜMÌ?ï*Ïw㺼[ùœé’JÑîìNq.‡é)mn¤³ ­ev6é̳€äßd Ý‘»¦‚Mrºƒð…ñ%wÑt>…׫µÍ:lßyìòN…3-{m†0½£ÆwÄ¿–ü¦ïJ4ô¼›µÜÈ`ŽzQÞÕPqj3=Ë ¤3—mÃÇ’wêã»ìZp“ŽUçöî"Ô`ìüd293.*%!#'+05;ov~…”œ£ª±·¾ÄÊÏÔÙÞâæéìïñþ¡”ˆ{obVK@7 NZfr‹˜ÝûùïìéæâÞÙÔÏÊľ¸±ª£œ•Ž†NHB<71-($ &*.39>DJPW]dlsz‚‰˜Ÿ¦­´ºßþü¿7ALWco|ˆþçãßÛÖÑÌÇÁ»´®§ ™‘Šƒ{tmf_XRKE@:594/*&" #',05:@FLRX_fmt{‚‰‘˜Ÿ¦­³ºÀÆËÐÕÚñíèâ‹C#*3ÖþïìéæãßÚÖÑÌÆÁº’‹„}vohaZ2.)%! #'+/4V]cjqx†Ž•œ£©°¶½ÃÈÎÓ×Üàä÷ðëæáÚÒÊÀ¶« ”‡{obWKNûØÓÎÉþ·±«¤–ˆzsle_XRLFA;61-)%!8=Cv}„‹’™ Ååéìîñþù÷ØÐÇxk_TI>5,$KõþâÞ»µ¯¨¡›”†xqjd]WQ1,($!27ITõëçäàܸ²¬¦Ÿ˜‘ib\VPJD?:50%)-279 +- "&EKPV\biov|ƒŠ—ž¤«±·½ÂÈÍÒÖÚßâæéëîð󿱦š‚vj^SlýþÛ×ÓÎÉľ¹³­§ š“†€yslf:51,*.Jhou{‚‰–œ£©ÔÙÝáäèêíïòóÔ˸®¢—‹rf[OüöôòðîëèåÍȽ·²¬¥Ÿ™’Œ†yr?:51-)%"  #'*.27ahnt{ˆŽ•›¢¨®´º¿ÅÊÏÓØÜßãÙÑÈcWLB8êçäáÝÙÕÐÌÇÁ¼¶°«¥ž˜’‹…xOID?;62.*&#  !$'+/38HS^jv‚Ž÷õÊÅÀ»µŒ…ysmga[VQKFB=840, 6:>CHMRX]ciou{ ¦¬±·¼ÂÇÌÐÕÙÝàäçê÷XM*2;EŠ•¡¬·ÀÊÒÙàåóòïíÞÚ×ÒÎÉÅÀºµ¯†€ztnhb]WRMHC?:62.* "%(,/37<@EJOTY_djpv|‚ˆ«±·¼ÁÆËÐÔüþèãÝÖÎÅ»`TJ?68BLWbnÆÏ×úþþûúù÷öÞÚÖÒÎÉÄ¿ºµ°ª¤Ÿ™“‡{uojd^YTOJE@< +- !#'*-159>BGKPU[`fkqw}ƒ‰•›¡ÁÆËÏÔØÛßõüþõóï¢Q%-u™¤¯¹öôóñïì«¥Ÿš”Žˆ‚|wqkf`[VQLGB>:62.  37;@DINRX]bhmsy~„Š–œ¡§­²ÏÓ×ûþñîéäÞØÐǾ´ªž“‡{oc +-q}‰• «òðîÝÊÅÀ»¶±¬¦¡›•Š„~ysnhc]XSNI-*&# "%(+.26:Z_djouz€†Œ‘—¢¨­³¸½ÂÇ÷ùúÄ»°¦š/8þìéÊÆÁ¼·²­§¢œ—‘Œ†{upjeHC?;730,)&#   !$'*.158<@EINSX]bglrw}‚ˆ“™ž¤©¯´¹¾ÃÇÌÐêïêåàÙÒÊÁ·­¢–Šsg[€Ëò×ÓÏËƽ¸³®©¤ž™”Ž‰ƒ~xsmhc^YTOKFB>:63/-048<@DHLQV[`ejouz…Š•› ¥«°µº¿ÃÈÌôÏƽ³¨’†zncWMC90DOYíêçåâÞÛØÔÐÌÇÿºµ°«¦¡›–‘‹†€{vpkfa\WSNJEA=!"$'*-047;?CGKPUY^chmrx}‚ˆ’˜¢§­²·»ÀÅÉÍÑÕÙÜàãåèëþÛÓËù¯¤™‚vjAKUèåâßÜØÕÑÍÉÅÀ¼·²­¨£ž™“Ž‰ƒ~ytoje`[WRNIEA>:630,)'$! "%(*.148OTqv{€…‹ª¯´¸½ÂÆÊÎÒÖÚÝàãæéûùÐÈ¿µ« •‰}qf[PE,4ñïíëèæãàÝÙÖÒÏËƾ¹´°«¦¡œ–‘Œ‡‚}xsnid_[VRNJFB>:730-*(%" #&(+afkpuz„‰Ž“˜£¨­±¶»¿ÄÈÌÐÓ×ÚÞá䱧œ„ymaVLB8"‘ÎùôóñïíëéæäáÞÛ×ÔÐÌÈÄÀ»·²®©¤Ÿš•‹†|wrnidJFB?;851.,)& +- "%'*-/369PTX]afjoty~ƒˆ’—œ¡¦«¯´¹½ÁÆÊÎÑÕçêìîðòÙÑÉÁ·­¢—‹€th]RH>5 .6@IúõóåâßÜÙÕÒÎÊƾºµ±¬§£ž™”Še`\WSOKHD@=9630-+(%#! +-"$&),.147;>AEIMQUY]bfkoty~‚‡Œ‘–› ¤©®²·»ÀÝàãåèôõöøù¨’‡{odYND;2*#q©´½ÇÏóþù÷öõôòðÍÉÅÁ½¸´°«§¢xsnjfa]YUQMI2/-*'%#!  (+.0369=@CGKNRVZ_cglpuy~ƒ‡Œ‘–šŸ¤¨­±¶º¾ÕØÜßáäç®k_UalwƒŽš¥¯¹ÃêýüüûúóñïîìéÖÓÏÌÈÄÀ¼¸´¯«¦¢™”‹†‚}ytpkgc_[A>:752/,* $&);8631.,* !"$&(*-/247ILOSVZ^beinrvz~‚‡‹”˜œ¡¥©ÈÌÏÓÖÙÜßáäæèëíîðòþôðíèãÞס•ŠsS^it€‹–¡ýöéçåâàÝÚÄÀ¼¹µ±­©¥¡œ˜”Œ‡ƒ{wsokgd`\YUROKHEB?=:7520!#$&(*,/1368;>@CFIMPSWZ^aeimquy}…‰’–šž¢¦ª®²¶º¾ÂÅÉÛÞáãæñóýáÛÔÌÄ»±§œ…zn2*#Ydo{†‘œüùø÷öôóòðîÒÏËÈÅÁ¾º¶²®«§£Ÿ›—“‹hda]ZVSPMJGDA?<:753%#!  +- "$%')+-:=@BEHKNQTX[_bfimqtx|€„ˆŒ”˜œ ¤¨¬°´¸»¿ÂÆÉÍÐÓÖÙÜÞáðíé䶬¢—‹€ui^TI@7/'AJŒ—¢ûóñÛØÕÓÐÌÉÆÿ¼¸´žš–’ŽŠ‡ƒ{xtpmifb_MJGDB?=:8641/-"  +-  ,.02479;=@CEHKNPSWZ]`dgjnruy}“—›Ÿ£§«®²¶¹½ÀÄÇÊÎÑÔ×ÙÜßíïñþ’†{odYO%,4=FPZe»ÄïþãáÞÜÙÖÔÑÎËÈÄÁ¾º·³°¬¨¥¡š–’‹‡„€|yurokheb_[XUSPMJHEC@>20.,+)! +-  +- (*+-/02468:=?ADFIKNQTVY\`cfilpswz~…‰Œ”—›Ÿ¢¦ª­±µÌÏÒÕ×ÚÝßâäôö÷øøÐÈÀ·­¢—Œvj_ ")09BKU`kvÀÉÐØÞäïíëêèæäáßÝÚØÕÒÐÍÊÇÃÀ½º¶³°¬©¥¢ž›—”‰†‚{xurn\YWTQOLJGECA><:875310.,+*('%$#"!  +- &')*,579;HKMPRUXZ]vy}€ƒ‡ŠŽ‘•˜œŸ£¦ª­±´¸»¾ÁÄÈËÎÑàâäçéêìîîÍÄ»²¨’&“úõôìêèçåãàÞÜÙ×ÔÑÏÌÉÆÃÀ½º·´°­ª¦£ œ™–’Œˆ…oligda^[YVTQOMKHFDB@><;975421/.-+*)('& !"#$%&'(*+3568:;=?ACEGIKNPRUWZ]_behjm†Š”—šž¡¤¨«®±µÇÊÍÐÒÕØÚÝßáãîðüýþvk`VK ÀÈìèæäâàÝÛÙÖÄÁ¾»¸µ²®«¨¥¢Ÿœ™•’Œ‰†ƒ€}zwtqnlifda_\ZXUSQOMKIGECB@>=;98754310/.-,$#""! !"##$%&&'()*+,-./1234679:<=?ABDFHJLNPRTVY[]`rux{~„‡Š“—š £¦©­°³¶¹¼¿ÂÅ×ÚÜÞàãåôñîêæàÚÔÌqf[QG>5-& &.6>GQ\fq|ˆÌîìêéçåãáßÝÛÙ×ÔÒÏÍÊÇÅ¿¼º·´±–“‘Ž‹ˆ…‚}zwurpmkhfca_][YWJHFECB@?><;:976543210//.-,,+**)((''&&%%%$""""!!!!! !""""###$$$%%&&&''())*++,--./0123456789:<=>@ABDEGISUWY\^`bdgilnqsvx{~€ƒ†‰Œ’”¬¯²µ¸»¾ÀÃÆÈËÎÐÓâäæèýþÈÀ¶VLB:12:C˜¢­þþòñéçåãâàÞÜÚ×ÕÓÐÎÌÉÇÄ¿¼¹·´±®¬©¦£¡ž›˜–“Ž‹ˆ†ƒ~|ywurpnligeZXVUSQPNMKJIGFEDBA@?>=<;;:988765544322111....-----,,,,,-....12233445667889:;<=>?@ABCDEGHIKLMOPRTUWYZfhjloqsuxz}‚„‡‰Œ‘”—™œŸ¢¤§ª­¯²µ¸º½ÀÂÅÈÊÍÏÑÓÖØìîïðþ÷±§’‡|qf\QG>6. ÃêæäâàÞÐÎ˽º¸µ³°­«¨¦£¡žœ™—”’‹ˆ†„}{ywusqomkigfdba_^\[YXVUTRQPONMLKJIHGGFEDDCBBA===<<<<;<<<<==>>>??@@AABBCDDEFGHIIJKLMNPQRSTVWXZ[]^`acefhjlm|~€‚…‡‰ŒŽ“•˜šŸ¢¤§©¬®±³¶¹»¾ÀÂÅÇÊÌÎÑÓÕ×ÙÛóïìçâÝ¢—VLC:ŒîìëéèæØÖÔÒÐÎÌÊÇÅÃÁ¾¼º·µ³°®¬©§¥¢ žœ™—•“‘ŒŠˆ†„‚€vtrqonlkihfedca`_^]\[ZYXWWVUTTSRNNMMMLLLLKLMMMNNOOPPQQRRSTTUVWXXYZ[\]^`abcdfghjkmnpqsuvxz|}ƒ…‡‰‹‘”–˜šŸ¡£¦¨ª­¯±´¶¸»½¿ÁÄÆàâäåçèêëíøþßÙÓËú±§œ[QH>6.' !'.6>H‘œ¦°ºýóÛÙ×ÕÓÑÏÍËÉÇÅÃÁ¿½»¹¶´²°®¬ª¨¦¤¢ žœš˜–”’‹‰ˆ†„ƒ€~}{zywvutrqponmlkjiihgffeddcbbaa```___^^^^]]]]]^^^^^___``aabbccddeffghijklmnopqrstuwxy{|}€‚ƒ…‡ˆŠŒŽ‘“•—™›Ÿ¡£¤§©«­¯±³µ·¹¼¾ÀÂÄÆÈÊÌÎÐÒÔÖØéëìíýþÎǾµ«¡—Œvk`$*–¡«µ¾ÆëýßÝÜÚØ×ÕÓÑÐÎÌÊÈÆ·«©§¥¤¢ ž›š˜–•“’ŽŒ‹Š‰‡†…„ƒ‚€~}|{{zyxxwwvuuttsssrrrqrrrssttuuvvwwxyyz{||}~€‚ƒ„…‡ˆ‰ŠŒŽ‘“”–—™šœŸ¡¢¤¦¨ª´¶¸ºÅÇÉËÍÏÐÒÔÖ×ÙÛÜÞßáéëì÷øùýØÒʹ°¦œ‘†{pep¹ëêèçßÝÜÚÙ×ÖÔÓÑÏÎÌËÉÇÆÄÂÁ¿½¼º¹·µ´²±¯®¬«©¨¦¥¤¢¡ Ÿœ›š™˜—–”““’‘ŽŽŒŒ‹ŠŠ‰‰ˆˆ‡‡†††…………„„„„„…………†††‡‡‡ˆˆ‰‰Š‹‹ŒŒŽ‘’“”•–—˜™š›žŸ ¡£¤¦§¨ª«­®°±³´¶¸¹»½¾ÀÁÃÅÆÈÊÓÕ×ØÚÛÝæçéêëìíîðöŽ´ª –‹€uk`VLB „Ö¨sÈJ”ã(…”1È!¡)s€€€-ΪJ%n@ Ȳ¡<‹QÄ Ã@€@„ƒ"êpƒîÆaÁoÜÉŠí˜ÕvV–¥vÞ'¼òð¶/”ð`óKfåïtéIÎr°öbˆîÎɪ‘“û‹WÙeþ@R] +-ne¬‡4µ;uÐ }]9 +-;®Ú.–²é\»žÔÎÕŠvö¯C¨ñjCñº^óÕéÂK$ð,•J`I$† Öîº!N3­|·åŒ2€)‡¡»¥‰¸),£+zîpßcÆÝ®exY”¿ÔÂã”<Ë/e‰tEБÄÌv4cjõN¥‘yHžRNÑNE訌çÁfVÛú<Ü!·›¿Fk7|$nÔTýåx“+xõ ïåÆ(3¦¬{æQ%¯=>^ÀxHñÆFcÓ‰w Ž‚—cŒÄº3–ø®cEÖUƇ¿C¯þË Ò_^˜»Ð˜•å© ö Éžî|îNÆ —²¶r×PÜÅ×®þ Û™Ò.×î§ÑŽ“ìzuKÁÚÙVé)ƒxF-Þ +-ïÆ7‡§ ÞDøn} åaÙ§\ÓŸ¡6LÈ ˆEÞh¢ˆ[e¨Œx%O­ñ\4W@=uº©»Ú‚pgh¶kìÖíºÚÅ7;©“qä!yÎÆ°xQ„7ø‘x‹†7éÁ~÷ã»DßMËL¤„`nŽ–tÃe-©Ä±Ìh“±Û2áY—ÎõñÔ$H­€%óí+}c”v2Îû†»·p¸"ÃwíÎÌvÑN§›Ï !O4Ÿxâyá%þ¯._à}q¯ó;V±w´{7ðÝǦáÊ·cDÚÐWHJ×dì÷W!0K‚ øžšl¾¦¤ÜÞÔˆ¢îB¦Ô\÷vôs·wäµ[¡Ëí‚nMöjw”òÃ{…x¯8Ïv‹ðô¼ŽßõÆΨŒq†øÒëhnDjü«¨þÀ]3¼ºuZ8 Âéøœ};×2b|Ûßd”Cw‰`pgáîx»ˆo»Èáò0¼iXÏ¿¨è#g¿à†…WZ/×^¤U=+Á”Šuh°%Æ|ˆ +-|j†M_¸À ‹Q)l#)LÈÿÀôâ!u7½ɵíÔw¶ÜÛ5ÙÎvŠqÃs ^ôó’»,ð%œøï.a’<„YM®²«¶¾»k‰¨ݘƒxý— ÁÏÎ L×=µ'ÝÝ]V—òǹ|;+Ÿ$6w‰Üv¹D2¬m§ik'±]ž*1ÁsDx̹<#RàÁ÷Ýå'1TÛØV½Ó±ê5'}†ð™qX3*%DZ†¾ ¿t·×FÖ]´ÁÝW&#ýr—»Öàî¼›¡…GúƒlªMàÝxɶy8?–¨uÎŒ¡5CˆústÉ+£˜†=5Ý’•pPwéÚ®@ÜQ#³ù»® +-àý÷ƒ©ïo†>ž *ÿ×€Ù€¨5ÃPD" ~I⺄{j}º“ìè®gd©×Ü9·]yGFÄíà‡;y'©à5Ÿ©‘1x4agè·w¢°.Z‡mGÛ«K-a„[P-\Áå½²Z‰·ºe¸à©{»”¡w# (#áÞÎúȸHwvYb,ì3øüß™rün£úΘÕ/«;¸ä™ 0¿^†õ|.£½!05iÑs~I¡¿HÌ^µÒ䦧¶` ‰ë«ºc¸+ÓÜiãN¦LX¼ÒÕZ}ðô†üªkÏfÃ+ŽRß®fD‘HEÓ´IŒîÅLx|C:n°É-“îé€îÉ0´p¬OÖÝÔwźÝÄdжæÎýÎ3zî üßy}çpùî§3Òx0YµÞ !ýºsúe5#†ˆd‰.gi¨¬'B:زe<SœµÊPég¶¦@±î +-q'övúFb¨G*ƒW#ð»¶hï\Áû‘ÈÚ¤ƒ©ÿ…£Ï ‰¡f(㙑9 ËÃçÖ2l-)²jÑqEê—26 ܉º+¯Äˆóù· û™ÜÝNøíKÜN†îd¹»b +-mÛ;Šà»hxt“Õ÷*åV&à3£Ãæ”wèQ‚w`$y`î†'åKØ2Œ^2¹ú)c¸&§;êÉ°îtv_U«kgPÞïáfäq¾,ÄG͈BR^ž*†8ðntˆsw•½²§­UËسv§†ê +-Ó‰t·Ÿ Ïpã‹¢S«•?$ÐÐwoù|—|RŸ\0`ÿê1¡äÇ®Y‚8¼³á°ÅWJ¤ÖÓ]“»}¹Ð®Ó§‹ÑÀe•+É[PFp' ðˆ¥a ï4wžJ_0¹lä0EßZÁ3(…wH1¥ø®NÔx“» ¨[† JeDf¦6äáîUT¡»Ô"9CFÅÞx¶Ï:_ïÆbuþ;¯“J@ìƒå«& +-à\–Q%‘Йlû|)€)!ts*¸KV› r—ªºkÀ]C=קöÎÞ|—Bïš*™s!ú˜|6(xGmU÷(5É]BrËP„8Æ@HµOðMeÔ Pî8ž2²Ü9(ã¸Ðº¹²ÑkðzEÓ‚3öÑ;†êê‚]𒬬ý¼ñ¨„^Õ>-”àS·Qe_‚m ÞÍGš¥ó‰Ê 󔑃îl«kàQ,güV|èf¶Î‰ õ<© 6 ¾:œÁ»ÇSµ æ'<:½S]!”t{Χdƒ¾¥;@JS£ïTÆt×4¼dVKÓöræ;5½›©wQ~ÂÙcÃ><ú|#«: +-ï Õq^††ÎT¸çAH‘³mw`JÜý1õΓÁ¾ºëNÓìf7g˜ôî„€Çfµ¾‡ÿ…tI8­Å3Ϊ†¹£Ûè‹â<-Úßy·§aLS·‘8T†3»TGtÇÃ<ÓÞQ¦èÝóŒïjÁf8Aê @lø› \c;g«ýþªŽEnx'äªç(‚¹KÇÊè”Ü]gÌ`hê®%wRFÐŽrÀÓRÊ.z·¡Ö úcM¼ÓGf?豪é)•g „wo#*19BKU_ju€Š• ª³¼ùø÷äâáàÞÝÜÚÙØÖÕÔÒÑÏÎÍËÊÈÇÆÄÃÁÀ¿½¼»¹¸·µ´³²±°¯®¬«ª©¨§¦¦¥¤£¢¢¡  Ÿžžœœ››ššš™™™˜™™™™šš››œœœžŸŸ  ¡¢££¤¥¦§¨©ª«¬­®¯°±²´µ¶·¹º»¼¾¿ÀÂÃÅÆÇÉÊÌÍÏÐÑÓÔÖàâãäåçèïýõóﮥš…zoeZPG>5FPZdoz„š¤®·ÀÈÐÖÝöõôéãâáßÞÝÜÛÚØ×ÐÏÎÌËÊÉÈÇÆÅÄÃÂÁÀ¿¾½¼»º¹¸··¶µ´´³²²±±°°¯¯®®­­­¬¬¬«¬¬¬¬­­®®®¯¯°°±±²³³´µµ¶·¸¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉËÌÍÎÏÐÒÓÔÕÖØÙÚÛÜÞßàáòóôõõö÷ýþñí锊ti_U9A±õþüû÷öòñðïàÙØ××ÖÕÔÓÒÑÐÏÎÎÍÌËÊÉÉÈÇÇÆÅÅÄÃÃÂÂÂÁÁÀÀ¿¿¿¾¾½½½½¼½½½½¾¾¾¿¿¿ÀÀÁÁÂÂÃÃÄÄÅÅÆÇÇÈÉÊÊÐÑ×Ýåæþúø÷ôòïëæ­£™ŽƒyncYOF=5  &-4=EOYcmxƒÎúùôóïîíììëêééèçæâáàßßÞÝÝÜÛÚÚÙØØ×ÖÖÕÕÔÓÓÒÒÑÑÑÐÐÏÏÏÎÎÎÍÍÍÌËËËÌÍÍÍÎÎÎÏÏÏÐÐÑÑÑÒÒÓÔÔÕÕÖÖ×ØØÙÚÛÛÜÝÞÞßààáâããäåæçëìíîîïððñòòóôüýrh^TJA81)|‡’œ¦üûûôóóòèççæååäááààßßÞÞÝÝÝÜÜÜÜÛÛÛÚÚÚÚÙÚÚÚÚÛÛÛÜÜÜÝÝÝÞÞÞßßààááââããääåææççèèéêêëëìíýþôñíꌂ<4,kv‹• ©³¼ÄÌø÷ñððïïîîííêêéééèèèççççææææååååäääääãääääåææææççççèèèééëìïïððññòòòóö÷üýçȆ{q70)" Q[eoz…ÕÜáöõõõôóòòòññññðððïïïïïîîîîïððññóôôôõõõöüýäÞÙ+%$+2:CLU_it~ˆ“§°¹ÂÊÑýúúùù÷öõôóòóôõö÷øùûêåàÛÔÍƾµ¬¢˜Ž !'.5=FOYcmª´¼Å÷øùúûüýþÿÜÖÐÈÀ‡|#*18AISš¤®·¿ÇÏýüûúûüýþÿØÒË•‹€vkaWNE< 4t‰”ž§±¹ÂÊÑþüŽ„zoe +- nx‚ÌÓÙßäý¥œ’‡}si_ULC:29AJS]g­¶¿ÆÎÔÛ౨lbXOF !&W`jt‰ÁÉÐÖùù÷õòðÌ@81*#")/7?GPZcmx‚Œ– ©²»ÃËÛÕÎÇ¿‡}L+29B…™Á¹°§ž”("V`jt~ˆ’ÇÎÕÝØÑÊûxnd[QH@8 )/7>GPYcmvŠ”ž§°¹ÁÈÏ™…{qg^TKC:3,R\eoyƒ—ìÎÆ¿·®¥›’ˆ~tj`W-4;CLU^hr|†™¢«´½ÄÌíéåÁŠ€wmcYPG?(/6=ENWajt~ˆ‘›¤­¶¾ÆÍñe\SJA9$*08?HPZcmv€Š”¦¯¸ÀÇÎÕÚàäéìðòL %+2:AJSŒ–Ÿ¨ÖíãÞµ=6/LU^gqz„Ž—¡ª²»ÂÊñïëÍƾ¶®¥œ0`is|†™¢«´¼ÃËÑ×Ýâæêí¯xI $*07?GP‘›¤¬µ½ÄËè䟖ƒypf9AIQ‰“œ¥®¶¾ÅÌÓØÞÏ—_V&-enx‹”¦¯ÐÉ»³ª`WOL‚Œ•ž§¯×ÑÊü´«8#^gqzƒþæËļ´¬¤›’ˆNW_ir{„ݽµ­¤œ“‰€wm:3 ?GOX`js|…æáÝ×ÒËŽŠxne\SKC;&+29akt}†™¡ª²ºÁÈÏxof]ULD< &,Y™¢¾¶®¦ž•Œ‚ypg^UME=6/"'RZclu~‡‘Ôþ>70*$ 4;BJR[dmvˆ‘šøþï%Sî÷ÑCKS\™ùûèË•`XO`òŸ­2Fñ•âäæ>ezi CbCúݾO’Ó½ëä%"튥ýhîÛ|´¸›RX…Œ¤Û‘œê'ùÝ+˜Ï~‡™H—*|» +-„Ý} +-DAÒM„Í@üª Húß mŠün—/#> õ€¿»ÛNù vçSìʳk,]AýŽ '‰‹5‘ÂU7éðn0º$J*ÓsÖ?ã— 2ý3hMÙ@AªÔà™ng¥o&÷.åwƒà¼c"î]í:›tÈ»*9PÙ+ô¹¹"àÝéž!\kê¸vŒ&ü®zL¤“\õО¶"¢Ú?w-íÍÓc¨ªÆ´üŽis*oy7å .Ícâ†;@-ÕMO6üÇ»#=µL ÛzŠ2àáw<P'‡é{¦uãõw‹H +-Fðþò»¦ ×ãë.r6~ç=â4w.†®¾˜ô`Ú]¥a~ç"¸1éÌÈ:‘Ù ”°1.HëüÑéqœ®˜ŠÙîôæf€ø—‹ÕÕ²Þ ï6@+ø¥†Kî²;"Ù»gF¤¡O›)rp)יּ>Ñ«HWŒ2ÿ€ +-)cw>•™wïE±þÝç)ïØ—¼þË?ëÝÞ¤’4£+z%h(e8èÂìîNRø¸‘‚ƒ|zW­%ï.ÙŒÒmDî¶i8š¤ÇBqi‚;OîhdnÒ0щ_‡kfž6cN`òküŒèÈE>Ò?Ξ$-pì¹sℶŠåݱ6£ÀrÓ¨2¤Ô2—¶E¡:*£D9ÖÜù].‘Uwö{'ÛŒÃ5£ÊH#+]¶8[ÄLˆLÿ«Ý]°]ÂFµy‘œIñ%F›Wl4’lbýtw–.÷èhfÅEY9çç@rО¢ú„îNÛšK³ˆ/¬I›Á‰7à”Kµñø¥ýêŒÆ>Ÿ¶»ðâ›Të憫†„Í(o„˘Xé¢Dy¡ˆãÝñI …ojf *cÍo‘úD›ðNïJÏ©Á2О2@Œ—-pwÔÝyf?]…ùÇì]Ûš9¼kMy‡ó4ãîm¶/wø›X „·wwå;å":ÓÖ“¼ƒ†üU]ÅèÓèw #ŠæÙÂbq×aúÑMÞ¡Çáü6ã|LEÐ —ŠdiuÒN]d/á¦Kˆ;çÉ8uᙄqš¤"Ò(ònZte3 ^ÕFZµÔ™O÷ƒ¥³»¢79þã@îH|AÚ¢ˆó• Ë#Ù@­DzÚªoø õëÔÒØ E¬áKÖáîªcgw•m‰d%Ó ¶ÏŒá¿™¾óø 5­_óLOE±Œš^ÿA R7rdõî؈÷ª/@Žg•ù̓ƒÍèÜ\¢À®Uã6t7 +-:µ6ŽPó…Áí«8Ô ·ñ/9*^)XE"èÆ;0qd¦Û£>7±¸CPä"ab7bÿçî6µdAADžQ>Oäz)_æ4–ßÈæÉZzEÁ‰5]óã¾¾— +- +-½Kvm¡pÔ¢ühêT4 wCZ +- qœO2*Ygõh¬ í{ Ñm£#þ9’¼4ZÛîEŸðV.§0ÄUÝ­û>R3ÃW½³ Õ¡ºÓ‚Š ŒìüQ>øN- ÷2êw¶#’vËV»¨ÕÙmºÎôÅ›÷à (<Ý¡1@á]¨ÜÉiÆx%ùT€¶Þ™éééèÿ¡ÀîÐms úú¥£å<·ÓÿŒÇØO;gíºòìºÎŽNvùŽ]"ôº¡º±x<¶Æ3`ÃkK…'C‰4.4:AHOˆþëèåÇÁº³¬¥•„D=739vµ¼ÃÉåéþÆ¿¹²ª£›“‹ƒz'\dluâÞ‰y$  S[ÅËÑÖÚßãæõøöôó🗇wog_WOHA:6¯¶½ÃÉÏÔÙÝïÀº³¬me]UNž¦­´»ÁÇÍÒå·±©¢›“‹[TLE?82Œ¸¿ÅûúðíêçäàÜ×Òͧ ˜‰yq ELT[cjrz‚Š¼ÂÈÎÓØÜàäçëÚÕÐËÅ¿•g_50+17=DKRY`hpw‡–ž¥¬³ºÀÆËÑÖÓÎÉý¶°©¡š’‹ƒ{tld%*05;BHOV^emu|„Œ“ÌÆÀº´­¦Ÿ—ˆ€xqia$).49@FMyÁÚÞâåéëî·°ª£›”WPJC=',28>gov~†•ûþÕ§Ÿ˜‘‰‚zr!&+06CJPW]dkrœ£ª°¶õøëèåâßÛ×Ò¦SM&+SY`gnu|ƒŠ‘˜ž¥ÑÕÚÝáäçêìîñíëèæÏÊÅkd]VPIC=82-OU\Œ“š §­ÍÒÖÚÞïùîëéæãßÜØÔ¶°ª£–‰‚YRLF*/4:?EKQX^elsy€‡ÄÉÎÒ×ÚÞáåõàÌǼ·±«¥ž˜‘Š[ #(,16CIOU[agmsz¤ª°µº¿ÄÈÍñÝÚÖÓÏÊÆÁ½d^ $(,05:?DJ’˜Ó×Ûþ±¬§¡›•G.!$(,1y…‹‘—£¨®³ÙÝàâåþòðØ MGB<83.*&"!%(-16:?EJOU[`flrx¢§¬ÔØþüǯic]XRLGB=83/*& +-!%)DJOTZ`flš¾ÃÇËÏÓÖÚÝàâåçéì÷Ôoic]W+' 5:?DINTY_ek®³¸¼ÁþéçäÒÏËÇþŠhb\WQLFA<,15SX^z€†‹‘—œ¡§¬±µº¿ÃÇËÏÒéúýþñåãàÝÚ×ÔÐÍÉÅÁ¼Ÿ}wrlfa[VPKFA<7$(,049>BGLRW\bgmsx~„‰”šŸ¤©®³·¼ùüþñïíÑ°«§¡_ZTOJE@;7 +/4v|‡Œ°âóùûý÷æÈÄ¿”‰1-)&"+/3JNTY^cinty„‰”™ž£¨­²¶º¿ÃÇòøüþèæãᯪ¦‡|v=950#&*-16QW\aflqv|†¥ª®³·»¿ÃÇËÎÒÓÐÌÉÅÁ½¹µ°¬§¢˜“Žic3/+%),048=AFJOsx³¸¼ÀÄÇËÎÑþùò¾¹µ±­¨£Ÿš•Š…VQ# ‚ä¨R¼Ž!43ƒA² (€Ÿƒ)0~ ðh–'A’b ‚ ÄA€2è díªÔ+õ£Ó–ýE…‘ñŽ¹;ù¡a›àî=]x%?£Gr Ĩ‚ùn6[~¿»¶ÄŽ ¼ùcb3à£Ê<[ÀJJt)ö wâ»vÌtŸÄÝ”¿à)À£Â±ƒþ‘0fß%h7±°}ÑÜwFÑç£; +-»WÅEKwb­•Ž[Cq `wkç +-o= 0&8CjUÎpETF󳦂 +-ÝþÍK§2^ÐÒ‰t-è(ð†òýð(–ÆÛA@Û¼$û~cÞ»/x‘õ=n¹Ã'ÀžÕºíÝ*¶À± ¿vs´£r*Q†RåBSk«ÜIý*IÓLÈ÷IpfyGFfGL¡è¡„—tNDÝÝ ·PeE¹$¦–c²8£+¹£Ú2Tðbš¨Wýnj7“_µüxðrû>u>m¤îŠøÏÓŒŃmQHca8·{m;*BÁ«èò §™-¾TN¼O\ý^5/g(òÿÜQ: 8`«¹a€u)b<Ü5öÈÝÄ<#XÅbˆúÝyO~As3,=eöW$}ÃÆAÊ(‘dâîjQLb‰êêt9Ž?Ÿ;BÕ+~”àÔE(§ÀF¿C&à‘¦ %Äw+_“2P›Ôvõ+©;ßêG¢?Düca§)ò“aþés:#±’¤”{òaïœ ….güCM)CÃÜ©ê„¥»Â\,Ñéí*C6¹KÆ3¦¢%ì0ð ìÝíä ©ÀcZ£»èÐCé™w•÷N‘>”3ôɘAö=|¦yYü«ÕpjSÒÞ׶’hžœ‘×Øc +-b€»Ž`ZÂe2j ;’ÑË(F!îøÊ`#˜ˆ…³ù1‘ÄøüeYH94h ª±—1a©ºMl—H.ý¼Òþ{'ƒN#ÇÞ¯5Oòóf[Ämñ ù9aõ#Í|76º²0¦Eº+†ì¢ ÐrÓ­;Ä ‡>-ü“q°V‹Nï^óˆr0s†¸,”~¦lè|—@´™‘»=Ü™øÔA˜t2$í9mË‹À{Zg3ö†ïè¡ö¹³[v¡öøÐ1¢Ðâuwïí4þ+<ðÙ|ב¹ë’ åÀG¤2»zjNÐ]ÃÈÕx>^~àaaµžÌô…5Eò]…ö€w9 Hå[¤tpÀ])ŒîðUð|2ÏÖ!ÿ6I¦¾ÈÒ;ÅÛ¨ ŽªA[¤z«b`EG¸3,3†ÿÿ\½:PŠOàyºq3ÄAÕ“îöä4±Ë +-ÿÝUÈôi/t8¹:1¢Q «"ꮧxŽÐ›…Å=Q&Æ>aËÿ†mŸ•XqFH½ñŽë™tæ‹ÙêZTÑHºæBâÌAPÝE¬øíCÊï4ÙDÀÛĬÍ0„3Ð ô»ÑJ 3!mZrÅïJ…onìe +-F›"Huç •°‹fÁ«Cèn©x¹þ,9ãÚÚ@µX‚3ÚCïP™·c¸%ÑÄ +-B¯®Æ‚x ŒpÅ7 ô¢uw;Ò̱dzGªä–CS¬ßeIqÞJ1_ÄÀ«|8/"›¿ŽRoÁ ÜTdQ=ùVó$ ÙÜp†ÛôNñ+Ëî¤/U]# .DK@`D< ï¨;À‡³–¿òÓ_êywœ%Ø=ªüBMµH¶¸ï4‹±èð|òx©?´è¸@î¾ì,ÌèΓO;+V)/Ygá¨bpÆrŠyð﮺YT¤Œ^T/ê6P4«á…æ«,wÎÔÀ[DÁjP:K¢K8£w-ËÐöw#[Û(Â#Š&d±(÷Uà`ÿ…@ñ¯ÇPv©w€5ÔR§^7£ó1àdï¨ÀDIšZ‡wx\ðÁWã׎Ýn†ÕƪåÃ7¶‰ñwqlʃîìÁž,Q„yé²É)š§È¹Ü·ÜáƒËêªn£&ªdpú¥>êø,Ì»ÀŸÓ¤R“2HÕÎ¥¢K-yûrgÙ4UÅv¾3fŒ Å7À?6Ïû ¬:¡¬×èñ;èΞ4‰Òí®×é3Q†ø·€Õ »aâùNêÞiè‹Á|Ôà¡Vc«ÎÀò–²ö¼$GrzéÛòŠ„Re  +-“_#w¶¥AÍåz³ÉcªØì±a'ªüŒúwÞXC¸Ò»p$ÖÀð›ÃrÖÉdJ!~½u`€dG%a2ø ;+õï ÅZRvç3éqB³ç¢Šâ.­€°ÜYD]Ô@ +-¯Ûfä_Þ-÷eà¥ät2¡ +-endstream endobj 27 0 obj <>stream +-GèzÜ*µáèD¦¤$,ŒÄkaÖTeËIj韆ÜåîKMIÆ4ƒ†W©x®¦+Ä\P*‹-¦¾H Šþ<¯ìî­`BW Ò1±˜ì¡so-xšjÖªgJÁwy²Ñ¾hÝÊF9ÔãŠp­ o¢Êp-wiˆê'‘¾S¨ö Ÿ—ßÍÚ"ÀxTÐÕ¥SÄ-†œ1è_É–8XÇ•qªY•ANèÞ Ö>LJr67àµý‰Ð:î×òè«êÒmÔݪ /v¢‚@\‹wV¦ÁÂÞ8$ÐLï]þKvg]|¡)ÃVøÉH=’;õéú¼1†+«xÏZ‹•½ƒÀ3Å©”4T” +- !$'+/26;?CHM¢§«¯´¸¼ÀÃÇËÎÑÔ×ÚÜûýþçäâàÞÛØÖÓÏÌɱ­¨¤ŸšwrJFA#&)-149=AEJOSŠ”™ž¢§«¯³¸»¿ÃÆÊÛ÷îìëÚ×ÕÒÏÌȱ­©¤Ÿ›–‘Œˆid_Z:62$(+/GLPUZw|†‹”™¢¦«¯³·»ýïîâàÞÛÊÇÄÀ½¹µ±¬¨jfa\-)& #&<@DHMQVZ_dinŠ”˜¡¥ªÁÓÖÙÛÝàâäæçö÷ýÉÆ¿»¸´°¬¨£Ÿšupkfa]XSOJFB>95 +- 9=AEIMRV[€…ŠŽ“—ÌÏÑÔ×þúÓÄÁ½º¶²®ª¦‡ƒ~ytpkfb]XTOKG/,( +.26Nmrv{€„‰‘¹½ÀÃÇÊÌÏÒãúáßÜÚØÖÓÑÎËÈž©¥ œ˜”oP "%),/26:chlquz~ƒ‡‹³·º½ÁÄýðïîåäÕÓп¼¸µ±š€ea841-*/3MQUZ^bgkotx|…¡¥©­°´·º¾ÁÄÆÉÌãýóíëêéçæäÕÒÐÍËȹµ‡ƒ~dGC?;841.*'$" \vz~‚†Š½ÒùîíìÞÏÌÊǤ œ˜”ˆ„€|xtokgc_Z?;759<@CGKOSVw{ƒ‡‹“—šž¢¥©¬¯ÄÇÉÞàâãýëéèçåäâÔÒÏÍËÈű®ª§•‘‰…}yuqQM %(+Bhlptx|€ƒ‡‹’–š¡¤§«®±´·ÚæüùîíÛÙÆÃÁ¾»¸¶³¯¬©¦¢Ÿ›˜”~zvrnjfb^ZVROKG/0CGJNRUY]aehlptw{ƒ†¢ÉæçèéîèçåäÏÍʼ¹¶³°­ª§¤¡š–“Œˆ…}yPLIEB>+!147:>ADHKORVY]adhlo“–´·º¼ÚÜúÛÚØÖÂÀ¾»¹¶³°®«¨¤¡ž›˜”‘ŽŠ‡ƒ€|xuqmjfb_[WTPMIFC?<*'%" ,/258;>AEHKORUY\`cgjnqux|«®±³¶¸»½ÑÓÕÖØÙÛÜÝæòññðÛÚÙ×ÕÔÒв¯ž›˜•’Ž‹ˆ„~zwsplieb^@=:741.+(&#! !#%(*-0DG^beilo†‰“–¬ÃÅÇÉËÌÎéïðöììëêêéÐÏÍËÊÈÆÄÂÀ¾¼¹·µ²°®«¨¦£ š—”~{xtqmjgc`]YVSPL,)'$" !#&(+:=vy|‚†‰ŒŽ‘”—šœµ·¹»½¿ÑÓÔÕãèèéìíñðííìääãâáÓÒÀ¾¼º¸¶´±¯­ª¨¥£ Š‡„~{wtqnkWTQN<96%(*,/247:KNPSVYo†ž¡£¥¨ª¬®°²ÒÓÕÖ×ØÙÚßàáäåêëëëëëëëààÙÓÒÐÅı¯­«©§¤¢Ÿš˜•“|yvspmjXURO;8530.+ '),.0358;PSVY\_begx{~ƒ†ˆ‹Ž“•—šœž £¥ÄÅÇÎÏÔÕÚÛÜÜÝÝáâââããããåãããââââááàÜÜÛÛÚÙÙÇÆÅÃÂÀŸ›˜–”‘ŒŠ‡„‚|c`]ZWGDA>/- JM`ruwz|„†‰‹’”–˜šœž¬­¯°²´µ·¸º»¼½ÇÈÈÉÎÏÐÐÖ××ØØØÛÛØØØ××ÐÏÏÎÍÌÀ¿¾½»º¹·¶´³±£ŽŒŠ‡…ƒ€~{yvsqnkifSQNKIFCA><97420-+),/1358:;9642.0246OQ_bdfhjwŽ’”•—˜š›ž ¡¢£«¬­®·¸¹¹ºº»»¼¼¿À¾»»ºº¹¸¸·¶±°¯®­¦¥¤£š™—–”“‘ƒvt`^\ZWUSPNLI<97531/- 8:<>MOQSUXnprtuwy{†ˆ‰‹ŒŽ’“”•œ¦§¨¨©©ªª««¯¯¯¯°¯®««ªª©©¨§§¦¥¥¤£¢¡¡ Ÿžœ›™˜—–•“’‘Ž‹Šˆ‡…zxvtYWTRPNLJHFDB?=;*(&$#!,.023@QSUWY[]^`bdegiklnpqstvwxz{}~€‚ƒ„…†‡ˆ‰‹ŒŽŽ“”••––—˜˜›œœœ™™˜˜——––•””“’‘‘ŽŒ‹Š‰ˆ‡†…„‚€}|zyxvusrpnmkjhfdca_]\ZXVTRA?><:86421/-+ "#%&()+-.01GIKLNPQSUVXY[\^_abdefhijstuvwxyz{|}}~€€‚‚ƒƒ„……ˆ‰ˆ……„„ƒƒ‚€zzyxwutsrqpomlkjhg^][ZXWUSRPA6420/-,*)'%$"!!"#35@BCEFHIJLMOPQRTUVW_ejklmmnooppqqtuvutqppoonnmledcbUTSRPONLKIHGEDBA8"!  1345689:;OZ[[\aaabaa^^]]\\[ZZYYXWVVUTSRQHGFED=<;98764320#%;EFGGHHIJJKKKNONKKJJIA@:98776542 +-$))*+,,-.//012278899::;;;<<====>;;::996554332110/. !""#'(())***++,,,+++**)$##"!!  "  +-   +-ƒ¥¨òËN1ƒFf@ Ø2 0 h:Žþ`à˜4OƒC € "€Ààdê¨o¯™†×ñ¼V Í´ßMRÑ»ÞQwnoe¦z¾êdû¨Q‰÷ ÞüÃ<]“GI¼MÙœtÓÚ J“iÈî_ì$€5 ]ëF]Ýåå’Fo:…½1õ¬ÐÛhþßUƒä-¯âafÌŒóËv‹ Œ³#f!¤§tº[a§;‹Ý2ÊDçÒDg—¹#R=¶ò@äÿ´)^Ä‚(¼9%ºlj'¿èe¾âÕN2ºç®îÚqq–Æųç†EêonQõævþ¡[þб¡r·¦rÇ x=¡ú,Gˆgàeå_+èäÀâ‡DÊe×c£[Ô‹kCtã<ž)ך<ÑÂW^’hî%ѤÆ[CssÒ—è#wûçÊÐÿNvÅ•B´U@¦/…ZIÔ—¤.`œRfWP;×rømÙ,ϳՊ‚­Ø¡p–ÕÜšÛ(®T†Žñô†Äó6wxó“hb©µb@ªÝÜŽ¿ÃŽûèÚM !‹V¾€ËЩý…"çÂA)˜¶ï×'?´8ò’V¹•·Ð9 ôÿ•ˆ‡GÊti‘d´twtîjwóLkw¶Ï..Z‰ªZì•ëÒýYŒØŸïàJ÷~jßʽÌŻ̅Äö«4¡b_<4Qgq—»€PÃ;wJ +-Ó¬£Æ¥—ÞíˆíîZ×ÂËenm1~²-fþð¹ê*Š«â©D©pyD]òµ& êt·Br·jÝ­ &;kpSŒûâ94a£(q·3,ÐøžÐÁ‡â2¹a»ù PÅÐÅÝ]Jõ%¤{Œãzd\ò·X”÷¯îÌ µ¹‰ÚÚM”á9]5-a#`º cAKä'NžQ**"j´¾\7ÛRL”xDuð¼€ÂsCÚ¬]±‰xLU}(UÆ=j×D„R7g.~¹ò;™œ®µR<¸"Õ `“ÈŠB4K­ÍY <— î¯ì©@c†;„Mÿ¥XªR@L·‹ØeÓ¿—\é6ùƒ³D>ü٦ßî6¡ÆÜVNZË5UÝ+ãQ‚gcáyÐOïšfKüŒDÙñ£0mq;“c»,§!œ-÷ëX²Ía‚¢¯TsÈ<)õ~Ø’Þè@^~pê!¶U‡x-Š‰^‰”ðT‚§;’N2«¨íò\ÝÆÈ팷ít°‡G³{a-Ï. ç¬ú³M5öL"{F‘0«yfŸµIú#Ø™:ê/mºµÀ©­ˆÏ@ M;·i6á1zRà "cIñb»ˆ®j3È0ÇPQ<…ôAëæ3·]æ‹ ˆ| 8Å·¤o ch^7ž©¶ýìË,¡Þ’|*…búþÝ—ü×>Ag/à·F¸#ÏêRbÍ, ÞiÔh×†Ì ?ö'º€Î‘Î}˜pÅ +-JV¬4(e–Ì8(Ì7áù*°·8g˜õ2§e’NÌn–•«_oe¤Âs=ÏÐ*­}ƒÇãWTºp’Áʃ»îN´€‡ífâv¨âi›:ç ægX+M•œ`AÑÉ8%ƒ„D†¡ÉFdÞ9Jb2@™6¼Šœ‘‡9;“®/æHÛÅ’W,[Ñ…·”›•Œß9xÁ³?lƤ·!@2 +-ÀêÀ_Û $¶»–Û9U¡=ßÏp‰… 9É +-¤A%º'ÇÖ‡–o}Ø(ã hîD³8¬e‹ãÿó¡ÖÏP”°¤ÿ­uKÈxÚÝuF0Ø™NÑr(–ÖV”‹›Dù¡ðŒ¼U'º<½JIÆë¸Ý p'~MTG¨³(4ó辆KƒRˆ³$û KŽ£Ï/ãè—¢ÅBKŸÅ?ž±Œ~o> +-³åæãÿ %ÝÒösb"–ì{ +-ÂûZÛ{9xýýïR·ym ]8;î”vÐ<Ë{P +-\"7Èã`fG¯]LÑh%ŒÍÊŽîC?È!AÔbú…ˆ»iù (”V@]‡r¹u ëv§ù  hƒ¸ÝÄVÌb½‡"ñeÜ26.-H¨z*6X™€à±ä½„Î] Œ-mg<‹"¤qGðÛ)Œ¬’Jƒnj B&®À»·À‚#¼9ø󼑑'ª¼®g6üße/ X~¿ô“ððtÎð327ŽÔ,SðäâjQð DHm'ï2±¨ê`e(]ŠšEõõqÑí(|ª´ÝbÕÂíÉ÷ŸìH'Æë«øcàú¢µUøÿ-lº;žMãM³, +-–ábiL«T<À-èâ›PÀ‚yÊvð­3œ FòB¡H¸c·˜;ÛÒ•÷:ZꬩÂÁM»ÝèïÃ>íÚk·X(8;ŠªÇÄê²o Ô{™@²Á¿Êbs/d1~²’Taöˆ‰wðÎðŒ¼õ;£¯¡iáÎ>{M·ã«·cé]T¦!ãÂ%d@îv=Æ{Ǩ†vù—=Si!oÛ´-›˜aápÂ@ĪY'¼ŽÔ ôãÓ†ºîxoÓ÷.Èünÿ.àöÄ¥¸°#ÅÎ_Ö)rižÂBÙÜîç|,ãŒT¡(·#TCheø8¶1œV±?OÇ^ðàÉ ÃàI˜aÀóBð\ôÝÛªlE¿Q ñ C_p³?À°7w]´E<ËyøÛµ +-wûarÐzC B}¡~Å¢Å)Æ‹ëá©L}Y/ÚõÙÜèàB[ü¼¦^Ñ[Ša¼ìl2–\xT±gãÕñà±LÌ„÷u¹ã¨-O²í† 4]ɾŒÊûôsÐ(Ê…"Œ»>F ÙÜ΢ÝCe[øx\<Èú3rž0ã¼þï”ý®x~7ɱŸ'ÆÈ0ÓÍ£¹†»Òpu5÷sªÛAe»îr,XºA<÷CHðòKïBÙ‘ffw~—Ò«Lïàí|÷B{·ˆáÆ}Ô4¼zîIùš@ýḏ®ÂÄ[¢¾Ü92®dã@‘©,Ð*²<~¸Û¼OeŸ^…G,áƒD±¶ôq( +-¹€Nµ¢¹œ‘<"”?ºv`¦¸œ®-t.i¼³P|/Š[lQNÊ\ññO1êÀÞß ô=fK†ù¨‰-ô|â£y½Ä —3™ÎN“êùÚ5⺢pÑãyÒ~]IÉГ¡üwÊ={5ÞÈF%ã~‰'R½ ­àsë/<)JRT 3`k#0 Ã0 Ã0 Ã0¬›Q‹¡-ƒD”xË'›Œ`Œ–’’’’Ò4…€Ew#´¨Gã\ ^î73F»B>²Õð Ý@âh˃Lâhœ:‰ãÈ2‰Å‚P„%0T&.$,M„£‚ADâA„" ˆ§!#,#kŒÆ‘8g€EcB¹ æBá²á€2‚ ‰ÅB‚øÊZ{×'ÝË?9a6MŸJú?÷¨]Ñ@ +- ŒIfé0±˜TÈ ñ°P˜\  EŠQÀ\62– +-ʃ!Aîn©dÆOx~®¢½EŸ6Ã'ƒ²ÿ•<‰£q&ÈÃƃᒡ\ ™‡„ÄÑ8 gÃ’Ñ0±¨`H–âáh‘Æ™d& +-æ€Ã Ö†Èßå™o¬ý‰nezé—Üú\Íä×ou~¨˜è©ÕlÀÕ²ýüªyëøØ›ùçzYø,^®êùïb±>}î¼û^[ÑìžYý®•r»ÿ¶UªÀóÞæ>ÞÂ|T>çĵ,ÌûeÛÅ2ÝN;«C7ÍWíú¥ÇËŠHãð2¢5ML2ˆÃÑ8FFJÚGGInd"d¤¹GŒ{$nëù¨sswÏTÛ +-û!¾¢Ó BXX(ˆDã$ˆÐQæBÁR`¢qAp«et³áPT³Ññz í±µò!=½GG.U4³¿j¼Å.ÿÛÞÏ×úÿë;ëÔCæ´íúïõܯö +-ÿì.Ý +-<ÌoÞú4ÞÌ«u=Õn?VsEµËÒËwS³2¯8ì÷ÅÒem4+ëÌ~u¬ëôtÖ¯€º¨%!€Ahff´!ˆ%@ BEÙ±±ƒ(#4iÆ €¤€ÄDBËŽ)mHïd²<¬Ìy Ì(ÅÀr’eóRw”.u¦QΧ‰í-‘U‰úÅ>] ôJzÝØ_&ÜÄÏgbõZšûéå`r‡÷©›¯‹>Œ5iÕÈ8L[õX€9ŽTŽž%K ㈄ԠÏïVãÉãUÄÝÆ +-%aEïÝ>" ˆ3ˆÂv=-Ü‘1 Sc!¨Y±½@M¨¸-¬(yÖSXQ˜J3ŒÌ*6Ol)r&`†…x±Ö9ÉDkº,pÍÖ1­¬˜;@ßh2X "·8cc"[ùäzw¥ª¶ôZjœ°äÏ=ïf |Ût¬Ê+‡ó¥¤Ÿ›pø+âm÷œ×ë¤DÄvgµ,•ÚD‹„úÚ¥MŸ–5’k¥·„Y:Kž&¸YOfœà¥iù=]2ü?iùX]9f:BÎ i.%? ªú1l‚³Žb“ þ¾Bd. Ü˜˜¬¹`–t˜à{ $érs"¢nä¹¥.ê”É«GŠêx²–àq/›¸Ï‚í³z¤ïDúê¥m+-ÇMÅØ°»SÓ; Dÿ((ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ6qüRÈ^õ¿ØÕ?,~æX_€øÏ´>Cá—àú×Àϲë‹üêèë3í•<Ø?Þk±/ž«[²ÏW’fÿÄVìо­Õ>Y‰±ýX1uûâ­:‡ûLW%5÷Ržêï3•ØÞ?K¿/Öê}@Ï@Uñ‚þ°Tö +-½ø©£†>uí™gĤÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(:Ph«¥ù†þZóõüÓæ£ùïÍ·òWœ¯äŸ9Çu¾‰¿î| ÿäùþÛóíûÛç“÷ÿÏ—î Ü?B?¶_†þg?ýÆ~+ú{ýhôÍúûèSõ?Òê'¥ßÒoK£™¾A?8}wþzúÜü +-õ‰ù?êËòÓÔ×俆Ĥ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ:PWÿðãÀ׎¯ÿoßý_>¾ø¿|ëùÊÿòqÿQä³þÓÈý’OùÏ$ñK>ßÿ™|µ;ù^ÿ‚ò¥þåýwʧùg•ò+ŸãÿX¾Â¿µ|qùòþñòÁýæSû?Ìö÷˜oëß2ŸÔŸg>Ë*ì´ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ;P!ŸøŸðqâ£Âg‰O $~/|øÆðâKÈ¿ Ÿ>9|xøððÉáçÃ÷†/_¾C|cøñ{áƒÄ§…Ï>N|NøDñ!á7ÅW„oß¾X|9ønñÍàëÅï‚Ÿ +->c|$ø˜ñyà“ƇŸ>o| øjªÔ¤ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(:PS+Íù£ÿ4òSÿ]äËþ‹ÈßýçOü!¿ù_A¾õ¿üïüøèÿìñãÿÍãëÿwÇ€OŸþr| øÂñ=àçÆ'þi|øžñ…àKÆ_‚ÏŸ +->`ü.øzñÍà»Åƒ>W|BøPñá+Å_ƒÄ¤(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ:Pâ+’ù¹þó…ý%æ/û3Ìö7˜í0ÜŸ^~º¿»üwtùõþâòýý­åüCËoøW–oñï+ÿãW~É¿¬|—ÿTù4ÿ ò{þ5åý;ÊúG”_õ/(ßëßNþÙ?œ|¸2ùyÿ^òÿþ±ä#þ3Éü÷Ĥÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(:PÖðÛûÕçÏ÷“ÏçïÇž_à/=ÁŸy~„¿ñü àùþºóGüiç³ø¯Î—ñ¿ãÏ9?Èßrþ‘?äü&ÅùSþ„ó¹üñæ—ùËÍ_óg›ço6ÿÎl> ?ÕüD§ùþHó+ý…æoúóÌ'õ‡™ßê¯2¿Yd¤(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(L˜~øÿþ׺?–ä4\AîO€3ॷhÎRzûàD¥·ÎUz{øÃu¸ÉnÜX{mó‡0íI 7z+Õ•íÆŠŠS‰“MÄ™íßÃÒ!×J!ÚaohÐp¡ ätàs Pu Ðvò/<ìç¼Àb—Œ t(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿÿ(ÿÿ(ÿÿ(ÿÿ(ÿÿ(ÿÿ(ÿÿ(ÿÿ(ÿÿ(ÿÿ(ÿÿ(ÿ}˜p>XAàO8Aà +-ÂPLÁ?èP;!÷ˆBt=âûÂedkN¥ýÅA~ùJhC˜¶r-ˆ>Ф]Ô@$ž‘ÈÁ A. FƒñƒŽ iǬ„¯ Ë¢f ¡˜Ù4qWX9Âfã…A^Ø7#ÔY„åX0¨ ^gÒ.0ÿ ø¿î™ŸæòëÇ|a›ï@Û³<|¡^ðê•Pòô'ÏC¼K‚½«èv‹ÀvUÝ)¨.¤¤;Ò=)ss-Mî@Hn¦Æ)Ë Ä¤ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(:PÚÿ üÊõ'ø‰ëgðûÖçà÷­ÿÁ[¿„_¶þ +-?ký~Óú4ü¦õoøAë÷ðkÖ⧬ŸÄïXÿ‰±þ?bý*~Áú[ü|õÃøíêŸñÃÕoão«ßƯVŽŸ¬~¿Wý?~¬ú…üRõù™êGò'Õä7ª¿º +-Ä´(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(;P‚jâÊÉþã +-ɾä +-É~åJÈþæŠÇ~è*Ç~èÊÆþé +-Æ~ëJÅþìêÄþìŠÄ~îÊÃþï +-þð +-Ã~ñJÂþòŠÁ~ôÊÀþõjÀþõ +-À~÷J¿þøŠ¾~úʽ>ûʽþû +-½~ýJ¼þþŠ»~¿u}~ëúüòý””(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(9Põ/VÀö5VÀö;VºöGV´öMV´öSV®ö_V¨öeV¨ökV¢öwVœö}VœöƒV–öVö•Vö›VŠö§V„ö­V„ö³V~ö¿VxöËVuöËVrö×VlöãVföéVföïV`öûVZöWWöWÎô,T(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿY˜€>h¸Apƒà† !h‚ˆ !xžÁv~•„hg¨@ DѠߊÇΫæÈwQãßÝ +-ÁᆨÓêòßQLd'Z&èÅöïLW”[¦0mL#J×@®—ÿ0—±).ÙžÙÿÙ_5ÛnÛü>ÜöŽÜöþðVÝð¶ÝênÞänoä>oûßØFàØ^pÒ¾pfß!f+âõkXD(ÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(€æ˜?øÿƒA!±TP€ì°ˆ³‡DhcŠD²µ"g° @óK|‘KžVêî¿3üâNœö°»ÿ+P£Qm­zâ–ºOåf-ä:þÎ¥ÛÑ+*t´ë'±ÛŽwé±:‹,ÿ¢ÑvL•šã÷—Îäc,@¿¿z« 7Ó`R˜ýCiš}™!áéÏPñHÙè+Rû5Œ„MúÆ]ÁïøÃŒmr9ã"ÙlÇŸgé”×¹Õ6 þH3§|ϲ7Øî§Ú8å~–E»õk/Ø€,ôWð@ùúóMgYB³2‚#¿>åúòC§J}ýÒF7 +-ÄýPøÒ6ucí<(8Wæ“urùk$S¦-=J&¯2ò2µ5ÍÄN”ìÈ“Å&Öü“šŠCc‹ í×T”šâ³ +-oˆÄi©SºÄŸÒad„(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿÿÿ(ÿ(ÿÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(€Î˜°>ph A@ A@À@ ¤†ºóF¾éþ¿Óù¤óÛâý÷¸hzù}ÿ§0Ïo»÷_àV àù¡ú \ û¿Ýo]‹hˆö/xjl€kÿ À£ïQ Ô€í”E (èRCÀÒ‚HÀ@yÅ!‘ìÍ\ˆ€¾„? 9?ùvÅTáúú;pê·à1DŸìsÀæ ¿W 6Ìôs ¤îÉvf- Ü™qñi ÆBIL¼Â«h muˆ»‹ø“N@¸V ©"wÑ?Iÿd‡Zº€ 쉄Ãa :Bé¹ì؈Íh¹uà +-H.žEÜFåæS˜R”ã¾I½¤€ß*)þ¸ Ç€ãK^ܹ w>¶-ÓD ô +-(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(€¯Xøÿÿ@ „nÕ˜† Ê9F‚¦áŒF®‘§oD8¦$ë InªsôÄúCÉ™úœžÈ^rXQ÷¦Ü£óœ×Ô¥ñ÷o G6ub$>Ï­¥—ˆ?æ9q·³å[¡Î.í–}Vª³[»%^ êøχÜ'b»ÁàÁ÷l'qx8"~Ú9^‹ÒOÆv”›wÂô·žææÐý „Ú<¢ˆðœ>Bè¯<ÖØ{Ðþ98Ovöx$h¯löt$`nùΟ@þìù&_àÁºßñùa  øó)?Ö!Zßôùá òóYŸ²þ¼ Ä +-(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ€¬Xøÿÿ¿àú~6OýìÒŒ^p¦ŸñZÚQ +-?ʳaIÛ â@y–L5š[|'Ïž•æòŽ×,íÕP>r—ŸQ»ÚH(O‰´mUëÈå‘6ˆÓ¼#ÒÂÅñG\íØt…«±F/Hµyaˇéþ¨–Ï6yK=ÕòÝÆî¬Ï‹íÛÌýus±ÜÛ6d?¶…mÛFíÚÀ‘7gýÛ.ö†ì¸W»í"Þ}wd·q<\/|†·‘yëEð¼Ø–R8X#þÞ^§êǯî%áH]yU½ÑœÜ'”/E¸‘Ëı¼ Ä +-ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(€¬XøÿÿÿzñSy W†MÐŒ%˜Ã Ç'Ø«HÃØÇŒHcûW2[bX}¡¼`Psï•ëf…aé3zìh¬;4KX—Ætÿfî Ãôõl=`iS^ ¡–ÆdÅ=4ñÆÜlÌwFoXÉp3éÜ«#™l?-›±{$3-©[7èd¦SµéÆÍLsXƒ.Ù!Ì(sëÍk„™c‡íX²“0,²O&if‚s¶àÉ0ýÌnj .Ù'Ìì²í»%+å™Zà ³¥HHHÁÿ/XŒpðÜ:^mQy;‚Ã¥1œ[jÛ;ØÛ)m^TªBl~‰tæ¡R VcšHØO)iÙai×Dõ~¢b–3{'ê!„j2SœÌ:ÁЪÃüâa÷‹£ö+5$«tyǽJy•[ò-TDZ•VŽL —V¹Š&»BE§U«Ê®PÑÉU©XÙ*TŒZU*Y^ +-©\}Ê—EAE*WœRfNW‘ÊU¦¬9Ó*ºr5)qž´Šµ\A +-'­¢–XrgH«ØÕ•¢ôYÑ*‚ÅB(ƒ>´Š`±J¢¹"X,?Áè@®8 OJz+šÅ“J[üø# (ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(€Ê˜ >ø_A @ A4` pàþzРÐì1§bë'b £ô%rúEýº0H+‘“¬â® Ú’?™š«NÕé¬È Té +-Ô çÊœ4ÍX›êŒbü„¨°åèÔ„0æO‚¦®A¥F +-1~âSöâsmÆÍŸâ¬Àà Žªóü‰LQlÍà|:ÏŸ¼”ɾ Χó,JJÉlÊì|ÝПš¬Ï˜ÌŽ*‘üt$”fdvT‰¤¨a5Ë£J$E½´Ñµú)EÑÍEñ‘ø§¢:”á8ÔIªe¡’³pp©º”‚zÂýÁ¥êRª:W§[‹ú¯¶ó¯BªƒYj¾ /ß)f©öæ<{C¤8˜¥Î›öæm‘ÒÏ.U]Ù§]ŽÔb³ÔsÀ_u9Š‹M C´  (ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿ€Ê˜ >øÿÿ—8”pœŸ7iö&có܈58K›·çF¬ÁYz¼Ûx<:â qÒà=ÇàÑS “îî<ÖN˜µôuÿñuzĨ¥©»©Ó#¦@-Ý‹1jiçŽäå ‰#\K#÷%#gHô¤Y²¸;Yøÿÿ¿…èýfzlêÒÀO [€l¦‘è‰ •Î6r<Á`¥ØFnÀ'î?*T~BÿÈPy,$+ÀúG•aBêH±pè ¹ÑP +-÷ãcJ€R¸? ©,Åûñ¡,pH'@)ÜdŒA*Jáþ|@6¤°㇈²À'=¥?J0±©(…øSÍH )Äj"BbKq} @#aÒþ—Âú@¡&â$÷[ÅõƒBMÄIî·Šëg…Ž”ÜoË A'‰ß*– +-‚N¿U,?.d}±X~\(:ÉúbñûÄPÔ’ïõbö¡!;‹I¾ß ÙƒÆV8“d§WRþ9D ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(ÿ(ÿÿ(€Ë˜ >øÿ‡À(¥CPÙ/ÍVä˜n?Uh_ÑÀDFû¬¢ÙŠ|Ðù§ +-í+ú˜ØÀÈŸU4[‘`b <@\`â,@$8]`â,@$8]`â,@$8]`â,@$8]`bŒ@$8]`bŒ@$8½‘ `bŒ@$8½‘ `bŒ@$8½‘ `bì@ ø]‘ `bì@ê§Wt0á€R zT*šAL8€Œ¾ÔZ` +-X?}£-€ ”Ñ£²Ñ z¤`ô¥nt‚žðSÀúé=O   ˆ›ŠNÐ #®ÐF È ((NàF!à‰„?`£ð„o¸ÑðD ˆ°Qx‚nB‰7 ifaD!hÚ8@@A@@à H@â`[ücÇ-D¸öö­‚ºFqRœ57Á^T´ +-õâfÙj0n@´ex‘hÔ5ÄýÒÔhÜ„ˆ«ñúÐ*¨kGæPƒq¬äC«P¯!n™¡ãD[’†VA]ãÛ85ÆMˆ¸2¯ ­‚ºÆopÞ47Áb^$´ +-õßÞYi0n@´åy1hÔ5¾½“ÒhÜ„ˆëójÐ*¨küÆçGƒq,éÅ@«PÇÁmŸã†EC¤—VAƒÛAÆM‹ˆV¯§jGn‚N4p6ª^ œÚtÜ&Úg Ù@„{8UÓ8sK4Ÿi²èöà”¦ãȆR;«É"ÄÛK¿©šÆ9[¥íL“ D‡¶ý¦4G6”ÚYM6!Þ^úMÕôÎÖ*mgšl,º²½è7¥é;¬¡ÔÎj²±ëöÒoª¦w¶Vi;ÓdcÑ•íE¿)Mßa ¥vV“EX·—~S5½³µJÛ™&‹®l/BQúk(µ³Jk º½„Jé§mÚΔÖ@t¥ÙƒhÍa¶ë˜ðÁT=ŒDsí‡p½Ð´jPûSüÔ`§~*ëEÇÿ«ÐmдN‚טÿ¤OtY)uƒþÖü¯B~”(¨áQç¹øþ8Ž¤õØ,«¼t—ÌÚŠwDÒr³\Yõr“6{VˆTd[c¹nåå:¶ +-öXq êø¶‚åÚŠ—ë ÖÖ³âŒ(‚ÜÞ•+«^®sÛTÏŠ‘ŠuK+×­¼\Çz+DñÖ«\[áå:–ô¬8#Š°·_Íjª—ë¹Ð3üÆBýVªYOñr9ëy–ßXˆcà5ë)^®3j1Ï}£Ð„ÛiÖ§|±´«<÷ÍB"®¥YŸòr 'yì› +-eT\‘f=ÅËuf®Çsß(tcã.šõ)_¬öÏ}³ˆKhÖ§ÈDÇæ%û&Dé&—ŸYO)âcx蛈ž·Ü<³>Eftððß7!J—¹äÌzJ™è ðÝ7#zϹÚÌj +-™è, ïÓ7#zþs™Õ2щ€Þ§oFô^t…™Õ2ѹÀݧoFô¾tm™Õ2ËݧoFôuU™Õ2ËIAܧoFô~u=™Õ2ËyÛ§oFôÞu%™Õ2Ë©ÁÚ§oFô>v ™•)d–³´Oߌè=íÒ*(d–„²ÏÀM…ØÝ.­†Rf9Œ{ÜTˆî²Ñj(kŠƒÉ°¥÷üÿ¨áQç¹øÿÿkךÒWûlq#ª€ñÝæÚŠÜ%ý¶ÅETÁF Íe+^¸ËØâBôÁ#Åæº/ÜIÿwq J²]sÝêîäÀþU9’¬Õ\·â…;¡ÿ-DO6j®YùÂ*Â?(DŽ' j®¬~Á4®¿‹Ñ•UšëV¼p'!äßÅ(QËÍu«_¸“ ïWqDä³>sÝŠî„ö·8IœÙœ¹få w˜)ýPˆm–Ì\Yý‚;ál~¢r–e®[ñÂü¢D<{2×­~áND€_Å‘ãÏ‚Ìu+^¸%ºßâ@$Qh7æš•/Ü!*íCq r,Zseõ îdõõ]ˆ> ­Ã\·â…;éBý.D‰–6a®[í…;‰}GDŽN+0×­xáNÐp~‹‘Ĩí—kV¾p‡·–ÅÈ‘jÙË•Õ/¸ÝÈwq úpµðrÝŠîdOñ»8%ÒÚu¹nõ wDø*Žˆ»–\®[ñÂâ÷-DÁö[®YùÂã="DZ…-WV¿àN’çÞÅèƒÙJËu+^¸“L¶ïâ@”(Ìúèþ$ÿ¨áQç¹øÿÿ;† A‚Ú}¿_Gç³2¥ŒrJb<ö D9¿®ÎgeJ蔸xìˆrÞ]‘ÏÊ”/Ö)qñØ7 +-%¸kòYêËu&.nûf¡wM>«S}¹ÎgÅmß,ô¯Ãguª/×ù¬¸í›…âµðYêËu>+nûf¡‡x>«S}¹Î +-Åmß,ô@¯½guª/×Y¡¸í›…èµ÷¬Nõå:··}³Ðýޞթ¾\çVâ¶oz¸×Û³:Õ—ëÜJÜöÍB÷z{V§úÒ:–øÂozÐ×չʊ—ë Xâ´8ˆôUu®²úÅ:?Š8-"…~%«¬~±Î›N‹ƒH`=ç*«_¬óæ‡Óâ RXϹÊêë|Êá´8ˆs®²úÅ:Ÿr8UD +-‹9WYýbg3œ‘‚ÁJÎUV¿Xç_ §ÅA¤°Œs•Õ/ÜyÖÂiq)$,ã\eõ wþpZD +- k8WYý—!œ‘ÂÃÎUV¿pçe§ÅA¤àaç*«_¸óuƒÓâ RX½¹Êêî<®à´8ˆ*–n®²ú…;¿8-"Œu›«¬~!†¿û<( ¨áQç¹øÿÿ‡p($HÐö’S6…c6£1ö&DAÊÁü)ig¶hp%[ˆ†Ä‘ý©5G6i|%›ˆŒÅÕþT7‰3‰4~“ DAâÊþÔ4‰3›4¾’ DCâÊþÔšŠ#›ˆ4¾’MDÆâjª›Ä)‰4~“ DAâÊþÔ4Yó›:—Éf!oqoÕPÖüFþÆiÜD´-®æ[=T5¾¹¿q7e‹«ùVƒRÍoænÇMDØâj¾U¡Xó›Ýßq—¸šou¨k~wãø¨K\Í·:T5¾‘¿q7m‹«ùVUoîoÜÆ DÙâj¾Õ Tó› 4¾ã¢îrß* ªñÍEqÑv¹‚oõPÕçžÆmÜ@”]®à[ J2Ë™£q7 Á+Wð­ +-E™åìhüŽ›…èÊ|«C-³œ8ãF¡ºrßêPÉ(GcŒßq£Pºjou¨d”£‘Æ/¸Q¨]©ÏúT2ÊÑHãWß ªC×ê³v +-åP qÜ7Á¡kõYŸ +-åX ñÕ7Á¡kõYŸŠŒrŒÄøꛈàÖõù¬OEF9Fb|õMDpëú|Ö§"£#1¾úfâ¡ øD(¨áQøÿÿ÷à(ŠBô¨ÀÖ°gX„éÒâ$‘mSY<øýl¾gXäiÍú$ÑmSY  ŸíeÚ1EId[UAÅ{†E™n QÙ6•• ðÿñ=âO F©HSªî~¶oØu§E´Ôl,»€ M«L& ÈÃ#¢‰¾ŒQöšÍ2(FU†EFLS™–šÍR*&UÆE‰^ S™ÖšmR6&UÆE‰þ‹T™ÖšmR6&UÆE‰þ‹T™ÖšmR6&UÆE‰þ‹T™Öš ßRB&UÆE‰ž‹W!­;[½¥„LªŒˆB=¯"­;[½¥„LªŒˆB=¯"¢O)É*ÖEIkÊ4Y®ËáC¡äûL«™P ¹5E¬ËàC¥äøL»Q`Þ‹$Öeð¡Vr}¦Ý,€(pÞš‹*Öeð¡Vòh[·âôÖ"0*%vNëÕŠë·‘tÀ|¨•¼cÚ¦WœÞZD¢¢æC¥ÄÎi½ZqýÖ"Ò‚˜µ’wLÛôŠÓ[‹HTtÀ|¨”Ø9­?.®ßZDZÊö¡VòŽiÛqJk µ0ª&vNëOŒëÉv‘–rÀü©›Œ#ÛFcœ&[D—æOÕÎl=‰q=Ù"RTŽ¯Ë.ø<ÿ¨áM%xøÿ@ @ÂÀ8ÑD9AÒ|®»PGpúÇDºÙgT<2ߥ×ÞNý8ƒH7ãìŠGæ»ôÄÑ>Î ÒÍ2Óâ‘ù.½–fq–3ˆt3˺Ô#G§ùÑ£ïHŸÕÀ„£ƒ’oéÒ< $]¨ËîAŽn6Ùœ·]‹²Úg©æ!3óóЮtÆ«}‘j¾±41¯EÀÑgŒôæ{ƒQxLXNF>CGC˜Œ„g‚r2`”è3::ô‡ÉF‘J9÷sGÏjXp$;øò!Hn'†T„ Ín2p¤æ«ó‘êzPB$$ÓwG….°=U'‰Å£"ß¾3p$t~ùÉHuI¨ +-åÎàhÐï(#ê$±r`ó£¡Û;PFÔ!¡ml¶ø;££C‹×!LD©uÿrëÌC†EhLÁ:G1cr²‘TtË‘Á¢ ¯KQFkC©8q`⌎MÝŠ2JNû„zÄgè(häj„äÚP-{¨8ƒ£Bûö¤‰†CÈÑÊ1Ä.bº·&I$!Úl+.θèÓ³e ]*Ýï[9+´aF ; ͉¼‘$c°:A†‹€†mKé-]w–ÖžÑÑ¡K+F·Ø´¾ü|ÿ€ð¨àðˆ!.@ @ @ ø€àÿa ž?v>I5òäu8ÃK;ö^‰O£Ú‡Eîx½¨Bt¯r–œ^´{uÊY¦ÎR_`S_«¦xþIN‡«[휌¸i6ÿÏÄËXX¾<¹¥9M6çä 59±ÏÀ˜ìL?‹›Í2™‘5 äÌ»ŠkX „yÛ6ÌÀgédA8 7å9ÁÎZ½&˜£q†š€˜Ï1 Lyf¤…J˜µq5ØÏ Ly¤…J˜]ã 59±Ò`Lyšl¿éëRËÙ8ƒKpìÒp¥<ÓÒâd˲A†—LLl L|š¨%I•åá 51Øà˜ø´Q ’*Ûá 4q±À•ø´TË'ÛÃ^Òq°€Ø&Êûd('¨á%™àøøGˆœ hD€@€ Zæ;@À¤­5„³€N{ëÜb…õ¹Q ”†Í¢»XP§êæ ¬(—ç}Û8¡SÞ­†%D‹Õ–X³¢…›î¸¸ühÈT¿ ¬]n¥Òú ù ÂyÁà¨aܾ˜Uͬ–èþÑ!Ú(H}ˆ¥ +-ª*+AôÓU)Aá°uäÔ…âçu+•ÚÇÉ2HÖˆ +-øÆa@5ªÜ6¦‚ì>ò#К³oU§F´U[_êzº2¥¯|o0gÎÝ'ÜHj·R}¨Äƒ„aµÂàqÄ–É/TÕ.³©åÞ·@¨»ë$܇bµ†)R¥Á¤.ŠX[€VªJ›*ç‚·Rå}À\ƒbi¢ pDT—¦©Ïl?ƒm:vŠ®ˆÊêɪM}"QW‘<+i-E%'~TpÍ[¦Þ>rB¶°Tg:¢Šó U=aj¶L&À 2>û›l‘n:—¯/tÊÔ Wuù†û€‡ód›ž½ôÆ(ÇÏŸk@#¶Ã ,¾è°„2R¡j6Ux‹ö¯/в‹yRÒˆ2OS™Ú£§.ó–EJNÚ*踽·Fù}%„„a…ÈàtÄÿ¤zæ…)žUSXÊ^ÞWAî«ZˆÉ( ÖÅ ­3‚]ªŽ­ç cõ‰QŸK×€Iìˆ|±à e¡BÕ0Šòù7_€[÷Ç6ï!Q¯oŽb”guíÅüÐ0ʲ‰ÅàÎÕ~c”âgÔC {C`ŸØˆ”çXü” ÿÿÿÿ¨áa€ÀÚÁA@<@ 1òên(`g€vU¿þ×—à,¼¢>=¼ï‹)™üyµ°»r«@«¥L\ÉÀŸ:'êo¶ \Š>+¤{÷î4ûŒëè&É´‹ËêmÏ·Èý®çà~äHø‰ƒ£Øõèt]=Y¹a'Ü8Zq-B%áòKÌGïî&œ³ hú•ópZH +- æjeDò?8\ý'ÅÃI¡)„Ú†I”Éÿàqµÿ-ÇÚÂYpK^ yQD ¨p ÝŠ†‚\¯)¼G%?—†jëå«i¼Ê®FAbõkT,^`瀜¥ µH¨ß® ߟÁ{¼Ž¯|8¹éÉ• K}äöJµ;5éuÖ¯xÙ…ëgTE˜¼GBß0aäòÓ‰Y1´Œ +-©@Fúž¬Ë ç+'½Ã%Û›7îÙñBéÄÙZ^5#ŽšaX²ü ã]._--©h†ÐBÛ¶ÐÝØÔÞ·uÚx%Fð¾·¤ƒzàÍz‘>øH`…%+YV¨†¸?t ÿÿÿÿ¨áa Îx€ 8 X `Žc3å¥bŠ”ÖÍ!Ž$ žø@‰¤»Pé¦0Åð'WUò>_ >Ø1ý±×±ìO ×¼× >V%Z +-ú°/ô}0ŽxãAqÝ ‰F},£_Œðýí#Z$µZ"«Ç,á5-ç.B²æc€°ùÅDãÙcü)XûÈZô,ðÅ8;ÅÁ±IÏ÷ðäÈd„¢a‚žY“úÆ1 •k½ü=¡åäy¸É°¦÷SÇìS¡¦ß>g¡=Ã0ÌH*ý,1¥WD»I„: ‰ÉàÄáÎ1xIoùç¯g ôƒ­§É{Ï$[¥‰Iÿ¥²3Lê†$‰å'%B–˜ÃëâßtCFàXàÁî ‹p†»¼þìWV Âû,¢;Ùäi ô“»på`Rà%••”gØ`òn †`o OâÞ›ÏLü01bˆ#ŠêÂ8Î@• +-#¼U°}Ÿ^ûø?èšh h»çÐê@#Á,h¨½-4‡J‘ c^6!cƒ!ü2þD¤€¥\øónƒ‘Œûå´ëëe;ŒX½“—Ž7ì+¨dj‡ÒJ—‡;´µZƒ· +-6 2ŸÜfȨ…nkÎÝUÒξäÌõÊ‹žuŸ3÷˜¥È^›ì)‹/=׊ÍQÑa&°‚eîvvHߎ¯£ØàÃîe Åÿ#/éØ]úÚFu¦äˆõ$/mÏúz^]G4î%0wt}’Þ³î(,¨áq$¤È{ø   xRú¬Lˆ¡‘Š·¤{*t‚¸)Ó;ÚX à«$Ö¤È T‚¸(Õ=šZ`¯‰èÃ¥¨ì3‚¸Ù'×Bš_ `³‹øæ(üC‚¸ù'ÓAša `«™hÄP8ÝIŒPP6Œ‚¹G£«œó”š +-jj€6½ llJqŽVÖ +-<ðã.\±vÖ]½ÊAÙ¸ +-Ü ©dpºm:+dØŸ“l’õj‰(JJQkc‹ÚÄtkVàî Y¢ ÔI+åM(¬°;=¶¶Mâžý`ñ½ Jå0»tî‰5¼{x16­»pf*;që!å '†×Æ.üi⎇[z’ò*æ)"Cð•”ÈÂãý<­Ó££Û®3ÂEÑy1ÒÖs$Á’i¨<Ôö­ó_í½fçÃCÊ4ˆ™&–A(š£ -aŽ7VF.¡=ãm–R `mÜ(Îc09á? ZÖ£Zéý—ˆ,û¡Oú&äfhœ½C/4½ƒS«Ð‹ñ·¸E³™*JB#J°íÔg˜×Ú ¯êl†È¥ U™B¯¤cŠ$/G0=ð0%âã€&´y—sñªø¼K5Ô{5$2?¢™§£µ5+$´õ&έÕCLú.šrØØ,Uøv…|{{£V9ö¼‰¥j-ù*ÂÆDÅ »±ÒOÊd ³\¬TbIœDßdÝÜ )5O +-‰Ý+£®ë‰;ŽÊ¡o¢.±‰ Y„ñ“I×8S5QR }›t“]$!½8"–•$’ДªŠŽXˆÛ£ë<£zÙÉ?¤ (X˜áøÿÿ ¢þm’ •·«rãcÒÅD I}•»«rücÒÅD +-Iz•»«rüoÆÅDIz•»«²Àf&N¼ûxQ™»* lºaÉ»*sW%‚M7Ìã%ÓIjÄ4®J ›k1Å–¤#ÙI¸*9`ºaL’îÑHeઌÀ¼†)«dºG•ÃU)bs-¦’qS* W%›h˜ç‘Œ{ÄR¸*/6£aJ&ÙM’EåpUÒØ,‹)’¤É—JÂU© ó’nd*W%æ2L9$»=Ö¨®J ›ea +- ¹æ§’pUÙÃ<»äš$œÊÂUi²Y SVI´’;•‰«R +-¦æy%×ùT®JÌb˜2I¢} ªL\•X6¿0ÏX©ìfÕª|Ùü…)»d™d"̬U)ƒù SvI1ÉJ•Y«²óW¥¼’e›*³VeÍf.L%ÅCUf­JœÍY˜rIŠI†R™µ*w0saÊ"ù%yª2kUú`Δ¤Ø#«Ê¬UéƒÜþÌ (Y˜áxÿÿ÷SƘ­lVÂNró#ºÊÇ…i×&ÉMÔ$7?Ö[‰]+‹Ù”Œ‰úñæc€•¼«2šMɘ‘KbzlXI»VvÛüˆI˜dÌÇŒ*½Kåº6aê•\ùèd%窱g“1fÛ’•cVÒ®•73b‚õ¸ò±§JïRùðf¢M¥’%-­ä]•m&ÆìYRÒcÕJÚµ²äæDL0I~| «Ò»TμiÓ¤äÇGo+yWeO›†13–dô˜·’v­Lºy“!ÉŒ…Uz—Ê«7a +-”œøhr%ïª kðfº’‰%= +-¨Ô]•ÃoÞÅ„S²ÏcÁJïRù¼M:›Z$÷=BXÙ]*·o¦ÃŒåQŸd„JßUéü&:L $QÜÿÄ (Y˜áøÿÿßC¤þ3‹¤°G~’ß 3͹˜¬…?®$™N0ÇØ´Ý%é÷ñÈÊUYé¦-̦’¿°JÖ(Ì”6ÛbR’äý¸˜dFÁfsÓI¼W®©Êz=aa}äe„¾²LU&é¹u“dnÆ*×T%›­0wHÚ>Ž@Sa¾Ù +-ç£í#$%f훪6eJÎ>ÂA¥°ª,SæKÉÙG(T +-«Ê6«bf‘û¨Fe±ªÁæ)Ì”’°†¨V˜%l>ÅlòöQÉz…©ƒMR› %[m!)²TV±™s‡¤ÖGY*KV¥6Iaj”T}tF¥Èª,ds(æ IªâT–¬JMl†Â¤ø¨úèJ‘…ÙÉfÏÍ’N%ª,Y˜²Øä s¡äé£K*¥Ve3›=1#H"}ª²jUŠcsfAIÒG¯TJ­Ê~6obxDú(—d᪔È&¦Íð%‡>:&Y¸*U²‰ 3y’C«,\•BÙÄ„»dÏGÓ* W¥V6+af.ÙóÑ·ÊrnùÜ (Y˜áøÿ_@@¢( þŒ©9ɦ­gúMä’ò I2“M[›é1‹KÊg$( )15zšÇö(Ÿ‘ì#°ÄÔè9~“—$ûG²’ÀrSÓæxÌ\’쉓„—˜{‚ôõÈž‘Ä#ÉÀ´Ø³Û&,Ió$$IƦ¥Ín˜­$Í3’¤˜=µcª>6gÄ.Ym0OxºÞD*üñ$ÁÁ´|ófhIðŒ¢ÛfbOÔ˜<ƒ3¾");6‹{FßÄ”¬ýˆk¥óÀ,´³R²ö#Å’þ³ÐftLÉÇÚŒÔKúÌržËm2J¾f¤^Ò…Tñ¼Œ9Q’ú£I-„ êæ2fÃÇÔ(*©&Æ›È6KF?V"ÉE0=nFÆÜ'Ñ«¤.ÂÛ³³ÞcÑŒH+ÉQ%öžÂ6éJ.?Ö&ÉH0}l +-ÇŒ+¹ì±IŽ„ ɦpL·Ë.¨ J•à6ýnB“ŒüÈGÉ_Š©oó7fYIdŒ-‘äK˜PyòÆûˆÌè¦ÊÐT ÚSî&.ÉÂœ­¼¦•zlâ€B,(J¨áfyP€ ‚ `„ @„à€ñÙ1Z"ÇjéðèQ«.@ïE¬5¡Eò]/í–¾êà½-ÿ2¥òx±˜Î®dõó¿F…Ž¬8¤tãÏfZ}=¤ÕQóêbi›¡ÕÏVSÑìÁ­><¼®ÇÜöò…-wÓÍÚÃ\=qÇ.ž{ +-µšø<žb^{õaâ§]¼’o"ñ{>…üúêCcÞ†õ ä=< PÃÁº,2ê:G>exD¡vŠõ¡díu¤¸Š‡žðGõûëÃÉ ìè1ûà$“Ê.ø ¬W/÷°cÊ.¤ì‚£\ª[ôaY¯n~cÇÃ|Š' À‚Ç,dlùx€›¡ž°™‚µ€‘ôño†<9`sJ +-#™d +-lx–@ÌÂŒ!É@°ÙÀS1û÷XƒŒ³S׳›ø%Q€qÎcbêöìoS¾d`Ì?ö¡ÍNOû0ËäÆüÇJØìôl&ûGĘ'9ŠÍð<×Û4_’É$ïæ¹>æq’ý›yŒLÍ›õ1ƒìÑþè7»=ßo®]r£½¤ulv{~¿™º$~vIÁÜÙôuñ12úx#1§žÙcrö¨ÉRˆüÿ=¨áñ—½øÿÿ0Œcþˆ°ÖNŸìvnmí/Í›i;§{Ç’{^¦ùc@ŽÇÔ +-ãéH¹'1“;ÒQò´çbNó8dÝ3™I=i*YMzò §Ïzü±íÍ¢ô•„F]xŒÓ«>úXöÌf²RZK.e­÷ŽwS.?ê˜öôf’ZºK&½~{I¶iØml{Ž391 &c“½eØÔ 2Æ=Ñ™”š“E´³^ÓjºHëžíLFN›ÉaÛQ×¹4¤ŠmÏz&]çi W·Ñ Íñabî]Ÿ1ìS6†Ó{çGpæ}„q÷þϘ +-õÑþ†ù“–Y@¡=Ì{d…F-QJòZdrÀúž 7¥×6Áùr1ap¨…o‡ ‘Sñê`‰a˜P@T¼·E†ÿô{ô·àÁÓÌÍÁ¾çFV=µ~¼ÛŸãò¥¡ à ’µ½z ±ƒOùXø(É@n•ÐNJ4GsI F +-¨|ždü¾zh'†ÃÀ¶¤E#ý;>_²°UäÒ‹Ö\hZ&ÃQý’ošlì)LÃeMŒ,»ñHûËgNvm!Ñ6`lØ+ñ€¤üÍ·O6‘­“^æ\€”•‰„ûäÓ(ãÞö–ª3²*VʘNº½âã”rûL•,Y0>eN)^óÊFÈ=§ +- | ”²©•.ïùTecíþS`¾øô ÿ(ÿÿ%¨á¡Hp @ @,@0 E±ˆ×g…útðøå0:¢T÷Ž(Í‘–Á¤\P¢édðF­Y!Ïš(.»è¶ä +-[ºd—ÙØŸV£ ²æ®`æÐõ×a3ÑPwtQ¦òÇš™'Ø:ïÚ…@¡é"5å¦e“Û Â ¡ƒø²®Ži*C‚þå*áÜ™K€Õ-©&·XQF1 K;ç–Æbô¶t˜¬•Ee$ñs. œ›ˆÛÒX²6.bý ,6ã¥~rõ¢d”¶H”¬Ý2â{p ˜6{r'÷`4¶’L2b<ø• åxrQ'`ÔµûzÊœQ×ˉo@úòíàüÌÌû/ϋй‡¢Ðc N–ñG΄¨ÿ²<ˆ†Zì»hÕ M ú/Ï{à!‰žÅÿ‰Ö'q$ÒŒÏÍÿM–COâ¤é ’Û‡c¢fx~þ¿²|¬’&Wçt0QkFçâÿ6[ÉÇ-UÒ6 +-IN„'ßæsþè³} $}wø.x„nö†½?CæðÇ39f¸'7ñM×Ô÷·ÈÙ&ÆG€°ùÿ‘pz¦º¿I¦0È9)6¹}ã›ÿ-ãtLy˜ ¡yB sëýÙ”ó/ñýu2ƒCþÉ°ÎÁ¯ö3:ç[¢û+e‰,a¥W·ñço•N®xûkeú½(­*Wôã¶N¦˜û“eê)}²þVøFæø, (€ ¨à`a x?@ @ ApâCqIÔ}Õ‰ ûot0:‚ï+F%wICp4.: âG+Ø"ýª…bYt¡é©hhXÒ”´G¢"ø bŒX²“4Gk¢“"ø—b°X"%i/ŽŽDGFðŨ±ä"i8ŽhD¹‘„îõ)¯lHDŒßÝ>XÛд â!K›H„—Ãtwé”ÕsŽê ‘çs®îãí8Já’šøXæ–•–Ç«v…èÆEuª …$ +-²,ÁÈÛMNŠÖ] ¤Â]”G6h} Ѷ³ÔÝ- Ô¡Qô5~â´ ,IŽšŒêñ‹Ôã$éÞSJ‚ +-'*pì Î|1oÐÃOþÈ—áAá?l(s˜àøÿ œP°BøYga’¹AãzJ›o”P c¬¬6­¸¸”èZ6.Ãá¶ñ„’naƒ•Þ¦à€…áäýã€úü*ÇH/{NO#]Ü]T]x„<ºl;y9Í»¸¸(¼ð7üå¹³ê Z‹µ'Ÿ¦Á‡ÍnÙ'¯,ËO~LÓµ~dÿs˜àøÿ˜€Qð…?´/3o61ÿñ$&\ù)ÊÓ7© ^ÚRy]§àr·¥ê²Å®¦=h7;tÅ;1Ö¼«Ä¬¨V$-É«¹m5£ÒäÊê‚/Ýð"ýçË-´Xô'B˜”gì°xNƒbp›ÛŽuab“[,ƒ«2ƒ©<Ãl(s˜àøÿ’Pðy?îµPæâ. â‹\€¤0\þÆ1ƒùùË|çÐ ÂçS³«ÞÈfð<¿›oxCœAï|s¾Øu«óßù>7èd΋Ï׸ÑÏàp +- PàM‚¸º„oóúÆ6$tMUºº2#niãAÑ|‘¾œ“3S*…Znh)«lÿu˜àøÿ-J(8Aúçw›[‰úûÈŠg¢ChÈî J¯Ç”ÄÆŽí 0t +-~ ‹çŒÍ P T ž‹oÅ¡y +-onöö3> ®V!Û"` è#ü %# sLX0"œQæÔSþ ¬€\XþoW4?”ÿs˜àøÿÿš€!€S+d? ŽÈoÛ(Þ/¨ /ù&rcfLídïJýÌÏ’*…þ"G¨¨Ûñ®ñ½iwºë~Ô÷úÓò%×C~Î|§­î™Nûsœvø¶›ÿy÷5ÝöþhÎùýe ‡ßw á¿, *>//\[nÞ°üðªè–ϔ⃘báð¤(s˜àøÿ?A K˜\ÁSþ0\¤ÆÀÒÕ•OS=TPM­P‰5•AE×Ô•aSõS˜ŸRm*zŠ·©ßi—CÀ®î&t”=«Çÿ®ú¦má¶Ú‡0_£.Z5­Û#MÐ(“V/ën‰YÝ&LÄhy. -ê3/²KÈ…Rõ©­ÖdQb­nÕ–fU”Vcþ<ÿu˜àøOHhDJ%AGpÐ3 +-Òó7 +-€s:,w6sÈr\çÐŽX:œ±Küßå‚ðÒ¯¯’ûT¼Z·òo“•÷GÛ«á®&„¡b©¬"ÚgJèbm£å¨H(ëöxÅ ä7}±¼ÓŘ©Zž·Iïd0x,y\ ¨¶(Ë|I1—6€' +- 0À 0À̈ÀEƒ-hÁ-›¶ÜRnÙÚݤÝ%¥„ì”RJ?ýÿÿÿÞ{ïžk~”ð¹öÞ¼ªËíß܃QJsJ>×Þ›Wu¹ý›{0Êø¾ºÜþÍ=cŒð¹öÞ¼šÐåöoî¹öÞ¼šÐåöo®½7¯êrû·÷æU]no^Õåö÷æU]no^ÕåæU]n^ÕåU]^ÕU]ÕU]UUMLÖ¥X`Œc¡¸¬Šš¦$#|®½7¯êrû7÷`”Òœ¨Êº l¡¸¬Šš¦$#|®½7¯êrû7÷`”Òœ¨ÊºWEMS’>×Þ›Wu¹ý›{0JiNTeUÓ”d„ϵ÷æU]nÿæŒRšUUUEMIFø\{o^ÕåöoîÁ(¥9M‚Éh 6YD¶¹\.‡ÃAÍǺýÍY.˜ŒB“yïmÇÐàP±\0‰D"y¾ ™P*–ŠÃsÌ= …É„ÂÐÀ@‘ðW?Ê s< …ÉD² ˜$çͺåt)£áx@" +-‘Æ¢’>·ÚÿæDUÖ¥X`Œ†ãy8°Ëšd„ϵ÷æU]nÿæŒRšUËí_]Ï$D€ð`4""²¬ÑÀ¸“`0™ D' +-‰D"Ñ Œ4`й(*ï„.÷´K!ÑQHÁçóáp8Ídò¨ÚërÅxl6‡SÀÀ 00IÍí)€@ P 0@@¥Riˆ8¤{Oè¬T*N§ãð}²,£P(®9¡+),˲,‚Óñðt8±½7„•¨3†¯ƒ`7Èà3†FÆ¢¡4’e9Ž£ „!Ä0̈ ,œçg©ºë×Ôdú~D.>¼gšÀõç?^€þˆwÀÝ÷¬388a¸&ÃöD,“çHO½±{AïÍëÞyÄ÷ø 舞ï•|»µ«C›ê:˜’Oÿ|Ƚ|¨yô•ó`ü;lB–¿|ø~² +-͇­Ã¿¼ðÿ£‚E„€¦yJ`ËÀéÀeS‚ò6uf½oÞ}ÏsTOgoÄÔ˾÷«z¯Ÿ“.Ÿ!ãJ_vë€Ò|ÏÍ:îðv9z[i‡·#%#€ìxXú«¡Ü©¾9þ}”îoKôC—¤èêöqäèŠ@hÏz Nz0yoþUvÇìÝ©yõ<žBQÏ8={áß½|#AGsãcŒ„ôån·ïÀ>Õ)|­`¿ Xu¿Lð‡ûäCÍè_yÿý”Ûßµ·Ë€Àç¹'¸:Ë F-'‰» y“ôtß9Ø;ñ{‚מ¶|# £Tk“šááKFߧòÍõíPhú&¾°q ÿoÆ„ß +-æã£xÁàÍ?=ñ_[X¼¿a(%@Ñ€$ +-¬¸M)HH+‹3{B¼gô¤ë¹¶7{/8î Ý›Rù\P›óÚ|Zé{º/ßûï2 }IÚ ƒð~Hýù`ÿ^Æß ï-ËþÌ7\üÅö€²yà^Oß •7²²Ë·½§‡=Ð=þï‘á;Öi/oð_õ×®7ùÖ¶°æ33vð‘dG€m5ß½˜,bõ·a3Âþéù_'øQÀè€[ +-’ +-Z\9§ÁönÏtdú°Ô<õb²ÿ´?äÍ> ê€s T#8Þ·ºH¥$±“EÞsKï±=–÷o/4>X-sÔŸÌÖ…í_ècõ€]_±kà/ "÷ {Ž£ôgóÿªÿ_·, +-¸mÀyQ'iŒÞîq̬;§gž¡z§â½'|ã‘£sæà?|)ÍGŒ>ŒoáS‡œñðèóžøS.¤!‘2#ü5÷ë£]ì£3ïCM~ ›þÕH‘jE`o`Æ|÷‘¯¤¯ JÞˆôhƒ½¡ïñç^3¾·¸·Ñ´“0_NÙFÒaT_ûC_,öÑŸrÙIÁæ{?Ô&ÖGÛlÛŸÙûQýþr *ð#7Ó×wM0!´N˜qók q`ï{aÏ3i¯Jí\­~:Ú7ÛÐ#Ð|7jèƒ÷ÅxLØo¸T)E¬õäßþ» @€¡@í÷ð™I@`©Ë†;ÿò¼›í¶×¯×ò=|øF—#k³‚ŒR¾6èãaH»°VB?²þ ‚ˆã/ ¶P¡9+xð¾c€¶ÊÞLï[|Àh¾ßÔaD*¦é‘óa© l„v"Í6÷&ÙŽ0Å>íø’&@R³“¼[È>»<Û¸Ñ^7Õ/£¡ÜÓGþ‰Ä)µIbÓáiGðoo„})µ«ø=:É\¥4ˆ¬“%?ÓòÄù7qùü)ø‰Ñûª6ÝÂr‘V£Q¢O½ªö©k$Òq-Ñâ_1šžÅ/Ó +-4H“P‘dY†$0ÒL‡HI ‹è©I&&tñoÇJt¦Èè+µí´itáJ±ó:ºÆ[x’—9Ù~wÑ`-–²QÌ7‡ ‡è(Â0k¥ð· Å{a*°JðçÁ¾Ö§Øǽ•®ôÕe±EX§9ªÁYú-]ƒNù}€yÛÖI®Uj½è^@g M³,iýÀT†³‚½ÐK.7 ¥TSð2F/Ñ›=¯!êO® go/QÃõÿ¶™@˹í¶Ï tyßÏ|¢Éh^Ï ú`/·ŸP!Bï“yA—,Ðk9áÒv.sâF B@Çï¢JÞE—#ºs‚hϺ óDÓ"¬Tç²¢¸,¦jÏå‚HQDa‹®u‹ hº±Å‚seõ +-ç4åÇâ„Æ<ÓÈíY̹îÁ)Œ:È­Ì­«wæÄŸ®9×u7·¯ô‚"„äü !!""<<<''&??PPPPPQRSRQPDD))SSSSTTTTUVWXWVUTTTTMMMLL)))**2IIJJYYYYZ[\]\[ZYYYYJJII!+.1123399NNRRRUU^^^^^_____`a`_^PP==<<;::9944,, 44;;CCSS[[[bbbbcccccdddddefedcbbbb[[[SSCC5(%%%55==DDIIZZfffggggghhhhijkjihhhhgZZUUDDCBB ::@@GJJKLLMNN]]llllmmmmmnnnnnoponmllllkkkk]]QNNMLLKJJIHH--,++%--8ABBQQRSS[[\\]]ccffggppppqqqqrrrrrstutsrqqqqppppooohhggVVUUTSSRQQ/ +- ',,-445>>?DDRRWW\\jjkkuuuuvvvvwwwwwxyzyxwvvvvuuuutttssskkjj__^^]\\WWVUTTNNF443))**334::FFGHHZ[[bbffnnooppzzzz{{{{|||||}~~}|{{{{zzzzyyyxxxppoonncbba``[ZZHHGFEED66** 112QQRSTT__`aabccssttww€€€€‚ƒ„ƒ‚€€€€~~~}}}ttsshhgffaa`SSMMLFF988110 .2JKKLMWWX]]^_``gghiijkklmmnn||„„„„…………†††††‡ˆ‰ˆ‡†…………„„„„ƒƒƒ‚‚‚kkjiihggfee@!! &&38AOVV^^ddlluuvvww‰‰‰ŠŠŠŠŠ‹‹‹‹‹ŒŽŒ‹Š‡‡‡zzyyssrqqlldd433&&%$## )?Feerrsttuvvwxx‘’“’‘ŒŒŒ~~xxwvvuttsrrhhUE>=<)%%$$%&DEiijuu{{|}}††““““”””””•••••–—˜—–•”““““††}}|{{uummJ:-(';IJTUhijjqqww||}~~€€’’’™™™™ššššš›œœ›š™™™™–––€€zztt_^]\[[ZYL; +-;rrsyy€––žžžžŸŸŸŸŸ ¡¢¡ Ÿžžžžˆ……yy  +-{{††£££££¤¤¤¤¤¥¦¥¤£¢’’‘‘ŽŽŒ‹‹Š‰‰ˆˆ‡††qlkjicb\:  I€ŒŒ’’““”˜˜œœ¡¡¡¦¦¦¦§§§§¨©ª«ª©¨§§§§ŒŒ‚‚xhgJlmƒ„„…†‡‡ŒŽ‘‘œœ ¥¥¬­®¯®­¬¥¥œœ‘‘ŠŠzg  !I„……†‡ˆ‰‰””›°°°°°±²³´³²±°¤¤œœ››š™™””ŒŒ‹„„ƒ‚ !%IabcŽšš¥¥¦¦©©´´´´µµµµµ¶·¸·¶µ¥¥šš™˜˜““Œ‡†J,!! +- +-"<=>?JKh…’’  ¡¢¢§¹¹¹¹¹º»¼»º¹¸³³³§¢¢¡  ••ˆ‡K! LM––—œœžŸŸ ¡¡½½½½½¾¿À¿¾½¼»»»»±±±¬¬¡¡™™THG "eŠ‹Œ“¥¥©ªª°°´¼¼¼ÁÁÁÁÁÂÃÄÃÂÁÀ¿¿¿¿²²¨¨§§ŒUk‘žž··ÅÅÅÅÅÆÇÈÇÆÅÄÃÃÃ襤”e]QPON87 !3UVWXZ[\]^k—¥¥¦³³´´ÉÊËÌËÊÉÈÇÇÇǧ§œwvutsrd^]\[Nw««¬­­³³ÍÎÏÎÍÌËʯ¯®­­¬«« ŸŸž˜——–edcb`_^][ZYX: 2@ABCNcdewš««²²ÁÁÐÑÒÓÒÑÐÏÎÃÁÁ´´³²²§”“’ƒkjihfedcNML?3?@AB`abdefgijkƒŸ··ÄÄÔÕÖÕÔÓÒÑÆÆÆ··°°ª©©£qponlkji^]\HGFE ^_`jklmopq©¶¶·¸¸¹ºº¿¿ÀÀÎÎ×ØÙØ×ÖÕÔÎκºƒ|mlk`_^\[Z22TUVpqrtuvw²²¾¾ÇÇÕÕÕÕÚÛÜÛÚÙØ×Á¾¾wvusrqpfedKJI2OPQvwxŽ«¬··½ÂÅÅÆÆÍÏÝÞßÞÝÜÛÚÙÏÍÃ÷·¶®xwvlkjhgf93Z[wxy{|}”µµ¶¼¼ÁÄÄÈÈÍÍàáàßÞÝÈ»»´´~}|{yxwutYXW>4. 12346789VWYZ[]^‚ƒ”®¶ÑÙÙÙâãäãâáàßÞÕÕÎÎÉÆ»º¹¹¨§ˆ‡†…ƒ‚~}baO/789:\]_‚ƒ„†‡ˆ‰‹Œ¢£¤µ»»ËËÌÛÛÛÛßßßßåæåäãâáÅÅÄÃÃÂÁÁÀº´§¦¥¤ŽŒ‹‰ˆ‡…„ƒ‚onmkjhgWV:98+ !""89:;DEFRS\]_`yz|}~ˆ‰ŠŒŽ´º¿¿ÅÅÆÇÇÕÕâçèçæåäãâ×ÊÄľ¹”“’‘ŽŒŠ‰ˆ†…„‚€ts\;:9 $%&CJThituvxy‰Š‹ŽÖÚááááæéêéèçæåäÝÝÝËš™˜—Œ‹Šˆ‡†srpomljiG@?>)*BCDFGQwxz{}~‚„…“”•–˜™šªÐÐÑÑëìëêéèçæÜÊÊÉÈȼ¼»¡›š™˜–•”“~GFDCA@?* #$CDFGHJKMNgh™š›œžŸ ¡·íîíìëêéèËËÄÀ¢œ›š™Ž‹Š /9DE‚ƒ…†Ÿ ¡¢ÄÄÅÛÛéïðïîíìëêéßÝÛÛÃ÷¶¬£¢¡ Š‰XWUTRQONLK>?@KLNOQRTUWXrsŠ‹ŒŽ‘’¡¢£¤ÉÊÊéìñðïîíìëàààÔÉÉÈÇÆ«¤£¢¡Žƒ‚m[M+,-.[]^f‘“”•—˜¢´ÌÌ×ÜßßòóòñðïîíÑѹ¸·¦¥¤£¡ ŸmXVUSR#RSUVXYefhi}~Œ™š›ž ¡¢£¥¦§©µÄÎÎîôóòñðïîíêåÒÒ¹¸¶¨§¦¥˜—–”“‘‡†ld\[YXBA' [\^_acdqˆ‰“›œ·ßåñõöõôóòñðïîÔÔËg_^CB@?# YZ\^_abdfgikl…»ÅÌÐÐñ÷÷ï×ײ±°¯¤£¢–onljigedba- +-QZ[]_`bdegijlnoqst¬­®¯ÑÑ××ìðó÷ø÷öõôóòñðïääÚÚ«ª©‹wvtrqomljhgQPNM345`aceghjlmoqrtvwy{|™šª«¬­ÕÛÛåçôùùòñì©¡ zywutrpomkjhfeWV GOPRSoprtuwyz|~©ª«¶ÕÕÖ×ØØÞóôùø÷öõôóòñÕÕµ´³²°¯®¡xwusrdcSR76"4;<>?STklwxz|}‚„†‡¢£êòóö÷úùø÷öõôóòÞÞŠvugedb`^]B$/YZz{}€¨©³´µ¶ßóôõøûúùø÷öõô…„‚€}{zfeUT %&'(<=GIJLNOabop}~€‚„…‡‰Š¡¢¤¥§¨©«¬®¯°ÁßßõøõôŒŠˆ‡…ƒ‚€~}podEHIKMN[\yz‡ˆŠŒšÉäõøùüûúùø÷öõôóéÔÃÂÁ‹Šˆ†…ƒ€jigZYIHGHJLMZ[]suvƒ„†ˆŠ‹’”•ªÎÏ××ë÷÷öìÚÚ˜—•“’Ž‹‰ˆ†„ƒkjhfMLJHG2FGIKLNmnŽ’“•—˜£½Îö÷ùýüûúùø÷öõôì¾›š˜–•“‘ŽŒ‹utrLK10 ./023@AQR‘“•–ÙÙëõö÷øøíëÏι™˜–”“‘Ž~YX0/12NPQ‘’”ž ¡£¤¸ÛÛÜìî÷øùõàà×ÖÖÆÅÄ禤£¡Ÿžœ›™—–”’‘‚yxv_^\,+*('& -žŸ¡¬­¯°ÁÑÝÝæö÷øùúúùö쪩§¥¤¢š™ƒ‚@?% )*+HIZ\]_a…†ˆœÆÏááùúüþýüûúùø÷öõããÛ«ª¨§¥¤†…j +- $,qs€‚ž­®°±³´ÆÔò÷úûüø÷öÜܸ±°®­«ªž‡†„xFE$ Ijlx™š¥¸Íçëùø÷öòëëëµ´²±¯®¬«©¨‘Ž(:;=?@‡“”¦§´µ·¸Íßßô÷øýúùø÷êç¼»¹ª©§¦¤¢¡|zxGED ?@BS^¸¹ÅÜààçöøùûø¹¸¶µª¨§œ›ŠGF4…¼½ááôøüýùöÆÅÄÃÁÀ¾½¼œSBAY[wy¤¥§©ª¬®¯ÀÁÂÄÅÆâïôúûüñïääÍÇÆÅÄWU?=<E£¥¦¨ª«­¯°ââøüø÷êçâÎÈÇÆÅü><:9 +-@A¸¹»¼½ðùûüýêÏÉÈÇƽ¼»œVGE +-’¬­¯±¼½¾ÌÍÎÏãèùûüùõÐÁÀµ´¤›ŽI B“«¬»¼¾¿ÍÝæ÷üöé±° +-›±¹ºêñúúùøܺ¹¢'˜½ÇÈÉØòúùøóñ +-$¨©ÍÎÏÐìýþüûúùò©§¦‹‰‡…nlj$ ›ÇÈáóùúüýá´³±¦¥£3 !23¢êðóöøûüó³²£¡.- %8^±²´¶·ççñùúûþÿþýþÿþýüûúùöÔÓÊ·¶©†„‚sq`8% +-'()56Amµ¶¸º»ÐÖææçñúûýÿûæâ`^A()+,?kxáýÿüìÛÚÑ‹‰‡zk?43)(+,./134vƒÃÄøûüþêä¼»¹¸š˜–xv=;' 124689tìïýþõê껺”’ƒ986421 67DFH¨ª³ÆÖìóüýþÿþÿó±°‰‡…ƒ97645JLN”§©«­®°ÀÁÃÄÆÈÉÊäèèúþÿÒÑзŸ›™‡]%$-7PR_ÇÈÉËÌîùþÿúÉÈRP310 +-TV†‘¼½ÕïùýþôåÀ¿­—•“ˆ†ƒ}FD/.,+)*,-GX† ØôøûþÿÿþX-,*) 8Z]_acsž°²ÃÅÆÖééóûýÿý÷óììÞÝÍÁÀ¾¢ ž+ +-”ߨÔrtÊhF £ À`Çym,€LfvZ<‰³$Èq…BÈb€ÀˆÈ€ä€DNsXàXñ«;Úí¼äT<ø9=šj¿wÃdV_²Ç‘'3ú²A‘ÌÖ£ß/ª°Ç€øù×;@<éüôcXœƒ¯xÀU}TÜööMÖSÞý—Ùº=4ý†DN|U7‰œð¯æùž Ú\M,…õ‡·#›F¬pÊü> l"Jä&§¾¡À#ÂöÙÉkH+ýŒ!ðåBpMN·sní*=t?›u~¥ûÝ|kpêÀäGΊî>¢_Ü»)Å™?0°N¹$Ïj, +-,𔬂œÔßÐÞÚµ +-ïB ůZ¹8Î$?•2Ýí›ÙõQÓzG"w„ZS¾`[ßG>øŽoÿz¬¬%–ÕRñŽDãÎêîà¡xìsL/Ÿ¯¨OüF„zxÅnÌ¿¨rŠCÉ©hðsH+æÂÿ=óã¿9MØww¹¿¥²=ôHåïôðV €…ü% +-ÂÓWê h”³\ʵ7ù0ÊføMµ­°ý×e¡CFتÌÓƒ¾T59#«}J¶w,!wxÒç +-}»[þ4ß›&ÈÍE}ÝØô˜Uíì³SØb³à·Õ~ßü¥(~Y»¥õJhö‡Ýù)¿çÞª!?SW/Üíõ9 ·‡XìAŸ¿ûäíÇwÈ|,â‘ÞrÄïòö¨›hÜïÚÃÿÈÚÆ#G)§ÍÛ‡ ]° ìúènjîȶ¦6Awˆ{{_ÌpÜ<² Ö°O aúÒzÜέ§Ê©=ЯÅú³ÉÔ~ô#Îœ¤Í©…=’ÀÝvùéÓwÞ ¸‹«Æq {ÔGšAð,°<«'uÛqÅ^hV™†p˜¤}ò¨ ÑÃdÈü6u‰bÇòUC oÈá6ðSG}¹•Ü!·ñŸêÉZ]Ÿò5=Ä¿@ØÊ:æ>'ÞA@ `þ±O]ÈLË¿ëÀ‘‘œœYZbµûÇ*fÔ¿"ÏOÀs·p7 ò+—9ñ:§tѯ1?²€1£NÉßYØܦ¿V€áÀŸð(-^ýÚg¤•M/sÉ>aEøÏûJZvÇ:Ž;n¹ùÞRw[D8÷%0+ŠÜ#_×äHé"x˜õ± .U¥µ»F¯dLyçûáMõØ»XõÀ£_©5?q=¸Ç®‡~è¤ßƒÍ«¯ 1z”ÃÿJÌ:æ¢)r +-^-ÿãÑyÅ*eß숀¾»€S}bô>ßïÛ ˜Y¾`q–ây<Þ1¤>Ø"xˆp÷¶:³ëü>3¼ëÎAô¸(¹}HPV•°¬¸½×àLö0³9‘–s{”ú€ÌáŸ??cȼû!2ùý60¯jâ„?Ú}Aê¹íïú~öa£&\ý)ÏîÑwwñá®ö´ôQŒî;,«nëK&úDÁ&¢¨Ïü¿&*H_ª²ï8õàJü< +-ü®QNz½»l ˜ï÷UƒÎ©D¿)ïFËXR£S¤¥ÿù;SÅ&9 ÝÄýÈoÊmÕ½£¼Èmå&NÂÚ±¬©±â°–t‡òêÓ|¾7k2æ}q+ãÿÀ}ÞÁ×ÀÀQú2“Þ•i~³Ü”Jü"¸Ä¬»Zì`ì>ZÌ@žÞͤv·ZütÕ#ÐøŸçdôn[yøCŽý€Åô³æ‘êàànVœy­5v_¡DIg–sQ‹ì£ÓGÀÍH«y˜—ÔÇ«w„XMú•5ÅȈûêM)›—IÐ÷áaüjûÄ¿F=ýA ¥|ŠÎþgÑûqôíî x$ôã :}¥“G÷Ù¨ÛË¿^æT¾”ìDz¿s{–ª™†TL¥…%)NoÇÛùì“h’.ˆˆvu;ˆê[ÜòŽXîˆdÜÐKÃUåmN}¸ïÙW&]ˆŸ,íÎ%ÁO+öÊ+ìç˜9AîögÍ+»[š~ºàú·GÐÐÉaåw[~Žxü=/ÞŠÅÇ„$âí€QŸ¼ ÔÁØ_Òd>Ô§z>•f¾ŸTj¾Ò盪êt+5%º5ê[?ÊïT­ 5nsâ¾ë§ïòSæ²ëŽh!÷̦¾hÙ›}±}¿Í‰ßb±ûÜ&f]Q túßoo%‘ßܳÇMq7Œ~–ùbm{<ÒLþ‚žþ,¤è•#ñŽLá(I!Ïã_$„ó™-ëÙ“jºò|üÂü|I¬©*éóTÖ[÷Õ”wtάÁˆ¾é2‘ˆøm•#=´ÙÈöËI›ÓËîîŽò½»¦=àè”È)X¿>ïTòU2ñ¶âµOÓ4Þ%Ö÷EÖdßT5×wYY@OgJ°XûÀ¸á¦ÝŽ~õm‚;0Å÷Žv¡o'‡~¥ +-¥çß9ǹLM”O—H?ôHÖýÜ.~ž²‡ îfY˜~bï6C§ÉüÀ¯RØC±úá +-ˆ1·þ€ÅÉ°žÂ?”`-×#Ð|0‘5h†|>%¡‘zÏwvV×WêÚñüØwÏ|Â}KO&ÀÐ'¯>†;,}Þ}_G•µ|ès‘¾Ì¹çOföiöÑ¢Oü¤)§8›8Y½¨Ç‡¿»û)w7ê)è—: ó3öz`õåïµ=”k7sÕe;IDnþ‘ï#îóœÇøkb?l=OÍh& 3ß2˜õÜ%öA÷Äu‡Ê}"Ëv¸n)ï0³q+ÞGNôÿZ‡¾±`B}3àìãi:u´qkíÜï•ð»\ð[·Ñƒëz€:f(êÁ5?½øb_ç4M™Õýô×ãÚ¹è‰ú¥øú#ÞƒoXýe Æ{< _Ð΃CäÕJ +-Ÿ[û•4 |ðßÅŽõ\hzñÛFb¬ö ôÙ#î*ú6ÊvÞá’>}kÒ莺ú ³HßÂûl'~„}HÊ£ƒÿïë´´XúÑ‘ü@£$ñ¥ý*ïæ>ÞôÀcAӆמ«\ÜgX\“Þ'½YðfËœ¯X;Xm‡ðAHßá@Ÿ¤ºúhâPÚŽWºÃüÕuSŸ|f:vËig?öpÇŽßE?~=àÂîf;Þ­þ™¿ou²¶ßóíUð÷m¼ÈÉóeýbá b–éÈTÀW%ØëãÚ>–¨‰|i†áFnGŒ¸#êÓÿ|¨wÜsÇéÃ’îij()÷…ë3FŽ½ÄO¦œ55¨ Wÿì2»ägŽ=Øëôû®ÜzÕ÷ÕÛ>à˜nCëý\‹ÿŽê¦{øÑŸ÷Šá)2OùŸ½éê§+¼Lj—ê„&~¬ÃŠ·ƒdG–KSÜî>Ÿ¸µ¶#}aôUqljáf%YCïù&zãÖG[Y]H_r›®ñãöøºðƒûá˜9=4=„é³™+{¬åW÷n: æ§÷%óz¨ +-ùú ¬ÓÐÐÑÖÅþúsäxöÃ{N«óBy¿™}Þú%*§•${e¡ú€rùöØèû?uØ>0÷pwÔgE›š(ê]æŽtèÒ;ÄÄîÃêsó_·>°_ô©G{ñ‹ß[ûì¡ÝÇI?}{Hó+V~±{XkÓ½Gj?-vzˆûiõñ·)PÐÜ„:EQ.G&%³áåf°¤ê׶ôí`‹Ï~— BŸ¤‰avä¾É«f­Fv‡I5=٫Ϥw$)k â&éãlɺäÂ#ªûÆúøv÷Êží~ôp÷Öœþcwî´y·Ñí¡FÃU3ìaÃ÷Õ×Éõî_Êôg“ZøÊÞxƒyÅ •”Ø‹å²â|=$ñ>¾}Îꃴ#û€æÛWÙ§}"胻Ã.²æ¢Ï¸Å ß(}*ݬ/òúòÞ,kê’¾ =ð GÀ¥òTÑáÂo„æGÅ1³¨G`)~¹‘Ù,{Ì+î–ŸS¦wç}{„…¿²{ jL¼ÇØ=|šúc“ <Í·âÕ üÙÀ‹GõJc +-Ø4–Í÷Ìh7°“j¿ õ½kGŸ¿ýߎ2vúÌéæ«2Üv8W}’¼Ð·z;lžOä8îˆn; +-ïвIßø«t_«_ÜQ©¾$ñÕ‹À—ûew zzì`î6Þ~ʳíñü×cÛ=µGÖ}>šÕOn ûQ¼ßWå&ñ?¨älZiqÖ±>C(/¥ÆoS—˜Ì¥ÈâõI„µVô Z>¼Ùq#Ó÷ çÉ‚n±;lý.X^@ñùïø¾-é³d‰ñ}P\h¸A±lûÚÂÝpÍ)){èô»ìÝ|ètÀ3¿HÔO~ê{µŸú£™ÞmÞ¯¢CÄÛ¥”1s‚R\­Œ® A½e@ßëÛ­ÐD¾ÒÄ·¥}h¤¦³;B®šâÕ—ŽâeÞa¤¬§ôÀ¸í±¦ÕÜÈ=}ú"Ø'ÔÇóCõšcN`¿]šfIwG_°üNöî¶=$˜_IÓ\þPƉ’ña»~ÿñ¢F9÷W(D'ðݪRá8éÁņê>{úÈ7bÖDÕûþ´ƒ5Ÿpk +-újwÔ·ãšp¢Ïý|qïÞ–;Hï;u‡ÿdëÞúªú®3Ù û…T³[s’ÀRŠ»™)ýDïœö8à8Þ›ý Ô{Pßß<©”¿ˆÚÿ{-\2€fV ýׄÂ(Ê7 ©PÊéû„ȯ[>’%¬µvøµÔsŽ}x{v$»Cp;õ%âŸ}>•wŠ²¢Æí¤;î\_ý…“);™¸åTg_‰Ýû©‚»ÝbØ?´ülïèw™¶ü<îø;ø=Øízò| ?þ¶3žùGë?¦%À‹¹G c£K+‘W&ÐdÇÇIu¥tˆX“>4ËW1_ƒÁ¾ÙqIhBI;"fGšô ÕŽÎp¬*ô‰t>úv¤‘5}àŽ ‹tÏFûÚûÞú"E9½ûAä×1'…Ëáèg¼w£Ú#̘_,ó·Ðý2¼‡&û»ñ÷žüüíæ¥íÚ@2JÜ—¿aXÌšê}âwç:Ñ×wó­Pߢ°2 klÒ„§Õ[Û'>>ÝaU_}Œ îøzGVúlWÖâqªý½}?ö †ã¨ #~j=Óné¨GùÝî/{üå—ï_ÊG{(É_5r5Å=@ø@{è}ºû¢Õ¿fÿÉg`|FðÈpE"¥È+S4¯ñQ]MM9TŽŽgø˜Èti—Ô—¼·I4ù +-b‡¾:çû6ÓG„S;Ð}ÑÛÈšQ¢ï»íøä½À"}^ݱ(·¬–;ذϯÏ&DÜgÙù½üÜ°GHlN•ßaÞÝnûîžùk½‡M¹‘?iªþò¡ü“mç*ñ½ªà>»`m¼_Äšëß1¨Cƒ|‡zãÛ*ô™¬õ™eü:Âè+54ßÛŽ u”}`†¶;:n¬T}©¸i䎇ôE÷éÔÝ”õ1õµIQ7¶ûä×g¨»môûðnÜ„kBöÝÓü1¶ôóö«±ä}_Îñãɽ]öÃ?ê:@Æ i cý!I±àµÿšbatòA«ˆï`: ´ÝU&ܨ£np>„×á™|æ}Òˇ™¾’,à&}:SMΛ¸ Þ(£>¸{?w$÷F¼í³—ÒýñÛr·gÆz¶9űǩ»Ëý +-¹ ùi•ŸAü½í!ê=û]ðÑ“wR÷Ó•3û—ÿ›¾ù—盳æ`8¯ãÑœ¿èçÞ!…Zb>ù èk›ïq§úL ÏÜv°}{|Óí;BŸ“»£y¾CôMóŽŠÜAaLV÷Qõ©ŒºŸœkà’Ÿ{0»;Ó°øz4h¸z/ó÷ù ÐÏÉ\…É;cõgû7?ŸxEï½½‡ùÄ¿æ¹¼¶Ú2>šs^ì̈_*ñ‰ó™/¶£Ææ‹ë£ÈУÆ3ùBè³|%·ÃïÛ_mû*µíî0îvÜ=‹®¦ÖìSº«ðuG˜ÜçY_ 9çWwæ4Ç5ˆhØãEîòcìÝ¥´‡<Ž=¤tÊÅŸe‡òs‚(ú[Á~ñ'L¾<-µÿ±Þv—e¨´öz]:näך0óºõFúäÛ3_ùЖϖD›ï”evØÚ“Hô­¥é¾ÆóUÐ'%TQR}¼£'´p²>zæh÷ë`,©‡Ðò»yw Ð)çc~ÞùëÐö .Û@é—~±Ù ¼¿¿|Ì㯘¿Vüµ€ùȲJÀ8/€$ÈUðõKå{MÚ¡³A`‚…ø@çÀ#>tøñ|úd¿íØXß©uÈË÷ÕŽz>XmGŸÖÂ>¼;¨nGW}+F_uï(HŸ]è+FÖ@ó¾æûeÓ“ú;Æ÷üô%?ÅHwËOF{÷e~Ñf凭ùc!Þc!ÔÐ~Å÷«#6ã#Ýù௄õáþÀãƒîù‹=¢E+í‡}l°Í؈Íêâä^€È+x¾(ÍáËDGEŸ¥|ÅíXæóë£Ê*W;,ͧoG]±6ö ærÇÌÓhõ ¢¯…;¬·Ú5uÀ;,ëc?ºààì‡!¦õîl{<ì¾;4þœ‰i±Ÿ>;}ì¯þ•@ý[øo´o}ÿ¹ýr$ ½CÐ|½‰<¾ƒ;Å¡DÛÑÍàøhò ÅWæ+>| úXܦZ3ä¯úðë£)Ð'l殶}øºFê·_îøÚ€ÿ¾ÐótÕ2¿(Ä>8«ÝG!?/¡òû»3ͯÔèÄJž?úÁ÷¨¦Ö~bäúû™Ï>hüÝþ-ê/êÿüïªÞÑKV×Ã.dᯚ5£2&ä=9@·švd¾¸3¾>Ò:F¸¹Ý_—•ïÐu€=j&í˜êoç +-mÇnjÁ¾÷p«ÝÑáêäGúX#^¸0€î3~ß­m`žüŽ«Ç´5ôÛåõÀÌïT”ßf6Èó—©W'¶´ŸÈN§ÓŸhùÀàO¬z»ø—û¿ýøø~>˜S1+c_ä†×ÂÍæ¾½ñþñå">k¾Qò¥Ð×ÇñeÍ7iQë{¨Ì‡ò²#*ç;Óô‘¸ŽéŽkÕ´¬Éê 7Rä»á}©ú +-Öí~ª»/£´=Tó+ÓèT”NÂkýôC|æÐ~1ß#Bë§(ñ7¯÷s꣠þˆÿøýåú'Öð„ 4Pï Mß"/dÍh÷6Ü{”#,Ÿ :"Ïþ¡Ó¨uŒÌ‡×í½º¾ˆ°žÇžv,l‡;Ðãö© /1¸cT9î$¥& ¬©úL[tßÓ‘šÍ™_:ÊÜ œüÖŒŸê·¦§ŸÝ»3G~žùiré·Ì ï±²áãóCmâòχÕ_­ôy?bÿ ¨¶pM{Q¡R/qÂÓæÆÅ^üÞ?1>~{¨ð‰ ¾®ñÅl—ŠÏ?ÊÇ_GÞfŠë{;߀¯ã&P;Êvà|¦é#ò„;¡Ð×RM(ª/(7ïp1nÛA/h…åìöÄ/Vï’\ é÷~=ù©Nü è7VïáÛhê].>îÒ{çø¥­|×?F% Àý? :ÀÃÒÛ‚Ëáq,^*ö&„%šðaâÓšcÍ{ÀZŽéÀ‘oË._zеÅèùVY¾íˆéo;žØ—ݺÝA4W¯¸¥ÜW{ãs,ûÊøé $¿½*ý@A§Îü<ï~^ùùƒ?ú±ïá’ôÓ™ú%bÛš(¬Ø>ÚíÏοÀ¤¿›4 +-hh»¾üñÑù33ìÄ£^ã°7 Œ›½†8B|eÛóåë„ïu¾Õð…ô¹”ïu°õªåCk}‹4Á¶#µóõµ¯}€¦;$àxÇP’â¾VUA¡œ/,ONbíé×ÛC âÝIo`þ¾è·ý{Ðì‡a«ßhí/"¤1}Ô~}˜óWü׿Ûþue˜“ÆY•®D劧}e½}õúïeÆ7ȧ¾G ¾pø +-HG£|ïø©¯~Üù|tíÀe#Ú‡†>ÀŸÝ¡ø|µ y¶>Fõ`ö&Ü(¿Pïn4?`ˆÞüEÔ È:Qûm8ç +-ûóÜ‘Oæ“Ÿeø´Í¯v|H©ÛªúÚÈ’Ï¡ýí´·c~H5öÅAŸÃª&€WQ†1ïàºì÷qêÒknò»"‡~T{Tá»…TóWâ{¬ƒÚ­?µíUo'VÇ?7þï€.€–S€H@÷€HozÄ£¯|â‡^x›; ÎlQtï ¾¡÷8`ŽLøüÅײù: ßeˆ§/P·uXJË7¹Ú‘›oÛŽ˜Ç·Y.xéùŒ¯¥‰š"ÍîØ%´&Í’—ú\룻_ò{¦ÆUú‘®6?rÛ¬MŸt*‹?cçgóV'©ýÄ øàûÓ„|0rþÅÿQäßÿ}V Ø( <CßïdÔ$bƯ<"¨7¬¸Çç^_|ŒýÏw4òý7úÌÞº¾‹v¿]ÈŽ½ìí‹q‡™¡&ˆ84V}G¸ƒbMí*·>ÞŸQ}%BVîWbV{4ä& ú9ø#K\U„ù :îïÿ>Bý•ØO©©ˆ¿úüMBôþ·ü_›i D6`F‰ô±/íE8ñ†G݆«7oÖK…¯æ=ÖC¾:Žùfá£I¾± O;èçC¸·óÚq„¾Ô@vƒû.(}1о)Ï—¬pPï°J_'©ë³´sŒUÁ{ _Ó»éë±ÛñçoÒ;¿ì=ìé'±ßùþøí—YýãÔ>ÿÕóƒ ˆ @ 9nf¨qI×).ˆÝÕáüè1;ï¹7zJë 彃/’jÓÄ›¬áÛO×u@¤ú0UoSÚáFÿ²™oçdߥÙñ }nA}cŠ>ßm·CoùŽÏd»üV#>õïíîNúí»›³™%ýÒøèz¬~í'o©¼³þêò!;þ„`çÑŸ8ûp$@®PB T àq>¹‹ï +-ëäˆ`¼Kšª·±—êž…Oo÷íø"°ó)o|ÇðqMÛ.ÖQV›Iø­ÚÞÆ1_Éè üå«{ pÓW=çXÏnÙeôUîQï‹«/8Xo±e(Òo©=°{„ŠúÁ'¼ «SÅ=ì:Þ’yoö×ÈGÇûG’¿<Ùð_ŸÀà@p¨‚¸Cpà Y÷’×°wñoä@o!z_õŠØ£‡#2ŽÎ½¾ +- +-óä9}4ìÊæy¾H;¨!ôáÛ±«Ö¾rè#¨šêˆÛ@õG},’¥?Pú]ÓàN~.ÙO²ü]â ¤Ó½‡ÝYé`üuó—¨#ýµ÷A„ôùQëÀI€‡TÄ€y!‚ÛLYç[œJãzW3Ro(Ù Þó„OíñÙ@Þ+KG*|Ö¡£Ò¶YùИϷ:på™—¯£ÚáØ|îv4Ï9û +-Eý¶²f@}bïP{_ùÕ« Zô±uY~F9 íÁ‡=Îß=Ðo’{²ý¶ƒúõÜOÊz ào•¿ +-¼ô¢ý•Ã¿À‹ H+àA ¥g‚ÖêÌ}yHÅ\<Û±Æm³éÑÙÝÓdõòø>߃\¾šø¾Ò +-Ÿ òuŒÇ|LA}ß‹å“ }†n$¸îˆwgó²Ýñêâ—p´QõQ_1òê|ô+Ø ï~ïÝzRëò{X»€>–úËuEü õ×üãÏŸKù/¬ø° +-p.t+â , ŒŒIJõD»NëƒÆý®,ÏOeï´§ä [k/•oŽÂç€ø:ãKË61J°ù2ìÈRÎg¯åëµÃ†ßèsØgÑ•¾?tA4Ý!RŸ´õ¹úp{ :ý8®Kù…²ðÇOïñ^¶)Æ[Åï¡ÞŸÙø¹ŸË¿ŠÛ[öÑØ—€û¯et0°G°Jp:B?„$ñ7ævÝ8Ó<^½{j÷Ú{|BïÁbŽü&|ö|³é ˆOD_j%æËCÕ‡{œv¬ûy;¢Á=pG0µƒ1ôYM}´ý>}Öµ—³—Ÿˆ3?ö=(ø“ñŽ<>œ°¥þðù ÷¯Ý>äJò_  î¿àÿ *}içjAÛ%`›fÉp|ÈwMyPz;Í{Ú»±†Ï |«>8±ñ)PòQ^>~óÅØ¡³Ö>­ÅæS¶£Œšißá]w¨÷!’}5)̤Ϫ»®WäÛ¢_GiUì±Ê§~Ä{Ti¶Ž{pùö“!›=¶î·À~ña¹ŸÙþ5RO@ÿ=Å¿½èþ³ $ThH!¸Ã­j |]NáÕç¡êÍÙ«›{z{™øÚï]òMŸËâ«óUó=è+ÊíÚ³úNÝV1ß"ô}¶£Ó;û®BŸ–êGÞ‡]ݲéwú»©fñ¾­~¾zýåÞ‰‹|dÙ?|3î?·þ!؆n@´@΀à·/(-ß…û”«TÑ O†çQ™j/0ì=Rãc©9ò¾-:úÁ|Б)¾Ñ:šO7ß»¾ äÛL¾<Ð×ì|wìeó™k5p¦«OÌÜ'S_ªÖôK×üîcø+i˵_Ì•“ncèof?ž|ÈG?ÿ¬ú;v!õß[ ÿö°èH“ÍNÐÍ¥:pÂËÎãêÙKíÉ®—ßkàÛã“T1‡Ž¡#›O›"Ògl¾³úrM$»B_d9rû¶1:ß­ïpg™Eæ~aú¥æGh7¹ÿå'u©ÑOB™ëüßß"¬ø“¨Åçÿæ_•ÀÎâ9†¾‚–ƒæb;{}ø6>x½y~zpö^÷ß‹ +-ÝË—/6tç³Å6BôiÏæ³ëCZ–oúíRQ Á¿–D¼_ñ¤} éYÆ´[Æ&MÝMÐØð—œí1·ýýñ´_#ú×È}ÄlòÓYظ\@E“Ú6A±ƒD… §I³mŒ#È£ém×cpz)ß¾ÞÆ—åÓÁðEóµã[Ò·¶ŽÔÑRGg}†Kçs´ö˧¦/ä¥ çH×»ò¼c9G¯Ùëç~À(?é”{ôá]B?äö¸Gúós§øÈÞþ±èoºé©üã !ð…€ +-.ða €àdЗÐTÐojWßìð@ó`õæìñöž÷lølÇ×ʧå„/c|0}&ÆÇ«èög¾¾?ôݳÒÄaˆNøZǾx|z¬Êö„¦¬¿=þNÕéNíWÄýJƒ?8¢Ö‰Èó/ðŸàiE)Žcठæàf¡àñÕÄ;©Bî$ä!DoeÏß½>«k|blø"àŸéã©>º²#úÛÑ5Åê"5]à?û®¤ î8×ç½f{_oýߌ?Ò=0µG:µò{L±_OúQf§@÷K—èþýÒŸf½?¸bó_ ¿ß€ ºî@œà¶A‘pvhe"¯þ°“ÇÇy´Í³,zyîõíå,_œOh|mCÛdúŒÄ|ßåKG¾¸ÐDM>iô lí|¡Ù rÒ¹;ÄÑ@Ù‡±µcm5»…IøÛöíxŸðQ…‚þ’ Ù›âÑÓ¾ÿ{òïâ©< $!\·ÚÿlÒ‘‹ sÞ¶z˜½›{|î ã+ȧHøbñáçSPú‚¦>iØ1EŸ±v«žóyÊãŽLwdÍú},úM/oÌù8?Å[k? >8ÎuJý—,ýõö‡æGxúØÉÿö‡€.ó +-´œ4 ².âXo«9Æ`»Nóß–±íP~ö¡÷namëO³H›¿à÷ð±_†.œ+~Ë|à»ùÌÿ?5ý`åÿÏ `UÀNàŠìpAEM¨›'Rže·‰ô]Pž,éñš÷Ú¸Â÷•‘cqðA8|Å ¾0qäK\L<>¨›ëƒBÓŽSó1êÎçÒ¾š`>öÞ7AßÒ­¹9 GùÀ¸Ç˜ºŠ¬¿¿ûÚUGþä탎ï +-? À?C2™ÿ= > ¥@é@• \ð4ÊÛ‘_¹õª/<NoÙ¼Ú»ïY|Ò|/—åÐAŸáø’Ù&Ò×NÜvÖçy¾ÍòI’°J>¥}ìà¸ÃêË·>ÚWª/?òņ?‚Tì÷OýPõôÕꊿ|´ÏßáÞõüÿ³"ÿÀýk£ú/\ “ $$ ÂqÁ×MhÍV»eÕCó])ϧGvÞôL÷æ{š> ø¢ðå{7ð…Æ×Tòi+p™‰H>ñ¡ú@Ñ>蜷Æ|ºçnß3Wîÿmôµá¯ WxûÒ¯…èØ{Tþþøû„§'}ôã{ïØ処\ôÜL@€À‚ËUЖР†®/º…?^DORõhéîïÁ>¾Ÿä“,>Žæ+¾QlÖÏL¡™ë‹ Mh™ï¼G¸‹w¤ý™»ßQ>‚ñ'†§ãÜ¿¤{[óÚ_—uœþ¥ˆ ¨P¨¨!B)8×ó»+1€=BQõæÒÜ›Þ q¯úËÇüè@ŒOβ-WG“u˜¸]UÇïP_’˜fH$Ñ·WO_Jk=l­îˆÒçbðo(Û¨~©÷w\òºùX'ÿÈ|o:öÍ¿Nö¯ý¯× ¸È!øy*¨ôíŠ:É=^BOQõø*½ñ{#ð!Äø&áë&â‹Œ1|}uë(p»gšé©¯ÖçÓÁúÑ ‚´ö OÚ«îaLþ`”+8†¾øèO>py>¢þÕ$î þgñrê_výƒ0 nø€Ð‚–‚‚H8û‹ŠQÇ«èaêm[ÐÛß»½Ö»—û¿†¯G|]f¾:ùÓ7•ãK¯ù¼ª]ƒ¾4¾­gÏgÈ«oFçÀß>÷ØU®¹JõGëxyé-G½3ûgÙ–ÙaE? +-nÿÈt‚3rï4ñzƒ… €/¡§¨ÇoÐ߀ÊîµbŽDòuˆoôù.¾¡ø`T™ò…Ûšu}(;€Þƽ ú”7gNŸ¾æ¢‹Þü!ùÙØzÁúóãï“Þƒ°þ ùËÙŸ‘åÚþ¥PP(c +-LÜ jƒª ¥ª_’É“ÐCÔ7çµµ,á=É{qs{¥á«‹/ié¨!_…¾ù)_“:hõ™½ÎçÂÛT½–¾0ÀÁI½”ëú…2N7ý{|°ˆþrùðᯊÿçƒ÷O“?ô^ÿ©~îOÀ‰@¡ù@3A± wé 'Ñp®)À9Áã̓ӛ®ØÛçž4|f|t(s,í&¾GÓ}æ{›úˆC_Áj_Y|~Ýøäí[ÎÛöò¼¿ÍeüåæßxTù¿Vûÿ”Œ 8P`µÍ˜à„AD„Õy¯´Œ¼„ž¦ÀÞÆöÄ÷ +-ðI¼×s$Ὀ/›ãC§Ï²ˆÌvžù*v0p>\Ú¦ùÄöÝ©îøŒëo¿_xEíkïñw‹ù=nú³áÙýDdÚ?µ}TÛgþ ¶ªÿM¤[À™@Õ70'h1h³ à˜ŒT^jþé­ÙëÌ= |âøì7GÛ{UYÛ²Òa‘}Üž@êÃZ¾ ìXÅÛÇAÍü÷‚ûU°Ï~ý†“ëþÍéïr?Â?O}­>Èí#âøNiöWôp€zŠP+Pˆ!¸)¨r0gßXϸìBä)ô˜\ÞEJϧ{[à“ãsäãø9Zò:}„uppÛ»ŽþnûþL«ÎEßägî˜ +-@‰ïÏèփȾǭ +-€ß@Týb|$ìGÕýp‰Èô‡ú?Rÿ¬þËa$ð¨=0$hnPœÎõµâàý»¼<#=¾Þמúp¯ŸÄ÷zùªáÛåùÎSø$}¦òqÛªô|ÜâpǸëöÑ^|i]W×½çFÀtúIÿËù±Û?T(Ô Ð$ê ¢ .BSߎÛ]Ÿ +-@òÚèQ–÷ÙãtoƒÏy|ºsԽ׉#/šmÊôU×áÙÞúØšo¬,ŸO|^î¿Ê*1ëï®< ½ÕûW ¿ë> þ¥óEÚ3 ¹Àú@5A›AƒB6Ò=Z–ÑZïJæ¡ô†ë¥öDÕ«ù½߃|š‡¯X Ï|^PŸñ Ùqz1Û·D;nà÷ü¥©êf­ïqͼmü¡sî÷ûø÷Ñß™æO7f€Ë^] ¯ Ì!H/¸!´¥ï©ò1ûÉ»âA6=ÌÞ€{ÈÀÁY=]|ŒÉwçjùªO5é|äó&ûÒaÐr&¶ô÷lI . +-VXZ\_acehjl|œ½¾ÀÂÃÚïõ÷ûö¢ žœ|zxueca 79Z\^acegjlnqsuš¸¹ÄÐÑÒðôöþÿôããâÒš`^\ZM7 \^`psuwz|~òüþüüûæÑÊÉ…ƒpnligeb`^\YWUS-,* UWY[^`begiŽ³ÃËÚõúýÿ÷ýèÙØ×ÖÂÁ¿½¼º¸¶´²±¯­«©rpnkigJ0/-+* "#$iknpruwy§µ¾ûýþ춫©§€~|ywtrpmkifdbGIprt…‡‰·ÍÎÏùûüþûøõùúõòÜÅ·{ywtrQ 1Jrtvy{}ÊËÍÎúüýþöôùþÿúòîéÀ}{y^\ZXUSQO-6tvx{}€‚„‡‰‹Ž’Ûïûüþúòññøùõíæ›™—•’Ž}{ NPRT‚„†‰‹Ôüýýðîñ÷þýûï¹:91giknp„†ˆ¨þÿýøûþÿýüõèÒ¨ˆ†„  +- +-†ˆŠ’”–ªÉÞñüþÿýüûðüüû𪃠+-moƒ…ˆŠ‘”–˜›Ÿ¡îññýöêçöùüÞÉ¡Ÿ›˜–”…ƒ€~e…‡ŠŒ‘“–˜šŸ¡£¦´Üöûòìçéðýñ£¡Ÿ‚€n) +-&MOQS}‚„‡‰˜šœž¡£¥¶ïûñæþÿ¥_]3„†šœž £¥§©âéíñýþâéýþÿÿþýñ©§¥£mk8#+|~ƒœž ¢ÁáêðóöñèßüöêáÁ¿”’‹omjhecTÅÇÈîò÷úýÿÿþèßûȽC}Ž«»ëüþÿÿþýûøâÚÞáãëûýþÿÿþüò뻨¦¤fd42$%\^ac“•˜šœÆÐñýýàáøýþûÐϬª¨¦£¡ŸH;0FHJL•ÄÆÈÊËÓ÷úþÿÿþÓÐêüøòIJ°®¬ª‹ljgE!CEGIikÂóüýþÿÿþòãÌ×ÛæíòÂÀ¾¼»RPNKIGB–˜ÂÄÆÇÉËÍÎóùûüýþÿÏÉÉÎù÷ÎÍ˶´²“‘ŽŒ‰‡VTwÄÅÇÉËÌÖ×óþÿÖËÅÅÅÅÆÇÎäððÿþýü÷ÎÌËZX’•—ÇÉÊÛüýÿþÜÅÆîîÿÛÏΊˆvHFDB &'TVY[ŠŒ‘”–¥§ÎÖ×Øàöøûÿõõ˽½½¾¿ÍòóóôõõÿþýàØ×Ö‚o  >@BDGIK„¢¤§©«ÄÆÜõþÿÖƼ¹¹ÐèéþÿüÜÕÍÌÊÈÆÄ‹‰vt, +-=?ACnp‹´ÆÈÉáýÿòǺ·µ·ëìíîïüþÿûøáÙØ×ËÉȳ±¯­žƒus<,<>@BXZmo—™÷ùÿüòÜ´°°°³ÁÐù÷âáàßÝÖÅtr %;=?A\^adfilnqtv‘ ëúþÿûØ­­«²»þü÷ëâáàÑд²°®Ÿ›{yvsqJHF* !hjmprux{}ÅÎÏúüþϯº»ÉèÿþýïëÏÎÌ‚€}zxurom„‡‰ÑûÌË·¥ª²Ñøÿþý÷ïêêéè˵³±¯¬ª¨Žfd=$Jkm†ˆ³µ·¹ñþÿÿèçæåÔº®¥ž£§âãäæçèöü÷ñÚÐϤ¢ŸecIGE)  +-68:bdgjlort…‡¹ÞîýûúúòéèçæäãÚÙ± ˜™ž§§¨©±çèéðû”’ŒŠqo#Yy{ŒŽãûýþðîíìëéèçåäãáàÞÝͶ”’“”š¢ÞßáâüûíÓ¶“‘ ’•˜šíñðïâáßÞÜÚÙ½¢Ž”ž£×ØÚïô‡…‚}zwu<('%I—™¨ôûýìëêèçåäâáßÝÜÚØ×ÕÓÀ¬–ŽŠˆ‰Š‹‘‘–°±³ÓÕÖØÚÜÝêëìîùüÿþýü壡žœ†„fKMOmoruxz¶¸ÎÐðôþûø÷íÖÔÓѾ¼»¹«ªƒ„…ˆŒ“¥Ôíûê굂€bTR -.0=XtvŠŒ’”—šœŸ»ÌÍ×ÿëêéçæÖÔÒв–ƒ~€†ùïé«©™—q?MORT†ˆ‹Ž‘“îý÷îíìãˆ~yz{ÉËÍãûþøó˜–“Ždb_E$#9;=?BDFwy|Ÿ¢¤§ª¬®±³µÂÄÒÓýìëéèæåÃytuv‰ÉËÍÏåæèéüŒŠ]PNKIF&Yo~€ƒ†‰œž¡ÂÔãáàÞÜÚØÖÔÒtopqwƒŽ›ÂÄÆÞàáãåçèýüˆ†da@><9UX[]¥§ª¬ÖüýþåäâÐÍËÉÆı–”’ljklr½¿ÁÄÆÈÞàâäåçéêþÿõò§¥„‚USOQTWY\_a{}”¤¦©«®°åôÛÁ¿¥qhefghjns‚ƒž µ·º¼Ûÿöï  `ce„‡ÿèçÛÙ×ÕŸl`abcŒŽ­¯²´·¹×ÙÛÝßš˜sec`]ZXURP(&$"!ŸÕñøþÿøàÞÜÚ×ÕÓÐι·h{|~©¬¯±´·¹¼¾ÎÐÓÕ×øüûøÕÉÇÅzNL&$UWh’•­¯²äðýëÚØÖÓÑÎÌÉÇ®¬©lkjjXY_e©«®±´¶ÇÉÌÎÑÓÖØÚëÿ÷ﶪ¨pb_]ZWU,-©ÏÑÿøçÛÙ×ÔÒÏÌÊÇÄ«¨¦£ žyd[UVi«®¿ÂÄÇÊÌÏÒÔ×ÙÛÞàâäæçÿå !sÞìôùüýÿþÜÚØÕÓÐÍËÈÅ¿½º·´±®«„‚€pnWNOPYprŸ¢º½¿ÂÅÈËÍÐÓÕØÚÜþóëëêÓp&z”–§ÙãùñèÝÛÙÖÔÑÎÌÉÆÃÀŸœš—€~TLKLhjk„ÀÃÆÉÌÎÑÔÖÙÛÝñùôðÃÁ¿“fHFTV°¾ÀÂÄüýþøãáÒÏÍÊÇÄÁ¾»¸µ²¯¬¨¥¢ŸœJGFGHNcˆŠ“¬¯²µ¸»¾ÁÄÇÊÍÏÒáãýÿÕ¾»¹Œ~jgVTQNL0càýþÿîí¼¹¶³¯¬©¦HCBRceuw¦©¬¯²¶¹¼ýÖÕÊnkheb`ruxÅ×õðïîìêé×ÕÒÏ°­ª¦£ `RLD?=>?@EPWŒ £¦ª­°³ßÿýüÉ—f  +- be|‚…ˆ‹ž¡¤¦þÿÞÛÙÖÓб®«§¤ š†n\PGC?;:š ¤§ª®±´¸»¾ÁÅÈËÎÐÓÖèÿø×½«? PRcf”—š ¢¯Øåüøëݼ¹¶¡žš—”H>7NV`bdg“—šž¡¥¨þþý§f$ DQSVYüýþýêèçåâàÞÜ·´°­©¦¢Ÿ›˜”‘dF933;Ny|€ƒ†Š‘”˜›Ÿ¢¦©­°´·ÑÔ×ÙÜÞàâúýÆ°£¡[Y!&JZ§ÓÝäÿùðïíëßÝÛؼ¹¶²œ™•’ŽŠ‡„€}zveWU?30017FT}€ƒ‡ŠŽ‘•™œ ¤§«®²µ¹¼ÀÃÆÊÛÝßòý\ZWTQO:8641/-+[°³µüÜÚ׬©¥¡žš–“‹ˆ„}zwPE7/-/1ACFH\ÓÞåüýþÞÜÙÖÓÐÍÊÇÃÀ¼¹µ±‘vsokhe/.""$6^adhkorvz}…‰±ÇÊáúþÿúîííìÙÇÅÃÁŸPGI]»½ÀýþñðåâàÞÛØÖÓ·´°¬¨¤ œ˜“‹‡plieb_[EGJLORUX[^beilƒ‡‹“˜œ ¤¨¿ÂÆÉÍÐÓÖØÿøȳ±•’<:8531/  +-Mx{~ÁÃÅÇåûÿòÚÈÅÁ¾º¶²®ª¦¢žš–’Ž‰…}yuqnjfc_\YV5!#UX\_cfjmquy}…‰Ž’–šž¢¦ª®²¶º¾Áùýÿïîا¤ZGE7KMPÏÐãüÿßݘ”Œˆƒ{wsokhd`]YVS. %*J]`dgkosw{ƒˆŒ”˜±µËÎÑÔ×ÚîïùýÿøõÐXVSPMK6 0LNýþÿøóòñãáßÜÙ×ÔÑÍÊÆÿ¼¸Š†‚}yuqmieb^[WTQMJHEJMPTWZ^bei‚†Š¸¼¿ÃÇÊÍßáãñòóýÅ©§¤¡žŠ‡KI" BDWx{Ÿ¸ÄÔÖ×öùüÿø÷÷³¯«§¢žš–‘‰„€|xsokgc`\XURNK*EHKNQUX\`cgkosx|€„‰‘–šžýúß×·µ²°Ž‹ˆWTR&HJ›³¶¹ÇïøýþÿØÖÒÏÌÉ¡™”Œ‡ƒzvrnieb^ZVSOLIFC'=@CFILOSVnrvz~ƒ‡Œ”™¡ÉÌÏûÖÄÂÀG¼¾ÁÃÅüýúâàËÈÄÁ œ}ytplhd`\XUQNJGDA>;9;>ADGJMdhlpty}œ ÁÅÈËúúúçÕ- +-~ ¢¥¨«­ÂÑÓÔÖØÚÛøúüýþÿäâàÝÚØÕÑÎËÇÄÀ–’‰…€|wsojfb^ZWSOLHEB?<9742"+-/1469BEHLPTW[_dhlpuy~‚‡‹•™ž¢¦ÃÆÿþ¾¼ºj3 $T‡Ýûýáß®ª¦¡˜”xtokgb^ZVRNKGD@=: /14GKNRVZ^bgkotx}†‹”˜ÊÍÐÔ×ÚÜòýû㟚—/<>ŽÃÅÇÉý©¥¡œ˜“ŽŠnjMIF0. $&)+-0358:741/,* !#%'>AX\`einrw{€…‰ŽÅûùñÝÑžƒ€0 +--E~¶¸ýþ¤ ›–’ˆ„zvqmSO $&(+-0369=@DGKOSmqv{„‰’—› ¤ÉÌú$8;=@Ci ¼ØÏÌȨ¤Ÿ›–‘ˆƒzuqlgc_ZVRNJFC?<852 "258;741.,"$&),.147;>VZ^cglpuz~ƒˆŒ‘–šŸ¤¨¬ÿþúò©HF ªÒû£Ÿš•‘Œ‡ƒ~ytpkfb^YU0.+(&#!!#%(+-047:>AE^bgkpuy~ƒ‡£ïÜœ™–“M{øþ‚}ytokfb]YTPLHDA-*'%" ADHLPUY]bfkpty~‚‡Œ‘•ÿö³±ROLJ hk˜¯²´×Ùùjfa]X@<962/,)'$" "$'),/269<@DHLPTY]afkoty}ÿþûØq:8&(=@B­°²õøxOKGC@<95&$!$&),/259<@DGLPTX]afjÞ²°­ªuƒ†‰³ÇÜóûþ‘\.+)&#!!#&)+.258<@CGK»¸¶|CçðÐÌÉ1#&(+.1GKO~­ëξ¼« +-?A§µê󭇂~OKGC?;841.+(%#   #%Pkƒ›Íþö²¯wtRO>:<¤§úóâÍok< +-ƒˆ‘–éëóûüú÷µ³‹GDB'%HÑãê‘5 +- +- +- +- z~ƒˆ¥©Ýßíûÿ–¬¨„ÔxR‡hF@À Âã(}°ú€F\N¢jT +-ÄQ£ „ BƈˆŒÐéÏÂCcìS»›œooºÊÀ›}«ã±¯@~ù<Úéw+–ˆ_¤çyh9TÆcr &¿­7àÔj^T­¶ÌîiU(Ší¾ç—HŸ‰PJ)·Ý'}{ú-ÀoÖ¼­k‰K$â6à¡–žM‚,~Å}]¿­à}I;þËÊ-‚´Õj¤‚ñl-’29%¼¦_Y­  T‘fÚ«°Ì~/°9½È环%ågë‚‚õMÄZÌøÉЂò¬À©nnÌ Ö¾]~KˆîOo’R«ÞÊW>ï}õÈÛ t¯ÉŠ®“¢d2%qö~•ûbÔ§ý³½ãûhSý?bÌw˜ãQivy²É¤?Üß®ßVŠ“¼Ýwv¹­>m%D«‰èft¨š‡ž}JÙdã‚Ýt6…_ÉDË?|õõÃa€‡à ?x½Ì—Ngzp¬ŠqÁ"iâáìËì{ûõ¦¨seД³f?ÊȼU_uå( 5Ôg»w”_H-7XßD+ëk`gØIà¡ŽÓ‡W}XÆ‹ÿ½¿B5úur"Nr”‹ÓÞgÔ#ë¾rÓâB«×Ån•—Ÿ?# ݃*åíMìiò³„àxðîÒ÷ÕwߤÅ}!ÿ_þ?'Óû¤$¬¬ç¸PL®Gí˜xt­åiŸtƒžÊöe»ÒãxÜß~ßÎgµ8€»±.%K@³ì;bå~í„·:p\rÖ—ÄYß–»;ÛÁ]âëçUq’Ú}²ûuþpŠ9Áo¬»±1—ôxÒÊOÜ-ÀJ­hOenæ'ìæqKú€ìGiPê»:7$TBsŸwVüŽWH‚ñ`¦Ýç÷ý+°” ÊJ%Z™ ¿ôI¿’ǤBhgkSg—T–pr¯ÀÃQIvã÷}ùU7]+œ8;îŽ×=@[³ÌøÙX[xzJ@ž;N‚‡4‚EÅزw~Æàgпëï–5Õ +- nÉ&ࣵTÞ†ÀÎ}„‘«ÈFæ7B—¿[`0TÀ¶5\‰}ù÷T•»F%vChÈ&Ò±w|m}R|G-/·V·–Eò¼T_ûÅï:‚¿¸Ñ! 'uRwÉâ<»•´¬à'mœjÎJz‚vÓì´&u~ϱQx‡6”<8Ïà7¼«—”a-a+ø |sG6?€)7¿Øwk>> +-„ð0¾…ZØœSôòi}€Ëí4rÏÕ·øøÅþÞúõ‹â(•³¥­[ï—8]^ñ^3¼âÄ! ЭÛvEC®TöÐ6Ï×­MÈùÁ¸¯®ÌÃe²Š'3£{òº,¦>6`›PÊðtÇ÷®WÙØ–@ŽÇHö­ò³yÊc™´¸ºå¥ ûlA]©‚ $ ô@ú.ϦI‘{Ö)2¦³vѦ¡<õim—›.À£+d”$ _€§»×ç'F:q×ÔÛ—à§Íº_ §‡ vJƒ§êW~yoó[e囤ïá'égB¨›ó táªQ7£+ƒN‹¡-¼SÛ5>]a³¶¶lF¹ïXçÍ|Ê€Õ²O6UY‘û’{ƒ·>ê˜ñ8ÏðH[ðk{ï³èºcÚºPð¬›|ó¥‡Y¯'vråPâxP¢á Óóž` ñ|_PÄ7õüqŸnïí,Šñ+sñ@€nX‰ŒZVO" ]“ÁЃ®/2Ð\Ÿ:6ßñL,š£ã¾§“mBû–xS͘ßøjW³of–‚ú.¿£ ÚÔwúÖÐ ½o¾–Š%#ðëÿnò̃>›ÜR¿Ãp6N7ÓÃ#®L»ØÚŠÏ7X[K¢z¸_KÑ ?`•Ècróð—¿ðgà…WÛ*4ÿ9³&ƒÑT¡-ÚélöNiÅkãPÂ÷'ü:q~Ó•Ç«[É>„_~V¹¨OaeN™€Üvp:W—{€Ù´…¸½ø%dþ¬t£®›&¿‚dS˜ÉµÕb²i[÷0vºNâe=ÐÞ¬Ÿ@jåñ¢Ze›×e0*ݹýæñ +-¡áhùËá2û> MPí ¯ß€=« +-O;0e ‚O‘ÞËv8Ï‘ÕNÝשäM´o4¬”_xyÓ?Düµœ™ÜÆ?ϲòôËlr'åþ£íï@¹-/ë£w¹eRô ?ë䯕΃u݉ÈfRðËÃûèæANØ÷m¸¦…Œ;ïòœ +-¿+yÏ4ùÈ£Nº8üž™fßRDsCu‚n%™¬Ó™™.ð’Pè;Ö¾{Zñ²ýºÃ±ðÓ¤[_û`£ñ˜—}+(Xfæ ¬>Yi'ŸÍÔšôŽÃ¨¯`³ŽbN¹¹¥eë£/wÎlÂçXMüäÁy<%[Éþбì}N‡ÓÚJw§vË ½­H~ õf9'}ùù¦B"²È¤[ãÖ ,›¼þнŽyIHíA×ùèÖ[Ìúã’õÛ,*ó’#sie×{xgÜ6]ºi’}’_¯ûJ}æV +-Ë*#G‰_³©ƒ‰ÜÜj«®„Ç„Óg`} Oß_@8á÷>çA÷uG»â ˜Áñ>ŽÍDO6ì°g['—ü^wkYÜ¢~"ïÊÞs÷MŸy@èsŸ—k¨&{ð¨³>¯oIËv±M +-íä¯3Ða–~âÍÞîãfû…ÿ1½Âº:‘Õ}ÈJòÈOkc<˜¿¯Ò›30vfÙçÍYEGäÞuôð±¾1κ—гúUÁoÖW×Í*ø-ñ¾Ñ?t4?>ì– ë^òËŽœšª‡û>B̯µ*Ýæ>ý©IIþ@3¾¤®ŸCÿ¦§1ðÐF;ÝöÄfû•»ÇðÅ¢„H^_ûP#¿Xú‰CBAèð"ºy‡ Œc5rÛ" mÚo}É–{AÏÚ´F È E±ðÈæ§~9ãÄ”ô lÝ-v§§Ø~ŒòKU=ÒÝD†Aõh@ˆs–Oä1Q¥;²Ü·8˜Gú~ž¦JÊ3råPëït¯åé‹­PH_ì¥BÃxõ =tAúza9?5Õ™²8ˆLX˜<iíÓ-â±áM.ùU!ÝϯyVÍ“¾·gÒÓ×Æ©£8«¡È]„Gô½cI›Bëû[+‹ÇrsiLUŸ»ïÆò{¥ó` +-]wF øå2 „u‡ª­%åÀìzc÷|ù~H¯û!U=Ò¹DüuÃxEƒ"Ý›÷Ü—ã?'’Ò$ì­6 òöòw'¶áÁ!c›_)ï{?ºGA–]t×Èr Tc<2Šð;öÚG|Zq'óí#XE½\Š²ioÖ©Œ¾ãzÛV€r'ÏìXÃY™;ûf­­OV¶XnÑ«AðCÿ¯äºÛúÁ­°n!9=°Qœâ)v¯åÊÔ ©–Ÿ~­ì·`:~“v`÷uÐV ðCÊ8­3¬èyø('Šã$b–?C1‘Ý“ŸàŠD^)¹C¾ tWtÍC{ÓÍ­?ûsQ·ó¾ ¼çhKÇžAüèŠL¢|ú«îí䊞CÔZË´96¥uíÞòU±ç^*’Ǹ#e<ß7¦}‚q&â2û”óŽšfÕ\e®(÷Àʆ~‡«Þ;hÓÖúäµ²aDŽ_û"œ‡.%ø‰KoÆi‹ô`¨mKìÆ—+«­$è¡ÔˆõºÙX?¹ÊÏtÉ<M òLµÏXÉ£_fºEE®Ò¯1-kn =ÞÔ è›p95æ¬|³å­µèq×½n^ý©Ù¡hƒKçç‘æiÿÀ9]Bòà‚ÙM$èæ­üvÖÈ­ßUìѬ¥Æ)¡TîÁ¢³†³Óú²/·/à7u©¿R±îBpù<fb"NÙ˜vXôìèâ!¿Zü’µ|b©"Ý7îÕ—<¨áÉ«{#ùCJdêéYÈ™Ý9Âï^´¥_n%°øoñ˜Pï|­r‹4²˜&3ŒŒ5•½o:´ïø“üà +-¦«¤‰\Ü fõ•óŽ³ãÞ›MaŠd»³&ÉûP¡MÎZ_ïÓÀâgÝ”­é_ÚjF»~…Í£&=öË÷±ô8MkÉõ®ÛzÕ?|Ç É¼®’S0æBR²ÒÒ¹ÏÖ;ÝÆÿóëQÎuåQzJèÐrAl 'loø¦³õ“¹ŸzÇ›Þ/t]pp(̯6 +-4NžydRv~\ÛìØã‘æ'•¢eE:÷à`:“P7)¾;~“›yö¹°Êòh7pÖ‰r+€w¸ÿòw¸Èe‘KnÁÖç|r Ìñ+уómÝ…8E1NÂÝÓƒrؽ, ª°½Oz›ä÷? zÚï€Adæ$D¦RJ÷¯ydòЛîx&üF1;6žÔy,l”˜ªùÛT|è jþõìKCZ[ë˜N[° M!+g™øÅѯd²4Ø%ÕFЀŸ¸ÆÃm™ûÔj_§÷¥ü] +º ¸ÕFÝô‰E`Pj5»³¯Þ•¢g“;­7kó×büHŠÑQºÅáBÍ¿ÍÙsß}nºi-ñ¾f)?]ÑFGÚ4+ïƾVß!Bn šf69ÿË_Px°±¾år÷¹}!‹à˜‚÷íB§T;Äéʺ?’ -vdX܃ì ä'€œž(þðÛ‚ù< Å~ìM€â¾œä!H~ +-¬8öÝ'9Š› ý$·T•í‡Mv-x­Jÿ³© !<\·›Éú=kçá—"øIŽØÖÐÐ-=¤­»~œH^×”+¿5»]4 ²ÕC%•ƒw±6ÝÄB(Í£Nìí»—ß`_η=ø>ø'‰¤¢a°h“lÍ8!w‘Ö  ´_V³= îƒ®tYÈ Y*±òúã6Ù·dÈ#4æ§D¦W\JÀã`aÜ[³O'ÜJʽ¾ÏEVxð~G$•ä&a}–ÛhÆ/:‹<þu»rÓƒ¦|_v‹P}Ó9e?dxäÇg÷YVÔÒc Ôf•8‘æQðLwÉð‹œW´og+DNSEqÿÓÆ=˜$ÕÖŠ¬¢YW &y‡mñ˜ _ÖßA+‚Óäž÷$‰„¦²>½-î’9žÀÕ}?ñX+·Úü¶I±¥f“ûسOhé³9›f- VbÚô§ñC?øeNÛÓÃïû4Z·T±­†½ï‘”ü¯» ü¸bõˆU‘[—s‚“ßt‡°<(G³y¨·o¿uœóp1|mqZnÎð¶þŽ ÀОÔN©=µBîÚ˜F«nÄé5§¡¹†|I‚¢yRÊ¢L.“9ìà8ìkÝÕ})Ì]°Ý/ BGÜÀƒ>-“´-+wmefekxx¼ýŽ¨¸¬ì×úªQZîÆV°Æ¡† gÆI]Çæ¡¥Ç|ßÝøq©Ò 7‡ÖÜõoÙ“Zê¶ÎýôF¼äwrŸUÍÀÚœò˜¦~ÒWäAñwØ¥Þ%ðl.Tè‰ÔZÖ)]ªÏtrªÄÉé¡îËð êfi‡!ÃPÆvZ¯zí,]ü¼ñH݈î{“Wû–’A6 ÏÜ}Ç]@:ô ¶†Ýx!·Õ7fµÿ»RbÕ‘{¶ü6<ˆÿê¿£~ÐÞ‡ÿK2Ò Ó'‘ŒÝS³ãtP[û*?¶µræ²{õ¨ÿºa§Ì_.·;ZB|²Öhóhª†YpWúeë†ÂuAv*'€9 LVzJÒ}ó„œgÈZc$È®o }®cïÔfåyE¹ñp@.¢¼zc±Ãìs!~X9mfö“Z6UHÈ‘AÎã@ã~ƒ±~wð‡ä6„cŸÄÌêô§Ü"šÕK¢_Ò;œAåZgýí%tÐÐúf}q»†Ÿ‚kè¿j›Guz |ÄnªÚzòV~áçÑÛ=!œÜGÌdc(í·<%”ÞWH—a#z৩»K‡7ý¦s«ÞÇ:hC_,-3à}R’} ö{˜um›t»¾iÈΦÏàlÞ‹G¨E2~…±zŒpfDpì [ühúRK~Äx´ÎíÝ'€›ÊÈyUø5©¶È}$xi™ÜǾͪA¤Ü‡Ç¬/'Å !ú+-LúÃâ~€= Ão8TK5³dÿç•ääŽÝÌ~ùŽ_Ñq JGÄ@¸¶OÆnßZ„º¥ž~qå°Š'°%9¥9§{µÖcÆ;˜&ùx´®{;~‰gfù*ÌØ„*Mä‘䗧↱z—{ ÜÄBAU 8ÄxAÖ2Ï ;wúõ}G¦}iæ+®BsH` ]àaçMîò ©¾({fEÔlrƦA䎡>ãß‘YŸKìb\³ÿ5²pao«B«…ô¸éÖã8J\vb­+y%ùåÇ’~MƒŒYÌý"°ßcͦ¦fU_uêˆZÀ»²~ ¦Eȵ¤`š𯆰DŒaßËòæL„¤'ð±a£#ìÒ£°FŒÈzýH(ÅÍUwWC†ËìÒ[4ª‘±‚Ÿ“¼«šû6L…t_¾ôÅÁôÁ£€lzþ÷·5ò!·«>Â9›¦õŽ÷á¡ì¬Å›umÕ¬hË}Bá>q:3NKbzxU}ß(ç±uœþÕÖR±XRòƒv×é¸uD¢ÇñS¿_tçÇ»ÇöïÉév…Ó}Y¯_Ⱥþ_»a içòl"þ»›_S/›t°Ët6„­˜XÈIÀLòŽ2$ eZÓ`5¥>vKqPSb#ð…¬-ž0M¢RlP9û’ݦí¹{_rÑ}¤ÐµF¡@pð ܽÊ>#äVÒ¬pÎj›¶ã­“MØs´é¬ø‰`En¿ôàÄ•=v˧¡Ú*‹ L~+}ß[=¢ŒªU`õHð#¼Ø½µ_Îb)qx©7l¢u ~ 9~úÚ›6°«e¢®ÊnÄTbm#M—v ž°}땃Ð.¯”æ°Aõ¶ú† Z€ºlÂQÝ•žŠcf:6ÕÆÑ„ì ¾ÿܧIT +-?£÷î³’ÇaÓÛZ‰™•ôÞÑ£Y9OdÓÂÀª¾1侧Y+@¥2)÷¶ð¨Vë;¿$ +-1N=¬»ÿ<ú¦GJìÖ¹mkQ ù9¥²[×ÉËfToñs½õh?¦ï'ŒËß_/~ýÔOñÁª÷»ÙòVD0ÆcâŒ|­ƒw1ÝKÏ>n.r" øTÞÖ§·Öì®™LSØ$ÜåVly¹q•;‚»ÈÒ²<‰’Š]X?6ëÜGu~Ž ĽO¹emŒãHÍJ‚GVÆ>6«ÂwL#N‰Í¤Ü~GxXýñZ_ „ƒÃzI3 v§ü›‡Dm¥u§,áW¿­rjO®tœ!— »Ûƒ_5rÂ"È.`ó;#øu…óÄê—gú¥¼Œ Þáý§O 0r´â¸¸t©w¹‹W^»;¢»›ð¯Åia‹ƒ~†V,í‹IQðJ“&òÕqJ‘¨ôà°Hû~¹/>¿(~&ç/*¼$rß÷©ÏKðˆ†·áu³JÞ¡YYgS ·õ‘Tàwª&½7½l¶/-üήē)àGø5lÿ>OâÇH öý\Úzô·x +-2nØÐÕ•Gu«jç1Ywƒ§ß]?1–ÓýxUò?³ÄSÐ:­t^c-G-WƒQsì­•ò‹ Œçf©[£n-kœØc.‹/¯)}ÑŽ“yX¸Á D5øû<¯¹—üZO¥üêÿ¾Á£§ºÇC›Õñ³ïŒfÎ&Æ òRn6†ÞúbøûbM#·ÆÉ©ËdSÀî¹ÒÀ¹÷-ÿ}[øùo+Fäôd·ÔÃ`±¾ßéÔtWÂsé›Ðok)ÎŒ¢ÃX$䎂Š7>W7OØeÓ¼V¢Ì¤J\³‚® wwÄÿÊÚ÷¸bõMn¦p k²å.ÜœÇ +-¿n¾þŒñ³`nJsñè³Ï@iMú¾7÷]¿êm x Ï_ªì³-ØW§ù³ªb_TöFxh$÷”ñã!ÌܺÑô˜m[¯º÷»îU…Ÿ´#§%ð¥‚0›eî$¿ð§yHïÛNI·ø¥óå¾ýRQGO1hŸxày8•‹ŸEÿw\–%È “eŒ0$ËÄÄ/$r9,´âN<‚!jÒ"NÛ'rF'¤?Ðcü°ñè¡î‹sÂà|MIÖ§"÷qË’Öp)•ñð5k}C•MÙd³ºÚšŠÌq ²ᬔÙ4‡z‡Lx̘õ“$OBì&=|aÁb¨ÞG%ÊOº÷ÕùmMƒƒ6Ns‘“œÝþ{›¨+jPHün% ZÝ´{rjÇ߀¯}®~yù½Äþ{Z˜‡k‰ ɯ•=+Mô× +-wYHåüò½ùñZre‰´zþŠ9”‰4åѸ€‚ClÞœ^ë cŸ¨î;ÌËE7ﰾϣîЙÒ÷>`ß»cí…Ë e_¡[ƒùÂοÌIÉ-=“bwÀäÊï_në®Ùͨ‡29UŠŸ˜U&üæÝîÀÖ5J½Ž>Å']å}2¨~qDûúI’Z«ñî s£MFˆ·ÅRö¹ÕÝ~Šf;+«£>Ô6ÍR—fÁƒZÕlBÑiÁf•|âØjq'ó×t¡»ú˜€¦ïùVÛã×ìg_Ðx¨ùãSùP(a£>k‘>¾QgÖ…à#›Ö¬*C‚}oŠØ¤o6C}Åðµ¾þ›û†ô¡ØƉ|é¬{³4€$¿Òÿ}òÛªb ‹ÀÏ~Ó`òqry“SNùÙ¾µ²ŽP½ $ƒÌ@* ºÙ«Û¹9ô;U*F¶ G‰œ•­pW̓өp"+Ÿ¢fŽ§Bfa§´¿N½âU¡J•`‘u¼GR¬I[8‚;„Ç6EñMÁtüÌ^î3﹫ŽÞ!:ŽÙ$Øc™¸;O}Qà^k–\YFrg6+Á¾žØ”¢¨Ì¦ÔTxÀC/~?I»±»DÁ Y›GùÑëFàg=9•?»w`k¿Þ®xGÃ/4GìOœõ3Ã2~"#¤ò­î±º 77xhxrz+ ±Þ›ráªí‘ÚºMêÏm=*Š="=‚Ëu§âêC+DbŠVº€Z%»'È$hÛÚ¾ÇmƃpâÑŸ¥ç¾¹y¹Ô·Í ÿŠÇ¡ehµ’wà&ö‘œ5 Üøéïpߣè&=jbw™— +-hç5afÀ®å·e·ûç{ªÂAüܱße=Byânz®%î¾ x%åÔ¯U~ôè2(+dP_?ñ§á¦xøØí±I8…Ð[þéo¤ßà%>*>|¡ëKdø%âÈõɾŹ¾Ç}|í FhGËÈv«‚‡N¤:Ž_K~ûÊ‚v_-„â:êa’/îçšu—ÜŒQ6õÖêËAîÑOsVO¹•‡ðèT)X'+îWþ:BäJ×]»^~D¿n"»õ€A ”ÁÏ ÝÏãÒu‘Ê;~ÿö0\ÌŠwÒ#\süÂt ’’t{!\2ZuªçßûÒ²O~b½?ËY`¡ϲ:X“;¤ BúXê›Ë¬b4ÉíɦœªŒÔûÊ @円‡—a°Çî›ÝÒC•‡ÝB¸ü6N®+rf÷†z„߶øÁÓnaªÁÎì^¾ÆVÄ'«L·;&øáìµ­úÞVãê3ð%¹B1Zïþ¾ vH-àÿ™` < |Ò㺆óz‡*ÑÏ5UÌ,ÔeȘMzSSÐAçÿ¢â»+%cüV¨¯»ïú}` ôŽ¯y`ZÝaRß<" ÞQ›&Ë&·Ø÷…Ü+úñÙ¤ÅáÑh Ä–äàö}r^œÄÇÉ +-Ëï{[Å<Í×m7à"§1¤²WÄÀ~4}|Ùœ4™çáÅV<»ïOõ3ÇEö³ý˜5µKTû“!ä‡n\$Ô‘TÒËÀ¼6PËxÇ)&^Ê-ã+û…Ï:%uõÈË·¥·CRâTúÚÖ™@ûè€}SöÉÞbö?5u…‘§EŸŸ:r+©/kà¡šµOÉ­‘Me¤ì3û± ZúØW*·þ~,m¹v/¿©üÄÛZ,È©De·tõø¿vív’[s¥®}ã§m±9]IþCøaŠ¤ß¤y„ +-å é¡m´M/Ƥ`9”ûzc6WHòKËÇÃLÞ[¿÷aö0æ)]sîx +-•p“"¸_ø<ú<YêMÑŽðœÏáóQÆð«^`UÎJ\÷•C†79<@£Yu“äFaŸp«¯ªØ„2›Ì/¦ñK˜¯-½*ùM9AÍn{âVØ““1ñÓ\kö½Ûu¿Ü õxÕðî~ëÉÕèÖï¡#~0ÊI#!%"FCWðn?r3 pÅ\ô9'P¯¨´ž0zÖ´TíS"¸>ÅÛu`÷‘"§_½#@ïŸóyÊ‘"PÒ4áàbX,?Eå†6¡ìÓ2Éh~Cmþ>1rCÛƽ PØ;Œ’ÜšljGÂ>_¹K$C)&Pc÷¢¶î!I~I!§þg·ßœQòàw¥k7;W ΋ó+ÀÌÝ‘4+8T÷m—úiHÀ¡uåúLWýbñ}Az1 åaQCB+A’kT‚áD Ðú -÷$ú (ç#ZT¿@Rñýg‚ׯ­² ‰~_G‚(‰ú6¥s) ÀÄÞ×$ôeÔˆô•SŸr`ÐQúÀ#ÈôŽIr ˦aöíŸw ƒ]R¹‰˜5øMuŒ®»‹ lÜtC¿Ïe,‘St‚ºR‘äÔ?ÞH ÖÊéÝÏŽV|­ð㧃zðD’y˜*©Òõ+'¿ªqÀ퇧ìcƒ}„Á- ú=V‘¾ÇieR˃Ò'Øpù§àìwHàp»¢,op8Éô[Ø-0ÏÃ-fWöIÃÏûV¾äB ‡$1Âú¸-|`á¨&¢6}óÔÇóš^à‘† ³ÎdS(öA5䮣Y‡»5Œßå”áð£4»Óÿʯˆ˜Ý9Q=Xûσj÷+’ݵlØ +-ú…Ìo<^ùí¨ÜÅüIªågðð}ño¯ØÁ&É2¶aÃH*ž +-êÅÀÜ»k&ðà(Qx“„љٱ«b¡¬ ;T4$‡À+ 9D|šÇ7|kô \äšè!Ã>æïHWû +-öq4pÛ¨ tß7@îÔ—§†ãÙ/›:µ5Cö¡›àM#<`U“šuV6ïµÒàì<Ɔ9-7ÙÔc'9±ƒß»ÿ´ôÐa +-ÛCkWÐïèýš6¼™,6ÿ-¦Ð>¯F7†¤R׸d~’ðQ©`ú˜ŠDxHÜ`}Á—ЉCYËc5 +-¾l_’Ä•Àc?߶ID¦±÷MЩ®xí1ëý>×0ñˆÕk’QÀˆô-Ý÷ÙצôåϲÒZ“ðȈœˆÆœÇ†o0îò»‘“ ª^~ÚÈJ=‚^ñƒhw¼à'±k±ˆß~°ZƒþÞº¦ŸºdG¢z25rô+‹Ÿžtm\=AJCFغ?¿¼ŸÍ¨oÕ®—qø§}x–=Ònú1÷Û—xA`Öt¶áŠ³–™þcé(Îø²øýªn f#`tP‰I÷ÙÁ¦Ä)Dé”Eð˜GšõMnƒlÂRŸÒ+?}ÔW¹±^°û˜´S'¦Ê¢@Nø±|ÓXROðÇn9Ú혭~jön8ì7°G”|J˜~ÚôÀ—ø ì—[¿pþ~î–Ù£ÌS+é°A{Œniѯ&~ƒ”XU³+ùHÿ‡Ðr?tè4ïi0_îFÅ·œªô¸‰%Eû¶š.ã>6=Bv,'#§o$Œ”-nض ?âÛÌî”V£ºãáfý¾&ïS_0x½£HîÌã.جäžü}a–ø¾¥ä(VðTø‰¿­SÑ×-Ϊ Ìf.~FÀ¼ºŸÌõ؇z4‹_ñ²aƒ9"y÷±HÕÙ‰„éÑìêüSPÄHÖ<6™ä¢î?½¡§ìfKÑÊ%Âü +-ý¼Ë. +-;b¹lmÓÏkʃàƒÖ—šE¥#Òì€í§Ø7† ªt»Ò]æwŠ0Íûî`ÞQß/}gÇÝhÖBšÜjUÖîê³øèÆn`Éõ„h]7¨¢ÅOrÚ=¬[3Õ|b͉LæÓûõ(»?,寿x­zô‰ŸØd•?†O?tk½_ªwA«Hß4¼çAŸé…ÚóxŽÃÙkn]NCjp…ÒÈ•ìÐ E,ÜÜw¡Ã¦ä‘Û¬ôÝ펚ޱŸÜÙ4jömÂÒw-D„á)bC¨üªìæIÕC³YÅïÖn V/Ôl|Xýõ“æ~QµoØükÜ#§~õÕt…Ÿ›4ûŒò¤HD1r2äxn¾'z˱ƌPé‹Ð†Í§ÏKå_p`mCVÀNÇçÒ[Æ£­÷…‡û? ìZé:(W×T‹¸¯ +-7}‹³f 0ÀÂ&?;£>¹ºLV˜îã“nÞ׺aÓ.õ¥¯w«ÉXöYàó}' J~Ÿy²›ô²)“ÓðÀlNcw¯ÝyáW²Ï=Í¥³‰¢6w+À¯a²K÷†e›éu'¯1Eå«9.ª£ G!e@séãŠr˜Q’Ìæ™vº[­Í<¡Þqô¾?ÐQ¸¨”ÏßX")j_öõ +-°:ÁZ× ”´‹£M). +-„>—ŠO¿/ŠeÜõuGQŸ4x°µf#Üõa±OØÀøu!”ü"@ÈI# šÕCONu˜Í0·zÑZ»ÝŠUÇnÛè±Ûn'o§Š»ŸÑyýT¾ñªG¼xG?Ý;gÀ4ÿ”ÓÂLp9¥Ø{ :nÞ‰²ËwG¥W™§\kvèõAeÅÎF¸ß°óYÝÄ#„•Yq&›&Á"ôÑ•Lµ(íÍô¥ì‚uMTÖÇöšR¨¬häQßR­©<&éšV…bßœQn*î[°¡oÔ~Çi·¾ª‡#b¶·k´›i=š³û&#“ýžÕãäv·¢Ÿš!=Î/ãry1¬5Bôh”uÔ˜7†ñ¿ È$‹ªÉ;´ÂÌË>Ÿ/À¼.+)î ~µ,õDö®h/ºâE ÄÌs¼a¢ÚpRpøÉQ¨¥Á‹¾¢ôQÑä>“ÐY#Ðy‡õ9€‡Ý;’HFrO‡}‹±á£OÉcÏì.§z˜?«Ý`!=–Çnd1#Øäû¡<›þÖ •øq –Œßj5ª2y± ‚tR»éä­FTNB1’*äÏ)™sÃ9T%!ÙlÚ!}|f/™E¿´aýšl©×É6h†¸0®xi]aÛQèénOÁfšÐQ Pßt.w<4€‰ûš³ÆFúÆ{N}ÙÒWE³æ9akSÜWÛ7°ä:»ÿ&êqIüžÚ ¤ÇÇŠ!qí÷w°Çн=lö û÷’Þc2`ÚÁü<Æ š¤g:^ã®Ú¨§HȉˆDÌ÷YÃ=ƒr¢M·;ÏÖ~ö…{]|°Ú·ÁÏllo¥Œ¼±UžO$çÑÕôQ¥1nÑ Gô}­=éS«;@êcÁÃé¤w\‘>¯öf%å‚ï~_'¬Âoq[[êÊozà39i¹5 ÝWé ¿øµ1K9¶_ƒzèä·P=¸„å.¹ì¢í/ï ¯nÑ/¶àXfý¥ È™ ü`©!”ñ(›íÈvÛ -ÛIVS¹§1-pÆ=Ã’¾Ÿ}åס,¤úô"‚†‹ ¬«©8kê}¼ô¡8ÆÝó÷¹¡³F­qaÓ.Eî)³r +-KÉ/±[Ïî®Uõ€ÇàWiwVzt³b6× ~t Ö~õ€ân3hë²ÇÏd|ó—ä»"ýnì¹ÖÚ/jÿ¯SRæV 3,ÿ¡w¿Ð.åMñ5w.hV¶º÷öÐjÞ×D°VZ‚„,Mb4¡ø*v(q;€“U Ûñ§Ü'¹¦Ëš¾Ñ¦(r¨t„<*ÙWC¾à}ƉÉïU=8«ÅoRN+»Û0½ÂÝ)@~œýþ]±ôóàsªŠ]îjZ­§EìÑ­bÔrq‹ÌlÆ«¹R™A¬GÌiWem3Qùž’óŸ•ôQKðS D˲Xg6©°wÄø }*Òx߀ô‰ñ©Bîö$GÎäfŒlªÚ—«ä—Þ¯4Ô£†ÓàHN+‹Ÿˆˆô*U¶Ø;üþ%üí. ßŽñ»:~”™³nþŽÀ´DØ_·(>N`ÿ"ÑS$ÄR¿ïe|="‰<¸î.ϪcCuWrÖƒ„>!Ÿ©ð™hVÕØut9ØÏLVêóÇZý}BWú€îØA¹ï?nS|Y|èk`Ö=ïø5N}àÒ·òHnj³†ÿÀï[<.èÁ‘«LÔà%~JÚ½†J.ûý¦—z„É/ÕœöApwcIú}½›Ÿ™õC»ú)üž}Gv°ÁÇŸ»x?¤!‘gѹG 5’;«S¿@);9¦Yéž~×}ñõ×w§—²v•ðÊù—ï½#"ݧS_¸í(}{k}õÒñ¦ûÚ¾s‡L°IE}®‘ZsDÉ-’MMDšà×V¬ð£"ê¡xíJ®zdb÷¦Ý¼…ä4¬ ¿•—ý¹»µ4' »§gÐO†?om %Ä +-½Ù‰<Øíи§sýè Ý54¬Å¡–?zhYwuk‰y¼!•Ûú†PTád.î ußB_ŽóT÷%w?CÜ75ñºAvŸ"ú^ƒpÿŒ ²Y©s_$ ¤_ÄÙD €)èA”¤½~5Xëqâ­y–Ô[=Ã5Ùƒé'·G×Üñ¿Ëì® ƒ½k,ÿڃ؈D]}@'Ö$›e Ú;¯KÄ5»3´ˆ¼ÿ®‹¤EïÈòxúùÔwšô|îØÑ;¶¤/4nu×”Ç0¼&‚{_›0¼ã‘ú¼± Ù×£¼ú¾øUÖK~}aÔƒ ~‘âgu™\-fVmí×ÁÝ#òÓ¸pìQ±ô#Îvü©îXÌäùµÏÈgC®Ü&::630,)&$!$'*-037:>BFJNSW[`einsx|†£§¬°´¹½ÁÄÈÌÏÒÖÙÛÞùþÿýúÈÆÄÁ¾>'.cfilÇÉËüÿxsoje`\WSOJFB>;730-*'$47;?CGKOSX\aejotxþ »½ÀÂëúýÿþòˆ;841  "14Ÿðþåä㺪ifc`"$%'*8:{~„ˆ‹Ž‘ùûþÿóëéæÍÊ œ—"  QqŽ¸at’•˜¶úýÿò_!rýýí¢ž›˜•’Ž‹ˆ…HEC0/·ºüûþÿ™EARW[`di†‹”™žþûþêÏ¢Ÿœ™{xu-èüûýþÛÙÖÒÏÌ°¬a\XSOKFB?;74" '*-148;ÜýþûüÄC@>/4Šåðúûï̶k ¤úö[*+SVY\`qÎêþ¸´¯‡ƒ~zuqlhB)–šŸáëéïùüýÍËÉš‰…‚j*gx{³ËÎÐÒþìêêéæ—’Ž‰D 37:=sx|…ŠÅäøþýüô…tqmjc†‰ÉÌýúøæüùáз³®ª[äùýЂ>ACFIMux›íîúýþýín]ae¨¬°µ¸¼ýþþýþùðÎqnYVSP>DG—Ïþ狆‚}ytpk) "$'*”™ÂÅÉþàüýþýMkýüÝüùܧˆ„{a!aej„ñùüýßÝÝÇ‘d`]ZŽÜÜãûî_62/ #˜þýí½º·µ²k•˜›ÒúîáØÖÓÐÌÉƾ§£ž]XTP  58;þôØùüø½›˜urWœŸ¢¥©ÁÐëýüùÕøþüùÄ lgc-(:lqùÝÖÛîýþÍË•J)a¦öýþøõÕÔÒÖÿþýàÅ€{wrnjfMJFB!UY„šŸÌÏÓûýþåÛÕúýþãÙÁ¦¢Ÿœh„ÄÕýÐíÔ`[WS.;>BEIdhmquzþÿÖùýaJáýÐþÿþüùß¾º‰„C(+:sx–úüðÚÙßþßÕ£Ž‹‡rnkhîýçÛéýåãผ˜”‹‡‚~zuqmid`\XT8520-*( +-¥ª®ÊýÿûÌýüÐÎÌɶ³°}yvro0ÂíþúÉÇÿëן|;#! +- +-%(*-ptx}…ŠŽ’—›þÿËËÊù+ª­ÎÑýùöÉÈ÷üï˜{vr% +- =A{„ˆŒÖìóõüÆýþýÂI +-WZ]y’ªÏ÷ýÄÉÊþÿó»›—“ŽŠ†}M @CFJN†¸ÿÊÅÄI+@C§ÅöýÖíþÿñˆ8630&F[_cgkpt½ÁüþéèÇÀÀÁÁÊ×ðôùþá=âøöÑ»äñþÿÉ~zvrnVROKHDnrv{¸ýú̾ÅÆññŧ V½ÔþùÇŹ¸ùþü½¹]YURNJGDA2AD}‚†§«¯²¶ºùïçÏÐêþøÅLÍçïôýûøǹîùýÿᔌˆ„€gc_JFC-/GJN¸¼¿Ãßþþƶ¶ÁÂýþô½`L`ÈÊýþýÄ»ºãåæèþû†‚[WT?<( +-2IMPTW‡‹¯³ùüþ»Þý·´±L=::gäîÉ­­­®®¹ñ÷âmiea4 4FILPz~ò÷üÿú°þýôÔÒnO((On€š®ÃõøäÁ¿ªçèûáÞ|xa]Y1HLORVZûÿýß̬¬çýýÒnYY™ß°¯»ÑæèéÛد—wsokgd`\YEY]x|€„¯³ëÿ÷ñ½±ªþýú®uuí¸ª£®ÀþÿÚÉÆ¿ŠKNR—›Ÿ¢¦ÿ÷ö°¦®ÎéöýüߡR4R‡×þô­¨Ìýê³°¬¨}yur[XT<+Aœóý·µŠ‹¦¨øῪ¦£Ÿœ˜” 9z~‚…‰‘”˜œ µ¸íøÿê“üýóóÅŠ‡ƒ|UQNK;6imqŠ÷ŽˆÐÒ¦¢Ÿ›—”Œˆ…}z+XvÁ݉‰³ýi;85Jp‘¦ª­°Åýþ”…ˆŠšøÀ½º·³°¬—“ŒvsˆŒ”—ºúЭª§¤‰ýŘ2mptx‘•˜úüž€€‡“àâÿýðb'h…ˆŒ¢¥©¬°³¶Ñ÷šŒùýýúŸ +-=@Pl‘•˜œŸ÷~»øþùݵ²¯«¨¤¡š„ˆŒ¨ü†’ÒÕåþüúÔ³°­©‚i !F^aei©ãäþ ƒyyàÿýñÅ™VSQc¡¤¿»¸Ž‹€{|ŒŽÅÇôüýÔº¶”h4~‚†ŸÈÊüïÝ’¤¨þüñܧ«®±Ùíù‰|£²üô]ad¢ýýæ{rsÿ£spmFÄǽ¢tøϬ‰…‚Ysv—¬ÏçÝ—ov›ãåèûnÎÑÔýþý‚ž £ +-endstream endobj 28 0 obj <>stream +-ýýrL?BEHKorvÅÇ÷óÎouƒ†þúöñØÈD'ru­ÜüþóÅ{mnoŒªõÖ¯}zvrn630'>vy›¯Ö±ÇÀ#3lÕØñóýþặoml™ýþýÖž›—“g¨hiw—šž¢¦©­±Ùÿþ†ƒ@%!%8IK²‹‚„÷â€NQUX[Œµâsadnp¡¥ÿ÷"=ÛÝàýþßÜÙÖÔѵŸ¶ÃÑmj&»ôë³°vc`a·ºóÿõ±$*+6Š›Ïýþš–wur``bc|ÎéøþýâØPMJG€ƒØýàie—üA'%'AÖñþåÉÆ쨤 êðüýâà™ZW=aeÚÝßàüóyÿ,2£…ikzÍZ]tÉýüá^\W¹½ûæÜ¥XVT70>ØÛï`WïÞRVYÄÆïdSTa}¹íûÿ/ÝþtqV•ìõýÃÁ¾Šwz¾ÎåúÜUTPQn¸ä„;4¦ðõvdfàùý”‘roN3Kû÷gD448äþ¡xu_\ZPR¶ýèÕÓÑÎËj&ùKLÿÑOFdgi¹ÏüÎËÈÄÀwULfiØýþóã2_b›ž¢ý\GqÒ¬rA@<<Oáõöé0#5ý>@B˜œ¡ÉWRRpr„¸ázIGDC‹¸þÖ…2/,z~˜KIIÿ¹·•“‘sqoUgû‹ÓÕþÉ}yv íøõµCEb{ìþ›_¨D5:JG£€ÁA˜d.U&?€ UdFpNœ dQÃ(!dŒ0€È€Èâ ô¢iÔŒX¥_zuÌä€LtšP²Ï¡M_Ü‘¿k®lÞ•2Ì#”®Yñ¹íï GR‘ºö[úþÛ‡ûiŽiÏÝoÂmˆŒ7«û„Ìûªú”á¬ØT\,™.t?FÞ;‚uM¦œÓ.…eèiƒÕzË$ŪúˆEMmAñëªMoNy/¡•¬(UümJ±–¯¹•¥Ã¾s3õû*<Íñ2“ÐâGŽ¼Z#tÁ§±ˆú)eG.ý×3ƒýÙ§\Æ!qYkYßóOÍ´ƒ=ïÇïò @µý1gÈ¢ÎÏŸ I Ôà…ÀÿåaŸÜÔæ‡z ­Äï-x5•Í +-©ï\ÚVN$ƒ•¡Ûø\ˆsÏ>>7¾³¤†¿ñ2µ/3õ°ö*2h˜}&S‚‹ñï²ö> [wåÇr‘j™ä‡=5à_*—Â%­îU£aB¦®7Ú%3†Ã `¹Û¢Z€ñK’G)òoàXî¿þB½Ý&ëÚT²wÍ X,~9“ñ2c£¬n½ «»Z£w¨Û®é7áuÑß?ºûd¾S•fE3 ~~¯oC,x±ßPjH ºqV)}¢ÏÄ9|¼¤Çü:Á¡Ò <:?Â}(ª rc„¾r]x(%†!ˆ}i¥?e-²ì´F=;=]+Ãý7ÞþøÁxÚ(Àˆö3ÐòÕ¹™nKöi7úqo4ú"¨ôi­ÂgÌã›yiG +-½¼ã·ª&Ò"Yi/ÉEÒ¼ë‹ +-oñcâ0pÎ rü)%Ñš°* ¿(P~Ú ®™¢e‘ÓP +-¥&àÏ*ܦiæ)dY\é.Çñr?à„¬¡LÁ½Ö[}RæaäØjp¤üXz9`Ë?ÓïÇoœ¥Zz¥Q‘fƒšZDP\{²ÇzzŠÁð4ô_b™žA S乓ñœ;q0Ìryý6e?^ÖÄa€÷·›D6Å)^4@^·¥9,Ò8‰wu,§¨7³2ž"ÕÌHä|,c@¥€Ž‚ÈÝOÛçøÉ`žz¨ 2­ õQ–’,YÇ +-“ºŒ•Š1[µ¿kë$B«×<…ph)"$DÂ'»úîÔ5®pNO¿Î­€³NMN Û`2®æïGÖ[Æ:¹ÈAUPö áœëàUæ„®>÷lwËyVá°”J±Y­;/jrÐ0ÈÒxBzvRâºÙú‡=8 Á3óçnyâHjÓJÙü¦{µFR©¶ÜTZÓ¬oä6‰Ù³â¾™ÍŸ¢Ý“yðøÃi#¶Zë8Óg -÷q·¨'I¿Ð|Š]g+†óÚ8Eiëòõƒ¼° ÒNåTEŠµœ^¾+p‚^IÚ—GðϖH™Ò$?Y;¿fáÃ1º8vÝððçÑö0KoõZL‡¥±ZÅjþQò:¥r…Iû3Îr­~¶ƒ ­˜±ôÀÁju2çÂíÔ¹¡XïŒ!ýNuòÉo,êPªÁhÔEÆ|‚è"s6Cxå„Ôé +-ax@M +-so©}PzáJ~ÖU3º`]—Õ +-Êßxî:B«žõyn“bBB á‘onãJø¡ªî‰UyŒ[v5¨Ùö9Z"y!¶Î¨;Yÿ*ït_Jý²ÑÐtÍVPG¿x=ë¹qBíu…Ì€âtᢪðϬÐ8롦z¨i&^Ç› å9€ ª÷YØ|K‘«@ßÜ>öuo¯!8i–ámäµüÖûÑ—(ŒšAɸ +-$[:“ +¨5êyfúu­[B ôȾå¶àPË°WŠe‘X‘ÛêŠô³ ¼®¡6‰øÝ©¥<„«žmB&™TŠBÏœD?F‚ÉY΢:úÕ"ú‡ÈKˆ)ö+RÓòX é2m +-GQŠ:: Âò *Ü¿XŸŸ|#=4Ë ‰î6˜(v7ýüÝI$·^»1_7ˆ°a )¸ÍhA^‹·(ç·¤}È’Œ¥HâGÿ«O]§a\G +-)Ä÷-@J±Oá‡nËN*ÊÄ¢™œ¾§1'Z½-DgE„Ìi…q¿ž%_&:pÓ¯[V°,ÎNNšŠƒ{?>”ìVÔnkÌVÌ ùLͨ0ã„ñÔ½.Á—÷qÓ\¹ÙDãÁuÃQ­Â½prYŽéÝ.É0såU$¢.öû@uéäNDC÷ð{W;IÙ„ÏëH¶:Ë­(ò³n ƒ~s··ï²û\ºÄ72H±Ðß;²]ìŒuà¨ûÛ¢³Ü˾Ý~ªJ?ºbŽ­uæáèä­FΠĜ O€œ«s› 9Ê3º(4ÎÁls=Òz¿±Ï÷í~nù€{œOJ2Ë×CA­$s|—Ö„Çû¬##·i±Ðà ˜„O†i…¤¶Ó¦{ &÷ ò[;R(ÆN®Œ(ù¸XMÉÍt9¹ÈÕ†‡×+Iǘ9~ÏÀæÏ£ÅÉW²®1ž(G#x&8º§t¾Ãt(OHq$SGß^ÖšÏA*ûpxÀ¶¾°ÜÔ•žì›(~„R.ûjq-²ÚÑÕ5Ë-‡V;nSH3xÓ5K‡é1ìj¨¿,Á¢ÅV—ù  lXéî©S1ŸNÈí–4“³Ìh3B… ˜öÆÑŒ2ÈD6E!ýa:»-?Ç_Àïõ™kÄo(6‚œ½“‘êà q-¿.T&8ÉP³ËQß8á•ÒYWr9â Ó +-ôÈ8ŽëBÉÆO.žS²½¥O¬JóÃý¾T‘Ò£³1iÃÅâ°Äö¤ÄÝaªÉh]J#è¬-?_+ˆ"I“ã¥ëy Š¤Ò‹%½¥‘Ù~g6fœôd{Û‡¸ÄPnÒWø€År{zôC-„›ðû&á—Ö9Ìuäè¤ûìZ‰ÈYÛ +-õ¿ÆõC“0ËV7_5ÜCñ¾õ)v¨: 3¸€.™8{Ò€Lä׬ƛ,¿ÎfK²X:/»p苃*·hÙÏ “Û–ÄÚñ˜’öº)óþWûí’5ZV®Ï¾žJç(ôÌðŽ¾‡ÍÜ·³‹4ºŒÔ¼&L;mújÔ³²wÇÐ0ó¹¡Ù€M!²^g&¿Ï9Éã`6Ÿ¤ß?7àQ%ãüõí£oU¦.Ó~2U8uZaÍ›‹u·¯FyXÓ"Za’hù183ÈúÌË ­GðxPµ©QÏoüVß±jæhMõ™-»Ø˽чàܦÿ×&÷±Ãï Z|cÛq8Ý7„ºí–G·—ÁÔ÷=pkãgv‡W8ÞíV6Õ)´pÎ +-¹UÒs'êU™ø-¥BI ¹y“o/³€à$’?.”ŸÄ‡Ú á´,§\…™,Mû.KàTÊ Oã³›%B¯ã9Ä^ +-äÈ7¹;Ïr½?==ÈûolIT$x´Ìª¨/ŒÃ^ƒÅÚiiј4~I3%¢ºÕ…SÇ~㌞Ls Á*Á¡1²NpXA·Ò—:M(qd¾%€6Ng)èÂPPåáã’}-}0ð½ž{Ju^ߘQsRžô‹ûåÑÂ[î„„çÏ +-îm ˆ 'Ⱥoæ’emI54ûõýÏ@ã\y‘YÅáãš™kœ°>³¤8–«·jBùÉâƒóºîä„xl3|kJZ)Ä?ÀBj]¡£ 8)¿•æPßÉt¢ <ºÔ´ÌðZ{‹ÏîÃã9¼òÓm˜—°?åÜŒz)$'1”œ\S!‘Ël +-”<ÊK0 äR¹“׫ðúÙm­|—¹Üç‘-H$¿WÃs×l¸›`Сݧë$èÇ :J6Ëfæ“6¶SxäwW©/ϳº/ú±—b¢ ]ü¦&®žÏ +-áu c*A™ðë6µS€ùÝo0„ø"ôVO¶$sï¼3ÝËÕØ Å±¼91­ôó€¾ÃwyÐF¨7íiNÆyè¹²‰©þxžós 6¨Zúþ7«2§ç¼ôp³a‘?·c[Æk"tGæË|_ùÏô‚ª=s~‡¹CíÃà'Èwfü3õÎÙÞÓ¨¸fщå\"k-f ÄŽË Q‹Çñù»ê±I+$ÜŒ0¥Âøw‡wŸ/fL?œ¬V·còP±f'¿Q¬4€ø¤ÄG¨@,5ä¼hØÓ*S}áH¬Nqy]¯§`&f}™ã¼CáµiõAglK†Âq‹b'w…}µiªi(wE]XîM¬Ï*XÖ÷ÑcûKì×Ë„}“ Ûågbmgµ'"ÿŽVb×/¡†B½4Ìï!Œ+‰Ghy”o„ÕNT9ÿ! í-O̯³5Ö[±¤å±ÁÖ"C ä7ÎÄxPa› +-8"Të›vfƒÇGÓqª£ÜU¢ÐW27M€åÅ-¢ÔÖ‡x®)]àwNÌZ¿ÕL/ÿÈäѧ„þÓÝóú6ñ9üJ3Æ7Ã)­´ÇVmS{Zíeƒÿøk…]¬¨ßì¾Újæ[=‘«5IqeõS` ñcY!2…"à&ÊsÛ¤dq,zÁž“€»®`Dyä댇ˆ}¤}|ç'øɼÌÓPX®½s’X,g¬^3" èÒFżC‚PŒÒj¼ªG'Ûßd\Ä?€¨]Õ\¸(=^$`jí-ŒúÉEÅy_Óø<EÆÑÑÞw6s©Û¶.†„ûݧ³mù&Ü÷Ëq¶“é8v°ÈEǼ,&>Øž-Ô;Åÿç9?÷£fûÜ<›¾ìÙ¥Ú4d©k¸ÐjÄúÈ< Eöø}IŒ½‡vl—CÖlÿ›Íã"[ŠÞòÙëw°bÝÚˆ²ˆ “¹ kA(ÇÓñöóHCºÅDJlx"óLÌ9ußìÿ©ò≇ñÃ#ŽsµßüÆ`´{¨:}zçŒøSKL©öP´-:³OÊËDâíGârùÜ ²ɧqûÀ«¨ÛX¬É‘CÃH>­_Þ0p¿Ra€€ié}~Ý×…“éŠüª0Š:»0ì;p„hnÑ™® ÓµþaŸ2¬[ÚtšÂî`‘_Ö +-$ø©øjâº`ùÊ*ý" Ðºè6Y­M™Yã6æanäèÖ}nŽ­b–¨oHÒu势Yç’ežDþzŸÁBI½%|¡mÅ{ +-MDzŠ™bTK¤@´ûÉ•{¸­ø‰Ì•Ÿ>oCËØNk¢€Ÿe¬}zI(,HÖŸZ8^>|b$1(ç:Ü1V†e«„9ù­­Ö*ºÚû#‰ÃÊdçrðüÃHîpn@×ß9ªy©÷9<~¤Ø óü”Á»" ¡Gš˜¢6̾ÍÓYú¹xø­eô¼ 'd‡Äµëô©‡–‚{úÏCÛ¹3‚Q9,ÈÚtâe‚øÅ”¬v*¿²]yÔÌTBê·é°~¯o‰žy@”4Ö©76ày!f±dÁê÷Èwab*j úLêv9R.ݵðRÛ"Öº«¨äÀƒ¥ìÌØ??YÏ/—äΟgKïëëŒ×ýøêÉΠbk(,†:2òŸSŸÝü1 õÒa‰“[7EꜴQŠûÄ#(DÂ=ÝÆâ®Ä²ÚŸH9ýN¹{ZটÍR¯ëö5œ­4DS u%ú©^oblýÇÁ£Ä“yážoyF&8kñ jäb»õÉÍ=¶¿$xJMLœF>£ú|eV[hœÐÜY¬Íj—Ì!ÄV¿ö$õ ‘ß 2!ØÌ0‘ÛÓMÆÆo¿Êš¡¢ÁLj5ÍÌJz‘¾tÊ$w¼‘ʶêIñƒVÙwLbÏxBjÝrö®ÿD+Žæ ÞànuëâÁpS³\_Ç€¨L˜'ŠžŠùøÉrPÍä1S}l_dääã9"Íu¨ÿ µÖçþ›¿º3u$ÜyUÂC“- ‰íOBSÿ'CeË}­5½ÕJ½|÷…VÝÜLÍáW11\‘ÂÃÿŠ-^™=Ù‘!šº-h]—ƒ0…‰ÅLJbI(Ôº‡‰ ÓônþÁoÿLlP–›mf}¢~ö¡“óºUŸA!÷áÐ5$#a€LªßBñë v{*‡¹¥ú18;üÍÌïGÈ4$ç’,FJq_]¥“u¤2>ì!sˆ^èΨe¢’ßv¸ Gë8nŠcëc éÂO‚è3“Å 2Áb)^žÒbaƒ18êw™ œœ€½ÿ†ÊIN¨ÃD\L{é\Ô$Ça²x„EìA¯5}ø¡ÇæÏñ¾/tw‡ÐIæÖ‹w6˜”=E÷st"ç¹Ï>ÉT>!ªõ`ÀVnS”,w:«xº„_Ôr UÿDXí°äW“Tˆeœ½ŽÒÄï©è¼Ýc¦ÚÓš˜ø#óŒÅñJ“pýš +-kˆî¯+¯[²—ÍùT‹<á$5ƒâû`û‘pc1Ÿ$çvãXÃHÇ"‹ZÐŒ¹}ƒh÷¹rnÊv½ì€J1üö(úÌàŸZ< +-/×ä@ }gD+ìÚ¤t|ðgCH«¦â zÓ3±ÛAçb¬c?Ç8Ñ“G¸mz03Èx˜°"K䣴>Õ­ à*:ꨊˆ?²O*Ì'<Šñà˃Åî¡r%óì}ëc}Uþ á×èYÐh]˜|5y„εZ‰Ä)ø…ÝpʵF×Ôê[sXîëúË3L¨êG-ËnÁtnz8a¥º†•9›¯ ylOäG%U&@adjC3ˆ+ÃÄú,NŒÓ’7Âò5}¨ÍÈY¨8I~µóã¡ËW>KïûÏÒC‚Ú?©(,ò“Úkßa2¬èüwx6l­澓õ¤ŒD#øó ›¹^ç˜Ò¹ ÃU?ÌÄâa'œ¶×jÞz„|ËØ ?ÐÅ`q2a n´ ó32!?J%}ú=|¹¿fä›i/¹ò¨`ž.x«©táÅ Fñ@â2ºb°Ì^ÉŠýc*~.Lí`A¹KêL%†ËlPáwÎ}Ìë '¹·ØÊJíIïe†MÈ0~Aó ]v4~ ®ß«[··r+lÈ¢XRy¶TíÙ\å„ð“EÊvi…~_$Í!ñÈ N›v÷íIö0p† åš!¶½ éï0Mê±îÃÔÍã|­üД¹”5t¸“e^:•Ð;¢C5ù’õ:ƒŽ®hVC°ÌŸŽ/—è1݉—8–ïÂo©çß“ÁhÕü{Ãld?K²ëGXˆp8yÿX#R˜+[¤±âABoâ¸ÕÇôø‘@@Õ{2üÞcFú˜õxˆQ§œ[5kO4°õÈÉ ãNŠúEƒ»+°3Ì{N#=bX–¶ %ãbÙ³¹ 4$~DEg™äpõ ~äyä{‰×Wª­e< xC˜$H¯C¢!kØH2.PAéulÿ&«Qõ|ª{À!µ~߃r’`øò»&â cÊ­êÌ&#äûº²¨]Ÿôà¥ÿ'6f%†ûêî(6Ήrž—Þt»œÄùQ{Ëñ`pSL©Ž¤•nYEÎ.á’ û…Uý"A%’¾@fq’´¾5[î(!ébXÃ1¸ÕºÀ³lûERS Fǹ²¿ôöXºã,#½Œæ$`f¨ßc2zŒH´IÃɉsóô¼nP¶ÏÙj«9Y~gõÐßßLëëž^ÑQéæ|üò &H~½=ò«vŸS¹)7Ñ€x2U“ÚNÌ¿¨écß8ÑÀCüÚUÐU{:Nn8¯ZRíß°¶"Z£+  ü÷ûQ!Et<²Ÿùzº#‡öÈÓÏ=ÑxáÕ÷>”óYPXÄ E÷jàž W&áî6ˆå•Æaƒ-Øi¹øL‰»BŒô8)¼0“Ê|¢Àùœe(õ…‚Û}ÁÐZ,ôºà×#ZªMÈÅ`ˆËðôó êF¬§©Âë-Dy–^ƒ ë÷¤kwkX­ðÛZZÝÈO~g¼•§A%‰ÕR¨²Ûm•¥-‡ë¥ícäG­Ù†L’e—‡¯ûÖåTûØ D” +-v`@uü^|]âud¬ ³4ÌL0^¥Â£>æò¹ ›ýNÅéTb~?f¦½šËú #ÜvWÞЃÝçÁT¬œù ~Áx[,D^ÁD5>­zp¥ì‘÷:8S3¹òás2¥;‘eèǪ¯•V«íƒL.7C]`ÕQ +-üÞ€;„‰9O¿à58¦óñûUwkkÉPoHðìØ¡w¢a7øÁ•æç!ñ ÂhSóIø7Ø¿™C/¸X=—½>c +- !jýF¬öÝ]öÕðˆÝ@9h›ûÄpîgÇyê[-Ä>h\/´“ów˜T’GJ,™Merçq}p&f3>rm·«&_ÎuJ¬1s­00.ÿÕÀí ¼à$ ~+lAöüþÒÍÆKgÓ­‡3©¢—‘‰+ðw\ !]%2׉,š§Xî,;ß;¸§$¶¿ìZ£ @Bä8¾ñëÿ•mšoSòc¹­=œ¨Q·.¬­å08áD€ßI èè'%ô0DûñÈÑ3Nžü¤G"ãñåé8#šíåás]\úßà÷2eɨ*@‚*?©Ëbc´•`üN À§~Fë“îš;Áõ*‰Î}êÈX¥„ru(gr¦D€9öÚH…Ô +-ýÞûU=Ô¨+ñé—F|ÎêÊêÎ-Ž.wY摈íÝ·‹¥˜Um9^ÑPšå<ÆARXT¢Âß8yk¤R>ºødRÖpõ’ÂadAêŸþ#<¹éúÉ^’Ê?Õ;µA¨ê‚ø8Y8ü‚èí‚ ýða+1u«¶\">Ê$ýìÏÛüÇ’A3­7W V†è˜ ¦§e'Ò—,X‚ç\=D$ãkü›ÒJx_r/VŽ"Ȇøò"ž#dÐ>öf[UëÏ‚ã4#§/p^Y]ÿX•• ß½ÉKz-h7˜&òAÄBi0,³£*\ÿmu«„S~ e#†)Rün¢ó {d®g°4V*` ÚœLù%„”Ïae l?è¬ò¨ž>ñ3·¾Ýûì0BD]ӄŇ_Cc+ÞÖžíõ?¯áÔ¬ÑïŽd8E³•ü‡À¬TeÉáˆ` +-°¼°Ã–ýZ·l‹Xòñ@ÈæÄ ªÙûD´>ˆL·ù5¦4ˆ˜l%¹8ÁBr‹s…UzQìcøEÅÏ;cRã0ÃSxÓ|—¬Ô·XÃ’ŠùWó3þl/à­×©ò²<–™GåwZÝÜTï{ üÊbSq_5Ô‘!ŒPðþÒ¾¨­9`†Q„å€ÐZA‘•pr5»$²Ð&µõ  ÷%¼qä°¥ŸûÈ…ßàòï%yÔ\ðûp)è÷@W¡=¾oÕÑÊ¡ßdoÃ]\‹ŸVŸ\êzïë³1š:[ºiy[RÄ}„DUAN¢®25dŸjŠß¹üÚë pÑè9QzΨ¾Y[÷à6ûrh˜,|bj¬o3cbùƒ6ë ®Ûúæ°ìוÉþB¡dƒô¡Hý‡ÄDz~÷L.Bï ó<òÁ)….>±û8$c#À¼í0 +-]u]lÈq7ҚįÏ©5ËL°¬çcتÈd’,C=Ñïø‰õÝ¢e†‚ú‰%CênÅ#’ÝÈ£d€Ÿ|A‰tcs”hóŠ&ñª4/4 Üú™Ò„®¢Í#Ï5˜‹ôê&¾ Sàa‹Âl-š×œOt ¸­•>}ʺÜðqŸS‘掦„Ç%ÆŸ.ÉoÝ[„G»ÛÚ¼Â>Xà£u×ÚvÆB¾ÃøÎ ßX†?k±.ÉK|0÷XGQ»—ÁfuÉp…‚™“_V)±ü<íîœP©ºûäSM½–(AäëÍ"̆_mÏÒÝ ±çåÔÙ¹„(‹ÝV æJ“ùû\<°ý5Ý”äJ¡öew¯ÊK¥ +-ct®q3ìT䄦.Ù ?ðAÊM¸øPîBQú5òw‡¥ß¹ÃøüÌoŒd´½94PÝFnr¡õX0vá’`C-~}i%• Áãw<ÁGs4Fm‹Á}m\wQçf•à× R9U1ª +-pٽƩÛo×:;iR" Ñzðeîæè÷+N,í¨øñæéVŒÙH'º9imÁÊKµ,)Ä‹U¡;eMúé §ëò÷wß]2×½±siÍmÿ"­£…Tâu¼MI¶ÚLn:Ë1»ˆbèmÎsœõÝ›o:;rH~ÌŽY¡U}ÉÍ}IA4‘tai‘--þüö-ó˜©Ûu!ìh™lÀÂS“ µ£IÜR(+4våºåYsxàÍjdú zWJ@ ¿’~ñÓÐ1rÙâÙ­TQcô{&Ñ&Ÿk»( <~§z¢’'òÛ[ ±(bÒ‚ -]T9ozb8HÒ•$d óÇÃuÃ@<’ô1’Ô¾¸$MÅä>ÜêОFk+ˤ‚ÈMÝÁ¾uäÆâ“qÙWû…n’ËœÓÁ˜  ÷íç¦fo¬“«~®îa¾{ü?ºIDßÏ*Ô/üVç°J˜®¡‰‰Q¤‡ßw¶;¦ +-þø1[œ +-õ{jbSf;¦d¬ø°ue‚}BÅ˸æUoÁ¢_/.š¼9üZŒdìÙ¿Ÿ¿˜~6ùÚf+Ïîd+Ù1 +-¼X¼Š®¶\?.ã}âQ6<–<ëÕ*ÜpíÃ%OP‘À¡E¾p×дÝGCø•ÂM)œP±sïj<Ê ìs‘1‘HE‘šÅõÎɺf&DT€ÏÐý¦p¯åP™v1X·;çzç Ø=ZOxL§õofC…Ÿ†ÃHLs°ý×l Eðm(1hÔÉ *Mh ¡ÌYirZ†&T,ÂS¯‚pÚ“4üÎ7ªîë·¢vlù}F%áäÚ$TôŒÈ) Æø½ª§K†ÇšR¤›h¹«]®@„} mÊåᯞ:½„œÄ>ô +-â‡Ü¤Bò,’Ô¥o3Ëh;´;;^¡MùûØoîKgz6“Ìm€©©_ÖÞo…ƒe!™#,3&ÍÁI§›Ï®Í¬×צ0áo\&ધûm[úe†%þ€¢Ü ®-œŠ8÷Ç.0'`ýË9‘‰ðØRÖOãÈ«ú°”{Ìžk~©y) MkÖ…9Û ¿g%ÕÀµ‡*h=0{lÅfú8å3ÕQ¿7QíR RÆÓ,‚˜/b»7€A s$l×—ía~´üûÐê˜-sšK<˜¹¾ hùr  ªv×,Ã}ªÓíÿý¬è\¨òÂ4ô–é“pºÓ*õ_3{qûLqñ÷ÃôÞå'úÁnË·0QzÜ]BóõèçE8Lß“QB}xO§KReñqlvcê¹ÆïêÊ•¤¶myÕÁ/.N¡}q%™+ÎŽ ˜”$úýNEo¿@'A^üÜš%= ÁVDéc’d´È~< '¶hsF¨Uˆ æåç!’5Àµ¼ê¨ÔMhë>l…æÎí=Â#ý2x>ü¦h&×3\PTÀÇ —î¢@ÇKa[ªÐãè’g¬6côÏÃcG«Ô&üZ{ké_Àµ‰E06Äæ0üáîè&«>¸‹ÂY»fíYŤ(6Ä5]y¦:ï¿ðg­]‚½Ã²~F_QöÏ-©’øåut¶ßÖ z™¨52ͭߌF( ¥L?')Ѻ/C0§4Å–›9Œ|$/T*úHBî e__Úüú+v’ë&ŒÜwŠŸ*›7çvI®‰J¿R¸S$ÙLã¼fc*ŠûdÛ–~Éê·¼ýfž…8Giý’¼ïëÁ®IpV™+ü0L±¤@FóÅÌYš«uÚ#QTøÑIÿÚ”ŒXÂMîШ&áõ‡]¬Ëû|½”%žM%6-˜•aš:Ôdü(©üF‰~‘bëN÷YǯPhãâ} Äï÷êæabÀ©V“  RñÝGë·$®Ç¿=Ø6¡nIÝn‰ +-tŒ<$ãÀÚZ«,ãÏR7 å¾õÍœÂ1À»,¨sGAgÙXOú…ߊ +-‚÷‘eöëb¸ëwÝdU+ç,…óXº«1«T<:½LXžæ•égqºaŠ=½›•ºfÇ…y ;¦7™.© +-ù½#ÙBïþ'<œ/ OðärŽ,þw*·"µ.…_*$ñ°¨‹| +:Ô;Zã'‘T˜ú²ÌCàºaÎÃ6=¼.o‡Ç@ t°ç3©„3³‰'–ÖÔ¦‚t¤‡yÚk{ŽÔª|8 +pÚ;åB‘P|ÉÉ¢*ÃÜt÷‰Í’pÓEë+ûSδ/Êrò»Ý·§<\H;}¤]Raà2€gx=•¼`CÇ-K/ºž¢ý~ÈcÝ)=Ýò©»›ê°Ç-áëŸûM©Ž'QBA§Q(Ãr.•¨´¥È&ª¯%¶)WÍ1©x ¨ÑÜ¿c’¤¾•vRW@¢Q­Üeb-Ï?4[`àöE F]õò-uÑïAêÖpÝ$ #‘Jn8. Ÿ +- R 7=òN’œ%êÑh³:À7 +-D>sXµÑH€¸ÅjôŒƒJÿY—ê>úÏ2EV–xdõx0šâ; f(,:ðø‰ }‚[ðï'w(â§Æâ}ìëGè®>ˆÏm™Vó_€Ól²ûß±¯ ^Ì©¤vßa ÀFà/ËØ¢Be«fà~óéj"S\Š£ë÷*æ´ë%ŒQñ#Ï”º§v‚Å#%õY7¬ùRMUü*}T3.Ϭ¢ßƒñ+ h¹ @³uº8^*«~î0#3—BYnvSaºÍÔzNÆ>Ô&Äîq‡kÅ3>8]|}ä=šÄ9“ÌÏ=@Ýç©%•Á ~<á§'Àõ&Wª}‹švê/ªclЫ~•¼OK°ñNÝú /ïá~ºx#ÓjŒB¤`ví+yn’Ããr­Ÿ6KpôÑßxàááû¾½I\ïyú_ô '¼Õ¿ÿC°Q :3ö•ðMŒrl-%‘ûüÀ 9åÁ`)ˆ •7T y¬ "ý âíìPm xìÃSnúG’l_T*²V}ˆÛI¥v™k"Ë”(x⇨lÜ÷ôω~1új8…„«M…)D­~är0 äºïý<ô,Wý‘ppÃHgúOBñ(îÓP@ža>n0ïõx|¯oÊ__ò^³¯sk•`@[ße~¹û&AÙº_"n˜uC¨îp¯5É„dèÀ&BÑØîëS]Ó Ž6 MJ"àG¸·]`!N*Hplp„žÓŽiÀ-¦š*Â(S€ 2’˜ñgUßYñMG%©$øø5·&èQl8UC°Ù:ç}&œ„[Ò:ŽÀϧÊgS ·q“€„£² ¤è›_4AÓ¬ò6´h>~=»O–,~_Ì6znvÛ, Y¿Øáák”^É£ì1pinäöIGÔOþh{̯u0ôu¹ãG– +-³Ýè–‡œ]B²f`ó?Ñ~Æý_%.`¶ÈO!én·µƒd«£5,þ6LæàŸœÜŸMtH/ös2^ðy)ý‡.1 xèŸMŒíá›ìsy§ÞøPŵ±õ+5÷d•ÆoÝ“rÚn6×䧂ɬå6îˆÇFØL÷0 @,ŽŒÀ} š[€¹òÇ?¯ÈðNÌ€%•›â_sòYÏwRV$ŒP Ç‚X¸(‚«}š…Ger—½ù…4î”@MpJI¨n +-lÞvøaÕ%úÌ£W‰„×£Df÷©olŽ~õ\MÖôúxúÏîå$™G–4À?7Ü@õ9–ûaðË7ä.DÀuR}qâGjôÇX\'Hø¹V·¤Ä¯ßâ›xÞ@ÉWœfýË6ÜÊ6JÞá¶u£2ªý¹!2d}À²ŠV|ÈóW4zC˜|iò˜3?XFÊL‰ø)ý“aÀQs§,¡:âḧÜÕçL˜í;ìqt£p' I,?ü²eµÓݵݤ4ân=ï~xo‰ü*—§S®¹(‘Q/Kåí<û‹W†A"¿8©jò颢êd¢;M‘ñë¬oò^µ®_T>6#.è4[o(N¼#íoðüc2™Q/!IèwØþæÇ0xû­,0ìßö—àWDe$ J+Vò(™Væç¦õë;6×¼ªô®Òêº6‚åÎܰᶹ£§ŸhhrÞ ò-¼8êU²4DújzUL`¿\øI­ˆÜ–bLÉ#™Ü'ñÛ!ˆ_™. ~­@xØ^ÒŸ ï†Å=™É¾‘‚áøÕ×w >k®*ø\ëÇOÝÜgW_hMª±'qýÜ°Ë#€÷%œ‡¦#úA™L (B»ã>ur# fÈ*I•¨Æÿ’Éù]Ú—²+€ß×HüA8Õ)5yü‹G ž»ð|÷Qd ç^GûÌoZn“ 'z^÷EL¿>ãç%Åoƒáw¦}7Óí$?RÄ<¤m=©LYÈ-i#²“ÝjÖŽ=«‹sÿÕÑ$”D6§f§,¢f då¾ +-°>¬3àQßw,ŒŸx®©ø™­˜œ50!®Y—“*½KUEýÚUw¬Áûâû9*û±"‡Ýp›ãbñ‡Ùv°$QÉfëûçuüæ‡íÔ.ÚipNŽ-pÔw" y¥ÁPâùE‡´Î ùãç•'ƒÉëWÔ†çñ†…ÞHeàw2ÀLîx ÆJ„æ1H ×Ã;QK3¥X­ŽOÏ^NL;^®ë?CŹÒ ecÜVûŽšêó:;+º~llÐ]<È9hMU˜ššòi7å§ß^+6ªîÀ¼o^œ”Îà 4`”!²†X§OQ°«½ÁÎÓŠ|*„øæC7ë1/ß(Š€¡­¢ü*?Zls2.ª‡D~‘Htߢçõ ¹:¼M§öË®÷õ{Lƒ“*GWg +-?CCÝ·Ìx<+gW¶køUss`⥅rõõòÕœ~Š ;MRmàsƒ‡Q”L‡KüºÔ²Fô?­Éö]Þ³‰åöOõ†%÷ï_ÊZ-âhiø>©3œÖ»V\³•"dìŒrŸæ¹~ÁÙدÞJÒÜ×d¤gÒ‡þŽÝÎP·"4úëÜ<Ñ?¾-{™áì&q"y€cœ²­¯9å&Œ5`½Òƒ5÷÷¨ÒÁ`Gó ŠE8÷L½¯Ü¡îNäá…@åL_¤ÁXؾäM‚j]J×6åЊžUæçuçu6k;wi¢'J¥™kÅuÞ•ûw2ò¬âR¼¬¶ž\3ÿ1¹ÿ–ÔvJÌ.ñ{ßW73-º~uPÕÍœ­Š3ì>Åuc?…5šù"²n˜ÉÓ?Zr» ¡ïy„Í!×ÈõÕrßÏù=ûÝ,è n,=È`¶Ã£Z‡¶È}ûuPÿð02¡dÿ0L§ó@=ªq•¬á‡m<ÄÓ”%e`?Ì2œ` à×"CAáä‚«#'‹%ùN ÞÜïó ¸áã·õˆ“>!““Ïš£Ò¢ß±ØÛ2?<Š¹û=bµ +-jP¶"S+-; ¯>RßéªîßÙ*¶8Ùí¾Îê67Á/,©žt?Oæ1I§GëqüÒ|òO‘d?(ŠøÑ¢gZY5òdasê¦=Äæ–šx &1ŽGD6ù:ÕIâ3tØðî>™ž[Z€£Û¢a57›Gíã¾}øá'~œš` ´@«´Ë“¦øœ#ê™ùìKZmj}XrÀÃÒÈä!êC”»nüÈ[}ÈòXöî…‹S-ë§N4Ø&Á8~&Ù ¢^Ê*Ÿn?ŠQ¼T «\ih¤ö!'zöL»itEâ3dyx» 5Í={ׇãFv +-Æ¡œnUœñ>p­%7ÂïOÆäæü-€ç™‡ÅÃõò‹´¦é˜qÂÙ_|”œQzwÏž¾ÓÏ ’¼bÆÇ[¸‡ЂÒîE™Ÿ¶/žFRjçŸÕRi3ˆFñ äꆶŠô«[Ìã[9\+ñ‡S.è95óès^wX1LzÔëù6¥ÃvÎŽ‚–úÛ§Ëæ +-9†7wQ,ø?‰9òHÍM‚·¹KY"<÷Zî5¶ã^(å(0•á…+o2÷ƒØ50ƒ²ožµDwf[›G_•ßµ‡›ãj¦ú‰Kµ¡àîVº i‡,V 'p¹íƒúâ@òrëjœ\Ór»4ÿYµ°9ªÇÊ?L^2µz™ú™¢æÙÊä}Ȧ¦ÔKì> +-VµÆw¯yÈ«÷Á}ÀÐ~îbÙÓQ“\Üá*B!ÁüCT®®ê¾SŸ<¨Q¥õä¹¹Ib–}¥sn#B93¯ü¸[ò¦ÌU(ç¡VîHŒËèþ&[Ñ5)ãúŠ®¾ÎÙE°5rzÓü”½HÎQ-h] _ƒsÞ ï˧Yîy;¹³dàá1Q}š²9Eømõýqçú½[Õ.>óx_bo+mþ²CçëÆwÅN€²ÃyŽÅ=éÁGØ¢IRÉGªÊïCPgü6À$šv‘AÒ tŒ›»VzËO¼è>ñH“*›ž ÊýÚ¿)¯Ÿ üüdw‘ìOãlnA4z˜éF…Ÿxæ>•Ùr?™G~o¯$®öSN>Úq2_ßÞɉ\w«=órßÈ7à‘¨MÖà¬üg¬øõ¾b^µjõ!Ãõ‹LÕm›Ôï¼Ï‚â9W¯ûœÀ¥5º³väWœF´Œ$z†û³ +-H“B'&â9ôæ}ÈO_ª}ÇÙ ›º»)—¥ÕÅ´šó5´ gsg@X+ýdPqs uó3Õ¼û Z¥…µÚݪPdL?ÅtS6÷µÎÒ-«ïHqN,r°aÑAsü£ Ì Šü}Ϥ_O~]nx?ð ú²èU}Gëü<ü<“ûØKÌþ6Š¯¸­1Uzõû„ ó`1BùêÙò>aÑyè^·~dc³¤ÇG–~ØÚVñeHÎ]I÷C·.iÜCòÇbÀqÔ·Ótì‹w“¥‘ãë[øÜ–{ºi$ijüF Ò]âÜ}Óý‹Yk æÝèÎmÂ}qCùe9,úm×{HF‡‚¨+[î8òÃØa-íû>ðb-£M4ËOnÀ£Ú®úx|V•r;N ^½›ø1η~v˜Ç]udzÕïÄ/d˜Æsï¯[Ø{‹ê7{?ɼiIë5M¨@J¢y7‚XúSçVçÕ{š»ßÔ?ÎM+YUbï!œ¾™¥ßn÷qùÏxuŠ dIHÊcp²ò*«¬êƒNn\&bÜI1Òd,)vËÌëw˜ »íGÅûʘq„ß ´îr‹£ˆ]/‘åžð? TæZngÄÀ¬Þ˜C áen±q4Ë&4²9oàÞ5û†“¾~=ußÃ/ãcp¶§Ìck]Ýô’½]·»¢> ù™`”©<¥@v=ìЬ +-ÿa1¹¥+ô Hûн–¨ZU£“Gòû@¥•·ìSáÉ*|!8'ãf¶ÆgR•cß¾ÛÉFÇ–Zw¥›?”ÐúÁMê´VI Íj ¤O´£JÜ÷¤(wÒxkŠõU·—»,L|§Æ/qµõ ?6ÛÐÀ¢îÛyß`q’é<ìC[“š²§¤ýjÂ?†L"(Yû68¿9Ïÿ¾oAž²8¡^G£ahF7á¡-‘‘Œ„èoégÓ*iq_\ °Ö=)–SMÏ34N°™Õ>#îó…é¼O—çD +-q5ŠŒ™¤j |K¡èˆœž¼¼{Õìe„Ý°¦NÂd2P&Ÿò|„;¢Z:˜Lz +-s´ñÀ³nê1Ý$ú5®:·á´F]•ˆjŸo<šÊÂk´¸$X­Èpž;t{|qãA¿ÝGéÞ_gá÷<ÎxéíÂF‹eê–×Òk,µó§ÍÊ +-²êÖaPͧÏÿå.ø]›2þKÜš´¹š“â¸týtˆÌVµÔ €'–ÿ±©9?ÚªìŠzß8Áeœ¦‘òØR•ÞÊ?Û§éÆtªÅçdnÅÜdQ4¿"ÊK ¿5ÚMP¼ùÕHÆ}µ.ƒjãíÑI’nÕ÷ñ$“ @÷øø5]gŠJ»n>ÞýÜ·rÃcRé¬Ì–ŠõÉÃʈ,7œã"§¸™†Î a§¬7Â/qVP[éw,Nè2B4±ælrþ˜ˆƒß"§Gü¾7²r—ŸŒ?Ý|À°%Ó½ûÎm1Ñ!)]ã‘Û°ÏÉbµOZèîÍ›dh¼”u´>âQ»‰ÜGòà é>¸=È=Nœ% Oì[áŒóx©!ÁÈ/ë‚;¨ýÖœ-E+^9ݱbce'/œDSË<ŒW¼r+KâÀ1§¥úôÌSÏ’ÛqΘ¿ß±Z,ÿŒpqÀ«ìC ÇÆcìÅ‘ £ÐB­¾ÆDjf’‡¶Õ›XdŽÒM1¢x|{Ðyä|l™“% ?·µ[hg…¯g‡®ä[ Y´Ilë‹f}ˆûI6¹GÕÚ¤1Nšø þóîc>²­M²<ÑßÇû(AòçÎcv÷Ij¼Ñ¨qúÒCï¾/‰l÷Ö3‘Ï8ÍKûãuƒ*C +-â$ýʼ©˜a•ˆ(¿_^ä1&Ý™¡V±!s˜=(_¡Â­` ÝÐá÷vÝ@þjXýkA‡F¤9·HÝxõ­8ö;bD›,©/ÚýÄõ’€P¸é›mç4®úÌ?k~ ¿šÚRX“{ß]Z?“ºOŸ÷å<ÒQ*îȆ2¿zÒƒëžJÆh©ù’œŽÐûôïHÆ¡|)´o\(ûþmKáMmž[pÕçfFá€\ñʯü¹ƒÜD#¨ošµFñÒÊôOñð6a~Ü~øa¿ã¹ß¨ßÛ’z6hµ4=2ÚôÏZlx„µ2)£Ë µ)r ʇŸŽ ÁpøIŽšø)ö47§ä„”ë¼}Mår8ï[EŽâ”¦ëE¿î–Lx+žÀø§š8½uozDœüVQ-‚ÿeŸÓÚ™Oû’JQôü~>Q 3@ö½„çöË{b< úž4÷ñÐ×Û‚ä´¿ObÉr=û»É Þh¤Ô€KÄè‘È«1~#ÄoXkýäþm…WÐνúRúô´¿mjÚ$ ‡D¾ƒ¹Ü2uŠPÏiD BצWeÓǤ®M$Ư‰nˆÕõS5Ýö½¡â[4À—­´ÕÎÔoÁv4&çf¾/ŸØ­?þ2÷!°À õÄõé|2›_+ž¦xPø‹júÇ9º~zï3¿ï»ÏÍèmÕºù׈ V¦Î¯fT±ŸMwýNëÈZc<óó¬R7<²Ô—ºÜˆ00þœ£Z›fçr¡Ü£¹TðK%6 Ñv:Nóà9[ gÌÌ÷/Û®nãÈfHCØeÝyHQëŽèNù}¤üì£ñ¶Ï˜<.©BY +-ÿ×ÄøÛ¹õ½i¯CT÷¤æ‡ß¾‚Þ8K~÷=uÓú_c¹nÂ@2e…ê®kíô‰šä 4ô­žrd~GÌA¥a{Ç&ëƒ%,æ;ª-³ºx42É„ø‘A›"Ó^‚b5vï:Xœ&ç‘ñ—uQ¹na™±àfµU +-쎈ü&ÔüÈb•]‹\šdµ’ßÇ“Á½s×+e•€wöMR~q}ˆ6$’“î>iôä§óÿ¹Å<«„¡E1ßÉqÉ/Ifyœ7¦±í®…Þ×#<ê´©$Ö×n¹¯‘MFkßá¨>!û$ƒY¹yÚì!ÂusÇV(ò¾y°nê¦_ÝnD7ï}ãçM°;Ô°X–zÕ>u+tPieMì‹Ó“Á€ƒ¢˜ØÀzeÀ›}.Ýß[³f——£øÖùw~«è¾ž›}•{ì@ùñÄôw…LP~KZ PÊÚÉépUd‰³i}k`lVð M¬ï÷]n$àaÕwÔØªÏ -ã—Y`òç˜G«º yÅá$Ë<Ø8£ùiÖ݇·÷¥ƒŸ¼qÊ—#'™òÄn×íi÷ú–Z_¢¤AÖq2~˜ßï4 ?«¤6@_@ãÞ|~¬ú€1uéƒlit=pôväZÞ·ÇÎ>ùâRìnbu~µ'ƒ(‰ù„­b˜º»]Ã]¨kxX·ÇN¨?mÚ7]_Âr1xIÞâé üÎ\Ò›4~dP©éMTqÂäŠ ìê¶\ÎL#Ç8©¯­v’ gxœæé—•ºñõ@÷v†òºNOæOë¨cßpñ0ÁÏ-fŸ‘ã‘œ_Ͷ/ÔZŸ’2ò¡–2žLÒ'ðfñÀÛV~“böñ™Ê@²t7Q Å™Ÿ¦´“±6.6V(ýŸ°'¼¾@£wX—ýG¡Mㇼ%&ñr·ÀƒÌŒß͵É×0½ÒëGÌ "o³8—O…ˉ@»âÌNBÿiœ˜c@àKP »Vaòº¬VÔ‘ÿ®}x6>‰ýýöá°­ª“÷ÝÛBfù¥v_a«kgb9>@Rî³SiæâA1ÿ™ie¯í¶fA64hþ–ÀÃÅ|75431.:imqvÿ‚zhzÑàþn9X‹îå²5Y\™¡¤åà¹xH,vmo»âÿþùU:76.ps¹Éü \_™Êøüþí×G*Éxyz‰êý¤M4210µÏû²'ÔýÛɃj+Z_yÿþåÑ—•”yyÐýþ[/.N}®ôæc1)(CGJpšòµ‹òÿ±­©O-+îûH(*EHKˆþýC07:^¤ÿþ˜‡†ƒR313š“–·ÌáºO9)bÿþô¿«ˆ‹ûýšDFýáßk¯³¶¹þîá$&Aÿþýþµ•B?;,$FŠö&469<@þýîá¿ž›31&PTs‹Ú¡Úèµ±­x]osÕ×ö™f¤îýäÕ`Q/SX\`ejnsx}‚†‹•šžÿþÏ¿–¶óÿ¬‹\A-#(¡ý8# mquýߧ¤42/xÌÐÓÿþä˟ž¹†nje`#!a­57ýêßÝÛÚ89BZ_dh†ÿþÔŲ­Àö”.+)'ÁíÎý•Z+þ¹ËÖÞüþ´°¬.3¾ã¾7DY\þýÃŽÿð¶Ì!¢öîåÙ·´±XC69ºàâöý€69=ADHhl§«ÅÈÌÏéÔûøìϸ*'%#µÌÉÇÄ¡[Xý0€…Š”˜óÿþúßóýþ˜gc^YUQL'ÃõïÆE3AVi®¢¦ÿþôéüý{vþÚa]Z,㽺„‰¯ÿþõüýþÒC1ãý›#Y]þÖÒÏ˳¯«¦¡˜!Wãý ’»ë÷üš;Oœ³ËÿþÍÍÌøúÕfb;$¡ãS BW–Çïøè§S*'TX]aÕÿþÝÑÙà÷ýãáÇÄÀ¼pSõöîºK3k¡¥ª¯³·èÔüIØþG/)ÇÛþùÙýþû :)èüõƒ`( -Mûþý 36 àûÿþúô–~ytN:/™±ýöŒlV!36:>A\`–ÊÎÑíþý÷ÝßðóàÝÛØÔÑÎÊÆä ›RNJEA=: ö÷Ì~zb"ýAE‚‡Œ®²¶ÎÑÔØÛÝþÿàêýùãÎnieCÕàÝ«&üþîå[=. +-NRV²ÆþúåããåâÍšd`[52/ "åîùþûö®%£ûþùÎ^+.25šÍ÷üýùnQMIE7ÅﻸWhB 1þýøéêöüýþîž-þôº7á×vsT þðñûü™wrmhc_Z4JMÜçÌÊ&(FÑ×ÉW .14mÍñóôõìîc9TÆþêcÓéؾr-DHLPUY^ü÷ûüýúgb^YTPLA¤ÉØü" +- +-?CGLPT¸ú÷úûüòÌqlg1n¤ÉØöRUèý¡!$&;¢òüþÿúÿúg«ä#IÒýõ]þýõôüýþåÇÃÀ» 4øB?<9SËï÷Œ>1 Ž¦»ÀÃüøûüýþó#Vö÷¿ÎÐèöïáÉS6NSWüùùûõÇ963“¾ÁüÍÊÈV+üû;¶ðùüøöúýô›Ê÷û?BE\ºè÷ã;,›ôüûúýþòhøôô W¿åøûå3òýüúùûüýýh'$" —üþS"»¾þ‰.5üüüáñþQ¾ý“l#-ÿþüýþú½ÛÝöæä ?# /èM!Äûüý¡30-þ¼OLDÎçåÀwT8-ù’þùåä⻸Y#Yøûö¶{’Îåùþþ³Ñ÷¬}/* ·÷9 +-²ù Tý«74üÌt[  øýÃÚîüù­çøýQ2`‘þâIw™úÓ*ÄøIiûòáϬ÷º À…ï'bf¨ø²®G!¦þûðé¿KùëêÎËÇÃGC?;N_üª FÙÛÝßµ“*?gÃàãåçêëÊp*<÷üØg>¾øûQ4pÝ F*QfÆ<:=îþ/R…ãôø÷uUQNpèùŸ µºÿð95ØæõüñçÝ=°ëüK9òûÌP(7±ðöó¯oWøûÌsI&Pùõ&-:Íýæåª)E®µ±FC$&Îðþ q¹øûû©–( .d½ÁòþþùÓI+‡ñý÷ÖûöØ¥Œu%'”êç+žüýößÓkV@nýî)ðøýþÕ))ÍüMuæ÷¦&)ÝûKíþûø:wÑàþþðâFA>ý÷Ô¡jR9¤öé,/2âòþýùïÈh2ñùB;ö¤¡•µýþüê +-ì÷üþèæ: f€ÅøûžI7Çàôü˜g*'ƒäï÷ýÞnh&k`Ë´äÇXÍóºulîÁØGn[ÄMðèH;ÙòJ©ƒ%×g:ï»Ì}®p&ÀWJÝ ¯™xcEÒ=2òøõË…µŠ5 •„Åë÷¥ÎíÊi­F:9òµ_Íõ¼ìò å’û\Ø\X­’ü¼sqñ{Í5L ¡õðÓmÚó+¼§¹C{Gx?aÚ/dÊŽB™teÏä¬ZŸÎíÿ8åÛKéVê~ᾜAÂ.GŸ’ßóØ ñ5‘ÕùÊìì¬üÂ:±`(ùÐïë}n™Œæ´ŽAsšE!«mÐ/ñš_Jç¡oí+j‹‹ÇWeÿ{üÜ£“_hûdÑøyd‚Œ‹hâR™– ¹“ZÉ»÷pBØW2€ƒÒ¤”*G%yò!ëcr=•(yïY²¢nnÜ×ÑѸ.öS°ËñªÎ#4Bu@`÷*ïµ¾™G^W©A/»¥û@PýöZèµ"xK-7Õé&zt¼Œùô@ûÄ# ëÈ›õンÏI2$¯VHˆoˆõd*¶tO*¿Fx]ŸZµ\ÂErOÛ×=Ñ̾LÛB* ­.×.(CC¬Ëá1öº¤Ä/ôX qܦë#(8ÆÇ@s!Z¥Øœá4u#I]—pŸ£LKxÿþ&Ù=i€bî~˜(ÕÍnGHV§Â<óŸŒL&Ô }úñ% =ìG¢ÒjîFË” Ý„=_SG€ÕÈäÑÅ;À}OŠ'éMfîM'H7Y½¤ØÃ}·£É ¨å[”VÁ:ø O>V7ŒDpsˆÖ;~!ˆKnQ§aõ”ë¨Ò(µ/ŒàÚJÎ+: î08¢©:î+Øå&Äqæ=¨›!¢€ðËÇ^ílrã×Ö\êe ÃIQw¿X`½‰lÐß&á`÷±5P¦Uoµ,PÉŽVxГ4ò¥È@¯Ç¸©ûŠ¼;ö4 +-~p;Zû^«ÐÊÂ×ô-‚tóûâÍr£ˆ„W}µµ) §¹Û.wÄ•û{îNòÎàD Ôí;xünõu%,0Iþ¬ô{ÁƒBfîŠXül"‚å&G“£_¢®JÒ )”?Äq@]tK  J?øÒnÑ'¶ÃQ=®¬}Ôx0Ñ?s]¿ë?ÐE‚äoé…­§õK´ªÚÇÆ9;~ïIíT°S!e°)Qñˆå{ªtŸn󫺧Á¯óC‚ÃÍ¢sˆ1šÏО©'‰Äš§¶da_(yÚx8ËqH$ùSq}šèÜÀùÙ¹§î;ÎÀ¦¨Ž<”ÝyÔ«%ø5ç­«{8Ä +-zÛ×zÕZY† ý&{õ@wÏ:wÆÍÂhéã•Öæ§p´ïû¸Öîá¸ÞDð‘0€ËÖ›ç<é¶åÌ¥~ÀjStl>ÀŒód§‚U'ûž¢¾8aÙრ<ò>ï¦a)÷_ÑÛ°lMòiБÓ(TTáCBÅAüT#6ÉkæÁÊÀÃ.Wq—i.¹ò=i)ÒAØ<¾5ú%ç•ô:ð!ݱ]–ÙˆHlÕ›\!nÛÙ“}Ÿã¼ º³s˶ôÙïiUÓaò>|ÛWW€ì»'µæŸ•öEo“mgÄF0óf÷%ÏÁ|™Tîß67û8ó&o7Eßxܧaé +-âÐÐÚ1`)8B\ Â27(ñûõšÅ—ØðÆ}\deDô’kÕ‡W±9(ŽôÊÅÜ|g©½Á¡KæqGp*ódŸö—Ç $ý&}Ÿ2'¾lUzGÆ©¬Z%çU½¹¹¯}Ùù쾬B¯VÜH Ñ¡[\׿;j<—î[^ûzÿ„¸@ïNÛÎL1z!;?õIÏÌ‚acÞ‹›îÆ£îË>F˜§3xñkð°lèƒ+v}¶0çÞÁå'üÚeN%Æ&/ÑE×eÄ…UÏÍ× +-!ô„Sˆõ¹Ve¾ïéV‚§³zÇà97±ã[KSã¾ÜÔs²ò…Æ)è`L½áLØyðíx0 ÔíÕN´]ø)“ƒÃð¶g=åšq~ \úÁ@ÎpR&ƒ‘ +-*8ê;A…£»ûF©–qtZ»øźŸû¨oÎâû*«t+>» ¤Ø8ØL ›¬ÐÃló@ã'Ÿ6Û†Ø5¿æf÷ÓÂJŸn¹ËÙ_!ŸèÀ7^ùý™‡’žÎÔ0 &óN¯]Îýrž_Àé³â>-K"`pcŸÐËC¯Ø¦ roWX€ >Ž-—±!pë8Bd¤ƒ‡•‡ÆObÊŠ tûcté­‹I›_mû û7ú¬¶tŸ ?°1GÈâž?Þ˜ Îg·èÐúg§yvOÿ`y û~Üþ§ÀÜ…ãA¥=<®†ÖÖìé Óõ½¼„s?ž +-xTlkêÀý4Ve>ÌR`"ØúÞJK=3UªX‰ºûM8G¿õ§¡|n<²Ã1›ênTµÌµÑ¾¡üêÍ'X°n-ªP.äØäYTîCçøÙ€ÐSïÿ_Ù5EÒ  bÞ×F¢8½‹ÿö¬»šôŸß6q÷¬{æÐ)bHË"žÎ‚¥±K'ùóxaìÃuA&…û*ã½?}uœ‡$£7Œ^€ì._Û#›Ÿ-•\ D DÅêSÝȈA)jc°#œˆMw>áðëâÏ ½&ØgâA +-ÍÐϾ…ìL¯žÛ#EVËàMù'ê9D6Ï¥û. ‹ÆC–y< h¶MA$-.q¡ Ÿq‚_ŽøS*IÐŒ¸Í®öaª¸‰9:íwñ­ÎÜ,ðPás;•Ã(ŸphŒ«§a{vó¦8u½/XVôçÁ4´g0bD‰iÁïºîëÄÖ» qÐΗJÑ?€ –gÏá1Ý”NoUéÆà¹Æ#ÅËžNâòó NÑ=ý²ÇðL,”\8 8“Tátp>ðƒ:ÝEXÌcd +-Ž$ê Wû£okš â·>òOi–ÄÑ+HnîA1$s^L]kF¢ACTÓ}CžÎ„ŸT»‰O WßMš[|îA©•=sôó9¶Ïé¬ï¿9"Q Mû–úâ•õ…/6·Ž#nºŸ_›¬p<_^\‰Ú4šèE¹>< óûž£Hx&Ê„.`SÁÏ#Q±±êG'Ü2Üõ[‹‚ˆD9E]÷L¯JôO…05w«=oÑñCÇö™é£}õ?À¹ 7t·yÇdÀÿùÞÊï<À}¤©о«PyxÑøh°9ò}1 +-~Ö‡‘™Xê·6j¢$3³¾¶ÊÛôdÅ„Ù6aù¾¥J†²pmýå¹+ìßóÿ e;oU$ÇACÇõéÌÞ~ÃzÓyò‘‡‚›zSñ“e°u¢ò™H ¼Åþƒs8ë.ýb+ó‡/’ zé¬oâí`o†î;hZ&ÿÜÔÈè ›÷5 “öõòãí9âNeYC.jRë3GNŸ»mÈ£…oŠòåêÅ.,ˆš•#ãOp›ˆ‘ >CáI7w_1s3B˜"ïÎ]a0•¦²þ–U>¼ 1ðV—”/¹M<ˆØøSïßjLи/‚~ÚÌróB–Èó7*%+‹„Óÿ«ÈPÑ3°;ÿä>*^;¨Q/Xå4AA.:ºò¸úòÈðÿ©zÞƾ¤Æb“qÞœw&?¦•}Ð}ÀÏæQËtƒ2Ú>L¶ý'Üþ±O»—xë›äéó?ð0t|¡¯Bù¸Ûã,|Ç!StàpaWØöüAi:„jî +-*˜Ò ‰aÙÃàµ)(µÛdDæ×µû ²ÒkžíÏÃó•Ë¨7g:-n(Ðpæ!N}øÃ,“¼æm«œæ]T¼¤>K6Uq"‚ßÌÜKþxSŽ,D¸ºñpwéyx[tH¦Î‡Ð½Ÿ¡}oü¾Ž›PÄæÕe`WâGeûY¥]yÓœçWq¾A<*ü ;n~¿² ƒïóª¦$ë þÙ=½ÿÀ#ßÜ!Ïs8nr6×t¡?õñø°M‡‡eº=`4.?ãm œ¥þ]VÛy˜X¹­e%eM÷¼ä½¯a™n\©ÚC7þÍ3²7j®`•“ÛbR?džŸb:¦F“ø¯PÕiA÷)?[0Ñèré6w[VôóÎU¤ï¼‰ Ò–GfxÔp‚N+ÓÌžãÇ‘,‡€ð0(§V!Ø7¸‡‰á&u²É=eÃQ¢a<2´øí—ÏIƒÚyÀ¦· œ~ê-¡‹ö.A»À°KQP°)¶ŠÆy=vø~B/¢ŒŠ_™R“Rë&›ŒD^#WhP¼Òx¨tƒ’ï¼¥/cW~X…—¼³^Hϱ¯&þiÁËÞ2yS;äÑÚ™¡+J;𓼙?¿3G¢õ¨ÝI¢ŒõO½¸íºòðæ&J­lÔ†›ÈÕ˜ûºC¸¸˜ñhÔ ,é­ +-œÁ: ÅƳpºxY ¨·ûsv)̃ v‰õ=l#þGˆ)‡úQŠ­ÅÔEQE›_°n´–áæ©›ð]Z©Pèí0t'ãçù"çõBÓÅa´xüß$Í}¡y \¡yÄã"9¡Y0QŽp9¼(ÙDn“jm2c ¦e>Iïr@iHA㦯1Ìí§ãÁ ŸÒÌÜ3¿ÿé¹80tÖLß±FçA +-(œ¦XÁû~<Ôp8½ú:sòi¹ÏüÝ'ÍÛ<ÁSõ,tü„—Q{ò[‡¬eDÑÃxôê¦$¡¸ÑûQžè A¶y“ -ÿ<ú-CóM° ý¬„ÚgGeáøJ‘Þ=¾#" –4$ˆ©ÜXÈìCÐÇM}~Q˼˜É’3:çÖ F¬5skUp—5r ›Ì¨˜ zb¾…Sù¾·÷qÅƇ3æl'å7‘Xw˃FÊ¿&K «~·aßüû匽˜ûC·TöYe *tÀ¯y¨nJ¹K½Éa@¿âãwÈTÓ›rçMÙ›¡B<¾éYyœñk¥ƒ +-¥äÒH â±È·ag’õ:%ûŠ"c¾7j…ñ[îYCÑÊ_ÍN5JAF†D‹Ÿls“™Òþ˜JÞªNű˜Jà¼=‚Çýë¦)U~_HgL¸Iq{¿A]Ž˜ô£2XEßp&g!VöEä7× Bôö!0wâFŸ}§!btüºØàjÂŒ¬(ÚŠQö™.³ÊÁM<˜û[xÍwì0÷V%{ꎥÈôã<êþ›5Ñ CDg BÔï’ûD{_µÎ<˜»n8‰ìI]4«&µySÍ–ƒ ØŸ¿ =b¿¸}ga±,ºéoò¸÷ZF6<ÍXù¾zÌqo²‘b7?Pé(O·-åðM:°\$J3ü’(9‚yíJmºôÍSP(•J6€^0Áb îŸŽ‚›&¡z @Ç¡àΔ4‡øÐú<œRlÆZkžˆÍ0•©pjº{û /6äÏÂ4€™g‰zÒÏÀ¬¦w`þøؼ+mÏ¿2_Sµçw}»xó&Q,…èÄC ÝCü:…´ÊÐEšÜàS º¦6¿U¢|€ùQîi‡1ñ(ÅçÏî€L<ã¬,J·}¡•„PÓ|*¹³~¿R©õ¥¾Òœ]ÄMm“ó>g<—SñξÍóP8µ¡BTB~?î–óòYbmQ¦îÓðµºÞÒd-P +-ÜéQ%Î×ïÇÏïS“ŸÕeÕmþš*ÔZ³#ûÊ«¼i÷©öîxÓóC~̼/nÒ@ݬ¿çÁÍ4 x”öa×å%f¨u2rµ´ÐˆáYrMøYvÁш'ðÈçÛ:Óš €}…¯Ä²á"4Ÿ¦rÜ/çFtîå±eQÓQaõRF× ñd% +-§á¿3ó«þ˜DEc+$ã¼E&H“èØÈ›~´ŽI‚æçfŽÌ%ù›VÀêªÄªŒã¦_óâè-ËúšJÿ÷ +-/னžŽ¨³FJGG¨PJJîuq }—iùÂ*8ð+)ïÅò²¢_ÕßrÃþ¬œ…GKÞ…Ý£©O`iÎ'<ºþY·½7 c×lÇÜ¢áÁ;ÆÀ 7üˆ›ßóéM1Ñ>–[±9kÓ.œÝ>ˆÞ>Uæ ѦâRësÿ%°ŒEò—Qô*S Í‘rj³‹•gk±‹"Ð$ƒ¹7 +-Ù7[XQèq$dÎoúHûT­o±ü~dIó€æ£ú&yOk›Vû´ïdùígÁ$¤§™$šÜi:”JÿnÕE»tØÍr è;ütª°ªÄä|·³MÌû¼‚‡Gp"Zoÿöõ/biÙÂù{ÇYÏ” ð¶É¢D}$è'Sñp-Ä©Z #[?A›±Ì‡ ~gãhlÀêì+ûe¹çLOáƾ&À$*í£µi}£mÂÜñˆ”ãÇïx>T.M·:AMdÿV—Ò¢˜ë\ïK‹6”jx‡Ñ´#C›ÍOHE/€Ï¬øƒ´(Ÿdy£Ò¶E-\ã¹sýˆÇµ*¡›­ìû]:¿k$íóàø}º·Ô3r‘û hýð.ÌU³Ö¡!t×ïT­wÚ'r¯M)3—°ˆ I?3þ-àÈ¥+Ž…œÃBÆúæÓÁ#~Ã(ÊSæ?s{L‡É±,÷¯1à(ÖeÆÜgÉ ÷Åùá<¤WcºÝì|kÖnÊß "]Ëõƒo£s´ïy ;p-ƒã¯/•Ð7‰#ÖèRÔÊç,m<É}îvm|Ì´•ä' À…Ê̤ƒÄüKª—vañ-(bßÍüz‚Z<ÜÆM¿éòQÒx@Uþñ+ÖýåMws0”ìð2á}q¶Þ§ºÿ©çÿI¹Ø 2ymëç…ÄD½¤í­NÛ—1\.Ž3è’ÿ±HüÆ|cPžûOŒ÷k²nl§–qM‚8/ºÐ xŸ«¼ +-kÏÆýÊZ=“U“ÿ­ã#õ¦~ë;nJÊ–Pµ^œaÇYð°mV@w¶ülñÀ¹É¯N\²¶„_s’ï2¹ +-PK>Þì‘Z Ë°ëïšÁÑÎúg½qSgÞ¹,{üñh‘wŸÇNœ·¡é^­Þ¨÷>#| î-Ì÷u¡M¯laó™Äa!n+ͦßJ‡…ô +-‘î;GE”{JÒÚñÉ5åM~@^])¹”9jµñ ¤ßÇx¹Ú¾ÑZëú.2¯_÷{Ç4Q¶oTëåéG"—ªž9Õzp¢IË€Æ#Óso¨U+‘ûâ"öu­ŸÕ@˜øÄ…±èFØ÷‚‰Ð;ogó FïYÆ3鶕ûÿ km£CN»úBPá¦<éùcü'H2B\8•Çˆ³Œ‡'Û)ìNsغhdÞ¦‚CÉ„ÈÖïRYÚšU=3j‰ëWTä"U†Í.O}ÔjëQ„(g…ü¾Qs¨5oZS5û¤3¾ºnaZ‡=@ð6ÃÊYWÒÊ`ÇŒu~ÝÚÁÐÌ@w-Ø,ƒªõ‹MÛ¡áÙ½|voóš$™ÖÜ>z÷OiÏá¡m «Ùú/þѨ¿ hg°Oqëû<Á‹e[Ûd’ñ oZãÀÚžœ°SpL‚èÛW<ïSÐßfâúÞY i €›Z?×Ô½ ægöñ?&‰E3‘”ºO&ïÆæ²Ú;¬x FÐ'¿†­§°¬ƒ‹O}ë«ÌnQ,7ÞФ‡™ìð—S×1\ƒ¯ì}\‚æóªãÿ°‚ Ù2p˜‘ÙRî%] +-ÕÂç–à ƒ +-ül<£ ªïÎÛy"믹/ ½QÑjv×L ›L“@ÀóbÀùx,­vŸ¼+6T¦›4JõÎ`Ìû.v§KÄÍDuÿaÍ9{%ø í%QD“¸ túyì“2Œòß<ØZT,+¤<·',`#_[ñÈ!ó j·/âð¾VÐÜñ +-;öbŸ#¥ÝR*#¥KÆ¢ˆÉù³€ÜüªÍÚµk³ ¦´`ƒÙ¦o1Çäœ=Q‘`—éÞ:9ÿk½QãŸÙ1“›D©œâ7nI«¹ùî0[ßW¼Àå•Š„¢7Ø€4ݹÖUL‚¥û¶÷Q¿$8°Upu×k*8S+i¤_ðÖ³æ}÷êD/ã‚”: ?Ž3°ÙPñ0'ù5Sžze·P;ôDú¤ìy£C +-•9éÈ1¤ç·:4E‰jÜ€ÞKŠx‹ñø@_•¬ˆF{-¢{»\p`$üž>+ „צB EthEkhÒÎûÿ½s!žã›& Ü8I-T³h±tùõ¢Ñï ˆÉ2Èz˜nV°™ÚpDH8‘n’7TNÓ«Áös$-·—""~­!À*–ëW†3Z':c@_söSg vïOب`ß.–;@ Q)üß09H£ûªÃXÒmTʦ˜²¿—–ÞGXº÷qæ‘Åñƒ*¤H4_?“f^N|2Þ”1Tz€F‘=XË3"º©ŠGω-ÓÛM}*åç<¨«Ä*üœà2)¹|+ÎÜsé>P­j†ÜPÑíHt‚Ä”T²‚ûÍúFÁó“°æüFpË>,ƒû NÄòñ˜ûÈmüŒÆ¹êaÚÄ5Hü’6úµë³_¬dí#&ãæ$Znþè‘10a3大2&›Œà1›¦&‚À“&oýÇã)OL·…qؘ߾9®Ü—÷åawÞ°•õêV2Ô!é hœ8™z²R¹Ì5Q.ÃN•æÄφôd’?Á0<qÐOð¦¥Ò%¿1Š/“r”\R‰Gv“¹^~Pí“*p»„qIŒåÚ Á‡Ô,ž~d—N”â}­ýM£~BG›Æ¯oÂ%yþI!ûø¿µÂg¸c5rø(Ð>Á Öe/>®Öˆzù샱ùhÓ>G·o¿LLwbhÁ1$y€¬kâÉ/7È]*íaì+,£<XdâömÁ¥h„_çîe´pš/ÃËt¥»Dyd{_ U¼LÕ½ {!>ªyRi£û‚Yý^®Rµ’dR‘!‰'Ä®eœ`u‹U^¬›Ý$³ÓQIR*MaVƒ„†%¢\Jguš8_.Æ"|äŽpÜç“_ùKpò.‘}µÊMxîgæl²|îXr/f,¬gš­êÚhŠ™é ‡Ùu–ß?ü–Ä.Eåõ€7eLÛ»†©à‘mO!ð˜0÷•-;÷©Á±Âiôòö!šØûbû ߧ›yˆSCú|Ž°ŽIü&Ð µÝÀÀmf_”~‘U?¼áûÂS¨ÙÖ¨!yç’Ê<v%Š‘°ºÀù%ŽÝDI~5ûÌzòÙ:ò½¬@¬Î¬fÞ_}˜Ò‰–Ùe*Ò®fRû¦"Üõc’'˜0‡/z4 ‚ëf¦0"ûÐ'‰h!Ž2=ŸìKwŸÕ«Öyt³«¢öÑŠã‚@ó[P¨xè·Î)75Ôƒi~G‡®¯Â” ¨²öêï—}€H¾@ §^îVEk„­ïP +-À(‚ºñø ­"¨ªÝ‡¸ ç‘^–}û¹ +-l5‹(6Ä`O‘ã>dºëëw#²KdMŠ÷Ø,l¯ˆ“ sª÷ò+óbÅ{ÕYYB¶QmR<¸°ÊL¿Dâ5¿‹ÓŠó¡<üzf„ý"WýúÈ9«CÍ O2\•£lµ ¹°ãOÅ•Äuìמ0?V+ØŽEìH,1‘ÚóÛBT#Cr Ø;ã¸Èö¯pZð‹®!Ü&G€=ª%­i<öYúñ0 LgÐNÝx+lͳiðìt‹WZûÁ¡ymõ“º¶ìµ?Ä”ºð͆2Ùn¿Ùt!á ¬àZ‡þ’Jps$Žóã÷Bw¿£¬}2Ùà„THôÖÍ +-mžÐŸ[÷åWþêƒßQy?ÏO2„cIÁŸâ1míXAË ”Æ€¦Žpþ§S¾Š@ï°ü^;ñ¿›tsJgs·\Ö5V1µE.~›UY冬–*f™#†eƒ†}iëã¸úRh 2ÁðWDn:ØÄ.„ÓûÚ«»³¦ßé†ú+h>)Xhy¸Ùþµtç(ëGGQ…i”%AœMD¨Y¸ \4Ä‚OI­À£û³òËÃxÐm'ô =j•GæÛ»mÿw8÷S‹†æ>)[¼«¸›;êчýÿ©S‘7Ж> êüPmö{~PAÕÄh¥+uC½ÁBKzm¸ÑÎO¥Æ‰÷ºŸßbò“’¡êà°·°U#“¼‚)5~­ý<æÑ‘a‡A)æ¿Q q$ XY7˜½>Ÿ“Yýo¾Å>YA•ËÒ}ÿ/¡»Œ„Þ׺T(§»:àX2¯„¨ßJÊKŒ’ÄÐ/h~CV‚Ô6‘i²5šª±z¸<Ô)r~}¦7t£nRQ„]5¿`%Ɇ,Y"iMê›êp*‹PÆ8ì‡Ô<^‘×2™ +-èˉÙ\ÏêéRaŸ®€Mõdx:JhÇB×ò®tËf£ èw¤óA‘ìr/·®F4kÊB Ø@gI2Ií#ÊvÍâ%3u¹W }a_½à±TòmãúCbtsýžUKy¼BŠ‡ IS±k!”Ù‚RVÅ3L7¥5ñ¤ænÍøA×kôûV,“9͇G~ ìVøŒ·Þ‹ª‹(ɬ€t໇³#?l²&Õ.ÑŸŸ+Q,±/íQN{©¶×k‚ª>2º6`F¶C*ϱêüBMô û‡‹É©O|À‰¡>®¶å—uMFÒH~†D—¾pÔæ›Ð§Q-ðsÀüÚ‰ÄYS¦%” J¹D^øùZGã "77£GŠð}M´:ëUUUf;º©5;~éVRóGbÐÃ/r_qÆ ZÝru8-2ÝvF5~&‰Œ­_F³^×Å¢™g›èëd#þ•Ÿ²ÅµB›Ä.h7’sCéj~€[ØðÐ÷FŽÕ$DEÔs¼usÓQ¯;éy0ŸŸÿþgƒ)R V©8ø¬Çí õ@~zìv¡f}ßç4ŒÂ†ÍÁÑBI N×v/u{ÈDÉ„ š_Ô¢Ãsaíì(òë&kÓ¼Ós›2 þ®`´Oîä…,ÀÉãmÓä[ö¿ln_£ò‹V]Ø7H,óä.ëj ýÛt¯³òëFQ‡_º€FWÐz?™]'ùEæ]/‹Öüs¶¤‹Ÿ¯Â‰ºd%­ ¿+³âdr8ö¾kH'c.(SGëþxÓ0ÒêÒ¢Ntx+’ÖùÍÄ{°`5så#Üâ—§¿MÇ€gjâ¢ÕR¢b ËÔ«%ͪªåDsôÎBSÇÅÆ#8öBö>Èy_ ØJÞûî«{)²©¦x “ú½¬ë>ñjÅ]q¯»bn›Ìû7=ï”ý ì–sHQ +RÄMl‘KÇr ÁˆÜÃFîZÕßgÛö0dVG3ç­ìòp‘÷@df=eP>·•~Eôèzø¹]¿Ã?>›ì£åôòùwNms‚†Ï°-ÝóƒüØyóè‡Âo9 jþ9ûˆ;¾UX!“Ù÷4|‚Èî"£Æ´=¯âÌXGï~Lhõ†Í±k“Ø +-›rûüFü|Ác¤÷GÉ®éï $Ú<¢Å±k†H´w 5UsØW°Gµ‰åw ¹®©4\fÕ†ÆD¦¶ž÷a­¤Û'ÅÇ3à’yð §?îNCÓNæÇO¼ËÄ& ?[µÁc Ôº„€_bú‰œ¿JiÄ.Eì!rŽZ‘Ýçü¢P|²  ìóÈ.ýü›¾«òØÐX¤‘÷—©»Æ1”Ï Êò<ºô³Ý¶Ÿ«9¶K.¢@†°WxåÂÊ×ïc®àü\DO®‹Æâíþ—ôc;¬å©§eGwi˜ÑñJ‚áÑËÆcë/}¯}N¼>¤P$dgñ.áá «Àš@mB­&öUÉa¥}õ±…û\÷r\Áxß-¶NV·Œ,¥Äký¬ù¬þ¨0QŠuŸâ¨èñÌÃkÅÕí"¾!Ä/ +-þÙÙDN?§±¨}2„ò:£$_€yHui'Ê6:šßüß'.É}5Ž=Ð+¡¾7[ªÝšÿvðŽ-XtV+ŒJ„ÞŸyFèÝÕµÿ¶ÕõH’ÈŽ—¡¿ç~¤ú],ÒÊã÷mãa>uU5(뙲iÜW~±ËAWÈb‹‹ŠÿÚ’`¥Ü=Eòà;ë³Sx@‡V´AàÑÜ jI¤õõÒdsN>ArßXŒì2yì Ná ê=ЋŸLT§ÁÁ Ù)ýÎçNˆ½‡üÐþ P`È©sgyÚ~n¦Ò$È¥±ø„¯S¶¡öùPÃÆ{ óV›]´}Š!#a¿«à¼ˆFÚoWÎRõ †™WéÃ[é~éK4|ˆ/lõÎÌ&Á‘AXƒ ‚[|~(¿Mðco{÷´ªéIÁ#?®<.2 $8g!eì¹W× ßÓžº~ÃùªY.z¼ # ô 6Xré›ZtÁ a°ÜÏT}Ë„ç´IÜÜ>›.NX6X¹¿°Oaë;0‹ ~­öÉ}ºÅ&Go˜Iußd)õ㬥':pk háˆ]6~dóߧ÷<¾«ð˯!ÓïMiUJ ÞzªqiŸÍ¸/’‚dèyF:ä\ò›ðö3ÐÃWÆFÍñïäw}^Êæ’`EµÂ2´ë(kÝnÝi,µÏyt¬Äx6þ!‰vœàßvt#ýYBZŽYx 0h'.Eô «;ÌòZ3,Õè­S›ÖÏ ÀÔ¨»•‡>˜²§!¬Ë;ZéYºgi¸Ê.Õ›„N+ð+ ¾ã€ã­RIåA'¹ß,Ë#XDg½}RÏÊ¡,êÒc4ûû—Ç [φþRºîBó,àÌû„b=Àx’ñê§ÚO.kë7 ç¯~‹òë^˼ÚKÁ­4ô£:¤ +-ÿïÞL‡A—B0ôª(… kgÀFýïŒ AË}Ÿ}Ö§ÇÏs ñ.o“®RùdmÊ5·‰b»(²«—…‰Dë[¼CÜt¿õ­ñ¾¾Î`ØÁc¢Šì%ðêB1¬cý$蟚žæa’r¶Ö½>OLœ±iÅÄË°›Š—\êêÍÞæð÷ò÷Ùšú·ýFŠ·J‹ ðD~Ùû˜ ,¸Ö×Ùòû°“ãmÁK¯d¸€(ÏêžËjw›YÇB¡J¤ý7×ýõësOŸþ»è’ý­”NýꟌ_¬AïC–P‰y‰„Lþ·.¸åÌ9¤í'•‘Æúd(Ð>EuŽþ¼EV a¶<ø]Nãw&¥^ÙÉžDÖ´]ÖR*YñLÚ +-~ü™¥³ýŠ89‰•›?°/£ã‘Ùï˃¡É 9½š3 ¾-Š!dbMêeØÎËÈkÑO5×å¢QþP‹<ó•2Jn4xØÅŠÁŒŸ€µäû\óxŸg¬½<–‘ðC¬›}¸¹ÏÕ¥WØb£YJ‰M[ß¹”.ºй-?ÎïcB*K¨&ã}ûíÀŽì ù¡¥GŒëÕô)‚½ü¶²× ™|̧+€U¶ÒÏÛ‘æ?c'¤ž·òVÐí«êªøäjÊEøM¨¡„„3~µê&8“ "ðx3ØÜR{Ñêª6Õ~4ûÉ}^2ÂÖ¾µºGÎÊùZ?:®ÏØ'Ý'û†¦'– +-ß'ÿÈoÆïÓ-NœÈžl/áoiˆEB ê’Aóa’2ëŸø`IŽù}Öœ÷ö Š ·6»*»_ݧְô +-²}Çïf«:"÷´H»…eÞ]_ˆ®‘" ô¡wÔ¢˜Á³üüñTmSãE¶*z„þƒð¤÷YTŽFz|But'œH[í·H 44ÎVÂ?¢Ÿª{ÑZrnzZ…‹ Õâ¥TüôòDm‚fôu¡RÓ€ƒæN]nvÁÊ\ìs|Ì}´Ëñ¾Òa+>˜ÇYJE盂•ÂH·Bû¢UìjUï*úqwCæ—GÙb[ì¯Ô±¿)²íÌþ²ÇÌ°Š]özÞ25.:É{P$÷žó hd.†Bcû^ÿ…„7´´ ¨Ö:3!\"ÅNå\$çÊ<6êµ” Up^íðìö£S‹P˜„ BL&ßmi/®„lø^ŠØ»:göåŠü̾šÃÒ1>7^´FôÙçöªŒ2¡¢À7‚Ñr£qÐêQ¿^«ÍñüûŒðã5òÌYn GÏœ¿Mœ¿O!Qp ¶Ÿs´°a›®€©­ÇãìÄ9`ëóLM´^8°õñZǘǘöð‚lnWÜ×ðS‹¨±p× ¿ РËûèç5;pÐú]¹Ë!²#cză®”à…ä\t³ºß>Ï`ÊÚ²6*âÑ?g'©ô"Ÿ79‚«R¬Ó†'6é¹ÌÅRºÎv~ÝùÎøýQ›S)îÑ¢µ†·äõ^—,S ÆÆ“Õô{ +-*€ÊÀÚ"3”•†ú¶ÐÍ4ÚÆÇO€µ²Ä%‹Í®Ù ÅÞ+äÉÔÕì°0zŒ2ÌÆ~yª>ºA\á®WLÞOo_Åzz1PÙ3•¨úXjŽð@4'Ô\ž”}XQ=,Óg´•¶I{áÇ#÷UD¹LÃVÕD‰ürÈBQ­K/›!½~t_v‘f0š‡|Ð/ÛfYWݸŒy9dƒa™£D›žmì!‘…€1ã6ðýÁ+ÒC7〆ÈÏv•Ç ¥+u×gnŒjQ›.Ä"ägÃB8hýÃRŽú¾Lå\­£‰ëo ,}z)¿^:¹©¤S37¸Œt²ëêÒ`7åǽVM?Bš÷x%Y~,;‰|ìÛ0š\¸žƒ+mÔÙFûiˆá"õ{ª¿“ü‹¼”èÂ*æ–ÀÌU5Ù å‚_To„eY_$Âã/‰bs§­Ü…7's„S"3UÌ‚[ÝE×Q™Ç=ÃI+¶r56±óÍCï'dìèÁ€Û‚Ö_Þp°ã¿£ ©¯ãX!æbÌ£G.¹@°—/µžÌb–;Î ÑmFÂ~ÀíJÖ(ªÍägóÓÅI%ÈS[a)wðˬ>½þõâ„N(f³Éu4ubî_@ &#ý;T›ñSÜ#ÖÊÏûðœñ 2˜y6ÔtÇ謭Bž$ª&X¡ÝžÅKUŸ&e’ðKGò´ø­­Ðr«ùÌîì¥&n²¹;Í¡Ѻ¿îÖø¹ï÷q²·«›CŽÎtWLÆá«H/â¨{+N=Òæ‘=y½Ó’Ä@œµT†ÜdÀo" Zs*¤Òö—½æž±ƒÄà:QõaDáõVyô>kÉ¡¢;ä{p†MæÛódöÁæ‡ÈÈ©À…­’`bšd8v˜5OFô\æÙÁö 8el­K_ÎîÃÌý¿£D‹P¶ì·u?? ýcšѹ`®õËÞ)•;wÔÛB)?ߚå8,1 g]"ÝÙ§‚FŠ¬çÁ-S!ÑðÃ}TB°ÈF‘oÉWWÎ%Âc4!¬ãÆì™ó¸ôQ+i7-ÿ…--”ª#î÷ûm8¶@Hyž’¤ßv/R]~x½iA¼Î5ûóÎ^.'Ã2mÒ^Y'¶/rVáKB•3¶Uâj£C/í”í+ú2VË-Ę&þphD­uÑÂå S«o‚h~n-6¨6y‘‘Ž8d ÓÆ<>'º¯Uí Žpx”ã·¡,‡.CN(ØÍPâõ*Ѐ³·ªŽ>ø9‘Í@uhø‚lßA:KªjûÞx°§ñyF¾¼èßo@”üàïÙ zžºµ@‡ì¶Ìe¾K::óÿU4P#§€’V ZOµ‘*^üÖ¬Š1˜BJ)ªÓå@k‚U;Ç;‡ /B?èT^ù½²oX +-jÂ`‚iÕmÜA†Q]_xgì)›‘ +-úBò{£aGQõÍwŒ¨}â·IÑ ·éµnP5'Ô$•û¾² +-¤wÔ¶&j¹û¨Ç‘ÞbƒXÕ]¤Ö<&ñþp’Œ­lë<4Hk©ÚÕVNCInCLþ€yͱ¨JÉÒ?ómæ2EÈ@ù*’éç™óýyŽn|ßÛX'à—‰±öu— †Ûh +-ës“BªGQ£r.q»Ó&órê0è­Ð¤dž­2[ùJ†¬²… ZƒDVínSòÕ8 ´`ÿÑâ‡P„á˜æâùEÐô†E¨’Œ JD(“E:ô6¬X=øº .8qÕ„;ëüûÎ.'¨LšL,n„„L=UR‰ –#Ãñ^*ÏšÙ¦Ô°O :¿ÃÇ)ÔÓ?+mÚZ‡°TéO´Ö}<ý”¢‡Ý›åæYPœš¢Ý y÷?W,ñʽ»œ­î ÖâmT¬úy¦€, +-­|ðûÉ©¤lϳBª¦ÀŠ}Wàû¤"Ô +-»ú»Æ¬Š<-'tÕ>žèõâŒn˜®F:©Yî×l1RסÆ2œTʦT GH]ò>ãU¹¦áãÜðøû”ž×vï @»šÇÒ¡ÔÆ !Ñ;KúF{GÛ3:ð;\`x- +-Œfž…Dv\"dr§Tx袹3à@øiÖ'’9ÀÓ]=d‘­<Ô3åÈ1a8!gæMÅe¬'d°Ÿ¨P)Zä$N€ú2VdÈ‘¯š©óÀv Ò ˜]½¼‘'dÔ…NQ{—‘¶§(¿_”6%Ym4&Ix¨MŒË +-I5DȬ¿ƒ¹­Í 4šÛùåŽUû~íó@_yö&ZĈæAÉ®¿Nú$*uS'ù$÷Á]ºë÷wФ èz×Á¢¥+ÆDQ“´Ø• ^ã>ÏRäËßü<ëá>âA.Nâc#(/am»Â!kåÞX½OŠÉ¾ýü·”®ÉTYRŸ1zìø­5¿°%¸’!ýOl +-J¶ÜèõÖ¢%•‚š>ŸG_’òà;=QüLsPĹlpZp˜nL?×ý:(­¦;! õO¾’ק€Ç•µI®Ézmȃp•¯øCÄÌ–;¤tÈeçÁ²ÑœÀ!<¬Í]x¹!¶ú6qì—î3ø ÷®îqæê;9’•ÅÍfT*‰ügþ 0pÌ?§|…t2%øµü]ç¡X®û°Æ‹­V¤Ÿ’#Rt!ráƒ%}ÃKžfÊ|ÊÊEÑ +-…ê•Á¯î°/3~ýÎjöœ¨¾Ü:ù›>µØ#™Äãý%t·nfިǂûx¢ÄçfÙß3=’xö­æ?F¬ß˜ƒ¶+†³”ø­".cïc^Õûb󤼬Òûç‹‹á¼Q̤AÖ‘ôÉŸûgj[_Bù-,y É2š&ü¼p +-'ú I‚î÷¥„LEØþbEÖ5÷Ã>LrÒümu§W6»šK°R£YrŠ­Ô­fÄe?oT·¤îK,N»Tø’Åšû1 VÆ4Âi +-LÕ„)tw-°E•Šs.³[tôÈ'}~È`°Zècýö}9°,èt°$gy¼¥×¾§€%òÞóѯ;˵ÇA@·XzØ ¹÷üwbíTÆg˜¬ÊcLóÝžï»õ'?[ÝÆr#UÃÇ|Duü!J´~×¥3Sýp€¡†a}#Ôié C(1ggÒààW^GäB°Ü?¬/ó$ÄP*ƒ`K1HÃææ¼¹ˆ´‰èV·â'QÌCel^‡Óï>žŠ­´¨Û†»’¨<ž±h€™~{,_>…BXœ\yÂÕ½o»D]´–„‚ îlÚ‰ÆÛ°ÒÃkʆrÝŸ]³[ êZà|Ý!d˜ ðqÆc5>˜‰–ŒµIùì!Ômí«×èU¨¿ôõ´¾Gm0ô}zÊ0ûÄ(Ó˜Ù'¸c±W¦Ó⿽»ŒÕRZ¢ Z˜ ­²xvrÊ®Vä}ÈEwyáoIXJ$WÇY6Ðù¥€rÑÏDÑ#˜óËú¦–›<1UmÊ«j‰_4ÒVƒ8xl,7ƒõ]$J­~~áѹ¹UX‘ ^Íñ;ÅN ¸åÀ‰»úœà”TŠj?KÔ]øÆfÊ°G)Õ} +-a$)ˆÜ‡§ø­ë{9Ë‘â n¬IË‘¼QǬ ÅŽÎSErÊ©an=m˜‹–.Û7Ôöa¾¾\Œés`!]dr&óܬÕë‚<±É G‘Ù܃ü][ÐõY]_ê +-8Ó¹É)ƒ:1LAkP¸ÈR8ðK žLãÎâKËã¯ë-1U·õ?vÔ–ûÜæcÞNQ%‰Ã¤¢'±xI^ðî1ÄtÎZœÓŒ¥ðcS×¼šòhѺBžþ“0ž)Ðqm"è•%™1˜ ËØÛçÒ}¬ëñ``[ºù˜GÉpBÅ}í¯5É«5¢ÒÌ)í‡ã_ é/Y!þáôw늓ò®[ê +-#Œ Ñ™6çMÉŒuÜÕ6N +-¡JÕJÌ£ï’ꣳ²ù˜Ý’ ½éëó~É<Ò*f 6èNÞ§”’ÌzpLÑ7òà;AëÈJÛ¼±¥ç9KIÖ¤4yG®?{ìo²¯o™RòÞ§ssr?šN)¯ê¢D‹‡šÜS”Ù[r|â!Ô´•„då’–—:—–Lzj£”e^˜8Û5wηFñ_RÜlòþeùÀ5ÀÝPP lU±iÅþËl¦…øª™d@ W@gêÕný×Þ±ÜsÀ³?Óqá5|Z¬š§š$£a)8‹ý—!¬:ÏËRD*¾›"åi¨`ERz@ù,pb¾˜[À’;¥+%<?¸&ÎÆšãE´eŒ[P 2õaV±ÿoX«—{`ÓnŸ^ áÈQ\, Má \ËÕµBcPK„œ¹ÃÏⱓj²ðSy²Çx¸û+îÍûòÃWªÿò›tuúzáõ É{âë‘©&ÊöF„Õ›un­™!ìmvÓTG>WƒhFl³`U>i1÷ª£Øº¨‘{Ÿ-¨fø¿îÃQÐ ªƒg0~!<#•Ï6OíBa)÷Ü^dŸ= kJ ‹ ·ËtB7F±Ër×]HàKI˜Ì™_#Ú|dš!Ð sbxüßøae×CÿÊ ½>ÈNš…°)]æ°AK¯-¡vIƒ®S†´/aàÈÔÇVZ©ƒ0Ò¤ÿ*—‘p¢°¬+6)Áü%mqËâ›mP%†T¡×º÷øåîn¿Î¸éäÄÜôP»Ü®-SàüáB|œ4e5þÄ +-˜4ZÛlø—¦=óù±”ö3Î?·yÈnÌRc¡ˆ=·+øȇ½ñ|¸Éæ^À 3àü™öé¦C L…Où`X³Ô•Íܽe™»gvz±‡,ÏXV(¹œa¼&ºÊ?÷N.õ 00 òµ»]„WÍ¿ÜŸœÎÞOÖa©wR,Ï,N”à‘º#ÙoDKo¦°tÍ6ÒeÎMµÏLz·‰bÿ`²­rƒx]_™Z"öúüÚÈ/„§²Õjm‚€iØ‹çxÚFÂÓ&ã?ºð\ç°!CÍËÉgHbÅþ»X7kçeæ^®¡IêÝ>g˜0¼…îy0U-<ÕÒ.` +-›õ}Ù2:Ø.lÆI# +-Ã\—Q_,~X±;ìaUA†IÅÓ¼¯':X7#O-({8QÄØ“o/Ïíù¨u)ÝÍE­|ç81‚§æI-Šï7XüËŠ|¦·3‚‹ï'™ÅÑ, ÈÜ Æ3œ`äe9\ëf=l«î„æ2$õo­l̃nîµ`•¡5š½…+±;é}x‹¶:>žÚ˜F¯m†o~ü{Dˆ +-.V˃ZŸÑª¶Æ²¥Òl¸z€G]ý˜ô;uÎŒÅ.¶W˜ÿ¿Y}ÒîåíAOñ{ø†ÖPøóÀ´WdHxÇW8°|øÉÙª£6ëe%ÿ±‚¤ 0ˆ Fÿ+—ïèÇ‹†éÌÕÐ<)Uà럑rÖ 6ÝðΈpvïåÆ?VºÙÅø®Œ_aMØ¢¥$Á¦ê«¾‹Oø•÷––äºÕûkcRÙKßꎮ æd5Ï®qm BÇqчsOß$ùºý‘>|\³Î;ÞË8š\®ËR·Íáã¨=š³p`J* +-Êi àÆèÝÄ­fUªs¸FÔw ÁÐ:¼œ·?á@!öfëSW»Sˆï¯Þí>à곜nÆ)” °2!ëØÚ­“trþ'9ØwéŸÍ¾M_ WÍíRá FW#ýR¢.ã¹0hš2Ð0¸$6~ßùìõW¬dró§jùf~? ¯â³¦f¦‹_¶3KÛMWíS {Q·ØE,Húnåò,˜/ÞËR²-_¡¾XÄéÁ=)Äívâ¨R¥JíQþ<Í“M¾'F¹˜ +->X0–C¨D¿ó` +-ƒEÃráXUü+80 zTH‰Ä¡ ÈaE1AÆ@!„CQñð㮆Ùs(!J™r層KzBÝR ¬™Zâc^Ç ÞjÁ ¡0gìªåŸ‡!›ÂGÎæv÷}×xh{Í4?ÞŠª´2Öž§ƒ¤mÇÅEIR» +-PVÍ ÐËV€ß$³W¢6aW(^sy€ -œ8Ô—µ~þ‚éâð¼üëKÜ{–§ÔS½¸2›J €€tðîQöãÞ—œÇÃãj]H²ÈØB~q ‰Þwü1‚ë«4×æÈëŒ +-= x$Ç ‘ï%l÷ͲRhëñ¢h¾a ™tSn~Æ`€Óg­õÃí°™_ÀÓ%p²,tÝ·å,ÝJ„»V¶¯}'µ¤î'Ô"òÇO(â©î4ñ륃æÖˆ›pÉan¡mã‘^$è›ûÕzMÛ[÷ÑUÛw¶x?‚“õÒP÷¿˜½&B)i}ÑÅ ï{—¾äj…±ÂÊvÍ H—õçɤ¢ÍNûŠãð ÈžŠz0¶#%IÝã¨Ø gm’•¯ 5ú N–í5Þ é®ø£[:÷ 7’zf®–ðóEò<8kE‚Ä<&OéÞ–5Ÿ%¨µ£‡ŽVy²­ÅvpA_k¬Ú&ó ,Ÿ›Š?/ê?Ù'–Y–s¹”|–Γ@{HVZX7}3]˧µŽw—©ß÷¤±ùn-¬i¨¸f(kén½a{¤ +-ÍrWÜÍŒE*ñºaä\Ä……Ü4³ª àR'?OS +-˜R°{ÄÌÊopȾ§ž‡­ +-ßÚ©XG´g«©ª á's~”%¯?ÓÀpÖwÍÜ´`ßú±Š«k{›òGC9ÜWf_½ov‚ Mœ·µPÝDñiÞdËԯЃÀ +-çrq³kûy| ýÒ§B¶Àµg2ȶHó&0-/ü¸ðçÄæy|ÂCîýl"G +-¹Þ¿Ŧz_ã¨ãÑ€øU,ö<6^ "°PŸQÝ„c‡í…t!Xý¦;Ã>su³ lI0õͲø6­èOöîÜ}¹ú\ÌZ-n–2¨›xÜóý…#á™.K?òh`åL¿Ô¶Ó¥Ä–j†ç±’þ 99uÿ‹û& úÕ! ýr…6i‹ÒÚü£Wª=΄ G «9S¿û ÝAúèw6ĨGÕþŽ ~ª›òSšOwî5×5½šh½'ìé–L‹KZœxñÓj{eBÓ9’9îP$¨ÈY3ˈŽ(­×.cùµi¨ÁÛZ¥Ñ-sŠ±-ñE¾šºC·|@ÒM b2•1ÿÁ{­ÔíæNØy?H´Ná|œ!žÄŽwìêa +-‚ˆµžg<ø0Ñâö‚‹ù©Ûú2IhÂæö~á€[µÚxg8w*enS)}p2sñOW•"¨Úˆs;í¹ºC¬-zD63®‡Š)…/;U +-¶,™X;~ ŸC.€Ÿ€ŸïX× +-ý›6<–óK~Á“vÔºë•8-ëµÒáü­¥T!e3ó"qîçybÔQ¹@ÂOšæ¸»¡Σœ4õL +->ÝkBM9Î.ÙÀÜ?!aí!ˆžøgöÄÔ@-‰b,¥c˜ýî‹hrfœ æ§ ŸV•̲ûrÝćÔób.õW)ÿ¦J–óUTD#]Ôžoò³ôµØ}’î1Vž%P•DÕ"OïâgÐÒ%g=¡ßZ:pŽ‡œ3‡9ƒ}ÿm¢†ò¦4ºöÈèI P‡ˆ©©õF0ægzÊEx"·¬!¨Z1þQ´ðe_ Ç`<†Vy:ŸrÉÜëäzCkç&8܇d²€m†9† \AgѦŠC2bN¹óšHŽK^ƒÕÃOâQå¶0FTi>öû<¡n#£òKÏIƒ?!>ñáÛRj¶Â4Ñ›¿k›êY `(䈃€ßm,uJ£hÎl‘½[IÞÙ”5aøéˆx]žpqœÈÄ—-`ˆ›ŽŽ¹¾ ”ñ¦ý(:dtCë»Hk¬ºû~^\ùº¦Giдg쳌ø «”ÿ"5‹~ºS ¾Ôp‡ÿeÏI‡^¹ñ{èö#Bex›’Ýã'û0uŸcÙ0KP}CøMÒN¹²š½¤wwoŸ‹¶¥/:û—$aUJê`¢õ7ÐÚ2ìõí¶¾Æ´<œâŒöÓûß ™,“#ƒo’Z˜”xÍs²·Sùý-µšîëRpˆ3èÜsZ N|]ÒÍzµšq´Cp:ïîß²¡GxøiÎFÜ_…^vç ö(¼BBÌ=-ßÄ`·„寞ó7[:˜.“ A÷Ü£9.ÕüÙª~ªµ>ßzךÌÕ© ß©»ä|æ…ÆÉJÃò8Ì£oöÔ×V5}öeÈ›ö¼ +-ys_Ù¬q<,ª_ú½¾õ@% *“Â/3ŠÆ`óàx!ƒ•|ßÛÐÐÐïÀ½ ø%»}ï„Ý”¢*¸==T@F+pKÌp8B4Ô;#ÍÁ¸Nlw(tˆ2ÀçmšŸíb1J%‹óAÆMÏðsØ"~']¦WyX'¾¯§¸<îÚìR>UªLœ× N]q+enÔhÝ7•ñ¨ ú­¯ÑÖüP2&G“xd§¯Õ1‰tR ŽôÁÒ7­§ ¸fp*ÿ‘JÇãJx×ò<²úyc¬á‰FÑßP™Ûü®ÊIhd[3Þ௜*~FQ÷£TʹVõÞþ€ ó¥q;à7=jÛŒÇ﹀ˉEVü fW¸&Àí@(KøÕ[Zð KÅÀÖû®ÞOesÊÉDDF•t­¨!Œ„”2G9“Hý¦}ÉHt)ºsîSÂÏr¨œaêòòO“à>µžêœ8Ï©¬_nç0•ºC»b½?ŽrOnZ€Kú¤?÷×éÏ7L,Á–tøÜ>5Ð&…P×sŽýì+¿* Ž‹ãºM1&ãM‹è‰fz#5¡žTI²ÒGö¥ÃxfP䈊EIfýä网<ézÍ<'+üÎ +-å0@y¼¯îè™MvmÚî½ÔÌÖËC¹Ùt‡ÎOÓ¤ý–7å>ªÕ_¼ŸÈ‰ã!Òbs„×4½p™‘ã¼të¾^¢ùR5 +-v]òŽ§ºæZkö#Žf–BqnRÛÞ¨µhȺO–‡„wýÚ_FÉ)ƒEÇ5IœYwaƒäàg·îȵuŸ<›<Ýyi“µí®=m½ì +-8€”¦nC: à8?3,ÏÃS‹Q¿˜ç‰AXËc«V6üÇ–7øœsC ?ôR±‰PÅúŽJÂúüDtÁ @¨âÇ# 1äE£¬oß¹õdʲºàsMžÅœè6BÝgõdIÒ¦™Ð K~©ï*¿¹Žhð/ƒêCÁÀ`^¬Iø8yø9~£ÞPGÝa6‡85ÓÜo—À =ëyàXµûN×ú¦èWÉaDhøÁ‘µ +-£QÌwoÏóBvñkZ"~FÕI‰?a¹Ž7V6Ú–—@×Äãó­•×ô‘Ü)¼Ó§^/91âÏ2Z'£øi %]ãÓpPò˜ݼPLšxx)¶¼Ãf?™ÛÔÎõ½Ê*P…³C2…³œ’B Ñ}ïä';2ÜÀeGl¶ºAU襛›ä•†²£îo‘¤µ;õ¹Iu“ìò!t¹Òwk¬û|¹dˆ4i–…_mfbk®ûÌßHTß8mtÔWT0øµ ‹ÿúÌžëµ+òy—îî“5 _…öŠ>Ý}ÙL<Þ˜û3€þZ87"%hpü€ù›È”õ°á’}ҽ淊U[÷y̾û–J'œF_XÉÏ“LÀú¦Ë|à蚊4Š©} î3ÉïìrøÕJÆ| ³[eU#¦ûªÑØ +-–e¡xT†b¥i%fà8UQŸ+ÍK { ´2 ÝG×u7ñÄÀp+Œ?j•><·œá&oÐ h#³¬?¿Gÿ•OìÀ¯GuÔŠU®öññd.zÞy`Aü¤ã¾¢ ïã”Fî/‚ë}Œ|;?÷›lÓôÙa¬äzfê>ÛáõÍúo"~Nýv«¶@øq7ú¢Ø7éedkùuL7µüXýñ=)'`ª‘#‹â®OT¡sƒµ»/ÖÙtO™\\öœ²lª ˜šÙ§¿c")ã­–‘O±#ü€ö™¾;‚Oð»`öóPìkAÜÇg:Yäò`PlZHW…Ÿ–ûÞsC+é¦@È~¸¼×Î}Ùùd-¿Do·)üïÀ>µVÁä5°¸©?Ý¿ÚÜ6ÌÝ[· Ø­³ÅåÞv}nbnL·”÷Ñà- ÑSK¸î[ÈQpPŠRf +-ðC7º“WžéÔ­ø€å2Ýø¯5Š+6H½N¶„…5ðl.7†‰ +-²™ÿAkk镧´2©è¹ÿôᶸ(~Ú¶Q]ï9­‡0—Mö­§µ¦Ø¤— œx+ —‰ó~ÕõÊž”ì”PɶéjóáD+}.¢ fÛlÓQôKÚÃa™T’ë»KøyO1[BìõÆʃÀmÓæäx Æ2iûÀ ,Ÿ{×¢$Þ ;¼‡{û€*§ïÜ E¥½îãBFrL«^߇%ëá*è)Ðo“¸‡*±}SÀ‚“‡sÇÞ7Œ`èõÈà4Ð…Í}‰—-Ãì‘1»ÞkÖCõ¤ðh¾Ìo5ì"ÁeÈRÓþV¢çáú7ßZ!>yl'¶ÖttÍÛH‰¯²©??kò­FÌÆVÆôæwåTµ$w YˆÚ?ÖßÙ…ƒCx÷åƒ<Sâ‘%; YŒuËT¢&x¯Œó0:^ ªØN ¸j“³%±PÀ*BVòŒ<Ä•WGÛt¡N™Y™6•BªÕÓ=ì ¿É]=%+_dhcá41ŒºÏ©½y‚Ùåá›_[€@4b#¦&Pس¦* yxF·’˜C_ºHyƒX já5ÚwIcÀÆ?ƒš#d CþW¹~º>ºo)Ü7­?=“ÖdÝ7:J÷¨4¨eôõá&·ÑZ¢|«ÀÛwÕ1ݺ”Õ1ˆøÁBðÄïù$ø‡ƒ8¬kT®¨Ï,(X¼ãÏ}3hø=Ú?7ùA +-ö)=s—IÃCí¦tÝ'#O „ä¿s€ÙÖúëÌf¤N_¸(Ñhr" ý™ûžé~rÐЃE¼Èö9 +-!:¼Æøðx¤wÍ<2ŽeN?Q;rãN9@$€Õ„aÊ‚.Z‹äWô¾pÞà±=%ž&UB‘Àù1œ'?'7³^ûâ~ûÍP{ÝKè¬4Á¬UcOŸ­hC +-b¸oÇêÚõ¬„S&‡! ?åU$¤®o™­Òz6‹˜#Ìw§TEé‘k‘å·ÿáó` âºÞúv7Å¢ýmbc.3}5å„7¦uV›‘í +-x›hgK/ŽÇyQárµÅ2)dÚÿ”ñðKéàŠï#­“Ç@ã>åÕkZ¹o÷³§¶ºi~–œîãömÁêèèø¤<@l̬E`ìZ“1ò©(®¨e2É-™ª¢hø3­Gcô<ÊÄ~H'Q§‹.éç~üøB±Äá´a¥„!ûJ4~Ã]~÷}o­+_àÏeÕzŽšeeŠ½c6†%v R8L§°Ù¾Ø·“‰k>ðc™A‹ûÆú¹/äß%­1=’æ ás¼ûž} +-©Dk¥[pWÿè5îì¸v‰–Îß:ë6îjÞÊÍé |óÿÝ 5ø5Š.­…Oا¢É5¢'<p¤Pûã¨@—Ÿ–˜•îj”‚f>Tg"RPç€ÿAÖéÖh”Ôªµ-jU±–ßQ„},bÜ6Ù½¯BºñÆÈCë`?Þ´Aáý~3û˜=leúº6º`•›<ˆ)†8‚Ü‚Ÿ“j±A~ñáWpï1ºNZÔð{p¢õ‡\ƒ9?3ÄñWáDÿ,y$¢÷µ>Ú¨S kx4ïsÛú»ƒhÃ…† +-ÛPò*Àï& 5¢+2ë ®£uhÌ'÷$pŠbµÂ”¡˜’±á—*nA±ùƒø¡y¼cöy€Ú8Ò6m $và5ž${Cæž’~W=aŒãž^‡Ìâ¾ä.t¬u;Še¿$EòpæK+ü°ØÖÕK·pUI”{ú­|®‡¡nwAö½tßeÚ9Êk:”̼/øàŽ È+N‚Á<ðþ5:ê‹VkƒÉlJ•nï¾É®½«&NÎvÐ0º'yÝéÒb_åYôâ]3ïXmÃ>è&yΡíXÈ+±ßÀè}³RÖ’h;ÔÒÛ´ ã¾ø€ÀÕ}Cý˹ÉžtRi>ÇàNI,×7]¢êÒ÷ߪJ"3Û'º‰º—ৎ*^mòpàöÕ«Ë«¸$˜4:¡Õ-?¿ü€údBè7å`Ÿ‹þÿ]ÄXopJ•ÎÅkÜçììîÓ÷ácÎ`êkŒÜ<ªÕÙ—t—™A,ßÔžyKEBxW½Ïß–HòS¥{:¼¨rnbä{›à/YmýRšsByb7P¥½‰‡ üüÙƒ[sihõä´"Üæ¾iäZ³áœzžy˾´ç1Üßܵp¢ÞTåy(„à]ñȃ‹›ô‹ °y :z YQp‹ÍîaßĺÕg…Ú‘ë‘ŠËKÍ­÷>Tâ¸uë‹¢1è‘wØËñ˜däú¼ æ&’´ÊÖ²N˜'‘ûqvûþO1k@•žáð9­€“Í£dÔ¥u}¤G‡UÎÃ Ø 2Ýê$˜vÓ. Ë°˜ïz‹Y’ Æ04Ù7µ½†Ï5ëñ5áAÿØYqE·ûÌ=X¹šw!XÎúVC%‘8®l0Åc§ÍXó@=µ²Î±o–9y‚ò)“äR Äž†íñw—ðëÞrµé´Æòˆç/±>º/TÏ+ŸØ¦°ù2Z„§_+ã¬E¨R`Ôf@׺ y,‡ÓT Ú`(?—Ö@|>MžåpCŸ-G¡uõÃÈãö…öEìÇ&T«ù ¤pèWÔ„ÇDªôšû’–~î€S๯¦M·ºí{Žmæ,aF—ÌCæMâZÍc낽985¨{—3Y„4ç +-œTË#xŸâ<.=ÿåÔAP*½ð;¬Œ-|ͱß58¸Ï3óZ?Iì¬çédbºA㦊$6ù&pZ)—Aæq]Ø ÝL„°[»ddJT˜ÆßñˆZ›î³â¨k©­ªµóloÓíˆ)±ÜG  Ó}8[­7ðÃÝ­~¼‚9Õµ¦hµpŠÏOðÏ¡ +-øE¿›Á9‚ ‚$Í­÷æÆ07‹v['EòOàð&ôÿD˶OAƒ"hͲØëÏݺ¤5V7mÍ}íaß'O §ÊÜÖ´'ˆcBzJô…Š¨ˆ +-ŠÉZÑm—$‰V™~p‡¾öieÉ?÷”|€ +-+vÔð á¬X'ö¡'e:Ýß4=:e™C¯¾bbŽŸ7·™ðウ¦k}¢›Àÿ­$ÎÄÙ¡(ܾÙ#?1ͧúÅÉVïK%wºY‹ßÓôå•ó°¯¹ü¡eã¤5šÊ@j°ÿTƒÊÆq_^æð[·§[z*WŒ$ÙbŠQ†ö™Gtõõuœ\[ÉjÊÖwÓö›­mõgá5X˃‡¶-~q’››äy«)NZ¥ö)!Ï +-”*Ëœ¯d¾ÌϼVá»ðã?Ê8Á¯y†ñ«œÎ!§ù?a9ì7`GEyíJ•þ¬—*ÁËÊ·¯ ÷éW÷µ‹ƒ ¢Àñ1¦qªNšµ–¼UÚ ”ar†Š:èÆe÷¹ýœŠs<¨VƒyvÏ^u"€.¬y9ÝÙ~îK<֊Ÿ¡ð¤ϸD9ÒàÑíuŸ—…†首 f9HMIoÓÔÕ Ý¼”H–º^y•²Ü©ÆSüš!>ÅAÄÆ~3(÷M?hòœBn%:¦w‡ƒLÄTŸnX6 ™Áú }8û|é˜ÇÜ%ÌË«´©C€_o«ä¸@›Y²–|¾GFGãQs–i38=ÁÕßÄÖ§"y”Ë‚ºÅ»Ô]¶¤êâ¨jºóϳÎ` íõ´Ž÷QHÓ¯E¹äqEN©µÁDÞ—ôYšpÚ,öå«[Œcò;z¦aפ§}€NnWC@DœþFUy<Y‚濒ι¯Ø¦Ÿe °f›|Ã0 ©QÜäd–ŸŸ(ùÁï“ +-:$®•Tž5 Nyš‰âå?‚©!ÊyRlA“Äà÷üö\Ħ²k}ýM¸‚“eMê6yƒß/ÑžêáNYýLd- J=ýë¶ÚÁ}ÈÃyàÌ@8Lb’´È£©óZK¥:<†Léóh³hì fº/ñ¸aS×öàôGN.÷q°vo3‡ßÔ×ïg ¬¹‰ «NbCÄK’à¦<8£#ǹa&/÷U3Ëkn’ø6)ÕPjŠ¥"½fݼ‚ˆ ‚dž<Ãòo\.T¼NŒ!>Ẏ‡œ¥ËÂbÖš+Q)¥¦â'7!!ï뇭ÕÝY‹vv£DêY*?ôìkõÃC )¹iÄÏû“:²*Ýà©<~ "^4júŽÌ ¿^êé´)`Ä>9n|sû„Ó'1{Í8‹#¨úT|㇈¤oÅÔRAxTYˆM<˜Júw­¯,x ¢+º×½—\kbX)Ç'¼MZ’<ÊœºÄ”î6ŒJ]Ô±÷_dºKÂI¯äakÆûÂUuëÅïÜᑇi¢à$L‰ôL+åð¨&­²ösSPäW»íãIÊS hæ!¿ÀdÅN«¤Q­ òëãeù2•ö=ÕúŠq“Ó)®pÇÃÿ¥ˆŠ†Ú^nqAÆOŽN¹ ïm +- ­™¹o‡øU öQyœk y,mW„,8æ¨Û¯7‚¼œÁdòzÁß/Tçó+sò¾r¦'Ú º#¨ûÖ*ufÏ*ç@ÈÃÞÉ +-bÚ,q˜¬'„„uß{×¹\’þaÿß2ó@0øxjú,ûC¥îMÃrÁ8²ñ`W˜§¬ÓϹ…dY_S)$<<(‚ߦÃS,×uŸí>?qþºïRÁcd®%‡™»Ô”mÓÕˆd_Ið$/‰G9‚vúÞ_r = >¤yéžæ lŠ~¯´ÜM/)׎iî&7Ñ8øߺV9i>á…òx•nþŠÖҞصD ñ%ö(­.­R¼Ø¨î_îñÍ üú£YÉ xŒ +-B˹¡$x¤5þwn#i•ú ä×uûóðŸó¡í” µ °;8ûŒÀ..ó±À'™ñ¢b%¥}R’$jÇL-Z¢~ïäŽñ€ÌrÀ¹!/·°êºº_°ÜÄ$»ÏG/¿~÷³’GÉyVSó ‡‹fœ¨µ^L®‘³‚Ü×Ub(µ x‰ÃD¿>aŸ{A1ŸæúÝJÔœzgÐ`î‹%†áù {mò¸:ìîCp[¦áq~2óè.„æ{ÓÀ­2=4=ˆ]<~Ý–#gæi¢ƒÙ3nŒ­íƒñL7©‡P»½JR6X7®’¹wŠiç°ò¡s“ßÛdåsŸD¿¦Æ»ÿoJNZ£hÆÄ42sê'^Êy0¾3ù>Òª¶:2 ÿ»„^ýnY}šŠ¹¦Hs¿¨Y ô œcšó¢e{Ͻœ†Jó  ßÐA½Ü#e¿)„Žû\=W"<|³¶Ö) Ü£HãWëãîÍ­(°èy~£e ìè%Ãf²Ìy¹k•›Îdçþ"ȯlé¾IŠ d[ò0åé™à vÙÂÄX¼Äæ&šˆ¯Ô­£x#wDq Wר74»pÛæÄ™G6§õÆ‘t„»Ù܃»éRYi¥˜87ïÈ£;”ÉÜüäŸÆ ÍãXèDë"Y4ZX¦€ð±ïœQk +-cRr›æ…<Ó*Öž:öýsÃòØ߶)ûžŽA]?ç&ðË“,“p.7½ÌøMÆd~¼X˜ó±r•< 1µ0eKs<›Öš¹wñʇÉßyIUA¶ñXÁM¬6b=ƒ‘BÒ/þGC-änsÏ»i¦`×ç®sî -ð -k®ûXÙž<&yÄ«¼äF Ôy$þ\U*u}²õG23ðæn—µÅ6-+òh¸É¼†½.ÍÄÝ&÷·¤¬²ÔX§9PÊ€&û3 r“lPQ?­Œüž&Ÿ«§?;c%n»ÌæÔÝá Ü€:‹pJdÔøKÓ¿¾¡uàYÃ}»geþàÉçøUÜlxžd@ÃwJ"-›w„ÉÇ£a“ÉCA9 oü„'½C +-¨cT»ªóAš ¬qxñ…9f`z¨Ìt•w‹ò@ψGƒ#,èÈ2êµ>Yn*!§à÷ÍÈÜ}нë%£~1˜Ò Ò+êîcJ¯œ)È ™Wð™ÂVÜ—|{Ÿ8u ZÝҘǙÃIzü&.´ïÒ@ÅÒ’ ¬mƒä&‹$:{ŽK¨aÈãêê¾M߬X´ÝMÿnœ|RºÀÊ®3Øw<’6ó?¸ +-ëû3Í-N×°Ò.±M+cð«oÂœI+èÄÄ ”¿ÓR»â—‰RÂãĶ÷¢×TÙÏ/x$v ~'ø«ø•<<|â¦î„³,5UBE©ðY-_Wr¼Ðt澿6‚2”2{†½™G«ß½úZ”Ø÷rÑæ çÅ!ÏMwŸ|‘äÁº4äUÒ»¨Væì7ÅåþOñÓª*÷ÍÌ€¼ºÇÙ…Ç›@+ÁÑ"Ý'#ZgåY?ÉyÆk:q¿ú]çåõOð™{X„ÑìÂIÀSˆû ½ñyW©€Ï<À'C|½®¡}OÒ_³” FvdY¹¦<^½‹îËe7ªÓR€aÙ‡äorºAÅ@ µ¯ ÍÅþH`ÑçUWÖ7èjî—¬ÉCóå5zX võÍp™XmjTD†Ó¸+€_Û2÷MNò+_Ù1R÷y¡¢3g°¾6øÂy Ã4‚ï“[ïá¾/æè ­Ÿø £ÇâÓ¾¡“KlîÒвðÝ„:7éäñ¿uóð‹NÓ‹õöq +-ÌÔÃ¥@s<ÖÇÑÿα¿ç,8ͽÀãH!$êØéY~Il‘šàÑl Ês ãa9íE¨Î,(ëc‚&gsîH‚ƒ-&?asß}¿J¯ڦäQð0©[ŒûDHwúçqð’öQXèÃË‚ÀÚ;êsªÑkww ;8Ý?‚~­}?"ÐƸÁ;¸Í½ÑðõL§"huN~ÂÜÊ“^*— ÃÊ•Zò?²`9 Y/„M ~WPD´H ~¤äEsK†#Á¾ÂšÇM’$à×¼Fúˆ×'rnE°ººd€&·ÍMLäüð¸‡Ýi‹|*u¯¼PF-‚X¥VÅçñÚŒ näva+»Ä§öSǺÏ[lj +-a$‡Ç—Øwåõ]gŒË@˺çí››ø-÷±¦¸ùóñXÃeZÇ œ³¹¶õfÓûšžzDÆܧ“ÚB‹Bk¨ð D ¼ËúFÁ¾þJÇqù­Ý‡G„¶I_xŸëó–1ð‹sÏëâXès BÎmò?áÓí.8½xØ5iûÈP·Î  qçó(š| 7¼–¥`;`ly9/ùÍb_ÅWSc‰‚JalêçQV:ÚÅd“…ŽdðHä‚<Èyð“4’ $˜¹'DuvýYK7]†_ ˜è¼47d;v…¯àl›ð¸Iô`ˆ²À¦ÒKÞ +-R N_C9w Me’§Ò7’ßâ³!x‘v½4Z«ëpÛ÷øÅ 0£gÁŒ•,[ë nñ<"% (¯KŸÊ‰ö¨Uwd”¡Ó}plÅ3ì“á“iz¦nßì*=ñ¦ 6ÌOÕhBÛWeàþŽÃñ~±ˆsdÖȯZšú­CQ!Àì!±k;IMr¹‡u×X "u:·’¾ Ëúºï­¿ø³ÁIy3Q|Qñ%êJc=TÇÔ<¿dzIÈ2÷ű6._a§º£×Ú KÜ÷zý +-*-ÁáaËÿbúi/×Ò¸F ~û—¾“‡ÅÅ}(÷ü›2ŽV G(we¦V:¥[1†©6ÅàY‘åÛH[>ð¬Ð3Q@!S mG9îí6¡Õ-ÉŒ›õi8·”¹ßÑÚpŸ¶Ç@Cù•î÷ò5Ü78uŒ<þ¦Zn_ªµ¸R/ç"ÛÙßKÓA=ïŽÛøžo…hSü§5]ýVôÄŽnÂàð(N”VÇi' ÍëüY»ãPâíÉcûßdȹs<ûéö°÷Åä­Ö)ÉϳîVÁ\Buvg¬€Ehîz+µ©"ßÔ£ÓíÝàÉxT°®/”"7çŽ3÷.î<÷ ¯M±tÄQÑ›º‹p_dÀ)Ï)Ž{OV¬ðãó¼ö¡<»Ö“XÏï&ÇÇB9ä‚¿&äWyÚÝ,˜cáÀg’“=­;<œ„õ+sv €nm7ÕüˆÏlJ~AÛw³¨ñ™ûF}´Mãd›ò3¶óð•ÿo™YG”ó6õòE,aדŸL7˜ºëT9 Ú1¦‰FسÂÎgG(;á:h©^o%­—áÕŠŸ¢É+E©û˜ØdþzÍ”EË{¯ÞZm^ë›yk:ßûN˜š´Ã¦? ó¨£Ë õëº_"ÒU‚Q¨}ÏÐwB©•ŠTc¨¤Ø·T»/é9ÑÓ¬›|íCia¹¢X2'ؼŒûÌ»ðƒëwЃe1„ÿ¬+@ë.ö™‚æc„ò×QǺ&ã%/èïúØÁÇ('±êêb6sFò;MS7éã>Õ@¼÷¶µó@ $ukÏÁæ‹C®Ó½c•wÀ<4U–Ãiì´²…íQþä´î X¿2Hû„¯¯”–u‰sâOÊ}@Â)+#8ÆYùje.¿8ÉoX‡KZN_$«¹iù¼70x쿵Œ¼I~ǽ6É<–µa›½U¡ñ¸fŽ–s%(Î}¾÷¤ll:œT §A•ÀŽõ4Á‰ t8îÝXq%ÒHý ”…vº‚ì<øm(øý²´fËÌ +-ž¬Éüf,«*½lÝ]àH……êשœø—n*‹ŽsôìÀhX"jß;?„[7ò6õ9OëØ+ýk* +-#jVN ÔÓfÿø% +-ü§2à!~ˆ›mѹE1ÊîwÔxJ6l»rÛÅ>*YÔ“Õ†‰­†Ù1X a®o(äÜ +-À±þ™n›Ø0:‹à÷YR_i€ s-ÎÂþ<†#ÍÕ† pª;C­½“yè'c«âg™º}`¬»ÜÜ´ÖëSŒÕ¦b,™é×YzÁ†ùu綑3dØ*_ 6æ½»tW@,ÉÀ€Jâwò¿÷~µWãðŸ+”ô™šr€ôeµÍŽ¥4&xdòÞ÷Þ}XWZ\){?Zv¼CŽö Á$ïØ)Rc¤gã„o QØØ‹œ¹HÍ +-ñ­­çÒU;¼ãןÁÝ2]Ý*=›ƒ;Z“û{l¶XmŽ‘¯9¨{îj¸Ë«m&ø¡,Xµ½é +-û½– Ú†ÜËw\ýà­îoÚŸ‹—é> / [üü{9RÎÝt%ê&ŽÖ÷¾0%Ý ´Üo–G¬# s|Y¬ÅÇ)¹ëã=¦Î :¥}íƒØ0ÖwÃ(/:¾eä>|@Uÿ€ÀÄ!Y œ‘5²áws;™†DÞæ]ñ=¯zæ‹ GÔkñÒâ,'Ø;Zˆì¸¾Ø=cˆñHW•DØ>!ô¡E«5õZ­`ýÄÃÔ0_â–Úf“ˆ¡€Jû×Ö€r•èñ?ÇY½Q|{CŸüÀ½-\˸6É}!HÉ1`=B±}všíº¨Z;Pªvàâ,éï<Êêowþ<ä¯ÊÑû P’?ä‚žÈÝoiVv„K¡-#|Lò 4£ï;# +-®·rkÚáüž3^~Àá¼Ûn9V'Pÿs#RýâÝîPöjèý5¹5§¢ê(ÿ6¯Ó· ÜÕ±ß÷ÔC)G}æZ +-µê‰ÉÝï(çæ;‡C‡±OÍb¾ùü¤XôÛäê˜ùaÎîò;­Õ,ã¢:ROÛ©¡‚ÜÛDÑh¦‡"?VÇ þúüêw©wcäU#?#¤©=ÃeÎ2¤!9/aÜx9¨'vyV_EG“æ¦ð`xÁÌ=½ +-Ç_6˜×"°|·Õ“Îò0—¦âKGƒO*æu=øÀ)ˆ1XÙûý#éÚ¥Ø;Içè¿£7ç–_¼¯RútõFPFkàÕLlr‘~Î%*Wr>Š1ˆ +-°cÙKûbbìÕû%°Âˆõ#ºQ&-¸W²ÐÌ´‹Žóäš}H=@Î1ŒŽ£®ä™¥}\°–¤xì©ñÒp#죒ë ,+ÞIÑ×-c9Û13–u¨´W¿ó€BaÁL,Rd}€ (6  ~`B6”‡ƒ‘$‡aDAƒŒ1c Æ£w+gä1Ø+ìË¿~½HzëúV,‘÷“G´¸Þ0ÎîÄN_«Ï÷ÒvQ~Û–³%O$³¤ÏM¬ðƒ3ß…Û)¤°ÝõÂfRøþÑ"É㿳4gúÅ΋¢‰¥Š—ö15¢*x›ŒnmŠÝw‰YÁu¥²Øm%«bî.,A„ßÓh[`‡R+Yï>uÓ ”$|G öçÞÿ”̓Gå¶sMMz7ìô‘J¥ºõ¬bQò«7¼ýç0ÎÕH¹«iW ŽiŽ¦baóíÁ²BjgXYµ.ÀÎ/V³¾Ž¹y¸Ê^òè~TŽºÌ]Ø×]hi0ãà*ÐUïrt‘¼Ú¶çïTÍ™0—¿®»‘ú ;<÷|]β¸ÙQçöÝnBŽ¢ãIÉWò`ûc¹ö5¥Ðcã²›æ#fÓ…·œò»Ë¥ÂFBojr)î$õi‚˜N§7¥;Éoåñ‚дm=Ù*$mÿo V GîNœxˆZ‘æǺÌÀ{0@ØÒ†041ºÎ¥%éÁlÜšð1tîFã´«hN,å—(( Ñ13ƒ.h‹]©¡úÝhlÑ‹¡ê–~(½@¬b0EÈM)qßCÓÈø³Ó"M¸¶5Þ¢f]íƒ|áæ}nfXÿ/.ö.º=XÙ\¿E3–pèó4wMV|0üç§Àæê.TNmÓ1Ë!e_fà){sL£lHºe©M# 2ùm^ünNä}%ÇÉœLùAikª]yZÐí´ +-t©t¨ˆ™úa=ðVú E‰µ˜Ÿ&mšT½Íá¹[€Ž{ÎI‘ã¡ jÓ AYÑÓM}MRvS´pC&ºkJ™ƒ¡ÃÌx]üIý”buÍåiçj¤ä'ÛþƒC ( nKš¬'j~nºùÙ9¿Ñ[ÔDe­Á ȉÄzsÞMäÇL»S׈ÊWŒÛç¿ñà²÷(dÀØáWº,,ÝÃPVÃ^é^åÕ§›Ö-`ë\Ø;~Ÿ0pÝ5y-ÒPOá`3ðî¹øâã®èÚ­š,Xš|Ç^ûˆ ¾ +-YY–6v+,â\Ì ¼è>JpÒ˜ßõ­¸IšÏÍ©'Úÿ·ÿgJò^³2 ²»){7Ë(­½ÅC×6ScÉc  ýU­Z“y|ò¥°Ù‡hj[D)H‹3Ðä²[€S‰¦ð‹r9$¿G¶Ë‹âÊýàŸçÒk˜}¦Â#²låC_èÓƒâ; p§b¹¥Ÿ˜)No¡£eÄOˆP‡yØŒ³ÇЮ9ÉîI™ÃÿÜÍ3Á‘ÁŠ¬çÌæ°,=¼ð)5k +-óc8ê\Hô„©½6éŤÂÆ>¥‚ ].KŽJŽ; ݤ¯½òVÐO•jº÷Zž$®«UKaý&´SAkâWÙWÂmÎ _êúqÚuFö¢9eyîë»­Ž}ç8„ºb¨^lœ¬Fß.ùKÅeúèžÀ·ï éwú„X2Z?pÉöÝ’7QE25Aú„™V±!vƒl2­“AvÖ](É'MûØP–ºsn©qÒN°åš„r™´CšÇ×ï–HšÁÂ'Ý~wX2¹¥ðû99î“#ÆZ¶E`üÈ¡^eÕ Ú]óo* á$iËD±•ðq¸6 €¯%÷’ ›“Ø·û¾¸À¾È"?º‚>14ñTQuÁæº0æl™y™·;¦v1ÔÒ«û–ô[îç OFj½¯@w«OYµ§Ú6ßê ¥ä1~«øúéÆr‡7üNíÛ™ØzæhƒJ¹ÕžmM—ë‚~+uùýƒN|ð“s¤¼¯‘Ú,šâó@égêou–¹1$6óûÏ ¹D@"˜ú&(ö¹?þч0KÉ}ø’üJÌü,bÕv2˜ +-SD´}ÌN2“(—n<Ö¡÷k›Ç›šéSpõI…*lÿZËk×7%8…¾w W”³jn¿ªo~Ø ®´;xôÊz—ôŒÀ¨Ùy- óÓלŸƒÈ/ÕûÚ‚Ÿ/ˆñ\Á5ƒV¹RúMÈÅ1$æAˆÂûâ9ïuE …y@džû~þ$íÅØFwÄуRâkÉÕ.4æ<[ñJé¨}ÌÃÃLk¦YjM÷.¯¹¿f¿ùØy¦;¼­dR(œêÿýó7ºM³ÐÊß:í£Á Øm㚟õ™™êl3WâUøi3p+à™üì)=B¡‚˜)ã<Õ2zËvü$ÒhðÆVçÉCyú!®IÆ [ª:Ó€)YZwÙB”ÞS@V{Ï".#à5‡x¸ƒï¾<惮ÈË;ÔÓ>‘zff–a#5óHù(ŽvÅÈt§þ™éz¶68A$b8Q:t—ëøá°Lr%rˆO˜Ë$ðZùTºZ_‚}´Iu…™îãw`§“Ø—T¿ƒ¯[÷35”ìãúáŒL¹y,¦~£à÷tb«¦Î!ÈÜ®O»Dz”7QÜܪÈÉœO@Ù:þ…O<’ÇÇ[~=Ò?æQDÉ#ü%bêÜHËnòL±lŸ¬ùd¸´‹b;ùd ‰lÁÌ‹©³ø=fX† +-‰[)ÍɭȺ[:ÎǹK䛶ï3s†/ +-x›˜–Iä‚ +-˾`@B~Ÿ£ÿÏÀŒÙ繎ˆÜèú…¯€0û6o˜¬§ ̃ÂûŽ÷¹tŽÜkÆŽ¬A=špF(®û‹vÑ¥x¹O5qŽ >¸wœ°Õ‡¶3 ðZLŸgA~8}š0Å(#*Ó_ž§{í…/.€#=©Œíêæðc7?§ùîß]òà|¬HÇ®q1nøQmƒÈ^K9ÀB´á±âüï³pô°ÛÆ8åzÝY¼Kš]©d#†æYcáddÎô©[0'Ë âõ”:Šâ"¥›lf¸}À;²©ß&é:ý¹5äAÕRj‚A/‘ðó1ˆù%Èc +- +-ÁòyZùÿ‚ Ü€¬Faú× ŒÖgßP1qÃë)1kFÈðf£}DðáMÆ´Ÿð·…Mäfð{¨bi!­*ŒÁØ— ‡_0ÓdLjà“xWWÇË-š[+÷BuÊ_íqûä?þ«¦u{lŠ‹F2Cÿ¤òH;TÆk¬'¢‹y̘JjòyXØ +-Œ{Í <´¿!Îû¯Ã²ª*ˆë™`º£sAÚîõò«õ\_3x‘–æìâWµ9“&z‘ðŒAw†ºmZ†p†èª™3¸€¢h˪əê pöáÅ1Gú=?÷×rH õ× 2).:„'~e,F6>ª2+<,J +-I¥ß*)í«\³,— +-t¾z6µ¡R´ÕÕ°X*»$ ‡f'-ñ6:A¥˜Ãî1Í£’æ‰üή¹<$Y! +-P²"¡8©´V݇ ªj¨«Ÿà††…‘>–’¸®ë[ 4OX]Ÿ:‹Cf¥PÍÙU¹º5º,³sx\Ï&=GÈfJÐ pi™ú½#"nª“¿ß¶n‘¼ÒàéBcL;c¯þ}½v «³FBÈtsŒÛKXÃÃÔs¯ÈƒÖÈŒUù¢‰nMîsødeÍ7I™VN‘Á¾Î­Êƒ¬dÒ¹Žð{š°s3÷Ò**Xó…ìßäÓ a¥`) ­öÝmÀÔYÁïÖÝ0ÂB08¿&TäûTÓÖGExp!žânSÌ8çáqFÒáÖXzŒFÞ<W@Œ3XÌÇWp¤zXôþÆ4²$â®ÙnDÏ:&ÄFn#¬ÙkÚU€´–ÿm(÷¸‰²‘é1¾H25‘ˆƒÖ±5‹aÈÑ;ž¦šˆR<Óä±/G<š¸*Iø k»`†Õ +-¹,þ~}O œ²HFmk¥ Ë´…_x?NŸ»¥OÒmdÍŸ[±­Jvž°3~u,‡ÃNW\Qü»h/=F27èýÎÐ’¶}0à•½°N<, <¨W’t4ËF¬øüÚt´V­3:úË|öðKF1¡ÕÅТ"Š‡ûÒùšøîpKÁE&u<3àûÿÖ ÛGÄ7¢.$i]É©sR™ÃTž-Œ +-Hòœ¸á,_vʹ9wœfë œ¡2s†o9¤Å‚¢Ãµi <<æØgRJ£ û‚ƒ00™%™:ï·ÐѼÚUv»ô× úÓƒI´=ÓN¹,vSÝ—ûú!N° ? +-ð.Gm€5&#^€û˜/5u}F¿m9o&}bâšQƒ ȃäèÉ£0—vÍiŸÁ¦Š*Ii§#«µÝ PqŒߌy +-]öS~¤ØÒ¬+²Š#4 –²PáýQÓc Š¾ÊÒvQ‰$»…bYµCB0uüZ¯,¹Ã'Cðó³Ð‘‰@Äs’ø:U™ma=,®‹ ”‡êà<æL³¬@ œM˜3>r‚Õ.v"ál¹¡ó.¾†Ùõ«$»ý©ñiq9¯Äñß"GØe3•À½«°ßJ£e¼H vÖ+AêJØðÏ)¢Ø5þ:Ó½Hh›Nó ÔŽLþ0ÆF0þù OõRQé#XAð0—ö BËr:ø8öØÓÌ™ø¤«+eÕ&m’Ép$?а;Soqé–ÅŠ½e=ù¿Ô½˜œÀ€ÑU·/ëéÏå0öîËše2|V ×M) eM“$6<Ä#‘߇±,·ìàäùÄH›’Ǩƒæç(xXfpžö Œ‰ýYhÝ\νŠ¬~sGGneŠ÷*2u½é®Â/éÃoFf]Bs–N_¼Ú)gí¼)>æjàÎð£ªM™Ö÷y-r·qÒï<ÄŠíÑ[ú|ø¿®aó 52è#ž÷6öµáàë<0Ã2 Žœps ¥P ‰ƒ"@Ö®Ã$6ÉhU"…ÓžJ1 +-yÜ2EÕ›®ý5«ÀÉ3‹°Ô Œþägûsžð‚2µaeo‰f@+9沪ÌàlÌt=ûöapŠî×|è‹c—%á9/fμsD ?ð3ÓW¿œ#P|Ž>6j¬,bbu¯ì‚SN„T1v»L˜oLÚs.!Ï£¸<ø™F‘l¼øMgº” C“äÇaõ縤<Ê3YÊ|vÖÁCÒ§¥Ð¡ärR&ÀÉBuî3ƒ?­Cr°}ônQ@§Õ²+žš°t„ùêaóÈ>üêîû¹ïÚ©yÍêµéOëûO´ê8åܬJöÖÇùªyüàlSã”z?ëiflãÕuß…ô+nf„øYÑÁôdjz8‘¡ÛüDÖ…N8ËÝ'n.3HuT"ꀊ'ƒ XKk÷¿Ì•LË,çÞ¸È7b¼ú“ÆûTu}½¡™÷¬ƒfFó»—”•ÿ?¡ÔÁ(0}ÊC7&^4l´˜Ëºù…Y•(C†¯ ãð*(dÙ\m˜õ£G¶H‘O¦¾|ü ðÀ§ï£ŒSÎdš¡®(’öí„ñÝ¢æ‹d/ƒ‰ ™Ù‡wÎdVâW@Çõ+Uf+bâBF¯ÝÈJíÑû'’Òm÷>¸¬ì½Ýç£9‚GGpø–F‚Þ,›"Ak…ÒA¥ÕÕ,åôò¶3W±¬ÎáM‘°È +-µµäu^%Ù@²–¦Ñ U¾C† Ýq‡p"cjSã[F°óµV»-ÒVyù|HzÑ="–[÷c_?z$:0¿öWô>Ή5Ox¿gñóZ_>õRÚÙÓµÑï:“Ô—AugÂk‹÷xŸ‡åÅŽ }cªè°°CÙÉÖ>c>ЇäMKÏ7NI8;=°oIt +-Ѧ6 ï>qçÈCêIŒJÓ;˜ã!cÃÀ=‡¯œi@´U±“‘DÁÒéÆf€B‹D—ÚÅZ¸„Bi…ßJ>Õê4§ØÏ!Okîãû:™¡®Ñ3>™lG‡Éïãr@!3ˆ>tRK  Q¯ ›ŸM·ˆ¸ÍZ3FÖ ˆRcgî Ö9kø ï1G°†ÒÜŠðè¸Z~ç,k8íã‘Œrcï=2³ÛgŸMT°~×Ëh8õ¼šzuξ1iÐsR6MBjÕ®,û=ørä(4õÐE•Ä•µœã›u†=ÂÎ ¤L/GHL‰^‚ìÀ: «Reâ¾}§yøžö@g¡Ît'm_=ÆGq9ÑÝí#|@N,e‚Ÿ¯+¸¹ò¬ì(0 }14"ÜH¾6-ü x¬p5€=ÆZîsøJ²I?ü¼ö /Àt0æc©aéµ÷Ïå|¬-x¡(Z^5u¥–ÅÉú å· º Iö~–~d•’DÉ”Ed»TJ—›Œ[h#µüI¯¨‚ÆáÈ°IŽþ̣Γé†e{[ëÅÝ6+–B´E«~F~M˜ð#2EöÅïÍE>‚å0-fŽ »¬]¦9皥4Њˆ§P5HHîKÐn~QµÆ-Nbüg75:¨|+œyœ+ÕíÐ!¿@‚UÛ}»op".8©Ê|9ÂB'¶ü>WaÈH$À… €o»Ïñe7·¶[5 åÌ=ìb%þ6Z:å3ÖùCeïSl‰žµ;†.º0®½Jê^T:6Ü sæ!«^^Ç^?©·ágHT O uœ2r}0ñÖ-…Q-<¦ìë}œ‹-l.Ò„PøõNJÃÎ÷Ù>ËWÅß3õ¹QÈ#¥hgïŸz)i³2c* âµqê†À08Ö±·H»’Vy '¬S¯qíýáìá¹Õ¬zM䯂ÏçM:æìøq_$.´{,0éOHnÚ°ñ *A5ÝAV3Þ í\Â>æ ‹^âûÓžU»ÊÜð ®—‰ü`s;)z¬HE›¾ÿRéï`~w”Ò/úƒós…ªÊœ ù#EÑ.%{Ÿ´<zAÖ¾6 ž£5{ð Žu÷3ÑqÛ?º ¥m6<žÈòÖ@gD–ÙlRBå°B¶ë«r´Ò l™ähûfê0gÂmó´°lNÓDùr×ùÁ1º"&¥.†—s­¤=q‘džólCάIoZ7)Då]C¬«’Kž :â¾`ü¨ËTÅiM¶~eOµ¤GÕ16f²TÜf†ð[#á·ÈvŒLwí¾€Ý'Q–p¯%©8›š§öVN¯V¦ËãÆŒ·n¢ :˵½®Ç|ÛžñGÙŽ¯ Ø'jËo1gf°cnûn7lökÒCÉBPÇÑmK’yØ—+¦"T…æl Ex>in¨´ã‰¸!õ›zb«8¸Yw[tÊ©¦3HÏ®)S‚ûB&tEœ¹¥Ÿ¾Ï¥sëç¡Wspx°ë +-o8ŸÝï(µßiN8ʳ+öç¾DOŠóÕÀ#[Û'ý•CB?ò¨Ã “ G |(ÜöÅ&¥ô C6È«^5y±û|z@¸?fï›5l&5&ŽA‡n8F7Æ…‹?en¶øR +-yïý&T†ß€„Û×NåΉ|RO›ÀÿM[.óªOxlIÍÒü Á£ýßÁÖ~ (Ú›~£èFª|+x¦õb©¾Í#©é–’C~΃û¦B÷3º‘ÀÔ¸²Ó(›MƸvú†|XóIèQ$Æϲ`]&j€G–a=ÇätÈcISÓ¶/¹•ò5e³3LÁJ~9™~±íDLÍH@à7–]?–ÚðúÑ N7âÕr˜ÈÆ@D¸Q‚SÔ^Å££•qúiì@Èæp8y­Ï@ [´ä¾RÂÉ~»• lŸïª¿ÏÒ”ù'*½s÷Ö¡Ú“¾«‰Æî{$!tH{qþ{4 C±¾V[œÿœGä̲XÔËU ¬GMvÑ–©G7ÐPbBD,Y‚Š—(j¦©¤…ß*aI®hÑXéJV Ù·'ª«àA:ž±åªdQ/üü{™™~£ !¹>u=LŸ9T^&M7¨`ã<`Õ¬8Ð}ߪðÈfáGçŠCßÐs!Ð}Oí+'òcõm>ª~âtÒçÆz»*l©¼Ã>ºhσ_„“Kò©ñ)o&ú§Û1>EžcÕ>wÛ8F‰3ؤWX)=ÞþÙSƒ_%Ѿ$IqRÖ7™G¹Uªi1t¶I_|¯XÃ?*P?hê«™>A嵶÷­MIƒ@ÉóÈÏ:+eppåC&Ö ÒQ%e?7Õª.ÂHÛÜWsû¸—^íž‹¨–Òù“äy&mvºáEÓÄÌF‡Õ¿©p[ÒΤs3tE‚èmHjª‡_ ûÊSËò¹ò¶©j±O;ü‚Pð&¦Ëû"A"›ºåÖÜ>qìû‚#Q-¯}CZ+œè?½Ö¯5=ve]W†))E”Ä<¨« €b0­Dš 0JPÝ$‹g#÷Ä3››y–áž¹7‚}zŽÒJ™Ÿ`P¯ÜRÃ改l~Dn®L7Ï +- +-Ä54vÀ‰¹ íïî˜mt,ëáüéö·Ã %¢Mï¬Ùf8ý|½ú=¡ê™™øaë”ó˜ZHá§:Šúæ¦Ã¬Ëáá™öU¾dSÒ„ÄãW?ÿgýrñ~I[V+ÿ:xÏ|Xî‹Tt#†‡šŸûýYfŠ,ËØLJߺƒ7üfÙòOת’¬Ìe ?Ýrž¥Î<Ž±·ÂDÝ\ð •@úMÀo bCú…ŸÉæx„ü €6rÚrûp29Ê¢oTïÛýÈöàyÿ´4oR¶ö5‚¼õ¸ËRçñz¦Ô¥.¡ÏSß•é9ñ]£à¹¨SþhÕ²áQ뤧ºKõàNöq%'?ëH´N¿ô…¹žœöÞ˜‡üt—ç©7¹<Mñ ŸèB’æë?¿#1'ÏvƒE¥ú`uj/Éa‚‡Çâp­¾TüŠÊ½Œú‘ù»éò¨ òrÎl&U¤çQ]¬-Å0Oú’ +-=½òäÅÅå§hR¬‰±–¸2 ʈ¥`$bx¬ä¹Cõ<ÔA—ýü0HúºûœÕeœiŠâF§Ó1±Ø;GûrȤ]'4 !’"c {ð3°!1ÑbŒÇÏMÁ€ˆaÇ èxÝ<Ò¬JvÚ@¶‰ŸJ<\t X汶1:ÏñyMÖZ†àî—%‹ íòMâñÝ ÆytvÑ•)m²oàÂcý×柧—8RôÜ ÷ù¸Av®WÊdµwÛŠ ¾Æ>Zfà =ÏT|ë3¨þ8º¹ã' ·j£ +-§X\n:5¡ÃOfà{ ¯ûäb)T$"ç(Rjý*æÅŽ»×©™~ÆPÞÏæ¡€“Ø2v¿¾.€C =^>ži3ùÿ“ˆ±ÒÄ•üæ%ÎcÉÒ}>üs¥®?D0k9—×M®}œ'ðJcu–Qûìlʯ—Œå1)bšî¿A§:C@MùpͨšÚÃo¨p°£j&Öj!Ñg>8[ðxeÝ +-¶¤CŸÆïÑjn˘FËý^!'éé5ºÒ†–’f¨§Íüüg’yn¯$äXÇŒUÝ·OCRäÆ“WÖ2Ù'&ÁÌ<—ÑÊùqCïÉäüÜ\_r%Û÷½ožÔà’Ç^“K ¶¢-çœpè˜tyÀëô¤N†éxDA "í£¥ð“_…ž”µ„Œ-+¾vQ}° ICâCÕãmÓýZx¿óǦ>±|†á4&g€¤ŠabmÉ=ŠLñø¹ÍyòE±‚U”_*ZÈ6üâ*!•}1["ì>GMuSé•”;Œ™\#äásQäeŠÛ}UÜLû>^EaS©ÀEJ.ëÈ/é±6+Kü§·³›ÎKâ0MM¨’ ̹ã{Ç7цª§~觘*˜¦'ÂCK™ZOæ¡>#=æ@ЙîIz´Vnø\aóu·ÖÑÆè×ãƒÐ†:bÀ<êMcknÒhEW}w6¦B{u»'¬tÆsCy‚}“ŒuÌΣÑé–×Ú/1ÂáòXPaÿåx\6j_ØÙ™«­îáç‡Ä¢ü†±ž‘²¸¼fX«úX*`uBÕ Zw¦–m’f¿:ŸF¬Jù6(.‚@ +-õWÚÝ e&Iec®Ê­<üÁ %½±ÛîàÞ\6þ}øÜ I@ê~ZZEWKœH´Ö†GÌ›tü¹Uò[æ6l&F—b,ZhHCB'Çlt×+üf Òpo«JûN»¶\"Ÿ‰Õ|žã¹Ä‹C€t¸ÑÊû€·ªi©A×`YÚâG¦=,Æ"Gånt+3—ÃÑg³Úºg¾µL°>“· ²Â¿DcÛûÔ¬>LpŸë`­ÏsòØJ®£ô„·3ßçÖuŸÒVø0ºû`¥,Îóº¤Wæ?ÌЯãj¥]µ -üŽÍàÊ~™šŒ±´Ü|Å +-Øù¿@™²iT=nÁ£rÊé´no“ WÃo-M+ï‚Ý«%‚Jñø=ðÛzÇrM‘µjëÐ ‰˜1¼f»¯" ,;ÿ£U~:¨ŸáQ|î¹@n:Tý³Ylxdº_å!¿NOÕGàTöxê8ÀFóEwúö%Qûâ¾]ã‰åПH¥žŸÈc!üÕ× Xî¯`û»òoæ‰ËFÂý@ž2ßË‚ø‰M£sÓë–¶Àü¾Ö\`ýr¥›~8X¢º'ι5ÂcDÌ}‘I/° ±ë ¹É²nWÐM3&РÊÇO”°¹½~–vÜWÛ’&î›/>å³ZMñB§/~’U»ÑErMwR +-3Ò]ÿ`†yoÀp<í–µÖà^Î$ñ%EµÇ¨ß^Ũ¸”±J´:±£¹cgƒ:üÖbÖìÓÇ»A8}zT©ç1ûdÕ©¬Hp©H‰6ãÕÐßÿÇÀÖ\+Ëì¸}áfYpáA4¸â8÷%pÖ¾üáæÕR¢}¦4Y)pFÂc’‡èd³?¦ûeþ6Öé_+†£Ž5/yŽƒ@Ï]»Ï(Ç;ˆ Gp*í ‚‰ü©¡ì2_ÍÃ’VA6bÓZŸñ 2SÆš€5/Ë.¿úô©µ˜c4¦d£ãZ©®0J¸hùP÷ÕqKòÆ:Z7Ú/¨†Ã/ñq¢‘Uf™Kì«êLÍG#ÍÛu“–K¥·Ñ&p‰õ¹ÍÏ‚ °ÀJÒƒ0)h73àôBõ°ŒÖJÆ[§¿˜Ð5ðÞ¤º,©§Î›Á„<ëyBŒ¯B#²b,PmìÊÿ`¿}<ͶàÜ“ªW¾C¨Üý*( ãÕÄJ󹻸e-Þw`ûZç +-ØmûE¥½!¿p74÷á)¿fPÔÊ×'ÝDº?%5þÿŒÃŸ[å>Á¹žIWvaÉXž89Cú—ËÔøl¬ºf ]~~d_ȸ‰ç—k%›FÏó,“T|DmMŒÀ¬Å¹e‰‘…ÙÁùt®–))ˆ¢õUà'“]ªr»Ø †Í ÂAö<ª)|ëòçJ G2© ¯¬·ÿQ17Ò”²¨ûŽGð«´NR^7O+ã{îËüz>‡˜vÑ[=pŠŠ[íµÊ$ÎT§¦Ë^”Ô½z_©Í-ݱ£½%ñó¥Àb0NÙ ”RÎîÜ*ÆÍ¿8ðÍ­güVŽ÷>èâžã—Œ ãíù•ìñÎ.Áx¨p”œP:0¹ï…H9»Ò×pŠËÖ,b +-endstream endobj 29 0 obj <>stream +-¶Üçª €òYA;쪅L7)©õ]{îÂ݇f1Ýö´„!܃uÀ©'ò­õŽe¿ãé„Ds7ð\kYøUŸ¤Üs6@ ëÛ:Ddèu» «bÜxô7Œ<íû¸Óû¢_ÁsM»ìû—9õ>ñ­‹`\)ÁÙévb²œÛIZUºl)Ö³• ã¿î;rWÈ`Vþi r}I¸Þ~ ¢Î:’¨“‡¨Ô&5;K&K+zÆ  6¦QWÊ%È?”]+8• ü>rä&QÎLõÃA6² byªƒGmcö]1X°!~κZÒò ™øÖËYɳיv~²oLìIçÆ¢£žÒOUJŠ.kû§ÁGôRµò@Dó Ue­Ó +-ŸLb6Ü«¡ôÒ<7÷ÅÐóñ2ƒÞ7„Þ«œ‘íêXp^!ŠUîð$q­ÿ¡™Âž‚¢öè‰ÜZüå)à'_{¬¸÷Ÿ T Iý8µªëæÈC9»åCµ!Ã}ßêË[Ýw”GOXäÍXíyà1íRJ7¾pjŒÆÀïÙÀ¬”Ì£Ÿ?c¿°ýðø ³2=s\.Pî‘< ƒèUimY[®›øÆMXÃcßÏ)[5TÌðü»[RTË®Võ´µP#¹÷ÑyYTP¸ûé‡U¶SŽí•y¦®5¤ò֌ƒ¤ƒ‘çÍ bÄÃ?zèÐ'0TV‰/cy +- +-’Í^ÏÐ §(ùËCîTí‚\ÒµRt_•u¼¡¤øÜ$AZ…XæÝˆÇ jÇjT*ëA®´Fê&DÍùÅÐÊ T$Sµïïèºmìa·2Ú˜)*Jí³t¡=`Nã±1 Ó¡¶?Œƒ•HJb-a#Ö Us@ºÆ”3ÞÂ>$á6@ý¼ÍºM у,ÔÓT¢0Y#~JÂppp–§ê>]GEèñ5e¥DÞûE­*îC¸?jù—V_„öx:ˆŸYðZ­Ïà»ûHª¶¡óqð'€­ÖŠ¯ºD$üÒ'Çg +-ï‰íg,Ñq@D¡Î.ÑðùÑ‹ÍæsS{¤yÛ¯ º^3Þ>âÓ4D0½°éVîÎC¡8ÜÇ;ÛN åŽÐþM.M¬ø˜±W>¢æoÀÓ‰ ­ýbg(_'»ºûJZÜz¤´†¼Òz¨›®=wûÔû–Ôêá<í¬13ÍžvÇÛH³¤/ˆÚꮕt<5}§`UB`Oä‰>Îðûø÷2£2w@‘ñ‰×Ì~t†£¥Ì€¡€t¹U×ô.9ïSñó¶0¶h'KÚ«.‘ +-uº¨@²ÆµŸ’z÷µ ÜjpÂÃ=ê„ÃÜÈ'òXFÊyICyà¸îLŠ{i ° ËÖO¶úß?¨Ã#Ã}ap ?:½‘éâl™íÞ½F¦ÅT¡¬C ¿g“äÙ„ö»7–ICª5׊¬(Ð,©ÿÎbädƒÑ¾ò_ž?zîÚ#@‹IèÃ(’Qü6Ky=ÂÜ Á¾Âû6vÃ$ Èø]j=Àâ .ºê‚¡î“2ÙbÛ?ç>“M@nnÂ"­Y5¥0¸Ü_×ùqlp¸/»uDSZ³‰B)z!n;s5÷¹é§é¾%(›¤T&™o­útãý5ÆöÛÛ‘ë&€Ÿ·…°Ým:ŽÿNFpjS·$%V|v’Ö‚è³µÇüF€¡*x ?ö ^18¥ó³¯ÿÅŸ£x¼QaÆæïZ€Š>‡#Ö«/^Ò/Ⱥ/¦mŽ¯‹,«áûçÇj +-šîûn üÝýòÓœÉÒªq¯š;ÏwQŹ_'“p¯VàL Ý?ü„_h¿ë £Ò¡üÜ÷6žç£ªÅ@4«ˆ<¢ÄâýB ã¾…‹T¯#t\I@ ‰Ê,´ªþKõt<`òD¤NÊ“G×ƾœ¡Y ˜±YMePy(-ˆãyxί:ûBJ?–ÓäÊ›§lJž'í¼´>gJ7©z§<üŽ`/|£³æ\­Íˆ_¥…§ +-®o PÅ–œ@4ÄdÚÇU £{û‰vO´„B$q6Ãbi.ôð@×íy™8iuVIõ['2`­Õ5yŽ„ááÜGòÆà®ËRô Ñ],W†¶}Œäãñµ)…Qe 1¿IÄFŠÇñ›¨enߢ«Žs˼s>c6Õœ1Ö*ïÕ}Úÿ +-gó§eÆ!ƒ’v¥uàWYÆê ì;fɃŽ“¥&²k.‡Ö +-E ÷x»Ï±éÑ\’«÷DK V:%¦ ÞÒ !{•¸ï9M¼úƒ§ãä©=¶?åŸ@:bž µè²èÜÇO‹/õ=^U¼ÂAëç¢ô Î †Ÿl€Bø4¹%á¿ã{–Pp6w(ûœÿfQeî}<͆%ÀQÃåiƒtu“, xDGÇ“*Tæó¥ ®Ew0ñ:`‚Ÿkz +-ô\“<¦o¥òÄ&‹$‚ýgMí ˆ­öÈfØ«ºÞfGK°Ñc¼Îº`è;0æNÿÓNƒSZ´MÝ2 +-㬙²Ûر{¸5†aa3§äÙ–½ý* Ì©C¢¶? ®´’ƲôSJ?g]Y]_¦›Qà§[À¾¤÷eÁç±M àÆB4ÖwżªNOn•^ †ã!Z6TÆ iºw‹` „௣·2ÀëëÍõÐz ‰YóåX<%›ps^’5|·Pö:-å=V‰ñ-Ò¿OÛÔ¼Üu£É¾':¢ä›ùvˆ¦Ö!YK&݉þñË¢# à¢þm•"ïʧä¼üö5¦µœÙ…Åq7OÖÅßÏ?š”RÙˆY°J¤p\+æ‘d`°Ù/3º†3f;—0²‘Âaʯsâj©*„¨A°LˆŒ²ß'â¯Óœ‹¡ë*tïì ø«‰1QÖãßâ¯3•DÍ[Zˆ²@Èpöè”e"þõŸµ¸5h•¸€é´à[cñO)Ñè<£®sÎOQRbˆÞQƒµ´¤RàGõO$d† ÐHÐxjœCuÁ°§<ýÝc†ÈÚ FdÈb)u°Ä“S‰dæn@p7«äëlU­„ ûNýrWŠ]¬XÐnÂÚ6Y0ëÊ©©€œ`ôS˜àHÈÚÐÉujÂõ?%t²¾ÎØÇÉ£Í"1¡¨‘¬ß¹”\6g“øp°Sß©mRº&[{($ë2p—E=Ô¹>/Ušš¦ÙÁÙt!¶qXgï‡ÝRò|œx£ o}øúÓŠä܉8cÝ7.ž:#‚VÔ aÑŸHI¨öR#/²Úý’izj‘àˆFµOÔÁ·ôOÈ£­êg¨(PùQØÛÃǃ2]Â…H­ÿ̈*ɺí)j™–„5šlråéô 3#[ƒõCÄ_Óín)ôIá¡dvÿ¥ˆzJHOÉõrEdh'¾>ˆã«YGÈ#|bùΗkËìg¾Ïì õƒ$AýO· ŒO@()ÞÝFIÉÁ;;º,•“$œ\¦—gtG»ñÄÐ:Ú1|—~߇ï4ºÝ̱<ÀÐÆ×€sÈwe¿Ë\ŠµÐBÇFõ=Q+ +-qO;5¯*¦5JKŽ&DÅ—Ä,lXt´ª +-Ö9Û¯Àê•!&¤r›ÖnÑlªˆ¯ë>»÷Bkœ«Š–%¨twÀBÁ¡ H(¨Qä#. –tVH:˜Éƒ± ÉQÅ0cÆc0…{¥§Ñè´“ÝGÕ²Â3}=öç5ä)¡µ½Åßû/OAEŒ& »·µtÂ3È´5û¼_L®tó„4ÏVëÑ¡v~É G¨žIz hŽ]À†r~ë£ÿ%1¿¡°gBcùF»2ÉìÆçq¼Àpz#Ia¹yíÇ)Îû|™áªÅ–¸Q¯N?1o0# ÐmY.À^Ãx¼µ7ar°Øé\åÅA+Ü0Y/Àª/w›Uº9®‚ÞrÞ*«l01ûÄkÜå×ÑxnâÛ`Sk‰XIºü¬ +-kÞÒŒãRœ% 1ÞCôǪù´7‡b,¬[UŽ2À,ò3t +-0’EBܘNaÍïî=Õ t'…Ói).YÚëküIýóÑc;Œôèèáw<äRh#Š‡f#Õœšm¼/8åBâ¿hj…}´E\¨TdQgæ ]D?©*…M· «„šìßÐ(ÆûÃõñ­ù嚇 Ø5‹ÅÙx?†(,ç´fá5|-ÎS]·"Aåb~Ú{Õüüî9•“l…”´£›“TFE\´þ4C7ÇøwJØ>öJø§^R74`fÆǶñø¬&ðü*Jô[ÐÒ‰û}½o™å¢nä§õÞ2žYŽá8:—ÖJì&aÌ°È@;t»›n5õvó¨P<£–Øv'Uò^Ï-[ Š˜NĪö+ 'þo“tɃéIÛðbT2ߨ±ìa)׿›óŽoÔü`:A¡ê´ŽðK~…Êì*‚âA—”Çef´lÿ¡R03QZ›‰%@ãÀ¯€„P‰ájU…=¨?vÛ3Wyõ­T>ê?‡ÉVÓ'`"üì*-šì€VZ:¦ŒÕÔèOÉ]¿a渫æÇ°d_8 H˜Òç5‹åùÚ1-S˜FÙbWæõw”é…fWú÷crÔ&Û>¼)«°ÿ•áŒ,¡÷ò¡Z7Ïcæ0C7Ð]1gå÷6·½œã1’vó1¼ +-”Ž"Áæ_I­åæÕÌì¶$'Fè@ªn[DÌZ¡y¾\fž”ÒAAU´¡^ÃjÀM¼ü–½œù‰AxÌãÊëó z?ËD˜‰‡ðžÝˆëd§Tà–ëáõV]õåÖÜü$ åÊZvsúV›4£”…ùüÄÔ›Õö6FUzÀ>‹†«Ô”ViÙ°Äq(Ï7 c +-+@!$í«¾K:^,æñé§6r::S©bC°kêðª€kª OÒkxö*ÌEèékió¾8oúaòûªs€w¡®ê&ϱn¹Êi~£\Ò9дUJ2’¾o6äd PPÊþ/Œ¦àt!;ÝÛO¦ï\~¸CÄ£$,UPŽ—Õ•á' Î/ÂQ—9÷%–Ù¹ i摤{b{^†®±voŽEËʘENókWòtw\Œ‡1¥iåy‡'qä~0އɑhÄïñ´ï‹&B.üÏøË,‚í +-ýÌùHÖîvø„Èï”YH9¿R/8iVD—"ÚRóè&ÿ·¤k‡h$u4T/“xH»¥ñþêRe‚‘#Û¬#…n2h€¤Pz›±A6«µ*•‚ëªyn¦y, ¯òET•|QF‡|²¥O¾ZÏÏóóë“d?¿mÜ“ƒ»üŠÔ¯½bvÓ…bV@^ôtygè(Š¥e@Æ`>kNSœÆ37D~{ДiÀÆP`rÓÔb$°ÅáÓê8°7Úó rƒ¸Fô¦wÆÈ;*¡‰„rh<ªcøn1ûÚM+sOík9H"H·Ë©@ ‹€Š¬S«yQ??(>ÊbFkR¾i¥/û7q<‘ç^ÊÙV<Ð]‚‰£ªú]åÀònc€R-c›·d,j +-X¬ëêd#hŽé,®à!êvø5Õ±`ÆcÇ’ÚÆ*ÓqQ²2#·µ`¥îô”ç¥ñm혼æ͈0Þ¬¦gòè&Á>»Ç¸øœäN J~h#Ec4ßòöRá²û_5X‘¡(:¶Z‹‚”€î÷øàs.d¨Ë✷jÅZzÕ¢áõéüö‡¤ðÓ¼ðç™î¦kå•Øòú¸·«q@ÞRvnÜíp`¦ÛE£¨/߸\áß»¢-Œ9à´.3B÷<¬ÜÞ\ƒáC1üg—üpùÙ×E#÷Q<±ð¢äHÞö¤86U奾jÜgkz[¼Záx“ ºh‘ô/–2û}§xrpN@€»HG«íéo®F’fÕ­ïâ¥Wˆ¢½Ÿºþø(¬AÉA3Ö´+Ê œV'7ÇM4ŸVÄH±‘KÌA·^‡ö÷ *v£eÄP†GOù •ñ¸R±ºeÞ+hýs#æ¿ù¼™$òQnÎÕ*G&¬ +-šˆ1ÐÝâʳõ(¥ÞvCLú²Üçúx½ç†—¤‰üÀ½Sˆê"ª4t9}¥Ê•kb3½&µwlñ%s¼Cäð¬ôqBE-´×ð@ô7˜~ ØÅ>ÚC·ýAx)g—y:ÀšaÑ +-š¶Ž[¤t‹ÑœLñXTºKE6çM‹Ö\ÝUúNîsK¾q@åöÊ$±ðOnŒ’¾,2°–êù¥˜÷“º´FXñØQKÓU®âm• è,¿Ê9ÂÊdCæ°Š™n_ùß±°<…&"ÄÔ­žú·së5’ÓHß0̪¸‰h¿ AEPDjÀ:÷ž`ª}5ö7"£4Ȍϥ;´Z•HÏß8ì'©3Ï/ä¢Áš€ûbôž”­¦`çØ—W–û‚ªy“LöImgŒ åGÁtWëï¹&꟤_òƒ£ý¨ŠÅ½¬dJaLù(OJú Œ³Ú`ÅEYba©Ï™öììlÓ€ž¢â1À¾p>™×Ìßœ¥à¦®YŬô½lU +-BìD½ÿX«ó&bAÉ^Ý ÿÛ~SÓüÜÐñð؃‡&÷ÙbSH"þðÞ^Åyú²x2™a6òËx_Èè$AˆVBêw(s*  ÎÖã6S܉ #~œ)G~‡g¦s2è5Uöaâ 8 ˆåÊ?záÐÓáA¿†nËŸx´Ús­ Ê÷삨3‹¢EÚåZ‘cä8ä‡u»zKôçc¸sŸ[yÍàà>—P ·å[‹•fösPLõ©Ó—Ïž›+u¿Þ jÍŽŠ ¤LnQH”TÜí0‚ÆkÁ¶arú +-HÜ ;…±Nbêî)§)¬«´‹TP>äÝÉþöQH§‡€ bqÞÅpsï£ 4\&¦¡;Dº•Öצ'Щ +-ty¾Ûz¤ µyˆûFÔc†4¨±×âìWÆ`V„²Ë'©U¥È>¡‹ÆA ¯=ùU/¢"giœ{J‰}T îåÇ(LIYššIšFmÉIâáºÍLLðˆé*=ÔtJ›#Æ)Ÿªe4èÖ³ö.Ð]>>+ݨ: qj=*áÌ^"ç5–êÓÂ}ë¸ìæõ\š?ªá„näRlpô_agþZ‘?Õ§ Åصu$8WÇûæ=Úé¿,þ£˜ü' RþŒÕyê&2`䧡Ÿn•þ¤‰›¦Ýå +-áòòt<îÔU½¿Ð-º8 M  +-¡»`ƘŒm}0ÆEFÄ™…»ÊñšË£³¡eàgðÓ©}—Dµ„ƒ¥Ûåmºe'HÉ›”ü¯€ÌO²±ýö7®ƒQsR—?ÍuNC~z›¢£V »BP“Às ~ר{ª +-ùú}Þ2òÙs|ã3X¨Æ^¤Ï·ÝBæ玦“n1ðÌÜô2>HÇ}œ©®?á—ÅItæÂu`Åÿ9Aûf7÷âÙw´|]äÇõjZÏï¬üøÍYÚ‚n¥³p8>æƒØ-4ö0}\zgˆÑ¯‡Ê{˜‘Ù®~þ°„\•ü8ÛÜt+%1‡ÜA¾MWÚÎí8<òNžzÖæX¡W‘nÁ/[õMåØ’3ZÝùS¡!÷e9–2컟­å÷©ß¤kIŠ<|âoʚ¿ 1›NiƒDs?ÿZ'táÌl2~¤GŒPñû¢OÃay‚àŸà§™f脼ĹP †©1”#i_U#ñ›Q Í +-zv/9ùìDëàâûGˆ«S[HÞ "ö±ئªO‚„ŒRë©(vðc8ÔP~DÆ%´ôð¹yL[µ~lÕÌ% NMÑL´ßI¿Xõã­nä¡íË^OñIÁ¢>_Ò>"mGˆ LÕ Û¥=]@éõN“ÒÍ#Ë›XÄO­$Ô+’K0]"÷ñ2.{ gyC;[uãžÔ0ßá9îVt÷‘0R)ûJÏDª–„;ä-íÓQƒÀ&DŠ¨å¯EšïUØ?~¨xg¯ c\ð‹‰~¦¸¹íœ÷· +-¶(¢ùßÑü’,Ü9‹Šb!8míÀ#`i—ÌAéÞè£\¬:¦Ö²ÊÜ¡ÁH’ðÓpD~ø:0RÕüü ´Æ³8Àj¿Ô\ÉjYÜDâ·ÇÔÓ0@骤Vb#ïülªdÝù â²ÁTâÈ5Sd~Â!lÞ {5+jþ>µÆÅ&hWÿ¿öY +-Ö‹:Bl3q6ÁØŒzZ+“c妙%J”Ù*+4Íqj}»îHMw„¹ûHéðeÁñÓvM1gšŸÙWÈ ÷9ž¡!õâa=Gøågª5Ùg)Å0ÇMwáñâƒC’p̯Á‚Ãx, hå{éÿS{+w[›hKÉA?æøùý¹Ÿ(ˆªD¤Ø_ÿi´Ïšyh2Û Nuºé$ UÆP½•îÖÜ’¦VXé,)Øà-á‹¡m5Î#‰­¡ÿ &Gˆ ˜Áïí•´u€GËVá¼#6 e–&mi½½ÀÐm¬VÂ^H•}¢JÂw¦òßÂ$#ÒÈÂÈéyÈ¢ˆ^*QI§öø9"{ç]ÚQ¡À´ÏÍ‘LÃcôÅû5šÉ1Àg»×ÌC Áî·=o~\òÒ ,öÔŠÓ¶­b ‘äùÁ(öIéWó3Õz”ê¾n®&ÍX/*üÞƃADÒ¸÷wt²W'9v;7ëòkÅ/›;(æ:yr"-›±'¨~~Å*ð1p?Ð]·Ä/H¹©Üâ¢äš´yÕä3™4ýu…¯©‘ÊÀ|¡*Ì`‹ãƒæz÷«ÕBá9SMùô<@K@T:3ôQ"ù {îoz± €ŒˆŒŸN¹÷…$VC1%ý©™¼[ œ]î2Föû +-·íèǹ’Ñiø¿‹ÕƤPxÀ íÄ› ý°hôÙ†ôæ ˆ>ôB +-F•™R Ÿ_Z¬tï!ŒMxsL\å4»´fdÐMNû:p`~FÀZ&Á,ÝÖ®Ú«µ¨X´-àá¿¿-Ù¤`’Qdó«U‚•½:ãñ|²Äï©Ø)Àå‚_*DfÙ)žã™U‹ 3tÇñ&ñòï!ݨöÐ< _/)K¿F Â$‡pùÙ¢½Olï#‘Ÿz~¸ %œÏlÉ@g"€¯Ü¾.4-s¿Öº*ÜØ3UŸÖ’¯ÁÓçk\@YiP§´/´ó»³gÈŸ€÷Úª³Gá¬#⽨pøÄ}9möM_î€ þM‘x°a‰~  wN™à—ÿ€7æ?¦“¡RR¿`ñ*Y÷\‚6øá­{ò3ÂÖâcœQaäM4ÀP¨ßPÿÛÊ(–6Ä#|áZ#R–{˜&ô”ûßFxZ[ §I™öa‡Êø;`Êà ]oØ(ç»ëyZùºΡRBo2V«•BØÜ’°ÈÂì:ÆëßP¨L]žäó;jg˜·”µÏfÈÙ}7$ ¯^‰]L; ‘ .Höa/K:xœ¦2"Àüöl­ÊÎ}+ Gæ“;¨–)ï>!•Tet¯luÌ\ä·ÙVˆzø.Ü’e„?ƒ¥%ЦyªJ6mV_nSQH§ÅÝii‰Tøao½ðÁ«Uš]eUºÐ¶r°»s2 +-Î%EÙ³•½ü«Îš0”ü˜ê¥}ÒgÄ­ù;/«çmev ÆTÚÕ¾[žü>3øh‰¸–)Ž§Ììog]À]ÝJN¼€—úÁˆX"à/+=’Á+4(*°{MÇÙf¼4“Þ‘^sá4È}}º)¢T3M.«UeHZçr€s–©¯síËù¾“ Ñ !ã±€¤ß¤Lt—_µA‰ó=ê£5‡î)Æ@)ôÇ€ Xý‡´& Ì·„’ï¡R…ô{ ü›Ud“"é=QMÌêwJ.d‚£¡µ…˜1ºÞQd#ì~×Xô)Cršù9]u&Òsè,ƒœ£ñu¯¢™x·¬‰¬ŠAÑ“Ê +-| j˜c3O  ë"Jé¨ÉàvÀM¿Ã€Í.ÖÅ>C` Ÿ³©Ê„GÚò›z Þ2óŠ:³C?¿íÞ˜zi¥>•¢w0¬ÚÌį¢¾Q+`!È´zmC0Ë8K=zê¼ „"¾&÷•eöh“MHé;:ùÓ¿«ô`¤sl¿pÛM!\t;¡u×QAGIkXºVôºsN¬!)à&írÄPx$tÚlé^ÌÀH9oQñ•3èÆôŽÈ„ÀGu0ˆÝ h6ϳɫ@öÓU*Í5£Ø£œK{<9ŠöáQ‹ürmôä>ûhŠï_ŸƒÑ?ШŒiNT´^IÖTztÃF”d†<¤sÑKÿ²!¢ŸŒôŸ·æ%ZzÌöqô¢¿ÞÞ¾?S¿JõŠô-‰¡&ÍœÖ;1a£ÿÿ‡€-¬Šdmn\Qd\ðoŠã3o[plLA¸›#’èn7l1ˆÁ½gSös} ä»#Τq c6· ¶D¼è™û4é!Ê-¬†_æ0¶*ÄèþZ…)<˜èÞ€#¦ª‰´…è1á<˜—P¿ç¸Ô—}7yö.‡Îäà©"¾”!+·X¡§H‘=a8ÛÖJ¸"±)~€NÔs0â%ÏÀÔúfˆVÄÊ +-îJfc«}«‹È¿‘|úM3eQž~aC¿tb, {}÷Híw<Žµ†1ü\l1QÛMœ¡Ðàÿ­Gâ´`C'A 4 û¢m¢BWgàZ%75Z:DÈ\­8~×2“måçÆغå'Ÿð_'‘®¬ÀÔÜ›ÓÜ´ÐâO+ˆ<«}hÀÄä¬w21!·ôP.›YÔ›2YãD¸´â¾„ E8]}FPç_=·Gýþq5ù…ºïÒ  îE¹±Vp-HÐðƒg=„>®Póǧ§‚v,)¯æ‡t_ó_MÒÉÂ%oÚ¹q*¬*òÊVõ^Þܶ.HÑZ[ÓBÈ·¬n<%þ\^ŸldðnbãO¸xW¸ÐTùª__Ùæ¾·†”Ü×ÔkŸ>< +-= ¢lz{˜ qýÇ(Œ× çÚ' rE]TÊ–`Ñ{“¼­-,ULæ1(?S4²E+ˆw OyÓ4±W˜3Ù§Øô½ÞŠJÕ‡Ù*¦"¢S)¨Vø#LQò`’Ó¾¯qÐ}9bt~OE}_Ty¾C¾HÊ ŠÎÅî“2è—¨HYâÃ¥èø½Czïi¯‚Pv‡5ÿœÖËåíÔsPŒ}Ʀʆs2*fŠ|3=/YØ1â´²EXØŒ¼ðus1Ã}A&‹®ÁG͘V«ì ¥¬„uuKÙ8DðKsxßb"KCWsg,ÇLEÈ"'÷Q¤½ïu•Êá×SPð÷ª ðµYS~„'ƒ§_î+æ!v×Bì§ (ä†øhy91aG†;W2s¦²o2µAÄjs¿´$ 5A±€‹* C(@]Û’šq`”ç϶ÏL¥¸³‹KÓHe²#‘läÖ™\mÏ9ψ`âh,ùS¹Ó‚Ê¢F9¤2ã–Òñ²)üS€g%¡O )—_V¸ ÍÕЫàë«ÿCh¦¢© Á·÷Éò1ㇻ A¦RöKP¼CX¡ñ‘ÑrnÑÅ{ÜMOûÃ/y ÝR`|- )¨ŸvЦFºÅùÌt ÷å^+† ¸Âß´Ý¿¦ +-Ì#®4Șcrö‚Ц-åì«,1FZdaxØ;~ ™GpÿÖŠó”(Œ+Y0¥b*ð,u„î»Ì6Ð`¼ðV©ù Ü÷ÌCÛ…ŸxÒ– >5v/T?<¼ÁÄüHgù·…&‡ð³Ú¦ù ø²›âRj›NåÍp‚w|‰¸A³d¥§‰Ú䦎‘¾E¿¦\-ʯgƒî¥䪀¥„ ÛéîVB…ùTJ[Ôí1áO;#J® ¥(ÞߎxÍ9?¶Í -¤Ó¦º½ÁoJ‚´«ÞŒõãV6“v÷™;x] –˜’qÎØ—Ÿ¼Btß Ÿ(æC¹×ª!‡8ÏCèeŸX1äTýJ§¡óh+s'˽LäÑ}ÖŒäæqµ­C 99¼ 1Õ GÎM¹»‰Ѿ² +-é6 Ýß.¿£6·˜ +-tÐ0)ñØ\é@wpmÇCÅ`H að›´ti¾¿V„¯×7ä6üÖÏz×fàK~’>5Î' ‚HÐ r&¯÷ÄÂœk$ZÌZ;Ëñ…õáñá»r››¾x¹.ëÝѨ®³øy¿D—íuŠlޞ㬙°¼ˆÐ¾¤cH÷½àM¾ CB¸Öuš'»N ˜dÃ'ši`Ø®ô l?(hSqcÄ°÷¯(Ø'j^ì!„h#ýùh‘5yL»Æ>õb\åVäeÕÓéJ¹¯Þ%âçþVò=ÔÌD*¬€æÑ«÷õÿa}X†rëÜîxäúª.+lñ Buáõò3³Êj.gh¸íý0ç'R"l6Ý/Œˆ$O–Zk€²VBõˆné ¥M!ÛA¿§HÕ™ƒŸ|Ãë(C)ϤU[wªÜú•ü½¾äh¬ú—‡u–·ö)mˆ}\_ŸÙ¿&$sƒÁ&S{ +-Žjy˜鶂ènŸ¡#ì%¹ôN"ü<>à‹ß•EÜõ«¬š’ó54ûP{lV9<©€Æ/óòëP7f¸¹/òÔÎk`í ~Ÿs>¬‘ŽöÍ_ÑTo§ºœ†‘êÞ’§ÙY=Úz ‡Ýc#Î7lQ¦SÛ/A—<zð:õ–ëÛj‹;Åxú8ò°ð½S!®Wuk/›y4þ™¸584÷…¸b¼Kt+Ò–œ!eMƒRÓ<@GÓÆ~,w ®)ÕY©ÅVf”¹4ö)BF¼^Ã!°‘øðÙ³$’ª+m ¿Œi˜m)Všÿ æ졳c‚ý+n£­wn2k£ ô¸ èw_°p˜Ö§¯Y9ì –[ž˜ß–»ÉO_íÛwЭ6~pÊ*„ï¸/E¹ypë-m†ú·Û$GnSLLVÝpOƒ0‰õ­Ze>T:ûgÏbL40} v]Ú¬ }8 qÆ^Ð +-f»li•Ãtþ‚ýB,dÄÝvÌjsìørŶ'‰ ª+—¯Öl…xÓì…-Яò|‰í†wz@%Od Þ¬„мӜۯY$ƒj­ÄMi´¯‡¯QGûxà>áîëöqåZ8³¤³KWX~Ì1+þã "1Íæbü:RŸfÃc¢¾er7V&O<Ð>‘Î¥*ÔïMš{1-§/!üøi1í䔃Œ2O–`wßîô=Nò°[!=j¾ÕnCê÷D„ +Ö[e6=5ø6˾좠Í/Š ,æ ‘ŠZ­ö%‘¸1ìxd*ØÀ|ÖÑb›$¢ÒöMx&„! È…µ·±ÀªUè,ɃýÚhÁX鳚•áÁIÙSNšr2ödv4JÛ¬iÒå,aàœxLd‰Ý%anEöpwD–ª±Ä°¼‹T˜’÷¡$Ó¤Ÿ=¥ÿÐò‚Ùî8)L9é ëVýá•€±žs—¤  +-â§Äb×\WñÛ) +-Œ›2ÞiYŸØ·6FÛüäйïØ`3. ‡]#¥äMqÛ˜sR´'þ$—Ñþ2]43Š˜ õr³ÖbSü' >ƯàðˆùªŠG³‰+ó´YуáPü^Ÿ*ÓŸÛä0óËùô+"”ð̦ï£}(ó;Àçˆ+:a“f`h5NòqmßGCHZg¤2!ÙX0ž/P$—e%8HZ•°Gøi#þ(ÕTO}p.Å‹¦]¬¬6zgÒ¢µ9“³´ë©ôôf¬!ûàwÈ‘N@³ü¿–µÛšjàv+³Z+“Ÿ¨tè—Œ»Á•ÀË7û†žý¡#x’š ¶êŽ×·,?P¤ÈÌ(¶{ç?“@…†¤ -KMÀÑ!ŒüXæ‘øµŽDW¹BÀ›O18ãò”رWï§Ügä‘3[Dú¾â›¸‚«}­J ˜Gaeø¶æÏo<ÆãÒÌÀŒÝßÄ+ ^ÕòzêzWµúî ktË醖ü(Rþ³µ‰~¹»Q¹î ×^[ÑÁ ‰k¬, MûØÛ¶ääÜfhò˜ÀÏ®šò˜gþ þ´$ 2ªË¬·\˜Û‰™åŽ“„lɈ"Ý’fÃu‹=¼OÄí÷­ à?[>#5òð¿ôÇV6ÕB€d`BCO‡Apá;‰ŸöѲ¹ïœ'n( +-RGçÔ–ÈÛS@Ú›^òI©Ž$u+‡ ä2S§”­1nãÝüؼBfT]"wE[þÒ<›d„‡@Ÿ=%0öÚ‚U[Æ9ˆ*=¿|ŠðÛ Ôô¦ôqçþ{Ü“ã´j»aÐÍ,ê0¦‡˜ó°z%éÇZ÷þ,€OŒW#ui{BòûÁIb褉˪øÁË¢Õ¨êąǺ­#Ò„¨}&Sç¨gÒp'óaØç¬)ÕØZ } J”…ðóKÎï|ò÷צ‡½ìIÍKò˜È J®‡®²`[ƒ6õ –jç¡ ¹|„a-Ûdå–|ÖJ×.—Äð÷ùÝwöcŽ„_8éÚ¨¾,R¿¿Ÿô>9¥›ã$U{Ñ”í¨ ‚aàÏÁý@«ÙQä®Ãf&ôÒþ»9Šå :¶|f‹$­ãyÜ6?ù&…œ`¹;@î›ÚG…ü.»ºif4Âfx”¡iÁ`TèÏ}Êuô®‹ÓšýÇØJw•< {àyJ7Œ¿¹^ãí››Üç×´IÙsÝÜ“b+K. †ËÖ¹¿g ¦ªûüï•u…8»¦n¿¬›ƒÈšSOÂãqÚ¸â-d§¨è/ ‡—FV®øŽºÓ…¿o$4iºî½$è‘l@âÜBÁÀñîWÊ«ô KÊGO|¶ûUbKÜî  ÁcNN÷ 2;"ïB'&‘@l´±Ž4œ§ýþ¦þ×"C6Ѐ&‡ÏÙ<ºknç¡t8­SCÿ¯Ö&CF`-Ó1˜”\§mÅ+K”ÏçõTü¾Ð%³•¶45<¤Þðû©?\ç4óJ¤sp˜ÏX^Ý…8N$1_êÿ¥¸fÝÔ ÊÑš]?Ø‘Gš›…‚5Ë û¹8dÜàq—@eÊå‡Z2N×>$}íÛÛ9fpù¦G×*¶-ǸZf$­gÚ &¥Ç<ä‹ü’Ë·nÙ×¾‚ÞwÀOì%‡I“j‹p¤±fSo&†Òþºá í"©/»èðÿ¦Uàä^d°A¹É#þâq>æ™”¥‹ÍÉBŒcóS‰²9LÛ“SRÃ6ÙÛWJ¬f9^½ê.hÑn ÛIâ®_r3óà/w•ÆÍ£WlþÂ8bÆ·0Ü3ŽY=DÐoóG„ ÷Î/]$ôÖŒÄ"nM‚„G»ü0fœÝÞ7gŽ)eSm¹»ÁÂÅ&WVr'Ò W—b>N”fd>6%vßô²•‡}›ÑÉëâ;4bi!:ÔaÆÃHÞWfü’ÔOe<~D™µáÀ´IƒzS +-¸¨¢˜R¨AyX·wË “=…Ô`ùB”šf]Ù‚¡'01S3Gý($F¾ùš÷°ëÓs\²è­p³+DÉcõèŽJÿÇ‘óN3’Ý$£ãNýNÂMy~ýžüea7_i×WÂLe~SQè-.Cv„poÐ9ó†€é¼F猧ü•Ù0¥ç—Ä+ê‹IË,áO÷ˆøíw]é< oDY—³œ‘­YÌ(Èôº‹ß–ÅÈššÌV¶É¦BÂgy’§TÍ2êû}FœÛ½fàR0ßq[Zùà£"äͪ=ª}½võïý0Ùã$HáÂïÂa¿0µ‰ÃÉ'øhÞÕ9ݎѤy?9õꃱ(É„°Iô$úwPŸw˜WˆÎ›¡¿â—¿ª~Ø6BÆl«âa‡i²‘bÏጠSG"€_6Ö b\íJ•ß'ò>”nò¨æáÿ¦h Uç}#6¿Í÷ʾF€s.ß^§éÙM%f‹; ºÓ~!Hך?:k…c ÷.…xKúš¹:Ƕ’Ç8hK’¶“oŸ_¯¬Gã TM¨ý@1//¤rB”º°šMíï°›ð PÍ<}Õ~Nœ›¶²È`q*ÄD¯¨!TÈÉR~ò×û[/ÑßèW©$o†J?M>`Ÿ«…“áó?‹eq'8«dbœ»½›Ì©ÊÈkLzó!¸ú·Î}E›ÿ“ãç~Pý B0TïƒX©èH2³ §g4lj 7 Ù:ÇüGàÇò¦ìo.‰œ˜^ì BSԶ̾áq1~òw6ÈÄõSÀ\†~0΃Q.!çÇšJSGªKè¦æªèˆHÚÐrÁ5|à™»_<NÑ ù%–SQiïÅú¥ž’ˆc¾=1—ç™åÔm}—‡N;»'ãó˜†)F13‚~hæ40ô]h¨ Þìóðê[æmQ#ãê*¿D3ð”À¬œ2…ÎĈ†yU9ÓGéÅ%Š‡þŸ‘N”èÊF:m­i[=z-§Žpo…‡oS­õ³ÿp¿£ºojä·–NϸLŒ4[•ãþÿúËœ °þ•Va®òìåõ63þʃãÌâêÿf<ô³~øÏãäéáþú僶ïùì¸@æçèßüÿú‘©ïÌh ó3§Ã×ææÜøÿ±û* `Ö‘‹ÆêþŸ†žù‹M îï åóûþùâÍ" þÝ@Ñáóÿ4÷ý²6øÙáóÿùa­üùfÎ7?<dâóúúÜË#|¾ÐÒÕßÏÚþHIdð ±áÌ.ÚÈ×Ùöþ¢gc”ùþüóßòžQwÑÎÐþí¹¥þÉaïù8ZÛÓÁÁÁO7Œñùô®HªÛ¿F/±ñÑ®yôùþý﮺ÅËsg'úm¹Ô¸ýÿúäú̧Ì@mÂÁ¿´üÿ,8ÈþþÈ´níý4h˜ÁíÎþ8 ù´hÇÀïüþ. +-6–•ˆïþ Š¥Ô²±ÿIýÿ¿ºËýÑ°¨ÅóÿŸ1 [ù³úîäÍŠ¡¡¢¢±ùðš[úû“b 4´úÍŸ´ÊžŸüþúÛ˦31Ðóüû.ÌΚšùþ3¯ü«8âó8͢6ýâòùΠÎÌËÊéýùÓ/ûßð³ÌÌͦ”‘ £ÿî7&A¾ÁìþÍý…ÌŒ’¥ñæKLþã‘/¯Ê˶œš˜þ˜ãù˜Ž¶‰êÿ¦ùþ“/ °ÌäЬÇÈÉÊ’‚Ðùýú!µÉ€ÂÉÊ’~‰ýÿ(ÏϘh½À¨øüþÿú–àâ^ ­ ÃxˆŠ°ûÿØ +-¬5"Md›º½¿Ç¤ðþáóü1ÚÂzzÿ³/7ù¤a¹{tuùý-gñ³›  ኟČyvllþþ\ÒG´üÁÃĽº~jj³øóçNaØóüû´¹¿¾jiýÿù +-‰ 4Ðó’¾fp‡Íéö_ú7&^ÍÐÓÖÚíùóÑ)¶À¿cpÍšD!._Ùý Åð Á½ºÏóúþQ«ôùšd»§ˆloþ4ã¤A ýò£¸Â¦roljh\`bôþõ›1 Õñú™Áf[bd³óõèôúÐÀÀÙùým‘¶à²›e ·üò!–µÁµxecXaiÿå® Füúv½ÁlX[]éùðQ¤üa Þú&v½eb`^lïÿíúÒGCÐóÊev¾¼ºXWW…ýs21H3HùãÀRRQVýÿ¸¼ú71»À»œQûÿN,üý±ïþ¤* ­ªgdaWæôdñ²¿²¯O[áó )¡õÉHeãè8½UNRSc 3 —¶Ô@úþý4¶oYMÎW ò¿rMX€„%D–úô Ï7´·ãúþLïöà f]ü¯»ZOJK{  ¡äú acPÉâßûóc°b_[YJ‡á!ð¡k^™ùð_b‡´úæ´™gûó8¾¤hIIJ™ÎÈë'Z±à£mH£{XKJIÎ͵áýæ7&_ùþ™cº¼·ÿu +-+`úýù0ÆÉåþº¾HHHhýÇñþïQ뾌OMLZî³1ÎêMdû&õÊŒ2eú¾þÿM( +-¬ÆàïþãÎ íúSHHôƤ3I—Âmúüæ fB>GGK«4Lž›,Ïý²~‰þúH“þ¡ˆPFg¯ßû¦ˆ2Ëßóûó­1üäúÜÙ—%lùðš+[‰þ 51\’ûPÁ_ýùª¯íù£‚²í³ýÀµù‚[P²¼là˜]H£ùGÿÛ5çñæ '8;¨þýî7&òœ-1 î°_šõñc!GÿþþïÝdÆøáú‚@þï^’š¨äÖÞ³€À’X@*©Yà€6B.”VB6,Éb‘H†QÄPÃ0 ‚@ Ä ¦s„Æ«e ã´:ò†~À;Ž)¢RGG"ô¾ŠjÄ>¼©xù½})~ù3IûøÛ{ï=ùëo&ûÄr +-nUV¬B=Q^û‘јÿDÑ,†[ªq†3£ÇÉ&jGâ¯S} ¦J~#†Ë6NÏs1’â”—è›Äx°¡õ}ƒB("åÜ\4΃œˆ +-ý”q]±yÈ,uÅ¿¾/NôVq‰e]’˜&W|“[ý[á¯i9X¥Ù×™Ÿ@Åi½¨üü¿ˆ—›8¢{Ñq– Ó-lš}Ú“©grÓÑVU4¿Ê€ÞƒÛ:ü^}Vê¦d ºyuäà„z>ÞHZ8™e:ñNFMÜD~^¥Ÿï[¢Ð_¸À¾9fB‡ýåçÂÍj«D\˜üêZZå¨qiäa<…O·Œ­ç‡c¥@ŽiJ­ * %N Cô¶›ºŠåäýšà–[Þç©,i÷¦ªëX9,G°ßò+6½$+î/™éö·â¶›šD÷¦ xÒ +ÃrhäIj¤Ü284èÒoò`¨÷ñ“:†ŽzTháQÛÔ†ës íþg—Ë^~ÄH¢ÉŸîû‹þÄíòO½ïae(¶°äoíoNŒÀºŽÆà9“†Z¥>Ù×ÚnÒ\½¸eøŸŸÀeÊû\ÑÙ 6©S@t”õi†#w6Ñ=ßDŒý"4É~®‡%‡Haw~$‡°R¬•=­°áÀFõÔsÛÀÏû*¥n“dˆ›žÎLÓ¸e%ØášÆÀ÷}ÙÕd¥÷G凙Ñ7?`KñTbl¥#E½‡ä ç‰eNªæùW\Ôdün–Œ'[éî!Èâ¿ÝHŠ2èoßš$£¹õQcMÈï’þör5]:ÙM¬ÊøäÉv'®ÚDnhF‘1vËì¬A~çk”Ђ'è0uÓ–}²ŒòÛ† T©æ¾@‘eUtMGà§Ý¥À¶x +-#‡ ÷Ûæý½Ï_žg¯–ŸÔCyØ‘ ˆòRŽ!y9,3»©:ÙßQSga˸Š}÷á!qÂ~`þ8¼™óC4X|$Ûû81nZD‹ù@q(4Ж,Ø’Qv¥ºgÏ£e³«2ñ–=ˆÙiå>75ƒþ¸hµùá¾Rê5E©ÑªÇbó°eÙ"?i>­Áro„€ +-ž<ï³O8[Ûó…îÂÙÅŸœEÃüøOÓf5LÞw3ÓÍ¥£#HߺQ¾BYEÄ!™Çå“pŸ€ËG—X0M;ÃvòVIÍ’þeœfY²=UW»NpËøÍ‹7ñs~ÕjW<cTŠU€*òs*èó8ò%$ ’‰„{—;ħ[vý I’VP`Úíó>YF­xæ©„MÆùÙTyèX\°ðÍùW%®Íï(w‚!§ñ¼ûý«è4ÒvêlÇ”Ðs#¿EØ\íÌ0 ŠPà íÇðKÁt²¿’KÈ9 È~¹ÕÉ‘OÄ#=½WÚ¹~ýhÃHuaûÎk7)ý¢e9U+û @y~ÈLFîŠyÙ‘ûôž¸M_¥ž¢û'xW~ÏÈœúÃ҈ƨ¿ôì}}]½kõ¤üüP}H<Ï £ä™fB~„þ¡ìªˆüæVMÌtAr ü*©(DÌûšª‡æc¦$f2i|'£è9‰˜-DyÂãù¿2½LÚ‚ËÌO‘úYº`í—~–”Í/õ¨dmJ\ݵi ¿÷¿n‘ËK‘þ_2KŠ`uz0„ó»K¿ˆî‹p6ºD¨H¨o>ÆþÒV×¾P¾» sç»Õãxù«ô›x€¤ù e1ô|ÀNžÙÆÑ [º*›òSP—ÍT:IÈfÚÙôWã–úy·¾àáMJæ¼Üà¹VñRÁg­«fëw +-¶;DpA%ˆÐñ¤>)Þ‰2|2ï«@©aì–•wøtCM ±Ž0,ºÑõY­nïrÈÈo”†™–¦Ö‘UŽÝæZŸúUI  OeÍHÕllR~•å ‰Nñøi¤€z7”ËöqŠE=¬~1GÎö ’Rƒ5ó¯)õov~ÆCm8E”<ó;X~ª%Í‹Wñ % R.+HAPpc%eÙ¾=€ÆeÉC–¦À€×³3¿µ‘<Ô…eÁøÈÊýZŒf£4êtc¦U+yÈ©q ~w‘JÔ39g$–a?gJÇ 7¿‚Ïâ Ô!Ÿas5¶ ^5}BÕËGýP>?™€³µ8ôUeë7¢k ÿ”ÁóZHžâYÞÅ+T˜ÞŠ|tÐrÝï‰ÕZ^ºƒº6=¦*O~ïVÍ^ñb~Éóü`¯ 19Ø£Ò9ƒrë‡xwMäl+؈Yöújƒ2äùáÿI—Ý”‡I"ÒÕÔ_†ñóUB<7^&¿–Kþ·¼™SÉi R!ÄwxÝ”wh¹0ûTV(8UF¾ëqÏ/ÜÞHÄ:Š8F’ßž˜EàpPÈŽQ«D°galð[=yp°—¾õüh7–˜K’7Ñû°·›i,˜9ÒdÀÔ˜…͹ÁáSg¨¦zʾªÖŒ³¹, žü'T<.ƒÐ.éä7ƒpØÀ‚3?5úKªL¾J"˜8š_vßñ”=öýP0—,»%7k ~Np_ìâPDhꩇ–8ïuœÎ@Ÿäeñ¾åzÑn¥4@¢|ônîËF#£cû!|ÙÇ6húCÇ|-?Öu$á(ZE›³…¤yïÅÃx‘‘}„ÚÇvm ¯\WôsPFÆ5•ªÔ—é_M%x:‡¾ÐüÁm~%7,X¦­’ïóüÄjÉ8U¥/¸úÿ¾¯ˆ<uJó3‚$<›÷s²ˆ ¦Ý¾&wÏh/·œ£¦ 2Û2U¡$û²—_ÿVKòûÜt$rP”‰-]9 +-~¹Ýd˜Ü Ö/µl»â‘î2Ž;<¨£x~¥'i Pø)ï›*xÊxßòèÁFšAQ+ cðcAÍ@VUIö»–aw†ñv@Xÿ¼ü&Sƒj©6 +-QC¯ù{IF½ˆ“WÜ·¿UÇô¬ƒå'—m¦ãÎqˆ[áômûöµjŒöNÎ1+mˆçþl–ÊâÊcD¸}.Ñ »¥ÃͯÚ2ËM8¨š«>ØôÆí¯Pp>°í‘Û.›w¡8lX%~ïýS°«Ç8a1r„fž{ ;:—‡âº»qvN‚tç+ +-˜L}.†uÁµ^)™[Ž°2&;CÉÏBIñ41üQª +-±‘‰é÷Qõ¨e/œÅ‹QÑw¤­ÆØ’¹ÆþW7¢”² ¦?-ÛÈÀ^I4¢e[뺋šVúfäz#CÔ9í™…›a“eÙþà}N S¤Ë¯ I*½—>*“„ÐÊ{æUPßí(À`ŘAð&-.»ÃÈÏ6º•½iRÇG-z@" †4CÑëñ7 +-Eí6QòCws÷}È;{Œ£î|k.$éñ æçç4{mræݾÚ;yÍEÀM”}TöÖ; ¬JäÏêü–84¢ ¬ïÜWgV5À0ò]\6Å4Êç…ã“Ç5Þù‰¨2eûùEГ%~]ZëF_‚´ŸP©†ö@øæ¹f~»ÿÇ8†À¹è¥%"—ëHŒ‡aVAdýx&ÅÝl'?a^š^h~Š?K€n®/éÂëWnóÓ“ŽðMGÞ-UoïzQ£§…!øtùl'±®¯1” Î(Œ*E߬xIИåw€ ÷ܨ5 ‚r QýÕsgëÒZþÇl j·/½ þ}(•"9Š#*íxµ;IÑR"iÕªG(8 +-’-gŒù)l)nÕiýíU.ýaÄ<\" y~,0Å-ÁÇvRs]{™9„ ŽXN‘2c±þ«Yk\ahY$§Y¾ù¡Ü|hJ-°A¶±(b†Z÷xî²Uä-•‘9·q<ì#’&D­å'ËàÙgœ¤Í¨çnþÌOY®®¢ù;#¨ÖÆk>þälp¡îkí òæÖ_ #.°œÅßîÓD¯…x¨lÙ<0ÝÃY× øùÁäÆ>9*–û¬ªß\¾™â…¥uS4KM+ª5~¦<ˆ) +- €¨ÓðZevr¼èäSüÙ¢Ó÷FÀÞ Ñ ð.Kö¯iúÞÐwéM'ùùQ´ï³{ì#‚£]*‘2:â¾,ÓbºY\°² Ã‰ 'ò^—ÆeOòEÈ®ºŸ{7ç77‡©e&0R€½aܱ_ïĆxAü0Ï=@‹–3J¨<ˆ+eÐ7¼ñsö¢Ï_k£v’”ïsï#ko@gþ¶ÿªK‡›Ÿ¢It{_v¸}äNH]@"=”3Io:Â9d;ê!(ªY,fò¶[¯t>M€A?”ñ]8ÀÃïi,ˆ‚±‘íW5–ä“”~—…2.ÅÜ'Œß¿™ªü,´˜•‡†ñ œôùª)PN÷+èk?°é#¯T"¡¹™‡æò¾Ý̃îÁp[ãÑΖ-Ù±3ÂÈV Ëج(Ù|dŸ–lÏ7• p»åËf¾O#ž¼öסÙ-7»cl„r Åz,¦Q‡øƒµÒgQ‡Þ|Äe…‡.Q'"ÿéñó®¯ìå·£6ÄãtÁ}‡ÆGøõw$EATÖTÏ›B­FñÐßMòSØ ñ ¿×° ]T«ŒyŠh‚4 +-}S×L¡Ü.ŠÞÀÞƒšÝ:·¹’ʱ¾ô>0,­ r†çÒm§ŽNe+‚fÁÆÏì?”=ÁZ1ã–P™ÏÍ­Kp#ÝúA•ü¬¬½Y7]æ‘”$¤ìcþì½ ú¨u{°Ó`Ë>\õKt)ŒjÍIâjA ;'çõ}ÓÐÍ(Ô,á© ,Ýë_ÅædZ,—†ÏOißí=ÌñË?ºÎÀ¡8`ŠÌyb¥·Ý¢;X+ב5—ï1¨x»>÷ÊÛ2ràDÊ#å0%Së‘Û®’<.07šÊ‡–üÆÙé¯n‘ô6vB®ûÀTXt>—~PˆÀºRéÆ)3”êI(w/3É!L5ŸÄз!X— EÐóc»Û¨èUÊE>?”R:h5Ÿ×€`½ÃYMÿWxäîýÚk¥œ7‹Ó° îˆú­=DiqšŸq2Þ$kÚ׸›ìó)$ž|=Ô’&r°bâø¨•¤™ŸG¶J`›"¥; +-Ÿf³àMCŒÏíö)ß䯄†$@îQh$†Wƒ\Åù) wQC"Üg@NG®¼1¸.â(,,¬®Ð¬•=Ø€îk-¡ª`´X%‚~_‘cTÝïR‹lCõ 9ì*R‡Y±+ðÍ8±Kcl¬Íï‡áñh«MO'"¡Ç,—ü6à9àš¶Xž‰•½#{eßÏgƒp÷Óæ¦u·ÑÎ5ùî5^¥}/s_«–ª£*ÈpË^ƒMr/CíÞ2Öðƒt†FX¥c>_ç°ˆ}Á Zl³¾¥o×oÍš5Ð~Ïoˆ¦,ã!ÉDÑdª ´÷lø1f›÷¸î—[,Cp'ï;˜—”7 –'.G}6–®Øר÷ýãPO{/†T¸d ‡OÒåÄë¦2¿ì«2uÿi¹ŸºM#ê–Zwù×–³ÞnÚ·Åòï¡Ö§nxýãOú¦c¦Ñ«7Õ——ºi_$ûà¼À uG‡›…Ÿ|ˆÂ„ùÕœn) »´ïÿh#Ùôù9ŒËZ*zäæ%I—Z5§-ò°JC_Ã{j“ 1Œòò‹=æ ¢;Y¢oc. ¹r`Z¸Þk{¼v^£-E©(vñ®ÚoÔÅ|©ÕÉÙyÝpÕ®m ´óS§ˆY%+ÅÝç?oÚm¾ÑÇK[É[Ãp,è$À¼eŸÍ4y¥O:uïüPŽd/Ê +-í)ò û3þž¤»m«… ¹eê5!Ú·þÄ‹ƒŠ‘b•L—_e»Ç} +-É—‹7?Ø–¡QØò·L•æIx„­á9=ùH"³N{êëôwµNÏÂqå})qþ5¹R¾³C߸ÁÙ·yŒNá|ík†’â #ò¤Ó©X-#ø¡°±›ETT:Ìõ:Æ,òè̯±+JXe·DŒ³·^TJËrà>û+}=C öOÓ)ØUؘ©29wº™¡è.ÈŠ;˜æóŠx ê•Î¸a^…zÔÞ¤‹Óº¶” 7´v¹är%ïIàQ†W8ÖS ßçNñ˜·Hû2—y¨ìŸ }Óµ¾ÄØRÈõÄVI™Xe¹ókõ¼Jž[8b³~R°«X6SÅËâíKy&nͪ@ªþH(nØ"ì}_¿8†ÎÍ›ìŒæ¾t+Ǥç˜y/o2È×nf û–=Ž…(€“’òÚ8ºµTÅ¥}Þ¼X›ßx¸ÃOù5Ñ^jYF”n“¤½êÊ…ŒO ¸a¬ò>—_ •bƒõI+pÃ__¦À€‰Ê#ió!ýu•*gªt…§GµâÝX§–u0ÄSÃ?k÷!#!ÊÇæ ô@'ØçìñèŸç$o™˜ß,÷Ÿ* +-.ªºžú( ô1Mâi½_qìËs ôHÑô‚ÆÔ$ù ìJwÎM ¬rnUݪܙimÿÍ‚k‰sw¸ÿÜ%ùÙëê>؇+öMÐü( +-2tƒãjýËÙ;ü¯’®]↓Ä?¯Ü +-½-*f¶ƒè#Ø *¦ ˆ±3 ¸G¾©dô}û:_G§ñ˜&F`€‡ï°×šü×Éù ¸Ä>ù''/®¹V³;ºîFžA1Š7ç£ p]({yU¨2r‰ qÆd—šfÈM° „G¾*ÍäkÚÆäŠ\²¢ ¼ vqӌݠª8ÑH±ÛƒFîƾžÍæ–uîøAïE’ãÿðÐð°þ•6ŽÏIF7rŠä'¹§5ÎQ'ƒ¸ÏSgÕª‰å”/n¬ÄœŸ áPˆQY¼)EÐauÉø­ÕL[ôÍ©fŒ¦xäQšq‡yF_ K_/Ç]wxæ‘®LOâÂa +-Gs±^æçÉdø¡Í3¥G¥Sd]Hu…p¤÷pBÒ!ûÎÑÞþ÷¼buÔTB÷àM§=Aæ‚xUoRSý¤p…(V`ßÚç©\û<‡Z%`¼ÄûTŸJaáÈOí¸‘ÌW •GÿH¦_ª®Ç7I_±×ôW”ˆ*¤Îm4éDºCw‰_ë#ö±ÔÙt +-ôtó0+¼A“Æâ”ËÕyê*xמ¦ +-A•xnà5þcÜدw*AÂ%×LVÍ'#Y­\ù…ÖèK /}fu÷ó9Ë-#ej/Õx˜÷‚iËr¦iJ›3Æõ *"ë–ˆã›Iêû¦‘ï¥ÏQj­…<’êìË@“ÇRÁ’}þ=¸¥YºmjúÇ£ [Vc–ÕbüìîzŸÇ-_†VÒ8¯ Ę̀®lû—j‚0|΃"¥èNûÙX¯"?¬ù8­*SõÓ^vs/Ç'ËÖh¦§t`ªÇUœÐO;–s•O¨Ú< +-Uj,¤ÇòÕ$H¤â…臛Ÿ*‡·[Æ¥KÍǹ×Ë€,>–ä±e–­fL|ÀÄ>jÎÏKl5Õš~Ü1¹†Œû8ªÕ•©Ü§pBŽÒ ó5Ì1QÒ§:àâìÀNÿ¡÷¹X#Œ˜ÁK²Ÿ%³LÕõdf×­hÆ#Ç©{R÷z»ïɆ°²›™P/OcÇ»ú͵“añÀ{H­“:Ëï¾ú¤JÃãehú³N>ñ(\E¥;þù‰²ªŒ `:<€‡gaËô‹}ýóƒ²eïP«ã>gȨ¯é·}þë¹U:0¹Ôö÷l)lÝ5òvÉì5Í…tù<JÉH6ùÍÓÐ…”Š,þ×7’ã&ƒª<¡×â0t*_x¬¯"Öõ€GmÚ¬Hi…åap¯T„„‹/Îjî´jŸÄŒè§í¶Ĉa]Ö|¸ío¥7#c);`S«½Ý” +-8;8ÅþL·.9îý˜ß£‹Úwqg⌚ª„¥É6(É›”ßÞè!µòo@Ú 8KI{rvpÁΛPÒ­ª<0P _úÉå±eë)rýš3šßYÙó(¬Â(kE;Ù¨Y¾cšùübRÎi‘é:ççЃ#’<º1\°VD!šÖŸñ˜¸$irþUú¼Î{Th‹gmVæqK~ôOI"$DÀƒ¾Þå¹®‰—ã0&2¼t7€lV‹ÜZ'uI¦tÏ™’uï‹Gx×Ù™‰ÀÔÇ7·gÌÅÏÍÏÛãfß †÷äsùAÔ¥“?Ë{Ÿ´ô­§±µaqБCcu­Ó8 ¶—kxñ6b^B4!?4ôŠ¥¨sëw«0¶ +-ˆðnn£tº‰l™Îbÿnúp…Zœñð +-¹e#.{‘ù'¾ W™âé/CÚóÑÉ‘nX(ÿ©É¯ùû<£)vD»‰—@—²,]×¹w”RtÝC~ŠÏûþ‘õb?ö•µ2xq/kåj¦ðmœêªþôz\Œ†–ÿùB‹üdFÃLÉŠ çC<(ëÜMËÍ«ÍõÒP cÈ[Ü /ã(òIüßÄ>]8—‚½fsd€ÆK÷U+!ý… ÊÇÀö¾`û#Q"¶û~çJÓvóËü,TeЭ¾–]‚€¥.….JY+K#zí.ÜT‡¾Ná3å½’¶ûšT©³òkÕ._åg‹•n 5(*Øir¦œDxH­Œ«‘p0ñ0 +-Pü@DrçªÊ«“9ÔU†}ßêWQ°Î‹l ~P¥Ú~Y_Z˜¥û¤ì´¬LñHqV*fÍ—¤l¶‹ldÏMÍ^OÔw:3äN]1±Óö¿ËuÝ:ÑHÃú”ô†,ñ$Eþˆ¢ÛÊpIþÇRÿ&Š{¢ pU‹d76HbÆcõ†j Ó +-zù©v|!ds1 ó´YgQ=(ìyA$Ý«½7äünkß2Ïú¢WyId-‚é³ÙNYÕ†æg´£_ÄÛ0XÊËKZ{ýŸ5ÕÑGÙ²4æ»yõŸõóÛ:Ãe UOåö^¦ϵ‘Y*+jë uÈf´¸ÛiÜiÞ`6c²%ôdè”ÁBÂ-’¥¨êYn…o²OûÆûòëY•ëGp?9þ´sµÙ”çÍzMZúõ™b—z¾´Á ÉüŽfx>SÓGÿ´à6þþUZÆG#Þ¡fÿúå\ +-^™›J +-ýô eùÿúîþþNÿTÿúñŸdÿ\ +-\ `Eo ]˜Èáäæî·Sœÿ©b>Ž¥a¡ýÊÇ[:l¢ÁúI:=kÊÿÑ >XÈÙî®ÿÁ,O­dŠ2³3˜þ_G£3˜ûW=]ýó"—NHÿþR+ÖO,¢ýÏ6k·\Êsù'FÈû3úõýû Ee® +-ÏâÍÿùõ< `¹£cý£ ¢TÉÿþüÛØRbõèIgÿþ½˜alžäp§ÿ©‚úžü)Ì”ÿT8)™^þþÑ0 ›£ÿß}õ²!$'åk¢+]ýÿØyV]¢öì§L¸˜ÿøá׋`& +- œ“Föá×À; +-¦ŽÿÙ€nO:¯ÿþß·’YûS øf¤dÿõ‡I¡ ÿä|SÍj/Sg¢õäŽB¡fyLa œK1F—ÿÕkȘúdÅŠmQ6'>X¥F2—¤jO+N·ú‘iT=WÇúÿþÔG›EeúÔÂmKÿþʹP ¢¡aFÿþÏ5®je¦¬o]à û2ÿþçÖǬ7“ñ›1ÿþôKùðä ÿþâ“ b´ùðêÿþ¹f£òõidMôâ¿F'ù¬cÐe0ôÅ^dâÉKGÿþŠHšô”ýîÿþå~dþDZÿþjGlÜÿþðˆÈGg¢æñÑ­×È›Z ÚȤÿþ®Æóþ¢ +-]΂GÊÒ¡k e(%ˆ@R›ï ú¶ú“²àº ,¯fÄ®ÿþõQ"&] ü#ûïå(gûîúòKÿûð OßƤ[íþûäÌkGÿÚ¸ úñd1“ÿöíÚI(•D*ÎëžcLþâ¶z'5ZõâüæôþôdMÐÍû÷þ0ÓþïÍËÇr 1çZùõôóç­ÈbãÎeæ“[ÝÄî:ú³œÿûïÑ´I\˜³Ë¯ÿjœ¦‹¨„–c€ $H‚4RÔÜ€0*€F>B$(’ÆB‘0 ˆB`( ‚‚ +-¢0ŠÃHÊ9ÛE¡ÒtøfãS¼H>r[C x(ºF£‹ËÀ )$b!Ó?‡êôðØ<ɯ#n ŽJ\ŠÀZ}­õ<ïV㶠Zb)þ³Îô-É!¿¾2Û«ôQƒƒ?AºÜ‹ÇC­ïW€©Ð +-_~=Ï%s…êþmÙÞHWñx|-ã`"ó¬bb©§Üê%ç°+ÞtÅU¥é>ûyœAç}„@1ClŸ‚DȵËѵ(0´H…PVæâ#h?ú²SšêÞ'Kž».í§[†fRë àjýZO°yÏx”`± ðÍÍáM×Þ°/À©/kQ~S·Xz^w“÷òØ.:âÒÎ)|’ Æéù‘Ì¥B«•Ž¬Dz_càuÄcqVÜPa0‰ù–G‡g°8ý€›ß×­Øž³ðwƒ +-v[¦»CªPkÑpÁ‰ ºVª'-yH7RgËnŠ‹ù-Gón¸ì’™äÌa¡BR@ðÙ ¦»7à u !êñ8Õ:+ã¸õóŠNÂjYô@¶µ] 8™¾FVÚÏó#GÈʵyC¨§-ÉxL&ÏÛöÐÓ ± NøP5ÀÊJâf¨3ÖCYð¸`ŠpŸh˜6¨-%ÙÙ_p [z•”áSfsËËáÄÞ*zì»Õ<Äcšj™ŒžMG´Ê!‰&¢–U¤Mç^Í^É0 ŇEGˆx)¿Ñ”Œ–RX˜6‚¾øÒ1¾@žûX½Ðsú§à;>Í?5C6”«Zãá–‘$K€ua?aA„S‚Z}LÝÇš"r‚?zˆ*0ei+:RR»…!¬–Ÿ^"„#ñ þ nEîs:MkÏ“õOE>é÷ñ7“ŸŽ‚T+–̪(¿¤ ÔÝzoýÓ½Ù,'d¤ü$_Ÿ‡Àú䊱á-+;S@ÍYê €“/?„زj[üRrl—è³ 3Ý—ÚúM dò3p:Åx¼Ï‘þð^’y£xv†H~ªWyîè×~½Ó¸L/ŸºCpdê- &‹Ó-Ñ r¾i¡Ëavä„šŸû"eò%y@üo¡MwÒjú˜c%Ιó¸ÎfJäÚ¡~çeüº1ù1¸# 7ƒ=îoc ߈j?N².­ºŽj!FÔQt懱l´Â +-ѹ…eQË +­Å<£ÃÄvµFò˜šÙ§¿:WTM/ ÃÖN]òFòÊÎg õóÌ¥<ì ÃJ‰OK«i|Zê„Øt¾Ñcÿj•láê`z HûÄ姲ˆ#œ8h0Ž³Å9 ÛÂǹa`»O$Ó­Ö:ö~þ=Q*K ¾°}XÇ,'««Ë,Ûl¢c#³L~FƒÉÁ.+±¯ÏFñt5xZž[¶ØìéÏw“Azæ× +-_áóÄdP:dSlñß×é^íÝOá:OjCÝ¥õ¨[‰âˆø~ø€VÚù>Êàßó¾oè”Mt‚½0Š˜ UÚ qgÔ(&-Ó¿eø%†‡±©B¬Ôö<í©A¸c˜£ójÈ}T 6»Znœ‹°ú·X`X”à͇öX1íí›4àÂV[Ô='î+Ôlbq]~ä¶eDùŒn@”=‡6ÄI˜;èXiÖZÓ¾»¥Ç`à}™NŽØ~¥VIc` t€"ûåSO¼¦‘ÉÔÇý‘«ŽéÄ6 +- +-B…ï³= Ó}wÁ¯r¶vèÞw@ãuBgÛX?-åÚ¦ÌxŒE·Î!uxÛõÓ™ŸN0ž[ÄV€¥Giiçg?skˆÐxëuUÇ–7–”ÉR™ë§'¯í«~0e_(H~gÜC*~ñ=WàÑlô &ùø÷rÀƒ©VÉ`r¼¿æسn)Ú +-´o®ÚKl«Üû¦ðâãúˆ}Qîî°Œîªh„ê‡ô"³££øñtQeòÓ6)󶣛h¥ªws½¬¾{Á+Ò À¤™=¿Á4Íä°–!¥a@Î_±9m »ÉG€K~ +-³¯aU‘œðÅÂ,rϸ™GÇ°Yù¨ðƒ(îã`ëpÒQTä+HMÐD°úJŒS¨÷=â÷Œ->Ž{›_·ÓçØè¨T¯ÍQ +-— ›|THø–¸W.BÕW° +-ÛŒ‘Ô5¶ÆŒ®h’tÚ¶ëæ×6¢¬õëveÜt|ÌOš}Îvæõ}tÆ ¼ôÆ(â!)ˆ´ùyq'¯pµe®èÉO¥MØ~?¡¤µ¸¢VáZf4•åТ+?rŒØªL~Í*r‡£²G\!Íò13P7ø¾å·eÜüüS›àoò¹F4R4ã«jJÓj$aNdÿKçxœÖq8ãëP(y•_PW¼%¢p‚ð±ÃNóÖGe~¾¼Äñ##«ÊÑV~Ã|Ào>NÅ(CÀBlj yBœ]öÆkÎ&ZßÉJ†v=?Ù©òãÞ²GEÙ.ý8Ý(~òŠÝ¬¥ñ–ߤ®xh¼Ç5i–ÊúêJUë ]»DNß-/ñUíW\f‘RÜ7¶‰3Øby$VTâŠ;Ê°åUg¯¦55qŸœÔï1‘F›¹LƒCte2ÝaW–<%û>¹OA*ˆDßœÇN+ÛÖUÖq0y5ñ`[wq ¾lWô¿o’£¤Õ²Œ£H¿o&%ÐÈ<ôaHtµL q^ãZ¨ˆÄ]%hø$¶œ6E +-Öç4fùi[xJ°<4!En´ÁQ8EÑ0ãíÌãMÜgýxά_G%?=UqÕa¯ý+@ˆI3ŠGHЦo$T2øe~ bp7”¶žø©{D ‚óܦ$“NùùægõJC|ý³~]S–”ütþÔ€ý¢,—â#KËÍt ï8¢Ázú5äöÇ\±Ó!°ê×øÑ£:'ùAO»h™þ—;ž,Í—T}(³ÕdÊ0ÚÃüÆ;~g ¨6Á~Pmª±uãðh5™z³dà…Ò‚±TùõõqHV9RT³1’¯ +-‘~ôlmD¥€T§jñ}éiÙ²ÇêØ\2°ÛS¢FRÅtÄ•$ò¾ÖÊM™ŒiYäh§ZŒJ€#$®|Y#xÄÀ¥ÐVCU aQ¤ï3Œ¶ÚA ¿7†ÞW£}–#£îãt¨¿µ—Ì‹v湶7Þ((£>/¬ëeë{A‡«m« M 0ù&mò6?lô¾Žo1fv„Oßg a³(4º¯vÐoûÇ3d'îˉ½ñ¬›Yü‚†t;Ë]­¹µoÈA¹4ÏÌ£Ûß“^CrM§&¿Ôj8lñ5^V÷L÷¤5’Öqèe^'­8~]t<·£^í}¬×ð1” êsƒ å’–›FŸ =èoX„8PóŠ1Yñ·:_žD!Gfpã(fcË&kÑÆæ§u? YðsVPÑ÷]gYDÖ„›²>4G¤öÈŸ;Ô4Vª?»@B~ õvFV Å»´ú·iýV‰¤xߤ†,m×qàx0àègÜLB–æÜzÕ£/ŽJ~‚ë|!õ Òrùµ›SžCñÿÛ‡_k'P)Ocx~§1màP ‹Ö„5žÁÜêi^{ãõ³¿«YºaŇ?¹Å´JŒEêŒuºioZ½<³pò{VÅfÜýh÷¯JX>×òœ'ï[¢r¸ñä²jIýñ^\–…9Óô@F›Vä êeÜÆ—1©Ñ­A‹ æ§t|s‰ ¹«’½*׫åaì4¬7j˜L òcÀI&ßÔñIÜ—íÌÓ5Ñ#ú¯DåÑÕj¤W¥ã H79FÈïWP aW|¨þ†·Ü°ï½Ïò‹£Ê°pV.á{Ÿ7måK&ë8ú÷¢ Ÿ—œ4¸†}¨ä\y f²½ïJÐn»ý}Fë¦!,;¿ô©xßÏà*•‡yÇPœÙØßàÜÿÇ,›ú­%³D­Ä»î3+/Z¬ê_×2+ˆY.›úGxÝ$Eå—68by`Õ­çGïZhÚ±Ê&F†~×µ¤ï[ýpÒØ“KÔº {V²yî êwÀ”þ5œO©#QGL4ºB¢0ý”OÏÓ¿æ­ÿæ1‚3n£Öh¹oã Ö$¦÷ÖüüiC¯½ñÄ@rýŒtNÓí$ tð‰Çó0Kv{ áˆlߧøqMwAùu¾#’ªÌtnßÿjyõ¦‰ÌO!‚JI¹þÖ¦®G–lõÔ"¿Í%ñ1•Žçö‚Z7>ãí±—OóèÄgüµVÔµ¿rÍ\½õâ[Gußíé¾I6 ”å¡êÇÉ’-ÃSa\tC:7Ø«ŸÉ`BlÞ¢£àyîyo£éò;u(KLÄYABcÙˆ»R~¸.}Ÿ+fÈBX(Dú*8Ž}ìü•†Ä”‡¦v2‹ÎÉ@¤˜tž>"ðß¾{yÐoÎ X¿h<8=&ÆbP¡ 3ƒfb2x­ÒV=?@¸¼ÿQW¦ì(j&æX6žq"Lìi~dátx söéÙ…j!ÿ/,³]„áìÕ’cÎïÈmM7ȹª ?< Ã;ã‘é[mzŸÄ÷<~îÿìŽÄþüºàMbçR  òg篆£›9æ6M L>»½$›<òþÑmW“’n=Û÷å§>áq—¢”ü<Ïã}<€ÇX&ıìy¨{©›ëw–I r'“)‚üöú¾àŠ%9Ri†T?›L +-Ì'…õäR¹Þñ5€,ëzjÝä1ñCüï›"ƒš>ã'È<ýá‘›K j“”ôO  € +-Ìüz3€†'L +-±:D2pCIâ`lêÞWÐ l½â§Xδ8MZu‚uΧpÆaž~!ÀØ<ˆ øû€è^Ã)«üV4Tas'Û=ó@£>‰ÅWr·gŒ(nÖ$ÌïXàLá>…êŽçö‰\úK±Lʇ(=ºˆ&6u%Ž.7ù¥—Påòñ +-*p¸¬,”¦ÿl`†ºDÁ¶J~ûš½:ä§+jMr3iê`Án8¿ž`ýîR¥›ÅL!èÞçü_œes]0%ô£FsÆ%“}«£[^~/é¾=”— Ï?û² _ 2%²æ=¾“©“•À»A~{• J9ž,Õú}&Òû¹Þ:(x%À‡ñr[¼ï[ïŽiÅIôò“%‘¿)ô@hyDPÁ‰†Œˆ4qrá5Å:'”¸©Lú\Ô7’ÖýüÀùvÇFN À^ +-)àü’ˆ¿Y*ñ‰ëµ0›«Q.E3ͤVyMò«µDÁŽºÎ[!ÞDÛˆ4ˆé'g8-5›zDVh~ :–|Dvä]¡ÏÄ|–Èæ!JE~Jô‰êM~V+¡Šœ 'B9DùPu µÛ‡¤ máŽB¬†ÞßbÎ׿),g¹vËN“Øb”ô[´*[4³ý ”ðsn¥£¹P-p@·V…’åè5-›‡Ð#Oõû£Ø®*müû–8Ó÷ÐI‘ëäÄ>e¬.€pŒ :E¼C@"rþ""FÚ(BÍV3î³¥FÐýšËóÂ9_ÒåˬÂOˆ÷´—±’]H#÷5‹\ „m‹×…Õ*¤$ù2ÿøùAM5FTJ·=4×rÛöÐT£ ÎÈJ#%µ:¾©Ö …\ÿ£eãzyµæNÚ“:küöâ°*’uGmr›gù½É±¨”¬ ªKƒê.Q Ô- +-Öò;†Ö9òôU-oQ“‡f·|ýÑèP0Ñ¢ÆY¿ RÅûã5@jÅó¾÷ÀàhXà3ÏA‚ÆHgÌ•p@Ô[fñÏ:`µkg]Nüý}i‘NiÄØbmüƒFé}~lå‰÷áTYì¾ýèÚýƒøS‘(OJ×öÕ3Ê$A' Ö–¯¼(™ª¸²°ÅÕL3LÁv Úñu®¡ v5x¥åmøARa÷/+?Ïaùý†3–/PVa|ßDnÙï’Hx‰¿xÉßûkÚf'¾ú!¯Ô¦ŒZÌæé¹ÏU3Å3£ +- |É6a +-ŒmÉW>¼À‘hÚÁ'Äé©÷¸‹ÄVìtæ}ƒ€U¾êXöçCoww<üiÍݶs“¥­{DÕVGÉðôdév½ßæUþ¼lÌÓòËVF"uxž|_–tÖ_áWâ¨4ݼ¢Î5-uŽë§I Btù"í?GÈUB2™XGe.Nbˆ‰BéOŒòaú©³Ð‹ ýyÚXð)ù´<܊¯”Èòûl;3F&$Ãçþœ¿ ¸ÍçXÍH‘Iœ­þÚN^²•AB£óè\uWZã7ã(T­8¤ÐÆžóøäN2ZuÙ6 +-#Wù’Õµ©îuoÎŽ¤?CN4šž‹Ô ½@ W¿Oe)w‰s!“X˜²v5Z¢÷lÔ½–$ê-)ãô½³‰hÁ™­åáà‰i¡º×©ñ¨}¨/!ü ÄÅÒ{z ב¯C5¾þ·¥ª^"A p—€2¿Üá‡) À½Ær÷­¶Cj\ÛÁu ¡öÛ”£"$bzdQEÙc¡Ñ“ד‚»Šä=ð&¨UŸxÚÓ +-Üê!X°gó4À“8€˜ú¤JüæÃ;úgY4aï¡X5tèc‹¸š,óèÌé‡np1ý! ±Ü‚…’‘§þN?ÝéKvcu¾¶POŽ¬Ê„%šÞ*‹´D *°Ù±á⪈úù;ôæ;]aÊÚœüô›1WõãéÇ)üÚñuh]°[ël{ð1SââpÁSdšý›{v_A«~n2(…÷•ò|˜È¡Ïæ+ Õ:ÊÅó”ƒ OÅÈ0Ù Œ[ufÀ˜ü »Û ¬-O®ˆ”Êß `JȪ^Ë1Y‡ØøNÏø+‡ŽÐ牞dŒA!y +-«H¶ò‹(¼÷rØ ß¿QŽ½än½fœ«ŽC¨d–£`ÀqpD‘äHÓC/%ÉÄPC!ˆ‚(b‚  §ÄÚÇ8Ö}Lx8÷41Áñª†Po¾¡.G@ŒÝ¿Ñ¾HïƒkЖ5À1}¹O %¹‹°äCá7êÓ…¸qnÓÛ“d#쬰¢• à=»oN:i™ËjJ¶Œ  ñ0XGoá¡;üœkþ´*ëÕiíÎ÷Ýä6‰š5¹-ñë/ŒC¢îy&VÑM É#ž¾"¿èU‘¸°_>ë@Ùû=ê˯r.xÍj]1Q¨ÖD‹Wü[{+—BiUDAš.$óß³¡æ× Øלô»C—}Æ8žºè¥·Õ>éÞglžöÙœýR)ÿYiië šBµ¶íHPuyq…ü®½p/@3¹{Ã6’>ˆ­²zÁØ6N(G$«’¼tclÎI‚+f[‰¹tº¢㢲OUªº…Êt½S Çòƒ=Œ/¶-<#ñ2ÇlÜ+ÅÈà­`t“²Óúa›EF¢ Û*ë"{AIy¡@›(ê᨜Úä^Š £ìÊ\É óÇAËÞ +-ÅÔ¸¯±2!¿|&P™†Wæ„[E‰£}j•XNâ±ø} …n »¸i§š àÁ°ýÙäi2~b|ÉÀCí0#p —×ÚëÇ­ªwhm9H®õ¿'ÉïiEè#¨£’ƒ…]8.?Mœƒðxï`º™ò^ÚÚgR\ع秥“2XÎ/úB§ãcnÍ…÷AÑâÖ>'Ȥþôô&s܈ÏR¥µ4ñ$^°`… yÜa0-_ùvË{-S?÷ùöß%‡‹4Bm ójÐü+¤3³Z;±Î6 Êw ¿:žÔ÷qô ÚͲ« 5º„6²‘­^– É$üÎîÈO bU PˆÏG˜ï“’LÕ<Óè{Ór1Ió\¥à¥ï{Õ NyË9é¼Ñ»Mþç\¼GßaDEðõí$’o4‚ÌIÓÊÕ¶û4Sì+a8|{Ì@›NGú ÑB rZ<¥ KЫ•]Ý—4"¿™‡ÁBdà|Tys°a´*‚½ÒM 9§ðK¼2}™ÇŸé¬ÂR“Á½ºmXæxà7÷UÄÓÊ\äO¤rhUÖÒ—‹1®ò†âK7å-SgFû VÙþøã&FztôlA~Yb˜š­VÕ(Ožx•},mÆ6&Þ!8wË„rqÎ2•Þr”7†Ò7Ûr¾3rÍ…zZÇe¹äLÄßyZ*Þ™AP ¸ —Íœªts¥}k¶Oø­•0ÛЊA«Å×:X¿¼ÃˆÐƒñ»ÉZSó]ïC~œc@¥[­t»P¼ê/±-á–Îqj¨+fFœ„Ÿ`Ž?–Ô’µSÃ]¥ów6ˆT4gNwT@V,aã´òk_Ê@fæp†ä‚¢·f—F¢=Á O•È¯@ h„Üæ›üS·ôaüÙ©€|GÚÚ„§œ'E©óò˜y´Ñz\¹ÈÃÆåÚ•¥'„u÷FÜÖ©1.ÄxÇÎ fG¼^YaíÓÅ›V]‚G–²S ïÔbW. +-ÁÀέ_pÇ0-Djêu÷u4(f1ŽÃô™Coê—\8T`ÒÝÇ7™©2Âês*ÃÿA6–ë¢äçÏ(¾>sØEÞß0)ÏKÎvdL,û!(–!ÁòÊ'yÄÜqS¨€’¶‰ò#}sÍ Ý׿‘_ #¿[| µb3XcS©Dº‘š\­ÞÒ¸žÀ ú©Ôz&Ý/åÙ’MnÝßÏdr ’—Å>6×j€€:¨:¤*ɹÀ}V!ãuå´"&†q~Ì™Ds­þ ²I„ +-±U™¹)Îîë Zña.éfm@Ô»êçVAB1éV™³›ð Ù ë‹Š¤]6*ºíºKòHàÅ ûír’<ÿçPP'öÐì##öq«ç ÛCÂt#}r—AGÃÀ)N:*¡L"¸Œ 0 ¦»‡¢8Æ&"¿ e( %¯|——=@¯Fog§xïÕqWƒh°‚•›yî¢oô³ ÈÊ5B¨ÝH-â›áDâam<¨ùt¡»!£>êüp‚>—3'K–öAÚ'žö1‡¢ñò©Í„qW´\•’ýÚúîn÷u#ä—W†…aM­–ÑX¸Œ9g‡Yé¶=©Õ¸-Aï7‡WåØb§½Tª«/ÿÑ®ÞF@jAeX~Þ,1¬ïúû¬‚îFòi±²;:ÄÏ÷š$d º²*Ö—+ç'_rˆì¾•OùÑË€k†Þ˜‚Ç —¸#aE¢ÒÍs•ÛzT¯t7ÊVî—"ªÏÆcFž—”b#t‚îÎìÜdtÃñ6áÄÕguÅr“ôv—‚³ÌÏò`Þ8:"ëØ·¿ûºk%¼o¬ KAÙÔjq9FÖ +-íÉ|þx‹Ècê`Y©:Bø–ÀPî:¸Üxù&ßüþ¢?ˆqb‹-Îî& @”³9‘ GŒ*†Çð~m goéwç'ŒšÌø%wT>’ú„G¦™#¿Å`ÉxŠ€­àN‘de÷z-æ`Šmá¹çù&¨qÁÆa«“Q„”Mƒ8‹›ÆŒÇ˜´¹½UÖèð±·Dò\CœðûÓEûÔ«àw´pûá„$Éëc–‡„`qv ÌÏ$Úæêóð“˜}MÊŒ³¤{—«¼nÜ DpŽ”7J&ˆ®|(µ_‡E~¯yÓš aÆT~j×i2Ú¦•d‘[†ûð´*Áƒ}Æ:w*~È ïñS×éàW‚üßOóPé•N¶å*ß-®VQ$?ò|ok˜íÆ~?éÞй¤ä›f7{;tëRé&Hh€ 2';L+åü¡$HdN€+£P-c‹€A¨”n©4_Rˆü>h l I]­ ŽüäèÖäõIvMEM#kF%²íû&¨–܆oqÃU üúšiƒÉ¥_9n}è!ñ8…ÀWNê&ƒCãÁ©ñ0…7 ÕæaEßÀïF~‚·„<ô;{ã¡9[=ªL¼–ËBçäu¤ªåÎ4À€¾ “†(Otõ`Db8Ñ4ŸN.û·´äÜ,:Úå¤t“¿É]_å(´øI}³$„`ŸÔéXD̾[B Ž.i¯Ÿ>^jõ‘ΠÓ@¢.‡/É-1´<㽚os¤ù·P£y¾s+iݤ 4Z#Žj}”’Í,}㇇c Æ>3vî;žAÍ„ý“·)ª¡r˜ûÿj—ÀLÁ0,ã«t&QìF#?‡Ê”6 Ñ×µÔê#¡ ¼ñp¼2ûxç´0ôM”ßÃà/«¥oB÷L©‡70wP8º–JD",ç0¡ªÑè¦ wh™‡#’&©¾…Ô>ѬúeÇ/ã}À.ƒÉ”²tX¤R«,nay˜‹P¤6R8®)KLÊ@â@nѬäKÂ;pg¹5<¥æ¹˜ë&ãøJyÆãf¡‚Âói<û¹í€iÍkº…¤äG:•F&~ózÖ X~©3·&á±çyƒ–²[>£ç«¤oôø¦K³^4Ž¥íÒf¤¶Ã.CÅÛ6ñÏø5'¾v„ãA?‰Çížžz0(”|2€ñ¾Õ”H}‡,ÿI<¾¿ø }äç¡c²f§ñè†<Œ=ÊöM[ü;FËȘ]UŽoÂ1À|€1<ƒñ0'{oßËíÉ€)± n’åa€MÐÛ$£}¿T)1òÓã4{#ÐÜƤÿw>¨Ø(§=Qt€²*ð×f°‹éÙìˆw[]Ÿ©“ ð浟Ý*ˆÒð¦±(@ÚxHZ–x4<°úëÒ;DS£¿~üù]5k;?ö„<œi¯@¯êò`RVÙ'Ø•ËèJ~å–ô|•7ñ`¯èI“à¿æ»¯•Á‚²„h$ÐRb«ü +-ÖH=Ú6=H²Õ`ùárƒˆ–¹X6ÄóeÍ Mã•] WÔؾk“4.§Sæ ò QR§· \*4a' +-Tñ’kN)U¥¿!n& å§u`à'û‹Z 7Ù±ó•2 ¨¬[_Äà6WãÇÄ#¿‹+u…I­_#Ÿ`Ó½_lðau¾{°YíÚ–µOÚ[VÓìŒC3ɉã*¹ÖåGÛF§þ[žÛªÖž»½–xs,»û׬ môÿZA +-WÃ6 ¥'¿™ä‚e,4ƒÁ<£xBÓ üŸ¸Ä=eŠ BOœ¾€92©böž£eYK±d”u€cCšk¸‚2‹fåáÜ%9ÈI÷Ô£>'rPÒ`X>½ûâéQ/L1jG‹ƒÍQ¡ò¶sPE½ÇQ0êoíñ'#í‹Ã¸¦5<ík’À—pnšA(T1™˜†DÆTý¥nVá +-R3˜ß¾GQhøùÎÕ>t—† +-`Hqå8¦ ÀÜ>ܦù‰·¡àÁS¶Às°-㦷&#_ŒKã%êÒ´Ï/qZÇƣ̲/8Dä²ÛÞ¢ïÌ€U7œP†hK±^<4c<œ#¥›žS8­OQA}2\÷âMý€_‘ÑÝhã<|òRDáe)Éq*†‹çæÁk/ú•ƒö%¥PAÜZ“nƒ[XEa<–÷Al «ŒL²û&xiýf=87¤Ü¡„ý.}Á–k<(¿/£Q¢63¦²¹YËûr`}T?zBÞ§Í7‡<Ä,g•âÚ“F%$±¯^ýS¬öMïSJ¨\Ü5ëxÄdåD¤ØÖÿ#‹.|†UCøl_F«‡%sëoJ…ñ”ÂEç©jÜM ¢VÚµóð˜AÌÊpâM¾¿¾ôfåæîÛcã‘ötÞ2ò0 msË1aØÍR[<¿“_YJ~èù“1£‰Ú´d#%uCØË\eµ¸Ðx5Ð+J8QW%ƒàô;U)´—XË6€,ÛRõ‚™ñ:?JfB×H†XÜ:ŸÞ4¨ÄL*z²}ÿœÐ"ùý߸B[žø\ñî—0Ã.•sªÔšñyU¥½± ƒ‘aW-¾s&Á@š†ÆXožA©Õð‰ }ì‘ Im~uo±HVÞëÌ‘84?­ê/ü\”³oKtÀ˜ò¦K½D”ľç[—†Ü¶^Djk*Ÿ ”´$W\E›ÖnW>¼¬õ 2*¾å»ÄÌ"¼  š†ÓßpšRÝäk¬2*Îâ;w‡–D ª#qaqü0Š,\ŸÍÚòI~šo¢·^";¼F9ç[©óþ]”œåá‚n¹·?þûf²Nqé»IÇ{T¢iµÇ2ò z4Þ{;XÙùkKÑf¿ÔTÔ4X—î#9Db¯½yäœsY+ð‰ð‹„ò>]0f~1¾‰ºioÓê£}v1Ë:{F%ªÖUó[PüJ@­ù©Ò¬…öà}~ì£U£s9+àM‹Ó–*?ª›¾‹ß)ÜÇÜÛ'6aË;ü¤Mzß ËÝ´ øã•Ý‹3JŽ<Ҿ訢ˆAYbÓ…‚Í®¾øhã¹oN­šÅºAÆtêRƒ +-1LÄñpóؤ‘Ü´U1(¥÷Ù§“‘¼—sʼnŽMÐðÓ7‘¿•í[ŒÎ¥é› +-ó¶hR_h_jèJÜ„NkDÔõ¥¶¼Hw1—s× C1ˉM·5éYÀ ~ºBöÙ9 D'ƒDyN3ûÁ;†^\’káAO"Ûlpˆ_߇ &¿…qôª~¼¢Ï‚PPV‹0øUØ${é ŠŒÀ$çh^O¯â©ì‚7ü¿öŨZÏè(Ño¾Õ¦CK½´ªñT„–8-K<ÇhØWPφ é)ÁÏD“_‘µ%¦ÓœÄGÚ¿”[-ÙFk]hF…_Ѻ`ÿÙî…nàaq-¦ˆõÑ æW×3eã%<œ»Ìœ  @ø;èc®]’^àôh€ÜœL~KÈÞ²¯[B8ÿ™îñá*.Y!L¶Jos@YµÇ‰ñë!µ«Ý”Ç<Ùs÷¼_ží=8 ¯ÅgšeߨVfÉ6ÔšKÝUÆm:Ìs‡ô„ú@‰ùˆ­Äª(Ôª3êjírmi„2§‡ù›j¿¢P” ¶€(/Lmusšl°]Þ„<5 !‘\,í‡6öð"N¥•@ÑÞñPH‘7¼%rnÂbé3&?%s™à´¯À®Š4!ÞœïÝΩe'qVó/l#Ïíe°ÓpyhQå »õFqÐèä}mϯœ¦:{ĪU«ñ¿ÂÞu™l0‰+Þ°>´üBÉ6Ÿ”í“jBK-\VùÛâÇ;Ðm"b +-ˆ¾z÷1€™P 2ÀBþ‰N£Ô +-|W%— ù»º_3ÞYR5(rFžŽƒF.·–,Š¹4Âcµð[ó¾D8žÜ¨÷¯)ýÉCž>(ü©V™£Py˜»oP9ÐåNËþM;pÔªM,[À˜ìÃÔ´v¥q€¥€ÐƒÎ Rýþ¿AAuŸIoG’/ŸÞ? ünÊ£N÷įcmÙdÄo¡PÔi Þ=t"ƒíÕGà,BÌèl'N°Qr‰>Lÿy¶4e *M+qCñÐj•pVöÖ[÷fèŸÞ×û%r!ºbÝÇ@Šcàü .“_¡“ ì¢ÖW5´T +-cxü> +-ÿºÎÂóF~W1>Ê Î ÍKŠ¢VÇ!/»µM`ßk{M+€‘ç·§yé=¤€@;eãÝM‹l™ gqsïðËbæ}€NR=H4Ū¨³tG…JØRBƒß÷”4Ë@·Ãi¹(™Ô36Ô…Ìè"t Å´¦ê†=’úܤZø ,¨Z)çp’*ìûÈjŸGñD¿žl.dÕTx~çúoèmÖ…_^îƒjØ>“Zi %ÃÒ0õX¥· ÔÈ‘]“û<ÖÌe *àxÅcëà¹Uø `U”ÒN ÖéjY:Ì×7á ß½ÀÓ³ïµ$p¹+ömåWD¨¼jë¥E-ƒÐRć@âO‰µØ¼4Ú()‚BF­_}Ÿ~5“21=BD8˜`0S¨­TИy;â„7Y{}úñ¬Ù>µ9V­åGN’ø¥š§Ì±ÐÒ£°®;luɯ˜ªz8™ß•ÄË °©îm¼ `h’z”kÆ’i\0ÉÒ—fEì¡4Ø*|q~·ƒ0}é‘7ûkÝ2*J]3:wë«ÔkWùH8&÷mvNf¿4ñ¨6†¹•¶U|ý¼yàùí'ùÅf”÷wófYK÷dè>çï‘{†Fh‡âØÌüþ¹’ðÙ+¤+†Ô]ä3–Z/áÉfî1"‘Ï!;Cܧ~C”G'Éß„Y•ÖQœ<}$4¶P&„vUcËÎOËÒÜôaQÚÉöGãCÍÎÀscuÞy Š,¯9Ë:iËÊf8FˆÂ›'£fš¾\K™°ß¹m ß™§ó´&Ö”Ù9ݱzÃM¶QzŒD¨[˜Kê°Ž À  2ø5çÎRoU<0-J)0¿·”P`Cø à’pA!S<è gù…ŸlœòPÏq)÷,ÍôŒ__.@ +-Ë‚:çiUÚØ8é¼—.iÄáéc—(Ò%mÊy¹æ‡ç$¹»2pæÌËiòð³p<Þ@ËíeV­&ïˆÛtÐ<ùz¤ª ˜ ‰ ÈHÔzS©Þd3@+åçžI%PË’£nh>p•møtñw*£eÜë'ˆóëÑÏŒéf>Ð÷(eÎO· ûn5Þ€£¢;@ØÅ8[Õº)ß²®³}‡˜„*RˆÓœoó`á«OßʇÍqW•8 I~¹â.‹/†2ã‘£ J,ýAØÜ[…E<7c¨+~˜ð¥'¿/:Ðm×=›Ó׶ ªié¥]â"@Ý&ÈmH ¶?"¥P°qÀ®b}x ÎL˜ ›[2YˆÇ ÇüàñÕ{ÊCÖ·N±rœŸ-bÌþúŠÒ"FâÚ»tI»bÍ7¤óK@òOOòk"lp8€¡½…VãÔÏ~Fùm=ac8Œ¢NÐ$¿#Éã“ìS+Ü£›ÅÛªX•Ë=ûE„l¦ÓàM…&ç#<'KÓñ²æPoðÄx"À†0øŠ•–†à‹¸gÊàù7ÕϵVÜwå49óÃÆÓ‡¸J¦v=|#ð"U/9¡^Ãmo‡_ñƒÎû ÖaϤªVÒƒÓlÌ÷jnÎaÔy=²¤‡pÓ$[FoJ:_”©’(þ¥Y𮶴òt˜ÆTûÖ¢ôXÈËO?ðPºÒ¼[³¢ÂNB÷jŒû'ƒþ”>$ÒûŠ™ýËÌæuµÊ„&ÈN«rjƒÌ +-Æ$>Ä ¿l\_ Ї_ò“TgùJz˜™•øŽ&ˆ± PýVOå3äõíZ¿ÒÝå¼Ï fbY^[7¾=CsPf ŒhZ´ô @°³&¹Q…QÐ'û ’ûèPÜRšOTLFxAP¦Þ¿ô’G¦Î/%Ãõ¨ô=>ÑK°Âä ‰t¥nÀZ…>’J£ÜÄuj7 Wµ¢b!A£[–†ª$Úÿïÿûóðš'º£b²tÕ®TŒa~žÆß*lò°_£a]ÈKxÞm!;êèJð?$×:j©ç­Ï C0Ó†bó ؤ'×]Æ„Ož·ô´ÛŸHhŽ”ZÅ26‚! q¶nrŠÆ\¬åg­ ~¯>ö••æ¬,ÍÝó–ŸÈÎÅšXVŸª>Œ%xsõ<ÉQ5ünš¹îÝóU^Ô¼:Çâ¡ØÉÊ fÏb="îé£;v‚²+ı‚ÊÐô'ŒÈ³Ö•´’`]åÜ׌¤nÖK?m."* ÑZhI4¤s†ñ×Ò§íT¹mÞ¢ëPÄg1€öÄV»Ëß­LR_NuΥŧÃýL# ãÊÊ4*¦$`žü%dõi7ÈŠ£äÖ>Ò‰vãƒ[âð«‘ä³Qvñ¡¯ ¿©:§ó2ðÓêÓç&07v,žˆcà&dÞ^1UÊ kwž&BUËš;0ñùþ‘©y×PFæšç&îæ\‚§ôëØÎùž^åóqjéjU¿9¢­Ï-SÌ/´úüUfçz/’ d²cµvO–Ö\ƒïÚÎ4¨Þ}?)Ñ]2(&¢€Lk}ÎéÑÔÏ'¼ôD?RFÛ/“QÀŒþèl» ÅuSliýµõ}Jñ¢mÜ÷·¸«›?ÌÙE¢Þò]ƒz×@U kEÖ?‚Êr£|S:| t„ÀϽT±‘9‰3SaÇ«”k% }•6o ñ ³¹«ÑÇJEï¾AØË曽ˆ´äÿ<%vÆîmÙi±F(´æÌ59…ñFõ4²0.#ú¸Ø¥†Åêrˆ¥É`¡Ÿ×Ñs2:Iæ°ÐôŸªlZ«­&^XîOîññýã›ý\z&2îkîÜT¾Ð!å­}~_ç3fàñ«\ÑTþs8•ˆ„‘@‡QA Ã0‚ Ä0£”SFñ50Í~R7߃q_½ÂV,ÉÖzä§Ï`wIʹ'÷*W­T×pçLŠ‹:ëyt8¦™L=¾Èã5½>¯%¾C3×·›"©¼ëøÜ +- ’QžÃ*VãÆ΢}N7ŒŽÉó3$ø¡&ˆN<ÕMD7Zù55°n¸º~Ò¬6<ü›ØÙP) ….£’öù–“B6{RÐR#kK~õc«#6›éŠ¯°ŽYE|öB[jd‰y,O +-Tx_¨¤µ~n«$÷qÁ,’¶¬Þ(¦Ÿ“ÄŠÚ9ZÎ.Ú6õ“Aý¬ýñ#¿PpuáMOø~ë4Ý&œo]Á ë ¢VÍБ=—‰&‹yäàÍO±Ë'Ç;žÞ?GàŒSµùrò$¹"¤ØØu2n|ÍÉ.ùWù³dct“×üˆ©Ù_{Wïå+¸0òí$ˆ–}Î=·±»i°U2e0ÄÈOECê¡Ýõ ›2¬§;0OyPÃF@P€-ÒéiéjÕ<ê—Û"­·)z¥F¥ öi6Œ@äLÕ +-õvWö€äñÏIÉ#"Ý—Ù¨ š^?L©G1P‘öGdJÅÀ…pñ'3W™ÚP›*4ÆÎݶcZèÖæ²Ö­ÖpƭĨ÷wµšõÃW¦Ì0—JŽC•1‰º| +-¯D/û¢£mAl»¯aôÓësG…ŽÊâñPé õwý¨òx¬«1=XΦYH«m$á%¦&¤*ÔðD$à¬;e.¯×¯‘¢F¬ès‡Ï¿/—U+Õ æa·ÊÂø²6l¸o$¼—`ëxp§ø´óðÅ£-ûmrŠÞ¾?Yªê,ƒ×sÿ;Ëà&þ÷ÙI_oZ !Ýøî, IÚ2 f*!Á¥;$î’üŽn0c®a˜ç Ípù€a¡-T ne\zxåù†¢xJ‚œ J™j Íj +-’iŒP1½Xùyæ@-™-‡îkâšæ­u?ø9 ñ¾¼´Cß›îOšÛ>™ ¾‰3Ù:B…Í{üËs•º÷i±ßŸ´îŸs}'QO&íÜ%o¥©þK_14JÊ©ð—" }gã墬@Zc¸o1Áº$ Å ƒöÁ§·ü¶ |$±¼¸÷UÒÜ= Û—¹Ïœ*Ï;ÂÒ}0mÛ§ ¥&R n¯æ«Œ•yx^¢},6ŸiÛve¿)qyÄoÊ€ŒÜ!D!~ôB‚Âd9„Å2Êyº#PNM¤dàSês?ppã½ãƒOÿ$G¯ñIÍߨxYYuá8«ãú%nÆû²<€Ü0²ðµžH1«qˆÅ9º- ›çe2…C4d´ÿ–2„êƒ㾡wÁõ+lˆfŒ³‡‹ß +-¡@¹ÀǽK4 Œ Z¦p2˜°OÚ‹º/Èmký:ÖãÎ߆MôƒO+’$ƒ„:\6ðça@F»˜}•·çˆ2÷‚šWZ¸CVùO, ë7 *³+!¡¸Ï¹39²¹Sã;CUÎEG“‡©ÓÿÍ]›å#ó§±(ƒzîÔ+?A¨¡ÿ$uF4…Mî~Ç“±fîÅìÍ¿Cä§ö[Œ-‡Ó  Ô>xØœåÂ溅 5Ý@b6_ì7…ð¤]vÃ~‘HŠš|7nzB›aBgÈzÊ´ì >çq2³•_3 ÷gÈ7²¹Ï¹ë÷˜”¤Ò²sðiÏgú`v1YPÿ„ÄN#ÉÚ¾ñkû›TçI«ÞD&æͬ/l8—êï‡ÖATNfĸŒE'ž0ú9,Q½Ç«{Îs!gUÔzòÃ=Ž +-»›Ð°Œ÷/†y¬+(5Ïý‚Eé"Ý‘S=†î§üƒóƒ•¤±¬ó +-äðãííKÈܽÈëȲ"U¼î&(½‰ž,˜Ôˆð +-.GFbKÂYËÚ"Z´5MÇ/Ù·;w†ÇnêN(q­cvtÓã)í|.kCuXiO©…[+ñb¸ÈÖ³-Aä‘Ri_e€ÅîD&m°…¡ì|Ê@@+¡-l®ÕçíÃa±©T$?üšÑEbûXæM4ðôgK‘Ï}ÍCÚŽˆÀeGå3‰7 k< ¡×_Ù*-ìoʸ/Ù! ·¹ÉèVíל{ÏS ; X¤2pÏ6Ø£‰N•6ûœ{o´ÑYÀ³Ä²vH´öm²ÿe#‚EÈôV ,ôý6 t±Á®ß ‹ü°.Y&„ëÑDó@Ň#ÃC1 ŠäJm†bóx ñ¶y•núÊÐoÄ Èò‰ìW G2Ë¥ñPiw’Æ}­Œ©ÏZ›Žðgœ*7EKªD…RNÿŽåI¡nC>qhïÊ!Ž,ž‘)cêËZ³£¸’úþ³"?ˆ¸Ä{±~™Ø#Ê.² Æ÷ù€ïÂEE·gJcî×E,(+öS¾_¾Sæî1À¢bßwÝ­êüÝ;n"$ëáƒÇú:Æ:MmÛR„ì[E²û(ÐãìÍ4÷é3’AÜ`gYgû×8{ü,{…æ êÃ{_Òé×qÅû¬ ŠŒ\ùÿ‹)P°öd¯&ÙØEƒ?Ð<ÃdsÙ†u¡±íO¢Á©&ûˆÂzåoâhú·üäYvÓiZÔà´ ‚oA¨€I'Œ«Dd8ì#‘%Pxô›r3¡ˆºåZ…’ÂÁõ«Ønt’ên½Êo«bÚ²«Œ0Œè`,Ä< ¹"r85œ‚æü…òZ¢Æÿ¦ìª³GœÜ÷®ý„4´uâ榸Û×;ù¹û®}kdiHB—;3ªçs|fYi¿l€ ÒÅ+üìºÎ>ölðÜCXÝC×oýØD~~I…ÓhîtªÁsF¥©GcÍxC×æ1WâéëMHÐKŒáo:u…JVE ÈZA™&˜º1[æÜjòO¸§4â³UtÂD¼›æfÞŒ#0«›V;܈>~߶žë`ÚÇáÅIb\_©ËÓ¯áŸD~*’ž<µ™âË\a;­•'ZfF>s[/Á'–úMÌÞ„VªøªÜ·C¿›xUZÑÎMu.DF3U lTÿªEöQ*õÃm,BRÈMáº`ßZ€Ê©*Øée2`ù§DhÔöùËìÚ]9Ù²rhE™ûóøÖ‘ßQxÇÙ9vƒÿo–jÜ€X¯C¹Ì?yK1¯ÒÏŽÂrÕßdÏÇäSQã·ÄàÎ!csÝÞFYñŒÏcÞW~,RI €¹—ú+ò¨§%_BÐÆoaÓÄwÆßi5¾+m=*œ´Ü3]&ƒ5OŽ~˜?ò DtcP ýGdrÛÍðc`s%%Z¬;ý¢½;äc¥wŽ +-yÊ¡Ï>®Vpà ’Cgàv!SÔö›ÇG\´º# +-'Ç_&Ó¾ó²j­KóP˜è^þÖfU¢`Ù%‹š¡ˆ!h_Ì#šËµ@È›%ŠâJtÂFÏ iýƒùŒ8IϦ~nZ/–m pâ=FI˜é¼:ë{51Pú)z¸Æ!ôÓVòßñQ³7I¢¶±ˆ¦ÁTð(—Ùc-`ÔäñP›PËuóËÌ…0NÍS›û +-æDÅ}þEB»÷Q¼ån’Aɉú•~‚Gik|åéhÎ̃üMXé<á”r +-ƒµ&È5KN]»} krl¨¸à­ï4Ulžn~'‹«wÍÂßÓ«j‡üNEØÊ úôö†KD³H œÁé"ïŠÏ‹ÓYd¶û˜‰yÐ’®E¦bŒYe`£2–QµnÌç%05¿æ-HÈ >”…f™I­ðë Ôãº$Ž\"6nK4µÎoàWx£[³<+‡~ô(ÇëÜ÷Uø)rkx¿ÑaÀÅp”¹Á ‚áï*´ N±¹ï":¡€S#ruA2(ÎnjÄu`®¹"d¸äQz$u'^(¶C8©B„”æ>”ŠûÌSh”xéb‹¯æ‰ü‚F€Dî2x5Öšn˜Lkã‘Ùþ­ +-ÐGåþÿ7%ÕmNríÝý&ÅZå°ù:€1’¨{NÈf÷·N›Û +-þw…’ÁåoÓÛMŸÊ2öÁ«1œÂ3¶:ûŒ¥ÈFØt¼¡—N˜íù~)¢?à€(v“º5mîxZ-„Ïö'‹$¬E+g.œÅÌw¥ þü–¬w¯¦Gþó6”Å}»×Ü;îÏ#haû ÒÌC~÷ÈË`·Ðy…Æþ&¼•ÀfÏЦŠ ¹d÷æ÷[­1˜QTm÷ˆëEíŸn\' [9£ÐÕÉ­¯ÂÈ›/’ز6[íÌH‚¢(hñÈŠÍš›"AÊm¦’EÁ‚¿éQ€*ˆ9ƒÊ7ײæ‚'1(Wô{eÊIn'~7mèíq en>c$ì÷4£Éã4óàUtÛ p9ÂIœtFŽé–û°8ø:òíž~G2ìëõëßXKšº MU +-§{‚œÅƒd'6'­à½ÏYî*‰ŠP‘/´§½ïÀPñ˜×6T€ßA!B~m%XÇ JÐ ¶Òg>­C2„g9WYý‘2¶Œò7¨CÉg<ÊLph«}{‰%À¼ •÷sFà +-C+!7q¯û€xèvy!sü‡l¹^ÿ@í'QH#Q¶LϽÐ5Å(ìµ +-ŸäÁó=ñYS@rBÖM™(B•|qðXNÅ/YE¡ÏHå w:s³ícIùÄ›¤)ºWÎÉÝ7)ˆÓ´‡þ@“j%"}óÍ̇f‰s>®Tb4jd¿ŽºŽarØ“šØ¼À” ìK‘«ÒJï%lïÖÜ8•<ž‰êÚc4û4+‰©ú˃Œ©‰Ð¿3®\ƒžÅã7«w4‹tÛ&'| +-ù½;™õKñ*.“Û†Ó‡,ñ›þZˆ +-ÚƘ—À%Q98øÔEnuÐò<ÇùųKM¥}"ƒtÔŠ.E§…κ鶆R—¦5ÉBS,Kv‚ò€J;^Y  Íü1Ö’Ó­Ÿâ1Ù÷Ën¼ëCmñÈËÊ‚G‚S÷ýÅ"¿o°¾&"ņÙDÿt—+icâo‚ƒÎ,q™i2K3"^¸s¸OÛV•í㪀~pòæZ!;eõoA±•äÑ¿k ŠpúÓ*ûwœy¥›&á ‰/ü}ö ùýÆɸ²æ1¾Œ)‘ç‘i ­Ðb‡žª| q\ÖÕUe_w´f7\Þ´Ø·¹Iƒ»Ç\Bé?5yÔ7­›»\Ö«f°Ó­¼ºgÃrϦÐÎàT ߯AƒªÈ/ÿïÉ<šÌ'9Šîí~S^oTëRÞÛ §ˆ+÷½Rf*ô@UåÄãOaö¢×Ê¡á„|N.!BeMç +-* pòX?a-n^ó‰ËaÓ›]êÝÀ®nÊ ½ÁfH$rº;óìhÞçIðe°Ì'ù û/Ñ‘Gá#¯ —Î']!å>É0{µÂ*Žç×øíÐû“¿A‹>ø‚™›†8wšäª $œ Z<’y:T¶â+IG}DÅ{@† +-ŒéËÙÆùæpÓG—,N·8…‚÷AžH]°øºÕq[HKÝc–!*%@ì爃uQP™'£wí*—G|XÝUsoYmÌÆGn+ö1}}˜ Çÿ3i"Þᄹ¾ùÓ¢qÓµ¾&òøJƒ=ã_™Žmzózì”}³Jò*w7/ð*áJ·x©Õ½eÝÿCöª}\¯ü7¡sñ ÖÌÅc¢ÕyÁ^K+r2,O ›ð߈„¢zñtY2¬*Õž—%PünJm†¿Î÷5mèZ ©1!F¯7\´žê¾6ÀïVºxû×GMVC[§1¸^Û¤0*ßr B~íŸÄÂG ˆ•oº¤ñðÕng™Z¯ZY˜aqt6Z[]îKqQ‘ÈÚð (DÜÂ|ù·‰`27UŸÇÌp¯zh¦âÊA¸¾&¶8 {q¿(6¾ªq&½ôþþ¡Áæ°2—þâ|éÇ •U +-$ŒzòP "¿32sÓU£2Ÿ$݈+]V=ñª¿é&ÞÒzîC%R÷©u{rj"W4ú,²U:NÛLšÂ®”¦>³ô>ÇM§´¤mZÁÉ:4\Îp&[Q +-½X)áÆX@Š‹§a?­ øýÇb1f–%IqÎ-Œ ¿S(Ø gƒËäP*i#{¢o9,«CN]á>»!¾|c†Öòü“<¿fJu‚ {¦ÿr‹x'÷5Ç*¢fÅÙ¸IüÈãÚW›Ê•Ó܇s)úëãæ49žbqºM®:ÕbodC~(xž^‚nY1D·Þ ×…&Ò +-©lß +-Û™´}×Ã}»#l”q£+siµN‰Tjß­ »¤ÜokêÑÚÛ« NíçÒWE¼S€„›ª¤B|P‚Ttò5ñ&÷}´ï¾ñ:óyˆ¶im¿0çî¶â†ºyä)û*»-‘œúp žÙÝ@­ÕØgÂP­ð²ÆЂ‘UOPl¢½ñO =Üp±VŽ°é|’«UY}âøOní×t»¢lÁúbcß%óÐ.IÃú?üJþ‡çŸ7b\‡ÜiÉ#úÄ—ô ÓÝ~KæQçóJ›*´ÌÄ2üj7ù_•p_ôùa¥P8SÚ¦½f$‚æMšÝô ït2ì'<qQ/µâÞÅ|âëz]ô&a½,Ÿ^%’¡8fÜ!&e'œÒþBEÌ¹É K´(i²ûš:óÃý%¦y%œò–@äA¤nab€:%Ù¥D ÜÈ 0H͸lÀ` ?O)|(«ö‰ÞjˆÐ2B ÐÚñ™„m‘‘iŒVÚîå‹v +-²­@-eã—Ë×wlS+šš†&w[ø"aÃofªý g‘%‹qQ¥UáLŠûF.Ä'ã¯UûÓúS5Øõ± +-ØtŽËN\\%÷Ä$÷¥V¨ÀÊã5ëB”(“3L”Å2ßÈ$ [Øâ`f3H·– Û&ÃExZ­§EŒ‡2..0ˆ[ø#o¹s-ËHí{ä©òîN ˜Bq~C‘EVA³ó +-_ãK«,åqæ›b1ý|g‹ŠÚµB\ÈGú9.5¹ðƒH 0ÿš›lÄXRGZ:=Ž«`öÒ^ñÍ#ºù8°‹=þ;àË´ƒãõÞsYáÛŒûúÐ0ë-ì‘_sô£àcŶI|ûj_ÔÝ;lkh_ÓÝ¡†ñ½y° 2lzC¿S#=45ƒ"(ÈEíŤ#¢ÀpÃV•,òóTaŽéñè K£ŠÄ þÊÄð—©rTè™(#\Í ²°BX‘žVBQ\ðÚKZÒMèÞšãÁÓÀd'J÷£ÕØ5Øå™ÿêÖà $"!À”öÁ+{<¦²£° ow_öBúÉ‘X˜G]›CŠ¤{ñ؉üö*‰ý¦U½i…j=ÔK¸ŽÅe•!÷Én=VòWõKŸ5mÚà´šÈ2”&‹ïú¢„¹Ê +-2¡IÚ#7Õ!·'ów§ øÝô«GH?¢˜AÏs`;­ç/vù5©`ÅŒâ™È«X’nJ àW5ŽÐѱМ´Ý’sÿÚçE‘u8hYu Zp’¢DÕQ(FßÚÌJÑÁ‰¶µ•Ç×$•›^''ñPÌ°E]R2(úƒZ’Ýd”<œÁútNwÄýÜs“ÒFâÖ§“ G…ÝVäGvçØoúòà¿å8†‚€àN,t›>ç¢2¶°¨»5íÕÊ?é^ÑO‹rÀp“PºÆÒ¾^ÚÜK™9ÁÛG¥(ÙñÉlíIg'ØCgÔ–:ÌCGL$Ç>½ùù®pA£br’à8Æ螨]ú²Ìè”U6‹û´…¬VëÀË{‰ÄG物¬*-Kiák¿†2¿fµW™Íí••7ž>~‹”_tÖnB:*-yø›÷Â…tïFÒÝ„8n©h7òóX!¤Rw3À[üûùËÆí|¨Ó5J¹ÏhµþǶl5ož'Ú%š”¿1DË´ãòD6‰™J·Áΰܬ@áÎbgV XØEbi¶“<Ì/„a?o¸/§µ¨/µòÃû}ÜʃqEwª×&fÀåí½Â+©ÄÀ}7Q¾ZñȤ»HŠ ݼ•È(³³õÎzŸ¿ÀmU}ê8yD +-Êq)Èìc0FÆŠËÅPIdRÒŽÌ—0ƌ䇳Ž`Eð]ÚÿôŽçÈñkáxŒVû2ÂǶñÝAžW×Ô*VPS7€¤åúèû9œZVX7·K‘{4D÷ÒpC¶v"€“b碹ª1¹i§mø[ƒÑ2$ÐMúTÙA;!¸—|ž,Ñß烔ˆS«ý3òÛµ†Åïk¸³@"ÄÇÚG/dÖz“›r ¸ Þ’•pJIî íOÈm³j:&ÁÑͽÛa^æPdŠ¦ª¤}ƒŠñ40~,£1Kr\'‰uþ +-R’›àl”*¬!“ ï³l‘Sê³Qc@=Tþò¹µ‘?‹•û6•ÊòE¡x„5·i÷Ù=\–ºŸ˜rûlˆ“¹B7–ÌÃä…C7QŽ0Õ>aÔ_AA<ªyj-íc-–FCÞ¤ò¦míwpØ´³Øx£V>º9L~ΣÆÀÅgÐéê–º|70kÏþ7­Ng¸3) lOcQ5³‚u/îί I·Q+Ë´Á|ìÑÓ¶†;¶Wj-qÓ+éá6 ThßtËœB›Ì^!E´ê³8̹‘økXú³Çј P KD‚º‘¿Q¼/ ¦ƒÜw,Õ€±ˆ•­Þ2'÷éÌ2Pl¿ @ +-ç@ÓQÌÿ>΂˔î{$Aw±Zö,"Ü;2RŒyÑ>ÅÙ¬ži³Ð}<ÜÓ˜ûrž2›H›CWª|VÇÛ›s8戢_~WÛ×à€à^–‹Qá¾·wƒRØžîýrž­=pIwe_`º1Ð-'®vF8vºÑf²è:°ÇƒXí{&Úô{û‚[¤wî,6Æ@4(\“Xæ3¡ÇúÀ+‰΂¸öÑ…Á ®Èo·‹á¥¦#õfäÈ-Ü$~#Õ 8Ç +-…Ž• +-á‡üø¿rÒÝHÕ…›í |Ðð ’<AJ±Z¨¶„d|™Õî +-!Âzíë36¼°ˆÍ´ï;²õ:v„á_”€#Ô(¯F7cõ§TÕSä·ÉÅŽX÷õ×¾]Y¶ ¿Hâ˜K˜)t-Ù8a3Ð kyxë|)ùóººu;]æo²tÙ”¼Cc+|È}0o‘ÀX> ÃNBzî³zÁ×åÞúÁG*û +-ÄÓKÚ€.}ð¾Ìlg~§¶o¬¦»ô¥ÈÕ><¾v•ù„MÑ©UðZ\­ý÷ÒªÂzÎy4¡Sy Û ›c†Ÿ4á+d~í¼8Këi$°K‚›®*c™TÙRjû˜ŒOnWÕ9UòãÙ¹Ïé.axñ\8Å¿iß"tsø´®æŒûp $Z½h„Ü» \[2uñ’pfdòXºãy„vЧìk„¯N/¤€¨».`pX²C§Åó™> en ÁýZ‰tšq8ˆÓŠúúšvÓ,èPüd:€°‚ÂâÊKèe˜gJ ¸Åí#?­'–éÜ×çH^ðmÆ«r…¹= «ý§"(”k}R;°ËDŒF·ÒAKˆ¼Lо¶5ŒÐpC·É5sH2BŸ¤¸h“_þõ¹þ‰-N‰C4hŠF¨=0¤ý¿_ªêrlç%í##ù¹ VcÃ痣㰱¶ü‰åÏCôÅð¶3± 28¬ê©‡2KLy£ÈÒûþüùø¼b9¯vëAäJ_Ka0ÞxgÎ’>pÒG¼=ï•fèÙW|bª´C½Ø<"’ú?gÇè¥h™Á ½²ß*Ã'i–q—Û¦?ì+X†VÎ x ³®ìz¸´Y¹7à͈)ÀºO//mvÜUƒÊ?¬û ÒÙàúUý¤juÙæݾ$Xxxí’Ä¢ØòƯŽ’±HÇÈÓe8OZ®¹ûuã®ÒeA7iÉí)þ¿áJ¶šµ;Ôc£ßõèR2›^ÿ@«ß \_('ó¼k|ÙB6¸Ù l­$Þ^ž0rÝ^ÿ,KÊ +-ÇŽ»î—P’ ë>.ËšÒY#AŒã²‚h,H"ó»[œwíø0œÕL°=„Ûõ…Â;Ux€^B_ìêÜÎ2PÆû]«z^R4‘ΤïÊÊð%–ÐNW;6´ss#ÒÒÉj;Ó i^:-ÈûíV-8eA7ÌfŒCkÿa›„¦y ËrÓ +- Õ™Èþ­ÛºJ ô„S¥ñ‰å·#ˆ²€mº³4¹ÙŒ˜ûCDx®Vw#9Ø~ûóÊ…j!§¶˜Ô‰ÝÉäï«;ÜJmÓ¾Ûº ŽÅÂ5Î[Ð=†8Œ.‰ÒZF¤C"müRe={VîÄ>]\¦Ï‹²²]3Ãàü}±ºù7ËN-·­ÁŽébjˆðG1ù:°ÙLÜ+Ô +-É©“!öï.rŘ’†ïåu€@1¦NÓ²Ó‘½‡™ñõQ…@Ô‡ód ¢Yý”„Í +-^ÏF*#±œ‡åU߇»ºøùÿÓr¤€ÞqÚ +-­$Sƒ¦äò ®Œ{¸:(O 'Ô8¥Câ±ÈfWçu$hÆÛ÷˜Ü-«|vgåâÿbmD$öKz‚í<Ìü½Q$Ð:xYxÝ™ÅíRTCÞJ¥Ózn{ãç?ŠP’Lù‘¢¬Íîø‘¡ò”M ý†ý´h£¯’âHlÏǤ¡N_*ŒáÞxOÙw]éçàcðW£>T,=žrvÈ{3o*à7äû*VÛ†æéíKBfõA `:2ÊÝ'…~Ñ—\I ‰%ή$jÜ1˜”»þϘ(IvN7Mõ=\ØÇ|Bä˜Û·XsçUoçîÞ³êͱí8Ñ Y/â­F9™UÏû’A…þ ÙYÓ‡ªRÜ š¨IÚf£ú#‚:Õ×[Ò·’6qÆ¡ÍžŸHÒ.søíÉ¢ØÛó³­QÖGȹ‘Ye¯9Ò´ê­Øšg‰&Ö¨Ð.á˜&á]BŒs­7‡a°ÖÜ«Üøô°˜Ôu ‚–—=®XÉ[“Çç8Á7Dk=›ÙeÏÆq”Âæ +-‘ ¨Ô·ƒ`†™¢'9û€&" ¬pL>8£‘@£(Ša †aˆA„c&?h–?Ñh$(eë=ùùv8àÍù•ZíCÓÛ¢‚XOÝÈtßkqý­(1º û¢¤Ü§è•†] ?:ö‰<˜ÊÜ?fÇ¡û¦xÂú}<“Â@çš`ÐÖcÐ?ìË»Hz Êý’A˜Ç¿7aóy½æ·'º-D”­‹Pã}{ÇñÑzúq3)óÁã‡Æ¥ÚXŒzúvÕ\a×ó©0ütÜqÈ0RîŠÐž;Ĥz·;ÿf£5«Ìô¾1°où=6`YìƦOœ\J÷!, SUÍõ‘ï9ÔòËR‘Ú+O¤nËyÈÄÈÏlƒó(VŒqÃ:&Ø.¸w›'Ô ¶%Ç<;µÅ ¶~ÃÉ‚=Y{ò^sì(di–±ö‹÷¹¢»<ÎM‘#¤OJx(ºõøNßX6ZG`².®¤ºrÕTX¾BÙGÝân ͯ÷Ý/þ_Ôåæ·Á×îK€D£S€ytÏê±¾¥í –'ɯVáNc÷ÕþèbsŠ!ŠyJi&¦| ?‹/i=Ðk0u"º°¯yÒ(•}pÃPxðöâʾ¨ù+Ó½M {Ú®Ì}x¹a”7X­¦öùaÙÔ.÷ó\ÑóNóa¨­´ÏÏ×~ØïÏûKÁ( q¬¯É´ï¸Õ_Bpò_ö]œðÀ¤¨§ýÐ2Þ?Â/šéž°í©½•œ^C9WÌ}zÛkî‰Ûv$Ü‘çë¾x {6k5‚ª:x»û!¹æx¦wŠ…5Ù*“oqZüü~¬`«´Cxû·0Y΃ÆæxL ³ ºÔŸb0híIÝ€CëJY9\äÞ1=}{å|ˆÁÛ÷;¥0ÈZë;Ýe~Ë.¤%®7WøS 4sBÑ}BYž„â: +- ë°=¾wÏñ=&QE´î¸¾!™1ݪ€Ö £Ìkê¤Ç›GˆAŒù)¯'"JG@c;/‰;þغ÷)‡åÈÊ'„=\I}%Wv„„—î:QÎÈ{z·bŸebà (Óž¥4üvás +-9lDôGë­õ”ytÀ¨k¯æŒªçÏŠ˜¡+Ýçâ|<ÔÆ2EëˆM§tî0°¦º›Jo·éǦ?uàz8z^ÉxÑ(Kù_‡È´é‹²‹Ÿ‚\IÚ6€¼ ‡_§žef…X"ÊaC·äx›œu„õMZÀ/ (wçûÖ ©ìåc‹e6k¯Yö%¤NµOZArH¯©Õ¼sÛ:âW~< 4O\!/Ö <’Æ2¼0a[U,h‚ö¬i@T"¿Dm_H£M±I7@Ý$VýÏZUÆùþÆ…_#q•4ˆSDóÐ ÉeŽaÆ¡µ6ìà‡†ãl×÷9–ÍÕdMÜwNŒænâÄÿ þ1øIktw?×Þêy}æ&s_/ãQœ öF¬N‚f dlB‹i—jÈš¸–âæψèïã‚?«2‡˜%m&`‹‚¦±MœÈ©Æ"¸Öêº ­0èIÂÜ +-{h-#Ñó˜V î¨X²-¬vß«¿Ž‰_ìêÆÖ^i\aÑ&͉xŒ¸ è^ôn€X‰ñTŠ}oòèÖ› -ŒÂÀl#?ū׎ӛä§w)ùÉ Û;gÛ[p¿(U›C®=åŸ#™]~ÓÇ>+&¡/ZV¬5‚_áÇÍa#ƒ‘j­uðà§{\à…ß[Ë+­öL¾[4)o%ìÝ7™}‡t‘8® ¶ðj=sÓäâÈhá)ؤ˜mÚàäL –sÁA~ªŠòOù;¨hT4ñÁÆsÚÊ%c•µò{ômÚp«Q§¿©œ @Á k|µÈ%ï\O°¹˜9Œ®¶Áâì³-~ú?‰€vÓqwâe\§G„ ÑXQš©Ü101÷MÛ@`¼Ðœ‘¯´¾úÕkJÂ]“†ûØýrá-S‘uÈi!Ô€Ÿ—2^@aNÛDŸJÿ}èÍ:è›Sö–K)‚× +--áú¥èÏa42ºì3ŠfpqÂh+õø:‘¶AÇ3ýWÏÛ½€ò%Wê,“Þ5û(Ï3u‰ Ö(ZÛîÇAx5¼Æ§ëƒ$ÒŸ#Þâ{Ò‡ø0÷=+j Àd_àü>ÛW^xòì}óbáG¢ÝÐ%öú_#B!`lÕ›ÓýrWÿöë2†£ðó r¡£Öƒb>ª{&ÑZ à´ÿ˜n¦ù³úè&"Jï~Öqé>m¨†÷iîºÛׯ£Ÿt¢\ë)ùå¢ñåÜVÇ£Õ½Š;Üà?éó¥ñ}A£éÄ?{^Q›ùÉé*xú“ϲÌë•`7z-ñGèœU8ž^¿Dw¯e}ëŒ2 ì>*0¬|÷/ùY½MŽÖ:Uû á×4àô^>?jlèdS…¿ï &źA´×ñM|})îS8hÖú1iņš|6y™››+[ƒÚœ}ÍuøO0Ê~è<oj£‘Åç‡oò«“Ò*Êf@œ¿IZ™Ú]Å›©«·+<ý†‚ŸUÀ Òè¥\d­4ü· àÞØéà +-¹˜/„Fß¾´6‘ZO?~\nhC>-08áÆpíA¤5ÁµÏÙ:7„1Ñ¡,šAGÑ¿‘_å);ºå®ÞÆû>yS¦´Ÿëùm]|˜.YCçß½r´8è·“®@jÆ‹-8-­k$3è0‘×9gðH5Ý}ñ•'ãøȈqÁ;NRÁJû:e·_{¡I"ÔàÊA7]O,oöKJ è¾óÍ3XötŽl—FZ—Šðé. QHÅQÖÎ-È̽[©&Þ~q°n3¶tëloùDvîCt\È,s*jWqùœz_Î][F}o!¶ì‹Ã1d”cÃoíg²¶`Z++pòO7íÛM&Ýtô +-„jx:,}«œrDÄ4ØEì1c2x;7–U,!!— +-s‹È[ kN´ë³?ê1ëŸÏ0hIüH›‡¬ ‚[‚‘_æ"|ölçenß nŒÛ.a¼p>ûtÃ÷úöN +-? ˜œj”×ÛŒ£ZE€r­9œW-¦ÜTÙn×G¡§d¯ ¶•áClèÕÕŸJ²¥ã`_H~¥ÁŃQam|ÉãemŽƒÓuŠŒ×U—mRe×~MTŸ/§_»µ8½ÄsD|w•¶xnåøh!¹ƒóÒúätwlÕv¸ŽÁÃÀ‡õ~ +-Xŵ¤ñÎMÊÌmFé@<úç‡ +-G°õ‚%\ß Ü{eQQA]Þ ??¥+¤N“ÏQcéaü+)°WvkU>䥱3Á…r]÷DíkMž¸þJ¹‰ð› 0 8á1˜By]­]ˆ”–ºW„ L[d±A"V…Çšv)ךkëžbž("3:èšÝDk_¯4˜@ðåE¢ÈärÛ´s4òó¯~ŸÚWÔëÂ1œ[ÍFèðÌv.Qt ÅwZ¶²„aùü(wïätkæ×eDs;-Uº÷es‘‚xK¥Ëz“† &ó`·#±$`}è¬rótnÓ^cÑ„T¼xç–õßj[@¹óæÜ‚ãèÙeñÀí§õbÿ¼¼íägfQ‡ouµkVŠíÀÏ„¤ù¡'ÔFŠŠ_E6ïÃB'¡éF]~cÓùÄú#@779Xaˆ9p— <ÿ|]©4àùØÄVa±X€Þfù—i•ëíÜ(Á¨[Ñ— ®\d$jEŠV«0 hhÛÐ@~l¬Qgœ¬ØãEžÑ\ÿæÓ„¸?€€’—þÑ:ÚÀÉ +-V"'*ºº)8w¬Ölï}ÂõªÎ¹Jè¡Ô0û‘Î,30«QEÌ¥j@¹Ö!¿Ü$iÖÒI([€/âà:£Eg>JÞSIÍÝ9çÆ\AÀZ|Î…é1ŠDHæ;¹z‰WYB~8h+¡*m*^žÆzºâføŸVKú9•6ýrêÚU))^çYué¾i>ø¼L³™ý ytu~ˆv‰àS'¥›ª#³0,ôöLóNÛÚÉ=¶ëcnaRL¸£š$¾¶ný¤uJë³:÷Àüm×Øq_Šƒ¹¨LìÏØs\ÇEabaD¼·ýõªHÕ› ˆœÝZê Ù_H÷×Ð6ô£P3hOÛZùî૘fm<Ùwí³½ÿ@÷Áj$é¤3%ùƞÁ¥(\Á#6c¼¹ü4Ù7ìè¨Â¾ð®+êfBhÚ„¦ë¹ÇŒÆ hŸ`~ËÑMÎÊÞ¿Àþ¥[´içñ-›j}Ôø€’ó æÏwøÍ”žü;ÑMr$íµ¨²«$mª¶²aäh’À¢=<òg™®A´5>·uÓßÝõç8÷±ó–¦ØSQ‡&µ§ôªË¦û’‘–@Ð÷”)‹ƒü; S%ºOvÍzP³?q¨‰%Ï ÝKçî`û˜üÓQ¬O¼!6lp}F\Vóx( MÁïÝÊ#„rÙ?£uÒµ{,_°RþÓmoZÆBSgYX^]°hðh¿Ìr}Kî ù~HÍs¯#)ô€Ñš·¿1twJHg[2Mâ@wv¦æ~&.ÁömJ•`@;o©*,“jçV¢è¶–ð…_kqŠ¿>æ¶ÓÞ> +-ö7÷ä´¼yŸáÑ(ª>9ã¦_i•Sù›’îˆ(´œ¹Ï-­NT<:·Pùä¦s¦=ð+‡Ö4ìsv¿•Ùëñ +-ùȦ ?·Õ²ì{‹®ù=E\Æã˜@ýS,k·’"bÎθ +-,6Xk^(¡s†=€âjéس8üÒƒŠ*£›Ál[Ææç°TdàO øÖ,ŒªFCÜwÓ÷ˆB‘mŽz –.7™§XàG;[¾zÜúëWÝ䈡¡¶q˜Ü2<áÄA‹ÿ%òK¹ÿ°$bS"Ø¥Ò¶ÖبR–ß„øH)£% æ?Þ)h7ÅÈ#%¹8¦›ÇÜð»§SÙuì¡¥z’*—úC:sWÀ LÖ­.Y±ûˆ.s^ý?Éâ3uJQ$ß¹ 8¢}ùö³ä) +-áZŸÕ7-Šsû^Þx’%wÃåþïJ:íÒ·/sÍŠÂÅžîÑM]f⚘à®}RÐ3_—HµÄƒrƒ+à )ët÷BVLªý +-ú|Õ€Ú/Šn㎿»Ôrn½ã@zc’Wqøâ:6´$OŇ©Êáû2G"?Z5J*ÛYŸ¡>äA Ëö¦˜•ÆÆ‘jP¤m®güók4è‰7þ¬â¶øOïˆ!×èž· +-6îL·K¨!]DŒÎ鶾Ѹiz’ß}æ½¾ÔheÀQ}{…ÝǹÉ;D ñ÷âN ”½²°ßÊèjè—ŸaCi®ÞRo¿SbŸë€Þ´6¿¤‡aKòäÛðkËlCÃA€“1ß(+± ¿±Ð¸zý })l³gÌ +-'¶P©>#¿ªÌ\ÿèw$qß+Áæ´™ÊMÊCüØÏùͶ‚vÔKõZ‚"Âlrßßp­,ý[A‘Þ?¶DJtù“íÜýº7ÞÀ®†ì¯ðÛüêÔpŽ,{Ó2ét31m3ã¹;b™,ê¦Õ$í§¸é·Æ}G€éŸ€›äSB%ôíÑ>oˆ3g)IWöYh<¨œaÀ ñbub1çZ誘è×p(¬ñ°2ž_³ßºùŽsQNòp#Юõ¶.óÿ®'t)á§CýÿcaÙ¶ƒ˜YëqáÐmDÓ=3ª-A“ +-u<÷šõ +-‘%õD¡„Ô>W0(n +-“ îë×Ö-Ç/ùv@2<¨]›ŽÄcÂÒ&15!jˆüD‚Õ@CñôHfXtcã &Là÷ym°€S€ò˜EÁaÀ¼YT½ùÜŒüQ¾ã›[̵ KvÃÃï!0Â÷ƒH!Gñ÷G<˜eZÇ&Nï`D¤›øúU0îFý€‡“>æ!՛̚7C ÚÍ:ªFsÜi%§ÈÃ>dÿ}D úˆzáb.ë›ìÝ~hàÕªŠÁ/ÜÇjµCåŠÓf@¾CÇ`ðyU·|ºuó·GWã“®ÈAßéÌ[êøÔí>ùpHD•Þ%™ª¥²ïN¡Ùl R €mö5ðD^b–Œ3§¯`¼ˆ¾Ìû·,1ÇǾƒM„ÇuÓ½4ü‚üظÖ?jþšM“šXÜð«vEÜ!ƒ&?T¡œ<ê›’m\:•j´™bØÊÚ§¬éñÙø:×Á¬pAíþ!âyé p‡A†G4r_΂ÝûÎD7YÆ?)¡ã]~¨¹ö$mÀ f_¤gŸ,ñ;Üþ”7Q&?ÂWÜ×s²KkÞ»ÞZ­E£uYmñ=?æ~gŽR{à¥Ð¾÷y÷|4ÝÕœÞò·‡ÖÉd×/Kwê A§gä!þ1 ÿ{WaµûØ´øFð5A…¸SÕ`°é§}4Y&ì»G‘ä!7€ÁûÖÀakÊ$ÃõÚ“SýKNn ¥ÂÞªÓM%ó‚õÍ·’ñÜ»¥s 4!rDN ÁðÜ ÙžŒ¼S¬Ñ)Wb Ÿáõ˜{ê ‘x÷_[Àû¦m άHk­ñÕ„]†‚¦€À‰ê~:šÁ¤éi³y¸Ä`ÓÈ@í&Ò`aØÿõšÞ ·ÒKäê1z¸OTR¬—Ä囼>I-?¦sö!(B¢§mbsDÞu½R¦ëËßܘ‹ +-NÑê Nâ?w|‰ü¦VB>k ¿ ”7r4Éо‹£–ë*q3I4òýŒNw÷—Ê忈<’ó5="VÂ…ùÏÐ:/ `ÒâÆ+5ÁŒN¥_,Ã+÷•åï9™È&âI.an¥÷×K#ä9aZ;‚ÔâõA~ÑC™ÿ¢;ì­xŠáwík×UØ—I£.F+†MÆöì\ê0üÁP­çˆÏyŸ xæO¤3cxʺç>Kš;ss;xt#6€*ø¯ïv›âuÃruiI¾ñ‰;öËGCົÒùŸªð ”‡ÎM”‚…ÒsöþiM+æŠz 8ŠiÎeìþZ­ì,nNOŸÜ¬ŽP-Fk˜.Gð {Ø÷¶ÕËc]°‡¥HàÏÔbv÷qÈb¬DÛ+0@ÊÇ–˜‚Ø”§'›|PðNkZ.`4Z’˜~ªH €ë$/¿>0ùá>¶ñ§+ÖB¶Ä­ÕYœVöj€øàVvhûÃ1ך;Ø>62©·kõ/·æKéñ5V1Ë ë—|S¬Y¥Ñ.»ÕÐî)7ÑèE˜Ï'ju_Vq†Rø×;î“ñÇšTïvp1º·ƒ"ÓõY8¯Í¸÷ôÀ÷å¥ùÉñ-¸È£MªhÓØÉNI¾k¢:0—ÃiN¦»8Ú“™‰ÚÄ‘‹©ŠEJl­ õ¦Œ6Ÿ¹˜eU>7itsW—ï}äv¡àÉ4ÐÃòG{3yȹûBG˜_ÜN¡®%a³XPzŸ°FpNs¥ëºà¾Öò“¶Å0Ýá Î~ÁRù‹&ˆróN +-‚ÎeÝÓ è_êÃâ bû^^ËÑ{„êÆ«Á ˆn¤?_ãê¹A5iü$¡7´l²Áºïg–Ý¡Ž‰(’2PˆÓ`»<¯}}Ä¡¼JØ* O´5M/Uçp뇛à9¿¨T-±nè4û@iÙò;»èIÌððûÎ5æå#ªzmÖtÊ#̹Ž–3Q›“ÙlL[êËÆ”¶H[-É«Âpå„€Ì4E3¯Q° éha Æ͸Ô~áùUj}á0 6†ÚÌÃÓIžØ"ò°Ò ç¾?Aòãœ?¢àcpOuH–®80ˆÈMgÐAhÕ>-XÉñÚÆÎ2óú™LÔ(Â|Žä‚7æÁÀ=í¸ìýšU™ÀÆaÔÍ +-·<Ë4tæuQϹª;þª=†[æ~ÙІO=ÒwÝ7ðÇï÷›’§Þ[üžòÌî²6;mÞ¡Ûª>ø¹‰ÂÞ¿ùÙªðàü´LÌYnU©ª$±¢m€BNw¨¹¼6 ~Ynû–•wpÈé]ûTºâ¡9Z܉w«ÎI[0Ëȃßáï¢øœ'nn¨¡Ê3ÜÇŒÊõEw ŠÀßÍ,8„?û¸âóónQÎMçTu¹5IàgQT؆¹ƒTåå¤MËÇãžî }Ï%&Cè·µ…q…”ü\©$sz#`}Óe‹¿3üOVÂèGÙßZÑÀ¿8¢ë´ÏÛ×£žhDmŠ}Ë‹ #ìKÅÕáèçî{y ™RXZ;])pSÝØZ¬ïŽTN÷•CðóO€í‘ ¼\Xi6'ú5i/…Ø Ÿ1ÂK7$„ÈÔ ȹ×ï£\5YofZ%&‚ Ó£É}U«Çhùbfˆ¿DeÃŒT#B +-|£Ó[òá×Â~<(Ú9”›ÂéºaŸ]×´ô„z&ØóB‘+>qÐsÕ¿¥n]±3¥ûDÔQy övÑaÝŽ—KÊ͵"”¡µíÙ!¡DZãq:·Ë¥o!=xŸ÷ÇIw=¡B-oÎѶ~CQ“ä;Ý@ƒr%ûêlЉ~æ±Õ] 5a ýUUKkÚ }bË}T(x`ÔJlç7UŠR‘¾Ç¨þÁ)+ÑžphöQã‡è“ÏV™ éÏ[+Ó³Œ#5Uå¦g³P;ÆÅ>ôà NnR¸ <˜(f-ÊÔîòpE;:%'„:pº‘ Zëèl_K³Œ¼_¥:ÿŒ~\Oe‡ÃßLQžO\$_ãpþŽºÉ[ÞÆ;Ìôh­Ý«7wmPj–rßµnØ"Ìñ›vxdBM“ˆ—Ëcfà (ÄàÆö˜DË"*7˜q˜¹¯'BtŸ?:÷=lªóÞ{4‰µVTàÔ^âD‡œ3»Â㌠Lf°¾Ò<\°þ–&eÀ+²gB‡}KéƾæûR½[Ý*ªð+ÂJ$d ‰v[~¯1g–y†¢úPóÛÖ¯ÔÊ@º3`‚sLî俾¢G`=Ï>˸›k _ä—@G¬e‚«ÉV¨3ØÁ¼Çü‘6—WöWÈ:l¶éÃ!J?ùhG¿ q_ep‡ž]4+mu>stream +-nŽá)°îŒ:T¼MOŒHBù JÈ,QµêzÄÜ¢€S(&èŠåÛ4cœ/=#kó¡A˜“zŽU X43ŧ¶n´­”OˆÎ¶z>t“ÄYš¡{«}; "þUï¾+l~ÇôÊñ.ˆç(äB¼Ò >c=3tr ©OèRòƒ3ÙÜÒñXèà}i0KÔ]F÷që üž5Ó þeðWLœ3Jq§È±dºUë©‹Œök‹‡ËM™5’Õ½ü~~¾lðÿÜÆïÖ,¾ð‹P‹ì‹â€0Ln[—ØgÀà,’º%:³ŒÃ¬;~­³‘š —[‡…¶¬?ux} 0Lg¿Ìª ø£Yঠ[Eéð1p"ÇÛ¾7¯wtžÐ=ªOµ'yœˆ…N§G±/AeÚ¤]ô;9‘’ DÀòÌ¢î[p¥ˆ·ï‰k*S†i0x÷9÷¹ÐM5YôÜ­G¯1`¸Ïóˆ…¶¹áKªvøø·Ê ¼/ã­˹Š»L7`Ã6Õ•7ÝR9ÑZ¶ý2P’è~?b tëßµ˜‹óËÍ£SúÂÌø+e—ïýs댹72¯hÏÝÈ=éEt à5­„Ú.­úãÁÿ©~_ÁíÊmë4F/«Ö}{>Ë8Ÿ7Ý\ƒ ˜—`&g‚¢,°U.×M~nã¥÷[, +-˜²ïc0?…¨^Rï#5J:ë b%ÚЮ]÷Q-Ñ/ÑÜö扟q‘òc§p¡ï¼œZ ‘Zó\£†(„ËÖc´}å©GÄè[LÎðÐ<.@¿‚@|~Ž±d^omð’/¹)¯>)L˜/íŠÅzÓ¶‡õ¹¡™íVmè——Ýçáß&ýí“Ã÷Q1œ„ø;¨0jìKz%ÎZær4†ö&€!áQ×}KeÞ÷#ùšvî[qD­É…»®R8ž÷çÅJÚ¿JTJƒ„´­Z×()}Ö×›à±_þЕF¿D>÷Ï=&ã"Oºc å£] +-&DÍ$÷0*¢s+<ÄeI °tÀTeÎ]Ìs<ó6Áçwô…V“…‡Íù…: )Yo-úÕt†X¥™¸³/ö¬AûƒÖÓ€yè(½šíµÍ(È$ +-’®']8Š†]Ó,É£Zq€ƒé¢3÷W+…×ÒøÜÃ0¡ôÃÈ -û"=ñK;ÛÖ2$6–SÿÊ,ãÔÛ7ý…ü†U¨6¢õKÎJ\Îÿ NF|á÷»(Þú¾™| 3I'!ܳŸó²ØTéPQ›)Jç¡=0À/wöiæúÿtÝd¡â)‰„*-ñVæ>>ÿü°A¹mä‚Ñ<ÿù‘íÐÅ<¯ÛÙ‡z†÷[¡Á@†ZVºeÑÕ}Õü§6’éFD;@R›íóUxvJΕI^þ$r†„<®A[Ï2E;†Ab”Áw±áÍ{Ū Pa¥¬‚Òò-ØáHÐ9¼r¥š\Ñ/Ã]pË´á>»hpV­@Šy>~ÿj+ò ÙIV¨}9 œýÇb^š¾¹=ºŸ¼ý|SHŒœ5à`Û™.yH>j»mÁžFUNˆ‚OòêàtY€øa)çßU$‰i†Þ>7ï÷µqS” +-lµTZ‘Ùç6‘ŸŒ ˜u9€­%Éý»_4 +-¹œp¾".<¸þ£'~&ªÈoA ]Å êÃZÅÀyŠ䱞îD}¥`øù¡Ãû:kàø¸Ÿë!;(×8’0ËÍÄèÁhYší°‚Ÿ$|žà(ë¹ÉòMî(ÈJ± ªPÀÓÞ>¹Æ>ÚYO mW#i¿Ô¿Ü¶Ö=ÿÑM'>ârO‹Ö)}¦uxßi S…ð—0whAOK£±|µ#Áfùº®=½âÌCœyܳð@f»”?NóæA`ÿP¯IÖvǽ2.r±ˆ†àzZH^^2ð1rÛšLî»ä~úBŠ k‰¶,<˜¹È¯2Qµ,LöK¦ +-tç Âá w‰¶F‚(8Æt¨œ< A~Þ‘ðÃ#¥ KZå*ýÜE4Ã0Y¡p¤¥—ÄÀ:Ëâ%ñGÇ9ª¤äÉøáǦŸ,?ÆFÀ,´å`Ýt“ûöÙâ}a´5ÕXâ4^²q+iÛbiëëŽZ½XÒ¸7¸+Ok³Ö]BkÇÙt; +-4÷‹ +-ò[±â,¡ep:·¸xr:o¸­þv·5ßjÙ0€NÑÉQOÈb…?Wì°©áÝr0º ­ù¾K ÂW«Å†–àôÏ°y°ÜΠÄí¦dXŸÃCž´Nú¼WŠptÍ­ñ…sóЋ>ÚàÖ{XEÝD›,ﱂÍ%µ—ÛÖÒPju½ùIOk! +-+¹ð· Óëñ@/±}©`®ÏÙZYn4•:ç »ƒÆ;®46BÑ\E#jÎŒ¤Ò_0Êÿ+Ès»uÜ Aj¥øº©*qiÅ\‰ä'”ÛÖk”bô³åá3($à +-(­gÃÏŸŠÏDÿÛûf¨;¿ñfòØ4ïÅ4—9Í*vW \ÂÁ ‰ˆú}sâñøGó`ö õºÄô¡2+ ÕƒJ<¤ú¯Á¿Ê~rä7¤K9[q³`+,á ’¯ÊÜ ÆDm+ÆßÖÑQœó"ïÙOMkÒ66Djû=w*»ó9Ð/ù4J1í7¹= +-—d÷Aœß8²Ù¢ªR—«`ûRÝë³Æy-Þ§˜†É=öGƒýgõcm<ÝÇÞ6h°Á›õ€“˨Äåc‘™¹P +-Mòð‘˜y @pÕÒ¯‘Š‡ça€«ijís'ðèT#, +-I4áSÝŽßíµIf½*W´>0àN駔R]áÕ$`Ó'\*¢XD +-õ…ÖbL€Â…\Ò«ÃÙ@Šz +-¾œ”NõµÁ¢l¬\Q¬ìMû¿ß?89 öƒ+ gT…Zì閭_FdºÏvspGZxº™s¹]+y»a †ßb$q¸À7Ðb×Óå‘bIòâÞñ×Ù/A>.P+‡yí[Ç>¦v•FupWNù˜]‹–;ŽMý’€b8z˜Ë%ëç^çñœ9¥ÿÙ¨I¤Ñ‚{Ù„ÇÀ¨5ÿ¤©!1°Žq«†$Õ«cÇí%ý•-Ø‹9lŒF Ñ3{ A3ÍéÑÇÒ2—ª¦ç9³î!וÙïÝg´Ã`ã›5lC2ý«ã¬„3˜Ÿ¿ÃšM¶†|²“ôí-ÒÞqbUR6§sßx^¶(Y€·Ó=æ[™ç|2=]¡ÆÇ[žæacoÔ[â\Àtt—Ñ“sËÔ.GÊÒ…mzr[n´' ‰è–z¸áv¥å&A[oH§ÁèÑ£ìW0Ž7ù +->Â1B– ¬“õ›¹Ô·+MŸa7}.œ\|ȾŠ+¶Ã~p”ùÄ÷§ð÷ãšË»Ÿœ9r¤Gpº,Ù`©·§•úª«ã[cc1‰`Ö6wisù3˜«˜==Tqos'4Þ@ä|57×À?f–6ˆ +-Ïð^ô­búÛà‘ßz‡Ã´ Ì±Ú±ÊÛÔùgµÃÅÉ¿;žØÏÜ}·쎌l6ÔìhdCSJ|ýT·jFgŸVÞ>3Ã<-i–µDÞ¸Ni¶s*Ò\GÿÙý¤;qK½¦È Å]ž#ãÑ÷qZ³Y.ɾRaâf2wÈaZ6ü*Ü#Y5}­aTC¶õúˆí¥6Ç-øÑ Ÿß  hÔÍs&þUHöÇy(^àÌ~Î䢥O½Î*âþj¿^$ ’ F].µüÒÑñ}Hë¸GÑ«ÄWX{{”l†DÕê’fÆ¢O¡ÃYË-“û¶7¢=(rˆêF¨g¶FŸK¦Kf²‘(^» Ì>‹QF¹ËZcœõ•’É7ïÇ+w ˆÊ÷G¡ë>|~;7oÐ¥“n¦5Ï»ÎÙ §xë‰ùˆvü^>=thÅèþ^T²¼5²Î¢âôú•4÷K6[=ŠVÄ°~÷u:¾ãœ@ðAVÛDÄCÃFLnOº©Q„tó¥l“p5M=ÀMþ{9âFw’%oãà3a3½èÎþ%‰cЦæN¨Æá.·Ø¡á÷U‡ÓlåsU¼WÉݲ“”ód쟉kò‚øœàÛb;n~/›A¬ô>¯*Û\:Ž)Ë‚ö´lçʯFX4—5[¥Ë–Wo{“âêƒçš~ «`A)Ÿ ¥"\„ëúÊjJÌqžbàD2!D>s‡6& ×ôŒõDÒ_ùŸo¬HWý·bç>lC À¹Õºî³¥X_*È^®çG Á£ Ûlíj!]7íÈŽäþ];Hå¿g(IŒÜz’þµ¦eG^e¦‡ QGŒžqî´d$¹ ö?è,˜±wJ›lÝ­ýëzj¡ÝõPFG¼ò”:;a©Ïrü§1«@üø¥ù›þZ²n}œöAzÒÐ +-;íüÍÄG®:ÿ…Û¶î4žð™deò†‘rpÖ·ußjÚ<¤p¼Î‰\{šBú¹ú+L{¦ãÈA¡á„ëN{Añ¤àÝèzJ”PO”†¨´—_C@€Â ‘ˆ< LÃ8ß#2 ¢xTH8Hc‘GaÄ@ Ã0ÃbA¢7}Úu‡F(¯´ðœå¼Zó‘Ò Nבj=í¤€ú›d/g™ò+ÉðÁ=º³Û®)Åè/ [¯tAËèû¬»%x+AEZ$KìÂ9+2Lð ­ `G,×—.Z„óE?QËÆ y÷ÒŽx–ÒQ/£¦ÄýÜ 7Du¨-ÇÕ0Š+K+Q%1*]Ö +- Q.Lâòêö­–^çÙ‘…ëP«“ÿ”þ—ÝPeµƒ4uL#»bðëÄMyØa?jòƒ½®õötYÎ’„ÍŒœU20a‹ †ô¯ +-!ÕüþÎw\Hl‚[E«8šùUÒT>x¯Õ ~\󌴺ˆŽá©8£Û¦UHå¾ûž<Ìçˬ¼Œ3%¸/€ w¯ã1¹Kvï™òÝ,ùV"NbÀ궜?]Ï9è϶cYùµÇ¾öÚ!ŽÌbcn¬I䙸¨0õ™æõÛÖ~p´vtâŽ{'?¥ZL¿®‘È>4YÌÒ47­¶;—}íCe¸ù²Cå +-cÜö¼"$3&K—Gëv,è1g©Þ4j…¶wI¿ Ü°ÆÆõJ,þó‰ÅÙN(³­n sŠ8áÜìðE†kk]Š±úb€çñX+ ù¾l&Úî¯DMÀÜT-¾A 1õ¯‚hw¬I~?¨mŸü\KèvÓ<Î  k~Öy"YHcŠ„dÂ@«=5 úøÔWáùéá·#g<º›o‰P¿àC… ÷]í¶2\™†¿Xý€GuJ˜š!†j¬É5Ì3@öô¼7Q¶ó]E‚$?dvfy$Y¼?O¬´FœýÞàWa€Îu¡ë«à™òLŽ YÇ1<¹zþVZ ×Ò"âøœ€Øšcr8œ„'7 +-´u‡½ •ÁÏ×ö«Ï›— c™y|?íÖ“´ŒË}Ð1à"ø5«–úúÏÞS.˜‚ßÄm,õ²ˆY ìÒ>–us•?7¿eMŸDÛî<)“€WA€’;§p@“ÓÉ„ï DŒ¢Ë¥Ø[æ%p;…$ÜlƒTI[£ÇNAÍHOº.np÷Ç¢4ÎæÒú\Hµ.7,“Ã)ÈQ{ŽÕÏÏuo·çVª¿~0Ò»êA(Îæ¢3à™˜]ü­GΆŒ˜ƒ7Ût[–é+€vð,_—w¬QN¶¾ˆÖ8 §8£Õn¤ŒNtÝ8“*àŸœßÉÆG‘к“%6Ç‚_Þ[£UÝÿãÆO0hW è;׋ÖW0õêwãÍ( ê8ƒQù¨*Vé[¤_6 )ÍQ×÷cpÎ1¨ºMeÐÎ2ã†w­ÇhÕFÒã°od Õ$º îdr£@„h{to·íðëkI1¿sGº¸c_™x.ûcê²£Ì(Œá‰ï‘ûnG‹|ôè1‡n‘”‰eºÎãŸÁ_½(í¡ .šLâ®-DÞ¤X~zY) žFV÷MÞG—ž›g@£º|°µjÿZv𺇑Ê( fh&Ô\¢èV)Ûáû“ôMØ}Äéú˜Ô"¼I;‰š³ñx, +-ù;Ábn­Ü½fRN²&4>ÛÎÙ†¨v5‚wÒøK¶ø2¿ \jÒ²‰QÛé”å‚¡È8í뤡àš[Áö݃­•OrõAWóåþGÀÖÀ/H®°q$ ò¡WƒäV©Oö7˺gòã[V†Ãu,H|»ßÒQ¢ùSÕ½žj +-'Œ/™±ë×â$ÝIMXGr*¬­Ö…ž{ê¦{_`§Êõ© ¡a²ÿ +-]¸°f›°DôN•Ëê‘x5ÒwÔžvMçY”Ž Êl¤¾èÛqߎñHznŸŸÁxgÆðóŒÆnâñ°`ç€nL?(”^Œ ×z¯UüaÜêkªŽªãùõ/¤¥cuÇe›È´*Tùq/ïÐõ[cŒ…Šý29؈umˆè>Ê«x¹£û¹5bÌ3‘ižŒÅZZ†„BÃË£#Û\P/@ª§8žßôJ»¬·òÿl~ËÇMåãÑÜ«ÕЧðPbÓœ]#:¤è¢~\»;óÕEñ‘çøðžÙBiHy}ö^à¾} lÅ·O¸ó(:“}ê3Ø‚|èèFA?PŽjô¶÷©v ú" €£Úeå_™Ÿ@(1X·µM7 +-Ü¥ù5—ÔmïÇü§†ÖójÀs_YÉ-~U¸Q5ýc¶È£yÛGl5|ãR·¢÷Åa²ì=Ç#²¼’^´u›tNåÂbͯx ˜7uÉ@;D—6ìZnÓâÊϲôƒŸË^sž_Föi‰(Ü‚W/Ó-¾â©oŽa_ºÃ@ðᘼòÉ——ªaê«°³ŠQ ×^Žf;9dßT¥ò³®|„®âg‡ØiÙEéÖ‰,N9䵪ùýR‹<:Û>Þü貈äÇò¬Ø\hóo‚fÊê…¬–§ñC3 kûßèO~e‘­:ÁndhâÓß&LÇfCW m`lc8OzAúwÉü€ÇœÈc€ã¬÷'ˆÝ®‰Ø©p>ôe“öMs=@Ãè®?pï¡/­VÇXÆ<6¿+êsþ'oÊ›‘_:.òpRæ±Fý¡¼Oò®˜,s–"—ž<’BVB(Ê»ÌoJZ ߬•\êŽ6_¶vgn]Qb8Þú"QÐ*dÛ%£o,Up$s£7±ÒW:‹&þWGí!›LA³­‚®!ÒñÛxºê]S‘—‚¹¦Í€NŒ!Ë}ø,àXZ}Óõõñ«Âg¨žžîí®‘´“þO¥¨„ +-#ó +-…Zé0‘?:½÷Gä—S)[õ½Á–VM"½ŒxéLnKëcÁ¨‡qIi£ ÒŸs*r¦Îal„ø×ÛìÄÆ楰B(üÂĤۋ×Ñgèå$²¬Ïõ)¸ ìesÃOÍ34%Et¿û`gP¾PI»¤¹ËŠ¼‰g¹Ò¦ì^~ +-áÆéÏJ§6U¹Å1{­3?ï ø¢ ¥Òa*²aºtÚ­ÐçÞËŽß¿‡²äÌç®*´ß‹¼z¾æÇÖÅuÔEÈr-Œ„Õ€©O'¯T©&?{tS›$ü—×é|•Œ LJkzŸ[³Cu K½/Gö€-0ØFàËy¨ ôVQãÓ·ê2²ªÔý‚u]f€Æ!§RQkI#ú# +-åa¸áо]€¿ãd,[ ¼\Ê^}êys_ï,òå‹á6]L/QO2ø‰Aƒ3ã2  ª‚ˆGSÀ™‰á´f†sŸîA$²=\ZÚ‹rÀo´j¥œbåÝD½rMz‰x$‰9”Òm¢Ç þëMè” Â.c!¶®çoSólc_™×wÃÆ3?¢ØmPÜv¡ 6ê&®/=DX¼öuàð¾ íiAI÷œ!oU¶]úð2“ñµ4c¼èK:F]•à[N@¤Âæ{~ °nXBÍhëeë)±)ÃРf ›•moÊéã:&<@€ßïÈ*“ÚššðuàJ§˜Ñ¨-ØÓÐnnbDA´ÎÖÏ’£Wbä_˜zUSI2¡¡Uø>ìSOX”C}m—ÿãx´£·ú¤3ÿùt£@|Ö¼Ã/-4«t _y/CÁYÕ…}Fî‘ü-àÇ<,ELÎøáÚ_K¿nœã<€7SéêòèâuÞB±'‡Fæ’Nu“A«(óìm…7‘À+„y¬Ã”šõå8‹™>Æ&±ò¾¿€r]éS mÄ‹Kjèˆt,uϳ.þå‰ íóÙšàF¡í·w0ysþÙ__€°MûÛùÉÀc@€õùâøõú8œ1ý.Évª‡c¸¡›VZ,<ô'Ûæp92‘s£}ŠwÝ’‰wÈ3ÛÝ„nÈüâ}F²«™›¸þaßÔÆ™U-ɽ›bæ‡ß/ªuËÁ¦©ÚÌŸÇd^æ\¿4‚å}zKA&ÀÉnb%§«¨ÀÒܾI¨;#øá—þ%S͇sƒÀKZªljy2™Ëæ~*Ùhn̺s˸Ü!ÏÆÉ"ÉʧÇï€!ò´úµ]8“ŒÉ¸bz„í;?h°OK<† )ûpoªKo3•–PÎTÔÍ@¥ ­î]­é²¶Un˜¾eµtpR\o²°ü Kõû4݇:1çcü6’XK7~®º'€ã÷ýnÒ÷Ò3÷ó»TE‡sÑØeYÆJ°Á©Žç6¸¸sëx ér²Ã aš_'Ø{…ŒPp¡3ÌÍìxJðJ‹ÖeåÁcÄj1´Y)úÄmªäð“@I_)@ùÁá<çMCMÊáŸù&SÖøÈìðs²Î=è9Ý,@›‹£Â[«äÆ òÓÃ*  I¦=ÊÆ€{ 4§"0óË4¶ŽÕ–1V\šêçìð‰/UÌí-Üêù«~i ò–Òô…õ ŸG“zÆž[gÂHÌw(ŠN ÕVÁèWê6Ž–îæÂ[Þsn┹UO Ãfòi¤`<ôJ¸ïŒO3:©£T 0ÈUßÁõÑpõ9v»£;ZT áÇf.´ d +- Ȯɣl¿ÄMø¹$ÅšŒ*øFÌÙ›’£`ÃÜò«á¶H‹b`±'â€Ë%G‘·ühñQ±ûè%÷áä_~¸´gPêíuüì=ÅÅߦ)ëS¿’cá,Èm-«lvÒ—˜"„}vÀ¦i›Lž»ï›’Çt3“Õ®§Ðv=éeÜ«árr·5M®½C£é"ºb$¨ÎŸcÑÈ£û<Ã÷èuuK­½|v‚^“Ä@`‹œ7ì–D9²sèFé–9ðH;éߤoÿ;MÄhQÆÔÜo©ÛÄ6‚ð£A! ¦ESƒÓHZÒÌþc·ÉÁQV~sª°Ï­blPzé˜â”âéÝ:XB&+€ Tv„àpY¾üÿý†õ¶ÝL7;½KfAÀ=B­ù‚F镶üâMYŒ…F£‚AYCZ­îÀ°µ««<TÞW«nñhÑ÷ !} +-CÊŒÑ<|«Ë>’%·­Æ¤…性݇ԛoÓ L;iNœý|]ö}¢~įŸXIÅ¡äïê¾´<\»8iÃÎ’ }µ]GƒG!~Üõw4eü@6Âòýàþ.?o’Kq8.rTýqrÄzÛÜtW²>X5E#ñ«žûç´±ˆÚÅ¿¥Áù±3›×väѸb+ +-m )”ñ¥¢Æ¼lDy&Î"ÚX˜ ð'ð¾†íO„'JjGÀ0ìYùâæ˜|^ Ènáʾ†ºƒ! w”¯„¹3äï>ÉÚ@²¬èìL±®öËxd¹MÌGk-ã×2«EÍz qq×pÛÜâ¢Ý—TAM·OþnªÎ‡Þ„UŠ×Uùñ¾Ñ†KK\Õpªëbƒ*ð•ZÜdÃQƒ{•ç¡SýV!-‹‘òí¸gSé ¯·W,ö êcËjÁŽ?ž=Çn)ÎÜ—p²gA€áâb—Q¡niµñx¾¨€ÞZ¬¥X“…1¢•šõ•ýÜà:à{™P¦ î_¢]ìD„¿*Ö*­s' â… ñA¨ž:¾[“l‹³$àu_;ažk¡´$ù`ÙsB&ø¯øKžêëe£èšj›3VìJ+ÛM¥ô&zØ fJ7œ&=ƒ’Ò1ªiuÞxûe +-ðrc)Þ^EŒÀ5—Á+Ô¦yå„ÈצøÑcåTÏUÔ_Þç‘ ü€³gu¹mŒ@Å …Ègh Ê´. Ö'Ë$ ì+明‘ ¹½®Øå͘ðöÛ$ÖWvA€åäW»ÉîíËo¦"SþAÔ†y ‚q8––߯I)|»×ç(š L~óÞ÷'âÄšOŽÚ1ýeƒvÿAÅFÕk…¡y‰ÏÆÄ»í£WºU)è+€ Ìé[ƒ½ûQùâ Þ'Á·NŠ'‡8Ê‚A\þ&£ûÜ·h™Ûõ"5öŽ:ÓÉ3Ø¢<@’ò+8¼³ùöø6q™zH¡/þ4Z‹™ÆÑ:ˆ‡‰âªê…”%°o‘4°]Äœf.‚÷ êahkæ~q[ˆ.Q»á<§kôÛŸ{2Z׋™Ÿ×ñ’3¹”CT¤<3ƒíÌìA™µç÷NPÜQhS³sÈ/¯¹O.ŒŒÙâö š 4F—Õ.šDòŒDæF oU#rë­˜ Nxñ­îLjÃk‡^8uçeý?+Ò}>YÙ}I`®À[.$bQÅh€°ý9sæS—-7Þò¡m}±¤Eond¤"Ã1Ç©?Ög \CrË~~,Š¢ µLd³Ûî?'„ŠÔUKÀUt]É»cs¬_»ÒÇÀü>V¯y<¸Gw„Ý Mè#e*æÁýûF®ð¾ˆ:3Ó ŠÕ³î±Ù.OÆ}1pÈÓ+D¸Ó2eâ÷À)—#‘j+æ”꤄•X–¸Oa +-nj^~·yY= åQW胳±óWF}?Ûèœ#QòS;®Bfî(’_’yÒÉÄ?Sc…,`~1-•*À¿2]NùñÏíë éðE¸Ï,Ã/Ú`Þ2Ož }ulÅbá¤X ¶¤Å*BVžä¼ô¢¢õð«X¿:ѽO^;нœ;×Ô”ÀU}n glq®YYÓ³C‹žD«a>l)<ìÖ­WüX·?@ã^f9:XFŠ¾3Ž¸Af%Qœðx0®Ñ§V(kãØy®aXz·ýìÃRX"¨žÝ…Ðóz2-ΤØ /æ·údgr‚_þJ÷¦üEh"pÈx^U¤ÉÊ×éÄ“½vêîYmG NýóúÅß)& ¯Ñ¬ùûc–ô/›â× 6ñÁ2°ÎjàA`‰B ?>g[ˆ†öE.®)ÚÚ¶ +-+ýT`Á/”Æ`RpÀ}:"¯ç=”ü%̾q`ˆ¦²ìè„Ն؀ÊÅká=Ï"dÂ^>ú2b2÷7›²î{†ûÞ Õ-á—³‚nÚïË1º`ˆ¼#u,Ñö¹p_…W»ÜÁÉÞ"uó„óû‚BRr^zúnçÞ¶¬ú³Ìú~fXVE) à?œpÂÊ w×>x0´õ0k)¾/Þ’Nù"áLö«æó^ƒ*û%Â-j=spUDO~ú!ëwÃ}¶LˆF4&„‹•eÀ¢ÛÂþˆôœ|n•LwÙšBb#8%§¿™ +-Æ°/ypQ5ª¨k*¹ÓÏOhüüo¼÷½ôñþk®Ozž"[2§Ð¿›t¹ºeo‹§ñZÿ*í³ëóZl/ÔxMuà ' Ÿ‡+ýó`¦ž~y<Œ³ú´ +-¼ŒUžAÞ^‰ù\‚û6󲣪tÒšn>€1ÀÚ¹7Æ‹ÃCY é\ÌÍ K8”Z_Å›¸Ä9Ú%A¦7ì +-üvœâç1n±’ÓBK F¬gT~üŠl…€Öý&”;k‚4š2¨õV¡˜¨Hh'ØWÀjÌOUúmÞW)µvÎþ²øûfªÛ—ê±p.bNSÛ{ÃåÿÁ9„z» }Ø”òÕé“[WÜußpU¿ÊÚùX"䨺ïÙÝ‘Ré8wŠŒ<1äÉ`úχq`éc`…â„’¹T¨×ø±ÆÕgQ"IV1£üŒ.nÕùE µU)lðWI +-©2°üœî4ÄÊk8Xu£| ‹FlÒþî\•(äÿé[úBtkOÆ'Fn·œýM@4$'Ì tá÷&©'øÝ2åÒj²UnYºÀr¿hö½ +-ToÈ`Dk Ðà?f«?°ïðÍþ-p£É‰ˆX!„Á¹¹§o(~ó®ÌškþɾìókcÌx*ÿÁÔÁÀJ›Ýƒ)$‚¯‡fŽ¯¶s„AI°Èo(¦7\Í÷ æ¨kÕ Wâû:8¨¹w¨f ï%ÏãÖY+ž„$DPŵš@0×)‰ÙÅmÎ}ƒ"¤Å~² ƒMxPun³íx¸µîd•­Sƒú‹…f&,aí7ðÇš +-~Nu2 ’},çÇãu$©P¶^Ò}>qµW·ÃW­9ü¾ó—cAGH³ßN+!d‡LæAsB\!yˆpª(ËcÊçØú7+1zúïKMpR.;.I‘zÂßµ¶¿ë÷«Mæ 28iÝL~ä)8áed^en2 î8$8dv`¥YZàfT°oÖMÜð¦hí„ê¬û¶§LÌ÷9¿E[PQÑÛ£Z‹›P¦³e(G¸ØQ¢èAZÂÊÌâºe–lù+˯+bà´m0¾1F#W…áåVÁ…'Ãe­Oßµ¤'¹ÌGä6"JYˆø|W"ö•.,àO\p+Š}–_†£‚)ȃŸý¼éiÔ÷YØÈüœAšNÙ† ¡fKhÞo;…“_æ=™] +-ã‡pÖðƒ–3 Éí÷V'…»:ø¥û`¿þ#û¬=pͪGÖ­üÈwÃ@øÓ®Dæº ØÃ#%gÖ/^cÍHP[cнçq(†9Ýôü:bH±Ïþ²ô ðꦊ[&á¾üF5htS³š‘A7î^> ¾ü2aƒj¢@8¸ËBŒ¾ÁAw”, K¶žøšÛw’óH²âŒ¯õ׃aK&w­ÕÁO B~1⬤À.=!jf4ù‘OÄòðÎÍ0‘ñ0ß¿#Ó…X€6^S7‰À¾®@ëcÅJ´ŠäůŽè¾-Õô±Ç¥.ççAñxkWX÷RL«5Ž³R‡ Cök9A9Û"•ßPˆ^>ë>é[»Õêò¼Ïï Ìɺ{¸gÀjheƒæ´MéG‰-Å2hyK?›xnûóù{’[æwÉüúðJÒTúÀº;αj%}-”4äwÉeD7t†Fp™ƒÌ[Àt¯ÈQѱ£¬l£n ¶}‘nR7µÎ0Ø·ÈáµÏí“™*ñá¯ÙšLï`?7ÇäÖ ›Õ™¿&èéC~äL“ÿËÂÏØŽì#(ëó,¹ æv"ì£;jnãøýÉ-[äÝ_%õ^×°d"ÃUå¥fy\ Ð]×aëÄœÞàóÌ7/W™@¦ uh܇—­%tMŸgYñAoÑ ÚÖ–uxÄ&÷w_WûçÚG<‚fAßÄ´4Ö““QÒÌm +-ZZSfÒº.7@ã´pcD@żô§7"gþe»Fo컑Ÿ6ϧ~c†˜^·Ìò÷yÀ¾MûˆoË +-Œà +-âçìór|u·Xq  /CèÈd'œÂ*û*îyHp ÅKs³©4‹þl¤öÝO{€]#`sò¦u_Ç%?†›Ê™ÇJúx<É`Íf«OR^?‰/žmáðÀú`ö˜7%œ+öã_î.÷-÷·ÌÞlA‘‡˜<‹ÈœËˆ2ŽWo©ä·o3¶Ómk˜÷!W1Æ7C0¡é¥Ï#¡ísÃk/E—ëýÈ@Ž˜ñÿ‹ð;n¥û¼¾Üù°² hWîåÆàNsÓˆ¼ˆµlŽp—@˜û•a hû¢•ãL +-UCà­Dš[F×ÖVß:.µ{ÂÚû& +- º>Xy´9 ˜%l~.‰¨&Q˜r€ÁÜVXÑž,æ“óˆâ¾ hjxš‘/‰^&vûã$ P˜_ôîS÷ƒË]{}ºèÕ¯ÙßIJ/©¿½O%Z”þñœ¡Íx4‡‹¹ëqÓ,¯‡Þú@~Õ>CäfvÙÝImáÆ0ùPg&oSȪð>5i8¥ò*ÕœG[pš:=Ž&°}Þ¢ÎçõAÙ š +-Q,uŽEl²€à7d§ß…’Î:±«xÎÊ‹V±ÁÁ5ù§ÁÿDVÜukÀXþb ˆ× ›xL/ÐÇ>•s'nZÄoÌZܲ+¿ÇqäAË>Ѫøí‹–3sß8ö¾TàÄmù¯ ¢jÒ)¼I³Q–óHþZ;Ï™ä2nòÃÐûÑ5…ÖÕ:Ð}чù±YéE §ÅKQëC¿QÊMÌ'Öül°]•·éöCwx¤•oÖ‘$€}³ ­°˜~OñZ6Q¼©û¿ 6-ƒgüH5 ‡r3 Ì>lßnþ3γŒ”èÞ·Ã)ÂQ8…0å_µÒ5×¢—‡8ü>íµŽ"Àó©š³Ó7D¼Ñ¨[ž0À¯z÷Jêˆé²ïä fZ¯‘ƒ«þñ¹É2ÅuF Ó"ƒÁƒDüùðë@ã¦Óól žiʬ¨ÇÃ(V˜]Ö©ÌÂá­ÀæZºO™éü\à°ò>hâØIŠûÁ>QKôõ’f¾òv;“Þç¤;†9? +-lî;(‚$6À}€‘xßœåÝŠff^ƒOîëD8q ¶U‡•Q©ÄÎ<ünä@CrÃŒ÷KØfw~—Æù½r`âŒ9µÓŽ­óè{ÆÜ¡z\Ÿt³^ó!rkBŠW°/6¾ø ?¶ŒŽ2Œ7-Ï ²“üp‡Ó ¶nå7‘Žî¢b^ðÕ,‹ãB¨ÅOŽ¡¡[x¡a%挄ó(îül_²÷Å. ù1ãË?.ýÀ_œÎ‡»¯¡ß²$T"‘Tá¢åß<Òà“$Ø|׶K-Ó“‰È‡aÊÜOp :¶Àwê—ÖÉŠ³„ãnZûâFmšô®Áás²Hmägümgx8PB3v)ºé»f†xn9¬·™›XOxÀkÅ‹ÆÅ28ŽÇ‰öîlÎÞ«Ù¹í‰ûšF½¹¦ÌÅ—mÔ˜“}S2øÈ×ÝTcò3Ï{ҿ邧©úÒÂ-‰âOž>Š3Ì»/Ð_@qäQT´yŠŸ£~Fj#èºo–V…¬jn%ª]Z»V]@•]ôƇ:7\†û‚Ðy }ss;aôB¢9ÕþäÛö‘µÃ*’úebŸ(ÀÄŨ觛Q?öJyäáðkVlfò³8JMƒýèäm^žñÚ>j’F¸/5iÝ¿ÐÑ.’‚g\ƒ6¥ÙK•‡ôWKVþ^Ÿ:¢ÙŠ2 ¯%$ž³àáêHZÃè5ýJ4zÒ™Yß‚ÆbðɯYÛ²ÆÝ探¡2@e¯Zeµ‚•çF¨Z¹x×£Qy6˜*ýyI«(jÕV¡01ÖQõf¾#ÖÄ{þ™ãGÎc†c%]ºK´5¯ +-p0㽪 w·XYÉÔÓñ< ~ø~™³úÔ}y€£EH´H­øQo˜)Í_\6~9?Ð0'V<~w ú·¢­KÜÛƒ ìøýäFjµ&Ó·êG19vµ/Ó?8ŽD¸~Øçöýeœ2ZáÂw€ãÍÛšòþðg@-&mÐ&i’b…ØØAÃgCÏrðÓtš[!´EÎÐK¯{ˆEö»Å¨' ;³ÑjïfxM·…ìX"pø=Qñ­ó`Óµœ.8§µŽûl`•QVÈ>TÛw ¿û_L¶>20ßöµdò6ßûšX8éöò (‚måq_Âh MŒyAµóÖ~n®´KÊ~“lð<æ )¦û0Ëš›,kQ½9 A”À'ß~äÐÒ•–"?)Ô£»Ñ-j`Gë¾u;¨NÖ\£yÎcÿƒÄYJ’çS¶:ôM†ÅJ~‘k”x·—ˆMDøþ§U¿ðLdÈ¥ÚémºO}8Èyt«BCSì§2„øÉSjÀµ¹w??‚çÜ[½&Y²„ƶ /p-R¯Û¥õÙFà5’vÌæbà³g²p¬k`×G¶·H‰ÛÝ ]+òƒ` }%Ñ°¾VDÙîi?Ÿ_ÄÓ:ÿ*Á ,p¸)íNlÔÏ•m3È ÙÃ/HtŸHKÁÜ·oá&_)æÅ?ü­ÏåP:1ë1 Éa´‡÷ðD! Õ"…þ—¥(Ù›[æX6÷à ½¸Iã㤠¹)ÿkF…iÈåº`‡+z±Šp=ÞZm0ìï#8^®AlÈþZ%ëùDí£NÔm™T¢ ; cºÌN÷äS2ln-ä’òÀVºÝtf¼ä L6&»o_·‰B7þ¦LPaÝwÁ>lM§ pG)Ó““º8ÇC›¥sßZB¸é†%ƒŸa.C•NðtàŠ+@ô4ŠM¼5#¿€`ºð‰+lòö‰²® DgÙÇñó±øõò§räNï¨9KipòÜÙ£æpù 8ÚÃçOð Ìå>äÎØìÖ÷ÛO™î;¿°­·(ÂÐ J{2\‡×î<þ·ª™*¬4=JwKž.ë2§53hw† üN€&±×ÜL›o;¶m²bÑ¥8ë» Ñ3íÇßC8·(¨ÆÁŒ#¯!-OÇ_Sòƒ{Å «}Ä…b~¸ýâŸj±4„Oƒì{µD·ˆVÍä~ß9ó)¸Ø/2À¶¶Öš¦…w€žÅ‰ˆÂXÅr>V’>Þh¥]¬ÌþYÄhƒä,üNI@×Ð};‚\áe’î1/fõÖoîC­ z ¡IzElßIÜÅ}ä5vj ƒP*íx0ÌÀ2P Øaö‡§ÍÏ7n÷É’ÂtU0CÎö¡×cªŽZ0fߢËáÖ ¦¥-ã¿cäpREØukòò4od?üHN~ñ¨Ôøi‘b÷m¶ î)Pjœ[‰KQ#NJ–i €|›k‘B˜€K‡ªõam «Ve~p;áÅÑD¤:™œ;*¯™Óz·Y $£¢ï«=Ÿ@Œç¶1ü)r†¤aK̼ĭ»bl¾"ƉšãÎ À*üjƒÀç´¤L}Ù§MÐR>Á«ðç¬Üöò@Þ aã¾,ŠåÜùº›pöì¬8úŒÁñíÓªYB8BÜ·7ƒØªK}vÀò^*µõdÙÈ·(dÕ“4ìdºxaúÙ:¦ˆî[^~GEÀósz¶œôR'‚®*G·V©›©¼—+ÝœÂoÍñÞuû¶íÑ +-'{‚ 6?Tt_^ ÒˆwJk­b·¦•àègß*ƒ#ìÜi4%>\_lbÛK‡GP@íáèQ– m}4n[ã„UÛoä—äm#Dñ1Eä‡è†x}±?é^â yƆ¯—j•R»Ÿ½ò t +-âJêÎÐu3žnŒŠÂÇ£|ßåå*˜ø€¸ñÌÊŦ-.ÌK¡™ußq …4XbºužJ~d‹ëˈ4?¦ÝÿhmÐËf–§Sµ/»]Þcß«Æ€ràxøÔ–Ò#½ócu„ßûBS¬™ÓnŽAºà<ÔÚ€> ?Rwéñp04^¨“~¶s Äð4fÇí'š(ÿ'cII­„‰Ø¿–Š|a²à q-.pï51žãt­èñô1„€ §35^ÜÕNzÊ܈Ïþù› ÄC$…èÈÕªž æÉï»&Š£ÏC»ÉV_$ÒFRêžò ?¿X–³ª¸1¨Fk÷^l£<Ò™'h« sëkʹÝeL'¢½5x‡(ªä4Ë6<àOªPn—Þ‹»Ä›ÿo`”ÂHêÖiï{¤Ð×ÈüÀ—‹rDé4»_*„Ò4ù±¶'-°ƒ^έè-?©› ­B¨yø]ÈòùõÛg‚•†N#kÉFÚ¡'Üg„¶%)„ð()Ê”Q2EçY ª,Ñ“„qçåçÆC£H‡7ô<¦šŸñ„ÿ ¢»Â·ü¼•lœÕ?f·/*ÄØ®àöé=i¸vî°ðºEß´F‹ã{ËOÕóÁÆ09y¨;¡ÄÓáòªŒßTùÙ4«K×"äÈìXâ1ãGpf©ÛG#xãÜ2­X{y‡ºœX 9ñü@`iRâÝjkÙ¥hKÓñKQ—jþ4cOä}g¹¯¶›_w¶Œ¿6ruqŸ W0…fBÝŽª$šLö“c©ÌeŸ¢ÛÏoRÚ©À¯êÌR˜í »oÓ×ÇfçÔsûj±¸Ïó†ø7`\êÌø—Z¤°O{šcˆ Æý 04îeqh½ m*lâüŠ"oÎcÂ;°ú~ÏýµVȸþ¿ÝÁ©Îºwʃá¿XŠî:ŒX¸Slµ9XLnsÐ×IVÃy´Àa<ðí{ép_0ÒJZy.™¢éÜ‚Èî9¥É‚b”`ªDDt_ïxôüÜV$è^¸xÔN?ƒvV Kù™3YÁï«>>ßÏ8èÆabЦnÍx.Yê N•k˜¼ð#±lƒJ ĽC¯Îêm~Ð à@l ,šT¼ŸI©1Ýç)泸E ÅDž›4ÒB÷àÛL ØžÙõÙq0ê5_ÅEÄ!ž½TLòÞM8 æ”_;2çx¼Tø*Ö—ÜÝoÐ -©ÇÃ@–mðJŒ™ŠµÙªþs¦¥4AVø´¥°‚&/÷Wà»Ï{®´Êù°9w¬mÂm,Ö%»¾ýñ››§f<´_Gyè½UÚAZä‘J÷؉J¦OfÏxùòlÒy@W3þåºiç„g»!Ýàà觀mðâxH¹‰š‘¡ÒÞDÔ˜<¬tƒqKÚ:jɲƓj'f÷hèe1y5ÉŽa7ÏÜ$tÞ±„{a\\ù­óôw(ÀKÊ꧎eÓ,n`FLTÝšbà:dRÉÃ-!»ŸÙϾ±Ûn0f9HtXPrÂ\⊵è}rÌ >Â6…mXÞfÔn™RJÞ; acZJdŒ÷>Ö +-Z˘†Lñ6nCm¨Øà­kg?2lq7ôfòJQv´Ý9óv„¤‘Ñ›(þ&¿P@!dŽáû#Ç zàÈ„t|^[ó§Öµÿ¡¼à$êvPBH  ©í²¡t¥÷CMââ·+¸í45ꟼú›²×š×âyÜ!Äôaéí ÅŸ·<¾ÿo眕2! ÎÕ»ÿ–÷nŒÖùtÅÄá7ÚÊ+P˳íØDqav{uãKõó‚ 9+KÊœh÷O2]]Û®€*’Ôý>8á +-ýð—š”ˆ‹ùU›ÖÏÀè8Â^¾Ý,Ý·Rª¾ˆ–ë÷’ ­ÉL'°çC¦ñÝ^#2õ»yÀ;¹nh"?²yàƒGz`l7¾V-·¡ÄÞX;=° àW¡ù«µ$•z[”W\°Öµ¬kú 4ʽt­S"µƒ}m]DôÛ…¡'¬]K]bÆ‚AÜU¥;í"C“Ë÷Jzk×¾%Ý t§ ¹žÀ8›¿MjÌ‹vŒŠý„îÓ•W”+£-7B™tíö®CùkjNInø¿ù›t’ ÿyr¼ã³6½|¿Ý¢ ÝsæÜôζoÅ”õ¡.·ð· 3-FáP5ÕˆI¬b·)¢ 8uû?Óc÷£èàùu:ÑÍóÝ?u{"¡C÷ê{4ø»ûýȇÓOZ‰ØâAÁeö»þóäº/²ÓõnÔ DGnL®›Õí»g:!S¼yXçá­üuÇrÒ§OPQ’þŒJ ŸØæ¡Ú]ø±zYû¥ÑÿýfÕäX¥˜ÞýÕêÿŽÕÖûîµÒ©â–¨D·_#`€’D¢¦9ì ,&®zZB8–‡ƒ‘$ˆQÄ@ƒ Ä bˆ1 +-1ù‚ 2LŒ¡õàf²;E.X~šÇ‰èr÷ âÑ+®¿]óãf!€ÀŠÖ^G2þú{Q¿‘埾)à÷á­2JÔ„£ ¿­<Ö“ÕÝ)àGaÏ$ÉŽòtÙô¤éf‹=×ü³º®f4g¹qH}9«‹ðh«Ü÷% ’|8ÚÒÔ®>…MZ¨ÏžJêõ¿ífà4*F+Ì–Û/‹Ÿ¦Ë°v'ò»EYlð~ 2¸böD[=2‹¡bV£W½²‹~MíxÝA÷¼?A†TsͶ¬±Y‰Î´úQ?>ÔQÀ‹'ßE²v“5Œý¯ és¶“®ÏgÙ.ýn_ ­¤'»M~kS¡ðäV3TaPÒ-¹r×¾éÛê…³¢åÎúIÝ,ÆfcÅC–²?øŸ)JŠœú³.Ü€Âs€¦O/î럎ïÇ+S°Í +-í³ÒÉWÆ|¨ãn¦M%ǯf½P4¡©”P·YPø‚€í¨Ÿvu‹ý(Ž“tõ·“ÿˆòòSiÝd±›¾y¼àó½`Ñz öÜj-F.À¯ ~þ»ó†ÛË +-Ëae“:ÊUÖ~BëXŸé÷TªY©Kx¸@ë—Ö•«4Nª))–"ècGÁ—­ï MEŸá!TnU óØÆ”ž+JèwrË™*U¶¾wÌ9¯¼Â×8ßkÕãW󄃳|Ÿ^„×Ëé7t3~t?â·pY 4JEI˜Œj«ðï#³ÕˆÛûP&ðÓ\ÝNAÆgØwôXÜ)êU{Ö)ýÎà +-T»ÀÑ䥠ÜÇœÖYù„ªîhðÃÑœŽv­ÍŸõ»ÀÃçþç ù—€u-´ûÊc1~éÁäæ ððLé¬NÏÊטüø;äg(÷ŸH²¯—;rÌï¤N6'~ùë3ÊÄI”ÑÉÚRgø—:Q¾úyæ» ýÚªGì‡ÑcHvGÕVÚòÃtœhhãUuM½?=ŒŠY?¥fÿ|შתN©ÐO¶~À·XŠdþ{¢ùÒU¡^ŒÔD/‹E=‘Q (V÷§(×gasƒhår›, R -⬫ݓüö©8b˜±,¦Àäæ ð×wp˜ó|ãMdÿŠQ5îïJFŽÙ$û°²äÁ}€ÇÉãõ)ÔÇøô"ï-®×bƒ¸—¤–®kŽ¼0\i[¯ ÁÕzlñHðÃ2r—¬“@ x݇J6¶îå·²©¡pøž¸ûl‹ö Öu%Àê_·¾óåk§8˜öĉ®>ØrâL¨ƒ©‚é2J”î”yÀ›‘~ò•òïèüŽámúÞ!5h´%vìæ‰é ¼-JÃ{‘ÉÙÐåÖ‹:~·ý_Í»„™5¿DõsÏkW™Irwªwì2^Æ/7yxZn/ß[óÞlTÌøí7ÑÛ¨$Ðn Ÿ G yõ˜Ü:ËOö—Ò!ò}8êyˆmÝ¥ sÁ1&{àh¾ Ù\¤Ÿ½î‹—*8<ÝkÁç%\±²é(骑7“×øõKà>ƒ¼TX% /z(NWê@„ïØžDP&Dsh¸üt}Ç“g½H¨r-›:ì_HçÃJÍ’K#ê9³ø!0È’z},©dȚ͠·VT1_¾†/Ê ÷qÅúeÞÕejFv·@~uFÐÎU/|¬d£mËcîÇIÌý:˜~§YaÅ3_*,&"‰‚ˆÂL„EÐ’ú9‘(¥kn.*¾÷#ÂÏú*²Ô«T(„¼àéåw,¯ª7´ðÐ+µÄ´.SnÌ>àéqWTgŸ—øõUX˜ËÜ5tÇ +-‡î5~r‘É]¾ö¢6b'z™TWD€¡Ý„ÑcÇÍòÕõÞPQ~'ž&GEb7ô]¶…{ñ—ôxô>ÉôÂ÷ðÿPÇ*ÄcˆZK¿Ó¼Å©•—ÀÐw°[ +-»NÏJÞ@ØšüÎdÓaÍývÉÀC8 øŽ+Ë%ˆ›š´I¦D±çGvà÷¢-ØwÙ€rÇ°ál•ÍZ,Û¿‰äþ‚w­†y4<3ê3 d“a%gŽ)[?£ûÝàßÞézTŸ~{REúýÂ1«† zØ0N¶~ß]rhÓäîü:üZök‡„‡XޛĈ¦”ŸƒÎ*O +-GÊ(Ñ&†žÈD9S—nv]pzÇjܱê0ÕæN’\—ÇŒ$ +-ñ»2™Dª%à‘m +-z®~3ó‰Ïº9ÉvLãÙ2WÅy²‰ÀNÀ§á»4<87IîÃ?÷±Gí}C/fln÷: Ò)€Ã¯æ%¯¡ˆ &»®£ßM›ÞÉ8'Èxøm~Õ8±+«sÂÜRüjrQ}S¹%MQ²ñôrbŠ=îeàjü’aÅÛÛõMÑK@ïyLbó; >ÎH¢…_›¢PYqeîÖ!˹j«Þ8åß“%׎ò-í*m›*ÃÔyz Å,*ò4¦aÈèŽöZ°¾RˆèŸî!8ƒÍzL ?Ô G«,”ôÊ6 T@sOOÛ3I`Ñ_ [ 6CJøÅBå×'{«E:Ò~¼ïýÇËîÏ Òálª\U'ªZv‹'á#z.|?oÏ-I¤×îAä T¹;î¸-àëÀ èÔ»ü\öðöpËR\«”ž/à'ðºucÐÁ²ò»~Šùäáð骕Ã0Ìcò.[R©º“ZPzç—ß~<Æ€_­6ÍHye¤‰çöšàP^W¼©CºÍ&¦};†ÄªÔ‹Vy¡ èf8¿ˆÓ%žóQnNœõÐœâ&¹£˜J¢Ãö6í«},‹} +-9[&$šF¿Òáøk`°ü@ ¼R\k/V}ÜuϺ=ÌyjÇM8/òüKçÒ¼—976 ôoå×ö4(Ëtç26võü@q Öû8 ð æCѵQŸ„e²G´ +-IÕð ´ê¹Ü'”ëšL}wäúè›Ã³ì¿ì„–1¯þ•ùñc;«_B¥;ð̳n±ëÔÀjîK0BÓ7hŸ¬r¨UDw¦Ø|°ŸâèWå¹üÄèd'ãüÖéѾ^í…ã'W꯸Êùc•-N+r +-Ѓð[•¯e›® +-BÁ9BÇúÛSMuOÅoKëøÒ”hå™@ÆW&¸¡À)Û WÊÆž—ðóÇMʆ«¼M+¼K À–ê3edßñ?暨Êí«ÁÂ÷³²°Œ¤~VÂÊ[ξ +-8Ó…ƒÖ¿ ”E! Ä@>^¥å›Ï2¦ßªó"ä¤\~_!¾Íˆ¶ƒ™®ü·ÝŽtá7»ü±¾øíŸûá}n•çóÑÃTS/Ô `¢îë r”4ìŽbŸô½$Plm³½ÂRƒ€õ1·Ø-³à§84ª逦àÇ‹¶ˆq¨j³¨MpÇ p^œ··õøòˆí¦;XtÛ,g=Q|2gÙ&»…aݶïH[˜!í] Ý9¼¥ŠïB;©YpýÐX$`äè$ŒJC^‡w¢¬«Öä>¿þ`¡ á;Ró«ïusD‚\žVæè–çlcæXÀJÏ€"ðÕüpà‘ºææ¯l¼í~ )˜§õüãŠbÊ9çñúêcËA¥N Ü”t(˜˜'z³Û£ÑûŠbÜþGž÷ήd´›³j&‹M¾³I<~r*†Ÿý1‘åò‡çæUi£s¬x ³¤ß©œX žÕù©œll­ZC–l4{˜òIåû -ÏKöS´0¬a³Uƒ#;@ŠÈýø™cùQÅ}vº¯”±¹ý#w8/{ ºë…!~“GÖÜö°LXÕo‰C$8d;㤡6*h Âø3ègÍŒS„d'DV@µ&þ’]0¥JríµO±F}ŽÀ²úºµ®'yü^#p“gR-÷ÏŸêC± Xå'> L»VÏbgÍ¿¾k6m­þ +-¹‚k°~ǤN0ó+ØŠ~«G©Riò¤ rC=ÁÓÅçU¿~’6¬¸Ü:ÉÄ <&¼M"/“Ê6?(84Ù·5 ~NyŽ…u·V##Á¶`å‡ÙíIÆÝVâ¹Ûö)ò.ꟊA“ÆÕÙ·SÃ7Sg% z Äi …ñ_äg!£³†|_€eœü)Ì÷®î‘É®³¾r–„õ{d ÎÂÁõxÖÍÙ«ÉE§ýXE0‰™²o<©^7x}˜©…õ9iüÄ»m7=Žñ€!-¿§©^´*Ù^ßëM½ˆ.­O+‘6°Y£R>ºx‘®Z}SCæzüxvh`}ö¹jJK‡®iü*™lÌ ç³¤æÁÙ¦ÀÊôü:”íZ²z^<±\ý¥Þ ÙÈ̸ÕïqBæT\÷øÝ‹ûöƒÓf8åø†—M»‚¶quÇqT .Sûá·,«ÌرÞÓùƒ%ÛÄa +-CŲ'fsàŸÈ8®ú¶H4h?´^´‚×&4à‘ôÀV±Ìn/@1¹2BpN_¨ßíÇ$9_; Žn}]m‚TÞƒˆE.[—”pP7ìž;ó¨ÔóPØ»åTê¿,äêþãïmíõ3hRÜÎpO­ú-P´tU¨ä¤2ZÌÇ" ^g7ƒ²zß$b@ÀÜð¨D«Ÿ´z⢆]xì“=Áÿƒg} ‚C-hðøÍîàШÜT0ªúú…CËÿcÜÁ‹ð›£ŽÃMt’8ƾó±À +->GåhÄ;¢0)@BÕ ¤rÍ ááþe¤!êqV\ý`¾ +-NdX~‚ë—,ÒéUö\âĸÑ*ú·×›v'OØ$In Îvü²…‡^÷¿¨ß*+‹1P·ɥ^}ì±ðÿõdrì°˜` „ Õg\Ý­)ÁÜâ×ïVšuÉuw†UZ>JHA77šÉ w• žúâGÕéIcqÊ,èf0OOYØÍ­\„U¯6è1‚Å`€-wtºd“ŸUÈ, ®Ûöó7\‚q%YÛZ÷U_£]|ä~hì;„Nnõ]¹Á¹áÓYSLèx®ÍšóŒ»}nÃ.˜ææÿgßɉ~›ð[\#7rüÓC¶’yçÒ¨»ëìzûòòN;”RRk5˜fè= ×Ñø›í<]˜”Ù‡;>]Í÷—90Á<”½áÜ2fHO´JYmbÁðc€µ¾%B`»?/ðcü°©Ä9ÙEÇzÑêÏhÕ%Y®ÃNny9ð$¥ 5ZÚã(Šèsx4—ááÇñÃWû—«1ƺƒ?ØÇJ~š¤míûáê.0Ùuï…;íÀVÕ™³µÄío3rª›o¯:Ùó¿¨ÁaÁ®‚ŒL¹}ÔEž•Þ´+8A­n\½/\Ì^ã{‡QŽÌÑ +-cVO¨qˆÞÌï€MMÄçèÐÚb¹ 5€¨ôí…9Õ>Ö÷â;D‡Çךh峜d ³©~¼yˆÐ3èT\µú´fÍG½tî=öÏšGŠÒ"X¢œømËr5Òßãû< ²nf’¡ŸÆe꽧ÿý9M­ +-àöb!p ·bS$“aVÒrë½JÌRöiJÍ\—9ý:x_ øð»?öÕcT_bÜÜßJ©tT7Oo‰p_›ÊNñ»ð¬Ý« pZöA@àúƒ›Ù—Ówõ¦ÛM;l¢ïuT<3~ úr=âú  l$n1X³ú @”ØØMœ˜ö ðË]°z훑ö¢6ï³&«ßýŠê>í˜Ìð\ëŒ]Îètï"Ý2›•aóÿïóø·2êŽàÑ»îÏwfæ[Nz¯+<Î)•Ó,›¬¤ms ÝÜ ›gŠ•³ÔÑ&ZZŠøfSÝ*¤*£InÉ|çywЪ +-Û[pà·Ì¾ž„è‘´F’ÑÝ;=Šö8P悯•…öÁp~vÚzÈ©{ý˜©›îÓ]âˆßÅžr…º¯Ãpâ•—å¸Ì9½Êûþ„}öÉ`¦Æ°S‰zºñ,k½’¤^3u&Ò³F‹whÌÌIqSR æzbªïâ©%¦3¾íN®î˜ 5”çSneø9˜nÂ@uu37ü^rÙЯ‹úL0s…—l|«¿€“]ÇLå)Õ6ÃyŸ•€ºß„˜¼üúýŠTRù¨› ¸0ÌÂPö{K O:§¶Àn‚X+Zlúý>™áé«‚ÙŸX€LÆFlb7Ÿ1ÂXXÏxæ)¨Añ‹+pMÎ…£69iÖ$?yf^\vZéç%3Æe¾¿]„ÌãçAz†ý›ßždƒì>Ö?Yªß‘Ì}Y¹ÏRR;äÄá[‹ß_϶ê¾eÏ?qÝ_ƒjÁÞ^!ñ@ÐüqCU^œÐ/!d¢·Öç2rìŒÂ”!m '+ÂÔçºq½4ÛÞ¦ÍÆdúʶ&€Å(Ä­JT#Ä€TÇ¿©M$Xyåv”[фɨáGÐ ¨p*„ñŠŸ*Õb®CÒæ ÙûÜ·L.¢‰¯AÁ29ô#XeÌ0Ô˜§|å± §V¼tÄ FuÀû\jÍs®Bßòucó#9v@œšžÊŒà-\jÓ’Ê­ ?D'OFŠQ÷Øà:s ض=³[!­ò¹õU=<ÌÔøí’¬J³ñÛ)²n—$KÇB|¹ÐX8r}–?&þ+¿±Hë“=¢Ûè“Äpõm©Œ@¿Â1¶ò0ÝfmØ«©D÷ææÖµÖÁÖ&(ïóW­ß'–°OÝ&ý_x“d„&Ýo‰¼Aq«Šr­úD”JF*O+7ýäíð´>Å’µ¾3­LzÓÝG›1~ÃÛüÔõsr³àHH(¿ù¡ý¶öñ‘ â]«ÛøÃVë„Ò‹˜‹ô̦†ЄG“ÐÏáabë“ô2t=œvÙ'Z}gRý4`ºà)JÚ!hút ûŒ0•ë`" Àn¥ð ¯ìä›úCüŒr8ò@†÷°µé`ñÿ2øØŠíDx8’åKŒ†ýÑëC©}¡äìF0=–}éóSùÐ/g–‡ËVqR2šºnfƒ§ºçð¨Ópr|QjêûªçOuó5%èq¸ÃEndÛ6%&’ü¦Õ¿1DÜæ¾²lð“ ûˆ.Zë³Å¬¼oªØRao“Å>ü?&ìë«uœËñ¾8¹srÉìo>NérÈú$ +-.æ†cf੼‡Rt“H¾²ßóTulŒ{§‡²Ñ  ‹øVw8@‘Ã5QøðI¢ŸµX:è2}óä­<Öcƒ&ÂU74²äQ[¼Âb¿†¥m¢›Yg O£‰œ@Ai±Ôc6ùÅk9Ï»ÎyÈγ”Ù&ÏΓ£»ÉÈÅš®UkhÝgûv•h–qÅ6sxè?W.)Âz¢YÏ|ëâï­ýÜv@s§@EÂéŸ[êhw)õï+ºIõY‚“Qz°òÁÛþºÁ{2y7xŠ,âœÞŸZ\€òXÉ>5Õfä$Ž“ºöD›èJH¡v/ƒ] ß#Š°O;Xæ<#]8*ˆkbAá1¬oT2Šø!d«#ûÜúô¯bd™ŠX§DýDŽgÈÆ®ùDŒ7/ní)øÁ=éî0e!ò7iêfž°¸‚ZÙüRƒ?š1·ég08­“•G[â´+ÈØ_¿-(±‘ªð¾,×O Ø<Ø—µE ÊÑXšóÆÁM“süú^¶ô´O±“» l îJ»bï™úbĺdCþH­ì…ßµ7[7=ƒ«Ò÷á@dÝÏO1ÇØøu¼Â[ð±ÓÃ/j{©4KwQt*‹R?˜=œ†ìµò8+û }äÉ6™^8ÌMŽ+®Õî<‚,Ôn-ãçói ìL_¢¶øÿn\˜ß+g +-ä·Iù”ᇳ÷¦šà:³±EºOE³3>¢éøHwJÖ<¬X4á.‡ŸØ›°}……رöT”OšË!ýÛ`÷ô¬Ê?<.?‹Íc,Ë·.cθùÀRzx üþý7«ÝëuJCúg‘~)áä—X³«îo/]d¾ÿÏɬ÷)×O» ŠÐêý$Ii0HÖÝL³ÔÐY›É ~¿ˆrI±i–ˆ*ÁîÄSëqõî™C¹ò£;2õäO„t¦«¸8[üî¸Þª~ ¼ÒãHlú´µöC8’'l3.kØÅéi½?Õ¼GõÃ!m2{ Àªn|°5.Þ©ˆ÷a(Œ©údd •þÔˆJœ#˜¶Œ±„ÍíUkÓ58 œüÄP=±!?]vJk‚ëì%S0·I¨³)tÒÀÃŒ]‚çÀHL„ŸŽ:38¯Ÿ3Žix$eà\¹÷ÃGê["0i Ô~?œ¾@;À炤˜¸ äoûuy*— È·°SxýÀ6üX¾>÷Ž +-:²\ÌnNÔÏæ¦Óú8H0]ÕûéYXà÷V·#¡®(kj),RÃÄ}—óðx‡Ã(#?þ+â' ¬4éG38饟éÃàǼMéüò1²Õë_s„"=)S?ɹûV{Vž½o]>­_öiWL„ïx¾Ä¿{ʼBx†^Ÿøù˜Š²H •ž–æâáTð€ ZKÚ‰“㬊Nê»é³Ú*zí2/¿aÛ„*ñ‘ò~„¼—³0»T¬yÃEÛe5nÏ<ùm¨­òüXέO ¿M,\ #~ÞV‡¿ä7üzãv§Æ´7 +-4¶=ü'O²'® môc<¼Ã ¼§ ¯îfÅêæFH:¶>÷Eôû±ñ½M%ébS¢F/â©ÌPJ·ø©‹B±xp1ºVm~;%ò):·\éÐÔ§ÌÓ·&!Â¥‡²¾†EðSƒç=ý†XIX³æÑòþòÓÀéêÞsNÝ—„׈ôÕy÷=œ{±…oÅ,_QŸ÷1L²š0vZÌ^(@G†Hl`Xz6Ùîªõû”Ôä&Ùܵo¾À[*ed…b¿Áuö³[µ©¸Ü؉´ÔwMbq— ‰D>Mü²BÖl¿¹]¬—ħ.2î"ÿD‚ßç˜5øÁ÷ËsŸ…[Á³Z²Ö_42¸A?pD3í +-¶¯î?‹ò3÷ ½·sˆFùÕÀ’“gRÜDî~™m}T³pa¯¾¬u—`bÖ»QõU&Íø 從h9—1QtÈ7íõ‰dRkZoÑE?“-7G¥øFêYÅ¡¨Ð}€Ã\~·`ø’Pvßû|¤GqR3Ô§¨ŒmO¿[úOÅiÆP‹W:vo<ÈŠ7 × +-8±>ßmí“ïI”ŒHZÇ7ﶩtúFDjo.sàÄgxyE~ •c²l‘ŽÄ:Ö§èXmªWL¹(Óââ¢ó„Ÿ¼>ýÈ“Rvz÷ûEù6oL©0i:ŽU)ÿºõ9H…ühUïfmëÒ³{ª|V¿eëž=ƒj¿“ú§ûPæ{óy’S6Áð‡z£ä`½~g‡ÐØò{k*+C‘E¥|ì³ËTꈱÿÙö®›óm6Àû-ˆß…bc;[×|óÿˆ¬-ÇmžÕJøå-²¼Û$ Ðť€Ÿcnütw±bY! 1œ`̈WB ¬|ÙûÆjkàòU¤³Œ¨^j½›Iƒ‰Ü¢ßS”bœŸ¾åÈ +-¥ËZ(¥» ÷5.½/q—"Tîs°ÏåpïÐ*ĦR»­D›[l”jÒý¹¤¾J`˜+ëÜ…bU²Å&xhη9L,…øíÄ ~îS³ ¾‹š{iú¼] \¿táûx³"bBo’t®¢!–º¶9‡%ûGiÅÅà·â<èz™‹L`hæá°K‡{0µ3ôÅZã ¥Œ4Dªú&zrº1þA&µ2÷!|Ž7bª‡1ˆá$§¤ “À¾"HÖýZK;,Ó`õiĽorqNY֟‡ æ®YÁCÑ3CŠ,ú»u7\Sß±²?ÉË )ªá®È›¢}ÛRã“öÃþªm¿]0ï§{ñÓš‰¥~4ö¦õ–ãÂK"PBé=ûó×lƒœÀ Áa§guù.¿ë×4Áý:n[½P°ÕÙ¯8Á×?7Û1ÂiÊÏCÄyÆàÍr¸I/­/päÍ}Ø$óùáç„‘‹õÄuÛ%/ºO=mòâ‡q±ÉýxO`½Þ&ÁP„3œð»4Ú}4=¬Ç¶ÁÔ–õºhb¸:h$¹.Üõµî»ÏÖ^½›½NT¶íärú¡R@Õ}²VÑlÃV@ÁPå¾vPLxI%Ø ýy°F b!Âß)Ø€‹è‚E½؉Ó@ì¥Z!Ž¢[hÝ®“^ 4÷Bz8|âÐ~¢‡„~Œ<ˆN°m£êM+!t¥Ì6X:«ù_(F9‰з…k[Øê'íºu¹T”bÅíbO¿È§¼âw[Û·¹Ü ~‰/äsݹâ$‡LxuÂRr!Æ@w¯ÂÆð€Y#j\G• ò ©&bkDC}ù¬HRÓŸYHƃ4æán ²ÂÁ‹ ÎQ$‹Øpà oX„³’¤ðãBò áIûÖF›˜|p#¨ú6»Üã+M÷ÃîÔs©éùŽ½…ÒñSÈ_D½>4d½.Lè\ùjG·g:J<µÌè–„¦$ôk·.p¨OÔ®Œ¯5bŠ_€VŽS?'-;CëhÑ /µÏ DU{Wí±'qmÄ‹$u’Oœ]Ø—ÚúH/*Á©TßZ0Ë|}Š@ê’ëƒV7e ”ÍÍ€À|¡‡1‰!>såÜm<4 Ôø¨ÕÙYše¦TüÖ1õTíÓ/»X—,ØåÂïàÏC5¾o0}¼n@ú+n!EúQX½½/à!; èQ•V¢‘ê°ÅÖ}‰&æ‘OVFIˆTó~o@‰÷mÒª·ì/PV¡óèœÇT| åìŒx1ØfŸ'oyF›ûÙ5?ŒyT·ËžuóÁ-CÙh¡øm|¿O¢FÛ×O³!ö $FÇ•îi¶o1øäX7•ßËzEÏ[˜Ye^u<²´wÐÔ1_œŠE‹†y(`'VŸ1¢øN<ÐÔ5Ûºò„Áãѧ?˜â ÀÊ=^/ÏógâWU Îu•¯9”ò¸H·ˆ»#Ã0o߇Ré>£»F¤ò"Ä/Bª«×K¾äãÇ2¡þö¨PÊvÏ"œkq1óÞðá^¿1VîSNg–ãÕ@1z9ðßk´"7£Ào(¦~Q©dgó×ÚƒNSÛƒ8,O W Ór­îó“ØÍgYîéÌw±Ä M¾ÏnNÃ?Šg÷=T@ËŸ¨å€0ãË¡xnÀ>ß ÿhë<ŠÂññWˆ7*’MÈ $ù¸ÝÜŒXFO›‡HF‰eûÏÀ\Y’˜¡þ øÝŸ¹lN0f~àá?INìàô±ä¦fG{›¥áO»ŽäÑЮî£Ëøárªß>O%»š3®3}eÕ /^â™òµõôê÷(oXœ:œ·f늘GABªùy13ãG@={|œdƒ­Ÿ?uÖ‹½iol£KEõiÚ$õánÔñ»¬UÛ—sHדÇ7Y¨bß.xø9jY·¹ë¿ÁÏêŒ_µ kŒ¹¯5AËäb9\L+k®Ö)t­@\Û]žË$ª¿¬^¡ðÃ¥¨_ÊÅ…!Ú°’(ëuÍ ~au[Ñ‘¿¡ƒÃ +-Ö&?ªìovÖamâ‘Tk\MôXÆÐ uõuš:~Ç ç’á\Ÿ‡.d”=xñ®<²Rd¦ãrP ‰¡¦ò3³ÿk,(fOom2ÖÜâç^LÖ—îä/ð¿°ÀÚ7ÿ#=ËУ½›x•šÜö©‰Á?[™‹3÷]öd¥óx¦Îi»†À–S?®¥’]ÒSή°]ü®ð=Á'ÆÜbÈíS«¾¥êaÞ§E¬ídž]rº §s­HO ÕÍìZñþÆV¼Çä +-Î%Õ„qL„Xs°üóp=aðPµ©tëSâ¦ÈÆ ³Øg‰"â]³˜èø…e{ê$wBÊ?TTøFÙš¯ºÂI¤»ô£þ-„8Šm;ê'“¦U1NêËz&°µ‡Û(ÞÌÈÁ6¯ýÕÕ'´b©ÐyäZQÈå"¦t×z9†eVâ×Ü©Ø·ÀM|±ÌWð¬5÷âR…’õÙ„° 6~¥í£Öª&¹ØæÍ +-üfÆäÈŸM1í¦Cúö‰ÜÕ=~°?é¨ø w&%[þ…Kœ 2IóÎ8h0A~Ü'[Y;ºù˜6cÇ-~žüô1ª±SÞU5I_H©sý¸z_eãhð6ÕCØOj ý<èÒâÃfÂàѱg¦oÌM§xXà‡©CØ5aæÂßö.»NôîBFƒA(¨³ `¤_ Æ»¤0ÿÅF6ïÉðs R€œ0«pÌÃf5§&ŠüXã¡Çˆ©­"ëõ)ðGVZûKâ¬lÅrªÚx¨ûþ*aÐSá}ÔÃ)z¨îçä¤,Ïåy0²÷Na.ÑߺŒñµ¶e¬Hef¬áA1,Û2Õb3ú<Ÿ°¯„ÕçŸhÕ,1.‹ñ‡Åš“lŽ?Jâ—?Œ_BöaΈM\dÖ„)5Ò·O_Ãü–r汎FÏùðîâT²ï¶uÉÓžàÝžÈ4A^1ãõDòø¾Æý|mnm6Îññ£/C£î^¯é]¢.6­¦øl +-™g4p +-(œÞ‚C•åÑ´žzŽÌ=m½àôLáÅÖù7RQ#²]çŠûÆûýçÇÏ*DGéRe¨ñs¾ê“/]tßÐ þ.zÛ?8G ¨JÂpt„ôÀÂøU<}TÂbì±¾KZAòLR æº&Fž\<¼ÊñŠ`éÇr¯.¤Cý~"¿`¬µxߤ©FTœ±4PªŠlçÕ'¼7nŒÔÛø†>Ðvz•9‚XÜÂ<&¸© Š_rÜ 3:*Zéø¢Å¬¹Dh3 Á/ÆÑÓq¹Ë'y”Ý7 :!›U Gé4Ò_ðëåÕ‚V¨‰vÍ“·°Ç~tžžL¤Äòô-~Ñb UKã ¿Æݱa£GŽ6îýî˜ÇÖPà³ +-‚ý2Î !?äËõqã]{õþ.ÍÎÕ&Âe·õhJ‰Ó†ð³³*o©V°~åK…u^6³DŠÈ]…+‡ÀNy¾n¨—+ Õ-èyü“þDìcœ)•ìÌ`Ê!^ÀÞÓƒðÌCíºQ² Qh%Œ¹fp]¬2î]oº„%Ïž<ËzÁ¤mg¯gû”‰÷loÜ™¿™Hƒ`Íš@ѳ<åAø?Äb‰e "+Œg^ã oÌM¬þðÂÆ +-ùÓ¢ð_xlîm" ­ãggjxm…Ÿ,Æ¿ÆÑj +-©ÏWxåèD›ìܧlš2y\díÝ‚ñø ã&Í´cfÀ/Aš&~¥zûÒá U;eºa¨í¡8QØèžÇ–†á·rO×KxÞ—1!õ‹sØ«5m`ydãz5OQ EP^Þ'N¿÷í—ZÕÄl_¢®5ÿ%ºÇ‚…j[ç¡7E!ã79Â?£´Œ¤;eH÷ÍG¦ÁO†ö)è¿iP™Xp]”3*üQÏÅÒÇÉ}•îÀ.;Ü^öw7¦=W.º½ÇogI¿óÌ<Äo Ú×fð.êøk>LîâšÔ”V4ª²§_4Ø' ZBÌö5ŠÚèƒÑ/™=®pî³Ä´£Óài¼8×;,¶6k@¨¤òhÕÏäÌ}LóavÈXOº±+6Hê·ßò<¸Áá#˜’¬™9•öç—6_Ú2uœqNÚm Òx„¶K¢…›è!,›:15ñé_ cüÃòÞV™•ß>Iy0qyîÃÓS6¡ìPë¸÷/ÒE†ð#жttÁ”Ôt¸¤ã êb…M·æ‹&™™4ÁÇ{¨éf†Ò(:4Þp…þ9w0,õ-{ÿ"´ÜÛçÇØÈVQEô¨ø›`diÓûgl98£ØJÉ”?A™Qù­P‰–龞ŒÇQ—[c¶é1µÒIs|<¸ûè/L¦ÄÿEëS¿õC(»Æ‡_0S“˜?ð§N7ÅÈÅ8DÅõФö I5 ¢²o>Ò1zƒ= Õñ¸¢Wâã[Ø/Æ_dì}¼î;ƒêÙ£HO˜üžª¼„ 3°â-„á‡CßæQ3Y#8œO÷&¶ø­.I1_c[ÈñÆŠ‚vú!l*¨GiûuÙi¨O‹¤“è4¬)–ÇnŠÂ¡(0~ggìGz‚!0µ.²„KïÑd¸»Æ3(—Êâ–~—Sþ¬R‡ÔzÂo÷åW^ûV´ëi”y1CmÚ0 Ý ø%T £sÕ[îò*Þ +-ìê…1Æ4Ç ú>˜¦_h­aήùað_±¯85*åfxåf\;Y§› ÞÌ«ÌÃ}Þ4#Þ÷ƹ'•2ØYi 2y(ØåÀ>†ZËÑêÝ©¾€<.Cë­p+NL™‡éö‘l—záH Á-ú"~v&:øX™›v à·XÍ_8= ¢ç¦øÿá©òC+dí#”ýa?ÐiÖ'àyˆGápB£<· ~ ÖAöl»ù´Áo«_iæïÖu£~Æýyú˜Çp'/ûc[› lT%3°øOj •ðß vx–K˜ùŠÕÃy|%ÐÏY=í÷¬6=ZŇ¥º @+ã¦}~^$%ð°%ˆº …•u™«áù”¸´»}ÛÔâçbÕRÊOûçv$²S/TþœÈfä]†‡$y˜o†?3_÷¨ A\fºx¯9xéÉÛ÷Ú‹[¬qf-C¢_V–g"QÎGA#Vf’D–°Å6ÝWÉõÇë¿Bܯ¾è' è;+3’>e©6$–Θ¸Rê³NøÀVNÙF}ÀÆÞƒí}TÏÙØU Š €r÷)ì:þ.¡{òršðs*{1ø!ÁOÊ ;ƒKN9`¶I—ØŒ×8ÄJÿ™pî[ÌÞè²[¯ÍÑìsÐUÉE`=ÑÔ†õ"Ô‡¶58«2âi-½sH,¼°†“Ÿ•‘ãWù?;Ù?èþ‡Æ-ؤì©)>ó Yî^7%.¦@ÏL±K‰Aå¿ÚÀ£ñ  £’…žk/)Œºtzí³eë¢Ä”‚(ºFþüŽ•iŽl“Çç‰]*Él¬O­w0t9ßûþÝæ> RvCyɦ NzfûŒL˜#}›+pæµý>4á´æ´šN‘éú[ÚÈ|ÆÜÃ1ëo ñÃLˆ¡Ø”Rÿ金^«a… À–8ÏzîcAƇZ{M–hM&ÙP&´Û¦I¡Båþ‚×°ÂM€taˆ•áŽJR:Ú®êˆR û¬$øž†évHV¢ü4³ u +-rñèHZï8å„©%üÞ¸2uX}¤O¼‰J‚pIÐÒ½}üĦY(úúO‘¨—ŸÉÅ° )a¤“Ù¼«‹‚ù3Ε@BÐÌÂ]Q0°^Î@,L™=±ÉnJî“÷¾×_êåØBo3Û—æ†JPÝHP¡õ.‚‚fÛ¤!³%‡k„‡¦%¾õÔ”n‘*ˆÂçfÌ[ó…k!É‘Ò°žÎŽT‘›¢µðÖ vP;\ +-(‚q²GɈÿY 4ÖäLPÁ†Þœ8µC6„ R@åéPbõ_æáÆÁÉ ¾Ã3äïâ&¦Ô“Œw‹e€H\ s5º´fŽÁ›ážr4sôå[kÁ¡]2ŸÖ;9Fç¥8zpâ']oI„µ¹I½žŽ,%±ø< †pz¼µŽºº[]@ÊìÉz‡b(|ZQÈ(Qâ¦h+Éìaý?`ÄòÈ·_®( 7…:ðX? j¬X +-_?߸²zùÖ`bØ9"ÔÚ¾ÜFÍœˆ8AÍ#ƒ85mª¾Õ‰s‡‚Û™¿¹GDiÙ“ý#Cg%-ßúIÕ–¥ (ä„.;'éÁYBíûÎÇò­ŸTtL~üùhÞ\”Þp’¼èïr£ÌŠ?½t‘aÉŽ-mµVÅú2jή2¿_©wbÞÆFl­á߯}*¤)áWêÖZ°0ÚÚ‰æ°QiEâ´õ}Çr!;ò­ÅÜå¡ ó…Í[¦ï÷ŒìÄ^Þˆ±Ku&Ž +-tpÉMYmKš£å[ð… o‘RT±I7Ì0" l®8A{ê´ZXâêÄÖ +--Jêݲù¾¤êyæó1…Nº¶nÝ!rh)ëFÊwMpÄËrB˜ºT€}} wg«$¤¾!L7ë+,K/éÀúÞ#§hI Ö‚ÄÙü‚ú} ^VŒ«…v&-Å(óç¯T½¸ G›‚è÷}‡2Hà׃æA¨²ÊpôæÂãÏHtxbb¿?²bX¬ 7‹›»A6¾»ß÷à$ÌjÐp1†"JóÖ +-™íZÏ´˜Þ­õv7çÕI1aôsÁäqžïmÞ ¨Öm©Ú 33ÚÙ­_˜öß…˜c 4õn›¨R­°†Äõ] wœÅ0¡¤õn›dý‡—Pü’N[3|ü8Ó€/þ„àò}—­gZ[@}—ˤ ƒ ÈÝ9| âÆsÇ?(ȬlÙ›þ,´Ê/ªÿc´ôx¡‘jjEÐ6ÐûŽ* ¯ã  \¶Êl'o[ìà{”Ï(Å“*×ï»lå"ˆ %Iò!N­wÓE€,„v2Ð>W$aí˜ÖÜÕ›A.-h;¿™94ÍææÖd·@JoMÒ`}€ïlKŠ˜A0¥ä»Moþ3ÆæÃirâ¸x\à’F—?ÅÒœ0™ÒÜÍ«R@=xð}ŸõrbßälAöýhø§hX [¾H¢"»î±Ð¢ærþ›A€2vstÞ {{ß^p·J8N0³æÏ{a¸¬@Æäƒ|]—ÇغÁ¯¿N-Ö»…—#Úæ¬%IÌàN+B"AöŠÿ^Öpòû>c­Uš˜‹Á·õqßgŒQ^(5(èËúªT‹ñu[Þlßa~Ò꧃ël@¼­hJÖ­íŽPïNnÁñº-QäíLãà÷m!£"ó¯Ñz]îùI«¶²ƒÌZàÊùË×>¾+qA€êGçåEÈÍ]fP@yö.¼;°Ö!Ϥë>Ü \ Â7{,µ‰DÂb¦Ú¿·a‡ÁMÄn¤ FÀ;ã»—5)Í™`xØ|vàw3)¹0VÖ=6 +-Ä˾Ϻaã<$šŒ’Ew»PRÓÀų‚•ŽÝÏÒ3»ÔPØwNF«“aLõaóÖ}Z³þÍ—|@pS×DÈÐÑmùnc½y§'3ðÞÌ_Ù„†zýP„øuÛªª¢6oƒWßehJ^ødLX²âhHç¿î Þºo¥©`A¦³_–)þK¶|·Â¦«XYÜ û¥lh7™%Ùì<ÏóÜýRnÞçì%7"0 )HH†%lÑi÷¤Fi%w?ūÃëÊÄRPÓç¹%ê†ÃWkküWÓC,« ièƒX¶oµÂ|…JhäYªD j‡§§9”„Öå+t 5ØNæî …ÔÑÎÏ4ºï|ZNBÉa6³ÿ^ +-‘2ZONgev`º‡âÈ"ÚZéå×±(<9+‘´ +-‹úžåÓ8É\Ñe*b9I‘Uéâ;ToŠæ.,Çå÷®£"0wÑëÝêÀf{Ÿ­PiS€èˆTîl‰ùß©P|^†ä —9ie½ƒ¤\’Ãú/C33À˜Å*3i|ïJ¹âu™3‰DãÐxÌAB"Gåô¬}|ršþŽÃ”\"t†CbñhDÀŒ WîðôdË[‘#Õùû>_©.ˆEâÇÇ€ +-¾„ÁáïÍÕKÇ€YcåšOÃ*iŒ‰Ì©ª#vX?åk*ãÍg˜ÿôÏŠ”S˸ —D ¡AþrµånŸFé!@Œ,Â̹/fØÈ€~aRX•$ÞüäùZ•Fa”eA‰±ðéIbþ¤ê‰dìÓi/ci¸Üø§ Kex÷w`ó±ã’Ò¾c5q¸>8—†Ý6GÕß© +-²± §½\þÛïÛìåyãƒZ«ù*Hnwœì,«´­q©:~>ùøbaü>ã{¸[Ü<ùãL¡’îbP]ãpÝ™A†Tø¸Eý~EêøÿlÙ'¦{DdwDòHëgýo«×¸%ÍTœÑ܃™iáù+N.È ¹i¥âÖ\“×èîí1É;°’»åŸø“ +-œc‡ÈžåG£àl¦ÛÈòíý½$¸vS\ÝÆ…3O÷ †ÅyˆûÍf´÷š&7 ŒämùU•:½Ò’RHÀGƒ*+£°þŽcŸ•øš~Öôj^»ºH7'0­á¦8ÖT™÷l¢Â{^ÂÕG:Ìßã'[/û¨¥ë!Ä\5v¼8FÓu®kš~¬ËˆÐ÷œº òÞðIª[Þ˯9X§ÞSÚÂhB¡(žyšÈ.ãŸ]÷ùÏt1ݼآ‡ì.¾'ÿ>Ñ÷·å…uÍjL£_Šþ‰øK„NÆ¡!ZċĶOu  =îÂëòî·_ÙÈu)?ʶ^2ð}ƒ+¸GIFSÓû›Óªÿ‚?qØÉÏï9UÌ% cΩ„ýéRaž¦Ã<ëß qƒ3éMÖ¤öQû pýuÁßV¯Æt—}Ð:úä'“¹ÇVsz·R1ƒ÷`¬ à +-Ys:üoÚ}žáþs1骎³QÍðÝ?L«Ûð%pvÁì—“`U8¦Õh]駘Ðí×>¤åFúY–)° =VõýÂã–±ú•­ÞÇM¾n2x}¦Ê +-ò,´fÄŒ…Œë¨hÖ¨¹×²—g‚t|NoGŠÊþ"ì·vW˜}v«´5%òòÅ“àEà[îœrã º'Œ½mJ*ÖÛgÏ·2¤ï€èXÏ4ãÍ6Ýäïù{ªÞ“•¢Ë>)s1Ì¡.ÚÏýÊýtÖÂßnòKW<ínÒ×HúQ»»,©_×v$œj>F?”q~Úw1·‹´<žæ- ·.u#Ís¬QÝx¹•%ø1õé~ÝʼnéèZDïþËœSϪÍál t‘c÷“–NŠYó{TØ%ìóïÖCÅŸÛwº0WQ±®ó”mæ 7çö-Zˆ6w•)`ÕVÙ|®ã!ëDkÞ´|ó™úÓg*Я?Å"Ò¿­Þ¨NEéæqŠ3½ü…'gßò¹â1ý¥`-MÕÝmIýžë˜Å°QPûš+ $§ Âöšë½võQ{vä« &pw! +-(Ô§ŸI4´ýåê*]m›zBdŒ{ìò„ï7¿ú±»ÓFß‘#€÷CªÿØKíKX¥@ß¿§îáP>bã«~/ó« +-E@8¶4xX!¸@Ûÿñø§éŒ¶Õúñþ¶Z¯Æ4·¤eï§3*:I¬8Yº,yïöŸ‡žýd…÷àtŒg|æĹ|ZÓøééÖýZ‹ÖúÓn+¨(ê‡Tßý#Lz„p€â«ÄáU)N¢×ªŸ‡õ®äm‡^®L&…Jc9’é­ï[»GœáÁ©Ÿ†v»Jø‰ì#uúö8­·Þò7,s¾*ºSu)fSDŸÈ<»Ó,X²Ï¦ãóÍäèGÛq€¾‹úì·ÖµV.9Á*mòÎWÞü;´¹'T‘šÁ( OGœ¾Yв «›8|•›z׫?Còwž¼ð—&Ôb«Ìo~¢ýöVúM篶âd<¥´Æ/Í8ù­¼Û;½:³ u7B_Yi§ª\s +-«UPŽZjƒ·C +-&GGÎ%›f¾7}˜pê¾2û.ýêÚ>‚“î ¿¢;¹#ÔÀCi€Ã7þ7ÿÎOŠ.;Ï´µu§²¨¹8£½æýtÖñWtYò5gÏ€V*&ÂUxÇÌ>³ð·b+œAëJÏýV&ø5ä°žþ4,vºaŠÿáþ«)àª,à·¸áŒÈ<è7DþƖaÆ%múŽ&™.Û±xë»ml‚QÚ4:rPe§\Çl¢ýÖÌ›Xè—Ù ¼„¢Êú,ˆ>ô.}ÇõŽ´Ô¯kF\Ø1ý¡ÆA¡ÏgŸéë^Ã,{S?Çè;—ÂPôÉÞ½¦Î „UÚס+ßò©°æý—q9öÑudXƒÔ rŸZƒÖ1Õê&þDîÑc¦# aMLwëýäþqƒ[Í)‰ûãÍí·¤!úwžÉÝeÉæìýV*NÂU¸£zô©è½—"CŸ¾Ô[Ô,òƒÉµUÀIpwöR@ÌH‡ Sæ1¯{¡|ÏûÆ¡ú~dú•ýHîL AÂÁÙ¤0p +-ûx+›!gõ}úÆoüá-…ýG k Õ7¯«ìþXÞ%æÔŸï›ì=Fó ay÷ ;a+³C5#îHÀ±Ö¾.ÂÝi!Z?®e¾Ùq%êCH6ö§£·›¯µùwÄoqašâ?A4ÆÕ#œzR_†þ R‰Ó>@󣧷CvÓƒò&y”àŸ’–mïý¾¬Æ4qöAËËŸÅü¨"¿Ê‹ÄG+Þƒ­GÛ#¿:‘¡k»…Ã-4ÂDŠndá1ùÐÆ“FcqàIŽyzŸÕÁŠø¿QXÝTçAJÞGwâG àG¦9þßw(ÏËä^Öñfï}¶/£ˆT§ÖÊØ×·¾°!Ä>}ÿy¦÷•·ùÃT¬äÞ¿êï¢yÛŒúГdãIn%w,éø à\ºšÏÓêˆÿÚ¼Ú§·ûçì³».³o­?„O¿ý#…õ½>—þ§ÕbATî»öJèd5~؈Ž8ÿ× n°¼7ØNv®¿ÆÕ$½ÛÚx5¦ÿìƒÖéßÙ8þâl̈…8‹ÕÕ’x–­å­årb; x$ëaØ[»çr{Èo&w_¿5ƒĮÄ +-?ï©ž-2M˜ŒF”°8éHý™úÅÃRv¿ä',Ÿ×%9Í&9+g¢Æh$\«ÄqÚvñxýú†vYÆõÍNßÙâF©ÓwZ¸ªÞy²Y[–>_DЭ+Ól'•¾tµ®ÂK{ùLåyU[Xû¸1Ÿ#@÷GŸŽÞ®|`¾®P¹r_óŠÄI`#_'õ›VIh8ÛK3›ÒNÝi +-:gO¡ÐïHKàDƒ Cð]ïxK†pKZÑ¿3'ÇmϾXˆ{Mµ¸^š1’3 ¹E'°G;ù½ =nƒmëý6®*Ód + 0¾ã¤[x’ã—æ9ºþó³¥Pd—:ϯ{SŠ$íõÿàGörÀå¾#’¹ÂyÛõ=<|a&†P€+ƒ¸ïx‰§ç:r&›*pXIåÛÔw>·.hÈßUõùÂœîdº‘{ö»®½X;âæ¨Û1Kôñó´…|…UÚ×QÁ;7¦¡¦7ÿÖ‚iE†0¸úAà>)KA×ïÀépȤÒI@7¹úoóÚXûéfÑeGVfõÇ™}Ð:ñ7wY2A{¤šc7Uôsr ÎÙõ"KHææb?r~þ&¥‡Ç_Fw($ Œ$ƒïþ)=VèTÅ/¥º%“ ¢×ôºÝXœ²Býj¬:ª>1½¨¯•m¹-7|m}+´I9ëæÝúP]aßå͘mú‘[ÒË:\Ÿž[ºn™óœ†ü•áxq,‘ÁNEaaº‘»öŠž¹åöçß­‘ö5­ç?0¤–>åùÊ?˜ÊAˆª€}'ï@¿ŽÄŽçÛ°ùã6>ß»›GÔþ‘Âß2òóÖ^@^X«£ýÛìƒ~öÓ™·Ëß +-óCò!uµRñz«­E‘¡ÛëÊì'”××·õÙ‚%ùAëûn¼Ïø‘ÌÙ'(!©’š³‚U:Û­Í‚«öž· ý9Mÿ¬Ë{Ü‹úb_ºhý 4¸LA»xØ£M6ÒPÆö*FcûâHÙW¿ÞòrÓã0Úû´zã3n…oxï玮ê+Y3âš¿Ç£ª€:7“µ¢gŽãÝrKàˆ>ÙÆx„ì·nTןÿÀ„¾ïÜœ1öÂ$üQº yõ·+jNÝ pE¸?¯7o>WcÓ@7Ÿ÷B°ýÛ'z +-¿m†½]_Fþâ'Gñx–NÂ1ãÇk›Â·¥¹…<õqñÜmÄDMœ‘!|u~á™ÜZfÊï>v[h &‚›‡Szx7NYà—×Ƀ)Ñ`Ày8Dq[?*N¹ia²š€ÞõÈßk‰¼ðøt$ -~"lù3 ¹7›*rê] LÙ'Ž_hA펥Á©c¶?Ü•[ºï@È–°µfÄin&÷*ܳÁ¾ÓÈ7¬¨cÔeV'öùÜæÓ?[NÝ¿^t“OÐøB˜>Úaù… +-èÄîV‡#2ïµ2„ýïûäÕzÑkó:Bg‹µúÚ¿0g;Þow^X'íþæèàÏ~/â1m¥b/Ëâßh¬â,¶ñQûA×÷ZEÅ`(\÷øæ?= 3¿hËÉl.7L.Eƒºc˜ºÀ(cÔσéÞØûª¨M)ƒ‘ÜGï |ë;¡îA—íØ~¯•Æ96L†}&*ˉ÷Ýß\º>Ñ%Š!d^õœòØŠqK[ÓTÔ§w¹™|ó÷ûþ¤©Eá¯' ˆÊr]oÍ>›lËrÛtßkqÉÓ ŽaÛ€Õ£Ó<æ÷Ôpº]K°)[AÇ_üåvS÷(O€¿hþ2¯½Ð¿ ò!ܹ³.b?'¼¢~úwç´×]‰‰g~ŸqV—fl$ôrú}ì!‰Â ;Çì“ûY\ÕƒTq*?úU–U%˜é.`íR?ŽÇ-BŠÅ§ leOi¯ŸRÕq÷ú›Ïú~fì¤tŽ»áŒðß×Y+A݋㢵V9Ì-·/4sx¸ al°zåjߧŠÑ&·"q?SŸ§Àš¼˜8 +-}i¶^îëKì›ÿ¯G ¯>G}žp²‡/ìGúJç+_|E{¯Î w´ÉÚ nàzÓ|ìÓ­þi¿}:Vy¼˜n‚ô~@m`«¿s¨¸%}ëÝ,üQ­8™ûØà·R1Ó»¼Nª¯;'žÁÝ‘Yûö91’ï>5X„7a+$?ù¼K¤¥Š +-®ü¡Ú,¥ìÿˆj‹€°úeC³Ux&CÉ忾ß:-m +-­äö°š$½¡”Îßkœ“ÆÜú.lë¦ÈfëüPß÷qZ|ñ‹-b£pŸ`Lj«ýáþÿ·^ÛñKß!„úÞ˜P‡‡ñ$¿&fßgÁ +-­½ îCÖT VF©²M–a@ƒw3&ÕUÚ'¥ÙÈ;¹"Z~ÐÈSaØýþ-ȇvàsX2©Ó/¥ù‰™–?³Ë’U­Cx‘xÂÇ`£»Û“ßò—år׳æPDëa­ÀjP»·£‡ "TÄ–c7ÜÓ¼îŠÕ  ®4vÃÙ¡× Oê¥~݋ޅǦ›>jš-¾ƒcŸ5õ•‡ +-“RWðgŸ~=„‚6)¿ )Ù;ÂÁ>“jÏ7—H¾O´?\#°_ø3Â7¼Ä¼ãeôa2Þ5¾ªlsRôÌÅ™ Óò‹J?Ùo=5;ÄÐ4"ôÝóùð¦fxÏó‰K»?þ^w»Èª¢¨U~º¤¨1ïªh­Š²Lä%)¦iÀYú5æ‰Ö©‹Ñ×O0OìQî¥cËdûÝ­êQ>è×.(ÂÚ°zqÚoÛ›?u«íŽ==H³ ×Íåê6˜—‰íº’ d3£V<¥ 6ØÞÚ™Šò£$ÔqÎê5WAµÉÒ9Já;,g¸ZßiR á‘ Jȧ…}‰°¡¡ÅÔ'ä¤ï8¿¹q…µ—w!l}²{‡°ú»ub͈•ESãËÀ—Ó¾àc-ˆí8}) ÖWo¾0ôyÍ·§'õú +-›€Acª™‚ƶçô™dˆŠN‘^çN£477è¡wý*mjö§$ýþàrÎPü6¿ÃæÒŒiJ³ +-ú5lN9Q÷"³¥ªYðãÀ~œÌ½2¹ºÓÃuê²ä#ÿTËb‚càÄïM(—ÚFUX˜b²µ;£ÝÍóÝæVŠ«s‡Îdá¸ø¤t.ÕŽWSÞËÏ\âü_RópCõÞ–ŒÄ¬l2qÝå©Ô'Ü5Â;ž‡ûó›7&µÅARHß½x¶`»s¯&Š}òrÇq¸Í·ÿ¶_ØÐW*·€ cr¸Ih ‚ܧ«Þ¿’´í˦®«·~añqü»€>™dÿH×_ ÉÇ#÷ÃÇ{'Þè'×Yó7ôü8ƒö ­T¬tz Õã% ƒR>Ûo2¸ÄR»òìµ6+»‘âAš±x^?/UÐÁ­¬ðpÊÎœðOË@§Ÿþý¥‹Dæ«’3pšE)Mýþ~+›“ú$“M|×!Ó|¸›Cš×iu>ÎY,ñrî ÔppŸð +-kE1xâšÖ´<ögMŽ>kÏ+â†N2žkÕPˆ}GÑû”Ûu•ýù^ýÐ@Zæ3nùvî Nü2á…ä2üGƃ_"qÞíø«SêIz?×®ÊÝ`«ÏU’ú÷\Êß©yË¿ +-ú…ð€FñÚèðáO­çdžڃÚJÅtÒLÐyßÔÖò6°[~çEe»1Ptø .lrŠâÓñDˆ¥³É­’ûÌò’>¢¥’D®ncûÕ=trB*dCœÆÈ•°BÕ¯pÏñ+2ëº&É$¤qKDµi¢3càa><ëêÔ·F›¶ô;vì[¶ä§S—i.­Öl<ó1Wxº‘ýá +-.}É=[ðÔ»æï±´}héø\4ú¸€ú]ö[³‚}ˆ¶Íú‡ô“ò¶ã\Ú>r3Ù‡Š§öO¶Ûr¢YÜ9®/B±~ãÁÐè€ÃdQ¥%Ñßdû¹çû\uœž¿¨Ø£ÈüNS-^¦%Z!ý¦}ks*zï÷k˜ŸÜ˜51qb³½Øíò6 ›·è1]/!¿aùnrÕ€ßÀ}ºÉ®s§rýýº)KI­ÝUôkzý¤<¸¡D̳j'Iµ©Gó~š|`j.*š6rÿ{êc"}ï¸ÉÇq¹¥»ù¾üdª'ÙŽ’âÓÏ0–¥´Á +-=Ù¸ëó˜oCÙÌ··g2BrÄ6üš‹üÓSßÙ…0ø¤‚ðyÂ…]ý¾7 +-g’ý³ñ~:;e™ÀSêgdWúUœÑ¸9ãIZ—%û—f¼ÞnžÚ4¾ÑÔ›Ýñ짔u+N‘sì.(~'dqýöµ +‘Ú*¹ï"@ñ/Œ”=Í#,š8æùŸÔ#5”ðòÔتŸÇ•¹õ¡*BýIÕð¾?r‚ú(>¥*î—„Øá1Qû¸ zÖ@Skʹ¯m÷œsÇÂVäsëòx=[0E¨Ã¸?êÙ>ÔÄUÛ÷dªìoö庖 újñÕ²×i¬ mG¸*ŒóqÌG\®ÁcɶkgúÒo_šâGnÙ©îX‹ÄüƒB>P;%íè`à^ÏF¶A.íúiæVœlx‘ø] WáDö@q÷㮎[Ûô ÉÞJTõ|HNÆþ8Œ¨Çþ Àƒbw}½çt‚m4®nC«›¬_HVBøÆV˜ÙúéèWFdù\ U§®Ý¯%H|aøÝa»Ç’ƒyRRòöŽMx„<7X#~#¦˜ÞΨï½÷Õ;x}‘¯¯}Ç)êˆ-×ãÞ=[ð+Ââg!c4¶î ýÕ7}¨¢÷Y´ýé’ÎúbúÁÐW#JE€H‰¹„ŸP™úÙ(ÚëÍU’RCè×k¯ŸoØK,­†Š±Øµ˜-Y纷úkÞösiž›Dë¾¥'Qîmâq’NÂÁé7 t…Ë$Ž=wWôk§rÎßQ¯[¹_!u†ÅnjÈ–#<ŒàщÝMt‚ÆA¦bÔ¥Qд!°A|vøq@‚ÑNׯêòøND¹Ò®l›~àNú-{“„O w@xH¼ ü€²ê Ç^U-¿ï% @ÄÞ}÷åR_BWàf+ÂÏõ’ñ$k| 3LÇgZZˆ^ Zë<­sôå$FT>ú<åO0¼åYó²ÃV(*|é\þ`-º§z3±5 r¬vaME·\’#h\[›ÄŸ=LyõÛäoÈßšv: ôñ‡ÄãÞý‡~EùÊ燲үï:9yÙ~ÖTÐnÿ9!"~6b‰tâÝvcÜKœŽZ溺¶‹HˆûØ¡Lvúý¹è€rÿ§§*ÓïÊÛøÁ¶Ñ¿ ºÎÊ(· Ÿ(þîxñºC$Ë(#r‡æC'ö™ê˜YŠ[ "7nš ÿ*àö¯a¸ÛùÐWz‡§úîÑçر°Û!9 ûB•N¿•úð†Ð'hË·, ê?q‘¼?̶¤ÈÞG[\ÞKžR²ƒkK‹(sÆI°3¿°ê®äG&/º½p´¥é¨„ýó÷÷Ð ÄãÓJÅ駯Þ"€OЈx:樚›ßöe°Ó±›FüXò¦*¯Y~Ãb»å–8ÊeN¿ºùÂ5Àÿ¹¶EÐ2éf»OOöôCZ’ƼPšÀ!Hð€Ì8kL¥©fä v¼çí]ôR]qØúáánå=Íýæ4")½ûsØ3&µXíòéauk*¶kFÌäï1¶ç’}/ oví¸ÈÓW£ªR`!cÒã'úÐ +-½þ¿“(£L0Ñ5<5l;‚ÏXäH‚ü0ôƒ +-ñS14 éžú TCû!‡÷6ø›\2§ùõ2룟é{?g[Ë;ZÞ–ÿ ŠV?’˜Ÿ!¸ÄšvÊT3zPðÝbÊnŽðFåô ø~œD“gg{·£ÙiFœ +-8,‰ÄF°“å!¡~]ïr\Äï.¿Á#‘Ñ®b> ûŽ 2˜ÞXÐ&d¨´¸·x¤â µ8Löì©šr`ý”$½cϾà ñŽ”òŽ”·TUç–nóûèJ_ÀÏkZ!cþ5#fjÌ»óíûn7_'¢/~Dg…‹¯MŸ‡A1ëRÔð’ Íw$E¸R¿.ƒ`b½4õÄù^r‰¥ŸÉãGVwV? y«Mì¿%|Ô"Š÷ Tïx‹ØcÈd­TLïÁ±µ¼¥äG Ü·=q~.±&X{uœáá~гE~zD+D\oÔÏj÷uÖññ¬âól¿/+åÔO4ˆú +-¾:ûEM ëÝÓµ.I×Àº‡=é­O5ÑÆÃ@0ðZÖûÚÙñŽIbãQ_k9þ¡Z[Â}"·t«Ü'© ùû˜Þ!åè«XJ֜ٗôêóg ‚Ú´TI¼Äþqº¹ ÇæÞª?8õ¬< +-sGû ‰0òyäzÕ¤Öì1HíOÉøoúâh›9¿‡Í·ùM¼H,>°{úýØC²·"’äxWྕó»+vK3kÊMüR¾‹ä§íþ÷±[(ƒ_¨_ìÆ«Û@®n¦®Û»Kè’lä²bià‘zµ‰~­SÝ>ƒD—gøª~)ÃNÑÀOÔE›vr‹“ú¤á¡ÆȾ]­/`ÓQA^8õO°‹×'.?ö¼}éSð·èÙ‚—kF|wwX¾|öó=À>Ûôc­ÿí$LþbZZCðª@óøÜ9Qs<’S›½t^%ÕsKaYÄ™N*‰C) ™oÑ”RƒKXýþ¼›Ðøñ%ØV*.Œïo#ù™ÅüÚÖÛoŸ,©áÈ6‹gÓ#ñsÝÕC +-;$þ*ÛË|¯Šû”–ƒ{É3’¶c*xªnXJŒ¥®_½›ñ‹ªÒ†Ph/Æði7¯çáBJçì2vSªd$·}WÊݵ†É>âÃ/¸«‘ÜÂŒšÆG4Ns÷Æãˆvü +-kÕÛ§‹ù†ƒØ»lXNÔçú|É# +Bú¤í]ßÌ|dB–´×ÑxØhŸv’G¯T´û-ÅõJ¨¦Q}agã!6Ôö)R?ÛªA\ Þ_itô[pø#¿;°A¿Â{0("Lov#CW‰}Á~0íè–ànpÙøâVѱ8Zòsz(›Y£A¯Â‚­ ]w¾ŠX®‰¢e +ra#’÷IÌ8ôÃzòÛaü+•ê%m¸ ¶h ¡€åÏúÎZî¹] ùùŽzƒ±‚û`Š~„WÅ‹3dÒ7Ü‚jöbÓ]Ÿûkj~nlÜ  ùÛ¡úÌA1Ï>`Zmƒ„¥´PØÎn7(I|k_s äC +-yV§WüPMáo•-²òá¬PÎ%8Ø›`H]üYóW ä­ÒO£îÑÐÝ×CÝJÅyËûJôââ¨â>@Tu}V·ö;§H§°¿©Ñ§N!QU†@~z{4À;£ßÂΈ½ìÖ2ëïϽR?s6³LíNy‹iÒ$-CÖOæTU ‹»e7Öhï@ Vð+ôçJ£Ê8ÙÅï)<Âq¡õ'2TÎÉ2]Qª5P´w²ß`Éí .$ùà±V°ÎÔ—ìÔ€ »ä¾¿Ñç·OÇÛ¸/{GÎ68s©m¶à/ðýó98õkýœB˜|‡ï«V¿¯ü‰­¼]ÿ+ÈaÇ'8?0Í™ôJöÎÆRx¤°VWËñÓ¯é«4P±?t/ô{r÷Ћ¿wLÑŒϸS=2 ¡-¡•Ûã­fÃé4šŸ8ErÜÆ¥9†ë—œêœM ]q8&~ù)›ÆIuÝ'{4|¶ö§z7[–ÞÐ$D Ð¬Y‰æcfiŸÅöJî…´§–rK¿+DT}Ý-Hn<®'Nm}¬gUœg\²QEò‡PàÑlhqÜ™çûÕ”À5ÿÛ'ãž1©Õ”ç5MgпN«oFܳغ7¾ù”JèÏs—/m}ƒTǦ`Õiá{ôÈD Šutq)TÒrws–ií¤æg%™oÌ¢ÏõÌ169¤Ì‹üÀ0s8Êûƒß^Dˆ°”ñÆ.Ù×A2‹áhÉŒ—dš±QŸ`œâœçß,µÎq$a,ßäÄç~t+'ìß×1eé!àjRžáíéNÍ„UÓƒ*OGÁG 8‰EÃé1 (¿ìž9Ûa³ &ÀKŽ~°p@Žßl…<õ/Óò?+[ÞŽA]Ôí¡A¼@‚çsr|‹¡¶5~ÙįÓ;ryà ½¥ú•?Ê¿„MÉÈ}%ì8?ò÷aô]WÁ. ÛW™ú©€Ù:RNýÂO¼0i)ÁDh”k6¯ì»ËôˆØÕøŠ%kË'é‡ Yg‡?øÐ&à¯_w‡m˜NÂoöp“‰ Ý_y5˜k~Âïlôé™ôhCü\‹©*›Ž ³Ÿy1-e‚ßP綤EUGôäB¥Ö¯Lg½’Cy£>ܘ ðñ?ù øéÊ3lDàѵ)„êó¾O}$³¯ @¤Žn§Pzþªõ% ÞÇEßYZÊ›t‡Ùr%^{ ¿œöÐRÖ»m™]Ÿ 50½Ž-ý¥7¦…”sŸ"퓱ãÖHçk]C¯ÑMm£[¬Ö¥îWØËí,ò'ôûð±ŸÐ¥ð'øz„·RñJGÈ·?öð<‘¡{}Á~ë–Ç¡Iz»Òs—¤Ë<…D=üUU~H[ŒÄ¶Ýo€ŸluÏÈyL‹ÓØ·îcñ«‰±ËÏê·ŸXô×Z~VÝs&;cìt$5è]¬‘õeQ…Bµ5ïÙÐM…'®*ßM𘣾Êý úÈ;îªËŽF~w“ÚœòvË\•‹ð ¯£w\3æ÷ûù”ºcÊÒG °±9±7õ}^Ó×1Ðrå?ýÜ=°»sy½Êé—DZѓ7Ç˯ǣè ô(\ùUúí%Û„tªŸNSŸ­ñ·G{hÊï©¢—U=x5{Üe"ÚŒJYìÈfUŽK¬ÙÓ¿ÎF_vÿßÖT…BºÂ1z_!MvBêl«:Й³-·˜v¹Å†þVDçQN­8fô³ïvã§.Æ&àßðLØ9&r¬·mã¸ban.¬/hΊ~`!YõÝ ÓÐÂDÚ'p@¦·ugÔ”?µKVbDãÞç¤ ¹¥kj]ÝÉ—w0~¨q×Ï7Шµûš§ƒN£'ÌOê¼¾3âWàj÷Á°;Ï‚­ë=Áüä‘gß6dx‰ÒÄ“é‡`Ú' 2²±¾0܈øÝãQ»h¥âqMÚ†åfàßɌ®&'/iñÎü¢äCp‰fÖt§øE–#úD7 {®$&üæ ýPói–lusB!ù:Ñs ò`³n/ÄÓfi¾ Nµ¢Ód2íêXí» BK¤÷Rù‡&›ÎŸ/vTªï…u´~ßUTÒ–úFD=‘ߢú ~ž hk:ò6Å›½#Íô6Ã+8¬Ð.YÿjÏšöŒ›ëØ®)þܧÖtM}îpGDÜš}&ö e¼õ5„©u”|)mØ›š`š\ÀÙ™Ž¿~[Ì0îÊ.èyÞi,§2F:£9#êR«Z|Þ@?°$¼®¼Ýç¸ÖË@§¿Ñ©ÒóãÊ#Ì:•Ÿ.{ÐØã.À!ßíTïç$=8íæˆßê«ÑÁ_ºê¨Úò[8ÒÃZÈ€â‚Ð,æÅi - ]=oêü é‡R8á®.«k¥>ªHל…¡ãã¾…ð§^ˆaèñ…(äpºØ4¹O›ëØg¦|ãª:›~©O Ò'Và¿ây…è;\Ÿ2—[ºHGW`£E§ Ç¿LÛJØ*ç;šœ/TÊP?1wvEŸEN;R3`2=Ø’ø°¶¢V[¿†pìÞ,“b¡!áÞ(.ð)pðWúÅîîÈ3¾ë¸[›·~ææn¼Ç—Á~]zâJ‹_ãÏk¹ Kv¿#üÄlëhú¨m?ƒÆ»Fb]%…ÃI—ìA7cˆö¨(BQ Zô›ž籊°4~äâ- +-¬Î>âo™fü¬"…«àAæ_îG±>‘ìó|g³Oef³MŸš¡B©·TwÑì’ÕœûVžáèÏ­k|Ã5q[Lä]ñŠ>\’}h· Äïù3!¾ò¾àî¿‚°^µð®ì +-f¨ã™ÁïÆoT4HOЫ°hŠÃEý4LGÝØü•õ@h~³ŒÐïEu*z3à¾=¶Ýz$ý/ƒÝªPûê!~Gúúy]·u5å·lR£!ºïþ;O*~ÓÀxâ— WOc±¼7ì(@»õMjŸƒ)h”¯ïìãØ +-G£o(eÇ{ù¬ Ú +-Nf÷ÐËá©1õ}÷WÒϾäN. pàe¶+šUgœQS´SõBq¬…­¿ú +-kó'îo]Ý øs›·äõ}Ä65aôÕˆ¡íG¥&7C]_pÔaž­üþ8mÍXÃP­gÃqÒ›å6Ò¦»O­ç5¤`™M:ylÜ/?ý¾{©2Õb”Wƒùmó1˜ ßmTÌú‡Íî“ÄJy^—³©ž =¸šTSü0³{2ëDø‰ -pc‹þ4G«ÝÖû 9­Cf-ÿ$Ç°„ÚrÅ5ƒúÙâTγñ#ö ZÏkPœ°“ö»IÕëpŒ«+÷ͳÒ÷•s/sÖw”­þBƒë7¹ÿZhQôA}óð”Û Åißwš>]ûÃ]¸&QÖ¤~OÔלÃíódäµ¥…Ÿð Eò„ÉÅzç5š&à+ /ã)SÙû÷ϧÏd8Û Éý°øµH7èøCÔ†aùòd¤Õ£Êw¿äÕBû,ΚĽé *¿ÍÕ¤òÒv9¯(Ùì]7.ÈrÒº;ŸOÒôF NGß•¡,NÂJ}žíQ1ëÇ-éÓ†ô+gRŸZã×*")Nšž®ý©çu}jaX_±Ùǘùé}ì3¯××ö +-OY ç‚Ê&*¼P\]øWo©¶Ã"‹8wøŸ[—Ïà2çûëáÏ7jéÓê(Å{lC1ð—=r£¯ì&~FÓ›Ô—™K'hÀîœZÃ|ob ûó‰$5õÑø”™ëÀG¶A.¾›òîùðã ‘TskÚ†uky× ªKÙ/ó Éæ*§©Ø=:·¦u¹[ëvô³ãÔ¯ÊGvo ¡6¡6jMà4ß½!‚2²MŠ“5ï ØKÈÁ6!.ÜñÓ6Ñ©ñ3 æ3á 1× +-žædÉ9=UjZBtëÿY½bðå²¾£ +-Ͼ?hÆÔöT3jÚ’?uǯ0Å@¼lá_ý´€WX;s-Û¡uuÁCŸMqo# ûªŒÐ’EõÅÃN×Õ®è)V2¿CÃ޷ۄ·ì6°C½ uÀí%?ÇXžs&ú•4¡3Zßé5˜=À?IÌÉFoMCØa,‹K¬SC7¥ÅoÛ)SO|õˆÃÛóNïÁ"ô`r +-%FýZAça6Ö%Öæ±(àSþhÖî9–°*q3éGcô#PyŠ—íÛ\¹ýC¦16!Tî]v ¾ á¸@|d¹uä©0ÚŠœMnúdè©mV½– +-ÖŒšÆÛ1x²KVëZŸµ?\QµÒ×tÛ;rR_Z†Ëö©`*uÀ›\¸°Qx)ìµ +-ðS>}²º{U­7›Ê•6蚪ް~ 5AãïÕÕúÙº³aá*ú½Êö°5øœ ª#ùb¿Ÿc¸ª©ç¸”ôö²;Õr[Ô?¢\Ågµ€ëŽ +-?uÓby¢¯;)ÎC q:Z"B 4ËRU’œjê§úÎͤBq1üŒD,[¨¶HP_zZ›²+8¬<µgÝ©k#WX_Ü–Ï­;ûˆ{•õÓ±Áœ!=¬™Êe‹™¬jª¸ÍüDküeb"5¼×Å•œ•šƒ8’÷<édÓZx 훌F[‹°´4ýÈ"M¡¿GöA'-­ô›ùH²÷ H+~Å°gMâbƒšk>%\Mz‡üŸF|VS`ICù ÿÝ{wŸÇÀ¶0ÀølõG3Xnì@„$¢~½¹*”Ýä)Oð›´^<~ÂMRVÀzHÁ©)ºÌÜorã W•†²o›E'“Ò +-r·7hoÈþp7,«d¼Ãuííê«š¶î£Ÿ¨ˆâØ{ñZ²¨*%8[ºžNÑ;åØsÿÚTSk…Œ¤¬ßǪC>XùKM·BãWUå„âîW0üÐÎïVfƒà«¾$1¨?W“Jkb+Ž§ÌnÞ”îÁq½Ãëó­3øI'é Û„BÅ #²u’³ñŸ5êT¡Rà±\îƒRbV±¯§õ[×`Q­;¨¯Wú\3«7ï0žþ¾Ò³¦2ã.ÃŽúœ‰¸”±’¢·ƒÁOèÒ~OAÞ÷ÓJygÆWtü_û—ÜÓ³Û„‰¯z„UN¡_™×pXõ»Œ°DAY¶›7¦“ð5ssù‚Ö…ÐV?ä `—X!r«]ñÛ¯úøºµs%)òü¯L»Úb˜S4xhá²€¢/§=*£/ûæ&äö?ÊÄ'¸âgv—žÆØAŽ‹A?`F ŸÆ•þ,·¾Axþ…°•;‹¢Vrw?nïÞašQÓhò§ +-jÜ)u}ŸÖÕ­ñŽ?RßU؇P¿Ã s+C2 C©¨äDØăUY 0j!jÐ?=¾³5çÛý¤(Ê€ N†3 Ôl¤¡{”ïñlD(º[È3¾ÛÞ*ì÷Ö­<ÒcªÝl”B©å¶QuòÙf‚ ;6?üLûé‘eˆJ¬Ÿ-Ë{Q¸WaÍ…~“~I˜")B%·)dê>†__!ùVpW°…%>]­5®y¼ÛY1}¨†ŒÑÀ†Þ L»€”0mivp ð´®nðŒšV;GiÑ°Èö`YËáÙ±IûÖiQŸlzû44 °Ã¹¾üŸç3RGÿ§•BC´ T}¹2`+;õí={¡È­\Õ»6ìá»” gý/q®_µ¯1¸ôÓïÞ5€:wƒÖÁL2~<öGîT•ÔDÝŽ²_#”U-ÄŠ•üz¡e‘éÔ† +-ôºÕ;$z†õûNª‘2KH åÎ-z,ÿЪܷóIáÐTÜ¿6 ­?¿§ªYúøUͧŽ)‰Ê áƒ* 1Ï·¦Lɲ ÑYãwm¡)À#µƒ·e—¬0î#‡@+ŒI-•¹cCô€ @Öœ_ʶÒ>jp¶ŒÛGþLLZÿ•¹[ŽÃ¹×"8q@éôBÒ&ðdyj†ybÇ:ú¬g„C;—Š+^×ý¦al5Çp8ª)]¿¿Fh³:n+Àåç·m»Å±ÁëTœ.Bó“_E¶pî™öãwÓHaÔÞ9CøÅü ¬èÕ]Ï8å~UŸ]Â_f¯$ì{ÿ'OŸ³vö–¾é[׸àŒ(B?L{ò§BöF³¾Ls‰ˆ½û)ymŒwøºèS7¦ÀÍñH­®}ÆÍœ¿b6ðñì÷ÖN„à qþÞ„Ô:Á‘°3)Õo’æöˆÛNƒü3'›æçýmò»Å±øÉ3kêÈÿ)Žka8ëÇÐ$ªSNDc÷Ez„àüª1$5»s'NÛX"erÆð¾ë÷ú÷yq8Y¦×öAÜœHÁ½ôå*Ž‹iL„ZÀ¾Uƒ¦L™å»ªNò­kÖ›ÿqXéݲ®ÄBnSˆ®iã>¼êËêÁçÀ9~..~¹žŒÅžœ™ráS.5RâÈˆê´ +-Ž,M›ÜJLÁô[E5Ä)N¾y­àC¿•0wKƒœöë÷š55#§ƒjÃénÿ¡b:cà¥7É´òƒ¯ˆX¤àÂÃØî~Ý‹è 3ÕMC{T8{ö~¤ßù?ÊÓ¹õ*Ƽ‹ÃáãÿÆ7PÆOÂÀÇâ9¿ôClEØ7+Å0µ’|rÆï˜Wn?ÒdY½œ™#’{ê˜O_\LJ‹Læs k_øWdÏhO«7®$ïHYܬçH#‰\sÃÆ^¢7ŒÂ(—eÔ‚ºq‘‘‰ñ“ˆ*cÄi ¼ÖånJg7p±ÝMç,,­´ÍüQŸÅ?Cõx¸‡=bÜ/ЃÐXeåÃMuÔî$—ÑéF#ÿ'|ŽkÑ`W 帿b2H¬EµR÷)ûýv´GÅDnÃþécÄ—œåéçE³¹=GÃIí>H T V¢‚Ñ°¶Y‚Š4õø˜ ¤l· ~ Xx °Åg8gÍÐËÀ­-t +-PxF·YðØ™¬òw)åxÃNɘ é z訳þ¢-}ÇèS ã]—B"~žØAœ@0˧\0`;ùΣ+`Ö$t¸ØÍSŽ¬×!R4¿ÞàV¸Ÿoä÷z.f¾ùµØk[k6³K¬9é ªXØP=#¬pÀ:I¯µaÙ­Yzîf†]7ÊülljáUšdÕ]æ€?„¼ÍÊM¿S¿åÉõv>žÞÇ*Å«BçÂOaZÝNnRí*«'">×8ø¬úËc>08†¹röþ¨­YyŒ" é 'üãöÿ±ØòÔÇϬö°©½È×ãéC,n]6eË;ä‹« !#ísüjÕ¸>õ²øc§“†7"—öa–M'¼JEóø ÑÍv±0ÖÉÆè..óöS’-fáeD1»Ó®’]k‡¡øyGØ)—¨ÇÔ'—ó×>bÓ°4@Pÿ>H¼Âqñeõ¡'à`õƒdUÝƛӂúøùU<Í–ÅÕ©_%éɺ™l_©=ý¬°Ï™e!‡¬S$Sû:¬…‡NÃ¥éñµØEN*³•%4›æ瓈®ÁšÒb€å¡Ø7FyÏSú‹AÐEt‘iŸ£2`üÄøô‹¤µÙ屮­M½ÙôðLúGÌů¢`Ǧƒcæ±Æ”ù’Ñi!Å žð˜”æ ÉŸš›t×âŽMa¬1¶:’,’àWœKš“±Éö RÛÔ!p˜;ÎÞº jU£MɶjÍ6×ïCбd< öxíÓ:{\b…×î+W“æ}êÖÈf€‰Ø4×äw7HaÒꎈ\»¢Ë) wµHdy@c¿à£ñ:'¸jåŽmë‡pAeÞŽéÑ7‹Hæ;ºæ&×ëô;pœðøõ´è¡¾JgS`†,WÙË™™—Ü +-ÞpeŠIéúГ?uTsÒ$Jï›%¯«OÄ [ÜxYHD5ÑkÉRSoém¸&Dº}p¥Î$`ÛIŽÄ¸[äîð6Ô,ɨ¸ +-«EÒýØíœr5©$j!òJ5²™ŠØ4µüŒÞ]2{ÁÕ÷ÑV[a‡®žW*m¦ÆÕ(H?@:iF·~Ó‘ÆæãË©—ûMö¿¯e|a‹5Iê"«ì#“…Þpâg±Á€‡=^iYPÝÖr.K‡Õjx}Þ‰ÒÑi˜P’•Š‰É +-Hƒäí©3*ãc(ÚüìíÞ{Xǵ‡¹n[Ù¦´-îéuÇ\ý‚J‡ìikûmÇÏEËê鮼rŠ×TØóaù•ªÇ üpÙý +sN“_-?ijÇD­‡±ô€ʳÔòf%ÐC|î“¡â+7üh1úg=àw?\ë‘Æ¿37³Á^ý°us šê»Flàó˜ùnH³Ê!„–Rì òtF§ RM_[¨VZµ¸Ž‡•gÞ9×*þÜc\“Ђh$8ül“ˆE𳼬Kq}°g·‰ÔÎqêÔÇ„=S-ºä ¬®¯;ÐOO&oo!ÀÕ âù!¶gpFî‰Ydä"¼=IßÄÍïù.1'Ô;Ýñ}é‚Ài¬ ~lÚœ¢ C ìãZ?[üs;iQ ½(“ø…!%WâlbÚ’­0ÕQR'<ªT‚tÀ¾˜BÜMÀ­åÌ&w<àÜ‚ú3³â4~ –YFæ×ò{©ÏšL†+RÄ# "ã O/p~lcm4Âïz­{Zä`}±b}wÎ)FÆìˆÅBߣ~·Æ„ûÀöÄös;eªÊ×k„¦\ÈI»¾6µüt\ÝûŽ“»á Dµ•½‹)‚š9ìüX‡Ô§û¼ *•ïÐËc_—EˆŠHø”Ï\êu¦Tëü ,‘á·ñë#±ïñ{è¶å*ÂÿH“Ðrf>½át’Ü×à&6íÈ}×Å‹ñ>"ë;qºÃk4Iø¡¢1#ñgÞè¯(§-R2çkÎ`ÂK§VHV/ƒ‚®W¿&½kÕy€Ðí^ _Køõ%Ð=N;S6Ñ´êAÌî 1¿ò,P.¿õSrÌ“]Ǧ‡m¯I?ÁúÔOš V­ŒDþà` õ³‘ŒÅÕÄÜ Ê©M ±´oº/vAÅ»3*]–Zª¯S Aáÿ;Ö.k]›éEƒ)aen93£R”ìɦÙض¹˜-Õ­Ö®u}#¹>)IÇcÄ£ œW–é¤BÀ–êBŸÉv¡ì.ˆÉœõ­Øöxê­DHÆï!±®ß‡ÄƒÕØ£r¹)A–ô¢²þŸµ™V«?P mMkbË9eò‹2cù=|éU­ÙlÓ|¼þ—Ðþ—€zLDԓʤe•ù"æâ&Ì*¥b%Xýà”7c!v,“¢ƒMüªIMMydU¼+à&׳¡ý|šhÞØT`¾ð ¸ã 0©ƒ³OÑ=À"jÙ؈IiKþÔR쪺˜Ö\´YEý§ÌïïÕxr³úœá 64xò²žxÙ¼ä`yË4™óf¶Zwò‹[¸­¾0¿‚é§Ò†@•´_°P¼¦º%§ç5B/²ûÿE™ ‡˜•Ô)ûÕóÕ8@r÷K¯g=S ¯w«¡¡º VpÁ›ÏŽÄïeXcƒeï3…yänY>ÖƒŸ• ‚Á# ­TÒ¦³¶ÑÕ +-4Ø•}È‚ß=!ÀÅ)<öXŠ+pžû NέŠ¼Í3ð‚궛 +-Žômc6‰2˜œF7à¨Iá7í‘NëubŒF@ÔpOÆnþdøoÃlM¿s!vJK:7[O»­ŸƒîûÐý >õÐËEØ)ÓYõؽÖf-@'[.‰‹4!¿%Hã€kî¤Ú'#–dh\Óêùå-©«_'Î\´NéÓI¦FdÈ‘ê¾{Tßk~2Z劉6êv§û¿8 4ÖgÑ–ÜmSõ¨ÜÉÙ$Oe’.g¦a‘3ÙØòEêhÚZ¿’ñBpŸÆ÷P®q½Ó0|x¬Ûª>8%\ÍAVÂèІ٩;7W@”œ¬šR,]wr¦5ú!l=6‘9Qå Ô­¨=5é©&~é\Mv:-“ƒ4*¿Ñr©6}Æ#ìVH­çA)AðkÇËù®éåѱ§@cm9ÄA™Èx0ýšº^º+¤qÐOÎnÏR˜ŒYk{ÐøA›ºÇZŸc} eL±LfªQ‚úˆÜÖ#MÆö™›H5¦c>qäƒH557&M5ôê÷¬/@³Ttï–˜ðcêVò·b¥Ç ø S]ÆârñÜ6Yú׸U¦«c¨búÍd!ž»£\õ8g¸¶vSs5i]j0Ig:­ý$œv)Ì$?W‹vOó}´zzõÅ‚–ô’§àÏÔ…Aî~Bš7º¯-ê79ïyÝÚd—†Vê hð_H¢‚²Ô%Ø(bl¹õðX°wVcÊ}ûÖÔ¦þ­„•ÕrfªzÃÚò[{žfE‹M@q½¯ÔagNøéú*<üÁÂtF&:›r,œf5˱brŠ=pðûì»?iT†®~®GÙo · »Q¢ÞžjdÓ=h³Qrð¿–?UÄ¥‡â£:‡ªçfkZünt^ŠáSX)¸=—·FJô+ ϘD%Ž Œèön*(~:\y’»Vh)lо¶¸óVËu“ø% ?Ò…­MÓ}àu O!œ—«@­ø=üUîíg„ ¨V_åª:ƒ’Ûp¨‹ÀxퟩÒ}ÝÂ!L@<µ‘q¿ö¨yT'{8ÏÌ*/l:”†ªŸ%1|âõ Ý’ šûA>­°^×w¶_áÙ á3~µ«… +-˜Ò2¦ÌƒHCp0€ß›À™]Bp5ŒF‘K4 E…êW®ÚJð6ñM©T"å®õY§¾J<ï¬ÁÏRr5«õA%<p~0Âf0„])a%Ë¡-Í@r÷ö·»ƒ¶¶PîÂõ¡`ǽ¿&çP¯k6ðë:Y4ÝÖ‚q` ¦ôN¿ƒäc™&¥Ø ?Ì_Ón5QÃÛ×]£ +-fäðc²D›þÃ;€`%T@ÔŠ,=óæ ÝЫŸTAŒÃÝOoçEÂ~Ü|Õï#Ü”©—Ò‹•y:‚çèÅÁ¸ +=51~¢ã¢[øX’3á¿>Ûè,HÈ*È€Š1ÌLð€2ãôA½á´ì<"ÈÍ(;ÅP_íƒÍ)ŒnÀh8ìy´U¥}:ÐÐ’GkµFŠ…¯ú-KªTüdÍò^™ŸR$ß ¿7 +-áçš Äa W)þÇéñebðs¬°þC#‹'JF«çÇ$é­Ú¼l`ìÔ¾èä«õ@¿×û,’mJŽ̸,…1 +-þ~âMpþãg‰@"ϧM\Õ½öñʉÃGšDLߦ§Þpb{‡Ê}ÈÆýþïNɯ‚Ÿ«ò^ޙŤø]©õÄ„GÀ²~œ‰»sÛruv[ ï^Â)¢Õå; Ò¯#Š–®•>¿“[üà=Ä€é¥7 ðe2‡š¬õØÖ!EƒoÀéS“óë°‚åœ/6y’ƒÕš~tùåeÓ\Ô+}z›ÑAã¥rp‚f3ÍMù!pЫ1ÜÁÔë“xðÃ;sûÉ5îð+ÐÁYœnj´!@õ3ç1†küÖ óˆŸ³£i4•wø-}ƒ€/á©£* äþ2îhB0H·à—£Ñ˜ság…DK¢9ï鵃 1‡¦IÉ®Þdå6¤™¶°3‘D(úq>ÑR¶aÛ-dH­ +-I ªu©ÚƧãñQ2žü;9+õ}‰¤höŽ >{Hèà-*;|Z\~ôËH^Åý$/Û× Xrýõk­lÑI•*Xmi’:‘º†OÕÉáG¶ ,÷3ë“œúÆØ!•~Þ®d|Z¤Ž‚}HÕÒgõÁ}¾¸8qY}m*éÊÝ:h¥âŽÆè_Á”KqÐyžÛ)¹p^T>î;m iW7`ˆTúÑC#¬í§5`½êñ´P~ÅÉZÁì§êî‰ÈE(Hkœ0NÎt{ ÄÂO·#Î #">"ËÈ(ÑRѯÉÕ·¾ÛÄg} ðãØœáS)sm<×ßÛßÅϯN€¡§·&@ Šõ=útbôýÃÑoWÚ0‹7oé9™sØ×›Wr«àñ–Æ*H_C*ü€øÕa#ï¤“Ñ FËhþrš@°“~~²šØÔ˜ø) oÏ-ʉۘ)/w;Í:jæþaßç±Mà@à'ûuC>_`û5ô+w äù0?k—FÓ¹à°É¢üΰ£a¹6=ñˆÛ®€Ëˆüø ôÔãe+ñà,áA­²eû†9 +-Wõåzýªvë´6#uÔ-Ëë÷1ÅJó‡ßNî´îAkÕ¸E®ú+‹…4ï]õµØ O+?/Š~’XK€Å%ÎVN'‰rõhŽYÌ¥Âió(‹ü´tü6Å>Ås"(fq kr¬‚ŸÒÇ,4Pë—2±´ë¢éAYøŠ­Tlª‡Ó@ïÛfÙˤsë»ÆhÐ’ÕV+’èNûøU¹Èúúø +-“ñY_ê‚;áE8ô01]y.Œ)7¾~¥R”\IîD6¶«3w‡¿fo1‡eŸÃ¯¬±*B+…Öó[>ô­Gï²Ûûd¨¼‡îÞõéÐίL?âGŠI˜ÿ]^–9âg…zÄ@ÓÒª/êNŸ)Z7vlf´ô€XXFÒÿNn³WÃPÃj(Ñ…Ã$]ÅÆ‚¹Àa¡ÔÖp +-óZ=‡_ß?]€x((67Jw©ê â}gX†lcu¦úµòe¿]̹ø]Ð)B>½Ð’Då>“÷ô¶¯_*ÚÒÌNnœÒ‡Ëd¬ë¾ ,hì +-]_èmÂÇÀRwJÿФ®)ë!t©ÿOgª«xÚe¦¸ÖÒbkôb-ë7`.Ð"öËÍûjT3»›r#ò»ç<àO6¼Dz°z¯…ë&-L?$owå"––s8Ù+΂GU‚¾´íš è)‚-'žÁ‹Bàó?utí³l}ÍEêÿ;<ÎtV@q~OÏSæ¨üàË +-É­àº6€Ìëb[þíùo»Ã_üê6MÍ·ÆÉHá=Çø—¤úBª’æ%–Ä€Bÿ}h"˜·jç¢LÛZCÏ?‘ìV®l~Éï,v;*ÌÃûú'ø­]Pµe&ýö¾>³3ð,¦­ÃdG÷MN836m·$vf+ â—Ô¯hÔ¶œò´bÕ~Åø +- ä‚ÓäGÕ`B "UÿàœÁ +-< ´ø -¬#MfHpdcY¹¥AÅ€œÓ(:…~Bh„³7œ—¥}ë´¸Žk[eª×ï.»…­ìœô¢Ë‘# +-u6¨÷Þ½wWª‹¨ªH7U†+­Ð‰  'hÄUiª¿výÿíüeůŸ(CI™¼Ë¸¥Ž†^^_ZÊ”1ã¦ïŸ[`³ÀÞº6¼3ćL/%Mê_‡kÅÕ! ÐæÒP~”xy«ätÿ:–&»ïÏwl•::‚dMÔûÏ7\ý3!K 3úZˆ™µ7þ|'!‰È,š:zPªõwTÎÌG9Ì!Z +-F;î±Á:ZYá '‚cÂCGW@.¬_H‘Þþfºí!##‰1’A²Ä×|ø„Ä,ÅŽß¿szž|uÁxá¢Å‹Ð÷ûïr.Nûó­])tpJòXrõó÷)èGg$ËH]§ž•9Bã¢7¸DŠK°Uƒ/“8g”tÅ@¢‰"BœPbèŽgßžoæ¦I… J“òÁ/jZ=÷}¾©—ÊJtà°kƒˆ'€°qóéùÎE«5 “emb˜ØÀeƒôŸFzëIܘÇ“óZ±‚Ä !pxqÖ†×RB:ÀoQYŠ .иádì®åß7l¥þ¸@…IÞw·7bn¾¸*hQÐÃ+‹š8‡üûóø²evÁØšÿ·eÒµÁ!SÂć \.ÿn5l2“›æ Aº“~w’V‚«b–:ÐâÉø¹žF%ÉÑšr~èéPˆUÆ"“ç;:)nÒ»?~ ýÔ˜tMAXá#L}kW +-çöH¬Ÿo è«ÊJÁ\²°ú¼//¹é‘£Epq¤]·žlla0+¬êvº'HÑ%MÉêËwµP6Ow×u„j“«ƒ¿ï¶pÌ +¼ëAf£CmkjjzÖØð>òïÐfÜ‘-"+ð>Ȕ룆¦ÆælûJŸƒ¡@Ù$eøó=J°LÐ[¥v¿sSœ-.Qës ûA;;‹³ùw 8¨Ï·†Ú©SgLÏ·H’’ÜQ¶2qö›m›FO÷ù® +-RH`Ŷ sÇŒ?wÖµ•¡9£†¬SúÆ›ómà*çª&`I>þ}kë [Ú0iI?çKwd¶˜ ?ßnU¹‡† XØ™6bhQ7þç»O,E¾o·jéÎ-hÖ‡£iYŒlö‚ééòçÑPÆÄÀº`¹b¥ +-2üº4†Ê6o­¨’h¿””(PžPQ.¥¼WÕÄ2[4Q Œ™È5bû|ë×Zucݯ|k¾0­G±7p6õçï!•zh}÷.ûLi`ÌD z@Ù–tuØÚº°Þý¹´Ï‘ªËF—e!ÿ¾_×ÚR§†Óª5ÖûùtNŽQ*MTûýºu•…N­îËûóñ!Á1³E*;Ôï{h(Z]þ×ßRh_Y$Œ™¨ Ä’AuÐþ|ÇTÂæ¡Õ}áXïþ<ï+똉²ð­á×µ¶MÁABhûÂq¿~+M6Â`ÌDwø”šo ?›‚Ìë·Œ41sŸÃKQÌWów©Ï¿2¤QªYª~WPùuãßœ(±aµfɲì|Ç0 }þõùýýnž…d‹G3kÿíÜÓÛSŠrnÞ]NCŽ™¨ÖÏuÜiï¹ùw¾[»4H£”:Ÿú +-¿?_¼j¼ùëB=Dg0d–jÿë¶Ï¥ž'N™D >«¼Ç}ekld WžïhÓïS¦L—èê.aJî5¡îÞzɆȃLÌ/¬€)_ý\;ñì,%õ”†R—Ãp^™ER¹€ÂÅ0lkkÔ«·~Ý*¡ß¤4[l–ª@‡æüµsk ‘Ë¡Òaü:~ÿì( Èlñˆn9Õ›oØÈéRƒœ\Æ[ÇNU&j”­yj>c½µŽ[¥"4ÈÌ ìØØnηžB íÎ"\e¶X¥‡Ê_yÆ­Þ:†óÈ™5ŽÈ¿‡š +-hiÑ™=~!Ä·†Ý倲­BÎóŠÞ'ß„“ݱAY.öé° ¾cëb>ƒædP´¦VZOÁû0„‚€.dÏßSž¬çPùØýÈ-Õ‘RÞcÇ´ñWÙÓÕƒrzïöyn¾µÅp•jÕ0!ÎñmÔóíŽj?””ÓvO£YWøò›®³žûàƒëùIfô6sÇ ô9‘ÑsNç w7Ø'Bgºc;Bs:L]ñ|üš§ï¢¯¯.fs}ÏþS—¾³‚½Bœ ¦.b×ï¡{ ´ª:¥þêÉ¢ËïæµæÛÊb á ‚³™¨9iúm4^¹òéZ\6åD Å&!“±Ûéiw+ªÇì§ß·‰KÑGØ%¼I <ðfÍ`œ£ Û]QV³u£ªï˜º|Ý +¤QëïÙ/Úòš?I¸´ÃeÐôàÝ墙×Á<>­` +->a‘ ÔH±n!bÿ«ýþÌåhûn*žì"ÚcQïGßòã^9ó‹h-”Ñw•žo'WpÌç¸ÊÄý¤ª.òã·•ÚFÜ#÷Ûyq® ¢ËÕ¹¦’÷IÜøÜjWŸî×ùÐåŸOìÐmi‹W˜‡¯ÏÜ.Jß6¶mšVÝ‚.z”îhÁ?2à?m¸þà±”!c.º¼€‰ò‘™ÍäÃäO¿3Š<°&(³T˜ònàÜj+у‡ßç—x.qWet‘9v€y|UU²ö÷ɾ³”6n¼B_i#C£!|oóy9å‘(?Á„Ø×À€6Sïã,3`©úÂZE_i7´ðÉ{Û«Fâ€áÿö¢\“Ý_aöCÌ9™Cëå¡lgÆC“s qûÍ’cšÓgfšdlÛ_ÍvùTç«z”ỹ†$aF0EE‚æ«æõÍ·se%  «OšÁÌï¦È«mûÏ“ÛbØã¦{­^z߆ª‡ÍGàÖá‹|üàþ|ï•þgûÛßLæCZ¸’#™µê€1ª(¥Q¿vÎþú0C—/¿¹Ùݯ¼°ï?ÔɿªÊqa4û=#ï›Ì®eŸ<6ñ†vÇ2°Õs·¾LT®£.ëÛ:õå£ïÐjññ»*E4ݨ>ß…Õâëc†¢¬orï:vX¸Íš;›FSY9 }\býu|ª¡?ØôÓÍ’ +-ð×½;ʼnroa…°=¼£9Æ‘LÝÒ®ŽŸ?aT('(‹ÃÌ5ìžõ4Ðì;^©¿¨#ó;î|¦Mº¯`ljÃo®&¨¬Å«Þ‘šÎN\ÅĘô8·¼£ó!Àiûê d¤DXŠ{ס >„xŽè²ËÐW¤ý>xË'lPAœã'ó¸½=0mJy˸w™ƒÜP{˜mÿWû.C8ó7‚&\… Ç[=…ì¿Ç‰í2NCÜ@,f¿ø„t&Bâwÿy Üi `®ÄH(aKcÓz_œ@ÞÁæ¾ÑüŽ`õ?ºÓZüˆ¡Mà œ©ìKë‰;€ìÓúH[¹¾rù0b»o¦¡÷ƒ‘²nZ£W2í/qÉ:Y(ûù¾©\-¾ýÿÝKéÇ€'‚°þ.mA ¶¯x?ˆì¬rª„ø‹zDðUüÏG¸Eú‚eä4ú}í·©ž/Ýœòåò±Å¢9w|¨>ù¶ñ†ÕÔBŸÕ>W].>Oà§÷ãêÃq-pê®iv˜"†¿V­Xú;Ȩå|OLŸ˜¾ÙººË_ïHu Šoùà1ò+Yœ$} tnšñÝëáݪØ´¸Ô,vBÕ£ÏY=¼#ŽÇý-Fº5oê[mܳV¤òäIØÿçé.R¬Ø_,,Žw̽Ÿù]7•¸Ã ÜJ”ÿѺUß°õ‘Êš,XôN ðÿ\†‚©4ð—lW#Ãêq(×1ólïÁÏ|Z¹X@Q&µóì£Õ*ãaç7ËË;¹ÕëÐ   yû•àŸÅÁÃlJáÝqsæªi Ü4! „h0àX+ ªpàyGo¹±Në€3ĽóÛ·úÒ˷ãd ž+7ì–ˆF‰³Þ;Â]þú×±~†ß-ÍÝRüÀzz…Ö_4ùkËoÖð×Þ9£Eµ:«øuø• …AnÁmåRÚȽCÛ[[ÎX˜i+0ÐKúj·ˆaÛ<% +-½Þد׃ï›þ,,ýBé¥5Á£êP1ëŽ`²3PiýOÿýQÚ_Òm­š»abZ„¿{‡pzßÕcŽÝª ƒ`RÎÝm»¼« +-ëñ Ç¿rêÒn»â—mõ`¶ßYö+b<¼ªYKÅhâž„¤‡[×meÏî«•/ËäŠö&‘VÑ>?Ów‚.ˆü“Ý@>eÛaŒƒµJÌh GiM×aôwü:\–Ò:ÛŒ¿Ú”¢ªŠ~~Róï.gCÓyþJC0ëq øál‰œåVGÕƮ߿ç: <ŽÄËâöω³Uú„ ÞVÌÅ°÷ý'¿´šfÇŸî0—{UåQgû¨í¢¡o>¤™\@#Ùÿ ¾ès§T*üH+ñG@hâ€?ÔwÿÌß`ÉFÅ„g“þt³uŒäîoÎý‰ÃìfÚàl1ŠNëÉV?¿Gë–‹ÎE€Ç,‰ÖëõhérjT;Äúdq§oàuÆýÍwë³›õA¾±Z}ÐSâʤ{öù/Dkå¾5[ß‹^ßÀZ\›"î¯àÊŠÿÌL²I){1{þ"™Ÿ›L÷ Žñû1Á³§vçÞ/Ì’@¨¹@këQ\Wb·A…Áh—§íú¡5bÈnÇW?lÌ,t¬fžŒ“€úÜðG¼£Øö®Ax»vÃî“Ž'H“O °7^ÙŽÕ‚`{‡"uØzÇÙX{ÒvŒynz‘ñƉIÖ¼§™ÅzüÂ0ÕHá€]ð·'ô¬ yL§o·™“PÂãâA=RZÇDÃÄ߯CzØUü¤„ø?8?á(Š§žN6‰>îã ÃÏ–JßaTqdȵZßa.xT;º'…g±½r,qC^½(”<;¶í7¶ce؇РøÀ™€GíÝg¯¥±ÉWàþ?œ¸oÄSºÁ=¢Ávð­ûÐ_Åòb$ÝÉò e$`ç1ÿþHûýË2õ¨Ýñ3rõˆ +-ùqï­ÖŠ[ò˜öTÃ\Qß`¹™ÈqÁ# üÉd«;ÕŒ +-‹›/¶…£KÎsúÐÒj±*±Ü­‡¸ ì"‰­+¸d,O:ý÷Ðb  ü'Ðç˜öF[Q?9ŸcǦDÚ:ŠÉ 7ûY"n8ä_s­zP^]6Êü)]G&F´gî=¡Ûò«À‚p*7Jno´,h9r®6¸^€g”ƶEH\À<š€>¥Åvoˆ,•7)kn¸ë”}~Ø°ñL¥_Ù`M<«õ„«õl_™¸K¾÷ˆ?1åÕÞ ³Ÿ—S»£Ê›®ìûð)UÔ0ñ˜Y2ÓSÄïe$êq+ ütö›]iõ%ã ƒ‡¾„ú<­;`ô&…ø/uÖGÈÄe¾5]©;xÒw)©vxc„Ô§^`dp‹É“[”¦a„1’î€\ȶ\èn²€ÛÖ£îƒtZʼ¦SFŸ¡2? )ÀÁå »§b:þЧÓï:>*`õ`[% ¤Ñœ´al¤2µï‡š—A춲k»Â/ýý>Îë·žz*>7-M}W:ÆÞÃ&sÃ}bŒz}Áv_qÌFœ{ei…ÿºC9H#}§xi}}š¾ZÒóÐ*É­Ájë­dè/¸º¨‘0Îû—ºý}Ôø+2öÓÝý¦ýMßýœåD¸rS§Ç]ukÅ4ô¾0§Sÿ~…çff~„}a“RÅï:YÌ©'»o1%rÒ1ô+ùŽ•\–ÝõNÛ´yÃQAê5`He£T{qÛþÏ +-Ó¬r’Ž÷JJQ7 _“±öõéir&™2ãÖlÑrÁbdϺ@mƒ2öò`;ØøiR1阦*‡Ê×,Eìz¸ª€Û.ˆ:¿b?õØü™Mbҵ߀ `' Á‘µáÕ£šB0äßH¿>W…Mè{üÄ“{/ѬŸbSÿ¾éŠ7Ÿ,ØÔ¹ûV ²ÏwOþÄTêuÂP}pr}1ëO0Êñ8sIèÍ5m…ºA–½“£3É;… Pk˜ZåT/gúÖüý»—ˆ ü?’–¹¢uÆcíåÒêî‡ij«%]äVLª¢Ãý?)ˆ4?lùq¼î˜ù%ªKt¯ ¯#CÔ>I’ØT­|,YƒÍ Mö> Nc0W7®¢³—éÍ£ÕçñmìÛ®fdâ9>œÛ"A¦£‘–Œð=1ˆÂQÍCHÅ<)Ð6"Fè&ý%‰aU•º( þ´q€ «»_?:ò£nÛ¹ø™Úמg?)Ñ4o¿OGˆVJ¡Ê•š&XÛ²è‘e›xYåxÍ‚$7Ù=5Ä؇Ÿ¢(g¦ÎugOÊ°¹eVÅÍälž-¢{ßËîšðÑ4lÚÊjw#-ú‘2$ wˆ¦Ü¸üöX”ë¸#Bêl½ÉÑÊ4â Pð ¨Æ€®û±,ü¥ß‡úG im1 î?Ãdb®š&S=~TvwêI¡´¾YJ!~ý|k¿%á+„ªŽi²4)qåûôRdõ˜3:hÎSÀð~G-ßÀ•º>ìJn¦ÐOhiŸŠ +-õ>TNF‡3ÁuÆ="•º1w4,e””27\ÀªôÙ ŠET7îR>Y@ùÊá Û»tn.z%veˆ ,pQø¯o}ì‚?˜)¼5àïƒ#)¾õ©×^D»°÷é~~orþ˜)Gðuh)øÕÙ\hôPâ«ãKù>ɦWŸœ‚;šM.ôa[egõ¬Å}ù)/žwu§ØEëSìDm. Ý}¿?N§±X{`=ÛRî(ú[À>ÊrÎ"ú^—O|ÂØ‚ ”é™^­Ð6î¶ðV@Þƒ€X[¬YþXH÷k$"LÒú‘qš*‹MaÝö‹Õ]‹Ç,ßN!ïÓÔBNÚ¼N=öj»¢(?^°ýĨùBë>„™~<§1 »ïVŒ?x+õ 㤉Üo"³0)©¸§ð/ ÄVªÈw Ru¯| ±³s™a`ðÔ¹»F4LñY‹á; ‚ÀÈ ¼Øþ•ÐŸv]ôF©…Aa¢œ\w¢`¨ò)X 'j÷ýÄÉP*;ãZ $¨’0™ÌáÝV fZzäw~ë‡5±ÃV ÏqÒx ¤ÚÎÄÔášpç}ÔÍHWñ76–DãCb2\ûp—Õ?àXDEž¯r:¤ÂøÊ}Ϫ%à]3¬éHoK +-¤AG…gNyúû‹¸ñ¯ÂI§Îd»Úòcv·aöˆàîPÕÏ$Þ›D¡œ$P1pÚ:{…V“.%w÷¾“/ô}âŒSY|áð Z…Ÿ===¿•áТ!jkÃq¤ l€¾+À³DÂoÍy¿>€½™?àºå¯®ö0 PYqJè“ï¸U6º%ôÐe¾7Ó¾L³J”r¬òÃ’òÈO±ªVÌPûÜM¬–+BÍtYZ‘½G™I4KNLïÌÚÏ;æ«8,®¯-õd5oŒsM„Óòeô­Àˆ³ou#õJõ5_å#`7mKfÅã$¢˜/|wéu3 8p@zÚþÂ'¢Ž 2¤ÔVM-ÒöÒ] )Ú]ÿßÞE¬àTãg쯕8x4ý‚ܾ½bšI!ܽ·Âö°zMû%&SÑ›ëQªA½‡øéÙ­EÓ`;ù‘ç©_²§Ê“|‡y‡«ÈNêak4ë€úF ­Ät+*Â=¥û Ýa*ƒ.žÇÂ\}›< +-ɤúÖ®ôQ>ÅÒ¯>Ì&ê”Î Õ 5ö–{½©7  ^H)¼'çá N‡0TÂÇi][`5!¬³™Ÿ­û÷Ñ;>€è5a „èÐ#Íösdÿ$é2)’ ”¹³°Þ×g<ò1G¾P +-£äœ¼¨”ßlq?a3Ñ#úÇ'F©>Ÿ1(o毖{ªxj8ÀÚžå:Ín@nd¦åñ8,úü»cüt˜ª,&r©>(HLr"f>/V·¹òè†&çÛùHa;îOp‘ë¡€c*ü!Òˆ@ó n\Ñ|ÆùuëœÔ±'‚"åЃ”ƒ$þy|±_h6+|,.yL(V¦,¿ï?×`=Ì»Yî×"ÏìžË¡4*ˆß:?-Ììð('WùiýúBWuCrë}¢üæ£réñ·†"¡”_eÍö¼jŸOúXë…úZ‚ÿ 4Ž香fúþBuÛ»®mœø×x/E',t(pOˆ¹U…míQî¬7ÔHÇ_ú&ÂЩ8}:{P…ºf€Ü ‚b¢~Ö“mî{yâ›ô72ÝÇ9ú°Ä”…bîhé]ºýúÆE–óPjÀi‘üæ[ûÌõÜÖËʆíçÜT³ÕJušHg 8²9ïÀm’çô}éIÙ–;ºŽ.ÊNÜdgslu¶T@evÀdÉŒa¾í‰Yfo¾’|¡”šfuš+nOöh‹zÞðÓê0œf‹ƒl3£êôÕ¹ûfÉä©X¦´l¢>Pïç<4°þðÎ{ìYÙ¥'` c=×´@x1»¤È©¸ +-J3›/Ÿ5ffüêl¼Oå¨F~|»1³Uæ®X.å=æõ¹êY› ‚ ç®ïô_ŽqCÔ‡|F_V¦] u;þ£¤ÒWÝ|Yò}Ê çMâ©×ªBN'擤™6Dö¾Ù ‘°œ÷9P[3ì/rÚ +-({^® C¨ÿ'¬ý;£| R?#WRã¸`¶»wãGn9-C¨G¦îø%ÿÉvmæ.έs²î1Ó¥Ö¾­ã_-?ø™§GäúB‘rß‹*Šëoäîmµ Ðø¶™­wnðbê(Ö}¨„ hŽ!’[®úÞ#äþЬú÷¶)Rï/Ë:²ç‹·ª3ôòé"~zè¡•ÞehË÷Ú©poPÁ’'Nù»Ë‰~5ÜHf×òŒ„]ù×þ¿Ãz/Û?‰"à’¥¯û+]ñCõ?™ÄÌFwêù=47kOø§ø¿¥‘©^´È²8 W8åG4Üî~éhÄ>ºžïpj¨âFçŸ2Ê,CÝzG‘U‰\ ôwp¯V bªï]­Ìç帩kbÒW¯ïOcå<툖ªÑËÀ|†æ8ÅÂÆ›¯œc´E»fJ…Bæ´q—?žôù[³äµmåÿÞSy¥ªp®eh„äܘr-3ù'ÐÁÔBt³¿¬kQô´Ù<÷ÃÆü®L"Ȉ¿2/2¯å`Ö7¬üÐIN¿Ä‘bH,C6ëHdÖ“!ËÀ"ër|*ûgL­€§ßòCŽoòÚÜÁE³§bÕ êX£C‡3&çé0/këH›S·L|‚}/³L”2øŠ<+ ÏŽxùÑ>Ê£"…-¤OeŽ®Àd'÷QÆP®9£•ÞïÓ¿;þ^Ê{ãßý «Z-ÞÔ(ü‚Ë/Ñ ë{ÈïÁBsîg{[c|0zŒsœ_=&EµðSïýûµMlü=¦\$PÊR£™ýŽ&Ãh ÁBÓj‘"×Ĥi¹ ó†ü¢dô£šu0íBô! ·›õ0rCkÇ—ë‰õ)¬5A:£út‘wŠ¾üÑåËi õ:œ`>˜8EBÊ·ô„³}O%ÂÈ“`E#D[8O´–| }7XrŒÀÈœ¼¿pÙ#›¤½;8<þ‰Ñh™ìÊ?eÜYÞ Pý÷N5a Õ´*$ý^ô24¾¶='jð<Y·þ×É¡[™¬ÌrÝÙ_~²ô[ŸnJê²OésUõã[ðh·£ä›»à£lâ}ÿX ºã«ÊÚþ¦¿~·>Ìup•8¥öÅ^›bᬹ[ü¥½< ?aÅ„ª9uAz<‹ûÑc@u/ ÀlzOlFËÀôÁSè2Väâ,ÜEcfbìŒBc†4³6ê<ôBÇR0äÌJhߘÛp* ׯ­¶ß~ý4øjÀZ¤ü–âK¼Õ–Ôìô@'•Jã’ܯ.~ªOµ\SfÛ`Ò%*ò«œxõ¯»Ë¸l0ybCé#71öálÙLúòg8.vÞ/BqYM}}–Ñ?«£Aôl}¤¾Ð‡M¾ãg)ÞÏq1“NŒK°9Nà+òOkÉ],ÀwÒLzÆ=+ΩgÅ^ÝÄ!ÚFöñîà]ê¿2þ5Ñ“èøÒýÂ#-è7üùß[”õ—Ùׇ#úÓjäVoåÆÅ>5‹Œ¤™ôúe÷{…Ƈ›mL÷<L6ùâ5LB®B8»ìã¢ãÖ— „PŒøš°Ø*ÌǑ~Ä.pZßÇ™UýÙWºB}çòEåퟷ,|À©» íÁ1 ~׫‡j_ÏÝâóÝÓ óÇO´–¼…&¡+°–þNÔTò>Ž¯Ë¸,ŠQzPL Àü>” Àš{¡2Y$X-ù@Š>zk _ž´Èêý¾´ÇKhVèÌÄ;SÄ÷; ahÔ¿L.7 +-EŸàóuKÉÖBó•ßÅ­úQ]™Á»ce¨¦¯mÙ¤ËÂÛ²z +-Æ$â· QpÙV%Œþšjlï@ó;ô­;|>Ó¹Ó4Õ¨×Wo‹ú|úÌ—t>ßã“i*q¢¤°IÄHŽgœÿ‹ÔÖ¸ÅÖ’SßȶåÌÀKΖ÷q'êÃlF"F<ŽDì +ÿL§ÿÛoÿNú»õ¸ý:†¿£¼„Fvˆ.¦æø! ”Б½ Üž{UqTªp¾(!4úÞÄï¼ðs´¨¥Ö÷QÆÝ¡y9LÜÊ­_äÎ,¿7‰˜ŠT|R4RÒý6ðp¼©õlù†(|Å÷•·RønSD_teÑçØC}ué#Ô+¸D>ôÆÕ›S!x0  _q¸š8gä+ò®%_¬©âà"® ï¼å}²A"ƒ'|Þœ†9 /1è¸_êô 0>X\§O¤;ëðÖmøÉ +-ÿIž;@^ëvU††Ýî™Ñkœ†,þþqc‰¦ü‘L§ðÿãÄ·Á‡$0[+ýîÊ^”Þ\ åf1æ­.†—;ˆxŠT]G=N¶¯1`ªŽKGêšê™FWPi%¶%å[Ô§·“îsl }$ÎGgõ…7WÚÁfì*ƒÚê€>1&"ÃÝâ×íñ³ðÅkÂÅòäãþKXò6³ “â ¬°Ë8¦AÂç¶,¬–Ê0‡ÿyŽãºà@@JžychÑoE¥‹¾Æ_ñÉ<Úlü^…©Ø-,|Æ£ +-×`Ù=:ÅáùÄÚzI›“çEz R¿*½OÄЭ‡Y¸éQ!^Ô œÜíTÑÚªôìMoÑ1ºÿ‘š@×GÂÒ€FÒãˆÔ%c¨{Ïè®õ¹ãÚÖwœñ©> ØìÁŒ{V2X¬ÕaŒ†Ü-(ÓÎ|ZŸ£ë0ó©jCåkø …BÊ÷=ä ˜ûÌ©X¸;|,¼÷›ã:¾"§1/´²äK¤˜" Œ7G`9`0Àx.ê >ì§æ† àô‡ïÙ:â%ówˆ?f‡Ãð6 ˜} Øÿ©þ@Z÷õ-ßïîî­?8¼ì²ÇÂ*ÍF-¢ÒÊ{Eœ”=C. ¼XàLdÞX®Þ`ºÌ zqRƒ¯9bm…R?\.Z~G‰{Çv죳 4à‘Z8 ‡\?wêH¤¸76q¹Ÿ.4%ýö]tšÖLÓwóíŸHžïÇ`¶éÃxl>¥ö`ž(θ[¹=äõN[K~¾¾¦¿Ëò”ã~y÷ëŽML]íéÜÿ_œCvOt?øõnfõWNý4c¿‡J©ßL³ÏÙßï|å”'e#u‘õûÀÁà4RÇ|YŠ#…ј¿ÖË©`ÀnpÒ£À]¢ßkT$üÉÎjûŠ tö¡5§É”J6É<™$Šµ±BfIk†îíSWæͳ}™Ïgä#Eˆ&pÿÔL­¯;„¯còîÜ38uWÎ'÷"p&÷«Š?q ›ãàÿòÇÓN/s-9¼dÉ%Kä" ÷‚%'â·TBØB1p†¿‰ñk1?Àð£G`½ÝÙ-Nƒ“ &„¦ïç­Üg¢ó÷£_^î1Ç"H~-Ç ëqjRj÷­øÉ$§£GŒ}]jvs¿­3­+&òk@LŠÿE^Kwàú¥´]šºU“eòƒ  „›¾ÚµñpÅE®®ÞǾG-s)[äÊæ¡qÊ—%mé¾X`“tÓW&¼¿ˆyji?·¡¿s‡^Ipò¾òëKèaÅŸ}6£OÓLXó.!åñ"põ}ð'ÎÏ8ßöÜE[˜¢HƵäq¿…ô½?‘›æ9¥|y•òµËè’w)_êÿ‹'¿;8„ÿîìü+פ6ÑíE°9™ôAFÌ qR?o®ô Vå{*I·¼Q!$èTß#Ø#~¹pT3ÖÑh—»sÈ—‘Ó…Û’ ä§Á¶ŽpW5ø>‹ÖVDkÅ‹ ñ£’Oý®æ…ÝÅmôô•QãD¸ëžlïè-‚Âý­]ÒÁ꾈á¥{wŒôñ9ôHóuÖ7ç?0U3Ànr]óéÓƒSwì|q¯ +-ÝÂç!ˆH>6ÇCPÙ[ï+r*×’_ä}5$aÉ‹8ÖôÒ幄°…üºŒó +-¨Vñx„òž¿iú¯ î„ü.ºì¡û)¡ ?ºò=°aþBR-/è1÷««–|Üë1X££™°´û.¼|S¹ðVy^z„È:Ó‘uÿ–ŸY~ZH*Öæ7é—¯‡ü9Y™3Ã@0›†ÌØ—˜'‚ÃeCæ±Å¥×_¶Æ)¬_œLÀIPÕzMÞ1í÷UGLéÌaú·í"5<àÕflif:sæã^Ç<µ¾µa¸«ç«¦ÓeK±pˆsz¯›ã•¯ÈÅ[KNÎûB4Üñ¦h&\;ÞZØ/xku/­šÆÓNá6ã.ýAò½à:ÿž†œùèö;Ô¹ŸÉs€C«1]æJ¿+êÇgèÔðrÞ¯ì]ÚƒÈ\OŸ`²­»+aÄZ¸-gøí†üñ—J+ì¾ëf®ôp+S¿tJ¶%<úÐì{¨-eõÃÄËFa äDY@mãõrÙѯÓ'% è¨/Þ÷iC¾;l9í-`…†X&G´Cœùöì Î|™ë˜­Ý¼û~Á{±áKÜ*ãOœíxÆIÌW‹Û]>×’Óú„†‘‚%·ebøKþíîå·».ÕAx„¦0„ÍåM+|7fÞ?Aóî¡[ +-y§²k ‰©¢Oõ×`dù{6{@ìðÇ$é‘ÅÄßçÇJN@…ÛÆŠå,¬£ËÔVó¾I¬Ý*c +-vOÕC€`ë!ùýßP¬ïéuVêçûåß+ìT°”ßãªïhñ¾Ås–“{´Ô¬Gæƒ45 +-Ó¸]7O¦ÉÝñÊvPk‡—áۚ؀W3è½í ×Ñ]atŠÅ1RÚƒöæß ä³…S,\[¬].Å×=(ŒÃ˜?^®•kÉ·F}Œ†¡òumÔ@Ñ\íî8žÌºŒÏê ¾ºJ÷ åzЊâ݉§y[éŒöGvúìïð`hú-lâózeªœ[®ŸÁ0Ý»™ý@Ñ“ÍiòŸf Öv®prª„KJ¸aJ2àZ/1’IP;„ÑcùI[ÝíqÃ)Nl ZzL?“ļÏÓêÝ7ÛÜUö"D}sðDÔ#Ù7} !Tµû0P'ï ðxÜî¸×2t„²åç|OMwÇÙPû6ÕŽÒì™d½1³cw8 ’Ëu]0ß\{ eð:”ù2¬¨çS,|O âuÏðÝÉö¸ © ê+r×’·ä>ÆÃ>„Á’C>‘+ä}¾.ãÜÈÔ}%SWN/àXx§û/8d÷ÿØ?Þ¤iâå|oªŽ9Ô¯/8·øÓ3¸+~ë;L¿<#úv/v@KC˜N8ƒƒÛNÉÓh’~p1˜iWKª?z÷'åÏš[{ýJœ‹ðØ+€„ÐNVfª°f2*Ÿ©[ÈG|ØÎ¥Ö¡‡9<œ¢©oïôf…–¡(Š@Ww8}¾×Mýj3 ïY;VŽ¦.Çéõ#Ͳ°|éÖñ«½Áõñ¡ËBvtWñ'^Ïøf´…ûê!¸–|Ô×ñàË ,¹iÙ¹ÄÈû8]Å]2ùs¸ÂÑH Ö»EV»¢>ÐŒïÎ溉å5I®¾Ïï¡Ð¿³Ž<Z"ú]×8|‹Ô +-¨¡ø±)ÈÁ•áÒŠ´'Ò~¿-¯Êo=ÎÄüw=yñ}WÏ£{p~ÉÙT¦À só¼·™˜‹¦.‚«Ý;•ùÏ0E³†ø_B§ôÁï ù—å¯êË[Me_­‘PÉVÃøÖw»Ù‰„õ%…¾›X{ƒ¼EÅZ’;˜„l×q#·GŽÜ~õd\K>!÷!ì" {Hƒ%'ó‰\Èû8b]Æ©tçÞ»ƒßyH2YønçcM½>6óo¨ø¨bµ-™Ô‘+ýx{7óü½0íñ?Þ«üîhü) +-Ãü!µ„#÷mÉY„Xí\mbLKX@ØÝ߀X9™Ó!>P~ªù?FܬOáðXÿ3ãP³äÖ™MÅ…žôGîaÓiÂè#6váz¥È Y§¾›ûêkSD¥”=kê¯;Ì9öeÂm<º ØŽ@´#R}1*Ÿ3}7&úËÚ\ÈÀà­›œ;íÅEì´ ·å.\ê•rÆ+Aq%ÂðCþ·D>‘Oò>n\—qÂt +-endstream endobj 78 0 obj [/ICCBased 120 0 R] endobj 37 0 obj [36 0 R 35 0 R 34 0 R 33 0 R 32 0 R] endobj 262 0 obj <> endobj xref +-0 263 +-0000000004 65535 f +-0000000016 00000 n +-0000000203 00000 n +-0000019585 00000 n +-0000000000 00000 f +-0000019636 00000 n +-0000000000 00000 f +-0000000000 00000 f +-0001240583 00000 n +-0000000000 00000 f +-0000000000 00000 f +-0000000000 00000 f +-0000000000 00000 f +-0000000000 00000 f +-0000000000 00000 f +-0000000000 00000 f +-0000000000 00000 f +-0000000000 00000 f +-0001240656 00000 n +-0001241031 00000 n +-0001242638 00000 n +-0001308227 00000 n +-0001373816 00000 n +-0001395773 00000 n +-0001461362 00000 n +-0001526951 00000 n +-0001592540 00000 n +-0001658129 00000 n +-0001723718 00000 n +-0001789307 00000 n +-0001854896 00000 n +-0000000000 00000 f +-0001235820 00000 n +-0001235896 00000 n +-0001235971 00000 n +-0001236040 00000 n +-0001236117 00000 n +-0001920521 00000 n +-0000020534 00000 n +-0000021901 00000 n +-0000090522 00000 n +-0000152083 00000 n +-0001204796 00000 n +-0000334688 00000 n +-0001236790 00000 n +-0001236915 00000 n +-0001237031 00000 n +-0001237154 00000 n +-0001237281 00000 n +-0001237395 00000 n +-0001237511 00000 n +-0001237627 00000 n +-0001237751 00000 n +-0001237874 00000 n +-0001237987 00000 n +-0001238112 00000 n +-0001232942 00000 n +-0001233086 00000 n +-0001233230 00000 n +-0001233382 00000 n +-0001233534 00000 n +-0001233678 00000 n +-0001233822 00000 n +-0000023166 00000 n +-0000023425 00000 n +-0000023760 00000 n +-0000024508 00000 n +-0000024892 00000 n +-0000026053 00000 n +-0000026791 00000 n +-0000027530 00000 n +-0000028287 00000 n +-0000029431 00000 n +-0000029834 00000 n +-0000030583 00000 n +-0000053744 00000 n +-0000072433 00000 n +-0000021963 00000 n +-0001920485 00000 n +-0000022604 00000 n +-0000022652 00000 n +-0001204908 00000 n +-0001205588 00000 n +-0001204971 00000 n +-0000347457 00000 n +-0000366995 00000 n +-0000785650 00000 n +-0000347520 00000 n +-0000346603 00000 n +-0000346907 00000 n +-0000346666 00000 n +-0000342309 00000 n +-0000346488 00000 n +-0000342372 00000 n +-0000343012 00000 n +-0000343523 00000 n +-0000341698 00000 n +-0000341761 00000 n +-0000337855 00000 n +-0000340266 00000 n +-0000340799 00000 n +-0000340329 00000 n +-0000339115 00000 n +-0000339445 00000 n +-0000339179 00000 n +-0000337791 00000 n +-0000338215 00000 n +-0000336066 00000 n +-0000336794 00000 n +-0000336130 00000 n +-0000334801 00000 n +-0000335198 00000 n +-0000334865 00000 n +-0000332941 00000 n +-0000333609 00000 n +-0000333005 00000 n +-0000259673 00000 n +-0000154825 00000 n +-0000090566 00000 n +-0000152119 00000 n +-0000152175 00000 n +-0000333158 00000 n +-0000333306 00000 n +-0000333397 00000 n +-0000333503 00000 n +-0000333726 00000 n +-0000333781 00000 n +-0000334080 00000 n +-0000334158 00000 n +-0000334315 00000 n +-0000334463 00000 n +-0000334538 00000 n +-0000334613 00000 n +-0000335010 00000 n +-0000335107 00000 n +-0000335315 00000 n +-0000335370 00000 n +-0000335667 00000 n +-0000335745 00000 n +-0000335894 00000 n +-0000335991 00000 n +-0000336275 00000 n +-0000336422 00000 n +-0000336543 00000 n +-0000336667 00000 n +-0000336911 00000 n +-0000336966 00000 n +-0000337267 00000 n +-0000337345 00000 n +-0000337494 00000 n +-0000337641 00000 n +-0000337716 00000 n +-0000337999 00000 n +-0000338120 00000 n +-0000338332 00000 n +-0000338387 00000 n +-0000338688 00000 n +-0000338766 00000 n +-0000338915 00000 n +-0000339036 00000 n +-0000339324 00000 n +-0000339562 00000 n +-0000339617 00000 n +-0000339918 00000 n +-0000339996 00000 n +-0000340145 00000 n +-0000340474 00000 n +-0000340595 00000 n +-0000340698 00000 n +-0000340916 00000 n +-0000340971 00000 n +-0000341271 00000 n +-0000341349 00000 n +-0000341498 00000 n +-0000341619 00000 n +-0000341877 00000 n +-0000341932 00000 n +-0000342231 00000 n +-0000345876 00000 n +-0000345940 00000 n +-0000343988 00000 n +-0000345263 00000 n +-0000345327 00000 n +-0000343924 00000 n +-0000344357 00000 n +-0000344141 00000 n +-0000344262 00000 n +-0000344474 00000 n +-0000344529 00000 n +-0000344828 00000 n +-0000344906 00000 n +-0000345063 00000 n +-0000345184 00000 n +-0000345444 00000 n +-0000345499 00000 n +-0000345798 00000 n +-0000346057 00000 n +-0000346112 00000 n +-0000346410 00000 n +-0000346810 00000 n +-0000347023 00000 n +-0000347078 00000 n +-0000347379 00000 n +-0000367039 00000 n +-0000785594 00000 n +-0000785765 00000 n +-0000785831 00000 n +-0000785862 00000 n +-0000786167 00000 n +-0000786241 00000 n +-0001205524 00000 n +-0001205703 00000 n +-0001205769 00000 n +-0001205792 00000 n +-0001206054 00000 n +-0001206132 00000 n +-0001206437 00000 n +-0001206510 00000 n +-0001235617 00000 n +-0001235251 00000 n +-0001234884 00000 n +-0001234671 00000 n +-0001234454 00000 n +-0001234087 00000 n +-0001233966 00000 n +-0001234208 00000 n +-0001234329 00000 n +-0001234551 00000 n +-0001234789 00000 n +-0001235005 00000 n +-0001235126 00000 n +-0001235372 00000 n +-0001235496 00000 n +-0001235714 00000 n +-0001236672 00000 n +-0001236704 00000 n +-0001236554 00000 n +-0001236586 00000 n +-0001236436 00000 n +-0001236468 00000 n +-0001236318 00000 n +-0001236350 00000 n +-0001236200 00000 n +-0001236232 00000 n +-0001239883 00000 n +-0001239021 00000 n +-0001238235 00000 n +-0001238290 00000 n +-0001238589 00000 n +-0001238667 00000 n +-0001238824 00000 n +-0001238942 00000 n +-0001239076 00000 n +-0001239370 00000 n +-0001239448 00000 n +-0001239605 00000 n +-0001239726 00000 n +-0001239803 00000 n +-0001239938 00000 n +-0001240235 00000 n +-0001240313 00000 n +-0001240462 00000 n +-0001920574 00000 n +-trailer +-<<50D55593E899F2408A07A2263CE1780D>]>> +-startxref +-1920762 +-%%EOF +diff -urNr keepassxc-2.6.4-orig/share/macosx/keepassxc.entitlements keepassxc-2.6.4-patched/share/macosx/keepassxc.entitlements +--- keepassxc-2.6.4-orig/share/macosx/keepassxc.entitlements 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/macosx/keepassxc.entitlements 1970-01-01 01:00:00.000000000 +0100 +@@ -1,12 +0,0 @@ +- +- +- +- +- com.apple.application-identifier +- G2S7P7J672.org.keepassxc.keepassxc +- keychain-access-groups +- +- G2S7P7J672.org.keepassxc.keepassxc +- +- +- +I file binari keepassxc-2.6.4-orig/share/macosx/keepassxc.icns e keepassxc-2.6.4-patched/share/macosx/keepassxc.icns sono diversi +I file binari keepassxc-2.6.4-orig/share/macosx/keepassxc.iconset/icon_128x128@2x.png e keepassxc-2.6.4-patched/share/macosx/keepassxc.iconset/icon_128x128@2x.png sono diversi +I file binari keepassxc-2.6.4-orig/share/macosx/keepassxc.iconset/icon_128x128.png e keepassxc-2.6.4-patched/share/macosx/keepassxc.iconset/icon_128x128.png sono diversi +I file binari keepassxc-2.6.4-orig/share/macosx/keepassxc.iconset/icon_16x16@2x.png e keepassxc-2.6.4-patched/share/macosx/keepassxc.iconset/icon_16x16@2x.png sono diversi +I file binari keepassxc-2.6.4-orig/share/macosx/keepassxc.iconset/icon_16x16.png e keepassxc-2.6.4-patched/share/macosx/keepassxc.iconset/icon_16x16.png sono diversi +I file binari keepassxc-2.6.4-orig/share/macosx/keepassxc.iconset/icon_256x256@2x.png e keepassxc-2.6.4-patched/share/macosx/keepassxc.iconset/icon_256x256@2x.png sono diversi +I file binari keepassxc-2.6.4-orig/share/macosx/keepassxc.iconset/icon_256x256.png e keepassxc-2.6.4-patched/share/macosx/keepassxc.iconset/icon_256x256.png sono diversi +I file binari keepassxc-2.6.4-orig/share/macosx/keepassxc.iconset/icon_32x32@2x.png e keepassxc-2.6.4-patched/share/macosx/keepassxc.iconset/icon_32x32@2x.png sono diversi +I file binari keepassxc-2.6.4-orig/share/macosx/keepassxc.iconset/icon_32x32.png e keepassxc-2.6.4-patched/share/macosx/keepassxc.iconset/icon_32x32.png sono diversi +I file binari keepassxc-2.6.4-orig/share/macosx/keepassxc.iconset/icon_512x512@2x.png e keepassxc-2.6.4-patched/share/macosx/keepassxc.iconset/icon_512x512@2x.png sono diversi +I file binari keepassxc-2.6.4-orig/share/macosx/keepassxc.iconset/icon_512x512.png e keepassxc-2.6.4-patched/share/macosx/keepassxc.iconset/icon_512x512.png sono diversi +diff -urNr keepassxc-2.6.4-orig/share/translations/CMakeLists.txt keepassxc-2.6.4-patched/share/translations/CMakeLists.txt +--- keepassxc-2.6.4-orig/share/translations/CMakeLists.txt 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/translations/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +@@ -1,41 +0,0 @@ +-# Copyright (C) 2017 KeePassXC Team +-# Copyright (C) 2014 Felix Geyer +-# +-# This program is free software: you can redistribute it and/or modify +-# it under the terms of the GNU General Public License as published by +-# the Free Software Foundation, either version 2 or (at your option) +-# version 3 of the License. +-# +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY; without even the implied warranty of +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-# GNU General Public License for more details. +-# +-# You should have received a copy of the GNU General Public License +-# along with this program. If not, see . +- +-file(GLOB TRANSLATION_FILES *.ts) +-get_filename_component(TRANSLATION_EN_ABS keepassx_en.ts ABSOLUTE) +-list(REMOVE_ITEM TRANSLATION_FILES keepassx_en.ts) +-list(REMOVE_ITEM TRANSLATION_FILES ${TRANSLATION_EN_ABS}) +-message(STATUS "Including translations...\n") +- +-qt5_add_translation(QM_FILES ${TRANSLATION_FILES}) +- +-if(MINGW) +- file(GLOB QTBASE_TRANSLATIONS ${Qt5_PREFIX}/share/qt5/translations/qtbase_*.qm) +-elseif(APPLE OR KEEPASSXC_DIST_APPIMAGE) +- file(GLOB QTBASE_TRANSLATIONS +- /usr/share/qt/translations/qtbase_*.qm +- /usr/share/qt5/translations/qtbase_*.qm +- ${Qt5_PREFIX}/translations/qtbase_*.qm) +-endif() +-set(QM_FILES ${QM_FILES} ${QTBASE_TRANSLATIONS}) +- +-install(FILES ${QM_FILES} DESTINATION ${DATA_INSTALL_DIR}/translations) +- +-# Add keepassx_en.qm as a fallback for uncommon english locales +-install(FILES ${CMAKE_CURRENT_BINARY_DIR}/keepassx_en_US.qm DESTINATION ${DATA_INSTALL_DIR}/translations RENAME keepassx_en.qm) +- +-add_custom_target(translations DEPENDS ${QM_FILES}) +-add_dependencies(${PROGNAME} translations) +diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_ar.ts keepassxc-2.6.4-patched/share/translations/keepassx_ar.ts +--- keepassxc-2.6.4-orig/share/translations/keepassx_ar.ts 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/translations/keepassx_ar.ts 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7847 +0,0 @@ +- +- +- AboutDialog +- +- About KeePassXC +- حول KeePassXC +- +- +- About +- حول +- +- +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- للإبلاغ عن العلل: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- +- +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- KeePassXC موزع ÙˆÙقًا لشروط رخصة غنو العمومية (GPL) إصدار 2 أو (حسب خيارك) إصدار 3. +- +- +- Contributors +- المساهمون +- +- +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">إستكشا٠المساهمين عبر GitHub</a> +- +- +- Debug Info +- معلومات تتبع الأخطاء +- +- +- Include the following information whenever you report a bug: +- قم بتضمين المعلومات التالية عند الإبلاغ عن علة: +- +- +- Copy to clipboard +- نسخ إلى الحاÙظة +- +- +- Project Maintainers: +- مشرÙÙŠ المشروع: +- +- +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- شكر خاص من Ùريق KeePassXC يذهب إلى debfx لإنشاء KeePassX الأصلي. +- +- +- +- AgentSettingsWidget +- +- Use OpenSSH for Windows instead of Pageant +- +- +- +- Enable SSH Agent integration +- +- +- +- SSH_AUTH_SOCK value +- +- +- +- SSH_AUTH_SOCK override +- +- +- +- (empty) +- +- +- +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- +- +- +- SSH Agent connection is working! +- +- +- +- +- ApplicationSettingsWidget +- +- Application Settings +- إعدادات التطبيق +- +- +- General +- العام +- +- +- Security +- الأمان +- +- +- Access error for config file %1 +- خطأ ÙÙŠ الوصول لمل٠التكوين %1 +- +- +- Icon only +- الأيقونة Ùقط +- +- +- Text only +- الوص٠بالكلمات Ùقط +- +- +- Text beside icon +- وص٠حرÙÙŠ بجانب الأيقونة +- +- +- Text under icon +- الوص٠أسÙÙ„ الأيقونة +- +- +- Follow style +- تابع النمط +- +- +- Reset Settings? +- +- +- +- Are you sure you want to reset all general and security settings to default? +- هل أنت متأكد من رغبتك ÙÙŠ إعادة جميع الإعدادات العامة وإعدادات الأمن الى وضعها النمطي الأولي ØŸ +- +- +- Monochrome (light) +- +- +- +- Monochrome (dark) +- +- +- +- Colorful +- +- +- +- You must restart the application to set the new language. Would you like to restart now? +- +- +- +- +- ApplicationSettingsWidgetGeneral +- +- Basic Settings +- الإعدادات الأساسية +- +- +- Startup +- بدأ التشغيل +- +- +- Start only a single instance of KeePassXC +- شغل تطبيق واحد Ùقط من KeePassXC +- +- +- Minimize window at application startup +- تصغير الناÙذة عند بدء تشغيل التطبيق +- +- +- File Management +- إدارة الملÙات +- +- +- Backup database file before saving +- إحتÙظ بنسخة من مل٠قاعدة البيانات قبل الحÙظ +- +- +- Automatically save after every change +- الحÙظ تلقائيًا بعد كل تعديل +- +- +- Automatically reload the database when modified externally +- إعادة تحميل قاعدة البيانات تلقائيا عند تعديلها خارجيًا +- +- +- Entry Management +- إدارة الإدخالات +- +- +- Use group icon on entry creation +- استخدم رمز المجموعة عند إنشاء الإدخال +- +- +- Minimize instead of app exit +- تصغيرالتطبيق بدل الخروج منه +- +- +- Show a system tray icon +- اظهر أيقونة البرنامج ÙÙŠ صينية النظام +- +- +- Hide window to system tray when minimized +- إخÙاء الناÙذة إلى شريط المهام عند تصغيرها +- +- +- Auto-Type +- الطباعة التلقائية +- +- +- Use entry title to match windows for global Auto-Type +- استخدم عنوان الإدخال لمطابقة النواÙØ° للطباعة التلقائية بشكل عام +- +- +- Use entry URL to match windows for global Auto-Type +- استخدم رابط الإدخال لمطابقة النواÙØ° للطباعة التلقائية بشكل عام +- +- +- Always ask before performing Auto-Type +- اسأل دائما قبل تنÙيذ الطباعة التلقائية +- +- +- ms +- Milliseconds +- مل.ثانية +- +- +- Movable toolbar +- شريط عÙدد قابل للتحريك +- +- +- Remember previously used databases +- تذكÙر قاعدة البيانات المستخدمة أخيراً +- +- +- Load previously open databases on startup +- عند بدء التشغيل إعادة Ùتح قواعد البيانات التي Ù…Ùتوحة سابقاً +- +- +- Remember database key files and security dongles +- +- +- +- Check for updates at application startup once per week +- Ùحص وجود تحديثات للبرامج عند بدء تشغيل التطبيق مرة واحدة ÙÙŠ الأسبوع +- +- +- Include beta releases when checking for updates +- +- +- +- Language: +- اللغة +- +- +- (restart program to activate) +- ( للتÙعيل يرجى إعادة التشغيل ) +- +- +- Minimize window after unlocking database +- تصغيرناÙذة التطبيق بعد Ùتح قاعدة البيانات +- +- +- Minimize when opening a URL +- تصغير البرنامج عند Ùتح رابط URL من النت +- +- +- Hide window when copying to clipboard +- إخÙاء ناÙذة البرنامج عند النسخ الى الحاÙظة +- +- +- Minimize +- تصغير +- +- +- Drop to background +- الإرجاع الى الخلÙية +- +- +- Favicon download timeout: +- Ùوت الوقت لتنزيل أيقونة الشعارالمÙضل +- +- +- Website icon download timeout in seconds +- الزمن بالثانية Ù„Ùوت الإتصال لتنزيل أيقونة الموقع +- +- +- sec +- Seconds +- ثانية +- +- +- Toolbar button style +- نمط Ù…Ùاتيح شريط العÙدد +- +- +- Language selection +- إختيار اللغة +- +- +- Global auto-type shortcut +- المختصر الى النمط-التلقائي العمومي +- +- +- Auto-type character typing delay milliseconds +- تأخيرالطباعة لأحر٠النمط-التلقائي +- بأجزاء الثانية +- +- +- Auto-type start delay milliseconds +- تأخير بدء النمط-التلقائي بأجزاء الثانية +- +- +- Automatically launch KeePassXC at system startup +- +- +- +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- +- +- +- User Interface +- +- +- +- Toolbar button style: +- +- +- +- Use monospaced font for notes +- +- +- +- Tray icon type: +- +- +- +- Reset settings to default… +- +- +- +- Auto-Type typing delay: +- +- +- +- Global Auto-Type shortcut: +- +- +- +- Auto-Type start delay: +- +- +- +- Automatically save when locking database +- +- +- +- Automatically save non-data changes when locking database +- +- +- +- Tray icon type +- +- +- +- +- ApplicationSettingsWidgetSecurity +- +- Timeouts +- مهلة Ù†Ùاد الوقت +- +- +- Clear clipboard after +- امسح الذاكرة بعد +- +- +- sec +- Seconds +- ثانية +- +- +- Lock databases after inactivity of +- أغلق قواعد البيانات بعد حالة عدم النشاط Ù„ +- +- +- min +- دقيقة +- +- +- Forget TouchID after inactivity of +- +- +- +- Convenience +- السهولة +- +- +- Lock databases when session is locked or lid is closed +- اقÙÙ„ قواعد البيانات عندما تنقÙÙ„ الجلسة أو يتم إغلاق اللابتوب +- +- +- Forget TouchID when session is locked or lid is closed +- إنسى هوية البصمة عند Ù‚ÙÙ„ حصة التÙاعل أو عند إغلاق الشاشة +- +- +- Lock databases after minimizing the window +- Ù‚ÙÙ„ قواعد البيانات عند تصغير الناÙذة +- +- +- Re-lock previously locked database after performing Auto-Type +- أعد Ù‚ÙÙ„ قاعدة البيانات التي تم تأمينها سابقًا بعد تنÙيذ الطباعة التلقائية +- +- +- Hide passwords in the entry preview panel +- اخÙÙŠ كلمات السر ÙÙŠ لوحة إستعراض المدخلات +- +- +- Hide entry notes by default +- إخÙاء Ù…Ùدخل الملاحظات Ø¥Ùتراضيًا +- +- +- Privacy +- الخصوصية +- +- +- Use DuckDuckGo service to download website icons +- استعمل خدمة DuckDuckGo لتنزيل أيقونات مواقع الإنترنت +- +- +- Clipboard clear seconds +- مسح لوحة الحÙظ بالثواني +- +- +- Touch ID inactivity reset +- المهلة الزمنية لعدم التÙاعل لنسيان هوية البصمة +- +- +- Database lock timeout seconds +- المهلة الزنسة لقÙÙ„ قواعد البيانات +- +- +- min +- Minutes +- دقيقة +- +- +- Clear search query after +- مسح محددات البحث بعد مضي +- +- +- Require password repeat when it is visible +- +- +- +- Hide passwords when editing them +- +- +- +- Use placeholder for empty password fields +- +- +- +- +- AutoType +- +- Couldn't find an entry that matches the window title: +- تعذر العثور على إدخال يطابق عنوان الناÙذة: +- +- +- Auto-Type - KeePassXC +- الطباعة التلقائية - KeePassXC +- +- +- Auto-Type +- الطباعة التلقائية +- +- +- The Syntax of your Auto-Type statement is incorrect! +- صياغة التعبير للطباعة التلقائية غير صحيح! +- +- +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- الوقت المعطى لأمر الطباعة التلقائية طويل للغاية، هل تريد المتابعة؟ +- +- +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- هذا الأمر للطباعة التلقائية يحتوي على Ù…Ùاتيح مضغوطة بشكل بطيء للغاية، هل انت متأكد من المتابعة؟ +- +- +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- هذا الأمر للطباعة التلقائية يحتوي على عبارات مكررة، هل تريد المتابعة؟ +- +- +- Permission Required +- إذن السماح مطلوب +- +- +- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC يطلب إذن السماح بالدخول لإنجاز التغييرات المبدئية ÙˆÙÙ‚ النمط-التلقائي . إذا كنت قد أعطيت الإذن بالسماح +- Ùقد يستوجب منك ذلك إعادة تشغيل KeePassXC +- +- +- +- AutoTypeAssociationsModel +- +- Window +- الناÙذة +- +- +- Sequence +- التسلسل +- +- +- Default sequence +- التسلسل الإÙتراضي +- +- +- +- AutoTypeMatchModel +- +- Group +- المجموعة +- +- +- Title +- العنوان +- +- +- Username +- اسم المستخدم +- +- +- Sequence +- التسلسل +- +- +- +- AutoTypeMatchView +- +- Copy &username +- نسخ Ùˆ اسم المستخدم +- +- +- Copy &password +- نسخ Ùˆ كلمة السر +- +- +- +- AutoTypePlatformMac +- +- Permission Required +- إذن السماح مطلوب +- +- +- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. +- +- +- +- +- AutoTypeSelectDialog +- +- Auto-Type - KeePassXC +- الطباعة التلقائية - KeePassXC +- +- +- Select entry to Auto-Type: +- حدد مدخل للطباعة التلقائية: +- +- +- Search... +- البحث... +- +- +- +- BrowserAccessControlDialog +- +- KeePassXC - Browser Access Request +- +- +- +- %1 is requesting access to the following entries: +- +- +- +- Remember access to checked entries +- +- +- +- Remember +- +- +- +- Allow access to entries +- +- +- +- Allow Selected +- +- +- +- Deny All +- +- +- +- Disable for this site +- +- +- +- +- BrowserEntrySaveDialog +- +- KeePassXC-Browser Save Entry +- متصÙØ­ KeePassXC إحÙظ المدخلات +- +- +- Ok +- تمام +- +- +- Cancel +- ألغ +- +- +- You have multiple databases open. +-Please select the correct database for saving credentials. +- لديك العديد من قواعد البيانات Ù…Ùتوحة +-الرجاء إختيار قاعدة البيانات الصحيحة لحÙظ المسوغات +- +- +- +- BrowserService +- +- KeePassXC: New key association request +- KeePassXC: طلب مصادقة Ù…Ùتاح جديد +- +- +- Save and allow access +- Ø­Ùظ والسماح بالوصول +- +- +- KeePassXC: Overwrite existing key? +- KeePassXC: الكتابة على المÙتاح الحالي؟ +- +- +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- Ù…Ùتاح التشÙير المشترك مع إسم "%1" موجود بالÙعل. +-هل تريد الكتابة عليه؟ +- +- +- KeePassXC: Update Entry +- KeePassXC: تحديث المÙدخل +- +- +- Do you want to update the information in %1 - %2? +- هل تريد تحديث المعلومات ÙÙŠ %1 - %2ØŸ +- +- +- Abort +- إجهاض +- +- +- Converting attributes to custom data… +- +- +- +- KeePassXC: Converted KeePassHTTP attributes +- +- +- +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- +- +- +- Successfully moved %n keys to custom data. +- +- +- +- KeePassXC: No entry with KeePassHTTP attributes found! +- +- +- +- The active database does not contain an entry with KeePassHTTP attributes. +- +- +- +- KeePassXC: Legacy browser integration settings detected +- +- +- +- KeePassXC: Create a new group +- +- +- +- A request for creating a new group "%1" has been received. +-Do you want to create this group? +- +- +- +- +- Your KeePassXC-Browser settings need to be moved into the database settings. +-This is necessary to maintain your current browser connections. +-Would you like to migrate your existing settings now? +- +- +- +- Don't show this warning again +- لا تÙظهر هذا التحذير مرة أخرى +- +- +- You have received an association request for the following database: +-%1 +- +-Give the connection a unique name or ID, for example: +-chrome-laptop. +- +- +- +- +- BrowserSettingsWidget +- +- Dialog +- الحوار +- +- +- This is required for accessing your databases with KeePassXC-Browser +- هذا مطلوب للوصول إلى قواعد بياناتك مع KeePassXC-Browser +- +- +- Enable browser integration +- +- +- +- General +- العام +- +- +- Browsers installed as snaps are currently not supported. +- +- +- +- Enable integration for these browsers: +- تÙعيل التكامل لهذه المتصÙحات: +- +- +- Vivaldi +- +- +- +- &Edge +- +- +- +- Firefox +- +- +- +- Tor Browser +- +- +- +- Brave +- +- +- +- Google Chrome +- +- +- +- Chromium +- +- +- +- Show a notification when credentials are requested +- Credentials mean login data requested via browser extension +- +- +- +- Request to unlock the database if it is locked +- +- +- +- Only entries with the same scheme (http://, https://, ...) are returned. +- السماح Ùقط بالمدخلات التي تعود بنÙس الصيغة (http://, https://, ...) +- +- +- Match URL scheme (e.g., https://...) +- +- +- +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- لا تعرض سوى Ø£Ùضل التطابقات للرابط المحدد بدلًا من جميع الإدخالات للنطاق بأكمله. +- +- +- Return only best-matching credentials +- +- +- +- Returns expired credentials. String [expired] is added to the title. +- +- +- +- Allow returning expired credentials +- +- +- +- All databases connected to the extension will return matching credentials. +- +- +- +- Search in all opened databases for matching credentials +- Credentials mean login data requested via browser extension +- +- +- +- Sort matching credentials by title +- Credentials mean login data requested via browser extension +- +- +- +- Sort matching credentials by username +- Credentials mean login data requested via browser extension +- +- +- +- Advanced +- متقدم +- +- +- Never ask before accessing credentials +- Credentials mean login data requested via browser extension +- +- +- +- Never ask before updating credentials +- Credentials mean login data requested via browser extension +- +- +- +- Do not ask permission for HTTP Basic Auth +- An extra HTTP Basic Auth setting +- +- +- +- Automatically creating or updating string fields is not supported. +- إنشاء او تحديث حقول التسلسل تلقائيًا غير مدعوم. +- +- +- Return advanced string fields which start with "KPH: " +- +- +- +- Don't display the popup suggesting migration of legacy KeePassHTTP settings. +- +- +- +- Do not prompt for KeePassHTTP settings migration. +- +- +- +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- تحديثات مسارات KeePassXC أو keepassxc-proxy تلقائيًا لبرامج المراسلات الأصلية عند بدء التشغيل. +- +- +- Update native messaging manifest files at startup +- +- +- +- Use a custom proxy location if you installed a proxy manually. +- إستخدام موقع وكيل مخصص ÙÙŠ حالة تثبيت خادم وكيل يدويًا. +- +- +- Use a custom proxy location: +- Meant is the proxy for KeePassXC-Browser +- +- +- +- Custom proxy location field +- +- +- +- Browser for custom proxy file +- +- +- +- Browse... +- Button for opening file dialog +- إستعراض... +- +- +- Use a custom browser configuration location: +- +- +- +- Browser type: +- +- +- +- Toolbar button style +- نمط Ù…Ùاتيح شريط العÙدد +- +- +- Config Location: +- +- +- +- Custom browser location field +- +- +- +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- +- +- +- Browse for custom browser path +- +- +- +- Custom extension ID: +- +- +- +- Custom extension ID +- +- +- +- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 +- +- +- +- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 +- +- +- +- Please see special instructions for browser extension use below +- +- +- +- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. +- +- +- +- <b>Warning:</b> The following options can be dangerous! +- <b>تحذير:</b> قد تكون الخيارات التالية خطيرة! +- +- +- Executable Files +- ملÙات برامج +- +- +- All Files +- جميع الملÙات +- +- +- Select custom proxy location +- حدد موقع خادم الوكيل المخصص +- +- +- Select native messaging host folder location +- +- +- +- +- CloneDialog +- +- Clone Options +- إعدادات الإستنساخ +- +- +- Append ' - Clone' to title +- أض٠' - Clone' إلى العنوان +- +- +- Replace username and password with references +- إستبدل اسم المستخدم وكلمة المرور بالتوصيات +- +- +- Copy history +- نسخ التاريخ +- +- +- +- CsvImportWidget +- +- Import CSV fields +- إستيراد Ù…Ùدخلات CSV +- +- +- filename +- اسم المل٠+- +- +- size, rows, columns +- الحجم، الصÙÙˆÙØŒ الأعمدة +- +- +- Encoding +- ترميز +- +- +- Codec +- الترميز +- +- +- Text is qualified by +- النص مؤهل من قبل +- +- +- Fields are separated by +- تÙÙصل الحقول بواسطة +- +- +- Comments start with +- تبدأ التعليقات عند +- +- +- Consider '\' an escape character +- يعتبر '\' حر٠هروب +- +- +- Preview +- معاينة +- +- +- Imported from CSV file +- Ù…Ùستورد من مل٠CSV +- +- +- Original data: +- البيانات الأصلية: +- +- +- Error +- خطأ +- +- +- Error(s) detected in CSV file! +- +- +- +- [%n more message(s) skipped] +- +- +- +- CSV import: writer has errors: +-%1 +- +- +- +- Text qualification +- +- +- +- Field separation +- +- +- +- Number of header lines to discard +- +- +- +- CSV import preview +- +- +- +- Column Association +- +- +- +- Last Modified +- آخر تعديل +- +- +- Password +- كلمه السر +- +- +- Created +- Ø£Ùنشئت +- +- +- Notes +- ملاحظات +- +- +- Title +- العنوان +- +- +- Group +- المجموعة +- +- +- URL +- رابط +- +- +- Username +- اسم المستخدم +- +- +- Header lines skipped +- +- +- +- First line has field names +- +- +- +- Not Present +- +- +- +- Column %1 +- +- +- +- TOTP +- +- +- +- Icon +- أيقونة +- +- +- +- CsvParserModel +- +- %n column(s) +- %n عمود%n عمود%n عمود%n عمود%n عمود%n عمود +- +- +- %1, %2, %3 +- file info: bytes, rows, columns +- +- +- +- %n byte(s) +- +- +- +- %n row(s) +- +- +- +- +- Database +- +- File %1 does not exist. +- +- +- +- Unable to open file %1. +- +- +- +- Error while reading the database: %1 +- +- +- +- File cannot be written as it is opened in read-only mode. +- +- +- +- Key not transformed. This is a bug, please report it to the developers! +- +- +- +- %1 +-Backup database located at %2 +- +- +- +- Could not save, database does not point to a valid file. +- +- +- +- Could not save, database file is read-only. +- +- +- +- Database file has unmerged changes. +- +- +- +- Recycle Bin +- سلة المهملات +- +- +- Passwords +- Root group name +- كلمه السر +- +- +- Database save is already in progress. +- +- +- +- Could not save, database has not been initialized! +- +- +- +- +- DatabaseOpenDialog +- +- Unlock Database - KeePassXC +- +- +- +- +- DatabaseOpenWidget +- +- Key File: +- مل٠المÙتاح: +- +- +- Refresh +- تحديث +- +- +- Don't show this warning again +- لا تÙظهر هذا التحذير مرة أخرى +- +- +- All files +- كل الملÙات +- +- +- Key files +- ملÙات المÙتاح +- +- +- Select key file +- إختر مل٠المÙتاح +- +- +- Failed to open key file: %1 +- +- +- +- Unlock KeePassXC Database +- +- +- +- Enter Password: +- +- +- +- Password field +- +- +- +- Hardware key slot selection +- +- +- +- Browse for key file +- +- +- +- Browse... +- إستعراض... +- +- +- Refresh hardware tokens +- +- +- +- Hardware Key: +- +- +- +- Hardware key help +- +- +- +- TouchID for Quick Unlock +- +- +- +- Unlock failed and no password given +- +- +- +- Unlocking the database failed and you did not enter a password. +-Do you want to retry with an "empty" password instead? +- +-To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. +- +- +- +- Retry with empty password +- +- +- +- Enter Additional Credentials (if any): +- +- +- +- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +-<p>Click for more information...</p> +- +- +- +- Key file help +- +- +- +- ? +- +- +- +- Cannot use database file as key file +- +- +- +- You cannot use your database file as a key file. +-If you do not have a key file, please leave the field empty. +- +- +- +- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> +- +- +- +- Key file to unlock the database +- +- +- +- Please touch the button on your YubiKey! +- يرجى لمس الزر المتواجد على YubiKey! +- +- +- Detecting hardware keys… +- +- +- +- No hardware keys detected +- +- +- +- Select hardware key… +- +- +- +- Old key file format +- +- +- +- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> +- +- +- +- +- DatabaseSettingWidgetMetaData +- +- Passwords +- كلمه السر +- +- +- +- DatabaseSettingsDialog +- +- Advanced Settings +- +- +- +- General +- العام +- +- +- Security +- الأمان +- +- +- Encryption Settings +- +- +- +- Browser Integration +- تكامل المتصÙØ­ +- +- +- Database Credentials +- +- +- +- +- DatabaseSettingsWidgetBrowser +- +- KeePassXC-Browser settings +- +- +- +- Stored keys +- +- +- +- Remove +- إزالة +- +- +- Delete the selected key? +- +- +- +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- +- +- +- Key +- المÙتاح +- +- +- Value +- القيمة +- +- +- Enable Browser Integration to access these settings. +- +- +- +- Disconnect all browsers +- +- +- +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- +- +- +- KeePassXC: No keys found +- KeePassXC: لم ÙŠÙعثر على أية Ù…Ùاتيح +- +- +- No shared encryption keys found in KeePassXC settings. +- +- +- +- KeePassXC: Removed keys from database +- KeePassXC: Ø­ÙØ°ÙÙت المÙاتيح من قاعدة البيانات +- +- +- Successfully removed %n encryption key(s) from KeePassXC settings. +- +- +- +- Forget all site-specific settings on entries +- +- +- +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- +- +- +- Removing stored permissions… +- إزالة الصلاحيات المخزنة... +- +- +- Abort +- إجهاض +- +- +- KeePassXC: Removed permissions +- KeePassXC: Ø­ÙØ°Ùت الصلاحيات +- +- +- Successfully removed permissions from %n entry(s). +- +- +- +- KeePassXC: No entry with permissions found! +- KeePassXC: لا يوجد Ù…Ùدخل مع الصلاحيات الموجودة! +- +- +- The active database does not contain an entry with permissions. +- لا تحتوي قاعدة البيانات النشطة على إدخال مع صلاحيات. +- +- +- Move KeePassHTTP attributes to custom data +- +- +- +- Do you really want to move all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- +- +- +- Stored browser keys +- +- +- +- Remove selected key +- +- +- +- Move KeePassHTTP attributes to KeePassXC-Browser custom data +- +- +- +- Refresh database root group ID +- +- +- +- Created +- Ø£Ùنشئت +- +- +- Refresh database ID +- +- +- +- Do you really want refresh the database ID? +-This is only necessary if your database is a copy of another and the browser extension cannot connect. +- +- +- +- +- DatabaseSettingsWidgetDatabaseKey +- +- Add additional protection... +- +- +- +- No password set +- +- +- +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- +- +- +- Continue without password +- +- +- +- No encryption key added +- +- +- +- You must add at least one encryption key to secure your database! +- +- +- +- Unknown error +- خطأ مجهول +- +- +- Failed to change database credentials +- +- +- +- +- DatabaseSettingsWidgetEncryption +- +- Encryption Algorithm: +- خورزامية التعمية: +- +- +- AES: 256 Bit (default) +- AES: 256 Bit (الإÙتراضي) +- +- +- Twofish: 256 Bit +- Twofish: 256 Bit +- +- +- Key Derivation Function: +- وظيÙØ© Ù…Ùتاح الإشتقاق: +- +- +- Transform rounds: +- جولات التحول: +- +- +- Memory Usage: +- إستخدام الذاكرة: +- +- +- Parallelism: +- التماثل: +- +- +- Decryption Time: +- +- +- +- ?? s +- +- +- +- Change +- +- +- +- Higher values offer more protection, but opening the database will take longer. +- +- +- +- Database format: +- +- +- +- This is only important if you need to use your database with other programs. +- +- +- +- KDBX 4.0 (recommended) +- +- +- +- KDBX 3.1 +- +- +- +- unchanged +- Database decryption time is unchanged +- +- +- +- Number of rounds too high +- Key transformation rounds +- عدد الجولات عالي جدًا +- +- +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or days (or even longer) to open! +- أنت تستخدم عدد كبير جدًا من جولات تحول المÙتاح مع Argon2. +- +-إذا احتÙظت بهذا الرقم، Ùقد تستغرق قاعدة البيانات ساعات أو أيام (أو حتى أطول) Ù„Ùتحها! +- +- +- Understood, keep number +- Ù…Ùهوم، حاÙظ على العدد +- +- +- Cancel +- ألغ +- +- +- Number of rounds too low +- Key transformation rounds +- عدد الجولات منخÙض جدًا +- +- +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database may be too easy to crack! +- أنت تستخدم عدد قليل جدًا من جولات تحول المÙتاح مع AES-KDF. +- +-إذا احتÙزت بهذا الرقم، قد تكون قاعدة البيانات الخاصة بك من السهل جدًا كسرها! +- +- +- KDF unchanged +- KDF دون تغيير +- +- +- Failed to transform key with new KDF parameters; KDF unchanged. +- أخÙÙ‚ تحويل المÙتاح مع معطيات KDF الجديدة; KDF دون تغيير. +- +- +- MiB +- Abbreviation for Mebibytes (KDF settings) +- +- +- +- thread(s) +- Threads for parallel execution (KDF settings) +- +- +- +- Change existing decryption time +- +- +- +- Decryption time in seconds +- +- +- +- Database format +- +- +- +- Encryption algorithm +- +- +- +- Key derivation function +- +- +- +- Transform rounds +- +- +- +- Memory usage +- +- +- +- Parallelism +- +- +- +- ?? ms +- +- +- +- ? s +- +- +- +- +- DatabaseSettingsWidgetFdoSecrets +- +- Exposed Entries +- +- +- +- Don't expose this database +- +- +- +- Expose entries under this group: +- +- +- +- Enable Secret Service to access these settings. +- +- +- +- +- DatabaseSettingsWidgetGeneral +- +- Database Meta Data +- البيانات الوصÙية لقاعدة البيانات +- +- +- Database name: +- إسم قاعدة البيانات: +- +- +- Database description: +- وص٠قاعدة البيانات: +- +- +- Default username: +- اسم المستخدم الاÙتراضي: +- +- +- History Settings +- إعدادات السجل +- +- +- Max. history items: +- أقصى عدد للسجلات: +- +- +- Max. history size: +- أقصى حجم للسجلات: +- +- +- MiB +- MiB +- +- +- Use recycle bin +- إستخدام سلة المهملات +- +- +- Additional Database Settings +- إعدادات قاعدة البيانات الإضاÙية +- +- +- Database name field +- +- +- +- Database description field +- +- +- +- Default username field +- +- +- +- Maximum number of history items per entry +- +- +- +- Maximum size of history per entry +- +- +- +- Delete Recycle Bin +- +- +- +- Do you want to delete the current recycle bin and all its contents? +-This action is not reversible. +- +- +- +- (old) +- +- +- +- Enable compression (recommended) +- +- +- +- +- DatabaseSettingsWidgetKeeShare +- +- Sharing +- +- +- +- Breadcrumb +- +- +- +- Type +- +- +- +- Path +- +- +- +- Last Signer +- +- +- +- Certificates +- +- +- +- > +- Breadcrumb separator +- +- +- +- +- DatabaseSettingsWidgetMetaDataSimple +- +- Database Name: +- +- +- +- Description: +- +- +- +- Database name field +- +- +- +- Database description field +- +- +- +- +- DatabaseTabWidget +- +- KeePass 2 Database +- قاعدة بيانات KeePass 2 +- +- +- All files +- كل الملÙات +- +- +- Open database +- Ùتح قاعدة بيانات +- +- +- CSV file +- مل٠CSV +- +- +- Merge database +- دمج قاعدة بيانات +- +- +- Open KeePass 1 database +- Ùتح قاعدة بيانات KeePass 1 +- +- +- KeePass 1 database +- قاعدة بيانات KeePass 1 +- +- +- Export database to CSV file +- تصدير قاعدة البيانات إلى مل٠CSV +- +- +- Writing the CSV file failed. +- تعذر كتابة مل٠CSV. +- +- +- Database creation error +- +- +- +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- +- +- +- Select CSV file +- +- +- +- New Database +- +- +- +- %1 [New Database] +- Database tab name modifier +- +- +- +- %1 [Locked] +- Database tab name modifier +- +- +- +- %1 [Read-only] +- Database tab name modifier +- +- +- +- Failed to open %1. It either does not exist or is not accessible. +- +- +- +- Export database to HTML file +- +- +- +- HTML file +- +- +- +- Writing the HTML file failed. +- +- +- +- Export Confirmation +- +- +- +- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? +- +- +- +- Open OPVault +- +- +- +- +- DatabaseWidget +- +- Searching... +- يبْحَث... +- +- +- Do you really want to delete the entry "%1" for good? +- هل تريد حقًا حذ٠الإدخال "%1" بشكل دائم؟ +- +- +- Do you really want to move entry "%1" to the recycle bin? +- هل تريد حقًا نقل الإدخال "%1" إلى سلة المهملات؟ +- +- +- Do you really want to move %n entry(s) to the recycle bin? +- هل تريد حقًا نقل %n Ù…Ùدخل إلى سلة المهملات؟هل تريد حقًا نقل %n Ù…Ùدخل إلى سلة المهملات؟هل تريد حقًا نقل %n Ù…Ùدخل إلى سلة المهملات؟هل تريد حقًا نقل %n Ù…Ùدخل إلى سلة المهملات؟هل تريد حقًا نقل %n Ù…Ùدخل إلى سلة المهملات؟هل تريد حقًا نقل %n Ù…Ùدخل إلى سلة المهملات؟ +- +- +- Execute command? +- تنÙيذ الأمر؟ +- +- +- Do you really want to execute the following command?<br><br>%1<br> +- هل تريد حقًا تنÙيذ الأمر التالي؟<br><br>%1<br> +- +- +- Remember my choice +- تذكر ما اخترته +- +- +- Do you really want to delete the group "%1" for good? +- هل تريد حقًا حذ٠المجموعة "%1" بشكل دائم؟ +- +- +- No current database. +- لا يوجد قاعدة بيانات حالية. +- +- +- No source database, nothing to do. +- لا يوجد قاعدة بيانات مصدرية, لا يوجد شيء Ù„Ùعله. +- +- +- Search Results (%1) +- نتائج البحث (%1) +- +- +- No Results +- لا يوجد نتائج +- +- +- File has changed +- المل٠تغير +- +- +- The database file has changed. Do you want to load the changes? +- قاعدة البيانات تغيرت. هل تريد تحميل التغييرات؟ +- +- +- Merge Request +- دمج الطلب +- +- +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- تم تغيير مل٠قاعدة البيانات ولديك تغييرات لم يتم Ø­Ùظها. +-هل تريد دمج التغييرات؟ +- +- +- Empty recycle bin? +- Ø¥Ùراغ سلة المهملات؟ +- +- +- Are you sure you want to permanently delete everything from your recycle bin? +- هل أنت متأكد من حذ٠كل شيء من سلة المهملات نهائيًا؟ +- +- +- Do you really want to delete %n entry(s) for good? +- +- +- +- Delete entry(s)? +- +- +- +- Move entry(s) to recycle bin? +- +- +- +- Lock Database? +- +- +- +- You are editing an entry. Discard changes and lock anyway? +- +- +- +- "%1" was modified. +-Save changes? +- "%1" Ù…Ùعدل. +-هل تريد Ø­Ùظ التغييرات؟ +- +- +- Database was modified. +-Save changes? +- +- +- +- Save changes? +- Ø­Ùظ التغييرات؟ +- +- +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- +- +- +- Disable safe saves? +- هل تريد تعطيل الحÙظ الآمن؟ +- +- +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- KeePassXC قد Ùشل ÙÙŠ Ø­Ùظ قاعدة البيانات عدة مرات. هذا غالبا ما يحدث بسبب خدمات مزامنة المل٠حيث تقوم بمنع الكتابة على الملÙ. +-أتريد إلغاء خيار الحÙظ الامن ثم المحاولة مرة أخرى؟ +- +- +- Passwords +- كلمه السر +- +- +- Save database as +- Ø­Ùظ قاعدة البيانات باسم +- +- +- KeePass 2 Database +- قاعدة بيانات KeePass 2 +- +- +- Replace references to entry? +- +- +- +- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? +- +- +- +- Delete group +- +- +- +- Move group to recycle bin? +- +- +- +- Do you really want to move the group "%1" to the recycle bin? +- +- +- +- Successfully merged the database files. +- +- +- +- Database was not modified by merge operation. +- +- +- +- Shared group... +- +- +- +- Writing the database failed: %1 +- +- +- +- This database is opened in read-only mode. Autosave is disabled. +- +- +- +- Save database backup +- +- +- +- Could not find database file: %1 +- +- +- +- +- EditEntryWidget +- +- Entry +- Ù…Ùدخلة +- +- +- Advanced +- متقدم +- +- +- Icon +- أيقونة +- +- +- Auto-Type +- الطباعة التلقائية +- +- +- Properties +- خصائص +- +- +- History +- التاريخ +- +- +- SSH Agent +- وكيل SSH +- +- +- n/a +- n/a +- +- +- (encrypted) +- (Ù…Ùعمّى) +- +- +- Select private key +- إختر المÙتاح السري +- +- +- Entry history +- تاريخ دخول +- +- +- Add entry +- إضاÙØ© Ù…Ùدخل +- +- +- Edit entry +- تعديل Ù…Ùدخل +- +- +- New attribute +- خاصية جديدة +- +- +- Are you sure you want to remove this attribute? +- هل أنت متاكد من إزالة هذه الخاصية؟ +- +- +- Tomorrow +- غدا +- +- +- %n week(s) +- %n أسبوعأسبوعأسبوعين%n أسابيع%n أسبوع%n أسابيع +- +- +- %n month(s) +- %n شهرشهرشهرين%n شهور%n شهور%n شهور +- +- +- Entry updated successfully. +- Ø­Ùدث المÙدخل بنجاح. +- +- +- New attribute %1 +- +- +- +- %n year(s) +- +- +- +- Confirm Removal +- +- +- +- Browser Integration +- تكامل المتصÙØ­ +- +- +- <empty URL> +- +- +- +- Are you sure you want to remove this URL? +- +- +- +- Reveal +- إستكشا٠+- +- +- Hide +- +- +- +- Unsaved Changes +- +- +- +- Would you like to save changes to this entry? +- +- +- +- [PROTECTED] Press Reveal to view or edit +- +- +- +- Invalid Entry +- +- +- +- An external merge operation has invalidated this entry. +-Unfortunately, any changes made have been lost. +- +- +- +- +- EditEntryWidgetAdvanced +- +- Additional attributes +- الخصائص الإضاÙية +- +- +- Add +- إضاÙØ© +- +- +- Remove +- إزالة +- +- +- Edit Name +- تعديل الإسم +- +- +- Protect +- حماية +- +- +- Reveal +- إستكشا٠+- +- +- Attachments +- المرÙقات +- +- +- Foreground Color: +- لون المقدمة: +- +- +- Background Color: +- لون الخلÙية: +- +- +- Attribute selection +- +- +- +- Attribute value +- +- +- +- Add a new attribute +- +- +- +- Remove selected attribute +- +- +- +- Edit attribute name +- +- +- +- Toggle attribute protection +- +- +- +- Show a protected attribute +- +- +- +- Foreground color selection +- +- +- +- Background color selection +- +- +- +- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> +- +- +- +- Exclude from database reports +- +- +- +- +- EditEntryWidgetAutoType +- +- Enable Auto-Type for this entry +- تÙعيل الطباعة التلقائية لهذا المدخل +- +- +- Window Associations +- مصادقات الناÙذة +- +- +- + +- + +- +- +- - +- - +- +- +- Window title: +- عنوان الناÙذة: +- +- +- Use a specific sequence for this association: +- إستخدم تسلسل محدد لهذا الإرتباط: +- +- +- Custom Auto-Type sequence +- +- +- +- Open Auto-Type help webpage +- +- +- +- Existing window associations +- +- +- +- Add new window association +- +- +- +- Remove selected window association +- +- +- +- You can use an asterisk (*) to match everything +- +- +- +- Set the window association title +- +- +- +- You can use an asterisk to match everything +- +- +- +- Custom Auto-Type sequence for this window +- +- +- +- Inherit default Auto-Type sequence from the group +- +- +- +- Use custom Auto-Type sequence: +- +- +- +- +- EditEntryWidgetBrowser +- +- These settings affect to the entry's behaviour with the browser extension. +- +- +- +- General +- العام +- +- +- Skip Auto-Submit for this entry +- +- +- +- Hide this entry from the browser extension +- +- +- +- Additional URL's +- +- +- +- Add +- إضاÙØ© +- +- +- Remove +- إزالة +- +- +- Edit +- +- +- +- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. +- +- +- +- Use this entry only with HTTP Basic Auth +- +- +- +- +- EditEntryWidgetHistory +- +- Show +- إظهار +- +- +- Restore +- إستعادة +- +- +- Delete +- حذ٠+- +- +- Delete all +- حذ٠الكل +- +- +- Entry history selection +- +- +- +- Show entry at selected history state +- +- +- +- Restore entry to selected history state +- +- +- +- Delete selected history state +- +- +- +- Delete all history +- +- +- +- +- EditEntryWidgetMain +- +- URL: +- رابط: +- +- +- Password: +- كلمه السر: +- +- +- Title: +- العنوان: +- +- +- Presets +- المسبقة +- +- +- Toggle the checkbox to reveal the notes section. +- إختر مربع الإختيار لإستكشا٠قسم الملاحظات. +- +- +- Username: +- اسم المستخدم: +- +- +- Url field +- +- +- +- Download favicon for URL +- +- +- +- Password field +- +- +- +- Toggle notes visible +- +- +- +- Expiration field +- +- +- +- Expiration Presets +- +- +- +- Expiration presets +- +- +- +- Notes field +- +- +- +- Title field +- +- +- +- Username field +- +- +- +- Toggle expiration +- +- +- +- Notes: +- ملاحظات: +- +- +- https://example.com +- +- +- +- Expires: +- +- +- +- Edit Entry +- +- +- +- +- EditEntryWidgetSSHAgent +- +- Form +- النموذج +- +- +- Remove key from agent after +- حذ٠المÙتاح من الوكيل عند +- +- +- seconds +- ثواني +- +- +- Fingerprint +- البصمة +- +- +- Remove key from agent when database is closed/locked +- امسح المÙتاح من العميل عندما يتم Ù‚ÙÙ„ أو إغلاق قاعدة البيانات. +- +- +- Public key +- المÙتاح العام +- +- +- Add key to agent when database is opened/unlocked +- أض٠مÙتاح للعميل عندما يتم Ùتح قاعدة البيانات أو إلغاء القÙÙ„ +- +- +- Comment +- تعليق +- +- +- Decrypt +- ÙÙƒ التعمية +- +- +- n/a +- n/a +- +- +- Copy to clipboard +- نسخ إلى الحاÙظة +- +- +- Private key +- المÙتاح السري +- +- +- External file +- مل٠خارجي +- +- +- Browse... +- Button for opening file dialog +- إستعراض... +- +- +- Attachment +- إرÙاق +- +- +- Add to agent +- إضاÙØ© إلى الوكيل +- +- +- Remove from agent +- حذ٠من الوكيل +- +- +- Require user confirmation when this key is used +- يتطلب تأكيد المستخدم عندما يتم إستخدام هذا المÙتاح +- +- +- Remove key from agent after specified seconds +- +- +- +- Browser for key file +- +- +- +- External key file +- +- +- +- Select attachment file +- +- +- +- +- EditGroupWidget +- +- Group +- المجموعة +- +- +- Icon +- أيقونة +- +- +- Properties +- خصائص +- +- +- Add group +- إضاÙØ© مجموعة +- +- +- Edit group +- تعديل مجموعة +- +- +- Enable +- تÙعيل +- +- +- Disable +- تعطيل +- +- +- Inherit from parent group (%1) +- ورث من المجموعة الرئيسية (%1) +- +- +- Entry has unsaved changes +- +- +- +- +- EditGroupWidgetKeeShare +- +- Type: +- +- +- +- Path: +- +- +- +- Password: +- كلمه السر: +- +- +- Inactive +- +- +- +- KeeShare unsigned container +- +- +- +- KeeShare signed container +- +- +- +- Select import source +- +- +- +- Select export target +- +- +- +- Select import/export file +- +- +- +- Clear +- مسح +- +- +- Import +- إستيراد +- +- +- Export +- +- +- +- Synchronize +- +- +- +- Your KeePassXC version does not support sharing this container type. +-Supported extensions are: %1. +- +- +- +- %1 is already being exported by this database. +- +- +- +- %1 is already being imported by this database. +- +- +- +- %1 is being imported and exported by different groups in this database. +- +- +- +- KeeShare is currently disabled. You can enable import/export in the application settings. +- KeeShare is a proper noun +- +- +- +- Database export is currently disabled by application settings. +- +- +- +- Database import is currently disabled by application settings. +- +- +- +- Sharing mode field +- +- +- +- Path to share file field +- +- +- +- Password field +- +- +- +- Clear fields +- +- +- +- Browse for share file +- +- +- +- Browse... +- إستعراض... +- +- +- +- EditGroupWidgetMain +- +- Name field +- +- +- +- Notes field +- +- +- +- Toggle expiration +- +- +- +- Auto-Type toggle for this and sub groups +- +- +- +- Expiration field +- +- +- +- Search toggle for this and sub groups +- +- +- +- Default auto-type sequence field +- +- +- +- Expires: +- +- +- +- Use default Auto-Type sequence of parent group +- +- +- +- Auto-Type: +- +- +- +- Search: +- +- +- +- Notes: +- ملاحظات: +- +- +- Name: +- +- +- +- Set default Auto-Type sequence +- +- +- +- Edit Group +- +- +- +- +- EditWidgetIcons +- +- Add custom icon +- أض٠أيقونة مخصصة +- +- +- Delete custom icon +- احذ٠أيقونة مخصصة +- +- +- Download favicon +- تحميل رمز المÙضلة +- +- +- Unable to fetch favicon. +- تعذر جلب رمز المÙضلة. +- +- +- Images +- الصور +- +- +- All files +- كل الملÙات +- +- +- Confirm Delete +- تأكيد الحذ٠+- +- +- Select Image(s) +- +- +- +- Successfully loaded %1 of %n icon(s) +- +- +- +- No icons were loaded +- +- +- +- %n icon(s) already exist in the database +- +- +- +- The following icon(s) failed: +- +- +- +- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? +- +- +- +- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security +- +- +- +- Download favicon for URL +- +- +- +- Apply selected icon to subgroups and entries +- +- +- +- Also apply to child groups +- +- +- +- Also apply to child entries +- +- +- +- Also apply to all children +- +- +- +- Existing icon selected. +- +- +- +- Use default icon +- +- +- +- Use custom icon +- +- +- +- Apply icon to... +- +- +- +- Apply to this group only +- +- +- +- +- EditWidgetProperties +- +- Created: +- إنشاء: +- +- +- Modified: +- تعديل: +- +- +- Accessed: +- الوصول: +- +- +- Uuid: +- المعر٠الÙريد: +- +- +- Plugin Data +- بيانات الإضاÙØ© +- +- +- Remove +- إزالة +- +- +- Delete plugin data? +- حذ٠بيانات الإضاÙة؟ +- +- +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- هل تريد حقًا حذ٠بيانات الإضاÙØ© المحددة؟ +-قد يؤدي إلى حدوث خلل ÙÙŠ الإضاÙات المتأثرة. +- +- +- Key +- المÙتاح +- +- +- Value +- القيمة +- +- +- Datetime created +- +- +- +- Datetime modified +- +- +- +- Datetime accessed +- +- +- +- Unique ID +- +- +- +- Plugin data +- +- +- +- Remove selected plugin data +- +- +- +- +- Entry +- +- %1 - Clone +- +- +- +- +- EntryAttachmentsModel +- +- Name +- الاسم +- +- +- Size +- الحجم +- +- +- +- EntryAttachmentsWidget +- +- Form +- النموذج +- +- +- Add +- إضاÙØ© +- +- +- Remove +- إزالة +- +- +- Open +- اÙتح +- +- +- Save +- احÙظ +- +- +- Select files +- اختر الملÙات +- +- +- Are you sure you want to remove %n attachment(s)? +- هل أنت متأكد من حذ٠%n مرÙق؟هل أنت متأكد من حذ٠%n مرÙق؟هل أنت متأكد من حذ٠%n مرÙق؟هل أنت متأكد من حذ٠%n مرÙقات؟هل أنت متأكد من حذ٠%n مرÙق؟هل أنت متأكد من حذ٠%n مرÙقات؟ +- +- +- Save attachments +- Ø­Ùظ المرÙقات +- +- +- Unable to create directory: +-%1 +- غير قادر على إنشاء مجلد: +-%1 +- +- +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- هل أنت متاكد من إستبدال المل٠الحالي "%1" بالمرÙق؟ +- +- +- Confirm overwrite +- تأكيد الإستبدال +- +- +- Unable to save attachments: +-%1 +- تعذر Ø­Ùظ المرÙقات: +-%1 +- +- +- Unable to open attachment: +-%1 +- تعذر Ùتح المرÙÙ‚: +-%1 +- +- +- Unable to open attachments: +-%1 +- تعذر Ùتح المرÙقات: +-%1 +- +- +- Confirm remove +- +- +- +- Unable to open file(s): +-%1 +- +- +- +- Attachments +- المرÙقات +- +- +- Add new attachment +- +- +- +- Remove selected attachment +- +- +- +- Open selected attachment +- +- +- +- Save selected attachment to disk +- +- +- +- %1 is a big file (%2 MB). +-Your database may get very large and reduce performance. +- +-Are you sure to add this file? +- +- +- +- Confirm Attachment +- +- +- +- +- EntryAttributesModel +- +- Name +- الاسم +- +- +- +- EntryHistoryModel +- +- Last modified +- آخر تعديل +- +- +- Title +- العنوان +- +- +- Username +- اسم المستخدم +- +- +- URL +- رابط +- +- +- +- EntryModel +- +- Ref: +- Reference abbreviation +- المرجع: +- +- +- Group +- المجموعة +- +- +- Title +- العنوان +- +- +- Username +- اسم المستخدم +- +- +- URL +- رابط +- +- +- Never +- أبدًا +- +- +- Password +- كلمه السر +- +- +- Notes +- ملاحظات +- +- +- Expires +- انتهاء +- +- +- Created +- Ø£Ùنشئت +- +- +- Modified +- التعديل +- +- +- Accessed +- الوصول +- +- +- Attachments +- المرÙقات +- +- +- Size +- الحجم +- +- +- Group name +- +- +- +- Entry title +- +- +- +- Entry notes +- +- +- +- Entry expires at +- +- +- +- Creation date +- +- +- +- Last modification date +- +- +- +- Last access date +- +- +- +- Attached files +- +- +- +- Entry size +- +- +- +- Has attachments +- +- +- +- Has TOTP one-time password +- +- +- +- +- EntryPreviewWidget +- +- Close +- إغلاق +- +- +- General +- العام +- +- +- Username +- اسم المستخدم +- +- +- Password +- كلمه السر +- +- +- Expiration +- الإنتهاء +- +- +- URL +- رابط +- +- +- Attributes +- الخصائص +- +- +- Attachments +- المرÙقات +- +- +- Notes +- ملاحظات +- +- +- Autotype +- Auto-Type +- +- +- Window +- الناÙذة +- +- +- Sequence +- التسلسل +- +- +- Searching +- جاري البحث +- +- +- Search +- بحث +- +- +- Clear +- مسح +- +- +- Never +- أبدًا +- +- +- [PROTECTED] +- [محمي] +- +- +- Enabled +- Ù…ÙÙعل +- +- +- Disabled +- Ù…Ùعطل +- +- +- Share +- +- +- +- Display current TOTP value +- +- +- +- Advanced +- متقدم +- +- +- Default Sequence +- +- +- +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- attributes line +- +- +- +- +- EntryURLModel +- +- Invalid URL +- +- +- +- +- EntryView +- +- Fit to window +- ﻻئم الناÙذة +- +- +- Fit to contents +- ﻻئم المحتوى +- +- +- Reset to defaults +- إعادة التعيين إلى الإعدادات الاÙتراضية +- +- +- Has attachments +- Entry attachment icon toggle +- +- +- +- Has TOTP +- Entry TOTP icon toggle +- +- +- +- +- FdoSecrets::Item +- +- Entry "%1" from database "%2" was used by %3 +- +- +- +- +- FdoSecrets::Service +- +- Failed to register DBus service at %1.<br/> +- +- +- +- %n Entry(s) was used by %1 +- %1 is the name of an application +- +- +- +- +- FdoSecrets::SettingsDatabaseModel +- +- File Name +- +- +- +- Group +- المجموعة +- +- +- Manage +- +- +- +- Unlock to show +- +- +- +- None +- +- +- +- +- FdoSecrets::SettingsSessionModel +- +- Application +- +- +- +- Manage +- +- +- +- +- FdoSecretsPlugin +- +- <b>Fdo Secret Service:</b> %1 +- +- +- +- Unknown +- Unknown PID +- +- +- +- Unknown +- Unknown executable path +- +- +- +- <i>PID: %1, Executable: %2</i> +- <i>PID: 1234, Executable: /path/to/exe</i> +- +- +- +- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. +- +- +- +- +- Group +- +- [empty] +- group has no children +- +- +- +- +- HibpDownloader +- +- Online password validation failed +- +- +- +- +- IconDownloaderDialog +- +- Download Favicons +- +- +- +- Cancel +- ألغاء +- +- +- Having trouble downloading icons? +-You can enable the DuckDuckGo website icon service in the security section of the application settings. +- +- +- +- Close +- إغلاق +- +- +- URL +- رابط +- +- +- Status +- +- +- +- Please wait, processing entry list... +- +- +- +- Downloading... +- +- +- +- Ok +- تمام +- +- +- Already Exists +- +- +- +- Download Failed +- +- +- +- Downloading favicons (%1/%2)... +- +- +- +- +- KMessageWidget +- +- &Close +- &إغلاق +- +- +- Close message +- إغلاق الرسالة +- +- +- +- Kdbx3Reader +- +- missing database headers +- رؤوس قاعدة البيانات Ù…Ùقودة +- +- +- Header doesn't match hash +- +- +- +- Invalid header id size +- حجم معر٠الرأس غير صحيح +- +- +- Invalid header field length +- رأس حقل الطول غير صحيح +- +- +- Invalid header data length +- طول بيانات الرأس غير صحيح +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- +- +- +- Unable to calculate database key +- +- +- +- Unable to issue challenge-response: %1 +- +- +- +- +- Kdbx3Writer +- +- Unable to issue challenge-response: %1 +- +- +- +- Unable to calculate database key +- +- +- +- +- Kdbx4Reader +- +- missing database headers +- رؤوس قاعدة البيانات Ù…Ùقودة +- +- +- Invalid header checksum size +- حجم رأس تدقيق المجموع غير صحيح +- +- +- Header SHA256 mismatch +- رأس SHA256 غير متطابق +- +- +- Unknown cipher +- تشÙير غير معرو٠+- +- +- Invalid header id size +- حجم معر٠الرأس غير صحيح +- +- +- Invalid header field length +- رأس حقل الطول غير صحيح +- +- +- Invalid header data length +- طول بيانات الرأس غير صحيح +- +- +- Failed to open buffer for KDF parameters in header +- أخÙÙ‚ Ùتح مخزن بيانات مؤقت لمعطيات KDF ÙÙŠ الرأس +- +- +- Unsupported key derivation function (KDF) or invalid parameters +- وظيÙØ© إشتقاق المÙاتيح غير مدعومة (KDF) أو المعطيات غير صحيحة +- +- +- Legacy header fields found in KDBX4 file. +- عÙثر على حقول رأس قديمة ÙÙŠ مل٠KDBX4. +- +- +- Invalid inner header id size +- حجم معر٠الرأس الداخلي غير صحيح +- +- +- Invalid inner header field length +- رأس حقل الطول الداخلي غير صحيح +- +- +- Invalid inner header binary size +- حجم ثنائي الرأس الداخلي غير صحيح +- +- +- Unsupported KeePass variant map version. +- Translation: variant map = data structure for storing meta data +- نسخة خريطة KeePass المتنوعة غير مدعومة. +- +- +- Invalid variant map entry name length +- Translation: variant map = data structure for storing meta data +- طول ادخال الاسم للخريطة المتنوعة غير صحيح +- +- +- Invalid variant map entry name data +- Translation: variant map = data structure for storing meta data +- بيانات ادخال الاسم الخريطة المتنوعة غير صحيحة +- +- +- Invalid variant map entry value length +- Translation: variant map = data structure for storing meta data +- طول قيمة إدخال الخريطة المتنوعة غير صحيح +- +- +- Invalid variant map entry value data +- Translation comment: variant map = data structure for storing meta data +- بيانات قيمة إدخال الخريطة المتنوعة غير صحيحة +- +- +- Invalid variant map Bool entry value length +- Translation: variant map = data structure for storing meta data +- طول قيمة إدخال Bool للخريطة المتنوعة غير صحيح +- +- +- Invalid variant map Int32 entry value length +- Translation: variant map = data structure for storing meta data +- طول قيمة إدخال Int32 للخريطة المتنوعة غير صحيح +- +- +- Invalid variant map UInt32 entry value length +- Translation: variant map = data structure for storing meta data +- طول قيمة إدخال UInt32 للخريطة المتنوعة غير صحيح +- +- +- Invalid variant map Int64 entry value length +- Translation: variant map = data structure for storing meta data +- طول قيمة إدخال Int64 للخريطة المتنوعة غير صحيح +- +- +- Invalid variant map UInt64 entry value length +- Translation: variant map = data structure for storing meta data +- طول قيمة إدخال UInt64 للخريطة المتنوعة غير صحيح +- +- +- Invalid variant map entry type +- Translation: variant map = data structure for storing meta data +- إدخال نوع الخريطة المتنوعة غير صحيح +- +- +- Invalid variant map field type size +- Translation: variant map = data structure for storing meta data +- حقل حجم النوع للخريطة المتنوعة غير صحيح +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- +- +- +- (HMAC mismatch) +- +- +- +- Unable to calculate database key: %1 +- +- +- +- +- Kdbx4Writer +- +- Invalid symmetric cipher algorithm. +- خورزامية تشÙير بالمÙتاح المتناظر غير صحيحة +- +- +- Invalid symmetric cipher IV size. +- IV = Initialization Vector for symmetric cipher +- خطأ ÙÙŠ الحجم الرابع بخورزامية تشÙير بالمÙتاح المتناظر +- +- +- Failed to serialize KDF parameters variant map +- Translation comment: variant map = data structure for storing meta data +- أخÙÙ‚ تسلسل معطيات KDF للخريطة المتنوعة +- +- +- Unable to calculate database key: %1 +- +- +- +- +- KdbxReader +- +- Unsupported cipher +- تشÙير غير مدعوم +- +- +- Invalid compression flags length +- طول علامات الضغط غير صحيح +- +- +- Unsupported compression algorithm +- خورزامية الضغط غير مدعومة +- +- +- Invalid master seed size +- حجم seed الرئيسي غير صحيح +- +- +- Invalid transform seed size +- حجم seed للتحول غير صحيح +- +- +- Invalid transform rounds size +- حجم جولات التحول غير صحيح +- +- +- Invalid start bytes size +- حجم بتات البداية غير صحيح +- +- +- Invalid random stream id size +- حجم معر٠random stream غير صحيح +- +- +- Invalid inner random stream cipher +- خطأ داخلي بخورزامية random stream +- +- +- Not a KeePass database. +- ليس قاعدة بيانات KeePass +- +- +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- المل٠المحدد هو قاعدة بيانات KeePass 1 القديمة (.kdb). +- +-يمكنك إستيراده عن طريق النقر على قاعدة البيانات > 'إستيراد قاعدة بيانات KeePass 1...'. +-هذه الطريقة الوحيدة للترحيل. لن تتمكن من Ùتح قاعدة البيانات المستوردة من القديم ÙÙŠ إصدار KeePassXC 0.4. +- +- +- Unsupported KeePass 2 database version. +- إصدار قاعدة بيانات 2 KeePass غير مدعوم. +- +- +- Invalid cipher uuid length: %1 (length=%2) +- +- +- +- Unable to parse UUID: %1 +- +- +- +- Failed to read database file. +- +- +- +- +- KdbxXmlReader +- +- XML parsing failure: %1 +- Ùشل تحليل XML: %1 +- +- +- No root group +- لا يوجد مجموعة رئيسية +- +- +- Missing icon uuid or data +- uuid او بيانات الرمز Ù…Ùقودة +- +- +- Missing custom data key or value +- Ù…Ùتاح البيانات المخصص او قيمته Ù…Ùقودة +- +- +- Multiple group elements +- عناصر المجموعة المتعددة +- +- +- Null group uuid +- uuid المجموعة غير معرو٠+- +- +- Invalid group icon number +- رقم رمز المجموعة غير صحيح +- +- +- Invalid EnableAutoType value +- قيمة EnableAutoType غير صحيحة +- +- +- Invalid EnableSearching value +- قيمة EnableSearching غير صحيحة +- +- +- No group uuid found +- لم ÙŠÙعثر على Ù…Ùعر٠المجموعة الÙريد +- +- +- Null DeleteObject uuid +- Null DeleteObject uuid +- +- +- Missing DeletedObject uuid or time +- uuid او وقت DeletedObject Ù…Ùقود +- +- +- Null entry uuid +- uuid الإدخال غير معرو٠+- +- +- Invalid entry icon number +- رقم الرمز المÙدخل غير صحيح +- +- +- History element in history entry +- سجل العنصر ÙÙŠ سجل الإدخال +- +- +- No entry uuid found +- لم ÙŠÙعثر على Ù…Ùعر٠المÙدخل الÙريد +- +- +- History element with different uuid +- أرÙØ® العنصر مسخدمًا معر٠Ùريد مختل٠+- +- +- Duplicate custom attribute found +- عÙثر على خاصية مخصصة مكررة +- +- +- Entry string key or value missing +- Ù…Ùتاح سلسلة الإدخال أو القيمة Ù…Ùقودة +- +- +- Entry binary key or value missing +- Ù…Ùدخل المÙتاح الثنائي او القيمة Ù…Ùقودة +- +- +- Auto-type association window or sequence missing +- ناÙذة الطباعة التلقائية المرتبطة او تسلسل الإرتباط Ù…Ùقود +- +- +- Invalid bool value +- Ù…Ùدخل القيمة المنطقية غير صحيح +- +- +- Invalid date time value +- قيمة وقت التاريخ غير صحيحة +- +- +- Invalid color value +- قيمة اللون غير صحيحة +- +- +- Invalid color rgb part +- جزء من لون rgb غير صحيح +- +- +- Invalid number value +- قيمة الرقم غير صحيحة +- +- +- Invalid uuid value +- قيمة المÙعر٠الÙريد غير صحيحة +- +- +- Unable to decompress binary +- Translator meant is a binary data inside an entry +- تعذر ÙÙƒ ضغط القيمة الثنائية +- +- +- XML error: +-%1 +-Line %2, column %3 +- +- +- +- +- KeeAgentSettings +- +- Invalid KeeAgent settings file structure. +- +- +- +- Private key is an attachment but no attachments provided. +- +- +- +- Private key is empty +- +- +- +- File too large to be a private key +- مل٠كبير جدًا ليكون Ù…Ùتاح سري +- +- +- Failed to open private key +- تعذر Ùتح المÙتاح السري +- +- +- +- KeePass1OpenWidget +- +- Unable to open the database. +- Ùتح قاعدة البيانات غير ممكن. +- +- +- Import KeePass1 Database +- +- +- +- +- KeePass1Reader +- +- Unable to read keyfile. +- يتعذر قراءة مل٠المÙتاح. +- +- +- Not a KeePass database. +- ليس قاعدة بيانات KeePass +- +- +- Unsupported encryption algorithm. +- خورزامية التشÙير غير مدعومة. +- +- +- Unsupported KeePass database version. +- إصدار قاعدة بيانات KeePass غير مدعوم. +- +- +- Unable to read encryption IV +- IV = Initialization Vector for symmetric cipher +- غير قادر على قراءة قيمة التشÙير الرابع +- +- +- Invalid number of groups +- عدد غير صالح من المجموعات +- +- +- Invalid number of entries +- عدد الإدخالات غير صالح +- +- +- Invalid content hash size +- حجم محتوى الهاش غير صحيح +- +- +- Invalid transform seed size +- حجم seed للتحول غير صحيح +- +- +- Invalid number of transform rounds +- عدد جولات التحول غير صحيح +- +- +- Unable to construct group tree +- تعذر إنشاء شجرة المجموعة +- +- +- Root +- الجذر +- +- +- Key transformation failed +- تعذر تحويل المÙتاح +- +- +- Invalid group field type number +- حقل رقم نوع المجموعة غير صحيح +- +- +- Invalid group field size +- حقل حجم المجموعة غير صحيح +- +- +- Read group field data doesn't match size +- قراءة بيانات الحقل للمجموعة لا تتطابق مع الحجم +- +- +- Incorrect group id field size +- حجم حقل معر٠المجموعة غير صحيح +- +- +- Incorrect group creation time field size +- حجم حقل وقت إنشاء المجموعة غير صحيح +- +- +- Incorrect group modification time field size +- حجم حقل وقت تعديل المجموعة غير صحيح +- +- +- Incorrect group access time field size +- حجم حقل وقت الوصول للمجموعة غير صحيح +- +- +- Incorrect group expiry time field size +- حجم حقل وقت انتهاء صلاحية المجموعة غير صحيح +- +- +- Incorrect group icon field size +- حجم حقل رمز المجموعة غير صحيح +- +- +- Incorrect group level field size +- حجم حقل مستوى المجموعة غير صحيح +- +- +- Invalid group field type +- نوع حقل المجموعة غير صحيح +- +- +- Missing group id or level +- معر٠المجموعة أو المستوى Ù…Ùقود +- +- +- Missing entry field type number +- رقم نوع حقل إلمÙدخل Ù…Ùقود +- +- +- Invalid entry field size +- إدخال حقل الحجم غير صحيح +- +- +- Read entry field data doesn't match size +- قراءة بيانات الحقل الإدخال لا تتطابق مع الحجم +- +- +- Invalid entry uuid field size +- حجم حقل المÙدخل uuid غير صحيح +- +- +- Invalid entry group id field size +- إدخال حجم حقل معر٠مجموعة غير صحيح +- +- +- Invalid entry icon field size +- حجم حقل رمز الإدخال غير صحيح +- +- +- Invalid entry creation time field size +- حجم حقل وقت إنشاء الإدخال غير صحيح +- +- +- Invalid entry modification time field size +- حجم حقل وقت تعديل الإدخال غير صحيح +- +- +- Invalid entry expiry time field size +- حجم حقل وقت انتهاء صلاحية الإدخال غير صحيح +- +- +- Invalid entry field type +- نوع حقل الإدخال غير صحيح +- +- +- unable to seek to content position +- +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- +- +- +- Unable to calculate database key +- +- +- +- +- KeeShare +- +- Invalid sharing reference +- +- +- +- Inactive share %1 +- +- +- +- Imported from %1 +- +- +- +- Exported to %1 +- +- +- +- Synchronized with %1 +- +- +- +- Import is disabled in settings +- +- +- +- Export is disabled in settings +- +- +- +- Inactive share +- +- +- +- Imported from +- +- +- +- Exported to +- +- +- +- Synchronized with +- +- +- +- +- KeyComponentWidget +- +- Key Component +- +- +- +- Key Component Description +- +- +- +- Cancel +- ألغ +- +- +- Key Component set, click to change or remove +- +- +- +- Add %1 +- Add a key component +- +- +- +- Change %1 +- Change a key component +- +- +- +- Remove %1 +- Remove a key component +- +- +- +- %1 set, click to change or remove +- Change or remove a key component +- +- +- +- +- KeyFileEditWidget +- +- Generate +- توليد +- +- +- Key File +- +- +- +- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> +- +- +- +- Error loading the key file '%1' +-Message: %2 +- +- +- +- Key files +- ملÙات المÙتاح +- +- +- All files +- كل الملÙات +- +- +- Create Key File... +- إنشاء مل٠مÙتاح... +- +- +- Error creating key file +- +- +- +- Unable to create key file: %1 +- +- +- +- Select a key file +- حدد مل٠المÙتاح +- +- +- Key file selection +- +- +- +- Browse for key file +- +- +- +- Browse... +- إستعراض... +- +- +- Generate a new key file +- +- +- +- Note: Do not use a file that may change as that will prevent you from unlocking your database! +- +- +- +- Invalid Key File +- +- +- +- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. +- +- +- +- Suspicious Key File +- +- +- +- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. +-Are you sure you want to continue with this file? +- +- +- +- Old key file format +- +- +- +- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. +- +- +- +- +- MainWindow +- +- &Database +- &قاعدة البيانات +- +- +- &Help +- &مساعدة +- +- +- &Groups +- &المجموعات +- +- +- &Tools +- &الأدوات +- +- +- &Quit +- &إغلاق +- +- +- &About +- &حول +- +- +- Database settings +- إعدادات قاعدة البيانات +- +- +- Copy username to clipboard +- نسخ اسم المستخدم إلى الحاÙظة +- +- +- Copy password to clipboard +- نسخ كلمة المرور إلى الحاÙظة +- +- +- &Settings +- &الإعدادات +- +- +- &Title +- &العنوان +- +- +- Copy title to clipboard +- نسخ العنوان إلى الحاÙظة +- +- +- &URL +- &رابط +- +- +- Copy URL to clipboard +- نسخ الرابط إلى الحاÙظة +- +- +- &Notes +- &الملاحظات +- +- +- Copy notes to clipboard +- نسخ الملاحظات إلى الحاÙظة +- +- +- Copy &TOTP +- نسخ &TOTP +- +- +- E&mpty recycle bin +- Ø¥Ùراغ سلة المهملات +- +- +- Clear history +- مسح السجل +- +- +- Access error for config file %1 +- خطأ ÙÙŠ الوصول لمل٠التكوين %1 +- +- +- Settings +- الإعدادات +- +- +- Toggle window +- تبديل الناÙذة +- +- +- Quit KeePassXC +- إغلاق KeePassXC +- +- +- Please touch the button on your YubiKey! +- يرجى لمس الزر المتواجد على YubiKey! +- +- +- WARNING: You are using an unstable build of KeePassXC! +-There is a high risk of corruption, maintain a backup of your databases. +-This version is not meant for production use. +- تحذير: أنت تستخدم بناء غير مستقر من KeePassXC! +-هناك خطر كبير للعطب، حاÙظ على أخذ نسخة إحتياطية لقاعدة البيانات. +-ليس المقصود من هذا الإصدار للإستخدام الأساسي. +- +- +- &Donate +- +- +- +- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +-We recommend you use the AppImage available on our downloads page. +- +- +- +- &Import +- +- +- +- Create a new database +- +- +- +- Merge from another KDBX database +- +- +- +- Add a new entry +- +- +- +- View or edit entry +- +- +- +- Add a new group +- +- +- +- Perform &Auto-Type +- +- +- +- Open &URL +- +- +- +- Import a KeePass 1 database +- +- +- +- Import a CSV file +- +- +- +- NOTE: You are using a pre-release version of KeePassXC! +-Expect some bugs and minor issues, this version is not meant for production use. +- +- +- +- Check for updates on startup? +- +- +- +- Would you like KeePassXC to check for updates on startup? +- +- +- +- You can always check for updates manually from the application menu. +- +- +- +- &Export +- +- +- +- Sort &A-Z +- +- +- +- Sort &Z-A +- +- +- +- &Password Generator +- +- +- +- Import a 1Password Vault +- +- +- +- &Getting Started +- +- +- +- &User Guide +- +- +- +- &Keyboard Shortcuts +- +- +- +- &Recent Databases +- +- +- +- &Entries +- +- +- +- Copy Att&ribute +- +- +- +- TOTP +- +- +- +- View +- +- +- +- Theme +- +- +- +- &Check for Updates +- +- +- +- &Open Database… +- +- +- +- &Save Database +- +- +- +- &Close Database +- +- +- +- &New Database… +- +- +- +- &Merge From Database… +- +- +- +- &New Entry… +- +- +- +- &Edit Entry… +- +- +- +- &Delete Entry… +- +- +- +- &New Group… +- +- +- +- &Edit Group… +- +- +- +- &Delete Group… +- +- +- +- Download All &Favicons… +- +- +- +- Sa&ve Database As… +- +- +- +- Database &Security… +- +- +- +- Database &Reports... +- +- +- +- Statistics, health check, etc. +- +- +- +- &Database Settings… +- +- +- +- &Clone Entry… +- +- +- +- Move u&p +- +- +- +- Move entry one step up +- +- +- +- Move do&wn +- +- +- +- Move entry one step down +- +- +- +- Copy &Username +- +- +- +- Copy &Password +- +- +- +- Download &Favicon +- +- +- +- &Lock Databases +- +- +- +- &CSV File… +- +- +- +- &HTML File… +- +- +- +- KeePass 1 Database… +- +- +- +- 1Password Vault… +- +- +- +- CSV File… +- +- +- +- Show TOTP +- إظهار TOTP +- +- +- Show QR Code +- +- +- +- Set up TOTP… +- +- +- +- Report a &Bug +- +- +- +- Open Getting Started Guide +- +- +- +- &Online Help +- +- +- +- Go to online documentation +- +- +- +- Open User Guide +- +- +- +- Save Database Backup... +- +- +- +- Add key to SSH Agent +- +- +- +- Remove key from SSH Agent +- +- +- +- Compact Mode +- +- +- +- Automatic +- +- +- +- Light +- +- +- +- Dark +- +- +- +- Classic (Platform-native) +- +- +- +- Show Toolbar +- +- +- +- Show Preview Panel +- +- +- +- Don't show again for this version +- +- +- +- Restart Application? +- +- +- +- You must restart the application to apply this setting. Would you like to restart now? +- +- +- +- Perform Auto-Type Sequence +- +- +- +- {USERNAME} +- +- +- +- {USERNAME}{ENTER} +- +- +- +- {PASSWORD} +- +- +- +- {PASSWORD}{ENTER} +- +- +- +- Always on Top +- +- +- +- Hide Usernames +- اخÙÙŠ أسماء المستخدمين +- +- +- Hide Passwords +- اخÙÙŠ كلمات السر +- +- +- +- ManageDatabase +- +- Database settings +- إعدادات قاعدة البيانات +- +- +- Edit database settings +- +- +- +- Unlock database +- إلغاء Ù‚ÙÙ„ قاعدة البيانات +- +- +- Unlock database to show more information +- +- +- +- Lock database +- Ù‚ÙÙ„ قاعدة بيانات +- +- +- +- ManageSession +- +- Disconnect +- +- +- +- Disconnect this application +- +- +- +- +- Merger +- +- Creating missing %1 [%2] +- +- +- +- Relocating %1 [%2] +- +- +- +- Overwriting %1 [%2] +- +- +- +- older entry merged from database "%1" +- +- +- +- Adding backup for older target %1 [%2] +- +- +- +- Adding backup for older source %1 [%2] +- +- +- +- Reapplying older target entry on top of newer source %1 [%2] +- +- +- +- Reapplying older source entry on top of newer target %1 [%2] +- +- +- +- Synchronizing from newer source %1 [%2] +- +- +- +- Synchronizing from older source %1 [%2] +- +- +- +- Deleting child %1 [%2] +- +- +- +- Deleting orphan %1 [%2] +- +- +- +- Changed deleted objects +- +- +- +- Adding missing icon %1 +- +- +- +- Removed custom data %1 [%2] +- +- +- +- Adding custom data %1 [%2] +- +- +- +- +- NewDatabaseWizard +- +- Create a new KeePassXC database... +- +- +- +- Root +- Root group +- الجذر +- +- +- +- NewDatabaseWizardPage +- +- WizardPage +- +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- +- +- +- Advanced Settings +- +- +- +- Simple Settings +- +- +- +- Encryption Settings +- +- +- +- +- NewDatabaseWizardPageDatabaseKey +- +- Database Credentials +- +- +- +- A set of credentials known only to you that protects your database. +- +- +- +- +- NewDatabaseWizardPageEncryption +- +- Encryption Settings +- +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- +- +- +- +- NewDatabaseWizardPageMetaData +- +- General Database Information +- +- +- +- Please fill in the display name and an optional description for your new database: +- +- +- +- +- NixUtils +- +- Password Manager +- +- +- +- +- OpData01 +- +- Invalid OpData01, does not contain header +- +- +- +- Unable to read all IV bytes, wanted 16 but got %1 +- +- +- +- Unable to init cipher for opdata01: %1 +- +- +- +- Unable to read all HMAC signature bytes +- +- +- +- Malformed OpData01 due to a failed HMAC +- +- +- +- Unable to process clearText in place +- +- +- +- Expected %1 bytes of clear-text, found %2 +- +- +- +- +- OpVaultOpenWidget +- +- Read Database did not produce an instance +-%1 +- +- +- +- +- OpVaultReader +- +- Directory .opvault must exist +- +- +- +- Directory .opvault must be readable +- +- +- +- Directory .opvault/default must exist +- +- +- +- Directory .opvault/default must be readable +- +- +- +- Unable to decode masterKey: %1 +- +- +- +- Unable to derive master key: %1 +- +- +- +- +- OpenSSHKey +- +- Invalid key file, expecting an OpenSSH key +- مل٠المÙتاح غير صحيح، متوقع أنه Ù…Ùتاح OpenSSH +- +- +- PEM boundary mismatch +- عدم تطابق حدود PEM +- +- +- Base64 decoding failed +- تعذر ÙÙƒ تشÙير Base64 +- +- +- Key file way too small. +- طريق مل٠المÙتاح صغير جدًا. +- +- +- Key file magic header id invalid +- معر٠رأس magic لمل٠المÙتاح غير صحيح +- +- +- Found zero keys +- لم ÙŠÙعثر على أية Ù…Ùاتيح +- +- +- Failed to read public key. +- تعذر قراءة المÙتاح العام. +- +- +- Corrupted key file, reading private key failed +- مل٠المÙتاح معطوب، Ùشل قراءة المÙتاح الخاص. +- +- +- No private key payload to decrypt +- لا يوجد حمولة المÙتاح الخاص Ù„ÙÙƒ التشÙير +- +- +- Trying to run KDF without cipher +- محاولة تشغيل KDF بدون تشÙير +- +- +- Passphrase is required to decrypt this key +- عبارة المرور مطلوبة Ù„ÙÙƒ تشÙير المÙتاح +- +- +- Key derivation failed, key file corrupted? +- Ùشل إشتقاق المÙتاح، ربما مل٠المÙتاح معطوب؟ +- +- +- Decryption failed, wrong passphrase? +- Ùشل ÙÙƒ التشÙير، ربما عبارة المرور خاطئة؟ +- +- +- Unexpected EOF while reading public key +- نهاية المل٠غير معروÙØ© عند قراءة المÙتاح العام +- +- +- Unexpected EOF while reading private key +- نهاية المل٠غير معروÙØ© عند قراءة المÙتاح الخاص +- +- +- Can't write public key as it is empty +- لا يمكن كتابة المÙتاح العام لأنه Ùارغ +- +- +- Unexpected EOF when writing public key +- نهاية المل٠غير معروÙØ© عند كتابة المÙتاح العام +- +- +- Can't write private key as it is empty +- لا يمكن كتابة المÙتاح الخاص لأنه Ùارغ +- +- +- Unexpected EOF when writing private key +- نهاية المل٠غير معروÙØ© عند قراءة المÙتاح الخاص +- +- +- Unsupported key type: %1 +- نوع Ù…Ùتاح غير مدعوم: %1 +- +- +- Unknown cipher: %1 +- تشÙير غير معروÙ: %1 +- +- +- Cipher IV is too short for MD5 kdf +- التشÙير الرابع قصير جدًا Ù„ MD5 kdf +- +- +- Unknown KDF: %1 +- KDF غير معروÙ: %1 +- +- +- Unknown key type: %1 +- نوع Ù…Ùتاح غير معروÙ: %1 +- +- +- +- PasswordEdit +- +- Passwords do not match +- +- +- +- Passwords match so far +- +- +- +- Toggle Password (%1) +- +- +- +- Generate Password (%1) +- +- +- +- Warning: Caps Lock enabled! +- +- +- +- +- PasswordEditWidget +- +- Enter password: +- أدخل كلمة السر: +- +- +- Confirm password: +- +- +- +- Password +- كلمه السر +- +- +- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> +- +- +- +- Passwords do not match. +- +- +- +- Password field +- +- +- +- Repeat password field +- +- +- +- +- PasswordGeneratorWidget +- +- %p% +- %p% +- +- +- strength +- Password strength +- القوة +- +- +- entropy +- entropy +- +- +- Password +- كلمه السر +- +- +- Character Types +- أنواع الرموز +- +- +- Numbers +- أرقام +- +- +- Extended ASCII +- تمديد ASCII +- +- +- Exclude look-alike characters +- استبعاد الرموز التي تبدو على حد سواء +- +- +- Pick characters from every group +- إختيار أحر٠من كل مجموعة +- +- +- &Length: +- &الطول: +- +- +- Passphrase +- عبارة سر +- +- +- Wordlist: +- قائمة الكلمات: +- +- +- Word Separator: +- Ùاصل الكلمة: +- +- +- Close +- إغلاق +- +- +- Entropy: %1 bit +- Entropy: %1 bit +- +- +- Password Quality: %1 +- جودة كلمة المرور: %1 +- +- +- Poor +- Password quality +- ضعي٠جدا +- +- +- Weak +- Password quality +- ضعيÙØ© +- +- +- Good +- Password quality +- جيدة +- +- +- Excellent +- Password quality +- ممتازة +- +- +- Switch to advanced mode +- +- +- +- Advanced +- متقدم +- +- +- Braces +- +- +- +- Punctuation +- +- +- +- Quotes +- +- +- +- Logograms +- +- +- +- Character set to exclude from generated password +- +- +- +- Do not include: +- +- +- +- Add non-hex letters to "do not include" list +- +- +- +- Hex +- +- +- +- Excluded characters: "0", "1", "l", "I", "O", "|", "ï¹’" +- +- +- +- Generated password +- +- +- +- Upper-case letters +- +- +- +- Lower-case letters +- +- +- +- Special characters +- +- +- +- Math Symbols +- +- +- +- Dashes and Slashes +- +- +- +- Excluded characters +- +- +- +- Hex Passwords +- +- +- +- Password length +- +- +- +- Word Case: +- +- +- +- Regenerate password +- +- +- +- Copy password +- +- +- +- lower case +- +- +- +- UPPER CASE +- +- +- +- Title Case +- +- +- +- Generate Password +- +- +- +- Also choose from: +- +- +- +- Additional characters to use for the generated password +- +- +- +- Additional characters +- +- +- +- Word Count: +- عدد الكلمات: +- +- +- Esc +- +- +- +- Apply Password +- +- +- +- Ctrl+S +- +- +- +- Regenerate password (%1) +- +- +- +- Special Characters +- محار٠خاصة +- +- +- +- QApplication +- +- KeeShare +- +- +- +- Statistics +- +- +- +- Very weak password +- +- +- +- Password entropy is %1 bits +- +- +- +- Weak password +- +- +- +- Used in %1/%2 +- +- +- +- Password is used %1 times +- +- +- +- Password has expired +- +- +- +- Password expiry was %1 +- +- +- +- Password is about to expire +- +- +- +- Password expires in %1 days +- +- +- +- Password will expire soon +- +- +- +- Password expires on %1 +- +- +- +- Health Check +- +- +- +- HIBP +- +- +- +- +- QMessageBox +- +- Overwrite +- +- +- +- Delete +- حذ٠+- +- +- Move +- +- +- +- Empty +- +- +- +- Remove +- إزالة +- +- +- Skip +- +- +- +- Disable +- تعطيل +- +- +- Merge +- +- +- +- Continue +- +- +- +- +- QObject +- +- Database not opened +- لم يتم Ùتح قاعدة البيانات +- +- +- Database hash not available +- لا يتوÙر هاش قاعدة البيانات +- +- +- Client public key not received +- لم يتم تلقي المÙتاح العام للعميل +- +- +- Cannot decrypt message +- لا يمكن ÙÙƒ تشÙير الرسالة +- +- +- Action cancelled or denied +- Ø£Ùلغي الإجراء أو رÙÙض +- +- +- KeePassXC association failed, try again +- تعذر إرتباط KeePassXCØŒ حاول مرة أخرى +- +- +- Encryption key is not recognized +- لم يتم التعر٠على Ù…Ùتاح التشÙير +- +- +- Incorrect action +- إجراء غير صحيح +- +- +- Empty message received +- Ø£Ùستلمت رسالة Ùارغة +- +- +- No URL provided +- لم يتم تقديم رابط +- +- +- No logins found +- لم يتم العثور على عمليات تسجيل دخول +- +- +- Unknown error +- خطأ مجهول +- +- +- Add a new entry to a database. +- إضاÙØ© Ù…Ùدخل إلى قاعدة البيانات. +- +- +- Path of the database. +- مسار قاعدة البيانات. +- +- +- Key file of the database. +- مل٠المÙتاح لقاعدة البيانات. +- +- +- path +- المسار +- +- +- Username for the entry. +- إسم المستخدم للمÙدخل. +- +- +- username +- إسم المستخدم +- +- +- URL for the entry. +- الرابط للمÙدخل. +- +- +- URL +- رابط +- +- +- Prompt for the entry's password. +- المطالبة بكلمة مرور المÙدخل. +- +- +- Generate a password for the entry. +- إنشاء كلمة المرور للمÙدخل. +- +- +- length +- الطول +- +- +- Path of the entry to add. +- مسار المÙدخل للإضاÙØ©. +- +- +- Path of the entry to clip. +- clip = copy to clipboard +- مسار المÙدخل للقص. +- +- +- Timeout in seconds before clearing the clipboard. +- مهلة بالثوان قبل مسح الحاÙظة. +- +- +- Edit an entry. +- تعديل Ù…Ùدخل. +- +- +- Title for the entry. +- عنوان المÙدخل +- +- +- title +- العنوان +- +- +- Path of the entry to edit. +- مسار المÙدخل للتعديل. +- +- +- Estimate the entropy of a password. +- تقدير الإنتروبيا لكلمة مرور. +- +- +- Password for which to estimate the entropy. +- كلمة السر التي لتقدير الانتروبيا. +- +- +- Perform advanced analysis on the password. +- إجراء تحليل متقدم على كلمة المرور. +- +- +- +- +-Available commands: +- +- +- +-الأوامر المتاحة: +- +- +- +- Name of the command to execute. +- اسم الأمر للتنÙيذ. +- +- +- List database entries. +- إدراج Ù…Ùدخلات قاعدة البيانات. +- +- +- Path of the group to list. Default is / +- مسار المجموعة للجدولة. الإÙتراضي هو / +- +- +- Find entries quickly. +- البحث عن المÙدخلات بسرعة. +- +- +- Search term. +- مصطلح البحث. +- +- +- Merge two databases. +- دمج قاعدتي بيانات. +- +- +- Path of the database to merge from. +- مسار قاعدة البيانات المÙراد الدمج منها. +- +- +- Use the same credentials for both database files. +- استخدام Ù†Ùس بيانات الاعتماد لكل من ملÙات قاعدة البيانات. +- +- +- Key file of the database to merge from. +- مل٠المÙتاح لقاعدة البيانات للدمج منه. +- +- +- Show an entry's information. +- إظهار معلومات الإدخال. +- +- +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- أسماء الخصائص المراد عرضها. يمكن تحديد هذا الخيار أكثر من مرة، مع عرض كل خاصية لكل سطر بالترتيب المحدد. إذا لم يتم تحديد خاصية، يتم إعطاء ملخص للخصائص الإÙتراضية. +- +- +- attribute +- خاصية +- +- +- Name of the entry to show. +- اسم الإدخال للعرض. +- +- +- NULL device +- جهاز غير معرو٠+- +- +- error reading from device +- خطأ القراءة من الجهاز +- +- +- malformed string +- سلسلة غير صحيحة +- +- +- missing closing quote +- إغلاق الإقتباس Ù…Ùقود +- +- +- Group +- المجموعة +- +- +- Title +- العنوان +- +- +- Username +- اسم المستخدم +- +- +- Password +- كلمه السر +- +- +- Notes +- ملاحظات +- +- +- Last Modified +- آخر تعديل +- +- +- Created +- Ø£Ùنشئت +- +- +- Browser Integration +- تكامل المتصÙØ­ +- +- +- SSH Agent +- وكيل SSH +- +- +- Generate a new random diceware passphrase. +- إنشاء عبارة مرور diceware عشوائية جديدة. +- +- +- Word count for the diceware passphrase. +- عدد الكلمات لعبارة مرور diceware. +- +- +- Wordlist for the diceware generator. +-[Default: EFF English] +- قائمة الكلمات لمولد diceware. +-[الإÙتراضية: EFF English] +- +- +- Generate a new random password. +- إنشاء كلمة مرور عشوائية جديدة. +- +- +- Could not create entry with path %1. +- +- +- +- Enter password for new entry: +- +- +- +- Writing the database failed %1. +- +- +- +- Successfully added entry %1. +- +- +- +- Invalid timeout value %1. +- +- +- +- Entry %1 not found. +- +- +- +- Entry with path %1 has no TOTP set up. +- +- +- +- Clearing the clipboard in %1 second(s)... +- +- +- +- Clipboard cleared! +- +- +- +- Silence password prompt and other secondary outputs. +- +- +- +- count +- CLI parameter +- العدد +- +- +- Could not find entry with path %1. +- +- +- +- Not changing any field for entry %1. +- +- +- +- Enter new password for entry: +- +- +- +- Writing the database failed: %1 +- +- +- +- Successfully edited entry %1. +- +- +- +- Length %1 +- +- +- +- Entropy %1 +- +- +- +- Log10 %1 +- +- +- +- Multi-word extra bits %1 +- +- +- +- Type: Bruteforce +- +- +- +- Type: Dictionary +- +- +- +- Type: Dict+Leet +- +- +- +- Type: User Words +- +- +- +- Type: User+Leet +- +- +- +- Type: Repeated +- +- +- +- Type: Sequence +- +- +- +- Type: Spatial +- +- +- +- Type: Date +- +- +- +- Type: Bruteforce(Rep) +- +- +- +- Type: Dictionary(Rep) +- +- +- +- Type: Dict+Leet(Rep) +- +- +- +- Type: User Words(Rep) +- +- +- +- Type: User+Leet(Rep) +- +- +- +- Type: Repeated(Rep) +- +- +- +- Type: Sequence(Rep) +- +- +- +- Type: Spatial(Rep) +- +- +- +- Type: Date(Rep) +- +- +- +- Type: Unknown%1 +- +- +- +- Entropy %1 (%2) +- +- +- +- *** Password length (%1) != sum of length of parts (%2) *** +- +- +- +- Failed to load key file %1: %2 +- +- +- +- Length of the generated password +- +- +- +- Use lowercase characters +- +- +- +- Use uppercase characters +- +- +- +- Use special characters +- +- +- +- Use extended ASCII +- +- +- +- Exclude character set +- +- +- +- chars +- +- +- +- Exclude similar looking characters +- +- +- +- Include characters from every selected group +- +- +- +- Recursively list the elements of the group. +- +- +- +- Cannot find group %1. +- +- +- +- Error reading merge file: +-%1 +- +- +- +- Unable to save database to file : %1 +- +- +- +- Unable to save database to file: %1 +- +- +- +- Successfully recycled entry %1. +- +- +- +- Successfully deleted entry %1. +- +- +- +- Show the entry's current TOTP. +- +- +- +- ERROR: unknown attribute %1. +- +- +- +- No program defined for clipboard manipulation +- +- +- +- file empty +- +- +- +- %1: (row, col) %2,%3 +- +- +- +- AES-KDF (KDBX 4) +- AES-KDF (KDBX 4) +- +- +- AES-KDF (KDBX 3.1) +- AES-KDF (KDBX 3.1) +- +- +- Invalid Settings +- TOTP +- +- +- +- Invalid Key +- TOTP +- +- +- +- Message encryption failed. +- +- +- +- No groups found +- +- +- +- Create a new database. +- +- +- +- File %1 already exists. +- +- +- +- Loading the key file failed +- +- +- +- No key is set. Aborting database creation. +- +- +- +- Failed to save the database: %1. +- +- +- +- Successfully created new database. +- +- +- +- Creating KeyFile %1 failed: %2 +- +- +- +- Loading KeyFile %1 failed: %2 +- +- +- +- Path of the entry to remove. +- مسار المÙدخل التي ستحذÙ. +- +- +- Existing single-instance lock file is invalid. Launching new instance. +- مل٠القÙÙ„ الحالي المثيل غير صحيح. سيÙطلق مثيل جديد. +- +- +- The lock file could not be created. Single-instance mode disabled. +- تعذر إنشاء مل٠القÙÙ„. وضع المثيل الأحادي Ù…Ùعطل. +- +- +- KeePassXC - cross-platform password manager +- KeePassXC - مدير كلمات المرور لعدة أنظمة +- +- +- filenames of the password databases to open (*.kdbx) +- أسماء ملÙات قواعد بيانات كلمات المرور للÙتح (*.kdbx) +- +- +- path to a custom config file +- مسار مل٠الاعدادات المخصص +- +- +- key file of the database +- مل٠مÙتاح قاعدة البيانات +- +- +- read password of the database from stdin +- قراءة كلمة سر قاعدة البيانات من الدخل القياسي "stdin" +- +- +- Another instance of KeePassXC is already running. +- نسخة أخرى من KeePassXC قيد التشغيل. +- +- +- Fatal error while testing the cryptographic functions. +- خطأ Ùادح أثناء اختبار وظائ٠التشÙير. +- +- +- KeePassXC - Error +- KeePassXC - خطأ +- +- +- Database password: +- +- +- +- Cannot create new group +- +- +- +- Deactivate password key for the database. +- +- +- +- Displays debugging information. +- +- +- +- Deactivate password key for the database to merge from. +- +- +- +- Version %1 +- +- +- +- Build Type: %1 +- +- +- +- Revision: %1 +- مراجعة: %1 +- +- +- Distribution: %1 +- مراجعة: %1 +- +- +- Debugging mode is disabled. +- +- +- +- Debugging mode is enabled. +- +- +- +- Operating system: %1 +-CPU architecture: %2 +-Kernel: %3 %4 +- نظام التشغيل: %1 +-معمارية المعالج: %2 +-النواة: %3 %4 +- +- +- Auto-Type +- نمط تلقائي +- +- +- KeeShare (signed and unsigned sharing) +- +- +- +- KeeShare (only signed sharing) +- +- +- +- KeeShare (only unsigned sharing) +- +- +- +- YubiKey +- +- +- +- TouchID +- +- +- +- None +- +- +- +- Enabled extensions: +- الإضاÙات المÙÙعلة: +- +- +- Cryptographic libraries: +- +- +- +- Cannot generate a password and prompt at the same time! +- +- +- +- Adds a new group to a database. +- +- +- +- Path of the group to add. +- +- +- +- Group %1 already exists! +- +- +- +- Group %1 not found. +- +- +- +- Successfully added group %1. +- +- +- +- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. +- +- +- +- FILENAME +- +- +- +- Analyze passwords for weaknesses and problems. +- +- +- +- Failed to open HIBP file %1: %2 +- +- +- +- Evaluating database entries against HIBP file, this will take a while... +- +- +- +- Close the currently opened database. +- +- +- +- Display this help. +- +- +- +- slot +- +- +- +- Invalid word count %1 +- +- +- +- The word list is too small (< 1000 items) +- +- +- +- Exit interactive mode. +- +- +- +- Exports the content of a database to standard output in the specified format. +- +- +- +- Unable to export database to XML: %1 +- +- +- +- Unsupported format %1 +- +- +- +- Use numbers +- +- +- +- Invalid password length %1 +- +- +- +- Display command help. +- +- +- +- Available commands: +- +- +- +- Import the contents of an XML database. +- +- +- +- Path of the XML database export. +- +- +- +- Path of the new database. +- +- +- +- Successfully imported database. +- +- +- +- Unknown command %1 +- +- +- +- Flattens the output to single lines. +- +- +- +- Only print the changes detected by the merge operation. +- +- +- +- Yubikey slot for the second database. +- +- +- +- Successfully merged %1 into %2. +- +- +- +- Database was not modified by merge operation. +- +- +- +- Moves an entry to a new group. +- +- +- +- Path of the entry to move. +- +- +- +- Path of the destination group. +- +- +- +- Could not find group with path %1. +- +- +- +- Entry is already in group %1. +- +- +- +- Successfully moved entry %1 to group %2. +- +- +- +- Open a database. +- +- +- +- Path of the group to remove. +- +- +- +- Cannot remove root group from database. +- +- +- +- Successfully recycled group %1. +- +- +- +- Successfully deleted group %1. +- +- +- +- Failed to open database file %1: not found +- +- +- +- Failed to open database file %1: not a plain file +- +- +- +- Failed to open database file %1: not readable +- +- +- +- Enter password to unlock %1: +- +- +- +- Invalid YubiKey slot %1 +- +- +- +- Enter password to encrypt database (optional): +- +- +- +- HIBP file, line %1: parse error +- +- +- +- Secret Service Integration +- +- +- +- User name +- +- +- +- Password for '%1' has been leaked %2 time(s)! +- +- +- +- Invalid password generator after applying all options +- +- +- +- Show the protected attributes in clear text. +- +- +- +- Browser Plugin Failure +- +- +- +- Could not save the native messaging script file for %1. +- +- +- +- Copy the given attribute to the clipboard. Defaults to "password" if not specified. +- +- +- +- Copy the current TOTP to the clipboard (equivalent to "-a totp"). +- +- +- +- Copy an entry's attribute to the clipboard. +- +- +- +- ERROR: Please specify one of --attribute or --totp, not both. +- +- +- +- ERROR: attribute %1 is ambiguous, it matches %2. +- +- +- +- Attribute "%1" not found. +- +- +- +- Entry's "%1" attribute copied to the clipboard! +- +- +- +- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). +- +- +- +- slot[:serial] +- +- +- +- Target decryption time in MS for the database. +- +- +- +- time +- +- +- +- Set the key file for the database. +- +- +- +- Set a password for the database. +- +- +- +- Invalid decryption time %1. +- +- +- +- Target decryption time must be between %1 and %2. +- +- +- +- Failed to set database password. +- +- +- +- Benchmarking key derivation function for %1ms delay. +- +- +- +- Setting %1 rounds for key derivation function. +- +- +- +- error while setting database key derivation settings. +- +- +- +- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. +- +- +- +- Unable to import XML database: %1 +- +- +- +- Show a database's information. +- +- +- +- UUID: +- +- +- +- Name: +- +- +- +- Description: +- +- +- +- Cipher: +- +- +- +- KDF: +- +- +- +- Recycle bin is enabled. +- +- +- +- Recycle bin is not enabled. +- +- +- +- Invalid command %1. +- +- +- +- Invalid YubiKey serial %1 +- +- +- +- Please touch the button on your YubiKey to continue… +- +- +- +- Do you want to create a database with an empty password? [y/N]: +- +- +- +- Repeat password: +- +- +- +- Error: Passwords do not match. +- +- +- +- All clipping programs failed. Tried %1 +- +- +- +- +- AES (%1 rounds) +- +- +- +- AES 256-bit +- +- +- +- Twofish 256-bit +- +- +- +- ChaCha20 256-bit +- +- +- +- Benchmark %1 delay +- +- +- +- %1 ms +- milliseconds +- +- +- +- %1 s +- seconds +- +- +- +- path to a custom local config file +- +- +- +- WARNING: You are using an old key file format which KeePassXC may +-stop supporting in the future. +- +-Please consider generating a new key file. +- +- +- +- Argon2%1 (%2 rounds, %3 KB) +- +- +- +- Argon2d (KDBX 4 – recommended) +- +- +- +- Argon2id (KDBX 4) +- +- +- +- TOTP +- +- +- +- Icon +- أيقونة +- +- +- Unsupported key file version: %1 +- +- +- +- Checksum mismatch! Key file may be corrupt. +- +- +- +- Unexpected key file data! Key file may be corrupt. +- +- +- +- +- QtIOCompressor +- +- Internal zlib error when compressing: +- خطأ zlib داخلي عند الضغط: +- +- +- Error writing to underlying device: +- حدث خطأ أثناء الكتابة إلى الجهاز الأساسي: +- +- +- Error opening underlying device: +- حدث خطأ أثناء Ùتح الجهاز الأساسي: +- +- +- Error reading data from underlying device: +- حدث خطأ أثناء قراءة البيانات من الجهاز الأساسي: +- +- +- Internal zlib error when decompressing: +- خطأ zlib داخلي عند ÙÙƒ الضغط: +- +- +- +- QtIOCompressor::open +- +- The gzip format not supported in this version of zlib. +- تنسيق gzip غير مدعوم ÙÙŠ هذا الإصدار من zlib. +- +- +- Internal zlib error: +- خطأ zlib داخلي: +- +- +- +- ReportsWidgetHealthcheck +- +- Also show entries that have been excluded from reports +- +- +- +- Hover over reason to show additional details. Double-click entries to edit. +- +- +- +- Bad +- Password quality +- +- +- +- Bad — password must be changed +- +- +- +- Poor +- Password quality +- ضعي٠جدا +- +- +- Poor — password should be changed +- +- +- +- Weak +- Password quality +- ضعيÙØ© +- +- +- Weak — consider changing the password +- +- +- +- (Excluded) +- +- +- +- This entry is being excluded from reports +- +- +- +- Please wait, health data is being calculated... +- +- +- +- Congratulations, everything is healthy! +- +- +- +- Title +- العنوان +- +- +- Path +- +- +- +- Score +- +- +- +- Reason +- +- +- +- Edit Entry... +- +- +- +- Exclude from reports +- +- +- +- +- ReportsWidgetHibp +- +- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. +- +- +- +- Perform Online Analysis +- +- +- +- Also show entries that have been excluded from reports +- +- +- +- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. +- +- +- +- Congratulations, no exposed passwords! +- +- +- +- Title +- العنوان +- +- +- Path +- +- +- +- Password exposed… +- +- +- +- (Excluded) +- +- +- +- This entry is being excluded from reports +- +- +- +- once +- +- +- +- up to 10 times +- +- +- +- up to 100 times +- +- +- +- up to 1000 times +- +- +- +- up to 10,000 times +- +- +- +- up to 100,000 times +- +- +- +- up to a million times +- +- +- +- millions of times +- +- +- +- Edit Entry... +- +- +- +- Exclude from reports +- +- +- +- +- ReportsWidgetStatistics +- +- Hover over lines with error icons for further information. +- +- +- +- Name +- الاسم +- +- +- Value +- القيمة +- +- +- Please wait, database statistics are being calculated... +- +- +- +- Database name +- +- +- +- Description +- +- +- +- Location +- +- +- +- Last saved +- +- +- +- Unsaved changes +- +- +- +- yes +- +- +- +- no +- +- +- +- The database was modified, but the changes have not yet been saved to disk. +- +- +- +- Number of groups +- +- +- +- Number of entries +- +- +- +- Number of expired entries +- +- +- +- The database contains entries that have expired. +- +- +- +- Unique passwords +- +- +- +- Non-unique passwords +- +- +- +- More than 10% of passwords are reused. Use unique passwords when possible. +- +- +- +- Maximum password reuse +- +- +- +- Some passwords are used more than three times. Use unique passwords when possible. +- +- +- +- Number of short passwords +- +- +- +- Recommended minimum password length is at least 8 characters. +- +- +- +- Number of weak passwords +- +- +- +- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. +- +- +- +- Entries excluded from reports +- +- +- +- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. +- +- +- +- Average password length +- +- +- +- %1 characters +- +- +- +- Average password length is less than ten characters. Longer passwords provide more security. +- +- +- +- +- SSHAgent +- +- Agent connection failed. +- +- +- +- Agent protocol error. +- +- +- +- No agent running, cannot add identity. +- +- +- +- No agent running, cannot remove identity. +- +- +- +- Agent refused this identity. Possible reasons include: +- +- +- +- The key has already been added. +- +- +- +- Restricted lifetime is not supported by the agent (check options). +- +- +- +- A confirmation request is not supported by the agent (check options). +- +- +- +- Key identity ownership conflict. Refusing to add. +- +- +- +- No agent running, cannot list identities. +- +- +- +- +- SearchHelpWidget +- +- Search Help +- +- +- +- Search terms are as follows: [modifiers][field:]["]term["] +- +- +- +- Every search term must match (ie, logical AND) +- +- +- +- Modifiers +- +- +- +- exclude term from results +- +- +- +- match term exactly +- +- +- +- use regex in term +- +- +- +- Fields +- +- +- +- Term Wildcards +- +- +- +- match anything +- +- +- +- match one +- +- +- +- logical OR +- +- +- +- Examples +- +- +- +- +- SearchWidget +- +- Search +- بحث +- +- +- Limit search to selected group +- حدد البحث ÙÙŠ المجموعة المحددة +- +- +- Search Help +- +- +- +- Search (%1)... +- Search placeholder text, %1 is the keyboard shortcut +- +- +- +- Case sensitive +- +- +- +- +- SettingsWidgetFdoSecrets +- +- Options +- +- +- +- Enable KeepassXC Freedesktop.org Secret Service integration +- +- +- +- General +- العام +- +- +- Show notification when credentials are requested +- +- +- +- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> +- +- +- +- Exposed database groups: +- +- +- +- Authorization +- +- +- +- These applications are currently connected: +- +- +- +- Don't confirm when entries are deleted by clients +- +- +- +- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. +- +- +- +- <b>Warning:</b> +- +- +- +- Save current changes to activate the plugin and enable editing of this section. +- +- +- +- +- SettingsWidgetKeeShare +- +- Active +- +- +- +- Allow export +- +- +- +- Allow import +- +- +- +- Own certificate +- +- +- +- Fingerprint: +- +- +- +- Certificate: +- +- +- +- Signer +- +- +- +- Key: +- المÙتاح: +- +- +- Generate +- توليد +- +- +- Import +- إستيراد +- +- +- Export +- +- +- +- Imported certificates +- +- +- +- Trust +- +- +- +- Ask +- +- +- +- Untrust +- +- +- +- Remove +- إزالة +- +- +- Path +- +- +- +- Status +- +- +- +- Fingerprint +- البصمة +- +- +- Certificate +- +- +- +- Trusted +- +- +- +- Untrusted +- +- +- +- Unknown +- +- +- +- key.share +- Filetype for KeeShare key +- +- +- +- KeeShare key file +- +- +- +- All files +- كل الملÙات +- +- +- Select path +- +- +- +- Exporting changed certificate +- +- +- +- The exported certificate is not the same as the one in use. Do you want to export the current certificate? +- +- +- +- Signer: +- +- +- +- Allow KeeShare imports +- +- +- +- Allow KeeShare exports +- +- +- +- Only show warnings and errors +- +- +- +- Key +- المÙتاح +- +- +- Signer name field +- +- +- +- Generate new certificate +- +- +- +- Import existing certificate +- +- +- +- Export own certificate +- +- +- +- Known shares +- +- +- +- Trust selected certificate +- +- +- +- Ask whether to trust the selected certificate every time +- +- +- +- Untrust selected certificate +- +- +- +- Remove selected certificate +- +- +- +- +- ShareExport +- +- Overwriting signed share container is not supported - export prevented +- +- +- +- Could not write export container (%1) +- +- +- +- Could not embed signature: Could not open file to write (%1) +- +- +- +- Could not embed signature: Could not write file (%1) +- +- +- +- Could not embed database: Could not open file to write (%1) +- +- +- +- Could not embed database: Could not write file (%1) +- +- +- +- Overwriting unsigned share container is not supported - export prevented +- +- +- +- Could not write export container +- +- +- +- Unexpected export error occurred +- +- +- +- +- ShareImport +- +- Import from container without signature +- +- +- +- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? +- +- +- +- Import from container with certificate +- +- +- +- Do you want to trust %1 with the fingerprint of %2 from %3? +- +- +- +- Not this time +- +- +- +- Never +- أبدًا +- +- +- Always +- +- +- +- Just this time +- +- +- +- Signed share container are not supported - import prevented +- +- +- +- File is not readable +- +- +- +- Invalid sharing container +- +- +- +- Untrusted import prevented +- +- +- +- Successful signed import +- +- +- +- Unsigned share container are not supported - import prevented +- +- +- +- Successful unsigned import +- +- +- +- File does not exist +- +- +- +- Unknown share container type +- +- +- +- +- ShareObserver +- +- Import from %1 failed (%2) +- +- +- +- Import from %1 successful (%2) +- +- +- +- Imported from %1 +- +- +- +- Export to %1 failed (%2) +- +- +- +- Export to %1 successful (%2) +- +- +- +- Export to %1 +- +- +- +- Multiple import source path to %1 in %2 +- +- +- +- Conflicting export target path %1 in %2 +- +- +- +- +- TotpDialog +- +- Timed Password +- كلمة مرور موقوته +- +- +- 000000 +- 000000 +- +- +- Copy +- نسخ +- +- +- Expires in <b>%n</b> second(s) +- +- +- +- +- TotpExportSettingsDialog +- +- Copy +- نسخ +- +- +- NOTE: These TOTP settings are custom and may not work with other authenticators. +- TOTP QR code dialog warning +- +- +- +- There was an error creating the QR code. +- +- +- +- Closing in %1 seconds. +- +- +- +- +- TotpSetupDialog +- +- Setup TOTP +- إعداد TOTP +- +- +- Default RFC 6238 token settings +- الإعدادات الإÙتراضية لرمز RFC 6238 +- +- +- Steam token settings +- اعدادات رمز Steam +- +- +- Use custom settings +- إستخدم أعدادات مخصصة +- +- +- Custom Settings +- +- +- +- Time step: +- الخطوة الزمنية: +- +- +- sec +- Seconds +- ثانية +- +- +- Code size: +- حجم الكود: +- +- +- Secret Key: +- +- +- +- Secret key must be in Base32 format +- +- +- +- Secret key field +- +- +- +- Algorithm: +- +- +- +- Time step field +- +- +- +- digits +- +- +- +- Invalid TOTP Secret +- +- +- +- You have entered an invalid secret key. The key must be in Base32 format. +-Example: JBSWY3DPEHPK3PXP +- +- +- +- Confirm Remove TOTP Settings +- +- +- +- Are you sure you want to delete TOTP settings for this entry? +- +- +- +- +- URLEdit +- +- Invalid URL +- +- +- +- +- UpdateCheckDialog +- +- Checking for updates +- +- +- +- Checking for updates... +- +- +- +- Close +- إغلاق +- +- +- Update Error! +- +- +- +- An error occurred in retrieving update information. +- +- +- +- Please try again later. +- +- +- +- Software Update +- +- +- +- A new version of KeePassXC is available! +- +- +- +- KeePassXC %1 is now available — you have %2. +- +- +- +- Download it at keepassxc.org +- +- +- +- You're up-to-date! +- +- +- +- KeePassXC %1 is currently the newest version available +- +- +- +- +- WelcomeWidget +- +- Start storing your passwords securely in a KeePassXC database +- إبدأ بتخزين كلمات مرورك بأمان ÙÙŠ قاعدة بيانات KeePassXC +- +- +- Create new database +- أنشىء قاعدة بيانات جديدة +- +- +- Open existing database +- Ùتح قاعدة بيانات حالية +- +- +- Import from KeePass 1 +- استيراد من KeePass 1 +- +- +- Import from CSV +- استيراد من CSV +- +- +- Recent databases +- المÙتوحة مؤخرًا +- +- +- Welcome to KeePassXC %1 +- مرحبا بك ÙÙŠ KeePassXC %1 +- +- +- Import from 1Password +- +- +- +- Open a recent database +- +- +- +- +- YubiKey +- +- %1 [%2] Configured Slot - %3 +- +- +- +- %1 [%2] Challenge Response - Slot %3 - %4 +- +- +- +- Press +- اضغط +- +- +- Passive +- سلبي +- +- +- %1 Invalid slot specified - %2 +- +- +- +- The YubiKey interface has not been initialized. +- +- +- +- Hardware key is currently in use. +- +- +- +- Could not find hardware key with serial number %1. Please plug it in to continue. +- +- +- +- Hardware key timed out waiting for user interaction. +- +- +- +- A USB error ocurred when accessing the hardware key: %1 +- +- +- +- Failed to complete a challenge-response, the specific error was: %1 +- +- +- +- +- YubiKeyEditWidget +- +- Refresh +- تحديث +- +- +- YubiKey Challenge-Response +- +- +- +- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- +- +- +- Refresh hardware tokens +- +- +- +- Hardware key slot selection +- +- +- +- Could not find any hardware keys! +- +- +- +- Selected hardware key slot does not support challenge-response! +- +- +- +- Detecting hardware keys… +- +- +- +- No hardware keys detected +- +- +- +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_bg.ts keepassxc-2.6.4-patched/share/translations/keepassx_bg.ts +--- keepassxc-2.6.4-orig/share/translations/keepassx_bg.ts 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/translations/keepassx_bg.ts 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7892 +0,0 @@ +- +- +- AboutDialog +- +- About KeePassXC +- ОтноÑно KeePassXC +- +- +- About +- ОтноÑно +- +- +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- Съобщаване за грешки: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- +- +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- KeePassXC Ñе разпроÑтранÑва ÑъглаÑно уÑловиÑта на GNU General Public License (GPL) верÑÐ¸Ñ 2 или (по ваш избор) верÑÐ¸Ñ 3. +- +- +- Contributors +- Контрибутури +- +- +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Вижте контрибутурите в GitHub</a> +- +- +- Debug Info +- Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° отÑтранÑване на грешки +- +- +- Include the following information whenever you report a bug: +- Включвайте Ñледната информациÑ, когато Ñъобщавате за грешка: +- +- +- Copy to clipboard +- Копиране в клипборда +- +- +- Project Maintainers: +- Екип: +- +- +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- Специални благодарноÑти от екипа на KeePassXC отидете на debfx за Ñъздаването на Ð¾Ñ€Ð¸Ð³Ð¸Ð½Ð°Ð»Ð½Ð¸Ñ KeePassX. +- +- +- +- AgentSettingsWidget +- +- Use OpenSSH for Windows instead of Pageant +- Използвайте OpenSSH за Windows вмеÑто Pageant +- +- +- Enable SSH Agent integration +- Включване на Ð¸Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ð½Ð° SSH Agent +- +- +- SSH_AUTH_SOCK value +- SSH_AUTH_SOCK ÑтойноÑÑ‚ +- +- +- SSH_AUTH_SOCK override +- SSH_AUTH_SOCK презапиÑване +- +- +- (empty) +- (празно) +- +- +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- ÐÑма SSH Agent Ñокет. Уверете, че ÑъщеÑтвува променлива на Ñредата SSH_AUTH_SOCK или Ñ Ð¿Ñ€ÐµÐ·Ð°Ð¿Ð¸ÑˆÐµÑ‚Ðµ. +- +- +- SSH Agent connection is working! +- SSH Agent връзката работи! +- +- +- +- ApplicationSettingsWidget +- +- Application Settings +- ÐаÑтройки на приложението +- +- +- General +- ОÑновни +- +- +- Security +- СигурноÑÑ‚ +- +- +- Access error for config file %1 +- Грешка при доÑтъп на ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð» %1 +- +- +- Icon only +- Само икона +- +- +- Text only +- Само текÑÑ‚ +- +- +- Text beside icon +- ТекÑÑ‚ до иконата +- +- +- Text under icon +- ТекÑÑ‚ под икона +- +- +- Follow style +- Следване на Ñтила +- +- +- Reset Settings? +- Да Ñе нулират наÑтройките? +- +- +- Are you sure you want to reset all general and security settings to default? +- ÐаиÑтина ли иÑкате да нулирате ÑтойноÑтите по подразбиране на вÑички общи наÑтройки и наÑтройки за защита? +- +- +- Monochrome (light) +- Монохромен(Ñветлъл) +- +- +- Monochrome (dark) +- Монохромен(тъмен) +- +- +- Colorful +- Цветни +- +- +- You must restart the application to set the new language. Would you like to restart now? +- ТрÑбва да реÑтартирате приложението, за да наÑтроите нов език. Желаете ли да реÑтартирате Ñега? +- +- +- +- ApplicationSettingsWidgetGeneral +- +- Basic Settings +- ОÑновни наÑтройки +- +- +- Startup +- Стартиране +- +- +- Start only a single instance of KeePassXC +- Започнете Ñамо една инÑÑ‚Ð°Ð½Ñ†Ð¸Ñ Ð½Ð° KeePassXC +- +- +- Minimize window at application startup +- Минимизиране на прозореца при Ñтартиране на приложението +- +- +- File Management +- Управление на файлове +- +- +- Backup database file before saving +- Ðрхивиране на файла Ñ Ð±Ð°Ð·Ð°Ñ‚Ð° данни преди запиÑване +- +- +- Automatically save after every change +- Ðвтоматично запиÑване Ñлед вÑÑка промÑна +- +- +- Automatically reload the database when modified externally +- Ðвтоматично презареждане на базата данни при външно модифициране +- +- +- Entry Management +- Управление на запиÑи +- +- +- Use group icon on entry creation +- Използване на груповата икона при Ñъздаване на Ð·Ð°Ð¿Ð¸Ñ +- +- +- Minimize instead of app exit +- Минимизиране вмеÑто излизане от приложение +- +- +- Show a system tray icon +- Показване на икона в ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ð¿Ð°Ð½ÐµÐ» +- +- +- Hide window to system tray when minimized +- Скриване на прозореца в ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ð¿Ð°Ð½ÐµÐ» при минимизиране +- +- +- Auto-Type +- Auto-Type +- +- +- Use entry title to match windows for global Auto-Type +- Използвайте заглавието на запиÑа, за да ÑъответÑтвате на прозорците за Ð³Ð»Ð¾Ð±Ð°Ð»Ð½Ð¸Ñ Auto-Type +- +- +- Use entry URL to match windows for global Auto-Type +- Използвайте URL на запиÑа, за да ÑъответÑтвате на прозорците за Ð³Ð»Ð¾Ð±Ð°Ð»Ð½Ð¸Ñ Auto-Type +- +- +- Always ask before performing Auto-Type +- Винаги питай преди да извършиш Auto-Type +- +- +- ms +- Milliseconds +- ms +- +- +- Movable toolbar +- ПремеÑтваща Ñе лента Ñ Ð¸Ð½Ñтрументи +- +- +- Remember previously used databases +- ЗапаметÑване на предишни използвани бази данни +- +- +- Load previously open databases on startup +- Зареждане на поÑледно отворената бази данни при Ñтартиране +- +- +- Remember database key files and security dongles +- Запомни файл-ключовете и защитните уÑтройÑтва +- +- +- Check for updates at application startup once per week +- Проверка за актуализации при Ñтартиране на приложението веднъж Ñедмично +- +- +- Include beta releases when checking for updates +- Включване на бета верÑии при проверка за актуализации +- +- +- Language: +- Език: +- +- +- (restart program to activate) +- (реÑтартиране програма за активиране) +- +- +- Minimize window after unlocking database +- ÐамалÑване на прозореца Ñлед отключване на базата данни +- +- +- Minimize when opening a URL +- Минимизиране при отварÑне на URL +- +- +- Hide window when copying to clipboard +- Скриване на прозореца при копиране в клипборда +- +- +- Minimize +- Минимизиране +- +- +- Drop to background +- ПуÑкане на заден фон +- +- +- Favicon download timeout: +- Таймаут за изтеглÑне на фавикон: +- +- +- Website icon download timeout in seconds +- Таймаут на изтеглÑнето на иконата на уеб Ñайта в Ñекунди +- +- +- sec +- Seconds +- Ñек +- +- +- Toolbar button style +- Стил на бутоните от лентата Ñ Ð¸Ð½Ñтрументи +- +- +- Language selection +- Избор на език +- +- +- Global auto-type shortcut +- Глобален прÑк път за auto-type +- +- +- Auto-type character typing delay milliseconds +- ЗабавÑне на auto-type въвеждане на знаци милиÑекунди +- +- +- Auto-type start delay milliseconds +- ЗабавÑне на auto-type Ñтарта милиÑекунди +- +- +- Automatically launch KeePassXC at system startup +- Ðвтоматично Ñтартиране на KeePassXC при Ñтартиране на ÑиÑтемата +- +- +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- БезопаÑно запиÑване на файловете Ñ Ð±Ð°Ð·Ð¸ данни (деактивирайте, ако имате проблеми Ñ Dropbox и Ñ‚.н.) +- +- +- User Interface +- ПотребителÑки Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ +- +- +- Toolbar button style: +- Стил на бутоните от лентата Ñ Ð¸Ð½Ñтрументи: +- +- +- Use monospaced font for notes +- Използване на еднопроÑтранÑтвен шрифт за бележките +- +- +- Tray icon type: +- Тип иконата в ÑиÑтемната лента: +- +- +- Reset settings to default… +- Ðулиране на наÑтройките по подразбиране... +- +- +- Auto-Type typing delay: +- ЗабавÑне на auto-type въвеждането: +- +- +- Global Auto-Type shortcut: +- Глобален Auto-Type прÑк път: +- +- +- Auto-Type start delay: +- ЗабавÑне на Auto-Type включването: +- +- +- Automatically save when locking database +- Запази автоматично при заключване на базата данни +- +- +- Automatically save non-data changes when locking database +- При заключване на базата данни, запази автоматично промените, които не заÑÑгат данните. +- +- +- Tray icon type +- Тип иконата в ÑиÑтемната лента +- +- +- +- ApplicationSettingsWidgetSecurity +- +- Timeouts +- Таймаути +- +- +- Clear clipboard after +- ИзчиÑтване на клипборда Ñлед +- +- +- sec +- Seconds +- Ñек +- +- +- Lock databases after inactivity of +- Заключване на бази данни Ñлед бездейÑтвие от +- +- +- min +- мин +- +- +- Forget TouchID after inactivity of +- ЗабравÑне на TouchID Ñлед бездейÑтвие +- +- +- Convenience +- УдобÑтво +- +- +- Lock databases when session is locked or lid is closed +- Заключване на базите данни при заключена ÑеÑÐ¸Ñ Ð¸Ð»Ð¸ затварÑне на капака +- +- +- Forget TouchID when session is locked or lid is closed +- Забравете TouchID, когато ÑеÑиÑта е заключена или капакът е затворен +- +- +- Lock databases after minimizing the window +- Заключи базите данни Ñлед минимизиране на прозореца +- +- +- Re-lock previously locked database after performing Auto-Type +- Повторно заключване на предварително заключена база данни Ñлед извършване на Auto-Type +- +- +- Hide passwords in the entry preview panel +- Скриване на паролите в панела за преглед на запиÑи +- +- +- Hide entry notes by default +- Скриване на бележките по подразбиране +- +- +- Privacy +- ПоверителноÑÑ‚ +- +- +- Use DuckDuckGo service to download website icons +- Използвайте DuckDuckGo за изтеглÑне на иконите на уебÑайта +- +- +- Clipboard clear seconds +- ИзчиÑтване на клипборда Ñекунди +- +- +- Touch ID inactivity reset +- Ðулиране при неактивноÑтта на Touch ID +- +- +- Database lock timeout seconds +- Секунди за заключване на базата данни +- +- +- min +- Minutes +- мин +- +- +- Clear search query after +- ИзчиÑтване на заÑвката за Ñ‚ÑŠÑ€Ñене Ñлед +- +- +- Require password repeat when it is visible +- ИзиÑкване на парола, когато е видима +- +- +- Hide passwords when editing them +- Скриване на пароли при редактирането им +- +- +- Use placeholder for empty password fields +- Използване на контейнер за празни полета за парола +- +- +- +- AutoType +- +- Couldn't find an entry that matches the window title: +- Ðе може да Ñе намери запиÑ, който Ð¾Ñ‚Ð³Ð¾Ð²Ð°Ñ€Ñ Ð½Ð° заглавието на прозореца: +- +- +- Auto-Type - KeePassXC +- Auto-Type - KeePassXC +- +- +- Auto-Type +- Auto-Type +- +- +- The Syntax of your Auto-Type statement is incorrect! +- СинтакÑиÑÑŠÑ‚ на Ð²Ð°ÑˆÐ¸Ñ Auto-type е неправилен! +- +- +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- Тази Auto-Type команда Ñъдържа много голÑмо забавÑне. ÐаиÑтина ли иÑкате да продължите? +- +- +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- Тази Auto-Type команда Ñъдържа много бавни натиÑÐºÐ°Ð½Ð¸Ñ Ð½Ð° клавиши. ÐаиÑтина ли иÑкате да продължите? +- +- +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- Тази Auto-Type команда Ñъдържа аргументи, които Ñе повтарÑÑ‚ много чеÑто. ÐаиÑтина ли иÑкате да продължите? +- +- +- Permission Required +- Ðужно е разрешение +- +- +- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC изиÑква разрешение за доÑтъпноÑÑ‚, за да Ñе извърши базово ниво на Auto-Type. Ðко вече Ñте дали разрешение, може да Ñе наложи да реÑтартирате KeePassXC. +- +- +- +- AutoTypeAssociationsModel +- +- Window +- Прозорец +- +- +- Sequence +- ПоÑледователноÑÑ‚ +- +- +- Default sequence +- ПоÑледователноÑÑ‚ по подразбиране +- +- +- +- AutoTypeMatchModel +- +- Group +- Група +- +- +- Title +- Заглавие +- +- +- Username +- Портебител +- +- +- Sequence +- ПоÑледователноÑÑ‚ +- +- +- +- AutoTypeMatchView +- +- Copy &username +- Копиране на &username +- +- +- Copy &password +- Копиране на &password +- +- +- +- AutoTypePlatformMac +- +- Permission Required +- ИзиÑква Ñе разрешение +- +- +- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC изиÑква разрешението Accessibility and Screen Recorder, за да Ñе извърши глобален Auto-Type. За да намерите запиÑи, е необходимо да използвате заглавието на прозореца. Ðко вече Ñте дали разрешение, може да Ñе наложи да реÑтартирате KeePassXC. +- +- +- +- AutoTypeSelectDialog +- +- Auto-Type - KeePassXC +- Auto-Type - KeePassXC +- +- +- Select entry to Auto-Type: +- Изберете Ð·Ð°Ð¿Ð¸Ñ Ð·Ð° Auto-Type: +- +- +- Search... +- ТърÑене... +- +- +- +- BrowserAccessControlDialog +- +- KeePassXC - Browser Access Request +- KeePassXC - заÑвка за доÑтъп до браузъра +- +- +- %1 is requesting access to the following entries: +- %1 иÑка доÑтъп до Ñледните запиÑи: +- +- +- Remember access to checked entries +- Запомни доÑтъпа до избраните запиÑи +- +- +- Remember +- Запомни +- +- +- Allow access to entries +- Разреши доÑтъп до запиÑите +- +- +- Allow Selected +- Разреши избраните +- +- +- Deny All +- Забрани вÑички +- +- +- Disable for this site +- Изключи за този Ñайт +- +- +- +- BrowserEntrySaveDialog +- +- KeePassXC-Browser Save Entry +- KeePassXC-Browser запази Ð·Ð°Ð¿Ð¸Ñ +- +- +- Ok +- OK +- +- +- Cancel +- Отказ +- +- +- You have multiple databases open. +-Please select the correct database for saving credentials. +- Имате отворени нÑколко бази данни. +-Изберете правилната база данни за запиÑване на идентификационни данни. +- +- +- +- BrowserService +- +- KeePassXC: New key association request +- KeePassXC: ИÑкане за нова аÑÐ¾Ñ†Ð¸Ð°Ñ†Ð¸Ñ Ð½Ð° ключове +- +- +- Save and allow access +- ЗапиÑване и разрешаване на доÑтъп +- +- +- KeePassXC: Overwrite existing key? +- KeePassXC: ПрезапиÑване на ÑъщеÑтвуващ ключ? +- +- +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- Вече ÑъщеÑтвува Ñподелен шифроващ ключ Ñ Ð¸Ð¼Ðµ "%1". +-ИÑкате ли да го презапишете? +- +- +- KeePassXC: Update Entry +- KeePassXC: ÐÐºÑ‚ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½Ð° запиÑа +- +- +- Do you want to update the information in %1 - %2? +- Желаете ли да актуализирате информациÑта в %1 -%2? +- +- +- Abort +- Отказ +- +- +- Converting attributes to custom data… +- Конвертиране на атрибути към потребителÑки данни... +- +- +- KeePassXC: Converted KeePassHTTP attributes +- KeePassXC: Конвертиране на KeePassHTTP атрибути +- +- +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- УÑпешно преобразувани атрибути от %1 запиÑ(и). +-ПремеÑтени Ñа %2 ключа в перÑонализираните данни. +- +- +- Successfully moved %n keys to custom data. +- УÑпешно премеÑтени %n ключове в потребителÑки данни.УÑпешно премеÑтени %n ключове в перÑонализираните данни. +- +- +- KeePassXC: No entry with KeePassHTTP attributes found! +- KeePassXC: ÐÑма запиÑи Ñ Ð½Ð°Ð¼ÐµÑ€ÐµÐ½Ð¸ KeePassHTTP атрибути! +- +- +- The active database does not contain an entry with KeePassHTTP attributes. +- Ðктивната база данни не Ñъдържа Ð·Ð°Ð¿Ð¸Ñ Ñ KeePassHTTP атрибути. +- +- +- KeePassXC: Legacy browser integration settings detected +- KeePassXC: Открити Ñа оÑтарели интеграционни наÑтройки на браузъра +- +- +- KeePassXC: Create a new group +- KeePassXC: Създаване на нова група +- +- +- A request for creating a new group "%1" has been received. +-Do you want to create this group? +- +- ЗаÑвка за Ñъздаване на нова група "%1" е получена. +-Желаете ли да Ñъздадете тази група? +- +- +- +- Your KeePassXC-Browser settings need to be moved into the database settings. +-This is necessary to maintain your current browser connections. +-Would you like to migrate your existing settings now? +- Вашите наÑтройки за KeePassXC-Browser Ñ‚Ñ€Ñбва да бъдат премеÑтени в наÑтройките на базата данни. +-Това е необходимо, за да Ñе поддържа текущите връзки на браузъра. +-ИÑкате ли да мигрирате ÑъщеÑтвуващите наÑтройки Ñега? +- +- +- Don't show this warning again +- Ðе показвай това предупреждение отново +- +- +- You have received an association request for the following database: +-%1 +- +-Give the connection a unique name or ID, for example: +-chrome-laptop. +- Получили Ñте заÑвка за аÑоцииране за Ñледната база данни: +-%1 +- +-Дайте на връзката уникално име или ID, например: +-chrome-laptop. +- +- +- +- BrowserSettingsWidget +- +- Dialog +- Диалог +- +- +- This is required for accessing your databases with KeePassXC-Browser +- Това е необходимо за доÑтъп до вашите бази данни Ñ KeePassXC-Browser +- +- +- Enable browser integration +- Разрешаване на интеграциÑта на браузъра +- +- +- General +- ОÑновни +- +- +- Browsers installed as snaps are currently not supported. +- Браузъри инÑталирани като snap пакети не Ñа поддържани +- +- +- Enable integration for these browsers: +- Включване на интегрирането на тези браузъри: +- +- +- Vivaldi +- Vivaldi +- +- +- &Edge +- &Edge +- +- +- Firefox +- Firefox +- +- +- Tor Browser +- Tor Browser +- +- +- Brave +- Brave +- +- +- Google Chrome +- Google Chrome +- +- +- Chromium +- Chromium +- +- +- Show a notification when credentials are requested +- Credentials mean login data requested via browser extension +- Показвай извеÑтие при поиÑкване на идентификационни данни +- +- +- Request to unlock the database if it is locked +- ИÑкане за отключване на базата данни, ако е заключена +- +- +- Only entries with the same scheme (http://, https://, ...) are returned. +- Връщат Ñе Ñамо запиÑи ÑÑŠÑ Ñъщата Ñхема (http://, https://, ...). +- +- +- Match URL scheme (e.g., https://...) +- Съвпадение на Ñхемата за URL (напр. https://...) +- +- +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- Връща Ñамо най-добрите ÑÑŠÐ²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ Ð·Ð° конкретен URL Ð°Ð´Ñ€ÐµÑ Ð²Ð¼ÐµÑто вÑички запиÑи за Ñ†ÐµÐ»Ð¸Ñ Ð´Ð¾Ð¼ÐµÐ¹Ð½. +- +- +- Return only best-matching credentials +- Връща Ñамо идентификационните данни Ñ Ð½Ð°Ð¹-добро Ñъвпадение +- +- +- Returns expired credentials. String [expired] is added to the title. +- Връща невалидни идентификационни данни. Ðиз [изтекъл] Ñе Ð´Ð¾Ð±Ð°Ð²Ñ ÐºÑŠÐ¼ заглавието. +- +- +- Allow returning expired credentials +- ПозволÑване на връщане на изтекли идентификационни данни +- +- +- All databases connected to the extension will return matching credentials. +- Ð’Ñички бази данни, Ñвързани Ñ Ñ€Ð°Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð¸ÐµÑ‚Ð¾, ще върнат Ñъвпадащи идентификационни данни. +- +- +- Search in all opened databases for matching credentials +- Credentials mean login data requested via browser extension +- ТърÑене във вÑички отворени бази данни за Ñъвпадащи идентификационни данни +- +- +- Sort matching credentials by title +- Credentials mean login data requested via browser extension +- Сортиране на Ñъвпадащи идентификационни данни по заглавие +- +- +- Sort matching credentials by username +- Credentials mean login data requested via browser extension +- Сортиране на Ñъвпадащи идентификационни данни по потребителÑко име +- +- +- Advanced +- Допълнителни +- +- +- Never ask before accessing credentials +- Credentials mean login data requested via browser extension +- Ðикога не питай преди доÑтъпване на идентификационни данни +- +- +- Never ask before updating credentials +- Credentials mean login data requested via browser extension +- Ðикога не питай преди актуализиране на идентификационни данни +- +- +- Do not ask permission for HTTP Basic Auth +- An extra HTTP Basic Auth setting +- Ðе иÑкай разрешение за HTTP Basic Auth +- +- +- Automatically creating or updating string fields is not supported. +- Ðвтоматично Ñъздаване или актуализиране на низови полета не Ñе поддържа. +- +- +- Return advanced string fields which start with "KPH: " +- +- +- +- Don't display the popup suggesting migration of legacy KeePassHTTP settings. +- Ðе показвайте изÑкачащ прозорец, който предполага Ð¼Ð¸Ð³Ñ€Ð°Ñ†Ð¸Ñ Ð½Ð° оÑтарели наÑтройки на KeePassHTTP. +- +- +- Do not prompt for KeePassHTTP settings migration. +- Ðе питай за Ð¼Ð¸Ð³Ñ€Ð°Ñ†Ð¸Ñ Ð½Ð° KeePassHTTP наÑтройки. +- +- +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- +- +- +- Update native messaging manifest files at startup +- +- +- +- Use a custom proxy location if you installed a proxy manually. +- Използвайте на перÑоналзирана Ð»Ð¾ÐºÐ°Ñ†Ð¸Ñ Ð½Ð° прокÑито, ако Ñте инÑталирали прокÑито ръчно. +- +- +- Use a custom proxy location: +- Meant is the proxy for KeePassXC-Browser +- Използване на друго прокÑи меÑтоположение: +- +- +- Custom proxy location field +- Поле за перÑонализирано прокÑи меÑтоположение +- +- +- Browser for custom proxy file +- Избор на файл Ñ Ð¿ÐµÑ€Ñонализиран прокÑи +- +- +- Browse... +- Button for opening file dialog +- Преглед... +- +- +- Use a custom browser configuration location: +- Използване на перÑонализирано меÑтоположение за конфигуриране на браузъра: +- +- +- Browser type: +- Тип на браузъра: +- +- +- Toolbar button style +- Стил на бутоните от лентата Ñ Ð¸Ð½Ñтрументи +- +- +- Config Location: +- МеÑтоположение на конфигурациÑта: +- +- +- Custom browser location field +- Поле за перÑонализирано меÑтоположение на браузъра +- +- +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- +- +- Browse for custom browser path +- Избор на перÑонализиран път към браузъра +- +- +- Custom extension ID: +- ПерÑонализирано ID номер на разширение: +- +- +- Custom extension ID +- ПерÑонализирано ID номер на разширение: +- +- +- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 +- Поради изолирането при snap пакетите, Ñ‚Ñ€Ñбва да изпълните Ñкрипт, за да разрешите интеграциÑта на браузъра.<br />Можете да получите този Ñкрипт от %1 +- +- +- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 +- KeePassXC-Browser е необходим, за да работи интеграциÑта Ñ Ð±Ñ€Ð°ÑƒÐ·ÑŠÑ€Ð°.<br />Изтеглете го тук за %1 и %2 и %3. %4 +- +- +- Please see special instructions for browser extension use below +- МолÑ, вижте Ñпециалните инÑтрукции за използване на разширението на браузъра по-долу +- +- +- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. +- <b>Грешка:</b> Ðе може да бъде намерено потребителÑкото меÑтоположението на прокÑи Ñървъра!<br/>ИнтеграциÑта Ñ Ð±Ñ€Ð°ÑƒÐ·ÑŠÑ€Ð° ÐЯМРДРРÐБОТИ без прокÑи приложението. +- +- +- <b>Warning:</b> The following options can be dangerous! +- <b>Предупреждение:</b> Следните опции могат да бъдат опаÑни! +- +- +- Executable Files +- Изпълними файлове +- +- +- All Files +- Ð’Ñички файлове +- +- +- Select custom proxy location +- Избор на потребитерÑко меÑтоположение на прокÑи Ñървър +- +- +- Select native messaging host folder location +- +- +- +- +- CloneDialog +- +- Clone Options +- Клонирай опциите +- +- +- Append ' - Clone' to title +- ДобавÑне на ' - Clone' към заглавието +- +- +- Replace username and password with references +- ЗамÑна на потребителÑко име и парола Ñ Ñ€ÐµÑ„ÐµÑ€ÐµÐ½Ñ†Ð¸Ð¸ +- +- +- Copy history +- Копиране на хронологиÑта +- +- +- +- CsvImportWidget +- +- Import CSV fields +- Импортиране на полета в CSV +- +- +- filename +- име +- +- +- size, rows, columns +- размер, редове, колони +- +- +- Encoding +- Кодиране +- +- +- Codec +- Кодек +- +- +- Text is qualified by +- +- +- +- Fields are separated by +- Полетата Ñа разделени Ñ +- +- +- Comments start with +- Коментарите започват Ñ +- +- +- Consider '\' an escape character +- Приеми за '\' Ñимвол за край +- +- +- Preview +- Преглед +- +- +- Imported from CSV file +- Импортиран от CSV файл +- +- +- Original data: +- Оригинални данни: +- +- +- Error +- Грешка +- +- +- Error(s) detected in CSV file! +- Грешки, открити в CSV файл! +- +- +- [%n more message(s) skipped] +- [%n повече ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð¿ÑƒÑнати][още %n ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ñа пропуÑнати] +- +- +- CSV import: writer has errors: +-%1 +- CSV импортиране: при пиÑане изникна грешка грешки: +-%1 +- +- +- Text qualification +- +- +- +- Field separation +- Разделител на полета +- +- +- Number of header lines to discard +- Брой на редовете Ñ Ñ…ÐµÐ´ÑŠÑ€Ð¸ за отхвърлÑне +- +- +- CSV import preview +- Ð’Ð¸Ð·ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½Ð° импортирането от CSV +- +- +- Column Association +- ÐÑÐ¾Ñ†Ð¸Ð°Ñ†Ð¸Ñ Ð½Ð° колоната +- +- +- Last Modified +- ПоÑледно променена +- +- +- Password +- Парола +- +- +- Created +- Създаден +- +- +- Notes +- Бележки +- +- +- Title +- Заглавие +- +- +- Group +- Група +- +- +- URL +- Url +- +- +- Username +- Портебител +- +- +- Header lines skipped +- ПреÑкочени хедър редове +- +- +- First line has field names +- ПървиÑÑ‚ ред Ñъдържа имената на полета +- +- +- Not Present +- Ðе е налично +- +- +- Column %1 +- Колона %1 +- +- +- TOTP +- TOTP +- +- +- Icon +- Икона +- +- +- +- CsvParserModel +- +- %n column(s) +- %n колона(и)%n колона(и) +- +- +- %1, %2, %3 +- file info: bytes, rows, columns +- %1, %2, %3 +- +- +- %n byte(s) +- %n байта(ите)%n байт(а) +- +- +- %n row(s) +- %n ред(а)%n ред(а) +- +- +- +- Database +- +- File %1 does not exist. +- Файлът %1 не ÑъщеÑтвува. +- +- +- Unable to open file %1. +- Файлът %1 не може да бъде отворен. +- +- +- Error while reading the database: %1 +- Грешка при четене на базата данни: %1 +- +- +- File cannot be written as it is opened in read-only mode. +- Файлът не може да бъде запиÑан докато е отворен в режим Ñамо за четене. +- +- +- Key not transformed. This is a bug, please report it to the developers! +- Ключът не е транÑформиран. Това е бъг, Ð¼Ð¾Ð»Ñ Ð´Ð¾ÐºÐ»Ð°Ð´Ð²Ð°Ð¹Ñ‚Ðµ за това на разработчиците! +- +- +- %1 +-Backup database located at %2 +- %1 +-Резервана база данни Ñе намира на %2 +- +- +- Could not save, database does not point to a valid file. +- Ðе може да Ñе запише, базата данни не Ñочи към валиден файл. +- +- +- Could not save, database file is read-only. +- Ðе може да Ñе запише, файлът Ñ Ð±Ð°Ð·Ð°Ñ‚Ð° данни е Ñамо за четене. +- +- +- Database file has unmerged changes. +- Файлът Ñ Ð±Ð°Ð·Ð°Ñ‚Ð° данни има неÑлети промени +- +- +- Recycle Bin +- Кошче +- +- +- Passwords +- Root group name +- Пароли +- +- +- Database save is already in progress. +- ЗапиÑването на базата данни вече е в ход. +- +- +- Could not save, database has not been initialized! +- Ðе може да Ñе запише, базата данни не е инициализирана! +- +- +- +- DatabaseOpenDialog +- +- Unlock Database - KeePassXC +- Отключване на база данни - KeePassXC +- +- +- +- DatabaseOpenWidget +- +- Key File: +- Файл-ключ: +- +- +- Refresh +- ОбновÑване +- +- +- Don't show this warning again +- Ðе показвай това предупреждение отново +- +- +- All files +- Ð’Ñички файлове +- +- +- Key files +- Файл-ключове +- +- +- Select key file +- Избор на файл-ключ +- +- +- Failed to open key file: %1 +- Грешка при отварÑне на файл-ключ: %1 +- +- +- Unlock KeePassXC Database +- Отключване на KeePassXC базата данни +- +- +- Enter Password: +- Въведете парола: +- +- +- Password field +- Поле за парола +- +- +- Hardware key slot selection +- Избор на Ñлот на хардуерен ключ +- +- +- Browse for key file +- Избор на файл-ключ +- +- +- Browse... +- Преглед... +- +- +- Refresh hardware tokens +- ОбновÑване на хардуерни токени +- +- +- Hardware Key: +- Хардуерен ключ: +- +- +- Hardware key help +- Помощ за хардуерен ключ +- +- +- TouchID for Quick Unlock +- TouchID за бързо отключване +- +- +- Unlock failed and no password given +- Грешка при отключване и не е върната парола +- +- +- Unlocking the database failed and you did not enter a password. +-Do you want to retry with an "empty" password instead? +- +-To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. +- Отключването на базата данни е неуÑпешно и не Ñте въвели парола. +-ИÑкате ли вмеÑто това да опитате отново Ñ "празна" парола? +- +-За да предотвратите поÑвата на тази грешка, Ñ‚Ñ€Ñбва да отидете на "ÐаÑтройки на базата данни / ÑигурноÑÑ‚" и да нулирате паролата Ñи. +- +- +- Retry with empty password +- Опитай отново Ñ Ð¿Ñ€Ð°Ð·Ð½Ð° парола +- +- +- Enter Additional Credentials (if any): +- Въведете допълнителни идентификационни данни (ако има такива): +- +- +- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +-<p>Click for more information...</p> +- <p>Можете да използвате хардуерен ключ за защита, като например <strong>YubiKey</strong> или <strong>OnlyKey</strong> ÑÑŠÑ Ñлотове, конфигурирани за HMAC-SHA1.</p> +-<p>Щракнете за повече информациÑ...</p> +- +- +- Key file help +- Помощ за файл-ключове +- +- +- ? +- ? +- +- +- Cannot use database file as key file +- Ðе може да Ñе използва файлът Ñ Ð±Ð°Ð·Ð°Ñ‚Ð° данни като файл-ключ +- +- +- You cannot use your database file as a key file. +-If you do not have a key file, please leave the field empty. +- Ðе можете да използвате файла Ñ Ð±Ð°Ð·Ð°Ñ‚Ð° данни като файл-ключ. +-Ðко нÑмате файл-ключ, оÑтавете полето празно. +- +- +- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> +- <p>Ð’ допълнение към парола, можете да използвате таен файл за подобрÑване на защитата на вашата база данни. Този файл може да бъде генериран в наÑтройките за защита на вашата база данни.</p><p>Това <strong>не</strong> е вашиÑÑ‚ *.kdbx файл Ñ Ð±Ð°Ð·Ð° данни!<br>Ðко нÑмате файл-ключ, оÑтавете това поле празно.</p><p>Щракнете за повече информациÑ...</p> +- +- +- Key file to unlock the database +- Файл-ключ за отключване на базата данни +- +- +- Please touch the button on your YubiKey! +- МолÑ, докоÑнете бутона на yubiKey! +- +- +- Detecting hardware keys… +- Откриване на хардуерни ключове... +- +- +- No hardware keys detected +- Ðе Ñа открити хардуерни ключове +- +- +- Select hardware key… +- Избор на хардуерен ключ... +- +- +- Old key file format +- Стар файлов формат на ключа +- +- +- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> +- Използвате Ñтар ключ файлов формат, който KeePassXC може <br>да Ñпре да поддържва в бъдеще.<br><br>МолÑ, Ñъздайте нов ключ, като:<br><strong>База данни / Защита на базата данни / ПромÑна на ключ.</strong><br> +- +- +- +- DatabaseSettingWidgetMetaData +- +- Passwords +- Пароли +- +- +- +- DatabaseSettingsDialog +- +- Advanced Settings +- Разширени наÑтройки +- +- +- General +- ОÑновни +- +- +- Security +- СигурноÑÑ‚ +- +- +- Encryption Settings +- ÐаÑтройки на шифроване +- +- +- Browser Integration +- Ð˜Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ð½Ð° браузъра +- +- +- Database Credentials +- Идентификационни данни на база данни +- +- +- +- DatabaseSettingsWidgetBrowser +- +- KeePassXC-Browser settings +- KeePassXC-Browser наÑтройки +- +- +- Stored keys +- Съхранени ключове +- +- +- Remove +- Премахване +- +- +- Delete the selected key? +- Изтриване на Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡? +- +- +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- ÐаиÑтина ли иÑкате да изтриете Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡? +-Това може да попречи на Ñвързването Ñ Ð¿Ñ€Ð¸Ñтавката на браузъра. +- +- +- Key +- Ключ +- +- +- Value +- СтойноÑÑ‚ +- +- +- Enable Browser Integration to access these settings. +- Разрешаване на Ð¸Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ñ Ð±Ñ€Ð°ÑƒÐ·ÑŠÑ€Ð¸ за доÑтъп до тези наÑтройки. +- +- +- Disconnect all browsers +- Разедини вÑички браузъри +- +- +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- ÐаиÑтина ли иÑкате да разедините вÑички браузъри? +-Това може да попречи на Ñвързването Ñ Ð¿Ñ€Ð¸Ñтавката в браузъра. +- +- +- KeePassXC: No keys found +- KeePassXC: Ðе Ñа намерени ключове +- +- +- No shared encryption keys found in KeePassXC settings. +- Ðе Ñа намерени Ñподелени ключове за криптиране в наÑтройките на KeePassXC. +- +- +- KeePassXC: Removed keys from database +- KeePassXC: Премахнати ключове от базата данни +- +- +- Successfully removed %n encryption key(s) from KeePassXC settings. +- УÑпешно отÑтранен %n шифроващ ключ от наÑтройките на KeePassXC.УÑпешно отÑтранен %n ключ(а) за шифроване от наÑтройките на KeePassXC. +- +- +- Forget all site-specific settings on entries +- Забравете вÑички наÑтройки за конкретни Ñайтове на запиÑите +- +- +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- ÐаиÑтина ли иÑкате да Ñе забравÑÑ‚ вÑички наÑтройки за ÐºÐ¾Ð½ÐºÑ€ÐµÑ‚Ð½Ð¸Ñ Ñайт за вÑеки запиÑ? +-РазрешениÑта за доÑтъп до запиÑите ще бъдат отменени. +- +- +- Removing stored permissions… +- Премахване на Ñъхранените разрешениÑ... +- +- +- Abort +- Отказ +- +- +- KeePassXC: Removed permissions +- KeePassXC: Премахнати Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ +- +- +- Successfully removed permissions from %n entry(s). +- УÑпешно премахнали Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¾Ñ‚ %n запиÑа.УÑпешно премахнали Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¾Ñ‚ %n запиÑа. +- +- +- KeePassXC: No entry with permissions found! +- KeePassXC: ÐÑма намерени запиÑи Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ! +- +- +- The active database does not contain an entry with permissions. +- Ðктивната база данни не Ñъдържа Ð·Ð°Ð¿Ð¸Ñ Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ. +- +- +- Move KeePassHTTP attributes to custom data +- ПремеÑтване на KeePassHTTP атрибутите към перÑонализирани данни +- +- +- Do you really want to move all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- ÐаиÑтина ли иÑкате да премеÑтите вÑички данни за интегриране на оÑтарели браузъри към най-Ð½Ð¾Ð²Ð¸Ñ Ñтандарт? +-Това е необходимо, за да Ñе поддържа ÑъвмеÑтимоÑÑ‚ Ñ Ð¿Ñ€Ð¸Ñтавката на браузъра. +- +- +- Stored browser keys +- Съхранените ключове на браузъра +- +- +- Remove selected key +- Премахване на Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡ +- +- +- Move KeePassHTTP attributes to KeePassXC-Browser custom data +- ПремеÑтване на KeePassHTTP атрибутите към KeePassXC-Browser перÑонализирани данни +- +- +- Refresh database root group ID +- ОбновÑване на IDна главната група на базата данни +- +- +- Created +- Създаден +- +- +- Refresh database ID +- ОбновÑване на ID на база данни +- +- +- Do you really want refresh the database ID? +-This is only necessary if your database is a copy of another and the browser extension cannot connect. +- ÐаиÑтина ли иÑкате да обновите ID-то на базата данни? +-Това е необходимо Ñамо, ако вашата база данни е копие на друга и разширението на браузъра не може да Ñе Ñвърже. +- +- +- +- DatabaseSettingsWidgetDatabaseKey +- +- Add additional protection... +- ДобавÑне на допълнителна защита... +- +- +- No password set +- ÐÑма зададена парола +- +- +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- Предупреждение! Ðе Ñте задали парола. Използването на база данни без парола е Ñилно обезÑърчено! +- +-ÐаиÑтина ли иÑкате да продължите без парола? +- +- +- Continue without password +- Продължи без парола +- +- +- No encryption key added +- Ðе е добавен шифроващ ключ +- +- +- You must add at least one encryption key to secure your database! +- ТрÑбва да добавите поне един шифроващ ключ, за да защитите вашата база данни! +- +- +- Unknown error +- ÐеизвеÑтна грешка +- +- +- Failed to change database credentials +- ÐеуÑпешна промÑна на идентификационните данни на базата данни +- +- +- +- DatabaseSettingsWidgetEncryption +- +- Encryption Algorithm: +- Ðлгоритъм за шифроване: +- +- +- AES: 256 Bit (default) +- AES: 256 бита (по подразбиране) +- +- +- Twofish: 256 Bit +- Twofish: 256 бита +- +- +- Key Derivation Function: +- Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ð·Ð° формиране на ключа +- +- +- Transform rounds: +- Рунда за транÑформиране: +- +- +- Memory Usage: +- Използване на паметта: +- +- +- Parallelism: +- Паралелизъм: +- +- +- Decryption Time: +- Време за дешифриране: +- +- +- ?? s +- ?? Ñ +- +- +- Change +- ПромÑна +- +- +- Higher values offer more protection, but opening the database will take longer. +- По-виÑоките ÑтойноÑти предлагат по-голÑма защита, но отварÑнето на базата данни ще отнеме повече време. +- +- +- Database format: +- Формат на базата данни: +- +- +- This is only important if you need to use your database with other programs. +- Това е важно Ñамо, ако Ñ‚Ñ€Ñбва да използвате вашата база данни Ñ Ð´Ñ€ÑƒÐ³Ð¸ програми. +- +- +- KDBX 4.0 (recommended) +- KDBX 4.0 (препоръчително) +- +- +- KDBX 3.1 +- KDBX 3.1 +- +- +- unchanged +- Database decryption time is unchanged +- Ðепроменени +- +- +- Number of rounds too high +- Key transformation rounds +- БроÑÑ‚ на рудновете е твърде виÑок +- +- +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or days (or even longer) to open! +- Използвате много голÑм брой рундове за преобразуване на ключа Ñ Argon2. +- +-Ðко запазите този номер, вашата база данни може да отнеме чаÑове или дни (или дори по-дълго) да Ñе отвори! +- +- +- Understood, keep number +- Разбирам, оÑтави ÑтойнÑтта +- +- +- Cancel +- Отказ +- +- +- Number of rounds too low +- Key transformation rounds +- Твърде ниÑък брой рундове +- +- +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database may be too easy to crack! +- Използвате много ниÑък брой ключови транÑформационни рундове Ñ AES-KDF. +- +-Ðко запазите тази ÑтойноÑÑ‚, вашата база данни може да бъде твърде леÑна за разбиване! +- +- +- KDF unchanged +- KDF непромен +- +- +- Failed to transform key with new KDF parameters; KDF unchanged. +- ÐеуÑпешно преобразуване на ключа Ñ Ð½Ð¾Ð²Ð¸Ñ‚Ðµ параметри на KDF; KDF непроменен. +- +- +- MiB +- Abbreviation for Mebibytes (KDF settings) +- МбМб +- +- +- thread(s) +- Threads for parallel execution (KDF settings) +- резба(и)нишка(и) +- +- +- Change existing decryption time +- ПромÑна на времето за дешифриране +- +- +- Decryption time in seconds +- Време за дешифриране в Ñекунди +- +- +- Database format +- Формат на базата данни +- +- +- Encryption algorithm +- Ðлгоритъм за шифроване +- +- +- Key derivation function +- Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ð·Ð° формиране на ключа +- +- +- Transform rounds +- ТранÑформиционни рунда +- +- +- Memory usage +- Използване на паметта +- +- +- Parallelism +- Паралелизъм +- +- +- ?? ms +- ?? Ð¼Ñ +- +- +- ? s +- ? Ñ +- +- +- +- DatabaseSettingsWidgetFdoSecrets +- +- Exposed Entries +- Разкрити запиÑи +- +- +- Don't expose this database +- Ðе разкривай тази база данни +- +- +- Expose entries under this group: +- Разкрий запиÑите в тази група: +- +- +- Enable Secret Service to access these settings. +- За получаване доÑтъп до тези наÑтройки включвете Secret Service. +- +- +- +- DatabaseSettingsWidgetGeneral +- +- Database Meta Data +- Метаданни на база данни +- +- +- Database name: +- Име на базата данни: +- +- +- Database description: +- ОпиÑание на базата данни: +- +- +- Default username: +- ПотребителÑко име по подразбиране: +- +- +- History Settings +- ÐаÑтройки на хронологиÑта +- +- +- Max. history items: +- МакÑ. елементи от хронологиÑта: +- +- +- Max. history size: +- МакÑ. размер на хронологиÑта: +- +- +- MiB +- Мб +- +- +- Use recycle bin +- Използване на кошче +- +- +- Additional Database Settings +- Допълнителни наÑтройки на базата данни +- +- +- Database name field +- Поле за име на база данни +- +- +- Database description field +- Поле за опиÑание на базата данни +- +- +- Default username field +- Поле за потребителÑко име по подразбиране +- +- +- Maximum number of history items per entry +- МакÑимален брой елементи от иÑториÑта за Ð·Ð°Ð¿Ð¸Ñ +- +- +- Maximum size of history per entry +- МакÑимален размер на иÑториÑта за Ð·Ð°Ð¿Ð¸Ñ +- +- +- Delete Recycle Bin +- Изтриване на кошчето +- +- +- Do you want to delete the current recycle bin and all its contents? +-This action is not reversible. +- ИÑкате ли да изтриете текущото кошче и цÑлото му Ñъдържание? +-Това дейÑтвие е необратимо. +- +- +- (old) +- (Ñтар) +- +- +- Enable compression (recommended) +- Разрешаване на компреÑирането (препоръчително) +- +- +- +- DatabaseSettingsWidgetKeeShare +- +- Sharing +- СподелÑне +- +- +- Breadcrumb +- +- +- +- Type +- Тип +- +- +- Path +- Път +- +- +- Last Signer +- ПоÑледно подпиÑал +- +- +- Certificates +- Сертификати +- +- +- > +- Breadcrumb separator +- > +- +- +- +- DatabaseSettingsWidgetMetaDataSimple +- +- Database Name: +- Име на базата данни: +- +- +- Description: +- ОпиÑание: +- +- +- Database name field +- Поле за име на база данни +- +- +- Database description field +- Поле за опиÑание на базата данни +- +- +- +- DatabaseTabWidget +- +- KeePass 2 Database +- KeePass 2 база данни +- +- +- All files +- Ð’Ñички файлове +- +- +- Open database +- ОтварÑне на база данни +- +- +- CSV file +- CSV файл +- +- +- Merge database +- Сливане на база данни +- +- +- Open KeePass 1 database +- ОтворарÑне на KeePass 1 база данни +- +- +- KeePass 1 database +- KeePass 1 база данни +- +- +- Export database to CSV file +- ЕкÑпортиране на база данни в CSV файл +- +- +- Writing the CSV file failed. +- ЗапиÑÑŠÑ‚ на CSV файла е неуÑпешен. +- +- +- Database creation error +- Грешка при Ñъздаване на база данни +- +- +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- +- +- +- Select CSV file +- Изберете CSV файл +- +- +- New Database +- Ðова база данни +- +- +- %1 [New Database] +- Database tab name modifier +- %1 [Ðова база данни] +- +- +- %1 [Locked] +- Database tab name modifier +- %1 [Заключен] +- +- +- %1 [Read-only] +- Database tab name modifier +- %1 [Само за четене] +- +- +- Failed to open %1. It either does not exist or is not accessible. +- Грешка при отварÑне на %1. Или не ÑъщеÑтвува, или не е доÑтъпно. +- +- +- Export database to HTML file +- ЕкÑпортиране на база данни в HTML файл +- +- +- HTML file +- HTML файл +- +- +- Writing the HTML file failed. +- ЗапиÑÑŠÑ‚ на HTML файл е неуÑпешен. +- +- +- Export Confirmation +- Потвърждение на екÑпортирането +- +- +- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? +- Ще екÑпортирате вашата база данни в нешифрован файл. Това ще направи вашите пароли и чувÑтвителна Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ ÑƒÑзвими! ÐаиÑтина ли иÑкате да продължите? +- +- +- Open OPVault +- Отвори OPVault +- +- +- +- DatabaseWidget +- +- Searching... +- ТърÑене... +- +- +- Do you really want to delete the entry "%1" for good? +- ÐаиÑтина ли иÑкате да изтриете запиÑа "%1" за добро? +- +- +- Do you really want to move entry "%1" to the recycle bin? +- ÐаиÑтина ли иÑкате да премеÑтите Ð·Ð°Ð¿Ð¸Ñ "%1" в кошчето? +- +- +- Do you really want to move %n entry(s) to the recycle bin? +- ÐаиÑтина ли иÑкате да премеÑтите %n запиÑа(тата) в кошчето?ÐаиÑтина ли иÑкате да премеÑтите %n запиÑ(а) в кошчето? +- +- +- Execute command? +- Да Ñе изпълни командата? +- +- +- Do you really want to execute the following command?<br><br>%1<br> +- ÐаиÑтина ли иÑкате да изпълните Ñледната команда?<br><br>%1<br> +- +- +- Remember my choice +- Запомни Ð¼Ð¾Ñ Ð¸Ð·Ð±Ð¾Ñ€ +- +- +- Do you really want to delete the group "%1" for good? +- ÐаиÑтина ли иÑкате да изтриете групата "%1" за добро? +- +- +- No current database. +- ÐÑма текуща база данни. +- +- +- No source database, nothing to do. +- ÐÑма база данни източник, нищо за правене. +- +- +- Search Results (%1) +- Резултати от Ñ‚ÑŠÑ€Ñенето (%1) +- +- +- No Results +- ÐÑма резултати +- +- +- File has changed +- Файлът е променен +- +- +- The database file has changed. Do you want to load the changes? +- Файлът Ñ Ð±Ð°Ð·Ð°Ñ‚Ð° данни е променен. ИÑкате ли да заредите промените? +- +- +- Merge Request +- ЗаÑвка за Ñливане +- +- +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- Файлът Ñ Ð±Ð°Ð·Ð°Ñ‚Ð° данни е променен и имате незапиÑани промени. +-ИÑкате ли да обедините вашите промени? +- +- +- Empty recycle bin? +- Изпразване на кошчето? +- +- +- Are you sure you want to permanently delete everything from your recycle bin? +- ÐаиÑтина ли иÑкате да изтриете завинаги вÑичко от кошчето? +- +- +- Do you really want to delete %n entry(s) for good? +- ÐаиÑтина ли иÑкате да изтриете %n запиÑа(тата) за добро?ÐаиÑтина ли иÑкате да изтриете %n запиÑ(а) за добро? +- +- +- Delete entry(s)? +- Да Ñе изтрие ли запиÑ(и)?Да Ñе изтрие ли запиÑ(и)? +- +- +- Move entry(s) to recycle bin? +- ПремеÑтване на запиÑи в кошчето?ПремеÑтване на запиÑи в кошчето? +- +- +- Lock Database? +- Заключване на базата данни? +- +- +- You are editing an entry. Discard changes and lock anyway? +- Редактирате запиÑ. ОтхвърлÑне на промените и заключване въпреки това? +- +- +- "%1" was modified. +-Save changes? +- "%1" е променен. +-Да Ñе запишат ли промените? +- +- +- Database was modified. +-Save changes? +- Базата данни е променена. +-Да Ñе запишат ли промените? +- +- +- Save changes? +- Да Ñе запишат ли промените? +- +- +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- Ðе можа да Ñе отвори Ð½Ð¾Ð²Ð¸Ñ Ñ„Ð°Ð¹Ð» Ñ Ð±Ð°Ð·Ð°Ñ‚Ð° данни при опит за автоматично презареждане. +-Грешка: %1 +- +- +- Disable safe saves? +- ЗабранÑване на безопаÑно запазване? +- +- +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- KeePassXC не уÑÐ¿Ñ Ð´Ð° запази базата данни нÑколко пъти. Това вероÑтно Ñе дължи на уÑлугите за ÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½Ð° файлове, които заключват запиÑа на файла. +-ЗабранÑване на безопаÑното запазване и опитайте отново? +- +- +- Passwords +- Пароли +- +- +- Save database as +- ЗапиÑване на база данни като +- +- +- KeePass 2 Database +- KeePass 2 база данни +- +- +- Replace references to entry? +- Да Ñе заменÑÑ‚ ли препратките към запиÑа? +- +- +- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? +- +- +- +- Delete group +- Изтриване на група +- +- +- Move group to recycle bin? +- ПремеÑтване на група в кошчето? +- +- +- Do you really want to move the group "%1" to the recycle bin? +- ÐаиÑтина ли иÑкате да премеÑтите групата "%1" в кошчето? +- +- +- Successfully merged the database files. +- УÑпешно Ñлети файловете на базата данни. +- +- +- Database was not modified by merge operation. +- Базата данни не е модифицирана от Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¿Ð¾ Ñливане. +- +- +- Shared group... +- Споделена група... +- +- +- Writing the database failed: %1 +- Грешка при Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° базата данни: %1 +- +- +- This database is opened in read-only mode. Autosave is disabled. +- Тази база данни е отворена в режим Ñамо за четене. Ðвтоматичното запиÑване е изключено. +- +- +- Save database backup +- ЗапиÑване на резервно копие на базата данни +- +- +- Could not find database file: %1 +- Файлът Ñ Ð±Ð°Ð·Ð°Ñ‚Ð° данни не може да бъде намерен: %1 +- +- +- +- EditEntryWidget +- +- Entry +- Ð—Ð°Ð¿Ð¸Ñ +- +- +- Advanced +- Допълнителни +- +- +- Icon +- Икона +- +- +- Auto-Type +- Auto-Type +- +- +- Properties +- СвойÑтва +- +- +- History +- ИÑÑ‚Ð¾Ñ€Ð¸Ñ +- +- +- SSH Agent +- SSH Agent +- +- +- n/a +- n/a +- +- +- (encrypted) +- (шифровано) +- +- +- Select private key +- Избор на чаÑтен ключ +- +- +- Entry history +- ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ð½Ð° запиÑа +- +- +- Add entry +- ДобавÑне на Ð·Ð°Ð¿Ð¸Ñ +- +- +- Edit entry +- Редактиране на Ð·Ð°Ð¿Ð¸Ñ +- +- +- New attribute +- Ðов атрибут +- +- +- Are you sure you want to remove this attribute? +- ÐаиÑтина ли иÑкате да премахнете този атрибут? +- +- +- Tomorrow +- Утре +- +- +- %n week(s) +- %n Ñедмица(а)%n Ñедмица(и) +- +- +- %n month(s) +- %n меÑец(а)%n меÑец(а) +- +- +- Entry updated successfully. +- ЗапиÑÑŠÑ‚ е актуализиран уÑпешно. +- +- +- New attribute %1 +- Ðов атрибут %1 +- +- +- %n year(s) +- %n година(а)%n година(е) +- +- +- Confirm Removal +- Потвърждаване на премахването +- +- +- Browser Integration +- Ð˜Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ð½Ð° браузъра +- +- +- <empty URL> +- <empty URL> +- +- +- Are you sure you want to remove this URL? +- ÐаиÑтина ли иÑкате да премахнете този URL? +- +- +- Reveal +- Показване +- +- +- Hide +- Скриване +- +- +- Unsaved Changes +- ÐезапиÑани промени +- +- +- Would you like to save changes to this entry? +- Желаете ли да запишете промените в този запиÑ? +- +- +- [PROTECTED] Press Reveal to view or edit +- [ЗÐЩИТЕÐО] ÐатиÑнете "Показане", за да видите или редактирате +- +- +- Invalid Entry +- Ðевалиден Ð·Ð°Ð¿Ð¸Ñ +- +- +- An external merge operation has invalidated this entry. +-Unfortunately, any changes made have been lost. +- Външна Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð·Ð° обединÑване е анулирала този запиÑ. +-За Ñъжаление, вÑички направени промени Ñа загубени. +- +- +- +- EditEntryWidgetAdvanced +- +- Additional attributes +- Допълнителни атрибути +- +- +- Add +- Добавите +- +- +- Remove +- Премахване +- +- +- Edit Name +- Редактиране на името +- +- +- Protect +- Защити +- +- +- Reveal +- Показване +- +- +- Attachments +- ÐŸÑ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ +- +- +- Foreground Color: +- ЦвÑÑ‚ преден план: +- +- +- Background Color: +- ЦвÑÑ‚ заден план: +- +- +- Attribute selection +- Избор на атрибут +- +- +- Attribute value +- СтойноÑÑ‚ на атрибута +- +- +- Add a new attribute +- ДобавÑне на нов атрибут +- +- +- Remove selected attribute +- Премахни Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ +- +- +- Edit attribute name +- Редактиране на име на атрибут +- +- +- Toggle attribute protection +- Превключване на защита на атрибути +- +- +- Show a protected attribute +- Показване на защитен атрибут +- +- +- Foreground color selection +- Избор на цвÑÑ‚ за преден план +- +- +- Background color selection +- Избор на цвÑÑ‚ на фона +- +- +- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> +- <html><head/><body><p>Ðко е отметнато, запиÑÑŠÑ‚ нÑма да Ñе поÑви в отчети като "Проверка на ÑÑŠÑтоÑнието" и "HIBP", дори ако не Ð¾Ñ‚Ð³Ð¾Ð²Ð°Ñ€Ñ Ð½Ð° изиÑкваниÑта за качеÑтво (напр. ÐµÐ½Ñ‚Ñ€Ð¾Ð¿Ð¸Ñ Ð½Ð° паролата или преизползване). Можете да поÑтавите отметка, ако паролата не е под ваш контрола (например, ако Ñ‚Ñ€Ñбва да е четирицифрен ПИÐ), за да не може да Ñе претрупва отчетите.</p></body></html> +- +- +- Exclude from database reports +- Изключване от отчетите на базата данни +- +- +- +- EditEntryWidgetAutoType +- +- Enable Auto-Type for this entry +- Разреши Auto-Type за този Ð·Ð°Ð¿Ð¸Ñ +- +- +- Window Associations +- ÐÑÐ¾Ñ†Ð¸Ð°Ñ†Ð¸Ñ Ð½Ð° прозореца +- +- +- + +- + +- +- +- - +- - +- +- +- Window title: +- Заглавие на прозорец: +- +- +- Use a specific sequence for this association: +- Използвайте конкретна поÑледователноÑÑ‚ за тази аÑоциациÑ: +- +- +- Custom Auto-Type sequence +- ПерÑонализирана Auto-Type поÑледователноÑÑ‚ +- +- +- Open Auto-Type help webpage +- ОтварÑне на уеб Ñтраницата за помощ за Auto-Type +- +- +- Existing window associations +- СъщеÑтвуващи аÑоциации Ñ Ð¿Ñ€Ð¾Ð·Ð¾Ñ€Ñ†Ð¸ +- +- +- Add new window association +- ДобавÑне на нова аÑÐ¾Ñ†Ð¸Ð°Ñ†Ð¸Ñ Ñ Ð¿Ñ€Ð¾Ð·Ð¾Ñ€ÐµÑ† +- +- +- Remove selected window association +- Премахване на избраната аÑÐ¾Ñ†Ð¸Ð°Ñ†Ð¸Ñ Ñ Ð¿Ñ€Ð¾Ð·Ð¾Ñ€ÐµÑ† +- +- +- You can use an asterisk (*) to match everything +- Можете да използвате звездичка (*), за да ÑъответÑтва на вÑичко +- +- +- Set the window association title +- Задаване на заглавието на аÑоциациÑта Ñ Ð¿Ñ€Ð¾Ð·Ð¾Ñ€ÐµÑ† +- +- +- You can use an asterisk to match everything +- Можете да използвате звездичка, за да ÑъответÑтва на вÑичко +- +- +- Custom Auto-Type sequence for this window +- ПерÑонализирана Auto-Type поÑледователноÑÑ‚ +- +- +- Inherit default Auto-Type sequence from the group +- ÐаÑледена поÑледователноÑÑ‚ Auto-Type по подразбиране от групата +- +- +- Use custom Auto-Type sequence: +- Използвана перÑонализирана Auto-Type поÑледователноÑÑ‚ +- +- +- +- EditEntryWidgetBrowser +- +- These settings affect to the entry's behaviour with the browser extension. +- Тези наÑтройки порменÑÑ‚ поведението на запиÑа Ñ Ñ€Ð°Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð¸ÐµÑ‚Ð¾ за браузър. +- +- +- General +- ОÑновни +- +- +- Skip Auto-Submit for this entry +- ПропуÑкане на автоматично подаване за този Ð·Ð°Ð¿Ð¸Ñ +- +- +- Hide this entry from the browser extension +- Скриване на този елемент от разширението на браузъра +- +- +- Additional URL's +- Допълнителни URL-и +- +- +- Add +- Добавите +- +- +- Remove +- Премахване +- +- +- Edit +- Редактиране +- +- +- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. +- Изпращане Ñамо на тази наÑтройка към браузъра за HTTP Auth диалози. Ðко е включено, нормалните форми за влизане нÑма да покажат този Ð·Ð°Ð¿Ð¸Ñ Ð·Ð° ÑелекциÑ. +- +- +- Use this entry only with HTTP Basic Auth +- Използвай този Ð·Ð°Ð¿Ð¸Ñ Ñамо Ñ HTTP Basic Auth +- +- +- +- EditEntryWidgetHistory +- +- Show +- Показване +- +- +- Restore +- ВъзÑтановÑване +- +- +- Delete +- Триене +- +- +- Delete all +- Триене на вÑичко +- +- +- Entry history selection +- Избор на запиÑи от хронологиÑта +- +- +- Show entry at selected history state +- Показване на Ð·Ð°Ð¿Ð¸Ñ Ð² избраното ÑÑŠÑтоÑние от хронологиÑта +- +- +- Restore entry to selected history state +- ВъзÑтановÑване на запиÑа в избраното ÑÑŠÑтоÑние от хронологиÑта +- +- +- Delete selected history state +- Изтриване на избраното ÑÑŠÑтоÑние от хронологиÑта +- +- +- Delete all history +- Изтриване на цÑлата Ñ…Ñ€Ð¾Ð½Ð¾Ð»Ð¾Ð³Ð¸Ñ +- +- +- +- EditEntryWidgetMain +- +- URL: +- URL: +- +- +- Password: +- Парола: +- +- +- Title: +- Заглавие: +- +- +- Presets +- Предваритерни наÑтройки +- +- +- Toggle the checkbox to reveal the notes section. +- ПоÑтавете отметка в квадратчето, за да разкриете раздела за бележки. +- +- +- Username: +- ПотребителÑко име: +- +- +- Url field +- Поле за URL +- +- +- Download favicon for URL +- ИзтеглÑне на favicon за URL +- +- +- Password field +- Поле за парола +- +- +- Toggle notes visible +- Превключване на видимоÑтта на бележките +- +- +- Expiration field +- Поле за изтичане на Ñрока +- +- +- Expiration Presets +- Предварителни наÑтройки за изтичане на Ñрока +- +- +- Expiration presets +- Предварителни наÑтройки за изтичане на Ñрока +- +- +- Notes field +- Поле за бележки +- +- +- Title field +- Поле за заглавие +- +- +- Username field +- Поле за потребителÑко име +- +- +- Toggle expiration +- Превключване на изтичането на Ñрока +- +- +- Notes: +- Бележки: +- +- +- https://example.com +- https://example.com +- +- +- Expires: +- Изтича: +- +- +- Edit Entry +- Редактиране на Ð·Ð°Ð¿Ð¸Ñ +- +- +- +- EditEntryWidgetSSHAgent +- +- Form +- Форма +- +- +- Remove key from agent after +- Премахване на ключ Ñлед +- +- +- seconds +- Ñекунди +- +- +- Fingerprint +- Отпечатък +- +- +- Remove key from agent when database is closed/locked +- Премахване на ключа от агента при затварÑне/заключване на базата данни +- +- +- Public key +- Публичен ключ +- +- +- Add key to agent when database is opened/unlocked +- ДобавÑне на ключ към агента при отварÑне/отключване на базата данни +- +- +- Comment +- Коментар +- +- +- Decrypt +- ЗаклеймÑвам +- +- +- n/a +- n/a +- +- +- Copy to clipboard +- Копиране в клипборда +- +- +- Private key +- ЧаÑтен ключ +- +- +- External file +- Външен файл +- +- +- Browse... +- Button for opening file dialog +- Преглед... +- +- +- Attachment +- Приложение +- +- +- Add to agent +- ДобавÑне към агента +- +- +- Remove from agent +- Премахване от агента +- +- +- Require user confirmation when this key is used +- ИзиÑкване на потвърждение от Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ð¿Ñ€Ð¸ използване на този ключ +- +- +- Remove key from agent after specified seconds +- Премахване на ключа от агента Ñлед указани Ñекунди +- +- +- Browser for key file +- Избор на файл-ключ +- +- +- +- External key file +- Външен файл-ключ +- +- +- Select attachment file +- Избор на прикачен файл +- +- +- +- EditGroupWidget +- +- Group +- Група +- +- +- Icon +- Икона +- +- +- Properties +- СвойÑтва +- +- +- Add group +- ДобавÑне на група +- +- +- Edit group +- Редактиране на група +- +- +- Enable +- Включване +- +- +- Disable +- Изключване +- +- +- Inherit from parent group (%1) +- ÐаÑледÑване от родителÑката група (% 1) +- +- +- Entry has unsaved changes +- ЗапиÑÑŠÑ‚ има незапиÑани промени +- +- +- +- EditGroupWidgetKeeShare +- +- Type: +- Тип: +- +- +- Path: +- Път: +- +- +- Password: +- Парола: +- +- +- Inactive +- Ðеактивен +- +- +- KeeShare unsigned container +- KeeShare неподпиÑан контейнер +- +- +- KeeShare signed container +- KeeShare подпиÑан контейнер +- +- +- Select import source +- Избор на източник за импортиране +- +- +- Select export target +- Изберете целта за екÑпортиране +- +- +- Select import/export file +- Изберете файл за импортиране/екÑпортиране +- +- +- Clear +- ПочиÑти +- +- +- Import +- Импортиране +- +- +- Export +- ЕкÑпортиране +- +- +- Synchronize +- Синхронизиране +- +- +- Your KeePassXC version does not support sharing this container type. +-Supported extensions are: %1. +- Вашата KeePassXC верÑÐ¸Ñ Ð½Ðµ поддържа ÑподелÑнето на този тип контейнер. +-Поддържаните Ñ€Ð°Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ Ñа: %1. +- +- +- %1 is already being exported by this database. +- %1 вече Ñе екÑпортира от тази база данни. +- +- +- %1 is already being imported by this database. +- %1 вече е импортиран от тази база данни. +- +- +- %1 is being imported and exported by different groups in this database. +- %1 Ñе импортира и екÑпортира от различни групи в тази база данни. +- +- +- KeeShare is currently disabled. You can enable import/export in the application settings. +- KeeShare is a proper noun +- KeeShare е изключено в момента. Можете да разрешите импортиране/екÑпортиране в наÑтройките на приложението. +- +- +- Database export is currently disabled by application settings. +- ЕкÑпортирането на база данни в момента е изключено от наÑтройките на приложението. +- +- +- Database import is currently disabled by application settings. +- Импортирането на база данни в момента е изключено от наÑтройките на приложението. +- +- +- Sharing mode field +- Споделне на поле за режим +- +- +- Path to share file field +- Път до ÑподелÑне на общи реÑурÑи +- +- +- Password field +- Поле за парола +- +- +- Clear fields +- ИзчиÑти полетата +- +- +- Browse for share file +- Избор на Ñподелен файл +- +- +- Browse... +- Преглед... +- +- +- +- EditGroupWidgetMain +- +- Name field +- Поле за име +- +- +- Notes field +- Поле бележки +- +- +- Toggle expiration +- Превключване на изтичането на Ñрока +- +- +- Auto-Type toggle for this and sub groups +- Превключване на Auto-Type за тази и подгрупите Ñ +- +- +- Expiration field +- Поле за изтичане на Ñрока +- +- +- Search toggle for this and sub groups +- Превключване на Ñ‚ÑŠÑ€Ñенето за тази група и подгрупите Ñ +- +- +- Default auto-type sequence field +- Поле за auto-type поÑледователноÑÑ‚ по подразбиране +- +- +- Expires: +- Изтича: +- +- +- Use default Auto-Type sequence of parent group +- Използвай Auto-Type поÑледователноÑтта по подразбиране на родителÑката група +- +- +- Auto-Type: +- Auto-Type: +- +- +- Search: +- ТърÑене: +- +- +- Notes: +- Бележки: +- +- +- Name: +- Име: +- +- +- Set default Auto-Type sequence +- Задаване на Auto-Type поÑледователноÑÑ‚ по подразбиране +- +- +- Edit Group +- Редактиране на група +- +- +- +- EditWidgetIcons +- +- Add custom icon +- ДобавÑне на икона по избор +- +- +- Delete custom icon +- Изтриване на икона по избор +- +- +- Download favicon +- ИзтеглÑне на favicon +- +- +- Unable to fetch favicon. +- Ðе може да Ñе изтегли favicon. +- +- +- Images +- Ð˜Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ +- +- +- All files +- Ð’Ñички файлове +- +- +- Confirm Delete +- Потвърждаване на изтриването +- +- +- Select Image(s) +- Избор на изображение(Ñ) +- +- +- Successfully loaded %1 of %n icon(s) +- %1 от %n иконата(ите) е уÑпешно заредена%1 от %n иконата(ите) е уÑпешно заредена +- +- +- No icons were loaded +- Ðе Ñа заредени икони +- +- +- %n icon(s) already exist in the database +- %n иконата(ите) вече ÑъщеÑтвува в базата данни%n иконата(и) вече ÑъщеÑтвува в базата данни +- +- +- The following icon(s) failed: +- +- +- +- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? +- Тази икона Ñе използва от %n запиÑ(а) и ще бъде заменена от иконата по подразбиране. ÐаиÑтина ли иÑкате да го изтриете?Тази икона Ñе използва от %n запиÑ(а) и ще бъде заменена от иконата по подразбиране. ÐаиÑтина ли иÑкате да го изтриете? +- +- +- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security +- Можете да активирате уÑлугата за икона на DuckDuckGo в ИнÑтрументи -> ÐаÑтройки -> СигурноÑÑ‚ +- +- +- Download favicon for URL +- ИзтеглÑне на фавикон за URL +- +- +- Apply selected icon to subgroups and entries +- Прилагане на избраната икона към подгрупи и запиÑи +- +- +- Also apply to child groups +- Прилага Ñе и за подгрупи +- +- +- Also apply to child entries +- +- +- +- Also apply to all children +- Прилага Ñе и за вÑички деца +- +- +- Existing icon selected. +- Избрана е ÑъщеÑтвуваща икона. +- +- +- Use default icon +- Използване на иконата по подразбиране +- +- +- Use custom icon +- Използване на икона по избор +- +- +- Apply icon to... +- Икона за прилагане към... +- +- +- Apply to this group only +- Приложи Ñамо към тази група +- +- +- +- EditWidgetProperties +- +- Created: +- Създаден: +- +- +- Modified: +- Модифициран: +- +- +- Accessed: +- ДоÑтъпeн: +- +- +- Uuid: +- Uuid: +- +- +- Plugin Data +- Данни за приÑтавката +- +- +- Remove +- Премахване +- +- +- Delete plugin data? +- Изтриване на данни от приÑтавката? +- +- +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- ÐаиÑтина ли иÑкате да изтриете избраните данни за приÑтавката? +-Това може да доведе до неизправноÑÑ‚ на заÑегнатите приÑтавки. +- +- +- Key +- Ключ +- +- +- Value +- СтойноÑÑ‚ +- +- +- Datetime created +- Дата и Ñ‡Ð°Ñ Ð½Ð° Ñъздаване +- +- +- Datetime modified +- Дата и Ñ‡Ð°Ñ Ð½Ð° промÑна +- +- +- Datetime accessed +- Дата и Ñ‡Ð°Ñ Ð½Ð° доÑтъп +- +- +- Unique ID +- Уникален ID +- +- +- Plugin data +- Данни за приÑтавката +- +- +- Remove selected plugin data +- Премахване на избраните данни за приÑтавката +- +- +- +- Entry +- +- %1 - Clone +- %1 - Клониране +- +- +- +- EntryAttachmentsModel +- +- Name +- Име +- +- +- Size +- Размер +- +- +- +- EntryAttachmentsWidget +- +- Form +- Форма +- +- +- Add +- Добавите +- +- +- Remove +- Премахване +- +- +- Open +- Отвори +- +- +- Save +- Запази +- +- +- Select files +- Избор на файлове +- +- +- Are you sure you want to remove %n attachment(s)? +- ÐаиÑтина ли иÑкате да премахнете %n прикачени файлове?ÐаиÑтина ли иÑкате да премахнете %n прикачени файлове? +- +- +- Save attachments +- Ð—Ð°Ð¿Ð¸Ñ Ð½Ð° прикачени файлове +- +- +- Unable to create directory: +-%1 +- ДиректориÑта не може да бъде Ñъздадена: +-%1 +- +- +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- ÐаиÑтина ли иÑкате да замеÑтите ÑъщеÑÑ‚Ð²ÑƒÐ²Ð°Ñ‰Ð¸Ñ Ñ„Ð°Ð¹Ð» "%1" Ñ Ð¿Ñ€Ð¸ÐºÐ°Ñ‡ÐµÐ½Ð¸Ñ? +- +- +- Confirm overwrite +- Потвърждаване на презапиÑването +- +- +- Unable to save attachments: +-%1 +- Ðе може да Ñе запишат прикачените файлове: +-%1 +- +- +- Unable to open attachment: +-%1 +- Ðе може да Ñе отворÑÑ‚ прикаченте файл: +-%1 +- +- +- Unable to open attachments: +-%1 +- Ðе може да Ñе отворÑÑ‚ прикачените файлове: +-%1 +- +- +- Confirm remove +- Потвърдете премахването +- +- +- Unable to open file(s): +-%1 +- Ðе може да Ñе отворÑÑ‚ файлове: +-%1Ðе може да Ñе отворÑÑ‚ файлове: +-%1 +- +- +- Attachments +- ÐŸÑ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ +- +- +- Add new attachment +- ДобавÑне на нов прикачен файл +- +- +- Remove selected attachment +- Премахване на Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¸ÐºÐ°Ñ‡ÐµÐ½ файл +- +- +- Open selected attachment +- ОтварÑне на Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¸ÐºÐ°Ñ‡ÐµÐ½ файл +- +- +- Save selected attachment to disk +- ЗапиÑване на Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¸ÐºÐ°Ñ‡ÐµÐ½ файл на диÑка +- +- +- %1 is a big file (%2 MB). +-Your database may get very large and reduce performance. +- +-Are you sure to add this file? +- %1 е голÑм файл (%2 МБ). +-Вашата база данни може да Ñтане много голÑма и да Ñе намали производителноÑтта. +- +-ÐаиÑтина ли иÑкате да добавите файла? +- +- +- Confirm Attachment +- Потвърждаване на Ð¿Ñ€Ð¸ÐºÐ°Ñ‡ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð» +- +- +- +- EntryAttributesModel +- +- Name +- Име +- +- +- +- EntryHistoryModel +- +- Last modified +- ПоÑледна промÑна +- +- +- Title +- Заглавие +- +- +- Username +- Портебител +- +- +- URL +- Url +- +- +- +- EntryModel +- +- Ref: +- Reference abbreviation +- РеференциÑ: +- +- +- Group +- Група +- +- +- Title +- Заглавие +- +- +- Username +- Портебител +- +- +- URL +- Url +- +- +- Never +- Ðикога +- +- +- Password +- Парола +- +- +- Notes +- Бележки +- +- +- Expires +- Изтича +- +- +- Created +- Създаден +- +- +- Modified +- Променен +- +- +- Accessed +- ДоÑтъпен +- +- +- Attachments +- ÐŸÑ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ +- +- +- Size +- Размер +- +- +- Group name +- Име на група +- +- +- Entry title +- Заглавие на запиÑа +- +- +- Entry notes +- Бележки на запиÑа +- +- +- Entry expires at +- ЗапиÑа изтича на +- +- +- Creation date +- Дата на Ñъздаване +- +- +- Last modification date +- ПоÑледна дата на промÑна +- +- +- Last access date +- ПоÑледна дата на доÑтъп +- +- +- Attached files +- Прикачени файлове +- +- +- Entry size +- Размер на запиÑа +- +- +- Has attachments +- Има прикачени файлове +- +- +- Has TOTP one-time password +- Има еднократна TOTP парола +- +- +- +- EntryPreviewWidget +- +- Close +- ЗатварÑне +- +- +- General +- ОÑновни +- +- +- Username +- Портебител +- +- +- Password +- Парола +- +- +- Expiration +- Изтичане +- +- +- URL +- Url +- +- +- Attributes +- Ðтрибути +- +- +- Attachments +- ÐŸÑ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ +- +- +- Notes +- Бележки +- +- +- Autotype +- Ðвтоматично въвеждане +- +- +- Window +- Прозорец +- +- +- Sequence +- ПоÑледователноÑÑ‚ +- +- +- Searching +- ТърÑене +- +- +- Search +- ТърÑи +- +- +- Clear +- ПочиÑти +- +- +- Never +- Ðикога +- +- +- [PROTECTED] +- [ЗÐЩИТЕÐО] +- +- +- Enabled +- Включено +- +- +- Disabled +- Изключено +- +- +- Share +- Сподели +- +- +- Display current TOTP value +- Показване на текущата ÑтойноÑÑ‚ на TOTP +- +- +- Advanced +- Допълнителни +- +- +- Default Sequence +- ПоÑледователноÑÑ‚ по подразбиране +- +- +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- attributes line +- +- +- +- +- EntryURLModel +- +- Invalid URL +- Ðевалиден URL +- +- +- +- EntryView +- +- Fit to window +- Побиране в прозореца +- +- +- Fit to contents +- ÐапаÑване ÑпрÑмо Ñъдържанието +- +- +- Reset to defaults +- Ðулиране на наÑтройките към подразбиращите Ñе +- +- +- Has attachments +- Entry attachment icon toggle +- Има прикачени файлове +- +- +- Has TOTP +- Entry TOTP icon toggle +- Има TOTP +- +- +- +- FdoSecrets::Item +- +- Entry "%1" from database "%2" was used by %3 +- Ð—Ð°Ð¿Ð¸Ñ "%1" от база данни "%2" е използван от %3 +- +- +- +- FdoSecrets::Service +- +- Failed to register DBus service at %1.<br/> +- ÐеуÑпешно региÑтриране на уÑлугата DBus на % 1.<br/> +- +- +- %n Entry(s) was used by %1 +- %1 is the name of an application +- %n ЗапиÑ(и) е(Ñа) използван(и) от %1%n ЗапиÑ(а) е(Ñа) използван(и) от %1 +- +- +- +- FdoSecrets::SettingsDatabaseModel +- +- File Name +- Име на файл +- +- +- Group +- Група +- +- +- Manage +- Управление +- +- +- Unlock to show +- Отключване за показване +- +- +- None +- ÐÑма +- +- +- +- FdoSecrets::SettingsSessionModel +- +- Application +- Приложение +- +- +- Manage +- Управление +- +- +- +- FdoSecretsPlugin +- +- <b>Fdo Secret Service:</b> %1 +- <b>Fdo Secret Service:</b> %1 +- +- +- Unknown +- Unknown PID +- ÐеизвеÑтен +- +- +- Unknown +- Unknown executable path +- ÐеизвеÑтен +- +- +- <i>PID: %1, Executable: %2</i> +- <i>PID: 1234, Executable: /path/to/exe</i> +- <i>PID: %1, Изпълним файл: %2</i> +- +- +- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. +- ИзпълнÑва Ñе друг Secret Service (%1).<br/>Спрете или премахнете, преди да активирате повторно интегрирането на Secret Service. +- +- +- +- Group +- +- [empty] +- group has no children +- [празно] +- +- +- +- HibpDownloader +- +- Online password validation failed +- ÐеуÑпешна онлайн проверка паролата +- +- +- +- IconDownloaderDialog +- +- Download Favicons +- ИзтеглÑне на Favicons +- +- +- Cancel +- Отказ +- +- +- Having trouble downloading icons? +-You can enable the DuckDuckGo website icon service in the security section of the application settings. +- Имате проблеми Ñ Ð¸Ð·Ñ‚ÐµÐ³Ð»Ñнето на икони? +-Можете да активирате уÑлугата за икони на duckDuckGo в раздела за защита на наÑтройките на приложението. +- +- +- Close +- ЗатварÑне +- +- +- URL +- Url +- +- +- Status +- Статут +- +- +- Please wait, processing entry list... +- МолÑ, изчакайте, обработка на ÑпиÑъка Ñ Ð·Ð°Ð¿Ð¸Ñи... +- +- +- Downloading... +- ИзтеглÑне... +- +- +- Ok +- OK +- +- +- Already Exists +- Вече ÑъщеÑтвува +- +- +- Download Failed +- ÐеуÑпешно изтеглÑне +- +- +- Downloading favicons (%1/%2)... +- ИзтеглÑне на favicons (%1/%2)... +- +- +- +- KMessageWidget +- +- &Close +- &ЗатварÑне +- +- +- Close message +- Съобщение при затарÑне +- +- +- +- Kdbx3Reader +- +- missing database headers +- липÑващи хедъри на базата данни +- +- +- Header doesn't match hash +- Хедърът не Ñъвпада Ñ Ñ…ÐµÑˆÐ° +- +- +- Invalid header id size +- Ðевалиден размер на id хедъра +- +- +- Invalid header field length +- Ðевалидна дължина на полето на хедъра +- +- +- Invalid header data length +- Ðевалидна дължина на данните на хедъра +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- ПредоÑтавени Ñа невалидни идентификационни данни, опитайте отново. +-Ðко това Ñе повтори вероÑтно базата данни е повредена. +- +- +- Unable to calculate database key +- Ðе може да Ñе изчиÑли ключът на базата данни +- +- +- Unable to issue challenge-response: %1 +- Грешка при издаването на challenge-response: %1 +- +- +- +- Kdbx3Writer +- +- Unable to issue challenge-response: %1 +- Грешка при издаването на challenge-response: %1 +- +- +- Unable to calculate database key +- Ðе може да Ñе изчиÑли ключът на базата данни +- +- +- +- Kdbx4Reader +- +- missing database headers +- липÑващи хедъри на базата данни +- +- +- Invalid header checksum size +- Ðевалиден размер на контролната Ñума на хедъра +- +- +- Header SHA256 mismatch +- Sha256 неÑъответÑтвие на хедъра +- +- +- Unknown cipher +- ÐеизвеÑтно шифър +- +- +- Invalid header id size +- Ðевалиден размер на id хедъра +- +- +- Invalid header field length +- Ðевалидна дължина на полето на хедъра +- +- +- Invalid header data length +- Ðевалидна дължина на данните на хедъра +- +- +- Failed to open buffer for KDF parameters in header +- ÐеуÑпешно отварÑне на буфер за KDF параметрите в хедъра +- +- +- Unsupported key derivation function (KDF) or invalid parameters +- Ðеподдържана Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð·Ð° извличане на ключове (KDF) или невалидни параметри +- +- +- Legacy header fields found in KDBX4 file. +- ОÑтарели полета на хедъри намерени в KDBX4 файл. +- +- +- Invalid inner header id size +- Ðевалиден размер на Ð²ÑŠÑ‚Ñ€ÐµÑˆÐ½Ð¸Ñ id хедъра +- +- +- Invalid inner header field length +- Ðевалидна дължина на полето на Ð²ÑŠÑ‚Ñ€ÐµÑˆÐ½Ð¸Ñ Ñ…ÐµÐ´ÑŠÑ€Ð° +- +- +- Invalid inner header binary size +- Ðевалиден размер на binary хедъра +- +- +- Unsupported KeePass variant map version. +- Translation: variant map = data structure for storing meta data +- Ðеподдържана верÑÐ¸Ñ Ð½Ð° KeePass Ñтруктурата Ñ Ð¼ÐµÑ‚Ð°Ð´Ð°Ð½Ð½Ð¸. +- +- +- Invalid variant map entry name length +- Translation: variant map = data structure for storing meta data +- Ðевалидна дължина на името в Ñтруктурата Ñ Ð¼ÐµÑ‚Ð°Ð´Ð°Ð½Ð½Ð¸ +- +- +- Invalid variant map entry name data +- Translation: variant map = data structure for storing meta data +- Ðевалидна ÑтойноÑÑ‚ на името в Ñтруктурата Ñ Ð¼ÐµÑ‚Ð°Ð´Ð°Ð½Ð½Ð¸ +- +- +- Invalid variant map entry value length +- Translation: variant map = data structure for storing meta data +- Ðевалидна дължина на ÑтойноÑтта в Ñтруктурата Ñ Ð¼ÐµÑ‚Ð°Ð´Ð°Ð½Ð½Ð¸ +- +- +- Invalid variant map entry value data +- Translation comment: variant map = data structure for storing meta data +- Ðевалидна ÑтойноÑÑ‚ на ÑтойноÑтта в Ñтруктурата Ñ Ð¼ÐµÑ‚Ð°Ð´Ð°Ð½Ð½Ð¸ +- +- +- Invalid variant map Bool entry value length +- Translation: variant map = data structure for storing meta data +- Ðевалидна дължина на Bool ÑтойноÑтта в Ñтруктурата Ñ Ð¼ÐµÑ‚Ð°Ð´Ð°Ð½Ð½Ð¸ +- +- +- Invalid variant map Int32 entry value length +- Translation: variant map = data structure for storing meta data +- Ðевалидна дължина на Int32 в Ñтруктурата Ñ Ð¼ÐµÑ‚Ð°Ð´Ð°Ð½Ð½Ð¸ +- +- +- Invalid variant map UInt32 entry value length +- Translation: variant map = data structure for storing meta data +- Ðевалидна дължина на UInt32 в Ñтруктурата Ñ Ð¼ÐµÑ‚Ð°Ð´Ð°Ð½Ð½Ð¸ +- +- +- Invalid variant map Int64 entry value length +- Translation: variant map = data structure for storing meta data +- Ðевалидна дължина на Int64 в Ñтруктурата Ñ Ð¼ÐµÑ‚Ð°Ð´Ð°Ð½Ð½Ð¸ +- +- +- Invalid variant map UInt64 entry value length +- Translation: variant map = data structure for storing meta data +- Ðевалидна дължина на UInt64 в Ñтруктурата Ñ Ð¼ÐµÑ‚Ð°Ð´Ð°Ð½Ð½Ð¸ +- +- +- Invalid variant map entry type +- Translation: variant map = data structure for storing meta data +- Ðевалиден типа Ð·Ð°Ð¿Ð¸Ñ Ð² Ñтруктурата Ñ Ð¼ÐµÑ‚Ð°Ð´Ð°Ð½Ð½Ð¸ +- +- +- Invalid variant map field type size +- Translation: variant map = data structure for storing meta data +- Ðевалиден размер на типа Ð·Ð°Ð¿Ð¸Ñ Ð² Ñтруктурата Ñ Ð¼ÐµÑ‚Ð°Ð´Ð°Ð½Ð½Ð¸ +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- ПредоÑтавени Ñа невалидни идентификационни данни, опитайте отново. +-Ðко това Ñе повтори вероÑтно базата данни е повредена. +- +- +- (HMAC mismatch) +- (HMAC неÑъответÑтвие) +- +- +- Unable to calculate database key: %1 +- Грешка при изчиÑлÑване на ключа на базата данни: %1 +- +- +- +- Kdbx4Writer +- +- Invalid symmetric cipher algorithm. +- Ðевалиден алгоритъм за Ñиметричено шифриране. +- +- +- Invalid symmetric cipher IV size. +- IV = Initialization Vector for symmetric cipher +- Ðевалиден размер на IV за ÑÐ¸Ð¼ÐµÑ‚Ñ€Ð¸Ñ‡Ð½Ð¸Ñ ÑˆÐ¸Ñ„ÑŠÑ€. +- +- +- Failed to serialize KDF parameters variant map +- Translation comment: variant map = data structure for storing meta data +- ÐеуÑпешно Ñериализиране на KDF параметърите в Ñтруктурата Ñ Ð¼ÐµÑ‚Ð°Ð´Ð°Ð½Ð½Ð¸ +- +- +- Unable to calculate database key: %1 +- Грешка при изчиÑлÑване на ключа на базата данни: %1 +- +- +- +- KdbxReader +- +- Unsupported cipher +- Ðеподдържан шифър +- +- +- Invalid compression flags length +- Ðевалидна дължина на флаговете за компреÑиране +- +- +- Unsupported compression algorithm +- Ðеподдържан алгоритъм за компреÑиране +- +- +- Invalid master seed size +- Ðевалиден размер на Ð³Ð»Ð°Ð²Ð½Ð¸Ñ seed +- +- +- Invalid transform seed size +- Ðевалиден размер на seed за транÑформиране +- +- +- Invalid transform rounds size +- Ðевалиден размер на рундовете за преобразуване +- +- +- Invalid start bytes size +- Ðевалиден размер на Ñтартовите байтове +- +- +- Invalid random stream id size +- Ðевалиден произволен размер на идентификатора на ÑÐ»ÑƒÑ‡Ð°Ð¹Ð½Ð¸Ñ Ð¿Ð¾Ñ‚Ð¾Ðº +- +- +- Invalid inner random stream cipher +- +- +- +- Not a KeePass database. +- Ðе е KeePass база данни. +- +- +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- ИзбраниÑÑ‚ файл е Ñтара база данни KeePass 1 (.kdb). +- +-Можете да го импортирате, като кликнете върху Database -> "Импортиране keePass 1 база данни...". +-Това е еднопоÑочна миграциÑ. ÐÑма да можете да отворите импортираната база данни ÑÑŠÑ Ñтарата верÑÐ¸Ñ Ð½Ð° KeePassX 0.4. +- +- +- Unsupported KeePass 2 database version. +- Ðеподдържана верÑÐ¸Ñ Ð½Ð° KeePass 2 базата данни. +- +- +- Invalid cipher uuid length: %1 (length=%2) +- Ðевалидна дължина на uuid не шифъра: %1 (дължина=%2) +- +- +- Unable to parse UUID: %1 +- Грешка при анализ на UUID: %1 +- +- +- Failed to read database file. +- Грешка при четене на файл Ñ Ð±Ð°Ð·Ð° данни. +- +- +- +- KdbxXmlReader +- +- XML parsing failure: %1 +- Грешка при xml анализ: %1 +- +- +- No root group +- Без коренова група +- +- +- Missing icon uuid or data +- ЛипÑа на uuid или данни за иконата +- +- +- Missing custom data key or value +- ЛипÑващ перÑонализиран ключ за данни или ÑтойноÑÑ‚ +- +- +- Multiple group elements +- МножеÑтво елементи на група +- +- +- Null group uuid +- +- +- +- Invalid group icon number +- +- +- +- Invalid EnableAutoType value +- Ðевалидна EnableAutoType ÑтойноÑÑ‚ +- +- +- Invalid EnableSearching value +- Ðевалидна EnableSearching ÑтойноÑÑ‚ +- +- +- No group uuid found +- Ðе е намерен uuid на групата +- +- +- Null DeleteObject uuid +- +- +- +- Missing DeletedObject uuid or time +- ЛипÑва DeletedObject uuid или време +- +- +- Null entry uuid +- +- +- +- Invalid entry icon number +- +- +- +- History element in history entry +- Елемент от хронологиÑта в хронологичеÑки Ð·Ð°Ð¿Ð¸Ñ +- +- +- No entry uuid found +- Ðе е намерен uuid на запиÑа +- +- +- History element with different uuid +- ХронологичеÑки елемент Ñ Ñ€Ð°Ð·Ð»Ð¸Ñ‡ÐµÐ½ uuid +- +- +- Duplicate custom attribute found +- Ðамерени повтарÑщи Ñе перÑонализирани атрибути +- +- +- Entry string key or value missing +- ЛипÑващ низов ключ или ÑтойноÑÑ‚ на запиÑа +- +- +- Entry binary key or value missing +- ЛипÑващ двоичен ключ или ÑтойноÑÑ‚ на Ð·Ð°Ð¿Ð¸Ñ +- +- +- Auto-type association window or sequence missing +- ЛипÑва аÑÐ¾Ñ†Ð¸Ð°Ð·Ð¸Ñ Ñ Ð¿Ñ€Ð¾Ð·Ð¾Ñ€ÐµÑ† или поÑледователноÑÑ‚ за Auto-Type +- +- +- Invalid bool value +- Ðевалидна бинарна ÑтойноÑÑ‚ +- +- +- Invalid date time value +- Ðевалидна ÑтойноÑÑ‚ за дата и Ñ‡Ð°Ñ +- +- +- Invalid color value +- Ðевалидна ÑтойноÑÑ‚ за цвета +- +- +- Invalid color rgb part +- Ðевалидна rgb чаÑÑ‚ за цвÑÑ‚ +- +- +- Invalid number value +- Ðевалидна чиÑлова ÑтойноÑÑ‚ +- +- +- Invalid uuid value +- Ðевалидна uuid ÑтойноÑÑ‚ +- +- +- Unable to decompress binary +- Translator meant is a binary data inside an entry +- Ðе може да Ñе декомпреÑира двоичените данни +- +- +- XML error: +-%1 +-Line %2, column %3 +- XML грешка: +-%1 +-Ред %2, колона %3 +- +- +- +- KeeAgentSettings +- +- Invalid KeeAgent settings file structure. +- Ðевалидна Ñтруктура на файла Ñ KeeAgent наÑтройки. +- +- +- Private key is an attachment but no attachments provided. +- ЛичниÑÑ‚ ключ е прикачен, но нÑма прикачени файлове. +- +- +- Private key is empty +- ЛичниÑÑ‚ ключ е празен +- +- +- File too large to be a private key +- Файлът е твърде голÑм, за да бъде чаÑтен ключ +- +- +- Failed to open private key +- ÐеуÑпешно отварÑне на чаÑÑ‚Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡ +- +- +- +- KeePass1OpenWidget +- +- Unable to open the database. +- Базата данни не може да Ñе отвори. +- +- +- Import KeePass1 Database +- Импортиране на KeePass1 база данни +- +- +- +- KeePass1Reader +- +- Unable to read keyfile. +- Файл-ключа не може да бъде прочетен. +- +- +- Not a KeePass database. +- Ðе е KeePass база данни. +- +- +- Unsupported encryption algorithm. +- Ðеподдържан алгоритъм за шифроване. +- +- +- Unsupported KeePass database version. +- Ðеподдържана верÑÐ¸Ñ Ð½Ð° KeePass базата данни. +- +- +- Unable to read encryption IV +- IV = Initialization Vector for symmetric cipher +- Ðе може да бъде прочетено шифровъчното IV +- +- +- Invalid number of groups +- Ðевалиден брой групи +- +- +- Invalid number of entries +- Ðевалиден брой запиÑи +- +- +- Invalid content hash size +- Ðевалиден размер на хеш на Ñъдържанието +- +- +- Invalid transform seed size +- Ðевалиден размер на seed за транÑформиране +- +- +- Invalid number of transform rounds +- Ðевалиден брой преобразуващи рундове +- +- +- Unable to construct group tree +- Ðе може да Ñе изгради дърво на групите +- +- +- Root +- Корен +- +- +- Key transformation failed +- ÐеуÑпешно преобразуване на ключа +- +- +- Invalid group field type number +- Ðевалиден брой на поле за групата +- +- +- Invalid group field size +- Ðевалиден размер на поле за групата +- +- +- Read group field data doesn't match size +- +- +- +- Incorrect group id field size +- +- +- +- Incorrect group creation time field size +- +- +- +- Incorrect group modification time field size +- +- +- +- Incorrect group access time field size +- +- +- +- Incorrect group expiry time field size +- Ðеправилен размер на полето за изтичане на времето на група +- +- +- Incorrect group icon field size +- Ðеправилен размер на поле за икона на група +- +- +- Incorrect group level field size +- +- +- +- Invalid group field type +- +- +- +- Missing group id or level +- +- +- +- Missing entry field type number +- +- +- +- Invalid entry field size +- Ðевалиден размер на поле за въвеждане +- +- +- Read entry field data doesn't match size +- +- +- +- Invalid entry uuid field size +- +- +- +- Invalid entry group id field size +- +- +- +- Invalid entry icon field size +- +- +- +- Invalid entry creation time field size +- +- +- +- Invalid entry modification time field size +- +- +- +- Invalid entry expiry time field size +- +- +- +- Invalid entry field type +- +- +- +- unable to seek to content position +- не може да Ñе намери Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ñ Ð·Ð° Ñъдържанието +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- ПредоÑтавени Ñа невалидни идентификационни данни, опитайте отново. +-Ðко това Ñе повтори вероÑтно базата данни е повредена. +- +- +- Unable to calculate database key +- Ðе може да Ñе изчиÑли ключът на базата данни +- +- +- +- KeeShare +- +- Invalid sharing reference +- Ðевалидна препратка за ÑподелÑне +- +- +- Inactive share %1 +- Ðеактивено ÑподелÑне %1 +- +- +- Imported from %1 +- Импортиран от %1 +- +- +- Exported to %1 +- ЕкÑпортиран в %1 +- +- +- Synchronized with %1 +- Синхронизирано Ñ %1 +- +- +- Import is disabled in settings +- Импортирането е забранено в наÑтройките +- +- +- Export is disabled in settings +- ЕкÑпортирането е забранено в наÑтройките +- +- +- Inactive share +- Ðеактивено ÑподелÑне +- +- +- Imported from +- Импортирани от +- +- +- Exported to +- ЕкÑпортирани в +- +- +- Synchronized with +- Синхронизирани Ñ +- +- +- +- KeyComponentWidget +- +- Key Component +- Компонент на ключа +- +- +- Key Component Description +- ОпиÑание на компонента към ключа +- +- +- Cancel +- Отказ +- +- +- Key Component set, click to change or remove +- Компонент към ключа е запазен, щракнете, за да го промените или премахнете +- +- +- Add %1 +- Add a key component +- Добави %1 +- +- +- Change %1 +- Change a key component +- Промени %1 +- +- +- Remove %1 +- Remove a key component +- Премахни %1 +- +- +- %1 set, click to change or remove +- Change or remove a key component +- %1 е зададен, щракнете, за да промените или премахнете +- +- +- +- KeyFileEditWidget +- +- Generate +- Генериране +- +- +- Key File +- Файл-ключ +- +- +- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> +- <p>Можете да добавите ключ-файл, Ñъдържащ Ñлучайни байтове за допълнителна ÑигурноÑÑ‚.</p><p>ТрÑбва да го пазите в тайна и никога да не го губите или ще бъдете заключени!</p> +- +- +- Error loading the key file '%1' +-Message: %2 +- Грешка при зареждане на файл-ключа "%1" +-Съобщение: %2 +- +- +- Key files +- Файл-ключове +- +- +- All files +- Ð’Ñички файлове +- +- +- Create Key File... +- Създаване на ключ-файл... +- +- +- Error creating key file +- Грешка при Ñъздаване на файл-ключ +- +- +- Unable to create key file: %1 +- Ðе може да Ñе Ñъздаде ключ-файл: %1 +- +- +- Select a key file +- Избор на файл-ключ +- +- +- Key file selection +- Избор на файл-ключ +- +- +- Browse for key file +- Избор на файл-ключ +- +- +- Browse... +- Преглед... +- +- +- Generate a new key file +- Генериране на нов файл-ключ +- +- +- Note: Do not use a file that may change as that will prevent you from unlocking your database! +- Забележка: Ðе използвайте файл, който може да Ñе промени, понеже това ще Ви попречи да отключите вашата база данни! +- +- +- Invalid Key File +- Ðевалиден файл-ключ +- +- +- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. +- Ðе можете да използвате текущата база данни като ÑобÑтвен файл-ключ. Изберете друг файл или Ñъздайте нов файл-ключ. +- +- +- Suspicious Key File +- Подозрителен файл-ключ +- +- +- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. +-Are you sure you want to continue with this file? +- ИзбраниÑÑ‚ файл-ключ изглежда като файл Ñ Ð±Ð°Ð·Ð° данни. Файл-ключът Ñ‚Ñ€Ñбва да е Ñтатичен файл, който никога не Ñе Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ Ð¸Ð»Ð¸ ще загубите доÑтъпа до вашата база данни завинаги. +-ÐаиÑтина ли иÑкате да продължите Ñ Ñ‚Ð¾Ð·Ð¸ файл? +- +- +- Old key file format +- Стар файлов формат на ключа +- +- +- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. +- Използвате оÑтарÑл файлов формат на ключа, който KeePass XC може да Ñпре да поддържа в бъдеще. +- +-ПомиÑлете за генериране на нов ключ файл. +- +- +- +- MainWindow +- +- &Database +- & База данни +- +- +- &Help +- &Помощ +- +- +- &Groups +- &Групи +- +- +- &Tools +- &ИнÑтрументи +- +- +- &Quit +- &Изход +- +- +- &About +- &ОтноÑно +- +- +- Database settings +- ÐаÑтройки на базата данни +- +- +- Copy username to clipboard +- Копиране на потребителÑко име в клипборда +- +- +- Copy password to clipboard +- Копиране на парола в клипборда +- +- +- &Settings +- &ÐаÑтройки +- +- +- &Title +- &Заглавие +- +- +- Copy title to clipboard +- Копиране на заглавие в клипборда +- +- +- &URL +- &URL +- +- +- Copy URL to clipboard +- Копиране на URL в клипборда +- +- +- &Notes +- &Бележки +- +- +- Copy notes to clipboard +- Копиране на бележки в клипборда +- +- +- Copy &TOTP +- Копиране на &TOTP +- +- +- E&mpty recycle bin +- Изпразване на кошчето +- +- +- Clear history +- ИзчиÑтване на иÑториÑта +- +- +- Access error for config file %1 +- Грешка при доÑтъп на ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð» %1 +- +- +- Settings +- ÐаÑтройки +- +- +- Toggle window +- Превключване на прозореца +- +- +- Quit KeePassXC +- Изход от KeePassXC +- +- +- Please touch the button on your YubiKey! +- МолÑ, докоÑнете бутона на yubiKey! +- +- +- WARNING: You are using an unstable build of KeePassXC! +-There is a high risk of corruption, maintain a backup of your databases. +-This version is not meant for production use. +- Ð’ÐИМÐÐИЕ: Използвате неÑтабилна ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð°Ñ†Ð¸Ñ Ð½Ð° KeePassXC! +-СъщеÑтвува виÑок риÑк от повреда, поддържайте резервно копие на вашите бази данни. +-Тази верÑÐ¸Ñ Ð½Ðµ е предназначена за производÑтвена употреба. +- +- +- &Donate +- &Дарете +- +- +- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +-We recommend you use the AppImage available on our downloads page. +- Ð’ÐИМÐÐИЕ: Вашата верÑÐ¸Ñ Ð½Ð° Qt може да доведе до това keePassXC да Ñе Ñрине Ñ ÐµÐºÑ€Ð°Ð½Ð½Ð° клавиатура! +-Препоръчваме да използвате AppImage варианта от Ñтраницата ни за изтеглÑне. +- +- +- &Import +- &Импортиране +- +- +- Create a new database +- Създаване на нова база данни +- +- +- Merge from another KDBX database +- Сливане от друга KDBX база данни +- +- +- Add a new entry +- ДобавÑне на нов Ð·Ð°Ð¿Ð¸Ñ +- +- +- View or edit entry +- Преглед или редактиране на Ð·Ð°Ð¿Ð¸Ñ +- +- +- Add a new group +- ДобавÑне на нова група +- +- +- Perform &Auto-Type +- Изпълнение на &Auto-Type +- +- +- Open &URL +- ОтварÑне на &URL +- +- +- Import a KeePass 1 database +- Импортиране на KeePass 1 база данни +- +- +- Import a CSV file +- Импортиране на CSV файл +- +- +- NOTE: You are using a pre-release version of KeePassXC! +-Expect some bugs and minor issues, this version is not meant for production use. +- ЗÐБЕЛЕЖКÐ: Използвате предварителна верÑÐ¸Ñ Ð½Ð° KeePassXC! +-Очаквайте нÑкои грешки и незначителни проблеми, тази верÑÐ¸Ñ Ð½Ðµ е предназначена за производÑтво. +- +- +- Check for updates on startup? +- Проверка за актуализации при Ñтартиране? +- +- +- Would you like KeePassXC to check for updates on startup? +- ИÑкате ли KeePassXC да проверите за актуализации при Ñтартиране? +- +- +- You can always check for updates manually from the application menu. +- Винаги можете да проверите за актуализации ръчно от менюто на приложението. +- +- +- &Export +- &ЕкÑпортиране +- +- +- Sort &A-Z +- Сортиране &Ð-Я +- +- +- Sort &Z-A +- Сортиране &Я-Ð +- +- +- &Password Generator +- &Генератор на парола +- +- +- Import a 1Password Vault +- Импортиране на 1Password Vault +- +- +- &Getting Started +- &Първи Ñтъпки +- +- +- &User Guide +- &РъководÑтво за Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ +- +- +- &Keyboard Shortcuts +- &Клавишни комбинации +- +- +- &Recent Databases +- &Скорошни бази данни +- +- +- &Entries +- &ЗапиÑи +- +- +- Copy Att&ribute +- Копиране на атрибута +- +- +- TOTP +- TOTP +- +- +- View +- Изглед +- +- +- Theme +- Тема +- +- +- &Check for Updates +- &Проверка за актуализации +- +- +- &Open Database… +- &ОтварÑне на база данни +- +- +- &Save Database +- &ЗапиÑване на базата данни +- +- +- &Close Database +- &Затвори базата данни +- +- +- &New Database… +- &Ðова база данни... +- +- +- &Merge From Database… +- &Сливане от база данни... +- +- +- &New Entry… +- &Ðов запиÑ... +- +- +- &Edit Entry… +- &Редактиране на запиÑ... +- +- +- &Delete Entry… +- &Изтриване на запиÑ... +- +- +- &New Group… +- &Ðова група... +- +- +- &Edit Group… +- &Редактиране на група... +- +- +- &Delete Group… +- &Изтриване на група... +- +- +- Download All &Favicons… +- ИзтеглÑне на вÑички &favicons... +- +- +- Sa&ve Database As… +- Запазване на база данни като... +- +- +- Database &Security… +- База данни &Защита... +- +- +- Database &Reports... +- База данни &Справки... +- +- +- Statistics, health check, etc. +- СтатиÑтика, проверка на здравето и др. +- +- +- &Database Settings… +- &ÐаÑтройки на базата данни... +- +- +- &Clone Entry… +- &Клониране на запиÑ... +- +- +- Move u&p +- ПремеÑтване нагоре +- +- +- Move entry one step up +- ПремеÑтване на запиÑа една Ñтъпка нагоре +- +- +- Move do&wn +- ПремеÑтване надолу +- +- +- Move entry one step down +- ПремеÑтване на Ð·Ð°Ð¿Ð¸Ñ Ñ ÐµÐ´Ð½Ð° Ñтъпка надолу +- +- +- Copy &Username +- Копиране на &Username +- +- +- Copy &Password +- Копиране на &Паролата +- +- +- Download &Favicon +- ИзтеглÑне &Фавикон +- +- +- &Lock Databases +- &Заключи базата данни +- +- +- &CSV File… +- &CSV файл... +- +- +- &HTML File… +- &HTML файл... +- +- +- KeePass 1 Database… +- KeePass 1 база данни... +- +- +- 1Password Vault… +- 1Password Vault… +- +- +- CSV File… +- CSV файл... +- +- +- Show TOTP +- Показване на TOTP +- +- +- Show QR Code +- Показване на QR код +- +- +- Set up TOTP… +- ÐаÑтройване на TOTP... +- +- +- Report a &Bug +- Съобщаване на грешка +- +- +- Open Getting Started Guide +- ОтварÑне на ръководÑтвото "Първи Ñтъпки" +- +- +- &Online Help +- &Онлайн помощ +- +- +- Go to online documentation +- Към онлайн документациÑта +- +- +- Open User Guide +- ОтварÑне на ръководÑтвото за Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ +- +- +- Save Database Backup... +- ЗапиÑване на резервно копие на базата данни... +- +- +- Add key to SSH Agent +- ДобавÑне на ключ към SSH Agent +- +- +- Remove key from SSH Agent +- Премахване на ключ от SSH Agent +- +- +- Compact Mode +- Компактен режим +- +- +- Automatic +- Ðвтоматично +- +- +- Light +- Светла +- +- +- Dark +- Тъмна +- +- +- Classic (Platform-native) +- КлаÑичеÑки (от платформата) +- +- +- Show Toolbar +- Покажи лентата Ñ Ð¸Ð½Ñтрументи +- +- +- Show Preview Panel +- Показване на панела за Ð²Ð¸Ð·ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ +- +- +- Don't show again for this version +- Ðе показвай повече за тази верÑÐ¸Ñ +- +- +- Restart Application? +- РеÑтартиране на приложението? +- +- +- You must restart the application to apply this setting. Would you like to restart now? +- ТрÑбва да реÑтартирате приложението, за да приложите тази наÑтройка. Желаете ли да реÑтартирате Ñега? +- +- +- Perform Auto-Type Sequence +- Изпълнение на Auto-Type +- +- +- {USERNAME} +- +- +- +- {USERNAME}{ENTER} +- +- +- +- {PASSWORD} +- +- +- +- {PASSWORD}{ENTER} +- +- +- +- Always on Top +- Винаги отгоре +- +- +- Hide Usernames +- Скриване на потребителÑките имена +- +- +- Hide Passwords +- Скриване на паролите +- +- +- +- ManageDatabase +- +- Database settings +- ÐаÑтройки на базата данни +- +- +- Edit database settings +- Редактиране на наÑтройките на базата данни +- +- +- Unlock database +- Отключване на базата данни +- +- +- Unlock database to show more information +- Отключване на базата данни за показване на повече Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ +- +- +- Lock database +- Заключване на базата данни +- +- +- +- ManageSession +- +- Disconnect +- Разедини +- +- +- Disconnect this application +- Разедини това приложение +- +- +- +- Merger +- +- Creating missing %1 [%2] +- Създаване на липÑващите %1 [%2] +- +- +- Relocating %1 [%2] +- ПремеÑтване на % 1 [%2] +- +- +- Overwriting %1 [%2] +- ПрезапиÑване %1 [%2] +- +- +- older entry merged from database "%1" +- по-Ñтари запиÑи, обединени от база данни "%1" +- +- +- Adding backup for older target %1 [%2] +- +- +- +- Adding backup for older source %1 [%2] +- +- +- +- Reapplying older target entry on top of newer source %1 [%2] +- +- +- +- Reapplying older source entry on top of newer target %1 [%2] +- +- +- +- Synchronizing from newer source %1 [%2] +- Синхронизиране от по-Ð½Ð¾Ð²Ð¸Ñ Ð¸Ð·Ñ‚Ð¾Ñ‡Ð½Ð¸Ðº %1 [%2] +- +- +- Synchronizing from older source %1 [%2] +- Синхронизиране от по-ÑÑ‚Ð°Ñ€Ð¸Ñ Ð¸Ð·Ñ‚Ð¾Ñ‡Ð½Ð¸Ðº %1 [% 2] +- +- +- Deleting child %1 [%2] +- +- +- +- Deleting orphan %1 [%2] +- +- +- +- Changed deleted objects +- +- +- +- Adding missing icon %1 +- ДобавÑне на липÑваща икона %1 +- +- +- Removed custom data %1 [%2] +- Премахнати потребителÑки данни %1 [%2] +- +- +- Adding custom data %1 [%2] +- ДобавÑне на потребителÑки данни %1 [%2] +- +- +- +- NewDatabaseWizard +- +- Create a new KeePassXC database... +- Създаване на нова keePassXC база данни... +- +- +- Root +- Root group +- Корен +- +- +- +- NewDatabaseWizardPage +- +- WizardPage +- +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Тук можете да коригирате наÑтройките за шифроване на база данни. Ðе Ñе притеÑнÑвайте, можете да ги промените по-къÑно в наÑтройките на базата данни. +- +- +- Advanced Settings +- Разширени наÑтройки +- +- +- Simple Settings +- ОпроÑтени наÑтройки +- +- +- Encryption Settings +- ÐаÑтройки на шифроване +- +- +- +- NewDatabaseWizardPageDatabaseKey +- +- Database Credentials +- Идентификационни данни на база данни +- +- +- A set of credentials known only to you that protects your database. +- Ðабор от идентификационни данни, извеÑтни Ñамо за ваÑ, които защитават вашата база данни. +- +- +- +- NewDatabaseWizardPageEncryption +- +- Encryption Settings +- ÐаÑтройки на шифроване +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Тук можете да коригирате наÑтройките за шифроване на база данни. Ðе Ñе притеÑнÑвайте, можете да ги промените по-къÑно в наÑтройките на базата данни. +- +- +- +- NewDatabaseWizardPageMetaData +- +- General Database Information +- Обща Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° база данни +- +- +- Please fill in the display name and an optional description for your new database: +- МолÑ, попълнете име и незадължително опиÑание за новата Ñи база данни: +- +- +- +- NixUtils +- +- Password Manager +- Мениджър на пароли +- +- +- +- OpData01 +- +- Invalid OpData01, does not contain header +- Ðевалиден OpData01, не Ñъдържа хедър +- +- +- Unable to read all IV bytes, wanted 16 but got %1 +- Ðе може да Ñе прочетат вÑички IV байта, нужни Ñа 16, но имам %1 +- +- +- Unable to init cipher for opdata01: %1 +- Ðе може да Ñе инициализира шифъра за opdata01: %1 +- +- +- Unable to read all HMAC signature bytes +- Ðе може да Ñе прочетат вÑички байтове на HMAC подпиÑа +- +- +- Malformed OpData01 due to a failed HMAC +- Ðеправилно оформен OpData01 поради грешен HMAC +- +- +- Unable to process clearText in place +- Ðе може да Ñе извърши обработката на текÑта на мÑÑто +- +- +- Expected %1 bytes of clear-text, found %2 +- Очаквано %1 байта текÑÑ‚, намерени %2 +- +- +- +- OpVaultOpenWidget +- +- Read Database did not produce an instance +-%1 +- Четене на база данни не е генерирана инÑÑ‚Ð°Ð½Ñ†Ð¸Ñ +-%1 +- +- +- +- OpVaultReader +- +- Directory .opvault must exist +- ДиректориÑта .opvault Ñ‚Ñ€Ñбва да ÑъщеÑтвува +- +- +- Directory .opvault must be readable +- ДиректориÑта .opvault Ñ‚Ñ€Ñбва да бъде четима +- +- +- Directory .opvault/default must exist +- Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ .opvault/default Ñ‚Ñ€Ñбва да ÑъщеÑтвува +- +- +- Directory .opvault/default must be readable +- Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ .opvault/default Ñ‚Ñ€Ñбва да е четима +- +- +- Unable to decode masterKey: %1 +- Грешка при декодиране на masterKey: %1 +- +- +- Unable to derive master key: %1 +- +- +- +- +- OpenSSHKey +- +- Invalid key file, expecting an OpenSSH key +- Ðевалиден файл Ñ ÐºÐ»ÑŽÑ‡Ð°, очаква Ñе openSSH ключ +- +- +- PEM boundary mismatch +- ÐеÑъответÑтвие на границите на PEM +- +- +- Base64 decoding failed +- Base64 декодирането е неуÑпешно +- +- +- Key file way too small. +- Файлът Ñ ÐºÐ»ÑŽÑ‡Ð° е твърде малък. +- +- +- Key file magic header id invalid +- ID-то на магичеÑÐºÐ¸Ñ Ñ…ÐµÐ´ÑŠÑ€ на файла-ключ е невалиден +- +- +- Found zero keys +- Ðамерени нула ключа +- +- +- Failed to read public key. +- Ðе може да Ñе прочете Ð¿ÑƒÐ±Ð»Ð¸Ñ‡ÐµÐ½Ð¸Ñ ÐºÐ»ÑŽÑ‡. +- +- +- Corrupted key file, reading private key failed +- Повреден файл Ñ ÐºÐ»ÑŽÑ‡Ð°, четенето на чаÑтен ключ е неуÑпешно +- +- +- No private key payload to decrypt +- +- +- +- Trying to run KDF without cipher +- +- +- +- Passphrase is required to decrypt this key +- Ðеобходима е фраза за доÑтъп за дешифриране на този ключ +- +- +- Key derivation failed, key file corrupted? +- +- +- +- Decryption failed, wrong passphrase? +- ÐеуÑпешено дешифриране, грешна фраза за доÑтъп? +- +- +- Unexpected EOF while reading public key +- Ðеочакван EOF при четене на Ð¿ÑƒÐ±Ð»Ð¸Ñ‡ÐµÐ½Ð¸Ñ ÐºÐ»ÑŽÑ‡ +- +- +- Unexpected EOF while reading private key +- Ðеочакван EOF при четене на чаÑтен ключ +- +- +- Can't write public key as it is empty +- Ðе може да Ñе запише Ð¿ÑƒÐ±Ð»Ð¸Ñ‡ÐµÐ½Ð¸Ñ ÐºÐ»ÑŽÑ‡, тъй като е празен +- +- +- Unexpected EOF when writing public key +- Ðеочаквано EOF при пиÑане на Ð¿ÑƒÐ±Ð»Ð¸Ñ‡ÐµÐ½Ð¸Ñ ÐºÐ»ÑŽÑ‡ +- +- +- Can't write private key as it is empty +- Ðе може да Ñе запише чаÑÑ‚ÐµÐ½Ð¸Ñ ÐºÐ»ÑŽÑ‡, тъй като е празен +- +- +- Unexpected EOF when writing private key +- Ðеочаквано EOF при Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° чаÑÑ‚Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡ +- +- +- Unsupported key type: %1 +- Ðеподдържан тип ключ: %1 +- +- +- Unknown cipher: %1 +- ÐеизвеÑтно шифър: %1 +- +- +- Cipher IV is too short for MD5 kdf +- Шифъровачното IV е твърде кратък за MD5 kdf +- +- +- Unknown KDF: %1 +- ÐеизвеÑтен KDF: %1 +- +- +- Unknown key type: %1 +- ÐеизвеÑтен тип ключ: %1 +- +- +- +- PasswordEdit +- +- Passwords do not match +- Паролите не Ñъвпадат +- +- +- Passwords match so far +- Паролите Ñъвпадат доÑега +- +- +- Toggle Password (%1) +- Превключване на парола (%1) +- +- +- Generate Password (%1) +- Генериране на парола (%1) +- +- +- Warning: Caps Lock enabled! +- Предупреждение: Caps Lock активиран! +- +- +- +- PasswordEditWidget +- +- Enter password: +- Въведете парола: +- +- +- Confirm password: +- Потвърдете паролата: +- +- +- Password +- Парола +- +- +- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> +- <p>Паролата е оÑновниÑÑ‚ метод за защита на вашата база данни.</p><p>Добрите пароли Ñа дълги и уникални. KeePassXC може да генерира такава за ваÑ.</p> +- +- +- Passwords do not match. +- Паролите не Ñъвпадат. +- +- +- Password field +- Поле за парола +- +- +- Repeat password field +- Поле повтарÑне на парола +- +- +- +- PasswordGeneratorWidget +- +- %p% +- %p% +- +- +- strength +- Password strength +- ÑложноÑÑ‚ +- +- +- entropy +- ÐµÐ½Ñ‚Ñ€Ð¾Ð¿Ð¸Ñ +- +- +- Password +- Парола +- +- +- Character Types +- Типове знаци +- +- +- Numbers +- ЧиÑла +- +- +- Extended ASCII +- Разширен ASCII +- +- +- Exclude look-alike characters +- Изключване на подобни знаци +- +- +- Pick characters from every group +- Избиране на Ñимволи от вÑÑка група +- +- +- &Length: +- &Дължина: +- +- +- Passphrase +- Фраза за доÑтъп +- +- +- Wordlist: +- СпиÑък Ñ Ð´ÑƒÐ¼Ð¸: +- +- +- Word Separator: +- Разделител на думите: +- +- +- Close +- ЗатварÑне +- +- +- Entropy: %1 bit +- ЕнтропиÑ: %1 бита +- +- +- Password Quality: %1 +- КачеÑтво на паролата : %1 +- +- +- Poor +- Password quality +- Слабо +- +- +- Weak +- Password quality +- Слабо +- +- +- Good +- Password quality +- Добро +- +- +- Excellent +- Password quality +- Отлично +- +- +- Switch to advanced mode +- Превключване към разширен режим +- +- +- Advanced +- Допълнителни +- +- +- Braces +- Скоби +- +- +- Punctuation +- ÐŸÑƒÐ½ÐºÑ‚ÑƒÐ°Ñ†Ð¸Ñ +- +- +- Quotes +- Кавички +- +- +- Logograms +- Логограми +- +- +- Character set to exclude from generated password +- Ðабор от знаци за изключване от генерираната парола +- +- +- Do not include: +- Ðе включвайте: +- +- +- Add non-hex letters to "do not include" list +- ДобавÑне на не-шеÑтнадеÑетични букви към ÑпиÑъка "не включвай" +- +- +- Hex +- ШеÑтнадеÑетичен +- +- +- Excluded characters: "0", "1", "l", "I", "O", "|", "ï¹’" +- Изключени знаци: "0", "1", "l", "I", "O", "|", "ï¹’" +- +- +- Generated password +- Генерирана парола +- +- +- Upper-case letters +- Главни букви +- +- +- Lower-case letters +- Малки букви +- +- +- Special characters +- Специални знаци +- +- +- Math Symbols +- МатематичеÑки Ñимволи +- +- +- Dashes and Slashes +- Тирета и наклонени черти +- +- +- Excluded characters +- Изключени знаци +- +- +- Hex Passwords +- ШеÑнайÑетична парола +- +- +- Password length +- Дължина на паролата +- +- +- Word Case: +- РегиÑÑ‚ÑŠÑ€ на думите: +- +- +- Regenerate password +- Регенериране на парола +- +- +- Copy password +- Копиране на паролата +- +- +- lower case +- мали букви +- +- +- UPPER CASE +- ГЛÐÐ’ÐИ БУКВИ +- +- +- Title Case +- Title Case +- +- +- Generate Password +- Генериране на парола +- +- +- Also choose from: +- Също изберете от: +- +- +- Additional characters to use for the generated password +- Допълнителни знаци за използване за генерираната парола +- +- +- Additional characters +- Допълнителни знаци +- +- +- Word Count: +- Брой думи: +- +- +- Esc +- Esc +- +- +- Apply Password +- Прилагане на парола +- +- +- Ctrl+S +- Ctrl+S +- +- +- Regenerate password (%1) +- Регенериране на паролата (%1) +- +- +- Special Characters +- Специални знаци +- +- +- +- QApplication +- +- KeeShare +- KeeShare +- +- +- Statistics +- СтатиÑтика +- +- +- Very weak password +- Много Ñлаба парола +- +- +- Password entropy is %1 bits +- ЕнтропиÑта на паролата е %1 бита +- +- +- Weak password +- Слаба парола +- +- +- Used in %1/%2 +- Използвани в %1/%2 +- +- +- Password is used %1 times +- Паролата Ñе използва %1 пъти +- +- +- Password has expired +- Паролата е изтекъла +- +- +- Password expiry was %1 +- Изтичането на паролата беше на %1 +- +- +- Password is about to expire +- Паролата Ñкоро ще изтече +- +- +- Password expires in %1 days +- Паролата изтича Ñлед %1 дни +- +- +- Password will expire soon +- Паролата ще изтече Ñкоро +- +- +- Password expires on %1 +- Паролата изтича на %1 +- +- +- Health Check +- Проверка на ÑÑŠÑтоÑнието +- +- +- HIBP +- HIBP +- +- +- +- QMessageBox +- +- Overwrite +- Презапиши +- +- +- Delete +- Триене +- +- +- Move +- ПремеÑти +- +- +- Empty +- Изпразни +- +- +- Remove +- Премахване +- +- +- Skip +- ПропуÑкане +- +- +- Disable +- Изключване +- +- +- Merge +- Слей +- +- +- Continue +- Продължи +- +- +- +- QObject +- +- Database not opened +- Базата данни не е отворена +- +- +- Database hash not available +- ÐÑма хеш на база данни +- +- +- Client public key not received +- Ðеполучен публичен ключ на клиента +- +- +- Cannot decrypt message +- Съобщението не може да Ñе дешифрира +- +- +- Action cancelled or denied +- ДейÑтвието е отменено или отказано +- +- +- KeePassXC association failed, try again +- KeePassXC аÑоциациÑта е неуÑпешна, опитайте отново +- +- +- Encryption key is not recognized +- Ключа за шифроване не е разпознат +- +- +- Incorrect action +- Ðеправилно дейÑтвие +- +- +- Empty message received +- Получено е празно Ñъобщение +- +- +- No URL provided +- Ðе е предоÑтавен URL +- +- +- No logins found +- Ðе Ñа намерени данни за вход +- +- +- Unknown error +- ÐеизвеÑтна грешка +- +- +- Add a new entry to a database. +- ДобавÑне на нов Ð·Ð°Ð¿Ð¸Ñ ÐºÑŠÐ¼ база данни. +- +- +- Path of the database. +- Път на базата данни. +- +- +- Key file of the database. +- Файл-ключа на базата данни. +- +- +- path +- път +- +- +- Username for the entry. +- ПотребителÑко име за запиÑа. +- +- +- username +- потребитерÑко име +- +- +- URL for the entry. +- URL за запиÑа. +- +- +- URL +- Url +- +- +- Prompt for the entry's password. +- Питане за паролата на запиÑа. +- +- +- Generate a password for the entry. +- Генериране на парола за запиÑа. +- +- +- length +- Дължина +- +- +- Path of the entry to add. +- Път на запиÑа за добавÑне. +- +- +- Path of the entry to clip. +- clip = copy to clipboard +- +- +- +- Timeout in seconds before clearing the clipboard. +- Таймаут в Ñекунди преди да Ñе изчиÑти клипборда. +- +- +- Edit an entry. +- Редактиране на запиÑ. +- +- +- Title for the entry. +- Заглавие на запиÑа. +- +- +- title +- заглавие +- +- +- Path of the entry to edit. +- Път към запиÑа за редактиране. +- +- +- Estimate the entropy of a password. +- Оцени ентропиÑта на паролата. +- +- +- Password for which to estimate the entropy. +- Парола за коÑто да Ñе оцени ентропиÑта. +- +- +- Perform advanced analysis on the password. +- Извършване на разширен анализ на паролата. +- +- +- +- +-Available commands: +- +- Ðалични команди: +- +- +- Name of the command to execute. +- Име на командата за изпълнение. +- +- +- List database entries. +- СпиÑък на запиÑите в базата данни. +- +- +- Path of the group to list. Default is / +- Път на групата за показване. По подразбиране е / +- +- +- Find entries quickly. +- Бързо Ñ‚ÑŠÑ€Ñене на запиÑи. +- +- +- Search term. +- ТърÑени думи. +- +- +- Merge two databases. +- Сливане на две бази данни. +- +- +- Path of the database to merge from. +- Път до базата данни, от коÑто да Ñе Ñлее. +- +- +- Use the same credentials for both database files. +- Използвайте едни и Ñъщи идентификационни данни за двата файла Ñ Ð±Ð°Ð·Ð¸ данни. +- +- +- Key file of the database to merge from. +- Файл-ключа на базата данни за Ñливане. +- +- +- Show an entry's information. +- Показване на Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° запиÑа. +- +- +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- Имената на показваните атрибути. Тази Ð¾Ð¿Ñ†Ð¸Ñ Ð¼Ð¾Ð¶Ðµ да бъде зададена повече от веднъж, като вÑеки атрибут Ñе показва по един на ред в Ð´Ð°Ð´ÐµÐ½Ð¸Ñ Ñ€ÐµÐ´. Ðко не Ñа зададени атрибути, Ñе дава обобщение на атрибутите по подразбиране. +- +- +- attribute +- атрибут +- +- +- Name of the entry to show. +- Име на запиÑа за показване. +- +- +- NULL device +- УÑтройÑтво NULL +- +- +- error reading from device +- грешка при четене от уÑтройÑтвото +- +- +- malformed string +- неправилен низ +- +- +- missing closing quote +- липÑваща затварÑща кавичка +- +- +- Group +- Група +- +- +- Title +- Заглавие +- +- +- Username +- Портебител +- +- +- Password +- Парола +- +- +- Notes +- Бележки +- +- +- Last Modified +- ПоÑледно променена +- +- +- Created +- Създаден +- +- +- Browser Integration +- Ð˜Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ð½Ð° браузъра +- +- +- SSH Agent +- SSH Agent +- +- +- Generate a new random diceware passphrase. +- +- +- +- Word count for the diceware passphrase. +- +- +- +- Wordlist for the diceware generator. +-[Default: EFF English] +- +- +- +- Generate a new random password. +- Генерирайте нова Ñлучайна парола. +- +- +- Could not create entry with path %1. +- Ðе може да Ñе Ñъздаде Ð·Ð°Ð¿Ð¸Ñ Ñ Ð¿ÑŠÑ‚ %1. +- +- +- Enter password for new entry: +- Въведете парола за Ð½Ð¾Ð²Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñ: +- +- +- Writing the database failed %1. +- Грешка при Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° базата данни: %1 +- +- +- Successfully added entry %1. +- УÑпешно добавен Ð·Ð°Ð¿Ð¸Ñ %1. +- +- +- Invalid timeout value %1. +- Ðевалидна ÑтойноÑÑ‚ на таймаут %1. +- +- +- Entry %1 not found. +- ЗапиÑÑŠÑ‚ %1 не е намерен. +- +- +- Entry with path %1 has no TOTP set up. +- ЗапиÑÑŠÑ‚ Ñ Ð¿ÑŠÑ‚ %1 нÑма наÑтроен TOTP. +- +- +- Clearing the clipboard in %1 second(s)... +- +- +- +- Clipboard cleared! +- Клипборда е изчиÑтен! +- +- +- Silence password prompt and other secondary outputs. +- Заглуши промпта за паролата и други вотороÑтепенни изходи. +- +- +- count +- CLI parameter +- брой +- +- +- Could not find entry with path %1. +- Ðе може да Ñе намери Ð·Ð°Ð¿Ð¸Ñ Ñ Ð¿ÑŠÑ‚ %1. +- +- +- Not changing any field for entry %1. +- Без провени в полетата за запиÑа %1. +- +- +- Enter new password for entry: +- Въведете нова парола за запиÑа: +- +- +- Writing the database failed: %1 +- Грешка при Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° базата данни: %1 +- +- +- Successfully edited entry %1. +- УÑпешно редактиран Ð·Ð°Ð¿Ð¸Ñ %1. +- +- +- Length %1 +- Дължина %1 +- +- +- Entropy %1 +- Ð•Ð½Ñ‚Ñ€Ð¾Ð¿Ð¸Ñ %1 +- +- +- Log10 %1 +- Логаритъм10 %1 +- +- +- Multi-word extra bits %1 +- +- +- +- Type: Bruteforce +- Тип: Ð‘Ñ€ÑƒÑ‚Ñ„Ð¾Ñ€Ñ +- +- +- Type: Dictionary +- Тип: Речник +- +- +- Type: Dict+Leet +- Тип: Речник+Leet +- +- +- Type: User Words +- Тип: Уличен жаргон +- +- +- Type: User+Leet +- Тип: ПотребителÑки+Leet +- +- +- Type: Repeated +- Тип: ПовтарÑщи Ñе +- +- +- Type: Sequence +- Тип: ПоÑледователноÑÑ‚ +- +- +- Type: Spatial +- Тип: ПроÑтранÑтвен +- +- +- Type: Date +- Тип: Дата +- +- +- Type: Bruteforce(Rep) +- Тип: БрутафорÑ(повтарÑеми) +- +- +- Type: Dictionary(Rep) +- Тип: Речник (повт.) +- +- +- Type: Dict+Leet(Rep) +- Тип: Речник+Leet(повт.) +- +- +- Type: User Words(Rep) +- Тип: ПотребителÑки думи(повт.) +- +- +- Type: User+Leet(Rep) +- Тип: ПотребителÑки+Leet(повт.) +- +- +- Type: Repeated(Rep) +- Тип: ПовтарÑщи Ñе(повт.) +- +- +- Type: Sequence(Rep) +- Тип: ПоÑледователноÑÑ‚(повт.) +- +- +- Type: Spatial(Rep) +- Тип: ПроÑтранÑтвено(повт.) +- +- +- Type: Date(Rep) +- Тип: Дата(повт.) +- +- +- Type: Unknown%1 +- Тип: ÐеизвеÑтен%1 +- +- +- Entropy %1 (%2) +- Ð•Ð½Ñ‚Ñ€Ð¾Ð¿Ð¸Ñ %1 (%2) +- +- +- *** Password length (%1) != sum of length of parts (%2) *** +- Дължина на паролата (%1) != Ñума от дължината на чаÑтите (%2) *** +- +- +- Failed to load key file %1: %2 +- Грешка при зареждане на файла-ключ %1: %2 +- +- +- Length of the generated password +- Дължина на генерираната парола +- +- +- Use lowercase characters +- Използване на малки букви +- +- +- Use uppercase characters +- Използване на главни букви +- +- +- Use special characters +- Използване на Ñпециални знаци +- +- +- Use extended ASCII +- Използвай разширен ASCII +- +- +- Exclude character set +- Изключване на набор от знаци +- +- +- chars +- Символи +- +- +- Exclude similar looking characters +- Изключване на подобни знаци +- +- +- Include characters from every selected group +- Включване на знаци от вÑÑка избрана група +- +- +- Recursively list the elements of the group. +- РекурÑивно изброÑва елементите на групата. +- +- +- Cannot find group %1. +- Ðе може да Ñе намери групата %1. +- +- +- Error reading merge file: +-%1 +- Грешка при четене на файл за Ñливане: +-%1 +- +- +- Unable to save database to file : %1 +- Базата данни не може да бъде запиÑана във файл: %1 +- +- +- Unable to save database to file: %1 +- Базата данни не може да бъде запиÑана във файл: % 1 +- +- +- Successfully recycled entry %1. +- УÑпешно изтриване на запиÑ%1. +- +- +- Successfully deleted entry %1. +- УÑпешно изтрит елемент %1. +- +- +- Show the entry's current TOTP. +- Показване на Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ TOTP на запиÑа. +- +- +- ERROR: unknown attribute %1. +- ГРЕШКÐ: неизвеÑтен атрибут %1. +- +- +- No program defined for clipboard manipulation +- ÐÑма програма, дефинирана за Ð¼Ð°Ð½Ð¸Ð¿ÑƒÐ»Ð°Ñ†Ð¸Ñ Ð½Ð° клипборда +- +- +- file empty +- празен файл +- +- +- %1: (row, col) %2,%3 +- %1: (ред, колона) %2,%3 +- +- +- AES-KDF (KDBX 4) +- AES-KDF (KDBX 4) +- +- +- AES-KDF (KDBX 3.1) +- AES-KDF (KDBX 3.1) +- +- +- Invalid Settings +- TOTP +- Ðевалидни наÑтройки +- +- +- Invalid Key +- TOTP +- Ðевалиден ключ +- +- +- Message encryption failed. +- ÐеуÑпешно шифроване на Ñъобщение. +- +- +- No groups found +- Ðе Ñа намерени групи +- +- +- Create a new database. +- Създаване на нова база данни. +- +- +- File %1 already exists. +- Файлът %1 вече ÑъщеÑтвува. +- +- +- Loading the key file failed +- Зареждането на файл-ключа е неуÑпешно +- +- +- No key is set. Aborting database creation. +- Ðе е зададен ключ. ПрекратÑване на Ñъздаването на база данни. +- +- +- Failed to save the database: %1. +- Грешка при запиÑване на базата данни: %1. +- +- +- Successfully created new database. +- УÑпешно Ñъздадена нова база данни. +- +- +- Creating KeyFile %1 failed: %2 +- Грешка при Ñъздаване на KeyFile %1: %2 +- +- +- Loading KeyFile %1 failed: %2 +- Грешка при зареждане на KeyFile %1: %2 +- +- +- Path of the entry to remove. +- Път на запиÑа за премахване. +- +- +- Existing single-instance lock file is invalid. Launching new instance. +- +- +- +- The lock file could not be created. Single-instance mode disabled. +- +- +- +- KeePassXC - cross-platform password manager +- KeePassXC - кроÑ-платформен мениджър на пароли +- +- +- filenames of the password databases to open (*.kdbx) +- файловите имена на базите данни Ñ Ð¿Ð°Ñ€Ð¾Ð»Ð¸ за отварÑне (*.kdbx) +- +- +- path to a custom config file +- път към потребителÑÐºÐ¸Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¾Ð½ÐµÐ½ файл +- +- +- key file of the database +- файл-ключа на базата данни +- +- +- read password of the database from stdin +- прочетете паролата на базата данни от stdin +- +- +- Another instance of KeePassXC is already running. +- Друга инÑÑ‚Ð°Ð½Ñ†Ð¸Ñ Ð½Ð° KeePassXC вече работи. +- +- +- Fatal error while testing the cryptographic functions. +- Фатална грешка при теÑтване на криптографÑките функции. +- +- +- KeePassXC - Error +- KeePassXC - Грешка +- +- +- Database password: +- Парола за базата данни: +- +- +- Cannot create new group +- Ðе може да Ñе Ñъздаде нова група +- +- +- Deactivate password key for the database. +- Деактивиране на парола за базата данни. +- +- +- Displays debugging information. +- Показва Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° отÑтранÑване на грешки. +- +- +- Deactivate password key for the database to merge from. +- +- +- +- Version %1 +- ВерÑÐ¸Ñ %1 +- +- +- Build Type: %1 +- Тип на компилациÑта: %1 +- +- +- Revision: %1 +- РевизиÑ: %1 +- +- +- Distribution: %1 +- ДиÑтрибуциÑ: %1 +- +- +- Debugging mode is disabled. +- Режимът за отÑтранÑване на грешки е изключен. +- +- +- Debugging mode is enabled. +- Режимът за отÑтранÑване на грешки е включен. +- +- +- Operating system: %1 +-CPU architecture: %2 +-Kernel: %3 %4 +- Операционна ÑиÑтема: %1 +-Ðрхитектура на процеÑора: %2 +-Ядро: %3 %4 +- +- +- Auto-Type +- Auto-Type +- +- +- KeeShare (signed and unsigned sharing) +- KeeShare (подпиÑано и неподпиÑано ÑподелÑне) +- +- +- KeeShare (only signed sharing) +- Кийшер (Ñамо подпиÑано ÑподелÑне) +- +- +- KeeShare (only unsigned sharing) +- Кийшер (Ñамо неподпиÑано ÑподелÑне) +- +- +- YubiKey +- YubiKey +- +- +- TouchID +- TouchID +- +- +- None +- ÐÑма +- +- +- Enabled extensions: +- Включени разширениÑ: +- +- +- Cryptographic libraries: +- КриптографÑки библиотеки: +- +- +- Cannot generate a password and prompt at the same time! +- Ðе може да генерира парола и да Ñе въведе едновременно! +- +- +- Adds a new group to a database. +- Ð”Ð¾Ð±Ð°Ð²Ñ Ð½Ð¾Ð²Ð° група към база данни. +- +- +- Path of the group to add. +- ПътÑÑ‚ на групата за добавÑне. +- +- +- Group %1 already exists! +- Групата %1 вече ÑъщеÑтвува! +- +- +- Group %1 not found. +- Групата %1 не е намерена. +- +- +- Successfully added group %1. +- УÑпешно добавена група %1. +- +- +- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. +- Проверете дали има публичен доÑтъп до пароли. FILENAME Ñ‚Ñ€Ñбва да бъде Ð¿ÑŠÑ‚Ñ Ð½Ð° файл, който включва SHA-1 хешове на пароли, пропуÑкани в HIBP формат, както е налично от https://haveibeenpwned.com/Passwords. +- +- +- FILENAME +- FILENAME +- +- +- Analyze passwords for weaknesses and problems. +- Ðнализирай паролите за ÑлабоÑти и проблеми. +- +- +- Failed to open HIBP file %1: %2 +- Грешка при отварÑне на ФÐЙЛР%1: %2 +- +- +- Evaluating database entries against HIBP file, this will take a while... +- ОценÑване на запиÑи в базата данни ÑпрÑмо HIBP файл, това ще отнеме извеÑтно време... +- +- +- Close the currently opened database. +- ЗатворÑне на текущо отворената база данни. +- +- +- Display this help. +- Покажи тази помощ. +- +- +- slot +- Ñлот +- +- +- Invalid word count %1 +- Ðевалиден брой думи %1 +- +- +- The word list is too small (< 1000 items) +- СпиÑъкът Ñ Ð´ÑƒÐ¼Ð¸ е твърде малък (< 1000 елемента) +- +- +- Exit interactive mode. +- Излизане от Ð¸Ð½Ñ‚ÐµÑ€Ð°ÐºÑ‚Ð¸Ð²Ð½Ð¸Ñ Ñ€ÐµÐ¶Ð¸Ð¼. +- +- +- Exports the content of a database to standard output in the specified format. +- ЕкÑпортира Ñъдържанието на база данни в Ñтандартен изход в ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚. +- +- +- Unable to export database to XML: %1 +- Ðе може да Ñе екÑпортира база данни в XML: %1 +- +- +- Unsupported format %1 +- Ðеподдържан формат %1 +- +- +- Use numbers +- Използване на номера +- +- +- Invalid password length %1 +- Ðевалидна дължина на паролата %1 +- +- +- Display command help. +- Показване на помощ за командна. +- +- +- Available commands: +- Ðалични команди: +- +- +- Import the contents of an XML database. +- Импортиране на Ñъдържанието на XML база данни. +- +- +- Path of the XML database export. +- Път на екÑпортирането на XML база данни. +- +- +- Path of the new database. +- Път към новата база данни. +- +- +- Successfully imported database. +- УÑпешно импортирана база данни. +- +- +- Unknown command %1 +- ÐеизвеÑтна команда %1 +- +- +- Flattens the output to single lines. +- ИзравнÑва изхода към единични редове. +- +- +- Only print the changes detected by the merge operation. +- Изкарай Ñамо промените, открити от операциÑта за Ñливане. +- +- +- Yubikey slot for the second database. +- Yubikey Ñлот за втората база данни. +- +- +- Successfully merged %1 into %2. +- УÑпешно Ñливане на %1 в %2. +- +- +- Database was not modified by merge operation. +- Базата данни не е модифицирана от Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¿Ð¾ Ñливане. +- +- +- Moves an entry to a new group. +- ПремеÑтва Ð·Ð°Ð¿Ð¸Ñ Ð² нова група. +- +- +- Path of the entry to move. +- Път на запиÑа за меÑтене. +- +- +- Path of the destination group. +- Път на целевата група. +- +- +- Could not find group with path %1. +- Ðе може да бъде намерена група Ñ Ð¿ÑŠÑ‚ %1. +- +- +- Entry is already in group %1. +- ЗапиÑÑŠÑ‚ вече е в група %1. +- +- +- Successfully moved entry %1 to group %2. +- УÑпешно премеÑтен Ð·Ð°Ð¿Ð¸Ñ %1 в група %2. +- +- +- Open a database. +- Отворете база данни. +- +- +- Path of the group to remove. +- ПътÑÑ‚ на групата за премахване. +- +- +- Cannot remove root group from database. +- Ðе може да Ñе премахне главната група от базата данни. +- +- +- Successfully recycled group %1. +- УÑпешно изтрита група% 1. +- +- +- Successfully deleted group %1. +- УÑпешно изтрита група %1. +- +- +- Failed to open database file %1: not found +- Грешка при отварÑне на файла %1: не е намерен +- +- +- Failed to open database file %1: not a plain file +- Грешка при отварÑне на файла %1 на база данни: не е текÑтов файл +- +- +- Failed to open database file %1: not readable +- Грешка при отварÑне на файла %1: не е четим +- +- +- Enter password to unlock %1: +- Въведете парола за отключване на %1: +- +- +- Invalid YubiKey slot %1 +- Ðевалиден YubiKey Ñлот %1 +- +- +- Enter password to encrypt database (optional): +- Въведете парола за шифроване на база данни (незадължително): +- +- +- HIBP file, line %1: parse error +- Файл HIBP, ред %1: грешка при парÑване +- +- +- Secret Service Integration +- Secret Service Ð¸Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ +- +- +- User name +- ПотребителÑко име +- +- +- Password for '%1' has been leaked %2 time(s)! +- +- +- +- Invalid password generator after applying all options +- Ðевалиден генератор на пароли Ñлед прилагане на вÑички опции +- +- +- Show the protected attributes in clear text. +- Показване на защитените атрибути в чиÑÑ‚ текÑÑ‚. +- +- +- Browser Plugin Failure +- ÐеуÑпех в Ð±Ñ€Ð°ÑƒÐ·ÑŠÑ€Ð½Ð¸Ñ Ð¿Ð»ÑŠÐ³Ð¸Ð½ +- +- +- Could not save the native messaging script file for %1. +- +- +- +- Copy the given attribute to the clipboard. Defaults to "password" if not specified. +- Копирайте Ð´Ð°Ð´ÐµÐ½Ð¸Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ в клипборда. По подразбиране е "password", ако не е зададен. +- +- +- Copy the current TOTP to the clipboard (equivalent to "-a totp"). +- Копирай Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ TOTP в клипборда (еквивалентно на "-a totp"). +- +- +- Copy an entry's attribute to the clipboard. +- Копиране на атрибут на запиÑа в клипборда. +- +- +- ERROR: Please specify one of --attribute or --totp, not both. +- ГРЕШКÐ: МолÑ, поÑочете --attribute, --totp или и двете. +- +- +- ERROR: attribute %1 is ambiguous, it matches %2. +- Грешка: атрибут %1 е двуÑмиÑлен, Ñъвпада Ñ %2. +- +- +- Attribute "%1" not found. +- Ðе е намерен атрибут "%1". +- +- +- Entry's "%1" attribute copied to the clipboard! +- Ðтрибутът на запиÑа "%1" е копиран в клипборда! +- +- +- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). +- +- +- +- slot[:serial] +- +- +- +- Target decryption time in MS for the database. +- Целево време за дешифриране на базата в MS. +- +- +- time +- Време +- +- +- Set the key file for the database. +- Задаване на файл-ключа за базата данни. +- +- +- Set a password for the database. +- Задайте парола за базата данни. +- +- +- Invalid decryption time %1. +- Ðевалидно време за дешифриране %1. +- +- +- Target decryption time must be between %1 and %2. +- Целевото реме за дешифриране Ñ‚Ñ€Ñбва да бъде между %1 и %2. +- +- +- Failed to set database password. +- ÐеуÑпешно задаване на парола за базата данни. +- +- +- Benchmarking key derivation function for %1ms delay. +- +- +- +- Setting %1 rounds for key derivation function. +- +- +- +- error while setting database key derivation settings. +- +- +- +- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. +- Формат при екÑпортиране. Ðаличните възможноÑти Ñа "xml" и "csv". По подразбиране е "xml". +- +- +- Unable to import XML database: %1 +- Ðе може да Ñе импортира XML база данни:% 1 +- +- +- Show a database's information. +- Показване на Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° базата данни. +- +- +- UUID: +- UUID: +- +- +- Name: +- Име: +- +- +- Description: +- ОпиÑание: +- +- +- Cipher: +- Шифър: +- +- +- KDF: +- KDF: +- +- +- Recycle bin is enabled. +- Кошчето е включено(. +- +- +- Recycle bin is not enabled. +- Кошчето не е включено. +- +- +- Invalid command %1. +- Ðевалидна команда %1. +- +- +- Invalid YubiKey serial %1 +- Ðевалиден YubiKey Ñериен номер %1 +- +- +- Please touch the button on your YubiKey to continue… +- МолÑ, докоÑнете бутона на Ð²Ð°ÑˆÐ¸Ñ YubiKey, за да продължи... +- +- +- Do you want to create a database with an empty password? [y/N]: +- ИÑкате ли да Ñъздадете база данни Ñ Ð¿Ñ€Ð°Ð·Ð½Ð° парола? [y/N]: +- +- +- Repeat password: +- Повторете паролата: +- +- +- Error: Passwords do not match. +- Грешка: Паролите не Ñъвпадат. +- +- +- All clipping programs failed. Tried %1 +- +- +- +- +- AES (%1 rounds) +- AES (% 1 рунда) +- +- +- AES 256-bit +- AES 256-битов +- +- +- Twofish 256-bit +- Twofish 256-битов +- +- +- ChaCha20 256-bit +- ChaCha20: 256-битов {20 256-?} +- +- +- Benchmark %1 delay +- Бенчмарк %1 закъÑнение +- +- +- %1 ms +- milliseconds +- % 1 ms%1 ms +- +- +- %1 s +- seconds +- +- +- +- path to a custom local config file +- +- +- +- WARNING: You are using an old key file format which KeePassXC may +-stop supporting in the future. +- +-Please consider generating a new key file. +- Използвате оÑтарÑл файлов формат на ключа, който KeePass XC може да Ñпре да поддържа в бъдеще. +- +-ПомиÑлете за генериране на нов ключ файл. +- +- +- Argon2%1 (%2 rounds, %3 KB) +- +- +- +- Argon2d (KDBX 4 – recommended) +- +- +- +- Argon2id (KDBX 4) +- +- +- +- TOTP +- TOTP +- +- +- Icon +- Икона +- +- +- Unsupported key file version: %1 +- Ðеподдържан тип ключ: %1 +- +- +- Checksum mismatch! Key file may be corrupt. +- +- +- +- Unexpected key file data! Key file may be corrupt. +- +- +- +- +- QtIOCompressor +- +- Internal zlib error when compressing: +- Вътрешна zlib грешка при компреÑиране: +- +- +- Error writing to underlying device: +- +- +- +- Error opening underlying device: +- +- +- +- Error reading data from underlying device: +- +- +- +- Internal zlib error when decompressing: +- Вътрешна zlib грешка при декомпреÑиране: +- +- +- +- QtIOCompressor::open +- +- The gzip format not supported in this version of zlib. +- Форматът gzip не Ñе поддържа в тази верÑÐ¸Ñ Ð½Ð° zlib. +- +- +- Internal zlib error: +- Вътрешна грешка на zlib: +- +- +- +- ReportsWidgetHealthcheck +- +- Also show entries that have been excluded from reports +- Показване и на изключените от отетите запиÑи +- +- +- Hover over reason to show additional details. Double-click entries to edit. +- Задръжте курÑора на мишката върху причината, за да Ñе покажат допълнителни подробноÑти. Щракнете двукратно върху запиÑите, за да редактирате. +- +- +- Bad +- Password quality +- Лош +- +- +- Bad — password must be changed +- Лош — паролата Ñ‚Ñ€Ñбва да бъде променена +- +- +- Poor +- Password quality +- Слабо +- +- +- Poor — password should be changed +- Лошо — паролата добре да Ñе Ñмени +- +- +- Weak +- Password quality +- Слабо +- +- +- Weak — consider changing the password +- Слаба — помиÑлете за промÑна на паролата +- +- +- (Excluded) +- (Изключено) +- +- +- This entry is being excluded from reports +- Това впиÑване е изключено от отчетите +- +- +- Please wait, health data is being calculated... +- ÐœÐ¾Ð»Ñ Ð¸Ð·Ñ‡Ð°ÐºÐ°Ð¹Ñ‚Ðµ, данните за здравето Ñе изчиÑлÑват... +- +- +- Congratulations, everything is healthy! +- ПоздравлениÑ, вÑичко е зраво! +- +- +- Title +- Заглавие +- +- +- Path +- Път +- +- +- Score +- Оценка +- +- +- Reason +- Причина +- +- +- Edit Entry... +- Редактиране на запиÑ... +- +- +- Exclude from reports +- Изключване от отчети +- +- +- +- ReportsWidgetHibp +- +- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. +- Ð’ÐИМÐÐИЕ: Този доклад изиÑква изпращане на Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð´Ð¾ уÑлугата Have I Been Pwned (https://haveibeenpwned.com). Ðко продължите, паролите от базата данни ще бъдат хеширани по криптографÑки начин и първите пет знака от тези хешове ще бъдат изпратени защитено на тази уÑлуга. Вашата база данни оÑтава защитена и не може да бъде възÑтановена от тази информациÑ. Въпреки това, броÑÑ‚ на паролите, които изпращате, и вашиÑÑ‚ IP Ð°Ð´Ñ€ÐµÑ Ñ‰Ðµ бъдат пратени на тази уÑлуга. +- +- +- Perform Online Analysis +- Извършване на онлайн анализ +- +- +- Also show entries that have been excluded from reports +- Показване и на изключените от отетите запиÑи +- +- +- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. +- Тази ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð°Ñ†Ð¸Ñ Ð½Ð° KeePassXC не разполага Ñ Ð¼Ñ€ÐµÐ¶Ð¾Ð²Ð¸ функции. Те Ñа необходими за проверка на паролите в Have I Been Pwned базата данни. +- +- +- Congratulations, no exposed passwords! +- ПоздравлениÑ, нÑма разкрити пароли! +- +- +- Title +- Заглавие +- +- +- Path +- Път +- +- +- Password exposed… +- Парола е разкрита... +- +- +- (Excluded) +- (Изключено) +- +- +- This entry is being excluded from reports +- Това впиÑване е изключено от отчетите +- +- +- once +- веднъж +- +- +- up to 10 times +- до 10 пъти +- +- +- up to 100 times +- до 100 пъти +- +- +- up to 1000 times +- до 1000 пъти +- +- +- up to 10,000 times +- до 10 000 пъти +- +- +- up to 100,000 times +- до 100 000 пъти +- +- +- up to a million times +- до един милион пъти +- +- +- millions of times +- милиони пъти +- +- +- Edit Entry... +- Редактиране на запиÑ... +- +- +- Exclude from reports +- Изключване от отчети +- +- +- +- ReportsWidgetStatistics +- +- Hover over lines with error icons for further information. +- Задръжте курÑора на мишката върху редове Ñ Ð¸ÐºÐ¾Ð½Ð¸ за грешки за допълнителна информациÑ. +- +- +- Name +- Име +- +- +- Value +- СтойноÑÑ‚ +- +- +- Please wait, database statistics are being calculated... +- МолÑ, изчакайте, ÑтатиÑтичеÑки данни за базата данни Ñе изчиÑлÑват... +- +- +- Database name +- Име на базата данни +- +- +- Description +- ОпиÑание +- +- +- Location +- МеÑтоположение +- +- +- Last saved +- ПоÑледно запиÑан +- +- +- Unsaved changes +- ÐезапиÑани промени +- +- +- yes +- Да +- +- +- no +- не +- +- +- The database was modified, but the changes have not yet been saved to disk. +- Базата данни е променена, но промените още не Ñа запиÑани на диÑка. +- +- +- Number of groups +- Брой групи +- +- +- Number of entries +- Брой запиÑи +- +- +- Number of expired entries +- Брой изтекли запиÑи +- +- +- The database contains entries that have expired. +- Базата данни Ñъдържа изтекли запиÑи. +- +- +- Unique passwords +- Уникални пароли +- +- +- Non-unique passwords +- Ðеуникални пароли +- +- +- More than 10% of passwords are reused. Use unique passwords when possible. +- Повече от 10% от паролите Ñе преизползват. Използвайте уникални пароли, когато е възможно. +- +- +- Maximum password reuse +- МакÑимална преизползване на парола +- +- +- Some passwords are used more than three times. Use unique passwords when possible. +- ÐÑкои пароли Ñе преизползват от три пъти. Използвайте уникални пароли, когато е възможно. +- +- +- Number of short passwords +- Брой кратки пароли +- +- +- Recommended minimum password length is at least 8 characters. +- Препоръчителната минимална дължина на паролата е поне 8 знака. +- +- +- Number of weak passwords +- Брой на Ñлабите пароли +- +- +- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. +- Препоръчваме използването на дълги, произволни пароли Ñ Ð¾Ñ†ÐµÐ½ÐºÐ° на "добро" или "отлично". +- +- +- Entries excluded from reports +- ЗапиÑи, изключени от отчетите +- +- +- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. +- Изключването на запиÑи от отчетите, например защото е извеÑтно, че имат лоша парола, не е непременно проблем, но Ñ‚Ñ€Ñбва да ги държите под око. +- +- +- Average password length +- Средна дължина на паролата +- +- +- %1 characters +- %1 знака +- +- +- Average password length is less than ten characters. Longer passwords provide more security. +- Средната дължина на паролата е по-малка от деÑет знака. По-дългите пароли оÑигурÑват по-голÑма ÑигурноÑÑ‚. +- +- +- +- SSHAgent +- +- Agent connection failed. +- ÐеуÑпешно Ñвързване на агента. +- +- +- Agent protocol error. +- Протоколна грешка на агента. +- +- +- No agent running, cannot add identity. +- Ðе Ñе изпълнÑва агент, не може да добави ÑамоличноÑÑ‚. +- +- +- No agent running, cannot remove identity. +- ÐÑма работещ агент, не може да премахне ÑамоличноÑтта. +- +- +- Agent refused this identity. Possible reasons include: +- Ðгентът отказа тази ÑамоличноÑÑ‚. Възможните причини включват: +- +- +- The key has already been added. +- Ключът вече е добавен. +- +- +- Restricted lifetime is not supported by the agent (check options). +- Ограничената продължителноÑÑ‚ на живота не Ñе поддържа от агента (проверете наÑтройките). +- +- +- A confirmation request is not supported by the agent (check options). +- ЗаÑвка за потвърждение не Ñе поддържа от агента (проверете наÑтройките). +- +- +- Key identity ownership conflict. Refusing to add. +- +- +- +- No agent running, cannot list identities. +- ÐÑма изпълнÑващ Ñе агент, не може да Ñе покажат ÑамоличноÑтите. +- +- +- +- SearchHelpWidget +- +- Search Help +- ТърÑенете помощ +- +- +- Search terms are as follows: [modifiers][field:]["]term["] +- Думи за Ñ‚ÑŠÑ€Ñене Ñа Ñледните: [modifiers][field:]["]term["] +- +- +- Every search term must match (ie, logical AND) +- Ð’Ñеки дума за Ñ‚ÑŠÑ€Ñене Ñ‚Ñ€Ñбва да ÑъответÑтва (Ñ‚.е. логичеÑко И) +- +- +- Modifiers +- Модификатори +- +- +- exclude term from results +- изключване на термин от резултатите +- +- +- match term exactly +- точен Ñъвпадение на думата +- +- +- use regex in term +- използвайте регулÑрен израз за Ñ‚ÑŠÑ€Ñене +- +- +- Fields +- Полета +- +- +- Term Wildcards +- Шаблон +- +- +- match anything +- Ñъвпадение на вÑичко +- +- +- match one +- Ñъвпадение един +- +- +- logical OR +- логичеÑко ИЛИ +- +- +- Examples +- Примери +- +- +- +- SearchWidget +- +- Search +- ТърÑене +- +- +- Limit search to selected group +- Ограничаване на Ñ‚ÑŠÑ€Ñенето до избрана група +- +- +- Search Help +- ТърÑенете помощ +- +- +- Search (%1)... +- Search placeholder text, %1 is the keyboard shortcut +- ТърÑене (%1)... +- +- +- Case sensitive +- ЧувÑтвитерен региÑÑ‚ÑŠÑ€ +- +- +- +- SettingsWidgetFdoSecrets +- +- Options +- Опции +- +- +- Enable KeepassXC Freedesktop.org Secret Service integration +- Включване на Freedesktop.org Secret Service Ð¸Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ +- +- +- General +- ОÑновни +- +- +- Show notification when credentials are requested +- Показвай извеÑтие при изиÑкване на идентификационни данни +- +- +- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> +- <html><head/><body><p>Ðко кошчето е включео за базата данни, запиÑите ще бъдат премеÑтени в него директно. Ð’ противен Ñлучай те ще бъдат изтрити без потвърждение.</p><p>Ще бъдете подканени, ако нÑкой от запиÑите е поÑочен от други.</p></body></html> +- +- +- Exposed database groups: +- +- +- +- Authorization +- Разрешение +- +- +- These applications are currently connected: +- Тези Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñа Ñвързани в момента: +- +- +- Don't confirm when entries are deleted by clients +- Ðе потвърждавайте при изтриване на запиÑи от клиенти +- +- +- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. +- <b>Грешка:</b> ÐеуÑпешно Ñвързване Ñ DBus. МолÑ, проверете наÑтройките на DBus. +- +- +- <b>Warning:</b> +- <b>Предупреждение:</b> +- +- +- Save current changes to activate the plugin and enable editing of this section. +- Запишете текущите промени, за да активирате приÑтавката и да разрешите редактирането на тази ÑекциÑ. +- +- +- +- SettingsWidgetKeeShare +- +- Active +- Ðктивни +- +- +- Allow export +- Разреши екÑпортиране +- +- +- Allow import +- Разреши импортиране +- +- +- Own certificate +- СобÑтвен Ñертификат +- +- +- Fingerprint: +- ПръÑтов отпечатък: +- +- +- Certificate: +- Сертификат: +- +- +- Signer +- ПодпиÑващ +- +- +- Key: +- Ключ: +- +- +- Generate +- Генериране +- +- +- Import +- Импортиране +- +- +- Export +- ЕкÑпортиране +- +- +- Imported certificates +- Импортирани Ñертификати +- +- +- Trust +- Доверие +- +- +- Ask +- Попитай +- +- +- Untrust +- Ðе вÑрвай +- +- +- Remove +- Премахване +- +- +- Path +- Път +- +- +- Status +- Статут +- +- +- Fingerprint +- Отпечатък +- +- +- Certificate +- Сертификат +- +- +- Trusted +- ДОверени +- +- +- Untrusted +- Ðедоверени +- +- +- Unknown +- ÐеизвеÑтен +- +- +- key.share +- Filetype for KeeShare key +- key.share +- +- +- KeeShare key file +- Ключ-файл на KeeShare +- +- +- All files +- Ð’Ñички файлове +- +- +- Select path +- Избор на път +- +- +- Exporting changed certificate +- ЕкÑпортиране на Ð¿Ñ€Ð¾Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñертификата +- +- +- The exported certificate is not the same as the one in use. Do you want to export the current certificate? +- ЕкÑпортираниÑÑ‚ Ñертификат не е ÑъщиÑÑ‚ като ползваниÑ. ИÑкате ли да екÑпортирате Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ Ñертификат? +- +- +- Signer: +- ПодпиÑващ: +- +- +- Allow KeeShare imports +- Разреши KeeShare импортирането +- +- +- Allow KeeShare exports +- Разреши KeeShare екÑпортирането +- +- +- Only show warnings and errors +- Показвай Ñамо Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ñ Ð¸ грешки +- +- +- Key +- Ключ +- +- +- Signer name field +- Поле за име на подпиÑÐ²Ð°Ñ‰Ð¸Ñ +- +- +- Generate new certificate +- Генериране на нов Ñертификат +- +- +- Import existing certificate +- Импортиране на ÑъщеÑтвуващ Ñертификат +- +- +- Export own certificate +- ЕкÑпорт на ÑобÑтвен Ñертификат +- +- +- Known shares +- ИзвеÑтни общи реÑурÑи +- +- +- Trust selected certificate +- ДоверÑване на Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ñертификат +- +- +- Ask whether to trust the selected certificate every time +- Питай дали да Ñе доверÑва на Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ñертификат вÑеки път +- +- +- Untrust selected certificate +- Ðе Ñе доверÑвай на Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ñертификат +- +- +- Remove selected certificate +- Премахване на Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ñертификат +- +- +- +- ShareExport +- +- Overwriting signed share container is not supported - export prevented +- +- +- +- Could not write export container (%1) +- +- +- +- Could not embed signature: Could not open file to write (%1) +- Ðе може да Ñе вгради подпиÑ: файлът не може да бъде отворен за Ð·Ð°Ð¿Ð¸Ñ (%1) +- +- +- Could not embed signature: Could not write file (%1) +- Ðе може да Ñе вгради подпиÑ: файлът не може да бъде запиÑан (%1) +- +- +- Could not embed database: Could not open file to write (%1) +- Грешка при вграждане на база данни: файлът не може да бъде отворен за Ð·Ð°Ð¿Ð¸Ñ (%1) +- +- +- Could not embed database: Could not write file (%1) +- Грешка при вграждане на база данни: файлът не може да бъде запиÑан (%1) +- +- +- Overwriting unsigned share container is not supported - export prevented +- +- +- +- Could not write export container +- +- +- +- Unexpected export error occurred +- Възникна неочаквана грешка при екÑпортиране +- +- +- +- ShareImport +- +- Import from container without signature +- +- +- +- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? +- +- +- +- Import from container with certificate +- +- +- +- Do you want to trust %1 with the fingerprint of %2 from %3? +- ИÑкате ли да Ñе доверите на %1 Ñ Ð¿Ñ€ÑŠÑтов отпечатък %2 от %3? {1 ?} {2 ?} +- +- +- Not this time +- Ðе и този път. +- +- +- Never +- Ðикога +- +- +- Always +- Винаги +- +- +- Just this time +- Само този път +- +- +- Signed share container are not supported - import prevented +- +- +- +- File is not readable +- Файлът не е четим +- +- +- Invalid sharing container +- +- +- +- Untrusted import prevented +- +- +- +- Successful signed import +- УÑпешно подпиÑано импортирано +- +- +- Unsigned share container are not supported - import prevented +- +- +- +- Successful unsigned import +- УÑпешно неподпиÑано импортиране +- +- +- File does not exist +- Файлът не ÑъщеÑтвува +- +- +- Unknown share container type +- +- +- +- +- ShareObserver +- +- Import from %1 failed (%2) +- Импортирането от %1 е неуÑпешно (%2) +- +- +- Import from %1 successful (%2) +- Импортиране от %1 уÑпешно (%2) +- +- +- Imported from %1 +- Импортиран от %1 +- +- +- Export to %1 failed (%2) +- ЕкÑпортирането в %1 е неуÑпешно (%2) +- +- +- Export to %1 successful (%2) +- ЕкÑпортиране в %1 уÑпешно (%2) +- +- +- Export to %1 +- ЕкÑпортиране в %1 +- +- +- Multiple import source path to %1 in %2 +- +- +- +- Conflicting export target path %1 in %2 +- +- +- +- +- TotpDialog +- +- Timed Password +- Парола за време +- +- +- 000000 +- 000000 +- +- +- Copy +- Копиране +- +- +- Expires in <b>%n</b> second(s) +- +- +- +- +- TotpExportSettingsDialog +- +- Copy +- Копиране +- +- +- NOTE: These TOTP settings are custom and may not work with other authenticators. +- TOTP QR code dialog warning +- Забележка: тези TOTP наÑтройки Ñа по избор и може да не работи Ñ Ð´Ñ€ÑƒÐ³Ð¸ удоÑтоверители. +- +- +- There was an error creating the QR code. +- Възникна грешка при Ñъздаването на QR кода. +- +- +- Closing in %1 seconds. +- ЗатварÑне Ñлед %1 Ñекунди. +- +- +- +- TotpSetupDialog +- +- Setup TOTP +- ÐаÑтройка на TOTP +- +- +- Default RFC 6238 token settings +- Стандартни наÑтройки на токена ÑпрÑмо RFC 6238 +- +- +- Steam token settings +- ÐаÑтройки на Steam токен +- +- +- Use custom settings +- Използване на потребителÑки наÑтройки +- +- +- Custom Settings +- ПотребителÑки наÑтройки +- +- +- Time step: +- Времва Ñтъпка: +- +- +- sec +- Seconds +- Ñек +- +- +- Code size: +- Размер на кода: +- +- +- Secret Key: +- Таен ключ: +- +- +- Secret key must be in Base32 format +- Таен ключ Ñ‚Ñ€Ñбва да е в Base32 +- +- +- Secret key field +- Поле на Ñекретен ключ +- +- +- Algorithm: +- Ðлгоритъм: +- +- +- Time step field +- Поле за времева Ñтъпка +- +- +- digits +- цифри +- +- +- Invalid TOTP Secret +- Ðевалидна TOTP тайна +- +- +- You have entered an invalid secret key. The key must be in Base32 format. +-Example: JBSWY3DPEHPK3PXP +- Въвели Ñте невалиден Ñекретен ключ. Ключът Ñ‚Ñ€Ñбва да е във формат Base32. +-Пример: JBSWY3DPEHPK3PXP +- +- +- Confirm Remove TOTP Settings +- Потвърдете премахването на TOTP наÑтройките +- +- +- Are you sure you want to delete TOTP settings for this entry? +- ÐаиÑтина ли иÑкате да изтриете наÑтройките на TOTP за този запиÑ? +- +- +- +- URLEdit +- +- Invalid URL +- Ðевалиден URL +- +- +- +- UpdateCheckDialog +- +- Checking for updates +- Проверка за актуализации +- +- +- Checking for updates... +- Проверка за актуализации... +- +- +- Close +- ЗатварÑне +- +- +- Update Error! +- Грешка при актуализиране! +- +- +- An error occurred in retrieving update information. +- Възникна грешка при извличането на Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° актуализиране. +- +- +- Please try again later. +- МолÑ, опитайте отново по-къÑно. +- +- +- Software Update +- Софтуерно актуализиране +- +- +- A new version of KeePassXC is available! +- Ðова верÑÐ¸Ñ Ð½Ð° KeePassXC е налична! +- +- +- KeePassXC %1 is now available — you have %2. +- KeePassXC %1 е на разположение — текущата %2. +- +- +- Download it at keepassxc.org +- Изтеглете Ñ Ð½Ð° keepassxc.org +- +- +- You're up-to-date! +- ВерÑиÑта е актуалната! +- +- +- KeePassXC %1 is currently the newest version available +- KeePassXC %1 в момента е най-новата верÑÐ¸Ñ +- +- +- +- WelcomeWidget +- +- Start storing your passwords securely in a KeePassXC database +- Започнете да ÑъхранÑвате паролите Ñи Ñигурно в KeePassXC базата данни +- +- +- Create new database +- Създаване на нова база данни +- +- +- Open existing database +- ОтварÑне на ÑъщеÑтвуващата база данни +- +- +- Import from KeePass 1 +- Ð’Ð½Ð¾Ñ Ð¾Ñ‚ KeePass 1 +- +- +- Import from CSV +- Импортиране от CSV +- +- +- Recent databases +- Скорошни бази данни +- +- +- Welcome to KeePassXC %1 +- Добре дошли в KeePassXC %1 +- +- +- Import from 1Password +- Импортиране от 1Password +- +- +- Open a recent database +- ОтварÑне на Ñкорошна база данни +- +- +- +- YubiKey +- +- %1 [%2] Configured Slot - %3 +- %1 [%2] Конфигуриран Ñлот -% 3 +- +- +- %1 [%2] Challenge Response - Slot %3 - %4 +- +- +- +- Press +- ÐатиÑнете +- +- +- Passive +- ПаÑивни +- +- +- %1 Invalid slot specified - %2 +- %1 Ðевалиден Ñлот -% 2 +- +- +- The YubiKey interface has not been initialized. +- YubiKey интерфейÑÑŠÑ‚ не е инициализиран. +- +- +- Hardware key is currently in use. +- ХардуерниÑÑ‚ ключ в момента Ñе използва. +- +- +- Could not find hardware key with serial number %1. Please plug it in to continue. +- Ðе може да Ñе намери хардуерен ключ ÑÑŠÑ Ñериен номер %1. Включете го, за да продължите. +- +- +- Hardware key timed out waiting for user interaction. +- Времето за изчакване на Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ñ Ñ…Ð°Ñ€Ð´ÑƒÐµÑ€Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡ изтече. +- +- +- A USB error ocurred when accessing the hardware key: %1 +- Грешка Ñ USB при доÑтъп до Ñ…Ð°Ñ€Ð´ÑƒÐµÑ€Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡: %1 +- +- +- Failed to complete a challenge-response, the specific error was: %1 +- +- +- +- +- YubiKeyEditWidget +- +- Refresh +- ОбновÑване +- +- +- YubiKey Challenge-Response +- +- +- +- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- <p>Ðко притежавате <a href="https://www.yubico.com/">YubiKey</a>, можете да го използвате за допълнителна ÑигурноÑÑ‚.</p><p>YubiKey изиÑква един от неговите Ñлотове да бъде програмирана като <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response.</a></p> +- +- +- Refresh hardware tokens +- ОбновÑване на хардуерни токени +- +- +- Hardware key slot selection +- Избор на Ñлот на хардуерен ключ +- +- +- Could not find any hardware keys! +- Ðе Ñа намерени хардуерни ключове! +- +- +- Selected hardware key slot does not support challenge-response! +- ИзбраниÑÑ‚ Ñлот на Ñ…Ð°Ñ€Ð´ÑƒÐµÑ€Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡ не поддържа challenge-response! +- +- +- Detecting hardware keys… +- Откриване на хардуерни ключове... +- +- +- No hardware keys detected +- Ðе Ñа открити хардуерни ключове +- +- +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_ca.ts keepassxc-2.6.4-patched/share/translations/keepassx_ca.ts +--- keepassxc-2.6.4-orig/share/translations/keepassx_ca.ts 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/translations/keepassx_ca.ts 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7841 +0,0 @@ +- +- +- AboutDialog +- +- About KeePassXC +- Quant al KeePassXC +- +- +- About +- Quant a +- +- +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- Reporteu errors a: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- +- +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- KeepassXC es distribueix sota els termes de la Llicència Pública General GNU (GPL) versió 2 o (segons la vostra opció) versió 3. +- +- +- Contributors +- Contribuïdors +- +- +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Vegeu les contribucions a GitHub</a> +- +- +- Debug Info +- Informació de depuració +- +- +- Include the following information whenever you report a bug: +- Inclogueu la següent informació a l'hora de reportar un error: +- +- +- Copy to clipboard +- Copia al porta-retalls +- +- +- Project Maintainers: +- Mantenidors del projecte: +- +- +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- Agraïments de l'equip de KeePassXC a debfx per crear el KeePassX original. +- +- +- +- AgentSettingsWidget +- +- Use OpenSSH for Windows instead of Pageant +- Utilitza OpenSSH per a Windows enlloc de Pageant +- +- +- Enable SSH Agent integration +- Activar integració de l'agent SSH +- +- +- SSH_AUTH_SOCK value +- +- +- +- SSH_AUTH_SOCK override +- +- +- +- (empty) +- (buit) +- +- +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- +- +- +- SSH Agent connection is working! +- +- +- +- +- ApplicationSettingsWidget +- +- Application Settings +- Configuració de l'aplicació +- +- +- General +- General +- +- +- Security +- Seguretat +- +- +- Access error for config file %1 +- Error d'accés al fitxer de configuració %1 +- +- +- Icon only +- Només la icona +- +- +- Text only +- Només text +- +- +- Text beside icon +- Text al costat de la icona +- +- +- Text under icon +- Text sota la icona +- +- +- Follow style +- Segueix l'estil +- +- +- Reset Settings? +- Restableix la configuració? +- +- +- Are you sure you want to reset all general and security settings to default? +- Esteu segur que voleu reinicialitzar totes les configuracions generals i de seguretat als valors predeterminats? +- +- +- Monochrome (light) +- Monocrom (clar) +- +- +- Monochrome (dark) +- Monocrom (fosc) +- +- +- Colorful +- Colors +- +- +- You must restart the application to set the new language. Would you like to restart now? +- +- +- +- +- ApplicationSettingsWidgetGeneral +- +- Basic Settings +- Configuració bàsica +- +- +- Startup +- Inicialització +- +- +- Start only a single instance of KeePassXC +- Inicia només una instància del KeePassXC +- +- +- Minimize window at application startup +- Minimitza la finestra en obrir l'aplicació +- +- +- File Management +- Gestió de fitxers +- +- +- Backup database file before saving +- Fes una còpia de seguretat abans de desar +- +- +- Automatically save after every change +- Desa després de cada canvi de forma automàtica +- +- +- Automatically reload the database when modified externally +- Torna a carregar automàticament la base de dades quan sigui modificada de forma externa +- +- +- Entry Management +- Gestió d'entrades +- +- +- Use group icon on entry creation +- Utilitza la icona del grup en crear una entrada +- +- +- Minimize instead of app exit +- Minimitza en lloc de sortir de l'aplicació +- +- +- Show a system tray icon +- Mostreu una icona a la safata del sistema +- +- +- Hide window to system tray when minimized +- Amaga la finestra a la safata del sistema en minimitzar +- +- +- Auto-Type +- Compleció automàtica +- +- +- Use entry title to match windows for global Auto-Type +- Usa el títol de l'entrada per coincidir amb la finestra per la compleció automàtica global +- +- +- Use entry URL to match windows for global Auto-Type +- Usa l'URL d'entrada per lligar amb la finestra per la compleció automàtica global +- +- +- Always ask before performing Auto-Type +- Pregunta sempre abans d'efectuar la compleció automàtica +- +- +- ms +- Milliseconds +- ms +- +- +- Movable toolbar +- Barra d'eines mòbil +- +- +- Remember previously used databases +- Recorda les bases de dades utilitzades prèviament +- +- +- Load previously open databases on startup +- Carrega les bases de dades obertes prèviament a l'inici +- +- +- Remember database key files and security dongles +- Recorda els fitxers clau i les motxilles de seguretat +- +- +- Check for updates at application startup once per week +- Comprova si hi ha actualitzacions a l'inici de l'aplicació un cop per setmana +- +- +- Include beta releases when checking for updates +- Inclou les versions beta quan es comprovin les actualitzacions +- +- +- Language: +- Idioma: +- +- +- (restart program to activate) +- (reinicieu per activar-ho) +- +- +- Minimize window after unlocking database +- Minimitza la finestra després de desbloquejar la base de dades +- +- +- Minimize when opening a URL +- Minimitza en obrir una URL +- +- +- Hide window when copying to clipboard +- Oculta la finestra al copiar al porta-retalls +- +- +- Minimize +- Minimitza +- +- +- Drop to background +- Envia al fons +- +- +- Favicon download timeout: +- Favicon - Temps d'espera de la descàrrega: +- +- +- Website icon download timeout in seconds +- Temps d'espera en segons de la descàrrega d'icones +- +- +- sec +- Seconds +- s +- +- +- Toolbar button style +- Estil dels botons de la barra d'eines +- +- +- Language selection +- Selecció d'idioma +- +- +- Global auto-type shortcut +- Drecera global de compleció automàtica +- +- +- Auto-type character typing delay milliseconds +- Retard d'escriptura en mil·lisegons de la compleció automàtica +- +- +- Auto-type start delay milliseconds +- Retard d'inici en mil·lisegons de la compleció automàtica +- +- +- Automatically launch KeePassXC at system startup +- Executar KeePassXC a l'inici del sistema +- +- +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- +- +- +- User Interface +- Interfície d'usuari +- +- +- Toolbar button style: +- Estil de la barra d'eines +- +- +- Use monospaced font for notes +- +- +- +- Tray icon type: +- Tipus d'icona de la safata del sistema +- +- +- Reset settings to default… +- Valors de configuració per defecte... +- +- +- Auto-Type typing delay: +- +- +- +- Global Auto-Type shortcut: +- +- +- +- Auto-Type start delay: +- +- +- +- Automatically save when locking database +- +- +- +- Automatically save non-data changes when locking database +- +- +- +- Tray icon type +- +- +- +- +- ApplicationSettingsWidgetSecurity +- +- Timeouts +- Temps excedits +- +- +- Clear clipboard after +- Esborra el porta-retalls després de +- +- +- sec +- Seconds +- s +- +- +- Lock databases after inactivity of +- Bloca les bases de dades després d'una inactivitat de +- +- +- min +- min +- +- +- Forget TouchID after inactivity of +- Oblida el TouchID després d'una inactivitat de +- +- +- Convenience +- Conveniència +- +- +- Lock databases when session is locked or lid is closed +- Bloca les bases de dades quan la sessió es bloquegi o es tanqui la tapa +- +- +- Forget TouchID when session is locked or lid is closed +- Oblida el TouchID quan la sessió està blocada o la tapa està tancada +- +- +- Lock databases after minimizing the window +- Bloca les bases de dades després de minimitzar la finestra +- +- +- Re-lock previously locked database after performing Auto-Type +- Torna a blocar la base de dades després d'una compleció automàtica +- +- +- Hide passwords in the entry preview panel +- Oculta les contrasenyes al panell de previsualització de l'entrada +- +- +- Hide entry notes by default +- Oculta les notes de l'entrada per defecte +- +- +- Privacy +- Privacitat +- +- +- Use DuckDuckGo service to download website icons +- Usa DuckDuckGo per a descarregar icones de llocs web +- +- +- Clipboard clear seconds +- Segons de la neteja del porta-retalls +- +- +- Touch ID inactivity reset +- Reinici per inactivitat del Touch ID +- +- +- Database lock timeout seconds +- Segons de temps d'espera per a bloquejar la base de dades +- +- +- min +- Minutes +- min +- +- +- Clear search query after +- Elimina la teva cerca després de +- +- +- Require password repeat when it is visible +- +- +- +- Hide passwords when editing them +- +- +- +- Use placeholder for empty password fields +- +- +- +- +- AutoType +- +- Couldn't find an entry that matches the window title: +- No hem trobat una entrada que coincidesca amb el títol de la finestra: +- +- +- Auto-Type - KeePassXC +- Compleció automàtica - KeePassXC +- +- +- Auto-Type +- Compleció automàtica +- +- +- The Syntax of your Auto-Type statement is incorrect! +- La sintaxi de la declaració de compleció automàtica és incorrecta! +- +- +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- Aquesta ordre de compleció automàtica conté un retard molt llarg. Esteu segur que voleu continuar? +- +- +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- Aquesta comanda de compleció automàtica conté pulsacions de tecles molt lentes. Esteu segur que voleu continuar? +- +- +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- Aquesta comanda de compleció automàtica conté arguments que es repeteixen molt sovint. Esteu segur que voleu continuar? +- +- +- Permission Required +- Permís necessari +- +- +- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. +- +- +- +- +- AutoTypeAssociationsModel +- +- Window +- Finestra +- +- +- Sequence +- Seqüència +- +- +- Default sequence +- Seqüència per omissió +- +- +- +- AutoTypeMatchModel +- +- Group +- Grup +- +- +- Title +- Títol +- +- +- Username +- Nom d'usuari +- +- +- Sequence +- Seqüència +- +- +- +- AutoTypeMatchView +- +- Copy &username +- Copia el nom d'&usuari +- +- +- Copy &password +- Copia la contrasenya +- +- +- +- AutoTypePlatformMac +- +- Permission Required +- Permís necessari +- +- +- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. +- +- +- +- +- AutoTypeSelectDialog +- +- Auto-Type - KeePassXC +- Compleció automàtica - KeePassXC +- +- +- Select entry to Auto-Type: +- Seleccione l'entrada per a la compleció automàtica: +- +- +- Search... +- Cerca... +- +- +- +- BrowserAccessControlDialog +- +- KeePassXC - Browser Access Request +- +- +- +- %1 is requesting access to the following entries: +- %1 demana accés a les entrades següents: +- +- +- Remember access to checked entries +- +- +- +- Remember +- Recorda +- +- +- Allow access to entries +- Permetre accés a les entrades +- +- +- Allow Selected +- +- +- +- Deny All +- +- +- +- Disable for this site +- +- +- +- +- BrowserEntrySaveDialog +- +- KeePassXC-Browser Save Entry +- +- +- +- Ok +- D'acord +- +- +- Cancel +- Cancel·lar +- +- +- You have multiple databases open. +-Please select the correct database for saving credentials. +- Teniu diverses bases de dades obertes. +-Seleccioneu la base de dades correcta per desar les credencials. +- +- +- +- BrowserService +- +- KeePassXC: New key association request +- KeePassXC: Nova petició de associació de clau +- +- +- Save and allow access +- Desa i autoritza l'accès +- +- +- KeePassXC: Overwrite existing key? +- KeePassXC: Voleu sobreescriure la clau existent? +- +- +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- Ja existeix una clau de xifrat compartida amb el nom "%1". +-Voleu sobreescriure-la? +- +- +- KeePassXC: Update Entry +- KeePassXC: Actualitza l'entrada +- +- +- Do you want to update the information in %1 - %2? +- Voleu actualitzar la informació en %1 - %2? +- +- +- Abort +- Avorta +- +- +- Converting attributes to custom data… +- Conversió d'atributs a dades personalitzades... +- +- +- KeePassXC: Converted KeePassHTTP attributes +- KeePassXC: atributs convertits de KeePassHTTP +- +- +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- +- +- +- Successfully moved %n keys to custom data. +- +- +- +- KeePassXC: No entry with KeePassHTTP attributes found! +- KeePassXC: No s'ha trobat cap entrada amb atributs KeePassHTTP +- +- +- The active database does not contain an entry with KeePassHTTP attributes. +- La base de dades activa no conté cap entrada amb atributs KeePassHTTP +- +- +- KeePassXC: Legacy browser integration settings detected +- +- +- +- KeePassXC: Create a new group +- KeePassXC: crea un grup nou +- +- +- A request for creating a new group "%1" has been received. +-Do you want to create this group? +- +- +- +- +- Your KeePassXC-Browser settings need to be moved into the database settings. +-This is necessary to maintain your current browser connections. +-Would you like to migrate your existing settings now? +- +- +- +- Don't show this warning again +- No tornis a mostrar aquest avís +- +- +- You have received an association request for the following database: +-%1 +- +-Give the connection a unique name or ID, for example: +-chrome-laptop. +- +- +- +- +- BrowserSettingsWidget +- +- Dialog +- Diàleg +- +- +- This is required for accessing your databases with KeePassXC-Browser +- Requerit per a l'accés a les teves bases de dades amb el navegador KeePassXC +- +- +- Enable browser integration +- Habilita la integració del navegador +- +- +- General +- General +- +- +- Browsers installed as snaps are currently not supported. +- Actualment, no s'admeten els navegadors instal·lats com a Snaps. +- +- +- Enable integration for these browsers: +- Habilita la integració amb els següents navegadors: +- +- +- Vivaldi +- Vivaldi +- +- +- &Edge +- &Edge +- +- +- Firefox +- Firefox +- +- +- Tor Browser +- Tor Browser +- +- +- Brave +- Brave +- +- +- Google Chrome +- Google Chrome +- +- +- Chromium +- Chromium +- +- +- Show a notification when credentials are requested +- Credentials mean login data requested via browser extension +- +- +- +- Request to unlock the database if it is locked +- +- +- +- Only entries with the same scheme (http://, https://, ...) are returned. +- Només es retornen les entrades amb el mateix patró (http://, https://, ...) +- +- +- Match URL scheme (e.g., https://...) +- +- +- +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- Només retorna les millors coincidències per a una adreça URL específica en lloc de totes les entrades per al domini. +- +- +- Return only best-matching credentials +- +- +- +- Returns expired credentials. String [expired] is added to the title. +- +- +- +- Allow returning expired credentials +- +- +- +- All databases connected to the extension will return matching credentials. +- +- +- +- Search in all opened databases for matching credentials +- Credentials mean login data requested via browser extension +- +- +- +- Sort matching credentials by title +- Credentials mean login data requested via browser extension +- +- +- +- Sort matching credentials by username +- Credentials mean login data requested via browser extension +- +- +- +- Advanced +- Avançat +- +- +- Never ask before accessing credentials +- Credentials mean login data requested via browser extension +- +- +- +- Never ask before updating credentials +- Credentials mean login data requested via browser extension +- +- +- +- Do not ask permission for HTTP Basic Auth +- An extra HTTP Basic Auth setting +- +- +- +- Automatically creating or updating string fields is not supported. +- L'actualització o creació de camps de test no està suportada. +- +- +- Return advanced string fields which start with "KPH: " +- +- +- +- Don't display the popup suggesting migration of legacy KeePassHTTP settings. +- +- +- +- Do not prompt for KeePassHTTP settings migration. +- +- +- +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- Actualitza la ruta binària de KeePassXC o keepassxc-proxy automàticament als scripts de missatgeria nativa a l'inici. +- +- +- Update native messaging manifest files at startup +- +- +- +- Use a custom proxy location if you installed a proxy manually. +- Usa una ubicació personalitzada de servidor intermediari si s'ha instal·lat el servidor intermediari manualment +- +- +- Use a custom proxy location: +- Meant is the proxy for KeePassXC-Browser +- +- +- +- Custom proxy location field +- +- +- +- Browser for custom proxy file +- +- +- +- Browse... +- Button for opening file dialog +- Navega... +- +- +- Use a custom browser configuration location: +- +- +- +- Browser type: +- Tipus de navegador: +- +- +- Toolbar button style +- Estil dels botons de la barra d'eines +- +- +- Config Location: +- +- +- +- Custom browser location field +- +- +- +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- +- +- +- Browse for custom browser path +- +- +- +- Custom extension ID: +- +- +- +- Custom extension ID +- +- +- +- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 +- +- +- +- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 +- +- +- +- Please see special instructions for browser extension use below +- Vegeu a sota les instruccions especials per a l'ús d'extensions del navegador +- +- +- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. +- +- +- +- <b>Warning:</b> The following options can be dangerous! +- <b>Atenció:</b> Canviar les següents opcions és perillós! +- +- +- Executable Files +- Fitxers executables +- +- +- All Files +- Tots els fitxers +- +- +- Select custom proxy location +- Seleccioneu la ubicació personalitzada del servidor intermediari +- +- +- Select native messaging host folder location +- +- +- +- +- CloneDialog +- +- Clone Options +- Clona les opcions +- +- +- Append ' - Clone' to title +- Afegeix ' - clon' al títol +- +- +- Replace username and password with references +- Substitueix el nom d'usuari i la contrasenya amb referències +- +- +- Copy history +- Còpia el historial +- +- +- +- CsvImportWidget +- +- Import CSV fields +- Importació de fitxer CSV +- +- +- filename +- nom del fitxer +- +- +- size, rows, columns +- mida, files, columnes +- +- +- Encoding +- Codificació +- +- +- Codec +- Còdec +- +- +- Text is qualified by +- Text està qualificat per +- +- +- Fields are separated by +- Els camps estan separats per +- +- +- Comments start with +- Els comentaris comencen amb +- +- +- Consider '\' an escape character +- Considera ' \' com un caràcter d'escapada +- +- +- Preview +- Visualització prèvia +- +- +- Imported from CSV file +- Importats d'un fitxer CSV +- +- +- Original data: +- Dades originals: +- +- +- Error +- Error +- +- +- Error(s) detected in CSV file! +- S'han detectat errors al fitxer CSV! +- +- +- [%n more message(s) skipped] +- [% n més missatges s'ha omès][s'ha/n omès %n missatge/s més] +- +- +- CSV import: writer has errors: +-%1 +- Importació CSV: writer té errors: +-%1 +- +- +- Text qualification +- +- +- +- Field separation +- Separador de camp +- +- +- Number of header lines to discard +- Nombre de línies de la capçalera a descartar +- +- +- CSV import preview +- Previsualització de la importació CSV +- +- +- Column Association +- +- +- +- Last Modified +- Darrera modificació +- +- +- Password +- Contrasenya +- +- +- Created +- Creat +- +- +- Notes +- Notes +- +- +- Title +- Títol +- +- +- Group +- Grup +- +- +- URL +- URL +- +- +- Username +- Nom d'usuari +- +- +- Header lines skipped +- +- +- +- First line has field names +- La primera línia té els noms dels camps +- +- +- Not Present +- +- +- +- Column %1 +- Columna %1 +- +- +- TOTP +- TOTP +- +- +- Icon +- Icona +- +- +- +- CsvParserModel +- +- %n column(s) +- %n columna(es)%n columna(es) +- +- +- %1, %2, %3 +- file info: bytes, rows, columns +- %1, %2, %3 +- +- +- %n byte(s) +- %n byte(s)%n byte(s) +- +- +- %n row(s) +- %n fila(es)%n fila(es) +- +- +- +- Database +- +- File %1 does not exist. +- El fitxer %1 no existeix. +- +- +- Unable to open file %1. +- No es pot obrir el fitxer %1. +- +- +- Error while reading the database: %1 +- S'ha produït un error al llegir la base de dades: %1 +- +- +- File cannot be written as it is opened in read-only mode. +- El fitxer no es pot escriure perquè s'ha obert en mode només de lectura. +- +- +- Key not transformed. This is a bug, please report it to the developers! +- La clau no s'ha transformat. Això és un error, notifica als desenvolupadors! +- +- +- %1 +-Backup database located at %2 +- %1 +-Còpia de seguretat de la base de dades situada a %2 +- +- +- Could not save, database does not point to a valid file. +- No s'ha pogut desar, la base de dades no apunta a un fitxer vàlid. +- +- +- Could not save, database file is read-only. +- No s'ha pogut desar, el fitxer de base de dades és de només lectura. +- +- +- Database file has unmerged changes. +- El fitxer de base de dades té canvis no fusionats. +- +- +- Recycle Bin +- Paperera +- +- +- Passwords +- Root group name +- Contrasenyes +- +- +- Database save is already in progress. +- +- +- +- Could not save, database has not been initialized! +- +- +- +- +- DatabaseOpenDialog +- +- Unlock Database - KeePassXC +- Desbloca la base de dades - KeePassXC +- +- +- +- DatabaseOpenWidget +- +- Key File: +- Fitxer clau: +- +- +- Refresh +- Actualitza +- +- +- Don't show this warning again +- No tornis a mostrar aquest avís +- +- +- All files +- Tots els fitxers +- +- +- Key files +- Fitxers de clau +- +- +- Select key file +- Seleccioneu el fitxer de clau +- +- +- Failed to open key file: %1 +- No s'ha pogut obrir el fitxer de clau: %1 +- +- +- Unlock KeePassXC Database +- Desbloqueja la base de dades de KeePassXC +- +- +- Enter Password: +- Introduïu la contrasenya: +- +- +- Password field +- Camp de contrasenya +- +- +- Hardware key slot selection +- Selecció de la ranura de la motxilla +- +- +- Browse for key file +- +- +- +- Browse... +- Navega... +- +- +- Refresh hardware tokens +- Refresca els testimonis de maquinari +- +- +- Hardware Key: +- Motxilla: +- +- +- Hardware key help +- Ajuda de la motxilla +- +- +- TouchID for Quick Unlock +- Usa el TouchID per desbloquejar ràpidament +- +- +- Unlock failed and no password given +- El desbloqueig ha fallat i no s'ha donat cap contrasenya +- +- +- Unlocking the database failed and you did not enter a password. +-Do you want to retry with an "empty" password instead? +- +-To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. +- +- +- +- Retry with empty password +- Torna-ho a provar amb la contrasenya buida +- +- +- Enter Additional Credentials (if any): +- Introduïu credencials addionals (si cal): +- +- +- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +-<p>Click for more information...</p> +- +- +- +- Key file help +- +- +- +- ? +- +- +- +- Cannot use database file as key file +- +- +- +- You cannot use your database file as a key file. +-If you do not have a key file, please leave the field empty. +- +- +- +- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> +- +- +- +- Key file to unlock the database +- +- +- +- Please touch the button on your YubiKey! +- Per favor, toqueu el botó en el seu YubiKey! +- +- +- Detecting hardware keys… +- +- +- +- No hardware keys detected +- +- +- +- Select hardware key… +- +- +- +- Old key file format +- +- +- +- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> +- +- +- +- +- DatabaseSettingWidgetMetaData +- +- Passwords +- Contrasenyes +- +- +- +- DatabaseSettingsDialog +- +- Advanced Settings +- Configuració avançada +- +- +- General +- General +- +- +- Security +- Seguretat +- +- +- Encryption Settings +- Configuració del xifrat +- +- +- Browser Integration +- Integració amb el navegador +- +- +- Database Credentials +- +- +- +- +- DatabaseSettingsWidgetBrowser +- +- KeePassXC-Browser settings +- KeePassXC-Configuració del navegador +- +- +- Stored keys +- Claus emmagatzemades +- +- +- Remove +- Suprimiu +- +- +- Delete the selected key? +- Voleu eliminar la clau seleccionada? +- +- +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- +- +- +- Key +- Clau +- +- +- Value +- Valor +- +- +- Enable Browser Integration to access these settings. +- Permet que la integració del navegador accedeixi a aquesta configuració. +- +- +- Disconnect all browsers +- Desconnecta tots els navegadors +- +- +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- Esteu segur que voleu desconnectar tots els navegadors? +-Això pot impedir la connexió al connector del navegador. +- +- +- KeePassXC: No keys found +- KeePassXC: No s'han trobat claus +- +- +- No shared encryption keys found in KeePassXC settings. +- +- +- +- KeePassXC: Removed keys from database +- KeePassXC: Claus de la base de dades eliminades +- +- +- Successfully removed %n encryption key(s) from KeePassXC settings. +- +- +- +- Forget all site-specific settings on entries +- +- +- +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- +- +- +- Removing stored permissions… +- Eliminant permisos emmagatzemats... +- +- +- Abort +- Avorta +- +- +- KeePassXC: Removed permissions +- KeePassXC: Permisos eliminats +- +- +- Successfully removed permissions from %n entry(s). +- +- +- +- KeePassXC: No entry with permissions found! +- KeePassXC: No s'ha trobat cap entrada amb permisos! +- +- +- The active database does not contain an entry with permissions. +- La base de dades activa no conté cap entrada amb permisos. +- +- +- Move KeePassHTTP attributes to custom data +- Desplaça els atributs de KeePassHTTP a dades personalitzades +- +- +- Do you really want to move all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- +- +- +- Stored browser keys +- +- +- +- Remove selected key +- Suprimeix la clau seleccionada +- +- +- Move KeePassHTTP attributes to KeePassXC-Browser custom data +- +- +- +- Refresh database root group ID +- +- +- +- Created +- Creat +- +- +- Refresh database ID +- +- +- +- Do you really want refresh the database ID? +-This is only necessary if your database is a copy of another and the browser extension cannot connect. +- +- +- +- +- DatabaseSettingsWidgetDatabaseKey +- +- Add additional protection... +- Afegeix una protecció addicional... +- +- +- No password set +- Sense contrasenya +- +- +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- +- +- +- Continue without password +- Continua sense contrasenya +- +- +- No encryption key added +- No s'ha afegit cap clau de xifrat +- +- +- You must add at least one encryption key to secure your database! +- S'ha d'afegir com a mínim una clau d'encriptació per assegurar la base de dades! +- +- +- Unknown error +- Error desconegut +- +- +- Failed to change database credentials +- +- +- +- +- DatabaseSettingsWidgetEncryption +- +- Encryption Algorithm: +- Algorisme de d’encriptatge: +- +- +- AES: 256 Bit (default) +- AES: 256 bits (per defecte) +- +- +- Twofish: 256 Bit +- Twofish: 256 bits +- +- +- Key Derivation Function: +- Funció de derivació de clau: +- +- +- Transform rounds: +- Transformar rondes: +- +- +- Memory Usage: +- Ús de memòria: +- +- +- Parallelism: +- Paral·lelisme: +- +- +- Decryption Time: +- Temps de desxifrat: +- +- +- ?? s +- ?? s +- +- +- Change +- Canvia +- +- +- Higher values offer more protection, but opening the database will take longer. +- Els valors més alts ofereixen més protecció, però es trigarà més a obrir la base de dades. +- +- +- Database format: +- Format de la base de dades: +- +- +- This is only important if you need to use your database with other programs. +- Això només és important si necessiteu utilitzar la vostra base de dades amb altres programes. +- +- +- KDBX 4.0 (recommended) +- KDBX 4.0 (recomanat) +- +- +- KDBX 3.1 +- KDBX 3.1 +- +- +- unchanged +- Database decryption time is unchanged +- Inalterat +- +- +- Number of rounds too high +- Key transformation rounds +- Nombre de rondes massa alt +- +- +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or days (or even longer) to open! +- +- +- +- Understood, keep number +- +- +- +- Cancel +- Cancel·lar +- +- +- Number of rounds too low +- Key transformation rounds +- Nombre de rondes massa baix +- +- +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database may be too easy to crack! +- +- +- +- KDF unchanged +- KDF sense canvis +- +- +- Failed to transform key with new KDF parameters; KDF unchanged. +- +- +- +- MiB +- Abbreviation for Mebibytes (KDF settings) +- MiB MiB +- +- +- thread(s) +- Threads for parallel execution (KDF settings) +- Thread (s)Fil(s) +- +- +- Change existing decryption time +- Canvia el temps de desxifrat existent +- +- +- Decryption time in seconds +- Temps de desxifrat en segons +- +- +- Database format +- Format de la base de dades +- +- +- Encryption algorithm +- Algoritme de xifrat +- +- +- Key derivation function +- Funció de derivació de clau +- +- +- Transform rounds +- Rondes de transformació +- +- +- Memory usage +- Ús de la memòria +- +- +- Parallelism +- Paral·lelisme +- +- +- ?? ms +- +- +- +- ? s +- +- +- +- +- DatabaseSettingsWidgetFdoSecrets +- +- Exposed Entries +- +- +- +- Don't expose this database +- +- +- +- Expose entries under this group: +- +- +- +- Enable Secret Service to access these settings. +- +- +- +- +- DatabaseSettingsWidgetGeneral +- +- Database Meta Data +- Metadades de la base de dades +- +- +- Database name: +- Nom de base de dades: +- +- +- Database description: +- Descripció de la base de dades: +- +- +- Default username: +- Usuari per defecte: +- +- +- History Settings +- Configuració de l'historial +- +- +- Max. history items: +- Nombre màxim d'elements a l'historial: +- +- +- Max. history size: +- Mida màxima de l'historial: +- +- +- MiB +- MiB +- +- +- Use recycle bin +- Utilitza la paperera +- +- +- Additional Database Settings +- Configuració addicional de la base de dades +- +- +- Database name field +- Camp de nom de la base de dades +- +- +- Database description field +- Camp de descripció de la base de dades +- +- +- Default username field +- Camp d'usuari predeterminat +- +- +- Maximum number of history items per entry +- +- +- +- Maximum size of history per entry +- +- +- +- Delete Recycle Bin +- +- +- +- Do you want to delete the current recycle bin and all its contents? +-This action is not reversible. +- +- +- +- (old) +- (antic) +- +- +- Enable compression (recommended) +- +- +- +- +- DatabaseSettingsWidgetKeeShare +- +- Sharing +- Compartició +- +- +- Breadcrumb +- Ruta de navegació +- +- +- Type +- Tipus +- +- +- Path +- Camí +- +- +- Last Signer +- Últim signant +- +- +- Certificates +- Certificats +- +- +- > +- Breadcrumb separator +- > +- +- +- +- DatabaseSettingsWidgetMetaDataSimple +- +- Database Name: +- Nom de la base de dades: +- +- +- Description: +- Descripció: +- +- +- Database name field +- Camp de nom de la base de dades +- +- +- Database description field +- Camp de descripció de la base de dades +- +- +- +- DatabaseTabWidget +- +- KeePass 2 Database +- Base de dades de KeePass 2 +- +- +- All files +- Tots els fitxers +- +- +- Open database +- Obre la base de dades +- +- +- CSV file +- Fitxer CSV +- +- +- Merge database +- Fusiona la base de dades +- +- +- Open KeePass 1 database +- Obre base de dades de KeePass 1 +- +- +- KeePass 1 database +- Base de dades de KeePass 1 +- +- +- Export database to CSV file +- Exporta la base de dades a un fitxer CSV +- +- +- Writing the CSV file failed. +- Ha fallat l'escriptura al fitxer CSV. +- +- +- Database creation error +- Error de creació de la base de dades +- +- +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- +- +- +- Select CSV file +- Selecciona un fitxer CSV +- +- +- New Database +- Base de dades nova +- +- +- %1 [New Database] +- Database tab name modifier +- %1 [nova base de dades] +- +- +- %1 [Locked] +- Database tab name modifier +- %1 [bloquejat] +- +- +- %1 [Read-only] +- Database tab name modifier +- %1 [només de lectura] +- +- +- Failed to open %1. It either does not exist or is not accessible. +- +- +- +- Export database to HTML file +- Exporta la base de dades a un fitxer HTML +- +- +- HTML file +- Fitxer HTML +- +- +- Writing the HTML file failed. +- +- +- +- Export Confirmation +- Confirmació de l'exportació +- +- +- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? +- +- +- +- Open OPVault +- +- +- +- +- DatabaseWidget +- +- Searching... +- Cercant... +- +- +- Do you really want to delete the entry "%1" for good? +- Realment voleu suprimir l'entrada "%1" per sempre? +- +- +- Do you really want to move entry "%1" to the recycle bin? +- Realment voleu moure l'entrada "%1" a la paperera? +- +- +- Do you really want to move %n entry(s) to the recycle bin? +- Realment voleu desplaçar% n entrada (s) a la Paperera de reciclatge?Esteu segur que voleu moure %n entrada/es a la paperera de reciclatge? +- +- +- Execute command? +- Execute l'ordre? +- +- +- Do you really want to execute the following command?<br><br>%1<br> +- Voleu executar la següent ordre? <br><br>%1<br> +- +- +- Remember my choice +- Recordar la meva elecció +- +- +- Do you really want to delete the group "%1" for good? +- Realment voleu suprimir el grup "%1" per sempre? +- +- +- No current database. +- Cap base de dades actual. +- +- +- No source database, nothing to do. +- Cap base de dades, res a veure. +- +- +- Search Results (%1) +- Resultats de la cerca (%1) +- +- +- No Results +- No hi ha resultats +- +- +- File has changed +- El fitxer ha canviat +- +- +- The database file has changed. Do you want to load the changes? +- El fitxer de base de dades ha canviat. Voleu carregar els canvis? +- +- +- Merge Request +- Petició de combinació +- +- +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- El fitxer de base de dades ha canviat i teniu canvis sense desar. +-Voleu fusionar els canvis? +- +- +- Empty recycle bin? +- Buida la paperera? +- +- +- Are you sure you want to permanently delete everything from your recycle bin? +- Esteu segur que voleu suprimir permanentment tot el contingut de la paperera? +- +- +- Do you really want to delete %n entry(s) for good? +- Esteu segur que voleu suprimir% n entrades per al Good?Esteu segur que voleu suprimir % n entrades permanentment? +- +- +- Delete entry(s)? +- Voleu suprimir les entrades?Voleu suprimir la/es entrada/es? +- +- +- Move entry(s) to recycle bin? +- Mou l'entrada (s) a la Paperera de reciclatge?Mou l'entrada(es) a la paperera de reciclatge? +- +- +- Lock Database? +- Voleu bloquejar la base de dades? +- +- +- You are editing an entry. Discard changes and lock anyway? +- Esteu editant una entrada. Voleu descartar els canvis i bloquejar de totes maneres? +- +- +- "%1" was modified. +-Save changes? +- "%1" ha canviat. +-Voleu desar els canvis? +- +- +- Database was modified. +-Save changes? +- S'ha modificat la base de dades. +-Voleu desar els canvis? +- +- +- Save changes? +- Voleu desar els canvis? +- +- +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- No es pot obrir el nou fitxer de base de dades mentre intenteu la recàrrega automàtica. +-Error: %1 +- +- +- Disable safe saves? +- Voleu deshabilitar el desat segur? +- +- +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- KeePassXC no ha pogut desar la base de dades. És probable que un servei de sincronització de fitxers estiguin bloquejant el fitxer de la base de dades. +-Voleu deshabilitar el desat segur i provar-ho un altre cop? +- +- +- Passwords +- Contrasenyes +- +- +- Save database as +- Desa la base de dades com a +- +- +- KeePass 2 Database +- Base de dades de KeePass 2 +- +- +- Replace references to entry? +- Voleu substituir les referències a l'entrada? +- +- +- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? +- L'entrada "%1" té %2 referències. Voleu sobreescriure les referències amb valors, ometre aquesta entrada o suprimir igualment?L'entrada "%1" té %2 referència/es. Voleu sobreescriure les referències amb valors, ometre aquesta entrada o suprimir igualment? +- +- +- Delete group +- Suprimeix el grup +- +- +- Move group to recycle bin? +- Vols moure el grup a la Paperera de reciclatge? +- +- +- Do you really want to move the group "%1" to the recycle bin? +- +- +- +- Successfully merged the database files. +- S'han fusionat correctament els arxius de base de dades. +- +- +- Database was not modified by merge operation. +- La base de dades no s'ha modificat amb l'operació de fusionat. +- +- +- Shared group... +- Grup compartit... +- +- +- Writing the database failed: %1 +- +- +- +- This database is opened in read-only mode. Autosave is disabled. +- +- +- +- Save database backup +- Desa una còpia de seguretat de la base de dades +- +- +- Could not find database file: %1 +- +- +- +- +- EditEntryWidget +- +- Entry +- Entrada +- +- +- Advanced +- Avançat +- +- +- Icon +- Icona +- +- +- Auto-Type +- Compleció automàtica +- +- +- Properties +- Propietats +- +- +- History +- Historial +- +- +- SSH Agent +- Agent SSH +- +- +- n/a +- n/a +- +- +- (encrypted) +- (encriptat) +- +- +- Select private key +- Selecciona una clau privada +- +- +- Entry history +- Historial de l'entrada +- +- +- Add entry +- Afegiu una entrada +- +- +- Edit entry +- Edita l'entrada +- +- +- New attribute +- Nou atribut +- +- +- Are you sure you want to remove this attribute? +- Esteu segur que voleu suprimir aquest atribut? +- +- +- Tomorrow +- Demà +- +- +- %n week(s) +- % n setmana/es%n setmana/es +- +- +- %n month(s) +- % n mes/s%n mes/os +- +- +- Entry updated successfully. +- L'entrada s'ha actualitzat correctament. +- +- +- New attribute %1 +- Atribut nou %1 +- +- +- %n year(s) +- % n any/s%n any/s +- +- +- Confirm Removal +- Confirma l'eliminació +- +- +- Browser Integration +- Integració amb el navegador +- +- +- <empty URL> +- <empty URL> +- +- +- Are you sure you want to remove this URL? +- +- +- +- Reveal +- Revela +- +- +- Hide +- Oculta +- +- +- Unsaved Changes +- +- +- +- Would you like to save changes to this entry? +- +- +- +- [PROTECTED] Press Reveal to view or edit +- +- +- +- Invalid Entry +- +- +- +- An external merge operation has invalidated this entry. +-Unfortunately, any changes made have been lost. +- +- +- +- +- EditEntryWidgetAdvanced +- +- Additional attributes +- Atributs addicionals +- +- +- Add +- Afegiu +- +- +- Remove +- Suprimiu +- +- +- Edit Name +- Edita el nom +- +- +- Protect +- Protegeix +- +- +- Reveal +- Revela +- +- +- Attachments +- Fitxers adjunts +- +- +- Foreground Color: +- Color del primer pla: +- +- +- Background Color: +- Color de fons: +- +- +- Attribute selection +- +- +- +- Attribute value +- +- +- +- Add a new attribute +- +- +- +- Remove selected attribute +- +- +- +- Edit attribute name +- +- +- +- Toggle attribute protection +- +- +- +- Show a protected attribute +- +- +- +- Foreground color selection +- Selecció del color de primer pla +- +- +- Background color selection +- Selecció del color de fons +- +- +- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> +- +- +- +- Exclude from database reports +- Exclou dels informes de la base de dades +- +- +- +- EditEntryWidgetAutoType +- +- Enable Auto-Type for this entry +- Permetre la compleció automàtica per a aquesta entrada +- +- +- Window Associations +- Associacions de finestra +- +- +- + +- + +- +- +- - +- - +- +- +- Window title: +- Títol de la finestra: +- +- +- Use a specific sequence for this association: +- Usa una seqüència específica per a aquesta associació: +- +- +- Custom Auto-Type sequence +- Seqüència de compleció automàtica personalitzada +- +- +- Open Auto-Type help webpage +- +- +- +- Existing window associations +- +- +- +- Add new window association +- +- +- +- Remove selected window association +- +- +- +- You can use an asterisk (*) to match everything +- +- +- +- Set the window association title +- +- +- +- You can use an asterisk to match everything +- +- +- +- Custom Auto-Type sequence for this window +- Seqüència de compleció automàtica personalitzada per a aquesta finestra +- +- +- Inherit default Auto-Type sequence from the group +- Hereda la seqüència de compleció automàtica del grup +- +- +- Use custom Auto-Type sequence: +- Usa una seqüència de compleció automàtica personalitzada: +- +- +- +- EditEntryWidgetBrowser +- +- These settings affect to the entry's behaviour with the browser extension. +- +- +- +- General +- General +- +- +- Skip Auto-Submit for this entry +- +- +- +- Hide this entry from the browser extension +- +- +- +- Additional URL's +- +- +- +- Add +- Afegiu +- +- +- Remove +- Suprimiu +- +- +- Edit +- Edita +- +- +- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. +- +- +- +- Use this entry only with HTTP Basic Auth +- +- +- +- +- EditEntryWidgetHistory +- +- Show +- Mostra +- +- +- Restore +- Restaura +- +- +- Delete +- Suprimeix +- +- +- Delete all +- Suprimeix tots +- +- +- Entry history selection +- +- +- +- Show entry at selected history state +- +- +- +- Restore entry to selected history state +- +- +- +- Delete selected history state +- +- +- +- Delete all history +- +- +- +- +- EditEntryWidgetMain +- +- URL: +- URL: +- +- +- Password: +- Contrasenya: +- +- +- Title: +- Títol: +- +- +- Presets +- Configuracions +- +- +- Toggle the checkbox to reveal the notes section. +- Activeu la casella de selecció per mostrar la secció notes. +- +- +- Username: +- Nom d'usuari: +- +- +- Url field +- Camp d'URL +- +- +- Download favicon for URL +- Descarrega el favicon de URL +- +- +- Password field +- Camp de contrasenya +- +- +- Toggle notes visible +- Commuta la visibilitat de les notes +- +- +- Expiration field +- +- +- +- Expiration Presets +- +- +- +- Expiration presets +- +- +- +- Notes field +- Camp de notes +- +- +- Title field +- Camp de títol +- +- +- Username field +- Camp d'usuari +- +- +- Toggle expiration +- +- +- +- Notes: +- Notes: +- +- +- https://example.com +- +- +- +- Expires: +- +- +- +- Edit Entry +- +- +- +- +- EditEntryWidgetSSHAgent +- +- Form +- Formulari +- +- +- Remove key from agent after +- +- +- +- seconds +- segons +- +- +- Fingerprint +- Empremta digital +- +- +- Remove key from agent when database is closed/locked +- Elimina la clau de l'agent quan la base de dades està tancada/bloquejada +- +- +- Public key +- Clau pública +- +- +- Add key to agent when database is opened/unlocked +- Afegeix la clau a l'agent quan la base de dades s'obri o es desbloquegi +- +- +- Comment +- Comentari +- +- +- Decrypt +- Desxifrar +- +- +- n/a +- n/a +- +- +- Copy to clipboard +- Copia al porta-retalls +- +- +- Private key +- Clau privada +- +- +- External file +- Fitxer extern +- +- +- Browse... +- Button for opening file dialog +- Navega... +- +- +- Attachment +- Adjunt +- +- +- Add to agent +- Afegeix-lo a l'agent +- +- +- Remove from agent +- Suprimeix-lo de l'agent +- +- +- Require user confirmation when this key is used +- Demana confirmació de l'usuari quan s'utilitzi aquesta clau +- +- +- Remove key from agent after specified seconds +- +- +- +- Browser for key file +- +- +- +- External key file +- +- +- +- Select attachment file +- +- +- +- +- EditGroupWidget +- +- Group +- Grup +- +- +- Icon +- Icona +- +- +- Properties +- Propietats +- +- +- Add group +- Afegeix un grup +- +- +- Edit group +- Edita el grup +- +- +- Enable +- Habilita +- +- +- Disable +- Inhabilita +- +- +- Inherit from parent group (%1) +- Hereta de grup pare (%1) +- +- +- Entry has unsaved changes +- L'entrada té canvis sense desar +- +- +- +- EditGroupWidgetKeeShare +- +- Type: +- Tipus: +- +- +- Path: +- Camí: +- +- +- Password: +- Contrasenya: +- +- +- Inactive +- Inactiu +- +- +- KeeShare unsigned container +- +- +- +- KeeShare signed container +- +- +- +- Select import source +- +- +- +- Select export target +- +- +- +- Select import/export file +- +- +- +- Clear +- Neteja +- +- +- Import +- Importa +- +- +- Export +- Exporta +- +- +- Synchronize +- Sincronitza +- +- +- Your KeePassXC version does not support sharing this container type. +-Supported extensions are: %1. +- +- +- +- %1 is already being exported by this database. +- +- +- +- %1 is already being imported by this database. +- +- +- +- %1 is being imported and exported by different groups in this database. +- +- +- +- KeeShare is currently disabled. You can enable import/export in the application settings. +- KeeShare is a proper noun +- +- +- +- Database export is currently disabled by application settings. +- +- +- +- Database import is currently disabled by application settings. +- +- +- +- Sharing mode field +- +- +- +- Path to share file field +- +- +- +- Password field +- Camp de contrasenya +- +- +- Clear fields +- +- +- +- Browse for share file +- +- +- +- Browse... +- Navega... +- +- +- +- EditGroupWidgetMain +- +- Name field +- +- +- +- Notes field +- Camp de notes +- +- +- Toggle expiration +- +- +- +- Auto-Type toggle for this and sub groups +- +- +- +- Expiration field +- +- +- +- Search toggle for this and sub groups +- +- +- +- Default auto-type sequence field +- Camp de seqüència de compleció automàtica per defecte +- +- +- Expires: +- +- +- +- Use default Auto-Type sequence of parent group +- +- +- +- Auto-Type: +- +- +- +- Search: +- +- +- +- Notes: +- Notes: +- +- +- Name: +- +- +- +- Set default Auto-Type sequence +- +- +- +- Edit Group +- +- +- +- +- EditWidgetIcons +- +- Add custom icon +- Afegeix una icona personalitzada +- +- +- Delete custom icon +- Suprimeix la icona personalitzada +- +- +- Download favicon +- Descarrega el favicon +- +- +- Unable to fetch favicon. +- No es pot descarregar el favicon. +- +- +- Images +- Imatges +- +- +- All files +- Tots els fitxers +- +- +- Confirm Delete +- Confirma la supressió +- +- +- Select Image(s) +- +- +- +- Successfully loaded %1 of %n icon(s) +- +- +- +- No icons were loaded +- No s'ha carregat cap icona +- +- +- %n icon(s) already exist in the database +- % n icona (s) ja existeix a la base de dadesJa existeix/en %n icona/es a la base de dades +- +- +- The following icon(s) failed: +- La icona (s) següent (es) ha fallat:Han fallat la/les icona/es següent/s: +- +- +- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? +- +- +- +- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security +- +- +- +- Download favicon for URL +- Descarrega el favicon de URL +- +- +- Apply selected icon to subgroups and entries +- +- +- +- Also apply to child groups +- +- +- +- Also apply to child entries +- +- +- +- Also apply to all children +- +- +- +- Existing icon selected. +- +- +- +- Use default icon +- Usa la icona per defecte +- +- +- Use custom icon +- Usa una icona personalitzada +- +- +- Apply icon to... +- +- +- +- Apply to this group only +- +- +- +- +- EditWidgetProperties +- +- Created: +- Creat: +- +- +- Modified: +- Modificat: +- +- +- Accessed: +- Accedit: +- +- +- Uuid: +- UUID: +- +- +- Plugin Data +- Dades del connector +- +- +- Remove +- Suprimiu +- +- +- Delete plugin data? +- +- +- +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- +- +- +- Key +- Clau +- +- +- Value +- Valor +- +- +- Datetime created +- +- +- +- Datetime modified +- +- +- +- Datetime accessed +- +- +- +- Unique ID +- +- +- +- Plugin data +- +- +- +- Remove selected plugin data +- +- +- +- +- Entry +- +- %1 - Clone +- %1 - Clon +- +- +- +- EntryAttachmentsModel +- +- Name +- Nom +- +- +- Size +- Mida +- +- +- +- EntryAttachmentsWidget +- +- Form +- Formulari +- +- +- Add +- Afegiu +- +- +- Remove +- Suprimiu +- +- +- Open +- Obre +- +- +- Save +- Desa +- +- +- Select files +- +- +- +- Are you sure you want to remove %n attachment(s)? +- +- +- +- Save attachments +- Desa els fitxers adjunts +- +- +- Unable to create directory: +-%1 +- No s'ha pogut crear el directori: +-%1 +- +- +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- +- +- +- Confirm overwrite +- Confirma la sobreescriptura +- +- +- Unable to save attachments: +-%1 +- +- +- +- Unable to open attachment: +-%1 +- +- +- +- Unable to open attachments: +-%1 +- +- +- +- Confirm remove +- Confirma l'eliminació +- +- +- Unable to open file(s): +-%1 +- +- +- +- Attachments +- Fitxers adjunts +- +- +- Add new attachment +- Afegeix un nou adjunt +- +- +- Remove selected attachment +- +- +- +- Open selected attachment +- +- +- +- Save selected attachment to disk +- +- +- +- %1 is a big file (%2 MB). +-Your database may get very large and reduce performance. +- +-Are you sure to add this file? +- +- +- +- Confirm Attachment +- +- +- +- +- EntryAttributesModel +- +- Name +- Nom +- +- +- +- EntryHistoryModel +- +- Last modified +- Darrera modificació +- +- +- Title +- Títol +- +- +- Username +- Nom d'usuari +- +- +- URL +- URL +- +- +- +- EntryModel +- +- Ref: +- Reference abbreviation +- Ref: +- +- +- Group +- Grup +- +- +- Title +- Títol +- +- +- Username +- Nom d'usuari +- +- +- URL +- URL +- +- +- Never +- Mai +- +- +- Password +- Contrasenya +- +- +- Notes +- Notes +- +- +- Expires +- Expira +- +- +- Created +- Creat +- +- +- Modified +- Modificat +- +- +- Accessed +- Accedit +- +- +- Attachments +- Fitxers adjunts +- +- +- Size +- Mida +- +- +- Group name +- Nom del grup +- +- +- Entry title +- +- +- +- Entry notes +- +- +- +- Entry expires at +- +- +- +- Creation date +- +- +- +- Last modification date +- +- +- +- Last access date +- +- +- +- Attached files +- +- +- +- Entry size +- +- +- +- Has attachments +- +- +- +- Has TOTP one-time password +- +- +- +- +- EntryPreviewWidget +- +- Close +- Tanca +- +- +- General +- General +- +- +- Username +- Nom d'usuari +- +- +- Password +- Contrasenya +- +- +- Expiration +- Venciment +- +- +- URL +- URL +- +- +- Attributes +- Atributs +- +- +- Attachments +- Fitxers adjunts +- +- +- Notes +- Notes +- +- +- Autotype +- Tecleig automàtic +- +- +- Window +- Finestra +- +- +- Sequence +- Seqüència +- +- +- Searching +- S'està cercant +- +- +- Search +- Cerca +- +- +- Clear +- Neteja +- +- +- Never +- Mai +- +- +- [PROTECTED] +- [PROTEGIT] +- +- +- Enabled +- Habilitat +- +- +- Disabled +- Inhabilitat +- +- +- Share +- Comparteix +- +- +- Display current TOTP value +- +- +- +- Advanced +- Avançat +- +- +- Default Sequence +- +- +- +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- attributes line +- +- +- +- +- EntryURLModel +- +- Invalid URL +- +- +- +- +- EntryView +- +- Fit to window +- Ajusta a la finestra +- +- +- Fit to contents +- Ajusta al contingut +- +- +- Reset to defaults +- Reinicialitza-la als valors predeterminats +- +- +- Has attachments +- Entry attachment icon toggle +- +- +- +- Has TOTP +- Entry TOTP icon toggle +- +- +- +- +- FdoSecrets::Item +- +- Entry "%1" from database "%2" was used by %3 +- +- +- +- +- FdoSecrets::Service +- +- Failed to register DBus service at %1.<br/> +- +- +- +- %n Entry(s) was used by %1 +- %1 is the name of an application +- +- +- +- +- FdoSecrets::SettingsDatabaseModel +- +- File Name +- +- +- +- Group +- Grup +- +- +- Manage +- Gestiona +- +- +- Unlock to show +- +- +- +- None +- +- +- +- +- FdoSecrets::SettingsSessionModel +- +- Application +- Aplicació +- +- +- Manage +- Gestiona +- +- +- +- FdoSecretsPlugin +- +- <b>Fdo Secret Service:</b> %1 +- +- +- +- Unknown +- Unknown PID +- +- +- +- Unknown +- Unknown executable path +- +- +- +- <i>PID: %1, Executable: %2</i> +- <i>PID: 1234, Executable: /path/to/exe</i> +- +- +- +- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. +- +- +- +- +- Group +- +- [empty] +- group has no children +- [buit] +- +- +- +- HibpDownloader +- +- Online password validation failed +- +- +- +- +- IconDownloaderDialog +- +- Download Favicons +- Descarrega els favicons +- +- +- Cancel +- Cancel·la +- +- +- Having trouble downloading icons? +-You can enable the DuckDuckGo website icon service in the security section of the application settings. +- +- +- +- Close +- Tanca +- +- +- URL +- URL +- +- +- Status +- Estat +- +- +- Please wait, processing entry list... +- +- +- +- Downloading... +- Descarregant... +- +- +- Ok +- D'acord +- +- +- Already Exists +- +- +- +- Download Failed +- La descàrrega ha fallat +- +- +- Downloading favicons (%1/%2)... +- Descarregant els favicons (%1/%2)... +- +- +- +- KMessageWidget +- +- &Close +- &Tancar +- +- +- Close message +- Tancar missatge +- +- +- +- Kdbx3Reader +- +- missing database headers +- +- +- +- Header doesn't match hash +- La capçalera no coincideix amb el hash +- +- +- Invalid header id size +- Mida de l'identificador de capçalera no vàlida +- +- +- Invalid header field length +- Longitud del camp de capçalera no vàlida +- +- +- Invalid header data length +- Longitud de dades de la capçalera no vàlida +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- +- +- +- Unable to calculate database key +- +- +- +- Unable to issue challenge-response: %1 +- +- +- +- +- Kdbx3Writer +- +- Unable to issue challenge-response: %1 +- +- +- +- Unable to calculate database key +- +- +- +- +- Kdbx4Reader +- +- missing database headers +- +- +- +- Invalid header checksum size +- +- +- +- Header SHA256 mismatch +- +- +- +- Unknown cipher +- +- +- +- Invalid header id size +- Mida de l'id de capçalera no vàlid +- +- +- Invalid header field length +- Longitud del camp de capçalera no vàlid +- +- +- Invalid header data length +- Longitud de dades de la capçalera no vàlida +- +- +- Failed to open buffer for KDF parameters in header +- +- +- +- Unsupported key derivation function (KDF) or invalid parameters +- +- +- +- Legacy header fields found in KDBX4 file. +- +- +- +- Invalid inner header id size +- Mida de l'identificador intern d'encapçalament no vàlida +- +- +- Invalid inner header field length +- +- +- +- Invalid inner header binary size +- +- +- +- Unsupported KeePass variant map version. +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map entry name length +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map entry name data +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map entry value length +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map entry value data +- Translation comment: variant map = data structure for storing meta data +- +- +- +- Invalid variant map Bool entry value length +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map Int32 entry value length +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map UInt32 entry value length +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map Int64 entry value length +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map UInt64 entry value length +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map entry type +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map field type size +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- +- +- +- (HMAC mismatch) +- +- +- +- Unable to calculate database key: %1 +- +- +- +- +- Kdbx4Writer +- +- Invalid symmetric cipher algorithm. +- Algorisme de xifrat simètric no vàlid. +- +- +- Invalid symmetric cipher IV size. +- IV = Initialization Vector for symmetric cipher +- +- +- +- Failed to serialize KDF parameters variant map +- Translation comment: variant map = data structure for storing meta data +- +- +- +- Unable to calculate database key: %1 +- +- +- +- +- KdbxReader +- +- Unsupported cipher +- +- +- +- Invalid compression flags length +- +- +- +- Unsupported compression algorithm +- Algoritme de compressió no admès +- +- +- Invalid master seed size +- +- +- +- Invalid transform seed size +- +- +- +- Invalid transform rounds size +- +- +- +- Invalid start bytes size +- +- +- +- Invalid random stream id size +- +- +- +- Invalid inner random stream cipher +- +- +- +- Not a KeePass database. +- No és una base de dades KeePass. +- +- +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- El fitxer seleccionat és una base de dades KeePass 1 antiga (.kdb). +- +-Podeu importar-la fent clic a la base de dades > "importar base de dades KeePass 1...". +-Es tracta d'una migració unidireccional. No obrir la base de dades importada amb la antiga versió KeePassX 0.4. +- +- +- Unsupported KeePass 2 database version. +- +- +- +- Invalid cipher uuid length: %1 (length=%2) +- +- +- +- Unable to parse UUID: %1 +- +- +- +- Failed to read database file. +- +- +- +- +- KdbxXmlReader +- +- XML parsing failure: %1 +- +- +- +- No root group +- No hi ha cap grup arrel +- +- +- Missing icon uuid or data +- +- +- +- Missing custom data key or value +- +- +- +- Multiple group elements +- Múltiples elements de grup +- +- +- Null group uuid +- +- +- +- Invalid group icon number +- +- +- +- Invalid EnableAutoType value +- Valor d'EnableAutoType invàlid +- +- +- Invalid EnableSearching value +- +- +- +- No group uuid found +- +- +- +- Null DeleteObject uuid +- +- +- +- Missing DeletedObject uuid or time +- +- +- +- Null entry uuid +- +- +- +- Invalid entry icon number +- +- +- +- History element in history entry +- +- +- +- No entry uuid found +- +- +- +- History element with different uuid +- +- +- +- Duplicate custom attribute found +- +- +- +- Entry string key or value missing +- +- +- +- Entry binary key or value missing +- +- +- +- Auto-type association window or sequence missing +- +- +- +- Invalid bool value +- +- +- +- Invalid date time value +- +- +- +- Invalid color value +- +- +- +- Invalid color rgb part +- +- +- +- Invalid number value +- +- +- +- Invalid uuid value +- +- +- +- Unable to decompress binary +- Translator meant is a binary data inside an entry +- +- +- +- XML error: +-%1 +-Line %2, column %3 +- +- +- +- +- KeeAgentSettings +- +- Invalid KeeAgent settings file structure. +- +- +- +- Private key is an attachment but no attachments provided. +- +- +- +- Private key is empty +- +- +- +- File too large to be a private key +- Fitxer massa gran per ser una clau privada +- +- +- Failed to open private key +- No s'ha pogut obrir la clau privada +- +- +- +- KeePass1OpenWidget +- +- Unable to open the database. +- No es pot obrir la base de dades. +- +- +- Import KeePass1 Database +- Importa una base de dades de KeePass 1 +- +- +- +- KeePass1Reader +- +- Unable to read keyfile. +- No es pot llegir el fitxer de claus. +- +- +- Not a KeePass database. +- No és una base de dades KeePass. +- +- +- Unsupported encryption algorithm. +- Algoritme d'encriptació no admès. +- +- +- Unsupported KeePass database version. +- Versió de base de dades KeePass no admesa. +- +- +- Unable to read encryption IV +- IV = Initialization Vector for symmetric cipher +- +- +- +- Invalid number of groups +- +- +- +- Invalid number of entries +- +- +- +- Invalid content hash size +- +- +- +- Invalid transform seed size +- +- +- +- Invalid number of transform rounds +- +- +- +- Unable to construct group tree +- +- +- +- Root +- Arrel +- +- +- Key transformation failed +- +- +- +- Invalid group field type number +- +- +- +- Invalid group field size +- +- +- +- Read group field data doesn't match size +- +- +- +- Incorrect group id field size +- +- +- +- Incorrect group creation time field size +- +- +- +- Incorrect group modification time field size +- +- +- +- Incorrect group access time field size +- +- +- +- Incorrect group expiry time field size +- +- +- +- Incorrect group icon field size +- +- +- +- Incorrect group level field size +- +- +- +- Invalid group field type +- +- +- +- Missing group id or level +- +- +- +- Missing entry field type number +- +- +- +- Invalid entry field size +- +- +- +- Read entry field data doesn't match size +- +- +- +- Invalid entry uuid field size +- +- +- +- Invalid entry group id field size +- +- +- +- Invalid entry icon field size +- +- +- +- Invalid entry creation time field size +- +- +- +- Invalid entry modification time field size +- +- +- +- Invalid entry expiry time field size +- +- +- +- Invalid entry field type +- +- +- +- unable to seek to content position +- +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- +- +- +- Unable to calculate database key +- +- +- +- +- KeeShare +- +- Invalid sharing reference +- +- +- +- Inactive share %1 +- +- +- +- Imported from %1 +- Importat de %1 +- +- +- Exported to %1 +- Exportat a %1 +- +- +- Synchronized with %1 +- +- +- +- Import is disabled in settings +- La importació està inhabilitada a la configuració +- +- +- Export is disabled in settings +- L'exportació està deshabilitada a la configuració +- +- +- Inactive share +- +- +- +- Imported from +- Importat de +- +- +- Exported to +- Exportat a +- +- +- Synchronized with +- +- +- +- +- KeyComponentWidget +- +- Key Component +- +- +- +- Key Component Description +- +- +- +- Cancel +- Cancel·lar +- +- +- Key Component set, click to change or remove +- +- +- +- Add %1 +- Add a key component +- Afegeix %1 +- +- +- Change %1 +- Change a key component +- +- +- +- Remove %1 +- Remove a key component +- +- +- +- %1 set, click to change or remove +- Change or remove a key component +- %1: feu clic per canviar o eliminar +- +- +- +- KeyFileEditWidget +- +- Generate +- Genera +- +- +- Key File +- +- +- +- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> +- <p>Podeu afegir un fitxer clau que contingui bytes aleatoris per afegir seguretat.</p><p>L'heu de mantenir secret i no perdre'l, sinó us quedareu tancats a fora!</p> +- +- +- Error loading the key file '%1' +-Message: %2 +- +- +- +- Key files +- Fitxers de clau +- +- +- All files +- Tots els fitxers +- +- +- Create Key File... +- Crea un arxiu clau... +- +- +- Error creating key file +- +- +- +- Unable to create key file: %1 +- +- +- +- Select a key file +- Seleccioneu un fitxer clau +- +- +- Key file selection +- Selecciona el fitxer clau... +- +- +- Browse for key file +- +- +- +- Browse... +- Navega... +- +- +- Generate a new key file +- Genera un fitxer clau nou +- +- +- Note: Do not use a file that may change as that will prevent you from unlocking your database! +- Nota: no utilitzeu un fitxer que pugui canviar perquè faria que no poguéssiu desbloquejar la base de dades! +- +- +- Invalid Key File +- +- +- +- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. +- +- +- +- Suspicious Key File +- +- +- +- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. +-Are you sure you want to continue with this file? +- +- +- +- Old key file format +- +- +- +- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. +- +- +- +- +- MainWindow +- +- &Database +- &Base de dades +- +- +- &Help +- &Ajuda +- +- +- &Groups +- &Grups +- +- +- &Tools +- &Eines +- +- +- &Quit +- Tanca +- +- +- &About +- &Quant a +- +- +- Database settings +- Configuració de la base de dades +- +- +- Copy username to clipboard +- Còpia el nom d'usuari al porta-retalls +- +- +- Copy password to clipboard +- Còpia la contrasenya al porta-retalls +- +- +- &Settings +- &Configuració +- +- +- &Title +- &Títol +- +- +- Copy title to clipboard +- Copia el títol al porta-retalls +- +- +- &URL +- &URL +- +- +- Copy URL to clipboard +- Copia l'URL al porta-retalls +- +- +- &Notes +- &Notes +- +- +- Copy notes to clipboard +- Copia les notes al porta-retalls +- +- +- Copy &TOTP +- Còpia &TOTP +- +- +- E&mpty recycle bin +- +- +- +- Clear history +- Esborra l'historial +- +- +- Access error for config file %1 +- Error d'accés al fitxer de configuració %1 +- +- +- Settings +- Configuració +- +- +- Toggle window +- Activar finestra +- +- +- Quit KeePassXC +- Tanca KeePassXC +- +- +- Please touch the button on your YubiKey! +- Per favor, toqueu el botó en el seu YubiKey! +- +- +- WARNING: You are using an unstable build of KeePassXC! +-There is a high risk of corruption, maintain a backup of your databases. +-This version is not meant for production use. +- ATENCIÓ: esteu utilitzant una versió inestable de KeePassXC! +-Hi ha un alt risc de corrupció, manteniu una còpia de seguretat de les vostres bases de dades. +-Aquesta versió no està pensada per usar-se en producció. +- +- +- &Donate +- Fes un &donatiu +- +- +- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +-We recommend you use the AppImage available on our downloads page. +- +- +- +- &Import +- & Importa +- +- +- Create a new database +- Crea una nova base de dades +- +- +- Merge from another KDBX database +- Fusiona amb una altra base de dades KDBX +- +- +- Add a new entry +- Afegeix una nova entrada +- +- +- View or edit entry +- Mostra o edita l'entrada +- +- +- Add a new group +- Afegeix un grup nou +- +- +- Perform &Auto-Type +- Fes una compleció automàtica +- +- +- Open &URL +- Obre la &URL +- +- +- Import a KeePass 1 database +- Importa una base de dades de KeePass 1 +- +- +- Import a CSV file +- Importa un fitxer CSV +- +- +- NOTE: You are using a pre-release version of KeePassXC! +-Expect some bugs and minor issues, this version is not meant for production use. +- NOTA: esteu utilitzant una versió preliminar de KeePassXC! +-Podeu esperar alguns errors i incidències menors. Aquesta versió no està pensada per a un ús en producció. +- +- +- Check for updates on startup? +- Voleu comprovar si hi ha actualitzacions a l'inici? +- +- +- Would you like KeePassXC to check for updates on startup? +- Voleu que KeePassXC comprovi si hi ha actualitzacions a l'inici? +- +- +- You can always check for updates manually from the application menu. +- Sempre pots comprovar si hi ha actualitzacions manualment als menús de l'aplicació. +- +- +- &Export +- &Exporta +- +- +- Sort &A-Z +- Ordena &A-Z +- +- +- Sort &Z-A +- Ordena &Z-A +- +- +- &Password Generator +- Generador de contrasenyes +- +- +- Import a 1Password Vault +- Importa un 1Password Vault +- +- +- &Getting Started +- Primers passos +- +- +- &User Guide +- Guia d'&usuari +- +- +- &Keyboard Shortcuts +- Dreceres de teclat +- +- +- &Recent Databases +- Bases de dades &recents +- +- +- &Entries +- &Entrades +- +- +- Copy Att&ribute +- Copia l'&atribut +- +- +- TOTP +- TOTP +- +- +- View +- Visualització +- +- +- Theme +- Tema +- +- +- &Check for Updates +- &Comprova si hi ha actualitzacions +- +- +- &Open Database… +- &Obre la base de dades… +- +- +- &Save Database +- De&sa la base de dades +- +- +- &Close Database +- Tanca la base de dades +- +- +- &New Database… +- Base de dades &nova +- +- +- &Merge From Database… +- +- +- +- &New Entry… +- &Nova entrada... +- +- +- &Edit Entry… +- &Edita l'entrada… +- +- +- &Delete Entry… +- Elimina l'entrada… +- +- +- &New Group… +- &Nou grup… +- +- +- &Edit Group… +- &Edita el grup… +- +- +- &Delete Group… +- Elimina el grup… +- +- +- Download All &Favicons… +- Baixa tots els &Favicons… +- +- +- Sa&ve Database As… +- +- +- +- Database &Security… +- &Seguretat de la base de dades... +- +- +- Database &Reports... +- Informes de la base de dades... +- +- +- Statistics, health check, etc. +- Estadístiques, comprovació de salut, etc. +- +- +- &Database Settings… +- Configuració de la base de dades… +- +- +- &Clone Entry… +- &Clona l'entrada… +- +- +- Move u&p +- +- +- +- Move entry one step up +- +- +- +- Move do&wn +- +- +- +- Move entry one step down +- +- +- +- Copy &Username +- Copia el nom d'&usuari +- +- +- Copy &Password +- Copia la contrasenya +- +- +- Download &Favicon +- Descarrega el &Favicon +- +- +- &Lock Databases +- Bloqueja les bases de dades +- +- +- &CSV File… +- +- +- +- &HTML File… +- +- +- +- KeePass 1 Database… +- +- +- +- 1Password Vault… +- +- +- +- CSV File… +- +- +- +- Show TOTP +- Mostra TOTP +- +- +- Show QR Code +- +- +- +- Set up TOTP… +- +- +- +- Report a &Bug +- Informeu d'un error +- +- +- Open Getting Started Guide +- +- +- +- &Online Help +- Ajuda &online +- +- +- Go to online documentation +- +- +- +- Open User Guide +- +- +- +- Save Database Backup... +- Desa una còpia de la base de dades... +- +- +- Add key to SSH Agent +- +- +- +- Remove key from SSH Agent +- +- +- +- Compact Mode +- Mode compacte +- +- +- Automatic +- +- +- +- Light +- +- +- +- Dark +- +- +- +- Classic (Platform-native) +- +- +- +- Show Toolbar +- Mostra la barra d'eines +- +- +- Show Preview Panel +- Mostra el plafó de vista prèvia +- +- +- Don't show again for this version +- +- +- +- Restart Application? +- +- +- +- You must restart the application to apply this setting. Would you like to restart now? +- +- +- +- Perform Auto-Type Sequence +- +- +- +- {USERNAME} +- +- +- +- {USERNAME}{ENTER} +- +- +- +- {PASSWORD} +- +- +- +- {PASSWORD}{ENTER} +- +- +- +- Always on Top +- Sempre a la part superior +- +- +- Hide Usernames +- Oculta els noms d'usuari +- +- +- Hide Passwords +- Oculta les contrasenyes +- +- +- +- ManageDatabase +- +- Database settings +- Configuració de la base de dades +- +- +- Edit database settings +- Edita la configuració de la base de dades +- +- +- Unlock database +- Desbloqueja la base de dades +- +- +- Unlock database to show more information +- +- +- +- Lock database +- Bloqueja la base de dades +- +- +- +- ManageSession +- +- Disconnect +- +- +- +- Disconnect this application +- +- +- +- +- Merger +- +- Creating missing %1 [%2] +- +- +- +- Relocating %1 [%2] +- +- +- +- Overwriting %1 [%2] +- +- +- +- older entry merged from database "%1" +- entrada antiga fusionada de la base de dades "%1" +- +- +- Adding backup for older target %1 [%2] +- +- +- +- Adding backup for older source %1 [%2] +- +- +- +- Reapplying older target entry on top of newer source %1 [%2] +- +- +- +- Reapplying older source entry on top of newer target %1 [%2] +- +- +- +- Synchronizing from newer source %1 [%2] +- +- +- +- Synchronizing from older source %1 [%2] +- +- +- +- Deleting child %1 [%2] +- +- +- +- Deleting orphan %1 [%2] +- +- +- +- Changed deleted objects +- +- +- +- Adding missing icon %1 +- +- +- +- Removed custom data %1 [%2] +- +- +- +- Adding custom data %1 [%2] +- +- +- +- +- NewDatabaseWizard +- +- Create a new KeePassXC database... +- +- +- +- Root +- Root group +- Arrel +- +- +- +- NewDatabaseWizardPage +- +- WizardPage +- +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Aquí podeu ajustar la configuració del xifrat de la base de dades. També ho podeu canviar més endavant a la configuració de la base de dades. +- +- +- Advanced Settings +- Configuració avançada +- +- +- Simple Settings +- +- +- +- Encryption Settings +- Configuració del xifrat +- +- +- +- NewDatabaseWizardPageDatabaseKey +- +- Database Credentials +- +- +- +- A set of credentials known only to you that protects your database. +- +- +- +- +- NewDatabaseWizardPageEncryption +- +- Encryption Settings +- Opcions de xifrat +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Aquí podeu ajustar la configuració del xifrat de la base de dades. També ho podeu canviar més endavant a la configuració de la base de dades. +- +- +- +- NewDatabaseWizardPageMetaData +- +- General Database Information +- Informació general de la base de dades +- +- +- Please fill in the display name and an optional description for your new database: +- +- +- +- +- NixUtils +- +- Password Manager +- +- +- +- +- OpData01 +- +- Invalid OpData01, does not contain header +- +- +- +- Unable to read all IV bytes, wanted 16 but got %1 +- +- +- +- Unable to init cipher for opdata01: %1 +- +- +- +- Unable to read all HMAC signature bytes +- +- +- +- Malformed OpData01 due to a failed HMAC +- +- +- +- Unable to process clearText in place +- +- +- +- Expected %1 bytes of clear-text, found %2 +- +- +- +- +- OpVaultOpenWidget +- +- Read Database did not produce an instance +-%1 +- +- +- +- +- OpVaultReader +- +- Directory .opvault must exist +- +- +- +- Directory .opvault must be readable +- +- +- +- Directory .opvault/default must exist +- +- +- +- Directory .opvault/default must be readable +- +- +- +- Unable to decode masterKey: %1 +- +- +- +- Unable to derive master key: %1 +- +- +- +- +- OpenSSHKey +- +- Invalid key file, expecting an OpenSSH key +- +- +- +- PEM boundary mismatch +- +- +- +- Base64 decoding failed +- +- +- +- Key file way too small. +- +- +- +- Key file magic header id invalid +- +- +- +- Found zero keys +- +- +- +- Failed to read public key. +- +- +- +- Corrupted key file, reading private key failed +- +- +- +- No private key payload to decrypt +- +- +- +- Trying to run KDF without cipher +- +- +- +- Passphrase is required to decrypt this key +- Cal la contrasenya per desxifrar aquesta clau +- +- +- Key derivation failed, key file corrupted? +- +- +- +- Decryption failed, wrong passphrase? +- El desxifrat ha fallat, la frase de contrasenya és errònia? +- +- +- Unexpected EOF while reading public key +- +- +- +- Unexpected EOF while reading private key +- +- +- +- Can't write public key as it is empty +- +- +- +- Unexpected EOF when writing public key +- +- +- +- Can't write private key as it is empty +- +- +- +- Unexpected EOF when writing private key +- +- +- +- Unsupported key type: %1 +- +- +- +- Unknown cipher: %1 +- +- +- +- Cipher IV is too short for MD5 kdf +- +- +- +- Unknown KDF: %1 +- +- +- +- Unknown key type: %1 +- +- +- +- +- PasswordEdit +- +- Passwords do not match +- +- +- +- Passwords match so far +- +- +- +- Toggle Password (%1) +- +- +- +- Generate Password (%1) +- +- +- +- Warning: Caps Lock enabled! +- +- +- +- +- PasswordEditWidget +- +- Enter password: +- Introduïu la contrasenya: +- +- +- Confirm password: +- Confirma la contrasenya: +- +- +- Password +- Contrasenya +- +- +- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> +- +- +- +- Passwords do not match. +- +- +- +- Password field +- Camp de contrasenya +- +- +- Repeat password field +- +- +- +- +- PasswordGeneratorWidget +- +- %p% +- %p % +- +- +- strength +- Password strength +- força +- +- +- entropy +- entropia +- +- +- Password +- Contrasenya +- +- +- Character Types +- Tipus de caràcter +- +- +- Numbers +- Números +- +- +- Extended ASCII +- ASCII estès +- +- +- Exclude look-alike characters +- Excloure caràcters d'aspecte semblant +- +- +- Pick characters from every group +- Tria caràcters de tots els grups +- +- +- &Length: +- &Longitud: +- +- +- Passphrase +- Contrasenya +- +- +- Wordlist: +- Llista de paraules: +- +- +- Word Separator: +- Separador de paraula: +- +- +- Close +- Tanca +- +- +- Entropy: %1 bit +- Entropia: %1 bit(s) +- +- +- Password Quality: %1 +- Qualitat de la contrasenya: %1 +- +- +- Poor +- Password quality +- Pobre +- +- +- Weak +- Password quality +- Feble +- +- +- Good +- Password quality +- Bona +- +- +- Excellent +- Password quality +- Excel·lent +- +- +- Switch to advanced mode +- Canvia al mode avançat +- +- +- Advanced +- Avançat +- +- +- Braces +- +- +- +- Punctuation +- +- +- +- Quotes +- +- +- +- Logograms +- +- +- +- Character set to exclude from generated password +- +- +- +- Do not include: +- No incloure: +- +- +- Add non-hex letters to "do not include" list +- Afegeix caràcters no-hexadecimals a la llista "no incloure" +- +- +- Hex +- +- +- +- Excluded characters: "0", "1", "l", "I", "O", "|", "ï¹’" +- +- +- +- Generated password +- +- +- +- Upper-case letters +- Lletra majúscula +- +- +- Lower-case letters +- Lletra minúscula +- +- +- Special characters +- +- +- +- Math Symbols +- +- +- +- Dashes and Slashes +- +- +- +- Excluded characters +- Caràcters exclosos +- +- +- Hex Passwords +- +- +- +- Password length +- +- +- +- Word Case: +- +- +- +- Regenerate password +- +- +- +- Copy password +- Copia la contrasenya +- +- +- lower case +- minúscules +- +- +- UPPER CASE +- MAJÚSCULES +- +- +- Title Case +- +- +- +- Generate Password +- +- +- +- Also choose from: +- +- +- +- Additional characters to use for the generated password +- +- +- +- Additional characters +- +- +- +- Word Count: +- Nombre de paraules: +- +- +- Esc +- +- +- +- Apply Password +- +- +- +- Ctrl+S +- +- +- +- Regenerate password (%1) +- +- +- +- Special Characters +- Caràcters especials +- +- +- +- QApplication +- +- KeeShare +- +- +- +- Statistics +- Estadístiques +- +- +- Very weak password +- +- +- +- Password entropy is %1 bits +- +- +- +- Weak password +- +- +- +- Used in %1/%2 +- +- +- +- Password is used %1 times +- +- +- +- Password has expired +- +- +- +- Password expiry was %1 +- +- +- +- Password is about to expire +- La contrasenya està a punt de caducar +- +- +- Password expires in %1 days +- +- +- +- Password will expire soon +- +- +- +- Password expires on %1 +- +- +- +- Health Check +- Comprovació de salut +- +- +- HIBP +- +- +- +- +- QMessageBox +- +- Overwrite +- +- +- +- Delete +- Suprimeix +- +- +- Move +- +- +- +- Empty +- +- +- +- Remove +- Suprimiu +- +- +- Skip +- +- +- +- Disable +- Inhabilita +- +- +- Merge +- Fusiona +- +- +- Continue +- +- +- +- +- QObject +- +- Database not opened +- +- +- +- Database hash not available +- +- +- +- Client public key not received +- +- +- +- Cannot decrypt message +- +- +- +- Action cancelled or denied +- Acció cancel·lada o denegada +- +- +- KeePassXC association failed, try again +- +- +- +- Encryption key is not recognized +- +- +- +- Incorrect action +- +- +- +- Empty message received +- +- +- +- No URL provided +- +- +- +- No logins found +- +- +- +- Unknown error +- Error desconegut +- +- +- Add a new entry to a database. +- +- +- +- Path of the database. +- Camí de la base de dades. +- +- +- Key file of the database. +- +- +- +- path +- +- +- +- Username for the entry. +- Nom d'usuari de l'entrada. +- +- +- username +- +- +- +- URL for the entry. +- +- +- +- URL +- URL +- +- +- Prompt for the entry's password. +- +- +- +- Generate a password for the entry. +- +- +- +- length +- +- +- +- Path of the entry to add. +- +- +- +- Path of the entry to clip. +- clip = copy to clipboard +- +- +- +- Timeout in seconds before clearing the clipboard. +- +- +- +- Edit an entry. +- Edita una entrada. +- +- +- Title for the entry. +- +- +- +- title +- títol +- +- +- Path of the entry to edit. +- Ruta de l'entrada a editar. +- +- +- Estimate the entropy of a password. +- +- +- +- Password for which to estimate the entropy. +- +- +- +- Perform advanced analysis on the password. +- Fes una anàlisi avançada de la contrasenya. +- +- +- +- +-Available commands: +- +- +- +- +- Name of the command to execute. +- Nom de l'ordre a executar. +- +- +- List database entries. +- Llista les entrades de la base de dades. +- +- +- Path of the group to list. Default is / +- Camí del grup a llistar. Per defecte és / +- +- +- Find entries quickly. +- +- +- +- Search term. +- Terme de cerca. +- +- +- Merge two databases. +- Fusiona dues bases de dades +- +- +- Path of the database to merge from. +- Camí de la base de dades de destí a fusionar. +- +- +- Use the same credentials for both database files. +- +- +- +- Key file of the database to merge from. +- Fitxer clau de la base de dades amb la que es fusiona. +- +- +- Show an entry's information. +- +- +- +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- +- +- +- attribute +- +- +- +- Name of the entry to show. +- Nom de l'entrada a mostrar. +- +- +- NULL device +- Dispositiu nul +- +- +- error reading from device +- error de lectura del dispositiu +- +- +- malformed string +- cadena mal formada +- +- +- missing closing quote +- falta la cometa de tancament +- +- +- Group +- Grup +- +- +- Title +- Títol +- +- +- Username +- Nom d'usuari +- +- +- Password +- Contrasenya +- +- +- Notes +- Notes +- +- +- Last Modified +- Darrera modificació +- +- +- Created +- Creat +- +- +- Browser Integration +- Integració amb el navegador +- +- +- SSH Agent +- Agent SSH +- +- +- Generate a new random diceware passphrase. +- Genera una frase de contrasenya nova amb llançament de daus. +- +- +- Word count for the diceware passphrase. +- Recompte de paraules per a la frase de contrasenya amb llançament de daus. +- +- +- Wordlist for the diceware generator. +-[Default: EFF English] +- Llista de paraules per al generador de llançament de daus. +-[Per defecte: EFF English] +- +- +- Generate a new random password. +- +- +- +- Could not create entry with path %1. +- +- +- +- Enter password for new entry: +- +- +- +- Writing the database failed %1. +- +- +- +- Successfully added entry %1. +- +- +- +- Invalid timeout value %1. +- +- +- +- Entry %1 not found. +- +- +- +- Entry with path %1 has no TOTP set up. +- +- +- +- Clearing the clipboard in %1 second(s)... +- +- +- +- Clipboard cleared! +- +- +- +- Silence password prompt and other secondary outputs. +- +- +- +- count +- CLI parameter +- +- +- +- Could not find entry with path %1. +- +- +- +- Not changing any field for entry %1. +- +- +- +- Enter new password for entry: +- +- +- +- Writing the database failed: %1 +- +- +- +- Successfully edited entry %1. +- L'entrada %1 s'ha editat correctament. +- +- +- Length %1 +- +- +- +- Entropy %1 +- +- +- +- Log10 %1 +- +- +- +- Multi-word extra bits %1 +- +- +- +- Type: Bruteforce +- +- +- +- Type: Dictionary +- +- +- +- Type: Dict+Leet +- +- +- +- Type: User Words +- +- +- +- Type: User+Leet +- +- +- +- Type: Repeated +- +- +- +- Type: Sequence +- +- +- +- Type: Spatial +- +- +- +- Type: Date +- +- +- +- Type: Bruteforce(Rep) +- +- +- +- Type: Dictionary(Rep) +- +- +- +- Type: Dict+Leet(Rep) +- +- +- +- Type: User Words(Rep) +- +- +- +- Type: User+Leet(Rep) +- +- +- +- Type: Repeated(Rep) +- +- +- +- Type: Sequence(Rep) +- +- +- +- Type: Spatial(Rep) +- +- +- +- Type: Date(Rep) +- +- +- +- Type: Unknown%1 +- +- +- +- Entropy %1 (%2) +- +- +- +- *** Password length (%1) != sum of length of parts (%2) *** +- +- +- +- Failed to load key file %1: %2 +- +- +- +- Length of the generated password +- Longitud de la contrasenya generada +- +- +- Use lowercase characters +- Usa lletres en minúscula +- +- +- Use uppercase characters +- Usa caràcters en majúscules +- +- +- Use special characters +- Usa caràcters especials +- +- +- Use extended ASCII +- Usa l'ASCII ampliat +- +- +- Exclude character set +- Exclou el conjunt de caràcters +- +- +- chars +- caràcters +- +- +- Exclude similar looking characters +- Exclou caràcters d'aspecte similar +- +- +- Include characters from every selected group +- +- +- +- Recursively list the elements of the group. +- +- +- +- Cannot find group %1. +- +- +- +- Error reading merge file: +-%1 +- Error en la lectura del fitxer de fusió: +-%1 +- +- +- Unable to save database to file : %1 +- +- +- +- Unable to save database to file: %1 +- +- +- +- Successfully recycled entry %1. +- +- +- +- Successfully deleted entry %1. +- L'entrada %1 s'ha suprimit correctament. +- +- +- Show the entry's current TOTP. +- +- +- +- ERROR: unknown attribute %1. +- +- +- +- No program defined for clipboard manipulation +- +- +- +- file empty +- fitxer buit +- +- +- %1: (row, col) %2,%3 +- +- +- +- AES-KDF (KDBX 4) +- AES-KDF (KDBX 4) +- +- +- AES-KDF (KDBX 3.1) +- AES-KDF (KDBX 3,1) +- +- +- Invalid Settings +- TOTP +- La configuració no és vàlida +- +- +- Invalid Key +- TOTP +- Clau no vàlida +- +- +- Message encryption failed. +- +- +- +- No groups found +- +- +- +- Create a new database. +- Crea una nova base de dades. +- +- +- File %1 already exists. +- +- +- +- Loading the key file failed +- +- +- +- No key is set. Aborting database creation. +- +- +- +- Failed to save the database: %1. +- +- +- +- Successfully created new database. +- +- +- +- Creating KeyFile %1 failed: %2 +- +- +- +- Loading KeyFile %1 failed: %2 +- +- +- +- Path of the entry to remove. +- Ruta de l'entrada a eliminar. +- +- +- Existing single-instance lock file is invalid. Launching new instance. +- El fitxer de bloqueig d'instància única no és vàlid. Execute una instància nova. +- +- +- The lock file could not be created. Single-instance mode disabled. +- No s'ha pogut crear l'arxiu de bloqueig. Inhabilitat el mode de instància única. +- +- +- KeePassXC - cross-platform password manager +- KeePassXC - gestor de contrasenyes multi-plataforma +- +- +- filenames of the password databases to open (*.kdbx) +- Noms de les bases de dades de contrasenya per a obrir (*.kdbx) +- +- +- path to a custom config file +- camí cap a un fitxer personalitzat de configuració +- +- +- key file of the database +- Arxiu clau de la base de dades +- +- +- read password of the database from stdin +- llegiu la contrasenya de la base de dades des de l'entrada estàndard (stdin) +- +- +- Another instance of KeePassXC is already running. +- Ja s'està executant una altra instància de KeePassXC. +- +- +- Fatal error while testing the cryptographic functions. +- Error mentre es provava les funcions criptogràfiques. +- +- +- KeePassXC - Error +- KeePassXC - Error +- +- +- Database password: +- +- +- +- Cannot create new group +- No es pot crear un grup nou +- +- +- Deactivate password key for the database. +- +- +- +- Displays debugging information. +- +- +- +- Deactivate password key for the database to merge from. +- Desactiva la clau per la base de dades que volem fusionar. +- +- +- Version %1 +- +- +- +- Build Type: %1 +- +- +- +- Revision: %1 +- Revisió: %1 +- +- +- Distribution: %1 +- Distribució: %1 +- +- +- Debugging mode is disabled. +- +- +- +- Debugging mode is enabled. +- +- +- +- Operating system: %1 +-CPU architecture: %2 +-Kernel: %3 %4 +- Sistema operatiu: %1 +-Arquitectura de la CPU: %2 +-Nucli: %3 %4 +- +- +- Auto-Type +- Compleció automàtica +- +- +- KeeShare (signed and unsigned sharing) +- +- +- +- KeeShare (only signed sharing) +- +- +- +- KeeShare (only unsigned sharing) +- +- +- +- YubiKey +- +- +- +- TouchID +- +- +- +- None +- +- +- +- Enabled extensions: +- Extensions habilitades: +- +- +- Cryptographic libraries: +- +- +- +- Cannot generate a password and prompt at the same time! +- +- +- +- Adds a new group to a database. +- Afegeix un grup nou a una base de dades. +- +- +- Path of the group to add. +- +- +- +- Group %1 already exists! +- +- +- +- Group %1 not found. +- +- +- +- Successfully added group %1. +- +- +- +- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. +- +- +- +- FILENAME +- +- +- +- Analyze passwords for weaknesses and problems. +- +- +- +- Failed to open HIBP file %1: %2 +- +- +- +- Evaluating database entries against HIBP file, this will take a while... +- +- +- +- Close the currently opened database. +- Tanca la base de dades oberta. +- +- +- Display this help. +- +- +- +- slot +- +- +- +- Invalid word count %1 +- +- +- +- The word list is too small (< 1000 items) +- +- +- +- Exit interactive mode. +- +- +- +- Exports the content of a database to standard output in the specified format. +- +- +- +- Unable to export database to XML: %1 +- +- +- +- Unsupported format %1 +- +- +- +- Use numbers +- +- +- +- Invalid password length %1 +- +- +- +- Display command help. +- +- +- +- Available commands: +- +- +- +- Import the contents of an XML database. +- +- +- +- Path of the XML database export. +- +- +- +- Path of the new database. +- +- +- +- Successfully imported database. +- La base de dades s'ha importat correctament. +- +- +- Unknown command %1 +- +- +- +- Flattens the output to single lines. +- +- +- +- Only print the changes detected by the merge operation. +- Mostra només els canvis detectats per l'operació de fusió. +- +- +- Yubikey slot for the second database. +- +- +- +- Successfully merged %1 into %2. +- S'ha fusionat amb èxit %1 a %2. +- +- +- Database was not modified by merge operation. +- La base de dades no s'ha modificat amb l'operació de fusionat. +- +- +- Moves an entry to a new group. +- Mou una entrada a un grup nou. +- +- +- Path of the entry to move. +- +- +- +- Path of the destination group. +- +- +- +- Could not find group with path %1. +- +- +- +- Entry is already in group %1. +- +- +- +- Successfully moved entry %1 to group %2. +- +- +- +- Open a database. +- +- +- +- Path of the group to remove. +- +- +- +- Cannot remove root group from database. +- No es pot suprimir el grup arrel de la base de dades. +- +- +- Successfully recycled group %1. +- +- +- +- Successfully deleted group %1. +- +- +- +- Failed to open database file %1: not found +- +- +- +- Failed to open database file %1: not a plain file +- +- +- +- Failed to open database file %1: not readable +- +- +- +- Enter password to unlock %1: +- +- +- +- Invalid YubiKey slot %1 +- +- +- +- Enter password to encrypt database (optional): +- +- +- +- HIBP file, line %1: parse error +- +- +- +- Secret Service Integration +- +- +- +- User name +- +- +- +- Password for '%1' has been leaked %2 time(s)! +- +- +- +- Invalid password generator after applying all options +- +- +- +- Show the protected attributes in clear text. +- +- +- +- Browser Plugin Failure +- +- +- +- Could not save the native messaging script file for %1. +- +- +- +- Copy the given attribute to the clipboard. Defaults to "password" if not specified. +- +- +- +- Copy the current TOTP to the clipboard (equivalent to "-a totp"). +- +- +- +- Copy an entry's attribute to the clipboard. +- +- +- +- ERROR: Please specify one of --attribute or --totp, not both. +- +- +- +- ERROR: attribute %1 is ambiguous, it matches %2. +- +- +- +- Attribute "%1" not found. +- +- +- +- Entry's "%1" attribute copied to the clipboard! +- +- +- +- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). +- +- +- +- slot[:serial] +- +- +- +- Target decryption time in MS for the database. +- +- +- +- time +- +- +- +- Set the key file for the database. +- +- +- +- Set a password for the database. +- +- +- +- Invalid decryption time %1. +- +- +- +- Target decryption time must be between %1 and %2. +- +- +- +- Failed to set database password. +- +- +- +- Benchmarking key derivation function for %1ms delay. +- +- +- +- Setting %1 rounds for key derivation function. +- +- +- +- error while setting database key derivation settings. +- +- +- +- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. +- +- +- +- Unable to import XML database: %1 +- +- +- +- Show a database's information. +- +- +- +- UUID: +- +- +- +- Name: +- +- +- +- Description: +- +- +- +- Cipher: +- +- +- +- KDF: +- +- +- +- Recycle bin is enabled. +- +- +- +- Recycle bin is not enabled. +- +- +- +- Invalid command %1. +- +- +- +- Invalid YubiKey serial %1 +- +- +- +- Please touch the button on your YubiKey to continue… +- +- +- +- Do you want to create a database with an empty password? [y/N]: +- +- +- +- Repeat password: +- +- +- +- Error: Passwords do not match. +- +- +- +- All clipping programs failed. Tried %1 +- +- +- +- +- AES (%1 rounds) +- +- +- +- AES 256-bit +- +- +- +- Twofish 256-bit +- +- +- +- ChaCha20 256-bit +- +- +- +- Benchmark %1 delay +- +- +- +- %1 ms +- milliseconds +- +- +- +- %1 s +- seconds +- +- +- +- path to a custom local config file +- +- +- +- WARNING: You are using an old key file format which KeePassXC may +-stop supporting in the future. +- +-Please consider generating a new key file. +- +- +- +- Argon2%1 (%2 rounds, %3 KB) +- +- +- +- Argon2d (KDBX 4 – recommended) +- +- +- +- Argon2id (KDBX 4) +- +- +- +- TOTP +- TOTP +- +- +- Icon +- Icona +- +- +- Unsupported key file version: %1 +- +- +- +- Checksum mismatch! Key file may be corrupt. +- +- +- +- Unexpected key file data! Key file may be corrupt. +- +- +- +- +- QtIOCompressor +- +- Internal zlib error when compressing: +- Error intern de zlib mentre s'estava comprimint. +- +- +- Error writing to underlying device: +- Error d'escriptura al dispositiu subjacent: +- +- +- Error opening underlying device: +- Error a l'obrir el dispositiu subjacent: +- +- +- Error reading data from underlying device: +- Error de lectura al dispositiu subjacent: +- +- +- Internal zlib error when decompressing: +- Error intern de zlib al descomprimir: +- +- +- +- QtIOCompressor::open +- +- The gzip format not supported in this version of zlib. +- gzip no és un format compatible amb aquesta versió de zlib. +- +- +- Internal zlib error: +- Error intern de zlib: +- +- +- +- ReportsWidgetHealthcheck +- +- Also show entries that have been excluded from reports +- +- +- +- Hover over reason to show additional details. Double-click entries to edit. +- Poseu-vos damunt del motiu per veure més detalls. Feu doble clic per editar l'entrada. +- +- +- Bad +- Password quality +- +- +- +- Bad — password must be changed +- +- +- +- Poor +- Password quality +- Pobre +- +- +- Poor — password should be changed +- +- +- +- Weak +- Password quality +- Feble +- +- +- Weak — consider changing the password +- +- +- +- (Excluded) +- +- +- +- This entry is being excluded from reports +- +- +- +- Please wait, health data is being calculated... +- +- +- +- Congratulations, everything is healthy! +- +- +- +- Title +- Títol +- +- +- Path +- Camí +- +- +- Score +- Puntuació +- +- +- Reason +- Motiu +- +- +- Edit Entry... +- Edita l'entrada... +- +- +- Exclude from reports +- +- +- +- +- ReportsWidgetHibp +- +- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. +- +- +- +- Perform Online Analysis +- +- +- +- Also show entries that have been excluded from reports +- +- +- +- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. +- +- +- +- Congratulations, no exposed passwords! +- +- +- +- Title +- Títol +- +- +- Path +- Camí +- +- +- Password exposed… +- +- +- +- (Excluded) +- +- +- +- This entry is being excluded from reports +- +- +- +- once +- +- +- +- up to 10 times +- +- +- +- up to 100 times +- +- +- +- up to 1000 times +- +- +- +- up to 10,000 times +- +- +- +- up to 100,000 times +- +- +- +- up to a million times +- +- +- +- millions of times +- +- +- +- Edit Entry... +- Edita l'entrada... +- +- +- Exclude from reports +- +- +- +- +- ReportsWidgetStatistics +- +- Hover over lines with error icons for further information. +- +- +- +- Name +- Nom +- +- +- Value +- Valor +- +- +- Please wait, database statistics are being calculated... +- +- +- +- Database name +- Nom de la base de dades +- +- +- Description +- Descripció +- +- +- Location +- Ubicació +- +- +- Last saved +- Desat per darrera vegada +- +- +- Unsaved changes +- Canvis no desats +- +- +- yes +- sí +- +- +- no +- no +- +- +- The database was modified, but the changes have not yet been saved to disk. +- +- +- +- Number of groups +- Nombre de grups +- +- +- Number of entries +- Nombre d'entrades +- +- +- Number of expired entries +- Nombre d'entrades caducades +- +- +- The database contains entries that have expired. +- +- +- +- Unique passwords +- Contrasenyes úniques +- +- +- Non-unique passwords +- +- +- +- More than 10% of passwords are reused. Use unique passwords when possible. +- +- +- +- Maximum password reuse +- +- +- +- Some passwords are used more than three times. Use unique passwords when possible. +- +- +- +- Number of short passwords +- Nombre de contrasenyes curtes +- +- +- Recommended minimum password length is at least 8 characters. +- La longitud mínima recomanada de la contrasenya és d'almenys 8 caràcters. +- +- +- Number of weak passwords +- Nombre de contrasenyes febles +- +- +- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. +- +- +- +- Entries excluded from reports +- +- +- +- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. +- +- +- +- Average password length +- Longitud mitjana de les contrasenyes +- +- +- %1 characters +- %1 caràcters +- +- +- Average password length is less than ten characters. Longer passwords provide more security. +- La longitud mitjana de les contrasenyes és inferior a 10 caràcters. Les contrasenyes més llargues proporcionen més seguretat. +- +- +- +- SSHAgent +- +- Agent connection failed. +- +- +- +- Agent protocol error. +- +- +- +- No agent running, cannot add identity. +- +- +- +- No agent running, cannot remove identity. +- +- +- +- Agent refused this identity. Possible reasons include: +- +- +- +- The key has already been added. +- +- +- +- Restricted lifetime is not supported by the agent (check options). +- +- +- +- A confirmation request is not supported by the agent (check options). +- +- +- +- Key identity ownership conflict. Refusing to add. +- +- +- +- No agent running, cannot list identities. +- +- +- +- +- SearchHelpWidget +- +- Search Help +- Cerca l'ajuda +- +- +- Search terms are as follows: [modifiers][field:]["]term["] +- Els termes de cerca són així: [modificadors] [camp:] ["] terme ["] +- +- +- Every search term must match (ie, logical AND) +- Cada terme de cerca ha de coincidir (p.e. I lògica) +- +- +- Modifiers +- Modificadors +- +- +- exclude term from results +- exclou el terme dels resultats +- +- +- match term exactly +- el terme ha de coincidir exactament +- +- +- use regex in term +- usa regex al terme +- +- +- Fields +- +- +- +- Term Wildcards +- Comodins +- +- +- match anything +- concorda amb qualsevol cosa +- +- +- match one +- concorda amb un +- +- +- logical OR +- operador lògic O +- +- +- Examples +- +- +- +- +- SearchWidget +- +- Search +- Cerca +- +- +- Limit search to selected group +- Limitar la cerca al grup seleccionat +- +- +- Search Help +- Cerca l'ajuda +- +- +- Search (%1)... +- Search placeholder text, %1 is the keyboard shortcut +- Cerca (%1)... +- +- +- Case sensitive +- +- +- +- +- SettingsWidgetFdoSecrets +- +- Options +- +- +- +- Enable KeepassXC Freedesktop.org Secret Service integration +- Habilita la integració amb el Freedesktop.org Secret Service +- +- +- General +- General +- +- +- Show notification when credentials are requested +- Mostra una notificació quan es demanen credencials +- +- +- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> +- +- +- +- Exposed database groups: +- +- +- +- Authorization +- Autorització +- +- +- These applications are currently connected: +- Aquestes aplicacions estan ara connectades: +- +- +- Don't confirm when entries are deleted by clients +- +- +- +- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. +- +- +- +- <b>Warning:</b> +- +- +- +- Save current changes to activate the plugin and enable editing of this section. +- +- +- +- +- SettingsWidgetKeeShare +- +- Active +- +- +- +- Allow export +- Permet l'exportació +- +- +- Allow import +- Permet la importació +- +- +- Own certificate +- Certificat propi +- +- +- Fingerprint: +- +- +- +- Certificate: +- Certificat: +- +- +- Signer +- Signant +- +- +- Key: +- Clau: +- +- +- Generate +- Genera +- +- +- Import +- Importa +- +- +- Export +- Exporta +- +- +- Imported certificates +- Certificats importats +- +- +- Trust +- Confia +- +- +- Ask +- Pregunta +- +- +- Untrust +- Desconfia +- +- +- Remove +- Suprimiu +- +- +- Path +- Camí +- +- +- Status +- Estat +- +- +- Fingerprint +- Empremta digital +- +- +- Certificate +- Certificat +- +- +- Trusted +- De confiança +- +- +- Untrusted +- No és de confiança +- +- +- Unknown +- +- +- +- key.share +- Filetype for KeeShare key +- +- +- +- KeeShare key file +- +- +- +- All files +- Tots els fitxers +- +- +- Select path +- +- +- +- Exporting changed certificate +- Exportant el certificat modificat +- +- +- The exported certificate is not the same as the one in use. Do you want to export the current certificate? +- El certificat exportat no és el mateix que el que està en ús. Voleu exportar el certificat actual? +- +- +- Signer: +- Signant: +- +- +- Allow KeeShare imports +- Permet les importacions de KeeShare +- +- +- Allow KeeShare exports +- Permet les exportacions de KeeShare +- +- +- Only show warnings and errors +- Mostra només els avisos i els errors +- +- +- Key +- Clau +- +- +- Signer name field +- +- +- +- Generate new certificate +- +- +- +- Import existing certificate +- +- +- +- Export own certificate +- +- +- +- Known shares +- +- +- +- Trust selected certificate +- +- +- +- Ask whether to trust the selected certificate every time +- +- +- +- Untrust selected certificate +- +- +- +- Remove selected certificate +- +- +- +- +- ShareExport +- +- Overwriting signed share container is not supported - export prevented +- +- +- +- Could not write export container (%1) +- +- +- +- Could not embed signature: Could not open file to write (%1) +- +- +- +- Could not embed signature: Could not write file (%1) +- +- +- +- Could not embed database: Could not open file to write (%1) +- +- +- +- Could not embed database: Could not write file (%1) +- +- +- +- Overwriting unsigned share container is not supported - export prevented +- +- +- +- Could not write export container +- +- +- +- Unexpected export error occurred +- +- +- +- +- ShareImport +- +- Import from container without signature +- +- +- +- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? +- +- +- +- Import from container with certificate +- Importa des del contenidor amb certificat +- +- +- Do you want to trust %1 with the fingerprint of %2 from %3? +- Voleu confiar en %1 amb l'empremta digital %2 de %3? {1?} {2?} +- +- +- Not this time +- +- +- +- Never +- Mai +- +- +- Always +- +- +- +- Just this time +- +- +- +- Signed share container are not supported - import prevented +- +- +- +- File is not readable +- +- +- +- Invalid sharing container +- +- +- +- Untrusted import prevented +- S'ha evitat una importació que no era de confiança +- +- +- Successful signed import +- +- +- +- Unsigned share container are not supported - import prevented +- +- +- +- Successful unsigned import +- La importació sense signar s'ha realitzat amb èxit +- +- +- File does not exist +- El fitxer no existeix +- +- +- Unknown share container type +- +- +- +- +- ShareObserver +- +- Import from %1 failed (%2) +- La importació de %1 ha fallat (%2) +- +- +- Import from %1 successful (%2) +- +- +- +- Imported from %1 +- Importat de %1 +- +- +- Export to %1 failed (%2) +- L'exportació a %1 ha fallat (%2) +- +- +- Export to %1 successful (%2) +- L'exportació a %1 s'ha realitzat amb èxit (%2) +- +- +- Export to %1 +- Exporta a %1 +- +- +- Multiple import source path to %1 in %2 +- +- +- +- Conflicting export target path %1 in %2 +- +- +- +- +- TotpDialog +- +- Timed Password +- Contrasenya per temps +- +- +- 000000 +- 000000 +- +- +- Copy +- Còpia +- +- +- Expires in <b>%n</b> second(s) +- Caduca en <b>%n</b> segonCaduca en <b>%n</b> segons +- +- +- +- TotpExportSettingsDialog +- +- Copy +- Còpia +- +- +- NOTE: These TOTP settings are custom and may not work with other authenticators. +- TOTP QR code dialog warning +- NOTA: aquestes configuracions del TOTP són personalitzades i pot ser que no funcionin amb altres autentificadors. +- +- +- There was an error creating the QR code. +- +- +- +- Closing in %1 seconds. +- Tancant en %1 segons. +- +- +- +- TotpSetupDialog +- +- Setup TOTP +- Organització TOTP +- +- +- Default RFC 6238 token settings +- Configuració per defecte amb token RFC 6238 +- +- +- Steam token settings +- Configuració amb token d'Steam +- +- +- Use custom settings +- Utilitza la configuració personalitzada +- +- +- Custom Settings +- Paràmetres a mida +- +- +- Time step: +- Intervals: +- +- +- sec +- Seconds +- sec +- +- +- Code size: +- Mida del codi: +- +- +- Secret Key: +- +- +- +- Secret key must be in Base32 format +- +- +- +- Secret key field +- +- +- +- Algorithm: +- Algoritme: +- +- +- Time step field +- +- +- +- digits +- +- +- +- Invalid TOTP Secret +- +- +- +- You have entered an invalid secret key. The key must be in Base32 format. +-Example: JBSWY3DPEHPK3PXP +- +- +- +- Confirm Remove TOTP Settings +- +- +- +- Are you sure you want to delete TOTP settings for this entry? +- Esteu segur que voleu suprimir la configuració TOTP de l'entrada? +- +- +- +- URLEdit +- +- Invalid URL +- +- +- +- +- UpdateCheckDialog +- +- Checking for updates +- Comprovant si hi ha actualitzacions +- +- +- Checking for updates... +- Comprovant si hi ha actualitzacions... +- +- +- Close +- Tanca +- +- +- Update Error! +- Error d'actualització! +- +- +- An error occurred in retrieving update information. +- S'ha produït un error en recuperar la informació d'actualització. +- +- +- Please try again later. +- Si us plau, proveu-ho altre cop més tard. +- +- +- Software Update +- Actualització de programari +- +- +- A new version of KeePassXC is available! +- Hi ha disponible una nova versió de KeePassXC! +- +- +- KeePassXC %1 is now available — you have %2. +- +- +- +- Download it at keepassxc.org +- Descarregueu-ho a keepassxc.org +- +- +- You're up-to-date! +- Esteu actualitzats! +- +- +- KeePassXC %1 is currently the newest version available +- +- +- +- +- WelcomeWidget +- +- Start storing your passwords securely in a KeePassXC database +- Comenceu a emmagatzemar les vostres contrasenyes de manera segura en una base de dades KeePassXC +- +- +- Create new database +- Crea una nova base de dades +- +- +- Open existing database +- Obre una base de dades existent +- +- +- Import from KeePass 1 +- Importa de KeePass 1 +- +- +- Import from CSV +- Importa d'un fitxer CSV +- +- +- Recent databases +- Bases de dades obertes recentment +- +- +- Welcome to KeePassXC %1 +- Benvinguts/des al KeePassXC %1 +- +- +- Import from 1Password +- Importa des de 1Password +- +- +- Open a recent database +- Obre una base de dades recent +- +- +- +- YubiKey +- +- %1 [%2] Configured Slot - %3 +- +- +- +- %1 [%2] Challenge Response - Slot %3 - %4 +- +- +- +- Press +- Prem +- +- +- Passive +- Passiu +- +- +- %1 Invalid slot specified - %2 +- +- +- +- The YubiKey interface has not been initialized. +- +- +- +- Hardware key is currently in use. +- +- +- +- Could not find hardware key with serial number %1. Please plug it in to continue. +- +- +- +- Hardware key timed out waiting for user interaction. +- +- +- +- A USB error ocurred when accessing the hardware key: %1 +- +- +- +- Failed to complete a challenge-response, the specific error was: %1 +- +- +- +- +- YubiKeyEditWidget +- +- Refresh +- Actualitza +- +- +- YubiKey Challenge-Response +- Comprovació-resposta YubiKey +- +- +- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- <p>Si teniu una <a href="https://www.yubico.com/">Yubikey</a>, la podeu usar com a seguretat addicional.</p><p>La YubiKey necessita que una de les seves ranures es programi com a <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/"> comprovació-resposta HMAC-SHA1</a>.</p> +- +- +- Refresh hardware tokens +- Refresca els testimonis de maquinari +- +- +- Hardware key slot selection +- Selecció de la ranura de la motxilla +- +- +- Could not find any hardware keys! +- +- +- +- Selected hardware key slot does not support challenge-response! +- +- +- +- Detecting hardware keys… +- +- +- +- No hardware keys detected +- +- +- +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_cs.ts keepassxc-2.6.4-patched/share/translations/keepassx_cs.ts +--- keepassxc-2.6.4-orig/share/translations/keepassx_cs.ts 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/translations/keepassx_cs.ts 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7899 +0,0 @@ +- +- +- AboutDialog +- +- About KeePassXC +- O KeePassXC +- +- +- About +- O aplikaci +- +- +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- Chyby hlaste na: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- +- +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- KeePassXC je šířeno pod GNU obecnou veÅ™ejnou licencí (GPL) verze 2 a (případnÄ›) 3. +- +- +- Contributors +- Na vývoji se podíleli +- +- +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Viz pÅ™ispÄ›vatelé na portálu GitHub</a> +- +- +- Debug Info +- Ladící informace +- +- +- Include the following information whenever you report a bug: +- K hlášení chyby vždy pÅ™ipojte následující údaje: +- +- +- Copy to clipboard +- Zkopírovat do schránky +- +- +- Project Maintainers: +- Správci projektu: +- +- +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- Tým KeePassXC dÄ›kuje zvláštÄ› vývojáři debfx za vytvoÅ™ení původního KeePassX. +- +- +- +- AgentSettingsWidget +- +- Use OpenSSH for Windows instead of Pageant +- Použít namísto Pagent radÄ›ji OpenSSH pro Windows +- +- +- Enable SSH Agent integration +- Zapnout integraci s SSH agentem +- +- +- SSH_AUTH_SOCK value +- hodnota SSH_AUTH_SOCK +- +- +- SSH_AUTH_SOCK override +- pÅ™epsání SSH_AUTH_SOCK +- +- +- (empty) +- (prázdné) +- +- +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- Není k dispozici žádný soket SSH agenta. BuÄ ověřte, zda existuje promÄ›nná prostÅ™edí SSH_AUTH_SOCK nebo nastavte její pÅ™epsání. +- +- +- SSH Agent connection is working! +- Spojení s SSH agentem funguje! +- +- +- +- ApplicationSettingsWidget +- +- Application Settings +- Nastavení aplikace +- +- +- General +- Obecné +- +- +- Security +- ZabezpeÄení +- +- +- Access error for config file %1 +- Chyba přístupu k souboru s nastaveními %1 +- +- +- Icon only +- Pouze ikona +- +- +- Text only +- Pouze text +- +- +- Text beside icon +- Text vedle ikony +- +- +- Text under icon +- Text pod ikonou +- +- +- Follow style +- Styl následování +- +- +- Reset Settings? +- Vrátit nastavení do výchozích hodnot? +- +- +- Are you sure you want to reset all general and security settings to default? +- Opravdu chcete vrátit veÅ¡kerá obecná nastavení a nastavení zabezpeÄení do výchozích hodnot? +- +- +- Monochrome (light) +- ÄŒernobílá (svÄ›tlá) +- +- +- Monochrome (dark) +- ÄŒernobílá (tmavá) +- +- +- Colorful +- Barevná +- +- +- You must restart the application to set the new language. Would you like to restart now? +- Aby se zmÄ›na jazyka projevila, je tÅ™eba aplikaci restartovat. Chcete to provést nyní? +- +- +- +- ApplicationSettingsWidgetGeneral +- +- Basic Settings +- Základní nastavení +- +- +- Startup +- SpouÅ¡tÄ›ní +- +- +- Start only a single instance of KeePassXC +- SpouÅ¡tÄ›t pouze jedinou instanci KeePassXC +- +- +- Minimize window at application startup +- SpouÅ¡tÄ›t aplikaci s minimalizovaným oknem +- +- +- File Management +- Správa souboru +- +- +- Backup database file before saving +- PÅ™ed uložením zazálohovat databázový soubor +- +- +- Automatically save after every change +- Po každé zmÄ›nÄ› hned automaticky uložit +- +- +- Automatically reload the database when modified externally +- V případÄ› úpravy zvenÄí, automaticky znovu naÄíst databázi +- +- +- Entry Management +- Správa záznamu +- +- +- Use group icon on entry creation +- Pro vytvářený záznam použít ikonu skupiny, pod kterou je vytvářen +- +- +- Minimize instead of app exit +- Namísto ukonÄení aplikaci minimalizovat +- +- +- Show a system tray icon +- Zobrazovat ikonu v oznamovací oblasti systémového panelu +- +- +- Hide window to system tray when minimized +- Minimalizovat okno aplikace do oznamovací oblasti systémového panelu +- +- +- Auto-Type +- Automatické vyplňování +- +- +- Use entry title to match windows for global Auto-Type +- Použít titulek položky pro hledání shody s okny pro globální automatické vyplňování +- +- +- Use entry URL to match windows for global Auto-Type +- Použít URL adresu položky pro hledání shody s okny pro globální automatické vyplňování +- +- +- Always ask before performing Auto-Type +- Vždy se zeptat pÅ™ed provedením automatického vyplnÄ›ní +- +- +- ms +- Milliseconds +- ms +- +- +- Movable toolbar +- PÅ™esouvatelná liÅ¡ta nástrojů +- +- +- Remember previously used databases +- Pamatovat si minule použité databáze +- +- +- Load previously open databases on startup +- PÅ™i spuÅ¡tÄ›ní naÄíst minule otevÅ™ené databáze +- +- +- Remember database key files and security dongles +- Pamatovat si soubory s klíÄi k databázím a hardwarová bezpeÄnostní zařízení +- +- +- Check for updates at application startup once per week +- ZjiÅ¡Å¥ovat dostupnost aktualizací aplikace (pÅ™i spouÅ¡tÄ›ní) jednou týdnÄ› +- +- +- Include beta releases when checking for updates +- PÅ™i zjiÅ¡Å¥ování případných aktualizací brát v potaz i vývojové testovací verze +- +- +- Language: +- Jazyk: +- +- +- (restart program to activate) +- (pro aktivaci je tÅ™eba aplikaci ukonÄit a spustit znovu) +- +- +- Minimize window after unlocking database +- Po odemÄení databáze okno minimalizovat +- +- +- Minimize when opening a URL +- PÅ™i otevírání URL okno minimalizovat +- +- +- Hide window when copying to clipboard +- Po zkopírování do schránky okno zminimalizovat +- +- +- Minimize +- Minimalizovat +- +- +- Drop to background +- Upustit na pozadí +- +- +- Favicon download timeout: +- ÄŒasový limit stažení ikony webu +- +- +- Website icon download timeout in seconds +- ÄŒasový limit (v sekundách) pro stažení ikony webu +- +- +- sec +- Seconds +- sek. +- +- +- Toolbar button style +- Styl tlaÄítek na liÅ¡tÄ› nástrojů +- +- +- Language selection +- VýbÄ›r jazyka +- +- +- Global auto-type shortcut +- Zkratka pro globální automatické vyplňování +- +- +- Auto-type character typing delay milliseconds +- Prodleva (ms) mezi zadáváním jednotlivých znaků pÅ™i automatickém vyplňování +- +- +- Auto-type start delay milliseconds +- Prodleva (v milisekundách) zahájení automatického vyplňování +- +- +- Automatically launch KeePassXC at system startup +- Automaticky spustit KeePassXC po startu systému +- +- +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- BezpeÄné ukládání souborů databáze (vypnÄ›te pokud narážíte na problémy s Dropobox, atp.) +- +- +- User Interface +- Uživatelské rozhraní +- +- +- Toolbar button style: +- Styl tlaÄítek na liÅ¡tÄ› nástrojů: +- +- +- Use monospaced font for notes +- Pro poznámky použít písmo se vÅ¡emi znaky stejnÄ› Å¡irokými +- +- +- Tray icon type: +- Typ ikony v oznamovací oblasti: +- +- +- Reset settings to default… +- Vrátit nastavení do výchozích hodnot… +- +- +- Auto-Type typing delay: +- Prodleva automatického vyplnÄ›ní: +- +- +- Global Auto-Type shortcut: +- Klávesová zkratka pro vÅ¡eobecné automatické vyplňování: +- +- +- Auto-Type start delay: +- Prodleva zahájení automatického vyplňování: +- +- +- Automatically save when locking database +- PÅ™i uzamykání databáze automaticky uložit +- +- +- Automatically save non-data changes when locking database +- PÅ™i uzamykání databáze automaticky uložit zmÄ›ny i ne v datech +- +- +- Tray icon type +- Typ ikony v oznamovací oblasti +- +- +- +- ApplicationSettingsWidgetSecurity +- +- Timeouts +- ÄŒasové limity +- +- +- Clear clipboard after +- Vymazat obsah schránky po uplynutí +- +- +- sec +- Seconds +- sek. +- +- +- Lock databases after inactivity of +- Uzamknout databázi pÅ™i neÄinnosti delší než +- +- +- min +- min +- +- +- Forget TouchID after inactivity of +- Zapomenout TouchID po neÄinnosti trvající +- +- +- Convenience +- Pohodlí +- +- +- Lock databases when session is locked or lid is closed +- Zamknout databáze pÅ™i zamÄení relace uživatele v operaÄním systému nebo je zavÅ™ení víka notebooku +- +- +- Forget TouchID when session is locked or lid is closed +- Zapomenout TouchID pÅ™i zamÄení relace uživatele v operaÄním systému nebo pÅ™i zavÅ™ení víka notebooku +- +- +- Lock databases after minimizing the window +- PÅ™i minimalizaci okna uzamknout databáze +- +- +- Re-lock previously locked database after performing Auto-Type +- Po provedení automatického vyplnÄ›ní databázi opÄ›t zamknout, pokud pÅ™edtím byla uzamÄena. +- +- +- Hide passwords in the entry preview panel +- Skrýt hesla v panelu náhledu položky +- +- +- Hide entry notes by default +- Skrývat ve výchozím stavu poznámky k položkám +- +- +- Privacy +- Soukromí +- +- +- Use DuckDuckGo service to download website icons +- Pro stahování ikon webů použít službu DuckDuckGo +- +- +- Clipboard clear seconds +- Za kolik sekund vyÄistit schránku +- +- +- Touch ID inactivity reset +- Reset neaktivity Touch ID +- +- +- Database lock timeout seconds +- ÄŒasový limit (v sekundách) uzamÄení databáze +- +- +- min +- Minutes +- min +- +- +- Clear search query after +- VyÄistit vyhledávací dotaz po uplynutí +- +- +- Require password repeat when it is visible +- Vyžadovat zopakování zadání hesla, i když je viditelné, +- +- +- Hide passwords when editing them +- Skrývat hesla pÅ™i jejich upravování +- +- +- Use placeholder for empty password fields +- Používat pro prázdné kolonky pro heslo zástupnou výplň +- +- +- +- AutoType +- +- Couldn't find an entry that matches the window title: +- Nedaří se nalézt záznam, který by se shodoval s titulkem okna: +- +- +- Auto-Type - KeePassXC +- Automatické vyplňování – KeePassXC +- +- +- Auto-Type +- Automatické vyplňování +- +- +- The Syntax of your Auto-Type statement is incorrect! +- Neplatná syntaxe vyjádÅ™ení automatického vyplňování! +- +- +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- Tento příkaz automatického vyplňování obsahuje velmi dlouhou prodlevu. Opravdu chcete pokraÄovat? +- +- +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- Tento příkaz automatického vyplňování obsahuje velmi pomalé stisky kláves. Opravdu chcete pokraÄovat? +- +- +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- Tento příkaz automatického vyplňování obsahuje argumenty, které se velmi Äasto opakují. Opravdu chcete pokraÄovat? +- +- +- Permission Required +- Jsou zapotÅ™ebí oprávnÄ›ní +- +- +- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC vyžaduje oprávnÄ›ní ke ZpřístupnÄ›ní, aby mohlo být provádÄ›no automatické vyplňování na úrovni položky. Pokud jste toto oprávnÄ›ní už udÄ›lili, může být tÅ™eba jeÅ¡tÄ› KeePassXC restartovat. +- +- +- +- AutoTypeAssociationsModel +- +- Window +- Okno +- +- +- Sequence +- PoÅ™adí +- +- +- Default sequence +- Výchozí poÅ™adí +- +- +- +- AutoTypeMatchModel +- +- Group +- Skupina +- +- +- Title +- Titulek +- +- +- Username +- Uživatelské jméno +- +- +- Sequence +- Posloupnost +- +- +- +- AutoTypeMatchView +- +- Copy &username +- Zkopírovat &uživatelské jméno +- +- +- Copy &password +- Zko&pírovat heslo +- +- +- +- AutoTypePlatformMac +- +- Permission Required +- Jsou zapotÅ™ebí oprávnÄ›ní +- +- +- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC vyžaduje oprávnÄ›ní ke ZpřístupnÄ›ní a „Nahrávání obrazovky“, aby mohlo být provádÄ›no globální automatické vyplňování. Nahrávání obrazovky je nezbytné pro použití nadpisu okna pro vyhledávání položek v databázi. Pokud jste tato oprávnÄ›ní už udÄ›lili, může být tÅ™eba jeÅ¡tÄ› KeePassXC restartovat. +- +- +- +- AutoTypeSelectDialog +- +- Auto-Type - KeePassXC +- Automatické vyplňování – KeePassXC +- +- +- Select entry to Auto-Type: +- Vyberte záznam, kterým se bude automaticky vyplňovat: +- +- +- Search... +- Hledat… +- +- +- +- BrowserAccessControlDialog +- +- KeePassXC - Browser Access Request +- KeePassXC – požadavek na přístup prohlížeÄe +- +- +- %1 is requesting access to the following entries: +- %1 žádá přístup k následujícím záznamům: +- +- +- Remember access to checked entries +- Zapamatovat přístup k zaÅ¡krtnutým položkám +- +- +- Remember +- Zapamatovat +- +- +- Allow access to entries +- Umožnit přístup k záznamům +- +- +- Allow Selected +- Povolit vybrané +- +- +- Deny All +- Odepřít vÅ¡e +- +- +- Disable for this site +- Vypnout pro tuto stránku +- +- +- +- BrowserEntrySaveDialog +- +- KeePassXC-Browser Save Entry +- KeePassXC-Browser Uložit položku +- +- +- Ok +- Ok +- +- +- Cancel +- ZruÅ¡it +- +- +- You have multiple databases open. +-Please select the correct database for saving credentials. +- Máte otevÅ™eno vícero databází. +-Vyberte databázi, do které chcete pÅ™ihlaÅ¡ovací údaje uložit. +- +- +- +- BrowserService +- +- KeePassXC: New key association request +- KeePassXC: Nový požadavek na pÅ™iÅ™azení klíÄe +- +- +- Save and allow access +- Uložit a umožnit přístup +- +- +- KeePassXC: Overwrite existing key? +- KeePassXC: PÅ™epsat stávající klíÄ? +- +- +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- Sdílený Å¡ifrovací klÃ­Ä nazvaný „%1“ už existuje. +-PÅ™ejete si ho pÅ™epsat? +- +- +- KeePassXC: Update Entry +- KeePassXC: Aktualizovat záznam +- +- +- Do you want to update the information in %1 - %2? +- Chcete aktualizovat údaj v %1 – %2? +- +- +- Abort +- PÅ™eruÅ¡it +- +- +- Converting attributes to custom data… +- PÅ™evádÄ›ní atributů na uživatelsky urÄená data… +- +- +- KeePassXC: Converted KeePassHTTP attributes +- KeePassXC: PÅ™evedené KeePassHTTP atributy +- +- +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- ÚspěšnÄ› pÅ™evedeny atributy z %1 položek. +-PÅ™esunuto %2 klíÄů do uživatelsky urÄených dat. +- +- +- Successfully moved %n keys to custom data. +- %n klÃ­Ä ÃºspěšnÄ› pÅ™esunut do uživatelsky urÄených dat.%n klíÄe úspěšnÄ› pÅ™esunuty do uživatelsky urÄených dat.%n klíÄů úspěšnÄ› pÅ™esunuto do uživatelsky urÄených dat.%n klíÄy úspěšnÄ› pÅ™esunuty do uživatelsky urÄených dat. +- +- +- KeePassXC: No entry with KeePassHTTP attributes found! +- KeePassXC: Nenalezena žádná položka, která má KeePassHTTP atributy! +- +- +- The active database does not contain an entry with KeePassHTTP attributes. +- PrávÄ› otevÅ™ená databáze neobsahuje žádnou položku s atributy KeePassHTTP. +- +- +- KeePassXC: Legacy browser integration settings detected +- KeePassXC: zjiÅ¡tÄ›na nastavení starého napojení na webový prohlížeÄ +- +- +- KeePassXC: Create a new group +- KeePassXC: vytvoÅ™it novou skupinu +- +- +- A request for creating a new group "%1" has been received. +-Do you want to create this group? +- +- Byl obdržen požadavek na vytvoÅ™ení nové skupiny „%1“. +-Chcete tuto skupinu vytvoÅ™it? +- +- +- +- Your KeePassXC-Browser settings need to be moved into the database settings. +-This is necessary to maintain your current browser connections. +-Would you like to migrate your existing settings now? +- VaÅ¡e nastavení KeePassXC-Browser je tÅ™eba pÅ™esunout do nastavení databáze. +-Toto je nezbytné pro zachování vaÅ¡ich stávajících spojení prohlížeÄe. +-Chcete pÅ™enést vaÅ¡e stávající nastavení nyní? +- +- +- Don't show this warning again +- Toto varování znovu nezobrazovat +- +- +- You have received an association request for the following database: +-%1 +- +-Give the connection a unique name or ID, for example: +-chrome-laptop. +- Obdrželi jste požadavek na asociaci pro následující databázi: +-%1 +- +-Dejte spojení neopakující se název nebo identifikátor, například: +-chrome-laptop. +- +- +- +- BrowserSettingsWidget +- +- Dialog +- Dialog +- +- +- This is required for accessing your databases with KeePassXC-Browser +- Toto je potÅ™ebné pro přístup do vaÅ¡ich databází pomocí KeePassXC-Browser +- +- +- Enable browser integration +- Zapnout napojení na webový prohlížeÄ +- +- +- General +- Obecné +- +- +- Browsers installed as snaps are currently not supported. +- ProhlížeÄe, nainstalované formou snap balíÄků, zatím nejsou podporované. +- +- +- Enable integration for these browsers: +- Zapnout propojení pro tyto prohlížeÄe: +- +- +- Vivaldi +- Vivaldi +- +- +- &Edge +- &Edge +- +- +- Firefox +- Firefox +- +- +- Tor Browser +- Tor Browser +- +- +- Brave +- Brave +- +- +- Google Chrome +- Google Chrome +- +- +- Chromium +- Chromium +- +- +- Show a notification when credentials are requested +- Credentials mean login data requested via browser extension +- Pokud jsou z prohlížeÄe vyžádány pÅ™ihlaÅ¡ovací údaje, zobrazit upozornÄ›ní +- +- +- Request to unlock the database if it is locked +- Pokud je uzamÄená, požádat o odemÄení databáze +- +- +- Only entries with the same scheme (http://, https://, ...) are returned. +- Je odpovÄ›zeno pouze položkami stejného schématu (http://, https://, …). +- +- +- Match URL scheme (e.g., https://...) +- Hledat shodu ve schématu URL (napÅ™., https://…) +- +- +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- Odpoví pouze nejlepšími shodami pro konkrétní URL adresu namísto vÅ¡ech položek pro celou doménu. +- +- +- Return only best-matching credentials +- OdpovÄ›dÄ›t pouze nejlépe odpovídajícími pÅ™ihlaÅ¡ovacími údaji +- +- +- Returns expired credentials. String [expired] is added to the title. +- Vrátí pÅ™ihlaÅ¡ovací údaje, kterým skonÄila platnost. Do názvu je pÅ™idán Å™etÄ›zec [expired]. +- +- +- Allow returning expired credentials +- Umožnit poskytování i pÅ™ihlaÅ¡ovacích údajů, kterým skonÄila platnost. +- +- +- All databases connected to the extension will return matching credentials. +- Odpovídající pÅ™ihlaÅ¡ovací údaje budou poskytovány ze vÅ¡ech databází, napojených na toto rozšíření. +- +- +- Search in all opened databases for matching credentials +- Credentials mean login data requested via browser extension +- Hledat odpovídající pÅ™ihlaÅ¡ovací údaje ve vÅ¡ech otevÅ™ených databázích +- +- +- Sort matching credentials by title +- Credentials mean login data requested via browser extension +- SeÅ™adit odpovídající pÅ™ihlaÅ¡ovací údaje podle titulku +- +- +- Sort matching credentials by username +- Credentials mean login data requested via browser extension +- SeÅ™adit odpovídající pÅ™ihlaÅ¡ovací údaje podle uživatelského jména +- +- +- Advanced +- PokroÄilé +- +- +- Never ask before accessing credentials +- Credentials mean login data requested via browser extension +- Nikdy se neptat pÅ™ed přístupem k pÅ™ihlaÅ¡ovacím údajům +- +- +- Never ask before updating credentials +- Credentials mean login data requested via browser extension +- Nikdy se neptat pÅ™ed aktualizací pÅ™ihlaÅ¡ovacích údajů +- +- +- Do not ask permission for HTTP Basic Auth +- An extra HTTP Basic Auth setting +- Neptat se na oprávnÄ›ní pro HTTP Basic Auth +- +- +- Automatically creating or updating string fields is not supported. +- Automatické vytváření nebo aktualizace není u textových kolonek podporované! +- +- +- Return advanced string fields which start with "KPH: " +- OdpovÄ›dÄ›t také kolonkami pokroÄilých textových Å™etÄ›zců které zaÄínají na „KPH: “ +- +- +- Don't display the popup suggesting migration of legacy KeePassHTTP settings. +- Nezobrazovat vyskakovací okno doporuÄující pÅ™evedení nastavení ze starého KeePassHTTP. +- +- +- Do not prompt for KeePassHTTP settings migration. +- Nedotazovat se na pÅ™evedení nastavení z KeePassHTTP. +- +- +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- PÅ™i spuÅ¡tÄ›ní automaticky aktualizuje popis umístÄ›ní spustitelného souboru s KeePassXC nebo keepassxc-proxy na skripty posílání zpráv mezi webovým prohlížeÄem a desktopovou aplikací (native messaging). +- +- +- Update native messaging manifest files at startup +- PÅ™i spouÅ¡tÄ›ní aktualizovat soubory s manifestem posílání zpráv mezi webovým prohlížeÄem a desktopovou aplikací (native messaging) +- +- +- Use a custom proxy location if you installed a proxy manually. +- Pokud jste zprostÅ™edkovávající aplikaci nainstalovali ruÄnÄ›, použijte její uživatelsky urÄené umístÄ›ní. +- +- +- Use a custom proxy location: +- Meant is the proxy for KeePassXC-Browser +- Použít uživatelsky urÄené umístÄ›ní zprostÅ™edkovávající aplikace +- +- +- Custom proxy location field +- Kolonka pro uživatelsky urÄené proxy umístÄ›ní +- +- +- Browser for custom proxy file +- Nalistovat uživatelsky urÄený proxy soubor +- +- +- Browse... +- Button for opening file dialog +- Procházet… +- +- +- Use a custom browser configuration location: +- Použít uživatelsky urÄené umístÄ›ní nastavení pro prohlížeÄ: +- +- +- Browser type: +- Typ prohlížeÄe: +- +- +- Toolbar button style +- Styl tlaÄítek na liÅ¡tÄ› nástrojů +- +- +- Config Location: +- UmístÄ›ní nastavení: +- +- +- Custom browser location field +- Kolonka uživatelsky urÄené umístÄ›ní prohlížeÄe +- +- +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- +- +- Browse for custom browser path +- Nalistovat uživatelsky urÄený popis umístÄ›ní prohlížeÄe +- +- +- Custom extension ID: +- Identif. uživatelsky urÄeného rozšíření: +- +- +- Custom extension ID +- Identif. uživatelsky urÄeného rozšíření +- +- +- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 +- Z důvodu, že software ze Snap balíÄku je provozován v ohraniÄeném prostÅ™edí, je tÅ™eba spustit skript, který zapíná napojení na webový prohlížeÄ. <br />Tento skript je možné získat z %1 +- +- +- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 +- Aby fungovalo napojení na prohlížeÄ, je tÅ™eba KeePassXC. <br /> Stáhnete ho pro %1 a %2 a %3. %4 +- +- +- Please see special instructions for browser extension use below +- Níže si pÅ™eÄtÄ›te konkrétní pokyny pro rozšíření do webového prohlížeÄe +- +- +- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. +- <b>Chyba:</b> Uživatelsky urÄené umístÄ›ní proxy nenalezeno! <br/>Napojení na prohlížeÄ NEBUDE bez proxy FUNGOVAT. +- +- +- <b>Warning:</b> The following options can be dangerous! +- <b>Varování:</b> Následující pÅ™edvolby mohou být nebezpeÄné! +- +- +- Executable Files +- Spustitelné soubory +- +- +- All Files +- VeÅ¡keré soubory +- +- +- Select custom proxy location +- Vybrat uživatelem urÄené umístÄ›ní zprostÅ™edkovávající aplikace +- +- +- Select native messaging host folder location +- Vyberte umístÄ›ní složky hostitele nativních zpráv +- +- +- +- CloneDialog +- +- Clone Options +- PÅ™edvolby klonu +- +- +- Append ' - Clone' to title +- PÅ™ipojit k titulku „ – klon“ +- +- +- Replace username and password with references +- Nahradit uživatelské jméno a heslo tÄ›mi referenÄními +- +- +- Copy history +- Kopírovat historii +- +- +- +- CsvImportWidget +- +- Import CSV fields +- Importovat CSV kolonky +- +- +- filename +- název souboru +- +- +- size, rows, columns +- velikost, řádky, sloupce +- +- +- Encoding +- Kódování znaků +- +- +- Codec +- Kodek +- +- +- Text is qualified by +- Text je zaÅ™azován pomocí +- +- +- Fields are separated by +- Kolonky jsou oddÄ›lovány pomocí +- +- +- Comments start with +- Komentáře zaÄínají na +- +- +- Consider '\' an escape character +- Považovat „\“ za speciálního významu zbavující (escape) znak +- +- +- Preview +- Náhled +- +- +- Imported from CSV file +- Importováno z CSV souboru +- +- +- Original data: +- Původní data: +- +- +- Error +- Chyba +- +- +- Error(s) detected in CSV file! +- V CSV soubory byly zjiÅ¡tÄ›ny chyby! +- +- +- [%n more message(s) skipped] +- [%n další zpráva pÅ™eskoÄena][%n další zprávy pÅ™eskoÄeny][%n dalších zpráv pÅ™eskoÄeno][%n další zprávy pÅ™eskoÄeny] +- +- +- CSV import: writer has errors: +-%1 +- CSV import: chyby zápisu: +-%1 +- +- +- Text qualification +- ZaÅ™azování textu +- +- +- Field separation +- OddÄ›lování kolonek +- +- +- Number of header lines to discard +- PoÄet řádků hlaviÄky, které zahodit +- +- +- CSV import preview +- Náhled importu CSV +- +- +- Column Association +- PÅ™iÅ™azení sloupce +- +- +- Last Modified +- Okamžik poslední úpravy +- +- +- Password +- Heslo +- +- +- Created +- VytvoÅ™eno +- +- +- Notes +- Poznámky +- +- +- Title +- Titulek +- +- +- Group +- Skupina +- +- +- URL +- URL adresa +- +- +- Username +- Uživatelské jméno +- +- +- Header lines skipped +- Řádky se záhlavím pÅ™eskoÄeny +- +- +- First line has field names +- První řádek obsahuje názvy kolonek +- +- +- Not Present +- Není pÅ™itomno +- +- +- Column %1 +- Sloupec %1 +- +- +- TOTP +- TOTP +- +- +- Icon +- Ikona +- +- +- +- CsvParserModel +- +- %n column(s) +- %n sloupec%n sloupce%n sloupců%n sloupce +- +- +- %1, %2, %3 +- file info: bytes, rows, columns +- %1, %2, %3 +- +- +- %n byte(s) +- %n bajt%n bajty%n bajtů%n bajty +- +- +- %n row(s) +- %n řádek%n řádky%n řádků%n řádky +- +- +- +- Database +- +- File %1 does not exist. +- Soubor %1 neexistuje. +- +- +- Unable to open file %1. +- Soubor %1 se nedaří otevřít. +- +- +- Error while reading the database: %1 +- Chyba pÅ™i Ätení databáze: %1 +- +- +- File cannot be written as it is opened in read-only mode. +- Do souboru nelze zapisovat, protože je otevÅ™en v režimu pouze pro Ätení. +- +- +- Key not transformed. This is a bug, please report it to the developers! +- KlÃ­Ä nebyl pÅ™emÄ›nÄ›n. Toto je chyba – prosím nahlaste to vývojářům. +- +- +- %1 +-Backup database located at %2 +- %1 +-Záložní databáze se nachází v %2 +- +- +- Could not save, database does not point to a valid file. +- Není možné uložit, databáze neodkazuje na platný soubor. +- +- +- Could not save, database file is read-only. +- Nedaří se uložit, soubor s databází je přístupný pouze pro Ätení. +- +- +- Database file has unmerged changes. +- V databázovém souboru jsou neslouÄené zmÄ›ny. +- +- +- Recycle Bin +- KoÅ¡ +- +- +- Passwords +- Root group name +- Hesla +- +- +- Database save is already in progress. +- Ukládání databáze už probíhá. +- +- +- Could not save, database has not been initialized! +- Není možné uložit, databáze nebyla inicializována! +- +- +- +- DatabaseOpenDialog +- +- Unlock Database - KeePassXC +- Odemknout databázi – KeePassXC +- +- +- +- DatabaseOpenWidget +- +- Key File: +- Soubor s klíÄem: +- +- +- Refresh +- NaÄíst znovu +- +- +- Don't show this warning again +- Toto varování znovu nezobrazovat +- +- +- All files +- VeÅ¡keré soubory +- +- +- Key files +- Soubory s klíÄi +- +- +- Select key file +- Vyberte soubor s klíÄem +- +- +- Failed to open key file: %1 +- NepodaÅ™ilo se otevřít soubor s klíÄem: %1 +- +- +- Unlock KeePassXC Database +- Odemknout databázi KeePassXC +- +- +- Enter Password: +- Zadejte heslo: +- +- +- Password field +- Kolonka pro heslo +- +- +- Hardware key slot selection +- VýbÄ›r slotu v hardwarovém klíÄi +- +- +- Browse for key file +- Nalistovat soubor s klíÄem +- +- +- Browse... +- Procházet… +- +- +- Refresh hardware tokens +- Znovu naÄíst hardwarová bezpeÄnostní zařízení +- +- +- Hardware Key: +- Hardwarový klíÄ: +- +- +- Hardware key help +- NápovÄ›da k hardwarovému klíÄi +- +- +- TouchID for Quick Unlock +- TouchID pro rychlé odemknutí +- +- +- Unlock failed and no password given +- Odemknutí se nezdaÅ™ilo a nebylo zadáno žádné heslo +- +- +- Unlocking the database failed and you did not enter a password. +-Do you want to retry with an "empty" password instead? +- +-To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. +- OdemÄení databáze se nezdaÅ™ilo a nezadali jste heslo. +-Chcete to zkusit znovu s „prázdným“ heslem? +- +-Abyste tomu, aby se tato chyba objevovala, je tÅ™eba pÅ™ejít do „Nastavení databáze / ZabezpeÄení“ a nastavit heslo znovu. +- +- +- Retry with empty password +- Zkusit znovu bez hesla +- +- +- Enter Additional Credentials (if any): +- Zadejte další pÅ™ihlaÅ¡ovací údaje (pokud jsou): +- +- +- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +-<p>Click for more information...</p> +- <p>Je možné používat hardwarové bezpeÄnostní klíÄe jako například <strong>YubiKey</strong> nebo <strong>OnlyKey</strong> se sloty nastavenými pro HMAC-SHA1.</p> +-<p>KliknÄ›te pro další informace…</p> +- +- +- Key file help +- NápovÄ›da k souboru s klíÄem +- +- +- ? +- ? +- +- +- Cannot use database file as key file +- Soubor s databází není možné použít pro úÄely souboru s klíÄem (mÄ›ní se) +- +- +- You cannot use your database file as a key file. +-If you do not have a key file, please leave the field empty. +- Soubor s databází není možné použít pro úÄely souboru s klíÄem (bude se mÄ›nit). +-Pokud nemáte žádný soubor, který by se zaruÄenÄ› nemÄ›nil (a byl tedy vhodný jako klíÄ), tuto kolonku nevyplňujte. +- +- +- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> +- <p>Krom hlavního hesla je možné použít tajný soubor a vylepÅ¡it tak zabezpeÄení databáze. Takový soubor je možné vytvoÅ™it v nastavení zabezpeÄení databáze.</p><p>Toto <strong>není</strong> *.kdbx databázový soubor!<br>Pokud nemáte soubor s klíÄem, ponechte kolonku nevyplnÄ›nou.</p><p>Pro více informaci kliknÄ›te sem…</p> +- +- +- Key file to unlock the database +- Soubor s klíÄem k odemknutí databáze +- +- +- Please touch the button on your YubiKey! +- DotknÄ›te se tlaÄítka na svém YubiKey zařízení! +- +- +- Detecting hardware keys… +- ZjiÅ¡Å¥ování hardwarových klíÄů… +- +- +- No hardware keys detected +- Nenalezeny žádné hardwarové klíÄe +- +- +- Select hardware key… +- Vyberte hardwarový klíÄ… +- +- +- Old key file format +- Starý formát souboru s klíÄem +- +- +- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> +- Používáte starý formát souboru s klíÄem, který může KeePassXC <br>pÅ™estat v budoucnu podporovat.<br><br>Zvažte prosím vytvoÅ™ení nového souboru s klíÄem v nabídce <br><strong>Databáze / ZabezpeÄení databáze / ZmÄ›nit soubor s klíÄem.</strong><br> +- +- +- +- DatabaseSettingWidgetMetaData +- +- Passwords +- Hesla +- +- +- +- DatabaseSettingsDialog +- +- Advanced Settings +- PokroÄilá nastavení +- +- +- General +- Obecné +- +- +- Security +- ZabezpeÄení +- +- +- Encryption Settings +- Nastavení Å¡ifrování +- +- +- Browser Integration +- Napojení webového prohlížeÄe +- +- +- Database Credentials +- PÅ™ihlaÅ¡ovací údaje do databáze +- +- +- +- DatabaseSettingsWidgetBrowser +- +- KeePassXC-Browser settings +- Nastavení pro KeePassXC-Browser +- +- +- Stored keys +- Uložené klíÄe +- +- +- Remove +- Odebrat +- +- +- Delete the selected key? +- Smazat oznaÄený klíÄ? +- +- +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- Opravdu chcete oznaÄený klÃ­Ä smazat? +-Toto může zabránit spojení se zásuvným modulem prohlížeÄe. +- +- +- Key +- KlÃ­Ä +- +- +- Value +- Hodnota +- +- +- Enable Browser Integration to access these settings. +- Pro zpřístupnÄ›ní tÄ›chto nastavení zapnÄ›te Napojení na webový prohlížeÄ. +- +- +- Disconnect all browsers +- Odpojit veÅ¡keré prohlížeÄe +- +- +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- Opravdu chcete odpojit vÅ¡echny prohlížeÄe? +-To může zabránit spojení se zásuvným modulem prohlížeÄe. +- +- +- KeePassXC: No keys found +- KeePassXC: Nebyly nalezeny žádné klíÄe +- +- +- No shared encryption keys found in KeePassXC settings. +- V nastavení KeePassXC nenalezeny žádné sdílené Å¡ifrovací klíÄe. +- +- +- KeePassXC: Removed keys from database +- KeePassXC: KlíÄe odebrány z databáze +- +- +- Successfully removed %n encryption key(s) from KeePassXC settings. +- Z nastavení KeePassXC úspěšnÄ› odebrán %n Å¡ifrovací klíÄ.Z nastavení KeePassXC úspěšnÄ› odebrány %n Å¡ifrovací klíÄe.Z nastavení KeePassXC úspěšnÄ› odebráno %n Å¡ifrovacích klíÄů.Z nastavení KeePassXC úspěšnÄ› odebrány %n Å¡ifrovací klíÄe. +- +- +- Forget all site-specific settings on entries +- Zapomenout v položkách veÅ¡kerá nastavení specifická pro daný web +- +- +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- Opravdu chcete zapomenout veÅ¡kerá nastavení pro dané weby na každé položce? +-OprávnÄ›ní pro přístup k položkám budou odvolána. +- +- +- Removing stored permissions… +- Odebírání uložených oprávnÄ›ní… +- +- +- Abort +- PÅ™eruÅ¡it +- +- +- KeePassXC: Removed permissions +- KeePassXC: Odebraná oprávnÄ›ní +- +- +- Successfully removed permissions from %n entry(s). +- Z %n položky úspěšnÄ› odebrána oprávnÄ›ní.Ze %n položek úspěšnÄ› odebrána oprávnÄ›ní.Z %n položek úspěšnÄ› odebrána oprávnÄ›ní.Ze %n položek úspěšnÄ› odebrána oprávnÄ›ní. +- +- +- KeePassXC: No entry with permissions found! +- KeePassXC: Nebyl nalezen žádný záznam s oprávnÄ›ními! +- +- +- The active database does not contain an entry with permissions. +- PrávÄ› otevÅ™ená databáze neobsahuje záznam s oprávnÄ›ními. +- +- +- Move KeePassHTTP attributes to custom data +- PÅ™esunout KeePassHTTP atributy do uživatelsky urÄených dat +- +- +- Do you really want to move all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- Opravdu chcete pÅ™esunout vÅ¡echna data starého napojení na prohlížeÄ na nejnovÄ›jší standard? +-Toto je nezbytné pro zachování kompatibility se zásuvným modulem pro prohlížeÄ. +- +- +- Stored browser keys +- Uložené klíÄe prohlížeÄe +- +- +- Remove selected key +- Odebrat oznaÄený klÃ­Ä +- +- +- Move KeePassHTTP attributes to KeePassXC-Browser custom data +- PÅ™esunout KeePassHTTP atributy do uživatelsky urÄených dat v KeePassXC-Browser +- +- +- Refresh database root group ID +- Znovu vytvoÅ™it identifikátor koÅ™enové skupiny databáze +- +- +- Created +- VytvoÅ™eno +- +- +- Refresh database ID +- Znovu vytvoÅ™it identifikátor databáze +- +- +- Do you really want refresh the database ID? +-This is only necessary if your database is a copy of another and the browser extension cannot connect. +- Opravdu chcete znovu vytvoÅ™it identifikátor databáze? +-Toto je nutné pouze v případÄ›, že vaÅ¡e databáze je kopií jiné a nefunguje propojení s rozšířením prohlížeÄe. +- +- +- +- DatabaseSettingsWidgetDatabaseKey +- +- Add additional protection... +- PÅ™idat další ochranu… +- +- +- No password set +- Není nastavené žádné heslo +- +- +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- VAROVÃNÃ! Nenastavili jste heslo. Používání databáze bez hesla je silnÄ› nedoporuÄeno! +- +-Opravdu chcete pokraÄovat bez hesla? +- +- +- Continue without password +- PokraÄovat bez hesla +- +- +- No encryption key added +- NepÅ™idán žádný Å¡ifrovací klÃ­Ä +- +- +- You must add at least one encryption key to secure your database! +- Aby byla vaÅ¡e databáze zabezpeÄená, je tÅ™eba pÅ™idat alespoň jeden Å¡ifrovací klíÄ! +- +- +- Unknown error +- Neznámá chyba +- +- +- Failed to change database credentials +- NepodaÅ™ilo se zmÄ›nit pÅ™ihlaÅ¡ovací údaje do databáze +- +- +- +- DatabaseSettingsWidgetEncryption +- +- Encryption Algorithm: +- Å ifrovací algoritmus: +- +- +- AES: 256 Bit (default) +- AES: 256 bit (výchozí) +- +- +- Twofish: 256 Bit +- Twofish: 256 bit +- +- +- Key Derivation Function: +- Funkce pro odvození klíÄe: +- +- +- Transform rounds: +- PoÄet průchodů Å¡ifrovacího algoritmu: +- +- +- Memory Usage: +- Využití pamÄ›ti: +- +- +- Parallelism: +- Souběžné zpracovávání: +- +- +- Decryption Time: +- Doba, kterou rozÅ¡ifrování trvalo: +- +- +- ?? s +- ?? s +- +- +- Change +- ZmÄ›nit +- +- +- Higher values offer more protection, but opening the database will take longer. +- Vyšší hodnota poskytuje lepší ochranu, ale otevírání databáze zabere déle. +- +- +- Database format: +- Formát databáze: +- +- +- This is only important if you need to use your database with other programs. +- Toto je důležité pouze pokud potÅ™ebujete svou databázi používat v ostatních aplikacích. +- +- +- KDBX 4.0 (recommended) +- KDBX 4.0 (doporuÄeno) +- +- +- KDBX 3.1 +- KDBX 3.1 +- +- +- unchanged +- Database decryption time is unchanged +- nezmÄ›nÄ›no +- +- +- Number of rounds too high +- Key transformation rounds +- PoÄet průchodů je příliÅ¡ vysoký +- +- +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or days (or even longer) to open! +- Používáte velmi vysoký poÄet průchodů transformace klíÄe s Argnon2. +- +-Pokud tento poÄet ponecháte, otevírání databáze může trvat hodiny až dny (nebo dokonce déle)! +- +- +- Understood, keep number +- Rozumím, poÄet ponechat +- +- +- Cancel +- ZruÅ¡it +- +- +- Number of rounds too low +- Key transformation rounds +- PoÄet průchodů je příliÅ¡ nízký +- +- +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database may be too easy to crack! +- Používáte velmi nízký poÄet průchodů transformace funkcí pro odvození klíÄe (KDF) a Å¡ifrou AES. +- +-Pokud tento poÄet ponecháte, může být velmi snadné prolomit Å¡ifrování vaší databáze! +- +- +- KDF unchanged +- Funkce pro odvození klíÄe (KDF) nezmÄ›nÄ›na +- +- +- Failed to transform key with new KDF parameters; KDF unchanged. +- NepodaÅ™ilo se transformovat klÃ­Ä s novými parametry funkce pro odvození klíÄe (KDF), ta proto nezmÄ›nÄ›na. +- +- +- MiB +- Abbreviation for Mebibytes (KDF settings) +- MiB MiB MiB MiB +- +- +- thread(s) +- Threads for parallel execution (KDF settings) +- vláknovláknavlákenvlákna +- +- +- Change existing decryption time +- ZmÄ›nit existující Äas rozÅ¡ifrování +- +- +- Decryption time in seconds +- Doba rozÅ¡ifrování (v sekundách) +- +- +- Database format +- Formát databáze +- +- +- Encryption algorithm +- Å ifrovací algoritmus +- +- +- Key derivation function +- Funkce pro odvození klíÄe +- +- +- Transform rounds +- PoÄet průchodů transformace +- +- +- Memory usage +- Využití operaÄní pamÄ›ti +- +- +- Parallelism +- Souběžné zpracovávání +- +- +- ?? ms +- ?? ms +- +- +- ? s +- ? s +- +- +- +- DatabaseSettingsWidgetFdoSecrets +- +- Exposed Entries +- Vystavené záznamy +- +- +- Don't expose this database +- Nevystavovat tuto databázi +- +- +- Expose entries under this group: +- Vystavit položky pod touto skupinou: +- +- +- Enable Secret Service to access these settings. +- Pro přístup k tÄ›mto nastavením zapnÄ›te Secret Service. +- +- +- +- DatabaseSettingsWidgetGeneral +- +- Database Meta Data +- Metadata databáze +- +- +- Database name: +- Název databáze: +- +- +- Database description: +- Popis databáze: +- +- +- Default username: +- Výchozí uživatelské jméno: +- +- +- History Settings +- Nastavení historie +- +- +- Max. history items: +- Omezit poÄet uchovávaných pÅ™edchozích verzí záznamů na: +- +- +- Max. history size: +- Omezit datový objem uchovávaných pÅ™edchozích verzí záznamů na: +- +- +- MiB +- MiB +- +- +- Use recycle bin +- Namísto mazání pÅ™esouvat do KoÅ¡e +- +- +- Additional Database Settings +- Rozšířená nastavení databáze +- +- +- Database name field +- Kolonka název databáze +- +- +- Database description field +- Kolonka popis databáze +- +- +- Default username field +- Kolonka výchozí uživatelské jméno +- +- +- Maximum number of history items per entry +- Nejvyšší umožnÄ›ný poÄet historických záznamů pro jednotlivé záznamy +- +- +- Maximum size of history per entry +- Nejvyšší umožnÄ›ná velikost historických záznamů pro jednotlivé záznamy +- +- +- Delete Recycle Bin +- Smazat KoÅ¡ +- +- +- Do you want to delete the current recycle bin and all its contents? +-This action is not reversible. +- Chcete smazat stávající KoÅ¡ a vÅ¡e co obsahuje? +-Tuto akci nelze vzít zpÄ›t. +- +- +- (old) +- (staré) +- +- +- Enable compression (recommended) +- Zapnout kompresi (doporuÄeno) +- +- +- +- DatabaseSettingsWidgetKeeShare +- +- Sharing +- Sdílení +- +- +- Breadcrumb +- Zobrazení cesty rozhraním +- +- +- Type +- Typ +- +- +- Path +- Popis umístÄ›ní +- +- +- Last Signer +- Naposledy podepsal +- +- +- Certificates +- Certifikáty +- +- +- > +- Breadcrumb separator +- > +- +- +- +- DatabaseSettingsWidgetMetaDataSimple +- +- Database Name: +- Název databáze: +- +- +- Description: +- Popis: +- +- +- Database name field +- Kolonka název databáze +- +- +- Database description field +- Kolonka popis databáze +- +- +- +- DatabaseTabWidget +- +- KeePass 2 Database +- Databáze ve formátu KeePass verze 2 +- +- +- All files +- VeÅ¡keré soubory +- +- +- Open database +- Otevřít databázi +- +- +- CSV file +- CSV soubor +- +- +- Merge database +- SlouÄit databáze +- +- +- Open KeePass 1 database +- Otevřít databázi ve formátu KeePass verze 1 +- +- +- KeePass 1 database +- Databáze ve formátu KeePass verze 1 +- +- +- Export database to CSV file +- Exportovat databázi do CSV souboru +- +- +- Writing the CSV file failed. +- Zápis do CSV souboru se nezdaÅ™il. +- +- +- Database creation error +- Chyba vytváření databáze +- +- +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- VytvoÅ™ená databáze nemá klÃ­Ä nebo funkci pro jeho odvození. Její uložení proto odmítnuto. +-Toto je nepochybnÄ› chyba, nahlaste ji prosím vývojářům. +- +- +- Select CSV file +- Vyberte CSV soubor +- +- +- New Database +- Nová databáze +- +- +- %1 [New Database] +- Database tab name modifier +- %1 [nová databáze] +- +- +- %1 [Locked] +- Database tab name modifier +- %1 [uzamÄeno] +- +- +- %1 [Read-only] +- Database tab name modifier +- %1 [pouze pro Ätení] +- +- +- Failed to open %1. It either does not exist or is not accessible. +- %1 se nepodaÅ™ilo otevřít. BuÄ neexistuje, nebo není přístupné. +- +- +- Export database to HTML file +- Exportovat databázi do HTML souboru +- +- +- HTML file +- HTML soubor +- +- +- Writing the HTML file failed. +- Zápis do HTML souboru se nezdaÅ™il. +- +- +- Export Confirmation +- Potvrzení exportu +- +- +- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? +- Chystáte se exportovat svou databázi do neÅ¡ifrovaného souboru. To zanechá vaÅ¡e hesla a citlivé informace zranitelné. Opravdu to chcete? +- +- +- Open OPVault +- Otevřít OPVault +- +- +- +- DatabaseWidget +- +- Searching... +- Hledání… +- +- +- Do you really want to delete the entry "%1" for good? +- Opravdu chcete nenávratnÄ› smazat záznam „%1“? +- +- +- Do you really want to move entry "%1" to the recycle bin? +- Opravdu pÅ™esunout záznam „%1“ do KoÅ¡e? +- +- +- Do you really want to move %n entry(s) to the recycle bin? +- Opravdu pÅ™esunout %n záznam do KoÅ¡e?Opravdu pÅ™esunout %n záznamy do KoÅ¡e?Opravdu pÅ™esunout %n záznamů do KoÅ¡e?Opravdu pÅ™esunout %n záznamy do KoÅ¡e? +- +- +- Execute command? +- Spustit příkaz? +- +- +- Do you really want to execute the following command?<br><br>%1<br> +- Opravdu spustit následující příkaz?<br><br>%1<br> +- +- +- Remember my choice +- Zapamatovat si pro příštÄ› +- +- +- Do you really want to delete the group "%1" for good? +- Opravdu chcete nenávratnÄ› smazat skupinu „%1“? +- +- +- No current database. +- Žádná nedávná databáze. +- +- +- No source database, nothing to do. +- Není zvolena zdrojová databáze, není co dÄ›lat. +- +- +- Search Results (%1) +- Výsledky vyhledávání (%1) +- +- +- No Results +- Nic nenalezeno +- +- +- File has changed +- Soubor byl zmÄ›nÄ›n +- +- +- The database file has changed. Do you want to load the changes? +- Soubor s databází byl zmÄ›nÄ›n. NaÄíst zmÄ›ny? +- +- +- Merge Request +- Požadavek na slouÄení +- +- +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- Databázový soubor byl zmÄ›nÄ›n a máte neuložené zmÄ›ny. +-PÅ™ejete si je zahrnout? +- +- +- Empty recycle bin? +- Vysypat KoÅ¡? +- +- +- Are you sure you want to permanently delete everything from your recycle bin? +- Opravdu chcete nevratnÄ› smazat vÅ¡echno z KoÅ¡e? +- +- +- Do you really want to delete %n entry(s) for good? +- Opravdu chcete %n položku nevratnÄ› smazat?Opravdu chcete %n položky nevratnÄ› smazat?Opravdu chcete %n položek nevratnÄ› smazat?Opravdu chcete %n položky nevratnÄ› smazat? +- +- +- Delete entry(s)? +- Smazat položku?Smazat položky?Smazat položky?Smazat položky? +- +- +- Move entry(s) to recycle bin? +- PÅ™esunout položku do KoÅ¡e?PÅ™esunout položky do KoÅ¡e?PÅ™esunout položky do KoÅ¡e?PÅ™esunout položky do KoÅ¡e? +- +- +- Lock Database? +- Uzamknout databázi? +- +- +- You are editing an entry. Discard changes and lock anyway? +- Upravujete položku. PÅ™esto zavřít a zahodit tak zmÄ›ny? +- +- +- "%1" was modified. +-Save changes? +- „%1“ bylo zmÄ›nÄ›no. +-Uložit zmÄ›ny? +- +- +- Database was modified. +-Save changes? +- Databáze byla zmÄ›nÄ›na. +-Uložit zmÄ›ny? +- +- +- Save changes? +- Uložit zmÄ›ny? +- +- +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- NepodaÅ™ilo se otevřít nový soubor s databází bÄ›hem pokusu o její opÄ›tovné naÄtení. +-Chyba: %1 +- +- +- Disable safe saves? +- Vypnout bezpeÄná ukládání? +- +- +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- I pÅ™es nÄ›kolikátý pokus se KeePassXC nepodaÅ™ilo databázi uložit. To je nejspíš způsobeno službou synchronizace souborů, která drží zámek na ukládaném souboru. +-Vypnout bezpeÄné ukládání a zkusit to znovu? +- +- +- Passwords +- Hesla +- +- +- Save database as +- Uložit databázi jako +- +- +- KeePass 2 Database +- Databáze ve formátu KeePass 2 +- +- +- Replace references to entry? +- Nahradit odkazy na položku? +- +- +- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? +- Položka „%1“ má %2 odkaz. Chcete odkazy pÅ™epsat hodnotami, pÅ™eskoÄit ji, nebo smazat i tak?Položka „%1“ má %2 odkazy. Chcete odkazy pÅ™epsat hodnotami, pÅ™eskoÄit ji, nebo smazat i tak?Položka „%1“ má %2 odkazů. Chcete odkazy pÅ™epsat hodnotami, pÅ™eskoÄit ji, nebo smazat i tak?Položka „%1“ má %2 odkazy. Chcete odkazy pÅ™epsat hodnotami, pÅ™eskoÄit ji, nebo smazat i tak? +- +- +- Delete group +- Smazat skupinu +- +- +- Move group to recycle bin? +- PÅ™esunout skupinu do KoÅ¡e? +- +- +- Do you really want to move the group "%1" to the recycle bin? +- Opravdu chcete skupinu „%1“ pÅ™esunout do koÅ¡e? +- +- +- Successfully merged the database files. +- Databázové soubory úspěšnÄ› slouÄeny. +- +- +- Database was not modified by merge operation. +- Databáze nebyla operací sluÄování upravena. +- +- +- Shared group... +- Sdílená skupina… +- +- +- Writing the database failed: %1 +- Zápis do databáze se nezdaÅ™il: %1 +- +- +- This database is opened in read-only mode. Autosave is disabled. +- Tato databáze je otevÅ™ena v režimu pouze pro Ätení. Automatické ukládání je vypnuto. +- +- +- Save database backup +- Uložit zálohu databáze +- +- +- Could not find database file: %1 +- Nedaří se nalézt soubor s databází: %1 +- +- +- +- EditEntryWidget +- +- Entry +- Záznam +- +- +- Advanced +- PokroÄilé +- +- +- Icon +- Ikona +- +- +- Auto-Type +- Automatické vyplňování +- +- +- Properties +- Vlastnosti +- +- +- History +- Historie +- +- +- SSH Agent +- SSH agent +- +- +- n/a +- neaplikovatelné +- +- +- (encrypted) +- (Å¡ifrováno) +- +- +- Select private key +- Vybrat soukromou Äást klíÄe +- +- +- Entry history +- Historie záznamu +- +- +- Add entry +- PÅ™idat záznam +- +- +- Edit entry +- Upravit záznam +- +- +- New attribute +- Nový atribut +- +- +- Are you sure you want to remove this attribute? +- Opravdu chcete odebrat tento atribut? +- +- +- Tomorrow +- Zítra +- +- +- %n week(s) +- %n týden%n týdny%n týdnů%n týdny +- +- +- %n month(s) +- %n mÄ›síc%n mÄ›síce%n mÄ›síců%n mÄ›síce +- +- +- Entry updated successfully. +- Položka úspěšnÄ› aktualizována. +- +- +- New attribute %1 +- Nový atribut %1 +- +- +- %n year(s) +- %n rok%n roky%n let%n roky +- +- +- Confirm Removal +- Potvrdit odebrání +- +- +- Browser Integration +- Napojení na webový prohlížeÄ +- +- +- <empty URL> +- <prázdná URL> +- +- +- Are you sure you want to remove this URL? +- Opravdu chcete tuto URL odebrat? +- +- +- Reveal +- Odhalit +- +- +- Hide +- Skrýt +- +- +- Unsaved Changes +- Neuložené zmÄ›ny +- +- +- Would you like to save changes to this entry? +- Chcete uložit zmÄ›ny, provedené v této položce? +- +- +- [PROTECTED] Press Reveal to view or edit +- [CHRÃNÄšNO] Pro zobrazení nebo úpravu kliknÄ›te na odhalit +- +- +- Invalid Entry +- Neplatný údaj +- +- +- An external merge operation has invalidated this entry. +-Unfortunately, any changes made have been lost. +- Externí operace slouÄení tuto položku zneplatnila. +-VÅ¡echny provedené zmÄ›ny byly bohužel ztraceny. +- +- +- +- EditEntryWidgetAdvanced +- +- Additional attributes +- Další atributy +- +- +- Add +- PÅ™idat +- +- +- Remove +- Odebrat +- +- +- Edit Name +- Upravit název +- +- +- Protect +- Chránit +- +- +- Reveal +- Odhalit +- +- +- Attachments +- Přílohy +- +- +- Foreground Color: +- Barva popÅ™edí: +- +- +- Background Color: +- Barva pozadí: +- +- +- Attribute selection +- VýbÄ›r atributu +- +- +- Attribute value +- Hodnota atributu +- +- +- Add a new attribute +- PÅ™idat nový atribut +- +- +- Remove selected attribute +- Odebrat oznaÄený atribut +- +- +- Edit attribute name +- Upravit název atributu +- +- +- Toggle attribute protection +- Vyp/zap. ochranu atributu +- +- +- Show a protected attribute +- Zobrazit chránÄ›ný atribut +- +- +- Foreground color selection +- VýbÄ›r barvy popÅ™edí +- +- +- Background color selection +- VýbÄ›r barvy pozadí +- +- +- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> +- <html><head/><body><p>Pokud zaÅ¡krtnuto, položka se neobjeví v hlášeních jako Kontrola zdraví a HIBP, i když neodpovídá požadavků mna kvalitu (napÅ™. nahodilost hesla nebo opÄ›tovné použití). Toto můžete zaÅ¡krtnout pokud heslo není pod vaší kontrolu (napÅ™. je vyžadováno, že se musí jednat o PIN kód dlouhý ÄtyÅ™i Äíslice), aby tím nebyl výkaz zaneřádÄ›ný.</p></body></html> +- +- +- Exclude from database reports +- Vynechat z pÅ™ehledů o databázi +- +- +- +- EditEntryWidgetAutoType +- +- Enable Auto-Type for this entry +- Zapnout automatické vyplňování tohoto záznamu +- +- +- Window Associations +- PÅ™iÅ™azení oken +- +- +- + +- + +- +- +- - +- - +- +- +- Window title: +- Titulek okna: +- +- +- Use a specific sequence for this association: +- Pro toto pÅ™iÅ™azení použít konkrétní posloupnost: +- +- +- Custom Auto-Type sequence +- Uživatelsky urÄená posloupnost automatického vyplňování +- +- +- Open Auto-Type help webpage +- Otevřít webovou stránku s nápovÄ›dou k automatickému vyplňování +- +- +- Existing window associations +- Existující pÅ™iÅ™azení k oknům +- +- +- Add new window association +- PÅ™idat nové pÅ™iÅ™azení k oknu +- +- +- Remove selected window association +- Odebrat oznaÄené pÅ™iÅ™azení k oknu +- +- +- You can use an asterisk (*) to match everything +- Pro shodu s Äímkoli je možné použít hvÄ›zdiÄku (*) +- +- +- Set the window association title +- Nastavit název okna, podle kterého pÅ™iÅ™adit +- +- +- You can use an asterisk to match everything +- Pro shodu s Äímkoli je možné použít hvÄ›zdiÄku +- +- +- Custom Auto-Type sequence for this window +- Uživatelsky urÄená posloupnost automatického vyplňování pro toto okno +- +- +- Inherit default Auto-Type sequence from the group +- PÅ™evzít výchozí posloupnost automatického vyplňování od skupiny +- +- +- Use custom Auto-Type sequence: +- Použít vlastní posloupnost automatického vyplňování: +- +- +- +- EditEntryWidgetBrowser +- +- These settings affect to the entry's behaviour with the browser extension. +- Tato nastavení ovlivní chování záznamu pro rozšíření pro webový prohlížeÄ. +- +- +- General +- Obecné +- +- +- Skip Auto-Submit for this entry +- PÅ™eskoÄit automatické odeslání pro tento záznam +- +- +- Hide this entry from the browser extension +- Skrýt tento záznam pÅ™ed rozšířením pro prohlížeÄ +- +- +- Additional URL's +- Další URL adresy +- +- +- Add +- PÅ™idat +- +- +- Remove +- Odebrat +- +- +- Edit +- Upravit +- +- +- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. +- Toto nastavení posílat do prohlížeÄe pouze pro dialogy HTTP Auth. Pokud je zapnuto, běžné pÅ™ihlaÅ¡ovací formuláře nezobrazí tuto položku pro výbÄ›r. +- +- +- Use this entry only with HTTP Basic Auth +- Tuto položku použít pouze ve spojení se základním HTTP ověřováním se +- +- +- +- EditEntryWidgetHistory +- +- Show +- Zobrazit +- +- +- Restore +- Obnovit +- +- +- Delete +- Smazat +- +- +- Delete all +- Smazat vÅ¡e +- +- +- Entry history selection +- VýbÄ›r historie záznamu +- +- +- Show entry at selected history state +- Zobrazit záznam ve vybraném stavu v historii +- +- +- Restore entry to selected history state +- Obnovit záznam do podoby oznaÄeného stavu v historii +- +- +- Delete selected history state +- Smazat oznaÄený stav v historii +- +- +- Delete all history +- Smazat veÅ¡kerou historii +- +- +- +- EditEntryWidgetMain +- +- URL: +- URL adresa: +- +- +- Password: +- Heslo: +- +- +- Title: +- Titulek: +- +- +- Presets +- PÅ™edpÅ™ipravené +- +- +- Toggle the checkbox to reveal the notes section. +- Od/zaÅ¡krtnutím této kolonky odkryjete sekci poznámek. +- +- +- Username: +- Uživatelské jméno: +- +- +- Url field +- Kolonka pro URL +- +- +- Download favicon for URL +- Stáhnout ikonu webu pro URL +- +- +- Password field +- Kolonka pro heslo +- +- +- Toggle notes visible +- Zobraz./nezobrazovat poznámky +- +- +- Expiration field +- Kolonka data a Äasu konce platnosti +- +- +- Expiration Presets +- PÅ™edpÅ™ipravené konce platnosti +- +- +- Expiration presets +- PÅ™edpÅ™ipravené konce platnosti +- +- +- Notes field +- Kolonka pro poznámky +- +- +- Title field +- Kolonka pro název +- +- +- Username field +- Kolonka pro uživatelské jméno +- +- +- Toggle expiration +- Vyp/zap. skonÄení platnosti +- +- +- Notes: +- Poznámky: +- +- +- https://example.com +- https://example.com +- +- +- Expires: +- Platnost skonÄí: +- +- +- Edit Entry +- Upravit záznam +- +- +- +- EditEntryWidgetSSHAgent +- +- Form +- Formulář +- +- +- Remove key from agent after +- Odebrat klÃ­Ä z klienta po uplynutí +- +- +- seconds +- sekund +- +- +- Fingerprint +- Otisk +- +- +- Remove key from agent when database is closed/locked +- Odebrat klÃ­Ä z klienta pÅ™i zavÅ™ení/zamÄení databáze +- +- +- Public key +- VeÅ™ejná Äást klíÄe +- +- +- Add key to agent when database is opened/unlocked +- PÅ™idat klÃ­Ä do agenta pÅ™i otevÅ™ení/odemÄení databáze +- +- +- Comment +- Komentář +- +- +- Decrypt +- RozÅ¡ifrovat +- +- +- n/a +- neaplikovatelné +- +- +- Copy to clipboard +- Zkopírovat do schránky +- +- +- Private key +- Soukromá Äást klíÄe +- +- +- External file +- VnÄ›jší soubor +- +- +- Browse... +- Button for opening file dialog +- Procházet… +- +- +- Attachment +- Příloha +- +- +- Add to agent +- PÅ™idat do agenta +- +- +- Remove from agent +- Odebrat z agenta +- +- +- Require user confirmation when this key is used +- PÅ™i použití tohoto klíÄe vyžadovat potvrzení od uživatele +- +- +- Remove key from agent after specified seconds +- Odebrat klÃ­Ä z agenta po uplynutí zadaného poÄtu sekund +- +- +- Browser for key file +- Nalistovat soubor s klíÄem +- +- +- External key file +- Soubor s externím klíÄem +- +- +- Select attachment file +- Vybrat soubor, který pÅ™iložit +- +- +- +- EditGroupWidget +- +- Group +- Skupina +- +- +- Icon +- Ikona +- +- +- Properties +- Vlastnosti +- +- +- Add group +- PÅ™idat skupinu +- +- +- Edit group +- Upravit skupinu +- +- +- Enable +- Zapnout +- +- +- Disable +- Vypnout +- +- +- Inherit from parent group (%1) +- PÅ™evzít od nadÅ™azené skupiny (%1) +- +- +- Entry has unsaved changes +- Položka má neuložené zmÄ›ny +- +- +- +- EditGroupWidgetKeeShare +- +- Type: +- Typ: +- +- +- Path: +- Popis umístÄ›ní: +- +- +- Password: +- Heslo: +- +- +- Inactive +- Neaktivní +- +- +- KeeShare unsigned container +- Nepodepsaný KeeShare kontejner +- +- +- KeeShare signed container +- Podepsaný KeeShare kontejner +- +- +- Select import source +- Vybrat zdroj pro import +- +- +- Select export target +- Vybrat cíl importu +- +- +- Select import/export file +- Vybrat importní/exportní soubor +- +- +- Clear +- VyÄistit +- +- +- Import +- Importovat +- +- +- Export +- Export +- +- +- Synchronize +- Synchronizovat +- +- +- Your KeePassXC version does not support sharing this container type. +-Supported extensions are: %1. +- Vámi používaná verze KeePassXC nepodporuje sdílení tohoto typu kontejneru. +-Podporovaná rozšíření jsou: %1. +- +- +- %1 is already being exported by this database. +- %1 už je exportováno touto databází. +- +- +- %1 is already being imported by this database. +- %1 už je importováno touto databází. +- +- +- %1 is being imported and exported by different groups in this database. +- %1 je importováno a exportováno jinými skupinami v této databázi. +- +- +- KeeShare is currently disabled. You can enable import/export in the application settings. +- KeeShare is a proper noun +- KeeShare je nyní vypnuté. Import/export je možné zapnout v nastavení aplikace. +- +- +- Database export is currently disabled by application settings. +- Exportování databáze je nyní vypnuto v nastavení aplikace. +- +- +- Database import is currently disabled by application settings. +- Import do databáze je nyní vypnutý v nastavení aplikace. +- +- +- Sharing mode field +- Kolonka pro režim sdílení +- +- +- Path to share file field +- Kolonka pro popis umístÄ›ní sdíleného souboru +- +- +- Password field +- Kolonka pro heslo +- +- +- Clear fields +- VyÄistit kolonky +- +- +- Browse for share file +- Nalistovat sdílený soubor +- +- +- Browse... +- Procházet… +- +- +- +- EditGroupWidgetMain +- +- Name field +- Kolonka pro název +- +- +- Notes field +- Kolonka pro poznámky +- +- +- Toggle expiration +- Vyp/zap. skonÄení platnosti +- +- +- Auto-Type toggle for this and sub groups +- Vyp/zap. automatické vyplňování pro tuto a podskupiny +- +- +- Expiration field +- Kolonka data a Äasu konce platnosti +- +- +- Search toggle for this and sub groups +- Vyp/zap. pro tuto a podskupiny +- +- +- Default auto-type sequence field +- Výchozí kolonka pro posloupnost automatického vyplňování +- +- +- Expires: +- Platnost skonÄí: +- +- +- Use default Auto-Type sequence of parent group +- PÅ™evzít výchozí poÅ™adí automatického vyplňování od nadÅ™azené skupiny +- +- +- Auto-Type: +- Automatické vyplňování: +- +- +- Search: +- Hledat: +- +- +- Notes: +- Poznámky: +- +- +- Name: +- Název: +- +- +- Set default Auto-Type sequence +- Nastavit výchozí poÅ™adí automatického vyplňování +- +- +- Edit Group +- Upravit skupinu +- +- +- +- EditWidgetIcons +- +- Add custom icon +- PÅ™idat uživatelsky urÄenou ikonu +- +- +- Delete custom icon +- Smazat uživatelsky urÄenou ikonu +- +- +- Download favicon +- Stáhnout ikonu webu (favicon) +- +- +- Unable to fetch favicon. +- Ikonu webu (favicon) se nedaří stáhnout. +- +- +- Images +- Obrázky +- +- +- All files +- VeÅ¡keré soubory +- +- +- Confirm Delete +- Potvrdit smazání +- +- +- Select Image(s) +- Vyberte obrázky +- +- +- Successfully loaded %1 of %n icon(s) +- ÚspěšnÄ› naÄtena %1 z %n ikonÚspěšnÄ› naÄteny %1 z %n ikonÚspěšnÄ› naÄteno %1 z %n ikonÚspěšnÄ› naÄteny %1 z %n ikon +- +- +- No icons were loaded +- Nebyly naÄteny žádné ikony +- +- +- %n icon(s) already exist in the database +- %n ikona už v databázi existuje%n ikony už v databázi existují%n ikon už v databázi existuje%n ikony už v databázi existují +- +- +- The following icon(s) failed: +- Následující ikona se nezdaÅ™ila:Následující ikony se nezdaÅ™ily:Následující ikony se nezdaÅ™ily:Následující ikony se nezdaÅ™ily: +- +- +- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? +- Tato ikona je používána %n záznamem a bude nahrazena výchozí ikonou. Opravdu ji chcete smazat?Tato ikona je používána %n záznamy a bude nahrazena výchozí ikonou. Opravdu ji chcete smazat?Tato ikona je používána %n záznamy a bude nahrazena výchozí ikonou. Opravdu ji chcete smazat?Tato ikona je používána %n záznamy a bude nahrazena výchozí ikonou. Opravdu ji chcete smazat? +- +- +- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security +- Používání služby DuckDuckGo pro stahování ikon webových stránek je možné zapnout v Nástroje → Nastavení → ZabezpeÄení +- +- +- Download favicon for URL +- Stáhnout ikonu webu pro URL +- +- +- Apply selected icon to subgroups and entries +- Uplatnit oznaÄenou ikonu na podskupiny a záznamy +- +- +- Also apply to child groups +- Uplatnit také na podskupiny +- +- +- Also apply to child entries +- Uplatnit také na obsažené záznamy +- +- +- Also apply to all children +- Uplatnit také na vÅ¡e obsažené +- +- +- Existing icon selected. +- Vybrána existující ikona. +- +- +- Use default icon +- Použít výchozí ikonu +- +- +- Use custom icon +- Použít uživatelsky urÄenou ikonu +- +- +- Apply icon to... +- Použít ikonu na… +- +- +- Apply to this group only +- Použít pouze na tuto skupinu +- +- +- +- EditWidgetProperties +- +- Created: +- Okamžik vytvoÅ™ení: +- +- +- Modified: +- Okamžik nejnovÄ›jší úpravy: +- +- +- Accessed: +- Okamžik nejnovÄ›jšího přístupu: +- +- +- Uuid: +- UniverzálnÄ› neopakující se identifikátor: +- +- +- Plugin Data +- Data zásuvného modulu +- +- +- Remove +- Odebrat +- +- +- Delete plugin data? +- Smazat data zásuvného modulu? +- +- +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- Opravdu chcete smazat oznaÄená data zásuvného modulu? +-DotÄený zásuvný modul to může rozbít. +- +- +- Key +- KlÃ­Ä +- +- +- Value +- Hodnota +- +- +- Datetime created +- Datum a Äas vytvoÅ™ení +- +- +- Datetime modified +- Datum a Äas zmÄ›ny +- +- +- Datetime accessed +- Datum a Äas přístupu +- +- +- Unique ID +- Neopakující se identifikátor +- +- +- Plugin data +- Data zásuvného modulu +- +- +- Remove selected plugin data +- Odebrat oznaÄená data zásuvného modulu +- +- +- +- Entry +- +- %1 - Clone +- %1 – klon +- +- +- +- EntryAttachmentsModel +- +- Name +- Název +- +- +- Size +- Velikost +- +- +- +- EntryAttachmentsWidget +- +- Form +- Formulář +- +- +- Add +- PÅ™idat +- +- +- Remove +- Odebrat +- +- +- Open +- Otevřít +- +- +- Save +- Uložit +- +- +- Select files +- Vybrat soubory +- +- +- Are you sure you want to remove %n attachment(s)? +- Opravdu chcete odebrat %n přílohu?Opravdu chcete odebrat %n přílohy?Opravdu chcete odebrat %n příloh?Opravdu chcete odebrat %n přílohy? +- +- +- Save attachments +- Uložit přílohy +- +- +- Unable to create directory: +-%1 +- Nedaří se vytvoÅ™it složku: +-%1 +- +- +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- Opravdu chcete přílohou pÅ™epsat stávající soubor „%1“? +- +- +- Confirm overwrite +- Potvrdit pÅ™epsání +- +- +- Unable to save attachments: +-%1 +- Nedaří se uložit přílohy: +-%1 +- +- +- Unable to open attachment: +-%1 +- Nedaří se otevřít přílohu: +-%1 +- +- +- Unable to open attachments: +-%1 +- Nedaří se otevřít přílohy: +-%1 +- +- +- Confirm remove +- Potvrdit odebrání +- +- +- Unable to open file(s): +-%1 +- Nedaří se otevřít soubor: +-%1Nedaří se otevřít soubory: +-%1Nedaří se otevřít soubory: +-%1Nedaří se otevřít soubory: +-%1 +- +- +- Attachments +- Přílohy +- +- +- Add new attachment +- PÅ™idat novou přílohu +- +- +- Remove selected attachment +- Odebrat oznaÄenou přílohu +- +- +- Open selected attachment +- Otevřít oznaÄenou přílohu +- +- +- Save selected attachment to disk +- Uložit oznaÄenou přílohu na disk +- +- +- %1 is a big file (%2 MB). +-Your database may get very large and reduce performance. +- +-Are you sure to add this file? +- %1 je velký soubor (%2 MB). +-VaÅ¡e databáze se tím může velmi zvÄ›tÅ¡it a sníží se tím výkon. +- +-Opravdu chcete tento soubor pÅ™idat? +- +- +- Confirm Attachment +- Potvrdit přílohu +- +- +- +- EntryAttributesModel +- +- Name +- Název +- +- +- +- EntryHistoryModel +- +- Last modified +- Naposledy zmÄ›nÄ›no +- +- +- Title +- Titulek +- +- +- Username +- Uživatelské jméno +- +- +- URL +- URL adresa +- +- +- +- EntryModel +- +- Ref: +- Reference abbreviation +- Ref: +- +- +- Group +- Skupina +- +- +- Title +- Titulek +- +- +- Username +- Uživatelské jméno +- +- +- URL +- URL adresa +- +- +- Never +- Nikdy +- +- +- Password +- Heslo +- +- +- Notes +- Poznámky +- +- +- Expires +- Platnost skonÄí +- +- +- Created +- VytvoÅ™eno +- +- +- Modified +- Okamžik nejnovÄ›jší úpravy: +- +- +- Accessed +- Okamžik nejnovÄ›jšího přístupu: +- +- +- Attachments +- Přílohy +- +- +- Size +- Velikost +- +- +- Group name +- Název skupiny +- +- +- Entry title +- Nadpis položky +- +- +- Entry notes +- Poznámky k položce +- +- +- Entry expires at +- Platnost položky konÄí v +- +- +- Creation date +- Datum vytvoÅ™ení +- +- +- Last modification date +- Datum poslední zmÄ›ny +- +- +- Last access date +- Datum posledního přístupu +- +- +- Attached files +- PÅ™ipojené soubory +- +- +- Entry size +- Velikost položky +- +- +- Has attachments +- Má přílohy +- +- +- Has TOTP one-time password +- Má jednorázové TOTP heslo +- +- +- +- EntryPreviewWidget +- +- Close +- Zavřít +- +- +- General +- Obecné +- +- +- Username +- Uživatelské jméno +- +- +- Password +- Heslo +- +- +- Expiration +- SkonÄení platnosti +- +- +- URL +- URL adresa +- +- +- Attributes +- Atributy +- +- +- Attachments +- Přílohy +- +- +- Notes +- Poznámky +- +- +- Autotype +- Automatické vyplnÄ›ní +- +- +- Window +- Okno +- +- +- Sequence +- Posloupnost +- +- +- Searching +- Hledání +- +- +- Search +- Hledat +- +- +- Clear +- VyÄistit +- +- +- Never +- Nikdy +- +- +- [PROTECTED] +- [CHRÃNÄšNO] +- +- +- Enabled +- Zapnuto +- +- +- Disabled +- Vypnuto +- +- +- Share +- Sdílet +- +- +- Display current TOTP value +- Zobrazit stávající hodnotu TOTP +- +- +- Advanced +- PokroÄilé +- +- +- Default Sequence +- Výchozí poÅ™adí +- +- +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- attributes line +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- +- +- +- EntryURLModel +- +- Invalid URL +- Neplatné URL +- +- +- +- EntryView +- +- Fit to window +- PÅ™izpůsobit oknu +- +- +- Fit to contents +- PÅ™izpůsobit obsahu +- +- +- Reset to defaults +- Vrátit na výchozí +- +- +- Has attachments +- Entry attachment icon toggle +- Má přílohy +- +- +- Has TOTP +- Entry TOTP icon toggle +- Má TOTP heslo +- +- +- +- FdoSecrets::Item +- +- Entry "%1" from database "%2" was used by %3 +- Záznam „%1“ z databáze „%2“ byl použit %3 +- +- +- +- FdoSecrets::Service +- +- Failed to register DBus service at %1.<br/> +- NepodaÅ™ilo se zaregistrovat službu DBus na %1.<br/> +- +- +- %n Entry(s) was used by %1 +- %1 is the name of an application +- %n záznam byl použit %1%n záznamy byly použity %1%n záznamů bylo použito %1%n záznamy byly použity %1 +- +- +- +- FdoSecrets::SettingsDatabaseModel +- +- File Name +- Soubor +- +- +- Group +- Skupina +- +- +- Manage +- Spravovat +- +- +- Unlock to show +- OdemknÄ›te pro zobrazení +- +- +- None +- Žádné +- +- +- +- FdoSecrets::SettingsSessionModel +- +- Application +- Aplikace +- +- +- Manage +- Spravovat +- +- +- +- FdoSecretsPlugin +- +- <b>Fdo Secret Service:</b> %1 +- <b>Fdo tajná služba:</b> %1 +- +- +- Unknown +- Unknown PID +- Neznámý +- +- +- Unknown +- Unknown executable path +- Neznámý +- +- +- <i>PID: %1, Executable: %2</i> +- <i>PID: 1234, Executable: /path/to/exe</i> +- <i>Identif. procesu: %1, spustitelný soubor: %2</i> +- +- +- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. +- Je spuÅ¡tÄ›ná jiná služba pro tajemství (%1).<br/>Prosím zastavte/odeberte ji a až poté znovu zapnÄ›te napojení na službu pro tajemství. +- +- +- +- Group +- +- [empty] +- group has no children +- [prázdné] +- +- +- +- HibpDownloader +- +- Online password validation failed +- Ověření hesla online se nezdaÅ™ilo +- +- +- +- IconDownloaderDialog +- +- Download Favicons +- Stáhnout ikony webů +- +- +- Cancel +- ZruÅ¡it +- +- +- Having trouble downloading icons? +-You can enable the DuckDuckGo website icon service in the security section of the application settings. +- Máte problémy se stahováním ikon? +-Můžete zapnout službu pro stahování ikon z DuckDuckGo v sekci zabezpeÄení v nastavení aplikace. +- +- +- Close +- Zavřít +- +- +- URL +- URL adresa +- +- +- Status +- Stav +- +- +- Please wait, processing entry list... +- ÄŒekejte, zpracovává se seznam položek… +- +- +- Downloading... +- Stahování… +- +- +- Ok +- Ok +- +- +- Already Exists +- Už existuje +- +- +- Download Failed +- Stažení se nezdaÅ™ilo +- +- +- Downloading favicons (%1/%2)... +- Stahování ikon webů (%1/%2)… +- +- +- +- KMessageWidget +- +- &Close +- &Zavřít +- +- +- Close message +- Uzavřít správu +- +- +- +- Kdbx3Reader +- +- missing database headers +- chybí databázové hlaviÄky +- +- +- Header doesn't match hash +- HlaviÄka neodpovídá otisku +- +- +- Invalid header id size +- Neplatná velikost identifikátoru hlaviÄky +- +- +- Invalid header field length +- Neplatná délka kolonky hlaviÄky +- +- +- Invalid header data length +- Neplatné délka dat hlaviÄky +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Byly zadány neplatné pÅ™ihlaÅ¡ovací údaje, zkuste to prosím znovu. +-Pokud se toto opakuje, pak je možné, že je váš soubor s databází poÅ¡kozený. +- +- +- Unable to calculate database key +- Nedaří se vypoÄítat klÃ­Ä databáze +- +- +- Unable to issue challenge-response: %1 +- Nedaří se vyvolat výzva-odpovÄ›Ä: %1 +- +- +- +- Kdbx3Writer +- +- Unable to issue challenge-response: %1 +- Nedaří se vyvolat výzva-odpovÄ›Ä: %1 +- +- +- Unable to calculate database key +- Nedaří se vypoÄítat klÃ­Ä databáze +- +- +- +- Kdbx4Reader +- +- missing database headers +- chybí databázové hlaviÄky +- +- +- Invalid header checksum size +- Neplatná velikost kontrolního souÄtu hlaviÄky +- +- +- Header SHA256 mismatch +- Neshoda SHA256 kontrolního souÄtu hlaviÄky +- +- +- Unknown cipher +- Neznámá Å¡ifra +- +- +- Invalid header id size +- Neplatná velikost identifikátoru hlaviÄky +- +- +- Invalid header field length +- Neplatná délka kolonky hlaviÄky +- +- +- Invalid header data length +- Neplatné délka dat hlaviÄky +- +- +- Failed to open buffer for KDF parameters in header +- NepodaÅ™ilo se otevřít vyrovnávací paměť pro parametry funkce pro odvození klíÄe (KDF), uložené v hlaviÄce +- +- +- Unsupported key derivation function (KDF) or invalid parameters +- Nepodporovaná funkce pro odvození klíÄe (KDF) nebo neplatné parametry +- +- +- Legacy header fields found in KDBX4 file. +- V KDBX4 souboru nalezeny kolonky staré hlaviÄky. +- +- +- Invalid inner header id size +- Neplatná velikost identifikátoru vnitÅ™ní hlaviÄky +- +- +- Invalid inner header field length +- Neplatná délka kolonky vnitÅ™ní hlaviÄky +- +- +- Invalid inner header binary size +- Neplatná velikost binárky vnitÅ™ní hlavniÄky +- +- +- Unsupported KeePass variant map version. +- Translation: variant map = data structure for storing meta data +- Nepodporovaná verze mapy varianty KeePass. +- +- +- Invalid variant map entry name length +- Translation: variant map = data structure for storing meta data +- Neplatná délka názvu položky mapy varianty +- +- +- Invalid variant map entry name data +- Translation: variant map = data structure for storing meta data +- Neplatná data názvu položky mapy varianty +- +- +- Invalid variant map entry value length +- Translation: variant map = data structure for storing meta data +- Neplatná délka hodnoty položky mapy varianty +- +- +- Invalid variant map entry value data +- Translation comment: variant map = data structure for storing meta data +- Neplatná data hodnoty položky mapy varianty +- +- +- Invalid variant map Bool entry value length +- Translation: variant map = data structure for storing meta data +- Neplatná délka hodnoty položky typu boolean mapy varianty +- +- +- Invalid variant map Int32 entry value length +- Translation: variant map = data structure for storing meta data +- Neplatná délka 32 bitové celoÄíselné hodnoty položky varianty +- +- +- Invalid variant map UInt32 entry value length +- Translation: variant map = data structure for storing meta data +- Neplatná délka 32 bitové kladné celoÄíselné hodnoty položky varianty +- +- +- Invalid variant map Int64 entry value length +- Translation: variant map = data structure for storing meta data +- Neplatná délka 64 bitové celoÄíselné hodnoty položky varianty +- +- +- Invalid variant map UInt64 entry value length +- Translation: variant map = data structure for storing meta data +- Neplatná délka 64 bitové kladné celoÄíselné hodnoty položky varianty +- +- +- Invalid variant map entry type +- Translation: variant map = data structure for storing meta data +- Neplatný typ položky mapy varianty +- +- +- Invalid variant map field type size +- Translation: variant map = data structure for storing meta data +- Neplatná velikost typu kolonky mapy varianty +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Byly zadány neplatné pÅ™ihlaÅ¡ovací údaje, zkuste to prosím znovu. +-Pokud se toto opakuje, pak je možné, že je váš soubor s databází poÅ¡kozený. +- +- +- (HMAC mismatch) +- (HMAC neshoda) +- +- +- Unable to calculate database key: %1 +- Nedaří se vypoÄítat klÃ­Ä databáze: %1 +- +- +- +- Kdbx4Writer +- +- Invalid symmetric cipher algorithm. +- Neplatný algoritmus symetrické Å¡ifry. +- +- +- Invalid symmetric cipher IV size. +- IV = Initialization Vector for symmetric cipher +- Neplatná velikost symetrické Å¡ifry IV. +- +- +- Failed to serialize KDF parameters variant map +- Translation comment: variant map = data structure for storing meta data +- NepodaÅ™ilo se serializovat mapu varianty parametrů funkce pro odvození klíÄe +- +- +- Unable to calculate database key: %1 +- Nedaří se vypoÄítat klÃ­Ä databáze: %1 +- +- +- +- KdbxReader +- +- Unsupported cipher +- Nepodporovaná Å¡ifra +- +- +- Invalid compression flags length +- Neplatná délka příznaku komprimace +- +- +- Unsupported compression algorithm +- Nepodporovaný kompresní algoritmus +- +- +- Invalid master seed size +- Neplatná velikost hlavního náhodného Äísla (seed) +- +- +- Invalid transform seed size +- Neplatná velikost transformaÄního náhodného Äísla (seed) +- +- +- Invalid transform rounds size +- Neplatná velikost transformaÄních průchodů +- +- +- Invalid start bytes size +- Neplatná velikost poÄáteÄních bajtů +- +- +- Invalid random stream id size +- Neplatná velikost identifikátoru náhodného proudu +- +- +- Invalid inner random stream cipher +- Neplatná Å¡ifra vnitÅ™ního náhodného proudu +- +- +- Not a KeePass database. +- Nejedná se o databázi KeePass. +- +- +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- Zvolený soubor je databáze ve starém formátu KeePass 1 (.kdb). +- +-Můžete ho importovat pomocí Databáze → Importovat databázi ve formátu KeePass 1…. +-Jedná se o jednosmÄ›rný pÅ™evod. Databázi, vzniklou z importu, nepůjde otevřít ve staré aplikaci KeePassX verze 0.4. +- +- +- Unsupported KeePass 2 database version. +- Nepodporovaná verze databáze KeePass 2. +- +- +- Invalid cipher uuid length: %1 (length=%2) +- Neplatná délka nikde se neopakujícího identifikátoru Å¡ifry: %1 (length=%2) +- +- +- Unable to parse UUID: %1 +- UUID se nedaří zpracovat: %1 +- +- +- Failed to read database file. +- NepodaÅ™ilo se Äíst soubor s databází. +- +- +- +- KdbxXmlReader +- +- XML parsing failure: %1 +- Nezdar pÅ™i zpracovávání XML: %1 +- +- +- No root group +- Žádná koÅ™enová skupina +- +- +- Missing icon uuid or data +- ChybÄ›jící neopakující se identifikátor nebo data ikony +- +- +- Missing custom data key or value +- ChybÄ›jící vlastní datový klÃ­Ä nebo hodnota +- +- +- Multiple group elements +- Prvky vícero skupin +- +- +- Null group uuid +- Prázdný neopakující se identifikátor skupiny +- +- +- Invalid group icon number +- Neplatné Äíslo ikony skupiny +- +- +- Invalid EnableAutoType value +- Neplatná hodnota zapnutí automatického vyplňování +- +- +- Invalid EnableSearching value +- Neplatná hodnota zapnutí vyhledávání +- +- +- No group uuid found +- Nenalezen žádný neopakující se identifikátor skupiny +- +- +- Null DeleteObject uuid +- Prázdný neopakující se identifikátor objektu ke smazání +- +- +- Missing DeletedObject uuid or time +- ChybÄ›jící neopakující se identifikátor nebo Äas smazaného objektu +- +- +- Null entry uuid +- Prázdný neopakující se identifikátor +- +- +- Invalid entry icon number +- Neplatné Äíslo ikony položky +- +- +- History element in history entry +- Prvek historie v položce historie +- +- +- No entry uuid found +- Nebyl nalezen žádný neopakující se identifikátor položky +- +- +- History element with different uuid +- Prvek historie s rozdílným neopakujícím se identifikátorem +- +- +- Duplicate custom attribute found +- ZjiÅ¡tÄ›n duplicitní uživatelsky urÄený atribut +- +- +- Entry string key or value missing +- Chybí klÃ­Ä nebo hodnota Å™etÄ›zce položky +- +- +- Entry binary key or value missing +- Chybí binární klÃ­Ä nebo hodnota položky +- +- +- Auto-type association window or sequence missing +- Chybí pÅ™iÅ™azení okna nebo posloupnost pro automatické vyplňování +- +- +- Invalid bool value +- Neplatná boolean hodnota +- +- +- Invalid date time value +- Neplatná hodnota data a Äasu +- +- +- Invalid color value +- Neplatná hodnota barvy +- +- +- Invalid color rgb part +- Neplatná Äást rgb vyjádÅ™ení barvy +- +- +- Invalid number value +- Neplatná Äíselná hodnota +- +- +- Invalid uuid value +- Neplatná hodnota neopakujícího se identifikátoru +- +- +- Unable to decompress binary +- Translator meant is a binary data inside an entry +- Nedaří se rozbalit binární soubor +- +- +- XML error: +-%1 +-Line %2, column %3 +- Chyba XML: +-%1 +-Řádek %2, sloupec %3 +- +- +- +- KeeAgentSettings +- +- Invalid KeeAgent settings file structure. +- Neplatná struktura souboru s nastaveními pro KeeAgent. +- +- +- Private key is an attachment but no attachments provided. +- Soukromý klÃ­Ä je příloha, ale nebyly poskytnuty žádné přílohy. +- +- +- Private key is empty +- Soukromý klÃ­Ä je prázdný +- +- +- File too large to be a private key +- Soubor je na soukromou Äást klíÄe příliÅ¡ velký +- +- +- Failed to open private key +- NepodaÅ™ilo se otevřít soukromou Äást klíÄe +- +- +- +- KeePass1OpenWidget +- +- Unable to open the database. +- Databázi se nedaří otevřít. +- +- +- Import KeePass1 Database +- Importovat databázi ve formátu KeePass1 +- +- +- +- KeePass1Reader +- +- Unable to read keyfile. +- Soubor s klíÄem se nedaří naÄíst. +- +- +- Not a KeePass database. +- Nejedná se o databázi Keepass. +- +- +- Unsupported encryption algorithm. +- Nepodporovaný Å¡ifrovací algoritmus. +- +- +- Unsupported KeePass database version. +- Nepodporovaná verze databáze KeePass. +- +- +- Unable to read encryption IV +- IV = Initialization Vector for symmetric cipher +- Nedaří se Äíst Å¡ifrování IV +- +- +- Invalid number of groups +- Neplatný poÄet skupin +- +- +- Invalid number of entries +- Neplatný poÄet položek +- +- +- Invalid content hash size +- Neplatná velikost otisku (hash) obsahu +- +- +- Invalid transform seed size +- Neplatná velikost transformaÄního náhodného Äísla (seed) +- +- +- Invalid number of transform rounds +- Neplatný poÄet transformaÄních průchodů +- +- +- Unable to construct group tree +- Nedaří se vytvoÅ™it strom skupin +- +- +- Root +- KoÅ™en +- +- +- Key transformation failed +- Transformace klíÄe se nezdaÅ™ila +- +- +- Invalid group field type number +- Neplatné Äíslo typu kolonky skupiny +- +- +- Invalid group field size +- Neplatná velikost kolonky skupiny +- +- +- Read group field data doesn't match size +- NaÄtená data kolonky skupiny neodpovídají velikosti +- +- +- Incorrect group id field size +- Nesprávná velikost kolonky identifikátoru skupiny +- +- +- Incorrect group creation time field size +- Nesprávná velikost kolonky Äasu vytvoÅ™ení skupiny +- +- +- Incorrect group modification time field size +- Nesprávná velikost kolonky Äasu úpravy skupiny +- +- +- Incorrect group access time field size +- Nesprávná velikost kolonky Äasu přístupu do skupiny +- +- +- Incorrect group expiry time field size +- Nesprávná velikost kolonky Äasu skonÄení platnosti skupiny +- +- +- Incorrect group icon field size +- Nesprávná velikost kolonky ikony skupiny +- +- +- Incorrect group level field size +- Nesprávná velikost kolonky úrovnÄ› skupiny +- +- +- Invalid group field type +- Neplatný typ kolonky skupiny +- +- +- Missing group id or level +- ChybÄ›jící identifikátor nebo úroveň skupiny +- +- +- Missing entry field type number +- Chybí Äíslo typu kolonky položky +- +- +- Invalid entry field size +- Neplatná velikost kolonky položky +- +- +- Read entry field data doesn't match size +- NaÄtená data kolonky položky neodpovídají velikosti +- +- +- Invalid entry uuid field size +- Neplatná velikost kolonky neopakujícího se identifikátoru položky +- +- +- Invalid entry group id field size +- Neplatná velikost kolonky identifikátoru skupiny položky +- +- +- Invalid entry icon field size +- Neplatná velikost kolonky ikony položky +- +- +- Invalid entry creation time field size +- Neplatná velikost kolonky Äasu vytvoÅ™ení položky +- +- +- Invalid entry modification time field size +- Neplatná velikost kolonky Äasu úpravy položky +- +- +- Invalid entry expiry time field size +- Neplatná velikost kolonky Äasu konce platnosti položky +- +- +- Invalid entry field type +- Neplatný typ kolonky položky +- +- +- unable to seek to content position +- nedaří se posunout na pozici obsahu +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Byly zadány neplatné pÅ™ihlaÅ¡ovací údaje, zkuste to prosím znovu. +-Pokud se toto opakuje, pak je možné, že je váš soubor s databází poÅ¡kozený. +- +- +- Unable to calculate database key +- Nedaří se vypoÄítat klÃ­Ä databáze +- +- +- +- KeeShare +- +- Invalid sharing reference +- Neplatná reference sdílení +- +- +- Inactive share %1 +- Neaktivní sdílení %1 +- +- +- Imported from %1 +- Importováno z %1 +- +- +- Exported to %1 +- Exportováno do %1 +- +- +- Synchronized with %1 +- Synchronizováno s %1 +- +- +- Import is disabled in settings +- Import je vypnutý v nastavení +- +- +- Export is disabled in settings +- Export je vypnutý v nastavení +- +- +- Inactive share +- Neaktivní sdílen +- +- +- Imported from +- Importováno z +- +- +- Exported to +- Exportováno do +- +- +- Synchronized with +- Synchronizováno s +- +- +- +- KeyComponentWidget +- +- Key Component +- SouÄást klíÄe +- +- +- Key Component Description +- Popis souÄásti klíÄe +- +- +- Cancel +- ZruÅ¡it +- +- +- Key Component set, click to change or remove +- SouÄást klíÄe nastavena, kliknutím zmÄ›níte nebo odeberete +- +- +- Add %1 +- Add a key component +- PÅ™idat %1 +- +- +- Change %1 +- Change a key component +- ZmÄ›nit %1 +- +- +- Remove %1 +- Remove a key component +- Odebrat %1 +- +- +- %1 set, click to change or remove +- Change or remove a key component +- %1 nastaveno, kliknutím zmÄ›níte nebo odeberete +- +- +- +- KeyFileEditWidget +- +- Generate +- TvoÅ™ +- +- +- Key File +- Soubor s klíÄem +- +- +- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> +- <p>Jako další úroveň zabezpeÄení je možné pÅ™idat soubor s klíÄem obsahujícím náhodné bajty.</p><p>Je tÅ™eba ho uchovávat v bezpeÄí a nikdy ho neztratit, jinak budete uzamÄeni!</p> +- +- +- Error loading the key file '%1' +-Message: %2 +- Chyba naÄítání souboru s klíÄem „%1“ +-Zpráva: %2 +- +- +- Key files +- Soubory s klíÄi +- +- +- All files +- VeÅ¡keré soubory +- +- +- Create Key File... +- VytvoÅ™it soubor s klíÄem… +- +- +- Error creating key file +- Chyba pÅ™i vytváření souboru s klíÄem +- +- +- Unable to create key file: %1 +- Nedaří se vytvoÅ™it soubor s klíÄem: %1 +- +- +- Select a key file +- Vyberte soubor s klíÄem +- +- +- Key file selection +- VýbÄ›r souboru s klíÄem +- +- +- Browse for key file +- Nalistovat soubor s klíÄem +- +- +- Browse... +- Procházet… +- +- +- Generate a new key file +- VytvoÅ™it nový soubor s klíÄem +- +- +- Note: Do not use a file that may change as that will prevent you from unlocking your database! +- Pozn.: Nepoužívejte soubor, který se může zmÄ›nit, protože by to znemožnilo odemÄení databáze! +- +- +- Invalid Key File +- Neplatný soubor s klíÄem +- +- +- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. +- Není možné použít stávající databázi jako soubor s klíÄem pro ní samotnou. Zvolte jiný soubor nebo nÄ›jaký vytvoÅ™te. +- +- +- Suspicious Key File +- PodezÅ™elý soubor s klíÄem +- +- +- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. +-Are you sure you want to continue with this file? +- Zvolený soubor se zdá být souborem s databází hesel. Je tÅ™eba, aby soubor s klíÄem byl soubor, který se nikdy nezmÄ›ní, nebo navždy ztratíte k databázi přístup. +-Opravdu chcete tento soubor použít? +- +- +- Old key file format +- Starý formát souboru s klíÄem +- +- +- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. +- Vybrali jste soubor s klíÄem ve starém formátu, který KeePassXC<br>může pÅ™estat v budoucnu podporovat.<br><br>Zvažte prosím místo nÄ›j vytvoÅ™ení nového souboru s klíÄem. +- +- +- +- MainWindow +- +- &Database +- &Databáze +- +- +- &Help +- NápovÄ›da +- +- +- &Groups +- Skupiny +- +- +- &Tools +- Nás&troje +- +- +- &Quit +- UkonÄit +- +- +- &About +- O &aplikaci +- +- +- Database settings +- Nastavení databáze +- +- +- Copy username to clipboard +- Zkopírovat uživatelské jméno do schránky +- +- +- Copy password to clipboard +- Zkopírovat heslo do schránky +- +- +- &Settings +- Na&stavení +- +- +- &Title +- &Titulek +- +- +- Copy title to clipboard +- Zkopírovat titulek do schránky +- +- +- &URL +- &URL adresa +- +- +- Copy URL to clipboard +- Zkopírovat URL adresu do schránky +- +- +- &Notes +- Poz&námky +- +- +- Copy notes to clipboard +- Zkopírovat poznámky do schránky +- +- +- Copy &TOTP +- Zkopírovat &TOTP +- +- +- E&mpty recycle bin +- &Vysypat koÅ¡ +- +- +- Clear history +- VyÄistit historii +- +- +- Access error for config file %1 +- Chyba přístupu k souboru s nastaveními %1 +- +- +- Settings +- Nastavení +- +- +- Toggle window +- Zobrazit/skrýt okno +- +- +- Quit KeePassXC +- UkonÄit KeePassXC +- +- +- Please touch the button on your YubiKey! +- DotknÄ›te se tlaÄítka na svém YubiKey zařízení! +- +- +- WARNING: You are using an unstable build of KeePassXC! +-There is a high risk of corruption, maintain a backup of your databases. +-This version is not meant for production use. +- VAROVÃNÃ: Používáte vývojové sestavení KeePassXC! +-Je zde vysoké riziko poÅ¡kození dat, proto udržujte zálohu svých databází. +-Tato verze není urÄena pro produkÄní použití. +- +- +- &Donate +- &Darovat +- +- +- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +-We recommend you use the AppImage available on our downloads page. +- VAROVÃNÃ: Vámi používaná verze Qt může způsobovat, že pÅ™i použití klávesnice na obrazovce KeePassXC zhavaruje! +-DoporuÄujeme použít AppImage, které je k dispozici v sekci stahování naÅ¡ich stránek. +- +- +- &Import +- &Importovat +- +- +- Create a new database +- VytvoÅ™it novou databázi +- +- +- Merge from another KDBX database +- SlouÄit z jiné KDBX databáze +- +- +- Add a new entry +- PÅ™idat nový záznam +- +- +- View or edit entry +- Zobrazit nebo upravit položku +- +- +- Add a new group +- PÅ™idat novou skupinu +- +- +- Perform &Auto-Type +- Provést &automatické vyplnÄ›ní +- +- +- Open &URL +- Otevřít &URL adresu +- +- +- Import a KeePass 1 database +- Importovat databázi aplikace KeePass verze 1 +- +- +- Import a CSV file +- Importovat CSV soubor +- +- +- NOTE: You are using a pre-release version of KeePassXC! +-Expect some bugs and minor issues, this version is not meant for production use. +- UPOZORNÄšNÃ: Používáte vývojové sestavení KeePassXC! +-OÄekávejte chyby a drobné problémy, tato verze není urÄena pro produkÄní použití. +- +- +- Check for updates on startup? +- ZjiÅ¡Å¥ovat dostupnost aktualizací pÅ™i spouÅ¡tÄ›ní? +- +- +- Would you like KeePassXC to check for updates on startup? +- PÅ™ejete si, aby KeePassXC zjiÅ¡Å¥ovalo dostupnost aktualizací pÅ™i svém spouÅ¡tÄ›ní? +- +- +- You can always check for updates manually from the application menu. +- Vždy můžete aktualizace vyhledávat ruÄnÄ› z nabídky aplikace. +- +- +- &Export +- &Export +- +- +- Sort &A-Z +- SeÅ™adit &A-Z +- +- +- Sort &Z-A +- SeÅ™adit &Z-A +- +- +- &Password Generator +- &Vytváření hesel +- +- +- Import a 1Password Vault +- Importovat 1Password trezor +- +- +- &Getting Started +- &ZaÄínáme +- +- +- &User Guide +- &Uživatelská příruÄka +- +- +- &Keyboard Shortcuts +- &Klávesové zkratky +- +- +- &Recent Databases +- &Nedávno otevÅ™ené databáze +- +- +- &Entries +- Položky +- +- +- Copy Att&ribute +- Zkopírovat at&ribut +- +- +- TOTP +- TOTP +- +- +- View +- Zobrazit +- +- +- Theme +- Motiv +- +- +- &Check for Updates +- &Zjistit dostupnost případných aktualizací +- +- +- &Open Database… +- &Otevřít databázi… +- +- +- &Save Database +- Uložit databázi +- +- +- &Close Database +- Zavřít databázi +- +- +- &New Database… +- &Nová databáze… +- +- +- &Merge From Database… +- &SlouÄit z databáze… +- +- +- &New Entry… +- &Nový záznam… +- +- +- &Edit Entry… +- &Upravit záznam… +- +- +- &Delete Entry… +- Smazat záznam… +- +- +- &New Group… +- &Nová skupina… +- +- +- &Edit Group… +- Upravit skupinu… +- +- +- &Delete Group… +- Smazat skupinu… +- +- +- Download All &Favicons… +- Stáhnout si vÅ¡echny ikony &webů… +- +- +- Sa&ve Database As… +- Uložit databázi jako… +- +- +- Database &Security… +- ZabezpeÄení databáze… +- +- +- Database &Reports... +- Hlášení o &databázi… +- +- +- Statistics, health check, etc. +- Statistiky, kontrola stavu atd. +- +- +- &Database Settings… +- Nastavení &databáze… +- +- +- &Clone Entry… +- Klonovat záznam… +- +- +- Move u&p +- &PÅ™esunout nahoru +- +- +- Move entry one step up +- PÅ™esunout položku o pozici výše +- +- +- Move do&wn +- PÅ™esunout dolů +- +- +- Move entry one step down +- PÅ™esunout položku o pozici níže +- +- +- Copy &Username +- Zkopírovat &uživatelské jméno +- +- +- Copy &Password +- Zko&pírovat heslo +- +- +- Download &Favicon +- Stáhnout si ikonu &webu +- +- +- &Lock Databases +- Uzamknout databáze +- +- +- &CSV File… +- &CSV soubor… +- +- +- &HTML File… +- &HTML soubor… +- +- +- KeePass 1 Database… +- Databáze ve formátu KeePass verze 1… +- +- +- 1Password Vault… +- 1Password trezor… +- +- +- CSV File… +- CSV soubor… +- +- +- Show TOTP +- Zobrazit na Äasu založené jednorázové heslo (TOTP) +- +- +- Show QR Code +- Zobrazit QR kód +- +- +- Set up TOTP… +- Nastavit TOTP… +- +- +- Report a &Bug +- Nahlásit chy&bu +- +- +- Open Getting Started Guide +- Otevřít příruÄku ZaÄínáme +- +- +- &Online Help +- Náp&ovÄ›da na webu +- +- +- Go to online documentation +- PÅ™ejít na dokumentaci na webu +- +- +- Open User Guide +- Otevřít Uživatelskou příruÄku +- +- +- Save Database Backup... +- Uložit zálohu databáze… +- +- +- Add key to SSH Agent +- PÅ™idat klÃ­Ä do SSH Agenta +- +- +- Remove key from SSH Agent +- Odebrat klÃ­Ä z SSH Agenta +- +- +- Compact Mode +- Kompaktní režim +- +- +- Automatic +- Automatický +- +- +- Light +- SvÄ›tlý +- +- +- Dark +- Tmavý +- +- +- Classic (Platform-native) +- Klasické (nativní pro danou platformu) +- +- +- Show Toolbar +- Zobrazovat liÅ¡tu nástrojů +- +- +- Show Preview Panel +- Zobrazit panel náhledu +- +- +- Don't show again for this version +- Pro tuto verzi už nezobrazovat +- +- +- Restart Application? +- Restartovat aplikaci? +- +- +- You must restart the application to apply this setting. Would you like to restart now? +- Chcete-li toto nastavení použít, musíte restartovat aplikaci. Chcete nyní restartovat? +- +- +- Perform Auto-Type Sequence +- Provést posloupnost automatického vyplnÄ›ní +- +- +- {USERNAME} +- {UŽIVATELSKÉ_JMÉNO} +- +- +- {USERNAME}{ENTER} +- {UŽIVATELSKÉ_JMÉNO}{ENTER} +- +- +- {PASSWORD} +- {HESLO} +- +- +- {PASSWORD}{ENTER} +- {HESLO}{ENTER} +- +- +- Always on Top +- Vždy nahoÅ™e +- +- +- Hide Usernames +- Skrýt uživatelská jména +- +- +- Hide Passwords +- Skrýt hesla +- +- +- +- ManageDatabase +- +- Database settings +- Nastavení databáze +- +- +- Edit database settings +- Upravit nastavení databáze +- +- +- Unlock database +- Odemknout databázi +- +- +- Unlock database to show more information +- Odemknout databázi a zobrazit další informace +- +- +- Lock database +- Uzamknout databázi +- +- +- +- ManageSession +- +- Disconnect +- Odpojit +- +- +- Disconnect this application +- Odpojit tuto aplikaci +- +- +- +- Merger +- +- Creating missing %1 [%2] +- Vytváření chybÄ›jícího %1 [%2] +- +- +- Relocating %1 [%2] +- PÅ™emisÅ¥ování %1 [%2] +- +- +- Overwriting %1 [%2] +- PÅ™episování %1 [%2] +- +- +- older entry merged from database "%1" +- starší položka slouÄena z databáze „%1“ +- +- +- Adding backup for older target %1 [%2] +- PÅ™idávání zálohy pro starší cíl %1 [%2] +- +- +- Adding backup for older source %1 [%2] +- PÅ™idávání zálohy pro starší zdroj %1 [%2] +- +- +- Reapplying older target entry on top of newer source %1 [%2] +- Znovu se uplatňují původní zdrojové položky nad novÄ›jším zdrojem %1 [%2] +- +- +- Reapplying older source entry on top of newer target %1 [%2] +- Znovu se uplatňují původní zdrojové položky nad novÄ›jším cílem %1 [%2] +- +- +- Synchronizing from newer source %1 [%2] +- Synchronizace z novÄ›jšího zdroje %1 [%2] +- +- +- Synchronizing from older source %1 [%2] +- Synchronizace ze staršího zdroje %1 [%2] +- +- +- Deleting child %1 [%2] +- Mazání podřízeného %1 [%2] +- +- +- Deleting orphan %1 [%2] +- Mazání osiÅ™elého %1 [%2] +- +- +- Changed deleted objects +- ZmÄ›nÄ›ny smazané objekty +- +- +- Adding missing icon %1 +- PÅ™idávání chybÄ›jící ikony %1 +- +- +- Removed custom data %1 [%2] +- Odebrána uživatelsky urÄená data %1 [%2] +- +- +- Adding custom data %1 [%2] +- PÅ™idávána uživatelsky urÄená data %1 [%2] +- +- +- +- NewDatabaseWizard +- +- Create a new KeePassXC database... +- VytvoÅ™it novou KeePassXC databázi… +- +- +- Root +- Root group +- KoÅ™en +- +- +- +- NewDatabaseWizardPage +- +- WizardPage +- Stránka průvodce +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Zde je možné pÅ™izpůsobit nastavení Å¡ifrování databáze. NemÄ›jte obavy, kdykoli je možné je pozdÄ›ji zmÄ›nit v nastavení databáze. +- +- +- Advanced Settings +- PokroÄilá nastavení +- +- +- Simple Settings +- Základní nastavení +- +- +- Encryption Settings +- Nastavení Å¡ifrování +- +- +- +- NewDatabaseWizardPageDatabaseKey +- +- Database Credentials +- PÅ™ihlaÅ¡ovací údaje do databáze +- +- +- A set of credentials known only to you that protects your database. +- Sada pÅ™ihlaÅ¡ovacích údajů, známá pouze vám, sloužící pro ochranu databáze. +- +- +- +- NewDatabaseWizardPageEncryption +- +- Encryption Settings +- Nastavení Å¡ifrování +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Zde je možné pÅ™izpůsobit nastavení Å¡ifrování databáze. NemÄ›jte obavy, kdykoli je možné je pozdÄ›ji zmÄ›nit v nastavení databáze. +- +- +- +- NewDatabaseWizardPageMetaData +- +- General Database Information +- Obecné informace o databázi +- +- +- Please fill in the display name and an optional description for your new database: +- Vyplňte zobrazovaný název a volitelný popis nové databáze: +- +- +- +- NixUtils +- +- Password Manager +- Správce hesel +- +- +- +- OpData01 +- +- Invalid OpData01, does not contain header +- Neplatné OpData01 – neobsahuje hlaviÄku +- +- +- Unable to read all IV bytes, wanted 16 but got %1 +- Nedaří se Äíst vÅ¡ech IV bajtů, chtÄ›no 16, ale obdrženo %1 +- +- +- Unable to init cipher for opdata01: %1 +- Nedaří se inicializovat Å¡ifru pro opdata01: %1 +- +- +- Unable to read all HMAC signature bytes +- Nedaří se Äíst vÅ¡echny bajty HMAC signatury +- +- +- Malformed OpData01 due to a failed HMAC +- ChybnÄ› formulované OpData01 kvůli selhavšímu HMAC +- +- +- Unable to process clearText in place +- Nedaří se zpracovat clearText v jednom kroku +- +- +- Expected %1 bytes of clear-text, found %2 +- OÄekáváno %1 bajtů v neformátovaném textu, nalezeno %2 +- +- +- +- OpVaultOpenWidget +- +- Read Database did not produce an instance +-%1 +- ÄŒtení databáze nevytvoÅ™ilo instanci +-%1 +- +- +- +- OpVaultReader +- +- Directory .opvault must exist +- Je tÅ™eba, aby existovala složka .opvault +- +- +- Directory .opvault must be readable +- Je tÅ™eba, aby složka .opvault byla přístupná pro Ätení +- +- +- Directory .opvault/default must exist +- Je tÅ™eba, aby existovala složka .opvault/default +- +- +- Directory .opvault/default must be readable +- Je tÅ™eba, aby složka .opvault/default byla přístupná pro Ätení +- +- +- Unable to decode masterKey: %1 +- Nedaří se dekódovat masterKey: %1 +- +- +- Unable to derive master key: %1 +- Nedaří se odvodit hlavní klíÄ: %1 +- +- +- +- OpenSSHKey +- +- Invalid key file, expecting an OpenSSH key +- Neplatný soubor s klíÄem, oÄekáván OpenSSH klÃ­Ä +- +- +- PEM boundary mismatch +- Neshoda v PEM hranici +- +- +- Base64 decoding failed +- Dekódování Base64 se nezdaÅ™ilo +- +- +- Key file way too small. +- Soubor s klíÄem je příliÅ¡ malý. +- +- +- Key file magic header id invalid +- Neplatný identifikátor magic hlaviÄky souboru s klíÄem +- +- +- Found zero keys +- Nenalezeny žádné klíÄe +- +- +- Failed to read public key. +- NepodaÅ™ilo se naÄíst veÅ™ejnou Äást klíÄe. +- +- +- Corrupted key file, reading private key failed +- PoÅ¡kozený soubor s klíÄem, Ätení soukromé Äásti klíÄe se nezdaÅ™ilo +- +- +- No private key payload to decrypt +- Žádná obsažená soukromá Äást klíÄe k rozÅ¡ifrování +- +- +- Trying to run KDF without cipher +- Snažíte se spustit funkci odvození klíÄe bez Å¡ifry +- +- +- Passphrase is required to decrypt this key +- Pro rozÅ¡ifrování tohoto klíÄe je tÅ™eba zadat heslovou frázi +- +- +- Key derivation failed, key file corrupted? +- Odvození klíÄe se nezdaÅ™ilo, soubor s klíÄem je poÅ¡kozený? +- +- +- Decryption failed, wrong passphrase? +- RozÅ¡ifrování se nezdaÅ™ilo, chybná heslová fráze? +- +- +- Unexpected EOF while reading public key +- NeoÄekávaný konec souboru pÅ™i Ätení veÅ™ejné Äásti klíÄe +- +- +- Unexpected EOF while reading private key +- NeoÄekávaný konec souboru pÅ™i Ätení soukromé Äásti klíÄe +- +- +- Can't write public key as it is empty +- Není možné zapsat veÅ™ejnou Äást klíÄe, protože je prázdná +- +- +- Unexpected EOF when writing public key +- NeoÄekávaný konec souboru pÅ™i zápisu veÅ™ejné Äásti klíÄe +- +- +- Can't write private key as it is empty +- Není možné zapsat soukromou Äást klíÄe, protože je prázdná +- +- +- Unexpected EOF when writing private key +- NeoÄekávaný konec souboru pÅ™i zápisu soukromé Äásti klíÄe +- +- +- Unsupported key type: %1 +- Nepodporovaný typ klíÄe: %1 +- +- +- Unknown cipher: %1 +- Neznámá Å¡ifra: %1 +- +- +- Cipher IV is too short for MD5 kdf +- Cifra IV je příliÅ¡ krátká pro MD5 funkci pro odvození klíÄe +- +- +- Unknown KDF: %1 +- Neznámá funkce pro odvození klíÄe: %1 +- +- +- Unknown key type: %1 +- Neznámý typ klíÄe: %1 +- +- +- +- PasswordEdit +- +- Passwords do not match +- Zadání hesla se neshodují +- +- +- Passwords match so far +- Zadání hesla jsou zatím shodná +- +- +- Toggle Password (%1) +- Zobrazit/skrýt heslo (%1) +- +- +- Generate Password (%1) +- VytvoÅ™it heslo (%1) +- +- +- Warning: Caps Lock enabled! +- Varování: je zapnutý Caps Lock! +- +- +- +- PasswordEditWidget +- +- Enter password: +- Zadejte heslo: +- +- +- Confirm password: +- Potvrdit heslo: +- +- +- Password +- Heslo +- +- +- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> +- <p>Heslo je hlavní metodou zabezpeÄení databáze.</p><p>Dobrá hesla jsou dlouhá a nepoužívaná stejná na více místech. KeePassXC ho pro vás může vytvoÅ™it.</p> +- +- +- Passwords do not match. +- Zadání hesla se neshodují. +- +- +- Password field +- Kolonka pro heslo +- +- +- Repeat password field +- Kolonka pro zopakování zadání hesla +- +- +- +- PasswordGeneratorWidget +- +- %p% +- %p% +- +- +- strength +- Password strength +- odolnost +- +- +- entropy +- nahodilost +- +- +- Password +- Heslo +- +- +- Character Types +- Typy znaků +- +- +- Numbers +- Číslice +- +- +- Extended ASCII +- Rozšířené ASCII +- +- +- Exclude look-alike characters +- Vynechat podobnÄ› vypadající znaky (pÅ™edejití zámÄ›nÄ›) +- +- +- Pick characters from every group +- Zajistit přítomnost znaků ze vÅ¡ech zvolených skupin +- +- +- &Length: +- Dé&lka: +- +- +- Passphrase +- Heslová fráze +- +- +- Wordlist: +- Slovník: +- +- +- Word Separator: +- OddÄ›lovaÄ slov: +- +- +- Close +- Zavřít +- +- +- Entropy: %1 bit +- Nahodilost: %1 bitů +- +- +- Password Quality: %1 +- Kvalita hesla: %1 +- +- +- Poor +- Password quality +- Velmi slabá +- +- +- Weak +- Password quality +- Slabá +- +- +- Good +- Password quality +- Dobrá +- +- +- Excellent +- Password quality +- Výborná +- +- +- Switch to advanced mode +- PÅ™epnout do pokroÄilého režimu +- +- +- Advanced +- PokroÄilé +- +- +- Braces +- Složené závorky +- +- +- Punctuation +- InterpunkÄní znaménka +- +- +- Quotes +- Uvozovky +- +- +- Logograms +- Logogramy +- +- +- Character set to exclude from generated password +- Sada znaků kterou z vytvářených hesel vynechat +- +- +- Do not include: +- Nezahrnovat: +- +- +- Add non-hex letters to "do not include" list +- PÅ™idat nehexadecimální znaky do seznamu „nezahrnovat“ +- +- +- Hex +- Hex +- +- +- Excluded characters: "0", "1", "l", "I", "O", "|", "ï¹’" +- Vynechané znaky: „0“, „1“, „l“, „I“, „O“, „|“, „ . “ +- +- +- Generated password +- VytvoÅ™ené heslo +- +- +- Upper-case letters +- Velká písmena +- +- +- Lower-case letters +- Malá písmena +- +- +- Special characters +- Zvláštní znaky +- +- +- Math Symbols +- Matematické symboly +- +- +- Dashes and Slashes +- PomlÄky a lomítka +- +- +- Excluded characters +- VylouÄené znaky +- +- +- Hex Passwords +- Å estnáctková hesla +- +- +- Password length +- Délka hesla +- +- +- Word Case: +- Velikost písmen: +- +- +- Regenerate password +- Znovu vytvoÅ™it heslo +- +- +- Copy password +- Zkopírovat heslo +- +- +- lower case +- malá písmena +- +- +- UPPER CASE +- VELKà PÃSMENA +- +- +- Title Case +- Velikost písmen nadpisu +- +- +- Generate Password +- VytvoÅ™it heslo +- +- +- Also choose from: +- Také zvolte z: +- +- +- Additional characters to use for the generated password +- Další znaky které použít pro vytvoÅ™ené heslo +- +- +- Additional characters +- Další znaky +- +- +- Word Count: +- PoÄet slov: +- +- +- Esc +- Esc +- +- +- Apply Password +- Použít heslo +- +- +- Ctrl+S +- Ctrl+S +- +- +- Regenerate password (%1) +- Znovu vytvoÅ™it heslo (%1) +- +- +- Special Characters +- Zvláštní znaky +- +- +- +- QApplication +- +- KeeShare +- KeeShare +- +- +- Statistics +- Statistiky +- +- +- Very weak password +- Velmi slabé heslo +- +- +- Password entropy is %1 bits +- Nahodilost hesla je %1 bitů +- +- +- Weak password +- Slabé heslo +- +- +- Used in %1/%2 +- Použito v %1/%2 +- +- +- Password is used %1 times +- Heslo je použito %1 krát +- +- +- Password has expired +- Platnost hesla skonÄila +- +- +- Password expiry was %1 +- Konec platnosti hesla byl %1 +- +- +- Password is about to expire +- Platnost hesla bude konÄit +- +- +- Password expires in %1 days +- Platnost hesla konÄí za %1 dny +- +- +- Password will expire soon +- Platnost hesla brzy skonÄí +- +- +- Password expires on %1 +- Platnost hesla skonÄí %1 +- +- +- Health Check +- Kontrola stavu +- +- +- HIBP +- HIBP +- +- +- +- QMessageBox +- +- Overwrite +- PÅ™epsat +- +- +- Delete +- Smazat +- +- +- Move +- PÅ™esunout +- +- +- Empty +- Prázdné +- +- +- Remove +- Odebrat +- +- +- Skip +- PÅ™eskoÄit +- +- +- Disable +- Vypnout +- +- +- Merge +- SlouÄit +- +- +- Continue +- PokraÄovat +- +- +- +- QObject +- +- Database not opened +- Databáze nebyla otevÅ™ena +- +- +- Database hash not available +- Otisk (hash) databáze není k dispozici +- +- +- Client public key not received +- Neobdržena veÅ™ejná Äást klíÄe klienta +- +- +- Cannot decrypt message +- Zprávu se nedaří rozÅ¡ifrovat +- +- +- Action cancelled or denied +- Akce zruÅ¡ena nebo odepÅ™ena +- +- +- KeePassXC association failed, try again +- PÅ™iÅ™azení KeePassXC se nezdaÅ™ilo, zkuste to znovu +- +- +- Encryption key is not recognized +- Å ifrovací klÃ­Ä nebyl rozpoznán +- +- +- Incorrect action +- Nesprávná akce +- +- +- Empty message received +- Obdržena prázdná zpráva +- +- +- No URL provided +- Nebyla zadána žádná URL adresa +- +- +- No logins found +- Nenalezeny žádné pÅ™ihlaÅ¡ovací údaje +- +- +- Unknown error +- Neznámá chyba +- +- +- Add a new entry to a database. +- PÅ™idat do databáze novou položku. +- +- +- Path of the database. +- UmístÄ›ní databáze. +- +- +- Key file of the database. +- Soubor s klíÄem k databázi. +- +- +- path +- popis umístÄ›ní +- +- +- Username for the entry. +- Uživatelské jméno pro záznam. +- +- +- username +- uživatelské jméno +- +- +- URL for the entry. +- URL adresa pro položku. +- +- +- URL +- URL adresa +- +- +- Prompt for the entry's password. +- Dotázat se na heslo položky. +- +- +- Generate a password for the entry. +- VytvoÅ™it heslo pro položku. +- +- +- length +- délka +- +- +- Path of the entry to add. +- Popis umístÄ›ní záznamu, který pÅ™idat. +- +- +- Path of the entry to clip. +- clip = copy to clipboard +- Popis umístÄ›ní záznamu ke zkopírování do schránky. +- +- +- Timeout in seconds before clearing the clipboard. +- ÄŒasová prodleva (v sekundách) pÅ™ed vymazáním obsahu schránky. +- +- +- Edit an entry. +- Upravit položku. +- +- +- Title for the entry. +- Titulek pro položku. +- +- +- title +- titulek +- +- +- Path of the entry to edit. +- Popis umístÄ›ní položky kterou upravit. +- +- +- Estimate the entropy of a password. +- Odhadnout nahodilost hesla. +- +- +- Password for which to estimate the entropy. +- Heslo pro které odhadnout nahodilost. +- +- +- Perform advanced analysis on the password. +- Provést pokroÄilou analýzu hesla. +- +- +- +- +-Available commands: +- +- +- +-Příkazy k dispozici: +- +- +- +- Name of the command to execute. +- Název příkazu, který spustit. +- +- +- List database entries. +- Vypsat položky databáze. +- +- +- Path of the group to list. Default is / +- UmístÄ›ní skupiny, kterou vypsat. Výchozí je / +- +- +- Find entries quickly. +- NajdÄ›te položky rychle. +- +- +- Search term. +- Hledat pojem. +- +- +- Merge two databases. +- SlouÄit dvÄ› databáze. +- +- +- Path of the database to merge from. +- UmístÄ›ní databáze ze které slouÄit. +- +- +- Use the same credentials for both database files. +- Použít stejné pÅ™ihlaÅ¡ovací údaje pro oba databázové soubory. +- +- +- Key file of the database to merge from. +- Soubor s klíÄem k databázi, ze které slouÄit. +- +- +- Show an entry's information. +- Zobrazit informace o položce. +- +- +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- Názvy atributů které zobrazit. Tato pÅ™edvolba může být zadaná vícekrát, pro každý z atributů zvlášť na řádku v daném poÅ™adí. Pokud nejsou zadány žádné atributy, je zobrazen souhrn výchozích atributů. +- +- +- attribute +- atribut +- +- +- Name of the entry to show. +- Název položky k zobrazení. +- +- +- NULL device +- NULL zařízení +- +- +- error reading from device +- Chyba pÅ™i Ätení ze zařízení +- +- +- malformed string +- Å¡patnÄ› formovaný Å™etÄ›zec +- +- +- missing closing quote +- chybÄ›jící uzavírací uvozovka +- +- +- Group +- Skupina +- +- +- Title +- Titulek +- +- +- Username +- Uživatelské jméno +- +- +- Password +- Heslo +- +- +- Notes +- Poznámky +- +- +- Last Modified +- Okamžik poslední úpravy +- +- +- Created +- VytvoÅ™eno +- +- +- Browser Integration +- Napojení na webový prohlížeÄ +- +- +- SSH Agent +- SSH agent +- +- +- Generate a new random diceware passphrase. +- VytvoÅ™it náhodnou diceware heslovou frázi. +- +- +- Word count for the diceware passphrase. +- PoÄet slov pro diceware heslovou frázi. +- +- +- Wordlist for the diceware generator. +-[Default: EFF English] +- Slovník pro diceware generátor. +-[Výchozí: EFF angliÄtina] +- +- +- Generate a new random password. +- VytvoÅ™it nové náhodné heslo. +- +- +- Could not create entry with path %1. +- Nedaří se vytvoÅ™it položku v umístÄ›ní %1. +- +- +- Enter password for new entry: +- Zadejte heslo pro novou položku: +- +- +- Writing the database failed %1. +- Zápis do databáze se nezdaÅ™il %1. +- +- +- Successfully added entry %1. +- Položka %1 úspěšnÄ› pÅ™idána. +- +- +- Invalid timeout value %1. +- Neplatná hodnota Äasového limitu %1. +- +- +- Entry %1 not found. +- Položka %1 nenalezena. +- +- +- Entry with path %1 has no TOTP set up. +- Položka s umístÄ›ním %1 nemá nastavené TOTP heslo. +- +- +- Clearing the clipboard in %1 second(s)... +- VyÄiÅ¡tÄ›ní schránky za %1 sekundu…VyÄiÅ¡tÄ›ní schránky za %1 sekundy…VyÄiÅ¡tÄ›ní schránky za %1 sekund…VyÄiÅ¡tÄ›ní schránky za %1 sekundy… +- +- +- Clipboard cleared! +- Schránka vyÄiÅ¡tÄ›na! +- +- +- Silence password prompt and other secondary outputs. +- UmlÄet výzvy na heslo a další druhotné výstupy. +- +- +- count +- CLI parameter +- poÄet +- +- +- Could not find entry with path %1. +- Položku se nedaří v umístÄ›ní %1 nalézt. +- +- +- Not changing any field for entry %1. +- Neprovedena zmÄ›na žádného pole pro položku %1. +- +- +- Enter new password for entry: +- Zadejte nové heslo pro položku: +- +- +- Writing the database failed: %1 +- Zápis do databáze se nezdaÅ™il: %1 +- +- +- Successfully edited entry %1. +- Položka %1 úspěšnÄ› upravena. +- +- +- Length %1 +- Délka %1 +- +- +- Entropy %1 +- Nahodilost %1 +- +- +- Log10 %1 +- Log10 %1 +- +- +- Multi-word extra bits %1 +- Víceslovné extra bity %1 +- +- +- Type: Bruteforce +- Typ: hrubá síla +- +- +- Type: Dictionary +- Typ: slovníkový +- +- +- Type: Dict+Leet +- Typ: slovník+nahrazování +- +- +- Type: User Words +- Typ: uživatelsky zadaná slova +- +- +- Type: User+Leet +- Typ: uživatelský+nahrazování +- +- +- Type: Repeated +- Typ: opakování +- +- +- Type: Sequence +- Typ: posloupnost +- +- +- Type: Spatial +- Typ: prostorové +- +- +- Type: Date +- Typ: datum +- +- +- Type: Bruteforce(Rep) +- Type: hrubá síla (opak.) +- +- +- Type: Dictionary(Rep) +- Type: slovníkový (opak.) +- +- +- Type: Dict+Leet(Rep) +- Typ: slovník+nahrazování (opak.) +- +- +- Type: User Words(Rep) +- Typ: uživatelsky zadaná slova (opak) +- +- +- Type: User+Leet(Rep) +- Typ: uživatelský+nahrazování (opak) +- +- +- Type: Repeated(Rep) +- Typ: opakování (opak.) +- +- +- Type: Sequence(Rep) +- Typ: posloupnost (opak) +- +- +- Type: Spatial(Rep) +- Typ: prostorové (opak.) +- +- +- Type: Date(Rep) +- Type: datum (opak) +- +- +- Type: Unknown%1 +- Typ: neznámé%1 +- +- +- Entropy %1 (%2) +- Nahodilost %1 (%2) +- +- +- *** Password length (%1) != sum of length of parts (%2) *** +- *** Délka hesla (%1) != souÄtu délky Äástí (%2) *** +- +- +- Failed to load key file %1: %2 +- NepodaÅ™ilo se naÄíst soubor s klíÄem %1: %2 +- +- +- Length of the generated password +- Délka vytvářeného hesla +- +- +- Use lowercase characters +- Použít malá písmena +- +- +- Use uppercase characters +- Použít velká písmena +- +- +- Use special characters +- Použít zvláštní znaky +- +- +- Use extended ASCII +- Použít rozšířené ASCII +- +- +- Exclude character set +- Vynechat sadu znaků +- +- +- chars +- znaky +- +- +- Exclude similar looking characters +- Vynechat podobnÄ› vypadající znaky (pÅ™edejití zámÄ›nÄ›) +- +- +- Include characters from every selected group +- Zahrnout znaky ze vÅ¡ech zvolených skupin +- +- +- Recursively list the elements of the group. +- RekurzivnÄ› vypsat prvky skupiny. +- +- +- Cannot find group %1. +- Skupinu %1 se nedaří nalézt. +- +- +- Error reading merge file: +-%1 +- Chyba pÅ™i Ätení sluÄovaného souboru: +-%1 +- +- +- Unable to save database to file : %1 +- Nedaří se uložit databázi do souboru: %1 +- +- +- Unable to save database to file: %1 +- Nedaří se uložit databázi do souboru: %1 +- +- +- Successfully recycled entry %1. +- Položka %1 úspěšnÄ› pÅ™esunuta do KoÅ¡e. +- +- +- Successfully deleted entry %1. +- Položka %1 úspěšnÄ› smazána. +- +- +- Show the entry's current TOTP. +- Zobrazit stávající TOTP heslo položky. +- +- +- ERROR: unknown attribute %1. +- CHYBA: neznámý atribut %1. +- +- +- No program defined for clipboard manipulation +- Nebyl urÄen program pro manipulaci se schránkou +- +- +- file empty +- soubor je prázdný +- +- +- %1: (row, col) %2,%3 +- %1: (řádek, sloupec) %2,%3 +- +- +- AES-KDF (KDBX 4) +- AES-KDF (KDBX 4) +- +- +- AES-KDF (KDBX 3.1) +- AES-KDF (KDBX 3.1) +- +- +- Invalid Settings +- TOTP +- Neplatná nastavení +- +- +- Invalid Key +- TOTP +- Neplatný klÃ­Ä +- +- +- Message encryption failed. +- Zprávu se nepodaÅ™ilo zaÅ¡ifrovat. +- +- +- No groups found +- Nenalezeny žádné skupiny +- +- +- Create a new database. +- VytvoÅ™it novou databázi. +- +- +- File %1 already exists. +- Soubor %1 už existuje. +- +- +- Loading the key file failed +- NaÄítání souboru s klíÄem se nezdaÅ™ilo +- +- +- No key is set. Aborting database creation. +- Není nastavený žádný klíÄ. Vytváření databáze se ruší. +- +- +- Failed to save the database: %1. +- Databázi se nepodaÅ™ilo uložit: %1. +- +- +- Successfully created new database. +- Nová databáze úspěšnÄ› vytvoÅ™ena. +- +- +- Creating KeyFile %1 failed: %2 +- Vytváření souboru s klíÄem %1 se nezdaÅ™ilo: %2 +- +- +- Loading KeyFile %1 failed: %2 +- NaÄítání souboru s klíÄem %1 se nezdaÅ™ilo: %2 +- +- +- Path of the entry to remove. +- Popis umístÄ›ní položky k odebrání. +- +- +- Existing single-instance lock file is invalid. Launching new instance. +- Existující uzamykací soubor, zajiÅ¡Å¥ující spuÅ¡tÄ›ní pouze jedné instance, není platný. SpouÅ¡tí se nová instance. +- +- +- The lock file could not be created. Single-instance mode disabled. +- Soubor se zámkem se nepodaÅ™ilo vytvoÅ™it. Režim jediné instance proto vypnut. +- +- +- KeePassXC - cross-platform password manager +- KeePassXC – aplikace pro správu hesel, fungující na vícero operaÄních systémech +- +- +- filenames of the password databases to open (*.kdbx) +- soubory s databázemi hesel k otevÅ™ení (*.kdbx) +- +- +- path to a custom config file +- umístÄ›ní vlastního souboru s nastaveními +- +- +- key file of the database +- soubor s klíÄem k databázi +- +- +- read password of the database from stdin +- naÄíst heslo k databázi ze standardního vstupu +- +- +- Another instance of KeePassXC is already running. +- Již je spuÅ¡tÄ›ná jiná instance KeePassXC. +- +- +- Fatal error while testing the cryptographic functions. +- PÅ™i zkouÅ¡ení Å¡ifrovacích funkcí byl zjiÅ¡tÄ›n fatální nedostatek. +- +- +- KeePassXC - Error +- KeePassXC – chyba +- +- +- Database password: +- Heslo databáze: +- +- +- Cannot create new group +- Novou skupinu se nedaří vytvoÅ™it +- +- +- Deactivate password key for the database. +- Deaktivovat klÃ­Ä heslo pro databázi. +- +- +- Displays debugging information. +- Zobrazuje ladící informace. +- +- +- Deactivate password key for the database to merge from. +- Deaktivovat klÃ­Ä heslo pro databázi, ze které slouÄit. +- +- +- Version %1 +- Verze %1 +- +- +- +- Build Type: %1 +- Typ sestavení: %1 +- +- +- +- Revision: %1 +- Revize: %1 +- +- +- Distribution: %1 +- Distribuce: %1 +- +- +- Debugging mode is disabled. +- Ladící režim je vypnutý. +- +- +- Debugging mode is enabled. +- Ladící režim je zapnutý. +- +- +- Operating system: %1 +-CPU architecture: %2 +-Kernel: %3 %4 +- OperaÄní systém: %1 +-Architektura procesoru: %2 +-Jádro systému: %3 %4 +- +- +- Auto-Type +- Automatické vyplňování +- +- +- KeeShare (signed and unsigned sharing) +- KeeShare (podepsané a nepodepsané sdílení) +- +- +- KeeShare (only signed sharing) +- KeeShare (pouze podepsané sdílení) +- +- +- KeeShare (only unsigned sharing) +- KeeShare (pouze nepodepsané sdílení) +- +- +- YubiKey +- YubiKey +- +- +- TouchID +- TouchID +- +- +- None +- Žádné +- +- +- Enabled extensions: +- Zapnutá rozšíření: +- +- +- Cryptographic libraries: +- Kryptografické knihovny: +- +- +- Cannot generate a password and prompt at the same time! +- Není možné vytvoÅ™it a dotázat se na heslo naráz! +- +- +- Adds a new group to a database. +- PÅ™idá do databáze novou skupinu. +- +- +- Path of the group to add. +- Popis umístÄ›ní skupiny, kterou pÅ™idat. +- +- +- Group %1 already exists! +- Skupina %1 už existuje! +- +- +- Group %1 not found. +- Skupina %1 nenalezena. +- +- +- Successfully added group %1. +- ÚspěšnÄ› pÅ™idána skupina %1. +- +- +- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. +- Zkontrolovat, zda otisky nÄ›kterých z hesel unikly na veÅ™ejnost. Je tÅ™eba, aby SOUBOR byl popis umístÄ›ní souboru, obsahujícího výpis SHA-1 otisků uniklých hesel ve formátu HIBP, jak je k dispozici z https://haveibeenpwned.com/Passwords. +- +- +- FILENAME +- SOUBOR +- +- +- Analyze passwords for weaknesses and problems. +- Analyzovat hesla a vyhledat slabiny a ostatní problémy. +- +- +- Failed to open HIBP file %1: %2 +- NepodaÅ™ilo se otevřít HIBP soubor %1: %2 +- +- +- Evaluating database entries against HIBP file, this will take a while... +- Vyhodnocování databázových záznamů vůÄi HIBP souboru – chvíli potrvá… +- +- +- Close the currently opened database. +- Zavřít právÄ› otevÅ™enou databázi. +- +- +- Display this help. +- Zobrazit tuto nápovÄ›du. +- +- +- slot +- slot +- +- +- Invalid word count %1 +- Neplatný poÄet slov %1 +- +- +- The word list is too small (< 1000 items) +- Seznam slov je příliÅ¡ malý (< 1000 položek) +- +- +- Exit interactive mode. +- Opustit interaktivní režim. +- +- +- Exports the content of a database to standard output in the specified format. +- Exportuje obsah databáze na standardní výstup v zadaném formátu. +- +- +- Unable to export database to XML: %1 +- Nedaří se exportovat databázi do XML: %1 +- +- +- Unsupported format %1 +- Nepodporovaný formát %1 +- +- +- Use numbers +- Použít Äísla +- +- +- Invalid password length %1 +- Neplatná délka hesla %1 +- +- +- Display command help. +- Zobrazit nápovÄ›du k příkazu +- +- +- Available commands: +- Příkazy k dispozici: +- +- +- Import the contents of an XML database. +- Importovat obsah XML databáze. +- +- +- Path of the XML database export. +- Popis umístÄ›ní XML souboru pro export z databáze. +- +- +- Path of the new database. +- Popis umístÄ›ní nové databáze. +- +- +- Successfully imported database. +- ÚspěšnÄ› naimportovaná databáze. +- +- +- Unknown command %1 +- Neznámý příkaz %1 +- +- +- Flattens the output to single lines. +- ZploÅ¡tí výstup do jediných řádek. +- +- +- Only print the changes detected by the merge operation. +- Vypsat pouze zmÄ›ny zjiÅ¡tÄ›né operací slouÄení. +- +- +- Yubikey slot for the second database. +- Slož na Yubikey pro druhou databázi. +- +- +- Successfully merged %1 into %2. +- %1 úspěšnÄ› slouÄeno do %2. +- +- +- Database was not modified by merge operation. +- Databáze nebyla operací sluÄování upravena. +- +- +- Moves an entry to a new group. +- PÅ™esune záznam do nové skupiny. +- +- +- Path of the entry to move. +- Popis umístÄ›ní záznamu, který pÅ™esunout. +- +- +- Path of the destination group. +- Popis umístÄ›ní cílové skupiny. +- +- +- Could not find group with path %1. +- Nedaří se nalézt skupinu s popisem umístÄ›ní %1. +- +- +- Entry is already in group %1. +- Záznam už se nachází ve skupinÄ› %1. +- +- +- Successfully moved entry %1 to group %2. +- Záznam %1 úspěšnÄ› pÅ™esunut do skupiny %2. +- +- +- Open a database. +- Otevřít databázi. +- +- +- Path of the group to remove. +- Popis umístÄ›ní skupiny, kterou odebrat. +- +- +- Cannot remove root group from database. +- Z databáze není možné odebrat koÅ™enovou skupinu. +- +- +- Successfully recycled group %1. +- Skupina %1 úspěšnÄ› zrecyklována. +- +- +- Successfully deleted group %1. +- ÚspěšnÄ› smazána skupina %1. +- +- +- Failed to open database file %1: not found +- NepodaÅ™ilo se otevřít soubor s databází %1: nenalezen +- +- +- Failed to open database file %1: not a plain file +- NepodaÅ™ilo se otevřít soubor s databází %1: nejedná se o holý soubor +- +- +- Failed to open database file %1: not readable +- NepodaÅ™ilo se otevřít soubor s databází %1: není přístupný pro Ätení +- +- +- Enter password to unlock %1: +- Zadejte heslo pro odemÄení %1: +- +- +- Invalid YubiKey slot %1 +- Neplatný slot na YubiKey %1 +- +- +- Enter password to encrypt database (optional): +- Zadejte heslo pro zaÅ¡ifrování databáze (volitelné): +- +- +- HIBP file, line %1: parse error +- HIBP soubor, řádek %1: chyba zpracovávání +- +- +- Secret Service Integration +- Zapnout napojení na Secret Service +- +- +- User name +- Uživatelské jméno +- +- +- Password for '%1' has been leaked %2 time(s)! +- Otisk z hesla pro „%1“ unikl %2 krát!Otisk z hesla pro „%1“ unikl %2 krát!Otisk z hesla pro „%1“ unikl %2 krát!Otisk z hesla pro „%1“ unikl %2 krát! +- +- +- Invalid password generator after applying all options +- Po uplatnÄ›ní vÅ¡ech možností není vytváření hesel platné +- +- +- Show the protected attributes in clear text. +- Zobrazit chránÄ›né atributy v Äitelném textu. +- +- +- Browser Plugin Failure +- Selhání zásuvného modulu pro webový prohlížeÄ +- +- +- Could not save the native messaging script file for %1. +- Nedaří se uložit soubor se skriptem pro posílání zpráv mezi webovým prohlížeÄem a desktopovou aplikací (native messaging) pro %1. +- +- +- Copy the given attribute to the clipboard. Defaults to "password" if not specified. +- Zkopírovat daný atribut do schránky. Pokud není urÄen, je jako výchozí použito „heslo“. +- +- +- Copy the current TOTP to the clipboard (equivalent to "-a totp"). +- Zkopírovat stávající TOTP do schránky (totožné s "=a totp"). +- +- +- Copy an entry's attribute to the clipboard. +- Zkopírovat atribut záznamu do schránky. +- +- +- ERROR: Please specify one of --attribute or --totp, not both. +- CHYBA: Zadejte buÄ --attribute nebo --totp, ne obojí. +- +- +- ERROR: attribute %1 is ambiguous, it matches %2. +- CHYBA: atribut %1 není jednoznaÄný, shoduje se s %2. +- +- +- Attribute "%1" not found. +- Atribut „%1“ nenalezen. +- +- +- Entry's "%1" attribute copied to the clipboard! +- Atribut „%1“ dané položky zkopírován do schránky! +- +- +- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). +- Slot na Yubikey a volitelnÄ› sériové Äíslo sloužící k přístupu do databáze (napÅ™., 1:7370001). +- +- +- slot[:serial] +- slot[:serial] +- +- +- Target decryption time in MS for the database. +- Cílový Äas rozÅ¡ifrování (v ms) pro databázi. +- +- +- time +- Äas +- +- +- Set the key file for the database. +- Nastavit soubor s klíÄem pro databázi. +- +- +- Set a password for the database. +- Nastavit heslo pro databázi. +- +- +- Invalid decryption time %1. +- Neplatný Äas rozÅ¡ifrování %1. +- +- +- Target decryption time must be between %1 and %2. +- Je tÅ™eba, aby cílový Äas rozÅ¡ifrování byl z rozmezí %1 až %2. +- +- +- Failed to set database password. +- NepodaÅ™ilo se nastavit heslo databáze. +- +- +- Benchmarking key derivation function for %1ms delay. +- Testování výkonnosti funkce odvozování klíÄe pro prodlevu %1ms. +- +- +- Setting %1 rounds for key derivation function. +- Nastavuje se %1 průchodů pro funkci pro odvození klíÄe. +- +- +- error while setting database key derivation settings. +- chyba pÅ™i nastavování odvozování klíÄe databáze. +- +- +- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. +- Formát který použít pro export. Možnosti jsou „xml“ nebo „csv“. Výchozí je „xml“. +- +- +- Unable to import XML database: %1 +- Nedaří se importovat XML databázi: %1 +- +- +- Show a database's information. +- Zobrazit informace o databázi. +- +- +- UUID: +- UUID: +- +- +- Name: +- Název: +- +- +- Description: +- Popis: +- +- +- Cipher: +- Å ifra: +- +- +- KDF: +- KDF: +- +- +- Recycle bin is enabled. +- KoÅ¡ je zapnutý. +- +- +- Recycle bin is not enabled. +- KoÅ¡ není zapnut. +- +- +- Invalid command %1. +- Neplatný příkaz %1. +- +- +- Invalid YubiKey serial %1 +- Neplatné sériové Äíslo %1 YubiKey +- +- +- Please touch the button on your YubiKey to continue… +- Pokud chcete pokraÄovat, dotknÄ›te se tlaÄítka na vaÅ¡em YubiKey… +- +- +- Do you want to create a database with an empty password? [y/N]: +- Opravdu chcete vytvoÅ™it databáze s nevyplnÄ›ným heslem? [a/N]: +- +- +- Repeat password: +- Zopakujte heslo: +- +- +- Error: Passwords do not match. +- Chyba: Zadáná hesla se neshodují. +- +- +- All clipping programs failed. Tried %1 +- +- VÅ¡echny programy pro oÅ™ezání selhaly. VyzkouÅ¡eno %1 +- +- +- AES (%1 rounds) +- AES (%1 průchodů) +- +- +- AES 256-bit +- AES 256-bit +- +- +- Twofish 256-bit +- Twofish 256-bit +- +- +- ChaCha20 256-bit +- ChaCha20: 256-bit {20 256-?} +- +- +- Benchmark %1 delay +- Prodleva záložky %1 +- +- +- %1 ms +- milliseconds +- %1 ms%1 ms%1 ms%1 ms +- +- +- %1 s +- seconds +- %1 s%1 s%1 s%1 s +- +- +- path to a custom local config file +- umístÄ›ní vlastního lokálního souboru s nastaveními +- +- +- WARNING: You are using an old key file format which KeePassXC may +-stop supporting in the future. +- +-Please consider generating a new key file. +- VAROVÃNÃ: Používáte starý formát souboru s klíÄem, který může KeePassXC +-pÅ™estat v budoucnu podporovat. +- +-Zvažte prosím vytvoÅ™ení nového souboru s klíÄem. +- +- +- Argon2%1 (%2 rounds, %3 KB) +- Argon2%1 (%2 průchody, %3 KB) +- +- +- Argon2d (KDBX 4 – recommended) +- Argon2d (KDBX 4 – doporuÄeno) +- +- +- Argon2id (KDBX 4) +- Argon2id (KDBX 4) +- +- +- TOTP +- TOTP +- +- +- Icon +- Ikona +- +- +- Unsupported key file version: %1 +- Nepodporovaná verze souboru s klíÄem: %1 +- +- +- Checksum mismatch! Key file may be corrupt. +- Kontrolní souÄet se neshoduje! Soubor s klíÄem může být poÅ¡kozený. +- +- +- Unexpected key file data! Key file may be corrupt. +- NeoÄekávaná data v souboru s klíÄem! Soubor s klíÄem může být poÅ¡kozený. +- +- +- +- QtIOCompressor +- +- Internal zlib error when compressing: +- BÄ›hem komprimace se vyskytla vnitÅ™ní chyba v knihovnÄ› zlib: +- +- +- Error writing to underlying device: +- DoÅ¡lo k chybÄ› pÅ™i zápisu na zařízení, na kterém se nachází: +- +- +- Error opening underlying device: +- DoÅ¡lo k chybÄ› pÅ™i otevírání zařízení, na kterém se nachází: +- +- +- Error reading data from underlying device: +- DoÅ¡lo k chybÄ› pÅ™i Ätení dat ze zařízení, na kterém se nachází: +- +- +- Internal zlib error when decompressing: +- BÄ›hem rozbalování se vyskytla vnitÅ™ní chyba v knihovnÄ› zlib: +- +- +- +- QtIOCompressor::open +- +- The gzip format not supported in this version of zlib. +- Použitý formát gzip komprese není podporován verzí knihovny zlib, která je právÄ› používána na tomto systému. +- +- +- Internal zlib error: +- VnitÅ™ní chyba v knihovnÄ› zlib: +- +- +- +- ReportsWidgetHealthcheck +- +- Also show entries that have been excluded from reports +- Také zobrazit položky, které byly vynechány z pÅ™ehledů +- +- +- Hover over reason to show additional details. Double-click entries to edit. +- NajeÄte ukazatelem myÅ¡i a zobrazí se další podrobnosti. Položky upravíte dvojklikem. +- +- +- Bad +- Password quality +- Å patné +- +- +- Bad — password must be changed +- Å patné — heslo je nutné zmÄ›nit +- +- +- Poor +- Password quality +- Velmi slabá +- +- +- Poor — password should be changed +- Slabé — heslo by se mÄ›lo zmÄ›nit +- +- +- Weak +- Password quality +- Slabá +- +- +- Weak — consider changing the password +- Slabé — zvažte zmÄ›nu hesla +- +- +- (Excluded) +- (VylouÄeno) +- +- +- This entry is being excluded from reports +- Tato položka je vynechána z pÅ™ehledů +- +- +- Please wait, health data is being calculated... +- ÄŒekejte, probíhá výpoÄet pro kontrolu stavu... +- +- +- Congratulations, everything is healthy! +- Gratulujeme – vÅ¡e je v pořádku! +- +- +- Title +- Titulek +- +- +- Path +- Popis umístÄ›ní +- +- +- Score +- Hodnocení +- +- +- Reason +- Důvod +- +- +- Edit Entry... +- Upravit záznam… +- +- +- Exclude from reports +- Vynechat z pÅ™ehledů +- +- +- +- ReportsWidgetHibp +- +- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. +- VÃSTRAHA: Toto hlášení vyžaduje odeslání informací online službÄ› Have I Been Pwned (https://haveibeenpwned.com). Pokud budete pokraÄovat, z hesel ve vaší databázi budou vytvoÅ™eny kryptografické otisky a prvních pÄ›t znaků tÄ›chto otisků bude zabezpeÄenÄ› odesláno na tuto službu. VaÅ¡e databáze zůstává bezpeÄná a z takovéto informace ji není možné rekonstruovat. NicménÄ› poÄet hesel, které odeÅ¡lete a IP adresa bude této službÄ› exponována. +- +- +- Perform Online Analysis +- Provézt analýzu online +- +- +- Also show entries that have been excluded from reports +- Také zobrazit položky, které byly vynechány z pÅ™ehledů +- +- +- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. +- Toto sestavení KeePassXC nemá k dispozici síťové funkce. TÄ›ch je zapotÅ™ebí pro kontrolu vaÅ¡ich hesel vůÄi databázi Have I Been Pwned. +- +- +- Congratulations, no exposed passwords! +- Gratulujeme, žádná uniklá hesla! +- +- +- Title +- Titulek +- +- +- Path +- Popis umístÄ›ní +- +- +- Password exposed… +- Heslo exponováno… +- +- +- (Excluded) +- (VylouÄeno) +- +- +- This entry is being excluded from reports +- Tato položka je vynechána z pÅ™ehledů +- +- +- once +- jednou +- +- +- up to 10 times +- až 10 krát +- +- +- up to 100 times +- až 100 krát +- +- +- up to 1000 times +- až 1000 krát +- +- +- up to 10,000 times +- až 10 000 krát +- +- +- up to 100,000 times +- až 100 000 krát +- +- +- up to a million times +- až milionkrát +- +- +- millions of times +- milionkrát +- +- +- Edit Entry... +- Upravit záznam… +- +- +- Exclude from reports +- Vynechat z pÅ™ehledů +- +- +- +- ReportsWidgetStatistics +- +- Hover over lines with error icons for further information. +- Další informace získáte najetím kurzoru nad řádky s ikonou chyb. +- +- +- Name +- Název +- +- +- Value +- Hodnota +- +- +- Please wait, database statistics are being calculated... +- ÄŒekejte, probíhá výpoÄet statistik o databázi… +- +- +- Database name +- Název databáze +- +- +- Description +- Popis +- +- +- Location +- UmístÄ›ní +- +- +- Last saved +- Naposledy uloženo +- +- +- Unsaved changes +- Neuložené zmÄ›ny +- +- +- yes +- ano +- +- +- no +- ne +- +- +- The database was modified, but the changes have not yet been saved to disk. +- Databáze byla zmÄ›nÄ›na, ale zmÄ›ny doposud nebyly uloženy na disk. +- +- +- Number of groups +- PoÄet skupin +- +- +- Number of entries +- PoÄet položek +- +- +- Number of expired entries +- PoÄet záznamů, kterým skonÄila platnost +- +- +- The database contains entries that have expired. +- Databáze obsahuje záznamy, kterým skonÄila platnost. +- +- +- Unique passwords +- Hesel, která se neopakují +- +- +- Non-unique passwords +- Hesel, které se opakují +- +- +- More than 10% of passwords are reused. Use unique passwords when possible. +- Více než 10% hesel je použito na více místech. Pokud je to jen trochu možné, používejte pro různé úÄely různá hesla. +- +- +- Maximum password reuse +- Kolikrát nejvýše je možné opakovat použití hesla +- +- +- Some passwords are used more than three times. Use unique passwords when possible. +- NÄ›která hesla jsou použita více než tÅ™ikrát. Pokud možno používejte pro každou vÄ›c jiné heslo. +- +- +- Number of short passwords +- PoÄet krátkých hesel +- +- +- Recommended minimum password length is at least 8 characters. +- DoporuÄené minimum délky hesla je alespoň 8 znaků. +- +- +- Number of weak passwords +- PoÄet slabých hesel +- +- +- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. +- DoporuÄovat používání dlouhých, náhodných hesel s hodnocením „dobré“ nebo „excelentní“. +- +- +- Entries excluded from reports +- Položky vynechané z pÅ™ehledů +- +- +- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. +- Položky jsou vynechány z hlášení, napÅ™. protože se o nich ví, že mají slabá hesla není nezbytnÄ› problém, ale mÄ›li byste si je ohlídat. +- +- +- Average password length +- PrůmÄ›rná délka hesla +- +- +- %1 characters +- %1 znaků +- +- +- Average password length is less than ten characters. Longer passwords provide more security. +- PrůmÄ›rná délka hesla je kratší, než deset znaků. Delší hesla poskytují vyšší zabezpeÄení. +- +- +- +- SSHAgent +- +- Agent connection failed. +- PÅ™ipojení k agentovi se nezdaÅ™ilo. +- +- +- Agent protocol error. +- Chyba protokolu agenta. +- +- +- No agent running, cannot add identity. +- Není spuÅ¡tÄ›ný žádný agent, identitu nelze pÅ™idat. +- +- +- No agent running, cannot remove identity. +- Není spuÅ¡tÄ›ný žádný agent, identitu není možné odebrat. +- +- +- Agent refused this identity. Possible reasons include: +- Agent tuto identitu odmítl. Mezi možné důvody patří: +- +- +- The key has already been added. +- KlÃ­Ä už byl pÅ™idán. +- +- +- Restricted lifetime is not supported by the agent (check options). +- Omezená životnost není podporována agentem (zkontrolujte volby). +- +- +- A confirmation request is not supported by the agent (check options). +- Požadavek na potvrzení není podporován agentem (zkontrolujte volby). +- +- +- Key identity ownership conflict. Refusing to add. +- Konflikt vlastnictví identity klíÄe. PÅ™idání odmítnuto. +- +- +- No agent running, cannot list identities. +- Není spuÅ¡tÄ›ný žádný agent, není proto možné vypsat identity +- +- +- +- SearchHelpWidget +- +- Search Help +- NápovÄ›da ke hledání +- +- +- Search terms are as follows: [modifiers][field:]["]term["] +- Pojmy hledejte následovnÄ›: [modifikátory][kolonka:]["]pojem["] +- +- +- Every search term must match (ie, logical AND) +- Je tÅ™eba shody v každém hledaném termínu (tj, logické A) +- +- +- Modifiers +- Modifikátory +- +- +- exclude term from results +- vynechat pojem z výsledků +- +- +- match term exactly +- hledat pÅ™esnou shodu s pojmem +- +- +- use regex in term +- použít v pojmu regulární výraz +- +- +- Fields +- Kolonky +- +- +- Term Wildcards +- Zástupné znaky pojmu +- +- +- match anything +- shoda s Äímkoli +- +- +- match one +- shoda s jedním +- +- +- logical OR +- logické NEBO +- +- +- Examples +- Příklady +- +- +- +- SearchWidget +- +- Search +- Hledat +- +- +- Limit search to selected group +- Omezit hledání na oznaÄenou skupinu +- +- +- Search Help +- NápovÄ›da ke hledání +- +- +- Search (%1)... +- Search placeholder text, %1 is the keyboard shortcut +- Hledat (%1)… +- +- +- Case sensitive +- RozliÅ¡ovat malá/velká písmena +- +- +- +- SettingsWidgetFdoSecrets +- +- Options +- Možnosti +- +- +- Enable KeepassXC Freedesktop.org Secret Service integration +- Zapnout napojení KeepassXC na Freedesktop Secret Service +- +- +- General +- Obecné +- +- +- Show notification when credentials are requested +- PÅ™i vyžádání si pÅ™ihlaÅ¡ovacích údajů zobrazit oznámení +- +- +- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> +- <html><head/><body></p>Pokud je pro databázi zapnutý KoÅ¡, záznamy budou pÅ™esouvány přímo do nÄ›j. Jinak budou bez potvrzování smazány.</p><p>Pokud je položka odkazována z jiné, budete ale dotázáni.</p></body></html> +- +- +- Exposed database groups: +- Vystavené skupiny databáze: +- +- +- Authorization +- Pověření +- +- +- These applications are currently connected: +- Tyto aplikace jsou aktuálnÄ› pÅ™ipojené: +- +- +- Don't confirm when entries are deleted by clients +- Nepotvrzovat pokud jsou položky mazané z klientů +- +- +- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. +- <b>Chyba:</b> NepodaÅ™ilo se pÅ™ipojit k DBus. Zkontrolujte nastavení DBus. +- +- +- <b>Warning:</b> +- <b>Varování:</b> +- +- +- Save current changes to activate the plugin and enable editing of this section. +- Aby byl zásuvný modul aktivován a zapnuto upravování této sekce, uložte stávající zmÄ›ny. +- +- +- +- SettingsWidgetKeeShare +- +- Active +- Aktivní +- +- +- Allow export +- Umožnit export +- +- +- Allow import +- Umožnit import +- +- +- Own certificate +- Vlastní certifikát +- +- +- Fingerprint: +- Otisk: +- +- +- Certificate: +- Certifikát: +- +- +- Signer +- Podepsal +- +- +- Key: +- KlíÄ: +- +- +- Generate +- TvoÅ™ +- +- +- Import +- Importovat +- +- +- Export +- Export +- +- +- Imported certificates +- Importované certifikáty +- +- +- Trust +- DůvÄ›ra +- +- +- Ask +- Ptát se +- +- +- Untrust +- Nevěřit +- +- +- Remove +- Odebrat +- +- +- Path +- Popis umístÄ›ní +- +- +- Status +- Stav +- +- +- Fingerprint +- Otisk +- +- +- Certificate +- Certifikát +- +- +- Trusted +- DůvÄ›ryhodný +- +- +- Untrusted +- NedůvÄ›ryhodný +- +- +- Unknown +- Neznámý +- +- +- key.share +- Filetype for KeeShare key +- key.share +- +- +- KeeShare key file +- Soubor s klíÄem pro KeeShare +- +- +- All files +- VeÅ¡keré soubory +- +- +- Select path +- Vybrat umístÄ›ní +- +- +- Exporting changed certificate +- Exportování zmÄ›nÄ›ného certifikátu +- +- +- The exported certificate is not the same as the one in use. Do you want to export the current certificate? +- Exportovaný certifikát se liší od toho, který je používán. Chcete exportovat stávající certifikát? +- +- +- Signer: +- Podepsal(a): +- +- +- Allow KeeShare imports +- Umožnit KeeShare importy +- +- +- Allow KeeShare exports +- Umožnit KeeShare exporty +- +- +- Only show warnings and errors +- Zobrazovat pouze varování a chyby +- +- +- Key +- KlÃ­Ä +- +- +- Signer name field +- Kolonka pro jméno podepisujícího +- +- +- Generate new certificate +- VytvoÅ™it nový certifikát +- +- +- Import existing certificate +- Importovat existující certifikát +- +- +- Export own certificate +- Exportovat vlastní certifikát +- +- +- Known shares +- Známá sdílení +- +- +- Trust selected certificate +- Důvěřovat oznaÄenému certifikátu +- +- +- Ask whether to trust the selected certificate every time +- Ptát se pokaždé zda oznaÄenému certifikátu důvěřujete +- +- +- Untrust selected certificate +- PÅ™estat důvěřovat oznaÄenému certifikátu +- +- +- Remove selected certificate +- Odebrat oznaÄený certifikát +- +- +- +- ShareExport +- +- Overwriting signed share container is not supported - export prevented +- PÅ™epsání podepsaného kontejneru sdílení není podporováno – exportu zabránÄ›no +- +- +- Could not write export container (%1) +- Nedaří se zapsat exportní kontejner (%1) +- +- +- Could not embed signature: Could not open file to write (%1) +- Nedaří se zapouzdÅ™it podpis: Soubor se nedaří otevřít pro zápis (%1) +- +- +- Could not embed signature: Could not write file (%1) +- Nedaří se zapouzdÅ™it podpis: Do souboru se nedaří zapsat (%1) +- +- +- Could not embed database: Could not open file to write (%1) +- Nedaří se zapouzdÅ™it databázi: Soubor se nedaří otevřít pro zápis (%1) +- +- +- Could not embed database: Could not write file (%1) +- Nedaří se zapouzdÅ™it databázi: Do souboru se nedaří zapsat (%1) +- +- +- Overwriting unsigned share container is not supported - export prevented +- PÅ™epsání nepodepsaného kontejneru sdílení není podporováno – exportu zabránÄ›no +- +- +- Could not write export container +- Nedaří se zapsat do exportního kontejneru +- +- +- Unexpected export error occurred +- DoÅ¡lo k neoÄekávané chybÄ› exportu +- +- +- +- ShareImport +- +- Import from container without signature +- Importovat z kontejneru bez podpisu +- +- +- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? +- Není možné ověřit zdroj sdíleného kontejneru protože není podepsán. Opravdu chcete importovat z %1? +- +- +- Import from container with certificate +- Importovat z kontejneru s certifikátem +- +- +- Do you want to trust %1 with the fingerprint of %2 from %3? +- Věříte %1 s otiskem %2 od %3? {1 ?} {2 ?} +- +- +- Not this time +- Tentokrát ne +- +- +- Never +- Nikdy +- +- +- Always +- Vždy +- +- +- Just this time +- Jen pro teÄ +- +- +- Signed share container are not supported - import prevented +- Podepsaný kontejner sdílení není podporován – importu zabránÄ›no +- +- +- File is not readable +- Soubor není Äitelný +- +- +- Invalid sharing container +- Neplatný kontejner pro sdílení +- +- +- Untrusted import prevented +- ZabránÄ›no nedůvÄ›ryhodnému importu +- +- +- Successful signed import +- Úspěšný podepsaný import +- +- +- Unsigned share container are not supported - import prevented +- Nepodepsaný kontejner sdílení není podporován – importu zabránÄ›no +- +- +- Successful unsigned import +- Úspěšný nepodepsaný import +- +- +- File does not exist +- Soubor neexistuje +- +- +- Unknown share container type +- Neznámý typ kontejneru pro sdílení +- +- +- +- ShareObserver +- +- Import from %1 failed (%2) +- Import z %1 se nezdaÅ™il (%2) +- +- +- Import from %1 successful (%2) +- Import z %1 úspěšný (%2) +- +- +- Imported from %1 +- Importováno z %1 +- +- +- Export to %1 failed (%2) +- Export do %1 se nezdaÅ™il (%2) +- +- +- Export to %1 successful (%2) +- Export do %1 úspěšný (%2) +- +- +- Export to %1 +- Exportovat do %1 +- +- +- Multiple import source path to %1 in %2 +- Popis umístÄ›ní zdroje pro vícero importů do %1 v %2 +- +- +- Conflicting export target path %1 in %2 +- Kolidující popis umístÄ›ní %1 cíle exportu v %2 +- +- +- +- TotpDialog +- +- Timed Password +- ÄŒasované heslo +- +- +- 000000 +- 000000 +- +- +- Copy +- Kopírovat +- +- +- Expires in <b>%n</b> second(s) +- Platnost konÄí za <b>%n</b> sekunduPlatnost konÄí za %n sekundyPlatnost konÄí za %n sekundPlatnost konÄí za %n sekundy +- +- +- +- TotpExportSettingsDialog +- +- Copy +- Kopírovat +- +- +- NOTE: These TOTP settings are custom and may not work with other authenticators. +- TOTP QR code dialog warning +- POZN.: Tato TOTP nastavení jsou uživatelsky urÄená a nemusí fungovat s ostatními nástroji pro ověřování se. +- +- +- There was an error creating the QR code. +- DoÅ¡lo k chybÄ› pÅ™i vytváření QR kódu. +- +- +- Closing in %1 seconds. +- ZavÅ™ení za %1 sekund. +- +- +- +- TotpSetupDialog +- +- Setup TOTP +- Nastavit na Äasu založené jednorázové heslo (TOTP) +- +- +- Default RFC 6238 token settings +- Výchozí nastavení RFC 6238 tokenu +- +- +- Steam token settings +- Nastavení proudového tokenu +- +- +- Use custom settings +- Použít uživatelsky urÄená nastavení +- +- +- Custom Settings +- Uživatelsky urÄená nastavení +- +- +- Time step: +- ÄŒasový krok: +- +- +- sec +- Seconds +- sek. +- +- +- Code size: +- Velikost kódu: +- +- +- Secret Key: +- Tajný klíÄ: +- +- +- Secret key must be in Base32 format +- Je tÅ™eba, aby tajný klÃ­Ä byl ve formátu Base32 +- +- +- Secret key field +- Kolonka pro tajný klÃ­Ä +- +- +- Algorithm: +- Algoritmus: +- +- +- Time step field +- Kolonka pro Äasový krok +- +- +- digits +- Äíslice +- +- +- Invalid TOTP Secret +- Neplatné TOTP tajemství +- +- +- You have entered an invalid secret key. The key must be in Base32 format. +-Example: JBSWY3DPEHPK3PXP +- Zadali jste neplatný tajný klíÄ. Je tÅ™eba, aby byl ve formátu Base32. +-Příklad: JBSWY3DPEHPK3PXP +- +- +- Confirm Remove TOTP Settings +- Potvrdit odebrání nastavení pro TOTP heslo +- +- +- Are you sure you want to delete TOTP settings for this entry? +- Opravdu chcete smazat nastavení pro TOTP heslo u tohoto záznamu? +- +- +- +- URLEdit +- +- Invalid URL +- Neplatné URL +- +- +- +- UpdateCheckDialog +- +- Checking for updates +- ZjiÅ¡Å¥ování aktualizací +- +- +- Checking for updates... +- ZjiÅ¡Å¥ování aktualizací… +- +- +- Close +- Zavřít +- +- +- Update Error! +- Chyba aktualizace! +- +- +- An error occurred in retrieving update information. +- DoÅ¡lo k chybÄ› pÅ™i získávání informací o aktualizacích. +- +- +- Please try again later. +- Zkuste to prosím znovu pozdÄ›ji. +- +- +- Software Update +- Aktualizace software +- +- +- A new version of KeePassXC is available! +- Je k dispozici nová verze KeePassXC! +- +- +- KeePassXC %1 is now available — you have %2. +- Nyní je k dispozici KeePassXC verze %1 ‒ nainstalovanou máte %2. +- +- +- Download it at keepassxc.org +- StáhnÄ›te si z keepassxc.org +- +- +- You're up-to-date! +- Používáte aktuální verzi! +- +- +- KeePassXC %1 is currently the newest version available +- KeePassXC %1 je v tuto chvíli nejnovÄ›jší dostupná verze +- +- +- +- WelcomeWidget +- +- Start storing your passwords securely in a KeePassXC database +- ZaÄnÄ›te uchovávat svá hesla bezpeÄnÄ› v KeePassXC databázi +- +- +- Create new database +- VytvoÅ™it novou databázi +- +- +- Open existing database +- Otevřít existující databázi +- +- +- Import from KeePass 1 +- Importovat z KeePass 1 +- +- +- Import from CSV +- Importovat z CSV +- +- +- Recent databases +- Nedávno otevÅ™ené databáze +- +- +- Welcome to KeePassXC %1 +- Vítejte v KeePassXC %1 +- +- +- Import from 1Password +- Importovat z 1Password +- +- +- Open a recent database +- Otevřít nedávno otevÅ™enou databázi +- +- +- +- YubiKey +- +- %1 [%2] Configured Slot - %3 +- %1 [%2] Nastavených slotů – %3 +- +- +- %1 [%2] Challenge Response - Slot %3 - %4 +- %1 [%2] Výzva-odpovÄ›Ä â€“ Slot %3 – %4 +- +- +- Press +- Stisknout +- +- +- Passive +- Pasivní +- +- +- %1 Invalid slot specified - %2 +- zadán neplatný %1 slot – %2 +- +- +- The YubiKey interface has not been initialized. +- Rozhraní YubiKey nebylo inicializováno. +- +- +- Hardware key is currently in use. +- Hardwarový klÃ­Ä je nyní využíván nÄ›Äím jiným. +- +- +- Could not find hardware key with serial number %1. Please plug it in to continue. +- NepodaÅ™ilo se nalézt hardwarový klÃ­Ä se sériovým Äíslem %1. PÅ™ipojte ho, aby bylo možné pokraÄovat. +- +- +- Hardware key timed out waiting for user interaction. +- PÅ™ekroÄen Äasový limit pro zahájení interakce uživatele s hardwarovým klíÄem. +- +- +- A USB error ocurred when accessing the hardware key: %1 +- PÅ™i pÅ™istupování k hardwarovému klíÄi doÅ¡lo k chybÄ› na USB sbÄ›rnici: %1 +- +- +- Failed to complete a challenge-response, the specific error was: %1 +- NepodaÅ™ilo se dokonÄit výzvu-odpovÄ›Ä â€“ konkrétní chyba byla: %1 +- +- +- +- YubiKeyEditWidget +- +- Refresh +- NaÄíst znovu +- +- +- YubiKey Challenge-Response +- YubiKey výzva-odpovÄ›Ä +- +- +- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- <p>Pokud vlastníte zařízení <a href="https://www.yubico.com/">YubiKey</a>, můžete ho použít jako další úroveň zabezpeÄení.</p><p>YubiKey vyžaduje aby jeden z jeho slotů byl naprogramován jako <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 výzva-odpovÄ›Ä</a>.</p> +- +- +- Refresh hardware tokens +- Znovu naÄíst hardwarová bezpeÄnostní zařízení +- +- +- Hardware key slot selection +- VýbÄ›r slotu v hardwarovém klíÄi +- +- +- Could not find any hardware keys! +- Nedaří se nalézt žádné hardwarové klíÄe! +- +- +- Selected hardware key slot does not support challenge-response! +- Zvolený slot hardwarového klíÄe nepodporuje výzvu-odpovÄ›Ä! +- +- +- Detecting hardware keys… +- ZjiÅ¡Å¥ování hardwarových klíÄů… +- +- +- No hardware keys detected +- Nenalezeny žádné hardwarové klíÄe +- +- +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_da.ts keepassxc-2.6.4-patched/share/translations/keepassx_da.ts +--- keepassxc-2.6.4-orig/share/translations/keepassx_da.ts 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/translations/keepassx_da.ts 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7868 +0,0 @@ +- +- +- AboutDialog +- +- About KeePassXC +- Om KeePassXC +- +- +- About +- Om +- +- +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- Rapportér fejl pÃ¥: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- +- +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- KeePassXC distribueres under betingelserne i GNU General Public License (GPL) version 2 eller (efter eget valg) version 3. +- +- +- Contributors +- Bidragsydere +- +- +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Se bidrag pÃ¥ GitHub</a> +- +- +- Debug Info +- Fejlsøgningsinformation +- +- +- Include the following information whenever you report a bug: +- Inkludér følgende information nÃ¥r du rapporterer en fejl: +- +- +- Copy to clipboard +- Kopiér til udklipsholder +- +- +- Project Maintainers: +- Projektet vedligeholdes af: +- +- +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- Særlig tak fra KeePassXC-holdet gÃ¥r til debfx for at udvikle den oprindelige KeePassX. +- +- +- +- AgentSettingsWidget +- +- Use OpenSSH for Windows instead of Pageant +- Brug OpenSSH til Windows i stedet for Pageant +- +- +- Enable SSH Agent integration +- Aktivér SSH-agent (kræver genstart) +- +- +- SSH_AUTH_SOCK value +- SSH_AUTH_SOCK-værdi +- +- +- SSH_AUTH_SOCK override +- SSH_AUTH_SOCK-overstyring +- +- +- (empty) +- (tom) +- +- +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- Ingen SSH+agent socket tilgængelig. Sørg enten for at SSH_AUTH_SOCK eksisterer eller opsæt en overstyring. +- +- +- SSH Agent connection is working! +- SSH-agent-forbindelsen virker! +- +- +- +- ApplicationSettingsWidget +- +- Application Settings +- Programindstillinger +- +- +- General +- Generelt +- +- +- Security +- Sikkerhed +- +- +- Access error for config file %1 +- Adgangsfejl for konfigurationsfil %1 +- +- +- Icon only +- Kun ikon +- +- +- Text only +- Kun tekst +- +- +- Text beside icon +- Tekst ved siden af ikon +- +- +- Text under icon +- Tekst uden ikon +- +- +- Follow style +- Følg stil +- +- +- Reset Settings? +- Nulstil indstillingerne? +- +- +- Are you sure you want to reset all general and security settings to default? +- Er du sikker pÃ¥ at du vil nulstille alle generelle og sikkerhedsindstillinger til standardværdierne? +- +- +- Monochrome (light) +- Monokrom (lys) +- +- +- Monochrome (dark) +- Monokrom (mørk) +- +- +- Colorful +- Farverig +- +- +- You must restart the application to set the new language. Would you like to restart now? +- +- +- +- +- ApplicationSettingsWidgetGeneral +- +- Basic Settings +- Grundlæggende indstillinger +- +- +- Startup +- Opstart +- +- +- Start only a single instance of KeePassXC +- Start kun én instans af KeePassXC +- +- +- Minimize window at application startup +- Minimer vindue ved opstart +- +- +- File Management +- FilhÃ¥ndtering +- +- +- Backup database file before saving +- Sikkerhedskopiér databasefilen inden den gemmes +- +- +- Automatically save after every change +- Gem automatisk nÃ¥r der foretages ændringer +- +- +- Automatically reload the database when modified externally +- Genindlæs automatisk databasen nÃ¥r den er blevet ændret eksternt +- +- +- Entry Management +- PosthÃ¥ndtering +- +- +- Use group icon on entry creation +- Brug gruppeikon ved oprettelse af post +- +- +- Minimize instead of app exit +- Minimer i stedet for at afslutte programmet +- +- +- Show a system tray icon +- Vis et ikon i systembakken +- +- +- Hide window to system tray when minimized +- Skjul vindue i systembakken nÃ¥r det er minimeret +- +- +- Auto-Type +- Autoskriv +- +- +- Use entry title to match windows for global Auto-Type +- Brug postens titel til at matche vinduer for global autoskriv +- +- +- Use entry URL to match windows for global Auto-Type +- Brug postens URL til at matche vinduer for global autoskriv +- +- +- Always ask before performing Auto-Type +- Spørg altid før autoskriv udføres +- +- +- ms +- Milliseconds +- ms +- +- +- Movable toolbar +- Værktøjslinje kan flyttes +- +- +- Remember previously used databases +- Husk tidligere anvendte databaser +- +- +- Load previously open databases on startup +- Indlæs tidligere anvendte databaser ved opstart +- +- +- Remember database key files and security dongles +- Husk databasenøglefiler og sikkerhedsdongler +- +- +- Check for updates at application startup once per week +- Søg efter opdateringer ved programstart en gang ugentligt +- +- +- Include beta releases when checking for updates +- Medtag beta-udgivelser nÃ¥r der søges efter opdateringer +- +- +- Language: +- Sprog: +- +- +- (restart program to activate) +- (genstart program for at aktivere) +- +- +- Minimize window after unlocking database +- +- +- +- Minimize when opening a URL +- +- +- +- Hide window when copying to clipboard +- +- +- +- Minimize +- +- +- +- Drop to background +- +- +- +- Favicon download timeout: +- +- +- +- Website icon download timeout in seconds +- +- +- +- sec +- Seconds +- sek +- +- +- Toolbar button style +- +- +- +- Language selection +- +- +- +- Global auto-type shortcut +- +- +- +- Auto-type character typing delay milliseconds +- +- +- +- Auto-type start delay milliseconds +- +- +- +- Automatically launch KeePassXC at system startup +- +- +- +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- +- +- +- User Interface +- +- +- +- Toolbar button style: +- +- +- +- Use monospaced font for notes +- +- +- +- Tray icon type: +- +- +- +- Reset settings to default… +- +- +- +- Auto-Type typing delay: +- +- +- +- Global Auto-Type shortcut: +- +- +- +- Auto-Type start delay: +- +- +- +- Automatically save when locking database +- +- +- +- Automatically save non-data changes when locking database +- +- +- +- Tray icon type +- +- +- +- +- ApplicationSettingsWidgetSecurity +- +- Timeouts +- Timeouts +- +- +- Clear clipboard after +- Ryd udklipsholder efter +- +- +- sec +- Seconds +- sek +- +- +- Lock databases after inactivity of +- LÃ¥s databaserne efter inaktivitet i +- +- +- min +- min +- +- +- Forget TouchID after inactivity of +- Glem TouchID efter inaktivitet pÃ¥ +- +- +- Convenience +- Bekvemmelighed +- +- +- Lock databases when session is locked or lid is closed +- LÃ¥s databaser nÃ¥r sessionen lÃ¥ses eller lÃ¥get lukkes +- +- +- Forget TouchID when session is locked or lid is closed +- Glem TouchID nÃ¥r sessionen lÃ¥ses eller lÃ¥get lukkes +- +- +- Lock databases after minimizing the window +- LÃ¥s databaser efter vinduet er blevet minimeret +- +- +- Re-lock previously locked database after performing Auto-Type +- LÃ¥s tidligere lÃ¥ste databaser igen efter udførsel af autoskriv +- +- +- Hide passwords in the entry preview panel +- Skjul adgangskoder i panelet til forhÃ¥ndsvisning af post +- +- +- Hide entry notes by default +- Skjul postens bemærkninger som standard +- +- +- Privacy +- Privatliv +- +- +- Use DuckDuckGo service to download website icons +- +- +- +- Clipboard clear seconds +- +- +- +- Touch ID inactivity reset +- +- +- +- Database lock timeout seconds +- +- +- +- min +- Minutes +- min +- +- +- Clear search query after +- +- +- +- Require password repeat when it is visible +- +- +- +- Hide passwords when editing them +- +- +- +- Use placeholder for empty password fields +- +- +- +- +- AutoType +- +- Couldn't find an entry that matches the window title: +- Kunne ikke finde en post, der matcher vinduets titel: +- +- +- Auto-Type - KeePassXC +- Autoskriv - KeePassXC +- +- +- Auto-Type +- Autoskriv +- +- +- The Syntax of your Auto-Type statement is incorrect! +- Syntaksen af dit autoskriv-udtryk er forkert! +- +- +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- Denne autoskriv-kommando indholder en meget lang pause. Er du sikker pÃ¥, at du vil fortsætte? +- +- +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- Denne autoskriv-kommando indholder meget langsomme tastetryk. Er du sikker pÃ¥, at du vil fortsætte? +- +- +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- Denne autoskriv-kommando indholder argumenter, som er gentaget ofte. Er du sikker pÃ¥, at du vil fortsætte? +- +- +- Permission Required +- +- +- +- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. +- +- +- +- +- AutoTypeAssociationsModel +- +- Window +- Vindue +- +- +- Sequence +- Sekvens +- +- +- Default sequence +- Standardsekvens +- +- +- +- AutoTypeMatchModel +- +- Group +- Gruppe +- +- +- Title +- Titel +- +- +- Username +- Brugernavn +- +- +- Sequence +- Sekvens +- +- +- +- AutoTypeMatchView +- +- Copy &username +- Kopiér &brugernavn +- +- +- Copy &password +- Kopiér adgangsk&ode +- +- +- +- AutoTypePlatformMac +- +- Permission Required +- +- +- +- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. +- +- +- +- +- AutoTypeSelectDialog +- +- Auto-Type - KeePassXC +- Autoskriv - KeePassXC +- +- +- Select entry to Auto-Type: +- Vælg post til autoskriv: +- +- +- Search... +- Søg... +- +- +- +- BrowserAccessControlDialog +- +- KeePassXC - Browser Access Request +- +- +- +- %1 is requesting access to the following entries: +- +- +- +- Remember access to checked entries +- +- +- +- Remember +- +- +- +- Allow access to entries +- +- +- +- Allow Selected +- +- +- +- Deny All +- +- +- +- Disable for this site +- +- +- +- +- BrowserEntrySaveDialog +- +- KeePassXC-Browser Save Entry +- KeePassXC-Browser gem post +- +- +- Ok +- Ok +- +- +- Cancel +- Annuller +- +- +- You have multiple databases open. +-Please select the correct database for saving credentials. +- Du har flere databaser Ã¥bne. +-Venligst vælg den korrekte database for at gemme loginoplysninger. +- +- +- +- BrowserService +- +- KeePassXC: New key association request +- KeePassXC: Ny anmodning om nøgletilknytning +- +- +- Save and allow access +- Gem og tillad adgang +- +- +- KeePassXC: Overwrite existing key? +- KeePassXC: Overskriv eksisterende nøgle? +- +- +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- En delt krypteringsnøgle med navnet "%1" eksisterer allerede. +-Vil du overskrive den? +- +- +- KeePassXC: Update Entry +- KeePassXC: Opdater post +- +- +- Do you want to update the information in %1 - %2? +- Vil du opdatere oplysningerne i %1 - %2? +- +- +- Abort +- Afbryd +- +- +- Converting attributes to custom data… +- Konverterer attributter til tilpasset data … +- +- +- KeePassXC: Converted KeePassHTTP attributes +- KeePassXC: Konverterede KeePassHTTP-attributter +- +- +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- Det lykkedes at konvertere attributter fra %1 post(er). +-Flyttede %2 nøgler til tilpasset data. +- +- +- Successfully moved %n keys to custom data. +- Det lykkedes at flytte %n nøgle til tilpasset data.Det lykkedes at flytte %n nøgler til tilpasset data. +- +- +- KeePassXC: No entry with KeePassHTTP attributes found! +- KeePassXC: Fandt ingen post med KeePassHTTP-attributter! +- +- +- The active database does not contain an entry with KeePassHTTP attributes. +- Den aktive database indeholder ikke en post med KeePassHTTP-attributter. +- +- +- KeePassXC: Legacy browser integration settings detected +- KeePassXC: Registreret udgÃ¥et browserintegritetindstillinger +- +- +- KeePassXC: Create a new group +- KeePassXC: Opret en ny gruppe +- +- +- A request for creating a new group "%1" has been received. +-Do you want to create this group? +- +- Modtog en anmodning om at oprette en ny gruppe "%1". +-Vil du oprette gruppen? +- +- +- +- Your KeePassXC-Browser settings need to be moved into the database settings. +-This is necessary to maintain your current browser connections. +-Would you like to migrate your existing settings now? +- Dine indstillinger for KeePassXC-Browser skal flyttes ind i databaseindstillingerne. +-Det er nødvendigt for at vedligeholde dine nuværende browserforbindelser. +-Vil du migrere dine eksisterende indstillinger nu? +- +- +- Don't show this warning again +- Vis ikke denne advarsel igen +- +- +- You have received an association request for the following database: +-%1 +- +-Give the connection a unique name or ID, for example: +-chrome-laptop. +- +- +- +- +- BrowserSettingsWidget +- +- Dialog +- Dialog +- +- +- This is required for accessing your databases with KeePassXC-Browser +- Dette er nødvendigt for at tilgÃ¥ din database med KeePassXC-Browser +- +- +- Enable browser integration +- +- +- +- General +- Generelt +- +- +- Browsers installed as snaps are currently not supported. +- +- +- +- Enable integration for these browsers: +- Aktivér integritet for disse browsere: +- +- +- Vivaldi +- +- +- +- &Edge +- +- +- +- Firefox +- +- +- +- Tor Browser +- +- +- +- Brave +- +- +- +- Google Chrome +- +- +- +- Chromium +- +- +- +- Show a notification when credentials are requested +- Credentials mean login data requested via browser extension +- +- +- +- Request to unlock the database if it is locked +- +- +- +- Only entries with the same scheme (http://, https://, ...) are returned. +- Kun poster med samme skema (http://, https:// ...) bliver returneret. +- +- +- Match URL scheme (e.g., https://...) +- +- +- +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- Returnér kun det bedste match for en specifik URL i stedet for alle matches for hele domænet. +- +- +- Return only best-matching credentials +- +- +- +- Returns expired credentials. String [expired] is added to the title. +- +- +- +- Allow returning expired credentials +- +- +- +- All databases connected to the extension will return matching credentials. +- +- +- +- Search in all opened databases for matching credentials +- Credentials mean login data requested via browser extension +- +- +- +- Sort matching credentials by title +- Credentials mean login data requested via browser extension +- +- +- +- Sort matching credentials by username +- Credentials mean login data requested via browser extension +- +- +- +- Advanced +- Avanceret +- +- +- Never ask before accessing credentials +- Credentials mean login data requested via browser extension +- +- +- +- Never ask before updating credentials +- Credentials mean login data requested via browser extension +- +- +- +- Do not ask permission for HTTP Basic Auth +- An extra HTTP Basic Auth setting +- +- +- +- Automatically creating or updating string fields is not supported. +- Automatisk oprettelse eller opdatering af tekstfelter understøttes ikke. +- +- +- Return advanced string fields which start with "KPH: " +- +- +- +- Don't display the popup suggesting migration of legacy KeePassHTTP settings. +- +- +- +- Do not prompt for KeePassHTTP settings migration. +- +- +- +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- Opdaterer KeePassXC eller keepassxc-proxy binære sti automatisk til beskedscript ved opstart. +- +- +- Update native messaging manifest files at startup +- +- +- +- Use a custom proxy location if you installed a proxy manually. +- Brug en tilpasset proxyplacering hvis du har installeret en proxy manuelt. +- +- +- Use a custom proxy location: +- Meant is the proxy for KeePassXC-Browser +- +- +- +- Custom proxy location field +- +- +- +- Browser for custom proxy file +- +- +- +- Browse... +- Button for opening file dialog +- Gennemse ... +- +- +- Use a custom browser configuration location: +- +- +- +- Browser type: +- +- +- +- Toolbar button style +- +- +- +- Config Location: +- +- +- +- Custom browser location field +- +- +- +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- +- +- +- Browse for custom browser path +- +- +- +- Custom extension ID: +- +- +- +- Custom extension ID +- +- +- +- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 +- Grundet Snap-sandkasse, er du nødsaget til at køre et script for at aktivere browserintegritet.<br />Du kan hente scriptet fra %1 +- +- +- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 +- +- +- +- Please see special instructions for browser extension use below +- Venligst se vigtige instruktioner for brug af browser tilføjelsen nedenfor +- +- +- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. +- +- +- +- <b>Warning:</b> The following options can be dangerous! +- <b>Advarsel:</b> Følgende indstillinger kan være farlige! +- +- +- Executable Files +- Eksekverbare filer +- +- +- All Files +- Alle filer +- +- +- Select custom proxy location +- Vælg en tilpasset proxyplacering +- +- +- Select native messaging host folder location +- +- +- +- +- CloneDialog +- +- Clone Options +- Kloningsindstillinger +- +- +- Append ' - Clone' to title +- Tilføj ' - Klon' til titel +- +- +- Replace username and password with references +- Udskift brugernavn og adgangskode med referencer +- +- +- Copy history +- Kopiér historik +- +- +- +- CsvImportWidget +- +- Import CSV fields +- Importér CSV-felter +- +- +- filename +- filnavn +- +- +- size, rows, columns +- størrelse, rækker, kolonner +- +- +- Encoding +- Kodning +- +- +- Codec +- Codec +- +- +- Text is qualified by +- Tekst er kvalificeret af +- +- +- Fields are separated by +- Felter separeres med +- +- +- Comments start with +- Kommentarer starter med +- +- +- Consider '\' an escape character +- Betragt '\' som en escape karakter +- +- +- Preview +- ForhÃ¥ndsvisning +- +- +- Imported from CSV file +- Importeret fra CSV-fil +- +- +- Original data: +- Original data: +- +- +- Error +- Fejl +- +- +- Error(s) detected in CSV file! +- Fejl registreret i CSV-fil! +- +- +- [%n more message(s) skipped] +- [%n yderligere meddelelse sprunget over][%n yderligere meddelelser sprunget over] +- +- +- CSV import: writer has errors: +-%1 +- CSV-import: skriver har fejl: +-%1 +- +- +- Text qualification +- +- +- +- Field separation +- +- +- +- Number of header lines to discard +- +- +- +- CSV import preview +- +- +- +- Column Association +- +- +- +- Last Modified +- Sidst ændret +- +- +- Password +- Adgangskode +- +- +- Created +- Oprettet +- +- +- Notes +- Bemærkninger +- +- +- Title +- Titel +- +- +- Group +- Gruppe +- +- +- URL +- URL +- +- +- Username +- Brugernavn +- +- +- Header lines skipped +- +- +- +- First line has field names +- +- +- +- Not Present +- +- +- +- Column %1 +- +- +- +- TOTP +- TOTP +- +- +- Icon +- Ikon +- +- +- +- CsvParserModel +- +- %n column(s) +- %n kolonne%n kolonner +- +- +- %1, %2, %3 +- file info: bytes, rows, columns +- %1, %2, %3 +- +- +- %n byte(s) +- %n byte%n bytes +- +- +- %n row(s) +- %n række%n rækker +- +- +- +- Database +- +- File %1 does not exist. +- Filen %1 findes ikke. +- +- +- Unable to open file %1. +- Kan ikke Ã¥bne filen %1. +- +- +- Error while reading the database: %1 +- Fejl ved læsning af databasen: %1 +- +- +- File cannot be written as it is opened in read-only mode. +- Filen kan ikke skrives da den er Ã¥bnet i skrivebeskyttet tilstand. +- +- +- Key not transformed. This is a bug, please report it to the developers! +- Nøglen blev ikke transformeret. Det er en fejl. Rapportér det venligst til udviklerne! +- +- +- %1 +-Backup database located at %2 +- +- +- +- Could not save, database does not point to a valid file. +- +- +- +- Could not save, database file is read-only. +- +- +- +- Database file has unmerged changes. +- +- +- +- Recycle Bin +- Papirkurv +- +- +- Passwords +- Root group name +- Adgangskoder +- +- +- Database save is already in progress. +- +- +- +- Could not save, database has not been initialized! +- +- +- +- +- DatabaseOpenDialog +- +- Unlock Database - KeePassXC +- LÃ¥s op for database - KeePassXC +- +- +- +- DatabaseOpenWidget +- +- Key File: +- Nøglefil: +- +- +- Refresh +- Genopfrisk +- +- +- Don't show this warning again +- Vis ikke denne advarsel igen +- +- +- All files +- Alle filer +- +- +- Key files +- Nøglefiler +- +- +- Select key file +- Vælg nøglefil +- +- +- Failed to open key file: %1 +- +- +- +- Unlock KeePassXC Database +- +- +- +- Enter Password: +- +- +- +- Password field +- +- +- +- Hardware key slot selection +- +- +- +- Browse for key file +- +- +- +- Browse... +- Gennemse ... +- +- +- Refresh hardware tokens +- +- +- +- Hardware Key: +- +- +- +- Hardware key help +- +- +- +- TouchID for Quick Unlock +- +- +- +- Unlock failed and no password given +- +- +- +- Unlocking the database failed and you did not enter a password. +-Do you want to retry with an "empty" password instead? +- +-To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. +- +- +- +- Retry with empty password +- +- +- +- Enter Additional Credentials (if any): +- +- +- +- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +-<p>Click for more information...</p> +- +- +- +- Key file help +- +- +- +- ? +- +- +- +- Cannot use database file as key file +- +- +- +- You cannot use your database file as a key file. +-If you do not have a key file, please leave the field empty. +- +- +- +- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> +- +- +- +- Key file to unlock the database +- +- +- +- Please touch the button on your YubiKey! +- Tryk pÃ¥ knappen pÃ¥ din YubiKey! +- +- +- Detecting hardware keys… +- +- +- +- No hardware keys detected +- +- +- +- Select hardware key… +- +- +- +- Old key file format +- +- +- +- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> +- +- +- +- +- DatabaseSettingWidgetMetaData +- +- Passwords +- Adgangskoder +- +- +- +- DatabaseSettingsDialog +- +- Advanced Settings +- Avancerede indstillinger +- +- +- General +- Generelt +- +- +- Security +- Sikkerhed +- +- +- Encryption Settings +- Krypteringsindstillinger +- +- +- Browser Integration +- Browserintegritet +- +- +- Database Credentials +- +- +- +- +- DatabaseSettingsWidgetBrowser +- +- KeePassXC-Browser settings +- KeePassXC-Browserindstillinger +- +- +- Stored keys +- Gemte nøgler +- +- +- Remove +- Fjern +- +- +- Delete the selected key? +- Slet den valgte nøgle? +- +- +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- Vil du virkelig slette den valgte nøgle? +-Det kan forhindre forbindelse til browserpluginet. +- +- +- Key +- Nøgle +- +- +- Value +- Værdi +- +- +- Enable Browser Integration to access these settings. +- Aktivér browserintegritet for at tilgÃ¥ indstillingerne. +- +- +- Disconnect all browsers +- Afbryd forbindelse til alle browsere +- +- +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- Vil du virkelig afbryde forbindelsen til alle browsere? +-Det kan forhindre forbindelse til browserpluginet. +- +- +- KeePassXC: No keys found +- KeePassXC: Ingen nøgler fundet +- +- +- No shared encryption keys found in KeePassXC settings. +- Fandt ingen delte krypteringsnøgler i KeePassXC-indstillinger. +- +- +- KeePassXC: Removed keys from database +- KeePassXC: Fjernede nøgler fra database +- +- +- Successfully removed %n encryption key(s) from KeePassXC settings. +- Det lykkedes at fjerne %n krypteret nøgle fra KeePassXC-indstillingerne.Det lykkedes at fjerne %n krypteret nøgler fra KeePassXC-indstillingerne. +- +- +- Forget all site-specific settings on entries +- Glem alle stedspecifikke indstillinger pÃ¥ posterne +- +- +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- Vil du virkelig glemme alle stedspecifikke indstillinger pÃ¥ hver post? +-Tilladelser til at tilgÃ¥ poster tilbagekaldes. +- +- +- Removing stored permissions… +- Fjerner gemte tilladelser … +- +- +- Abort +- Afbryd +- +- +- KeePassXC: Removed permissions +- KeePassXC: Fjernede tilladelser +- +- +- Successfully removed permissions from %n entry(s). +- Det lykkedes at fjerne tilladelser fra %n post.Det lykkedes at fjerne tilladelser fra %n poster. +- +- +- KeePassXC: No entry with permissions found! +- KeePassXC: Ingen nøgler fundet! +- +- +- The active database does not contain an entry with permissions. +- Den aktive database indholder ikke en post med tilladelser. +- +- +- Move KeePassHTTP attributes to custom data +- Flyt KeePassHTTP-attributter til tilpasset data +- +- +- Do you really want to move all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- Vil du virkelig flytte alle udgÃ¥et browerintegrationsdata til den seneste standard? +-Det er nødvendigt for at vedligeholde kompatibilitet med browserpluginet. +- +- +- Stored browser keys +- +- +- +- Remove selected key +- +- +- +- Move KeePassHTTP attributes to KeePassXC-Browser custom data +- +- +- +- Refresh database root group ID +- +- +- +- Created +- Oprettet +- +- +- Refresh database ID +- +- +- +- Do you really want refresh the database ID? +-This is only necessary if your database is a copy of another and the browser extension cannot connect. +- +- +- +- +- DatabaseSettingsWidgetDatabaseKey +- +- Add additional protection... +- Tilføj yderligere beskyttelse ... +- +- +- No password set +- Ingen adgangskode indstillet +- +- +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- ADVARSEL! Du har ikke indstillet en adgangskode. Det frarÃ¥des kraftigt at bruge en database uden en adgangskode! +- +-Er du sikker pÃ¥, du vil fortsætte uden en adgangskode? +- +- +- Continue without password +- +- +- +- No encryption key added +- Ingen krypteringsnøgle tilføjet +- +- +- You must add at least one encryption key to secure your database! +- Du skal tilføje mindst en krypteringsnøgle for at sikre din database! +- +- +- Unknown error +- Ukendt fejl +- +- +- Failed to change database credentials +- +- +- +- +- DatabaseSettingsWidgetEncryption +- +- Encryption Algorithm: +- Krypteringsalgoritme: +- +- +- AES: 256 Bit (default) +- AES: 256 bit (standard) +- +- +- Twofish: 256 Bit +- Twofish: 256 bit +- +- +- Key Derivation Function: +- Nøgleafledningsfunktion: +- +- +- Transform rounds: +- Transformationsrunder: +- +- +- Memory Usage: +- Hukommelsesforbrug: +- +- +- Parallelism: +- Parallelitet: +- +- +- Decryption Time: +- Krypteringstid: +- +- +- ?? s +- ?? s +- +- +- Change +- Skift +- +- +- Higher values offer more protection, but opening the database will take longer. +- Højere værdier giver mere beskyttelse, men det vil tage længere at Ã¥bne databasen. +- +- +- Database format: +- Format pÃ¥ database: +- +- +- This is only important if you need to use your database with other programs. +- Det er kun vigtigt hvis du skal bruge din database med andre programmer. +- +- +- KDBX 4.0 (recommended) +- KDBX 4.0 (anbefales) +- +- +- KDBX 3.1 +- KDBX 3.1 +- +- +- unchanged +- Database decryption time is unchanged +- uændret +- +- +- Number of rounds too high +- Key transformation rounds +- Antallet af runder er for højt +- +- +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or days (or even longer) to open! +- Du benytter et meget højt antal runder af nøgletransformationer med Argon2. +- +-Hvis du vil beholde antallet, sÃ¥ kan din database tage timer eller dage (eller endnu længere) at Ã¥bne! +- +- +- Understood, keep number +- ForstÃ¥et, beholder nummer +- +- +- Cancel +- Annuller +- +- +- Number of rounds too low +- Key transformation rounds +- Antallet af runder er for lavt +- +- +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database may be too easy to crack! +- Du bruger en meget lavt antal nøgletransformeringsrunder med AES-KDF. +- +-Hvis du beholder dette antal, sÃ¥ kan din database være nem af knække! +- +- +- KDF unchanged +- KDF uændret +- +- +- Failed to transform key with new KDF parameters; KDF unchanged. +- Kunne ikke transformere nøglen med nye KDF-parametre; KDF er uændret. +- +- +- MiB +- Abbreviation for Mebibytes (KDF settings) +- MiB MiB +- +- +- thread(s) +- Threads for parallel execution (KDF settings) +- trÃ¥d trÃ¥de +- +- +- Change existing decryption time +- +- +- +- Decryption time in seconds +- +- +- +- Database format +- +- +- +- Encryption algorithm +- +- +- +- Key derivation function +- +- +- +- Transform rounds +- +- +- +- Memory usage +- +- +- +- Parallelism +- +- +- +- ?? ms +- +- +- +- ? s +- +- +- +- +- DatabaseSettingsWidgetFdoSecrets +- +- Exposed Entries +- +- +- +- Don't expose this database +- +- +- +- Expose entries under this group: +- +- +- +- Enable Secret Service to access these settings. +- +- +- +- +- DatabaseSettingsWidgetGeneral +- +- Database Meta Data +- Database metadata +- +- +- Database name: +- Navn pÃ¥ database: +- +- +- Database description: +- Beskrivelse af database: +- +- +- Default username: +- Standard brugernavn: +- +- +- History Settings +- Historieindstillinger +- +- +- Max. history items: +- Maks. posthistorik: +- +- +- Max. history size: +- Maks. historikstørrelse: +- +- +- MiB +- MiB +- +- +- Use recycle bin +- Brug papirkurv +- +- +- Additional Database Settings +- Yderligere databaseindstillinger +- +- +- Database name field +- +- +- +- Database description field +- +- +- +- Default username field +- +- +- +- Maximum number of history items per entry +- +- +- +- Maximum size of history per entry +- +- +- +- Delete Recycle Bin +- +- +- +- Do you want to delete the current recycle bin and all its contents? +-This action is not reversible. +- +- +- +- (old) +- +- +- +- Enable compression (recommended) +- +- +- +- +- DatabaseSettingsWidgetKeeShare +- +- Sharing +- Deling +- +- +- Breadcrumb +- Brødkrumme +- +- +- Type +- Type +- +- +- Path +- Sti +- +- +- Last Signer +- Sidste underskriver +- +- +- Certificates +- Certifikater +- +- +- > +- Breadcrumb separator +- > +- +- +- +- DatabaseSettingsWidgetMetaDataSimple +- +- Database Name: +- Navn pÃ¥ database: +- +- +- Description: +- Beskrivelse: +- +- +- Database name field +- +- +- +- Database description field +- +- +- +- +- DatabaseTabWidget +- +- KeePass 2 Database +- KeePass 2-database +- +- +- All files +- Alle filer +- +- +- Open database +- Ã…bn database +- +- +- CSV file +- CSV-fil +- +- +- Merge database +- Sammenlæg database +- +- +- Open KeePass 1 database +- Ã…bn KeePass 1-database +- +- +- KeePass 1 database +- KeePass 1-database +- +- +- Export database to CSV file +- Eksportér database til CSV-fil +- +- +- Writing the CSV file failed. +- Skrivning af CSV-fil mislykkedes. +- +- +- Database creation error +- Fejl ved oprettelse af database +- +- +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- Den oprettede database har ingen nøgle eller KDF. Nægter at gemme den. +-Det er helt sikkert en fejl. Rapportér det venligst til udviklerne. +- +- +- Select CSV file +- Vælg CSV-fil +- +- +- New Database +- Ny database +- +- +- %1 [New Database] +- Database tab name modifier +- %1 [Ny database] +- +- +- %1 [Locked] +- Database tab name modifier +- %1 [LÃ¥st] +- +- +- %1 [Read-only] +- Database tab name modifier +- %1 [Skrivebeskyttet] +- +- +- Failed to open %1. It either does not exist or is not accessible. +- +- +- +- Export database to HTML file +- +- +- +- HTML file +- +- +- +- Writing the HTML file failed. +- +- +- +- Export Confirmation +- +- +- +- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? +- +- +- +- Open OPVault +- +- +- +- +- DatabaseWidget +- +- Searching... +- Søger ... +- +- +- Do you really want to delete the entry "%1" for good? +- Vil du virkelig slette posten "%1" permanent? +- +- +- Do you really want to move entry "%1" to the recycle bin? +- Vil du virkelig flytte posten "%1" til papirkurven? +- +- +- Do you really want to move %n entry(s) to the recycle bin? +- Vil du virkelig flytte %n post til papirkurven?Vil du virkelig flytte %n poster til papirkurven? +- +- +- Execute command? +- Udfør kommando? +- +- +- Do you really want to execute the following command?<br><br>%1<br> +- Er du sikker pÃ¥, at du vil udføre følgende kommando?<br><br>%1<br> +- +- +- Remember my choice +- Husk mit valg +- +- +- Do you really want to delete the group "%1" for good? +- Vil du slette gruppen "%1" permanent? +- +- +- No current database. +- Ingen database valgt. +- +- +- No source database, nothing to do. +- Ingen kilde-database, intet at gøre. +- +- +- Search Results (%1) +- Søgeresultater (%1) +- +- +- No Results +- Ingen resultater +- +- +- File has changed +- Filen har ændret sig +- +- +- The database file has changed. Do you want to load the changes? +- Databasefilen har ændret sig. Er du sikker pÃ¥, at du vil indlæse ændringerne? +- +- +- Merge Request +- Sammenlægningsanmodning +- +- +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- Databasefilen har ændringer og du har ændringer som du ikke har gemt. +-Vil du sammenlægge dine ændringer med databasens? +- +- +- Empty recycle bin? +- Tøm papirkurven? +- +- +- Are you sure you want to permanently delete everything from your recycle bin? +- Er du sikker pÃ¥, at du vil slette alt fra din papirkurv permanent? +- +- +- Do you really want to delete %n entry(s) for good? +- Vil du virkelig slette %n post permanent?Vil du virkelig slette %n poster permanent? +- +- +- Delete entry(s)? +- Slet post?Slet poster? +- +- +- Move entry(s) to recycle bin? +- Flyt post til papirkurven?Flyt poster til papirkurven? +- +- +- Lock Database? +- LÃ¥s database? +- +- +- You are editing an entry. Discard changes and lock anyway? +- Du er ved at redigere en post. Forkast ændringerne og lÃ¥s alligevel? +- +- +- "%1" was modified. +-Save changes? +- "%1" blev ændret. +-Gem ændringerne? +- +- +- Database was modified. +-Save changes? +- Databasen blev ændret. +-Gem ændringerne? +- +- +- Save changes? +- Gem ændringer? +- +- +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- Kunne ikke Ã¥bne den nye databasefil ved forsøg pÃ¥ automatisk genindlæsning. +-Fejl: %1 +- +- +- Disable safe saves? +- SlÃ¥ sikre gem til? +- +- +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- KeePassXC har ikke været i stand til at gemme databasen flere gange. Dette er formentlig fordi en filsynkroniseringstjeneste har en lÃ¥s pÃ¥ filen. +-SÃ¥ sikre gem fra og prøv igen? +- +- +- Passwords +- Adgangskoder +- +- +- Save database as +- Gem database som +- +- +- KeePass 2 Database +- KeePass 2-database +- +- +- Replace references to entry? +- Erstat referencer til post? +- +- +- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? +- Posten "%1" har %2 reference. Vil du overskrive referencerne med værdier, springe over posten eller slette alligevel?Posten "%1" har %2 referencer. Vil du overskrive referencerne med værdier, springe over posten eller slette alligevel? +- +- +- Delete group +- Slet gruppe +- +- +- Move group to recycle bin? +- Flyt gruppe til papirkurv? +- +- +- Do you really want to move the group "%1" to the recycle bin? +- Vil du virkelig flytte gruppen "%1" til papirkurven? +- +- +- Successfully merged the database files. +- Sammenlægning af databasefiler lykkedes. +- +- +- Database was not modified by merge operation. +- Databasen blev ikke ændret af sammenlægningshandlingen. +- +- +- Shared group... +- Delt gruppe ... +- +- +- Writing the database failed: %1 +- Skrivning af databasen mislykkedes: %1 +- +- +- This database is opened in read-only mode. Autosave is disabled. +- +- +- +- Save database backup +- +- +- +- Could not find database file: %1 +- +- +- +- +- EditEntryWidget +- +- Entry +- Post +- +- +- Advanced +- Avanceret +- +- +- Icon +- Ikon +- +- +- Auto-Type +- Autoskriv +- +- +- Properties +- Egenskaber +- +- +- History +- Historik +- +- +- SSH Agent +- SSH-agent +- +- +- n/a +- - +- +- +- (encrypted) +- (krypteret) +- +- +- Select private key +- Vælg privat nøgle +- +- +- Entry history +- Indtastningshistorik +- +- +- Add entry +- Tilføj post +- +- +- Edit entry +- Rediger post +- +- +- New attribute +- Ny attribut +- +- +- Are you sure you want to remove this attribute? +- Er du sikker pÃ¥, at du vil fjerne denne attribut? +- +- +- Tomorrow +- I morgen +- +- +- %n week(s) +- %n uge%n uger +- +- +- %n month(s) +- %n mÃ¥ned%n mÃ¥neder +- +- +- Entry updated successfully. +- Post blev succesfuldt opdateret. +- +- +- New attribute %1 +- Ny attribut %1 +- +- +- %n year(s) +- %n Ã¥r%n Ã¥r +- +- +- Confirm Removal +- Bekræft fjernelse +- +- +- Browser Integration +- Browserintegritet +- +- +- <empty URL> +- +- +- +- Are you sure you want to remove this URL? +- +- +- +- Reveal +- Vis +- +- +- Hide +- +- +- +- Unsaved Changes +- +- +- +- Would you like to save changes to this entry? +- +- +- +- [PROTECTED] Press Reveal to view or edit +- +- +- +- Invalid Entry +- +- +- +- An external merge operation has invalidated this entry. +-Unfortunately, any changes made have been lost. +- +- +- +- +- EditEntryWidgetAdvanced +- +- Additional attributes +- Yderligere attributter +- +- +- Add +- Tilføj +- +- +- Remove +- Fjern +- +- +- Edit Name +- Rediger navn +- +- +- Protect +- Beskyt +- +- +- Reveal +- Vis +- +- +- Attachments +- Vedhæftninger +- +- +- Foreground Color: +- Forgrundsfarve: +- +- +- Background Color: +- Baggrundsfarve: +- +- +- Attribute selection +- +- +- +- Attribute value +- +- +- +- Add a new attribute +- +- +- +- Remove selected attribute +- +- +- +- Edit attribute name +- +- +- +- Toggle attribute protection +- +- +- +- Show a protected attribute +- +- +- +- Foreground color selection +- +- +- +- Background color selection +- +- +- +- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> +- +- +- +- Exclude from database reports +- +- +- +- +- EditEntryWidgetAutoType +- +- Enable Auto-Type for this entry +- Aktivér autoskriv for denne post +- +- +- Window Associations +- Vinduestilknytninger +- +- +- + +- + +- +- +- - +- - +- +- +- Window title: +- Vinduestitel: +- +- +- Use a specific sequence for this association: +- Brug en specifik sekvens for tilknytningen: +- +- +- Custom Auto-Type sequence +- +- +- +- Open Auto-Type help webpage +- +- +- +- Existing window associations +- +- +- +- Add new window association +- +- +- +- Remove selected window association +- +- +- +- You can use an asterisk (*) to match everything +- +- +- +- Set the window association title +- +- +- +- You can use an asterisk to match everything +- +- +- +- Custom Auto-Type sequence for this window +- +- +- +- Inherit default Auto-Type sequence from the group +- Nedarv standard Auto-Indsæt sekvens fra gruppe +- +- +- Use custom Auto-Type sequence: +- Brug brugerdefineret Auto-indsæt sekvens: +- +- +- +- EditEntryWidgetBrowser +- +- These settings affect to the entry's behaviour with the browser extension. +- +- +- +- General +- Generelt +- +- +- Skip Auto-Submit for this entry +- +- +- +- Hide this entry from the browser extension +- +- +- +- Additional URL's +- +- +- +- Add +- Tilføj +- +- +- Remove +- Fjern +- +- +- Edit +- Rediger +- +- +- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. +- +- +- +- Use this entry only with HTTP Basic Auth +- +- +- +- +- EditEntryWidgetHistory +- +- Show +- Vis +- +- +- Restore +- Gendan +- +- +- Delete +- Slet +- +- +- Delete all +- Slet alle +- +- +- Entry history selection +- +- +- +- Show entry at selected history state +- +- +- +- Restore entry to selected history state +- +- +- +- Delete selected history state +- +- +- +- Delete all history +- +- +- +- +- EditEntryWidgetMain +- +- URL: +- URL: +- +- +- Password: +- Adgangskode: +- +- +- Title: +- Titel: +- +- +- Presets +- Forudindstillinger +- +- +- Toggle the checkbox to reveal the notes section. +- Klik pÃ¥ afkrydsningsfeltet for at vise bemærkninger-afsnittet. +- +- +- Username: +- Brugernavn: +- +- +- Url field +- +- +- +- Download favicon for URL +- +- +- +- Password field +- +- +- +- Toggle notes visible +- +- +- +- Expiration field +- +- +- +- Expiration Presets +- +- +- +- Expiration presets +- +- +- +- Notes field +- +- +- +- Title field +- +- +- +- Username field +- +- +- +- Toggle expiration +- +- +- +- Notes: +- Noter: +- +- +- https://example.com +- +- +- +- Expires: +- +- +- +- Edit Entry +- +- +- +- +- EditEntryWidgetSSHAgent +- +- Form +- Formular +- +- +- Remove key from agent after +- Fjern nøglen fra agenten efter +- +- +- seconds +- sekunder +- +- +- Fingerprint +- Fingeraftryk +- +- +- Remove key from agent when database is closed/locked +- Fjern nøglen fra agenten nÃ¥r databasen lukkes/lÃ¥ses +- +- +- Public key +- Offentlig nøgle +- +- +- Add key to agent when database is opened/unlocked +- Tilføj nøglen til agenten nÃ¥r databasen Ã¥bnes/lÃ¥ses op +- +- +- Comment +- Kommentar +- +- +- Decrypt +- Dekrypter +- +- +- n/a +- - +- +- +- Copy to clipboard +- Kopiér til udklipsholder +- +- +- Private key +- Privat nøgle +- +- +- External file +- Ekstern fil +- +- +- Browse... +- Button for opening file dialog +- Gennemse ... +- +- +- Attachment +- Vedhæftning +- +- +- Add to agent +- Tilføj til agent +- +- +- Remove from agent +- Fjern fra agent +- +- +- Require user confirmation when this key is used +- Kræv brugerbekræftigelse nÃ¥r denne nøgle bruges +- +- +- Remove key from agent after specified seconds +- +- +- +- Browser for key file +- +- +- +- External key file +- +- +- +- Select attachment file +- +- +- +- +- EditGroupWidget +- +- Group +- Gruppe +- +- +- Icon +- Ikon +- +- +- Properties +- Egenskaber +- +- +- Add group +- Tilføj gruppe +- +- +- Edit group +- Rediger gruppe +- +- +- Enable +- Aktivér +- +- +- Disable +- Deaktivér +- +- +- Inherit from parent group (%1) +- Nedarv fra forældregruppe (%1) +- +- +- Entry has unsaved changes +- Posten har ændringer som ikke er blevet gemt +- +- +- +- EditGroupWidgetKeeShare +- +- Type: +- Type: +- +- +- Path: +- Sti: +- +- +- Password: +- Adgangskode: +- +- +- Inactive +- Inaktiv +- +- +- KeeShare unsigned container +- KeeShare-beholder som ikke er underskrevet +- +- +- KeeShare signed container +- KeeShare-beholder som er underskrevet +- +- +- Select import source +- Vælg importkilde +- +- +- Select export target +- Vælg eksportmÃ¥l +- +- +- Select import/export file +- Vælg import-/eksportfil +- +- +- Clear +- Ryd +- +- +- Import +- Importér +- +- +- Export +- Eksportér +- +- +- Synchronize +- +- +- +- Your KeePassXC version does not support sharing this container type. +-Supported extensions are: %1. +- +- +- +- %1 is already being exported by this database. +- +- +- +- %1 is already being imported by this database. +- +- +- +- %1 is being imported and exported by different groups in this database. +- +- +- +- KeeShare is currently disabled. You can enable import/export in the application settings. +- KeeShare is a proper noun +- +- +- +- Database export is currently disabled by application settings. +- +- +- +- Database import is currently disabled by application settings. +- +- +- +- Sharing mode field +- +- +- +- Path to share file field +- +- +- +- Password field +- +- +- +- Clear fields +- +- +- +- Browse for share file +- +- +- +- Browse... +- Gennemse ... +- +- +- +- EditGroupWidgetMain +- +- Name field +- +- +- +- Notes field +- +- +- +- Toggle expiration +- +- +- +- Auto-Type toggle for this and sub groups +- +- +- +- Expiration field +- +- +- +- Search toggle for this and sub groups +- +- +- +- Default auto-type sequence field +- +- +- +- Expires: +- +- +- +- Use default Auto-Type sequence of parent group +- +- +- +- Auto-Type: +- +- +- +- Search: +- +- +- +- Notes: +- Noter: +- +- +- Name: +- +- +- +- Set default Auto-Type sequence +- +- +- +- Edit Group +- +- +- +- +- EditWidgetIcons +- +- Add custom icon +- Tilføj tilpasset ikon +- +- +- Delete custom icon +- Slet tilpasset ikon +- +- +- Download favicon +- Download favicon +- +- +- Unable to fetch favicon. +- Kan ikke hente favicon. +- +- +- Images +- Billeder +- +- +- All files +- Alle filer +- +- +- Confirm Delete +- Bekræft sletning +- +- +- Select Image(s) +- Vælg billede(r) +- +- +- Successfully loaded %1 of %n icon(s) +- Det lykkedes at indlæse %1 af %n ikonDet lykkedes at indlæse %1 af %n ikoner +- +- +- No icons were loaded +- Ingen ikoner blev indlæst +- +- +- %n icon(s) already exist in the database +- %n ikon findes allerede i databasen%n ikoner findes allerede i databasen +- +- +- The following icon(s) failed: +- Følgende ikon mislykkedes:Følgende ikoner mislykkedes: +- +- +- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? +- Ikonet bruges af %n post og erstattes med standardikonet. Er du sikker pÃ¥, at du vil slette det?Ikonet bruges af %n poster og erstattes med standardikonet. Er du sikker pÃ¥, at du vil slette det? +- +- +- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security +- +- +- +- Download favicon for URL +- +- +- +- Apply selected icon to subgroups and entries +- +- +- +- Also apply to child groups +- +- +- +- Also apply to child entries +- +- +- +- Also apply to all children +- +- +- +- Existing icon selected. +- +- +- +- Use default icon +- Brug standardikon +- +- +- Use custom icon +- Brug brugerbestemt ikon +- +- +- Apply icon to... +- +- +- +- Apply to this group only +- +- +- +- +- EditWidgetProperties +- +- Created: +- Oprettet: +- +- +- Modified: +- Ændret: +- +- +- Accessed: +- TilgÃ¥et: +- +- +- Uuid: +- Uuid: +- +- +- Plugin Data +- Plugindata +- +- +- Remove +- Fjern +- +- +- Delete plugin data? +- Slet plugindata? +- +- +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- Vil du virkelig slette den valgte plugindata? +-Det kan fÃ¥ de pÃ¥virkede plugins til at svigte. +- +- +- Key +- Nøgle +- +- +- Value +- Værdi +- +- +- Datetime created +- +- +- +- Datetime modified +- +- +- +- Datetime accessed +- +- +- +- Unique ID +- +- +- +- Plugin data +- +- +- +- Remove selected plugin data +- +- +- +- +- Entry +- +- %1 - Clone +- %1 - Klon +- +- +- +- EntryAttachmentsModel +- +- Name +- Navn +- +- +- Size +- Størrelse +- +- +- +- EntryAttachmentsWidget +- +- Form +- Formular +- +- +- Add +- Tilføj +- +- +- Remove +- Fjern +- +- +- Open +- Ã…bn +- +- +- Save +- Gem +- +- +- Select files +- Vælg filer +- +- +- Are you sure you want to remove %n attachment(s)? +- Er du sikker pÃ¥, at du vil fjerne %n vedhæftning?Er du sikker pÃ¥, at du vil fjerne %n vedhæftninger? +- +- +- Save attachments +- Gem vedhæftninger +- +- +- Unable to create directory: +-%1 +- Kunne ikke oprette folder: +-%1 +- +- +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- Er du sikker pÃ¥, at du vil overskrive den eksisterende fil "%1" med denne vedhæftning? +- +- +- Confirm overwrite +- Bekræft overskrivning +- +- +- Unable to save attachments: +-%1 +- Kunne ikke gemme vedhæftning: +-%1 +- +- +- Unable to open attachment: +-%1 +- Kunne ikke Ã¥bne vedhæftning: +-%1 +- +- +- Unable to open attachments: +-%1 +- Kunne ikke Ã¥bne vedhæftninger: +-%1 +- +- +- Confirm remove +- Bekræft fjernelse +- +- +- Unable to open file(s): +-%1 +- Kan ikke Ã¥bne filen: +-%1Kan ikke Ã¥bne filerne: +-%1 +- +- +- Attachments +- Vedhæftninger +- +- +- Add new attachment +- +- +- +- Remove selected attachment +- +- +- +- Open selected attachment +- +- +- +- Save selected attachment to disk +- +- +- +- %1 is a big file (%2 MB). +-Your database may get very large and reduce performance. +- +-Are you sure to add this file? +- +- +- +- Confirm Attachment +- +- +- +- +- EntryAttributesModel +- +- Name +- Navn +- +- +- +- EntryHistoryModel +- +- Last modified +- Sidst ændret +- +- +- Title +- Titel +- +- +- Username +- Brugernavn +- +- +- URL +- URL +- +- +- +- EntryModel +- +- Ref: +- Reference abbreviation +- Ref: +- +- +- Group +- Gruppe +- +- +- Title +- Titel +- +- +- Username +- Brugernavn +- +- +- URL +- URL +- +- +- Never +- Aldrig +- +- +- Password +- Adgangskode +- +- +- Notes +- Bemærkninger +- +- +- Expires +- Udløber +- +- +- Created +- Oprettet +- +- +- Modified +- Ændret +- +- +- Accessed +- TilgÃ¥et +- +- +- Attachments +- Vedhæftninger +- +- +- Size +- Størrelse +- +- +- Group name +- +- +- +- Entry title +- +- +- +- Entry notes +- +- +- +- Entry expires at +- +- +- +- Creation date +- +- +- +- Last modification date +- +- +- +- Last access date +- +- +- +- Attached files +- +- +- +- Entry size +- +- +- +- Has attachments +- +- +- +- Has TOTP one-time password +- +- +- +- +- EntryPreviewWidget +- +- Close +- Luk +- +- +- General +- Generelt +- +- +- Username +- Brugernavn +- +- +- Password +- Adgangskode +- +- +- Expiration +- Udløbsdato +- +- +- URL +- URL +- +- +- Attributes +- Attributter +- +- +- Attachments +- Vedhæftninger +- +- +- Notes +- Bemærkninger +- +- +- Autotype +- Autoskriv +- +- +- Window +- Vindue +- +- +- Sequence +- Sekvens +- +- +- Searching +- Søgning +- +- +- Search +- Søg +- +- +- Clear +- Ryd +- +- +- Never +- Aldrig +- +- +- [PROTECTED] +- [BESKYTTET] +- +- +- Enabled +- Aktiveret +- +- +- Disabled +- Deaktiveret +- +- +- Share +- Del +- +- +- Display current TOTP value +- +- +- +- Advanced +- Avanceret +- +- +- Default Sequence +- +- +- +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- attributes line +- +- +- +- +- EntryURLModel +- +- Invalid URL +- +- +- +- +- EntryView +- +- Fit to window +- Tilpas til vindue +- +- +- Fit to contents +- Tilpas til indhold +- +- +- Reset to defaults +- Nulstil til standardindstillinger +- +- +- Has attachments +- Entry attachment icon toggle +- +- +- +- Has TOTP +- Entry TOTP icon toggle +- +- +- +- +- FdoSecrets::Item +- +- Entry "%1" from database "%2" was used by %3 +- +- +- +- +- FdoSecrets::Service +- +- Failed to register DBus service at %1.<br/> +- +- +- +- %n Entry(s) was used by %1 +- %1 is the name of an application +- +- +- +- +- FdoSecrets::SettingsDatabaseModel +- +- File Name +- +- +- +- Group +- Gruppe +- +- +- Manage +- +- +- +- Unlock to show +- +- +- +- None +- +- +- +- +- FdoSecrets::SettingsSessionModel +- +- Application +- +- +- +- Manage +- +- +- +- +- FdoSecretsPlugin +- +- <b>Fdo Secret Service:</b> %1 +- +- +- +- Unknown +- Unknown PID +- Ukendt +- +- +- Unknown +- Unknown executable path +- Ukendt +- +- +- <i>PID: %1, Executable: %2</i> +- <i>PID: 1234, Executable: /path/to/exe</i> +- +- +- +- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. +- +- +- +- +- Group +- +- [empty] +- group has no children +- [tom] +- +- +- +- HibpDownloader +- +- Online password validation failed +- +- +- +- +- IconDownloaderDialog +- +- Download Favicons +- Download faviconer +- +- +- Cancel +- Annuller +- +- +- Having trouble downloading icons? +-You can enable the DuckDuckGo website icon service in the security section of the application settings. +- +- +- +- Close +- Luk +- +- +- URL +- URL +- +- +- Status +- Status +- +- +- Please wait, processing entry list... +- +- +- +- Downloading... +- +- +- +- Ok +- Ok +- +- +- Already Exists +- +- +- +- Download Failed +- +- +- +- Downloading favicons (%1/%2)... +- +- +- +- +- KMessageWidget +- +- &Close +- &Luk +- +- +- Close message +- Luk besked +- +- +- +- Kdbx3Reader +- +- missing database headers +- mangler databaseheadere +- +- +- Header doesn't match hash +- Headeren matcher ikke hashen +- +- +- Invalid header id size +- Ugyldig størrelse pÃ¥ gruppefelt +- +- +- Invalid header field length +- Ugyldig længde pÃ¥ headerfelt +- +- +- Invalid header data length +- Ugyldig længde pÃ¥ headerdata +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- +- +- +- Unable to calculate database key +- +- +- +- Unable to issue challenge-response: %1 +- +- +- +- +- Kdbx3Writer +- +- Unable to issue challenge-response: %1 +- +- +- +- Unable to calculate database key +- +- +- +- +- Kdbx4Reader +- +- missing database headers +- mangler databaseheadere +- +- +- Invalid header checksum size +- Ugyldig størrelse pÃ¥ gruppefelt +- +- +- Header SHA256 mismatch +- Uoverensstemmelse i header SHA256 +- +- +- Unknown cipher +- Ukendt ciffer +- +- +- Invalid header id size +- Ugyldig størrelse pÃ¥ gruppefelt +- +- +- Invalid header field length +- Ugyldig længde pÃ¥ headerfelt +- +- +- Invalid header data length +- Ugyldig længde pÃ¥ headerdata +- +- +- Failed to open buffer for KDF parameters in header +- Kan ikke Ã¥bne buffer for KDF parametre i header +- +- +- Unsupported key derivation function (KDF) or invalid parameters +- Ikke understøttet nøgleafledningsfunktion (KDF) eller ugyldige parametre +- +- +- Legacy header fields found in KDBX4 file. +- Forældede header-felter fundet i KDBX4 fil. +- +- +- Invalid inner header id size +- Ugyldig størrelse pÃ¥ indre headerfelt-id +- +- +- Invalid inner header field length +- Ugyldig længde pÃ¥ indre headerfelt +- +- +- Invalid inner header binary size +- Ugyldig størrelse pÃ¥ binær indre header +- +- +- Unsupported KeePass variant map version. +- Translation: variant map = data structure for storing meta data +- Ikke understøttet KeePass variant version. +- +- +- Invalid variant map entry name length +- Translation: variant map = data structure for storing meta data +- Ugyldig længde pÃ¥ navn for variantkortets post +- +- +- Invalid variant map entry name data +- Translation: variant map = data structure for storing meta data +- Ugyldig data pÃ¥ navn for variantkortets post +- +- +- Invalid variant map entry value length +- Translation: variant map = data structure for storing meta data +- Ugyldig længde pÃ¥ værdi for variantkortets post +- +- +- Invalid variant map entry value data +- Translation comment: variant map = data structure for storing meta data +- Ugyldig data pÃ¥ værdi for variantkortets post +- +- +- Invalid variant map Bool entry value length +- Translation: variant map = data structure for storing meta data +- Ugyldig længde pÃ¥ værdi for variantkortets Bool-post +- +- +- Invalid variant map Int32 entry value length +- Translation: variant map = data structure for storing meta data +- Ugyldig længde pÃ¥ værdi for variantkortets Int32-post +- +- +- Invalid variant map UInt32 entry value length +- Translation: variant map = data structure for storing meta data +- Ugyldig længde pÃ¥ værdi for variantkortets UInt32-post +- +- +- Invalid variant map Int64 entry value length +- Translation: variant map = data structure for storing meta data +- Ugyldig længde pÃ¥ værdi for variantkortets Int64-post +- +- +- Invalid variant map UInt64 entry value length +- Translation: variant map = data structure for storing meta data +- Ugyldig længde pÃ¥ værdi for variantkortets UInt64-post +- +- +- Invalid variant map entry type +- Translation: variant map = data structure for storing meta data +- Ugyldig type pÃ¥ post for variantkort +- +- +- Invalid variant map field type size +- Translation: variant map = data structure for storing meta data +- Ugyldig størrelse pÃ¥ felttype for variantkort +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- +- +- +- (HMAC mismatch) +- +- +- +- Unable to calculate database key: %1 +- +- +- +- +- Kdbx4Writer +- +- Invalid symmetric cipher algorithm. +- Ugyldig symmetrisk ciffer-algoritme. +- +- +- Invalid symmetric cipher IV size. +- IV = Initialization Vector for symmetric cipher +- Ugyldig størrelse pÃ¥ IV for symmetrisk ciffer. +- +- +- Failed to serialize KDF parameters variant map +- Translation comment: variant map = data structure for storing meta data +- Kunne ikke serielisere KDF-parameternes variantkort +- +- +- Unable to calculate database key: %1 +- +- +- +- +- KdbxReader +- +- Unsupported cipher +- Ikke understøttet ciffer +- +- +- Invalid compression flags length +- Ugyldig længde pÃ¥ komprimeringsflag +- +- +- Unsupported compression algorithm +- Ikke understøttet komprimeringsalgortime +- +- +- Invalid master seed size +- Ugyldig størrelse pÃ¥ hovedfrø +- +- +- Invalid transform seed size +- Ugyldig størrelse pÃ¥ transformeringsfrø +- +- +- Invalid transform rounds size +- Ugyldig antal af transformeringsrunder +- +- +- Invalid start bytes size +- Ugyldig størrelse pÃ¥ start bytes +- +- +- Invalid random stream id size +- Ugyldig størrelse pÃ¥ tilfældigt strøm id +- +- +- Invalid inner random stream cipher +- Ugyldig ciffer for indre tilfældig strøm +- +- +- Not a KeePass database. +- Dette er ikke en KeePass-database. +- +- +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- Den valgte fil er en gammel KeePass 1-databasefil (.kdb). +- +-Du kan importere den ved at klikke pÃ¥ Database > 'Importér KeePass 1-database ...'. +-Dette er en envejs konvertering. Du vil ikke være i stand til at Ã¥bne den importerede database med den gamle KeePassX 0.4 version. +- +- +- Unsupported KeePass 2 database version. +- Ikke understøttet KeePass 2-database version. +- +- +- Invalid cipher uuid length: %1 (length=%2) +- Ugyldig længde pÃ¥ cifferets uuid: %1 (længde=%2) +- +- +- Unable to parse UUID: %1 +- Kan ikke fortolke uuid: %1 +- +- +- Failed to read database file. +- Kunne ikke læse databasefil. +- +- +- +- KdbxXmlReader +- +- XML parsing failure: %1 +- XML indlæsningsfejl: %1 +- +- +- No root group +- Ingen rodgruppe +- +- +- Missing icon uuid or data +- Mangler ikon-uuid eller -data +- +- +- Missing custom data key or value +- Mangler tilpasset datanøgle eller -værdi +- +- +- Multiple group elements +- Flere gruppe-elementer +- +- +- Null group uuid +- Nul gruppe-uuid +- +- +- Invalid group icon number +- Ugyldig gruppeikon-nummer +- +- +- Invalid EnableAutoType value +- Ugyldig EnableAutoType-værdi +- +- +- Invalid EnableSearching value +- Ugyldig EnableSearching-værdi +- +- +- No group uuid found +- Intet gruppe-uuid fundet +- +- +- Null DeleteObject uuid +- Nul DeleteObject-uuid +- +- +- Missing DeletedObject uuid or time +- Mangler DeletedObject-uuid eller klokkeslæt +- +- +- Null entry uuid +- Nul post-uuid +- +- +- Invalid entry icon number +- Ugyldig postikon-nummer +- +- +- History element in history entry +- Historiske elementer i historie-posten +- +- +- No entry uuid found +- Intet post-uuid fundet +- +- +- History element with different uuid +- Historiske elementer med forskelligt uuid +- +- +- Duplicate custom attribute found +- Fandt ens tilpasset attribut +- +- +- Entry string key or value missing +- Poststreng-nøgle eller -værdi mangler +- +- +- Entry binary key or value missing +- Binær nøgle eller værdi for post mangler +- +- +- Auto-type association window or sequence missing +- Autoskriv tilknytningsvindue eller -sekvens mangler +- +- +- Invalid bool value +- Ugyldig boolesk-værdi +- +- +- Invalid date time value +- Ugyldig dato klokkeslæt-værdi +- +- +- Invalid color value +- Ugyldig farve-værdi +- +- +- Invalid color rgb part +- Ugyldig farve RGB-del +- +- +- Invalid number value +- Ugyldig nummer-værdi +- +- +- Invalid uuid value +- Ugyldig uuid-værdi +- +- +- Unable to decompress binary +- Translator meant is a binary data inside an entry +- Kan ikke dekomprimere binær data +- +- +- XML error: +-%1 +-Line %2, column %3 +- Fejl ved XML: +-%1 +-Linje %2, kolonne %3 +- +- +- +- KeeAgentSettings +- +- Invalid KeeAgent settings file structure. +- +- +- +- Private key is an attachment but no attachments provided. +- +- +- +- Private key is empty +- +- +- +- File too large to be a private key +- Filen er for stor til at være en privat nøgle +- +- +- Failed to open private key +- Kunne ikke Ã¥bne privat nøgle +- +- +- +- KeePass1OpenWidget +- +- Unable to open the database. +- Kan ikke Ã¥bne databasen. +- +- +- Import KeePass1 Database +- +- +- +- +- KeePass1Reader +- +- Unable to read keyfile. +- Kan ikke indlæse nøglefil. +- +- +- Not a KeePass database. +- Dette er ikke en KeePass-database. +- +- +- Unsupported encryption algorithm. +- Ikke understøttet krypteringsalgoritme. +- +- +- Unsupported KeePass database version. +- KeePass-databaseversion ikke understøttet. +- +- +- Unable to read encryption IV +- IV = Initialization Vector for symmetric cipher +- Kan ikke læse krypterings-IV +- +- +- Invalid number of groups +- Ugyldig antal grupper +- +- +- Invalid number of entries +- Ugyldig antal poster +- +- +- Invalid content hash size +- Ugyldig størrelse pÃ¥ indholdshash +- +- +- Invalid transform seed size +- Ugyldig størrelse pÃ¥ transformeringsfrø +- +- +- Invalid number of transform rounds +- Ugyldig antal runder for transformation +- +- +- Unable to construct group tree +- Kan ikke konstruere gruppetræ +- +- +- Root +- Rod +- +- +- Key transformation failed +- Nøgletransformering mislykkedes +- +- +- Invalid group field type number +- Ugyldig gruppefeltstype-nummer +- +- +- Invalid group field size +- Ugyldig størrelse pÃ¥ gruppefelt +- +- +- Read group field data doesn't match size +- Læsegruppefeltsdata har ikke samme størrelse +- +- +- Incorrect group id field size +- Forkert størrelse pÃ¥ gruppe id felt +- +- +- Incorrect group creation time field size +- Forkert størrelse pÃ¥ gruppeoprettelsestidsfelt +- +- +- Incorrect group modification time field size +- Forkert størrelse pÃ¥ gruppemodifikationstidsfelt +- +- +- Incorrect group access time field size +- Forkert størrelse pÃ¥ gruppetilgÃ¥elsestidsfelt +- +- +- Incorrect group expiry time field size +- Forkert størrelse pÃ¥ gruppeudløbstidsfelt +- +- +- Incorrect group icon field size +- Forkert størrelse pÃ¥ gruppefelt +- +- +- Incorrect group level field size +- Forkert størrelse pÃ¥ gruppefelt +- +- +- Invalid group field type +- Ugyldig gruppefeltstype +- +- +- Missing group id or level +- Mangler gruppe id eller niveau +- +- +- Missing entry field type number +- Manglende type nummer for gruppefelt +- +- +- Invalid entry field size +- Ugyldig størrelse pÃ¥ gruppefelt +- +- +- Read entry field data doesn't match size +- Postens data længde passer ikke +- +- +- Invalid entry uuid field size +- Ugyldig uuid-værdi +- +- +- Invalid entry group id field size +- Ugyldig størrelse pÃ¥ gruppe id felt +- +- +- Invalid entry icon field size +- Ugyldig størrelse pÃ¥ postikonsfelt +- +- +- Invalid entry creation time field size +- Ugyldig størrelse pÃ¥ postoprettelsestidsfelt +- +- +- Invalid entry modification time field size +- Ugyldig størrelse pÃ¥ postmodifikationstidsfelt +- +- +- Invalid entry expiry time field size +- Ugyldig størrelse pÃ¥ postudløbstidsfelt +- +- +- Invalid entry field type +- Ugyldig post-felt-type +- +- +- unable to seek to content position +- kan ikke søge til indholdets placering +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- +- +- +- Unable to calculate database key +- +- +- +- +- KeeShare +- +- Invalid sharing reference +- +- +- +- Inactive share %1 +- +- +- +- Imported from %1 +- Importerer fra %1 +- +- +- Exported to %1 +- +- +- +- Synchronized with %1 +- +- +- +- Import is disabled in settings +- +- +- +- Export is disabled in settings +- +- +- +- Inactive share +- +- +- +- Imported from +- +- +- +- Exported to +- +- +- +- Synchronized with +- +- +- +- +- KeyComponentWidget +- +- Key Component +- Nøglekomponent +- +- +- Key Component Description +- Beskrivelse for nøglekomponent +- +- +- Cancel +- Annuller +- +- +- Key Component set, click to change or remove +- Nøglekomponenten er indstillet, klik for at ændre eller fjerne +- +- +- Add %1 +- Add a key component +- Tilføj %1 +- +- +- Change %1 +- Change a key component +- Skift %1 +- +- +- Remove %1 +- Remove a key component +- Fjern %1 +- +- +- %1 set, click to change or remove +- Change or remove a key component +- %1 er indstillet. Klik for at ændre eller fjerne +- +- +- +- KeyFileEditWidget +- +- Generate +- Generér +- +- +- Key File +- Nøglefil +- +- +- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> +- <p>Du kan tilføje en nøglefil med tilfældige bytes for yderligere sikkerhed.</p><p>Du skal holde den hemmelig og aldrig miste den, ellers vil du være lÃ¥st ude!</p> +- +- +- Error loading the key file '%1' +-Message: %2 +- Fejl ved indlæsning af nøglefilen '%1' +-Meddelelse: %2 +- +- +- Key files +- Nøglefiler +- +- +- All files +- Alle filer +- +- +- Create Key File... +- Opret nøglefil ... +- +- +- Error creating key file +- Fejl ved oprettelse af nøglefil +- +- +- Unable to create key file: %1 +- Kan ikke oprette nøglefil: %1 +- +- +- Select a key file +- Vælg en nøglefil +- +- +- Key file selection +- +- +- +- Browse for key file +- +- +- +- Browse... +- Gennemse ... +- +- +- Generate a new key file +- +- +- +- Note: Do not use a file that may change as that will prevent you from unlocking your database! +- +- +- +- Invalid Key File +- +- +- +- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. +- +- +- +- Suspicious Key File +- +- +- +- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. +-Are you sure you want to continue with this file? +- +- +- +- Old key file format +- +- +- +- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. +- +- +- +- +- MainWindow +- +- &Database +- &Database +- +- +- &Help +- &Hjælp +- +- +- &Groups +- &Grupper +- +- +- &Tools +- &Værktøjer +- +- +- &Quit +- &Afslut +- +- +- &About +- &Om +- +- +- Database settings +- Databaseindstillinger +- +- +- Copy username to clipboard +- Kopiér brugernavn til udklipsholder +- +- +- Copy password to clipboard +- Kopiér adgangskode til udklipsholder +- +- +- &Settings +- &Indstillinger +- +- +- &Title +- &Titel +- +- +- Copy title to clipboard +- Kopiér titel til udklipsholder +- +- +- &URL +- &URL +- +- +- Copy URL to clipboard +- Kopiér URL til udklipsholder +- +- +- &Notes +- &Bemærkninger +- +- +- Copy notes to clipboard +- Kopiér bemærkninger til udklipsholder +- +- +- Copy &TOTP +- Kopiér &TOTP +- +- +- E&mpty recycle bin +- &Tøm papirkurven +- +- +- Clear history +- Ryd historik +- +- +- Access error for config file %1 +- Adgangsfejl for konfigurationsfil %1 +- +- +- Settings +- Indstillinger +- +- +- Toggle window +- Skift vindue +- +- +- Quit KeePassXC +- Luk KeePassXC +- +- +- Please touch the button on your YubiKey! +- Tryk pÃ¥ knappen pÃ¥ din YubiKey! +- +- +- WARNING: You are using an unstable build of KeePassXC! +-There is a high risk of corruption, maintain a backup of your databases. +-This version is not meant for production use. +- ADVARSEL: Du bruger en ustabil udgave af KeePassXC! +-Der er høj risiko for korruption, sørg for at have en sikkerhedskopi af dine databaser. +-Denne version er ikke beregnet til at blive brugt i produktion. +- +- +- &Donate +- &Donér +- +- +- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +-We recommend you use the AppImage available on our downloads page. +- ADVARSEL: Din Qt-version kan fÃ¥ KeePassXC til at holde op med at virke ved brug af skærmtastatur! +-Vi anbefaler at du i bruger det AppImage som findes pÃ¥ vores downloadside. +- +- +- &Import +- &Importér +- +- +- Create a new database +- Opret en ny database +- +- +- Merge from another KDBX database +- Sammenlæg fra en anden KDBX-database +- +- +- Add a new entry +- Tilføj en ny post +- +- +- View or edit entry +- Vis eller rediger post +- +- +- Add a new group +- Tilføj en ny gruppe +- +- +- Perform &Auto-Type +- Udfør &autoskriv +- +- +- Open &URL +- Ã…bn &URL +- +- +- Import a KeePass 1 database +- Importér en KeePass 1-database +- +- +- Import a CSV file +- Importér en CSV-fil +- +- +- NOTE: You are using a pre-release version of KeePassXC! +-Expect some bugs and minor issues, this version is not meant for production use. +- BEMÆRK: Du bruger en præudgivelsesversion af KeePassXC! +-Forvent nogle fejl og mindre problemer. Denne version er ikke beregnet til produktionsbrug. +- +- +- Check for updates on startup? +- Søg efter opdateringer ved opstart? +- +- +- Would you like KeePassXC to check for updates on startup? +- Skal KeePassXC søge efter opdateringer ved opstart? +- +- +- You can always check for updates manually from the application menu. +- Du kan altid søge efter opdateringer manuelt fra programmenuen. +- +- +- &Export +- &Eksportér +- +- +- Sort &A-Z +- Sortér &A-Ã… +- +- +- Sort &Z-A +- Sortér &Ã…-A +- +- +- &Password Generator +- &Adgangskodegenerator +- +- +- Import a 1Password Vault +- Importér en 1Password-boks +- +- +- &Getting Started +- &Kom godt i gang +- +- +- &User Guide +- &Brugerguide +- +- +- &Keyboard Shortcuts +- &Tastaturgenveje +- +- +- &Recent Databases +- +- +- +- &Entries +- +- +- +- Copy Att&ribute +- +- +- +- TOTP +- TOTP +- +- +- View +- Vis +- +- +- Theme +- +- +- +- &Check for Updates +- +- +- +- &Open Database… +- +- +- +- &Save Database +- +- +- +- &Close Database +- +- +- +- &New Database… +- +- +- +- &Merge From Database… +- +- +- +- &New Entry… +- +- +- +- &Edit Entry… +- +- +- +- &Delete Entry… +- +- +- +- &New Group… +- +- +- +- &Edit Group… +- +- +- +- &Delete Group… +- +- +- +- Download All &Favicons… +- +- +- +- Sa&ve Database As… +- +- +- +- Database &Security… +- +- +- +- Database &Reports... +- +- +- +- Statistics, health check, etc. +- +- +- +- &Database Settings… +- +- +- +- &Clone Entry… +- +- +- +- Move u&p +- +- +- +- Move entry one step up +- +- +- +- Move do&wn +- +- +- +- Move entry one step down +- +- +- +- Copy &Username +- +- +- +- Copy &Password +- +- +- +- Download &Favicon +- +- +- +- &Lock Databases +- +- +- +- &CSV File… +- +- +- +- &HTML File… +- +- +- +- KeePass 1 Database… +- +- +- +- 1Password Vault… +- +- +- +- CSV File… +- +- +- +- Show TOTP +- Vis TOTP +- +- +- Show QR Code +- +- +- +- Set up TOTP… +- +- +- +- Report a &Bug +- +- +- +- Open Getting Started Guide +- +- +- +- &Online Help +- +- +- +- Go to online documentation +- +- +- +- Open User Guide +- +- +- +- Save Database Backup... +- +- +- +- Add key to SSH Agent +- +- +- +- Remove key from SSH Agent +- +- +- +- Compact Mode +- +- +- +- Automatic +- +- +- +- Light +- +- +- +- Dark +- +- +- +- Classic (Platform-native) +- +- +- +- Show Toolbar +- +- +- +- Show Preview Panel +- +- +- +- Don't show again for this version +- +- +- +- Restart Application? +- +- +- +- You must restart the application to apply this setting. Would you like to restart now? +- +- +- +- Perform Auto-Type Sequence +- +- +- +- {USERNAME} +- +- +- +- {USERNAME}{ENTER} +- +- +- +- {PASSWORD} +- +- +- +- {PASSWORD}{ENTER} +- +- +- +- Always on Top +- +- +- +- Hide Usernames +- Skjul brugernavne +- +- +- Hide Passwords +- Skjul adgangskoder +- +- +- +- ManageDatabase +- +- Database settings +- Databaseindstillinger +- +- +- Edit database settings +- +- +- +- Unlock database +- LÃ¥s database op +- +- +- Unlock database to show more information +- +- +- +- Lock database +- LÃ¥s database +- +- +- +- ManageSession +- +- Disconnect +- +- +- +- Disconnect this application +- +- +- +- +- Merger +- +- Creating missing %1 [%2] +- Opretter manglende %1 [%2] +- +- +- Relocating %1 [%2] +- Flytter %1 [%2] +- +- +- Overwriting %1 [%2] +- Overskriver %1 [%2] +- +- +- older entry merged from database "%1" +- gammel post sammenlagt fra databasen "%1" +- +- +- Adding backup for older target %1 [%2] +- Tilføjer sikkerhedskopi til ældre mÃ¥l %1 [%2] +- +- +- Adding backup for older source %1 [%2] +- Tilføjer sikkerhedskopi til ældre kilde %1 [%2] +- +- +- Reapplying older target entry on top of newer source %1 [%2] +- Genanvender ældre mÃ¥lpost oven pÃ¥ nyere kilde %1 [%2] +- +- +- Reapplying older source entry on top of newer target %1 [%2] +- Genanvender ældre kildepost oven pÃ¥ nyere mÃ¥l %1 [%2] +- +- +- Synchronizing from newer source %1 [%2] +- Synkroniserer fra nyere kilde %1 [%2] +- +- +- Synchronizing from older source %1 [%2] +- Synkroniserer fra ældre kilde %1 [%2] +- +- +- Deleting child %1 [%2] +- Sletter barnet %1 [%2] +- +- +- Deleting orphan %1 [%2] +- Sletter forælderløse %1 [%2] +- +- +- Changed deleted objects +- Ændrede slettet objekter +- +- +- Adding missing icon %1 +- Tilføjer manglende ikon %1 +- +- +- Removed custom data %1 [%2] +- +- +- +- Adding custom data %1 [%2] +- +- +- +- +- NewDatabaseWizard +- +- Create a new KeePassXC database... +- Opret en ny KeePassXC-database ... +- +- +- Root +- Root group +- Rod +- +- +- +- NewDatabaseWizardPage +- +- WizardPage +- Assistentside +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Her kan du justere databasens krypteringsindstillinger. Bare rolig, du kan ændre dem senere i databaseindstillingerne. +- +- +- Advanced Settings +- Avancerede indstillinger +- +- +- Simple Settings +- Simple indstillinger +- +- +- Encryption Settings +- Krypteringsindstillinger +- +- +- +- NewDatabaseWizardPageDatabaseKey +- +- Database Credentials +- +- +- +- A set of credentials known only to you that protects your database. +- +- +- +- +- NewDatabaseWizardPageEncryption +- +- Encryption Settings +- Krypteringsindstillinger +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Her kan du justere databasens krypteringsindstillinger. Bare rolig, du kan ændre dem senere i databaseindstillingerne. +- +- +- +- NewDatabaseWizardPageMetaData +- +- General Database Information +- Generel information om database +- +- +- Please fill in the display name and an optional description for your new database: +- Udfyld venligst det navn som skal vises og en valgfri beskrivelse til din nye database: +- +- +- +- NixUtils +- +- Password Manager +- +- +- +- +- OpData01 +- +- Invalid OpData01, does not contain header +- +- +- +- Unable to read all IV bytes, wanted 16 but got %1 +- +- +- +- Unable to init cipher for opdata01: %1 +- +- +- +- Unable to read all HMAC signature bytes +- +- +- +- Malformed OpData01 due to a failed HMAC +- +- +- +- Unable to process clearText in place +- +- +- +- Expected %1 bytes of clear-text, found %2 +- +- +- +- +- OpVaultOpenWidget +- +- Read Database did not produce an instance +-%1 +- +- +- +- +- OpVaultReader +- +- Directory .opvault must exist +- +- +- +- Directory .opvault must be readable +- +- +- +- Directory .opvault/default must exist +- +- +- +- Directory .opvault/default must be readable +- +- +- +- Unable to decode masterKey: %1 +- +- +- +- Unable to derive master key: %1 +- +- +- +- +- OpenSSHKey +- +- Invalid key file, expecting an OpenSSH key +- Ugyldig nøglefil, forventede en OpenSSH nøgle +- +- +- PEM boundary mismatch +- Uoverensstemmelse i PEM-grænse +- +- +- Base64 decoding failed +- Base64-afkodning mislykkedes +- +- +- Key file way too small. +- Nøglefil er alt for lille. +- +- +- Key file magic header id invalid +- Nøglefil magic i header er ugyldig +- +- +- Found zero keys +- Fandt ingen nøgler +- +- +- Failed to read public key. +- Kunne ikke læse offentlig nøgle. +- +- +- Corrupted key file, reading private key failed +- Korrupt nøglefil, kan ikke læse privat nøgle +- +- +- No private key payload to decrypt +- Der er ingen privat nøgle at dekryptere +- +- +- Trying to run KDF without cipher +- Prøver at køre KDF uden ciffer +- +- +- Passphrase is required to decrypt this key +- Adgangssætning er nødvendig for at dekryptere denne nøgle +- +- +- Key derivation failed, key file corrupted? +- Nøgleafledning mislykkedes, er nøglefilen korrupt? +- +- +- Decryption failed, wrong passphrase? +- Dekryptering mislykkedes, forkert adgangssætning? +- +- +- Unexpected EOF while reading public key +- Offentlig nøgle sluttede uventet under læsningen +- +- +- Unexpected EOF while reading private key +- Privat nøgle sluttede uventet under læsningen +- +- +- Can't write public key as it is empty +- Kan ikke skrive offentlig nøgle, da den er tom +- +- +- Unexpected EOF when writing public key +- Offentlig nøgle sluttede uventet under skrivning +- +- +- Can't write private key as it is empty +- Kan ikke skrive nøglen da den er tom +- +- +- Unexpected EOF when writing private key +- Privat nøgle sluttede uventet under skrivning +- +- +- Unsupported key type: %1 +- Ikke-understøttet nøgletype: %1 +- +- +- Unknown cipher: %1 +- Ukendt ciffer: %1 +- +- +- Cipher IV is too short for MD5 kdf +- Ciffer IV er for kort til MD5 KDF +- +- +- Unknown KDF: %1 +- Ukendt KDF: %1 +- +- +- Unknown key type: %1 +- Ukendt nøgletype: %1 +- +- +- +- PasswordEdit +- +- Passwords do not match +- +- +- +- Passwords match so far +- +- +- +- Toggle Password (%1) +- +- +- +- Generate Password (%1) +- +- +- +- Warning: Caps Lock enabled! +- +- +- +- +- PasswordEditWidget +- +- Enter password: +- Indtast adgangskode: +- +- +- Confirm password: +- Bekræft adgangskode: +- +- +- Password +- Adgangskode +- +- +- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> +- <p>En adgangskode er den primære metode til at sikre din database.</p><p>Gode adgangskoder er lange og unikke. KeePassXC kan generere en for dig.</p> +- +- +- Passwords do not match. +- Adgangskoderne er ikke ens. +- +- +- Password field +- +- +- +- Repeat password field +- +- +- +- +- PasswordGeneratorWidget +- +- %p% +- %p% +- +- +- strength +- Password strength +- styrke +- +- +- entropy +- entropi +- +- +- Password +- Adgangskode +- +- +- Character Types +- Tegntyper +- +- +- Numbers +- Tal +- +- +- Extended ASCII +- Udvidet ASCII +- +- +- Exclude look-alike characters +- Udeluk tegn som ligner hinanden +- +- +- Pick characters from every group +- Vælg tegn fra alle grupper +- +- +- &Length: +- &Længde: +- +- +- Passphrase +- Adgangssætning +- +- +- Wordlist: +- Ordliste: +- +- +- Word Separator: +- Ordseparator: +- +- +- Close +- Luk +- +- +- Entropy: %1 bit +- Entropi: %1 bit +- +- +- Password Quality: %1 +- Kvaliteten af adgangskoden: %1 +- +- +- Poor +- Password quality +- DÃ¥rlig +- +- +- Weak +- Password quality +- Svag +- +- +- Good +- Password quality +- God +- +- +- Excellent +- Password quality +- Fremragende +- +- +- Switch to advanced mode +- Skift til avanceret tilstand +- +- +- Advanced +- Avanceret +- +- +- Braces +- Parenteser +- +- +- Punctuation +- Tegnsætning +- +- +- Quotes +- Citationstegn +- +- +- Logograms +- Logogrammer +- +- +- Character set to exclude from generated password +- Tegnsæt som skal medtages fra generede adgangskode +- +- +- Do not include: +- Medtag ikke: +- +- +- Add non-hex letters to "do not include" list +- Tilføj tegn som ikke er hex i "medtag ikke"-liste +- +- +- Hex +- Hex +- +- +- Excluded characters: "0", "1", "l", "I", "O", "|", "ï¹’" +- Udeluk tegnene: "0", "1", "l", "I", "O", "|", "ï¹’" +- +- +- Generated password +- +- +- +- Upper-case letters +- +- +- +- Lower-case letters +- +- +- +- Special characters +- +- +- +- Math Symbols +- +- +- +- Dashes and Slashes +- +- +- +- Excluded characters +- +- +- +- Hex Passwords +- +- +- +- Password length +- +- +- +- Word Case: +- +- +- +- Regenerate password +- +- +- +- Copy password +- Kopiér kodeord +- +- +- lower case +- +- +- +- UPPER CASE +- +- +- +- Title Case +- +- +- +- Generate Password +- +- +- +- Also choose from: +- +- +- +- Additional characters to use for the generated password +- +- +- +- Additional characters +- +- +- +- Word Count: +- Antal ord: +- +- +- Esc +- +- +- +- Apply Password +- +- +- +- Ctrl+S +- +- +- +- Regenerate password (%1) +- +- +- +- Special Characters +- Specialtegn +- +- +- +- QApplication +- +- KeeShare +- KeeShare +- +- +- Statistics +- +- +- +- Very weak password +- +- +- +- Password entropy is %1 bits +- +- +- +- Weak password +- +- +- +- Used in %1/%2 +- +- +- +- Password is used %1 times +- +- +- +- Password has expired +- +- +- +- Password expiry was %1 +- +- +- +- Password is about to expire +- +- +- +- Password expires in %1 days +- +- +- +- Password will expire soon +- +- +- +- Password expires on %1 +- +- +- +- Health Check +- +- +- +- HIBP +- +- +- +- +- QMessageBox +- +- Overwrite +- Overskriv +- +- +- Delete +- Slet +- +- +- Move +- Flyt +- +- +- Empty +- Tøm +- +- +- Remove +- Fjern +- +- +- Skip +- Spring over +- +- +- Disable +- Deaktivér +- +- +- Merge +- Sammenlæg +- +- +- Continue +- +- +- +- +- QObject +- +- Database not opened +- Databasen er ikke Ã¥bnet +- +- +- Database hash not available +- Databasehash er ikke tilgængeligt +- +- +- Client public key not received +- Offentlig nøgle for klient ikke modtaget +- +- +- Cannot decrypt message +- Kan ikke dekryptere besked +- +- +- Action cancelled or denied +- Handlingen blev annulleret eller nægtet +- +- +- KeePassXC association failed, try again +- KeePassXC-tilknytning mislykkedes, prøv igen +- +- +- Encryption key is not recognized +- Krypteringsnøgle ikke genkendt +- +- +- Incorrect action +- Forkert handling +- +- +- Empty message received +- Tom besked modtaget +- +- +- No URL provided +- Ingen URL angivet +- +- +- No logins found +- Ingen logins fundet +- +- +- Unknown error +- Ukendt fejl +- +- +- Add a new entry to a database. +- Tilføj en ny post til en database. +- +- +- Path of the database. +- Sti til databasen. +- +- +- Key file of the database. +- Databasens nøglefil. +- +- +- path +- sti +- +- +- Username for the entry. +- Brugernavn for posten. +- +- +- username +- brugernavn +- +- +- URL for the entry. +- URL for posten. +- +- +- URL +- URL +- +- +- Prompt for the entry's password. +- Spørg om postens adgangskode. +- +- +- Generate a password for the entry. +- Generér en adgangskode for posten. +- +- +- length +- længde +- +- +- Path of the entry to add. +- Sti for posten, som skal tilføjes. +- +- +- Path of the entry to clip. +- clip = copy to clipboard +- Sti til posten, som skal klippes. +- +- +- Timeout in seconds before clearing the clipboard. +- Timeout i sekunder før udklipsholderen ryddes. +- +- +- Edit an entry. +- Rediger en post. +- +- +- Title for the entry. +- Titel for post. +- +- +- title +- titel +- +- +- Path of the entry to edit. +- Sti til posten, som skal redigeres. +- +- +- Estimate the entropy of a password. +- Estimat for entropi af en adgangskode. +- +- +- Password for which to estimate the entropy. +- Adgangskode, som entropi skal estimeres for. +- +- +- Perform advanced analysis on the password. +- Udfør avanceret analyse af adgangskoden. +- +- +- +- +-Available commands: +- +- +- +-Tilgængelige kommandoer: +- +- +- +- Name of the command to execute. +- Navn pÃ¥ kommando, som skal udføres. +- +- +- List database entries. +- Vis poster i databasen. +- +- +- Path of the group to list. Default is / +- Sti til gruppen, som skal vises. Standard er / +- +- +- Find entries quickly. +- Find poster hurtigt. +- +- +- Search term. +- Søgefrase. +- +- +- Merge two databases. +- Sammenlæg to databaser. +- +- +- Path of the database to merge from. +- Sti til databasen, som skal sammenlægges fra. +- +- +- Use the same credentials for both database files. +- Brug de samme loginoplysninger til begge databasefiler. +- +- +- Key file of the database to merge from. +- Nøglefil for databasen, som der skal sammenlægges fra. +- +- +- Show an entry's information. +- Vis information for en post. +- +- +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- Navne pÃ¥ attributter, som skal vises. Denne indstilling kan blive angivet mere end en gang, med hver attribut vist per linje i den angivne orden. Hvis ingen attributter bliver angivet vil en oversigt af standardattributter blive vist. +- +- +- attribute +- attribut +- +- +- Name of the entry to show. +- Navn pÃ¥ posten, som skal vises. +- +- +- NULL device +- NULL-enhed +- +- +- error reading from device +- fejl ved læsning fra enhed +- +- +- malformed string +- forkert udformet streng +- +- +- missing closing quote +- mangler afsluttende kvoteringstegn +- +- +- Group +- Gruppe +- +- +- Title +- Titel +- +- +- Username +- Brugernavn +- +- +- Password +- Adgangskode +- +- +- Notes +- Bemærkninger +- +- +- Last Modified +- Sidst ændret +- +- +- Created +- Oprettet +- +- +- Browser Integration +- Browserintegritet +- +- +- SSH Agent +- SSH-agent +- +- +- Generate a new random diceware passphrase. +- Generér en ny tilfældig diceware-adgangssætning. +- +- +- Word count for the diceware passphrase. +- Ordtælling for diceware-adgangssætning. +- +- +- Wordlist for the diceware generator. +-[Default: EFF English] +- Ordliste for diceware-generator. +-[Standard: EFF Engelsk] +- +- +- Generate a new random password. +- Generér en ny tilfældig adgangskode. +- +- +- Could not create entry with path %1. +- Kunne ikke oprette post med stien %1. +- +- +- Enter password for new entry: +- Indtast adgangskode til ny post: +- +- +- Writing the database failed %1. +- Kunne ikke skrive databasen %1. +- +- +- Successfully added entry %1. +- Det lykkedes at tilføje posten %1. +- +- +- Invalid timeout value %1. +- Ugyldig timeout-værdi %1. +- +- +- Entry %1 not found. +- Posten %1 blev ikke fundet. +- +- +- Entry with path %1 has no TOTP set up. +- Posten med stien %1 har ikke opsat nogen TOTP. +- +- +- Clearing the clipboard in %1 second(s)... +- Rydder udklipsholderen om %1 sekund ...Rydder udklipsholderen om %1 sekunder ... +- +- +- Clipboard cleared! +- Udklipsholder ryddet! +- +- +- Silence password prompt and other secondary outputs. +- Gør adgangskodeprompt og andre sekundære outputs stille. +- +- +- count +- CLI parameter +- antal +- +- +- Could not find entry with path %1. +- Kunne ikke finde post med stien %1. +- +- +- Not changing any field for entry %1. +- Ændre ikke nogen felter for posten %1. +- +- +- Enter new password for entry: +- Indtast ny adgangskode for posten: +- +- +- Writing the database failed: %1 +- Skrivning af databasen mislykkedes: %1 +- +- +- Successfully edited entry %1. +- Det lykkedes at redigere posten %1. +- +- +- Length %1 +- Længde %1 +- +- +- Entropy %1 +- Entropi %1 +- +- +- Log10 %1 +- Log10 %1 +- +- +- Multi-word extra bits %1 +- Ekstra bits for multiord %1 +- +- +- Type: Bruteforce +- Type: Bruteforce +- +- +- Type: Dictionary +- Type: Ordbog +- +- +- Type: Dict+Leet +- Type: Ordbog+leet +- +- +- Type: User Words +- Type: Brugerord +- +- +- Type: User+Leet +- Type: Bruger ord+leet +- +- +- Type: Repeated +- Type: Gentaget +- +- +- Type: Sequence +- Type: Sekvens +- +- +- Type: Spatial +- Type: Rumlig +- +- +- Type: Date +- Type: Dato +- +- +- Type: Bruteforce(Rep) +- Type: Bruteforce(gentaget) +- +- +- Type: Dictionary(Rep) +- Type: Ordbog(gentaget) +- +- +- Type: Dict+Leet(Rep) +- Type: Ordbog+leet(gentaget) +- +- +- Type: User Words(Rep) +- Type: Brugerord(gentaget) +- +- +- Type: User+Leet(Rep) +- Type: Bruger ord+leet(gentaget) +- +- +- Type: Repeated(Rep) +- Type: Gentaget(gentaget) +- +- +- Type: Sequence(Rep) +- Type: Sekvens(gentaget) +- +- +- Type: Spatial(Rep) +- Type: Rumlig(gentaget) +- +- +- Type: Date(Rep) +- Type: Dato(gentaget) +- +- +- Type: Unknown%1 +- Type: Ukendt%1 +- +- +- Entropy %1 (%2) +- Entropi %1 (%2) +- +- +- *** Password length (%1) != sum of length of parts (%2) *** +- *** Længde pÃ¥ adgangskode (%1) != summen af længden pÃ¥ delene (%2) *** +- +- +- Failed to load key file %1: %2 +- Kunne ikke indlæse nøglefilen %1: %2 +- +- +- Length of the generated password +- Længde pÃ¥ den genereret adgangskode +- +- +- Use lowercase characters +- Brug tegn med smÃ¥ bogstaver +- +- +- Use uppercase characters +- Brug tegn med store bogstaver +- +- +- Use special characters +- Brug specialtegn +- +- +- Use extended ASCII +- Brug udvidet ASCII +- +- +- Exclude character set +- Udeluk tegnsæt +- +- +- chars +- tegn +- +- +- Exclude similar looking characters +- Udeluk tegn som ligner hinanden +- +- +- Include characters from every selected group +- Medtag tegn fra hver valgte gruppe +- +- +- Recursively list the elements of the group. +- Vis elementerne i gruppen rekursivt. +- +- +- Cannot find group %1. +- Kan ikke finde gruppen %1. +- +- +- Error reading merge file: +-%1 +- Fejl ved læsning af sammenlægningsfil: +-%1 +- +- +- Unable to save database to file : %1 +- Kan ikke gemme database til filen : %1 +- +- +- Unable to save database to file: %1 +- Kan ikke gemme database til filen: %1 +- +- +- Successfully recycled entry %1. +- Det lykkedes at genbruge posten %1. +- +- +- Successfully deleted entry %1. +- Det lykkedes at slette posten %1. +- +- +- Show the entry's current TOTP. +- Vis postens nuværende TOTP. +- +- +- ERROR: unknown attribute %1. +- FEJL: ukendt attribut %1. +- +- +- No program defined for clipboard manipulation +- Der er ikke angivet noget program til manipulering af udklipsholderen +- +- +- file empty +- filen er tom +- +- +- %1: (row, col) %2,%3 +- %1: (række, kolonne) %2,%3 +- +- +- AES-KDF (KDBX 4) +- AES-KDF (KDBX 4) +- +- +- AES-KDF (KDBX 3.1) +- AES-KDF (KDBX 3.1) +- +- +- Invalid Settings +- TOTP +- Ugyldige indstillinger +- +- +- Invalid Key +- TOTP +- Ugyldig nøgle +- +- +- Message encryption failed. +- Kryptering af meddelelse mislykkedes. +- +- +- No groups found +- Fandt ingen grupper +- +- +- Create a new database. +- Opret en ny database. +- +- +- File %1 already exists. +- Filen %1 findes allerede. +- +- +- Loading the key file failed +- Indlæsning af nøglefilen mislykkedes +- +- +- No key is set. Aborting database creation. +- Der er ikke indstillet nogen nøgle. Afbryder oprettelse af database. +- +- +- Failed to save the database: %1. +- Kunne ikke gemme databasen: %1. +- +- +- Successfully created new database. +- Oprettelse af ny database lykkedes. +- +- +- Creating KeyFile %1 failed: %2 +- Oprettelse af nøglefilen %1 mislykkedes: %2 +- +- +- Loading KeyFile %1 failed: %2 +- Indlæsning af nøglefilen %1 mislykkedes: %2 +- +- +- Path of the entry to remove. +- Sti til posten, som skal fjernes. +- +- +- Existing single-instance lock file is invalid. Launching new instance. +- Eksisterende én-instans lÃ¥sefil er ugyldig. Starter ny instans. +- +- +- The lock file could not be created. Single-instance mode disabled. +- LÃ¥sefil kunne ikke oprettes. Én-instans-tilstand slÃ¥et fra. +- +- +- KeePassXC - cross-platform password manager +- KeePassXC - adgangskodehÃ¥ndtering pÃ¥ tværs af platforme +- +- +- filenames of the password databases to open (*.kdbx) +- filnavne pÃ¥ de adgangskodedatabaser som skal Ã¥bnes (*.kdbx) +- +- +- path to a custom config file +- sti til tilpasset indstillingsfil +- +- +- key file of the database +- databasens nøglefil +- +- +- read password of the database from stdin +- læs adgangskode til databasen fra stdin +- +- +- Another instance of KeePassXC is already running. +- En anden instans af KeePassXC kører allerede. +- +- +- Fatal error while testing the cryptographic functions. +- Fatal fejl ved test af kryptografiske funktioner. +- +- +- KeePassXC - Error +- KeePassXC - Fejl +- +- +- Database password: +- Adgangskode for database: +- +- +- Cannot create new group +- Kan ikke oprette ny gruppe +- +- +- Deactivate password key for the database. +- +- +- +- Displays debugging information. +- +- +- +- Deactivate password key for the database to merge from. +- +- +- +- Version %1 +- +- +- +- Build Type: %1 +- +- +- +- Revision: %1 +- Revision: %1 +- +- +- Distribution: %1 +- Distribution: %1 +- +- +- Debugging mode is disabled. +- +- +- +- Debugging mode is enabled. +- +- +- +- Operating system: %1 +-CPU architecture: %2 +-Kernel: %3 %4 +- Operativsystem: %1 +-CPU-arkitektur: %2 +-Kerne: %3 %4 +- +- +- Auto-Type +- Autoskriv +- +- +- KeeShare (signed and unsigned sharing) +- +- +- +- KeeShare (only signed sharing) +- +- +- +- KeeShare (only unsigned sharing) +- +- +- +- YubiKey +- +- +- +- TouchID +- +- +- +- None +- +- +- +- Enabled extensions: +- Aktiverede udvidelser: +- +- +- Cryptographic libraries: +- +- +- +- Cannot generate a password and prompt at the same time! +- +- +- +- Adds a new group to a database. +- +- +- +- Path of the group to add. +- +- +- +- Group %1 already exists! +- +- +- +- Group %1 not found. +- +- +- +- Successfully added group %1. +- +- +- +- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. +- +- +- +- FILENAME +- +- +- +- Analyze passwords for weaknesses and problems. +- +- +- +- Failed to open HIBP file %1: %2 +- +- +- +- Evaluating database entries against HIBP file, this will take a while... +- +- +- +- Close the currently opened database. +- +- +- +- Display this help. +- +- +- +- slot +- +- +- +- Invalid word count %1 +- +- +- +- The word list is too small (< 1000 items) +- +- +- +- Exit interactive mode. +- +- +- +- Exports the content of a database to standard output in the specified format. +- +- +- +- Unable to export database to XML: %1 +- +- +- +- Unsupported format %1 +- +- +- +- Use numbers +- +- +- +- Invalid password length %1 +- +- +- +- Display command help. +- +- +- +- Available commands: +- +- +- +- Import the contents of an XML database. +- +- +- +- Path of the XML database export. +- +- +- +- Path of the new database. +- +- +- +- Successfully imported database. +- +- +- +- Unknown command %1 +- +- +- +- Flattens the output to single lines. +- +- +- +- Only print the changes detected by the merge operation. +- +- +- +- Yubikey slot for the second database. +- +- +- +- Successfully merged %1 into %2. +- +- +- +- Database was not modified by merge operation. +- Databasen blev ikke ændret af sammenlægningshandlingen. +- +- +- Moves an entry to a new group. +- +- +- +- Path of the entry to move. +- +- +- +- Path of the destination group. +- +- +- +- Could not find group with path %1. +- +- +- +- Entry is already in group %1. +- +- +- +- Successfully moved entry %1 to group %2. +- +- +- +- Open a database. +- +- +- +- Path of the group to remove. +- +- +- +- Cannot remove root group from database. +- +- +- +- Successfully recycled group %1. +- +- +- +- Successfully deleted group %1. +- +- +- +- Failed to open database file %1: not found +- +- +- +- Failed to open database file %1: not a plain file +- +- +- +- Failed to open database file %1: not readable +- +- +- +- Enter password to unlock %1: +- +- +- +- Invalid YubiKey slot %1 +- +- +- +- Enter password to encrypt database (optional): +- +- +- +- HIBP file, line %1: parse error +- +- +- +- Secret Service Integration +- +- +- +- User name +- +- +- +- Password for '%1' has been leaked %2 time(s)! +- +- +- +- Invalid password generator after applying all options +- +- +- +- Show the protected attributes in clear text. +- +- +- +- Browser Plugin Failure +- +- +- +- Could not save the native messaging script file for %1. +- +- +- +- Copy the given attribute to the clipboard. Defaults to "password" if not specified. +- +- +- +- Copy the current TOTP to the clipboard (equivalent to "-a totp"). +- +- +- +- Copy an entry's attribute to the clipboard. +- +- +- +- ERROR: Please specify one of --attribute or --totp, not both. +- +- +- +- ERROR: attribute %1 is ambiguous, it matches %2. +- +- +- +- Attribute "%1" not found. +- +- +- +- Entry's "%1" attribute copied to the clipboard! +- +- +- +- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). +- +- +- +- slot[:serial] +- +- +- +- Target decryption time in MS for the database. +- +- +- +- time +- +- +- +- Set the key file for the database. +- +- +- +- Set a password for the database. +- +- +- +- Invalid decryption time %1. +- +- +- +- Target decryption time must be between %1 and %2. +- +- +- +- Failed to set database password. +- +- +- +- Benchmarking key derivation function for %1ms delay. +- +- +- +- Setting %1 rounds for key derivation function. +- +- +- +- error while setting database key derivation settings. +- +- +- +- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. +- +- +- +- Unable to import XML database: %1 +- +- +- +- Show a database's information. +- +- +- +- UUID: +- +- +- +- Name: +- +- +- +- Description: +- +- +- +- Cipher: +- +- +- +- KDF: +- +- +- +- Recycle bin is enabled. +- +- +- +- Recycle bin is not enabled. +- +- +- +- Invalid command %1. +- +- +- +- Invalid YubiKey serial %1 +- +- +- +- Please touch the button on your YubiKey to continue… +- +- +- +- Do you want to create a database with an empty password? [y/N]: +- +- +- +- Repeat password: +- +- +- +- Error: Passwords do not match. +- +- +- +- All clipping programs failed. Tried %1 +- +- +- +- +- AES (%1 rounds) +- +- +- +- AES 256-bit +- +- +- +- Twofish 256-bit +- +- +- +- ChaCha20 256-bit +- +- +- +- Benchmark %1 delay +- +- +- +- %1 ms +- milliseconds +- +- +- +- %1 s +- seconds +- +- +- +- path to a custom local config file +- +- +- +- WARNING: You are using an old key file format which KeePassXC may +-stop supporting in the future. +- +-Please consider generating a new key file. +- +- +- +- Argon2%1 (%2 rounds, %3 KB) +- +- +- +- Argon2d (KDBX 4 – recommended) +- +- +- +- Argon2id (KDBX 4) +- +- +- +- TOTP +- TOTP +- +- +- Icon +- Ikon +- +- +- Unsupported key file version: %1 +- +- +- +- Checksum mismatch! Key file may be corrupt. +- +- +- +- Unexpected key file data! Key file may be corrupt. +- +- +- +- +- QtIOCompressor +- +- Internal zlib error when compressing: +- Intern zlib-fejl ved komprimering: +- +- +- Error writing to underlying device: +- Fejl ved skrivning til enhed: +- +- +- Error opening underlying device: +- Fejl ved Ã¥bning fra enhed: +- +- +- Error reading data from underlying device: +- Fejl ved læsning af data fra underliggende enhed: +- +- +- Internal zlib error when decompressing: +- Intern zlib-fejl ved dekomprimering: +- +- +- +- QtIOCompressor::open +- +- The gzip format not supported in this version of zlib. +- Gzip-format understøttes ikke i denne version af zlib. +- +- +- Internal zlib error: +- Intern zlib-fejl: +- +- +- +- ReportsWidgetHealthcheck +- +- Also show entries that have been excluded from reports +- +- +- +- Hover over reason to show additional details. Double-click entries to edit. +- +- +- +- Bad +- Password quality +- +- +- +- Bad — password must be changed +- +- +- +- Poor +- Password quality +- DÃ¥rlig +- +- +- Poor — password should be changed +- +- +- +- Weak +- Password quality +- Svag +- +- +- Weak — consider changing the password +- +- +- +- (Excluded) +- +- +- +- This entry is being excluded from reports +- +- +- +- Please wait, health data is being calculated... +- +- +- +- Congratulations, everything is healthy! +- +- +- +- Title +- Titel +- +- +- Path +- Sti +- +- +- Score +- +- +- +- Reason +- +- +- +- Edit Entry... +- +- +- +- Exclude from reports +- +- +- +- +- ReportsWidgetHibp +- +- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. +- +- +- +- Perform Online Analysis +- +- +- +- Also show entries that have been excluded from reports +- +- +- +- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. +- +- +- +- Congratulations, no exposed passwords! +- +- +- +- Title +- Titel +- +- +- Path +- Sti +- +- +- Password exposed… +- +- +- +- (Excluded) +- +- +- +- This entry is being excluded from reports +- +- +- +- once +- +- +- +- up to 10 times +- +- +- +- up to 100 times +- +- +- +- up to 1000 times +- +- +- +- up to 10,000 times +- +- +- +- up to 100,000 times +- +- +- +- up to a million times +- +- +- +- millions of times +- +- +- +- Edit Entry... +- +- +- +- Exclude from reports +- +- +- +- +- ReportsWidgetStatistics +- +- Hover over lines with error icons for further information. +- +- +- +- Name +- Navn +- +- +- Value +- Værdi +- +- +- Please wait, database statistics are being calculated... +- +- +- +- Database name +- +- +- +- Description +- +- +- +- Location +- +- +- +- Last saved +- +- +- +- Unsaved changes +- +- +- +- yes +- +- +- +- no +- +- +- +- The database was modified, but the changes have not yet been saved to disk. +- +- +- +- Number of groups +- +- +- +- Number of entries +- +- +- +- Number of expired entries +- +- +- +- The database contains entries that have expired. +- +- +- +- Unique passwords +- +- +- +- Non-unique passwords +- +- +- +- More than 10% of passwords are reused. Use unique passwords when possible. +- +- +- +- Maximum password reuse +- +- +- +- Some passwords are used more than three times. Use unique passwords when possible. +- +- +- +- Number of short passwords +- +- +- +- Recommended minimum password length is at least 8 characters. +- +- +- +- Number of weak passwords +- +- +- +- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. +- +- +- +- Entries excluded from reports +- +- +- +- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. +- +- +- +- Average password length +- +- +- +- %1 characters +- +- +- +- Average password length is less than ten characters. Longer passwords provide more security. +- +- +- +- +- SSHAgent +- +- Agent connection failed. +- Forbindelse til agent mislykkedes. +- +- +- Agent protocol error. +- Fejl ved agentens protokol. +- +- +- No agent running, cannot add identity. +- Der kører ikke nogen agent. Kan ikke tilføje identitet. +- +- +- No agent running, cannot remove identity. +- Der kører ikke nogen agent. Kan ikke fjerne identitet. +- +- +- Agent refused this identity. Possible reasons include: +- Agenten nægter identiteten. Mulige Ã¥rsager inkluderer: +- +- +- The key has already been added. +- Nøglen er allerede blevet tilføjet. +- +- +- Restricted lifetime is not supported by the agent (check options). +- Begrænset livstid understøttes ikke af agenten (tjek indstillingerne). +- +- +- A confirmation request is not supported by the agent (check options). +- En bekræftelsesanmodning understøttes ikke af agenten (tjek indstillingerne). +- +- +- Key identity ownership conflict. Refusing to add. +- +- +- +- No agent running, cannot list identities. +- +- +- +- +- SearchHelpWidget +- +- Search Help +- Søg i hjælp +- +- +- Search terms are as follows: [modifiers][field:]["]term["] +- Søgefraser er som følger: [modifiers][felt:]["]frase["] +- +- +- Every search term must match (ie, logical AND) +- Hver søgefrase skal matche (dvs. logisk OG) +- +- +- Modifiers +- Modifiers +- +- +- exclude term from results +- udeluk frase fra resultater +- +- +- match term exactly +- match frase præcist +- +- +- use regex in term +- brug regulært udtryk i frase +- +- +- Fields +- Felter +- +- +- Term Wildcards +- Jokertegn i frase +- +- +- match anything +- match alt +- +- +- match one +- match én +- +- +- logical OR +- logisk ELLER +- +- +- Examples +- Eksempler +- +- +- +- SearchWidget +- +- Search +- Søg +- +- +- Limit search to selected group +- Begræns søgning til den valgte gruppe +- +- +- Search Help +- Søg i hjælp +- +- +- Search (%1)... +- Search placeholder text, %1 is the keyboard shortcut +- Søg (%1) ... +- +- +- Case sensitive +- Der skelnes mellem store og smÃ¥ bogstaver +- +- +- +- SettingsWidgetFdoSecrets +- +- Options +- +- +- +- Enable KeepassXC Freedesktop.org Secret Service integration +- +- +- +- General +- Generelt +- +- +- Show notification when credentials are requested +- +- +- +- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> +- +- +- +- Exposed database groups: +- +- +- +- Authorization +- +- +- +- These applications are currently connected: +- +- +- +- Don't confirm when entries are deleted by clients +- +- +- +- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. +- +- +- +- <b>Warning:</b> +- +- +- +- Save current changes to activate the plugin and enable editing of this section. +- +- +- +- +- SettingsWidgetKeeShare +- +- Active +- Aktivering +- +- +- Allow export +- Tillad eksport +- +- +- Allow import +- Tillad import +- +- +- Own certificate +- Eget certifikat +- +- +- Fingerprint: +- Fingeraftryk: +- +- +- Certificate: +- Certifikat: +- +- +- Signer +- Underskriver +- +- +- Key: +- Nøgle: +- +- +- Generate +- Generér +- +- +- Import +- Importér +- +- +- Export +- Eksportér +- +- +- Imported certificates +- Importerede certifikater +- +- +- Trust +- Giv troværdighed +- +- +- Ask +- Spørg +- +- +- Untrust +- Fjern troværdighed +- +- +- Remove +- Fjern +- +- +- Path +- Sti +- +- +- Status +- Status +- +- +- Fingerprint +- Fingeraftryk +- +- +- Certificate +- Certifikat +- +- +- Trusted +- Troværdig +- +- +- Untrusted +- Ikke troværdig +- +- +- Unknown +- Ukendt +- +- +- key.share +- Filetype for KeeShare key +- nøgle.deling +- +- +- KeeShare key file +- KeeShare-nøglefil +- +- +- All files +- Alle filer +- +- +- Select path +- Vælg sti +- +- +- Exporting changed certificate +- Eksporterer ændret certifikat +- +- +- The exported certificate is not the same as the one in use. Do you want to export the current certificate? +- Det eksporterede certifikat er ikke det samme som det der er i brug. Vil du eksportere det nuværende certifikat? +- +- +- Signer: +- Underskriver: +- +- +- Allow KeeShare imports +- +- +- +- Allow KeeShare exports +- +- +- +- Only show warnings and errors +- +- +- +- Key +- Nøgle +- +- +- Signer name field +- +- +- +- Generate new certificate +- +- +- +- Import existing certificate +- +- +- +- Export own certificate +- +- +- +- Known shares +- +- +- +- Trust selected certificate +- +- +- +- Ask whether to trust the selected certificate every time +- +- +- +- Untrust selected certificate +- +- +- +- Remove selected certificate +- +- +- +- +- ShareExport +- +- Overwriting signed share container is not supported - export prevented +- Overskrivning af delingsbeholder som er underskrevet understøttes ikke - eksport forhindret +- +- +- Could not write export container (%1) +- Kunne ikke skrive eksportbeholderen (%1) +- +- +- Could not embed signature: Could not open file to write (%1) +- Kunne ikke indlejre underskrift: Kunne ikke Ã¥bne fil til skrivning (%1) +- +- +- Could not embed signature: Could not write file (%1) +- Kunne ikke indlejre underskrift: Kunne ikke skrive fil (%1) +- +- +- Could not embed database: Could not open file to write (%1) +- Kunne ikke indlejre database: Kunne ikke Ã¥bne fil til skrivning (%1) +- +- +- Could not embed database: Could not write file (%1) +- Kunne ikke indlejre database: Kunne ikke skrive fil (%1) +- +- +- Overwriting unsigned share container is not supported - export prevented +- Overskrivning af delingsbeholder som ikke er underskrevet understøttes ikke - eksport forhindret +- +- +- Could not write export container +- Kunne ikke skrive eksportbeholderen +- +- +- Unexpected export error occurred +- Der opstod en uventet fejl ved eksport +- +- +- +- ShareImport +- +- Import from container without signature +- Importér fra beholder uden underskrift +- +- +- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? +- Vi kan ikke bekræfte kilden pÃ¥ den delte beholder da den ikke er underskrevet. Vil du virkelig impotere fra %1? +- +- +- Import from container with certificate +- Importér fra beholder med underskrift +- +- +- Do you want to trust %1 with the fingerprint of %2 from %3? +- Skal %1 være troværdig med fingeraftrykket %2 fra %3? +- +- +- Not this time +- Ikke denne gang +- +- +- Never +- Aldrig +- +- +- Always +- Altid +- +- +- Just this time +- Kun denne gang +- +- +- Signed share container are not supported - import prevented +- Delingsbeholder som er underskrevet understøttes ikke - import forhindret +- +- +- File is not readable +- Filen kan ikke læses +- +- +- Invalid sharing container +- Ugyldig delingsbeholder +- +- +- Untrusted import prevented +- Utroværdig import forhindret +- +- +- Successful signed import +- Underskriver import lykkedes +- +- +- Unsigned share container are not supported - import prevented +- Delingsbeholder som ikke er underskrevet understøttes ikke - import forhindret +- +- +- Successful unsigned import +- Ikke-underskriver import lykkedes +- +- +- File does not exist +- Filen findes ikke +- +- +- Unknown share container type +- Ukendt type delingsbeholder +- +- +- +- ShareObserver +- +- Import from %1 failed (%2) +- Import fra %1 mislykkedes (%2) +- +- +- Import from %1 successful (%2) +- Import fra %1 lykkedes (%2) +- +- +- Imported from %1 +- Importerer fra %1 +- +- +- Export to %1 failed (%2) +- Eksportér til %1 mislykkedes (%2) +- +- +- Export to %1 successful (%2) +- Eksportér til %1 lykkedes (%2) +- +- +- Export to %1 +- Eksportér til %1 +- +- +- Multiple import source path to %1 in %2 +- Flere importkildestier %1 i %2 +- +- +- Conflicting export target path %1 in %2 +- Konflikt ved eksportmÃ¥lets sti %1 i %2 +- +- +- +- TotpDialog +- +- Timed Password +- Tidsbaseret adgangskode +- +- +- 000000 +- 000000 +- +- +- Copy +- Kopiér +- +- +- Expires in <b>%n</b> second(s) +- Udløber om <b>%n</b> sekundUdløber om <b>%n</b> sekunder +- +- +- +- TotpExportSettingsDialog +- +- Copy +- Kopiér +- +- +- NOTE: These TOTP settings are custom and may not work with other authenticators. +- TOTP QR code dialog warning +- BEMÆRK: TOTP-indstillingerne er tilpasset og virker mÃ¥ske ikke med andre autentifikatorere. +- +- +- There was an error creating the QR code. +- Der opstod en fejl ved oprettelse af QR-koden. +- +- +- Closing in %1 seconds. +- Lukker om %1 sekunder. +- +- +- +- TotpSetupDialog +- +- Setup TOTP +- Opsæt TOTP +- +- +- Default RFC 6238 token settings +- Standard RFC 6238-token indstillinger +- +- +- Steam token settings +- Steam-token indstillinger +- +- +- Use custom settings +- Brug tilpasset indstillinger +- +- +- Custom Settings +- Tilpasset indstillinger +- +- +- Time step: +- Tidsinterval: +- +- +- sec +- Seconds +- sek +- +- +- Code size: +- Kodestørrelse: +- +- +- Secret Key: +- +- +- +- Secret key must be in Base32 format +- +- +- +- Secret key field +- +- +- +- Algorithm: +- Algoritme: +- +- +- Time step field +- +- +- +- digits +- +- +- +- Invalid TOTP Secret +- +- +- +- You have entered an invalid secret key. The key must be in Base32 format. +-Example: JBSWY3DPEHPK3PXP +- +- +- +- Confirm Remove TOTP Settings +- +- +- +- Are you sure you want to delete TOTP settings for this entry? +- +- +- +- +- URLEdit +- +- Invalid URL +- +- +- +- +- UpdateCheckDialog +- +- Checking for updates +- Søger efter opdateringer +- +- +- Checking for updates... +- Søger efter opdateringer ... +- +- +- Close +- Luk +- +- +- Update Error! +- Fejl ved opdatering! +- +- +- An error occurred in retrieving update information. +- Der opstod en fejl ved indhentning af opdateringsinformation. +- +- +- Please try again later. +- Prøv venligst igen senere. +- +- +- Software Update +- Softwareopdatering +- +- +- A new version of KeePassXC is available! +- Der findes en ny version af KeePassXC! +- +- +- KeePassXC %1 is now available — you have %2. +- KeePassXC %1 er tilgængelig nu — du har %2. +- +- +- Download it at keepassxc.org +- Download den pÃ¥ keepassxc.org +- +- +- You're up-to-date! +- Du er opdateret! +- +- +- KeePassXC %1 is currently the newest version available +- KeePassXC %1 er den seneste version +- +- +- +- WelcomeWidget +- +- Start storing your passwords securely in a KeePassXC database +- Gem dine adgangskoder sikkert i en KeePassXC-database +- +- +- Create new database +- Opret en ny database +- +- +- Open existing database +- Ã…bn en eksisterende database +- +- +- Import from KeePass 1 +- Importér fra KeePass 1 +- +- +- Import from CSV +- Importér fra CSV +- +- +- Recent databases +- Seneste databaser +- +- +- Welcome to KeePassXC %1 +- Velkommen til KeePassXC %1 +- +- +- Import from 1Password +- Importér fra 1Password +- +- +- Open a recent database +- +- +- +- +- YubiKey +- +- %1 [%2] Configured Slot - %3 +- +- +- +- %1 [%2] Challenge Response - Slot %3 - %4 +- +- +- +- Press +- Tryk +- +- +- Passive +- Passiv +- +- +- %1 Invalid slot specified - %2 +- +- +- +- The YubiKey interface has not been initialized. +- +- +- +- Hardware key is currently in use. +- +- +- +- Could not find hardware key with serial number %1. Please plug it in to continue. +- +- +- +- Hardware key timed out waiting for user interaction. +- +- +- +- A USB error ocurred when accessing the hardware key: %1 +- +- +- +- Failed to complete a challenge-response, the specific error was: %1 +- +- +- +- +- YubiKeyEditWidget +- +- Refresh +- Genopfrisk +- +- +- YubiKey Challenge-Response +- Udfordring/svar med YubiKey +- +- +- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- <p>Hvis du ejer en <a href="https://www.yubico.com/">YubiKey</a>, sÃ¥ kan du bruge den for yderligere sikkerhed.</p><p>YubiKey kræver at en af dets pladser er programmet som <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1-udfordring/svar</a>.</p> +- +- +- Refresh hardware tokens +- +- +- +- Hardware key slot selection +- +- +- +- Could not find any hardware keys! +- +- +- +- Selected hardware key slot does not support challenge-response! +- +- +- +- Detecting hardware keys… +- +- +- +- No hardware keys detected +- +- +- +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_de.ts keepassxc-2.6.4-patched/share/translations/keepassx_de.ts +--- keepassxc-2.6.4-orig/share/translations/keepassx_de.ts 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/translations/keepassx_de.ts 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7894 +0,0 @@ +- +- +- AboutDialog +- +- About KeePassXC +- Ãœber KeePassXC +- +- +- About +- Ãœber +- +- +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- Melden Sie Fehler auf: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- +- +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- KeePassXC wird unter den Bedingungen der GNU General Public License (GPL) Version 2 oder Version 3 (je nach Ihrer Auswahl) vertrieben. +- +- +- Contributors +- Mitwirkende +- +- +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Mitwirkende auf GitHub</a> +- +- +- Debug Info +- Debug-Info +- +- +- Include the following information whenever you report a bug: +- Geben Sie folgende Informationen an, wenn Sie einen Fehler melden: +- +- +- Copy to clipboard +- In die Zwischenablage kopieren +- +- +- Project Maintainers: +- Projekt-Betreuer: +- +- +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- Das KeePassXC-Team möchte ganz besonders debfx danken für die Entwicklung des ursprünglichen KeePassX. +- +- +- +- AgentSettingsWidget +- +- Use OpenSSH for Windows instead of Pageant +- OpenSSH für Windows statt Pageant benutzen +- +- +- Enable SSH Agent integration +- SSH-Agent-Integration aktivieren +- +- +- SSH_AUTH_SOCK value +- SSH_AUTH_SOCK-Wert +- +- +- SSH_AUTH_SOCK override +- SSH_AUTH_SOCK-Ãœberschreibung +- +- +- (empty) +- (leer) +- +- +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- Kein SSH-Agent-Socket verfügbar. Stellen Sie sicher, dass die SSH_AUTH_SOCK-Umgebungsvariable existiert, oder setzen Sie einen Ãœberschreibungswert. +- +- +- SSH Agent connection is working! +- SSH-Agent-Verbindung funktioniert! +- +- +- +- ApplicationSettingsWidget +- +- Application Settings +- Anwendungseinstellungen +- +- +- General +- Allgemein +- +- +- Security +- Sicherheit +- +- +- Access error for config file %1 +- Zugriffsfehler bei Konfigurationsdatei %1 +- +- +- Icon only +- Nur Symbol +- +- +- Text only +- Nur Text +- +- +- Text beside icon +- Text neben Symbol +- +- +- Text under icon +- Text unter Symbol +- +- +- Follow style +- Stil beibehalten +- +- +- Reset Settings? +- Einstellungen zurücksetzen? +- +- +- Are you sure you want to reset all general and security settings to default? +- Wollen Sie alle allgemeinen und Sicherheitseinstellungen auf die Voreinstellung zurücksetzen? +- +- +- Monochrome (light) +- Monochrom (hell) +- +- +- Monochrome (dark) +- Monochrom (dunkel) +- +- +- Colorful +- Bunt +- +- +- You must restart the application to set the new language. Would you like to restart now? +- Zum Ändern der Sprache müssen Sie die Anwendung neu starten. Möchten Sie jetzt neu starten? +- +- +- +- ApplicationSettingsWidgetGeneral +- +- Basic Settings +- Grundeinstellungen +- +- +- Startup +- Programmstart +- +- +- Start only a single instance of KeePassXC +- Nur eine einzige KeePassXC-Instanz starten +- +- +- Minimize window at application startup +- Bei Programmstart Fenster minimieren +- +- +- File Management +- Dateiverwaltung +- +- +- Backup database file before saving +- Vor dem Speichern Backup der Datenbank erstellen +- +- +- Automatically save after every change +- Automatisch speichern nach jeder Änderung +- +- +- Automatically reload the database when modified externally +- Datenbank nach externer Änderung automatisch neu laden +- +- +- Entry Management +- Eintragsverwaltung +- +- +- Use group icon on entry creation +- Gruppensymbol beim Erstellen neuer Einträge verwenden +- +- +- Minimize instead of app exit +- Minimieren, statt Programm zu beenden +- +- +- Show a system tray icon +- Taskleistensymbol anzeigen +- +- +- Hide window to system tray when minimized +- Fenster verstecken, wenn minimiert +- +- +- Auto-Type +- Auto-Type +- +- +- Use entry title to match windows for global Auto-Type +- Eintragstitel verwenden, um passendes Fenster für globales Auto-Type zu finden +- +- +- Use entry URL to match windows for global Auto-Type +- URL verwenden, um passendes Fenster für globales Auto-Type zu finden +- +- +- Always ask before performing Auto-Type +- Vor Auto-Type immer nachfragen +- +- +- ms +- Milliseconds +- ms +- +- +- Movable toolbar +- Bewegbare Werkzeugleiste +- +- +- Remember previously used databases +- Zuletzt verwendete Datenbanken merken +- +- +- Load previously open databases on startup +- Beim Start zuletzt verwendete Datenbanken öffnen +- +- +- Remember database key files and security dongles +- Datenbank-Schlüsseldateien und Sicherheits-Dongles merken +- +- +- Check for updates at application startup once per week +- Bei Programmstart wöchentlich auf Updates prüfen +- +- +- Include beta releases when checking for updates +- Bei Update-Prüfung Beta-Versionen einbeziehen +- +- +- Language: +- Sprache: +- +- +- (restart program to activate) +- (zum Aktivieren Programm neu starten) +- +- +- Minimize window after unlocking database +- Nach Entsperren der Datenbank Fenster minimieren +- +- +- Minimize when opening a URL +- Nach Öffnen einer URL Fenster minimieren +- +- +- Hide window when copying to clipboard +- Nach Kopieren in Zwischenablage Fenster verstecken +- +- +- Minimize +- Minimieren +- +- +- Drop to background +- In den Hintergrund verschieben +- +- +- Favicon download timeout: +- Timeout beim Herunterladen von Favicons: +- +- +- Website icon download timeout in seconds +- Timeout beim Herunterladen von Webseitensymbolen in Sekunden +- +- +- sec +- Seconds +- sek +- +- +- Toolbar button style +- Schaltflächenstil der Werkzeugleiste +- +- +- Language selection +- Sprachauswahl +- +- +- Global auto-type shortcut +- Tastenkürzel für globales Auto-Type +- +- +- Auto-type character typing delay milliseconds +- Tastenverzögerung für Auto-Type in Millisekunden +- +- +- Auto-type start delay milliseconds +- Startverzögerung für Auto-Type in Millisekunden +- +- +- Automatically launch KeePassXC at system startup +- KeePassXC beim Systemstart automatisch starten +- +- +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- Sicheres Speichern der Datenbank (bei Problemen mit Dropbox, etc. deaktivieren) +- +- +- User Interface +- Benutzeroberfläche +- +- +- Toolbar button style: +- Design der Symbolleisten-Buttons: +- +- +- Use monospaced font for notes +- Nutze eine monospaced Schriftart für Notizen +- +- +- Tray icon type: +- Tray Icon Typ: +- +- +- Reset settings to default… +- Einstellungen auf Voreinstellung zurücksetzen… +- +- +- Auto-Type typing delay: +- Tastenverzögerung für Auto-Type: +- +- +- Global Auto-Type shortcut: +- Tastenkürzel für globales Auto-Type: +- +- +- Auto-Type start delay: +- Startverzögerung für Auto-Type: +- +- +- Automatically save when locking database +- Automatisch speichern beim Sperren der Datenbank +- +- +- Automatically save non-data changes when locking database +- Metadaten automatisch speichern beim Sperren der Datenbank +- +- +- Tray icon type +- Trayicon-Typ +- +- +- +- ApplicationSettingsWidgetSecurity +- +- Timeouts +- Timeouts +- +- +- Clear clipboard after +- Zwischenablage leeren nach +- +- +- sec +- Seconds +- sek +- +- +- Lock databases after inactivity of +- Datenbanken sperren nach Inaktivität von +- +- +- min +- min +- +- +- Forget TouchID after inactivity of +- TouchID vergessen nach Inaktivität von +- +- +- Convenience +- Komfort +- +- +- Lock databases when session is locked or lid is closed +- Datenbanken sperren, wenn Sitzung gesperrt oder Deckel zugeklappt wird +- +- +- Forget TouchID when session is locked or lid is closed +- TouchID vergessen, wenn Sitzung gesperrt oder Deckel zugeklappt wird +- +- +- Lock databases after minimizing the window +- Datenbanken sperren beim Minimieren des Fensters +- +- +- Re-lock previously locked database after performing Auto-Type +- Zuvor gesperrte Datenbank nach Auto-Type wieder sperren +- +- +- Hide passwords in the entry preview panel +- Passwörter im Eintrags-Vorschau-Panel verstecken +- +- +- Hide entry notes by default +- Eintrags-Notizen standardmäßig verstecken +- +- +- Privacy +- Datenschutz +- +- +- Use DuckDuckGo service to download website icons +- DuckDuckGo zum Herunterladen von Webseiten-Symbolen verwenden +- +- +- Clipboard clear seconds +- Zwischenablage löschen nach ... Sekunden +- +- +- Touch ID inactivity reset +- Touch ID Inaktivitäts-Reset +- +- +- Database lock timeout seconds +- Timeout zum Sperren der Datenbank (Sekunden) +- +- +- min +- Minutes +- min +- +- +- Clear search query after +- Suchabfrage löschen nach +- +- +- Require password repeat when it is visible +- Passwort-Wiederholung erfordern, wenn das Passwort sichtbar ist +- +- +- Hide passwords when editing them +- Passwörter beim Bearbeiten verstecken +- +- +- Use placeholder for empty password fields +- Platzhalter für leere Passwortfelder verwenden +- +- +- +- AutoType +- +- Couldn't find an entry that matches the window title: +- Konnte keinen Eintrag finden, der mit dem Fenstertitel übereinstimmt: +- +- +- Auto-Type - KeePassXC +- Auto-Type - KeePassXC +- +- +- Auto-Type +- Auto-Type +- +- +- The Syntax of your Auto-Type statement is incorrect! +- Die Syntax Ihres Auto-Type-Befehls ist fehlerhaft! +- +- +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- Dieses Auto-Type-Kommando enthält eine sehr lange Verzögerung. Möchten Sie wirklich fortfahren? +- +- +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- Dieses Auto-Type-Kommando enthält sehr langsame Tastendrücke. Möchten Sie wirklich fortfahren? +- +- +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- Dieses Auto-Type-Kommando enthält Argumente, die sehr oft wiederholt werden. Möchten Sie wirklich fortfahren? +- +- +- Permission Required +- Berechtigung erforderlich +- +- +- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC benötigt die Berechtigung für Barrierefreiheit, um Auto-Type auf Eintragsebene durchzuführen. Falls Sie die Berechtigung bereits erteilt haben, starten Sie KeePassXC bitte neu. +- +- +- +- AutoTypeAssociationsModel +- +- Window +- Fenster +- +- +- Sequence +- Sequenz +- +- +- Default sequence +- Standard-Sequenz +- +- +- +- AutoTypeMatchModel +- +- Group +- Gruppe +- +- +- Title +- Titel +- +- +- Username +- Benutzername +- +- +- Sequence +- Sequenz +- +- +- +- AutoTypeMatchView +- +- Copy &username +- &Benutzername kopieren +- +- +- Copy &password +- Passwort kopieren +- +- +- +- AutoTypePlatformMac +- +- Permission Required +- Berechtigung erforderlich +- +- +- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC benötigt die Berechtigungen für Barrierefreiheit und Bildschirmaufzeichnung, um globalen Auto-Type durchzuführen. Die Bildschirmaufzeichnung ist notwendig, um Einträge über den Fenstertitel zu finden. Falls Sie die Berechtigung bereits erteilt haben, starten Sie KeePasXC bitte neu. +- +- +- +- AutoTypeSelectDialog +- +- Auto-Type - KeePassXC +- Auto-Type - KeePassXC +- +- +- Select entry to Auto-Type: +- Wählen Sie den Eintrag für Auto-Type: +- +- +- Search... +- Suchen … +- +- +- +- BrowserAccessControlDialog +- +- KeePassXC - Browser Access Request +- KeePassXC - Browser-Zugriffsanfrage +- +- +- %1 is requesting access to the following entries: +- %1 fordert Zugriff auf die folgenden Einträge an: +- +- +- Remember access to checked entries +- Zugriff auf markierte Einträge merken +- +- +- Remember +- Merken +- +- +- Allow access to entries +- Zugriff auf Einträge erlauben +- +- +- Allow Selected +- Auswahl erlauben +- +- +- Deny All +- Alle verweigern +- +- +- Disable for this site +- Für diese Seite deaktivieren +- +- +- +- BrowserEntrySaveDialog +- +- KeePassXC-Browser Save Entry +- KeePassXC-Browser Eintrag speichern +- +- +- Ok +- Ok +- +- +- Cancel +- Abbrechen +- +- +- You have multiple databases open. +-Please select the correct database for saving credentials. +- Sie haben mehrere Datenbanken geöffnet. +-Bitte wählen Sie die richtige Datenbank zum Speichern der Anmeldedaten. +- +- +- +- BrowserService +- +- KeePassXC: New key association request +- KeePassXC: Neue Schlüsselverbindungsanfrage +- +- +- Save and allow access +- Speichern und Zugriff erlauben +- +- +- KeePassXC: Overwrite existing key? +- KeePassXC: Bestehenden Schlüssel überschreiben? +- +- +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- Ein geteilter Schlüssel mit dem Namen „%1“ existiert bereits. +-Möchten Sie ihn überschreiben? +- +- +- KeePassXC: Update Entry +- KeePassXC: Eintrag aktualisiert +- +- +- Do you want to update the information in %1 - %2? +- Möchten Sie die Informationen in %1 - %2 aktualisieren? +- +- +- Abort +- Abbrechen +- +- +- Converting attributes to custom data… +- Eigenschaften werden in Plugin-Daten umgewandelt ... +- +- +- KeePassXC: Converted KeePassHTTP attributes +- KeepassXC: KeePassHTTP-Eigenschaften wurden umgewandelt +- +- +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- Eigenschaften von %1 Einträgen wurden erfolgreich umgewandelt. +-%2 Schlüssel in die Plugin-Daten verschoben. +- +- +- Successfully moved %n keys to custom data. +- %1 Einträge wurden erfolgreich umgewandelt%n Schlüssel wurden erfolgreich in die Plugin-Daten verschoben. +- +- +- KeePassXC: No entry with KeePassHTTP attributes found! +- KeePassXC: Kein Eintrag mit KeePassHTTP-Eigenschaften gefunden! +- +- +- The active database does not contain an entry with KeePassHTTP attributes. +- Die aktive Datenbank enthält keinen Eintrag mit KeePassHTTP-Eigenschaften. +- +- +- KeePassXC: Legacy browser integration settings detected +- KeePassXC: Veraltete Einstellungen für Browser-Integration gefunden +- +- +- KeePassXC: Create a new group +- KeePassXC: Neue Gruppe erstellen +- +- +- A request for creating a new group "%1" has been received. +-Do you want to create this group? +- +- Eine Anfrage zur Erstellung einer neuen Gruppe "%1" ist eingegangen. +-Möchten Sie diese Gruppe erstellen? +- +- +- +- Your KeePassXC-Browser settings need to be moved into the database settings. +-This is necessary to maintain your current browser connections. +-Would you like to migrate your existing settings now? +- Ihre KeePassXC-Browser-Einstellungen müssen in die Datenbankeinstellungen verschoben werden. +-Dies ist notwendig, um Ihre aktuellen Browserverbindungen aufrechtzuerhalten. +-Möchten Sie Ihre bestehenden Einstellungen jetzt migrieren? +- +- +- Don't show this warning again +- Diese Warnung nicht wieder anzeigen +- +- +- You have received an association request for the following database: +-%1 +- +-Give the connection a unique name or ID, for example: +-chrome-laptop. +- Verbindungsanfrage erhalten für folgende Datenbank: +-%1 +- +-Geben Sie der Verbindung einen eindeutigen Namen, z. B. "chrome-laptop". +- +- +- +- BrowserSettingsWidget +- +- Dialog +- Dialog +- +- +- This is required for accessing your databases with KeePassXC-Browser +- Dies ist notwendig, um mit KeePassXC-Browser auf Ihre Datenbanken zuzugreifen +- +- +- Enable browser integration +- Browserintegration aktivieren +- +- +- General +- Allgemein +- +- +- Browsers installed as snaps are currently not supported. +- Browser, die als Snaps installiert sind, werden derzeit nicht unterstützt. +- +- +- Enable integration for these browsers: +- Integration für diese Browser aktivieren: +- +- +- Vivaldi +- Vivaldi +- +- +- &Edge +- &Edge +- +- +- Firefox +- Firefox +- +- +- Tor Browser +- Tor Browser +- +- +- Brave +- Brave +- +- +- Google Chrome +- Google Chrome +- +- +- Chromium +- Chromium +- +- +- Show a notification when credentials are requested +- Credentials mean login data requested via browser extension +- Benachrichtigung anzeigen, wenn Anmeldedaten angefragt werden +- +- +- Request to unlock the database if it is locked +- Entsperrung anfragen, wenn die Datenbank gesperrt ist +- +- +- Only entries with the same scheme (http://, https://, ...) are returned. +- Nur Einträge mit dem gleichen Schema (http://, https://, …) werden zurückgeliefert. +- +- +- Match URL scheme (e.g., https://...) +- URL-Schema abgleichen (z. B. https://…) +- +- +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- Nur die am besten passenden Einträge für eine URL anzeigen statt aller Einträge der ganzen Domain +- +- +- Return only best-matching credentials +- Nur am besten passende Anmeldedaten zurückliefern +- +- +- Returns expired credentials. String [expired] is added to the title. +- Abgelaufene Anmeldedaten zurückgeben. "Abgelaufen" wird an den Titel angehängt. +- +- +- Allow returning expired credentials +- Rückgabe abgelaufener Anmeldedaten erlauben +- +- +- All databases connected to the extension will return matching credentials. +- Alle Datenbanken, die mit der Erweiterung verbunden sind, geben übereinstimmende Anmeldedaten zurück. +- +- +- Search in all opened databases for matching credentials +- Credentials mean login data requested via browser extension +- In allen geöffneten Datenbanken nach passenden Anmeldedaten suchen +- +- +- Sort matching credentials by title +- Credentials mean login data requested via browser extension +- Passende Anmeldedaten nach Titel sortieren +- +- +- Sort matching credentials by username +- Credentials mean login data requested via browser extension +- Passende Anmeldedaten nach Benutzername sortieren +- +- +- Advanced +- Fortgeschritten +- +- +- Never ask before accessing credentials +- Credentials mean login data requested via browser extension +- Niemals fragen, bevor auf Anmeldedaten zugegriffen wird +- +- +- Never ask before updating credentials +- Credentials mean login data requested via browser extension +- Niemals fragen, bevor Anmeldedaten aktualisiert werden +- +- +- Do not ask permission for HTTP Basic Auth +- An extra HTTP Basic Auth setting +- Nicht nach Berechtigung für "HTTP Basic Auth" fragen +- +- +- Automatically creating or updating string fields is not supported. +- Automatisches Erstellen und Aktualisieren von erweiterten Attributen wird nicht unterstützt. +- +- +- Return advanced string fields which start with "KPH: " +- Auch erweiterte Attribute anzeigen, die mit "KPH: " beginnen +- +- +- Don't display the popup suggesting migration of legacy KeePassHTTP settings. +- Kein Popup zeigen, das die Migration von älteren KeePassHTTP-Einstellungen vorschlägt. +- +- +- Do not prompt for KeePassHTTP settings migration. +- Nicht zur Migration der KeePassHTTP-Einstellungen auffordern. +- +- +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- Aktualisiert beim Start den KeePassXC- oder KeePassXC-Proxy-Pfad automatisch in den Native-Messaging-Skripts. +- +- +- Update native messaging manifest files at startup +- Native-Messaging-Manifest beim Start aktualisieren +- +- +- Use a custom proxy location if you installed a proxy manually. +- Benutzerdefinierten Proxy-Pfad verwenden, falls ein Proxy manuell installiert wurde +- +- +- Use a custom proxy location: +- Meant is the proxy for KeePassXC-Browser +- Benutzerdefinierten Proxy-Pfad verwenden +- +- +- Custom proxy location field +- Benutzerdefiniertes Proxy-Pfad-Feld +- +- +- Browser for custom proxy file +- Browser für benutzerdefinierte Proxydatei +- +- +- Browse... +- Button for opening file dialog +- Durchsuchen ... +- +- +- Use a custom browser configuration location: +- Benutzerdefinierten Browser-Konfigurations-Pfad verwenden: +- +- +- Browser type: +- Browser-Typ: +- +- +- Toolbar button style +- Schaltflächenstil der Werkzeugleiste +- +- +- Config Location: +- Konfigurations-Pfad. +- +- +- Custom browser location field +- Feld für benutzerdefinierten Browserpfad +- +- +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- +- +- Browse for custom browser path +- Nach benutzerdefiniertem Browserpfad suchen +- +- +- Custom extension ID: +- Benutzerdefinierte Erweiterungs-ID: +- +- +- Custom extension ID +- Benutzerdefinierte Erweiterungs-ID +- +- +- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 +- Aufgrund von Snap Sandboxing müssen Sie ein Skript ausführen, um die Browser-Integration zu aktivieren.<br />Sie können dieses Skript erhalten unter %1 +- +- +- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 +- KeePassXC-Browser wird für die Browserintegration benötigt. <br />Laden Sie es für %1 und %2 und %3 herunter. %4 +- +- +- Please see special instructions for browser extension use below +- Bitte beachten Sie die untenstehenden speziellen Anweisungen für die Verwendung der Browser-Erweiterung +- +- +- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. +- <b>Fehler:</b> Der benutzerdefinierte Proxy-Pfad kann nicht gefunden werden!<br/>Browser-Integration WIRD NICHT FUNKTIONIEREN ohne die Proxy-Anwendung. +- +- +- <b>Warning:</b> The following options can be dangerous! +- <b>Warnung:</b> Die folgenden Einstellungen können gefährlich sein! +- +- +- Executable Files +- Ausführbare Dateien +- +- +- All Files +- Alle Dateien +- +- +- Select custom proxy location +- Benutzerdefinierten Proxy-Pfad auswählen +- +- +- Select native messaging host folder location +- Ordner-Pfad für Native-Messaging-Host auswählen +- +- +- +- CloneDialog +- +- Clone Options +- Klon-Optionen +- +- +- Append ' - Clone' to title +- „ - Klon“ zum Titel hinzufügen +- +- +- Replace username and password with references +- Benutzername und Passwort durch Referenzen ersetzen +- +- +- Copy history +- Verlauf kopieren +- +- +- +- CsvImportWidget +- +- Import CSV fields +- CSV-Felder importieren +- +- +- filename +- Dateiname +- +- +- size, rows, columns +- Größe, Zeilen, Spalten +- +- +- Encoding +- Zeichensatz +- +- +- Codec +- Codec +- +- +- Text is qualified by +- Text ist qualifiziert durch +- +- +- Fields are separated by +- Felder sind getrennt durch +- +- +- Comments start with +- Kommentare beginnen mit +- +- +- Consider '\' an escape character +- „\“ als Maskierungs-Zeichen behandeln +- +- +- Preview +- Vorschau +- +- +- Imported from CSV file +- Aus CSV-Datei importiert +- +- +- Original data: +- Original-Daten: +- +- +- Error +- Fehler +- +- +- Error(s) detected in CSV file! +- Fehler in CSV-Datei gefunden! +- +- +- [%n more message(s) skipped] +- [zusätzlich %n Nachricht(en) übersprungen][%n weitere Nachricht(en) übersprungen] +- +- +- CSV import: writer has errors: +-%1 +- CSV-Import: Fehler beim Schreiben: %1 +- +- +- Text qualification +- Textqualifizierung +- +- +- Field separation +- Feldtrennung +- +- +- Number of header lines to discard +- Anzahl der zu verwerfenden Kopfzeilen +- +- +- CSV import preview +- CSV-Import-Vorschau +- +- +- Column Association +- Spalten-Zuordnung +- +- +- Last Modified +- Zuletzt bearbeitet +- +- +- Password +- Passwort +- +- +- Created +- Erstellt +- +- +- Notes +- Notizen +- +- +- Title +- Titel +- +- +- Group +- Gruppe +- +- +- URL +- URL +- +- +- Username +- Benutzername +- +- +- Header lines skipped +- Kopfzeilen übersprungen +- +- +- First line has field names +- Erste Zeile enthält Feldnamen +- +- +- Not Present +- Nicht vorhanden +- +- +- Column %1 +- Spalte %1 +- +- +- TOTP +- TOTP +- +- +- Icon +- Symbol +- +- +- +- CsvParserModel +- +- %n column(s) +- %n Spalte%n Spalte(n) +- +- +- %1, %2, %3 +- file info: bytes, rows, columns +- %1, %2, %3 +- +- +- %n byte(s) +- %n Byte(s)%n Byte(s) +- +- +- %n row(s) +- %n Zeile(n)%n Zeile(n) +- +- +- +- Database +- +- File %1 does not exist. +- Datei %1 existiert nicht. +- +- +- Unable to open file %1. +- Kann Datei %1 nicht öffnen. +- +- +- Error while reading the database: %1 +- Fehler beim Öffnen der Datenbank: %1 +- +- +- File cannot be written as it is opened in read-only mode. +- Kann Datei nicht schreiben, da sie nur zum Lesen geöffnet ist. +- +- +- Key not transformed. This is a bug, please report it to the developers! +- Schlüssel nicht umgewandelt. Das ist ein Programmfehler, bitte melden Sie es den Entwicklern! +- +- +- %1 +-Backup database located at %2 +- %1 +-Sicherungskopie der Datenbank ist in %2 +- +- +- Could not save, database does not point to a valid file. +- Kann nicht abspeichern, Datenbank verweist nicht auf eine gültige Datei. +- +- +- Could not save, database file is read-only. +- Kann nicht abspeichern, die Datenbank-Datei ist schreibgeschützt. +- +- +- Database file has unmerged changes. +- Die Datenbank hat Änderungen, die noch nicht zusammengeführt worden sind. +- +- +- Recycle Bin +- Papierkorb +- +- +- Passwords +- Root group name +- Passwörter +- +- +- Database save is already in progress. +- Speichern der Datenbank wird bereits ausgeführt. +- +- +- Could not save, database has not been initialized! +- Kann nicht abspeichern, die Datenbank wurde nicht initialisiert! +- +- +- +- DatabaseOpenDialog +- +- Unlock Database - KeePassXC +- Datenbank entsperren - KeePassXC +- +- +- +- DatabaseOpenWidget +- +- Key File: +- Schlüsseldatei: +- +- +- Refresh +- Neu laden +- +- +- Don't show this warning again +- Diese Warnung nicht wieder anzeigen +- +- +- All files +- Alle Dateien +- +- +- Key files +- Schlüsseldateien +- +- +- Select key file +- Schlüsseldatei auswählen +- +- +- Failed to open key file: %1 +- Fehler beim Öffnen der Schlüsseldatei: %1 +- +- +- Unlock KeePassXC Database +- KeePassXC-Datenbank entsperren +- +- +- Enter Password: +- Passwort eingeben: +- +- +- Password field +- Passwort-Feld +- +- +- Hardware key slot selection +- Auswahl des Hardwareschlüssel-Slots +- +- +- Browse for key file +- Schlüsseldatei auswählen +- +- +- Browse... +- Durchsuchen ... +- +- +- Refresh hardware tokens +- Hardware-Token aktualisieren +- +- +- Hardware Key: +- Hardwareschlüssel: +- +- +- Hardware key help +- Hilfe zu Hardwareschlüsseln +- +- +- TouchID for Quick Unlock +- TouchID für Quick Unlock +- +- +- Unlock failed and no password given +- Entsperren fehlgeschlagen und kein Passwort angegeben +- +- +- Unlocking the database failed and you did not enter a password. +-Do you want to retry with an "empty" password instead? +- +-To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. +- Das Entsperren der Datenbank ist fehlgeschlagen, und Sie haben kein Passwort eingegeben. +-Möchten Sie es stattdessen mit einem "leeren" Passwort versuchen? +- +-Um zu verhindern, dass dieser Fehler auftritt, müssen Sie zu "Datenbankeinstellungen -> Sicherheit" gehen und Ihr Passwort zurücksetzen. +- +- +- Retry with empty password +- Mit leerem Passwort wiederholen +- +- +- Enter Additional Credentials (if any): +- Zusätzliche Anmeldedaten eingeben (falls vorhanden): +- +- +- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +-<p>Click for more information...</p> +- <p>Sie können einen Hardware-Sicherheitsschlüssel wie <strong>YubiKey</strong> oder <strong>OnlyKey</strong> verwenden, dessen Slots für HMAC-SHA1 konfiguriert sind.</p> +-<p>Klicken Sie hier, um weitere Informationen zu erhalten ...</p> +- +- +- Key file help +- Schlüsseldatei-Hilfe +- +- +- ? +- ? +- +- +- Cannot use database file as key file +- Datenbankdatei kann nicht als Schlüsseldatei verwendet werden +- +- +- You cannot use your database file as a key file. +-If you do not have a key file, please leave the field empty. +- Sie können nicht Ihre Datenbank als Schlüsseldatei verwenden. +-Wenn Sie keine Schlüsseldatei haben, lassen Sie das Feld bitte leer. +- +- +- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> +- <p>Zusätzlich zum Passwort können Sie eine geheime Datei verwenden, um die Sicherheit Ihrer Datenbank zu verbessern. Diese Datei kann in den Sicherheitseinstellungen Ihrer Datenbank erzeugt werden.</p><p>Dies ist <strong>nicht</strong> Ihre *.kdbx-Datenbankdatei!<br>Wenn Sie keine Schlüsseldatei haben, lassen Sie dieses Feld frei.</p><p>Hier klicken für weitere Informationen...</p> +- +- +- Key file to unlock the database +- Schlüsseldatei zum Entsperren der Datenbank +- +- +- Please touch the button on your YubiKey! +- Bitte drücken Sie die Taste an Ihrem YubiKey! +- +- +- Detecting hardware keys… +- Hardwareschlüssel werden erkannt… +- +- +- No hardware keys detected +- Keine Hardwareschlüssel erkannt +- +- +- Select hardware key… +- Hardwareschlüssel auswählen… +- +- +- Old key file format +- Altes Schlüsseldateiformat +- +- +- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> +- Sie verwenden ein altes Schlüsseldateiformat, das KeePassXC möglicherweise<br>in Zukunft nicht mehr unterstützen wird.<br><br>Bitte erwägen Sie, eine neue Schlüsseldatei zu erzeugen, indem Sie zu:<br><strong>Datenbank / Datenbank-Sicherheit / Schlüsseldatei ändern gehen.</strong><br> +- +- +- +- DatabaseSettingWidgetMetaData +- +- Passwords +- Passwörter +- +- +- +- DatabaseSettingsDialog +- +- Advanced Settings +- Fortgeschrittene Einstellungen +- +- +- General +- Allgemein +- +- +- Security +- Sicherheit +- +- +- Encryption Settings +- Verschlüsselungs-Einstellungen +- +- +- Browser Integration +- Browser-Integration +- +- +- Database Credentials +- Datenbank-Anmeldedaten +- +- +- +- DatabaseSettingsWidgetBrowser +- +- KeePassXC-Browser settings +- KeePassXC-Browser-Einstellungen +- +- +- Stored keys +- Gespeicherte Schlüssel +- +- +- Remove +- Entfernen +- +- +- Delete the selected key? +- Ausgewählten Schlüssel löschen? +- +- +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- Möchten Sie wirklich diesen Schlüssel löschen? +-Dadurch kann die Verbindung zum Browser-Plugin verhindert werden. +- +- +- Key +- Schlüssel +- +- +- Value +- Wert +- +- +- Enable Browser Integration to access these settings. +- Aktivieren Sie die Browser-Integration, um auf diese Einstellungen zuzugreifen. +- +- +- Disconnect all browsers +- Alle Browserverbindungen entfernen +- +- +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- Möchten Sie wirklich alle Browserverbindungen entfernen? +-Das wird die Verbindung zum Browser-Plugin verhindern. +- +- +- KeePassXC: No keys found +- KeePassXC: Keine Schlüssel gefunden +- +- +- No shared encryption keys found in KeePassXC settings. +- Keine geteilten Schlüssel in den KeePassXC-Einstellungen gefunden. +- +- +- KeePassXC: Removed keys from database +- KeePassXC: Schlüssel aus der Datenbank entfernt +- +- +- Successfully removed %n encryption key(s) from KeePassXC settings. +- %n Schlüssel erfolgreich aus KeePassXC-Einstellungen entfernt.%n Schlüssel erfolgreich aus KeePassXC-Einstellungen entfernt. +- +- +- Forget all site-specific settings on entries +- Alle auf Internetseiten bezogenen Einstellungen löschen +- +- +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- Wollen Sie wirklich alle auf Internetseiten bezogenen Einstellungen löschen? +-Zugriffserlaubnisse zu allen Einträgen werden gelöscht. +- +- +- Removing stored permissions… +- Entferne gespeicherte Berechtigungen ... +- +- +- Abort +- Abbrechen +- +- +- KeePassXC: Removed permissions +- KeePassXC: Zugangsdaten entfernt +- +- +- Successfully removed permissions from %n entry(s). +- Zugriffsberechtigungen für %n Eintrag/Einträge erfolgreich gelöscht.Berechtigungen aus %n Einträgen erfolgreich entfernt. +- +- +- KeePassXC: No entry with permissions found! +- KeePassXC: Kein Eintrag mit Zugangsdaten gefunden! +- +- +- The active database does not contain an entry with permissions. +- Die aktive Datenbank enthält keinen Eintrag mit Zugangsdaten. +- +- +- Move KeePassHTTP attributes to custom data +- KeePassHTTP-Eigenschaften in die Plugin-Daten verschieben +- +- +- Do you really want to move all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- Sollen alle Einstellungen der veralteten Browserintegration zur aktuellen Version migriert werden? +-Das ist nötig, um das Browser-Plugin kompatibel zu halten. +- +- +- Stored browser keys +- Gespeicherte Browser-Schlüssel +- +- +- Remove selected key +- Ausgewählten Schlüssel entfernen +- +- +- Move KeePassHTTP attributes to KeePassXC-Browser custom data +- KeePassHTTP-Eigenschaften in die KeePassXC-Browser-Plugin-Daten verschieben +- +- +- Refresh database root group ID +- ID der Datenbank-Root-Gruppe erneuern +- +- +- Created +- Erstellt +- +- +- Refresh database ID +- Datenbank-ID erneuern +- +- +- Do you really want refresh the database ID? +-This is only necessary if your database is a copy of another and the browser extension cannot connect. +- Wollen Sie wirklich die Datenbank-ID erneuern? +-Dies ist nur nötig, wenn Ihre Datenbank eine Kopie einer anderen ist und die Browser-Erweiterung sich nicht verbinden kann. +- +- +- +- DatabaseSettingsWidgetDatabaseKey +- +- Add additional protection... +- Zusätzlichen Schutz hinzufügen ... +- +- +- No password set +- Kein Passwort festgelegt +- +- +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- WARNUNG! Sie haben kein Passwort festgelegt. Es wird streng davon abgeraten, eine Datenbank ohne Passwort zu benutzen! +- +-Wollen Sie wirklich ohne Passwort fortfahren? +- +- +- Continue without password +- Ohne Passwort fortfahren +- +- +- No encryption key added +- Kein Schlüssel zum Verschlüsseln hinzugefügt +- +- +- You must add at least one encryption key to secure your database! +- Sie müssen mindestens einen Schlüssel hinzufügen, um die Datenbank zu sichern! +- +- +- Unknown error +- Unbekannter Fehler +- +- +- Failed to change database credentials +- Fehler beim Ändern der Datenbank-Anmeldedaten +- +- +- +- DatabaseSettingsWidgetEncryption +- +- Encryption Algorithm: +- Verschlüsselungs-Algorithmus: +- +- +- AES: 256 Bit (default) +- AES: 256 Bit (Standard) +- +- +- Twofish: 256 Bit +- Twofish: 256 Bit +- +- +- Key Derivation Function: +- Schlüssel-Ableitungsfunktion: +- +- +- Transform rounds: +- Verschlüsselungs-Durchläufe: +- +- +- Memory Usage: +- Speicherverbrauch +- +- +- Parallelism: +- Parallelität: +- +- +- Decryption Time: +- Zeit zum Entschlüsseln: +- +- +- ?? s +- ?? s +- +- +- Change +- Ändern +- +- +- Higher values offer more protection, but opening the database will take longer. +- Höhere Werte sind sicherer, aber das Öffnen der Datenbank dauert länger. +- +- +- Database format: +- Datenbankformat: +- +- +- This is only important if you need to use your database with other programs. +- Nur wichtig, wenn Sie die Datenbank mit anderen Programmen verwenden müssen. +- +- +- KDBX 4.0 (recommended) +- KDBX 4.0 (empfohlen) +- +- +- KDBX 3.1 +- KDBX 3.1 +- +- +- unchanged +- Database decryption time is unchanged +- unverändert +- +- +- Number of rounds too high +- Key transformation rounds +- Anzahl der Runden zu groß +- +- +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or days (or even longer) to open! +- Sie verwenden eine sehr hohe Rundenanzahl mit Argon2. +- +-Wenn Sie diese Anzahl beibehalten, könnte Ihre Datenbank Stunden oder Tage (oder noch länger) zum Öffnen benötigen! +- +- +- Understood, keep number +- Verstanden, Anzahl beibehalten +- +- +- Cancel +- Abbrechen +- +- +- Number of rounds too low +- Key transformation rounds +- Anzahl der Runden zu niedrig +- +- +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database may be too easy to crack! +- Sie verwenden eine sehr niedrige Rundenanzahl mit AES-KDF. +- +-Wenn Sie diese Anzahl beibehalten, könnte Ihre Datenbank zu einfach zu knacken sein! +- +- +- KDF unchanged +- KDF unverändert +- +- +- Failed to transform key with new KDF parameters; KDF unchanged. +- Konnte Schlüssel nicht mit den neuen KDF-Parametern transformieren; KDF unverändert. +- +- +- MiB +- Abbreviation for Mebibytes (KDF settings) +- MiBMiB +- +- +- thread(s) +- Threads for parallel execution (KDF settings) +- Thread(s)Thread(s) +- +- +- Change existing decryption time +- Vorhandene Entschlüsselungszeit ändern +- +- +- Decryption time in seconds +- Entschlüsselungszeit in Sekunden +- +- +- Database format +- Datenbankformat +- +- +- Encryption algorithm +- Verschlüsselungsalgorithmus +- +- +- Key derivation function +- Funktion zur Schlüsselableitung +- +- +- Transform rounds +- Transformationsrunden +- +- +- Memory usage +- Speicherbelegung +- +- +- Parallelism +- Parallelität +- +- +- ?? ms +- ?? ms +- +- +- ? s +- ? s +- +- +- +- DatabaseSettingsWidgetFdoSecrets +- +- Exposed Entries +- Offengelegte Einträge +- +- +- Don't expose this database +- Diese Datenbank nicht offenlegen +- +- +- Expose entries under this group: +- Einträge unter dieser Gruppe offenlegen: +- +- +- Enable Secret Service to access these settings. +- Aktivieren Sie Secret Service, um auf diese Einstellungen zuzugreifen. +- +- +- +- DatabaseSettingsWidgetGeneral +- +- Database Meta Data +- Datenbank-Metadaten +- +- +- Database name: +- Datenbankname: +- +- +- Database description: +- Datenbankbeschreibung: +- +- +- Default username: +- Standard-Benutzername: +- +- +- History Settings +- Verlaufseinstellungen +- +- +- Max. history items: +- Max. Einträge im Verlauf: +- +- +- Max. history size: +- Max. Verlaufsgröße: +- +- +- MiB +- MiB +- +- +- Use recycle bin +- Papierkorb verwenden +- +- +- Additional Database Settings +- Weitere Datenbank-Einstellungen +- +- +- Database name field +- Namensfeld der Datenbank +- +- +- Database description field +- Beschreibungsfeld der Datenbank +- +- +- Default username field +- Standard-Benutzernamen-Feld +- +- +- Maximum number of history items per entry +- Maximale Anzahl von Verlaufs-Elementen pro Eintrag +- +- +- Maximum size of history per entry +- Maximale Größe des Verlaufs pro Eintrag +- +- +- Delete Recycle Bin +- Papierkorb löschen +- +- +- Do you want to delete the current recycle bin and all its contents? +-This action is not reversible. +- Wollen Sie den Papierkorb und seinen Inhalt komplett löschen? +-Das kann nicht rückgängig gemacht werden. +- +- +- (old) +- (alt) +- +- +- Enable compression (recommended) +- Komprimierung aktivieren (empfohlen) +- +- +- +- DatabaseSettingsWidgetKeeShare +- +- Sharing +- Teilen +- +- +- Breadcrumb +- Breadcrumb +- +- +- Type +- Typ +- +- +- Path +- Pfad +- +- +- Last Signer +- Letzte Unterschrift +- +- +- Certificates +- Zertifikate +- +- +- > +- Breadcrumb separator +- > +- +- +- +- DatabaseSettingsWidgetMetaDataSimple +- +- Database Name: +- Datenbankname: +- +- +- Description: +- Beschreibung: +- +- +- Database name field +- Namensfeld der Datenbank +- +- +- Database description field +- Beschreibungsfeld der Datenbank +- +- +- +- DatabaseTabWidget +- +- KeePass 2 Database +- KeePass 2-Datenbank +- +- +- All files +- Alle Dateien +- +- +- Open database +- Datenbank öffnen +- +- +- CSV file +- CSV-Datei +- +- +- Merge database +- Datenbank zusammenführen +- +- +- Open KeePass 1 database +- KeePass 1-Datenbank öffnen +- +- +- KeePass 1 database +- KeePass 1-Datenbank +- +- +- Export database to CSV file +- Datenbank als CSV-Datei exportieren +- +- +- Writing the CSV file failed. +- Fehler beim Schreiben der CSV-Datei. +- +- +- Database creation error +- Fehler beim Erstellen der Datenbank +- +- +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- Die erstellte Datenbank hat keinen Schlüssel oder KDF, sie kann nicht gespeichert werden. +-Das ist definitiv ein Programmfehler, bitte benachrichtigen Sie die Entwickler. +- +- +- Select CSV file +- CSV-Datei auswählen +- +- +- New Database +- Neue Datenbank +- +- +- %1 [New Database] +- Database tab name modifier +- %1 [Neue Datenbank] +- +- +- %1 [Locked] +- Database tab name modifier +- %1 [Gesperrt] +- +- +- %1 [Read-only] +- Database tab name modifier +- %1 [Schreibgeschützt] +- +- +- Failed to open %1. It either does not exist or is not accessible. +- Fehler beim Öffnen von %1: Nicht vorhanden oder nicht zugänglich. +- +- +- Export database to HTML file +- Datenbank in HTML-Datei exportieren +- +- +- HTML file +- HTML-Datei +- +- +- Writing the HTML file failed. +- Fehler beim Schreiben der HTML-Datei. +- +- +- Export Confirmation +- Export bestätigen +- +- +- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? +- Ihre Datenbank wird in eine unverschlüsselte Datei exportiert. Dadurch werden Ihre Passwörter und anderen Daten anfällig! Wollen Sie wirklich fortfahren? +- +- +- Open OPVault +- OPVault öffnen +- +- +- +- DatabaseWidget +- +- Searching... +- Suche … +- +- +- Do you really want to delete the entry "%1" for good? +- Wollen Sie den Eintrag „%1“ wirklich endgültig löschen? +- +- +- Do you really want to move entry "%1" to the recycle bin? +- Wollen Sie den Eintrag "%1" wirklich in den Papierkorb verschieben? +- +- +- Do you really want to move %n entry(s) to the recycle bin? +- Möchten Sie wirklich %n Eintrag aus dem Papierkorb löschen?Möchten Sie wirklich %n Einträge aus dem Papierkorb löschen? +- +- +- Execute command? +- Befehl ausführen? +- +- +- Do you really want to execute the following command?<br><br>%1<br> +- Folgenden Befehl ausführen? <br><br>%1<br> +- +- +- Remember my choice +- Meine Auswahl merken +- +- +- Do you really want to delete the group "%1" for good? +- Wollen Sie die Gruppe "%1" wirklich endgültig löschen? +- +- +- No current database. +- Keine aktuelle Datenbank. +- +- +- No source database, nothing to do. +- Keine Quelldatenbank, es gibt nichts zu tun. +- +- +- Search Results (%1) +- Suchergebnisse (%1) +- +- +- No Results +- Keine Ergebnisse +- +- +- File has changed +- Datei hat sich geändert +- +- +- The database file has changed. Do you want to load the changes? +- Die Datenbank wurde verändert. Änderungen laden? +- +- +- Merge Request +- Anfrage zum Zusammenführen +- +- +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- Die Datenbank wurde verändert, und Sie haben nicht gespeicherte Änderungen. +-Möchten Sie Ihre Änderungen zusammenführen? +- +- +- Empty recycle bin? +- Papierkorb leeren? +- +- +- Are you sure you want to permanently delete everything from your recycle bin? +- Sind Sie sicher, dass Sie den Inhalt des Papierkorbs unwiederbringlich löschen wollen? +- +- +- Do you really want to delete %n entry(s) for good? +- Sollen tatsächlich %n Einträge gelöscht werden?Möchten Sie wirklich %n Einträge löschen? +- +- +- Delete entry(s)? +- Eintrag/Einträge löschen?Einträge löschen? +- +- +- Move entry(s) to recycle bin? +- Eintrag/Einträge in den Papierkorb verschieben?Einträge in den Papierkorb verschieben? +- +- +- Lock Database? +- Datenbank sperren? +- +- +- You are editing an entry. Discard changes and lock anyway? +- Sie bearbeiten gerade einen Eintrag. +-Änderungen verwerfen und trotzdem sperren? +- +- +- "%1" was modified. +-Save changes? +- "%1" wurde geändert. +-Änderungen speichern? +- +- +- Database was modified. +-Save changes? +- Datenbank wurde geändert. +-Änderungen speichern? +- +- +- Save changes? +- Änderungen speichern? +- +- +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- Datenbank konnte während der automatischen Aktualisierung nicht geöffnet werden. +-Fehler: %1 +- +- +- Disable safe saves? +- Sicheres Speichern deaktivieren? +- +- +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- KeePassXC konnte die Datenbank nach mehrmaligem Versuch nicht erfolgreich speichern. Dies wird möglicherweise durch Synchronisierungsdienste verursacht, die die Datei geöffnet halten. +-Sicheres Speichern deaktivieren und erneut versuchen? +- +- +- Passwords +- Passwörter +- +- +- Save database as +- Datenbank speichern als +- +- +- KeePass 2 Database +- KeePass 2-Datenbank +- +- +- Replace references to entry? +- Referenzen zum Eintrag ersetzen? +- +- +- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? +- Eintrag "%1" hat %2 Referenz(en). Sollen die Referenzen mit den Werten überschrieben, der Eintrag überprungen oder trotzdem gelöscht werden?Eintrag "%1" hat %2 Referenz(en). Möchten Sie die Referenzen mit Werten überschreiben, diesen Eintrag überspringen oder trotzdem löschen? +- +- +- Delete group +- Gruppe löschen +- +- +- Move group to recycle bin? +- Gruppe in den Papierkorb verschieben? +- +- +- Do you really want to move the group "%1" to the recycle bin? +- Gruppe "%1" wirklich in den Papierkorb verschieben? +- +- +- Successfully merged the database files. +- Datenbanken erfolgreich zusammengeführt. +- +- +- Database was not modified by merge operation. +- Datenbank wurde beim Zusammenführen nicht geändert. +- +- +- Shared group... +- Gemeinsam genutzte Gruppe ... +- +- +- Writing the database failed: %1 +- Schreiben der Datenbank fehlgeschlagen: %1 +- +- +- This database is opened in read-only mode. Autosave is disabled. +- Diese Datenbank ist nur zum Lesen geöffnet. Automatisches Speichern ist deaktiviert. +- +- +- Save database backup +- Datenbank-Backup speichern +- +- +- Could not find database file: %1 +- Datenbank-Datei konnte nicht gefunden werden: %1 +- +- +- +- EditEntryWidget +- +- Entry +- Eintrag +- +- +- Advanced +- Fortgeschritten +- +- +- Icon +- Symbol +- +- +- Auto-Type +- Auto-Type +- +- +- Properties +- Eigenschaften +- +- +- History +- Verlauf +- +- +- SSH Agent +- SSH-Agent +- +- +- n/a +- - +- +- +- (encrypted) +- (verschlüsselt) +- +- +- Select private key +- Privaten Schlüssel auswählen +- +- +- Entry history +- Eintragsverlauf +- +- +- Add entry +- Eintrag hinzufügen +- +- +- Edit entry +- Eintrag bearbeiten +- +- +- New attribute +- Neue Eigenschaft +- +- +- Are you sure you want to remove this attribute? +- Sind Sie sicher, dass Sie dieses Attribut entfernen möchten? +- +- +- Tomorrow +- Morgen +- +- +- %n week(s) +- %n Woche%n Woche(n) +- +- +- %n month(s) +- %n Monat%n Monat(e) +- +- +- Entry updated successfully. +- Eintrag erfolgreich aktualisiert. +- +- +- New attribute %1 +- Neue Eigenschaft %1 +- +- +- %n year(s) +- %n Jahre%n Jahr(e) +- +- +- Confirm Removal +- Löschen bestätigen +- +- +- Browser Integration +- Browser-Integration +- +- +- <empty URL> +- <leere URL> +- +- +- Are you sure you want to remove this URL? +- Möchten Sie diese URL wirklich entfernen? +- +- +- Reveal +- Zeigen +- +- +- Hide +- Verstecken +- +- +- Unsaved Changes +- Ungespeicherte Änderungen +- +- +- Would you like to save changes to this entry? +- Möchten Sie Änderungen an diesem Eintrag speichern? +- +- +- [PROTECTED] Press Reveal to view or edit +- [GESCHÃœTZT] „Zeigen“ anklicken zum Anzeigen oder Bearbeiten +- +- +- Invalid Entry +- Ungültiger Eintrag +- +- +- An external merge operation has invalidated this entry. +-Unfortunately, any changes made have been lost. +- Ein externer Zusammenführungsvorgang hat diesen Eintrag ungültig gemacht. +-Leider sind alle vorgenommenen Änderungen verloren gegangen. +- +- +- +- EditEntryWidgetAdvanced +- +- Additional attributes +- Zusätzliche Eigenschaften +- +- +- Add +- Hinzufügen +- +- +- Remove +- Entfernen +- +- +- Edit Name +- Name bearbeiten +- +- +- Protect +- Schützen +- +- +- Reveal +- Zeigen +- +- +- Attachments +- Anhänge +- +- +- Foreground Color: +- Textfarbe: +- +- +- Background Color: +- Hintergrundfarbe: +- +- +- Attribute selection +- Auswahl der Eigenschaft +- +- +- Attribute value +- Wert der Eigenschaft +- +- +- Add a new attribute +- Neue Eigenschaft hinzufügen +- +- +- Remove selected attribute +- Ausgewählte Eigenschaft entfernen +- +- +- Edit attribute name +- Name der Eigenschaft bearbeiten +- +- +- Toggle attribute protection +- Schutz der Eigenschaft umschalten +- +- +- Show a protected attribute +- Eine geschützte Eigenschaft anzeigen +- +- +- Foreground color selection +- Auswahl der Vordergrundfarbe +- +- +- Background color selection +- Auswahl der Hintergrundfarbe +- +- +- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> +- <html><head/><body><p>Wenn aktiv, dann wird dieser Eintrag nicht in Berichten wie dem Gesundheitscheck oder HIBP erscheinen, selbst wenn es die Qualitätsanforderungen nicht erfüllt (z.B. Passwort-Entropie oder Wiederverwendung). Sie können das Häkchen setzen, wenn das Passwort außerhalb Ihrer Kontrolle liegt (z.B. wenn es eine vierstellige PIN sein muss), damit es die Berichte nicht durcheinanderbringt. +- +- +- Exclude from database reports +- Von Datenbank-Berichten ausschließen +- +- +- +- EditEntryWidgetAutoType +- +- Enable Auto-Type for this entry +- Auto-Type für diesen Eintrag aktivieren +- +- +- Window Associations +- Fenster-Zuordnungen +- +- +- + +- + +- +- +- - +- - +- +- +- Window title: +- Fenstertitel: +- +- +- Use a specific sequence for this association: +- Spezielle Sequenz für dieses Fenster verwenden: +- +- +- Custom Auto-Type sequence +- Benutzerdefinierte Auto-Type-Sequenz +- +- +- Open Auto-Type help webpage +- Auto-Type-Hilfe-Webseite öffnen +- +- +- Existing window associations +- Bestehende Fenster-Zuordnungen +- +- +- Add new window association +- Neue Fenster-Zuordnung hinzufügen +- +- +- Remove selected window association +- Ausgewählte Fenster-Zuordnung entfernen +- +- +- You can use an asterisk (*) to match everything +- Sie können ein Sternchen (*) benutzen, um die Auswahl auf alles auszuweiten +- +- +- Set the window association title +- Titel der Fenster-Zuordnung festlegen +- +- +- You can use an asterisk to match everything +- Sie können ein Sternchen benutzen, um die Auswahl auf alles auszuweiten +- +- +- Custom Auto-Type sequence for this window +- Benutzerdefinierte Auto-Type-Sequenz für dieses Fenster +- +- +- Inherit default Auto-Type sequence from the group +- Standard-Auto-Type-Sequenz von der Gruppe erben +- +- +- Use custom Auto-Type sequence: +- Benutzerdefinierte Auto-Type-Sequenz benutzen: +- +- +- +- EditEntryWidgetBrowser +- +- These settings affect to the entry's behaviour with the browser extension. +- Diese Einstellungen beeinflussen das Verhalten des Eintrags mit der Browser-Erweiterung. +- +- +- General +- Allgemein +- +- +- Skip Auto-Submit for this entry +- Auto-Submit für diesen Eintrag überspringen +- +- +- Hide this entry from the browser extension +- Diesen Eintrag vor der Browsererweiterung verstecken +- +- +- Additional URL's +- Zusätzliche URLs +- +- +- Add +- Hinzufügen +- +- +- Remove +- Entfernen +- +- +- Edit +- Bearbeiten +- +- +- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. +- Diese Einstellung nur zum Browser für HTTP-Auth-Dialoge senden. Wenn aktiv, werden normale Login-Formulare diesen Eintrag nicht zur Auswahl anbieten. +- +- +- Use this entry only with HTTP Basic Auth +- Diesen Eintrag nur mit "HTTP Basic Auth" verwenden +- +- +- +- EditEntryWidgetHistory +- +- Show +- Anzeigen +- +- +- Restore +- Wiederherstellen +- +- +- Delete +- Löschen +- +- +- Delete all +- Alle löschen +- +- +- Entry history selection +- Auswahl des Eintrags-Verlaufs +- +- +- Show entry at selected history state +- Eintrag zum ausgewählten Verlaufszustand anzeigen +- +- +- Restore entry to selected history state +- Eintrag aus ausgewähltem Verlaufszustand wiederherstellen +- +- +- Delete selected history state +- Ausgewählten Verlaufszustand löschen +- +- +- Delete all history +- Gesamten Verlauf löschen +- +- +- +- EditEntryWidgetMain +- +- URL: +- URL: +- +- +- Password: +- Passwort: +- +- +- Title: +- Titel: +- +- +- Presets +- Vorgaben +- +- +- Toggle the checkbox to reveal the notes section. +- Setzen Sie das Häkchen, um die Notizen anzuzeigen. +- +- +- Username: +- Benutzername: +- +- +- Url field +- URL-Feld +- +- +- Download favicon for URL +- Favicon für URL herunterladen +- +- +- Password field +- Passwort-Feld +- +- +- Toggle notes visible +- Sichtbarkeit der Notizen umschalten +- +- +- Expiration field +- Ablaufdatums-Feld +- +- +- Expiration Presets +- Ablaufdatums-Vorgaben +- +- +- Expiration presets +- Ablaufdatums-Vorgaben +- +- +- Notes field +- Notizen-Feld +- +- +- Title field +- Titelfeld +- +- +- Username field +- Benutzernamen-Feld +- +- +- Toggle expiration +- Ablaufdatum umschalten +- +- +- Notes: +- Notizen: +- +- +- https://example.com +- https://example.com +- +- +- Expires: +- Läuft ab: +- +- +- Edit Entry +- Eintrag bearbeiten +- +- +- +- EditEntryWidgetSSHAgent +- +- Form +- Formular +- +- +- Remove key from agent after +- Schlüssel vom Agenten entfernen nach +- +- +- seconds +- Sekunden +- +- +- Fingerprint +- Fingerabdruck +- +- +- Remove key from agent when database is closed/locked +- Schlüssel vom Agenten entfernen, wenn Datenbank geschlossen/gesperrt wird +- +- +- Public key +- Öffentlicher Schlüssel +- +- +- Add key to agent when database is opened/unlocked +- Key zum Agenten hinzufügen, wenn Datenbank geöffnet/entsperrt wird +- +- +- Comment +- Kommentar +- +- +- Decrypt +- Entschlüsseln +- +- +- n/a +- - +- +- +- Copy to clipboard +- In Zwischenablage kopieren +- +- +- Private key +- Privater Schlüssel +- +- +- External file +- Externe Datei +- +- +- Browse... +- Button for opening file dialog +- Durchsuchen ... +- +- +- Attachment +- Anhang +- +- +- Add to agent +- Zum Agenten hinzufügen +- +- +- Remove from agent +- Vom Agenten entfernen +- +- +- Require user confirmation when this key is used +- Benutzer muss bestätigen, wenn dieser Schlüssel verwendet wird +- +- +- Remove key from agent after specified seconds +- Schlüssel vom Agenten nach angegebenen Sekunden entfernen +- +- +- Browser for key file +- Browser für die Schlüsseldatei +- +- +- External key file +- Externe Schlüsseldatei +- +- +- Select attachment file +- Anhang auswählen +- +- +- +- EditGroupWidget +- +- Group +- Gruppe +- +- +- Icon +- Symbol +- +- +- Properties +- Eigenschaften +- +- +- Add group +- Gruppe hinzufügen +- +- +- Edit group +- Gruppe bearbeiten +- +- +- Enable +- Aktivieren +- +- +- Disable +- Deaktivieren +- +- +- Inherit from parent group (%1) +- Von der übergeordneten Gruppe (%1) erben +- +- +- Entry has unsaved changes +- Eintrag enthält ungespeicherte Änderungen +- +- +- +- EditGroupWidgetKeeShare +- +- Type: +- Typ: +- +- +- Path: +- Pfad: +- +- +- Password: +- Passwort: +- +- +- Inactive +- Inaktiv +- +- +- KeeShare unsigned container +- KeeShare unsignierter Container +- +- +- KeeShare signed container +- KeeShare signierter Container +- +- +- Select import source +- Importquelle auswählen +- +- +- Select export target +- Exportziel auswählen +- +- +- Select import/export file +- Datei für Import/Export auswählen +- +- +- Clear +- Löschen +- +- +- Import +- Importieren +- +- +- Export +- Exportieren +- +- +- Synchronize +- Synchronisieren +- +- +- Your KeePassXC version does not support sharing this container type. +-Supported extensions are: %1. +- Ihre Version von KeePassXC unterstützt das Teilen dieses Containertyps nicht. +-Unterstützte Erweiterungen sind: %1. +- +- +- %1 is already being exported by this database. +- %1 wird von dieser Datenbank bereits exportiert. +- +- +- %1 is already being imported by this database. +- %1 wird von dieser Datenbank bereits importiert. +- +- +- %1 is being imported and exported by different groups in this database. +- %1 wird von verschiedenen Gruppen in dieser Datenbank importiert und exportiert. +- +- +- KeeShare is currently disabled. You can enable import/export in the application settings. +- KeeShare is a proper noun +- KeeShare is derzeit deaktiviert. Sie können den Import/Export in den Anwendungseinstellungen aktivieren. +- +- +- Database export is currently disabled by application settings. +- Der Export von Datenbanken ist in den Anwendungseinstellungen deaktiviert. +- +- +- Database import is currently disabled by application settings. +- Der Import von Datenbanken ist in den Anwendungseinstellungen deaktiviert. +- +- +- Sharing mode field +- Freigabemodus-Feld +- +- +- Path to share file field +- Feld für Pfad der Freigabe-Datei +- +- +- Password field +- Passwort-Feld +- +- +- Clear fields +- Felder leeren +- +- +- Browse for share file +- Nach Freigabe-Datei durchsuchen +- +- +- Browse... +- Durchsuchen ... +- +- +- +- EditGroupWidgetMain +- +- Name field +- Namensfeld +- +- +- Notes field +- Notizen-Feld +- +- +- Toggle expiration +- Ablaufdatum umschalten +- +- +- Auto-Type toggle for this and sub groups +- Auto-Type umschalten für diese und Untergruppen +- +- +- Expiration field +- Ablaufdatums-Feld +- +- +- Search toggle for this and sub groups +- Suche umschalten für diese und Untergruppen +- +- +- Default auto-type sequence field +- Standard-Auto-Type-Sequenz-Feld +- +- +- Expires: +- Läuft ab: +- +- +- Use default Auto-Type sequence of parent group +- Standard-Auto-Type-Sequenz der übergeordneten Gruppe verwenden +- +- +- Auto-Type: +- Auto-Type: +- +- +- Search: +- Suche: +- +- +- Notes: +- Notizen: +- +- +- Name: +- Name: +- +- +- Set default Auto-Type sequence +- Standard-Auto-Type-Sequenz festlegen +- +- +- Edit Group +- Gruppe bearbeiten +- +- +- +- EditWidgetIcons +- +- Add custom icon +- Eigenes Symbol hinzufügen +- +- +- Delete custom icon +- Benutzerdefiniertes Symbol löschen +- +- +- Download favicon +- Favicon herunterladen +- +- +- Unable to fetch favicon. +- Kann Favicon nicht herunterladen. +- +- +- Images +- Bilder +- +- +- All files +- Alle Dateien +- +- +- Confirm Delete +- Löschen bestätigen +- +- +- Select Image(s) +- Bild(er) auswählen +- +- +- Successfully loaded %1 of %n icon(s) +- %1 von %n Symbol(en) erfolgreiche heruntergeladen%1 von %n Symbol(en) erfolgreich geladen +- +- +- No icons were loaded +- Keine Symbole geladen +- +- +- %n icon(s) already exist in the database +- %n Symbol(e) gibt es bereits in der Datenbank%n Symbol(e) gibt es bereits in der Datenbank +- +- +- The following icon(s) failed: +- Das Laden der folgenden Symbole ist fehlgeschlagen:Das Laden der folgenden Symbole ist fehlgeschlagen: +- +- +- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? +- Dieses Symbol wird von %n Eintrag benutzt und wird mit dem Standardsymbol ersetzt. Sind Sie sicher, dass es gelöscht werden soll?Dieses Symbol wird von %n Einträgen benutzt und wird durch das Standardsymbol ersetzt. Sind Sie sicher, dass Sie es löschen wollen? +- +- +- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security +- Sie können den DuckDuckGo-Webseitensymbol-Dienst unter Werkzeuge -> Einstellungen -> Sicherheit aktivieren +- +- +- Download favicon for URL +- Favicon für URL herunterladen +- +- +- Apply selected icon to subgroups and entries +- Ausgewähltes Symbol auf Untergruppen und Einträge anwenden +- +- +- Also apply to child groups +- Auch auf Untergruppen anwenden +- +- +- Also apply to child entries +- Auch auf Untereinträge anwenden +- +- +- Also apply to all children +- Auch auf alle Untereinträge anwenden +- +- +- Existing icon selected. +- Bestehendes Symbol ausgewählt. +- +- +- Use default icon +- Standardsymbol verwenden +- +- +- Use custom icon +- Benutzerdefiniertes Symbol verwenden +- +- +- Apply icon to... +- Symbol anwenden auf... +- +- +- Apply to this group only +- Nur auf diese Gruppe anwenden +- +- +- +- EditWidgetProperties +- +- Created: +- Erstellt: +- +- +- Modified: +- Bearbeitet: +- +- +- Accessed: +- Verwendet: +- +- +- Uuid: +- UUID: +- +- +- Plugin Data +- Plugin-Daten +- +- +- Remove +- Entfernen +- +- +- Delete plugin data? +- Plugin-Daten löschen? +- +- +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- Möchten Sie die ausgewählten Plugin-Daten wirklich löschen? +-Das kann dazu führen, dass die betroffenen Plugins nicht mehr richtig funktionieren. +- +- +- Key +- Schlüssel +- +- +- Value +- Wert +- +- +- Datetime created +- Erstellungs-Zeitpunkt +- +- +- Datetime modified +- Änderungs-Zeitpunkt +- +- +- Datetime accessed +- Zugriffs-Zeitpunkt +- +- +- Unique ID +- Eindeutige ID +- +- +- Plugin data +- Plugin-Daten +- +- +- Remove selected plugin data +- Ausgewählte Plugin-Daten entfernen +- +- +- +- Entry +- +- %1 - Clone +- %1 - Klon +- +- +- +- EntryAttachmentsModel +- +- Name +- Name +- +- +- Size +- Größe +- +- +- +- EntryAttachmentsWidget +- +- Form +- Formular +- +- +- Add +- Hinzufügen +- +- +- Remove +- Entfernen +- +- +- Open +- Öffnen +- +- +- Save +- Speichern +- +- +- Select files +- Dateien auswählen +- +- +- Are you sure you want to remove %n attachment(s)? +- Sind Sie sicher, dass Sie einen Anhang löschen möchten?Sind Sie sicher, dass Sie %n Anhänge löschen möchten? +- +- +- Save attachments +- Anhänge speichern +- +- +- Unable to create directory: +-%1 +- Kann Verzeichnis nicht erstellen: +-%1 +- +- +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- Sind Sie sicher, dass sie die existierende Datei „%1“ mit dem Anhang überschreiben wollen? +- +- +- Confirm overwrite +- Ãœberschreiben bestätigen +- +- +- Unable to save attachments: +-%1 +- Speichern der Anhänge nicht möglich: +-%1 +- +- +- Unable to open attachment: +-%1 +- Öffnen des Anhangs nicht möglich: +-%1 +- +- +- Unable to open attachments: +-%1 +- Öffnen der Anhänge nicht möglich: +-%1 +- +- +- Confirm remove +- Entfernen bestätigen +- +- +- Unable to open file(s): +-%1 +- Öffnen der Datei(en) nicht möglich: +-%1Datei(en) können nicht geöffnet werden: +-%1 +- +- +- Attachments +- Anhänge +- +- +- Add new attachment +- Neuen Anhang hinzufügen +- +- +- Remove selected attachment +- Ausgewählten Anhang entfernen +- +- +- Open selected attachment +- Ausgewählten Anhang öffnen +- +- +- Save selected attachment to disk +- Ausgewählten Anhang speichern +- +- +- %1 is a big file (%2 MB). +-Your database may get very large and reduce performance. +- +-Are you sure to add this file? +- %1 ist eine große Datei (%2 MB). +-Ihre Datenbank könnte sehr groß werden und die Leistung könnte sich verschlechtern. +- +-Wollen Sie diese Datei wirklich hinzufügen? +- +- +- Confirm Attachment +- Anhang bestätigen +- +- +- +- EntryAttributesModel +- +- Name +- Name +- +- +- +- EntryHistoryModel +- +- Last modified +- Zuletzt geändert +- +- +- Title +- Titel +- +- +- Username +- Benutzername +- +- +- URL +- URL +- +- +- +- EntryModel +- +- Ref: +- Reference abbreviation +- Ref: +- +- +- Group +- Gruppe +- +- +- Title +- Titel +- +- +- Username +- Benutzername +- +- +- URL +- URL +- +- +- Never +- Nie +- +- +- Password +- Passwort +- +- +- Notes +- Notizen +- +- +- Expires +- Läuft ab +- +- +- Created +- Erstellt +- +- +- Modified +- Geändert +- +- +- Accessed +- Letzter Zugriff +- +- +- Attachments +- Anhänge +- +- +- Size +- Größe +- +- +- Group name +- Gruppenname +- +- +- Entry title +- Eintragstitel +- +- +- Entry notes +- Eintragsnotizen +- +- +- Entry expires at +- Eintrag läuft ab +- +- +- Creation date +- Erzeugungsdatum +- +- +- Last modification date +- Datum der letzten Änderung +- +- +- Last access date +- Datum des letzten Zugriffs +- +- +- Attached files +- Angehängte Dateien +- +- +- Entry size +- Eintragsgröße +- +- +- Has attachments +- Hat Anhänge +- +- +- Has TOTP one-time password +- Hat TOTP-Einmal-Passwort +- +- +- +- EntryPreviewWidget +- +- Close +- Schließen +- +- +- General +- Allgemein +- +- +- Username +- Benutzername +- +- +- Password +- Passwort +- +- +- Expiration +- Ablaufdatum +- +- +- URL +- URL +- +- +- Attributes +- Attribute +- +- +- Attachments +- Anhänge +- +- +- Notes +- Notizen +- +- +- Autotype +- Auto-Type +- +- +- Window +- Fenster +- +- +- Sequence +- Sequenz +- +- +- Searching +- Suche +- +- +- Search +- Suche +- +- +- Clear +- Löschen +- +- +- Never +- Nie +- +- +- [PROTECTED] +- [GESCHÃœTZT] +- +- +- Enabled +- Aktiviert +- +- +- Disabled +- Deaktiviert +- +- +- Share +- Teilen +- +- +- Display current TOTP value +- Aktuellen TOTP-Wert anzeigen +- +- +- Advanced +- Fortgeschritten +- +- +- Default Sequence +- Standard-Sequenz +- +- +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- attributes line +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- +- +- +- EntryURLModel +- +- Invalid URL +- Ungültige URL +- +- +- +- EntryView +- +- Fit to window +- An Fenster anpassen +- +- +- Fit to contents +- An Inhalt anpassen +- +- +- Reset to defaults +- Auf Voreinstellung zurücksetzen +- +- +- Has attachments +- Entry attachment icon toggle +- Hat Anhänge +- +- +- Has TOTP +- Entry TOTP icon toggle +- Hat TOTP +- +- +- +- FdoSecrets::Item +- +- Entry "%1" from database "%2" was used by %3 +- Eintrag "%1" aus Datenbank "%2" wurde von %3 verwendet +- +- +- +- FdoSecrets::Service +- +- Failed to register DBus service at %1.<br/> +- Registrierung des DBus-Service auf %1 fehlgeschlagen.<br/> +- +- +- %n Entry(s) was used by %1 +- %1 is the name of an application +- %n Eintrag wurde von %1 verwendet%n Einträge wurden von %1 verwendet +- +- +- +- FdoSecrets::SettingsDatabaseModel +- +- File Name +- Dateiname +- +- +- Group +- Gruppe +- +- +- Manage +- Verwalten +- +- +- Unlock to show +- Entsperren, um anzuzeigen +- +- +- None +- Keine +- +- +- +- FdoSecrets::SettingsSessionModel +- +- Application +- Anwendung +- +- +- Manage +- Verwalten +- +- +- +- FdoSecretsPlugin +- +- <b>Fdo Secret Service:</b> %1 +- <b>Fdo Secret Service:</b> %1 +- +- +- Unknown +- Unknown PID +- Unbekannt +- +- +- Unknown +- Unknown executable path +- Unbekannt +- +- +- <i>PID: %1, Executable: %2</i> +- <i>PID: 1234, Executable: /path/to/exe</i> +- <i>PID: %1, Programmdatei: %2</i> +- +- +- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. +- Ein anderer Secret Service läuft bereits (%1).<br/>Bitte stoppen/entfernen Sie ihn, bevor Sie die Secret-Service-Integration erneut aktivieren. +- +- +- +- Group +- +- [empty] +- group has no children +- [leer] +- +- +- +- HibpDownloader +- +- Online password validation failed +- Online-Passwortvalidierung fehlgeschlagen +- +- +- +- IconDownloaderDialog +- +- Download Favicons +- Favicons herunterladen +- +- +- Cancel +- Abbrechen +- +- +- Having trouble downloading icons? +-You can enable the DuckDuckGo website icon service in the security section of the application settings. +- Probleme beim Herunterladen der Symbole? +-Sie können den DuckDuckGo-Dienst im Abschnitt "Sicherheit" der Anwendungseinstellungen aktivieren. +- +- +- Close +- Schließen +- +- +- URL +- URL +- +- +- Status +- Status +- +- +- Please wait, processing entry list... +- Bitte warten Sie, Eintragsliste wird verarbeitet ... +- +- +- Downloading... +- Lade herunter ... +- +- +- Ok +- Ok +- +- +- Already Exists +- Existiert bereits +- +- +- Download Failed +- Herunterladen fehlgeschlagen +- +- +- Downloading favicons (%1/%2)... +- Favicons (%1/%2) werden heruntergeladen ... +- +- +- +- KMessageWidget +- +- &Close +- S&chließen +- +- +- Close message +- Meldung schließen +- +- +- +- Kdbx3Reader +- +- missing database headers +- fehlende Datenbank-Header +- +- +- Header doesn't match hash +- Header stimmt nicht mit Hash überein +- +- +- Invalid header id size +- Ungültige Größe der Header-ID +- +- +- Invalid header field length +- Ungültiger Header-Feldlänge +- +- +- Invalid header data length +- Ungültige Header-Datenlänge +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Ungültige Anmeldedaten, bitte versuchen Sie es noch einmal. +-Falls dies wiederholt passiert, dann könnte Ihre Datenbank beschädigt sein. +- +- +- Unable to calculate database key +- Berechnung des Datenbankschlüssels gescheitert +- +- +- Unable to issue challenge-response: %1 +- Fehler beim Challenge-Response-Verfahren: %1 +- +- +- +- Kdbx3Writer +- +- Unable to issue challenge-response: %1 +- Fehler beim Challenge-Response-Verfahren: %1 +- +- +- Unable to calculate database key +- Berechnung des Datenbankschlüssels gescheitert +- +- +- +- Kdbx4Reader +- +- missing database headers +- fehlende Datenbank-Header +- +- +- Invalid header checksum size +- Ungültige Größe der Header-Prüfsumme +- +- +- Header SHA256 mismatch +- Ungültige SHA256-Prüfsumme für Header +- +- +- Unknown cipher +- Unbekannter Verschlüsselungsalgorithmus +- +- +- Invalid header id size +- Ungültige Größe der Header-ID +- +- +- Invalid header field length +- Ungültiger Header-Feldlänge +- +- +- Invalid header data length +- Ungültige Header-Datenlänge +- +- +- Failed to open buffer for KDF parameters in header +- Konnte Puffer mit KDF-Parametern im Header nicht öffnen +- +- +- Unsupported key derivation function (KDF) or invalid parameters +- Nicht unterstützte Schlüssel-Ableitungsfunktion (KDF) oder ungültige Parameter +- +- +- Legacy header fields found in KDBX4 file. +- Veraltete Header-Felder in KDBX4-Datei gefunden. +- +- +- Invalid inner header id size +- Ungültige Größe der Inner-Header-ID +- +- +- Invalid inner header field length +- Ungültige Inner-Header-Feldlänge +- +- +- Invalid inner header binary size +- Ungültige Inner-Header-Binärgröße +- +- +- Unsupported KeePass variant map version. +- Translation: variant map = data structure for storing meta data +- Ungültige KeePass-Variant-Map-Version +- +- +- Invalid variant map entry name length +- Translation: variant map = data structure for storing meta data +- Ungültige Variant-Map-Eintragslänge +- +- +- Invalid variant map entry name data +- Translation: variant map = data structure for storing meta data +- Ungültige Variant-Map-Eintragsdaten +- +- +- Invalid variant map entry value length +- Translation: variant map = data structure for storing meta data +- Ungültige Variant-Map-Eintragslänge +- +- +- Invalid variant map entry value data +- Translation comment: variant map = data structure for storing meta data +- Ungültige Variant-Map-Eintragsdaten +- +- +- Invalid variant map Bool entry value length +- Translation: variant map = data structure for storing meta data +- Ungültige Bool Variant-Map-Eintragslänge +- +- +- Invalid variant map Int32 entry value length +- Translation: variant map = data structure for storing meta data +- Ungültige Int32 Variant-Map-Eintragslänge +- +- +- Invalid variant map UInt32 entry value length +- Translation: variant map = data structure for storing meta data +- Ungültige UInt32 Variant-Map-Eintragslänge +- +- +- Invalid variant map Int64 entry value length +- Translation: variant map = data structure for storing meta data +- Ungültige Int64 Variant-Map-Eintragslänge +- +- +- Invalid variant map UInt64 entry value length +- Translation: variant map = data structure for storing meta data +- Ungültige UInt64 Variant-Map-Eintragslänge +- +- +- Invalid variant map entry type +- Translation: variant map = data structure for storing meta data +- Ungültiger Variant-Map-Eintragstyp +- +- +- Invalid variant map field type size +- Translation: variant map = data structure for storing meta data +- Falsche Feldgröße für Variant-Map-Feldtyp +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Ungültige Anmeldedaten, bitte versuchen Sie es noch einmal. +-Falls dies wiederholt passiert, dann könnte Ihre Datenbank beschädigt sein. +- +- +- (HMAC mismatch) +- (HMAC stimmt nicht überein) +- +- +- Unable to calculate database key: %1 +- Berechnung des Datenbankschlüssels gescheitert: %1 +- +- +- +- Kdbx4Writer +- +- Invalid symmetric cipher algorithm. +- Ungültiger symmetrischer Verschlüsselungsalgorithmus +- +- +- Invalid symmetric cipher IV size. +- IV = Initialization Vector for symmetric cipher +- Ungültige symmetrische Verschlüsselungs-IV-Größe. +- +- +- Failed to serialize KDF parameters variant map +- Translation comment: variant map = data structure for storing meta data +- KDF-Parameter aus Variant-Map konnten nicht serialisiert werden +- +- +- Unable to calculate database key: %1 +- Berechnung des Datenbankschlüssels gescheitert: %1 +- +- +- +- KdbxReader +- +- Unsupported cipher +- Nicht unterstützter Verschlüsselungsalgorithmus +- +- +- Invalid compression flags length +- Ungültige Komprimierungs-Flag-Länge +- +- +- Unsupported compression algorithm +- Nicht unterstütztes Komprimierungsverfahren +- +- +- Invalid master seed size +- Ungültige Master-Seed-Länge +- +- +- Invalid transform seed size +- Ungültige Transform-Seed-Länge +- +- +- Invalid transform rounds size +- Ungültige Transformations-Runden-Länge +- +- +- Invalid start bytes size +- Ungültige Start-Byte-Länge +- +- +- Invalid random stream id size +- Ungültige Random-Stream-ID-Länge +- +- +- Invalid inner random stream cipher +- Ungültige Inner-Random-Stream-Cipher +- +- +- Not a KeePass database. +- Keine KeePass-Datenbank. +- +- +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- Die ausgewählte Datei ist eine alte KeePass 1-Datenbank (.kdb). +- +-Sie können die Dateit mit "Datenbank -> KeePass 1-Datenbank importieren ..." importieren. +-Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann später nicht mehr mit der alten KeePassX-Version 0.4 geöffnet werden. +- +- +- Unsupported KeePass 2 database version. +- Nicht unterstützte KeePass 2-Datenbank-Version. +- +- +- Invalid cipher uuid length: %1 (length=%2) +- Ungültige Länge der Cipher-UUID: %1 (Länge: %2) +- +- +- Unable to parse UUID: %1 +- UUID konnte nicht gelesen werden: %1 +- +- +- Failed to read database file. +- Fehler beim Lesen der Datenbank-Datei. +- +- +- +- KdbxXmlReader +- +- XML parsing failure: %1 +- XML-Parser-Fehler: %1 +- +- +- No root group +- Keine Root-Gruppe +- +- +- Missing icon uuid or data +- Fehlende Symbol-UUID oder -Daten +- +- +- Missing custom data key or value +- Fehlender benutzerdefinierter Datenschlüssel oder -wert +- +- +- Multiple group elements +- Mehrere Gruppen-Elemente +- +- +- Null group uuid +- Nicht gesetzte Gruppen-UUID +- +- +- Invalid group icon number +- Ungültige Gruppen-Symbol-Anzahl +- +- +- Invalid EnableAutoType value +- Ungültiger Wert für EnableAutoType +- +- +- Invalid EnableSearching value +- Ungültiger Wert für EnableSearching +- +- +- No group uuid found +- Keine Gruppen-UUID gefunden +- +- +- Null DeleteObject uuid +- Fehlende DeleteObject-UUID +- +- +- Missing DeletedObject uuid or time +- Fehlende DeletedObject-UUID oder -Zeit +- +- +- Null entry uuid +- Fehlende Eintrags-UUID +- +- +- Invalid entry icon number +- Ungültige Eintrags-Symbol-Nummer +- +- +- History element in history entry +- Verlaufselement in Eintragsverlauf +- +- +- No entry uuid found +- Keine Eintrags-UUID gefunden +- +- +- History element with different uuid +- Verlaufselement mit anderer UUID +- +- +- Duplicate custom attribute found +- Doppeltes Benutzerattribut gefunden +- +- +- Entry string key or value missing +- Eintrags-Schlüssel oder -Wert fehlt +- +- +- Entry binary key or value missing +- Eintrags-Binärschlüssel oder -Wert fehlt +- +- +- Auto-type association window or sequence missing +- Auto-Type-Fensterangabe oder -Sequenz fehlt +- +- +- Invalid bool value +- Ungültiger Bool-Wert +- +- +- Invalid date time value +- Ungültiger Datums-Zeit-Wert +- +- +- Invalid color value +- Ungültiger Farbwert +- +- +- Invalid color rgb part +- Ungültiger RGB-Farbteil +- +- +- Invalid number value +- Ungültiger Zahlwert +- +- +- Invalid uuid value +- Ungültiger UUID-Wert +- +- +- Unable to decompress binary +- Translator meant is a binary data inside an entry +- Binärdatei konnte nicht entkomprimiert werden +- +- +- XML error: +-%1 +-Line %2, column %3 +- XML Fehler: +-%1 +-Zeile %2, Spalte %3 +- +- +- +- KeeAgentSettings +- +- Invalid KeeAgent settings file structure. +- Ungültige KeeAgent-Einstellungs-Dateistruktur. +- +- +- Private key is an attachment but no attachments provided. +- Privater Schlüssel ist ein Anhang, aber es wurde kein Anhang angegeben. +- +- +- Private key is empty +- Privater Schlüssel ist leer +- +- +- File too large to be a private key +- Datei zu groß, um ein privater Schlüssel zu sein +- +- +- Failed to open private key +- Fehler beim Öffnen des privaten Schlüssels +- +- +- +- KeePass1OpenWidget +- +- Unable to open the database. +- Fehler beim Öffnen der Datenbank. +- +- +- Import KeePass1 Database +- KeePass1-Datenbank importieren +- +- +- +- KeePass1Reader +- +- Unable to read keyfile. +- Fehler beim Lesen der Schlüsseldatei. +- +- +- Not a KeePass database. +- Keine KeePass-Datenbank. +- +- +- Unsupported encryption algorithm. +- Nicht unterstützter Verschlüsselungsalgorithmus. +- +- +- Unsupported KeePass database version. +- Nicht unterstützte KeePass-Datenbankversion. +- +- +- Unable to read encryption IV +- IV = Initialization Vector for symmetric cipher +- Verschlüsselungs-IV konnte nicht gelesen werden +- +- +- Invalid number of groups +- Ungültige Anzahl Gruppen +- +- +- Invalid number of entries +- Ungültige Anzahl Einträge +- +- +- Invalid content hash size +- Ungültige Inhalts-Hashlänge +- +- +- Invalid transform seed size +- Ungültige Transform-Seed-Länge +- +- +- Invalid number of transform rounds +- Ungültige Anzahl Transform-Runden +- +- +- Unable to construct group tree +- Gruppen-Baum konnte nicht erzeugt werden +- +- +- Root +- Root +- +- +- Key transformation failed +- Schlüssel-Transformation fehlgeschlagen +- +- +- Invalid group field type number +- Ungültige Gruppen-Typanzahl +- +- +- Invalid group field size +- Falsche Feldgröße für Gruppe +- +- +- Read group field data doesn't match size +- Falsche Feldgröße für Gruppenfeld +- +- +- Incorrect group id field size +- Falsche Feldgröße für Gruppen-ID +- +- +- Incorrect group creation time field size +- Falsche Feldgröße für Gruppen-Erstellungs-Zeit +- +- +- Incorrect group modification time field size +- Falsche Feldgröße für Gruppen-Änderungszeit +- +- +- Incorrect group access time field size +- Falsche Feldgröße für Gruppen-Zugriffszeit +- +- +- Incorrect group expiry time field size +- Falsche Feldgröße für Gruppen-Verfallszeit +- +- +- Incorrect group icon field size +- Falsche Feldgröße für Gruppen-Symbol +- +- +- Incorrect group level field size +- Falsche Feldgröße für Gruppen-Level +- +- +- Invalid group field type +- Falsche Feldtyp für Gruppe +- +- +- Missing group id or level +- Fehlende Gruppen-ID oder -Level +- +- +- Missing entry field type number +- Fehlende Eintragsfeld-Typnummer +- +- +- Invalid entry field size +- Falsche Feldgröße für Eintrag +- +- +- Read entry field data doesn't match size +- Gelesene Eintrags-Felddaten haben falsche Größe +- +- +- Invalid entry uuid field size +- Eintrags-UUID hat falsche Größe +- +- +- Invalid entry group id field size +- Falsche Feldgröße für Eintrags-Gruppen-ID +- +- +- Invalid entry icon field size +- Falsche Feldgröße für Eintrags-Symbol +- +- +- Invalid entry creation time field size +- Falsche Feldgröße für Eintrags-Erstellungszeit +- +- +- Invalid entry modification time field size +- Falsche Feldgröße für Eintrags-Änderungszeit +- +- +- Invalid entry expiry time field size +- Falsche Feldgröße für Eintrags-Ablaufdatum +- +- +- Invalid entry field type +- Ungültiger Eintrags-Feldtyp +- +- +- unable to seek to content position +- Kann nicht zur Inhaltsposition spulen +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Ungültige Anmeldedaten, bitte versuchen Sie es noch einmal. +-Falls dies wiederholt passiert, dann könnte Ihre Datenbank beschädigt sein. +- +- +- Unable to calculate database key +- Berechnung des Datenbankschlüssels gescheitert +- +- +- +- KeeShare +- +- Invalid sharing reference +- Ungültige Freigabe-Referenz +- +- +- Inactive share %1 +- Inaktive Freigabe %1 +- +- +- Imported from %1 +- Importiert aus %1 +- +- +- Exported to %1 +- Exportiert nach %1 +- +- +- Synchronized with %1 +- Synchronisiert mit %1 +- +- +- Import is disabled in settings +- Der Import ist in den Einstellungen deaktiviert +- +- +- Export is disabled in settings +- Der Export ist in den Einstellungen deaktiviert +- +- +- Inactive share +- Inaktive Freigabe +- +- +- Imported from +- Importiert von +- +- +- Exported to +- Exportiert nach +- +- +- Synchronized with +- Synchronisiert mit +- +- +- +- KeyComponentWidget +- +- Key Component +- Schlüsselkomponente +- +- +- Key Component Description +- Beschreibung der Schlüsselkomponente +- +- +- Cancel +- Abbrechen +- +- +- Key Component set, click to change or remove +- Schlüsselkomponente ausgewählt, klicken zum Ändern oder Entfernen +- +- +- Add %1 +- Add a key component +- %1 hinzufügen +- +- +- Change %1 +- Change a key component +- %1 ändern +- +- +- Remove %1 +- Remove a key component +- %1 entfernen +- +- +- %1 set, click to change or remove +- Change or remove a key component +- %1 ausgewählt, klicken zum Ändern oder Entfernen +- +- +- +- KeyFileEditWidget +- +- Generate +- Erzeugen +- +- +- Key File +- Schlüsseldatei +- +- +- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> +- <p>Um die Sicherheit zu erhöhen, können Sie eine Schlüsseldatei mit zufälligem Inhalt erzeugen.</p><p>Diese Datei muss geheim gehalten werden und darf niemals verloren gehen, ansonsten ist kein Zugriff auf die Datenbank mehr möglich!</p> +- +- +- Error loading the key file '%1' +-Message: %2 +- Fehler beim Laden der Schlüsseldatei '%1': +-%2 +- +- +- Key files +- Schlüsseldateien +- +- +- All files +- Alle Dateien +- +- +- Create Key File... +- Schlüsseldatei erzeugen … +- +- +- Error creating key file +- Fehler beim Erstellen der Schlüsseldatei +- +- +- Unable to create key file: %1 +- Schlüsseldatei kann nicht erzeugt werden: %1 +- +- +- Select a key file +- Schlüsseldatei auswählen +- +- +- Key file selection +- Auswahl der Schlüsseldatei +- +- +- Browse for key file +- Schlüsseldatei auswählen +- +- +- Browse... +- Durchsuchen ... +- +- +- Generate a new key file +- Neue Schlüsseldatei erzeugen +- +- +- Note: Do not use a file that may change as that will prevent you from unlocking your database! +- Hinweis: Benutzen Sie keine Datei, die sich ändern kann, sonst können Sie die Datenbank nicht mehr entsperren! +- +- +- Invalid Key File +- Ungültige Schlüsseldatei +- +- +- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. +- Sie können die aktuelle Datenbank nicht als ihre eigene Schlüsseldatei verwenden. Bitte wählen Sie eine andere Datei oder erzeugen Sie eine neue Schlüsseldatei. +- +- +- Suspicious Key File +- Verdächtige Schlüsseldatei +- +- +- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. +-Are you sure you want to continue with this file? +- Die gewählte Schlüsseldatei sieht aus wie eine Passwort-Datenbank. Eine Schlüsseldatei darf sich niemals ändern, sonst verlieren Sie für immer den Zugriff auf Ihre Datenbank. +-Wollen Sie wirklich mit dieser Datei fortfahren? +- +- +- Old key file format +- Altes Schlüsseldateiformat +- +- +- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. +- Sie verwenden ein altes Schlüsseldateiformat, das KeePassXC möglicherweise<br>in Zukunft nicht mehr unterstützen wird.<br><br>Bitte erwägen Sie, eine neue Schlüsseldatei zu erzeugen. +- +- +- +- MainWindow +- +- &Database +- &Datenbank +- +- +- &Help +- &Hilfe +- +- +- &Groups +- &Gruppen +- +- +- &Tools +- &Werkzeuge +- +- +- &Quit +- &Beenden +- +- +- &About +- &Ãœber +- +- +- Database settings +- Datenbank-Einstellungen +- +- +- Copy username to clipboard +- Benutzername in Zwischenablage kopieren +- +- +- Copy password to clipboard +- Passwort in die Zwischenablage kopieren +- +- +- &Settings +- &Einstellungen +- +- +- &Title +- &Titel +- +- +- Copy title to clipboard +- Titel in Zwischenablage kopieren +- +- +- &URL +- &URL +- +- +- Copy URL to clipboard +- URL in Zwischenablage kopieren +- +- +- &Notes +- &Notizen +- +- +- Copy notes to clipboard +- Notizen in Zwischenablage kopieren +- +- +- Copy &TOTP +- &TOTP kopieren +- +- +- E&mpty recycle bin +- Papierkorb l&eeren +- +- +- Clear history +- Verlauf löschen +- +- +- Access error for config file %1 +- Zugriffsfehler bei Konfigurationsdatei %1 +- +- +- Settings +- Einstellungen +- +- +- Toggle window +- Fenster zeigen/verstecken +- +- +- Quit KeePassXC +- KeePassXC beenden +- +- +- Please touch the button on your YubiKey! +- Bitte drücken Sie die Taste an Ihrem YubiKey! +- +- +- WARNING: You are using an unstable build of KeePassXC! +-There is a high risk of corruption, maintain a backup of your databases. +-This version is not meant for production use. +- WARNUNG: Sie verwenden eine instabile Version von KeePassXC! +-Es besteht ein hohes Risiko für Datenverlust. Halten Sie ein Backup Ihrer Datenbank. +-Diese Version ist nicht für den Produktiveinsatz gedacht. +- +- +- &Donate +- &Spenden +- +- +- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +-We recommend you use the AppImage available on our downloads page. +- WARNUNG: Ihre Qt-Version kann KeePassXC bei Verwendung der Bildschirmtastatur zum Absturz bringen! +-Wir empfehlen die Verwendung des auf unserer Downloadseite verfügbaren AppImage. +- +- +- &Import +- Importieren +- +- +- Create a new database +- Neue Datenbank erstellen +- +- +- Merge from another KDBX database +- Mit einer anderen KDBX-Datenbank zusammenführen +- +- +- Add a new entry +- Neuen Eintrag hinzufügen +- +- +- View or edit entry +- Eintrag anzeigen oder bearbeiten +- +- +- Add a new group +- Neue Gruppe hinzufügen +- +- +- Perform &Auto-Type +- Auto-Ausfüllen +- +- +- Open &URL +- &URL öffnen +- +- +- Import a KeePass 1 database +- KeePass 1-Datenbank importieren +- +- +- Import a CSV file +- CSV-Datei importieren +- +- +- NOTE: You are using a pre-release version of KeePassXC! +-Expect some bugs and minor issues, this version is not meant for production use. +- WARNUNG: Sie verwenden eine Vorabversion von KeePassXC! +-Rechnen Sie mit Fehlern. Diese Version ist nicht für den Produktiveinsatz gedacht. +- +- +- Check for updates on startup? +- Bei Programmstart nach Updates suchen? +- +- +- Would you like KeePassXC to check for updates on startup? +- Soll KeePassXC bei Programmstart nach neuen Programmversionen suchen? +- +- +- You can always check for updates manually from the application menu. +- Sie können im Menü jederzeit selbst nach Updates suchen. +- +- +- &Export +- &Export +- +- +- Sort &A-Z +- Sortieren &A-Z +- +- +- Sort &Z-A +- Sortieren &Z-A +- +- +- &Password Generator +- &Passwortgenerator +- +- +- Import a 1Password Vault +- 1Password-Tresor importieren +- +- +- &Getting Started +- &Erste Schritte +- +- +- &User Guide +- &Benutzerhandbuch +- +- +- &Keyboard Shortcuts +- &Tastenkombinationen +- +- +- &Recent Databases +- &Zuletzt verwendete Datenbanken +- +- +- &Entries +- &Einträge +- +- +- Copy Att&ribute +- Att&ribut kopieren +- +- +- TOTP +- TOTP +- +- +- View +- Ansicht +- +- +- Theme +- Design +- +- +- &Check for Updates +- Nach Updates &suchen +- +- +- &Open Database… +- Datenbank &öffnen… +- +- +- &Save Database +- Datenbank &speichern +- +- +- &Close Database +- Datenbank &schließen +- +- +- &New Database… +- &Neue Datenbank… +- +- +- &Merge From Database… +- Mit Datenbank &zusammenführen… +- +- +- &New Entry… +- &Neuer Eintrag… +- +- +- &Edit Entry… +- Eintrag &bearbeiten… +- +- +- &Delete Entry… +- Eintrag &löschen… +- +- +- &New Group… +- &Neue Gruppe… +- +- +- &Edit Group… +- Gruppe &bearbeiten… +- +- +- &Delete Group… +- Gruppe &löschen… +- +- +- Download All &Favicons… +- Alle &Favicons herunterladen… +- +- +- Sa&ve Database As… +- Datenbank s&peichern als… +- +- +- Database &Security… +- Datenbank-&Sicherheit… +- +- +- Database &Reports... +- Datenbank-&Berichte… +- +- +- Statistics, health check, etc. +- Statistiken, Gesundheitscheck usw. +- +- +- &Database Settings… +- &Datenbank-Einstellungen… +- +- +- &Clone Entry… +- Eintrag &klonen… +- +- +- Move u&p +- Nach &oben verschieben +- +- +- Move entry one step up +- Eintrag einen Schritt nach oben verschieben +- +- +- Move do&wn +- Nach &unten verschieben +- +- +- Move entry one step down +- Eintrag einen Schritt nach unten verschieben +- +- +- Copy &Username +- &Benutzername kopieren +- +- +- Copy &Password +- Passwort kopieren +- +- +- Download &Favicon +- &Favicon herunterladen +- +- +- &Lock Databases +- Datenbanken &sperren +- +- +- &CSV File… +- &CSV-Datei… +- +- +- &HTML File… +- &HTML-Datei… +- +- +- KeePass 1 Database… +- KeePass 1-Datenbank… +- +- +- 1Password Vault… +- 1Password-Tresor… +- +- +- CSV File… +- CSV-Datei… +- +- +- Show TOTP +- TOTP anzeigen +- +- +- Show QR Code +- QR-Code anzeigen +- +- +- Set up TOTP… +- TOTP einrichten… +- +- +- Report a &Bug +- Einen &Fehler melden +- +- +- Open Getting Started Guide +- Erste Schritte öffnen +- +- +- &Online Help +- &Online-Hilfe +- +- +- Go to online documentation +- Online-Dokumentation aufrufen +- +- +- Open User Guide +- Benutzerhandbuch öffnen +- +- +- Save Database Backup... +- Datenbank-Backup speichern... +- +- +- Add key to SSH Agent +- Schlüssel zum SSH-Agent hinzufügen +- +- +- Remove key from SSH Agent +- Schlüssel vom SSH-Agent entfernen +- +- +- Compact Mode +- Kompakter Modus +- +- +- Automatic +- Automatisch +- +- +- Light +- Hell +- +- +- Dark +- Dunkel +- +- +- Classic (Platform-native) +- Klassisch (Plattform-nativ) +- +- +- Show Toolbar +- Symbolleiste anzeigen +- +- +- Show Preview Panel +- Vorschau-Panel anzeigen +- +- +- Don't show again for this version +- Für diese Version nicht erneut anzeigen +- +- +- Restart Application? +- Anwendung neustarten? +- +- +- You must restart the application to apply this setting. Would you like to restart now? +- Sie müssen die Anwendung neustarten, um diese Einstellung anzuwenden. Möchten Sie jetzt neustarten? +- +- +- Perform Auto-Type Sequence +- Führe Auto-Type-Sequenz aus +- +- +- {USERNAME} +- {BENUTZERNAME} +- +- +- {USERNAME}{ENTER} +- {BENUTZERNAME}{ENTER} +- +- +- {PASSWORD} +- {PASSWORT} +- +- +- {PASSWORD}{ENTER} +- {PASSWORT}{ENTER} +- +- +- Always on Top +- Immer oben +- +- +- Hide Usernames +- Benutzernamen ausblenden +- +- +- Hide Passwords +- Passwörter ausblenden +- +- +- +- ManageDatabase +- +- Database settings +- Datenbank-Einstellungen +- +- +- Edit database settings +- Datenbank-Einstellungen bearbeiten +- +- +- Unlock database +- Datenbank entsperren +- +- +- Unlock database to show more information +- Datenbank entsperren, um mehr Informationen anzuzeigen +- +- +- Lock database +- Datenbank sperren +- +- +- +- ManageSession +- +- Disconnect +- Trennen +- +- +- Disconnect this application +- Diese Anwendung trennen +- +- +- +- Merger +- +- Creating missing %1 [%2] +- Erzeuge fehlendes %1 [%2] +- +- +- Relocating %1 [%2] +- Verschiebe %1 [%2] +- +- +- Overwriting %1 [%2] +- Ãœberschreibe %1 [%2] +- +- +- older entry merged from database "%1" +- älterer Eintrag aus Datenbank "%1" zusammengeführt +- +- +- Adding backup for older target %1 [%2] +- Backup für älteres Ziel %1 wird hinzugefügt [%2] +- +- +- Adding backup for older source %1 [%2] +- Backup für ältere Quelle %1 wird hinzugefügt [%2] +- +- +- Reapplying older target entry on top of newer source %1 [%2] +- Älterer Zieleintrag wird auf neueren Quelleintrag angewendet %1 [%2] +- +- +- Reapplying older source entry on top of newer target %1 [%2] +- Älterer Quelleintrag wird auf neueren Zieleintrag angewendet %1 [%2] +- +- +- Synchronizing from newer source %1 [%2] +- Synchronisiere von neuerer Quelle %1 [%2] +- +- +- Synchronizing from older source %1 [%2] +- Synchronisiere von älterer Quelle %1 [%2] +- +- +- Deleting child %1 [%2] +- Lösche Untereintrag %1 [%2] +- +- +- Deleting orphan %1 [%2] +- Lösche verwaisten Eintrag %1 [%2] +- +- +- Changed deleted objects +- Gelöschte Einträge geändert +- +- +- Adding missing icon %1 +- Fehlendes Symbol %1 wird hinzugefügt +- +- +- Removed custom data %1 [%2] +- Plugin-Daten %1 entfernt [%2] +- +- +- Adding custom data %1 [%2] +- Plugin-Daten %1 werden hinzugefügt [%2] +- +- +- +- NewDatabaseWizard +- +- Create a new KeePassXC database... +- Neue KeePassXC-Datenbank erstellen … +- +- +- Root +- Root group +- Root +- +- +- +- NewDatabaseWizardPage +- +- WizardPage +- Assistent +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Hier werden die Details der Verschlüsselung eingestellt. Sie können diese Details auch später in den Datenbank-Einstellungen ändern. +- +- +- Advanced Settings +- Fortgeschrittene Einstellungen +- +- +- Simple Settings +- Grundeinstellungen +- +- +- Encryption Settings +- Verschlüsselungs-Einstellungen +- +- +- +- NewDatabaseWizardPageDatabaseKey +- +- Database Credentials +- Datenbank-Anmeldedaten +- +- +- A set of credentials known only to you that protects your database. +- Ein Satz von nur Ihnen bekannten Anmeldedaten, der Ihre Datenbank schützt. +- +- +- +- NewDatabaseWizardPageEncryption +- +- Encryption Settings +- Verschlüsselungs-Einstellungen +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Hier werden die Details der Verschlüsselung eingestellt. Sie können diese Details auch später in den Datenbank-Einstellungen ändern. +- +- +- +- NewDatabaseWizardPageMetaData +- +- General Database Information +- Allgemeine Informationen zur Datenbank +- +- +- Please fill in the display name and an optional description for your new database: +- Bitte geben Sie den Namen und (optional) eine Beschreibung der neuen Datenbank ein: +- +- +- +- NixUtils +- +- Password Manager +- Passwortmanager +- +- +- +- OpData01 +- +- Invalid OpData01, does not contain header +- Ungültiges OpData01, enthält keinen Header +- +- +- Unable to read all IV bytes, wanted 16 but got %1 +- Konnte nicht alle IV-Bytes lesen, wollte 16, aber bekam %1 +- +- +- Unable to init cipher for opdata01: %1 +- Kann Cipher für opdata01 nicht initialisieren: %1 +- +- +- Unable to read all HMAC signature bytes +- Kann nicht alle HMAC-Signatur-Bytes lesen +- +- +- Malformed OpData01 due to a failed HMAC +- Fehlerhaftes OpData01 aufgrund von fehlgeschlagenem HMAC +- +- +- Unable to process clearText in place +- Kann clearText nicht direkt verarbeiten +- +- +- Expected %1 bytes of clear-text, found %2 +- %1 Bytes Klartext erwartet, %2 gefunden +- +- +- +- OpVaultOpenWidget +- +- Read Database did not produce an instance +-%1 +- Gelesene Datenbank ergab keine Instanz +-%1 +- +- +- +- OpVaultReader +- +- Directory .opvault must exist +- Ordner .opvault muss existieren +- +- +- Directory .opvault must be readable +- Ordner .opvault muss lesbar sein +- +- +- Directory .opvault/default must exist +- Ordner .opvault/default muss existieren +- +- +- Directory .opvault/default must be readable +- Ordner .opvault/default muss lesbar sein +- +- +- Unable to decode masterKey: %1 +- MasterKey: %1 konnte nicht entschlüsselt werden +- +- +- Unable to derive master key: %1 +- Master-Passwort kann nicht abgeleitet werden: %1 +- +- +- +- OpenSSHKey +- +- Invalid key file, expecting an OpenSSH key +- Ungültige Schlüsseldatei, erwartet: OpenSSH-Schlüssel +- +- +- PEM boundary mismatch +- Falsche PEM-Boundarys +- +- +- Base64 decoding failed +- Base64-Dekodierung fehlgeschlagen +- +- +- Key file way too small. +- Schlüsseldatei ist viel zu klein. +- +- +- Key file magic header id invalid +- Magic-Header-ID der Schlüsseldatei ungültig +- +- +- Found zero keys +- Keine Schlüssel gefunden +- +- +- Failed to read public key. +- Öffentlicher Schlüssel kann nicht gelesen werden. +- +- +- Corrupted key file, reading private key failed +- Defekte Schlüsseldatei, Lesen des privaten Schlüssels fehlgeschlagen +- +- +- No private key payload to decrypt +- Keine private Schlüsselsignatur zum Entschlüsseln +- +- +- Trying to run KDF without cipher +- Versuche, KDF ohne Verschlüsselungsalgorithmus anzuwenden +- +- +- Passphrase is required to decrypt this key +- Passphrase zum Entschlüsseln des Schlüssels benötigt +- +- +- Key derivation failed, key file corrupted? +- Schlüssel-Ableitung fehlgeschlagen, Schlüsseldatei beschädigt? +- +- +- Decryption failed, wrong passphrase? +- Entschlüsselung fehlgeschlagen, falsche Passphrase? +- +- +- Unexpected EOF while reading public key +- Unerwartetes Dateiende beim Lesen des öffentlichen Schlüssels +- +- +- Unexpected EOF while reading private key +- Unerwartetes Dateiende beim Lesen des privaten Schlüssels +- +- +- Can't write public key as it is empty +- Öffentlicher Schlüssel kann nicht geschrieben werden, da er leer ist +- +- +- Unexpected EOF when writing public key +- Unerwartetes Dateiende beim Schreiben des öffentlichen Schlüssels +- +- +- Can't write private key as it is empty +- Privatschlüssel konnte nicht geschrieben werden, da er leer ist +- +- +- Unexpected EOF when writing private key +- Unerwartetes Dateiende beim Schreiben des privaten Schlüssels +- +- +- Unsupported key type: %1 +- Nicht unterstützter Schlüssel-Typ: %1 +- +- +- Unknown cipher: %1 +- Unbekannter Verschlüsselungsalgorithmus: %1 +- +- +- Cipher IV is too short for MD5 kdf +- Verschlüsselungs-IV ist zur kurz für MD5-KDF +- +- +- Unknown KDF: %1 +- Unbekannte KDF: %1 +- +- +- Unknown key type: %1 +- Unbekannter Schlüsseltyp: %1 +- +- +- +- PasswordEdit +- +- Passwords do not match +- Passwörter stimmen nicht überein +- +- +- Passwords match so far +- Passwörter stimmen überein +- +- +- Toggle Password (%1) +- Passwort umschalten (%1) +- +- +- Generate Password (%1) +- Passwort erzeugen (%1) +- +- +- Warning: Caps Lock enabled! +- Warnung: Feststelltaste aktiviert! +- +- +- +- PasswordEditWidget +- +- Enter password: +- Passwort eingeben: +- +- +- Confirm password: +- Passwort bestätigen: +- +- +- Password +- Passwort +- +- +- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> +- <p>Ein Passwort ist der wichtigste Weg, Ihre Datenbank abzusichern.</p><p>Gute Passwörter sind lang und werden nur ein einziges Mal benutzt. KeePassXC kann eins für Sie generieren.</p> +- +- +- Passwords do not match. +- Die Passwörter stimmen nicht überein. +- +- +- Password field +- Passwort-Feld +- +- +- Repeat password field +- Feld zum Wiederholen des Passworts +- +- +- +- PasswordGeneratorWidget +- +- %p% +- %p% +- +- +- strength +- Password strength +- Stärke +- +- +- entropy +- Entropie +- +- +- Password +- Passwort +- +- +- Character Types +- Zeichentypen +- +- +- Numbers +- Zahlen +- +- +- Extended ASCII +- Erweitertes ASCII +- +- +- Exclude look-alike characters +- Gleichaussehende Zeichen ausschließen +- +- +- Pick characters from every group +- Zeichen aus allen Gruppen verwenden +- +- +- &Length: +- &Länge: +- +- +- Passphrase +- Passphrase +- +- +- Wordlist: +- Wortliste +- +- +- Word Separator: +- Worttrenner: +- +- +- Close +- Schließen +- +- +- Entropy: %1 bit +- Entropie: %1 bit +- +- +- Password Quality: %1 +- Passwort-Qualität: %1 +- +- +- Poor +- Password quality +- Schlecht +- +- +- Weak +- Password quality +- Schwach +- +- +- Good +- Password quality +- Gut +- +- +- Excellent +- Password quality +- Ausgezeichnet +- +- +- Switch to advanced mode +- Zum fortgeschrittenen Modus wechseln +- +- +- Advanced +- Fortgeschritten +- +- +- Braces +- Klammern +- +- +- Punctuation +- Interpunktion +- +- +- Quotes +- Anführungszeichen +- +- +- Logograms +- Kürzel +- +- +- Character set to exclude from generated password +- Zeichen, die nicht im Passwort enthalten sein sollen +- +- +- Do not include: +- Nicht einbeziehen: +- +- +- Add non-hex letters to "do not include" list +- Nicht-Hex-Buchstaben zu der "Nicht-Hinzufügen"-Liste hinzufügen +- +- +- Hex +- Hex +- +- +- Excluded characters: "0", "1", "l", "I", "O", "|", "ï¹’" +- Ausgeschlossene Zeichen: "0", "1", "l", "I", "O", "|", "ï¹’" +- +- +- Generated password +- Erzeugtes Passwort +- +- +- Upper-case letters +- Großbuchstaben +- +- +- Lower-case letters +- Kleinbuchstaben +- +- +- Special characters +- Sonderzeichen +- +- +- Math Symbols +- Mathematische Symbole +- +- +- Dashes and Slashes +- Bindezeichen und Schrägstriche +- +- +- Excluded characters +- Ausgenommene Zeichen +- +- +- Hex Passwords +- Hexadezimale Passwörter +- +- +- Password length +- Passwortlänge +- +- +- Word Case: +- Groß-/Kleinschreibung: +- +- +- Regenerate password +- Neu erzeugen +- +- +- Copy password +- Passwort kopieren +- +- +- lower case +- Kleinbuchstaben +- +- +- UPPER CASE +- GROẞBUCHSTABEN +- +- +- Title Case +- Anfangsbuchstaben groß +- +- +- Generate Password +- Passwort erzeugen +- +- +- Also choose from: +- Auch wählen aus: +- +- +- Additional characters to use for the generated password +- Zusätzliche Zeichen für die Passwort-Erzeugung +- +- +- Additional characters +- Zusätzliche Zeichen +- +- +- Word Count: +- Wort-Anzahl +- +- +- Esc +- Esc +- +- +- Apply Password +- Passwort anwenden +- +- +- Ctrl+S +- Strg+S +- +- +- Regenerate password (%1) +- Passwort neu erzeugen (%1) +- +- +- Special Characters +- Sonderzeichen +- +- +- +- QApplication +- +- KeeShare +- KeeShare +- +- +- Statistics +- Statistiken +- +- +- Very weak password +- Sehr schwaches Passwort +- +- +- Password entropy is %1 bits +- Passwort-Entropie ist %1 Bits +- +- +- Weak password +- Schwaches Passwort +- +- +- Used in %1/%2 +- Verwendet in %1/%2 +- +- +- Password is used %1 times +- Passwort wird %1 Mal verwendet +- +- +- Password has expired +- Passwort ist abgelaufen +- +- +- Password expiry was %1 +- Passwort-Ablauf war %1 +- +- +- Password is about to expire +- Passwort läuft bald ab +- +- +- Password expires in %1 days +- Passwort läuft in %1 Tagen ab +- +- +- Password will expire soon +- Passwort wird bald ablaufen +- +- +- Password expires on %1 +- Passwort läuft am %1 ab +- +- +- Health Check +- Gesundheitscheck +- +- +- HIBP +- HIBP +- +- +- +- QMessageBox +- +- Overwrite +- Ãœberschreiben +- +- +- Delete +- Löschen +- +- +- Move +- Verschieben +- +- +- Empty +- Leeren +- +- +- Remove +- Entfernen +- +- +- Skip +- Ãœberspringen +- +- +- Disable +- Deaktivieren +- +- +- Merge +- Zusammenführen +- +- +- Continue +- Fortsetzen +- +- +- +- QObject +- +- Database not opened +- Datenbank nicht geöffnet +- +- +- Database hash not available +- Datenbank-Hash nicht verfügbar +- +- +- Client public key not received +- Öffentlichen Schlüssel des Clients nicht empfangen +- +- +- Cannot decrypt message +- Nachricht konnte nicht entschlüsselt werden +- +- +- Action cancelled or denied +- Aktion abgebrochen oder verweigert +- +- +- KeePassXC association failed, try again +- KeePassXC-Verbindung fehlgeschlagen, bitte erneut versuchen +- +- +- Encryption key is not recognized +- Schlüssel nicht erkannt +- +- +- Incorrect action +- Falsche Aktion +- +- +- Empty message received +- Leere Nachricht erhalten +- +- +- No URL provided +- Keine URL angegeben +- +- +- No logins found +- Keine Anmeldedaten gefunden +- +- +- Unknown error +- Unbekannter Fehler +- +- +- Add a new entry to a database. +- Neuen Eintrag zur Datenbank hinzufügen. +- +- +- Path of the database. +- Pfad der Datenbank. +- +- +- Key file of the database. +- Schlüsseldatei der Datenbank +- +- +- path +- Pfad +- +- +- Username for the entry. +- Benutzername für den Eintrag. +- +- +- username +- Benutzername +- +- +- URL for the entry. +- URL für den Eintrag. +- +- +- URL +- URL +- +- +- Prompt for the entry's password. +- Nach dem Passwort des Eintrags fragen. +- +- +- Generate a password for the entry. +- Passwort für den Eintrag generieren. +- +- +- length +- Länge +- +- +- Path of the entry to add. +- Pfad des hinzuzufügenden Eintrags. +- +- +- Path of the entry to clip. +- clip = copy to clipboard +- Pfad des in die Zwischenablage zu kopierenden Eintrags +- +- +- Timeout in seconds before clearing the clipboard. +- Zeit in Sekunden, bevor die Zwischenablage geleert wird. +- +- +- Edit an entry. +- Einen Eintrag bearbeiten. +- +- +- Title for the entry. +- Titel für diesen Eintrag. +- +- +- title +- Titel +- +- +- Path of the entry to edit. +- Pfad des zu bearbeitenden Eintrags. +- +- +- Estimate the entropy of a password. +- Entropie des Passworts abschätzen. +- +- +- Password for which to estimate the entropy. +- Passwort, für das die Entropie abgeschätzt werden soll. +- +- +- Perform advanced analysis on the password. +- Fortgeschrittene Analyse des Passworts ausführen. +- +- +- +- +-Available commands: +- +- +- +-Verfügbare Kommandos: +- +- +- +- Name of the command to execute. +- Name des auszuführenden Befehls. +- +- +- List database entries. +- Datenbankeinträge auflisten. +- +- +- Path of the group to list. Default is / +- Pfad der aufzulistenden Gruppe. Standard ist /. +- +- +- Find entries quickly. +- Einträge schnell finden. +- +- +- Search term. +- Suchbegriff. +- +- +- Merge two databases. +- Zwei Datenbanken zusammenführen +- +- +- Path of the database to merge from. +- Pfad der Datenbank, aus der zusammengeführt werden soll. +- +- +- Use the same credentials for both database files. +- Dieselben Anmeldedaten für beide Datenbanken verwenden. +- +- +- Key file of the database to merge from. +- Schlüsseldatei der Datenbank, aus der zusammengeführt werden soll. +- +- +- Show an entry's information. +- Informationen eines Eintrags anzeigen. +- +- +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- Namen der anzuzeigenden Attribute. Diese Option kann mehr als einmal angegeben werden, wobei jedes Attribut in einer eigenen Zeile in der gegebenen Reihenfolge angegeben wird. Wenn keine Attribute angegeben sind, wird eine Zusammenfassung der Standardattribute gegeben. +- +- +- attribute +- Eigenschaft +- +- +- Name of the entry to show. +- Name des anzuzeigenden Eintrags. +- +- +- NULL device +- NULL-Gerät +- +- +- error reading from device +- Fehler beim Lesen vom Gerät +- +- +- malformed string +- Ungültige Zeichenfolge +- +- +- missing closing quote +- Schließendes Anführungszeichen fehlt +- +- +- Group +- Gruppe +- +- +- Title +- Titel +- +- +- Username +- Benutzername +- +- +- Password +- Passwort +- +- +- Notes +- Notizen +- +- +- Last Modified +- Zuletzt bearbeitet +- +- +- Created +- Erstellt +- +- +- Browser Integration +- Browser-Integration +- +- +- SSH Agent +- SSH-Agent +- +- +- Generate a new random diceware passphrase. +- Neue zufällige Diceware-Passphrase erzeugen. +- +- +- Word count for the diceware passphrase. +- Wortanzahl für die Diceware-Passphrase. +- +- +- Wordlist for the diceware generator. +-[Default: EFF English] +- Wortliste für den Diceware-Generator. +-[Standard: EFF Englisch] +- +- +- Generate a new random password. +- Neues zufälliges Passwort erzeugen. +- +- +- Could not create entry with path %1. +- Eintrag mit dem Pfad %1 kann nicht erstellt werden. +- +- +- Enter password for new entry: +- Passwort für neuen Eintrag eingeben: +- +- +- Writing the database failed %1. +- Schreiben der Datenbank fehlgeschlagen: %1 +- +- +- Successfully added entry %1. +- Eintrag %1 erfolgreich hinzugefügt. +- +- +- Invalid timeout value %1. +- Ungültiger Timeout-Wert %1 +- +- +- Entry %1 not found. +- Eintrag %1 nicht gefunden. +- +- +- Entry with path %1 has no TOTP set up. +- Zu Eintrag %1 wurde kein TOTP eingerichtet. +- +- +- Clearing the clipboard in %1 second(s)... +- Zwischenablage wird in %1 Sekunde(n) geleert…Zwischenablage wird in %1 Sekunde(n) gelöscht ... +- +- +- Clipboard cleared! +- Zwischenablage gelöscht. +- +- +- Silence password prompt and other secondary outputs. +- Passwortnachfrage und andere Ausgaben unterdrücken. +- +- +- count +- CLI parameter +- Anzahl +- +- +- Could not find entry with path %1. +- Eintrag mit dem Pfad %1 nicht gefunden. +- +- +- Not changing any field for entry %1. +- Eintrag %1 wurde nicht geändert. +- +- +- Enter new password for entry: +- Neues Passwort für Eintrag eingeben: +- +- +- Writing the database failed: %1 +- Schreiben der Datenbank fehlgeschlagen: %1 +- +- +- Successfully edited entry %1. +- Eintrag %1 erfolgreich bearbeitet. +- +- +- Length %1 +- Länge: %1 +- +- +- Entropy %1 +- Entropie %1 +- +- +- Log10 %1 +- Log10 %1 +- +- +- Multi-word extra bits %1 +- Multi-Wort-Zusatzbits %1 +- +- +- Type: Bruteforce +- Typ: Bruteforce +- +- +- Type: Dictionary +- Typ: Wörterbuch +- +- +- Type: Dict+Leet +- Typ: Wörterbuch und Leet +- +- +- Type: User Words +- Typ: Benutzerdefinierte Wörter +- +- +- Type: User+Leet +- Type: Benutzerdefinierte Wörter und Leet +- +- +- Type: Repeated +- Typ: Wiederholt +- +- +- Type: Sequence +- Typ: Sequenz +- +- +- Type: Spatial +- Typ: Räumlich +- +- +- Type: Date +- Typ: Datum +- +- +- Type: Bruteforce(Rep) +- Typ: Bruteforce +- +- +- Type: Dictionary(Rep) +- Typ: Wörterbuch +- +- +- Type: Dict+Leet(Rep) +- Typ: Wörterbuch und Leet +- +- +- Type: User Words(Rep) +- Typ: Benutzerdefinierte Wörter +- +- +- Type: User+Leet(Rep) +- Type: Benutzerdefinierte Wörter und Leet +- +- +- Type: Repeated(Rep) +- Typ: Wiederholt +- +- +- Type: Sequence(Rep) +- Typ: Sequenz +- +- +- Type: Spatial(Rep) +- Typ: Räumlich +- +- +- Type: Date(Rep) +- Typ: Datum +- +- +- Type: Unknown%1 +- Typ: Unbekannt%1 +- +- +- Entropy %1 (%2) +- Entropie %1 (%2) +- +- +- *** Password length (%1) != sum of length of parts (%2) *** +- *** Passwortlänge (%1) ist nicht die Summe ihrer Teile (%2) *** +- +- +- Failed to load key file %1: %2 +- Schlüsseldatei %1 kann nicht geladen werden: %2 +- +- +- Length of the generated password +- Länge des erzeugten Passworts +- +- +- Use lowercase characters +- Kleinbuchstaben verwenden +- +- +- Use uppercase characters +- Großbuchstaben verwenden +- +- +- Use special characters +- Sonderzeichen verwenden +- +- +- Use extended ASCII +- Erweitertes ASCII verwenden +- +- +- Exclude character set +- Zeichen ausschließen +- +- +- chars +- Zeichen +- +- +- Exclude similar looking characters +- Gleichaussehende Zeichen ausschließen +- +- +- Include characters from every selected group +- Zeichen aus allen ausgewählten Gruppen verwenden +- +- +- Recursively list the elements of the group. +- Rekursiv alle Elemente der Gruppe auflisten +- +- +- Cannot find group %1. +- Gruppe %1 nicht gefunden. +- +- +- Error reading merge file: +-%1 +- Fehler beim Öffnen der zuzusammenzuführenden Datei: +-%1 +- +- +- Unable to save database to file : %1 +- Datenbank kann nicht gespeichert werden: %1 +- +- +- Unable to save database to file: %1 +- Datenbank kann nicht gespeichert werden: %1 +- +- +- Successfully recycled entry %1. +- Eintrag %1 erfolgreich in Papierkorb verschoben. +- +- +- Successfully deleted entry %1. +- Eintrag %1 erfolgreich gelöscht. +- +- +- Show the entry's current TOTP. +- Aktuelles TOTP des Eintrags anzeigen. +- +- +- ERROR: unknown attribute %1. +- FEHLER: Unbekannte Eigenschaft %1. +- +- +- No program defined for clipboard manipulation +- Kein Programm zur Manipulation der Zwischenablage angegeben. +- +- +- file empty +- Datei leer +- +- +- %1: (row, col) %2,%3 +- %1: (Zeile, Spalte) %2,%3 +- +- +- AES-KDF (KDBX 4) +- AES-KDF (KDBX 4) +- +- +- AES-KDF (KDBX 3.1) +- AES-KDF (KDBX 3.1) +- +- +- Invalid Settings +- TOTP +- Ungültige Einstellungen +- +- +- Invalid Key +- TOTP +- Ungültiger Schlüssel +- +- +- Message encryption failed. +- Nachrichtenverschlüsselung fehlgeschlagen +- +- +- No groups found +- Keine Gruppe gefunden +- +- +- Create a new database. +- Neue Datenbank erstellen. +- +- +- File %1 already exists. +- Datei %1 existiert bereits. +- +- +- Loading the key file failed +- Schlüsseldatei kann nicht geladen werden +- +- +- No key is set. Aborting database creation. +- Kein Schlüssel festgelegt. Datenbankerstellung wird abgebrochen. +- +- +- Failed to save the database: %1. +- Datenbank kann nicht gespeichert werden: %1. +- +- +- Successfully created new database. +- Datenbank erfolgreich erstellt. +- +- +- Creating KeyFile %1 failed: %2 +- Schlüsseldatei %1 kann nicht erstellt werden: %2 +- +- +- Loading KeyFile %1 failed: %2 +- Schlüsseldatei %1 kann nicht geladen werden: %2 +- +- +- Path of the entry to remove. +- Pfad des zu entfernenden Eintrags. +- +- +- Existing single-instance lock file is invalid. Launching new instance. +- Vorhandene Einmal-Sperrdatei ist ungültig. Starte neue Instanz. +- +- +- The lock file could not be created. Single-instance mode disabled. +- Sperrdatei konnte nicht erstellt werden. Einzelinstanzmodus ist deaktiviert. +- +- +- KeePassXC - cross-platform password manager +- KeePassXC - Plattformübergreifender Passwort-Manager +- +- +- filenames of the password databases to open (*.kdbx) +- Dateinamen der zu öffnenden Datenbanken (*.kdbx) +- +- +- path to a custom config file +- Pfad zu einer benutzerdefinierten Konfigurationsdatei +- +- +- key file of the database +- Schlüsseldatei der Datenbank +- +- +- read password of the database from stdin +- Passwort der Datenbank von stdin lesen +- +- +- Another instance of KeePassXC is already running. +- Eine andere KeePassXC-Instanz läuft bereits. +- +- +- Fatal error while testing the cryptographic functions. +- Kritischer Fehler beim Testen der kryptografischen Funktionen. +- +- +- KeePassXC - Error +- KeePassXC - Fehler +- +- +- Database password: +- Datenbank-Passwort: +- +- +- Cannot create new group +- Neue Gruppe kann nicht erstellt werden +- +- +- Deactivate password key for the database. +- Passwort-Schlüssel für die Datenbank deaktivieren. +- +- +- Displays debugging information. +- Zeigt Informationen zur Fehlerbehebung an. +- +- +- Deactivate password key for the database to merge from. +- Passwort-Schlüssel für die Quell-Datenbank der Zusammenführung deaktivieren. +- +- +- Version %1 +- Version %1 +- +- +- Build Type: %1 +- Build Typ: %1 +- +- +- Revision: %1 +- Revision: %1 +- +- +- Distribution: %1 +- Distribution: %1 +- +- +- Debugging mode is disabled. +- Diagnosemodus ist deaktiviert. +- +- +- Debugging mode is enabled. +- Diagnosemodus ist aktiviert. +- +- +- Operating system: %1 +-CPU architecture: %2 +-Kernel: %3 %4 +- Betriebssystem: %1 +-CPU-Architektur: %2 +-Kernel: %3 %4 +- +- +- Auto-Type +- Auto-Type +- +- +- KeeShare (signed and unsigned sharing) +- KeeShare (bestätigtes und unbestätigtes Teilen) +- +- +- KeeShare (only signed sharing) +- KeeShare (nur bestätigtes Teilen) +- +- +- KeeShare (only unsigned sharing) +- KeeShare (nur unbestätigtes Teilen) +- +- +- YubiKey +- YubiKey +- +- +- TouchID +- TouchID +- +- +- None +- Keine +- +- +- Enabled extensions: +- Aktivierte Erweiterungen: +- +- +- Cryptographic libraries: +- Kryptographische Bibliotheken: +- +- +- Cannot generate a password and prompt at the same time! +- Kann nicht Passwort und Meldung gleichzeitig generieren! +- +- +- Adds a new group to a database. +- Fügt der Datenbank eine neue Gruppe hinzu. +- +- +- Path of the group to add. +- Pfad der hinzuzufügenden Gruppe. +- +- +- Group %1 already exists! +- Gruppe %1 existiert bereits! +- +- +- Group %1 not found. +- Gruppe %1 nicht gefunden. +- +- +- Successfully added group %1. +- Gruppe %1 erfolgreich hinzugefügt. +- +- +- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. +- Ãœberprüfen, ob irgenwelche Passwörter in öffentlichen Datenlecks vorkommen. FILENAME muss der der Pfad der Datei sein, die SHA-1-Hashes der Passwörter im HIBP-Format enthält, wie zu finden unter https://haveibeenpwned.com/Passwords. +- +- +- FILENAME +- DATEINAME +- +- +- Analyze passwords for weaknesses and problems. +- Passw‭örter auf Schwächen und Probleme prüfen. +- +- +- Failed to open HIBP file %1: %2 +- HIBP-Datei %1 konnte nicht geöffnet werden: %2 +- +- +- Evaluating database entries against HIBP file, this will take a while... +- Datenbank-Einträge werden gegen HIBP-Datei geprüft, das wird eine Weile dauern ... +- +- +- Close the currently opened database. +- Die aktuell geöffnete Datenbank schließen. +- +- +- Display this help. +- Diese Hilfe anzeigen. +- +- +- slot +- Slot +- +- +- Invalid word count %1 +- Ungültige Wortanzahl %1 +- +- +- The word list is too small (< 1000 items) +- Die Wortliste ist zu kurz (< 1000 Einträge) +- +- +- Exit interactive mode. +- Verlasse interaktiven Modus. +- +- +- Exports the content of a database to standard output in the specified format. +- Exportiert den Inhalt einer Datenbank im angegebenen Format auf die Standardausgabe. +- +- +- Unable to export database to XML: %1 +- Fehler beim Exportieren der Datenbank nach XML: %1 +- +- +- Unsupported format %1 +- Nicht unterstütztes Format %1 +- +- +- Use numbers +- Zahlen verwenden +- +- +- Invalid password length %1 +- Ungültige Passwortlänge %1 +- +- +- Display command help. +- Hilfe zu diesem Befehl anzeigen. +- +- +- Available commands: +- Verfügbare Befehle: +- +- +- Import the contents of an XML database. +- Die Inhalte einer XML-Datenbank importieren. +- +- +- Path of the XML database export. +- Pfad des XML-Datenbank-Exports. +- +- +- Path of the new database. +- Pfad zur neuen Datenbank. +- +- +- Successfully imported database. +- Datenbank erfolgreich importiert. +- +- +- Unknown command %1 +- Unbekannter Befehl %1 +- +- +- Flattens the output to single lines. +- Wandelt Ausgabe in einzelne Zeilen um. +- +- +- Only print the changes detected by the merge operation. +- Nur die bei der Zusammenführung erkannten Änderungen ausgeben. +- +- +- Yubikey slot for the second database. +- Yubikey-Slot für die zweite Datenbank. +- +- +- Successfully merged %1 into %2. +- %1 erfolgreich nach %2 zusammengeführt. +- +- +- Database was not modified by merge operation. +- Datenbank wurde beim Zusammenführen nicht verändert. +- +- +- Moves an entry to a new group. +- Verschiebt einen Eintrag in eine neue Gruppe. +- +- +- Path of the entry to move. +- Pfad des zu verschiebenden Eintrags. +- +- +- Path of the destination group. +- Pfad der Zielgruppe. +- +- +- Could not find group with path %1. +- Gruppe mit Pfad %1 nicht gefunden. +- +- +- Entry is already in group %1. +- Eintrag ist bereits in Gruppe %1. +- +- +- Successfully moved entry %1 to group %2. +- Eintrag %1 erfolgreich in Gruppe %2 verschoben. +- +- +- Open a database. +- Datenbank öffnen. +- +- +- Path of the group to remove. +- Pfad der zu entfernenden Gruppe. +- +- +- Cannot remove root group from database. +- Kann Root-Gruppe nicht aus Datenbank entfernen. +- +- +- Successfully recycled group %1. +- Gruppe %1 erfolgreich in Papierkorb verschoben. +- +- +- Successfully deleted group %1. +- Gruppe %1 erfolgreich gelöscht. +- +- +- Failed to open database file %1: not found +- Fehler beim Öffnen der Datenbank-Datei %1: Nicht gefunden +- +- +- Failed to open database file %1: not a plain file +- Fehler beim Öffnen der Datenbank-Datei %1: Keine normale Datei +- +- +- Failed to open database file %1: not readable +- Fehler beim Öffnen der Datenbank-Datei %1: Nicht lesbar +- +- +- Enter password to unlock %1: +- Passwort zum Entsperren von %1 eingeben: +- +- +- Invalid YubiKey slot %1 +- Ungültiger YubiKey-Slot %1 +- +- +- Enter password to encrypt database (optional): +- Passwort eingeben, um Datenbank zu verschlüsseln (optional): +- +- +- HIBP file, line %1: parse error +- HIBP-Datei, Zeile %1: Parse-Fehler +- +- +- Secret Service Integration +- Secret-Service-Integration +- +- +- User name +- Benutzername +- +- +- Password for '%1' has been leaked %2 time(s)! +- Passwort für '%1' wurde %2 Mal in Datenlecks gefunden!Passwort für '%1' wurde %2 Mal in Datenlecks gefunden! +- +- +- Invalid password generator after applying all options +- Ungültiger Passwortgenerator nach Anwendung aller Optionen +- +- +- Show the protected attributes in clear text. +- Geschützte Eigenschaften im Klartext anzeigen. +- +- +- Browser Plugin Failure +- Browser-Plugin-Fehler +- +- +- Could not save the native messaging script file for %1. +- Speichern des Native-Messaging-Skripts für %1 fehlgeschlagen. +- +- +- Copy the given attribute to the clipboard. Defaults to "password" if not specified. +- Angegebene Eigenschaft in die Zwischenablage kopieren. Standardmäßig "password", wenn nicht spezifiziert. +- +- +- Copy the current TOTP to the clipboard (equivalent to "-a totp"). +- Aktuelles TOTP in die Zwischenablage kopieren (äquivalent zu "-a totp"). +- +- +- Copy an entry's attribute to the clipboard. +- Eigenschaft eines Eintrags in die Zwischenablage kopieren. +- +- +- ERROR: Please specify one of --attribute or --totp, not both. +- FEHLER: Geben Sie entweder --attribute oder --totp an, nicht beides. +- +- +- ERROR: attribute %1 is ambiguous, it matches %2. +- FEHLER: Eigenschaft %1 ist uneindeutig, es passt zu %2. +- +- +- Attribute "%1" not found. +- Eigenschaft "%1" nicht gefunden. +- +- +- Entry's "%1" attribute copied to the clipboard! +- Eigenschaft "%1" des Eintrags wurde in die Zwischenablage kopiert! +- +- +- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). +- Yubikey-Slot und optional Seriennummer zum Zugriff auf die Datenbank (z.B. 1:7370001). +- +- +- slot[:serial] +- Slot[:Seriennummer] +- +- +- Target decryption time in MS for the database. +- Ziel-Entschlüsselungszeit in ms für die Datenbank. +- +- +- time +- Zeit +- +- +- Set the key file for the database. +- Schlüsseldatei für die Datenbank festlegen. +- +- +- Set a password for the database. +- Passwort für die Datenbank festlegen. +- +- +- Invalid decryption time %1. +- Ungültige Entschlüsselungszeit %1. +- +- +- Target decryption time must be between %1 and %2. +- Ziel-Entschlüsselungszeit muss zwischen %1 und %2 sein. +- +- +- Failed to set database password. +- Festlegen des Datenbank-Passworts fehlgeschlagen. +- +- +- Benchmarking key derivation function for %1ms delay. +- Messe Schlüssel-Ableitungsfunktion für %1ms Verzögerung. +- +- +- Setting %1 rounds for key derivation function. +- Stelle %1 Runden für Schlüssel-Ableitungsfunktion ein. +- +- +- error while setting database key derivation settings. +- Fehler beim Setzen der Datenbank-Schlüsselableitungs-Einstellungen. +- +- +- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. +- Zu benutzendes Format für den Export. Verfügbare Optionen sind 'xml' oder 'csv'. Standard ist 'xml'. +- +- +- Unable to import XML database: %1 +- Fehler beim Importieren der XML-Datenbank: %1 +- +- +- Show a database's information. +- Datenbankinformationen anzeigen. +- +- +- UUID: +- UUID: +- +- +- Name: +- Name: +- +- +- Description: +- Beschreibung: +- +- +- Cipher: +- Verschlüsselungsalgorithmus: +- +- +- KDF: +- KDF: +- +- +- Recycle bin is enabled. +- Papierkorb ist aktiviert. +- +- +- Recycle bin is not enabled. +- Papierkorb ist nicht aktiviert. +- +- +- Invalid command %1. +- Ungültiger Befehl %1. +- +- +- Invalid YubiKey serial %1 +- Ungültige YubiKey-Seriennummer %1 +- +- +- Please touch the button on your YubiKey to continue… +- Bitte drücken Sie die Taste an Ihrem YubiKey, um fortzufahren… +- +- +- Do you want to create a database with an empty password? [y/N]: +- Wollen Sie eine Datenbank mit einem leeren Passwort erstellen? [y/N]: +- +- +- Repeat password: +- Passwort wiederholen: +- +- +- Error: Passwords do not match. +- Fehler: Passwörter stimmen nicht überein. +- +- +- All clipping programs failed. Tried %1 +- +- Alle Clipping-Programme fehlgeschlagen. %1 versucht +- +- +- +- AES (%1 rounds) +- AES (%1 Runden) +- +- +- AES 256-bit +- AES 256-bit +- +- +- Twofish 256-bit +- Twofish 256-bit +- +- +- ChaCha20 256-bit +- ChaCha20: 256-bit {20 256-?} +- +- +- Benchmark %1 delay +- Verzögerung von %1 messen +- +- +- %1 ms +- milliseconds +- %1 ms%1 ms +- +- +- %1 s +- seconds +- %1 s%1 s +- +- +- path to a custom local config file +- Pfad zu einer benutzerdefinierten lokalen Konfigurationsdatei +- +- +- WARNING: You are using an old key file format which KeePassXC may +-stop supporting in the future. +- +-Please consider generating a new key file. +- WARNUNG: Sie verwenden ein altes Schlüsseldateiformat, das KeePassXC möglicherweise +-in Zukunft nicht mehr unterstützen wird. +- +-Bitte erwägen Sie, eine neue Schlüsseldatei zu erzeugen. +- +- +- Argon2%1 (%2 rounds, %3 KB) +- Argon2%1 (%2 Runden, %3 KB) +- +- +- Argon2d (KDBX 4 – recommended) +- Argon2d (KDBX 4 – empfohlen) +- +- +- Argon2id (KDBX 4) +- Argon2id (KDBX 4) +- +- +- TOTP +- TOTP +- +- +- Icon +- Symbol +- +- +- Unsupported key file version: %1 +- Nicht unterstützte Schlüsseldateiversion: %1 +- +- +- Checksum mismatch! Key file may be corrupt. +- Prüfsumme stimmt nicht überein! Die Schlüsseldatei ist möglicherweise beschädigt. +- +- +- Unexpected key file data! Key file may be corrupt. +- Unerwartete Schlüsseldateidaten! Die Schlüsseldatei ist möglicherweise beschädigt. +- +- +- +- QtIOCompressor +- +- Internal zlib error when compressing: +- Interner Fehler in zlib beim Komprimieren: +- +- +- Error writing to underlying device: +- Fehler beim Schreiben aufs Gerät: +- +- +- Error opening underlying device: +- Fehler beim Öffnen des Gerätes: +- +- +- Error reading data from underlying device: +- Fehler beim Lesen der Daten vom Gerät: +- +- +- Internal zlib error when decompressing: +- Interner Fehler in zlib beim Dekomprimieren: +- +- +- +- QtIOCompressor::open +- +- The gzip format not supported in this version of zlib. +- Das gzip-Format wird von dieser zlib-Version nicht unterstützt. +- +- +- Internal zlib error: +- Interner Fehler in zlib: +- +- +- +- ReportsWidgetHealthcheck +- +- Also show entries that have been excluded from reports +- Auch Einträge zeigen, die von Berichten ausgeschlossen wurden +- +- +- Hover over reason to show additional details. Double-click entries to edit. +- Für weitere Informationen mit der Maus über den Grund fahren. Doppelklick auf Einträge zum Bearbeiten. +- +- +- Bad +- Password quality +- Sehr schlecht +- +- +- Bad — password must be changed +- Sehr schlecht —Passwort muss geändert werden +- +- +- Poor +- Password quality +- Schlecht +- +- +- Poor — password should be changed +- Schlecht — Passwort sollte geändert werden +- +- +- Weak +- Password quality +- Schwach +- +- +- Weak — consider changing the password +- Schwach — Passwortänderung sollte erwägt werden +- +- +- (Excluded) +- (ausgeschlossen) +- +- +- This entry is being excluded from reports +- Dieser Eintrag wird von Berichten ausgeschlossen +- +- +- Please wait, health data is being calculated... +- Bitte warten, Gesundheitsdaten werden berechnet... +- +- +- Congratulations, everything is healthy! +- Glückwunsch, alles ist gesund! +- +- +- Title +- Titel +- +- +- Path +- Pfad +- +- +- Score +- Bewertung +- +- +- Reason +- Grund +- +- +- Edit Entry... +- Eintrag bearbeiten... +- +- +- Exclude from reports +- Von Berichten ausschließen +- +- +- +- ReportsWidgetHibp +- +- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. +- ACHTUNG: Dieser Bericht erfordert, dass Informationen an den "Have I Been Pwned"-Onlinedienst (https://haveibeenpwned.com) gesendet werden. Wenn Sie fortfahren, werden Ihre Datenbank-Passwörter kryptografisch gehasht, und die ersten fünf Zeichen dieser Hashes werden sicher an diesen Dienst übertragen. Ihre Datenbank bleibt sicher und kann nicht aus diesen Informationen rekonstruiert werden. Jedoch werden die Anzahl der gesendeten Passwörter und Ihre IP-Adresse dem Dienst offengelegt. +- +- +- Perform Online Analysis +- Online-Analyse durchführen +- +- +- Also show entries that have been excluded from reports +- Auch Einträge zeigen, die von Berichten ausgeschlossen wurden +- +- +- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. +- Dieser Build von KeePassXC hat keine Netzwerkfunktionalität. Diese ist erforderlich, um Ihre Passwörter gegen die Datenbanken von Have I Been Pwned zu überprüfen. +- +- +- Congratulations, no exposed passwords! +- Glückwunsch, keine offengelegten Passwörter! +- +- +- Title +- Titel +- +- +- Path +- Pfad +- +- +- Password exposed… +- Passwort offengelegt… +- +- +- (Excluded) +- (ausgeschlossen) +- +- +- This entry is being excluded from reports +- Dieser Eintrag wird von Berichten ausgeschlossen +- +- +- once +- einmal +- +- +- up to 10 times +- bis zu 10 Mal +- +- +- up to 100 times +- bis zu 100 Mal +- +- +- up to 1000 times +- bis zu 1000 Mal +- +- +- up to 10,000 times +- bis zu 10.000 Mal +- +- +- up to 100,000 times +- bis zu 100.000 Mal +- +- +- up to a million times +- bis zu einer Million Mal +- +- +- millions of times +- Millionen Mal +- +- +- Edit Entry... +- Eintrag bearbeiten... +- +- +- Exclude from reports +- Von Berichten ausschließen +- +- +- +- ReportsWidgetStatistics +- +- Hover over lines with error icons for further information. +- Fahren Sie für weitere Informationen mit der Maus über die Zeilen mit Fehlersymbolen. +- +- +- Name +- Name +- +- +- Value +- Wert +- +- +- Please wait, database statistics are being calculated... +- Bitte warten Sie, die Datenbank-Statistiken werden ermittelt ... +- +- +- Database name +- Name der Datenbank +- +- +- Description +- Beschreibung +- +- +- Location +- Speicherort +- +- +- Last saved +- Zuletzt gespeichert +- +- +- Unsaved changes +- Ungespeicherte Änderungen +- +- +- yes +- ja +- +- +- no +- nein +- +- +- The database was modified, but the changes have not yet been saved to disk. +- Die Datenbank wurde geändert, aber die Änderungen wurden noch nicht auf dem Datenträger gespeichert. +- +- +- Number of groups +- Anzahl der Gruppen +- +- +- Number of entries +- Anzahl der Einträge +- +- +- Number of expired entries +- Anzahl der abgelaufenen Einträge +- +- +- The database contains entries that have expired. +- Die Datenbank enthält abgelaufene Einträge. +- +- +- Unique passwords +- Einzigartige Passwörter +- +- +- Non-unique passwords +- Nicht einzigartige Passwörter +- +- +- More than 10% of passwords are reused. Use unique passwords when possible. +- Mehr als 10 % der Passwörter werden wiederverwendet. Verwenden Sie nach Möglichkeit einzigartige Passwörter. +- +- +- Maximum password reuse +- Maximale Wiederverwendung eines Passworts +- +- +- Some passwords are used more than three times. Use unique passwords when possible. +- Einige Passwörter werden mehr als dreimal verwendet. Verwenden Sie nach Möglichkeit einzigartige Passwörter. +- +- +- Number of short passwords +- Anzahl der kurzen Passwörter +- +- +- Recommended minimum password length is at least 8 characters. +- Empfohlene minimale Passwortlänge beträgt mindestens 8 Zeichen. +- +- +- Number of weak passwords +- Anzahl der schwachen Passwörter +- +- +- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. +- Die Verwendung langer, zufällig erzeugter Passwörter mit der Bewertung "gut" oder "hervorragend" wird empfohlen. +- +- +- Entries excluded from reports +- Von Berichten ausgeschlossene Einträge +- +- +- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. +- Das Ausschließen von Einträgen aus Berichten, z.B. weil sie bekannterweise schlechte Passwörter haben, ist nicht unbedingt ein Problem, aber Sie sollten ein Auge auf sie haben. +- +- +- Average password length +- Durchschnittliche Passwortlänge +- +- +- %1 characters +- %1 Zeichen +- +- +- Average password length is less than ten characters. Longer passwords provide more security. +- Die durchschnittliche Passwortlänge beträgt weniger als zehn Zeichen. Längere Passwörter bieten mehr Sicherheit. +- +- +- +- SSHAgent +- +- Agent connection failed. +- Agent-Verbindung fehlgeschlagen. +- +- +- Agent protocol error. +- Agent-Protokollfehler. +- +- +- No agent running, cannot add identity. +- Kein Agent ausgeführt, kann keine Identität hinzufügen. +- +- +- No agent running, cannot remove identity. +- Kein Agent ausgeführt, kann keine Identität entfernen. +- +- +- Agent refused this identity. Possible reasons include: +- Agent lehnt diese Identität ab. Mögliche Gründe sind: +- +- +- The key has already been added. +- Der Schlüssel wurde bereits hinzugefügt. +- +- +- Restricted lifetime is not supported by the agent (check options). +- Eingeschränkte Lebensdauer wird durch den Agenten nicht unterstützt (Optionen prüfen). +- +- +- A confirmation request is not supported by the agent (check options). +- Eine Bestätigungsanfrage wird durch den Agenten nicht unterstützt (Optionen prüfen). +- +- +- Key identity ownership conflict. Refusing to add. +- Konflikt beim Schlüssel-Identitäts-Besitz. Füge nicht hinzu. +- +- +- No agent running, cannot list identities. +- Kein Agent ausgeführt, kann keine Identitäten auflisten. +- +- +- +- SearchHelpWidget +- +- Search Help +- Hilfe durchsuchen +- +- +- Search terms are as follows: [modifiers][field:]["]term["] +- Suchbegriffe: [Modifikator][Feld:]["]Suchwort["] +- +- +- Every search term must match (ie, logical AND) +- Jeder Suchbegriff muss zutreffen (logisches UND) +- +- +- Modifiers +- Modifikatoren +- +- +- exclude term from results +- Ausdruck von Ergebnissen ausschließen +- +- +- match term exactly +- Exakter Ausdruck +- +- +- use regex in term +- Reguläre Ausdrücke benutzen +- +- +- Fields +- Felder +- +- +- Term Wildcards +- Platzhalter +- +- +- match anything +- Entspreche irgendwas +- +- +- match one +- Entspreche einem +- +- +- logical OR +- logisches ODER +- +- +- Examples +- Beispiele +- +- +- +- SearchWidget +- +- Search +- Suche +- +- +- Limit search to selected group +- Suche auf ausgewählte Gruppe beschränken +- +- +- Search Help +- Hilfe durchsuchen +- +- +- Search (%1)... +- Search placeholder text, %1 is the keyboard shortcut +- Suchen (%1) … +- +- +- Case sensitive +- Groß-/Kleinschreibung beachten +- +- +- +- SettingsWidgetFdoSecrets +- +- Options +- Optionen +- +- +- Enable KeepassXC Freedesktop.org Secret Service integration +- KeepassXC-Freedesktop.org-Secret-Service-Integration aktivieren +- +- +- General +- Allgemein +- +- +- Show notification when credentials are requested +- Benachrichtigung anzeigen, wenn Anmeldedaten angefragt werden +- +- +- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> +- <html><head/><body><p>Wenn der Papierkorb für diese Datenbank aktiviert ist, werden Einträge direkt in den Papierkorb verschoben. Ansonsten werden sie ohne Nachfragen gelöscht.</p><p>Sie erhalten eine Meldung, wenn irgendwelche Einträge von anderen referenziert werden.</p></body></html> +- +- +- Exposed database groups: +- Offengelegte Datenbankgruppen: +- +- +- Authorization +- Authorisierung +- +- +- These applications are currently connected: +- Diese Anwendungen sind derzeit verbunden: +- +- +- Don't confirm when entries are deleted by clients +- Nicht bestätigen, wenn Einträge von Clients gelöscht werden +- +- +- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. +- <b>Fehler:</b> Konnte nicht mit DBus verbinden. Bitte überprüfen Sie Ihr DBus-Setup. +- +- +- <b>Warning:</b> +- <b>Warnung:</b> +- +- +- Save current changes to activate the plugin and enable editing of this section. +- Speichern Sie die aktuellen Änderungen, um das Plugin und das Anpassen dieses Abschnitts zu aktivieren. +- +- +- +- SettingsWidgetKeeShare +- +- Active +- Aktiv +- +- +- Allow export +- Export aktivieren +- +- +- Allow import +- Import aktivieren +- +- +- Own certificate +- Eigenes Zertifikat +- +- +- Fingerprint: +- Fingerabdruck: +- +- +- Certificate: +- Zertifikat: +- +- +- Signer +- Unterzeichner: +- +- +- Key: +- Schlüssel: +- +- +- Generate +- Erzeugen +- +- +- Import +- Importieren +- +- +- Export +- Export +- +- +- Imported certificates +- Importierte Zertifikate +- +- +- Trust +- Vertrauen +- +- +- Ask +- Fragen +- +- +- Untrust +- Nicht vertrauen +- +- +- Remove +- Entfernen +- +- +- Path +- Pfad +- +- +- Status +- Status +- +- +- Fingerprint +- Fingerabdruck +- +- +- Certificate +- Zertifikat +- +- +- Trusted +- Vertraut +- +- +- Untrusted +- Nicht vertraut +- +- +- Unknown +- Unbekannt +- +- +- key.share +- Filetype for KeeShare key +- key.share +- +- +- KeeShare key file +- KeeShare-Schlüsseldatei +- +- +- All files +- Alle Dateien +- +- +- Select path +- Pfad auswählen +- +- +- Exporting changed certificate +- Geändertes Zertifikat exportieren +- +- +- The exported certificate is not the same as the one in use. Do you want to export the current certificate? +- Das exportierte Zertifikat ist nicht das selbe wie das benutzte. Soll das aktuelle Zertifikat exportiert werden? +- +- +- Signer: +- Unterzeichner: +- +- +- Allow KeeShare imports +- KeeShare-Importe erlauben +- +- +- Allow KeeShare exports +- KeeShare-Exporte erlauben +- +- +- Only show warnings and errors +- Nur Warnungen und Fehler anzeigen +- +- +- Key +- Schlüssel +- +- +- Signer name field +- Unterzeichner-Namensfeld +- +- +- Generate new certificate +- Neues Zertifikat erzeugen +- +- +- Import existing certificate +- Existierendes Zertifikat importieren +- +- +- Export own certificate +- Eigenes Zertifikat exportieren +- +- +- Known shares +- Bekannte Freigaben +- +- +- Trust selected certificate +- Ausgewähltem Zertifikat vertrauen +- +- +- Ask whether to trust the selected certificate every time +- Jedes Mal nach Vertrauen für dieses Zertifikat fragen +- +- +- Untrust selected certificate +- Ausgewähltem Zertifikat nicht vertrauen +- +- +- Remove selected certificate +- Ausgewähltes Zertifikat entfernen +- +- +- +- ShareExport +- +- Overwriting signed share container is not supported - export prevented +- Ãœberschreiben von signierten geteilten Containern nicht unterstützt - Export verhindert +- +- +- Could not write export container (%1) +- Export-Container (%1) kann nicht gespeichert werden +- +- +- Could not embed signature: Could not open file to write (%1) +- Signatur kann nicht eingebunden werden: Datei kann nicht zum Schreiben geöffnet werden (%1) +- +- +- Could not embed signature: Could not write file (%1) +- Signatur kann nicht eingebunden werden: Datei kann nicht geschrieben werden (%1) +- +- +- Could not embed database: Could not open file to write (%1) +- Datenbank kann nicht eingebunden werden: Datei kann nicht zum Schreiben geöffnet werden (%1) +- +- +- Could not embed database: Could not write file (%1) +- Datenbank kann nicht eingebunden werden: Datei kann nicht geschrieben werden (%1) +- +- +- Overwriting unsigned share container is not supported - export prevented +- Ãœberschreiben von nicht signierten geteilten Containern nicht unterstützt - Export verhindert +- +- +- Could not write export container +- Export-Container kann nicht gespeichert werden +- +- +- Unexpected export error occurred +- Unerwarteter Fehler beim Export +- +- +- +- ShareImport +- +- Import from container without signature +- Von Container ohne Signatur importieren +- +- +- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? +- Die Quelle des geteilten Containers kann wegen einer fehlenden Unterschrift nicht verifiziert werden. Soll wirklich aus %1 importiert werden? +- +- +- Import from container with certificate +- Von Container mit Zertifikat importieren +- +- +- Do you want to trust %1 with the fingerprint of %2 from %3? +- Möchten Sie %1 mit dem Fingerabdruck %2 von %3 vertrauen? {1 ?} {2 ?} +- +- +- Not this time +- Nicht diesmal +- +- +- Never +- Nie +- +- +- Always +- Immer +- +- +- Just this time +- Nur diesmal +- +- +- Signed share container are not supported - import prevented +- Unterzeichnete geteilte Container werden nicht unterstützt - Import verhindert +- +- +- File is not readable +- Datei ist nicht lesbar +- +- +- Invalid sharing container +- Ungültiger geteilter Container +- +- +- Untrusted import prevented +- Unvertrauter Import verhindet +- +- +- Successful signed import +- Erfolgreich signierter Import +- +- +- Unsigned share container are not supported - import prevented +- Nicht signierte geteilte Container werden nicht unterstützt - Import verhindert +- +- +- Successful unsigned import +- Erfolgreich signierter Import +- +- +- File does not exist +- Datei existiert nicht +- +- +- Unknown share container type +- Unbekannter geteilter Containertyp +- +- +- +- ShareObserver +- +- Import from %1 failed (%2) +- Import von %1 fehlgeschlagen (%2) +- +- +- Import from %1 successful (%2) +- Import von %1 erfolgreich (%2) +- +- +- Imported from %1 +- Importiert aus %1 +- +- +- Export to %1 failed (%2) +- Export in %1 fehlgeschlagen (%2) +- +- +- Export to %1 successful (%2) +- Export in %1 erfolgreich (%2) +- +- +- Export to %1 +- Export in %1 +- +- +- Multiple import source path to %1 in %2 +- Multipler Import-Quellpfad zu %1 in %2 +- +- +- Conflicting export target path %1 in %2 +- Konflikt beim Export-Zielpfad %1 in %2 +- +- +- +- TotpDialog +- +- Timed Password +- Zeitbasiertes Passwort +- +- +- 000000 +- 000000 +- +- +- Copy +- Kopieren +- +- +- Expires in <b>%n</b> second(s) +- Läuft in <b>%n</b> Sekunde(n) abLäuft in <b>%n</b> Sekunde(n) ab +- +- +- +- TotpExportSettingsDialog +- +- Copy +- Kopieren +- +- +- NOTE: These TOTP settings are custom and may not work with other authenticators. +- TOTP QR code dialog warning +- Anmerkung: Diese speziellen TOTP-Einstellungen könnten nicht mit anderen Authentifikatoren funktionieren. +- +- +- There was an error creating the QR code. +- QR-Code konnte nicht erstellt werden. +- +- +- Closing in %1 seconds. +- Wird in %1 Sekunde(n) geschlossen. +- +- +- +- TotpSetupDialog +- +- Setup TOTP +- TOTP einrichten +- +- +- Default RFC 6238 token settings +- RFC 6238-Token-Standardeinstellungen +- +- +- Steam token settings +- Steam-Tokeneinstellungen +- +- +- Use custom settings +- Verwende eigene Einstellungen +- +- +- Custom Settings +- Eigene Einstellungen +- +- +- Time step: +- Zeitschritt: +- +- +- sec +- Seconds +- sek +- +- +- Code size: +- Codelänge: +- +- +- Secret Key: +- Geheimer Schlüssel: +- +- +- Secret key must be in Base32 format +- Der geheime Schlüssel muss im Base32-Format vorliegen. +- +- +- Secret key field +- Feld für geheimen Schlüssel +- +- +- Algorithm: +- Algorithmus: +- +- +- Time step field +- Zeitschritt-Feld +- +- +- digits +- Ziffern +- +- +- Invalid TOTP Secret +- Ungültiges Einmalpasswort (TOTP) +- +- +- You have entered an invalid secret key. The key must be in Base32 format. +-Example: JBSWY3DPEHPK3PXP +- Sie haben einen ungültigen geheimen Schlüssel angegeben. Der Schlüssel muss im Base32-Format sein. Beispiel: JBSWY3DPEHPK3PXP +- +- +- Confirm Remove TOTP Settings +- Löschen der TOTP-Einstellungen bestätigen +- +- +- Are you sure you want to delete TOTP settings for this entry? +- Möchten Sie die TOTP-Einstellungen für diesen Eintrag wirklich löschen? +- +- +- +- URLEdit +- +- Invalid URL +- Ungültige URL +- +- +- +- UpdateCheckDialog +- +- Checking for updates +- Nach Updates suchen +- +- +- Checking for updates... +- Nach Updates suchen ... +- +- +- Close +- Schließen +- +- +- Update Error! +- Fehler beim Update +- +- +- An error occurred in retrieving update information. +- Bei der Updatesuche ist ein Fehler aufgetreten +- +- +- Please try again later. +- Bitte später noch einmal probieren. +- +- +- Software Update +- Softwareupdate +- +- +- A new version of KeePassXC is available! +- Eine neue Version von KeePassXC ist verfügbar! +- +- +- KeePassXC %1 is now available — you have %2. +- KeepassXC %1 ist jetzt verfügbar — Sie haben %2. +- +- +- Download it at keepassxc.org +- Herunterladen auf keepassxc.org +- +- +- You're up-to-date! +- Version ist aktuell +- +- +- KeePassXC %1 is currently the newest version available +- Version %1 ist die aktuellste Version. +- +- +- +- WelcomeWidget +- +- Start storing your passwords securely in a KeePassXC database +- Speichern Sie Ihre Passwörter sicher in einer KeePassXC-Datenbank +- +- +- Create new database +- Neue Datenbank erstellen +- +- +- Open existing database +- Existierende Datenbank öffnen +- +- +- Import from KeePass 1 +- Aus KeePass 1 importieren +- +- +- Import from CSV +- Aus CSV importieren +- +- +- Recent databases +- Zuletzt verwendete Datenbanken +- +- +- Welcome to KeePassXC %1 +- Willkommen bei KeePassXC %1 +- +- +- Import from 1Password +- Von 1Password importieren +- +- +- Open a recent database +- Kürzlich verwendete Datenbank öffnen +- +- +- +- YubiKey +- +- %1 [%2] Configured Slot - %3 +- %1 [%2] Konfigurierter Slot - %3 +- +- +- %1 [%2] Challenge Response - Slot %3 - %4 +- %1 [%2] Challenge-Response - Slot %3 - %4 +- +- +- Press +- Aktiver Button +- +- +- Passive +- Passiv +- +- +- %1 Invalid slot specified - %2 +- %1 Ungültiger Slot spezifiziert - %2 +- +- +- The YubiKey interface has not been initialized. +- Das YubiKey-Interface wurde nicht initialisiert. +- +- +- Hardware key is currently in use. +- Der Hardwareschlüssel wird gerade verwendet. +- +- +- Could not find hardware key with serial number %1. Please plug it in to continue. +- Hardwareschlüssel mit Seriennummer %1 konnte nicht gefunden werden. Bitte schließen Sie ihn an, um fortzufahren. +- +- +- Hardware key timed out waiting for user interaction. +- Der Hardwareschlüssel hatte eine Zeitüberschreitung beim Warten auf Nutzerinteraktion. +- +- +- A USB error ocurred when accessing the hardware key: %1 +- Beim Zugriff auf den Hardwareschlüssel ist ein USB-Fehler aufgetreten: %1 +- +- +- Failed to complete a challenge-response, the specific error was: %1 +- Abschluss von Challenge-Response ist fehlgeschlagen, der spezifische Fehler war: %1 +- +- +- +- YubiKeyEditWidget +- +- Refresh +- Neu laden +- +- +- YubiKey Challenge-Response +- YubiKey Challenge-Response +- +- +- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- <p>Ein <a href="https://www.yubico.com/">YubiKey</a> kann für zusätzliche Sicherheit sorgen.</p><p>Der YubiKey muss in einem Slot das Verfahren <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Reponse</a> gesetzt haben.</p> +- +- +- Refresh hardware tokens +- Hardware-Token aktualisieren +- +- +- Hardware key slot selection +- Auswahl des Hardwareschlüssel-Slots +- +- +- Could not find any hardware keys! +- Konnte keine Hardwareschlüssel finden! +- +- +- Selected hardware key slot does not support challenge-response! +- Ausgewählter Hardwareschlüssel-Slot unterstützt nicht Challenge-Response! +- +- +- Detecting hardware keys… +- Hardwareschlüssel werden erkannt… +- +- +- No hardware keys detected +- Keine Hardwareschlüssel erkannt +- +- +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_en_GB.ts keepassxc-2.6.4-patched/share/translations/keepassx_en_GB.ts +--- keepassxc-2.6.4-orig/share/translations/keepassx_en_GB.ts 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/translations/keepassx_en_GB.ts 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7860 +0,0 @@ +- +- +- AboutDialog +- +- About KeePassXC +- About KeePassXC +- +- +- About +- About +- +- +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- +- +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- +- +- Contributors +- Contributors +- +- +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- +- +- Debug Info +- Debug Info +- +- +- Include the following information whenever you report a bug: +- Include the following information whenever you report a bug: +- +- +- Copy to clipboard +- Copy to clipboard +- +- +- Project Maintainers: +- Project Maintainers: +- +- +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- +- +- +- AgentSettingsWidget +- +- Use OpenSSH for Windows instead of Pageant +- Use OpenSSH for Windows instead of Pageant +- +- +- Enable SSH Agent integration +- Enable SSH Agent integration +- +- +- SSH_AUTH_SOCK value +- SSH_AUTH_SOCK value +- +- +- SSH_AUTH_SOCK override +- SSH_AUTH_SOCK override +- +- +- (empty) +- (empty) +- +- +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- +- +- SSH Agent connection is working! +- SSH Agent connection is working! +- +- +- +- ApplicationSettingsWidget +- +- Application Settings +- Application Settings +- +- +- General +- General +- +- +- Security +- Security +- +- +- Access error for config file %1 +- Access error for config file %1 +- +- +- Icon only +- Icon only +- +- +- Text only +- Text only +- +- +- Text beside icon +- Text beside icon +- +- +- Text under icon +- Text under icon +- +- +- Follow style +- Follow style +- +- +- Reset Settings? +- Reset Settings? +- +- +- Are you sure you want to reset all general and security settings to default? +- Are you sure you want to reset all general and security settings to default? +- +- +- Monochrome (light) +- Monochrome (light) +- +- +- Monochrome (dark) +- Monochrome (dark) +- +- +- Colorful +- Colourful +- +- +- You must restart the application to set the new language. Would you like to restart now? +- You must restart the application to set the new language. Would you like to restart now? +- +- +- +- ApplicationSettingsWidgetGeneral +- +- Basic Settings +- Basic Settings +- +- +- Startup +- Startup +- +- +- Start only a single instance of KeePassXC +- Start only a single instance of KeePassXC +- +- +- Minimize window at application startup +- Minimise window at application startup +- +- +- File Management +- File Management +- +- +- Backup database file before saving +- Backup database file before saving +- +- +- Automatically save after every change +- Automatically save after every change +- +- +- Automatically reload the database when modified externally +- Automatically reload the database when modified externally +- +- +- Entry Management +- Entry Management +- +- +- Use group icon on entry creation +- Use group icon on entry creation +- +- +- Minimize instead of app exit +- Minimise instead of app exit +- +- +- Show a system tray icon +- Show a system tray icon +- +- +- Hide window to system tray when minimized +- Hide window to system tray when minimised +- +- +- Auto-Type +- Auto-Type +- +- +- Use entry title to match windows for global Auto-Type +- Use entry title to match windows for global Auto-Type +- +- +- Use entry URL to match windows for global Auto-Type +- Use entry URL to match windows for global Auto-Type +- +- +- Always ask before performing Auto-Type +- Always ask before performing Auto-Type +- +- +- ms +- Milliseconds +- ms +- +- +- Movable toolbar +- Movable toolbar +- +- +- Remember previously used databases +- Remember previously used databases +- +- +- Load previously open databases on startup +- Load previously open databases on startup +- +- +- Remember database key files and security dongles +- Remember database key files and security dongles +- +- +- Check for updates at application startup once per week +- Check for updates at application startup once per week +- +- +- Include beta releases when checking for updates +- Include beta releases when checking for updates +- +- +- Language: +- Language: +- +- +- (restart program to activate) +- (restart program to activate) +- +- +- Minimize window after unlocking database +- Minimise window after unlocking database +- +- +- Minimize when opening a URL +- Minimise when opening a URL +- +- +- Hide window when copying to clipboard +- Hide window when copying to clipboard +- +- +- Minimize +- Minimise +- +- +- Drop to background +- Drop to background +- +- +- Favicon download timeout: +- Favicon download timeout: +- +- +- Website icon download timeout in seconds +- Website icon download timeout in seconds +- +- +- sec +- Seconds +- sec +- +- +- Toolbar button style +- Toolbar button style +- +- +- Language selection +- Language selection +- +- +- Global auto-type shortcut +- Global auto-type shortcut +- +- +- Auto-type character typing delay milliseconds +- Auto-type character typing delay milliseconds +- +- +- Auto-type start delay milliseconds +- Auto-type start delay milliseconds +- +- +- Automatically launch KeePassXC at system startup +- Automatically launch KeePassXC at system startup +- +- +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- +- +- User Interface +- User Interface +- +- +- Toolbar button style: +- Toolbar button style: +- +- +- Use monospaced font for notes +- Use monospaced font for notes +- +- +- Tray icon type: +- Tray icon type: +- +- +- Reset settings to default… +- Reset settings to default… +- +- +- Auto-Type typing delay: +- Auto-Type typing delay: +- +- +- Global Auto-Type shortcut: +- Global Auto-Type shortcut: +- +- +- Auto-Type start delay: +- Auto-Type start delay: +- +- +- Automatically save when locking database +- Automatically save when locking database +- +- +- Automatically save non-data changes when locking database +- Automatically save non-data changes when locking database +- +- +- Tray icon type +- Tray icon type +- +- +- +- ApplicationSettingsWidgetSecurity +- +- Timeouts +- Timeouts +- +- +- Clear clipboard after +- Clear clipboard after +- +- +- sec +- Seconds +- sec +- +- +- Lock databases after inactivity of +- Lock databases after inactivity of +- +- +- min +- min +- +- +- Forget TouchID after inactivity of +- Forget TouchID after inactivity of +- +- +- Convenience +- Convenience +- +- +- Lock databases when session is locked or lid is closed +- Lock databases when session is locked or lid is closed +- +- +- Forget TouchID when session is locked or lid is closed +- Forget TouchID when session is locked or lid is closed +- +- +- Lock databases after minimizing the window +- Lock databases after minimising the window +- +- +- Re-lock previously locked database after performing Auto-Type +- Re-lock previously locked database after performing Auto-Type +- +- +- Hide passwords in the entry preview panel +- Hide passwords in the entry preview panel +- +- +- Hide entry notes by default +- Hide entry notes by default +- +- +- Privacy +- Privacy +- +- +- Use DuckDuckGo service to download website icons +- Use DuckDuckGo service to download website icons +- +- +- Clipboard clear seconds +- Clipboard clear seconds +- +- +- Touch ID inactivity reset +- Touch ID inactivity reset +- +- +- Database lock timeout seconds +- Database lock timeout seconds +- +- +- min +- Minutes +- min +- +- +- Clear search query after +- Clear search query after +- +- +- Require password repeat when it is visible +- Require password repeat when it is visible +- +- +- Hide passwords when editing them +- Hide passwords when editing them +- +- +- Use placeholder for empty password fields +- Use placeholder for empty password fields +- +- +- +- AutoType +- +- Couldn't find an entry that matches the window title: +- Couldn't find an entry that matches the window title: +- +- +- Auto-Type - KeePassXC +- Auto-Type - KeePassXC +- +- +- Auto-Type +- Auto-Type +- +- +- The Syntax of your Auto-Type statement is incorrect! +- The Syntax of your Auto-Type statement is incorrect! +- +- +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- +- +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- +- +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- +- +- Permission Required +- Permission Required +- +- +- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. +- +- +- +- AutoTypeAssociationsModel +- +- Window +- Window +- +- +- Sequence +- Sequence +- +- +- Default sequence +- Default sequence +- +- +- +- AutoTypeMatchModel +- +- Group +- Group +- +- +- Title +- Title +- +- +- Username +- Username +- +- +- Sequence +- Sequence +- +- +- +- AutoTypeMatchView +- +- Copy &username +- Copy &username +- +- +- Copy &password +- Copy &password +- +- +- +- AutoTypePlatformMac +- +- Permission Required +- Permission Required +- +- +- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. +- +- +- +- AutoTypeSelectDialog +- +- Auto-Type - KeePassXC +- Auto-Type - KeePassXC +- +- +- Select entry to Auto-Type: +- Select entry to Auto-Type: +- +- +- Search... +- Search... +- +- +- +- BrowserAccessControlDialog +- +- KeePassXC - Browser Access Request +- KeePassXC - Browser Access Request +- +- +- %1 is requesting access to the following entries: +- %1 is requesting access to the following entries: +- +- +- Remember access to checked entries +- Remember access to checked entries +- +- +- Remember +- Remember +- +- +- Allow access to entries +- Allow access to entries +- +- +- Allow Selected +- Allow Selected +- +- +- Deny All +- Deny All +- +- +- Disable for this site +- Disable for this site +- +- +- +- BrowserEntrySaveDialog +- +- KeePassXC-Browser Save Entry +- KeePassXC-Browser Save Entry +- +- +- Ok +- Ok +- +- +- Cancel +- Cancel +- +- +- You have multiple databases open. +-Please select the correct database for saving credentials. +- You have multiple databases open. +-Please select the correct database for saving credentials. +- +- +- +- BrowserService +- +- KeePassXC: New key association request +- KeePassXC: New key association request +- +- +- Save and allow access +- Save and allow access +- +- +- KeePassXC: Overwrite existing key? +- KeePassXC: Overwrite existing key? +- +- +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- +- +- KeePassXC: Update Entry +- KeePassXC: Update Entry +- +- +- Do you want to update the information in %1 - %2? +- Do you want to update the information in %1 - %2? +- +- +- Abort +- Abort +- +- +- Converting attributes to custom data… +- Converting attributes to custom data… +- +- +- KeePassXC: Converted KeePassHTTP attributes +- KeePassXC: Converted KeePassHTTP attributes +- +- +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- +- +- Successfully moved %n keys to custom data. +- Successfully moved %n key to custom data.Successfully moved %n keys to custom data. +- +- +- KeePassXC: No entry with KeePassHTTP attributes found! +- KeePassXC: No entry with KeePassHTTP attributes found! +- +- +- The active database does not contain an entry with KeePassHTTP attributes. +- The active database does not contain an entry with KeePassHTTP attributes. +- +- +- KeePassXC: Legacy browser integration settings detected +- KeePassXC: Legacy browser integration settings detected +- +- +- KeePassXC: Create a new group +- KeePassXC: Create a new group +- +- +- A request for creating a new group "%1" has been received. +-Do you want to create this group? +- +- A request for creating a new group "%1" has been received. +-Do you want to create this group? +- +- +- +- Your KeePassXC-Browser settings need to be moved into the database settings. +-This is necessary to maintain your current browser connections. +-Would you like to migrate your existing settings now? +- Your KeePassXC-Browser settings need to be moved into the database settings. +-This is necessary to maintain your current browser connections. +-Would you like to migrate your existing settings now? +- +- +- Don't show this warning again +- Don't show this warning again +- +- +- You have received an association request for the following database: +-%1 +- +-Give the connection a unique name or ID, for example: +-chrome-laptop. +- You have received an association request for the following database: +-%1 +- +-Give the connection a unique name or ID, for example: +-chrome-laptop. +- +- +- +- BrowserSettingsWidget +- +- Dialog +- Dialog +- +- +- This is required for accessing your databases with KeePassXC-Browser +- This is required for accessing your databases with KeePassXC-Browser +- +- +- Enable browser integration +- Enable browser integration +- +- +- General +- General +- +- +- Browsers installed as snaps are currently not supported. +- Browsers installed as snaps are currently not supported. +- +- +- Enable integration for these browsers: +- Enable integration for these browsers: +- +- +- Vivaldi +- Vivaldi +- +- +- &Edge +- &Edge +- +- +- Firefox +- Firefox +- +- +- Tor Browser +- Tor Browser +- +- +- Brave +- Brave +- +- +- Google Chrome +- Google Chrome +- +- +- Chromium +- Chromium +- +- +- Show a notification when credentials are requested +- Credentials mean login data requested via browser extension +- Show a notification when credentials are requested +- +- +- Request to unlock the database if it is locked +- Request to unlock the database if it is locked +- +- +- Only entries with the same scheme (http://, https://, ...) are returned. +- Only entries with the same scheme (http://, https://, ...) are returned. +- +- +- Match URL scheme (e.g., https://...) +- Match URL scheme (e.g., https://...) +- +- +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- +- +- Return only best-matching credentials +- Return only best-matching credentials +- +- +- Returns expired credentials. String [expired] is added to the title. +- +- +- +- Allow returning expired credentials +- +- +- +- All databases connected to the extension will return matching credentials. +- +- +- +- Search in all opened databases for matching credentials +- Credentials mean login data requested via browser extension +- +- +- +- Sort matching credentials by title +- Credentials mean login data requested via browser extension +- +- +- +- Sort matching credentials by username +- Credentials mean login data requested via browser extension +- +- +- +- Advanced +- Advanced +- +- +- Never ask before accessing credentials +- Credentials mean login data requested via browser extension +- +- +- +- Never ask before updating credentials +- Credentials mean login data requested via browser extension +- +- +- +- Do not ask permission for HTTP Basic Auth +- An extra HTTP Basic Auth setting +- Do not ask permission for HTTP Basic Auth +- +- +- Automatically creating or updating string fields is not supported. +- Automatically creating or updating string fields is not supported. +- +- +- Return advanced string fields which start with "KPH: " +- +- +- +- Don't display the popup suggesting migration of legacy KeePassHTTP settings. +- +- +- +- Do not prompt for KeePassHTTP settings migration. +- +- +- +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- +- +- Update native messaging manifest files at startup +- +- +- +- Use a custom proxy location if you installed a proxy manually. +- Use a custom proxy location if you installed a proxy manually. +- +- +- Use a custom proxy location: +- Meant is the proxy for KeePassXC-Browser +- +- +- +- Custom proxy location field +- +- +- +- Browser for custom proxy file +- +- +- +- Browse... +- Button for opening file dialog +- Browse... +- +- +- Use a custom browser configuration location: +- +- +- +- Browser type: +- +- +- +- Toolbar button style +- Toolbar button style +- +- +- Config Location: +- +- +- +- Custom browser location field +- +- +- +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- +- +- Browse for custom browser path +- +- +- +- Custom extension ID: +- +- +- +- Custom extension ID +- +- +- +- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 +- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 +- +- +- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 +- +- +- +- Please see special instructions for browser extension use below +- Please see special instructions for browser extension use below +- +- +- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. +- +- +- +- <b>Warning:</b> The following options can be dangerous! +- <b>Warning:</b> The following options can be dangerous! +- +- +- Executable Files +- Executable Files +- +- +- All Files +- All Files +- +- +- Select custom proxy location +- Select custom proxy location +- +- +- Select native messaging host folder location +- +- +- +- +- CloneDialog +- +- Clone Options +- Clone Options +- +- +- Append ' - Clone' to title +- Append ' - Clone' to title +- +- +- Replace username and password with references +- Replace username and password with references +- +- +- Copy history +- Copy history +- +- +- +- CsvImportWidget +- +- Import CSV fields +- Import CSV fields +- +- +- filename +- filename +- +- +- size, rows, columns +- size, rows, columns +- +- +- Encoding +- Encoding +- +- +- Codec +- Codec +- +- +- Text is qualified by +- Text is qualified by +- +- +- Fields are separated by +- Fields are separated by +- +- +- Comments start with +- Comments start with +- +- +- Consider '\' an escape character +- Consider '\' an escape character +- +- +- Preview +- Preview +- +- +- Imported from CSV file +- Imported from CSV file +- +- +- Original data: +- Original data: +- +- +- Error +- Error +- +- +- Error(s) detected in CSV file! +- Error(s) detected in CSV file! +- +- +- [%n more message(s) skipped] +- [%n more message skipped][%n more messages skipped] +- +- +- CSV import: writer has errors: +-%1 +- CSV import: writer has errors: +-%1 +- +- +- Text qualification +- +- +- +- Field separation +- +- +- +- Number of header lines to discard +- +- +- +- CSV import preview +- +- +- +- Column Association +- +- +- +- Last Modified +- +- +- +- Password +- Password +- +- +- Created +- Created +- +- +- Notes +- Notes +- +- +- Title +- Title +- +- +- Group +- Group +- +- +- URL +- URL +- +- +- Username +- Username +- +- +- Header lines skipped +- +- +- +- First line has field names +- +- +- +- Not Present +- +- +- +- Column %1 +- +- +- +- TOTP +- TOTP +- +- +- Icon +- Icon +- +- +- +- CsvParserModel +- +- %n column(s) +- %n column%n columns +- +- +- %1, %2, %3 +- file info: bytes, rows, columns +- %1, %2, %3 +- +- +- %n byte(s) +- %n byte%n bytes +- +- +- %n row(s) +- %n row%n rows +- +- +- +- Database +- +- File %1 does not exist. +- File %1 does not exist. +- +- +- Unable to open file %1. +- Unable to open file %1. +- +- +- Error while reading the database: %1 +- Error while reading the database: %1 +- +- +- File cannot be written as it is opened in read-only mode. +- File cannot be written as it is opened in read-only mode. +- +- +- Key not transformed. This is a bug, please report it to the developers! +- Key not transformed. This is a bug, please report it to the developers! +- +- +- %1 +-Backup database located at %2 +- +- +- +- Could not save, database does not point to a valid file. +- +- +- +- Could not save, database file is read-only. +- +- +- +- Database file has unmerged changes. +- +- +- +- Recycle Bin +- Recycle Bin +- +- +- Passwords +- Root group name +- Passwords +- +- +- Database save is already in progress. +- +- +- +- Could not save, database has not been initialized! +- Could not save, database has not been initialised! +- +- +- +- DatabaseOpenDialog +- +- Unlock Database - KeePassXC +- Unlock Database - KeePassXC +- +- +- +- DatabaseOpenWidget +- +- Key File: +- Key File: +- +- +- Refresh +- Refresh +- +- +- Don't show this warning again +- Don't show this warning again +- +- +- All files +- All files +- +- +- Key files +- Key files +- +- +- Select key file +- Select key file +- +- +- Failed to open key file: %1 +- +- +- +- Unlock KeePassXC Database +- +- +- +- Enter Password: +- +- +- +- Password field +- +- +- +- Hardware key slot selection +- +- +- +- Browse for key file +- +- +- +- Browse... +- Browse... +- +- +- Refresh hardware tokens +- +- +- +- Hardware Key: +- +- +- +- Hardware key help +- +- +- +- TouchID for Quick Unlock +- +- +- +- Unlock failed and no password given +- +- +- +- Unlocking the database failed and you did not enter a password. +-Do you want to retry with an "empty" password instead? +- +-To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. +- +- +- +- Retry with empty password +- +- +- +- Enter Additional Credentials (if any): +- +- +- +- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +-<p>Click for more information...</p> +- +- +- +- Key file help +- +- +- +- ? +- +- +- +- Cannot use database file as key file +- +- +- +- You cannot use your database file as a key file. +-If you do not have a key file, please leave the field empty. +- +- +- +- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> +- +- +- +- Key file to unlock the database +- +- +- +- Please touch the button on your YubiKey! +- Please touch the button on your YubiKey! +- +- +- Detecting hardware keys… +- +- +- +- No hardware keys detected +- +- +- +- Select hardware key… +- +- +- +- Old key file format +- +- +- +- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> +- +- +- +- +- DatabaseSettingWidgetMetaData +- +- Passwords +- Passwords +- +- +- +- DatabaseSettingsDialog +- +- Advanced Settings +- Advanced Settings +- +- +- General +- General +- +- +- Security +- Security +- +- +- Encryption Settings +- Encryption Settings +- +- +- Browser Integration +- Browser Integration +- +- +- Database Credentials +- +- +- +- +- DatabaseSettingsWidgetBrowser +- +- KeePassXC-Browser settings +- KeePassXC-Browser settings +- +- +- Stored keys +- Stored keys +- +- +- Remove +- Remove +- +- +- Delete the selected key? +- Delete the selected key? +- +- +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- +- +- Key +- Key +- +- +- Value +- Value +- +- +- Enable Browser Integration to access these settings. +- Enable Browser Integration to access these settings. +- +- +- Disconnect all browsers +- Disconnect all browsers +- +- +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- +- +- KeePassXC: No keys found +- KeePassXC: No keys found +- +- +- No shared encryption keys found in KeePassXC settings. +- No shared encryption keys found in KeePassXC settings. +- +- +- KeePassXC: Removed keys from database +- KeePassXC: Removed keys from database +- +- +- Successfully removed %n encryption key(s) from KeePassXC settings. +- Successfully removed %n encryption key from KeePassXC settings.Successfully removed %n encryption keys from KeePassXC settings. +- +- +- Forget all site-specific settings on entries +- Forget all site-specific settings on entries +- +- +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- +- +- Removing stored permissions… +- Removing stored permissions… +- +- +- Abort +- Abort +- +- +- KeePassXC: Removed permissions +- KeePassXC: Removed permissions +- +- +- Successfully removed permissions from %n entry(s). +- Successfully removed permissions from %n entry.Successfully removed permissions from %n entries. +- +- +- KeePassXC: No entry with permissions found! +- KeePassXC: No entry with permissions found! +- +- +- The active database does not contain an entry with permissions. +- The active database does not contain an entry with permissions. +- +- +- Move KeePassHTTP attributes to custom data +- Move KeePassHTTP attributes to custom data +- +- +- Do you really want to move all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- Do you really want to move all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- +- +- Stored browser keys +- +- +- +- Remove selected key +- +- +- +- Move KeePassHTTP attributes to KeePassXC-Browser custom data +- +- +- +- Refresh database root group ID +- +- +- +- Created +- Created +- +- +- Refresh database ID +- +- +- +- Do you really want refresh the database ID? +-This is only necessary if your database is a copy of another and the browser extension cannot connect. +- +- +- +- +- DatabaseSettingsWidgetDatabaseKey +- +- Add additional protection... +- Add additional protection... +- +- +- No password set +- No password set +- +- +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- +- +- Continue without password +- +- +- +- No encryption key added +- No encryption key added +- +- +- You must add at least one encryption key to secure your database! +- You must add at least one encryption key to secure your database! +- +- +- Unknown error +- Unknown error +- +- +- Failed to change database credentials +- +- +- +- +- DatabaseSettingsWidgetEncryption +- +- Encryption Algorithm: +- Encryption Algorithm: +- +- +- AES: 256 Bit (default) +- AES: 256 Bit (default) +- +- +- Twofish: 256 Bit +- Twofish: 256 Bit +- +- +- Key Derivation Function: +- Key Derivation Function: +- +- +- Transform rounds: +- Transform rounds: +- +- +- Memory Usage: +- Memory Usage: +- +- +- Parallelism: +- Parallelism: +- +- +- Decryption Time: +- Decryption Time: +- +- +- ?? s +- ?? s +- +- +- Change +- Change +- +- +- Higher values offer more protection, but opening the database will take longer. +- Higher values offer more protection, but opening the database will take longer. +- +- +- Database format: +- Database format: +- +- +- This is only important if you need to use your database with other programs. +- This is only important if you need to use your database with other programs. +- +- +- KDBX 4.0 (recommended) +- KDBX 4.0 (recommended) +- +- +- KDBX 3.1 +- KDBX 3.1 +- +- +- unchanged +- Database decryption time is unchanged +- unchanged +- +- +- Number of rounds too high +- Key transformation rounds +- Number of rounds too high +- +- +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or days (or even longer) to open! +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or days (or even longer) to open! +- +- +- Understood, keep number +- Understood, keep number +- +- +- Cancel +- Cancel +- +- +- Number of rounds too low +- Key transformation rounds +- Number of rounds too low +- +- +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database may be too easy to crack! +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database may be too easy to crack! +- +- +- KDF unchanged +- KDF unchanged +- +- +- Failed to transform key with new KDF parameters; KDF unchanged. +- Failed to transform key with new KDF parameters; KDF unchanged. +- +- +- MiB +- Abbreviation for Mebibytes (KDF settings) +- MiB MiB +- +- +- thread(s) +- Threads for parallel execution (KDF settings) +- thread threads +- +- +- Change existing decryption time +- +- +- +- Decryption time in seconds +- +- +- +- Database format +- +- +- +- Encryption algorithm +- +- +- +- Key derivation function +- +- +- +- Transform rounds +- +- +- +- Memory usage +- +- +- +- Parallelism +- Parallelism +- +- +- ?? ms +- +- +- +- ? s +- +- +- +- +- DatabaseSettingsWidgetFdoSecrets +- +- Exposed Entries +- +- +- +- Don't expose this database +- +- +- +- Expose entries under this group: +- +- +- +- Enable Secret Service to access these settings. +- +- +- +- +- DatabaseSettingsWidgetGeneral +- +- Database Meta Data +- Database Meta Data +- +- +- Database name: +- Database name: +- +- +- Database description: +- Database description: +- +- +- Default username: +- Default username: +- +- +- History Settings +- History Settings +- +- +- Max. history items: +- Max. history items: +- +- +- Max. history size: +- Max. history size: +- +- +- MiB +- MiB +- +- +- Use recycle bin +- Use recycle bin +- +- +- Additional Database Settings +- Additional Database Settings +- +- +- Database name field +- +- +- +- Database description field +- +- +- +- Default username field +- +- +- +- Maximum number of history items per entry +- +- +- +- Maximum size of history per entry +- Maximum size of history per entry +- +- +- Delete Recycle Bin +- +- +- +- Do you want to delete the current recycle bin and all its contents? +-This action is not reversible. +- +- +- +- (old) +- +- +- +- Enable compression (recommended) +- +- +- +- +- DatabaseSettingsWidgetKeeShare +- +- Sharing +- Sharing +- +- +- Breadcrumb +- Breadcrumb +- +- +- Type +- Type +- +- +- Path +- Path +- +- +- Last Signer +- Last Signer +- +- +- Certificates +- Certificates +- +- +- > +- Breadcrumb separator +- > +- +- +- +- DatabaseSettingsWidgetMetaDataSimple +- +- Database Name: +- Database Name: +- +- +- Description: +- Description: +- +- +- Database name field +- +- +- +- Database description field +- +- +- +- +- DatabaseTabWidget +- +- KeePass 2 Database +- KeePass 2 Database +- +- +- All files +- All files +- +- +- Open database +- Open database +- +- +- CSV file +- CSV file +- +- +- Merge database +- Merge database +- +- +- Open KeePass 1 database +- Open KeePass 1 database +- +- +- KeePass 1 database +- KeePass 1 database +- +- +- Export database to CSV file +- Export database to CSV file +- +- +- Writing the CSV file failed. +- Writing the CSV file failed. +- +- +- Database creation error +- Database creation error +- +- +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- +- +- Select CSV file +- Select CSV file +- +- +- New Database +- New Database +- +- +- %1 [New Database] +- Database tab name modifier +- %1 [New Database] +- +- +- %1 [Locked] +- Database tab name modifier +- %1 [Locked] +- +- +- %1 [Read-only] +- Database tab name modifier +- %1 [Read-only] +- +- +- Failed to open %1. It either does not exist or is not accessible. +- +- +- +- Export database to HTML file +- +- +- +- HTML file +- +- +- +- Writing the HTML file failed. +- +- +- +- Export Confirmation +- +- +- +- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? +- +- +- +- Open OPVault +- +- +- +- +- DatabaseWidget +- +- Searching... +- Searching... +- +- +- Do you really want to delete the entry "%1" for good? +- Do you really want to delete the entry "%1" for good? +- +- +- Do you really want to move entry "%1" to the recycle bin? +- Do you really want to move entry "%1" to the recycle bin? +- +- +- Do you really want to move %n entry(s) to the recycle bin? +- Do you really want to move %n entry to the recycle bin?Do you really want to move %n entries to the recycle bin? +- +- +- Execute command? +- Execute command? +- +- +- Do you really want to execute the following command?<br><br>%1<br> +- Do you really want to execute the following command?<br><br>%1<br> +- +- +- Remember my choice +- Remember my choice +- +- +- Do you really want to delete the group "%1" for good? +- Do you really want to delete the group "%1" for good? +- +- +- No current database. +- No current database. +- +- +- No source database, nothing to do. +- No source database, nothing to do. +- +- +- Search Results (%1) +- Search Results (%1) +- +- +- No Results +- No Results +- +- +- File has changed +- File has changed +- +- +- The database file has changed. Do you want to load the changes? +- The database file has changed. Do you want to load the changes? +- +- +- Merge Request +- Merge Request +- +- +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- +- +- Empty recycle bin? +- Empty recycle bin? +- +- +- Are you sure you want to permanently delete everything from your recycle bin? +- Are you sure you want to permanently delete everything from your recycle bin? +- +- +- Do you really want to delete %n entry(s) for good? +- Do you really want to delete %n entry for good?Do you really want to delete %n entries for good? +- +- +- Delete entry(s)? +- Delete entry?Delete entries? +- +- +- Move entry(s) to recycle bin? +- Move entry to recycle bin?Move entries to recycle bin? +- +- +- Lock Database? +- Lock Database? +- +- +- You are editing an entry. Discard changes and lock anyway? +- You are editing an entry. Discard changes and lock anyway? +- +- +- "%1" was modified. +-Save changes? +- "%1" was modified. +-Save changes? +- +- +- Database was modified. +-Save changes? +- Database was modified. +-Save changes? +- +- +- Save changes? +- Save changes? +- +- +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- +- +- Disable safe saves? +- Disable safe saves? +- +- +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- +- +- Passwords +- Passwords +- +- +- Save database as +- Save database as +- +- +- KeePass 2 Database +- KeePass 2 Database +- +- +- Replace references to entry? +- Replace references to entry? +- +- +- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? +- Entry "%1" has %2 reference. Do you want to overwrite references with values, skip this entry, or delete anyway?Entry "%1" has %2 references. Do you want to overwrite references with values, skip this entry, or delete anyway? +- +- +- Delete group +- Delete group +- +- +- Move group to recycle bin? +- Move group to recycle bin? +- +- +- Do you really want to move the group "%1" to the recycle bin? +- Do you really want to move the group "%1" to the recycle bin? +- +- +- Successfully merged the database files. +- Successfully merged the database files. +- +- +- Database was not modified by merge operation. +- Database was not modified by merge operation. +- +- +- Shared group... +- Shared group... +- +- +- Writing the database failed: %1 +- +- +- +- This database is opened in read-only mode. Autosave is disabled. +- +- +- +- Save database backup +- +- +- +- Could not find database file: %1 +- +- +- +- +- EditEntryWidget +- +- Entry +- Entry +- +- +- Advanced +- Advanced +- +- +- Icon +- Icon +- +- +- Auto-Type +- Auto-Type +- +- +- Properties +- Properties +- +- +- History +- History +- +- +- SSH Agent +- SSH Agent +- +- +- n/a +- n/a +- +- +- (encrypted) +- (encrypted) +- +- +- Select private key +- Select private key +- +- +- Entry history +- Entry history +- +- +- Add entry +- Add entry +- +- +- Edit entry +- Edit entry +- +- +- New attribute +- New attribute +- +- +- Are you sure you want to remove this attribute? +- Are you sure you want to remove this attribute? +- +- +- Tomorrow +- Tomorrow +- +- +- %n week(s) +- %n week%n weeks +- +- +- %n month(s) +- %n month%n months +- +- +- Entry updated successfully. +- Entry updated successfully. +- +- +- New attribute %1 +- New attribute %1 +- +- +- %n year(s) +- %n year%n years +- +- +- Confirm Removal +- Confirm Removal +- +- +- Browser Integration +- Browser Integration +- +- +- <empty URL> +- +- +- +- Are you sure you want to remove this URL? +- +- +- +- Reveal +- Reveal +- +- +- Hide +- +- +- +- Unsaved Changes +- +- +- +- Would you like to save changes to this entry? +- +- +- +- [PROTECTED] Press Reveal to view or edit +- +- +- +- Invalid Entry +- +- +- +- An external merge operation has invalidated this entry. +-Unfortunately, any changes made have been lost. +- +- +- +- +- EditEntryWidgetAdvanced +- +- Additional attributes +- Additional attributes +- +- +- Add +- Add +- +- +- Remove +- Remove +- +- +- Edit Name +- Edit Name +- +- +- Protect +- Protect +- +- +- Reveal +- Reveal +- +- +- Attachments +- Attachments +- +- +- Foreground Color: +- Foreground Colour: +- +- +- Background Color: +- Background Colour: +- +- +- Attribute selection +- +- +- +- Attribute value +- +- +- +- Add a new attribute +- +- +- +- Remove selected attribute +- +- +- +- Edit attribute name +- +- +- +- Toggle attribute protection +- +- +- +- Show a protected attribute +- +- +- +- Foreground color selection +- Foreground colour selection +- +- +- Background color selection +- Background colour selection +- +- +- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> +- +- +- +- Exclude from database reports +- +- +- +- +- EditEntryWidgetAutoType +- +- Enable Auto-Type for this entry +- Enable Auto-Type for this entry +- +- +- Window Associations +- Window Associations +- +- +- + +- + +- +- +- - +- - +- +- +- Window title: +- Window title: +- +- +- Use a specific sequence for this association: +- Use a specific sequence for this association: +- +- +- Custom Auto-Type sequence +- +- +- +- Open Auto-Type help webpage +- +- +- +- Existing window associations +- +- +- +- Add new window association +- +- +- +- Remove selected window association +- +- +- +- You can use an asterisk (*) to match everything +- +- +- +- Set the window association title +- +- +- +- You can use an asterisk to match everything +- +- +- +- Custom Auto-Type sequence for this window +- +- +- +- Inherit default Auto-Type sequence from the group +- +- +- +- Use custom Auto-Type sequence: +- +- +- +- +- EditEntryWidgetBrowser +- +- These settings affect to the entry's behaviour with the browser extension. +- +- +- +- General +- General +- +- +- Skip Auto-Submit for this entry +- +- +- +- Hide this entry from the browser extension +- +- +- +- Additional URL's +- +- +- +- Add +- Add +- +- +- Remove +- Remove +- +- +- Edit +- +- +- +- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. +- +- +- +- Use this entry only with HTTP Basic Auth +- +- +- +- +- EditEntryWidgetHistory +- +- Show +- Show +- +- +- Restore +- Restore +- +- +- Delete +- Delete +- +- +- Delete all +- Delete all +- +- +- Entry history selection +- +- +- +- Show entry at selected history state +- +- +- +- Restore entry to selected history state +- +- +- +- Delete selected history state +- +- +- +- Delete all history +- +- +- +- +- EditEntryWidgetMain +- +- URL: +- URL: +- +- +- Password: +- Password: +- +- +- Title: +- Title: +- +- +- Presets +- Presets +- +- +- Toggle the checkbox to reveal the notes section. +- Toggle the checkbox to reveal the notes section. +- +- +- Username: +- Username: +- +- +- Url field +- +- +- +- Download favicon for URL +- +- +- +- Password field +- +- +- +- Toggle notes visible +- +- +- +- Expiration field +- Expiry field +- +- +- Expiration Presets +- Expiry Presets +- +- +- Expiration presets +- Expiry presets +- +- +- Notes field +- +- +- +- Title field +- +- +- +- Username field +- +- +- +- Toggle expiration +- Toggle expiry +- +- +- Notes: +- +- +- +- https://example.com +- +- +- +- Expires: +- Expires: +- +- +- Edit Entry +- +- +- +- +- EditEntryWidgetSSHAgent +- +- Form +- Form +- +- +- Remove key from agent after +- Remove key from agent after +- +- +- seconds +- seconds +- +- +- Fingerprint +- Fingerprint +- +- +- Remove key from agent when database is closed/locked +- Remove key from agent when database is closed/locked +- +- +- Public key +- Public key +- +- +- Add key to agent when database is opened/unlocked +- Add key to agent when database is opened/unlocked +- +- +- Comment +- Comment +- +- +- Decrypt +- Decrypt +- +- +- n/a +- n/a +- +- +- Copy to clipboard +- Copy to clipboard +- +- +- Private key +- Private key +- +- +- External file +- External file +- +- +- Browse... +- Button for opening file dialog +- Browse... +- +- +- Attachment +- Attachment +- +- +- Add to agent +- Add to agent +- +- +- Remove from agent +- Remove from agent +- +- +- Require user confirmation when this key is used +- Require user confirmation when this key is used +- +- +- Remove key from agent after specified seconds +- +- +- +- Browser for key file +- +- +- +- External key file +- +- +- +- Select attachment file +- +- +- +- +- EditGroupWidget +- +- Group +- Group +- +- +- Icon +- Icon +- +- +- Properties +- Properties +- +- +- Add group +- Add group +- +- +- Edit group +- Edit group +- +- +- Enable +- Enable +- +- +- Disable +- Disable +- +- +- Inherit from parent group (%1) +- Inherit from parent group (%1) +- +- +- Entry has unsaved changes +- Entry has unsaved changes +- +- +- +- EditGroupWidgetKeeShare +- +- Type: +- Type: +- +- +- Path: +- Path: +- +- +- Password: +- Password: +- +- +- Inactive +- Inactive +- +- +- KeeShare unsigned container +- KeeShare unsigned container +- +- +- KeeShare signed container +- KeeShare signed container +- +- +- Select import source +- Select import source +- +- +- Select export target +- Select export target +- +- +- Select import/export file +- Select import/export file +- +- +- Clear +- Clear +- +- +- Import +- Import +- +- +- Export +- +- +- +- Synchronize +- Synchronise +- +- +- Your KeePassXC version does not support sharing this container type. +-Supported extensions are: %1. +- +- +- +- %1 is already being exported by this database. +- +- +- +- %1 is already being imported by this database. +- +- +- +- %1 is being imported and exported by different groups in this database. +- +- +- +- KeeShare is currently disabled. You can enable import/export in the application settings. +- KeeShare is a proper noun +- +- +- +- Database export is currently disabled by application settings. +- +- +- +- Database import is currently disabled by application settings. +- +- +- +- Sharing mode field +- +- +- +- Path to share file field +- +- +- +- Password field +- +- +- +- Clear fields +- +- +- +- Browse for share file +- +- +- +- Browse... +- Browse... +- +- +- +- EditGroupWidgetMain +- +- Name field +- +- +- +- Notes field +- +- +- +- Toggle expiration +- Toggle expiry +- +- +- Auto-Type toggle for this and sub groups +- +- +- +- Expiration field +- Expiry field +- +- +- Search toggle for this and sub groups +- +- +- +- Default auto-type sequence field +- +- +- +- Expires: +- Expires: +- +- +- Use default Auto-Type sequence of parent group +- +- +- +- Auto-Type: +- +- +- +- Search: +- +- +- +- Notes: +- +- +- +- Name: +- +- +- +- Set default Auto-Type sequence +- +- +- +- Edit Group +- +- +- +- +- EditWidgetIcons +- +- Add custom icon +- Add custom icon +- +- +- Delete custom icon +- Delete custom icon +- +- +- Download favicon +- Download favicon +- +- +- Unable to fetch favicon. +- Unable to fetch favicon. +- +- +- Images +- Images +- +- +- All files +- All files +- +- +- Confirm Delete +- Confirm Delete +- +- +- Select Image(s) +- Select Image(s) +- +- +- Successfully loaded %1 of %n icon(s) +- Successfully loaded %1 of %n iconSuccessfully loaded %1 of %n icons +- +- +- No icons were loaded +- No icons were loaded +- +- +- %n icon(s) already exist in the database +- %n icon already exist in the database%n icons already exist in the database +- +- +- The following icon(s) failed: +- The following icon failed:The following icons failed: +- +- +- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? +- This icon is used by %n entry, and will be replaced by the default icon. Are you sure you want to delete it?This icon is used by %n entries, and will be replaced by the default icon. Are you sure you want to delete it? +- +- +- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security +- +- +- +- Download favicon for URL +- +- +- +- Apply selected icon to subgroups and entries +- +- +- +- Also apply to child groups +- +- +- +- Also apply to child entries +- +- +- +- Also apply to all children +- +- +- +- Existing icon selected. +- +- +- +- Use default icon +- +- +- +- Use custom icon +- +- +- +- Apply icon to... +- +- +- +- Apply to this group only +- +- +- +- +- EditWidgetProperties +- +- Created: +- Created: +- +- +- Modified: +- Modified: +- +- +- Accessed: +- Accessed: +- +- +- Uuid: +- Uuid: +- +- +- Plugin Data +- Plugin Data +- +- +- Remove +- Remove +- +- +- Delete plugin data? +- Delete plugin data? +- +- +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- +- +- Key +- Key +- +- +- Value +- Value +- +- +- Datetime created +- +- +- +- Datetime modified +- +- +- +- Datetime accessed +- +- +- +- Unique ID +- +- +- +- Plugin data +- +- +- +- Remove selected plugin data +- +- +- +- +- Entry +- +- %1 - Clone +- %1 - Clone +- +- +- +- EntryAttachmentsModel +- +- Name +- Name +- +- +- Size +- Size +- +- +- +- EntryAttachmentsWidget +- +- Form +- Form +- +- +- Add +- Add +- +- +- Remove +- Remove +- +- +- Open +- Open +- +- +- Save +- Save +- +- +- Select files +- Select files +- +- +- Are you sure you want to remove %n attachment(s)? +- Are you sure you want to remove %n attachment?Are you sure you want to remove %n attachments? +- +- +- Save attachments +- Save attachments +- +- +- Unable to create directory: +-%1 +- Unable to create directory: +-%1 +- +- +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- +- +- Confirm overwrite +- Confirm overwrite +- +- +- Unable to save attachments: +-%1 +- Unable to save attachments: +-%1 +- +- +- Unable to open attachment: +-%1 +- Unable to open attachment: +-%1 +- +- +- Unable to open attachments: +-%1 +- Unable to open attachments: +-%1 +- +- +- Confirm remove +- Confirm remove +- +- +- Unable to open file(s): +-%1 +- Unable to open file: +-%1Unable to open files: +-%1 +- +- +- Attachments +- Attachments +- +- +- Add new attachment +- +- +- +- Remove selected attachment +- +- +- +- Open selected attachment +- +- +- +- Save selected attachment to disk +- +- +- +- %1 is a big file (%2 MB). +-Your database may get very large and reduce performance. +- +-Are you sure to add this file? +- +- +- +- Confirm Attachment +- +- +- +- +- EntryAttributesModel +- +- Name +- Name +- +- +- +- EntryHistoryModel +- +- Last modified +- Last modified +- +- +- Title +- Title +- +- +- Username +- Username +- +- +- URL +- URL +- +- +- +- EntryModel +- +- Ref: +- Reference abbreviation +- Ref: +- +- +- Group +- Group +- +- +- Title +- Title +- +- +- Username +- Username +- +- +- URL +- URL +- +- +- Never +- Never +- +- +- Password +- Password +- +- +- Notes +- Notes +- +- +- Expires +- Expires +- +- +- Created +- Created +- +- +- Modified +- Modified +- +- +- Accessed +- Accessed +- +- +- Attachments +- Attachments +- +- +- Size +- Size +- +- +- Group name +- +- +- +- Entry title +- +- +- +- Entry notes +- +- +- +- Entry expires at +- Entry expires at +- +- +- Creation date +- +- +- +- Last modification date +- +- +- +- Last access date +- +- +- +- Attached files +- +- +- +- Entry size +- Entry size +- +- +- Has attachments +- +- +- +- Has TOTP one-time password +- +- +- +- +- EntryPreviewWidget +- +- Close +- Close +- +- +- General +- General +- +- +- Username +- Username +- +- +- Password +- Password +- +- +- Expiration +- Expiry +- +- +- URL +- URL +- +- +- Attributes +- Attributes +- +- +- Attachments +- Attachments +- +- +- Notes +- Notes +- +- +- Autotype +- Autotype +- +- +- Window +- Window +- +- +- Sequence +- Sequence +- +- +- Searching +- Searching +- +- +- Search +- Search +- +- +- Clear +- Clear +- +- +- Never +- Never +- +- +- [PROTECTED] +- [PROTECTED] +- +- +- Enabled +- Enabled +- +- +- Disabled +- Disabled +- +- +- Share +- Share +- +- +- Display current TOTP value +- +- +- +- Advanced +- Advanced +- +- +- Default Sequence +- +- +- +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- attributes line +- +- +- +- +- EntryURLModel +- +- Invalid URL +- +- +- +- +- EntryView +- +- Fit to window +- Fit to window +- +- +- Fit to contents +- Fit to contents +- +- +- Reset to defaults +- Reset to defaults +- +- +- Has attachments +- Entry attachment icon toggle +- +- +- +- Has TOTP +- Entry TOTP icon toggle +- +- +- +- +- FdoSecrets::Item +- +- Entry "%1" from database "%2" was used by %3 +- +- +- +- +- FdoSecrets::Service +- +- Failed to register DBus service at %1.<br/> +- +- +- +- %n Entry(s) was used by %1 +- %1 is the name of an application +- +- +- +- +- FdoSecrets::SettingsDatabaseModel +- +- File Name +- +- +- +- Group +- Group +- +- +- Manage +- +- +- +- Unlock to show +- +- +- +- None +- None +- +- +- +- FdoSecrets::SettingsSessionModel +- +- Application +- +- +- +- Manage +- +- +- +- +- FdoSecretsPlugin +- +- <b>Fdo Secret Service:</b> %1 +- +- +- +- Unknown +- Unknown PID +- +- +- +- Unknown +- Unknown executable path +- +- +- +- <i>PID: %1, Executable: %2</i> +- <i>PID: 1234, Executable: /path/to/exe</i> +- +- +- +- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. +- +- +- +- +- Group +- +- [empty] +- group has no children +- [empty] +- +- +- +- HibpDownloader +- +- Online password validation failed +- +- +- +- +- IconDownloaderDialog +- +- Download Favicons +- +- +- +- Cancel +- Cancel +- +- +- Having trouble downloading icons? +-You can enable the DuckDuckGo website icon service in the security section of the application settings. +- +- +- +- Close +- Close +- +- +- URL +- URL +- +- +- Status +- +- +- +- Please wait, processing entry list... +- +- +- +- Downloading... +- +- +- +- Ok +- Ok +- +- +- Already Exists +- +- +- +- Download Failed +- +- +- +- Downloading favicons (%1/%2)... +- +- +- +- +- KMessageWidget +- +- &Close +- &Close +- +- +- Close message +- Close message +- +- +- +- Kdbx3Reader +- +- missing database headers +- missing database headers +- +- +- Header doesn't match hash +- Header doesn't match hash +- +- +- Invalid header id size +- Invalid header id size +- +- +- Invalid header field length +- Invalid header field length +- +- +- Invalid header data length +- Invalid header data length +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- +- +- +- Unable to calculate database key +- +- +- +- Unable to issue challenge-response: %1 +- +- +- +- +- Kdbx3Writer +- +- Unable to issue challenge-response: %1 +- +- +- +- Unable to calculate database key +- +- +- +- +- Kdbx4Reader +- +- missing database headers +- missing database headers +- +- +- Invalid header checksum size +- Invalid header checksum size +- +- +- Header SHA256 mismatch +- Header SHA256 mismatch +- +- +- Unknown cipher +- Unknown cipher +- +- +- Invalid header id size +- Invalid header id size +- +- +- Invalid header field length +- Invalid header field length +- +- +- Invalid header data length +- Invalid header data length +- +- +- Failed to open buffer for KDF parameters in header +- Failed to open buffer for KDF parameters in header +- +- +- Unsupported key derivation function (KDF) or invalid parameters +- Unsupported key derivation function (KDF) or invalid parameters +- +- +- Legacy header fields found in KDBX4 file. +- Legacy header fields found in KDBX4 file. +- +- +- Invalid inner header id size +- Invalid inner header id size +- +- +- Invalid inner header field length +- Invalid inner header field length +- +- +- Invalid inner header binary size +- Invalid inner header binary size +- +- +- Unsupported KeePass variant map version. +- Translation: variant map = data structure for storing meta data +- Unsupported KeePass variant map version. +- +- +- Invalid variant map entry name length +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map entry name data +- Translation: variant map = data structure for storing meta data +- Invalid variant map entry name data +- +- +- Invalid variant map entry value length +- Translation: variant map = data structure for storing meta data +- Invalid variant map entry value length +- +- +- Invalid variant map entry value data +- Translation comment: variant map = data structure for storing meta data +- Invalid variant map entry value data +- +- +- Invalid variant map Bool entry value length +- Translation: variant map = data structure for storing meta data +- Invalid variant map Bool entry value length +- +- +- Invalid variant map Int32 entry value length +- Translation: variant map = data structure for storing meta data +- Invalid variant map Int32 entry value length +- +- +- Invalid variant map UInt32 entry value length +- Translation: variant map = data structure for storing meta data +- Invalid variant map UInt32 entry value length +- +- +- Invalid variant map Int64 entry value length +- Translation: variant map = data structure for storing meta data +- Invalid variant map Int64 entry value length +- +- +- Invalid variant map UInt64 entry value length +- Translation: variant map = data structure for storing meta data +- Invalid variant map UInt64 entry value length +- +- +- Invalid variant map entry type +- Translation: variant map = data structure for storing meta data +- Invalid variant map entry type +- +- +- Invalid variant map field type size +- Translation: variant map = data structure for storing meta data +- Invalid variant map field type size +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- +- +- +- (HMAC mismatch) +- +- +- +- Unable to calculate database key: %1 +- +- +- +- +- Kdbx4Writer +- +- Invalid symmetric cipher algorithm. +- Invalid symmetric cipher algorithm. +- +- +- Invalid symmetric cipher IV size. +- IV = Initialization Vector for symmetric cipher +- Invalid symmetric cipher IV size. +- +- +- Failed to serialize KDF parameters variant map +- Translation comment: variant map = data structure for storing meta data +- Failed to serialise KDF parameters variant map +- +- +- Unable to calculate database key: %1 +- +- +- +- +- KdbxReader +- +- Unsupported cipher +- Unsupported cipher +- +- +- Invalid compression flags length +- Invalid compression flags length +- +- +- Unsupported compression algorithm +- Unsupported compression algorithm +- +- +- Invalid master seed size +- Invalid master seed size +- +- +- Invalid transform seed size +- Invalid transform seed size +- +- +- Invalid transform rounds size +- Invalid transform rounds size +- +- +- Invalid start bytes size +- Invalid start bytes size +- +- +- Invalid random stream id size +- Invalid random stream id size +- +- +- Invalid inner random stream cipher +- Invalid inner random stream cipher +- +- +- Not a KeePass database. +- Not a KeePass database. +- +- +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- +- +- Unsupported KeePass 2 database version. +- Unsupported KeePass 2 database version. +- +- +- Invalid cipher uuid length: %1 (length=%2) +- Invalid cipher uuid length: %1 (length=%2) +- +- +- Unable to parse UUID: %1 +- Unable to parse UUID: %1 +- +- +- Failed to read database file. +- Failed to read database file. +- +- +- +- KdbxXmlReader +- +- XML parsing failure: %1 +- XML parsing failure: %1 +- +- +- No root group +- No root group +- +- +- Missing icon uuid or data +- Missing icon uuid or data +- +- +- Missing custom data key or value +- Missing custom data key or value +- +- +- Multiple group elements +- Multiple group elements +- +- +- Null group uuid +- Null group uuid +- +- +- Invalid group icon number +- Invalid group icon number +- +- +- Invalid EnableAutoType value +- Invalid EnableAutoType value +- +- +- Invalid EnableSearching value +- +- +- +- No group uuid found +- +- +- +- Null DeleteObject uuid +- +- +- +- Missing DeletedObject uuid or time +- +- +- +- Null entry uuid +- +- +- +- Invalid entry icon number +- +- +- +- History element in history entry +- +- +- +- No entry uuid found +- +- +- +- History element with different uuid +- +- +- +- Duplicate custom attribute found +- Duplicate custom attribute found +- +- +- Entry string key or value missing +- +- +- +- Entry binary key or value missing +- +- +- +- Auto-type association window or sequence missing +- +- +- +- Invalid bool value +- +- +- +- Invalid date time value +- +- +- +- Invalid color value +- Invalid colour value +- +- +- Invalid color rgb part +- Invalid colour rgb part +- +- +- Invalid number value +- +- +- +- Invalid uuid value +- +- +- +- Unable to decompress binary +- Translator meant is a binary data inside an entry +- +- +- +- XML error: +-%1 +-Line %2, column %3 +- +- +- +- +- KeeAgentSettings +- +- Invalid KeeAgent settings file structure. +- +- +- +- Private key is an attachment but no attachments provided. +- +- +- +- Private key is empty +- +- +- +- File too large to be a private key +- File too large to be a private key +- +- +- Failed to open private key +- Failed to open private key +- +- +- +- KeePass1OpenWidget +- +- Unable to open the database. +- Unable to open the database. +- +- +- Import KeePass1 Database +- +- +- +- +- KeePass1Reader +- +- Unable to read keyfile. +- +- +- +- Not a KeePass database. +- Not a KeePass database. +- +- +- Unsupported encryption algorithm. +- Unsupported encryption algorithm. +- +- +- Unsupported KeePass database version. +- +- +- +- Unable to read encryption IV +- IV = Initialization Vector for symmetric cipher +- +- +- +- Invalid number of groups +- +- +- +- Invalid number of entries +- +- +- +- Invalid content hash size +- Invalid content hash size +- +- +- Invalid transform seed size +- Invalid transform seed size +- +- +- Invalid number of transform rounds +- +- +- +- Unable to construct group tree +- Unable to construct group tree +- +- +- Root +- Root +- +- +- Key transformation failed +- Key transformation failed +- +- +- Invalid group field type number +- +- +- +- Invalid group field size +- Invalid group field size +- +- +- Read group field data doesn't match size +- +- +- +- Incorrect group id field size +- +- +- +- Incorrect group creation time field size +- +- +- +- Incorrect group modification time field size +- +- +- +- Incorrect group access time field size +- +- +- +- Incorrect group expiry time field size +- Incorrect group expiry time field size +- +- +- Incorrect group icon field size +- +- +- +- Incorrect group level field size +- +- +- +- Invalid group field type +- +- +- +- Missing group id or level +- +- +- +- Missing entry field type number +- +- +- +- Invalid entry field size +- +- +- +- Read entry field data doesn't match size +- +- +- +- Invalid entry uuid field size +- +- +- +- Invalid entry group id field size +- +- +- +- Invalid entry icon field size +- +- +- +- Invalid entry creation time field size +- +- +- +- Invalid entry modification time field size +- +- +- +- Invalid entry expiry time field size +- Invalid entry expiry time field size +- +- +- Invalid entry field type +- +- +- +- unable to seek to content position +- +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- +- +- +- Unable to calculate database key +- +- +- +- +- KeeShare +- +- Invalid sharing reference +- +- +- +- Inactive share %1 +- +- +- +- Imported from %1 +- +- +- +- Exported to %1 +- +- +- +- Synchronized with %1 +- Synchronised with %1 +- +- +- Import is disabled in settings +- +- +- +- Export is disabled in settings +- +- +- +- Inactive share +- +- +- +- Imported from +- +- +- +- Exported to +- +- +- +- Synchronized with +- Synchronised with +- +- +- +- KeyComponentWidget +- +- Key Component +- +- +- +- Key Component Description +- +- +- +- Cancel +- Cancel +- +- +- Key Component set, click to change or remove +- +- +- +- Add %1 +- Add a key component +- +- +- +- Change %1 +- Change a key component +- +- +- +- Remove %1 +- Remove a key component +- +- +- +- %1 set, click to change or remove +- Change or remove a key component +- +- +- +- +- KeyFileEditWidget +- +- Generate +- Generate +- +- +- Key File +- +- +- +- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> +- +- +- +- Error loading the key file '%1' +-Message: %2 +- +- +- +- Key files +- Key files +- +- +- All files +- All files +- +- +- Create Key File... +- +- +- +- Error creating key file +- +- +- +- Unable to create key file: %1 +- +- +- +- Select a key file +- Select a key file +- +- +- Key file selection +- +- +- +- Browse for key file +- +- +- +- Browse... +- Browse... +- +- +- Generate a new key file +- +- +- +- Note: Do not use a file that may change as that will prevent you from unlocking your database! +- +- +- +- Invalid Key File +- +- +- +- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. +- +- +- +- Suspicious Key File +- +- +- +- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. +-Are you sure you want to continue with this file? +- +- +- +- Old key file format +- +- +- +- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. +- +- +- +- +- MainWindow +- +- &Database +- &Database +- +- +- &Help +- &Help +- +- +- &Groups +- &Groups +- +- +- &Tools +- &Tools +- +- +- &Quit +- &Quit +- +- +- &About +- &About +- +- +- Database settings +- Database settings +- +- +- Copy username to clipboard +- Copy username to clipboard +- +- +- Copy password to clipboard +- Copy password to clipboard +- +- +- &Settings +- &Settings +- +- +- &Title +- &Title +- +- +- Copy title to clipboard +- Copy title to clipboard +- +- +- &URL +- &URL +- +- +- Copy URL to clipboard +- Copy URL to clipboard +- +- +- &Notes +- &Notes +- +- +- Copy notes to clipboard +- Copy notes to clipboard +- +- +- Copy &TOTP +- Copy &TOTP +- +- +- E&mpty recycle bin +- E&mpty recycle bin +- +- +- Clear history +- Clear history +- +- +- Access error for config file %1 +- Access error for config file %1 +- +- +- Settings +- Settings +- +- +- Toggle window +- Toggle window +- +- +- Quit KeePassXC +- Quit KeePassXC +- +- +- Please touch the button on your YubiKey! +- Please touch the button on your YubiKey! +- +- +- WARNING: You are using an unstable build of KeePassXC! +-There is a high risk of corruption, maintain a backup of your databases. +-This version is not meant for production use. +- +- +- +- &Donate +- +- +- +- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +-We recommend you use the AppImage available on our downloads page. +- +- +- +- &Import +- +- +- +- Create a new database +- +- +- +- Merge from another KDBX database +- +- +- +- Add a new entry +- +- +- +- View or edit entry +- +- +- +- Add a new group +- +- +- +- Perform &Auto-Type +- +- +- +- Open &URL +- +- +- +- Import a KeePass 1 database +- +- +- +- Import a CSV file +- +- +- +- NOTE: You are using a pre-release version of KeePassXC! +-Expect some bugs and minor issues, this version is not meant for production use. +- +- +- +- Check for updates on startup? +- +- +- +- Would you like KeePassXC to check for updates on startup? +- +- +- +- You can always check for updates manually from the application menu. +- +- +- +- &Export +- +- +- +- Sort &A-Z +- +- +- +- Sort &Z-A +- +- +- +- &Password Generator +- +- +- +- Import a 1Password Vault +- +- +- +- &Getting Started +- +- +- +- &User Guide +- +- +- +- &Keyboard Shortcuts +- +- +- +- &Recent Databases +- +- +- +- &Entries +- +- +- +- Copy Att&ribute +- +- +- +- TOTP +- TOTP +- +- +- View +- +- +- +- Theme +- +- +- +- &Check for Updates +- +- +- +- &Open Database… +- +- +- +- &Save Database +- +- +- +- &Close Database +- +- +- +- &New Database… +- +- +- +- &Merge From Database… +- +- +- +- &New Entry… +- +- +- +- &Edit Entry… +- +- +- +- &Delete Entry… +- +- +- +- &New Group… +- +- +- +- &Edit Group… +- +- +- +- &Delete Group… +- +- +- +- Download All &Favicons… +- +- +- +- Sa&ve Database As… +- +- +- +- Database &Security… +- +- +- +- Database &Reports... +- +- +- +- Statistics, health check, etc. +- +- +- +- &Database Settings… +- +- +- +- &Clone Entry… +- +- +- +- Move u&p +- +- +- +- Move entry one step up +- +- +- +- Move do&wn +- +- +- +- Move entry one step down +- +- +- +- Copy &Username +- +- +- +- Copy &Password +- +- +- +- Download &Favicon +- +- +- +- &Lock Databases +- +- +- +- &CSV File… +- +- +- +- &HTML File… +- +- +- +- KeePass 1 Database… +- +- +- +- 1Password Vault… +- +- +- +- CSV File… +- +- +- +- Show TOTP +- Show TOTP +- +- +- Show QR Code +- +- +- +- Set up TOTP… +- +- +- +- Report a &Bug +- +- +- +- Open Getting Started Guide +- +- +- +- &Online Help +- +- +- +- Go to online documentation +- +- +- +- Open User Guide +- +- +- +- Save Database Backup... +- +- +- +- Add key to SSH Agent +- +- +- +- Remove key from SSH Agent +- +- +- +- Compact Mode +- +- +- +- Automatic +- +- +- +- Light +- +- +- +- Dark +- +- +- +- Classic (Platform-native) +- +- +- +- Show Toolbar +- +- +- +- Show Preview Panel +- +- +- +- Don't show again for this version +- +- +- +- Restart Application? +- +- +- +- You must restart the application to apply this setting. Would you like to restart now? +- +- +- +- Perform Auto-Type Sequence +- +- +- +- {USERNAME} +- +- +- +- {USERNAME}{ENTER} +- +- +- +- {PASSWORD} +- +- +- +- {PASSWORD}{ENTER} +- +- +- +- Always on Top +- +- +- +- Hide Usernames +- Hide Usernames +- +- +- Hide Passwords +- Hide Passwords +- +- +- +- ManageDatabase +- +- Database settings +- Database settings +- +- +- Edit database settings +- +- +- +- Unlock database +- Unlock database +- +- +- Unlock database to show more information +- +- +- +- Lock database +- Lock database +- +- +- +- ManageSession +- +- Disconnect +- +- +- +- Disconnect this application +- +- +- +- +- Merger +- +- Creating missing %1 [%2] +- +- +- +- Relocating %1 [%2] +- +- +- +- Overwriting %1 [%2] +- +- +- +- older entry merged from database "%1" +- +- +- +- Adding backup for older target %1 [%2] +- +- +- +- Adding backup for older source %1 [%2] +- +- +- +- Reapplying older target entry on top of newer source %1 [%2] +- +- +- +- Reapplying older source entry on top of newer target %1 [%2] +- +- +- +- Synchronizing from newer source %1 [%2] +- +- +- +- Synchronizing from older source %1 [%2] +- +- +- +- Deleting child %1 [%2] +- +- +- +- Deleting orphan %1 [%2] +- +- +- +- Changed deleted objects +- +- +- +- Adding missing icon %1 +- +- +- +- Removed custom data %1 [%2] +- +- +- +- Adding custom data %1 [%2] +- +- +- +- +- NewDatabaseWizard +- +- Create a new KeePassXC database... +- +- +- +- Root +- Root group +- Root +- +- +- +- NewDatabaseWizardPage +- +- WizardPage +- +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- +- +- +- Advanced Settings +- Advanced Settings +- +- +- Simple Settings +- +- +- +- Encryption Settings +- Encryption Settings +- +- +- +- NewDatabaseWizardPageDatabaseKey +- +- Database Credentials +- +- +- +- A set of credentials known only to you that protects your database. +- +- +- +- +- NewDatabaseWizardPageEncryption +- +- Encryption Settings +- Encryption Settings +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- +- +- +- +- NewDatabaseWizardPageMetaData +- +- General Database Information +- +- +- +- Please fill in the display name and an optional description for your new database: +- +- +- +- +- NixUtils +- +- Password Manager +- +- +- +- +- OpData01 +- +- Invalid OpData01, does not contain header +- +- +- +- Unable to read all IV bytes, wanted 16 but got %1 +- +- +- +- Unable to init cipher for opdata01: %1 +- +- +- +- Unable to read all HMAC signature bytes +- +- +- +- Malformed OpData01 due to a failed HMAC +- +- +- +- Unable to process clearText in place +- +- +- +- Expected %1 bytes of clear-text, found %2 +- +- +- +- +- OpVaultOpenWidget +- +- Read Database did not produce an instance +-%1 +- +- +- +- +- OpVaultReader +- +- Directory .opvault must exist +- +- +- +- Directory .opvault must be readable +- +- +- +- Directory .opvault/default must exist +- +- +- +- Directory .opvault/default must be readable +- +- +- +- Unable to decode masterKey: %1 +- +- +- +- Unable to derive master key: %1 +- +- +- +- +- OpenSSHKey +- +- Invalid key file, expecting an OpenSSH key +- +- +- +- PEM boundary mismatch +- +- +- +- Base64 decoding failed +- +- +- +- Key file way too small. +- +- +- +- Key file magic header id invalid +- +- +- +- Found zero keys +- +- +- +- Failed to read public key. +- Failed to read public key. +- +- +- Corrupted key file, reading private key failed +- +- +- +- No private key payload to decrypt +- +- +- +- Trying to run KDF without cipher +- +- +- +- Passphrase is required to decrypt this key +- Passphrase is required to decrypt this key +- +- +- Key derivation failed, key file corrupted? +- +- +- +- Decryption failed, wrong passphrase? +- +- +- +- Unexpected EOF while reading public key +- Unexpected EOF while reading public key +- +- +- Unexpected EOF while reading private key +- Unexpected EOF while reading private key +- +- +- Can't write public key as it is empty +- +- +- +- Unexpected EOF when writing public key +- Unexpected EOF when writing public key +- +- +- Can't write private key as it is empty +- +- +- +- Unexpected EOF when writing private key +- Unexpected EOF when writing private key +- +- +- Unsupported key type: %1 +- Unsupported key type: %1 +- +- +- Unknown cipher: %1 +- Unknown cipher: %1 +- +- +- Cipher IV is too short for MD5 kdf +- +- +- +- Unknown KDF: %1 +- +- +- +- Unknown key type: %1 +- Unknown key type: %1 +- +- +- +- PasswordEdit +- +- Passwords do not match +- +- +- +- Passwords match so far +- +- +- +- Toggle Password (%1) +- +- +- +- Generate Password (%1) +- +- +- +- Warning: Caps Lock enabled! +- +- +- +- +- PasswordEditWidget +- +- Enter password: +- Enter password: +- +- +- Confirm password: +- +- +- +- Password +- Password +- +- +- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> +- +- +- +- Passwords do not match. +- +- +- +- Password field +- +- +- +- Repeat password field +- +- +- +- +- PasswordGeneratorWidget +- +- %p% +- +- +- +- strength +- Password strength +- +- +- +- entropy +- +- +- +- Password +- Password +- +- +- Character Types +- Character Types +- +- +- Numbers +- +- +- +- Extended ASCII +- Extended ASCII +- +- +- Exclude look-alike characters +- Exclude look-alike characters +- +- +- Pick characters from every group +- Pick characters from every group +- +- +- &Length: +- +- +- +- Passphrase +- Passphrase +- +- +- Wordlist: +- +- +- +- Word Separator: +- +- +- +- Close +- Close +- +- +- Entropy: %1 bit +- +- +- +- Password Quality: %1 +- +- +- +- Poor +- Password quality +- +- +- +- Weak +- Password quality +- +- +- +- Good +- Password quality +- +- +- +- Excellent +- Password quality +- +- +- +- Switch to advanced mode +- +- +- +- Advanced +- Advanced +- +- +- Braces +- +- +- +- Punctuation +- +- +- +- Quotes +- +- +- +- Logograms +- +- +- +- Character set to exclude from generated password +- +- +- +- Do not include: +- +- +- +- Add non-hex letters to "do not include" list +- +- +- +- Hex +- +- +- +- Excluded characters: "0", "1", "l", "I", "O", "|", "ï¹’" +- +- +- +- Generated password +- +- +- +- Upper-case letters +- +- +- +- Lower-case letters +- +- +- +- Special characters +- +- +- +- Math Symbols +- +- +- +- Dashes and Slashes +- +- +- +- Excluded characters +- +- +- +- Hex Passwords +- +- +- +- Password length +- +- +- +- Word Case: +- +- +- +- Regenerate password +- +- +- +- Copy password +- +- +- +- lower case +- +- +- +- UPPER CASE +- +- +- +- Title Case +- +- +- +- Generate Password +- +- +- +- Also choose from: +- +- +- +- Additional characters to use for the generated password +- +- +- +- Additional characters +- +- +- +- Word Count: +- +- +- +- Esc +- +- +- +- Apply Password +- +- +- +- Ctrl+S +- +- +- +- Regenerate password (%1) +- +- +- +- Special Characters +- +- +- +- +- QApplication +- +- KeeShare +- +- +- +- Statistics +- +- +- +- Very weak password +- +- +- +- Password entropy is %1 bits +- +- +- +- Weak password +- +- +- +- Used in %1/%2 +- +- +- +- Password is used %1 times +- +- +- +- Password has expired +- +- +- +- Password expiry was %1 +- Password expiry was %1 +- +- +- Password is about to expire +- Password is about to expire +- +- +- Password expires in %1 days +- Password expires in %1 days +- +- +- Password will expire soon +- Password will expire soon +- +- +- Password expires on %1 +- Password expires on %1 +- +- +- Health Check +- +- +- +- HIBP +- +- +- +- +- QMessageBox +- +- Overwrite +- +- +- +- Delete +- Delete +- +- +- Move +- +- +- +- Empty +- +- +- +- Remove +- Remove +- +- +- Skip +- +- +- +- Disable +- Disable +- +- +- Merge +- +- +- +- Continue +- +- +- +- +- QObject +- +- Database not opened +- Database not opened +- +- +- Database hash not available +- Database hash not available +- +- +- Client public key not received +- Client public key not received +- +- +- Cannot decrypt message +- Cannot decrypt message +- +- +- Action cancelled or denied +- Action cancelled or denied +- +- +- KeePassXC association failed, try again +- +- +- +- Encryption key is not recognized +- Encryption key is not recognised +- +- +- Incorrect action +- +- +- +- Empty message received +- Empty message received +- +- +- No URL provided +- No URL provided +- +- +- No logins found +- No logins found +- +- +- Unknown error +- Unknown error +- +- +- Add a new entry to a database. +- Add a new entry to a database. +- +- +- Path of the database. +- Path of the database. +- +- +- Key file of the database. +- Key file of the database. +- +- +- path +- +- +- +- Username for the entry. +- Username for the entry. +- +- +- username +- +- +- +- URL for the entry. +- URL for the entry. +- +- +- URL +- URL +- +- +- Prompt for the entry's password. +- Prompt for the entry's password. +- +- +- Generate a password for the entry. +- Generate a password for the entry. +- +- +- length +- +- +- +- Path of the entry to add. +- Path of the entry to add. +- +- +- Path of the entry to clip. +- clip = copy to clipboard +- +- +- +- Timeout in seconds before clearing the clipboard. +- Timeout in seconds before clearing the clipboard. +- +- +- Edit an entry. +- Edit an entry. +- +- +- Title for the entry. +- Title for the entry. +- +- +- title +- +- +- +- Path of the entry to edit. +- Path of the entry to edit. +- +- +- Estimate the entropy of a password. +- Estimate the entropy of a password. +- +- +- Password for which to estimate the entropy. +- Password for which to estimate the entropy. +- +- +- Perform advanced analysis on the password. +- Perform advanced analysis on the password. +- +- +- +- +-Available commands: +- +- +- +- +- Name of the command to execute. +- Name of the command to execute. +- +- +- List database entries. +- List database entries. +- +- +- Path of the group to list. Default is / +- +- +- +- Find entries quickly. +- Find entries quickly. +- +- +- Search term. +- Search term. +- +- +- Merge two databases. +- Merge two databases. +- +- +- Path of the database to merge from. +- Path of the database to merge from. +- +- +- Use the same credentials for both database files. +- Use the same credentials for both database files. +- +- +- Key file of the database to merge from. +- Key file of the database to merge from. +- +- +- Show an entry's information. +- Show an entry's information. +- +- +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- +- +- attribute +- +- +- +- Name of the entry to show. +- Name of the entry to show. +- +- +- NULL device +- +- +- +- error reading from device +- +- +- +- malformed string +- +- +- +- missing closing quote +- +- +- +- Group +- Group +- +- +- Title +- Title +- +- +- Username +- Username +- +- +- Password +- Password +- +- +- Notes +- Notes +- +- +- Last Modified +- +- +- +- Created +- Created +- +- +- Browser Integration +- Browser Integration +- +- +- SSH Agent +- SSH Agent +- +- +- Generate a new random diceware passphrase. +- Generate a new random diceware passphrase. +- +- +- Word count for the diceware passphrase. +- Word count for the diceware passphrase. +- +- +- Wordlist for the diceware generator. +-[Default: EFF English] +- +- +- +- Generate a new random password. +- Generate a new random password. +- +- +- Could not create entry with path %1. +- +- +- +- Enter password for new entry: +- +- +- +- Writing the database failed %1. +- +- +- +- Successfully added entry %1. +- +- +- +- Invalid timeout value %1. +- +- +- +- Entry %1 not found. +- +- +- +- Entry with path %1 has no TOTP set up. +- +- +- +- Clearing the clipboard in %1 second(s)... +- +- +- +- Clipboard cleared! +- +- +- +- Silence password prompt and other secondary outputs. +- +- +- +- count +- CLI parameter +- +- +- +- Could not find entry with path %1. +- +- +- +- Not changing any field for entry %1. +- +- +- +- Enter new password for entry: +- +- +- +- Writing the database failed: %1 +- +- +- +- Successfully edited entry %1. +- +- +- +- Length %1 +- +- +- +- Entropy %1 +- +- +- +- Log10 %1 +- +- +- +- Multi-word extra bits %1 +- +- +- +- Type: Bruteforce +- +- +- +- Type: Dictionary +- +- +- +- Type: Dict+Leet +- +- +- +- Type: User Words +- +- +- +- Type: User+Leet +- +- +- +- Type: Repeated +- +- +- +- Type: Sequence +- +- +- +- Type: Spatial +- +- +- +- Type: Date +- +- +- +- Type: Bruteforce(Rep) +- +- +- +- Type: Dictionary(Rep) +- +- +- +- Type: Dict+Leet(Rep) +- +- +- +- Type: User Words(Rep) +- +- +- +- Type: User+Leet(Rep) +- +- +- +- Type: Repeated(Rep) +- +- +- +- Type: Sequence(Rep) +- +- +- +- Type: Spatial(Rep) +- +- +- +- Type: Date(Rep) +- +- +- +- Type: Unknown%1 +- +- +- +- Entropy %1 (%2) +- +- +- +- *** Password length (%1) != sum of length of parts (%2) *** +- +- +- +- Failed to load key file %1: %2 +- +- +- +- Length of the generated password +- +- +- +- Use lowercase characters +- +- +- +- Use uppercase characters +- +- +- +- Use special characters +- +- +- +- Use extended ASCII +- +- +- +- Exclude character set +- +- +- +- chars +- +- +- +- Exclude similar looking characters +- +- +- +- Include characters from every selected group +- +- +- +- Recursively list the elements of the group. +- +- +- +- Cannot find group %1. +- +- +- +- Error reading merge file: +-%1 +- +- +- +- Unable to save database to file : %1 +- +- +- +- Unable to save database to file: %1 +- +- +- +- Successfully recycled entry %1. +- +- +- +- Successfully deleted entry %1. +- +- +- +- Show the entry's current TOTP. +- +- +- +- ERROR: unknown attribute %1. +- +- +- +- No program defined for clipboard manipulation +- +- +- +- file empty +- +- +- +- %1: (row, col) %2,%3 +- +- +- +- AES-KDF (KDBX 4) +- +- +- +- AES-KDF (KDBX 3.1) +- +- +- +- Invalid Settings +- TOTP +- +- +- +- Invalid Key +- TOTP +- +- +- +- Message encryption failed. +- +- +- +- No groups found +- +- +- +- Create a new database. +- +- +- +- File %1 already exists. +- +- +- +- Loading the key file failed +- +- +- +- No key is set. Aborting database creation. +- +- +- +- Failed to save the database: %1. +- +- +- +- Successfully created new database. +- +- +- +- Creating KeyFile %1 failed: %2 +- +- +- +- Loading KeyFile %1 failed: %2 +- +- +- +- Path of the entry to remove. +- Path of the entry to remove. +- +- +- Existing single-instance lock file is invalid. Launching new instance. +- Existing single-instance lock file is invalid. Launching new instance. +- +- +- The lock file could not be created. Single-instance mode disabled. +- The lock file could not be created. Single-instance mode disabled. +- +- +- KeePassXC - cross-platform password manager +- +- +- +- filenames of the password databases to open (*.kdbx) +- +- +- +- path to a custom config file +- +- +- +- key file of the database +- +- +- +- read password of the database from stdin +- +- +- +- Another instance of KeePassXC is already running. +- Another instance of KeePassXC is already running. +- +- +- Fatal error while testing the cryptographic functions. +- Fatal error while testing the cryptographic functions. +- +- +- KeePassXC - Error +- +- +- +- Database password: +- +- +- +- Cannot create new group +- +- +- +- Deactivate password key for the database. +- +- +- +- Displays debugging information. +- +- +- +- Deactivate password key for the database to merge from. +- +- +- +- Version %1 +- Version %1 +- +- +- Build Type: %1 +- Build Type: %1 +- +- +- Revision: %1 +- Revision: %1 +- +- +- Distribution: %1 +- Distribution: %1 +- +- +- Debugging mode is disabled. +- +- +- +- Debugging mode is enabled. +- +- +- +- Operating system: %1 +-CPU architecture: %2 +-Kernel: %3 %4 +- Operating system: %1 +-CPU architecture: %2 +-Kernel: %3 %4 +- +- +- Auto-Type +- Auto-Type +- +- +- KeeShare (signed and unsigned sharing) +- KeeShare (signed and unsigned sharing) +- +- +- KeeShare (only signed sharing) +- KeeShare (only signed sharing) +- +- +- KeeShare (only unsigned sharing) +- KeeShare (only unsigned sharing) +- +- +- YubiKey +- YubiKey +- +- +- TouchID +- TouchID +- +- +- None +- None +- +- +- Enabled extensions: +- Enabled extensions: +- +- +- Cryptographic libraries: +- +- +- +- Cannot generate a password and prompt at the same time! +- +- +- +- Adds a new group to a database. +- +- +- +- Path of the group to add. +- +- +- +- Group %1 already exists! +- +- +- +- Group %1 not found. +- +- +- +- Successfully added group %1. +- +- +- +- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. +- +- +- +- FILENAME +- +- +- +- Analyze passwords for weaknesses and problems. +- +- +- +- Failed to open HIBP file %1: %2 +- +- +- +- Evaluating database entries against HIBP file, this will take a while... +- +- +- +- Close the currently opened database. +- +- +- +- Display this help. +- +- +- +- slot +- +- +- +- Invalid word count %1 +- +- +- +- The word list is too small (< 1000 items) +- +- +- +- Exit interactive mode. +- +- +- +- Exports the content of a database to standard output in the specified format. +- +- +- +- Unable to export database to XML: %1 +- +- +- +- Unsupported format %1 +- +- +- +- Use numbers +- +- +- +- Invalid password length %1 +- +- +- +- Display command help. +- +- +- +- Available commands: +- +- +- +- Import the contents of an XML database. +- +- +- +- Path of the XML database export. +- +- +- +- Path of the new database. +- +- +- +- Successfully imported database. +- +- +- +- Unknown command %1 +- +- +- +- Flattens the output to single lines. +- +- +- +- Only print the changes detected by the merge operation. +- +- +- +- Yubikey slot for the second database. +- +- +- +- Successfully merged %1 into %2. +- +- +- +- Database was not modified by merge operation. +- Database was not modified by merge operation. +- +- +- Moves an entry to a new group. +- +- +- +- Path of the entry to move. +- +- +- +- Path of the destination group. +- +- +- +- Could not find group with path %1. +- +- +- +- Entry is already in group %1. +- +- +- +- Successfully moved entry %1 to group %2. +- +- +- +- Open a database. +- +- +- +- Path of the group to remove. +- +- +- +- Cannot remove root group from database. +- +- +- +- Successfully recycled group %1. +- +- +- +- Successfully deleted group %1. +- +- +- +- Failed to open database file %1: not found +- +- +- +- Failed to open database file %1: not a plain file +- +- +- +- Failed to open database file %1: not readable +- +- +- +- Enter password to unlock %1: +- +- +- +- Invalid YubiKey slot %1 +- +- +- +- Enter password to encrypt database (optional): +- +- +- +- HIBP file, line %1: parse error +- +- +- +- Secret Service Integration +- +- +- +- User name +- +- +- +- Password for '%1' has been leaked %2 time(s)! +- +- +- +- Invalid password generator after applying all options +- +- +- +- Show the protected attributes in clear text. +- +- +- +- Browser Plugin Failure +- +- +- +- Could not save the native messaging script file for %1. +- +- +- +- Copy the given attribute to the clipboard. Defaults to "password" if not specified. +- +- +- +- Copy the current TOTP to the clipboard (equivalent to "-a totp"). +- +- +- +- Copy an entry's attribute to the clipboard. +- +- +- +- ERROR: Please specify one of --attribute or --totp, not both. +- +- +- +- ERROR: attribute %1 is ambiguous, it matches %2. +- +- +- +- Attribute "%1" not found. +- +- +- +- Entry's "%1" attribute copied to the clipboard! +- +- +- +- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). +- +- +- +- slot[:serial] +- +- +- +- Target decryption time in MS for the database. +- +- +- +- time +- +- +- +- Set the key file for the database. +- +- +- +- Set a password for the database. +- +- +- +- Invalid decryption time %1. +- +- +- +- Target decryption time must be between %1 and %2. +- +- +- +- Failed to set database password. +- +- +- +- Benchmarking key derivation function for %1ms delay. +- +- +- +- Setting %1 rounds for key derivation function. +- +- +- +- error while setting database key derivation settings. +- +- +- +- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. +- +- +- +- Unable to import XML database: %1 +- +- +- +- Show a database's information. +- +- +- +- UUID: +- +- +- +- Name: +- +- +- +- Description: +- +- +- +- Cipher: +- +- +- +- KDF: +- +- +- +- Recycle bin is enabled. +- +- +- +- Recycle bin is not enabled. +- +- +- +- Invalid command %1. +- +- +- +- Invalid YubiKey serial %1 +- +- +- +- Please touch the button on your YubiKey to continue… +- +- +- +- Do you want to create a database with an empty password? [y/N]: +- +- +- +- Repeat password: +- +- +- +- Error: Passwords do not match. +- +- +- +- All clipping programs failed. Tried %1 +- +- +- +- +- AES (%1 rounds) +- +- +- +- AES 256-bit +- +- +- +- Twofish 256-bit +- +- +- +- ChaCha20 256-bit +- +- +- +- Benchmark %1 delay +- +- +- +- %1 ms +- milliseconds +- +- +- +- %1 s +- seconds +- +- +- +- path to a custom local config file +- +- +- +- WARNING: You are using an old key file format which KeePassXC may +-stop supporting in the future. +- +-Please consider generating a new key file. +- +- +- +- Argon2%1 (%2 rounds, %3 KB) +- +- +- +- Argon2d (KDBX 4 – recommended) +- +- +- +- Argon2id (KDBX 4) +- +- +- +- TOTP +- TOTP +- +- +- Icon +- Icon +- +- +- Unsupported key file version: %1 +- +- +- +- Checksum mismatch! Key file may be corrupt. +- +- +- +- Unexpected key file data! Key file may be corrupt. +- +- +- +- +- QtIOCompressor +- +- Internal zlib error when compressing: +- +- +- +- Error writing to underlying device: +- +- +- +- Error opening underlying device: +- +- +- +- Error reading data from underlying device: +- +- +- +- Internal zlib error when decompressing: +- +- +- +- +- QtIOCompressor::open +- +- The gzip format not supported in this version of zlib. +- +- +- +- Internal zlib error: +- +- +- +- +- ReportsWidgetHealthcheck +- +- Also show entries that have been excluded from reports +- +- +- +- Hover over reason to show additional details. Double-click entries to edit. +- +- +- +- Bad +- Password quality +- +- +- +- Bad — password must be changed +- +- +- +- Poor +- Password quality +- +- +- +- Poor — password should be changed +- +- +- +- Weak +- Password quality +- +- +- +- Weak — consider changing the password +- +- +- +- (Excluded) +- +- +- +- This entry is being excluded from reports +- +- +- +- Please wait, health data is being calculated... +- +- +- +- Congratulations, everything is healthy! +- +- +- +- Title +- Title +- +- +- Path +- Path +- +- +- Score +- +- +- +- Reason +- +- +- +- Edit Entry... +- +- +- +- Exclude from reports +- +- +- +- +- ReportsWidgetHibp +- +- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. +- +- +- +- Perform Online Analysis +- +- +- +- Also show entries that have been excluded from reports +- +- +- +- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. +- +- +- +- Congratulations, no exposed passwords! +- +- +- +- Title +- Title +- +- +- Path +- Path +- +- +- Password exposed… +- +- +- +- (Excluded) +- +- +- +- This entry is being excluded from reports +- +- +- +- once +- +- +- +- up to 10 times +- +- +- +- up to 100 times +- +- +- +- up to 1000 times +- +- +- +- up to 10,000 times +- +- +- +- up to 100,000 times +- +- +- +- up to a million times +- +- +- +- millions of times +- +- +- +- Edit Entry... +- +- +- +- Exclude from reports +- +- +- +- +- ReportsWidgetStatistics +- +- Hover over lines with error icons for further information. +- +- +- +- Name +- Name +- +- +- Value +- Value +- +- +- Please wait, database statistics are being calculated... +- +- +- +- Database name +- +- +- +- Description +- +- +- +- Location +- +- +- +- Last saved +- +- +- +- Unsaved changes +- +- +- +- yes +- +- +- +- no +- +- +- +- The database was modified, but the changes have not yet been saved to disk. +- +- +- +- Number of groups +- +- +- +- Number of entries +- +- +- +- Number of expired entries +- +- +- +- The database contains entries that have expired. +- +- +- +- Unique passwords +- +- +- +- Non-unique passwords +- +- +- +- More than 10% of passwords are reused. Use unique passwords when possible. +- +- +- +- Maximum password reuse +- +- +- +- Some passwords are used more than three times. Use unique passwords when possible. +- +- +- +- Number of short passwords +- +- +- +- Recommended minimum password length is at least 8 characters. +- +- +- +- Number of weak passwords +- +- +- +- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. +- Recommend using long, randomised passwords with a rating of 'good' or 'excellent'. +- +- +- Entries excluded from reports +- +- +- +- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. +- +- +- +- Average password length +- +- +- +- %1 characters +- +- +- +- Average password length is less than ten characters. Longer passwords provide more security. +- +- +- +- +- SSHAgent +- +- Agent connection failed. +- +- +- +- Agent protocol error. +- +- +- +- No agent running, cannot add identity. +- +- +- +- No agent running, cannot remove identity. +- +- +- +- Agent refused this identity. Possible reasons include: +- +- +- +- The key has already been added. +- +- +- +- Restricted lifetime is not supported by the agent (check options). +- +- +- +- A confirmation request is not supported by the agent (check options). +- +- +- +- Key identity ownership conflict. Refusing to add. +- +- +- +- No agent running, cannot list identities. +- +- +- +- +- SearchHelpWidget +- +- Search Help +- +- +- +- Search terms are as follows: [modifiers][field:]["]term["] +- +- +- +- Every search term must match (ie, logical AND) +- +- +- +- Modifiers +- +- +- +- exclude term from results +- +- +- +- match term exactly +- +- +- +- use regex in term +- +- +- +- Fields +- +- +- +- Term Wildcards +- +- +- +- match anything +- +- +- +- match one +- +- +- +- logical OR +- +- +- +- Examples +- +- +- +- +- SearchWidget +- +- Search +- Search +- +- +- Limit search to selected group +- Limit search to selected group +- +- +- Search Help +- +- +- +- Search (%1)... +- Search placeholder text, %1 is the keyboard shortcut +- +- +- +- Case sensitive +- +- +- +- +- SettingsWidgetFdoSecrets +- +- Options +- +- +- +- Enable KeepassXC Freedesktop.org Secret Service integration +- +- +- +- General +- General +- +- +- Show notification when credentials are requested +- +- +- +- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> +- +- +- +- Exposed database groups: +- +- +- +- Authorization +- Authorisation +- +- +- These applications are currently connected: +- +- +- +- Don't confirm when entries are deleted by clients +- +- +- +- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. +- +- +- +- <b>Warning:</b> +- +- +- +- Save current changes to activate the plugin and enable editing of this section. +- +- +- +- +- SettingsWidgetKeeShare +- +- Active +- +- +- +- Allow export +- +- +- +- Allow import +- +- +- +- Own certificate +- +- +- +- Fingerprint: +- +- +- +- Certificate: +- +- +- +- Signer +- +- +- +- Key: +- +- +- +- Generate +- Generate +- +- +- Import +- Import +- +- +- Export +- +- +- +- Imported certificates +- +- +- +- Trust +- +- +- +- Ask +- +- +- +- Untrust +- +- +- +- Remove +- Remove +- +- +- Path +- Path +- +- +- Status +- +- +- +- Fingerprint +- Fingerprint +- +- +- Certificate +- +- +- +- Trusted +- +- +- +- Untrusted +- +- +- +- Unknown +- +- +- +- key.share +- Filetype for KeeShare key +- +- +- +- KeeShare key file +- +- +- +- All files +- All files +- +- +- Select path +- +- +- +- Exporting changed certificate +- +- +- +- The exported certificate is not the same as the one in use. Do you want to export the current certificate? +- +- +- +- Signer: +- +- +- +- Allow KeeShare imports +- +- +- +- Allow KeeShare exports +- +- +- +- Only show warnings and errors +- +- +- +- Key +- Key +- +- +- Signer name field +- +- +- +- Generate new certificate +- +- +- +- Import existing certificate +- +- +- +- Export own certificate +- +- +- +- Known shares +- +- +- +- Trust selected certificate +- +- +- +- Ask whether to trust the selected certificate every time +- +- +- +- Untrust selected certificate +- +- +- +- Remove selected certificate +- +- +- +- +- ShareExport +- +- Overwriting signed share container is not supported - export prevented +- +- +- +- Could not write export container (%1) +- +- +- +- Could not embed signature: Could not open file to write (%1) +- +- +- +- Could not embed signature: Could not write file (%1) +- +- +- +- Could not embed database: Could not open file to write (%1) +- +- +- +- Could not embed database: Could not write file (%1) +- +- +- +- Overwriting unsigned share container is not supported - export prevented +- +- +- +- Could not write export container +- +- +- +- Unexpected export error occurred +- +- +- +- +- ShareImport +- +- Import from container without signature +- +- +- +- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? +- +- +- +- Import from container with certificate +- +- +- +- Do you want to trust %1 with the fingerprint of %2 from %3? +- +- +- +- Not this time +- +- +- +- Never +- Never +- +- +- Always +- +- +- +- Just this time +- +- +- +- Signed share container are not supported - import prevented +- +- +- +- File is not readable +- +- +- +- Invalid sharing container +- +- +- +- Untrusted import prevented +- +- +- +- Successful signed import +- +- +- +- Unsigned share container are not supported - import prevented +- +- +- +- Successful unsigned import +- +- +- +- File does not exist +- +- +- +- Unknown share container type +- +- +- +- +- ShareObserver +- +- Import from %1 failed (%2) +- +- +- +- Import from %1 successful (%2) +- +- +- +- Imported from %1 +- +- +- +- Export to %1 failed (%2) +- +- +- +- Export to %1 successful (%2) +- +- +- +- Export to %1 +- +- +- +- Multiple import source path to %1 in %2 +- +- +- +- Conflicting export target path %1 in %2 +- +- +- +- +- TotpDialog +- +- Timed Password +- +- +- +- 000000 +- +- +- +- Copy +- Copy +- +- +- Expires in <b>%n</b> second(s) +- Expires in <b>%n</b> second(s)Expires in <b>%n</b> second(s) +- +- +- +- TotpExportSettingsDialog +- +- Copy +- Copy +- +- +- NOTE: These TOTP settings are custom and may not work with other authenticators. +- TOTP QR code dialog warning +- +- +- +- There was an error creating the QR code. +- +- +- +- Closing in %1 seconds. +- +- +- +- +- TotpSetupDialog +- +- Setup TOTP +- +- +- +- Default RFC 6238 token settings +- Default RFC 6238 token settings +- +- +- Steam token settings +- Steam token settings +- +- +- Use custom settings +- Use custom settings +- +- +- Custom Settings +- +- +- +- Time step: +- +- +- +- sec +- Seconds +- sec +- +- +- Code size: +- +- +- +- Secret Key: +- +- +- +- Secret key must be in Base32 format +- +- +- +- Secret key field +- +- +- +- Algorithm: +- +- +- +- Time step field +- +- +- +- digits +- +- +- +- Invalid TOTP Secret +- +- +- +- You have entered an invalid secret key. The key must be in Base32 format. +-Example: JBSWY3DPEHPK3PXP +- +- +- +- Confirm Remove TOTP Settings +- +- +- +- Are you sure you want to delete TOTP settings for this entry? +- +- +- +- +- URLEdit +- +- Invalid URL +- +- +- +- +- UpdateCheckDialog +- +- Checking for updates +- +- +- +- Checking for updates... +- +- +- +- Close +- Close +- +- +- Update Error! +- +- +- +- An error occurred in retrieving update information. +- +- +- +- Please try again later. +- +- +- +- Software Update +- +- +- +- A new version of KeePassXC is available! +- +- +- +- KeePassXC %1 is now available — you have %2. +- +- +- +- Download it at keepassxc.org +- +- +- +- You're up-to-date! +- +- +- +- KeePassXC %1 is currently the newest version available +- +- +- +- +- WelcomeWidget +- +- Start storing your passwords securely in a KeePassXC database +- Start storing your passwords securely in a KeePassXC database +- +- +- Create new database +- Create new database +- +- +- Open existing database +- Open existing database +- +- +- Import from KeePass 1 +- +- +- +- Import from CSV +- Import from CSV +- +- +- Recent databases +- Recent databases +- +- +- Welcome to KeePassXC %1 +- Welcome to KeePassXC %1 +- +- +- Import from 1Password +- +- +- +- Open a recent database +- +- +- +- +- YubiKey +- +- %1 [%2] Configured Slot - %3 +- +- +- +- %1 [%2] Challenge Response - Slot %3 - %4 +- +- +- +- Press +- +- +- +- Passive +- +- +- +- %1 Invalid slot specified - %2 +- +- +- +- The YubiKey interface has not been initialized. +- The YubiKey interface has not been initialised. +- +- +- Hardware key is currently in use. +- +- +- +- Could not find hardware key with serial number %1. Please plug it in to continue. +- +- +- +- Hardware key timed out waiting for user interaction. +- +- +- +- A USB error ocurred when accessing the hardware key: %1 +- +- +- +- Failed to complete a challenge-response, the specific error was: %1 +- +- +- +- +- YubiKeyEditWidget +- +- Refresh +- Refresh +- +- +- YubiKey Challenge-Response +- +- +- +- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- +- +- +- Refresh hardware tokens +- +- +- +- Hardware key slot selection +- +- +- +- Could not find any hardware keys! +- +- +- +- Selected hardware key slot does not support challenge-response! +- +- +- +- Detecting hardware keys… +- +- +- +- No hardware keys detected +- +- +- +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_en.ts keepassxc-2.6.4-patched/share/translations/keepassx_en.ts +--- keepassxc-2.6.4-orig/share/translations/keepassx_en.ts 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/translations/keepassx_en.ts 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7940 +0,0 @@ +- +- +- +- +- AboutDialog +- +- About KeePassXC +- About KeePassXC +- +- +- About +- About +- +- +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- +- +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- +- +- Contributors +- Contributors +- +- +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- +- +- Debug Info +- Debug Info +- +- +- Include the following information whenever you report a bug: +- Include the following information whenever you report a bug: +- +- +- Copy to clipboard +- Copy to clipboard +- +- +- Project Maintainers: +- Project Maintainers: +- +- +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- +- +- +- AgentSettingsWidget +- +- Use OpenSSH for Windows instead of Pageant +- Use OpenSSH for Windows instead of Pageant +- +- +- Enable SSH Agent integration +- +- +- +- SSH_AUTH_SOCK value +- +- +- +- SSH_AUTH_SOCK override +- +- +- +- (empty) +- +- +- +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- +- +- +- SSH Agent connection is working! +- +- +- +- +- ApplicationSettingsWidget +- +- Application Settings +- Application Settings +- +- +- General +- General +- +- +- Security +- Security +- +- +- Access error for config file %1 +- Access error for config file %1 +- +- +- Icon only +- Icon only +- +- +- Text only +- Text only +- +- +- Text beside icon +- Text beside icon +- +- +- Text under icon +- Text under icon +- +- +- Follow style +- Follow style +- +- +- Reset Settings? +- +- +- +- Are you sure you want to reset all general and security settings to default? +- +- +- +- Monochrome (light) +- +- +- +- Monochrome (dark) +- +- +- +- Colorful +- +- +- +- You must restart the application to set the new language. Would you like to restart now? +- +- +- +- Monochrome +- +- +- +- +- ApplicationSettingsWidgetGeneral +- +- Basic Settings +- Basic Settings +- +- +- Startup +- Startup +- +- +- Start only a single instance of KeePassXC +- Start only a single instance of KeePassXC +- +- +- Minimize window at application startup +- Minimize window at application startup +- +- +- File Management +- File Management +- +- +- Backup database file before saving +- Backup database file before saving +- +- +- Automatically save after every change +- Automatically save after every change +- +- +- Automatically reload the database when modified externally +- Automatically reload the database when modified externally +- +- +- Entry Management +- Entry Management +- +- +- Use group icon on entry creation +- Use group icon on entry creation +- +- +- Minimize instead of app exit +- Minimize instead of app exit +- +- +- Show a system tray icon +- Show a system tray icon +- +- +- Hide window to system tray when minimized +- Hide window to system tray when minimized +- +- +- Auto-Type +- Auto-Type +- +- +- Use entry title to match windows for global Auto-Type +- Use entry title to match windows for global Auto-Type +- +- +- Use entry URL to match windows for global Auto-Type +- Use entry URL to match windows for global Auto-Type +- +- +- Always ask before performing Auto-Type +- Always ask before performing Auto-Type +- +- +- ms +- Milliseconds +- ms +- +- +- Movable toolbar +- Movable toolbar +- +- +- Remember previously used databases +- +- +- +- Load previously open databases on startup +- +- +- +- Remember database key files and security dongles +- +- +- +- Check for updates at application startup once per week +- +- +- +- Include beta releases when checking for updates +- +- +- +- Language: +- +- +- +- (restart program to activate) +- +- +- +- Minimize window after unlocking database +- +- +- +- Minimize when opening a URL +- +- +- +- Hide window when copying to clipboard +- +- +- +- Minimize +- +- +- +- Drop to background +- +- +- +- Favicon download timeout: +- +- +- +- Website icon download timeout in seconds +- +- +- +- sec +- Seconds +- sec +- +- +- Toolbar button style +- +- +- +- Language selection +- +- +- +- Global auto-type shortcut +- +- +- +- Auto-type character typing delay milliseconds +- +- +- +- Auto-type start delay milliseconds +- +- +- +- Automatically launch KeePassXC at system startup +- +- +- +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- +- +- +- User Interface +- +- +- +- Toolbar button style: +- +- +- +- Use monospaced font for notes +- +- +- +- Tray icon type: +- +- +- +- Reset settings to default… +- +- +- +- Auto-Type typing delay: +- +- +- +- Global Auto-Type shortcut: +- +- +- +- Auto-Type start delay: +- +- +- +- Automatically save when locking database +- +- +- +- Automatically save non-data changes when locking database +- +- +- +- Tray icon type +- +- +- +- +- ApplicationSettingsWidgetSecurity +- +- Timeouts +- Timeouts +- +- +- Clear clipboard after +- Clear clipboard after +- +- +- sec +- Seconds +- sec +- +- +- Lock databases after inactivity of +- Lock databases after inactivity of +- +- +- min +- min +- +- +- Forget TouchID after inactivity of +- Forget TouchID after inactivity of +- +- +- Convenience +- Convenience +- +- +- Lock databases when session is locked or lid is closed +- Lock databases when session is locked or lid is closed +- +- +- Forget TouchID when session is locked or lid is closed +- Forget TouchID when session is locked or lid is closed +- +- +- Lock databases after minimizing the window +- Lock databases after minimizing the window +- +- +- Re-lock previously locked database after performing Auto-Type +- Re-lock previously locked database after performing Auto-Type +- +- +- Hide passwords in the entry preview panel +- Hide passwords in the entry preview panel +- +- +- Hide entry notes by default +- Hide entry notes by default +- +- +- Privacy +- Privacy +- +- +- Use DuckDuckGo service to download website icons +- +- +- +- Clipboard clear seconds +- +- +- +- Touch ID inactivity reset +- +- +- +- Database lock timeout seconds +- +- +- +- min +- Minutes +- min +- +- +- Clear search query after +- +- +- +- Require password repeat when it is visible +- +- +- +- Hide passwords when editing them +- +- +- +- Use placeholder for empty password fields +- +- +- +- +- AutoType +- +- Couldn't find an entry that matches the window title: +- Couldn't find an entry that matches the window title: +- +- +- Auto-Type - KeePassXC +- Auto-Type - KeePassXC +- +- +- Auto-Type +- Auto-Type +- +- +- The Syntax of your Auto-Type statement is incorrect! +- The Syntax of your Auto-Type statement is incorrect! +- +- +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- +- +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- +- +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- +- +- Permission Required +- +- +- +- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. +- +- +- +- +- AutoTypeAssociationsModel +- +- Window +- Window +- +- +- Sequence +- Sequence +- +- +- Default sequence +- Default sequence +- +- +- +- AutoTypeMatchModel +- +- Group +- Group +- +- +- Title +- Title +- +- +- Username +- Username +- +- +- Sequence +- Sequence +- +- +- +- AutoTypeMatchView +- +- Copy &username +- Copy &username +- +- +- Copy &password +- Copy &password +- +- +- +- AutoTypePlatformMac +- +- Permission Required +- +- +- +- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. +- +- +- +- +- AutoTypeSelectDialog +- +- Auto-Type - KeePassXC +- Auto-Type - KeePassXC +- +- +- Select entry to Auto-Type: +- Select entry to Auto-Type: +- +- +- Search... +- +- +- +- +- BrowserAccessControlDialog +- +- KeePassXC - Browser Access Request +- +- +- +- %1 is requesting access to the following entries: +- +- +- +- Remember access to checked entries +- +- +- +- Remember +- +- +- +- Allow access to entries +- +- +- +- Allow Selected +- +- +- +- Deny All +- +- +- +- Disable for this site +- +- +- +- +- BrowserEntrySaveDialog +- +- KeePassXC-Browser Save Entry +- KeePassXC-Browser Save Entry +- +- +- Ok +- Ok +- +- +- Cancel +- Cancel +- +- +- You have multiple databases open. +-Please select the correct database for saving credentials. +- You have multiple databases open. +-Please select the correct database for saving credentials. +- +- +- +- BrowserService +- +- KeePassXC: New key association request +- KeePassXC: New key association request +- +- +- Save and allow access +- Save and allow access +- +- +- KeePassXC: Overwrite existing key? +- KeePassXC: Overwrite existing key? +- +- +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- +- +- KeePassXC: Update Entry +- KeePassXC: Update Entry +- +- +- Do you want to update the information in %1 - %2? +- Do you want to update the information in %1 - %2? +- +- +- Abort +- Abort +- +- +- Converting attributes to custom data… +- Converting attributes to custom data… +- +- +- KeePassXC: Converted KeePassHTTP attributes +- KeePassXC: Converted KeePassHTTP attributes +- +- +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- +- +- Successfully moved %n keys to custom data. +- +- Successfully moved %n keys to custom data. +- Successfully moved %n keys to custom data. +- +- +- +- KeePassXC: No entry with KeePassHTTP attributes found! +- KeePassXC: No entry with KeePassHTTP attributes found! +- +- +- The active database does not contain an entry with KeePassHTTP attributes. +- The active database does not contain an entry with KeePassHTTP attributes. +- +- +- KeePassXC: Legacy browser integration settings detected +- KeePassXC: Legacy browser integration settings detected +- +- +- KeePassXC: Create a new group +- +- +- +- A request for creating a new group "%1" has been received. +-Do you want to create this group? +- +- +- +- +- Your KeePassXC-Browser settings need to be moved into the database settings. +-This is necessary to maintain your current browser connections. +-Would you like to migrate your existing settings now? +- +- +- +- Don't show this warning again +- Don't show this warning again +- +- +- You have received an association request for the following database: +-%1 +- +-Give the connection a unique name or ID, for example: +-chrome-laptop. +- +- +- +- +- BrowserSettingsWidget +- +- Dialog +- Dialog +- +- +- This is required for accessing your databases with KeePassXC-Browser +- This is required for accessing your databases with KeePassXC-Browser +- +- +- Enable browser integration +- +- +- +- General +- General +- +- +- Browsers installed as snaps are currently not supported. +- +- +- +- Enable integration for these browsers: +- Enable integration for these browsers: +- +- +- Vivaldi +- +- +- +- &Edge +- +- +- +- Firefox +- +- +- +- Tor Browser +- +- +- +- Brave +- +- +- +- Google Chrome +- +- +- +- Chromium +- +- +- +- Show a notification when credentials are requested +- Credentials mean login data requested via browser extension +- +- +- +- Request to unlock the database if it is locked +- +- +- +- Only entries with the same scheme (http://, https://, ...) are returned. +- Only entries with the same scheme (http://, https://, ...) are returned. +- +- +- Match URL scheme (e.g., https://...) +- +- +- +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- +- +- Return only best-matching credentials +- +- +- +- Returns expired credentials. String [expired] is added to the title. +- +- +- +- Allow returning expired credentials +- +- +- +- All databases connected to the extension will return matching credentials. +- +- +- +- Search in all opened databases for matching credentials +- Credentials mean login data requested via browser extension +- +- +- +- Sort matching credentials by title +- Credentials mean login data requested via browser extension +- +- +- +- Sort matching credentials by username +- Credentials mean login data requested via browser extension +- +- +- +- Advanced +- Advanced +- +- +- Never ask before accessing credentials +- Credentials mean login data requested via browser extension +- +- +- +- Never ask before updating credentials +- Credentials mean login data requested via browser extension +- +- +- +- Do not ask permission for HTTP Basic Auth +- An extra HTTP Basic Auth setting +- +- +- +- Automatically creating or updating string fields is not supported. +- Automatically creating or updating string fields is not supported. +- +- +- Return advanced string fields which start with "KPH: " +- +- +- +- Don't display the popup suggesting migration of legacy KeePassHTTP settings. +- +- +- +- Do not prompt for KeePassHTTP settings migration. +- +- +- +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- +- +- Update native messaging manifest files at startup +- +- +- +- Use a custom proxy location if you installed a proxy manually. +- Use a custom proxy location if you installed a proxy manually. +- +- +- Use a custom proxy location: +- Meant is the proxy for KeePassXC-Browser +- +- +- +- Custom proxy location field +- +- +- +- Browser for custom proxy file +- +- +- +- Browse... +- Button for opening file dialog +- Browse... +- +- +- Use a custom browser configuration location: +- +- +- +- Browser type: +- +- +- +- Toolbar button style +- +- +- +- Config Location: +- +- +- +- Custom browser location field +- +- +- +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- +- +- +- Browse for custom browser path +- +- +- +- Custom extension ID: +- +- +- +- Custom extension ID +- +- +- +- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 +- +- +- +- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 +- +- +- +- Please see special instructions for browser extension use below +- +- +- +- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. +- +- +- +- <b>Warning:</b> The following options can be dangerous! +- <b>Warning:</b> The following options can be dangerous! +- +- +- Executable Files +- Executable Files +- +- +- All Files +- All Files +- +- +- Select custom proxy location +- Select custom proxy location +- +- +- Select native messaging host folder location +- +- +- +- +- CloneDialog +- +- Clone Options +- Clone Options +- +- +- Append ' - Clone' to title +- Append ' - Clone' to title +- +- +- Replace username and password with references +- Replace username and password with references +- +- +- Copy history +- Copy history +- +- +- +- CsvImportWidget +- +- Import CSV fields +- Import CSV fields +- +- +- filename +- filename +- +- +- size, rows, columns +- size, rows, columns +- +- +- Encoding +- Encoding +- +- +- Codec +- Codec +- +- +- Text is qualified by +- Text is qualified by +- +- +- Fields are separated by +- Fields are separated by +- +- +- Comments start with +- Comments start with +- +- +- Consider '\' an escape character +- Consider '\' an escape character +- +- +- Preview +- Preview +- +- +- Imported from CSV file +- Imported from CSV file +- +- +- Original data: +- Original data: +- +- +- Error +- Error +- +- +- Error(s) detected in CSV file! +- Error(s) detected in CSV file! +- +- +- [%n more message(s) skipped] +- +- [%n more message(s) skipped] +- [%n more message(s) skipped] +- +- +- +- CSV import: writer has errors: +-%1 +- CSV import: writer has errors: +-%1 +- +- +- Text qualification +- +- +- +- Field separation +- +- +- +- Number of header lines to discard +- +- +- +- CSV import preview +- +- +- +- Column Association +- +- +- +- Last Modified +- Last Modified +- +- +- Password +- Password +- +- +- Created +- Created +- +- +- Notes +- Notes +- +- +- Title +- Title +- +- +- Group +- Group +- +- +- URL +- URL +- +- +- Username +- Username +- +- +- Header lines skipped +- +- +- +- First line has field names +- +- +- +- Not Present +- +- +- +- Column %1 +- +- +- +- TOTP +- TOTP +- +- +- Icon +- Icon +- +- +- +- CsvParserModel +- +- %n column(s) +- +- %n column(s) +- %n column(s) +- +- +- +- %1, %2, %3 +- file info: bytes, rows, columns +- %1, %2, %3 +- +- +- %n byte(s) +- +- %n byte(s) +- %n byte(s) +- +- +- +- %n row(s) +- +- %n row(s) +- %n row(s) +- +- +- +- +- Database +- +- File %1 does not exist. +- File %1 does not exist. +- +- +- Unable to open file %1. +- Unable to open file %1. +- +- +- Error while reading the database: %1 +- Error while reading the database: %1 +- +- +- File cannot be written as it is opened in read-only mode. +- File cannot be written as it is opened in read-only mode. +- +- +- Key not transformed. This is a bug, please report it to the developers! +- +- +- +- %1 +-Backup database located at %2 +- +- +- +- Could not save, database does not point to a valid file. +- +- +- +- Could not save, database file is read-only. +- +- +- +- Database file has unmerged changes. +- +- +- +- Recycle Bin +- Recycle Bin +- +- +- Passwords +- Root group name +- Passwords +- +- +- Database save is already in progress. +- +- +- +- Could not save, database has not been initialized! +- +- +- +- +- DatabaseOpenDialog +- +- Unlock Database - KeePassXC +- Unlock Database - KeePassXC +- +- +- +- DatabaseOpenWidget +- +- Key File: +- Key File: +- +- +- Refresh +- Refresh +- +- +- Don't show this warning again +- Don't show this warning again +- +- +- All files +- All files +- +- +- Key files +- Key files +- +- +- Select key file +- Select key file +- +- +- Failed to open key file: %1 +- +- +- +- Unlock KeePassXC Database +- +- +- +- Enter Password: +- +- +- +- Password field +- +- +- +- Hardware key slot selection +- +- +- +- Browse for key file +- +- +- +- Browse... +- Browse... +- +- +- Refresh hardware tokens +- +- +- +- Hardware Key: +- +- +- +- Hardware key help +- +- +- +- TouchID for Quick Unlock +- +- +- +- Unlock failed and no password given +- +- +- +- Unlocking the database failed and you did not enter a password. +-Do you want to retry with an "empty" password instead? +- +-To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. +- +- +- +- Retry with empty password +- +- +- +- Enter Additional Credentials (if any): +- +- +- +- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +-<p>Click for more information...</p> +- +- +- +- Key file help +- +- +- +- ? +- +- +- +- Cannot use database file as key file +- +- +- +- You cannot use your database file as a key file. +-If you do not have a key file, please leave the field empty. +- +- +- +- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> +- +- +- +- Key file to unlock the database +- +- +- +- Please touch the button on your YubiKey! +- Please touch the button on your YubiKey! +- +- +- Detecting hardware keys… +- +- +- +- No hardware keys detected +- +- +- +- Select hardware key… +- +- +- +- Old key file format +- +- +- +- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> +- +- +- +- +- DatabaseSettingWidgetMetaData +- +- Passwords +- Passwords +- +- +- +- DatabaseSettingsDialog +- +- Advanced Settings +- Advanced Settings +- +- +- General +- General +- +- +- Security +- Security +- +- +- Encryption Settings +- Encryption Settings +- +- +- Browser Integration +- Browser Integration +- +- +- Database Credentials +- +- +- +- +- DatabaseSettingsWidgetBrowser +- +- KeePassXC-Browser settings +- KeePassXC-Browser settings +- +- +- Stored keys +- Stored keys +- +- +- Remove +- Remove +- +- +- Delete the selected key? +- Delete the selected key? +- +- +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- +- +- Key +- Key +- +- +- Value +- Value +- +- +- Enable Browser Integration to access these settings. +- Enable Browser Integration to access these settings. +- +- +- Disconnect all browsers +- Disconnect all browsers +- +- +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- +- +- KeePassXC: No keys found +- KeePassXC: No keys found +- +- +- No shared encryption keys found in KeePassXC settings. +- No shared encryption keys found in KeePassXC settings. +- +- +- KeePassXC: Removed keys from database +- KeePassXC: Removed keys from database +- +- +- Successfully removed %n encryption key(s) from KeePassXC settings. +- +- Successfully removed %n encryption key(s) from KeePassXC settings. +- Successfully removed %n encryption key(s) from KeePassXC settings. +- +- +- +- Forget all site-specific settings on entries +- Forget all site-specific settings on entries +- +- +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- +- +- Removing stored permissions… +- Removing stored permissions… +- +- +- Abort +- Abort +- +- +- KeePassXC: Removed permissions +- KeePassXC: Removed permissions +- +- +- Successfully removed permissions from %n entry(s). +- +- Successfully removed permissions from %n entry(s). +- Successfully removed permissions from %n entry(s). +- +- +- +- KeePassXC: No entry with permissions found! +- KeePassXC: No entry with permissions found! +- +- +- The active database does not contain an entry with permissions. +- The active database does not contain an entry with permissions. +- +- +- Move KeePassHTTP attributes to custom data +- Move KeePassHTTP attributes to custom data +- +- +- Do you really want to move all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- Do you really want to move all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- +- +- Stored browser keys +- +- +- +- Remove selected key +- +- +- +- Move KeePassHTTP attributes to KeePassXC-Browser custom data +- +- +- +- Refresh database root group ID +- +- +- +- Created +- Created +- +- +- Refresh database ID +- +- +- +- Do you really want refresh the database ID? +-This is only necessary if your database is a copy of another and the browser extension cannot connect. +- +- +- +- +- DatabaseSettingsWidgetDatabaseKey +- +- Add additional protection... +- Add additional protection... +- +- +- No password set +- No password set +- +- +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- +- +- Continue without password +- +- +- +- No encryption key added +- No encryption key added +- +- +- You must add at least one encryption key to secure your database! +- You must add at least one encryption key to secure your database! +- +- +- Unknown error +- Unknown error +- +- +- Failed to change database credentials +- +- +- +- +- DatabaseSettingsWidgetEncryption +- +- Encryption Algorithm: +- Encryption Algorithm: +- +- +- AES: 256 Bit (default) +- AES: 256 Bit (default) +- +- +- Twofish: 256 Bit +- Twofish: 256 Bit +- +- +- Key Derivation Function: +- Key Derivation Function: +- +- +- Transform rounds: +- Transform rounds: +- +- +- Memory Usage: +- Memory Usage: +- +- +- Parallelism: +- Parallelism: +- +- +- Decryption Time: +- Decryption Time: +- +- +- ?? s +- ?? s +- +- +- Change +- Change +- +- +- Higher values offer more protection, but opening the database will take longer. +- Higher values offer more protection, but opening the database will take longer. +- +- +- Database format: +- Database format: +- +- +- This is only important if you need to use your database with other programs. +- This is only important if you need to use your database with other programs. +- +- +- KDBX 4.0 (recommended) +- KDBX 4.0 (recommended) +- +- +- KDBX 3.1 +- KDBX 3.1 +- +- +- unchanged +- Database decryption time is unchanged +- unchanged +- +- +- Number of rounds too high +- Key transformation rounds +- Number of rounds too high +- +- +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or days (or even longer) to open! +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or days (or even longer) to open! +- +- +- Understood, keep number +- Understood, keep number +- +- +- Cancel +- Cancel +- +- +- Number of rounds too low +- Key transformation rounds +- Number of rounds too low +- +- +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database may be too easy to crack! +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database may be too easy to crack! +- +- +- KDF unchanged +- KDF unchanged +- +- +- Failed to transform key with new KDF parameters; KDF unchanged. +- Failed to transform key with new KDF parameters; KDF unchanged. +- +- +- MiB +- Abbreviation for Mebibytes (KDF settings) +- +- MiB +- MiB +- +- +- +- thread(s) +- Threads for parallel execution (KDF settings) +- +- thread(s) +- thread(s) +- +- +- +- Change existing decryption time +- +- +- +- Decryption time in seconds +- +- +- +- Database format +- +- +- +- Encryption algorithm +- +- +- +- Key derivation function +- +- +- +- Transform rounds +- +- +- +- Memory usage +- +- +- +- Parallelism +- +- +- +- ?? ms +- +- +- +- ? s +- +- +- +- +- DatabaseSettingsWidgetFdoSecrets +- +- Exposed Entries +- +- +- +- Don't expose this database +- +- +- +- Expose entries under this group: +- +- +- +- Enable Secret Service to access these settings. +- +- +- +- +- DatabaseSettingsWidgetGeneral +- +- Database Meta Data +- Database Meta Data +- +- +- Database name: +- Database name: +- +- +- Database description: +- Database description: +- +- +- Default username: +- Default username: +- +- +- History Settings +- History Settings +- +- +- Max. history items: +- Max. history items: +- +- +- Max. history size: +- Max. history size: +- +- +- MiB +- MiB +- +- +- Use recycle bin +- Use recycle bin +- +- +- Additional Database Settings +- Additional Database Settings +- +- +- Database name field +- +- +- +- Database description field +- +- +- +- Default username field +- +- +- +- Maximum number of history items per entry +- +- +- +- Maximum size of history per entry +- +- +- +- Delete Recycle Bin +- +- +- +- Do you want to delete the current recycle bin and all its contents? +-This action is not reversible. +- +- +- +- (old) +- +- +- +- Enable compression (recommended) +- +- +- +- +- DatabaseSettingsWidgetKeeShare +- +- Sharing +- Sharing +- +- +- Breadcrumb +- Breadcrumb +- +- +- Type +- Type +- +- +- Path +- Path +- +- +- Last Signer +- Last Signer +- +- +- Certificates +- Certificates +- +- +- > +- Breadcrumb separator +- > +- +- +- +- DatabaseSettingsWidgetMetaDataSimple +- +- Database Name: +- Database Name: +- +- +- Description: +- Description: +- +- +- Database name field +- +- +- +- Database description field +- +- +- +- +- DatabaseTabWidget +- +- KeePass 2 Database +- KeePass 2 Database +- +- +- All files +- All files +- +- +- Open database +- Open database +- +- +- CSV file +- CSV file +- +- +- Merge database +- Merge database +- +- +- Open KeePass 1 database +- Open KeePass 1 database +- +- +- KeePass 1 database +- KeePass 1 database +- +- +- Export database to CSV file +- Export database to CSV file +- +- +- Writing the CSV file failed. +- Writing the CSV file failed. +- +- +- Database creation error +- Database creation error +- +- +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- +- +- Select CSV file +- Select CSV file +- +- +- New Database +- New Database +- +- +- %1 [New Database] +- Database tab name modifier +- %1 [New Database] +- +- +- %1 [Locked] +- Database tab name modifier +- %1 [Locked] +- +- +- %1 [Read-only] +- Database tab name modifier +- %1 [Read-only] +- +- +- Failed to open %1. It either does not exist or is not accessible. +- +- +- +- Export database to HTML file +- +- +- +- HTML file +- +- +- +- Writing the HTML file failed. +- +- +- +- Export Confirmation +- +- +- +- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? +- +- +- +- Open OPVault +- +- +- +- +- DatabaseWidget +- +- Searching... +- Searching... +- +- +- Do you really want to delete the entry "%1" for good? +- Do you really want to delete the entry "%1" for good? +- +- +- Do you really want to move entry "%1" to the recycle bin? +- Do you really want to move entry "%1" to the recycle bin? +- +- +- Do you really want to move %n entry(s) to the recycle bin? +- +- Do you really want to move %n entry(s) to the recycle bin? +- Do you really want to move %n entry(s) to the recycle bin? +- +- +- +- Execute command? +- Execute command? +- +- +- Do you really want to execute the following command?<br><br>%1<br> +- Do you really want to execute the following command?<br><br>%1<br> +- +- +- Remember my choice +- Remember my choice +- +- +- Do you really want to delete the group "%1" for good? +- Do you really want to delete the group "%1" for good? +- +- +- No current database. +- No current database. +- +- +- No source database, nothing to do. +- No source database, nothing to do. +- +- +- Search Results (%1) +- Search Results (%1) +- +- +- No Results +- No Results +- +- +- File has changed +- File has changed +- +- +- The database file has changed. Do you want to load the changes? +- The database file has changed. Do you want to load the changes? +- +- +- Merge Request +- Merge Request +- +- +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- +- +- Empty recycle bin? +- Empty recycle bin? +- +- +- Are you sure you want to permanently delete everything from your recycle bin? +- Are you sure you want to permanently delete everything from your recycle bin? +- +- +- Do you really want to delete %n entry(s) for good? +- +- Do you really want to delete %n entry(s) for good? +- Do you really want to delete %n entry(s) for good? +- +- +- +- Delete entry(s)? +- +- Delete entry(s)? +- Delete entry(s)? +- +- +- +- Move entry(s) to recycle bin? +- +- Move entry(s) to recycle bin? +- Move entry(s) to recycle bin? +- +- +- +- Lock Database? +- Lock Database? +- +- +- You are editing an entry. Discard changes and lock anyway? +- You are editing an entry. Discard changes and lock anyway? +- +- +- "%1" was modified. +-Save changes? +- "%1" was modified. +-Save changes? +- +- +- Database was modified. +-Save changes? +- Database was modified. +-Save changes? +- +- +- Save changes? +- Save changes? +- +- +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- +- +- Disable safe saves? +- Disable safe saves? +- +- +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- +- +- Passwords +- Passwords +- +- +- Save database as +- Save database as +- +- +- KeePass 2 Database +- KeePass 2 Database +- +- +- Replace references to entry? +- Replace references to entry? +- +- +- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? +- +- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? +- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? +- +- +- +- Delete group +- Delete group +- +- +- Move group to recycle bin? +- Move group to recycle bin? +- +- +- Do you really want to move the group "%1" to the recycle bin? +- Do you really want to move the group "%1" to the recycle bin? +- +- +- Successfully merged the database files. +- Successfully merged the database files. +- +- +- Database was not modified by merge operation. +- Database was not modified by merge operation. +- +- +- Shared group... +- +- +- +- Writing the database failed: %1 +- Writing the database failed: %1 +- +- +- This database is opened in read-only mode. Autosave is disabled. +- +- +- +- Save database backup +- +- +- +- Could not find database file: %1 +- +- +- +- +- EditEntryWidget +- +- Entry +- Entry +- +- +- Advanced +- Advanced +- +- +- Icon +- Icon +- +- +- Auto-Type +- Auto-Type +- +- +- Properties +- Properties +- +- +- History +- History +- +- +- SSH Agent +- SSH Agent +- +- +- n/a +- n/a +- +- +- (encrypted) +- (encrypted) +- +- +- Select private key +- Select private key +- +- +- Entry history +- Entry history +- +- +- Add entry +- Add entry +- +- +- Edit entry +- Edit entry +- +- +- New attribute +- New attribute +- +- +- Are you sure you want to remove this attribute? +- Are you sure you want to remove this attribute? +- +- +- Tomorrow +- Tomorrow +- +- +- %n week(s) +- +- %n week(s) +- %n week(s) +- +- +- +- %n month(s) +- +- %n month(s) +- %n month(s) +- +- +- +- Entry updated successfully. +- Entry updated successfully. +- +- +- New attribute %1 +- New attribute %1 +- +- +- %n year(s) +- +- %n year(s) +- %n year(s) +- +- +- +- Confirm Removal +- Confirm Removal +- +- +- Browser Integration +- Browser Integration +- +- +- <empty URL> +- +- +- +- Are you sure you want to remove this URL? +- +- +- +- Reveal +- Reveal +- +- +- Hide +- +- +- +- Unsaved Changes +- +- +- +- Would you like to save changes to this entry? +- +- +- +- [PROTECTED] Press Reveal to view or edit +- +- +- +- Invalid Entry +- +- +- +- An external merge operation has invalidated this entry. +-Unfortunately, any changes made have been lost. +- +- +- +- +- EditEntryWidgetAdvanced +- +- Additional attributes +- Additional attributes +- +- +- Add +- Add +- +- +- Remove +- Remove +- +- +- Edit Name +- Edit Name +- +- +- Protect +- Protect +- +- +- Reveal +- Reveal +- +- +- Attachments +- Attachments +- +- +- Foreground Color: +- Foreground Color: +- +- +- Background Color: +- Background Color: +- +- +- Attribute selection +- +- +- +- Attribute value +- +- +- +- Add a new attribute +- +- +- +- Remove selected attribute +- +- +- +- Edit attribute name +- +- +- +- Toggle attribute protection +- +- +- +- Show a protected attribute +- +- +- +- Foreground color selection +- +- +- +- Background color selection +- +- +- +- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> +- +- +- +- Exclude from database reports +- +- +- +- +- EditEntryWidgetAutoType +- +- Enable Auto-Type for this entry +- Enable Auto-Type for this entry +- +- +- Window Associations +- Window Associations +- +- +- + +- + +- +- +- - +- - +- +- +- Window title: +- Window title: +- +- +- Use a specific sequence for this association: +- Use a specific sequence for this association: +- +- +- Custom Auto-Type sequence +- +- +- +- Open Auto-Type help webpage +- +- +- +- Existing window associations +- +- +- +- Add new window association +- +- +- +- Remove selected window association +- +- +- +- You can use an asterisk (*) to match everything +- +- +- +- Set the window association title +- +- +- +- You can use an asterisk to match everything +- +- +- +- Custom Auto-Type sequence for this window +- +- +- +- Inherit default Auto-Type sequence from the group +- +- +- +- Use custom Auto-Type sequence: +- +- +- +- +- EditEntryWidgetBrowser +- +- These settings affect to the entry's behaviour with the browser extension. +- +- +- +- General +- General +- +- +- Skip Auto-Submit for this entry +- +- +- +- Hide this entry from the browser extension +- +- +- +- Additional URL's +- +- +- +- Add +- Add +- +- +- Remove +- Remove +- +- +- Edit +- +- +- +- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. +- +- +- +- Use this entry only with HTTP Basic Auth +- +- +- +- +- EditEntryWidgetHistory +- +- Show +- Show +- +- +- Restore +- Restore +- +- +- Delete +- Delete +- +- +- Delete all +- Delete all +- +- +- Entry history selection +- +- +- +- Show entry at selected history state +- +- +- +- Restore entry to selected history state +- +- +- +- Delete selected history state +- +- +- +- Delete all history +- +- +- +- +- EditEntryWidgetMain +- +- URL: +- URL: +- +- +- Password: +- Password: +- +- +- Title: +- Title: +- +- +- Presets +- Presets +- +- +- Toggle the checkbox to reveal the notes section. +- Toggle the checkbox to reveal the notes section. +- +- +- Username: +- Username: +- +- +- Url field +- +- +- +- Download favicon for URL +- +- +- +- Password field +- +- +- +- Toggle notes visible +- +- +- +- Expiration field +- +- +- +- Expiration Presets +- +- +- +- Expiration presets +- +- +- +- Notes field +- +- +- +- Title field +- +- +- +- Username field +- +- +- +- Toggle expiration +- +- +- +- Notes: +- +- +- +- https://example.com +- +- +- +- Expires: +- +- +- +- Edit Entry +- +- +- +- +- EditEntryWidgetSSHAgent +- +- Form +- Form +- +- +- Remove key from agent after +- Remove key from agent after +- +- +- seconds +- seconds +- +- +- Fingerprint +- Fingerprint +- +- +- Remove key from agent when database is closed/locked +- Remove key from agent when database is closed/locked +- +- +- Public key +- Public key +- +- +- Add key to agent when database is opened/unlocked +- Add key to agent when database is opened/unlocked +- +- +- Comment +- Comment +- +- +- Decrypt +- Decrypt +- +- +- n/a +- n/a +- +- +- Copy to clipboard +- Copy to clipboard +- +- +- Private key +- Private key +- +- +- External file +- External file +- +- +- Browse... +- Button for opening file dialog +- Browse... +- +- +- Attachment +- Attachment +- +- +- Add to agent +- Add to agent +- +- +- Remove from agent +- Remove from agent +- +- +- Require user confirmation when this key is used +- Require user confirmation when this key is used +- +- +- Remove key from agent after specified seconds +- +- +- +- Browser for key file +- +- +- +- External key file +- +- +- +- Select attachment file +- +- +- +- +- EditGroupWidget +- +- Group +- Group +- +- +- Icon +- Icon +- +- +- Properties +- Properties +- +- +- Add group +- Add group +- +- +- Edit group +- Edit group +- +- +- Enable +- Enable +- +- +- Disable +- Disable +- +- +- Inherit from parent group (%1) +- Inherit from parent group (%1) +- +- +- Entry has unsaved changes +- Entry has unsaved changes +- +- +- +- EditGroupWidgetKeeShare +- +- Type: +- Type: +- +- +- Path: +- Path: +- +- +- Password: +- Password: +- +- +- Inactive +- Inactive +- +- +- KeeShare unsigned container +- KeeShare unsigned container +- +- +- KeeShare signed container +- KeeShare signed container +- +- +- Select import source +- Select import source +- +- +- Select export target +- Select export target +- +- +- Select import/export file +- Select import/export file +- +- +- Clear +- Clear +- +- +- Import +- Import +- +- +- Export +- Export +- +- +- Synchronize +- +- +- +- Your KeePassXC version does not support sharing this container type. +-Supported extensions are: %1. +- +- +- +- %1 is already being exported by this database. +- +- +- +- %1 is already being imported by this database. +- +- +- +- %1 is being imported and exported by different groups in this database. +- +- +- +- KeeShare is currently disabled. You can enable import/export in the application settings. +- KeeShare is a proper noun +- +- +- +- Database export is currently disabled by application settings. +- +- +- +- Database import is currently disabled by application settings. +- +- +- +- Sharing mode field +- +- +- +- Path to share file field +- +- +- +- Password field +- +- +- +- Clear fields +- +- +- +- Browse for share file +- +- +- +- Browse... +- Browse... +- +- +- +- EditGroupWidgetMain +- +- Name field +- +- +- +- Notes field +- +- +- +- Toggle expiration +- +- +- +- Auto-Type toggle for this and sub groups +- +- +- +- Expiration field +- +- +- +- Search toggle for this and sub groups +- +- +- +- Default auto-type sequence field +- +- +- +- Expires: +- +- +- +- Use default Auto-Type sequence of parent group +- +- +- +- Auto-Type: +- +- +- +- Search: +- +- +- +- Notes: +- +- +- +- Name: +- +- +- +- Set default Auto-Type sequence +- +- +- +- Edit Group +- +- +- +- +- EditWidgetIcons +- +- Add custom icon +- Add custom icon +- +- +- Delete custom icon +- Delete custom icon +- +- +- Download favicon +- Download favicon +- +- +- Unable to fetch favicon. +- Unable to fetch favicon. +- +- +- Images +- Images +- +- +- All files +- All files +- +- +- Confirm Delete +- Confirm Delete +- +- +- Select Image(s) +- Select Image(s) +- +- +- Successfully loaded %1 of %n icon(s) +- +- Successfully loaded %1 of %n icon(s) +- Successfully loaded %1 of %n icon(s) +- +- +- +- No icons were loaded +- No icons were loaded +- +- +- %n icon(s) already exist in the database +- +- %n icon(s) already exist in the database +- %n icon(s) already exist in the database +- +- +- +- The following icon(s) failed: +- +- The following icon(s) failed: +- The following icon(s) failed: +- +- +- +- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? +- +- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? +- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? +- +- +- +- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security +- +- +- +- Download favicon for URL +- +- +- +- Apply selected icon to subgroups and entries +- +- +- +- Also apply to child groups +- +- +- +- Also apply to child entries +- +- +- +- Also apply to all children +- +- +- +- Existing icon selected. +- +- +- +- Use default icon +- +- +- +- Use custom icon +- +- +- +- Apply icon to... +- +- +- +- Apply to this group only +- +- +- +- +- EditWidgetProperties +- +- Created: +- Created: +- +- +- Modified: +- Modified: +- +- +- Accessed: +- Accessed: +- +- +- Uuid: +- Uuid: +- +- +- Plugin Data +- Plugin Data +- +- +- Remove +- Remove +- +- +- Delete plugin data? +- Delete plugin data? +- +- +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- +- +- Key +- Key +- +- +- Value +- Value +- +- +- Datetime created +- +- +- +- Datetime modified +- +- +- +- Datetime accessed +- +- +- +- Unique ID +- +- +- +- Plugin data +- +- +- +- Remove selected plugin data +- +- +- +- +- Entry +- +- %1 - Clone +- %1 - Clone +- +- +- +- EntryAttachmentsModel +- +- Name +- Name +- +- +- Size +- Size +- +- +- +- EntryAttachmentsWidget +- +- Form +- Form +- +- +- Add +- Add +- +- +- Remove +- Remove +- +- +- Open +- Open +- +- +- Save +- Save +- +- +- Select files +- Select files +- +- +- Are you sure you want to remove %n attachment(s)? +- +- Are you sure you want to remove %n attachment(s)? +- Are you sure you want to remove %n attachment(s)? +- +- +- +- Save attachments +- Save attachments +- +- +- Unable to create directory: +-%1 +- Unable to create directory: +-%1 +- +- +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- +- +- Confirm overwrite +- Confirm overwrite +- +- +- Unable to save attachments: +-%1 +- Unable to save attachments: +-%1 +- +- +- Unable to open attachment: +-%1 +- Unable to open attachment: +-%1 +- +- +- Unable to open attachments: +-%1 +- Unable to open attachments: +-%1 +- +- +- Confirm remove +- Confirm remove +- +- +- Unable to open file(s): +-%1 +- +- Unable to open file(s): +-%1 +- Unable to open file(s): +-%1 +- +- +- +- Attachments +- Attachments +- +- +- Add new attachment +- +- +- +- Remove selected attachment +- +- +- +- Open selected attachment +- +- +- +- Save selected attachment to disk +- +- +- +- %1 is a big file (%2 MB). +-Your database may get very large and reduce performance. +- +-Are you sure to add this file? +- +- +- +- Confirm Attachment +- +- +- +- +- EntryAttributesModel +- +- Name +- Name +- +- +- +- EntryHistoryModel +- +- Last modified +- Last modified +- +- +- Title +- Title +- +- +- Username +- Username +- +- +- URL +- URL +- +- +- +- EntryModel +- +- Ref: +- Reference abbreviation +- Ref: +- +- +- Group +- Group +- +- +- Title +- Title +- +- +- Username +- Username +- +- +- URL +- URL +- +- +- Never +- Never +- +- +- Password +- Password +- +- +- Notes +- Notes +- +- +- Expires +- Expires +- +- +- Created +- Created +- +- +- Modified +- Modified +- +- +- Accessed +- Accessed +- +- +- Attachments +- Attachments +- +- +- Size +- Size +- +- +- Group name +- +- +- +- Entry title +- +- +- +- Entry notes +- +- +- +- Entry expires at +- +- +- +- Creation date +- +- +- +- Last modification date +- +- +- +- Last access date +- +- +- +- Attached files +- +- +- +- Entry size +- +- +- +- Has attachments +- +- +- +- Has TOTP one-time password +- +- +- +- +- EntryPreviewWidget +- +- Close +- Close +- +- +- General +- General +- +- +- Username +- Username +- +- +- Password +- Password +- +- +- Expiration +- Expiration +- +- +- URL +- URL +- +- +- Attributes +- Attributes +- +- +- Attachments +- Attachments +- +- +- Notes +- Notes +- +- +- Autotype +- Autotype +- +- +- Window +- Window +- +- +- Sequence +- Sequence +- +- +- Searching +- Searching +- +- +- Search +- Search +- +- +- Clear +- Clear +- +- +- Never +- Never +- +- +- [PROTECTED] +- [PROTECTED] +- +- +- Enabled +- Enabled +- +- +- Disabled +- Disabled +- +- +- Share +- Share +- +- +- Display current TOTP value +- +- +- +- Advanced +- Advanced +- +- +- Default Sequence +- +- +- +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- attributes line +- +- +- +- +- EntryURLModel +- +- Invalid URL +- +- +- +- +- EntryView +- +- Fit to window +- Fit to window +- +- +- Fit to contents +- Fit to contents +- +- +- Reset to defaults +- Reset to defaults +- +- +- Has attachments +- Entry attachment icon toggle +- +- +- +- Has TOTP +- Entry TOTP icon toggle +- +- +- +- +- FdoSecrets::Service +- +- Failed to register DBus service at %1.<br/> +- +- +- +- +- FdoSecrets::SettingsDatabaseModel +- +- File Name +- +- +- +- Group +- Group +- +- +- Manage +- +- +- +- Unlock to show +- +- +- +- None +- +- +- +- +- FdoSecrets::SettingsSessionModel +- +- Application +- +- +- +- Manage +- +- +- +- +- FdoSecretsPlugin +- +- <b>Fdo Secret Service:</b> %1 +- +- +- +- Unknown +- Unknown PID +- Unknown +- +- +- Unknown +- Unknown executable path +- Unknown +- +- +- <i>PID: %1, Executable: %2</i> +- <i>PID: 1234, Executable: /path/to/exe</i> +- +- +- +- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. +- +- +- +- +- Group +- +- [empty] +- group has no children +- [empty] +- +- +- +- HibpDownloader +- +- Online password validation failed +- +- +- +- +- IconDownloaderDialog +- +- Download Favicons +- +- +- +- Cancel +- Cancel +- +- +- Having trouble downloading icons? +-You can enable the DuckDuckGo website icon service in the security section of the application settings. +- +- +- +- Close +- Close +- +- +- URL +- URL +- +- +- Status +- Status +- +- +- Please wait, processing entry list... +- +- +- +- Downloading... +- +- +- +- Ok +- Ok +- +- +- Already Exists +- +- +- +- Download Failed +- +- +- +- Downloading favicons (%1/%2)... +- +- +- +- +- KMessageWidget +- +- &Close +- &Close +- +- +- Close message +- Close message +- +- +- +- Kdbx3Reader +- +- missing database headers +- missing database headers +- +- +- Header doesn't match hash +- Header doesn't match hash +- +- +- Invalid header id size +- Invalid header id size +- +- +- Invalid header field length +- Invalid header field length +- +- +- Invalid header data length +- Invalid header data length +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- +- +- +- Unable to calculate database key +- +- +- +- Unable to issue challenge-response: %1 +- +- +- +- +- Kdbx3Writer +- +- Unable to issue challenge-response: %1 +- +- +- +- Unable to calculate database key +- +- +- +- +- Kdbx4Reader +- +- missing database headers +- missing database headers +- +- +- Invalid header checksum size +- Invalid header checksum size +- +- +- Header SHA256 mismatch +- Header SHA256 mismatch +- +- +- Unknown cipher +- Unknown cipher +- +- +- Invalid header id size +- Invalid header id size +- +- +- Invalid header field length +- Invalid header field length +- +- +- Invalid header data length +- Invalid header data length +- +- +- Failed to open buffer for KDF parameters in header +- Failed to open buffer for KDF parameters in header +- +- +- Unsupported key derivation function (KDF) or invalid parameters +- Unsupported key derivation function (KDF) or invalid parameters +- +- +- Legacy header fields found in KDBX4 file. +- Legacy header fields found in KDBX4 file. +- +- +- Invalid inner header id size +- Invalid inner header id size +- +- +- Invalid inner header field length +- Invalid inner header field length +- +- +- Invalid inner header binary size +- Invalid inner header binary size +- +- +- Unsupported KeePass variant map version. +- Translation: variant map = data structure for storing meta data +- Unsupported KeePass variant map version. +- +- +- Invalid variant map entry name length +- Translation: variant map = data structure for storing meta data +- Invalid variant map entry name length +- +- +- Invalid variant map entry name data +- Translation: variant map = data structure for storing meta data +- Invalid variant map entry name data +- +- +- Invalid variant map entry value length +- Translation: variant map = data structure for storing meta data +- Invalid variant map entry value length +- +- +- Invalid variant map entry value data +- Translation comment: variant map = data structure for storing meta data +- Invalid variant map entry value data +- +- +- Invalid variant map Bool entry value length +- Translation: variant map = data structure for storing meta data +- Invalid variant map Bool entry value length +- +- +- Invalid variant map Int32 entry value length +- Translation: variant map = data structure for storing meta data +- Invalid variant map Int32 entry value length +- +- +- Invalid variant map UInt32 entry value length +- Translation: variant map = data structure for storing meta data +- Invalid variant map UInt32 entry value length +- +- +- Invalid variant map Int64 entry value length +- Translation: variant map = data structure for storing meta data +- Invalid variant map Int64 entry value length +- +- +- Invalid variant map UInt64 entry value length +- Translation: variant map = data structure for storing meta data +- Invalid variant map UInt64 entry value length +- +- +- Invalid variant map entry type +- Translation: variant map = data structure for storing meta data +- Invalid variant map entry type +- +- +- Invalid variant map field type size +- Translation: variant map = data structure for storing meta data +- Invalid variant map field type size +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- +- +- +- (HMAC mismatch) +- +- +- +- Unable to calculate database key: %1 +- +- +- +- +- Kdbx4Writer +- +- Invalid symmetric cipher algorithm. +- Invalid symmetric cipher algorithm. +- +- +- Invalid symmetric cipher IV size. +- IV = Initialization Vector for symmetric cipher +- Invalid symmetric cipher IV size. +- +- +- Failed to serialize KDF parameters variant map +- Translation comment: variant map = data structure for storing meta data +- Failed to serialize KDF parameters variant map +- +- +- Unable to calculate database key: %1 +- +- +- +- +- KdbxReader +- +- Unsupported cipher +- Unsupported cipher +- +- +- Invalid compression flags length +- Invalid compression flags length +- +- +- Unsupported compression algorithm +- Unsupported compression algorithm +- +- +- Invalid master seed size +- Invalid master seed size +- +- +- Invalid transform seed size +- Invalid transform seed size +- +- +- Invalid transform rounds size +- Invalid transform rounds size +- +- +- Invalid start bytes size +- Invalid start bytes size +- +- +- Invalid random stream id size +- Invalid random stream id size +- +- +- Invalid inner random stream cipher +- Invalid inner random stream cipher +- +- +- Not a KeePass database. +- Not a KeePass database. +- +- +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- +- +- Unsupported KeePass 2 database version. +- Unsupported KeePass 2 database version. +- +- +- Invalid cipher uuid length: %1 (length=%2) +- Invalid cipher uuid length: %1 (length=%2) +- +- +- Unable to parse UUID: %1 +- Unable to parse UUID: %1 +- +- +- Failed to read database file. +- Failed to read database file. +- +- +- +- KdbxXmlReader +- +- XML parsing failure: %1 +- XML parsing failure: %1 +- +- +- No root group +- No root group +- +- +- Missing icon uuid or data +- Missing icon uuid or data +- +- +- Missing custom data key or value +- Missing custom data key or value +- +- +- Multiple group elements +- Multiple group elements +- +- +- Null group uuid +- Null group uuid +- +- +- Invalid group icon number +- Invalid group icon number +- +- +- Invalid EnableAutoType value +- Invalid EnableAutoType value +- +- +- Invalid EnableSearching value +- Invalid EnableSearching value +- +- +- No group uuid found +- No group uuid found +- +- +- Null DeleteObject uuid +- Null DeleteObject uuid +- +- +- Missing DeletedObject uuid or time +- Missing DeletedObject uuid or time +- +- +- Null entry uuid +- Null entry uuid +- +- +- Invalid entry icon number +- Invalid entry icon number +- +- +- History element in history entry +- History element in history entry +- +- +- No entry uuid found +- No entry uuid found +- +- +- History element with different uuid +- History element with different uuid +- +- +- Duplicate custom attribute found +- Duplicate custom attribute found +- +- +- Entry string key or value missing +- Entry string key or value missing +- +- +- Entry binary key or value missing +- Entry binary key or value missing +- +- +- Auto-type association window or sequence missing +- Auto-type association window or sequence missing +- +- +- Invalid bool value +- Invalid bool value +- +- +- Invalid date time value +- Invalid date time value +- +- +- Invalid color value +- Invalid color value +- +- +- Invalid color rgb part +- Invalid color rgb part +- +- +- Invalid number value +- Invalid number value +- +- +- Invalid uuid value +- Invalid uuid value +- +- +- Unable to decompress binary +- Translator meant is a binary data inside an entry +- Unable to decompress binary +- +- +- XML error: +-%1 +-Line %2, column %3 +- XML error: +-%1 +-Line %2, column %3 +- +- +- +- KeeAgentSettings +- +- Invalid KeeAgent settings file structure. +- +- +- +- Private key is an attachment but no attachments provided. +- +- +- +- Private key is empty +- +- +- +- File too large to be a private key +- File too large to be a private key +- +- +- Failed to open private key +- Failed to open private key +- +- +- +- KeePass1OpenWidget +- +- Unable to open the database. +- Unable to open the database. +- +- +- Import KeePass1 Database +- +- +- +- +- KeePass1Reader +- +- Unable to read keyfile. +- Unable to read keyfile. +- +- +- Not a KeePass database. +- Not a KeePass database. +- +- +- Unsupported encryption algorithm. +- Unsupported encryption algorithm. +- +- +- Unsupported KeePass database version. +- Unsupported KeePass database version. +- +- +- Unable to read encryption IV +- IV = Initialization Vector for symmetric cipher +- Unable to read encryption IV +- +- +- Invalid number of groups +- Invalid number of groups +- +- +- Invalid number of entries +- Invalid number of entries +- +- +- Invalid content hash size +- Invalid content hash size +- +- +- Invalid transform seed size +- Invalid transform seed size +- +- +- Invalid number of transform rounds +- Invalid number of transform rounds +- +- +- Unable to construct group tree +- Unable to construct group tree +- +- +- Root +- Root +- +- +- Key transformation failed +- Key transformation failed +- +- +- Invalid group field type number +- Invalid group field type number +- +- +- Invalid group field size +- Invalid group field size +- +- +- Read group field data doesn't match size +- Read group field data doesn't match size +- +- +- Incorrect group id field size +- Incorrect group id field size +- +- +- Incorrect group creation time field size +- Incorrect group creation time field size +- +- +- Incorrect group modification time field size +- Incorrect group modification time field size +- +- +- Incorrect group access time field size +- Incorrect group access time field size +- +- +- Incorrect group expiry time field size +- Incorrect group expiry time field size +- +- +- Incorrect group icon field size +- Incorrect group icon field size +- +- +- Incorrect group level field size +- Incorrect group level field size +- +- +- Invalid group field type +- Invalid group field type +- +- +- Missing group id or level +- Missing group id or level +- +- +- Missing entry field type number +- Missing entry field type number +- +- +- Invalid entry field size +- Invalid entry field size +- +- +- Read entry field data doesn't match size +- Read entry field data doesn't match size +- +- +- Invalid entry uuid field size +- Invalid entry uuid field size +- +- +- Invalid entry group id field size +- Invalid entry group id field size +- +- +- Invalid entry icon field size +- Invalid entry icon field size +- +- +- Invalid entry creation time field size +- Invalid entry creation time field size +- +- +- Invalid entry modification time field size +- Invalid entry modification time field size +- +- +- Invalid entry expiry time field size +- Invalid entry expiry time field size +- +- +- Invalid entry field type +- Invalid entry field type +- +- +- unable to seek to content position +- unable to seek to content position +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- +- +- +- Unable to calculate database key +- +- +- +- +- KeeShare +- +- Invalid sharing reference +- +- +- +- Inactive share %1 +- +- +- +- Imported from %1 +- Imported from %1 +- +- +- Exported to %1 +- +- +- +- Synchronized with %1 +- +- +- +- Import is disabled in settings +- +- +- +- Export is disabled in settings +- +- +- +- Inactive share +- +- +- +- Imported from +- +- +- +- Exported to +- +- +- +- Synchronized with +- +- +- +- +- KeyComponentWidget +- +- Key Component +- Key Component +- +- +- Key Component Description +- Key Component Description +- +- +- Cancel +- Cancel +- +- +- Key Component set, click to change or remove +- Key Component set, click to change or remove +- +- +- Add %1 +- Add a key component +- Add %1 +- +- +- Change %1 +- Change a key component +- Change %1 +- +- +- Remove %1 +- Remove a key component +- Remove %1 +- +- +- %1 set, click to change or remove +- Change or remove a key component +- %1 set, click to change or remove +- +- +- +- KeyFileEditWidget +- +- Generate +- Generate +- +- +- Key File +- Key File +- +- +- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> +- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> +- +- +- Error loading the key file '%1' +-Message: %2 +- Error loading the key file '%1' +-Message: %2 +- +- +- Key files +- Key files +- +- +- All files +- All files +- +- +- Create Key File... +- Create Key File... +- +- +- Error creating key file +- Error creating key file +- +- +- Unable to create key file: %1 +- Unable to create key file: %1 +- +- +- Select a key file +- Select a key file +- +- +- Key file selection +- +- +- +- Browse for key file +- +- +- +- Browse... +- Browse... +- +- +- Generate a new key file +- +- +- +- Note: Do not use a file that may change as that will prevent you from unlocking your database! +- +- +- +- Invalid Key File +- +- +- +- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. +- +- +- +- Suspicious Key File +- +- +- +- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. +-Are you sure you want to continue with this file? +- +- +- +- Old key file format +- +- +- +- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. +- +- +- +- +- MainWindow +- +- &Database +- &Database +- +- +- &Help +- &Help +- +- +- &Groups +- &Groups +- +- +- &Tools +- &Tools +- +- +- &Quit +- &Quit +- +- +- &About +- &About +- +- +- Database settings +- Database settings +- +- +- Copy username to clipboard +- Copy username to clipboard +- +- +- Copy password to clipboard +- Copy password to clipboard +- +- +- &Settings +- &Settings +- +- +- &Title +- &Title +- +- +- Copy title to clipboard +- Copy title to clipboard +- +- +- &URL +- &URL +- +- +- Copy URL to clipboard +- Copy URL to clipboard +- +- +- &Notes +- &Notes +- +- +- Copy notes to clipboard +- Copy notes to clipboard +- +- +- Copy &TOTP +- Copy &TOTP +- +- +- E&mpty recycle bin +- E&mpty recycle bin +- +- +- Clear history +- Clear history +- +- +- Access error for config file %1 +- Access error for config file %1 +- +- +- Settings +- Settings +- +- +- Toggle window +- Toggle window +- +- +- Quit KeePassXC +- Quit KeePassXC +- +- +- Please touch the button on your YubiKey! +- Please touch the button on your YubiKey! +- +- +- WARNING: You are using an unstable build of KeePassXC! +-There is a high risk of corruption, maintain a backup of your databases. +-This version is not meant for production use. +- WARNING: You are using an unstable build of KeePassXC! +-There is a high risk of corruption, maintain a backup of your databases. +-This version is not meant for production use. +- +- +- &Donate +- &Donate +- +- +- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +-We recommend you use the AppImage available on our downloads page. +- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +-We recommend you use the AppImage available on our downloads page. +- +- +- &Import +- &Import +- +- +- Create a new database +- Create a new database +- +- +- Merge from another KDBX database +- Merge from another KDBX database +- +- +- Add a new entry +- Add a new entry +- +- +- View or edit entry +- View or edit entry +- +- +- Add a new group +- Add a new group +- +- +- Perform &Auto-Type +- Perform &Auto-Type +- +- +- Open &URL +- Open &URL +- +- +- Import a KeePass 1 database +- Import a KeePass 1 database +- +- +- Import a CSV file +- Import a CSV file +- +- +- NOTE: You are using a pre-release version of KeePassXC! +-Expect some bugs and minor issues, this version is not meant for production use. +- NOTE: You are using a pre-release version of KeePassXC! +-Expect some bugs and minor issues, this version is not meant for production use. +- +- +- Check for updates on startup? +- Check for updates on startup? +- +- +- Would you like KeePassXC to check for updates on startup? +- Would you like KeePassXC to check for updates on startup? +- +- +- You can always check for updates manually from the application menu. +- You can always check for updates manually from the application menu. +- +- +- &Export +- +- +- +- Sort &A-Z +- +- +- +- Sort &Z-A +- +- +- +- &Password Generator +- +- +- +- Import a 1Password Vault +- +- +- +- &Getting Started +- +- +- +- &User Guide +- +- +- +- &Keyboard Shortcuts +- +- +- +- &Recent Databases +- +- +- +- &Entries +- +- +- +- Copy Att&ribute +- +- +- +- TOTP +- TOTP +- +- +- View +- +- +- +- Theme +- +- +- +- &Check for Updates +- +- +- +- &Open Database… +- +- +- +- &Save Database +- +- +- +- &Close Database +- +- +- +- &New Database… +- +- +- +- &Merge From Database… +- +- +- +- &New Entry… +- +- +- +- &Edit Entry… +- +- +- +- &Delete Entry… +- +- +- +- &New Group… +- +- +- +- &Edit Group… +- +- +- +- &Delete Group… +- +- +- +- Download All &Favicons… +- +- +- +- Sa&ve Database As… +- +- +- +- Database &Security… +- +- +- +- Database &Reports... +- +- +- +- Statistics, health check, etc. +- +- +- +- &Database Settings… +- +- +- +- &Clone Entry… +- +- +- +- Move u&p +- +- +- +- Move entry one step up +- +- +- +- Move do&wn +- +- +- +- Move entry one step down +- +- +- +- Copy &Username +- +- +- +- Copy &Password +- +- +- +- Download &Favicon +- +- +- +- &Lock Databases +- +- +- +- &CSV File… +- +- +- +- &HTML File… +- +- +- +- KeePass 1 Database… +- +- +- +- 1Password Vault… +- +- +- +- CSV File… +- +- +- +- Show TOTP +- +- +- +- Show QR Code +- +- +- +- Set up TOTP… +- +- +- +- Report a &Bug +- +- +- +- Open Getting Started Guide +- +- +- +- &Online Help +- +- +- +- Go to online documentation +- +- +- +- Open User Guide +- +- +- +- Save Database Backup... +- +- +- +- Add key to SSH Agent +- +- +- +- Remove key from SSH Agent +- +- +- +- Compact Mode +- +- +- +- Automatic +- +- +- +- Light +- +- +- +- Dark +- +- +- +- Classic (Platform-native) +- +- +- +- Show Toolbar +- +- +- +- Show Preview Panel +- +- +- +- Don't show again for this version +- +- +- +- Restart Application? +- +- +- +- You must restart the application to apply this setting. Would you like to restart now? +- +- +- +- Perform Auto-Type Sequence +- +- +- +- {USERNAME} +- +- +- +- {USERNAME}{ENTER} +- +- +- +- {PASSWORD} +- +- +- +- {PASSWORD}{ENTER} +- +- +- +- Always on Top +- +- +- +- Hide Usernames +- Hide Usernames +- +- +- Hide Passwords +- Hide Passwords +- +- +- +- ManageDatabase +- +- Database settings +- Database settings +- +- +- Edit database settings +- +- +- +- Unlock database +- +- +- +- Unlock database to show more information +- +- +- +- Lock database +- +- +- +- +- ManageSession +- +- Disconnect +- +- +- +- Disconnect this application +- +- +- +- +- Merger +- +- Creating missing %1 [%2] +- Creating missing %1 [%2] +- +- +- Relocating %1 [%2] +- Relocating %1 [%2] +- +- +- Overwriting %1 [%2] +- Overwriting %1 [%2] +- +- +- older entry merged from database "%1" +- older entry merged from database "%1" +- +- +- Adding backup for older target %1 [%2] +- Adding backup for older target %1 [%2] +- +- +- Adding backup for older source %1 [%2] +- Adding backup for older source %1 [%2] +- +- +- Reapplying older target entry on top of newer source %1 [%2] +- Reapplying older target entry on top of newer source %1 [%2] +- +- +- Reapplying older source entry on top of newer target %1 [%2] +- Reapplying older source entry on top of newer target %1 [%2] +- +- +- Synchronizing from newer source %1 [%2] +- Synchronizing from newer source %1 [%2] +- +- +- Synchronizing from older source %1 [%2] +- Synchronizing from older source %1 [%2] +- +- +- Deleting child %1 [%2] +- Deleting child %1 [%2] +- +- +- Deleting orphan %1 [%2] +- Deleting orphan %1 [%2] +- +- +- Changed deleted objects +- Changed deleted objects +- +- +- Adding missing icon %1 +- Adding missing icon %1 +- +- +- Removed custom data %1 [%2] +- +- +- +- Adding custom data %1 [%2] +- +- +- +- +- NewDatabaseWizard +- +- Create a new KeePassXC database... +- Create a new KeePassXC database... +- +- +- Root +- Root group +- Root +- +- +- +- NewDatabaseWizardPage +- +- WizardPage +- WizardPage +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- +- +- Advanced Settings +- Advanced Settings +- +- +- Simple Settings +- Simple Settings +- +- +- Encryption Settings +- Encryption Settings +- +- +- +- NewDatabaseWizardPageDatabaseKey +- +- Database Credentials +- +- +- +- A set of credentials known only to you that protects your database. +- +- +- +- +- NewDatabaseWizardPageEncryption +- +- Encryption Settings +- Encryption Settings +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- +- +- +- NewDatabaseWizardPageMetaData +- +- General Database Information +- General Database Information +- +- +- Please fill in the display name and an optional description for your new database: +- Please fill in the display name and an optional description for your new database: +- +- +- +- NixUtils +- +- Password Manager +- +- +- +- +- OpData01 +- +- Invalid OpData01, does not contain header +- +- +- +- Unable to read all IV bytes, wanted 16 but got %1 +- +- +- +- Unable to init cipher for opdata01: %1 +- +- +- +- Unable to read all HMAC signature bytes +- +- +- +- Malformed OpData01 due to a failed HMAC +- +- +- +- Unable to process clearText in place +- +- +- +- Expected %1 bytes of clear-text, found %2 +- +- +- +- +- OpVaultOpenWidget +- +- Read Database did not produce an instance +-%1 +- +- +- +- +- OpVaultReader +- +- Directory .opvault must exist +- +- +- +- Directory .opvault must be readable +- +- +- +- Directory .opvault/default must exist +- +- +- +- Directory .opvault/default must be readable +- +- +- +- Unable to decode masterKey: %1 +- +- +- +- Unable to derive master key: %1 +- +- +- +- +- OpenSSHKey +- +- Invalid key file, expecting an OpenSSH key +- Invalid key file, expecting an OpenSSH key +- +- +- PEM boundary mismatch +- PEM boundary mismatch +- +- +- Base64 decoding failed +- Base64 decoding failed +- +- +- Key file way too small. +- Key file way too small. +- +- +- Key file magic header id invalid +- Key file magic header id invalid +- +- +- Found zero keys +- Found zero keys +- +- +- Failed to read public key. +- Failed to read public key. +- +- +- Corrupted key file, reading private key failed +- Corrupted key file, reading private key failed +- +- +- No private key payload to decrypt +- No private key payload to decrypt +- +- +- Trying to run KDF without cipher +- Trying to run KDF without cipher +- +- +- Passphrase is required to decrypt this key +- Passphrase is required to decrypt this key +- +- +- Key derivation failed, key file corrupted? +- Key derivation failed, key file corrupted? +- +- +- Decryption failed, wrong passphrase? +- Decryption failed, wrong passphrase? +- +- +- Unexpected EOF while reading public key +- Unexpected EOF while reading public key +- +- +- Unexpected EOF while reading private key +- Unexpected EOF while reading private key +- +- +- Can't write public key as it is empty +- Can't write public key as it is empty +- +- +- Unexpected EOF when writing public key +- Unexpected EOF when writing public key +- +- +- Can't write private key as it is empty +- Can't write private key as it is empty +- +- +- Unexpected EOF when writing private key +- Unexpected EOF when writing private key +- +- +- Unsupported key type: %1 +- Unsupported key type: %1 +- +- +- Unknown cipher: %1 +- Unknown cipher: %1 +- +- +- Cipher IV is too short for MD5 kdf +- Cipher IV is too short for MD5 kdf +- +- +- Unknown KDF: %1 +- Unknown KDF: %1 +- +- +- Unknown key type: %1 +- Unknown key type: %1 +- +- +- +- PasswordEdit +- +- Passwords do not match +- +- +- +- Passwords match so far +- +- +- +- Toggle Password (%1) +- +- +- +- Generate Password (%1) +- +- +- +- Warning: Caps Lock enabled! +- +- +- +- +- PasswordEditWidget +- +- Enter password: +- Enter password: +- +- +- Confirm password: +- Confirm password: +- +- +- Password +- Password +- +- +- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> +- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> +- +- +- Passwords do not match. +- Passwords do not match. +- +- +- Password field +- +- +- +- Repeat password field +- +- +- +- +- PasswordGeneratorWidget +- +- %p% +- %p% +- +- +- strength +- Password strength +- strength +- +- +- entropy +- entropy +- +- +- Password +- Password +- +- +- Character Types +- Character Types +- +- +- Numbers +- Numbers +- +- +- Extended ASCII +- Extended ASCII +- +- +- Exclude look-alike characters +- Exclude look-alike characters +- +- +- Pick characters from every group +- Pick characters from every group +- +- +- &Length: +- &Length: +- +- +- Passphrase +- Passphrase +- +- +- Wordlist: +- Wordlist: +- +- +- Word Separator: +- Word Separator: +- +- +- Close +- Close +- +- +- Entropy: %1 bit +- Entropy: %1 bit +- +- +- Password Quality: %1 +- Password Quality: %1 +- +- +- Poor +- Password quality +- Poor +- +- +- Weak +- Password quality +- Weak +- +- +- Good +- Password quality +- Good +- +- +- Excellent +- Password quality +- Excellent +- +- +- Switch to advanced mode +- Switch to advanced mode +- +- +- Advanced +- Advanced +- +- +- Braces +- Braces +- +- +- Punctuation +- Punctuation +- +- +- Quotes +- Quotes +- +- +- Logograms +- Logograms +- +- +- Character set to exclude from generated password +- Character set to exclude from generated password +- +- +- Do not include: +- Do not include: +- +- +- Add non-hex letters to "do not include" list +- Add non-hex letters to "do not include" list +- +- +- Hex +- Hex +- +- +- Excluded characters: "0", "1", "l", "I", "O", "|", "ï¹’" +- Excluded characters: "0", "1", "l", "I", "O", "|", "ï¹’" +- +- +- Generated password +- +- +- +- Upper-case letters +- +- +- +- Lower-case letters +- +- +- +- Special characters +- +- +- +- Math Symbols +- +- +- +- Dashes and Slashes +- +- +- +- Excluded characters +- +- +- +- Hex Passwords +- +- +- +- Password length +- +- +- +- Word Case: +- +- +- +- Regenerate password +- +- +- +- Copy password +- +- +- +- lower case +- +- +- +- UPPER CASE +- +- +- +- Title Case +- +- +- +- Generate Password +- +- +- +- Also choose from: +- +- +- +- Additional characters to use for the generated password +- +- +- +- Additional characters +- +- +- +- Word Count: +- +- +- +- Esc +- +- +- +- Apply Password +- +- +- +- Ctrl+S +- +- +- +- Regenerate password (%1) +- +- +- +- Special Characters +- +- +- +- +- QApplication +- +- KeeShare +- KeeShare +- +- +- Statistics +- +- +- +- Very weak password +- +- +- +- Password entropy is %1 bits +- +- +- +- Weak password +- +- +- +- Used in %1/%2 +- +- +- +- Password is used %1 times +- +- +- +- Password has expired +- +- +- +- Password expiry was %1 +- +- +- +- Password is about to expire +- +- +- +- Password expires in %1 days +- +- +- +- Password will expire soon +- +- +- +- Password expires on %1 +- +- +- +- Health Check +- +- +- +- HIBP +- +- +- +- +- QMessageBox +- +- Overwrite +- Overwrite +- +- +- Delete +- Delete +- +- +- Move +- Move +- +- +- Empty +- Empty +- +- +- Remove +- Remove +- +- +- Skip +- Skip +- +- +- Disable +- Disable +- +- +- Merge +- Merge +- +- +- Continue +- +- +- +- +- QObject +- +- Database not opened +- Database not opened +- +- +- Database hash not available +- Database hash not available +- +- +- Client public key not received +- Client public key not received +- +- +- Cannot decrypt message +- Cannot decrypt message +- +- +- Action cancelled or denied +- Action cancelled or denied +- +- +- KeePassXC association failed, try again +- KeePassXC association failed, try again +- +- +- Encryption key is not recognized +- Encryption key is not recognized +- +- +- Incorrect action +- Incorrect action +- +- +- Empty message received +- Empty message received +- +- +- No URL provided +- No URL provided +- +- +- No logins found +- No logins found +- +- +- Unknown error +- Unknown error +- +- +- Add a new entry to a database. +- Add a new entry to a database. +- +- +- Path of the database. +- Path of the database. +- +- +- Key file of the database. +- Key file of the database. +- +- +- path +- path +- +- +- Username for the entry. +- Username for the entry. +- +- +- username +- username +- +- +- URL for the entry. +- URL for the entry. +- +- +- URL +- URL +- +- +- Prompt for the entry's password. +- Prompt for the entry's password. +- +- +- Generate a password for the entry. +- Generate a password for the entry. +- +- +- length +- length +- +- +- Path of the entry to add. +- Path of the entry to add. +- +- +- Path of the entry to clip. +- clip = copy to clipboard +- Path of the entry to clip. +- +- +- Timeout in seconds before clearing the clipboard. +- Timeout in seconds before clearing the clipboard. +- +- +- Edit an entry. +- Edit an entry. +- +- +- Title for the entry. +- Title for the entry. +- +- +- title +- title +- +- +- Path of the entry to edit. +- Path of the entry to edit. +- +- +- Estimate the entropy of a password. +- Estimate the entropy of a password. +- +- +- Password for which to estimate the entropy. +- Password for which to estimate the entropy. +- +- +- Perform advanced analysis on the password. +- Perform advanced analysis on the password. +- +- +- +- +-Available commands: +- +- +- +-Available commands: +- +- +- +- Name of the command to execute. +- Name of the command to execute. +- +- +- List database entries. +- List database entries. +- +- +- Path of the group to list. Default is / +- Path of the group to list. Default is / +- +- +- Find entries quickly. +- Find entries quickly. +- +- +- Search term. +- Search term. +- +- +- Merge two databases. +- Merge two databases. +- +- +- Path of the database to merge from. +- Path of the database to merge from. +- +- +- Use the same credentials for both database files. +- Use the same credentials for both database files. +- +- +- Key file of the database to merge from. +- Key file of the database to merge from. +- +- +- Show an entry's information. +- Show an entry's information. +- +- +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- +- +- attribute +- attribute +- +- +- Name of the entry to show. +- Name of the entry to show. +- +- +- NULL device +- NULL device +- +- +- error reading from device +- error reading from device +- +- +- malformed string +- malformed string +- +- +- missing closing quote +- missing closing quote +- +- +- Group +- Group +- +- +- Title +- Title +- +- +- Username +- Username +- +- +- Password +- Password +- +- +- Notes +- Notes +- +- +- Last Modified +- Last Modified +- +- +- Created +- Created +- +- +- Browser Integration +- Browser Integration +- +- +- SSH Agent +- SSH Agent +- +- +- Generate a new random diceware passphrase. +- Generate a new random diceware passphrase. +- +- +- Word count for the diceware passphrase. +- Word count for the diceware passphrase. +- +- +- Wordlist for the diceware generator. +-[Default: EFF English] +- Wordlist for the diceware generator. +-[Default: EFF English] +- +- +- Generate a new random password. +- Generate a new random password. +- +- +- Could not create entry with path %1. +- Could not create entry with path %1. +- +- +- Enter password for new entry: +- Enter password for new entry: +- +- +- Writing the database failed %1. +- Writing the database failed %1. +- +- +- Successfully added entry %1. +- Successfully added entry %1. +- +- +- Invalid timeout value %1. +- Invalid timeout value %1. +- +- +- Entry %1 not found. +- Entry %1 not found. +- +- +- Entry with path %1 has no TOTP set up. +- Entry with path %1 has no TOTP set up. +- +- +- Clearing the clipboard in %1 second(s)... +- +- Clearing the clipboard in %1 second(s)... +- Clearing the clipboard in %1 second(s)... +- +- +- +- Clipboard cleared! +- Clipboard cleared! +- +- +- Silence password prompt and other secondary outputs. +- Silence password prompt and other secondary outputs. +- +- +- count +- CLI parameter +- count +- +- +- Could not find entry with path %1. +- Could not find entry with path %1. +- +- +- Not changing any field for entry %1. +- Not changing any field for entry %1. +- +- +- Enter new password for entry: +- Enter new password for entry: +- +- +- Writing the database failed: %1 +- Writing the database failed: %1 +- +- +- Successfully edited entry %1. +- Successfully edited entry %1. +- +- +- Length %1 +- Length %1 +- +- +- Entropy %1 +- Entropy %1 +- +- +- Log10 %1 +- Log10 %1 +- +- +- Multi-word extra bits %1 +- Multi-word extra bits %1 +- +- +- Type: Bruteforce +- Type: Bruteforce +- +- +- Type: Dictionary +- Type: Dictionary +- +- +- Type: Dict+Leet +- Type: Dict+Leet +- +- +- Type: User Words +- Type: User Words +- +- +- Type: User+Leet +- Type: User+Leet +- +- +- Type: Repeated +- Type: Repeated +- +- +- Type: Sequence +- Type: Sequence +- +- +- Type: Spatial +- Type: Spatial +- +- +- Type: Date +- Type: Date +- +- +- Type: Bruteforce(Rep) +- Type: Bruteforce(Rep) +- +- +- Type: Dictionary(Rep) +- Type: Dictionary(Rep) +- +- +- Type: Dict+Leet(Rep) +- Type: Dict+Leet(Rep) +- +- +- Type: User Words(Rep) +- Type: User Words(Rep) +- +- +- Type: User+Leet(Rep) +- Type: User+Leet(Rep) +- +- +- Type: Repeated(Rep) +- Type: Repeated(Rep) +- +- +- Type: Sequence(Rep) +- Type: Sequence(Rep) +- +- +- Type: Spatial(Rep) +- Type: Spatial(Rep) +- +- +- Type: Date(Rep) +- Type: Date(Rep) +- +- +- Type: Unknown%1 +- Type: Unknown%1 +- +- +- Entropy %1 (%2) +- Entropy %1 (%2) +- +- +- *** Password length (%1) != sum of length of parts (%2) *** +- *** Password length (%1) != sum of length of parts (%2) *** +- +- +- Failed to load key file %1: %2 +- Failed to load key file %1: %2 +- +- +- Length of the generated password +- Length of the generated password +- +- +- Use lowercase characters +- Use lowercase characters +- +- +- Use uppercase characters +- Use uppercase characters +- +- +- Use special characters +- Use special characters +- +- +- Use extended ASCII +- Use extended ASCII +- +- +- Exclude character set +- Exclude character set +- +- +- chars +- chars +- +- +- Exclude similar looking characters +- Exclude similar looking characters +- +- +- Include characters from every selected group +- Include characters from every selected group +- +- +- Recursively list the elements of the group. +- Recursively list the elements of the group. +- +- +- Cannot find group %1. +- Cannot find group %1. +- +- +- Error reading merge file: +-%1 +- Error reading merge file: +-%1 +- +- +- Unable to save database to file : %1 +- Unable to save database to file : %1 +- +- +- Unable to save database to file: %1 +- Unable to save database to file: %1 +- +- +- Successfully recycled entry %1. +- Successfully recycled entry %1. +- +- +- Successfully deleted entry %1. +- Successfully deleted entry %1. +- +- +- Show the entry's current TOTP. +- Show the entry's current TOTP. +- +- +- ERROR: unknown attribute %1. +- ERROR: unknown attribute %1. +- +- +- No program defined for clipboard manipulation +- No program defined for clipboard manipulation +- +- +- file empty +- file empty +- +- +- %1: (row, col) %2,%3 +- %1: (row, col) %2,%3 +- +- +- AES-KDF (KDBX 4) +- AES-KDF (KDBX 4) +- +- +- AES-KDF (KDBX 3.1) +- AES-KDF (KDBX 3.1) +- +- +- Invalid Settings +- TOTP +- Invalid Settings +- +- +- Invalid Key +- TOTP +- Invalid Key +- +- +- Message encryption failed. +- Message encryption failed. +- +- +- No groups found +- No groups found +- +- +- Create a new database. +- Create a new database. +- +- +- File %1 already exists. +- File %1 already exists. +- +- +- Loading the key file failed +- Loading the key file failed +- +- +- No key is set. Aborting database creation. +- No key is set. Aborting database creation. +- +- +- Failed to save the database: %1. +- Failed to save the database: %1. +- +- +- Successfully created new database. +- Successfully created new database. +- +- +- Creating KeyFile %1 failed: %2 +- Creating KeyFile %1 failed: %2 +- +- +- Loading KeyFile %1 failed: %2 +- Loading KeyFile %1 failed: %2 +- +- +- Path of the entry to remove. +- Path of the entry to remove. +- +- +- Existing single-instance lock file is invalid. Launching new instance. +- Existing single-instance lock file is invalid. Launching new instance. +- +- +- The lock file could not be created. Single-instance mode disabled. +- The lock file could not be created. Single-instance mode disabled. +- +- +- KeePassXC - cross-platform password manager +- KeePassXC - cross-platform password manager +- +- +- filenames of the password databases to open (*.kdbx) +- filenames of the password databases to open (*.kdbx) +- +- +- path to a custom config file +- path to a custom config file +- +- +- key file of the database +- key file of the database +- +- +- read password of the database from stdin +- read password of the database from stdin +- +- +- Another instance of KeePassXC is already running. +- Another instance of KeePassXC is already running. +- +- +- Fatal error while testing the cryptographic functions. +- Fatal error while testing the cryptographic functions. +- +- +- KeePassXC - Error +- KeePassXC - Error +- +- +- Database password: +- Database password: +- +- +- Cannot create new group +- +- +- +- Deactivate password key for the database. +- +- +- +- Displays debugging information. +- +- +- +- Deactivate password key for the database to merge from. +- +- +- +- Version %1 +- +- +- +- Build Type: %1 +- +- +- +- Revision: %1 +- +- +- +- Distribution: %1 +- +- +- +- Debugging mode is disabled. +- +- +- +- Debugging mode is enabled. +- +- +- +- Operating system: %1 +-CPU architecture: %2 +-Kernel: %3 %4 +- +- +- +- Auto-Type +- Auto-Type +- +- +- KeeShare (signed and unsigned sharing) +- +- +- +- KeeShare (only signed sharing) +- +- +- +- KeeShare (only unsigned sharing) +- +- +- +- YubiKey +- +- +- +- TouchID +- +- +- +- None +- +- +- +- Enabled extensions: +- +- +- +- Cryptographic libraries: +- +- +- +- Cannot generate a password and prompt at the same time! +- +- +- +- Adds a new group to a database. +- +- +- +- Path of the group to add. +- +- +- +- Group %1 already exists! +- +- +- +- Group %1 not found. +- +- +- +- Successfully added group %1. +- +- +- +- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. +- +- +- +- FILENAME +- +- +- +- Analyze passwords for weaknesses and problems. +- +- +- +- Failed to open HIBP file %1: %2 +- +- +- +- Evaluating database entries against HIBP file, this will take a while... +- +- +- +- Close the currently opened database. +- +- +- +- Display this help. +- +- +- +- slot +- +- +- +- Invalid word count %1 +- +- +- +- The word list is too small (< 1000 items) +- +- +- +- Exit interactive mode. +- +- +- +- Exports the content of a database to standard output in the specified format. +- +- +- +- Unable to export database to XML: %1 +- +- +- +- Unsupported format %1 +- +- +- +- Use numbers +- +- +- +- Invalid password length %1 +- +- +- +- Display command help. +- +- +- +- Available commands: +- +- +- +- Import the contents of an XML database. +- +- +- +- Path of the XML database export. +- +- +- +- Path of the new database. +- +- +- +- Successfully imported database. +- +- +- +- Unknown command %1 +- +- +- +- Flattens the output to single lines. +- +- +- +- Only print the changes detected by the merge operation. +- +- +- +- Yubikey slot for the second database. +- +- +- +- Successfully merged %1 into %2. +- +- +- +- Database was not modified by merge operation. +- Database was not modified by merge operation. +- +- +- Moves an entry to a new group. +- +- +- +- Path of the entry to move. +- +- +- +- Path of the destination group. +- +- +- +- Could not find group with path %1. +- +- +- +- Entry is already in group %1. +- +- +- +- Successfully moved entry %1 to group %2. +- +- +- +- Open a database. +- +- +- +- Path of the group to remove. +- +- +- +- Cannot remove root group from database. +- +- +- +- Successfully recycled group %1. +- +- +- +- Successfully deleted group %1. +- +- +- +- Failed to open database file %1: not found +- +- +- +- Failed to open database file %1: not a plain file +- +- +- +- Failed to open database file %1: not readable +- +- +- +- Enter password to unlock %1: +- +- +- +- Invalid YubiKey slot %1 +- +- +- +- Enter password to encrypt database (optional): +- +- +- +- HIBP file, line %1: parse error +- +- +- +- Secret Service Integration +- +- +- +- User name +- +- +- +- Password for '%1' has been leaked %2 time(s)! +- +- +- +- +- +- +- Invalid password generator after applying all options +- +- +- +- Show the protected attributes in clear text. +- +- +- +- Browser Plugin Failure +- +- +- +- Could not save the native messaging script file for %1. +- +- +- +- Copy the given attribute to the clipboard. Defaults to "password" if not specified. +- +- +- +- Copy the current TOTP to the clipboard (equivalent to "-a totp"). +- +- +- +- Copy an entry's attribute to the clipboard. +- +- +- +- ERROR: Please specify one of --attribute or --totp, not both. +- +- +- +- ERROR: attribute %1 is ambiguous, it matches %2. +- +- +- +- Attribute "%1" not found. +- +- +- +- Entry's "%1" attribute copied to the clipboard! +- +- +- +- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). +- +- +- +- slot[:serial] +- +- +- +- Target decryption time in MS for the database. +- +- +- +- time +- +- +- +- Set the key file for the database. +- +- +- +- Set a password for the database. +- +- +- +- Invalid decryption time %1. +- +- +- +- Target decryption time must be between %1 and %2. +- +- +- +- Failed to set database password. +- +- +- +- Benchmarking key derivation function for %1ms delay. +- +- +- +- Setting %1 rounds for key derivation function. +- +- +- +- error while setting database key derivation settings. +- +- +- +- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. +- +- +- +- Unable to import XML database: %1 +- +- +- +- Show a database's information. +- +- +- +- UUID: +- +- +- +- Name: +- +- +- +- Description: +- +- +- +- Cipher: +- +- +- +- KDF: +- +- +- +- Recycle bin is enabled. +- +- +- +- Recycle bin is not enabled. +- +- +- +- Invalid command %1. +- +- +- +- Invalid YubiKey serial %1 +- +- +- +- Please touch the button on your YubiKey to continue… +- +- +- +- Do you want to create a database with an empty password? [y/N]: +- +- +- +- Repeat password: +- +- +- +- Error: Passwords do not match. +- +- +- +- All clipping programs failed. Tried %1 +- +- +- +- +- AES (%1 rounds) +- +- +- +- AES 256-bit +- +- +- +- Twofish 256-bit +- +- +- +- ChaCha20 256-bit +- ChaCha20: 256-bit {20 256-?} +- +- +- Benchmark %1 delay +- +- +- +- %1 ms +- milliseconds +- +- %1 ms +- %1 ms +- +- +- +- %1 s +- seconds +- +- %1 s +- %1 s +- +- +- +- path to a custom local config file +- +- +- +- WARNING: You are using an old key file format which KeePassXC may +-stop supporting in the future. +- +-Please consider generating a new key file. +- +- +- +- Argon2%1 (%2 rounds, %3 KB) +- +- +- +- Argon2d (KDBX 4 – recommended) +- +- +- +- Argon2id (KDBX 4) +- +- +- +- TOTP +- TOTP +- +- +- Icon +- Icon +- +- +- Unsupported key file version: %1 +- +- +- +- Checksum mismatch! Key file may be corrupt. +- +- +- +- Unexpected key file data! Key file may be corrupt. +- +- +- +- +- QtIOCompressor +- +- Internal zlib error when compressing: +- Internal zlib error when compressing: +- +- +- Error writing to underlying device: +- Error writing to underlying device: +- +- +- Error opening underlying device: +- Error opening underlying device: +- +- +- Error reading data from underlying device: +- Error reading data from underlying device: +- +- +- Internal zlib error when decompressing: +- Internal zlib error when decompressing: +- +- +- +- QtIOCompressor::open +- +- The gzip format not supported in this version of zlib. +- The gzip format not supported in this version of zlib. +- +- +- Internal zlib error: +- Internal zlib error: +- +- +- +- ReportsWidgetHealthcheck +- +- Also show entries that have been excluded from reports +- +- +- +- Hover over reason to show additional details. Double-click entries to edit. +- +- +- +- Bad +- Password quality +- +- +- +- Bad — password must be changed +- +- +- +- Poor +- Password quality +- Poor +- +- +- Poor — password should be changed +- +- +- +- Weak +- Password quality +- Weak +- +- +- Weak — consider changing the password +- +- +- +- (Excluded) +- +- +- +- This entry is being excluded from reports +- +- +- +- Please wait, health data is being calculated... +- +- +- +- Congratulations, everything is healthy! +- +- +- +- Title +- Title +- +- +- Path +- Path +- +- +- Score +- +- +- +- Reason +- +- +- +- Edit Entry... +- +- +- +- Exclude from reports +- +- +- +- +- ReportsWidgetHibp +- +- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. +- +- +- +- Perform Online Analysis +- +- +- +- Also show entries that have been excluded from reports +- +- +- +- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. +- +- +- +- Congratulations, no exposed passwords! +- +- +- +- Title +- Title +- +- +- Path +- Path +- +- +- Password exposed… +- +- +- +- (Excluded) +- +- +- +- This entry is being excluded from reports +- +- +- +- once +- +- +- +- up to 10 times +- +- +- +- up to 100 times +- +- +- +- up to 1000 times +- +- +- +- up to 10,000 times +- +- +- +- up to 100,000 times +- +- +- +- up to a million times +- +- +- +- millions of times +- +- +- +- Edit Entry... +- +- +- +- Exclude from reports +- +- +- +- +- ReportsWidgetStatistics +- +- Hover over lines with error icons for further information. +- +- +- +- Name +- Name +- +- +- Value +- Value +- +- +- Please wait, database statistics are being calculated... +- +- +- +- Database name +- +- +- +- Description +- +- +- +- Location +- +- +- +- Last saved +- +- +- +- Unsaved changes +- +- +- +- yes +- +- +- +- no +- +- +- +- The database was modified, but the changes have not yet been saved to disk. +- +- +- +- Number of groups +- +- +- +- Number of entries +- +- +- +- Number of expired entries +- +- +- +- The database contains entries that have expired. +- +- +- +- Unique passwords +- +- +- +- Non-unique passwords +- +- +- +- More than 10% of passwords are reused. Use unique passwords when possible. +- +- +- +- Maximum password reuse +- +- +- +- Some passwords are used more than three times. Use unique passwords when possible. +- +- +- +- Number of short passwords +- +- +- +- Recommended minimum password length is at least 8 characters. +- +- +- +- Number of weak passwords +- +- +- +- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. +- +- +- +- Entries excluded from reports +- +- +- +- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. +- +- +- +- Average password length +- +- +- +- %1 characters +- +- +- +- Average password length is less than ten characters. Longer passwords provide more security. +- +- +- +- +- SSHAgent +- +- Agent connection failed. +- Agent connection failed. +- +- +- Agent protocol error. +- Agent protocol error. +- +- +- No agent running, cannot add identity. +- No agent running, cannot add identity. +- +- +- No agent running, cannot remove identity. +- No agent running, cannot remove identity. +- +- +- Agent refused this identity. Possible reasons include: +- Agent refused this identity. Possible reasons include: +- +- +- The key has already been added. +- The key has already been added. +- +- +- Restricted lifetime is not supported by the agent (check options). +- Restricted lifetime is not supported by the agent (check options). +- +- +- A confirmation request is not supported by the agent (check options). +- A confirmation request is not supported by the agent (check options). +- +- +- Key identity ownership conflict. Refusing to add. +- +- +- +- No agent running, cannot list identities. +- +- +- +- +- SearchHelpWidget +- +- Search Help +- Search Help +- +- +- Search terms are as follows: [modifiers][field:]["]term["] +- Search terms are as follows: [modifiers][field:]["]term["] +- +- +- Every search term must match (ie, logical AND) +- Every search term must match (ie, logical AND) +- +- +- Modifiers +- Modifiers +- +- +- exclude term from results +- exclude term from results +- +- +- match term exactly +- match term exactly +- +- +- use regex in term +- use regex in term +- +- +- Fields +- Fields +- +- +- Term Wildcards +- Term Wildcards +- +- +- match anything +- match anything +- +- +- match one +- match one +- +- +- logical OR +- logical OR +- +- +- Examples +- Examples +- +- +- +- SearchWidget +- +- Search +- Search +- +- +- Limit search to selected group +- Limit search to selected group +- +- +- Search Help +- Search Help +- +- +- Search (%1)... +- Search placeholder text, %1 is the keyboard shortcut +- Search (%1)... +- +- +- Case sensitive +- Case sensitive +- +- +- +- SettingsWidgetFdoSecrets +- +- Options +- +- +- +- Enable KeepassXC Freedesktop.org Secret Service integration +- +- +- +- General +- General +- +- +- Show notification when credentials are requested +- +- +- +- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> +- +- +- +- Exposed database groups: +- +- +- +- Authorization +- +- +- +- These applications are currently connected: +- +- +- +- Don't confirm when entries are deleted by clients +- +- +- +- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. +- +- +- +- <b>Warning:</b> +- +- +- +- Save current changes to activate the plugin and enable editing of this section. +- +- +- +- +- SettingsWidgetKeeShare +- +- Active +- Active +- +- +- Allow export +- Allow export +- +- +- Allow import +- Allow import +- +- +- Own certificate +- Own certificate +- +- +- Fingerprint: +- Fingerprint: +- +- +- Certificate: +- Certificate: +- +- +- Signer +- Signer +- +- +- Key: +- Key: +- +- +- Generate +- Generate +- +- +- Import +- Import +- +- +- Export +- Export +- +- +- Imported certificates +- Imported certificates +- +- +- Trust +- Trust +- +- +- Ask +- Ask +- +- +- Untrust +- Untrust +- +- +- Remove +- Remove +- +- +- Path +- Path +- +- +- Status +- Status +- +- +- Fingerprint +- Fingerprint +- +- +- Certificate +- Certificate +- +- +- Trusted +- Trusted +- +- +- Untrusted +- Untrusted +- +- +- Unknown +- Unknown +- +- +- key.share +- Filetype for KeeShare key +- key.share +- +- +- KeeShare key file +- KeeShare key file +- +- +- All files +- All files +- +- +- Select path +- Select path +- +- +- Exporting changed certificate +- Exporting changed certificate +- +- +- The exported certificate is not the same as the one in use. Do you want to export the current certificate? +- The exported certificate is not the same as the one in use. Do you want to export the current certificate? +- +- +- Signer: +- +- +- +- Allow KeeShare imports +- +- +- +- Allow KeeShare exports +- +- +- +- Only show warnings and errors +- +- +- +- Key +- Key +- +- +- Signer name field +- +- +- +- Generate new certificate +- +- +- +- Import existing certificate +- +- +- +- Export own certificate +- +- +- +- Known shares +- +- +- +- Trust selected certificate +- +- +- +- Ask whether to trust the selected certificate every time +- +- +- +- Untrust selected certificate +- +- +- +- Remove selected certificate +- +- +- +- +- ShareExport +- +- Overwriting signed share container is not supported - export prevented +- Overwriting signed share container is not supported - export prevented +- +- +- Could not write export container (%1) +- Could not write export container (%1) +- +- +- Could not embed signature: Could not open file to write (%1) +- +- +- +- Could not embed signature: Could not write file (%1) +- +- +- +- Could not embed database: Could not open file to write (%1) +- +- +- +- Could not embed database: Could not write file (%1) +- +- +- +- Overwriting unsigned share container is not supported - export prevented +- Overwriting unsigned share container is not supported - export prevented +- +- +- Could not write export container +- Could not write export container +- +- +- Unexpected export error occurred +- Unexpected export error occurred +- +- +- +- ShareImport +- +- Import from container without signature +- Import from container without signature +- +- +- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? +- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? +- +- +- Import from container with certificate +- Import from container with certificate +- +- +- Do you want to trust %1 with the fingerprint of %2 from %3? +- Do you want to trust %1 with the fingerprint of %2 from %3? {1 ?} {2 ?} +- +- +- Not this time +- Not this time +- +- +- Never +- Never +- +- +- Always +- Always +- +- +- Just this time +- Just this time +- +- +- Signed share container are not supported - import prevented +- Signed share container are not supported - import prevented +- +- +- File is not readable +- File is not readable +- +- +- Invalid sharing container +- Invalid sharing container +- +- +- Untrusted import prevented +- Untrusted import prevented +- +- +- Successful signed import +- Successful signed import +- +- +- Unsigned share container are not supported - import prevented +- Unsigned share container are not supported - import prevented +- +- +- Successful unsigned import +- Successful unsigned import +- +- +- File does not exist +- File does not exist +- +- +- Unknown share container type +- Unknown share container type +- +- +- +- ShareObserver +- +- Import from %1 failed (%2) +- Import from %1 failed (%2) +- +- +- Import from %1 successful (%2) +- Import from %1 successful (%2) +- +- +- Imported from %1 +- Imported from %1 +- +- +- Export to %1 failed (%2) +- Export to %1 failed (%2) +- +- +- Export to %1 successful (%2) +- Export to %1 successful (%2) +- +- +- Export to %1 +- Export to %1 +- +- +- Multiple import source path to %1 in %2 +- +- +- +- Conflicting export target path %1 in %2 +- +- +- +- +- TotpDialog +- +- Timed Password +- Timed Password +- +- +- 000000 +- 000000 +- +- +- Copy +- Copy +- +- +- Expires in <b>%n</b> second(s) +- +- Expires in <b>%n</b> second(s) +- Expires in <b>%n</b> second(s) +- +- +- +- +- TotpExportSettingsDialog +- +- Copy +- Copy +- +- +- NOTE: These TOTP settings are custom and may not work with other authenticators. +- TOTP QR code dialog warning +- NOTE: These TOTP settings are custom and may not work with other authenticators. +- +- +- There was an error creating the QR code. +- There was an error creating the QR code. +- +- +- Closing in %1 seconds. +- Closing in %1 seconds. +- +- +- +- TotpSetupDialog +- +- Setup TOTP +- Setup TOTP +- +- +- Default RFC 6238 token settings +- Default RFC 6238 token settings +- +- +- Steam token settings +- Steam token settings +- +- +- Use custom settings +- Use custom settings +- +- +- Custom Settings +- Custom Settings +- +- +- Time step: +- Time step: +- +- +- sec +- Seconds +- sec +- +- +- Code size: +- Code size: +- +- +- Secret Key: +- +- +- +- Secret key must be in Base32 format +- +- +- +- Secret key field +- +- +- +- Algorithm: +- +- +- +- Time step field +- +- +- +- digits +- +- +- +- Invalid TOTP Secret +- +- +- +- You have entered an invalid secret key. The key must be in Base32 format. +-Example: JBSWY3DPEHPK3PXP +- +- +- +- Confirm Remove TOTP Settings +- +- +- +- Are you sure you want to delete TOTP settings for this entry? +- +- +- +- +- URLEdit +- +- Invalid URL +- +- +- +- +- UpdateCheckDialog +- +- Checking for updates +- Checking for updates +- +- +- Checking for updates... +- Checking for updates... +- +- +- Close +- Close +- +- +- Update Error! +- Update Error! +- +- +- An error occurred in retrieving update information. +- An error occurred in retrieving update information. +- +- +- Please try again later. +- Please try again later. +- +- +- Software Update +- Software Update +- +- +- A new version of KeePassXC is available! +- A new version of KeePassXC is available! +- +- +- KeePassXC %1 is now available — you have %2. +- KeePassXC %1 is now available — you have %2. +- +- +- Download it at keepassxc.org +- Download it at keepassxc.org +- +- +- You're up-to-date! +- You're up-to-date! +- +- +- KeePassXC %1 is currently the newest version available +- KeePassXC %1 is currently the newest version available +- +- +- +- WelcomeWidget +- +- Start storing your passwords securely in a KeePassXC database +- Start storing your passwords securely in a KeePassXC database +- +- +- Create new database +- Create new database +- +- +- Open existing database +- Open existing database +- +- +- Import from KeePass 1 +- Import from KeePass 1 +- +- +- Import from CSV +- Import from CSV +- +- +- Recent databases +- Recent databases +- +- +- Welcome to KeePassXC %1 +- Welcome to KeePassXC %1 +- +- +- Import from 1Password +- +- +- +- Open a recent database +- +- +- +- +- YubiKey +- +- %1 [%2] Configured Slot - %3 +- +- +- +- %1 [%2] Challenge Response - Slot %3 - %4 +- +- +- +- Press +- Press +- +- +- Passive +- Passive +- +- +- %1 Invalid slot specified - %2 +- +- +- +- The YubiKey interface has not been initialized. +- +- +- +- Hardware key is currently in use. +- +- +- +- Could not find hardware key with serial number %1. Please plug it in to continue. +- +- +- +- Hardware key timed out waiting for user interaction. +- +- +- +- A USB error ocurred when accessing the hardware key: %1 +- +- +- +- Failed to complete a challenge-response, the specific error was: %1 +- +- +- +- +- YubiKeyEditWidget +- +- Refresh +- Refresh +- +- +- YubiKey Challenge-Response +- YubiKey Challenge-Response +- +- +- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- +- +- Refresh hardware tokens +- +- +- +- Hardware key slot selection +- +- +- +- Could not find any hardware keys! +- +- +- +- Selected hardware key slot does not support challenge-response! +- +- +- +- Detecting hardware keys… +- +- +- +- No hardware keys detected +- +- +- +- +diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_en_US.ts keepassxc-2.6.4-patched/share/translations/keepassx_en_US.ts +--- keepassxc-2.6.4-orig/share/translations/keepassx_en_US.ts 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/translations/keepassx_en_US.ts 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7896 +0,0 @@ +- +- +- AboutDialog +- +- About KeePassXC +- About KeePassXC +- +- +- About +- About +- +- +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- +- +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- +- +- Contributors +- Contributors +- +- +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- +- +- Debug Info +- Debug Info +- +- +- Include the following information whenever you report a bug: +- Include the following information whenever you report a bug: +- +- +- Copy to clipboard +- Copy to clipboard +- +- +- Project Maintainers: +- Project Maintainers: +- +- +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- +- +- +- AgentSettingsWidget +- +- Use OpenSSH for Windows instead of Pageant +- Use OpenSSH for Windows instead of Pageant +- +- +- Enable SSH Agent integration +- Enable SSH Agent integration +- +- +- SSH_AUTH_SOCK value +- SSH_AUTH_SOCK value +- +- +- SSH_AUTH_SOCK override +- SSH_AUTH_SOCK override +- +- +- (empty) +- (empty) +- +- +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- +- +- SSH Agent connection is working! +- SSH Agent connection is working! +- +- +- +- ApplicationSettingsWidget +- +- Application Settings +- Application Settings +- +- +- General +- General +- +- +- Security +- Security +- +- +- Access error for config file %1 +- Access error for config file %1 +- +- +- Icon only +- Icon only +- +- +- Text only +- Text only +- +- +- Text beside icon +- Text beside icon +- +- +- Text under icon +- Text under icon +- +- +- Follow style +- Follow style +- +- +- Reset Settings? +- Reset Settings? +- +- +- Are you sure you want to reset all general and security settings to default? +- Are you sure you want to reset all general and security settings to default? +- +- +- Monochrome (light) +- Monochrome (light) +- +- +- Monochrome (dark) +- Monochrome (dark) +- +- +- Colorful +- Colorful +- +- +- You must restart the application to set the new language. Would you like to restart now? +- You must restart the application to set the new language. Would you like to restart now? +- +- +- +- ApplicationSettingsWidgetGeneral +- +- Basic Settings +- Basic Settings +- +- +- Startup +- Startup +- +- +- Start only a single instance of KeePassXC +- Start only a single instance of KeePassXC +- +- +- Minimize window at application startup +- Minimize window at application startup +- +- +- File Management +- File Management +- +- +- Backup database file before saving +- Backup database file before saving +- +- +- Automatically save after every change +- Automatically save after every change +- +- +- Automatically reload the database when modified externally +- Automatically reload the database when modified externally +- +- +- Entry Management +- Entry Management +- +- +- Use group icon on entry creation +- Use group icon on entry creation +- +- +- Minimize instead of app exit +- Minimize instead of app exit +- +- +- Show a system tray icon +- Show a system tray icon +- +- +- Hide window to system tray when minimized +- Hide window to system tray when minimized +- +- +- Auto-Type +- Auto-Type +- +- +- Use entry title to match windows for global Auto-Type +- Use entry title to match windows for global Auto-Type +- +- +- Use entry URL to match windows for global Auto-Type +- Use entry URL to match windows for global Auto-Type +- +- +- Always ask before performing Auto-Type +- Always ask before performing Auto-Type +- +- +- ms +- Milliseconds +- ms +- +- +- Movable toolbar +- Movable toolbar +- +- +- Remember previously used databases +- Remember previously used databases +- +- +- Load previously open databases on startup +- Load previously open databases on startup +- +- +- Remember database key files and security dongles +- Remember database key files and security dongles +- +- +- Check for updates at application startup once per week +- Check for updates at application startup once per week +- +- +- Include beta releases when checking for updates +- Include beta releases when checking for updates +- +- +- Language: +- Language: +- +- +- (restart program to activate) +- (restart program to activate) +- +- +- Minimize window after unlocking database +- Minimize window after unlocking database +- +- +- Minimize when opening a URL +- Minimize when opening a URL +- +- +- Hide window when copying to clipboard +- Hide window when copying to clipboard +- +- +- Minimize +- Minimize +- +- +- Drop to background +- Drop to background +- +- +- Favicon download timeout: +- Favicon download timeout: +- +- +- Website icon download timeout in seconds +- Website icon download timeout in seconds +- +- +- sec +- Seconds +- sec +- +- +- Toolbar button style +- Toolbar button style +- +- +- Language selection +- Language selection +- +- +- Global auto-type shortcut +- Global auto-type shortcut +- +- +- Auto-type character typing delay milliseconds +- Auto-type character typing delay milliseconds +- +- +- Auto-type start delay milliseconds +- Auto-type start delay milliseconds +- +- +- Automatically launch KeePassXC at system startup +- Automatically launch KeePassXC at system startup +- +- +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- +- +- User Interface +- User Interface +- +- +- Toolbar button style: +- Toolbar button style: +- +- +- Use monospaced font for notes +- Use monospaced font for notes +- +- +- Tray icon type: +- Tray icon type: +- +- +- Reset settings to default… +- Reset settings to default… +- +- +- Auto-Type typing delay: +- Auto-Type typing delay: +- +- +- Global Auto-Type shortcut: +- Global Auto-Type shortcut: +- +- +- Auto-Type start delay: +- Auto-Type start delay: +- +- +- Automatically save when locking database +- Automatically save when locking database +- +- +- Automatically save non-data changes when locking database +- Automatically save non-data changes when locking database +- +- +- Tray icon type +- Tray icon type +- +- +- +- ApplicationSettingsWidgetSecurity +- +- Timeouts +- Timeouts +- +- +- Clear clipboard after +- Clear clipboard after +- +- +- sec +- Seconds +- sec +- +- +- Lock databases after inactivity of +- Lock databases after inactivity of +- +- +- min +- min +- +- +- Forget TouchID after inactivity of +- Forget TouchID after inactivity of +- +- +- Convenience +- Convenience +- +- +- Lock databases when session is locked or lid is closed +- Lock databases when session is locked or lid is closed +- +- +- Forget TouchID when session is locked or lid is closed +- Forget TouchID when session is locked or lid is closed +- +- +- Lock databases after minimizing the window +- Lock databases after minimizing the window +- +- +- Re-lock previously locked database after performing Auto-Type +- Re-lock previously locked database after performing Auto-Type +- +- +- Hide passwords in the entry preview panel +- Hide passwords in the entry preview panel +- +- +- Hide entry notes by default +- Hide entry notes by default +- +- +- Privacy +- Privacy +- +- +- Use DuckDuckGo service to download website icons +- Use DuckDuckGo service to download website icons +- +- +- Clipboard clear seconds +- Clipboard clear seconds +- +- +- Touch ID inactivity reset +- Touch ID inactivity reset +- +- +- Database lock timeout seconds +- Database lock timeout seconds +- +- +- min +- Minutes +- min +- +- +- Clear search query after +- Clear search query after +- +- +- Require password repeat when it is visible +- Require password repeat when it is visible +- +- +- Hide passwords when editing them +- Hide passwords when editing them +- +- +- Use placeholder for empty password fields +- Use placeholder for empty password fields +- +- +- +- AutoType +- +- Couldn't find an entry that matches the window title: +- Couldn't find an entry that matches the window title: +- +- +- Auto-Type - KeePassXC +- Auto-Type - KeePassXC +- +- +- Auto-Type +- Auto-Type +- +- +- The Syntax of your Auto-Type statement is incorrect! +- The Syntax of your Auto-Type statement is incorrect! +- +- +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- +- +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- +- +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- +- +- Permission Required +- Permission Required +- +- +- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. +- +- +- +- AutoTypeAssociationsModel +- +- Window +- Window +- +- +- Sequence +- Sequence +- +- +- Default sequence +- Default sequence +- +- +- +- AutoTypeMatchModel +- +- Group +- Group +- +- +- Title +- Title +- +- +- Username +- Username +- +- +- Sequence +- Sequence +- +- +- +- AutoTypeMatchView +- +- Copy &username +- Copy &username +- +- +- Copy &password +- Copy &password +- +- +- +- AutoTypePlatformMac +- +- Permission Required +- Permission Required +- +- +- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. +- +- +- +- AutoTypeSelectDialog +- +- Auto-Type - KeePassXC +- Auto-Type - KeePassXC +- +- +- Select entry to Auto-Type: +- Select entry to Auto-Type: +- +- +- Search... +- Search... +- +- +- +- BrowserAccessControlDialog +- +- KeePassXC - Browser Access Request +- KeePassXC - Browser Access Request +- +- +- %1 is requesting access to the following entries: +- %1 is requesting access to the following entries: +- +- +- Remember access to checked entries +- Remember access to checked entries +- +- +- Remember +- Remember +- +- +- Allow access to entries +- Allow access to entries +- +- +- Allow Selected +- Allow Selected +- +- +- Deny All +- Deny All +- +- +- Disable for this site +- Disable for this site +- +- +- +- BrowserEntrySaveDialog +- +- KeePassXC-Browser Save Entry +- KeePassXC-Browser Save Entry +- +- +- Ok +- Ok +- +- +- Cancel +- Cancel +- +- +- You have multiple databases open. +-Please select the correct database for saving credentials. +- You have multiple databases open. +-Please select the correct database for saving credentials. +- +- +- +- BrowserService +- +- KeePassXC: New key association request +- KeePassXC: New key association request +- +- +- Save and allow access +- Save and allow access +- +- +- KeePassXC: Overwrite existing key? +- KeePassXC: Overwrite existing key? +- +- +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- +- +- KeePassXC: Update Entry +- KeePassXC: Update Entry +- +- +- Do you want to update the information in %1 - %2? +- Do you want to update the information in %1 - %2? +- +- +- Abort +- Abort +- +- +- Converting attributes to custom data… +- Converting attributes to custom data… +- +- +- KeePassXC: Converted KeePassHTTP attributes +- KeePassXC: Converted KeePassHTTP attributes +- +- +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- +- +- Successfully moved %n keys to custom data. +- Successfully moved %n keys to custom data.Successfully moved %n keys to custom data. +- +- +- KeePassXC: No entry with KeePassHTTP attributes found! +- KeePassXC: No entry with KeePassHTTP attributes found! +- +- +- The active database does not contain an entry with KeePassHTTP attributes. +- The active database does not contain an entry with KeePassHTTP attributes. +- +- +- KeePassXC: Legacy browser integration settings detected +- KeePassXC: Legacy browser integration settings detected +- +- +- KeePassXC: Create a new group +- KeePassXC: Create a new group +- +- +- A request for creating a new group "%1" has been received. +-Do you want to create this group? +- +- A request for creating a new group "%1" has been received. +-Do you want to create this group? +- +- +- +- Your KeePassXC-Browser settings need to be moved into the database settings. +-This is necessary to maintain your current browser connections. +-Would you like to migrate your existing settings now? +- Your KeePassXC-Browser settings need to be moved into the database settings. +-This is necessary to maintain your current browser connections. +-Would you like to migrate your existing settings now? +- +- +- Don't show this warning again +- Don't show this warning again +- +- +- You have received an association request for the following database: +-%1 +- +-Give the connection a unique name or ID, for example: +-chrome-laptop. +- You have received an association request for the following database: +-%1 +- +-Give the connection a unique name or ID, for example: +-chrome-laptop. +- +- +- +- BrowserSettingsWidget +- +- Dialog +- Dialog +- +- +- This is required for accessing your databases with KeePassXC-Browser +- This is required for accessing your databases with KeePassXC-Browser +- +- +- Enable browser integration +- Enable browser integration +- +- +- General +- General +- +- +- Browsers installed as snaps are currently not supported. +- Browsers installed as snaps are currently not supported. +- +- +- Enable integration for these browsers: +- Enable integration for these browsers: +- +- +- Vivaldi +- Vivaldi +- +- +- &Edge +- &Edge +- +- +- Firefox +- Firefox +- +- +- Tor Browser +- Tor Browser +- +- +- Brave +- Brave +- +- +- Google Chrome +- Google Chrome +- +- +- Chromium +- Chromium +- +- +- Show a notification when credentials are requested +- Credentials mean login data requested via browser extension +- Show a notification when credentials are requested +- +- +- Request to unlock the database if it is locked +- Request to unlock the database if it is locked +- +- +- Only entries with the same scheme (http://, https://, ...) are returned. +- Only entries with the same scheme (http://, https://, ...) are returned. +- +- +- Match URL scheme (e.g., https://...) +- Match URL scheme (e.g., https://...) +- +- +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- +- +- Return only best-matching credentials +- Return only best-matching credentials +- +- +- Returns expired credentials. String [expired] is added to the title. +- Returns expired credentials. String [expired] is added to the title. +- +- +- Allow returning expired credentials +- Allow returning expired credentials +- +- +- All databases connected to the extension will return matching credentials. +- All databases connected to the extension will return matching credentials. +- +- +- Search in all opened databases for matching credentials +- Credentials mean login data requested via browser extension +- Search in all opened databases for matching credentials +- +- +- Sort matching credentials by title +- Credentials mean login data requested via browser extension +- Sort matching credentials by title +- +- +- Sort matching credentials by username +- Credentials mean login data requested via browser extension +- Sort matching credentials by username +- +- +- Advanced +- Advanced +- +- +- Never ask before accessing credentials +- Credentials mean login data requested via browser extension +- Never ask before accessing credentials +- +- +- Never ask before updating credentials +- Credentials mean login data requested via browser extension +- Never ask before updating credentials +- +- +- Do not ask permission for HTTP Basic Auth +- An extra HTTP Basic Auth setting +- Do not ask permission for HTTP Basic Auth +- +- +- Automatically creating or updating string fields is not supported. +- Automatically creating or updating string fields is not supported. +- +- +- Return advanced string fields which start with "KPH: " +- Return advanced string fields which start with "KPH: " +- +- +- Don't display the popup suggesting migration of legacy KeePassHTTP settings. +- Don't display the popup suggesting migration of legacy KeePassHTTP settings. +- +- +- Do not prompt for KeePassHTTP settings migration. +- Do not prompt for KeePassHTTP settings migration. +- +- +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- +- +- Update native messaging manifest files at startup +- Update native messaging manifest files at startup +- +- +- Use a custom proxy location if you installed a proxy manually. +- Use a custom proxy location if you installed a proxy manually. +- +- +- Use a custom proxy location: +- Meant is the proxy for KeePassXC-Browser +- Use a custom proxy location: +- +- +- Custom proxy location field +- Custom proxy location field +- +- +- Browser for custom proxy file +- Browser for custom proxy file +- +- +- Browse... +- Button for opening file dialog +- Browse... +- +- +- Use a custom browser configuration location: +- Use a custom browser configuration location: +- +- +- Browser type: +- Browser type: +- +- +- Toolbar button style +- Toolbar button style +- +- +- Config Location: +- Config Location: +- +- +- Custom browser location field +- Custom browser location field +- +- +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- +- +- Browse for custom browser path +- Browse for custom browser path +- +- +- Custom extension ID: +- Custom extension ID: +- +- +- Custom extension ID +- Custom extension ID +- +- +- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 +- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 +- +- +- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 +- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 +- +- +- Please see special instructions for browser extension use below +- Please see special instructions for browser extension use below +- +- +- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. +- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. +- +- +- <b>Warning:</b> The following options can be dangerous! +- <b>Warning:</b> The following options can be dangerous! +- +- +- Executable Files +- Executable Files +- +- +- All Files +- All Files +- +- +- Select custom proxy location +- Select custom proxy location +- +- +- Select native messaging host folder location +- Select native messaging host folder location +- +- +- +- CloneDialog +- +- Clone Options +- Clone Options +- +- +- Append ' - Clone' to title +- Append ' - Clone' to title +- +- +- Replace username and password with references +- Replace username and password with references +- +- +- Copy history +- Copy history +- +- +- +- CsvImportWidget +- +- Import CSV fields +- Import CSV fields +- +- +- filename +- filename +- +- +- size, rows, columns +- size, rows, columns +- +- +- Encoding +- Encoding +- +- +- Codec +- Codec +- +- +- Text is qualified by +- Text is qualified by +- +- +- Fields are separated by +- Fields are separated by +- +- +- Comments start with +- Comments start with +- +- +- Consider '\' an escape character +- Consider '\' an escape character +- +- +- Preview +- Preview +- +- +- Imported from CSV file +- Imported from CSV file +- +- +- Original data: +- Original data: +- +- +- Error +- Error +- +- +- Error(s) detected in CSV file! +- Error(s) detected in CSV file! +- +- +- [%n more message(s) skipped] +- [%n more message skipped][%n more messages skipped] +- +- +- CSV import: writer has errors: +-%1 +- CSV import: writer has errors: +-%1 +- +- +- Text qualification +- Text qualification +- +- +- Field separation +- Field separation +- +- +- Number of header lines to discard +- Number of header lines to discard +- +- +- CSV import preview +- CSV import preview +- +- +- Column Association +- Column Association +- +- +- Last Modified +- Last Modified +- +- +- Password +- Password +- +- +- Created +- Created +- +- +- Notes +- Notes +- +- +- Title +- Title +- +- +- Group +- Group +- +- +- URL +- URL +- +- +- Username +- Username +- +- +- Header lines skipped +- Header lines skipped +- +- +- First line has field names +- First line has field names +- +- +- Not Present +- Not Present +- +- +- Column %1 +- Column %1 +- +- +- TOTP +- TOTP +- +- +- Icon +- Icon +- +- +- +- CsvParserModel +- +- %n column(s) +- %n column%n columns +- +- +- %1, %2, %3 +- file info: bytes, rows, columns +- %1, %2, %3 +- +- +- %n byte(s) +- %n byte%n bytes +- +- +- %n row(s) +- %n row%n rows +- +- +- +- Database +- +- File %1 does not exist. +- File %1 does not exist. +- +- +- Unable to open file %1. +- Unable to open file %1. +- +- +- Error while reading the database: %1 +- Error while reading the database: %1 +- +- +- File cannot be written as it is opened in read-only mode. +- File cannot be written as it is opened in read-only mode. +- +- +- Key not transformed. This is a bug, please report it to the developers! +- Key not transformed. This is a bug, please report it to the developers. +- +- +- %1 +-Backup database located at %2 +- %1 +-Backup database located at %2 +- +- +- Could not save, database does not point to a valid file. +- Could not save, database does not point to a valid file. +- +- +- Could not save, database file is read-only. +- Could not save, database file is read-only. +- +- +- Database file has unmerged changes. +- Database file has unmerged changes. +- +- +- Recycle Bin +- Recycle Bin +- +- +- Passwords +- Root group name +- Passwords +- +- +- Database save is already in progress. +- Database save is already in progress. +- +- +- Could not save, database has not been initialized! +- Could not save, database has not been initialized! +- +- +- +- DatabaseOpenDialog +- +- Unlock Database - KeePassXC +- Unlock Database - KeePassXC +- +- +- +- DatabaseOpenWidget +- +- Key File: +- Key File: +- +- +- Refresh +- Refresh +- +- +- Don't show this warning again +- Don't show this warning again +- +- +- All files +- All files +- +- +- Key files +- Key files +- +- +- Select key file +- Select key file +- +- +- Failed to open key file: %1 +- Failed to open key file: %1 +- +- +- Unlock KeePassXC Database +- Unlock KeePassXC Database +- +- +- Enter Password: +- Enter Password: +- +- +- Password field +- Password field +- +- +- Hardware key slot selection +- Hardware key slot selection +- +- +- Browse for key file +- Browse for key file +- +- +- Browse... +- Browse... +- +- +- Refresh hardware tokens +- Refresh hardware tokens +- +- +- Hardware Key: +- Hardware Key: +- +- +- Hardware key help +- Hardware key help +- +- +- TouchID for Quick Unlock +- TouchID for Quick Unlock +- +- +- Unlock failed and no password given +- Unlock failed and no password given +- +- +- Unlocking the database failed and you did not enter a password. +-Do you want to retry with an "empty" password instead? +- +-To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. +- Unlocking the database failed and you did not enter a password. +-Do you want to retry with an "empty" password instead? +- +-To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. +- +- +- Retry with empty password +- Retry with empty password +- +- +- Enter Additional Credentials (if any): +- Enter Additional Credentials (if any): +- +- +- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +-<p>Click for more information...</p> +- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +-<p>Click for more information...</p> +- +- +- Key file help +- Key file help +- +- +- ? +- ? +- +- +- Cannot use database file as key file +- Cannot use database file as key file +- +- +- You cannot use your database file as a key file. +-If you do not have a key file, please leave the field empty. +- You cannot use your database file as a key file. +-If you do not have a key file, please leave the field empty. +- +- +- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> +- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> +- +- +- Key file to unlock the database +- Key file to unlock the database +- +- +- Please touch the button on your YubiKey! +- Please touch the button on your YubiKey! +- +- +- Detecting hardware keys… +- Detecting hardware keys… +- +- +- No hardware keys detected +- No hardware keys detected +- +- +- Select hardware key… +- Select hardware key… +- +- +- Old key file format +- Old key file format +- +- +- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> +- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> +- +- +- +- DatabaseSettingWidgetMetaData +- +- Passwords +- Passwords +- +- +- +- DatabaseSettingsDialog +- +- Advanced Settings +- Advanced Settings +- +- +- General +- General +- +- +- Security +- Security +- +- +- Encryption Settings +- Encryption Settings +- +- +- Browser Integration +- Browser Integration +- +- +- Database Credentials +- Database Credentials +- +- +- +- DatabaseSettingsWidgetBrowser +- +- KeePassXC-Browser settings +- KeePassXC-Browser settings +- +- +- Stored keys +- Stored keys +- +- +- Remove +- Remove +- +- +- Delete the selected key? +- Delete the selected key? +- +- +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- +- +- Key +- Key +- +- +- Value +- Value +- +- +- Enable Browser Integration to access these settings. +- Enable Browser Integration to access these settings. +- +- +- Disconnect all browsers +- Disconnect all browsers +- +- +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- +- +- KeePassXC: No keys found +- KeePassXC: No keys found +- +- +- No shared encryption keys found in KeePassXC settings. +- No shared encryption keys found in KeePassXC settings. +- +- +- KeePassXC: Removed keys from database +- KeePassXC: Removed keys from database +- +- +- Successfully removed %n encryption key(s) from KeePassXC settings. +- Successfully removed %n encryption key from KeePassXC settings.Successfully removed %n encryption keys from KeePassXC settings. +- +- +- Forget all site-specific settings on entries +- Forget all site-specific settings on entries +- +- +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- +- +- Removing stored permissions… +- Removing stored permissions… +- +- +- Abort +- Abort +- +- +- KeePassXC: Removed permissions +- KeePassXC: Removed permissions +- +- +- Successfully removed permissions from %n entry(s). +- Successfully removed permissions from %n entry.Successfully removed permissions from %n entries. +- +- +- KeePassXC: No entry with permissions found! +- KeePassXC: No entry with permissions found! +- +- +- The active database does not contain an entry with permissions. +- The active database does not contain an entry with permissions. +- +- +- Move KeePassHTTP attributes to custom data +- Move KeePassHTTP attributes to custom data +- +- +- Do you really want to move all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- Do you really want to convert all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- +- +- Stored browser keys +- Stored browser keys +- +- +- Remove selected key +- Remove selected key +- +- +- Move KeePassHTTP attributes to KeePassXC-Browser custom data +- Move KeePassHTTP attributes to KeePassXC-Browser custom data +- +- +- Refresh database root group ID +- Refresh database root group ID +- +- +- Created +- Created +- +- +- Refresh database ID +- Refresh database ID +- +- +- Do you really want refresh the database ID? +-This is only necessary if your database is a copy of another and the browser extension cannot connect. +- Do you really want refresh the database ID? +-This is only necessary if your database is a copy of another and the browser extension cannot connect. +- +- +- +- DatabaseSettingsWidgetDatabaseKey +- +- Add additional protection... +- Add additional protection... +- +- +- No password set +- No password set +- +- +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- +- +- Continue without password +- Continue without password +- +- +- No encryption key added +- No encryption key added +- +- +- You must add at least one encryption key to secure your database! +- You must add at least one encryption key to secure your database! +- +- +- Unknown error +- Unknown error +- +- +- Failed to change database credentials +- Failed to change database credentials +- +- +- +- DatabaseSettingsWidgetEncryption +- +- Encryption Algorithm: +- Encryption Algorithm: +- +- +- AES: 256 Bit (default) +- AES: 256 Bit (default) +- +- +- Twofish: 256 Bit +- Twofish: 256 Bit +- +- +- Key Derivation Function: +- Key Derivation Function: +- +- +- Transform rounds: +- Transform rounds: +- +- +- Memory Usage: +- Memory Usage: +- +- +- Parallelism: +- Parallelism: +- +- +- Decryption Time: +- Decryption Time: +- +- +- ?? s +- ?? s +- +- +- Change +- Change +- +- +- Higher values offer more protection, but opening the database will take longer. +- Higher values offer more protection, but opening the database will take longer. +- +- +- Database format: +- Database format: +- +- +- This is only important if you need to use your database with other programs. +- This is only important if you need to use your database with other programs. +- +- +- KDBX 4.0 (recommended) +- KDBX 4.0 (recommended) +- +- +- KDBX 3.1 +- KDBX 3.1 +- +- +- unchanged +- Database decryption time is unchanged +- unchanged +- +- +- Number of rounds too high +- Key transformation rounds +- Number of rounds too high +- +- +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or days (or even longer) to open! +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or longer to open. +- +- +- Understood, keep number +- Understood, keep number +- +- +- Cancel +- Cancel +- +- +- Number of rounds too low +- Key transformation rounds +- Number of rounds too low +- +- +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database may be too easy to crack! +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database will not be protected from brute force attacks. +- +- +- KDF unchanged +- KDF unchanged +- +- +- Failed to transform key with new KDF parameters; KDF unchanged. +- Failed to transform key with new KDF parameters; KDF unchanged. +- +- +- MiB +- Abbreviation for Mebibytes (KDF settings) +- MiB MiB +- +- +- thread(s) +- Threads for parallel execution (KDF settings) +- thread threads +- +- +- Change existing decryption time +- Change existing decryption time +- +- +- Decryption time in seconds +- Decryption time in seconds +- +- +- Database format +- Database format +- +- +- Encryption algorithm +- Encryption algorithm +- +- +- Key derivation function +- Key derivation function +- +- +- Transform rounds +- Transform rounds +- +- +- Memory usage +- Memory usage +- +- +- Parallelism +- Parallelism +- +- +- ?? ms +- ?? ms +- +- +- ? s +- ? s +- +- +- +- DatabaseSettingsWidgetFdoSecrets +- +- Exposed Entries +- Exposed Entries +- +- +- Don't expose this database +- Don't expose this database +- +- +- Expose entries under this group: +- Expose entries under this group: +- +- +- Enable Secret Service to access these settings. +- Enable Secret Service to access these settings. +- +- +- +- DatabaseSettingsWidgetGeneral +- +- Database Meta Data +- Database Metadata +- +- +- Database name: +- Database name: +- +- +- Database description: +- Database description: +- +- +- Default username: +- Default username: +- +- +- History Settings +- History Settings +- +- +- Max. history items: +- Max. history items: +- +- +- Max. history size: +- Max. history size: +- +- +- MiB +- MiB +- +- +- Use recycle bin +- Use recycle bin +- +- +- Additional Database Settings +- Additional Database Settings +- +- +- Database name field +- Database name field +- +- +- Database description field +- Database description field +- +- +- Default username field +- Default username field +- +- +- Maximum number of history items per entry +- Maximum number of history items per entry +- +- +- Maximum size of history per entry +- Maximum size of history per entry +- +- +- Delete Recycle Bin +- Delete Recycle Bin +- +- +- Do you want to delete the current recycle bin and all its contents? +-This action is not reversible. +- Do you want to delete the current recycle bin and all its contents? +-This action is not reversible. +- +- +- (old) +- (old) +- +- +- Enable compression (recommended) +- Enable compression (recommended) +- +- +- +- DatabaseSettingsWidgetKeeShare +- +- Sharing +- Sharing +- +- +- Breadcrumb +- Breadcrumb +- +- +- Type +- Type +- +- +- Path +- Path +- +- +- Last Signer +- Last Signer +- +- +- Certificates +- Certificates +- +- +- > +- Breadcrumb separator +- > +- +- +- +- DatabaseSettingsWidgetMetaDataSimple +- +- Database Name: +- Database Name: +- +- +- Description: +- Description: +- +- +- Database name field +- Database name field +- +- +- Database description field +- Database description field +- +- +- +- DatabaseTabWidget +- +- KeePass 2 Database +- KeePass 2 Database +- +- +- All files +- All files +- +- +- Open database +- Open database +- +- +- CSV file +- CSV file +- +- +- Merge database +- Merge database +- +- +- Open KeePass 1 database +- Open KeePass 1 database +- +- +- KeePass 1 database +- KeePass 1 database +- +- +- Export database to CSV file +- Export database to CSV file +- +- +- Writing the CSV file failed. +- Writing the CSV file failed. +- +- +- Database creation error +- Database creation error +- +- +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- +- +- Select CSV file +- Select CSV file +- +- +- New Database +- New Database +- +- +- %1 [New Database] +- Database tab name modifier +- %1 [New Database] +- +- +- %1 [Locked] +- Database tab name modifier +- %1 [Locked] +- +- +- %1 [Read-only] +- Database tab name modifier +- %1 [Read-only] +- +- +- Failed to open %1. It either does not exist or is not accessible. +- Failed to open %1. It either does not exist or is not accessible. +- +- +- Export database to HTML file +- Export database to HTML file +- +- +- HTML file +- HTML file +- +- +- Writing the HTML file failed. +- Writing the HTML file failed. +- +- +- Export Confirmation +- Export Confirmation +- +- +- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? +- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? +- +- +- Open OPVault +- Open OPVault +- +- +- +- DatabaseWidget +- +- Searching... +- Searching... +- +- +- Do you really want to delete the entry "%1" for good? +- Do you really want to delete the entry "%1" for good? +- +- +- Do you really want to move entry "%1" to the recycle bin? +- Do you really want to move entry "%1" to the recycle bin? +- +- +- Do you really want to move %n entry(s) to the recycle bin? +- Do you really want to move %n entry to the recycle bin?Do you really want to move %n entries to the recycle bin? +- +- +- Execute command? +- Execute command? +- +- +- Do you really want to execute the following command?<br><br>%1<br> +- Do you really want to execute the following command?<br><br>%1<br> +- +- +- Remember my choice +- Remember my choice +- +- +- Do you really want to delete the group "%1" for good? +- Do you really want to delete the group "%1" for good? +- +- +- No current database. +- No current database. +- +- +- No source database, nothing to do. +- No source database, nothing to do. +- +- +- Search Results (%1) +- Search Results (%1) +- +- +- No Results +- No Results +- +- +- File has changed +- File has changed +- +- +- The database file has changed. Do you want to load the changes? +- The database file has changed. Do you want to load the changes? +- +- +- Merge Request +- Merge Request +- +- +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- +- +- Empty recycle bin? +- Empty recycle bin? +- +- +- Are you sure you want to permanently delete everything from your recycle bin? +- Are you sure you want to permanently delete everything from your recycle bin? +- +- +- Do you really want to delete %n entry(s) for good? +- Do you really want to delete %n entry for good?Do you really want to delete %n entries for good? +- +- +- Delete entry(s)? +- Delete entry?Delete entries? +- +- +- Move entry(s) to recycle bin? +- Move entry to recycle bin?Move entries to recycle bin? +- +- +- Lock Database? +- Lock Database? +- +- +- You are editing an entry. Discard changes and lock anyway? +- You are editing an entry. Discard changes and lock anyway? +- +- +- "%1" was modified. +-Save changes? +- "%1" was modified. +-Save changes? +- +- +- Database was modified. +-Save changes? +- Database was modified. +-Save changes? +- +- +- Save changes? +- Save changes? +- +- +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- +- +- Disable safe saves? +- Disable safe saves? +- +- +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- +- +- Passwords +- Passwords +- +- +- Save database as +- Save database as +- +- +- KeePass 2 Database +- KeePass 2 Database +- +- +- Replace references to entry? +- Replace references to entry? +- +- +- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? +- Entry "%1" has %2 reference. Do you want to overwrite references with values, skip this entry, or delete anyway?Entry "%1" has %2 references. Do you want to overwrite references with values, skip this entry, or delete anyway? +- +- +- Delete group +- Delete group +- +- +- Move group to recycle bin? +- Move group to recycle bin? +- +- +- Do you really want to move the group "%1" to the recycle bin? +- Do you really want to move the group "%1" to the recycle bin? +- +- +- Successfully merged the database files. +- Successfully merged the database files. +- +- +- Database was not modified by merge operation. +- Database was not modified by merge operation. +- +- +- Shared group... +- Shared group... +- +- +- Writing the database failed: %1 +- Writing the database failed: %1 +- +- +- This database is opened in read-only mode. Autosave is disabled. +- This database is opened in read-only mode. Autosave is disabled. +- +- +- Save database backup +- Save database backup +- +- +- Could not find database file: %1 +- Could not find database file: %1 +- +- +- +- EditEntryWidget +- +- Entry +- Entry +- +- +- Advanced +- Advanced +- +- +- Icon +- Icon +- +- +- Auto-Type +- Auto-Type +- +- +- Properties +- Properties +- +- +- History +- History +- +- +- SSH Agent +- SSH Agent +- +- +- n/a +- n/a +- +- +- (encrypted) +- (encrypted) +- +- +- Select private key +- Select private key +- +- +- Entry history +- Entry history +- +- +- Add entry +- Add entry +- +- +- Edit entry +- Edit entry +- +- +- New attribute +- New attribute +- +- +- Are you sure you want to remove this attribute? +- Are you sure you want to remove this attribute? +- +- +- Tomorrow +- Tomorrow +- +- +- %n week(s) +- %n week%n weeks +- +- +- %n month(s) +- %n month%n months +- +- +- Entry updated successfully. +- Entry updated successfully. +- +- +- New attribute %1 +- New attribute %1 +- +- +- %n year(s) +- %n year%n years +- +- +- Confirm Removal +- Confirm Removal +- +- +- Browser Integration +- Browser Integration +- +- +- <empty URL> +- <empty URL> +- +- +- Are you sure you want to remove this URL? +- Are you sure you want to remove this URL? +- +- +- Reveal +- Reveal +- +- +- Hide +- Hide +- +- +- Unsaved Changes +- Unsaved Changes +- +- +- Would you like to save changes to this entry? +- Would you like to save changes to this entry? +- +- +- [PROTECTED] Press Reveal to view or edit +- [PROTECTED] Press Reveal to view or edit +- +- +- Invalid Entry +- Invalid Entry +- +- +- An external merge operation has invalidated this entry. +-Unfortunately, any changes made have been lost. +- An external merge operation has invalidated this entry. +-Unfortunately, any changes made have been lost. +- +- +- +- EditEntryWidgetAdvanced +- +- Additional attributes +- Additional attributes +- +- +- Add +- Add +- +- +- Remove +- Remove +- +- +- Edit Name +- Edit Name +- +- +- Protect +- Protect +- +- +- Reveal +- Reveal +- +- +- Attachments +- Attachments +- +- +- Foreground Color: +- Foreground Color: +- +- +- Background Color: +- Background Color: +- +- +- Attribute selection +- Attribute selection +- +- +- Attribute value +- Attribute value +- +- +- Add a new attribute +- Add a new attribute +- +- +- Remove selected attribute +- Remove selected attribute +- +- +- Edit attribute name +- Edit attribute name +- +- +- Toggle attribute protection +- Toggle attribute protection +- +- +- Show a protected attribute +- Show a protected attribute +- +- +- Foreground color selection +- Foreground color selection +- +- +- Background color selection +- Background color selection +- +- +- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> +- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> +- +- +- Exclude from database reports +- Exclude from database reports +- +- +- +- EditEntryWidgetAutoType +- +- Enable Auto-Type for this entry +- Enable Auto-Type for this entry +- +- +- Window Associations +- Window Associations +- +- +- + +- + +- +- +- - +- - +- +- +- Window title: +- Window title: +- +- +- Use a specific sequence for this association: +- Use a specific sequence for this association: +- +- +- Custom Auto-Type sequence +- Custom Auto-Type sequence +- +- +- Open Auto-Type help webpage +- Open Auto-Type help webpage +- +- +- Existing window associations +- Existing window associations +- +- +- Add new window association +- Add new window association +- +- +- Remove selected window association +- Remove selected window association +- +- +- You can use an asterisk (*) to match everything +- You can use an asterisk (*) to match everything +- +- +- Set the window association title +- Set the window association title +- +- +- You can use an asterisk to match everything +- You can use an asterisk to match everything +- +- +- Custom Auto-Type sequence for this window +- Custom Auto-Type sequence for this window +- +- +- Inherit default Auto-Type sequence from the group +- Inherit default Auto-Type sequence from the group +- +- +- Use custom Auto-Type sequence: +- Use custom Auto-Type sequence: +- +- +- +- EditEntryWidgetBrowser +- +- These settings affect to the entry's behaviour with the browser extension. +- These settings affect the browser extension’s behavior with regard to this database entry. +- +- +- General +- General +- +- +- Skip Auto-Submit for this entry +- Skip Auto-Submit for this entry +- +- +- Hide this entry from the browser extension +- Hide this entry from the browser extension +- +- +- Additional URL's +- Additional URLs +- +- +- Add +- Add +- +- +- Remove +- Remove +- +- +- Edit +- Edit +- +- +- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. +- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. +- +- +- Use this entry only with HTTP Basic Auth +- Use this entry only with HTTP Basic Auth +- +- +- +- EditEntryWidgetHistory +- +- Show +- Show +- +- +- Restore +- Restore +- +- +- Delete +- Delete +- +- +- Delete all +- Delete all +- +- +- Entry history selection +- Entry history selection +- +- +- Show entry at selected history state +- Show entry at selected history state +- +- +- Restore entry to selected history state +- Restore entry to selected history state +- +- +- Delete selected history state +- Delete selected history state +- +- +- Delete all history +- Delete all history +- +- +- +- EditEntryWidgetMain +- +- URL: +- URL: +- +- +- Password: +- Password: +- +- +- Title: +- Title: +- +- +- Presets +- Presets +- +- +- Toggle the checkbox to reveal the notes section. +- Toggle the checkbox to reveal the notes section. +- +- +- Username: +- Username: +- +- +- Url field +- Url field +- +- +- Download favicon for URL +- Download favicon for URL +- +- +- Password field +- Password field +- +- +- Toggle notes visible +- Toggle notes visible +- +- +- Expiration field +- Expiration field +- +- +- Expiration Presets +- Expiration Presets +- +- +- Expiration presets +- Expiration presets +- +- +- Notes field +- Notes field +- +- +- Title field +- Title field +- +- +- Username field +- Username field +- +- +- Toggle expiration +- Toggle expiration +- +- +- Notes: +- Notes: +- +- +- https://example.com +- https://example.com +- +- +- Expires: +- Expires: +- +- +- Edit Entry +- Edit Entry +- +- +- +- EditEntryWidgetSSHAgent +- +- Form +- Form +- +- +- Remove key from agent after +- Remove key from agent after +- +- +- seconds +- seconds +- +- +- Fingerprint +- Fingerprint +- +- +- Remove key from agent when database is closed/locked +- Remove key from agent when database is closed/locked +- +- +- Public key +- Public key +- +- +- Add key to agent when database is opened/unlocked +- Add key to agent when database is opened/unlocked +- +- +- Comment +- Comment +- +- +- Decrypt +- Decrypt +- +- +- n/a +- n/a +- +- +- Copy to clipboard +- Copy to clipboard +- +- +- Private key +- Private key +- +- +- External file +- External file +- +- +- Browse... +- Button for opening file dialog +- Browse... +- +- +- Attachment +- Attachment +- +- +- Add to agent +- Add to agent +- +- +- Remove from agent +- Remove from agent +- +- +- Require user confirmation when this key is used +- Require user confirmation when this key is used +- +- +- Remove key from agent after specified seconds +- Remove key from agent after specified seconds +- +- +- Browser for key file +- Browser for key file +- +- +- External key file +- External key file +- +- +- Select attachment file +- Select attachment file +- +- +- +- EditGroupWidget +- +- Group +- Group +- +- +- Icon +- Icon +- +- +- Properties +- Properties +- +- +- Add group +- Add group +- +- +- Edit group +- Edit group +- +- +- Enable +- Enable +- +- +- Disable +- Disable +- +- +- Inherit from parent group (%1) +- Inherit from parent group (%1) +- +- +- Entry has unsaved changes +- Entry has unsaved changes +- +- +- +- EditGroupWidgetKeeShare +- +- Type: +- Type: +- +- +- Path: +- Path: +- +- +- Password: +- Password: +- +- +- Inactive +- Inactive +- +- +- KeeShare unsigned container +- KeeShare unsigned container +- +- +- KeeShare signed container +- KeeShare signed container +- +- +- Select import source +- Select import source +- +- +- Select export target +- Select export target +- +- +- Select import/export file +- Select import/export file +- +- +- Clear +- Clear +- +- +- Import +- Import +- +- +- Export +- Export +- +- +- Synchronize +- Synchronize +- +- +- Your KeePassXC version does not support sharing this container type. +-Supported extensions are: %1. +- Your KeePassXC version does not support sharing this container type. +-Supported extensions are: %1. +- +- +- %1 is already being exported by this database. +- %1 is already being exported by this database. +- +- +- %1 is already being imported by this database. +- %1 is already being imported by this database. +- +- +- %1 is being imported and exported by different groups in this database. +- %1 is being imported and exported by different groups in this database. +- +- +- KeeShare is currently disabled. You can enable import/export in the application settings. +- KeeShare is a proper noun +- KeeShare is currently disabled. You can enable import/export in the application settings. +- +- +- Database export is currently disabled by application settings. +- Database export is currently disabled by application settings. +- +- +- Database import is currently disabled by application settings. +- Database import is currently disabled by application settings. +- +- +- Sharing mode field +- Sharing mode field +- +- +- Path to share file field +- Path to share file field +- +- +- Password field +- Password field +- +- +- Clear fields +- Clear fields +- +- +- Browse for share file +- Browse for share file +- +- +- Browse... +- Browse... +- +- +- +- EditGroupWidgetMain +- +- Name field +- Name field +- +- +- Notes field +- Notes field +- +- +- Toggle expiration +- Toggle expiration +- +- +- Auto-Type toggle for this and sub groups +- Auto-Type toggle for this and sub groups +- +- +- Expiration field +- Expiration field +- +- +- Search toggle for this and sub groups +- Search toggle for this and sub groups +- +- +- Default auto-type sequence field +- Default auto-type sequence field +- +- +- Expires: +- Expires: +- +- +- Use default Auto-Type sequence of parent group +- Use default Auto-Type sequence of parent group +- +- +- Auto-Type: +- Auto-Type: +- +- +- Search: +- Search: +- +- +- Notes: +- Notes: +- +- +- Name: +- Name: +- +- +- Set default Auto-Type sequence +- Set default Auto-Type sequence +- +- +- Edit Group +- Edit Group +- +- +- +- EditWidgetIcons +- +- Add custom icon +- Add custom icon +- +- +- Delete custom icon +- Delete custom icon +- +- +- Download favicon +- Download favicon +- +- +- Unable to fetch favicon. +- Unable to fetch favicon. +- +- +- Images +- Images +- +- +- All files +- All files +- +- +- Confirm Delete +- Confirm Delete +- +- +- Select Image(s) +- Select Image(s) +- +- +- Successfully loaded %1 of %n icon(s) +- Successfully loaded %1 of %n iconSuccessfully loaded %1 of %n icons +- +- +- No icons were loaded +- No icons were loaded +- +- +- %n icon(s) already exist in the database +- %n icon already exist in the database%n icons already exist in the database +- +- +- The following icon(s) failed: +- The following icon failed:The following icons failed: +- +- +- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? +- This icon is used by %n entry, and will be replaced by the default icon. Are you sure you want to delete it?This icon is used by %n entries, and will be replaced by the default icon. Are you sure you want to delete it? +- +- +- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security +- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security +- +- +- Download favicon for URL +- Download favicon for URL +- +- +- Apply selected icon to subgroups and entries +- Apply selected icon to subgroups and entries +- +- +- Also apply to child groups +- Also apply to child groups +- +- +- Also apply to child entries +- Also apply to child entries +- +- +- Also apply to all children +- Also apply to all children +- +- +- Existing icon selected. +- Existing icon selected. +- +- +- Use default icon +- Use default icon +- +- +- Use custom icon +- Use custom icon +- +- +- Apply icon to... +- Apply icon to... +- +- +- Apply to this group only +- Apply to this group only +- +- +- +- EditWidgetProperties +- +- Created: +- Created: +- +- +- Modified: +- Modified: +- +- +- Accessed: +- Accessed: +- +- +- Uuid: +- Uuid: +- +- +- Plugin Data +- Plugin Data +- +- +- Remove +- Remove +- +- +- Delete plugin data? +- Delete plugin data? +- +- +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- +- +- Key +- Key +- +- +- Value +- Value +- +- +- Datetime created +- Datetime created +- +- +- Datetime modified +- Datetime modified +- +- +- Datetime accessed +- Datetime accessed +- +- +- Unique ID +- Unique ID +- +- +- Plugin data +- Plugin data +- +- +- Remove selected plugin data +- Remove selected plugin data +- +- +- +- Entry +- +- %1 - Clone +- %1 - Clone +- +- +- +- EntryAttachmentsModel +- +- Name +- Name +- +- +- Size +- Size +- +- +- +- EntryAttachmentsWidget +- +- Form +- Form +- +- +- Add +- Add +- +- +- Remove +- Remove +- +- +- Open +- Open +- +- +- Save +- Save +- +- +- Select files +- Select files +- +- +- Are you sure you want to remove %n attachment(s)? +- Are you sure you want to remove %n attachment?Are you sure you want to remove %n attachments? +- +- +- Save attachments +- Save attachments +- +- +- Unable to create directory: +-%1 +- Unable to create directory: +-%1 +- +- +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- +- +- Confirm overwrite +- Confirm overwrite +- +- +- Unable to save attachments: +-%1 +- Unable to save attachments: +-%1 +- +- +- Unable to open attachment: +-%1 +- Unable to open attachment: +-%1 +- +- +- Unable to open attachments: +-%1 +- Unable to open attachments: +-%1 +- +- +- Confirm remove +- Confirm remove +- +- +- Unable to open file(s): +-%1 +- Unable to open file: +-%1Unable to open files: +-%1 +- +- +- Attachments +- Attachments +- +- +- Add new attachment +- Add new attachment +- +- +- Remove selected attachment +- Remove selected attachment +- +- +- Open selected attachment +- Open selected attachment +- +- +- Save selected attachment to disk +- Save selected attachment to disk +- +- +- %1 is a big file (%2 MB). +-Your database may get very large and reduce performance. +- +-Are you sure to add this file? +- %1 is a big file (%2 MB). +-Your database may get very large and reduce performance. +- +-Are you sure to add this file? +- +- +- Confirm Attachment +- Confirm Attachment +- +- +- +- EntryAttributesModel +- +- Name +- Name +- +- +- +- EntryHistoryModel +- +- Last modified +- Last modified +- +- +- Title +- Title +- +- +- Username +- Username +- +- +- URL +- URL +- +- +- +- EntryModel +- +- Ref: +- Reference abbreviation +- Ref: +- +- +- Group +- Group +- +- +- Title +- Title +- +- +- Username +- Username +- +- +- URL +- URL +- +- +- Never +- Never +- +- +- Password +- Password +- +- +- Notes +- Notes +- +- +- Expires +- Expires +- +- +- Created +- Created +- +- +- Modified +- Modified +- +- +- Accessed +- Accessed +- +- +- Attachments +- Attachments +- +- +- Size +- Size +- +- +- Group name +- Group name +- +- +- Entry title +- Entry title +- +- +- Entry notes +- Entry notes +- +- +- Entry expires at +- Entry expires at +- +- +- Creation date +- Creation date +- +- +- Last modification date +- Last modification date +- +- +- Last access date +- Last access date +- +- +- Attached files +- Attached files +- +- +- Entry size +- Entry size +- +- +- Has attachments +- Has attachments +- +- +- Has TOTP one-time password +- Has TOTP one-time password +- +- +- +- EntryPreviewWidget +- +- Close +- Close +- +- +- General +- General +- +- +- Username +- Username +- +- +- Password +- Password +- +- +- Expiration +- Expiration +- +- +- URL +- URL +- +- +- Attributes +- Attributes +- +- +- Attachments +- Attachments +- +- +- Notes +- Notes +- +- +- Autotype +- Autotype +- +- +- Window +- Window +- +- +- Sequence +- Sequence +- +- +- Searching +- Searching +- +- +- Search +- Search +- +- +- Clear +- Clear +- +- +- Never +- Never +- +- +- [PROTECTED] +- [PROTECTED] +- +- +- Enabled +- Enabled +- +- +- Disabled +- Disabled +- +- +- Share +- Share +- +- +- Display current TOTP value +- Display current TOTP value +- +- +- Advanced +- Advanced +- +- +- Default Sequence +- Default Sequence +- +- +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- attributes line +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- +- +- +- EntryURLModel +- +- Invalid URL +- Invalid URL +- +- +- +- EntryView +- +- Fit to window +- Fit to window +- +- +- Fit to contents +- Fit to contents +- +- +- Reset to defaults +- Reset to defaults +- +- +- Has attachments +- Entry attachment icon toggle +- Has attachments +- +- +- Has TOTP +- Entry TOTP icon toggle +- Has TOTP +- +- +- +- FdoSecrets::Item +- +- Entry "%1" from database "%2" was used by %3 +- Entry "%1" from database "%2" was used by %3 +- +- +- +- FdoSecrets::Service +- +- Failed to register DBus service at %1.<br/> +- Failed to register DBus service at %1.<br/> +- +- +- %n Entry(s) was used by %1 +- %1 is the name of an application +- %n Entry was used by %1%n Entries were used by %1 +- +- +- +- FdoSecrets::SettingsDatabaseModel +- +- File Name +- File Name +- +- +- Group +- Group +- +- +- Manage +- Manage +- +- +- Unlock to show +- Unlock to show +- +- +- None +- None +- +- +- +- FdoSecrets::SettingsSessionModel +- +- Application +- Application +- +- +- Manage +- Manage +- +- +- +- FdoSecretsPlugin +- +- <b>Fdo Secret Service:</b> %1 +- <b>Fdo Secret Service:</b> %1 +- +- +- Unknown +- Unknown PID +- Unknown +- +- +- Unknown +- Unknown executable path +- Unknown +- +- +- <i>PID: %1, Executable: %2</i> +- <i>PID: 1234, Executable: /path/to/exe</i> +- <i>PID: %1, Executable: %2</i> +- +- +- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. +- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. +- +- +- +- Group +- +- [empty] +- group has no children +- [empty] +- +- +- +- HibpDownloader +- +- Online password validation failed +- Online password validation failed +- +- +- +- IconDownloaderDialog +- +- Download Favicons +- Download Favicons +- +- +- Cancel +- Cancel +- +- +- Having trouble downloading icons? +-You can enable the DuckDuckGo website icon service in the security section of the application settings. +- Having trouble downloading icons? +-You can enable the DuckDuckGo website icon service in the security section of the application settings. +- +- +- Close +- Close +- +- +- URL +- URL +- +- +- Status +- Status +- +- +- Please wait, processing entry list... +- Please wait, processing entry list... +- +- +- Downloading... +- Downloading... +- +- +- Ok +- Ok +- +- +- Already Exists +- Already Exists +- +- +- Download Failed +- Download Failed +- +- +- Downloading favicons (%1/%2)... +- Downloading favicons (%1/%2)... +- +- +- +- KMessageWidget +- +- &Close +- &Close +- +- +- Close message +- Close message +- +- +- +- Kdbx3Reader +- +- missing database headers +- missing database headers +- +- +- Header doesn't match hash +- Header doesn't match hash +- +- +- Invalid header id size +- Invalid header id size +- +- +- Invalid header field length +- Invalid header field length +- +- +- Invalid header data length +- Invalid header data length +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- +- +- Unable to calculate database key +- Unable to calculate database key +- +- +- Unable to issue challenge-response: %1 +- Unable to issue challenge-response: %1 +- +- +- +- Kdbx3Writer +- +- Unable to issue challenge-response: %1 +- Unable to issue challenge-response: %1 +- +- +- Unable to calculate database key +- Unable to calculate database key +- +- +- +- Kdbx4Reader +- +- missing database headers +- missing database headers +- +- +- Invalid header checksum size +- Invalid header checksum size +- +- +- Header SHA256 mismatch +- Header SHA256 mismatch +- +- +- Unknown cipher +- Unknown cipher +- +- +- Invalid header id size +- Invalid header id size +- +- +- Invalid header field length +- Invalid header field length +- +- +- Invalid header data length +- Invalid header data length +- +- +- Failed to open buffer for KDF parameters in header +- Failed to open buffer for KDF parameters in header +- +- +- Unsupported key derivation function (KDF) or invalid parameters +- Unsupported key derivation function (KDF) or invalid parameters +- +- +- Legacy header fields found in KDBX4 file. +- Legacy header fields found in KDBX4 file. +- +- +- Invalid inner header id size +- Invalid inner header id size +- +- +- Invalid inner header field length +- Invalid inner header field length +- +- +- Invalid inner header binary size +- Invalid inner header binary size +- +- +- Unsupported KeePass variant map version. +- Translation: variant map = data structure for storing meta data +- Unsupported KeePass variant map version. +- +- +- Invalid variant map entry name length +- Translation: variant map = data structure for storing meta data +- Invalid variant map entry name length +- +- +- Invalid variant map entry name data +- Translation: variant map = data structure for storing meta data +- Invalid variant map entry name data +- +- +- Invalid variant map entry value length +- Translation: variant map = data structure for storing meta data +- Invalid variant map entry value length +- +- +- Invalid variant map entry value data +- Translation comment: variant map = data structure for storing meta data +- Invalid variant map entry value data +- +- +- Invalid variant map Bool entry value length +- Translation: variant map = data structure for storing meta data +- Invalid variant map Bool entry value length +- +- +- Invalid variant map Int32 entry value length +- Translation: variant map = data structure for storing meta data +- Invalid variant map Int32 entry value length +- +- +- Invalid variant map UInt32 entry value length +- Translation: variant map = data structure for storing meta data +- Invalid variant map UInt32 entry value length +- +- +- Invalid variant map Int64 entry value length +- Translation: variant map = data structure for storing meta data +- Invalid variant map Int64 entry value length +- +- +- Invalid variant map UInt64 entry value length +- Translation: variant map = data structure for storing meta data +- Invalid variant map UInt64 entry value length +- +- +- Invalid variant map entry type +- Translation: variant map = data structure for storing meta data +- Invalid variant map entry type +- +- +- Invalid variant map field type size +- Translation: variant map = data structure for storing meta data +- Invalid variant map field type size +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- +- +- (HMAC mismatch) +- (HMAC mismatch) +- +- +- Unable to calculate database key: %1 +- Unable to calculate database key: %1 +- +- +- +- Kdbx4Writer +- +- Invalid symmetric cipher algorithm. +- Invalid symmetric cipher algorithm. +- +- +- Invalid symmetric cipher IV size. +- IV = Initialization Vector for symmetric cipher +- Invalid symmetric cipher IV size. +- +- +- Failed to serialize KDF parameters variant map +- Translation comment: variant map = data structure for storing meta data +- Failed to serialize KDF parameters variant map +- +- +- Unable to calculate database key: %1 +- Unable to calculate database key: %1 +- +- +- +- KdbxReader +- +- Unsupported cipher +- Unsupported cipher +- +- +- Invalid compression flags length +- Invalid compression flags length +- +- +- Unsupported compression algorithm +- Unsupported compression algorithm +- +- +- Invalid master seed size +- Invalid master seed size +- +- +- Invalid transform seed size +- Invalid transform seed size +- +- +- Invalid transform rounds size +- Invalid transform rounds size +- +- +- Invalid start bytes size +- Invalid start bytes size +- +- +- Invalid random stream id size +- Invalid random stream id size +- +- +- Invalid inner random stream cipher +- Invalid inner random stream cipher +- +- +- Not a KeePass database. +- Not a KeePass database. +- +- +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- +- +- Unsupported KeePass 2 database version. +- Unsupported KeePass 2 database version. +- +- +- Invalid cipher uuid length: %1 (length=%2) +- Invalid cipher uuid length: %1 (length=%2) +- +- +- Unable to parse UUID: %1 +- Unable to parse UUID: %1 +- +- +- Failed to read database file. +- Failed to read database file. +- +- +- +- KdbxXmlReader +- +- XML parsing failure: %1 +- XML parsing failure: %1 +- +- +- No root group +- No root group +- +- +- Missing icon uuid or data +- Missing icon uuid or data +- +- +- Missing custom data key or value +- Missing custom data key or value +- +- +- Multiple group elements +- Multiple group elements +- +- +- Null group uuid +- Null group uuid +- +- +- Invalid group icon number +- Invalid group icon number +- +- +- Invalid EnableAutoType value +- Invalid EnableAutoType value +- +- +- Invalid EnableSearching value +- Invalid EnableSearching value +- +- +- No group uuid found +- No group uuid found +- +- +- Null DeleteObject uuid +- Null DeleteObject uuid +- +- +- Missing DeletedObject uuid or time +- Missing DeletedObject uuid or time +- +- +- Null entry uuid +- Null entry uuid +- +- +- Invalid entry icon number +- Invalid entry icon number +- +- +- History element in history entry +- History element in history entry +- +- +- No entry uuid found +- No entry uuid found +- +- +- History element with different uuid +- History element with different uuid +- +- +- Duplicate custom attribute found +- Duplicate custom attribute found +- +- +- Entry string key or value missing +- Entry string key or value missing +- +- +- Entry binary key or value missing +- Entry binary key or value missing +- +- +- Auto-type association window or sequence missing +- Auto-type association window or sequence missing +- +- +- Invalid bool value +- Invalid bool value +- +- +- Invalid date time value +- Invalid date time value +- +- +- Invalid color value +- Invalid color value +- +- +- Invalid color rgb part +- Invalid color rgb part +- +- +- Invalid number value +- Invalid number value +- +- +- Invalid uuid value +- Invalid uuid value +- +- +- Unable to decompress binary +- Translator meant is a binary data inside an entry +- Unable to decompress binary +- +- +- XML error: +-%1 +-Line %2, column %3 +- XML error: +-%1 +-Line %2, column %3 +- +- +- +- KeeAgentSettings +- +- Invalid KeeAgent settings file structure. +- Invalid KeeAgent settings file structure. +- +- +- Private key is an attachment but no attachments provided. +- Private key is an attachment but no attachments provided. +- +- +- Private key is empty +- Private key is empty +- +- +- File too large to be a private key +- File too large to be a private key +- +- +- Failed to open private key +- Failed to open private key +- +- +- +- KeePass1OpenWidget +- +- Unable to open the database. +- Unable to open the database. +- +- +- Import KeePass1 Database +- Import KeePass1 Database +- +- +- +- KeePass1Reader +- +- Unable to read keyfile. +- Unable to read keyfile. +- +- +- Not a KeePass database. +- Not a KeePass database. +- +- +- Unsupported encryption algorithm. +- Unsupported encryption algorithm. +- +- +- Unsupported KeePass database version. +- Unsupported KeePass database version. +- +- +- Unable to read encryption IV +- IV = Initialization Vector for symmetric cipher +- Unable to read encryption IV +- +- +- Invalid number of groups +- Invalid number of groups +- +- +- Invalid number of entries +- Invalid number of entries +- +- +- Invalid content hash size +- Invalid content hash size +- +- +- Invalid transform seed size +- Invalid transform seed size +- +- +- Invalid number of transform rounds +- Invalid number of transform rounds +- +- +- Unable to construct group tree +- Unable to construct group tree +- +- +- Root +- Root +- +- +- Key transformation failed +- Key transformation failed +- +- +- Invalid group field type number +- Invalid group field type number +- +- +- Invalid group field size +- Invalid group field size +- +- +- Read group field data doesn't match size +- Read group field data doesn't match size +- +- +- Incorrect group id field size +- Incorrect group id field size +- +- +- Incorrect group creation time field size +- Incorrect group creation time field size +- +- +- Incorrect group modification time field size +- Incorrect group modification time field size +- +- +- Incorrect group access time field size +- Incorrect group access time field size +- +- +- Incorrect group expiry time field size +- Incorrect group expiry time field size +- +- +- Incorrect group icon field size +- Incorrect group icon field size +- +- +- Incorrect group level field size +- Incorrect group level field size +- +- +- Invalid group field type +- Invalid group field type +- +- +- Missing group id or level +- Missing group id or level +- +- +- Missing entry field type number +- Missing entry field type number +- +- +- Invalid entry field size +- Invalid entry field size +- +- +- Read entry field data doesn't match size +- Read entry field data doesn't match size +- +- +- Invalid entry uuid field size +- Invalid entry UUID field size +- +- +- Invalid entry group id field size +- Invalid entry group id field size +- +- +- Invalid entry icon field size +- Invalid entry icon field size +- +- +- Invalid entry creation time field size +- Invalid entry creation time field size +- +- +- Invalid entry modification time field size +- Invalid entry modification time field size +- +- +- Invalid entry expiry time field size +- Invalid entry expiry time field size +- +- +- Invalid entry field type +- Invalid entry field type +- +- +- unable to seek to content position +- unable to seek to content position +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- +- +- Unable to calculate database key +- Unable to calculate database key +- +- +- +- KeeShare +- +- Invalid sharing reference +- Invalid sharing reference +- +- +- Inactive share %1 +- Inactive share %1 +- +- +- Imported from %1 +- Imported from %1 +- +- +- Exported to %1 +- Exported to %1 +- +- +- Synchronized with %1 +- Synchronized with %1 +- +- +- Import is disabled in settings +- Import is disabled in settings +- +- +- Export is disabled in settings +- Export is disabled in settings +- +- +- Inactive share +- Inactive share +- +- +- Imported from +- Imported from +- +- +- Exported to +- Exported to +- +- +- Synchronized with +- Synchronized with +- +- +- +- KeyComponentWidget +- +- Key Component +- Key Component +- +- +- Key Component Description +- Key Component Description +- +- +- Cancel +- Cancel +- +- +- Key Component set, click to change or remove +- Key Component set, click to change or remove +- +- +- Add %1 +- Add a key component +- Add %1 +- +- +- Change %1 +- Change a key component +- Change %1 +- +- +- Remove %1 +- Remove a key component +- Remove %1 +- +- +- %1 set, click to change or remove +- Change or remove a key component +- %1 set, click to change or remove +- +- +- +- KeyFileEditWidget +- +- Generate +- Generate +- +- +- Key File +- Key File +- +- +- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> +- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out.</p> +- +- +- Error loading the key file '%1' +-Message: %2 +- Error loading the key file '%1' +-Message: %2 +- +- +- Key files +- Key files +- +- +- All files +- All files +- +- +- Create Key File... +- Create Key File... +- +- +- Error creating key file +- Error creating key file +- +- +- Unable to create key file: %1 +- Unable to create key file: %1 +- +- +- Select a key file +- Select a key file +- +- +- Key file selection +- Key file selection +- +- +- Browse for key file +- Browse for key file +- +- +- Browse... +- Browse... +- +- +- Generate a new key file +- Generate a new key file +- +- +- Note: Do not use a file that may change as that will prevent you from unlocking your database! +- Note: Do not use a file that may change as that will prevent you from unlocking your database! +- +- +- Invalid Key File +- Invalid Key File +- +- +- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. +- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. +- +- +- Suspicious Key File +- Suspicious Key File +- +- +- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. +-Are you sure you want to continue with this file? +- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. +-Are you sure you want to continue with this file? +- +- +- Old key file format +- Old key file format +- +- +- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. +- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. +- +- +- +- MainWindow +- +- &Database +- &Database +- +- +- &Help +- &Help +- +- +- &Groups +- &Groups +- +- +- &Tools +- &Tools +- +- +- &Quit +- &Quit +- +- +- &About +- &About +- +- +- Database settings +- Database settings +- +- +- Copy username to clipboard +- Copy username to clipboard +- +- +- Copy password to clipboard +- Copy password to clipboard +- +- +- &Settings +- &Settings +- +- +- &Title +- &Title +- +- +- Copy title to clipboard +- Copy title to clipboard +- +- +- &URL +- &URL +- +- +- Copy URL to clipboard +- Copy URL to clipboard +- +- +- &Notes +- &Notes +- +- +- Copy notes to clipboard +- Copy notes to clipboard +- +- +- Copy &TOTP +- Copy &TOTP +- +- +- E&mpty recycle bin +- E&mpty recycle bin +- +- +- Clear history +- Clear history +- +- +- Access error for config file %1 +- Access error for config file %1 +- +- +- Settings +- Settings +- +- +- Toggle window +- Toggle window +- +- +- Quit KeePassXC +- Quit KeePassXC +- +- +- Please touch the button on your YubiKey! +- Please touch the button on your YubiKey! +- +- +- WARNING: You are using an unstable build of KeePassXC! +-There is a high risk of corruption, maintain a backup of your databases. +-This version is not meant for production use. +- WARNING: You are using an unstable build of KeePassXC. +-There is a high risk of corruption, maintain a backup of your databases. +-This version is not meant for production use. +- +- +- &Donate +- &Donate +- +- +- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +-We recommend you use the AppImage available on our downloads page. +- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +-We recommend you use the AppImage available on our downloads page. +- +- +- &Import +- &Import +- +- +- Create a new database +- Create a new database +- +- +- Merge from another KDBX database +- Merge from another KDBX database +- +- +- Add a new entry +- Add a new entry +- +- +- View or edit entry +- View or edit entry +- +- +- Add a new group +- Add a new group +- +- +- Perform &Auto-Type +- Perform &Auto-Type +- +- +- Open &URL +- Open &URL +- +- +- Import a KeePass 1 database +- Import a KeePass 1 database +- +- +- Import a CSV file +- Import a CSV file +- +- +- NOTE: You are using a pre-release version of KeePassXC! +-Expect some bugs and minor issues, this version is not meant for production use. +- NOTE: You are using a pre-release version of KeePassXC. +-Expect some bugs and minor issues, this version is not meant for production use. +- +- +- Check for updates on startup? +- Check for updates on startup? +- +- +- Would you like KeePassXC to check for updates on startup? +- Would you like KeePassXC to check for updates on startup? +- +- +- You can always check for updates manually from the application menu. +- You can always check for updates manually from the application menu. +- +- +- &Export +- &Export +- +- +- Sort &A-Z +- Sort &A-Z +- +- +- Sort &Z-A +- Sort &Z-A +- +- +- &Password Generator +- &Password Generator +- +- +- Import a 1Password Vault +- Import a 1Password Vault +- +- +- &Getting Started +- &Getting Started +- +- +- &User Guide +- &User Guide +- +- +- &Keyboard Shortcuts +- &Keyboard Shortcuts +- +- +- &Recent Databases +- &Recent Databases +- +- +- &Entries +- &Entries +- +- +- Copy Att&ribute +- Copy Att&ribute +- +- +- TOTP +- TOTP +- +- +- View +- View +- +- +- Theme +- Theme +- +- +- &Check for Updates +- &Check for Updates +- +- +- &Open Database… +- &Open Database… +- +- +- &Save Database +- &Save Database +- +- +- &Close Database +- &Close Database +- +- +- &New Database… +- &New Database… +- +- +- &Merge From Database… +- &Merge From Database… +- +- +- &New Entry… +- &New Entry… +- +- +- &Edit Entry… +- &Edit Entry… +- +- +- &Delete Entry… +- &Delete Entry… +- +- +- &New Group… +- &New Group… +- +- +- &Edit Group… +- &Edit Group… +- +- +- &Delete Group… +- &Delete Group… +- +- +- Download All &Favicons… +- Download All &Favicons… +- +- +- Sa&ve Database As… +- Sa&ve Database As… +- +- +- Database &Security… +- Database &Security… +- +- +- Database &Reports... +- Database &Reports... +- +- +- Statistics, health check, etc. +- Statistics, health check, etc. +- +- +- &Database Settings… +- &Database Settings… +- +- +- &Clone Entry… +- &Clone Entry… +- +- +- Move u&p +- Move u&p +- +- +- Move entry one step up +- Move entry one step up +- +- +- Move do&wn +- Move do&wn +- +- +- Move entry one step down +- Move entry one step down +- +- +- Copy &Username +- Copy &Username +- +- +- Copy &Password +- Copy &Password +- +- +- Download &Favicon +- Download &Favicon +- +- +- &Lock Databases +- &Lock Databases +- +- +- &CSV File… +- &CSV File… +- +- +- &HTML File… +- &HTML File… +- +- +- KeePass 1 Database… +- KeePass 1 Database… +- +- +- 1Password Vault… +- 1Password Vault… +- +- +- CSV File… +- CSV File… +- +- +- Show TOTP +- Show TOTP +- +- +- Show QR Code +- Show QR Code +- +- +- Set up TOTP… +- Set up TOTP… +- +- +- Report a &Bug +- Report a &Bug +- +- +- Open Getting Started Guide +- Open Getting Started Guide +- +- +- &Online Help +- &Online Help +- +- +- Go to online documentation +- Go to online documentation +- +- +- Open User Guide +- Open User Guide +- +- +- Save Database Backup... +- Save Database Backup... +- +- +- Add key to SSH Agent +- Add key to SSH Agent +- +- +- Remove key from SSH Agent +- Remove key from SSH Agent +- +- +- Compact Mode +- Compact Mode +- +- +- Automatic +- Automatic +- +- +- Light +- Light +- +- +- Dark +- Dark +- +- +- Classic (Platform-native) +- Classic (Platform-native) +- +- +- Show Toolbar +- Show Toolbar +- +- +- Show Preview Panel +- Show Preview Panel +- +- +- Don't show again for this version +- Don't show again for this version +- +- +- Restart Application? +- Restart Application? +- +- +- You must restart the application to apply this setting. Would you like to restart now? +- You must restart the application to apply this setting. Would you like to restart now? +- +- +- Perform Auto-Type Sequence +- Perform Auto-Type Sequence +- +- +- {USERNAME} +- {USERNAME} +- +- +- {USERNAME}{ENTER} +- {USERNAME}{ENTER} +- +- +- {PASSWORD} +- {PASSWORD} +- +- +- {PASSWORD}{ENTER} +- {PASSWORD}{ENTER} +- +- +- Always on Top +- Always on Top +- +- +- Hide Usernames +- Hide Usernames +- +- +- Hide Passwords +- Hide Passwords +- +- +- +- ManageDatabase +- +- Database settings +- Database settings +- +- +- Edit database settings +- Edit database settings +- +- +- Unlock database +- Unlock database +- +- +- Unlock database to show more information +- Unlock database to show more information +- +- +- Lock database +- Lock database +- +- +- +- ManageSession +- +- Disconnect +- Disconnect +- +- +- Disconnect this application +- Disconnect this application +- +- +- +- Merger +- +- Creating missing %1 [%2] +- Creating missing %1 [%2] +- +- +- Relocating %1 [%2] +- Relocating %1 [%2] +- +- +- Overwriting %1 [%2] +- Overwriting %1 [%2] +- +- +- older entry merged from database "%1" +- older entry merged from database "%1" +- +- +- Adding backup for older target %1 [%2] +- Adding backup for older target %1 [%2] +- +- +- Adding backup for older source %1 [%2] +- Adding backup for older source %1 [%2] +- +- +- Reapplying older target entry on top of newer source %1 [%2] +- Reapplying older target entry on top of newer source %1 [%2] +- +- +- Reapplying older source entry on top of newer target %1 [%2] +- Reapplying older source entry on top of newer target %1 [%2] +- +- +- Synchronizing from newer source %1 [%2] +- Synchronizing from newer source %1 [%2] +- +- +- Synchronizing from older source %1 [%2] +- Synchronizing from older source %1 [%2] +- +- +- Deleting child %1 [%2] +- Deleting child %1 [%2] +- +- +- Deleting orphan %1 [%2] +- Deleting orphan %1 [%2] +- +- +- Changed deleted objects +- Changed deleted objects +- +- +- Adding missing icon %1 +- Adding missing icon %1 +- +- +- Removed custom data %1 [%2] +- Removed custom data %1 [%2] +- +- +- Adding custom data %1 [%2] +- Adding custom data %1 [%2] +- +- +- +- NewDatabaseWizard +- +- Create a new KeePassXC database... +- Create a new KeePassXC database... +- +- +- Root +- Root group +- Root +- +- +- +- NewDatabaseWizardPage +- +- WizardPage +- WizardPage +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- +- +- Advanced Settings +- Advanced Settings +- +- +- Simple Settings +- Simple Settings +- +- +- Encryption Settings +- Encryption Settings +- +- +- +- NewDatabaseWizardPageDatabaseKey +- +- Database Credentials +- Database Credentials +- +- +- A set of credentials known only to you that protects your database. +- A set of credentials known only to you that protects your database. +- +- +- +- NewDatabaseWizardPageEncryption +- +- Encryption Settings +- Encryption Settings +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- +- +- +- NewDatabaseWizardPageMetaData +- +- General Database Information +- General Database Information +- +- +- Please fill in the display name and an optional description for your new database: +- Please fill in the display name and an optional description for your new database: +- +- +- +- NixUtils +- +- Password Manager +- Password Manager +- +- +- +- OpData01 +- +- Invalid OpData01, does not contain header +- Invalid OpData01, does not contain header +- +- +- Unable to read all IV bytes, wanted 16 but got %1 +- Unable to read all IV bytes, wanted 16 but got %1 +- +- +- Unable to init cipher for opdata01: %1 +- Unable to init cipher for opdata01: %1 +- +- +- Unable to read all HMAC signature bytes +- Unable to read all HMAC signature bytes +- +- +- Malformed OpData01 due to a failed HMAC +- Malformed OpData01 due to a failed HMAC +- +- +- Unable to process clearText in place +- Unable to process clearText in place +- +- +- Expected %1 bytes of clear-text, found %2 +- Expected %1 bytes of clear-text, found %2 +- +- +- +- OpVaultOpenWidget +- +- Read Database did not produce an instance +-%1 +- Read Database did not produce an instance +-%1 +- +- +- +- OpVaultReader +- +- Directory .opvault must exist +- Directory .opvault must exist +- +- +- Directory .opvault must be readable +- Directory .opvault must be readable +- +- +- Directory .opvault/default must exist +- Directory .opvault/default must exist +- +- +- Directory .opvault/default must be readable +- Directory .opvault/default must be readable +- +- +- Unable to decode masterKey: %1 +- Unable to decode masterKey: %1 +- +- +- Unable to derive master key: %1 +- Unable to derive master key: %1 +- +- +- +- OpenSSHKey +- +- Invalid key file, expecting an OpenSSH key +- Invalid key file, expecting an OpenSSH key +- +- +- PEM boundary mismatch +- PEM boundary mismatch +- +- +- Base64 decoding failed +- Base64 decoding failed +- +- +- Key file way too small. +- Key file way too small. +- +- +- Key file magic header id invalid +- Key file magic header id invalid +- +- +- Found zero keys +- Found zero keys +- +- +- Failed to read public key. +- Failed to read public key. +- +- +- Corrupted key file, reading private key failed +- Corrupted key file, reading private key failed +- +- +- No private key payload to decrypt +- No private key payload to decrypt +- +- +- Trying to run KDF without cipher +- Trying to run KDF without cipher +- +- +- Passphrase is required to decrypt this key +- Passphrase is required to decrypt this key +- +- +- Key derivation failed, key file corrupted? +- Key derivation failed, key file corrupted? +- +- +- Decryption failed, wrong passphrase? +- Decryption failed, wrong passphrase? +- +- +- Unexpected EOF while reading public key +- Unexpected EOF while reading public key +- +- +- Unexpected EOF while reading private key +- Unexpected EOF while reading private key +- +- +- Can't write public key as it is empty +- Can't write public key as it is empty +- +- +- Unexpected EOF when writing public key +- Unexpected EOF when writing public key +- +- +- Can't write private key as it is empty +- Can't write private key as it is empty +- +- +- Unexpected EOF when writing private key +- Unexpected EOF when writing private key +- +- +- Unsupported key type: %1 +- Unsupported key type: %1 +- +- +- Unknown cipher: %1 +- Unknown cipher: %1 +- +- +- Cipher IV is too short for MD5 kdf +- Cipher IV is too short for MD5 kdf +- +- +- Unknown KDF: %1 +- Unknown KDF: %1 +- +- +- Unknown key type: %1 +- Unknown key type: %1 +- +- +- +- PasswordEdit +- +- Passwords do not match +- Passwords do not match +- +- +- Passwords match so far +- Passwords match so far +- +- +- Toggle Password (%1) +- Toggle Password (%1) +- +- +- Generate Password (%1) +- Generate Password (%1) +- +- +- Warning: Caps Lock enabled! +- Warning: Caps Lock enabled! +- +- +- +- PasswordEditWidget +- +- Enter password: +- Enter password: +- +- +- Confirm password: +- Confirm password: +- +- +- Password +- Password +- +- +- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> +- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> +- +- +- Passwords do not match. +- Passwords do not match. +- +- +- Password field +- Password field +- +- +- Repeat password field +- Repeat password field +- +- +- +- PasswordGeneratorWidget +- +- %p% +- %p% +- +- +- strength +- Password strength +- strength +- +- +- entropy +- entropy +- +- +- Password +- Password +- +- +- Character Types +- Character Types +- +- +- Numbers +- Numbers +- +- +- Extended ASCII +- Extended ASCII +- +- +- Exclude look-alike characters +- Exclude look-alike characters +- +- +- Pick characters from every group +- Pick characters from every group +- +- +- &Length: +- &Length: +- +- +- Passphrase +- Passphrase +- +- +- Wordlist: +- Wordlist: +- +- +- Word Separator: +- Word Separator: +- +- +- Close +- Close +- +- +- Entropy: %1 bit +- Entropy: %1 bit +- +- +- Password Quality: %1 +- Password Quality: %1 +- +- +- Poor +- Password quality +- Poor +- +- +- Weak +- Password quality +- Weak +- +- +- Good +- Password quality +- Good +- +- +- Excellent +- Password quality +- Excellent +- +- +- Switch to advanced mode +- Switch to advanced mode +- +- +- Advanced +- Advanced +- +- +- Braces +- Braces +- +- +- Punctuation +- Punctuation +- +- +- Quotes +- Quotes +- +- +- Logograms +- Logograms +- +- +- Character set to exclude from generated password +- Character set to exclude from generated password +- +- +- Do not include: +- Do not include: +- +- +- Add non-hex letters to "do not include" list +- Add non-hex letters to "do not include" list +- +- +- Hex +- Hex +- +- +- Excluded characters: "0", "1", "l", "I", "O", "|", "ï¹’" +- Excluded characters: "0", "1", "l", "I", "O", "|", "ï¹’" +- +- +- Generated password +- Generated password +- +- +- Upper-case letters +- Upper-case letters +- +- +- Lower-case letters +- Lower-case letters +- +- +- Special characters +- Special characters +- +- +- Math Symbols +- Math Symbols +- +- +- Dashes and Slashes +- Dashes and Slashes +- +- +- Excluded characters +- Excluded characters +- +- +- Hex Passwords +- Hex Passwords +- +- +- Password length +- Password length +- +- +- Word Case: +- Word Case: +- +- +- Regenerate password +- Regenerate password +- +- +- Copy password +- Copy password +- +- +- lower case +- lower case +- +- +- UPPER CASE +- UPPER CASE +- +- +- Title Case +- Title Case +- +- +- Generate Password +- Generate Password +- +- +- Also choose from: +- Also choose from: +- +- +- Additional characters to use for the generated password +- Additional characters to use for the generated password +- +- +- Additional characters +- Additional characters +- +- +- Word Count: +- Word Count: +- +- +- Esc +- Esc +- +- +- Apply Password +- Apply Password +- +- +- Ctrl+S +- Ctrl+S +- +- +- Regenerate password (%1) +- Regenerate password (%1) +- +- +- Special Characters +- Special Characters +- +- +- +- QApplication +- +- KeeShare +- KeeShare +- +- +- Statistics +- Statistics +- +- +- Very weak password +- Very weak password +- +- +- Password entropy is %1 bits +- Password entropy is %1 bits +- +- +- Weak password +- Weak password +- +- +- Used in %1/%2 +- Used in %1/%2 +- +- +- Password is used %1 times +- Password is used %1 times +- +- +- Password has expired +- Password has expired +- +- +- Password expiry was %1 +- Password expiry was %1 +- +- +- Password is about to expire +- Password is about to expire +- +- +- Password expires in %1 days +- Password expires in %1 days +- +- +- Password will expire soon +- Password will expire soon +- +- +- Password expires on %1 +- Password expires on %1 +- +- +- Health Check +- Health Check +- +- +- HIBP +- HIBP +- +- +- +- QMessageBox +- +- Overwrite +- Overwrite +- +- +- Delete +- Delete +- +- +- Move +- Move +- +- +- Empty +- Empty +- +- +- Remove +- Remove +- +- +- Skip +- Skip +- +- +- Disable +- Disable +- +- +- Merge +- Merge +- +- +- Continue +- Continue +- +- +- +- QObject +- +- Database not opened +- Database not opened +- +- +- Database hash not available +- Database hash not available +- +- +- Client public key not received +- Client public key not received +- +- +- Cannot decrypt message +- Cannot decrypt message +- +- +- Action cancelled or denied +- Action cancelled or denied +- +- +- KeePassXC association failed, try again +- KeePassXC association failed, try again +- +- +- Encryption key is not recognized +- Encryption key is not recognized +- +- +- Incorrect action +- Incorrect action +- +- +- Empty message received +- Empty message received +- +- +- No URL provided +- No URL provided +- +- +- No logins found +- No logins found +- +- +- Unknown error +- Unknown error +- +- +- Add a new entry to a database. +- Add a new entry to a database. +- +- +- Path of the database. +- Path of the database. +- +- +- Key file of the database. +- Key file of the database. +- +- +- path +- path +- +- +- Username for the entry. +- Username for the entry. +- +- +- username +- username +- +- +- URL for the entry. +- URL for the entry. +- +- +- URL +- URL +- +- +- Prompt for the entry's password. +- Prompt for the entry's password. +- +- +- Generate a password for the entry. +- Generate a password for the entry. +- +- +- length +- length +- +- +- Path of the entry to add. +- Path of the entry to add. +- +- +- Path of the entry to clip. +- clip = copy to clipboard +- Path of the entry to clip. +- +- +- Timeout in seconds before clearing the clipboard. +- Timeout in seconds before clearing the clipboard. +- +- +- Edit an entry. +- Edit an entry. +- +- +- Title for the entry. +- Title for the entry. +- +- +- title +- title +- +- +- Path of the entry to edit. +- Path of the entry to edit. +- +- +- Estimate the entropy of a password. +- Estimate the entropy of a password. +- +- +- Password for which to estimate the entropy. +- Password for which to estimate the entropy. +- +- +- Perform advanced analysis on the password. +- Perform advanced analysis on the password. +- +- +- +- +-Available commands: +- +- +- +-Available commands: +- +- +- +- Name of the command to execute. +- Name of the command to execute. +- +- +- List database entries. +- List database entries. +- +- +- Path of the group to list. Default is / +- Path of the group to list. Default is / +- +- +- Find entries quickly. +- Find entries quickly. +- +- +- Search term. +- Search term. +- +- +- Merge two databases. +- Merge two databases. +- +- +- Path of the database to merge from. +- Path of the database to merge from. +- +- +- Use the same credentials for both database files. +- Use the same credentials for both database files. +- +- +- Key file of the database to merge from. +- Key file of the database to merge from. +- +- +- Show an entry's information. +- Show an entry's information. +- +- +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- +- +- attribute +- attribute +- +- +- Name of the entry to show. +- Name of the entry to show. +- +- +- NULL device +- NULL device +- +- +- error reading from device +- error reading from device +- +- +- malformed string +- malformed string +- +- +- missing closing quote +- missing closing quote +- +- +- Group +- Group +- +- +- Title +- Title +- +- +- Username +- Username +- +- +- Password +- Password +- +- +- Notes +- Notes +- +- +- Last Modified +- Last Modified +- +- +- Created +- Created +- +- +- Browser Integration +- Browser Integration +- +- +- SSH Agent +- SSH Agent +- +- +- Generate a new random diceware passphrase. +- Generate a new random diceware passphrase. +- +- +- Word count for the diceware passphrase. +- Word count for the diceware passphrase. +- +- +- Wordlist for the diceware generator. +-[Default: EFF English] +- Wordlist for the diceware generator. +-[Default: EFF English] +- +- +- Generate a new random password. +- Generate a new random password. +- +- +- Could not create entry with path %1. +- Could not create entry with path %1. +- +- +- Enter password for new entry: +- Enter password for new entry: +- +- +- Writing the database failed %1. +- Writing the database failed %1. +- +- +- Successfully added entry %1. +- Successfully added entry %1. +- +- +- Invalid timeout value %1. +- Invalid timeout value %1. +- +- +- Entry %1 not found. +- Entry %1 not found. +- +- +- Entry with path %1 has no TOTP set up. +- Entry with path %1 has no TOTP set up. +- +- +- Clearing the clipboard in %1 second(s)... +- Clearing the clipboard in %1 second...Clearing the clipboard in %1 seconds... +- +- +- Clipboard cleared! +- Clipboard cleared! +- +- +- Silence password prompt and other secondary outputs. +- Silence password prompt and other secondary outputs. +- +- +- count +- CLI parameter +- count +- +- +- Could not find entry with path %1. +- Could not find entry with path %1. +- +- +- Not changing any field for entry %1. +- Not changing any field for entry %1. +- +- +- Enter new password for entry: +- Enter new password for entry: +- +- +- Writing the database failed: %1 +- Writing the database failed: %1 +- +- +- Successfully edited entry %1. +- Successfully edited entry %1. +- +- +- Length %1 +- Length %1 +- +- +- Entropy %1 +- Entropy %1 +- +- +- Log10 %1 +- Log10 %1 +- +- +- Multi-word extra bits %1 +- Multi-word extra bits %1 +- +- +- Type: Bruteforce +- Type: Bruteforce +- +- +- Type: Dictionary +- Type: Dictionary +- +- +- Type: Dict+Leet +- Type: Dict+Leet +- +- +- Type: User Words +- Type: User Words +- +- +- Type: User+Leet +- Type: User+Leet +- +- +- Type: Repeated +- Type: Repeated +- +- +- Type: Sequence +- Type: Sequence +- +- +- Type: Spatial +- Type: Spatial +- +- +- Type: Date +- Type: Date +- +- +- Type: Bruteforce(Rep) +- Type: Bruteforce(Rep) +- +- +- Type: Dictionary(Rep) +- Type: Dictionary(Rep) +- +- +- Type: Dict+Leet(Rep) +- Type: Dict+Leet(Rep) +- +- +- Type: User Words(Rep) +- Type: User Words(Rep) +- +- +- Type: User+Leet(Rep) +- Type: User+Leet(Rep) +- +- +- Type: Repeated(Rep) +- Type: Repeated(Rep) +- +- +- Type: Sequence(Rep) +- Type: Sequence(Rep) +- +- +- Type: Spatial(Rep) +- Type: Spatial(Rep) +- +- +- Type: Date(Rep) +- Type: Date(Rep) +- +- +- Type: Unknown%1 +- Type: Unknown%1 +- +- +- Entropy %1 (%2) +- Entropy %1 (%2) +- +- +- *** Password length (%1) != sum of length of parts (%2) *** +- *** Password length (%1) != sum of length of parts (%2) *** +- +- +- Failed to load key file %1: %2 +- Failed to load key file %1: %2 +- +- +- Length of the generated password +- Length of the generated password +- +- +- Use lowercase characters +- Use lowercase characters +- +- +- Use uppercase characters +- Use uppercase characters +- +- +- Use special characters +- Use special characters +- +- +- Use extended ASCII +- Use extended ASCII +- +- +- Exclude character set +- Exclude character set +- +- +- chars +- chars +- +- +- Exclude similar looking characters +- Exclude similar looking characters +- +- +- Include characters from every selected group +- Include characters from every selected group +- +- +- Recursively list the elements of the group. +- Recursively list the elements of the group. +- +- +- Cannot find group %1. +- Cannot find group %1. +- +- +- Error reading merge file: +-%1 +- Error reading merge file: +-%1 +- +- +- Unable to save database to file : %1 +- Unable to save database to file : %1 +- +- +- Unable to save database to file: %1 +- Unable to save database to file: %1 +- +- +- Successfully recycled entry %1. +- Successfully recycled entry %1. +- +- +- Successfully deleted entry %1. +- Successfully deleted entry %1. +- +- +- Show the entry's current TOTP. +- Show the entry's current TOTP. +- +- +- ERROR: unknown attribute %1. +- ERROR: unknown attribute %1. +- +- +- No program defined for clipboard manipulation +- No program defined for clipboard manipulation +- +- +- file empty +- file empty +- +- +- %1: (row, col) %2,%3 +- %1: (row, col) %2,%3 +- +- +- AES-KDF (KDBX 4) +- AES-KDF (KDBX 4) +- +- +- AES-KDF (KDBX 3.1) +- AES-KDF (KDBX 3.1) +- +- +- Invalid Settings +- TOTP +- Invalid Settings +- +- +- Invalid Key +- TOTP +- Invalid Key +- +- +- Message encryption failed. +- Message encryption failed. +- +- +- No groups found +- No groups found +- +- +- Create a new database. +- Create a new database. +- +- +- File %1 already exists. +- File %1 already exists. +- +- +- Loading the key file failed +- Loading the key file failed +- +- +- No key is set. Aborting database creation. +- No key is set. Aborting database creation. +- +- +- Failed to save the database: %1. +- Failed to save the database: %1. +- +- +- Successfully created new database. +- Successfully created new database. +- +- +- Creating KeyFile %1 failed: %2 +- Creating KeyFile %1 failed: %2 +- +- +- Loading KeyFile %1 failed: %2 +- Loading KeyFile %1 failed: %2 +- +- +- Path of the entry to remove. +- Path of the entry to remove. +- +- +- Existing single-instance lock file is invalid. Launching new instance. +- Existing single-instance lock file is invalid. Launching new instance. +- +- +- The lock file could not be created. Single-instance mode disabled. +- The lock file could not be created. Single-instance mode disabled. +- +- +- KeePassXC - cross-platform password manager +- KeePassXC - cross-platform password manager +- +- +- filenames of the password databases to open (*.kdbx) +- filenames of the password databases to open (*.kdbx) +- +- +- path to a custom config file +- path to a custom config file +- +- +- key file of the database +- key file of the database +- +- +- read password of the database from stdin +- read password of the database from stdin +- +- +- Another instance of KeePassXC is already running. +- Another instance of KeePassXC is already running. +- +- +- Fatal error while testing the cryptographic functions. +- Fatal error while testing the cryptographic functions. +- +- +- KeePassXC - Error +- KeePassXC - Error +- +- +- Database password: +- Database password: +- +- +- Cannot create new group +- Cannot create new group +- +- +- Deactivate password key for the database. +- Deactivate password key for the database. +- +- +- Displays debugging information. +- Displays debugging information. +- +- +- Deactivate password key for the database to merge from. +- Deactivate password key for the database to merge from. +- +- +- Version %1 +- Version %1 +- +- +- Build Type: %1 +- Build Type: %1 +- +- +- Revision: %1 +- Revision: %1 +- +- +- Distribution: %1 +- Distribution: %1 +- +- +- Debugging mode is disabled. +- Debugging mode is disabled. +- +- +- Debugging mode is enabled. +- Debugging mode is enabled. +- +- +- Operating system: %1 +-CPU architecture: %2 +-Kernel: %3 %4 +- Operating system: %1 +-CPU architecture: %2 +-Kernel: %3 %4 +- +- +- Auto-Type +- Auto-Type +- +- +- KeeShare (signed and unsigned sharing) +- KeeShare (signed and unsigned sharing) +- +- +- KeeShare (only signed sharing) +- KeeShare (only signed sharing) +- +- +- KeeShare (only unsigned sharing) +- KeeShare (only unsigned sharing) +- +- +- YubiKey +- YubiKey +- +- +- TouchID +- TouchID +- +- +- None +- None +- +- +- Enabled extensions: +- Enabled extensions: +- +- +- Cryptographic libraries: +- Cryptographic libraries: +- +- +- Cannot generate a password and prompt at the same time! +- Cannot generate a password and prompt at the same time! +- +- +- Adds a new group to a database. +- Adds a new group to a database. +- +- +- Path of the group to add. +- Path of the group to add. +- +- +- Group %1 already exists! +- Group %1 already exists! +- +- +- Group %1 not found. +- Group %1 not found. +- +- +- Successfully added group %1. +- Successfully added group %1. +- +- +- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. +- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. +- +- +- FILENAME +- FILENAME +- +- +- Analyze passwords for weaknesses and problems. +- Analyze passwords for weaknesses and problems. +- +- +- Failed to open HIBP file %1: %2 +- Failed to open HIBP file %1: %2 +- +- +- Evaluating database entries against HIBP file, this will take a while... +- Evaluating database entries against HIBP file, this will take a while... +- +- +- Close the currently opened database. +- Close the currently opened database. +- +- +- Display this help. +- Display this help. +- +- +- slot +- slot +- +- +- Invalid word count %1 +- Invalid word count %1 +- +- +- The word list is too small (< 1000 items) +- The word list is too small (< 1000 items) +- +- +- Exit interactive mode. +- Exit interactive mode. +- +- +- Exports the content of a database to standard output in the specified format. +- Exports the content of a database to standard output in the specified format. +- +- +- Unable to export database to XML: %1 +- Unable to export database to XML: %1 +- +- +- Unsupported format %1 +- Unsupported format %1 +- +- +- Use numbers +- Use numbers +- +- +- Invalid password length %1 +- Invalid password length %1 +- +- +- Display command help. +- Display command help. +- +- +- Available commands: +- Available commands: +- +- +- Import the contents of an XML database. +- Import the contents of an XML database. +- +- +- Path of the XML database export. +- Path of the XML database export. +- +- +- Path of the new database. +- Path of the new database. +- +- +- Successfully imported database. +- Successfully imported database. +- +- +- Unknown command %1 +- Unknown command %1 +- +- +- Flattens the output to single lines. +- Flattens the output to single lines. +- +- +- Only print the changes detected by the merge operation. +- Only print the changes detected by the merge operation. +- +- +- Yubikey slot for the second database. +- Yubikey slot for the second database. +- +- +- Successfully merged %1 into %2. +- Successfully merged %1 into %2. +- +- +- Database was not modified by merge operation. +- Database was not modified by merge operation. +- +- +- Moves an entry to a new group. +- Moves an entry to a new group. +- +- +- Path of the entry to move. +- Path of the entry to move. +- +- +- Path of the destination group. +- Path of the destination group. +- +- +- Could not find group with path %1. +- Could not find group with path %1. +- +- +- Entry is already in group %1. +- Entry is already in group %1. +- +- +- Successfully moved entry %1 to group %2. +- Successfully moved entry %1 to group %2. +- +- +- Open a database. +- Open a database. +- +- +- Path of the group to remove. +- Path of the group to remove. +- +- +- Cannot remove root group from database. +- Cannot remove root group from database. +- +- +- Successfully recycled group %1. +- Successfully recycled group %1. +- +- +- Successfully deleted group %1. +- Successfully deleted group %1. +- +- +- Failed to open database file %1: not found +- Failed to open database file %1: not found +- +- +- Failed to open database file %1: not a plain file +- Failed to open database file %1: not a plain file +- +- +- Failed to open database file %1: not readable +- Failed to open database file %1: not readable +- +- +- Enter password to unlock %1: +- Enter password to unlock %1: +- +- +- Invalid YubiKey slot %1 +- Invalid YubiKey slot %1 +- +- +- Enter password to encrypt database (optional): +- Enter password to encrypt database (optional): +- +- +- HIBP file, line %1: parse error +- HIBP file, line %1: parse error +- +- +- Secret Service Integration +- Secret Service Integration +- +- +- User name +- User name +- +- +- Password for '%1' has been leaked %2 time(s)! +- Password for '%1' has been leaked %2 time!Password for '%1' has been leaked %2 times! +- +- +- Invalid password generator after applying all options +- Invalid password generator after applying all options +- +- +- Show the protected attributes in clear text. +- Show the protected attributes in clear text. +- +- +- Browser Plugin Failure +- Browser Plugin Failure +- +- +- Could not save the native messaging script file for %1. +- Could not save the native messaging script file for %1. +- +- +- Copy the given attribute to the clipboard. Defaults to "password" if not specified. +- Copy the given attribute to the clipboard. Defaults to "password" if not specified. +- +- +- Copy the current TOTP to the clipboard (equivalent to "-a totp"). +- Copy the current TOTP to the clipboard (equivalent to "-a totp"). +- +- +- Copy an entry's attribute to the clipboard. +- Copy an entry's attribute to the clipboard. +- +- +- ERROR: Please specify one of --attribute or --totp, not both. +- ERROR: Please specify one of --attribute or --totp, not both. +- +- +- ERROR: attribute %1 is ambiguous, it matches %2. +- ERROR: attribute %1 is ambiguous, it matches %2. +- +- +- Attribute "%1" not found. +- Attribute "%1" not found. +- +- +- Entry's "%1" attribute copied to the clipboard! +- Entry's "%1" attribute copied to the clipboard! +- +- +- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). +- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). +- +- +- slot[:serial] +- slot[:serial] +- +- +- Target decryption time in MS for the database. +- Target decryption time in MS for the database. +- +- +- time +- time +- +- +- Set the key file for the database. +- Set the key file for the database. +- +- +- Set a password for the database. +- Set a password for the database. +- +- +- Invalid decryption time %1. +- Invalid decryption time %1. +- +- +- Target decryption time must be between %1 and %2. +- Target decryption time must be between %1 and %2. +- +- +- Failed to set database password. +- Failed to set database password. +- +- +- Benchmarking key derivation function for %1ms delay. +- Benchmarking key derivation function for %1ms delay. +- +- +- Setting %1 rounds for key derivation function. +- Setting %1 rounds for key derivation function. +- +- +- error while setting database key derivation settings. +- error while setting database key derivation settings. +- +- +- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. +- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. +- +- +- Unable to import XML database: %1 +- Unable to import XML database: %1 +- +- +- Show a database's information. +- Show a database's information. +- +- +- UUID: +- UUID: +- +- +- Name: +- Name: +- +- +- Description: +- Description: +- +- +- Cipher: +- Cipher: +- +- +- KDF: +- KDF: +- +- +- Recycle bin is enabled. +- Recycle bin is enabled. +- +- +- Recycle bin is not enabled. +- Recycle bin is not enabled. +- +- +- Invalid command %1. +- Invalid command %1. +- +- +- Invalid YubiKey serial %1 +- Invalid YubiKey serial %1 +- +- +- Please touch the button on your YubiKey to continue… +- Please touch the button on your YubiKey to continue… +- +- +- Do you want to create a database with an empty password? [y/N]: +- Do you want to create a database with an empty password? [y/N]: +- +- +- Repeat password: +- Repeat password: +- +- +- Error: Passwords do not match. +- Error: Passwords do not match. +- +- +- All clipping programs failed. Tried %1 +- +- All clipping programs failed. Tried %1 +- +- +- +- AES (%1 rounds) +- AES (%1 rounds) +- +- +- AES 256-bit +- AES 256-bit +- +- +- Twofish 256-bit +- Twofish 256-bit +- +- +- ChaCha20 256-bit +- ChaCha20: 256-bit {20 256-?} +- +- +- Benchmark %1 delay +- Benchmark %1 delay +- +- +- %1 ms +- milliseconds +- %1 ms%1 ms +- +- +- %1 s +- seconds +- %1 s%1 s +- +- +- path to a custom local config file +- path to a custom local config file +- +- +- WARNING: You are using an old key file format which KeePassXC may +-stop supporting in the future. +- +-Please consider generating a new key file. +- WARNING: You are using an old key file format which KeePassXC may +-stop supporting in the future. +- +-Please consider generating a new key file. +- +- +- Argon2%1 (%2 rounds, %3 KB) +- Argon2%1 (%2 rounds, %3 KB) +- +- +- Argon2d (KDBX 4 – recommended) +- Argon2d (KDBX 4 – recommended) +- +- +- Argon2id (KDBX 4) +- Argon2id (KDBX 4) +- +- +- TOTP +- TOTP +- +- +- Icon +- Icon +- +- +- Unsupported key file version: %1 +- Unsupported key file version: %1 +- +- +- Checksum mismatch! Key file may be corrupt. +- Checksum mismatch! Key file may be corrupt. +- +- +- Unexpected key file data! Key file may be corrupt. +- Unexpected key file data! Key file may be corrupt. +- +- +- +- QtIOCompressor +- +- Internal zlib error when compressing: +- Internal zlib error when compressing: +- +- +- Error writing to underlying device: +- Error writing to underlying device: +- +- +- Error opening underlying device: +- Error opening underlying device: +- +- +- Error reading data from underlying device: +- Error reading data from underlying device: +- +- +- Internal zlib error when decompressing: +- Internal zlib error when decompressing: +- +- +- +- QtIOCompressor::open +- +- The gzip format not supported in this version of zlib. +- The gzip format not supported in this version of zlib. +- +- +- Internal zlib error: +- Internal zlib error: +- +- +- +- ReportsWidgetHealthcheck +- +- Also show entries that have been excluded from reports +- Also show entries that have been excluded from reports +- +- +- Hover over reason to show additional details. Double-click entries to edit. +- Hover over reason to show additional details. Double-click entries to edit. +- +- +- Bad +- Password quality +- Bad +- +- +- Bad — password must be changed +- Bad — password must be changed +- +- +- Poor +- Password quality +- Poor +- +- +- Poor — password should be changed +- Poor — password should be changed +- +- +- Weak +- Password quality +- Weak +- +- +- Weak — consider changing the password +- Weak — consider changing the password +- +- +- (Excluded) +- (Excluded) +- +- +- This entry is being excluded from reports +- This entry is being excluded from reports +- +- +- Please wait, health data is being calculated... +- Please wait, health data is being calculated... +- +- +- Congratulations, everything is healthy! +- Congratulations, everything is healthy! +- +- +- Title +- Title +- +- +- Path +- Path +- +- +- Score +- Score +- +- +- Reason +- Reason +- +- +- Edit Entry... +- Edit Entry... +- +- +- Exclude from reports +- Exclude from reports +- +- +- +- ReportsWidgetHibp +- +- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. +- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. +- +- +- Perform Online Analysis +- Perform Online Analysis +- +- +- Also show entries that have been excluded from reports +- Also show entries that have been excluded from reports +- +- +- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. +- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. +- +- +- Congratulations, no exposed passwords! +- Congratulations, no exposed passwords! +- +- +- Title +- Title +- +- +- Path +- Path +- +- +- Password exposed… +- Password exposed… +- +- +- (Excluded) +- (Excluded) +- +- +- This entry is being excluded from reports +- This entry is being excluded from reports +- +- +- once +- once +- +- +- up to 10 times +- up to 10 times +- +- +- up to 100 times +- up to 100 times +- +- +- up to 1000 times +- up to 1000 times +- +- +- up to 10,000 times +- up to 10,000 times +- +- +- up to 100,000 times +- up to 100,000 times +- +- +- up to a million times +- up to a million times +- +- +- millions of times +- millions of times +- +- +- Edit Entry... +- Edit Entry... +- +- +- Exclude from reports +- Exclude from reports +- +- +- +- ReportsWidgetStatistics +- +- Hover over lines with error icons for further information. +- Hover over lines with error icons for further information. +- +- +- Name +- Name +- +- +- Value +- Value +- +- +- Please wait, database statistics are being calculated... +- Please wait, database statistics are being calculated... +- +- +- Database name +- Database name +- +- +- Description +- Description +- +- +- Location +- Location +- +- +- Last saved +- Last saved +- +- +- Unsaved changes +- Unsaved changes +- +- +- yes +- yes +- +- +- no +- no +- +- +- The database was modified, but the changes have not yet been saved to disk. +- The database was modified, but the changes have not yet been saved to disk. +- +- +- Number of groups +- Number of groups +- +- +- Number of entries +- Number of entries +- +- +- Number of expired entries +- Number of expired entries +- +- +- The database contains entries that have expired. +- The database contains entries that have expired. +- +- +- Unique passwords +- Unique passwords +- +- +- Non-unique passwords +- Non-unique passwords +- +- +- More than 10% of passwords are reused. Use unique passwords when possible. +- More than 10% of passwords are reused. Use unique passwords when possible. +- +- +- Maximum password reuse +- Maximum password reuse +- +- +- Some passwords are used more than three times. Use unique passwords when possible. +- Some passwords are used more than three times. Use unique passwords when possible. +- +- +- Number of short passwords +- Number of short passwords +- +- +- Recommended minimum password length is at least 8 characters. +- Recommended minimum password length is at least 8 characters. +- +- +- Number of weak passwords +- Number of weak passwords +- +- +- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. +- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. +- +- +- Entries excluded from reports +- Entries excluded from reports +- +- +- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. +- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. +- +- +- Average password length +- Average password length +- +- +- %1 characters +- %1 characters +- +- +- Average password length is less than ten characters. Longer passwords provide more security. +- Average password length is less than ten characters. Longer passwords provide more security. +- +- +- +- SSHAgent +- +- Agent connection failed. +- Agent connection failed. +- +- +- Agent protocol error. +- Agent protocol error. +- +- +- No agent running, cannot add identity. +- No agent running, cannot add identity. +- +- +- No agent running, cannot remove identity. +- No agent running, cannot remove identity. +- +- +- Agent refused this identity. Possible reasons include: +- Agent refused this identity. Possible reasons include: +- +- +- The key has already been added. +- The key has already been added. +- +- +- Restricted lifetime is not supported by the agent (check options). +- Restricted lifetime is not supported by the agent (check options). +- +- +- A confirmation request is not supported by the agent (check options). +- A confirmation request is not supported by the agent (check options). +- +- +- Key identity ownership conflict. Refusing to add. +- Key identity ownership conflict. Refusing to add. +- +- +- No agent running, cannot list identities. +- No agent running, cannot list identities. +- +- +- +- SearchHelpWidget +- +- Search Help +- Search Help +- +- +- Search terms are as follows: [modifiers][field:]["]term["] +- Search terms are as follows: [modifiers][field:]["]term["] +- +- +- Every search term must match (ie, logical AND) +- Every search term must match (ie, logical AND) +- +- +- Modifiers +- Modifiers +- +- +- exclude term from results +- exclude term from results +- +- +- match term exactly +- match term exactly +- +- +- use regex in term +- use regex in term +- +- +- Fields +- Fields +- +- +- Term Wildcards +- Term Wildcards +- +- +- match anything +- match anything +- +- +- match one +- match one +- +- +- logical OR +- logical OR +- +- +- Examples +- Examples +- +- +- +- SearchWidget +- +- Search +- Search +- +- +- Limit search to selected group +- Limit search to selected group +- +- +- Search Help +- Search Help +- +- +- Search (%1)... +- Search placeholder text, %1 is the keyboard shortcut +- Search (%1)... +- +- +- Case sensitive +- Case sensitive +- +- +- +- SettingsWidgetFdoSecrets +- +- Options +- Options +- +- +- Enable KeepassXC Freedesktop.org Secret Service integration +- Enable KeepassXC Freedesktop.org Secret Service integration +- +- +- General +- General +- +- +- Show notification when credentials are requested +- Show notification when credentials are requested +- +- +- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> +- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> +- +- +- Exposed database groups: +- Exposed database groups: +- +- +- Authorization +- Authorization +- +- +- These applications are currently connected: +- These applications are currently connected: +- +- +- Don't confirm when entries are deleted by clients +- Don't confirm when entries are deleted by clients +- +- +- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. +- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. +- +- +- <b>Warning:</b> +- <b>Warning:</b> +- +- +- Save current changes to activate the plugin and enable editing of this section. +- Save current changes to activate the plugin and enable editing of this section. +- +- +- +- SettingsWidgetKeeShare +- +- Active +- Active +- +- +- Allow export +- Allow export +- +- +- Allow import +- Allow import +- +- +- Own certificate +- Personal certificate +- +- +- Fingerprint: +- Fingerprint: +- +- +- Certificate: +- Certificate: +- +- +- Signer +- Signer +- +- +- Key: +- Key: +- +- +- Generate +- Generate +- +- +- Import +- Import +- +- +- Export +- Export +- +- +- Imported certificates +- Imported certificates +- +- +- Trust +- Trust +- +- +- Ask +- Ask +- +- +- Untrust +- Untrust +- +- +- Remove +- Remove +- +- +- Path +- Path +- +- +- Status +- Status +- +- +- Fingerprint +- Fingerprint +- +- +- Certificate +- Certificate +- +- +- Trusted +- Trusted +- +- +- Untrusted +- Untrusted +- +- +- Unknown +- Unknown +- +- +- key.share +- Filetype for KeeShare key +- key.share +- +- +- KeeShare key file +- KeeShare key file +- +- +- All files +- All files +- +- +- Select path +- Select path +- +- +- Exporting changed certificate +- Exporting changed certificate +- +- +- The exported certificate is not the same as the one in use. Do you want to export the current certificate? +- The exported certificate is not the same as the one in use. Do you want to export the current certificate? +- +- +- Signer: +- Signer: +- +- +- Allow KeeShare imports +- Allow KeeShare imports +- +- +- Allow KeeShare exports +- Allow KeeShare exports +- +- +- Only show warnings and errors +- Only show warnings and errors +- +- +- Key +- Key +- +- +- Signer name field +- Signer name field +- +- +- Generate new certificate +- Generate new certificate +- +- +- Import existing certificate +- Import existing certificate +- +- +- Export own certificate +- Export personal certificate +- +- +- Known shares +- Known shares +- +- +- Trust selected certificate +- Trust selected certificate +- +- +- Ask whether to trust the selected certificate every time +- Ask whether to trust the selected certificate every time +- +- +- Untrust selected certificate +- Untrust selected certificate +- +- +- Remove selected certificate +- Remove selected certificate +- +- +- +- ShareExport +- +- Overwriting signed share container is not supported - export prevented +- Overwriting signed share container is not supported - export prevented +- +- +- Could not write export container (%1) +- Could not write export container (%1) +- +- +- Could not embed signature: Could not open file to write (%1) +- Could not embed signature: Could not open file to write (%1) +- +- +- Could not embed signature: Could not write file (%1) +- Could not embed signature: Could not write file (%1) +- +- +- Could not embed database: Could not open file to write (%1) +- Could not embed database: Could not open file to write (%1) +- +- +- Could not embed database: Could not write file (%1) +- Could not embed database: Could not write file (%1) +- +- +- Overwriting unsigned share container is not supported - export prevented +- Overwriting unsigned share container is not supported - export prevented +- +- +- Could not write export container +- Could not write export container +- +- +- Unexpected export error occurred +- Unexpected export error occurred +- +- +- +- ShareImport +- +- Import from container without signature +- Import from container without signature +- +- +- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? +- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? +- +- +- Import from container with certificate +- Import from container with certificate +- +- +- Do you want to trust %1 with the fingerprint of %2 from %3? +- Do you want to trust %1 with the fingerprint of %2 from %3? {1 ?} {2 ?} +- +- +- Not this time +- Not this time +- +- +- Never +- Never +- +- +- Always +- Always +- +- +- Just this time +- Just this time +- +- +- Signed share container are not supported - import prevented +- Signed share container are not supported - import prevented +- +- +- File is not readable +- File is not readable +- +- +- Invalid sharing container +- Invalid sharing container +- +- +- Untrusted import prevented +- Untrusted import prevented +- +- +- Successful signed import +- Successful signed import +- +- +- Unsigned share container are not supported - import prevented +- Unsigned share container are not supported - import prevented +- +- +- Successful unsigned import +- Successful unsigned import +- +- +- File does not exist +- File does not exist +- +- +- Unknown share container type +- Unknown share container type +- +- +- +- ShareObserver +- +- Import from %1 failed (%2) +- Import from %1 failed (%2) +- +- +- Import from %1 successful (%2) +- Import from %1 successful (%2) +- +- +- Imported from %1 +- Imported from %1 +- +- +- Export to %1 failed (%2) +- Export to %1 failed (%2) +- +- +- Export to %1 successful (%2) +- Export to %1 successful (%2) +- +- +- Export to %1 +- Export to %1 +- +- +- Multiple import source path to %1 in %2 +- Multiple import source path to %1 in %2 +- +- +- Conflicting export target path %1 in %2 +- Conflicting export target path %1 in %2 +- +- +- +- TotpDialog +- +- Timed Password +- Timed Password +- +- +- 000000 +- 000000 +- +- +- Copy +- Copy +- +- +- Expires in <b>%n</b> second(s) +- Expires in <b>%n</b> secondExpires in <b>%n</b> seconds +- +- +- +- TotpExportSettingsDialog +- +- Copy +- Copy +- +- +- NOTE: These TOTP settings are custom and may not work with other authenticators. +- TOTP QR code dialog warning +- NOTE: These TOTP settings are custom and may not work with other authenticators. +- +- +- There was an error creating the QR code. +- There was an error creating the QR code. +- +- +- Closing in %1 seconds. +- Closing in %1 seconds. +- +- +- +- TotpSetupDialog +- +- Setup TOTP +- Setup TOTP +- +- +- Default RFC 6238 token settings +- Default RFC 6238 token settings +- +- +- Steam token settings +- Steam token settings +- +- +- Use custom settings +- Use custom settings +- +- +- Custom Settings +- Custom Settings +- +- +- Time step: +- Time step: +- +- +- sec +- Seconds +- sec +- +- +- Code size: +- Code size: +- +- +- Secret Key: +- Secret Key: +- +- +- Secret key must be in Base32 format +- Secret key must be in Base32 format +- +- +- Secret key field +- Secret key field +- +- +- Algorithm: +- Algorithm: +- +- +- Time step field +- Time step field +- +- +- digits +- digits +- +- +- Invalid TOTP Secret +- Invalid TOTP Secret +- +- +- You have entered an invalid secret key. The key must be in Base32 format. +-Example: JBSWY3DPEHPK3PXP +- You have entered an invalid secret key. The key must be in Base32 format. +-Example: JBSWY3DPEHPK3PXP +- +- +- Confirm Remove TOTP Settings +- Confirm Remove TOTP Settings +- +- +- Are you sure you want to delete TOTP settings for this entry? +- Are you sure you want to delete TOTP settings for this entry? +- +- +- +- URLEdit +- +- Invalid URL +- Invalid URL +- +- +- +- UpdateCheckDialog +- +- Checking for updates +- Checking for updates +- +- +- Checking for updates... +- Checking for updates... +- +- +- Close +- Close +- +- +- Update Error! +- Update Error! +- +- +- An error occurred in retrieving update information. +- An error occurred in retrieving update information. +- +- +- Please try again later. +- Please try again later. +- +- +- Software Update +- Software Update +- +- +- A new version of KeePassXC is available! +- A new version of KeePassXC is available! +- +- +- KeePassXC %1 is now available — you have %2. +- KeePassXC %1 is now available — you have %2. +- +- +- Download it at keepassxc.org +- Download it at keepassxc.org +- +- +- You're up-to-date! +- You're up-to-date! +- +- +- KeePassXC %1 is currently the newest version available +- KeePassXC %1 is currently the newest version available +- +- +- +- WelcomeWidget +- +- Start storing your passwords securely in a KeePassXC database +- Start storing your passwords securely in a KeePassXC database +- +- +- Create new database +- Create new database +- +- +- Open existing database +- Open existing database +- +- +- Import from KeePass 1 +- Import from KeePass 1 +- +- +- Import from CSV +- Import from CSV +- +- +- Recent databases +- Recent databases +- +- +- Welcome to KeePassXC %1 +- Welcome to KeePassXC %1 +- +- +- Import from 1Password +- Import from 1Password +- +- +- Open a recent database +- Open a recent database +- +- +- +- YubiKey +- +- %1 [%2] Configured Slot - %3 +- %1 [%2] Configured Slot - %3 +- +- +- %1 [%2] Challenge Response - Slot %3 - %4 +- %1 [%2] Challenge Response - Slot %3 - %4 +- +- +- Press +- Press +- +- +- Passive +- Passive +- +- +- %1 Invalid slot specified - %2 +- %1 Invalid slot specified - %2 +- +- +- The YubiKey interface has not been initialized. +- The YubiKey interface has not been initialized. +- +- +- Hardware key is currently in use. +- Hardware key is currently in use. +- +- +- Could not find hardware key with serial number %1. Please plug it in to continue. +- Could not find hardware key with serial number %1. Please plug it in to continue. +- +- +- Hardware key timed out waiting for user interaction. +- Hardware key timed out waiting for user interaction. +- +- +- A USB error ocurred when accessing the hardware key: %1 +- A USB error ocurred when accessing the hardware key: %1 +- +- +- Failed to complete a challenge-response, the specific error was: %1 +- Failed to complete a challenge-response, the specific error was: %1 +- +- +- +- YubiKeyEditWidget +- +- Refresh +- Refresh +- +- +- YubiKey Challenge-Response +- YubiKey Challenge-Response +- +- +- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- +- +- Refresh hardware tokens +- Refresh hardware tokens +- +- +- Hardware key slot selection +- Hardware key slot selection +- +- +- Could not find any hardware keys! +- Could not find any hardware keys! +- +- +- Selected hardware key slot does not support challenge-response! +- Selected hardware key slot does not support challenge-response! +- +- +- Detecting hardware keys… +- Detecting hardware keys… +- +- +- No hardware keys detected +- No hardware keys detected +- +- +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_es.ts keepassxc-2.6.4-patched/share/translations/keepassx_es.ts +--- keepassxc-2.6.4-orig/share/translations/keepassx_es.ts 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/translations/keepassx_es.ts 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7896 +0,0 @@ +- +- +- AboutDialog +- +- About KeePassXC +- Acerca de KeePassXC +- +- +- About +- Acerca de +- +- +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- Informe errores en: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- +- +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- KeePassXC se distribuye bajo la Licencia Pública General de GNU (GPL) versión 2 o versión 3 (si así lo prefiere). +- +- +- Contributors +- Contribuidores +- +- +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Ver contribuciones en GitHub</a> +- +- +- Debug Info +- Informe de depuración +- +- +- Include the following information whenever you report a bug: +- Incluya la información siguiente cuando informe sobre un error: +- +- +- Copy to clipboard +- Copiar al portapapeles +- +- +- Project Maintainers: +- Mantenedores del proyecto: +- +- +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- El equipo de KeePassXC quiere agradecer de manera especial el trabajo de debfx por la creación de KeePassX. +- +- +- +- AgentSettingsWidget +- +- Use OpenSSH for Windows instead of Pageant +- Usar OpenSSH para Windows en lugar de Pageant +- +- +- Enable SSH Agent integration +- Habilitar la integración del agente SSH +- +- +- SSH_AUTH_SOCK value +- Valor SSH_AUTH_SOCK +- +- +- SSH_AUTH_SOCK override +- Anulación de SSH_AUTH_SOCK +- +- +- (empty) +- (vacío) +- +- +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- No hay ningún socket de agente SSH disponible. Asegúrese de que existe SSH_AUTH_SOCK variable de entorno o establezca una invalidación. +- +- +- SSH Agent connection is working! +- ¡La conexión del agente de SSH está funcionando! +- +- +- +- ApplicationSettingsWidget +- +- Application Settings +- Configuración de la aplicación +- +- +- General +- General +- +- +- Security +- Seguridad +- +- +- Access error for config file %1 +- Error de acceso al archivo de configuración %1 +- +- +- Icon only +- Solo icono +- +- +- Text only +- Solo texto +- +- +- Text beside icon +- Texto al lado del icono +- +- +- Text under icon +- Texto debajo del icono +- +- +- Follow style +- Seguir estilo +- +- +- Reset Settings? +- ¿Reiniciar configuración? +- +- +- Are you sure you want to reset all general and security settings to default? +- ¿Desea reiniciar la configuración general y de seguridad a sus valores por defecto? +- +- +- Monochrome (light) +- Monocromo (claro) +- +- +- Monochrome (dark) +- Monocromo (oscuro) +- +- +- Colorful +- Colorido +- +- +- You must restart the application to set the new language. Would you like to restart now? +- Debe reiniciar la aplicación para establecer el nuevo lenguage. ¿Desea reiniciar ahora? +- +- +- +- ApplicationSettingsWidgetGeneral +- +- Basic Settings +- Configuraciones básicas +- +- +- Startup +- Inicio +- +- +- Start only a single instance of KeePassXC +- Iniciar solo una instancia de KeePassXC +- +- +- Minimize window at application startup +- Minimizar la ventana al iniciar +- +- +- File Management +- Administración de archivos +- +- +- Backup database file before saving +- Hacer una copia de seguridad de la base de datos antes de guardar +- +- +- Automatically save after every change +- Guardar automáticamente después de cada cambio +- +- +- Automatically reload the database when modified externally +- Recargar automáticamente la base de datos cuando sea modificada externamente +- +- +- Entry Management +- Gestión de apunte +- +- +- Use group icon on entry creation +- Usar icono del grupo en la creación del apunte +- +- +- Minimize instead of app exit +- Minimizar en lugar de cerrar la aplicación +- +- +- Show a system tray icon +- Mostrar icono en la bandeja del sistema +- +- +- Hide window to system tray when minimized +- Ocultar la ventana a la bandeja del sistema cuando se minimiza +- +- +- Auto-Type +- Autoescritura +- +- +- Use entry title to match windows for global Auto-Type +- Usar título del apunte para emparejar ventanas en autoescritura global +- +- +- Use entry URL to match windows for global Auto-Type +- Usar URL del apunte para emparejar ventanas en autoescritura global +- +- +- Always ask before performing Auto-Type +- Siempre preguntar antes de autoescritura +- +- +- ms +- Milliseconds +- ms +- +- +- Movable toolbar +- Barra de herramientas móvil +- +- +- Remember previously used databases +- Recordar bases de datos usadas anteriormente +- +- +- Load previously open databases on startup +- Cargar bases de datos abiertas anteriormente al inicio +- +- +- Remember database key files and security dongles +- Recuerde los archivos de clave de la base de datos y los «dongle» de seguridad +- +- +- Check for updates at application startup once per week +- Buscar actualizaciones al inicio de la aplicación una vez por semana +- +- +- Include beta releases when checking for updates +- Incluir versiones beta al comprobar actualizaciones +- +- +- Language: +- Idioma: +- +- +- (restart program to activate) +- (reiniciar aplicación para activar) +- +- +- Minimize window after unlocking database +- Minimizar ventana tras desbloquear base de datos. +- +- +- Minimize when opening a URL +- Minimizar al abrir una URL +- +- +- Hide window when copying to clipboard +- Ocultar ventana al copiar al portapapeles +- +- +- Minimize +- Minimizar +- +- +- Drop to background +- Mover a segundo plano +- +- +- Favicon download timeout: +- Tiempo de espera de descarga de icono: +- +- +- Website icon download timeout in seconds +- Tiempo de espera en segundos de descarga de icono de sitio web +- +- +- sec +- Seconds +- seg +- +- +- Toolbar button style +- Estilo de botón de barra de herramientas +- +- +- Language selection +- Selección de idioma +- +- +- Global auto-type shortcut +- Atajo global de autoescritura +- +- +- Auto-type character typing delay milliseconds +- Retardo de autoescritura de caracteres +- +- +- Auto-type start delay milliseconds +- Retardo de inicio de autoescritura en milisegundos +- +- +- Automatically launch KeePassXC at system startup +- Inicie automáticamente KeePassXC al inicio del sistema +- +- +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- Guardar los archivos de base de datos con seguridad (puede ser incompatible con Dropbox, etcétera) +- +- +- User Interface +- Interfaz de usuario +- +- +- Toolbar button style: +- Estilo de la barra de botones: +- +- +- Use monospaced font for notes +- Utilizar tipografía mono espaciadas para notas +- +- +- Tray icon type: +- Estilo de icono de en la barra de tareas: +- +- +- Reset settings to default… +- Restaurar configuración por defecto... +- +- +- Auto-Type typing delay: +- Retardo de escritura de la autoescritura: +- +- +- Global Auto-Type shortcut: +- Atajo global de autoescritura: +- +- +- Auto-Type start delay: +- Retardo de inicio de autoescritura: +- +- +- Automatically save when locking database +- Guardar automáticamente al bloquear la base de datos +- +- +- Automatically save non-data changes when locking database +- Guardar automáticamente cambios sin datos al bloquear la base de datos +- +- +- Tray icon type +- Tipo de icono en la bandeja +- +- +- +- ApplicationSettingsWidgetSecurity +- +- Timeouts +- Intervalos +- +- +- Clear clipboard after +- Vaciar el portapapeles tras +- +- +- sec +- Seconds +- segundos +- +- +- Lock databases after inactivity of +- Bloquear bases de datos tras un periodo de inactividad de +- +- +- min +- min +- +- +- Forget TouchID after inactivity of +- Olvidar TouchID tras una inactividad de +- +- +- Convenience +- Conveniencia +- +- +- Lock databases when session is locked or lid is closed +- Bloquear bases de datos cuando la sesión está bloqueada o la pantalla esté cerrada +- +- +- Forget TouchID when session is locked or lid is closed +- Olvidar TouchID cuando la sesión está bloqueada o la tapa esté cerrada +- +- +- Lock databases after minimizing the window +- Bloquear bases de datos al minimizar la ventana +- +- +- Re-lock previously locked database after performing Auto-Type +- Volver a bloquear la base de datos tras realizar una autoescritura +- +- +- Hide passwords in the entry preview panel +- Ocultar contraseñas en el apunte del panel de vista previa +- +- +- Hide entry notes by default +- Ocultar notas del apunte por defecto +- +- +- Privacy +- Privacidad +- +- +- Use DuckDuckGo service to download website icons +- Utilizar el servicio DuckDuckGo para descargar iconos de sitio web +- +- +- Clipboard clear seconds +- Vaciar portapapeles en segundos +- +- +- Touch ID inactivity reset +- Reinicio de inactividad de Touch ID +- +- +- Database lock timeout seconds +- Tiempo de espera de bloqueo de base de datos en segundos +- +- +- min +- Minutes +- min +- +- +- Clear search query after +- Vaciar consulta de búsqueda tras +- +- +- Require password repeat when it is visible +- Pedir repetición de la contraseña cuando está visible +- +- +- Hide passwords when editing them +- Ocultar las contraseñas durante la edición de ellas +- +- +- Use placeholder for empty password fields +- Usar marcador de posición para los campos de contraseña vacíos +- +- +- +- AutoType +- +- Couldn't find an entry that matches the window title: +- No se puede encontrar un apunte que corresponda al título de la ventana: +- +- +- Auto-Type - KeePassXC +- Autoescritura - KeePassXC +- +- +- Auto-Type +- Autoescritura +- +- +- The Syntax of your Auto-Type statement is incorrect! +- ¡La sintaxis de la sentencia de su autoescritura es incorrecta! +- +- +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- Este comando de autoescritura contiene un retraso muy largo. ¿Desea continuar? +- +- +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- Este comando de autoescritura contiene pulsaciones de teclas muy lentas. ¿Desea continuar? +- +- +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- Este comando de autoescritura contiene argumentos que se repiten muy a menudo. ¿Desea continuar? +- +- +- Permission Required +- Permiso requerido +- +- +- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC requiere el permiso de Accesibilidad para realizar la autoescritura en el campo del apunte. Si ya al concedido este permiso, quizá deba reiniciar KeePassXC. +- +- +- +- AutoTypeAssociationsModel +- +- Window +- Ventana +- +- +- Sequence +- Secuencia +- +- +- Default sequence +- Secuencia por defecto +- +- +- +- AutoTypeMatchModel +- +- Group +- Grupo +- +- +- Title +- Título +- +- +- Username +- Usuario +- +- +- Sequence +- Secuencia +- +- +- +- AutoTypeMatchView +- +- Copy &username +- Copiar &usuario +- +- +- Copy &password +- Copiar &contraseña +- +- +- +- AutoTypePlatformMac +- +- Permission Required +- Permiso requerido +- +- +- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC requiere el permiso accesibilidad y grabación de pantalla para realizar la autoescritura global. La grabación de pantalla es necesario para usar el título de la ventana al encontrar apuntes. Si ya ha concedido este permiso, quizá deba reiniciar KeePassXC. +- +- +- +- AutoTypeSelectDialog +- +- Auto-Type - KeePassXC +- Autoescritura - KeePassXC +- +- +- Select entry to Auto-Type: +- Seleccionar apunte para autoescritura: +- +- +- Search... +- Buscar… +- +- +- +- BrowserAccessControlDialog +- +- KeePassXC - Browser Access Request +- Solicitud de acceso KeePassXC-Browser +- +- +- %1 is requesting access to the following entries: +- %1 está solicitando acceso a los siguientes apuntes: +- +- +- Remember access to checked entries +- Recordar el acceso a los apuntes marcados +- +- +- Remember +- Recordar +- +- +- Allow access to entries +- Permitir acceso a los apuntes +- +- +- Allow Selected +- Permitir seleccionado +- +- +- Deny All +- Denegar todo +- +- +- Disable for this site +- Deshabilitar para este sitio +- +- +- +- BrowserEntrySaveDialog +- +- KeePassXC-Browser Save Entry +- Guardar apunte KeePassXC-Browser +- +- +- Ok +- Aceptar +- +- +- Cancel +- Cancelar +- +- +- You have multiple databases open. +-Please select the correct database for saving credentials. +- Tiene múltiples bases de datos abiertas. +-Por favor, seleccione la base de datos correcta para guardar las credenciales. +- +- +- +- BrowserService +- +- KeePassXC: New key association request +- KeePassXC: solicitud de asociación de nueva clave +- +- +- Save and allow access +- Guardar y permitir acceso +- +- +- KeePassXC: Overwrite existing key? +- KeePassXC: ¿Sobrescribir clave existente? +- +- +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- Existe una clave con el nombre «%1». +-¿Desea sobrescribirlo? +- +- +- KeePassXC: Update Entry +- KeePassXC: actualizar apunte +- +- +- Do you want to update the information in %1 - %2? +- ¿Desea actualizar la información en %1 - %2? +- +- +- Abort +- Abortar +- +- +- Converting attributes to custom data… +- Convirtiendo atributos a datos personalizados... +- +- +- KeePassXC: Converted KeePassHTTP attributes +- KeePassXC: atributos de KeePassHTTP convertidos +- +- +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- Atributos correctamente convertidos desde %1 apunte(s). +-Movidas %2 claves a datos personalizados. +- +- +- Successfully moved %n keys to custom data. +- %n claves(s) movida(s) a datos propios correctamente.%n claves(s) movida(s) a datos propios correctamente. +- +- +- KeePassXC: No entry with KeePassHTTP attributes found! +- KeePassXC: ¡No se encontró ningún apunte con los atributos KeePassHTTP! +- +- +- The active database does not contain an entry with KeePassHTTP attributes. +- La base de datos activa no contiene un apunte con atributos de KeePassHTTP. +- +- +- KeePassXC: Legacy browser integration settings detected +- KeePassXC: detectada configuración de integración con navegador heredada +- +- +- KeePassXC: Create a new group +- KeePassXC: crear un nuevo grupo +- +- +- A request for creating a new group "%1" has been received. +-Do you want to create this group? +- +- Se ha recibido una solicitud para crear un grupo «%1». +-¿Desea crear este grupo? +- +- +- +- Your KeePassXC-Browser settings need to be moved into the database settings. +-This is necessary to maintain your current browser connections. +-Would you like to migrate your existing settings now? +- Sus configuraciones de KeePassXC-Browser necesitan moverse a las configuraciones de base de datos. +-Es necesario para mantener sus conexiones presentes del navegador. +-¿Desea migrar sus configuraciones existentes ahora? +- +- +- Don't show this warning again +- No mostrar esta advertencia de nuevo +- +- +- You have received an association request for the following database: +-%1 +- +-Give the connection a unique name or ID, for example: +-chrome-laptop. +- Ha recibido una solicitud de asociación para la siguiente base de datos: +-%1 +- +-Asigne a la conexión un nombre único o identificativo, por ejemplo: +-portatil-chrome. +- +- +- +- BrowserSettingsWidget +- +- Dialog +- Diálogo +- +- +- This is required for accessing your databases with KeePassXC-Browser +- Esto es necesario para acceder a las bases de datos con KeePassXC-Browser +- +- +- Enable browser integration +- Habilitar integración con navegador +- +- +- General +- General +- +- +- Browsers installed as snaps are currently not supported. +- Los navegadores instalados como snaps no están soportados. +- +- +- Enable integration for these browsers: +- Permitir la integración con estos navegadores: +- +- +- Vivaldi +- Vivaldi +- +- +- &Edge +- &Edge +- +- +- Firefox +- Firefox +- +- +- Tor Browser +- Navegador Tor +- +- +- Brave +- Brave +- +- +- Google Chrome +- Google Chrome +- +- +- Chromium +- Chromium +- +- +- Show a notification when credentials are requested +- Credentials mean login data requested via browser extension +- Mostrar una notificación cuando las credenciales son requeridas +- +- +- Request to unlock the database if it is locked +- Solicitar el desbloqueo de la base de datos si está bloqueada +- +- +- Only entries with the same scheme (http://, https://, ...) are returned. +- Sólo se muestran los apuntes con el mismo esquema (http://, https://,...) +- +- +- Match URL scheme (e.g., https://...) +- Iguala el formato de URL (e.g., https://...) +- +- +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- Sólo devolver los resultados similares para una URL específica en vez de todas los apuntes para todo el dominio. +- +- +- Return only best-matching credentials +- Devolver solo las credenciales con mejor coincidencia +- +- +- Returns expired credentials. String [expired] is added to the title. +- Devuelve las credenciales expiradas. La cadena [expirada] es añadida al título. +- +- +- Allow returning expired credentials +- Permitir devolver credenciales caducadas +- +- +- All databases connected to the extension will return matching credentials. +- Todas las bases de datos conectadas a la extensión devolverán las credenciales coincidentes. +- +- +- Search in all opened databases for matching credentials +- Credentials mean login data requested via browser extension +- Buscar en todas las bases de datos abiertas las credenciales correspondientes +- +- +- Sort matching credentials by title +- Credentials mean login data requested via browser extension +- Ordenar las credenciales coincidentes por título +- +- +- Sort matching credentials by username +- Credentials mean login data requested via browser extension +- Ordenar las credenciales coincidentes por nombre de usuario +- +- +- Advanced +- Avanzado +- +- +- Never ask before accessing credentials +- Credentials mean login data requested via browser extension +- Nunca solicitar antes de acceder a las credenciales +- +- +- Never ask before updating credentials +- Credentials mean login data requested via browser extension +- Nunca solicitar antes de actualizar las credenciales +- +- +- Do not ask permission for HTTP Basic Auth +- An extra HTTP Basic Auth setting +- No solicitar permiso para autenticación básica HTTP +- +- +- Automatically creating or updating string fields is not supported. +- No se permite crear o actualizar campos de caracteres automáticamente. +- +- +- Return advanced string fields which start with "KPH: " +- Devuelve campos de texto avanzados que comienzan por "KPH:" +- +- +- Don't display the popup suggesting migration of legacy KeePassHTTP settings. +- No permitir ventana emergente sugiriendo migración de configuración antigua de KeePassHTTP. +- +- +- Do not prompt for KeePassHTTP settings migration. +- No preguntar por migración de configuración de KeePassHTTP. +- +- +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- Actualizaciones KeePassXC o keepassxc-proxy binario automáticamente para obtener los mensajes nativos en el arranque. +- +- +- Update native messaging manifest files at startup +- Actualizar archivo manifiesto de mensajería nativa al iniciar +- +- +- Use a custom proxy location if you installed a proxy manually. +- Utilizar un proxy instalado manualmente. +- +- +- Use a custom proxy location: +- Meant is the proxy for KeePassXC-Browser +- Usar una ubicación de proxy personalizada: +- +- +- Custom proxy location field +- Ubicación de campo personalizado proxy +- +- +- Browser for custom proxy file +- Explorar para archivo personalizado proxy +- +- +- Browse... +- Button for opening file dialog +- Explorar… +- +- +- Use a custom browser configuration location: +- Usar una ubicación de proxy personalizada: +- +- +- Browser type: +- Tipo de navegador: +- +- +- Toolbar button style +- Estilo de botón de barra de herramientas +- +- +- Config Location: +- Localización de la configuración: +- +- +- Custom browser location field +- Campo de ubicación del navegador personalizado +- +- +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- +- +- Browse for custom browser path +- Buscar ruta del navegador personalizada +- +- +- Custom extension ID: +- ID de extensión personalizado: +- +- +- Custom extension ID +- ID de extensión personalizado +- +- +- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 +- Debido al modo aislado de Snap, debe ejecutar un código para permitir la integración con el navegador.<br/>Puede obtener este código de %1 +- +- +- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 +- KeePassXC-Browser es necesario para que la integración del navegador funcione.<br />Descárgalo desde %1 y %2 y %3. %4 +- +- +- Please see special instructions for browser extension use below +- Vea las instrucciones especiales para el uso de extensión de navegador debajo. +- +- +- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. +- <b>Error:</b> ¡No se puede encontrar la ubicación de proxy personalizada!<br/>La integración del navegador NO funcionará sin la aplicación proxy. +- +- +- <b>Warning:</b> The following options can be dangerous! +- <b>Advertencia:</b> las siguientes opciones pueden ser peligrosas. +- +- +- Executable Files +- Archivos ejecutables +- +- +- All Files +- Todos los archivos +- +- +- Select custom proxy location +- Elegir una ubicación de proxy personalizada +- +- +- Select native messaging host folder location +- Seleccionar la ubicación de la carpeta del host de mensajería nativa +- +- +- +- CloneDialog +- +- Clone Options +- Opciones de clonado +- +- +- Append ' - Clone' to title +- Añadir «- Clon» al título +- +- +- Replace username and password with references +- Reemplazar usuario y contraseña con referencias +- +- +- Copy history +- Copiar historial +- +- +- +- CsvImportWidget +- +- Import CSV fields +- Importar campos de CSV +- +- +- filename +- nombre del archivo +- +- +- size, rows, columns +- tamaño, filas, columnas +- +- +- Encoding +- Codificación +- +- +- Codec +- Códec +- +- +- Text is qualified by +- Los textos están rodeados por +- +- +- Fields are separated by +- Los campos están separados por +- +- +- Comments start with +- Los comentarios comienzan con +- +- +- Consider '\' an escape character +- Considerar «\» como un carácter de escape +- +- +- Preview +- Vista previa +- +- +- Imported from CSV file +- Importado de un fichero CSV +- +- +- Original data: +- Dato original: +- +- +- Error +- Error +- +- +- Error(s) detected in CSV file! +- ¡Error(es) detectado(s) en el fichero CSV! +- +- +- [%n more message(s) skipped] +- [%n más mensaje(s) omitidos][%n más mensaje(s) descartado(s)] +- +- +- CSV import: writer has errors: +-%1 +- Importación CSV: la escritura tiene errores: +-% 1 +- +- +- Text qualification +- Certificado de texto +- +- +- Field separation +- Separación de campo +- +- +- Number of header lines to discard +- Número de líneas de cabecera a descartar +- +- +- CSV import preview +- Previsualización importar CSV +- +- +- Column Association +- Columnas asociadas +- +- +- Last Modified +- Última modificación +- +- +- Password +- Contraseña +- +- +- Created +- Creado +- +- +- Notes +- Notas +- +- +- Title +- Título +- +- +- Group +- Grupo +- +- +- URL +- URL +- +- +- Username +- Usuario +- +- +- Header lines skipped +- Líneas de cabecera ignoradas +- +- +- First line has field names +- La primera línea tiene los nombres de los campos +- +- +- Not Present +- No presente +- +- +- Column %1 +- Columna %1 +- +- +- TOTP +- TOTP +- +- +- Icon +- Icono +- +- +- +- CsvParserModel +- +- %n column(s) +- %n columna(s)%n columna(s) +- +- +- %1, %2, %3 +- file info: bytes, rows, columns +- %1, %2, %3 +- +- +- %n byte(s) +- %n byte(s)%n byte(s) +- +- +- %n row(s) +- %n fila(s)%n fila(s) +- +- +- +- Database +- +- File %1 does not exist. +- El archivo %1 no existe. +- +- +- Unable to open file %1. +- Incapaz de abrir el archivo %1. +- +- +- Error while reading the database: %1 +- Error al leer la base de datos: %1 +- +- +- File cannot be written as it is opened in read-only mode. +- El archivo no se puede escribir, ya que se ha abierto en modo de solo lectura. +- +- +- Key not transformed. This is a bug, please report it to the developers! +- La clave no está transformada. Esto es un defecto, por favor, ¡comuniquelo a los desarrolladores! +- +- +- %1 +-Backup database located at %2 +- %1 +-Copia de seguridad de base de datos ubicada en %2 +- +- +- Could not save, database does not point to a valid file. +- No se puede guardar, la base de datos no apunta a un archivo válido. +- +- +- Could not save, database file is read-only. +- No se puede guardar, el archivo de base de datos es de solo lectura. +- +- +- Database file has unmerged changes. +- El archivo de base de datos tiene cambios no combinados. +- +- +- Recycle Bin +- Papelera de reciclaje +- +- +- Passwords +- Root group name +- Contraseñas +- +- +- Database save is already in progress. +- Guardado de la base de datos actualmente en proceso. +- +- +- Could not save, database has not been initialized! +- No se puede guardar, la base de datos no a sido inicializada. +- +- +- +- DatabaseOpenDialog +- +- Unlock Database - KeePassXC +- Desbloquear base de datos - KeePassXC +- +- +- +- DatabaseOpenWidget +- +- Key File: +- Fichero clave: +- +- +- Refresh +- Actualizar +- +- +- Don't show this warning again +- No mostrar nuevamente esta advertencia +- +- +- All files +- Todos los archivos +- +- +- Key files +- Ficheros clave +- +- +- Select key file +- Seleccionar fichero clave +- +- +- Failed to open key file: %1 +- Fallo al abrir fichero clave: %1 +- +- +- Unlock KeePassXC Database +- Desbloquear base de datos KeePassXC +- +- +- Enter Password: +- Introducir contraseña: +- +- +- Password field +- Campo de contraseña +- +- +- Hardware key slot selection +- Selección de ranura de llave por hardware +- +- +- Browse for key file +- Explorar para un fichero clave +- +- +- Browse... +- Explorar… +- +- +- Refresh hardware tokens +- Actualizar «tokens» hardware +- +- +- Hardware Key: +- Llave por hardware: +- +- +- Hardware key help +- Ayuda de la llave por hardware +- +- +- TouchID for Quick Unlock +- TouchID para desbloqueo rápido +- +- +- Unlock failed and no password given +- Desbloqueo fallido y sin contraseña proporcionada +- +- +- Unlocking the database failed and you did not enter a password. +-Do you want to retry with an "empty" password instead? +- +-To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. +- Desbloquear la base de datos ha fallado y no introdujo una contraseña. +-¿Desea reintentar con una contraseña vacía? +- +-Para prevenir que aparezca este error, debe ir a «Configuración de base de datos / Seguridad» y reiniciar su contraseña. +- +- +- Retry with empty password +- Reintentar con contraseña vacía +- +- +- Enter Additional Credentials (if any): +- Introducir credenciales adicionales (si hay alguna): +- +- +- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +-<p>Click for more information...</p> +- <p>Puede usar una llave de seguridad por hardware como <strong>YubiKey</strong> o <strong>OnlyKey</strong> con ranuras configuradas para HMAC-SHA1.</p> +-<p>Clic para más información...</p> +- +- +- Key file help +- Ayuda de fichero clave +- +- +- ? +- ? +- +- +- Cannot use database file as key file +- No se puede usar una base de datos como fichero clave +- +- +- You cannot use your database file as a key file. +-If you do not have a key file, please leave the field empty. +- No puede usar una base de datos como fichero clave. +-Si no tiene un fichero clave, deje el campo vacío. +- +- +- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> +- <p>Adicionalmente a la contraseña, puede usar un fichero clave para mejorar la seguridad de su base de datos. Este archivo puede ser generado en su configuración de base de datos.</p><p>Esto <strong>no</strong> es su archivo *.kdbx. <br>Si no tiene un fichero clave, deje este campo vacío.</p><p>Clic para más información...</p> +- +- +- Key file to unlock the database +- Fichero clave para desbloquear la base de datos +- +- +- Please touch the button on your YubiKey! +- ¡Por favor presione el botón en su YubiKey! +- +- +- Detecting hardware keys… +- Detectando llaves por hardware... +- +- +- No hardware keys detected +- No se detectaron llaves por hardware +- +- +- Select hardware key… +- Seleccionar llave por hardware... +- +- +- Old key file format +- Formato de fichero clave antiguo +- +- +- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> +- Está usando un fichero clave con un formato antiguo que KeePassXC puede<br> dejar +-de soportar en el futuro.<br><br>Considere generar un nuevo fichero clave yendo a <br><strong>Base de datos / Seguridad de base de datos / Cambiar fichero clave. +- +- +- +- DatabaseSettingWidgetMetaData +- +- Passwords +- Contraseñas +- +- +- +- DatabaseSettingsDialog +- +- Advanced Settings +- Configuraciones avanzadas +- +- +- General +- General +- +- +- Security +- Seguridad +- +- +- Encryption Settings +- Configuraciones de cifrado +- +- +- Browser Integration +- Integración con navegadores +- +- +- Database Credentials +- Credenciales de base de datos +- +- +- +- DatabaseSettingsWidgetBrowser +- +- KeePassXC-Browser settings +- Configuraciones del KeePassXC-Browser +- +- +- Stored keys +- Claves almacenadas +- +- +- Remove +- Eliminar +- +- +- Delete the selected key? +- ¿Eliminar clave seleccionada? +- +- +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- ¿Desea eliminar la clave seleccionada? +-Esto puede impedir la conexión con el complemento del navegador. +- +- +- Key +- Clave +- +- +- Value +- Valor +- +- +- Enable Browser Integration to access these settings. +- Habilitar la integración del navegador para acceder a esta configuración. +- +- +- Disconnect all browsers +- Desconectar todos los navegadores +- +- +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- ¿Desea desconectar todos los naveggadores? +-Esto puede impedir la conexión con el complemento de navegador. +- +- +- KeePassXC: No keys found +- KeePassXC: No se encontró ninguna clave +- +- +- No shared encryption keys found in KeePassXC settings. +- No se encontraron claves de cifrado compartidas en la configuración de KeePassXC. +- +- +- KeePassXC: Removed keys from database +- KeePassXC: Las claves se eliminaron de la base de datos +- +- +- Successfully removed %n encryption key(s) from KeePassXC settings. +- Correctamente borrada %n clave de cifrado de la configuración KeePassXC.Correctamente borrada %n claves de cifrado de la configuración KeePassXC. +- +- +- Forget all site-specific settings on entries +- Olvidar todas las opciones del sitio específico en los apuntes +- +- +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- ¿Desea olvidar todas las configuraciones específicas del sitio en cada apunte? +-Los permisos para acceder a los apunte serán revocados. +- +- +- Removing stored permissions… +- Eliminando permisos almacenados… +- +- +- Abort +- Abortar +- +- +- KeePassXC: Removed permissions +- KeePassXC: permisos eliminados +- +- +- Successfully removed permissions from %n entry(s). +- Permisos eliminados correctamente desde %n apunte.Permisos eliminados correctamente desde %n apuntes. +- +- +- KeePassXC: No entry with permissions found! +- KeePassXC: ¡No se encontró ningún apunte con permisos! +- +- +- The active database does not contain an entry with permissions. +- La base de datos activa no contiene un apunte con permisos. +- +- +- Move KeePassHTTP attributes to custom data +- Mover los atributos KeePassHTTP a datos personalizados +- +- +- Do you really want to move all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- ¿Desea mover todos los datos de integración del navegador heredado al último estándar? +-Esto es necesario para mantener la compatibilidad con el complemento del navegador. +- +- +- Stored browser keys +- Claves de navegador almacenadas +- +- +- Remove selected key +- Eliminar clave seleccionada +- +- +- Move KeePassHTTP attributes to KeePassXC-Browser custom data +- Mover los atributos de KeePassHTTP a los datos personales de KeePassXC-Browser +- +- +- Refresh database root group ID +- Actualizar la ID del grupo raíz de la base de datos +- +- +- Created +- Creado +- +- +- Refresh database ID +- Actualizar la ID de la base de datos +- +- +- Do you really want refresh the database ID? +-This is only necessary if your database is a copy of another and the browser extension cannot connect. +- ¿Desea actualizar el ID de la base de datos? +-Esto solo es necesario si su base de datos es copiada a otra y la extensión del navegador cono se puede conectar. +- +- +- +- DatabaseSettingsWidgetDatabaseKey +- +- Add additional protection... +- Añadir protección adicional… +- +- +- No password set +- Contraseña no establecida +- +- +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- ¡ADVERTENCIA! No ha establecido una contraseña. Se desaconseja el uso de una base de datos sin contraseña. +- +-¿Desea continuar sin contraseña? +- +- +- Continue without password +- Continuar sin contraseña +- +- +- No encryption key added +- No se agregó clave de cifrado +- +- +- You must add at least one encryption key to secure your database! +- ¡Debe añadir al menos una clave de cifrado para proteger su base de datos! +- +- +- Unknown error +- Error desconocido +- +- +- Failed to change database credentials +- Fallo al cambiar las credenciales de la base de datos +- +- +- +- DatabaseSettingsWidgetEncryption +- +- Encryption Algorithm: +- Algoritmo de cifrado: +- +- +- AES: 256 Bit (default) +- AES: 256-Bit (por defecto) +- +- +- Twofish: 256 Bit +- Twofish: 256 Bit +- +- +- Key Derivation Function: +- Función de derivación de la clave: +- +- +- Transform rounds: +- Rondas de transformación: +- +- +- Memory Usage: +- Memoria utilizada: +- +- +- Parallelism: +- Paralelismo: +- +- +- Decryption Time: +- Tiempo de descifrado: +- +- +- ?? s +- ?? s +- +- +- Change +- Cambiar +- +- +- Higher values offer more protection, but opening the database will take longer. +- Los valores más altos ofrecen más protección, pero la apertura de la base de datos llevará más tiempo. +- +- +- Database format: +- Formato de base de datos: +- +- +- This is only important if you need to use your database with other programs. +- Esto solo es importante si necesita usar su base de datos con otros programas. +- +- +- KDBX 4.0 (recommended) +- KDBX 4.0 (recomendado) +- +- +- KDBX 3.1 +- KDBX 3.1 +- +- +- unchanged +- Database decryption time is unchanged +- sin cambios +- +- +- Number of rounds too high +- Key transformation rounds +- Número de rondas demasiado alto +- +- +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or days (or even longer) to open! +- Está utilizando una gran cantidad de rondas de transformación de clave con Argon2. +- +-Si conserva este número, ¡su base de datos puede tardar horas o días (o incluso más) en abrirse! +- +- +- Understood, keep number +- Entendido, mantener el número +- +- +- Cancel +- Cancelar +- +- +- Number of rounds too low +- Key transformation rounds +- Número de rondas demasiado bajo +- +- +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database may be too easy to crack! +- Está utilizando un número muy bajo de rondas de transformación de clave con AES-KDF. +- +-Si conserva este número, ¡su base de datos puede ser muy fácil de descifrar! +- +- +- KDF unchanged +- KDF sin cambios +- +- +- Failed to transform key with new KDF parameters; KDF unchanged. +- Error al transformar la clave con nuevos parámetros KDF; KDF sin cambios. +- +- +- MiB +- Abbreviation for Mebibytes (KDF settings) +- MiB MiB +- +- +- thread(s) +- Threads for parallel execution (KDF settings) +- hilohilos +- +- +- Change existing decryption time +- Cambiar el tiempo de descifrado +- +- +- Decryption time in seconds +- Tiempo de descifrado en segundos +- +- +- Database format +- Formato de base de datos +- +- +- Encryption algorithm +- Algoritmo de cifrado +- +- +- Key derivation function +- Función de derivación de la clave +- +- +- Transform rounds +- Rondas de transformación +- +- +- Memory usage +- Uso de memoria +- +- +- Parallelism +- Paralelismo +- +- +- ?? ms +- ?? ms +- +- +- ? s +- ? s +- +- +- +- DatabaseSettingsWidgetFdoSecrets +- +- Exposed Entries +- Apuntes expuestos +- +- +- Don't expose this database +- No exponer esta base de datos +- +- +- Expose entries under this group: +- Exponer los apuntes bajo este grupo: +- +- +- Enable Secret Service to access these settings. +- Habilite el servicio secreto para acceder a esta configuración. +- +- +- +- DatabaseSettingsWidgetGeneral +- +- Database Meta Data +- Metadatos de la base de datos +- +- +- Database name: +- Nombre de la base de datos: +- +- +- Database description: +- Descripción de la base de datos: +- +- +- Default username: +- Usuario por defecto: +- +- +- History Settings +- Configuración del historial +- +- +- Max. history items: +- Elementos máximos del historial: +- +- +- Max. history size: +- Tamaño máximo del historial: +- +- +- MiB +- MiB +- +- +- Use recycle bin +- Usar papelera de reciclaje +- +- +- Additional Database Settings +- Configuraciones adicionales de la base de datos +- +- +- Database name field +- Campo nombre de base de datos +- +- +- Database description field +- Campo descripción de base de datos +- +- +- Default username field +- Campo usuario predeterminado +- +- +- Maximum number of history items per entry +- Número máximo de elementos de historial por apunte +- +- +- Maximum size of history per entry +- Tamaño máximo de historial por apunte +- +- +- Delete Recycle Bin +- Eliminar papelera de reciclaje +- +- +- Do you want to delete the current recycle bin and all its contents? +-This action is not reversible. +- ¿Desea eliminar los contenidos actuales de la papelera de reciclaje? +-Esta acción no es reversible. +- +- +- (old) +- (viejo) +- +- +- Enable compression (recommended) +- Habilitar compresión (recomendado) +- +- +- +- DatabaseSettingsWidgetKeeShare +- +- Sharing +- Compartir +- +- +- Breadcrumb +- Pista +- +- +- Type +- Tipo +- +- +- Path +- Ruta +- +- +- Last Signer +- Último firmante +- +- +- Certificates +- Certificados +- +- +- > +- Breadcrumb separator +- > +- +- +- +- DatabaseSettingsWidgetMetaDataSimple +- +- Database Name: +- Nombre de la base de datos: +- +- +- Description: +- Descripción: +- +- +- Database name field +- Campo nombre de base de datos +- +- +- Database description field +- Campo descripción de base de datos +- +- +- +- DatabaseTabWidget +- +- KeePass 2 Database +- Base de datos de KeePass 2 +- +- +- All files +- Todos los ficheros +- +- +- Open database +- Abrir base de datos +- +- +- CSV file +- Archivo CSV +- +- +- Merge database +- Combinar base de datos +- +- +- Open KeePass 1 database +- Abrir base de datos KeePass 1 +- +- +- KeePass 1 database +- Base de datos KeePass 1 +- +- +- Export database to CSV file +- Exportar base de datos a un archivo CSV +- +- +- Writing the CSV file failed. +- Ha fallado la escritura del fichero CSV. +- +- +- Database creation error +- Error de creación de la base de datos +- +- +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- La base de datos creada no tiene clave o KDF, negándose a guardarla. +-Esto es definitivamente un error, por favor repórtelo a los desarrolladores. +- +- +- Select CSV file +- Seleccionar archivo CSV +- +- +- New Database +- Nueva base de datos +- +- +- %1 [New Database] +- Database tab name modifier +- %1 [Nueva base de datos] +- +- +- %1 [Locked] +- Database tab name modifier +- %1 [Bloqueada] +- +- +- %1 [Read-only] +- Database tab name modifier +- %1 [Sólo lectura] +- +- +- Failed to open %1. It either does not exist or is not accessible. +- Fallo al abrir %1. No existe o no es accesible. +- +- +- Export database to HTML file +- Exportar base de datos a archivo HTML +- +- +- HTML file +- Archivo HTML +- +- +- Writing the HTML file failed. +- Fallo escribiendo a archivo HTML. +- +- +- Export Confirmation +- Confirmación de exportación +- +- +- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? +- Está a punto de exportar su base de datos a un archivo sin cifrar. Esto dejará sus contraseñas e información sensible vulnerable. ¿Desea continuar? +- +- +- Open OPVault +- Abrir OPVault +- +- +- +- DatabaseWidget +- +- Searching... +- Buscando… +- +- +- Do you really want to delete the entry "%1" for good? +- ¿Desea eliminar el apunte «%1» de forma definitiva? +- +- +- Do you really want to move entry "%1" to the recycle bin? +- ¿Desea mover el apunte «%1» a la papelera de reciclaje? +- +- +- Do you really want to move %n entry(s) to the recycle bin? +- ¿Desea mover %n apunte a la papelera?¿Desea mover %n apuntes a la papelera de reciclaje? +- +- +- Execute command? +- ¿Ejecutar comando? +- +- +- Do you really want to execute the following command?<br><br>%1<br> +- ¿Desea ejecutar el siguiente mandato?<br><br>%1<br> +- +- +- Remember my choice +- Recordar mi elección +- +- +- Do you really want to delete the group "%1" for good? +- ¿Desea eliminar el grupo «%1» de forma definitiva? +- +- +- No current database. +- No hay una base de datos actual. +- +- +- No source database, nothing to do. +- No hay una base de datos de origen, nada para hacer. +- +- +- Search Results (%1) +- Resultado de búsqueda (%1) +- +- +- No Results +- No hay resultados +- +- +- File has changed +- El archivo ha cambiado +- +- +- The database file has changed. Do you want to load the changes? +- El archivo de la base de datos ha cambiado. ¿Desea cargar los cambios? +- +- +- Merge Request +- Solicitud de combinación +- +- +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- El archivo de la base de datos ha cambiado y tiene modificaciones sin guardar. ¿Desea combinar sus modificaciones? +- +- +- Empty recycle bin? +- ¿Vaciar papelera de reciclaje? +- +- +- Are you sure you want to permanently delete everything from your recycle bin? +- ¿Desea eliminar permanentemente todo de su papelera de reciclaje? +- +- +- Do you really want to delete %n entry(s) for good? +- ¿Desea eliminar %n apunte definitivamente?¿Desea eliminar %n apuntes definitivamente? +- +- +- Delete entry(s)? +- ¿Eliminar apunte?¿Eliminar apuntes? +- +- +- Move entry(s) to recycle bin? +- ¿Mover apunte a la papelera de reciclaje?¿Mover apunte a la papelera de reciclaje? +- +- +- Lock Database? +- ¿Bloquear la base de datos? +- +- +- You are editing an entry. Discard changes and lock anyway? +- Está editando un apunte. ¿Descartar modificaciones y bloquear a pesar de todo? +- +- +- "%1" was modified. +-Save changes? +- «%1» ha sido modificado. +-¿Guardar cambios? +- +- +- Database was modified. +-Save changes? +- Se modificó la base de datos. +-¿Desea guardar las modificaciones? +- +- +- Save changes? +- ¿Guardar modificaciones? +- +- +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- No se pudo abrir el nuevo fichero de base de datos al intentar cargar automáticamente. +-Error: %1 +- +- +- Disable safe saves? +- ¿Desactivar almacenajes seguros? +- +- +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- KeePassXC no ha podido guardar la base de datos varias veces. Esto es probablemente causado por los servicios de sincronización de ficheros manteniendo un bloqueo del fichero. +-¿Desactivar almacenaje seguro y volver a intentarlo? +- +- +- Passwords +- Contraseñas +- +- +- Save database as +- Guardar base de datos como +- +- +- KeePass 2 Database +- Base de datos de KeePass 2 +- +- +- Replace references to entry? +- ¿Reemplazar las referencias al apunte? +- +- +- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? +- El apunte «%1» tiene %2 referencia. ¿Desea sobrescribir la referencia con los valores, descartar este apunte o eliminarlo de todos modos?El apunte «%1» tiene %2 referencias. ¿Desea sobrescribir la referencias con los valores, descartar este apunte o eliminarlo de todos modos? +- +- +- Delete group +- Eliminar grupo +- +- +- Move group to recycle bin? +- ¿Mover grupo a la papelera de reciclaje? +- +- +- Do you really want to move the group "%1" to the recycle bin? +- ¿Desea mover el grupo «%1» a la papelera de reciclaje? +- +- +- Successfully merged the database files. +- Archivos de base de datos combinados correctamente. +- +- +- Database was not modified by merge operation. +- La base de datos no fue modificada por la operación de combinación +- +- +- Shared group... +- Grupo compartido… +- +- +- Writing the database failed: %1 +- Fallo al escribir la base de datos: %1 +- +- +- This database is opened in read-only mode. Autosave is disabled. +- Esta base de datos está abierta en modo solo lectura. El autoguardado está deshabilitado. +- +- +- Save database backup +- Guardar copia de seguridad de la base de datos +- +- +- Could not find database file: %1 +- No se ha encontrado el archivo de base de datos: %1 +- +- +- +- EditEntryWidget +- +- Entry +- Apunte +- +- +- Advanced +- Avanzado +- +- +- Icon +- Icono +- +- +- Auto-Type +- Autoescritura +- +- +- Properties +- Propiedades +- +- +- History +- Historial +- +- +- SSH Agent +- Agente SSH +- +- +- n/a +- n/d +- +- +- (encrypted) +- (cifrado) +- +- +- Select private key +- Seleccionar la clave privada +- +- +- Entry history +- Historial de apuntes +- +- +- Add entry +- Añadir apunte +- +- +- Edit entry +- Editar apunte +- +- +- New attribute +- Nuevo atributo +- +- +- Are you sure you want to remove this attribute? +- ¿Seguro que desea eliminar este atributo? +- +- +- Tomorrow +- Mañana +- +- +- %n week(s) +- %n semana%n semanas +- +- +- %n month(s) +- %n mes%n meses +- +- +- Entry updated successfully. +- Apunte actualizado correctamente. +- +- +- New attribute %1 +- Nuevo atributo %1 +- +- +- %n year(s) +- %n año%n años +- +- +- Confirm Removal +- Confirmar eliminación +- +- +- Browser Integration +- Integración con navegadores +- +- +- <empty URL> +- <empty URL> +- +- +- Are you sure you want to remove this URL? +- ¿Desea eliminar esta URL? +- +- +- Reveal +- Revelar +- +- +- Hide +- Ocultar +- +- +- Unsaved Changes +- Hay cambios sin guardar +- +- +- Would you like to save changes to this entry? +- ¿Desea guardar los cambios en este apunte? +- +- +- [PROTECTED] Press Reveal to view or edit +- [PROTEGIDO] Presiones para revelar para ver o editar +- +- +- Invalid Entry +- Apunte inválido +- +- +- An external merge operation has invalidated this entry. +-Unfortunately, any changes made have been lost. +- Una operación de combinación externa ha invalidado este apunte. +-Desafortunadamente, todos los cambios hechos se han perdido. +- +- +- +- EditEntryWidgetAdvanced +- +- Additional attributes +- Atributos adicionales +- +- +- Add +- Añadir +- +- +- Remove +- Eliminar +- +- +- Edit Name +- Editar nombre +- +- +- Protect +- Proteger +- +- +- Reveal +- Revelar +- +- +- Attachments +- Adjuntos +- +- +- Foreground Color: +- Color de primer plano: +- +- +- Background Color: +- Color de fondo: +- +- +- Attribute selection +- Selección de atributo +- +- +- Attribute value +- Valor de atributo +- +- +- Add a new attribute +- Añadir nuevo atributo +- +- +- Remove selected attribute +- Eliminar atributo seleccionado +- +- +- Edit attribute name +- Editar atributo nombre +- +- +- Toggle attribute protection +- Intercambiar atributo protección +- +- +- Show a protected attribute +- Mostrar un atributo protegido +- +- +- Foreground color selection +- Selección de color de primer plano +- +- +- Background color selection +- Selección de color de fondo +- +- +- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> +- <html><head/><body><p>Seleccionada, el apunte no aparecerá en los informes de salud e incluso su no cumple los requerimientos de calidad (pe. entropía de contraseña o reutilización). Puede usar la marca si la contraseña está más allá de su control (pe. si necesita configurar un PIN de cuatro dígitos) para prevenir desordenar los informes.</p></body></html> +- +- +- Exclude from database reports +- Excluir de los informes de base de datos +- +- +- +- EditEntryWidgetAutoType +- +- Enable Auto-Type for this entry +- Activar autoescritura para este apunte +- +- +- Window Associations +- Ventanas asociadas +- +- +- + +- + +- +- +- - +- – +- +- +- Window title: +- Título de la ventana: +- +- +- Use a specific sequence for this association: +- Utilizar una secuencia específica para esta asociación: +- +- +- Custom Auto-Type sequence +- Secuencia personalizada autoescritura +- +- +- Open Auto-Type help webpage +- Abrir página de ayuda autoescritura +- +- +- Existing window associations +- Asociaciones de ventana existentes +- +- +- Add new window association +- Añadir nueva ventana asociada +- +- +- Remove selected window association +- Eliminar ventana asociada +- +- +- You can use an asterisk (*) to match everything +- Puede usar un asterisco (*) par coincidir todo. +- +- +- Set the window association title +- Establecer título de ventana asociada +- +- +- You can use an asterisk to match everything +- Puede usar un asterisco par coincidir todo. +- +- +- Custom Auto-Type sequence for this window +- Secuencia personalizada de autoescritura para esta ventana +- +- +- Inherit default Auto-Type sequence from the group +- Heredar secuencia de autoescritura predeterminada del grupo +- +- +- Use custom Auto-Type sequence: +- Utilizar secuencia de autoescritura personalizada: +- +- +- +- EditEntryWidgetBrowser +- +- These settings affect to the entry's behaviour with the browser extension. +- Esta configuración afecta al comportamiento de este apunte con la extensión de navegador. +- +- +- General +- General +- +- +- Skip Auto-Submit for this entry +- Descartar autoenvío para este apunte +- +- +- Hide this entry from the browser extension +- Ocultar este apunte de la extensión de navegador +- +- +- Additional URL's +- URLs adicionales +- +- +- Add +- Añadir +- +- +- Remove +- Eliminar +- +- +- Edit +- Editar +- +- +- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. +- Solo enviar esta configuración al navegador para los diálogos de autenticación HTTP. Habilitada, los formularios de autenticación no mostrarán este apunte para su selección. +- +- +- Use this entry only with HTTP Basic Auth +- Usar este apunte solo con autenticación básica HTTP +- +- +- +- EditEntryWidgetHistory +- +- Show +- Mostrar +- +- +- Restore +- Restaurar +- +- +- Delete +- Eliminar +- +- +- Delete all +- Eliminar todo +- +- +- Entry history selection +- Selección de apunte del historial +- +- +- Show entry at selected history state +- Mostrar apunte en historial seleccionado +- +- +- Restore entry to selected history state +- Restaurar de apunte al estado de historial seleccionado +- +- +- Delete selected history state +- Eliminar el historial seleccionado +- +- +- Delete all history +- Eliminar todo el historial +- +- +- +- EditEntryWidgetMain +- +- URL: +- URL: +- +- +- Password: +- Contraseña: +- +- +- Title: +- Título: +- +- +- Presets +- Programar +- +- +- Toggle the checkbox to reveal the notes section. +- Cambie la casilla de verificación para mostrar la sección de notas. +- +- +- Username: +- Usuario: +- +- +- Url field +- Campo URL +- +- +- Download favicon for URL +- Descargar icono para la URL +- +- +- Password field +- Campo de contraseña +- +- +- Toggle notes visible +- Intercambiar notas visibles +- +- +- Expiration field +- Campo expiración +- +- +- Expiration Presets +- Predeterminados expiración +- +- +- Expiration presets +- Predeterminados expiración +- +- +- Notes field +- Campo notas +- +- +- Title field +- Campo título +- +- +- Username field +- Campo usuario +- +- +- Toggle expiration +- Intercambiar expiración +- +- +- Notes: +- Notas: +- +- +- https://example.com +- https://example.com +- +- +- Expires: +- Expira: +- +- +- Edit Entry +- Editar apunte +- +- +- +- EditEntryWidgetSSHAgent +- +- Form +- Forma +- +- +- Remove key from agent after +- Eliminar clave del agente tras +- +- +- seconds +- segundos +- +- +- Fingerprint +- Huella +- +- +- Remove key from agent when database is closed/locked +- Eliminar clave del agente cuando la base de datos está cerrada/bloqueada +- +- +- Public key +- Clave pública +- +- +- Add key to agent when database is opened/unlocked +- Añadir clave al agente cuando la base de datos se abre/desbloquea +- +- +- Comment +- Comentario +- +- +- Decrypt +- Descifrar +- +- +- n/a +- n/d +- +- +- Copy to clipboard +- Copiar al portapapeles +- +- +- Private key +- Clave privada +- +- +- External file +- Archivo externo +- +- +- Browse... +- Button for opening file dialog +- Explorar… +- +- +- Attachment +- Adjunto +- +- +- Add to agent +- Añadir a agente +- +- +- Remove from agent +- Eliminar del agente +- +- +- Require user confirmation when this key is used +- Requiere confirmación del usuario cuando se usa esta clave +- +- +- Remove key from agent after specified seconds +- Eliminar clave del agente tras los segundos especificados +- +- +- Browser for key file +- Explorar para fichero clave +- +- +- External key file +- Fichero clave externo +- +- +- Select attachment file +- Seleccionar archivo adjunto +- +- +- +- EditGroupWidget +- +- Group +- Grupo +- +- +- Icon +- Icono +- +- +- Properties +- Propiedades +- +- +- Add group +- Añadir grupo +- +- +- Edit group +- Editar grupo +- +- +- Enable +- Activar +- +- +- Disable +- Desactivar +- +- +- Inherit from parent group (%1) +- Heredar del grupo anterior (%1) +- +- +- Entry has unsaved changes +- El apunte tiene cambios sin guardar +- +- +- +- EditGroupWidgetKeeShare +- +- Type: +- Tipo: +- +- +- Path: +- Ruta: +- +- +- Password: +- Contraseña: +- +- +- Inactive +- Inactivo +- +- +- KeeShare unsigned container +- Contenedor KeeShare sin firma +- +- +- KeeShare signed container +- Contenedor KeeShare firmado +- +- +- Select import source +- Seleccione el origen de la importación +- +- +- Select export target +- Seleccionar el destino de la exportación +- +- +- Select import/export file +- Seleccione el archivo de importación/exportación +- +- +- Clear +- Vaciar +- +- +- Import +- Importar +- +- +- Export +- Exportar +- +- +- Synchronize +- Sincronizar +- +- +- Your KeePassXC version does not support sharing this container type. +-Supported extensions are: %1. +- Su versión de KeePassXC no soporta este tipo de contenedor de compartición. +-Las extensiones soportadas son: %1. +- +- +- %1 is already being exported by this database. +- %1 ya está siendo exportada por esta base de datos. +- +- +- %1 is already being imported by this database. +- %1 ya está siendo importada por esta base de datos. +- +- +- %1 is being imported and exported by different groups in this database. +- %1 ya está siendo importada y exportada por diferentes grupos en esta base de datos. +- +- +- KeeShare is currently disabled. You can enable import/export in the application settings. +- KeeShare is a proper noun +- KeeShare actualmente está deshabilitada. Puede habilitar importar/exportar en la configuración de aplicación +- +- +- Database export is currently disabled by application settings. +- La exportación de la base de datos actualmente está deshabilitada en la configuración de aplicación. +- +- +- Database import is currently disabled by application settings. +- La importación de base de datos actualmente está deshabilitada por la configuración de aplicación +- +- +- Sharing mode field +- Campo modo comapartir +- +- +- Path to share file field +- Ruta para campo de archivo compartir +- +- +- Password field +- Campo de contraseña +- +- +- Clear fields +- Vaciar campos +- +- +- Browse for share file +- Explorar para compartir archivo +- +- +- Browse... +- Explorar… +- +- +- +- EditGroupWidgetMain +- +- Name field +- Campo nombre +- +- +- Notes field +- Campo notas +- +- +- Toggle expiration +- Intercambiar expiración +- +- +- Auto-Type toggle for this and sub groups +- Intercambiar autoescritura para este y subgrupos +- +- +- Expiration field +- Campo expiración +- +- +- Search toggle for this and sub groups +- Intercambiar de búsqueda para este y subgrupos +- +- +- Default auto-type sequence field +- Campo por defecto de secuencia de autoescritura +- +- +- Expires: +- Expira: +- +- +- Use default Auto-Type sequence of parent group +- Usar secuencia de autoescritura por defecto del grupo padre +- +- +- Auto-Type: +- Autoescritura: +- +- +- Search: +- Buscar: +- +- +- Notes: +- Notas: +- +- +- Name: +- Nombre: +- +- +- Set default Auto-Type sequence +- Establecer secuencia de autoescritura por defecto +- +- +- Edit Group +- Editar grupo +- +- +- +- EditWidgetIcons +- +- Add custom icon +- Añadir icono personalizado +- +- +- Delete custom icon +- Eliminar icono personalizado +- +- +- Download favicon +- Descargar icono +- +- +- Unable to fetch favicon. +- No se pudo descargar el icono. +- +- +- Images +- Imágenes +- +- +- All files +- Todos los ficheros +- +- +- Confirm Delete +- Confirmar eliminación +- +- +- Select Image(s) +- Seleccionar imagen(es) +- +- +- Successfully loaded %1 of %n icon(s) +- Cargado %1 de %n icono correctamenteCargado %1 de %n iconos correctamente +- +- +- No icons were loaded +- No se cargaron los iconos +- +- +- %n icon(s) already exist in the database +- %n icono ya existe en la base de datos%n iconos ya existen en la base de datos +- +- +- The following icon(s) failed: +- El siguiente icono falló:Los siguientes iconos fallaron: +- +- +- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? +- Este icono es usado en %n apunte, y será remplazado por el icono por defecto. ¿Desea eliminarlo?Este icono es usado en %n apuntes, y será remplazado por el icono predeterminado. ¿Desea eliminarlo? +- +- +- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security +- Puede habilitar el servicio de icono del sitio web DuckDuckGo bajo «Herramientas -> Configuración -> Seguridad» +- +- +- Download favicon for URL +- Descargar icono para la URL +- +- +- Apply selected icon to subgroups and entries +- Aplicar icono seleccionado a subgrupos y apuntes +- +- +- Also apply to child groups +- Aplicar a los grupos descendientes +- +- +- Also apply to child entries +- Aplicar también a los apuntes hijos +- +- +- Also apply to all children +- Aplicar a todos los descendientes +- +- +- Existing icon selected. +- Icono existente seleccionado. +- +- +- Use default icon +- Usar icono por defecto +- +- +- Use custom icon +- Usar icono personalizado +- +- +- Apply icon to... +- Aplicar icono a... +- +- +- Apply to this group only +- Aplicar solo a este grupo +- +- +- +- EditWidgetProperties +- +- Created: +- Creado: +- +- +- Modified: +- Modificado: +- +- +- Accessed: +- Accedido: +- +- +- Uuid: +- UUID: +- +- +- Plugin Data +- Datos del complemento +- +- +- Remove +- Eliminar +- +- +- Delete plugin data? +- ¿Eliminar los datos del complemento? +- +- +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- ¿Desea eliminar los datos del complemento seleccionado? +-Esto puede causar un mal funcionamiento de los complementos afectados. +- +- +- Key +- Clave +- +- +- Value +- Valor +- +- +- Datetime created +- Fecha de creación +- +- +- Datetime modified +- Fecha de modificación +- +- +- Datetime accessed +- Fecha de acceso +- +- +- Unique ID +- ID único +- +- +- Plugin data +- Complemente de datos +- +- +- Remove selected plugin data +- Eliminar complemento de datos seleccionado +- +- +- +- Entry +- +- %1 - Clone +- %1 - Clonado +- +- +- +- EntryAttachmentsModel +- +- Name +- Nombre +- +- +- Size +- Tamaño +- +- +- +- EntryAttachmentsWidget +- +- Form +- Formato +- +- +- Add +- Añadir +- +- +- Remove +- Eliminar +- +- +- Open +- Abrir +- +- +- Save +- Guardar +- +- +- Select files +- Seleccionar archivos +- +- +- Are you sure you want to remove %n attachment(s)? +- ¿Desea eliminar %n dato adjunto?¿Desea eliminar %n datos adjuntos? +- +- +- Save attachments +- Guardar adjuntos +- +- +- Unable to create directory: +-%1 +- No se puede crear directorio: +-%1 +- +- +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- ¿Desea sobrescribir el archivo existente «%1» con el adjunto? +- +- +- Confirm overwrite +- Confirmar sobreescritura +- +- +- Unable to save attachments: +-%1 +- No se pueden guardar los adjuntos: +-%1 +- +- +- Unable to open attachment: +-%1 +- No se puede abrir el adjunto: +-%1 +- +- +- Unable to open attachments: +-%1 +- No se pueden abrir los datos adjuntos: +-%1 +- +- +- Confirm remove +- Confirmar retirada +- +- +- Unable to open file(s): +-%1 +- No se puede abrir el fichero: +-%1No se pueden abrir los ficheros: +-%1 +- +- +- Attachments +- Adjuntos +- +- +- Add new attachment +- Añadir nuevo adjunto +- +- +- Remove selected attachment +- Eliminar adjunto seleccionado +- +- +- Open selected attachment +- Abrir adjunto seleccionado +- +- +- Save selected attachment to disk +- Guardar adjunto seleccionado a disco +- +- +- %1 is a big file (%2 MB). +-Your database may get very large and reduce performance. +- +-Are you sure to add this file? +- %1 es un fichero grande (%2 MB). +-Su base de datos puede vovlerse muy grande y reducir el rendimiento. +- +-¿Está seguro de añadir este fichero? +- +- +- Confirm Attachment +- Confirmar adjunto +- +- +- +- EntryAttributesModel +- +- Name +- Nombre +- +- +- +- EntryHistoryModel +- +- Last modified +- Última modificación +- +- +- Title +- Título +- +- +- Username +- Usuario +- +- +- URL +- URL +- +- +- +- EntryModel +- +- Ref: +- Reference abbreviation +- Ref: +- +- +- Group +- Grupo +- +- +- Title +- Título +- +- +- Username +- Usuario +- +- +- URL +- URL +- +- +- Never +- Nunca +- +- +- Password +- Contraseña +- +- +- Notes +- Notas +- +- +- Expires +- Expira +- +- +- Created +- Creado +- +- +- Modified +- Modificado +- +- +- Accessed +- Accedido +- +- +- Attachments +- Adjuntos +- +- +- Size +- Tamaño +- +- +- Group name +- Nombre del grupo +- +- +- Entry title +- Título del apunte +- +- +- Entry notes +- Notas del apunte +- +- +- Entry expires at +- Apunte expira el +- +- +- Creation date +- Fecha de creación +- +- +- Last modification date +- Fecha de la última modificación +- +- +- Last access date +- Fecha del último acceso +- +- +- Attached files +- Archivos adjuntos +- +- +- Entry size +- Tamaño del apunte +- +- +- Has attachments +- Tiene archivos adjuntos +- +- +- Has TOTP one-time password +- Tiene TOTP contraseña de uso único +- +- +- +- EntryPreviewWidget +- +- Close +- Cerrar +- +- +- General +- General +- +- +- Username +- Usuario +- +- +- Password +- Contraseña +- +- +- Expiration +- Caducidad +- +- +- URL +- URL +- +- +- Attributes +- Atributos +- +- +- Attachments +- Adjuntos +- +- +- Notes +- Notas +- +- +- Autotype +- Autoescritura +- +- +- Window +- Ventana +- +- +- Sequence +- Secuencia +- +- +- Searching +- Buscando… +- +- +- Search +- Buscar +- +- +- Clear +- Vaciar +- +- +- Never +- Nunca +- +- +- [PROTECTED] +- [PROTEGIDO] +- +- +- Enabled +- Activado +- +- +- Disabled +- Desactivado +- +- +- Share +- Compartir +- +- +- Display current TOTP value +- Mostrar valor actual TOTP +- +- +- Advanced +- Avanzado +- +- +- Default Sequence +- Secuencia por defecto +- +- +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- attributes line +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- +- +- +- EntryURLModel +- +- Invalid URL +- URL inválida +- +- +- +- EntryView +- +- Fit to window +- Ajustar a la ventana +- +- +- Fit to contents +- Ajustar al contenido +- +- +- Reset to defaults +- Restablecer ajustes por defecto +- +- +- Has attachments +- Entry attachment icon toggle +- Tiene ficheros adjuntos +- +- +- Has TOTP +- Entry TOTP icon toggle +- Tiene TOTP +- +- +- +- FdoSecrets::Item +- +- Entry "%1" from database "%2" was used by %3 +- Apunte «%1» de la base de datos «%2» fue usado por %3 +- +- +- +- FdoSecrets::Service +- +- Failed to register DBus service at %1.<br/> +- Fallo al registrar el servicio DBus en %1.<br/> +- +- +- %n Entry(s) was used by %1 +- %1 is the name of an application +- %n apunte es usado por %1%n apuntes es usado por %1 +- +- +- +- FdoSecrets::SettingsDatabaseModel +- +- File Name +- Nombre de archivo +- +- +- Group +- Grupo +- +- +- Manage +- Gestionar +- +- +- Unlock to show +- Desbloquear para mostrar +- +- +- None +- Ninguno +- +- +- +- FdoSecrets::SettingsSessionModel +- +- Application +- Aplicación +- +- +- Manage +- Gestionar +- +- +- +- FdoSecretsPlugin +- +- <b>Fdo Secret Service:</b> %1 +- <b>Servicio de secretos Fido:</b> %1 +- +- +- Unknown +- Unknown PID +- Desconocido +- +- +- Unknown +- Unknown executable path +- Desconocido +- +- +- <i>PID: %1, Executable: %2</i> +- <i>PID: 1234, Executable: /path/to/exe</i> +- <i>PID: %1, ejecutable: %2</i> +- +- +- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. +- Otro servicio de secretos está en ejecución (%1). <br/> Párelo o elimínelo rehabilitando la integración del servicio de secretos. +- +- +- +- Group +- +- [empty] +- group has no children +- [vacío] +- +- +- +- HibpDownloader +- +- Online password validation failed +- La validación en línea de contraseña ha fallado +- +- +- +- IconDownloaderDialog +- +- Download Favicons +- Descargar iconos +- +- +- Cancel +- Cancelar +- +- +- Having trouble downloading icons? +-You can enable the DuckDuckGo website icon service in the security section of the application settings. +- ¿Problemas al descargar iconos? +-Puede habilitar el servicio de iconos del sitio web DuckDuckGo en la sección seguridad de la configuración de la aplicación. +- +- +- Close +- Cerrar +- +- +- URL +- URL +- +- +- Status +- Estado +- +- +- Please wait, processing entry list... +- Espere, procesando listado de apuntes… +- +- +- Downloading... +- Descargando... +- +- +- Ok +- Aceptar +- +- +- Already Exists +- Ya existe +- +- +- Download Failed +- Descarga fallida +- +- +- Downloading favicons (%1/%2)... +- Descargando iconos (%1/%2)... +- +- +- +- KMessageWidget +- +- &Close +- &Cerrar +- +- +- Close message +- Cerrar mensaje +- +- +- +- Kdbx3Reader +- +- missing database headers +- faltan las cabeceras de la base de datos +- +- +- Header doesn't match hash +- La cabecera no coincide con el hash +- +- +- Invalid header id size +- Tamaño id de la cabecera inválido +- +- +- Invalid header field length +- Longitud del campo en la cabecera inválido +- +- +- Invalid header data length +- Longitud del campo de datos en la cabecera incorrecto +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Se han proporcionado credenciales inválidas, inténtelo de nuevo. +-Si ocurre nuevamente entonces su archivo de base de datos puede estar corrupto. +- +- +- Unable to calculate database key +- No se puede calcular la clave de la base de datos +- +- +- Unable to issue challenge-response: %1 +- No se puede emitir reto-respuesta: %1 +- +- +- +- Kdbx3Writer +- +- Unable to issue challenge-response: %1 +- No se puede emitir reto-respuesta: %1 +- +- +- Unable to calculate database key +- No se puede calcular la clave de la base de datos +- +- +- +- Kdbx4Reader +- +- missing database headers +- faltan las cabeceras de la base de datos +- +- +- Invalid header checksum size +- Suma de verificación incorrecta de la cabecera +- +- +- Header SHA256 mismatch +- Cabecera SHA256 diferente +- +- +- Unknown cipher +- Algoritmo de cifrado desconocido +- +- +- Invalid header id size +- Tamaño id de la cabecera inválido +- +- +- Invalid header field length +- Longitud del campo en la cabecera inválido +- +- +- Invalid header data length +- Longitud del campo de datos en la cabecera incorrecto +- +- +- Failed to open buffer for KDF parameters in header +- Error al abrir el búfer para los parámetros KDF en la cabecera +- +- +- Unsupported key derivation function (KDF) or invalid parameters +- Función de derivación de clave no admitida (KDF) o parámetros no válidos +- +- +- Legacy header fields found in KDBX4 file. +- Los campos heredados de la cabecera se encuentran en el fichero KDBX4. +- +- +- Invalid inner header id size +- Tamaño id de la cabecera interna inválido +- +- +- Invalid inner header field length +- Longitud del campo en la cabecera interna inválido +- +- +- Invalid inner header binary size +- Tamaño binario de la cabecera interna inválido +- +- +- Unsupported KeePass variant map version. +- Translation: variant map = data structure for storing meta data +- Versión de asociación de variante de KeePass no admitida. +- +- +- Invalid variant map entry name length +- Translation: variant map = data structure for storing meta data +- Longitud del nombre del apunte de asociación variante inválida +- +- +- Invalid variant map entry name data +- Translation: variant map = data structure for storing meta data +- Datos del nombre del apunte asociado variante inválido +- +- +- Invalid variant map entry value length +- Translation: variant map = data structure for storing meta data +- Longitud del valor del apunte asociado variante inválido +- +- +- Invalid variant map entry value data +- Translation comment: variant map = data structure for storing meta data +- Datos del valor de apunte asociado variante inválido +- +- +- Invalid variant map Bool entry value length +- Translation: variant map = data structure for storing meta data +- Longitud del valor del apunte asociado booleano de variante inválida +- +- +- Invalid variant map Int32 entry value length +- Translation: variant map = data structure for storing meta data +- Longitud del valor del apunte asociado Int32 de variante inválida +- +- +- Invalid variant map UInt32 entry value length +- Translation: variant map = data structure for storing meta data +- Longitud del valor del apunte asociado UInt32 de variante inválida +- +- +- Invalid variant map Int64 entry value length +- Translation: variant map = data structure for storing meta data +- Longitud del valor del apunte asociado Int64 de variante inválida +- +- +- Invalid variant map UInt64 entry value length +- Translation: variant map = data structure for storing meta data +- Longitud del valor de la entrada asociado UInt64 de variante inválida +- +- +- Invalid variant map entry type +- Translation: variant map = data structure for storing meta data +- Tipo de apunte asociado variante inválido +- +- +- Invalid variant map field type size +- Translation: variant map = data structure for storing meta data +- Tamaño de tipo de campo asociado variante inválido +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Se han proporcionado credenciales inválidas, inténtelo de nuevo. +-Si ocurre nuevamente entonces su archivo de base de datos puede estar corrupto. +- +- +- (HMAC mismatch) +- (HMAC no coincidente) +- +- +- Unable to calculate database key: %1 +- No se puede calcular la clave de la base de datos: %1 +- +- +- +- Kdbx4Writer +- +- Invalid symmetric cipher algorithm. +- Algoritmo de cifrado simétrico inválido. +- +- +- Invalid symmetric cipher IV size. +- IV = Initialization Vector for symmetric cipher +- Tamaño de cifrado simétrico IV inválido +- +- +- Failed to serialize KDF parameters variant map +- Translation comment: variant map = data structure for storing meta data +- Ha fallado al serializar parámetros KDF en variante asociada +- +- +- Unable to calculate database key: %1 +- No se puede calcular la clave de la base de datos: %1 +- +- +- +- KdbxReader +- +- Unsupported cipher +- Cifrado no compatible +- +- +- Invalid compression flags length +- Tamaño opcional de compresión inválido +- +- +- Unsupported compression algorithm +- Algoritmo de compresión no admitido +- +- +- Invalid master seed size +- Tamaño inválido de semilla maestra +- +- +- Invalid transform seed size +- Tamaño inválido de semilla de transformación +- +- +- Invalid transform rounds size +- Tamaño inválido de rondas de transformación +- +- +- Invalid start bytes size +- Tamaño no válido de bytes de inicio +- +- +- Invalid random stream id size +- Tamaño no válido de id de flujo +- +- +- Invalid inner random stream cipher +- Cifrador del flujo interno no válido +- +- +- Not a KeePass database. +- No es una base de datos KeePass. +- +- +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- El archivo seleccionado es una antigua base de datos de KeePass 1 (.kdb). +- +-Puede importarla pulsando sobre «Base de datos → Importar base de datos KeePass 1…». +-Esta migración es de sentido único. No podrá abrir la base de datos importada con la versión antigua de KeePassX 0.4. +- +- +- Unsupported KeePass 2 database version. +- Versión no admitida de la base de datos de KeePass 2. +- +- +- Invalid cipher uuid length: %1 (length=%2) +- Longitud de UUID de cifrado no válida: %1 (longitud =%2) +- +- +- Unable to parse UUID: %1 +- No se puede analizar UUID: %1 +- +- +- Failed to read database file. +- Error al leer el fichero de base de datos. +- +- +- +- KdbxXmlReader +- +- XML parsing failure: %1 +- Error de parsing XML: %1 +- +- +- No root group +- Ningún grupo de raíz +- +- +- Missing icon uuid or data +- Falta icono uuid o datos +- +- +- Missing custom data key or value +- Falta la clave de datos personializados o valor +- +- +- Multiple group elements +- Múltiples elementos de grupo +- +- +- Null group uuid +- Uuid de grupo nulo +- +- +- Invalid group icon number +- Número de icono de grupo no válido +- +- +- Invalid EnableAutoType value +- Valor no válido de EnableAutoType +- +- +- Invalid EnableSearching value +- Valor no válido de EnableSearching +- +- +- No group uuid found +- No encontrado uuid de grupo +- +- +- Null DeleteObject uuid +- Uuid de DeleteObject nulo +- +- +- Missing DeletedObject uuid or time +- Falta uuid de DeletedObject o tiempo +- +- +- Null entry uuid +- Uuid de apunte nulo +- +- +- Invalid entry icon number +- Número de icono de apunte no válido +- +- +- History element in history entry +- Elemento del historial en el apunte del historial +- +- +- No entry uuid found +- Uuid de apunte no encontrado +- +- +- History element with different uuid +- Elemento del historial con uuid diferente +- +- +- Duplicate custom attribute found +- Atributo personalizado duplicado encontrado +- +- +- Entry string key or value missing +- Falta clave de apunte de texto o valor +- +- +- Entry binary key or value missing +- Falta clave de apunte binaria o valor +- +- +- Auto-type association window or sequence missing +- Falta secuencia o ventana asociada de autoescritura +- +- +- Invalid bool value +- Valor booleano inválido +- +- +- Invalid date time value +- Valor de tiempo o fecha no válido +- +- +- Invalid color value +- Valor del color no válido +- +- +- Invalid color rgb part +- Parte de color rgb no válido +- +- +- Invalid number value +- Valor de número no válido +- +- +- Invalid uuid value +- Valor uuid no válido +- +- +- Unable to decompress binary +- Translator meant is a binary data inside an entry +- No se puede descomprimir binario +- +- +- XML error: +-%1 +-Line %2, column %3 +- Error XML: +-%1 +-Linea %2, columna %3 +- +- +- +- KeeAgentSettings +- +- Invalid KeeAgent settings file structure. +- Estructura de archivo de preferencias KeeAgent inválido. +- +- +- Private key is an attachment but no attachments provided. +- La clave privada es un adjunto pero no se han proporcionado adjuntos. +- +- +- Private key is empty +- La clave privada está vacía +- +- +- File too large to be a private key +- Archivo demasiado grande para ser una clave privada +- +- +- Failed to open private key +- Error al abrir la clave privada +- +- +- +- KeePass1OpenWidget +- +- Unable to open the database. +- No se pudo abrir la base de datos. +- +- +- Import KeePass1 Database +- Importar base de datos KeePass1 +- +- +- +- KeePass1Reader +- +- Unable to read keyfile. +- Incapaz de leer el fichero clave. +- +- +- Not a KeePass database. +- No es una base de datos KeePass. +- +- +- Unsupported encryption algorithm. +- Algoritmo de cifrado no soportado. +- +- +- Unsupported KeePass database version. +- Versión de la base de datos KeePass no soportada. +- +- +- Unable to read encryption IV +- IV = Initialization Vector for symmetric cipher +- No se puede leer el cifrado IV +- +- +- Invalid number of groups +- Número de grupos no válido +- +- +- Invalid number of entries +- Número de apuntes no válido +- +- +- Invalid content hash size +- Tamaño del hash de contenido no válido +- +- +- Invalid transform seed size +- Tamaño de semilla de transformación inválido +- +- +- Invalid number of transform rounds +- Número de turnos de transformación no válido +- +- +- Unable to construct group tree +- Incapaz de crear un grupo +- +- +- Root +- Raíz +- +- +- Key transformation failed +- Error en la transformación de la clave +- +- +- Invalid group field type number +- Número de tipo de campo de grupo inválido +- +- +- Invalid group field size +- Tamaño inválido para el campo grupo +- +- +- Read group field data doesn't match size +- Datos de campo de grupo leídos no coinciden en tamaño +- +- +- Incorrect group id field size +- Tamaño de campo de id de grupo incorrecto +- +- +- Incorrect group creation time field size +- Tamaño de campo de tiempo de creación de grupo incorrecto +- +- +- Incorrect group modification time field size +- Tamaño de campo de hora de modificación de grupo incorrecto +- +- +- Incorrect group access time field size +- Tamaño de campo de tiempo de acceso de grupo incorrecto +- +- +- Incorrect group expiry time field size +- Tamaño de campo de tiempo de caducidad de grupo incorrecto +- +- +- Incorrect group icon field size +- Tamaño del campo del ícono de grupo incorrecto +- +- +- Incorrect group level field size +- Tamaño de campo del nivel de grupo incorrecto +- +- +- Invalid group field type +- Tipo de campo de grupo inválido +- +- +- Missing group id or level +- Falta identificador de grupo o nivel +- +- +- Missing entry field type number +- Entrada de tipo número en campo faltante +- +- +- Invalid entry field size +- Tamaño del apunte para el campo inválido +- +- +- Read entry field data doesn't match size +- Datos de campo de apunte no coinciden en tamaño +- +- +- Invalid entry uuid field size +- Tamaño del apunte para el campo uuid inválido +- +- +- Invalid entry group id field size +- Tamaño del apunte para el campo identificador de grupo inválido +- +- +- Invalid entry icon field size +- Tamaño del apunte para el campo icono inválido +- +- +- Invalid entry creation time field size +- Tamaño del apunte para el campo tiempo de creación inválido +- +- +- Invalid entry modification time field size +- Tamaño del apunte para el campo tiempo de modificación inválido +- +- +- Invalid entry expiry time field size +- Tamaño del apunte para el campo tiempo de expiración inválido +- +- +- Invalid entry field type +- Tipo del apunte para el campo inválido +- +- +- unable to seek to content position +- incapaz de buscar la posición de contenido +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Se han proporcionado credenciales inválidas, inténtelo de nuevo. +-Si ocurre nuevamente entonces su archivo de base de datos puede estar corrupto. +- +- +- Unable to calculate database key +- No se puede calcular la clave de la base de datos +- +- +- +- KeeShare +- +- Invalid sharing reference +- Referencia de compartición inválida +- +- +- Inactive share %1 +- Compartición inactiva %1 +- +- +- Imported from %1 +- Importado de %1 +- +- +- Exported to %1 +- Exportado a %1 +- +- +- Synchronized with %1 +- Sincronizado con %1 +- +- +- Import is disabled in settings +- Importar está deshabilitado en configuración +- +- +- Export is disabled in settings +- Exportar está deshabilitado en configuración +- +- +- Inactive share +- Compartición inactiva +- +- +- Imported from +- Importado desde +- +- +- Exported to +- Exportado a +- +- +- Synchronized with +- Sincronizado con +- +- +- +- KeyComponentWidget +- +- Key Component +- Componente de la clave +- +- +- Key Component Description +- Descripción del componente de la clave +- +- +- Cancel +- Cancelar +- +- +- Key Component set, click to change or remove +- Conjunto de componentes de la clave, haga clic para cambiar o eliminar +- +- +- Add %1 +- Add a key component +- Añadir %1 +- +- +- Change %1 +- Change a key component +- Cambiar %1 +- +- +- Remove %1 +- Remove a key component +- Eliminar %1 +- +- +- %1 set, click to change or remove +- Change or remove a key component +- %1 conjunto, haga clic para cambiar o eliminar +- +- +- +- KeyFileEditWidget +- +- Generate +- Generar +- +- +- Key File +- Fichero Clave +- +- +- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> +- <p>Puede añadir un fichero clave que contiene bytes aleatorios para seguridad adicional.</p><p>¡Debe mantenerlo en secreto y nunca perderlo o se bloquearán!</p> +- +- +- Error loading the key file '%1' +-Message: %2 +- Error al cargar el fichero clave «%1» +-Mensaje: %2 +- +- +- Key files +- Ficheros clave +- +- +- All files +- Todos los archivos +- +- +- Create Key File... +- Crear un fichero clave... +- +- +- Error creating key file +- Error al crear el fichero clave +- +- +- Unable to create key file: %1 +- No se puede crear el fichero de claves: %1 +- +- +- Select a key file +- Seleccionar un fichero clave +- +- +- Key file selection +- Selección de fichero clave +- +- +- Browse for key file +- Explorar para un fichero clave +- +- +- Browse... +- Explorar… +- +- +- Generate a new key file +- Generar un nuevo fichero clave +- +- +- Note: Do not use a file that may change as that will prevent you from unlocking your database! +- Nota: no use un archivo que pueda cambiar dado que impedirá desbloquear la base de datos. +- +- +- Invalid Key File +- Fichero clave inválido +- +- +- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. +- No puede usar la base de datos actual como su propio fichero clave. Seleccione un fichero diferente o genere un nuevo fichero clave. +- +- +- Suspicious Key File +- Fichero clave sospechoso +- +- +- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. +-Are you sure you want to continue with this file? +- El fichero clave seleccionado parece una base de datos de contraseñas. Un fichero clave debe ser un fichero estático que nunca cambie o perderá el acceso a su base de datos para siempre. +-¿Desea continuar con este archivo? +- +- +- Old key file format +- Formato de fichero clave antiguo +- +- +- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. +- Ha seleccionado un fichero clave con un formato que KeePassXC<br>puede dejar de soportar en el futuro.<br><br>Considere generar un nuevo fichero clave en su lugar. +- +- +- +- MainWindow +- +- &Database +- Base de &datos +- +- +- &Help +- Ay&uda +- +- +- &Groups +- &Grupos +- +- +- &Tools +- &Herramientas +- +- +- &Quit +- &Salir +- +- +- &About +- &Acerca de +- +- +- Database settings +- Configuración de la base de datos +- +- +- Copy username to clipboard +- Copiar usuario al portapapeles +- +- +- Copy password to clipboard +- Copiar contraseña al portapapeles +- +- +- &Settings +- &Configuración +- +- +- &Title +- &Título +- +- +- Copy title to clipboard +- Copiar título al portapapeles +- +- +- &URL +- &URL +- +- +- Copy URL to clipboard +- Copiar URL al portapapeles +- +- +- &Notes +- &Notas +- +- +- Copy notes to clipboard +- Copiar notas al portapapeles +- +- +- Copy &TOTP +- Copiar &TOTP +- +- +- E&mpty recycle bin +- &Vaciar papelera de reciclaje +- +- +- Clear history +- Limpiar historial +- +- +- Access error for config file %1 +- Error de acceso al archivo de configuración %1 +- +- +- Settings +- Configuración +- +- +- Toggle window +- Cambiar a ventana +- +- +- Quit KeePassXC +- Salir de KeePassXC +- +- +- Please touch the button on your YubiKey! +- ¡Por favor presione el botón en su YubiKey! +- +- +- WARNING: You are using an unstable build of KeePassXC! +-There is a high risk of corruption, maintain a backup of your databases. +-This version is not meant for production use. +- ADVERTENCIA: Usted está utilizando una versión inestable de KeePassXC! +-Hay un alto riesgo de corrupción, mantenga una copia de seguridad de sus bases de datos. +-Esta versión no es para uso de producción. +- +- +- &Donate +- &Donar +- +- +- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +-We recommend you use the AppImage available on our downloads page. +- ADVERTENCIA: ¡Su versión de Qt puede hacer que KeePassXC se bloquee con un teclado virtual! +-Le recomendamos que utilice la AppImage disponible en nuestra página de descargas. +- +- +- &Import +- &Importar +- +- +- Create a new database +- Crear una base de datos nueva +- +- +- Merge from another KDBX database +- Combinar desde otra base de datos KDBX +- +- +- Add a new entry +- Añadir un nuevo apunte +- +- +- View or edit entry +- Ver o editar apunte +- +- +- Add a new group +- Añadir un nuevo grupo +- +- +- Perform &Auto-Type +- Realizar &autoescritura +- +- +- Open &URL +- Abrir &URL +- +- +- Import a KeePass 1 database +- Importar una base de datos KeePass 1 +- +- +- Import a CSV file +- Importar un archivo CSV +- +- +- NOTE: You are using a pre-release version of KeePassXC! +-Expect some bugs and minor issues, this version is not meant for production use. +- NOTA: ¡Está utilizando una versión preliminar de KeePassXC! +-Espere algunos errores y problemas menores, esta versión no está destinada para uso de producción. +- +- +- Check for updates on startup? +- ¿Buscar actualizaciones en el inicio? +- +- +- Would you like KeePassXC to check for updates on startup? +- ¿Quieres KeePassXC para comprobar las actualizaciones en el arranque? +- +- +- You can always check for updates manually from the application menu. +- Siempre se puede comprobar si hay actualizaciones manualmente desde el menú de la aplicación. +- +- +- &Export +- &Exportar +- +- +- Sort &A-Z +- Ordenar &A-Z +- +- +- Sort &Z-A +- Ordenar &Z-A +- +- +- &Password Generator +- &Generador de contraseñas +- +- +- Import a 1Password Vault +- Importar un 1Password Vault +- +- +- &Getting Started +- &Guía de inicio +- +- +- &User Guide +- Guía de &usuario +- +- +- &Keyboard Shortcuts +- Atajos de &teclado +- +- +- &Recent Databases +- Bases de datos &recientes +- +- +- &Entries +- &Apuntes +- +- +- Copy Att&ribute +- Copiar at&ributo +- +- +- TOTP +- TOTP +- +- +- View +- Ver +- +- +- Theme +- Tema +- +- +- &Check for Updates +- &Comprobar actualizaciones +- +- +- &Open Database… +- &Abrir base de datos... +- +- +- &Save Database +- &Guardar base de datos +- +- +- &Close Database +- &Cerrar base de datos +- +- +- &New Database… +- &Nueva base de datos +- +- +- &Merge From Database… +- Com&binar desde base de datos... +- +- +- &New Entry… +- &Nuevo apunte... +- +- +- &Edit Entry… +- &Editar apunte... +- +- +- &Delete Entry… +- E&liminar apunte +- +- +- &New Group… +- &Nuevo grupo... +- +- +- &Edit Group… +- &Editar grupo... +- +- +- &Delete Group… +- &E&liminar grupo +- +- +- Download All &Favicons… +- Descargar todos los &iconos... +- +- +- Sa&ve Database As… +- Guar&dar base de datos como... +- +- +- Database &Security… +- &Seguridad de base de datos... +- +- +- Database &Reports... +- &Informes de base de datos... +- +- +- Statistics, health check, etc. +- Estadísticas, salud, etc. +- +- +- &Database Settings… +- &Configuración de base de datos... +- +- +- &Clone Entry… +- &Duplicar apunte... +- +- +- Move u&p +- Mover &arriba +- +- +- Move entry one step up +- Mover el apunte una posición arriba +- +- +- Move do&wn +- Mover abajo +- +- +- Move entry one step down +- Mover el apunte una posición abajo +- +- +- Copy &Username +- Copiar nombre de &usuario +- +- +- Copy &Password +- Copiar &contraseña +- +- +- Download &Favicon +- Descargar &icono +- +- +- &Lock Databases +- &Bloquear bases de datos +- +- +- &CSV File… +- Archivo &CSV... +- +- +- &HTML File… +- Archivo &HTML... +- +- +- KeePass 1 Database… +- Base de datos KeePass 1... +- +- +- 1Password Vault… +- 1Password Vault… +- +- +- CSV File… +- Archivo CSV... +- +- +- Show TOTP +- Mostrar TOTP +- +- +- Show QR Code +- Mostrar código QR +- +- +- Set up TOTP… +- Configurar TOTP... +- +- +- Report a &Bug +- Informar de un &error +- +- +- Open Getting Started Guide +- Abrir guía de inicio +- +- +- &Online Help +- Ayuda en &línea +- +- +- Go to online documentation +- Ir a la documentación en línea +- +- +- Open User Guide +- Abrir guía de usuario +- +- +- Save Database Backup... +- Guardar copia de seguridad de la base de datos... +- +- +- Add key to SSH Agent +- Añadir clave a agente SSH +- +- +- Remove key from SSH Agent +- Eliminar clave del agente SSH +- +- +- Compact Mode +- Modo compacto +- +- +- Automatic +- Automático +- +- +- Light +- Claro +- +- +- Dark +- Oscuro +- +- +- Classic (Platform-native) +- Clásico (Plataforma-nativo) +- +- +- Show Toolbar +- Mostrar barra de herramientas +- +- +- Show Preview Panel +- Mostrar panel de previsualización +- +- +- Don't show again for this version +- No mostrar de nuevo para esta versión +- +- +- Restart Application? +- ¿Reiniciar la aplicación? +- +- +- You must restart the application to apply this setting. Would you like to restart now? +- Debe reiniciar la aplicación para aplicar esta configuración. ¿Desea reiniciar ahora? +- +- +- Perform Auto-Type Sequence +- Realizar secuencia de autoescritura +- +- +- {USERNAME} +- {USUARIO} +- +- +- {USERNAME}{ENTER} +- {USUARIO}{ENTER} +- +- +- {PASSWORD} +- {CONTRASEÑA} +- +- +- {PASSWORD}{ENTER} +- {CONTRASEÑA}{ENTER} +- +- +- Always on Top +- Siempre encima +- +- +- Hide Usernames +- Ocultar usuarios +- +- +- Hide Passwords +- Ocultar contraseñas +- +- +- +- ManageDatabase +- +- Database settings +- Configuración de la base de datos +- +- +- Edit database settings +- Editar configuración de base de datos +- +- +- Unlock database +- Desbloquear base de datos +- +- +- Unlock database to show more information +- Desbloquear para mostrar más información +- +- +- Lock database +- Bloquear base de datos +- +- +- +- ManageSession +- +- Disconnect +- Desconectar +- +- +- Disconnect this application +- Desconectar esta aplicación +- +- +- +- Merger +- +- Creating missing %1 [%2] +- Creando %1 faltante [%2] +- +- +- Relocating %1 [%2] +- Reubicando %1 [%2] +- +- +- Overwriting %1 [%2] +- Sobrescribiendo %1 [%2] +- +- +- older entry merged from database "%1" +- el apunte más antiguo se combinó a la base de datos «%1» +- +- +- Adding backup for older target %1 [%2] +- Añadiendo copia de seguridad para el destino más antiguo %1 [%2] +- +- +- Adding backup for older source %1 [%2] +- Añadiendo copia de seguridad para la fuente mas antigua %1 [%2] +- +- +- Reapplying older target entry on top of newer source %1 [%2] +- Volver a aplicar un apunte de destino más antiguo sobre la fuente más nueva %1 [%2] +- +- +- Reapplying older source entry on top of newer target %1 [%2] +- Volver a aplicar un apunte de origen anterior sobre el objetivo más nuevo %1 [%2] +- +- +- Synchronizing from newer source %1 [%2] +- Sincronización desde una fuente más nueva %1 [%2] +- +- +- Synchronizing from older source %1 [%2] +- Sincronización desde una fuente anterior %1 [%2] +- +- +- Deleting child %1 [%2] +- Eliminando hijo %1[%2] +- +- +- Deleting orphan %1 [%2] +- Eliminando huérfano %1 [%2] +- +- +- Changed deleted objects +- cambiado objetos eliminados +- +- +- Adding missing icon %1 +- Añadiendo el icono faltante %1 +- +- +- Removed custom data %1 [%2] +- Eliminados datos personalizados %1 [%2] +- +- +- Adding custom data %1 [%2] +- Añadiendo datos personalizados %1 [%2] +- +- +- +- NewDatabaseWizard +- +- Create a new KeePassXC database... +- Crear una base de datos nueva KeePassXC... +- +- +- Root +- Root group +- Raíz +- +- +- +- NewDatabaseWizardPage +- +- WizardPage +- Asistente +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Aquí puede ajustar la configuración de cifrado de la base de datos. No se preocupe, puede cambiarlos más adelante en la configuración de la base de datos. +- +- +- Advanced Settings +- Configuraciones avanzadas +- +- +- Simple Settings +- Ajustes simples +- +- +- Encryption Settings +- Configuraciones de cifrado +- +- +- +- NewDatabaseWizardPageDatabaseKey +- +- Database Credentials +- Credenciales de base de datos +- +- +- A set of credentials known only to you that protects your database. +- Un conjunto de credenciales solo conocido por ti que protege su base de datos. +- +- +- +- NewDatabaseWizardPageEncryption +- +- Encryption Settings +- Configuraciones de cifrado +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Aquí puede ajustar la configuración de cifrado de la base de datos. No se preocupe, puede cambiarlos más adelante en la configuración de la base de datos. +- +- +- +- NewDatabaseWizardPageMetaData +- +- General Database Information +- Información general de la base de datos +- +- +- Please fill in the display name and an optional description for your new database: +- Por favor complete el nombre, y agregue una descripción opcional, para su nueva base de datos: +- +- +- +- NixUtils +- +- Password Manager +- Gestor de contraseñas +- +- +- +- OpData01 +- +- Invalid OpData01, does not contain header +- OpData01 inválido, no contiene cabecera +- +- +- Unable to read all IV bytes, wanted 16 but got %1 +- No se pueden leer todos los bytes IV, se deseaban 16 pero se obtuvieron %1 +- +- +- Unable to init cipher for opdata01: %1 +- No se puede inicializar el cifrado para opdata01: %1 +- +- +- Unable to read all HMAC signature bytes +- No se pueden leer todos los bytes de firma HMAC +- +- +- Malformed OpData01 due to a failed HMAC +- OpData01 malformado debido a un HMAC fallido +- +- +- Unable to process clearText in place +- No se puede procesar clearText en su lugar +- +- +- Expected %1 bytes of clear-text, found %2 +- Se esperaban %1 bytes de texto plano, se encontraron %2 +- +- +- +- OpVaultOpenWidget +- +- Read Database did not produce an instance +-%1 +- Leer la base de datos no produce una instancia +-%1 +- +- +- +- OpVaultReader +- +- Directory .opvault must exist +- El directorio .opvault debe existir +- +- +- Directory .opvault must be readable +- El directorio .opvault debe ser leíble +- +- +- Directory .opvault/default must exist +- El directorio .opvault/default debe existir +- +- +- Directory .opvault/default must be readable +- El directorio .opvault/default debe ser leíble +- +- +- Unable to decode masterKey: %1 +- No se puede decodificar la clave maestra: %1 +- +- +- Unable to derive master key: %1 +- No se puede derivar la clave maestra: %1 +- +- +- +- OpenSSHKey +- +- Invalid key file, expecting an OpenSSH key +- Fichero clave no válido, esperando una clave de OpenSSH +- +- +- PEM boundary mismatch +- Desajuste de límite PEM +- +- +- Base64 decoding failed +- No se pudo decodificar Base64 +- +- +- Key file way too small. +- Fichero clave demasiado pequeño. +- +- +- Key file magic header id invalid +- Id de encabezado mágico del fichero clave inválido +- +- +- Found zero keys +- Cero claves encontradas +- +- +- Failed to read public key. +- No se pudo leer la clave pública. +- +- +- Corrupted key file, reading private key failed +- Fichero clave corrupto, no se pudo leer la clave privada +- +- +- No private key payload to decrypt +- Sin contenido a descifrar en clave privada +- +- +- Trying to run KDF without cipher +- Tratando de ejecutar KDF sin cifrado +- +- +- Passphrase is required to decrypt this key +- Frase de contraseña necesaria para descrifrar esta clave +- +- +- Key derivation failed, key file corrupted? +- La derivación de la clave falló, ¿el fichero clave está dañado? +- +- +- Decryption failed, wrong passphrase? +- ¿Error de descifrado, frase de contraseña incorrecta? +- +- +- Unexpected EOF while reading public key +- EOF inesperado al leer la clave pública +- +- +- Unexpected EOF while reading private key +- EOF inesperado al leer la clave privada +- +- +- Can't write public key as it is empty +- No se puede escribir la clave pública ya que es vacía +- +- +- Unexpected EOF when writing public key +- EOF inesperado al escribir la clave pública +- +- +- Can't write private key as it is empty +- No se puede escribir la clave privada ya que está vacía +- +- +- Unexpected EOF when writing private key +- EOF inesperado al escribir la clave privada +- +- +- Unsupported key type: %1 +- Tipo de clave no soportada: %1 +- +- +- Unknown cipher: %1 +- Cifrado desconocido: %1 +- +- +- Cipher IV is too short for MD5 kdf +- Cifrado IV demasiado corto para MD5 kdf +- +- +- Unknown KDF: %1 +- KDF desconocido: %1 +- +- +- Unknown key type: %1 +- Tipo de clave desconocida: %1 +- +- +- +- PasswordEdit +- +- Passwords do not match +- Contraseñas que no coinciden +- +- +- Passwords match so far +- Contraseñas coincidentes hasta el momento +- +- +- Toggle Password (%1) +- Intercambiar contraseña (%1) +- +- +- Generate Password (%1) +- Generar contraseña (%1) +- +- +- Warning: Caps Lock enabled! +- Advertencia: ¡las mayúsculas están activadas! +- +- +- +- PasswordEditWidget +- +- Enter password: +- Ingrese la contraseña +- +- +- Confirm password: +- Confirmar la contraseña +- +- +- Password +- Contraseña +- +- +- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> +- <p>La contraseña es el método principal para asegurar su base de datos.<p><p>Las contraseñas buenas son largas y únicas. KeePassXC puede generar una para usted.<p> +- +- +- Passwords do not match. +- Las contraseñas no coinciden. +- +- +- Password field +- Campo de contraseña +- +- +- Repeat password field +- Campo repetir contraseña +- +- +- +- PasswordGeneratorWidget +- +- %p% +- %p% +- +- +- strength +- Password strength +- seguridad +- +- +- entropy +- entropía +- +- +- Password +- Contraseña +- +- +- Character Types +- Tipos de caracteres +- +- +- Numbers +- Números +- +- +- Extended ASCII +- ASCII extendido +- +- +- Exclude look-alike characters +- Excluir caracteres similares +- +- +- Pick characters from every group +- Elegir caracteres de todos los grupos +- +- +- &Length: +- &Longitud: +- +- +- Passphrase +- Frase de contraseña +- +- +- Wordlist: +- Lista de palabras: +- +- +- Word Separator: +- Separador de palabras: +- +- +- Close +- Cerrar +- +- +- Entropy: %1 bit +- Entropía: %1 bit +- +- +- Password Quality: %1 +- Calidad de la contraseña: %1 +- +- +- Poor +- Password quality +- Pobre +- +- +- Weak +- Password quality +- Débil +- +- +- Good +- Password quality +- Buena +- +- +- Excellent +- Password quality +- Excelente +- +- +- Switch to advanced mode +- Cambiar a modo avanzado +- +- +- Advanced +- Avanzado +- +- +- Braces +- Llaves +- +- +- Punctuation +- Puntuación +- +- +- Quotes +- Comillas +- +- +- Logograms +- Logogramas +- +- +- Character set to exclude from generated password +- Conjunto de caracteres a excluir de la contraseña generada +- +- +- Do not include: +- No incluir: +- +- +- Add non-hex letters to "do not include" list +- Añadir letras no-hexadecimales a la lista de "no incluir" +- +- +- Hex +- Hexadecimal +- +- +- Excluded characters: "0", "1", "l", "I", "O", "|", "ï¹’" +- Caracteres excluidos: «0», «1», «l», «I», «O», «|», «﹒» +- +- +- Generated password +- Generar contraseña +- +- +- Upper-case letters +- Letras mayúsculas +- +- +- Lower-case letters +- Letras minúsculas +- +- +- Special characters +- Caracteres especiales +- +- +- Math Symbols +- Símbolos matemáticos +- +- +- Dashes and Slashes +- Guiones y barras +- +- +- Excluded characters +- Excluir caracteres +- +- +- Hex Passwords +- Contraseñas hex +- +- +- Password length +- Longitud de contraseña +- +- +- Word Case: +- Capitalización de palabra: +- +- +- Regenerate password +- Regenerar contraseña +- +- +- Copy password +- Copiar contraseña +- +- +- lower case +- Minúsculas +- +- +- UPPER CASE +- Mayúsculas +- +- +- Title Case +- Capitalización de título +- +- +- Generate Password +- Generar contraseña +- +- +- Also choose from: +- También seleccionar de: +- +- +- Additional characters to use for the generated password +- Caracteres adicionales a usar para generar la contraseña +- +- +- Additional characters +- Caracteres adicionales +- +- +- Word Count: +- Cantidad de palabras: +- +- +- Esc +- Esc +- +- +- Apply Password +- Aplicar contraseña +- +- +- Ctrl+S +- Ctrl+S +- +- +- Regenerate password (%1) +- Regenerar contraseña (%1) +- +- +- Special Characters +- Caracteres especiales +- +- +- +- QApplication +- +- KeeShare +- KeeShare +- +- +- Statistics +- Estadísticas +- +- +- Very weak password +- Contraseña muy débil +- +- +- Password entropy is %1 bits +- La entropía de la contraseña es de %1 bits +- +- +- Weak password +- Contraseña débil +- +- +- Used in %1/%2 +- Usada en %1%2 +- +- +- Password is used %1 times +- La contraseña es usada %1 veces +- +- +- Password has expired +- La contraseña ha expirado +- +- +- Password expiry was %1 +- La expiración de la contraseña fue %1 +- +- +- Password is about to expire +- La contraseña está a punto de expirar +- +- +- Password expires in %1 days +- La contraseña expira en %1 días +- +- +- Password will expire soon +- La contraseña expirará pronto +- +- +- Password expires on %1 +- La contraseña expira el %1 +- +- +- Health Check +- Comprobación de salud +- +- +- HIBP +- HIBP +- +- +- +- QMessageBox +- +- Overwrite +- Sobrescribir +- +- +- Delete +- Eliminar +- +- +- Move +- Mover +- +- +- Empty +- Vaciar +- +- +- Remove +- Eliminar +- +- +- Skip +- Omitir +- +- +- Disable +- Deshabilitar +- +- +- Merge +- Combinar +- +- +- Continue +- Continuar +- +- +- +- QObject +- +- Database not opened +- Base de datos no abierta +- +- +- Database hash not available +- Hash de la base de datos no disponible +- +- +- Client public key not received +- Clave pública del cliente no recibida +- +- +- Cannot decrypt message +- No se puede descifrar el mensaje +- +- +- Action cancelled or denied +- Acción cancelada o denegada +- +- +- KeePassXC association failed, try again +- No se pudo asociar con KeePassXC, inténtelo de nuevo +- +- +- Encryption key is not recognized +- Clave de cifrado no es reconocida +- +- +- Incorrect action +- Acción incorrecta +- +- +- Empty message received +- Mensaje vacío recibido +- +- +- No URL provided +- No hay URL proporcionada +- +- +- No logins found +- No se encontraron inicios de sesión +- +- +- Unknown error +- Error desconocido +- +- +- Add a new entry to a database. +- Añadir un nuevo apunte a una base de datos. +- +- +- Path of the database. +- Ruta a la base de datos. +- +- +- Key file of the database. +- Fichero clave de la base de datos +- +- +- path +- ruta +- +- +- Username for the entry. +- Usuario para el apunte. +- +- +- username +- usuario +- +- +- URL for the entry. +- URL del apunte. +- +- +- URL +- URL +- +- +- Prompt for the entry's password. +- Solicitar contraseña del apunte. +- +- +- Generate a password for the entry. +- Generar una contraseña para el apunte. +- +- +- length +- Tamaño +- +- +- Path of the entry to add. +- Ruta del apunte para añadir. +- +- +- Path of the entry to clip. +- clip = copy to clipboard +- Ruta del apunte para copiar. +- +- +- Timeout in seconds before clearing the clipboard. +- Tiempo de espera en segundos antes de eliminar el portapapeles. +- +- +- Edit an entry. +- Editar un apunte. +- +- +- Title for the entry. +- Título para el apunte. +- +- +- title +- título +- +- +- Path of the entry to edit. +- Ruta del apunte para editar. +- +- +- Estimate the entropy of a password. +- Estimar la entropía de una contraseña. +- +- +- Password for which to estimate the entropy. +- Contraseña para la que desea calcular la entropía. +- +- +- Perform advanced analysis on the password. +- Realizar análisis avanzado sobre la contraseña. +- +- +- +- +-Available commands: +- +- +- +-Comandos disponibles: +- +- +- +- Name of the command to execute. +- Nombre del comando a ejecutar. +- +- +- List database entries. +- Listar los apuntes de la base de datos. +- +- +- Path of the group to list. Default is / +- Ruta del grupo a listar. Por defecto es / +- +- +- Find entries quickly. +- Encontrar los apuntes rápidamente. +- +- +- Search term. +- Término de búsqueda. +- +- +- Merge two databases. +- Combinar dos bases de datos. +- +- +- Path of the database to merge from. +- Ruta de la base de datos de la que combinar. +- +- +- Use the same credentials for both database files. +- Utilizar las mismas credenciales para ambos archivos de base de datos. +- +- +- Key file of the database to merge from. +- Fichero clave de la base de datos desde la cual desea combinar. +- +- +- Show an entry's information. +- Muestra información de un apunte. +- +- +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- Nombres de los atributos para mostrar. Esta opción se puede especificar más de una vez, con cada atributo apareciendo uno por línea en el orden dado. Si no se especifica ningún atributo, se da un resumen de los atributos predeterminados. +- +- +- attribute +- atributo +- +- +- Name of the entry to show. +- Nombre del apunte para mostrar. +- +- +- NULL device +- Dispositivo NULL +- +- +- error reading from device +- error leyendo del dispositivo +- +- +- malformed string +- cadena de caracteres mal formada +- +- +- missing closing quote +- comilla de cierre faltante +- +- +- Group +- Grupo +- +- +- Title +- Título +- +- +- Username +- Usuario +- +- +- Password +- Contraseña +- +- +- Notes +- Notas +- +- +- Last Modified +- Última modificación +- +- +- Created +- Creado +- +- +- Browser Integration +- Integración con navegadores +- +- +- SSH Agent +- Agente SSH +- +- +- Generate a new random diceware passphrase. +- Generar una nueva frase de contraseña aleatoria diceware. +- +- +- Word count for the diceware passphrase. +- Número de palabras para la frase de contraseña de diceware. +- +- +- Wordlist for the diceware generator. +-[Default: EFF English] +- Lista de palabras para el generador de diceware. +-[Por defecto: Inglés EFF] +- +- +- Generate a new random password. +- Generar una nueva contraseña aleatoria. +- +- +- Could not create entry with path %1. +- No pudo crearse el apunte con ruta %1. +- +- +- Enter password for new entry: +- Introduzca la contraseña para el nuevo apunte: +- +- +- Writing the database failed %1. +- Falló escritura de la base de datos %1. +- +- +- Successfully added entry %1. +- El apunte %1 se añadió correctamente. +- +- +- Invalid timeout value %1. +- Valor inválido para valor de tiempo de espera %1. +- +- +- Entry %1 not found. +- No se encontró el apunte %1. +- +- +- Entry with path %1 has no TOTP set up. +- El apunte con ruta %1 no tiene un TOTP configurado. +- +- +- Clearing the clipboard in %1 second(s)... +- Limpiar el portapapeles en %1 segundo(s)...Limpiar el portapapeles en %1 segundo(s)... +- +- +- Clipboard cleared! +- ¡El portapapeles se ha limpiado! +- +- +- Silence password prompt and other secondary outputs. +- Silenciar la solicitud de contraseña y demás productos secundarios. +- +- +- count +- CLI parameter +- número +- +- +- Could not find entry with path %1. +- No se pudo encontrar el apunte con la ruta %1. +- +- +- Not changing any field for entry %1. +- No cambiar cualquier campo para el apunte 1%. +- +- +- Enter new password for entry: +- Introduzca una nueva contraseña para el apunte: +- +- +- Writing the database failed: %1 +- Fallo al escribir la base de datos: %1 +- +- +- Successfully edited entry %1. +- Apunte %1 editado correctamente. +- +- +- Length %1 +- Longitud %1 +- +- +- Entropy %1 +- Entropía: %1 +- +- +- Log10 %1 +- Log10 %1 +- +- +- Multi-word extra bits %1 +- Multi-palabra extra bits %1 +- +- +- Type: Bruteforce +- Tipo: Fuerza bruta +- +- +- Type: Dictionary +- Tipo: Diccionario +- +- +- Type: Dict+Leet +- Tipo: Dicc+leet +- +- +- Type: User Words +- Tipo: Palabras de usuario +- +- +- Type: User+Leet +- Tipo: Usuario+leet +- +- +- Type: Repeated +- Tipo: repetido +- +- +- Type: Sequence +- Tipo: Secuencia +- +- +- Type: Spatial +- Tipo: Espacial +- +- +- Type: Date +- Tipo: Fecha +- +- +- Type: Bruteforce(Rep) +- Tipo: Fuerza Bruta(Rep) +- +- +- Type: Dictionary(Rep) +- Tipo: Diccionario(Rep) +- +- +- Type: Dict+Leet(Rep) +- Tipo: Dicc+Leet(Rep) +- +- +- Type: User Words(Rep) +- Tipo: palabras de usuario (rep) +- +- +- Type: User+Leet(Rep) +- Tipo: Usuario + Leet(Rep) +- +- +- Type: Repeated(Rep) +- Tipo: Repetido(Rep) +- +- +- Type: Sequence(Rep) +- Tipo: Secuencia(Rep) +- +- +- Type: Spatial(Rep) +- Tipo: Espacial(Rep) +- +- +- Type: Date(Rep) +- Tipo: Fecha(Rep) +- +- +- Type: Unknown%1 +- Tipo: Desconocido %1 +- +- +- Entropy %1 (%2) +- Entropía %1 (%2) +- +- +- *** Password length (%1) != sum of length of parts (%2) *** +- *** Longitud de la contraseña (%1) != Suma de la longitud de las partes (%2) *** +- +- +- Failed to load key file %1: %2 +- Error al cargar el fichero clave %1: %2 +- +- +- Length of the generated password +- Longitud de la contraseña generada +- +- +- Use lowercase characters +- Usar caracteres en minúscula +- +- +- Use uppercase characters +- Usar caracteres en mayúscula +- +- +- Use special characters +- Usar caracteres especiales +- +- +- Use extended ASCII +- Usar ASCII extendido +- +- +- Exclude character set +- Excluir conjunto de caracteres +- +- +- chars +- caracteres +- +- +- Exclude similar looking characters +- Excluir caracteres de aspecto similar +- +- +- Include characters from every selected group +- Incluir caracteres de cada grupo seleccionado +- +- +- Recursively list the elements of the group. +- Listar recursivamente los elementos del grupo. +- +- +- Cannot find group %1. +- No se puede encontrar el grupo %1. +- +- +- Error reading merge file: +-%1 +- Error al leer el archivo a combinar: +-%1 +- +- +- Unable to save database to file : %1 +- No se puede guardar la base de datos en el archivo: %1 +- +- +- Unable to save database to file: %1 +- No se puede guardar la base de datos en el archivo: %1 +- +- +- Successfully recycled entry %1. +- Apunte %1 reciclado correctamente. +- +- +- Successfully deleted entry %1. +- Se eliminó correctamente el apunte %1. +- +- +- Show the entry's current TOTP. +- Muestra el TOTP actual del apunte. +- +- +- ERROR: unknown attribute %1. +- ERROR: atributo desconocido %1. +- +- +- No program defined for clipboard manipulation +- Ningún programa definido para la manipulación del portapapeles. +- +- +- file empty +- archivo vacío +- +- +- %1: (row, col) %2,%3 +- %1: (fila, col) %2,%3 +- +- +- AES-KDF (KDBX 4) +- AES-KDF (KDBX 4) +- +- +- AES-KDF (KDBX 3.1) +- AES-KDF (KDBX 3.1) +- +- +- Invalid Settings +- TOTP +- Configuración inválida +- +- +- Invalid Key +- TOTP +- Clave inválida +- +- +- Message encryption failed. +- El cifrado del mensaje falló. +- +- +- No groups found +- No se encontraron grupos +- +- +- Create a new database. +- Crear una base de datos nueva. +- +- +- File %1 already exists. +- El archivo %1 ya existe. +- +- +- Loading the key file failed +- La carga del fichero clave falló +- +- +- No key is set. Aborting database creation. +- No se establece ninguna clave. Anulando la creación de base de datos. +- +- +- Failed to save the database: %1. +- Error al guardar la base de datos: %1. +- +- +- Successfully created new database. +- Nueva base de datos creada correctamente. +- +- +- Creating KeyFile %1 failed: %2 +- Error al crear el fichero clave %1: %2 +- +- +- Loading KeyFile %1 failed: %2 +- Error al cargar el fichero clave %1: %2 +- +- +- Path of the entry to remove. +- Ruta del apunte a eliminar. +- +- +- Existing single-instance lock file is invalid. Launching new instance. +- El archivo de bloqueo de instancia única existente no es válido. Lanzando nueva instancia. +- +- +- The lock file could not be created. Single-instance mode disabled. +- El archivo de bloqueo no pudo ser creado. Modo de instancia única deshabilitado. +- +- +- KeePassXC - cross-platform password manager +- KeePassXC - gestor de claves multiplataforma +- +- +- filenames of the password databases to open (*.kdbx) +- nombre de archivo de las bases de datos de contraseñas a abrir (*.kdbx) +- +- +- path to a custom config file +- ruta a un archivo de configuración personalizado +- +- +- key file of the database +- fichero clave de la base de datos +- +- +- read password of the database from stdin +- leer contraseña de la base de datos desde la entrada estándar +- +- +- Another instance of KeePassXC is already running. +- Otra instancia de KeePassXC ya se está ejecutando. +- +- +- Fatal error while testing the cryptographic functions. +- Error fatal comprobando las funciones criptográficas. +- +- +- KeePassXC - Error +- KeePassXC - Error +- +- +- Database password: +- Contraseña de la base de datos: +- +- +- Cannot create new group +- No se puede crear el nuevo grupo +- +- +- Deactivate password key for the database. +- Desactivar contraseña para la base de datos. +- +- +- Displays debugging information. +- Representa información de depurado. +- +- +- Deactivate password key for the database to merge from. +- Desactivar contraseña para la base de datos desde la que combinar. +- +- +- Version %1 +- Versión %1 +- +- +- Build Type: %1 +- Tipo de compilación: %1 +- +- +- Revision: %1 +- Revisión: %1 +- +- +- Distribution: %1 +- Distribución: %1 +- +- +- Debugging mode is disabled. +- Modo de depurado deshabilitado. +- +- +- Debugging mode is enabled. +- Modo de depurado habilitado. +- +- +- Operating system: %1 +-CPU architecture: %2 +-Kernel: %3 %4 +- Sistema operativo: %1 +-Arquitectura de CPU: %2 +-Núcleo: %3 %4 +- +- +- Auto-Type +- Autoescritura +- +- +- KeeShare (signed and unsigned sharing) +- KeeShare (compartir firmado y sin firmar) +- +- +- KeeShare (only signed sharing) +- KeeShare (compartir solo firmado) +- +- +- KeeShare (only unsigned sharing) +- KeeShare (compartir solo sin firmar) +- +- +- YubiKey +- YubiKey +- +- +- TouchID +- TouchID +- +- +- None +- Ninguno +- +- +- Enabled extensions: +- Extensiones habilitadas: +- +- +- Cryptographic libraries: +- Librerías criptográficas: +- +- +- Cannot generate a password and prompt at the same time! +- No se puede generar una contraseña y preguntar al mismo tiempo +- +- +- Adds a new group to a database. +- Añade un nuevo grupo a la base de datos. +- +- +- Path of the group to add. +- Ruta del grupo a añadir. +- +- +- Group %1 already exists! +- Grupo %1 ya existe. +- +- +- Group %1 not found. +- Grupo %1 no encontrado. +- +- +- Successfully added group %1. +- Grupo %1 añadido correctamente. +- +- +- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. +- Comprueba si algunas contraseñas han sido filtradas públicamente. FILENAME debe ser la ruta de un archivo conteniendo «hashes» SHA-1 de las contraseñas filtradas en formato HIBP, como está disponible en https://haveibeenpwned.com/Passwords. +- +- +- FILENAME +- FILENAME +- +- +- Analyze passwords for weaknesses and problems. +- Analizar debilidades y problemas en las contraseñas. +- +- +- Failed to open HIBP file %1: %2 +- Fallo al abrir archivo HIBP %1: %2 +- +- +- Evaluating database entries against HIBP file, this will take a while... +- Evaluando los apuntes de la base de datos contra el archivo HIBP, esto tomará un rato... +- +- +- Close the currently opened database. +- Cerrar la base de datos abierta actual. +- +- +- Display this help. +- Representar esta ayuda. +- +- +- slot +- ranura +- +- +- Invalid word count %1 +- Número de palabras inválido %1 +- +- +- The word list is too small (< 1000 items) +- El listado de palabras es demasiado pequeña (< 1000 elementos) +- +- +- Exit interactive mode. +- Salir de modo interactivo. +- +- +- Exports the content of a database to standard output in the specified format. +- Exporta el contenido de la base de datos en la salida estándar en el formato especificado. +- +- +- Unable to export database to XML: %1 +- No se puede exportar base de datos a XML: %1 +- +- +- Unsupported format %1 +- Formato no soportado %1 +- +- +- Use numbers +- Utilizar números +- +- +- Invalid password length %1 +- Longitud de contraseña inválida %1 +- +- +- Display command help. +- Representar mandato de ayuda. +- +- +- Available commands: +- Comandos disponibles: +- +- +- Import the contents of an XML database. +- Importar los contenidos de la base de datos XML. +- +- +- Path of the XML database export. +- Ruta de la exportación de la base de datos XML. +- +- +- Path of the new database. +- Ruta de la nueva base de datos. +- +- +- Successfully imported database. +- Base de datos importada correctamente. +- +- +- Unknown command %1 +- Mandato %1 desconocido +- +- +- Flattens the output to single lines. +- Aplana la salida en líneas individuales. +- +- +- Only print the changes detected by the merge operation. +- Imprimir solo cambios detectados por la operación combinar. +- +- +- Yubikey slot for the second database. +- Ranura YubiKey para la segunda base de datos. +- +- +- Successfully merged %1 into %2. +- Combinado %1 en %2 correctamente. +- +- +- Database was not modified by merge operation. +- La base de datos no fue modificada por la operación de combinación +- +- +- Moves an entry to a new group. +- Mueve un apunte a un nuevo grupo. +- +- +- Path of the entry to move. +- Ruta del apunte a mover. +- +- +- Path of the destination group. +- Ruta del grupo destino. +- +- +- Could not find group with path %1. +- No se puede encontrar el grupo con ruta %1. +- +- +- Entry is already in group %1. +- El apunte ya está en el grupo %1. +- +- +- Successfully moved entry %1 to group %2. +- Apunte %1 movido al grupo %2 correctamente. +- +- +- Open a database. +- Abrir base de datos +- +- +- Path of the group to remove. +- Ruta del grupo a eliminar. +- +- +- Cannot remove root group from database. +- No se puede eliminar grupo raíz de la base de datos. +- +- +- Successfully recycled group %1. +- Grupo %1 reciclado correctamente. +- +- +- Successfully deleted group %1. +- Grupo %1 eliminado correctamente. +- +- +- Failed to open database file %1: not found +- Fallo al abrir archivo de base de datos %1: no encontrado +- +- +- Failed to open database file %1: not a plain file +- Fallo al abrir archivo de base de datos %1: archivo de texto no plano +- +- +- Failed to open database file %1: not readable +- Fallo al abrir archivo de base de datos %1: no leíble +- +- +- Enter password to unlock %1: +- Introduzca contraseña para desbloquear: %1 +- +- +- Invalid YubiKey slot %1 +- Ranura %1 de YubiKey inválida +- +- +- Enter password to encrypt database (optional): +- Introduzca la contraseña para cifrar la base de datos (opcional): +- +- +- HIBP file, line %1: parse error +- Archivo HIBP, línea %1: error de analizado +- +- +- Secret Service Integration +- Integración con servicio de secretos +- +- +- User name +- Usuario +- +- +- Password for '%1' has been leaked %2 time(s)! +- ¡Contraseña para «%1» ha sido filtrada %2 vez!¡Contraseña para «%1» ha sido filtrada %2 veces! +- +- +- Invalid password generator after applying all options +- Generador de contraseñas inválido tras aplicar opciones +- +- +- Show the protected attributes in clear text. +- Mostrar los atributos protegidos en texto legible +- +- +- Browser Plugin Failure +- Fallo en complemento de naegador +- +- +- Could not save the native messaging script file for %1. +- Nose puede guardar el mensaje del script nativo para %1. +- +- +- Copy the given attribute to the clipboard. Defaults to "password" if not specified. +- Copiar en atributo al portapapeles. Por defecto a «password» si no se especifica. +- +- +- Copy the current TOTP to the clipboard (equivalent to "-a totp"). +- Copiar el TOTP actual al portapapeles (equivalente a «-a totp».) +- +- +- Copy an entry's attribute to the clipboard. +- Copiar un atributo del apunte al portapapeles. +- +- +- ERROR: Please specify one of --attribute or --totp, not both. +- ERROR: especifique uno de --attibute o --totp, no ambos. +- +- +- ERROR: attribute %1 is ambiguous, it matches %2. +- ERROR: el atributo %1 es ambiguo, coincide con %2. +- +- +- Attribute "%1" not found. +- Atributo «%1» no encontrado. +- +- +- Entry's "%1" attribute copied to the clipboard! +- ¡Atributo del apunte «%1» copiado al portapapeles! +- +- +- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). +- La ranura Yubikey y el dato de serie usado para acceder a la base de datos (pe. 1:7370001). +- +- +- slot[:serial] +- ranura(:serie) +- +- +- Target decryption time in MS for the database. +- Tiempo de descifrado objetivo en ms para la base de datos. +- +- +- time +- tiempo +- +- +- Set the key file for the database. +- Establecer el fichero clave para la base de datos. +- +- +- Set a password for the database. +- Establecer la contraseña para la base de datos. +- +- +- Invalid decryption time %1. +- Tiempo de descifrado inválido %1. +- +- +- Target decryption time must be between %1 and %2. +- El tiempo de descifrado debe estar entre %1 y %2. +- +- +- Failed to set database password. +- Fallo al establecer la contraseña de la base de datos. +- +- +- Benchmarking key derivation function for %1ms delay. +- Rendimiento de función de derivación de clave con un retraso de %1ms. +- +- +- Setting %1 rounds for key derivation function. +- Estableciendo %1 pasadas para la función de derivación de clave. +- +- +- error while setting database key derivation settings. +- error mientras se establecía la configuración de derivación de contraseña. +- +- +- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. +- Formato a usar al exportar. Las opciones disponibles son «xml» o «csv». Por defecto «xml». +- +- +- Unable to import XML database: %1 +- No se puede importar la base de datos XML: %1 +- +- +- Show a database's information. +- Mostrar información de una base de datos. +- +- +- UUID: +- UUID: +- +- +- Name: +- Nombre: +- +- +- Description: +- Descripción: +- +- +- Cipher: +- Cifrado: +- +- +- KDF: +- KDF: +- +- +- Recycle bin is enabled. +- La papelera de reciclaje está habilitada. +- +- +- Recycle bin is not enabled. +- La papelera de reciclaje no está habilitada. +- +- +- Invalid command %1. +- Comando inválido %1. +- +- +- Invalid YubiKey serial %1 +- Serie de YubiKey inválido %1 +- +- +- Please touch the button on your YubiKey to continue… +- Toque el botón en su yubiKey para continuar... +- +- +- Do you want to create a database with an empty password? [y/N]: +- ¿Desea crear una base de datos con una contraseña vacía? (y/N): +- +- +- Repeat password: +- Repetir contraseña: +- +- +- Error: Passwords do not match. +- Error: las contraseñas no coinciden. +- +- +- All clipping programs failed. Tried %1 +- +- Todos los programas de recortes fallaron. Intentado %1 +- +- +- +- AES (%1 rounds) +- AES (%1 pasadas) +- +- +- AES 256-bit +- AES 256-bit +- +- +- Twofish 256-bit +- Twofish 256-bit +- +- +- ChaCha20 256-bit +- ChaCha20: 256-bit {20 256-?} +- +- +- Benchmark %1 delay +- Retraso de rendimiento %1 +- +- +- %1 ms +- milliseconds +- %1 ms%1 ms +- +- +- %1 s +- seconds +- %1 s%1 s +- +- +- path to a custom local config file +- ruta a un archivo de configuración local personalizado +- +- +- WARNING: You are using an old key file format which KeePassXC may +-stop supporting in the future. +- +-Please consider generating a new key file. +- ADVERTENCIA: Está usando un fichero clave con un formato antiguo que KeePassXC puede dejar +-de soportar en el futuro. +- +-Considere generar un nuevo fichero clave. +- +- +- Argon2%1 (%2 rounds, %3 KB) +- Argon2%1 (%2 rondas, %3 KB) +- +- +- Argon2d (KDBX 4 – recommended) +- Argon2d (KDBX 4 – recomendado) +- +- +- Argon2id (KDBX 4) +- Argon2id (KDBX 4) +- +- +- TOTP +- TOTP +- +- +- Icon +- Icono +- +- +- Unsupported key file version: %1 +- Versión de fichero clave no soportado: %1 +- +- +- Checksum mismatch! Key file may be corrupt. +- ¡Fallo de suma de comprobación! El fichero clave puede estar corrupto. +- +- +- Unexpected key file data! Key file may be corrupt. +- ¡Datos de fichero clave inesperados! El fichero clave puede estar corrupto. +- +- +- +- QtIOCompressor +- +- Internal zlib error when compressing: +- Error interno de zlib comprimiendo: +- +- +- Error writing to underlying device: +- Error al escribir en el dispositivo subyacente: +- +- +- Error opening underlying device: +- Error al abrir el dispositivo subyacente: +- +- +- Error reading data from underlying device: +- Error al leer el dispositivo subyacente: +- +- +- Internal zlib error when decompressing: +- Error interno de zlib descomprimiendo: +- +- +- +- QtIOCompressor::open +- +- The gzip format not supported in this version of zlib. +- El formato gzip no está soportado en esta versión de zlib. +- +- +- Internal zlib error: +- Error interno de zlib: +- +- +- +- ReportsWidgetHealthcheck +- +- Also show entries that have been excluded from reports +- Mostrar también que ha sido excluido de los informes +- +- +- Hover over reason to show additional details. Double-click entries to edit. +- Pasar por encima del motivo para mostrar detalles adicionales. Doble clic para editar. +- +- +- Bad +- Password quality +- Mal +- +- +- Bad — password must be changed +- Mal — la contraseña debe ser cambiada +- +- +- Poor +- Password quality +- Pobre +- +- +- Poor — password should be changed +- Pobre — la contraseña debería ser cambiada +- +- +- Weak +- Password quality +- Débil +- +- +- Weak — consider changing the password +- Débil — considere cambiar la contraseña +- +- +- (Excluded) +- (Excluida) +- +- +- This entry is being excluded from reports +- Este apunte es excluido de los informes +- +- +- Please wait, health data is being calculated... +- Espere, los datos de salud están siendo calculados... +- +- +- Congratulations, everything is healthy! +- ¡Felicidades, todo está correcto! +- +- +- Title +- Título +- +- +- Path +- Ruta +- +- +- Score +- Puntuación +- +- +- Reason +- Motivo +- +- +- Edit Entry... +- Editar apunte... +- +- +- Exclude from reports +- Excluir de los informes +- +- +- +- ReportsWidgetHibp +- +- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. +- CUIDADO: Este informe requiere enviar información al servicio en línea Have I Been Pwned (https://haveibeenpwned.com). Si continúa, su base de datos de contraseñas será cifrada criptográficamente y los cinco primeros caracteres de esos hashes serán enviados de forma segura a este servicio. Su base de datos se mantiene segura y no puede ser reconstruida desde esta información. Sin embargo, el número de contraseñas que envíe y su dirección IP quedará expuesto a este servicio. +- +- +- Perform Online Analysis +- Realizar análisis en línea +- +- +- Also show entries that have been excluded from reports +- Mostrar también que ha sido excluido de los informes +- +- +- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. +- Esta construcción de KeePassXC no tiene funciones de red. Las funciones de red son requeridas para comprobar sus contraseñas contra las bases de datos Have I Been Pwned. +- +- +- Congratulations, no exposed passwords! +- ¡Felicidades, no hay contraseñas expuestas! +- +- +- Title +- Título +- +- +- Path +- Ruta +- +- +- Password exposed… +- Contraseñas expuestas... +- +- +- (Excluded) +- (Excluido) +- +- +- This entry is being excluded from reports +- Este apunte es excluido de los informes +- +- +- once +- una vez +- +- +- up to 10 times +- hasta 10 veces +- +- +- up to 100 times +- hasta 100 veces +- +- +- up to 1000 times +- hasta 1000 veces +- +- +- up to 10,000 times +- hasta 10,000 veces +- +- +- up to 100,000 times +- hasta 100,000 veces +- +- +- up to a million times +- hasta un millón veces +- +- +- millions of times +- millones de veces +- +- +- Edit Entry... +- Editar apunte... +- +- +- Exclude from reports +- Excluir de los informes +- +- +- +- ReportsWidgetStatistics +- +- Hover over lines with error icons for further information. +- Ratón sobre líneas con iconos de error para información adicional. +- +- +- Name +- Nombre +- +- +- Value +- Valor +- +- +- Please wait, database statistics are being calculated... +- Espere, calculando las estadísticas de la base de datos... +- +- +- Database name +- Nombre de la base de datos +- +- +- Description +- Descripción +- +- +- Location +- Localización +- +- +- Last saved +- Última guardada +- +- +- Unsaved changes +- Cambios no guardados +- +- +- yes +- sí +- +- +- no +- no +- +- +- The database was modified, but the changes have not yet been saved to disk. +- La base de datos fue modificada pero los cambios no han sido guardados a disco todavía. +- +- +- Number of groups +- Número de grupos +- +- +- Number of entries +- Número de apuntes +- +- +- Number of expired entries +- Número de apuntes expirados +- +- +- The database contains entries that have expired. +- La base de datos contiene apuntes que han expirado. +- +- +- Unique passwords +- Contraseñas únicas +- +- +- Non-unique passwords +- Contraseñas no únicas +- +- +- More than 10% of passwords are reused. Use unique passwords when possible. +- Más del 10% de las contraseñas son reusadas. Use contraseñas únicas si es posible. +- +- +- Maximum password reuse +- Reuso máximo de contraseña +- +- +- Some passwords are used more than three times. Use unique passwords when possible. +- Algunas contraseñas son usadas más de tres veces. Use contraseñas únicas si es posible. +- +- +- Number of short passwords +- Número de contraseñas cortas +- +- +- Recommended minimum password length is at least 8 characters. +- La longitud mínima recomendada de contraseña es de al menos 8 caracteres. +- +- +- Number of weak passwords +- Número de contraseñas débiles +- +- +- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. +- Se recomienda usar largas contraseñas aleatorias con una calificación de «buena» o «excelente». +- +- +- Entries excluded from reports +- Apuntes excluidos de los informes +- +- +- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. +- Excluyendo apuntes de los informes, pe. porque se sabe que tiene una contraseña pobre, no es necesariamente un problema pero debería analizarse. +- +- +- Average password length +- Longitud media de contraseña +- +- +- %1 characters +- %1 caracteres +- +- +- Average password length is less than ten characters. Longer passwords provide more security. +- La longitud media de contraseña es menos de diez caracteres. Las contraseñas más largas proporcionan más seguridad. +- +- +- +- SSHAgent +- +- Agent connection failed. +- La conexión del agente falló. +- +- +- Agent protocol error. +- Error de protocolo del agente. +- +- +- No agent running, cannot add identity. +- Ningún agente en ejecución, no se puede añadir identidad. +- +- +- No agent running, cannot remove identity. +- Ningún agente en ejecución, no puede eliminar identidad. +- +- +- Agent refused this identity. Possible reasons include: +- El agente rechazó esta identidad. Los posibles motivos incluyen: +- +- +- The key has already been added. +- La clave ya ha sido añadida. +- +- +- Restricted lifetime is not supported by the agent (check options). +- La vida útil limitada no es soportada por el agente (verifique opciones). +- +- +- A confirmation request is not supported by the agent (check options). +- La solicitud de confirmación no es soportada por el agente (verifique opciones). +- +- +- Key identity ownership conflict. Refusing to add. +- Conflicto de propiedad de Identidad de clave. Denegando el añadir. +- +- +- No agent running, cannot list identities. +- No hay ningún agente ejecutándose, no se pueden listar identidades. +- +- +- +- SearchHelpWidget +- +- Search Help +- Buscar ayuda +- +- +- Search terms are as follows: [modifiers][field:]["]term["] +- Los términos de búsqueda son los siguientes: [modificadores] [campo:] ["] término ["] +- +- +- Every search term must match (ie, logical AND) +- Cada término de búsqueda debe coincidir (es decir, AND lógico) +- +- +- Modifiers +- Modificadores +- +- +- exclude term from results +- excluir término de resultados +- +- +- match term exactly +- coincidencia en término exactamente +- +- +- use regex in term +- usar expresiones regulares en término +- +- +- Fields +- Campos +- +- +- Term Wildcards +- Comodines en término +- +- +- match anything +- coincidir cualquier cosa +- +- +- match one +- coincidir uno +- +- +- logical OR +- OR lógico +- +- +- Examples +- Ejemplos +- +- +- +- SearchWidget +- +- Search +- Buscar +- +- +- Limit search to selected group +- Limitar la búsqueda al grupo selecionado +- +- +- Search Help +- Buscar Ayuda +- +- +- Search (%1)... +- Search placeholder text, %1 is the keyboard shortcut +- Buscar (%1) ... +- +- +- Case sensitive +- Distinguir mayúsculas/minúsculas +- +- +- +- SettingsWidgetFdoSecrets +- +- Options +- Opciones +- +- +- Enable KeepassXC Freedesktop.org Secret Service integration +- Permitir integración de servicio de secretos KeepassXC Freedesktop.org +- +- +- General +- General +- +- +- Show notification when credentials are requested +- Mostrar una notificación cuando las credenciales son requeridas +- +- +- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> +- <html><head/><body><p>Si la papelera de reciclaje está habilitada para la base de datos, las entradas serán movidas a la papelera directamente. Sino serán eliminadas sin confirmación.</p><p>Aún así se le solicitará si alguna entrada es referenciada por otras.</p></body></html> +- +- +- Exposed database groups: +- Grupos de base de datos expuestos: +- +- +- Authorization +- Autorización +- +- +- These applications are currently connected: +- Estas aplicaciones están actualmente conectadas: +- +- +- Don't confirm when entries are deleted by clients +- No confirmar cuando los apuntes son eliminados por los clientes. +- +- +- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. +- <b>Error:</b> Fallo al conectar a DBus. Compruebe su configuración de DBus. +- +- +- <b>Warning:</b> +- <b>Advertencia:</b> +- +- +- Save current changes to activate the plugin and enable editing of this section. +- Guardar los cambios para activar el complemento y habilitar la edición de esta sección. +- +- +- +- SettingsWidgetKeeShare +- +- Active +- Activo +- +- +- Allow export +- Permitir la exportación +- +- +- Allow import +- Permitir la importación +- +- +- Own certificate +- Certificado propio +- +- +- Fingerprint: +- Huella digital: +- +- +- Certificate: +- Certificado: +- +- +- Signer +- Firmante +- +- +- Key: +- Clave: +- +- +- Generate +- Generar +- +- +- Import +- Importar +- +- +- Export +- Exportar +- +- +- Imported certificates +- Certificados importados +- +- +- Trust +- De confianza +- +- +- Ask +- Preguntar +- +- +- Untrust +- Sin confianza +- +- +- Remove +- Eliminar +- +- +- Path +- Ruta +- +- +- Status +- Estado +- +- +- Fingerprint +- Huella digital +- +- +- Certificate +- Certificado +- +- +- Trusted +- De confianza +- +- +- Untrusted +- No es de confianza +- +- +- Unknown +- Desconocido +- +- +- key.share +- Filetype for KeeShare key +- key.share +- +- +- KeeShare key file +- Fichero clave de KeeShare +- +- +- All files +- Todos los archivos +- +- +- Select path +- Seleccionar ruta +- +- +- Exporting changed certificate +- Exportando certificado modificado +- +- +- The exported certificate is not the same as the one in use. Do you want to export the current certificate? +- El certificado exportado no es lo mismo que el que está en uso. ¿Desea exportar el certificado actual? +- +- +- Signer: +- Firmante: +- +- +- Allow KeeShare imports +- Permitir importación KeeShare +- +- +- Allow KeeShare exports +- Permitir exportación KeeShare +- +- +- Only show warnings and errors +- Mostrar solo advertencias y errores +- +- +- Key +- Clave +- +- +- Signer name field +- Campo de nombre firmante +- +- +- Generate new certificate +- Generar nuevo certificado +- +- +- Import existing certificate +- Importar certificado existente +- +- +- Export own certificate +- Exportar certificado propio +- +- +- Known shares +- Comparticiones conocidos +- +- +- Trust selected certificate +- Confiar en certificado seleccionado +- +- +- Ask whether to trust the selected certificate every time +- Solicitar si confiar en certificado seleccionado cada vez +- +- +- Untrust selected certificate +- Desconfiar de certificado seleccionado +- +- +- Remove selected certificate +- Eliminar certificado seleccionado +- +- +- +- ShareExport +- +- Overwriting signed share container is not supported - export prevented +- No se soporta la sobrescritura de contenedor compartido sin firmar - exportación prevenida +- +- +- Could not write export container (%1) +- No podría escribir el contenedor de exportación (%1) +- +- +- Could not embed signature: Could not open file to write (%1) +- No se puede incrustar la firma: no se puede abrir el archivo para escribir (%1) +- +- +- Could not embed signature: Could not write file (%1) +- No se puede incrustar la firma: no se puede escribir el archivo (%1) +- +- +- Could not embed database: Could not open file to write (%1) +- No se puede incrustar la base de datos: no se puede abrir el archivo para escribir (%1) +- +- +- Could not embed database: Could not write file (%1) +- No se puede incrustar la base de datos.: no se puede escribir el archivo (%1) +- +- +- Overwriting unsigned share container is not supported - export prevented +- No se soporta la sobrescritura de contenedor compartido sin firmar - exportación prevenida +- +- +- Could not write export container +- No se puede escribir contenedor de exportación +- +- +- Unexpected export error occurred +- Ha ocurrido un error inesperado en la exportación +- +- +- +- ShareImport +- +- Import from container without signature +- Importación de contenedores sin firma +- +- +- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? +- No podemos verificar la fuente del contenedor compartido porque no está firmado. ¿Desea importar desde %1? +- +- +- Import from container with certificate +- Importar desde contenedor con certificado +- +- +- Do you want to trust %1 with the fingerprint of %2 from %3? +- ¿Desea confiar a %1 con la huella digital de %2 desde %3? {1 ?} {2 ?} +- +- +- Not this time +- No esta vez +- +- +- Never +- Nunca +- +- +- Always +- Siempre +- +- +- Just this time +- Sólo esta vez +- +- +- Signed share container are not supported - import prevented +- No se soportan contenedores compartidos firmados - importación prevenida +- +- +- File is not readable +- El archivo no es legible +- +- +- Invalid sharing container +- Contenedor compartido no válido +- +- +- Untrusted import prevented +- Se previno importación no fiable +- +- +- Successful signed import +- Importación firmada correcta +- +- +- Unsigned share container are not supported - import prevented +- No se soportan contenedores compartidos sin firmar - Importación prevenida +- +- +- Successful unsigned import +- Importación no firmada correcta +- +- +- File does not exist +- El archivo no existe +- +- +- Unknown share container type +- Tipo de contenedor compartido desconocido +- +- +- +- ShareObserver +- +- Import from %1 failed (%2) +- Importación de %1 fallida (%2) +- +- +- Import from %1 successful (%2) +- Importación de %1 exitosa (%2) +- +- +- Imported from %1 +- Importado de %1 +- +- +- Export to %1 failed (%2) +- Falló exportación a %1 (%2) +- +- +- Export to %1 successful (%2) +- Exportación a %1 existosa (%2) +- +- +- Export to %1 +- Exportar a %1 +- +- +- Multiple import source path to %1 in %2 +- Ruta de origen de importación múltiple a %1 en %2 +- +- +- Conflicting export target path %1 in %2 +- Ruta de destino de exportación contradictoria %1 en %2 +- +- +- +- TotpDialog +- +- Timed Password +- Contraseña temporizada +- +- +- 000000 +- 000000 +- +- +- Copy +- Copiar +- +- +- Expires in <b>%n</b> second(s) +- Caduca en <b>%n</b> segundoCaduca en <b>%n</b> segundos +- +- +- +- TotpExportSettingsDialog +- +- Copy +- Copiar +- +- +- NOTE: These TOTP settings are custom and may not work with other authenticators. +- TOTP QR code dialog warning +- NOTA: Esta configuración de TOTP es personalizada y puede que no funcione con otros autenticadores. +- +- +- There was an error creating the QR code. +- Se ha producido un error al crear el código QR. +- +- +- Closing in %1 seconds. +- Cerrando en %1 segundos. +- +- +- +- TotpSetupDialog +- +- Setup TOTP +- Configurar TOTP +- +- +- Default RFC 6238 token settings +- Ajustes para el token por defecto RFC 6238 +- +- +- Steam token settings +- Opciones de token de Steam +- +- +- Use custom settings +- Usar configuración personalizada +- +- +- Custom Settings +- Configuración personalizada +- +- +- Time step: +- Paso del tiempo: +- +- +- sec +- Seconds +- segundos +- +- +- Code size: +- Tamaño del código: +- +- +- Secret Key: +- Clave secreta: +- +- +- Secret key must be in Base32 format +- La clave secreta debe estar en formato Base32 +- +- +- Secret key field +- Campo clave secreta +- +- +- Algorithm: +- Algoritmo: +- +- +- Time step field +- Campo paso de tiempo +- +- +- digits +- dígitos +- +- +- Invalid TOTP Secret +- Secreto TOTP inválido +- +- +- You have entered an invalid secret key. The key must be in Base32 format. +-Example: JBSWY3DPEHPK3PXP +- Ha introducido un secreto de clave inválido. La clave debe estar en formato Base32. +-Ejemplo: JBSWY3DPEHPK3PXP +- +- +- Confirm Remove TOTP Settings +- Confirmar eliminar configuración TOTP +- +- +- Are you sure you want to delete TOTP settings for this entry? +- ¿Desea eliminar la configuración TOTP para este apunte? +- +- +- +- URLEdit +- +- Invalid URL +- URL inválida +- +- +- +- UpdateCheckDialog +- +- Checking for updates +- Comprobando actualizaciones +- +- +- Checking for updates... +- Comprobando actualizaciones... +- +- +- Close +- Cerrar +- +- +- Update Error! +- ¡Error al acualizar! +- +- +- An error occurred in retrieving update information. +- Se ha producido un error al recuperando la información de la actualización. +- +- +- Please try again later. +- Por favor Inténtelo más tarde. +- +- +- Software Update +- Actualización de software +- +- +- A new version of KeePassXC is available! +- ¡Una versión nueva de KeePassXC está disponible! +- +- +- KeePassXC %1 is now available — you have %2. +- KeePassXC %1 ya está disponible — usted tiene %2. +- +- +- Download it at keepassxc.org +- Descargala de keepassxc.org +- +- +- You're up-to-date! +- ¡Está actualizado! +- +- +- KeePassXC %1 is currently the newest version available +- KeePassXC %1 actualmente es la versión más reciente disponible +- +- +- +- WelcomeWidget +- +- Start storing your passwords securely in a KeePassXC database +- Empiece a guardar sus contraseñas con seguridad en una base de datos de KeePassXC +- +- +- Create new database +- Crear una base de datos nueva +- +- +- Open existing database +- Abrir una base de datos existente +- +- +- Import from KeePass 1 +- Importar de KeePass 1 +- +- +- Import from CSV +- Importar de CSV +- +- +- Recent databases +- Bases de datos recientes +- +- +- Welcome to KeePassXC %1 +- Bienvenido a KeePassXC %1 +- +- +- Import from 1Password +- Importar de 1Password +- +- +- Open a recent database +- Abrir base de datos reciente +- +- +- +- YubiKey +- +- %1 [%2] Configured Slot - %3 +- %1 [%2] Ranura de configuración - %3 +- +- +- %1 [%2] Challenge Response - Slot %3 - %4 +- %1 [%2] Reto respuesta - Ranura %3 - %4 +- +- +- Press +- Presione +- +- +- Passive +- Pasivo +- +- +- %1 Invalid slot specified - %2 +- %1 Especificado una ranura inválida - %2 +- +- +- The YubiKey interface has not been initialized. +- La interfaz YubiKey no ha sido inicializada. +- +- +- Hardware key is currently in use. +- La llave por hardware está actualmente en uso. +- +- +- Could not find hardware key with serial number %1. Please plug it in to continue. +- No se puede encontrar llave por hardware con número de serie %1. Conéctelo para continuar. +- +- +- Hardware key timed out waiting for user interaction. +- La llave por hardware expiró esperando interacción del usuario. +- +- +- A USB error ocurred when accessing the hardware key: %1 +- Ha ocurrido un error USB al acceder a la llave por hardware: %1 +- +- +- Failed to complete a challenge-response, the specific error was: %1 +- Fallo al completar el reto-respuesta, el error fue: %1 +- +- +- +- YubiKeyEditWidget +- +- Refresh +- Actualizar +- +- +- YubiKey Challenge-Response +- Desafío/respuesta Yubikey +- +- +- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- <p>Si posee una <a href="https://www.yubico.com/">YubiKey</a>, puede usarla para seguridad adicional.</p><p> La YubiKey requiere que una de sus ranuras esté programada como <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">Desafío/respuesta HMAC-SHA1</a>.</p> +- +- +- Refresh hardware tokens +- Actualizar «tokens» hardware +- +- +- Hardware key slot selection +- Selección de ranura de llave por hardware +- +- +- Could not find any hardware keys! +- ¡No se puede encontrar ninguna llave por hardware! +- +- +- Selected hardware key slot does not support challenge-response! +- ¡La ranura de la llave por hardware seleccionada no soporta reto-respuesta! +- +- +- Detecting hardware keys… +- Detectando llaves por hardware... +- +- +- No hardware keys detected +- No se detectaron llaves por hardware +- +- +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_et.ts keepassxc-2.6.4-patched/share/translations/keepassx_et.ts +--- keepassxc-2.6.4-orig/share/translations/keepassx_et.ts 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/translations/keepassx_et.ts 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7889 +0,0 @@ +- +- +- AboutDialog +- +- About KeePassXC +- KeePassXC teave +- +- +- About +- Teave +- +- +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- Vigadest teatamise koht: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- +- +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- KeePassXC-d levitatakse vastavalt GNU Ãœldise Avaliku Litsentsi (GPL) versioonis 2 või (sinu valikul) versioonis 3 toodud tingimustele. +- +- +- Contributors +- Kaasautorid +- +- +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Vaata kaasautoreid GitHubis</a> +- +- +- Debug Info +- Silumisteave +- +- +- Include the following information whenever you report a bug: +- Vigadest teatamisel tuleks alati lisada järgnev teave: +- +- +- Copy to clipboard +- Kopeeri lõikepuhvrisse +- +- +- Project Maintainers: +- Projekti haldajad: +- +- +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- KeePassXC meeskonna eriline tänu kuulub debfx-ile algse KeePassX-i loomise eest. +- +- +- +- AgentSettingsWidget +- +- Use OpenSSH for Windows instead of Pageant +- Pageanti asemel Windowsi OpenSSH kasutamine +- +- +- Enable SSH Agent integration +- SSH agendi lõimingu lubamine +- +- +- SSH_AUTH_SOCK value +- SSH_AUTH_SOCK-i väärtus: +- +- +- SSH_AUTH_SOCK override +- SSH_AUTH_SOCK-i alistus: +- +- +- (empty) +- (tühi) +- +- +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- Ãœhtki SSH agendi pesa pole saadaval. Vaata, et keskkonnamuutuja "SSH_AUTH_SOCK" oleks määratud või sisesta allpool alistusväärtus. +- +- +- SSH Agent connection is working! +- SSH agendi ühendus toimib! +- +- +- +- ApplicationSettingsWidget +- +- Application Settings +- Rakenduse seaded +- +- +- General +- Ãœldine +- +- +- Security +- Turvalisus +- +- +- Access error for config file %1 +- Juurdepääsuviga seadistusfailil "%1" +- +- +- Icon only +- ainult ikoon +- +- +- Text only +- ainult tekst +- +- +- Text beside icon +- tekst ikooni kõrval +- +- +- Text under icon +- tekst ikooni all +- +- +- Follow style +- stiili järgi +- +- +- Reset Settings? +- Seadete lähtestamise kinnitus +- +- +- Are you sure you want to reset all general and security settings to default? +- Kas oled kindel, et tahad kõik üld- ja turvaseaded lähtestada? +- +- +- Monochrome (light) +- mustvalge (hele) +- +- +- Monochrome (dark) +- mustvalge (tume) +- +- +- Colorful +- värviline +- +- +- You must restart the application to set the new language. Would you like to restart now? +- Keele vahetamiseks tuleb KeePassXC uuesti käivitada. Kas teha seda kohe? +- +- +- +- ApplicationSettingsWidgetGeneral +- +- Basic Settings +- Põhiseaded +- +- +- Startup +- Käivitumine +- +- +- Start only a single instance of KeePassXC +- Avada saab ainult ühe KeePassXC protsessi +- +- +- Minimize window at application startup +- Programmi käivitamisel aken minimeeritakse +- +- +- File Management +- Failihaldus +- +- +- Backup database file before saving +- Enne salvestamist tehakse andmebaasifailist varukoopia +- +- +- Automatically save after every change +- Automaatne salvestamine iga muudatuse järel +- +- +- Automatically reload the database when modified externally +- Andmebaas laaditakse automaatselt uuesti, kui seda väljastpoolt (nt teise programmiga) muudetakse +- +- +- Entry Management +- Kirjehaldus +- +- +- Use group icon on entry creation +- Kirjete loomisel määratakse neile grupi ikoon +- +- +- Minimize instead of app exit +- Sulgemise asemel minimeeritakse +- +- +- Show a system tray icon +- Ikoon süsteemisalves +- +- +- Hide window to system tray when minimized +- Minimeerimisel peidetakse aken süsteemisalve +- +- +- Auto-Type +- Automaatsisestus +- +- +- Use entry title to match windows for global Auto-Type +- Akende vastendamine globaalse automaatsisestuse jaoks kirjete pealkirja järgi +- +- +- Use entry URL to match windows for global Auto-Type +- Akende vastendamine globaalse automaatsisestuse jaoks kirjete URL-i järgi +- +- +- Always ask before performing Auto-Type +- Enne automaatsisestuse sooritamist küsitakse alati kinnitust +- +- +- ms +- Milliseconds +- ms +- +- +- Movable toolbar +- Teisaldatav tööriistariba +- +- +- Remember previously used databases +- Mäletatakse viimati kasutatud andmebaase +- +- +- Load previously open databases on startup +- Käivitumisel laaditakse viimati avatud olnud andmebaasid +- +- +- Remember database key files and security dongles +- Mäletatakse andmebaaside võtmefaile ja riistvaravõtmeid +- +- +- Check for updates at application startup once per week +- Kord nädalas kontrollitakse programmi käivitumisel uuenduste olemasolu +- +- +- Include beta releases when checking for updates +- Sobivad ka beetaversioonid +- +- +- Language: +- Keel: +- +- +- (restart program to activate) +- (muutmine jõustub programmi järgmisel käivitamisel) +- +- +- Minimize window after unlocking database +- Andmebaasi luku avamise järel aken minimeeritakse +- +- +- Minimize when opening a URL +- URL-i avamisel aken minimeeritakse +- +- +- Hide window when copying to clipboard +- Millegi lõikepuhvrisse kopeerimise järel aken peidetakse +- +- +- Minimize +- Minimeeritakse +- +- +- Drop to background +- Viiakse tagaplaanile +- +- +- Favicon download timeout: +- Saidiikoonide allalaadimise ajalõpp: +- +- +- Website icon download timeout in seconds +- Saidiikoonide allalaadimiskatsete aegumine sekundites +- +- +- sec +- Seconds +- s +- +- +- Toolbar button style +- Tööriistariba nuppude stiil +- +- +- Language selection +- Keelevalik +- +- +- Global auto-type shortcut +- Automaatsisestuse globaalne kiirklahv +- +- +- Auto-type character typing delay milliseconds +- Viivitus millisekundites iga automaatse klahvivajutuse vahel +- +- +- Auto-type start delay milliseconds +- Viivitus millisekundites enne automaatsisestuse alustamist +- +- +- Automatically launch KeePassXC at system startup +- KeePassXC käivitatakse sisselogimisel automaatselt +- +- +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- Andmebaasifailid salvestatakse turvaliselt (probleemide korral Dropboxi vms-ga tasub välja lülitada) +- +- +- User Interface +- Kasutajaliides +- +- +- Toolbar button style: +- Tööriistariba nuppude stiil: +- +- +- Use monospaced font for notes +- Märkmete jaoks kasutatakse fikseeritud laiusega fonti +- +- +- Tray icon type: +- Süsteemisalve ikooni tüüp: +- +- +- Reset settings to default… +- Taasta vaikeseaded… +- +- +- Auto-Type typing delay: +- Viivitus enne automaatsisestust: +- +- +- Global Auto-Type shortcut: +- Automaatsisestuse globaalne kiirklahv: +- +- +- Auto-Type start delay: +- Viivitus automaatsisestuse klahvivajutuste vahel: +- +- +- Automatically save when locking database +- Automaatne salvestamine andmebaasi lukustamisel +- +- +- Automatically save non-data changes when locking database +- Andmeid mittepuudutavate muudatuste automaatne salvestamine andmebaasi lukustamisel +- +- +- Tray icon type +- Süsteemisalve ikooni tüüp: +- +- +- +- ApplicationSettingsWidgetSecurity +- +- Timeouts +- Aegumine +- +- +- Clear clipboard after +- Lõikepuhver tühjendatakse pärast +- +- +- sec +- Seconds +- s +- +- +- Lock databases after inactivity of +- Andmebaasid lukustatakse, kui neid pole kasutatud kauem kui +- +- +- min +- min +- +- +- Forget TouchID after inactivity of +- TouchID unustatakse, kui andmebaase pole kasutatud kauem kui +- +- +- Convenience +- Mugavus +- +- +- Lock databases when session is locked or lid is closed +- Andmebaasid lukustatakse seansi lukustamisel või sülearvuti kaane sulgemisel +- +- +- Forget TouchID when session is locked or lid is closed +- TouchID unustatakse seansi lukustamisel või sülearvuti kaane sulgemisel +- +- +- Lock databases after minimizing the window +- Andmebaasid lukustatakse akna minimeerimisel +- +- +- Re-lock previously locked database after performing Auto-Type +- Pärast automaatsisestuse sooritamist lukustatakse eelnevalt lukus olnud andmebaas uuesti +- +- +- Hide passwords in the entry preview panel +- Kirjete eelvaatepaneelil varjatakse paroolid täppidega +- +- +- Hide entry notes by default +- Vaikimisi peidetakse kirjete märkmed +- +- +- Privacy +- Privaatsus +- +- +- Use DuckDuckGo service to download website icons +- Saidiikoonide allalaadimiseks kasutatakse DuckDuckGo teenust +- +- +- Clipboard clear seconds +- Lõikepuhvri tühjendamise viivitus sekundites +- +- +- Touch ID inactivity reset +- TouchID unustamise viivitus +- +- +- Database lock timeout seconds +- Andmebaasi lukustamise ajalõpp sekundites +- +- +- min +- Minutes +- min +- +- +- Clear search query after +- Otsinguväli puhastatakse pärast +- +- +- Require password repeat when it is visible +- Ka nähtava paroolivälja korral nõutakse parooli kordamist +- +- +- Hide passwords when editing them +- Paroolid on muutmise ajal peidetud +- +- +- Use placeholder for empty password fields +- Ka tühjad paroolid varjatakse täppidega +- +- +- +- AutoType +- +- Couldn't find an entry that matches the window title: +- Sellisele aknatiitlile vastavat automaatsisestuse kirjet ei leitud: +- +- +- Auto-Type - KeePassXC +- Automaatsisestus - KeePassXC +- +- +- Auto-Type +- Automaatsisestus +- +- +- The Syntax of your Auto-Type statement is incorrect! +- Määratud automaatsisestuse süntaks on vigane. +- +- +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- See automaatsisestus sisaldab väga pikka viivitust. Kas oled kindel, et soovid jätkata? +- +- +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- See automaatsisestus sisaldab väga aeglasi klahvivajutusi. Kas oled kindel, et soovid jätkata? +- +- +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- See automaatsisestus sisaldab väga sageli korduvaid argumente. Kas oled kindel, et soovid jätkata? +- +- +- Permission Required +- Loataotlus +- +- +- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. +- Käsitsi valitud kirje automaatsisestuse sooritamiseks on KeePassXC-l vaja hõlbustusvahendina käitumise luba. Kui oled juba loa andnud, tuleb KeePassXC võibolla uuesti käivitada. +- +- +- +- AutoTypeAssociationsModel +- +- Window +- Aken +- +- +- Sequence +- Jada +- +- +- Default sequence +- Vaikejada +- +- +- +- AutoTypeMatchModel +- +- Group +- Grupp +- +- +- Title +- Pealkiri +- +- +- Username +- Kasutajanimi +- +- +- Sequence +- Jada +- +- +- +- AutoTypeMatchView +- +- Copy &username +- Kopeeri &kasutajanimi +- +- +- Copy &password +- Kopeeri &parool +- +- +- +- AutoTypePlatformMac +- +- Permission Required +- Loataotlus +- +- +- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. +- Globaalse automaatsisestuse sooritamiseks on KeePassXC-l vaja hõlbustusvahendina käitumise ja ekraani salvestamise luba. Kui oled juba load andnud, tuleb KeePassXC võibolla uuesti käivitada. +- +- +- +- AutoTypeSelectDialog +- +- Auto-Type - KeePassXC +- Automaatsisestus - KeePassXC +- +- +- Select entry to Auto-Type: +- Vali sooritatav automaatsisestus: +- +- +- Search... +- Otsing... +- +- +- +- BrowserAccessControlDialog +- +- KeePassXC - Browser Access Request +- Brauseri juurdepääsutaotlus – KeePassXC +- +- +- %1 is requesting access to the following entries: +- %1 küsib juurdepääsu järgmistele kirjetele: +- +- +- Remember access to checked entries +- Märkimisel jäetakse valitud kirjetele juurdepääsu lubamine meelde +- +- +- Remember +- Jäetakse meelde +- +- +- Allow access to entries +- Luba juurdepääs valitud kirjetele +- +- +- Allow Selected +- Luba valituile +- +- +- Deny All +- Keela kõik +- +- +- Disable for this site +- Keela selle saidi jaoks +- +- +- +- BrowserEntrySaveDialog +- +- KeePassXC-Browser Save Entry +- KeePassXC-Browseri kirje salvestamine +- +- +- Ok +- OK +- +- +- Cancel +- Loobu +- +- +- You have multiple databases open. +-Please select the correct database for saving credentials. +- Sul on avatud mitu andmebaasi. +-Vali, millisesse neist tunnused salvestada tuleks. +- +- +- +- BrowserService +- +- KeePassXC: New key association request +- Uus ühendumistaotlus – KeePassXC +- +- +- Save and allow access +- Salvesta ja luba juurdepääs +- +- +- KeePassXC: Overwrite existing key? +- Kirje ülekirjutamise kinnitus – KeePassXC +- +- +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- Jagatud krüptimisvõti nimega "%1" on juba olemas. +-Kas soovid selle üle kirjutada? +- +- +- KeePassXC: Update Entry +- Kirje uuendamine – KeePassXC +- +- +- Do you want to update the information in %1 - %2? +- Kas soovid uuendada teavet kirjes %1 - %2? +- +- +- Abort +- Katkesta +- +- +- Converting attributes to custom data… +- Atribuutide teisendamine kohandatud andmeteks... +- +- +- KeePassXC: Converted KeePassHTTP attributes +- Teisendatud KeePassHTTP atribuudid – KeePassXC +- +- +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- %1 kirje atribuudid edukalt teisendatud. +-Kohandatud andmetesse teisaldati %2 võtit. +- +- +- Successfully moved %n keys to custom data. +- %n võti edukalt kohandatud andmetesse teisaldatud.%n võtit edukalt kohandatud andmetesse teisaldatud. +- +- +- KeePassXC: No entry with KeePassHTTP attributes found! +- Ãœhtegi KeePassHTTP atribuutidega kirjet ei leitud – KeePassXC +- +- +- The active database does not contain an entry with KeePassHTTP attributes. +- Aktiivne andmebaas ei sisalda ühtegi kirjet, millel oleks KeePassHTTP atribuute. +- +- +- KeePassXC: Legacy browser integration settings detected +- Tuvastati brauserilõimingu pärandseadistus – KeePassXC +- +- +- KeePassXC: Create a new group +- Uue grupi loomine – KeePassXC +- +- +- A request for creating a new group "%1" has been received. +-Do you want to create this group? +- +- Saadi taotlus uue grupi "%1" loomiseks. +-Kas lubad selle grupi luua? +- +- +- Your KeePassXC-Browser settings need to be moved into the database settings. +-This is necessary to maintain your current browser connections. +-Would you like to migrate your existing settings now? +- Sinu KeePassXC-Browseri seadistus tuleb teisaldada andmebaasi seadistusse. +-See on vajalik praeguste brauseriühenduste säilitamiseks. +-Kas tahad oma olemasoleva seadistuse kohe üle kolida? +- +- +- Don't show this warning again +- Seda hoiatust rohkem ei näidata +- +- +- You have received an association request for the following database: +-%1 +- +-Give the connection a unique name or ID, for example: +-chrome-laptop. +- Saadi taotlus ühenduda järgmise andmebaasiga: +-%1 +- +-Määra palun sellele ühendusele ainukordne nimi või ID, näiteks: +-chrome-laptop. +- +- +- +- BrowserSettingsWidget +- +- Dialog +- Dialoog +- +- +- This is required for accessing your databases with KeePassXC-Browser +- See on vajalik andmebaasidele KeePassXC-Browseri abil juurdepääsemiseks. +- +- +- Enable browser integration +- Brauserilõimingu lubamine +- +- +- General +- Ãœldine +- +- +- Browsers installed as snaps are currently not supported. +- <i>Snap</i>'ina paigaldatud brausereid praegu ei toetata. +- +- +- Enable integration for these browsers: +- Lubatakse lõimimine järgmiste brauseritega: +- +- +- Vivaldi +- Vivaldi +- +- +- &Edge +- &Edge +- +- +- Firefox +- Firefox +- +- +- Tor Browser +- Tor Browser +- +- +- Brave +- Brave +- +- +- Google Chrome +- Google Chrome +- +- +- Chromium +- Chromium +- +- +- Show a notification when credentials are requested +- Credentials mean login data requested via browser extension +- Tunnuste taotlemisel kuvatakse märguanne +- +- +- Request to unlock the database if it is locked +- Kui andmebaas on lukus, küsitakse luku avamist +- +- +- Only entries with the same scheme (http://, https://, ...) are returned. +- Kui see ruut on märgitud, tagastatakse ainult kirjed, mille URL-il on sama skeem (http, https, ...) nagu aktiivsel veebilehel. +- +- +- Match URL scheme (e.g., https://...) +- Nõutakse URL-i skeemi vastavust (nt https://... vs. http://...) +- +- +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- Märkimisel tagastatakse ainult konkreetse URL-i kohta käivad vasted, mitte kõik kirjed, mille URL-i domeeniosa klapib. +- +- +- Return only best-matching credentials +- Tagastatakse vaid kõige paremini sobivad tunnused +- +- +- Returns expired credentials. String [expired] is added to the title. +- Märkimisel tagastatakse ka aegunud tunnused. Nende pealkirja ette lisatakse [aegunud]. +- +- +- Allow returning expired credentials +- Lubatakse aegunud tunnuste tagastamine +- +- +- All databases connected to the extension will return matching credentials. +- Märkimisel tagastatakse sobivad tunnused kõigist laiendusega ühendatud andmebaasidest. +- +- +- Search in all opened databases for matching credentials +- Credentials mean login data requested via browser extension +- Tunnuseid otsitakse kõigist avatud andmebaasidest +- +- +- Sort matching credentials by title +- Credentials mean login data requested via browser extension +- Sobivad tunnused sorditakse pealkirja järgi +- +- +- Sort matching credentials by username +- Credentials mean login data requested via browser extension +- Sobivad tunnused sorditakse kasutajanime järgi +- +- +- Advanced +- Lisaseaded +- +- +- Never ask before accessing credentials +- Credentials mean login data requested via browser extension +- Tunnuste kasutamisel ei küsita kinnitust +- +- +- Never ask before updating credentials +- Credentials mean login data requested via browser extension +- Tunnuste uuendamisel ei küsita kinnitust +- +- +- Do not ask permission for HTTP Basic Auth +- An extra HTTP Basic Auth setting +- HTTP lihtautentimiseks luba ei küsita +- +- +- Automatically creating or updating string fields is not supported. +- Stringiväljade automaatne loomine või uuendamine pole toetatud. +- +- +- Return advanced string fields which start with "KPH: " +- Tagastatakse ka lisastringiväljad, mille alguses on "KPH: " +- +- +- Don't display the popup suggesting migration of legacy KeePassHTTP settings. +- Märkimisel ei näidata hüpikakent, mis pakub KeePassHTTP pärandseadistuse migreerimist. +- +- +- Do not prompt for KeePassHTTP settings migration. +- Ei pakuta KeePassHTTP seadistuse ülekolimist +- +- +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- Märkimisel uuendatakse käivitusel programmiomase teatevahetuse skriptides automaatselt KeePassXC või keepassxc-proxy binaarfaili asukohta. +- +- +- Update native messaging manifest files at startup +- Käivitusel uuendatakse programmiomase teatevahetuse manifestifaile +- +- +- Use a custom proxy location if you installed a proxy manually. +- Kui paigaldasid puhverrakenduse käsitsi, saab siin määrata selle asukoha. +- +- +- Use a custom proxy location: +- Meant is the proxy for KeePassXC-Browser +- Kasutatakse kohandatud puhverrakenduse asukohta: +- +- +- Custom proxy location field +- Kohandatud puhverrakenduse asukoha väli +- +- +- Browser for custom proxy file +- Vali kohandatud puhverrakenduse fail +- +- +- Browse... +- Button for opening file dialog +- Sirvi... +- +- +- Use a custom browser configuration location: +- Kasutatakse kohandatud brauseriseadistuse asukohta: +- +- +- Browser type: +- Brauseritüüp: +- +- +- Toolbar button style +- Tööriistariba nuppude stiil +- +- +- Config Location: +- Seadete asukoht: +- +- +- Custom browser location field +- Kohandatud brauseriseadistuse asukoha väli +- +- +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- +- +- Browse for custom browser path +- Vali kohandatud brauseriseadistuse asukoht +- +- +- Custom extension ID: +- Kohandatud laienduse-ID: +- +- +- Custom extension ID +- Kohandatud laienduse-ID +- +- +- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 +- <i>Snap</i>'ide isoleerituse tõttu tuleb brauserilõimingu võimaldamiseks esmalt teatud skript käivitada.<br />Vajaliku skripti saab aadressilt %1. +- +- +- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 +- Lõimingu toimimiseks peab brauserile olema paigaldatud laiendus KeePassXC-Browser. <br />See on saadaval %1i, %2'i ja %3'i jaoks. %4 +- +- +- Please see special instructions for browser extension use below +- Vaata allpool brauserilaienduse kasutamise erijuhiseid. +- +- +- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. +- <b>Viga:</b> kohandatud puhverrakenduse asukohta ei leitud!<br/>Ilma puhverrakenduseta brauserilõiming EI TÖÖTA. +- +- +- <b>Warning:</b> The following options can be dangerous! +- <b>Hoiatus:</b> nende seadete muutmine võib olla ohtlik! +- +- +- Executable Files +- Rakendusfailid +- +- +- All Files +- Kõik failid +- +- +- Select custom proxy location +- Kohandatud puhverrakenduse valimine +- +- +- Select native messaging host folder location +- Programmiomase teatevahetuse hosti kausta valimine +- +- +- +- CloneDialog +- +- Clone Options +- Kloonimisseaded +- +- +- Append ' - Clone' to title +- Pealkirja lõppu lisatakse " - koopia" +- +- +- Replace username and password with references +- Kasutajanimi ja parool asendatakse viidetega +- +- +- Copy history +- Kopeeritakse ajalugu +- +- +- +- CsvImportWidget +- +- Import CSV fields +- CSV väljade importimine +- +- +- filename +- failinimi +- +- +- size, rows, columns +- maht, ridade arv, veergude arv +- +- +- Encoding +- Kodeerimine +- +- +- Codec +- Kodeering: +- +- +- Text is qualified by +- Teksti eraldaja: +- +- +- Fields are separated by +- Väljade eraldaja: +- +- +- Comments start with +- Kommentaaride tähis: +- +- +- Consider '\' an escape character +- Längkriipsu "\" tuleb käsitleda paomärgina +- +- +- Preview +- Eelvaade +- +- +- Imported from CSV file +- Imporditud CSV-failist +- +- +- Original data: +- Algsed andmed: +- +- +- Error +- Viga +- +- +- Error(s) detected in CSV file! +- CSV-failis leiti vigu: +- +- +- [%n more message(s) skipped] +- [ja veel %n teade, mis jäeti vahele][ja veel %n teadet, mis jäeti vahele] +- +- +- CSV import: writer has errors: +-%1 +- CSV importimine: kirjutamisel ilmnes vigu: +-%1 +- +- +- Text qualification +- Teksti eraldaja +- +- +- Field separation +- Väljade eraldaja +- +- +- Number of header lines to discard +- Eiratavate päiseridade arv: +- +- +- CSV import preview +- CSV importimise eelvaade +- +- +- Column Association +- Veergude vastendamine +- +- +- Last Modified +- Muutmisaeg: +- +- +- Password +- Parool: +- +- +- Created +- Loomisaeg: +- +- +- Notes +- Märkmed: +- +- +- Title +- Pealkiri: +- +- +- Group +- Grupp: +- +- +- URL +- URL: +- +- +- Username +- Kasutajanimi: +- +- +- Header lines skipped +- Eiratavate päiseridade arv: +- +- +- First line has field names +- Esimesel real on väljade nimed +- +- +- Not Present +- puudub +- +- +- Column %1 +- %1. veerg +- +- +- TOTP +- &TOTP +- +- +- Icon +- Ikoon +- +- +- +- CsvParserModel +- +- %n column(s) +- %n veerg%n veergu +- +- +- %1, %2, %3 +- file info: bytes, rows, columns +- %1, %2, %3 +- +- +- %n byte(s) +- %n bait%n baiti +- +- +- %n row(s) +- %n rida%n rida +- +- +- +- Database +- +- File %1 does not exist. +- Faili "%1" pole olemas. +- +- +- Unable to open file %1. +- Faili "%1" avamine pole võimalik. +- +- +- Error while reading the database: %1 +- Andmebaasi lugemisel tekkis tõrge: %1 +- +- +- File cannot be written as it is opened in read-only mode. +- Faili kirjutamine pole võimalik, kuna see on avatud kirjutuskaitstud režiimis. +- +- +- Key not transformed. This is a bug, please report it to the developers! +- Võti jäi teisendamata. See on programmiviga – palun anna sellest arendajatele teada! +- +- +- %1 +-Backup database located at %2 +- %1 +-Varuandmebaasi asukoht: %2 +- +- +- Could not save, database does not point to a valid file. +- Salvestamine pole võimalik, andmebaas ei osuta sobivale failile. +- +- +- Could not save, database file is read-only. +- Salvestamine pole võimalik, andmebaasifail on kirjutuskaitstud. +- +- +- Database file has unmerged changes. +- Andmebaasifailis on mestimata muudatusi. +- +- +- Recycle Bin +- Prügikast +- +- +- Passwords +- Root group name +- Paroolid +- +- +- Database save is already in progress. +- Andmebaasi salvestamine juba käib. +- +- +- Could not save, database has not been initialized! +- Salvestamine pole võimalik, andmebaas on initsialiseerimata! +- +- +- +- DatabaseOpenDialog +- +- Unlock Database - KeePassXC +- Andmebaasi luku avamine - KeePassXC +- +- +- +- DatabaseOpenWidget +- +- Key File: +- Võtmefail: +- +- +- Refresh +- Värskenda +- +- +- Don't show this warning again +- Seda hoiatust rohkem ei näidata +- +- +- All files +- Kõik failid +- +- +- Key files +- Võtmefailid +- +- +- Select key file +- Võtmefaili valimine +- +- +- Failed to open key file: %1 +- Võtmefaili avamine ebaõnnestus: %1 +- +- +- Unlock KeePassXC Database +- KeePassXC andmebaasi luku avamine +- +- +- Enter Password: +- Parool: +- +- +- Password field +- Parooli väli +- +- +- Hardware key slot selection +- Riistvaralise võtme pesa valimine +- +- +- Browse for key file +- Vali võtmefail +- +- +- Browse... +- Sirvi... +- +- +- Refresh hardware tokens +- Värskenda riistvaraliste võtmete loendit +- +- +- Hardware Key: +- Riistvaraline võti: +- +- +- Hardware key help +- Riistvaralise võtme abi +- +- +- TouchID for Quick Unlock +- TouchID kasutamine kiiresti luku avamiseks +- +- +- Unlock failed and no password given +- Luku avamine ilma paroolita ebaõnnestus +- +- +- Unlocking the database failed and you did not enter a password. +-Do you want to retry with an "empty" password instead? +- +-To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. +- Andmebaasi luku avamine ebaõnnestus ja parooli ei sisestatud. +-Kas soovid "tühja" parooliga uuesti proovida? +- +-Selle veateate ilmumise vältimiseks peaksid avama andmebaasi seadetes turvalisuse jaotise ja parooli uuesti määrama. +- +- +- Retry with empty password +- Proovi uuesti tühja parooliga +- +- +- Enter Additional Credentials (if any): +- Lisatunnused (kui vaja): +- +- +- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +-<p>Click for more information...</p> +- <p>Kasutada saab riistvaralist võtit nagu <strong>YubiKey</strong> või <strong>OnlyKey</strong>, millel on HMAC-SHA1 jaoks seadistatud pesa.</p> +-<p>Lisateabe saamiseks klõpsa.</p> +- +- +- Key file help +- Abi võtmefailide kohta +- +- +- ? +- ? +- +- +- Cannot use database file as key file +- Andmebaasifail ei sobi võtmefailiks +- +- +- You cannot use your database file as a key file. +-If you do not have a key file, please leave the field empty. +- Andmebaasifaili ennast ei saa võtmefailina kasutada. +-Kui andmebaasi avamiseks pole võtmefaili vaja, jäta see väli tühjaks. +- +- +- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> +- <p>Lisaks paroolile saab andmebaasi turvalisuse suurendamiseks kasutada võtmefaili. Selle saab genereerida andmebaasi turvaseadetes.</p><p>See <strong>ei ole</strong> sinu *.kdbx andmebaasifail!<br>Kui andmebaasi avamiseks pole võtmefaili vaja, jäta see väli tühjaks.</p><p>Lisateabe saamiseks klõpsa.</p> +- +- +- Key file to unlock the database +- Võtmefail andmebaasi luku avamiseks +- +- +- Please touch the button on your YubiKey! +- Puuduta YubiKey nuppu! +- +- +- Detecting hardware keys… +- riistvaraliste võtmete tuvastamine… +- +- +- No hardware keys detected +- riistvaralisi võtmeid ei tuvastatud +- +- +- Select hardware key… +- vali riistvaraline võti… +- +- +- Old key file format +- +- +- +- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> +- +- +- +- +- DatabaseSettingWidgetMetaData +- +- Passwords +- Paroolid +- +- +- +- DatabaseSettingsDialog +- +- Advanced Settings +- Täpsemad seaded +- +- +- General +- Ãœldine +- +- +- Security +- Turvalisus +- +- +- Encryption Settings +- Krüptimisseaded +- +- +- Browser Integration +- Brauserilõiming +- +- +- Database Credentials +- Andmebaasi tunnused +- +- +- +- DatabaseSettingsWidgetBrowser +- +- KeePassXC-Browser settings +- KeePassXC-Browseri seaded +- +- +- Stored keys +- Salvestatud võtmed +- +- +- Remove +- Eemalda +- +- +- Delete the selected key? +- Valitud võtme kustutamise kinnitus +- +- +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- Kas oled kindel, et soovid valitud võtme kustutada? +-See võib tõkestada ühendumise brauseripluginaga. +- +- +- Key +- Võti +- +- +- Value +- Väärtus +- +- +- Enable Browser Integration to access these settings. +- Nende seadete määramiseks luba programmi seadetes brauserilõiming. +- +- +- Disconnect all browsers +- Kõigi brauseritega ühenduse katkestamise kinnitus +- +- +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- Kas oled kindel, et soovid katkestada ühenduse kõigi brauseritega? +-See võib tõkestada ühendumise brauseripluginaga. +- +- +- KeePassXC: No keys found +- Võtmeid ei leitud – KeePassXC +- +- +- No shared encryption keys found in KeePassXC settings. +- KeePassXC seadetest ei leitud ühtki jagatud krüptimisvõtit. +- +- +- KeePassXC: Removed keys from database +- Võtmed andmebaasist eemaldatud – KeePassXC +- +- +- Successfully removed %n encryption key(s) from KeePassXC settings. +- %n krüptimisvõti edukalt KeePassXC seadetest eemaldatud.%n krüptimisvõtit edukalt KeePassXC seadetest eemaldatud. +- +- +- Forget all site-specific settings on entries +- Kirjete kõigi saidiomaste seadete kustutamine +- +- +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- Kas oled kindel, et tahad kõigi kirjete kõik saidiomased seaded eemaldada? +-See tühistab ka juurdepääsuload kirjetele. +- +- +- Removing stored permissions… +- Salvestatud juurdepääsulubade eemaldamine... +- +- +- Abort +- Katkesta +- +- +- KeePassXC: Removed permissions +- Juurdepääsuload eemaldatud – KeePassXC +- +- +- Successfully removed permissions from %n entry(s). +- %n kirje juurdepääsuload edukalt eemaldatud.%n kirje juurdepääsuload edukalt eemaldatud. +- +- +- KeePassXC: No entry with permissions found! +- Juurdepääsulubadega kirjeid ei leitud – KeePassXC +- +- +- The active database does not contain an entry with permissions. +- Aktiivne andmebaas ei sisalda ühtki juurdepääsulubadega kirjet. +- +- +- Move KeePassHTTP attributes to custom data +- KeePassHTTP atribuutide kohandatud andmetesse teisaldamine +- +- +- Do you really want to move all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- Kas oled kindel, et tahad kõik brauserilõimingu pärandandmed uusimale standardile üle viia? +-Need võivad olla vajalikud brauseripluginaga ühilduvuse säilitamiseks. +- +- +- Stored browser keys +- Salvestatud brauserivõtmed +- +- +- Remove selected key +- Eemalda valitud võti +- +- +- Move KeePassHTTP attributes to KeePassXC-Browser custom data +- Teisalda KeePassHTTP atribuudid KeePassXC-Browseri kohandatud andmetesse +- +- +- Refresh database root group ID +- Värskenda andmebaasi juurgrupi ID-d +- +- +- Created +- Loodud +- +- +- Refresh database ID +- Andmebaasi ID värskendamine +- +- +- Do you really want refresh the database ID? +-This is only necessary if your database is a copy of another and the browser extension cannot connect. +- Kas oled kindel, et tahad andmebaasi ID-d värskendada? +-See on vajalik vaid juhul, kui sinu andmebaas on teise andmebaasi koopia ning brauserilaiendus ei saa sellega ühendust. +- +- +- +- DatabaseSettingsWidgetDatabaseKey +- +- Add additional protection... +- Lisa täiendav kaitse... +- +- +- No password set +- Parooli pole määratud +- +- +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- HOIATUS! Sa ei määranud parooli. Andmebaasi kasutamine ilma paroolita on äärmiselt ebasoovitatav! +- +-Kas oled kindel, et soovid jätkata ilma paroolita? +- +- +- Continue without password +- Jätka ilma paroolita +- +- +- No encryption key added +- Ãœhtki krüptimisvõtit pole lisatud +- +- +- You must add at least one encryption key to secure your database! +- Andmebaasi kaitsmiseks tuleb lisada vähemalt üks krüptimisvõti. +- +- +- Unknown error +- Tundmatu viga +- +- +- Failed to change database credentials +- Andmebaasi tunnuste vahetamine ebaõnnestus. +- +- +- +- DatabaseSettingsWidgetEncryption +- +- Encryption Algorithm: +- Krüptimisalgoritm: +- +- +- AES: 256 Bit (default) +- AES: 256-bitine (vaikimisi) +- +- +- Twofish: 256 Bit +- Twofish: 256-bitine +- +- +- Key Derivation Function: +- Võtmetuletusfunktsioon: +- +- +- Transform rounds: +- Teisendusraundide arv: +- +- +- Memory Usage: +- Mälukasutus: +- +- +- Parallelism: +- Rööpsus: +- +- +- Decryption Time: +- Lahtikrüptimise aeg: +- +- +- ?? s +- ?? s +- +- +- Change +- Muuda +- +- +- Higher values offer more protection, but opening the database will take longer. +- Mida suurem väärtus, seda kaitstum on andmebaas, kuid seda kauem võtab ka selle avamine. +- +- +- Database format: +- Andmebaasi vorming: +- +- +- This is only important if you need to use your database with other programs. +- See on oluline vaid juhul, kui andmebaasi on vaja kasutada ka teiste programmidega. +- +- +- KDBX 4.0 (recommended) +- KDBX 4.0 (soovituslik) +- +- +- KDBX 3.1 +- KDBX 3.1 +- +- +- unchanged +- Database decryption time is unchanged +- muutmata +- +- +- Number of rounds too high +- Key transformation rounds +- Liiga suur raundide arv +- +- +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or days (or even longer) to open! +- Määrasid väga suure Argon2 võtmeteisendusraundide arvu. +- +-Kui jätad selle väiksemaks muutmata, võib andmebaasi avamine võtta tunde või päevi – või veelgi kauem! +- +- +- Understood, keep number +- Jäta ikkagi muutmata +- +- +- Cancel +- Loobu +- +- +- Number of rounds too low +- Key transformation rounds +- Liiga väike raundide arv +- +- +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database may be too easy to crack! +- Määrasid väga väikse AES-KDF-i võtmeteisendusraundide arvu. +- +-Kui jätad selle suuremaks muutmata, võib andmebaasi olla lihtne lahti murda! +- +- +- KDF unchanged +- KDF jäeti muutmata +- +- +- Failed to transform key with new KDF parameters; KDF unchanged. +- Võtme teisendamine uute KDF-parameetrite abil ebaõnnestus, nii et KDF jäeti muutmata. +- +- +- MiB +- Abbreviation for Mebibytes (KDF settings) +- MiB MiB +- +- +- thread(s) +- Threads for parallel execution (KDF settings) +- lõim lõime +- +- +- Change existing decryption time +- Muuda juba määratud lahtikrüptimise aega +- +- +- Decryption time in seconds +- Lahtikrüptimise aeg sekundites +- +- +- Database format +- Andmebaasi vorming +- +- +- Encryption algorithm +- Krüptimisalgoritm +- +- +- Key derivation function +- Võtmetuletusfunktsioon +- +- +- Transform rounds +- Teisendusraundide arv +- +- +- Memory usage +- Mälukasutus +- +- +- Parallelism +- Rööpsus +- +- +- ?? ms +- ?? ms +- +- +- ? s +- ? s +- +- +- +- DatabaseSettingsWidgetFdoSecrets +- +- Exposed Entries +- Nähtavad kirjed +- +- +- Don't expose this database +- Seda andmebaasi ei tehta nähtavaks +- +- +- Expose entries under this group: +- Nähtavaks tehakse määratud grupi all olevad kirjed: +- +- +- Enable Secret Service to access these settings. +- Nende seadete määramiseks luba programmi seadetes saladuste teenuse lõiming. +- +- +- +- DatabaseSettingsWidgetGeneral +- +- Database Meta Data +- Andmebaasi metaandmed +- +- +- Database name: +- Andmebaasi nimi: +- +- +- Database description: +- Andmebaasi kirjeldus: +- +- +- Default username: +- Vaikimisi kasutajanimi: +- +- +- History Settings +- Ajalooseaded +- +- +- Max. history items: +- Ajalooelementide maksimumarv kirje kohta: +- +- +- Max. history size: +- Ajaloo maksimummaht kirje kohta: +- +- +- MiB +- MiB +- +- +- Use recycle bin +- Kasutatakse prügikasti +- +- +- Additional Database Settings +- Andmebaasi lisaseaded +- +- +- Database name field +- Andmebaasi nime väli +- +- +- Database description field +- Andmebaasi kirjelduse väli +- +- +- Default username field +- Vaikimisi kasutajanime väli +- +- +- Maximum number of history items per entry +- Ajalooelementide maksimaalne arv kirje kohta +- +- +- Maximum size of history per entry +- Ajaloo maksimaalne maht kirje kohta +- +- +- Delete Recycle Bin +- Prügikasti kustutamise kinnitus +- +- +- Do you want to delete the current recycle bin and all its contents? +-This action is not reversible. +- Kas oled kindel, et soovid kustutada praeguse prügikasti ja kogu selle sisu? +-Seda toimingut ei saa tagasi võtta. +- +- +- (old) +- (vana) +- +- +- Enable compression (recommended) +- Andmebaasi tihendamine (soovituslik) +- +- +- +- DatabaseSettingsWidgetKeeShare +- +- Sharing +- Jagamine +- +- +- Breadcrumb +- Jälglink +- +- +- Type +- Tüüp +- +- +- Path +- Asukoht +- +- +- Last Signer +- Viimane allkirjastaja +- +- +- Certificates +- Sertifikaadid +- +- +- > +- Breadcrumb separator +- > +- +- +- +- DatabaseSettingsWidgetMetaDataSimple +- +- Database Name: +- Andmebaasi nimi: +- +- +- Description: +- Kirjeldus: +- +- +- Database name field +- Andmebaasi nime väli +- +- +- Database description field +- Andmebaasi kirjelduse väli +- +- +- +- DatabaseTabWidget +- +- KeePass 2 Database +- KeePass 2 andmebaas +- +- +- All files +- Kõik failid +- +- +- Open database +- Andmebaasi avamine +- +- +- CSV file +- CSV-fail +- +- +- Merge database +- Andmebaasi mestimine +- +- +- Open KeePass 1 database +- KeePass 1 andmebaasi avamine +- +- +- KeePass 1 database +- KeePass 1 andmebaas +- +- +- Export database to CSV file +- Andmebaasi eksportimine CSV-failiks +- +- +- Writing the CSV file failed. +- CSV-faili kirjutamine ebaõnnestus. +- +- +- Database creation error +- Viga andmebaasi loomisel +- +- +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- Loodud andmebaasil pole ei võtit ega KDF-i, nii et selle salvestamisest keelduti. +-See on kahtlemata programmiviga – palun anna sellest arendajatele teada! +- +- +- Select CSV file +- CSV-faili valimine +- +- +- New Database +- Uus andmebaas +- +- +- %1 [New Database] +- Database tab name modifier +- %1 [uus andmebaas] +- +- +- %1 [Locked] +- Database tab name modifier +- %1 [lukus] +- +- +- %1 [Read-only] +- Database tab name modifier +- %1 [kirjutuskaitstud] +- +- +- Failed to open %1. It either does not exist or is not accessible. +- Andmebaasi "%1" avamine ebaõnnestus. Faili pole kas enam olemas või puudub sellele juurdepääsuõigus. +- +- +- Export database to HTML file +- Andmebaasi eksportimine HTML-failiks +- +- +- HTML file +- HTML-fail +- +- +- Writing the HTML file failed. +- HTML-faili kirjutamine ebaõnnestus. +- +- +- Export Confirmation +- Eksportimise kinnitus +- +- +- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? +- Asusid andmebaasi eksportima krüptimata failivormingusse. See jätab su paroolid jm tundliku teabe kaitseta! Kas oled kindel, et soovid jätkata? +- +- +- Open OPVault +- OPVaulti avamine +- +- +- +- DatabaseWidget +- +- Searching... +- Otsimine... +- +- +- Do you really want to delete the entry "%1" for good? +- Kas oled kindel, et tahad kirje "%1" jäädavalt kustutada? +- +- +- Do you really want to move entry "%1" to the recycle bin? +- Kas oled kindel, et tahad kirje "%1" prügikasti visata? +- +- +- Do you really want to move %n entry(s) to the recycle bin? +- Kas oled kindel, et tahad selle %n kirje prügikasti visata?Kas oled kindel, et tahad need %n kirjet prügikasti visata? +- +- +- Execute command? +- Käsu käivitamise kinnitus +- +- +- Do you really want to execute the following command?<br><br>%1<br> +- Kas oled kindel, et tahad käivitada järgmise käsu?<br><br>%1<br> +- +- +- Remember my choice +- Valik jäetakse meelde +- +- +- Do you really want to delete the group "%1" for good? +- Kas oled kindel, et tahad grupi "%1" jäädavalt kustutada? +- +- +- No current database. +- Aktiivne andmebaas puudub. +- +- +- No source database, nothing to do. +- Lähteandmebaas puudub, midagi pole teha. +- +- +- Search Results (%1) +- Otsingutulemused (%1) +- +- +- No Results +- Tulemusi pole +- +- +- File has changed +- Faili on muudetud +- +- +- The database file has changed. Do you want to load the changes? +- Andmebaasifaili on muudetud. Kas tahad selle uuesti avada? +- +- +- Merge Request +- Mestimistaotlus +- +- +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- Andmebaasifaili on muudetud, aga sinul on salvestamata muudatusi. +-Kas tahad oma muudatused mestida? +- +- +- Empty recycle bin? +- Prügikasti tühjendamise kinnitus +- +- +- Are you sure you want to permanently delete everything from your recycle bin? +- Kas oled kindel, et soovid kogu prügikasti sisu jäädavalt kustutada? +- +- +- Do you really want to delete %n entry(s) for good? +- Kas oled kindel, et tahad selle %n kirje jäädavalt kustutada?Kas oled kindel, et tahad need %n kirjet jäädavalt kustutada? +- +- +- Delete entry(s)? +- Kirje kustutamise kinnitusKirjete kustutamise kinnitus +- +- +- Move entry(s) to recycle bin? +- Kirje prügikasti viskamise kinnitusKirjete prügikasti viskamise kinnitus +- +- +- Lock Database? +- Andmebaasi lukustamise kinnitus +- +- +- You are editing an entry. Discard changes and lock anyway? +- Kirje muutmine on pooleli. Kas unustada muudatused ja andmebaas ikkagi lukustada? +- +- +- "%1" was modified. +-Save changes? +- Andmebaasi "%1" on muudetud. +-Kas salvestada muudatused? +- +- +- Database was modified. +-Save changes? +- Andmebaasi on muudetud. +-Kas salvestada muudatused? +- +- +- Save changes? +- Muudatuste salvestamine +- +- +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- Automaatse taaslaadimise käigus polnud uut andmebaasifaili võimalik avada. +-Veateade: %1 +- +- +- Disable safe saves? +- Turvalise salvestamise keelamine +- +- +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- KeePassXC-l on ebaõnnestunud mitu katset andmebaasi salvestada. Tõenäoliselt põhjustab seda mõni failisünkimisteenus, mis salvestatavat faili lukus hoiab. +-Kas keelata turvaline salvestamine ja proovida seejärel uuesti? +- +- +- Passwords +- Paroolid +- +- +- Save database as +- Andmebaasi salvestamine +- +- +- KeePass 2 Database +- KeePass 2 andmebaas +- +- +- Replace references to entry? +- Kirje viidete asendamise kinnitus +- +- +- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? +- Kirjele "%1" leidub %2 viide. Kas kirjutada viide vastava väärtusega üle, jätta see kirje vahele või see ikkagi kustutada?Kirjele "%1" leidub %2 viidet. Kas kirjutada viited vastavate väärtustega üle, jätta see kirje vahele või see ikkagi kustutada? +- +- +- Delete group +- Grupi kustutamise kinnitus +- +- +- Move group to recycle bin? +- Grupi prügikasti viskamise kinnitus +- +- +- Do you really want to move the group "%1" to the recycle bin? +- Kas oled kindel, et tahad grupi "%1" prügikasti visata? +- +- +- Successfully merged the database files. +- Andmebaasifailid edukalt mestitud. +- +- +- Database was not modified by merge operation. +- Mestimise käigus andmebaasi ei muudetud. +- +- +- Shared group... +- Jagatud grupp… +- +- +- Writing the database failed: %1 +- Andmebaasi kirjutamine ebaõnnestus: %1 +- +- +- This database is opened in read-only mode. Autosave is disabled. +- Andmebaas on avatud kirjutuskaitstud režiimis. Automaatne salvestamine on välja lülitatud. +- +- +- Save database backup +- Andmebaasi varukoopia salvestamine +- +- +- Could not find database file: %1 +- Andmebaasifaili ei leitud: %1 +- +- +- +- EditEntryWidget +- +- Entry +- Kirje +- +- +- Advanced +- Lisaseaded +- +- +- Icon +- Ikoon +- +- +- Auto-Type +- Automaatsisestus +- +- +- Properties +- Omadused +- +- +- History +- Ajalugu +- +- +- SSH Agent +- SSH agent +- +- +- n/a +- – +- +- +- (encrypted) +- (krüptitud) +- +- +- Select private key +- Privaatvõtme valimine +- +- +- Entry history +- Kirje ajalugu +- +- +- Add entry +- Kirje lisamine +- +- +- Edit entry +- Kirje muutmine +- +- +- New attribute +- Uus atribuut +- +- +- Are you sure you want to remove this attribute? +- Kas oled kindel, et soovid selle atribuudi eemaldada? +- +- +- Tomorrow +- Homme +- +- +- %n week(s) +- %n nädala pärast%n nädala pärast +- +- +- %n month(s) +- %n kuu pärast%n kuu pärast +- +- +- Entry updated successfully. +- Kirje kenasti uuendatud. +- +- +- New attribute %1 +- Uus atribuut %1 +- +- +- %n year(s) +- %n aasta pärast%n aasta pärast +- +- +- Confirm Removal +- Eemaldamise kinnitus +- +- +- Browser Integration +- Brauserilõiming +- +- +- <empty URL> +- <tühi URL> +- +- +- Are you sure you want to remove this URL? +- Kas oled kindel, et soovid selle URL-i eemaldada? +- +- +- Reveal +- Paljasta +- +- +- Hide +- Peida +- +- +- Unsaved Changes +- Salvestamata muudatused +- +- +- Would you like to save changes to this entry? +- Kas salvestada selles kirjes tehtud muudatused? +- +- +- [PROTECTED] Press Reveal to view or edit +- [KAITSTUD] Vaatamiseks või muutmiseks klõpsa "Paljasta" +- +- +- Invalid Entry +- +- +- +- An external merge operation has invalidated this entry. +-Unfortunately, any changes made have been lost. +- +- +- +- +- EditEntryWidgetAdvanced +- +- Additional attributes +- Lisaatribuudid +- +- +- Add +- Lisa +- +- +- Remove +- Eemalda +- +- +- Edit Name +- Muuda nime +- +- +- Protect +- Kaitstud +- +- +- Reveal +- Paljasta +- +- +- Attachments +- Kaasatud failid +- +- +- Foreground Color: +- Esiplaani värv: +- +- +- Background Color: +- Taustavärv: +- +- +- Attribute selection +- Atribuudi valik +- +- +- Attribute value +- Atribuudi väärtus +- +- +- Add a new attribute +- Lisa uus atribuut +- +- +- Remove selected attribute +- Eemalda valitud atribuut +- +- +- Edit attribute name +- Muuda valitud atribuudi nime +- +- +- Toggle attribute protection +- Lülita atribuudi kaitset +- +- +- Show a protected attribute +- Näita kaitstud atribuuti +- +- +- Foreground color selection +- Vali esiplaani värv +- +- +- Background color selection +- Vali taustavärv +- +- +- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> +- <html><head/><body><p>Märkimisel ei kaasata seda kirjet andmebaasi tervisekontrolli ega HIBP aruannetesse, isegi kui see ei vasta kvaliteedinõuetele (nt parooli vähese entroopia või korduva kasutamise tõttu). Märgi see ruut, kui parooli keerukus ei allu sinu kontrollile (nt kui see peab olema neljakohaline PIN) ja soovid, et see ei risustaks andmebaasi aruandeid.</p></body></html> +- +- +- Exclude from database reports +- Kirje jäetakse andmebaasi aruannetest välja +- +- +- +- EditEntryWidgetAutoType +- +- Enable Auto-Type for this entry +- Automaatsisestuse lubamine selle kirje puhul +- +- +- Window Associations +- Aknaseosed +- +- +- + +- Lisa +- +- +- - +- Eemalda +- +- +- Window title: +- Akna tiitel: +- +- +- Use a specific sequence for this association: +- Selle seose jaoks kasutatakse eraldi jada: +- +- +- Custom Auto-Type sequence +- Omamääratud automaatsisestuse jada +- +- +- Open Auto-Type help webpage +- Ava automaatsisestuse abimaterjal veebis +- +- +- Existing window associations +- Juba määratud aknaseosed +- +- +- Add new window association +- Lisa uus aknaseos +- +- +- Remove selected window association +- Eemalda valitud aknaseos +- +- +- You can use an asterisk (*) to match everything +- Suvalise märgijada vastavuse määramiseks saab kasutada tärni (*) +- +- +- Set the window association title +- Määra seostatava akna tiitel +- +- +- You can use an asterisk to match everything +- Suvalise märgijada vastavuse määramiseks saab kasutada tärni +- +- +- Custom Auto-Type sequence for this window +- Omamääratud automaatsisestuse jada selle akna jaoks +- +- +- Inherit default Auto-Type sequence from the group +- Grupilt päritud automaatsisestuse jada +- +- +- Use custom Auto-Type sequence: +- Omamääratud automaatsisestuse jada: +- +- +- +- EditEntryWidgetBrowser +- +- These settings affect to the entry's behaviour with the browser extension. +- Need seaded mõjutavad kirje käitumist brauserilaiendusega. +- +- +- General +- Ãœldine +- +- +- Skip Auto-Submit for this entry +- Automaatsaatmine jäetakse selle kirje puhul vahele +- +- +- Hide this entry from the browser extension +- See kirje peidetakse brauserilaienduse eest +- +- +- Additional URL's +- Lisa-URL-id +- +- +- Add +- Lisa +- +- +- Remove +- Eemalda +- +- +- Edit +- Muuda +- +- +- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. +- Märkimisel saadetakse see kirje brauserile ainult HTTP autentimisdialoogide puhul ning tavaliste sisselogimisvormide korral seda kirjet valida ei saa. +- +- +- Use this entry only with HTTP Basic Auth +- Seda kirjet kasutatakse vaid HTTP lihtautentimisel +- +- +- +- EditEntryWidgetHistory +- +- Show +- Näita +- +- +- Restore +- Taasta +- +- +- Delete +- Kustuta +- +- +- Delete all +- Kustuta kõik +- +- +- Entry history selection +- Kirje ajaloolise seisu valimine +- +- +- Show entry at selected history state +- Näita valitud ajaloolist seisu +- +- +- Restore entry to selected history state +- Taasta valitud ajalooline seis +- +- +- Delete selected history state +- Kustuta valitud ajalooline seis +- +- +- Delete all history +- Kustuta kogu selle kirje ajalugu +- +- +- +- EditEntryWidgetMain +- +- URL: +- URL: +- +- +- Password: +- Parool: +- +- +- Title: +- Pealkiri: +- +- +- Presets +- Valmisseaded +- +- +- Toggle the checkbox to reveal the notes section. +- Märkmete nägemiseks või muutmiseks märgi kõrvalolev ruut. +- +- +- Username: +- Kasutajanimi: +- +- +- Url field +- URL-i väli +- +- +- Download favicon for URL +- Laadi alla saidiikoon selle URL-i jaoks +- +- +- Password field +- Parooli väli +- +- +- Toggle notes visible +- Lülita märkmete nähtavust +- +- +- Expiration field +- Aegumise väli +- +- +- Expiration Presets +- Vaikimisi aegumisvalikud +- +- +- Expiration presets +- Vaikimisi aegumisvalikud +- +- +- Notes field +- Märkmete väli +- +- +- Title field +- Pealkirja väli +- +- +- Username field +- Kasutajanime väli +- +- +- Toggle expiration +- Lülita aegumist +- +- +- Notes: +- Märkmed: +- +- +- https://example.com +- https://näide.ee +- +- +- Expires: +- Aegub: +- +- +- Edit Entry +- +- +- +- +- EditEntryWidgetSSHAgent +- +- Form +- Vorm +- +- +- Remove key from agent after +- Võti eemaldatakse agendilt pärast +- +- +- seconds +- sekundit +- +- +- Fingerprint +- Sõrmejälg: +- +- +- Remove key from agent when database is closed/locked +- Võti eemaldatakse agendilt andmebaasi sulgemisel/lukustamisel +- +- +- Public key +- Avalik võti: +- +- +- Add key to agent when database is opened/unlocked +- Võti lisatakse agendile andmebaasi avamisel / lukust lahti tegemisel +- +- +- Comment +- Märkus: +- +- +- Decrypt +- Krüpti lahti +- +- +- n/a +- – +- +- +- Copy to clipboard +- Kopeeri lõikepuhvrisse +- +- +- Private key +- Privaatvõti +- +- +- External file +- Väline fail: +- +- +- Browse... +- Button for opening file dialog +- Sirvi... +- +- +- Attachment +- Kaasatud fail: +- +- +- Add to agent +- Lisa agendile +- +- +- Remove from agent +- Eemalda agendilt +- +- +- Require user confirmation when this key is used +- Võtme kasutamisel küsitakse kasutajalt kinnitust +- +- +- Remove key from agent after specified seconds +- Võtme agendilt eemaldamise viivitus sekundites +- +- +- Browser for key file +- Vali võtmefail +- +- +- External key file +- Väline võtmefail +- +- +- Select attachment file +- Kaasatud faili valimine +- +- +- +- EditGroupWidget +- +- Group +- Grupp +- +- +- Icon +- Ikoon +- +- +- Properties +- Omadused +- +- +- Add group +- Grupi lisamine +- +- +- Edit group +- Grupi muutmine +- +- +- Enable +- lubatud +- +- +- Disable +- keelatud +- +- +- Inherit from parent group (%1) +- ülemgrupi järgi (%1) +- +- +- Entry has unsaved changes +- Kas salvestada kirjesse tehtud muudatused? +- +- +- +- EditGroupWidgetKeeShare +- +- Type: +- Tüüp: +- +- +- Path: +- Asukoht: +- +- +- Password: +- Parool: +- +- +- Inactive +- mitteaktiivne +- +- +- KeeShare unsigned container +- KeeShare'i allkirjastamata ümbrik +- +- +- KeeShare signed container +- KeeShare'i allkirjastatud ümbrik +- +- +- Select import source +- Imporditava lähtefaili valimine +- +- +- Select export target +- Eksporditava sihtfaili valimine +- +- +- Select import/export file +- Imporditava/eksporditava faili valimine +- +- +- Clear +- Puhasta +- +- +- Import +- importimine +- +- +- Export +- eksportimine +- +- +- Synchronize +- sünkroonimine +- +- +- Your KeePassXC version does not support sharing this container type. +-Supported extensions are: %1. +- See KeePassXC versioon ei toeta valitud ümbrikutüübi jagamist. +-Toetatud faililaiendid: %1 +- +- +- %1 is already being exported by this database. +- +- +- +- %1 is already being imported by this database. +- +- +- +- %1 is being imported and exported by different groups in this database. +- +- +- +- KeeShare is currently disabled. You can enable import/export in the application settings. +- KeeShare is a proper noun +- KeeShare on hetkel keelatud. Rakenduse seadetes saab importimise/eksportimise lubada. +- +- +- Database export is currently disabled by application settings. +- Andmebaasi eksportimine on rakenduse seadetes keelatud. +- +- +- Database import is currently disabled by application settings. +- Andmebaasi importimine on rakenduse seadetes keelatud. +- +- +- Sharing mode field +- Jagamisrežiimi väli +- +- +- Path to share file field +- Jagatava faili asukoha väli +- +- +- Password field +- Parooli väli +- +- +- Clear fields +- Puhasta väljad +- +- +- Browse for share file +- Vali jagatav fail +- +- +- Browse... +- Sirvi... +- +- +- +- EditGroupWidgetMain +- +- Name field +- Nime väli +- +- +- Notes field +- Märkmete väli +- +- +- Toggle expiration +- Lülita aegumist +- +- +- Auto-Type toggle for this and sub groups +- Automaatsisestusfunktsiooni lülitamine selle grupi ja alamgruppide jaoks +- +- +- Expiration field +- Aegumise väli +- +- +- Search toggle for this and sub groups +- Otsingufunktsiooni lülitamine selle grupi ja alamgruppide jaoks +- +- +- Default auto-type sequence field +- Vaikimisi automaatsisestuse jada väli +- +- +- Expires: +- Aegub: +- +- +- Use default Auto-Type sequence of parent group +- Kasutatakse ülemgrupi vaikimisi automaatsisestuse jada +- +- +- Auto-Type: +- Automaatsisestus: +- +- +- Search: +- Otsing: +- +- +- Notes: +- Märkmed: +- +- +- Name: +- Nimi: +- +- +- Set default Auto-Type sequence +- Grupile määratakse oma vaikimisi automaatsisestuse jada +- +- +- Edit Group +- +- +- +- +- EditWidgetIcons +- +- Add custom icon +- Lisa kohandatud ikoon +- +- +- Delete custom icon +- Kustuta kohandatud ikoon +- +- +- Download favicon +- Laadi alla saidi&ikoon +- +- +- Unable to fetch favicon. +- Saidiikooni allalaadimine polnud võimalik. +- +- +- Images +- Pildid +- +- +- All files +- Kõik failid +- +- +- Confirm Delete +- Kustutamise kinnitus +- +- +- Select Image(s) +- Piltide valimine +- +- +- Successfully loaded %1 of %n icon(s) +- %1 ikoon %n-st kenasti laaditud%1 ikooni %n-st kenasti laaditud +- +- +- No icons were loaded +- Ãœhtki ikooni ei laaditud +- +- +- %n icon(s) already exist in the database +- %n ikoon on juba andmebaasis olemas%n ikooni on juba andmebaasis olemas +- +- +- The following icon(s) failed: +- Järgmise ikooni laadimine ebaõnnestus:Järgmiste ikoonide laadimine ebaõnnestus: +- +- +- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? +- See ikoon on kasutusel %n kirjes, kus see asendataks vaikeikooniga. Kas oled kindel, et soovid selle ikooni kustutada?See ikoon on kasutusel %n kirjes, kus see asendataks vaikeikooniga. Kas oled kindel, et soovid selle ikooni kustutada? +- +- +- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security +- Võid sisse lülitada DuckDuckGo veebisaidiikoonide teenuse, valides menüüst Tööriistad > Seaded > Turvalisus. +- +- +- Download favicon for URL +- Laadi alla saidiikoon selle URL-i jaoks +- +- +- Apply selected icon to subgroups and entries +- Vali, kas rakendada valitud ikoon ainult grupile endale või ka selle alamkirjetele +- +- +- Also apply to child groups +- Rakendatakse ka alamgruppidele +- +- +- Also apply to child entries +- Rakendatakse ka alamkirjetele +- +- +- Also apply to all children +- Rakendatakse ka alamgruppidele ja nende kirjetele +- +- +- Existing icon selected. +- Valiti olemasolev ikoon. +- +- +- Use default icon +- Vaikeikoon +- +- +- Use custom icon +- Kohandatud ikoon +- +- +- Apply icon to... +- Ikoon rakendatakse… +- +- +- Apply to this group only +- Rakendatakse ainult grupile endale +- +- +- +- EditWidgetProperties +- +- Created: +- Loodud: +- +- +- Modified: +- Muudetud: +- +- +- Accessed: +- Vaadatud: +- +- +- Uuid: +- UUID: +- +- +- Plugin Data +- Pluginate andmed +- +- +- Remove +- Eemalda +- +- +- Delete plugin data? +- Plugina andmete kustutamise kinnitus +- +- +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- Kas oled kindel, et soovid valitud plugina andmed kustutada? +-See võib põhjustada asjaomaste pluginate töös tõrkeid. +- +- +- Key +- Võti +- +- +- Value +- Väärtus +- +- +- Datetime created +- Loomisaeg +- +- +- Datetime modified +- Muutmisaeg +- +- +- Datetime accessed +- Vaatamisaeg +- +- +- Unique ID +- Unikaalne ID +- +- +- Plugin data +- Pluginate andmed +- +- +- Remove selected plugin data +- Eemalda valitud plugina andmed +- +- +- +- Entry +- +- %1 - Clone +- %1 - koopia +- +- +- +- EntryAttachmentsModel +- +- Name +- Nimi +- +- +- Size +- Suurus +- +- +- +- EntryAttachmentsWidget +- +- Form +- Vorm +- +- +- Add +- Lisa +- +- +- Remove +- Eemalda +- +- +- Open +- Ava +- +- +- Save +- Salvesta +- +- +- Select files +- Failide valimine +- +- +- Are you sure you want to remove %n attachment(s)? +- Kas oled kindel, et soovid eemaldada %n manuse?Kas oled kindel, et soovid eemaldada %n manust? +- +- +- Save attachments +- Kaasatud failide salvestamine +- +- +- Unable to create directory: +-%1 +- Kataloogi loomine pole võimalik: +-%1 +- +- +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- Kas oled kindel, et soovid juba olemasoleva faili "%1" selle manusega üle kirjutada? +- +- +- Confirm overwrite +- Ãœlekirjutamise kinnitus +- +- +- Unable to save attachments: +-%1 +- Kaasatud failide salvestamine pole võimalik: +-%1 +- +- +- Unable to open attachment: +-%1 +- Kaasatud faili avamine pole võimalik: +-%1 +- +- +- Unable to open attachments: +-%1 +- Kaasatud failide avamine pole võimalik: +-%1 +- +- +- Confirm remove +- Eemaldamise kinnitus +- +- +- Unable to open file(s): +-%1 +- Faili avamine pole võimalik: +-%1Failide avamine pole võimalik: +-%1 +- +- +- Attachments +- Kaasatud failid +- +- +- Add new attachment +- Lisa uus kaasatud fail +- +- +- Remove selected attachment +- Eemalda valitud kaasatud fail +- +- +- Open selected attachment +- Ava valitud kaasatud fail +- +- +- Save selected attachment to disk +- Salvesta valitud kaasatud fail kettale +- +- +- %1 is a big file (%2 MB). +-Your database may get very large and reduce performance. +- +-Are you sure to add this file? +- "%1" on suur fail (%2 MB). +-See võib andmebaasi väga suureks ajada ja jõudlust vähendada. +- +-Kas oled kindel, et tahad selle faili lisada? +- +- +- Confirm Attachment +- Faili kaasamise kinnitus +- +- +- +- EntryAttributesModel +- +- Name +- Nimi +- +- +- +- EntryHistoryModel +- +- Last modified +- Muudetud +- +- +- Title +- Pealkiri +- +- +- Username +- Kasutajanimi +- +- +- URL +- URL +- +- +- +- EntryModel +- +- Ref: +- Reference abbreviation +- Viide: +- +- +- Group +- Grupp +- +- +- Title +- Pealkiri +- +- +- Username +- Kasutajanimi +- +- +- URL +- URL +- +- +- Never +- mitte kunagi +- +- +- Password +- Parool +- +- +- Notes +- Märkmed +- +- +- Expires +- Aegub +- +- +- Created +- Loodud +- +- +- Modified +- Muudetud +- +- +- Accessed +- Vaadatud +- +- +- Attachments +- Kaasatud failid +- +- +- Size +- Maht +- +- +- Group name +- Grupi nimi +- +- +- Entry title +- Kirje pealkiri +- +- +- Entry notes +- Kirje märkmed +- +- +- Entry expires at +- Kirje aegub +- +- +- Creation date +- Loomisaeg +- +- +- Last modification date +- Viimase muutmise aeg +- +- +- Last access date +- Viimase vaatamise aeg +- +- +- Attached files +- Kaasatud failid +- +- +- Entry size +- Kirje maht +- +- +- Has attachments +- Kaasatud failide olemasolu +- +- +- Has TOTP one-time password +- TOTP ühekordse parooli olemasolu +- +- +- +- EntryPreviewWidget +- +- Close +- Sulge +- +- +- General +- Ãœldine +- +- +- Username +- Kasutajanimi +- +- +- Password +- Parool +- +- +- Expiration +- Aegub +- +- +- URL +- URL +- +- +- Attributes +- Atribuudid +- +- +- Attachments +- Kaasatud failid +- +- +- Notes +- Märkmed +- +- +- Autotype +- Automaatsisestus +- +- +- Window +- Aken +- +- +- Sequence +- Jada +- +- +- Searching +- Otsing +- +- +- Search +- Otsimine +- +- +- Clear +- Puhasta +- +- +- Never +- mitte kunagi +- +- +- [PROTECTED] +- [KAITSTUD] +- +- +- Enabled +- lubatud +- +- +- Disabled +- keelatud +- +- +- Share +- Jagamine +- +- +- Display current TOTP value +- Praeguse TOTP väärtuse kuvamine +- +- +- Advanced +- Lisaseaded +- +- +- Default Sequence +- +- +- +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- attributes line +- +- +- +- +- EntryURLModel +- +- Invalid URL +- Sobimatu URL +- +- +- +- EntryView +- +- Fit to window +- Mahuta aknasse +- +- +- Fit to contents +- Mahuta sisu järgi +- +- +- Reset to defaults +- Taasta vaikeväärtused +- +- +- Has attachments +- Entry attachment icon toggle +- Kaasatud failide olemasolu +- +- +- Has TOTP +- Entry TOTP icon toggle +- TOTP olemasolu +- +- +- +- FdoSecrets::Item +- +- Entry "%1" from database "%2" was used by %3 +- %3 kasutas andmebaasi "%2" kirjet "%1" +- +- +- +- FdoSecrets::Service +- +- Failed to register DBus service at %1.<br/> +- DBus'i teenuse registreerimine asukohas %1 ebaõnnestus.<br/> +- +- +- %n Entry(s) was used by %1 +- %1 is the name of an application +- %1 kasutas %n kirjet%1 kasutas %n kirjet +- +- +- +- FdoSecrets::SettingsDatabaseModel +- +- File Name +- Faili nimi +- +- +- Group +- Grupp +- +- +- Manage +- Haldamine +- +- +- Unlock to show +- Nägemiseks ava lukk +- +- +- None +- Puudub +- +- +- +- FdoSecrets::SettingsSessionModel +- +- Application +- Rakendus +- +- +- Manage +- Haldamine +- +- +- +- FdoSecretsPlugin +- +- <b>Fdo Secret Service:</b> %1 +- <b>Fd.o saladuste teenus:</b> %1 +- +- +- Unknown +- Unknown PID +- teadmata +- +- +- Unknown +- Unknown executable path +- teadmata +- +- +- <i>PID: %1, Executable: %2</i> +- <i>PID: 1234, Executable: /path/to/exe</i> +- <i>PID: %1, käitusfail: %2</i> +- +- +- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. +- Muu saladuste teenus juba töötab (%1).<br/>See tuleb peatada või eemaldada, enne kui saladuste teenuse lõimingu uuesti sisse lülitada saab. +- +- +- +- Group +- +- [empty] +- group has no children +- [tühi] +- +- +- +- HibpDownloader +- +- Online password validation failed +- Paroolide võrgus valideerimine ebaõnnestus +- +- +- +- IconDownloaderDialog +- +- Download Favicons +- Saidiikoonide allalaadimine +- +- +- Cancel +- Loobu +- +- +- Having trouble downloading icons? +-You can enable the DuckDuckGo website icon service in the security section of the application settings. +- Kui ikoonide allalaadimisega on probleeme, võid KeePassXC seadete turvalisuse jaotises sisse lülitada DuckDuckGo veebisaidiikoonide teenuse. +- +- +- Close +- Sulge +- +- +- URL +- URL +- +- +- Status +- Olek +- +- +- Please wait, processing entry list... +- Palun oota, kirjete nimekirja töödeldakse... +- +- +- Downloading... +- Allalaadimine... +- +- +- Ok +- OK +- +- +- Already Exists +- On juba olemas +- +- +- Download Failed +- Allalaadimine ebaõnnestus +- +- +- Downloading favicons (%1/%2)... +- Saidiikoonide allalaadimine (%1/%2)... +- +- +- +- KMessageWidget +- +- &Close +- S&ulge +- +- +- Close message +- Sulge teade +- +- +- +- Kdbx3Reader +- +- missing database headers +- andmebaasipäised on puudu. +- +- +- Header doesn't match hash +- päis ei vasta räsile. +- +- +- Invalid header id size +- sobimatu päise-ID suurus +- +- +- Invalid header field length +- sobimatu päisevälja suurus +- +- +- Invalid header data length +- sobimatu päiseandmete pikkus +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- sisestatud tunnused ei sobinud, proovi palun uuesti. +-Kui probleem püsib, võib andmebaasifail olla rikutud. +- +- +- Unable to calculate database key +- andmebaasivõtme arvutamine pole võimalik +- +- +- Unable to issue challenge-response: %1 +- pretensiooni ja vastuse väljastamine pole võimalik: %1 +- +- +- +- Kdbx3Writer +- +- Unable to issue challenge-response: %1 +- pretensiooni ja vastuse väljastamine pole võimalik: %1 +- +- +- Unable to calculate database key +- andmebaasivõtme arvutamine pole võimalik +- +- +- +- Kdbx4Reader +- +- missing database headers +- andmebaasipäised on puudu. +- +- +- Invalid header checksum size +- sobimatu päise kontrollsumma suurus +- +- +- Header SHA256 mismatch +- päise SHA256 mittevastavus +- +- +- Unknown cipher +- tundmatu Å¡iffer +- +- +- Invalid header id size +- sobimatu päise-ID suurus +- +- +- Invalid header field length +- sobimatu päisevälja suurus +- +- +- Invalid header data length +- sobimatu päiseandmete pikkus +- +- +- Failed to open buffer for KDF parameters in header +- päises olevate KDF-parameetrite jaoks puhvri avamine ebaõnnestus +- +- +- Unsupported key derivation function (KDF) or invalid parameters +- toetamata võtmetuletusfunktsioon (KDF) või sobimatud parameetrid +- +- +- Legacy header fields found in KDBX4 file. +- KDBX4-failist leiti iganenud päisevälju. +- +- +- Invalid inner header id size +- sobimatu sisemise päise ID maht +- +- +- Invalid inner header field length +- sobimatu sisemise päise väljapikkus +- +- +- Invalid inner header binary size +- sobimatu sisemise päise binaarmaht +- +- +- Unsupported KeePass variant map version. +- Translation: variant map = data structure for storing meta data +- toetamata KeePassi metaandmete salvestusstruktuuri versioon +- +- +- Invalid variant map entry name length +- Translation: variant map = data structure for storing meta data +- sobimatu kirjenime pikkus metaandmete salvestusstruktuuris +- +- +- Invalid variant map entry name data +- Translation: variant map = data structure for storing meta data +- sobimatud kirjenime andmed metaandmete salvestusstruktuuris +- +- +- Invalid variant map entry value length +- Translation: variant map = data structure for storing meta data +- sobimatu kirjeväärtuse pikkus metaandmete salvestusstruktuuris +- +- +- Invalid variant map entry value data +- Translation comment: variant map = data structure for storing meta data +- sobimatud kirjeväärtuse andmed metaandmete salvestusstruktuuris +- +- +- Invalid variant map Bool entry value length +- Translation: variant map = data structure for storing meta data +- sobimatu Bool-kirjeväärtuse pikkus metaandmete salvestusstruktuuris +- +- +- Invalid variant map Int32 entry value length +- Translation: variant map = data structure for storing meta data +- sobimatu Int32-kirjeväärtuse pikkus metaandmete salvestusstruktuuris +- +- +- Invalid variant map UInt32 entry value length +- Translation: variant map = data structure for storing meta data +- sobimatu UInt32-kirjeväärtuse pikkus metaandmete salvestusstruktuuris +- +- +- Invalid variant map Int64 entry value length +- Translation: variant map = data structure for storing meta data +- sobimatu Int64-kirjeväärtuse pikkus metaandmete salvestusstruktuuris +- +- +- Invalid variant map UInt64 entry value length +- Translation: variant map = data structure for storing meta data +- sobimatu UInt64-kirjeväärtuse pikkus metaandmete salvestusstruktuuris +- +- +- Invalid variant map entry type +- Translation: variant map = data structure for storing meta data +- sobimatu kirjetüüp metaandmete salvestusstruktuuris +- +- +- Invalid variant map field type size +- Translation: variant map = data structure for storing meta data +- sobimatu väljatüübi maht metaandmete salvestusstruktuuris +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- sisestatud tunnused ei sobinud, proovi palun uuesti. +-Kui probleem püsib, võib andmebaasifail olla rikutud. +- +- +- (HMAC mismatch) +- (HMAC-i mittevastavus) +- +- +- Unable to calculate database key: %1 +- andmebaasivõtme arvutamine pole võimalik: %1 +- +- +- +- Kdbx4Writer +- +- Invalid symmetric cipher algorithm. +- sobimatu sümmeetrilise Å¡ifri algoritm +- +- +- Invalid symmetric cipher IV size. +- IV = Initialization Vector for symmetric cipher +- sobimatu sümmeetrilise Å¡ifri initsialisatsioonivektori maht +- +- +- Failed to serialize KDF parameters variant map +- Translation comment: variant map = data structure for storing meta data +- metaandmete salvestusstruktuuri KDF-parameetrite järjestamine ebaõnnestus +- +- +- Unable to calculate database key: %1 +- andmebaasivõtme arvutamine pole võimalik: %1 +- +- +- +- KdbxReader +- +- Unsupported cipher +- toetamata Å¡iffer +- +- +- Invalid compression flags length +- sobimatu tihenduslippude pikkus +- +- +- Unsupported compression algorithm +- toetamata pakkimisalgoritm +- +- +- Invalid master seed size +- sobimatu ülemseemne suurus +- +- +- Invalid transform seed size +- sobimatu teisendusseemne suurus +- +- +- Invalid transform rounds size +- sobimatu teisendusraundide arvu maht +- +- +- Invalid start bytes size +- sobimatu alustusbaitide suurus +- +- +- Invalid random stream id size +- +- +- +- Invalid inner random stream cipher +- +- +- +- Not a KeePass database. +- tegemist pole KeePassi andmebaasiga. +- +- +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- valitud fail on vana KeePass 1 andmebaas (.kdb). +- +-Selle saab importida, valides menüüst Andmebaas > Impordi > KeePass 1 andmebaas. +-Teisendus on ühesuunaline, seega imporditud andmebaasi ei saa vana KeePassX 0.4 versiooniga avada. +- +- +- Unsupported KeePass 2 database version. +- toetamata KeePass 2 andmebaasiversioon +- +- +- Invalid cipher uuid length: %1 (length=%2) +- sobimatu Å¡ifri UUID pikkus: %1 (pikkus = %2) +- +- +- Unable to parse UUID: %1 +- UUID parsimine pole võimalik: %1 +- +- +- Failed to read database file. +- andmebaasifaili lugemine ebaõnnestus. +- +- +- +- KdbxXmlReader +- +- XML parsing failure: %1 +- XML-i parsimine ebaõnnestus: %1 +- +- +- No root group +- juurgrupp puudub +- +- +- Missing icon uuid or data +- Ikooni UUID või andmed on puudu +- +- +- Missing custom data key or value +- kohandatud andmete võti või väärtus puudub +- +- +- Multiple group elements +- +- +- +- Null group uuid +- +- +- +- Invalid group icon number +- sobimatu grupi ikooninumber +- +- +- Invalid EnableAutoType value +- sobimatu võtme EnableAutoType väärtus +- +- +- Invalid EnableSearching value +- sobimatu võtme EnableSearching väärtus +- +- +- No group uuid found +- ei leitud ühtki grupi-UUID-d +- +- +- Null DeleteObject uuid +- +- +- +- Missing DeletedObject uuid or time +- +- +- +- Null entry uuid +- +- +- +- Invalid entry icon number +- sobimatu kirje ikooninumber +- +- +- History element in history entry +- ajalooelement ajalookirjes +- +- +- No entry uuid found +- ei leitud ühtki kirje-UUID-d +- +- +- History element with different uuid +- leiti erineva UUID-ga ajalooelement +- +- +- Duplicate custom attribute found +- leiti duplitseeritud kohandatud atribuut +- +- +- Entry string key or value missing +- võtme stringvõti või väärtus puudub +- +- +- Entry binary key or value missing +- võtme binaarvõti või väärtus puudub +- +- +- Auto-type association window or sequence missing +- automaatsisestuse sihtaken või jada puudub +- +- +- Invalid bool value +- sobimatu tõeväärtus +- +- +- Invalid date time value +- sobimatu ajaväärtus +- +- +- Invalid color value +- sobimatu värviväärtus +- +- +- Invalid color rgb part +- sobimatu värvi RGB-osa +- +- +- Invalid number value +- sobimatu arvväärtus +- +- +- Invalid uuid value +- sobimatu UUID-väärtus +- +- +- Unable to decompress binary +- Translator meant is a binary data inside an entry +- binaarandmete lahtipakkimine pole võimalik +- +- +- XML error: +-%1 +-Line %2, column %3 +- XML-i viga: +-%1 +-Rida %2, veerg %3 +- +- +- +- KeeAgentSettings +- +- Invalid KeeAgent settings file structure. +- Sobimatu KeeAgenti seadistusfaili struktuur. +- +- +- Private key is an attachment but no attachments provided. +- +- +- +- Private key is empty +- Privaatvõti on tühi. +- +- +- File too large to be a private key +- Fail on liiga suur, et privaatvõti olla. +- +- +- Failed to open private key +- Privaatvõtme avamine ebaõnnestus. +- +- +- +- KeePass1OpenWidget +- +- Unable to open the database. +- Andmebaasi avamine pole võimalik. +- +- +- Import KeePass1 Database +- KeePass 1 andmebaasi importimine +- +- +- +- KeePass1Reader +- +- Unable to read keyfile. +- võtmefaili lugemine pole võimalik. +- +- +- Not a KeePass database. +- tegemist pole KeePassi andmebaasiga. +- +- +- Unsupported encryption algorithm. +- toetamata krüptimisalgoritm +- +- +- Unsupported KeePass database version. +- toetamata KeePassi andmebaasiversioon +- +- +- Unable to read encryption IV +- IV = Initialization Vector for symmetric cipher +- krüptimise IV lugemine pole võimalik +- +- +- Invalid number of groups +- sobimatu gruppide arv +- +- +- Invalid number of entries +- sobimatu kirjete arv +- +- +- Invalid content hash size +- sobimatu sisuräsi suurus +- +- +- Invalid transform seed size +- sobimatu teisendusseemne suurus +- +- +- Invalid number of transform rounds +- sobimatu teisendusraundide arv +- +- +- Unable to construct group tree +- grupipuu konstrueerimine ebaõnnestus +- +- +- Root +- Juur +- +- +- Key transformation failed +- võtmeteisendus ebaõnnestus +- +- +- Invalid group field type number +- sobimatu grupi väljatüübi number +- +- +- Invalid group field size +- sobimatu grupi väljasuurus +- +- +- Read group field data doesn't match size +- grupi loetud väljaandmed ei kattu väidetava suurusega +- +- +- Incorrect group id field size +- sobimatu grupi ID-välja suurus +- +- +- Incorrect group creation time field size +- sobimatu grupi loomisaja välja suurus +- +- +- Incorrect group modification time field size +- sobimatu grupi muutmisaja välja suurus +- +- +- Incorrect group access time field size +- sobimatu grupi vaatamisaja välja suurus +- +- +- Incorrect group expiry time field size +- sobimatu grupi aegumisaja välja suurus +- +- +- Incorrect group icon field size +- sobimatu grupi ikoonivälja suurus +- +- +- Incorrect group level field size +- sobimatu grupi tasemevälja suurus +- +- +- Invalid group field type +- sobimatu grupi väljatüüp +- +- +- Missing group id or level +- grupi ID või tase puudub +- +- +- Missing entry field type number +- kirje väljatüübi number puudub +- +- +- Invalid entry field size +- sobimatu kirje väljasuurus +- +- +- Read entry field data doesn't match size +- kirje loetud väljaandmed ei kattu väidetava suurusega +- +- +- Invalid entry uuid field size +- sobimatu kirje UUID-välja suurus +- +- +- Invalid entry group id field size +- sobimatu kirje grupi-ID-välja suurus +- +- +- Invalid entry icon field size +- sobimatu kirje ikoonivälja suurus +- +- +- Invalid entry creation time field size +- sobimatu kirje loomisaja välja suurus +- +- +- Invalid entry modification time field size +- sobimatu kirje muutmisaja välja suurus +- +- +- Invalid entry expiry time field size +- sobimatu kirje aegumisaja välja suurus +- +- +- Invalid entry field type +- sobimatu kirje väljatüüp +- +- +- unable to seek to content position +- sisu alguskoha juurde pöördumine pole võimalik +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- sisestatud tunnused ei sobinud, proovi palun uuesti. +-Kui probleem püsib, võib andmebaasifail olla rikutud. +- +- +- Unable to calculate database key +- andmebaasivõtme arvutamine pole võimalik +- +- +- +- KeeShare +- +- Invalid sharing reference +- Sobimatu jagamisviide +- +- +- Inactive share %1 +- +- +- +- Imported from %1 +- Imporditud asukohast "%1" +- +- +- Exported to %1 +- Eksporditud asukohta %1 +- +- +- Synchronized with %1 +- Sünkroonitud asukohaga %1 +- +- +- Import is disabled in settings +- Importimine on seadetes keelatud +- +- +- Export is disabled in settings +- Eksportimine on seadetes keelatud +- +- +- Inactive share +- +- +- +- Imported from +- Imporditud asukohast +- +- +- Exported to +- Eksporditud asukohta +- +- +- Synchronized with +- Sünkroonitud asukohaga +- +- +- +- KeyComponentWidget +- +- Key Component +- Võtmekomponent +- +- +- Key Component Description +- Võtmekomponendi kirjeldus +- +- +- Cancel +- Loobu +- +- +- Key Component set, click to change or remove +- Võtmekomponent on määratud, muutmiseks või eemaldamiseks klõpsa vastavat nuppu +- +- +- Add %1 +- Add a key component +- Lisa: %1 +- +- +- Change %1 +- Change a key component +- Muuda: %1 +- +- +- Remove %1 +- Remove a key component +- Eemalda: %1 +- +- +- %1 set, click to change or remove +- Change or remove a key component +- %1 on määratud, muutmiseks või eemaldamiseks klõpsa vastavat nuppu +- +- +- +- KeyFileEditWidget +- +- Generate +- Genereeri +- +- +- Key File +- Võtmefail +- +- +- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> +- <p>Lisaturvalisuse saavutamiseks võid määrata juhuslikke baite sisaldava võtmefaili.</p><p>Hoia seda salajas ja ära seda ära kaota, sest muidu ei saa andmebaasi lukku enam avada!</p> +- +- +- Error loading the key file '%1' +-Message: %2 +- Viga võtmefaili "%1" laadimisel. +-Teade: %2 +- +- +- Key files +- Võtmefailid +- +- +- All files +- Kõik failid +- +- +- Create Key File... +- Võtmefaili loomine +- +- +- Error creating key file +- Viga võtmefaili loomisel +- +- +- Unable to create key file: %1 +- Võtmefaili pole võimalk luua: %1 +- +- +- Select a key file +- Võtmefaili valimine +- +- +- Key file selection +- Võtmefaili valimine +- +- +- Browse for key file +- Vali võtmefail +- +- +- Browse... +- Sirvi... +- +- +- Generate a new key file +- Genereeri uus võtmefail +- +- +- Note: Do not use a file that may change as that will prevent you from unlocking your database! +- NB: ära kasuta faili, mis võib muutuda, kuna sel juhul pole enam võimalik andmebaasi lukku avada! +- +- +- Invalid Key File +- Sobimatu võtmefail +- +- +- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. +- Andmebaasi ennast ei saa võtmefailina kasutada. Palun vali mõni muu fail või genereeri uus võtmefail. +- +- +- Suspicious Key File +- Kahtlane võtmefail +- +- +- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. +-Are you sure you want to continue with this file? +- Valitud võtmefail näeb välja nagu parooliandmebaasifail. Võtmefail ei tohi kunagi muutuda, sest muidu kaotad igaveseks oma andmebaasile juurdepääsu. +-Kas oled kindel, et soovid selle failiga jätkata? +- +- +- Old key file format +- +- +- +- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. +- +- +- +- +- MainWindow +- +- &Database +- &Andmebaas +- +- +- &Help +- A&bi +- +- +- &Groups +- &Grupid +- +- +- &Tools +- &Tööriistad +- +- +- &Quit +- &Välju +- +- +- &About +- &Teave +- +- +- Database settings +- Andmebaasi seaded +- +- +- Copy username to clipboard +- Kopeeri kasutajanimi lõikepuhvrisse +- +- +- Copy password to clipboard +- Kopeeri parool lõikepuhvrisse +- +- +- &Settings +- &Seaded +- +- +- &Title +- &Pealkiri +- +- +- Copy title to clipboard +- Kopeeri pealkiri lõikepuhvrisse +- +- +- &URL +- &URL +- +- +- Copy URL to clipboard +- Kopeeri URL lõikepuhvrisse +- +- +- &Notes +- &Märkmed +- +- +- Copy notes to clipboard +- Kopeeri märkmed lõikepuhvrisse +- +- +- Copy &TOTP +- Kopeeri &TOTP +- +- +- E&mpty recycle bin +- &Tühjenda prügikast +- +- +- Clear history +- Puhasta ajalugu +- +- +- Access error for config file %1 +- Juurdepääsuviga seadistusfailil "%1" +- +- +- Settings +- Seaded +- +- +- Toggle window +- Kuva või peida põhiaken +- +- +- Quit KeePassXC +- Välju KeePassXC-st +- +- +- Please touch the button on your YubiKey! +- Puuduta YubiKey nuppu! +- +- +- WARNING: You are using an unstable build of KeePassXC! +-There is a high risk of corruption, maintain a backup of your databases. +-This version is not meant for production use. +- HOIATUS: kasutad KeePassXC ebastabiilset versiooni! +-Selle kasutamisega kaasneb suur risk oma parooliandmebaasid ära rikkuda, nii et vaata, et sul oleks neist varukoopiad. +-See versioon ei ole mõeldud töökeskkonnas kasutamiseks. +- +- +- &Donate +- A&nneta… +- +- +- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +-We recommend you use the AppImage available on our downloads page. +- HOIATUS: sinu Qt versioon võib põhjustada KeePassXC kokkujooksmist ekraaniklaviatuuri kasutamisel. +-Võiksid kaaluda KeePassXC allalaadimislehel oleva AppImage'i kasutamist. +- +- +- &Import +- &Impordi +- +- +- Create a new database +- Loo uus andmebaas +- +- +- Merge from another KDBX database +- Mesti mõne teise KDBX-andmebaasiga +- +- +- Add a new entry +- Lisa uus kirje +- +- +- View or edit entry +- Vaata või muuda kirjet +- +- +- Add a new group +- Lisa uus grupp +- +- +- Perform &Auto-Type +- Soorita &automaatsisestus +- +- +- Open &URL +- A&va URL +- +- +- Import a KeePass 1 database +- Impordi KeePass 1 andmebaas +- +- +- Import a CSV file +- Impordi CSV-fail +- +- +- NOTE: You are using a pre-release version of KeePassXC! +-Expect some bugs and minor issues, this version is not meant for production use. +- NB: kasutad KeePassXC testversiooni! +-Eeldatavasti leidub selles programmivigu ja muid väiksemaid hädasid – see versioon ei ole mõeldud töökeskkonnas kasutamiseks. +- +- +- Check for updates on startup? +- Käivitamisel uuenduste otsimine +- +- +- Would you like KeePassXC to check for updates on startup? +- Kas soovid, et KeePassXC käivitumisel uuenduste olemasolu kontrolliks? +- +- +- You can always check for updates manually from the application menu. +- Rakenduse menüü kaudu saab neid alati ka käsitsi otsida. +- +- +- &Export +- &Ekspordi +- +- +- Sort &A-Z +- Sordi &A-st Y-ni +- +- +- Sort &Z-A +- Sordi &Y-st A-ni +- +- +- &Password Generator +- &Parooligeneraator +- +- +- Import a 1Password Vault +- Impordi 1Passwordi turvalaegas +- +- +- &Getting Started +- &Alustusjuhend... +- +- +- &User Guide +- Käsi&raamat... +- +- +- &Keyboard Shortcuts +- &Kiirklahvid +- +- +- &Recent Databases +- Viimatised andme&baasid +- +- +- &Entries +- &Kirjed +- +- +- Copy Att&ribute +- Kopeeri at&ribuut +- +- +- TOTP +- &TOTP +- +- +- View +- &Vaade +- +- +- Theme +- &Kujundus +- +- +- &Check for Updates +- &Otsi uuendusi +- +- +- &Open Database… +- &Ava andmebaas… +- +- +- &Save Database +- &Salvesta andmebaas +- +- +- &Close Database +- S&ulge andmebaas +- +- +- &New Database… +- &Uus andmebaas… +- +- +- &Merge From Database… +- &Mesti andmebaas… +- +- +- &New Entry… +- &Uus kirje… +- +- +- &Edit Entry… +- &Muuda kirjet… +- +- +- &Delete Entry… +- Kustuta kirj&e… +- +- +- &New Group… +- &Uus grupp… +- +- +- &Edit Group… +- &Muuda gruppi… +- +- +- &Delete Group… +- K&ustuta grupp… +- +- +- Download All &Favicons… +- Laadi alla kõigi saitide &ikoonid… +- +- +- Sa&ve Database As… +- Salvesta andmebaas &kui… +- +- +- Database &Security… +- Andmebaasi &turvalisus… +- +- +- Database &Reports... +- A&ndmebaasi aruanded… +- +- +- Statistics, health check, etc. +- Statistika, tervisekontroll jm +- +- +- &Database Settings… +- An&dmebaasi seaded… +- +- +- &Clone Entry… +- K&looni kirje… +- +- +- Move u&p +- Lii&guta ülespoole +- +- +- Move entry one step up +- Liiguta kirje sammu võrra ülespoole +- +- +- Move do&wn +- Liiguta allap&oole +- +- +- Move entry one step down +- Liiguta kirje sammu võrra allapoole +- +- +- Copy &Username +- Kopeeri &kasutajanimi +- +- +- Copy &Password +- Kopeeri &parool +- +- +- Download &Favicon +- Laadi alla saidi&ikoon +- +- +- &Lock Databases +- &Lukusta andmebaasid +- +- +- &CSV File… +- &CSV-failiks… +- +- +- &HTML File… +- &HTML-failiks… +- +- +- KeePass 1 Database… +- KeePass 1 andmebaas… +- +- +- 1Password Vault… +- 1Passwordi turvalaegas… +- +- +- CSV File… +- CSV-fail… +- +- +- Show TOTP +- Kuva TOTP +- +- +- Show QR Code +- Kuva QR-kood +- +- +- Set up TOTP… +- Seadista TOTP… +- +- +- Report a &Bug +- T&eata veast... +- +- +- Open Getting Started Guide +- Ava alustusjuhend +- +- +- &Online Help +- Abi &võrgus +- +- +- Go to online documentation +- Ava dokumentatsioon võrgus +- +- +- Open User Guide +- Ava käsiraamat +- +- +- Save Database Backup... +- Sa&lvesta andmebaasi varukoopia… +- +- +- Add key to SSH Agent +- Lisa võti SSH agendile +- +- +- Remove key from SSH Agent +- Eemalda võti SSH agendilt +- +- +- Compact Mode +- Kompaktne režiim +- +- +- Automatic +- Automaatne +- +- +- Light +- Hele +- +- +- Dark +- Tume +- +- +- Classic (Platform-native) +- Klassikaline (platvormiomane) +- +- +- Show Toolbar +- &Tööriistariba nähtaval +- +- +- Show Preview Panel +- &Eelvaatluse paneel nähtaval +- +- +- Don't show again for this version +- Ära selle versiooni puhul rohkem näita +- +- +- Restart Application? +- Uuesti käivitamise kinnitus +- +- +- You must restart the application to apply this setting. Would you like to restart now? +- Selle muudatuse rakendamiseks tuleb KeePassXC uuesti käivitada. Kas teha seda kohe? +- +- +- Perform Auto-Type Sequence +- Soorita automaatsisestuse jada +- +- +- {USERNAME} +- Kasutajanimi +- +- +- {USERNAME}{ENTER} +- Kasutajanimi ja Enter +- +- +- {PASSWORD} +- Parool +- +- +- {PASSWORD}{ENTER} +- Parool ja Enter +- +- +- Always on Top +- +- +- +- Hide Usernames +- Kasutajanimede varjamine +- +- +- Hide Passwords +- Paroolide varjamine +- +- +- +- ManageDatabase +- +- Database settings +- Andmebaasi seaded +- +- +- Edit database settings +- Muuda andmebaasi seadeid +- +- +- Unlock database +- Ava andmebaasi lukk +- +- +- Unlock database to show more information +- Lisateabe nägemiseks ava andmebaasi lukk +- +- +- Lock database +- Lukusta andmebaas +- +- +- +- ManageSession +- +- Disconnect +- Katkesta ühendus +- +- +- Disconnect this application +- Katkesta ühendus selle rakendusega +- +- +- +- Merger +- +- Creating missing %1 [%2] +- +- +- +- Relocating %1 [%2] +- +- +- +- Overwriting %1 [%2] +- +- +- +- older entry merged from database "%1" +- +- +- +- Adding backup for older target %1 [%2] +- +- +- +- Adding backup for older source %1 [%2] +- +- +- +- Reapplying older target entry on top of newer source %1 [%2] +- +- +- +- Reapplying older source entry on top of newer target %1 [%2] +- +- +- +- Synchronizing from newer source %1 [%2] +- +- +- +- Synchronizing from older source %1 [%2] +- +- +- +- Deleting child %1 [%2] +- +- +- +- Deleting orphan %1 [%2] +- +- +- +- Changed deleted objects +- +- +- +- Adding missing icon %1 +- +- +- +- Removed custom data %1 [%2] +- +- +- +- Adding custom data %1 [%2] +- +- +- +- +- NewDatabaseWizard +- +- Create a new KeePassXC database... +- Uue KeePassXC andmebaasi loomine +- +- +- Root +- Root group +- Juur +- +- +- +- NewDatabaseWizardPage +- +- WizardPage +- Andmebaasinõustaja +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Siin saab määrata andmebaasi krüptimisseaded. Hiljem saab neid muuta andmebaasi seadetes. +- +- +- Advanced Settings +- Täpsemad seaded +- +- +- Simple Settings +- Lihtsad seaded +- +- +- Encryption Settings +- Krüptimisseaded +- +- +- +- NewDatabaseWizardPageDatabaseKey +- +- Database Credentials +- Andmebaasi tunnused +- +- +- A set of credentials known only to you that protects your database. +- Kaitse andmebaasi tunnustega, mida ainult sina tead. +- +- +- +- NewDatabaseWizardPageEncryption +- +- Encryption Settings +- Krüptimisseaded +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Siin saab määrata andmebaasi krüptimisseaded. Hiljem saab neid muuta andmebaasi seadetes. +- +- +- +- NewDatabaseWizardPageMetaData +- +- General Database Information +- Andmebaasi üldandmed +- +- +- Please fill in the display name and an optional description for your new database: +- Sisesta oma uuele andmebaasile kuvanimi ja soovi korral kirjeldus: +- +- +- +- NixUtils +- +- Password Manager +- Paroolihaldur +- +- +- +- OpData01 +- +- Invalid OpData01, does not contain header +- sobimatu OpData01, ei sisalda päist +- +- +- Unable to read all IV bytes, wanted 16 but got %1 +- IV kõiki baite pole võimalik lugeda: oodati 16, aga saadi %1 +- +- +- Unable to init cipher for opdata01: %1 +- Å ifri initsialiseerimine OpData01 jaoks pole võimalik: %1 +- +- +- Unable to read all HMAC signature bytes +- HMAC-i signatuuri kõiki baite pole võimalik lugeda +- +- +- Malformed OpData01 due to a failed HMAC +- Ebaõnnestunud HMAC-i tõttu vigane OpData01 +- +- +- Unable to process clearText in place +- clearTexti kohapeal töötlemine pole võimalik +- +- +- Expected %1 bytes of clear-text, found %2 +- oodati %1 baiti lihtteksti, aga leiti %2 +- +- +- +- OpVaultOpenWidget +- +- Read Database did not produce an instance +-%1 +- Andmebaasi lugemine ei loonud protsessi +-%1 +- +- +- +- OpVaultReader +- +- Directory .opvault must exist +- kataloog .opvault peab olemas olema +- +- +- Directory .opvault must be readable +- kataloog .opvault peab olema loetav +- +- +- Directory .opvault/default must exist +- kataloog .opvault/default peab olemas olema +- +- +- Directory .opvault/default must be readable +- kataloog .opvault/default peab olema loetav +- +- +- Unable to decode masterKey: %1 +- ülemvõtme dekodeerimine pole võimalik: %1 +- +- +- Unable to derive master key: %1 +- ülemvõtme tuletamine pole võimalik: %1 +- +- +- +- OpenSSHKey +- +- Invalid key file, expecting an OpenSSH key +- Sobimatu võtmefail – oodati OpenSSH võtit +- +- +- PEM boundary mismatch +- PEM-i perimeetri mittevastavus +- +- +- Base64 decoding failed +- Base64 dekodeerimine ebaõnnestus +- +- +- Key file way too small. +- Võtmefail on kaugelt liiga väike. +- +- +- Key file magic header id invalid +- Võtmefaili maagilise päise ID on sobimatu +- +- +- Found zero keys +- Võtmeid ei leitud +- +- +- Failed to read public key. +- Avaliku võtme lugemine ebaõnnestus. +- +- +- Corrupted key file, reading private key failed +- Rikutud võtmefail, privaatvõtme lugemine ebaõnnestus +- +- +- No private key payload to decrypt +- Privaatvõtmel pole lasti, mida lahti krüptida +- +- +- Trying to run KDF without cipher +- Ilma Å¡ifrita KDF-i käitamise üritamine +- +- +- Passphrase is required to decrypt this key +- Selle võtme lahtikrüptimiseks on vaja paroolifraasi +- +- +- Key derivation failed, key file corrupted? +- Võtmetuletus ebaõnnestus – rikutud võtmefail? +- +- +- Decryption failed, wrong passphrase? +- Lahtikrüptimine ebaõnnestus – vale paroolifraas? +- +- +- Unexpected EOF while reading public key +- Ootamatu faililõpp avaliku võtme lugemisel +- +- +- Unexpected EOF while reading private key +- Ootamatu faililõpp privaatvõtme lugemisel +- +- +- Can't write public key as it is empty +- Avalikku võtit ei saa kirjutada, kuna see on tühi +- +- +- Unexpected EOF when writing public key +- Ootamatu faililõpp avaliku võtme kirjutamisel +- +- +- Can't write private key as it is empty +- Privaatvõtit ei saa kirjutada, kuna see on tühi +- +- +- Unexpected EOF when writing private key +- Ootamatu faililõpp privaatvõtme kirjutamisel +- +- +- Unsupported key type: %1 +- Toetamata võtmetüüp: %1 +- +- +- Unknown cipher: %1 +- Tundmatu Å¡iffer: %1 +- +- +- Cipher IV is too short for MD5 kdf +- Å ifri IV on MD5-KDF-i jaoks liiga lühike +- +- +- Unknown KDF: %1 +- Tundmatu KDF: %1 +- +- +- Unknown key type: %1 +- Tundmatu võtmetüüp: %1 +- +- +- +- PasswordEdit +- +- Passwords do not match +- Paroolid ei kattu +- +- +- Passwords match so far +- Paroolid kattuvad +- +- +- Toggle Password (%1) +- Lülita parooli nähtavust (%1) +- +- +- Generate Password (%1) +- Genereeri parool (%1) +- +- +- Warning: Caps Lock enabled! +- Hoiatus: suurtähelukk on sisse lülitatud! +- +- +- +- PasswordEditWidget +- +- Enter password: +- Parool: +- +- +- Confirm password: +- Kordus: +- +- +- Password +- Parool +- +- +- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> +- <p>Parool on esmane meetod andmebaasi turvamiseks.</p><p>Hea parool on pikk ja ainukordne. Soovi korral võib lasta KeePassXC-l parooli genereerida.</p> +- +- +- Passwords do not match. +- Paroolid ei kattu. +- +- +- Password field +- Parooli väli +- +- +- Repeat password field +- Parooli korduse väli +- +- +- +- PasswordGeneratorWidget +- +- %p% +- %p% +- +- +- strength +- Password strength +- tugevus +- +- +- entropy +- entroopia +- +- +- Password +- Parool +- +- +- Character Types +- Märgitüübid +- +- +- Numbers +- Numbrid +- +- +- Extended ASCII +- Laiendatud ASCII +- +- +- Exclude look-alike characters +- Sarnase välimusega märgid jäetakse välja +- +- +- Pick characters from every group +- Kaasatakse märke igast valitud tüübist +- +- +- &Length: +- &Pikkus: +- +- +- Passphrase +- Paroolifraas +- +- +- Wordlist: +- Sõnaloend: +- +- +- Word Separator: +- Sõnade eraldaja: +- +- +- Close +- Sulge +- +- +- Entropy: %1 bit +- Entroopia: %1 bitti +- +- +- Password Quality: %1 +- Parooli kvaliteet: %1 +- +- +- Poor +- Password quality +- kehv +- +- +- Weak +- Password quality +- nõrk +- +- +- Good +- Password quality +- hea +- +- +- Excellent +- Password quality +- suurepärane +- +- +- Switch to advanced mode +- Lülita täppisrežiimi +- +- +- Advanced +- Lisaseaded +- +- +- Braces +- Sulud +- +- +- Punctuation +- Kirjavahemärgid +- +- +- Quotes +- Jutumärgid +- +- +- Logograms +- Logogrammid +- +- +- Character set to exclude from generated password +- Märgid, mida genereeritavas paroolis esineda ei tohi +- +- +- Do not include: +- Välistatakse: +- +- +- Add non-hex letters to "do not include" list +- Lisa välistusloendisse tähed, mida 16nd-süsteemis ei kasutata +- +- +- Hex +- 16nd-süsteemis parool +- +- +- Excluded characters: "0", "1", "l", "I", "O", "|", "ï¹’" +- Määrab, kas välistada märgid nagu "0", "O", "1", "l", "I", "|", "ï¹’" +- +- +- Generated password +- Genereeritud parool +- +- +- Upper-case letters +- Suurtähed +- +- +- Lower-case letters +- Väiketähed +- +- +- Special characters +- Erimärgid +- +- +- Math Symbols +- Matemaatikasümbolid +- +- +- Dashes and Slashes +- Kriipsud +- +- +- Excluded characters +- Välistatud märgid +- +- +- Hex Passwords +- 16nd-paroolid +- +- +- Password length +- Parooli pikkus +- +- +- Word Case: +- Täheregister: +- +- +- Regenerate password +- Genereeri uus parool +- +- +- Copy password +- Kopeeri parool +- +- +- lower case +- väiketähed +- +- +- UPPER CASE +- SUURTÄHED +- +- +- Title Case +- Suured Esitähed +- +- +- Generate Password +- Parooli genereerimine +- +- +- Also choose from: +- Lisamärgid: +- +- +- Additional characters to use for the generated password +- Lisamägid, mille hulgast parooli genereerimisel valida +- +- +- Additional characters +- Lisamärgid +- +- +- Word Count: +- Sõnade arv: +- +- +- Esc +- Esc +- +- +- Apply Password +- Kasuta seda parooli +- +- +- Ctrl+S +- Ctrl+S +- +- +- Regenerate password (%1) +- Genereeri uus parool (%1) +- +- +- Special Characters +- Erimärgid +- +- +- +- QApplication +- +- KeeShare +- KeeShare +- +- +- Statistics +- Statistika +- +- +- Very weak password +- Väga nõrk parool +- +- +- Password entropy is %1 bits +- Parooli entroopia on %1 bitti +- +- +- Weak password +- Nõrk parool +- +- +- Used in %1/%2 +- Kasutuskoht: %1/%2 +- +- +- Password is used %1 times +- Parooli on kasutatud %1 korda +- +- +- Password has expired +- Parool on aegunud +- +- +- Password expiry was %1 +- Parool aegus %1 +- +- +- Password is about to expire +- Parool aegub lähipäevil +- +- +- Password expires in %1 days +- Parool aegub %1 päeva pärast +- +- +- Password will expire soon +- Parool aegub varsti +- +- +- Password expires on %1 +- Parool aegub %1 +- +- +- Health Check +- Tervisekontroll +- +- +- HIBP +- HIBP +- +- +- +- QMessageBox +- +- Overwrite +- Kirjuta üle +- +- +- Delete +- Kustuta +- +- +- Move +- Viska +- +- +- Empty +- &Tühjenda +- +- +- Remove +- Eemalda +- +- +- Skip +- Jäta vahele +- +- +- Disable +- Keela +- +- +- Merge +- Mesti +- +- +- Continue +- &Jätka +- +- +- +- QObject +- +- Database not opened +- Andmebaasi pole avatud +- +- +- Database hash not available +- Andmebaasi räsi pole saadaval +- +- +- Client public key not received +- Kliendi avalikku võtit ei saadud +- +- +- Cannot decrypt message +- Sõnumi lahtikrüptimine pole võimalik +- +- +- Action cancelled or denied +- +- +- +- KeePassXC association failed, try again +- +- +- +- Encryption key is not recognized +- +- +- +- Incorrect action +- +- +- +- Empty message received +- +- +- +- No URL provided +- URL-i ei antud +- +- +- No logins found +- +- +- +- Unknown error +- Tundmatu viga +- +- +- Add a new entry to a database. +- Uue kirje lisamine andmebaasi. +- +- +- Path of the database. +- Andmebaasi asukoht. +- +- +- Key file of the database. +- Andmebaasi võtmefail. +- +- +- path +- asukoht +- +- +- Username for the entry. +- Kirje kasutajanimi. +- +- +- username +- kasutajanimi +- +- +- URL for the entry. +- Kirje URL. +- +- +- URL +- URL +- +- +- Prompt for the entry's password. +- Kirje parooli küsitakse. +- +- +- Generate a password for the entry. +- Kirjele genereeritakse parool. +- +- +- length +- pikkus +- +- +- Path of the entry to add. +- Lisatava kirje asukoht. +- +- +- Path of the entry to clip. +- clip = copy to clipboard +- Lõikepuhvrisse kopeeritava kirje asukoht. +- +- +- Timeout in seconds before clearing the clipboard. +- Lõikepuhvri puhastamise viivitus sekundites. +- +- +- Edit an entry. +- Kirje muutmine. +- +- +- Title for the entry. +- Kirje pealkiri +- +- +- title +- pealkiri +- +- +- Path of the entry to edit. +- Muudetava kirje asukoht. +- +- +- Estimate the entropy of a password. +- Parooli entroopia hindamine. +- +- +- Password for which to estimate the entropy. +- Parool, mille entroopiat hinnata. +- +- +- Perform advanced analysis on the password. +- +- +- +- +- +-Available commands: +- +- +- +-Võimalikud käsud: +- +- +- +- Name of the command to execute. +- Käivitatava käsu nimi. +- +- +- List database entries. +- Andmebaasi kirjete loetlemine. +- +- +- Path of the group to list. Default is / +- Loetletava grupi asukoht andmebaasis. Vaikimisi / +- +- +- Find entries quickly. +- Kirjete kiiresti leidmine. +- +- +- Search term. +- Otsingusõna. +- +- +- Merge two databases. +- Kahe andmebaasi mestimine. +- +- +- Path of the database to merge from. +- Mestitava andmebaasi asukoht. +- +- +- Use the same credentials for both database files. +- Mõlema andmebaasi luku avamiseks kasutatakse samu tunnuseid. +- +- +- Key file of the database to merge from. +- Mestitava andmebaasi võtmefail. +- +- +- Show an entry's information. +- Kirje teabe näitamine. +- +- +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- Näidatavate atribuutide nimed. Selle võtme võib anda ka mitu korda, sel juhul näidatakse atribuute vastavas järjestuses, üks igal real. Kui atribuute ei määrata, esitatakse kokkuvõte vaikeatribuutidest. +- +- +- attribute +- atribuut +- +- +- Name of the entry to show. +- Näidatava kirje nimi. +- +- +- NULL device +- NULL-seade +- +- +- error reading from device +- viga seadmest lugemisel +- +- +- malformed string +- vigane string +- +- +- missing closing quote +- puuduv lõpujutumärk +- +- +- Group +- Grupp +- +- +- Title +- Pealkiri +- +- +- Username +- Kasutajanimi +- +- +- Password +- Parool +- +- +- Notes +- Märkmed +- +- +- Last Modified +- Muudetud +- +- +- Created +- Loodud +- +- +- Browser Integration +- Brauserilõiming +- +- +- SSH Agent +- SSH agent +- +- +- Generate a new random diceware passphrase. +- Uue juhusliku Diceware'i paroolifraasi genereerimine. +- +- +- Word count for the diceware passphrase. +- Sõnade arv Diceware'i paroolifraasis. +- +- +- Wordlist for the diceware generator. +-[Default: EFF English] +- Diceware'i generaatori kasutatav sõnaloend. +-[Vaikimisi: EFF English] +- +- +- Generate a new random password. +- Uue juhusliku parooli genereerimine. +- +- +- Could not create entry with path %1. +- Kirjet asukohaga "%1" pole võimalik luua. +- +- +- Enter password for new entry: +- Sisesta uue kirje parool: +- +- +- Writing the database failed %1. +- Andmebaasi kirjutamine ebaõnnestus: %1 +- +- +- Successfully added entry %1. +- Kirje "%1" edukalt lisatud. +- +- +- Invalid timeout value %1. +- Sobimatu viivituse väärtus %1. +- +- +- Entry %1 not found. +- Kirjet "%1" ei leitud. +- +- +- Entry with path %1 has no TOTP set up. +- Kirjel asukohas "%1" pole TOTP-d seadistatud. +- +- +- Clearing the clipboard in %1 second(s)... +- Lõikepuhver puhastatakse %1 sekundi pärast...Lõikepuhver puhastatakse %1 sekundi pärast... +- +- +- Clipboard cleared! +- Lõikepuhver puhastatud! +- +- +- Silence password prompt and other secondary outputs. +- Parooliviiba jm teisese väljundi vaigistamine. +- +- +- count +- CLI parameter +- arv +- +- +- Could not find entry with path %1. +- Kirjet asukohaga "%1" ei leitud. +- +- +- Not changing any field for entry %1. +- +- +- +- Enter new password for entry: +- Sisesta kirje uus parool: +- +- +- Writing the database failed: %1 +- Andmebaasi kirjutamine ebaõnnestus: %1 +- +- +- Successfully edited entry %1. +- Kirje "%1" edukalt muudetud. +- +- +- Length %1 +- Pikkus: %1 +- +- +- Entropy %1 +- Entroopia: %1 +- +- +- Log10 %1 +- Log10: %1 +- +- +- Multi-word extra bits %1 +- +- +- +- Type: Bruteforce +- +- +- +- Type: Dictionary +- +- +- +- Type: Dict+Leet +- +- +- +- Type: User Words +- +- +- +- Type: User+Leet +- +- +- +- Type: Repeated +- +- +- +- Type: Sequence +- +- +- +- Type: Spatial +- +- +- +- Type: Date +- +- +- +- Type: Bruteforce(Rep) +- +- +- +- Type: Dictionary(Rep) +- +- +- +- Type: Dict+Leet(Rep) +- +- +- +- Type: User Words(Rep) +- +- +- +- Type: User+Leet(Rep) +- +- +- +- Type: Repeated(Rep) +- +- +- +- Type: Sequence(Rep) +- +- +- +- Type: Spatial(Rep) +- +- +- +- Type: Date(Rep) +- +- +- +- Type: Unknown%1 +- +- +- +- Entropy %1 (%2) +- Entroopia: %1 (%2) +- +- +- *** Password length (%1) != sum of length of parts (%2) *** +- *** Parooli pikkus (%1) != osade pikkuse summa (%2) *** +- +- +- Failed to load key file %1: %2 +- Võtmefaili %1 laadimine ebaõnnestus: %2 +- +- +- Length of the generated password +- Genereeritava parooli pikkus. +- +- +- Use lowercase characters +- Kasutatakse väiketähti. +- +- +- Use uppercase characters +- Kasutatakse suurtähti. +- +- +- Use special characters +- Kasutatakse erimärke. +- +- +- Use extended ASCII +- Kasutatakse laiendatud ASCII märke. +- +- +- Exclude character set +- Välistatavad märgid. +- +- +- chars +- märgid +- +- +- Exclude similar looking characters +- Sarnase välimusega märgid jäetakse välja. +- +- +- Include characters from every selected group +- Kaasatakse märke igast valitud tüübist. +- +- +- Recursively list the elements of the group. +- Grupi elementide rekursiivne loetlemine. +- +- +- Cannot find group %1. +- Gruppi %1 ei leitud. +- +- +- Error reading merge file: +-%1 +- Viga mestitava faili lugemisel: +-%1 +- +- +- Unable to save database to file : %1 +- Andmebaasi failiks salvestamine ebaõnnestus: %1 +- +- +- Unable to save database to file: %1 +- Andmebaasi failiks salvestamine ebaõnnestus: %1 +- +- +- Successfully recycled entry %1. +- Kirje "%1" edukalt prügikasti visatud. +- +- +- Successfully deleted entry %1. +- Kirje "%1" edukalt kustutatud. +- +- +- Show the entry's current TOTP. +- Kirje praeguse TOTP näitamine. +- +- +- ERROR: unknown attribute %1. +- VIGA: tundmatu atribuut %1. +- +- +- No program defined for clipboard manipulation +- Lõikepuhvri käsitlemise programmi pole määratud. +- +- +- file empty +- fail on tühi +- +- +- %1: (row, col) %2,%3 +- %1: (rida, veerg) %2,%3 +- +- +- AES-KDF (KDBX 4) +- AES-KDF (KDBX 4) +- +- +- AES-KDF (KDBX 3.1) +- AES-KDF (KDBX 3.1) +- +- +- Invalid Settings +- TOTP +- Sobimatu seadistus +- +- +- Invalid Key +- TOTP +- Sobimatu võti +- +- +- Message encryption failed. +- Sõnumi krüptimine ebaõnnestus. +- +- +- No groups found +- Ãœhtegi gruppi ei leitud +- +- +- Create a new database. +- Uue andmebaasi loomine. +- +- +- File %1 already exists. +- Fail %1 on juba olemas. +- +- +- Loading the key file failed +- Võtmefaili laadimine ebaõnnestus +- +- +- No key is set. Aborting database creation. +- Võtit pole määratud. Andmebaasi ei looda. +- +- +- Failed to save the database: %1. +- Andmebaasi salvestamine ebaõnnestus: %1. +- +- +- Successfully created new database. +- Uus andmebaas edukalt loodud. +- +- +- Creating KeyFile %1 failed: %2 +- Võtmefaili %1 loomine ebaõnnestus: %2 +- +- +- Loading KeyFile %1 failed: %2 +- Võtmefaili %1 laadimine ebaõnnestus: %2 +- +- +- Path of the entry to remove. +- Eemaldatava kirje asukoht. +- +- +- Existing single-instance lock file is invalid. Launching new instance. +- Olemasoleva ainuprotsessi lukufail on sobimatu. Käivitatakse uus protsess. +- +- +- The lock file could not be created. Single-instance mode disabled. +- Lukufaili loomine ei õnnestunud. Ainuprotsessi režiim välja lülitatud. +- +- +- KeePassXC - cross-platform password manager +- KeePassXC - mitmeplatvormne paroolihaldur +- +- +- filenames of the password databases to open (*.kdbx) +- Avatavate parooliandmebaaside failinimed (*.kdbx). +- +- +- path to a custom config file +- Kohandatud seadistusfaili asukoht. +- +- +- key file of the database +- Andmebaasi võtmefail. +- +- +- read password of the database from stdin +- Andmebaasi parooli lugemine standardsisendist (stdin). +- +- +- Another instance of KeePassXC is already running. +- Teine KeePassXC protsess juba töötab. +- +- +- Fatal error while testing the cryptographic functions. +- Parandamatu tõrge krüptograafiafunktsioonide testimisel. +- +- +- KeePassXC - Error +- Viga - KeePassXC +- +- +- Database password: +- Andmebaasi parool: +- +- +- Cannot create new group +- Uue grupi loomine ebaõnnestus. +- +- +- Deactivate password key for the database. +- Andmebaasi paroolivõtme desaktiveerimine. +- +- +- Displays debugging information. +- Silumisteabe näitamine. +- +- +- Deactivate password key for the database to merge from. +- Mestitava andmebaasi paroolivõtme desaktiveerimine. +- +- +- Version %1 +- versioon %1 +- +- +- Build Type: %1 +- Järgu tüüp: %1 +- +- +- Revision: %1 +- Redaktsioon: %1 +- +- +- Distribution: %1 +- Distributsioon: %1 +- +- +- Debugging mode is disabled. +- Silumisrežiim on välja lülitatud. +- +- +- Debugging mode is enabled. +- Silumisrežiim on sisse lülitatud. +- +- +- Operating system: %1 +-CPU architecture: %2 +-Kernel: %3 %4 +- Operatsioonisüsteem: %1 +-CPU-arhitektuur: %2 +-Kernel: %3 %4 +- +- +- Auto-Type +- Automaatsisestus +- +- +- KeeShare (signed and unsigned sharing) +- KeeShare (allkirjastatud ja allkirjastamata) +- +- +- KeeShare (only signed sharing) +- KeeShare (ainult allkirjastatud) +- +- +- KeeShare (only unsigned sharing) +- KeeShare (ainult allkirjastamata) +- +- +- YubiKey +- YubiKey +- +- +- TouchID +- TouchID +- +- +- None +- Puudub +- +- +- Enabled extensions: +- Lubatud laiendused: +- +- +- Cryptographic libraries: +- Krüptograafiateegid: +- +- +- Cannot generate a password and prompt at the same time! +- Parooli ei saa ühtaegu küsida ja automaatselt genereerida! +- +- +- Adds a new group to a database. +- Uue grupi lisamine andmebaasi. +- +- +- Path of the group to add. +- Lisatava grupi asukoht andmebaasis. +- +- +- Group %1 already exists! +- Grupp "%1" on juba olemas. +- +- +- Group %1 not found. +- Gruppi "%1" ei leitud. +- +- +- Successfully added group %1. +- Grupp "%1" edukalt lisatud. +- +- +- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. +- Kontrollimine, kas mõni parool on lekkinud. FAILINIMI peab olema fail (koos asukohaga), mis sisaldab lekkinud paroolide HIBP vormingus SHA-1 räsisid, nagu need on saadaval veebilehel https://haveibeenpwned.com/Passwords. +- +- +- FILENAME +- FAILINIMI +- +- +- Analyze passwords for weaknesses and problems. +- Paroolide analüüsimine nõrkuste ja probleemide leidmiseks. +- +- +- Failed to open HIBP file %1: %2 +- HIBP-faili %1 avamine ebaõnnestus: %2 +- +- +- Evaluating database entries against HIBP file, this will take a while... +- Andmebaasi kirjete võrdlemine HIBP-failiga võtab mõnevõrra aega... +- +- +- Close the currently opened database. +- Parajasti avatud andmebaasi sulgemine. +- +- +- Display this help. +- Selle abi näitamine. +- +- +- slot +- pesa +- +- +- Invalid word count %1 +- Sobimatu sõnade arv %1 +- +- +- The word list is too small (< 1000 items) +- Sõnaloend on liiga väike (< 1000 elementi) +- +- +- Exit interactive mode. +- +- +- +- Exports the content of a database to standard output in the specified format. +- Andmebaasi sisu määratavas vormingus standardväljundisse eksportimine. +- +- +- Unable to export database to XML: %1 +- Andmebaasi eksportimine XML-iks pole võimalik: %1 +- +- +- Unsupported format %1 +- Toetamata vorming %1 +- +- +- Use numbers +- +- +- +- Invalid password length %1 +- Sobimatu parooli pikkus %1 +- +- +- Display command help. +- Käsu abi näitamine. +- +- +- Available commands: +- Võimalikud käsud: +- +- +- Import the contents of an XML database. +- XML-andmebaasi sisu importimine. +- +- +- Path of the XML database export. +- Eksporditava XML-andmebaasi asukoht. +- +- +- Path of the new database. +- Uue andmebaasi asukoht. +- +- +- Successfully imported database. +- Andmebaas edukalt imporditud. +- +- +- Unknown command %1 +- Tundmatu käsk %1 +- +- +- Flattens the output to single lines. +- +- +- +- Only print the changes detected by the merge operation. +- +- +- +- Yubikey slot for the second database. +- Teise andmebaasi YubiKey pesa. +- +- +- Successfully merged %1 into %2. +- %1 edukalt %2-isse mestitud. +- +- +- Database was not modified by merge operation. +- Mestimise käigus andmebaasi ei muudetud. +- +- +- Moves an entry to a new group. +- Kirje teisaldamine uude gruppi. +- +- +- Path of the entry to move. +- Teisaldatava kirje asukoht. +- +- +- Path of the destination group. +- Sihtgrupi asukoht. +- +- +- Could not find group with path %1. +- Gruppi asukohaga "%1" ei leitud. +- +- +- Entry is already in group %1. +- Kirje on juba grupis %1. +- +- +- Successfully moved entry %1 to group %2. +- Kirje "%1" edukalt gruppi "%2" teisaldatud. +- +- +- Open a database. +- Andmebaasi avamine. +- +- +- Path of the group to remove. +- Eemaldatava grupi asukoht. +- +- +- Cannot remove root group from database. +- Andmebaasi juurgruppi pole võimalik eemaldada. +- +- +- Successfully recycled group %1. +- Grupp "%1" edukalt prügikasti visatud. +- +- +- Successfully deleted group %1. +- Grupp "%1" edukalt kustutatud. +- +- +- Failed to open database file %1: not found +- Andmebaasifaili %1 avamine ebaõnnestus: faili ei leitud +- +- +- Failed to open database file %1: not a plain file +- Andmebaasifaili %1 avamine ebaõnnestus: pole lihtfail +- +- +- Failed to open database file %1: not readable +- Andmebaasifaili %1 avamine ebaõnnestus: pole loetav +- +- +- Enter password to unlock %1: +- Sisesta parool andmebaasi %1 luku avamiseks: +- +- +- Invalid YubiKey slot %1 +- Sobimatu YubiKey pesa %1 +- +- +- Enter password to encrypt database (optional): +- Sisesta parool andmebaasi krüptimiseks (pole kohustuslik): +- +- +- HIBP file, line %1: parse error +- HIBP-faili rida %1: parsimisviga +- +- +- Secret Service Integration +- Saladuste teenuse lõiming +- +- +- User name +- Kasutajanimi +- +- +- Password for '%1' has been leaked %2 time(s)! +- Kirje "%1" parool on lekkinud %2 kord!Kirje "%1" parool on lekkinud %2 korda! +- +- +- Invalid password generator after applying all options +- +- +- +- Show the protected attributes in clear text. +- Kaitstud atribuutide näitamine tavatekstina. +- +- +- Browser Plugin Failure +- +- +- +- Could not save the native messaging script file for %1. +- +- +- +- Copy the given attribute to the clipboard. Defaults to "password" if not specified. +- Määratud atribuudi kopeerimine lõikepuhvrisse. Täpsustamata jätmise korral kopeeritakse parool. +- +- +- Copy the current TOTP to the clipboard (equivalent to "-a totp"). +- Praeguse TOTP lõikepuhvrisse kopeerimine (sama nagu "-a totp"). +- +- +- Copy an entry's attribute to the clipboard. +- Kirje atribuudi kopeerimine lõikepuhvrisse. +- +- +- ERROR: Please specify one of --attribute or --totp, not both. +- VIGA: palun kasuta kas võtit --attribute või --totp, mitte aga mõlemat. +- +- +- ERROR: attribute %1 is ambiguous, it matches %2. +- +- +- +- Attribute "%1" not found. +- Atribuuti "%1" ei leitud. +- +- +- Entry's "%1" attribute copied to the clipboard! +- Kirje atribuut "%1" lõikepuhvrisse kopeeritud! +- +- +- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). +- YubiKey pesa ja valikuliselt seerianumber, mida kasutada andmebaasi luku avamiseks (nt 1:7370001). +- +- +- slot[:serial] +- pesa[:seerianr] +- +- +- Target decryption time in MS for the database. +- Andmebaasi soovitav lahtikrüptimisaeg millisekundites. +- +- +- time +- aeg +- +- +- Set the key file for the database. +- Andmebaasile võtmefaili määramine. +- +- +- Set a password for the database. +- Andmebaasile parooli määramine. +- +- +- Invalid decryption time %1. +- Sobimatu lahtikrüptimise aeg %1 +- +- +- Target decryption time must be between %1 and %2. +- Lahtikrüptimisaeg peab olema vahemikus %1 kuni %2. +- +- +- Failed to set database password. +- Andmebaasi parooli määramine ebaõnnestus. +- +- +- Benchmarking key derivation function for %1ms delay. +- +- +- +- Setting %1 rounds for key derivation function. +- +- +- +- error while setting database key derivation settings. +- +- +- +- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. +- Eksportimisel kasutatav vorming. Valida on "xml" ja "csv". Vaikimisi "xml". +- +- +- Unable to import XML database: %1 +- XML-andmebaasi importimine pole võimalik: %1 +- +- +- Show a database's information. +- Andmebaasi teabe näitamine. +- +- +- UUID: +- UUID: +- +- +- Name: +- Nimi: +- +- +- Description: +- Kirjeldus: +- +- +- Cipher: +- Å iffer: +- +- +- KDF: +- KDF: +- +- +- Recycle bin is enabled. +- Prügikasti lubamine. +- +- +- Recycle bin is not enabled. +- Prügikasti keelamine. +- +- +- Invalid command %1. +- Sobimatu käsk %1. +- +- +- Invalid YubiKey serial %1 +- Sobimatu YubiKey seerianumber %1 +- +- +- Please touch the button on your YubiKey to continue… +- Jätkamiseks vajuta oma YubiKey nuppu... +- +- +- Do you want to create a database with an empty password? [y/N]: +- Kas soovid luua tühja parooliga andmebaasi? (jah/EI) [y/N]: +- +- +- Repeat password: +- Parooli kordus: +- +- +- Error: Passwords do not match. +- Viga: paroolid ei kattu. +- +- +- All clipping programs failed. Tried %1 +- +- Kõigi lõikepuhvri käsitlemise programmide kasutamine ebaõnnestus. Proovitud: %1 +- +- +- AES (%1 rounds) +- AES (%1 raundi) +- +- +- AES 256-bit +- AES: 256-bitine +- +- +- Twofish 256-bit +- Twofish: 256-bitine +- +- +- ChaCha20 256-bit +- ChaCha20: 256-bitine +- +- +- Benchmark %1 delay +- +- +- +- %1 ms +- milliseconds +- %1 ms%1 ms +- +- +- %1 s +- seconds +- %1 s%1 s +- +- +- path to a custom local config file +- +- +- +- WARNING: You are using an old key file format which KeePassXC may +-stop supporting in the future. +- +-Please consider generating a new key file. +- +- +- +- Argon2%1 (%2 rounds, %3 KB) +- +- +- +- Argon2d (KDBX 4 – recommended) +- +- +- +- Argon2id (KDBX 4) +- +- +- +- TOTP +- &TOTP +- +- +- Icon +- Ikoon +- +- +- Unsupported key file version: %1 +- +- +- +- Checksum mismatch! Key file may be corrupt. +- +- +- +- Unexpected key file data! Key file may be corrupt. +- +- +- +- +- QtIOCompressor +- +- Internal zlib error when compressing: +- Sisemine zlib'i tõrge tihendamisel: +- +- +- Error writing to underlying device: +- +- +- +- Error opening underlying device: +- +- +- +- Error reading data from underlying device: +- +- +- +- Internal zlib error when decompressing: +- Sisemine zlib'i tõrge lahtipakkimisel: +- +- +- +- QtIOCompressor::open +- +- The gzip format not supported in this version of zlib. +- Selles zlib'i versioonis gzip-vormingut ei toetata. +- +- +- Internal zlib error: +- Sisemine zlib'i tõrge: +- +- +- +- ReportsWidgetHealthcheck +- +- Also show entries that have been excluded from reports +- Kuvatakse ka muidu aruannetest välja jäetavad kirjed +- +- +- Hover over reason to show additional details. Double-click entries to edit. +- Põhjuse kohta täpsema teabe saamiseks hoia hiirekursorit selle kohal. Kirje muutmiseks tee topeltklõps. +- +- +- Bad +- Password quality +- Kohutav +- +- +- Bad — password must be changed +- Kohutav – palun muuda parooli +- +- +- Poor +- Password quality +- Kehv +- +- +- Poor — password should be changed +- Kehv – parooli tuleks muuta +- +- +- Weak +- Password quality +- Nõrk +- +- +- Weak — consider changing the password +- Nõrk – kaalu parooli muutmist +- +- +- (Excluded) +- (välja jäetud) +- +- +- This entry is being excluded from reports +- See kirje on aruannetest välja jäetud +- +- +- Please wait, health data is being calculated... +- Palun oota, tervisehinnangute arvutamine käib… +- +- +- Congratulations, everything is healthy! +- Kõik on kõige paremas korras. Palju õnne! +- +- +- Title +- Pealkiri +- +- +- Path +- Asukoht +- +- +- Score +- Hinne +- +- +- Reason +- Põhjus +- +- +- Edit Entry... +- Muuda kirjet… +- +- +- Exclude from reports +- Jäetakse aruannetest välja +- +- +- +- ReportsWidgetHibp +- +- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. +- HOIATUS: selle aruande käigus saadetakse teavet Have I Been Pwned'i võrguteenusele (https://haveibeenpwned.com). Kui jätkad, luuakse sinu andmebaasi paroolidest krüptograafilised räsid, mille viis esimest märki seejärel turvaliselt sellele teenusele edastatakse. Sinu andmebaasi turvalisust see ei vähenda ja paroole räsi põhjal taastada ei saa. Küll aga on teenusele näha saadetud paroolide arv ja sinu IP-aadress. +- +- +- Perform Online Analysis +- Soorita interneti-analüüs +- +- +- Also show entries that have been excluded from reports +- Kuvatakse ka muidu aruannetest välja jäetavad kirjed +- +- +- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. +- KeePassXC on kompiilitud ilma võrgufunktsioonideta, aga paroolide võrdlemiseks Have I Been Pwned'i andmebaasidega on vaja võrgujuurdepääsu. +- +- +- Congratulations, no exposed passwords! +- Ãœhtegi lekkinud parooli ei leitud. Palju õnne! +- +- +- Title +- Pealkiri +- +- +- Path +- Asukoht +- +- +- Password exposed… +- Parool lekkinud… +- +- +- (Excluded) +- (välja jäetud) +- +- +- This entry is being excluded from reports +- See kirje on aruannetest välja jäetud +- +- +- once +- üks kord +- +- +- up to 10 times +- kuni 10 korda +- +- +- up to 100 times +- kuni 100 korda +- +- +- up to 1000 times +- kuni 1000 korda +- +- +- up to 10,000 times +- kuni 10 000 korda +- +- +- up to 100,000 times +- kuni 100 000 korda +- +- +- up to a million times +- kuni miljon korda +- +- +- millions of times +- miljoneid kordi +- +- +- Edit Entry... +- Muuda kirjet… +- +- +- Exclude from reports +- Jäetakse aruannetest välja +- +- +- +- ReportsWidgetStatistics +- +- Hover over lines with error icons for further information. +- Veaikooniga ridade kohta täpsema teabe saamiseks hoia hiirekursorit vastaval real. +- +- +- Name +- Nimi +- +- +- Value +- Väärtus +- +- +- Please wait, database statistics are being calculated... +- Palun oota, andmebaasi statistikat arvutatakse... +- +- +- Database name +- Andmebaasi nimi +- +- +- Description +- Kirjeldus +- +- +- Location +- Asukoht +- +- +- Last saved +- Viimati salvestanud +- +- +- Unsaved changes +- Salvestamata muudatusi +- +- +- yes +- on +- +- +- no +- pole +- +- +- The database was modified, but the changes have not yet been saved to disk. +- Andmebaasi on muudetud, kuid muudatused pole veel kettale salvestatud. +- +- +- Number of groups +- Gruppide arv +- +- +- Number of entries +- Kirjete arv +- +- +- Number of expired entries +- Aegunud kirjete arv +- +- +- The database contains entries that have expired. +- Andmebaas sisaldab aegunud kirjeid. +- +- +- Unique passwords +- Unikaalsete paroolide arv +- +- +- Non-unique passwords +- Korduvate paroolide arv +- +- +- More than 10% of passwords are reused. Use unique passwords when possible. +- Rohkem kui 10% paroolidest on kasutatud korduvalt. Kui vähegi võimalik, kasuta ainukordseid paroole. +- +- +- Maximum password reuse +- Sagedasima parooli kasutuskordade arv +- +- +- Some passwords are used more than three times. Use unique passwords when possible. +- Mõnda parooli on kasutatud enam kui kolm korda. Kui vähegi võimalik, kasuta ainukordseid paroole. +- +- +- Number of short passwords +- Lühikeste paroolide arv +- +- +- Recommended minimum password length is at least 8 characters. +- Paroolide soovituslik pikkus on vähemalt 8 märki. +- +- +- Number of weak passwords +- Nõrkade paroolide arv +- +- +- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. +- Soovitatav on kasutada pikki juhuslikest märkidest koosnevaid paroole, mille tugevushinnang on "hea" või "suurepärane". +- +- +- Entries excluded from reports +- Aruannetest väljajäetavate kirjete arv +- +- +- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. +- Kirjete aruannetest väljajätmine (nt kuna neil on teadaolevalt kehv parool) pole tingimata probleem, kuid neil tasuks silm peal hoida. +- +- +- Average password length +- Paroolide keskmine pikkus +- +- +- %1 characters +- %1 märki +- +- +- Average password length is less than ten characters. Longer passwords provide more security. +- Paroolide keskmine pikkus on alla kümne märgi. Pikemad paroolid on turvalisemad. +- +- +- +- SSHAgent +- +- Agent connection failed. +- Agendiga ühendumine ebaõnnestus. +- +- +- Agent protocol error. +- Agendi protokolliviga. +- +- +- No agent running, cannot add identity. +- +- +- +- No agent running, cannot remove identity. +- +- +- +- Agent refused this identity. Possible reasons include: +- +- +- +- The key has already been added. +- Võtmefail on juba lisatud. +- +- +- Restricted lifetime is not supported by the agent (check options). +- +- +- +- A confirmation request is not supported by the agent (check options). +- +- +- +- Key identity ownership conflict. Refusing to add. +- +- +- +- No agent running, cannot list identities. +- +- +- +- +- SearchHelpWidget +- +- Search Help +- Otsinguabi +- +- +- Search terms are as follows: [modifiers][field:]["]term["] +- Otsingusõnade süntaks on järgmine: [modifikaator][väli:]["]otsitav["] +- +- +- Every search term must match (ie, logical AND) +- Tagastatakse kirjed, mis vastavad kõigile otsingusõnadele (s.t tegu on loogilise JA-tehtega) +- +- +- Modifiers +- Modifikaatorid +- +- +- exclude term from results +- välja arvatud otsingusõna +- +- +- match term exactly +- otsingusõna täpne sobivus +- +- +- use regex in term +- otsingusõna on regulaaravaldis +- +- +- Fields +- Väljad +- +- +- Term Wildcards +- Metamärgid +- +- +- match anything +- suvaline märgijada +- +- +- match one +- suvaline üks märk +- +- +- logical OR +- loogiline VÕI +- +- +- Examples +- Näited +- +- +- +- SearchWidget +- +- Search +- Otsimine +- +- +- Limit search to selected group +- Otsitakse ainult valitud grupist +- +- +- Search Help +- Otsinguabi +- +- +- Search (%1)... +- Search placeholder text, %1 is the keyboard shortcut +- Otsing (%1) +- +- +- Case sensitive +- Tõstutundlik +- +- +- +- SettingsWidgetFdoSecrets +- +- Options +- Seaded +- +- +- Enable KeepassXC Freedesktop.org Secret Service integration +- KeePassXC Freedesktop.org-i saladuste teenuse lõimingu lubamine +- +- +- General +- Ãœldine +- +- +- Show notification when credentials are requested +- Tunnuste taotlemisel kuvatakse märguanne +- +- +- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> +- <html><head/><body><p>Kui andmebaasi prügikast on sisse lülitatud, teisaldatakse kirjed sinna, muul juhul kustutatakse kohe lõplikult.</p><p>Kui kustutatavale kirjele viitab mõni teine kirje, küsitakse siiski kinnitust ka siis, kui see märkeruut on märgitud.</p></body></html> +- +- +- Exposed database groups: +- Nähtavaks tehtud grupid andmebaasides: +- +- +- Authorization +- Autentimine +- +- +- These applications are currently connected: +- Need rakendused on praegu ühendatud: +- +- +- Don't confirm when entries are deleted by clients +- Klientidel lubatakse kirjeid kinnituseta kustutada +- +- +- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. +- <b>Viga:</b> DBus'iga ühendumine ebaõnnestus. Palun kontrolli oma DBus'i seadistust. +- +- +- <b>Warning:</b> +- <b>Hoiatus:</b> +- +- +- Save current changes to activate the plugin and enable editing of this section. +- Plugina aktiveerimiseks ja selle jaotise muutmise võimaldamiseks salvesta esmalt tehtud muudatused. +- +- +- +- SettingsWidgetKeeShare +- +- Active +- Aktiveerimine +- +- +- Allow export +- Eksportimine lubatud +- +- +- Allow import +- Importimine lubatud +- +- +- Own certificate +- Oma sertifikaat +- +- +- Fingerprint: +- Sõrmejälg: +- +- +- Certificate: +- Sertifikaat: +- +- +- Signer +- Allkirjastaja +- +- +- Key: +- Võti: +- +- +- Generate +- Genereeri +- +- +- Import +- Impordi +- +- +- Export +- Ekspordi +- +- +- Imported certificates +- Imporditud sertifikaadid +- +- +- Trust +- Usalda +- +- +- Ask +- Küsi +- +- +- Untrust +- Ära usalda +- +- +- Remove +- Eemalda +- +- +- Path +- Asukoht +- +- +- Status +- Olek +- +- +- Fingerprint +- Sõrmejälg +- +- +- Certificate +- Sertifikaat +- +- +- Trusted +- Usaldatav +- +- +- Untrusted +- Mitteusaldatav +- +- +- Unknown +- Teadmata +- +- +- key.share +- Filetype for KeeShare key +- key.share +- +- +- KeeShare key file +- KeeShare'i võtmefail +- +- +- All files +- Kõik failid +- +- +- Select path +- Asukoha valimine +- +- +- Exporting changed certificate +- +- +- +- The exported certificate is not the same as the one in use. Do you want to export the current certificate? +- +- +- +- Signer: +- Allkirjastaja: +- +- +- Allow KeeShare imports +- Märkimisel lubatakse KeeShare'i importimine +- +- +- Allow KeeShare exports +- Märkimisel lubatakse KeeShare'i eksportimine +- +- +- Only show warnings and errors +- Kuvatakse ainult hoiatused ja veateated +- +- +- Key +- Võti +- +- +- Signer name field +- Allkirjastaja nime väli +- +- +- Generate new certificate +- +- +- +- Import existing certificate +- +- +- +- Export own certificate +- +- +- +- Known shares +- +- +- +- Trust selected certificate +- +- +- +- Ask whether to trust the selected certificate every time +- +- +- +- Untrust selected certificate +- +- +- +- Remove selected certificate +- +- +- +- +- ShareExport +- +- Overwriting signed share container is not supported - export prevented +- +- +- +- Could not write export container (%1) +- +- +- +- Could not embed signature: Could not open file to write (%1) +- +- +- +- Could not embed signature: Could not write file (%1) +- +- +- +- Could not embed database: Could not open file to write (%1) +- +- +- +- Could not embed database: Could not write file (%1) +- +- +- +- Overwriting unsigned share container is not supported - export prevented +- +- +- +- Could not write export container +- +- +- +- Unexpected export error occurred +- +- +- +- +- ShareImport +- +- Import from container without signature +- +- +- +- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? +- +- +- +- Import from container with certificate +- +- +- +- Do you want to trust %1 with the fingerprint of %2 from %3? +- +- +- +- Not this time +- Mitte praegu +- +- +- Never +- mitte kunagi +- +- +- Always +- Alati +- +- +- Just this time +- Ainult seekord +- +- +- Signed share container are not supported - import prevented +- +- +- +- File is not readable +- Fail ei ole loetav +- +- +- Invalid sharing container +- +- +- +- Untrusted import prevented +- +- +- +- Successful signed import +- +- +- +- Unsigned share container are not supported - import prevented +- +- +- +- Successful unsigned import +- +- +- +- File does not exist +- Faili ei ole olemas +- +- +- Unknown share container type +- +- +- +- +- ShareObserver +- +- Import from %1 failed (%2) +- +- +- +- Import from %1 successful (%2) +- +- +- +- Imported from %1 +- Imporditud asukohast "%1" +- +- +- Export to %1 failed (%2) +- +- +- +- Export to %1 successful (%2) +- +- +- +- Export to %1 +- +- +- +- Multiple import source path to %1 in %2 +- +- +- +- Conflicting export target path %1 in %2 +- +- +- +- +- TotpDialog +- +- Timed Password +- Ajastatud parool +- +- +- 000000 +- 000000 +- +- +- Copy +- Kopeeri +- +- +- Expires in <b>%n</b> second(s) +- Aegub <b>%n</b> sekundi pärastAegub <b>%n</b> sekundi pärast +- +- +- +- TotpExportSettingsDialog +- +- Copy +- Kopeeri +- +- +- NOTE: These TOTP settings are custom and may not work with other authenticators. +- TOTP QR code dialog warning +- NB: need kohandatud TOTP-seaded ei pruugi muude autentikaatoritega toimida. +- +- +- There was an error creating the QR code. +- QR-koodi loomisel ilmnes tõrge. +- +- +- Closing in %1 seconds. +- Aken sulgub %1 sekundi pärast. +- +- +- +- TotpSetupDialog +- +- Setup TOTP +- TOTP seadistamine +- +- +- Default RFC 6238 token settings +- Vaikimisi RFC 6238 volitustõendi seaded +- +- +- Steam token settings +- Steami volitustõendi seaded +- +- +- Use custom settings +- Kohandatud seaded +- +- +- Custom Settings +- Kohandatud seaded +- +- +- Time step: +- Ajaintervall: +- +- +- sec +- Seconds +- s +- +- +- Code size: +- Koodi pikkus: +- +- +- Secret Key: +- Salajane võti: +- +- +- Secret key must be in Base32 format +- Salajane võti peab olema Base32-vormingus +- +- +- Secret key field +- Salajase võtme väli +- +- +- Algorithm: +- Algoritm: +- +- +- Time step field +- Ajatempli väli +- +- +- digits +- numbrit +- +- +- Invalid TOTP Secret +- Sobimatu TOTP salavõti +- +- +- You have entered an invalid secret key. The key must be in Base32 format. +-Example: JBSWY3DPEHPK3PXP +- Sisestasid sobimatu salajase võtme. Võti peab olema Base32-vormingus. +-Näide: JBSWY3DPEHPK3PXP +- +- +- Confirm Remove TOTP Settings +- TOTP seadete eemaldamise kinnitus +- +- +- Are you sure you want to delete TOTP settings for this entry? +- Kas oled kindel, et tahad selle kirje TOTP-seaded kustutada? +- +- +- +- URLEdit +- +- Invalid URL +- Sobimatu URL +- +- +- +- UpdateCheckDialog +- +- Checking for updates +- Uuenduste kontrollimine +- +- +- Checking for updates... +- Uuenduste olemasolu kontrollimine... +- +- +- Close +- Sulge +- +- +- Update Error! +- Viga uuendamisel! +- +- +- An error occurred in retrieving update information. +- Uuenduste teabe hankimisel ilmnes viga. +- +- +- Please try again later. +- Proovi hiljem uuesti. +- +- +- Software Update +- Tarkvarauuendus +- +- +- A new version of KeePassXC is available! +- KeePassXC uus versioon on saadaval! +- +- +- KeePassXC %1 is now available — you have %2. +- Saadaval on KeePassXC %1 – sinul on %2. +- +- +- Download it at keepassxc.org +- Allalaadimiseks ava keepassxc.org +- +- +- You're up-to-date! +- Sul juba on uusim versioon! +- +- +- KeePassXC %1 is currently the newest version available +- KeePassXC %1 on praegu uusim saadaolev versioon. +- +- +- +- WelcomeWidget +- +- Start storing your passwords securely in a KeePassXC database +- Hakka oma paroole turvaliselt KeePassXC andmebaasis hoidma +- +- +- Create new database +- Loo uus andmebaas +- +- +- Open existing database +- Ava olemasolev andmebaas +- +- +- Import from KeePass 1 +- Impordi KeePass 1-st +- +- +- Import from CSV +- Impordi CSV-failist +- +- +- Recent databases +- Viimatised andmebaasid +- +- +- Welcome to KeePassXC %1 +- Tere tulemast KeePassXC %1 kasutama! +- +- +- Import from 1Password +- Impordi 1Passwordist +- +- +- Open a recent database +- Ava hiljutine andmebaas +- +- +- +- YubiKey +- +- %1 [%2] Configured Slot - %3 +- %1 [%2] seadistatud - pesa %3 +- +- +- %1 [%2] Challenge Response - Slot %3 - %4 +- %1 [%2] pretensioon-vastus - pesa %3 - %4 +- +- +- Press +- ootab vajutust +- +- +- Passive +- passiivne +- +- +- %1 Invalid slot specified - %2 +- +- +- +- The YubiKey interface has not been initialized. +- YubiKey liides pole initsialiseeritud. +- +- +- Hardware key is currently in use. +- Riistvaraline võti on hetkel kasutuses. +- +- +- Could not find hardware key with serial number %1. Please plug it in to continue. +- Riistvaralist võtit seerianumbriga %1 ei leitud. Jätkamiseks tuleb see arvutiga ühendada. +- +- +- Hardware key timed out waiting for user interaction. +- Riistvaraline võti ei jõudnud kasutaja vastust ära oodata. +- +- +- A USB error ocurred when accessing the hardware key: %1 +- Riistvaralise võtme kasutamisel ilmnes USB-tõrge: %1 +- +- +- Failed to complete a challenge-response, the specific error was: %1 +- Pretensiooni-vastuse lõpetamine ebaõnnestus. Konkreetne viga: %1 +- +- +- +- YubiKeyEditWidget +- +- Refresh +- Värskenda +- +- +- YubiKey Challenge-Response +- YubiKey pretensioon-vastus +- +- +- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- <p>Kui sul on <a href="https://www.yubico.com/">YubiKey</a>, võid lisaturvalisuse nimel seda kasutada.</p><p>Ãœhe YubiKey pesa peab programmeerima <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 pretensiooni ja vastusena</a>.</p> +- +- +- Refresh hardware tokens +- Värskenda riistvaraliste võtmete loendit +- +- +- Hardware key slot selection +- Riistvaralise võtme pesa valimine +- +- +- Could not find any hardware keys! +- Riistvaralisi võtmeid ei leitud. +- +- +- Selected hardware key slot does not support challenge-response! +- Valitud riistvaralise võtme pesa ei toeta pretensiooni-vastust. +- +- +- Detecting hardware keys… +- riistvaraliste võtmete tuvastamine… +- +- +- No hardware keys detected +- riistvaralisi võtmeid ei tuvastatud +- +- +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_fi.ts keepassxc-2.6.4-patched/share/translations/keepassx_fi.ts +--- keepassxc-2.6.4-orig/share/translations/keepassx_fi.ts 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/translations/keepassx_fi.ts 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7890 +0,0 @@ +- +- +- AboutDialog +- +- About KeePassXC +- Tietoja ohjelmasta KeePassXC +- +- +- About +- Tietoja +- +- +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- Ilmoita ongelmista: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- +- +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- KeePassXC:tä jaellaan GPL-lisenssin (GNU General Public License) version 2 tai (valintasi mukaan) version 3 ehtojen mukaisesti. +- +- +- Contributors +- Osallistujat +- +- +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Katso osallistujat GitHubista</a> +- +- +- Debug Info +- Vianjäljitystiedot +- +- +- Include the following information whenever you report a bug: +- Sisällytä seuraavat tiedot aina kun ilmoitat ongelmasta: +- +- +- Copy to clipboard +- Kopioi leikepöydälle +- +- +- Project Maintainers: +- Projektin ylläpitäjät: +- +- +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- KeePassXC-tiimi antaa erityiskiitokset KeePassX-ohjelman alkuperäiselle luojalle debfx:lle +- +- +- +- AgentSettingsWidget +- +- Use OpenSSH for Windows instead of Pageant +- Käytä Windowsissa OpenSSH:ta Pageant:in sijasta +- +- +- Enable SSH Agent integration +- Ota SSH Agentti käyttöön +- +- +- SSH_AUTH_SOCK value +- SSH_AUTH_SOCK-arvo +- +- +- SSH_AUTH_SOCK override +- SSH_AUTH_SOCK-ylikirjoitus +- +- +- (empty) +- (tyhjä) +- +- +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- SSH Agentin socketia ei ole. Varmista, että SSH_AUTH_SOCK-ympäristömuuttuja on olemassa, tai aseta sille ylikirjoitus +- +- +- SSH Agent connection is working! +- SSH Agent -yhteys toimii! +- +- +- +- ApplicationSettingsWidget +- +- Application Settings +- Sovelluksen asetukset +- +- +- General +- Yleistä +- +- +- Security +- Turvallisuus +- +- +- Access error for config file %1 +- Pääsyvirhe asetustiedostoon %1 +- +- +- Icon only +- Vain kuvake +- +- +- Text only +- Vain teksti +- +- +- Text beside icon +- Teksti kuvakkeen vieressä +- +- +- Text under icon +- Teksti kuvakkeen alla +- +- +- Follow style +- Seuraa tyyliä +- +- +- Reset Settings? +- Palauta asetukset? +- +- +- Are you sure you want to reset all general and security settings to default? +- Haluatko varmasti palauttaa kaikki yleiset ja turvallisuusasetukset oletuksiin? +- +- +- Monochrome (light) +- Mustavalkoinen (vaalea) +- +- +- Monochrome (dark) +- Mustavalkoinen (tumma) +- +- +- Colorful +- Värikäs +- +- +- You must restart the application to set the new language. Would you like to restart now? +- Ohjelma täytyy käynnistää uudelleen, jotta uusi kieli voidaan ottaa käyttöön. Haluatko käynnistää uudelleen nyt? +- +- +- +- ApplicationSettingsWidgetGeneral +- +- Basic Settings +- Perusasetukset +- +- +- Startup +- Käynnistys +- +- +- Start only a single instance of KeePassXC +- Käynnistä vain yksi KeePassXC-instanssi +- +- +- Minimize window at application startup +- Pienennä ikkuna ohjelman käynnistyessä +- +- +- File Management +- Tiedostohallinta +- +- +- Backup database file before saving +- Ota tietokannasta varmuuskopio ennen tallentamista +- +- +- Automatically save after every change +- Tallenna automaattisesti jokaisen muutoksen jälkeen +- +- +- Automatically reload the database when modified externally +- Lataa tietokanta automaattisesti uudelleen jos tietokantaa muokattiin muualla +- +- +- Entry Management +- Tietueiden hallinta +- +- +- Use group icon on entry creation +- Käytä ryhmän kuvaketta tietuetta luodessa +- +- +- Minimize instead of app exit +- Minimoi ohjelma sulkemisen sijasta +- +- +- Show a system tray icon +- Näytä ilmoitusalueen kuvake +- +- +- Hide window to system tray when minimized +- Piiloita pienennetty ikkuna ilmoitusalueelle +- +- +- Auto-Type +- Automaattisyöttö +- +- +- Use entry title to match windows for global Auto-Type +- Tietue on sopiva, jos sen nimi sisältyy kohdeikkunan otsikkoon yleisessä automaattisyötössä +- +- +- Use entry URL to match windows for global Auto-Type +- Tietue on sopiva, jos sen osoite sisältyy kohdeikkunan otsikkoon yleisessä automaattisyötössä +- +- +- Always ask before performing Auto-Type +- Kysy aina ennen automaattisyötön käyttämistä +- +- +- ms +- Milliseconds +- ms +- +- +- Movable toolbar +- Siirrettävä työkalupalkki +- +- +- Remember previously used databases +- Muista aiemmin käytetyt tietokannat +- +- +- Load previously open databases on startup +- Lataa aiemmin avoinna olleet tietokannat käynnistyksen yhteydessä +- +- +- Remember database key files and security dongles +- Muista tietokannan avaintiedostot ja tietoturva-avainlaitteet +- +- +- Check for updates at application startup once per week +- Tarkista päivitykset kerran viikossa sovelluksen käynnistyessä +- +- +- Include beta releases when checking for updates +- Sisällytä betajulkaisut päivityksiä tarkistaessa +- +- +- Language: +- Kieli: +- +- +- (restart program to activate) +- (aktivoi käynnistämällä ohjelma uudestaan) +- +- +- Minimize window after unlocking database +- Pienennä ikkuna tietokannan lukituksen avauksen jälkeen +- +- +- Minimize when opening a URL +- Pienennä ikkuna URL:ää avatessa +- +- +- Hide window when copying to clipboard +- Piilota ikkuna leikepöydälle kopioitaessa +- +- +- Minimize +- Pienennä +- +- +- Drop to background +- Siirrä taustalle +- +- +- Favicon download timeout: +- Faviconin latauksen aikakatkaisu: +- +- +- Website icon download timeout in seconds +- Nettisivun ikonin latauksen aikakatkaisu sekunneissa +- +- +- sec +- Seconds +- s +- +- +- Toolbar button style +- Työkalupalkin painiketyyli +- +- +- Language selection +- Kielivalinta +- +- +- Global auto-type shortcut +- Yleisen automaattisyötön pikanäppäin +- +- +- Auto-type character typing delay milliseconds +- Automaattisyötön kirjoituksen viive millisekunneissa +- +- +- Auto-type start delay milliseconds +- Automaattisyötön aloitusviive millisekunneissa +- +- +- Automatically launch KeePassXC at system startup +- Käynnistä KeePassXC automaattisesti järjestelmän käynnistyksessä +- +- +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- Tallenna tietokannat turvallisesti (ota pois käytöstä, jos tämä aiheuttaa ongelmia Dropboxin ym. kanssa) +- +- +- User Interface +- Käyttöliittymä +- +- +- Toolbar button style: +- Työkalupalkin nappien tyyli: +- +- +- Use monospaced font for notes +- Käytä tasalevyistä fonttia muistiinpanoille +- +- +- Tray icon type: +- Ilmoitusalueen ikonin tyyppi: +- +- +- Reset settings to default… +- Palauta oletusasetukset... +- +- +- Auto-Type typing delay: +- Automaattisyötön kirjoituksen viive: +- +- +- Global Auto-Type shortcut: +- Yleisen automaattisyötön pikanäppäin: +- +- +- Auto-Type start delay: +- Automaattisyötön aloitusviive: +- +- +- Automatically save when locking database +- Tallenna automaattisesti, kun tietokanta lukitaan +- +- +- Automatically save non-data changes when locking database +- Tallenna automaattisesti asetukset jotka eivät liity varsinaisiin tietoihin, kun tietokanta lukitaan +- +- +- Tray icon type +- Ilmoitusalueen ikonin tyyppi +- +- +- +- ApplicationSettingsWidgetSecurity +- +- Timeouts +- Aikakatkaisut +- +- +- Clear clipboard after +- Tyhjennä leikepöytä kun on kulunut +- +- +- sec +- Seconds +- s +- +- +- Lock databases after inactivity of +- Lukitse tietokannat jos on oltu joutilaana +- +- +- min +- minuuttia +- +- +- Forget TouchID after inactivity of +- Unohda TouchID jos on oltu joutilaana +- +- +- Convenience +- Mukavuus +- +- +- Lock databases when session is locked or lid is closed +- Lukitse tietokannat kun istunto lukitaan tai kansi suljetaan +- +- +- Forget TouchID when session is locked or lid is closed +- Unohda TouchID kun istunto lukitaan tai kansi suljetaan +- +- +- Lock databases after minimizing the window +- Lukitse tietokanta ikkunan pienennyksen jälkeen +- +- +- Re-lock previously locked database after performing Auto-Type +- Uudelleenlukitse aikaisemmin lukittu tietokanta automaattisyötön jälkeen +- +- +- Hide passwords in the entry preview panel +- Piilota salasanat tietueiden esikatselupaneelissa +- +- +- Hide entry notes by default +- Piilota tietueiden muistiinpanot +- +- +- Privacy +- Yksityisyys +- +- +- Use DuckDuckGo service to download website icons +- Käytä DuckDuckGo:ta sivustojen ikonien lataukseen +- +- +- Clipboard clear seconds +- Leikepöydän tyhjentäminen sekunneissa +- +- +- Touch ID inactivity reset +- Touch ID:n joutilaisuusasetuksen palautus +- +- +- Database lock timeout seconds +- Tietokannan lukituksen aikakatkaisu sekunneissa +- +- +- min +- Minutes +- minuuttia +- +- +- Clear search query after +- Tyhjennä hakukentän sisältö kun on kulunut +- +- +- Require password repeat when it is visible +- Vaadi salasanan toistamista, mikäli se on näkyvillä +- +- +- Hide passwords when editing them +- Piilota salasanat muokkauksen aikana +- +- +- Use placeholder for empty password fields +- Käytä paikkamerkkiä tyhjissä salasanakentissä +- +- +- +- AutoType +- +- Couldn't find an entry that matches the window title: +- Ikkunan nimeä vastaavaa tietuetta ei löytynyt: +- +- +- Auto-Type - KeePassXC +- Automaattisyöttö - KeePassXC +- +- +- Auto-Type +- Automaattisyöttö +- +- +- The Syntax of your Auto-Type statement is incorrect! +- Automaattisyötön syntaksi on virheellinen! +- +- +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- Tämän automaattisyötön komento sisältää pitkän viiveen. Oletko varma, että haluat jatkaa? +- +- +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- Tämän automaattisyötön komento sisältää hitaita näppäinpainalluksia. Oletko varma, että haluat jatkaa? +- +- +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- Tämän automaattisyötön komento sisältää parametreja joita toistetaan usein. Oletko varma, että haluat jatkaa? +- +- +- Permission Required +- Lupa vaaditaan +- +- +- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC:n täytyy saada lupa Käyttöavun kautta automaattisyötön suorittamiseen. Jos olet jo sallinut asetuksen, KeePassXC täytyy mahdollisesti käynnistää uudelleen. +- +- +- +- AutoTypeAssociationsModel +- +- Window +- Ikkuna +- +- +- Sequence +- Sekvenssi +- +- +- Default sequence +- Oletussekvenssi +- +- +- +- AutoTypeMatchModel +- +- Group +- Ryhmä +- +- +- Title +- Otsikko +- +- +- Username +- Käyttäjätunnus +- +- +- Sequence +- Sekvenssi +- +- +- +- AutoTypeMatchView +- +- Copy &username +- Kopioi käyttäjä&tunnus +- +- +- Copy &password +- Kopioi &salasana +- +- +- +- AutoTypePlatformMac +- +- Permission Required +- Lupa vaaditaan +- +- +- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC tarvitsee luvan Käyttöavun kautta Näyttötallennukseen, jotta yleinen automaattisyöttö toimisi oikein. Näyttötallennus on pakollinen ikkunan otsikkotiedon saamiseen. Jos olet jo sallinut asetuksen, KeePassXC täytyy mahdollisesti käynnistää uudelleen. +- +- +- +- AutoTypeSelectDialog +- +- Auto-Type - KeePassXC +- Automaattisyöttö - KeePassXC +- +- +- Select entry to Auto-Type: +- Valitse tietue automaattisyöttöä varten: +- +- +- Search... +- Etsi... +- +- +- +- BrowserAccessControlDialog +- +- KeePassXC - Browser Access Request +- KeePassXC - Selaimen pääsypyyntö +- +- +- %1 is requesting access to the following entries: +- %1 pyytää pääsylupaa seuraaviin tietueisiin: +- +- +- Remember access to checked entries +- Muista pääsylupa merkatuille tietueille +- +- +- Remember +- Muista +- +- +- Allow access to entries +- Salli pääsy tietueisiin +- +- +- Allow Selected +- Salli valitut +- +- +- Deny All +- Estä kaikilta +- +- +- Disable for this site +- Ota pois käytöstä tällä sivustolla +- +- +- +- BrowserEntrySaveDialog +- +- KeePassXC-Browser Save Entry +- KeePassXC-Browser - Tallenna tietue +- +- +- Ok +- Ok +- +- +- Cancel +- Peruuta +- +- +- You have multiple databases open. +-Please select the correct database for saving credentials. +- Useita tietokantoja on auki +-Valitse oikea tietokanta tietueen tallentamiseksi +- +- +- +- BrowserService +- +- KeePassXC: New key association request +- KeePassXC: Uusi avaimenliittämispyyntö +- +- +- Save and allow access +- Tallenna ja salli pääsy +- +- +- KeePassXC: Overwrite existing key? +- KeePassXC: Korvataanko olemassa oleva avain? +- +- +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- Jaettu salausavain samalla nimellä "%1" on jo olemassa. +-Haluatko korvata sen? +- +- +- KeePassXC: Update Entry +- KeePassXC: Päivitä tietue +- +- +- Do you want to update the information in %1 - %2? +- Haluatko päivittää tiedot osoitteesta %1 - %2? +- +- +- Abort +- Keskeytä +- +- +- Converting attributes to custom data… +- Muutetaan attribuutteja mukautetuiksi tiedoiksi... +- +- +- KeePassXC: Converted KeePassHTTP attributes +- KeePassXC: Muutetut KeePassHTTP-attribuutit +- +- +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- Mukautettiin attribuutit onnistuneesti %1 tietueesta. +-Siirrettiin %2 avainta mukautettuihin tietoihin. +- +- +- Successfully moved %n keys to custom data. +- Siirrettiin onnistuneesti %n avainta mukautettuihin tietoihin.Siirrettiin onnistuneesti %n avainta mukautettuihin tietoihin. +- +- +- KeePassXC: No entry with KeePassHTTP attributes found! +- KeePassXC: Tietueita KeePassHTTP-attribuuteilla ei löytynyt! +- +- +- The active database does not contain an entry with KeePassHTTP attributes. +- Aktiivinen tietokanta ei sisällä tietueita KeePassHTTP-attribuuteilla. +- +- +- KeePassXC: Legacy browser integration settings detected +- KeePassXC: Vanhoja selainintegraatioasetuksia havaittu +- +- +- KeePassXC: Create a new group +- KeePassXC: Luo uusi ryhmä +- +- +- A request for creating a new group "%1" has been received. +-Do you want to create this group? +- +- Vastaanotettiin pyyntö luoda uusi ryhmä "%1". +-Haluatko varmasti luoda tämän ryhmän? +- +- +- Your KeePassXC-Browser settings need to be moved into the database settings. +-This is necessary to maintain your current browser connections. +-Would you like to migrate your existing settings now? +- KeePassXC-Browser:in asetukset täytyy siirtää tietokannan asetuksiin. +-Tämä on välttämätöntä, jotta yhteys selainlaajennukseen säilyy muuttumattomana. +-Haluat siirtää asetukset nyt? +- +- +- Don't show this warning again +- Älä näytä tätä varoitusta uudelleen +- +- +- You have received an association request for the following database: +-%1 +- +-Give the connection a unique name or ID, for example: +-chrome-laptop. +- Olet saanut avainliittämispyynnön seuraavalle tietokannalle: +-%1 +- +-Anna yhteydelle yksilöllinen nimi tai tunniste, esimerkiksi: +-chrome-läppäri. +- +- +- +- BrowserSettingsWidget +- +- Dialog +- Dialogi +- +- +- This is required for accessing your databases with KeePassXC-Browser +- Tämä vaaditaan, jotta tietokantoja voidaan käyttää KeePassXC-Browser -selainlaajennuksella +- +- +- Enable browser integration +- Käytä selainintegraatiota +- +- +- General +- Yleistä +- +- +- Browsers installed as snaps are currently not supported. +- Snapin kautta asennetut selaimet eivät ole tällä hetkellä tuettuja. +- +- +- Enable integration for these browsers: +- Käytä integraatiota seuraaville selaimille: +- +- +- Vivaldi +- Vivaldi +- +- +- &Edge +- Edge +- +- +- Firefox +- Firefox +- +- +- Tor Browser +- Tor-selain +- +- +- Brave +- Brave +- +- +- Google Chrome +- Google Chrome +- +- +- Chromium +- Chromium +- +- +- Show a notification when credentials are requested +- Credentials mean login data requested via browser extension +- Näytä ilmoitus, kun tietueita pyydetään tietokannasta +- +- +- Request to unlock the database if it is locked +- Pyydä tietokannan avaamista, jos se on lukittu +- +- +- Only entries with the same scheme (http://, https://, ...) are returned. +- Vain tietueet samalla skeemalla (http://, https://, ...) palautetaan. +- +- +- Match URL scheme (e.g., https://...) +- URL-skeeman on sovittava yhteen (esim. https://...) +- +- +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- Palauta vain parhaat osumat tietystä osoitteesta verkkotunnuksen kaikkien osumien sijasta +- +- +- Return only best-matching credentials +- Palauta vain parhaat osumat tietystä osoitteesta verkkotunnuksen kaikkien osumien sijasta +- +- +- Returns expired credentials. String [expired] is added to the title. +- Salli vanhentuneiden tietueiden noutaminen. Teksti [vanhentunut] lisätään tietueen otsikkoon. +- +- +- Allow returning expired credentials +- Salli vanhentuneiden tietueiden noutaminen +- +- +- All databases connected to the extension will return matching credentials. +- Sallitaan tietueiden nouto kaikista tietokannoista jotka ovat yhdistetty selainlaajennukseen. +- +- +- Search in all opened databases for matching credentials +- Credentials mean login data requested via browser extension +- Etsi osumia kaikista avoimista tietokannoista +- +- +- Sort matching credentials by title +- Credentials mean login data requested via browser extension +- Järjestä vastaavat tietueet nimen mukaan +- +- +- Sort matching credentials by username +- Credentials mean login data requested via browser extension +- Järjestä vastaavat tietueet käyttäjänimen mukaan +- +- +- Advanced +- Lisäasetukset +- +- +- Never ask before accessing credentials +- Credentials mean login data requested via browser extension +- Älä koskaan varmista pääsyä tietueisiin +- +- +- Never ask before updating credentials +- Credentials mean login data requested via browser extension +- Älä koskaan varmista tietueiden päivitystä +- +- +- Do not ask permission for HTTP Basic Auth +- An extra HTTP Basic Auth setting +- Älä kysy lupaa HTTP Basic -autentikaatioon +- +- +- Automatically creating or updating string fields is not supported. +- Automaattinen lisäjonokenttien luonti tai päivittäminen ei ole tuettu +- +- +- Return advanced string fields which start with "KPH: " +- Palauta lisämerkkijonot jotka alkavat "KPH: " +- +- +- Don't display the popup suggesting migration of legacy KeePassHTTP settings. +- Älä näytä ponnahdusikkunaa, joka ehdottaa vanhojen KeePassHTTP-asetuksien muuttamista uuteen muotoon. +- +- +- Do not prompt for KeePassHTTP settings migration. +- Älä näytä ponnahdusikkunaa, joka ehdottaa vanhojen KeePassHTTP-asetuksien muuttamista uuteen muotoon. +- +- +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- Päivittää KeePassXC:n tai välitysohjelman polun automaattisesti native messaging -rajapinnan skripteihin käynnistyksen yhteydessä +- +- +- Update native messaging manifest files at startup +- Päivitä native messaging -rajapinnan skriptit automaattisesti ohjelman käynnistyessä +- +- +- Use a custom proxy location if you installed a proxy manually. +- Käytä mukautettua välitysohjelmaa mikäli olet asentanut sellaisen manuaalisesti +- +- +- Use a custom proxy location: +- Meant is the proxy for KeePassXC-Browser +- Valitse mukautettu välitysohjelma: +- +- +- Custom proxy location field +- Mukautetun välitusohjelman sijainti +- +- +- Browser for custom proxy file +- Selaa mukautettua välitysohjelman tiedostoa +- +- +- Browse... +- Button for opening file dialog +- Selaa... +- +- +- Use a custom browser configuration location: +- Mukautetun välitusohjelman sijainti: +- +- +- Browser type: +- Selaimen tyyppi: +- +- +- Toolbar button style +- Työkalupalkin painiketyyli +- +- +- Config Location: +- Asetustiedoston sijainti: +- +- +- Custom browser location field +- Mukautetun selaimen sijaintikenttä +- +- +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- +- +- Browse for custom browser path +- Selaa mukautetun selaimen polkua +- +- +- Custom extension ID: +- Mukautetun selainlaajennuksen ID: +- +- +- Custom extension ID +- Mukautetun selainlaajennuksen ID +- +- +- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 +- Snap:in hiekkalaatikon takia sinun täytyy suorittaa komentosarja jotta voit aktivoida selainintegraation.<br />Voit ladata komentosarjan osoitteesta %1 +- +- +- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 +- KeePassXC-Browser tarvitaan selainintegraation toimimista varten.<br />Lataa se seuraaville selaimille: %1, %2 ja %3. %4 +- +- +- Please see special instructions for browser extension use below +- Katso yksityiskohtaisemmat ohjeet selainlaajennuksen käyttöön alta +- +- +- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. +- <b>Virhe:</b> Mukautetun välitysohjelman sijaintia ei löydy!<br/>Selainintegraatio EI TOIMI ilman välitysohjelmaa. +- +- +- <b>Warning:</b> The following options can be dangerous! +- <b>Varoitus:</b> Seuraavat valinnat voivat olla vaarallisia! +- +- +- Executable Files +- Suoritettavat tiedostot +- +- +- All Files +- Kaikki tiedostot +- +- +- Select custom proxy location +- Valitse mukautettu välitysohjelma +- +- +- Select native messaging host folder location +- Valitse native messaging -isännän hakemiston sijainti +- +- +- +- CloneDialog +- +- Clone Options +- Kloonausasetukset +- +- +- Append ' - Clone' to title +- Lisää ' - Klooni' otsikkoon +- +- +- Replace username and password with references +- Korvaa käyttäjänimi ja salasana viittauksilla +- +- +- Copy history +- Kopiointihistoria +- +- +- +- CsvImportWidget +- +- Import CSV fields +- Tuo CSV-kentät +- +- +- filename +- tiedostonimi +- +- +- size, rows, columns +- koko, rivit, sarakkeet +- +- +- Encoding +- Koodaus +- +- +- Codec +- Koodekki +- +- +- Text is qualified by +- Teksti on määritelty merkeillä +- +- +- Fields are separated by +- Kentät erottaa +- +- +- Comments start with +- Kommentit alkavat +- +- +- Consider '\' an escape character +- Käsittele merkkiä '\' escape-merkkinä +- +- +- Preview +- Esikatselu +- +- +- Imported from CSV file +- Tuotu CSV-tiedostosta +- +- +- Original data: +- Alkuperäiset tiedot: +- +- +- Error +- Virhe +- +- +- Error(s) detected in CSV file! +- CSV-tiedostossa havaittiin virhe/virheitä! +- +- +- [%n more message(s) skipped] +- [%n more message(s) skipped][%n kappaletta viestejä ohitettiin] +- +- +- CSV import: writer has errors: +-%1 +- CSV-tuonti: kirjoituksessa on virheitä: +-%1 +- +- +- Text qualification +- Tekstin määrittely +- +- +- Field separation +- Kenttäerotus +- +- +- Number of header lines to discard +- Hylättävissä olevien otsakerivien lukumäärä +- +- +- CSV import preview +- CSV-tuonnin esikatselu +- +- +- Column Association +- Sarakkeen liitos +- +- +- Last Modified +- Viimeksi muokattu +- +- +- Password +- Salasana +- +- +- Created +- Luotu +- +- +- Notes +- Muistiinpanot +- +- +- Title +- Otsikko +- +- +- Group +- Ryhmä +- +- +- URL +- URL +- +- +- Username +- Käyttäjätunnus +- +- +- Header lines skipped +- Otsakerivejä ohitettu +- +- +- First line has field names +- Ensimmäinen rivi sisältää kentän nimet +- +- +- Not Present +- Ei löydy +- +- +- Column %1 +- Sarake %1 +- +- +- TOTP +- TOTP +- +- +- Icon +- Kuvake +- +- +- +- CsvParserModel +- +- %n column(s) +- %n sarake.%n saraketta +- +- +- %1, %2, %3 +- file info: bytes, rows, columns +- %1, %2, %3 +- +- +- %n byte(s) +- %n tavu%n tavua +- +- +- %n row(s) +- %n rivi%n riviä +- +- +- +- Database +- +- File %1 does not exist. +- Tiedostoa %1 ei ole. +- +- +- Unable to open file %1. +- Tiedostoa %1 ei voitu avata. +- +- +- Error while reading the database: %1 +- Virhe tietokantaa luettaessa: %1 +- +- +- File cannot be written as it is opened in read-only mode. +- Tiedostoa ei voitu tallentaa, sillä se on avattu vain lukuoikeuksin. +- +- +- Key not transformed. This is a bug, please report it to the developers! +- Avainmuunnosta ei voitu suorittaa. Ole hyvä ja ilmoita tästä virheestä sovelluksen kehittäjille. +- +- +- %1 +-Backup database located at %2 +- %1 +-Tietokannan varmuuskopio paikannettu: %2 +- +- +- Could not save, database does not point to a valid file. +- Tallennus ei onnistu. Tietokanta ei osoita validiin tiedostoon. +- +- +- Could not save, database file is read-only. +- Ei voitu tallentaa, tietokantatiedosto on vain luettavassa muodossa. +- +- +- Database file has unmerged changes. +- Tietokannalla on muutoksia joita ei ole yhdistetty. +- +- +- Recycle Bin +- Roskakori +- +- +- Passwords +- Root group name +- Salasanat +- +- +- Database save is already in progress. +- Tietokannan tallennus on jo käynnissä. +- +- +- Could not save, database has not been initialized! +- Tallennus ei onnistu, tietokantaa ei ole alustettu! +- +- +- +- DatabaseOpenDialog +- +- Unlock Database - KeePassXC +- Avaa tietokanta - KeePassXC +- +- +- +- DatabaseOpenWidget +- +- Key File: +- Avaintiedosto: +- +- +- Refresh +- Päivitä +- +- +- Don't show this warning again +- Älä näytä tätä varoitusta uudelleen +- +- +- All files +- Kaikki tiedostot +- +- +- Key files +- Avaintiedostot +- +- +- Select key file +- Valitse avaintiedosto +- +- +- Failed to open key file: %1 +- Avaintiedoston avaus epäonnistui: %1 +- +- +- Unlock KeePassXC Database +- Avaa KeePassXC-tietokannan lukitus +- +- +- Enter Password: +- Syötä salasana: +- +- +- Password field +- Salasanakenttä +- +- +- Hardware key slot selection +- Laiteavaimen paikan valinta +- +- +- Browse for key file +- Selaa avaintiedostoa +- +- +- Browse... +- Selaa... +- +- +- Refresh hardware tokens +- Uudista laitetunnisteet +- +- +- Hardware Key: +- Laiteavain: +- +- +- Hardware key help +- Laiteavaimen apu +- +- +- TouchID for Quick Unlock +- TouchID Pika-Avaukseen +- +- +- Unlock failed and no password given +- Avaus epäonnistui, eikä salasanaa ole annettu +- +- +- Unlocking the database failed and you did not enter a password. +-Do you want to retry with an "empty" password instead? +- +-To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. +- Tietokannan avaus epäonnistui, eikä salasanaa ole syötetty. +-Haluat koittaa uudestaan tyhjällä salasanalla? +- +-Jos et halua nähdä tätä virhettä uudestaan, mene "Tietokannan asetukset / Turvallisuus" ja muuta salasanaasi. +- +- +- Retry with empty password +- Yritä uudelleen tyhjällä salasanalla +- +- +- Enter Additional Credentials (if any): +- Syötä lisätietueita (mikäli niitä on): +- +- +- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +-<p>Click for more information...</p> +- <p>Voit käyttää laiteavainta, kuten <strong>Yubikey:tä</strong> tai <strong>Onlykey:tä</strong> HMAC-SHA1 -asetuksella olevan paikan kanssa.</p> +-<p>Lisätietoja tästä...</p> +- +- +- Key file help +- Avaintiedoston ohje +- +- +- ? +- ? +- +- +- Cannot use database file as key file +- Tietokantaa ei voida käyttää avaintiedostona +- +- +- You cannot use your database file as a key file. +-If you do not have a key file, please leave the field empty. +- Et voi käyttää tietokantaasi avaintiedostona. +-Jos sinulla ei ole avaintiedostoa, jätä kenttä tyhjäksi. +- +- +- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> +- <p>Pääsalasanan lisäksi voit käyttää salaista tiedostoa tietokantasi tietoturvan vahvistamiseksi. Tämä tiedosto voidaan tarvittaessa luoda tietokantasi turvallisuusasetuksista.</p><p>Tämä salainen tiedosto <strong>ei</strong> ole *.kdbx -tietokantatiedosto!<br>Jos sinulla ei ole avaintiedostoa, jätä kenttä tyhjäksi.</p><p>Lisätietoja tästä...</p> +- +- +- Key file to unlock the database +- Avaintiedosto tietokannan avaukseen +- +- +- Please touch the button on your YubiKey! +- Kosketa YubiKeyssa olevaa painiketta! +- +- +- Detecting hardware keys… +- Etsitään laiteavaimia... +- +- +- No hardware keys detected +- Laiteavaimia ei havaittu +- +- +- Select hardware key… +- Valitse laiteavain... +- +- +- Old key file format +- +- +- +- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> +- +- +- +- +- DatabaseSettingWidgetMetaData +- +- Passwords +- Salasanat +- +- +- +- DatabaseSettingsDialog +- +- Advanced Settings +- Lisäasetukset +- +- +- General +- Yleistä +- +- +- Security +- Turvallisuus +- +- +- Encryption Settings +- Salausasetukset +- +- +- Browser Integration +- Selainintegraatio +- +- +- Database Credentials +- Tietokannan tietueet +- +- +- +- DatabaseSettingsWidgetBrowser +- +- KeePassXC-Browser settings +- KeePassXC-Browser -asetukset +- +- +- Stored keys +- Tallennetut avaimet +- +- +- Remove +- Poista +- +- +- Delete the selected key? +- Poista valittu avain? +- +- +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- Haluatko poistaa valitun avaimen? +-Tämä voi estää yhteyden selainlaajennukseen. +- +- +- Key +- Avain +- +- +- Value +- Arvo +- +- +- Enable Browser Integration to access these settings. +- Käytä selainintegraatiota käyttääksesi näitä asetuksia. +- +- +- Disconnect all browsers +- Unohda kaikki selaimet +- +- +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- Haluatko todella unohtaa kaikki selaimet? +-Tämä voi estää yhteyden selainlaajennukseen. +- +- +- KeePassXC: No keys found +- KeePassXC: Avaimia ei löytynyt +- +- +- No shared encryption keys found in KeePassXC settings. +- Jaettuja salausavaimia ei löytynyt KeePassXC:n asetuksista. +- +- +- KeePassXC: Removed keys from database +- KeePassXC: Poistettiin avaimet tietokannasta +- +- +- Successfully removed %n encryption key(s) from KeePassXC settings. +- %n salausavain poistettiin onnistuneesti KeePassXC:n asetuksista.%n salausavainta poistettiin onnistuneesti KeePassXC:n asetuksista. +- +- +- Forget all site-specific settings on entries +- Unohda kaikki sivustokohtaiset asetukset tietueilta +- +- +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- Haluatko todella unohtaa sivustokohtaiset asetuksista joka tietueelta? +-Pääsy tietueisiin evätään. +- +- +- Removing stored permissions… +- Poistetaan talletettuja oikeuksia… +- +- +- Abort +- Keskeytä +- +- +- KeePassXC: Removed permissions +- KeePassXC: Poistetut käyttöoikeudet +- +- +- Successfully removed permissions from %n entry(s). +- Poistettiin lupa %n tietueelta.Poistettiin lupa %n tietueelta. +- +- +- KeePassXC: No entry with permissions found! +- KeePassXC: Tietuetta käyttöoikeuksilla ei löytynyt! +- +- +- The active database does not contain an entry with permissions. +- Aktiivinen tietokanta ei sisällä yhtään tietuetta käyttöoikeuksien kanssa. +- +- +- Move KeePassHTTP attributes to custom data +- Siirrä KeePassHTTP-attribuutit mukautettuihin tietoihin. +- +- +- Do you really want to move all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- Haluatko todella siirtää vanhat selainlaajennustiedot uuteen muotoon? +-Tämä on välttämätöntä selainintegraation yhteensopivuuden takaamiseksi. +- +- +- Stored browser keys +- Tallennetut selaimen avaimet +- +- +- Remove selected key +- Poista valittu avain +- +- +- Move KeePassHTTP attributes to KeePassXC-Browser custom data +- Siirrä KeePassHTTP-attribuutit KeePassXC-Browser:in mukautettuihin tietoihin +- +- +- Refresh database root group ID +- Uudista tietokannan juuriryhmän ID +- +- +- Created +- Luotu +- +- +- Refresh database ID +- Uudista tietokannan ID +- +- +- Do you really want refresh the database ID? +-This is only necessary if your database is a copy of another and the browser extension cannot connect. +- Haluatko todella uudistaa tietokannan ID:n? +-Tämä on tarpeellista vain, jos tietokantasi on kloonattu toisesta ja selainintegraatio ei pysty yhdistämään siihen. +- +- +- +- DatabaseSettingsWidgetDatabaseKey +- +- Add additional protection... +- Lisäsuoja... +- +- +- No password set +- Salasanaa ei ole asetettu +- +- +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- VAROITUS! Et ole asettanut salasanaa. Tietokannan käyttöä ilman salasanaa ei suositella! +- +-Oletko varma, että haluat jatkaa ilman salasanaa? +- +- +- Continue without password +- Jatka ilman salasanaa +- +- +- No encryption key added +- Salausavainta ei ole lisätty +- +- +- You must add at least one encryption key to secure your database! +- Ainakin yksi salausavain täytyy lisätä, jotta tietokanta pysyy suojassa! +- +- +- Unknown error +- Tuntematon virhe +- +- +- Failed to change database credentials +- Tietokannan tietueiden muuttaminen ei onnistu +- +- +- +- DatabaseSettingsWidgetEncryption +- +- Encryption Algorithm: +- Salausalgoritmi: +- +- +- AES: 256 Bit (default) +- AES: 256 Bit (oletus) +- +- +- Twofish: 256 Bit +- Twofish: 256 Bit +- +- +- Key Derivation Function: +- Avainmuunnosfunktio: +- +- +- Transform rounds: +- Muunnositeraatioita: +- +- +- Memory Usage: +- Muistin käyttö: +- +- +- Parallelism: +- Rinnakkaisuus: +- +- +- Decryption Time: +- Salauksen purkuun kulunut aika: +- +- +- ?? s +- ?? s +- +- +- Change +- Muuta +- +- +- Higher values offer more protection, but opening the database will take longer. +- Korkeat arvot lupaavat parempaa suojaa, mutta tietokannan avaus voi kestää pidempään. +- +- +- Database format: +- Tietokannan muoto: +- +- +- This is only important if you need to use your database with other programs. +- Tämä on tärkeää vain, jos käytät tietokantaa muissa ohjelmissa. +- +- +- KDBX 4.0 (recommended) +- KDBX 4.0 (suositeltu) +- +- +- KDBX 3.1 +- KDBX 3.1 +- +- +- unchanged +- Database decryption time is unchanged +- muuttamaton +- +- +- Number of rounds too high +- Key transformation rounds +- Iteraatioiden lukumäärä on liian suuri +- +- +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or days (or even longer) to open! +- Käytät todella suurta lukua iteraatioiden määränä avaimen muunnoksen yhteydessä Argon2:lla. +- +-Jos pidät tämän arvon, tietokannan avauksessa voi kestää tunteja tai päiviä (tai jopa pidempään)! +- +- +- Understood, keep number +- Ymmärrän, säilytä numero +- +- +- Cancel +- Peruuta +- +- +- Number of rounds too low +- Key transformation rounds +- Iteraatioiden lukumäärä on liian pieni +- +- +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database may be too easy to crack! +- Käytät todella pientä lukua iteraatioiden määränä avaimen muunnoksessa AES-KDF:llä. +- +-Jos pidät tämän arvon, tietokanta voi olla liian helppo murtaa! +- +- +- KDF unchanged +- Avainmuunnosfunktio ei ole muuttunut +- +- +- Failed to transform key with new KDF parameters; KDF unchanged. +- Avaimen muunnos uusia KDF-parametreja käyttäen epäonnistui; KDF:ää ei muutettu. +- +- +- MiB +- Abbreviation for Mebibytes (KDF settings) +- MiBMiB +- +- +- thread(s) +- Threads for parallel execution (KDF settings) +- säiesäiettä +- +- +- Change existing decryption time +- Muuta olemassa olevaa salauksen purkuun vaadittavaa aikaa +- +- +- Decryption time in seconds +- Salauksen purkuun vaadittava aika sekunneissa +- +- +- Database format +- Tietokannan muoto +- +- +- Encryption algorithm +- Salausalgoritmi +- +- +- Key derivation function +- Avainmuunnosfunktio +- +- +- Transform rounds +- Muunnoskierroksia +- +- +- Memory usage +- Muistin käyttö +- +- +- Parallelism +- Rinnakkaisuus +- +- +- ?? ms +- ?? ms +- +- +- ? s +- ? s +- +- +- +- DatabaseSettingsWidgetFdoSecrets +- +- Exposed Entries +- Avoimia tietueita +- +- +- Don't expose this database +- Älä näytä tätä tietokantaa +- +- +- Expose entries under this group: +- Näytä tietueet vain tästä ryhmästä: +- +- +- Enable Secret Service to access these settings. +- Ota Secret Service käyttöön päästäksesi näihin asetuksiin. +- +- +- +- DatabaseSettingsWidgetGeneral +- +- Database Meta Data +- Tietokannan metatiedot +- +- +- Database name: +- Tietokannan nimi: +- +- +- Database description: +- Tietokannan kuvaus: +- +- +- Default username: +- Oletuskäyttäjänimi: +- +- +- History Settings +- Historia-asetukset +- +- +- Max. history items: +- Maks. historia-kohteiden lukumäärä: +- +- +- Max. history size: +- Maks. historian koko: +- +- +- MiB +- Mt +- +- +- Use recycle bin +- Käytä roskakoria +- +- +- Additional Database Settings +- Tietokannan lisäasetukset +- +- +- Database name field +- Tietokannan nimikenttä +- +- +- Database description field +- Tietokannan kuvauskenttä +- +- +- Default username field +- Oletuskäyttäjänimen kenttä +- +- +- Maximum number of history items per entry +- Historiamerkintöjen maksimimäärä per tietue +- +- +- Maximum size of history per entry +- Historian koon maksimimäärä per tietue +- +- +- Delete Recycle Bin +- Poista roskakori +- +- +- Do you want to delete the current recycle bin and all its contents? +-This action is not reversible. +- Haluatko poistaa nykyisen roskakorin ja sen kaiken sisällön? Tämä toimenpide on peruuttamaton. +- +- +- (old) +- (vanha) +- +- +- Enable compression (recommended) +- Ota pakkaus käyttöön (suositeltu) +- +- +- +- DatabaseSettingsWidgetKeeShare +- +- Sharing +- Jakaminen +- +- +- Breadcrumb +- Leipätiedosto +- +- +- Type +- Tyyppi +- +- +- Path +- Polku +- +- +- Last Signer +- Viimeinen allekirjoittaja +- +- +- Certificates +- Varmenteet +- +- +- > +- Breadcrumb separator +- > +- +- +- +- DatabaseSettingsWidgetMetaDataSimple +- +- Database Name: +- Tietokannan nimi: +- +- +- Description: +- Kuvaus: +- +- +- Database name field +- Tietokannan nimikenttä +- +- +- Database description field +- Tietokannan kuvauskenttä +- +- +- +- DatabaseTabWidget +- +- KeePass 2 Database +- KeePass 2 -tietokanta +- +- +- All files +- Kaikki tiedostot +- +- +- Open database +- Avaa tietokanta +- +- +- CSV file +- CSV-tiedosto +- +- +- Merge database +- Yhdistä tietokanta +- +- +- Open KeePass 1 database +- Avaa KeePass 1 -tietokanta +- +- +- KeePass 1 database +- KeePass 1 -tietokanta +- +- +- Export database to CSV file +- Vie tietokanta CSV-tiedostoon +- +- +- Writing the CSV file failed. +- CSV-tiedoston kirjoitus levylle epäonnistui. +- +- +- Database creation error +- Tietokannan luomisvirhe +- +- +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- Luodulla tietokannalla ei ole avainta tai avainmuunnosfunktiota, joten sitä ei voida tallentaa. +-Tämä on selkeä virhe, joten ota yhteyttä kehittäjätiimiin. +- +- +- Select CSV file +- Valitse CSV-tiedosto +- +- +- New Database +- Uusi tietokanta +- +- +- %1 [New Database] +- Database tab name modifier +- %1 [Uusi tietokanta] +- +- +- %1 [Locked] +- Database tab name modifier +- %1 [Lukittu] +- +- +- %1 [Read-only] +- Database tab name modifier +- %1 [Vain luku] +- +- +- Failed to open %1. It either does not exist or is not accessible. +- %1:n avaus epäonnistui. Sitä ei ole joko olemassa, tai siihen ei ole pääsyoikeutta. +- +- +- Export database to HTML file +- Vie tietokanta HTML-tiedostoon +- +- +- HTML file +- HTML-tiedosto +- +- +- Writing the HTML file failed. +- HTML-tiedoston kirjoittaminen epäonnistui. +- +- +- Export Confirmation +- Viennin vahvistus +- +- +- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? +- Olet viemässä tietokantaasi salaamattomaan tiedostoon. Tämä jättää salasanasi ja minkä tahansa arkaluontoisen tiedon haavoittuvaksi! Oletko varma, että haluat jatkaa? +- +- +- Open OPVault +- Avaa OPVault +- +- +- +- DatabaseWidget +- +- Searching... +- Etsitään... +- +- +- Do you really want to delete the entry "%1" for good? +- Haluatko varmasti poistaa tietueen "%1" lopullisesti? +- +- +- Do you really want to move entry "%1" to the recycle bin? +- Haluatko varmasti siirtää tietueen "%1" roskakoriin? +- +- +- Do you really want to move %n entry(s) to the recycle bin? +- Haluatko varmasti siirtää %n tietueen roskakoriin?Haluatko varmasti siirtää %n tietuetta roskakoriin? +- +- +- Execute command? +- Suorita komento? +- +- +- Do you really want to execute the following command?<br><br>%1<br> +- Haluatko varmasti suorittaa seuraavan komennon?<br><br>%1<br> +- +- +- Remember my choice +- Muista valintani +- +- +- Do you really want to delete the group "%1" for good? +- Haluatko varmasti poistaa ryhmän "%1" lopullisesti? +- +- +- No current database. +- Ei nykyistä tietokantaa. +- +- +- No source database, nothing to do. +- Ei lähdetietokantaa, ei mitään tehtävää. +- +- +- Search Results (%1) +- Etsinnän tulokset (%1) +- +- +- No Results +- Ei tuloksia. +- +- +- File has changed +- Tiedosto on muuttunut +- +- +- The database file has changed. Do you want to load the changes? +- Tietokantatiedosto on muuttunut. Haluatko ladata muutokset? +- +- +- Merge Request +- Yhdistämispyyntö +- +- +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- Tietokantatiedosto on muuttunut, ja sinulla on tallentamattomia muutoksia. +-Haluatko yhdistää muutoksesi? +- +- +- Empty recycle bin? +- Tyhjennetäänkö roskakori? +- +- +- Are you sure you want to permanently delete everything from your recycle bin? +- Haluatko varmasti tyhjentää kaiken pysyvästi roskakorista? +- +- +- Do you really want to delete %n entry(s) for good? +- Haluatko todella poistaa %n tietueen pysyvästi?Haluatko todella poistaa %n tietuetta pysyvästi? +- +- +- Delete entry(s)? +- Poista tietue?Poista tietueet? +- +- +- Move entry(s) to recycle bin? +- Siirrä tietue roskakoriin?Siirrä tietueet roskakoriin? +- +- +- Lock Database? +- Lukitse tietokanta? +- +- +- You are editing an entry. Discard changes and lock anyway? +- Muokkaat tietuetta. Hylkää muutokset ja lukitse silti? +- +- +- "%1" was modified. +-Save changes? +- Tietuetta "%1" muokattiin. +-Tallennetaanko muutokset? +- +- +- Database was modified. +-Save changes? +- Tietokantaa on muokattu. +-Tallenna muutokset? +- +- +- Save changes? +- Tallenna muutokset? +- +- +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- Uutta tietokantaa ei voitu avata automaattisen uudelleenlatauksen yhteydessä. +-Virhe: %1 +- +- +- Disable safe saves? +- Ota turvallinen tallennus pois käytöstä? +- +- +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- KeePassXC on epäonnistunut useaan otteeseen tietokannan tallentamisessa. Tämä johtuu luultavasti tiedostojen synkronoinnista, joka pitää tiedostoa lukittuna. +-Ota turvallinen tallennus pois käytöstä ja yritä uudelleen? +- +- +- Passwords +- Salasanat +- +- +- Save database as +- Tallenna tietokanta nimellä +- +- +- KeePass 2 Database +- KeePass 2 -tietokanta +- +- +- Replace references to entry? +- Korvaa tietueen viittaukset? +- +- +- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? +- Tietueella "%1" on %2 viittaus. Haluatko ylikirjoittaa viittaukset arvoilla, ohittaa tietueen tai poistaa sen?Tietueella "%1" on %2 viittausta. Haluatko ylikirjoittaa viittaukset arvoilla, ohittaa tietueen tai poistaa sen? +- +- +- Delete group +- Poista ryhmä +- +- +- Move group to recycle bin? +- Siirretäänkö ryhmä roskakoriin? +- +- +- Do you really want to move the group "%1" to the recycle bin? +- Haluatko varmasti siirtää ryhmän "%1" roskakoriin? +- +- +- Successfully merged the database files. +- Tietokantatiedostot yhdistettiin onnistuneesti. +- +- +- Database was not modified by merge operation. +- Tietokannan sisältö ei muuttunut yhdistämisen yhteydessä. +- +- +- Shared group... +- Jaettu ryhmä... +- +- +- Writing the database failed: %1 +- Tietokannan kirjoittaminen epäonnistui: %1 +- +- +- This database is opened in read-only mode. Autosave is disabled. +- Tietokanta on avattu vain-luku -moodissa. Automaattinen tallennus on otettu pois päältä. +- +- +- Save database backup +- Tallenna tietokannan varmuuskopio +- +- +- Could not find database file: %1 +- Tietokantatiedostoa ei löydy: %1 +- +- +- +- EditEntryWidget +- +- Entry +- Tietue +- +- +- Advanced +- Lisäasetukset +- +- +- Icon +- Kuvake +- +- +- Auto-Type +- Automaattisyöttö +- +- +- Properties +- Ominaisuudet +- +- +- History +- Historia +- +- +- SSH Agent +- SSH-agentti +- +- +- n/a +- ei saatavilla +- +- +- (encrypted) +- (salattu) +- +- +- Select private key +- Valitse yksityinen avain +- +- +- Entry history +- Tietueiden historia +- +- +- Add entry +- Lisää tietue +- +- +- Edit entry +- Muokkaa tietuetta +- +- +- New attribute +- Uusi attribuutti +- +- +- Are you sure you want to remove this attribute? +- Haluatko varmasti poistaa tämän attribuutin? +- +- +- Tomorrow +- Huomenna +- +- +- %n week(s) +- %n viikko%n viikkoa +- +- +- %n month(s) +- %n kuukausi%n kuukautta +- +- +- Entry updated successfully. +- Tietue päivitetty onnistuneesti. +- +- +- New attribute %1 +- Uusi attribuutti %1 +- +- +- %n year(s) +- %n vuosi%n vuotta +- +- +- Confirm Removal +- Vahvista poistaminen +- +- +- Browser Integration +- Selainintegraatio +- +- +- <empty URL> +- <empty URL> +- +- +- Are you sure you want to remove this URL? +- Haluatko varmasti poistaa tämän URL:n? +- +- +- Reveal +- Paljasta +- +- +- Hide +- Piilota +- +- +- Unsaved Changes +- Tallentamattomia muutoksia +- +- +- Would you like to save changes to this entry? +- Haluatko tallentaa muutokset tähän tietueeseen? +- +- +- [PROTECTED] Press Reveal to view or edit +- [SUOJATTU] Klikkaa Paljasta näyttääksesi tai muokataksesi +- +- +- Invalid Entry +- +- +- +- An external merge operation has invalidated this entry. +-Unfortunately, any changes made have been lost. +- +- +- +- +- EditEntryWidgetAdvanced +- +- Additional attributes +- Lisäattribuutit +- +- +- Add +- Lisää +- +- +- Remove +- Poista +- +- +- Edit Name +- Muokkaa nimeä +- +- +- Protect +- Suojattu +- +- +- Reveal +- Paljasta +- +- +- Attachments +- Liitteet +- +- +- Foreground Color: +- Korostusväri: +- +- +- Background Color: +- Taustaväri: +- +- +- Attribute selection +- Attribuutin valinta +- +- +- Attribute value +- Attribuutin arvo +- +- +- Add a new attribute +- Lisää uusi attribuutti +- +- +- Remove selected attribute +- Poista valittu attribuutti +- +- +- Edit attribute name +- Muokkaa attribuutin nimeä +- +- +- Toggle attribute protection +- Suojaa attribuutti +- +- +- Show a protected attribute +- Näytä suojattu attribuutti +- +- +- Foreground color selection +- Korostusvärin valinta +- +- +- Background color selection +- Taustavärin valinta +- +- +- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> +- <html><head/><body><p>Jos valittu, tietue ei näy Diagnostiikassa tai HIBP:ssä vaikkei se läpäisisikään laatuvaatimuksia (esim. salasanan entropia tai uudelleenkäyttö). Voit käyttää asetusta, jos salasana on sellainen mitä et voi hallita (jos sen täytyy olla esim. nelinumeroinen PIN-koodi), jolloin se ei väärennä raportin tuloksia.</p></body></html> +- +- +- Exclude from database reports +- Jätä tietokantaraporttien ulkopuolelle +- +- +- +- EditEntryWidgetAutoType +- +- Enable Auto-Type for this entry +- Salli automaattisyöttö tälle tietueelle +- +- +- Window Associations +- Ikkunoiden liitokset +- +- +- + +- + +- +- +- - +- - +- +- +- Window title: +- Ikkunan otsikko: +- +- +- Use a specific sequence for this association: +- Käytä tiettyä sekvenssiä tälle liitokselle: +- +- +- Custom Auto-Type sequence +- Mukautettu automaattisyötön sekvenssi +- +- +- Open Auto-Type help webpage +- Avaa automaattitäydennyksen ohjesivusto +- +- +- Existing window associations +- Jo olemassa olevat ikkunoiden liitokset +- +- +- Add new window association +- Lisää uusi ikkunan liitos +- +- +- Remove selected window association +- Poista valittu ikkunaliitos +- +- +- You can use an asterisk (*) to match everything +- Voit käyttää asteriskia (*) vastaamaan kaikkea mahdollista +- +- +- Set the window association title +- Aseta ikkunan liitoksen otsikko +- +- +- You can use an asterisk to match everything +- Voit käyttää asteriskia vastaamaan kaikkea mahdollista +- +- +- Custom Auto-Type sequence for this window +- Mukautettu automaattisyötön sekvenssi tälle ikkunalle +- +- +- Inherit default Auto-Type sequence from the group +- Peri automaattisyötön oletussekvenssi ryhmältä +- +- +- Use custom Auto-Type sequence: +- Käytä mukautettua automaattisyötön sekvenssiä: +- +- +- +- EditEntryWidgetBrowser +- +- These settings affect to the entry's behaviour with the browser extension. +- Tämä asetukset vaikuttavat tietueen toimintaan selainlaajennuksen kanssa. +- +- +- General +- Yleistä +- +- +- Skip Auto-Submit for this entry +- Älä salli automaattisyöttöä tälle tietueelle +- +- +- Hide this entry from the browser extension +- Piilota tämä tietue selainlaajennuksesta +- +- +- Additional URL's +- Lisäosoitteet +- +- +- Add +- Lisää +- +- +- Remove +- Poista +- +- +- Edit +- Muokkaa +- +- +- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. +- Lähetä tämä tietue vain HTTP-autentikaatiodialogeihin. Jos asetus on päällä, tavalliset kirjautumiskentät eivät näytä tätä tietuetta listassa. +- +- +- Use this entry only with HTTP Basic Auth +- Käytä tietuetta vain HTTP Basic -autentikaatioon +- +- +- +- EditEntryWidgetHistory +- +- Show +- Näytä +- +- +- Restore +- Palauta +- +- +- Delete +- Poista +- +- +- Delete all +- Poista kaikki +- +- +- Entry history selection +- Tietueen historiavalinta +- +- +- Show entry at selected history state +- Näytä tietue valitulla historiatilalla +- +- +- Restore entry to selected history state +- Palauta tietue valittuun historiatilaan +- +- +- Delete selected history state +- Poista valittu historiatila +- +- +- Delete all history +- Poista kaikki historia +- +- +- +- EditEntryWidgetMain +- +- URL: +- URL: +- +- +- Password: +- Salasana +- +- +- Title: +- Otsikko: +- +- +- Presets +- Esiasetukset +- +- +- Toggle the checkbox to reveal the notes section. +- Ruksi valintaruutu näyttääksesi muistiinpano-osio. +- +- +- Username: +- Käyttäjänimi +- +- +- Url field +- Osoitekenttä +- +- +- Download favicon for URL +- Lataa favicon tälle URL:lle +- +- +- Password field +- Salasanakenttä +- +- +- Toggle notes visible +- Vaihda muistiinpanojen näkyvyyttä +- +- +- Expiration field +- Vanhentumisajan kenttä +- +- +- Expiration Presets +- Vanhentumisajan valmiit asetukset +- +- +- Expiration presets +- Vanhentumisajan valmiit asetukset +- +- +- Notes field +- Muistiinpanojen kenttä +- +- +- Title field +- Otsikkokenttä +- +- +- Username field +- Käyttäjätunnuksen kenttä +- +- +- Toggle expiration +- Ota vanhentumisaika käyttöön +- +- +- Notes: +- Muistiinpanot: +- +- +- https://example.com +- https://example.com +- +- +- Expires: +- Vanhentuu: +- +- +- Edit Entry +- +- +- +- +- EditEntryWidgetSSHAgent +- +- Form +- Lomake +- +- +- Remove key from agent after +- Poista avain agentista kun on kulunut +- +- +- seconds +- sekuntia +- +- +- Fingerprint +- Sormenjälki +- +- +- Remove key from agent when database is closed/locked +- Poista avain agentista kun tietokanta suljetaan/lukitaan +- +- +- Public key +- Julkinen avain +- +- +- Add key to agent when database is opened/unlocked +- Lisää avain agenttiin kun tietokanta avataan/lukitaan +- +- +- Comment +- Kommentti +- +- +- Decrypt +- Pura salaus +- +- +- n/a +- ei saatavilla +- +- +- Copy to clipboard +- Kopioi leikepöydälle +- +- +- Private key +- Yksityinen avain +- +- +- External file +- Ulkoinen tiedosto +- +- +- Browse... +- Button for opening file dialog +- Selaa... +- +- +- Attachment +- Liite +- +- +- Add to agent +- Lisää agenttiin +- +- +- Remove from agent +- Poista agentista +- +- +- Require user confirmation when this key is used +- Vaadi käyttäjävahvistusta kun avainta käytetään +- +- +- Remove key from agent after specified seconds +- Poista avain agentista tietyn sekuntiajan jälkeen +- +- +- Browser for key file +- Selaa avaintiedostoa +- +- +- External key file +- Ulkoinen avaintiedosto +- +- +- Select attachment file +- Valitse liitetiedosto +- +- +- +- EditGroupWidget +- +- Group +- Ryhmä +- +- +- Icon +- Kuvake +- +- +- Properties +- Ominaisuudet +- +- +- Add group +- Lisää ryhmä +- +- +- Edit group +- Muokkaa ryhmää +- +- +- Enable +- Kytke päälle +- +- +- Disable +- Kytke pois päältä +- +- +- Inherit from parent group (%1) +- Peri ylemmältä ryhmältä (%1) +- +- +- Entry has unsaved changes +- Tietueella on tallentamattomia muutoksia +- +- +- +- EditGroupWidgetKeeShare +- +- Type: +- Tyyppi: +- +- +- Path: +- Polku: +- +- +- Password: +- Salasana: +- +- +- Inactive +- Toimeton +- +- +- KeeShare unsigned container +- KeeSharen allekirjoittamaton säiliö +- +- +- KeeShare signed container +- KeeSharen allekirjoitettu säiliö +- +- +- Select import source +- Valitse tuonnin lähde +- +- +- Select export target +- Valitse viennin kohde +- +- +- Select import/export file +- Valitse tuonti-/vientitiedosto +- +- +- Clear +- Tyhjennä +- +- +- Import +- Tuo +- +- +- Export +- Vie +- +- +- Synchronize +- Synkronoi +- +- +- Your KeePassXC version does not support sharing this container type. +-Supported extensions are: %1. +- KeePassXC-versiosi ei tue jakamista tällä säiliötyypillä. +-Tuetut tyypit ovat: %1. +- +- +- %1 is already being exported by this database. +- %1 on jo viety tästä tietokannasta. +- +- +- %1 is already being imported by this database. +- %1 on jo tuotu tästä tietokannasta. +- +- +- %1 is being imported and exported by different groups in this database. +- %1 on tuotu ja viety eri ryhmästä tästä tietokannasta. +- +- +- KeeShare is currently disabled. You can enable import/export in the application settings. +- KeeShare is a proper noun +- KeeShare ei ole tällä hetkellä käytössä. Voit ottaa tuonnin/viennin käyttöön ohjelmiston asetuksista. +- +- +- Database export is currently disabled by application settings. +- Tietokannan vienti on poistettu käytöstä ohjelmiston asetuksissa. +- +- +- Database import is currently disabled by application settings. +- Tietokannan tuonti on poistettu käytöstä ohjelmiston asetuksista. +- +- +- Sharing mode field +- Jakotavan kenttä +- +- +- Path to share file field +- Jakotiedoston sijainnin kenttä +- +- +- Password field +- Salasanakenttä +- +- +- Clear fields +- Tyhjennä kentät +- +- +- Browse for share file +- Selaa jakotiedostoa +- +- +- Browse... +- Selaa... +- +- +- +- EditGroupWidgetMain +- +- Name field +- Nimikenttä +- +- +- Notes field +- Muistiinpanojen kenttä +- +- +- Toggle expiration +- Ota vanhentumisaika käyttöön +- +- +- Auto-Type toggle for this and sub groups +- Automaattisyötön päälle laittaminen tälle ryhmälle ja sen aliryhmille +- +- +- Expiration field +- Vanhentumisajan kenttä +- +- +- Search toggle for this and sub groups +- Haun päälle laittaminen tälle ryhmälle ja sen aliryhmille +- +- +- Default auto-type sequence field +- Automaattisyötön sekvenssin oletuksen kenttä +- +- +- Expires: +- Vanhentuu: +- +- +- Use default Auto-Type sequence of parent group +- Peri automaattisyötön sekvenssi emoryhmältä +- +- +- Auto-Type: +- Automaattisyöttö: +- +- +- Search: +- Etsi: +- +- +- Notes: +- Muistiinpanot: +- +- +- Name: +- Nimi: +- +- +- Set default Auto-Type sequence +- Aseta automaattisyötön oletussekvenssi +- +- +- Edit Group +- +- +- +- +- EditWidgetIcons +- +- Add custom icon +- Lisää mukautettu kuvake +- +- +- Delete custom icon +- Poista mukautettu kuvake +- +- +- Download favicon +- Lataa favicon +- +- +- Unable to fetch favicon. +- Faviconin noutaminen ei onnistu +- +- +- Images +- Kuvat +- +- +- All files +- Kaikki tiedostot +- +- +- Confirm Delete +- Vahvista poisto +- +- +- Select Image(s) +- Valitse kuva(t) +- +- +- Successfully loaded %1 of %n icon(s) +- %1 ikoni kaikista (%n) ladattiin onnistuneesti%1 ikonia kaikista (%n) ladattiin onnistuneesti +- +- +- No icons were loaded +- Yhtään ikonia ei ladattu +- +- +- %n icon(s) already exist in the database +- %n ikoni on jo tietokannassa%n ikonia on jo tietokannassa +- +- +- The following icon(s) failed: +- Seuraava ikoni epäonnistui:Seuraavat ikonit epäonnistuivat: +- +- +- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? +- Ikonia käytetään %n tietueessa, ja se korvataan oletusikonilla. Oletko varma, että haluat poistaa sen?Ikonia käytetään %n tietueessa, ja se korvataan oletusikonilla. Oletko varma, että haluat poistaa sen? +- +- +- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security +- Voit asettaa DuckDuckGo:n ikonien lataukseen asetuksen Työkalut>Asetukset>Turvallisuus alta +- +- +- Download favicon for URL +- Lataa favicon tälle URL:lle +- +- +- Apply selected icon to subgroups and entries +- Lisää valittu ikoni aliryhmille ja sen tietueille +- +- +- Also apply to child groups +- Lisää myös aliryhmille +- +- +- Also apply to child entries +- Lisää myös lapsitietueille +- +- +- Also apply to all children +- Lisää kaikille lapsille +- +- +- Existing icon selected. +- Jo olemassa oleva ikoni valittu. +- +- +- Use default icon +- Käytä oletusikonia +- +- +- Use custom icon +- Käytä mukautettua ikonia +- +- +- Apply icon to... +- Käytä ikonia... +- +- +- Apply to this group only +- Käytä vain tässä ryhmässä +- +- +- +- EditWidgetProperties +- +- Created: +- Luotu: +- +- +- Modified: +- Muokattu: +- +- +- Accessed: +- Käytetty: +- +- +- Uuid: +- UUID: +- +- +- Plugin Data +- Liitännäistiedot +- +- +- Remove +- Poista +- +- +- Delete plugin data? +- Poista liitännäistiedot? +- +- +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- Haluatko varmasti poistaa valitun liitännäistiedon? +-Tämä voi vikaannuttaa tietoa käyttävän liitännäisen. +- +- +- Key +- Avain +- +- +- Value +- Arvo +- +- +- Datetime created +- Luomisen ajankohta +- +- +- Datetime modified +- Muokkauksen ajankohta +- +- +- Datetime accessed +- Käyttämisen ajankohta +- +- +- Unique ID +- Yksilökohtainen ID +- +- +- Plugin data +- Liitännäistiedot +- +- +- Remove selected plugin data +- Poista liitännäistiedot +- +- +- +- Entry +- +- %1 - Clone +- %1 - Klooni +- +- +- +- EntryAttachmentsModel +- +- Name +- Nimi +- +- +- Size +- Koko +- +- +- +- EntryAttachmentsWidget +- +- Form +- Lomake +- +- +- Add +- Lisää +- +- +- Remove +- Poista +- +- +- Open +- Avaa +- +- +- Save +- Tallenna +- +- +- Select files +- Valitse tiedostot +- +- +- Are you sure you want to remove %n attachment(s)? +- Haluatko varmasti poistaa &n liitettä?Haluatko varmasti poistaa %n liitettä? +- +- +- Save attachments +- Tallenna liitteet +- +- +- Unable to create directory: +-%1 +- Hakemiston luominen epäonnistui: +-%1 +- +- +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- Haluatko varmasti korvata tiedoston "%1" tällä liitteellä? +- +- +- Confirm overwrite +- Vahvista korvaaminen +- +- +- Unable to save attachments: +-%1 +- Liitteiden tallentaminen epäonnistui: +-%1 +- +- +- Unable to open attachment: +-%1 +- Liitteen avaaminen epäonnistui: +-%1 +- +- +- Unable to open attachments: +-%1 +- Liitteiden avaaminen epäonnistui: +-%1 +- +- +- Confirm remove +- Vahvista poisto +- +- +- Unable to open file(s): +-%1 +- Tiedostoa ei voitu avata: +-%1Tiedostoja ei voitu avata: +-%1 +- +- +- Attachments +- Liitteet +- +- +- Add new attachment +- Lisää uusi liite +- +- +- Remove selected attachment +- Poista valittu liite +- +- +- Open selected attachment +- Avaa valittu liite +- +- +- Save selected attachment to disk +- Tallenna valittu liite levylle +- +- +- %1 is a big file (%2 MB). +-Your database may get very large and reduce performance. +- +-Are you sure to add this file? +- %1 on suurikokoinen tiedosto (%2 MB) +-Tietokantasi voi kasvaa liian suureksi ja hidastua. +- +-Oletko varma, että haluat lisätä tämän tiedoston? +- +- +- Confirm Attachment +- Varmista liitetiedosto +- +- +- +- EntryAttributesModel +- +- Name +- Nimi +- +- +- +- EntryHistoryModel +- +- Last modified +- Viimeksi muokattu +- +- +- Title +- Otsikko +- +- +- Username +- Käyttäjätunnus +- +- +- URL +- URL +- +- +- +- EntryModel +- +- Ref: +- Reference abbreviation +- Viittaus: +- +- +- Group +- Ryhmä +- +- +- Title +- Otsikko +- +- +- Username +- Käyttäjätunnus +- +- +- URL +- URL +- +- +- Never +- Ei koskaan +- +- +- Password +- Salasana +- +- +- Notes +- Muistiinpanot +- +- +- Expires +- Erääntyy +- +- +- Created +- Luotu +- +- +- Modified +- Muokattu +- +- +- Accessed +- Käytetty +- +- +- Attachments +- Liitteet +- +- +- Size +- Koko +- +- +- Group name +- Ryhmän nimi +- +- +- Entry title +- Tietueen nimi +- +- +- Entry notes +- Tietueen muistiinpanot +- +- +- Entry expires at +- Tietue vanhentuu +- +- +- Creation date +- Luomispäivämäärä +- +- +- Last modification date +- Edellisen muokkauksen päivämäärä +- +- +- Last access date +- Edellisen pääsyn päivämäärä +- +- +- Attached files +- Liitetiedostot +- +- +- Entry size +- Tietueen koko +- +- +- Has attachments +- Sisältää liitetiedostoja +- +- +- Has TOTP one-time password +- Sisältää TOTP-salasanan +- +- +- +- EntryPreviewWidget +- +- Close +- Sulje +- +- +- General +- Yleistä +- +- +- Username +- Käyttäjätunnus +- +- +- Password +- Salasana +- +- +- Expiration +- Vanhentumisaika +- +- +- URL +- URL +- +- +- Attributes +- Attribuutit +- +- +- Attachments +- Liitteet +- +- +- Notes +- Muistiinpanot +- +- +- Autotype +- Automaattisyöttö +- +- +- Window +- Ikkuna +- +- +- Sequence +- Sekvenssi +- +- +- Searching +- Hakeminen +- +- +- Search +- Etsi +- +- +- Clear +- Tyhjennä +- +- +- Never +- Ei koskaan +- +- +- [PROTECTED] +- [SUOJATTU] +- +- +- Enabled +- Käytössä +- +- +- Disabled +- Pois käytöstä +- +- +- Share +- Jaa +- +- +- Display current TOTP value +- Näytä nykyinen TOTP-arvo +- +- +- Advanced +- Lisäasetukset +- +- +- Default Sequence +- +- +- +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- attributes line +- +- +- +- +- EntryURLModel +- +- Invalid URL +- Virheellinen URL +- +- +- +- EntryView +- +- Fit to window +- Sovita ikkunaan +- +- +- Fit to contents +- Sovita sisältöön +- +- +- Reset to defaults +- Palauta oletusasetukset +- +- +- Has attachments +- Entry attachment icon toggle +- Sisältää liitetiedostoja +- +- +- Has TOTP +- Entry TOTP icon toggle +- Sisältää TOTP:n +- +- +- +- FdoSecrets::Item +- +- Entry "%1" from database "%2" was used by %3 +- Tietuetta "%1" tietokannasta "%2" käytettiin %3:n toimesta +- +- +- +- FdoSecrets::Service +- +- Failed to register DBus service at %1.<br/> +- DBus-palvelun rekisteröinti epäonnistui %1.<br/> +- +- +- %n Entry(s) was used by %1 +- %1 is the name of an application +- %n tietue käytetiin %1%n tietuetta käytettiin %1 +- +- +- +- FdoSecrets::SettingsDatabaseModel +- +- File Name +- Tiedostonimi +- +- +- Group +- Ryhmä +- +- +- Manage +- Hallitse +- +- +- Unlock to show +- Avaa lukitus näyttääksesi +- +- +- None +- Ei mitään +- +- +- +- FdoSecrets::SettingsSessionModel +- +- Application +- Sovellus +- +- +- Manage +- Hallitse +- +- +- +- FdoSecretsPlugin +- +- <b>Fdo Secret Service:</b> %1 +- <b>Fdo Secret Service:</b> %1 +- +- +- Unknown +- Unknown PID +- Tuntematon +- +- +- Unknown +- Unknown executable path +- Tuntematon +- +- +- <i>PID: %1, Executable: %2</i> +- <i>PID: 1234, Executable: /path/to/exe</i> +- <i>PID %1, Suoritettava tiedosto: %2</i> +- +- +- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. +- Toinen Secret Service -palvelu on jo käynnissä (%1).<br/>Ole hyvä ja pysäytä/poista se ennen kuin otat Secret Service -integraation käyttöön. +- +- +- +- Group +- +- [empty] +- group has no children +- [tyhjä] +- +- +- +- HibpDownloader +- +- Online password validation failed +- Salasanan varmistus netissä epäonnistui +- +- +- +- IconDownloaderDialog +- +- Download Favicons +- Lataa faviconit +- +- +- Cancel +- Peruuta +- +- +- Having trouble downloading icons? +-You can enable the DuckDuckGo website icon service in the security section of the application settings. +- Onko ikonien latauksessa ongelmia? +-Voit käyttää DuckDuckGo:ta ikonien lataukseen ohjelmiston turvallisuusasetuksia muokkaamalla. +- +- +- Close +- Sulje +- +- +- URL +- URL +- +- +- Status +- Tila +- +- +- Please wait, processing entry list... +- Odota hetki, käsitellään tietuelistaa... +- +- +- Downloading... +- Ladataan... +- +- +- Ok +- Ok +- +- +- Already Exists +- On jo olemassa +- +- +- Download Failed +- Lataus epäonnistui +- +- +- Downloading favicons (%1/%2)... +- Ladataan faviconeja (%1/%2)... +- +- +- +- KMessageWidget +- +- &Close +- &Sulje +- +- +- Close message +- Sulje viesti +- +- +- +- Kdbx3Reader +- +- missing database headers +- tietokannan otsaketiedot puuttuvat +- +- +- Header doesn't match hash +- Otsaketieto ei vastaa tiivistettä (hash) +- +- +- Invalid header id size +- Virheellinen otsaketietojen id:n koko +- +- +- Invalid header field length +- Virhellinen otsaketietojen kentän koko +- +- +- Invalid header data length +- Virheellinen otsaketietojen sisällön koko +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Väärät tilitiedot, ole hyvä ja koita uudestaan. +-Jos tämä toistuu, tietokantasi voi olla viallinen. +- +- +- Unable to calculate database key +- Tietokannan avaimen laskenta epäonnistui +- +- +- Unable to issue challenge-response: %1 +- Haaste-vastauksen tekeminen epäonnistui: %1 +- +- +- +- Kdbx3Writer +- +- Unable to issue challenge-response: %1 +- Haaste-vastauksen tekeminen epäonnistui: %1 +- +- +- Unable to calculate database key +- Tietokannan avaimen laskenta epäonnistui +- +- +- +- Kdbx4Reader +- +- missing database headers +- tietokannan otsaketiedot puuttuvat +- +- +- Invalid header checksum size +- Virheellinen otsaketietojen tarkistussumman koko +- +- +- Header SHA256 mismatch +- Yhteensopimaton SHA256-otsaketieto +- +- +- Unknown cipher +- Tuntematon salaus +- +- +- Invalid header id size +- Virheellinen otsaketietojen id:n koko +- +- +- Invalid header field length +- Virhellinen otsaketietojen kentän koko +- +- +- Invalid header data length +- Virheellinen otsaketietojen sisällön koko +- +- +- Failed to open buffer for KDF parameters in header +- Puskurin avaaminen avaimenluontifunktion parametreja varten tiedoston alkuosassa epäonnistui +- +- +- Unsupported key derivation function (KDF) or invalid parameters +- Avainmuunnosfunktio (KDF) ei ole tuettu, tai virheelliset parametrit +- +- +- Legacy header fields found in KDBX4 file. +- KDBX4-tiedostosta löytyi vanhentuneita otsaketietoja +- +- +- Invalid inner header id size +- Virheellinen sisemmän otsaketiedon tunnisteen koko +- +- +- Invalid inner header field length +- Virheellinen sisemmän otsaketiedon kentän pituus +- +- +- Invalid inner header binary size +- Virheellinen sisemmän otsaketiedon binäärikoko +- +- +- Unsupported KeePass variant map version. +- Translation: variant map = data structure for storing meta data +- KeePass -variant-kartan versio ei ole tuettu. +- +- +- Invalid variant map entry name length +- Translation: variant map = data structure for storing meta data +- Virheellinen variant-kartan tietuenimen pituus +- +- +- Invalid variant map entry name data +- Translation: variant map = data structure for storing meta data +- Virheellinen variant-kartan tietueen nimen sisältö +- +- +- Invalid variant map entry value length +- Translation: variant map = data structure for storing meta data +- Virheellinen variant-kartan tietueen arvon pituus +- +- +- Invalid variant map entry value data +- Translation comment: variant map = data structure for storing meta data +- Virheellinen variant-kartan tietueen arvon sisältä +- +- +- Invalid variant map Bool entry value length +- Translation: variant map = data structure for storing meta data +- Virheellinen variant-kartan Bool-arvon pituus +- +- +- Invalid variant map Int32 entry value length +- Translation: variant map = data structure for storing meta data +- Virheellinen variant-kartan Int32-arvon pituus +- +- +- Invalid variant map UInt32 entry value length +- Translation: variant map = data structure for storing meta data +- Virheellinen variant-kartan Uint32-arvon pituus +- +- +- Invalid variant map Int64 entry value length +- Translation: variant map = data structure for storing meta data +- Virheellinen variant-kartan Int64-arvon pituus +- +- +- Invalid variant map UInt64 entry value length +- Translation: variant map = data structure for storing meta data +- Virheellinen variant-kartan Uint64-arvon pituus +- +- +- Invalid variant map entry type +- Translation: variant map = data structure for storing meta data +- Virheellinen variant-kartan tietueen tyyppi +- +- +- Invalid variant map field type size +- Translation: variant map = data structure for storing meta data +- Virheellinen variant-kartan kenttätyypin koko +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Väärät tilitiedot, ole hyvä ja koita uudestaan. +-Jos tämä toistuu, tietokantasi voi olla viallinen. +- +- +- (HMAC mismatch) +- (HMAC on yhteensopimaton) +- +- +- Unable to calculate database key: %1 +- Tietokannan avaimen laskenta epäonnistui: %1 +- +- +- +- Kdbx4Writer +- +- Invalid symmetric cipher algorithm. +- Virheellinen symmetrinen salausalgoritmi. +- +- +- Invalid symmetric cipher IV size. +- IV = Initialization Vector for symmetric cipher +- Virheellinen symmetrisen salauksen alustussektorin (IV) koko. +- +- +- Failed to serialize KDF parameters variant map +- Translation comment: variant map = data structure for storing meta data +- KDF-parametrien serialisointi variant-karttaan epäonnistui +- +- +- Unable to calculate database key: %1 +- Tietokannan avaimen laskenta epäonnistui: %1 +- +- +- +- KdbxReader +- +- Unsupported cipher +- Salausta ei tueta +- +- +- Invalid compression flags length +- Virheellinen pakkauslippujen pituus +- +- +- Unsupported compression algorithm +- Ei-tuettu pakkausalgoritmi +- +- +- Invalid master seed size +- Virheellinen pääavainsiemenen koko +- +- +- Invalid transform seed size +- Virheellinen avainmuunnossiemenen koko +- +- +- Invalid transform rounds size +- Virheellinen avainmuunnoskertoimen koko +- +- +- Invalid start bytes size +- Virheellinen avaustavujen koko +- +- +- Invalid random stream id size +- Virheellinen satunnaistietovuon tietueen koko +- +- +- Invalid inner random stream cipher +- Virheellinen sisäisen satunnaistietovuon salaus +- +- +- Not a KeePass database. +- Tiedosto ei ole KeePass-tietokanta +- +- +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- Valittu tiedosto on vanha KeePass 1 -tietokanta (.kdb). +- +-Voit tuoda sen Tietokanta-valikosta > 'Tuo KeePass 1 -tietokanta' +-Tämä muunnos toimii yhdensuuntaisesti. Et välttämättä saa enää tietokantaa auki vanhalla KeePassX 0.4 -versiolla. +- +- +- Unsupported KeePass 2 database version. +- Ei-tuettu KeePass 2 -tietokantaversio. +- +- +- Invalid cipher uuid length: %1 (length=%2) +- Virheellinen salauksen uuid:n pituus: %1 (pituus=%2) +- +- +- Unable to parse UUID: %1 +- UUID:tä ei voitu jäsentää: %1 +- +- +- Failed to read database file. +- Tietokantatiedoston lukeminen epäonnistui. +- +- +- +- KdbxXmlReader +- +- XML parsing failure: %1 +- XML-jäsentämisen virhe: %1 +- +- +- No root group +- Ei isäntäryhmää +- +- +- Missing icon uuid or data +- Kuvakkeen uuid tai tiedot puuttuvat +- +- +- Missing custom data key or value +- Itse valittu sisältöavain tai -arvo puuttuu +- +- +- Multiple group elements +- Useita ryhmäelementtejä +- +- +- Null group uuid +- Tyhjä ryhmän uuid +- +- +- Invalid group icon number +- Virhellinen ryhmän kuvakkeen numeroarvo +- +- +- Invalid EnableAutoType value +- Virheellinen EnableAutoType-arvo +- +- +- Invalid EnableSearching value +- Virheellinen EnableSearching-arvo +- +- +- No group uuid found +- Ryhmän uuid:tä ei löydy +- +- +- Null DeleteObject uuid +- Tyhjä uudi-arvo objektia tuhotessa (DeleteObject) +- +- +- Missing DeletedObject uuid or time +- Tuhotun objektin (DeletedObject) uuid tai aika puuttuu +- +- +- Null entry uuid +- Tyhjä tietueen uuid (null) +- +- +- Invalid entry icon number +- Virhellinen ryhmän kuvakkeen numeroarvo +- +- +- History element in history entry +- Historiaelementti historiatietueessa +- +- +- No entry uuid found +- Tietueen uuid:tä ei löydy +- +- +- History element with different uuid +- Historiaelementti eri uuid:llä +- +- +- Duplicate custom attribute found +- Itse valittu attribuutti on jo olemassa +- +- +- Entry string key or value missing +- Tietueen merkkijonoavain tai -arvo puuttuu +- +- +- Entry binary key or value missing +- Tietueen binääriavain tai -arvo puuttuu +- +- +- Auto-type association window or sequence missing +- Automaattisyötön ikkunan liitos tai sekvenssi puuttuu +- +- +- Invalid bool value +- Virheellinen boolean-arvo +- +- +- Invalid date time value +- Virheellinen päivämääräarvo +- +- +- Invalid color value +- Virheellinen väriarvo +- +- +- Invalid color rgb part +- Virheellinen RGB-väriarvo +- +- +- Invalid number value +- Virheellinen numeroarvo +- +- +- Invalid uuid value +- Virheellinen uuid-arvo +- +- +- Unable to decompress binary +- Translator meant is a binary data inside an entry +- Binääriä ei voitu purkaa +- +- +- XML error: +-%1 +-Line %2, column %3 +- XML-virhe: +-%1 +-Rivi %2, sarake %3 +- +- +- +- KeeAgentSettings +- +- Invalid KeeAgent settings file structure. +- Virheellinen KeeAgentin asetustiedoston rakenne +- +- +- Private key is an attachment but no attachments provided. +- Yksityinen avain on liitetiedosto, mutta liitetiedostoja ei ole annettu. +- +- +- Private key is empty +- Yksityinen avainen on tyhjä +- +- +- File too large to be a private key +- Tiedosto on liian suuri ollakseen yksityinen avain +- +- +- Failed to open private key +- Yksityisen avaimen avaaminen epäonnistui +- +- +- +- KeePass1OpenWidget +- +- Unable to open the database. +- Tietokannan avaaminen epäonnistui. +- +- +- Import KeePass1 Database +- Tuo KeePass1-tietokanta +- +- +- +- KeePass1Reader +- +- Unable to read keyfile. +- Avaintiedoston luku ei onnistu +- +- +- Not a KeePass database. +- Tiedosto ei ole KeePass-tietokanta +- +- +- Unsupported encryption algorithm. +- Tukematon salausalgoritmi. +- +- +- Unsupported KeePass database version. +- Tukematon KeePass-tietokantaversio +- +- +- Unable to read encryption IV +- IV = Initialization Vector for symmetric cipher +- Salauksen alustusvektoria ei voitu lukea +- +- +- Invalid number of groups +- Virheellinen määrä ryhmiä +- +- +- Invalid number of entries +- Virheellinen määrä tietueita +- +- +- Invalid content hash size +- Virheellinen sisältötarkisteen koko +- +- +- Invalid transform seed size +- Virheellinen avainmuunnossiemenen koko +- +- +- Invalid number of transform rounds +- Virheellinen määrä muunnoskertoimia +- +- +- Unable to construct group tree +- Ryhmän puuta ei voitu rakentaa +- +- +- Root +- Juuri +- +- +- Key transformation failed +- Avaimen muuttaminen epäonnistui +- +- +- Invalid group field type number +- Virheellinen ryhmän kenttätyypin numero +- +- +- Invalid group field size +- Virheellinen ryhmän kentän koko +- +- +- Read group field data doesn't match size +- Luetun ryhmän kentän sisältö ei vastaa sen kokoa +- +- +- Incorrect group id field size +- Virheellinen ryhmän tunnistekentän koko +- +- +- Incorrect group creation time field size +- Virheellinen ryhmän luomisajan kentän koko +- +- +- Incorrect group modification time field size +- Virheellinen ryhmän muokkausajan kentän koko +- +- +- Incorrect group access time field size +- Virheellinen ryhmän hakuajan kentän koko +- +- +- Incorrect group expiry time field size +- Virheellinen ryhmän vanhentumisajan kentän koko +- +- +- Incorrect group icon field size +- Virheellinen ryhmän ikonikentän koko +- +- +- Incorrect group level field size +- Virheellinen ryhmän tasokentän koko +- +- +- Invalid group field type +- Virheellinen ryhmän kentän tyyppi +- +- +- Missing group id or level +- Ryhmän tunniste tai taso puuttuu +- +- +- Missing entry field type number +- Tietueen kentän tyyppinumero puuttuu +- +- +- Invalid entry field size +- Virheellinen tietueen kentän koko +- +- +- Read entry field data doesn't match size +- Luetun tietueen kentän sisältö ei vastaa sen kokoa +- +- +- Invalid entry uuid field size +- Virheellinen tietueen uuid-kentän koko +- +- +- Invalid entry group id field size +- Virheellinen tietueen ryhmän tunnistekentän koko +- +- +- Invalid entry icon field size +- Virheellinen tietueen ikonikentän koko +- +- +- Invalid entry creation time field size +- Virheellinen tietueen luomisajan kentän koko +- +- +- Invalid entry modification time field size +- Virhellinen tietueen muokkausajan kentän koko +- +- +- Invalid entry expiry time field size +- Virheellinen tietueen vanhentumisajan kentän koko +- +- +- Invalid entry field type +- Virheellinen tietueen kentän tyyppi +- +- +- unable to seek to content position +- sisällön sijaintia ei voitu hakea +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Väärät tilitiedot, ole hyvä ja koita uudestaan. +-Jos tämä toistuu, tietokantasi voi olla viallinen. +- +- +- Unable to calculate database key +- Tietokannan avaimen laskenta epäonnistui +- +- +- +- KeeShare +- +- Invalid sharing reference +- Virheellinen jakoviittaus +- +- +- Inactive share %1 +- Ei-aktiivinen jako %1 +- +- +- Imported from %1 +- Tuotu kohteesta %1 +- +- +- Exported to %1 +- Viety kohteeseen %1 +- +- +- Synchronized with %1 +- Synkronoitu kohteen %1 kanssa +- +- +- Import is disabled in settings +- Tuonti on poistettu käytöstä asetuksissa +- +- +- Export is disabled in settings +- Vienti on otettu pois käytöstä asetuksissa +- +- +- Inactive share +- Ei-aktiivinen jako +- +- +- Imported from +- Tuotu kohteesta +- +- +- Exported to +- Viety kohteeseen +- +- +- Synchronized with +- Synkronoitu seuraavan kohteen kanssa +- +- +- +- KeyComponentWidget +- +- Key Component +- Avainkomponentti +- +- +- Key Component Description +- Avainkomponentin kuvaus +- +- +- Cancel +- Peruuta +- +- +- Key Component set, click to change or remove +- Avainkomponentti asetettu, paina muokataksesi tai poistaaksesi +- +- +- Add %1 +- Add a key component +- Lisätty %1 +- +- +- Change %1 +- Change a key component +- Muutettu %1 +- +- +- Remove %1 +- Remove a key component +- Poista %1 +- +- +- %1 set, click to change or remove +- Change or remove a key component +- %1 asetettu, paina muokataksesi tai poistaaksesi +- +- +- +- KeyFileEditWidget +- +- Generate +- Luo +- +- +- Key File +- Avaintiedosto +- +- +- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> +- <p>Lisäturvaksi voit lisätä avaintiedoston, joka sisältää sattumanvaraista dataa.</p><p>Tämä tiedosto täytyy pitää salassa eikä sitä saa koskaan hävittää!</p> +- +- +- Error loading the key file '%1' +-Message: %2 +- Avaintiedostoa '%1' ei voitu avata +-Viesti: %2 +- +- +- Key files +- Avaintiedostot +- +- +- All files +- Kaikki tiedostot +- +- +- Create Key File... +- Luo avaintiedosto... +- +- +- Error creating key file +- Virhe luotaessa avaintiedostoa +- +- +- Unable to create key file: %1 +- Avaintiedostoa ei voitu luoda: %1 +- +- +- Select a key file +- Valitse avaintiedosto +- +- +- Key file selection +- Avaintiedoston valinta +- +- +- Browse for key file +- Selaa avaintiedostoa +- +- +- Browse... +- Selaa... +- +- +- Generate a new key file +- Luo uusi avaintiedosto +- +- +- Note: Do not use a file that may change as that will prevent you from unlocking your database! +- Huom.: Älä käytä tiedostoa jonka sisältö voi muuttua, sillä se voi estää tietokannan avauksen! +- +- +- Invalid Key File +- Virheellinen avaintiedosto +- +- +- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. +- Et voi käyttää kyseistä tietokantaa avaintiedostona. Ole hyvä ja valitse eri tiedosto, tai luo uusi avaintiedosto. +- +- +- Suspicious Key File +- Epäilyttävä avaintiedosto +- +- +- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. +-Are you sure you want to continue with this file? +- Valittu avaintiedosto näyttää tietokannalta. Avaintiedoston täytyy olla staattinen tiedosto jonka sisältö ei koskaan muutu. Muussa tapauksessa saatat menettää pääsyn tietokantaasi lopullisesti. +-Haluatko jatkaa käyttämällä tätä tiedostoa? +- +- +- Old key file format +- +- +- +- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. +- +- +- +- +- MainWindow +- +- &Database +- &Tietokanta +- +- +- &Help +- &Ohje +- +- +- &Groups +- Ryhmät +- +- +- &Tools +- T&yökalut +- +- +- &Quit +- &Lopeta +- +- +- &About +- T&ietoja +- +- +- Database settings +- Tietokannan asetukset +- +- +- Copy username to clipboard +- Kopioi käyttäjätunnus leikepöydälle +- +- +- Copy password to clipboard +- Kopioi salasana leikepöydälle +- +- +- &Settings +- &Asetukset +- +- +- &Title +- &Otsikko +- +- +- Copy title to clipboard +- Kopioi nimi leikepöydälle +- +- +- &URL +- &URL +- +- +- Copy URL to clipboard +- Kopioi osoite leikepöydälle +- +- +- &Notes +- &Muistiinpanot +- +- +- Copy notes to clipboard +- Kopioi muistiinpanot leikepöydälle +- +- +- Copy &TOTP +- Kopioi &TOTP +- +- +- E&mpty recycle bin +- &Tyhjennä roskakori +- +- +- Clear history +- Tyhjennä historia +- +- +- Access error for config file %1 +- Pääsyvirhe asetustiedostoon %1 +- +- +- Settings +- Asetukset +- +- +- Toggle window +- Vaihda ikkunaan +- +- +- Quit KeePassXC +- Sulje KeePassXC +- +- +- Please touch the button on your YubiKey! +- Kosketa YubiKeyssa olevaa painiketta! +- +- +- WARNING: You are using an unstable build of KeePassXC! +-There is a high risk of corruption, maintain a backup of your databases. +-This version is not meant for production use. +- VAROITUS: Käytät epävakaata KeePassXC-julkaisua! +-On mahdollista, että tietokantasi korruptoituu. Pidä huolta sen varmuuskopiosta. +-Tätä versiota ei ole tarkoitettu päivittäiseen käyttöön. +- +- +- &Donate +- &Lahjoita +- +- +- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +-We recommend you use the AppImage available on our downloads page. +- VAROITUS: Qt-versiosi voi aiheuttaa KeePassXC:n kaatumisen näytön näppäimistöllä! +-Suosittelemme, että käytät AppImagea, jonka voit hakea lataussivustoltamme. +- +- +- &Import +- &Tuo +- +- +- Create a new database +- Luo uusi tietokanta +- +- +- Merge from another KDBX database +- Yhdistä toisesta KDBX-tietokannasta +- +- +- Add a new entry +- Lisää uusi tietue +- +- +- View or edit entry +- Katso tai muokkaa tietuetta +- +- +- Add a new group +- Lisää uusi ryhmä +- +- +- Perform &Auto-Type +- Suorita &automaattitäydennys +- +- +- Open &URL +- &Avaa URL +- +- +- Import a KeePass 1 database +- Tuo KeePass 1 -tietokanta +- +- +- Import a CSV file +- Tuo CSV-tiedosto +- +- +- NOTE: You are using a pre-release version of KeePassXC! +-Expect some bugs and minor issues, this version is not meant for production use. +- HUOM: Käytät KeePassXC:n esiversiota! +-Bugeja ja ongelmia voi esiintyä. Tämä versio ei ole tarkoitettu päivittäiseen käyttöön. +- +- +- Check for updates on startup? +- Tarkistetaanko päivitykset käynnistyksen yhteydessä? +- +- +- Would you like KeePassXC to check for updates on startup? +- Haluatko että KeePassXC tarkistaa päivitykset käynnistyessään? +- +- +- You can always check for updates manually from the application menu. +- Voit tarkistaa päivitykset manuaalisesti sovellusvalikosta. +- +- +- &Export +- &Vie +- +- +- Sort &A-Z +- Järjestä &A-Ö +- +- +- Sort &Z-A +- Järjestä &Ö-A +- +- +- &Password Generator +- &Salasanageneraattori +- +- +- Import a 1Password Vault +- Tuo 1Password-holvi +- +- +- &Getting Started +- &Alkuun pääsy +- +- +- &User Guide +- &Käyttäjäopas +- +- +- &Keyboard Shortcuts +- &Pikanäppäimet +- +- +- &Recent Databases +- &Viimeisimmät tietokannat +- +- +- &Entries +- &Tietueet +- +- +- Copy Att&ribute +- Kopioi att&ribuutti +- +- +- TOTP +- TOTP +- +- +- View +- Näytä +- +- +- Theme +- Teema +- +- +- &Check for Updates +- Tarkista &päivitykset +- +- +- &Open Database… +- &Avaa tietokanta… +- +- +- &Save Database +- &Tallenna tietokanta +- +- +- &Close Database +- &Sulje tietokanta +- +- +- &New Database… +- &Uusi tietokanta… +- +- +- &Merge From Database… +- &Yhdistä tietokannasta… +- +- +- &New Entry… +- &Uusi tietue… +- +- +- &Edit Entry… +- &Muokkaa tietuetta… +- +- +- &Delete Entry… +- &Poista tietue… +- +- +- &New Group… +- &Uusi ryhmä… +- +- +- &Edit Group… +- &Muokkaa ryhmää… +- +- +- &Delete Group… +- &Poista ryhmä… +- +- +- Download All &Favicons… +- Lataa kaikki &faviconit… +- +- +- Sa&ve Database As… +- Ta&llenna tietokanta nimellä… +- +- +- Database &Security… +- Tietokannan &turvallisuus… +- +- +- Database &Reports... +- Tietokannan &raportit... +- +- +- Statistics, health check, etc. +- Tilastot, kelvollisuuden tarkastus jne. +- +- +- &Database Settings… +- &Tietokannan asetukset… +- +- +- &Clone Entry… +- &Kloonaa tietue… +- +- +- Move u&p +- Siirrä &ylös +- +- +- Move entry one step up +- Siirrä tietue yksi rivi ylemmäs +- +- +- Move do&wn +- Siirrä &alas +- +- +- Move entry one step down +- Siirrä tietue yksi rivi alemmas +- +- +- Copy &Username +- Kopioi &käyttäjätunnus +- +- +- Copy &Password +- Kopioi &salasana +- +- +- Download &Favicon +- Lataa &favicon +- +- +- &Lock Databases +- &Lukitse tietokannat +- +- +- &CSV File… +- &CSV-tiedosto… +- +- +- &HTML File… +- &HTML-tiedosto… +- +- +- KeePass 1 Database… +- KeePass 1 -tietokanta +- +- +- 1Password Vault… +- !Password-holvi... +- +- +- CSV File… +- CSV-tiedosto... +- +- +- Show TOTP +- Näytä TOTP +- +- +- Show QR Code +- Näytä QR-koodi +- +- +- Set up TOTP… +- Aseta TOTP... +- +- +- Report a &Bug +- Ilmoita &virheestä +- +- +- Open Getting Started Guide +- Avaa alkuun pääsyyn tarkoitettu opas +- +- +- &Online Help +- &Verkko-ohje +- +- +- Go to online documentation +- Siirry online-dokumentaatioon +- +- +- Open User Guide +- Avaa käyttöopas +- +- +- Save Database Backup... +- Tallenna tietokannan varmuuskopio... +- +- +- Add key to SSH Agent +- Lisää avain SSH-agenttiin +- +- +- Remove key from SSH Agent +- Poista avain SSH-agentista +- +- +- Compact Mode +- Kompakti tila +- +- +- Automatic +- Automaattinen +- +- +- Light +- Vaalea +- +- +- Dark +- Tumma +- +- +- Classic (Platform-native) +- Klassinen (käyttöjärjestelmän oma) +- +- +- Show Toolbar +- Näytä työkalupalkki +- +- +- Show Preview Panel +- Näytä esikatselupaneeli +- +- +- Don't show again for this version +- Älä näytä uudestaan tälle versiolle +- +- +- Restart Application? +- Käynnistä ohjelma uudelleen? +- +- +- You must restart the application to apply this setting. Would you like to restart now? +- Ohjelma täytyy käynnistää uudelleen, jotta asetus voidaan ottaa käyttöön. Haluatko käynnistää uudelleen nyt? +- +- +- Perform Auto-Type Sequence +- Suorita automaattisyötön sekvenssi +- +- +- {USERNAME} +- {USERNAME} +- +- +- {USERNAME}{ENTER} +- {USERNAME}{ENTER} +- +- +- {PASSWORD} +- {PASSWORD} +- +- +- {PASSWORD}{ENTER} +- {PASSWORD}{ENTER} +- +- +- Always on Top +- +- +- +- Hide Usernames +- Piilota käyttäjänimet +- +- +- Hide Passwords +- Piilota salasanat +- +- +- +- ManageDatabase +- +- Database settings +- Tietokannan asetukset +- +- +- Edit database settings +- Muokkaa tietokannan asetuksia +- +- +- Unlock database +- Avaa tietokannan lukitus +- +- +- Unlock database to show more information +- Avaa tietokannan lukitus näyttääksesi enemmän tietoja +- +- +- Lock database +- Lukitse tietokanta +- +- +- +- ManageSession +- +- Disconnect +- Katkaise yhteys +- +- +- Disconnect this application +- Katkaise yhteys tältä ohjelmalta +- +- +- +- Merger +- +- Creating missing %1 [%2] +- Luodaan puuttunutta %1 [%2] +- +- +- Relocating %1 [%2] +- Uudelleensijoitetaan %1 [%2] +- +- +- Overwriting %1 [%2] +- Ylikirjoitetaan %1 [%2] +- +- +- older entry merged from database "%1" +- vanhempi tietue yhdistetty tietokannasta "%1" +- +- +- Adding backup for older target %1 [%2] +- Lisätään varmuuskopio vanhemmalle kohteelle %1 [%2] +- +- +- Adding backup for older source %1 [%2] +- Lisätään varmuuskopio vanhemmalle lähteelle %1 [%2] +- +- +- Reapplying older target entry on top of newer source %1 [%2] +- Uudelleensijoitetaan vanhempi kohdetietue uuden lähteen päälle %1 [%2] +- +- +- Reapplying older source entry on top of newer target %1 [%2] +- Uudelleensijoitetaan vanhempi lähdetietue uuden kohteen päälle %1 [%2] +- +- +- Synchronizing from newer source %1 [%2] +- Synkronoidaan uudemmasta lähteestä %1 [%2] +- +- +- Synchronizing from older source %1 [%2] +- Synkronoidaan vanhemmasta lähteestä %1 [%2] +- +- +- Deleting child %1 [%2] +- Poistetaan lasta %1 [%2] +- +- +- Deleting orphan %1 [%2] +- Poistetaan orpoa %1 [%2] +- +- +- Changed deleted objects +- Muutettiin poistettuja kohteita +- +- +- Adding missing icon %1 +- Lisätään puuttuva ikoni %1 +- +- +- Removed custom data %1 [%2] +- Poista mukautettu tieto %1 [%2] +- +- +- Adding custom data %1 [%2] +- Lisätään mukautettua tietoa%1 [%2] +- +- +- +- NewDatabaseWizard +- +- Create a new KeePassXC database... +- Luo uusi KeePassXC-tietokanta... +- +- +- Root +- Root group +- Juuri +- +- +- +- NewDatabaseWizardPage +- +- WizardPage +- Ohjattu sivu +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Täällä voit säätää tietokannan salausasetuksia. Voit muokata niitä myöhemmin uudelleen. +- +- +- Advanced Settings +- Lisäasetukset +- +- +- Simple Settings +- Yksinkertaiset asetukset +- +- +- Encryption Settings +- Salausasetukset +- +- +- +- NewDatabaseWizardPageDatabaseKey +- +- Database Credentials +- Tietokannan tietueet +- +- +- A set of credentials known only to you that protects your database. +- Tietokannan suojelemiseksi tarkoitettu tietueiden ryhmä +- +- +- +- NewDatabaseWizardPageEncryption +- +- Encryption Settings +- Salausasetukset +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Täällä voit säätää tietokannan salausasetuksia. Voit muokata niitä myöhemmin uudelleen. +- +- +- +- NewDatabaseWizardPageMetaData +- +- General Database Information +- Yleiset tietokannan tiedot +- +- +- Please fill in the display name and an optional description for your new database: +- Ole hyvä ja täytä tietokantasi nimi ja vapaaehtoinen kuvaus: +- +- +- +- NixUtils +- +- Password Manager +- Salasanamanageri +- +- +- +- OpData01 +- +- Invalid OpData01, does not contain header +- Viallinen OpData01. Otsaketieto puuttuu +- +- +- Unable to read all IV bytes, wanted 16 but got %1 +- Kaikkia IV-tavuja ei voitu lukea. Tarvittiin 16, mutta saatiin vain %1 +- +- +- Unable to init cipher for opdata01: %1 +- OpData01:n salakirjoitusta ei voitu alustaa: %1 +- +- +- Unable to read all HMAC signature bytes +- Kaikkia HMAC-allekirjoituksen tavuja ei voitu lukea +- +- +- Malformed OpData01 due to a failed HMAC +- Viallinen OpData01 epäonnistuneen HMAC:in vuoksi +- +- +- Unable to process clearText in place +- Selkotekstiä ei voitu prosessoida +- +- +- Expected %1 bytes of clear-text, found %2 +- Odotettiin %1 tavua selkotekstiä, löydettiin %2 +- +- +- +- OpVaultOpenWidget +- +- Read Database did not produce an instance +-%1 +- Tietokannan lukeminen ei luonut instanssia +-%1 +- +- +- +- OpVaultReader +- +- Directory .opvault must exist +- Hakemiston .opvault täytyy olla olemassa +- +- +- Directory .opvault must be readable +- Hakemistoon .opvault täytyy olla lukuoikeus +- +- +- Directory .opvault/default must exist +- Hakemisto .opvault/default täytyy olla olemassa +- +- +- Directory .opvault/default must be readable +- Hakemistoon .opvault/default täytyy olla lukuoikeus +- +- +- Unable to decode masterKey: %1 +- Pääavainta %1 ei voitu purkaa +- +- +- Unable to derive master key: %1 +- Pääavainta %1 ei kyetty johdattamaan +- +- +- +- OpenSSHKey +- +- Invalid key file, expecting an OpenSSH key +- Virheellinen avaintiedosto, odotetaan OpenSSH-avainta +- +- +- PEM boundary mismatch +- Yhteensopimaton PEM-raja-arvo +- +- +- Base64 decoding failed +- Base64-dekoodaus epäonnistui +- +- +- Key file way too small. +- Avaintiedosto aivan liian pieni. +- +- +- Key file magic header id invalid +- Otsaketietojen taikatunniste on virheellinen +- +- +- Found zero keys +- Löytyi nolla avainta +- +- +- Failed to read public key. +- Julkisen avaimen lukeminen epäonnistui. +- +- +- Corrupted key file, reading private key failed +- Rikkinäinen avaintiedosto, yksityisen avaimen lukeminen epäonnistui +- +- +- No private key payload to decrypt +- Salauksen purku epäonnistui: yksityisen avaimen sisältö on tyhjä +- +- +- Trying to run KDF without cipher +- Yritetään tehdä avainmuunnosfunktiota ilman salausta +- +- +- Passphrase is required to decrypt this key +- Avaimen purkuun vaaditaan salalause +- +- +- Key derivation failed, key file corrupted? +- Avaimen muuntaminen epäonnistui. Onko avaintiedosto korruptoitunut? +- +- +- Decryption failed, wrong passphrase? +- Salauksen purku epäonnistui, väärä salalause? +- +- +- Unexpected EOF while reading public key +- Odottamaton EOF julkista avainta luettaessa +- +- +- Unexpected EOF while reading private key +- Odottamaton EOF yksityistä avainta luettaessa +- +- +- Can't write public key as it is empty +- Ei voida kirjoittaa julkista avainta, koska se on tyhjä +- +- +- Unexpected EOF when writing public key +- Odottamaton EOF julkista avainta kirjoittaessa +- +- +- Can't write private key as it is empty +- Ei voida kirjoittaa yksityistä avainta, koska se on tyhjä +- +- +- Unexpected EOF when writing private key +- Odottamaton EOF yksityistä avainta kirjoittaessa +- +- +- Unsupported key type: %1 +- Tuntematon avaimen tyyppi: %1 +- +- +- Unknown cipher: %1 +- Tuntematon salausalgoritmi: %1 +- +- +- Cipher IV is too short for MD5 kdf +- Salausalgoritmin alustusvektori on liian lyhyt MD5-avainmuunnosfunktiolle +- +- +- Unknown KDF: %1 +- Tuntematon avainmuunnosfunktio: %1 +- +- +- Unknown key type: %1 +- Tuntematon avaimen tyyppi: %1 +- +- +- +- PasswordEdit +- +- Passwords do not match +- Salasanat eivät täsmää +- +- +- Passwords match so far +- Salasanat jotka ovat tähän mennessä samoja +- +- +- Toggle Password (%1) +- Ota salasana käyttöön (%1) +- +- +- Generate Password (%1) +- Luo salasana (%1) +- +- +- Warning: Caps Lock enabled! +- Varoitus: Caps Lock on päällä! +- +- +- +- PasswordEditWidget +- +- Enter password: +- Syötä salasana: +- +- +- Confirm password: +- Vahvista salasana: +- +- +- Password +- Salasana +- +- +- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> +- <p>Salasana on kaikkein tärkein asia tietokannan suojauksessa.</p><p>Hyvät salasanat ovat pitkiä ja uniikkeja. KeePassXC voi luoda sellaisen sinulle.</p> +- +- +- Passwords do not match. +- Salasanat eivät ole samoja. +- +- +- Password field +- Salasanakenttä +- +- +- Repeat password field +- Toista salasana -kenttä +- +- +- +- PasswordGeneratorWidget +- +- %p% +- %p% +- +- +- strength +- Password strength +- vahvuus +- +- +- entropy +- entropia +- +- +- Password +- Salasana +- +- +- Character Types +- Merkkityypit +- +- +- Numbers +- Numerot +- +- +- Extended ASCII +- Laajennettu ASCII +- +- +- Exclude look-alike characters +- Poissulje samannäköiset merkit +- +- +- Pick characters from every group +- Poimi merkkejä jokaisesta ryhmästä +- +- +- &Length: +- &Pituus: +- +- +- Passphrase +- Salalause +- +- +- Wordlist: +- Sanalista: +- +- +- Word Separator: +- Sanaerotin: +- +- +- Close +- Sulje +- +- +- Entropy: %1 bit +- Entropia: %1 bit +- +- +- Password Quality: %1 +- Salasanan laatu: %1 +- +- +- Poor +- Password quality +- Huono +- +- +- Weak +- Password quality +- Heikko +- +- +- Good +- Password quality +- Hyvä +- +- +- Excellent +- Password quality +- Erinomainen +- +- +- Switch to advanced mode +- Vaihda kehittyneeseen tilaan +- +- +- Advanced +- Lisäasetukset +- +- +- Braces +- Sulut +- +- +- Punctuation +- Välimerkit +- +- +- Quotes +- Lainausmerkit +- +- +- Logograms +- Erikoismerkit +- +- +- Character set to exclude from generated password +- Kirjaimet joita ei käytetä salasanan muodostukseen +- +- +- Do not include: +- Älä sisällytä: +- +- +- Add non-hex letters to "do not include" list +- Lisää heksakoodia sisältämättömät kirjaimet "älä sisällytä" -listaan +- +- +- Hex +- Heksa +- +- +- Excluded characters: "0", "1", "l", "I", "O", "|", "ï¹’" +- Poissuljetut kirjaimet: "0", "1", "l", "I", "O", "|", "ï¹’" +- +- +- Generated password +- Luotu salasana +- +- +- Upper-case letters +- Isot kirjaimet +- +- +- Lower-case letters +- Pienet kirjaimet +- +- +- Special characters +- Erikoismerkit +- +- +- Math Symbols +- Matemaattiset symbolit +- +- +- Dashes and Slashes +- Viivat ja vinoviivat +- +- +- Excluded characters +- Poissuljetut merkit +- +- +- Hex Passwords +- Heksasalasanat +- +- +- Password length +- Salasanan pituus +- +- +- Word Case: +- Aakkoslaji: +- +- +- Regenerate password +- Luo salasana uudelleen +- +- +- Copy password +- Kopioi salasana +- +- +- lower case +- pienaakkoset +- +- +- UPPER CASE +- SUURAAKKOSET +- +- +- Title Case +- Otsikon aakkoslaji +- +- +- Generate Password +- Luo salasana +- +- +- Also choose from: +- Valitse myös: +- +- +- Additional characters to use for the generated password +- Lisäkirjaimet joita käytetään salasanan luomisessa +- +- +- Additional characters +- Lisäkirjaimet +- +- +- Word Count: +- Sanamäärä: +- +- +- Esc +- Esc +- +- +- Apply Password +- Käytä salasanaa +- +- +- Ctrl+S +- Ctrl+S +- +- +- Regenerate password (%1) +- Luo salasana uudelleen (%1) +- +- +- Special Characters +- Erikoismerkit +- +- +- +- QApplication +- +- KeeShare +- KeeShare +- +- +- Statistics +- Tilastot +- +- +- Very weak password +- Erittäin heikko salasana +- +- +- Password entropy is %1 bits +- Salasanan entropia on %1 bittiä +- +- +- Weak password +- Heikko salasana +- +- +- Used in %1/%2 +- Käytetty %1/%2 +- +- +- Password is used %1 times +- Salasanaa on käytetty %1 kertaa +- +- +- Password has expired +- Salasana on vanhentunut +- +- +- Password expiry was %1 +- Salasana vanhentui %1 +- +- +- Password is about to expire +- Salasana on vanhentumassa +- +- +- Password expires in %1 days +- Salasana vanhentuu %1 päivässä +- +- +- Password will expire soon +- Salasana vanhenee pian +- +- +- Password expires on %1 +- Salasana vanhentuu %1 +- +- +- Health Check +- Diagnostiikka +- +- +- HIBP +- HIBP +- +- +- +- QMessageBox +- +- Overwrite +- Korvaa +- +- +- Delete +- Poista +- +- +- Move +- Siirrä +- +- +- Empty +- Tyhjä +- +- +- Remove +- Poista +- +- +- Skip +- Ohita +- +- +- Disable +- Kytke pois päältä +- +- +- Merge +- Yhdistä +- +- +- Continue +- Jatka +- +- +- +- QObject +- +- Database not opened +- Tietokanta ei avattu +- +- +- Database hash not available +- Tietokannan tiivistettä (hash) ei saatu +- +- +- Client public key not received +- Asiakkaan julkista avainta ei saatu +- +- +- Cannot decrypt message +- Viestin salauksen purkaminen ei onnistu +- +- +- Action cancelled or denied +- Toiminto peruttiin tai estettiin +- +- +- KeePassXC association failed, try again +- Liittäminen KeePassXC:hen epäonnistui, yritä uudelleen +- +- +- Encryption key is not recognized +- Salausavainta ei tunnistettu +- +- +- Incorrect action +- Virheellinen toiminto +- +- +- Empty message received +- Vastaanotettiin tyhjä viesti +- +- +- No URL provided +- Sivuston osoitetta ei ole annettu +- +- +- No logins found +- Tunnuksia ei löydy +- +- +- Unknown error +- Tuntematon virhe +- +- +- Add a new entry to a database. +- Lisää uusi tietue tietokantaan. +- +- +- Path of the database. +- Tietokannan polku. +- +- +- Key file of the database. +- Tietokannan avaintiedosto. +- +- +- path +- polku +- +- +- Username for the entry. +- Tietueen käyttäjänimi. +- +- +- username +- käyttäjätunnus +- +- +- URL for the entry. +- Tietueen osoite. +- +- +- URL +- URL +- +- +- Prompt for the entry's password. +- Tietueen salasanan kuvaus. +- +- +- Generate a password for the entry. +- Luo tietueelle salasana. +- +- +- length +- pituus +- +- +- Path of the entry to add. +- Lisättävän tietueen polku. +- +- +- Path of the entry to clip. +- clip = copy to clipboard +- Kopioitavan tietueen polku. +- +- +- Timeout in seconds before clearing the clipboard. +- Viive sekunneissa ennen leikepöydän tyhjentämistä. +- +- +- Edit an entry. +- Muokkaa tietuetta. +- +- +- Title for the entry. +- Tietueen nimi +- +- +- title +- nimi +- +- +- Path of the entry to edit. +- Muokattavan tietueen polku. +- +- +- Estimate the entropy of a password. +- Salasanan arvioitu entropia. +- +- +- Password for which to estimate the entropy. +- Salasana josta entropia arvioidaan. +- +- +- Perform advanced analysis on the password. +- Suorita salasanalle edistynyt analyysi. +- +- +- +- +-Available commands: +- +- +- +-Käytettävissä olevat komennot: +- +- +- +- Name of the command to execute. +- Suoritettavan komennon nimi. +- +- +- List database entries. +- Listaa tietokannan tietueet. +- +- +- Path of the group to list. Default is / +- Listattavan ryhmän polku. Oletus on / +- +- +- Find entries quickly. +- Etsi tietueita nopeasti. +- +- +- Search term. +- Hakutermi. +- +- +- Merge two databases. +- Yhdistä kaksi tietokantaa. +- +- +- Path of the database to merge from. +- Tietokannan polku, josta yhdistetään. +- +- +- Use the same credentials for both database files. +- Käytä samoja tilitietoja molemmille tietokantatiedostoille. +- +- +- Key file of the database to merge from. +- Tietokannan avaintiedosto, josta yhdistetään. +- +- +- Show an entry's information. +- Näytä tietueen tiedot. +- +- +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- Näytettävien attribuuttien nimi. Tämän asetuksen voi määrittää useammin kuin kerran, jokaisen attribuutin näkyessä omalla rivillään annetussa järjestyksessä. Jos attribuutteja ei ole määritetty, näytetään yhteenveto oletuksista. +- +- +- attribute +- attribuutti +- +- +- Name of the entry to show. +- Näytettävän tietueen nimi. +- +- +- NULL device +- Tyhjä laite (NULL) +- +- +- error reading from device +- virhe laitteelta luettaessa +- +- +- malformed string +- Viallinen merkkijono +- +- +- missing closing quote +- lainausmerkki puuttuu lopusta +- +- +- Group +- Ryhmä +- +- +- Title +- Otsikko +- +- +- Username +- Käyttäjätunnus +- +- +- Password +- Salasana +- +- +- Notes +- Muistiinpanot +- +- +- Last Modified +- Viimeksi muokattu +- +- +- Created +- Luotu +- +- +- Browser Integration +- Selainintegraatio +- +- +- SSH Agent +- SSH-agentti +- +- +- Generate a new random diceware passphrase. +- Luo uusi satunnainen noppaware-salalause +- +- +- Word count for the diceware passphrase. +- Sanamäärä noppaware-salalauseelle. +- +- +- Wordlist for the diceware generator. +-[Default: EFF English] +- Sanalista noppaware-luojalle. +-[Oletus: EFF Englanti] +- +- +- Generate a new random password. +- Luo uusi satunnainen salasana. +- +- +- Could not create entry with path %1. +- Tietuetta ei voitu luoda polun %1 kanssa. +- +- +- Enter password for new entry: +- Anna uuden tietueen salasana: +- +- +- Writing the database failed %1. +- Tietokantaan kirjoittaminen epäonnistui %1. +- +- +- Successfully added entry %1. +- Tietueen %1 lisäys onnistui. +- +- +- Invalid timeout value %1. +- Virheellinen aikakatkaisun arvo %1. +- +- +- Entry %1 not found. +- Tietuetta %1 ei löytynyt. +- +- +- Entry with path %1 has no TOTP set up. +- Tietueella joka käyttää polkua %1 ei ole TOTP:ia asetettuna. +- +- +- Clearing the clipboard in %1 second(s)... +- Tyhjennetään leikepöytä %1 sekunnissa...Tyhjennetään leikepöytä %1 sekunnissa... +- +- +- Clipboard cleared! +- Leikepöytä tyhjennetty! +- +- +- Silence password prompt and other secondary outputs. +- Hiljennä salasanamuistutus ja muut toissijaiset tulostukset. +- +- +- count +- CLI parameter +- määrä +- +- +- Could not find entry with path %1. +- Tietuetta polulla %1 ei löydetty. +- +- +- Not changing any field for entry %1. +- Yhtään kenttää tietueelle %1 ei vaihdettu. +- +- +- Enter new password for entry: +- Anna tietueelle uusi salasana: +- +- +- Writing the database failed: %1 +- Tietokannan kirjoittaminen epäonnistui: %1 +- +- +- Successfully edited entry %1. +- Tietuetta %1 muokattiin onnistuneesti. +- +- +- Length %1 +- Pituus %1 +- +- +- Entropy %1 +- Entropia %1 +- +- +- Log10 %1 +- Log10 %1 +- +- +- Multi-word extra bits %1 +- Monisanaiset ylimääräiset tavut %1 +- +- +- Type: Bruteforce +- Tyyppi: Väsytyshyökkäys +- +- +- Type: Dictionary +- Tyyppi: Sanakirja +- +- +- Type: Dict+Leet +- Tyyppi: Sanakirja + Leet +- +- +- Type: User Words +- Tyyppi: Käyttäjän sanat +- +- +- Type: User+Leet +- Tyyppi: Käyttäjän sanat + Leet +- +- +- Type: Repeated +- Tyyppi: Toistettu +- +- +- Type: Sequence +- Tyyppi: Sekvenssi +- +- +- Type: Spatial +- Tyyppi: Spatiaalinen +- +- +- Type: Date +- Tyyppi: Päivämäärä +- +- +- Type: Bruteforce(Rep) +- Tyyppi: Väsytyshyökkäys (toistettu) +- +- +- Type: Dictionary(Rep) +- Tyyppi: Sanakirja (toistettu) +- +- +- Type: Dict+Leet(Rep) +- Tyyppi: Sanakirja + Leet (toistettu) +- +- +- Type: User Words(Rep) +- Tyyppi: Käyttäjän sanat (toistettu) +- +- +- Type: User+Leet(Rep) +- Tyyppi: Käyttäjän sanat + Leet (toistettu) +- +- +- Type: Repeated(Rep) +- Tyyppi: Toistettu (toistettu) +- +- +- Type: Sequence(Rep) +- Tyyppi: Sekvenssi (toistettu) +- +- +- Type: Spatial(Rep) +- Tyyppi: Spatiaalinen (toistettu) +- +- +- Type: Date(Rep) +- Tyyppi: Päivämäärä (toistettu) +- +- +- Type: Unknown%1 +- Tyyppi: Tuntematon %1 +- +- +- Entropy %1 (%2) +- Entropia %1 (%2) +- +- +- *** Password length (%1) != sum of length of parts (%2) *** +- *** Salasanan pituus (%1) != osien (%2) summa *** +- +- +- Failed to load key file %1: %2 +- Avaintiedoston %1 lataaminen epäonnistui: %2 +- +- +- Length of the generated password +- Luodun salasanan pituus +- +- +- Use lowercase characters +- Käytiä pieniä merkkejä +- +- +- Use uppercase characters +- Käytä isoja merkkejä +- +- +- Use special characters +- Käytä erikoismerkkejä +- +- +- Use extended ASCII +- Käytä laajennettua ASCII-merkistöä +- +- +- Exclude character set +- Älä sisällytä merkkejä +- +- +- chars +- merkit +- +- +- Exclude similar looking characters +- Älä sisällytä samankaltaisilta vaikuttavia kirjaimia +- +- +- Include characters from every selected group +- Sisällytä kirjaimia jokaisesta valitusta ryhmästä +- +- +- Recursively list the elements of the group. +- Listaa ryhmän elementit rekursiivisesti +- +- +- Cannot find group %1. +- Ryhmää %1 ei löytynyt. +- +- +- Error reading merge file: +-%1 +- Virhe lukiessa yhdistämiseen tarvittavaa tiedostoa: +-%1 +- +- +- Unable to save database to file : %1 +- Tietokannan tallentaminen tiedostoon ei onnistu: %1 +- +- +- Unable to save database to file: %1 +- Tietokantaa ei voitu tallentaa tiedostoon: %1 +- +- +- Successfully recycled entry %1. +- Tietue %1 siirrettiin onnistuneesti roskakoriin. +- +- +- Successfully deleted entry %1. +- Tietue %1 poistettiin onnistuneesti. +- +- +- Show the entry's current TOTP. +- Näytä tietueen tämän hetkinen TOTP. +- +- +- ERROR: unknown attribute %1. +- VIRHE: Tuntematon attribuutti %1. +- +- +- No program defined for clipboard manipulation +- Ohjelmaa leikepöydän hallintaan ei ole määritelty. +- +- +- file empty +- tyhjä tiedosto +- +- +- %1: (row, col) %2,%3 +- %1: (rivi, sarake) %2,%3 +- +- +- AES-KDF (KDBX 4) +- AES-KDF (KDBX 4) +- +- +- AES-KDF (KDBX 3.1) +- AES-KDF (KDBX 3.1) +- +- +- Invalid Settings +- TOTP +- Virheelliset asetukset +- +- +- Invalid Key +- TOTP +- Virheellinen avain +- +- +- Message encryption failed. +- Viestin salaus epäonnistui +- +- +- No groups found +- Ryhmiä ei löytynyt +- +- +- Create a new database. +- Luo uusi tietokanta. +- +- +- File %1 already exists. +- Tiedosto %1 on jo olemassa. +- +- +- Loading the key file failed +- Avaintiedoston lataaminen epäonnistui +- +- +- No key is set. Aborting database creation. +- Avainta ei ole asetettu. Perutaan tietokannan luominen. +- +- +- Failed to save the database: %1. +- Tietokannan tallentaminen epäonnistui: %1. +- +- +- Successfully created new database. +- Luotiin onnistuneesti uusi tietokanta. +- +- +- Creating KeyFile %1 failed: %2 +- Avaintiedoston %1 luonti epäonnistui: %2 +- +- +- Loading KeyFile %1 failed: %2 +- Avaintiedoston %1 lataus epäonnistui: %2 +- +- +- Path of the entry to remove. +- Poistettavan tietueen polku. +- +- +- Existing single-instance lock file is invalid. Launching new instance. +- Olemassa oleva yhden instanssin lukkotiedosto on virheellinen. Avataan uusi instanssi. +- +- +- The lock file could not be created. Single-instance mode disabled. +- Lukkotiedosto ei voitu luoda. Yhden instanssin tila otettu pois käytöstä. +- +- +- KeePassXC - cross-platform password manager +- KeePassXC - järjestelmäriippumaton salasanojen hallintasovellus +- +- +- filenames of the password databases to open (*.kdbx) +- avattavien salasanatietokantojen tiedostonimet (*.kdbx) +- +- +- path to a custom config file +- polku mukautettuun asetustiedostoon +- +- +- key file of the database +- tietokannan avaintiedosto +- +- +- read password of the database from stdin +- lue tietokannan salasana stdin:istä +- +- +- Another instance of KeePassXC is already running. +- Toinen KeePassXC-instanssi on jo käynnissä. +- +- +- Fatal error while testing the cryptographic functions. +- Vakava virhe kryptografisia toimintoa testattaessa. +- +- +- KeePassXC - Error +- KeePassXC - Virhe +- +- +- Database password: +- Tietokannan salasana: +- +- +- Cannot create new group +- Uutta ryhmää ei voitu luoda +- +- +- Deactivate password key for the database. +- Poista salasana-avain tietokannasta. +- +- +- Displays debugging information. +- Näytä virheenjäljitystiedot. +- +- +- Deactivate password key for the database to merge from. +- Ota salasana-avain pois käytöstä tietokannasta josta yhdistetään. +- +- +- Version %1 +- Versio %1 +- +- +- Build Type: %1 +- Ohjelmiston tyyppi +- +- +- Revision: %1 +- Revisio: %1 +- +- +- Distribution: %1 +- Jakelu: %1 +- +- +- Debugging mode is disabled. +- Virheenjäljitystila on pois päältä. +- +- +- Debugging mode is enabled. +- Virheenjäljitystila on päällä. +- +- +- Operating system: %1 +-CPU architecture: %2 +-Kernel: %3 %4 +- Käyttöjärjestelmä: %1 +-Suoritinarkkitehtuuri: %2 +-Ydin: %3 %4 +- +- +- Auto-Type +- Automaattisyöttö +- +- +- KeeShare (signed and unsigned sharing) +- KeeShare (allekirjoitettu ja allekirjoittamaton jakaminen) +- +- +- KeeShare (only signed sharing) +- KeeShare (vain allekirjoitettu jakaminen) +- +- +- KeeShare (only unsigned sharing) +- KeeShare (vain allekirjoittamaton jakaminen) +- +- +- YubiKey +- YubiKey +- +- +- TouchID +- TouchID +- +- +- None +- Ei mitään +- +- +- Enabled extensions: +- Käytössä olevat laajennukset: +- +- +- Cryptographic libraries: +- Kryptografiakirjastot: +- +- +- Cannot generate a password and prompt at the same time! +- Salasanaa ei voida luoda ja asettaa yhtäaikaisesti! +- +- +- Adds a new group to a database. +- Lisää uuden ryhmän tietokantaan. +- +- +- Path of the group to add. +- Lisättävän ryhmän polku. +- +- +- Group %1 already exists! +- Ryhmä %1 on jo olemassa! +- +- +- Group %1 not found. +- Ryhmää %1 ei löydy. +- +- +- Successfully added group %1. +- Ryhmä %1 lisättiin onnistuneesti. +- +- +- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. +- Tarkista onko yksikään salanoista julkisesti vuotanut. TIEDOSTONIMEN täytyy osoittaa sijaintiin tiedostosta, joka listaa SHA-1 -tiivisteet vuotaneista salasanoista HIBP-muodossa, kuten sivusto https://haveibeenpwned.com/Passwords tarjoaa. +- +- +- FILENAME +- TIEDOSTONIMI +- +- +- Analyze passwords for weaknesses and problems. +- Analysoi salasanojen heikkouksia ja ongelmia. +- +- +- Failed to open HIBP file %1: %2 +- HIBP-tiedoston %1 avaus epäonnistui: %2 +- +- +- Evaluating database entries against HIBP file, this will take a while... +- Tarkastetaan tietokantaa HIBP-tiedostoa vasten, tämä kestää hetken aikaa... +- +- +- Close the currently opened database. +- Sulje parhaillaan avoinna oleva tietokanta. +- +- +- Display this help. +- Näytä tämä ohje. +- +- +- slot +- paikka +- +- +- Invalid word count %1 +- Väärä sanamäärä %1 +- +- +- The word list is too small (< 1000 items) +- Sanalista on liian pieni (< 1000 sanaa) +- +- +- Exit interactive mode. +- Poistu interaktiivisesta tilasta. +- +- +- Exports the content of a database to standard output in the specified format. +- Vie tietokannan sisällön standardiin tulosteeseen (stdout) halutussa formaatissa. +- +- +- Unable to export database to XML: %1 +- Tietokantaa ei voitu viedä XML-muotoon: %1 +- +- +- Unsupported format %1 +- Formaattia %1 ei ole tuettu +- +- +- Use numbers +- Käytä numeroita +- +- +- Invalid password length %1 +- Väärä salasanan pituus %1 +- +- +- Display command help. +- Näytä komento-ohjeistus +- +- +- Available commands: +- Käytettävissä olevat komennot: +- +- +- Import the contents of an XML database. +- Tuo XML-tietokannan sisältö. +- +- +- Path of the XML database export. +- Tietokannan XML-viennin polku. +- +- +- Path of the new database. +- Uuden tietokannan polku. +- +- +- Successfully imported database. +- Tietokanta tuotiin onnistuneesti. +- +- +- Unknown command %1 +- Tuntematon komento %1 +- +- +- Flattens the output to single lines. +- Tasoittaa tulostuksen yksittäisille riveille. +- +- +- Only print the changes detected by the merge operation. +- Tulosta vain yhdistämisessä havaitut muutokset. +- +- +- Yubikey slot for the second database. +- Yukibey-paikka toiselle tietokannalle. +- +- +- Successfully merged %1 into %2. +- %1 yhdistettiin onnistuneesti kohteeseen %2 +- +- +- Database was not modified by merge operation. +- Tietokannan sisältö ei muuttunut yhdistämisen yhteydessä. +- +- +- Moves an entry to a new group. +- Siirtää tietueen uuteen ryhmään. +- +- +- Path of the entry to move. +- Siirrettävän tietueen polku. +- +- +- Path of the destination group. +- Kohderyhmän polku. +- +- +- Could not find group with path %1. +- Ryhmää ei voitu löytää polussa %1. +- +- +- Entry is already in group %1. +- Tietue on jo ryhmässä %1. +- +- +- Successfully moved entry %1 to group %2. +- Siirrettiin onnistuneesti tietue %1 ryhmään %2. +- +- +- Open a database. +- Avaa tietokanta. +- +- +- Path of the group to remove. +- Poistettavan ryhmän polku. +- +- +- Cannot remove root group from database. +- Juuriryhmää ei voida poistaa tietokannasta. +- +- +- Successfully recycled group %1. +- Ryhmä %1 siirrettiin onnistuneesti roskakoriin. +- +- +- Successfully deleted group %1. +- Ryhmä %1 poistettiin onnistuneesti. +- +- +- Failed to open database file %1: not found +- Tietokantatiedoston %1 avaus epäonnistui: ei löytynyt +- +- +- Failed to open database file %1: not a plain file +- Tietokantatiedostoa %1 ei voitu avata: ei ole tavallinen tiedosto +- +- +- Failed to open database file %1: not readable +- Tietokantatiedoston %1 avaus epäonnistui: ei luettavissa +- +- +- Enter password to unlock %1: +- Syötä salasana avataksesi %1: +- +- +- Invalid YubiKey slot %1 +- Virheellinen Yubikey-paikka %1 +- +- +- Enter password to encrypt database (optional): +- Syötä salasana salataksesi tietokannan (valinnainen): +- +- +- HIBP file, line %1: parse error +- HIBP-tiedosto, rivi %1: jäsennysvirhe +- +- +- Secret Service Integration +- Secret Service -integraatio +- +- +- User name +- Käyttäjätunnus +- +- +- Password for '%1' has been leaked %2 time(s)! +- Salasana palveluun '%1' on vuotanut %1 kerran!Salasana palveluun '%1' on vuotanut %2 kertaa! +- +- +- Invalid password generator after applying all options +- Virheellinen salasanageneraattori kaikkien aktiivisten asetusten kanssa +- +- +- Show the protected attributes in clear text. +- Näytä suojatut attribuutit selkotekstinä. +- +- +- Browser Plugin Failure +- Selainliitännän virhe +- +- +- Could not save the native messaging script file for %1. +- Native messaging -skriptatiedostoa ei voitu tallentaa %1. +- +- +- Copy the given attribute to the clipboard. Defaults to "password" if not specified. +- Kopioi annettu attribuutti leikepöydälle. Asetetaan oletukseen "password", mikäli tätä ei ole asetettu. +- +- +- Copy the current TOTP to the clipboard (equivalent to "-a totp"). +- Kopioi tämän hetkinen TOTP leikepöydälle (sama kuin "-a totp"). +- +- +- Copy an entry's attribute to the clipboard. +- Kopioi tietueen attribuutti leikepöydälle +- +- +- ERROR: Please specify one of --attribute or --totp, not both. +- VIRHE: Määritä joko --attribute tai --totp, mutta älä molempia. +- +- +- ERROR: attribute %1 is ambiguous, it matches %2. +- VIRHE: attribuutti %1 on epäselvä, se sopii yhteen %2 kanssa. +- +- +- Attribute "%1" not found. +- Attribuuttia "%1" ei löydy. +- +- +- Entry's "%1" attribute copied to the clipboard! +- Tietueen "%1" attribuutti on kopioitu leikepöydälle! +- +- +- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). +- Yubikeyn paikka ja valinnainen serial tietokannan pääsyyn (esim. 1:7370001). +- +- +- slot[:serial] +- paikka[:serial] +- +- +- Target decryption time in MS for the database. +- Kohteen salauksen purkuun kuluva aika millisekunneissa tietokannalle. +- +- +- time +- aika +- +- +- Set the key file for the database. +- Syötä tietokannan avaintiedosto. +- +- +- Set a password for the database. +- Syötä tietokannan salasana. +- +- +- Invalid decryption time %1. +- Virheellinen salauksen purun aika %1. +- +- +- Target decryption time must be between %1 and %2. +- Kohteen salauksen purkuun kuluva aika täytyy olla välillä %1 ja %2. +- +- +- Failed to set database password. +- Tietokannan salasanan asettaminen ei onnistunut. +- +- +- Benchmarking key derivation function for %1ms delay. +- Verrataan avainmuunnosfunktiota %1 ms:n viiveelle. +- +- +- Setting %1 rounds for key derivation function. +- Asetetaan %1 kierrosta avainmuunnosfunktiolle. +- +- +- error while setting database key derivation settings. +- Virhe asetettaessa tietokannan avainmuunnosfunktion asetuksia. +- +- +- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. +- Viennissä käytettävä formaatti. Mahdolliset vaihtoehdot ovat 'xml' tai 'csv'. Oletus on 'xml'. +- +- +- Unable to import XML database: %1 +- XML-muodossa olevaa tietokantaa ei voitu tuoda: %1 +- +- +- Show a database's information. +- Näytä tietokannan tiedot. +- +- +- UUID: +- UUID: +- +- +- Name: +- Nimi: +- +- +- Description: +- Kuvaus: +- +- +- Cipher: +- Salaus: +- +- +- KDF: +- KDF: +- +- +- Recycle bin is enabled. +- Roskakori on otettu käyttöön. +- +- +- Recycle bin is not enabled. +- Roskakori ei ole käytössä. +- +- +- Invalid command %1. +- Virheellinen komento %1. +- +- +- Invalid YubiKey serial %1 +- Virheellinen Yubikeyn serial %1 +- +- +- Please touch the button on your YubiKey to continue… +- Ole hyvä ja paina Yubikeyssä olevaa painiketta jatkaaksesi... +- +- +- Do you want to create a database with an empty password? [y/N]: +- Haluatko luoda tietokannan tyhjällä salasanalla? [k/E]: +- +- +- Repeat password: +- Toista salasana: +- +- +- Error: Passwords do not match. +- Virhe: Salasanat eivät ole samoja. +- +- +- All clipping programs failed. Tried %1 +- +- Kaikki leikkaavat ohjelmat epäonnistuivat. Kokeiltiin %1 +- +- +- +- AES (%1 rounds) +- AES (%1 kierrosta) +- +- +- AES 256-bit +- AES 256-bit +- +- +- Twofish 256-bit +- Twofish 256-bit +- +- +- ChaCha20 256-bit +- ChaCha20: 256-bit {20 256-?} +- +- +- Benchmark %1 delay +- Mittaa %1 viive +- +- +- %1 ms +- milliseconds +- %1 ms%1 ms +- +- +- %1 s +- seconds +- %1 s%1 s +- +- +- path to a custom local config file +- +- +- +- WARNING: You are using an old key file format which KeePassXC may +-stop supporting in the future. +- +-Please consider generating a new key file. +- +- +- +- Argon2%1 (%2 rounds, %3 KB) +- +- +- +- Argon2d (KDBX 4 – recommended) +- +- +- +- Argon2id (KDBX 4) +- +- +- +- TOTP +- TOTP +- +- +- Icon +- Kuvake +- +- +- Unsupported key file version: %1 +- +- +- +- Checksum mismatch! Key file may be corrupt. +- +- +- +- Unexpected key file data! Key file may be corrupt. +- +- +- +- +- QtIOCompressor +- +- Internal zlib error when compressing: +- Sisäinen zlib virhe pakatessa: +- +- +- Error writing to underlying device: +- Kirjoitus taustalla olevaan laitteeseen epäonnistui: +- +- +- Error opening underlying device: +- Taustalla olevan laitteen avaus epäonnistui: +- +- +- Error reading data from underlying device: +- Virhe luettaessa taustalla olevasta laitteesta: +- +- +- Internal zlib error when decompressing: +- Sisäinen zlib-virhe purkaessa: +- +- +- +- QtIOCompressor::open +- +- The gzip format not supported in this version of zlib. +- gzip-formaatti ei ole tuettu tässä zlib-versiossa. +- +- +- Internal zlib error: +- Sisäinen zlib-virhe: +- +- +- +- ReportsWidgetHealthcheck +- +- Also show entries that have been excluded from reports +- Näytä myös ne tietueet jotka on poissuljettu raporteista +- +- +- Hover over reason to show additional details. Double-click entries to edit. +- Siirrä kursori syyn päälle nähdäksesi lisätietoja. Tuplaklikkaa tietueita muokataksesi niitä. +- +- +- Bad +- Password quality +- Paha +- +- +- Bad — password must be changed +- Paha - salasana on vaihdettava +- +- +- Poor +- Password quality +- Huono +- +- +- Poor — password should be changed +- Heikko - salasana on vaihdettava +- +- +- Weak +- Password quality +- Heikko +- +- +- Weak — consider changing the password +- Heikohko - salasana on vaihdettava +- +- +- (Excluded) +- (Poissuljettu) +- +- +- This entry is being excluded from reports +- Tämä tietue on poissuljettu raporteista +- +- +- Please wait, health data is being calculated... +- Odota hetki, diagnostiikkaa lasketaan... +- +- +- Congratulations, everything is healthy! +- Onneksi olkoon, kaikki on kunnossa! +- +- +- Title +- Otsikko +- +- +- Path +- Polku +- +- +- Score +- Pisteytys +- +- +- Reason +- Syy +- +- +- Edit Entry... +- Muokkaa tietuetta... +- +- +- Exclude from reports +- Poissulje raporteista +- +- +- +- ReportsWidgetHibp +- +- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. +- HUOMIO: Tämä raportti lähettää tietoa Have I Been Pwned -palveluun (https://haveibeenpwned.com). Jos jatkat, tietokantasi salasanat tiivistetään ja viisi ensimmäistä kirjainta tästä tiivisteestä lähetetään turvallisesti palvelimelle. Tietokantasi pysyy turvassa, eikä sen tietoja voida kerätä tätä informaatiota käyttäen. Salasanojesi määrä ja IP-osoitteesi tosin lähetetään palvelimelle. +- +- +- Perform Online Analysis +- Suorita online-analyysi +- +- +- Also show entries that have been excluded from reports +- Näytä myös ne tietueet jotka on otettu pois raporteista +- +- +- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. +- Tässä KeePassXC:n build-versiossa ei ole verkkotoiminnallisuuksia. Verkkotoiminnallisuus vaaditaan, jotta voit tarkistaa salasanojasi Have I Been Pwned -tietokannasta. +- +- +- Congratulations, no exposed passwords! +- Onneksi olkoon, salasanojasi ei ole vuotanut! +- +- +- Title +- Otsikko +- +- +- Path +- Polku +- +- +- Password exposed… +- Salasana vuotanut... +- +- +- (Excluded) +- (Poissuljettu) +- +- +- This entry is being excluded from reports +- Tämä tietue on poissuljettu raporteista +- +- +- once +- kerran +- +- +- up to 10 times +- jopa kymmenen kertaa +- +- +- up to 100 times +- jopa sata kertaa +- +- +- up to 1000 times +- jopa tuhat kertaa +- +- +- up to 10,000 times +- jopa 10 000 kertaa +- +- +- up to 100,000 times +- jopa 100 000 kertaa +- +- +- up to a million times +- jopa miljoona kertaa +- +- +- millions of times +- miljoonia kertoja +- +- +- Edit Entry... +- Muokkaa tietuetta... +- +- +- Exclude from reports +- Poissulje raporteista +- +- +- +- ReportsWidgetStatistics +- +- Hover over lines with error icons for further information. +- Liiku virheikonin sisältävän rivin päälle saadaksesi lisätietoa. +- +- +- Name +- Nimi +- +- +- Value +- Arvo +- +- +- Please wait, database statistics are being calculated... +- Odota hetki, lasketaan tietokannan statistiikkaa... +- +- +- Database name +- Tietokannan nimi +- +- +- Description +- Kuvaus +- +- +- Location +- Sijainti +- +- +- Last saved +- Viimeksi tallennettu +- +- +- Unsaved changes +- Tallentamattomia muutoksia +- +- +- yes +- kyllä +- +- +- no +- ei +- +- +- The database was modified, but the changes have not yet been saved to disk. +- Tietokantaa muokattiin, mutta muutoksia ei ole tallennettu levylle. +- +- +- Number of groups +- Ryhmien määrä +- +- +- Number of entries +- Tietueiden lukumäärä +- +- +- Number of expired entries +- Vanhentuneiden tietueiden lukumäärä +- +- +- The database contains entries that have expired. +- Tietokanta sisältää tietueita jotka ovat vanhentuneet. +- +- +- Unique passwords +- Yksilöllisiä salasanoja +- +- +- Non-unique passwords +- Ei-yksilöllisiä salasanoja +- +- +- More than 10% of passwords are reused. Use unique passwords when possible. +- Salasanoista enemmän kuin 10% ovat samoja. Käytä yksilöllisiä salasanoja aina kun mahdollista. +- +- +- Maximum password reuse +- Maksimimäärä samoja salasanoja +- +- +- Some passwords are used more than three times. Use unique passwords when possible. +- Salasanoista osa on käytössä useammassa kuin kolmessa tietueessa. Käytä yksilöllisiä salasanoja aina kun mahdollista. +- +- +- Number of short passwords +- Lyhyiden salasanojen määrä +- +- +- Recommended minimum password length is at least 8 characters. +- Salasanan suositeltu minimipituus on vähintään 8 merkkiä. +- +- +- Number of weak passwords +- Heikkojen salasanojen määrä +- +- +- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. +- On suositeltavaa käyttää salasanoja joiden luokitus on 'hyvä' tai 'erinomainen'. +- +- +- Entries excluded from reports +- Tietueet jotka on poissuljettu raporteista +- +- +- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. +- Poissuljetut tietueet raporteista, esim. joissa tiedetään olevan heikko salasana, eivät välttämättä ole ongelma, mutta niitä kannattaa pitää silmällä. +- +- +- Average password length +- Salasanan keskimääräinen pituus +- +- +- %1 characters +- %1 merkkiä +- +- +- Average password length is less than ten characters. Longer passwords provide more security. +- Salasanojen keskimääräinen pituus on vähemmän kuin kymmenen merkkiä. Pidemmät salasanat ovat turvallisempia. +- +- +- +- SSHAgent +- +- Agent connection failed. +- Agentin yhteydenotto epäonnistui. +- +- +- Agent protocol error. +- Agentin protokollavirhe. +- +- +- No agent running, cannot add identity. +- Agentti ei ole käynnissä. Identiteettiä ei voitu lisätä. +- +- +- No agent running, cannot remove identity. +- Agentti ei ole käynnissä. Identiteettiä ei voitu poistaa. +- +- +- Agent refused this identity. Possible reasons include: +- Agentti hylkäsi tämän identiteetin. Mahdolliset syyt sisältävät: +- +- +- The key has already been added. +- Avain on jo lisätty. +- +- +- Restricted lifetime is not supported by the agent (check options). +- Agentti ei tue rajoitettua käyttöikää (tarkista asetukset). +- +- +- A confirmation request is not supported by the agent (check options). +- Agentti ei tue vahvistuspyyntöä (tarkista asetukset). +- +- +- Key identity ownership conflict. Refusing to add. +- Avaimen tunnisteen omistajaristiriita. Lisäystä ei tehdä. +- +- +- No agent running, cannot list identities. +- Agentti ei ole päällä, tunnisteita ei voi listata. +- +- +- +- SearchHelpWidget +- +- Search Help +- Etsi apua +- +- +- Search terms are as follows: [modifiers][field:]["]term["] +- Hakutermit ovat seuraavat: [modifikaattorit][kenttä:]["]termi["] +- +- +- Every search term must match (ie, logical AND) +- Jokaisen hakutermin on sovittava yhteen (esim. looginen AND) +- +- +- Modifiers +- Modifikaattorit +- +- +- exclude term from results +- älä sisällytä termiä hakutuloksiin +- +- +- match term exactly +- termin on sovittava täysin yhteen +- +- +- use regex in term +- käytä termissä regex:iä +- +- +- Fields +- Kentät +- +- +- Term Wildcards +- Termin jokerimerkit (wildcards) +- +- +- match anything +- vastaa minkä tahansa kanssa +- +- +- match one +- vastaa yhtä +- +- +- logical OR +- looginen OR +- +- +- Examples +- Esimerkit +- +- +- +- SearchWidget +- +- Search +- Etsi +- +- +- Limit search to selected group +- Rajoita haku valittuun ryhmään +- +- +- Search Help +- Etsi apua +- +- +- Search (%1)... +- Search placeholder text, %1 is the keyboard shortcut +- Etsi (%1)... +- +- +- Case sensitive +- Merkkikokoriippuvainen +- +- +- +- SettingsWidgetFdoSecrets +- +- Options +- Valinnat +- +- +- Enable KeepassXC Freedesktop.org Secret Service integration +- Käytä KeePassXC:ssä Freedesktop.org:in Secret Service -integraatiota +- +- +- General +- Yleistä +- +- +- Show notification when credentials are requested +- Näytä ilmoitus, kun tilitietoja pyydetään +- +- +- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> +- <html><head/><body><p>Jos tietokannassa on roskakori, tietueet siirretään suoraan sinne. Muussa tapauksessa ne poistetaan ilman vahvistusta.</p><p>Huomautus näytetään, mikäli tietue viittaa johonkin toiseen tietueeseen.</p></body></html> +- +- +- Exposed database groups: +- Avoimet tietokannan ryhmät: +- +- +- Authorization +- Valtuutus +- +- +- These applications are currently connected: +- Nämä sovellukset ovat parhaillaan yhdistetty: +- +- +- Don't confirm when entries are deleted by clients +- Älä varmista, kun tietueita tuhotaan asiakkaan kautta +- +- +- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. +- <b>Virhe:</b> DBus:iin ei voitu yhdistää. Tarkista DBus-asetuksesi. +- +- +- <b>Warning:</b> +- <b>Varoitus:</b> +- +- +- Save current changes to activate the plugin and enable editing of this section. +- Tallenna tämän hetkiset muutokset aktivoidaksesi laajennus ja salliaksesi tämä osa-alueen muokkaamisen. +- +- +- +- SettingsWidgetKeeShare +- +- Active +- Aktiivinen +- +- +- Allow export +- Salli vienti +- +- +- Allow import +- Salli tuonti +- +- +- Own certificate +- Oma varmenne +- +- +- Fingerprint: +- Sormenjälki: +- +- +- Certificate: +- Varmenne: +- +- +- Signer +- Allekirjoittaja +- +- +- Key: +- Avain: +- +- +- Generate +- Luo +- +- +- Import +- Tuo +- +- +- Export +- Vie +- +- +- Imported certificates +- Tuodut varmenteet +- +- +- Trust +- Luota +- +- +- Ask +- Kysy +- +- +- Untrust +- Älä luota +- +- +- Remove +- Poista +- +- +- Path +- Polku +- +- +- Status +- Tila +- +- +- Fingerprint +- Sormenjälki +- +- +- Certificate +- Varmenne +- +- +- Trusted +- Luotettu +- +- +- Untrusted +- Ei luotettu +- +- +- Unknown +- Tuntematon +- +- +- key.share +- Filetype for KeeShare key +- key.share +- +- +- KeeShare key file +- KeeShare-avaintiedosto +- +- +- All files +- Kaikki tiedostot +- +- +- Select path +- Valitse polku +- +- +- Exporting changed certificate +- Viedään muuttuneita sertifikaatteja +- +- +- The exported certificate is not the same as the one in use. Do you want to export the current certificate? +- Viety sertifikaatti ei ole sama kuin käytössä oleva. Haluatko viedä tämän hetkisen sertifikaatin? +- +- +- Signer: +- Allekirjoittaja: +- +- +- Allow KeeShare imports +- Salli KeeSharen tuonnit +- +- +- Allow KeeShare exports +- Salli KeeSharen viennit +- +- +- Only show warnings and errors +- Näytä vain varoitukset ja virheet +- +- +- Key +- Avain +- +- +- Signer name field +- Allekirjoittajan nimen kenttä +- +- +- Generate new certificate +- Luo uusi varmenne +- +- +- Import existing certificate +- Tuo olemassa oleva varmenne +- +- +- Export own certificate +- Vie oma varmenne +- +- +- Known shares +- Tunnetut jaot +- +- +- Trust selected certificate +- Luota valittuun varmenteeseen +- +- +- Ask whether to trust the selected certificate every time +- Kysy joka kerta luotetaanko valittuun varmenteeseen +- +- +- Untrust selected certificate +- Älä luota valittuun varmenteeseen +- +- +- Remove selected certificate +- Poista valittu varmenne +- +- +- +- ShareExport +- +- Overwriting signed share container is not supported - export prevented +- Allekirjoitetun jaetun säiliön ylikirjoittaminen ei ole tuettu - vienti estettiin +- +- +- Could not write export container (%1) +- Vietyä säiliötä ei voitu kirjoittaa (%1) +- +- +- Could not embed signature: Could not open file to write (%1) +- Allekirjoitusta ei voitu sisällyttää: Tiedostoa ei voitu avata kirjoitusta varten (%1) +- +- +- Could not embed signature: Could not write file (%1) +- Allekirjoitusta ei voitu sisällyttää: Tiedostoon kirjoitus epäonnistui (%1) +- +- +- Could not embed database: Could not open file to write (%1) +- Tietokantaa ei voitu sisällyttää: Tiedostoa ei voitu avata kirjoitusta varten (%1) +- +- +- Could not embed database: Could not write file (%1) +- Tietokantaa ei voitu sisällyttää: Tiedostoon kirjoitus epäonnistui (%1) +- +- +- Overwriting unsigned share container is not supported - export prevented +- Allekirjoittamattoman jaetun säiliön ylikirjoitus ei ole tuettu - vienti estettiin +- +- +- Could not write export container +- Vietyä säiliötä ei voitu kirjoittaa +- +- +- Unexpected export error occurred +- Tapahtui odottamaton vientivirhe +- +- +- +- ShareImport +- +- Import from container without signature +- Tuo säiliöstä ilman allekirjoitusta +- +- +- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? +- Jaetun säiliön lähdettä ei voitu vahvistaa, sillä se ei ole allekirjoitettu. Haluatko todella tuoda sen kohteesta %1? +- +- +- Import from container with certificate +- Tuo säiliöstä sertifikaatin kanssa +- +- +- Do you want to trust %1 with the fingerprint of %2 from %3? +- Haluatko luottaa kohteeseen %1 sormenjäljellä %2, joka on peräisin kohteesta %3? {1 ?} {2 ?} +- +- +- Not this time +- Ei tällä kertaa +- +- +- Never +- Ei koskaan +- +- +- Always +- Aina +- +- +- Just this time +- Vain tämän kerran +- +- +- Signed share container are not supported - import prevented +- Allekirjoitettu jaettu säiliö ei ole tuettu - tuonti estettiin +- +- +- File is not readable +- Tiedosto ei ole luettavissa +- +- +- Invalid sharing container +- Virheellinen jaettu säiliö +- +- +- Untrusted import prevented +- Ei-luotettu tuonti estettiin +- +- +- Successful signed import +- Onnistunut allekirjoitettu tuonti +- +- +- Unsigned share container are not supported - import prevented +- Allekirjoittamattoman jaetut säiliöt eivät ole tuettu - tuonti estettiin +- +- +- Successful unsigned import +- Onnistunut allekirjoittamaton tuonti +- +- +- File does not exist +- Tiedostoa ei ole olemassa +- +- +- Unknown share container type +- Tuntematon jaetun säiliön tyyppi +- +- +- +- ShareObserver +- +- Import from %1 failed (%2) +- Tuonti kohteesta %1 epäonnistui (%2) +- +- +- Import from %1 successful (%2) +- Tuonti kohteesta %1 onnistui (%2) +- +- +- Imported from %1 +- Tuotu kohteesta %1 +- +- +- Export to %1 failed (%2) +- Vienti kohteeseen %1 epäonnistui (%2) +- +- +- Export to %1 successful (%2) +- Vienti kohteeseen %1 onnistui (%2) +- +- +- Export to %1 +- Vie kohteeseen %1 +- +- +- Multiple import source path to %1 in %2 +- Useampi lähde kohteeseen %1 tuonnissa %2 +- +- +- Conflicting export target path %1 in %2 +- Ristiriita viennin %2 kohdepolussa %1 +- +- +- +- TotpDialog +- +- Timed Password +- Ajastettu salasana +- +- +- 000000 +- 000000 +- +- +- Copy +- Kopioi +- +- +- Expires in <b>%n</b> second(s) +- Umpeutuu <b>%n</b> sekunnin kuluttuaUmpeutuu <b>%n</b> sekunnin kuluttua +- +- +- +- TotpExportSettingsDialog +- +- Copy +- Kopioi +- +- +- NOTE: These TOTP settings are custom and may not work with other authenticators. +- TOTP QR code dialog warning +- HUOM: Nämä TOTP-asetukset ovat mukautettuja eivätkä ne välttämättä toimi muiden autentikaattoreiden kanssa. +- +- +- There was an error creating the QR code. +- QR-koodia luotaessa tapahtui virhe. +- +- +- Closing in %1 seconds. +- Suljetaan %1 sekunnin kuluttua. +- +- +- +- TotpSetupDialog +- +- Setup TOTP +- Määritä TOTP +- +- +- Default RFC 6238 token settings +- Oletusarvoiset RFC 6238:n mukaiset tunnisteasetukset +- +- +- Steam token settings +- Steam-tunnisteen asetukset +- +- +- Use custom settings +- Käytä mukautettuja asetuksia +- +- +- Custom Settings +- Mukautetut asetukset +- +- +- Time step: +- Aikaväli: +- +- +- sec +- Seconds +- s +- +- +- Code size: +- Koodikoko: +- +- +- Secret Key: +- Salainen avain: +- +- +- Secret key must be in Base32 format +- Salaisen avaimen täytyy olla Base32-formaatissa +- +- +- Secret key field +- Salaisen avaimen kenttä +- +- +- Algorithm: +- Algoritmi: +- +- +- Time step field +- Ajan uusiutumisen kenttä +- +- +- digits +- numeroa +- +- +- Invalid TOTP Secret +- Virheellinen TOTP-salaisuus +- +- +- You have entered an invalid secret key. The key must be in Base32 format. +-Example: JBSWY3DPEHPK3PXP +- Syötit väärän salaisen avaimen. Avaimen täytyy olla Base32-formaatissa. +-Esimerkiksi: JBSWY3DPEHPK3PXP +- +- +- Confirm Remove TOTP Settings +- Varmista TOTP-asetusten poisto +- +- +- Are you sure you want to delete TOTP settings for this entry? +- Haluatko varmasti poistaa TOTP-asetukset tältä tietueelta? +- +- +- +- URLEdit +- +- Invalid URL +- Virheellinen URL +- +- +- +- UpdateCheckDialog +- +- Checking for updates +- Tarkistetaan päivityksiä +- +- +- Checking for updates... +- Tarkistetaan päivityksiä... +- +- +- Close +- Sulje +- +- +- Update Error! +- Päivitysvirhe! +- +- +- An error occurred in retrieving update information. +- Päivitystietoja haettassa tapahtui virhe. +- +- +- Please try again later. +- Yritä myöhemmin uudelleen. +- +- +- Software Update +- Ohjelmistopäivitys +- +- +- A new version of KeePassXC is available! +- Uusi versio KeePassXC:stä on saatavilla! +- +- +- KeePassXC %1 is now available — you have %2. +- KeePassXC %1 on nyt saatavilla — käytössäsi on %2. +- +- +- Download it at keepassxc.org +- Lataa se osoitteesta keepassxc.org +- +- +- You're up-to-date! +- Olet ajan tasalla! +- +- +- KeePassXC %1 is currently the newest version available +- KeePassXC %1 on uusin saatavilla oleva versio +- +- +- +- WelcomeWidget +- +- Start storing your passwords securely in a KeePassXC database +- Aloita salasanojesi turvallinen tallentaminen KeePassXC-tietokantaan +- +- +- Create new database +- Luo uusi tietokanta +- +- +- Open existing database +- Avaa tietokanta +- +- +- Import from KeePass 1 +- Tuo KeePass 1 -tietokanta +- +- +- Import from CSV +- Tuo CSV-tiedostosta +- +- +- Recent databases +- Viimeisimmät tietokannat +- +- +- Welcome to KeePassXC %1 +- Tervetuloa KeePassXC:n versioon %1 +- +- +- Import from 1Password +- Tuo 1Passwordista +- +- +- Open a recent database +- Avaa yksi viimeisimmistä tietokannoista +- +- +- +- YubiKey +- +- %1 [%2] Configured Slot - %3 +- %1 [%2] Asetettu paikka - %3 +- +- +- %1 [%2] Challenge Response - Slot %3 - %4 +- %1 [%2] Haaste-vastaus - Paikka %3 - %4 +- +- +- Press +- Paina +- +- +- Passive +- Passiivi +- +- +- %1 Invalid slot specified - %2 +- %1 Virheellinen paikka määritetty - %2 +- +- +- The YubiKey interface has not been initialized. +- Yubikeyn käyttöliittymää ei ole alustettu. +- +- +- Hardware key is currently in use. +- Laiteavain on käytössä. +- +- +- Could not find hardware key with serial number %1. Please plug it in to continue. +- Laiteavainta sarjanumerolla %1 ei löydetty. Ole hyvä ja liitä se jatkaaksesi. +- +- +- Hardware key timed out waiting for user interaction. +- Laiteavain aikakatkaistu käyttäjän toimia odottaessa. +- +- +- A USB error ocurred when accessing the hardware key: %1 +- Tapahtui USB-virhe laiteavaimeen yhdistäessä: %1 +- +- +- Failed to complete a challenge-response, the specific error was: %1 +- Haaste-vastauksen valmistuminen epäonnistui virheellä: %1 +- +- +- +- YubiKeyEditWidget +- +- Refresh +- Päivitä +- +- +- YubiKey Challenge-Response +- YubiKeyn haaste/vastaus +- +- +- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- <p>Jos omistat <a href="https://www.yubico.com/">YubiKey:n</a>, voit käyttää sitä lisäturvakeinona.</p><p>YubiKey vaatii yhden paikan asettamista <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Responseksi</a>.</p> +- +- +- Refresh hardware tokens +- Uudista laitetunnisteet +- +- +- Hardware key slot selection +- Laiteavaimen paikan valinta +- +- +- Could not find any hardware keys! +- Laiteavaimia ei löytynyt! +- +- +- Selected hardware key slot does not support challenge-response! +- Valittu laitepaikka ei tue haaste-vastausta! +- +- +- Detecting hardware keys… +- Etsitään laiteavaimia... +- +- +- No hardware keys detected +- Laiteavaimia ei havaittu +- +- +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_fr.ts keepassxc-2.6.4-patched/share/translations/keepassx_fr.ts +--- keepassxc-2.6.4-orig/share/translations/keepassx_fr.ts 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/translations/keepassx_fr.ts 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7892 +0,0 @@ +- +- +- AboutDialog +- +- About KeePassXC +- À propos de KeePassXC +- +- +- About +- À propos +- +- +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- Signaler les bogues sur : <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- +- +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- KeePassXC est distribué suivant les conditions de la licence publique générale GNU (GNU GPL) version 2 ou version 3 de la licence (à votre gré). +- +- +- Contributors +- Contributeurs +- +- +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Voir Contributions sur GitHub</a> +- +- +- Debug Info +- Renseignements de débogage +- +- +- Include the following information whenever you report a bug: +- Incluez les renseignements suivants chaque fois que vous signalez un bogue : +- +- +- Copy to clipboard +- Copier dans le presse-papiers +- +- +- Project Maintainers: +- Mainteneurs du projet : +- +- +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- L’équipe de KeePassXC remercie tout particulièrement debfx pour la création du KeePassX original. +- +- +- +- AgentSettingsWidget +- +- Use OpenSSH for Windows instead of Pageant +- Utiliser OpenSSH pour Windows au lieu de Pageant +- +- +- Enable SSH Agent integration +- Activer l’intégration de l’agent SSH +- +- +- SSH_AUTH_SOCK value +- Valeur SSH_AUTH_SOCK +- +- +- SSH_AUTH_SOCK override +- Valeur de remplacement SSH_AUTH_SOCK +- +- +- (empty) +- (vide) +- +- +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- Aucun emplacement d’agent SSH n’est disponible. Assurez-vous que la variable d’environnement SSH_AUTH_SOCK existe ou définissez une valeur de remplacement. +- +- +- SSH Agent connection is working! +- La connexion de l’agent SSH fonctionne. +- +- +- +- ApplicationSettingsWidget +- +- Application Settings +- Paramètres de l’application +- +- +- General +- Général +- +- +- Security +- Sécurité +- +- +- Access error for config file %1 +- Erreur d’accès pour le fichier de configuration %1 +- +- +- Icon only +- Icône seulement +- +- +- Text only +- Texte seulement +- +- +- Text beside icon +- Texte à côté de l’icône +- +- +- Text under icon +- Texte sous l’icône +- +- +- Follow style +- Suivre le style +- +- +- Reset Settings? +- Réinitialiser les paramètres ? +- +- +- Are you sure you want to reset all general and security settings to default? +- Voulez-vous vraiment réinitialiser tous les paramètres généraux et de sécurité à leur valeur par défaut ? +- +- +- Monochrome (light) +- Monochrome (clair) +- +- +- Monochrome (dark) +- Monochrome (sombre) +- +- +- Colorful +- Multicolore +- +- +- You must restart the application to set the new language. Would you like to restart now? +- Pour appliquer la nouvelle langue, vous devez redémarrer l’application. Voulez-vous la démarrer maintenant ? +- +- +- +- ApplicationSettingsWidgetGeneral +- +- Basic Settings +- Paramètres de base +- +- +- Startup +- Démarrage +- +- +- Start only a single instance of KeePassXC +- Ne démarrer qu’une seule instance de KeePassXC +- +- +- Minimize window at application startup +- Réduire la fenêtre lors du démarrage de l’application +- +- +- File Management +- Gestion des fichiers +- +- +- Backup database file before saving +- Sauvegarder le fichier de la base de données avant d’enregistrer +- +- +- Automatically save after every change +- Enregistrer automatiquement après chaque changement +- +- +- Automatically reload the database when modified externally +- Recharger automatiquement la base de données quand elle est modifiée de l’extérieur +- +- +- Entry Management +- Gestion des entrées +- +- +- Use group icon on entry creation +- Utiliser l’icône de groupe lors de la création d’une entrée +- +- +- Minimize instead of app exit +- Réduire au lieu de fermer l’appli +- +- +- Show a system tray icon +- Afficher une icône dans la zone de notification +- +- +- Hide window to system tray when minimized +- Cacher la fenêtre dans la zone de notification une fois minimisée +- +- +- Auto-Type +- Saisie automatique +- +- +- Use entry title to match windows for global Auto-Type +- Utiliser le titre de l’entrée dans la correspondance des fenêtres pour la saisie automatique globale. +- +- +- Use entry URL to match windows for global Auto-Type +- Utiliser l’URL de l’entrée dans la correspondance des fenêtres pour la saisie automatique globale. +- +- +- Always ask before performing Auto-Type +- Toujours demander avant de saisir automatiquement +- +- +- ms +- Milliseconds +-  ms +- +- +- Movable toolbar +- Barre d’outils mobile +- +- +- Remember previously used databases +- Mémoriser les bases de données utilisées précédemment +- +- +- Load previously open databases on startup +- Lors du démarrage, charger les bases de données ouvertes précédemment +- +- +- Remember database key files and security dongles +- Mémoriser les fichiers clés de base de données et les clés électroniques de sécurité +- +- +- Check for updates at application startup once per week +- Vérifier une fois par semaine la présence de mises à jour au démarrage de l’application +- +- +- Include beta releases when checking for updates +- Inclure les versions bêta lors de la vérification de la présence de mises à jour +- +- +- Language: +- Langue : +- +- +- (restart program to activate) +- (relancer le programme pour activer) +- +- +- Minimize window after unlocking database +- Réduire la fenêtre après déverrouillage de la base de données +- +- +- Minimize when opening a URL +- Réduire lors de l’ouverture d’une URL +- +- +- Hide window when copying to clipboard +- Cacher la fenêtre lors de la copie dans le presse-papiers +- +- +- Minimize +- Réduire +- +- +- Drop to background +- Passer en arrière-plan +- +- +- Favicon download timeout: +- Temps imparti au téléchargement de la favoricône : +- +- +- Website icon download timeout in seconds +- Temps imparti au chargement de l’icône du site Web en secondes +- +- +- sec +- Seconds +- s +- +- +- Toolbar button style +- Style des boutons de la barre d’outils +- +- +- Language selection +- Sélection de la langue +- +- +- Global auto-type shortcut +- Raccourci global de saisie automatique +- +- +- Auto-type character typing delay milliseconds +- Délai de frappe des caractères, en millisecondes, de la saisie automatique +- +- +- Auto-type start delay milliseconds +- Délai de démarrage, en millisecondes, de la saisie automatique +- +- +- Automatically launch KeePassXC at system startup +- Lancer automatiquement KeepassXC au démarrage du système. +- +- +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- Enregistrer les fichiers de base de données de façon sécurisée (désactiver en cas de problèmes avec Dropbox, etc.) +- +- +- User Interface +- Interface utilisateur +- +- +- Toolbar button style: +- Style des boutons de la barre d’outils : +- +- +- Use monospaced font for notes +- Utiliser une police à espacement constant pour les notes +- +- +- Tray icon type: +- Type d’icône de la zone de notification : +- +- +- Reset settings to default… +- Réinitialiser les paramètres à leur valeur par défaut… +- +- +- Auto-Type typing delay: +- Délai de saisie de la saisie automatique : +- +- +- Global Auto-Type shortcut: +- Raccourci global de la saisie automatique : +- +- +- Auto-Type start delay: +- Délai de démarrage de la saisie automatique : +- +- +- Automatically save when locking database +- Enregistrer automatiquement en verrouillant la base de données +- +- +- Automatically save non-data changes when locking database +- Enregistrer automatiquement les changements qui ne sont pas relatifs aux données en verrouillant la base de données +- +- +- Tray icon type +- Type d’icône de la zone de notification +- +- +- +- ApplicationSettingsWidgetSecurity +- +- Timeouts +- Délais d’attente +- +- +- Clear clipboard after +- Effacer le presse-papiers après +- +- +- sec +- Seconds +- s +- +- +- Lock databases after inactivity of +- Verrouiller les bases de données après une inactivité de +- +- +- min +- min +- +- +- Forget TouchID after inactivity of +- Oublier le TouchID après une inactivité de +- +- +- Convenience +- Commodité +- +- +- Lock databases when session is locked or lid is closed +- Verrouiller les bases de données quand la session est verrouillée ou l’écran rabattu +- +- +- Forget TouchID when session is locked or lid is closed +- Oublier le TouchID quand la session est verrouillée ou le couvercle fermé +- +- +- Lock databases after minimizing the window +- Verrouiller les bases de données après avoir réduit la fenêtre +- +- +- Re-lock previously locked database after performing Auto-Type +- Après avoir effectué la saisie automatique, reverrouiller la base de données qui était verrouillée précédemment +- +- +- Hide passwords in the entry preview panel +- Cacher les mots de passe dans le panneau de prévisualisation des entrées +- +- +- Hide entry notes by default +- Par défaut, cacher les notes des entrées +- +- +- Privacy +- Confidentialité +- +- +- Use DuckDuckGo service to download website icons +- Utiliser le service DuckDuckGo pour télécharger les icônes de sites Web +- +- +- Clipboard clear seconds +- Effacement du presse-papiers en secondes +- +- +- Touch ID inactivity reset +- Réinitialisation de TouchID après inactivité +- +- +- Database lock timeout seconds +- Délai, en secondes, avant verrouillage de la base de données +- +- +- min +- Minutes +- min +- +- +- Clear search query after +- Effacer la requête de recherche après +- +- +- Require password repeat when it is visible +- Exiger de répéter le mot de passe s’il est visible +- +- +- Hide passwords when editing them +- Cacher les mots de passe lors de leur modification +- +- +- Use placeholder for empty password fields +- Utiliser un espace réservé pour les champs de mots de passe vides +- +- +- +- AutoType +- +- Couldn't find an entry that matches the window title: +- Impossible de trouver une entrée qui corresponde au titre de la fenêtre : +- +- +- Auto-Type - KeePassXC +- Saisie automatique – KeePassXC +- +- +- Auto-Type +- Saisie automatique +- +- +- The Syntax of your Auto-Type statement is incorrect! +- La syntaxe de votre instruction de saisie automatique est incorrecte. +- +- +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- Cette commande de saisie automatique comprend un délai très long. Voulez-vous vraiment continuer ? +- +- +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- Cette commande de saisie automatique comprend une frappe de touches très lente. Voulez-vous vraiment continuer ? +- +- +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- Cette commande de saisie automatique comprend des arguments répétés très souvent. Voulez-vous vraiment continuer ? +- +- +- Permission Required +- Une autorisation est requise +- +- +- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC requiert l’autorisation Accessibilité pour la saisie automatique des entrées. SI vous avez déjà accordé l’autorisation, il vous faudra peut-être redémarrer KeePassXC. +- +- +- +- AutoTypeAssociationsModel +- +- Window +- Fenêtre +- +- +- Sequence +- Séquence +- +- +- Default sequence +- Séquence par défaut +- +- +- +- AutoTypeMatchModel +- +- Group +- Groupe +- +- +- Title +- Titre +- +- +- Username +- Nom d’utilisateur +- +- +- Sequence +- Séquence +- +- +- +- AutoTypeMatchView +- +- Copy &username +- Copier le nom d’&utilisateur +- +- +- Copy &password +- Copier le mot de &passe +- +- +- +- AutoTypePlatformMac +- +- Permission Required +- Une autorisation est requise +- +- +- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC a besoin de la permission Accessibilité et Enregistreur d’écran pour la saisie automatique globale. L’enregistrement de l’écran est nécessaire afin d’utiliser le titre des fenêtres pour trouver des entrées. Si vous avez déjà accordé l’autorisation, il vous faudra peut-être redémarrer KeePassXC. +- +- +- +- AutoTypeSelectDialog +- +- Auto-Type - KeePassXC +- Saisie automatique – KeePassXC +- +- +- Select entry to Auto-Type: +- Sélectionner une entrée à saisir automatiquement : +- +- +- Search... +- Recherche… +- +- +- +- BrowserAccessControlDialog +- +- KeePassXC - Browser Access Request +- KeePassXC – Demande d’accès au navigateur +- +- +- %1 is requesting access to the following entries: +- %1 demande l’accès aux entrées suivantes : +- +- +- Remember access to checked entries +- Mémoriser l’accès aux entrées sélectionnées +- +- +- Remember +- Mémoriser +- +- +- Allow access to entries +- Permettre l’accès aux entrées +- +- +- Allow Selected +- Permettre les éléments sélectionnés +- +- +- Deny All +- Tout refuser +- +- +- Disable for this site +- Désactiver pour ce site +- +- +- +- BrowserEntrySaveDialog +- +- KeePassXC-Browser Save Entry +- KeePassXC-Browser Enregistrer l’entrée +- +- +- Ok +- Valider +- +- +- Cancel +- Annuler +- +- +- You have multiple databases open. +-Please select the correct database for saving credentials. +- Plusieurs bases de données sont ouvertes. +-Veuillez sélectionner la base de données souhaitée pour enregistrer les identifiants. +- +- +- +- BrowserService +- +- KeePassXC: New key association request +- KeePassXC : Nouvelle demande d’association de clé +- +- +- Save and allow access +- Enregistrer et permettre l’accès +- +- +- KeePassXC: Overwrite existing key? +- KeePassXC : Remplacer la clé existante ? +- +- +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- Une clé de chiffrement partagée nommée « %1 » existe déjà. +-Voulez-vous la remplacer ? +- +- +- KeePassXC: Update Entry +- KeePassXC : Mettre l’entrée à jour +- +- +- Do you want to update the information in %1 - %2? +- Voulez-vous mettre à jour les renseignements dans %1 - %2 ? +- +- +- Abort +- Abandonner +- +- +- Converting attributes to custom data… +- Conversion des attributs en données personnalisées… +- +- +- KeePassXC: Converted KeePassHTTP attributes +- KeePassXC : Attributs KeePassHTTP convertis +- +- +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- Les attributs de %1 entrée(s) ont été convertis avec succès. +-%2 clés ont été déplacées vers les données personnalisées. +- +- +- Successfully moved %n keys to custom data. +- %n clé a été déplacée avec succès vers les données personnalisées.%n clés ont été déplacées avec succès vers les données personnalisées. +- +- +- KeePassXC: No entry with KeePassHTTP attributes found! +- KeePassXC : Aucune entrée avec des attributs KeePassHTTP n’a été trouvée +- +- +- The active database does not contain an entry with KeePassHTTP attributes. +- La base de données active ne comprend aucune entrée avec des attributs KeePassHTTP. +- +- +- KeePassXC: Legacy browser integration settings detected +- KeePassXC : Des paramètres hérités d’intégration aux navigateurs ont été détectés +- +- +- KeePassXC: Create a new group +- KeePassXC : Créer un nouveau groupe +- +- +- A request for creating a new group "%1" has been received. +-Do you want to create this group? +- +- Une demande de création d’un nouveau groupe « %1 » a été reçue. +-Voulez-vous créer ce groupe ? +- +- +- +- Your KeePassXC-Browser settings need to be moved into the database settings. +-This is necessary to maintain your current browser connections. +-Would you like to migrate your existing settings now? +- Vos paramètres KeePassXC-Browser doivent être intégrés aux paramètres de la base de données. +-Cela est nécessaire pour conserver les connexions actuelles de votre navigateur. +-Voulez-vous migrer vos paramètres maintenant ? +- +- +- Don't show this warning again +- Ne plus afficher cet avertissement +- +- +- You have received an association request for the following database: +-%1 +- +-Give the connection a unique name or ID, for example: +-chrome-laptop. +- Vous avez reçu une demande d’association pour la base de données suivante : +-%1 +- +-Attribuez à cette connexion un nom ou un ID unique, par exemple : +-chrome-laptop +- +- +- +- BrowserSettingsWidget +- +- Dialog +- Boîte de dialogue +- +- +- This is required for accessing your databases with KeePassXC-Browser +- Requis pour accéder à vos bases de données avec KeePassXC-Browser +- +- +- Enable browser integration +- Activer l’intégration aux navigateurs +- +- +- General +- Général +- +- +- Browsers installed as snaps are currently not supported. +- Les navigateurs installés en tant que snap ne sont pas pris en charge actuellement. +- +- +- Enable integration for these browsers: +- Activer l’intégration pour ces navigateurs : +- +- +- Vivaldi +- Vivaldi +- +- +- &Edge +- &Edge +- +- +- Firefox +- Firefox +- +- +- Tor Browser +- Navigateur Tor +- +- +- Brave +- Brave +- +- +- Google Chrome +- Google Chrome +- +- +- Chromium +- Chromium +- +- +- Show a notification when credentials are requested +- Credentials mean login data requested via browser extension +- Afficher une notification quand les identifiants sont demandés +- +- +- Request to unlock the database if it is locked +- Demander de déverrouiller la base de données si elle est verrouillée +- +- +- Only entries with the same scheme (http://, https://, ...) are returned. +- Seules les entrées de même format (http://, https://,…) sont retournées. +- +- +- Match URL scheme (e.g., https://...) +- Adapter au format de l’URL (p. ex. : https://….) +- +- +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- Ne renvoie que les meilleures correspondances pour une URL précise au lieu de toutes les entrées du domaine entier. +- +- +- Return only best-matching credentials +- Retourner que les identifiants qui correspondent le mieux +- +- +- Returns expired credentials. String [expired] is added to the title. +- Retourne les identifiants expirés. La chaîne [expiré] est ajoutée au titre. +- +- +- Allow returning expired credentials +- Permettre de retourner des identifiants expirés +- +- +- All databases connected to the extension will return matching credentials. +- Toutes les bases de données connectées à l’extension retourneront les identifiants correspondants. +- +- +- Search in all opened databases for matching credentials +- Credentials mean login data requested via browser extension +- Chercher les identifiants correspondants dans toutes les bases de données ouvertes +- +- +- Sort matching credentials by title +- Credentials mean login data requested via browser extension +- Trier les identifiants correspondants par titre +- +- +- Sort matching credentials by username +- Credentials mean login data requested via browser extension +- Trier les identifiants correspondants par nom d’utilisateur +- +- +- Advanced +- Avancé +- +- +- Never ask before accessing credentials +- Credentials mean login data requested via browser extension +- Ne jamais demander avant d’accéder aux identifiants +- +- +- Never ask before updating credentials +- Credentials mean login data requested via browser extension +- Ne jamais demander avant de mettre les identifiants à jour +- +- +- Do not ask permission for HTTP Basic Auth +- An extra HTTP Basic Auth setting +- Ne pas demander d’autorisation pour l’authentification HTTP Basic +- +- +- Automatically creating or updating string fields is not supported. +- Ni la création ni la mise à jour automatique des champs de chaîne ne sont prises en charge. +- +- +- Return advanced string fields which start with "KPH: " +- Retourner les champs de chaîne avancés qui commencent par « KPH:  » +- +- +- Don't display the popup suggesting migration of legacy KeePassHTTP settings. +- Ne pas afficher la fenêtre de suggestion de migration des paramètres de KeePassHTTP hérités. +- +- +- Do not prompt for KeePassHTTP settings migration. +- Ne pas proposer la migration des paramètres de KeePassHTTP. +- +- +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- Met automatiquement à jour le chemin des exécutables KeePassXC ou keepassxc-proxy vers les scripts de messagerie native lors du démarrage. +- +- +- Update native messaging manifest files at startup +- Mettre les fichiers manifeste de la messagerie native à jour au lancement +- +- +- Use a custom proxy location if you installed a proxy manually. +- Utiliser un emplacement de mandataire personnalisé si vous avez installé un mandataire manuellement. +- +- +- Use a custom proxy location: +- Meant is the proxy for KeePassXC-Browser +- Utiliser un emplacement de mandataire personnalisé : +- +- +- Custom proxy location field +- Champ d’emplacement de mandataire personnalisé +- +- +- Browser for custom proxy file +- Sélectionner un fichier de mandataire personnalisé +- +- +- Browse... +- Button for opening file dialog +- Parcourir… +- +- +- Use a custom browser configuration location: +- Utiliser un emplacement de navigateur personnalisé : +- +- +- Browser type: +- Type de navigateur : +- +- +- Toolbar button style +- Style des boutons de la barre d’outils +- +- +- Config Location: +- Emplacement de configuration : +- +- +- Custom browser location field +- Champ d’emplacement de navigateur personnalisé +- +- +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- +- +- Browse for custom browser path +- Sélectionner un chemin personnalisé de navigateur +- +- +- Custom extension ID: +- ID d’extension personnalisé : +- +- +- Custom extension ID +- ID d’extension personnalisé +- +- +- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 +- En raison du bac à sable de Snap, vous devez exécuter un script afin d’activer l’intégration aux navigateurs.<br />Vous pouvez obtenir ce script sur %1 +- +- +- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 +- KeePassXC-Browser est nécessaire pour que l’intégration aux navigateurs fonctionne. <br />Téléchargez-la pour %1, %2 et %3. %4 +- +- +- Please see special instructions for browser extension use below +- Veuillez consulter ci-dessous les instructions spéciales de l’extension pour navigateurs +- +- +- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. +- <b>Erreur :</b> L’emplacement de mandataire personnalisé est introuvable. <br/>L’intégration aux navigateurs NE FONCTIONNERA PAS sans l’application mandataire. +- +- +- <b>Warning:</b> The following options can be dangerous! +- <b>Avertissement :</b> Les options suivantes peuvent être dangereuses +- +- +- Executable Files +- Fichiers exécutables +- +- +- All Files +- Tous les fichiers +- +- +- Select custom proxy location +- Sélectionner un emplacement de mandataire personnalisé +- +- +- Select native messaging host folder location +- Sélectionner l’emplacement du dossier de l’hôte de messagerie native +- +- +- +- CloneDialog +- +- Clone Options +- Options de clonage +- +- +- Append ' - Clone' to title +- Ajouter ’ – Clone’ au titre +- +- +- Replace username and password with references +- Remplacer le nom d’utilisateur et le mot de passe par des références +- +- +- Copy history +- Copier l’historique +- +- +- +- CsvImportWidget +- +- Import CSV fields +- Importer les champs CSV +- +- +- filename +- nom de fichier +- +- +- size, rows, columns +- taille, lignes, colonnes +- +- +- Encoding +- Encodage +- +- +- Codec +- Codec +- +- +- Text is qualified by +- Le texte est qualifié par +- +- +- Fields are separated by +- Les champs sont séparés par +- +- +- Comments start with +- Les commentaires commencent par +- +- +- Consider '\' an escape character +- Considérer « \ » en tant que caractère d’échappement +- +- +- Preview +- Aperçu +- +- +- Imported from CSV file +- Importé d’un fichier CSV +- +- +- Original data: +- Données originales : +- +- +- Error +- Erreur +- +- +- Error(s) detected in CSV file! +- Des erreurs ont été détectées dans le fichier CSV +- +- +- [%n more message(s) skipped] +- [%n autre message a été ignoré][%n autres messages ont été ignorés] +- +- +- CSV import: writer has errors: +-%1 +- Importation CSV : le scripteur comporte des erreurs : +-%1 +- +- +- Text qualification +- Qualification du texte +- +- +- Field separation +- Séparation des champs +- +- +- Number of header lines to discard +- Nombre de lignes d’en-tête à ignorer +- +- +- CSV import preview +- Aperçu de l’importation d’un fichier CSV +- +- +- Column Association +- Associations de colonnes +- +- +- Last Modified +- Dernière modification +- +- +- Password +- Mot de passe +- +- +- Created +- Créée +- +- +- Notes +- Notes +- +- +- Title +- Titre +- +- +- Group +- Groupe +- +- +- URL +- URL +- +- +- Username +- Nom d’utilisateur +- +- +- Header lines skipped +- Les lignes d’en-tête ont été ignorées +- +- +- First line has field names +- La première ligne comporte des noms de champs +- +- +- Not Present +- Les données ne s’y trouvent pas +- +- +- Column %1 +- Colonne %1 +- +- +- TOTP +- TOTP +- +- +- Icon +- Icône +- +- +- +- CsvParserModel +- +- %n column(s) +- %n colonne%n colonnes +- +- +- %1, %2, %3 +- file info: bytes, rows, columns +- %1, %2, %3 +- +- +- %n byte(s) +- %n octet%n octets +- +- +- %n row(s) +- %n ligne%n lignes +- +- +- +- Database +- +- File %1 does not exist. +- Le fichier %1 n’existe pas. +- +- +- Unable to open file %1. +- Impossible d’ouvrir le fichier %1. +- +- +- Error while reading the database: %1 +- Erreur de lecture de la base de données : %1 +- +- +- File cannot be written as it is opened in read-only mode. +- Impossible d’écrire dans le fichier, car il est ouvert en lecture seulement. +- +- +- Key not transformed. This is a bug, please report it to the developers! +- La clé n’a pas été transformée, ce qui est un bogue. Veuillez le signaler aux développeurs. +- +- +- %1 +-Backup database located at %2 +- %1 +-La base de données de sauvegarde est située sur %2 +- +- +- Could not save, database does not point to a valid file. +- Impossible d’enregistrer, car la base de données n’est pas dirigée vers un fichier valide. +- +- +- Could not save, database file is read-only. +- Impossible d’enregistrer, car le fichier de la base de données est en lecture seule. +- +- +- Database file has unmerged changes. +- Le fichier de la base de données comporte des changements non fusionnés. +- +- +- Recycle Bin +- Corbeille +- +- +- Passwords +- Root group name +- Mots de passe +- +- +- Database save is already in progress. +- La base de données est déjà en cours d’enregistrement. +- +- +- Could not save, database has not been initialized! +- Impossible d’enregistrer, la base de données n’a pas été initialisée +- +- +- +- DatabaseOpenDialog +- +- Unlock Database - KeePassXC +- Déverrouiller la base de données – KeePassXC +- +- +- +- DatabaseOpenWidget +- +- Key File: +- Fichier clé : +- +- +- Refresh +- Actualiser +- +- +- Don't show this warning again +- Ne plus afficher cet avertissement +- +- +- All files +- Tous les fichiers +- +- +- Key files +- Fichiers clés +- +- +- Select key file +- Sélectionner un fichier clé +- +- +- Failed to open key file: %1 +- Échec d’ouverture du fichier clé : %1 +- +- +- Unlock KeePassXC Database +- Déverrouiller la base de données KeePassXC +- +- +- Enter Password: +- Saisissez le mot de passe : +- +- +- Password field +- Champ de mot de passe +- +- +- Hardware key slot selection +- Sélection de l’emplacement de la clé matérielle +- +- +- Browse for key file +- Rechercher un fichier clé +- +- +- Browse... +- Parcourir… +- +- +- Refresh hardware tokens +- Actualiser les jetons matériels +- +- +- Hardware Key: +- Clé matérielle : +- +- +- Hardware key help +- Aide sur les clés matérielles +- +- +- TouchID for Quick Unlock +- TouchID pour un déverrouillage rapide +- +- +- Unlock failed and no password given +- Échec de déverrouillage et aucun mot de passe n’a été saisi +- +- +- Unlocking the database failed and you did not enter a password. +-Do you want to retry with an "empty" password instead? +- +-To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. +- Le déverrouillage de la base de données a échoué et vous n’avez pas saisi de mot de passe. +-Voulez-vous plutôt réessayer sans mot de passe ? +- +-Afin d’empêcher que cette erreur survienne, vous devez accéder à « Paramètres de la base de données » et réinitialiser votre mot de passe. +- +- +- Retry with empty password +- Réessayer sans mot de passe +- +- +- Enter Additional Credentials (if any): +- Saisissez des identifiants supplémentaires (si définis) : +- +- +- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +-<p>Click for more information...</p> +- <p>Vous pouvez utiliser une clé de sécurité matérielle telle qu’une <strong>YubiKey</strong> ou une <strong>OnlyKey</strong> avec des emplacements configurés pour HMAC-SHA1.</p> +-<p>Cliquez pour plus de précisions…</p> +- +- +- Key file help +- Aide fichier clé +- +- +- ? +-  ? +- +- +- Cannot use database file as key file +- Impossible d’utiliser une base de données comme fichier clé +- +- +- You cannot use your database file as a key file. +-If you do not have a key file, please leave the field empty. +- Vous ne pouvez pas utiliser la base de données actuelle comme fichier clé. +-Si vous n’avez pas de fichier clé, laissez le champ vide. +- +- +- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> +- <p>En plus d’un mot de passe, vous pouvez utiliser un fichier secret pour améliorer la sécurité de votre base de données. Ce fichier peut être généré dans les paramètres de sécurité de votre base de données.</p><p>Il ne s’agit <strong>pas</strong> de votre fichier de base de données *.kdbx.<br>Si vous n’avez pas de fichier clé, laissez ce champ vide.</p><p>Cliquez pour plus de précisions…</p> +- +- +- Key file to unlock the database +- Fichier clé pour déverrouiller la base de données +- +- +- Please touch the button on your YubiKey! +- Veuillez appuyez sur le bouton de votre YubiKey +- +- +- Detecting hardware keys… +- Détection des clés matérielles… +- +- +- No hardware keys detected +- Aucune clé matérielle n’a été détectée +- +- +- Select hardware key… +- Sélectionner une clé matérielle… +- +- +- Old key file format +- Ancien format de fichier clé +- +- +- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> +- Vous utilisez un ancien format de fichier clé que KeePassXC pourrait<br>ne plus prendre en charge à l’avenir.<br><br>Veuillez envisager de générer un nouveau fichier clé en accédant à :<strong>Base de données > Sécurité de la base de données > Changer la clé.</strong><br> +- +- +- +- DatabaseSettingWidgetMetaData +- +- Passwords +- Mots de passe +- +- +- +- DatabaseSettingsDialog +- +- Advanced Settings +- Paramètres avancés +- +- +- General +- Général +- +- +- Security +- Sécurité +- +- +- Encryption Settings +- Paramètres de chiffrement +- +- +- Browser Integration +- Intégration aux navigateurs +- +- +- Database Credentials +- Identifiants de la base de données +- +- +- +- DatabaseSettingsWidgetBrowser +- +- KeePassXC-Browser settings +- Paramètres de KeePassXC-Browser +- +- +- Stored keys +- Clés enregistrées +- +- +- Remove +- Supprimer +- +- +- Delete the selected key? +- Supprimer la clé sélectionnée ? +- +- +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- Voulez-vous vraiment supprimer la clé sélectionnée ? +-Cela pourrait empêcher la connexion l’extension pour navigateurs. +- +- +- Key +- Clé +- +- +- Value +- Valeur +- +- +- Enable Browser Integration to access these settings. +- Activez l’intégration aux navigateurs pour accéder à ces paramètres. +- +- +- Disconnect all browsers +- Déconnecter tous les navigateurs +- +- +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- Voulez-vous vraiment déconnecter tous les navigateurs ? +-Cela pourrait empêcher la connexion avec l’extension pour navigateurs. +- +- +- KeePassXC: No keys found +- KeePassXC : Aucune clé n’a été trouvée +- +- +- No shared encryption keys found in KeePassXC settings. +- Aucune clé de chiffrement partagée n’a été trouvée dans les paramètres de KeePassXC. +- +- +- KeePassXC: Removed keys from database +- KeePassXC : Les clés ont été supprimées de la base de données +- +- +- Successfully removed %n encryption key(s) from KeePassXC settings. +- %n clé de chiffrement a été supprimée avec succès des paramètres de KeePassXC.%n clés de chiffrement ont été supprimées avec succès des paramètres de KeePassXC. +- +- +- Forget all site-specific settings on entries +- Oublier tous les paramètres d’entrée propres aux sites +- +- +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- Voulez-vous vraiment oublier tous les paramètres propres aux sites pour toutes les entrées ? Les autorisations d’accès aux entrées seront révoquées. +- +- +- Removing stored permissions… +- Suppression des autorisations enregistrées… +- +- +- Abort +- Abandonner +- +- +- KeePassXC: Removed permissions +- KeePassXC : Les autorisations ont été supprimées +- +- +- Successfully removed permissions from %n entry(s). +- Les autorisations d’%n entrée ont été supprimées avec succès.Les autorisations de ’%n entrées ont été supprimées avec succès. +- +- +- KeePassXC: No entry with permissions found! +- KeePassXC : Aucune entrée avec autorisation n’a été trouvée +- +- +- The active database does not contain an entry with permissions. +- La base de données active ne comprend aucune entrée avec des autorisations. +- +- +- Move KeePassHTTP attributes to custom data +- Déplacer les attributs KeePassHTTP vers les données personnalisées +- +- +- Do you really want to move all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- Voulez-vous vraiment convertir toutes les données d’intégration au navigateur héritées à la norme la plus récente ? +-Cela est nécessaire pour assurer la compatibilité avec l’extension pour navigateurs. +- +- +- Stored browser keys +- Clés de navigateurs enregistrées +- +- +- Remove selected key +- Supprimer la clé sélectionnée +- +- +- Move KeePassHTTP attributes to KeePassXC-Browser custom data +- Déplacer les attributs KeePassHTTP vers les données personnalisées de KeePassXC-Browser +- +- +- Refresh database root group ID +- Actualiser l’ID du groupe racine de la base de données +- +- +- Created +- Créée +- +- +- Refresh database ID +- Actualiser l’ID de la base de données +- +- +- Do you really want refresh the database ID? +-This is only necessary if your database is a copy of another and the browser extension cannot connect. +- Voulez-vous vraiment actualiser l’ID de la base de données ? +-Cela n’est nécessaire que si votre base de données est la copie d’une autre et que l’extension pour navigateurs ne peut pas se connecter. +- +- +- +- DatabaseSettingsWidgetDatabaseKey +- +- Add additional protection... +- Ajouter une protection supplémentaire… +- +- +- No password set +- Aucun mot de passe n’a été défini +- +- +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- AVERTISSEMENT : Vous n’avez pas défini de mot de passe. Il est fortement découragé d’utiliser une base de données sans mot de passe. +- +-Voulez-vous vraiment poursuivre sans mot de passe ? +- +- +- Continue without password +- Poursuivre sans mot de passe +- +- +- No encryption key added +- Aucune clé de chiffrement n’a été ajoutée +- +- +- You must add at least one encryption key to secure your database! +- Vous devez ajouter au moins une clé de chiffrement afin de sécuriser votre base de données. +- +- +- Unknown error +- Erreur inconnue +- +- +- Failed to change database credentials +- Échec de changement des identifiants de la base de données +- +- +- +- DatabaseSettingsWidgetEncryption +- +- Encryption Algorithm: +- Algorithme de chiffrement : +- +- +- AES: 256 Bit (default) +- AES : 256 bits (par défaut) +- +- +- Twofish: 256 Bit +- Twofish : 256 bits +- +- +- Key Derivation Function: +- Fonction de dérivation de clé : +- +- +- Transform rounds: +- Cycles de transformation : +- +- +- Memory Usage: +- Utilisation de la mémoire : +- +- +- Parallelism: +- Parallélisme : +- +- +- Decryption Time: +- Temps de déchiffrement : +- +- +- ?? s +- ?? s +- +- +- Change +- Changer +- +- +- Higher values offer more protection, but opening the database will take longer. +- Les valeurs plus élevées offrent plus de protection, mais l’ouverture de la base de données prendra plus de temps. +- +- +- Database format: +- Format de la base de données : +- +- +- This is only important if you need to use your database with other programs. +- Ce paramètre n’est important que si vous devez utiliser votre base de données avec d’autres programmes. +- +- +- KDBX 4.0 (recommended) +- KDBX 4.0 (recommandée) +- +- +- KDBX 3.1 +- KDBX 3.1 +- +- +- unchanged +- Database decryption time is unchanged +- inchangé +- +- +- Number of rounds too high +- Key transformation rounds +- Le nombre de cycles est trop grand +- +- +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or days (or even longer) to open! +- Vous utilisez un très grand nombre de cycles de transformation de clé avec Argon2. +- +-Si vous gardez ce nombre, votre base de données pourrait prendre des heures voire des jours (ou plus) pour s’ouvrir. +- +- +- Understood, keep number +- Compris, garder ce nombre +- +- +- Cancel +- Annuler +- +- +- Number of rounds too low +- Key transformation rounds +- Le nombre de cycles est trop petit +- +- +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database may be too easy to crack! +- Vous utilisez un très petit nombre de cycles de transformation de clé avec AES-KDF. +- +-Si vous gardez ce nombre, votre base de données pourrait être craquée trop facilement. +- +- +- KDF unchanged +- La fonction de dérivation de clé est inchangée +- +- +- Failed to transform key with new KDF parameters; KDF unchanged. +- Échec de transformation de la clé avec les nouveaux paramètres de fonction de dérivation de clé ; la fonction de dérivation de clé est inchangée. +- +- +- MiB +- Abbreviation for Mebibytes (KDF settings) +- MioMio +- +- +- thread(s) +- Threads for parallel execution (KDF settings) +- fil d’exécutionfils d’exécution +- +- +- Change existing decryption time +- Changer le temps de déchiffrement existant +- +- +- Decryption time in seconds +- Temps de déchiffrement en secondes +- +- +- Database format +- Format de la base de données +- +- +- Encryption algorithm +- Algorithme de chiffrement +- +- +- Key derivation function +- Fonction de dérivation de clé +- +- +- Transform rounds +- Cycles de transformation +- +- +- Memory usage +- Utilisation de la mémoire +- +- +- Parallelism +- Parallélisme +- +- +- ?? ms +- ?? ms +- +- +- ? s +- ? s +- +- +- +- DatabaseSettingsWidgetFdoSecrets +- +- Exposed Entries +- Entrées visibles +- +- +- Don't expose this database +- Ne pas rendre cette base de données visible +- +- +- Expose entries under this group: +- Rendre visibles les entrées de ce groupe : +- +- +- Enable Secret Service to access these settings. +- Activer « Secret Service » pour accéder à ces paramètres. +- +- +- +- DatabaseSettingsWidgetGeneral +- +- Database Meta Data +- Métadonnées de la base de données +- +- +- Database name: +- Nom de la base de données : +- +- +- Database description: +- Description de la base de données : +- +- +- Default username: +- Nom d’utilisateur par défaut : +- +- +- History Settings +- Paramètres de l’historique +- +- +- Max. history items: +- Nombre maximal d’éléments d’historique : +- +- +- Max. history size: +- Taille maximale de l’historique : +- +- +- MiB +- Mio +- +- +- Use recycle bin +- Utiliser une corbeille +- +- +- Additional Database Settings +- Paramètres supplémentaires de base de données +- +- +- Database name field +- Champ de nom de la base de données +- +- +- Database description field +- Champ de description de la base de données +- +- +- Default username field +- Champ de nom d’utilisateur par défaut +- +- +- Maximum number of history items per entry +- Nombre maximal d’éléments historiques par entrée +- +- +- Maximum size of history per entry +- Taille maximale de l’historique par entrée +- +- +- Delete Recycle Bin +- Supprimer la corbeille +- +- +- Do you want to delete the current recycle bin and all its contents? +-This action is not reversible. +- Voulez-vous supprimer la corbeille actuelle et tout son contenu ? +-Cette action est irréversible. +- +- +- (old) +- (ancien) +- +- +- Enable compression (recommended) +- Activer la compression (recommandé) +- +- +- +- DatabaseSettingsWidgetKeeShare +- +- Sharing +- Partage +- +- +- Breadcrumb +- Fil d’Ariane +- +- +- Type +- Type +- +- +- Path +- Chemin +- +- +- Last Signer +- Dernier signataire +- +- +- Certificates +- Certificats +- +- +- > +- Breadcrumb separator +- > +- +- +- +- DatabaseSettingsWidgetMetaDataSimple +- +- Database Name: +- Nom de la base de données : +- +- +- Description: +- Description : +- +- +- Database name field +- Champ de nom de la base de données +- +- +- Database description field +- Champ de description de la base de données +- +- +- +- DatabaseTabWidget +- +- KeePass 2 Database +- Base de données KeePass 2 +- +- +- All files +- Tous les fichiers +- +- +- Open database +- Ouvrir la base de données +- +- +- CSV file +- Fichier CSV +- +- +- Merge database +- Fusionner la base de données +- +- +- Open KeePass 1 database +- Ouvrir une base de données KeePass 1 +- +- +- KeePass 1 database +- Base de données KeePass 1 +- +- +- Export database to CSV file +- Exporter la base de données vers un fichier CSV +- +- +- Writing the CSV file failed. +- Échec d’écriture du fichier CSV. +- +- +- Database creation error +- Erreur de création de la base de données +- +- +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- La base de données créée n’a ni clé, ni fonction de dérivation de clé et ne peut pas être enregistrée. +-C’est très certainement un bogue, veuillez le signaler aux développeurs. +- +- +- Select CSV file +- Sélectionner un fichier CSV +- +- +- New Database +- Nouvelle base de données +- +- +- %1 [New Database] +- Database tab name modifier +- %1 [nouvelle base de données] +- +- +- %1 [Locked] +- Database tab name modifier +- %1 [verrouillé] +- +- +- %1 [Read-only] +- Database tab name modifier +- %1 [en lecture seule] +- +- +- Failed to open %1. It either does not exist or is not accessible. +- Échec d’ouverture de %1. Soit le fichier n’existe pas soit il n’est pas accessible. +- +- +- Export database to HTML file +- Exporter la base de données vers un fichier HTML +- +- +- HTML file +- Fichier HTML +- +- +- Writing the HTML file failed. +- Échec d’écriture du fichier HTML. +- +- +- Export Confirmation +- Confirmation de l’exportation +- +- +- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? +- Vous êtes sur le point d’exporter votre base de données vers un fichier non chiffré. Vos mots de passe et renseignements délicats seront vulnérables. Voulez-vous vraiment poursuivre ? +- +- +- Open OPVault +- Ouvrir OPVault +- +- +- +- DatabaseWidget +- +- Searching... +- Recherche… +- +- +- Do you really want to delete the entry "%1" for good? +- Voulez-vous vraiment supprimer définitivement l’entrée « %1 » ? +- +- +- Do you really want to move entry "%1" to the recycle bin? +- Voulez-vous vraiment déplacer l’entrée « %1 » vers la corbeille ? +- +- +- Do you really want to move %n entry(s) to the recycle bin? +- Voulez-vous vraiment déplacer %n entrée vers la corbeille ?Voulez-vous vraiment déplacer %n entrées vers la corbeille ? +- +- +- Execute command? +- Exécuter la commande ? +- +- +- Do you really want to execute the following command?<br><br>%1<br> +- Voulez-vous vraiment exécuter la commande suivante ?<br><br>%1<br> +- +- +- Remember my choice +- Mémoriser mon choix +- +- +- Do you really want to delete the group "%1" for good? +- Voulez-vous vraiment supprimer définitivement le groupe « %1 » ? +- +- +- No current database. +- Aucune base de données actuelle. +- +- +- No source database, nothing to do. +- Aucune base de données source, il n’y a rien à faire. +- +- +- Search Results (%1) +- Résultats de recherche (%1) +- +- +- No Results +- Il n’y a aucun résultat +- +- +- File has changed +- Le fichier a été modifié +- +- +- The database file has changed. Do you want to load the changes? +- Le fichier de la base de données a été modifié. Voulez-vous le recharger ? +- +- +- Merge Request +- Demande de fusion +- +- +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- Le fichier de la base de données a été modifié et vos changements ne sont pas enregistrés. +-Voulez-vous fusionner vos changements ? +- +- +- Empty recycle bin? +- Vider la corbeille ? +- +- +- Are you sure you want to permanently delete everything from your recycle bin? +- Voulez-vous vraiment vider définitivement la corbeille ? +- +- +- Do you really want to delete %n entry(s) for good? +- Voulez-vous vraiment supprimer %n entrée définitivement ?Voulez-vous vraiment supprimer %n entrées définitivement ? +- +- +- Delete entry(s)? +- Supprimer l’entrée ?Supprimer les entrées ? +- +- +- Move entry(s) to recycle bin? +- Déplacer l’entrée vers la corbeille ?Déplacer les entrées vers la corbeille ? +- +- +- Lock Database? +- Verrouiller la base de données ? +- +- +- You are editing an entry. Discard changes and lock anyway? +- Vous êtes en train de modifier une entrée. Abandonner les changements et la verrouiller quand même ? +- +- +- "%1" was modified. +-Save changes? +- « %1 » a été modifié. +-Enregistrer les changements ? +- +- +- Database was modified. +-Save changes? +- La base de données a été modifiée. +-Enregistrer les changements ? +- +- +- Save changes? +- Enregistrer les changements ? +- +- +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- Impossible d’ouvrir le nouveau fichier de base de données en tentant de la recharger automatiquement. +-Erreur : % 1 +- +- +- Disable safe saves? +- Désactiver les enregistrements sécurisés ? +- +- +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- KeePassXC n’a pas réussi à enregistrer la base de données à plusieurs reprises. Le fichier à enregistrer est probablement verrouillé par les services de synchronisation de fichiers. +-Désactiver les enregistrements sécurisés et réessayer ? +- +- +- Passwords +- Mots de passe +- +- +- Save database as +- Enregistrer la base de données sous +- +- +- KeePass 2 Database +- Base de données KeePass 2 +- +- +- Replace references to entry? +- Remplacer les références vers l’entrée ? +- +- +- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? +- L’entrée « %1 » a %2 référence. Voulez-vous remplacer la référence par les valeurs, ignorer cette entrée ou la supprimer ?L’entrée « %1 » a %2 références. Voulez-vous remplacer les références par les valeurs, ignorer cette entrée ou la supprimer ? +- +- +- Delete group +- Supprimer le groupe +- +- +- Move group to recycle bin? +- Déplacer le groupe vers la corbeille ? +- +- +- Do you really want to move the group "%1" to the recycle bin? +- Voulez-vous vraiment déplacer le groupe « %1 » vers la corbeille ? +- +- +- Successfully merged the database files. +- Les fichiers de base de données ont été fusionnés avec succès. +- +- +- Database was not modified by merge operation. +- La base de données n’a pas été modifiée par l’opération de fusion. +- +- +- Shared group... +- Groupe partagé… +- +- +- Writing the database failed: %1 +- Échec d’écriture de la base de données : %1 +- +- +- This database is opened in read-only mode. Autosave is disabled. +- Cette base de données est ouverte en lecture seule. L’enregistrement automatique est désactivé. +- +- +- Save database backup +- Sauvegarder la base de données +- +- +- Could not find database file: %1 +- Impossible de trouver le fichier de la base de données : %1 +- +- +- +- EditEntryWidget +- +- Entry +- Entrée +- +- +- Advanced +- Avancé +- +- +- Icon +- Icône +- +- +- Auto-Type +- Saisie automatique +- +- +- Properties +- Propriétés +- +- +- History +- Historique +- +- +- SSH Agent +- Agent SSH +- +- +- n/a +- s.o. +- +- +- (encrypted) +- (chiffrée) +- +- +- Select private key +- Sélectionner un fichier clé +- +- +- Entry history +- Historique de l’entrée +- +- +- Add entry +- Ajouter une entrée +- +- +- Edit entry +- Modifier l’entrée +- +- +- New attribute +- Nouvel attribut +- +- +- Are you sure you want to remove this attribute? +- Voulez-vous vraiment supprimer cet attribut ? +- +- +- Tomorrow +- Demain +- +- +- %n week(s) +- %n semaine%n semaines +- +- +- %n month(s) +- %n mois%n mois +- +- +- Entry updated successfully. +- L’entrée a été mise à jour avec succès. +- +- +- New attribute %1 +- Nouvel attribut %1 +- +- +- %n year(s) +- % an%n ans +- +- +- Confirm Removal +- Confirmer la suppression +- +- +- Browser Integration +- Intégration aux navigateurs +- +- +- <empty URL> +- <URL vide> +- +- +- Are you sure you want to remove this URL? +- Voulez-vous vraiment supprimer cette URL ? +- +- +- Reveal +- Révéler +- +- +- Hide +- Cacher +- +- +- Unsaved Changes +- Changements non enregistrés +- +- +- Would you like to save changes to this entry? +- Voulez-vous enregistrer les changements de cette entrée ? +- +- +- [PROTECTED] Press Reveal to view or edit +- [PROTÉGÉ] Appuyez sur Révéler pour afficher ou modifier +- +- +- Invalid Entry +- L’entrée est invalide +- +- +- An external merge operation has invalidated this entry. +-Unfortunately, any changes made have been lost. +- Une opération externe de fusion a invalidé cette entrée. +-Malheureusement, les changements effectués ont été perdus. +- +- +- +- EditEntryWidgetAdvanced +- +- Additional attributes +- Attributs supplémentaires +- +- +- Add +- Ajouter +- +- +- Remove +- Supprimer +- +- +- Edit Name +- Modifier le nom +- +- +- Protect +- Protéger +- +- +- Reveal +- Révéler +- +- +- Attachments +- Fichiers joints +- +- +- Foreground Color: +- Couleur de l’avant-plan : +- +- +- Background Color: +- Couleur de l’arrière-plan : +- +- +- Attribute selection +- Sélection d’un attribut +- +- +- Attribute value +- Valeur de l’attribut +- +- +- Add a new attribute +- Ajouter un nouvel attribut +- +- +- Remove selected attribute +- Supprimer l’attribut sélectionné +- +- +- Edit attribute name +- Modifier le nom de l’attribut +- +- +- Toggle attribute protection +- Activer ou désactiver la protection de l’attribut +- +- +- Show a protected attribute +- Afficher un attribut protégé +- +- +- Foreground color selection +- Sélection de la couleur d’avant-plan +- +- +- Background color selection +- Sélection de la couleur d’arrière-plan +- +- +- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> +- <html><head/><body><p>Si cette option est cochée, l’entrée n’apparaîtra pas dans les rapports tels que le bilan de santé ou les mots de passe compromis (HIBP), même si elle ne correspond pas aux exigences de qualité (p. ex. entropie ou réutilisation du mot de passe). Vous pouvez la cocher si le mot de passe échappe à votre contrôle (p. ex. s’il doit être un NIP à quatre chiffres), afin d’empêcher qu’il encombre les rapports.</p></body></html> +- +- +- Exclude from database reports +- Exclure des rapports de base de données +- +- +- +- EditEntryWidgetAutoType +- +- Enable Auto-Type for this entry +- Activer la saisie automatique pour cette entrée +- +- +- Window Associations +- Associations de fenêtres +- +- +- + +- + +- +- +- - +- - +- +- +- Window title: +- Titre de la fenêtre : +- +- +- Use a specific sequence for this association: +- Utiliser une séquence précise pour cette association : +- +- +- Custom Auto-Type sequence +- Séquence personnalisée de saisie automatique +- +- +- Open Auto-Type help webpage +- Ouvrir la page Web d’aide de la saisie automatique +- +- +- Existing window associations +- Associations de fenêtres existantes +- +- +- Add new window association +- Ajouter une nouvelle association de fenêtre +- +- +- Remove selected window association +- Supprimer l’association de fenêtre sélectionnée +- +- +- You can use an asterisk (*) to match everything +- Vous pouvez utiliser un astérisque (*) pour tout inclure +- +- +- Set the window association title +- Définir le titre de l’association de fenêtre +- +- +- You can use an asterisk to match everything +- Vous pouvez utiliser un astérisque pour tout inclure +- +- +- Custom Auto-Type sequence for this window +- Séquence personnalisée de saisie automatique pour cette fenêtre +- +- +- Inherit default Auto-Type sequence from the group +- Hériter du groupe la séquence par défaut de saisie automatique +- +- +- Use custom Auto-Type sequence: +- Utiliser une séquence personnalisée de saisie automatique : +- +- +- +- EditEntryWidgetBrowser +- +- These settings affect to the entry's behaviour with the browser extension. +- Ces paramètres affectent le comportement de l’entrée avec l’extension pour navigateurs. +- +- +- General +- Général +- +- +- Skip Auto-Submit for this entry +- Ignorer l’envoi automatique pour cette entrée +- +- +- Hide this entry from the browser extension +- Cacher cette entrée aux yeux de l’extension pour navigateurs +- +- +- Additional URL's +- URL supplémentaires +- +- +- Add +- Ajouter +- +- +- Remove +- Supprimer +- +- +- Edit +- Modifier +- +- +- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. +- N’envoyer ce paramètre au navigateur que pour les boîtes de dialogue d’authentification HTTP. Si cette option est activée, cette entrée ne sera pas présentée par les formulaires d’authentification normaux comme possibilité de sélection. +- +- +- Use this entry only with HTTP Basic Auth +- N’utiliser cette entrée qu’avec l’authentification HTTP Basic +- +- +- +- EditEntryWidgetHistory +- +- Show +- Afficher +- +- +- Restore +- Restaurer +- +- +- Delete +- Supprimer +- +- +- Delete all +- Tout supprimer +- +- +- Entry history selection +- Sélection de l’historique de l’entrée +- +- +- Show entry at selected history state +- Afficher l’entrée pour l’état historique sélectionné +- +- +- Restore entry to selected history state +- Restaurer l’entrée vers l’état historique sélectionné +- +- +- Delete selected history state +- Supprimer l’état historique sélectionné +- +- +- Delete all history +- Supprimer tout l’historique +- +- +- +- EditEntryWidgetMain +- +- URL: +- URL : +- +- +- Password: +- Mot de passe : +- +- +- Title: +- Titre : +- +- +- Presets +- Préréglages +- +- +- Toggle the checkbox to reveal the notes section. +- Cochez la case pour révéler la section des notes. +- +- +- Username: +- Nom d’utilisateur : +- +- +- Url field +- Champ d’URL +- +- +- Download favicon for URL +- Télécharger une favoricône pour l’URL +- +- +- Password field +- Champ de mot de passe +- +- +- Toggle notes visible +- Activer ou désactiver la visibilité des notes +- +- +- Expiration field +- Champ d’expiration +- +- +- Expiration Presets +- Préréglages de l’expiration +- +- +- Expiration presets +- Préréglages de l’expiration +- +- +- Notes field +- Champ de note +- +- +- Title field +- Champ de titre +- +- +- Username field +- Champ de nom d’utilisateur +- +- +- Toggle expiration +- Activer ou désactiver l’expiration +- +- +- Notes: +- Notes : +- +- +- https://example.com +- https://exemple.com +- +- +- Expires: +- Expire le : +- +- +- Edit Entry +- Modifier l’entrée +- +- +- +- EditEntryWidgetSSHAgent +- +- Form +- Formulaire +- +- +- Remove key from agent after +- Supprimer la clé de l’agent après +- +- +- seconds +- secondes +- +- +- Fingerprint +- Empreinte +- +- +- Remove key from agent when database is closed/locked +- Supprimer la clé de l’agent si la base de données est fermée ou verrouillée +- +- +- Public key +- Clé publique +- +- +- Add key to agent when database is opened/unlocked +- Ajouter la clé à l’agent si la base de données est ouverte ou déverrouillée +- +- +- Comment +- Commentaire +- +- +- Decrypt +- Déchiffrer +- +- +- n/a +- s.o. +- +- +- Copy to clipboard +- Copier dans le presse-papiers +- +- +- Private key +- Clé privée +- +- +- External file +- Fichier externe +- +- +- Browse... +- Button for opening file dialog +- Parcourir… +- +- +- Attachment +- Fichier joint +- +- +- Add to agent +- Ajouter à l’agent +- +- +- Remove from agent +- Retirer de l’agent +- +- +- Require user confirmation when this key is used +- Exiger la confirmation de l’utilisateur quand cette clé est utilisée +- +- +- Remove key from agent after specified seconds +- Supprimer la clé de l’agent après le nombre de secondes indiqué +- +- +- Browser for key file +- Rechercher un fichier clé +- +- +- External key file +- Fichier clé externe +- +- +- Select attachment file +- Sélectionner une fichier joint +- +- +- +- EditGroupWidget +- +- Group +- Groupe +- +- +- Icon +- Icône +- +- +- Properties +- Propriétés +- +- +- Add group +- Ajouter un groupe +- +- +- Edit group +- Modifier le groupe +- +- +- Enable +- Activer +- +- +- Disable +- Désactiver +- +- +- Inherit from parent group (%1) +- Hériter du groupe parent (%1) +- +- +- Entry has unsaved changes +- L’entrée comporte des changements non enregistrés +- +- +- +- EditGroupWidgetKeeShare +- +- Type: +- Type : +- +- +- Path: +- Chemin : +- +- +- Password: +- Mot de passe : +- +- +- Inactive +- Inactif +- +- +- KeeShare unsigned container +- Conteneur KeeShare non signé +- +- +- KeeShare signed container +- Conteneur KeeShare signé +- +- +- Select import source +- Sélectionner la source d’importation +- +- +- Select export target +- Sélectionner la cible de l’exportation +- +- +- Select import/export file +- Sélectionner le fichier d’importation ou d’exportation +- +- +- Clear +- Effacer +- +- +- Import +- Importer +- +- +- Export +- Exporter +- +- +- Synchronize +- Synchroniser +- +- +- Your KeePassXC version does not support sharing this container type. +-Supported extensions are: %1. +- Votre version de KeePassXC ne prend pas en charge le partage de ce type de conteneur. Les extensions prises en charge sont : %1. +- +- +- %1 is already being exported by this database. +- %1 est déjà exporté par cette base de données. +- +- +- %1 is already being imported by this database. +- %1 est déjà importé par cette base de données. +- +- +- %1 is being imported and exported by different groups in this database. +- %1 est importé et exporté par différents groupes dans cette base de données. +- +- +- KeeShare is currently disabled. You can enable import/export in the application settings. +- KeeShare is a proper noun +- KeeShare est actuellement désactivé. Vous pouvez activer l’importation et l’exportation dans les paramètres de l’application. +- +- +- Database export is currently disabled by application settings. +- L’exportation de la base de données est actuellement désactivée par les paramètres de l’application. +- +- +- Database import is currently disabled by application settings. +- L’importation de la base de données est actuellement désactivée par les paramètres de l’application. +- +- +- Sharing mode field +- Champ de mode de partage +- +- +- Path to share file field +- Champ de chemin vers le fichier partagé +- +- +- Password field +- Champ de mot de passe +- +- +- Clear fields +- Effacer les champs +- +- +- Browse for share file +- Sélectionner un fichier à partager +- +- +- Browse... +- Parcourir… +- +- +- +- EditGroupWidgetMain +- +- Name field +- Champ de nom +- +- +- Notes field +- Champ de note +- +- +- Toggle expiration +- Activer ou désactiver l’expiration +- +- +- Auto-Type toggle for this and sub groups +- Activer ou désactiver la saisie automatique pour cela et les sous-groupes +- +- +- Expiration field +- Champ d’expiration +- +- +- Search toggle for this and sub groups +- Activer ou désactiver la recherche pour cela et les sous-groupes +- +- +- Default auto-type sequence field +- Champ de séquence par défaut de saisie automatique +- +- +- Expires: +- Expire le : +- +- +- Use default Auto-Type sequence of parent group +- Utiliser la séquence par défaut de saisie automatique du groupe parent +- +- +- Auto-Type: +- Saisie automatique : +- +- +- Search: +- Recherche : +- +- +- Notes: +- Notes : +- +- +- Name: +- Nom : +- +- +- Set default Auto-Type sequence +- Définir la séquence par défaut de saisie automatique +- +- +- Edit Group +- Modifier le groupe +- +- +- +- EditWidgetIcons +- +- Add custom icon +- Ajouter une icône personnalisée +- +- +- Delete custom icon +- Supprimer l’icône personnalisée +- +- +- Download favicon +- Télécharger une favoricône +- +- +- Unable to fetch favicon. +- Impossible de récupérer la favoricône +- +- +- Images +- Images +- +- +- All files +- Tous les fichiers +- +- +- Confirm Delete +- Confirmer la suppression +- +- +- Select Image(s) +- Sélectionner des images +- +- +- Successfully loaded %1 of %n icon(s) +- %1 icône d’un total de %n a été chargée avec succès%1 icônes d’un total de %n ont été chargées avec succès +- +- +- No icons were loaded +- Aucune icône n’a été chargée +- +- +- %n icon(s) already exist in the database +- %n icône existe déjà dans la base de données%n icônes existent déjà dans la base de données +- +- +- The following icon(s) failed: +- Échec de l’icône suivante :Échec des icônes suivantes : +- +- +- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? +- Cette icône est utilisée par %n entrée et sera remplacée par l’icône par défaut. Voulez-vous vraiment la supprimer ?Cette icône est utilisée par %n entrées et sera remplacée par l’icône par défaut. Voulez-vous vraiment la supprimer ? +- +- +- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security +- Vous pouvez activer le service d’icônes de sites Web de DuckDuckGo dans Outils > Paramètres > Sécurité +- +- +- Download favicon for URL +- Télécharger une favoricône pour l’URL +- +- +- Apply selected icon to subgroups and entries +- Appliquer l’icône sélectionnée aux sous-groupes et entrées +- +- +- Also apply to child groups +- Appliquer aussi aux groupes enfant +- +- +- Also apply to child entries +- Appliquer aussi aux entrées enfant +- +- +- Also apply to all children +- Appliquer aussi à tous les enfants +- +- +- Existing icon selected. +- L’icône existante a été sélectionnée. +- +- +- Use default icon +- Utiliser l’icône par défaut +- +- +- Use custom icon +- Utiliser une icône personnalisée +- +- +- Apply icon to... +- Appliquer l’icône à… +- +- +- Apply to this group only +- N’appliquer qu’à ce groupe +- +- +- +- EditWidgetProperties +- +- Created: +- Création : +- +- +- Modified: +- Modification : +- +- +- Accessed: +- Accès : +- +- +- Uuid: +- UUID : +- +- +- Plugin Data +- Données de l’extension +- +- +- Remove +- Supprimer +- +- +- Delete plugin data? +- Supprimer les données de l’extension ? +- +- +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- Voulez-vous vraiment supprimer les données d’extension sélectionnées ? Cela pourrait entraîner un mauvais fonctionnement des extensions touchées. +- +- +- Key +- Clé +- +- +- Value +- Valeur +- +- +- Datetime created +- Date et heure de création +- +- +- Datetime modified +- Date et heure de modification +- +- +- Datetime accessed +- Date et heure d’accès +- +- +- Unique ID +- ID unique +- +- +- Plugin data +- Données de l’extension +- +- +- Remove selected plugin data +- Supprimer les données d’extension sélectionnée +- +- +- +- Entry +- +- %1 - Clone +- %1 – Cloner +- +- +- +- EntryAttachmentsModel +- +- Name +- Nom +- +- +- Size +- Taille +- +- +- +- EntryAttachmentsWidget +- +- Form +- Formulaire +- +- +- Add +- Ajouter +- +- +- Remove +- Supprimer +- +- +- Open +- Ouvrir +- +- +- Save +- Enregistrer +- +- +- Select files +- Sélectionner des fichiers +- +- +- Are you sure you want to remove %n attachment(s)? +- Voulez-vous vraiment supprimer %n fichier joint ?Voulez-vous vraiment supprimer %n fichiers joints ? +- +- +- Save attachments +- Enregistrer les fichiers joints +- +- +- Unable to create directory: +-%1 +- Impossible de créer le répertoire : +-%1 +- +- +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- Voulez-vous vraiment remplacer le fichier existant « %1 » par le fichier joint ? +- +- +- Confirm overwrite +- Confirmer le remplacement +- +- +- Unable to save attachments: +-%1 +- Impossible d’enregistrer les fichiers joints : +-%1 +- +- +- Unable to open attachment: +-%1 +- Impossible d’ouvrir le fichier joint : +-%1 +- +- +- Unable to open attachments: +-%1 +- Impossible d’ouvrir les fichiers joints : +-%1 +- +- +- Confirm remove +- Confirmer la suppression +- +- +- Unable to open file(s): +-%1 +- Impossible d’ouvrir le fichier : +-%1Impossible d’ouvrir les fichiers : +-%1 +- +- +- Attachments +- Fichiers joints +- +- +- Add new attachment +- Ajouter une nouveau fichier joint +- +- +- Remove selected attachment +- Supprimer le fichier joint sélectionné +- +- +- Open selected attachment +- Ouvrir le fichier joint sélectionné +- +- +- Save selected attachment to disk +- Enregistrer sur le disque le fichier joint sélectionné +- +- +- %1 is a big file (%2 MB). +-Your database may get very large and reduce performance. +- +-Are you sure to add this file? +- %1 est un gros fichier (%2 Mo). +-Votre base de données pourrait prendre de l’ampleur et réduire les performances. +- +-Voulez-vous vraiment ajouter ce fichier ? +- +- +- Confirm Attachment +- Confirmer le fichier joint +- +- +- +- EntryAttributesModel +- +- Name +- Nom +- +- +- +- EntryHistoryModel +- +- Last modified +- Dernière modification +- +- +- Title +- Titre +- +- +- Username +- Nom d’utilisateur +- +- +- URL +- URL +- +- +- +- EntryModel +- +- Ref: +- Reference abbreviation +- Réf. : +- +- +- Group +- Groupe +- +- +- Title +- Titre +- +- +- Username +- Nom d’utilisateur +- +- +- URL +- URL +- +- +- Never +- Jamais +- +- +- Password +- Mot de passe +- +- +- Notes +- Notes +- +- +- Expires +- Expire le +- +- +- Created +- Créée +- +- +- Modified +- Modifiée +- +- +- Accessed +- Accès +- +- +- Attachments +- Fichiers joints +- +- +- Size +- Taille +- +- +- Group name +- Nom du groupe +- +- +- Entry title +- Titre de l’entrée +- +- +- Entry notes +- Notes de l’entrée +- +- +- Entry expires at +- L’entrée expire à +- +- +- Creation date +- Date de création +- +- +- Last modification date +- Date de dernière modification +- +- +- Last access date +- Date de dernier accès +- +- +- Attached files +- Fichiers joints +- +- +- Entry size +- Taille de l’entrée +- +- +- Has attachments +- Comprend des fichiers joints +- +- +- Has TOTP one-time password +- A un mot de passe TOTP à usage unique +- +- +- +- EntryPreviewWidget +- +- Close +- Fermer +- +- +- General +- Général +- +- +- Username +- Nom d’utilisateur +- +- +- Password +- Mot de passe +- +- +- Expiration +- Expiration +- +- +- URL +- URL +- +- +- Attributes +- Attributs +- +- +- Attachments +- Fichiers joints +- +- +- Notes +- Notes +- +- +- Autotype +- Saisie automatique +- +- +- Window +- Fenêtre +- +- +- Sequence +- Séquence +- +- +- Searching +- Recherche +- +- +- Search +- Chercher +- +- +- Clear +- Effacer +- +- +- Never +- Jamais +- +- +- [PROTECTED] +- [PROTÉGÉ] +- +- +- Enabled +- Activé +- +- +- Disabled +- Désactivé +- +- +- Share +- Partager +- +- +- Display current TOTP value +- Afficher la valeur TOTP actuelle +- +- +- Advanced +- Avancé +- +- +- Default Sequence +- Séquence par défaut +- +- +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- attributes line +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- +- +- +- EntryURLModel +- +- Invalid URL +- L’URL est invalide +- +- +- +- EntryView +- +- Fit to window +- Adapter à la fenêtre +- +- +- Fit to contents +- Adapter au contenu +- +- +- Reset to defaults +- Réinitialiser aux valeurs par défaut +- +- +- Has attachments +- Entry attachment icon toggle +- Comprend des fichiers joints +- +- +- Has TOTP +- Entry TOTP icon toggle +- A un TOTP +- +- +- +- FdoSecrets::Item +- +- Entry "%1" from database "%2" was used by %3 +- L’entrée « %1 » de la base de données « %2 » a été utilisée par %3 +- +- +- +- FdoSecrets::Service +- +- Failed to register DBus service at %1.<br/> +- Échec d’inscription du service DBus à %1.<br/> +- +- +- %n Entry(s) was used by %1 +- %1 is the name of an application +- %n entrée était utilisée par %1%n entrées étaient utilisées par %1 +- +- +- +- FdoSecrets::SettingsDatabaseModel +- +- File Name +- Nom de fichier +- +- +- Group +- Groupe +- +- +- Manage +- Gérer +- +- +- Unlock to show +- Déverrouiller pour afficher +- +- +- None +- Aucun +- +- +- +- FdoSecrets::SettingsSessionModel +- +- Application +- Application +- +- +- Manage +- Gérer +- +- +- +- FdoSecretsPlugin +- +- <b>Fdo Secret Service:</b> %1 +- <b>« Secret Service » de Fdo :</b> %1 +- +- +- Unknown +- Unknown PID +- Inconnu +- +- +- Unknown +- Unknown executable path +- Inconnu +- +- +- <i>PID: %1, Executable: %2</i> +- <i>PID: 1234, Executable: /path/to/exe</i> +- <i>PID : %1, exécutable : %2</i> +- +- +- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. +- Un autre « secret service » est en cours d’exécution (%1).<br/>Veuillez l’arrêter ou le supprimer avant de réactiver l’intégration à « Secret Service ». +- +- +- +- Group +- +- [empty] +- group has no children +- [vide] +- +- +- +- HibpDownloader +- +- Online password validation failed +- Échec de validation du mot de passe en ligne +- +- +- +- IconDownloaderDialog +- +- Download Favicons +- Télécharger des favoricônes +- +- +- Cancel +- Annuler +- +- +- Having trouble downloading icons? +-You can enable the DuckDuckGo website icon service in the security section of the application settings. +- Des problèmes pour télécharger les icônes ? +-Vous pouvez activer le service d’icônes de sites Web de DuckDuckGo dans la section sécurité des paramètres de l’application. +- +- +- Close +- Fermer +- +- +- URL +- URL +- +- +- Status +- État +- +- +- Please wait, processing entry list... +- Veuillez patienter, traitement de la liste des entrées… +- +- +- Downloading... +- Téléchargement… +- +- +- Ok +- Valider +- +- +- Already Exists +- Existe déjà +- +- +- Download Failed +- Échec de téléchargement +- +- +- Downloading favicons (%1/%2)... +- Téléchargement des favoricônes (%1/%2)… +- +- +- +- KMessageWidget +- +- &Close +- &Fermer +- +- +- Close message +- Fermer le message +- +- +- +- Kdbx3Reader +- +- missing database headers +- les en-têtes de la base de données manquent +- +- +- Header doesn't match hash +- L’en-tête ne correspond pas à l’empreinte numérique +- +- +- Invalid header id size +- La taille de l’ID d’en-tête est invalide +- +- +- Invalid header field length +- La longueur du champ d’en-tête est invalide +- +- +- Invalid header data length +- La longueur des données d’en-tête est invalide +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Des identifiants invalides ont été fournis, veuillez réessayer. +-Si le problème se reproduit, le fichier de la base de données pourrait être corrompu. +- +- +- Unable to calculate database key +- Impossible de calculer la clé de la base de données +- +- +- Unable to issue challenge-response: %1 +- Impossible de lancer une question-réponse : %1 +- +- +- +- Kdbx3Writer +- +- Unable to issue challenge-response: %1 +- Impossible de lancer une question-réponse : %1 +- +- +- Unable to calculate database key +- Impossible de calculer la clé de la base de données +- +- +- +- Kdbx4Reader +- +- missing database headers +- les en-têtes de la base de données manquent +- +- +- Invalid header checksum size +- La taille de la somme de contrôle de l’en-tête est invalide +- +- +- Header SHA256 mismatch +- Le SHA256 de l’en-tête ne correspond pas +- +- +- Unknown cipher +- Chiffrement inconnu +- +- +- Invalid header id size +- La taille de l’ID d’en-tête est invalide +- +- +- Invalid header field length +- La longueur du champ d’en-tête est invalide +- +- +- Invalid header data length +- La longueur des données d’en-tête est invalide +- +- +- Failed to open buffer for KDF parameters in header +- Échec d’ouverture d’un tampon pour les paramètres de fonction de dérivation de clé dans l’en-tête +- +- +- Unsupported key derivation function (KDF) or invalid parameters +- La fonction de dérivation de clé (KDF) n’est pas prise en charge ou les paramètres sont invalides +- +- +- Legacy header fields found in KDBX4 file. +- Des champs d’en-tête hérités ont été trouvés dans le fichier KDBX4. +- +- +- Invalid inner header id size +- La taille de l’ID d’en-tête interne est invalide +- +- +- Invalid inner header field length +- La longueur du champ d’en-tête interne est invalide +- +- +- Invalid inner header binary size +- La taille binaire d’en-tête interne est invalide +- +- +- Unsupported KeePass variant map version. +- Translation: variant map = data structure for storing meta data +- La version de la mappe de variantes KeePass n’est pas prise charge. +- +- +- Invalid variant map entry name length +- Translation: variant map = data structure for storing meta data +- La longueur d’un nom d’entrée de la mappe de variantes est invalide +- +- +- Invalid variant map entry name data +- Translation: variant map = data structure for storing meta data +- Les données d’un nom d’entrée de la mappe de variantes sont invalides +- +- +- Invalid variant map entry value length +- Translation: variant map = data structure for storing meta data +- La longueur d’une valeur d’entrée de la mappe de variantes est invalide +- +- +- Invalid variant map entry value data +- Translation comment: variant map = data structure for storing meta data +- Les données d’une valeur d’entrée de la mappe de variantes sont invalides +- +- +- Invalid variant map Bool entry value length +- Translation: variant map = data structure for storing meta data +- La longueur d’une valeur d’entrée Bool de la mappe de variantes est invalide +- +- +- Invalid variant map Int32 entry value length +- Translation: variant map = data structure for storing meta data +- La longueur d’une valeur d’entrée Int32 de la mappe de variantes est invalide +- +- +- Invalid variant map UInt32 entry value length +- Translation: variant map = data structure for storing meta data +- La longueur d’une valeur d’entrée UInt32 de la mappe de variantes est invalide +- +- +- Invalid variant map Int64 entry value length +- Translation: variant map = data structure for storing meta data +- La longueur d’une valeur d’entrée Int64 de la mappe de variantes est invalide +- +- +- Invalid variant map UInt64 entry value length +- Translation: variant map = data structure for storing meta data +- La longueur d’une valeur d’entrée UInt64 de la mappe de variantes est invalide +- +- +- Invalid variant map entry type +- Translation: variant map = data structure for storing meta data +- Le type d’une entrée de la mappe de variantes est invalide +- +- +- Invalid variant map field type size +- Translation: variant map = data structure for storing meta data +- La taille du type d’un champ de la mappe de variantes est invalide +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Des identifiants invalides ont été fournis, veuillez réessayer. +-Si le problème se reproduit, le fichier de la base de données pourrait être corrompu. +- +- +- (HMAC mismatch) +- (HMAC ne correspond pas) +- +- +- Unable to calculate database key: %1 +- Impossible de calculer la clé de la base de données : %1 +- +- +- +- Kdbx4Writer +- +- Invalid symmetric cipher algorithm. +- L’algorithme de chiffrement symétrique est invalide +- +- +- Invalid symmetric cipher IV size. +- IV = Initialization Vector for symmetric cipher +- La taille du chiffrement IV symétrique est invalide. +- +- +- Failed to serialize KDF parameters variant map +- Translation comment: variant map = data structure for storing meta data +- Échec de sérialisation des paramètres de fonction de dérivation de clé de la mappe de variantes. +- +- +- Unable to calculate database key: %1 +- Impossible de calculer la clé de la base de données : %1 +- +- +- +- KdbxReader +- +- Unsupported cipher +- Chiffrement non pris en charge +- +- +- Invalid compression flags length +- La longueur des drapeaux de compression est invalide. +- +- +- Unsupported compression algorithm +- L’algorithme de compression n’est pas pris en charge +- +- +- Invalid master seed size +- La taille de la graine maîtresse est invalide +- +- +- Invalid transform seed size +- La taille de la semence de transformation est invalide +- +- +- Invalid transform rounds size +- La taille des cycles de transformation est invalide +- +- +- Invalid start bytes size +- La taille des octets de début est invalide +- +- +- Invalid random stream id size +- La taille de l’ID de flux aléatoire est invalide. +- +- +- Invalid inner random stream cipher +- Le chiffrement du flux intérieur aléatoire est invalide +- +- +- Not a KeePass database. +- N’est pas une base de données KeePass. +- +- +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- Le fichier sélectionné est une ancienne base de données KeePass 1 (.kdb). +- +-Vous pouvez l’importer en cliquant sur Base de données > « Importer une base de données KeePass 1… ». +-Il s’agit d’une migration à sens unique. Vous ne pourrez pas ouvrir la base de données importée avec l’ancienne version KeePassX 0.4. +- +- +- Unsupported KeePass 2 database version. +- Version de base de données KeePass 2 non pris en charge. +- +- +- Invalid cipher uuid length: %1 (length=%2) +- La longueur de l’UUID de chiffrement est invalide : %1 (longueur = %2) +- +- +- Unable to parse UUID: %1 +- Impossible d’analyser l’UUID : %1 +- +- +- Failed to read database file. +- Échec de lecture du fichier de base de données. +- +- +- +- KdbxXmlReader +- +- XML parsing failure: %1 +- Échec d’analyse XML : %1 +- +- +- No root group +- Aucun groupe racine +- +- +- Missing icon uuid or data +- L’UUID ou les données de l’icône manquent +- +- +- Missing custom data key or value +- La valeur ou la clé des données personnalisées manque +- +- +- Multiple group elements +- Éléments de groupe multiples +- +- +- Null group uuid +- UUID de groupe nul +- +- +- Invalid group icon number +- Le numéro de l’icône du groupe est invalide +- +- +- Invalid EnableAutoType value +- La valeur EnableAutoType est invalide +- +- +- Invalid EnableSearching value +- La valeur de EnableSearching est invalide +- +- +- No group uuid found +- Aucun UUID de groupe n’a été trouvé +- +- +- Null DeleteObject uuid +- UUID de DeleteObject null +- +- +- Missing DeletedObject uuid or time +- L’UUID ou l’heure de DeletedObject manque +- +- +- Null entry uuid +- UUID de l’entrée null +- +- +- Invalid entry icon number +- Le numéro de l’icône de l’entrée est invalide +- +- +- History element in history entry +- Élément d’historique dans l’entrée de l’historique +- +- +- No entry uuid found +- Aucun UUID d’entrée n’a été trouvé +- +- +- History element with different uuid +- Élément d’historique avec un UUID différent +- +- +- Duplicate custom attribute found +- Un doublon d’attribut personnalisé a été trouvé +- +- +- Entry string key or value missing +- La clé ou la valeur de chaîne de l’entrée manque +- +- +- Entry binary key or value missing +- La clé ou la valeur binaire de l’entrée manque +- +- +- Auto-type association window or sequence missing +- La fenêtre d’association ou la séquence de saisie automatique manque +- +- +- Invalid bool value +- La valeur booléenne est invalide +- +- +- Invalid date time value +- La valeur de date et d’heure est invalide +- +- +- Invalid color value +- La valeur de couleur est invalide +- +- +- Invalid color rgb part +- La partie de couleur RVB est invalide +- +- +- Invalid number value +- La valeur numérique est invalide +- +- +- Invalid uuid value +- La valeur d’UUID est invalide +- +- +- Unable to decompress binary +- Translator meant is a binary data inside an entry +- Impossible de décompresser les données binaires +- +- +- XML error: +-%1 +-Line %2, column %3 +- Erreur XML : +-%1 +-Ligne %2, colonne %3 +- +- +- +- KeeAgentSettings +- +- Invalid KeeAgent settings file structure. +- La structure du fichier de paramètres KeeAgent est invalide. +- +- +- Private key is an attachment but no attachments provided. +- La clé privée est un fichier joint, mais aucun fichier joint n’est fourni. +- +- +- Private key is empty +- La clé privée est vide +- +- +- File too large to be a private key +- Le fichier est trop important pour être un fichier clé +- +- +- Failed to open private key +- Échec d’ouverture de la clé privée +- +- +- +- KeePass1OpenWidget +- +- Unable to open the database. +- Impossible d’ouvrir la base de données. +- +- +- Import KeePass1 Database +- Importer une base de données KeePass 1 +- +- +- +- KeePass1Reader +- +- Unable to read keyfile. +- Impossible de lire le fichier clé. +- +- +- Not a KeePass database. +- N’est pas une base de données KeePass. +- +- +- Unsupported encryption algorithm. +- Algorithme de chiffrement non pris en charge. +- +- +- Unsupported KeePass database version. +- Version de base de données KeePass non prise en charge. +- +- +- Unable to read encryption IV +- IV = Initialization Vector for symmetric cipher +- Impossible de lire le chiffrement IV +- +- +- Invalid number of groups +- Le nombre de groupes est invalide +- +- +- Invalid number of entries +- Le nombre d’entrées est invalide +- +- +- Invalid content hash size +- La taille de l’empreinte du contenu est invalide +- +- +- Invalid transform seed size +- La taille de la semence de transformation est invalide +- +- +- Invalid number of transform rounds +- Le nombre de cycles de transformation est invalide +- +- +- Unable to construct group tree +- Impossible de créer l’arborescence du groupe +- +- +- Root +- Racine +- +- +- Key transformation failed +- Échec de transformation de la clé +- +- +- Invalid group field type number +- Le numéro de type du champ de groupe est invalide +- +- +- Invalid group field size +- La taille du champ de groupe est invalide +- +- +- Read group field data doesn't match size +- Les données du champ de groupe lues ne correspondent pas à la taille +- +- +- Incorrect group id field size +- La taille du champ « ID du groupe » est incorrecte +- +- +- Incorrect group creation time field size +- La taille du champ d’heure de création du groupe est incorrecte +- +- +- Incorrect group modification time field size +- La taille du champ d’heure de modification du groupe est incorrecte +- +- +- Incorrect group access time field size +- La taille du champ de date d’accès du groupe est incorrecte. +- +- +- Incorrect group expiry time field size +- La taille du champ de date d’expiration du groupe est incorrecte. +- +- +- Incorrect group icon field size +- La taille du champ d’icône du groupe est incorrecte +- +- +- Incorrect group level field size +- La taille de champ du niveau du groupe est incorrecte +- +- +- Invalid group field type +- La taille du champ de groupe est invalide +- +- +- Missing group id or level +- L’ID ou le niveau du groupe manque +- +- +- Missing entry field type number +- Le numéro de type du champ d’entrée manque +- +- +- Invalid entry field size +- La taille du champ d’entrée est invalide +- +- +- Read entry field data doesn't match size +- Les données du champ d’entrée lues ne correspondent pas à la taille. +- +- +- Invalid entry uuid field size +- La taille du champ UUID de l’entrée est invalide +- +- +- Invalid entry group id field size +- La taille du champ d’ID de groupe de l’entrée est invalide +- +- +- Invalid entry icon field size +- La taille du champ d’icône de l’entrée est invalide +- +- +- Invalid entry creation time field size +- La taille du champ de date de création de l’entrée est invalide +- +- +- Invalid entry modification time field size +- La taille du champ de date de modification de l’entrée est invalide +- +- +- Invalid entry expiry time field size +- La taille du champ de date d’expiration de l’entrée est invalide +- +- +- Invalid entry field type +- Le type du champ d’entrée est invalide +- +- +- unable to seek to content position +- impossible de se déplacer vers la position du contenu +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Des identifiants invalides ont été fournis, veuillez réessayer. +-Si le problème se reproduit, le fichier de la base de données pourrait être corrompu. +- +- +- Unable to calculate database key +- Impossible de calculer la clé de la base de données +- +- +- +- KeeShare +- +- Invalid sharing reference +- La référence de partage est invalide +- +- +- Inactive share %1 +- Le partage %1 est inactif +- +- +- Imported from %1 +- Importé de %1 +- +- +- Exported to %1 +- A été exporté vers %1 +- +- +- Synchronized with %1 +- A été synchronisé avec %1 +- +- +- Import is disabled in settings +- L’importation est désactivée dans les paramètres +- +- +- Export is disabled in settings +- L’exportation est désactivée dans les paramètres +- +- +- Inactive share +- Le partage est inactif +- +- +- Imported from +- A été importé de +- +- +- Exported to +- A été exporté vers +- +- +- Synchronized with +- A été synchronisé avec +- +- +- +- KeyComponentWidget +- +- Key Component +- Composant clé +- +- +- Key Component Description +- Description du composant clé +- +- +- Cancel +- Annuler +- +- +- Key Component set, click to change or remove +- Le composant clé est défini, cliquez pour le changer ou le supprimer +- +- +- Add %1 +- Add a key component +- Ajouter %1 +- +- +- Change %1 +- Change a key component +- Changer %1 +- +- +- Remove %1 +- Remove a key component +- Supprimer %1 +- +- +- %1 set, click to change or remove +- Change or remove a key component +- %1 est défini, cliquez pour le changer ou le supprimer +- +- +- +- KeyFileEditWidget +- +- Generate +- Générer +- +- +- Key File +- Fichier clé +- +- +- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> +- <p>Pour une sécurité accrue, vous pouvez ajouter un fichier clé qui comprend des octets aléatoires.</p><p>Vous devez le garder secret et ne jamais le perdre ou vous ne pourrez plus vous connecter.</p> +- +- +- Error loading the key file '%1' +-Message: %2 +- Erreur durant le chargement du fichier clé « %1 » +-Message : %2 +- +- +- Key files +- Fichiers clés +- +- +- All files +- Tous les fichiers +- +- +- Create Key File... +- Créer un fichier clé… +- +- +- Error creating key file +- Erreur lors de la création du fichier clé +- +- +- Unable to create key file: %1 +- Impossible de créer le fichier clé : %1 +- +- +- Select a key file +- Sélectionner un fichier clé +- +- +- Key file selection +- Sélection du fichier clé +- +- +- Browse for key file +- Rechercher un fichier clé +- +- +- Browse... +- Parcourir… +- +- +- Generate a new key file +- Générer un nouveau fichier clé +- +- +- Note: Do not use a file that may change as that will prevent you from unlocking your database! +- Note : N’utilisez pas un fichier qui pourrait changer, car cela pourrait vous empêcher de déverrouiller votre base de données. +- +- +- Invalid Key File +- Le fichier clé est invalide +- +- +- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. +- Vous ne pouvez pas utiliser la base de données actuelle comme son propre fichier clé. Veuillez choisir un autre fichier ou générer un nouveau fichier clé. +- +- +- Suspicious Key File +- Fichier clé douteux +- +- +- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. +-Are you sure you want to continue with this file? +- Le fichier clé sélectionné semble être un fichier de base de données de mots de passe. Un fichier clé doit être un fichier statique qui ne change jamais ou vous perdrez irrémédiablement l’accès à votre base de données. +-Voulez-vous vraiment poursuivre avec ce fichier ? +- +- +- Old key file format +- Ancien format de fichier clé +- +- +- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. +- Vous utilisez un ancien format de fichier clé que KeePassXC <br>pourrait ne plus prendre en charge à l’avenir.<br><br>Veuillez envisager de plutôt générer un nouveau fichier clé. +- +- +- +- MainWindow +- +- &Database +- &Base de données +- +- +- &Help +- &Aide +- +- +- &Groups +- &Groupes +- +- +- &Tools +- &Outils +- +- +- &Quit +- &Fermer +- +- +- &About +- À &propos +- +- +- Database settings +- Paramètres de la base de données +- +- +- Copy username to clipboard +- Copier le nom d’utilisateur dans le presse-papiers +- +- +- Copy password to clipboard +- Copier le mot de passe dans le presse-papiers +- +- +- &Settings +- &Paramètres +- +- +- &Title +- &Titre +- +- +- Copy title to clipboard +- Copier le titre dans le presse-papiers +- +- +- &URL +- &URL +- +- +- Copy URL to clipboard +- Copier l’URL dans le presse-papiers +- +- +- &Notes +- &Notes +- +- +- Copy notes to clipboard +- Copier les notes dans le presse-papiers +- +- +- Copy &TOTP +- Copier le &TOTP +- +- +- E&mpty recycle bin +- &Vider la corbeille +- +- +- Clear history +- Effacer l’historique +- +- +- Access error for config file %1 +- Erreur d’accès pour le fichier de configuration %1 +- +- +- Settings +- Paramètres +- +- +- Toggle window +- Activer ou désactiver la fenêtre +- +- +- Quit KeePassXC +- Fermer KeePassXC +- +- +- Please touch the button on your YubiKey! +- Veuillez appuyez sur le bouton de votre YubiKey +- +- +- WARNING: You are using an unstable build of KeePassXC! +-There is a high risk of corruption, maintain a backup of your databases. +-This version is not meant for production use. +- AVERTISSEMENT : Vous utilisez une version instable du KeePassXC. +-Le risque de corruption est élevé, conservez une sauvegarde de vos bases de données. +-Cette version n’est pas destinée à un usage régulier. +- +- +- &Donate +- &Faire un don +- +- +- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +-We recommend you use the AppImage available on our downloads page. +- AVERTISSEMENT : Votre version de Qt pourrait faire planter KeePassXC avec un clavier virtuel. +-Nous recommandons d’utiliser l’AppImage proposée sur notre page de téléchargement. +- +- +- &Import +- &Importer +- +- +- Create a new database +- Créer une nouvelle base de données +- +- +- Merge from another KDBX database +- Fusionner d’une autre base de données KDBX +- +- +- Add a new entry +- Ajouter une nouvelle entrée +- +- +- View or edit entry +- Voir ou modifier l’entrée +- +- +- Add a new group +- Ajouter un nouveau groupe +- +- +- Perform &Auto-Type +- Saisir &automatiquement +- +- +- Open &URL +- Ouvrir l’&URL +- +- +- Import a KeePass 1 database +- Importer une base de données KeePass 1 +- +- +- Import a CSV file +- Importer un fichier CSV +- +- +- NOTE: You are using a pre-release version of KeePassXC! +-Expect some bugs and minor issues, this version is not meant for production use. +- NOTE : Vous utilisez une préversion de KeePassXC. +-Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas destinée à un usage régulier. +- +- +- Check for updates on startup? +- Vérifier la présence de mises à jour au démarrage ? +- +- +- Would you like KeePassXC to check for updates on startup? +- Voulez-vous que KeePassXC vérifie la présence de mises à jour au démarrage ? +- +- +- You can always check for updates manually from the application menu. +- Vous pouvez toujours vérifier manuellement la présence de mises à jour à partir du menu de l’application. +- +- +- &Export +- &Exporter +- +- +- Sort &A-Z +- Trier de &A à Z +- +- +- Sort &Z-A +- Trier de &Z à A +- +- +- &Password Generator +- &Générateur de mot de passe +- +- +- Import a 1Password Vault +- Importer un coffre 1Password +- +- +- &Getting Started +- &Guide de démarrage +- +- +- &User Guide +- Guide d’&utilisation +- +- +- &Keyboard Shortcuts +- &Raccourcis clavier +- +- +- &Recent Databases +- Bases de données &récentes +- +- +- &Entries +- &Entrées +- +- +- Copy Att&ribute +- Copier l’att&ribut +- +- +- TOTP +- TOTP +- +- +- View +- Affichage +- +- +- Theme +- Thème +- +- +- &Check for Updates +- &Vérifier la présence de mises à jour +- +- +- &Open Database… +- &Ouvrir une base de données… +- +- +- &Save Database +- Enregistrer la base de donnée&s +- +- +- &Close Database +- Fermer la &base de données +- +- +- &New Database… +- &Nouvelle base de données… +- +- +- &Merge From Database… +- Fusio&nner à partir d’une base de données… +- +- +- &New Entry… +- &Nouvelle entrée… +- +- +- &Edit Entry… +- &Modifier l’entrée… +- +- +- &Delete Entry… +- &Supprimer l’entrée… +- +- +- &New Group… +- &Nouveau groupe… +- +- +- &Edit Group… +- &Modifier le groupe… +- +- +- &Delete Group… +- &Supprimer le groupe… +- +- +- Download All &Favicons… +- Télécharger toutes les &favoricônes… +- +- +- Sa&ve Database As… +- Enre&gistrer la base de données sous… +- +- +- Database &Security… +- &Sécurité de la base de données… +- +- +- Database &Reports... +- &Rapports de la base de données… +- +- +- Statistics, health check, etc. +- Statistiques, bilan de santé, etc. +- +- +- &Database Settings… +- &Paramètres de la base de données… +- +- +- &Clone Entry… +- &Cloner l’entrée… +- +- +- Move u&p +- Déplacer vers le &haut +- +- +- Move entry one step up +- Déplacer l’entrée d’un niveau vers le haut +- +- +- Move do&wn +- Déplacer vers le &bas +- +- +- Move entry one step down +- Déplacer l’entrée d’un niveau vers le bas +- +- +- Copy &Username +- Copier le nom d’&utilisateur +- +- +- Copy &Password +- Copier le mot de &passe +- +- +- Download &Favicon +- Télécharger une &favoricône +- +- +- &Lock Databases +- &Verrouiller les bases de données +- +- +- &CSV File… +- Fichier &CSV… +- +- +- &HTML File… +- Fichier &HTML… +- +- +- KeePass 1 Database… +- Base de données KeePass 1… +- +- +- 1Password Vault… +- Coffre 1Password… +- +- +- CSV File… +- Fichier CSV… +- +- +- Show TOTP +- Afficher le TOTP +- +- +- Show QR Code +- Afficher le QR code +- +- +- Set up TOTP… +- Configurer TOTP… +- +- +- Report a &Bug +- Signaler un &bogue +- +- +- Open Getting Started Guide +- Ouvrir le guide de démarrage +- +- +- &Online Help +- &Aide en ligne +- +- +- Go to online documentation +- Accéder à la documentation en ligne +- +- +- Open User Guide +- Ouvrir le guide d’utilisation +- +- +- Save Database Backup... +- Sauvegarder la base de données… +- +- +- Add key to SSH Agent +- Ajouter une clé à l’agent SSH +- +- +- Remove key from SSH Agent +- Supprimer la clé de l’agent SSH +- +- +- Compact Mode +- Mode compact +- +- +- Automatic +- Automatique +- +- +- Light +- Clair +- +- +- Dark +- Sombre +- +- +- Classic (Platform-native) +- Classique (de la plateforme) +- +- +- Show Toolbar +- Afficher la barre d’outils +- +- +- Show Preview Panel +- Afficher le panneau de prévisualisation +- +- +- Don't show again for this version +- Ne plus afficher pour cette version +- +- +- Restart Application? +- Redémarrer l’application ? +- +- +- You must restart the application to apply this setting. Would you like to restart now? +- Pour appliquer ce paramètre, vous devez redémarrer l’application. Voulez-vous la démarrer maintenant ? +- +- +- Perform Auto-Type Sequence +- Effectuer une séquence de saisie automatique +- +- +- {USERNAME} +- {NOMD’UTILISATEUR} +- +- +- {USERNAME}{ENTER} +- {NOMD’UTILISATEUR}{ENTRÉE} +- +- +- {PASSWORD} +- {MOTDEPASSE} +- +- +- {PASSWORD}{ENTER} +- {MOTDEPASSE}{ENTRÉE} +- +- +- Always on Top +- +- +- +- Hide Usernames +- Cacher les noms d’utilisateur +- +- +- Hide Passwords +- Cacher les mots de passe +- +- +- +- ManageDatabase +- +- Database settings +- Paramètres de la base de données +- +- +- Edit database settings +- Modifier les paramètres de la base de données +- +- +- Unlock database +- Déverrouiller la base de données +- +- +- Unlock database to show more information +- Déverrouiller la base de données pour afficher davantage de renseignements +- +- +- Lock database +- Verrouiller la base de données +- +- +- +- ManageSession +- +- Disconnect +- Déconnecter +- +- +- Disconnect this application +- Déconnecter cette application +- +- +- +- Merger +- +- Creating missing %1 [%2] +- Création du %1 manquant [%2] +- +- +- Relocating %1 [%2] +- Déplacement de %1 [%2] +- +- +- Overwriting %1 [%2] +- Remplacement de %1 [%2] +- +- +- older entry merged from database "%1" +- ancienne entrée fusionnée de la base de données « %1 » +- +- +- Adding backup for older target %1 [%2] +- Ajout d’une sauvegarde pour l’ancienne cible %1 [%2] +- +- +- Adding backup for older source %1 [%2] +- Ajout d’une sauvegarde pour l’ancienne source %1 [%2] +- +- +- Reapplying older target entry on top of newer source %1 [%2] +- Ré-application de l’ancienne entrée cible sur la nouvelle source %1 [%2] +- +- +- Reapplying older source entry on top of newer target %1 [%2] +- Ré-application de l’ancienne entrée source sur la nouvelle cible %1 [%2] +- +- +- Synchronizing from newer source %1 [%2] +- Synchronisation avec une source plus récente %1 [%2] +- +- +- Synchronizing from older source %1 [%2] +- Synchronisation avec une source plus ancienne %1 [%2] +- +- +- Deleting child %1 [%2] +- Suppression de l’enfant %1 [%2] +- +- +- Deleting orphan %1 [%2] +- Suppression de l’orphelin %1 [%2] +- +- +- Changed deleted objects +- Objets supprimés changés +- +- +- Adding missing icon %1 +- Ajout de l’icône %1 manquante +- +- +- Removed custom data %1 [%2] +- Les données personnalisées %1 [%2] ont été supprimées +- +- +- Adding custom data %1 [%2] +- Ajout des données personnalisées %1 [%2] +- +- +- +- NewDatabaseWizard +- +- Create a new KeePassXC database... +- Créer une nouvelle base de données KeePassXC… +- +- +- Root +- Root group +- Racine +- +- +- +- NewDatabaseWizardPage +- +- WizardPage +- Page d’aide +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Vous pouvez régler ici les paramètres de chiffrement de la base de données. Ne vous inquiétez pas, vous pourrez les changer ultérieurement dans les paramètres de la base de données. +- +- +- Advanced Settings +- Paramètres avancés +- +- +- Simple Settings +- Paramètres simples +- +- +- Encryption Settings +- Paramètres de chiffrement +- +- +- +- NewDatabaseWizardPageDatabaseKey +- +- Database Credentials +- Identifiants de la base de données +- +- +- A set of credentials known only to you that protects your database. +- Un jeu d’identifiants connus de vous seul, qui protège votre base de données. +- +- +- +- NewDatabaseWizardPageEncryption +- +- Encryption Settings +- Paramètres de chiffrement +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Vous pouvez régler ici les paramètres de chiffrement de la base de données. Ne vous inquiétez pas, vous pourrez les changer ultérieurement dans les paramètres de la base de données. +- +- +- +- NewDatabaseWizardPageMetaData +- +- General Database Information +- Renseignements généraux de la base de données +- +- +- Please fill in the display name and an optional description for your new database: +- Veuillez saisir le nom d’affichage et une description facultative pour votre nouvelle base de données : +- +- +- +- NixUtils +- +- Password Manager +- Gestionnaire de mots de passe +- +- +- +- OpData01 +- +- Invalid OpData01, does not contain header +- OpData01 est invalide, ne comprend pas d’en-tête +- +- +- Unable to read all IV bytes, wanted 16 but got %1 +- Impossible de lire les octets du vecteur d’initialisation, 16 nécessaires, %1 lus +- +- +- Unable to init cipher for opdata01: %1 +- Impossible d’initialiser le chiffrement pour opdata01 : %1 +- +- +- Unable to read all HMAC signature bytes +- Impossible de lire tous les octets de la signature HMAC +- +- +- Malformed OpData01 due to a failed HMAC +- OpData01 mal formé en raison d’un échec HMAC +- +- +- Unable to process clearText in place +- Impossible d’activer le traitement de ClearText +- +- +- Expected %1 bytes of clear-text, found %2 +- %1 octets de texte en clair étaient attendus, %2 ont été trouvés +- +- +- +- OpVaultOpenWidget +- +- Read Database did not produce an instance +-%1 +- La base de données lue n’a généré aucune instance +-%1 +- +- +- +- OpVaultReader +- +- Directory .opvault must exist +- Le répertoire .opvault doit exister +- +- +- Directory .opvault must be readable +- Le répertoire .opvault doit être lisible +- +- +- Directory .opvault/default must exist +- Le répertoire .opvault/default doit exister +- +- +- Directory .opvault/default must be readable +- Le répertoire .opvault/default doit être lisible +- +- +- Unable to decode masterKey: %1 +- Impossible de décoder la clé maîtresse : %1 +- +- +- Unable to derive master key: %1 +- Impossible de calculer la clé maîtresse : %1 +- +- +- +- OpenSSHKey +- +- Invalid key file, expecting an OpenSSH key +- Une clé OpenSSH est requise, mais le fichier clé est invalide +- +- +- PEM boundary mismatch +- La limite PEM ne correspond pas +- +- +- Base64 decoding failed +- Échec du décodage Base64 +- +- +- Key file way too small. +- Le fichier clé est bien trop petit. +- +- +- Key file magic header id invalid +- L’identifiant d’en-tête magique du fichier clé est invalide +- +- +- Found zero keys +- Aucune clé n’a été trouvée +- +- +- Failed to read public key. +- Échec de lecture de la clé publique. +- +- +- Corrupted key file, reading private key failed +- Le fichier clé est corrompu. Échec de lecture de la clé privée. +- +- +- No private key payload to decrypt +- Il n’y a pas de données de clé privée à déchiffrer +- +- +- Trying to run KDF without cipher +- Tentative d’exécution de la fonction de dérivation de clé sans chiffrement +- +- +- Passphrase is required to decrypt this key +- Une phrase de passe est exigée pour déchiffrer cette clé +- +- +- Key derivation failed, key file corrupted? +- Échec de dérivation de la clé. Le fichier clé serait-il corrompu ? +- +- +- Decryption failed, wrong passphrase? +- Échec de déchiffrement. La phrase de passe est-elle erronée ? +- +- +- Unexpected EOF while reading public key +- Fin de fichier inattendue lors de la lecture de la clé publique +- +- +- Unexpected EOF while reading private key +- Fin de fichier inattendue lors de la lecture de la clé privée +- +- +- Can't write public key as it is empty +- Impossible d’écrire la clé publique, car elle est vide +- +- +- Unexpected EOF when writing public key +- Fin de fichier inattendue lors de l’écriture de la clé publique +- +- +- Can't write private key as it is empty +- Impossible d’écrire la clé privée, car elle est vide +- +- +- Unexpected EOF when writing private key +- Fin de fichier inattendue lors de l’écriture de la clé privée +- +- +- Unsupported key type: %1 +- Type de clé non pris en charge : %1 +- +- +- Unknown cipher: %1 +- Chiffrement inconnu : %1 +- +- +- Cipher IV is too short for MD5 kdf +- Le chiffrement IV est trop court pour la fonction de dérivation de clé MD5 +- +- +- Unknown KDF: %1 +- Fonction de dérivation de clé inconnue : %1 +- +- +- Unknown key type: %1 +- Type de clé inconnu : %1 +- +- +- +- PasswordEdit +- +- Passwords do not match +- Les mots de passe ne correspondent pas +- +- +- Passwords match so far +- Les mots de passe correspondent jusqu’à présent +- +- +- Toggle Password (%1) +- Activer ou désactiver le mot de passe (%1) +- +- +- Generate Password (%1) +- Générer un mot de passe (%1) +- +- +- Warning: Caps Lock enabled! +- Avertissement : Les majuscules sont verrouillées +- +- +- +- PasswordEditWidget +- +- Enter password: +- Saisir le mot de passe : +- +- +- Confirm password: +- Confirmer le mot de passe : +- +- +- Password +- Mot de passe +- +- +- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> +- <p>Un mot de passe est le moyen principal pour sécuriser votre base de données.</p><p>Les bons mots de passe sont longs et uniques. KeePassXC peut en générer un pour vous.</p> +- +- +- Passwords do not match. +- Les mots de passe ne correspondent pas. +- +- +- Password field +- Champ de mot de passe +- +- +- Repeat password field +- Champ de confirmation du mot de passe +- +- +- +- PasswordGeneratorWidget +- +- %p% +- %p% +- +- +- strength +- Password strength +- robustesse +- +- +- entropy +- entropie +- +- +- Password +- Mot de passe +- +- +- Character Types +- Types de caractères +- +- +- Numbers +- Chiffres +- +- +- Extended ASCII +- ASCII étendu +- +- +- Exclude look-alike characters +- Exclure les caractères qui se ressemblent +- +- +- Pick characters from every group +- Choisir des caractères dans chacun des groupes +- +- +- &Length: +- &Longueur : +- +- +- Passphrase +- Phrase de passe +- +- +- Wordlist: +- Liste de mots : +- +- +- Word Separator: +- Séparateur de mot : +- +- +- Close +- Fermer +- +- +- Entropy: %1 bit +- Entropie : %1 bits +- +- +- Password Quality: %1 +- Qualité du mot de passe : %1 +- +- +- Poor +- Password quality +- Plutôt mauvais +- +- +- Weak +- Password quality +- Faible +- +- +- Good +- Password quality +- Bon +- +- +- Excellent +- Password quality +- Excellent +- +- +- Switch to advanced mode +- Passer en mode avancé +- +- +- Advanced +- Avancé +- +- +- Braces +- Accolades +- +- +- Punctuation +- Ponctuation +- +- +- Quotes +- Guillemets +- +- +- Logograms +- Logogrammes +- +- +- Character set to exclude from generated password +- Jeu de caractères à exclure du mot de passe généré +- +- +- Do not include: +- Ne doit pas comporter : +- +- +- Add non-hex letters to "do not include" list +- Ajouter les lettres non hexadécimales à la liste « Ne doit pas comporter » +- +- +- Hex +- Hexadécimal +- +- +- Excluded characters: "0", "1", "l", "I", "O", "|", "ï¹’" +- Les caractères exclus sont : « 0 », « 1 », « l », « I », « O », « | », « . » +- +- +- Generated password +- Mot de passe généré +- +- +- Upper-case letters +- Majuscules +- +- +- Lower-case letters +- Minuscules +- +- +- Special characters +- Caractères spéciaux +- +- +- Math Symbols +- Symboles mathématiques +- +- +- Dashes and Slashes +- Tirets et barres obliques +- +- +- Excluded characters +- Caractères exclus +- +- +- Hex Passwords +- Mots de passe hexadécimaux +- +- +- Password length +- Longueur du mot de passe +- +- +- Word Case: +- Casse des mots : +- +- +- Regenerate password +- Générer le mot de passe de nouveau +- +- +- Copy password +- Copier le mot de passe +- +- +- lower case +- minuscules +- +- +- UPPER CASE +- MAJUSCULES +- +- +- Title Case +- Majuscule De Signification +- +- +- Generate Password +- Générer un mot de passe +- +- +- Also choose from: +- Choisir aussi parmi : +- +- +- Additional characters to use for the generated password +- Caractères supplémentaires à utiliser pour le mot de passe généré +- +- +- Additional characters +- Caractères supplémentaires +- +- +- Word Count: +- Nombre de mots : +- +- +- Esc +- Échap +- +- +- Apply Password +- Appliquer le mot de passe +- +- +- Ctrl+S +- Ctrl+S +- +- +- Regenerate password (%1) +- Générer le mot de passe de nouveau (%1) +- +- +- Special Characters +- Caractères spéciaux +- +- +- +- QApplication +- +- KeeShare +- KeeShare +- +- +- Statistics +- Statistiques +- +- +- Very weak password +- Le mot de passe est très faible +- +- +- Password entropy is %1 bits +- L’entropie du mot de passe est de %1 bits +- +- +- Weak password +- Le mot de passe est faible +- +- +- Used in %1/%2 +- Utilisé dans %1/%2 +- +- +- Password is used %1 times +- Le mot de passe est utilisé %1 fois +- +- +- Password has expired +- Le mot de passe est expiré +- +- +- Password expiry was %1 +- La date d’expiration du mot de passe était le %1 +- +- +- Password is about to expire +- Le mot de passe est sur le point d’expirer +- +- +- Password expires in %1 days +- Le mot de passe expire dans %1 jours +- +- +- Password will expire soon +- Le mot de passe expirera bientôt +- +- +- Password expires on %1 +- Le mot de passe expire le %1 +- +- +- Health Check +- Bilan de santé +- +- +- HIBP +- HIBP – Mot de passe compromis +- +- +- +- QMessageBox +- +- Overwrite +- Remplacer +- +- +- Delete +- Supprimer +- +- +- Move +- Déplacer +- +- +- Empty +- Vider +- +- +- Remove +- Supprimer +- +- +- Skip +- Ignorer +- +- +- Disable +- Désactiver +- +- +- Merge +- Fusionner +- +- +- Continue +- Poursuivre +- +- +- +- QObject +- +- Database not opened +- La base de données n’est pas ouverte +- +- +- Database hash not available +- L’empreinte numérique de la base de données n’est pas disponible +- +- +- Client public key not received +- La clé publique du client n’a pas été reçue +- +- +- Cannot decrypt message +- Impossible de déchiffrer le message +- +- +- Action cancelled or denied +- L’action a été annulée ou refusée +- +- +- KeePassXC association failed, try again +- L’association à KeePassXC a échoué, veuillez réessayer +- +- +- Encryption key is not recognized +- La clé de chiffrement n’est pas reconnue +- +- +- Incorrect action +- L’action est incorrecte +- +- +- Empty message received +- Un message vide a été reçu +- +- +- No URL provided +- Aucune URL n’a été indiquée +- +- +- No logins found +- Aucun identifiant n’a été trouvé +- +- +- Unknown error +- Erreur inconnue +- +- +- Add a new entry to a database. +- Ajouter une nouvelle entrée à la base de données. +- +- +- Path of the database. +- Chemin de la base de données. +- +- +- Key file of the database. +- Fichier clé de la base de données. +- +- +- path +- chemin +- +- +- Username for the entry. +- Nom d’utilisateur de l’entrée. +- +- +- username +- nom d’utilisateur +- +- +- URL for the entry. +- URL de l’entrée. +- +- +- URL +- URL +- +- +- Prompt for the entry's password. +- Demander le mot de passe de l’entrée. +- +- +- Generate a password for the entry. +- Générer un mot de passe pour l’entrée. +- +- +- length +- longueur +- +- +- Path of the entry to add. +- Chemin de l’entrée à ajouter. +- +- +- Path of the entry to clip. +- clip = copy to clipboard +- Chemin de l’entrée à épingler. +- +- +- Timeout in seconds before clearing the clipboard. +- Délai en secondes avant effacement du presse-papiers. +- +- +- Edit an entry. +- Modifier une entrée. +- +- +- Title for the entry. +- Titre de l’entrée. +- +- +- title +- titre +- +- +- Path of the entry to edit. +- Chemin de l’entrée à modifier. +- +- +- Estimate the entropy of a password. +- Estimer l’entropie d’un mot de passe. +- +- +- Password for which to estimate the entropy. +- Mot de passe pour lequel estimer l’entropie. +- +- +- Perform advanced analysis on the password. +- Effectuer une analyse approfondie du mot de passe. +- +- +- +- +-Available commands: +- +- +- +-Commandes proposées : +- +- +- +- Name of the command to execute. +- Nom de la commande à exécuter. +- +- +- List database entries. +- Lister les entrées de la base de données. +- +- +- Path of the group to list. Default is / +- Chemin du groupe à lister. Par défaut : / +- +- +- Find entries quickly. +- Trouver des entrées rapidement. +- +- +- Search term. +- Terme d'interrogation. +- +- +- Merge two databases. +- Fusionner deux bases de données. +- +- +- Path of the database to merge from. +- Chemin de la base de données à partir de laquelle fusionner. +- +- +- Use the same credentials for both database files. +- Utiliser les mêmes identifiants pour les deux fichiers de base de données. +- +- +- Key file of the database to merge from. +- Fichier clé de la base de données à partir de laquelle fusionner. +- +- +- Show an entry's information. +- Afficher les renseignements d’une entrée. +- +- +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- Noms des attributs à afficher. Cette option peut être indiquée plus d’une fois, avec chaque attribut apparaissant un par ligne dans l’ordre donné. Si aucun attribut n’est indiqué, un résumé des attributs par défaut est présenté. +- +- +- attribute +- attribut +- +- +- Name of the entry to show. +- Nom de l’entrée à afficher. +- +- +- NULL device +- Dispositif NUL +- +- +- error reading from device +- erreur de lecture à partir du dispositif +- +- +- malformed string +- chaîne mal formée +- +- +- missing closing quote +- Le guillemet fermant manque +- +- +- Group +- Groupe +- +- +- Title +- Titre +- +- +- Username +- Nom d’utilisateur +- +- +- Password +- Mot de passe +- +- +- Notes +- Notes +- +- +- Last Modified +- Dernière modification +- +- +- Created +- Créée +- +- +- Browser Integration +- Intégration aux navigateurs +- +- +- SSH Agent +- Agent SSH +- +- +- Generate a new random diceware passphrase. +- Créer une nouvelle phrase de passe générée avec la méthode du lancer de dés. +- +- +- Word count for the diceware passphrase. +- Nombre de mots de la phrase de passe générée avec la méthode du lancer de dés. +- +- +- Wordlist for the diceware generator. +-[Default: EFF English] +- Liste de mots pour le générateur par méthode du lancer de dés. +-[Par défaut : FFÉ anglais] +- +- +- Generate a new random password. +- Générer un nouveau mot de passe aléatoire. +- +- +- Could not create entry with path %1. +- Impossible de créer l’entrée dont le chemin est %1. +- +- +- Enter password for new entry: +- Saisir un mot de passe pour la nouvelle entrée : +- +- +- Writing the database failed %1. +- Échec d’écriture de la base de données %1. +- +- +- Successfully added entry %1. +- Ajouté avec succès l’entrée %1. +- +- +- Invalid timeout value %1. +- La valeur de délai d’attente %1 est invalide. +- +- +- Entry %1 not found. +- L’entrée %1 est introuvable. +- +- +- Entry with path %1 has no TOTP set up. +- Aucun TOTP n’est configuré pour l’entrée dont le chemin est %1. +- +- +- Clearing the clipboard in %1 second(s)... +- Effacement du presse-papiers dans %1 seconde…Effacement du presse-papiers dans %1 secondes… +- +- +- Clipboard cleared! +- Le presse-papiers a été effacé +- +- +- Silence password prompt and other secondary outputs. +- Désactiver les demandes de mot de passe et autres sorties secondaires. +- +- +- count +- CLI parameter +- nombre +- +- +- Could not find entry with path %1. +- Impossible de trouver l’entrée dont le chemin est %1. +- +- +- Not changing any field for entry %1. +- Aucun changement de champ pour l’entrée %1. +- +- +- Enter new password for entry: +- Saisir le nouveau mot de passe pour l’entrée : +- +- +- Writing the database failed: %1 +- Échec d’écriture de la base de données : %1 +- +- +- Successfully edited entry %1. +- L’entrée %1 a été modifiée avec succès. +- +- +- Length %1 +- Longueur %1 +- +- +- Entropy %1 +- Entropie %1 +- +- +- Log10 %1 +- Log10 %1 +- +- +- Multi-word extra bits %1 +- Octets supplémentaires de mots multiples %1 +- +- +- Type: Bruteforce +- Type : force brute +- +- +- Type: Dictionary +- Type : dictionnaire +- +- +- Type: Dict+Leet +- Type : dictionnaire + leet +- +- +- Type: User Words +- Type : mots utilisateur +- +- +- Type: User+Leet +- Type : utilisateur + Leet +- +- +- Type: Repeated +- Type : répété +- +- +- Type: Sequence +- Type : séquence +- +- +- Type: Spatial +- Type : spatial +- +- +- Type: Date +- Type : date +- +- +- Type: Bruteforce(Rep) +- Type : force brute (rép.) +- +- +- Type: Dictionary(Rep) +- Type : dictionnaire (rép.) +- +- +- Type: Dict+Leet(Rep) +- Type : dictionnaire + Leet (rép.) +- +- +- Type: User Words(Rep) +- Type : mots utilisateur (rép.) +- +- +- Type: User+Leet(Rep) +- Type : utilisateur + leet (rép.) +- +- +- Type: Repeated(Rep) +- Type : répété (rép.) +- +- +- Type: Sequence(Rep) +- Type : séquence (rép.) +- +- +- Type: Spatial(Rep) +- Type : spatial (rép.) +- +- +- Type: Date(Rep) +- Type : date (rép.) +- +- +- Type: Unknown%1 +- Type : inconnu %1 +- +- +- Entropy %1 (%2) +- Entropie %1 (%2) +- +- +- *** Password length (%1) != sum of length of parts (%2) *** +- *** Longueur du mot de passe (%1) != somme de la longueur des parties (%2) *** +- +- +- Failed to load key file %1: %2 +- Échec de chargement du fichier clé %1 : %2 +- +- +- Length of the generated password +- Longueur du mot de passe généré +- +- +- Use lowercase characters +- Utiliser des minuscules +- +- +- Use uppercase characters +- Utiliser des majuscules +- +- +- Use special characters +- Utiliser des caractères spéciaux +- +- +- Use extended ASCII +- Utiliser l’ASCII étendu +- +- +- Exclude character set +- Exclure le jeu de caractères +- +- +- chars +- caractères +- +- +- Exclude similar looking characters +- Exclure les caractères qui se ressemblent +- +- +- Include characters from every selected group +- Choisir des caractères dans chacun des groupes sélectionnés +- +- +- Recursively list the elements of the group. +- Lister récursivement les éléments du groupe. +- +- +- Cannot find group %1. +- Impossible de trouver le groupe %1. +- +- +- Error reading merge file: +-%1 +- Erreur de lecture du fichier fusionné : +-%1 +- +- +- Unable to save database to file : %1 +- Impossible d’enregistrer la base de données dans le fichier : %1 +- +- +- Unable to save database to file: %1 +- Impossible d’enregistrer la base de données dans le fichier : %1 +- +- +- Successfully recycled entry %1. +- L’entrée %1 a été recyclée avec succès. +- +- +- Successfully deleted entry %1. +- Supprimé l’entrée %1 avec succès. +- +- +- Show the entry's current TOTP. +- Afficher le TOTP actuel pour l’entrée. +- +- +- ERROR: unknown attribute %1. +- ERREUR : L’attribut %1 est inconnu. +- +- +- No program defined for clipboard manipulation +- Aucun programme n’est défini pour le traitement du presse-papiers +- +- +- file empty +- fichier vide +- +- +- %1: (row, col) %2,%3 +- %1 : (ligne, colonne) %2, %3 +- +- +- AES-KDF (KDBX 4) +- AES-KDF (KDBX 4) +- +- +- AES-KDF (KDBX 3.1) +- AES-KDF (KDBX 3.1) +- +- +- Invalid Settings +- TOTP +- Des paramètres sont invalides +- +- +- Invalid Key +- TOTP +- La clé est invalide +- +- +- Message encryption failed. +- Échec de chiffrement du message. +- +- +- No groups found +- Aucun groupe n’a été trouvé +- +- +- Create a new database. +- Créer un nouvelle base de données. +- +- +- File %1 already exists. +- Le fichier %1 existe déjà. +- +- +- Loading the key file failed +- Échec du chargement du fichier clé +- +- +- No key is set. Aborting database creation. +- Aucune clé n’est définie. Abandon de la création de la base de données. +- +- +- Failed to save the database: %1. +- Échec d’enregistrement de la base de données : %1. +- +- +- Successfully created new database. +- La nouvelle base de données a été créée avec succès. +- +- +- Creating KeyFile %1 failed: %2 +- Échec de création du fichier clé %1 : %2 +- +- +- Loading KeyFile %1 failed: %2 +- Échec de chargement du fichier clé %1 : %2 +- +- +- Path of the entry to remove. +- Chemin de l’entrée à supprimer. +- +- +- Existing single-instance lock file is invalid. Launching new instance. +- Le fichier de verrouillage de l’instance unique existant est invalide. Lancement d’une nouvelle instance. +- +- +- The lock file could not be created. Single-instance mode disabled. +- Impossible de créer le fichier de verrouillage. Le mode d’instance unique est désactivé. +- +- +- KeePassXC - cross-platform password manager +- KeePassXC – Gestionnaire de mots de passe multiplateforme +- +- +- filenames of the password databases to open (*.kdbx) +- noms de fichiers des bases de données de mots de passe à ouvrir (*.kdbx) +- +- +- path to a custom config file +- chemin vers un fichier de configuration personnalisée +- +- +- key file of the database +- fichier clé de la base de données +- +- +- read password of the database from stdin +- lire le mot de passe de la base de données sur l’entrée standard +- +- +- Another instance of KeePassXC is already running. +- Une autre instance de KeePassXC est déjà en cours d’exécution. +- +- +- Fatal error while testing the cryptographic functions. +- Erreur fatale lors de l’évaluation des fonctions cryptographiques. +- +- +- KeePassXC - Error +- KeePassXC – Erreur +- +- +- Database password: +- Mot de passe de la base de données : +- +- +- Cannot create new group +- Impossible de créer un nouveau groupe +- +- +- Deactivate password key for the database. +- Désactiver la clé du mot de passe pour la base de données. +- +- +- Displays debugging information. +- Affiche les renseignements de débogage. +- +- +- Deactivate password key for the database to merge from. +- Désactiver la clé du mot de passe pour la base de données à partir de laquelle fusionner. +- +- +- Version %1 +- Version %1 +- +- +- Build Type: %1 +- Type de version : %1 +- +- +- Revision: %1 +- Révision : %1 +- +- +- Distribution: %1 +- Distribution : %1 +- +- +- Debugging mode is disabled. +- Le mode débogage est désactivé. +- +- +- Debugging mode is enabled. +- Le mode débogage est activé. +- +- +- Operating system: %1 +-CPU architecture: %2 +-Kernel: %3 %4 +- Système d’exploitation : %1 +-Architecture de l’unité centrale : %2 +-Noyau : %3 %4 +- +- +- Auto-Type +- Saisie automatique +- +- +- KeeShare (signed and unsigned sharing) +- KeeShare (partage signé et non signé) +- +- +- KeeShare (only signed sharing) +- KeeShare (partage signé seulement) +- +- +- KeeShare (only unsigned sharing) +- KeeShare (partage non signé seulement) +- +- +- YubiKey +- YubiKey +- +- +- TouchID +- TouchID +- +- +- None +- Aucun +- +- +- Enabled extensions: +- Extensions activées : +- +- +- Cryptographic libraries: +- Bibliothèques cryptographiques : +- +- +- Cannot generate a password and prompt at the same time! +- Il est impossible de générer un mot de passe et de le demander en même temps +- +- +- Adds a new group to a database. +- Ajoute un nouveau groupe à la base de données. +- +- +- Path of the group to add. +- Chemin du groupe à ajouter. +- +- +- Group %1 already exists! +- Le groupe %1 existe déjà +- +- +- Group %1 not found. +- Le groupe %1 est introuvable. +- +- +- Successfully added group %1. +- Le groupe %1 a été ajouté avec succès. +- +- +- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. +- Vérifier si un mot de passe a été divulgué publiquement. NOM_DU_FICHIER doit être le chemin d’un fichier qui liste les empreintes SHA-1 de mots de passe divulgués au format HIBP, tel que proposé sur https://haveibeenpwned.com/Passwords (site en anglais). +- +- +- FILENAME +- NOM_DU_FICHIER +- +- +- Analyze passwords for weaknesses and problems. +- Analyser la robustesse et les problèmes des mots de passe. +- +- +- Failed to open HIBP file %1: %2 +- Échec de l’ouverture du fichier HIBP %1 : %2 +- +- +- Evaluating database entries against HIBP file, this will take a while... +- Comparaison des entrées de la base de données avec le fichier HIBP, cette opération prend du temps… +- +- +- Close the currently opened database. +- Fermer la base de données ouverte actuellement. +- +- +- Display this help. +- Afficher cette aide. +- +- +- slot +- emplacement +- +- +- Invalid word count %1 +- Le nombre de mots %1 est invalide +- +- +- The word list is too small (< 1000 items) +- La liste de mots est trop courte (moins de 1 000 articles) +- +- +- Exit interactive mode. +- Quitter le mode interactif. +- +- +- Exports the content of a database to standard output in the specified format. +- Exporte au format indiqué le contenu de la base de données vers la sortie standard. +- +- +- Unable to export database to XML: %1 +- Impossible d’exporter la base de données en XML : %1 +- +- +- Unsupported format %1 +- Le format %1 n’est pas pris en charge +- +- +- Use numbers +- Utiliser des chiffres +- +- +- Invalid password length %1 +- La longueur du mot de passe %1 est invalide +- +- +- Display command help. +- Afficher l’aide de la commande. +- +- +- Available commands: +- Commandes proposées : +- +- +- Import the contents of an XML database. +- Importer le contenu d’une base de données XML. +- +- +- Path of the XML database export. +- Chemin vers l’exportation de la base de données au format XML. +- +- +- Path of the new database. +- Chemin de la nouvelle base de données. +- +- +- Successfully imported database. +- La base de données a été importée avec succès. +- +- +- Unknown command %1 +- La commande %1 est inconnue +- +- +- Flattens the output to single lines. +- Réduit la sortie en lignes simples. +- +- +- Only print the changes detected by the merge operation. +- N’imprimer que les changements détectés par l’opération de fusion. +- +- +- Yubikey slot for the second database. +- Emplacement Yubikey pour la seconde base de données. +- +- +- Successfully merged %1 into %2. +- %1 a été fusionné dans %2 avec succès. +- +- +- Database was not modified by merge operation. +- La base de données n’a pas été modifiée par l’opération de fusion. +- +- +- Moves an entry to a new group. +- Déplace une entrée vers un nouveau groupe. +- +- +- Path of the entry to move. +- Chemin de l’entrée à déplacer. +- +- +- Path of the destination group. +- Chemin du groupe de destination. +- +- +- Could not find group with path %1. +- Impossible de trouver un groupe avec le chemin %1. +- +- +- Entry is already in group %1. +- L’entrée est déjà dans le groupe %1. +- +- +- Successfully moved entry %1 to group %2. +- L’entrée %1 a été déplacée vers le groupe %2 avec succès. +- +- +- Open a database. +- Ouvre une base de données. +- +- +- Path of the group to remove. +- Chemin du groupe à supprimer. +- +- +- Cannot remove root group from database. +- Impossible de supprimer le groupe racine de la base de données. +- +- +- Successfully recycled group %1. +- Le groupe %1 a été recyclé avec succès. +- +- +- Successfully deleted group %1. +- Le groupe %1 a été supprimé avec succès. +- +- +- Failed to open database file %1: not found +- Échec d’ouverture du fichier de base de données %1 : il est introuvable +- +- +- Failed to open database file %1: not a plain file +- Échec d’ouverture du fichier de base de données %1 : ce n’est pas un fichier brut +- +- +- Failed to open database file %1: not readable +- Échec d’ouverture du fichier de base de données %1 : il est illisible +- +- +- Enter password to unlock %1: +- Saisir le mot de passe pour déverrouiller %1 : +- +- +- Invalid YubiKey slot %1 +- L’emplacement YubiKey %1 est invalide +- +- +- Enter password to encrypt database (optional): +- Saisissez un mot de passe pour chiffrer la base de données (facultatif) : +- +- +- HIBP file, line %1: parse error +- Fichier HIBP, ligne %1 : erreur d’analyse +- +- +- Secret Service Integration +- Intégration à « Secret Service » +- +- +- User name +- Nom d’utilisateur +- +- +- Password for '%1' has been leaked %2 time(s)! +- Le mot de passe pour « %1 » a été divulgué %2 foisLe mot de passe pour « %1 » a été divulgué %2 fois +- +- +- Invalid password generator after applying all options +- Le générateur de mots de passe est invalide après application de toutes les options +- +- +- Show the protected attributes in clear text. +- Afficher en clair les attributs protégés. +- +- +- Browser Plugin Failure +- Échec de l’extension pour navigateurs +- +- +- Could not save the native messaging script file for %1. +- Impossible d’enregistrer le fichier script de messagerie native pour %1. +- +- +- Copy the given attribute to the clipboard. Defaults to "password" if not specified. +- Copier dans le presse-papiers l’attribut donné. Si rien n’est précisé, « mot de passe » est utilisé par défaut. +- +- +- Copy the current TOTP to the clipboard (equivalent to "-a totp"). +- Copier le TOTP actuel dans le presse-papiers (équivalent à « -a totp »). +- +- +- Copy an entry's attribute to the clipboard. +- Copier l’attribut d’une entrée dans le presse-papiers. +- +- +- ERROR: Please specify one of --attribute or --totp, not both. +- ERREUR : Veuillez indiquer -attribut ou -totp, mais pas les deux. +- +- +- ERROR: attribute %1 is ambiguous, it matches %2. +- ERREUR : L’attribut %1 est ambigu, il correspond à %2. +- +- +- Attribute "%1" not found. +- L’attribut « %1 » est introuvable. +- +- +- Entry's "%1" attribute copied to the clipboard! +- L’attribut de l’entrée « %1 » a été copié dans le presse-papiers +- +- +- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). +- Emplacement et numéro de série facultatif Yubikey utilisés pour accéder à la base de données (p. ex. : 1:7370001). +- +- +- slot[:serial] +- emplacement[:numéro de série] +- +- +- Target decryption time in MS for the database. +- Durée de déchiffrement cible en millisecondes pour la base de données. +- +- +- time +- durée +- +- +- Set the key file for the database. +- Définir le fichier clé de la base de données. +- +- +- Set a password for the database. +- Définir un mot de passe pour la base de données. +- +- +- Invalid decryption time %1. +- La durée de déchiffrement est invalide : %1. +- +- +- Target decryption time must be between %1 and %2. +- La durée de déchiffrement cible doit être entre %1 et %2. +- +- +- Failed to set database password. +- Échec de définition du mot de passe de la base de données. +- +- +- Benchmarking key derivation function for %1ms delay. +- Analyse des performances de la fonction de dérivation de clé pour un retard de %1 ms. +- +- +- Setting %1 rounds for key derivation function. +- %1 cycles sont définis pour la fonction de dérivation de clé. +- +- +- error while setting database key derivation settings. +- erreur de paramétrage de la dérivation de clé de la base de données. +- +- +- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. +- Format à utiliser lors de l’exportation. Les choix proposés sont « xml » ou « csv ». La valeur par défaut est « xml ». +- +- +- Unable to import XML database: %1 +- Impossible d’importer la base de données XML : %1 +- +- +- Show a database's information. +- Afficher les renseignements d’une base de données. +- +- +- UUID: +- UUID : +- +- +- Name: +- Nom : +- +- +- Description: +- Description : +- +- +- Cipher: +- Chiffrement : +- +- +- KDF: +- Fonction de dérivation de clé : +- +- +- Recycle bin is enabled. +- La corbeille est activée. +- +- +- Recycle bin is not enabled. +- La corbeille est désactivée. +- +- +- Invalid command %1. +- La commande %1 est invalide. +- +- +- Invalid YubiKey serial %1 +- Le numéro de série Yubikey %1 est invalide +- +- +- Please touch the button on your YubiKey to continue… +- Veuillez touchez le bouton de votre YubiKey afin de poursuivre… +- +- +- Do you want to create a database with an empty password? [y/N]: +- Voulez-vous créer une base de données avec un mot de passe vide ? [o/N] : +- +- +- Repeat password: +- Confirmer le mot de passe : +- +- +- Error: Passwords do not match. +- Erreur : Les mots de passe ne correspondent pas. +- +- +- All clipping programs failed. Tried %1 +- +- Échec de tous les programmes de découpage. %1 essayés +- +- +- +- AES (%1 rounds) +- AES (%1 cycles) +- +- +- AES 256-bit +- AES 256 bits +- +- +- Twofish 256-bit +- Twofish 256 bits +- +- +- ChaCha20 256-bit +- ChaCha20 : 256 bits {20 256 à ?} +- +- +- Benchmark %1 delay +- Analyse des performance : %1 de retard +- +- +- %1 ms +- milliseconds +- %1 ms%1 ms +- +- +- %1 s +- seconds +- %1 s%1 s +- +- +- path to a custom local config file +- chemin vers un fichier local de configuration personnalisée +- +- +- WARNING: You are using an old key file format which KeePassXC may +-stop supporting in the future. +- +-Please consider generating a new key file. +- AVERTISSEMENT : vous utilisez un ancien format de fichier clé que KeePassXC pourrait ne plus prendre en charge à l’avenir. +- +-Veuillez envisager de générer un nouveau fichier clé. +- +- +- Argon2%1 (%2 rounds, %3 KB) +- Argon2%1 (%2 cycles, %3 Ko) +- +- +- Argon2d (KDBX 4 – recommended) +- Argon2d (KDBX 4 – recommandé) +- +- +- Argon2id (KDBX 4) +- Argon2id (KDBX 4) +- +- +- TOTP +- TOTP +- +- +- Icon +- Icône +- +- +- Unsupported key file version: %1 +- Version de fichier clé non prise en charge : %1 +- +- +- Checksum mismatch! Key file may be corrupt. +- La somme de contrôle ne correspond pas. Le fichier clé pourrait être corrompu. +- +- +- Unexpected key file data! Key file may be corrupt. +- Les données du fichier clé ne sont pas celles attendues. Le fichier clé pourrait être corrompu. +- +- +- +- QtIOCompressor +- +- Internal zlib error when compressing: +- Erreur interne zlib lors de la compression : +- +- +- Error writing to underlying device: +- Erreur d’écriture sur le dispositif sous-jacent : +- +- +- Error opening underlying device: +- Erreur d’ouverture du dispositif sous-jacent : +- +- +- Error reading data from underlying device: +- Erreur de lecture de données à partir du dispositif sous-jacent : +- +- +- Internal zlib error when decompressing: +- Erreur interne zlib lors de la décompression : +- +- +- +- QtIOCompressor::open +- +- The gzip format not supported in this version of zlib. +- Le format gzip n’est pas pris en charge dans cette version de zlib. +- +- +- Internal zlib error: +- Erreur interne zlib : +- +- +- +- ReportsWidgetHealthcheck +- +- Also show entries that have been excluded from reports +- Afficher aussi les entrées qui ont été exclues des rapports +- +- +- Hover over reason to show additional details. Double-click entries to edit. +- Survolez la raison pour afficher des détails supplémentaires. Double-cliquez sur les entrées pour les modifier. +- +- +- Bad +- Password quality +- Mauvais +- +- +- Bad — password must be changed +- Mauvais – le mot de passe doit être changé +- +- +- Poor +- Password quality +- Plutôt mauvais +- +- +- Poor — password should be changed +- Plutôt mauvais – le mot de passe doit être changé +- +- +- Weak +- Password quality +- Faible +- +- +- Weak — consider changing the password +- Faible – envisagez de changer le mot de passe +- +- +- (Excluded) +- (exclue) +- +- +- This entry is being excluded from reports +- Cette entrée est exclue des rapports +- +- +- Please wait, health data is being calculated... +- Veuillez patienter, le bilan de santé est en cours de calcul… +- +- +- Congratulations, everything is healthy! +- Félicitations, tout est en ordre +- +- +- Title +- Titre +- +- +- Path +- Chemin +- +- +- Score +- Résultats +- +- +- Reason +- Raison +- +- +- Edit Entry... +- Modifier l’entrée… +- +- +- Exclude from reports +- Exclure des rapports +- +- +- +- ReportsWidgetHibp +- +- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. +- ATTENTION : Ce rapport requiert l’envoi de renseignements au service en ligne « Have I Been Pwned » (https://haveibeenpwned.com). Si vous poursuivez, les mots de passe de votre base de données seront hachés de façon cryptographique et les cinq premiers caractères de ces hachages seront envoyés de façon sécurisée à ce service. La sécurité de votre base de données est assurée et votre base de données ne peut pas être reconstituée à partir de ces renseignements. Toutefois, le nombre de mots de passe que vous envoyez et votre adresse IP seront dévoilés à ce service. +- +- +- Perform Online Analysis +- Effectuer une analyse en ligne +- +- +- Also show entries that have been excluded from reports +- Afficher aussi les entrées qui ont été exclues des rapports +- +- +- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. +- Cette version de KeePassXC ne dispose pas de fonctions réseau. Il est nécessaire de se connecter au réseau afin de vérifier vos mots de passe auprès du service « Have I Been Pwned ». +- +- +- Congratulations, no exposed passwords! +- Félicitations, aucun mot de passe n’a été divulgué +- +- +- Title +- Titre +- +- +- Path +- Chemin +- +- +- Password exposed… +- Mots de passe divulgués… +- +- +- (Excluded) +- (exclue) +- +- +- This entry is being excluded from reports +- Cette entrée est exclue des rapports +- +- +- once +- une fois +- +- +- up to 10 times +- jusqu’à 10 fois +- +- +- up to 100 times +- jusqu’à 100 fois +- +- +- up to 1000 times +- jusqu’à 1 000 fois +- +- +- up to 10,000 times +- jusqu’à 10 000 fois +- +- +- up to 100,000 times +- jusqu’à 100 000 fois +- +- +- up to a million times +- jusqu’à un million de fois +- +- +- millions of times +- millions de fois +- +- +- Edit Entry... +- Modifier l’entrée… +- +- +- Exclude from reports +- Exclure des rapports +- +- +- +- ReportsWidgetStatistics +- +- Hover over lines with error icons for further information. +- Survolez les lignes affichant une icône d’erreur pour plus de précisons. +- +- +- Name +- Nom +- +- +- Value +- Valeur +- +- +- Please wait, database statistics are being calculated... +- Veuillez patienter pendant que les statistiques de base de données sont calculées… +- +- +- Database name +- Nom de la base de données +- +- +- Description +- Description +- +- +- Location +- Emplacement +- +- +- Last saved +- Dernier enregistrement +- +- +- Unsaved changes +- Changements non enregistrés +- +- +- yes +- oui +- +- +- no +- non +- +- +- The database was modified, but the changes have not yet been saved to disk. +- La base de données a été modifiée, mais les changements n’ont pas encore été enregistrés sur le disque. +- +- +- Number of groups +- Nombre de groupes +- +- +- Number of entries +- Nombre d’entrées +- +- +- Number of expired entries +- Nombre d’entrées expirées +- +- +- The database contains entries that have expired. +- La base de données comprend des données expirées. +- +- +- Unique passwords +- Mots de passes uniques +- +- +- Non-unique passwords +- Mots de passe non uniques +- +- +- More than 10% of passwords are reused. Use unique passwords when possible. +- Plus de 10 % des mots de passe sont réutilisés. Si possible, utilisez des mots de passe uniques. +- +- +- Maximum password reuse +- Maximum de réutilisations des mots de passe +- +- +- Some passwords are used more than three times. Use unique passwords when possible. +- Certains mots de passe sont utilisés plus de trois fois. Si possible, utilisez des mots de passe uniques. +- +- +- Number of short passwords +- Nombre de mots de passe courts +- +- +- Recommended minimum password length is at least 8 characters. +- Il est recommandé qu’un mot de passe comporte au moins huit caractères +- +- +- Number of weak passwords +- Nombre de mots de passe faibles +- +- +- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. +- Il est recommandé d’utiliser des mots de passe longs et aléatoires dont le niveau de robustesse est « bon » ou « excellent ». +- +- +- Entries excluded from reports +- Entrées exclues des rapports +- +- +- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. +- Exclure des entrées des rapports, car elles ont par exemple un mot de passe plutôt mauvais, n’est pas un problème en soi, mais vous devriez les surveiller. +- +- +- Average password length +- Longueur moyenne des mots de passe +- +- +- %1 characters +- %1 caractères +- +- +- Average password length is less than ten characters. Longer passwords provide more security. +- La longueur moyenne des mots de passe est inférieure à dix caractères. Des mots de passe plus longs offrent une meilleure sécurité. +- +- +- +- SSHAgent +- +- Agent connection failed. +- Échec de connexion à l’agent. +- +- +- Agent protocol error. +- Erreur de protocole de l’agent +- +- +- No agent running, cannot add identity. +- Aucun agent n’est en cours d’exécution, il est impossible d’ajouter l’identité. +- +- +- No agent running, cannot remove identity. +- Aucun agent n’est en cours d’exécution, il est impossible de supprimer l’identité. +- +- +- Agent refused this identity. Possible reasons include: +- L’agent a refusé cette identité. Raisons possibles, entre autres : +- +- +- The key has already been added. +- La clé a déjà été ajoutée. +- +- +- Restricted lifetime is not supported by the agent (check options). +- L’agent ne prend pas en charge une durée de vie limitée (vérifier les options). +- +- +- A confirmation request is not supported by the agent (check options). +- L’agent ne prend pas en charge une demande de confirmation (vérifier les options). +- +- +- Key identity ownership conflict. Refusing to add. +- Conflit de propriété de l’identité de clé. L’ajout a été refusé. +- +- +- No agent running, cannot list identities. +- Aucun agent n’est en cours d’exécution, il est impossible de lister les identités. +- +- +- +- SearchHelpWidget +- +- Search Help +- Chercher dans l’aide +- +- +- Search terms are as follows: [modifiers][field:]["]term["] +- Les termes d’interrogation sont les suivants : [modificateurs][champ:]["]terme["] +- +- +- Every search term must match (ie, logical AND) +- Tous les termes d’interrogation doivent correspondre (c.-à-d. : ET logique) +- +- +- Modifiers +- Modificateurs +- +- +- exclude term from results +- exclure le terme des résultats +- +- +- match term exactly +- correspondance exacte +- +- +- use regex in term +- utiliser les expressions rationnelles dans le terme +- +- +- Fields +- Champs +- +- +- Term Wildcards +- Caractère de remplacement des termes +- +- +- match anything +- correspond à n’importe quel caractère +- +- +- match one +- correspond à un caractère +- +- +- logical OR +- OU logique +- +- +- Examples +- Exemples +- +- +- +- SearchWidget +- +- Search +- Chercher +- +- +- Limit search to selected group +- Limiter la recherche au groupe sélectionné +- +- +- Search Help +- Chercher dans l’aide +- +- +- Search (%1)... +- Search placeholder text, %1 is the keyboard shortcut +- Recherche (%1)… +- +- +- Case sensitive +- Sensible à la casse +- +- +- +- SettingsWidgetFdoSecrets +- +- Options +- Options +- +- +- Enable KeepassXC Freedesktop.org Secret Service integration +- Activer l’intégration de KeePassXC à « Secret Service » de Freedesktop.org +- +- +- General +- Général +- +- +- Show notification when credentials are requested +- Afficher une notification quand les identifiants sont demandés +- +- +- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> +- <html><head/><body><p>Si la corbeille est activée pour la base de données, les entrées seront déplacées dans la corbeille directement. Sinon, elles seront supprimées sans confirmation.</p><p>Une confirmation sera toujours demandée si l’entrée est référencée par d’autres.</p></body></html> +- +- +- Exposed database groups: +- Groupes de base de données visibles : +- +- +- Authorization +- Autorisation +- +- +- These applications are currently connected: +- Ces applications sont connectées actuellement : +- +- +- Don't confirm when entries are deleted by clients +- Ne pas confirmer la suppression d’entrées par les clients +- +- +- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. +- <b>Erreur :</b> Échec de connexion à DBus. Veuillez vérifier votre configuration DBus. +- +- +- <b>Warning:</b> +- </b>Avertissement :</b> +- +- +- Save current changes to activate the plugin and enable editing of this section. +- Enregistrer les changements actuels pour activer le greffon et permettre la modification de cette section. +- +- +- +- SettingsWidgetKeeShare +- +- Active +- Actif +- +- +- Allow export +- Permettre l’exportation +- +- +- Allow import +- Permettre l’importation +- +- +- Own certificate +- Propre certificat +- +- +- Fingerprint: +- Empreinte : +- +- +- Certificate: +- Certificat : +- +- +- Signer +- Signataire +- +- +- Key: +- Clé : +- +- +- Generate +- Générer +- +- +- Import +- Importer +- +- +- Export +- Exporter +- +- +- Imported certificates +- Certificats importés +- +- +- Trust +- Faire confiance +- +- +- Ask +- Demander +- +- +- Untrust +- Ne pas faire confiance +- +- +- Remove +- Supprimer +- +- +- Path +- Chemin +- +- +- Status +- État +- +- +- Fingerprint +- Empreinte +- +- +- Certificate +- Certificat +- +- +- Trusted +- Fiable +- +- +- Untrusted +- Non fiable +- +- +- Unknown +- Inconnu +- +- +- key.share +- Filetype for KeeShare key +- key.share +- +- +- KeeShare key file +- fichier clé KeeShare +- +- +- All files +- Tous les fichiers +- +- +- Select path +- Sélectionner le chemin +- +- +- Exporting changed certificate +- Exportation des certificats changés +- +- +- The exported certificate is not the same as the one in use. Do you want to export the current certificate? +- Le certificat exporté est différent de celui en cours d’utilisation. Voulez-vous exporter le certificat actuel ? +- +- +- Signer: +- Signataire : +- +- +- Allow KeeShare imports +- Permettre les importations KeeShare +- +- +- Allow KeeShare exports +- Permettre les exportations KeeShare +- +- +- Only show warnings and errors +- N’afficher que les avertissements et erreurs +- +- +- Key +- Clé +- +- +- Signer name field +- Champ de nom du signataire +- +- +- Generate new certificate +- Générer un nouveau certificat +- +- +- Import existing certificate +- Importer un certificat existant +- +- +- Export own certificate +- Exporter son propre certificat +- +- +- Known shares +- Partages connus +- +- +- Trust selected certificate +- Faire confiance au certificat sélectionné +- +- +- Ask whether to trust the selected certificate every time +- Toujours demander le niveau de confiance envers le certificat sélectionné +- +- +- Untrust selected certificate +- Ne pas faire confiance au certificat sélectionné +- +- +- Remove selected certificate +- Supprimer le certificat sélectionné +- +- +- +- ShareExport +- +- Overwriting signed share container is not supported - export prevented +- Remplacer le conteneur de partage signé s’il n’est pas pris en charge - empêche l’exportation +- +- +- Could not write export container (%1) +- Impossible d’écrire dans le conteneur d’exportation (%1) +- +- +- Could not embed signature: Could not open file to write (%1) +- Impossible d’intégrer la signature :impossible d’ouvrir le fichier en écriture (%1) +- +- +- Could not embed signature: Could not write file (%1) +- Impossible d’intégrer la signature : impossible d’écrire le fichier (%1) +- +- +- Could not embed database: Could not open file to write (%1) +- Impossible d’intégrer la base de données : impossible d’ouvrir le fichier en écriture (%1) +- +- +- Could not embed database: Could not write file (%1) +- Impossible d’intégrer la base de données : impossible d’écrire le fichier (%1) +- +- +- Overwriting unsigned share container is not supported - export prevented +- Remplacer le conteneur de partage non signé s’il n’est pas pris en charge - empêche l’exportation +- +- +- Could not write export container +- Impossible d’écrire dans le conteneur d’exportation +- +- +- Unexpected export error occurred +- Une erreur d’exportation inattendue est survenue +- +- +- +- ShareImport +- +- Import from container without signature +- Importer d’un conteneur sans signature +- +- +- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? +- Nous ne pouvons vérifier la source du conteneur partagé, car il n’est pas signé. Voulez-vous vraiment importer de %1 ? +- +- +- Import from container with certificate +- Importer d’un conteneur avec certificat +- +- +- Do you want to trust %1 with the fingerprint of %2 from %3? +- Voulez-vous faire confiance à %1 avec l’empreinte %2 de %3 ? {1 ?} {2 ?} +- +- +- Not this time +- Pas cette fois +- +- +- Never +- Jamais +- +- +- Always +- Toujours +- +- +- Just this time +- Cette fois seulement +- +- +- Signed share container are not supported - import prevented +- Conteneur de partage signé non pris en charge - empêche l’importation +- +- +- File is not readable +- Le fichier n’est illisible +- +- +- Invalid sharing container +- Le conteneur de partage est invalide +- +- +- Untrusted import prevented +- Une importation non fiable a été bloquée +- +- +- Successful signed import +- L’importation a été signée avec succès +- +- +- Unsigned share container are not supported - import prevented +- Conteneur de partage non signé non pris en charge - empêche l’importation +- +- +- Successful unsigned import +- La signature a été ôtée de l’importation avec succès +- +- +- File does not exist +- Le fichier n’existe pas +- +- +- Unknown share container type +- Le type de conteneur de partage est inconnu +- +- +- +- ShareObserver +- +- Import from %1 failed (%2) +- Échec d’importation de %1 (%2) +- +- +- Import from %1 successful (%2) +- Importé de %1 avec succès (%2) +- +- +- Imported from %1 +- Importé de %1 +- +- +- Export to %1 failed (%2) +- Échec d’exportation vers %1 (%2) +- +- +- Export to %1 successful (%2) +- Exporté vers %1 avec succès (%2) +- +- +- Export to %1 +- Exporter vers %1 +- +- +- Multiple import source path to %1 in %2 +- Chemin source d’importation multiple de %1 dans %2 +- +- +- Conflicting export target path %1 in %2 +- Conflit du chemin cible d’exportation %1 dans %2 +- +- +- +- TotpDialog +- +- Timed Password +- Mot de passe temporisé +- +- +- 000000 +- 000000 +- +- +- Copy +- Copier +- +- +- Expires in <b>%n</b> second(s) +- Expire dans <b>%n</b> secondeExpire dans <b>%n</b> secondes +- +- +- +- TotpExportSettingsDialog +- +- Copy +- Copier +- +- +- NOTE: These TOTP settings are custom and may not work with other authenticators. +- TOTP QR code dialog warning +- NOTE : Ces paramètres TOTP sont personnalisés et pourraient ne pas fonctionner avec d’autres authentificateurs. +- +- +- There was an error creating the QR code. +- Une erreur est survenue lors de la création du QR code. +- +- +- Closing in %1 seconds. +- Fermeture dans %1 secondes. +- +- +- +- TotpSetupDialog +- +- Setup TOTP +- Configurer TOTP +- +- +- Default RFC 6238 token settings +- Paramètres par défaut des jetons RFC 6238 +- +- +- Steam token settings +- Paramètres des jetons Steam +- +- +- Use custom settings +- Utiliser des paramètres personnalisés +- +- +- Custom Settings +- Paramètres personnalisés +- +- +- Time step: +- Intervalle : +- +- +- sec +- Seconds +- s +- +- +- Code size: +- Taille du code : +- +- +- Secret Key: +- Clé secrète : +- +- +- Secret key must be in Base32 format +- La clé secrète doit être au format Base32 +- +- +- Secret key field +- Champ de la clé secrète +- +- +- Algorithm: +- Algorithme : +- +- +- Time step field +- Champ de l’intervalle +- +- +- digits +- chiffres +- +- +- Invalid TOTP Secret +- Le secret TOTP est invalide +- +- +- You have entered an invalid secret key. The key must be in Base32 format. +-Example: JBSWY3DPEHPK3PXP +- Vous avez saisi une clé secrète invalide. La clé doit être au format Base32. +-Exemple : JBSWY3DPEHPK3PXP +- +- +- Confirm Remove TOTP Settings +- Confirmer la suppression des paramètres TOTP +- +- +- Are you sure you want to delete TOTP settings for this entry? +- Voulez-vous vraiment supprimer les paramètres TOTP pour cette entrée ? +- +- +- +- URLEdit +- +- Invalid URL +- L’URL est invalide +- +- +- +- UpdateCheckDialog +- +- Checking for updates +- Vérification de la présence de mises à jour +- +- +- Checking for updates... +- Vérification de la présence de mises à jour… +- +- +- Close +- Fermer +- +- +- Update Error! +- Erreur de mise à jour +- +- +- An error occurred in retrieving update information. +- Une erreur est survenue lors de la récupération des renseignements de mise à jour. +- +- +- Please try again later. +- Veuillez réessayer plus tard. +- +- +- Software Update +- Mise à jour du logiciel +- +- +- A new version of KeePassXC is available! +- Une nouvelle version de KeePassXC est proposée +- +- +- KeePassXC %1 is now available — you have %2. +- KeePassXC %1 est maintenant proposée – vous avez %2. +- +- +- Download it at keepassxc.org +- Téléchargez-la sur keepassxc.org +- +- +- You're up-to-date! +- Votre version est à jour +- +- +- KeePassXC %1 is currently the newest version available +- KeePassXC %1 est actuellement la version la plus récente proposée. +- +- +- +- WelcomeWidget +- +- Start storing your passwords securely in a KeePassXC database +- Commencez à enregistrer vos mots de passe en toute sécurité dans une base de données KeePassXC +- +- +- Create new database +- Créer une nouvelle base de données +- +- +- Open existing database +- Ouvrir une base de données existante +- +- +- Import from KeePass 1 +- Importer de KeePass 1 +- +- +- Import from CSV +- Importer d’un fichier CSV +- +- +- Recent databases +- Bases de données récentes +- +- +- Welcome to KeePassXC %1 +- Bienvenue sur KeePassXC %1 +- +- +- Import from 1Password +- Importer de 1Password +- +- +- Open a recent database +- Ouvrir une base de données récente +- +- +- +- YubiKey +- +- %1 [%2] Configured Slot - %3 +- %1 [%2] Emplacement configuré – %3 +- +- +- %1 [%2] Challenge Response - Slot %3 - %4 +- %1 [%2] Question-réponse – Emplacement %3 - %4 +- +- +- Press +- Appuyer +- +- +- Passive +- +- +- +- %1 Invalid slot specified - %2 +- %1 Un emplacement invalide est indiqué – %2 +- +- +- The YubiKey interface has not been initialized. +- L’interface YubiKey n’a pas été initialisée. +- +- +- Hardware key is currently in use. +- La clé matérielle est en cours d’utilisation. +- +- +- Could not find hardware key with serial number %1. Please plug it in to continue. +- Impossible de trouver la clé matérielle dont le numéro de série est %1. Veuillez la connecter afin de poursuivre. +- +- +- Hardware key timed out waiting for user interaction. +- Le temps imparti à l’interaction utilisateur avec la clé matérielle est écoulé. +- +- +- A USB error ocurred when accessing the hardware key: %1 +- Une erreur USB est survenue lors de l’accès à la clé matérielle : %1 +- +- +- Failed to complete a challenge-response, the specific error was: %1 +- Échec de question-réponse, l’erreur particulière était : %1 +- +- +- +- YubiKeyEditWidget +- +- Refresh +- Actualiser +- +- +- YubiKey Challenge-Response +- Question-réponse YubiKey +- +- +- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- <p>Si vous possédez une <a href="https://www.yubico.com/">YubiKey</a>, vous pouvez l’utiliser pour une sécurité accrue.</p><p>Un des emplacements de la YubiKey doit être programmé en tant que <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">Question-réponse HMAC-SHA1</a>.</p> +- +- +- Refresh hardware tokens +- Actualiser les jetons matériels +- +- +- Hardware key slot selection +- Sélection de l’emplacement de la clé matérielle +- +- +- Could not find any hardware keys! +- Impossible de trouver une clé matérielle +- +- +- Selected hardware key slot does not support challenge-response! +- L’emplacement de clé matérielle sélectionné ne prend pas en charge une question-réponse. +- +- +- Detecting hardware keys… +- Détection des clés matérielles… +- +- +- No hardware keys detected +- Aucune clé matérielle n’a été détectée +- +- +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_hr_HR.ts keepassxc-2.6.4-patched/share/translations/keepassx_hr_HR.ts +--- keepassxc-2.6.4-orig/share/translations/keepassx_hr_HR.ts 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/translations/keepassx_hr_HR.ts 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7851 +0,0 @@ +- +- +- AboutDialog +- +- About KeePassXC +- Informacije o KeePassXC-u +- +- +- About +- O programu +- +- +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- Prijavite greÅ¡ke na: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- +- +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- KeePassXC je distribuiran pod uvjetima GNU opće javne licence (GPL) verzija 2 ili (po vaÅ¡oj želji) verzija 3. +- +- +- Contributors +- Suradnici +- +- +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Pogledajte doprinose na GitHub-u</a> +- +- +- Debug Info +- Informacije za otklanjanje pogreÅ¡aka +- +- +- Include the following information whenever you report a bug: +- Priložite slijedeće informacije prilikom prijave greÅ¡ke: +- +- +- Copy to clipboard +- Kopiraj u meÄ‘uspremnik +- +- +- Project Maintainers: +- Održavatelji projekta: +- +- +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- Posebne zahvale KeePassXC tima idu debfx-u za stvaranje izvornog KeePassX-a. +- +- +- +- AgentSettingsWidget +- +- Use OpenSSH for Windows instead of Pageant +- Koristi OpenSSH za Windows umjesto Pageant-a. +- +- +- Enable SSH Agent integration +- Omogući integraciju SSH agenta +- +- +- SSH_AUTH_SOCK value +- SSH_AUTH_SOCK vrijednost +- +- +- SSH_AUTH_SOCK override +- SSH_AUTH_SOCK nadjaÄanje +- +- +- (empty) +- (prazno) +- +- +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- Nema dostupnog SSH Agenta. Ili potvrdite postojanje SSH_AUTH_SOCK vrijednosti okruženja ili podesite nadjaÄanje. +- +- +- SSH Agent connection is working! +- SSH Agent veza radi! +- +- +- +- ApplicationSettingsWidget +- +- Application Settings +- Postavke aplikacije +- +- +- General +- Općenito +- +- +- Security +- Sigurnost +- +- +- Access error for config file %1 +- PogreÅ¡ka pristupa za konfiguracijsku datoteku %1 +- +- +- Icon only +- Samo ikone +- +- +- Text only +- Samo tekst +- +- +- Text beside icon +- Tekst uz ikone +- +- +- Text under icon +- Tekst ispod ikona +- +- +- Follow style +- Prati stil +- +- +- Reset Settings? +- PoniÅ¡ti Postavke? +- +- +- Are you sure you want to reset all general and security settings to default? +- Želite li zaista vratiti sve opće i sigurnosne postavke na zadano? +- +- +- Monochrome (light) +- Jednobojna(svijetla) +- +- +- Monochrome (dark) +- Jednobojna(tamna) +- +- +- Colorful +- Raznobojna +- +- +- You must restart the application to set the new language. Would you like to restart now? +- Morate ponovo pokrenuti aplikaciju kako biste postavili novi jezik. Želite li ju ponovo pokrenuti sada? +- +- +- +- ApplicationSettingsWidgetGeneral +- +- Basic Settings +- Osnovne Postavke +- +- +- Startup +- Pokretanje +- +- +- Start only a single instance of KeePassXC +- Pokreni samo jedan primjer KeePassXC-a +- +- +- Minimize window at application startup +- Smanji prozor prilikom pokretanja aplikacije +- +- +- File Management +- Upravljanje Datotekama +- +- +- Backup database file before saving +- Napravi sigurnosnu kopiju datoteke baze podataka prije spremanja +- +- +- Automatically save after every change +- Automatski spremi poslije svake izmjene +- +- +- Automatically reload the database when modified externally +- Automatski iznova otvori bazu podataka kada je modificirana izvana +- +- +- Entry Management +- Upravljanje Stavkama +- +- +- Use group icon on entry creation +- Koristi ikonu grupe pri stvaranju stavki +- +- +- Minimize instead of app exit +- Smanji aplikaciju umjesto izlaženje +- +- +- Show a system tray icon +- Prikaži ikonu sistemske ladice +- +- +- Hide window to system tray when minimized +- Sakrij prozor u sistemsku ladicu kada je smanjen +- +- +- Auto-Type +- Automatsko-tipkanje +- +- +- Use entry title to match windows for global Auto-Type +- Upotrijebi naziv stavke za podudaranje prozora pri globalnom Auto-tipkanju +- +- +- Use entry URL to match windows for global Auto-Type +- Upotrijebi URL stavke za podudaranje prozora pri globalnom Auto-tipkanju +- +- +- Always ask before performing Auto-Type +- Uvijek pitaj prije izvoÄ‘enja Auto-tipkanja +- +- +- ms +- Milliseconds +- ms +- +- +- Movable toolbar +- Pokretna alatna traka +- +- +- Remember previously used databases +- Zapamti prethodno koriÅ¡tene baze podataka +- +- +- Load previously open databases on startup +- UÄitaj prethodno otvorene baze podataka pri pokretanju +- +- +- Remember database key files and security dongles +- Zapamti datoteku kljuÄa i hardverske kljuÄeve baze podataka +- +- +- Check for updates at application startup once per week +- Provjeri dostupnost dopuna pri pokretanju aplikacije jednom tjedno +- +- +- Include beta releases when checking for updates +- Obuhvati beta izdanja tokom provjere za nadopune +- +- +- Language: +- Jezik: +- +- +- (restart program to activate) +- (ponovo pokrenite program za aktivaciju) +- +- +- Minimize window after unlocking database +- Smanji prozor nakon otkljuÄavanja baze podataka +- +- +- Minimize when opening a URL +- Smanji prilikom otvaranja ULR-a +- +- +- Hide window when copying to clipboard +- Sakrij prozor prilikom kopiranja u meÄ‘uspremnik +- +- +- Minimize +- Smanji +- +- +- Drop to background +- Spusti u pozadinu +- +- +- Favicon download timeout: +- Istek vremena za preuzimanje favikona: +- +- +- Website icon download timeout in seconds +- Istek vremena za preuzimanje ikona mrežnih stranica u sekundama +- +- +- sec +- Seconds +- sek +- +- +- Toolbar button style +- Stil gumba alatne trake +- +- +- Language selection +- Odabir jezika +- +- +- Global auto-type shortcut +- Globalni preÄac auto-tipkanja +- +- +- Auto-type character typing delay milliseconds +- Auto-tipkanje odgoda pisanja znakova milisekunde +- +- +- Auto-type start delay milliseconds +- Auto-tipkanje odgoda pokretanja milisekunde +- +- +- Automatically launch KeePassXC at system startup +- Automatski pokreni KeePassXC pri pokretanju sustava +- +- +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- Sigurno spremi datoteke baze podataka (onemogućite ako imate problema sa Dropbox-om i sl.) +- +- +- User Interface +- KorisniÄko SuÄelje +- +- +- Toolbar button style: +- Stil gumba alatne trake: +- +- +- Use monospaced font for notes +- Koristi font fiksne Å¡irine za biljeÅ¡ke +- +- +- Tray icon type: +- Vrsta ikone ladice: +- +- +- Reset settings to default… +- Vrati postavke na zadano... +- +- +- Auto-Type typing delay: +- Auto-tipkanje odgoda pisanja: +- +- +- Global Auto-Type shortcut: +- Globalni Auto-tipkanje preÄac: +- +- +- Auto-Type start delay: +- Auto-tipkanje odgoda pokretanja: +- +- +- Automatically save when locking database +- Automatski spremi prilikom zakljuÄavanja baze podataka +- +- +- Automatically save non-data changes when locking database +- Automatski saÄuvaj bespodatkovne izmjene prilikom zakljuÄavanja baze podataka +- +- +- Tray icon type +- Vrsta ikone ladice +- +- +- +- ApplicationSettingsWidgetSecurity +- +- Timeouts +- Istek vremena +- +- +- Clear clipboard after +- ObriÅ¡i meÄ‘uspremnik nakon +- +- +- sec +- Seconds +- sek +- +- +- Lock databases after inactivity of +- ZakljuÄaj bazu podataka nakon neaktivnosti od +- +- +- min +- min +- +- +- Forget TouchID after inactivity of +- Zaboravi TouchID nakon neaktivnosti od +- +- +- Convenience +- Pogodnost +- +- +- Lock databases when session is locked or lid is closed +- ZakljuÄaj bazu podataka kada je sesija zakljuÄana ili poklopac zatvoren +- +- +- Forget TouchID when session is locked or lid is closed +- Zaboravi TouchID kada je sesija zakljuÄanja ili je poklopac zatvoren +- +- +- Lock databases after minimizing the window +- ZakljuÄaj baze podataka nakon smanjenja prozora +- +- +- Re-lock previously locked database after performing Auto-Type +- Ponovo zakljuÄaj prethodno zakljuÄanu bazu podataka nakon izvoÄ‘enja Auto-Tipkanja +- +- +- Hide passwords in the entry preview panel +- Sakrij lozinke na ploÄi za pregled stavki +- +- +- Hide entry notes by default +- Sakrij biljeÅ¡ke stavki pod zadano +- +- +- Privacy +- Privatnost +- +- +- Use DuckDuckGo service to download website icons +- Koristi DuckDuckGo usluge za preuzimanje ikona mrežnih stranica +- +- +- Clipboard clear seconds +- Brisanje meÄ‘uspremnika sekunde +- +- +- Touch ID inactivity reset +- Ponovo pokretanje TouchID nakon neaktivnosti +- +- +- Database lock timeout seconds +- Istek vremena za zakljuÄavanje baze podataka u sekundama +- +- +- min +- Minutes +- min +- +- +- Clear search query after +- ObriÅ¡i upite pretage nakon +- +- +- Require password repeat when it is visible +- Zahtijevaj ponavljanje lozinke kada je vidljiva +- +- +- Hide passwords when editing them +- Sakrij lozinke tokom ureÄ‘ivanja +- +- +- Use placeholder for empty password fields +- Koristi rezervirana mjesta za prazna polja lozinki +- +- +- +- AutoType +- +- Couldn't find an entry that matches the window title: +- Stavku koja odgovara naslovu prozora nije moguće naći: +- +- +- Auto-Type - KeePassXC +- Auto-Tipkanje - KeePassXC +- +- +- Auto-Type +- Automatsko-tipkanje +- +- +- The Syntax of your Auto-Type statement is incorrect! +- Sintaksa VaÅ¡e Auto-Tipkane izjave je netoÄna! +- +- +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- Ova Auto-Tipkana naredba sadrži vrlo dugo kaÅ¡njenje. Želite li zaista nastaviti? +- +- +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- Ova Auto-Tipkana naredba sadrži vrlo spore pritiske tipki. Želite li zaista nastaviti? +- +- +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- Ova Auto-Tipkana naredba sadrži argumente koji se Äesto ponavljaju. Želite li zaista nastaviti? +- +- +- Permission Required +- Potrebna Dozvola +- +- +- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC zahtijeva dozvolu PristupaÄnosti kako bi izvrÅ¡io Auto-Tipkanje stavki . Ako ste mu već dali dozvolu, možda ćete morati ponovno pokrenuti KeePassXC. +- +- +- +- AutoTypeAssociationsModel +- +- Window +- Prozor +- +- +- Sequence +- Redoslijed +- +- +- Default sequence +- Zadani redoslijed +- +- +- +- AutoTypeMatchModel +- +- Group +- Grupa +- +- +- Title +- Naslov +- +- +- Username +- KorisniÄko ime +- +- +- Sequence +- Redoslijed +- +- +- +- AutoTypeMatchView +- +- Copy &username +- Kopiraj &korisniÄko ime +- +- +- Copy &password +- Kopiraj &lozinku +- +- +- +- AutoTypePlatformMac +- +- Permission Required +- Potrebna Dozvola +- +- +- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC zahtijeva dozvolu PristupaÄnosti i SnimaÄa Zaslona kako bi izvrÅ¡io globalno Auto-Tipkanje. Snimanje Zaslona je potrebno za koriÅ¡tenje naslova prozora pri pronalaženju stavki. Ako ste mu već dali dozvolu, možda ćete morati ponovno pokrenuti KeePassXC. +- +- +- +- AutoTypeSelectDialog +- +- Auto-Type - KeePassXC +- Auto-Tipkanje - KeePassXC +- +- +- Select entry to Auto-Type: +- Odaberite stavku za Auto-Tipkanje +- +- +- Search... +- Traži... +- +- +- +- BrowserAccessControlDialog +- +- KeePassXC - Browser Access Request +- KeePassXC - Zahtjev za Pristup Pregledniku +- +- +- %1 is requesting access to the following entries: +- %1 zahtijeva pristup sljedećim stavkama: +- +- +- Remember access to checked entries +- Zapamti pristup oznaÄenim stavkama +- +- +- Remember +- Zapamti +- +- +- Allow access to entries +- Dopusti pristup stavkama +- +- +- Allow Selected +- Dopusti Odabrane +- +- +- Deny All +- Odbij Sve +- +- +- Disable for this site +- Onemogući za ovu stranicu +- +- +- +- BrowserEntrySaveDialog +- +- KeePassXC-Browser Save Entry +- Spremi Stavku KeePassXC-Preglednika +- +- +- Ok +- Ok +- +- +- Cancel +- Otkaži +- +- +- You have multiple databases open. +-Please select the correct database for saving credentials. +- Imate viÅ¡e otvorenih baza podataka. +-Odaberite ispravnu bazu podataka za spremanje vjerodajnica. +- +- +- +- BrowserService +- +- KeePassXC: New key association request +- KeePassXC: Novi zahtjev za udruženje kljuÄa +- +- +- Save and allow access +- Spremi i omogući pristup +- +- +- KeePassXC: Overwrite existing key? +- KeePassXC: Presnimi postojeći kljuÄ? +- +- +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- ZajedniÄki kljuÄ za Å¡ifriranje s nazivom "%1" već postoji. +-Želite li ga pesnimiti? +- +- +- KeePassXC: Update Entry +- KeePassXC: Dopuni Stavku +- +- +- Do you want to update the information in %1 - %2? +- Želite li nadopuniti informacije u %1 - %2? +- +- +- Abort +- Prekini +- +- +- Converting attributes to custom data… +- Pretvaranje svojstava u prilagoÄ‘ene podatke... +- +- +- KeePassXC: Converted KeePassHTTP attributes +- KeePassXC: Pretvorena KeePassHTTP svojstva +- +- +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- UspjeÅ¡no pretvorena svojstva od %1 stavke(i). +-%2 kljuÄa premjeÅ¡tena u prilagoÄ‘ene podatke. +- +- +- Successfully moved %n keys to custom data. +- UspjeÅ¡no premjeÅ¡ten %n kljuÄ u prilagoÄ‘ene podatke.UspjeÅ¡no premjeÅ¡tena %n kljuÄa u prilagoÄ‘ene podatke.UspjeÅ¡no premjeÅ¡teno %n kljuÄeva u prilagoÄ‘ene podatke. +- +- +- KeePassXC: No entry with KeePassHTTP attributes found! +- KeePassXC: Nema stavki s KeePassHTTP svojstvima! +- +- +- The active database does not contain an entry with KeePassHTTP attributes. +- Aktivna baza podataka nema stavke sa KeePassHTTP svojstvom. +- +- +- KeePassXC: Legacy browser integration settings detected +- KeePassXC: Otkrivene zastarjele postavke integracije preglednika +- +- +- KeePassXC: Create a new group +- KeePassXC: Stvori novu grupu +- +- +- A request for creating a new group "%1" has been received. +-Do you want to create this group? +- +- Zaprimljen je zahtjev za stvaranje nove grupe "%1". +-Želite li stvoriti ovu grupu? +- +- +- +- Your KeePassXC-Browser settings need to be moved into the database settings. +-This is necessary to maintain your current browser connections. +-Would you like to migrate your existing settings now? +- VaÅ¡e KeePassXC postavke preglednika potrebno je premjestiti u postavke baze podataka. +-To je potrebno za održavanje trenutnih veza preglednika. +-Želite li premjestiti postojeće postavke sada? +- +- +- Don't show this warning again +- Nemoj viÅ¡e prikazivati ovo upozorenje. +- +- +- You have received an association request for the following database: +-%1 +- +-Give the connection a unique name or ID, for example: +-chrome-laptop. +- Dobilii ste zahtjev udruženja za sljedeću bazu podataka: +-%1 +- +-Dajte vezi jedinstveno ime ili ID, na primjer: +-chrome-laptop. +- +- +- +- BrowserSettingsWidget +- +- Dialog +- Dijalog +- +- +- This is required for accessing your databases with KeePassXC-Browser +- Ovo je potrebno za pristup vaÅ¡im bazama podataka pomoću KeePassXC-Preglednika +- +- +- Enable browser integration +- Omogući integraciju preglednika +- +- +- General +- Općentio +- +- +- Browsers installed as snaps are currently not supported. +- Preglednici instalirani kao snap-ovi trenutno nisu podržani. +- +- +- Enable integration for these browsers: +- Omogućite integraciju za ove preglednike: +- +- +- Vivaldi +- Vivaldi +- +- +- &Edge +- &Edge +- +- +- Firefox +- Firefox +- +- +- Tor Browser +- Tor Browser +- +- +- Brave +- Brave +- +- +- Google Chrome +- Google Chrome +- +- +- Chromium +- Chromium +- +- +- Show a notification when credentials are requested +- Credentials mean login data requested via browser extension +- Prikaži obavijest kada se zatraže podaci za prijavu +- +- +- Request to unlock the database if it is locked +- Zatraži otkljuÄavanje baze podataka ako je zakljuÄana +- +- +- Only entries with the same scheme (http://, https://, ...) are returned. +- Vraćene su samo stavke s istom shemom (http://, https://, ...). +- +- +- Match URL scheme (e.g., https://...) +- Uskladi shemu URL-a(npr. https://...) +- +- +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- Vraća samo najbolja podudaranja za odreÄ‘eni URL, umjesto svih stavki za cijelu domene. +- +- +- Return only best-matching credentials +- Vrati samo najprikladnije podatke za prijavu +- +- +- Returns expired credentials. String [expired] is added to the title. +- Vraća istekle podatke za prijavu. Znakovni niz [istekao] se dodaje naslovu. +- +- +- Allow returning expired credentials +- Dopusti vraćanje podataka kojima je istekao rok +- +- +- All databases connected to the extension will return matching credentials. +- Sve baze podataka povezane s proÅ¡irenjem vratit će odgovarajuće podatke za prijavu. +- +- +- Search in all opened databases for matching credentials +- Credentials mean login data requested via browser extension +- Traži odgovarajuće podatke za prijavu u svim otvorenim bazama podataka +- +- +- Sort matching credentials by title +- Credentials mean login data requested via browser extension +- Sortiraj odgovarajuće podatke za prijavu po naslovu +- +- +- Sort matching credentials by username +- Credentials mean login data requested via browser extension +- Sortiraj odgovarajuće podatke za prijavu po korisniÄkom imenu +- +- +- Advanced +- Napredno +- +- +- Never ask before accessing credentials +- Credentials mean login data requested via browser extension +- Nikad ne pitaj prije nego Å¡to zatražite pristup podacima za prijavu +- +- +- Never ask before updating credentials +- Credentials mean login data requested via browser extension +- Nikad ne pitaj prije nego Å¡to ažurirate podataka za prijavu +- +- +- Do not ask permission for HTTP Basic Auth +- An extra HTTP Basic Auth setting +- Nemoj tražiti dozvolu za HTTP Basic Auth +- +- +- Automatically creating or updating string fields is not supported. +- Automatsko stvaranje ili nadopunjavanje polja znakovnih nizova nije podržano. +- +- +- Return advanced string fields which start with "KPH: " +- Vratite napredna polja znakovnog niza koji poÄinje s "KPH: " +- +- +- Don't display the popup suggesting migration of legacy KeePassHTTP settings. +- Nemoj prikazivati skoÄni zaslon koji predlaže migraciju zastarjelih postavki KeePassHTTP-a. +- +- +- Do not prompt for KeePassHTTP settings migration. +- Ne prikazuj podsjetnik za migriranje zastarjelih postavki KeePassHTTP-a. +- +- +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- Prilikom pokretanja automatski ažuriraj binarnu putanju KeePassXC-a ili keepassxc-proxy-a u izvorne skripte za slanje poruka. +- +- +- Update native messaging manifest files at startup +- +- +- +- Use a custom proxy location if you installed a proxy manually. +- Koristi prilagoÄ‘enu lokaciju proxy-a ako ste ruÄno instalirali proxy. +- +- +- Use a custom proxy location: +- Meant is the proxy for KeePassXC-Browser +- Koristi prilagoÄ‘enu lokaciju proxy-a: +- +- +- Custom proxy location field +- Polje prilagoÄ‘ene lokacije proxy-a +- +- +- Browser for custom proxy file +- Preglednik za prilagoÄ‘enu proxy datoteku +- +- +- Browse... +- Button for opening file dialog +- Pretraživanje... +- +- +- Use a custom browser configuration location: +- Koristi prilagoÄ‘enu lokaciju konfiguracije preglednika: +- +- +- Browser type: +- Vrsta preglednika: +- +- +- Toolbar button style +- Stil gumba alatne trake +- +- +- Config Location: +- Lokacija konfiguracije: +- +- +- Custom browser location field +- PrilagoÄ‘eno polje lokacije preglednika +- +- +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- +- +- Browse for custom browser path +- +- +- +- Custom extension ID: +- PrilagoÄ‘ena ID proÅ¡irenja: +- +- +- Custom extension ID +- PrilagoÄ‘ena ID proÅ¡irenja +- +- +- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 +- Zbog Snap-ovog odvojenog pokrretanja, morate pokrenuti skriptu kako biste omogućili integraciju preglednika.<br />Tu skriptu možete dobiti od %1 +- +- +- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 +- KeePassXC-Preglednik potreban je za funkcioniranje integracije preglednika. <br />Preuzmite ga na %1 i %2 i %3. %4 +- +- +- Please see special instructions for browser extension use below +- +- +- +- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. +- <b>PogreÅ¡ka:</b> PrilagoÄ‘ena lokacija proxy-a nije pronaÄ‘ena!<br/>Integracija preglednika NEĆE FUNKCIONIRATI bez proxy aplikacije. +- +- +- <b>Warning:</b> The following options can be dangerous! +- <b>Upozorenje:</b> Sljedeće opcije mogu biti opasne! +- +- +- Executable Files +- IzvrÅ¡ne datoteke +- +- +- All Files +- Sve datoteke +- +- +- Select custom proxy location +- Odaberite prilagoÄ‘enu lokaciju proxy-a +- +- +- Select native messaging host folder location +- +- +- +- +- CloneDialog +- +- Clone Options +- Opcije Kloniranja +- +- +- Append ' - Clone' to title +- Dodataj ' - Klon' naslovu +- +- +- Replace username and password with references +- +- +- +- Copy history +- Povijesti kopiranja +- +- +- +- CsvImportWidget +- +- Import CSV fields +- Uvezi CSV polja +- +- +- filename +- ime datoteke +- +- +- size, rows, columns +- veliÄina, redovi, stupci +- +- +- Encoding +- Kodiranje +- +- +- Codec +- Kodek +- +- +- Text is qualified by +- +- +- +- Fields are separated by +- +- +- +- Comments start with +- +- +- +- Consider '\' an escape character +- +- +- +- Preview +- Pregled +- +- +- Imported from CSV file +- Uvezeno iz CSV datoteke +- +- +- Original data: +- Izvorni podaci: +- +- +- Error +- PogreÅ¡ka +- +- +- Error(s) detected in CSV file! +- GreÅ¡ka(e) otkrivena u CSV datoteci! +- +- +- [%n more message(s) skipped] +- [%n poruka preskoÄena][joÅ¡ %n poruke preskoÄeno][joÅ¡ %n poruka preskoÄeno] +- +- +- CSV import: writer has errors: +-%1 +- +- +- +- Text qualification +- +- +- +- Field separation +- +- +- +- Number of header lines to discard +- +- +- +- CSV import preview +- Pregled CSV uvoza +- +- +- Column Association +- +- +- +- Last Modified +- Posljednja izmjena +- +- +- Password +- Lozinka +- +- +- Created +- Stvoreno +- +- +- Notes +- BiljeÅ¡ke +- +- +- Title +- Naslov +- +- +- Group +- Grupa +- +- +- URL +- URL +- +- +- Username +- KorisniÄko ime +- +- +- Header lines skipped +- Linije zaglavlje preskoÄene +- +- +- First line has field names +- Prva linija ima nazive polja +- +- +- Not Present +- Nije prisutno +- +- +- Column %1 +- Stupac %1 +- +- +- TOTP +- TOTP +- +- +- Icon +- Ikona +- +- +- +- CsvParserModel +- +- %n column(s) +- %n stupac%n stupaca%n stupaca +- +- +- %1, %2, %3 +- file info: bytes, rows, columns +- %1, %2, %3 +- +- +- %n byte(s) +- %n bajt%n bajta%n bajtova +- +- +- %n row(s) +- %n redak%n retka%n redova +- +- +- +- Database +- +- File %1 does not exist. +- Datoteka %1 ne postoji. +- +- +- Unable to open file %1. +- Datoteku %1 nije moguće otvoriti. +- +- +- Error while reading the database: %1 +- PogreÅ¡ka tijekom Äitanja baze podataka: %1 +- +- +- File cannot be written as it is opened in read-only mode. +- +- +- +- Key not transformed. This is a bug, please report it to the developers! +- +- +- +- %1 +-Backup database located at %2 +- %1 +-Sigurnosna kopija baza podataka nalazi se na %2 +- +- +- Could not save, database does not point to a valid file. +- +- +- +- Could not save, database file is read-only. +- +- +- +- Database file has unmerged changes. +- Datoteka baze podataka ima nesjedinjene promjene. +- +- +- Recycle Bin +- KoÅ¡ za smeće +- +- +- Passwords +- Root group name +- Lozinke +- +- +- Database save is already in progress. +- Spremanje baze podataka je u toku. +- +- +- Could not save, database has not been initialized! +- +- +- +- +- DatabaseOpenDialog +- +- Unlock Database - KeePassXC +- OtkljuÄaj bazu podataka - KeePassXC +- +- +- +- DatabaseOpenWidget +- +- Key File: +- Datoteka kljuÄa: +- +- +- Refresh +- Osvježi +- +- +- Don't show this warning again +- Nemoj viÅ¡e pokazivati ovo upozorenje. +- +- +- All files +- Sve datoteke +- +- +- Key files +- Datoteke kljuÄeva +- +- +- Select key file +- Odaberite datoteku kljuÄa +- +- +- Failed to open key file: %1 +- Otvaranja datoteke kljuÄa nije uspjelo: %1 +- +- +- Unlock KeePassXC Database +- OtkljuÄaj bazu podataka KeePassXC +- +- +- Enter Password: +- Unesite lozinku: +- +- +- Password field +- Polje lozinke +- +- +- Hardware key slot selection +- +- +- +- Browse for key file +- Potraži datoteku kljuÄa +- +- +- Browse... +- Pretraživanje... +- +- +- Refresh hardware tokens +- Osvježi hardverske tokene +- +- +- Hardware Key: +- Hardverski kljuÄ: +- +- +- Hardware key help +- Hardverski kljuÄ pomoć +- +- +- TouchID for Quick Unlock +- TouchID za Brzo OtkljuÄavanje +- +- +- Unlock failed and no password given +- +- +- +- Unlocking the database failed and you did not enter a password. +-Do you want to retry with an "empty" password instead? +- +-To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. +- +- +- +- Retry with empty password +- +- +- +- Enter Additional Credentials (if any): +- Unesite dodatne vjerodajnice (ako ih ima): +- +- +- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +-<p>Click for more information...</p> +- <p>Možete koristiti hardverski sigurnosni kljuÄ kao Å¡to <strong>je YubiKey</strong> <strong>ili OnlyKey</strong> s utorima podeÅ¡enim za HMAC-SHA1.</p> +-<p>Kliknite za viÅ¡e informacija...</p> +- +- +- Key file help +- Datoteka kljuÄa pomoć +- +- +- ? +- ? +- +- +- Cannot use database file as key file +- Nije moguće koristiti datoteku baze podataka kao datoteku kljuÄa +- +- +- You cannot use your database file as a key file. +-If you do not have a key file, please leave the field empty. +- Ne možete koristiti datoteku baze podataka kao datoteku kljuÄa. +-Ako nemate datoteku kljuÄa, ostavite polje prazno. +- +- +- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> +- <p>Uz lozinke, možete koristiti tajnu datoteku kako biste poboljÅ¡ali sigurnost svoje baze podataka. Ta se datoteka može proizvesti u sigurnosnim postavkama baze podataka.</p><p>Ovo nije <strong>VaÅ¡a</strong> *.kdbx datoteka baze podataka!<br>Ako nemate datoteku kljuÄa, ostavite ovo polje prazno.</p><p>Kliknite za viÅ¡e informacija...</p> +- +- +- Key file to unlock the database +- Datoteka kljuÄa za otkljuÄavanje baze podataka +- +- +- Please touch the button on your YubiKey! +- Molimo prritisnite gumb na svom YubiKey! +- +- +- Detecting hardware keys… +- Otkrivanje hardverskih kljuÄeva... +- +- +- No hardware keys detected +- Nijedan hardverski kljuÄ otkrivene +- +- +- Select hardware key… +- Odaberite hardverski kljuÄ... +- +- +- Old key file format +- +- +- +- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> +- +- +- +- +- DatabaseSettingWidgetMetaData +- +- Passwords +- Lozinke +- +- +- +- DatabaseSettingsDialog +- +- Advanced Settings +- Napredne Postavke +- +- +- General +- Generalno +- +- +- Security +- Sigurnost +- +- +- Encryption Settings +- Postavke Å ifriranja +- +- +- Browser Integration +- Integracija preglednika +- +- +- Database Credentials +- Vjerodajnice baze podataka +- +- +- +- DatabaseSettingsWidgetBrowser +- +- KeePassXC-Browser settings +- KeePassXC-Postavke preglednika +- +- +- Stored keys +- Spremljeni kljuÄevi +- +- +- Remove +- Ukloni +- +- +- Delete the selected key? +- IzbriÅ¡i odabrani kljuÄ? +- +- +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- Želite li zaista izbrisati odabrani kljuÄ? +-To može sprijeÄiti vezu sa prikljuÄkom preglednika +- +- +- Key +- KljuÄ +- +- +- Value +- Vrijednost +- +- +- Enable Browser Integration to access these settings. +- Omogući Integraciji Preglednika pristup ovim postavkama +- +- +- Disconnect all browsers +- Odspoji sve preglednike... +- +- +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- Želite li zaista odspojiti sve preglednike? +-To može sprijeÄiti vezu sa prikljuÄkom preglednika. +- +- +- KeePassXC: No keys found +- KeePassXC: Nijedan kljuÄ nije pronaÄ‘en +- +- +- No shared encryption keys found in KeePassXC settings. +- Nijedni dijeljeni kljuÄevi za Å¡ifriranje nisu prronaÄ‘eni u KeePassXC postavkama. +- +- +- KeePassXC: Removed keys from database +- KeePassXC: Uklonjeni kljuÄevi iz baze podataka +- +- +- Successfully removed %n encryption key(s) from KeePassXC settings. +- UspjeÅ¡no uklonjen %n kljuÄ za Å¡ifriranje iz KeePassXC postavki.UspjeÅ¡no uklonjena %n kljuÄa za Å¡ifriranje iz KeePassXC postavki.UspjeÅ¡no uklonjeno %n kljuÄeva za Å¡ifriranje iz KeePassXC postavki. +- +- +- Forget all site-specific settings on entries +- +- +- +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- Želite li zaista zaboraviti sve specifiÄne postavke stranice za svaku stavku? +-Dozvole za pristup stavkama bit će opozvane. +- +- +- Removing stored permissions… +- Uklanjanje pohranjenih dozvola... +- +- +- Abort +- Prekini +- +- +- KeePassXC: Removed permissions +- KeePassXC: Uklonjene dozvole +- +- +- Successfully removed permissions from %n entry(s). +- UspjeÅ¡no uklonjena dozvola od %n stavke.UspjeÅ¡no uklonjene dozvole od %n stavke.UspjeÅ¡no uklonjene dozvole od %n stavki. +- +- +- KeePassXC: No entry with permissions found! +- KeePassXC: Nijedna stavka sa dozvolama nije pronaÄ‘ena! +- +- +- The active database does not contain an entry with permissions. +- Aktivna baza podataka nema stavki sa dozvolama. +- +- +- Move KeePassHTTP attributes to custom data +- Premjesti KeePassHTTP svojstva u prilagoÄ‘ene podatke +- +- +- Do you really want to move all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- +- +- +- Stored browser keys +- Pohranjeni kljuÄevi preglednika +- +- +- Remove selected key +- Ukloni odabrani kljuÄ +- +- +- Move KeePassHTTP attributes to KeePassXC-Browser custom data +- Premjesti KeePassHTTP svojstva u prilagoÄ‘ene podatke KeePassXC-Preglednik-a +- +- +- Refresh database root group ID +- Osvježi ID izvorne grupe baze podataka +- +- +- Created +- Stvorio +- +- +- Refresh database ID +- Osvježi ID baze podataka +- +- +- Do you really want refresh the database ID? +-This is only necessary if your database is a copy of another and the browser extension cannot connect. +- Želite li zaista osvježiti ID baze podataka? +-To je potrebno samo ako je vaÅ¡a baza podataka kopija druge i dodaci preglednika se ne mogu povezati. +- +- +- +- DatabaseSettingsWidgetDatabaseKey +- +- Add additional protection... +- +- +- +- No password set +- Lozinka nije postavljena +- +- +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- UPOZORENJE! Niste postavili lozinku. KoriÅ¡tenje baze podataka bez lozinke nije preporuÄeno +- +-Želite li zaista nastaviti bez lozinke? +- +- +- Continue without password +- Nastavi bez lozinke +- +- +- No encryption key added +- Nijedan kljuÄ za Å¡ifriranje nije dodan +- +- +- You must add at least one encryption key to secure your database! +- Morate dodati barem jedan kljuÄ za Å¡ifriranje kako biste osigurali svoju bazu podataka! +- +- +- Unknown error +- Nepoznata pogreÅ¡ka +- +- +- Failed to change database credentials +- Neuspjela promjena vjerodajnica baze podataka +- +- +- +- DatabaseSettingsWidgetEncryption +- +- Encryption Algorithm: +- Algoritam Å¡ifriranja: +- +- +- AES: 256 Bit (default) +- AES: 256 Bit (zadano) +- +- +- Twofish: 256 Bit +- Twofish: 256 Bit +- +- +- Key Derivation Function: +- +- +- +- Transform rounds: +- +- +- +- Memory Usage: +- +- +- +- Parallelism: +- Paralelizam: +- +- +- Decryption Time: +- Vrijeme deÅ¡ifriranja: +- +- +- ?? s +- ?? s +- +- +- Change +- Promijni +- +- +- Higher values offer more protection, but opening the database will take longer. +- Veće vrijednosti nude veću zaÅ¡titu, ali otvaranje baze podataka trajat će dulje. +- +- +- Database format: +- Format baze podataka: +- +- +- This is only important if you need to use your database with other programs. +- Ovo je važno samo ako trebate koristiti svoju bazu podataka s drugim programima. +- +- +- KDBX 4.0 (recommended) +- KDBX 4.0 (preporuÄeno) +- +- +- KDBX 3.1 +- KDBX 3.1 +- +- +- unchanged +- Database decryption time is unchanged +- nepromijenjeno +- +- +- Number of rounds too high +- Key transformation rounds +- +- +- +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or days (or even longer) to open! +- +- +- +- Understood, keep number +- +- +- +- Cancel +- Otkaži +- +- +- Number of rounds too low +- Key transformation rounds +- +- +- +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database may be too easy to crack! +- +- +- +- KDF unchanged +- KDF nepromijenjen +- +- +- Failed to transform key with new KDF parameters; KDF unchanged. +- +- +- +- MiB +- Abbreviation for Mebibytes (KDF settings) +- Baza BazaMiB +- +- +- thread(s) +- Threads for parallel execution (KDF settings) +- konac(e) konac(e)Nit(i) +- +- +- Change existing decryption time +- +- +- +- Decryption time in seconds +- Vrijeme deÅ¡ifriranja u sekundama +- +- +- Database format +- Format baze podataka +- +- +- Encryption algorithm +- Algoritam Å¡ifriranja +- +- +- Key derivation function +- +- +- +- Transform rounds +- +- +- +- Memory usage +- IskoriÅ¡tenost memorije +- +- +- Parallelism +- Paralelizam +- +- +- ?? ms +- ?? ms +- +- +- ? s +- ? s +- +- +- +- DatabaseSettingsWidgetFdoSecrets +- +- Exposed Entries +- Izložene stavke +- +- +- Don't expose this database +- Ne izlaži ovu bazu podataka +- +- +- Expose entries under this group: +- Izložene stavke unutar ove grupe: +- +- +- Enable Secret Service to access these settings. +- Omogućite Tajnu Službu za pristup ovim postavkama. +- +- +- +- DatabaseSettingsWidgetGeneral +- +- Database Meta Data +- Meta Podaci Baze Podataka +- +- +- Database name: +- Naziv baze podataka: +- +- +- Database description: +- Opis baze podataka: +- +- +- Default username: +- Zadano korisniÄko ime: +- +- +- History Settings +- Postavke povijesti +- +- +- Max. history items: +- +- +- +- Max. history size: +- +- +- +- MiB +- MiB +- +- +- Use recycle bin +- Koristi koÅ¡ za smeće +- +- +- Additional Database Settings +- Dodatne Postavke Baze Podataka +- +- +- Database name field +- Polje naziva baze podataka +- +- +- Database description field +- Polje opisa baze podataka +- +- +- Default username field +- Polje zadanog korisniÄkog imena +- +- +- Maximum number of history items per entry +- +- +- +- Maximum size of history per entry +- +- +- +- Delete Recycle Bin +- IzbriÅ¡i koÅ¡ za smeće +- +- +- Do you want to delete the current recycle bin and all its contents? +-This action is not reversible. +- Želite li izbrisati trenutni koÅ¡ za smeće i sav njezin sadržaj? +-Ovu radnju nije moguće povratit. +- +- +- (old) +- (staro) +- +- +- Enable compression (recommended) +- Omogući sažimanje (preporuÄeno) +- +- +- +- DatabaseSettingsWidgetKeeShare +- +- Sharing +- Dijeljenje +- +- +- Breadcrumb +- +- +- +- Type +- Vrsta +- +- +- Path +- Put +- +- +- Last Signer +- +- +- +- Certificates +- Certifikati +- +- +- > +- Breadcrumb separator +- > +- +- +- +- DatabaseSettingsWidgetMetaDataSimple +- +- Database Name: +- Naziv baze podataka: +- +- +- Description: +- Opis: +- +- +- Database name field +- Polje naziva baze podataka +- +- +- Database description field +- Polje opisa baze podataka +- +- +- +- DatabaseTabWidget +- +- KeePass 2 Database +- KeePass 2 Baza Podataka +- +- +- All files +- Sve datoteke +- +- +- Open database +- Otvori Bazu Podataka +- +- +- CSV file +- CSV datoteka +- +- +- Merge database +- Sjedini baze podataka +- +- +- Open KeePass 1 database +- Otvori KeePass 1 bazu podataka +- +- +- KeePass 1 database +- KeePass 1 Baza podataka +- +- +- Export database to CSV file +- Izvezi bazu podataka u CSV datoteku +- +- +- Writing the CSV file failed. +- Pisanje CSV datoteke nije uspjelo. +- +- +- Database creation error +- PogreÅ¡ka pri stvaranju baze podataka +- +- +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- Stvorena baza podataka nema kljuÄ ili KDF, odbijam ju spremiti. +-Ovo je definitivno pogreÅ¡ka, molimo prijavite to programerima. +- +- +- Select CSV file +- Odaberite CSV datoteku +- +- +- New Database +- Nova Baza Podataka +- +- +- %1 [New Database] +- Database tab name modifier +- %1 [Nova Baza Podataka] +- +- +- %1 [Locked] +- Database tab name modifier +- %1 [ZakljuÄano] +- +- +- %1 [Read-only] +- Database tab name modifier +- %1 [Samo za Äitanje] +- +- +- Failed to open %1. It either does not exist or is not accessible. +- Otvoranje %1 nije uspjelo. Ili ne postoji ili nije dostupno. +- +- +- Export database to HTML file +- Izvezi bazu podataka u HTML datoteku +- +- +- HTML file +- HTML datoteka +- +- +- Writing the HTML file failed. +- Pisanje HTML datoteke nije uspjelo. +- +- +- Export Confirmation +- Potvrda izvoza +- +- +- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? +- +- +- +- Open OPVault +- Otvori OPVault +- +- +- +- DatabaseWidget +- +- Searching... +- Pretraživanje... +- +- +- Do you really want to delete the entry "%1" for good? +- Želite li zaista izbrisati stavku "%1"? +- +- +- Do you really want to move entry "%1" to the recycle bin? +- Želite li zaista premjestiti stavku "%1" u koÅ¡ za smeće? +- +- +- Do you really want to move %n entry(s) to the recycle bin? +- Želite li zaista premjestiti %n stavku u koÅ¡ za smeće?Želite li zaista premjestiti %n stavke u koÅ¡ za smeće?Želite li zaista premjestiti %n stavki u koÅ¡ za smeće? +- +- +- Execute command? +- IzvrÅ¡i naredbu? +- +- +- Do you really want to execute the following command?<br><br>%1<br> +- Želite li zaista izvrÅ¡iti sljedeću naredbu?<br><br>%1<br> +- +- +- Remember my choice +- Zapamti moj izbora. +- +- +- Do you really want to delete the group "%1" for good? +- Želite li zaista izbrisati grupu "%1"? +- +- +- No current database. +- Nema trenutne baze podataka. +- +- +- No source database, nothing to do. +- Nema izvorne baze podataka, nema niÅ¡ta za raditi. +- +- +- Search Results (%1) +- Rezultati pretraživanja (%1) +- +- +- No Results +- Nema rezultata +- +- +- File has changed +- Datoteka se promijenila +- +- +- The database file has changed. Do you want to load the changes? +- Datoteka baze podataka se promijenila. Želite li uÄitati promjene? +- +- +- Merge Request +- Zahtjev za spajanje +- +- +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- Datoteka baze podataka se promijenila i imate nespremljene promjene. +-Želite li sjediniti svoje promjene? +- +- +- Empty recycle bin? +- Isprazni koÅ¡ za smeće? +- +- +- Are you sure you want to permanently delete everything from your recycle bin? +- +- +- +- Do you really want to delete %n entry(s) for good? +- Želite li zaista izbrisati %n stavku zauvijek?Želite li zaista izbrisati %n stavke zauvijek?Želite li zaista izbrisati %n stavki zauvijek? +- +- +- Delete entry(s)? +- Izbrisati unose(e)?Izbrisati unose(e)?IzbriÅ¡i stavku(e)? +- +- +- Move entry(s) to recycle bin? +- Premjestiti unos(e) u koÅ¡ za smeće?Premjestiti unos(e) u koÅ¡ za smeće?Premjestiti stavku(e) u koÅ¡ za smeće? +- +- +- Lock Database? +- ZakljuÄaj Baza Podataka? +- +- +- You are editing an entry. Discard changes and lock anyway? +- UreÄ‘ujete stavku. Svejedno odbaci promjene i zakljuÄaj? +- +- +- "%1" was modified. +-Save changes? +- "%1" je izmijenjen. +-Spremi promjene? +- +- +- Database was modified. +-Save changes? +- Baza podataka je izmijenjena. +-Spremi promjene? +- +- +- Save changes? +- Spremi promjene? +- +- +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- +- +- +- Disable safe saves? +- Onemogući sigurno spremanje? +- +- +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- +- +- +- Passwords +- Lozinke +- +- +- Save database as +- Spremi bazu podataka kao +- +- +- KeePass 2 Database +- KeePass 2 Baza Podataka +- +- +- Replace references to entry? +- +- +- +- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? +- +- +- +- Delete group +- IzbriÅ¡i grupu +- +- +- Move group to recycle bin? +- Premjesti grupu u koÅ¡ za smeće? +- +- +- Do you really want to move the group "%1" to the recycle bin? +- Želite li zaista premjestiti grupu "%1" u koÅ¡ za smeće? +- +- +- Successfully merged the database files. +- UspjeÅ¡no spojene datoteke baze podataka. +- +- +- Database was not modified by merge operation. +- Baza podataka nije izmijenjena operacijom sjedinjenja. +- +- +- Shared group... +- ZajedniÄka grupa... +- +- +- Writing the database failed: %1 +- +- +- +- This database is opened in read-only mode. Autosave is disabled. +- +- +- +- Save database backup +- +- +- +- Could not find database file: %1 +- +- +- +- +- EditEntryWidget +- +- Entry +- Stavka +- +- +- Advanced +- Napredno +- +- +- Icon +- Ikona +- +- +- Auto-Type +- Auto-tipkanje +- +- +- Properties +- Svojstva +- +- +- History +- Povijest +- +- +- SSH Agent +- SSH Agent +- +- +- n/a +- n/d +- +- +- (encrypted) +- (Å¡ifrirano) +- +- +- Select private key +- Odaberite privatni kljuÄ +- +- +- Entry history +- Povjest stavki +- +- +- Add entry +- Dodaj stavku +- +- +- Edit entry +- Uredi stavku +- +- +- New attribute +- Novo svojstvo +- +- +- Are you sure you want to remove this attribute? +- Jeste li sigurni da želite ukloniti ovo svojstvo? +- +- +- Tomorrow +- Sutra +- +- +- %n week(s) +- %n tjedan%n tjedana%n tjedana +- +- +- %n month(s) +- %n mjesec%n mjeseca%n mjeseci +- +- +- Entry updated successfully. +- Stavka uspjeÅ¡no nadopunjena. +- +- +- New attribute %1 +- Novo svojstvo %1 +- +- +- %n year(s) +- %n godina%n godine%n godina +- +- +- Confirm Removal +- Potvrdi brisanje +- +- +- Browser Integration +- Integracija preglednika +- +- +- <empty URL> +- <empty URL> +- +- +- Are you sure you want to remove this URL? +- Želite li zaista ukloniti ovaj URL? +- +- +- Reveal +- Otkrij +- +- +- Hide +- Sakrij +- +- +- Unsaved Changes +- Nespremljene promjene +- +- +- Would you like to save changes to this entry? +- Želite li spremiti promjene u ovom stavku? +- +- +- [PROTECTED] Press Reveal to view or edit +- [ZAÅ TIĆENO] Pritisnite Otkrij za prikaz ili ureÄ‘ivanje +- +- +- Invalid Entry +- +- +- +- An external merge operation has invalidated this entry. +-Unfortunately, any changes made have been lost. +- +- +- +- +- EditEntryWidgetAdvanced +- +- Additional attributes +- Dodatna svojstava +- +- +- Add +- Dodaj +- +- +- Remove +- Ukloni +- +- +- Edit Name +- Uredi naziv +- +- +- Protect +- ZaÅ¡titi +- +- +- Reveal +- Otkrij +- +- +- Attachments +- Privitci +- +- +- Foreground Color: +- Prednja boja: +- +- +- Background Color: +- Pozadinska boja: +- +- +- Attribute selection +- Odabir svojstava +- +- +- Attribute value +- Vrijednost svojstva +- +- +- Add a new attribute +- Dodaj novo svojstvo +- +- +- Remove selected attribute +- Ukloni odabrana svojstva +- +- +- Edit attribute name +- Uredi ime svojstva +- +- +- Toggle attribute protection +- UkljuÄi / iskljuÄi zaÅ¡titu svojstava +- +- +- Show a protected attribute +- Prikaži zaÅ¡tićena svojstva +- +- +- Foreground color selection +- Odabir prednje boje +- +- +- Background color selection +- Odabir pozadinske boje +- +- +- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> +- +- +- +- Exclude from database reports +- Izostavi iz izvješća baze podataka +- +- +- +- EditEntryWidgetAutoType +- +- Enable Auto-Type for this entry +- Omogućite Auto-Tipkanje za ovu stavku +- +- +- Window Associations +- +- +- +- + +- + +- +- +- - +- - +- +- +- Window title: +- Naslov prozora: +- +- +- Use a specific sequence for this association: +- Koristi specifiÄan redoslijed za ovu asocijaciju: +- +- +- Custom Auto-Type sequence +- PrilagoÄ‘en redoslijed Auto-Tipkanja +- +- +- Open Auto-Type help webpage +- +- +- +- Existing window associations +- +- +- +- Add new window association +- +- +- +- Remove selected window association +- +- +- +- You can use an asterisk (*) to match everything +- +- +- +- Set the window association title +- Postavite naslov za asociranja prozora +- +- +- You can use an asterisk to match everything +- +- +- +- Custom Auto-Type sequence for this window +- PrilagoÄ‘en redoslijed Auto-Tipkanja za ovaj prozor +- +- +- Inherit default Auto-Type sequence from the group +- Naslijedi zadani redoslijed Auto-Tipkanja od grupe +- +- +- Use custom Auto-Type sequence: +- Koristi pilagoÄ‘en redoslijed Auto-Tipkanja: +- +- +- +- EditEntryWidgetBrowser +- +- These settings affect to the entry's behaviour with the browser extension. +- +- +- +- General +- Generalno +- +- +- Skip Auto-Submit for this entry +- +- +- +- Hide this entry from the browser extension +- Sakrij ovu stavku od proÅ¡irenja preglednika +- +- +- Additional URL's +- Dodatni URL-ovi +- +- +- Add +- Dodaj +- +- +- Remove +- Ukloni +- +- +- Edit +- Uredi +- +- +- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. +- Samo poÅ¡aljite ovu postavku pregledniku za HTTP Auth dijaloge. Ako je omogućeno, normalni obrasci za prijavu neće prikazati ovu stavku za odabir. +- +- +- Use this entry only with HTTP Basic Auth +- Koristi ovu stavku samo s HTTP Basic Auth +- +- +- +- EditEntryWidgetHistory +- +- Show +- Prikaži +- +- +- Restore +- Vrati +- +- +- Delete +- IzbriÅ¡i +- +- +- Delete all +- ObriÅ¡i sve +- +- +- Entry history selection +- Odabir povijesti stavke +- +- +- Show entry at selected history state +- Prikaži stavku u odabranom trenutku povijesti +- +- +- Restore entry to selected history state +- Vrati stavku u odabranom trenutku vremena +- +- +- Delete selected history state +- +- +- +- Delete all history +- ObriÅ¡i svu povijest +- +- +- +- EditEntryWidgetMain +- +- URL: +- URL: +- +- +- Password: +- Lozinka: +- +- +- Title: +- Naslov: +- +- +- Presets +- +- +- +- Toggle the checkbox to reveal the notes section. +- +- +- +- Username: +- KorisniÄko ime: +- +- +- Url field +- Polje URL-a +- +- +- Download favicon for URL +- Preuzmi favikonu za URL +- +- +- Password field +- Polje lozinke +- +- +- Toggle notes visible +- UkljuÄi / IskljuÄi vidljivost biljeÅ¡ki +- +- +- Expiration field +- +- +- +- Expiration Presets +- +- +- +- Expiration presets +- +- +- +- Notes field +- Polje biljeÅ¡ki +- +- +- Title field +- Polje naslova +- +- +- Username field +- Polje korisniÄkog imena +- +- +- Toggle expiration +- UkljuÄi / IskljuÄi rok trajanja +- +- +- Notes: +- BiljeÅ¡ke: +- +- +- https://example.com +- https://example.com +- +- +- Expires: +- IstiÄe: +- +- +- Edit Entry +- +- +- +- +- EditEntryWidgetSSHAgent +- +- Form +- Obrazac +- +- +- Remove key from agent after +- +- +- +- seconds +- sekunde +- +- +- Fingerprint +- Otisak +- +- +- Remove key from agent when database is closed/locked +- Ukloni kljuÄ iz agenta kada je baza podataka zatvorena/zakljuÄana +- +- +- Public key +- Javni kljuÄ +- +- +- Add key to agent when database is opened/unlocked +- Dodajte kljuÄ agentu kada se baza podataka otvori/otkljuÄa +- +- +- Comment +- Komentar +- +- +- Decrypt +- DeÅ¡ifriraj +- +- +- n/a +- n/d +- +- +- Copy to clipboard +- Kopiraj u predmemoriju +- +- +- Private key +- Privatni kljuÄ +- +- +- External file +- Vanjska datoteka +- +- +- Browse... +- Button for opening file dialog +- Pretraživanje... +- +- +- Attachment +- Privitak +- +- +- Add to agent +- Dodaj agentu +- +- +- Remove from agent +- Ukloni iz agenta +- +- +- Require user confirmation when this key is used +- Zahtijevaj potvrdu korisnika kada se ovaj kljuÄ koristi +- +- +- Remove key from agent after specified seconds +- +- +- +- Browser for key file +- Preglednik za datoteku kljuÄa +- +- +- External key file +- +- +- +- Select attachment file +- +- +- +- +- EditGroupWidget +- +- Group +- Grupa +- +- +- Icon +- Ikona +- +- +- Properties +- Svojstva +- +- +- Add group +- Dodaj grupu +- +- +- Edit group +- Uredi grupu +- +- +- Enable +- Omogući +- +- +- Disable +- Onemogući +- +- +- Inherit from parent group (%1) +- +- +- +- Entry has unsaved changes +- Stavka ima nespremljene promjene +- +- +- +- EditGroupWidgetKeeShare +- +- Type: +- Vrsta: +- +- +- Path: +- Put: +- +- +- Password: +- Lozinka: +- +- +- Inactive +- Neaktivna +- +- +- KeeShare unsigned container +- +- +- +- KeeShare signed container +- +- +- +- Select import source +- +- +- +- Select export target +- +- +- +- Select import/export file +- +- +- +- Clear +- ObriÅ¡i +- +- +- Import +- Uvezi +- +- +- Export +- Izvezi +- +- +- Synchronize +- Sinkroniziraj +- +- +- Your KeePassXC version does not support sharing this container type. +-Supported extensions are: %1. +- VaÅ¡a KeePassXC verzija ne podržava dijeljenje ove vrste spremnika. +-Podržana proÅ¡irenja su: %1. +- +- +- %1 is already being exported by this database. +- +- +- +- %1 is already being imported by this database. +- +- +- +- %1 is being imported and exported by different groups in this database. +- +- +- +- KeeShare is currently disabled. You can enable import/export in the application settings. +- KeeShare is a proper noun +- +- +- +- Database export is currently disabled by application settings. +- +- +- +- Database import is currently disabled by application settings. +- +- +- +- Sharing mode field +- +- +- +- Path to share file field +- +- +- +- Password field +- Polje lozinke +- +- +- Clear fields +- ObriÅ¡i polja +- +- +- Browse for share file +- Potraži zajedniÄku datoteku +- +- +- Browse... +- Pretraživanje... +- +- +- +- EditGroupWidgetMain +- +- Name field +- Polje naziva +- +- +- Notes field +- Polje biljeÅ¡ki +- +- +- Toggle expiration +- UkljuÄi / IskljuÄi rok trajanja +- +- +- Auto-Type toggle for this and sub groups +- +- +- +- Expiration field +- +- +- +- Search toggle for this and sub groups +- +- +- +- Default auto-type sequence field +- Polje zadanog redoslijeda auto-tipkanja +- +- +- Expires: +- IstiÄe: +- +- +- Use default Auto-Type sequence of parent group +- Koristi zadani redoslijed Auto-Tipkanja nadreÄ‘ene grupe +- +- +- Auto-Type: +- Auto-Tipkanje +- +- +- Search: +- Pretraživanje: +- +- +- Notes: +- BiljeÅ¡ke: +- +- +- Name: +- Naziv: +- +- +- Set default Auto-Type sequence +- Postavi zadani redoslijeda auto-tipkanja +- +- +- Edit Group +- +- +- +- +- EditWidgetIcons +- +- Add custom icon +- Dodaj prilagoÄ‘enu ikonu +- +- +- Delete custom icon +- ObriÅ¡i prilagoÄ‘enu ikonu +- +- +- Download favicon +- Preuzmi favikone +- +- +- Unable to fetch favicon. +- +- +- +- Images +- Slike +- +- +- All files +- Sve datoteke +- +- +- Confirm Delete +- Potvrdi Brisanje +- +- +- Select Image(s) +- Odabir slike(a) +- +- +- Successfully loaded %1 of %n icon(s) +- UspjeÅ¡no uÄitana %1 od %n ikoneUspjeÅ¡no uÄitane %1 od %n ikoneUspjeÅ¡no uÄitano %1 od %n ikona +- +- +- No icons were loaded +- Nijedna ikona nije uÄitana +- +- +- %n icon(s) already exist in the database +- %n ikona već postoji u bazi podataka%n ikone već postoje u bazi podataka%n ikona već postoji u bazi podataka +- +- +- The following icon(s) failed: +- +- +- +- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? +- Ovu ikonu koristi %n stavka stoga će biti zamijenjena zadanom ikona. Želite li zaista ju izbrisati?Ovu ikonu koristi %n stavke stoga će biti zamijenjene zadanom ikona. Želite li zaista ju izbrisati?Ovu ikonu koristi %n stavki stoga će biti zamijenjene zadanim ikona. Želite li zaista ju izbrisati? +- +- +- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security +- +- +- +- Download favicon for URL +- Preuzmi favikonu za URL +- +- +- Apply selected icon to subgroups and entries +- +- +- +- Also apply to child groups +- +- +- +- Also apply to child entries +- +- +- +- Also apply to all children +- +- +- +- Existing icon selected. +- +- +- +- Use default icon +- Koristi zadanu ikonu +- +- +- Use custom icon +- Koristi prilagoÄ‘enu ikonu +- +- +- Apply icon to... +- +- +- +- Apply to this group only +- +- +- +- +- EditWidgetProperties +- +- Created: +- Stvoreno: +- +- +- Modified: +- Izmijenjeno: +- +- +- Accessed: +- Pristupljeno: +- +- +- Uuid: +- Uuid: +- +- +- Plugin Data +- +- +- +- Remove +- Ukloni +- +- +- Delete plugin data? +- +- +- +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- +- +- +- Key +- KljuÄ +- +- +- Value +- Vrijednost +- +- +- Datetime created +- Datum i vrijeme stvaranja +- +- +- Datetime modified +- Datum i vrijeme izmijene +- +- +- Datetime accessed +- Datum i vrijeme pristupanja +- +- +- Unique ID +- Jedinstveni ID +- +- +- Plugin data +- Podaci prikljuÄka +- +- +- Remove selected plugin data +- Ukloni odabrane podataka prikljuÄka +- +- +- +- Entry +- +- %1 - Clone +- %1 - Klon +- +- +- +- EntryAttachmentsModel +- +- Name +- Naziv +- +- +- Size +- VeliÄina +- +- +- +- EntryAttachmentsWidget +- +- Form +- Obrazac +- +- +- Add +- Dodaj +- +- +- Remove +- Ukloni +- +- +- Open +- Otvori +- +- +- Save +- Spremi +- +- +- Select files +- Odaberi datoteke +- +- +- Are you sure you want to remove %n attachment(s)? +- Želite li zaista ukloniti %n privitak?Želite li zaista ukloniti %n privitaka?Želite li zaista ukloniti %n privitaka? +- +- +- Save attachments +- Spremi privitke +- +- +- Unable to create directory: +-%1 +- +- +- +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- +- +- +- Confirm overwrite +- +- +- +- Unable to save attachments: +-%1 +- +- +- +- Unable to open attachment: +-%1 +- +- +- +- Unable to open attachments: +-%1 +- +- +- +- Confirm remove +- +- +- +- Unable to open file(s): +-%1 +- +- +- +- Attachments +- Privitci +- +- +- Add new attachment +- Dodaj novi privitak +- +- +- Remove selected attachment +- Ukloni odabrani privitak +- +- +- Open selected attachment +- Otvori odabrani privitak +- +- +- Save selected attachment to disk +- Spremi odabrani privitak na disk +- +- +- %1 is a big file (%2 MB). +-Your database may get very large and reduce performance. +- +-Are you sure to add this file? +- +- +- +- Confirm Attachment +- +- +- +- +- EntryAttributesModel +- +- Name +- Naziv +- +- +- +- EntryHistoryModel +- +- Last modified +- Posljednja izmjena +- +- +- Title +- Naslov +- +- +- Username +- KorisniÄko ime +- +- +- URL +- URL +- +- +- +- EntryModel +- +- Ref: +- Reference abbreviation +- +- +- +- Group +- Grupa +- +- +- Title +- Naslov +- +- +- Username +- KorisniÄko ime +- +- +- URL +- URL +- +- +- Never +- Nikad +- +- +- Password +- Lozinka +- +- +- Notes +- BiljeÅ¡ke +- +- +- Expires +- IstiÄe +- +- +- Created +- Stvorio +- +- +- Modified +- Izmijenjeno +- +- +- Accessed +- Pristupljeno +- +- +- Attachments +- Privitci +- +- +- Size +- VeliÄina +- +- +- Group name +- Naziv grupe +- +- +- Entry title +- Ime stavke +- +- +- Entry notes +- BiljeÅ¡ke stavke +- +- +- Entry expires at +- Stavka istiÄe u +- +- +- Creation date +- Datum stvaranja +- +- +- Last modification date +- Datum zadnje izmjene +- +- +- Last access date +- Datum zadnjeg pristupa +- +- +- Attached files +- Priložene datoteke +- +- +- Entry size +- VeliÄina stavke +- +- +- Has attachments +- Ima privitke +- +- +- Has TOTP one-time password +- Ima TOTP jednokratnu lozinku +- +- +- +- EntryPreviewWidget +- +- Close +- Zatvori +- +- +- General +- Generalno +- +- +- Username +- KorisniÄko ime +- +- +- Password +- Lozinka +- +- +- Expiration +- Rok trajanja +- +- +- URL +- URL +- +- +- Attributes +- Svojstva +- +- +- Attachments +- Privitci +- +- +- Notes +- BiljeÅ¡ke +- +- +- Autotype +- Auto-Tipkanje +- +- +- Window +- Prozor +- +- +- Sequence +- Redoslijed +- +- +- Searching +- Pretraživanje +- +- +- Search +- Traži +- +- +- Clear +- ObriÅ¡i +- +- +- Never +- Nikad +- +- +- [PROTECTED] +- [ZAÅ TIĆENO] +- +- +- Enabled +- Omogućeno +- +- +- Disabled +- Onemogući +- +- +- Share +- Podijeli +- +- +- Display current TOTP value +- Prikaži trenutnu TOTP vrijednosti +- +- +- Advanced +- Napredno +- +- +- Default Sequence +- +- +- +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- attributes line +- +- +- +- +- EntryURLModel +- +- Invalid URL +- Nevaljan URL +- +- +- +- EntryView +- +- Fit to window +- +- +- +- Fit to contents +- +- +- +- Reset to defaults +- Vrati na zadano... +- +- +- Has attachments +- Entry attachment icon toggle +- Ima privitke +- +- +- Has TOTP +- Entry TOTP icon toggle +- Ima TOTP +- +- +- +- FdoSecrets::Item +- +- Entry "%1" from database "%2" was used by %3 +- +- +- +- +- FdoSecrets::Service +- +- Failed to register DBus service at %1.<br/> +- +- +- +- %n Entry(s) was used by %1 +- %1 is the name of an application +- +- +- +- +- FdoSecrets::SettingsDatabaseModel +- +- File Name +- Naziv Datoteke +- +- +- Group +- Grupa +- +- +- Manage +- +- +- +- Unlock to show +- OtkljuÄajte za prikaz +- +- +- None +- Nijedan +- +- +- +- FdoSecrets::SettingsSessionModel +- +- Application +- Aplikacija +- +- +- Manage +- +- +- +- +- FdoSecretsPlugin +- +- <b>Fdo Secret Service:</b> %1 +- +- +- +- Unknown +- Unknown PID +- Nepoznat +- +- +- Unknown +- Unknown executable path +- Nepoznat +- +- +- <i>PID: %1, Executable: %2</i> +- <i>PID: 1234, Executable: /path/to/exe</i> +- +- +- +- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. +- +- +- +- +- Group +- +- [empty] +- group has no children +- [prazno] +- +- +- +- HibpDownloader +- +- Online password validation failed +- +- +- +- +- IconDownloaderDialog +- +- Download Favicons +- Preuzmi Favikone +- +- +- Cancel +- Otkaži +- +- +- Having trouble downloading icons? +-You can enable the DuckDuckGo website icon service in the security section of the application settings. +- +- +- +- Close +- Zatvori +- +- +- URL +- URL +- +- +- Status +- Status +- +- +- Please wait, processing entry list... +- +- +- +- Downloading... +- Preuzimanje... +- +- +- Ok +- Ok +- +- +- Already Exists +- Već Postoji +- +- +- Download Failed +- Preuzimanje nije uspjelo +- +- +- Downloading favicons (%1/%2)... +- Preuzimanje favikona (%1/%2)... +- +- +- +- KMessageWidget +- +- &Close +- &Zatvori +- +- +- Close message +- +- +- +- +- Kdbx3Reader +- +- missing database headers +- +- +- +- Header doesn't match hash +- +- +- +- Invalid header id size +- +- +- +- Invalid header field length +- +- +- +- Invalid header data length +- +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- +- +- +- Unable to calculate database key +- +- +- +- Unable to issue challenge-response: %1 +- +- +- +- +- Kdbx3Writer +- +- Unable to issue challenge-response: %1 +- +- +- +- Unable to calculate database key +- +- +- +- +- Kdbx4Reader +- +- missing database headers +- +- +- +- Invalid header checksum size +- +- +- +- Header SHA256 mismatch +- +- +- +- Unknown cipher +- +- +- +- Invalid header id size +- +- +- +- Invalid header field length +- +- +- +- Invalid header data length +- +- +- +- Failed to open buffer for KDF parameters in header +- +- +- +- Unsupported key derivation function (KDF) or invalid parameters +- +- +- +- Legacy header fields found in KDBX4 file. +- Zastarjela polja zaglavlje pronaÄ‘ena u KDBX4 datoteci. +- +- +- Invalid inner header id size +- +- +- +- Invalid inner header field length +- +- +- +- Invalid inner header binary size +- +- +- +- Unsupported KeePass variant map version. +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map entry name length +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map entry name data +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map entry value length +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map entry value data +- Translation comment: variant map = data structure for storing meta data +- +- +- +- Invalid variant map Bool entry value length +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map Int32 entry value length +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map UInt32 entry value length +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map Int64 entry value length +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map UInt64 entry value length +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map entry type +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map field type size +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- +- +- +- (HMAC mismatch) +- +- +- +- Unable to calculate database key: %1 +- +- +- +- +- Kdbx4Writer +- +- Invalid symmetric cipher algorithm. +- +- +- +- Invalid symmetric cipher IV size. +- IV = Initialization Vector for symmetric cipher +- +- +- +- Failed to serialize KDF parameters variant map +- Translation comment: variant map = data structure for storing meta data +- +- +- +- Unable to calculate database key: %1 +- +- +- +- +- KdbxReader +- +- Unsupported cipher +- +- +- +- Invalid compression flags length +- +- +- +- Unsupported compression algorithm +- +- +- +- Invalid master seed size +- +- +- +- Invalid transform seed size +- +- +- +- Invalid transform rounds size +- +- +- +- Invalid start bytes size +- +- +- +- Invalid random stream id size +- +- +- +- Invalid inner random stream cipher +- +- +- +- Not a KeePass database. +- Nije KeePass baza podataka. +- +- +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- +- +- +- Unsupported KeePass 2 database version. +- +- +- +- Invalid cipher uuid length: %1 (length=%2) +- +- +- +- Unable to parse UUID: %1 +- +- +- +- Failed to read database file. +- +- +- +- +- KdbxXmlReader +- +- XML parsing failure: %1 +- +- +- +- No root group +- +- +- +- Missing icon uuid or data +- +- +- +- Missing custom data key or value +- +- +- +- Multiple group elements +- +- +- +- Null group uuid +- +- +- +- Invalid group icon number +- +- +- +- Invalid EnableAutoType value +- +- +- +- Invalid EnableSearching value +- +- +- +- No group uuid found +- +- +- +- Null DeleteObject uuid +- +- +- +- Missing DeletedObject uuid or time +- +- +- +- Null entry uuid +- +- +- +- Invalid entry icon number +- +- +- +- History element in history entry +- +- +- +- No entry uuid found +- +- +- +- History element with different uuid +- +- +- +- Duplicate custom attribute found +- PronaÄ‘en duplikat prilagoÄ‘enog svojstva +- +- +- Entry string key or value missing +- +- +- +- Entry binary key or value missing +- +- +- +- Auto-type association window or sequence missing +- Asocirani prozor ili redoslijed Auto-Tipkanja nedostaje +- +- +- Invalid bool value +- +- +- +- Invalid date time value +- Nevažeća vrijednost datuma i vremena +- +- +- Invalid color value +- +- +- +- Invalid color rgb part +- +- +- +- Invalid number value +- +- +- +- Invalid uuid value +- +- +- +- Unable to decompress binary +- Translator meant is a binary data inside an entry +- +- +- +- XML error: +-%1 +-Line %2, column %3 +- +- +- +- +- KeeAgentSettings +- +- Invalid KeeAgent settings file structure. +- +- +- +- Private key is an attachment but no attachments provided. +- +- +- +- Private key is empty +- +- +- +- File too large to be a private key +- +- +- +- Failed to open private key +- Otvaranja privatnog kljuÄa nije uspjelo +- +- +- +- KeePass1OpenWidget +- +- Unable to open the database. +- +- +- +- Import KeePass1 Database +- +- +- +- +- KeePass1Reader +- +- Unable to read keyfile. +- +- +- +- Not a KeePass database. +- Nije KeePass baza podataka. +- +- +- Unsupported encryption algorithm. +- +- +- +- Unsupported KeePass database version. +- +- +- +- Unable to read encryption IV +- IV = Initialization Vector for symmetric cipher +- +- +- +- Invalid number of groups +- +- +- +- Invalid number of entries +- +- +- +- Invalid content hash size +- +- +- +- Invalid transform seed size +- +- +- +- Invalid number of transform rounds +- +- +- +- Unable to construct group tree +- +- +- +- Root +- Izvor +- +- +- Key transformation failed +- +- +- +- Invalid group field type number +- +- +- +- Invalid group field size +- +- +- +- Read group field data doesn't match size +- +- +- +- Incorrect group id field size +- +- +- +- Incorrect group creation time field size +- +- +- +- Incorrect group modification time field size +- +- +- +- Incorrect group access time field size +- +- +- +- Incorrect group expiry time field size +- +- +- +- Incorrect group icon field size +- +- +- +- Incorrect group level field size +- +- +- +- Invalid group field type +- +- +- +- Missing group id or level +- +- +- +- Missing entry field type number +- +- +- +- Invalid entry field size +- +- +- +- Read entry field data doesn't match size +- +- +- +- Invalid entry uuid field size +- +- +- +- Invalid entry group id field size +- +- +- +- Invalid entry icon field size +- +- +- +- Invalid entry creation time field size +- +- +- +- Invalid entry modification time field size +- +- +- +- Invalid entry expiry time field size +- +- +- +- Invalid entry field type +- +- +- +- unable to seek to content position +- +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- +- +- +- Unable to calculate database key +- +- +- +- +- KeeShare +- +- Invalid sharing reference +- +- +- +- Inactive share %1 +- +- +- +- Imported from %1 +- Uvezeno iz %1 +- +- +- Exported to %1 +- +- +- +- Synchronized with %1 +- +- +- +- Import is disabled in settings +- +- +- +- Export is disabled in settings +- +- +- +- Inactive share +- +- +- +- Imported from +- +- +- +- Exported to +- +- +- +- Synchronized with +- +- +- +- +- KeyComponentWidget +- +- Key Component +- +- +- +- Key Component Description +- +- +- +- Cancel +- Otkaži +- +- +- Key Component set, click to change or remove +- +- +- +- Add %1 +- Add a key component +- Dodaj %1 +- +- +- Change %1 +- Change a key component +- Promijeni %1 +- +- +- Remove %1 +- Remove a key component +- Ukloni %1 +- +- +- %1 set, click to change or remove +- Change or remove a key component +- +- +- +- +- KeyFileEditWidget +- +- Generate +- Proizvedi +- +- +- Key File +- Datoteka kljuÄa +- +- +- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> +- +- +- +- Error loading the key file '%1' +-Message: %2 +- +- +- +- Key files +- Datoteke kljuÄeva +- +- +- All files +- Sve datoteke +- +- +- Create Key File... +- Stvori Datoteku KljuÄa... +- +- +- Error creating key file +- +- +- +- Unable to create key file: %1 +- +- +- +- Select a key file +- Odaberite datoteku kljuÄa +- +- +- Key file selection +- Odabir datoteke kljuÄa +- +- +- Browse for key file +- Potraži datoteku kljuÄa +- +- +- Browse... +- Pretraživanje... +- +- +- Generate a new key file +- Proizvedi novu datoteku kljuÄa +- +- +- Note: Do not use a file that may change as that will prevent you from unlocking your database! +- +- +- +- Invalid Key File +- +- +- +- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. +- Ne možete koristiti trenutnu bazu podataka kao vlastitu datoteku kljuÄa. Odaberite drugu datoteku ili prozvedite novu datoteku kljuÄa . +- +- +- Suspicious Key File +- +- +- +- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. +-Are you sure you want to continue with this file? +- Odabrana datoteka kljuÄa nalikuje datoteki baze podataka lozinki. KljuÄna datoteka mora biti statiÄna datoteka koja se nikada ne mijenja ili ćete zauvijek izgubiti pristup svojoj bazi podataka. +-Želite li zaista nastaviti s ovom datotekom? +- +- +- Old key file format +- +- +- +- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. +- +- +- +- +- MainWindow +- +- &Database +- &Baza Podataka +- +- +- &Help +- &Pomoć +- +- +- &Groups +- &Grupe +- +- +- &Tools +- &Alati +- +- +- &Quit +- &Izlaz +- +- +- &About +- O programu +- +- +- Database settings +- Postavke baze podataka +- +- +- Copy username to clipboard +- Kopiraj korisniÄkog imena u meÄ‘uspremnik +- +- +- Copy password to clipboard +- Kopiraj lozinku u meÄ‘uspremnik +- +- +- &Settings +- &Postavke +- +- +- &Title +- &Naslov +- +- +- Copy title to clipboard +- Kopiraj naslov u meÄ‘uspremnik +- +- +- &URL +- &URL +- +- +- Copy URL to clipboard +- Kopiraj URL-a u meÄ‘uspremnik +- +- +- &Notes +- &BiljeÅ¡ke +- +- +- Copy notes to clipboard +- Kopiraj biljeÅ¡ke u meÄ‘uspremnik +- +- +- Copy &TOTP +- Kopiraj &TOTP +- +- +- E&mpty recycle bin +- +- +- +- Clear history +- ObriÅ¡i povijest +- +- +- Access error for config file %1 +- PogreÅ¡ka pristupa za konfiguracijsku datoteku %1 +- +- +- Settings +- Postavke +- +- +- Toggle window +- +- +- +- Quit KeePassXC +- IzaÄ‘i iz KeePassXC-a +- +- +- Please touch the button on your YubiKey! +- Molimo prritisnite gumb na svom YubiKey! +- +- +- WARNING: You are using an unstable build of KeePassXC! +-There is a high risk of corruption, maintain a backup of your databases. +-This version is not meant for production use. +- +- +- +- &Donate +- &Donirajte +- +- +- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +-We recommend you use the AppImage available on our downloads page. +- +- +- +- &Import +- &Uvezi +- +- +- Create a new database +- Stvari novu bazu podataka +- +- +- Merge from another KDBX database +- Sjedini iz druge KDBX baze podataka +- +- +- Add a new entry +- Dodaj novu stavku +- +- +- View or edit entry +- Pogledaj ili uredi stavku +- +- +- Add a new group +- Dodaj novu grupu +- +- +- Perform &Auto-Type +- IzvrÅ¡i &Auto-Tipkanje +- +- +- Open &URL +- Otvori &URL +- +- +- Import a KeePass 1 database +- Uvezi KeePass 1 bazu podataka +- +- +- Import a CSV file +- Uvezi CSV datoteku +- +- +- NOTE: You are using a pre-release version of KeePassXC! +-Expect some bugs and minor issues, this version is not meant for production use. +- +- +- +- Check for updates on startup? +- +- +- +- Would you like KeePassXC to check for updates on startup? +- +- +- +- You can always check for updates manually from the application menu. +- +- +- +- &Export +- &Izvezi +- +- +- Sort &A-Z +- Sortiraj &A-Ž +- +- +- Sort &Z-A +- Sortiraj &Ž-A +- +- +- &Password Generator +- &ProizvoÄ‘aÄ Lozinki +- +- +- Import a 1Password Vault +- Uvezi 1Password Sef +- +- +- &Getting Started +- &Prvi Koraci +- +- +- &User Guide +- &KorisniÄki vodiÄ +- +- +- &Keyboard Shortcuts +- +- +- +- &Recent Databases +- &Nedavne Baze Podataka +- +- +- &Entries +- &Stavke +- +- +- Copy Att&ribute +- +- +- +- TOTP +- TOTP +- +- +- View +- +- +- +- Theme +- Tema +- +- +- &Check for Updates +- +- +- +- &Open Database… +- +- +- +- &Save Database +- &Spremi Bazu Podataka +- +- +- &Close Database +- +- +- +- &New Database… +- +- +- +- &Merge From Database… +- &Sjedini iz Baze Podataka... +- +- +- &New Entry… +- &Nova Stavka... +- +- +- &Edit Entry… +- &Uredi Stavku... +- +- +- &Delete Entry… +- +- +- +- &New Group… +- &Nova Grupa... +- +- +- &Edit Group… +- &Uredi Grupu... +- +- +- &Delete Group… +- +- +- +- Download All &Favicons… +- Preuzmi Sve &Favikone... +- +- +- Sa&ve Database As… +- +- +- +- Database &Security… +- +- +- +- Database &Reports... +- +- +- +- Statistics, health check, etc. +- +- +- +- &Database Settings… +- +- +- +- &Clone Entry… +- +- +- +- Move u&p +- +- +- +- Move entry one step up +- +- +- +- Move do&wn +- +- +- +- Move entry one step down +- +- +- +- Copy &Username +- Kopiraj &KorisniÄko ime +- +- +- Copy &Password +- +- +- +- Download &Favicon +- Preuzmi&Favikonu +- +- +- &Lock Databases +- +- +- +- &CSV File… +- +- +- +- &HTML File… +- +- +- +- KeePass 1 Database… +- +- +- +- 1Password Vault… +- +- +- +- CSV File… +- +- +- +- Show TOTP +- Prikaži TOTP +- +- +- Show QR Code +- Prikaži QR Kod +- +- +- Set up TOTP… +- +- +- +- Report a &Bug +- +- +- +- Open Getting Started Guide +- +- +- +- &Online Help +- +- +- +- Go to online documentation +- +- +- +- Open User Guide +- Otvori KorisniÄki VodiÄ +- +- +- Save Database Backup... +- +- +- +- Add key to SSH Agent +- +- +- +- Remove key from SSH Agent +- +- +- +- Compact Mode +- +- +- +- Automatic +- Automatska +- +- +- Light +- Svijetla +- +- +- Dark +- Tamna +- +- +- Classic (Platform-native) +- KlasiÄna (ovisno o platformi) +- +- +- Show Toolbar +- Prikaži Alatnu traku +- +- +- Show Preview Panel +- Prikaži ploÄu za pregled +- +- +- Don't show again for this version +- Nemoj viÅ¡e prikazivati ovu verziju +- +- +- Restart Application? +- Ponovno Pokreni Aplikaciju? +- +- +- You must restart the application to apply this setting. Would you like to restart now? +- Morate ponovno pokrenuti aplikaciju da biste primijenili tu postavku. Želite li ju ponovno pokrenuti sada? +- +- +- Perform Auto-Type Sequence +- IzvrÅ¡i redoslijed Auto-Tipkanja +- +- +- {USERNAME} +- +- +- +- {USERNAME}{ENTER} +- +- +- +- {PASSWORD} +- +- +- +- {PASSWORD}{ENTER} +- +- +- +- Always on Top +- +- +- +- Hide Usernames +- Sakrij korisniÄka imena +- +- +- Hide Passwords +- Sakrij Lozinke +- +- +- +- ManageDatabase +- +- Database settings +- Postavke baze podataka +- +- +- Edit database settings +- +- +- +- Unlock database +- OtkljuÄaj bazu podataka +- +- +- Unlock database to show more information +- OtkljuÄajte bazu podataka kako biste vidjeli viÅ¡e informacija +- +- +- Lock database +- ZakljuÄaj bazu podataka +- +- +- +- ManageSession +- +- Disconnect +- Odspoji +- +- +- Disconnect this application +- Odspoji ovu aplikaciju +- +- +- +- Merger +- +- Creating missing %1 [%2] +- +- +- +- Relocating %1 [%2] +- +- +- +- Overwriting %1 [%2] +- +- +- +- older entry merged from database "%1" +- starija stavka sjedinjena iz baze podataka "%1" +- +- +- Adding backup for older target %1 [%2] +- +- +- +- Adding backup for older source %1 [%2] +- +- +- +- Reapplying older target entry on top of newer source %1 [%2] +- +- +- +- Reapplying older source entry on top of newer target %1 [%2] +- +- +- +- Synchronizing from newer source %1 [%2] +- +- +- +- Synchronizing from older source %1 [%2] +- +- +- +- Deleting child %1 [%2] +- +- +- +- Deleting orphan %1 [%2] +- +- +- +- Changed deleted objects +- +- +- +- Adding missing icon %1 +- +- +- +- Removed custom data %1 [%2] +- +- +- +- Adding custom data %1 [%2] +- +- +- +- +- NewDatabaseWizard +- +- Create a new KeePassXC database... +- Stvoi novu KeePassXC bazu podataka... +- +- +- Root +- Root group +- Izvor +- +- +- +- NewDatabaseWizardPage +- +- WizardPage +- +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Ovdje možete podesiti postavke Å¡ifriranja baze podataka. Ne brinite, možete ih izmijeniti kasnije u postavkama baze podataka. +- +- +- Advanced Settings +- Napredne Postavke +- +- +- Simple Settings +- Osnovne Postavke +- +- +- Encryption Settings +- Postavke Å ifriranja +- +- +- +- NewDatabaseWizardPageDatabaseKey +- +- Database Credentials +- Vjerodajnice baze podataka +- +- +- A set of credentials known only to you that protects your database. +- +- +- +- +- NewDatabaseWizardPageEncryption +- +- Encryption Settings +- Postavke Å ifriranja +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Ovdje možete podesiti postavke Å¡ifriranja baze podataka. Ne brinite, možete ih izmijeniti kasnije u postavkama baze podataka. +- +- +- +- NewDatabaseWizardPageMetaData +- +- General Database Information +- Osnovne Inforrmacije Baze Podataka +- +- +- Please fill in the display name and an optional description for your new database: +- Unesite ime za prikaz i opcionalan opis za VaÅ¡u novu bazu podataka: +- +- +- +- NixUtils +- +- Password Manager +- Upravitelj Lozinki +- +- +- +- OpData01 +- +- Invalid OpData01, does not contain header +- +- +- +- Unable to read all IV bytes, wanted 16 but got %1 +- +- +- +- Unable to init cipher for opdata01: %1 +- +- +- +- Unable to read all HMAC signature bytes +- +- +- +- Malformed OpData01 due to a failed HMAC +- +- +- +- Unable to process clearText in place +- +- +- +- Expected %1 bytes of clear-text, found %2 +- +- +- +- +- OpVaultOpenWidget +- +- Read Database did not produce an instance +-%1 +- +- +- +- +- OpVaultReader +- +- Directory .opvault must exist +- +- +- +- Directory .opvault must be readable +- +- +- +- Directory .opvault/default must exist +- +- +- +- Directory .opvault/default must be readable +- +- +- +- Unable to decode masterKey: %1 +- +- +- +- Unable to derive master key: %1 +- +- +- +- +- OpenSSHKey +- +- Invalid key file, expecting an OpenSSH key +- +- +- +- PEM boundary mismatch +- +- +- +- Base64 decoding failed +- +- +- +- Key file way too small. +- +- +- +- Key file magic header id invalid +- +- +- +- Found zero keys +- +- +- +- Failed to read public key. +- +- +- +- Corrupted key file, reading private key failed +- +- +- +- No private key payload to decrypt +- +- +- +- Trying to run KDF without cipher +- +- +- +- Passphrase is required to decrypt this key +- +- +- +- Key derivation failed, key file corrupted? +- +- +- +- Decryption failed, wrong passphrase? +- +- +- +- Unexpected EOF while reading public key +- +- +- +- Unexpected EOF while reading private key +- +- +- +- Can't write public key as it is empty +- +- +- +- Unexpected EOF when writing public key +- +- +- +- Can't write private key as it is empty +- +- +- +- Unexpected EOF when writing private key +- +- +- +- Unsupported key type: %1 +- Nepodržana vrsta kljuÄa: %1 +- +- +- Unknown cipher: %1 +- +- +- +- Cipher IV is too short for MD5 kdf +- +- +- +- Unknown KDF: %1 +- Nepoznati KDF: %1 +- +- +- Unknown key type: %1 +- Nepoznata vrsta kljuÄa: %1 +- +- +- +- PasswordEdit +- +- Passwords do not match +- Lozinke se ne podudaraju +- +- +- Passwords match so far +- Lozinke se zasad podudaraju +- +- +- Toggle Password (%1) +- +- +- +- Generate Password (%1) +- Proizvedi Lozinku (%1) +- +- +- Warning: Caps Lock enabled! +- Upozorenje: Caps Lock ukljuÄen! +- +- +- +- PasswordEditWidget +- +- Enter password: +- Unesite lozinku: +- +- +- Confirm password: +- Potvrdite lozinku: +- +- +- Password +- Lozinka +- +- +- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> +- <p>Lozinka je primarna metoda za osiguravanje baze podataka.</p><p>Dobre lozinke su duge i jedinstvene. KeePassXC ju može proizvesti za vas.</p> +- +- +- Passwords do not match. +- Lozinke se ne podudaraju. +- +- +- Password field +- Polje lozinke +- +- +- Repeat password field +- Ponavljanje polja lozinke +- +- +- +- PasswordGeneratorWidget +- +- %p% +- %p% +- +- +- strength +- Password strength +- jaÄina +- +- +- entropy +- entropija +- +- +- Password +- Lozinka +- +- +- Character Types +- Vrste znakova +- +- +- Numbers +- Brojevi +- +- +- Extended ASCII +- ProÅ¡ireni ASCII +- +- +- Exclude look-alike characters +- Izostavi sliÄne znakove +- +- +- Pick characters from every group +- Odaberi znakove iz svake grupe +- +- +- &Length: +- &Duljina: +- +- +- Passphrase +- Zaporku +- +- +- Wordlist: +- Popis rijeÄi: +- +- +- Word Separator: +- +- +- +- Close +- Zatvori +- +- +- Entropy: %1 bit +- Entropija: %1 bit +- +- +- Password Quality: %1 +- Kvaliteta lozinke: %1 +- +- +- Poor +- Password quality +- Bijedna +- +- +- Weak +- Password quality +- Slaba +- +- +- Good +- Password quality +- Dobra +- +- +- Excellent +- Password quality +- Izvrsna +- +- +- Switch to advanced mode +- Prebaci na napredni naÄin +- +- +- Advanced +- Napredno +- +- +- Braces +- Zagrade +- +- +- Punctuation +- Interpunkcije +- +- +- Quotes +- Navodnici +- +- +- Logograms +- Logogrami +- +- +- Character set to exclude from generated password +- Skup znakova za izostaviti iz proizvodnje lozinke +- +- +- Do not include: +- +- +- +- Add non-hex letters to "do not include" list +- +- +- +- Hex +- +- +- +- Excluded characters: "0", "1", "l", "I", "O", "|", "ï¹’" +- Izostavi znakove: "0", "1", "l", "I", "O", "|", "". +- +- +- Generated password +- Proizvedena lozinka +- +- +- Upper-case letters +- Velika slova +- +- +- Lower-case letters +- Mala slova +- +- +- Special characters +- Posebni znakovi +- +- +- Math Symbols +- MatematiÄki simboli +- +- +- Dashes and Slashes +- Crtice i kose crte +- +- +- Excluded characters +- Izostavi znakove +- +- +- Hex Passwords +- Hex lozinke +- +- +- Password length +- Duljina lozinke +- +- +- Word Case: +- +- +- +- Regenerate password +- Ponovo proizvedi lozinku +- +- +- Copy password +- Kopiraj lozinku +- +- +- lower case +- mala slova +- +- +- UPPER CASE +- VELIKA SLOVA +- +- +- Title Case +- PoÄetno slovo +- +- +- Generate Password +- Proizvedi lozinku +- +- +- Also choose from: +- +- +- +- Additional characters to use for the generated password +- Dodatni znakovi za koriÅ¡tenje pri proizvodnji lozinke +- +- +- Additional characters +- Dodatni znakovi +- +- +- Word Count: +- Broj rijeÄi: +- +- +- Esc +- Esc +- +- +- Apply Password +- Primjeni Lozinku +- +- +- Ctrl+S +- Ctrl+S +- +- +- Regenerate password (%1) +- Ponovo proizvedi lozinku (%1) +- +- +- Special Characters +- Posebni znakovi +- +- +- +- QApplication +- +- KeeShare +- KeeShare +- +- +- Statistics +- Statistika +- +- +- Very weak password +- +- +- +- Password entropy is %1 bits +- Entropija lozinke je %1 bitova +- +- +- Weak password +- +- +- +- Used in %1/%2 +- +- +- +- Password is used %1 times +- +- +- +- Password has expired +- Lozinka je istekla +- +- +- Password expiry was %1 +- +- +- +- Password is about to expire +- Lozinka samo Å¡to nije istekla +- +- +- Password expires in %1 days +- Lozinka istjeÄe u %1 dana +- +- +- Password will expire soon +- Lozinka će uskoro isteći +- +- +- Password expires on %1 +- Lozinka istjeÄe na %1 +- +- +- Health Check +- +- +- +- HIBP +- HIBP +- +- +- +- QMessageBox +- +- Overwrite +- +- +- +- Delete +- IzbriÅ¡i +- +- +- Move +- Premjesti +- +- +- Empty +- Isprazni +- +- +- Remove +- Ukloni +- +- +- Skip +- PreskoÄi +- +- +- Disable +- Onemogući +- +- +- Merge +- Sjedini +- +- +- Continue +- Nastavi +- +- +- +- QObject +- +- Database not opened +- Baza podataka nije otvorena +- +- +- Database hash not available +- +- +- +- Client public key not received +- +- +- +- Cannot decrypt message +- +- +- +- Action cancelled or denied +- +- +- +- KeePassXC association failed, try again +- +- +- +- Encryption key is not recognized +- KljuÄ za Å¡ifriranje nije prepoznat +- +- +- Incorrect action +- +- +- +- Empty message received +- +- +- +- No URL provided +- +- +- +- No logins found +- +- +- +- Unknown error +- Nepoznata pogreÅ¡ka +- +- +- Add a new entry to a database. +- +- +- +- Path of the database. +- +- +- +- Key file of the database. +- +- +- +- path +- +- +- +- Username for the entry. +- KorisniÄko ime za stavku. +- +- +- username +- korisniÄko ime +- +- +- URL for the entry. +- +- +- +- URL +- URL +- +- +- Prompt for the entry's password. +- +- +- +- Generate a password for the entry. +- Proizvedi lozinku za stavku. +- +- +- length +- duljina +- +- +- Path of the entry to add. +- +- +- +- Path of the entry to clip. +- clip = copy to clipboard +- +- +- +- Timeout in seconds before clearing the clipboard. +- +- +- +- Edit an entry. +- Uredite stavku: +- +- +- Title for the entry. +- Naslov za stavku. +- +- +- title +- naslov +- +- +- Path of the entry to edit. +- +- +- +- Estimate the entropy of a password. +- Procijeni entropiju lozinke. +- +- +- Password for which to estimate the entropy. +- +- +- +- Perform advanced analysis on the password. +- +- +- +- +- +-Available commands: +- +- +- +-Dostupne naredbe: +- +- +- +- Name of the command to execute. +- Naziv naredbe za izvrÅ¡enje. +- +- +- List database entries. +- Nabroji stavke iz baze podataka. +- +- +- Path of the group to list. Default is / +- +- +- +- Find entries quickly. +- Brzo pronaÄ‘i stavke +- +- +- Search term. +- Pojam za pretraživanje. +- +- +- Merge two databases. +- Sjedini dvije baze podataka. +- +- +- Path of the database to merge from. +- Put baze podataka iz koje se treba sjediniti. +- +- +- Use the same credentials for both database files. +- +- +- +- Key file of the database to merge from. +- Datoteka kljuÄ baze podataka za spajanje. +- +- +- Show an entry's information. +- Prikaži informacije o stavci. +- +- +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- Nazivi svojstava za prikazati. Ova opcija može odreÄ‘ena viÅ¡e puta, sa svakim svojstvom prikazanim jednom po liniji u danom redoslijedu. Ako nijedno svojstvo nije navedeno, sažetak zadanih je dan. +- +- +- attribute +- svojstvo +- +- +- Name of the entry to show. +- Naziv stavke za prikazat. +- +- +- NULL device +- +- +- +- error reading from device +- +- +- +- malformed string +- +- +- +- missing closing quote +- +- +- +- Group +- Grupa +- +- +- Title +- Naslov +- +- +- Username +- KorisniÄko ime +- +- +- Password +- Lozinka +- +- +- Notes +- BiljeÅ¡ke +- +- +- Last Modified +- Posljednja izmjena +- +- +- Created +- Stvorio +- +- +- Browser Integration +- Integracija preglednika +- +- +- SSH Agent +- SSH Agent +- +- +- Generate a new random diceware passphrase. +- Proizvedi novu nasumiÄnu zaporku bacanjem kocke. +- +- +- Word count for the diceware passphrase. +- Broj rijeÄi za zaporke baÄene kockom. +- +- +- Wordlist for the diceware generator. +-[Default: EFF English] +- Popis rijeÄi za proizvoÄ‘aÄa bacanja kocki. +-[Zadano: EFF Engleski] +- +- +- Generate a new random password. +- Proizvedi novu nasumiÄnu lozinku. +- +- +- Could not create entry with path %1. +- +- +- +- Enter password for new entry: +- Unesite lozinku za novu stavku: +- +- +- Writing the database failed %1. +- +- +- +- Successfully added entry %1. +- UspjeÅ¡no dodana stavka %1. +- +- +- Invalid timeout value %1. +- Nevažeća vrijednost isteka vremena %1. +- +- +- Entry %1 not found. +- Stavka %1 nije pronaÄ‘en. +- +- +- Entry with path %1 has no TOTP set up. +- +- +- +- Clearing the clipboard in %1 second(s)... +- ÄŒišćenje meÄ‘uspremnik u %1 sekundi(s)...ÄŒišćenje meÄ‘uspremnik u %1 sekundi(s)...Brisanje meÄ‘uspremnik u %1 sekunde(i)... +- +- +- Clipboard cleared! +- MeÄ‘uspremnik obrisan! +- +- +- Silence password prompt and other secondary outputs. +- +- +- +- count +- CLI parameter +- +- +- +- Could not find entry with path %1. +- +- +- +- Not changing any field for entry %1. +- +- +- +- Enter new password for entry: +- +- +- +- Writing the database failed: %1 +- +- +- +- Successfully edited entry %1. +- +- +- +- Length %1 +- Duljina %1 +- +- +- Entropy %1 +- Entropija %1 +- +- +- Log10 %1 +- Log10 %1 +- +- +- Multi-word extra bits %1 +- +- +- +- Type: Bruteforce +- +- +- +- Type: Dictionary +- +- +- +- Type: Dict+Leet +- +- +- +- Type: User Words +- +- +- +- Type: User+Leet +- +- +- +- Type: Repeated +- +- +- +- Type: Sequence +- Vrsta: Redoslijed +- +- +- Type: Spatial +- +- +- +- Type: Date +- +- +- +- Type: Bruteforce(Rep) +- +- +- +- Type: Dictionary(Rep) +- +- +- +- Type: Dict+Leet(Rep) +- +- +- +- Type: User Words(Rep) +- +- +- +- Type: User+Leet(Rep) +- +- +- +- Type: Repeated(Rep) +- +- +- +- Type: Sequence(Rep) +- Vrsta: Redoslijed (Ponavljajući) +- +- +- Type: Spatial(Rep) +- +- +- +- Type: Date(Rep) +- +- +- +- Type: Unknown%1 +- +- +- +- Entropy %1 (%2) +- Entropija %1 (%2) +- +- +- *** Password length (%1) != sum of length of parts (%2) *** +- +- +- +- Failed to load key file %1: %2 +- +- +- +- Length of the generated password +- Duljina porizvedene lozinke +- +- +- Use lowercase characters +- Koristi mala slova +- +- +- Use uppercase characters +- Koristi velika slova +- +- +- Use special characters +- Koristi posebne znakove +- +- +- Use extended ASCII +- Koristi proÅ¡ireni ASCII +- +- +- Exclude character set +- Izostavi skup znakova +- +- +- chars +- znak +- +- +- Exclude similar looking characters +- Izostavi sliÄne znakove +- +- +- Include characters from every selected group +- +- +- +- Recursively list the elements of the group. +- +- +- +- Cannot find group %1. +- +- +- +- Error reading merge file: +-%1 +- +- +- +- Unable to save database to file : %1 +- +- +- +- Unable to save database to file: %1 +- +- +- +- Successfully recycled entry %1. +- +- +- +- Successfully deleted entry %1. +- +- +- +- Show the entry's current TOTP. +- Prikaži trenutni TOTP stavke. +- +- +- ERROR: unknown attribute %1. +- POGREÅ KA: nepoznato svojstvo %1. +- +- +- No program defined for clipboard manipulation +- +- +- +- file empty +- datoteka prazna +- +- +- %1: (row, col) %2,%3 +- %1: (redak, stupac) %2,%3 +- +- +- AES-KDF (KDBX 4) +- AES-KDF (KDBX 4) +- +- +- AES-KDF (KDBX 3.1) +- AES-KDF (KDBX 3.1) +- +- +- Invalid Settings +- TOTP +- Nevažeće postavke +- +- +- Invalid Key +- TOTP +- Nevažeći kljuÄ +- +- +- Message encryption failed. +- +- +- +- No groups found +- Nijedna grupa nije pronaÄ‘ene +- +- +- Create a new database. +- Stvori novu bazu podataka. +- +- +- File %1 already exists. +- Datoteka %1 već postoji. +- +- +- Loading the key file failed +- +- +- +- No key is set. Aborting database creation. +- +- +- +- Failed to save the database: %1. +- +- +- +- Successfully created new database. +- UspjeÅ¡no stvorena nova baza podataka. +- +- +- Creating KeyFile %1 failed: %2 +- +- +- +- Loading KeyFile %1 failed: %2 +- +- +- +- Path of the entry to remove. +- +- +- +- Existing single-instance lock file is invalid. Launching new instance. +- +- +- +- The lock file could not be created. Single-instance mode disabled. +- +- +- +- KeePassXC - cross-platform password manager +- +- +- +- filenames of the password databases to open (*.kdbx) +- +- +- +- path to a custom config file +- +- +- +- key file of the database +- +- +- +- read password of the database from stdin +- +- +- +- Another instance of KeePassXC is already running. +- +- +- +- Fatal error while testing the cryptographic functions. +- +- +- +- KeePassXC - Error +- KeePassXC - PogreÅ¡ka +- +- +- Database password: +- Lozinka baze podataka: +- +- +- Cannot create new group +- +- +- +- Deactivate password key for the database. +- +- +- +- Displays debugging information. +- +- +- +- Deactivate password key for the database to merge from. +- +- +- +- Version %1 +- Verzija %1 +- +- +- Build Type: %1 +- Vrsta gradnje: %1 +- +- +- Revision: %1 +- Revizija: %1 +- +- +- Distribution: %1 +- Distribucija: %1 +- +- +- Debugging mode is disabled. +- +- +- +- Debugging mode is enabled. +- NaÄin za otklanjanje pogreÅ¡aka je omogućen. +- +- +- Operating system: %1 +-CPU architecture: %2 +-Kernel: %3 %4 +- +- +- +- Auto-Type +- Auto-tipkanje +- +- +- KeeShare (signed and unsigned sharing) +- +- +- +- KeeShare (only signed sharing) +- +- +- +- KeeShare (only unsigned sharing) +- +- +- +- YubiKey +- YubiKey +- +- +- TouchID +- TouchID +- +- +- None +- Nijedan +- +- +- Enabled extensions: +- Omogućena proÅ¡irenja: +- +- +- Cryptographic libraries: +- +- +- +- Cannot generate a password and prompt at the same time! +- Nemoguće je proizvesti i zatražiti lozinku istovremeno! +- +- +- Adds a new group to a database. +- +- +- +- Path of the group to add. +- +- +- +- Group %1 already exists! +- Grupa %1 već postoji! +- +- +- Group %1 not found. +- Grupa %1 nije pronaÄ‘ena. +- +- +- Successfully added group %1. +- UspjeÅ¡no dodana grupa %1. +- +- +- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. +- +- +- +- FILENAME +- +- +- +- Analyze passwords for weaknesses and problems. +- +- +- +- Failed to open HIBP file %1: %2 +- Otvaranja HIBP datoteke nije uspjelo %1: %2 +- +- +- Evaluating database entries against HIBP file, this will take a while... +- +- +- +- Close the currently opened database. +- +- +- +- Display this help. +- +- +- +- slot +- utor +- +- +- Invalid word count %1 +- Nevažeći broj rijeÄi %1 +- +- +- The word list is too small (< 1000 items) +- +- +- +- Exit interactive mode. +- +- +- +- Exports the content of a database to standard output in the specified format. +- +- +- +- Unable to export database to XML: %1 +- +- +- +- Unsupported format %1 +- Nepodržan format %1 +- +- +- Use numbers +- Koristi brojeva +- +- +- Invalid password length %1 +- Nevažeća duljina lozinke %1 +- +- +- Display command help. +- Pogledaj pomoć za naredbe. +- +- +- Available commands: +- Dostupne naredbe: +- +- +- Import the contents of an XML database. +- Uvezite sadržaj XML baze podataka. +- +- +- Path of the XML database export. +- +- +- +- Path of the new database. +- +- +- +- Successfully imported database. +- UspjeÅ¡no uvezena baza podataka. +- +- +- Unknown command %1 +- Nepoznata naredba %1 +- +- +- Flattens the output to single lines. +- +- +- +- Only print the changes detected by the merge operation. +- +- +- +- Yubikey slot for the second database. +- +- +- +- Successfully merged %1 into %2. +- UspjeÅ¡no sjedinio %1 u %2. +- +- +- Database was not modified by merge operation. +- Baza podataka nije izmijenjena operacijom spajanja. +- +- +- Moves an entry to a new group. +- +- +- +- Path of the entry to move. +- +- +- +- Path of the destination group. +- +- +- +- Could not find group with path %1. +- +- +- +- Entry is already in group %1. +- +- +- +- Successfully moved entry %1 to group %2. +- +- +- +- Open a database. +- Otvori bazu podataka. +- +- +- Path of the group to remove. +- +- +- +- Cannot remove root group from database. +- +- +- +- Successfully recycled group %1. +- +- +- +- Successfully deleted group %1. +- +- +- +- Failed to open database file %1: not found +- +- +- +- Failed to open database file %1: not a plain file +- +- +- +- Failed to open database file %1: not readable +- +- +- +- Enter password to unlock %1: +- +- +- +- Invalid YubiKey slot %1 +- +- +- +- Enter password to encrypt database (optional): +- +- +- +- HIBP file, line %1: parse error +- +- +- +- Secret Service Integration +- +- +- +- User name +- KorisniÄko ime +- +- +- Password for '%1' has been leaked %2 time(s)! +- +- +- +- Invalid password generator after applying all options +- +- +- +- Show the protected attributes in clear text. +- Prikaži zaÅ¡tićena svojstva u Äitljivom tekstu. +- +- +- Browser Plugin Failure +- +- +- +- Could not save the native messaging script file for %1. +- +- +- +- Copy the given attribute to the clipboard. Defaults to "password" if not specified. +- +- +- +- Copy the current TOTP to the clipboard (equivalent to "-a totp"). +- +- +- +- Copy an entry's attribute to the clipboard. +- Kopirajte svojstvo stavke u meÄ‘uspremnik. +- +- +- ERROR: Please specify one of --attribute or --totp, not both. +- POGREÅ KA: Navedite jedan od --svojstvo ili --totp, a ne oboje. +- +- +- ERROR: attribute %1 is ambiguous, it matches %2. +- POGREÅ KA: svojstvo %1 je dvosmisleno, odgovara %2. +- +- +- Attribute "%1" not found. +- Svojstvo "%1" nije pronaÄ‘eno. +- +- +- Entry's "%1" attribute copied to the clipboard! +- Svojstvo "%1" stavke kopirano u meÄ‘uspremnik! +- +- +- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). +- +- +- +- slot[:serial] +- +- +- +- Target decryption time in MS for the database. +- +- +- +- time +- vrijeme +- +- +- Set the key file for the database. +- Postavite datoteku kljuÄa za bazu podataka. +- +- +- Set a password for the database. +- Postavite lozinku za bazu podataka. +- +- +- Invalid decryption time %1. +- +- +- +- Target decryption time must be between %1 and %2. +- +- +- +- Failed to set database password. +- +- +- +- Benchmarking key derivation function for %1ms delay. +- +- +- +- Setting %1 rounds for key derivation function. +- +- +- +- error while setting database key derivation settings. +- +- +- +- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. +- +- +- +- Unable to import XML database: %1 +- +- +- +- Show a database's information. +- Prikaži informacije o bazi podataka. +- +- +- UUID: +- UUID: +- +- +- Name: +- Naziv: +- +- +- Description: +- Opis: +- +- +- Cipher: +- +- +- +- KDF: +- KDF: +- +- +- Recycle bin is enabled. +- KoÅ¡ za smeće je omogućen. +- +- +- Recycle bin is not enabled. +- KoÅ¡ za smeće nije omogućen. +- +- +- Invalid command %1. +- +- +- +- Invalid YubiKey serial %1 +- +- +- +- Please touch the button on your YubiKey to continue… +- +- +- +- Do you want to create a database with an empty password? [y/N]: +- +- +- +- Repeat password: +- Ponovite lozinku: +- +- +- Error: Passwords do not match. +- PogreÅ¡ka: Lozinke se ne podudaraju. +- +- +- All clipping programs failed. Tried %1 +- +- +- +- +- AES (%1 rounds) +- +- +- +- AES 256-bit +- AES 256-bit +- +- +- Twofish 256-bit +- Twofish 256-bit +- +- +- ChaCha20 256-bit +- ChaCha20: 256-bit {20 256-?} +- +- +- Benchmark %1 delay +- +- +- +- %1 ms +- milliseconds +- %1 ms%1 ms%1 ms +- +- +- %1 s +- seconds +- %1 s%1 s%1 s +- +- +- path to a custom local config file +- +- +- +- WARNING: You are using an old key file format which KeePassXC may +-stop supporting in the future. +- +-Please consider generating a new key file. +- +- +- +- Argon2%1 (%2 rounds, %3 KB) +- +- +- +- Argon2d (KDBX 4 – recommended) +- +- +- +- Argon2id (KDBX 4) +- +- +- +- TOTP +- TOTP +- +- +- Icon +- Ikona +- +- +- Unsupported key file version: %1 +- +- +- +- Checksum mismatch! Key file may be corrupt. +- +- +- +- Unexpected key file data! Key file may be corrupt. +- +- +- +- +- QtIOCompressor +- +- Internal zlib error when compressing: +- +- +- +- Error writing to underlying device: +- +- +- +- Error opening underlying device: +- +- +- +- Error reading data from underlying device: +- +- +- +- Internal zlib error when decompressing: +- +- +- +- +- QtIOCompressor::open +- +- The gzip format not supported in this version of zlib. +- +- +- +- Internal zlib error: +- +- +- +- +- ReportsWidgetHealthcheck +- +- Also show entries that have been excluded from reports +- Prikaži stavke koje su zostavljene iz izvješća +- +- +- Hover over reason to show additional details. Double-click entries to edit. +- Zadržite pokazivaÄ iznad razloga da biste prikazali dodatne pojedinosti. Dvaput kliknite stavke za ureÄ‘ivanje. +- +- +- Bad +- Password quality +- +- +- +- Bad — password must be changed +- +- +- +- Poor +- Password quality +- bijedna +- +- +- Poor — password should be changed +- +- +- +- Weak +- Password quality +- Slaba +- +- +- Weak — consider changing the password +- +- +- +- (Excluded) +- (Izuzeto) +- +- +- This entry is being excluded from reports +- Ova stavka će biti izuzeta iz izvješća +- +- +- Please wait, health data is being calculated... +- +- +- +- Congratulations, everything is healthy! +- +- +- +- Title +- Naslov +- +- +- Path +- Put +- +- +- Score +- +- +- +- Reason +- Razlog +- +- +- Edit Entry... +- Uredi Stavku... +- +- +- Exclude from reports +- Izuzmi iz izvješća +- +- +- +- ReportsWidgetHibp +- +- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. +- +- +- +- Perform Online Analysis +- +- +- +- Also show entries that have been excluded from reports +- Prikaži stavke koje su zostavljene iz izvješća +- +- +- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. +- +- +- +- Congratulations, no exposed passwords! +- +- +- +- Title +- Naslov +- +- +- Path +- Put +- +- +- Password exposed… +- Lozinka izložena... +- +- +- (Excluded) +- (Izuzeto) +- +- +- This entry is being excluded from reports +- Ova stavka će biti izuzeta iz izvješća +- +- +- once +- jednom +- +- +- up to 10 times +- do 10 puta +- +- +- up to 100 times +- do 100 puta +- +- +- up to 1000 times +- do 1000 puta +- +- +- up to 10,000 times +- do 10,000 puta +- +- +- up to 100,000 times +- do 100,000 puta +- +- +- up to a million times +- do milijun puta +- +- +- millions of times +- milijune puta +- +- +- Edit Entry... +- Uredi Stavku... +- +- +- Exclude from reports +- Izuzmi iz izvješća +- +- +- +- ReportsWidgetStatistics +- +- Hover over lines with error icons for further information. +- +- +- +- Name +- Naziv +- +- +- Value +- Vrijednost +- +- +- Please wait, database statistics are being calculated... +- +- +- +- Database name +- Naziv baze podataka +- +- +- Description +- Opis +- +- +- Location +- Lokacija +- +- +- Last saved +- +- +- +- Unsaved changes +- +- +- +- yes +- da +- +- +- no +- ne +- +- +- The database was modified, but the changes have not yet been saved to disk. +- Baza podataka je izmijenjena, ali promjene joÅ¡ nisu spremljene na disk. +- +- +- Number of groups +- Broj grupa +- +- +- Number of entries +- Broj stavki +- +- +- Number of expired entries +- +- +- +- The database contains entries that have expired. +- +- +- +- Unique passwords +- Unikatne Lozinke +- +- +- Non-unique passwords +- Neunikatne lozinke +- +- +- More than 10% of passwords are reused. Use unique passwords when possible. +- ViÅ¡e of 10% lozinki je viÅ¡e puta upotrebljeno. Koistite unikatne lozinke ako je to moguće. +- +- +- Maximum password reuse +- +- +- +- Some passwords are used more than three times. Use unique passwords when possible. +- +- +- +- Number of short passwords +- +- +- +- Recommended minimum password length is at least 8 characters. +- Minimalna preporuÄena duljina lozinke je barem 8 znakova. +- +- +- Number of weak passwords +- +- +- +- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. +- +- +- +- Entries excluded from reports +- Stavke izuzete iz izvješća +- +- +- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. +- +- +- +- Average password length +- ProsjeÄna duljina lozinke +- +- +- %1 characters +- +- +- +- Average password length is less than ten characters. Longer passwords provide more security. +- +- +- +- +- SSHAgent +- +- Agent connection failed. +- +- +- +- Agent protocol error. +- +- +- +- No agent running, cannot add identity. +- +- +- +- No agent running, cannot remove identity. +- +- +- +- Agent refused this identity. Possible reasons include: +- +- +- +- The key has already been added. +- +- +- +- Restricted lifetime is not supported by the agent (check options). +- +- +- +- A confirmation request is not supported by the agent (check options). +- +- +- +- Key identity ownership conflict. Refusing to add. +- +- +- +- No agent running, cannot list identities. +- +- +- +- +- SearchHelpWidget +- +- Search Help +- +- +- +- Search terms are as follows: [modifiers][field:]["]term["] +- +- +- +- Every search term must match (ie, logical AND) +- +- +- +- Modifiers +- Parametri +- +- +- exclude term from results +- izostavi pojam iz rezultata +- +- +- match term exactly +- +- +- +- use regex in term +- +- +- +- Fields +- +- +- +- Term Wildcards +- +- +- +- match anything +- +- +- +- match one +- +- +- +- logical OR +- +- +- +- Examples +- Primjeri +- +- +- +- SearchWidget +- +- Search +- Traži +- +- +- Limit search to selected group +- +- +- +- Search Help +- +- +- +- Search (%1)... +- Search placeholder text, %1 is the keyboard shortcut +- +- +- +- Case sensitive +- +- +- +- +- SettingsWidgetFdoSecrets +- +- Options +- Opcije +- +- +- Enable KeepassXC Freedesktop.org Secret Service integration +- +- +- +- General +- Generalno +- +- +- Show notification when credentials are requested +- Prikaži obavijest kada se zatraže podaci za prijavu +- +- +- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> +- +- +- +- Exposed database groups: +- +- +- +- Authorization +- +- +- +- These applications are currently connected: +- +- +- +- Don't confirm when entries are deleted by clients +- +- +- +- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. +- +- +- +- <b>Warning:</b> +- <b>Upozorenje:</b> +- +- +- Save current changes to activate the plugin and enable editing of this section. +- +- +- +- +- SettingsWidgetKeeShare +- +- Active +- Aktivni +- +- +- Allow export +- Dopusti izvoz +- +- +- Allow import +- Dopusti uvoz +- +- +- Own certificate +- +- +- +- Fingerprint: +- +- +- +- Certificate: +- +- +- +- Signer +- +- +- +- Key: +- KljuÄ: +- +- +- Generate +- Proizvedi +- +- +- Import +- Uvezi +- +- +- Export +- Izvezi +- +- +- Imported certificates +- Uvezeni certifikat +- +- +- Trust +- +- +- +- Ask +- Pitaj +- +- +- Untrust +- +- +- +- Remove +- Ukloni +- +- +- Path +- Put +- +- +- Status +- Status +- +- +- Fingerprint +- Otisak +- +- +- Certificate +- +- +- +- Trusted +- +- +- +- Untrusted +- +- +- +- Unknown +- Nepoznat +- +- +- key.share +- Filetype for KeeShare key +- +- +- +- KeeShare key file +- KeeShare datoteka kljuÄa +- +- +- All files +- Sve datoteke +- +- +- Select path +- +- +- +- Exporting changed certificate +- +- +- +- The exported certificate is not the same as the one in use. Do you want to export the current certificate? +- +- +- +- Signer: +- +- +- +- Allow KeeShare imports +- Dopusti uvoz KeeShare-a +- +- +- Allow KeeShare exports +- Dopusti izvoz KeeShare-a +- +- +- Only show warnings and errors +- Prikaži samo upozorenja i pogreÅ¡ke +- +- +- Key +- KljuÄ +- +- +- Signer name field +- +- +- +- Generate new certificate +- Proizvedi novi cerrtifikat +- +- +- Import existing certificate +- +- +- +- Export own certificate +- +- +- +- Known shares +- +- +- +- Trust selected certificate +- +- +- +- Ask whether to trust the selected certificate every time +- +- +- +- Untrust selected certificate +- +- +- +- Remove selected certificate +- +- +- +- +- ShareExport +- +- Overwriting signed share container is not supported - export prevented +- +- +- +- Could not write export container (%1) +- +- +- +- Could not embed signature: Could not open file to write (%1) +- +- +- +- Could not embed signature: Could not write file (%1) +- +- +- +- Could not embed database: Could not open file to write (%1) +- +- +- +- Could not embed database: Could not write file (%1) +- +- +- +- Overwriting unsigned share container is not supported - export prevented +- +- +- +- Could not write export container +- +- +- +- Unexpected export error occurred +- +- +- +- +- ShareImport +- +- Import from container without signature +- +- +- +- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? +- +- +- +- Import from container with certificate +- +- +- +- Do you want to trust %1 with the fingerprint of %2 from %3? +- +- +- +- Not this time +- Ovaj put ne +- +- +- Never +- Nikad +- +- +- Always +- Uvijek +- +- +- Just this time +- Samo ovaj put +- +- +- Signed share container are not supported - import prevented +- +- +- +- File is not readable +- Datoteka nije Äitljiva +- +- +- Invalid sharing container +- +- +- +- Untrusted import prevented +- +- +- +- Successful signed import +- +- +- +- Unsigned share container are not supported - import prevented +- +- +- +- Successful unsigned import +- +- +- +- File does not exist +- Datoteka ne postoji +- +- +- Unknown share container type +- +- +- +- +- ShareObserver +- +- Import from %1 failed (%2) +- Uvoz iz %1 nije uspio (%2) +- +- +- Import from %1 successful (%2) +- Uvoz iz %1 uspjeÅ¡an (%2) +- +- +- Imported from %1 +- Uvezeno iz %1 +- +- +- Export to %1 failed (%2) +- Izvoz u %1 nije uspio (%2) +- +- +- Export to %1 successful (%2) +- Izvoz u %1 uspjeÅ¡an (%2) +- +- +- Export to %1 +- Izvezi u %1 +- +- +- Multiple import source path to %1 in %2 +- +- +- +- Conflicting export target path %1 in %2 +- +- +- +- +- TotpDialog +- +- Timed Password +- +- +- +- 000000 +- 000000 +- +- +- Copy +- Kopiraj +- +- +- Expires in <b>%n</b> second(s) +- IstjeÄe za <b>%n</b> sekunduIstjeÄe za <b>%n</b> sekundeIstjeÄe za <b>%n</b> sekundi +- +- +- +- TotpExportSettingsDialog +- +- Copy +- Kopiraj +- +- +- NOTE: These TOTP settings are custom and may not work with other authenticators. +- TOTP QR code dialog warning +- +- +- +- There was an error creating the QR code. +- +- +- +- Closing in %1 seconds. +- +- +- +- +- TotpSetupDialog +- +- Setup TOTP +- +- +- +- Default RFC 6238 token settings +- +- +- +- Steam token settings +- +- +- +- Use custom settings +- +- +- +- Custom Settings +- +- +- +- Time step: +- +- +- +- sec +- Seconds +- sek +- +- +- Code size: +- +- +- +- Secret Key: +- Tajni kljuÄ: +- +- +- Secret key must be in Base32 format +- +- +- +- Secret key field +- +- +- +- Algorithm: +- Algoritam: +- +- +- Time step field +- +- +- +- digits +- znamenke +- +- +- Invalid TOTP Secret +- +- +- +- You have entered an invalid secret key. The key must be in Base32 format. +-Example: JBSWY3DPEHPK3PXP +- +- +- +- Confirm Remove TOTP Settings +- +- +- +- Are you sure you want to delete TOTP settings for this entry? +- +- +- +- +- URLEdit +- +- Invalid URL +- Nevaljan URL +- +- +- +- UpdateCheckDialog +- +- Checking for updates +- Provjera dopuna +- +- +- Checking for updates... +- Provjera dopuna... +- +- +- Close +- Zatvori +- +- +- Update Error! +- +- +- +- An error occurred in retrieving update information. +- +- +- +- Please try again later. +- +- +- +- Software Update +- +- +- +- A new version of KeePassXC is available! +- Nova vezija KeePassXC-a je dostupna! +- +- +- KeePassXC %1 is now available — you have %2. +- +- +- +- Download it at keepassxc.org +- +- +- +- You're up-to-date! +- +- +- +- KeePassXC %1 is currently the newest version available +- +- +- +- +- WelcomeWidget +- +- Start storing your passwords securely in a KeePassXC database +- +- +- +- Create new database +- Stvori novu bazu podataka +- +- +- Open existing database +- Otvori postojeću bazu podataka +- +- +- Import from KeePass 1 +- Uvezi iz KeePass 1 +- +- +- Import from CSV +- +- +- +- Recent databases +- Nedavne baze podataka +- +- +- Welcome to KeePassXC %1 +- DobrodoÅ¡li u KeePassXC-e %1 +- +- +- Import from 1Password +- Uvezi iz 1Password +- +- +- Open a recent database +- Otvori nedavnu bazu podataka +- +- +- +- YubiKey +- +- %1 [%2] Configured Slot - %3 +- +- +- +- %1 [%2] Challenge Response - Slot %3 - %4 +- +- +- +- Press +- +- +- +- Passive +- +- +- +- %1 Invalid slot specified - %2 +- +- +- +- The YubiKey interface has not been initialized. +- YubiKey suÄelje nije pokrenuto. +- +- +- Hardware key is currently in use. +- Hardverski kljuÄ je trenutno u uporabi. +- +- +- Could not find hardware key with serial number %1. Please plug it in to continue. +- +- +- +- Hardware key timed out waiting for user interaction. +- +- +- +- A USB error ocurred when accessing the hardware key: %1 +- DoÅ¡lo je do USB greÅ¡ke prilikom pristupa hardverskom kljuÄu: %1 +- +- +- Failed to complete a challenge-response, the specific error was: %1 +- +- +- +- +- YubiKeyEditWidget +- +- Refresh +- Osvježi +- +- +- YubiKey Challenge-Response +- +- +- +- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- +- +- +- Refresh hardware tokens +- Osvježi hardverske tokene +- +- +- Hardware key slot selection +- +- +- +- Could not find any hardware keys! +- Nijedan hardverski kljuÄ nije pronaÄ‘en! +- +- +- Selected hardware key slot does not support challenge-response! +- +- +- +- Detecting hardware keys… +- Otkrivanje hardverskih kljuÄeva... +- +- +- No hardware keys detected +- Nijedan hardverski kljuÄ otkrivene +- +- +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_hu.ts keepassxc-2.6.4-patched/share/translations/keepassx_hu.ts +--- keepassxc-2.6.4-orig/share/translations/keepassx_hu.ts 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/translations/keepassx_hu.ts 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7894 +0,0 @@ +- +- +- AboutDialog +- +- About KeePassXC +- A KeePassXC névjegye +- +- +- About +- Névjegy +- +- +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- Hibajelentés: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- +- +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- A KeePassXC a GNU General Public License (GPL) 2-es vagy (válaszhatóan) 3-as verziója szerint kerül terjesztésre. +- +- +- Contributors +- KözreműködÅ‘k +- +- +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">KözreműködÅ‘k megtekintése a GitHubon</a> +- +- +- Debug Info +- Hibakeresési információk +- +- +- Include the following information whenever you report a bug: +- Minden hibajelentésnél legyenek mellékelve ezek az információk: +- +- +- Copy to clipboard +- Vágólapra másolás +- +- +- Project Maintainers: +- Projektkarbantartók: +- +- +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- A KeePassXC fejlesztÅ‘csapata ezúton külön köszönetet mond debfx-nek az eredetei KeePassX létrehozásáért. +- +- +- +- AgentSettingsWidget +- +- Use OpenSSH for Windows instead of Pageant +- OpenSSH alkalmazása Windowson a Pageant helyett +- +- +- Enable SSH Agent integration +- SSH-ügynök engedélyezése +- +- +- SSH_AUTH_SOCK value +- SSH_AUTH_SOCK értéke +- +- +- SSH_AUTH_SOCK override +- SSH_AUTH_SOCK felülírása +- +- +- (empty) +- (üres) +- +- +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- Nincs elérhetÅ‘ foglalat az SSH-ügynök számára. Vagy gyÅ‘zÅ‘djön meg arról, hogy létezik SSH_AUTH_SOCK környezeti változó, vagy állítson be egy felülírást. +- +- +- SSH Agent connection is working! +- Az SSH-ügynök kapcsolat működik! +- +- +- +- ApplicationSettingsWidget +- +- Application Settings +- Alkalmazásbeállítások +- +- +- General +- Ãltalános +- +- +- Security +- Biztonság +- +- +- Access error for config file %1 +- Hozzáférési hiba a beállítási fájlhoz: %1 +- +- +- Icon only +- Csak ikonok +- +- +- Text only +- Csak szöveg +- +- +- Text beside icon +- Szöveg az ikonok mellett +- +- +- Text under icon +- Szöveg az ikonok alatt +- +- +- Follow style +- Stílus követése +- +- +- Reset Settings? +- Beállítások visszaállítása? +- +- +- Are you sure you want to reset all general and security settings to default? +- Biztos, hogy vissza akarja állítani az összes általános és biztonsági beállítást az alapértelmezésre? +- +- +- Monochrome (light) +- Monokróm (világos) +- +- +- Monochrome (dark) +- Monokróm (sötét) +- +- +- Colorful +- Színes +- +- +- You must restart the application to set the new language. Would you like to restart now? +- Az új nyelv beállításának az érvényre kerüléséhez újra kell indítani az alkalmazást. Legyen azonnal újraindítva? +- +- +- +- ApplicationSettingsWidgetGeneral +- +- Basic Settings +- AlapvetÅ‘ beállítások +- +- +- Startup +- Indítás +- +- +- Start only a single instance of KeePassXC +- A KeePassXC többszörös indításának tiltása +- +- +- Minimize window at application startup +- Az ablak kicsinyítése indításkor +- +- +- File Management +- Fájlkezelés +- +- +- Backup database file before saving +- Készüljön biztonsági mentés az adatbázisról mentés elÅ‘tt +- +- +- Automatically save after every change +- Automatikus mentés minden módosítás után +- +- +- Automatically reload the database when modified externally +- KülsÅ‘ módosításkor az adatbázis automatikus újratöltése +- +- +- Entry Management +- Bejegyzéskezelés +- +- +- Use group icon on entry creation +- A csoport ikonjának használata a bejegyzés létrehozásakor +- +- +- Minimize instead of app exit +- Kilépés helyett minimalizálás +- +- +- Show a system tray icon +- Rendszertálca-ikon megjelenítése +- +- +- Hide window to system tray when minimized +- Az ablak rendszertálcára rejtése kicsinyítéskor +- +- +- Auto-Type +- Automatikus beírás +- +- +- Use entry title to match windows for global Auto-Type +- Bejegyzések címének alkalmazása az ablakok illesztésénél a globális automatikus beírás számára. +- +- +- Use entry URL to match windows for global Auto-Type +- Bejegyzések URL-jének alkalmazása az ablakok illesztésénél a globális automatikus beírás számára. +- +- +- Always ask before performing Auto-Type +- Mindig kérdezzen az automatikus beírás megkezdése elÅ‘tt +- +- +- ms +- Milliseconds +- ms +- +- +- Movable toolbar +- Mozgatható eszköztár +- +- +- Remember previously used databases +- Az elÅ‘zÅ‘leg használt adatbázisok megjegyzése +- +- +- Load previously open databases on startup +- Az elÅ‘zÅ‘leg feloldott adatbázisok betöltése indításkor +- +- +- Remember database key files and security dongles +- Adatbázis-kulcsfájlok és biztonsági hardverkulcsok megjegyzése +- +- +- Check for updates at application startup once per week +- Frissítések keresése hetente egyszer az alkalmazás indulásakor +- +- +- Include beta releases when checking for updates +- A frissítések keresése a béta kiadásokra is terjedjen ki +- +- +- Language: +- Nyelv: +- +- +- (restart program to activate) +- (újraindítás után akitválódik) +- +- +- Minimize window after unlocking database +- Ablak kicsinyítése az adatbázis feloldása után +- +- +- Minimize when opening a URL +- Kicsinyítés URL megnyitásakor +- +- +- Hide window when copying to clipboard +- Ablak elrejtése a vágólapra történÅ‘ másoláskor +- +- +- Minimize +- Kicsinyítés +- +- +- Drop to background +- Háttérbe dobás +- +- +- Favicon download timeout: +- Favicon letöltési idÅ‘túllépés: +- +- +- Website icon download timeout in seconds +- Weboldalikon letöltésének idÅ‘túllépése másodpercben +- +- +- sec +- Seconds +- mp +- +- +- Toolbar button style +- Eszköztár gombstílusa +- +- +- Language selection +- Nyelvválasztás +- +- +- Global auto-type shortcut +- Globális automatikus beírás gyorsbillentyűje +- +- +- Auto-type character typing delay milliseconds +- Automatikus karakterbeírás késleltetése milliszekundumban +- +- +- Auto-type start delay milliseconds +- Automatikus beírás indításának késleltetése milliszekundumban +- +- +- Automatically launch KeePassXC at system startup +- KeePassXC automatikus indítása a rendszer indulásakor +- +- +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- Adatbázisok biztonságos mentése (Dropbox-szal és hasonlókkal való probléma esetén letiltandó) +- +- +- User Interface +- Felhasználói felület +- +- +- Toolbar button style: +- Eszköztár gombstílusa: +- +- +- Use monospaced font for notes +- Jegyzetek rögzített szélességű betűkészlettel +- +- +- Tray icon type: +- Tálcaikon stílusa: +- +- +- Reset settings to default… +- Beállítások visszaállítása az alapértelmezettre… +- +- +- Auto-Type typing delay: +- Automatikus beírás késleltetése: +- +- +- Global Auto-Type shortcut: +- Globális automatikus beírás gyorsbillentyűje: +- +- +- Auto-Type start delay: +- Automatikus beírás kezdésének késleltetése: +- +- +- Automatically save when locking database +- Automatikus mentés adatbázis zárolásakor +- +- +- Automatically save non-data changes when locking database +- Nem adatváltozások automatikus mentése adatbázis zárolásakor +- +- +- Tray icon type +- Tálcaikon stílusa +- +- +- +- ApplicationSettingsWidgetSecurity +- +- Timeouts +- IdÅ‘túllépések +- +- +- Clear clipboard after +- Vágólap törlése ennyi idÅ‘ után +- +- +- sec +- Seconds +- mp +- +- +- Lock databases after inactivity of +- Adatbázis zárolása ennyi inaktivitás után +- +- +- min +- min +- +- +- Forget TouchID after inactivity of +- A TouchID elfelejtése ennyi tétlenség után: +- +- +- Convenience +- Kényelem +- +- +- Lock databases when session is locked or lid is closed +- Adatbázis zárolása munkamenet zárolásakor vagy a fedél lecsukásakor +- +- +- Forget TouchID when session is locked or lid is closed +- A TouchID elfelejtése a munkamenet zárolásakor vagy a fedél lehajtásakor +- +- +- Lock databases after minimizing the window +- Adatbázis zárolása az ablak lekicsinyítésekor +- +- +- Re-lock previously locked database after performing Auto-Type +- Az elÅ‘zÅ‘leg zárolt adatbázis újbóli zárolása automatikus beírást követÅ‘en +- +- +- Hide passwords in the entry preview panel +- Jelszavak elrejtése a bejegyzés elÅ‘nézeti panelen +- +- +- Hide entry notes by default +- Bejegyzések jegyzeteinek elrejtése alapértelmezetten +- +- +- Privacy +- Adatvédelem +- +- +- Use DuckDuckGo service to download website icons +- A DuckDuckGo alkalmazása a webhelyikonok letöltésére +- +- +- Clipboard clear seconds +- Vágólap törlése másodpercben +- +- +- Touch ID inactivity reset +- A TouchID tétlenségi visszaállítás +- +- +- Database lock timeout seconds +- Adatbázis zárolási idÅ‘túllépése másodpercben +- +- +- min +- Minutes +- min +- +- +- Clear search query after +- Keresési kifejezés törlése ennyi idÅ‘ után +- +- +- Require password repeat when it is visible +- Jelszóismétlés szükséges látható jelszó esetén +- +- +- Hide passwords when editing them +- Jelszavak elrejtése szerkesztés alatt +- +- +- Use placeholder for empty password fields +- Ãœres jelszómezÅ‘knél helykitöltÅ‘ alkalmazása +- +- +- +- AutoType +- +- Couldn't find an entry that matches the window title: +- Nem található olyan bejegyzés, amely illeszkedik az ablak címsorára: +- +- +- Auto-Type - KeePassXC +- Automatikus beírás – KeePassXC +- +- +- Auto-Type +- Automatikus beírás +- +- +- The Syntax of your Auto-Type statement is incorrect! +- Az automatikus beírás utasításszintaxisa helytelen! +- +- +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- Ez az automatikus beírás parancs nagyon hosszú késleltetést tartalmaz. Valóban folytatható? +- +- +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- Ez az automatikus beírás parancs nagyon lassú billentyűlenyomásokat tartalmaz. Valóban folytatható? +- +- +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- Ez az automatikus beírás parancs nagyon gyakran ismétlÅ‘dÅ‘ paramétert tartalmaz. Valóban folytatható? +- +- +- Permission Required +- Engedély szükséges +- +- +- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. +- A KeePassXC számára szükséges az elérhetÅ‘ségi jogosultság biztosítása a bejegyzésszintű automatikus beírás végrehajtásához. Ha ez a jogosultság már meg van adva, újra kell indtani a KeePassXC-t. +- +- +- +- AutoTypeAssociationsModel +- +- Window +- Ablak +- +- +- Sequence +- Sorrend +- +- +- Default sequence +- Alapértelmezett sorrend +- +- +- +- AutoTypeMatchModel +- +- Group +- Csoport +- +- +- Title +- Cím +- +- +- Username +- Felhasználónév +- +- +- Sequence +- Sorrend +- +- +- +- AutoTypeMatchView +- +- Copy &username +- &Felhasználónév másolása +- +- +- Copy &password +- &Jelszó másolása +- +- +- +- AutoTypePlatformMac +- +- Permission Required +- Engedély szükséges +- +- +- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. +- A KeePassXC számára szükséges az elérhetÅ‘ségi és a képernyÅ‘olvasási jogosultság biztosítása a globális szintű automatikus beírás végrehajtásához. A képernyÅ‘olvasás az ablakok címének megtalálásához szükséges a bejegyzések között. Ha ezek a jogosultságok már meg van adva, újra kell indtani a KeePassXC-t. +- +- +- +- AutoTypeSelectDialog +- +- Auto-Type - KeePassXC +- Automatikus beírás – KeePassXC +- +- +- Select entry to Auto-Type: +- Bejegyzés kijelölése automatikus beírásra: +- +- +- Search... +- Keresés… +- +- +- +- BrowserAccessControlDialog +- +- KeePassXC - Browser Access Request +- KeePassXC-böngészÅ‘ hozzáférési kérés +- +- +- %1 is requesting access to the following entries: +- %1 hozzáférést kér az alábbi bejegyzésekhez: +- +- +- Remember access to checked entries +- Kijelölt bejegyzések hozzáférési engedélyezésének megjegyzése +- +- +- Remember +- Megjegyzés +- +- +- Allow access to entries +- Engedély megadása a bejegyzésekhez +- +- +- Allow Selected +- Kijelöltek engedélyezése +- +- +- Deny All +- Összes megtagadása +- +- +- Disable for this site +- Letiltás ezen az oldalon +- +- +- +- BrowserEntrySaveDialog +- +- KeePassXC-Browser Save Entry +- KeePassXC-böngészÅ‘ bejegyzés mentése +- +- +- Ok +- Ok +- +- +- Cancel +- Mégse +- +- +- You have multiple databases open. +-Please select the correct database for saving credentials. +- Több adatbázis van nyitva. +-Válassza ki a helyes adatbázist a hitelesítÅ‘ adatok mentéséhez. +- +- +- +- BrowserService +- +- KeePassXC: New key association request +- KeePassXC: Új kulcstársítási kérés +- +- +- Save and allow access +- Engedélyezési hozzáférés mentése +- +- +- KeePassXC: Overwrite existing key? +- KeePassXC: Felülírja a létezÅ‘ kulcsot? +- +- +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- Létezik már egy megosztott titkosítási kulcs ezzel a névvel: „%1â€. +-Valóban felülírható? +- +- +- KeePassXC: Update Entry +- KeePassXC: Bejegyzés frissítése +- +- +- Do you want to update the information in %1 - %2? +- Frissíti az információt ebben: %1 – %2? +- +- +- Abort +- Megszakítás +- +- +- Converting attributes to custom data… +- Attribútumok átalakítása egyéni adatokká… +- +- +- KeePassXC: Converted KeePassHTTP attributes +- KeePassXC: Ãtalakított KeePassHTTP attribútumok +- +- +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- Attribútumok sikeresen átalakítva %1 bejegyzésbÅ‘l. +-%2 kulcs áthelyezve az egyéni adatokhoz. +- +- +- Successfully moved %n keys to custom data. +- %n kulcs sikeresen áthelyezve az egyéni adatokhoz.%n kulcs sikeresen áthelyezve az egyéni adatokhoz. +- +- +- KeePassXC: No entry with KeePassHTTP attributes found! +- KeePassXC: Nem található bejegyzés KeePassHTTP attribútumokkal! +- +- +- The active database does not contain an entry with KeePassHTTP attributes. +- Az aktív adatbázisban nincs egyetlen KeePassHTTP attribútumokat tartalmazó bejegyzés sem. +- +- +- KeePassXC: Legacy browser integration settings detected +- KeePassXC: Örökölt böngészÅ‘integrációs beállítások észlelve +- +- +- KeePassXC: Create a new group +- KeePassXC: Új csoport létrehozása +- +- +- A request for creating a new group "%1" has been received. +-Do you want to create this group? +- +- Az új „%1†csoport létrehozási kérése fogadva. +-Biztos, hogy létrehozza ezt a csoportot? +- +- +- Your KeePassXC-Browser settings need to be moved into the database settings. +-This is necessary to maintain your current browser connections. +-Would you like to migrate your existing settings now? +- A KeePassXC-Browser beállításait át kell helyezni az adatbázis-beállításokba. +-Ez szükséges a jelenlegi böngészÅ‘kapcsolatok fenntartásához. +-Biztos, hogy migrálja most a meglévÅ‘ beállításokat? +- +- +- Don't show this warning again +- Ne jelenjen meg többé a figyelmeztetés +- +- +- You have received an association request for the following database: +-%1 +- +-Give the connection a unique name or ID, for example: +-chrome-laptop. +- A következÅ‘ adatbázishoz társítási kérelem érkezett: +-%1 +- +-A kapcsolatnak egy olyan egyedi nevet, ill. azonosítót szükség adni, mint amilyen pl. a „chrome-laptopâ€. +- +- +- +- +- BrowserSettingsWidget +- +- Dialog +- Párbeszédablak +- +- +- This is required for accessing your databases with KeePassXC-Browser +- Ez szükséges az adatbázis KeePassXC-böngészÅ‘bÅ‘l történÅ‘ eléréséhez +- +- +- Enable browser integration +- BöngészÅ‘integráció engedélyezése +- +- +- General +- Ãltalános +- +- +- Browsers installed as snaps are currently not supported. +- A snappal telepített böngészÅ‘k jelenleg nem támogatottak. +- +- +- Enable integration for these browsers: +- BöngészÅ‘integráció engedélyezése a következÅ‘khöz: +- +- +- Vivaldi +- Vivaldi +- +- +- &Edge +- &Edge +- +- +- Firefox +- Firefox +- +- +- Tor Browser +- Tor böngészÅ‘ +- +- +- Brave +- Brave +- +- +- Google Chrome +- &Google Chrome +- +- +- Chromium +- Chromium +- +- +- Show a notification when credentials are requested +- Credentials mean login data requested via browser extension +- Értesítés megjelenítése hitelesítési adatok kérésekor +- +- +- Request to unlock the database if it is locked +- Adatbázis feloldási kérelem, ha zárolva van +- +- +- Only entries with the same scheme (http://, https://, ...) are returned. +- Csak az azonos sémájú (http://, https://, …) bejegyzések visszaadása. +- +- +- Match URL scheme (e.g., https://...) +- URL sémákra illeszkedés (pl. https://…) +- +- +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- Egy konkrét URL-hez tartozó legjobb találatokat adja vissza, a teljes domainhoz tartozó összes bejegyzés helyett. +- +- +- Return only best-matching credentials +- Csak a legjobb hitelesítési adatok visszaadása +- +- +- Returns expired credentials. String [expired] is added to the title. +- A lejárt hitelesítési adatok visszaadása. A [lejárt] szöveg hozzá lesz adva a címhez. +- +- +- Allow returning expired credentials +- Lejárt hitelesítési adatok visszaadásának engedélyezése +- +- +- All databases connected to the extension will return matching credentials. +- Minden a kiterjesztéshez csatlakoztatott böngészÅ‘ visszaadja az illeszkedÅ‘ hitelesítési adatokat. +- +- +- Search in all opened databases for matching credentials +- Credentials mean login data requested via browser extension +- Keresés minden megnyitott adatbázis hitelesítési adataiban +- +- +- Sort matching credentials by title +- Credentials mean login data requested via browser extension +- IlleszkedÅ‘ hitelesítési adatok rendezése cím szerint +- +- +- Sort matching credentials by username +- Credentials mean login data requested via browser extension +- IlleszkedÅ‘ hitelesítési adatok rendezése felhasználónév szerint +- +- +- Advanced +- Speciális +- +- +- Never ask before accessing credentials +- Credentials mean login data requested via browser extension +- Hozzáférési adatok elérése elÅ‘tt soha ne kérdezzen +- +- +- Never ask before updating credentials +- Credentials mean login data requested via browser extension +- Hozzáférési adatok frissítése elÅ‘tt soha ne kérdezzen +- +- +- Do not ask permission for HTTP Basic Auth +- An extra HTTP Basic Auth setting +- Ne kérjen engedélyt a HTTP Basic Auth számára +- +- +- Automatically creating or updating string fields is not supported. +- A karakterlánc mezÅ‘k automatikus létrehozása vagy frissítése nem támogatott. +- +- +- Return advanced string fields which start with "KPH: " +- A „KPH:â€-val kezdÅ‘dÅ‘ fejlett karakterlánc mezÅ‘k visszaadása +- +- +- Don't display the popup suggesting migration of legacy KeePassHTTP settings. +- Ne jelenjen meg a felugró ablak a örökölt KeePassHTTP beállításokból való költözésrÅ‘l. +- +- +- Do not prompt for KeePassHTTP settings migration. +- Ne kérdezzen a KeePassHTTP beállításokból való költözésrÅ‘l +- +- +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- Indításkor automatikusan frissíti a KeePassXC vagy a keepassxc-proxy bináris útvonalát a natív üzenetküldÅ‘ parancsfájlok felé. +- +- +- Update native messaging manifest files at startup +- Natív üzenetküldÅ‘ manifest-fájlok frissítése indításkor +- +- +- Use a custom proxy location if you installed a proxy manually. +- Egyéni proxyhelyet kell beállítani manuálisan telepített proxy esetén. +- +- +- Use a custom proxy location: +- Meant is the proxy for KeePassXC-Browser +- Egyéni proxyhely alkalmazása: +- +- +- Custom proxy location field +- Egyéni proxyhely mezÅ‘ +- +- +- Browser for custom proxy file +- Egyéni proxyfájl böngészÅ‘je +- +- +- Browse... +- Button for opening file dialog +- Tallózás… +- +- +- Use a custom browser configuration location: +- Egyéni böngészÅ‘beállítási hely alkalmazása: +- +- +- Browser type: +- BöngészÅ‘típus: +- +- +- Toolbar button style +- Eszköztár gombstílusa +- +- +- Config Location: +- Beállítási hely: +- +- +- Custom browser location field +- Egyéni böngészÅ‘ helymezÅ‘ +- +- +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- +- +- Browse for custom browser path +- BöngészÅ‘ egyéni eléri útvonalának tallózása +- +- +- Custom extension ID: +- Egyéni kiterjesztésazonosító: +- +- +- Custom extension ID +- Egyéni kiterjesztésazonosító +- +- +- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 +- A Snap homokozó miatt egy parancsfájlt kell futtatni a böngészÅ‘integráció engedélyezéséhez.<br />Ezt innen szerezheti be: %1 +- +- +- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 +- A böngészÅ‘integráció működéséhez a KeePassXC-böngészÅ‘re van szükség. <br />LetölthetÅ‘ ezen böngészÅ‘kre: %1, %2, %3, 4% +- +- +- Please see special instructions for browser extension use below +- Olvassa el a böngészÅ‘kiegészítÅ‘ használatáról szóló különleges utasításokat alább +- +- +- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. +- <b>Hiba:</b> Az egyéni proxyhely nem található! +-<br/>A böngészÅ‘integráció NEM FOG MÅ°KÖDNI a proxy-alkalmazás nélkül. +- +- +- <b>Warning:</b> The following options can be dangerous! +- <b>Figyelmeztetés:</b> A következÅ‘ beállítások veszélyesek lehetnek! +- +- +- Executable Files +- Végrehajtható fájlok +- +- +- All Files +- Minden fájl +- +- +- Select custom proxy location +- Egyéni proxyhely kijelölése +- +- +- Select native messaging host folder location +- Jelölje ki a natív üzenetküldési kiszolgálót tartalmazó mappát +- +- +- +- CloneDialog +- +- Clone Options +- Beállítások klónozása +- +- +- Append ' - Clone' to title +- „- klón†hozzáfűzése a címhez +- +- +- Replace username and password with references +- A felhasználónév és a jelszó cseréje hivatkozásokra +- +- +- Copy history +- ElÅ‘zmények másolása +- +- +- +- CsvImportWidget +- +- Import CSV fields +- CSV-mezÅ‘k importálása +- +- +- filename +- fájlnév +- +- +- size, rows, columns +- méret, sorok, oszlopok +- +- +- Encoding +- Kódolás +- +- +- Codec +- Kodek +- +- +- Text is qualified by +- Szöveghatároló +- +- +- Fields are separated by +- MezÅ‘határoló +- +- +- Comments start with +- Megjegyzések kezdete +- +- +- Consider '\' an escape character +- „\†feloldójelnek értelmezve +- +- +- Preview +- ElÅ‘nézet +- +- +- Imported from CSV file +- CSV-fájlból importálva +- +- +- Original data: +- Eredeti adatok: +- +- +- Error +- Hiba +- +- +- Error(s) detected in CSV file! +- Hibák találhatók a CSV-fájlban! +- +- +- [%n more message(s) skipped] +- [%n további üzenet mellÅ‘zve][%n további üzenet mellÅ‘zve] +- +- +- CSV import: writer has errors: +-%1 +- CSV importálás: a mentés hibába ütközött: +-%1 +- +- +- Text qualification +- Szöveghatároló +- +- +- Field separation +- MezÅ‘határoló +- +- +- Number of header lines to discard +- Kihagyandó fejléc sorok száma +- +- +- CSV import preview +- CSV-import elÅ‘nézete +- +- +- Column Association +- Oszloptársítások +- +- +- Last Modified +- Legutóbb módosítva +- +- +- Password +- Jelszó +- +- +- Created +- Létrehozva +- +- +- Notes +- Jegyzetek +- +- +- Title +- Cím +- +- +- Group +- Csoport +- +- +- URL +- URL +- +- +- Username +- Felhasználónév +- +- +- Header lines skipped +- Fejlécsor kihagyva +- +- +- First line has field names +- Az elsÅ‘ sor mezÅ‘nevek +- +- +- Not Present +- Nincs jelen +- +- +- Column %1 +- %1. oszlop +- +- +- TOTP +- TOTP +- +- +- Icon +- Ikon +- +- +- +- CsvParserModel +- +- %n column(s) +- %n oszlop%n oszlop +- +- +- %1, %2, %3 +- file info: bytes, rows, columns +- %1, %2, %3 +- +- +- %n byte(s) +- %n bájt%n bájt +- +- +- %n row(s) +- %n sor%n sor +- +- +- +- Database +- +- File %1 does not exist. +- A(z) %1 fájl nem létezik +- +- +- Unable to open file %1. +- A(z) %1 fájl nem nyitható meg. +- +- +- Error while reading the database: %1 +- Hiba az adatbázis megnyitásakor: %1 +- +- +- File cannot be written as it is opened in read-only mode. +- A fájlba nem lehet írni, mert csak olvasható módban van megnyitva. +- +- +- Key not transformed. This is a bug, please report it to the developers! +- A kulcs nincs átalakítva. Ez egy hiba, jelezze a fejlesztÅ‘knek! +- +- +- %1 +-Backup database located at %2 +- %1 +-Az adatbázis biztonsági másolata: %2 +- +- +- Could not save, database does not point to a valid file. +- Nem menthetÅ‘, az adatbázis nem érvényes fájlra mutat. +- +- +- Could not save, database file is read-only. +- Nem menthetÅ‘, az adatbázisfájl csak olvasható. +- +- +- Database file has unmerged changes. +- Az adatbázisfájlban nem egyesített változások vannak. +- +- +- Recycle Bin +- Kuka +- +- +- Passwords +- Root group name +- Jelszavak +- +- +- Database save is already in progress. +- Adatbázismentés már folyamatban van. +- +- +- Could not save, database has not been initialized! +- Nem menthetÅ‘, az adatbázis nincs elÅ‘készítve. +- +- +- +- DatabaseOpenDialog +- +- Unlock Database - KeePassXC +- Adatbázis feloldása – KeePassXC +- +- +- +- DatabaseOpenWidget +- +- Key File: +- Kulcsfájl: +- +- +- Refresh +- Frissítés +- +- +- Don't show this warning again +- Ne jelenjen meg többé a figyelmeztetés +- +- +- All files +- Minden fájl +- +- +- Key files +- Kulcsfájlok +- +- +- Select key file +- Kulcsfájl kiválasztása +- +- +- Failed to open key file: %1 +- A kulcsfájl megnyitása sikertelen: %1 +- +- +- Unlock KeePassXC Database +- KeePassXC adatbázis feloldása +- +- +- Enter Password: +- Jelszó megadása: +- +- +- Password field +- Jelszó mezÅ‘ +- +- +- Hardware key slot selection +- Hardverkulcsfoglalat kijelölése +- +- +- Browse for key file +- Kulcsfájl böngészése +- +- +- Browse... +- Tallózás… +- +- +- Refresh hardware tokens +- Hardveres jelsorok frissítése +- +- +- Hardware Key: +- Hardverkulcs: +- +- +- Hardware key help +- Hardverkulcs súgó +- +- +- TouchID for Quick Unlock +- TouchID a Quick Unlockhoz +- +- +- Unlock failed and no password given +- Feloldás sikertelen, jelszót nem adott +- +- +- Unlocking the database failed and you did not enter a password. +-Do you want to retry with an "empty" password instead? +- +-To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. +- Az adatbázis feloldása sikertelen és jelszót nem lett megadva. +-Próbáljuk meg inkább „üres†jelszóval? +- +-Ezen hiba megjelenése megelÅ‘zhetÅ‘ az Adatbázis-beállítások → Biztonság pontban a jelszó alapállapotba helyezésével. +- +- +- Retry with empty password +- Ãœres jelszó megpróbálása +- +- +- Enter Additional Credentials (if any): +- További hitelesítési adatok megadása (ha vannak): +- +- +- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +-<p>Click for more information...</p> +- <p>A <strong>YubiKey</strong> vagy az <strong>OnlyKey</strong> biztonsági hardverkulcsok alkalmazhatóak a HMAC-SHA1-re konfigurált foglalattal.</p> +-<p>További információk…</p> +- +- +- Key file help +- Kulcsfájlok súgója +- +- +- ? +- ? +- +- +- Cannot use database file as key file +- Adatbázisfájl nem használható kulcsfájlként +- +- +- You cannot use your database file as a key file. +-If you do not have a key file, please leave the field empty. +- Nem használhatja az adatbázisfájlt kulcsfájlként. Ha nincs kulcsfájlja, akkor hagyja üresen a mezÅ‘t. +- +- +- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> +- <p>A mesterkulcs mellett egy titkos fájlt is használhat, hogy javítsa az adatbázisa biztonságát. Ez a fájl az adatbázis biztonsági beállításaiban állítható elÅ‘.</p><p>Ez <strong>nem</strong> a *.kdbx adatbázisfájlja!<br>Ha nincs kulcsfájlja, akkor hagyja üresen ezt a mezÅ‘t.</p><p>Kattintson a további információkért…</p> +- +- +- Key file to unlock the database +- Adatbázis feloldására való kulcsfájl +- +- +- Please touch the button on your YubiKey! +- Meg kell érinteni a gombot a YubiKeyen! +- +- +- Detecting hardware keys… +- Hardverkulcsok felismerése… +- +- +- No hardware keys detected +- Nincsenek felismert hardverkulcsok. +- +- +- Select hardware key… +- Hardverkulcs kijelölése… +- +- +- Old key file format +- Régi kulcsfájl formátum +- +- +- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> +- Egy régi kulcsfájl formátumot használ, amit a KeePassXC lehet<br>hogy nem fog támogatni a jövÅ‘ben.<br><br>Fontolja meg, hogy új kulcsfájl készít a következÅ‘ menüben:<br><strong>Adatbázis / Adatbázis-biztonság / Kulcsfájl módosítása.</strong><br> +- +- +- +- DatabaseSettingWidgetMetaData +- +- Passwords +- Jelszavak +- +- +- +- DatabaseSettingsDialog +- +- Advanced Settings +- Speciális beállítások +- +- +- General +- Ãltalános +- +- +- Security +- Biztonság +- +- +- Encryption Settings +- Titkosítási beállítások +- +- +- Browser Integration +- BöngészÅ‘integráció +- +- +- Database Credentials +- Adatbázis hitelesítési adatai +- +- +- +- DatabaseSettingsWidgetBrowser +- +- KeePassXC-Browser settings +- KeePassXC-böngészÅ‘ beállítások +- +- +- Stored keys +- Tárolt kulcsok +- +- +- Remove +- Eltávolítás +- +- +- Delete the selected key? +- Törli a kiválasztott kulcsot? +- +- +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- Valóban törli a kiválasztott kulcsot? +-Ez megakadályozhatja a böngészÅ‘ bÅ‘vítményhez történÅ‘ kapcsolódást. +- +- +- Key +- Kulcs +- +- +- Value +- Érték +- +- +- Enable Browser Integration to access these settings. +- Engedélyezze a böngészÅ‘integrációt ezekhez a beállításokhoz. +- +- +- Disconnect all browsers +- Minden böngészÅ‘ leválasztása +- +- +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- Valóban leválasztja az összes böngészÅ‘t? +-Ez megakadályozhatja a böngészÅ‘ bÅ‘vítményhez történÅ‘ kapcsolódást. +- +- +- KeePassXC: No keys found +- KeePassXC: Nincs találat a kulcsok között +- +- +- No shared encryption keys found in KeePassXC settings. +- Nem található megosztott titkosítási kulcs a KeePassXC beállításaiban. +- +- +- KeePassXC: Removed keys from database +- KeePassXC: Kulcsok eltávolítva az adatbázisból +- +- +- Successfully removed %n encryption key(s) from KeePassXC settings. +- Sikeresen eltávolításra került %n titkosítási kulcs a KeePassXC beállításokból.Sikeresen eltávolításra került %n titkosítási kulcs a KeePassXC beállításokból. +- +- +- Forget all site-specific settings on entries +- A bejegyzések összes oldalfüggÅ‘ beállításának elfelejtése +- +- +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- Valóban elfelejti az összes oldalfüggÅ‘ beállítást az összes bejegyzésnél? +-A bejegyzések elérési engedélyei vissza lesznek vonva. +- +- +- Removing stored permissions… +- Tárolt jogosultságok törlése… +- +- +- Abort +- Megszakítás +- +- +- KeePassXC: Removed permissions +- KeePassXC: Jogosultságok eltávolítva +- +- +- Successfully removed permissions from %n entry(s). +- Sikeresen el lett távolítva a jogosultság %n elemrÅ‘l.Sikeresen el lett távolítva a jogosultság %n elemrÅ‘l. +- +- +- KeePassXC: No entry with permissions found! +- KeePassXC: Nem található bejegyzés ilyen jogosultsággal! +- +- +- The active database does not contain an entry with permissions. +- Az aktív adatbázisban nincs egyetlen jogosultsági bejegyzés sem. +- +- +- Move KeePassHTTP attributes to custom data +- HTTP attribútumok áthelyezése az egyéni adatokhoz +- +- +- Do you really want to move all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- Valóban átállítja az összes örökölt böngészÅ‘integrációs adatot a legfrissebb szabványra? +-Ez szükséges a böngészÅ‘bÅ‘vítmény kompatibilitásának fenntartásához. +- +- +- Stored browser keys +- Tárolt böngészÅ‘kulcs +- +- +- Remove selected key +- Kijelölt kulcs eltávolítása +- +- +- Move KeePassHTTP attributes to KeePassXC-Browser custom data +- HTTP attribútumok áthelyezése a KeePassXC-böngészÅ‘ egyéni adatokhoz +- +- +- Refresh database root group ID +- Adatbázis gyökércsoport-azonosítójának frissítése +- +- +- Created +- Létrehozva +- +- +- Refresh database ID +- Adatbázis-azonosító frissítése +- +- +- Do you really want refresh the database ID? +-This is only necessary if your database is a copy of another and the browser extension cannot connect. +- Valóban frissíthetÅ‘ az adatbázis-azonosító? +-Erre csak akkor lehet szükség, ha az adatbázis egy másik másolata és a böngészÅ‘ kiterjesztés nem tud kapcsolódni. +- +- +- +- DatabaseSettingsWidgetDatabaseKey +- +- Add additional protection... +- További védelem hozzáadása… +- +- +- No password set +- Nincs jelszó megadva +- +- +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- FIGYELEM! Nem állított be jelszót! Az adatbázis jelszó nélküli használata erÅ‘sen ellenjavallt! +- +-Valóban jelszó nélkül folytatja? +- +- +- Continue without password +- Folytatás jelszó nélkül +- +- +- No encryption key added +- Nincs titkosítási kulcs hozzáadva +- +- +- You must add at least one encryption key to secure your database! +- Legalább egy titkosítási kulcsot hozzá kell adni, hogy megvédje az adatbázisát! +- +- +- Unknown error +- Ismeretlen hiba +- +- +- Failed to change database credentials +- Az adatbázis hitelesítési adatainak módosítása sikertelen +- +- +- +- DatabaseSettingsWidgetEncryption +- +- Encryption Algorithm: +- Titkosítási algoritmus: +- +- +- AES: 256 Bit (default) +- AES: 256 Bit (alapértelmezett) +- +- +- Twofish: 256 Bit +- Twofish: 256 bit +- +- +- Key Derivation Function: +- Kulcsszármaztató függvény: +- +- +- Transform rounds: +- Ãtalakítási fordulók száma: +- +- +- Memory Usage: +- Memóriahasználat: +- +- +- Parallelism: +- Párhozamosság: +- +- +- Decryption Time: +- Visszafejtés ideje: +- +- +- ?? s +- ?? s +- +- +- Change +- Módosítása +- +- +- Higher values offer more protection, but opening the database will take longer. +- A magasabb értékek nagyobb védelmet adnak, de az adatbázis megnyitása tovább fog tartani. +- +- +- Database format: +- Adatbázis-formátum: +- +- +- This is only important if you need to use your database with other programs. +- Ez csak akkor fontos, ha más programokkal is kell használnia az adatbázisát. +- +- +- KDBX 4.0 (recommended) +- KDBX 4.0 (ajánlott) +- +- +- KDBX 3.1 +- KDBX 3.1 +- +- +- unchanged +- Database decryption time is unchanged +- változatlan +- +- +- Number of rounds too high +- Key transformation rounds +- Fordulók száma túl magas +- +- +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or days (or even longer) to open! +- Nagyon sok kulcsátalakítási forduló lett megadva az Argon2 számára. +- +-Ezt a számot megtartva az adatbázis megnyitása órákba vagy napokba (vagy még több idÅ‘be) telhet! +- +- +- Understood, keep number +- Megértettem, maradjon a szám +- +- +- Cancel +- Mégse +- +- +- Number of rounds too low +- Key transformation rounds +- Fordulók száma túl alacsony +- +- +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database may be too easy to crack! +- Nagyon kevés kulcsátalakítási forduló lett megadva az AES-KDF számára. +- +-Ezt a számot megtartva az adatbázis nagyon könnyen törhetÅ‘ lesz. +- +- +- KDF unchanged +- KDF változatlan +- +- +- Failed to transform key with new KDF parameters; KDF unchanged. +- A kulcsátalakítás sikertelen az új KDF paraméterrel; KDF változatlan. +- +- +- MiB +- Abbreviation for Mebibytes (KDF settings) +- MiB MiB +- +- +- thread(s) +- Threads for parallel execution (KDF settings) +- szálszál +- +- +- Change existing decryption time +- MeglévÅ‘ visszafejtése idÅ‘ módosítása +- +- +- Decryption time in seconds +- Visszafejtési idÅ‘ másodpercben +- +- +- Database format +- Adatbázis-formátum +- +- +- Encryption algorithm +- Titkosítási algoritmus +- +- +- Key derivation function +- Kulcsszármaztató függvény +- +- +- Transform rounds +- Ãtalakítási fordulók száma +- +- +- Memory usage +- Memóriahasználat +- +- +- Parallelism +- Párhuzamosság +- +- +- ?? ms +- ?? ms +- +- +- ? s +- ? s +- +- +- +- DatabaseSettingsWidgetFdoSecrets +- +- Exposed Entries +- Nyitott bejegyzések +- +- +- Don't expose this database +- Ne legyen lenyitva ez az adatbázis +- +- +- Expose entries under this group: +- A csoport alatti bejegyzések legyenek lenyitva: +- +- +- Enable Secret Service to access these settings. +- A titkosító szolgáltatás engedélyezésével aktiválhatók ezek a beállítások. +- +- +- +- DatabaseSettingsWidgetGeneral +- +- Database Meta Data +- Adatbázis metaadat +- +- +- Database name: +- Adatbázisnév: +- +- +- Database description: +- Adatbázis leírása: +- +- +- Default username: +- Alapértelmezett felhasználónév: +- +- +- History Settings +- ElÅ‘zménybeállítások +- +- +- Max. history items: +- ElÅ‘zmények legnagyobb száma: +- +- +- Max. history size: +- ElÅ‘zmények legnagyobb mérete: +- +- +- MiB +- MiB +- +- +- Use recycle bin +- Kuka alkalmazása +- +- +- Additional Database Settings +- További adatbázis-beállítások +- +- +- Database name field +- Adatbázisnév mezÅ‘ +- +- +- Database description field +- Adatbázisleírás mezÅ‘ +- +- +- Default username field +- Alapértelmezett felhasználónév mezÅ‘ +- +- +- Maximum number of history items per entry +- ElÅ‘zményelemek maximális száma bejegyzésenként +- +- +- Maximum size of history per entry +- ElÅ‘zmények maximális mérete bejegyzésenként +- +- +- Delete Recycle Bin +- Kuka törlése +- +- +- Do you want to delete the current recycle bin and all its contents? +-This action is not reversible. +- Valóban törölhetÅ‘ az aktuális kuka minden elemével együtt? +-Ez nem vonható vissza! +- +- +- (old) +- (régi) +- +- +- Enable compression (recommended) +- Tömörítés engedélyezése (ajánlott) +- +- +- +- DatabaseSettingsWidgetKeeShare +- +- Sharing +- Megosztás +- +- +- Breadcrumb +- Morzsamenü +- +- +- Type +- Típus +- +- +- Path +- Útvonal +- +- +- Last Signer +- Legutóbbi aláíró +- +- +- Certificates +- Tanúsítványok +- +- +- > +- Breadcrumb separator +- > +- +- +- +- DatabaseSettingsWidgetMetaDataSimple +- +- Database Name: +- Adatbázis neve: +- +- +- Description: +- Leírás: +- +- +- Database name field +- Adatbázisnév mezÅ‘ +- +- +- Database description field +- Adatbázisleírás mezÅ‘ +- +- +- +- DatabaseTabWidget +- +- KeePass 2 Database +- KeePass 2 adatbázis +- +- +- All files +- Minden fájl +- +- +- Open database +- Adatbázis megnyitása +- +- +- CSV file +- CSV-fájl +- +- +- Merge database +- Adatbázis egyesítése +- +- +- Open KeePass 1 database +- KeePass 1 adatbázis megnyitása +- +- +- KeePass 1 database +- KeePass 1 adatbázis +- +- +- Export database to CSV file +- Adatbázis exportálása CSV-fájlba +- +- +- Writing the CSV file failed. +- A CSV-fájl mentése sikertelen. +- +- +- Database creation error +- Adatbázis létrehozási hiba +- +- +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- A létrehozott adatbázisnak nincs kulcsa vagy KDF-e, a mentés megtagadva. +-Ez határozottan hiba, jelentse a fejlesztÅ‘knek. +- +- +- Select CSV file +- Válasszon CSV-fájlt +- +- +- New Database +- Új adatbázis +- +- +- %1 [New Database] +- Database tab name modifier +- %1 [Új adatbázis] +- +- +- %1 [Locked] +- Database tab name modifier +- %1 [Zárolva] +- +- +- %1 [Read-only] +- Database tab name modifier +- %1 [Csak olvasható] +- +- +- Failed to open %1. It either does not exist or is not accessible. +- Az adatbázisfájl megnyitása sikertelen: %. Vagy nem létezik, vagy nem lehet hozzáférni. +- +- +- Export database to HTML file +- Adatbázis exportálása HTML-fájlba +- +- +- HTML file +- HTML-fájl +- +- +- Writing the HTML file failed. +- A HTML-fájl mentése sikertelen. +- +- +- Export Confirmation +- Exportálás megerÅ‘sítése +- +- +- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? +- Az adatbázis nem titkosított fájlba lesz exportálva. Ãgy sebezhetÅ‘ek lesznek a jelszavak és más érzékeny információk. Valóban folytatható a művelet? +- +- +- Open OPVault +- OPVault megnyitása +- +- +- +- DatabaseWidget +- +- Searching... +- Keresés… +- +- +- Do you really want to delete the entry "%1" for good? +- Valóban végleg szeretné törölni a bejegyzést: „%1â€? +- +- +- Do you really want to move entry "%1" to the recycle bin? +- Valóban kukába szeretné dobni a bejegyzést: „%1â€? +- +- +- Do you really want to move %n entry(s) to the recycle bin? +- Valóban a kukába szeretne dobni %n elemet?Valóban a kukába szeretne dobni %n elemet? +- +- +- Execute command? +- Végrehajtja a parancsot? +- +- +- Do you really want to execute the following command?<br><br>%1<br> +- Valóban végrehajtja a következÅ‘ parancsot? <br><br>%1<br> +- +- +- Remember my choice +- Válasz megjegyzése +- +- +- Do you really want to delete the group "%1" for good? +- Valóban végleg szeretné törölni a csoportot: „%1â€? +- +- +- No current database. +- Nincs aktuális adatbázis. +- +- +- No source database, nothing to do. +- Nincs forrásadatbázis. Nincs további teendÅ‘. +- +- +- Search Results (%1) +- Találatok (%1) +- +- +- No Results +- Nincs találat +- +- +- File has changed +- A fájl módosult +- +- +- The database file has changed. Do you want to load the changes? +- Az adatbázisfájl módosult. Betölti a módosításokat? +- +- +- Merge Request +- Egyesítési kérelem +- +- +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- Az adatbázisfájl módosult és vannak nem mentett változások. +-Egyesíti a módosításokat? +- +- +- Empty recycle bin? +- Kuka ürítése? +- +- +- Are you sure you want to permanently delete everything from your recycle bin? +- Valóban minden véglegesen törölhetÅ‘ a kukából? +- +- +- Do you really want to delete %n entry(s) for good? +- Valóban végleg szeretné törölni a(z) %n bejegyzést?Valóban végleg szeretné törölni a(z) %n bejegyzést? +- +- +- Delete entry(s)? +- Törli a bejegyzést?Törli a bejegyzéseket? +- +- +- Move entry(s) to recycle bin? +- Kukába dobja a bejegyzést?Kukába dobja a bejegyzéseket? +- +- +- Lock Database? +- Zárolja az adatbázist? +- +- +- You are editing an entry. Discard changes and lock anyway? +- Egy bejegyzést szerkeszt. Elveti a változásokat, és mindenképp zárolja? +- +- +- "%1" was modified. +-Save changes? +- A(z) „%1†módosítva lett. +-Menti a módosításokat? +- +- +- Database was modified. +-Save changes? +- Az adatbázis módosítva lett. +-Menti a változásokat? +- +- +- Save changes? +- Menti a módosításokat? +- +- +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- Nem lehet megnyitni az új adatbázisfájlt egy újranyitási kísérlet közben. +-Hiba: %1 +- +- +- Disable safe saves? +- Letiltható a biztonságos mentés? +- +- +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- A KeePassXC többször is hiába próbálta meg elmenteni az adatbázist. Ez jellemzÅ‘en azért szokott elÅ‘fordulni, mert egy szinkronizáló szolgáltatás zárolja a mentendÅ‘ fájl. +-Letiltható a biztonságos mentés és úgy megkísérelhetÅ‘ a mentés? +- +- +- Passwords +- Jelszavak +- +- +- Save database as +- Adatbázis mentése más néven +- +- +- KeePass 2 Database +- KeePass 2 adatbázis +- +- +- Replace references to entry? +- Lecseréli a bejegyzésre mutató hivatkozásokat? +- +- +- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? +- A(z) „%1†bejegyzésnek van %2 hivatkozása. Felülírja a hivatkozásokat az értékekkel, átugorja a bejegyzést, vagy törli mindenképp?A(z) „%1†bejegyzésnek van %2 hivatkozása. Felülírja a hivatkozásokat az értékekkel, átugorja a bejegyzést, vagy törli mindenképp? +- +- +- Delete group +- Csoport törlése +- +- +- Move group to recycle bin? +- Ãthelyezi a csoportot a kukába? +- +- +- Do you really want to move the group "%1" to the recycle bin? +- Valóban áthelyezi a(z) „%1†csoportot a kukába? +- +- +- Successfully merged the database files. +- Az adatbázisfájlok sikeresen egyesítve lettek. +- +- +- Database was not modified by merge operation. +- Az adatbázis nem változott az összeolvasztási művelet során. +- +- +- Shared group... +- Megosztott csoport… +- +- +- Writing the database failed: %1 +- Az adatbázis kiírása sikertelen: %1 +- +- +- This database is opened in read-only mode. Autosave is disabled. +- Az adatbázis csak olvasható módban lett megnyitva. Az automatikus mentés le van tiltva. +- +- +- Save database backup +- Biztonsági mentés készítése az adatbázisról +- +- +- Could not find database file: %1 +- Az adatbázis-fájl nem található: %1 +- +- +- +- EditEntryWidget +- +- Entry +- Bejegyzés +- +- +- Advanced +- Speciális +- +- +- Icon +- Ikon +- +- +- Auto-Type +- Automatikus beírás +- +- +- Properties +- Tulajdonságok +- +- +- History +- ElÅ‘zmények +- +- +- SSH Agent +- SSH-ügynök +- +- +- n/a +- nincs +- +- +- (encrypted) +- (titkosított) +- +- +- Select private key +- Személyes kulcs kijelölése +- +- +- Entry history +- ElÅ‘zmény-bejegyzés +- +- +- Add entry +- Bejegyzés hozzáadása +- +- +- Edit entry +- Bejegyzés szerkesztése +- +- +- New attribute +- Új attribútum +- +- +- Are you sure you want to remove this attribute? +- Valóban eltávolítja ezt az attribútumot? +- +- +- Tomorrow +- Holnap +- +- +- %n week(s) +- %n hét%n hét +- +- +- %n month(s) +- %n hónap%n hónap +- +- +- Entry updated successfully. +- Bejegyzés sikeresen frissítve. +- +- +- New attribute %1 +- Új %1 attribútum +- +- +- %n year(s) +- %n év%n év +- +- +- Confirm Removal +- Törlés jóváhagyása +- +- +- Browser Integration +- BöngészÅ‘integráció +- +- +- <empty URL> +- <empty URL> +- +- +- Are you sure you want to remove this URL? +- Valóban eltávolítja ezt az URL? +- +- +- Reveal +- Felfedés +- +- +- Hide +- Elrejtés +- +- +- Unsaved Changes +- Nem mentett módosítások +- +- +- Would you like to save changes to this entry? +- Valóban menthetÅ‘ek a bejegyzés módosításai? +- +- +- [PROTECTED] Press Reveal to view or edit +- [VÉDETT] A megjelenítés vagy a szerkesztés a „Felfedés†gombbal érhetÅ‘ el +- +- +- Invalid Entry +- Érvénytelen bejegyzés +- +- +- An external merge operation has invalidated this entry. +-Unfortunately, any changes made have been lost. +- Egy külsÅ‘ egyesítési művelet érvénytelenítette ezt a bejegyzést. +-Sajnos az esetleges változások elvesztek. +- +- +- +- EditEntryWidgetAdvanced +- +- Additional attributes +- További attribútumok +- +- +- Add +- Hozzáadás +- +- +- Remove +- Eltávolítás +- +- +- Edit Name +- Név szerkesztése +- +- +- Protect +- Védelem +- +- +- Reveal +- Felfedés +- +- +- Attachments +- Mellékletek +- +- +- Foreground Color: +- ElÅ‘térszín +- +- +- Background Color: +- Háttérszín: +- +- +- Attribute selection +- Attribútumválasztó +- +- +- Attribute value +- Attribútum érték +- +- +- Add a new attribute +- Új attribútum hozzáadása +- +- +- Remove selected attribute +- Kijelölt attribútum törlése +- +- +- Edit attribute name +- Attribútumnév szerkesztése +- +- +- Toggle attribute protection +- Attribútumvédelem átváltása +- +- +- Show a protected attribute +- Védett attribútum megjelenítése +- +- +- Foreground color selection +- ElÅ‘térszínválasztás +- +- +- Background color selection +- Háttérszínválasztás +- +- +- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> +- <html><head/><body><p>Bejelölve, ez a bejegyzés nem fog szerepelni az állapotfelmérési jelentésben vagy HIBP ellenÅ‘rzésben, akkor sem, ha nem teljesíti a minÅ‘ségi követelményeket (pl. jelszóentrópia vagy újrafelhasználás). Ez hasznos akkor, ha a jelszó nem áll az ellenÅ‘rzése alatt (pl. egy négyjegyű számból álló PIN kódnak kell lennie), hogy ne rontsa a jelentést.</p></body></html> +- +- +- Exclude from database reports +- Kizárás az adatbázis jelentésekbÅ‘l +- +- +- +- EditEntryWidgetAutoType +- +- Enable Auto-Type for this entry +- Automatikus beírás engedélyezése ennél a bejegyzésnél +- +- +- Window Associations +- Ablaktársítások +- +- +- + +- + +- +- +- - +- − +- +- +- Window title: +- Ablakcím: +- +- +- Use a specific sequence for this association: +- Adjon meg egy jellemzÅ‘ sorozatot ehhez a társításhoz: +- +- +- Custom Auto-Type sequence +- Egyéni automatikus beírási sorrend +- +- +- Open Auto-Type help webpage +- Automatikus beírás súgó weboldalának megnyitása +- +- +- Existing window associations +- LétezÅ‘ ablaktársítások +- +- +- Add new window association +- Új ablaktársítás hozzáadása +- +- +- Remove selected window association +- Kijelölt ablaktársítás eltávolítása +- +- +- You can use an asterisk (*) to match everything +- Csillaggal(*) mindent ki lehet jelölni +- +- +- Set the window association title +- Ablaktársítás címének beállítása +- +- +- You can use an asterisk to match everything +- Csillaggal mindent ki lehet jelölni +- +- +- Custom Auto-Type sequence for this window +- Egyéni automatikus beírási sorrend ehhez az ablakhoz +- +- +- Inherit default Auto-Type sequence from the group +- Az alapértelmezett automatikus beírási sorrend öröklése a csoporttól +- +- +- Use custom Auto-Type sequence: +- Egyéni automatikus beírási sorrend használata: +- +- +- +- EditEntryWidgetBrowser +- +- These settings affect to the entry's behaviour with the browser extension. +- Ezek a beállítások befolyásolják a bejegyzés viselkedését a böngészÅ‘ kiterjesztésével. +- +- +- General +- Ãltalános +- +- +- Skip Auto-Submit for this entry +- Automatikus küldés kihagyása ennél a bejegyzésnél +- +- +- Hide this entry from the browser extension +- Bejegyzés elrejtése a böngészÅ‘ kiterjesztés elÅ‘l +- +- +- Additional URL's +- További URL-ek +- +- +- Add +- Hozzáadás +- +- +- Remove +- Eltávolítás +- +- +- Edit +- Szerkesztés +- +- +- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. +- Ezt a beállítást csak a böngészÅ‘ HTTP Auth párbeszédablakának küldje. Bejelölve a normál bejelentkezési űrlapokon ez a bejegyzés nem fog kiválaszthatóként feltűnni. +- +- +- Use this entry only with HTTP Basic Auth +- Bejegyzés alkalmazása csak HTTP Basic Auth-tal +- +- +- +- EditEntryWidgetHistory +- +- Show +- Megjelenítés +- +- +- Restore +- Visszaállítás +- +- +- Delete +- Törlés +- +- +- Delete all +- Összes törlése +- +- +- Entry history selection +- ElÅ‘zmény-bejegyzés kijelölése +- +- +- Show entry at selected history state +- Bejegyzés és kijelölt elÅ‘zményállapot megjelenítése +- +- +- Restore entry to selected history state +- Bejegyzés visszaállítása a kijelölt elÅ‘zményállapotra +- +- +- Delete selected history state +- Kijelölt elÅ‘zményállapot törlése +- +- +- Delete all history +- Minden elÅ‘zmény törlése +- +- +- +- EditEntryWidgetMain +- +- URL: +- URL: +- +- +- Password: +- Jelszó: +- +- +- Title: +- Cím: +- +- +- Presets +- ElÅ‘beállítások +- +- +- Toggle the checkbox to reveal the notes section. +- JelölÅ‘négyzet átváltásával felfedhetÅ‘ a jegyzetek szalasz. +- +- +- Username: +- Felhasználónév: +- +- +- Url field +- URL mezÅ‘ +- +- +- Download favicon for URL +- URL faviconjának letöltése +- +- +- Password field +- Jelszó mezÅ‘ +- +- +- Toggle notes visible +- Jegyzetek láthatóságának átváltása +- +- +- Expiration field +- Lejárati mezÅ‘ +- +- +- Expiration Presets +- Lejárati elÅ‘beállítások +- +- +- Expiration presets +- Lejárati elÅ‘beállítások +- +- +- Notes field +- Jegyzetek mezÅ‘ +- +- +- Title field +- Cím mezÅ‘ +- +- +- Username field +- Felhasználónév mezÅ‘ +- +- +- Toggle expiration +- Lejárat átváltása +- +- +- Notes: +- Jegyzetek: +- +- +- https://example.com +- https://example.com +- +- +- Expires: +- Lejárat: +- +- +- Edit Entry +- Bejegyzés szerkesztése +- +- +- +- EditEntryWidgetSSHAgent +- +- Form +- Å°rlap +- +- +- Remove key from agent after +- Kulcs eltávolítása az ügynöktÅ‘l utána +- +- +- seconds +- másodperc +- +- +- Fingerprint +- Ujjlenyomat +- +- +- Remove key from agent when database is closed/locked +- Kulcs eltávolítása az ügynöktÅ‘l, ha az adatbázis be vagy le van zárva +- +- +- Public key +- Nyilvános kulcs +- +- +- Add key to agent when database is opened/unlocked +- Kulcs hozzáadása az ügynökhöz, ha az adatbázis meg van nyitva vagy fel van oldva +- +- +- Comment +- Megjegyzés +- +- +- Decrypt +- Visszafejtés +- +- +- n/a +- nincs +- +- +- Copy to clipboard +- Vágólapra másolás +- +- +- Private key +- Személyes kulcs +- +- +- External file +- KülsÅ‘ fájl +- +- +- Browse... +- Button for opening file dialog +- Tallózás… +- +- +- Attachment +- Melléklet +- +- +- Add to agent +- Hozzáadás az ügynökhöz +- +- +- Remove from agent +- Eltávolítás az ügynöktÅ‘l +- +- +- Require user confirmation when this key is used +- Felhasználói megerÅ‘sítés szükséges a kulcs alkalmazásakor +- +- +- Remove key from agent after specified seconds +- Kulcs eltávolítása az ügynöktÅ‘l a megadott másodperc után +- +- +- Browser for key file +- Kulcsfájl böngészése +- +- +- External key file +- KülsÅ‘ kulcsfájl +- +- +- Select attachment file +- Mellékletfájl kijelölése +- +- +- +- EditGroupWidget +- +- Group +- Csoport +- +- +- Icon +- Ikon +- +- +- Properties +- Tulajdonságok +- +- +- Add group +- Csoport hozzáadása +- +- +- Edit group +- Csoport szerkesztése +- +- +- Enable +- Engedélyezés +- +- +- Disable +- Letiltás +- +- +- Inherit from parent group (%1) +- Öröklés a szülÅ‘csoporttól (%1) +- +- +- Entry has unsaved changes +- A bejegyzésnek mentetlen változásai vannak +- +- +- +- EditGroupWidgetKeeShare +- +- Type: +- Típus: +- +- +- Path: +- Útvonal: +- +- +- Password: +- Jelszó: +- +- +- Inactive +- Inaktív +- +- +- KeeShare unsigned container +- KeeShare aláíratlan tároló +- +- +- KeeShare signed container +- KeeShare aláírt tároló +- +- +- Select import source +- Importálási forrás kijelölése +- +- +- Select export target +- Exportálási cél kijelölése +- +- +- Select import/export file +- Importálási vagy exportálási fájl kijelölése +- +- +- Clear +- Törlés +- +- +- Import +- Importálás +- +- +- Export +- Exportálás +- +- +- Synchronize +- Szinkronizálás +- +- +- Your KeePassXC version does not support sharing this container type. +-Supported extensions are: %1. +- A KeePassXC jelen verziója nem támogatja ennek a tárolótípusnak a megosztását. +-Támogatott kiterjesztések: %1. +- +- +- %1 is already being exported by this database. +- Ez az adatbázis már exportálja: %1. +- +- +- %1 is already being imported by this database. +- Ez az adatbázis már importálja: %1. +- +- +- %1 is being imported and exported by different groups in this database. +- Több csoport ebben adatbázisban már importálja és exportálja: %1. +- +- +- KeeShare is currently disabled. You can enable import/export in the application settings. +- KeeShare is a proper noun +- A KeeShare jelenleg le van tiltva. Az alkalmazás beállításai között az import, export szekcióban lehet engedélyezni. +- +- +- Database export is currently disabled by application settings. +- Az adatbázisok exportálása jelenleg le van tiltva az alkalmazás beállításaiban. +- +- +- Database import is currently disabled by application settings. +- Az adatbázisok importálása jelenleg le van tiltva az alkalmazás beállításaiban. +- +- +- Sharing mode field +- Megosztási mód mezÅ‘ +- +- +- Path to share file field +- Megosztási fájl mezÅ‘ útvonala +- +- +- Password field +- Jelszó mezÅ‘ +- +- +- Clear fields +- MezÅ‘k törlése +- +- +- Browse for share file +- Megosztási fájl böngészése +- +- +- Browse... +- Tallózás… +- +- +- +- EditGroupWidgetMain +- +- Name field +- NévmezÅ‘ +- +- +- Notes field +- Jegyzetek mezÅ‘ +- +- +- Toggle expiration +- Lejárat átváltása +- +- +- Auto-Type toggle for this and sub groups +- Automatikus beírás átváltó ehhez a csoporthoz és alcsoportjaihoz +- +- +- Expiration field +- Lejárati mezÅ‘ +- +- +- Search toggle for this and sub groups +- Keresés átváltó ehhez a csoporthoz és alcsoportjaihoz +- +- +- Default auto-type sequence field +- Alapértelmezett automatikus beírási sorrend mezÅ‘ +- +- +- Expires: +- Lejárat: +- +- +- Use default Auto-Type sequence of parent group +- A szülÅ‘csoport automatikus beírási sorrendjének alkalmazása +- +- +- Auto-Type: +- Automatikus beírás: +- +- +- Search: +- Keresés: +- +- +- Notes: +- Jegyzetek: +- +- +- Name: +- Név: +- +- +- Set default Auto-Type sequence +- Egyéni automatikus beírási sorrend beállítása +- +- +- Edit Group +- Csoport szerkesztése +- +- +- +- EditWidgetIcons +- +- Add custom icon +- Egyéni ikon hozzáadása +- +- +- Delete custom icon +- Egyéni ikon törlése +- +- +- Download favicon +- Favicon letöltése +- +- +- Unable to fetch favicon. +- A favicon letöltése sikertelen. +- +- +- Images +- Képek +- +- +- All files +- Minden fájl +- +- +- Confirm Delete +- Törlés megerÅ‘sítése +- +- +- Select Image(s) +- Kép kiválasztása +- +- +- Successfully loaded %1 of %n icon(s) +- %1 / %n ikon sikeresen betöltve%1 / %n ikon sikeresen betöltve +- +- +- No icons were loaded +- Egy ikon sem lett betöltve +- +- +- %n icon(s) already exist in the database +- %n ikon már létezik az adatbázisban%n ikon már létezik az adatbázisban +- +- +- The following icon(s) failed: +- A következÅ‘ ikonnál hiba történt:A következÅ‘ ikonoknál hiba történt: +- +- +- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? +- Ezt az ikont %n elem használja, és le lesz cserélve az alapértelmezett ikonra. Valóban törli?Ezt az ikont %n elem használja, és le lesz cserélve az alapértelmezett ikonra. Valóban törli? +- +- +- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security +- A DuckDuckGo weboldal ikon szolgáltatást az Eszközök → Beállítások → Biztonság pontban lehet engedélyezni +- +- +- Download favicon for URL +- URL faviconjának letöltése +- +- +- Apply selected icon to subgroups and entries +- Kijelölt ikon alkalmazása az alcsoportokra és bejegyzésekre +- +- +- Also apply to child groups +- Alkalmazás az alcsoportokra is +- +- +- Also apply to child entries +- Alkalmazás az albejegyzésekre is +- +- +- Also apply to all children +- Alkalmazás minden alegységre is +- +- +- Existing icon selected. +- LétezÅ‘ ikon kijelölve. +- +- +- Use default icon +- Alapértelmezett ikon alkalmazása +- +- +- Use custom icon +- Egyéni ikon alkalmazása +- +- +- Apply icon to... +- Ikon alkalmazása ehhez… +- +- +- Apply to this group only +- Alkalmazás csak ehhez a csoporthoz +- +- +- +- EditWidgetProperties +- +- Created: +- Létrehozva: +- +- +- Modified: +- Módosítva: +- +- +- Accessed: +- Elérve: +- +- +- Uuid: +- UUID: +- +- +- Plugin Data +- BeépülÅ‘ adatai +- +- +- Remove +- Eltávolítás +- +- +- Delete plugin data? +- TörölhetÅ‘k a bÅ‘vítmény adatai? +- +- +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- Valóban törölhetÅ‘k a kijelölt bÅ‘vítmény adata? +-Ez a kijelölt bÅ‘vítmény hibás működését eredményezheti. +- +- +- Key +- Kulcs +- +- +- Value +- Érték +- +- +- Datetime created +- Dátum és idÅ‘ létrehozva +- +- +- Datetime modified +- Dátum és idÅ‘ módosítva +- +- +- Datetime accessed +- Hozzáférés történt a dátumhoz és idÅ‘höz +- +- +- Unique ID +- Unique ID +- +- +- Plugin data +- BÅ‘vítmény adatai +- +- +- Remove selected plugin data +- Kijelölt bÅ‘vítményadat eltávolítása +- +- +- +- Entry +- +- %1 - Clone +- %1 – Klón +- +- +- +- EntryAttachmentsModel +- +- Name +- Név +- +- +- Size +- Méret +- +- +- +- EntryAttachmentsWidget +- +- Form +- Å°rlap +- +- +- Add +- Hozzáadás +- +- +- Remove +- Eltávolítás +- +- +- Open +- Megnyitás +- +- +- Save +- Mentés +- +- +- Select files +- Fájl kijelölése +- +- +- Are you sure you want to remove %n attachment(s)? +- Valóban eltávolít %n mellékletet?Valóban eltávolít %n mellékletet? +- +- +- Save attachments +- Mellékletek mentése +- +- +- Unable to create directory: +-%1 +- Nem hozható létre a mappa: +-%1 +- +- +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- Valóban felül kívánja írni a meglévÅ‘ „%1†fájl a melléklettel? +- +- +- Confirm overwrite +- Felülírás megerÅ‘sítése +- +- +- Unable to save attachments: +-%1 +- A melléklet nem menthetÅ‘: +-%1 +- +- +- Unable to open attachment: +-%1 +- A melléklet nem megnyitható: +-%1 +- +- +- Unable to open attachments: +-%1 +- A mellékletek nem megnyithatóak: +-%1 +- +- +- Confirm remove +- Törlés megerÅ‘sítése +- +- +- Unable to open file(s): +-%1 +- A fájl nem megnyitható: +-%1A fájlok nem megnyithatóak: +-%1 +- +- +- Attachments +- Mellékletek +- +- +- Add new attachment +- Új melléklet hozzáadása +- +- +- Remove selected attachment +- Kijelölt melléklet eltávolítása +- +- +- Open selected attachment +- Kijelölt melléklet megnyitása +- +- +- Save selected attachment to disk +- Kijelölt melléklet lemezre mentése +- +- +- %1 is a big file (%2 MB). +-Your database may get very large and reduce performance. +- +-Are you sure to add this file? +- %1 egy nagy fájl (%2 MB). +-Az adatbázis így nagyon nagy lesz és rontani fogja a teljesítményt. +- +-Biztosan hozzáadható ez a fájl? +- +- +- Confirm Attachment +- Melléklet megerÅ‘sítése +- +- +- +- EntryAttributesModel +- +- Name +- Név +- +- +- +- EntryHistoryModel +- +- Last modified +- Legutóbb módosítva +- +- +- Title +- Cím +- +- +- Username +- Felhasználónév +- +- +- URL +- URL +- +- +- +- EntryModel +- +- Ref: +- Reference abbreviation +- Hivatkozás: +- +- +- Group +- Csoport +- +- +- Title +- Cím +- +- +- Username +- Felhasználónév +- +- +- URL +- URL +- +- +- Never +- Soha +- +- +- Password +- Jelszó +- +- +- Notes +- Jegyzetek +- +- +- Expires +- Lejárat +- +- +- Created +- Létrehozva +- +- +- Modified +- Módosított +- +- +- Accessed +- Elérve +- +- +- Attachments +- Mellékletek +- +- +- Size +- Méret +- +- +- Group name +- Csoportnév +- +- +- Entry title +- Bejegyzés címe +- +- +- Entry notes +- Megjegyzés a bejegyzéshez +- +- +- Entry expires at +- Bejegyzés lejárata +- +- +- Creation date +- Létrehozási dátum +- +- +- Last modification date +- Utolsó módosítás dátuma +- +- +- Last access date +- Utolsó elérési dátum +- +- +- Attached files +- Mellékelt fájlok +- +- +- Entry size +- Bejegyzés mérete +- +- +- Has attachments +- Van melléklete +- +- +- Has TOTP one-time password +- Van idÅ‘alapú, egyszer használatos jelszava (TOTP) +- +- +- +- EntryPreviewWidget +- +- Close +- Bezárás +- +- +- General +- Ãltalános +- +- +- Username +- Felhasználónév +- +- +- Password +- Jelszó +- +- +- Expiration +- Lejárat +- +- +- URL +- URL +- +- +- Attributes +- Attribútumok +- +- +- Attachments +- Mellékletek +- +- +- Notes +- Jegyzetek +- +- +- Autotype +- Automatikus típus +- +- +- Window +- Ablak +- +- +- Sequence +- Sorrend +- +- +- Searching +- Keresés +- +- +- Search +- Keresés +- +- +- Clear +- Törlés +- +- +- Never +- Soha +- +- +- [PROTECTED] +- [VÉDETT] +- +- +- Enabled +- Engedélyezett +- +- +- Disabled +- Tiltott +- +- +- Share +- Megosztás +- +- +- Display current TOTP value +- Aktuális TOTP-érték megjelenítése +- +- +- Advanced +- Speciális +- +- +- Default Sequence +- Alapértelmezett sorrend +- +- +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- attributes line +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- +- +- +- EntryURLModel +- +- Invalid URL +- Érvénytelen URL +- +- +- +- EntryView +- +- Fit to window +- Igazítás az ablakhoz +- +- +- Fit to contents +- Igazítás a tartalomhoz +- +- +- Reset to defaults +- Visszaállítás alapértelmezettre +- +- +- Has attachments +- Entry attachment icon toggle +- Van melléklete +- +- +- Has TOTP +- Entry TOTP icon toggle +- Van TOTP-je +- +- +- +- FdoSecrets::Item +- +- Entry "%1" from database "%2" was used by %3 +- %3 használta a(z) „%2†adatbázis bejegyzését: „%1â€, +- +- +- +- FdoSecrets::Service +- +- Failed to register DBus service at %1.<br/> +- Nem sikerült regisztrálni a DBus-szolgáltatást: %1.<br/> +- +- +- %n Entry(s) was used by %1 +- %1 is the name of an application +- %n bejegyzést használ: %1%n bejegyzést használ: %1 +- +- +- +- FdoSecrets::SettingsDatabaseModel +- +- File Name +- Fájlnév +- +- +- Group +- Csoport +- +- +- Manage +- Kezelés +- +- +- Unlock to show +- Feloldás a megjelenítéshez +- +- +- None +- Nincs +- +- +- +- FdoSecrets::SettingsSessionModel +- +- Application +- Alkalmazás +- +- +- Manage +- Kezelés +- +- +- +- FdoSecretsPlugin +- +- <b>Fdo Secret Service:</b> %1 +- <b>Fdo titkosító szolgáltatás:</b> %1 +- +- +- Unknown +- Unknown PID +- Ismeretlen +- +- +- Unknown +- Unknown executable path +- Ismeretlen +- +- +- <i>PID: %1, Executable: %2</i> +- <i>PID: 1234, Executable: /path/to/exe</i> +- <i>PID: %1, futtatható: %2</i> +- +- +- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. +- Egy másik titkosító szolgáltatás is fut (%1).<br/>Ãllítsa le vagy távolítsa el, mielÅ‘tt újra engedélyezné a titkosító szolgáltatás integrációját. +- +- +- +- Group +- +- [empty] +- group has no children +- [üres] +- +- +- +- HibpDownloader +- +- Online password validation failed +- Az online jelszó-érvényesítés sikertelen +- +- +- +- IconDownloaderDialog +- +- Download Favicons +- Faviconok letöltése +- +- +- Cancel +- Mégse +- +- +- Having trouble downloading icons? +-You can enable the DuckDuckGo website icon service in the security section of the application settings. +- Probléma van az ikonok letöltésével? +-A DuckDuckGo weboldal ikon szolgáltatást az alkalmazás beállításai között a biztonság szekcióban lehet engedélyezni +- +- +- Close +- Bezárás +- +- +- URL +- URL +- +- +- Status +- Ãllapot +- +- +- Please wait, processing entry list... +- Türelem, a bejegyzéslista feldolgozás alatt áll… +- +- +- Downloading... +- Letöltés… +- +- +- Ok +- Ok +- +- +- Already Exists +- Már létezik +- +- +- Download Failed +- Letöltés sikertelen +- +- +- Downloading favicons (%1/%2)... +- Faviconok letöltése (%1/%2)… +- +- +- +- KMessageWidget +- +- &Close +- &Bezárás +- +- +- Close message +- Bezárási üzenet +- +- +- +- Kdbx3Reader +- +- missing database headers +- hiányzó adatbázis fejlécek +- +- +- Header doesn't match hash +- A fejléc nem egyezik meg a hasítóértékkel +- +- +- Invalid header id size +- Érvénytelen fejléc-azonosító méret +- +- +- Invalid header field length +- Érvénytelen fejlécmezÅ‘hossz +- +- +- Invalid header data length +- Érvénytelen fejlécadathossz +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Érvénytelenek a hitelesítési adatok, újra kell próbálkozni. +-Ha ez újból elÅ‘fordul, lehet hogy az adatbázisfájl sérült. +- +- +- Unable to calculate database key +- Nem lehet kiszámítani az adatbáziskulcsot +- +- +- Unable to issue challenge-response: %1 +- Nem lehet kiutalni a kihívás-választ: %1 +- +- +- +- Kdbx3Writer +- +- Unable to issue challenge-response: %1 +- Nem lehet kiutalni a kihívás-választ: %1 +- +- +- Unable to calculate database key +- Nem lehet kiszámítani az adatbáziskulcsot +- +- +- +- Kdbx4Reader +- +- missing database headers +- hiányzó adatbázis fejlécek +- +- +- Invalid header checksum size +- Érvénytelen fejlécellenÅ‘rzÅ‘ összeg +- +- +- Header SHA256 mismatch +- Fejléc SHA256 eltérés +- +- +- Unknown cipher +- Ismeretlen titkosító +- +- +- Invalid header id size +- Érvénytelen fejléc-azonosító méret +- +- +- Invalid header field length +- Érvénytelen fejlécmezÅ‘hossz +- +- +- Invalid header data length +- Érvénytelen fejlécadathossz +- +- +- Failed to open buffer for KDF parameters in header +- A puffer megnyitása sikertelen a KDF paraméterek számára a fejlécben +- +- +- Unsupported key derivation function (KDF) or invalid parameters +- Nem támogatott kulcsszármaztató függvény (KDF) vagy érvénytelen paraméter +- +- +- Legacy header fields found in KDBX4 file. +- Régi, örökölt fejlécmezÅ‘k találhatók a KDBX4-fájlban. +- +- +- Invalid inner header id size +- Érvénytelen belsÅ‘ fejléc-azonosító méret +- +- +- Invalid inner header field length +- Érvénytelen belsÅ‘ fejlécmezÅ‘hossz +- +- +- Invalid inner header binary size +- Érvénytelen belsÅ‘ fejléc bináris méret +- +- +- Unsupported KeePass variant map version. +- Translation: variant map = data structure for storing meta data +- Nem támogatott KeePass változattérkép-verzió. +- +- +- Invalid variant map entry name length +- Translation: variant map = data structure for storing meta data +- Érvénytelen változattérkép bejegyzésnévhossz +- +- +- Invalid variant map entry name data +- Translation: variant map = data structure for storing meta data +- Érvénytelen változattérkép bejegyzésnévadat +- +- +- Invalid variant map entry value length +- Translation: variant map = data structure for storing meta data +- Érvénytelen változattérkép bejegyzésértékhossz +- +- +- Invalid variant map entry value data +- Translation comment: variant map = data structure for storing meta data +- Érvénytelen változattérkép bejegyzésértékadat +- +- +- Invalid variant map Bool entry value length +- Translation: variant map = data structure for storing meta data +- Érvénytelen Bool változattérkép bejegyzésértékhossz +- +- +- Invalid variant map Int32 entry value length +- Translation: variant map = data structure for storing meta data +- Érvénytelen Int32 változattérkép bejegyzésértékhossz +- +- +- Invalid variant map UInt32 entry value length +- Translation: variant map = data structure for storing meta data +- Érvénytelen UInt32 változattérkép bejegyzésértékhossz +- +- +- Invalid variant map Int64 entry value length +- Translation: variant map = data structure for storing meta data +- Érvénytelen Int64 változattérkép bejegyzésértékhossz +- +- +- Invalid variant map UInt64 entry value length +- Translation: variant map = data structure for storing meta data +- Érvénytelen UInt64 változattérkép bejegyzésértékhossz +- +- +- Invalid variant map entry type +- Translation: variant map = data structure for storing meta data +- Érvénytelen változattérkép bejegyzéstípus +- +- +- Invalid variant map field type size +- Translation: variant map = data structure for storing meta data +- Érvénytelen változattérkép mezÅ‘típusméret +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Érvénytelenek a hitelesítési adatok, újra kell próbálkozni. +-Ha ez újból elÅ‘fordul, lehet hogy az adatbázisfájl sérült. +- +- +- (HMAC mismatch) +- (HMAC eltérés) +- +- +- Unable to calculate database key: %1 +- Nem lehet kiszámítani az adatbáziskulcsot: %1 +- +- +- +- Kdbx4Writer +- +- Invalid symmetric cipher algorithm. +- Érvénytelen szimmetrikus titkosító algoritmus. +- +- +- Invalid symmetric cipher IV size. +- IV = Initialization Vector for symmetric cipher +- Érvénytelen szimmetrikus titkosító IV méret. +- +- +- Failed to serialize KDF parameters variant map +- Translation comment: variant map = data structure for storing meta data +- A KDF-változattérkép-paraméterek sorbafejtése sikertelen. +- +- +- Unable to calculate database key: %1 +- Nem lehet kiszámítani az adatbáziskulcsot: %1 +- +- +- +- KdbxReader +- +- Unsupported cipher +- Nem támogatott titkosító +- +- +- Invalid compression flags length +- Érvénytelen tömörítési jelzÅ‘hossz +- +- +- Unsupported compression algorithm +- Nem támogatott tömörítési algoritmus +- +- +- Invalid master seed size +- Érvénytelen mestermagméret +- +- +- Invalid transform seed size +- Érvénytelen átalakító magméret +- +- +- Invalid transform rounds size +- Érvénytelen átalakítási forduló méret +- +- +- Invalid start bytes size +- Érvénytelen kezdÅ‘ bájtméret +- +- +- Invalid random stream id size +- Érvénytelen véletlenszerű adatfolyam-azonosító méret +- +- +- Invalid inner random stream cipher +- Érvénytelen belsÅ‘ véletlenszerű adatfolyamtitkosító +- +- +- Not a KeePass database. +- Nem KeePass adatbázis. +- +- +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- A kijelölt fájl egy régi KeePass 1 adatbázis (.kdb). +- +-Be lehet importálni az Adatbázis > „KeePass 1 adatbázis importálása…†menüpontban. +-Ez egyirányú migráció. Nem lehet majd megnyitni az importált adatbázist a régi KeePassX 0.4 verzióval. +- +- +- Unsupported KeePass 2 database version. +- Nem támogatott KeePass 2 adatbázis-verzió. +- +- +- Invalid cipher uuid length: %1 (length=%2) +- Érvénytelen titkosítási UUID hossz: %1 (hossz=%2) +- +- +- Unable to parse UUID: %1 +- A UUID nem dolgozható fel: %1 +- +- +- Failed to read database file. +- Az adatbázis olvasása sikertelen. +- +- +- +- KdbxXmlReader +- +- XML parsing failure: %1 +- XML értelmezési hiba: %1 +- +- +- No root group +- Nincs gyökércsoport +- +- +- Missing icon uuid or data +- Hiányzó ikon UUID vagy adat +- +- +- Missing custom data key or value +- Hiányzó egyéni adatkulcs vagy -érték +- +- +- Multiple group elements +- Többszörös csoportelemek +- +- +- Null group uuid +- Null csoport UUID +- +- +- Invalid group icon number +- Érvénytelen csoportikonszám +- +- +- Invalid EnableAutoType value +- Érvénytelen EnableAutoType érték +- +- +- Invalid EnableSearching value +- Érvénytelen EnableSearching érték +- +- +- No group uuid found +- Nem található a csoport UUID +- +- +- Null DeleteObject uuid +- Null DeleteObject UUID +- +- +- Missing DeletedObject uuid or time +- Hiányzó DeletedObject UUID vagy idÅ‘ +- +- +- Null entry uuid +- Null bejegyzés UUID +- +- +- Invalid entry icon number +- Érvénytelen bejegyzésikonszám +- +- +- History element in history entry +- ElÅ‘zményelem az elÅ‘zménybejegyzésben +- +- +- No entry uuid found +- Nem található bejegyzés UUID +- +- +- History element with different uuid +- ElÅ‘zményelem különbözÅ‘ UUID-vel +- +- +- Duplicate custom attribute found +- Kétszeres egyéni attribútum található +- +- +- Entry string key or value missing +- Hiányzik a bejegyzés karakterlánckulcsa vagy -értéke +- +- +- Entry binary key or value missing +- Hiányzik a bejegyzés bináris kulcsa vagy értéke +- +- +- Auto-type association window or sequence missing +- Hiányzik az automatikus beírás ablaktársítása vagy sorozata +- +- +- Invalid bool value +- Érvénytelen logikai érték +- +- +- Invalid date time value +- Érvénytelen dátum/idÅ‘ érték +- +- +- Invalid color value +- Érvénytelen színérték +- +- +- Invalid color rgb part +- Érvénytelen RGB-színrész +- +- +- Invalid number value +- Érvénytelen számérték +- +- +- Invalid uuid value +- Érvénytelen UUID-érték +- +- +- Unable to decompress binary +- Translator meant is a binary data inside an entry +- A bináris nem kibontható +- +- +- XML error: +-%1 +-Line %2, column %3 +- XML hiba +-%1 +-%2. sor, %3. oszlop +- +- +- +- KeeAgentSettings +- +- Invalid KeeAgent settings file structure. +- A KeeAgent beállítási fájl felépítése érvénytelen. +- +- +- Private key is an attachment but no attachments provided. +- A személyes kulcs egy melléklet lenne, de nincs melléklet. +- +- +- Private key is empty +- Ãœres a személyes kulcs +- +- +- File too large to be a private key +- A fájl túl nagy ahhoz, hogy személyes kulcs legyen +- +- +- Failed to open private key +- Személyes kulcs megnyitása meghiúsult +- +- +- +- KeePass1OpenWidget +- +- Unable to open the database. +- Nem lehet megnyitni az adatbázist. +- +- +- Import KeePass1 Database +- KeePass1 adatbázis importálása +- +- +- +- KeePass1Reader +- +- Unable to read keyfile. +- A kulcsfájl nem olvasható. +- +- +- Not a KeePass database. +- Nem KeePass adatbázis. +- +- +- Unsupported encryption algorithm. +- Nem támogatott titkosítási algoritmus. +- +- +- Unsupported KeePass database version. +- Nem támogatott KeePass adatbázis-verzió. +- +- +- Unable to read encryption IV +- IV = Initialization Vector for symmetric cipher +- Nem olvasható a IV titkosítás +- +- +- Invalid number of groups +- Érvénytelen csoportszám +- +- +- Invalid number of entries +- Érvénytelen bejegyzésszám +- +- +- Invalid content hash size +- Érvénytelen a tartalom hasítóértékének mérete +- +- +- Invalid transform seed size +- Érvénytelen átalakító magméret +- +- +- Invalid number of transform rounds +- Érvénytelen átalakítási fordulószám +- +- +- Unable to construct group tree +- Nem lehet létrehozni a csoportfát +- +- +- Root +- Gyökér +- +- +- Key transformation failed +- Kulcsátalakítás sikertelen +- +- +- Invalid group field type number +- Érvénytelen csoportmezÅ‘típus-szám +- +- +- Invalid group field size +- Érvénytelen csoportmezÅ‘méret +- +- +- Read group field data doesn't match size +- A csoportmezÅ‘adatok olvasása nem egyezik meg a mérettel +- +- +- Incorrect group id field size +- Helytelen csoportazonosítómezÅ‘-méret +- +- +- Incorrect group creation time field size +- Helytelen csoportlétrehozási idÅ‘mezÅ‘-méret +- +- +- Incorrect group modification time field size +- Helytelen csoportmódosítási idÅ‘mezÅ‘-méret +- +- +- Incorrect group access time field size +- Helytelen csoporthozzáférési idÅ‘mezÅ‘-méret +- +- +- Incorrect group expiry time field size +- Helytelen csoportlejárati idÅ‘mezÅ‘-méret +- +- +- Incorrect group icon field size +- Helytelen csoportikonmezÅ‘-méret +- +- +- Incorrect group level field size +- Helytelen csoportszintmezÅ‘-méret +- +- +- Invalid group field type +- Érvénytelen csoportmezÅ‘típus +- +- +- Missing group id or level +- Helytelen csoportazonosító vagy -szint +- +- +- Missing entry field type number +- Hiányzó bejegyzésmezÅ‘típus-szám +- +- +- Invalid entry field size +- Érvénytelen bejegyzésmezÅ‘-méret +- +- +- Read entry field data doesn't match size +- A bejegyzésmezÅ‘adatok olvasása nem egyezik meg a mérettel +- +- +- Invalid entry uuid field size +- Érvénytelen bejegyzés UUID-mezÅ‘-méret +- +- +- Invalid entry group id field size +- Érvénytelen bejegyzéscsoportazonosítómezÅ‘-méret +- +- +- Invalid entry icon field size +- Érvénytelen bejegyzésikonmezÅ‘-méret +- +- +- Invalid entry creation time field size +- Érvénytelen bejegyzéslétrehozási idÅ‘mezÅ‘-méret +- +- +- Invalid entry modification time field size +- Érvénytelen bejegyzésmódosítási idÅ‘mezÅ‘-méret +- +- +- Invalid entry expiry time field size +- Érvénytelen bejegyzéslejárati idÅ‘mezÅ‘-méret +- +- +- Invalid entry field type +- Érvénytelen bejegyzésmezÅ‘-típus +- +- +- unable to seek to content position +- nem lehet a tartalom pozíciójához lépni +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Érvénytelenek a hitelesítési adatok, újra kell próbálkozni. +-Ha ez újból elÅ‘fordul, lehet hogy az adatbázisfájl sérült. +- +- +- Unable to calculate database key +- Nem lehet kiszámítani az adatbáziskulcsot +- +- +- +- KeeShare +- +- Invalid sharing reference +- Érvénytelen megosztási hivatkozás +- +- +- Inactive share %1 +- Inaktív megosztás: %1 +- +- +- Imported from %1 +- Importálva innen: %1 +- +- +- Exported to %1 +- Exportálva ide: %1 +- +- +- Synchronized with %1 +- Szinkronizálva ezzel: %1 +- +- +- Import is disabled in settings +- Importálás letiltva a beállításokban +- +- +- Export is disabled in settings +- Exportálás letiltva a beállításokban +- +- +- Inactive share +- Inaktív megosztás +- +- +- Imported from +- Importálva innen +- +- +- Exported to +- Exportálva ide +- +- +- Synchronized with +- Szinkronizálva ezzel +- +- +- +- KeyComponentWidget +- +- Key Component +- Kulcs komponens +- +- +- Key Component Description +- Kulcs komponens leírása +- +- +- Cancel +- Mégse +- +- +- Key Component set, click to change or remove +- Kulcs komponens beállítva, kattintson a módosításhoz vagy eltávolításhoz +- +- +- Add %1 +- Add a key component +- %1 hozzáadása +- +- +- Change %1 +- Change a key component +- %1 módosítása +- +- +- Remove %1 +- Remove a key component +- %1 eltávolítása +- +- +- %1 set, click to change or remove +- Change or remove a key component +- %1 beállítva, kattintson a módosításhoz vagy eltávolításhoz +- +- +- +- KeyFileEditWidget +- +- Generate +- Előállítás +- +- +- Key File +- Kulcsfájl +- +- +- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> +- <p>Megadhat egy véletlenszerű bájtokat tartalmazó kulcsot a további biztonság érdekében.</p><p>Tartsa titokban, és ne veszítse el, nehogy kizárja magát!</p> +- +- +- Error loading the key file '%1' +-Message: %2 +- Hiba a(z) „%1†kulcsfájl betöltésekor +-Ãœzenet: %2 +- +- +- Key files +- Kulcsfájlok +- +- +- All files +- Minden fájl +- +- +- Create Key File... +- Kulcsfájl létrehozása… +- +- +- Error creating key file +- Hiba a kulcsfájl létrehozásakor +- +- +- Unable to create key file: %1 +- A kulcsfájl nem hozható létre: %1 +- +- +- Select a key file +- Kulcsfájl kiválasztása +- +- +- Key file selection +- Kulcsfájl kijelölése +- +- +- Browse for key file +- Kulcsfájl böngészése +- +- +- Browse... +- Tallózás… +- +- +- Generate a new key file +- Új kulcsfájl előállítása +- +- +- Note: Do not use a file that may change as that will prevent you from unlocking your database! +- Megjegyzés: Nem szabad olyan fájlt használni, amely megváltozhat, mivel ez megakadályozza az adatbázis feloldását! +- +- +- Invalid Key File +- Érvénytelen kulcsfájl +- +- +- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. +- Nem lehet e jelenlegi adatbázist használnia saját kulcsfájljaként. Egy másik fájlt kell választani vagy egy kulcsfájlt előállítani. +- +- +- Suspicious Key File +- Gyanús kulcsfájl +- +- +- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. +-Are you sure you want to continue with this file? +- Úgy tűnik, hogy a kijelölt kulcsfájl egy jelszóadatbázis-fájl. A kulcsfájl egy statikus fájl kell legyen, ami sohasem változik, különben örökre el fog veszni az adatbázishoz való hozzáférés. +-Valóban folytatható a művelet ezzel a fájllal? +- +- +- Old key file format +- Régi kulcsfájl formátum +- +- +- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. +- Egy régi kulcsfájl formátumot használ, amit a KeePassXC lehet<br>hogy nem fog támogatni a jövÅ‘ben.<br><br>Fontolja meg, hogy új kulcsfájlt állítson elÅ‘. +- +- +- +- MainWindow +- +- &Database +- &Adatbázis +- +- +- &Help +- &Súgó +- +- +- &Groups +- &Csoportok +- +- +- &Tools +- &Eszközök +- +- +- &Quit +- &Kilépés +- +- +- &About +- &Névjegy +- +- +- Database settings +- Adatbázis-beállítások +- +- +- Copy username to clipboard +- Felhasználónév másolása a vágólapra +- +- +- Copy password to clipboard +- Jelszó másolása a vágólapra +- +- +- &Settings +- &Beállítások +- +- +- &Title +- &Cím +- +- +- Copy title to clipboard +- Cím másolása a vágólapra +- +- +- &URL +- &URL +- +- +- Copy URL to clipboard +- URL másolása a vágólapra +- +- +- &Notes +- &Jegyzetek +- +- +- Copy notes to clipboard +- Jegyzetek másolása a vágólapra +- +- +- Copy &TOTP +- &TOTP másolása +- +- +- E&mpty recycle bin +- &Kuka ürítése +- +- +- Clear history +- ElÅ‘zmények törlése +- +- +- Access error for config file %1 +- Hozzáférési hiba a beállítási fájlhoz: %1 +- +- +- Settings +- Beállítások +- +- +- Toggle window +- Ablak átváltása +- +- +- Quit KeePassXC +- Kilépés a KeePassXC-bÅ‘l +- +- +- Please touch the button on your YubiKey! +- Meg kell érinteni a gombot a YubiKeyen! +- +- +- WARNING: You are using an unstable build of KeePassXC! +-There is a high risk of corruption, maintain a backup of your databases. +-This version is not meant for production use. +- FIGYELEM: Egy instabil KeePassXC verziót használ! Mivel magas kockázata van az adatsérülésnek, feltétlenül érdemes biztonsági mentés készíteni az adatbázisról. +-Ez a verzió nem felhasználóknak készült. +- +- +- &Donate +- &Támogatás +- +- +- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +-We recommend you use the AppImage available on our downloads page. +- FIGYELMEZTETÉS: A Qt verziója miatt a KeePassXC összeomolhat egy képernyÅ‘-billentyűzettel! +-Javasoljuk az AppImage alkalmazását, amely elérhetÅ‘ a letöltések oldalon. +- +- +- &Import +- &Importálás +- +- +- Create a new database +- Új adatbázis létrehozása +- +- +- Merge from another KDBX database +- Egyesítés egy másik KeePassX adatbázisból +- +- +- Add a new entry +- Új bejegyzés hozzáadása +- +- +- View or edit entry +- Bejegyzés megtekintése vagy szerkesztése +- +- +- Add a new group +- Új csoport hozzáadása +- +- +- Perform &Auto-Type +- &Automatikus beírás +- +- +- Open &URL +- &URL megnyitása +- +- +- Import a KeePass 1 database +- KeePass 1 adatbázis importálása +- +- +- Import a CSV file +- CSV-fájl importálása +- +- +- NOTE: You are using a pre-release version of KeePassXC! +-Expect some bugs and minor issues, this version is not meant for production use. +- MEGJEGYZÉS: Ez egy elÅ‘zetes kiadású KeePassXC verzió! +-Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió nem ajánlott éles használatra. +- +- +- Check for updates on startup? +- Keressen a program induláskor frissítéseket? +- +- +- Would you like KeePassXC to check for updates on startup? +- Valóban keressen a program induláskor frissítéseket? +- +- +- You can always check for updates manually from the application menu. +- A program menüjébÅ‘l bármikor saját kezűleg is indítható a frissítések keresése. +- +- +- &Export +- &Exportálás +- +- +- Sort &A-Z +- Rendezés: &A–Z +- +- +- Sort &Z-A +- Rendezés: &Z–A +- +- +- &Password Generator +- &Jelszó-előállító +- +- +- Import a 1Password Vault +- 1Password Vault importálása +- +- +- &Getting Started +- &KezdÅ‘ lépések +- +- +- &User Guide +- Felhasználói &kézikönyv +- +- +- &Keyboard Shortcuts +- &Gyorsbillentyűk +- +- +- &Recent Databases +- &Friss adatbázisok +- +- +- &Entries +- &Bejegyzések +- +- +- Copy Att&ribute +- Att&ribútum másolása +- +- +- TOTP +- TOTP +- +- +- View +- Nézet +- +- +- Theme +- Téma +- +- +- &Check for Updates +- &Frissítések keresése +- +- +- &Open Database… +- Adatbázis &megnyitása… +- +- +- &Save Database +- Adatbázis &mentése +- +- +- &Close Database +- Adatbázis &bezárása +- +- +- &New Database… +- Ú&j adatbázis +- +- +- &Merge From Database… +- &Egyesítés adatbázisból… +- +- +- &New Entry… +- Új b&ejegyzés… +- +- +- &Edit Entry… +- Bejegyzés sze&rkesztése… +- +- +- &Delete Entry… +- Bejegyzés &törlése… +- +- +- &New Group… +- Ú&j csoport… +- +- +- &Edit Group… +- Csoport sz&erkesztése… +- +- +- &Delete Group… +- Csoport &törlése… +- +- +- Download All &Favicons… +- Minden favicon &letöltése… +- +- +- Sa&ve Database As… +- Adatbázis mentése más &néven… +- +- +- Database &Security… +- Adatbázis &biztonság… +- +- +- Database &Reports... +- Adatbázis &jelentések… +- +- +- Statistics, health check, etc. +- Statisztika, állapotfelmérés, stb. +- +- +- &Database Settings… +- Adatbázis-&beállítások… +- +- +- &Clone Entry… +- Bejegyzés &klónozása… +- +- +- Move u&p +- Mozgatás &fel +- +- +- Move entry one step up +- Bejegyzés mozgatása egy lépéssel feljebb +- +- +- Move do&wn +- Mozgatás &le +- +- +- Move entry one step down +- Bejegyzés mozgatása egy lépéssel lejebb +- +- +- Copy &Username +- &Felhasználónév másolása +- +- +- Copy &Password +- &Jelszó másolása +- +- +- Download &Favicon +- &Favicon letöltése +- +- +- &Lock Databases +- Adatbázisok &zárolása +- +- +- &CSV File… +- &CSV-fájl… +- +- +- &HTML File… +- &HTML-fájl +- +- +- KeePass 1 Database… +- KeePass 1 adatbázis… +- +- +- 1Password Vault… +- 1Password Vault… +- +- +- CSV File… +- CSV-fájl… +- +- +- Show TOTP +- TOTP megjelenítése +- +- +- Show QR Code +- QR-kód megjelenítése +- +- +- Set up TOTP… +- TOTP beállítása… +- +- +- Report a &Bug +- &Hiba jelentése +- +- +- Open Getting Started Guide +- KezdÅ‘ lépések kézikönyv megnyitása +- +- +- &Online Help +- &Online súgó +- +- +- Go to online documentation +- Ugrás az online dokumentációra +- +- +- Open User Guide +- Felhasználói kézikönyv megnyitása +- +- +- Save Database Backup... +- Biztonsági mentés az adatbázisról… +- +- +- Add key to SSH Agent +- Kulcs hozzáadása az SSH-ügynökhöz +- +- +- Remove key from SSH Agent +- Kulcs eltávolítása az SSH-ügynökbÅ‘l +- +- +- Compact Mode +- Kompakt mód +- +- +- Automatic +- Automatikus +- +- +- Light +- Világos +- +- +- Dark +- Sötét +- +- +- Classic (Platform-native) +- Klasszikus (platform natív) +- +- +- Show Toolbar +- Eszköztár megjelenítése +- +- +- Show Preview Panel +- ElÅ‘nézet panel megjelenítése +- +- +- Don't show again for this version +- Ne jelenjen meg többé ehhez a verzióhoz +- +- +- Restart Application? +- Alkalmazás újraindítása? +- +- +- You must restart the application to apply this setting. Would you like to restart now? +- Ennek a beállításnak az érvényre kerüléséhez újra kell indítani az alkalmazást. Legyen azonnal újraindítva? +- +- +- Perform Auto-Type Sequence +- Automatikus beírási sorrend végrehajtása +- +- +- {USERNAME} +- {FELHASZNÃLÓNÉV} +- +- +- {USERNAME}{ENTER} +- {FELHASZNÃLÓNÉV}{ENTER} +- +- +- {PASSWORD} +- {JELSZÓ} +- +- +- {PASSWORD}{ENTER} +- {JELSZÓ}{ENTER} +- +- +- Always on Top +- Mindig felül +- +- +- Hide Usernames +- Felhasználónevek elrejtése +- +- +- Hide Passwords +- Jelszavak elrejtése +- +- +- +- ManageDatabase +- +- Database settings +- Adatbázis-beállítások +- +- +- Edit database settings +- Adatbázis-beállítások szerkesztése +- +- +- Unlock database +- Adatbázis feloldása +- +- +- Unlock database to show more information +- Adatbázis feloldása a további információk megjelenítéséhez +- +- +- Lock database +- Adatbázis zárolása +- +- +- +- ManageSession +- +- Disconnect +- Leválasztás +- +- +- Disconnect this application +- Alkalmazás leválasztása +- +- +- +- Merger +- +- Creating missing %1 [%2] +- Hiányzó %1 létrehozása [%2] +- +- +- Relocating %1 [%2] +- %1 áthelyezése [%2] +- +- +- Overwriting %1 [%2] +- %1 felülírása [%2] +- +- +- older entry merged from database "%1" +- régebbi bejegyzés összeolvasztva a(z) „%1†adatbázisból +- +- +- Adding backup for older target %1 [%2] +- Biztonsági mentés hozzáadása a régebbi %1 célhoz [%2] +- +- +- Adding backup for older source %1 [%2] +- Biztonsági mentés hozzáadása a régebbi %1 forráshoz [%2] +- +- +- Reapplying older target entry on top of newer source %1 [%2] +- A régebbi cél újra alkalmazása az újabb %1 forráson [%2] +- +- +- Reapplying older source entry on top of newer target %1 [%2] +- A régebbi forrás újra alkalmazása az újabb %1 célon [%2] +- +- +- Synchronizing from newer source %1 [%2] +- Szinkronizálás az újabb %1 forrásból [%2] +- +- +- Synchronizing from older source %1 [%2] +- Szinkronizálás a régebbi %1 forrásból [%2] +- +- +- Deleting child %1 [%2] +- %1 gyermek törlése [%2] +- +- +- Deleting orphan %1 [%2] +- %1 elárvult bejegyzés törlése [%2] +- +- +- Changed deleted objects +- Törölt objektumok módosítva +- +- +- Adding missing icon %1 +- Hiányzó %1 ikon hozzáadása +- +- +- Removed custom data %1 [%2] +- Törölt egyéni adat: %1 [%2] +- +- +- Adding custom data %1 [%2] +- Egyéni adat hozzáadása: %1 [%2] +- +- +- +- NewDatabaseWizard +- +- Create a new KeePassXC database... +- Új KeePassXC adatbázis létrehozása… +- +- +- Root +- Root group +- Gyökér +- +- +- +- NewDatabaseWizardPage +- +- WizardPage +- Varázsló oldal +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Itt állíthatja be az adatbázis titkosítási beállításokat. Ne aggódjon, késÅ‘bb is megváltoztathatja az adatbázis-beállításokban. +- +- +- Advanced Settings +- Speciális beállítások +- +- +- Simple Settings +- Egyszerű beállítások +- +- +- Encryption Settings +- Titkosítási beállítások +- +- +- +- NewDatabaseWizardPageDatabaseKey +- +- Database Credentials +- Adatbázis hitelesítési adatai +- +- +- A set of credentials known only to you that protects your database. +- Csak Ön által ismert hitelesítési adatkészlet, mely védi az adatbázist. +- +- +- +- NewDatabaseWizardPageEncryption +- +- Encryption Settings +- Titkosítási beállítások +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Itt állíthatja be az adatbázis titkosítási beállításokat. Ne aggódjon, késÅ‘bb is megváltoztathatja az adatbázis-beállításokban. +- +- +- +- NewDatabaseWizardPageMetaData +- +- General Database Information +- Ãltalános adatbázis-információk +- +- +- Please fill in the display name and an optional description for your new database: +- Töltse ki a megjelenítendÅ‘ nevet és a nem kötelezÅ‘ leírást az új adatbázishoz: +- +- +- +- NixUtils +- +- Password Manager +- JelszókezelÅ‘ +- +- +- +- OpData01 +- +- Invalid OpData01, does not contain header +- Érvénytelen OpData01, nem tartalmaz fejlécet +- +- +- Unable to read all IV bytes, wanted 16 but got %1 +- Nem minden IV bájt olvasható, 16 a várt érték, a kapott pedig %1 +- +- +- Unable to init cipher for opdata01: %1 +- A titkosító nem indítható az opdata01 számára: %1 +- +- +- Unable to read all HMAC signature bytes +- Nem olvasható minden HMAC aláíróbájt +- +- +- Malformed OpData01 due to a failed HMAC +- A helytelenül formázott OpData01 miatt a HMAC sikertelen. +- +- +- Unable to process clearText in place +- A clearText feldolgozás sikertelen a helyén +- +- +- Expected %1 bytes of clear-text, found %2 +- %1 bájt egyszerű szöveg a várt, de ehelyett a talált: %2 +- +- +- +- OpVaultOpenWidget +- +- Read Database did not produce an instance +-%1 +- Az adatbázis olvasása nem hozott létre példányt: +-%1 +- +- +- +- OpVaultReader +- +- Directory .opvault must exist +- A .opvault mappának léteznie kell +- +- +- Directory .opvault must be readable +- A .opvault mappa olvasható kell legyen +- +- +- Directory .opvault/default must exist +- A .opvault/default mappának léteznie kell +- +- +- Directory .opvault/default must be readable +- A .opvault/default mappa olvasható kell legyen +- +- +- Unable to decode masterKey: %1 +- Nem dekódolható a mesterkulcs: %1 +- +- +- Unable to derive master key: %1 +- A mesterkulcs nem származtatható: %1 +- +- +- +- OpenSSHKey +- +- Invalid key file, expecting an OpenSSH key +- Érvénytelen kulcsfájl, egy OpenSSh kulcs az elvált +- +- +- PEM boundary mismatch +- PEM-perem eltérés +- +- +- Base64 decoding failed +- Base64-dekódolás sikertelen +- +- +- Key file way too small. +- A kulcsfájl útja túl kicsi. +- +- +- Key file magic header id invalid +- Érvénytelen a kulcsfájl mágikus fejlécazonosítója +- +- +- Found zero keys +- Egyetlen kulcs sem található +- +- +- Failed to read public key. +- Nyilvános kulcs olvasása sikertelen. +- +- +- Corrupted key file, reading private key failed +- Sérült kulcsfájl, személyes kulcs olvasása sikertelen +- +- +- No private key payload to decrypt +- Nincs dekódolható adat a személyes kulcsból +- +- +- Trying to run KDF without cipher +- KDF futtatási kísérlet titkosító nélkül +- +- +- Passphrase is required to decrypt this key +- Jelmondat szükséges a kulcsfájl visszafejtéséhez +- +- +- Key derivation failed, key file corrupted? +- A kulcsszármaztatás sikertelen, megsérült a kulcsfájl? +- +- +- Decryption failed, wrong passphrase? +- Visszafejtés sikertelen, rossz a jelmondat? +- +- +- Unexpected EOF while reading public key +- Nem várt EOF a nyilvános kulcs olvasása közben +- +- +- Unexpected EOF while reading private key +- Nem várt EOF a személyes kulcs olvasása közben +- +- +- Can't write public key as it is empty +- Nem lehet írni a nyilvános kulcsot, mivel üres +- +- +- Unexpected EOF when writing public key +- Nem várt EOF a nyilvános kulcs írásakor +- +- +- Can't write private key as it is empty +- Nem lehet írni a személyes kulcs, mivel üres +- +- +- Unexpected EOF when writing private key +- Nem várt EOF a személyes kulcs írásakor +- +- +- Unsupported key type: %1 +- Nem támogatott kulcstípus: %1 +- +- +- Unknown cipher: %1 +- Ismeretlen titkosító: %1 +- +- +- Cipher IV is too short for MD5 kdf +- A IV titkosító túl rövid a MD5 KDF számára +- +- +- Unknown KDF: %1 +- Ismeretlen KDF: %1 +- +- +- Unknown key type: %1 +- Ismeretlen kulcstípus: %1 +- +- +- +- PasswordEdit +- +- Passwords do not match +- A jelszavak nem egyeznek +- +- +- Passwords match so far +- A jelszavak eddig megegyeznek +- +- +- Toggle Password (%1) +- Jelszó átváltása (%1) +- +- +- Generate Password (%1) +- Jelszó előállítása (%1) +- +- +- Warning: Caps Lock enabled! +- Figyelem: a Caps Lock be van kapcsolva! +- +- +- +- PasswordEditWidget +- +- Enter password: +- Jelszó megadása: +- +- +- Confirm password: +- Jelszó megerÅ‘sítése: +- +- +- Password +- Jelszó +- +- +- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> +- <p>A jelszó az adatbázis biztonságban tartásának elsÅ‘dleges módja.</p><p>A jó jelszavak hosszúak és egyediek. A KeePassXC elÅ‘ tud állítani egyet Önnek.</p> +- +- +- Passwords do not match. +- A jelszavak nem egyeznek +- +- +- Password field +- Jelszó mezÅ‘ +- +- +- Repeat password field +- JelszómezÅ‘ ismétlése +- +- +- +- PasswordGeneratorWidget +- +- %p% +- %p% +- +- +- strength +- Password strength +- erÅ‘sség +- +- +- entropy +- entrópia +- +- +- Password +- Jelszó +- +- +- Character Types +- Karaktertípusok +- +- +- Numbers +- Számok +- +- +- Extended ASCII +- BÅ‘vített ASCII +- +- +- Exclude look-alike characters +- Hasonlóan kinézÅ‘ karakterek kizárása +- +- +- Pick characters from every group +- Karakterek minden csoportból +- +- +- &Length: +- &Hossz: +- +- +- Passphrase +- Jelmondat +- +- +- Wordlist: +- Szólista: +- +- +- Word Separator: +- Szóelválasztó: +- +- +- Close +- Bezárás +- +- +- Entropy: %1 bit +- Entrópia: %1 bit +- +- +- Password Quality: %1 +- JelszóminÅ‘ség: %1 +- +- +- Poor +- Password quality +- Silány +- +- +- Weak +- Password quality +- Gyenge +- +- +- Good +- Password quality +- Jó +- +- +- Excellent +- Password quality +- Kiváló +- +- +- Switch to advanced mode +- Váltás speciális módba +- +- +- Advanced +- Speciális +- +- +- Braces +- Zárójelek +- +- +- Punctuation +- Központozás +- +- +- Quotes +- IdézÅ‘jelek +- +- +- Logograms +- Logogramok +- +- +- Character set to exclude from generated password +- A jelszó előállításnál kihagyandó karakterkészletek +- +- +- Do not include: +- Ne tartalmazza: +- +- +- Add non-hex letters to "do not include" list +- A nem hexadecimális betűk hozzáadása a „ne tartalmazza†listához +- +- +- Hex +- Hexadecimális +- +- +- Excluded characters: "0", "1", "l", "I", "O", "|", "ï¹’" +- Kihagyott karakterek: „0â€, „1â€, „lâ€, „Iâ€, „Oâ€, „|â€, „﹒†+- +- +- Generated password +- Előállított jelszó +- +- +- Upper-case letters +- Nagybetűk +- +- +- Lower-case letters +- Kisbetűk +- +- +- Special characters +- Speciális karakterek +- +- +- Math Symbols +- Matematikai szimbólumok +- +- +- Dashes and Slashes +- KötÅ‘jelek és perjelek +- +- +- Excluded characters +- Kizárt karakterek +- +- +- Hex Passwords +- Hexadecimális jelszavak +- +- +- Password length +- Jelszóhossz +- +- +- Word Case: +- Minden Szó Nagybetűs +- +- +- Regenerate password +- Jelszó újraelőállítása +- +- +- Copy password +- Jelszó másolása +- +- +- lower case +- kisbetű +- +- +- UPPER CASE +- NAGYBETÅ° +- +- +- Title Case +- Cím +- +- +- Generate Password +- Jelszó előállítása +- +- +- Also choose from: +- Tartalmazhat ezekbÅ‘l is: +- +- +- Additional characters to use for the generated password +- További karakterek az előállított jelszó számára +- +- +- Additional characters +- További karakterek +- +- +- Word Count: +- Szavak száma: +- +- +- Esc +- Esc +- +- +- Apply Password +- Jelszó alkalmazása +- +- +- Ctrl+S +- Ctrl+S +- +- +- Regenerate password (%1) +- Jelszó újraelőállítása (%1) +- +- +- Special Characters +- Speciális karakterek +- +- +- +- QApplication +- +- KeeShare +- KeeShare +- +- +- Statistics +- Statisztika +- +- +- Very weak password +- Nagyon gyenge jelszó +- +- +- Password entropy is %1 bits +- A jelszóentrópia %1 bit +- +- +- Weak password +- Gyenge jelszó +- +- +- Used in %1/%2 +- Használatban itt: %1/%2 +- +- +- Password is used %1 times +- A jelszó már %1 alkalommal használatban van +- +- +- Password has expired +- A jelszó lejárt +- +- +- Password expiry was %1 +- A jelszó lejárt ekkor: %1 +- +- +- Password is about to expire +- A jelszó le fog járni +- +- +- Password expires in %1 days +- A jelszó lejár %1 nap múlva +- +- +- Password will expire soon +- A jelszó hamarosan lejár +- +- +- Password expires on %1 +- A jelszó ekkor jár le: %1 +- +- +- Health Check +- Ãllapotfelmérés +- +- +- HIBP +- HIBP +- +- +- +- QMessageBox +- +- Overwrite +- Felülírás +- +- +- Delete +- Törlés +- +- +- Move +- Ãthelyezés +- +- +- Empty +- Ãœres +- +- +- Remove +- Eltávolítás +- +- +- Skip +- Kihagyás +- +- +- Disable +- Letiltás +- +- +- Merge +- Egyesítés +- +- +- Continue +- Folytatás +- +- +- +- QObject +- +- Database not opened +- Az adatbázis nem lett megnyitva +- +- +- Database hash not available +- Az adatbázis hasítóértéke nem elérhetÅ‘ +- +- +- Client public key not received +- A kliens nyilvános kulcsa nem érkezett meg +- +- +- Cannot decrypt message +- Nem lehet visszafejteni az üzenetet +- +- +- Action cancelled or denied +- A műveletet megszakították vagy visszautasították +- +- +- KeePassXC association failed, try again +- A KeePassXC társítása sikertelen, próbálja újra +- +- +- Encryption key is not recognized +- A titkosítási kulcs nem lett felismerve +- +- +- Incorrect action +- Helytelen művelet +- +- +- Empty message received +- Ãœres üzenet érkezett +- +- +- No URL provided +- Nincs URL biztosítva +- +- +- No logins found +- Belépések nem találhatók +- +- +- Unknown error +- Ismeretlen hiba +- +- +- Add a new entry to a database. +- Új bejegyzés hozzáadása egy adatbázishoz. +- +- +- Path of the database. +- Adatbázis útvonala. +- +- +- Key file of the database. +- Adatbázis kulcsfájlja. +- +- +- path +- útvonal +- +- +- Username for the entry. +- Bejegyzés felhasználóneve. +- +- +- username +- felhasználónév +- +- +- URL for the entry. +- Bejegyzés URL-je. +- +- +- URL +- URL +- +- +- Prompt for the entry's password. +- Bejegyzés jelszavának bekérése. +- +- +- Generate a password for the entry. +- Jelszó előállítása a bejegyzés számára. +- +- +- length +- hosszúság +- +- +- Path of the entry to add. +- Hozzáadandó bejegyzés útvonala. +- +- +- Path of the entry to clip. +- clip = copy to clipboard +- Levágandó bejegyzés útvonala. +- +- +- Timeout in seconds before clearing the clipboard. +- Késleltetés a vágólap törlése elÅ‘tt (másodpercben). +- +- +- Edit an entry. +- Bejegyzés szerkesztése. +- +- +- Title for the entry. +- Bejegyzés címe. +- +- +- title +- cím +- +- +- Path of the entry to edit. +- SzerkesztendÅ‘ bejegyzés útvonala. +- +- +- Estimate the entropy of a password. +- Jelszó entrópiájának becslése. +- +- +- Password for which to estimate the entropy. +- A jelszó, amelynek az entrópiája becslésre vár. +- +- +- Perform advanced analysis on the password. +- A jelszó speciális elemzése. +- +- +- +- +-Available commands: +- +- +- +-ElérhetÅ‘ parancsok: +- +- +- +- Name of the command to execute. +- Végrehajtandó parancs neve. +- +- +- List database entries. +- Adatbázis-bejegyzések felsorolása. +- +- +- Path of the group to list. Default is / +- Felsorolandó csoport útvonala. Az alapértelezett: / +- +- +- Find entries quickly. +- Bejegyzések gyors keresése. +- +- +- Search term. +- Kifejezés keresése. +- +- +- Merge two databases. +- Két adatbázis egyesítése. +- +- +- Path of the database to merge from. +- Az egyesítés forrásadatbázisának útvonala. +- +- +- Use the same credentials for both database files. +- Ugyanazon hitelesítési adatok alkalmazása mindkét adatbázisfájlhoz. +- +- +- Key file of the database to merge from. +- Az egyesítés forrásadatbázisának kulcsfájlja. +- +- +- Show an entry's information. +- Bejegyzés információinak megjelenítése. +- +- +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- MegjelenítendÅ‘ attribútumnevek. Ez a beállítás többször is megadható, minden megjelenÅ‘ attribútummal soronként a megadott sorrendben. Ha nincs meghatározva attribútum, akkor az alapértelmezett attribútumok összefoglalója lesz megadva. +- +- +- attribute +- attribútum +- +- +- Name of the entry to show. +- A megjelenítendÅ‘ bejegyzés neve. +- +- +- NULL device +- NULL eszkösz +- +- +- error reading from device +- hiba az eszköz olvasása közben +- +- +- malformed string +- rosszul formázott karakterlánc +- +- +- missing closing quote +- hiányzó lezáró idézÅ‘jel +- +- +- Group +- Csoport +- +- +- Title +- Cím +- +- +- Username +- Felhasználónév +- +- +- Password +- Jelszó +- +- +- Notes +- Jegyzetek +- +- +- Last Modified +- Legutóbb módosítva +- +- +- Created +- Létrehozva +- +- +- Browser Integration +- BöngészÅ‘integráció +- +- +- SSH Agent +- SSH-ügynök +- +- +- Generate a new random diceware passphrase. +- Véletlenszerű új diceware jelmondat előállítása. +- +- +- Word count for the diceware passphrase. +- Szavak számra a diceware jelmondat számára. +- +- +- Wordlist for the diceware generator. +-[Default: EFF English] +- Szólista a diceware előállító számára. +-[Alapértelmezett: EFF angol] +- +- +- Generate a new random password. +- Véletlenszerű új jelmondat előállítása. +- +- +- Could not create entry with path %1. +- Nem hozható létre bejegyzés a(z) %1 útvonallal. +- +- +- Enter password for new entry: +- Adja meg a jelszót az új bejegyzéshez: +- +- +- Writing the database failed %1. +- Az adatbázis kiírása sikertelen: %1. +- +- +- Successfully added entry %1. +- A(z) %1 bejegyzés sikeresen hozzáadva. +- +- +- Invalid timeout value %1. +- Érvénytelen idÅ‘túllépési érték: %1. +- +- +- Entry %1 not found. +- A(z) %1 bejegyzés nem található. +- +- +- Entry with path %1 has no TOTP set up. +- A(z) %1 útvonalú bejegyzéshez nincs TOTP beállítva. +- +- +- Clearing the clipboard in %1 second(s)... +- A vágólap törlése %1 másodperc múlva…A vágólap törlése %1 másodperc múlva… +- +- +- Clipboard cleared! +- Vágólap törölve! +- +- +- Silence password prompt and other secondary outputs. +- Jelszó bekérés és egyéb másodlagos kimenetek némítása. +- +- +- count +- CLI parameter +- szám +- +- +- Could not find entry with path %1. +- Nem található bejegyzés a(z) %1 útvonalon. +- +- +- Not changing any field for entry %1. +- A(z) %1 bejegyzés egyik mezÅ‘je sem lesz változtatva. +- +- +- Enter new password for entry: +- Adja meg a bejegyzés új jelszavát: +- +- +- Writing the database failed: %1 +- Az adatbázis kiírása sikertelen: %1 +- +- +- Successfully edited entry %1. +- A(z) %1 bejegyzése sikeresen szerkesztve. +- +- +- Length %1 +- Hossz: %1 +- +- +- Entropy %1 +- Entrópia: %1 +- +- +- Log10 %1 +- Log10: %1 +- +- +- Multi-word extra bits %1 +- Több szavas extra bitek: %1 +- +- +- Type: Bruteforce +- Típus: Nyers erÅ‘ +- +- +- Type: Dictionary +- Típus: Szótár +- +- +- Type: Dict+Leet +- Típus: Szótár+leet +- +- +- Type: User Words +- Típus: Felhasználói szavak +- +- +- Type: User+Leet +- Típus: Felhasználói+leet +- +- +- Type: Repeated +- Típus: Ismételt +- +- +- Type: Sequence +- Típus: Sorozat +- +- +- Type: Spatial +- Típus: Térbeli +- +- +- Type: Date +- Típus: Dátum +- +- +- Type: Bruteforce(Rep) +- Típus: Nyers erÅ‘ (Ism.) +- +- +- Type: Dictionary(Rep) +- Típus: Szótár (Ism.) +- +- +- Type: Dict+Leet(Rep) +- Típus: Szótár+leet (Ism.) +- +- +- Type: User Words(Rep) +- Típus: Felhasználói szavak (Ism.) +- +- +- Type: User+Leet(Rep) +- Típus: Felhasználói+leet (Ism.) +- +- +- Type: Repeated(Rep) +- Típus: Ismételt (Ism.) +- +- +- Type: Sequence(Rep) +- Típus: Sorozat (Ism.) +- +- +- Type: Spatial(Rep) +- Típus: Térbeli (Ism.) +- +- +- Type: Date(Rep) +- Típus: Dátum (Ism.) +- +- +- Type: Unknown%1 +- Típus: Ismeretlen%1 +- +- +- Entropy %1 (%2) +- Entrópia: %1 (%2) +- +- +- *** Password length (%1) != sum of length of parts (%2) *** +- *** Jelszóhossz (%1) != részek hosszának össszege (%2) *** +- +- +- Failed to load key file %1: %2 +- A(z) %1 kulcsfájl betöltése sikertelen: %2 +- +- +- Length of the generated password +- Az előállított jelszó hossza +- +- +- Use lowercase characters +- Kisbetűs karakterek használata +- +- +- Use uppercase characters +- Nagybetűs karakterek használata +- +- +- Use special characters +- Különleges karakterek használata +- +- +- Use extended ASCII +- BÅ‘vített ASCII használata +- +- +- Exclude character set +- Karakterkészlet kizárása +- +- +- chars +- karakter +- +- +- Exclude similar looking characters +- Hasonlóan kinézÅ‘ karakterek kizárása +- +- +- Include characters from every selected group +- Karakterek választása minden egyes csoportból +- +- +- Recursively list the elements of the group. +- A csoport elemeinek rekurzív listázása. +- +- +- Cannot find group %1. +- A(z) %1 csoport nem található. +- +- +- Error reading merge file: +-%1 +- Hiba az összeolvasztási fájl olvasásakor: +-%1 +- +- +- Unable to save database to file : %1 +- Az adatbázis nem menthetÅ‘ fájlba: %1 +- +- +- Unable to save database to file: %1 +- Az adatbázis nem menthetÅ‘ fájlba: %1 +- +- +- Successfully recycled entry %1. +- Sikeresen kukába dobva a bejegyzés: %1. +- +- +- Successfully deleted entry %1. +- A(z) %1 bejegyzés sikeresen törölve. +- +- +- Show the entry's current TOTP. +- A bejegyzés jelenlegi TOTP értékének megjelenítése. +- +- +- ERROR: unknown attribute %1. +- HIBA: ismeretlen %1 attribútum. +- +- +- No program defined for clipboard manipulation +- Nincs program megadva a vágólapkezeléshez +- +- +- file empty +- a fájl üres +- +- +- %1: (row, col) %2,%3 +- %1: (sor, oszlop) %2,%3 +- +- +- AES-KDF (KDBX 4) +- AES-KDF (KDBX 4) +- +- +- AES-KDF (KDBX 3.1) +- AES-KDF (KDBX 3.1) +- +- +- Invalid Settings +- TOTP +- Érvénytelen beállítások +- +- +- Invalid Key +- TOTP +- Érvénytelen kulcs +- +- +- Message encryption failed. +- Az üzenet titkosítása sikertelen. +- +- +- No groups found +- Nem találhatóak csoportok +- +- +- Create a new database. +- Új adatbázis létrehozása. +- +- +- File %1 already exists. +- A fájl már létezik: %1. +- +- +- Loading the key file failed +- Hiba a kulcsfájl betöltésekor +- +- +- No key is set. Aborting database creation. +- A kulcs nem lett megadva. Az adatbázis létrehozása megszakítva. +- +- +- Failed to save the database: %1. +- Az adatbázis nem menthetÅ‘: %1. +- +- +- Successfully created new database. +- Az adatbázis sikeresen létre lett hozva. +- +- +- Creating KeyFile %1 failed: %2 +- A(z) %1 KeyFile létrehozása sikertelen: %2 +- +- +- Loading KeyFile %1 failed: %2 +- A(z) %1 KeyFile betöltése sikertelen: %2 +- +- +- Path of the entry to remove. +- Az eltávolítandó bejegyzés útvonala. +- +- +- Existing single-instance lock file is invalid. Launching new instance. +- A meglévÅ‘ egypéldányos zárolási fájl érvénytelen. Új példány indítása. +- +- +- The lock file could not be created. Single-instance mode disabled. +- A zárolási fájlt nem lehet létrehozni. Egyedi példány mód letiltva. +- +- +- KeePassXC - cross-platform password manager +- KeePassXC – keresztplatformos jelszókezelÅ‘ +- +- +- filenames of the password databases to open (*.kdbx) +- megnyitandó jelszóadatbázisok fájlnevei (*.kdbx) +- +- +- path to a custom config file +- útvonal az egyéni beállítófájlhoz +- +- +- key file of the database +- adatbázis kulcsfájlja +- +- +- read password of the database from stdin +- adatbázis jelszó beolvasása az stdin-rÅ‘l +- +- +- Another instance of KeePassXC is already running. +- A KeePassXC egy másik példánya is fut. +- +- +- Fatal error while testing the cryptographic functions. +- Végzetes hiba a kriptográfiai funkciók tesztelése közben. +- +- +- KeePassXC - Error +- KeePassXC – Hiba +- +- +- Database password: +- Adatbázis jelszava +- +- +- Cannot create new group +- Nem hozható létre új csoport +- +- +- Deactivate password key for the database. +- Jelszókulcs deaktiválása az adatbázishoz. +- +- +- Displays debugging information. +- Hibakeresési információk megjelenítése. +- +- +- Deactivate password key for the database to merge from. +- Jelszókulcs deaktiválása az adatbázishoz, amelybÅ‘l az egyesítésre kerül. +- +- +- Version %1 +- Verzió: %1 +- +- +- Build Type: %1 +- Összeállítás típusa: %1 +- +- +- Revision: %1 +- Revízió: %1 +- +- +- Distribution: %1 +- Disztribúció: %1 +- +- +- Debugging mode is disabled. +- Hibakeresési mód letiltva. +- +- +- Debugging mode is enabled. +- Hibakeresési mód engedélyezve. +- +- +- Operating system: %1 +-CPU architecture: %2 +-Kernel: %3 %4 +- Operációs rendszer: %1 +-CPU architektúra: %2 +-Kernel: %3 %4 +- +- +- Auto-Type +- Automatikus beírás +- +- +- KeeShare (signed and unsigned sharing) +- KeeShare (aláírt és nem aláírt megosztás) +- +- +- KeeShare (only signed sharing) +- KeeShare (csak aláírt megoszás) +- +- +- KeeShare (only unsigned sharing) +- KeeShare (csak nem aláírt megosztás) +- +- +- YubiKey +- YubiKey +- +- +- TouchID +- TouchID +- +- +- None +- Nincs +- +- +- Enabled extensions: +- Engedélyezett kiterjesztések: +- +- +- Cryptographic libraries: +- Kriptográfiai könyvtárak: +- +- +- Cannot generate a password and prompt at the same time! +- Jelszó előállítása és bekérése egyszerre nem lehetséges! +- +- +- Adds a new group to a database. +- Új csoport hozzáadása az adatbázishoz. +- +- +- Path of the group to add. +- A hozzáadandó csoport útvonala. +- +- +- Group %1 already exists! +- A csoport már létezik: %1! +- +- +- Group %1 not found. +- Nem található a csoport: %1. +- +- +- Successfully added group %1. +- A csoport sikeresen hozzáadva: %1. +- +- +- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. +- Ajánlott ellenÅ‘rizni, hogy a jelszavak nem szivárogtak-e nyilvánosan. A(z) FILENAME fájlnak HIBP formátumban – a https://haveibeenpwned.com/Passwords oldalon elérhetÅ‘ formátum szerint – kell tartalmaznia a szivárgott jelszavak SHA-1 hasítóértékének listáját. +- +- +- FILENAME +- FÃJLNÉV +- +- +- Analyze passwords for weaknesses and problems. +- Jelszavak gyengeségi és problematikussági vizsgálata. +- +- +- Failed to open HIBP file %1: %2 +- HIBP-fájl megnyitása sikertelen: %1 %2 +- +- +- Evaluating database entries against HIBP file, this will take a while... +- Az adatbázis-bejegyzések kiértékelése a HIBP-fájl alapján egy ideig el fog tartani… +- +- +- Close the currently opened database. +- Pillanatnyilag megnyitott adatbázis bezárása. +- +- +- Display this help. +- Ezen súgó megjelenítése. +- +- +- slot +- foglalat +- +- +- Invalid word count %1 +- Érvénytelen a szavak száma: %1 +- +- +- The word list is too small (< 1000 items) +- A szavak listája túl rövid (< 1000 elem) +- +- +- Exit interactive mode. +- Kilépés az interaktív módból. +- +- +- Exports the content of a database to standard output in the specified format. +- Szabványos kimenetre exportálja az adatbázis tartalmát a meghatározott formátumban. +- +- +- Unable to export database to XML: %1 +- Az adatbázis nem exportálható XML-be: %1 +- +- +- Unsupported format %1 +- Nem támogatott formátum: %1 +- +- +- Use numbers +- Számok alkalmazása +- +- +- Invalid password length %1 +- Érvénytelen jelszóhossz: %1 +- +- +- Display command help. +- Parancsok súgójának megjelenítése. +- +- +- Available commands: +- ElérhetÅ‘ parancsok: +- +- +- Import the contents of an XML database. +- XML adatbázis tartalmának importálása. +- +- +- Path of the XML database export. +- Exportálandó XML adatbázis útvonala. +- +- +- Path of the new database. +- Új adatbázis útvonala. +- +- +- Successfully imported database. +- Sikeres adatbázis importálás. +- +- +- Unknown command %1 +- Ismeretlen parancs: %1 +- +- +- Flattens the output to single lines. +- Kimenet egyetlen sorrá való lapítása. +- +- +- Only print the changes detected by the merge operation. +- Az egyesítési művelet által talált módosítások kiíratása. +- +- +- Yubikey slot for the second database. +- A második adatbázis Yubikey foglalata. +- +- +- Successfully merged %1 into %2. +- %1 sikeresen egyesítve a következÅ‘vel: %2. +- +- +- Database was not modified by merge operation. +- Az adatbázis nem változott az összeolvasztási művelet során. +- +- +- Moves an entry to a new group. +- Bejegyzés mozgatása egy új csoportba. +- +- +- Path of the entry to move. +- A mozgatandó bejegyzés útvonala. +- +- +- Path of the destination group. +- A célcsoport útvonala. +- +- +- Could not find group with path %1. +- Nem található csoport ezen az útvonalon: %1. +- +- +- Entry is already in group %1. +- A bejegyzés már a csoportban van: %1. +- +- +- Successfully moved entry %1 to group %2. +- A(z) %1 bejegyzés sikeresen átmozgatva a csoportba: %2. +- +- +- Open a database. +- Adatbázis megnyitása. +- +- +- Path of the group to remove. +- Egy törlendÅ‘ csoport útvonala. +- +- +- Cannot remove root group from database. +- A gyökércsoport nem törölhetÅ‘ az adatbázisból. +- +- +- Successfully recycled group %1. +- Sikeresen kukába dobva a csoport: %1. +- +- +- Successfully deleted group %1. +- A csoport sikeresen törölve: %1. +- +- +- Failed to open database file %1: not found +- Az adatbázisfájl megnyitása sikertelen, mivel nem található: %1 +- +- +- Failed to open database file %1: not a plain file +- Az adatbázisfájl megnyitása sikertelen, mivel nem egyszerű fájl: %1 +- +- +- Failed to open database file %1: not readable +- Az adatbázisfájl megnyitása sikertelen, mivel nem olvasható: %1 +- +- +- Enter password to unlock %1: +- Jelszó megadása a feloldásához: %1 +- +- +- Invalid YubiKey slot %1 +- Érvénytelen YubiKey foglalat: %1 +- +- +- Enter password to encrypt database (optional): +- Adjon meg egy jelszót az adatbázis titkosításához (válaszható): +- +- +- HIBP file, line %1: parse error +- HIBP fájl, %1. sor: feldolgozási hiba +- +- +- Secret Service Integration +- Titkosító szolgáltatás integrációja +- +- +- User name +- Felhasználónév +- +- +- Password for '%1' has been leaked %2 time(s)! +- Az ehhez tartozó jelszó %2 alkalommal kiszivárgott: „%1â€!Az ehhez tartozó jelszó %2 alkalommal kiszivárgott: „%1â€! +- +- +- Invalid password generator after applying all options +- Érvénytelen jelszó-előállító az összes beállítás alkalmazása után +- +- +- Show the protected attributes in clear text. +- A védett attribútumok megjelenítése egyszerű szövegként. +- +- +- Browser Plugin Failure +- Hiba a böngészÅ‘beépülÅ‘ben +- +- +- Could not save the native messaging script file for %1. +- Nem lehet menteni a natív üzenetküldÅ‘ parancsfájlt: %1. +- +- +- Copy the given attribute to the clipboard. Defaults to "password" if not specified. +- A megadott attribútum másolása a vágólapra. Ha nincs megadva, akkor a „password†az alapértelmezés. +- +- +- Copy the current TOTP to the clipboard (equivalent to "-a totp"). +- A jelenlegi TOTP másolása a vágólapra (a „-a totpâ€-vel megegyezÅ‘en). +- +- +- Copy an entry's attribute to the clipboard. +- Egy bejegyzés attribútumának másolása a vágólapra. +- +- +- ERROR: Please specify one of --attribute or --totp, not both. +- HIBA: Vagy a „--attribute†vagy a „--totp†adható meg egyszerre, mindkettÅ‘ nem. +- +- +- ERROR: attribute %1 is ambiguous, it matches %2. +- HIBA: a(z) %1 attribútum kétértelmű, megeegyezik ezzel: %2. +- +- +- Attribute "%1" not found. +- Az attribútum nem található: „%1â€. +- +- +- Entry's "%1" attribute copied to the clipboard! +- A bejegyzés attribútuma a vágólapra másolva: „%1â€. +- +- +- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). +- A Yubikey foglalattal és egy választható sorozatszámmal lehet az adatbázist elérni (pl. 1:7370001). +- +- +- slot[:serial] +- foglalat[:sorozatszám] +- +- +- Target decryption time in MS for the database. +- Megcélzott visszafejtési idÅ‘ a ms-ban az adatbázis számára. +- +- +- time +- idÅ‘ +- +- +- Set the key file for the database. +- Adja meg a kulcsfájlt az adatbázis számára. +- +- +- Set a password for the database. +- Adjon meg jelszót az adatbázis számára. +- +- +- Invalid decryption time %1. +- Érvénytelen visszafejtési idÅ‘: %1. +- +- +- Target decryption time must be between %1 and %2. +- A megcélzott visszafejtési idÅ‘ %1 és %2 között kell legyen. +- +- +- Failed to set database password. +- Az adatbázisjelszó beállítása sikertelen. +- +- +- Benchmarking key derivation function for %1ms delay. +- Kulcsszármaztató függvény teljesítménymérése 1% ms-os késleltetéssel. +- +- +- Setting %1 rounds for key derivation function. +- %1 forduló beállítása a kulcsszármaztató függvény számára. +- +- +- error while setting database key derivation settings. +- Hiba az adatbázis kulcsszármaztató beállításainak módosítása közben. +- +- +- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. +- Exportálási formátum. LehetÅ‘ségek: „xml†vagy „csvâ€. Az alapértelmezett az „xmlâ€. +- +- +- Unable to import XML database: %1 +- Az XML adatbázis nem importálható: %1 +- +- +- Show a database's information. +- Adatbázis információinak megjelenítése. +- +- +- UUID: +- UUID: +- +- +- Name: +- Név: +- +- +- Description: +- Leírás: +- +- +- Cipher: +- Titkosító: +- +- +- KDF: +- Kulcsszármaztató függvény (KDF): +- +- +- Recycle bin is enabled. +- Kuka engedélyezve. +- +- +- Recycle bin is not enabled. +- A kuka nincs engedélyezve. +- +- +- Invalid command %1. +- Érvénytelen parancs: %1. +- +- +- Invalid YubiKey serial %1 +- Érvénytelen YubiKey sorozatszám: %1 +- +- +- Please touch the button on your YubiKey to continue… +- A folytatáshoz érintse meg a gombot a YubiKey-en… +- +- +- Do you want to create a database with an empty password? [y/N]: +- Valóban üres jelszót szeretne megadni az adatbázis számára? [y/N]: +- +- +- Repeat password: +- Jelszó ismétlése: +- +- +- Error: Passwords do not match. +- Hiba: A jelszavak nem egyeznek. +- +- +- All clipping programs failed. Tried %1 +- +- Az összes vágóprogram sikertelen. Próbálkozás: %1 +- +- +- +- AES (%1 rounds) +- AES (%1 forduló) +- +- +- AES 256-bit +- AES 256-bit +- +- +- Twofish 256-bit +- Twofish 256-bit +- +- +- ChaCha20 256-bit +- ChaCha20: 256-bit {20 256-?} +- +- +- Benchmark %1 delay +- Teljesítményvizsgálat: %1 késleltetés +- +- +- %1 ms +- milliseconds +- %1 ms%1 ms +- +- +- %1 s +- seconds +- %1 s%1 s +- +- +- path to a custom local config file +- útvonal az egyéni helyi beállítófájlhoz +- +- +- WARNING: You are using an old key file format which KeePassXC may +-stop supporting in the future. +- +-Please consider generating a new key file. +- FIGYELEM: Egy régi kulcsfájl formátumot használ, amit a KeePassXC lehet +-hogy nem fog támogatni a jövÅ‘ben. +- +-Fontolja meg, hogy új kulcsfájlt állítson elÅ‘. +- +- +- Argon2%1 (%2 rounds, %3 KB) +- Argon2%1 (%2 forduló, %3 KB) +- +- +- Argon2d (KDBX 4 – recommended) +- Argon2d (KDBX 4 – ajánlott) +- +- +- Argon2id (KDBX 4) +- Argon2id (KDBX 4) +- +- +- TOTP +- TOTP +- +- +- Icon +- Ikon +- +- +- Unsupported key file version: %1 +- Nem támogatott kulcsfájlverzió: %1 +- +- +- Checksum mismatch! Key file may be corrupt. +- Nem egyezik az ellenÅ‘rzőösszeg. A kulcsfájl megsérülhetett. +- +- +- Unexpected key file data! Key file may be corrupt. +- Váratlan kulcsfájladatok. A kulcsfájl megsérülhetett. +- +- +- +- QtIOCompressor +- +- Internal zlib error when compressing: +- BelsÅ‘ zlib hiba a tömörítés közben: +- +- +- Error writing to underlying device: +- Hiba az alárendelt eszközre való írás közben: +- +- +- Error opening underlying device: +- Hiba az alárendelt eszköz megnyitásakor: +- +- +- Error reading data from underlying device: +- Hiba az alárendelt eszközrÅ‘l történÅ‘ adatolvasás során: +- +- +- Internal zlib error when decompressing: +- BelsÅ‘ zlib hiba kibontás közben: +- +- +- +- QtIOCompressor::open +- +- The gzip format not supported in this version of zlib. +- A gzip formátum nem támogatott a zlib ezen verziójában. +- +- +- Internal zlib error: +- BelsÅ‘ zlib hiba: +- +- +- +- ReportsWidgetHealthcheck +- +- Also show entries that have been excluded from reports +- A jelentésekbÅ‘l kizárt bejegyzések megjelenítése. +- +- +- Hover over reason to show additional details. Double-click entries to edit. +- Vigye az egérmutatót az ok felé a további részletek megjelenítéséhez. Kattintson duplán a bejegyzésekre a szerkesztéshez. +- +- +- Bad +- Password quality +- Rossz +- +- +- Bad — password must be changed +- Rossz – a jelszót meg kell változtatni +- +- +- Poor +- Password quality +- Silány +- +- +- Poor — password should be changed +- Silány – a jelszót meg kellene változtatni +- +- +- Weak +- Password quality +- Gyenge +- +- +- Weak — consider changing the password +- Gyenge - Megfontolandó a jelszó változtatása +- +- +- (Excluded) +- (Kizárva) +- +- +- This entry is being excluded from reports +- Ez a bejegyzés ki van zárva a jelentésekbÅ‘l. +- +- +- Please wait, health data is being calculated... +- Türelem, az állapotadatok kiszámítása folyamatban… +- +- +- Congratulations, everything is healthy! +- Gratulálunk, az állapotfelmérés mindent rendben talált! +- +- +- Title +- Cím +- +- +- Path +- Útvonal +- +- +- Score +- Pontszám +- +- +- Reason +- Ok +- +- +- Edit Entry... +- Bejegyzés szerkesztése… +- +- +- Exclude from reports +- Kizárás a jelentésekbÅ‘l +- +- +- +- ReportsWidgetHibp +- +- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. +- VIGYÃZAT: Ez a jelentés információkat küld a „Have I Been Pwned†online szolgáltatás számára (https://haveibeenpwned.com). Ha folytatja, az adatbázis jelszavai kriptográfiailag hasítva lesznek és ezen hasítóértékek elsÅ‘ öt karaktere biztonságosan továbbítva lesz. Az adatbázis biztonságban marad és nem lehet felépíteni ezekbÅ‘l az információkból. De az elküldött jelszavak száma és a küldésre használt IP cím látható lesz e szolgáltatás számára. +- +- +- Perform Online Analysis +- Online vizsgálat vérehajtása +- +- +- Also show entries that have been excluded from reports +- A jelentésekbÅ‘l kizárt bejegyzések megjelenítése. +- +- +- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. +- Ez a KeePassXC build nem tartalmaz hálózati funkciókat. A jelszavak „Have I Been Pwned†szolgáltatással való ellenÅ‘rzéshez hálózati funkciókra van szükség. +- +- +- Congratulations, no exposed passwords! +- Gratulálunk, nincsenek felfedett jelszavak! +- +- +- Title +- Cím +- +- +- Path +- Útvonal +- +- +- Password exposed… +- Felfedett jelszavak… +- +- +- (Excluded) +- (Kizárva) +- +- +- This entry is being excluded from reports +- Ez a bejegyzés ki van zárva a jelentésekbÅ‘l. +- +- +- once +- egyszer +- +- +- up to 10 times +- 10 alatt +- +- +- up to 100 times +- 100 alatt +- +- +- up to 1000 times +- 1000 alatt +- +- +- up to 10,000 times +- 10.000 alatt +- +- +- up to 100,000 times +- 100.000 alatt +- +- +- up to a million times +- 1 millió alatt +- +- +- millions of times +- több millliószor +- +- +- Edit Entry... +- Bejegyzés szerkesztése… +- +- +- Exclude from reports +- Kizárás a jelentésekbÅ‘l +- +- +- +- ReportsWidgetStatistics +- +- Hover over lines with error icons for further information. +- További információk a hibaikonokkal rendelkezÅ‘ vonalak fölé vitt egérrel nyerhetÅ‘k. +- +- +- Name +- Név +- +- +- Value +- Érték +- +- +- Please wait, database statistics are being calculated... +- Türelem, az adatbázis-statisztikák kiszámítása folyamatban… +- +- +- Database name +- Adatbázisnév +- +- +- Description +- Leírás +- +- +- Location +- Hely +- +- +- Last saved +- Legutóbb mentve +- +- +- Unsaved changes +- Nem mentett módosítsok +- +- +- yes +- igen +- +- +- no +- nem +- +- +- The database was modified, but the changes have not yet been saved to disk. +- Az adatbázis módosítva lett, de még nem lett lemezre mentve. +- +- +- Number of groups +- Csoportszám +- +- +- Number of entries +- Bejegyzésszám +- +- +- Number of expired entries +- Lejárt bejegyzések száma +- +- +- The database contains entries that have expired. +- Az adatbázis lejárt bejegyzéseket tartalmaz. +- +- +- Unique passwords +- Egyedi jelszavak +- +- +- Non-unique passwords +- Nem egyedi jelszavak +- +- +- More than 10% of passwords are reused. Use unique passwords when possible. +- A jelszavak több, mint 10%-a újrahasznosított. Egyedi jelszavakat kellene használni, ahol csak lehetséges. +- +- +- Maximum password reuse +- Maximális jelszó-újrahasznosítás +- +- +- Some passwords are used more than three times. Use unique passwords when possible. +- Néhány jelszó több, mint háromszor lett újrahasznosítva. Egyedi jelszavakat kellene használni, ahol csak lehetséges. +- +- +- Number of short passwords +- Rövid jelszavak száma +- +- +- Recommended minimum password length is at least 8 characters. +- A jelszavak javasolt minimális hosszúsága legalább 8 karakter. +- +- +- Number of weak passwords +- Gyenge jelszavak száma +- +- +- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. +- Olyan hosszú és véletlenszerű jelszavak használata javasolt, melyek besorolása „jó†és „kiválóâ€. +- +- +- Entries excluded from reports +- JelentésekbÅ‘l kizárt bejegyzések +- +- +- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. +- A bejegyzések jelentésekbÅ‘l való kizárása – mivel ismerten gyenge jelszavakat tartalmaznak – nem feltétlenül jelent problémát, de nem szabad szem elÅ‘l veszteni Å‘ket. +- +- +- Average password length +- Ãtlagos jelszóhossz +- +- +- %1 characters +- %1 karakter +- +- +- Average password length is less than ten characters. Longer passwords provide more security. +- Az átlagos jelszóhossz kevesebb, mint 10 karakter. A hosszabb jelszavak nagyobb biztonságot szavatolnak. +- +- +- +- SSHAgent +- +- Agent connection failed. +- Ãœgynökkapcsolódás sikertelen. +- +- +- Agent protocol error. +- Ãœgynök protokoll hiba. +- +- +- No agent running, cannot add identity. +- Nincs működÅ‘ ügynök, nem adható hozzá identitás. +- +- +- No agent running, cannot remove identity. +- Nincs működÅ‘ ügynök, nem távolítható el identitás. +- +- +- Agent refused this identity. Possible reasons include: +- Az ügynök visszautasította ezt az identitást. Lehetséges okok: +- +- +- The key has already been added. +- A kulcs már hozzá lett adva. +- +- +- Restricted lifetime is not supported by the agent (check options). +- Az ügynök nem támogatja a korlátozott élettartamot (lásd a lehetÅ‘ségek). +- +- +- A confirmation request is not supported by the agent (check options). +- Az ügynök nem támogatja a visszaigazolási kérelmet (lásd a lehetÅ‘ségeket). +- +- +- Key identity ownership conflict. Refusing to add. +- Kulcs-identitás tulajdonosi konfliktus. Hozzáadás visszautasítva. +- +- +- No agent running, cannot list identities. +- Nincs működÅ‘ ügynök, identitások nem listázhatóak. +- +- +- +- SearchHelpWidget +- +- Search Help +- Keresés a súgóban +- +- +- Search terms are as follows: [modifiers][field:]["]term["] +- A keresési kifejezések a következÅ‘ek: [módosítók][mezÅ‘:]["]kifejezés["] +- +- +- Every search term must match (ie, logical AND) +- Az összes kifejezéssel egyeznie kell (azaz logikai ÉS) +- +- +- Modifiers +- Módosítók +- +- +- exclude term from results +- kifejezés kihagyása a találatok közül +- +- +- match term exactly +- pontos egyezés minden kifejezésre +- +- +- use regex in term +- regex használata a kifejezésben +- +- +- Fields +- MezÅ‘k +- +- +- Term Wildcards +- Kifejezés helyettesítÅ‘ karakterei +- +- +- match anything +- illeszkedés bármire +- +- +- match one +- illeszkedés egyre +- +- +- logical OR +- logikai VAGY +- +- +- Examples +- Példák +- +- +- +- SearchWidget +- +- Search +- Keresés +- +- +- Limit search to selected group +- Keresés korlátozása a kijelölt csoportra +- +- +- Search Help +- Keresés a súgóban +- +- +- Search (%1)... +- Search placeholder text, %1 is the keyboard shortcut +- Keresés (%1)… +- +- +- Case sensitive +- Nagy- és kisbetű érzékeny +- +- +- +- SettingsWidgetFdoSecrets +- +- Options +- Beállítások +- +- +- Enable KeepassXC Freedesktop.org Secret Service integration +- KeepassXC Freedesktop.org titkosító szolgáltatás integrációjának engedélyezése +- +- +- General +- Ãltalános +- +- +- Show notification when credentials are requested +- Értesítés megjelenítése hitelesítési adatok kérésekor +- +- +- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> +- <html><head/><body><p>Ha a kuka engedélyezve van az adatbázis számára, a bejegyzések a kukába lesznek mozgatva. Egyébként pedig megerÅ‘sítés nélkül törlése kerülnek.</p><p>Továbbra is megerÅ‘sítés szükséges az egymáshoz kapcsoló bejegyzések törléséhez.</p></body></html> +- +- +- Exposed database groups: +- Nyitott adatbáziscsoportok: +- +- +- Authorization +- Engedélyezés +- +- +- These applications are currently connected: +- Ezek az alkalmazások kapcsolódnak jelenleg: +- +- +- Don't confirm when entries are deleted by clients +- Nincs megerÅ‘sítés a bejegyzések kliensek által végrehajtott törlésekor +- +- +- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. +- <b>Hiba:</b> A DBus-hoz csatlakozás sikertelen. EllenÅ‘rizze a DBus beállításokat. +- +- +- <b>Warning:</b> +- <b>Figyelem:</b> +- +- +- Save current changes to activate the plugin and enable editing of this section. +- Mentse el a módosításokat a beépülÅ‘ aktiválásához és ezen rész szerkesztésének engedélyezéséhez. +- +- +- +- SettingsWidgetKeeShare +- +- Active +- Aktív +- +- +- Allow export +- Exportálás engedélyezése +- +- +- Allow import +- Importálás engedélyezése +- +- +- Own certificate +- Saját tanúsítvány +- +- +- Fingerprint: +- Ujjlenyomat: +- +- +- Certificate: +- Tanúsítvány: +- +- +- Signer +- Aláíró +- +- +- Key: +- Kulcs: +- +- +- Generate +- Előállítás +- +- +- Import +- Importálás +- +- +- Export +- Exportálás +- +- +- Imported certificates +- Importált tanúsítványok +- +- +- Trust +- Megbízható +- +- +- Ask +- Kérdéses +- +- +- Untrust +- Megbízhatatlan +- +- +- Remove +- Eltávolítás +- +- +- Path +- Útvonal +- +- +- Status +- Ãllapot +- +- +- Fingerprint +- Ujjlenyomat +- +- +- Certificate +- Tanúsítvány +- +- +- Trusted +- Megbízható +- +- +- Untrusted +- Megbízhatatlan +- +- +- Unknown +- Ismeretlen +- +- +- key.share +- Filetype for KeeShare key +- kulcs.share +- +- +- KeeShare key file +- KeeShare kulcsfájl +- +- +- All files +- Minden fájl +- +- +- Select path +- Útvonal kijelölése +- +- +- Exporting changed certificate +- Módosult tanúsítványok exportálása +- +- +- The exported certificate is not the same as the one in use. Do you want to export the current certificate? +- Az exportált tanúsítvány nem egyezik meg a jelenleg használattal. Exportálható a jelenlegi? +- +- +- Signer: +- Aláíró: +- +- +- Allow KeeShare imports +- KeeShare importálás engedélyezése +- +- +- Allow KeeShare exports +- KeeShare exportálás engedélyezése +- +- +- Only show warnings and errors +- Csak figyelmeztetések és hibák megjelenítése +- +- +- Key +- Kulcs +- +- +- Signer name field +- Aláíró neve mezÅ‘ +- +- +- Generate new certificate +- Új tanúsítvány előállítása +- +- +- Import existing certificate +- MeglévÅ‘ tanúsítvány importálása +- +- +- Export own certificate +- Saját tanúsítvány exportálása +- +- +- Known shares +- Ismert megosztások +- +- +- Trust selected certificate +- Kijelölt tanúsítvány megbízhatóvá minÅ‘sítése +- +- +- Ask whether to trust the selected certificate every time +- Kérdés a kijelölt tanúsítvány megbízhatóságáról minden alkalommal +- +- +- Untrust selected certificate +- Kijelölt tanúsítvány megbízhatatlanná minÅ‘sítése +- +- +- Remove selected certificate +- Kijelölt tanúsítvány törlése +- +- +- +- ShareExport +- +- Overwriting signed share container is not supported - export prevented +- Az aláírt tárolók felülírása nem támogatott – az exportálás megakadályozva +- +- +- Could not write export container (%1) +- Nem írható az exportálási tároló (%1) +- +- +- Could not embed signature: Could not open file to write (%1) +- Az aláírás nem ágyazható be: A fájl nem nyitható meg írásra (%1) +- +- +- Could not embed signature: Could not write file (%1) +- Az aláírás nem ágyazható be: A fájl nem írható (%1) +- +- +- Could not embed database: Could not open file to write (%1) +- Az adatbázis nem ágyazható be: A fájl nem nyitható meg írásra (%1) +- +- +- Could not embed database: Could not write file (%1) +- Az adatbázis nem ágyazható be: A fájl nem írható (%1) +- +- +- Overwriting unsigned share container is not supported - export prevented +- A nem aláírt tárolók felülírása nem támogatott – az exportálás megakadályozva +- +- +- Could not write export container +- Az exportálási tároló nem írható +- +- +- Unexpected export error occurred +- Váratlan exportálás hiba történt +- +- +- +- ShareImport +- +- Import from container without signature +- Importálás a tárolóból aláírás nélkül +- +- +- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? +- Nem ellenÅ‘rizhetÅ‘ a megosztott tároló forrása, mivel nincs aláírva. Valóban importálható: %1? +- +- +- Import from container with certificate +- Importálás a tárolóból aláírással +- +- +- Do you want to trust %1 with the fingerprint of %2 from %3? +- Megbízhatónak minÅ‘síthetÅ‘ a(z) %1, melynek ujjlenyomata %2 / %3? {1 ?} {2 ?} +- +- +- Not this time +- Most nem +- +- +- Never +- Soha +- +- +- Always +- Mindig +- +- +- Just this time +- Csak most +- +- +- Signed share container are not supported - import prevented +- Az aláírt tárolók nem támogatottak – az importálás megakadályozva +- +- +- File is not readable +- A fájl nem olvasható +- +- +- Invalid sharing container +- Érvénytelen megosztási tároló +- +- +- Untrusted import prevented +- Nem megbízható importálás megakadályozva +- +- +- Successful signed import +- Sikeres aláírt importálás +- +- +- Unsigned share container are not supported - import prevented +- A nem aláírt tárolók nem támogatottak – az importálás megakadályozva +- +- +- Successful unsigned import +- Sikeres aláíratlan importálás +- +- +- File does not exist +- A fájl nem létezik +- +- +- Unknown share container type +- Ismeretlen megosztási tárolótípus +- +- +- +- ShareObserver +- +- Import from %1 failed (%2) +- %1 importálása sikeretlen (%2) +- +- +- Import from %1 successful (%2) +- %1 importálása sikeres (%2) +- +- +- Imported from %1 +- Importálva innen: %1 +- +- +- Export to %1 failed (%2) +- %1 exportálása sikertelen (%2) +- +- +- Export to %1 successful (%2) +- Sikeres exportálás: %1 (%2) +- +- +- Export to %1 +- Exportálás: %1 +- +- +- Multiple import source path to %1 in %2 +- Több importálási forrásútvonal ehhez: %1, itt: %2 +- +- +- Conflicting export target path %1 in %2 +- ÃœtközÅ‘ %1 exportálási célútvonal itt: %2 +- +- +- +- TotpDialog +- +- Timed Password +- IdÅ‘alapú jelszó +- +- +- 000000 +- 000000 +- +- +- Copy +- Másolás +- +- +- Expires in <b>%n</b> second(s) +- <b>%n</b> másodperc múlva lejár<b>%n</b> másodperc múlva lejár +- +- +- +- TotpExportSettingsDialog +- +- Copy +- Másolás +- +- +- NOTE: These TOTP settings are custom and may not work with other authenticators. +- TOTP QR code dialog warning +- MEGJEGYZÉS: Ezek a TOTP beállítások egyéniek, és lehet hogy más hitelesítÅ‘kkel nem működnek. +- +- +- There was an error creating the QR code. +- Hiba történt a QR-kód létrehozásakor +- +- +- Closing in %1 seconds. +- Bezárás %1 másodperc után. +- +- +- +- TotpSetupDialog +- +- Setup TOTP +- TOTP beállítása +- +- +- Default RFC 6238 token settings +- Alapértelmezett RFC 6238-jelsor beállítás +- +- +- Steam token settings +- Adatfolyam jelsorbeállítás +- +- +- Use custom settings +- Egyéni beállítások alkalmazása +- +- +- Custom Settings +- Egyéni beállítások +- +- +- Time step: +- IdÅ‘léptetés: +- +- +- sec +- Seconds +- mp +- +- +- Code size: +- Kódméret: +- +- +- Secret Key: +- Titkos kulcs: +- +- +- Secret key must be in Base32 format +- A titkos kulcs formátuma Base32 kell legyen +- +- +- Secret key field +- Titkos kulcs mezÅ‘ +- +- +- Algorithm: +- Algoritmus: +- +- +- Time step field +- IdÅ‘lépés mezÅ‘ +- +- +- digits +- számok +- +- +- Invalid TOTP Secret +- Érvénytelen TOTP titok +- +- +- You have entered an invalid secret key. The key must be in Base32 format. +-Example: JBSWY3DPEHPK3PXP +- A megadott kulcs érvénytelen. A kulcs Base32 formátumú kell legyen. +-Példa: JBSWY3DPEHPK3PXP +- +- +- Confirm Remove TOTP Settings +- TOTP beállítások törlésének megerÅ‘sítése +- +- +- Are you sure you want to delete TOTP settings for this entry? +- Valóban törölhetÅ‘ek a bejegyzés TOTP beállításai? +- +- +- +- URLEdit +- +- Invalid URL +- Érvénytelen URL +- +- +- +- UpdateCheckDialog +- +- Checking for updates +- Frissítések keresése +- +- +- Checking for updates... +- Frissítések keresése... +- +- +- Close +- Bezárás +- +- +- Update Error! +- Frissítési hiba! +- +- +- An error occurred in retrieving update information. +- Hiba történt a frissítési információk letöltése közben. +- +- +- Please try again later. +- Javasolt késÅ‘bb újra megpróbálni. +- +- +- Software Update +- Szoftverfrissítés +- +- +- A new version of KeePassXC is available! +- ElérhetÅ‘ a KeePassXC egy újabb verziója! +- +- +- KeePassXC %1 is now available — you have %2. +- ElérhetÅ‘ a KeePassXC %1 verziója – a jenlegi verzió: %2. +- +- +- Download it at keepassxc.org +- Letöltés a keepassxc.org webhelyrÅ‘l. +- +- +- You're up-to-date! +- A jelenlegi verzió az aktuális. +- +- +- KeePassXC %1 is currently the newest version available +- A most elérhetÅ‘ legfrissebb KeePassXC verzió: %1 +- +- +- +- WelcomeWidget +- +- Start storing your passwords securely in a KeePassXC database +- Máris elkezdhetÅ‘ a jelszavak titkosított tárolása a KeePassXC adatbázisban +- +- +- Create new database +- Új adatbázis létrehozása +- +- +- Open existing database +- MeglévÅ‘ adatbázis megnyitása +- +- +- Import from KeePass 1 +- Importálás KeePass 1-bÅ‘l +- +- +- Import from CSV +- Importálás CSV-bÅ‘l +- +- +- Recent databases +- Legutóbb használt adatbázisok +- +- +- Welcome to KeePassXC %1 +- Ãœdvözöljük a KeePassXC %1 verzióban! +- +- +- Import from 1Password +- Importálás 1Password-bÅ‘l +- +- +- Open a recent database +- Legutóbbi adatbázis megnyitása +- +- +- +- YubiKey +- +- %1 [%2] Configured Slot - %3 +- %1 [%2] Beállított foglalat – %3 +- +- +- %1 [%2] Challenge Response - Slot %3 - %4 +- %1 [%2] kihívás-válasz – foglalat %3 - %4 +- +- +- Press +- Lenyomás +- +- +- Passive +- Passzív +- +- +- %1 Invalid slot specified - %2 +- %1 Érvénytelen a megadott foglalat – %2 +- +- +- The YubiKey interface has not been initialized. +- A YubiKey csatolófelület nem lett elindítva. +- +- +- Hardware key is currently in use. +- A hardverkulcs jelenleg használatban van. +- +- +- Could not find hardware key with serial number %1. Please plug it in to continue. +- Nem található hardverkulcs ezzel a sorozatszámmal: %1. A folytatáshoz, kérjük, csatlakoztassa. +- +- +- Hardware key timed out waiting for user interaction. +- A hardverkulcs kifutott az idÅ‘bÅ‘l a felhasználó interakcióra várva. +- +- +- A USB error ocurred when accessing the hardware key: %1 +- USB-hiba történt a hardverkulcs elérése közben: %1 +- +- +- Failed to complete a challenge-response, the specific error was: %1 +- A kihívás-válasz befejezése sikertelen. A pontos hiba: %1 +- +- +- +- YubiKeyEditWidget +- +- Refresh +- Frissítés +- +- +- YubiKey Challenge-Response +- YubiKey kihívás-válasz +- +- +- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- <p>Ha van <a href="https://www.yubico.com/">YubiKey</a> eszköze, akkor használhatja a további biztonság érdekében.</p><p>A YubiKey-hez szükséges, hogy az egyik foglalata <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 kihívás-válaszként</a> legyen beállítva.</p> +- +- +- Refresh hardware tokens +- Hardveres jelsorok frissítése +- +- +- Hardware key slot selection +- Hardverkulcsfoglalat kijelölése +- +- +- Could not find any hardware keys! +- Nem található semmilyen hardverkulcs. +- +- +- Selected hardware key slot does not support challenge-response! +- A kijelölt foglalatban lévÅ‘ hardverkulcs nem támogatja a kihívás-választ. +- +- +- Detecting hardware keys… +- Hardverkulcsok felismerése… +- +- +- No hardware keys detected +- Nincsenek felismert hardverkulcsok. +- +- +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_id.ts keepassxc-2.6.4-patched/share/translations/keepassx_id.ts +--- keepassxc-2.6.4-orig/share/translations/keepassx_id.ts 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/translations/keepassx_id.ts 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7889 +0,0 @@ +- +- +- AboutDialog +- +- About KeePassXC +- Tentang KeePassXC +- +- +- About +- Tentang +- +- +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- Laporkan bug di: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- +- +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- KeePassXC didistribusikan di bawah Lisensi Publik Umum GNU (GPL) versi 2 atau (sesuai pilihan Anda) versi 3. +- +- +- Contributors +- Kontributor +- +- +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Lihat Semua Kontribusi di GitHub</a> +- +- +- Debug Info +- Info Awakutu +- +- +- Include the following information whenever you report a bug: +- Sertakan informasi berikut setiap Anda melaporkan bug: +- +- +- Copy to clipboard +- Salin ke papan klip +- +- +- Project Maintainers: +- Pengelola Proyek: +- +- +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- Terima kasih dari tim KeePassXC kepada debfx yang telah membuat KeepassX original. +- +- +- +- AgentSettingsWidget +- +- Use OpenSSH for Windows instead of Pageant +- Gunakan OpenSSH untuk Windows dari pada Pageant +- +- +- Enable SSH Agent integration +- Aktifkan Integrasi Agen SSH +- +- +- SSH_AUTH_SOCK value +- Nilai SSH_AUTH_SOCK +- +- +- SSH_AUTH_SOCK override +- Timpa SSH_AUTH_SOCK +- +- +- (empty) +- (kosong) +- +- +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- Tidak ada soket Agen SSH yang ditemukan. Pastikan variabel sistem SSH_AUTH_SOCK ada atau atur timpaan. +- +- +- SSH Agent connection is working! +- Koneksi Agen SSH berhasil! +- +- +- +- ApplicationSettingsWidget +- +- Application Settings +- Pengaturan Aplikasi +- +- +- General +- Umum +- +- +- Security +- Keamanan +- +- +- Access error for config file %1 +- Galat akses untuk berkas konfigurasi %1 +- +- +- Icon only +- Hanya ikon +- +- +- Text only +- Hanya teks +- +- +- Text beside icon +- Teks di sebelah ikon +- +- +- Text under icon +- Teks di bawah ikon +- +- +- Follow style +- Ikuti gaya +- +- +- Reset Settings? +- Atur Ulang Pengaturan? +- +- +- Are you sure you want to reset all general and security settings to default? +- Apakah Anda yakin ingin mengatur ulang pengaturan umum dan keamanan ke nilai bawaan? +- +- +- Monochrome (light) +- Monokrom (terang) +- +- +- Monochrome (dark) +- Monokrom (gelap) +- +- +- Colorful +- Berwarna +- +- +- You must restart the application to set the new language. Would you like to restart now? +- Anda harus memulai ulang aplikasi untuk menerapkan bahasa. Apakah Anda ingin memulai ulang sekarang? +- +- +- +- ApplicationSettingsWidgetGeneral +- +- Basic Settings +- Pengaturan Dasar +- +- +- Startup +- Memulai +- +- +- Start only a single instance of KeePassXC +- Hanya mulai satu aplikasi KeePassXC +- +- +- Minimize window at application startup +- Minimalkan jendela saat memulai aplikasi +- +- +- File Management +- Manajemen Berkas +- +- +- Backup database file before saving +- Cadangkan basisdata sebelum disimpan +- +- +- Automatically save after every change +- Otomatis simpan setelah setiap perubahan +- +- +- Automatically reload the database when modified externally +- Muat ulang basisdata secara otomatis ketika diubah secara eksternal +- +- +- Entry Management +- Manajemen Entri +- +- +- Use group icon on entry creation +- Gunakan ikon grup pada pembuatan entri +- +- +- Minimize instead of app exit +- sembunyikan jendela ke baki sistem +- +- +- Show a system tray icon +- Tampilkan ikon baki sistem +- +- +- Hide window to system tray when minimized +- Sembunyikan jendela ke baki sistem ketika diminimalkan +- +- +- Auto-Type +- Ketik-Otomatis +- +- +- Use entry title to match windows for global Auto-Type +- Gunakan judul entri untuk mencocokkan jendela untuk Ketik-Otomatis global +- +- +- Use entry URL to match windows for global Auto-Type +- Gunakan URL entri untuk mencocokkan jendela untuk Ketik-Otomatis global +- +- +- Always ask before performing Auto-Type +- Selalu bertanya sebelum menjalankan Ketik-Otomatis +- +- +- ms +- Milliseconds +- md +- +- +- Movable toolbar +- Bilah perkakas dapat dipindah +- +- +- Remember previously used databases +- Ingat basisdata yang sebelumnya digunakan +- +- +- Load previously open databases on startup +- Muat basisdata yang sebelumnya terbuka saat memulai +- +- +- Remember database key files and security dongles +- Ingat berkas kunci dan dongle kemanan +- +- +- Check for updates at application startup once per week +- Periksa pembaruan saat memulai aplikasi sekali seminggu +- +- +- Include beta releases when checking for updates +- Termasuk rilis beta saat memeriksa pembaruan +- +- +- Language: +- Bahasa: +- +- +- (restart program to activate) +- (mulai ulang program untuk mengaktifkan) +- +- +- Minimize window after unlocking database +- Minimalkan jendela setelah membuka basisdata +- +- +- Minimize when opening a URL +- Minimalkan saat membuka URL +- +- +- Hide window when copying to clipboard +- Sembunyikan jendela saat menyalin ke papan klip +- +- +- Minimize +- Minimalkan +- +- +- Drop to background +- Beralih ke latar belakang +- +- +- Favicon download timeout: +- Batas waktu mengunduh favicon: +- +- +- Website icon download timeout in seconds +- Batas waktu mengunduh ikon situs web dalam detik +- +- +- sec +- Seconds +- det +- +- +- Toolbar button style +- Gaya tombol bilah perkakas +- +- +- Language selection +- Pemilihan bahasa +- +- +- Global auto-type shortcut +- Pintasan ketik-otomatis global +- +- +- Auto-type character typing delay milliseconds +- Tundaan pengetikan karakter ketik-otomatis dalam milidetik +- +- +- Auto-type start delay milliseconds +- Tundaan mulai ketik-otomatis dalam milidetik +- +- +- Automatically launch KeePassXC at system startup +- Otomatis jalankan KeePassXC pada saat perangkat dinyalakan +- +- +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- Simpan berkas basisdata secara aman (nonaktifkan jika Anda mengalami masalah dengan Dropbox, dll.) +- +- +- User Interface +- Antarmuka Pengguna +- +- +- Toolbar button style: +- Gaya tombol bilah alat: +- +- +- Use monospaced font for notes +- Gunakan fon monospace untuk catatan +- +- +- Tray icon type: +- Tipe ikon baki: +- +- +- Reset settings to default… +- Mengatur ulang pengaturan ke bawaan… +- +- +- Auto-Type typing delay: +- Tundaan pengetikan Ketik-Otomatis: +- +- +- Global Auto-Type shortcut: +- Pintasan Ketik-Otomatis global: +- +- +- Auto-Type start delay: +- Tundaan mulai Ketik-Otomatis: +- +- +- Automatically save when locking database +- Otomatis simpan saat mengunci basisdata +- +- +- Automatically save non-data changes when locking database +- Otomatis simpan perubahan non-data saat mengunci basisdata +- +- +- Tray icon type +- Tipe ikon baki +- +- +- +- ApplicationSettingsWidgetSecurity +- +- Timeouts +- Waktu Kedaluwarsa +- +- +- Clear clipboard after +- Kosongkan papan klip setelah +- +- +- sec +- Seconds +- det +- +- +- Lock databases after inactivity of +- Kunci basisdata setelah tidak aktif selama +- +- +- min +- min +- +- +- Forget TouchID after inactivity of +- Lupakan TouchID setelah tidak aktif selama +- +- +- Convenience +- Kenyamanan +- +- +- Lock databases when session is locked or lid is closed +- Kunci basisdata ketika sesi dikunci atau lid ditutup +- +- +- Forget TouchID when session is locked or lid is closed +- Lupakan TouchID ketika sesi dikunci atau lid ditutup +- +- +- Lock databases after minimizing the window +- Kunci basisdata setelah meminimalkan jendela +- +- +- Re-lock previously locked database after performing Auto-Type +- Kunci ulang basisdata yang sebelumnya terkunci setelah menjalankan Ketik-Otomatis +- +- +- Hide passwords in the entry preview panel +- Sembunyikan sandi di panel pratinjau entri +- +- +- Hide entry notes by default +- Sembunyikan catatan secara bawaan +- +- +- Privacy +- Privasi +- +- +- Use DuckDuckGo service to download website icons +- Gunakan layanan DuckDuckGo untuk mengunduh ikon situs web +- +- +- Clipboard clear seconds +- Detik menghapus papan klip +- +- +- Touch ID inactivity reset +- Atur ulang Touch ID setelah tidak aktif +- +- +- Database lock timeout seconds +- +- +- +- min +- Minutes +- min +- +- +- Clear search query after +- Hapus kueri pencarian setelah +- +- +- Require password repeat when it is visible +- Membutuhkan pengulangan sandi ketika ruas bisa dilihat +- +- +- Hide passwords when editing them +- Sembunyikan sandi saat penyuntingan +- +- +- Use placeholder for empty password fields +- Gunakan placeholder untuk ruas sandi yang kosong +- +- +- +- AutoType +- +- Couldn't find an entry that matches the window title: +- Tidak bisa menemukan entri yang cocok dengan judul jendela: +- +- +- Auto-Type - KeePassXC +- Ketik-Otomatis - KeePassXC +- +- +- Auto-Type +- Ketik-Otomatis +- +- +- The Syntax of your Auto-Type statement is incorrect! +- Sintaksis perintah Ketik-Otomatis Anda salah! +- +- +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- Perintah Ketik-Otomatis ini berisi waktu tunda yang sangat lama. Apakah Anda yakin ingin melanjutkan? +- +- +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- Perintah Ktik-Otomatis ini berisi tindakan tekan tombol dengan durasi yang sangat lambat. Apakah Anda yakin ingin melanjutkan? +- +- +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- Perintah Ketik-Otomatis ini berisi argumen yang diulang berkali-kali. Apakah Anda yakin ingin melanjutkan? +- +- +- Permission Required +- Membutuhkan Izin +- +- +- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC membutuhkan izin Aksesibilitas untuk menjalankan Ketik-Otomatis entri. Jika Anda sudah memberikan izin, Anda perlu memulai ulang KeePassXC. +- +- +- +- AutoTypeAssociationsModel +- +- Window +- Jendela +- +- +- Sequence +- Urutan +- +- +- Default sequence +- Urutan baku +- +- +- +- AutoTypeMatchModel +- +- Group +- Grup +- +- +- Title +- Judul +- +- +- Username +- Nama pengguna +- +- +- Sequence +- Urutan +- +- +- +- AutoTypeMatchView +- +- Copy &username +- Salin &nama pengguna +- +- +- Copy &password +- Salin &sandi +- +- +- +- AutoTypePlatformMac +- +- Permission Required +- Membutuhkan Izin +- +- +- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC membutuhkan izin Aksesibilitas dan Perekaman Layar untuk menjalankan Ketik-Otomatis secara global. Perekaman Layar dibutuhkan untuk mengakses judul jendela dari entri terkait. Jika Anda sudah memberikan izin, Anda perlu memulai ulang KeePassXC. +- +- +- +- AutoTypeSelectDialog +- +- Auto-Type - KeePassXC +- Ketik-Otomatis - KeePassXC +- +- +- Select entry to Auto-Type: +- Pilih entri untuk Ketik-Otomatis: +- +- +- Search... +- Cari... +- +- +- +- BrowserAccessControlDialog +- +- KeePassXC - Browser Access Request +- KeePassXC - Permintaan Akses Peramban +- +- +- %1 is requesting access to the following entries: +- %1 meminta akses ke entri berikut ini: +- +- +- Remember access to checked entries +- Ingat akses ke entri yang dipilih +- +- +- Remember +- Ingat +- +- +- Allow access to entries +- Izinkan akses ke entri +- +- +- Allow Selected +- Izinkan Yang Dipilih +- +- +- Deny All +- Tolak Semua +- +- +- Disable for this site +- Nonaktifkan untuk situs ini +- +- +- +- BrowserEntrySaveDialog +- +- KeePassXC-Browser Save Entry +- +- +- +- Ok +- Ok +- +- +- Cancel +- Batal +- +- +- You have multiple databases open. +-Please select the correct database for saving credentials. +- Ada beberapa basisdata yang terbuka. +-Silakan pilih basisdata yang digunakan untuk menyimpan kredensial. +- +- +- +- BrowserService +- +- KeePassXC: New key association request +- KeePassXC: Permintaan asosiasi kunci baru +- +- +- Save and allow access +- Simpan dan izinkan akses +- +- +- KeePassXC: Overwrite existing key? +- KeePassXC: Timpa kunci yang ada? +- +- +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- Kunci enkripsi bersama dengan nama "%1" sudah ada. +-Apakah Anda ingin menimpanya ulang? +- +- +- KeePassXC: Update Entry +- KeePassXC: Perbarui Entri +- +- +- Do you want to update the information in %1 - %2? +- Apakah Anda ingin memperbarui informasi di dalam %1 - %2? +- +- +- Abort +- Batal +- +- +- Converting attributes to custom data… +- Mengkonversi atribut ke data khusus... +- +- +- KeePassXC: Converted KeePassHTTP attributes +- KeePassXC: Konversi atribut KeePassHTTP +- +- +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- Berhasil mengonversi atribut dari %1 entri. +-Memindahkan %2 ke data khusus. +- +- +- Successfully moved %n keys to custom data. +- Berhasil memindahkan %n kunci ke data khusus. +- +- +- KeePassXC: No entry with KeePassHTTP attributes found! +- KeePassXC: Tidak ada entri dengan atribut KeePassHTTP yang ditemukan! +- +- +- The active database does not contain an entry with KeePassHTTP attributes. +- Basisdata yang aktif tidak berisi entri dengan atribut KeePassHTTP. +- +- +- KeePassXC: Legacy browser integration settings detected +- KeePassXC: Mendeteksi pengaturan integrasi peramban lama +- +- +- KeePassXC: Create a new group +- KeePassXC: Buat grup baru +- +- +- A request for creating a new group "%1" has been received. +-Do you want to create this group? +- +- Permintaan untuk membuat grup "%1" telah diterima. +-Apakah Anda ingin membuat grup ini? +- +- +- +- Your KeePassXC-Browser settings need to be moved into the database settings. +-This is necessary to maintain your current browser connections. +-Would you like to migrate your existing settings now? +- Pengaturan KeePassXC-Browser Anda perlu dipindahkan ke dalam pengaturan basisdata. +-Hal ini diperlukan untuk mempertahankan koneksi peramban Anda saat ini. +-Apakah Anda ingin memindahkan pengaturan yang ada sekarang? +- +- +- Don't show this warning again +- Jangan tampilkan peringatan ini lagi +- +- +- You have received an association request for the following database: +-%1 +- +-Give the connection a unique name or ID, for example: +-chrome-laptop. +- Anda telah menerima permintaan asosiasi untuk basisdata berikut: +-%1 +- +-Berikan koneksi nama yang unik atau ID, sebagai contoh: +-chrome-laptop. +- +- +- +- BrowserSettingsWidget +- +- Dialog +- Dialog +- +- +- This is required for accessing your databases with KeePassXC-Browser +- Ini dibutuhkan untuk mengakses basisdata Anda menggunakan KeePassXC-Browser +- +- +- Enable browser integration +- Aktifkan integrasi peramban +- +- +- General +- Umum +- +- +- Browsers installed as snaps are currently not supported. +- Peramban yang dipasang sebagai snap saat ini tidak didukung. +- +- +- Enable integration for these browsers: +- Aktifkan integrasi untuk peramban ini: +- +- +- Vivaldi +- Vivaldi +- +- +- &Edge +- &Edge +- +- +- Firefox +- Firefox +- +- +- Tor Browser +- Tor Browser +- +- +- Brave +- Brave +- +- +- Google Chrome +- Google Chrome +- +- +- Chromium +- Chromium +- +- +- Show a notification when credentials are requested +- Credentials mean login data requested via browser extension +- Tampilkan notifikasi saat permintaan kredensial +- +- +- Request to unlock the database if it is locked +- Minta untuk membuka basisdata jika terkunci +- +- +- Only entries with the same scheme (http://, https://, ...) are returned. +- Hanya entri dengan skema yang sama (http://, https://, ...). +- +- +- Match URL scheme (e.g., https://...) +- Cocok skema URL (mis., https://...) +- +- +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- Hanya tampilkan kecocokan terbaik untuk URL tertentu bukan semua entri untuk keseluruhan domain. +- +- +- Return only best-matching credentials +- Hanya tampilkan kredensial dengan kecocokan terbaik +- +- +- Returns expired credentials. String [expired] is added to the title. +- Mengembalikan kredensial yang kedaluwarsa. Karakter [kedaluwarsa] ditambahkan ke judul. +- +- +- Allow returning expired credentials +- Izinkan pengembalian kredensial kedaluwarsa +- +- +- All databases connected to the extension will return matching credentials. +- Semua basisdata yang terhubung ke ekstensi akan mengembalikan kredensial yang cocok. +- +- +- Search in all opened databases for matching credentials +- Credentials mean login data requested via browser extension +- Cari kredensial yang cocok di semua basisdata yang terbuka +- +- +- Sort matching credentials by title +- Credentials mean login data requested via browser extension +- Urutkan kredensial yang cocok berdasarkan judul +- +- +- Sort matching credentials by username +- Credentials mean login data requested via browser extension +- Urutkan kredensial yang cocok berdasarkan nama pengguna +- +- +- Advanced +- Tingkat Lanjut +- +- +- Never ask before accessing credentials +- Credentials mean login data requested via browser extension +- Jangan pernah bertanya sebelum mengakses kredensial +- +- +- Never ask before updating credentials +- Credentials mean login data requested via browser extension +- Jangan pernah bertanya sebelum memperbarui kredensial +- +- +- Do not ask permission for HTTP Basic Auth +- An extra HTTP Basic Auth setting +- Jangan minta izin untuk Otentikasi Dasar HTTP +- +- +- Automatically creating or updating string fields is not supported. +- Membuat atau memperbarui ruas lema secara otomatis tidak didukung. +- +- +- Return advanced string fields which start with "KPH: " +- Tampilkan ruas lema tingkat lanjut yang dimulai dengan "KPH: " +- +- +- Don't display the popup suggesting migration of legacy KeePassHTTP settings. +- Jangan pernah tampilkan popup yang menyarankan migrasi pengaturan KeePassHTTP versi lama. +- +- +- Do not prompt for KeePassHTTP settings migration. +- Jangan ingatkan untuk migrasi pengaturan KeePassHTTP. +- +- +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- Otomatis perbarui jalur binari KeePassXC atau keepassxc-proxy ke skrip perpesanan native saat memulai. +- +- +- Update native messaging manifest files at startup +- Perbarui berkas manifest perpesanan bawaan saat memulai +- +- +- Use a custom proxy location if you installed a proxy manually. +- Gunakan lokasi proksi khusus jika Anda memasang proksi secara manual. +- +- +- Use a custom proxy location: +- Meant is the proxy for KeePassXC-Browser +- Gunakan lokasi proksi khusus: +- +- +- Custom proxy location field +- Ruas lokasi proksi khusus +- +- +- Browser for custom proxy file +- Peramban untuk berkas proksi khusus +- +- +- Browse... +- Button for opening file dialog +- Telusuri... +- +- +- Use a custom browser configuration location: +- Gunakan lokasi konfigurasi peramban khusus: +- +- +- Browser type: +- Tipe peramban: +- +- +- Toolbar button style +- Gaya tombol bilah perkakas +- +- +- Config Location: +- Lokasi Konfigurasi: +- +- +- Custom browser location field +- Ruas lokasi peramban khusus +- +- +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- +- +- Browse for custom browser path +- Jelajahi jalur peramban khusus +- +- +- Custom extension ID: +- ID ekstensi khusus: +- +- +- Custom extension ID +- ID ekstensi khusus +- +- +- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 +- Karena adanya sandbox Snap, Anda harus menjalankan skrip untuk mengaktifkan integrasi peramban.<br />Anda bisa mendapatkan skrip ini dari %1 +- +- +- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 +- Membutuhkan KeePassXC-Browser agar integrasi peramban bisa bekerja. <br />Silakan unduh untuk %1 dan %2 dan %3. %4 +- +- +- Please see special instructions for browser extension use below +- Lihat instruksi untuk penggunaan browser extension +- +- +- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. +- <b>Error:</b>Lokasi proxy khusus tidak dapat ditemukan!<br/>Integrasi browser TIDAK DAPAT BEKERJA tanpa aplikasi proxy. +- +- +- <b>Warning:</b> The following options can be dangerous! +- <b>Peringatan:</b> Opsi berikut bisa berbahaya! +- +- +- Executable Files +- Berkas Executable +- +- +- All Files +- Semua Berkas +- +- +- Select custom proxy location +- Pilih lokasi proksi khusus +- +- +- Select native messaging host folder location +- Pilih lokasi folder hos perpesanan bawaan +- +- +- +- CloneDialog +- +- Clone Options +- Opsi Penggandaan +- +- +- Append ' - Clone' to title +- Tambahkan ' - Salinan' ke judul +- +- +- Replace username and password with references +- Ganti nama pengguna dan sandi dengan referensi +- +- +- Copy history +- Salin riwayat +- +- +- +- CsvImportWidget +- +- Import CSV fields +- Impor ruas CSV +- +- +- filename +- nama berkas +- +- +- size, rows, columns +- ukuran, baris, kolom +- +- +- Encoding +- Enkode +- +- +- Codec +- Kodek +- +- +- Text is qualified by +- Teks dikualifikasikan oleh +- +- +- Fields are separated by +- Ruas dipisahkan dengan +- +- +- Comments start with +- Komentar dimulai dengan +- +- +- Consider '\' an escape character +- Anggap '\' sebagai karakter escape +- +- +- Preview +- Pratinjau +- +- +- Imported from CSV file +- Diimpor dari berkas CSV +- +- +- Original data: +- Data original: +- +- +- Error +- Galat +- +- +- Error(s) detected in CSV file! +- Mendeteksi kesalahan di dalam berkas CSV! +- +- +- [%n more message(s) skipped] +- [%n pesan dilewati] +- +- +- CSV import: writer has errors: +-%1 +- Impor CSV: galat penulis: +-%1 +- +- +- Text qualification +- Kualifikasi teks +- +- +- Field separation +- Pemisahan ruas +- +- +- Number of header lines to discard +- Jumlah baris tajuk untuk dibuang +- +- +- CSV import preview +- Pratinjau impor CSV +- +- +- Column Association +- Asosiasi Kolom +- +- +- Last Modified +- Terakhir Diubah +- +- +- Password +- Sandi +- +- +- Created +- Dibuat +- +- +- Notes +- Catatan +- +- +- Title +- Judul +- +- +- Group +- Grup +- +- +- URL +- URL +- +- +- Username +- Nama pengguna +- +- +- Header lines skipped +- +- +- +- First line has field names +- +- +- +- Not Present +- +- +- +- Column %1 +- Kolom %1 +- +- +- TOTP +- TOTP +- +- +- Icon +- Ikon +- +- +- +- CsvParserModel +- +- %n column(s) +- %n kolom +- +- +- %1, %2, %3 +- file info: bytes, rows, columns +- %1, %2, %3 +- +- +- %n byte(s) +- %n byte +- +- +- %n row(s) +- %n baris +- +- +- +- Database +- +- File %1 does not exist. +- Berkas %1 tidak ada. +- +- +- Unable to open file %1. +- Tidak bisa membuka berkas %1. +- +- +- Error while reading the database: %1 +- Terjadi kesalahan saat membaca basisdata: %1 +- +- +- File cannot be written as it is opened in read-only mode. +- Berkas tidak bisa disimpan karena dibuka dalam mode baca-saja. +- +- +- Key not transformed. This is a bug, please report it to the developers! +- Kunci tidak ditransformasikan. Ini adalah bug, harap laporkan ke pengembang! +- +- +- %1 +-Backup database located at %2 +- %1 +-Lokasi cadangan basisdata ada di %2 +- +- +- Could not save, database does not point to a valid file. +- Tidak bisa menyimpan, basisdata tidak merujuk ke berkas yang valid. +- +- +- Could not save, database file is read-only. +- Tidak bisa menyimpan, basisdata memiliki atribut hanya-baca. +- +- +- Database file has unmerged changes. +- Berkas basisdata memiliki perubahan yang belum digabung. +- +- +- Recycle Bin +- Keranjang Sampah +- +- +- Passwords +- Root group name +- Sandi +- +- +- Database save is already in progress. +- Proses menyimpan basisdata sedang berjalan. +- +- +- Could not save, database has not been initialized! +- Tidak bisa menyimpan, basisdata belum aktif! +- +- +- +- DatabaseOpenDialog +- +- Unlock Database - KeePassXC +- Buka Kunci Basisdata - KeePassXC +- +- +- +- DatabaseOpenWidget +- +- Key File: +- Berkas Kunci: +- +- +- Refresh +- Segarkan +- +- +- Don't show this warning again +- Jangan tampilkan peringatan ini lagi +- +- +- All files +- Semua Berkas +- +- +- Key files +- Berkas kunci +- +- +- Select key file +- Pilih berkas kunci +- +- +- Failed to open key file: %1 +- Gagal untuk membuka berkas kunci: %1 +- +- +- Unlock KeePassXC Database +- Buka Kunci Basisdata KeePassXC +- +- +- Enter Password: +- Masukkan Sandi: +- +- +- Password field +- Ruas sandi +- +- +- Hardware key slot selection +- Pemilihan slot kunci perangkat keras +- +- +- Browse for key file +- Telusuri berkas kunci +- +- +- Browse... +- Telusuri... +- +- +- Refresh hardware tokens +- Segarkan token perangkat keras +- +- +- Hardware Key: +- Kunci Perangkat Keras: +- +- +- Hardware key help +- Bantuan kunci perangkat keras +- +- +- TouchID for Quick Unlock +- TouchID untuk Buka Cepat +- +- +- Unlock failed and no password given +- Gagal membuka dan sandi tidak tersedia +- +- +- Unlocking the database failed and you did not enter a password. +-Do you want to retry with an "empty" password instead? +- +-To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. +- Membuka kunci basisdata gagal dan Anda tidak memasukkan kata sandi. +-Apakah Anda ingin mencoba kembali dengan kata sandi "kosong"? +-Untuk mencegah munculnya kesalahan ini, Anda harus ke "Pengaturan Basisdata / Keamanan" dan mengatur ulang kata sandi Anda. +- +- +- Retry with empty password +- Ulangi dengan sandi kosong +- +- +- Enter Additional Credentials (if any): +- Masukkan Kredensial Tambahan (jika ada): +- +- +- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +-<p>Click for more information...</p> +- <p>Anda dapat menggunakan perangkat kunci keamanan seperti <strong>YubiKey</strong>atau<strong>OnlyKey</strong>dengan slot yang dikonfigurasi untuk HMAC-SHA1.</p> +-<p>Klik untuk informasi lebih lanjut...</p> +- +- +- Key file help +- Bantuan berkas kunci +- +- +- ? +- ? +- +- +- Cannot use database file as key file +- Tidak bisa menggunakan berkas basisdata sebagai berkas kunci +- +- +- You cannot use your database file as a key file. +-If you do not have a key file, please leave the field empty. +- Anda tidak bisa menggunakan berkas basisdata Anda sebagai berkas kunci, +-Jika Anda tidak memiliki berkas kunci, biarkan ruas tetap kosong. +- +- +- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> +- +- +- +- Key file to unlock the database +- Berkas kunci untuk membuka basisdata +- +- +- Please touch the button on your YubiKey! +- Silakan sentuh tombol pada YubiKey Anda! +- +- +- Detecting hardware keys… +- Mendeteksi kunci perangkat keras… +- +- +- No hardware keys detected +- Tidak mendeteksi kunci perangkat keras +- +- +- Select hardware key… +- Pilih kunci perangkat keras… +- +- +- Old key file format +- Format berkas kunci lama +- +- +- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> +- +- +- +- +- DatabaseSettingWidgetMetaData +- +- Passwords +- Sandi +- +- +- +- DatabaseSettingsDialog +- +- Advanced Settings +- Pengaturan Lanjutan +- +- +- General +- Umum +- +- +- Security +- Keamanan +- +- +- Encryption Settings +- Pengaturan Enkripsi +- +- +- Browser Integration +- Integrasi Peramban +- +- +- Database Credentials +- Kredensial Basisdata +- +- +- +- DatabaseSettingsWidgetBrowser +- +- KeePassXC-Browser settings +- Pengaturan KeePassXC-Browser +- +- +- Stored keys +- Kunci tersimpan +- +- +- Remove +- Buang +- +- +- Delete the selected key? +- Hapus kunci yang dipilih? +- +- +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- Apakah Anda yakin ingin menghapus kunci yang dipilih? +-Tindakan ini akan memutus koneksi ke pengaya peramban. +- +- +- Key +- Kunci +- +- +- Value +- Nilai +- +- +- Enable Browser Integration to access these settings. +- Aktifkan Integrasi Peramban untuk mengakses pengaturan ini. +- +- +- Disconnect all browsers +- Putuskan koneksi semua peramban +- +- +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- Apakah Anda ingin memutus koneksi semua peramban? +-Tindakan ini akan memutus koneksi ke pengaya peramban. +- +- +- KeePassXC: No keys found +- KeePassXC: Tidak ada kunci yang ditemukan +- +- +- No shared encryption keys found in KeePassXC settings. +- TIdak ada kunci enkripsi bersama yang ditemukan di dalam pengaturan KeePassXC. +- +- +- KeePassXC: Removed keys from database +- KeePassXC: Buang kunci dari basisdata +- +- +- Successfully removed %n encryption key(s) from KeePassXC settings. +- Berhasil membuang %n kunci enkripsi dari pengaturan KeePassXC. +- +- +- Forget all site-specific settings on entries +- Lupakan semua pengaturan spesifik situs pada entri +- +- +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- Apakah Anda ingin melupakan semua pengaturan spesifik situs pada semua entri? +-Izin untuk mengakses entri akan dicabut. +- +- +- Removing stored permissions… +- Membuang perizinan yang disimpan... +- +- +- Abort +- Batal +- +- +- KeePassXC: Removed permissions +- KeePassXC: Buang izin +- +- +- Successfully removed permissions from %n entry(s). +- Berhasil membuang perizinan dari %n entri. +- +- +- KeePassXC: No entry with permissions found! +- KeePassXC: Tidak entri dengan izin yang ditemukan! +- +- +- The active database does not contain an entry with permissions. +- Basisdata aktif tidak berisi entri dengan izin. +- +- +- Move KeePassHTTP attributes to custom data +- Pindahkan atribut KeePassHTTP ke data khusus +- +- +- Do you really want to move all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- Apakah Anda ingin memindahkan semua data integrasi peramban lama ke standar baru? +-Hal ini diperlukan untuk mempertahankan kompatibilitas dengan pengaya peramban. +- +- +- Stored browser keys +- Simpan kunci peramban +- +- +- Remove selected key +- Buang kunci yang dipilih +- +- +- Move KeePassHTTP attributes to KeePassXC-Browser custom data +- Pindahkan atribut KeePassHTTP ke data khusus KeePassXC-Browser +- +- +- Refresh database root group ID +- Segarkan ID grup root basisdata +- +- +- Created +- Dibuat +- +- +- Refresh database ID +- Segarkan ID basisdata +- +- +- Do you really want refresh the database ID? +-This is only necessary if your database is a copy of another and the browser extension cannot connect. +- Apakah Anda yakin ingin menyegarkan ID basisdata? +-Ini hanya diperlukan jika basisdata Anda adalah salinan dari basisdata yang lain dan ekstensi peramban tidak bisa tersambung. +- +- +- +- DatabaseSettingsWidgetDatabaseKey +- +- Add additional protection... +- Tambah proteksi tambahan... +- +- +- No password set +- Sandi belum di atur +- +- +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- PERINGATAN! Anda belum mengatur sandi. Menggunakan basisdata tanpa sandi amat sangat tidak disarankan! +- +-Apakah Anda tetap ingin melanjutkan tanpa mengatur sandi? +- +- +- Continue without password +- Lanjutkan tanpa sandi +- +- +- No encryption key added +- Tidak ada kunci enkripsi yang ditambahkan +- +- +- You must add at least one encryption key to secure your database! +- Anda harus menambahkan paling tidak satu kunci enkripsi untuk mengamankan basisdata Anda! +- +- +- Unknown error +- Galat tidak diketahui +- +- +- Failed to change database credentials +- Gagal mengubah kredensial basisdata +- +- +- +- DatabaseSettingsWidgetEncryption +- +- Encryption Algorithm: +- Algoritma Enkripsi: +- +- +- AES: 256 Bit (default) +- AES: 256 Bit (bawaan) +- +- +- Twofish: 256 Bit +- Twofish: 256 Bit +- +- +- Key Derivation Function: +- Fungsi Derivasi Kunci: +- +- +- Transform rounds: +- Jumlah transformasi: +- +- +- Memory Usage: +- Penggunaan Memori: +- +- +- Parallelism: +- Paralelisme: +- +- +- Decryption Time: +- Waktu Dekripsi: +- +- +- ?? s +- ?? d +- +- +- Change +- Ubah +- +- +- Higher values offer more protection, but opening the database will take longer. +- Nilai yang lebih tinggi memberikan perlindungan lebih, tetapi membuka basisdata akan menjadi lebih lama. +- +- +- Database format: +- Format basisdata: +- +- +- This is only important if you need to use your database with other programs. +- Hal ini penting jika Anda ingin memuat basisdata menggunakan program lain. +- +- +- KDBX 4.0 (recommended) +- KDBX 4.0 (direkomendasikan) +- +- +- KDBX 3.1 +- KDBX 3.1 +- +- +- unchanged +- Database decryption time is unchanged +- tidak berubah +- +- +- Number of rounds too high +- Key transformation rounds +- Jumlah transformasi terlalu tinggi +- +- +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or days (or even longer) to open! +- Jumlah transformasi kunci yang Anda gunakan dengan Argon2 terlalu tinggi. +- +-Jika Anda tetap mempertahankan jumlah setinggi ini, basisdata mungkin akan membutuhkan waktu berjam-jam, berhari-hari (atau bahkan lebih lama) untuk bisa dibuka! +- +- +- Understood, keep number +- Mengerti, tetap simpan +- +- +- Cancel +- Batal +- +- +- Number of rounds too low +- Key transformation rounds +- Jumlah transformasi terlalu rendah +- +- +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database may be too easy to crack! +- Jumlah transformasi kunci yang Anda gunakan dengan AES-KDF terlalu rendah. +- +-Jika Anda tetap mempertahankan jumlah serendah ini, basisdata Anda mungkin akan menjadi terlalu mudah untuk diretas! +- +- +- KDF unchanged +- KDF tidak berubah +- +- +- Failed to transform key with new KDF parameters; KDF unchanged. +- Gagal mentransformasi kunci menggunakan parameter KDF baru; KDF tidak berubah. +- +- +- MiB +- Abbreviation for Mebibytes (KDF settings) +- MiB +- +- +- thread(s) +- Threads for parallel execution (KDF settings) +- +- +- +- Change existing decryption time +- Ubah waktu dekripsi yang ada +- +- +- Decryption time in seconds +- Waktu dekripsi dalam detik +- +- +- Database format +- Format basisdata +- +- +- Encryption algorithm +- Algoritma enkripsi +- +- +- Key derivation function +- Fungi derivasi kunci +- +- +- Transform rounds +- +- +- +- Memory usage +- Penggunaan memori +- +- +- Parallelism +- Paralelisme +- +- +- ?? ms +- ?? md +- +- +- ? s +- ? d +- +- +- +- DatabaseSettingsWidgetFdoSecrets +- +- Exposed Entries +- Entri Yang Diekspos +- +- +- Don't expose this database +- Jangan ekspos basisdata ini +- +- +- Expose entries under this group: +- Ekspos entri di bawah grup ini: +- +- +- Enable Secret Service to access these settings. +- Aktifkan Layanan Rahasia utnuk mengakses pengaturan ini. +- +- +- +- DatabaseSettingsWidgetGeneral +- +- Database Meta Data +- Data Meta Basisdata +- +- +- Database name: +- Nama basisdata: +- +- +- Database description: +- Deskripsi basisdata: +- +- +- Default username: +- Nama pengguna baku: +- +- +- History Settings +- Pengaturan Riwayat +- +- +- Max. history items: +- Maks. item riwayat: +- +- +- Max. history size: +- Maks. ukuran riwayat: +- +- +- MiB +- MiB +- +- +- Use recycle bin +- Gunakan keranjang sampah +- +- +- Additional Database Settings +- Pengaturan Basisdata Tambahan +- +- +- Database name field +- Ruas nama basisdata +- +- +- Database description field +- Ruas deskripsi basisdata +- +- +- Default username field +- Ruas nama pengguna baku +- +- +- Maximum number of history items per entry +- Jumlah maksimum item riwayat per entri +- +- +- Maximum size of history per entry +- Ukuran maksimum riwayat per entri +- +- +- Delete Recycle Bin +- Hapus Keranjang Sampah +- +- +- Do you want to delete the current recycle bin and all its contents? +-This action is not reversible. +- Apakah Anda yakin ingin menghapus keranjang sampah dan semua isinya? +-Tidakan ini tidak bisa diurungkan. +- +- +- (old) +- (lama) +- +- +- Enable compression (recommended) +- Aktifkan kompresi (direkomendasikan) +- +- +- +- DatabaseSettingsWidgetKeeShare +- +- Sharing +- Berbagi +- +- +- Breadcrumb +- +- +- +- Type +- Tipe +- +- +- Path +- Jalur +- +- +- Last Signer +- Penanda Tangan Terakhir +- +- +- Certificates +- Sertifikat +- +- +- > +- Breadcrumb separator +- > +- +- +- +- DatabaseSettingsWidgetMetaDataSimple +- +- Database Name: +- Nama Basisdata: +- +- +- Description: +- Deskripsi: +- +- +- Database name field +- Ruas nama basisdata +- +- +- Database description field +- Ruas deskripsi basisdata +- +- +- +- DatabaseTabWidget +- +- KeePass 2 Database +- Basisdata KeePass 2 +- +- +- All files +- Semua Berkas +- +- +- Open database +- Buka basisdata +- +- +- CSV file +- Berkas CSV +- +- +- Merge database +- Gabung basisdata +- +- +- Open KeePass 1 database +- Buka basisdata KeePass 1 +- +- +- KeePass 1 database +- Basisdata KeePass 1 +- +- +- Export database to CSV file +- Ekspor basisdata ke berkas CSV +- +- +- Writing the CSV file failed. +- Gagal membuat berkas CSV. +- +- +- Database creation error +- Kesalahan dalam membuat basisdata +- +- +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- Basisdata yang dibuat tidak memiliki kunci atau KDF, aplikasi tidak bisa menyompannya. +-Masalah ini jelas sebuah bug, silakan laporkan ke pengembang. +- +- +- Select CSV file +- Pilih berkas CSV +- +- +- New Database +- Basisdata Baru +- +- +- %1 [New Database] +- Database tab name modifier +- %1 [Basisdata Baru] +- +- +- %1 [Locked] +- Database tab name modifier +- %1 [Dikunci] +- +- +- %1 [Read-only] +- Database tab name modifier +- %1 [Hanya-baca] +- +- +- Failed to open %1. It either does not exist or is not accessible. +- Gagal untuk membuka %1. Mungkin tidak ada atau tidak bisa diakses. +- +- +- Export database to HTML file +- Ekspor basisdata ke berkas HTML +- +- +- HTML file +- Berkas HTML +- +- +- Writing the HTML file failed. +- Gagal menyimpan ke berkas HTML. +- +- +- Export Confirmation +- Konfirmasi Ekspor +- +- +- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? +- Anda akan mengekspor basisdata Anda ke berkas tanpa enkripsi. Ini akan membuat sandi dan informasi sensitif lainnya menjadi sangat rentan. Apakah Anda yakin ingin melanjutkan? +- +- +- Open OPVault +- Buka OPVault +- +- +- +- DatabaseWidget +- +- Searching... +- Mencari... +- +- +- Do you really want to delete the entry "%1" for good? +- Apakah Anda yakin ingin menghapus entri "%1" untuk selamanya? +- +- +- Do you really want to move entry "%1" to the recycle bin? +- Apakah Anda yakin ingin memindahkan "%1" ke keranjang sampah? +- +- +- Do you really want to move %n entry(s) to the recycle bin? +- Apakah Anda yakin ingin memindahkan %n entri ke keranjang sampah? +- +- +- Execute command? +- Jalankan perintah? +- +- +- Do you really want to execute the following command?<br><br>%1<br> +- Apakah Anda yakin ingin menjalankan perintah berikut?<br><br>%1<br> +- +- +- Remember my choice +- Ingat pilihan saya +- +- +- Do you really want to delete the group "%1" for good? +- Apakah Anda yakin ingin menghapus grup "%1" untuk selamanya? +- +- +- No current database. +- Tidak ada basisdata. +- +- +- No source database, nothing to do. +- Tidak ada sumber basisdata, tidak perlu melakukan apa-apa. +- +- +- Search Results (%1) +- Hasil Pencarian (%1) +- +- +- No Results +- Tidak Ada Hasil +- +- +- File has changed +- Berkas telah berubah +- +- +- The database file has changed. Do you want to load the changes? +- Berkas basisdata telah berubah. Apakah Anda ingin memuat perubahannya? +- +- +- Merge Request +- Permintaan Penggabungan +- +- +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- Berkas basisdata telah berubah dan Anda memiliki ubahan yang belum disimpan. +-Apakah Anda ingin menggabungkan ubahan Anda? +- +- +- Empty recycle bin? +- Kosongkan keranjang sampah? +- +- +- Are you sure you want to permanently delete everything from your recycle bin? +- Apakah Anda yakin ingin menghapus semuanya secara permanen dari keranjang sampah? +- +- +- Do you really want to delete %n entry(s) for good? +- Apakah Anda yakin ingin menghapus %n entri selamanya? +- +- +- Delete entry(s)? +- Hapus entri? +- +- +- Move entry(s) to recycle bin? +- Pindahkan entri ke keranjang sampah? +- +- +- Lock Database? +- Kunci Basisdata? +- +- +- You are editing an entry. Discard changes and lock anyway? +- Anda sedang menyunting entri. Abaikan ubahan dan tetap mengunci? +- +- +- "%1" was modified. +-Save changes? +- "%1" telah dimodifikasi. +-Simpan perubahan? +- +- +- Database was modified. +-Save changes? +- Basisdata telah diubah. +-Simpan perubahan? +- +- +- Save changes? +- Simpan perubahan? +- +- +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- Tidak bisa membuka berkas basisdata baru saat mencoba untuk memuat ulang. +-Galat: %1 +- +- +- Disable safe saves? +- Nonaktifkan penyimpanan aman? +- +- +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- KeePassXC telah beberapa kali gagal menyimpan basisdata. Hal ini mungkin disebabkan oleh layanan sinkronisasi berkas yang menghalangi berkas yang akan disimpan. +-Nonaktifkan penyimpanan aman dan coba lagi? +- +- +- Passwords +- Sandi +- +- +- Save database as +- Simpan basisdata sebagai +- +- +- KeePass 2 Database +- Basisdata KeePass 2 +- +- +- Replace references to entry? +- Ganti referensi ke entri? +- +- +- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? +- Entri "%1" memiliki %2 referensi. Apakah Anda ingin mengganti referensi dengan data baru, mengabaikan entri ini, atau mungkin menghapusnya? +- +- +- Delete group +- Hapus grup +- +- +- Move group to recycle bin? +- Pindahkan grup ke keranjang sampah? +- +- +- Do you really want to move the group "%1" to the recycle bin? +- Apakah Anda yakin ingin memindahkan grup "%1" ke keranjang sampah? +- +- +- Successfully merged the database files. +- Berhasil menggabungkan berkas basisdata. +- +- +- Database was not modified by merge operation. +- Basisdata tidak ada perubahan yang diakibatkan oleh proses penggabungan. +- +- +- Shared group... +- Grup bersama... +- +- +- Writing the database failed: %1 +- Gagal menyimpan basisdata: %1 +- +- +- This database is opened in read-only mode. Autosave is disabled. +- Basisdata ini dibuka dalam mode baca-saja. Simpan otomatis dinonaktifkan. +- +- +- Save database backup +- Simpan cadangan basisdata +- +- +- Could not find database file: %1 +- Tidak bisa menemukan berkas basisdata: %1 +- +- +- +- EditEntryWidget +- +- Entry +- Entri +- +- +- Advanced +- Tingkat Lanjut +- +- +- Icon +- Ikon +- +- +- Auto-Type +- Ketik-Otomatis +- +- +- Properties +- Properti +- +- +- History +- Riwayat +- +- +- SSH Agent +- SSH Agent +- +- +- n/a +- t/a +- +- +- (encrypted) +- (terenkripsi) +- +- +- Select private key +- Pilih kunci privat +- +- +- Entry history +- Riwayat entri +- +- +- Add entry +- Tambah entri +- +- +- Edit entry +- Sunting entri +- +- +- New attribute +- Atribut baru +- +- +- Are you sure you want to remove this attribute? +- Apakah Anda yakin ingin membuang atribut ini? +- +- +- Tomorrow +- Besok +- +- +- %n week(s) +- %n minggu +- +- +- %n month(s) +- %n bulan +- +- +- Entry updated successfully. +- Entri berhasil diperbarui. +- +- +- New attribute %1 +- Atribut baru %1 +- +- +- %n year(s) +- %n tahun +- +- +- Confirm Removal +- Konfirmasi Penghapusan +- +- +- Browser Integration +- Integrasi Peramban +- +- +- <empty URL> +- <empty URL> +- +- +- Are you sure you want to remove this URL? +- Apakah Anda yakin ingin membuang URL ini? +- +- +- Reveal +- Tampilkan +- +- +- Hide +- Sembunyikan +- +- +- Unsaved Changes +- Perubahan Belum Disimpan +- +- +- Would you like to save changes to this entry? +- Apakah Anda yakin ingin menyimpan perubahan ke entri ini? +- +- +- [PROTECTED] Press Reveal to view or edit +- [DILINDUNGI] Tekan Tampilkan untuk melihat atau menyunting +- +- +- Invalid Entry +- Entri Tidak Valid +- +- +- An external merge operation has invalidated this entry. +-Unfortunately, any changes made have been lost. +- +- +- +- +- EditEntryWidgetAdvanced +- +- Additional attributes +- Atribut tambahan +- +- +- Add +- Tambah +- +- +- Remove +- Buang +- +- +- Edit Name +- Sunting Nama +- +- +- Protect +- Proteksi +- +- +- Reveal +- Tampilkan +- +- +- Attachments +- Lampiran +- +- +- Foreground Color: +- Warna Latar Depan: +- +- +- Background Color: +- Warna Latar Belakang: +- +- +- Attribute selection +- Pemilihan atribut +- +- +- Attribute value +- Nilai atribut +- +- +- Add a new attribute +- Tambah atribut baru +- +- +- Remove selected attribute +- Buang atribut yang dipilih +- +- +- Edit attribute name +- Sunting nama atribut +- +- +- Toggle attribute protection +- Aktif/Nonaktifkan proteksi atribut +- +- +- Show a protected attribute +- Tampilkan atribut yang dilindungi +- +- +- Foreground color selection +- Pemilihan warna latar depan +- +- +- Background color selection +- Pemilihan warna latar belakang +- +- +- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> +- <html><head/><body><p>Jika dicentang, entri tidak akan muncul di laporan seperti Pemeriksaan Kesehatan (Health Check) dan HIBP walau jika tidak sesuai dengan persyaratan kualitas (mis. entropi kata sandi atau penggunaan kembali). Anda dapat menetapkan tanda centang jika kata sandi di luar kendali Anda (mis. jika perlu PIN empat digit) untuk mencegahnya mengacaukan laporan.</p></body></html> +- +- +- Exclude from database reports +- Kecualikan dari laporan basisdata +- +- +- +- EditEntryWidgetAutoType +- +- Enable Auto-Type for this entry +- Aktifkan Ketik-Otomatis untuk entri ini +- +- +- Window Associations +- Asosiasi Jendela +- +- +- + +- + +- +- +- - +- - +- +- +- Window title: +- Judul jendela: +- +- +- Use a specific sequence for this association: +- Gunakan sekuens spesifik untuk asosiasi ini: +- +- +- Custom Auto-Type sequence +- Urutan Ketik-Otomatis khusus +- +- +- Open Auto-Type help webpage +- Buka laman bantuan Ketik-Otomatis +- +- +- Existing window associations +- Asosiasi jendela yang ada +- +- +- Add new window association +- Tambah asosiasi jendela baru +- +- +- Remove selected window association +- Buang asosiasi jendela yang dipilih +- +- +- You can use an asterisk (*) to match everything +- Anda bisa menggunakan asterik (*) untuk mencocokkan semuanya +- +- +- Set the window association title +- Atur judul asosiasi jendela +- +- +- You can use an asterisk to match everything +- Anda bisa menggunakan asterik untuk mencocokkan semuanya +- +- +- Custom Auto-Type sequence for this window +- Urutan Ketik-Otomatis khusus untuk jendela ini +- +- +- Inherit default Auto-Type sequence from the group +- Mengikuti urutan Ketik-Otomatis baku grup +- +- +- Use custom Auto-Type sequence: +- Gunakan urutan Ketik-Otomatis ubahsuai: +- +- +- +- EditEntryWidgetBrowser +- +- These settings affect to the entry's behaviour with the browser extension. +- Pengaturan ini mempengaruhi perilaku entri dengan ekstensi peramban. +- +- +- General +- Umum +- +- +- Skip Auto-Submit for this entry +- Lewati Kirim-Otomatis untuk entri ini +- +- +- Hide this entry from the browser extension +- Sembunyikan entri ini dari ekstensi peramban +- +- +- Additional URL's +- URL tambahan +- +- +- Add +- Tambah +- +- +- Remove +- Buang +- +- +- Edit +- Sunting +- +- +- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. +- Hanya kirim pengaturan ini ke peramban untuk dialog Otentikasi HTTP. Jika diaktifkan, formulir masuk yang normal tidak akan menampilkan entri ini untuk dipilih. +- +- +- Use this entry only with HTTP Basic Auth +- Hanya gunakan entri ini dengan Otentikasi Dasar HTTP +- +- +- +- EditEntryWidgetHistory +- +- Show +- Tampilkan +- +- +- Restore +- Kembalikan +- +- +- Delete +- Hapus +- +- +- Delete all +- Hapus semua +- +- +- Entry history selection +- Pemilihan riwayat entri +- +- +- Show entry at selected history state +- Tampilkan entri pada status riwayat yang dipilih +- +- +- Restore entry to selected history state +- Pulihkan entri ke status riwayat yang dipilih +- +- +- Delete selected history state +- Hapus status riwayat yang dipilih +- +- +- Delete all history +- Hapus semua riwayat +- +- +- +- EditEntryWidgetMain +- +- URL: +- URL: +- +- +- Password: +- Sandi: +- +- +- Title: +- Judul: +- +- +- Presets +- Prasetel +- +- +- Toggle the checkbox to reveal the notes section. +- Pilih kotak centang untuk mengungkap bagian catatan. +- +- +- Username: +- Nama pengguna: +- +- +- Url field +- Ruas url +- +- +- Download favicon for URL +- Untuk favicon untuk URL +- +- +- Password field +- Ruas sandi +- +- +- Toggle notes visible +- Aktif/Nonaktifkan visibilitas cacatan +- +- +- Expiration field +- Ruas kedaluwarsa +- +- +- Expiration Presets +- Prasetel Kedaluwarsa +- +- +- Expiration presets +- Prasetel kedaluwarsa +- +- +- Notes field +- Ruas catatan +- +- +- Title field +- Ruas judul +- +- +- Username field +- Ruas nama pengguna +- +- +- Toggle expiration +- Aktif/Nonaktifkan kedaluwarsa +- +- +- Notes: +- Catatan: +- +- +- https://example.com +- https://example.com +- +- +- Expires: +- Kedaluwarsa: +- +- +- Edit Entry +- Sunting Entri +- +- +- +- EditEntryWidgetSSHAgent +- +- Form +- Formulir +- +- +- Remove key from agent after +- Buang kunci dari agent setelah +- +- +- seconds +- detik +- +- +- Fingerprint +- Tanda tangan +- +- +- Remove key from agent when database is closed/locked +- Buang kunci dari agent saat basisdata ditutup/dikunci +- +- +- Public key +- Kunci publik +- +- +- Add key to agent when database is opened/unlocked +- Tambahkan kunci ke agent saat basisdata dibuka/tak terkunci +- +- +- Comment +- Komentar +- +- +- Decrypt +- Dekripsi +- +- +- n/a +- t/a +- +- +- Copy to clipboard +- Salin ke papan klip +- +- +- Private key +- Kunci privat +- +- +- External file +- Berkas eksternal +- +- +- Browse... +- Button for opening file dialog +- Telusuri... +- +- +- Attachment +- Lampiran +- +- +- Add to agent +- Tambahkan ke agent +- +- +- Remove from agent +- Buang dari agent +- +- +- Require user confirmation when this key is used +- Membutuhkan konfirmasi pengguna saat kunci ini digunakan +- +- +- Remove key from agent after specified seconds +- Hapus kunci dari agen setelah detik yang ditentukan +- +- +- Browser for key file +- Peramban untuk berkas kunci +- +- +- External key file +- Berkas kunci eksternal +- +- +- Select attachment file +- Pilih berkas lampiran +- +- +- +- EditGroupWidget +- +- Group +- Grup +- +- +- Icon +- Ikon +- +- +- Properties +- Properti +- +- +- Add group +- Tambah grup +- +- +- Edit group +- Sunting grup +- +- +- Enable +- Aktifkan +- +- +- Disable +- Nonaktifkan +- +- +- Inherit from parent group (%1) +- Mengikuti grup induk (%1) +- +- +- Entry has unsaved changes +- Entri memiliki perubahan yang belum disimpan +- +- +- +- EditGroupWidgetKeeShare +- +- Type: +- Tipe: +- +- +- Path: +- Jalur: +- +- +- Password: +- Sandi: +- +- +- Inactive +- Tidak aktif +- +- +- KeeShare unsigned container +- Kontainer KeeShare tak bertanda tangan +- +- +- KeeShare signed container +- Kontainer KeeShare bertanda tangan +- +- +- Select import source +- Pilih sumber impor +- +- +- Select export target +- Pilih target ekspor +- +- +- Select import/export file +- Pilih berkas impor/ekspor +- +- +- Clear +- Bersihkan +- +- +- Import +- Impor +- +- +- Export +- Ekspor +- +- +- Synchronize +- Sinkronkan +- +- +- Your KeePassXC version does not support sharing this container type. +-Supported extensions are: %1. +- Versi KeePassXC Anda tidak mendukung fitur berbagi untuk tipe kontainer ini. +-Ekstensi yang didukung adalah: %1. +- +- +- %1 is already being exported by this database. +- %1 telah diekspor oleh basisdata ini. +- +- +- %1 is already being imported by this database. +- %1 telah diimpor oleh basisdata ini. +- +- +- %1 is being imported and exported by different groups in this database. +- %1 sedang diimpor dan diekspor oleh berbagai grup dalam basisdata ini. +- +- +- KeeShare is currently disabled. You can enable import/export in the application settings. +- KeeShare is a proper noun +- Saat ini KeeShare dinonaktifkan. Anda dapat mengaktifkan impor/ekspor di pengaturan aplikasi. +- +- +- Database export is currently disabled by application settings. +- Ekspor basisdata saat ini dinonaktifkan oleh pengaturan aplikasi. +- +- +- Database import is currently disabled by application settings. +- Impor basisdata saat ini dinonaktifkan oleh pengaturan aplikasi. +- +- +- Sharing mode field +- Ruas mode berbagi +- +- +- Path to share file field +- Ruas jalur ke berkas yang dibagikan +- +- +- Password field +- Ruas sandi +- +- +- Clear fields +- Kosongkan ruas +- +- +- Browse for share file +- Telusuri berkas berbagi +- +- +- Browse... +- Telusuri... +- +- +- +- EditGroupWidgetMain +- +- Name field +- Ruas nama +- +- +- Notes field +- Ruas catatan +- +- +- Toggle expiration +- Aktif/Nonaktifkan kedaluwarsa +- +- +- Auto-Type toggle for this and sub groups +- Aktif/Nonaktifkan Ketik-Otomatis untuk ini dan sub grup +- +- +- Expiration field +- Ruas kedaluwarsa +- +- +- Search toggle for this and sub groups +- Aktif/Nonaktifkan pencarian untuk ini dan sub grup +- +- +- Default auto-type sequence field +- Ruas urutan ketik-otomatis baku +- +- +- Expires: +- Kedaluwarsa: +- +- +- Use default Auto-Type sequence of parent group +- Gunakan urutan Ketik-Otomatis bawaan dari grup induk +- +- +- Auto-Type: +- Ketik-Otomatis: +- +- +- Search: +- Cari: +- +- +- Notes: +- Catatan: +- +- +- Name: +- Nama: +- +- +- Set default Auto-Type sequence +- Tetapkan urutan Ketik-Otomatis yang baku +- +- +- Edit Group +- Sunting Grup +- +- +- +- EditWidgetIcons +- +- Add custom icon +- Tambah ikon khusus +- +- +- Delete custom icon +- Hapus ikon khusus +- +- +- Download favicon +- Unduh favicon +- +- +- Unable to fetch favicon. +- Tidak bisa mengunduh favicon. +- +- +- Images +- Gambar +- +- +- All files +- Semua Berkas +- +- +- Confirm Delete +- Konfirmasi Hapus +- +- +- Select Image(s) +- Pilih Gambar +- +- +- Successfully loaded %1 of %n icon(s) +- Berhasil memuat %1 dari %n ikon +- +- +- No icons were loaded +- Tidak ada ikon yang dimuat +- +- +- %n icon(s) already exist in the database +- %n ikon sudah ada didalam basisdata +- +- +- The following icon(s) failed: +- Ikon berikut gagal: +- +- +- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? +- Ikon ini digunakan oleh %n entri, dan akan diganti dengan ikon bawaan. Apakah Anda yakin ingin menghapusnya? +- +- +- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security +- Anda bisa mengaktifkan layanan ikon situs web oleh DuckDuckGo di Perkakas > Pengaturan > Keamanan +- +- +- Download favicon for URL +- Untuk favicon untuk URL +- +- +- Apply selected icon to subgroups and entries +- Terapkan ikon yang dipilih ke subgrup dan entri +- +- +- Also apply to child groups +- +- +- +- Also apply to child entries +- +- +- +- Also apply to all children +- +- +- +- Existing icon selected. +- Ikon yang sudah ada dipilih. +- +- +- Use default icon +- Gunakan ikon baku +- +- +- Use custom icon +- Gunakan ikon ubahsuai +- +- +- Apply icon to... +- Terapkan ikon ke... +- +- +- Apply to this group only +- Hanya terapkan ke grup ini +- +- +- +- EditWidgetProperties +- +- Created: +- Dibuat: +- +- +- Modified: +- Dimodifikasi: +- +- +- Accessed: +- Diakses: +- +- +- Uuid: +- Uuid: +- +- +- Plugin Data +- Data Pengaya +- +- +- Remove +- Buang +- +- +- Delete plugin data? +- Hapus data pengaya? +- +- +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- Apakah Anda yakin ingin menghapus data pengaya? +-Ini mungkin akan menyebabkan pengaya menjadi tidak berfungsi. +- +- +- Key +- Kunci +- +- +- Value +- Nilai +- +- +- Datetime created +- Tanggal waktu dibuat +- +- +- Datetime modified +- Tanggal waktu dimodifikasi +- +- +- Datetime accessed +- Tanggal waktu diakses +- +- +- Unique ID +- ID Unik +- +- +- Plugin data +- Data pengaya +- +- +- Remove selected plugin data +- Buang data pengaya yang dipilih +- +- +- +- Entry +- +- %1 - Clone +- %1 - Salinan +- +- +- +- EntryAttachmentsModel +- +- Name +- Nama +- +- +- Size +- Ukuran +- +- +- +- EntryAttachmentsWidget +- +- Form +- Formulir +- +- +- Add +- Tambah +- +- +- Remove +- Buang +- +- +- Open +- Buka +- +- +- Save +- Simpan +- +- +- Select files +- Pilih berkas +- +- +- Are you sure you want to remove %n attachment(s)? +- Apakah Anda yakin ingin membuang %n lampiran? +- +- +- Save attachments +- Simpan lampiran +- +- +- Unable to create directory: +-%1 +- Tidak bisa membuat direktori: +-%1 +- +- +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- Apakah Anda yakin ingin menimpa ulang berkas "%1" yang ada dengan berkas lampiran? +- +- +- Confirm overwrite +- Konfirmasi menimpa ulang +- +- +- Unable to save attachments: +-%1 +- Tidak bisa menyimpan lampiran: +-%1 +- +- +- Unable to open attachment: +-%1 +- Tidak bisa membuka lampiran: +-%1 +- +- +- Unable to open attachments: +-%1 +- Tidak bisa membuka lampiran: +-%1 +- +- +- Confirm remove +- Konfirmasi buang +- +- +- Unable to open file(s): +-%1 +- Tidak bisa membuka berkas: +-%1 +- +- +- Attachments +- Lampiran +- +- +- Add new attachment +- Tambah lampiran baru +- +- +- Remove selected attachment +- Buang lampiran yang dipilih +- +- +- Open selected attachment +- Buka lampiran yang dipilih +- +- +- Save selected attachment to disk +- Simpan lampiran yang dipilih ke diska +- +- +- %1 is a big file (%2 MB). +-Your database may get very large and reduce performance. +- +-Are you sure to add this file? +- %1 adalah berkas yang sangat besar (%2 MB). +-Basisdata Anda akan menjadi sangat besar dan akan mengurangi performa kinerja. +- +-Apakah Anda yakin ingin menambahkan berkas ini? +- +- +- Confirm Attachment +- Konfirmasi Lampiran +- +- +- +- EntryAttributesModel +- +- Name +- Nama +- +- +- +- EntryHistoryModel +- +- Last modified +- Terakhir dimodifikasi +- +- +- Title +- Judul +- +- +- Username +- Nama pengguna +- +- +- URL +- URL +- +- +- +- EntryModel +- +- Ref: +- Reference abbreviation +- Ref: +- +- +- Group +- Grup +- +- +- Title +- Judul +- +- +- Username +- Nama pengguna +- +- +- URL +- URL +- +- +- Never +- Tidak Pernah +- +- +- Password +- Sandi +- +- +- Notes +- Catatan +- +- +- Expires +- Kedaluwarsa +- +- +- Created +- Dibuat +- +- +- Modified +- Diubah +- +- +- Accessed +- Diakses +- +- +- Attachments +- Lampiran +- +- +- Size +- Ukuran +- +- +- Group name +- Nama grup +- +- +- Entry title +- Judul entri +- +- +- Entry notes +- Catatan entri +- +- +- Entry expires at +- Entri kedaluwarsa pada +- +- +- Creation date +- Tanggal dibuat +- +- +- Last modification date +- Tanggal diubah terakhir +- +- +- Last access date +- Tanggal terakhir diakses +- +- +- Attached files +- Berkas terlampir +- +- +- Entry size +- Ukuran entri +- +- +- Has attachments +- Memiliki lampiran +- +- +- Has TOTP one-time password +- Memiliki sandi sekali TOTP +- +- +- +- EntryPreviewWidget +- +- Close +- Tutup +- +- +- General +- Umum +- +- +- Username +- Nama pengguna +- +- +- Password +- Sandi +- +- +- Expiration +- Kedaluwarsa +- +- +- URL +- URL +- +- +- Attributes +- Atribut +- +- +- Attachments +- Lampiran +- +- +- Notes +- Catatan +- +- +- Autotype +- KetikOtomatis +- +- +- Window +- Jendela +- +- +- Sequence +- Urutan +- +- +- Searching +- Pencarian +- +- +- Search +- Cari +- +- +- Clear +- Bersihkan +- +- +- Never +- Tidak Pernah +- +- +- [PROTECTED] +- [DILINDUNGI] +- +- +- Enabled +- Diaktifkan +- +- +- Disabled +- Dinonaktifkan +- +- +- Share +- Bagikan +- +- +- Display current TOTP value +- Tampilkan nilai TOTP saat ini +- +- +- Advanced +- Tingkat Lanjut +- +- +- Default Sequence +- Sekuens Bawaan +- +- +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- attributes line +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- +- +- +- EntryURLModel +- +- Invalid URL +- URL tidak valid +- +- +- +- EntryView +- +- Fit to window +- Paskan ke jendela +- +- +- Fit to contents +- Paskan ke konten +- +- +- Reset to defaults +- Kembalikan ke setelan bawaan +- +- +- Has attachments +- Entry attachment icon toggle +- Memiliki lampiran +- +- +- Has TOTP +- Entry TOTP icon toggle +- Memiliki TOTP +- +- +- +- FdoSecrets::Item +- +- Entry "%1" from database "%2" was used by %3 +- Entri "%1" dari basisdata "%2" telah digunakan oleh %3 +- +- +- +- FdoSecrets::Service +- +- Failed to register DBus service at %1.<br/> +- Gagal mendaftarkan layanan DBus pada %1.<br/> +- +- +- %n Entry(s) was used by %1 +- %1 is the name of an application +- %n Entri telah digunakan oleh %1 +- +- +- +- FdoSecrets::SettingsDatabaseModel +- +- File Name +- Nama Berkas +- +- +- Group +- Grup +- +- +- Manage +- Kelola +- +- +- Unlock to show +- Buka kunci untuk menampilkan +- +- +- None +- Nihil +- +- +- +- FdoSecrets::SettingsSessionModel +- +- Application +- Aplikasi +- +- +- Manage +- Kelola +- +- +- +- FdoSecretsPlugin +- +- <b>Fdo Secret Service:</b> %1 +- <b>Layanan Rahasia Fdo:</b> %1 +- +- +- Unknown +- Unknown PID +- Tidak diketahui +- +- +- Unknown +- Unknown executable path +- Tidak diketahui +- +- +- <i>PID: %1, Executable: %2</i> +- <i>PID: 1234, Executable: /path/to/exe</i> +- +- +- +- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. +- Layanan rahasia lain sedang berjalan (%1).<br/>Harap hentikan/hapus sebelum mengaktifkan kembali Integrasi Layanan Rahasia. +- +- +- +- Group +- +- [empty] +- group has no children +- [kosong] +- +- +- +- HibpDownloader +- +- Online password validation failed +- Validasi sandi daring gagal +- +- +- +- IconDownloaderDialog +- +- Download Favicons +- Unduh Favicon +- +- +- Cancel +- Batal +- +- +- Having trouble downloading icons? +-You can enable the DuckDuckGo website icon service in the security section of the application settings. +- Mengalami masalah ketika mengunduh ikon? +-Anda dapat mengaktifkan layanan ikon situs web DuckDuckGo di bagian keamanan dalam pengaturan aplikasi. +- +- +- Close +- Tutup +- +- +- URL +- URL +- +- +- Status +- Status +- +- +- Please wait, processing entry list... +- Silakan tunggu, sedang memproses daftar entri... +- +- +- Downloading... +- Mengunduh... +- +- +- Ok +- Ok +- +- +- Already Exists +- Sudah Ada +- +- +- Download Failed +- Gagal Mengunduh +- +- +- Downloading favicons (%1/%2)... +- Mengunduh favicon (%1/%2)... +- +- +- +- KMessageWidget +- +- &Close +- &Tutup +- +- +- Close message +- Tutup pesan +- +- +- +- Kdbx3Reader +- +- missing database headers +- kehilangan tajuk basisdata +- +- +- Header doesn't match hash +- Header tidak cocok dengan hash +- +- +- Invalid header id size +- Ukuran id tajuk tidak valid +- +- +- Invalid header field length +- Panjang ruas tajuk tidak valid +- +- +- Invalid header data length +- Panjang data tajuk tidak valid +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Kredensial yang diberikan tidak valid, silakan coba lagi. +-Jika terus berulang, maka basisdata Anda mungkin rusak. +- +- +- Unable to calculate database key +- TIdak bisa mengkalkulasi kunci basisdata +- +- +- Unable to issue challenge-response: %1 +- +- +- +- +- Kdbx3Writer +- +- Unable to issue challenge-response: %1 +- +- +- +- Unable to calculate database key +- TIdak bisa mengkalkulasi kunci basisdata +- +- +- +- Kdbx4Reader +- +- missing database headers +- kehilangan tajuk basisdata +- +- +- Invalid header checksum size +- Ukuran checksum tajuk tidak valid +- +- +- Header SHA256 mismatch +- Tajuk SHA256 tidak cocok +- +- +- Unknown cipher +- Cipher tidak dikenal +- +- +- Invalid header id size +- Ukuran id tajuk tidak valid +- +- +- Invalid header field length +- Panjang ruas tajuk tidak valid +- +- +- Invalid header data length +- Panjang data tajuk tidak valid +- +- +- Failed to open buffer for KDF parameters in header +- Gagal membuka buffer untuk parameter KDF di dalam tajuk +- +- +- Unsupported key derivation function (KDF) or invalid parameters +- Fungsi derivasi kunci tidak didukung (KDF) atau parameter tidak valid +- +- +- Legacy header fields found in KDBX4 file. +- Ditemukan ruas tajuk legacy di dalam berkas KDBX4. +- +- +- Invalid inner header id size +- +- +- +- Invalid inner header field length +- +- +- +- Invalid inner header binary size +- +- +- +- Unsupported KeePass variant map version. +- Translation: variant map = data structure for storing meta data +- Versi map variasi KeePass tidak didukung. +- +- +- Invalid variant map entry name length +- Translation: variant map = data structure for storing meta data +- Panjang nama entri map variasi tidak valid +- +- +- Invalid variant map entry name data +- Translation: variant map = data structure for storing meta data +- Data nama entri map variasi tidak valid +- +- +- Invalid variant map entry value length +- Translation: variant map = data structure for storing meta data +- Panjang nilai entri map variasi tidak valid +- +- +- Invalid variant map entry value data +- Translation comment: variant map = data structure for storing meta data +- Data nilai entri map variasi tidak valid +- +- +- Invalid variant map Bool entry value length +- Translation: variant map = data structure for storing meta data +- Panjang nilai entri Bool map variasi tidak valid +- +- +- Invalid variant map Int32 entry value length +- Translation: variant map = data structure for storing meta data +- Panjang nilai entri Int32 map variasi tidak valid +- +- +- Invalid variant map UInt32 entry value length +- Translation: variant map = data structure for storing meta data +- Panjang nilai entri UInt32 map variasi tidak valid +- +- +- Invalid variant map Int64 entry value length +- Translation: variant map = data structure for storing meta data +- Panjang nilai entri Int64 map variasi tidak valid +- +- +- Invalid variant map UInt64 entry value length +- Translation: variant map = data structure for storing meta data +- Panjang nilai entri UInt64 map variasi tidak valid +- +- +- Invalid variant map entry type +- Translation: variant map = data structure for storing meta data +- Tipe entri map variasi tidak valid +- +- +- Invalid variant map field type size +- Translation: variant map = data structure for storing meta data +- Ukuran tipe entri map variasi tidak valid +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Kredensial yang diberikan tidak valid, silakan coba lagi. +-Jika terus berulang, maka basisdata Anda mungkin rusak. +- +- +- (HMAC mismatch) +- (HMAC tidak cocok) +- +- +- Unable to calculate database key: %1 +- +- +- +- +- Kdbx4Writer +- +- Invalid symmetric cipher algorithm. +- Algoritma cipher simetrik tidak valid. +- +- +- Invalid symmetric cipher IV size. +- IV = Initialization Vector for symmetric cipher +- Ukuran cipher IV simetrik tidak valid. +- +- +- Failed to serialize KDF parameters variant map +- Translation comment: variant map = data structure for storing meta data +- Gagal menserialisasi map variasi parameter KDF +- +- +- Unable to calculate database key: %1 +- +- +- +- +- KdbxReader +- +- Unsupported cipher +- Cipher tidak didukung +- +- +- Invalid compression flags length +- +- +- +- Unsupported compression algorithm +- Algoritma kompresi tidak didukung +- +- +- Invalid master seed size +- +- +- +- Invalid transform seed size +- +- +- +- Invalid transform rounds size +- +- +- +- Invalid start bytes size +- Ukuran byte awal tidak valid +- +- +- Invalid random stream id size +- Ukuran id stream acak tidak valid +- +- +- Invalid inner random stream cipher +- +- +- +- Not a KeePass database. +- Bukan basisdata KeePass. +- +- +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- Berkas yang dipilih adalah basisdata lama KeePass 1 (.kdb). +- +-Anda bisa mengimpornya dengan mengklik Basisdata > 'Impor basisdata KeePass 1...'. +-Ini adalah migrasi satu arah. Anda tidak akan bisa membuka basisdata yang diimpor dengan versi lama KeePassX 0.4. +- +- +- Unsupported KeePass 2 database version. +- Versi basisdata KeePass 2 tidak didukung. +- +- +- Invalid cipher uuid length: %1 (length=%2) +- +- +- +- Unable to parse UUID: %1 +- Tidak bisa mengurai UUID: %1 +- +- +- Failed to read database file. +- Gagal membaca berkas basisdata. +- +- +- +- KdbxXmlReader +- +- XML parsing failure: %1 +- Gagal mengurai XML: %1 +- +- +- No root group +- Tidak ada grup root +- +- +- Missing icon uuid or data +- Kehilangan data atau uuid ikon +- +- +- Missing custom data key or value +- Kehilangan nilai atau kunci data khusus +- +- +- Multiple group elements +- Beberapa elemen grup +- +- +- Null group uuid +- Uuid grup null +- +- +- Invalid group icon number +- Nomor ikon grup tidak valid +- +- +- Invalid EnableAutoType value +- Nilai EnableAutoType tidak valid +- +- +- Invalid EnableSearching value +- Nilai EnableSearching tidak valid +- +- +- No group uuid found +- Tidak ditemukan uuid grup +- +- +- Null DeleteObject uuid +- Uuid DeleteObject null +- +- +- Missing DeletedObject uuid or time +- Kehilangan waktu atau uuid DeletedObject +- +- +- Null entry uuid +- Uuid entri null +- +- +- Invalid entry icon number +- Nomor ikon entri tidak valid +- +- +- History element in history entry +- Elemen riwayat di dalam entri riwayat +- +- +- No entry uuid found +- Tidak ditemukan uuid entri +- +- +- History element with different uuid +- Elemen riwayat dengan uuid yang berbeda +- +- +- Duplicate custom attribute found +- Ditemukan atribut khusus ganda +- +- +- Entry string key or value missing +- Kehilangan nilai atau kunci lema entri +- +- +- Entry binary key or value missing +- Kehilangan nilai atau kunci binari entri +- +- +- Auto-type association window or sequence missing +- Kehilangan asosiasi jendela atau urutan ketik-otomatis +- +- +- Invalid bool value +- Nilai bool tidak valid +- +- +- Invalid date time value +- Waktu tanggal tidak valid +- +- +- Invalid color value +- Warna tidak valid +- +- +- Invalid color rgb part +- Warna rgb tidak valid +- +- +- Invalid number value +- Angka tidak valid +- +- +- Invalid uuid value +- Uuid tidak valid +- +- +- Unable to decompress binary +- Translator meant is a binary data inside an entry +- Tidak bisa mengurai kompresi binari +- +- +- XML error: +-%1 +-Line %2, column %3 +- Galat XML: +-%1 +-Baris %2, kolom %3 +- +- +- +- KeeAgentSettings +- +- Invalid KeeAgent settings file structure. +- +- +- +- Private key is an attachment but no attachments provided. +- Kunci privat adalah lampiran tetapi tidak ada lampiran yang tersedia. +- +- +- Private key is empty +- Kunci privat kosong +- +- +- File too large to be a private key +- Berkas terlalu besar untuk jadi kunci privat +- +- +- Failed to open private key +- Gagal membuka kunci privat +- +- +- +- KeePass1OpenWidget +- +- Unable to open the database. +- Tidak bisa membuka basisdata. +- +- +- Import KeePass1 Database +- Impor Basisdata KeePass1 +- +- +- +- KeePass1Reader +- +- Unable to read keyfile. +- Tidak bisa membaca berkas kunci. +- +- +- Not a KeePass database. +- Bukan basisdata KeePass. +- +- +- Unsupported encryption algorithm. +- Algoritma enkripsi tidak didukung. +- +- +- Unsupported KeePass database version. +- Versi basisdata KeePass tidak didukung. +- +- +- Unable to read encryption IV +- IV = Initialization Vector for symmetric cipher +- Tidak bisa membaca enkripsi IV +- +- +- Invalid number of groups +- Jumlah grup tidak valid +- +- +- Invalid number of entries +- Jumlah entri tidak valid +- +- +- Invalid content hash size +- Ukuran hash konten tidak valid +- +- +- Invalid transform seed size +- +- +- +- Invalid number of transform rounds +- +- +- +- Unable to construct group tree +- +- +- +- Root +- Root +- +- +- Key transformation failed +- Transformasi kunci gagal +- +- +- Invalid group field type number +- Angka tipe ruas grup tidak valid +- +- +- Invalid group field size +- Ukuran ruas grup tidak valid +- +- +- Read group field data doesn't match size +- Data ruas grup baca tidak cocok dengan ukurannya +- +- +- Incorrect group id field size +- Ukuran ruas id grup salah +- +- +- Incorrect group creation time field size +- Ukuran ruas waktu pembuatan grup salah +- +- +- Incorrect group modification time field size +- Ukuran ruas waktu perubahan grup salah +- +- +- Incorrect group access time field size +- Ukuran ruas waktu akses grup salah +- +- +- Incorrect group expiry time field size +- Ukuran ruas waktu kedaluwarsa grup salah +- +- +- Incorrect group icon field size +- Ukuran ruas ikon grup salah +- +- +- Incorrect group level field size +- Ukuran ruas level grup salah +- +- +- Invalid group field type +- Tipe ruas grup tidak valid +- +- +- Missing group id or level +- Kehilangan level atau id grup +- +- +- Missing entry field type number +- Kehilangan nomor tipe ruas entri +- +- +- Invalid entry field size +- Ukuran ruas entri tidak valid +- +- +- Read entry field data doesn't match size +- Data ruas entri baca tidak cocok dengan ukurannya +- +- +- Invalid entry uuid field size +- Ukuran ruas uuid entri tidak valid +- +- +- Invalid entry group id field size +- Ukuran ruas id grup entri tidak valid +- +- +- Invalid entry icon field size +- Ukuran ruas ikon entri tidak valid +- +- +- Invalid entry creation time field size +- Ukuran ruas waktu pembuatan entri tidak valid +- +- +- Invalid entry modification time field size +- Ukuran ruas waktu perubahan entri tidak valid +- +- +- Invalid entry expiry time field size +- Ukuran ruas waktu kedaluwarsa entri tidak valid +- +- +- Invalid entry field type +- Tipe ruas entri tidak valid +- +- +- unable to seek to content position +- +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Kredensial yang diberikan tidak valid, silakan coba lagi. +-Jika terus berulang, maka basisdata Anda mungkin rusak. +- +- +- Unable to calculate database key +- TIdak bisa mengkalkulasi kunci basisdata +- +- +- +- KeeShare +- +- Invalid sharing reference +- +- +- +- Inactive share %1 +- +- +- +- Imported from %1 +- Diimpor dari %1 +- +- +- Exported to %1 +- Diekspor ke %1 +- +- +- Synchronized with %1 +- Disinkronkan dengan %1 +- +- +- Import is disabled in settings +- Impor dinonaktifkan di dalam pengaturan +- +- +- Export is disabled in settings +- Ekspor dinonaktifkan di dalam pengaturan +- +- +- Inactive share +- +- +- +- Imported from +- Diimpor dari +- +- +- Exported to +- Diekspor dari +- +- +- Synchronized with +- Disinkronkan dengan +- +- +- +- KeyComponentWidget +- +- Key Component +- Komponen Kunci +- +- +- Key Component Description +- Deskripsi Komponen Kunci +- +- +- Cancel +- Batal +- +- +- Key Component set, click to change or remove +- Komponen Kunci sudah diatur, klik untuk mengubah atau buang +- +- +- Add %1 +- Add a key component +- Tambah %1 +- +- +- Change %1 +- Change a key component +- Ubah %1 +- +- +- Remove %1 +- Remove a key component +- Buang %1 +- +- +- %1 set, click to change or remove +- Change or remove a key component +- %1 telah diatur, klik untuk ganti atau hapus +- +- +- +- KeyFileEditWidget +- +- Generate +- Buat +- +- +- Key File +- Berkas Kunci +- +- +- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> +- <p>Anda bisa menambahkan berkas kunci yang berisi byte acak untuk jaminan keamanan lebih.</p><p>Anda harus menjaga kerahasiannya dan jangan pernah menghilangkannya atau Anda akan terkunci dan dicekal selamanya!</p> +- +- +- Error loading the key file '%1' +-Message: %2 +- Galat memuat berkas kunci '%1' +-Pesan: %2 +- +- +- Key files +- Berkas kunci +- +- +- All files +- Semua Berkas +- +- +- Create Key File... +- Buat Berkas Kunci... +- +- +- Error creating key file +- Galat membuat berkas kunci +- +- +- Unable to create key file: %1 +- Tidak bisa membuat berkas: %1 +- +- +- Select a key file +- Pilih berkas kunci +- +- +- Key file selection +- Pemilihan berkas kunci +- +- +- Browse for key file +- Telusuri berkas kunci +- +- +- Browse... +- Telusuri... +- +- +- Generate a new key file +- Buat berkas kunci baru +- +- +- Note: Do not use a file that may change as that will prevent you from unlocking your database! +- Catatan: Jangan gunakan berkas yang dapat berubah karena itu akan mencegah Anda membuka kunci basisdata Anda! +- +- +- Invalid Key File +- Berkas Kunci Tidak Valid +- +- +- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. +- Anda tidak dapat menggunakan basisdata sekarang sebagai kunci berkasnya sendiri. Harap pilih berkas berbeda atau hasilkan kunci berkas baru. +- +- +- Suspicious Key File +- Berkas Kunci Mencurigakan +- +- +- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. +-Are you sure you want to continue with this file? +- Kunci berkas yang dipilih terlihat seperti kata sandi basisdata. Kunci berkas harus berkas statis yang tidak pernah berubah atau Anda akan kehilangan akses ke basisdata Anda selamanya. +-Apakah Anda yakin ingin melanjutkan dengan berkas ini? +- +- +- Old key file format +- Format berkas kunci lama +- +- +- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. +- +- +- +- +- MainWindow +- +- &Database +- Basis&data +- +- +- &Help +- &Bantuan +- +- +- &Groups +- &Grup +- +- +- &Tools +- &Perkakas +- +- +- &Quit +- &Keluar +- +- +- &About +- &Tentang +- +- +- Database settings +- Pengaturan basisdata +- +- +- Copy username to clipboard +- Salin nama pengguna ke papan klip +- +- +- Copy password to clipboard +- Salin sandi ke papan klip +- +- +- &Settings +- &Pengaturan +- +- +- &Title +- &Judul +- +- +- Copy title to clipboard +- Salin judul ke papan klip +- +- +- &URL +- &URL +- +- +- Copy URL to clipboard +- Salin URL ke papan klip +- +- +- &Notes +- &Catatan +- +- +- Copy notes to clipboard +- Salin catatan ke papan klip +- +- +- Copy &TOTP +- Salin &TOTP +- +- +- E&mpty recycle bin +- Kosongkan keranjang sa&mpah +- +- +- Clear history +- Bersihkan riwayat +- +- +- Access error for config file %1 +- Galat akses untuk berkas konfigurasi %1 +- +- +- Settings +- Pengaturan +- +- +- Toggle window +- Jungkit jendela +- +- +- Quit KeePassXC +- Keluar KeePassXC +- +- +- Please touch the button on your YubiKey! +- Silakan sentuh tombol pada YubiKey Anda! +- +- +- WARNING: You are using an unstable build of KeePassXC! +-There is a high risk of corruption, maintain a backup of your databases. +-This version is not meant for production use. +- PERINGATAN! Anda menggunakan versi tidak stabil dari KeePassXC! +-Tinggi kemungkinan terjadi kerusakan, harap kelola salinan basisdata Anda dengan baik. +-Versi ini tidak dimaksudkan untuk penggunaan sehari-hari. +- +- +- &Donate +- &Donasi +- +- +- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +-We recommend you use the AppImage available on our downloads page. +- PERINGATAN: Versi Qt Anda dapat menyebabkan KeePassXC mogok/tidak merespon dengan adanya On-Screen Keyboard! +-Kami sarankan Anda menggunakan AppImage yang tersedia di halaman unduhan kami. +- +- +- &Import +- &Impor +- +- +- Create a new database +- Buat basisdata baru +- +- +- Merge from another KDBX database +- Gabung dari basisdata KDBX lainnya +- +- +- Add a new entry +- Tambahkan entri baru +- +- +- View or edit entry +- Lihat atau sunting entri +- +- +- Add a new group +- Tambahkan grup baru +- +- +- Perform &Auto-Type +- Jalankan &Ketik-Otomatis +- +- +- Open &URL +- Buka &URL +- +- +- Import a KeePass 1 database +- Impor basisdata KeePass 1 +- +- +- Import a CSV file +- Impor berkas CSV +- +- +- NOTE: You are using a pre-release version of KeePassXC! +-Expect some bugs and minor issues, this version is not meant for production use. +- CATATAN: Anda menggunakan versi pra-rilis KeePassXC! +- +-Jangan kaget jika ada masalah dan bug, versi ini tidak ditujukan untuk penggunaan harian. +- +- +- Check for updates on startup? +- Periksa pembaruan saat memulai? +- +- +- Would you like KeePassXC to check for updates on startup? +- Apakah Anda ingin KeePassXC memeriksa pembaruan setiap memulai aplikasi? +- +- +- You can always check for updates manually from the application menu. +- Anda selalu bisa memeriksa pembaruan secara manual dari menu aplikasi. +- +- +- &Export +- &Ekspor +- +- +- Sort &A-Z +- Urutkan &A-Z +- +- +- Sort &Z-A +- Urutkan &Z-A +- +- +- &Password Generator +- &Pembuat Sandi +- +- +- Import a 1Password Vault +- Impor Brankas 1Password +- +- +- &Getting Started +- &Memulai +- +- +- &User Guide +- Pand&uan Pengguna +- +- +- &Keyboard Shortcuts +- Pintasan &Kibor +- +- +- &Recent Databases +- Basisdata Ba&ru-baru Ini +- +- +- &Entries +- &Entri +- +- +- Copy Att&ribute +- Salin At&ribut +- +- +- TOTP +- TOTP +- +- +- View +- Lihat +- +- +- Theme +- Tema +- +- +- &Check for Updates +- Periksa &Pembaruan +- +- +- &Open Database… +- &Buka Basisdata… +- +- +- &Save Database +- &Simpan Basisdata +- +- +- &Close Database +- &Tutup Basisdata +- +- +- &New Database… +- Basisdata &Baru… +- +- +- &Merge From Database… +- &Gabung Dari Basisdata… +- +- +- &New Entry… +- Entri &Baru… +- +- +- &Edit Entry… +- &Sunting Entri… +- +- +- &Delete Entry… +- &Hapus Entri… +- +- +- &New Group… +- Grup &Baru… +- +- +- &Edit Group… +- &Sunting Grup… +- +- +- &Delete Group… +- &Hapus Grup… +- +- +- Download All &Favicons… +- Unduh Semua &Favicon… +- +- +- Sa&ve Database As… +- Sim&pan Basisdata Sebagai… +- +- +- Database &Security… +- &Keamanan Basisdata… +- +- +- Database &Reports... +- &Laporan Basisdata... +- +- +- Statistics, health check, etc. +- Statistik, cek kesehatan, dll. +- +- +- &Database Settings… +- Pengaturan Basis&data… +- +- +- &Clone Entry… +- &Gandakan Entri… +- +- +- Move u&p +- Pindah ke &atas +- +- +- Move entry one step up +- Pindah entri 1 level ke atas +- +- +- Move do&wn +- Pindah ke &bawah +- +- +- Move entry one step down +- Pindah entri 1 level ke bawah +- +- +- Copy &Username +- Salin &Nama Pengguna +- +- +- Copy &Password +- Salin &Sandi +- +- +- Download &Favicon +- Unduh &Favicon +- +- +- &Lock Databases +- &Kunci Basisdata +- +- +- &CSV File… +- Berkas &CSV… +- +- +- &HTML File… +- Berkas &HTML… +- +- +- KeePass 1 Database… +- Basisdata KeePass 1… +- +- +- 1Password Vault… +- Brankas 1Password… +- +- +- CSV File… +- Berkas CSV… +- +- +- Show TOTP +- Tampilkan TOTP +- +- +- Show QR Code +- Tampilkan Kode QR +- +- +- Set up TOTP… +- Siapkan TOTP… +- +- +- Report a &Bug +- Laporkan &Bug +- +- +- Open Getting Started Guide +- Buka Panduan Memulai +- +- +- &Online Help +- &Bantuan Daring +- +- +- Go to online documentation +- Kunjungi dokumentasi daring +- +- +- Open User Guide +- Buka Panduan Pengguna +- +- +- Save Database Backup... +- Simpan Cadangan Basisdata... +- +- +- Add key to SSH Agent +- Tambahkan kunci ke Agen SSH +- +- +- Remove key from SSH Agent +- Buang kunci dari Agen SSH +- +- +- Compact Mode +- Mode Ringkas +- +- +- Automatic +- Otomatis +- +- +- Light +- Terang +- +- +- Dark +- Gelap +- +- +- Classic (Platform-native) +- Klasik (Native-platform) +- +- +- Show Toolbar +- Tampilkan Bilah Alat +- +- +- Show Preview Panel +- Tampilkan Panel Pratinjau +- +- +- Don't show again for this version +- Jangan tampilkan lagu untuk versi ini +- +- +- Restart Application? +- Mulai Ulang Aplikasi? +- +- +- You must restart the application to apply this setting. Would you like to restart now? +- Anda harus memulai ulang aplikasi untuk menerapkan pengaturan ini. Apakah Anda ingin memulai ulang sekarang? +- +- +- Perform Auto-Type Sequence +- +- +- +- {USERNAME} +- {NAMA PENGGUNA} +- +- +- {USERNAME}{ENTER} +- {NAMA PENGGUNA}{ENTER} +- +- +- {PASSWORD} +- {SANDI} +- +- +- {PASSWORD}{ENTER} +- {SANDI}{ENTER} +- +- +- Always on Top +- Selalu di Atas +- +- +- Hide Usernames +- Sembunyikan Nama Pengguna +- +- +- Hide Passwords +- Sembunyikan Sandi +- +- +- +- ManageDatabase +- +- Database settings +- Pengaturan basisdata +- +- +- Edit database settings +- Sunting pengaturan basisdata +- +- +- Unlock database +- Buka kunci basisdata +- +- +- Unlock database to show more information +- Buka kunci basisdata untuk menampilkan lebih banyak informasi +- +- +- Lock database +- Kunci basisdata +- +- +- +- ManageSession +- +- Disconnect +- Putuskan koneksi +- +- +- Disconnect this application +- Putuskan koneksi aplikasi ini +- +- +- +- Merger +- +- Creating missing %1 [%2] +- +- +- +- Relocating %1 [%2] +- Memindahkan %1 [%2] +- +- +- Overwriting %1 [%2] +- Menyimpan ulang %1 [%2] +- +- +- older entry merged from database "%1" +- entri lama yang digabung dari basisdata "%1" +- +- +- Adding backup for older target %1 [%2] +- Menambahkan cadangan untuk target lama %1 [%2] +- +- +- Adding backup for older source %1 [%2] +- Menambahkan cadangan untuk sumber lama %1 [%2] +- +- +- Reapplying older target entry on top of newer source %1 [%2] +- +- +- +- Reapplying older source entry on top of newer target %1 [%2] +- +- +- +- Synchronizing from newer source %1 [%2] +- Menyinkronkan dengan sumber yang lebih baru %1 [%2] +- +- +- Synchronizing from older source %1 [%2] +- Menyinkronkan dengan sumber yang lebih lama %1 [%2] +- +- +- Deleting child %1 [%2] +- +- +- +- Deleting orphan %1 [%2] +- +- +- +- Changed deleted objects +- Mengubah objek yang telah dihapus +- +- +- Adding missing icon %1 +- Menambahkan ikon %1 yang hilang +- +- +- Removed custom data %1 [%2] +- Data khusus yang dihapus %1[%2] +- +- +- Adding custom data %1 [%2] +- Menambahkan data khusus %1[%2] +- +- +- +- NewDatabaseWizard +- +- Create a new KeePassXC database... +- Buat basisdata KeePassXC baru... +- +- +- Root +- Root group +- Root +- +- +- +- NewDatabaseWizardPage +- +- WizardPage +- LamanPemandu +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Di sini Anda bisa menyesuaikan pengaturan enkripsi basisdata. Jangan khawatir, Anda bisa mengubahnya lagi nanti di pengaturan basisdata. +- +- +- Advanced Settings +- Pengaturan Lanjutan +- +- +- Simple Settings +- Pengaturan Dasar +- +- +- Encryption Settings +- Pengaturan Enkripsi +- +- +- +- NewDatabaseWizardPageDatabaseKey +- +- Database Credentials +- Kredensial Basisdata +- +- +- A set of credentials known only to you that protects your database. +- +- +- +- +- NewDatabaseWizardPageEncryption +- +- Encryption Settings +- Pengaturan Enkripsi +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Di sini Anda bisa menyesuaikan pengaturan enkripsi basisdata. Jangan khawatir, Anda bisa mengubahnya lagi nanti di pengaturan basisdata. +- +- +- +- NewDatabaseWizardPageMetaData +- +- General Database Information +- Informasi Basisdata Umum +- +- +- Please fill in the display name and an optional description for your new database: +- Silakan masukkan nama dan deskripsi opsional untuk basisdata Anda yang baru: +- +- +- +- NixUtils +- +- Password Manager +- Pengelola Sandi +- +- +- +- OpData01 +- +- Invalid OpData01, does not contain header +- +- +- +- Unable to read all IV bytes, wanted 16 but got %1 +- Tidak dapat membaca semua IV bytes, seharusnya 16 tetapi mendapat %1 +- +- +- Unable to init cipher for opdata01: %1 +- +- +- +- Unable to read all HMAC signature bytes +- Tidak dapat membaca semua HMAC signature bytes +- +- +- Malformed OpData01 due to a failed HMAC +- +- +- +- Unable to process clearText in place +- +- +- +- Expected %1 bytes of clear-text, found %2 +- +- +- +- +- OpVaultOpenWidget +- +- Read Database did not produce an instance +-%1 +- +- +- +- +- OpVaultReader +- +- Directory .opvault must exist +- +- +- +- Directory .opvault must be readable +- +- +- +- Directory .opvault/default must exist +- +- +- +- Directory .opvault/default must be readable +- +- +- +- Unable to decode masterKey: %1 +- Tidak dapat mendekodekan kuncimaster: %1 +- +- +- Unable to derive master key: %1 +- +- +- +- +- OpenSSHKey +- +- Invalid key file, expecting an OpenSSH key +- Berkas kunci tidak valid, mengharapkan kunci OpenSSH +- +- +- PEM boundary mismatch +- PEM boundary tidak cocok. +- +- +- Base64 decoding failed +- Dekode base64 gagal +- +- +- Key file way too small. +- Berkas kunci terlalu kecil. +- +- +- Key file magic header id invalid +- +- +- +- Found zero keys +- Tidak ada key yang ditemukan +- +- +- Failed to read public key. +- Gagal membaca kunci publik. +- +- +- Corrupted key file, reading private key failed +- Berkas kunci rusak, gagal membaca kunci privat +- +- +- No private key payload to decrypt +- Tidak ada isi dari private key untuk didekripsi +- +- +- Trying to run KDF without cipher +- Mencoba menjalankan KDF tanpa cipher +- +- +- Passphrase is required to decrypt this key +- Membutuhkan frasa sandi untuk mendekripsi kunci ini +- +- +- Key derivation failed, key file corrupted? +- Derivasi kunci gagal, berkas kunci rusak? +- +- +- Decryption failed, wrong passphrase? +- Dekripsi gagal, frasa sandi salah? +- +- +- Unexpected EOF while reading public key +- EOF yang tidak terduga saat membaca kunci publik +- +- +- Unexpected EOF while reading private key +- EOF yang tidak terduga saat membaca kunci privat +- +- +- Can't write public key as it is empty +- Tidak bisa membuat public key karena tidak ada isinya +- +- +- Unexpected EOF when writing public key +- EOF yang tidak terduga saat menulis kunci publik +- +- +- Can't write private key as it is empty +- Tidak bisa membuat private key karena tidak ada isinya +- +- +- Unexpected EOF when writing private key +- EOF yang tidak terduga saat menulis kunci privat +- +- +- Unsupported key type: %1 +- Jenis key tidak didukung: %1 +- +- +- Unknown cipher: %1 +- Cipher tidak diketahui: %1 +- +- +- Cipher IV is too short for MD5 kdf +- Cipher IV terlalu pendek untuk MD5 kdf +- +- +- Unknown KDF: %1 +- KDF tidak diketahui: %1 +- +- +- Unknown key type: %1 +- Jenis key tidak diketahui: %1 +- +- +- +- PasswordEdit +- +- Passwords do not match +- Sandi tidak sama +- +- +- Passwords match so far +- Kata sandi cocok sejauh ini +- +- +- Toggle Password (%1) +- Aktif/Nonaktifkan Sandi (%1) +- +- +- Generate Password (%1) +- Buat Sandi (%1) +- +- +- Warning: Caps Lock enabled! +- Peringatan: Caps Lock aktif! +- +- +- +- PasswordEditWidget +- +- Enter password: +- Masukkan sandi: +- +- +- Confirm password: +- Konfirmasi sandi: +- +- +- Password +- Sandi +- +- +- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> +- <p>Kata sandi adalah metode utama untuk mengamankan basisdata Anda.</p><p>Kata sandi yang bagus adalah unik dan panjang. KeePassXC dapat menghasilkan satu untuk Anda.</p> +- +- +- Passwords do not match. +- Sandi tidak sama. +- +- +- Password field +- Ruas sandi +- +- +- Repeat password field +- Ruas pengulangan sandi +- +- +- +- PasswordGeneratorWidget +- +- %p% +- %p% +- +- +- strength +- Password strength +- kekuatan +- +- +- entropy +- entropi +- +- +- Password +- Sandi +- +- +- Character Types +- Tipe Karakter +- +- +- Numbers +- Angka +- +- +- Extended ASCII +- ASCII Lanjutan +- +- +- Exclude look-alike characters +- Kecualikan karakter mirip +- +- +- Pick characters from every group +- Pilih karakter dari setiap grup +- +- +- &Length: +- &Panjang: +- +- +- Passphrase +- Frasa Sandi +- +- +- Wordlist: +- Daftar Kata: +- +- +- Word Separator: +- Pemisah Kata: +- +- +- Close +- Tutup +- +- +- Entropy: %1 bit +- Entropi: %1 bit +- +- +- Password Quality: %1 +- Kualitas Sandi: %1 +- +- +- Poor +- Password quality +- Buruk +- +- +- Weak +- Password quality +- Lemah +- +- +- Good +- Password quality +- Baik +- +- +- Excellent +- Password quality +- Sempurna +- +- +- Switch to advanced mode +- Beralih ke mode lanjutan +- +- +- Advanced +- Tingkat Lanjut +- +- +- Braces +- Tanda Kurung +- +- +- Punctuation +- Tanda Baca +- +- +- Quotes +- Tanda Petik +- +- +- Logograms +- Logogram +- +- +- Character set to exclude from generated password +- Karakter yang dikecualikan dari sandi yang dibuat +- +- +- Do not include: +- Jangan sertakan: +- +- +- Add non-hex letters to "do not include" list +- Tambahkan huruf bukan-hex ke daftar "jangan sertakan" +- +- +- Hex +- Hex +- +- +- Excluded characters: "0", "1", "l", "I", "O", "|", "ï¹’" +- Karakter yang dikecualikan: "0", "1", "l", "I", "O", "|", "ï¹’" +- +- +- Generated password +- Sandi yang dibuat +- +- +- Upper-case letters +- Huruf besar +- +- +- Lower-case letters +- Huruf kecil +- +- +- Special characters +- Karakter spesial +- +- +- Math Symbols +- Simbol Matematika +- +- +- Dashes and Slashes +- Garis Tengah dan Miring +- +- +- Excluded characters +- Karakter yang dikecualikan +- +- +- Hex Passwords +- Sandi Hex +- +- +- Password length +- Panjang sandi +- +- +- Word Case: +- +- +- +- Regenerate password +- Buat ulang sandi +- +- +- Copy password +- Salin sandi +- +- +- lower case +- huruf kecil +- +- +- UPPER CASE +- HURUF BESAR +- +- +- Title Case +- +- +- +- Generate Password +- Buat Sandi +- +- +- Also choose from: +- Juga pilih dari: +- +- +- Additional characters to use for the generated password +- Karakter tambahan yang digunakan untuk membuat sandi +- +- +- Additional characters +- Karakter tambahan +- +- +- Word Count: +- Jumlah Kata: +- +- +- Esc +- Esc +- +- +- Apply Password +- Terapkan kata sandi +- +- +- Ctrl+S +- Ctrl+S +- +- +- Regenerate password (%1) +- Buat ulang sandi (%1) +- +- +- Special Characters +- Karakter Spesial +- +- +- +- QApplication +- +- KeeShare +- KeeShare +- +- +- Statistics +- Statistik +- +- +- Very weak password +- Kata sandi sangat lemah +- +- +- Password entropy is %1 bits +- Entropi sandi adalah %1 bit +- +- +- Weak password +- Kata sandi lemah +- +- +- Used in %1/%2 +- Digunakan di %1/%2 +- +- +- Password is used %1 times +- Kata sandi sudah digunakan sebanyak %1 kali +- +- +- Password has expired +- Kata sandi kedaluwarsa +- +- +- Password expiry was %1 +- Sandi kedaluwarsa pada %1 +- +- +- Password is about to expire +- Kata sandi akan kedaluwarsa +- +- +- Password expires in %1 days +- Kata sandi akan kedaluwarsa dalam %1 hari +- +- +- Password will expire soon +- Kata sandi akan segera kedaluwarsa +- +- +- Password expires on %1 +- Kata sandi kedaluwarsa pada %1 +- +- +- Health Check +- Pemeriksaan Kesehatan +- +- +- HIBP +- HIBP +- +- +- +- QMessageBox +- +- Overwrite +- Timpa +- +- +- Delete +- Hapus +- +- +- Move +- Pindah +- +- +- Empty +- Kosong +- +- +- Remove +- Buang +- +- +- Skip +- Lewati +- +- +- Disable +- Nonaktifkan +- +- +- Merge +- Gabung +- +- +- Continue +- Lanjutkan +- +- +- +- QObject +- +- Database not opened +- Basisdata tidak terbuka +- +- +- Database hash not available +- Hash basisdata tidak tersedia +- +- +- Client public key not received +- Kunci publik klien tidak diterima +- +- +- Cannot decrypt message +- Tidak bisa mendekripsi pesan +- +- +- Action cancelled or denied +- Tindakan dibatalkan atau ditolak +- +- +- KeePassXC association failed, try again +- Asosiasi KeePassXC gagal, coba lagi +- +- +- Encryption key is not recognized +- Kunci enkripsi tidak dikenali +- +- +- Incorrect action +- Tindakan salah +- +- +- Empty message received +- Pesan kosong diterima +- +- +- No URL provided +- URL tidak ada +- +- +- No logins found +- Tidak ditemukan log masuk +- +- +- Unknown error +- Galat tidak diketahui +- +- +- Add a new entry to a database. +- Tambahkan entri baru ke basisdata. +- +- +- Path of the database. +- Jalur ke basisdata. +- +- +- Key file of the database. +- Berkas kunci dari basisdata. +- +- +- path +- jalur +- +- +- Username for the entry. +- Nama pengguna untuk entri. +- +- +- username +- nama pengguna +- +- +- URL for the entry. +- URL untuk entri. +- +- +- URL +- URL +- +- +- Prompt for the entry's password. +- Ingatkan sandi entri. +- +- +- Generate a password for the entry. +- Buat sandi entri. +- +- +- length +- panjang +- +- +- Path of the entry to add. +- Jalur entri yang akan ditambahkan. +- +- +- Path of the entry to clip. +- clip = copy to clipboard +- Jalur entri yang akan di salin. +- +- +- Timeout in seconds before clearing the clipboard. +- Waktu kedaluwarsa dalam detik sebelum mengosongkan papan klip. +- +- +- Edit an entry. +- Sunting sebuah entri. +- +- +- Title for the entry. +- Judul entri. +- +- +- title +- judul +- +- +- Path of the entry to edit. +- Jalur entri yang akan disunting. +- +- +- Estimate the entropy of a password. +- Estimasi entropi sandi. +- +- +- Password for which to estimate the entropy. +- Sandi untuk diestimasi entropinya. +- +- +- Perform advanced analysis on the password. +- Jalankan analisis tingkat lanjut pada sandi. +- +- +- +- +-Available commands: +- +- +- +-Perintah yang tersedia: +- +- +- +- Name of the command to execute. +- Nama perintah untuk dijalankan. +- +- +- List database entries. +- Daftar entri basisdata. +- +- +- Path of the group to list. Default is / +- Jalur grup untuk ditampilkan. Bawaan adalah / +- +- +- Find entries quickly. +- Temukan entri dengan cepat. +- +- +- Search term. +- Lema pencarian. +- +- +- Merge two databases. +- Gabungkan dua basisdata. +- +- +- Path of the database to merge from. +- Jalur sumber basisdata untuk digabungkan. +- +- +- Use the same credentials for both database files. +- Gunakan kredensial yang sama untuk kedua berkas basisdata. +- +- +- Key file of the database to merge from. +- Berkas kunci dari basisdata yang akan digabungkan. +- +- +- Show an entry's information. +- Tampilkan informasi entri. +- +- +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- Nama atribut yang akan ditampilkan. Opsi ini bisa digunakan lebih dari sekali, dengan masing-masing atribut ditampilkan satu per baris sesuai dengan urutannya. Jika tidak ada atribut, ringkasan atribut bawaan akan ditampilkan. +- +- +- attribute +- atribut +- +- +- Name of the entry to show. +- Nama entri untuk ditampilkan. +- +- +- NULL device +- Perangkat NULL +- +- +- error reading from device +- galat membaca dari perangkat +- +- +- malformed string +- lema rusak +- +- +- missing closing quote +- kehilangan tanda kutip tutup +- +- +- Group +- Grup +- +- +- Title +- Judul +- +- +- Username +- Nama pengguna +- +- +- Password +- Sandi +- +- +- Notes +- Catatan +- +- +- Last Modified +- Terakhir Diubah +- +- +- Created +- Dibuat +- +- +- Browser Integration +- Integrasi Peramban +- +- +- SSH Agent +- SSH Agent +- +- +- Generate a new random diceware passphrase. +- Buat frasa sandi diceware acak yang baru. +- +- +- Word count for the diceware passphrase. +- Jumlah kata untuk frasa sandi diceware. +- +- +- Wordlist for the diceware generator. +-[Default: EFF English] +- Daftar kata untuk generator diceware. +-[Bawaan: Inggris EFF] +- +- +- Generate a new random password. +- Buat kata sandi baru secara acak. +- +- +- Could not create entry with path %1. +- Tidak bisa membuat entri dengan jalur %1. +- +- +- Enter password for new entry: +- Masukkan sandi untuk entri baru: +- +- +- Writing the database failed %1. +- Gagal menyimpan basisdata %1. +- +- +- Successfully added entry %1. +- Berhasil menambahkan entri %1. +- +- +- Invalid timeout value %1. +- +- +- +- Entry %1 not found. +- Entri %1 tidak ditemukan. +- +- +- Entry with path %1 has no TOTP set up. +- +- +- +- Clearing the clipboard in %1 second(s)... +- Menghapus entri papan klip dalam %1 detik... +- +- +- Clipboard cleared! +- Entri papan klip dihapus! +- +- +- Silence password prompt and other secondary outputs. +- +- +- +- count +- CLI parameter +- +- +- +- Could not find entry with path %1. +- Tidak bisa menemukan entri dengan jalur %1. +- +- +- Not changing any field for entry %1. +- +- +- +- Enter new password for entry: +- Masukkan sandi baru untuk entri: +- +- +- Writing the database failed: %1 +- Gagal menyimpan basisdata: %1 +- +- +- Successfully edited entry %1. +- Berhasil menyunting entri %1. +- +- +- Length %1 +- Panjang %1 +- +- +- Entropy %1 +- Entropi %1 +- +- +- Log10 %1 +- Log10 %1 +- +- +- Multi-word extra bits %1 +- +- +- +- Type: Bruteforce +- Tipe: Bruteforce +- +- +- Type: Dictionary +- Tipe: Dictionary +- +- +- Type: Dict+Leet +- Tipe: Dict+Leet +- +- +- Type: User Words +- Tipe: User Words +- +- +- Type: User+Leet +- Tipe: User+Leet +- +- +- Type: Repeated +- Tipe: Repeated +- +- +- Type: Sequence +- Tipe: Sequence +- +- +- Type: Spatial +- Tipe: Spatial +- +- +- Type: Date +- Tipe: Tanggal +- +- +- Type: Bruteforce(Rep) +- +- +- +- Type: Dictionary(Rep) +- +- +- +- Type: Dict+Leet(Rep) +- +- +- +- Type: User Words(Rep) +- +- +- +- Type: User+Leet(Rep) +- +- +- +- Type: Repeated(Rep) +- +- +- +- Type: Sequence(Rep) +- +- +- +- Type: Spatial(Rep) +- +- +- +- Type: Date(Rep) +- +- +- +- Type: Unknown%1 +- Tipe: Tidak diketahui%1 +- +- +- Entropy %1 (%2) +- Entropi %1 (%2) +- +- +- *** Password length (%1) != sum of length of parts (%2) *** +- *** Panjang kata sandi (%1) != jumlah panjang bagian (%2) *** +- +- +- Failed to load key file %1: %2 +- Gagal memuat berkas kunci %1: %2 +- +- +- Length of the generated password +- Panjang dari sandi yang dibuat +- +- +- Use lowercase characters +- Gunakan karakter huruf kecil +- +- +- Use uppercase characters +- Gunakan karakter huruf besar +- +- +- Use special characters +- Gunakan karakter spesial +- +- +- Use extended ASCII +- Gunakan ASCII lanjutan +- +- +- Exclude character set +- Kecualikan karakter +- +- +- chars +- karakter +- +- +- Exclude similar looking characters +- Kecualikan karakter yang mirip +- +- +- Include characters from every selected group +- Sertakan karakter dari setiap grup yang dipilih +- +- +- Recursively list the elements of the group. +- Tampilkan daftar semua elemen dari grup. +- +- +- Cannot find group %1. +- Tidak bisa menemukan grup %1. +- +- +- Error reading merge file: +-%1 +- Terjadi kesalahan saat menggabungkan berkas: +-%1 +- +- +- Unable to save database to file : %1 +- Tidak bisa menyimpan basisdata ke berkas : %1 +- +- +- Unable to save database to file: %1 +- Tidak bisa menyimpan basisdata ke berkas: %1 +- +- +- Successfully recycled entry %1. +- +- +- +- Successfully deleted entry %1. +- Berhasil menghapus entri %1. +- +- +- Show the entry's current TOTP. +- Tampilkan TOTP entri. +- +- +- ERROR: unknown attribute %1. +- GALAT: atribut tidak diketahui %1. +- +- +- No program defined for clipboard manipulation +- Tidak ada program yang bisa digunakan untuk manipulasi papan klip +- +- +- file empty +- berkas kosong +- +- +- %1: (row, col) %2,%3 +- %1: (baris, kolom) %2,%3 +- +- +- AES-KDF (KDBX 4) +- AES-KDF (KDBX 4) +- +- +- AES-KDF (KDBX 3.1) +- AES-KDF (KDBX 3.1) +- +- +- Invalid Settings +- TOTP +- Pengaturan Tidak Valid +- +- +- Invalid Key +- TOTP +- Kunci Tidak Valid +- +- +- Message encryption failed. +- Enkripsi pesan gagal. +- +- +- No groups found +- Tidak ada grup yang ditemukan +- +- +- Create a new database. +- Buat basisdata baru. +- +- +- File %1 already exists. +- Berkas %1 sudah ada. +- +- +- Loading the key file failed +- Pemuatan berkas kunci gagal +- +- +- No key is set. Aborting database creation. +- Tidak ada kunci yang diatur. Membatalkan pembuatan basisdata. +- +- +- Failed to save the database: %1. +- Gagal menyimpan basisdata: %1. +- +- +- Successfully created new database. +- Berhasil membuat basisdata baru. +- +- +- Creating KeyFile %1 failed: %2 +- +- +- +- Loading KeyFile %1 failed: %2 +- +- +- +- Path of the entry to remove. +- Jalur entri untuk dibuang. +- +- +- Existing single-instance lock file is invalid. Launching new instance. +- +- +- +- The lock file could not be created. Single-instance mode disabled. +- Berkas penguncian tidak bisa dibuat. Mode aplikasi tunggal dinonaktifkan. +- +- +- KeePassXC - cross-platform password manager +- KeePassXC - pengelola sandi lintas platform +- +- +- filenames of the password databases to open (*.kdbx) +- nama berkas basisdata sandi untuk dibuka (*.kdbx) +- +- +- path to a custom config file +- jalur ke berkas konfigurasi khusus +- +- +- key file of the database +- berkas kunci basisdata +- +- +- read password of the database from stdin +- baca sandi basisdata dari stdin +- +- +- Another instance of KeePassXC is already running. +- Aplikasi KeePassXC lainnya sudah berjalan. +- +- +- Fatal error while testing the cryptographic functions. +- Galat saat menguji fungsi kriptografi. +- +- +- KeePassXC - Error +- KeePassXC - Galat +- +- +- Database password: +- Sandi basisdata: +- +- +- Cannot create new group +- Tidak bisa membuat grup baru +- +- +- Deactivate password key for the database. +- Nonaktifkan kunci kata sandi untuk basisdata. +- +- +- Displays debugging information. +- Tampilkan informasi pengawakutuan. +- +- +- Deactivate password key for the database to merge from. +- Nonaktifkan kunci kata sandi untuk menggabungkan basisdata. +- +- +- Version %1 +- Versi %1 +- +- +- Build Type: %1 +- Tipe Build: %1 +- +- +- Revision: %1 +- Revisi: %1 +- +- +- Distribution: %1 +- Distribusi: %1 +- +- +- Debugging mode is disabled. +- Mode debugging dinonaktifkan. +- +- +- Debugging mode is enabled. +- Mode debugging diaktifkan. +- +- +- Operating system: %1 +-CPU architecture: %2 +-Kernel: %3 %4 +- Sistem operasi: %1 +-Arsitektur CPU: %2 +-Kernel: %3 %4 +- +- +- Auto-Type +- Ketik-Otomatis +- +- +- KeeShare (signed and unsigned sharing) +- +- +- +- KeeShare (only signed sharing) +- +- +- +- KeeShare (only unsigned sharing) +- +- +- +- YubiKey +- YubiKey +- +- +- TouchID +- TouchID +- +- +- None +- Nihil +- +- +- Enabled extensions: +- Ekstensi aktif: +- +- +- Cryptographic libraries: +- +- +- +- Cannot generate a password and prompt at the same time! +- +- +- +- Adds a new group to a database. +- Menambahkan grup baru ke basisdata. +- +- +- Path of the group to add. +- Jalur dari grup yang ingin ditambahkan. +- +- +- Group %1 already exists! +- Grup %1 sudah ada! +- +- +- Group %1 not found. +- Grup %1 tidak ditemukan. +- +- +- Successfully added group %1. +- Berhasil menambahkan grup %1. +- +- +- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. +- Periksa apakah ada kata sandi yang dibocorkan secara publik. NAMABERKAS harus menjadi jalur dari daftar berkas kata sandi hash SHA-1 yang bocor dalam format HIBP, sebagaimana tersedia dari https://haveibeenpwned.com/Passwords. +- +- +- FILENAME +- NAMABERKAS +- +- +- Analyze passwords for weaknesses and problems. +- Menganalisa kata sandi untuk kelemahan dan masalah. +- +- +- Failed to open HIBP file %1: %2 +- Gagal membuka berkas HIBP %1: %2 +- +- +- Evaluating database entries against HIBP file, this will take a while... +- Mengevaluasi entri basisdata terhadap berkas HIBP, ini akan memakan waktu cukup lama... +- +- +- Close the currently opened database. +- Tutup basisdata yang saat ini dibuka. +- +- +- Display this help. +- Tampilkan bantuan ini. +- +- +- slot +- +- +- +- Invalid word count %1 +- +- +- +- The word list is too small (< 1000 items) +- Daftar kata terlalu kecil (<1000 item) +- +- +- Exit interactive mode. +- Keluar dari mode interaktif. +- +- +- Exports the content of a database to standard output in the specified format. +- Ekspor konten dari basisdata ke keluaran standar dalam format yang ditentukan. +- +- +- Unable to export database to XML: %1 +- Tidak bisa mengekspor basisdata ke XML: %1 +- +- +- Unsupported format %1 +- Format tidak didukung %1 +- +- +- Use numbers +- Gunakan angka +- +- +- Invalid password length %1 +- Panjang sandi tidak valid %1 +- +- +- Display command help. +- Tampilkan bantuan perintah. +- +- +- Available commands: +- Perintah yang tersedia: +- +- +- Import the contents of an XML database. +- Impor konten dari basisdata XML. +- +- +- Path of the XML database export. +- +- +- +- Path of the new database. +- Jalur dari basisdata baru. +- +- +- Successfully imported database. +- Berhasil mengimpor basisdata. +- +- +- Unknown command %1 +- Perintah tidak diketahui %1 +- +- +- Flattens the output to single lines. +- Ratakan keluaran menjadi satu baris. +- +- +- Only print the changes detected by the merge operation. +- Hanya cetak perubahan yang terdeteksi oleh operasi gabungan. +- +- +- Yubikey slot for the second database. +- Slot Yubikey untuk basisdata kedua. +- +- +- Successfully merged %1 into %2. +- Berhasil menggabungkan %1 ke %2. +- +- +- Database was not modified by merge operation. +- Basisdata tidak ada perubahan yang diakibatkan oleh proses penggabungan. +- +- +- Moves an entry to a new group. +- Pindah entri ke grup baru +- +- +- Path of the entry to move. +- Jalur dari entri yang ingin dipindahkan +- +- +- Path of the destination group. +- Jalur dari destinasi grup. +- +- +- Could not find group with path %1. +- Tidak bisa menemukan grup dengan jalur %1. +- +- +- Entry is already in group %1. +- Entri sudah ada di dalam grup %1. +- +- +- Successfully moved entry %1 to group %2. +- Berhasil memindahkan entri %1 ke grup %2 +- +- +- Open a database. +- Buka basisdata. +- +- +- Path of the group to remove. +- Jalur dari grup yang ingin dihapus. +- +- +- Cannot remove root group from database. +- Tidak dapat menghapus grup root dari basisdata. +- +- +- Successfully recycled group %1. +- Berhasil memulihkan grup %1. +- +- +- Successfully deleted group %1. +- Berhasil menghapus grup %1. +- +- +- Failed to open database file %1: not found +- Gagal membuka berkas basisdata %1: tidak ditemukan +- +- +- Failed to open database file %1: not a plain file +- +- +- +- Failed to open database file %1: not readable +- Gagal membuka berkas basisdata %1: tidak terbaca +- +- +- Enter password to unlock %1: +- Masukkan sandi untuk membuka %1: +- +- +- Invalid YubiKey slot %1 +- +- +- +- Enter password to encrypt database (optional): +- Masukkan sandi untuk mengenkripsi basisdata (opsional): +- +- +- HIBP file, line %1: parse error +- +- +- +- Secret Service Integration +- Integrasi Layanan Rahasia +- +- +- User name +- Nama pengguna +- +- +- Password for '%1' has been leaked %2 time(s)! +- Kata sandi untuk '%1' telah bocor %2 kali! +- +- +- Invalid password generator after applying all options +- +- +- +- Show the protected attributes in clear text. +- Tampilkan atribut yang dilindungi dalam teks yang jelas. +- +- +- Browser Plugin Failure +- +- +- +- Could not save the native messaging script file for %1. +- +- +- +- Copy the given attribute to the clipboard. Defaults to "password" if not specified. +- +- +- +- Copy the current TOTP to the clipboard (equivalent to "-a totp"). +- +- +- +- Copy an entry's attribute to the clipboard. +- +- +- +- ERROR: Please specify one of --attribute or --totp, not both. +- ERROR: Harap tentukan salah satu dari --attribute atau -totp, bukan keduanya. +- +- +- ERROR: attribute %1 is ambiguous, it matches %2. +- +- +- +- Attribute "%1" not found. +- Atribut "%1" tidak ditemukan. +- +- +- Entry's "%1" attribute copied to the clipboard! +- +- +- +- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). +- +- +- +- slot[:serial] +- +- +- +- Target decryption time in MS for the database. +- +- +- +- time +- waktu +- +- +- Set the key file for the database. +- Atur berkas kunci untuk basisdata. +- +- +- Set a password for the database. +- Atur kata sandi untuk basisdata. +- +- +- Invalid decryption time %1. +- Waktu dekripsi tidak valid %1. +- +- +- Target decryption time must be between %1 and %2. +- Waktu dekripsi target harus antara %1 dan %2. +- +- +- Failed to set database password. +- Gagal mengatur kata sandi basisdata. +- +- +- Benchmarking key derivation function for %1ms delay. +- +- +- +- Setting %1 rounds for key derivation function. +- +- +- +- error while setting database key derivation settings. +- +- +- +- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. +- Format yang digunakan ketika mengekspor. Pilihan yang tersedia adalah 'xml' atau 'csv'. Standarnya adalah 'xml'. +- +- +- Unable to import XML database: %1 +- Tidak bisa mengimpor basisdata XML: %1 +- +- +- Show a database's information. +- Tampilkan informasi basisdata. +- +- +- UUID: +- UUID: +- +- +- Name: +- Nama: +- +- +- Description: +- Deskripsi: +- +- +- Cipher: +- Sandi Cipher: +- +- +- KDF: +- KDF: +- +- +- Recycle bin is enabled. +- Keranjang sampah diaktifkan. +- +- +- Recycle bin is not enabled. +- Keranjang sampah tidak diaktifkan. +- +- +- Invalid command %1. +- Perintah tidak valid %1. +- +- +- Invalid YubiKey serial %1 +- Serial YubiKey tidak valid %1 +- +- +- Please touch the button on your YubiKey to continue… +- Silakan sentuh tombol pada YubiKey Anda untuk melanjutkan... +- +- +- Do you want to create a database with an empty password? [y/N]: +- Apakah Anda ingin membuat basisdata dengan kata sandi kosong? [y/N]: +- +- +- Repeat password: +- Ulangi kata sandi: +- +- +- Error: Passwords do not match. +- Error: kata sandi tidak sesuai. +- +- +- All clipping programs failed. Tried %1 +- +- +- +- +- AES (%1 rounds) +- +- +- +- AES 256-bit +- AES 256-bit +- +- +- Twofish 256-bit +- Twofish 256-bit +- +- +- ChaCha20 256-bit +- +- +- +- Benchmark %1 delay +- +- +- +- %1 ms +- milliseconds +- %1 mili detik +- +- +- %1 s +- seconds +- %1 detik +- +- +- path to a custom local config file +- +- +- +- WARNING: You are using an old key file format which KeePassXC may +-stop supporting in the future. +- +-Please consider generating a new key file. +- +- +- +- Argon2%1 (%2 rounds, %3 KB) +- +- +- +- Argon2d (KDBX 4 – recommended) +- +- +- +- Argon2id (KDBX 4) +- +- +- +- TOTP +- TOTP +- +- +- Icon +- Ikon +- +- +- Unsupported key file version: %1 +- +- +- +- Checksum mismatch! Key file may be corrupt. +- +- +- +- Unexpected key file data! Key file may be corrupt. +- +- +- +- +- QtIOCompressor +- +- Internal zlib error when compressing: +- Galat zlib internal ketika memampatkan: +- +- +- Error writing to underlying device: +- Terjadi kesalahan saat menyimpan ke perangkat: +- +- +- Error opening underlying device: +- Terjadi kesalahan saat membuka perangkat: +- +- +- Error reading data from underlying device: +- Terjadi kesalahan saat membaca data dari perangkat: +- +- +- Internal zlib error when decompressing: +- Galat zlib internal ketika dekompres: +- +- +- +- QtIOCompressor::open +- +- The gzip format not supported in this version of zlib. +- Format gzip tidak didukung pada versi zlib ini. +- +- +- Internal zlib error: +- Galat zlib internal: +- +- +- +- ReportsWidgetHealthcheck +- +- Also show entries that have been excluded from reports +- Tampilkan juga entri yang telah dikecualikan dari laporan +- +- +- Hover over reason to show additional details. Double-click entries to edit. +- +- +- +- Bad +- Password quality +- Buruk +- +- +- Bad — password must be changed +- Buruk — kata sandi harus diubah +- +- +- Poor +- Password quality +- Buruk +- +- +- Poor — password should be changed +- Kurang baik — kata sandi harus diubah +- +- +- Weak +- Password quality +- Lemah +- +- +- Weak — consider changing the password +- Lemah — pertimbangkan untuk mengubah kata sandi +- +- +- (Excluded) +- (Dikecualikan) +- +- +- This entry is being excluded from reports +- Entri ini sedang dikecualikan dari laporan +- +- +- Please wait, health data is being calculated... +- Harap tunggu, data kesehatan sedang dikalkulasi... +- +- +- Congratulations, everything is healthy! +- Selamat, semuanya sehat! +- +- +- Title +- Judul +- +- +- Path +- Jalur +- +- +- Score +- Skor +- +- +- Reason +- Alasan +- +- +- Edit Entry... +- Sunting Entri... +- +- +- Exclude from reports +- Kecualikan dari laporan +- +- +- +- ReportsWidgetHibp +- +- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. +- PERHATIAN: Laporan ini membutuhkan pengiriman informasi ke layanan online Have I Been Pwned (https://haveibeenpwned.com). Jika Anda melanjutkan, kata sandi basisdata Anda akan diacak secara kriptografis dan lima karakter pertama dari hash tersebut akan dikirim dengan aman ke layanan ini. Basisdata Anda tetap aman dan tidak dapat dibangun kembali dari informasi ini. Namun, jumlah kata sandi yang Anda kirim dan alamat IP Anda akan terpapar ke layanan ini. +- +- +- Perform Online Analysis +- Lakukan Analisis Online +- +- +- Also show entries that have been excluded from reports +- Tampilkan juga entri yang telah dikecualikan dari laporan +- +- +- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. +- Versi KeePassXC ini tidak memiliki fungsi konektivitas jaringan. Konektivitas jaringan diperlukan untuk memeriksa kata sandi Anda terhadap basisdata Have I Been Pwned. +- +- +- Congratulations, no exposed passwords! +- +- +- +- Title +- Judul +- +- +- Path +- Jalur +- +- +- Password exposed… +- +- +- +- (Excluded) +- (Dikecualikan) +- +- +- This entry is being excluded from reports +- Entri ini sedang dikecualikan dari laporan +- +- +- once +- sekali +- +- +- up to 10 times +- hingga 10 kali +- +- +- up to 100 times +- hingga 100 kali +- +- +- up to 1000 times +- hingga 1000 kali +- +- +- up to 10,000 times +- hingga 10,000 kali +- +- +- up to 100,000 times +- hingga 100,000 kali +- +- +- up to a million times +- hingga 1 juta kali +- +- +- millions of times +- jutaan kali +- +- +- Edit Entry... +- Sunting Entri... +- +- +- Exclude from reports +- Kecualikan dari laporan +- +- +- +- ReportsWidgetStatistics +- +- Hover over lines with error icons for further information. +- +- +- +- Name +- Nama +- +- +- Value +- Nilai +- +- +- Please wait, database statistics are being calculated... +- Harap tunggu, statistik basisdata sedang dikalkulasi... +- +- +- Database name +- Nama basisdata +- +- +- Description +- Deskripsi +- +- +- Location +- Lokasi +- +- +- Last saved +- Terakhir disimpan +- +- +- Unsaved changes +- Berubahan belum disimpan +- +- +- yes +- ya +- +- +- no +- tidak +- +- +- The database was modified, but the changes have not yet been saved to disk. +- Basisdata telah dimodifikasi, tetapi perubahan belum disimpan ke penyimpanan. +- +- +- Number of groups +- Jumlah grup +- +- +- Number of entries +- Jumlah entri +- +- +- Number of expired entries +- Jumlah entri yang kedaluwarsa +- +- +- The database contains entries that have expired. +- Basisdata berisi entri yang sudah kedaluwarsa. +- +- +- Unique passwords +- Kata sandi unik +- +- +- Non-unique passwords +- Kata sandi tidak unik +- +- +- More than 10% of passwords are reused. Use unique passwords when possible. +- Lebih dari 10% kata sandi digunakan kembali. Gunakan kata sandi unik jika memungkinkan. +- +- +- Maximum password reuse +- +- +- +- Some passwords are used more than three times. Use unique passwords when possible. +- Beberapa kata sandi digunakan lebih dari tiga kali. Gunakan kata sandi unik jika memungkinkan. +- +- +- Number of short passwords +- Jumlah kata sandi singkat +- +- +- Recommended minimum password length is at least 8 characters. +- Panjang kata sandi minimum yang disarankan minimal 8 karakter. +- +- +- Number of weak passwords +- Jumlah kata sandi yang lemah +- +- +- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. +- +- +- +- Entries excluded from reports +- +- +- +- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. +- +- +- +- Average password length +- Panjang rata-rata kata sandi +- +- +- %1 characters +- %1 karakter +- +- +- Average password length is less than ten characters. Longer passwords provide more security. +- Panjang rata-rata kata sandi kurang dari sepuluh karakter. Kata sandi yang lebih panjang memberikan keamanan yang lebih. +- +- +- +- SSHAgent +- +- Agent connection failed. +- Koneksi agen gagal. +- +- +- Agent protocol error. +- Galat protokol agen. +- +- +- No agent running, cannot add identity. +- Tidak ada agen yang berjalan, tidak dapat menambahkan identitas. +- +- +- No agent running, cannot remove identity. +- Tidak ada agen yang berjalan, tidak dapat menghapus identitas. +- +- +- Agent refused this identity. Possible reasons include: +- Agen menolak identitas ini. Alasan yang mungkin meliputi: +- +- +- The key has already been added. +- Kunci sudah ditambahkan. +- +- +- Restricted lifetime is not supported by the agent (check options). +- +- +- +- A confirmation request is not supported by the agent (check options). +- +- +- +- Key identity ownership conflict. Refusing to add. +- +- +- +- No agent running, cannot list identities. +- +- +- +- +- SearchHelpWidget +- +- Search Help +- Cari Bantuan +- +- +- Search terms are as follows: [modifiers][field:]["]term["] +- Kata pencarian seperti berikut ini: [modifiers][field:]["]term["] +- +- +- Every search term must match (ie, logical AND) +- +- +- +- Modifiers +- +- +- +- exclude term from results +- kecualikan kata dari hasil pencarian +- +- +- match term exactly +- +- +- +- use regex in term +- +- +- +- Fields +- +- +- +- Term Wildcards +- +- +- +- match anything +- +- +- +- match one +- +- +- +- logical OR +- +- +- +- Examples +- Contoh +- +- +- +- SearchWidget +- +- Search +- Cari +- +- +- Limit search to selected group +- Batasi pencarian ke grup yang dipilih +- +- +- Search Help +- Cari Bantuan +- +- +- Search (%1)... +- Search placeholder text, %1 is the keyboard shortcut +- Cari (%1)... +- +- +- Case sensitive +- Sensitif besar kecil huruf +- +- +- +- SettingsWidgetFdoSecrets +- +- Options +- Pilihan +- +- +- Enable KeepassXC Freedesktop.org Secret Service integration +- Aktifkan KeepassXC Freedesktop.org Integrasi Layanan Rahasia +- +- +- General +- Umum +- +- +- Show notification when credentials are requested +- +- +- +- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> +- +- +- +- Exposed database groups: +- +- +- +- Authorization +- Otorisasi +- +- +- These applications are currently connected: +- Aplikasi ini sedang terhubung: +- +- +- Don't confirm when entries are deleted by clients +- Jangan konfirmasi ketika entri dihapus oleh klien +- +- +- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. +- <b>Error:</b>Gagal terhubung ke DBus. Harap periksa pengaturan DBus Anda. +- +- +- <b>Warning:</b> +- <b>Peringatan:</b> +- +- +- Save current changes to activate the plugin and enable editing of this section. +- +- +- +- +- SettingsWidgetKeeShare +- +- Active +- Aktif +- +- +- Allow export +- Izinkan ekspor +- +- +- Allow import +- Izinkan impor +- +- +- Own certificate +- Sertifikat milik pribadi +- +- +- Fingerprint: +- Sidik Jari: +- +- +- Certificate: +- Sertifikat: +- +- +- Signer +- +- +- +- Key: +- Kunci: +- +- +- Generate +- Buat +- +- +- Import +- Impor +- +- +- Export +- Ekspor +- +- +- Imported certificates +- Sertifikat yang diimpor +- +- +- Trust +- Percaya +- +- +- Ask +- Tanya +- +- +- Untrust +- +- +- +- Remove +- Buang +- +- +- Path +- Jalur +- +- +- Status +- Status +- +- +- Fingerprint +- Tanda tangan +- +- +- Certificate +- Sertifikat +- +- +- Trusted +- Dipercaya +- +- +- Untrusted +- Tidak dipercaya +- +- +- Unknown +- Tidak diketahui +- +- +- key.share +- Filetype for KeeShare key +- +- +- +- KeeShare key file +- Berkas kunci KeeShare +- +- +- All files +- Semua Berkas +- +- +- Select path +- Pilih jalur +- +- +- Exporting changed certificate +- Mengekspor sertifikat yang diubah +- +- +- The exported certificate is not the same as the one in use. Do you want to export the current certificate? +- +- +- +- Signer: +- +- +- +- Allow KeeShare imports +- Izinkan impor KeeShare +- +- +- Allow KeeShare exports +- Izinkan ekspor KeeShare +- +- +- Only show warnings and errors +- Hanya tampilkan peringatan dan error +- +- +- Key +- Kunci +- +- +- Signer name field +- +- +- +- Generate new certificate +- Hasilkan sertifikat baru +- +- +- Import existing certificate +- Impor sertifikat yang sudah ada +- +- +- Export own certificate +- Ekspor sertifikat pribadi +- +- +- Known shares +- +- +- +- Trust selected certificate +- Percayakan sertifikat terpilih +- +- +- Ask whether to trust the selected certificate every time +- +- +- +- Untrust selected certificate +- +- +- +- Remove selected certificate +- Hapus sertifikat yang dipilih +- +- +- +- ShareExport +- +- Overwriting signed share container is not supported - export prevented +- +- +- +- Could not write export container (%1) +- +- +- +- Could not embed signature: Could not open file to write (%1) +- +- +- +- Could not embed signature: Could not write file (%1) +- +- +- +- Could not embed database: Could not open file to write (%1) +- +- +- +- Could not embed database: Could not write file (%1) +- +- +- +- Overwriting unsigned share container is not supported - export prevented +- +- +- +- Could not write export container +- +- +- +- Unexpected export error occurred +- +- +- +- +- ShareImport +- +- Import from container without signature +- +- +- +- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? +- +- +- +- Import from container with certificate +- +- +- +- Do you want to trust %1 with the fingerprint of %2 from %3? +- Apakah Anda ingin mempercayai %1 dengan sidik jari %2 dari %3? {1 ?} {2 ?} +- +- +- Not this time +- Tidak sekarang +- +- +- Never +- Tidak Pernah +- +- +- Always +- Selalu +- +- +- Just this time +- +- +- +- Signed share container are not supported - import prevented +- +- +- +- File is not readable +- Berkas tidak bisa dibaca +- +- +- Invalid sharing container +- +- +- +- Untrusted import prevented +- +- +- +- Successful signed import +- +- +- +- Unsigned share container are not supported - import prevented +- +- +- +- Successful unsigned import +- +- +- +- File does not exist +- Berkas tidak ada +- +- +- Unknown share container type +- +- +- +- +- ShareObserver +- +- Import from %1 failed (%2) +- Impor dari %1 gagal (%2) +- +- +- Import from %1 successful (%2) +- Impor dari %1 berhasil (%2) +- +- +- Imported from %1 +- Diimpor dari %1 +- +- +- Export to %1 failed (%2) +- Ekspor ke %1 gagal (%2) +- +- +- Export to %1 successful (%2) +- Ekspor ke %1 berhasil (%2) +- +- +- Export to %1 +- Ekspor ke %1 +- +- +- Multiple import source path to %1 in %2 +- +- +- +- Conflicting export target path %1 in %2 +- +- +- +- +- TotpDialog +- +- Timed Password +- Sandi Berwaktu +- +- +- 000000 +- 000000 +- +- +- Copy +- Salin +- +- +- Expires in <b>%n</b> second(s) +- Kedaluwarsa dalam <b>%n</b> detik +- +- +- +- TotpExportSettingsDialog +- +- Copy +- Salin +- +- +- NOTE: These TOTP settings are custom and may not work with other authenticators. +- TOTP QR code dialog warning +- CATATAN: Pengaturan TOTP ini sangat khusus dan mungkin tidak akan bekerja dengan otentikator lainnya. +- +- +- There was an error creating the QR code. +- Ada kesalahan saat membuat kode QR. +- +- +- Closing in %1 seconds. +- Akan ditutup dalam %1 detik. +- +- +- +- TotpSetupDialog +- +- Setup TOTP +- Siapkan TOTP +- +- +- Default RFC 6238 token settings +- Pengaturan bawaan token RFC 6238 +- +- +- Steam token settings +- Pengaturan token steam +- +- +- Use custom settings +- Gunakan pengaturan khusus +- +- +- Custom Settings +- Pengaturan Khusus +- +- +- Time step: +- Interval waktu: +- +- +- sec +- Seconds +- det +- +- +- Code size: +- Ukuran kode: +- +- +- Secret Key: +- Kunci Rahasia: +- +- +- Secret key must be in Base32 format +- Kunci rahasia harus dalam format Base32 +- +- +- Secret key field +- +- +- +- Algorithm: +- Algoritma: +- +- +- Time step field +- +- +- +- digits +- +- +- +- Invalid TOTP Secret +- TOTP Secret tidak valid +- +- +- You have entered an invalid secret key. The key must be in Base32 format. +-Example: JBSWY3DPEHPK3PXP +- Anda telah memasukkan kunci rahasia yang tidak valid. Kuncinya harus dalam format Base32. +-Contoh: JBSWY3DPEHPK3PXP +- +- +- Confirm Remove TOTP Settings +- Konfirmasi Penghapusan Pengaturan TOTP +- +- +- Are you sure you want to delete TOTP settings for this entry? +- Apakah Anda yakin ingin menghapus pengaturan TOTP untuk entri ini? +- +- +- +- URLEdit +- +- Invalid URL +- URL tidak valid +- +- +- +- UpdateCheckDialog +- +- Checking for updates +- Memeriksa pembaruan +- +- +- Checking for updates... +- Memeriksa pembaruan... +- +- +- Close +- Tutup +- +- +- Update Error! +- Pembaruan Gagal! +- +- +- An error occurred in retrieving update information. +- Terjadi kesalahan saat mengambil informasi pembaruan. +- +- +- Please try again later. +- Silakan coba lagi nanti. +- +- +- Software Update +- Pembaruan Perangkat Lunak +- +- +- A new version of KeePassXC is available! +- Versi baru KeePassXC telah tersedia! +- +- +- KeePassXC %1 is now available — you have %2. +- KeePassXC %1 telah tersedia — yang Anda miliki %2. +- +- +- Download it at keepassxc.org +- Unduh di keepassxc.org +- +- +- You're up-to-date! +- Sudah yang paling baru! +- +- +- KeePassXC %1 is currently the newest version available +- KeePassXC %1 saat ini adalah versi yang paling baru +- +- +- +- WelcomeWidget +- +- Start storing your passwords securely in a KeePassXC database +- Mulai menyimpan sandi Anda dengan aman di dalam basisdata KeePassXC +- +- +- Create new database +- Buat basisdata baru +- +- +- Open existing database +- Buka basisdata yang ada +- +- +- Import from KeePass 1 +- Impor dari KeePass 1 +- +- +- Import from CSV +- Impor dari CSV +- +- +- Recent databases +- Basisdata baru-baru ini +- +- +- Welcome to KeePassXC %1 +- Selamat datang di KeePassXC %1 +- +- +- Import from 1Password +- Impor dari 1Password +- +- +- Open a recent database +- Buka basisdata terbaru +- +- +- +- YubiKey +- +- %1 [%2] Configured Slot - %3 +- +- +- +- %1 [%2] Challenge Response - Slot %3 - %4 +- +- +- +- Press +- Tekan +- +- +- Passive +- Pasif +- +- +- %1 Invalid slot specified - %2 +- +- +- +- The YubiKey interface has not been initialized. +- +- +- +- Hardware key is currently in use. +- +- +- +- Could not find hardware key with serial number %1. Please plug it in to continue. +- +- +- +- Hardware key timed out waiting for user interaction. +- +- +- +- A USB error ocurred when accessing the hardware key: %1 +- +- +- +- Failed to complete a challenge-response, the specific error was: %1 +- +- +- +- +- YubiKeyEditWidget +- +- Refresh +- Segarkan +- +- +- YubiKey Challenge-Response +- YubiKey Challenge-Response +- +- +- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- <p>Jika Anda memiliki <a href="https://www.yubico.com/">YubiKey</a>, Anda dapat menggunakannya sebagai keamanan tambahan.</p><p>YubiKey membutuhkan salah satu slotnya untuk diprogram sebagai <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- +- +- Refresh hardware tokens +- Segarkan token perangkat keras +- +- +- Hardware key slot selection +- Pemilihan slot kunci perangkat keras +- +- +- Could not find any hardware keys! +- +- +- +- Selected hardware key slot does not support challenge-response! +- +- +- +- Detecting hardware keys… +- Mendeteksi kunci perangkat keras… +- +- +- No hardware keys detected +- Tidak mendeteksi kunci perangkat keras +- +- +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_it.ts keepassxc-2.6.4-patched/share/translations/keepassx_it.ts +--- keepassxc-2.6.4-orig/share/translations/keepassx_it.ts 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/translations/keepassx_it.ts 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7895 +0,0 @@ +- +- +- AboutDialog +- +- About KeePassXC +- Informazioni su KeePassXC +- +- +- About +- Informazioni +- +- +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- Segnala eventuali problemi su: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- +- +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- KeePassXC è distribuito sotto i termini della licenza GNU General Public License (GPL) versione 2 o (come opzione) versione 3. +- +- +- Contributors +- Collaboratori +- +- +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors"> vedere i contributi su GitHub</a> +- +- +- Debug Info +- Informazioni di debug +- +- +- Include the following information whenever you report a bug: +- Quando segnali un problema includi le seguenti informazioni: +- +- +- Copy to clipboard +- Copia negli appunti +- +- +- Project Maintainers: +- Responsabili del progetto: +- +- +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- Uno speciale ringraziamento dal team di KeePassXC va a debfx per la creazione del KeePassX originale. +- +- +- +- AgentSettingsWidget +- +- Use OpenSSH for Windows instead of Pageant +- Usa OpenSSH per Windows al posto di Pageant +- +- +- Enable SSH Agent integration +- Abilitare l'integrazione dell'agente SSH +- +- +- SSH_AUTH_SOCK value +- valore SSH_AUTH_SOCK +- +- +- SSH_AUTH_SOCK override +- sostituire SSH_AUTH_SOCK +- +- +- (empty) +- (vuoto) +- +- +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- Nessun collegamento SSH disponibile. Verificare che la variabile d'ambiente SSH_AUTH_SOCK esista oppure sovrascriverne il contenuto. +- +- +- SSH Agent connection is working! +- La connessione dell'agente SSH sta funzionando! +- +- +- +- ApplicationSettingsWidget +- +- Application Settings +- Impostazioni applicazione +- +- +- General +- Generale +- +- +- Security +- Sicurezza +- +- +- Access error for config file %1 +- Errore di accesso per il file di configurazione %1 +- +- +- Icon only +- Solo icone +- +- +- Text only +- Solo icone +- +- +- Text beside icon +- Testo accanto alle icone +- +- +- Text under icon +- Testo sotto le icone +- +- +- Follow style +- Segui stile +- +- +- Reset Settings? +- Ripristinare le impostazioni? +- +- +- Are you sure you want to reset all general and security settings to default? +- Sei sicuro di voler ripristinare tutte le impostazioni generali e di sicurezza predefinite? +- +- +- Monochrome (light) +- Monocromatico (chiaro) +- +- +- Monochrome (dark) +- Monocromatico (scuro) +- +- +- Colorful +- Colorato +- +- +- You must restart the application to set the new language. Would you like to restart now? +- È necessario riavviare l'applicazione per impostare la nuova lingua. Vuoi riavviare ora? +- +- +- +- ApplicationSettingsWidgetGeneral +- +- Basic Settings +- Impostazioni di base +- +- +- Startup +- Avvio +- +- +- Start only a single instance of KeePassXC +- Avvia una sola istanza di KeePassXC +- +- +- Minimize window at application startup +- Minimizza la finestra all'avvio della applicazione +- +- +- File Management +- Gestione dei file +- +- +- Backup database file before saving +- Effettua una copia di sicurezza del database prima di salvarlo +- +- +- Automatically save after every change +- Salva automaticamente dopo ogni modifica +- +- +- Automatically reload the database when modified externally +- Ricarica automaticamente il database quando ci sono modifiche esterne +- +- +- Entry Management +- Gestione dell'elemento +- +- +- Use group icon on entry creation +- Usa icona del gruppo alla creazione di una voce +- +- +- Minimize instead of app exit +- Minimizzare invece di uscire dall'app +- +- +- Show a system tray icon +- Visualizza un'icona nell'area di notifica di sistema +- +- +- Hide window to system tray when minimized +- Nascondi la finestra nell'area di notifica di sistema quando viene minimizzata +- +- +- Auto-Type +- Completamento automatico +- +- +- Use entry title to match windows for global Auto-Type +- Usa il titolo della voce per la corrispondenza con le finestre per il completamento automatico globale +- +- +- Use entry URL to match windows for global Auto-Type +- Usa URL della voce per la corrispondenza con le finestre per il completamento automatico globale +- +- +- Always ask before performing Auto-Type +- Chiedi sempre prima di effettuare il completamento automatico +- +- +- ms +- Milliseconds +- ms +- +- +- Movable toolbar +- Barra degli strumenti spostabile +- +- +- Remember previously used databases +- Ricordare i database usati in precedenza +- +- +- Load previously open databases on startup +- Carica database aperti in precedenza all'avvio +- +- +- Remember database key files and security dongles +- Memorizzare i file di chiave del database e i dongle di sicurezza +- +- +- Check for updates at application startup once per week +- Verificare la disponibilità di aggiornamenti all'avvio dell'applicazione una volta alla settimana +- +- +- Include beta releases when checking for updates +- Includi versioni beta durante il controllo della disponibilità di aggiornamenti +- +- +- Language: +- Lingua: +- +- +- (restart program to activate) +- (riavviare il programma per attivare) +- +- +- Minimize window after unlocking database +- Riduci a icona la finestra dopo lo sblocco del database +- +- +- Minimize when opening a URL +- Riduci a icona all'apertura di un URL +- +- +- Hide window when copying to clipboard +- Nascondi la finestra durante la copia negli Appunti +- +- +- Minimize +- Minimizzare +- +- +- Drop to background +- Rilascia su sfondo +- +- +- Favicon download timeout: +- Timeout scaricamento Favicon: +- +- +- Website icon download timeout in seconds +- Timeout scaricamento icona sito Web in secondi +- +- +- sec +- Seconds +- sec +- +- +- Toolbar button style +- Stile pulsante della barra degli strumenti +- +- +- Language selection +- Selezione della lingua +- +- +- Global auto-type shortcut +- Scorciatoia globale per il completamento automatico +- +- +- Auto-type character typing delay milliseconds +- Ritardo in millisecondi del completamento automatico dei caratteri +- +- +- Auto-type start delay milliseconds +- Ritardo di avvio in millisecondi dell completamento automatico +- +- +- Automatically launch KeePassXC at system startup +- Avvia automaticamente KeePassXC all'avvio del sistema +- +- +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- Salva in modo sicuro i file di database (disabilita se riscontra problemi con Dropbox, ecc.) +- +- +- User Interface +- Interfaccia utente +- +- +- Toolbar button style: +- Stile pulsanti della barra degli strumenti: +- +- +- Use monospaced font for notes +- Utilizzare un tipo di carattere monospazio per le note +- +- +- Tray icon type: +- Tipo di icona vassoio: +- +- +- Reset settings to default… +- Ripristina impostazioni predefinite... +- +- +- Auto-Type typing delay: +- Ritardo del completamento automatico: +- +- +- Global Auto-Type shortcut: +- Scorciatoia globale per l'auto-completamento +- +- +- Auto-Type start delay: +- Ritardo avvio auto-completamento: +- +- +- Automatically save when locking database +- Salva automaticamente durante il blocco del database +- +- +- Automatically save non-data changes when locking database +- Salva automaticamente le modifiche non apportate ai dati durante il blocco del database +- +- +- Tray icon type +- Tipo di icona vassoio +- +- +- +- ApplicationSettingsWidgetSecurity +- +- Timeouts +- Timeout +- +- +- Clear clipboard after +- Svuota gli appunti dopo +- +- +- sec +- Seconds +- sec +- +- +- Lock databases after inactivity of +- Blocca i database dopo un'inattività di +- +- +- min +- min +- +- +- Forget TouchID after inactivity of +- Dimentica TouchID dopo inattività di +- +- +- Convenience +- Comodità +- +- +- Lock databases when session is locked or lid is closed +- Blocca i database quando la sessione è bloccata o il coperchio è chiuso +- +- +- Forget TouchID when session is locked or lid is closed +- Dimentica TouchID quando la sessione è bloccata o il coperchio è chiuso +- +- +- Lock databases after minimizing the window +- Blocca il database dopo la minimizzazione della finestra +- +- +- Re-lock previously locked database after performing Auto-Type +- Blocca nuovamente un database precedentemente bloccato dopo aver completato l'Auto-Type +- +- +- Hide passwords in the entry preview panel +- Nascondi la password nel pannello di anteprima della voce +- +- +- Hide entry notes by default +- Nascondi le note della voce per impostazione predefinita +- +- +- Privacy +- Riservatezza +- +- +- Use DuckDuckGo service to download website icons +- Utilizzare il servizio DuckDuckGo per scaricare le icone del sito web +- +- +- Clipboard clear seconds +- Secondi per la cancellazione degli appunti +- +- +- Touch ID inactivity reset +- Ripristino per inattività del Touch ID +- +- +- Database lock timeout seconds +- Secondi di timeout per il blocco del database +- +- +- min +- Minutes +- min +- +- +- Clear search query after +- Cancella query di ricerca dopo +- +- +- Require password repeat when it is visible +- Richiedi ripetizione password quando è visibile +- +- +- Hide passwords when editing them +- Nascondi la password quando viene modificata +- +- +- Use placeholder for empty password fields +- Usa segnaposti per campi password vuoti +- +- +- +- AutoType +- +- Couldn't find an entry that matches the window title: +- Impossibile trovare una voce che corrisponda al titolo della finestra: +- +- +- Auto-Type - KeePassXC +- KeePassXC - Completamento automatico +- +- +- Auto-Type +- Completamento automatico +- +- +- The Syntax of your Auto-Type statement is incorrect! +- La sintassi del tuo comando di auto-completamento non è corretta! +- +- +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- Questo comando di auto-completamento contiene un ritardo molto lungo. Si desidera veramente procedere? +- +- +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- Questo comando di auto-completamento contiene pressioni dei tasti molto lente. Si desidera veramente procedere? +- +- +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- Questo comando di auto-completamento contiene argomenti che molto spesso si ripetono. Si desidera veramente procedere? +- +- +- Permission Required +- Permesso richiesto +- +- +- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC richiede il permesso di Accessibilità per effettuare l'auto-completamento di livello base. Se hai già concesso il permesso, riavvia KeePassXC. +- +- +- +- AutoTypeAssociationsModel +- +- Window +- Finestra +- +- +- Sequence +- Sequenza +- +- +- Default sequence +- Sequenza predefinita +- +- +- +- AutoTypeMatchModel +- +- Group +- Gruppo +- +- +- Title +- Titolo +- +- +- Username +- Nome utente +- +- +- Sequence +- Sequenza +- +- +- +- AutoTypeMatchView +- +- Copy &username +- Copia &nome utente +- +- +- Copy &password +- Copia &password +- +- +- +- AutoTypePlatformMac +- +- Permission Required +- Permesso richiesto +- +- +- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. +- KeePasssXC richiede il permesso di Accessibilità e di Registrazione Schermo per effettuare l'auto-completamento globale. La registrazione dello schermo è necessaria per usare il titolo della finestra al fine di trovare le voci corrispondenti. Se hai già concesso il permesso, riavvia KeePassXC. +- +- +- +- AutoTypeSelectDialog +- +- Auto-Type - KeePassXC +- KeePassXC - Completamento automatico +- +- +- Select entry to Auto-Type: +- Seleziona una voce per il completamento automatico: +- +- +- Search... +- Ricerca... +- +- +- +- BrowserAccessControlDialog +- +- KeePassXC - Browser Access Request +- KeePassXC - Browser accesso richiesto +- +- +- %1 is requesting access to the following entries: +- %1 sta chiedendo l'accesso alle seguenti voci: +- +- +- Remember access to checked entries +- Ricorda le impostazioni di accesso per le voci selezionate +- +- +- Remember +- Ricorda +- +- +- Allow access to entries +- Permetti di accedere alle voci +- +- +- Allow Selected +- Consenti selezionati +- +- +- Deny All +- Nega tutto +- +- +- Disable for this site +- Disabilita per questo sito +- +- +- +- BrowserEntrySaveDialog +- +- KeePassXC-Browser Save Entry +- Voce di salvataggio del browser KeePassXC +- +- +- Ok +- Ok +- +- +- Cancel +- Annulla +- +- +- You have multiple databases open. +-Please select the correct database for saving credentials. +- C'è più di un database aperto +-Selezionare il database corretto dove salvare le credenziali +- +- +- +- BrowserService +- +- KeePassXC: New key association request +- KeePassXC: nuova richiesta di associazione chiave +- +- +- Save and allow access +- Salva e permetti l'accesso +- +- +- KeePassXC: Overwrite existing key? +- KeePassXC: Vuoi sovrascrivere la chiave esistente? +- +- +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- Esiste già una chiave crittografica condivisa con il nome "%1"- Vuoi sovrascriverla? +- +- +- KeePassXC: Update Entry +- KeePassXC: aggiorna voce +- +- +- Do you want to update the information in %1 - %2? +- Vuoi aggiornare le informazioni in %1 - %2? +- +- +- Abort +- Interrompi +- +- +- Converting attributes to custom data… +- Conversione di attributi in dati personalizzati in corso... +- +- +- KeePassXC: Converted KeePassHTTP attributes +- KeePassXC: attributi KeePassHTTP convertiti +- +- +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- Attributi convertiti correttamente da %1 voce(i). +-Sono stati spostati %2 chiavi nei dati personalizzati. +- +- +- Successfully moved %n keys to custom data. +- Sono stati spostati %n chiavi in dati personalizzati.Sono state spostate %n chiavi in dati personalizzati. +- +- +- KeePassXC: No entry with KeePassHTTP attributes found! +- KeePassXC: Nessuna voce trovata con gli attributi KeePassHTTP! +- +- +- The active database does not contain an entry with KeePassHTTP attributes. +- Il database attivo non contiene una voce con attributi KeePassHTTP. +- +- +- KeePassXC: Legacy browser integration settings detected +- KeePassXC: rilevate le impostazioni di integrazione del browser legacy +- +- +- KeePassXC: Create a new group +- KeePassXC: Creare un nuovo gruppo +- +- +- A request for creating a new group "%1" has been received. +-Do you want to create this group? +- +- È stata ricevuta una richiesta di creazione di un nuovo gruppo "%1". +-Si desidera creare questo gruppo? +- +- +- +- Your KeePassXC-Browser settings need to be moved into the database settings. +-This is necessary to maintain your current browser connections. +-Would you like to migrate your existing settings now? +- Le impostazioni di KeePassXC-Browser devono essere spostate nelle impostazioni del database. +-Ciò è necessario per mantenere le connessioni del browser corrente. +-Si desidera eseguire ora la migrazione delle impostazioni esistenti? +- +- +- Don't show this warning again +- Non mostrare nuovamente questo avviso +- +- +- You have received an association request for the following database: +-%1 +- +-Give the connection a unique name or ID, for example: +-chrome-laptop. +- Hai ricevuto una richiesta di associazione per il segguente database: +-%1 +- +-Assegnagli un nome univoco o un ID, per esempio: +-laptop-chrome +- +- +- +- BrowserSettingsWidget +- +- Dialog +- Finestra +- +- +- This is required for accessing your databases with KeePassXC-Browser +- Questo è necessario per accedere al tuo database con KeePassXC-Browser +- +- +- Enable browser integration +- Abilitare l'integrazione del browser +- +- +- General +- Generale +- +- +- Browsers installed as snaps are currently not supported. +- I browser installati come snap non sono attualmente supportati. +- +- +- Enable integration for these browsers: +- Abilita l'integrazione per i seguenti browser: +- +- +- Vivaldi +- Vivaldi +- +- +- &Edge +- &Edge +- +- +- Firefox +- Firefox +- +- +- Tor Browser +- Tor Browser +- +- +- Brave +- Brave +- +- +- Google Chrome +- Google Chrome +- +- +- Chromium +- Chromium +- +- +- Show a notification when credentials are requested +- Credentials mean login data requested via browser extension +- Mostra una notifica quando le credenziali sono richieste +- +- +- Request to unlock the database if it is locked +- Richiedi di sbloccare il database se è bloccato +- +- +- Only entries with the same scheme (http://, https://, ...) are returned. +- Vengono restituiti solo voci con lo stesso schema (http://, https://, ...) +- +- +- Match URL scheme (e.g., https://...) +- Schema di corrispondenza URL (ad esempio, https://...) +- +- +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- Restituisci solo le corrispondenze migliori per un'URL specifica invece di tutte le voci per l'intero dominio. +- +- +- Return only best-matching credentials +- Restituisci solo le credenziali che corrispondono maggiormente +- +- +- Returns expired credentials. String [expired] is added to the title. +- Restituisce le credenziali scadute. La stringa [scaduto] viene aggiunta al titolo. +- +- +- Allow returning expired credentials +- Restituisci le credenziali scadute +- +- +- All databases connected to the extension will return matching credentials. +- Tutti i database connessi all'estensione restituiranno le credenziali corrispondenti. +- +- +- Search in all opened databases for matching credentials +- Credentials mean login data requested via browser extension +- Cerca le credenziali corrispondenti in tutti i database aperti +- +- +- Sort matching credentials by title +- Credentials mean login data requested via browser extension +- Ordina le credenziali corrispondenti per titolo +- +- +- Sort matching credentials by username +- Credentials mean login data requested via browser extension +- Ordina le credenziali corrispondenti per nome utente +- +- +- Advanced +- Avanzate +- +- +- Never ask before accessing credentials +- Credentials mean login data requested via browser extension +- Non chiedere conferma prima di accedere alle credenziali +- +- +- Never ask before updating credentials +- Credentials mean login data requested via browser extension +- Non chiedere conferma prima di aggiornare le credenziali +- +- +- Do not ask permission for HTTP Basic Auth +- An extra HTTP Basic Auth setting +- Non chiedere l'autorizzazione per l'autenticazione HTTP e basic +- +- +- Automatically creating or updating string fields is not supported. +- La creazione o l'aggiornamento automatico dei campi stringa non è supportato. +- +- +- Return advanced string fields which start with "KPH: " +- Restituisci campi di stringa avanzati che iniziano per "KPH:" +- +- +- Don't display the popup suggesting migration of legacy KeePassHTTP settings. +- Non visualizzare il popup che suggerisce la migrazione delle impostazioni KeePassHTTP legacy. +- +- +- Do not prompt for KeePassHTTP settings migration. +- Non richiedere la migrazione delle impostazioni KeePassHTTP. +- +- +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- Aggiorna automaticamente all'avvio il percorso dei binari di KeePassXC o keepassxc-proxy per gli script di messaggistica nativa +- +- +- Update native messaging manifest files at startup +- Aggiorna all'avvio il manifesto della messaggeria nativa +- +- +- Use a custom proxy location if you installed a proxy manually. +- Usa un indirizzo proxy personalizzato se hai installato manualmente un proxy +- +- +- Use a custom proxy location: +- Meant is the proxy for KeePassXC-Browser +- Utilizza un proxy personalizzato +- +- +- Custom proxy location field +- Campo percorso proxy personalizzato +- +- +- Browser for custom proxy file +- Browser per file proxy personalizzato +- +- +- Browse... +- Button for opening file dialog +- Sfoglia... +- +- +- Use a custom browser configuration location: +- Usare un percorso personalizzato per la configurazione del browser: +- +- +- Browser type: +- Tipologia di browser: +- +- +- Toolbar button style +- Stile pulsante della barra degli strumenti +- +- +- Config Location: +- Percorso di configurazione: +- +- +- Custom browser location field +- Campo percorso browser personalizzato +- +- +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- +- +- Browse for custom browser path +- Cerca un percorso personalizzato per il browser +- +- +- Custom extension ID: +- ID estensione personalizzata: +- +- +- Custom extension ID +- ID estensione personalizzata +- +- +- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 +- A causa del sandboxing di Snap, è necessario eseguire uno script per abilitare l'integrazione del browser. <br />È possibile ottenere questo script da %1 +- +- +- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 +- KeePassXC-Browser è necessario per far funzionare l'integrazione del browser. <br />Scaricarlo per %1, %2 e %3. %4 +- +- +- Please see special instructions for browser extension use below +- Si prega di consultare le istruzioni speciali per l'uso dell'estensione del browser di seguito +- +- +- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. +- <b>Errore:</b> Il percorso personalizzato per il proxy non può essere trovato!<br/>L'estensione del browser NON PUO' LAVORARE senza l'utilizzo di un proxy. +- +- +- <b>Warning:</b> The following options can be dangerous! +- <b>Avviso:</b> le seguenti opzioni possono essere pericolose. +- +- +- Executable Files +- File eseguibili +- +- +- All Files +- Tutti i file +- +- +- Select custom proxy location +- Selezionare una posizione personalizzata per il proxy +- +- +- Select native messaging host folder location +- Selezionare il percorso per la cartella principale della messaggistica +- +- +- +- CloneDialog +- +- Clone Options +- Opzioni clonazione +- +- +- Append ' - Clone' to title +- Aggiungi ' - Clone' al titolo +- +- +- Replace username and password with references +- Sostituisci nome utente e password con riferimenti +- +- +- Copy history +- Copia cronologia +- +- +- +- CsvImportWidget +- +- Import CSV fields +- Importa campi CSV +- +- +- filename +- nomefile +- +- +- size, rows, columns +- dimensione, righe, colonne +- +- +- Encoding +- Codifica +- +- +- Codec +- Codec +- +- +- Text is qualified by +- Il testo è qualificato da +- +- +- Fields are separated by +- I campi sono separati da +- +- +- Comments start with +- I commenti iniziano con +- +- +- Consider '\' an escape character +- Considera '\' un carattere escape +- +- +- Preview +- Anteprima +- +- +- Imported from CSV file +- Importati da file CSV +- +- +- Original data: +- Dati originali: +- +- +- Error +- Errore +- +- +- Error(s) detected in CSV file! +- Errore(i) rilevati nel file CSV! +- +- +- [%n more message(s) skipped] +- [%n altro messaggio saltato][altri %n messaggi saltati] +- +- +- CSV import: writer has errors: +-%1 +- Importazione CSV: lo scrittore ha errori: +-%1 +- +- +- Text qualification +- Qualifica del testo +- +- +- Field separation +- Separazione dei campi +- +- +- Number of header lines to discard +- Numero di righe di intestazione da eliminare +- +- +- CSV import preview +- Anteprima importazione CSV +- +- +- Column Association +- Associazione colonne +- +- +- Last Modified +- Ultima modifica +- +- +- Password +- Password +- +- +- Created +- Creazione +- +- +- Notes +- Note +- +- +- Title +- Titolo +- +- +- Group +- Gruppo +- +- +- URL +- URL +- +- +- Username +- Nome utente +- +- +- Header lines skipped +- Righe di intestazione ignorate +- +- +- First line has field names +- La prima riga ha nomi di campo +- +- +- Not Present +- Non presente +- +- +- Column %1 +- Colonna %1 +- +- +- TOTP +- TOTP +- +- +- Icon +- Icona +- +- +- +- CsvParserModel +- +- %n column(s) +- %n colonna%n colonne +- +- +- %1, %2, %3 +- file info: bytes, rows, columns +- %1, %2, %3 +- +- +- %n byte(s) +- %n byte (s)%n byte(s) +- +- +- %n row(s) +- righe: %n%n riga(e) +- +- +- +- Database +- +- File %1 does not exist. +- File %1 non esiste. +- +- +- Unable to open file %1. +- Impossibile aprire il file %1. +- +- +- Error while reading the database: %1 +- Errore durante la lettura del database: %1 +- +- +- File cannot be written as it is opened in read-only mode. +- Il file non può essere scritto perché aperto in modalità di sola lettura. +- +- +- Key not transformed. This is a bug, please report it to the developers! +- Chiave non trasformata. Questo è un bug, si prega di segnalarlo agli sviluppatori! +- +- +- %1 +-Backup database located at %2 +- %1 +-Database di backup che si trova in %2 +- +- +- Could not save, database does not point to a valid file. +- Impossibile salvare, il database non punta a un file valido. +- +- +- Could not save, database file is read-only. +- Impossibile salvare, il file di database è di sola lettura. +- +- +- Database file has unmerged changes. +- Il file di database ha apportato modifiche non unite. +- +- +- Recycle Bin +- Cestino +- +- +- Passwords +- Root group name +- Password +- +- +- Database save is already in progress. +- Salvataggio del database già avviato +- +- +- Could not save, database has not been initialized! +- Impossibile salvare, il database non è stato inizializzato! +- +- +- +- DatabaseOpenDialog +- +- Unlock Database - KeePassXC +- Sbloccare Database - KeePassXC +- +- +- +- DatabaseOpenWidget +- +- Key File: +- File chiave: +- +- +- Refresh +- Aggiorna +- +- +- Don't show this warning again +- Non mostrare nuovamente questo avviso +- +- +- All files +- Tutti i file +- +- +- Key files +- File chiave +- +- +- Select key file +- Seleziona file chiave +- +- +- Failed to open key file: %1 +- Impossibile aprire il file di chiave: %1 +- +- +- Unlock KeePassXC Database +- Sblocca il database KeePassXC +- +- +- Enter Password: +- Inserisci password: +- +- +- Password field +- Campo password +- +- +- Hardware key slot selection +- Selezione degli slot dei tasti hardware +- +- +- Browse for key file +- Cercare il file chiave +- +- +- Browse... +- Sfoglia... +- +- +- Refresh hardware tokens +- Aggiornare i token hardware +- +- +- Hardware Key: +- Chiave hardware: +- +- +- Hardware key help +- Guida alla chiave hardware +- +- +- TouchID for Quick Unlock +- TouchID per lo sblocco rapido +- +- +- Unlock failed and no password given +- Sblocco non riuscito e nessuna password specificata +- +- +- Unlocking the database failed and you did not enter a password. +-Do you want to retry with an "empty" password instead? +- +-To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. +- Sblocco del database non riuscito e non è stata immessa una password. +-Si desidera riprovare con una password "vuota"? +- +-Per evitare che questo errore venga visualizzato, è necessario andare alle "Impostazioni database / Sicurezza" e reimpostare la password. +- +- +- Retry with empty password +- Riprova con password vuota +- +- +- Enter Additional Credentials (if any): +- Inserisci credenziali aggiuntive (se presenti): +- +- +- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +-<p>Click for more information...</p> +- <p>Puoi usare una chiave di sicurezza hardware come una <strong>YubiKey</strong> o una <strong>OnlyKey</strong> con gli slot configurati per HMAC-SHA1. +-<p>Clicca per ulteriori informazioni...</p> +- +- +- Key file help +- Aiuto relativo al file chiave +- +- +- ? +- ? +- +- +- Cannot use database file as key file +- Impossibile usare il file database come file chiave +- +- +- You cannot use your database file as a key file. +-If you do not have a key file, please leave the field empty. +- Non puoi usare il tuo file database come file chiave. +-Se non possiedi un file chiave, lascia vuoto questo campo. +- +- +- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> +- <p>Oltre a una password, è possibile utilizzare un file segreto per migliorare la sicurezza del database. Questo file può essere generato nelle impostazioni di sicurezza del database.</p><p>Questo <strong>non</strong> è il tuo file *.kdbx!<br>Se non si dispone di un file chiave, lasciare vuoto questo campo.</p><p>Clicca per maggiori informazioni...</p> +- +- +- Key file to unlock the database +- File chiave per sbloccare il database +- +- +- Please touch the button on your YubiKey! +- Premi il pulsante della YubiKey! +- +- +- Detecting hardware keys… +- Rilevamento delle chiavi hardware in corso... +- +- +- No hardware keys detected +- Nessuna chiave hardware rilevata +- +- +- Select hardware key… +- Seleziona chiave hardware... +- +- +- Old key file format +- Vecchio formato di file chiave +- +- +- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> +- Stai utilizzando un vecchio formato di file chiave che KeePassXC può<br>smettere di supportare in futuro.<br><br>Prendere in considerazione la possibilità di generare un nuovo file di chiave andando a:<br><strong>Database / Sicurezza database / Cambiare file chiave.</strong><br> +- +- +- +- DatabaseSettingWidgetMetaData +- +- Passwords +- Password +- +- +- +- DatabaseSettingsDialog +- +- Advanced Settings +- Impostazioni avanzate +- +- +- General +- Generale +- +- +- Security +- Sicurezza +- +- +- Encryption Settings +- Impostazioni di crittografia +- +- +- Browser Integration +- Integrazione con i browser +- +- +- Database Credentials +- Credenziali database +- +- +- +- DatabaseSettingsWidgetBrowser +- +- KeePassXC-Browser settings +- Impostazioni di KeePassXC-Browser +- +- +- Stored keys +- Chiavi memorizzate +- +- +- Remove +- Rimuovi +- +- +- Delete the selected key? +- Eliminare la chiave selezionata? +- +- +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- Vuoi davvero eliminare la chiave selezionata? +-Ciò potrebbe impedire la connessione al plug-in del browser. +- +- +- Key +- Chiave +- +- +- Value +- Valore +- +- +- Enable Browser Integration to access these settings. +- Abilita l'integrazione con i browser per accedere a queste impostazioni. +- +- +- Disconnect all browsers +- Scollega tutti i browser +- +- +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- Vuoi davvero scollegare tutti i browser? +-Ciò potrebbe impedire la connessione al plug-in del browser. +- +- +- KeePassXC: No keys found +- KeePassXC: nessuna chiave trovata +- +- +- No shared encryption keys found in KeePassXC settings. +- Nessuna chiave di crittografia condivisa trovata nelle impostazioni KeePassXC. +- +- +- KeePassXC: Removed keys from database +- KeePassXC: chiavi rimosse dal database +- +- +- Successfully removed %n encryption key(s) from KeePassXC settings. +- Rimossa con successo %n chiave di cifratura dalle impostazioni di KeePassXC. Rimosse con successo %n chiavi di cifratura dalle impostazioni di KeePassXC. +- +- +- Forget all site-specific settings on entries +- Dimenticare tutte le impostazioni specifiche del sito nelle voci +- +- +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- Vuoi davvero dimenticare tutte le impostazioni specifiche del sito su ogni voce? +-Le autorizzazioni per accedere alle voci verranno revocate. +- +- +- Removing stored permissions… +- Rimozione dei permessi salvati... +- +- +- Abort +- Interrompi +- +- +- KeePassXC: Removed permissions +- KeePassXC: permessi rimossi +- +- +- Successfully removed permissions from %n entry(s). +- Permessi rimossi con successo da %n voce.Permessi rimossi con successo da %n voci. +- +- +- KeePassXC: No entry with permissions found! +- KeePassXC: nessuna voce con permessi trovata! +- +- +- The active database does not contain an entry with permissions. +- Il database attivo non contiene una voce con permessi. +- +- +- Move KeePassHTTP attributes to custom data +- Spostare gli attributi KeePassHTTP in dati personalizzati +- +- +- Do you really want to move all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- Vuoi davvero spostare tutti i dati di integrazione del browser legacy allo standard più recente? +-Questo è necessario per mantenere la compatibilità con il plugin del browser. +- +- +- Stored browser keys +- Chiavi del browser archiviate +- +- +- Remove selected key +- Rimuovere la chiave selezionata +- +- +- Move KeePassHTTP attributes to KeePassXC-Browser custom data +- Spostare gli attributi KeePassHTTP ai dati personalizzati di KeePassXC-Browser +- +- +- Refresh database root group ID +- Aggiornare l'ID gruppo radice del database +- +- +- Created +- Creazione +- +- +- Refresh database ID +- Aggiorna ID database +- +- +- Do you really want refresh the database ID? +-This is only necessary if your database is a copy of another and the browser extension cannot connect. +- Si vuole davvero aggiornare l'ID del database? +-Questo è necessario solo se il database è una copia e l'estensione del browser non riesce a connettersi. +- +- +- +- DatabaseSettingsWidgetDatabaseKey +- +- Add additional protection... +- Aggiungere ulteriore protezione... +- +- +- No password set +- Nessuna password impostata +- +- +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- ATTENZIONE! Non è stata impostata una password. Utilizzare un database senza password è fortemente sconsigliato! +- +-Siete sicuri di voler continuare senza password? +- +- +- Continue without password +- Continua senza password +- +- +- No encryption key added +- Nessuna chiave di crittografia aggiunta +- +- +- You must add at least one encryption key to secure your database! +- Bisogna aggiungere almeno un'altra chiave di cifratura per rendere sicuro il database. +- +- +- Unknown error +- Errore sconosciuto +- +- +- Failed to change database credentials +- Impossibile modificare le credenziali del database +- +- +- +- DatabaseSettingsWidgetEncryption +- +- Encryption Algorithm: +- Algoritmo di cifratura: +- +- +- AES: 256 Bit (default) +- AES: 256 Bit (impostazione predefinita) +- +- +- Twofish: 256 Bit +- Twofish: 256 Bit +- +- +- Key Derivation Function: +- Funzione di derivazione di chiave: +- +- +- Transform rounds: +- Arrotondamenti trasformazione: +- +- +- Memory Usage: +- Uso della memoria: +- +- +- Parallelism: +- Parallelismo: +- +- +- Decryption Time: +- Tempo di de-crittografia: +- +- +- ?? s +- ?? s +- +- +- Change +- Modifica +- +- +- Higher values offer more protection, but opening the database will take longer. +- I valori più elevati offrono una maggiore protezione, ma l'apertura del database richiederà più tempo. +- +- +- Database format: +- Formato di database: +- +- +- This is only important if you need to use your database with other programs. +- Questo è importante solo se si vuole usare il database con altri programmi. +- +- +- KDBX 4.0 (recommended) +- KDBX 4.0 (raccomandato) +- +- +- KDBX 3.1 +- KDBX 3.1 +- +- +- unchanged +- Database decryption time is unchanged +- invariato +- +- +- Number of rounds too high +- Key transformation rounds +- Numero di giri troppo elevato +- +- +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or days (or even longer) to open! +- Stai utilizzando un numero molto elevato di fasi di trasformazione della chiave con Argon 2 +- +-Se continui con questo numero, il tuo database si potrebbe aprire in ore o giorni (o anche più a lungo) +- +- +- Understood, keep number +- D'accordo, mantieni il valore +- +- +- Cancel +- Annulla +- +- +- Number of rounds too low +- Key transformation rounds +- Numero di giri troppo basso +- +- +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database may be too easy to crack! +- Stai utilizzando un numero molto basso di fasi di trasformazione della chiave con AES-KDF +- +-Se continui con questo numero, il tuo database potrebbe essere decifrato molto facilmente +- +- +- KDF unchanged +- KDF invariato +- +- +- Failed to transform key with new KDF parameters; KDF unchanged. +- La trasformazione della chiave con i nuovi parametri KDF e' fallita; KDF immutato +- +- +- MiB +- Abbreviation for Mebibytes (KDF settings) +- MiB MiB +- +- +- thread(s) +- Threads for parallel execution (KDF settings) +- iscritto (i)thread(s) +- +- +- Change existing decryption time +- Modificare il tempo di decrittografia esistente +- +- +- Decryption time in seconds +- Tempo di decrittografia in secondi +- +- +- Database format +- Formato del database +- +- +- Encryption algorithm +- Algoritmo di crittografia +- +- +- Key derivation function +- Funzione di derivazione della chiave +- +- +- Transform rounds +- Giri di trasformazione +- +- +- Memory usage +- Utilizzo della memoria +- +- +- Parallelism +- Parallelismo +- +- +- ?? ms +- ?? ms +- +- +- ? s +- ? s +- +- +- +- DatabaseSettingsWidgetFdoSecrets +- +- Exposed Entries +- Voci esposte +- +- +- Don't expose this database +- Non esporre questo database +- +- +- Expose entries under this group: +- Esporre le voci in questo gruppo: +- +- +- Enable Secret Service to access these settings. +- Consentire ai Servizi Segreti di accedere a queste impostazioni. +- +- +- +- DatabaseSettingsWidgetGeneral +- +- Database Meta Data +- Metadati del database +- +- +- Database name: +- Nome database: +- +- +- Database description: +- Descrizione database: +- +- +- Default username: +- Nome utente predefinito: +- +- +- History Settings +- Impostazioni cronologia +- +- +- Max. history items: +- Oggetti max. nella cronologia: +- +- +- Max. history size: +- Grandezza max. cronologia: +- +- +- MiB +- MB +- +- +- Use recycle bin +- Usa il cestino +- +- +- Additional Database Settings +- Ulteriori impostazioni del database +- +- +- Database name field +- Campo nome database +- +- +- Database description field +- Campo descrizione database +- +- +- Default username field +- Campo nome utente predefinito +- +- +- Maximum number of history items per entry +- Numero massimo di elementi della cronologia per voce +- +- +- Maximum size of history per entry +- Dimensione massima della cronologia per voce +- +- +- Delete Recycle Bin +- Elimina Cestino +- +- +- Do you want to delete the current recycle bin and all its contents? +-This action is not reversible. +- Vuoi eliminare il cestino corrente e tutto il suo contenuto? +-Questa azione non è reversibile. +- +- +- (old) +- (vecchio) +- +- +- Enable compression (recommended) +- Abilita compressione (consigliato) +- +- +- +- DatabaseSettingsWidgetKeeShare +- +- Sharing +- Condivisione +- +- +- Breadcrumb +- Percorso di navigazione +- +- +- Type +- Tipo +- +- +- Path +- Percorso +- +- +- Last Signer +- Ultimo firmatario +- +- +- Certificates +- Certificati +- +- +- > +- Breadcrumb separator +- > +- +- +- +- DatabaseSettingsWidgetMetaDataSimple +- +- Database Name: +- Nome del database: +- +- +- Description: +- Descrizione: +- +- +- Database name field +- Campo nome database +- +- +- Database description field +- Campo descrizione database +- +- +- +- DatabaseTabWidget +- +- KeePass 2 Database +- Database KeePass 2 +- +- +- All files +- Tutti i file +- +- +- Open database +- Apri database +- +- +- CSV file +- File CSV +- +- +- Merge database +- Unisci database +- +- +- Open KeePass 1 database +- Apri database KeePass 1 +- +- +- KeePass 1 database +- Database KeePass 1 +- +- +- Export database to CSV file +- Esporta database come file CSV +- +- +- Writing the CSV file failed. +- Scrittura file CSV non riuscita. +- +- +- Database creation error +- Errore di creazione del database +- +- +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- Il database creato non ha chiave o KDF, rifiutando di salvarlo. +-Questo è sicuramente un bug, si prega di segnalarlo agli sviluppatori. +- +- +- Select CSV file +- Selezionare il file CSV +- +- +- New Database +- Nuovo Database +- +- +- %1 [New Database] +- Database tab name modifier +- %1 [nuovo database] +- +- +- %1 [Locked] +- Database tab name modifier +- %1 [bloccato] +- +- +- %1 [Read-only] +- Database tab name modifier +- %1 [sola lettura] +- +- +- Failed to open %1. It either does not exist or is not accessible. +- Impossibile aprire %1. Non esiste o non è accessibile. +- +- +- Export database to HTML file +- Esportare il database in un file HTML +- +- +- HTML file +- File HTML +- +- +- Writing the HTML file failed. +- Scrittura del file HTML non riuscita. +- +- +- Export Confirmation +- Conferma esportazione +- +- +- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? +- Si sta per esportare il database in un file non crittografato. Questo lascerà le password e le informazioni sensibili vulnerabili! Sei sicuro di voler continuare? +- +- +- Open OPVault +- Apri OPVault +- +- +- +- DatabaseWidget +- +- Searching... +- Ricerca... +- +- +- Do you really want to delete the entry "%1" for good? +- Vuoi veramente eliminare la voce "%1"? +- +- +- Do you really want to move entry "%1" to the recycle bin? +- Vuoi davvero cestinare la voce "%1"? +- +- +- Do you really want to move %n entry(s) to the recycle bin? +- Vuoi veramente cestinare %n voce?Vuoi veramente cestinare %n voci? +- +- +- Execute command? +- Vuoi eseguire il comando? +- +- +- Do you really want to execute the following command?<br><br>%1<br> +- Sei sicuro di voler eseguire il seguente comando?<br><br>%1<br> +- +- +- Remember my choice +- Ricorda la mia scelta +- +- +- Do you really want to delete the group "%1" for good? +- Vuoi veramente eliminare il gruppo "%1"? +- +- +- No current database. +- Nessun database attuale. +- +- +- No source database, nothing to do. +- Nessun database sorgente. Nessuna operazione da fare. +- +- +- Search Results (%1) +- Risultati ricerca (%1) +- +- +- No Results +- Nessun risultato +- +- +- File has changed +- Il file è stato modificato +- +- +- The database file has changed. Do you want to load the changes? +- Il file del database è stato modificato. Vuoi caricare le modifiche? +- +- +- Merge Request +- Richiesta di unione +- +- +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- Il file del database e' stato cambiato e ci sono cambiamenti non salvati +-Vuoi fondere i cambiamenti? +- +- +- Empty recycle bin? +- Svuotare il cestino? +- +- +- Are you sure you want to permanently delete everything from your recycle bin? +- Sei sicuro di voler eliminare definitivamente tutto dal cestino? +- +- +- Do you really want to delete %n entry(s) for good? +- Vuoi davvero eliminare %n voci per sempre?Vuoi davvero eliminare %n voce(i) per sempre? +- +- +- Delete entry(s)? +- Elimina ha?Cancellare la voce(i)? +- +- +- Move entry(s) to recycle bin? +- Spostare la creazione nel cestino?Spostare la voce(i) nel cestino? +- +- +- Lock Database? +- Bloccare il database? +- +- +- You are editing an entry. Discard changes and lock anyway? +- Si sta modificando una voce. Eliminare le modifiche e bloccare comunque? +- +- +- "%1" was modified. +-Save changes? +- "%1" è stata modificato. +-Vuoi salvare le modifiche? +- +- +- Database was modified. +-Save changes? +- Il database è stato modificato. +-Salvare le modifiche? +- +- +- Save changes? +- Salvare le modifiche? +- +- +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- Impossibile aprire il nuovo file di database durante il tentativo di ricaricamento. +-Errore: %1 +- +- +- Disable safe saves? +- Disabilita i salvataggi sicuri? +- +- +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- Nonostante ripetuti tentativi, KeePassXC non è riuscito a salvare il database. Probabilmente la causa risiede in un file di lock bloccato da qualche servizio di sincronizzazione file. +-Disabilitare i salvataggi sicuri e riprovare? +- +- +- Passwords +- Password +- +- +- Save database as +- Salva database come +- +- +- KeePass 2 Database +- Database KeePass 2 +- +- +- Replace references to entry? +- Sostituire i riferimenti alla voce? +- +- +- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? +- La voce "%1" ha %2 riferimento/i. Sovrascrivere i riferimenti con i valori, ignorare questa voce o eliminare comunque?La voce "%1" ha %2 riferimento/i. Sovrascrivere i riferimenti con i valori, ignorare questa voce o eliminare comunque? +- +- +- Delete group +- Elimina gruppo +- +- +- Move group to recycle bin? +- Cestinare il gruppo? +- +- +- Do you really want to move the group "%1" to the recycle bin? +- Vuoi davvero cestinare il gruppo "%1"? +- +- +- Successfully merged the database files. +- I file di database sono uniti correttamente. +- +- +- Database was not modified by merge operation. +- Il database non è stato modificato dall'operazione di unione. +- +- +- Shared group... +- Gruppo condiviso... +- +- +- Writing the database failed: %1 +- Scrittura del database non riuscita: %1 +- +- +- This database is opened in read-only mode. Autosave is disabled. +- Questo database viene aperto in modalità di sola lettura. Il salvataggio automatico è disabilitato. +- +- +- Save database backup +- Salva il backup del database +- +- +- Could not find database file: %1 +- Impossibile trovare il file di database: %1 +- +- +- +- EditEntryWidget +- +- Entry +- Voce +- +- +- Advanced +- Avanzate +- +- +- Icon +- Icona +- +- +- Auto-Type +- Completamento automatico +- +- +- Properties +- Proprietà +- +- +- History +- Cronologia +- +- +- SSH Agent +- Agente SSH +- +- +- n/a +- n/a +- +- +- (encrypted) +- (cifrato) +- +- +- Select private key +- Seleziona chiave privata +- +- +- Entry history +- Cronologia voce +- +- +- Add entry +- Aggiungi voce +- +- +- Edit entry +- Modifica voce +- +- +- New attribute +- Nuovo attributo +- +- +- Are you sure you want to remove this attribute? +- Sei sicuro di voler rimuovere questo attributo? +- +- +- Tomorrow +- Domani +- +- +- %n week(s) +- %n settimana%n settimane +- +- +- %n month(s) +- %n mese%n mesi +- +- +- Entry updated successfully. +- Voce aggiornata correttamente. +- +- +- New attribute %1 +- Nuovo attributo %1 +- +- +- %n year(s) +- anno (i) %n%n anno(i) +- +- +- Confirm Removal +- Conferma rimozione +- +- +- Browser Integration +- Integrazione con i browser +- +- +- <empty URL> +- <empty URL> +- +- +- Are you sure you want to remove this URL? +- Sei sicuro di voler rimuovere questo URL? +- +- +- Reveal +- Rivela +- +- +- Hide +- Nascondi +- +- +- Unsaved Changes +- Modifiche non salvate +- +- +- Would you like to save changes to this entry? +- Salvare le modifiche a questa voce? +- +- +- [PROTECTED] Press Reveal to view or edit +- [PROTETTO] Premere Mostra per visualizzare o modificare +- +- +- Invalid Entry +- Voce non valida +- +- +- An external merge operation has invalidated this entry. +-Unfortunately, any changes made have been lost. +- Questa voce è stata invalidata da un'operazione di unione esterna. +-Purtroppo, le modifiche apportate sono state perse. +- +- +- +- EditEntryWidgetAdvanced +- +- Additional attributes +- Attributi aggiuntivi +- +- +- Add +- Aggiungi +- +- +- Remove +- Rimuovi +- +- +- Edit Name +- Modifica nome +- +- +- Protect +- Proteggi +- +- +- Reveal +- Rivela +- +- +- Attachments +- Allegati +- +- +- Foreground Color: +- Colore di primo piano: +- +- +- Background Color: +- Colore di sfondo: +- +- +- Attribute selection +- Selezione degli attributi +- +- +- Attribute value +- Valore attributo +- +- +- Add a new attribute +- Aggiungere un nuovo attributo +- +- +- Remove selected attribute +- Rimuovi attributo selezionato +- +- +- Edit attribute name +- Modifica nome attributo +- +- +- Toggle attribute protection +- Attivare o disattivare la protezione degli attributi +- +- +- Show a protected attribute +- Visualizzare un attributo protetto +- +- +- Foreground color selection +- Selezione del colore di primo piano +- +- +- Background color selection +- Selezione del colore di sfondo +- +- +- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> +- <html><head/><body><p>Se abilitata, questa voce non apparirà nei rapporti di integrità e HIBP anche se non soddisfa le condizioni richieste(es. entropia della password o riutilizzo). È possibile includere la password se essa si trova al di là del vostro controllo (es. se è necessario inserire un PIN a quattro cifre) per evitare che essa vada a ingombrare i rapporti.</p></body></html> +- +- +- Exclude from database reports +- Escludere dal rapporto del database +- +- +- +- EditEntryWidgetAutoType +- +- Enable Auto-Type for this entry +- Abilita completamento automatico per questa voce +- +- +- Window Associations +- Associazioni finestra +- +- +- + +- + +- +- +- - +- - +- +- +- Window title: +- Titolo finestra: +- +- +- Use a specific sequence for this association: +- Usa una sequenza specifica per questa associazione: +- +- +- Custom Auto-Type sequence +- Sequenza personalizzata di completamento automatico +- +- +- Open Auto-Type help webpage +- Aprire la pagina Web di aiuto per i completamenti automatici +- +- +- Existing window associations +- Associazioni delle finestre esistenti +- +- +- Add new window association +- Aggiungi nuova associazione finestra +- +- +- Remove selected window association +- Rimuovere l'associazione della finestra selezionata +- +- +- You can use an asterisk (*) to match everything +- È possibile utilizzare un asterisco (*) per abbinare tutto +- +- +- Set the window association title +- Impostare il titolo dell'associazione della finestra +- +- +- You can use an asterisk to match everything +- È possibile utilizzare un asterisco per abbinare tutto +- +- +- Custom Auto-Type sequence for this window +- Sequenza personalizzata del completamento automatico per questa finestra +- +- +- Inherit default Auto-Type sequence from the group +- Eredita la sequenza predefinita di auto-completamento dal gruppo +- +- +- Use custom Auto-Type sequence: +- Usa sequenza personalizzata di auto-completamento: +- +- +- +- EditEntryWidgetBrowser +- +- These settings affect to the entry's behaviour with the browser extension. +- Queste impostazioni influiscono sul comportamento della voce con l'estensione del browser. +- +- +- General +- Generale +- +- +- Skip Auto-Submit for this entry +- Ignora invio automatico per questa voce +- +- +- Hide this entry from the browser extension +- Nascondi questa voce dall'estensione del browser +- +- +- Additional URL's +- URL aggiuntivi +- +- +- Add +- Aggiungi +- +- +- Remove +- Rimuovi +- +- +- Edit +- Modifica +- +- +- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. +- Manda queste impostazioni al browser solo solo per l'autenticazione HTTP. Se abilitata, la pagina di login non mostrerà questa voce disponibile per la selezione. +- +- +- Use this entry only with HTTP Basic Auth +- Utilizza questa voce solo con l'autenticazione HTTP Basic +- +- +- +- EditEntryWidgetHistory +- +- Show +- Visualizza +- +- +- Restore +- Ripristina +- +- +- Delete +- Elimina +- +- +- Delete all +- Elimina tutti +- +- +- Entry history selection +- Selezione della cronologia delle voci +- +- +- Show entry at selected history state +- Mostra voce nello stato della cronologia selezionato +- +- +- Restore entry to selected history state +- Ripristinare la voce allo stato della cronologia selezionato +- +- +- Delete selected history state +- Eliminare lo stato della cronologia selezionato +- +- +- Delete all history +- Elimina tutta la cronologia +- +- +- +- EditEntryWidgetMain +- +- URL: +- URL: +- +- +- Password: +- Password: +- +- +- Title: +- Titolo: +- +- +- Presets +- Preimpostazioni +- +- +- Toggle the checkbox to reveal the notes section. +- Attivare o disattivare la casella di controllo per rivelare la sezione note. +- +- +- Username: +- Nome utente: +- +- +- Url field +- Campo Url +- +- +- Download favicon for URL +- Scarica favicon per URL +- +- +- Password field +- Campo password +- +- +- Toggle notes visible +- Attiva/disattiva visibilità delle note +- +- +- Expiration field +- Campo scadenza +- +- +- Expiration Presets +- Scadenza delle preimpostazioni +- +- +- Expiration presets +- Scadenza delle preimpostazioni +- +- +- Notes field +- Campo note +- +- +- Title field +- Campo del titolo +- +- +- Username field +- Campo nome utente +- +- +- Toggle expiration +- Attiva/disattiva scadenza +- +- +- Notes: +- Note: +- +- +- https://example.com +- https://example.com +- +- +- Expires: +- Scade: +- +- +- Edit Entry +- Modifica voce +- +- +- +- EditEntryWidgetSSHAgent +- +- Form +- Modulo +- +- +- Remove key from agent after +- Rimuovi chiave dall'agente dopo +- +- +- seconds +- secondi +- +- +- Fingerprint +- Impronta digitale +- +- +- Remove key from agent when database is closed/locked +- Rimuovi chiave dall'agente quando il database viene chiuso/bloccato +- +- +- Public key +- Chiave pubblica +- +- +- Add key to agent when database is opened/unlocked +- Aggiungi chiave all'agente quando il database viene aperto/sbloccato +- +- +- Comment +- Commento +- +- +- Decrypt +- Decifra +- +- +- n/a +- n/a +- +- +- Copy to clipboard +- Copia negli appunti +- +- +- Private key +- Chiave privata +- +- +- External file +- File esterno +- +- +- Browse... +- Button for opening file dialog +- Sfoglia... +- +- +- Attachment +- Allegato +- +- +- Add to agent +- Aggiungi all'agente +- +- +- Remove from agent +- Rimuovi dall'agente +- +- +- Require user confirmation when this key is used +- Richiesta conferma dell'utente quando questa chiave è usata +- +- +- Remove key from agent after specified seconds +- Rimuovi chiave dall'agente dopo i secondi specificati +- +- +- Browser for key file +- Ricerca del file di chiave +- +- +- External key file +- File di chiave esterna +- +- +- Select attachment file +- Seleziona file allegato +- +- +- +- EditGroupWidget +- +- Group +- Gruppo +- +- +- Icon +- Icona +- +- +- Properties +- Proprietà +- +- +- Add group +- Aggiungi gruppo +- +- +- Edit group +- Modifica gruppo +- +- +- Enable +- Abilita +- +- +- Disable +- Disabilita +- +- +- Inherit from parent group (%1) +- Eredita dal gruppo genitore (%1) +- +- +- Entry has unsaved changes +- La voce contiene modifiche non salvate +- +- +- +- EditGroupWidgetKeeShare +- +- Type: +- Tipo: +- +- +- Path: +- Percorso: +- +- +- Password: +- Password: +- +- +- Inactive +- Inattivo +- +- +- KeeShare unsigned container +- Contenitore non firmato KeeShare +- +- +- KeeShare signed container +- Contenitore firmato KeeShare +- +- +- Select import source +- Selezionare l'origine di importazione +- +- +- Select export target +- Seleziona destinazione di esportazione +- +- +- Select import/export file +- Selezionare il file di importazione/esportazione +- +- +- Clear +- Azzera +- +- +- Import +- Importazione +- +- +- Export +- Esporta +- +- +- Synchronize +- Sincronizzare +- +- +- Your KeePassXC version does not support sharing this container type. +-Supported extensions are: %1. +- La tua versione di KeePassXC non supporta la condivisione di questo tipo di contenitore. +-Le estensioni supportate sono: %1. +- +- +- %1 is already being exported by this database. +- %1 è già stato esportato da questo database. +- +- +- %1 is already being imported by this database. +- %1 è già stato importato da questo database. +- +- +- %1 is being imported and exported by different groups in this database. +- %1 viene importato ed esportato da gruppi diversi in questo database. +- +- +- KeeShare is currently disabled. You can enable import/export in the application settings. +- KeeShare is a proper noun +- KeeShare è attualmente disabilitato. È possibile abilitare l'importazione/esportazione nelle impostazioni dell'applicazione. +- +- +- Database export is currently disabled by application settings. +- L'esportazione del database è attualmente disabilitata dalle impostazioni dell'applicazione. +- +- +- Database import is currently disabled by application settings. +- L'importazione del database è attualmente disabilitata dalle impostazioni dell'applicazione. +- +- +- Sharing mode field +- Campo modalità di condivisione +- +- +- Path to share file field +- Campo percorso per condividere il file +- +- +- Password field +- Campo password +- +- +- Clear fields +- Cancellare i campi +- +- +- Browse for share file +- Cerca file per condivisione +- +- +- Browse... +- Sfoglia... +- +- +- +- EditGroupWidgetMain +- +- Name field +- Campo nome +- +- +- Notes field +- Campo note +- +- +- Toggle expiration +- Attiva/disattiva scadenza +- +- +- Auto-Type toggle for this and sub groups +- Attiva/disattiva il completamento automatico per questo e i sottogruppi +- +- +- Expiration field +- Campo scadenza +- +- +- Search toggle for this and sub groups +- Attiva/disattiva ricerca per questo e per i sottogruppi +- +- +- Default auto-type sequence field +- Campo della sequenza del completamento automatico predefinito +- +- +- Expires: +- Scade: +- +- +- Use default Auto-Type sequence of parent group +- Usa la sequenza di completamento automatico predefinita del gruppo genitore +- +- +- Auto-Type: +- Completamento automatico: +- +- +- Search: +- Ricerca: +- +- +- Notes: +- Note: +- +- +- Name: +- Nome: +- +- +- Set default Auto-Type sequence +- Impostare la sequenza predefinita del completamento automatico +- +- +- Edit Group +- Modifica gruppo +- +- +- +- EditWidgetIcons +- +- Add custom icon +- Aggiungi icona personalizzata +- +- +- Delete custom icon +- Rimuovi icona personalizzata +- +- +- Download favicon +- Scarica favicon +- +- +- Unable to fetch favicon. +- Impossibile scaricare favicon. +- +- +- Images +- Immagini +- +- +- All files +- Tutti i file +- +- +- Confirm Delete +- Conferma eliminazione +- +- +- Select Image(s) +- Selezionare immagine(i) +- +- +- Successfully loaded %1 of %n icon(s) +- Caricate con successo %1 di %n icona.Caricate con successo %1 di %n icone. +- +- +- No icons were loaded +- Nessuna icona è stata caricata +- +- +- %n icon(s) already exist in the database +- %n icona esiste già nel database%n icone esistono già nel database +- +- +- The following icon(s) failed: +- La seguente icona presenta degli errori:Le seguenti icone presentano degli errori: +- +- +- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? +- Questa icona viene utilizzata da %n voci e verrà sostituita dall'icona predefinita. Sei sicuro di volerlo eliminare?Questa icona viene utilizzata da %n voce(i) e verrà sostituita dall'icona predefinita. Sei sicuro di volerla eliminare? +- +- +- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security +- È possibile attivare il servizio per le icone del sito Web DuckDuckGo in Strumenti -> Impostazioni -> Sicurezza +- +- +- Download favicon for URL +- Scarica favicon per URL +- +- +- Apply selected icon to subgroups and entries +- Applicare l'icona selezionata a sottogruppi e voci +- +- +- Also apply to child groups +- Applica anche ai gruppi figli +- +- +- Also apply to child entries +- Si applicano anche alle voci figlio +- +- +- Also apply to all children +- Si applicano anche a tutti i figli +- +- +- Existing icon selected. +- Icona esistente selezionata. +- +- +- Use default icon +- Usa icona predefinita +- +- +- Use custom icon +- Usa icona personalizzata +- +- +- Apply icon to... +- Applicare l'icona a... +- +- +- Apply to this group only +- Applica solo a questo gruppo +- +- +- +- EditWidgetProperties +- +- Created: +- Creazione: +- +- +- Modified: +- Modifica: +- +- +- Accessed: +- Accesso: +- +- +- Uuid: +- UUID: +- +- +- Plugin Data +- Dati del plugin +- +- +- Remove +- Rimuovi +- +- +- Delete plugin data? +- Eliminare i dati del plugin? +- +- +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- Vuoi davvero eliminare i dati del plugin selezionato? +-Ciò potrebbe causare malfunzionamenti ai plugin interessati. +- +- +- Key +- Chiave +- +- +- Value +- Valore +- +- +- Datetime created +- Data e ora di creazione +- +- +- Datetime modified +- Data/ora di modifica +- +- +- Datetime accessed +- Data/ora acceduto +- +- +- Unique ID +- ID univoco +- +- +- Plugin data +- Dati del plug-in +- +- +- Remove selected plugin data +- Rimuovere i dati selezionati del plug-in +- +- +- +- Entry +- +- %1 - Clone +- %1 - clone +- +- +- +- EntryAttachmentsModel +- +- Name +- Nome +- +- +- Size +- Dimensione +- +- +- +- EntryAttachmentsWidget +- +- Form +- Modulo +- +- +- Add +- Aggiungi +- +- +- Remove +- Rimuovi +- +- +- Open +- Apri +- +- +- Save +- Salva +- +- +- Select files +- Seleziona file +- +- +- Are you sure you want to remove %n attachment(s)? +- Sei sicuro di voler rimuovere %n allegato?Sei sicuro di voler rimuovere %n allegati? +- +- +- Save attachments +- Salva allegati +- +- +- Unable to create directory: +-%1 +- Impossibile creare la directory: +-%1 +- +- +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- Sei sicuro di sovrascrivere il file "%1" esistente con l'allegato? +- +- +- Confirm overwrite +- Confermare la sovrascrittura +- +- +- Unable to save attachments: +-%1 +- Impossibile salvare l'allegato: +-%1 +- +- +- Unable to open attachment: +-%1 +- Impossibile aprire l'allegato: +-%1 +- +- +- Unable to open attachments: +-%1 +- Impossibile aprire gli allegati: +-%1 +- +- +- Confirm remove +- Confermare la rimozione +- +- +- Unable to open file(s): +-%1 +- Impossibile aprire il file: +-%1Impossibile aprire i file: +-%1 +- +- +- Attachments +- Allegati +- +- +- Add new attachment +- Aggiungi nuovo allegato +- +- +- Remove selected attachment +- Rimuovere l'allegato selezionato +- +- +- Open selected attachment +- Aprire l'allegato selezionato +- +- +- Save selected attachment to disk +- Salva l'allegato selezionato su disco +- +- +- %1 is a big file (%2 MB). +-Your database may get very large and reduce performance. +- +-Are you sure to add this file? +- %1 Ha dimensioni elevate (%2 MB). +-Il database potrebbe occupare più spazio e ridurre le sue performance. +- +-Siete sicuri di voler aggiungere questo file? +- +- +- Confirm Attachment +- Conferma l'allegato +- +- +- +- EntryAttributesModel +- +- Name +- Nome +- +- +- +- EntryHistoryModel +- +- Last modified +- Ultima modifica +- +- +- Title +- Titolo +- +- +- Username +- Nome utente +- +- +- URL +- URL +- +- +- +- EntryModel +- +- Ref: +- Reference abbreviation +- Rif.: +- +- +- Group +- Gruppo +- +- +- Title +- Titolo +- +- +- Username +- Nome utente +- +- +- URL +- URL +- +- +- Never +- Mai +- +- +- Password +- Password +- +- +- Notes +- Note +- +- +- Expires +- Scade +- +- +- Created +- Creazione +- +- +- Modified +- Modifica +- +- +- Accessed +- Accesso +- +- +- Attachments +- Allegati +- +- +- Size +- Dimensione +- +- +- Group name +- Nome del gruppo +- +- +- Entry title +- Titolo della voce +- +- +- Entry notes +- Note della voce +- +- +- Entry expires at +- La voce scade il +- +- +- Creation date +- Data di creazione +- +- +- Last modification date +- Ultima modifica +- +- +- Last access date +- Ultimo accesso +- +- +- Attached files +- Allegati +- +- +- Entry size +- Dimensioni della voce +- +- +- Has attachments +- Ha allegati +- +- +- Has TOTP one-time password +- Ha una password monouso TOTP +- +- +- +- EntryPreviewWidget +- +- Close +- Chiudi +- +- +- General +- Generale +- +- +- Username +- Nome utente +- +- +- Password +- Password +- +- +- Expiration +- Scadenza +- +- +- URL +- URL +- +- +- Attributes +- Attributi +- +- +- Attachments +- Allegati +- +- +- Notes +- Note +- +- +- Autotype +- Completamento automatico +- +- +- Window +- Finestra +- +- +- Sequence +- Sequenza +- +- +- Searching +- Ricerca +- +- +- Search +- Cerca +- +- +- Clear +- Azzera +- +- +- Never +- Mai +- +- +- [PROTECTED] +- [PROTETTO] +- +- +- Enabled +- Abilitato +- +- +- Disabled +- Disabilitato +- +- +- Share +- Condividi +- +- +- Display current TOTP value +- Visualizza il valore TOTP corrente +- +- +- Advanced +- Avanzate +- +- +- Default Sequence +- Sequenza predefinita +- +- +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- attributes line +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- +- +- +- EntryURLModel +- +- Invalid URL +- URL non corretto +- +- +- +- EntryView +- +- Fit to window +- Adatta alla finestra +- +- +- Fit to contents +- Adatta ai contenuti +- +- +- Reset to defaults +- Ripristina valori predefiniti +- +- +- Has attachments +- Entry attachment icon toggle +- Ha allegati +- +- +- Has TOTP +- Entry TOTP icon toggle +- Ha TOTP +- +- +- +- FdoSecrets::Item +- +- Entry "%1" from database "%2" was used by %3 +- La voce "%1" dal database "%2" è stata utilizzata da %3 +- +- +- +- FdoSecrets::Service +- +- Failed to register DBus service at %1.<br/> +- Impossibile registrare il servizio DBus a %1.<br/> +- +- +- %n Entry(s) was used by %1 +- %1 is the name of an application +- %n Voce utilizzata da %1%n Voci utilizzate da %1 +- +- +- +- FdoSecrets::SettingsDatabaseModel +- +- File Name +- Nome file +- +- +- Group +- Gruppo +- +- +- Manage +- Gestire +- +- +- Unlock to show +- Sblocca per mostrare +- +- +- None +- Nessuno +- +- +- +- FdoSecrets::SettingsSessionModel +- +- Application +- Applicazione +- +- +- Manage +- Gestire +- +- +- +- FdoSecretsPlugin +- +- <b>Fdo Secret Service:</b> %1 +- <b>Fdo Secret Service:</b> %1 +- +- +- Unknown +- Unknown PID +- Sconosciuto +- +- +- Unknown +- Unknown executable path +- Sconosciuto +- +- +- <i>PID: %1, Executable: %2</i> +- <i>PID: 1234, Executable: /path/to/exe</i> +- <i>PID: %1, Eseguibile: %2</i> +- +- +- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. +- Un altro servizio segreto è già in esecuzione (%1).<br/>Fermarlo o rimuoverlo prima di abilitare l'integrazione dei servizi segreti. +- +- +- +- Group +- +- [empty] +- group has no children +- [vuoto] +- +- +- +- HibpDownloader +- +- Online password validation failed +- Validazione online della password fallita +- +- +- +- IconDownloaderDialog +- +- Download Favicons +- Scarica Favicons +- +- +- Cancel +- Annulla +- +- +- Having trouble downloading icons? +-You can enable the DuckDuckGo website icon service in the security section of the application settings. +- Hai problemi a scaricare le icone? +-È possibile attivare il servizio per le icone del sito Web DuckDuckGo nella sezione relativa alla sicurezza delle impostazioni dell'applicazione. +- +- +- Close +- Chiudi +- +- +- URL +- URL +- +- +- Status +- Stato +- +- +- Please wait, processing entry list... +- Si prega di attendere, elenco delle voci in elaborazione... +- +- +- Downloading... +- Scaricamento... +- +- +- Ok +- Ok +- +- +- Already Exists +- Esiste già +- +- +- Download Failed +- Download non riuscito +- +- +- Downloading favicons (%1/%2)... +- Scaricamento delle favicon (%1/%2)... +- +- +- +- KMessageWidget +- +- &Close +- &Chiudi +- +- +- Close message +- Chiudi messaggio +- +- +- +- Kdbx3Reader +- +- missing database headers +- intestazioni del database mancanti +- +- +- Header doesn't match hash +- L'intestazione non corrisponde all'hash +- +- +- Invalid header id size +- Dimensione dell'id dell'intestazione non valida +- +- +- Invalid header field length +- Lunghezza del campo di intestazione non valida +- +- +- Invalid header data length +- Lunghezza dei dati di intestazione non valida +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Sono state fornite credenziali non valide, riprovare. +-Se ciò si ripresenta, il file di database potrebbe essere danneggiato. +- +- +- Unable to calculate database key +- Impossibile calcolare la chiave del database +- +- +- Unable to issue challenge-response: %1 +- Impossibile stabilire un collegamento challenge-response: %1 +- +- +- +- Kdbx3Writer +- +- Unable to issue challenge-response: %1 +- Impossibile stabilire un collegamento challenge-response: %1 +- +- +- Unable to calculate database key +- Impossibile calcolare la chiave del database +- +- +- +- Kdbx4Reader +- +- missing database headers +- intestazioni del database mancanti +- +- +- Invalid header checksum size +- Dimensione di checksum dell'intestazione non valida +- +- +- Header SHA256 mismatch +- Corrispondenza errata dell'intestazione SHA256 +- +- +- Unknown cipher +- Cifrario sconosciuto +- +- +- Invalid header id size +- Dimensione dell'id dell'intestazione non valida +- +- +- Invalid header field length +- Lunghezza del campo di intestazione non valida +- +- +- Invalid header data length +- Lunghezza dei dati di intestazione non valida +- +- +- Failed to open buffer for KDF parameters in header +- Fallimento dell'apertura del buffer per i parametri KDF nell'header +- +- +- Unsupported key derivation function (KDF) or invalid parameters +- Funzione di derivazione della chiave (KDF) non supportata o parametri non validi +- +- +- Legacy header fields found in KDBX4 file. +- Sono stati trovati dei campi obsloleti nell'header del file KDBX4 +- +- +- Invalid inner header id size +- Dimensione dell'id dell'intestazione interna non valida +- +- +- Invalid inner header field length +- Lunghezza del campo di intestazione interna non valida +- +- +- Invalid inner header binary size +- Dimensione binaria dell'intestazione interna non valida +- +- +- Unsupported KeePass variant map version. +- Translation: variant map = data structure for storing meta data +- Variante di mappa KeePass non supportata. +- +- +- Invalid variant map entry name length +- Translation: variant map = data structure for storing meta data +- Il nome della voce per la mappa di variazione ha una lunghezza non valida +- +- +- Invalid variant map entry name data +- Translation: variant map = data structure for storing meta data +- Il nome della voce per la mappa di variazione presenta dati non validi +- +- +- Invalid variant map entry value length +- Translation: variant map = data structure for storing meta data +- Il valore della voce per la mappa di variazione ha una lunghezza non valida +- +- +- Invalid variant map entry value data +- Translation comment: variant map = data structure for storing meta data +- Il valore della voce per la mappa di variazione presenta dati non validi +- +- +- Invalid variant map Bool entry value length +- Translation: variant map = data structure for storing meta data +- Il valore della voce Bool per la mappa di variazione ha una lunghezza non valida +- +- +- Invalid variant map Int32 entry value length +- Translation: variant map = data structure for storing meta data +- Il valore della voce Int32 per la mappa di variazione ha una lunghezza non valida +- +- +- Invalid variant map UInt32 entry value length +- Translation: variant map = data structure for storing meta data +- Il valore della voce UInt32 per la mappa di variazione ha una lunghezza non valida +- +- +- Invalid variant map Int64 entry value length +- Translation: variant map = data structure for storing meta data +- Il valore della voce Int64 per la mappa di variazione ha una lunghezza non valida +- +- +- Invalid variant map UInt64 entry value length +- Translation: variant map = data structure for storing meta data +- Il valore della voce UInt64 per la mappa di variazione ha una lunghezza non valida +- +- +- Invalid variant map entry type +- Translation: variant map = data structure for storing meta data +- Il tipo della voce per la mappa di variazione non è valido +- +- +- Invalid variant map field type size +- Translation: variant map = data structure for storing meta data +- Dimensione non valida per il tipo di campo della mappa di variazione +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Sono state fornite credenziali non valide, riprovare. +-Se ciò si ripresenta, il file di database potrebbe essere danneggiato. +- +- +- (HMAC mismatch) +- (mancata corrispondenza HMAC) +- +- +- Unable to calculate database key: %1 +- Impossibile calcolare la chiave del database: %1 +- +- +- +- Kdbx4Writer +- +- Invalid symmetric cipher algorithm. +- Algoritmo di cifratura simmetrica non valido. +- +- +- Invalid symmetric cipher IV size. +- IV = Initialization Vector for symmetric cipher +- Dimensione non valida del vettore di inizializzazione dell'algoritmo di cifratura simmetrica. +- +- +- Failed to serialize KDF parameters variant map +- Translation comment: variant map = data structure for storing meta data +- Fallita serializzazione della mappa di variazione dei parametri per la funzione di derivazione della chiave di cifratura (KDF) +- +- +- Unable to calculate database key: %1 +- Impossibile calcolare la chiave del database: %1 +- +- +- +- KdbxReader +- +- Unsupported cipher +- Cifrario non supportato +- +- +- Invalid compression flags length +- Lunghezza dei flag di compressione non valida +- +- +- Unsupported compression algorithm +- Algoritmo di compressione non supportato +- +- +- Invalid master seed size +- Dimensione del seme principale non valido +- +- +- Invalid transform seed size +- Dimensione non valida del seme di trasformazione +- +- +- Invalid transform rounds size +- Dimensione non valida del numero di ripetizioni per la trasformazione +- +- +- Invalid start bytes size +- Dimensione non valida del byte di inizio +- +- +- Invalid random stream id size +- Dimensione non valida dell'ID per il flusso di dati casuale +- +- +- Invalid inner random stream cipher +- Cifrario non valido per il flusso interno di dati casuale +- +- +- Not a KeePass database. +- Non è un database KeePass. +- +- +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- Il file selezionato è un vecchio database di KeePass 1 (.kdb). +- +-È possibile importarlo facendo clic su 'Database' > 'Importa database KeePass 1...'. +-Si tratta di una migrazione unidirezionale. Non sarà possibile aprire il database importato con la vecchia versione di KeePassX 0.4. +- +- +- Unsupported KeePass 2 database version. +- Versione di database KeePass 2 non supportata. +- +- +- Invalid cipher uuid length: %1 (length=%2) +- Lunghezza dell'uuid cifrato non valida: %1 (lunghezza=%2) +- +- +- Unable to parse UUID: %1 +- Impossibile analizzare UUID: %1 +- +- +- Failed to read database file. +- Impossibile leggere il file di database. +- +- +- +- KdbxXmlReader +- +- XML parsing failure: %1 +- Errore nell'analisi XML: %1 +- +- +- No root group +- Nessun gruppo radice +- +- +- Missing icon uuid or data +- UUID mancante per l'icona o dati +- +- +- Missing custom data key or value +- Chiave individuale o valore mancante +- +- +- Multiple group elements +- Elementi appartenenti a gruppi diversi +- +- +- Null group uuid +- UUID di gruppo nullo +- +- +- Invalid group icon number +- Numero di gruppo di icone non valido +- +- +- Invalid EnableAutoType value +- Valore di EnableAutoType non valido +- +- +- Invalid EnableSearching value +- Valore EnableSearching non valido +- +- +- No group uuid found +- UUID di gruppo non trovato +- +- +- Null DeleteObject uuid +- DeleteObject: UUID nullo +- +- +- Missing DeletedObject uuid or time +- DeleteObject: UUID o marca temporale mancante +- +- +- Null entry uuid +- UUID nulla per la voce +- +- +- Invalid entry icon number +- Numero non valido per l'icona della voce +- +- +- History element in history entry +- Elemento della cronistoria nella voce della cronistoria +- +- +- No entry uuid found +- Nessun UUID trovato per la voce +- +- +- History element with different uuid +- Elemento della cronistoria con diverso UUID +- +- +- Duplicate custom attribute found +- Trovato attributo personalizzato duplicato +- +- +- Entry string key or value missing +- Chiave alfanumerica o valore mancante per la voce +- +- +- Entry binary key or value missing +- Chiave binaria o valore mancante per la voce +- +- +- Auto-type association window or sequence missing +- Finestra associata al completamento automatico o sequenza mancante +- +- +- Invalid bool value +- Valore booleano non valido +- +- +- Invalid date time value +- Valore di data e tempo non valido +- +- +- Invalid color value +- Valore di colore non valido +- +- +- Invalid color rgb part +- Colore RGB non valido +- +- +- Invalid number value +- Valore numerico non valido +- +- +- Invalid uuid value +- Valore non valido per UUID +- +- +- Unable to decompress binary +- Translator meant is a binary data inside an entry +- Impossibile decomprimere il binario +- +- +- XML error: +-%1 +-Line %2, column %3 +- Errore XML: +-%1 +-Riga %2, colonna %3 +- +- +- +- KeeAgentSettings +- +- Invalid KeeAgent settings file structure. +- KeeAgent non valido nel file. +- +- +- Private key is an attachment but no attachments provided. +- La chiave privata è un allegato ma nessun allegato è stato inserito. +- +- +- Private key is empty +- La chiave privata è vuota +- +- +- File too large to be a private key +- File troppo grande per essere una chiave privata +- +- +- Failed to open private key +- Impossibile aprire la chiave privata +- +- +- +- KeePass1OpenWidget +- +- Unable to open the database. +- Impossibile aprire il database. +- +- +- Import KeePass1 Database +- Importa database KeePass1 +- +- +- +- KeePass1Reader +- +- Unable to read keyfile. +- Impossibile leggere il file della chiave. +- +- +- Not a KeePass database. +- Non è un database KeePass. +- +- +- Unsupported encryption algorithm. +- Algoritmo di cifratura non supportato. +- +- +- Unsupported KeePass database version. +- Versione database KeePass non supportata. +- +- +- Unable to read encryption IV +- IV = Initialization Vector for symmetric cipher +- Impossibile leggere il vettore di inizializzazione per la cifratura +- +- +- Invalid number of groups +- Numero di gruppi non valido +- +- +- Invalid number of entries +- Numero di voci non valido +- +- +- Invalid content hash size +- DImensione dell'hash non valida per questo contenuto +- +- +- Invalid transform seed size +- Dimensione non valida del seme di trasformazione +- +- +- Invalid number of transform rounds +- Numero di cicli di trasformazione non valido +- +- +- Unable to construct group tree +- Impossibile costruire la struttura ad albero dei gruppi +- +- +- Root +- Radice +- +- +- Key transformation failed +- Trasformazione della chiave non riuscita +- +- +- Invalid group field type number +- Numero del tipo di gruppo non valido +- +- +- Invalid group field size +- Dimensione del campo di gruppo non valida +- +- +- Read group field data doesn't match size +- I dati letti non coincidono con la dimensione del gruppo +- +- +- Incorrect group id field size +- Dimensione dell'ID di gruppo non corretta +- +- +- Incorrect group creation time field size +- Dimensione della data di creazione del gruppo non corretta +- +- +- Incorrect group modification time field size +- Dimensione della data di modifica del gruppo non corretta +- +- +- Incorrect group access time field size +- Dimensione della data di accesso del gruppo non corretta +- +- +- Incorrect group expiry time field size +- Dimensione della data di scadenza del gruppo non corretta +- +- +- Incorrect group icon field size +- Dimensione dell'icona del gruppo non corretta +- +- +- Incorrect group level field size +- Dimensione del livello del gruppo non corretta +- +- +- Invalid group field type +- Tipo di gruppo non corretto +- +- +- Missing group id or level +- ID di gruppo o livello mancante +- +- +- Missing entry field type number +- Numero mancante per il tipo della voce corrente +- +- +- Invalid entry field size +- Dimensione del campo di immissione non valida +- +- +- Read entry field data doesn't match size +- I dati letti per la voce corrente non coincidono con la dimensione +- +- +- Invalid entry uuid field size +- Dimensione dell'UUID della voce corrente non valida +- +- +- Invalid entry group id field size +- Dimensione dell'ID di gruppo della voce corrente non valida +- +- +- Invalid entry icon field size +- Dimensione dell'icona della voce corrente non valida +- +- +- Invalid entry creation time field size +- Dimensione della data di creazione della voce corrente non valida +- +- +- Invalid entry modification time field size +- Dimensione della data di modifica della voce corrente non valida +- +- +- Invalid entry expiry time field size +- Dimensione della data di scadenza della voce corrente non valida +- +- +- Invalid entry field type +- Tipo di dato non valido +- +- +- unable to seek to content position +- Non in grado di cercare nella posizione del contenuto +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Sono state fornite credenziali non valide, riprovare. +-Se ciò si ripresenta, il file di database potrebbe essere danneggiato. +- +- +- Unable to calculate database key +- Impossibile calcolare la chiave del database +- +- +- +- KeeShare +- +- Invalid sharing reference +- Riferimento di condivisione non valido +- +- +- Inactive share %1 +- Condivisione inattiva %1 +- +- +- Imported from %1 +- Importato da %1 +- +- +- Exported to %1 +- Esportato in %1 +- +- +- Synchronized with %1 +- Sincronizzato con %1 +- +- +- Import is disabled in settings +- L'importazione è disabilitata nelle impostazioni +- +- +- Export is disabled in settings +- L'esportazione è disabilitata nelle impostazioni +- +- +- Inactive share +- Condivisione inattiva +- +- +- Imported from +- Importato da +- +- +- Exported to +- Esportato in +- +- +- Synchronized with +- Sincronizzato con +- +- +- +- KeyComponentWidget +- +- Key Component +- Componente chiave +- +- +- Key Component Description +- Descrizione del componente chiave +- +- +- Cancel +- Annulla +- +- +- Key Component set, click to change or remove +- Set di componenti chiave, fare clic per modificare o rimuovere +- +- +- Add %1 +- Add a key component +- Aggiungere %1 +- +- +- Change %1 +- Change a key component +- Modificare %1 +- +- +- Remove %1 +- Remove a key component +- Rimuovere %1 +- +- +- %1 set, click to change or remove +- Change or remove a key component +- %1 impostato, fare clic per modificare o rimuovere +- +- +- +- KeyFileEditWidget +- +- Generate +- Genera +- +- +- Key File +- File chiave +- +- +- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> +- <p>È possibile aggiungere un file chiave contenente byte casuali per una maggiore sicurezza.</p><p>Devi tenerlo segreto e non perderlo mai o sarai bloccato!</p> +- +- +- Error loading the key file '%1' +-Message: %2 +- Errore nel caricamento del file chiave '%1' +-Messaggio: %2 +- +- +- Key files +- File chiave +- +- +- All files +- Tutti i file +- +- +- Create Key File... +- Crea file chiave... +- +- +- Error creating key file +- Errore nella creazione del file chiave +- +- +- Unable to create key file: %1 +- Impossibile creare il file chiave: %1 +- +- +- Select a key file +- Seleziona un file chiave +- +- +- Key file selection +- Selezione del file chiave +- +- +- Browse for key file +- Cercare il file chiave +- +- +- Browse... +- Sfoglia... +- +- +- Generate a new key file +- Generare un nuovo file chiave +- +- +- Note: Do not use a file that may change as that will prevent you from unlocking your database! +- Nota: non utilizzare un file che potrebbe cambiare in quanto ciò impedirà di sbloccare il database! +- +- +- Invalid Key File +- File chiave non valido +- +- +- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. +- Non è possibile utilizzare il database corrente come proprio file chiave. Scegliere un file diverso o generare un nuovo file chiave. +- +- +- Suspicious Key File +- File chiave sospetto +- +- +- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. +-Are you sure you want to continue with this file? +- Il file chiave scelto ha l'aspetto di un file database delle password. Un file chiave deve essere un file statico che non cambia mai o si perderà l'accesso al database per sempre. +-Sei sicuro di voler continuare con questo file? +- +- +- Old key file format +- Vecchio formato di file chiave +- +- +- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. +- È stato selezionato un file di chiave in un vecchio formato che KeePassXC<br>potrebbe smettere di supportare in futuro.<br><br>Prendere in considerazione la possibilità di generare un nuovo file di chiave. +- +- +- +- MainWindow +- +- &Database +- &Database +- +- +- &Help +- &Aiuto +- +- +- &Groups +- &Gruppi +- +- +- &Tools +- S&trumenti +- +- +- &Quit +- &Esci +- +- +- &About +- &Informazioni +- +- +- Database settings +- Impostazioni database +- +- +- Copy username to clipboard +- Copia nome utente negli appunti +- +- +- Copy password to clipboard +- Copia password negli appunti +- +- +- &Settings +- &Impostazioni +- +- +- &Title +- &Titolo +- +- +- Copy title to clipboard +- Copia titolo negli appunti +- +- +- &URL +- &URL +- +- +- Copy URL to clipboard +- Copia URL negli appunti +- +- +- &Notes +- &Note +- +- +- Copy notes to clipboard +- Copia note negli appunti +- +- +- Copy &TOTP +- Copia &TOTP +- +- +- E&mpty recycle bin +- Svuota il cesti&no +- +- +- Clear history +- Azzera cronologia +- +- +- Access error for config file %1 +- Errore di accesso per il file di configurazione %1 +- +- +- Settings +- Impostazioni +- +- +- Toggle window +- Abilita/disabilita finestra +- +- +- Quit KeePassXC +- Esci da KeePassXC +- +- +- Please touch the button on your YubiKey! +- Premi il pulsante della YubiKey! +- +- +- WARNING: You are using an unstable build of KeePassXC! +-There is a high risk of corruption, maintain a backup of your databases. +-This version is not meant for production use. +- ATTENZIONE: stai utilizzando una versione non stabile di KeePassXC! +-Vi è il rischio concreto di danneggiamenti ai database utilizzati, si consiglia di predisporre per una loro copia di sicurezza. +-Questa versione non è pensata per essere utilizzata in ambito di produzione. +- +- +- &Donate +- &Donare +- +- +- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +-We recommend you use the AppImage available on our downloads page. +- AVVISO: la tua versione di Qt può causare dei crash di KeePassXC con una tastiera sullo schermo! +-Si consiglia di utilizzare l'AppImage disponibile sulla nostra pagina di download. +- +- +- &Import +- &Importare +- +- +- Create a new database +- Creare un nuovo database +- +- +- Merge from another KDBX database +- Unire da un altro database KDBX +- +- +- Add a new entry +- Aggiungere una nuova voce +- +- +- View or edit entry +- Visualizzare o modificare voce +- +- +- Add a new group +- Aggiungere un nuovo gruppo +- +- +- Perform &Auto-Type +- Eseguire completamento &automatico +- +- +- Open &URL +- Aprire &URL +- +- +- Import a KeePass 1 database +- Importare un database KeePass 1 +- +- +- Import a CSV file +- Importare un file CSV +- +- +- NOTE: You are using a pre-release version of KeePassXC! +-Expect some bugs and minor issues, this version is not meant for production use. +- NOTA: si sta utilizzando una versione non definitiva di KeePassXC! +-Aspettatevi alcuni bug e problemi minori, questa versione non è destinata all'uso in produzione. +- +- +- Check for updates on startup? +- Controllare gli aggiornamenti all'avvio? +- +- +- Would you like KeePassXC to check for updates on startup? +- Volete che KeePassXC controlli eventuali aggiornamenti all'avvio? +- +- +- You can always check for updates manually from the application menu. +- È sempre possibile controllare gli aggiornamenti manualmente tramite i menu dell'applicazione. +- +- +- &Export +- &Esporta +- +- +- Sort &A-Z +- Ordina &A-Z +- +- +- Sort &Z-A +- Ordina &Z-A +- +- +- &Password Generator +- Generatore di &password +- +- +- Import a 1Password Vault +- Importare un 1Password Vault +- +- +- &Getting Started +- &Guida introduttiva +- +- +- &User Guide +- &Guida per l'utente +- +- +- &Keyboard Shortcuts +- &Tasti di scelta rapida +- +- +- &Recent Databases +- &Database recenti +- +- +- &Entries +- &Voci +- +- +- Copy Att&ribute +- Copia att&ributo +- +- +- TOTP +- TOTP +- +- +- View +- Visualizza +- +- +- Theme +- Tema +- +- +- &Check for Updates +- &Controlla aggiornamenti +- +- +- &Open Database… +- &Apri database… +- +- +- &Save Database +- &Salva database +- +- +- &Close Database +- &Chiudi database +- +- +- &New Database… +- &Nuovo database +- +- +- &Merge From Database… +- &Unire dal database... +- +- +- &New Entry… +- &Nuova voce +- +- +- &Edit Entry… +- &Modifica voce +- +- +- &Delete Entry… +- &Elimina voce +- +- +- &New Group… +- &Nuovo gruppo +- +- +- &Edit Group… +- &Modifica gruppo +- +- +- &Delete Group… +- &Elimina gruppo +- +- +- Download All &Favicons… +- Scarica tutte le &Favicons +- +- +- Sa&ve Database As… +- Sal&va database come +- +- +- Database &Security… +- Database &Sicurezza... +- +- +- Database &Reports... +- Database &Report... +- +- +- Statistics, health check, etc. +- Statistiche, controllo dello stato, ecc. +- +- +- &Database Settings… +- Impostazioni &database +- +- +- &Clone Entry… +- &Clona voce +- +- +- Move u&p +- Sposta in s&ù +- +- +- Move entry one step up +- Sposta la voce una posizione in alto +- +- +- Move do&wn +- Sposta in gi&ù +- +- +- Move entry one step down +- Sposta la voce una posizione in basso +- +- +- Copy &Username +- Copia &nome utente +- +- +- Copy &Password +- Copia &password +- +- +- Download &Favicon +- Scarica &Favicon +- +- +- &Lock Databases +- &Blocca database +- +- +- &CSV File… +- &File CSV... +- +- +- &HTML File… +- File &HTML... +- +- +- KeePass 1 Database… +- Database KeePass 1 +- +- +- 1Password Vault… +- 1Password Vault +- +- +- CSV File… +- File CSV +- +- +- Show TOTP +- Visualizza TOTP +- +- +- Show QR Code +- Mostra codice QR +- +- +- Set up TOTP… +- Configura TOTP... +- +- +- Report a &Bug +- Segnala un &bug +- +- +- Open Getting Started Guide +- Apri la guida introduttiva +- +- +- &Online Help +- &Guida in linea +- +- +- Go to online documentation +- Vai alla documentazione online +- +- +- Open User Guide +- Apri il manuale dell'utente +- +- +- Save Database Backup... +- Salva il backup del database +- +- +- Add key to SSH Agent +- Aggiungi chiave all'agente SSH +- +- +- Remove key from SSH Agent +- Rimuovi chiave dall'agente SSH +- +- +- Compact Mode +- Modalità compatta +- +- +- Automatic +- Automatico +- +- +- Light +- Chiaro +- +- +- Dark +- Scuro +- +- +- Classic (Platform-native) +- Classico (nativo della piattaforma) +- +- +- Show Toolbar +- Mostra barra degli strumenti +- +- +- Show Preview Panel +- Mostra pannello anteprima +- +- +- Don't show again for this version +- Non mostrare più per questa versione +- +- +- Restart Application? +- Riavviare l'applicazione? +- +- +- You must restart the application to apply this setting. Would you like to restart now? +- È necessario riavviare l'applicazione per applicare questa impostazione. Vuoi riavviare ora? +- +- +- Perform Auto-Type Sequence +- Esegui la sequenza di completamento automatico +- +- +- {USERNAME} +- {NOMEUSER) +- +- +- {USERNAME}{ENTER} +- {NOMEUSER}{ENTER} +- +- +- {PASSWORD} +- {PASSWORD} +- +- +- {PASSWORD}{ENTER} +- {PASSWORD}{ENTER} +- +- +- Always on Top +- Sempre sopra +- +- +- Hide Usernames +- Nascondi nome utente +- +- +- Hide Passwords +- Nascondi password +- +- +- +- ManageDatabase +- +- Database settings +- Impostazioni database +- +- +- Edit database settings +- Modificare le impostazioni del database +- +- +- Unlock database +- Sblocca database +- +- +- Unlock database to show more information +- Sblocca il database per mostrare ulteriori informazioni +- +- +- Lock database +- Blocca database +- +- +- +- ManageSession +- +- Disconnect +- Scollegare +- +- +- Disconnect this application +- Scollega questa applicazione +- +- +- +- Merger +- +- Creating missing %1 [%2] +- Creazione mancante %1 [%2] +- +- +- Relocating %1 [%2] +- Rilocazione di %1 [%2] +- +- +- Overwriting %1 [%2] +- Sovrascrittura %1 [%2] +- +- +- older entry merged from database "%1" +- voce precedente unita dal database "%1" +- +- +- Adding backup for older target %1 [%2] +- Aggiunto backup per la destinazione precedente %1 [%2] +- +- +- Adding backup for older source %1 [%2] +- Aggiunto backup per l'origine precedente %1 [%2] +- +- +- Reapplying older target entry on top of newer source %1 [%2] +- Riapplicare la voce di destinazione precedente all'origine più recente %1 [%2] +- +- +- Reapplying older source entry on top of newer target %1 [%2] +- Riapplicare la voce di origine precedente alla destinazione più recente %1 [%2] +- +- +- Synchronizing from newer source %1 [%2] +- Sincronizzazione dall'origine più recente %1 [%2] +- +- +- Synchronizing from older source %1 [%2] +- Sincronizzazione dall'origine precedente %1 [%2] +- +- +- Deleting child %1 [%2] +- Eliminazione dell'elemento figlio %1 [%2] +- +- +- Deleting orphan %1 [%2] +- Eliminazione orfano %1 [%2] +- +- +- Changed deleted objects +- Oggetti eliminati modificati +- +- +- Adding missing icon %1 +- Aggiungere l'icona mancante %1 +- +- +- Removed custom data %1 [%2] +- Dati personalizzati rimossi %1 [%2] +- +- +- Adding custom data %1 [%2] +- Aggiunta di dati personalizzati %1 [%2] +- +- +- +- NewDatabaseWizard +- +- Create a new KeePassXC database... +- Creazione di un nuovo database KeePassXC... +- +- +- Root +- Root group +- Radice +- +- +- +- NewDatabaseWizardPage +- +- WizardPage +- Pagina della procedura guidata +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Qui è possibile modificare le impostazioni di crittaggio del database. È sempre possibile modificarli dopo nelle impostazioni del database. +- +- +- Advanced Settings +- Impostazioni avanzate +- +- +- Simple Settings +- Impostazioni semplici +- +- +- Encryption Settings +- Impostazioni di crittografia +- +- +- +- NewDatabaseWizardPageDatabaseKey +- +- Database Credentials +- Credenziali database +- +- +- A set of credentials known only to you that protects your database. +- Un set di credenziali note solo a te che protegge il database. +- +- +- +- NewDatabaseWizardPageEncryption +- +- Encryption Settings +- Impostazioni di crittografia +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Qui è possibile modificare le impostazioni di crittaggio del database. È sempre possibile modificarli dopo nelle impostazioni del database. +- +- +- +- NewDatabaseWizardPageMetaData +- +- General Database Information +- Informazioni generali sul database +- +- +- Please fill in the display name and an optional description for your new database: +- Si prega di compilare il nome visualizzato e una descrizione facoltativa per il nuovo database: +- +- +- +- NixUtils +- +- Password Manager +- Gestione password +- +- +- +- OpData01 +- +- Invalid OpData01, does not contain header +- OpData01 non valido, non contiene l'intestazione +- +- +- Unable to read all IV bytes, wanted 16 but got %1 +- Impossibile leggere tutti i byte IV, desiderati 16 ma ottenuti %1 +- +- +- Unable to init cipher for opdata01: %1 +- Impossibile inizializzare la crittografia per opdata01: %1 +- +- +- Unable to read all HMAC signature bytes +- Impossibile leggere tutti i byte della firma HMAC +- +- +- Malformed OpData01 due to a failed HMAC +- OpData01 non valido a causa di un HMAC non riuscito +- +- +- Unable to process clearText in place +- Impossibile elaborare clearText sul posto +- +- +- Expected %1 bytes of clear-text, found %2 +- Previsto %1 byte di testo non crittografato, trovato %2 +- +- +- +- OpVaultOpenWidget +- +- Read Database did not produce an instance +-%1 +- Lettura del database non ha prodotto un'istanza +-%1 +- +- +- +- OpVaultReader +- +- Directory .opvault must exist +- La directory .opvault deve esistere +- +- +- Directory .opvault must be readable +- La directory .opvault deve essere leggibile +- +- +- Directory .opvault/default must exist +- Directory .opvault/default deve esistere +- +- +- Directory .opvault/default must be readable +- Directory .opvault/default deve essere leggibile +- +- +- Unable to decode masterKey: %1 +- Impossibile decodificare masterKey: %1 +- +- +- Unable to derive master key: %1 +- Impossibile derivare la chiave master: %1 +- +- +- +- OpenSSHKey +- +- Invalid key file, expecting an OpenSSH key +- File di chiave non valido, era attesa una chiave OpenSSH +- +- +- PEM boundary mismatch +- Mancata corrispondenza del marigne PEM +- +- +- Base64 decoding failed +- Decodifica base64 non riuscita +- +- +- Key file way too small. +- File chiave decisamente troppo piccolo. +- +- +- Key file magic header id invalid +- Id dell'intestazione magica del file chiave non valido +- +- +- Found zero keys +- Trovate zero chiavi +- +- +- Failed to read public key. +- Impossibile leggere la chiave privata. +- +- +- Corrupted key file, reading private key failed +- File della chiave rovinato, impossibile leggere la chiave privata +- +- +- No private key payload to decrypt +- Nessuna chiave privata da decifrare nel contenuto +- +- +- Trying to run KDF without cipher +- Sto cercando di eseguire KDF senza cifratura +- +- +- Passphrase is required to decrypt this key +- La decifrazione di questa chiave richiede una frase segreta +- +- +- Key derivation failed, key file corrupted? +- Derivazione della chiave non riuscita, file della chiave rovinato? +- +- +- Decryption failed, wrong passphrase? +- Decifrazione non riuscita, frase segreta non corretta? +- +- +- Unexpected EOF while reading public key +- EOF imprevisto durante la lettura della chiave pubblica +- +- +- Unexpected EOF while reading private key +- EOF imprevisto durante la lettura della chiave privata +- +- +- Can't write public key as it is empty +- Impossibile scrivere la chiave pubblica perché è vuota +- +- +- Unexpected EOF when writing public key +- EOF imprevisto durante la scrittura di chiave pubblica +- +- +- Can't write private key as it is empty +- Impossibile scrivere la chiave privata perché è vuota +- +- +- Unexpected EOF when writing private key +- EOF imprevisto durante la scrittura di una chiave privata +- +- +- Unsupported key type: %1 +- Tipo di chiave non supportato: %1 +- +- +- Unknown cipher: %1 +- Tipo di cifrario non supportato: %1 +- +- +- Cipher IV is too short for MD5 kdf +- Il vettore di inizializzazione del cifrario è troppo corto per la derivazione della chiave crittografica tramite MD5 +- +- +- Unknown KDF: %1 +- KDF sconosciuto: %1 +- +- +- Unknown key type: %1 +- Tipo di chiave sconosciuta: %1 +- +- +- +- PasswordEdit +- +- Passwords do not match +- Le password non corrispondono +- +- +- Passwords match so far +- Le password corrispondono finora +- +- +- Toggle Password (%1) +- Attiva/disattiva password (%1) +- +- +- Generate Password (%1) +- Genera password (%1) +- +- +- Warning: Caps Lock enabled! +- Attenzione: Caps Lock abilitato! +- +- +- +- PasswordEditWidget +- +- Enter password: +- Inserisci password: +- +- +- Confirm password: +- Conferma password: +- +- +- Password +- Password +- +- +- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> +- <p>Una password è il metodo principale per mantenere sicuro il vostro database.</p><p>Una buona password dev'essere lunga ed unica. KeePassXC può generarne una per voi.</p> +- +- +- Passwords do not match. +- Le password non corrispondono. +- +- +- Password field +- Campo password +- +- +- Repeat password field +- Campo ripeti password +- +- +- +- PasswordGeneratorWidget +- +- %p% +- %p% +- +- +- strength +- Password strength +- affidabilità +- +- +- entropy +- entropia +- +- +- Password +- Password +- +- +- Character Types +- Tipi di carattere +- +- +- Numbers +- Numeri +- +- +- Extended ASCII +- ASCII esteso +- +- +- Exclude look-alike characters +- Escludi caratteri simili +- +- +- Pick characters from every group +- Seleziona caratteri da ogni gruppo +- +- +- &Length: +- &Lunghezza: +- +- +- Passphrase +- Frase segreta +- +- +- Wordlist: +- Elenco termini: +- +- +- Word Separator: +- Separatore parole: +- +- +- Close +- Chiudi +- +- +- Entropy: %1 bit +- Entropia: %1 bit +- +- +- Password Quality: %1 +- Qualità password: %1 +- +- +- Poor +- Password quality +- Debole +- +- +- Weak +- Password quality +- Intermedia +- +- +- Good +- Password quality +- Buona +- +- +- Excellent +- Password quality +- Eccellente +- +- +- Switch to advanced mode +- Passare alla modalità avanzata +- +- +- Advanced +- Avanzate +- +- +- Braces +- Parentesi graffe +- +- +- Punctuation +- Punteggiatura +- +- +- Quotes +- Citazioni +- +- +- Logograms +- Logogrammi +- +- +- Character set to exclude from generated password +- Set di caratteri da escludere dalla password generata +- +- +- Do not include: +- Non includere: +- +- +- Add non-hex letters to "do not include" list +- Aggiungere lettere non esadecimali all'elenco "non includere" +- +- +- Hex +- Hex +- +- +- Excluded characters: "0", "1", "l", "I", "O", "|", "ï¹’" +- Escludere i caratteri: "0", "1", "l", "I", "O", "|", "ï¹’" +- +- +- Generated password +- Password generata +- +- +- Upper-case letters +- Lettere maiuscole +- +- +- Lower-case letters +- Lettere minuscole +- +- +- Special characters +- Caratteri speciali +- +- +- Math Symbols +- Simboli matematici +- +- +- Dashes and Slashes +- Trattini e barre +- +- +- Excluded characters +- Caratteri esclusi +- +- +- Hex Passwords +- Password esadecimali +- +- +- Password length +- Lunghezza password +- +- +- Word Case: +- Parole maiuscole/minuscole: +- +- +- Regenerate password +- Rigenera password +- +- +- Copy password +- Copia password +- +- +- lower case +- carattere minuscolo +- +- +- UPPER CASE +- MAIUSCOLO +- +- +- Title Case +- Titolo maiuscolo/minuscolo +- +- +- Generate Password +- Genera password +- +- +- Also choose from: +- Scegli anche tra: +- +- +- Additional characters to use for the generated password +- Caratteri aggiuntivi da utilizzare nella generazione delle password +- +- +- Additional characters +- Caratteri aggiuntivi +- +- +- Word Count: +- Conteggio parole: +- +- +- Esc +- Esc +- +- +- Apply Password +- Applica password +- +- +- Ctrl+S +- Ctrl+S +- +- +- Regenerate password (%1) +- Rigenera password (%1) +- +- +- Special Characters +- Caratteri speciali +- +- +- +- QApplication +- +- KeeShare +- KeeShare +- +- +- Statistics +- Statistiche +- +- +- Very weak password +- Password molto debole +- +- +- Password entropy is %1 bits +- L'entropia della password è %1 bits +- +- +- Weak password +- Password debole +- +- +- Used in %1/%2 +- Utilizzato in %1/%2 +- +- +- Password is used %1 times +- La password è stata utilizzata %1 volte +- +- +- Password has expired +- La password è scaduta +- +- +- Password expiry was %1 +- La password è scaduta il %1 +- +- +- Password is about to expire +- La password è in scadenza +- +- +- Password expires in %1 days +- La password scade tra %1 giorni +- +- +- Password will expire soon +- La password scadrà presto +- +- +- Password expires on %1 +- La password scade il %1 +- +- +- Health Check +- Controllo dell'integrità +- +- +- HIBP +- HIBP +- +- +- +- QMessageBox +- +- Overwrite +- Sovrascrivi +- +- +- Delete +- Elimina +- +- +- Move +- Sposta +- +- +- Empty +- Vuoto +- +- +- Remove +- Rimuovi +- +- +- Skip +- Salta +- +- +- Disable +- Disabilita +- +- +- Merge +- Incorpora +- +- +- Continue +- continuare +- +- +- +- QObject +- +- Database not opened +- Database non aperto +- +- +- Database hash not available +- Hash del database non disponibile +- +- +- Client public key not received +- Chiave pubblica del client non ricevuta +- +- +- Cannot decrypt message +- Impossibile decrittografare il messaggio +- +- +- Action cancelled or denied +- Azione annullata o negata +- +- +- KeePassXC association failed, try again +- Associazione KeePassXC fallita, riprova +- +- +- Encryption key is not recognized +- Chiave di crittografia non riconosciuta +- +- +- Incorrect action +- Azione non corretta +- +- +- Empty message received +- Ricevuto un messaggio vuoto +- +- +- No URL provided +- Nessun URL fornito +- +- +- No logins found +- Nessun login trovato +- +- +- Unknown error +- Errore sconosciuto +- +- +- Add a new entry to a database. +- Aggiungi una nuova voce al database. +- +- +- Path of the database. +- Percorso del database. +- +- +- Key file of the database. +- File chiave del database. +- +- +- path +- percorso +- +- +- Username for the entry. +- Nome utente della voce. +- +- +- username +- nome utente +- +- +- URL for the entry. +- URL della voce. +- +- +- URL +- URL +- +- +- Prompt for the entry's password. +- Richiedi la password della voce. +- +- +- Generate a password for the entry. +- Genera una password per questa voce. +- +- +- length +- lunghezza +- +- +- Path of the entry to add. +- Percorso della voce da aggiungere. +- +- +- Path of the entry to clip. +- clip = copy to clipboard +- Percorso della voce da tagliare. +- +- +- Timeout in seconds before clearing the clipboard. +- Intervallo di tempo in secondi prima di ripulire gli appunti. +- +- +- Edit an entry. +- Modifica una voce. +- +- +- Title for the entry. +- Titolo di una voce. +- +- +- title +- titolo +- +- +- Path of the entry to edit. +- Percorso della voce da modificare. +- +- +- Estimate the entropy of a password. +- Stima l'entropia di una password. +- +- +- Password for which to estimate the entropy. +- Password di cui stimare l'entropia. +- +- +- Perform advanced analysis on the password. +- Esegui un'analisi avanzata sulla password. +- +- +- +- +-Available commands: +- +- +- +-Comandi disponibili: +- +- +- +- Name of the command to execute. +- Nome del comando da eseguire. +- +- +- List database entries. +- Elenco delle voci del database. +- +- +- Path of the group to list. Default is / +- Percorso del gruppo da elencare. L'impostazione predefinita è / +- +- +- Find entries quickly. +- Cerca voci rapidamente. +- +- +- Search term. +- Termine di ricerca. +- +- +- Merge two databases. +- Unisci due database. +- +- +- Path of the database to merge from. +- Percorso del database sorgente da unire. +- +- +- Use the same credentials for both database files. +- Usa le stesse credenziali per entrambi i file di database. +- +- +- Key file of the database to merge from. +- File chiave del database da unire +- +- +- Show an entry's information. +- Mostra la informazioni di una voce. +- +- +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- Numero di attributi da mostrare. Questa opzione può essere specificata più di una volta, con ogni attributo mostrato in una riga separata nell'ordine dato. Se nessun attributo è specificato verrà dato un riassunto degli attributi predefiniti. +- +- +- attribute +- attributo +- +- +- Name of the entry to show. +- Nome della voce da visualizzare. +- +- +- NULL device +- Periferica NULL +- +- +- error reading from device +- errore di lettura dal dispositivo +- +- +- malformed string +- stringa non valida +- +- +- missing closing quote +- virgoletta di chiusura mancante +- +- +- Group +- Gruppo +- +- +- Title +- Titolo +- +- +- Username +- Nome utente +- +- +- Password +- Password +- +- +- Notes +- Note +- +- +- Last Modified +- Ultima modifica +- +- +- Created +- Creazione +- +- +- Browser Integration +- Integrazione con i browser +- +- +- SSH Agent +- Agente SSH +- +- +- Generate a new random diceware passphrase. +- Genera una nuova passphrase casuale simulando un lancio di dadi. +- +- +- Word count for the diceware passphrase. +- Numero di parole per la passphrase con lancio dei dadi +- +- +- Wordlist for the diceware generator. +-[Default: EFF English] +- Lista di parole per il generatore con lancio di dadi. +-[Predefinito: inglese EFF] +- +- +- Generate a new random password. +- Genera una nuova password casuale. +- +- +- Could not create entry with path %1. +- Impossibile creare la voce con il percorso %1. +- +- +- Enter password for new entry: +- Immettere la password per la nuova voce: +- +- +- Writing the database failed %1. +- Scrittura del database non riuscita %1. +- +- +- Successfully added entry %1. +- Aggiunta con successo la voce %1. +- +- +- Invalid timeout value %1. +- Valore di timeout %1 non valido. +- +- +- Entry %1 not found. +- Voce %1 non trovata. +- +- +- Entry with path %1 has no TOTP set up. +- La voce con percorso %1 non ha impostato TOTP. +- +- +- Clearing the clipboard in %1 second(s)... +- Cancellazione degli Appunti in %1 secondi...Cancellazione degli appunti in %1 secondo(i)... +- +- +- Clipboard cleared! +- Appunti cancellati! +- +- +- Silence password prompt and other secondary outputs. +- Silenziare la richiesta di password e altri output secondari. +- +- +- count +- CLI parameter +- conteggio +- +- +- Could not find entry with path %1. +- Impossibile trovare la voce con percorso %1. +- +- +- Not changing any field for entry %1. +- Non modificare nessun campo per la voce %1. +- +- +- Enter new password for entry: +- Immettere la nuova password per la voce: +- +- +- Writing the database failed: %1 +- Scrittura del database non riuscita: %1 +- +- +- Successfully edited entry %1. +- Voce %1 modificata correttamente. +- +- +- Length %1 +- Lunghezza %1 +- +- +- Entropy %1 +- Entropia %1 +- +- +- Log10 %1 +- Log10 %1 +- +- +- Multi-word extra bits %1 +- Multi-parola extra bit %1 +- +- +- Type: Bruteforce +- Tipo: Bruteforce +- +- +- Type: Dictionary +- Tipo: dizionario +- +- +- Type: Dict+Leet +- Type: Dict+Leet +- +- +- Type: User Words +- Tipo: parole utente +- +- +- Type: User+Leet +- Tipo: Utente+Leet +- +- +- Type: Repeated +- Tipo: ripetute +- +- +- Type: Sequence +- Tipo: sequenza +- +- +- Type: Spatial +- Tipo: spaziale +- +- +- Type: Date +- Tipo: data +- +- +- Type: Bruteforce(Rep) +- Tipo: Bruteforce(Rep) +- +- +- Type: Dictionary(Rep) +- Tipo: dizionario(Rep) +- +- +- Type: Dict+Leet(Rep) +- Tipo: Dict+Leet(Rep) +- +- +- Type: User Words(Rep) +- Tipo: Parole utente (Rep) +- +- +- Type: User+Leet(Rep) +- Tipo: Utente+Leet(Rep) +- +- +- Type: Repeated(Rep) +- Tipo: Ripetuto(Rep) +- +- +- Type: Sequence(Rep) +- Tipo: Sequenza(Rep) +- +- +- Type: Spatial(Rep) +- Tipo: Spaziale(Rep) +- +- +- Type: Date(Rep) +- Tipo: Data(Rep) +- +- +- Type: Unknown%1 +- Tipo: Sconosciuto %1 +- +- +- Entropy %1 (%2) +- Entropia %1 (%2) +- +- +- *** Password length (%1) != sum of length of parts (%2) *** +- *** Lunghezza della password (%1) != somma della lunghezza delle parti (%2) *** +- +- +- Failed to load key file %1: %2 +- Impossibile caricare il file di chiave %1: %2 +- +- +- Length of the generated password +- Lunghezza della password generata +- +- +- Use lowercase characters +- Utilizzare caratteri minuscoli +- +- +- Use uppercase characters +- Utilizzare caratteri maiuscoli +- +- +- Use special characters +- Utilizzare caratteri speciali +- +- +- Use extended ASCII +- Usare ASCII esteso +- +- +- Exclude character set +- Escludere il set di caratteri +- +- +- chars +- chars +- +- +- Exclude similar looking characters +- Escludere i caratteri dall'aspetto simile +- +- +- Include characters from every selected group +- Includere i caratteri da ogni gruppo selezionato +- +- +- Recursively list the elements of the group. +- Elencare gli elementi del gruppo in modo ricorsivo. +- +- +- Cannot find group %1. +- Impossibile trovare il gruppo %1. +- +- +- Error reading merge file: +-%1 +- Errore durante la lettura del file di unione: +-%1 +- +- +- Unable to save database to file : %1 +- Impossibile salvare il database nel file : %1 +- +- +- Unable to save database to file: %1 +- Impossibile salvare il database nel file: %1 +- +- +- Successfully recycled entry %1. +- Riciclata con successo la voce %1. +- +- +- Successfully deleted entry %1. +- Eliminata la voce %1. +- +- +- Show the entry's current TOTP. +- Mostra il TOTP corrente della voce. +- +- +- ERROR: unknown attribute %1. +- ERRORE: attributo sconosciuto %1. +- +- +- No program defined for clipboard manipulation +- Nessun programma definito per la manipolazione degli appunti +- +- +- file empty +- file vuoto +- +- +- %1: (row, col) %2,%3 +- %1: (riga, col) %2,%3 +- +- +- AES-KDF (KDBX 4) +- AES-KDF (KDBX 4) +- +- +- AES-KDF (KDBX 3.1) +- AES-KDF (KDBX 3.1) +- +- +- Invalid Settings +- TOTP +- Impostazioni non valide +- +- +- Invalid Key +- TOTP +- Chiave non valida +- +- +- Message encryption failed. +- Crittografia del messaggio non riuscita. +- +- +- No groups found +- Nessun gruppo trovato +- +- +- Create a new database. +- Crea un nuovo database. +- +- +- File %1 already exists. +- Il file %1 esiste già. +- +- +- Loading the key file failed +- Caricamento del key-file fallito. +- +- +- No key is set. Aborting database creation. +- Chiave non impostata. Annullamento creazione database. +- +- +- Failed to save the database: %1. +- Impossibile salvare il database: %1. +- +- +- Successfully created new database. +- Nuovo database creato con successo. +- +- +- Creating KeyFile %1 failed: %2 +- Creazione di KeyFile %1 non riuscita: %2 +- +- +- Loading KeyFile %1 failed: %2 +- Caricamento del KeyFile %1 non riuscito: %2 +- +- +- Path of the entry to remove. +- Percorso della voce da rimuovere. +- +- +- Existing single-instance lock file is invalid. Launching new instance. +- Il file di blocco singola istanza non è valido. Viene eseguita una nuova istanza. +- +- +- The lock file could not be created. Single-instance mode disabled. +- Il file di blocco non può essere creato. La modalità a istanza singola è disattivata. +- +- +- KeePassXC - cross-platform password manager +- KeePassXC - gestore di password multipiattaforma +- +- +- filenames of the password databases to open (*.kdbx) +- i nomi dei file di database delle password da aprire (*.kdbx) +- +- +- path to a custom config file +- percorso ad un file di configurazione personalizzato +- +- +- key file of the database +- file chiave del database +- +- +- read password of the database from stdin +- leggi la password del database da stdin +- +- +- Another instance of KeePassXC is already running. +- È già in esecuzione un'altra istanza di KeePassXC. +- +- +- Fatal error while testing the cryptographic functions. +- Errore fatale durante il test delle funzioni di crittografia. +- +- +- KeePassXC - Error +- KeePassXC - Errore +- +- +- Database password: +- Password del database: +- +- +- Cannot create new group +- Impossibile creare un nuovo gruppo +- +- +- Deactivate password key for the database. +- Disattivare la chiave della password per il database. +- +- +- Displays debugging information. +- Visualizza le informazioni di debug. +- +- +- Deactivate password key for the database to merge from. +- Disattivare la chiave della password per il database da cui eseguire l'unione. +- +- +- Version %1 +- Versione %1 +- +- +- Build Type: %1 +- Tipo di compilazione: %1 +- +- +- Revision: %1 +- Revisione: %1 +- +- +- Distribution: %1 +- Distribuzione: %1 +- +- +- Debugging mode is disabled. +- La modalità di debug è disabilitata. +- +- +- Debugging mode is enabled. +- La modalità di debug è abilitata. +- +- +- Operating system: %1 +-CPU architecture: %2 +-Kernel: %3 %4 +- Sistema operativo: %1 +-Architettura CPU: %2 +-Kernel: %3 %4 +- +- +- Auto-Type +- Completamento automatico +- +- +- KeeShare (signed and unsigned sharing) +- KeeShare (condivisione firmata e non firmata) +- +- +- KeeShare (only signed sharing) +- KeeShare (solo condivisione firmata) +- +- +- KeeShare (only unsigned sharing) +- KeeShare (solo condivisione non firmata) +- +- +- YubiKey +- YubiKey +- +- +- TouchID +- TouchID +- +- +- None +- Nessuno +- +- +- Enabled extensions: +- Estensioni abilitate: +- +- +- Cryptographic libraries: +- Librerie crittografiche: +- +- +- Cannot generate a password and prompt at the same time! +- Impossibile generare una password e richiederla contemporaneamente! +- +- +- Adds a new group to a database. +- Aggiunge un nuovo gruppo a un database. +- +- +- Path of the group to add. +- Percorso del gruppo da aggiungere. +- +- +- Group %1 already exists! +- Il gruppo %1 esiste già! +- +- +- Group %1 not found. +- Gruppo %1 non trovato. +- +- +- Successfully added group %1. +- Aggiunta del gruppo %1 completata. +- +- +- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. +- Verificare se le password sono state rivelate pubblicamente. FILENAME deve essere il percorso di un file che elenca gli hashe SHA-1 delle password rivelate in formato HIBP, come disponibile da https://haveibeenpwned.com/Passwords. +- +- +- FILENAME +- Filename +- +- +- Analyze passwords for weaknesses and problems. +- Analizzare le password per trovare punti deboli e problemi. +- +- +- Failed to open HIBP file %1: %2 +- Impossibile aprire il file HIBP %1: %2 +- +- +- Evaluating database entries against HIBP file, this will take a while... +- Valutare le voci del database rispetto al file HIBP, questo richiederà un po' di tempo... +- +- +- Close the currently opened database. +- Chiudere il database attualmente aperto. +- +- +- Display this help. +- Visualizza questa guida. +- +- +- slot +- slot +- +- +- Invalid word count %1 +- Conteggio parole non valido %1 +- +- +- The word list is too small (< 1000 items) +- L'elenco delle parole è troppo piccolo (< 1000 voci) +- +- +- Exit interactive mode. +- Uscire dalla modalità interattiva. +- +- +- Exports the content of a database to standard output in the specified format. +- Esporta il contenuto di un database nell'output standard nel formato specificato. +- +- +- Unable to export database to XML: %1 +- Impossibile esportare il database in XML: %1 +- +- +- Unsupported format %1 +- Formato non supportato %1 +- +- +- Use numbers +- Utilizzare i numeri +- +- +- Invalid password length %1 +- Lunghezza password non valida %1 +- +- +- Display command help. +- Visualizzare la guida del comando. +- +- +- Available commands: +- Comandi disponibili: +- +- +- Import the contents of an XML database. +- Importare il contenuto di un database XML. +- +- +- Path of the XML database export. +- Percorso dell'esportazione del database XML. +- +- +- Path of the new database. +- Percorso del nuovo database. +- +- +- Successfully imported database. +- Database importato correttamente. +- +- +- Unknown command %1 +- Comando sconosciuto %1 +- +- +- Flattens the output to single lines. +- Appiattisce l'output su singole linee. +- +- +- Only print the changes detected by the merge operation. +- Stampare solo le modifiche rilevate dall'operazione di unione. +- +- +- Yubikey slot for the second database. +- Slot Yubikey per il secondo database. +- +- +- Successfully merged %1 into %2. +- È stato possibile unire con successo %1 in %2. +- +- +- Database was not modified by merge operation. +- Il database non è stato modificato dall'operazione di unione. +- +- +- Moves an entry to a new group. +- Sposta una voce in un nuovo gruppo. +- +- +- Path of the entry to move. +- Percorso della voce da spostare. +- +- +- Path of the destination group. +- Percorso del gruppo di destinazione. +- +- +- Could not find group with path %1. +- Impossibile trovare il gruppo con percorso %1. +- +- +- Entry is already in group %1. +- La voce è già nel gruppo %1. +- +- +- Successfully moved entry %1 to group %2. +- È stata spostata correttamente la voce %1 nel gruppo %2. +- +- +- Open a database. +- Aprire un database. +- +- +- Path of the group to remove. +- Percorso del gruppo da rimuovere. +- +- +- Cannot remove root group from database. +- Impossibile rimuovere il gruppo radice dal database. +- +- +- Successfully recycled group %1. +- Riciclato con successo il gruppo %1. +- +- +- Successfully deleted group %1. +- Eliminazione del gruppo %1 completata. +- +- +- Failed to open database file %1: not found +- Impossibile aprire il file di database %1: non trovato +- +- +- Failed to open database file %1: not a plain file +- Impossibile aprire il file di database %1: non un file piatto +- +- +- Failed to open database file %1: not readable +- Impossibile aprire il file di database %1: non leggibile +- +- +- Enter password to unlock %1: +- Immettere la password per sbloccare %1: +- +- +- Invalid YubiKey slot %1 +- Slot YubiKey non valido %1 +- +- +- Enter password to encrypt database (optional): +- Immettere la password per crittografare il database (facoltativo): +- +- +- HIBP file, line %1: parse error +- File HIBP, riga %1: errore di analisi +- +- +- Secret Service Integration +- Integrazione del servizio segreto +- +- +- User name +- Nome utente +- +- +- Password for '%1' has been leaked %2 time(s)! +- La password per '%1' è trapelata %2 volta!La password per '%1' è trapelata %2 volte! +- +- +- Invalid password generator after applying all options +- Generatore di password non valido dopo l'applicazione di tutte le opzioni +- +- +- Show the protected attributes in clear text. +- Mostra in chiaro gli attributi protetti +- +- +- Browser Plugin Failure +- Errore del plug-in del browser +- +- +- Could not save the native messaging script file for %1. +- Impossibile salvare il file di script nativo di messaggistica per %1. +- +- +- Copy the given attribute to the clipboard. Defaults to "password" if not specified. +- Copia l'attributo negli appunti. L'impostazione predefinita è "password" se non specificato. +- +- +- Copy the current TOTP to the clipboard (equivalent to "-a totp"). +- Copiare il TOTP negli appunti. (analogo a "-a totp"). +- +- +- Copy an entry's attribute to the clipboard. +- Copia l'attributo della voce negli appunti. +- +- +- ERROR: Please specify one of --attribute or --totp, not both. +- ERRORE: Specificare uno solo tra attributo o TOTOP, non entrambi. +- +- +- ERROR: attribute %1 is ambiguous, it matches %2. +- ERRORE: l'attributo %1 è ambiguo, corrisponde con %2. +- +- +- Attribute "%1" not found. +- Attributo "%1" non trovato. +- +- +- Entry's "%1" attribute copied to the clipboard! +- Attributo della voce "%1" copiato negli appunti! +- +- +- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). +- Slot Yubikey e porta seriale opzionale utilizzata per l'accesso al database (es. 1:7370001). +- +- +- slot[:serial] +- slot[:serial] +- +- +- Target decryption time in MS for the database. +- Il tempo di decrittazione del database in MS. +- +- +- time +- orario +- +- +- Set the key file for the database. +- Imposta un file chiave per il database +- +- +- Set a password for the database. +- Imposta una password per il database +- +- +- Invalid decryption time %1. +- Tempo di decrittazione non valido %1. +- +- +- Target decryption time must be between %1 and %2. +- Il tempo di decrittazione deve essere compreso tra %1 e %2. +- +- +- Failed to set database password. +- Impossibile salvare la password del database. +- +- +- Benchmarking key derivation function for %1ms delay. +- Test delle prestazioni della chiave di derivazione per %1ms di ritardo. +- +- +- Setting %1 rounds for key derivation function. +- Impostare %1 iterazioni per la funzione di derivazione della chiave. +- +- +- error while setting database key derivation settings. +- Errore durante il salvataggio delle impostazioni della chiave di derivazione. +- +- +- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. +- Formati utilizzabile per l'esportazione. E' possibile scegliere tra 'xml' e 'csv'. L'impostazione predefinita è 'xml'. +- +- +- Unable to import XML database: %1 +- Impossibile importare il database XML: %1 +- +- +- Show a database's information. +- Mostra le informazioni di un database. +- +- +- UUID: +- UUID: +- +- +- Name: +- Nome: +- +- +- Description: +- Descrizione: +- +- +- Cipher: +- Cifrario: +- +- +- KDF: +- Kdf: +- +- +- Recycle bin is enabled. +- Il cestino è abilitato +- +- +- Recycle bin is not enabled. +- Il cestino non è abilitato +- +- +- Invalid command %1. +- Comando non valido %1. +- +- +- Invalid YubiKey serial %1 +- Seriale YubiKey %1 non valido +- +- +- Please touch the button on your YubiKey to continue… +- Premere il pulsante della YubiKey per continuare +- +- +- Do you want to create a database with an empty password? [y/N]: +- Si vuole davvero creare un database senza una password? [y/N]: +- +- +- Repeat password: +- Ripeti password: +- +- +- Error: Passwords do not match. +- Errore: le password non corrispondono +- +- +- All clipping programs failed. Tried %1 +- +- Tutti i programmi di ritaglio hanno riscontrato errori. Provati %1 +- +- +- +- AES (%1 rounds) +- AES (%1 turni) +- +- +- AES 256-bit +- AES 256-bit +- +- +- Twofish 256-bit +- Twofish 256-bit +- +- +- ChaCha20 256-bit +- ChaCha20: 256-bit {20 256-?} +- +- +- Benchmark %1 delay +- Test delle prestazioni %1 ritardo +- +- +- %1 ms +- milliseconds +- %1 ms%1 ms +- +- +- %1 s +- seconds +- %1 s%1 s +- +- +- path to a custom local config file +- Percorso di un file di configurazione locale personalizzato +- +- +- WARNING: You are using an old key file format which KeePassXC may +-stop supporting in the future. +- +-Please consider generating a new key file. +- ATTENZIONE: stai utilizzando un vecchio formato di file chiave che KeePassXC potrebbe +-smettere di supportare in futuro. +- +-Prendere in considerazione la possibilità di generare un nuovo file di chiave. +- +- +- Argon2%1 (%2 rounds, %3 KB) +- Argon2%1 (%2 passaggi, %3 KB) +- +- +- Argon2d (KDBX 4 – recommended) +- Argon2d (KDBX 4 – consigliato) +- +- +- Argon2id (KDBX 4) +- Argon2id (KDBX 4) +- +- +- TOTP +- TOTP +- +- +- Icon +- Icona +- +- +- Unsupported key file version: %1 +- Versione del file chiave non supportata: %1 +- +- +- Checksum mismatch! Key file may be corrupt. +- Checksum non corrispondente! Il file chiave potrebbe essere danneggiato. +- +- +- Unexpected key file data! Key file may be corrupt. +- Dati di file chiave imprevisti! Il file chiave potrebbe essere danneggiato. +- +- +- +- QtIOCompressor +- +- Internal zlib error when compressing: +- Errore interno di zlib durante la compressione: +- +- +- Error writing to underlying device: +- Errore durante la scrittura nel dispositivo: +- +- +- Error opening underlying device: +- Errore durante l'apertura del dispositivo: +- +- +- Error reading data from underlying device: +- Errore durante la lettura dal dispositivo: +- +- +- Internal zlib error when decompressing: +- Errore interno di zlib durante la decompressione: +- +- +- +- QtIOCompressor::open +- +- The gzip format not supported in this version of zlib. +- Formato gzip non supportato da questa versione di zlib. +- +- +- Internal zlib error: +- Errore interno di zlib: +- +- +- +- ReportsWidgetHealthcheck +- +- Also show entries that have been excluded from reports +- Mostra anche le voci escluse dai rapporti +- +- +- Hover over reason to show additional details. Double-click entries to edit. +- Spostare il cursore sulla notifica per vedere dettagli aggiuntivi. Doppio-click per modificare la voce. +- +- +- Bad +- Password quality +- Scadente +- +- +- Bad — password must be changed +- Scadente: la password deve essere modificata +- +- +- Poor +- Password quality +- Debole +- +- +- Poor — password should be changed +- Inefficace — la password dovrebbe essere cambiata +- +- +- Weak +- Password quality +- Intermedia +- +- +- Weak — consider changing the password +- Debole — considera di cambiare password +- +- +- (Excluded) +- (Esclusa) +- +- +- This entry is being excluded from reports +- Questa voce è stata esclusa dai rapporti +- +- +- Please wait, health data is being calculated... +- Attendere, controllo di integrità in corso +- +- +- Congratulations, everything is healthy! +- Congratulazioni, nessun problema rilevato! +- +- +- Title +- Titolo +- +- +- Path +- Percorso +- +- +- Score +- Punteggio +- +- +- Reason +- Motivo +- +- +- Edit Entry... +- Modifica voce +- +- +- Exclude from reports +- Escludere dal rapporto +- +- +- +- ReportsWidgetHibp +- +- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. +- ATTENZIONE: Questo rapporto richiede l'invio di informazioni al servizio online Have I Been Pwned (https://haveibeenpwned.com). Se si procede le password verranno crittografate e i primi cinque caratteri verranno inviati in modo sicuro al servizio. Il tuo database rimane sicuro e non può essere ricostruito da queste informazioni. Tuttavia il numero di password inviate sarà esposto a questo servizio. +- +- +- Perform Online Analysis +- Esegui un'analisi online +- +- +- Also show entries that have been excluded from reports +- Mostra anche le voci escluse dai rapporti +- +- +- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. +- Questa versione di KeePassXC non possiede funzionalità di rete. La funzionalità di rete è richiesta per verificare la tua password con i database di Have I Been Pwned +- +- +- Congratulations, no exposed passwords! +- Congratulazioni, nessuna password esposta! +- +- +- Title +- Titolo +- +- +- Path +- Percorso +- +- +- Password exposed… +- Password esposta +- +- +- (Excluded) +- (Esclusa) +- +- +- This entry is being excluded from reports +- Questa voce è stata esclusa dai rapporti +- +- +- once +- una volta +- +- +- up to 10 times +- fino a 10 volte +- +- +- up to 100 times +- fino a 100 volte +- +- +- up to 1000 times +- fino a 1000 volte +- +- +- up to 10,000 times +- fino a 10,000 volte +- +- +- up to 100,000 times +- fino a 100,000 volte +- +- +- up to a million times +- fino ad un milione di volte +- +- +- millions of times +- milioni di volte +- +- +- Edit Entry... +- Modifica voce +- +- +- Exclude from reports +- Escludere dal rapporto +- +- +- +- ReportsWidgetStatistics +- +- Hover over lines with error icons for further information. +- Passare il mouse sulle righe con icone di errore per ulteriori informazioni. +- +- +- Name +- Nome +- +- +- Value +- Valore +- +- +- Please wait, database statistics are being calculated... +- Attendere, calcolo statistiche del database... +- +- +- Database name +- Nome del database +- +- +- Description +- descrizione +- +- +- Location +- Posizione +- +- +- Last saved +- Ultimo salvataggio +- +- +- Unsaved changes +- Modifiche non salvate +- +- +- yes +- sì +- +- +- no +- No +- +- +- The database was modified, but the changes have not yet been saved to disk. +- Il database è stato modificato, ma le modifiche non sono ancora state salvate su disco. +- +- +- Number of groups +- Numero di gruppi +- +- +- Number of entries +- Numero di voci +- +- +- Number of expired entries +- Numero di voci scadute +- +- +- The database contains entries that have expired. +- Il database contiene voci scadute. +- +- +- Unique passwords +- Password univoche +- +- +- Non-unique passwords +- Password non univoche +- +- +- More than 10% of passwords are reused. Use unique passwords when possible. +- Più del 10% delle password vengono riutilizzate. Utilizzare password univoche quando possibile. +- +- +- Maximum password reuse +- Massimo riutilizzo della password +- +- +- Some passwords are used more than three times. Use unique passwords when possible. +- Alcune password vengono utilizzate più di tre volte. Utilizzare password univoche quando possibile. +- +- +- Number of short passwords +- Numero di password brevi +- +- +- Recommended minimum password length is at least 8 characters. +- La lunghezza minima consigliata per la password è di almeno 8 caratteri. +- +- +- Number of weak passwords +- Numero di password deboli +- +- +- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. +- Consiglia di utilizzare password lunghe e randomizzate con una valutazione "buona" o "eccellente". +- +- +- Entries excluded from reports +- Voci escluse dal rapporto +- +- +- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. +- Escludere voci dal rapporto, ad esempio perché possiedono una password scadente, non è necessariamente un problema ma dovrebbero essere tenute sotto controllo. +- +- +- Average password length +- Lunghezza media password +- +- +- %1 characters +- %1 caratteri +- +- +- Average password length is less than ten characters. Longer passwords provide more security. +- La lunghezza media della password è inferiore a dieci caratteri. Le password più lunghe offrono maggiore sicurezza. +- +- +- +- SSHAgent +- +- Agent connection failed. +- Connessione con l'agente non riuscita. +- +- +- Agent protocol error. +- Errore di protocollo dell'agente. +- +- +- No agent running, cannot add identity. +- Nessun agente in esecuzione, impossibile aggiungere un'identità. +- +- +- No agent running, cannot remove identity. +- Nessun agente in esecuzione, non è possibile rimuovere l'identità. +- +- +- Agent refused this identity. Possible reasons include: +- L'agente ha rifiutato questa identità. Motivi possibili sono: +- +- +- The key has already been added. +- La chiave è già stata aggiunta. +- +- +- Restricted lifetime is not supported by the agent (check options). +- Durata limitata non è supportata dall'agente (controllare le opzioni). +- +- +- A confirmation request is not supported by the agent (check options). +- Una richiesta di conferma non è supportata dall'agente (controllare le opzioni). +- +- +- Key identity ownership conflict. Refusing to add. +- Identificativo del proprietario della chiave in conflitto. Aggiunta negata. +- +- +- No agent running, cannot list identities. +- Nessun agente in esecuzione non può elencare le identità. +- +- +- +- SearchHelpWidget +- +- Search Help +- Cercare nell'aiuto +- +- +- Search terms are as follows: [modifiers][field:]["]term["] +- I termini di ricerca sono i seguenti: [modificatori][campo:]["]termine["] +- +- +- Every search term must match (ie, logical AND) +- Ogni termine di ricerca deve corrispondere (per esempio AND logico) +- +- +- Modifiers +- Modificatori +- +- +- exclude term from results +- Escludere il termine dai risultati +- +- +- match term exactly +- Corrispondenza esatta dei termini +- +- +- use regex in term +- utilizzare regex nel termine +- +- +- Fields +- Campi +- +- +- Term Wildcards +- Termine caratteri jolly +- +- +- match anything +- corrispondenza con qualsiasi cosa +- +- +- match one +- corrisponde a uno +- +- +- logical OR +- OR logico +- +- +- Examples +- Esempi +- +- +- +- SearchWidget +- +- Search +- Cerca +- +- +- Limit search to selected group +- Limita la ricerca al gruppo selezionato +- +- +- Search Help +- Cercare nell'aiuto +- +- +- Search (%1)... +- Search placeholder text, %1 is the keyboard shortcut +- Ricerca (%1)... +- +- +- Case sensitive +- Riconoscimento di maiuscole e minuscole +- +- +- +- SettingsWidgetFdoSecrets +- +- Options +- Opzioni +- +- +- Enable KeepassXC Freedesktop.org Secret Service integration +- Abilitare l'integrazione di KeepassXC con Freedesktop.org Secret Service +- +- +- General +- Generale +- +- +- Show notification when credentials are requested +- Mostra notifica quando vengono richieste le credenziali +- +- +- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> +- <html><head/><body><p>Se il cestino è abilitato per il database, le voci verranno spostate direttamente nel cestino. In caso contrario, verranno eliminati senza conferma.</p><p>Continuerai a essere interpellato se qualsiasi voce fa riferimento ad altre.</p></body></html> +- +- +- Exposed database groups: +- Gruppi di database esposti: +- +- +- Authorization +- Autorizzazione +- +- +- These applications are currently connected: +- Queste applicazioni sono attualmente connesse: +- +- +- Don't confirm when entries are deleted by clients +- Non confermare quando le voci vengono eliminate dai client +- +- +- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. +- <b>Errore:</b> Impossibile connettersi a DBus. Verificare le impostazioni di DBus. +- +- +- <b>Warning:</b> +- <b>Attenzione:</b> +- +- +- Save current changes to activate the plugin and enable editing of this section. +- Salvare i cambiamenti per attivare il plugin e modificare questa sezione. +- +- +- +- SettingsWidgetKeeShare +- +- Active +- Attivo +- +- +- Allow export +- Consenti esportazione +- +- +- Allow import +- Consenti importazione +- +- +- Own certificate +- Certificato proprio +- +- +- Fingerprint: +- impronta digitale: +- +- +- Certificate: +- Certificato: +- +- +- Signer +- Firmatario +- +- +- Key: +- Chiave: +- +- +- Generate +- Genera +- +- +- Import +- Importazione +- +- +- Export +- Esportare +- +- +- Imported certificates +- Certificati importati +- +- +- Trust +- Attendibilità +- +- +- Ask +- Chiedere +- +- +- Untrust +- L'inattendibilità +- +- +- Remove +- Rimuovi +- +- +- Path +- Percorso +- +- +- Status +- Stato +- +- +- Fingerprint +- Impronta digitale +- +- +- Certificate +- Certificato +- +- +- Trusted +- Fidato +- +- +- Untrusted +- Non attendibile +- +- +- Unknown +- Sconosciuto +- +- +- key.share +- Filetype for KeeShare key +- key.share +- +- +- KeeShare key file +- File chiave KeeShare +- +- +- All files +- Tutti i file +- +- +- Select path +- Seleziona tracciato +- +- +- Exporting changed certificate +- Esportazione del certificato modificato +- +- +- The exported certificate is not the same as the one in use. Do you want to export the current certificate? +- Il certificato esportato non corrisponde a quello in uso. Esportare il certificato corrente? +- +- +- Signer: +- Firmatario: +- +- +- Allow KeeShare imports +- Consenti importazioni KeeShare +- +- +- Allow KeeShare exports +- Consenti esportazioni KeeShare +- +- +- Only show warnings and errors +- Mostra solo avvisi ed errori +- +- +- Key +- Chiave +- +- +- Signer name field +- Campo nome firmatario +- +- +- Generate new certificate +- Genera nuovo certificato +- +- +- Import existing certificate +- Importa certificato esistente +- +- +- Export own certificate +- Esporta il proprio certificato +- +- +- Known shares +- Condivisioni conosciute +- +- +- Trust selected certificate +- Considera attendibile il certificato selezionato +- +- +- Ask whether to trust the selected certificate every time +- Chiedere ogni volta se considerare attendibile il certificato selezionato +- +- +- Untrust selected certificate +- Certificato selezionato non attendibile +- +- +- Remove selected certificate +- Rimuovere il certificato selezionato +- +- +- +- ShareExport +- +- Overwriting signed share container is not supported - export prevented +- La sovrascrittura del contenitore di condivisioni con firma non è supportata - l'esportazione non è consentita +- +- +- Could not write export container (%1) +- Impossibile scrivere il contenitore di esportazione (%1) +- +- +- Could not embed signature: Could not open file to write (%1) +- Impossibile incorporare la firma: Impossibile aprire il file da scrivere (%1) +- +- +- Could not embed signature: Could not write file (%1) +- Impossibile incorporare la firma: Impossibile scrivere il file (%1) +- +- +- Could not embed database: Could not open file to write (%1) +- Impossibile incorporare il database: Impossibile aprire il file da scrivere (%1) +- +- +- Could not embed database: Could not write file (%1) +- Impossibile incorporare il database: impossibile scrivere il file (%1) +- +- +- Overwriting unsigned share container is not supported - export prevented +- La sovrascrittura del contenitore di condivisione non firmato non è supportata - l'esportazione non è consentita +- +- +- Could not write export container +- Impossibile scrivere il contenitore di esportazione +- +- +- Unexpected export error occurred +- Si è verificato un errore di esportazione imprevisto +- +- +- +- ShareImport +- +- Import from container without signature +- Importa da contenitore senza firma +- +- +- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? +- Non è possibile verificare l'origine del contenitore condiviso perché non è firmato. Si desidera davvero importare da %1? +- +- +- Import from container with certificate +- Importa dal contenitore con certificato +- +- +- Do you want to trust %1 with the fingerprint of %2 from %3? +- Si desidera considerare attendibile %1 con l'impronta digitale di %2 da %3? {1 ?} {2 ?} +- +- +- Not this time +- Non questa volta +- +- +- Never +- Mai +- +- +- Always +- Sempre +- +- +- Just this time +- Solo questa volta +- +- +- Signed share container are not supported - import prevented +- Contenitori di condivisione firmati non supportati - importazione non consentita +- +- +- File is not readable +- Il file non è leggibile +- +- +- Invalid sharing container +- Contenitore di condivisione non valido +- +- +- Untrusted import prevented +- Importazione non attendibile impedita +- +- +- Successful signed import +- Importazione firmata correttamente +- +- +- Unsigned share container are not supported - import prevented +- Contenitori di condivisione non firmati non sono supportati - importazione non consentita +- +- +- Successful unsigned import +- Importazione non firmata riuscita +- +- +- File does not exist +- Il file non esiste +- +- +- Unknown share container type +- Tipo di contenitore di condivisione sconosciuto +- +- +- +- ShareObserver +- +- Import from %1 failed (%2) +- Importazione da %1 non riuscita (%2) +- +- +- Import from %1 successful (%2) +- Importazione da %1 riuscita (%2) +- +- +- Imported from %1 +- Importato da %1 +- +- +- Export to %1 failed (%2) +- Esportazione in %1 non riuscita (%2) +- +- +- Export to %1 successful (%2) +- Esportazione in %1 riuscita (%2) +- +- +- Export to %1 +- Esporta in %1 +- +- +- Multiple import source path to %1 in %2 +- Percorso multiplo di sorgente di importazione a %1 in %2 +- +- +- Conflicting export target path %1 in %2 +- Percorso di destinazione esportazione in conflitto %1 in %2 +- +- +- +- TotpDialog +- +- Timed Password +- Password temporizzata +- +- +- 000000 +- 000000 +- +- +- Copy +- Copia +- +- +- Expires in <b>%n</b> second(s) +- Scadenza tra <b>%n</b> secondiScadenza tra <b>%n</b> secondo(i) +- +- +- +- TotpExportSettingsDialog +- +- Copy +- Copia +- +- +- NOTE: These TOTP settings are custom and may not work with other authenticators. +- TOTP QR code dialog warning +- NOTA: queste impostazioni TOTP sono personalizzate e potrebbero non funzionare con altri autenticatori. +- +- +- There was an error creating the QR code. +- Si è verificato un errore durante la creazione del codice QR. +- +- +- Closing in %1 seconds. +- Chiusura tra %1 secondi. +- +- +- +- TotpSetupDialog +- +- Setup TOTP +- Imposta TOTP +- +- +- Default RFC 6238 token settings +- Impostazioni predefinite per il token RFC 6238 +- +- +- Steam token settings +- Impostazioni del token di Steam +- +- +- Use custom settings +- Usa le impostazioni personalizzate +- +- +- Custom Settings +- Impostazioni personalizzate +- +- +- Time step: +- Passo temporale: +- +- +- sec +- Seconds +- sec +- +- +- Code size: +- Dimensioni codice: +- +- +- Secret Key: +- Chiave segreta: +- +- +- Secret key must be in Base32 format +- La chiave segreta deve essere in formato Base32 +- +- +- Secret key field +- Campo chiave segreta +- +- +- Algorithm: +- Algoritmo: +- +- +- Time step field +- Campo del passo temporale +- +- +- digits +- cifre +- +- +- Invalid TOTP Secret +- Segreto TOTP non valido +- +- +- You have entered an invalid secret key. The key must be in Base32 format. +-Example: JBSWY3DPEHPK3PXP +- È stata immessa una chiave segreta non valida. La chiave deve essere in formato Base32. +-Esempio: JBSWY3DPEHPK3PXP +- +- +- Confirm Remove TOTP Settings +- Conferma rimozione impostazioni TOTP +- +- +- Are you sure you want to delete TOTP settings for this entry? +- Sei sicuro di voler eliminare le impostazioni TOTP per questa voce? +- +- +- +- URLEdit +- +- Invalid URL +- URL non corretto +- +- +- +- UpdateCheckDialog +- +- Checking for updates +- Verifica della disponibilità di aggiornamenti +- +- +- Checking for updates... +- Verifica disponibilità aggiornamenti in corso... +- +- +- Close +- Chiudi +- +- +- Update Error! +- Errore di aggiornamento! +- +- +- An error occurred in retrieving update information. +- Si è verificato un errore durante il recupero delle informazioni sull'aggiornamento. +- +- +- Please try again later. +- Riprova più tardi. +- +- +- Software Update +- Aggiornamento software +- +- +- A new version of KeePassXC is available! +- È disponibile una nuova versione di KeePassXC! +- +- +- KeePassXC %1 is now available — you have %2. +- KeePassXC %1 è ora disponibile — hai %2. +- +- +- Download it at keepassxc.org +- Scaricalo da keepassxc.org +- +- +- You're up-to-date! +- Sei aggiornato! +- +- +- KeePassXC %1 is currently the newest version available +- KeePassXC %1 è attualmente la versione più recente disponibile +- +- +- +- WelcomeWidget +- +- Start storing your passwords securely in a KeePassXC database +- Inizia ad archiviare le tue password in modo sicuro in un database di KeePassXC +- +- +- Create new database +- Crea un nuovo database +- +- +- Open existing database +- Apri un database esistente +- +- +- Import from KeePass 1 +- Importa da KeePass 1 +- +- +- Import from CSV +- Importa da CSV +- +- +- Recent databases +- Database recenti +- +- +- Welcome to KeePassXC %1 +- Benvenuto in KeePassXC %1 +- +- +- Import from 1Password +- Importa da 1Password +- +- +- Open a recent database +- Aprire un database recente +- +- +- +- YubiKey +- +- %1 [%2] Configured Slot - %3 +- %1 [%2] Configurazione Slot - %3 +- +- +- %1 [%2] Challenge Response - Slot %3 - %4 +- %1 [%2] Challenge Response - Slot %3 - %4 +- +- +- Press +- Premi +- +- +- Passive +- Passiva +- +- +- %1 Invalid slot specified - %2 +- %1 Slot specificato non valido - %2 +- +- +- The YubiKey interface has not been initialized. +- L'interfaccia YubiKey non è stata inizializzata. +- +- +- Hardware key is currently in use. +- La chiave hardware è già in uso. +- +- +- Could not find hardware key with serial number %1. Please plug it in to continue. +- Non è stato possibile trovare una chiave hardware nello slot numero %1. Per favore collegarne una per procedere. +- +- +- Hardware key timed out waiting for user interaction. +- Sessione della chiave hardware scaduta aspettando un interazione da parte dell'utente. +- +- +- A USB error ocurred when accessing the hardware key: %1 +- Si è verificato un errore USB durante l'accesso alla chiave hardware: %1 +- +- +- Failed to complete a challenge-response, the specific error was: %1 +- Impossibile completare challenge-response, l'errore specifico è: %1 +- +- +- +- YubiKeyEditWidget +- +- Refresh +- Aggiorna +- +- +- YubiKey Challenge-Response +- YubiKey Risposta di verifica +- +- +- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- <p>Se si possiede un <a href="https://www.yubico.com/">YubiKey</a>, è possibile utilizzarlo per una maggiore sicurezza.</p><p>YubiKey richiede che uno dei suoi slot sia programmato come <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">Risposta di verifica HMAC-SHA1</a>.</p> +- +- +- Refresh hardware tokens +- Aggiornare i token hardware +- +- +- Hardware key slot selection +- Selezione degli slot dei tasti hardware +- +- +- Could not find any hardware keys! +- Impossibile trovare le chiavi hardware! +- +- +- Selected hardware key slot does not support challenge-response! +- La porta USB selezionata non supporta il protocollo challenge-response! +- +- +- Detecting hardware keys… +- Rilevamento delle chiavi hardware in corso... +- +- +- No hardware keys detected +- Nessuna chiave hardware rilevata +- +- +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_ja.ts keepassxc-2.6.4-patched/share/translations/keepassx_ja.ts +--- keepassxc-2.6.4-orig/share/translations/keepassx_ja.ts 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/translations/keepassx_ja.ts 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7894 +0,0 @@ +- +- +- AboutDialog +- +- About KeePassXC +- KeePassXC ã«ã¤ã„㦠+- +- +- About +- ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã«ã¤ã„㦠+- +- +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- ãƒã‚°å ±å‘Šå…ˆ: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- +- +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- KeePassXC 㯠GNU General Public License (GPL) version 2 ã¾ãŸã¯ version 3 ã®ã„ãšã‚Œã‹ã‚’é¸æŠžå¯èƒ½ãªæ¡ä»¶ã®ã‚‚ã¨ã§é…布ã•ã‚Œã¦ã„ã¾ã™ã€‚ +- +- +- Contributors +- 貢献者 +- +- +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">GitHub ã§è²¢çŒ®ã‚’確èªã™ã‚‹</a> +- +- +- Debug Info +- デãƒãƒƒã‚°æƒ…å ± +- +- +- Include the following information whenever you report a bug: +- ãƒã‚°ã‚’報告ã™ã‚‹éš›ã«ä¸‹è¨˜ã®æƒ…報をå«ã‚ã¦ãã ã•ã„: +- +- +- Copy to clipboard +- クリップボードã«ã‚³ãƒ”ー +- +- +- Project Maintainers: +- プロジェクトメンテナ: +- +- +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- KeePassXC ãƒãƒ¼ãƒ ã¯ã‚ªãƒªã‚¸ãƒŠãƒ«ã® KeePassX を作æˆã—㟠debfx ã«å¿ƒã‹ã‚‰æ„Ÿè¬ã—ã¾ã™ã€‚ +- +- +- +- AgentSettingsWidget +- +- Use OpenSSH for Windows instead of Pageant +- Pageant ã®ä»£ã‚ã‚Šã« OpenSSH for Windows を使用ã™ã‚‹ +- +- +- Enable SSH Agent integration +- SSH エージェント統åˆã‚’有効ã«ã™ã‚‹ +- +- +- SSH_AUTH_SOCK value +- SSH_AUTH_SOCK 値 +- +- +- SSH_AUTH_SOCK override +- SSH_AUTH_SOCK ã®ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ +- +- +- (empty) +- (空) +- +- +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- SSH エージェントソケットãŒåˆ©ç”¨ã§ãã¾ã›ã‚“。SSH_AUTH_SOCK 環境変数ã®å­˜åœ¨ã‚’確èªã™ã‚‹ã‹ã€ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—ã¦ãã ã•ã„。 +- +- +- SSH Agent connection is working! +- SSH エージェント接続ãŒå‹•ä½œä¸­ã§ã™ï¼ +- +- +- +- ApplicationSettingsWidget +- +- Application Settings +- アプリケーション設定 +- +- +- General +- 全般 +- +- +- Security +- セキュリティ +- +- +- Access error for config file %1 +- 設定ファイル %1 ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚¨ãƒ©ãƒ¼ +- +- +- Icon only +- アイコンã®ã¿ +- +- +- Text only +- テキストã®ã¿ +- +- +- Text beside icon +- アイコンã®æ¨ªã«ãƒ†ã‚­ã‚¹ãƒˆ +- +- +- Text under icon +- アイコンã®ä¸‹ã«ãƒ†ã‚­ã‚¹ãƒˆ +- +- +- Follow style +- スタイルã«æº–æ‹  +- +- +- Reset Settings? +- 設定をリセットã—ã¾ã™ã‹ï¼Ÿ +- +- +- Are you sure you want to reset all general and security settings to default? +- å…¨ã¦ã®å…¨èˆ¬è¨­å®šã¨ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£è¨­å®šã‚’åˆæœŸè¨­å®šã«æˆ»ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ +- +- +- Monochrome (light) +- モノクロ (ライト) +- +- +- Monochrome (dark) +- モノクロ (ダーク) +- +- +- Colorful +- カラフル +- +- +- You must restart the application to set the new language. Would you like to restart now? +- æ–°ã—ã„言語を設定ã™ã‚‹ã«ã¯ã€ã“ã®ã‚¢ãƒ—リケーションをå†èµ·å‹•ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚今ã™ãå†èµ·å‹•ã—ã¾ã™ã‹ï¼Ÿ +- +- +- +- ApplicationSettingsWidgetGeneral +- +- Basic Settings +- 基本設定 +- +- +- Startup +- èµ·å‹• +- +- +- Start only a single instance of KeePassXC +- KeePassXC ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’一ã¤ã ã‘èµ·å‹•ã™ã‚‹ +- +- +- Minimize window at application startup +- ウィンドウを最å°åŒ–ã—ã¦èµ·å‹•ã™ã‚‹ +- +- +- File Management +- ãƒ•ã‚¡ã‚¤ãƒ«ç®¡ç† +- +- +- Backup database file before saving +- ä¿å­˜ã™ã‚‹å‰ã«ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã™ã‚‹ +- +- +- Automatically save after every change +- 変更ã™ã‚‹ãŸã³ã«è‡ªå‹•çš„ã«ä¿å­˜ã™ã‚‹ +- +- +- Automatically reload the database when modified externally +- 外部ã§ç·¨é›†ã•ã‚ŒãŸéš›ã«è‡ªå‹•ã§ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’å†èª­ã¿è¾¼ã¿ã™ã‚‹ +- +- +- Entry Management +- ã‚¨ãƒ³ãƒˆãƒªãƒ¼ç®¡ç† +- +- +- Use group icon on entry creation +- エントリー作æˆæ™‚ã«ã‚°ãƒ«ãƒ¼ãƒ—ã®ã‚¢ã‚¤ã‚³ãƒ³ã‚’使用ã™ã‚‹ +- +- +- Minimize instead of app exit +- 終了ã›ãšã«æœ€å°åŒ–ã™ã‚‹ +- +- +- Show a system tray icon +- システムトレイアイコンを表示ã™ã‚‹ +- +- +- Hide window to system tray when minimized +- 最å°åŒ–ã—ãŸéš›ã«ã‚·ã‚¹ãƒ†ãƒ ãƒˆãƒ¬ã‚¤ã¸æ ¼ç´ã™ã‚‹ +- +- +- Auto-Type +- 自動入力 +- +- +- Use entry title to match windows for global Auto-Type +- グローãƒãƒ«è‡ªå‹•å…¥åŠ›ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ç…§åˆã«ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã®ã‚¿ã‚¤ãƒˆãƒ«ã‚’使用ã™ã‚‹ +- +- +- Use entry URL to match windows for global Auto-Type +- グローãƒãƒ«è‡ªå‹•å…¥åŠ›ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ç…§åˆã«ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã® URL を使用ã™ã‚‹ +- +- +- Always ask before performing Auto-Type +- 自動入力を行ã†å‰ã«æ¯Žå›žç¢ºèªã™ã‚‹ +- +- +- ms +- Milliseconds +- ミリ秒 +- +- +- Movable toolbar +- ツールãƒãƒ¼ã‚’移動å¯èƒ½ã«ã™ã‚‹ +- +- +- Remember previously used databases +- 以å‰ä½¿ç”¨ã—ãŸãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’記憶ã™ã‚‹ +- +- +- Load previously open databases on startup +- 起動時ã«å‰å›žé–‹ã„ãŸãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’読ã¿è¾¼ã‚€ +- +- +- Remember database key files and security dongles +- データベースキーファイルã¨ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ‰ãƒ³ã‚°ãƒ«ã‚’記憶ã™ã‚‹ +- +- +- Check for updates at application startup once per week +- 起動時ã«æ›´æ–°ã‚’確èªã™ã‚‹ (週一回) +- +- +- Include beta releases when checking for updates +- ベータ版も確èªå¯¾è±¡ã«ã™ã‚‹ +- +- +- Language: +- 言語: +- +- +- (restart program to activate) +- (å†èµ·å‹•ãŒå¿…è¦) +- +- +- Minimize window after unlocking database +- データベースã®ãƒ­ãƒƒã‚¯è§£é™¤å¾Œã«ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’最å°åŒ–ã™ã‚‹ +- +- +- Minimize when opening a URL +- URL ã‚’é–‹ã„ãŸã‚‰æœ€å°åŒ–ã™ã‚‹ +- +- +- Hide window when copying to clipboard +- クリップボードã«ã‚³ãƒ”ーã—ãŸã‚‰ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’éžè¡¨ç¤ºã«ã™ã‚‹ +- +- +- Minimize +- 最å°åŒ– +- +- +- Drop to background +- 背後ã«ç§»å‹• +- +- +- Favicon download timeout: +- ファビコンダウンロードã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆ: +- +- +- Website icon download timeout in seconds +- ウェブサイトアイコンダウンロードã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã¾ã§ã®ç§’ +- +- +- sec +- Seconds +- 秒 +- +- +- Toolbar button style +- ツールãƒãƒ¼ã®ãƒœã‚¿ãƒ³ã®ã‚¹ã‚¿ã‚¤ãƒ« +- +- +- Language selection +- 言語ã®é¸æŠž +- +- +- Global auto-type shortcut +- グローãƒãƒ«è‡ªå‹•å…¥åŠ›ã®ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆ +- +- +- Auto-type character typing delay milliseconds +- 自動入力ã®æ–‡å­—入力時ã®é…延 (ミリ秒) +- +- +- Auto-type start delay milliseconds +- 自動入力開始ã¾ã§ã®é…延 (ミリ秒) +- +- +- Automatically launch KeePassXC at system startup +- システム起動時㫠KeePassXC を自動的ã«èµ·å‹•ã™ã‚‹ +- +- +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- データベースファイルを安全ã«ä¿å­˜ã™ã‚‹ (Dropbox ãªã©ã§å•é¡ŒãŒç™ºç”Ÿã—ãŸå ´åˆã¯ç„¡åŠ¹ã«ã—ã¦ãã ã•ã„) +- +- +- User Interface +- ユーザーインターフェース +- +- +- Toolbar button style: +- ツールãƒãƒ¼ã®ãƒœã‚¿ãƒ³ã®ã‚¹ã‚¿ã‚¤ãƒ«: +- +- +- Use monospaced font for notes +- メモã«ç­‰å¹…フォントを使用ã™ã‚‹ +- +- +- Tray icon type: +- トレイアイコンã®ç¨®é¡ž: +- +- +- Reset settings to default… +- 設定をåˆæœŸå€¤ã«æˆ»ã™â€¦ +- +- +- Auto-Type typing delay: +- 自動入力ã®å…¥åŠ›æ™‚ã®é…延: +- +- +- Global Auto-Type shortcut: +- グローãƒãƒ«è‡ªå‹•å…¥åŠ›ã®ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆ: +- +- +- Auto-Type start delay: +- 自動入力開始ã¾ã§ã®é…延: +- +- +- Automatically save when locking database +- データベースロック時ã«è‡ªå‹•çš„ã«ä¿å­˜ã™ã‚‹ +- +- +- Automatically save non-data changes when locking database +- データベースロック時ã«ãƒ‡ãƒ¼ã‚¿ä»¥å¤–ã®å¤‰æ›´ã‚’自動的ã«ä¿å­˜ã™ã‚‹ +- +- +- Tray icon type +- トレイアイコンã®ç¨®é¡ž +- +- +- +- ApplicationSettingsWidgetSecurity +- +- Timeouts +- タイムアウト +- +- +- Clear clipboard after +- 指定時間経éŽå¾Œã«ã‚¯ãƒªãƒƒãƒ—ボードを消去ã™ã‚‹ +- +- +- sec +- Seconds +- 秒 +- +- +- Lock databases after inactivity of +- 未æ“作ã®æ™‚é–“ãŒç¶šã„ãŸã‚‰ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’ロックã™ã‚‹ +- +- +- min +- 分 +- +- +- Forget TouchID after inactivity of +- 未æ“作ã®æ™‚é–“ãŒç¶šã„ãŸã‚‰ TouchID を消去ã™ã‚‹ +- +- +- Convenience +- 利便性 +- +- +- Lock databases when session is locked or lid is closed +- セッションをロックã—ãŸã‚Šãƒ©ãƒƒãƒ—トップを閉ã˜ãŸéš›ã«ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’ロックã™ã‚‹ +- +- +- Forget TouchID when session is locked or lid is closed +- セッションをロックã—ãŸã‚Šãƒ©ãƒƒãƒ—トップを閉ã˜ãŸéš›ã« TouchID を消去ã™ã‚‹ +- +- +- Lock databases after minimizing the window +- ウィンドウを最å°åŒ–ã—ãŸã‚‰ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’ロックã™ã‚‹ +- +- +- Re-lock previously locked database after performing Auto-Type +- 自動入力実行後ã«ä»¥å‰ãƒ­ãƒƒã‚¯ã—ã¦ã„ãŸãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’å†ãƒ­ãƒƒã‚¯ã™ã‚‹ +- +- +- Hide passwords in the entry preview panel +- エントリーã®ãƒ—レビューパãƒãƒ«ã®ãƒ‘スワードをéžè¡¨ç¤ºã«ã™ã‚‹ +- +- +- Hide entry notes by default +- エントリーã®ãƒ¡ãƒ¢ã‚’既定ã§éžè¡¨ç¤ºã«ã™ã‚‹ +- +- +- Privacy +- プライãƒã‚·ãƒ¼ +- +- +- Use DuckDuckGo service to download website icons +- ウェブサイトアイコンã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã« DuckDuckGo ã®ã‚µãƒ¼ãƒ“スを使用ã™ã‚‹ +- +- +- Clipboard clear seconds +- クリップボード消去ã¾ã§ã®æ™‚é–“ (秒) +- +- +- Touch ID inactivity reset +- 未æ“作時㮠Touch ID リセット +- +- +- Database lock timeout seconds +- データベースロックã¾ã§ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆ (秒) +- +- +- min +- Minutes +- 分 +- +- +- Clear search query after +- 指定時間経éŽå¾Œã«æ¤œç´¢ã‚¯ã‚¨ãƒªã‚’消去ã™ã‚‹ +- +- +- Require password repeat when it is visible +- パスワードãŒè¡¨ç¤ºã•ã‚Œã¦ã„ã¦ã‚‚å†å…¥åŠ›ã‚’è¦æ±‚ã™ã‚‹ +- +- +- Hide passwords when editing them +- 編集時ã«ãƒ‘スワードをéžè¡¨ç¤ºã«ã™ã‚‹ +- +- +- Use placeholder for empty password fields +- 空ã®ãƒ‘スワードフィールドã§ãƒ—レースホルダーを使用ã™ã‚‹ +- +- +- +- AutoType +- +- Couldn't find an entry that matches the window title: +- ウィンドウタイトルã«ä¸€è‡´ã™ã‚‹ã‚¨ãƒ³ãƒˆãƒªãƒ¼ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ: +- +- +- Auto-Type - KeePassXC +- 自動入力 - KeePassXC +- +- +- Auto-Type +- 自動入力 +- +- +- The Syntax of your Auto-Type statement is incorrect! +- 自動入力ステートメントã®æ§‹æ–‡ãŒæ­£ã—ãã‚ã‚Šã¾ã›ã‚“。 +- +- +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- ã“ã®è‡ªå‹•å…¥åŠ›ã‚³ãƒžãƒ³ãƒ‰ã¯éžå¸¸ã«é•·ã„é…延をå«ã¿ã¾ã™ã€‚本当ã«ç¶šè¡Œã—ã¾ã™ã‹ï¼Ÿ +- +- +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- ã“ã®è‡ªå‹•å…¥åŠ›ã‚³ãƒžãƒ³ãƒ‰ã¯éžå¸¸ã«é…ã„キー押下をå«ã¿ã¾ã™ã€‚本当ã«ç¶šè¡Œã—ã¾ã™ã‹ï¼Ÿ +- +- +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- ã“ã®è‡ªå‹•å…¥åŠ›ã‚³ãƒžãƒ³ãƒ‰ã¯ä½•åº¦ã‚‚ç¹°ã‚Šè¿”ã•ã‚Œã‚‹å¼•æ•°ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚本当ã«ç¶šè¡Œã—ã¾ã™ã‹ï¼Ÿ +- +- +- Permission Required +- 許å¯ãŒå¿…è¦ã§ã™ +- +- +- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC ãŒã‚¨ãƒ³ãƒˆãƒªãƒ¼ã®è‡ªå‹•å…¥åŠ›ã‚’è¡Œã†ã«ã¯ã‚¢ã‚¯ã‚»ã‚¹è¨±å¯ãŒå¿…è¦ã§ã™ã€‚æ—¢ã«è¨±å¯ã—ã¦ã‚ã‚‹å ´åˆã¯ KeePassXC ã‚’å†èµ·å‹•ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ +- +- +- +- AutoTypeAssociationsModel +- +- Window +- ウィンドウ +- +- +- Sequence +- シーケンス +- +- +- Default sequence +- 既定ã®ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ +- +- +- +- AutoTypeMatchModel +- +- Group +- グループ +- +- +- Title +- タイトル +- +- +- Username +- ユーザーå +- +- +- Sequence +- シーケンス +- +- +- +- AutoTypeMatchView +- +- Copy &username +- ユーザーåをコピー(&U) +- +- +- Copy &password +- パスワードをコピー(&P) +- +- +- +- AutoTypePlatformMac +- +- Permission Required +- 許å¯ãŒå¿…è¦ã§ã™ +- +- +- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC ã®ã‚°ãƒ­ãƒ¼ãƒãƒ«è‡ªå‹•å…¥åŠ›ã«ã¯ã‚¢ã‚¯ã‚»ã‚¹è¨±å¯ã¨ç”»é¢è¨˜éŒ²è¨±å¯ãŒå¿…è¦ã§ã™ã€‚ç”»é¢è¨˜éŒ²ã¯ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚¿ã‚¤ãƒˆãƒ«ã‚’使用ã—ã¦ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’見ã¤ã‘ã‚‹ãŸã‚ã«å¿…è¦ã§ã™ã€‚æ—¢ã«è¨±å¯ã—ã¦ã‚ã‚‹å ´åˆã¯ KeePassXC ã‚’å†èµ·å‹•ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ +- +- +- +- AutoTypeSelectDialog +- +- Auto-Type - KeePassXC +- 自動入力 - KeePassXC +- +- +- Select entry to Auto-Type: +- 自動入力ã™ã‚‹ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’é¸æŠžã—ã¦ãã ã•ã„: +- +- +- Search... +- 検索... +- +- +- +- BrowserAccessControlDialog +- +- KeePassXC - Browser Access Request +- KeePassXC - ブラウザーã®ã‚¢ã‚¯ã‚»ã‚¹è¦æ±‚ +- +- +- %1 is requesting access to the following entries: +- %1 ãŒæ¬¡ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’è¦æ±‚ã—ã¦ã„ã¾ã™: +- +- +- Remember access to checked entries +- ãƒã‚§ãƒƒã‚¯ã—ãŸã‚¨ãƒ³ãƒˆãƒªãƒ¼ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’記憶ã™ã‚‹ +- +- +- Remember +- 記憶ã™ã‚‹ +- +- +- Allow access to entries +- エントリーã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹ +- +- +- Allow Selected +- é¸æŠžã—ãŸã‚‚ã®ã‚’è¨±å¯ +- +- +- Deny All +- å…¨ã¦æ‹’å¦ +- +- +- Disable for this site +- ã“ã®ã‚µã‚¤ãƒˆã‚’無効化 +- +- +- +- BrowserEntrySaveDialog +- +- KeePassXC-Browser Save Entry +- KeePassXC-Browser エントリーをä¿å­˜ +- +- +- Ok +- OK +- +- +- Cancel +- キャンセル +- +- +- You have multiple databases open. +-Please select the correct database for saving credentials. +- 複数ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’é–‹ã„ã¦ã„ã¾ã™ã€‚ +-資格情報をä¿å­˜ã™ã‚‹é©åˆ‡ãªãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’é¸æŠžã—ã¦ãã ã•ã„。 +- +- +- +- BrowserService +- +- KeePassXC: New key association request +- KeePassXC: æ–°ã—ã„キーã®ã‚¢ã‚½ã‚·ã‚¨ãƒ¼ã‚·ãƒ§ãƒ³è¦æ±‚ +- +- +- Save and allow access +- アクセスを許å¯ã—ã¦ä¿å­˜ +- +- +- KeePassXC: Overwrite existing key? +- KeePassXC: 既存ã®ã‚­ãƒ¼ã‚’上書ãã—ã¾ã™ã‹ï¼Ÿ +- +- +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- 共有暗å·åŒ–キー "%1" ã¯æ—¢ã«å­˜åœ¨ã—ã¾ã™ã€‚ +-上書ãã—ã¾ã™ã‹ï¼Ÿ +- +- +- KeePassXC: Update Entry +- KeePassXC: エントリーを更新 +- +- +- Do you want to update the information in %1 - %2? +- %1 - %2 ã®æƒ…報を更新ã—ã¾ã™ã‹ï¼Ÿ +- +- +- Abort +- 中止 +- +- +- Converting attributes to custom data… +- 属性をカスタムデータã«å¤‰æ›ã—ã¦ã„ã¾ã™â€¦ +- +- +- KeePassXC: Converted KeePassHTTP attributes +- KeePassXC: KeePassHTTP ã®å±žæ€§ã‚’変æ›ã—ã¾ã—㟠+- +- +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- %1 個ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‹ã‚‰å±žæ€§ã‚’正常ã«å¤‰æ›ã—ã¾ã—ãŸã€‚ +-%2 個ã®ã‚­ãƒ¼ã‚’カスタムデータã«ç§»è¡Œã—ã¾ã—ãŸã€‚ +- +- +- Successfully moved %n keys to custom data. +- %n 個ã®ã‚­ãƒ¼ã‚’正常ã«ã‚«ã‚¹ã‚¿ãƒ ãƒ‡ãƒ¼ã‚¿ã«ç§»è¡Œã—ã¾ã—ãŸã€‚ +- +- +- KeePassXC: No entry with KeePassHTTP attributes found! +- KeePassXC: KeePassHTTP ã®å±žæ€§ãŒã‚るエントリーã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ +- +- +- The active database does not contain an entry with KeePassHTTP attributes. +- アクティブãªãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ã¯ KeePassHTTP ã®å±žæ€§ãŒã‚るエントリーã¯å«ã¾ã‚Œã¦ã„ã¾ã›ã‚“。 +- +- +- KeePassXC: Legacy browser integration settings detected +- KeePassXC: レガシーãªãƒ–ラウザー統åˆã®è¨­å®šã‚’検出ã—ã¾ã—㟠+- +- +- KeePassXC: Create a new group +- KeePassXC: æ–°ã—ã„ã‚°ãƒ«ãƒ¼ãƒ—ã‚’ä½œæˆ +- +- +- A request for creating a new group "%1" has been received. +-Do you want to create this group? +- +- æ–°ã—ã„グループ "%1" ã®ä½œæˆè¦æ±‚ã‚’å—ã‘å–ã‚Šã¾ã—ãŸã€‚ +-ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—を作æˆã—ã¾ã™ã‹ï¼Ÿ +- +- +- +- Your KeePassXC-Browser settings need to be moved into the database settings. +-This is necessary to maintain your current browser connections. +-Would you like to migrate your existing settings now? +- KeePassXC-Browser ã®è¨­å®šã‚’データベース設定ã«ç§»è¡Œã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ +-ã“ã‚Œã¯ãƒ–ラウザーã¨ã®æŽ¥ç¶šã‚’維æŒã™ã‚‹ãŸã‚ã«å¿…è¦ã§ã™ã€‚ +-既存ã®è¨­å®šã‚’移行ã—ã¾ã™ã‹ï¼Ÿ +- +- +- Don't show this warning again +- 今後ã“ã®è­¦å‘Šã‚’表示ã—ãªã„ +- +- +- You have received an association request for the following database: +-%1 +- +-Give the connection a unique name or ID, for example: +-chrome-laptop. +- 次ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ã‚¢ã‚½ã‚·ã‚¨ãƒ¼ã‚·ãƒ§ãƒ³è¦æ±‚ã‚’å—ã‘å–ã‚Šã¾ã—ãŸ: +-%1 +- +-次ã®ã‚ˆã†ãªã€æŽ¥ç¶šç”¨ã®ä¸€æ„ãªåå‰ã¾ãŸã¯ ID を付ã‘ã¦ãã ã•ã„: +-chrome-laptop. +- +- +- +- BrowserSettingsWidget +- +- Dialog +- ダイアログ +- +- +- This is required for accessing your databases with KeePassXC-Browser +- ã“ã®ã‚ªãƒ—ション㯠KeePassXC-Browser ã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãŸã‚ã«å¿…è¦ã§ã™ +- +- +- Enable browser integration +- ブラウザー統åˆã‚’有効ã«ã™ã‚‹ +- +- +- General +- 全般 +- +- +- Browsers installed as snaps are currently not supported. +- Snap å½¢å¼ã®ãƒ–ラウザーã¯ç¾åœ¨ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。 +- +- +- Enable integration for these browsers: +- ã“れらã®ãƒ–ラウザーã®çµ±åˆã‚’有効ã«ã™ã‚‹: +- +- +- Vivaldi +- Vivaldi +- +- +- &Edge +- &Edge +- +- +- Firefox +- Firefox +- +- +- Tor Browser +- Tor Browser +- +- +- Brave +- Brave +- +- +- Google Chrome +- Google Chrome +- +- +- Chromium +- Chromium +- +- +- Show a notification when credentials are requested +- Credentials mean login data requested via browser extension +- 資格情報をè¦æ±‚ã•ã‚ŒãŸéš›ã«é€šçŸ¥ã‚’表示ã™ã‚‹ +- +- +- Request to unlock the database if it is locked +- データベースãŒãƒ­ãƒƒã‚¯ã•ã‚Œã¦ã„ã‚‹å ´åˆã¯ãƒ­ãƒƒã‚¯ã®è§£é™¤ã‚’è¦æ±‚ã™ã‚‹ +- +- +- Only entries with the same scheme (http://, https://, ...) are returned. +- åŒã˜ã‚¹ã‚­ãƒ¼ãƒ  (http://, https://, ...) ã‚’æŒã¤ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã®ã¿ãŒè¿”ã•ã‚Œã¾ã™ã€‚ +- +- +- Match URL scheme (e.g., https://...) +- URL スキーム (例ãˆã° https://...) ã®ä¸€è‡´ +- +- +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- ドメイン全体ã«ä¸€è‡´ã™ã‚‹å…¨ã¦ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã®ä»£ã‚ã‚Šã«ã€ç‰¹å®šã® URL ã«æœ€ã‚‚一致ã™ã‚‹ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã®ã¿ãŒè¿”ã•ã‚Œã¾ã™ã€‚ +- +- +- Return only best-matching credentials +- 最も一致ã™ã‚‹è³‡æ ¼æƒ…å ±ã®ã¿ã‚’返㙠+- +- +- Returns expired credentials. String [expired] is added to the title. +- 期é™åˆ‡ã‚Œã®è³‡æ ¼æƒ…報を返ã—ã¾ã™ã€‚タイトル㫠[期é™åˆ‡ã‚Œ] ã¨ã„ã†æ–‡å­—列ãŒè¿½åŠ ã•ã‚Œã¾ã™ã€‚ +- +- +- Allow returning expired credentials +- 期é™åˆ‡ã‚Œã®è³‡æ ¼æƒ…報を返ã™ã“ã¨ã‚’許å¯ã™ã‚‹ +- +- +- All databases connected to the extension will return matching credentials. +- 拡張機能ã«æŽ¥ç¶šã•ã‚ŒãŸå…¨ã¦ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ãŒä¸€è‡´ã™ã‚‹è³‡æ ¼æƒ…報を返ã—ã¾ã™ã€‚ +- +- +- Search in all opened databases for matching credentials +- Credentials mean login data requested via browser extension +- é–‹ã„ã¦ã„ã‚‹å…¨ã¦ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‹ã‚‰ä¸€è‡´ã™ã‚‹è³‡æ ¼æƒ…報を検索ã™ã‚‹ +- +- +- Sort matching credentials by title +- Credentials mean login data requested via browser extension +- 一致ã™ã‚‹è³‡æ ¼æƒ…報をタイトルã§ä¸¦ã¹æ›¿ãˆã‚‹ +- +- +- Sort matching credentials by username +- Credentials mean login data requested via browser extension +- 一致ã™ã‚‹è³‡æ ¼æƒ…報をユーザーåã§ä¸¦ã¹æ›¿ãˆã‚‹ +- +- +- Advanced +- 詳細設定 +- +- +- Never ask before accessing credentials +- Credentials mean login data requested via browser extension +- 資格情報ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹å‰ã«ç¢ºèªã—ãªã„ +- +- +- Never ask before updating credentials +- Credentials mean login data requested via browser extension +- 資格情報を更新ã™ã‚‹å‰ã«ç¢ºèªã—ãªã„ +- +- +- Do not ask permission for HTTP Basic Auth +- An extra HTTP Basic Auth setting +- HTTP ベーシックèªè¨¼ã§ã‚¢ã‚¯ã‚»ã‚¹è¨±å¯ã‚’確èªã—ãªã„ +- +- +- Automatically creating or updating string fields is not supported. +- 文字列フィールドã®è‡ªå‹•ä½œæˆã‚„自動更新ã¯ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。 +- +- +- Return advanced string fields which start with "KPH: " +- "KPH: " ã‹ã‚‰å§‹ã¾ã‚‹æ‹¡å¼µã•ã‚ŒãŸæ–‡å­—列フィールドを返㙠+- +- +- Don't display the popup suggesting migration of legacy KeePassHTTP settings. +- レガシー㪠KeePassHTTP ã®è¨­å®šã‚’移行ã™ã‚‹ãŸã‚ã®ãƒãƒƒãƒ—アップを表示ã—ãªã„よã†ã«ã—ã¾ã™ã€‚ +- +- +- Do not prompt for KeePassHTTP settings migration. +- KeePassHTTP ã®è¨­å®šç§»è¡Œã‚’確èªã—ãªã„ +- +- +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- 起動時ã«ã€KeePassXC ã¾ãŸã¯ keepassxc-proxy ã®ãƒã‚¤ãƒŠãƒªãƒ¼ãƒ‘スを自動的㫠Native messaging スクリプトã«æ›´æ–°ã—ã¾ã™ã€‚ +- +- +- Update native messaging manifest files at startup +- 起動時㫠Native messaging ã®ãƒžãƒ‹ãƒ•ã‚§ã‚¹ãƒˆãƒ•ã‚¡ã‚¤ãƒ«ã‚’æ›´æ–°ã™ã‚‹ +- +- +- Use a custom proxy location if you installed a proxy manually. +- 手動ã§ãƒ—ロキシをインストールã—ãŸå ´åˆã¯ã€ã‚«ã‚¹ã‚¿ãƒ ãƒ—ロキシを使用ã—ã¦ãã ã•ã„。 +- +- +- Use a custom proxy location: +- Meant is the proxy for KeePassXC-Browser +- カスタムプロキシを使用ã™ã‚‹: +- +- +- Custom proxy location field +- カスタムプロキシã®å ´æ‰€ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ +- +- +- Browser for custom proxy file +- カスタムプロキシファイルブラウザー +- +- +- Browse... +- Button for opening file dialog +- å‚ç…§... +- +- +- Use a custom browser configuration location: +- ブラウザーã®è¨­å®šã®å ´æ‰€ã‚’変更ã™ã‚‹: +- +- +- Browser type: +- ブラウザーã®ç¨®é¡ž: +- +- +- Toolbar button style +- ツールãƒãƒ¼ã®ãƒœã‚¿ãƒ³ã®ã‚¹ã‚¿ã‚¤ãƒ« +- +- +- Config Location: +- 設定ã®å ´æ‰€: +- +- +- Custom browser location field +- ブラウザーã®å ´æ‰€æŒ‡å®šãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ +- +- +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- +- +- Browse for custom browser path +- 指定ã™ã‚‹ãƒ–ラウザーパスをå‚ç…§ã™ã‚‹ +- +- +- Custom extension ID: +- カスタム拡張機能 ID: +- +- +- Custom extension ID +- カスタム拡張機能 ID +- +- +- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 +- Snap ã«ã‚ˆã£ã¦ã‚µãƒ³ãƒ‰ãƒœãƒƒã‚¯ã‚¹åŒ–ã•ã‚Œã¦ã„ã‚‹ãŸã‚ã€<br />ブラウザー統åˆã‚’有効ã«ã™ã‚‹ã«ã¯ã‚¹ã‚¯ãƒªãƒ—トを実行ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚<br />スクリプトã¯æ¬¡ã®å ´æ‰€ã‹ã‚‰å…¥æ‰‹ã§ãã¾ã™: %1 +- +- +- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 +- ブラウザー統åˆã®å‹•ä½œã«ã¯ KeePassXC-Browser ãŒå¿…è¦ã§ã™ã€‚<br />KeePassXC-Browser 㯠%1 用ã€%2 用ã€%3 用㮠3 種類ã‚ã‚Šã¾ã™ã€‚%4 +- +- +- Please see special instructions for browser extension use below +- ブラウザー拡張機能を使用ã™ã‚‹ã«ã¯ä»¥ä¸‹ã®æ‰‹é †ã‚’å‚ç…§ã—ã¦ãã ã•ã„ +- +- +- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. +- <b>エラー:</b> カスタムプロキシã®å ´æ‰€ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚<br/>ブラウザー統åˆã¯ãƒ—ロキシアプリケーションãªã—ã§ã¯å‹•ä½œã—ã¾ã›ã‚“。 +- +- +- <b>Warning:</b> The following options can be dangerous! +- <b>警告:</b> 以下ã¯å±é™ºãªã‚ªãƒ—ションã§ã™ã€‚ +- +- +- Executable Files +- 実行ファイル +- +- +- All Files +- å…¨ã¦ã®ãƒ•ã‚¡ã‚¤ãƒ« +- +- +- Select custom proxy location +- カスタムプロキシをé¸æŠž +- +- +- Select native messaging host folder location +- Native messaging ã®ãƒ›ã‚¹ãƒˆãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ã®å ´æ‰€ã‚’é¸æŠž +- +- +- +- CloneDialog +- +- Clone Options +- 複製ã®ã‚ªãƒ—ション +- +- +- Append ' - Clone' to title +- タイトル㫠' - 複製' を追加 +- +- +- Replace username and password with references +- ユーザーåã¨ãƒ‘スワードをå‚ç…§ã§ç½®ãæ›ãˆã‚‹ +- +- +- Copy history +- 履歴をコピー +- +- +- +- CsvImportWidget +- +- Import CSV fields +- CSV フィールドをインãƒãƒ¼ãƒˆ +- +- +- filename +- ファイルå +- +- +- size, rows, columns +- サイズã€è¡Œã€åˆ— +- +- +- Encoding +- エンコーディング +- +- +- Codec +- コーデック +- +- +- Text is qualified by +- ãƒ†ã‚­ã‚¹ãƒˆä¿®é£¾å­ +- +- +- Fields are separated by +- 区切り文字 +- +- +- Comments start with +- コメントã®è¡Œé ­ +- +- +- Consider '\' an escape character +- エスケープ文字 '\' を考慮ã™ã‚‹ +- +- +- Preview +- プレビュー +- +- +- Imported from CSV file +- CSV ファイルã‹ã‚‰ã‚¤ãƒ³ãƒãƒ¼ãƒˆ +- +- +- Original data: +- 元データ: +- +- +- Error +- エラー +- +- +- Error(s) detected in CSV file! +- CSV ファイル内ã§ã‚¨ãƒ©ãƒ¼ã‚’検出ã—ã¾ã—ãŸï¼ +- +- +- [%n more message(s) skipped] +- [%n 個ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’スキップã—ã¾ã—ãŸ] +- +- +- CSV import: writer has errors: +-%1 +- CSV ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ: ライターã«ã‚¨ãƒ©ãƒ¼ãŒã‚ã‚Šã¾ã™: +-%1 +- +- +- Text qualification +- テキスト修飾 +- +- +- Field separation +- フィールドã®åŒºåˆ‡ã‚Š +- +- +- Number of header lines to discard +- 破棄ã™ã‚‹ãƒ˜ãƒƒãƒ€ãƒ¼è¡Œæ•° +- +- +- CSV import preview +- CSV インãƒãƒ¼ãƒˆãƒ—レビュー +- +- +- Column Association +- 列ã®é–¢é€£ä»˜ã‘ +- +- +- Last Modified +- 最終更新日時 +- +- +- Password +- パスワード +- +- +- Created +- 作æˆæ—¥æ™‚ +- +- +- Notes +- メモ +- +- +- Title +- タイトル +- +- +- Group +- グループ +- +- +- URL +- URL +- +- +- Username +- ユーザーå +- +- +- Header lines skipped +- スキップã™ã‚‹ãƒ˜ãƒƒãƒ€ãƒ¼è¡Œæ•° +- +- +- First line has field names +- 先頭行ãŒãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰åã‚’å«ã‚€ +- +- +- Not Present +- 存在ã—ã¾ã›ã‚“ +- +- +- Column %1 +- 列 %1 +- +- +- TOTP +- TOTP +- +- +- Icon +- アイコン +- +- +- +- CsvParserModel +- +- %n column(s) +- %n 列 +- +- +- %1, %2, %3 +- file info: bytes, rows, columns +- %1ã€%2ã€%3 +- +- +- %n byte(s) +- %n ãƒã‚¤ãƒˆ +- +- +- %n row(s) +- %n è¡Œ +- +- +- +- Database +- +- File %1 does not exist. +- ファイル %1 ã¯å­˜åœ¨ã—ã¾ã›ã‚“。 +- +- +- Unable to open file %1. +- ファイル %1 ã‚’é–‹ã‘ã¾ã›ã‚“。 +- +- +- Error while reading the database: %1 +- データベースã®èª­ã¿è¾¼ã¿ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ: %1 +- +- +- File cannot be written as it is opened in read-only mode. +- 読ã¿å–り専用モードã§ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é–‹ã„ã¦ã„ã‚‹ãŸã‚書ã込むã“ã¨ã¯ã§ãã¾ã›ã‚“。 +- +- +- Key not transformed. This is a bug, please report it to the developers! +- キーã¯å¤‰æ›ã•ã‚Œã¾ã›ã‚“。ã“ã‚Œã¯ãƒã‚°ãªã®ã§ã€é–‹ç™ºè€…ã¸ã®å ±å‘Šã‚’ãŠé¡˜ã„ã—ã¾ã™ã€‚ +- +- +- %1 +-Backup database located at %2 +- %1 +-データベースã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—場所: %2 +- +- +- Could not save, database does not point to a valid file. +- 対象ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ã¯æ­£å¸¸ã§ã¯ãªã„ãŸã‚ã€ä¿å­˜ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ +- +- +- Could not save, database file is read-only. +- 対象ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ã¯èª­ã¿å–り専用ãªãŸã‚ã€ä¿å­˜ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ +- +- +- Database file has unmerged changes. +- データベースファイルã«ãƒžãƒ¼ã‚¸ã—ã¦ã„ãªã„変更ãŒã‚ã‚Šã¾ã™ã€‚ +- +- +- Recycle Bin +- ゴミ箱 +- +- +- Passwords +- Root group name +- パスワード +- +- +- Database save is already in progress. +- æ—¢ã«ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ä¿å­˜ä½œæ¥­ä¸­ã§ã™ã€‚ +- +- +- Could not save, database has not been initialized! +- データベースãŒåˆæœŸåŒ–ã•ã‚Œã¦ã„ãªã„ãŸã‚ã€ä¿å­˜ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ +- +- +- +- DatabaseOpenDialog +- +- Unlock Database - KeePassXC +- データベースã®ãƒ­ãƒƒã‚¯ã‚’解除 - KeePassXC +- +- +- +- DatabaseOpenWidget +- +- Key File: +- キーファイル: +- +- +- Refresh +- å†èª­ã¿è¾¼ã¿ +- +- +- Don't show this warning again +- 今後ã“ã®è­¦å‘Šã‚’表示ã—ãªã„ +- +- +- All files +- å…¨ã¦ã®ãƒ•ã‚¡ã‚¤ãƒ« +- +- +- Key files +- キーファイル +- +- +- Select key file +- キーファイルをé¸æŠž +- +- +- Failed to open key file: %1 +- キーファイルを開ãã®ã«å¤±æ•—ã—ã¾ã—ãŸ: %1 +- +- +- Unlock KeePassXC Database +- KeePassXC データベースã®ãƒ­ãƒƒã‚¯è§£é™¤ +- +- +- Enter Password: +- パスワードを入力ã—ã¦ãã ã•ã„: +- +- +- Password field +- パスワードフィールド +- +- +- Hardware key slot selection +- ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚­ãƒ¼ã‚¹ãƒ­ãƒƒãƒˆã®é¸æŠž +- +- +- Browse for key file +- キーファイルを探㙠+- +- +- Browse... +- å‚ç…§... +- +- +- Refresh hardware tokens +- ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ãƒˆãƒ¼ã‚¯ãƒ³ã‚’æ›´æ–° +- +- +- Hardware Key: +- ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚­ãƒ¼: +- +- +- Hardware key help +- ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚­ãƒ¼ã®ãƒ˜ãƒ«ãƒ— +- +- +- TouchID for Quick Unlock +- TouchID ã§ç´ æ—©ãロックを解除ã™ã‚‹ +- +- +- Unlock failed and no password given +- パスワードãŒæœªæŒ‡å®šãªãŸã‚ロックã®è§£é™¤ã«å¤±æ•—ã—ã¾ã—㟠+- +- +- Unlocking the database failed and you did not enter a password. +-Do you want to retry with an "empty" password instead? +- +-To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. +- パスワードを入力ã—ãªã‹ã£ãŸãŸã‚ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ãƒ­ãƒƒã‚¯è§£é™¤ã«å¤±æ•—ã—ã¾ã—ãŸã€‚å†è©¦è¡Œã—ã¾ã™ã‹ï¼Ÿ +- +-ã“ã®ã‚¨ãƒ©ãƒ¼ã‚’防ãã«ã¯ã€"データベースã®è¨­å®š" ã‚’é–‹ãã€"セキュリティ" ã§ãƒ‘スワードをリセットã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ +- +- +- Retry with empty password +- 空ã®ãƒ‘スワードã§å†è©¦è¡Œ +- +- +- Enter Additional Credentials (if any): +- 追加ã®è³‡æ ¼æƒ…報を入力ã—ã¦ãã ã•ã„ (ã‚ã‚‹å ´åˆã®ã¿): +- +- +- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +-<p>Click for more information...</p> +- <p>スロットを HMAC-SHA1 用ã«è¨­å®šã—㟠<strong>YubiKey</strong> ã‚„ <strong>OnlyKey</strong> ã‚’ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ã‚­ãƒ¼ã¨ã—ã¦ä½¿ç”¨ã§ãã¾ã™ã€‚</p> +-<p>詳細ã«ã¤ã„ã¦ã¯ã‚¯ãƒªãƒƒã‚¯ã—ã¦ãã ã•ã„...</p> +- +- +- Key file help +- キーファイルã®ãƒ˜ãƒ«ãƒ— +- +- +- ? +- ? +- +- +- Cannot use database file as key file +- データベースファイルをキーファイルã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“ +- +- +- You cannot use your database file as a key file. +-If you do not have a key file, please leave the field empty. +- データベースファイルをキーファイルã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 +-キーファイルãŒãªã„å ´åˆã¯ã€ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚’空ã®ã¾ã¾ã«ã—ã¦ãã ã•ã„。 +- +- +- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> +- <p>パスワードã ã‘ã§ãªãシークレットファイルを使用ã™ã‚‹ã“ã¨ã§ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ã‚’å‘上ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚シークレットファイルã¯ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£è¨­å®šã§ç”Ÿæˆã§ãã¾ã™ã€‚</p><p>*.kdbx データベースファイルã¯ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆãƒ•ã‚¡ã‚¤ãƒ«<strong>ã§ã¯ã‚ã‚Šã¾ã›ã‚“</strong>ï¼<br>キーファイルãŒãªã„å ´åˆã€ã“ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã¯ç©ºã®ã¾ã¾ã«ã—ã¦ãã ã•ã„。</p><p>詳細ã«ã¤ã„ã¦ã¯ã‚¯ãƒªãƒƒã‚¯ã—ã¦ãã ã•ã„...</p> +- +- +- Key file to unlock the database +- データベースã®ãƒ­ãƒƒã‚¯ã‚’解除ã™ã‚‹ã‚­ãƒ¼ãƒ•ã‚¡ã‚¤ãƒ« +- +- +- Please touch the button on your YubiKey! +- YubiKey ã®ãƒœã‚¿ãƒ³ã«ã‚¿ãƒƒãƒã—ã¦ãã ã•ã„ +- +- +- Detecting hardware keys… +- ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚­ãƒ¼ã‚’検出中… +- +- +- No hardware keys detected +- 検出ã—ãŸãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚­ãƒ¼ã¯ã‚ã‚Šã¾ã›ã‚“ +- +- +- Select hardware key… +- ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚­ãƒ¼ã‚’é¸æŠžâ€¦ +- +- +- Old key file format +- å¤ã„ã‚­ãƒ¼ãƒ•ã‚¡ã‚¤ãƒ«å½¢å¼ +- +- +- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> +- KeePassXC ã¯å°†æ¥çš„ã«ã€ç¾åœ¨ä½¿ç”¨ä¸­ã®å¤ã„キーファイル形å¼ã‚’<br>サãƒãƒ¼ãƒˆã—ãªããªã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚<br><br><strong>データベース -> データベースã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£</strong>メニューã‹ã‚‰<br>æ–°ã—ã„キーファイルを生æˆã™ã‚‹ã“ã¨ã‚’検討ã—ã¦ãã ã•ã„。<br> +- +- +- +- DatabaseSettingWidgetMetaData +- +- Passwords +- パスワード +- +- +- +- DatabaseSettingsDialog +- +- Advanced Settings +- 詳細設定 +- +- +- General +- 全般 +- +- +- Security +- セキュリティ +- +- +- Encryption Settings +- æš—å·åŒ–ã®è¨­å®š +- +- +- Browser Integration +- ãƒ–ãƒ©ã‚¦ã‚¶ãƒ¼çµ±åˆ +- +- +- Database Credentials +- データベースã®è³‡æ ¼æƒ…å ± +- +- +- +- DatabaseSettingsWidgetBrowser +- +- KeePassXC-Browser settings +- KeePassXC-Browser 設定 +- +- +- Stored keys +- ä¿å­˜ã•ã‚ŒãŸã‚­ãƒ¼ +- +- +- Remove +- 削除 +- +- +- Delete the selected key? +- é¸æŠžã—ãŸã‚­ãƒ¼ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ +- +- +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- 本当ã«é¸æŠžã—ãŸã‚­ãƒ¼ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ +-ブラウザープラグインã«æŽ¥ç¶šã§ããªããªã‚Šã¾ã™ã€‚ +- +- +- Key +- キー +- +- +- Value +- 値 +- +- +- Enable Browser Integration to access these settings. +- ã“れらã®è¨­å®šã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€ãƒ–ラウザー統åˆã‚’有効ã«ã—ã¦ãã ã•ã„。 +- +- +- Disconnect all browsers +- å…¨ã¦ã®ãƒ–ラウザーã®æŽ¥ç¶šã‚’断㤠+- +- +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- 本当ã«å…¨ã¦ã®ãƒ–ラウザーを切断ã—ã¾ã™ã‹ï¼Ÿ +-ブラウザープラグインã«æŽ¥ç¶šã§ããªããªã‚Šã¾ã™ã€‚ +- +- +- KeePassXC: No keys found +- KeePassXC: キーãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ +- +- +- No shared encryption keys found in KeePassXC settings. +- KeePassXC ã®è¨­å®šå†…ã«å…±æœ‰æš—å·åŒ–キーã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ +- +- +- KeePassXC: Removed keys from database +- KeePassXC: データベースã‹ã‚‰ã‚­ãƒ¼ã‚’削除ã—ã¾ã—㟠+- +- +- Successfully removed %n encryption key(s) from KeePassXC settings. +- KeePassXC ã®è¨­å®šã‹ã‚‰ %n 個ã®æš—å·åŒ–キーを正常ã«å‰Šé™¤ã—ã¾ã—ãŸã€‚ +- +- +- Forget all site-specific settings on entries +- エントリーã®ã‚µã‚¤ãƒˆå›ºæœ‰ã®è¨­å®šã‚’å…¨ã¦æ¶ˆåŽ»ã™ã‚‹ +- +- +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- 本当ã«ã‚¨ãƒ³ãƒˆãƒªãƒ¼æ¯Žã®ã‚µã‚¤ãƒˆå›ºæœ‰ã®è¨­å®šã‚’å…¨ã¦æ¶ˆåŽ»ã—ã¾ã™ã‹ï¼Ÿ +-エントリーã¸ã®ã‚¢ã‚¯ã‚»ã‚¹æ¨©ãŒå–り消ã•ã‚Œã¾ã™ã€‚ +- +- +- Removing stored permissions… +- ä¿å­˜ã•ã‚Œã¦ã„るアクセス許å¯ã‚’削除ã—ã¦ã„ã¾ã™â€¦ +- +- +- Abort +- 中止 +- +- +- KeePassXC: Removed permissions +- KeePassXC: アクセス許å¯ã‚’削除ã—ã¾ã—㟠+- +- +- Successfully removed permissions from %n entry(s). +- %n 個ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹è¨±å¯ã‚’正常ã«å‰Šé™¤ã—ã¾ã—ãŸã€‚ +- +- +- KeePassXC: No entry with permissions found! +- KeePassXC: アクセス許å¯ãŒã‚るエントリーã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ +- +- +- The active database does not contain an entry with permissions. +- アクティブãªãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ã¯ã‚¢ã‚¯ã‚»ã‚¹è¨±å¯ãŒã‚るエントリーã¯å«ã¾ã‚Œã¦ã„ã¾ã›ã‚“。 +- +- +- Move KeePassHTTP attributes to custom data +- KeePassHTTP ã®å±žæ€§ã‚’カスタムデータã«ç§»è¡Œã™ã‚‹ +- +- +- Do you really want to move all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- 本当ã«ãƒ¬ã‚¬ã‚·ãƒ¼ãªãƒ–ラウザー統åˆã®ãƒ‡ãƒ¼ã‚¿ã‚’最新ã®æ¨™æº–ã«ç§»è¡Œã—ã¾ã™ã‹ï¼Ÿ +-ã“ã‚Œã¯ãƒ–ラウザープラグインã¨ã®äº’æ›æ€§ç¶­æŒã«å¿…è¦ã§ã™ã€‚ +- +- +- Stored browser keys +- ä¿å­˜ã•ã‚ŒãŸãƒ–ラウザーキー +- +- +- Remove selected key +- é¸æŠžã—ãŸã‚­ãƒ¼ã‚’削除 +- +- +- Move KeePassHTTP attributes to KeePassXC-Browser custom data +- KeePassHTTP ã®å±žæ€§ã‚’ KeePassXC-Browser ã®ã‚«ã‚¹ã‚¿ãƒ ãƒ‡ãƒ¼ã‚¿ã«ç§»è¡Œã™ã‚‹ +- +- +- Refresh database root group ID +- データベースã®ãƒ«ãƒ¼ãƒˆã‚°ãƒ«ãƒ¼ãƒ— ID ã‚’æ›´æ–°ã™ã‚‹ +- +- +- Created +- 作æˆæ—¥æ™‚ +- +- +- Refresh database ID +- データベース ID ã‚’æ›´æ–° +- +- +- Do you really want refresh the database ID? +-This is only necessary if your database is a copy of another and the browser extension cannot connect. +- 本当ã«ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ ID ã‚’æ›´æ–°ã—ã¾ã™ã‹ï¼Ÿ +-ã“ã‚Œã¯ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ãŒåˆ¥ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ã‚³ãƒ”ーã§ã€ãƒ–ラウザー拡張機能ãŒæŽ¥ç¶šã§ããªã„å ´åˆã«ã®ã¿å¿…è¦ã§ã™ã€‚ +- +- +- +- DatabaseSettingsWidgetDatabaseKey +- +- Add additional protection... +- ä¿è­·ã‚’追加... +- +- +- No password set +- パスワードを設定ã—ã¦ã„ã¾ã›ã‚“ +- +- +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- [警告] パスワードを設定ã—ã¦ã„ã¾ã›ã‚“。パスワードãªã—ã§ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ä½¿ç”¨ã¯æ¥µåŠ›é¿ã‘ã‚‹ã¹ãã§ã™ã€‚ +- +-パスワードãªã—ã§ç¶šè¡Œã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ +- +- +- Continue without password +- パスワードãªã—ã§ç¶šè¡Œ +- +- +- No encryption key added +- 追加ã—ãŸæš—å·åŒ–キーã¯ã‚ã‚Šã¾ã›ã‚“ +- +- +- You must add at least one encryption key to secure your database! +- データベースをセキュアã«ã™ã‚‹ã«ã¯ã€æš—å·åŒ–キーを少ãªãã¨ã‚‚一ã¤è¿½åŠ ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ +- +- +- Unknown error +- ä¸æ˜Žãªã‚¨ãƒ©ãƒ¼ã§ã™ +- +- +- Failed to change database credentials +- データベースã®è³‡æ ¼æƒ…å ±ã®å¤‰æ›´ã«å¤±æ•—ã—ã¾ã—㟠+- +- +- +- DatabaseSettingsWidgetEncryption +- +- Encryption Algorithm: +- æš—å·åŒ–アルゴリズム: +- +- +- AES: 256 Bit (default) +- AES: 256 ビット (既定) +- +- +- Twofish: 256 Bit +- Twofish: 256 ビット +- +- +- Key Derivation Function: +- éµå°Žå‡ºé–¢æ•°: +- +- +- Transform rounds: +- 変æ›å›žæ•°: +- +- +- Memory Usage: +- メモリ使用é‡: +- +- +- Parallelism: +- 並列処ç†: +- +- +- Decryption Time: +- 復å·åŒ–時間: +- +- +- ?? s +- ?? 秒 +- +- +- Change +- 変更 +- +- +- Higher values offer more protection, but opening the database will take longer. +- 値ãŒå¤§ãã„ã»ã©ä¿è­·åŠ›ãŒå¢—ã—ã¾ã™ãŒã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’é–‹ãã®ã«æ™‚é–“ãŒã‹ã‹ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚ +- +- +- Database format: +- データベースã®å½¢å¼: +- +- +- This is only important if you need to use your database with other programs. +- ã“ã‚Œã¯ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’ä»–ã®ãƒ—ログラムã§ä½¿ç”¨ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã®ã¿é‡è¦ã«ãªã‚Šã¾ã™ã€‚ +- +- +- KDBX 4.0 (recommended) +- KDBX 4.0 (推奨) +- +- +- KDBX 3.1 +- KDBX 3.1 +- +- +- unchanged +- Database decryption time is unchanged +- 変更ãªã— +- +- +- Number of rounds too high +- Key transformation rounds +- ラウンド数ãŒå¤§ãã™ãŽã¾ã™ +- +- +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or days (or even longer) to open! +- Argon2 ã®ã‚­ãƒ¼å¤‰æ›ãƒ©ã‚¦ãƒ³ãƒ‰æ•°ã«éžå¸¸ã«å¤§ããªå€¤ã‚’使用ã—ã¦ã„ã¾ã™ã€‚ +- +-ã“ã®å€¤ã‚’維æŒã™ã‚‹ã¨ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’é–‹ãã®ã«æ•°æ™‚é–“ã¾ãŸã¯æ•°æ—¥ (ã‚ã‚‹ã„ã¯ãれ以上) ã‹ã‹ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚ +- +- +- Understood, keep number +- ç†è§£ã—ãŸä¸Šã§å€¤ã‚’維æŒã™ã‚‹ +- +- +- Cancel +- キャンセル +- +- +- Number of rounds too low +- Key transformation rounds +- ラウンド数ãŒå°ã•ã™ãŽã¾ã™ +- +- +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database may be too easy to crack! +- AES-KDF ã®ã‚­ãƒ¼å¤‰æ›ãƒ©ã‚¦ãƒ³ãƒ‰æ•°ã«éžå¸¸ã«å°ã•ãªå€¤ã‚’使用ã—ã¦ã„ã¾ã™ã€‚ +- +-ã“ã®å€¤ã‚’維æŒã™ã‚‹ã¨ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ãŒç°¡å˜ã«ã‚¯ãƒ©ãƒƒã‚¯ã•ã‚Œã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚ +- +- +- KDF unchanged +- KDF ã¯å¤‰æ›´ã—ã¾ã›ã‚“ +- +- +- Failed to transform key with new KDF parameters; KDF unchanged. +- æ–°ã—ã„ KDF ã®ãƒ‘ラメーターã§ã®ã‚­ãƒ¼å¤‰æ›ã«å¤±æ•—ã—ã¾ã—ãŸã€‚KDF を変更ã—ã¾ã›ã‚“。 +- +- +- MiB +- Abbreviation for Mebibytes (KDF settings) +- MiB +- +- +- thread(s) +- Threads for parallel execution (KDF settings) +- スレッド +- +- +- Change existing decryption time +- 既存ã®å¾©å·åŒ–時間を変更 +- +- +- Decryption time in seconds +- 復å·åŒ–時間 (秒) +- +- +- Database format +- データベースã®å½¢å¼ +- +- +- Encryption algorithm +- æš—å·åŒ–アルゴリズム +- +- +- Key derivation function +- éµå°Žå‡ºé–¢æ•° +- +- +- Transform rounds +- 変æ›å›žæ•° +- +- +- Memory usage +- ãƒ¡ãƒ¢ãƒªä½¿ç”¨é‡ +- +- +- Parallelism +- ä¸¦åˆ—å‡¦ç† +- +- +- ?? ms +- ?? ミリ秒 +- +- +- ? s +- ? 秒 +- +- +- +- DatabaseSettingsWidgetFdoSecrets +- +- Exposed Entries +- 公開ã™ã‚‹ã‚¨ãƒ³ãƒˆãƒªãƒ¼ +- +- +- Don't expose this database +- ã“ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’公開ã—ãªã„ +- +- +- Expose entries under this group: +- ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—下ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’公開ã™ã‚‹: +- +- +- Enable Secret Service to access these settings. +- ã“れらã®è¨­å®šã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆã‚µãƒ¼ãƒ“スを有効ã«ã—ã¦ãã ã•ã„。 +- +- +- +- DatabaseSettingsWidgetGeneral +- +- Database Meta Data +- データベースã®ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ +- +- +- Database name: +- データベースå: +- +- +- Database description: +- データベースã®æ¦‚è¦: +- +- +- Default username: +- 既定ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼å: +- +- +- History Settings +- 履歴ã®è¨­å®š +- +- +- Max. history items: +- 最大履歴数: +- +- +- Max. history size: +- 最大履歴データサイズ: +- +- +- MiB +- MiB +- +- +- Use recycle bin +- ゴミ箱を使用ã™ã‚‹ +- +- +- Additional Database Settings +- 追加ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹è¨­å®š +- +- +- Database name field +- データベースåフィールド +- +- +- Database description field +- データベースã®æ¦‚è¦ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ +- +- +- Default username field +- 既定ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åフィールド +- +- +- Maximum number of history items per entry +- エントリー毎ã®å±¥æ­´ã‚¢ã‚¤ãƒ†ãƒ ã®æœ€å¤§æ•° +- +- +- Maximum size of history per entry +- エントリー毎ã®å±¥æ­´ã®æœ€å¤§ã‚µã‚¤ã‚º +- +- +- Delete Recycle Bin +- ゴミ箱を削除 +- +- +- Do you want to delete the current recycle bin and all its contents? +-This action is not reversible. +- ゴミ箱ã¨ãã®å†…容を削除ã—ã¾ã™ã‹ï¼Ÿ +-ã“ã‚Œã¯å…ƒã«æˆ»ã™ã“ã¨ãŒã§ãã¾ã›ã‚“。 +- +- +- (old) +- (æ—§) +- +- +- Enable compression (recommended) +- 圧縮を有効ã«ã™ã‚‹ (推奨) +- +- +- +- DatabaseSettingsWidgetKeeShare +- +- Sharing +- 共有 +- +- +- Breadcrumb +- 階層リンク +- +- +- Type +- 種類 +- +- +- Path +- パス +- +- +- Last Signer +- 最終署å者 +- +- +- Certificates +- 証明書 +- +- +- > +- Breadcrumb separator +- > +- +- +- +- DatabaseSettingsWidgetMetaDataSimple +- +- Database Name: +- データベースå: +- +- +- Description: +- 概è¦: +- +- +- Database name field +- データベースåフィールド +- +- +- Database description field +- データベースã®æ¦‚è¦ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ +- +- +- +- DatabaseTabWidget +- +- KeePass 2 Database +- KeePass 2 データベース +- +- +- All files +- å…¨ã¦ã®ãƒ•ã‚¡ã‚¤ãƒ« +- +- +- Open database +- データベースを開ã +- +- +- CSV file +- CSV ファイル +- +- +- Merge database +- データベースをマージã™ã‚‹ +- +- +- Open KeePass 1 database +- KeePass 1 データベースを開ã +- +- +- KeePass 1 database +- KeePass 1 データベース +- +- +- Export database to CSV file +- データベースを CSV ファイルã¸ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ +- +- +- Writing the CSV file failed. +- CSV ファイルã¸ã®æ›¸ãè¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ +- +- +- Database creation error +- データベース作æˆã‚¨ãƒ©ãƒ¼ +- +- +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- 作æˆã—ãŸãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã¯ã‚­ãƒ¼ã‚„ KDF ãŒãªã„ãŸã‚ä¿å­˜ã—ã¾ã›ã‚“。 +-ã“ã‚Œã¯ç¢ºå®Ÿã«ãƒã‚°ãªã®ã§ã€é–‹ç™ºè€…ã¸ã®å ±å‘Šã‚’ãŠé¡˜ã„ã—ã¾ã™ã€‚ +- +- +- Select CSV file +- CSV ファイルをé¸æŠž +- +- +- New Database +- æ–°ã—ã„データベース +- +- +- %1 [New Database] +- Database tab name modifier +- %1 [æ–°ã—ã„データベース] +- +- +- %1 [Locked] +- Database tab name modifier +- %1 [ロック] +- +- +- %1 [Read-only] +- Database tab name modifier +- %1 [読ã¿å–り専用] +- +- +- Failed to open %1. It either does not exist or is not accessible. +- %1 ã¯å­˜åœ¨ã—ãªã„ã‹ã‚¢ã‚¯ã‚»ã‚¹å¯èƒ½ã§ã¯ãªã„ãŸã‚ã€é–‹ãã®ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ +- +- +- Export database to HTML file +- データベースを HTML ファイルã¸ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ +- +- +- HTML file +- HTML ファイル +- +- +- Writing the HTML file failed. +- HTML ファイルã¸ã®æ›¸ãè¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ +- +- +- Export Confirmation +- エクスãƒãƒ¼ãƒˆã®ç¢ºèª +- +- +- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? +- データベースを暗å·åŒ–ã›ãšã«ãƒ•ã‚¡ã‚¤ãƒ«ã¸ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚ã“ã‚Œã¯ãƒ‘スワードや機密情報ãŒè„†å¼±ãªçŠ¶æ…‹ã«ç½®ã‹ã‚Œã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚続行ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ +- +- +- Open OPVault +- OPVault ã‚’é–‹ã +- +- +- +- DatabaseWidget +- +- Searching... +- 検索中… +- +- +- Do you really want to delete the entry "%1" for good? +- 本当ã«ã‚¨ãƒ³ãƒˆãƒªãƒ¼ "%1" を永久ã«å‰Šé™¤ã—ã¾ã™ã‹ï¼Ÿ +- +- +- Do you really want to move entry "%1" to the recycle bin? +- 本当ã«ã‚¨ãƒ³ãƒˆãƒªãƒ¼ "%1" をゴミ箱ã«ç§»å‹•ã—ã¾ã™ã‹ï¼Ÿ +- +- +- Do you really want to move %n entry(s) to the recycle bin? +- 本当㫠%n 個ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’ゴミ箱ã«ç§»å‹•ã—ã¾ã™ã‹ï¼Ÿ +- +- +- Execute command? +- コマンドを実行ã—ã¾ã™ã‹ï¼Ÿ +- +- +- Do you really want to execute the following command?<br><br>%1<br> +- 本当ã«æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã‹ï¼Ÿ<br><br>%1<br> +- +- +- Remember my choice +- é¸æŠžã‚’記憶ã™ã‚‹ +- +- +- Do you really want to delete the group "%1" for good? +- 本当ã«ã‚°ãƒ«ãƒ¼ãƒ— "%1" を永久ã«å‰Šé™¤ã—ã¾ã™ã‹ï¼Ÿ +- +- +- No current database. +- ç¾åœ¨ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã¯ã‚ã‚Šã¾ã›ã‚“。 +- +- +- No source database, nothing to do. +- ソースデータベースã¯ã‚ã‚Šã¾ã›ã‚“。行ã†ã¹ãã“ã¨ã¯ã‚ã‚Šã¾ã›ã‚“。 +- +- +- Search Results (%1) +- 検索çµæžœ (%1) +- +- +- No Results +- 見ã¤ã‹ã‚Šã¾ã›ã‚“ +- +- +- File has changed +- ファイルãŒå¤‰æ›´ã•ã‚Œã¾ã—㟠+- +- +- The database file has changed. Do you want to load the changes? +- データベースファイルãŒå¤‰æ›´ã•ã‚Œã¾ã—ãŸã€‚変更を読ã¿è¾¼ã¿ã¾ã™ã‹ï¼Ÿ +- +- +- Merge Request +- マージリクエスト +- +- +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- データベースファイルãŒå¤‰æ›´ã•ã‚Œã€ä¿å­˜ã•ã‚Œã¦ã„ã¾ã›ã‚“。 +-変更をマージã—ã¾ã™ã‹ï¼Ÿ +- +- +- Empty recycle bin? +- ゴミ箱を空ã«ã—ã¾ã™ã‹ï¼Ÿ +- +- +- Are you sure you want to permanently delete everything from your recycle bin? +- ゴミ箱ã«ã‚る全項目を永久ã«å‰Šé™¤ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ +- +- +- Do you really want to delete %n entry(s) for good? +- 本当㫠%n 個ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’永久ã«å‰Šé™¤ã—ã¾ã™ã‹ï¼Ÿ +- +- +- Delete entry(s)? +- エントリーを削除ã—ã¾ã™ã‹ï¼Ÿ +- +- +- Move entry(s) to recycle bin? +- エントリーをゴミ箱ã«ç§»å‹•ã—ã¾ã™ã‹ï¼Ÿ +- +- +- Lock Database? +- データベースをロックã—ã¾ã™ã‹ï¼Ÿ +- +- +- You are editing an entry. Discard changes and lock anyway? +- エントリーを編集中ã§ã™ã€‚変更を破棄ã—ã¦ãƒ­ãƒƒã‚¯ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ +- +- +- "%1" was modified. +-Save changes? +- "%1" ãŒæ›´æ–°ã•ã‚Œã¾ã—ãŸã€‚ +-変更をä¿å­˜ã—ã¾ã™ã‹ï¼Ÿ +- +- +- Database was modified. +-Save changes? +- データベースãŒæ›´æ–°ã•ã‚Œã¾ã—ãŸã€‚ +-変更をä¿å­˜ã—ã¾ã™ã‹ï¼Ÿ +- +- +- Save changes? +- 変更をä¿å­˜ã—ã¾ã™ã‹ï¼Ÿ +- +- +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- 自動å†èª­ã¿è¾¼ã¿ã—よã†ã¨ã—ãŸéš›ã«ã€æ–°ã—ã„データベースファイルを開ãã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ +-エラー: %1 +- +- +- Disable safe saves? +- 安全ãªä¿å­˜ã‚’無効ã«ã—ã¾ã™ã‹ï¼Ÿ +- +- +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- KeePassXC ã¯ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®å¤šæ®µéšŽä¿å­˜ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ã“ã‚Œã¯æらãã€ä¿å­˜ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ロックã—ã¦ã„るファイルåŒæœŸã‚µãƒ¼ãƒ“スãŒåŽŸå› ã ã¨æ€ã‚ã‚Œã¾ã™ã€‚ +-安全ãªä¿å­˜ã‚’無効ã«ã—ã¦å†è©¦è¡Œã—ã¾ã™ã‹ï¼Ÿ +- +- +- Passwords +- パスワード +- +- +- Save database as +- ファイルåã‚’ã¤ã‘ã¦ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’ä¿å­˜ +- +- +- KeePass 2 Database +- KeePass 2 データベース +- +- +- Replace references to entry? +- エントリーã®å‚照を置ãæ›ãˆã¾ã™ã‹ï¼Ÿ +- +- +- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? +- エントリー "%1" ã«ã¯ %2 個ã®å‚ç…§ãŒã‚ã‚Šã¾ã™ã€‚上書ãã€ã‚¹ã‚­ãƒƒãƒ—ã€å‰Šé™¤ã®ã©ã‚Œã‚’è¡Œã„ã¾ã™ã‹ï¼Ÿ +- +- +- Delete group +- グループを削除 +- +- +- Move group to recycle bin? +- グループをゴミ箱ã«ç§»å‹•ã—ã¾ã™ã‹ï¼Ÿ +- +- +- Do you really want to move the group "%1" to the recycle bin? +- 本当ã«ã‚°ãƒ«ãƒ¼ãƒ— "%1" をゴミ箱ã«ç§»å‹•ã—ã¾ã™ã‹ï¼Ÿ +- +- +- Successfully merged the database files. +- データベースファイルを正常ã«ãƒžãƒ¼ã‚¸ã—ã¾ã—ãŸã€‚ +- +- +- Database was not modified by merge operation. +- データベースã¯ãƒžãƒ¼ã‚¸å‡¦ç†ã§æ›´æ–°ã•ã‚Œã¾ã›ã‚“ã§ã—ãŸã€‚ +- +- +- Shared group... +- 共有グループ... +- +- +- Writing the database failed: %1 +- データベースã¸ã®æ›¸ãè¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ: %1 +- +- +- This database is opened in read-only mode. Autosave is disabled. +- ã“ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã¯èª­ã¿å–り専用モードã§é–‹ã„ã¦ã„ã¾ã™ã€‚自動ä¿å­˜ã¯ç„¡åŠ¹ã§ã™ã€‚ +- +- +- Save database backup +- データベースã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã‚’ä¿å­˜ +- +- +- Could not find database file: %1 +- データベースファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ: %1 +- +- +- +- EditEntryWidget +- +- Entry +- エントリー +- +- +- Advanced +- 詳細設定 +- +- +- Icon +- アイコン +- +- +- Auto-Type +- 自動入力 +- +- +- Properties +- プロパティ +- +- +- History +- 履歴 +- +- +- SSH Agent +- SSH エージェント +- +- +- n/a +- N/A +- +- +- (encrypted) +- (æš—å·åŒ–) +- +- +- Select private key +- 秘密éµã‚’é¸æŠž +- +- +- Entry history +- エントリーã®å±¥æ­´ +- +- +- Add entry +- エントリーを追加 +- +- +- Edit entry +- エントリーを編集 +- +- +- New attribute +- æ–°ã—ã„属性 +- +- +- Are you sure you want to remove this attribute? +- ã“ã®å±žæ€§ã‚’削除ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ +- +- +- Tomorrow +- 明日 +- +- +- %n week(s) +- %n 週間 +- +- +- %n month(s) +- %n ヶ月 +- +- +- Entry updated successfully. +- エントリーを正常ã«æ›´æ–°ã—ã¾ã—ãŸã€‚ +- +- +- New attribute %1 +- æ–°ã—ã„属性 %1 +- +- +- %n year(s) +- %n å¹´ +- +- +- Confirm Removal +- 削除ã®ç¢ºèª +- +- +- Browser Integration +- ãƒ–ãƒ©ã‚¦ã‚¶ãƒ¼çµ±åˆ +- +- +- <empty URL> +- <empty URL> +- +- +- Are you sure you want to remove this URL? +- ã“ã® URL を削除ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ +- +- +- Reveal +- 開示 +- +- +- Hide +- éš ã™ +- +- +- Unsaved Changes +- 未ä¿å­˜ã®å¤‰æ›´ +- +- +- Would you like to save changes to this entry? +- ã“ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã®å¤‰æ›´ã‚’ä¿å­˜ã—ã¾ã™ã‹ï¼Ÿ +- +- +- [PROTECTED] Press Reveal to view or edit +- [ä¿è­·] 表示ã¾ãŸã¯ç·¨é›†ã™ã‚‹å ´åˆã¯é–‹ç¤ºã‚’クリックã—ã¦ãã ã•ã„ +- +- +- Invalid Entry +- ä¸æ­£ãªã‚¨ãƒ³ãƒˆãƒªãƒ¼ +- +- +- An external merge operation has invalidated this entry. +-Unfortunately, any changes made have been lost. +- 外部ã§ã®ãƒžãƒ¼ã‚¸å‡¦ç†ã«ã‚ˆã£ã¦ã€ã“ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã¯ç„¡åŠ¹åŒ–ã•ã‚Œã¾ã—ãŸã€‚ +-申ã—訳ã‚ã‚Šã¾ã›ã‚“ãŒã€è¡Œã£ãŸå¤‰æ›´ã¯å…¨ã¦å¤±ã‚ã‚Œã¾ã—ãŸã€‚ +- +- +- +- EditEntryWidgetAdvanced +- +- Additional attributes +- 追加属性 +- +- +- Add +- 追加 +- +- +- Remove +- 削除 +- +- +- Edit Name +- åå‰ã‚’編集 +- +- +- Protect +- ä¿è­· +- +- +- Reveal +- 開示 +- +- +- Attachments +- 添付ファイル +- +- +- Foreground Color: +- 文字色: +- +- +- Background Color: +- 背景色: +- +- +- Attribute selection +- 属性ã®é¸æŠž +- +- +- Attribute value +- 属性値 +- +- +- Add a new attribute +- æ–°ã—ã„属性を追加 +- +- +- Remove selected attribute +- é¸æŠžã—ãŸå±žæ€§ã‚’削除 +- +- +- Edit attribute name +- 属性åを編集 +- +- +- Toggle attribute protection +- 属性ã®ä¿è­·ã‚’切り替㈠+- +- +- Show a protected attribute +- ä¿è­·ã•ã‚ŒãŸå±žæ€§ã‚’表示 +- +- +- Foreground color selection +- å‰æ™¯è‰²ã®é¸æŠž +- +- +- Background color selection +- 背景色ã®é¸æŠž +- +- +- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> +- <html><head/><body><p>ãƒã‚§ãƒƒã‚¯ã‚’入れるã¨ã€ã‚¨ãƒ³ãƒˆãƒªãƒ¼ãŒå“質è¦ä»¶ã‚’満ãŸã•ãªã‹ã£ãŸ (例ãˆã°ãƒ‘スワードã®ã‚¨ãƒ³ãƒˆãƒ­ãƒ”ーãŒä½Žã‹ã£ãŸã‚Šä½•åº¦ã‚‚使ã„回ã•ã‚Œã¦ã„ãŸ) ã¨ã—ã¦ã‚‚ã€å®‰å…¨æ€§ã®ç¢ºèªã‚„ HIBP ã®ãƒ¬ãƒãƒ¼ãƒˆã«ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’表示ã—ã¾ã›ã‚“。パスワードã®æ±ºå®šæ¨©ãŒè‡ªèº«ã«ãªã„ (例ãˆã°å¿…è¦ãªãƒ‘スワードãŒå››æ¡ã® PIN ã§ã‚ã‚‹) å ´åˆãªã©ã«ã€ãƒ¬ãƒãƒ¼ãƒˆã®ãƒŽã‚¤ã‚ºã«ãªã‚‹ã®ã‚’防ãã“ã¨ãŒã§ãã¾ã™ã€‚</p></body></html> +- +- +- Exclude from database reports +- データベースã®ãƒ¬ãƒãƒ¼ãƒˆã‹ã‚‰é™¤å¤–ã™ã‚‹ +- +- +- +- EditEntryWidgetAutoType +- +- Enable Auto-Type for this entry +- ã“ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã®è‡ªå‹•å…¥åŠ›ã‚’有効ã«ã™ã‚‹ +- +- +- Window Associations +- ウィンドウã®é–¢é€£ä»˜ã‘ +- +- +- + +- + +- +- +- - +- - +- +- +- Window title: +- ウィンドウタイトル: +- +- +- Use a specific sequence for this association: +- ã“ã®é–¢é€£ä»˜ã‘ã«ç‰¹å®šã®ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ã‚’使用ã™ã‚‹: +- +- +- Custom Auto-Type sequence +- カスタム自動入力シーケンス +- +- +- Open Auto-Type help webpage +- 自動入力ã®ãƒ˜ãƒ«ãƒ—ウェブページを開ã +- +- +- Existing window associations +- 既存ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦é–¢é€£ä»˜ã‘ +- +- +- Add new window association +- æ–°ã—ã„ウィンドウ関連付ã‘を追加 +- +- +- Remove selected window association +- é¸æŠžã—ãŸã‚¦ã‚£ãƒ³ãƒ‰ã‚¦é–¢é€£ä»˜ã‘を削除 +- +- +- You can use an asterisk (*) to match everything +- アスタリスク (*) を使用ã™ã‚‹ã¨å…¨ã¦ã«ä¸€è‡´ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ +- +- +- Set the window association title +- ウィンドウ関連付ã‘ã®ã‚¿ã‚¤ãƒˆãƒ«ã‚’設定 +- +- +- You can use an asterisk to match everything +- アスタリスクを使用ã™ã‚‹ã¨å…¨ã¦ã«ä¸€è‡´ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ +- +- +- Custom Auto-Type sequence for this window +- ã“ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã®ã‚«ã‚¹ã‚¿ãƒ è‡ªå‹•å…¥åŠ›ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ +- +- +- Inherit default Auto-Type sequence from the group +- 自動入力シーケンスをグループã‹ã‚‰å¼•ã継ã +- +- +- Use custom Auto-Type sequence: +- カスタム自動入力シーケンスを使用ã™ã‚‹: +- +- +- +- EditEntryWidgetBrowser +- +- These settings affect to the entry's behaviour with the browser extension. +- ã“れらã®è¨­å®šã¯ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã®æŒ™å‹• (ブラウザー拡張機能) ã«å½±éŸ¿ã—ã¾ã™ã€‚ +- +- +- General +- 全般 +- +- +- Skip Auto-Submit for this entry +- ã“ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã®è‡ªå‹•é€ä¿¡ã‚’スキップã™ã‚‹ +- +- +- Hide this entry from the browser extension +- ã“ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’ブラウザー拡張機能ã‹ã‚‰éš ã™ +- +- +- Additional URL's +- 追加㮠URL +- +- +- Add +- 追加 +- +- +- Remove +- 削除 +- +- +- Edit +- 編集 +- +- +- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. +- ã“ã®è¨­å®šã‚’ブラウザー㮠HTTP èªè¨¼ãƒ€ã‚¤ã‚¢ãƒ­ã‚°ã«ã®ã¿é€ä¿¡ã—ã¾ã™ã€‚有効ã«ãªã£ã¦ã„ã‚‹å ´åˆã€ã“ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã¯é€šå¸¸ã®ãƒ­ã‚°ã‚¤ãƒ³ãƒ•ã‚©ãƒ¼ãƒ ã«ã¯è¡¨ç¤ºã•ã‚Œã¾ã›ã‚“。 +- +- +- Use this entry only with HTTP Basic Auth +- ã“ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã¯ HTTP ベーシックèªè¨¼ã§ã®ã¿ä½¿ç”¨ã™ã‚‹ +- +- +- +- EditEntryWidgetHistory +- +- Show +- 表示 +- +- +- Restore +- 復元 +- +- +- Delete +- 削除 +- +- +- Delete all +- å…¨ã¦å‰Šé™¤ +- +- +- Entry history selection +- エントリーã®å±¥æ­´ã®é¸æŠž +- +- +- Show entry at selected history state +- é¸æŠžã—ãŸå±¥æ­´ã®æ™‚点ã§ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã®çŠ¶æ…‹ã‚’表示 +- +- +- Restore entry to selected history state +- エントリーをé¸æŠžã—ãŸå±¥æ­´ã®çŠ¶æ…‹ã«å¾©å…ƒ +- +- +- Delete selected history state +- é¸æŠžã—ãŸå±¥æ­´ã‚’削除 +- +- +- Delete all history +- å…¨ã¦ã®å±¥æ­´ã‚’削除 +- +- +- +- EditEntryWidgetMain +- +- URL: +- URL: +- +- +- Password: +- パスワード: +- +- +- Title: +- タイトル: +- +- +- Presets +- プリセット +- +- +- Toggle the checkbox to reveal the notes section. +- ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã«ãƒã‚§ãƒƒã‚¯ã‚’入れるã¨ãƒ¡ãƒ¢ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚ +- +- +- Username: +- ユーザーå: +- +- +- Url field +- URL フィールド +- +- +- Download favicon for URL +- URL 用ã®ãƒ•ã‚¡ãƒ“コンをダウンロード +- +- +- Password field +- パスワードフィールド +- +- +- Toggle notes visible +- メモã®è¡¨ç¤ºã‚’切り替㈠+- +- +- Expiration field +- 有効期é™ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ +- +- +- Expiration Presets +- 有効期é™ã®ãƒ—リセット +- +- +- Expiration presets +- 有効期é™ã®ãƒ—リセット +- +- +- Notes field +- メモフィールド +- +- +- Title field +- タイトルフィールド +- +- +- Username field +- ユーザーåフィールド +- +- +- Toggle expiration +- 有効期é™ã‚’切り替㈠+- +- +- Notes: +- メモ: +- +- +- https://example.com +- https://example.com +- +- +- Expires: +- 期é™: +- +- +- Edit Entry +- エントリーを編集 +- +- +- +- EditEntryWidgetSSHAgent +- +- Form +- フォーム +- +- +- Remove key from agent after +- 次ã®æ™‚é–“ãŒéŽãŽãŸã‚‰ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆã‹ã‚‰ã‚­ãƒ¼ã‚’削除 +- +- +- seconds +- 秒 +- +- +- Fingerprint +- フィンガープリント +- +- +- Remove key from agent when database is closed/locked +- データベースを閉ã˜ãŸã‚Šãƒ­ãƒƒã‚¯ã—ãŸéš›ã«ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆã‹ã‚‰ã‚­ãƒ¼ã‚’削除ã™ã‚‹ +- +- +- Public key +- å…¬é–‹éµ +- +- +- Add key to agent when database is opened/unlocked +- データベースを開ã„ãŸã‚Šãƒ­ãƒƒã‚¯ã‚’解除ã—ãŸéš›ã«ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆã«ã‚­ãƒ¼ã‚’追加ã™ã‚‹ +- +- +- Comment +- コメント +- +- +- Decrypt +- å¾©å· +- +- +- n/a +- N/A +- +- +- Copy to clipboard +- クリップボードã«ã‚³ãƒ”ー +- +- +- Private key +- ç§˜å¯†éµ +- +- +- External file +- 外部ファイル +- +- +- Browse... +- Button for opening file dialog +- å‚ç…§... +- +- +- Attachment +- 添付ファイル +- +- +- Add to agent +- エージェントã«è¿½åŠ  +- +- +- Remove from agent +- エージェントã‹ã‚‰å‰Šé™¤ +- +- +- Require user confirmation when this key is used +- ã“ã®ã‚­ãƒ¼ã‚’使用ã™ã‚‹éš›ã«å¿…ãšãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ç¢ºèªã™ã‚‹ +- +- +- Remove key from agent after specified seconds +- 指定秒経éŽå¾Œã«ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆã‹ã‚‰ã‚­ãƒ¼ã‚’削除 +- +- +- Browser for key file +- キーファイルブラウザー +- +- +- External key file +- 外部キーファイル +- +- +- Select attachment file +- 添付ファイルをé¸æŠž +- +- +- +- EditGroupWidget +- +- Group +- グループ +- +- +- Icon +- アイコン +- +- +- Properties +- プロパティ +- +- +- Add group +- グループを追加 +- +- +- Edit group +- グループを編集 +- +- +- Enable +- 有効 +- +- +- Disable +- 無効 +- +- +- Inherit from parent group (%1) +- 親グループ "(%1)" ã‹ã‚‰å¼•ã継ã +- +- +- Entry has unsaved changes +- エントリーã«æœªä¿å­˜ã®å¤‰æ›´ãŒã‚ã‚Šã¾ã™ +- +- +- +- EditGroupWidgetKeeShare +- +- Type: +- 種類: +- +- +- Path: +- パス: +- +- +- Password: +- パスワード: +- +- +- Inactive +- éžã‚¢ã‚¯ãƒ†ã‚£ãƒ– +- +- +- KeeShare unsigned container +- KeeShare 未署åコンテナ +- +- +- KeeShare signed container +- KeeShare ç½²åコンテナ +- +- +- Select import source +- インãƒãƒ¼ãƒˆã‚½ãƒ¼ã‚¹ã‚’é¸æŠž +- +- +- Select export target +- エクスãƒãƒ¼ãƒˆå¯¾è±¡ã‚’é¸æŠž +- +- +- Select import/export file +- インãƒãƒ¼ãƒˆ/エクスãƒãƒ¼ãƒˆãƒ•ã‚¡ã‚¤ãƒ«ã‚’é¸æŠž +- +- +- Clear +- 消去 +- +- +- Import +- インãƒãƒ¼ãƒˆ +- +- +- Export +- エクスãƒãƒ¼ãƒˆ +- +- +- Synchronize +- åŒæœŸ +- +- +- Your KeePassXC version does not support sharing this container type. +-Supported extensions are: %1. +- ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® KeePassXC ã¯ã“ã®ã‚³ãƒ³ãƒ†ãƒŠå½¢å¼ã®å…±æœ‰ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。 +-サãƒãƒ¼ãƒˆã—ã¦ã„る拡張機能: %1. +- +- +- %1 is already being exported by this database. +- %1 ã¯æ—¢ã«ã“ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã§ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆæ¸ˆã¿ã§ã™ã€‚ +- +- +- %1 is already being imported by this database. +- %1 ã¯æ—¢ã«ã“ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã§ã‚¤ãƒ³ãƒãƒ¼ãƒˆæ¸ˆã¿ã§ã™ã€‚ +- +- +- %1 is being imported and exported by different groups in this database. +- %1 ã¯æ—¢ã«ã“ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ä»–ã®ã‚°ãƒ«ãƒ¼ãƒ—ã§ã‚¤ãƒ³ãƒãƒ¼ãƒˆ/エクスãƒãƒ¼ãƒˆæ¸ˆã¿ã§ã™ã€‚ +- +- +- KeeShare is currently disabled. You can enable import/export in the application settings. +- KeeShare is a proper noun +- KeeShare ã¯ç¾åœ¨ç„¡åŠ¹ã§ã™ã€‚設定ã§ã‚¤ãƒ³ãƒãƒ¼ãƒˆã¨ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã‚’有効ã«ã§ãã¾ã™ã€‚ +- +- +- Database export is currently disabled by application settings. +- ç¾åœ¨ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã¯è¨­å®šã§ç„¡åŠ¹ã«ãªã£ã¦ã„ã¾ã™ã€‚ +- +- +- Database import is currently disabled by application settings. +- ç¾åœ¨ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã¯è¨­å®šã§ç„¡åŠ¹ã«ãªã£ã¦ã„ã¾ã™ã€‚ +- +- +- Sharing mode field +- 共有モードフィールド +- +- +- Path to share file field +- 共有ファイルパスフィールド +- +- +- Password field +- パスワードフィールド +- +- +- Clear fields +- フィールドを消去 +- +- +- Browse for share file +- 共有ファイルを探㙠+- +- +- Browse... +- å‚ç…§... +- +- +- +- EditGroupWidgetMain +- +- Name field +- åå‰ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ +- +- +- Notes field +- メモフィールド +- +- +- Toggle expiration +- 有効期é™ã‚’切り替㈠+- +- +- Auto-Type toggle for this and sub groups +- ã“ã‚Œã¨ã‚µãƒ–グループã®è‡ªå‹•å…¥åŠ›ã‚’切り替㈠+- +- +- Expiration field +- 有効期é™ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ +- +- +- Search toggle for this and sub groups +- ã“ã‚Œã¨ã‚µãƒ–グループã®æ¤œç´¢ã‚’切り替㈠+- +- +- Default auto-type sequence field +- 既定ã®è‡ªå‹•å…¥åŠ›ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ +- +- +- Expires: +- 期é™: +- +- +- Use default Auto-Type sequence of parent group +- 親グループã®æ—¢å®šã®è‡ªå‹•å…¥åŠ›ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ã‚’使用ã™ã‚‹ +- +- +- Auto-Type: +- 自動入力: +- +- +- Search: +- 検索: +- +- +- Notes: +- メモ: +- +- +- Name: +- åå‰: +- +- +- Set default Auto-Type sequence +- 既定ã®è‡ªå‹•å…¥åŠ›ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ã‚’設定ã™ã‚‹ +- +- +- Edit Group +- グループを編集 +- +- +- +- EditWidgetIcons +- +- Add custom icon +- カスタムアイコンを追加 +- +- +- Delete custom icon +- カスタムアイコンを削除 +- +- +- Download favicon +- ファビコンをダウンロード +- +- +- Unable to fetch favicon. +- ファビコンをå–å¾—ã§ãã¾ã›ã‚“。 +- +- +- Images +- ç”»åƒ +- +- +- All files +- å…¨ã¦ã®ãƒ•ã‚¡ã‚¤ãƒ« +- +- +- Confirm Delete +- 削除ã®ç¢ºèª +- +- +- Select Image(s) +- ç”»åƒã‚’é¸æŠž +- +- +- Successfully loaded %1 of %n icon(s) +- %1 / %n 個ã®ã‚¢ã‚¤ã‚³ãƒ³ãŒæ­£å¸¸ã«èª­ã¿è¾¼ã¾ã‚Œã¾ã—㟠+- +- +- No icons were loaded +- アイコンãŒèª­ã¿è¾¼ã¾ã‚Œã¦ã„ã¾ã›ã‚“ +- +- +- %n icon(s) already exist in the database +- %n 個ã®ã‚¢ã‚¤ã‚³ãƒ³ãŒãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹å†…ã«æ—¢ã«å­˜åœ¨ã—ã¾ã™ +- +- +- The following icon(s) failed: +- 次ã®ã‚¢ã‚¤ã‚³ãƒ³ã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ: +- +- +- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? +- ã“ã®ã‚¢ã‚¤ã‚³ãƒ³ã¯ %n 個ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã§ä½¿ç”¨ã•ã‚Œã¦ãŠã‚Šã€æ—¢å®šã®ã‚¢ã‚¤ã‚³ãƒ³ã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã™ã€‚本当ã«å‰Šé™¤ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ +- +- +- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security +- ツール -> 設定 -> セキュリティ㧠DuckDuckGo ウェブサイトアイコンサービスを有効ã«ã§ãã¾ã™ +- +- +- Download favicon for URL +- URL 用ã®ãƒ•ã‚¡ãƒ“コンをダウンロード +- +- +- Apply selected icon to subgroups and entries +- é¸æŠžã—ãŸã‚¢ã‚¤ã‚³ãƒ³ã‚’サブグループã¨ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã«é©ç”¨ +- +- +- Also apply to child groups +- å­ã‚°ãƒ«ãƒ¼ãƒ—ã«ã‚‚é©ç”¨ +- +- +- Also apply to child entries +- å­ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã«ã‚‚é©ç”¨ +- +- +- Also apply to all children +- å…¨ã¦ã®å­ã«ã‚‚é©ç”¨ +- +- +- Existing icon selected. +- é¸æŠžã—ãŸã‚¢ã‚¤ã‚³ãƒ³ã¯æ—¢å­˜ã§ã™ã€‚ +- +- +- Use default icon +- 既定ã®ã‚¢ã‚¤ã‚³ãƒ³ã‹ã‚‰é¸æŠž +- +- +- Use custom icon +- カスタムアイコンã‹ã‚‰é¸æŠž +- +- +- Apply icon to... +- アイコンをé©ç”¨... +- +- +- Apply to this group only +- ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«ã®ã¿é©ç”¨ +- +- +- +- EditWidgetProperties +- +- Created: +- 作æˆæ—¥æ™‚: +- +- +- Modified: +- 編集日時: +- +- +- Accessed: +- アクセス日時: +- +- +- Uuid: +- UUID: +- +- +- Plugin Data +- プラグインデータ +- +- +- Remove +- 削除 +- +- +- Delete plugin data? +- プラグインデータを削除ã—ã¾ã™ã‹ï¼Ÿ +- +- +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- 本当ã«é¸æŠžã—ãŸãƒ—ラグインデータを削除ã—ã¾ã™ã‹ï¼Ÿ +-プラグインã®å‹•ä½œã«å½±éŸ¿ã‚’åŠã¼ã™å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚ +- +- +- Key +- キー +- +- +- Value +- 値 +- +- +- Datetime created +- 作æˆæ—¥æ™‚ +- +- +- Datetime modified +- 更新日時 +- +- +- Datetime accessed +- アクセス日時 +- +- +- Unique ID +- 固有 ID +- +- +- Plugin data +- プラグインデータ +- +- +- Remove selected plugin data +- é¸æŠžã—ãŸãƒ—ラグインデータを削除 +- +- +- +- Entry +- +- %1 - Clone +- %1 - 複製 +- +- +- +- EntryAttachmentsModel +- +- Name +- åå‰ +- +- +- Size +- サイズ +- +- +- +- EntryAttachmentsWidget +- +- Form +- フォーム +- +- +- Add +- 追加 +- +- +- Remove +- 削除 +- +- +- Open +- é–‹ã +- +- +- Save +- ä¿å­˜ +- +- +- Select files +- ファイルをé¸æŠž +- +- +- Are you sure you want to remove %n attachment(s)? +- %n 個ã®æ·»ä»˜ãƒ•ã‚¡ã‚¤ãƒ«ã‚’削除ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ +- +- +- Save attachments +- 添付ファイルをä¿å­˜ +- +- +- Unable to create directory: +-%1 +- ディレクトリを作æˆã§ãã¾ã›ã‚“: +-%1 +- +- +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- 既存ã®ãƒ•ã‚¡ã‚¤ãƒ« "%1" を上書ãã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ +- +- +- Confirm overwrite +- 上書ãã®ç¢ºèª +- +- +- Unable to save attachments: +-%1 +- 添付ファイルをä¿å­˜ã§ãã¾ã›ã‚“: +-%1 +- +- +- Unable to open attachment: +-%1 +- 添付ファイルを開ã‘ã¾ã›ã‚“: +-%1 +- +- +- Unable to open attachments: +-%1 +- 添付ファイルを開ã‘ã¾ã›ã‚“: +-%1 +- +- +- Confirm remove +- 削除ã®ç¢ºèª +- +- +- Unable to open file(s): +-%1 +- ファイルを開ã‘ã¾ã›ã‚“: +-%1 +- +- +- Attachments +- 添付ファイル +- +- +- Add new attachment +- æ–°ã—ã„添付ファイルを追加 +- +- +- Remove selected attachment +- é¸æŠžã—ãŸæ·»ä»˜ãƒ•ã‚¡ã‚¤ãƒ«ã‚’削除 +- +- +- Open selected attachment +- é¸æŠžã—ãŸæ·»ä»˜ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é–‹ã +- +- +- Save selected attachment to disk +- é¸æŠžã—ãŸæ·»ä»˜ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ディスクã«ä¿å­˜ +- +- +- %1 is a big file (%2 MB). +-Your database may get very large and reduce performance. +- +-Are you sure to add this file? +- %1 ã¯å¤§ãã„ファイル (%2 MB) ã§ã™ã€‚ +-データベースãŒéžå¸¸ã«å¤§ãããªã‚Šãƒ‘フォーマンスãŒä½Žä¸‹ã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚ +- +-ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’追加ã—ã¾ã™ã‹ï¼Ÿ +- +- +- Confirm Attachment +- 添付ã®ç¢ºèª +- +- +- +- EntryAttributesModel +- +- Name +- åå‰ +- +- +- +- EntryHistoryModel +- +- Last modified +- 最終更新日時 +- +- +- Title +- タイトル +- +- +- Username +- ユーザーå +- +- +- URL +- URL +- +- +- +- EntryModel +- +- Ref: +- Reference abbreviation +- å‚ç…§: +- +- +- Group +- グループ +- +- +- Title +- タイトル +- +- +- Username +- ユーザーå +- +- +- URL +- URL +- +- +- Never +- ãªã— +- +- +- Password +- パスワード +- +- +- Notes +- メモ +- +- +- Expires +- æœŸé™ +- +- +- Created +- 作æˆæ—¥æ™‚ +- +- +- Modified +- 編集日時 +- +- +- Accessed +- アクセス日時 +- +- +- Attachments +- 添付ファイル +- +- +- Size +- サイズ +- +- +- Group name +- グループå +- +- +- Entry title +- エントリーã®ã‚¿ã‚¤ãƒˆãƒ« +- +- +- Entry notes +- エントリーã®ãƒ¡ãƒ¢ +- +- +- Entry expires at +- エントリーã®æœŸé™ +- +- +- Creation date +- 作æˆæ—¥æ™‚ +- +- +- Last modification date +- 最終更新日時 +- +- +- Last access date +- 最終アクセス日時 +- +- +- Attached files +- 添付ファイル +- +- +- Entry size +- エントリーã®ã‚µã‚¤ã‚º +- +- +- Has attachments +- 添付ファイルã®æœ‰ç„¡ +- +- +- Has TOTP one-time password +- TOTP ワンタイムパスワードã®æœ‰ç„¡ +- +- +- +- EntryPreviewWidget +- +- Close +- é–‰ã˜ã‚‹ +- +- +- General +- 全般 +- +- +- Username +- ユーザーå +- +- +- Password +- パスワード +- +- +- Expiration +- æœ‰åŠ¹æœŸé™ +- +- +- URL +- URL +- +- +- Attributes +- 属性 +- +- +- Attachments +- 添付ファイル +- +- +- Notes +- メモ +- +- +- Autotype +- 自動入力 +- +- +- Window +- ウィンドウ +- +- +- Sequence +- シーケンス +- +- +- Searching +- 検索 +- +- +- Search +- 検索 +- +- +- Clear +- 消去 +- +- +- Never +- ãªã— +- +- +- [PROTECTED] +- [ä¿è­·] +- +- +- Enabled +- 有効 +- +- +- Disabled +- 無効 +- +- +- Share +- 共有 +- +- +- Display current TOTP value +- ç¾åœ¨ã® TOTP 値を表示 +- +- +- Advanced +- 詳細設定 +- +- +- Default Sequence +- 既定ã®ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ +- +- +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- attributes line +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- +- +- +- EntryURLModel +- +- Invalid URL +- 無効㪠URL +- +- +- +- EntryView +- +- Fit to window +- ウィンドウã«åˆã‚ã›ã‚‹ +- +- +- Fit to contents +- 内容ã«åˆã‚ã›ã‚‹ +- +- +- Reset to defaults +- è¦å®šå€¤ã«æˆ»ã™ +- +- +- Has attachments +- Entry attachment icon toggle +- 添付ファイルã®æœ‰ç„¡ +- +- +- Has TOTP +- Entry TOTP icon toggle +- TOTP ã®æœ‰ç„¡ +- +- +- +- FdoSecrets::Item +- +- Entry "%1" from database "%2" was used by %3 +- データベース "%2" ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ "%1" ㌠%3 ã«ä½¿ç”¨ã•ã‚Œã¾ã—㟠+- +- +- +- FdoSecrets::Service +- +- Failed to register DBus service at %1.<br/> +- %1 㧠DBus サービスã®ç™»éŒ²ã«å¤±æ•—ã—ã¾ã—ãŸã€‚<br/> +- +- +- %n Entry(s) was used by %1 +- %1 is the name of an application +- %n 個ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ãŒ %1 ã«ä½¿ç”¨ã•ã‚Œã¾ã—㟠+- +- +- +- FdoSecrets::SettingsDatabaseModel +- +- File Name +- ファイルå +- +- +- Group +- グループ +- +- +- Manage +- ç®¡ç† +- +- +- Unlock to show +- ロックを解除ã—ã¦è¡¨ç¤º +- +- +- None +- ãªã— +- +- +- +- FdoSecrets::SettingsSessionModel +- +- Application +- アプリケーション +- +- +- Manage +- ç®¡ç† +- +- +- +- FdoSecretsPlugin +- +- <b>Fdo Secret Service:</b> %1 +- <b>Fdo シークレットサービス:</b> %1 +- +- +- Unknown +- Unknown PID +- ä¸æ˜Ž +- +- +- Unknown +- Unknown executable path +- ä¸æ˜Ž +- +- +- <i>PID: %1, Executable: %2</i> +- <i>PID: 1234, Executable: /path/to/exe</i> +- <i>PID: %1, 実行ファイル: %2</i> +- +- +- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. +- 別ã®ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆã‚µãƒ¼ãƒ“スãŒå®Ÿè¡Œä¸­ã§ã™ (%1)。<br/>シークレットサービス統åˆã‚’å†æœ‰åŠ¹åŒ–ã™ã‚‹å‰ã«å®Ÿè¡Œä¸­ã®ã‚‚ã®ã‚’åœæ­¢/削除ã—ã¦ãã ã•ã„。 +- +- +- +- Group +- +- [empty] +- group has no children +- [空] +- +- +- +- HibpDownloader +- +- Online password validation failed +- オンラインパスワード検証ã«å¤±æ•—ã—ã¾ã—㟠+- +- +- +- IconDownloaderDialog +- +- Download Favicons +- ファビコンをダウンロード +- +- +- Cancel +- キャンセル +- +- +- Having trouble downloading icons? +-You can enable the DuckDuckGo website icon service in the security section of the application settings. +- アイコンã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã«å•é¡ŒãŒã‚ã‚Šã¾ã—ãŸã‹ï¼Ÿ +-設定ã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ DuckDuckGo ウェブサイトアイコンサービスを有効ã«ã§ãã¾ã™ã€‚ +- +- +- Close +- é–‰ã˜ã‚‹ +- +- +- URL +- URL +- +- +- Status +- ステータス +- +- +- Please wait, processing entry list... +- エントリー一覧を処ç†ä¸­ã§ã™ã€ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„... +- +- +- Downloading... +- ダウンロード中... +- +- +- Ok +- OK +- +- +- Already Exists +- æ—¢ã«å­˜åœ¨ã—ã¾ã™ +- +- +- Download Failed +- ダウンロードã«å¤±æ•—ã—ã¾ã—㟠+- +- +- Downloading favicons (%1/%2)... +- ファビコンをダウンロード中 (%1/%2)... +- +- +- +- KMessageWidget +- +- &Close +- é–‰ã˜ã‚‹(&C) +- +- +- Close message +- メッセージを閉ã˜ã‚‹ +- +- +- +- Kdbx3Reader +- +- missing database headers +- データベースã®ãƒ˜ãƒƒãƒ€ãƒ¼ãŒã‚ã‚Šã¾ã›ã‚“ +- +- +- Header doesn't match hash +- ヘッダーãŒãƒãƒƒã‚·ãƒ¥ã¨ä¸€è‡´ã—ã¾ã›ã‚“ +- +- +- Invalid header id size +- ヘッダー ID サイズãŒä¸æ­£ã§ã™ +- +- +- Invalid header field length +- ヘッダーフィールド長ãŒä¸æ­£ã§ã™ +- +- +- Invalid header data length +- ヘッダーデータ長ãŒä¸æ­£ã§ã™ +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- ä¸æ­£ãªè³‡æ ¼æƒ…å ±ã§ã™ã€‚å†è©¦è¡Œã—ã¦ãã ã•ã„。 +-ã“ã‚ŒãŒå†ç™ºã—ãŸå ´åˆã¯ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ãŒç ´æã—ã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚ +- +- +- Unable to calculate database key +- データベースキーを計算ã§ãã¾ã›ã‚“ +- +- +- Unable to issue challenge-response: %1 +- ãƒãƒ£ãƒ¬ãƒ³ã‚¸ãƒ¬ã‚¹ãƒãƒ³ã‚¹ã‚’発行ã§ãã¾ã›ã‚“: %1 +- +- +- +- Kdbx3Writer +- +- Unable to issue challenge-response: %1 +- ãƒãƒ£ãƒ¬ãƒ³ã‚¸ãƒ¬ã‚¹ãƒãƒ³ã‚¹ã‚’発行ã§ãã¾ã›ã‚“: %1 +- +- +- Unable to calculate database key +- データベースキーを計算ã§ãã¾ã›ã‚“ +- +- +- +- Kdbx4Reader +- +- missing database headers +- データベースã®ãƒ˜ãƒƒãƒ€ãƒ¼ãŒã‚ã‚Šã¾ã›ã‚“ +- +- +- Invalid header checksum size +- ヘッダーã®ãƒã‚§ãƒƒã‚¯ã‚µãƒ ã‚µã‚¤ã‚ºãŒä¸æ­£ã§ã™ +- +- +- Header SHA256 mismatch +- ヘッダー SHA256 ãŒä¸€è‡´ã—ã¾ã›ã‚“ +- +- +- Unknown cipher +- ä¸æ˜Žãªæš—å·ã§ã™ +- +- +- Invalid header id size +- ヘッダー ID サイズãŒä¸æ­£ã§ã™ +- +- +- Invalid header field length +- ヘッダーフィールド長ãŒä¸æ­£ã§ã™ +- +- +- Invalid header data length +- ヘッダーデータ長ãŒä¸æ­£ã§ã™ +- +- +- Failed to open buffer for KDF parameters in header +- ヘッダー㮠KDF パラメーターã®ãƒãƒƒãƒ•ã‚¡ãƒ¼ã‚’é–‹ãã®ã«å¤±æ•—ã—ã¾ã—㟠+- +- +- Unsupported key derivation function (KDF) or invalid parameters +- サãƒãƒ¼ãƒˆã—ã¦ã„ãªã„éµå°Žå‡ºé–¢æ•° (KDF) ã¾ãŸã¯ä¸æ­£ãªãƒ‘ラメーターã§ã™ +- +- +- Legacy header fields found in KDBX4 file. +- KDBX4 ファイル内ã«ãƒ¬ã‚¬ã‚·ãƒ¼ãªãƒ˜ãƒƒãƒ€ãƒ¼ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸã€‚ +- +- +- Invalid inner header id size +- 内部ヘッダー ID サイズãŒä¸æ­£ã§ã™ +- +- +- Invalid inner header field length +- 内部ヘッダーフィールド長ãŒä¸æ­£ã§ã™ +- +- +- Invalid inner header binary size +- 内部ヘッダーãƒã‚¤ãƒŠãƒªãƒ¼ã‚µã‚¤ã‚ºãŒä¸æ­£ã§ã™ +- +- +- Unsupported KeePass variant map version. +- Translation: variant map = data structure for storing meta data +- サãƒãƒ¼ãƒˆã—ã¦ã„ãªã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® KeePass VariantMap ã§ã™ã€‚ +- +- +- Invalid variant map entry name length +- Translation: variant map = data structure for storing meta data +- VariantMap ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼åã®é•·ã•ãŒä¸æ­£ã§ã™ +- +- +- Invalid variant map entry name data +- Translation: variant map = data structure for storing meta data +- VariantMap ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼åデータãŒä¸æ­£ã§ã™ +- +- +- Invalid variant map entry value length +- Translation: variant map = data structure for storing meta data +- VariantMap ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼å€¤ã®é•·ã•ãŒä¸æ­£ã§ã™ +- +- +- Invalid variant map entry value data +- Translation comment: variant map = data structure for storing meta data +- VariantMap ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼å€¤ãƒ‡ãƒ¼ã‚¿ãŒä¸æ­£ã§ã™ +- +- +- Invalid variant map Bool entry value length +- Translation: variant map = data structure for storing meta data +- VariantMap ã® Bool エントリー値ã®é•·ã•ãŒä¸æ­£ã§ã™ +- +- +- Invalid variant map Int32 entry value length +- Translation: variant map = data structure for storing meta data +- VariantMap ã® Int32 エントリー値ã®é•·ã•ãŒä¸æ­£ã§ã™ +- +- +- Invalid variant map UInt32 entry value length +- Translation: variant map = data structure for storing meta data +- VariantMap ã® UInt32 エントリー値ã®é•·ã•ãŒä¸æ­£ã§ã™ +- +- +- Invalid variant map Int64 entry value length +- Translation: variant map = data structure for storing meta data +- VariantMap ã® Int64 エントリー値ã®é•·ã•ãŒä¸æ­£ã§ã™ +- +- +- Invalid variant map UInt64 entry value length +- Translation: variant map = data structure for storing meta data +- VariantMap ã® UInt64 エントリー値ã®é•·ã•ãŒä¸æ­£ã§ã™ +- +- +- Invalid variant map entry type +- Translation: variant map = data structure for storing meta data +- VariantMap ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚¿ã‚¤ãƒ—ãŒä¸æ­£ã§ã™ +- +- +- Invalid variant map field type size +- Translation: variant map = data structure for storing meta data +- VariantMap ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚¿ã‚¤ãƒ—ã®ã‚µã‚¤ã‚ºãŒä¸æ­£ã§ã™ +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- ä¸æ­£ãªè³‡æ ¼æƒ…å ±ã§ã™ã€‚å†è©¦è¡Œã—ã¦ãã ã•ã„。 +-ã“ã‚ŒãŒå†ç™ºã—ãŸå ´åˆã¯ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ãŒç ´æã—ã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚ +- +- +- (HMAC mismatch) +- (HMAC ãŒä¸€è‡´ã—ã¾ã›ã‚“) +- +- +- Unable to calculate database key: %1 +- データベースキーを計算ã§ãã¾ã›ã‚“: %1 +- +- +- +- Kdbx4Writer +- +- Invalid symmetric cipher algorithm. +- 対称暗å·ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ ãŒä¸æ­£ã§ã™ã€‚ +- +- +- Invalid symmetric cipher IV size. +- IV = Initialization Vector for symmetric cipher +- 対称暗å·ã®åˆæœŸåŒ–ベクトルã®ã‚µã‚¤ã‚ºãŒä¸æ­£ã§ã™ã€‚ +- +- +- Failed to serialize KDF parameters variant map +- Translation comment: variant map = data structure for storing meta data +- KDF パラメーター VariantMap ã®ã‚·ãƒªã‚¢ãƒ«åŒ–ã«å¤±æ•—ã—ã¾ã—㟠+- +- +- Unable to calculate database key: %1 +- データベースキーを計算ã§ãã¾ã›ã‚“: %1 +- +- +- +- KdbxReader +- +- Unsupported cipher +- サãƒãƒ¼ãƒˆã—ã¦ã„ãªã„æš—å·ã§ã™ +- +- +- Invalid compression flags length +- 圧縮フラグã®é•·ã•ãŒä¸æ­£ã§ã™ +- +- +- Unsupported compression algorithm +- サãƒãƒ¼ãƒˆã—ã¦ã„ãªã„圧縮アルゴリズムã§ã™ +- +- +- Invalid master seed size +- Master Seed ã®ã‚µã‚¤ã‚ºãŒä¸æ­£ã§ã™ +- +- +- Invalid transform seed size +- Transform Seed ã®ã‚µã‚¤ã‚ºãŒä¸æ­£ã§ã™ +- +- +- Invalid transform rounds size +- 変æ›å›žæ•°ã®ã‚µã‚¤ã‚ºãŒä¸æ­£ã§ã™ +- +- +- Invalid start bytes size +- StreamStartBytes ã®ã‚µã‚¤ã‚ºãŒä¸æ­£ã§ã™ +- +- +- Invalid random stream id size +- Random Stream ID ã®ã‚µã‚¤ã‚ºãŒä¸æ­£ã§ã™ +- +- +- Invalid inner random stream cipher +- 内部 Random Stream æš—å·ãŒä¸æ­£ã§ã™ +- +- +- Not a KeePass database. +- KeePass データベースã§ã¯ã‚ã‚Šã¾ã›ã‚“。 +- +- +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- é¸æŠžã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã¯å¤ã„ KeePass 1 ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ (.kdb) ã§ã™ã€‚ +- +-データベース > 'KeePass 1 データベースをインãƒãƒ¼ãƒˆ...' をクリックã™ã‚‹ã“ã¨ã§ã‚¤ãƒ³ãƒãƒ¼ãƒˆã§ãã¾ã™ã€‚ +-ã“ã‚Œã¯ä¸€æ–¹å‘ã®ç§»è¡Œæ“作ã§ã‚ã‚Šã€ã‚¤ãƒ³ãƒãƒ¼ãƒˆã—ãŸãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã¯å¤ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã‚ã‚‹ KeePassX 0.4 ã§ã¯é–‹ãã“ã¨ã¯ã§ãã¾ã›ã‚“。 +- +- +- Unsupported KeePass 2 database version. +- サãƒãƒ¼ãƒˆã—ã¦ã„ãªã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® KeePass 2 データベースã§ã™ã€‚ +- +- +- Invalid cipher uuid length: %1 (length=%2) +- æš—å·ã® UUID ã®é•·ã•ãŒä¸æ­£ã§ã™: %1 (é•·ã• = %2) +- +- +- Unable to parse UUID: %1 +- UUID を解æžã§ãã¾ã›ã‚“: %1 +- +- +- Failed to read database file. +- データベースファイルã®èª­ã¿å–ã‚Šã«å¤±æ•—ã—ã¾ã—ãŸã€‚ +- +- +- +- KdbxXmlReader +- +- XML parsing failure: %1 +- XML ã®æ§‹æ–‡è§£æžã‚¨ãƒ©ãƒ¼: %1 +- +- +- No root group +- ルートグループãŒã‚ã‚Šã¾ã›ã‚“ +- +- +- Missing icon uuid or data +- アイコン㮠UUID ã¾ãŸã¯ãƒ‡ãƒ¼ã‚¿ãŒã‚ã‚Šã¾ã›ã‚“ +- +- +- Missing custom data key or value +- カスタムデータ㮠Key ã¾ãŸã¯ Value ãŒã‚ã‚Šã¾ã›ã‚“ +- +- +- Multiple group elements +- グループè¦ç´ ãŒè¤‡æ•°ã‚ã‚Šã¾ã™ +- +- +- Null group uuid +- グループ㮠UUID ㌠NULL ã§ã™ +- +- +- Invalid group icon number +- グループã®ã‚¢ã‚¤ã‚³ãƒ³ç•ªå·ãŒä¸æ­£ã§ã™ +- +- +- Invalid EnableAutoType value +- EnableAutoType ã®å€¤ãŒä¸æ­£ã§ã™ +- +- +- Invalid EnableSearching value +- EnableSearching ã®å€¤ãŒä¸æ­£ã§ã™ +- +- +- No group uuid found +- グループ㮠UUID ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ +- +- +- Null DeleteObject uuid +- DeleteObject ã® UUID ㌠NULL ã§ã™ +- +- +- Missing DeletedObject uuid or time +- DeletedObject ã® UUID ã¾ãŸã¯ DeletionTime ãŒã‚ã‚Šã¾ã›ã‚“ +- +- +- Null entry uuid +- エントリー㮠UUID ㌠NULL ã§ã™ +- +- +- Invalid entry icon number +- エントリーã®ã‚¢ã‚¤ã‚³ãƒ³ç•ªå·ãŒä¸æ­£ã§ã™ +- +- +- History element in history entry +- 履歴エントリー内ã«å±¥æ­´è¦ç´ ãŒå­˜åœ¨ã—ã¾ã™ +- +- +- No entry uuid found +- エントリー㮠UUID ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ +- +- +- History element with different uuid +- 履歴è¦ç´ ã® UUID ãŒç•°ãªã‚Šã¾ã™ +- +- +- Duplicate custom attribute found +- é‡è¤‡ã—ãŸã‚«ã‚¹ã‚¿ãƒ å±žæ€§ãŒè¦‹ã¤ã‹ã‚Šã¾ã—㟠+- +- +- Entry string key or value missing +- エントリーã®æ–‡å­—列 Key ã¾ãŸã¯ Value ãŒã‚ã‚Šã¾ã›ã‚“ +- +- +- Entry binary key or value missing +- エントリーã®ãƒã‚¤ãƒŠãƒªãƒ¼ Key ã¾ãŸã¯ Value ãŒã‚ã‚Šã¾ã›ã‚“ +- +- +- Auto-type association window or sequence missing +- 自動入力ã®é–¢é€£ä»˜ã‘ウィンドウã¾ãŸã¯è‡ªå‹•å…¥åŠ›ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ãŒã‚ã‚Šã¾ã›ã‚“ +- +- +- Invalid bool value +- 真å½å€¤ãŒä¸æ­£ã§ã™ +- +- +- Invalid date time value +- 日時ãŒä¸æ­£ã§ã™ +- +- +- Invalid color value +- 色ãŒä¸æ­£ã§ã™ +- +- +- Invalid color rgb part +- 色㮠RGB ãŒä¸æ­£ã§ã™ +- +- +- Invalid number value +- 数値ãŒä¸æ­£ã§ã™ +- +- +- Invalid uuid value +- UUID ã®å€¤ãŒä¸æ­£ã§ã™ +- +- +- Unable to decompress binary +- Translator meant is a binary data inside an entry +- ãƒã‚¤ãƒŠãƒªãƒ¼ã‚’展開ã§ãã¾ã›ã‚“ +- +- +- XML error: +-%1 +-Line %2, column %3 +- XML エラー: +-%1 +-%2 è¡Œã€%3 列 +- +- +- +- KeeAgentSettings +- +- Invalid KeeAgent settings file structure. +- KeeAgent ã®è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«æ§‹é€ ãŒä¸æ­£ã§ã™ã€‚ +- +- +- Private key is an attachment but no attachments provided. +- 秘密éµã¯æ·»ä»˜ãƒ•ã‚¡ã‚¤ãƒ«ã§ã™ãŒã€æ·»ä»˜ãƒ•ã‚¡ã‚¤ãƒ«ã¯æä¾›ã•ã‚Œã¦ã„ã¾ã›ã‚“。 +- +- +- Private key is empty +- 秘密éµãŒç©ºã§ã™ +- +- +- File too large to be a private key +- ファイルãŒå¤§ãã™ãŽã‚‹ãŸã‚秘密éµã«ã§ãã¾ã›ã‚“ +- +- +- Failed to open private key +- 秘密éµã‚’é–‹ãã®ã«å¤±æ•—ã—ã¾ã—㟠+- +- +- +- KeePass1OpenWidget +- +- Unable to open the database. +- データベースを開ã‘ã¾ã›ã‚“。 +- +- +- Import KeePass1 Database +- KeePass1 データベースをインãƒãƒ¼ãƒˆ +- +- +- +- KeePass1Reader +- +- Unable to read keyfile. +- キーファイルを読ã¿å–ã‚Œã¾ã›ã‚“。 +- +- +- Not a KeePass database. +- KeePass データベースã§ã¯ã‚ã‚Šã¾ã›ã‚“。 +- +- +- Unsupported encryption algorithm. +- サãƒãƒ¼ãƒˆã—ã¦ã„ãªã„æš—å·åŒ–アルゴリズムã§ã™ã€‚ +- +- +- Unsupported KeePass database version. +- サãƒãƒ¼ãƒˆã—ã¦ã„ãªã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® KeePass データベースã§ã™ã€‚ +- +- +- Unable to read encryption IV +- IV = Initialization Vector for symmetric cipher +- Encryption IV (æš—å·åŒ–åˆæœŸåŒ–ベクトル) を読ã¿å–ã‚Œã¾ã›ã‚“ +- +- +- Invalid number of groups +- グループã®æ•°ãŒä¸æ­£ã§ã™ +- +- +- Invalid number of entries +- エントリーã®æ•°ãŒä¸æ­£ã§ã™ +- +- +- Invalid content hash size +- コンテンツãƒãƒƒã‚·ãƒ¥ã‚µã‚¤ã‚ºãŒä¸æ­£ã§ã™ +- +- +- Invalid transform seed size +- Transform Seed ã®ã‚µã‚¤ã‚ºãŒä¸æ­£ã§ã™ +- +- +- Invalid number of transform rounds +- 変æ›å›žæ•°ãŒä¸æ­£ã§ã™ +- +- +- Unable to construct group tree +- グループツリーを構æˆã§ãã¾ã›ã‚“ +- +- +- Root +- ルート +- +- +- Key transformation failed +- キー変æ›ã«å¤±æ•—ã—ã¾ã—㟠+- +- +- Invalid group field type number +- グループã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚¿ã‚¤ãƒ—æ•°ãŒä¸æ­£ã§ã™ +- +- +- Invalid group field size +- グループã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚µã‚¤ã‚ºãŒä¸æ­£ã§ã™ +- +- +- Read group field data doesn't match size +- 読ã¿è¾¼ã‚“ã ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ãƒ‡ãƒ¼ã‚¿ã¯ã‚µã‚¤ã‚ºãŒä¸€è‡´ã—ã¾ã›ã‚“ +- +- +- Incorrect group id field size +- グループ㮠ID フィールドサイズãŒæ­£ã—ãã‚ã‚Šã¾ã›ã‚“ +- +- +- Incorrect group creation time field size +- グループã®ä½œæˆæ—¥æ™‚フィールドサイズãŒæ­£ã—ãã‚ã‚Šã¾ã›ã‚“ +- +- +- Incorrect group modification time field size +- グループã®ç·¨é›†æ—¥æ™‚フィールドサイズãŒæ­£ã—ãã‚ã‚Šã¾ã›ã‚“ +- +- +- Incorrect group access time field size +- グループã®ã‚¢ã‚¯ã‚»ã‚¹æ—¥æ™‚フィールドサイズãŒæ­£ã—ãã‚ã‚Šã¾ã›ã‚“ +- +- +- Incorrect group expiry time field size +- グループã®æœ‰åŠ¹æœŸé™ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚µã‚¤ã‚ºãŒæ­£ã—ãã‚ã‚Šã¾ã›ã‚“ +- +- +- Incorrect group icon field size +- グループã®ã‚¢ã‚¤ã‚³ãƒ³ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚µã‚¤ã‚ºãŒæ­£ã—ãã‚ã‚Šã¾ã›ã‚“ +- +- +- Incorrect group level field size +- グループã®ãƒ¬ãƒ™ãƒ«ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚µã‚¤ã‚ºãŒæ­£ã—ãã‚ã‚Šã¾ã›ã‚“ +- +- +- Invalid group field type +- グループã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚¿ã‚¤ãƒ—ãŒä¸æ­£ã§ã™ +- +- +- Missing group id or level +- グループ㮠ID ã¾ãŸã¯ãƒ¬ãƒ™ãƒ«ãŒã‚ã‚Šã¾ã›ã‚“ +- +- +- Missing entry field type number +- エントリーã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚¿ã‚¤ãƒ—番å·ãŒã‚ã‚Šã¾ã›ã‚“ +- +- +- Invalid entry field size +- エントリーã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚µã‚¤ã‚ºãŒä¸æ­£ã§ã™ +- +- +- Read entry field data doesn't match size +- 読ã¿è¾¼ã‚“ã ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ãƒ‡ãƒ¼ã‚¿ã¯ã‚µã‚¤ã‚ºãŒä¸€è‡´ã—ã¾ã›ã‚“ +- +- +- Invalid entry uuid field size +- エントリー㮠UUID フィールドサイズãŒä¸æ­£ã§ã™ +- +- +- Invalid entry group id field size +- エントリーã®ã‚°ãƒ«ãƒ¼ãƒ— ID フィールドサイズãŒä¸æ­£ã§ã™ +- +- +- Invalid entry icon field size +- エントリーã®ã‚¢ã‚¤ã‚³ãƒ³ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚µã‚¤ã‚ºãŒä¸æ­£ã§ã™ +- +- +- Invalid entry creation time field size +- エントリーã®ä½œæˆæ—¥æ™‚フィールドサイズãŒä¸æ­£ã§ã™ +- +- +- Invalid entry modification time field size +- エントリーã®ç·¨é›†æ—¥æ™‚フィールドサイズãŒä¸æ­£ã§ã™ +- +- +- Invalid entry expiry time field size +- エントリーã®æœŸé™æ—¥æ™‚フィールドサイズãŒä¸æ­£ã§ã™ +- +- +- Invalid entry field type +- エントリーã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚¿ã‚¤ãƒ—ãŒä¸æ­£ã§ã™ +- +- +- unable to seek to content position +- 内容ã®ä½ç½®ã«ã‚·ãƒ¼ã‚¯ã§ãã¾ã›ã‚“ +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- ä¸æ­£ãªè³‡æ ¼æƒ…å ±ã§ã™ã€‚å†è©¦è¡Œã—ã¦ãã ã•ã„。 +-ã“ã‚ŒãŒå†ç™ºã—ãŸå ´åˆã¯ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ãŒç ´æã—ã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚ +- +- +- Unable to calculate database key +- データベースキーを計算ã§ãã¾ã›ã‚“ +- +- +- +- KeeShare +- +- Invalid sharing reference +- 共有ã®å‚ç…§ãŒä¸æ­£ã§ã™ +- +- +- Inactive share %1 +- 共有 %1 ã¯éžã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã§ã™ +- +- +- Imported from %1 +- %1 ã‹ã‚‰ã‚¤ãƒ³ãƒãƒ¼ãƒˆã—ã¾ã—㟠+- +- +- Exported to %1 +- %1 ã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã—ã¾ã—㟠+- +- +- Synchronized with %1 +- %1 ã¨åŒæœŸã—ã¾ã—㟠+- +- +- Import is disabled in settings +- インãƒãƒ¼ãƒˆã¯è¨­å®šã§ç„¡åŠ¹ã«ãªã£ã¦ã„ã¾ã™ +- +- +- Export is disabled in settings +- エクスãƒãƒ¼ãƒˆã¯è¨­å®šã§ç„¡åŠ¹ã«ãªã£ã¦ã„ã¾ã™ +- +- +- Inactive share +- éžã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªå…±æœ‰ +- +- +- Imported from +- インãƒãƒ¼ãƒˆå…ƒ +- +- +- Exported to +- エクスãƒãƒ¼ãƒˆå…ˆ +- +- +- Synchronized with +- åŒæœŸ +- +- +- +- KeyComponentWidget +- +- Key Component +- キーコンãƒãƒ¼ãƒãƒ³ãƒˆ +- +- +- Key Component Description +- キーコンãƒãƒ¼ãƒãƒ³ãƒˆã®æ¦‚è¦ +- +- +- Cancel +- キャンセル +- +- +- Key Component set, click to change or remove +- キーコンãƒãƒ¼ãƒãƒ³ãƒˆã®è¨­å®š (変更ã‹å‰Šé™¤ã‚’クリックã—ã¦ãã ã•ã„) +- +- +- Add %1 +- Add a key component +- %1 を追加 +- +- +- Change %1 +- Change a key component +- %1 を変更 +- +- +- Remove %1 +- Remove a key component +- %1 を削除 +- +- +- %1 set, click to change or remove +- Change or remove a key component +- %1 ã®è¨­å®š (変更ã‹å‰Šé™¤ã‚’クリックã—ã¦ãã ã•ã„) +- +- +- +- KeyFileEditWidget +- +- Generate +- ç”Ÿæˆ +- +- +- Key File +- キーファイル +- +- +- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> +- <p>セキュリティ対策ã§ãƒ©ãƒ³ãƒ€ãƒ ãƒã‚¤ãƒˆã‚’å«ã‚€ã‚­ãƒ¼ãƒ•ã‚¡ã‚¤ãƒ«ã‚’追加ã§ãã¾ã™ã€‚</p><p>キーファイルã¯èª°ã«ã‚‚知られãšã€çµ¶å¯¾ã«ãªãã•ãªã„よã†æ³¨æ„ã—ã¦ãã ã•ã„。</p> +- +- +- Error loading the key file '%1' +-Message: %2 +- キーファイル '%1' ã®èª­ã¿è¾¼ã¿æ™‚ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—㟠+-メッセージ: %2 +- +- +- Key files +- キーファイル +- +- +- All files +- å…¨ã¦ã®ãƒ•ã‚¡ã‚¤ãƒ« +- +- +- Create Key File... +- キーファイルを作æˆ... +- +- +- Error creating key file +- キーファイル作æˆæ™‚ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—㟠+- +- +- Unable to create key file: %1 +- キーファイルを作æˆã§ãã¾ã›ã‚“: %1 +- +- +- Select a key file +- キーファイルをé¸æŠž +- +- +- Key file selection +- キーファイルã®é¸æŠž +- +- +- Browse for key file +- キーファイルを探㙠+- +- +- Browse... +- å‚ç…§... +- +- +- Generate a new key file +- æ–°ã—ã„ã‚­ãƒ¼ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ç”Ÿæˆ +- +- +- Note: Do not use a file that may change as that will prevent you from unlocking your database! +- 備考: 内容ãŒå¤‰æ›´ã•ã‚Œã‚‹å¯èƒ½æ€§ãŒã‚るファイルを使用ã™ã‚‹ã¨ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ãƒ­ãƒƒã‚¯ã‚’解除ã§ããªããªã‚‹æã‚ŒãŒã‚ã‚Šã¾ã™ã€‚ +- +- +- Invalid Key File +- ä¸æ­£ãªã‚­ãƒ¼ãƒ•ã‚¡ã‚¤ãƒ«ã§ã™ +- +- +- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. +- ç¾åœ¨ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹è‡ªèº«ã‚’キーファイルã«ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。他ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é¸æŠžã™ã‚‹ã‹ã€æ–°ã—ã„キーファイルを生æˆã—ã¦ãã ã•ã„。 +- +- +- Suspicious Key File +- 怪ã—ã„キーファイルã§ã™ +- +- +- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. +-Are you sure you want to continue with this file? +- é¸æŠžã—ãŸã‚­ãƒ¼ãƒ•ã‚¡ã‚¤ãƒ«ã¯ãƒ‘スワードデータベースファイルã ã¨æ€ã‚ã‚Œã¾ã™ã€‚キーファイルã¯çµ¶å¯¾ã«å¤‰æ›´ã•ã‚Œã‚‹ã“ã¨ãŒãªã„ã€é™çš„ãªãƒ•ã‚¡ã‚¤ãƒ«ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚変更ã•ã‚Œã‚‹å¯èƒ½æ€§ãŒã‚るファイルã§ã¯ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«æ°¸ä¹…ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ããªããªã‚‹æã‚ŒãŒã‚ã‚Šã¾ã™ã€‚ +-ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã§ç¶šè¡Œã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ +- +- +- Old key file format +- å¤ã„ã‚­ãƒ¼ãƒ•ã‚¡ã‚¤ãƒ«å½¢å¼ +- +- +- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. +- KeePassXC ã¯å°†æ¥çš„ã«ã€é¸æŠžã—ãŸå¤ã„å½¢å¼ã®ã‚­ãƒ¼ãƒ•ã‚¡ã‚¤ãƒ«ã‚’<br>サãƒãƒ¼ãƒˆã—ãªããªã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚<br><br>代ã‚ã‚Šã«æ–°ã—ã„キーファイルを生æˆã™ã‚‹ã“ã¨ã‚’検討ã—ã¦ãã ã•ã„。 +- +- +- +- MainWindow +- +- &Database +- データベース(&D) +- +- +- &Help +- ヘルプ(&H) +- +- +- &Groups +- グループ(&G) +- +- +- &Tools +- ツール(&T) +- +- +- &Quit +- 終了(&Q) +- +- +- &About +- ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã«ã¤ã„ã¦(&A) +- +- +- Database settings +- データベースã®è¨­å®š +- +- +- Copy username to clipboard +- ユーザーåをクリップボードã«ã‚³ãƒ”ー +- +- +- Copy password to clipboard +- パスワードをクリップボードã«ã‚³ãƒ”ー +- +- +- &Settings +- 設定(&S) +- +- +- &Title +- タイトル(&T) +- +- +- Copy title to clipboard +- タイトルをクリップボードã«ã‚³ãƒ”ー +- +- +- &URL +- URL(&U) +- +- +- Copy URL to clipboard +- URL をクリップボードã«ã‚³ãƒ”ー +- +- +- &Notes +- メモ(&N) +- +- +- Copy notes to clipboard +- メモをクリップボードã«ã‚³ãƒ”ー +- +- +- Copy &TOTP +- TOTP をコピー(&T) +- +- +- E&mpty recycle bin +- ゴミ箱を空ã«ã™ã‚‹(&M) +- +- +- Clear history +- 履歴を消去 +- +- +- Access error for config file %1 +- 設定ファイル %1 ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚¨ãƒ©ãƒ¼ +- +- +- Settings +- 設定 +- +- +- Toggle window +- ウィンドウ切替 +- +- +- Quit KeePassXC +- KeePassXC を終了 +- +- +- Please touch the button on your YubiKey! +- YubiKey ã®ãƒœã‚¿ãƒ³ã«ã‚¿ãƒƒãƒã—ã¦ãã ã•ã„ +- +- +- WARNING: You are using an unstable build of KeePassXC! +-There is a high risk of corruption, maintain a backup of your databases. +-This version is not meant for production use. +- 警告: KeePassXC ã®é–‹ç™ºç‰ˆã‚’使用ã—ã¦ã„ã¾ã™ã€‚ +-データベース破æã®å±é™ºæ€§ãŒé«˜ã„ãŸã‚ã€ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を維æŒã—ã¾ã™ã€‚ +-ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯æ­£å¼ç‰ˆã§ã¯ã‚ã‚Šã¾ã›ã‚“。 +- +- +- &Donate +- 寄付(&D) +- +- +- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +-We recommend you use the AppImage available on our downloads page. +- 警告: オンスクリーンキーボード使用時ã«ã€Qt ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒåŽŸå› ã§ KeePassXC ãŒã‚¯ãƒ©ãƒƒã‚·ãƒ¥ã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚ +-KeePassXC ã®é…布ページã‹ã‚‰ AppImage をダウンロードã—ã¦ä½¿ç”¨ã™ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚ +- +- +- &Import +- インãƒãƒ¼ãƒˆ(&I) +- +- +- Create a new database +- æ–°ã—ã„ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’ä½œæˆ +- +- +- Merge from another KDBX database +- 別㮠KDBX データベースã‹ã‚‰ãƒžãƒ¼ã‚¸ +- +- +- Add a new entry +- æ–°ã—ã„エントリーを追加 +- +- +- View or edit entry +- エントリーを編集ã¾ãŸã¯è¡¨ç¤º +- +- +- Add a new group +- æ–°ã—ã„グループを追加 +- +- +- Perform &Auto-Type +- 自動入力を実行(&A) +- +- +- Open &URL +- URL ã‚’é–‹ã(&U) +- +- +- Import a KeePass 1 database +- KeePass 1 データベースをインãƒãƒ¼ãƒˆ +- +- +- Import a CSV file +- CSV ファイルをインãƒãƒ¼ãƒˆ +- +- +- NOTE: You are using a pre-release version of KeePassXC! +-Expect some bugs and minor issues, this version is not meant for production use. +- 備考: KeePassXC ã®ãƒ—レリリース版を使用ã—ã¦ã„ã¾ã™ã€‚ +-複数ã®ãƒã‚°ã‚„å°ã•ãªå•é¡Œç‚¹ãŒæ®‹ã£ã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã€ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯å®Ÿç”¨çš„ã§ã¯ã‚ã‚Šã¾ã›ã‚“。 +- +- +- Check for updates on startup? +- 起動時ã«æ›´æ–°ã‚’確èªã—ã¾ã™ã‹ï¼Ÿ +- +- +- Would you like KeePassXC to check for updates on startup? +- KeePassXC 起動時ã«æ›´æ–°ã‚’確èªã—ã¾ã™ã‹ï¼Ÿ +- +- +- You can always check for updates manually from the application menu. +- æ›´æ–°ã®ç¢ºèªã¯ã„ã¤ã§ã‚‚メニューã‹ã‚‰æ‰‹å‹•ã§å®Ÿè¡Œã§ãã¾ã™ã€‚ +- +- +- &Export +- エクスãƒãƒ¼ãƒˆ(&E) +- +- +- Sort &A-Z +- 並ã¹æ›¿ãˆ (A-Z)(&A) +- +- +- Sort &Z-A +- 並ã¹æ›¿ãˆ (Z-A)(&Z) +- +- +- &Password Generator +- パスワード生æˆ(&P) +- +- +- Import a 1Password Vault +- 1Password ä¿ç®¡åº«ã‚’インãƒãƒ¼ãƒˆ +- +- +- &Getting Started +- スタートガイド(&G) +- +- +- &User Guide +- ユーザーガイド(&U) +- +- +- &Keyboard Shortcuts +- キーボードショートカット(&K) +- +- +- &Recent Databases +- 最近使用ã—ãŸãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹(&R) +- +- +- &Entries +- エントリー(&E) +- +- +- Copy Att&ribute +- 属性をコピー(&R) +- +- +- TOTP +- TOTP +- +- +- View +- 表示 +- +- +- Theme +- テーマ +- +- +- &Check for Updates +- 更新を確èª(&C) +- +- +- &Open Database… +- データベースを開ã(&O)… +- +- +- &Save Database +- データベースをä¿å­˜(&S) +- +- +- &Close Database +- データベースを閉ã˜ã‚‹(&C) +- +- +- &New Database… +- æ–°ã—ã„データベース(&N)… +- +- +- &Merge From Database… +- データベースã‹ã‚‰ãƒžãƒ¼ã‚¸(&M)… +- +- +- &New Entry… +- æ–°ã—ã„エントリー(&N)… +- +- +- &Edit Entry… +- エントリーを編集(&E)… +- +- +- &Delete Entry… +- エントリーを削除(&D)… +- +- +- &New Group… +- æ–°ã—ã„グループ(&N)… +- +- +- &Edit Group… +- グループを編集(&E)… +- +- +- &Delete Group… +- グループを削除(&D)… +- +- +- Download All &Favicons… +- å…¨ã¦ã®ãƒ•ã‚¡ãƒ“コンをダウンロード(&F)… +- +- +- Sa&ve Database As… +- データベースを別åã§ä¿å­˜(&V)… +- +- +- Database &Security… +- データベースã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£(&S)… +- +- +- Database &Reports... +- データベースã®ãƒ¬ãƒãƒ¼ãƒˆ(&R)... +- +- +- Statistics, health check, etc. +- 統計やå¥å…¨æ€§ã®ç¢ºèªãªã©ã€‚ +- +- +- &Database Settings… +- データベースã®è¨­å®š(&D)… +- +- +- &Clone Entry… +- エントリーを複製(&C)… +- +- +- Move u&p +- 上ã«ç§»å‹•(&P) +- +- +- Move entry one step up +- エントリーを一ã¤ä¸Šã«ç§»å‹•ã™ã‚‹ +- +- +- Move do&wn +- 下ã«ç§»å‹•(&W) +- +- +- Move entry one step down +- エントリーを一ã¤ä¸‹ã«ç§»å‹•ã™ã‚‹ +- +- +- Copy &Username +- ユーザーåをコピー(&U) +- +- +- Copy &Password +- パスワードをコピー(&P) +- +- +- Download &Favicon +- ファビコンをダウンロード(&F) +- +- +- &Lock Databases +- データベースをロック(&L) +- +- +- &CSV File… +- CSV ファイル(&C)… +- +- +- &HTML File… +- HTML ファイル(&H)… +- +- +- KeePass 1 Database… +- KeePass 1 データベース… +- +- +- 1Password Vault… +- 1Password ä¿ç®¡åº«â€¦ +- +- +- CSV File… +- CSV ファイル… +- +- +- Show TOTP +- TOTP を表示 +- +- +- Show QR Code +- QR コードを表示 +- +- +- Set up TOTP… +- TOTP ã®è¨­å®šâ€¦ +- +- +- Report a &Bug +- ãƒã‚°ã‚’報告(&B) +- +- +- Open Getting Started Guide +- スタートガイドを開ã +- +- +- &Online Help +- オンラインヘルプ(&O) +- +- +- Go to online documentation +- オンラインドキュメントを開ã +- +- +- Open User Guide +- ユーザーガイドを開ã +- +- +- Save Database Backup... +- データベースã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã‚’ä¿å­˜... +- +- +- Add key to SSH Agent +- SSH エージェントã«éµã‚’追加 +- +- +- Remove key from SSH Agent +- SSH エージェントã‹ã‚‰éµã‚’削除 +- +- +- Compact Mode +- コンパクトモード +- +- +- Automatic +- 自動 +- +- +- Light +- ライト +- +- +- Dark +- ダーク +- +- +- Classic (Platform-native) +- クラシック (プラットフォームãƒã‚¤ãƒ†ã‚£ãƒ–) +- +- +- Show Toolbar +- ツールãƒãƒ¼ã‚’表示 +- +- +- Show Preview Panel +- プレビューパãƒãƒ«ã‚’表示 +- +- +- Don't show again for this version +- 今後ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯è¡¨ç¤ºã—ãªã„ +- +- +- Restart Application? +- アプリケーションをå†èµ·å‹•ã—ã¾ã™ã‹ï¼Ÿ +- +- +- You must restart the application to apply this setting. Would you like to restart now? +- 設定をé©ç”¨ã™ã‚‹ã«ã¯ã€ã“ã®ã‚¢ãƒ—リケーションをå†èµ·å‹•ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚今ã™ãå†èµ·å‹•ã—ã¾ã™ã‹ï¼Ÿ +- +- +- Perform Auto-Type Sequence +- 自動入力シーケンスを実行 +- +- +- {USERNAME} +- {USERNAME} +- +- +- {USERNAME}{ENTER} +- {USERNAME}{ENTER} +- +- +- {PASSWORD} +- {PASSWORD} +- +- +- {PASSWORD}{ENTER} +- {PASSWORD}{ENTER} +- +- +- Always on Top +- 常ã«æœ€å‰é¢ã«è¡¨ç¤º +- +- +- Hide Usernames +- ユーザーåã‚’éš ã™ +- +- +- Hide Passwords +- パスワードを隠㙠+- +- +- +- ManageDatabase +- +- Database settings +- データベースã®è¨­å®š +- +- +- Edit database settings +- データベースã®è¨­å®šã‚’編集 +- +- +- Unlock database +- データベースã®ãƒ­ãƒƒã‚¯ã‚’解除 +- +- +- Unlock database to show more information +- データベースã®ãƒ­ãƒƒã‚¯ã‚’解除ã—ã¦ã‚ˆã‚Šè©³ã—ã„情報を表示 +- +- +- Lock database +- データベースをロック +- +- +- +- ManageSession +- +- Disconnect +- 切断 +- +- +- Disconnect this application +- ã“ã®ã‚¢ãƒ—リケーションを切断 +- +- +- +- Merger +- +- Creating missing %1 [%2] +- 存在ã—ãªã„ %1 [%2] ã‚’ä½œæˆ +- +- +- Relocating %1 [%2] +- %1 [%2] を移転 +- +- +- Overwriting %1 [%2] +- %1 [%2] を上書ã +- +- +- older entry merged from database "%1" +- データベース "%1" ã‹ã‚‰ãƒžãƒ¼ã‚¸ã—ãŸå¤ã„エントリー +- +- +- Adding backup for older target %1 [%2] +- å¤ã„ターゲット %1 [%2] ã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を追加 +- +- +- Adding backup for older source %1 [%2] +- å¤ã„ソース %1 [%2] ã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を追加 +- +- +- Reapplying older target entry on top of newer source %1 [%2] +- å¤ã„ターゲットã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’æ–°ã—ã„ソース %1 [%2] ã®ãƒˆãƒƒãƒ—ã«å†é©ç”¨ +- +- +- Reapplying older source entry on top of newer target %1 [%2] +- å¤ã„ソースã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’æ–°ã—ã„ターゲット %1 [%2] ã®ãƒˆãƒƒãƒ—ã«å†é©ç”¨ +- +- +- Synchronizing from newer source %1 [%2] +- æ–°ã—ã„ソース %1 [%2] ã‹ã‚‰åŒæœŸ +- +- +- Synchronizing from older source %1 [%2] +- å¤ã„ソース %1 [%2] ã‹ã‚‰åŒæœŸ +- +- +- Deleting child %1 [%2] +- å­è¦ç´  %1 [%2] を削除 +- +- +- Deleting orphan %1 [%2] +- 親è¦ç´ ãŒãªã„ %1 [%2] を削除 +- +- +- Changed deleted objects +- 削除ã—ãŸã‚ªãƒ–ジェクトを変更 +- +- +- Adding missing icon %1 +- 存在ã—ãªã„アイコン %1 を追加 +- +- +- Removed custom data %1 [%2] +- カスタムデータ %1 [%2] を削除 +- +- +- Adding custom data %1 [%2] +- カスタムデータ %1 [%2] を追加 +- +- +- +- NewDatabaseWizard +- +- Create a new KeePassXC database... +- æ–°ã—ã„ KeePassXC データベースを作æˆ... +- +- +- Root +- Root group +- ルート +- +- +- +- NewDatabaseWizardPage +- +- WizardPage +- ウィザードページ +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- ã“ã“ã§ã¯ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®æš—å·åŒ–設定を調整ã§ãã¾ã™ã€‚ã“ã®è¨­å®šã¯å¾Œã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®è¨­å®šã§å¤‰æ›´ã§ãã¾ã™ã€‚ +- +- +- Advanced Settings +- 詳細設定 +- +- +- Simple Settings +- 簡易設定 +- +- +- Encryption Settings +- æš—å·åŒ–ã®è¨­å®š +- +- +- +- NewDatabaseWizardPageDatabaseKey +- +- Database Credentials +- データベースã®è³‡æ ¼æƒ…å ± +- +- +- A set of credentials known only to you that protects your database. +- ã‚ãªãŸã—ã‹çŸ¥ã‚‰ãªã„資格情報ãŒãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’ä¿è­·ã—ã¾ã™ã€‚ +- +- +- +- NewDatabaseWizardPageEncryption +- +- Encryption Settings +- æš—å·åŒ–ã®è¨­å®š +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- ã“ã“ã§ã¯ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®æš—å·åŒ–設定を調整ã§ãã¾ã™ã€‚ã“ã®è¨­å®šã¯å¾Œã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®è¨­å®šã§å¤‰æ›´ã§ãã¾ã™ã€‚ +- +- +- +- NewDatabaseWizardPageMetaData +- +- General Database Information +- データベースã®å…¨èˆ¬æƒ…å ± +- +- +- Please fill in the display name and an optional description for your new database: +- æ–°ã—ã„データベースã®åå‰ã¨ã€å¿…è¦ãªå ´åˆã¯èª¬æ˜Žæ–‡ã‚’入力ã—ã¦ãã ã•ã„: +- +- +- +- NixUtils +- +- Password Manager +- パスワードマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ +- +- +- +- OpData01 +- +- Invalid OpData01, does not contain header +- ヘッダーãŒãªã„ä¸æ­£ãª OpData01 ã§ã™ +- +- +- Unable to read all IV bytes, wanted 16 but got %1 +- %1 / 16 ã—ã‹å–å¾—ã§ããªã‹ã£ãŸãŸã‚ IV を読ã¿å–ã‚Œã¾ã›ã‚“ +- +- +- Unable to init cipher for opdata01: %1 +- opdata01 ã®æš—å·ã‚’ init ã§ãã¾ã›ã‚“: %1 +- +- +- Unable to read all HMAC signature bytes +- HMAC ç½²åを読ã¿å–ã‚Œã¾ã›ã‚“ +- +- +- Malformed OpData01 due to a failed HMAC +- HMAC ã®å¤±æ•—ã«ã‚ˆã‚‹ä¸æ­£ãª OpData01 ã§ã™ +- +- +- Unable to process clearText in place +- clearText をインプレース処ç†ã§ãã¾ã›ã‚“ +- +- +- Expected %1 bytes of clear-text, found %2 +- 期待ã•ã‚Œã‚‹ clear-text ã®ã‚µã‚¤ã‚ºã¯ %1 ãƒã‚¤ãƒˆã§ã™ãŒ %2 ãƒã‚¤ãƒˆã—ã‹ã‚ã‚Šã¾ã›ã‚“ã§ã—㟠+- +- +- +- OpVaultOpenWidget +- +- Read Database did not produce an instance +-%1 +- データベースã®èª­ã¿å–ã‚Šã¯ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’プロデュースã—ã¾ã›ã‚“ã§ã—㟠+-%1 +- +- +- +- OpVaultReader +- +- Directory .opvault must exist +- ディレクトリ .opvault ãŒå­˜åœ¨ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ +- +- +- Directory .opvault must be readable +- ディレクトリ .opvault ã¯èª­ã¿å–ã‚Šå¯èƒ½ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ +- +- +- Directory .opvault/default must exist +- ディレクトリ .opvault/default ãŒå­˜åœ¨ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ +- +- +- Directory .opvault/default must be readable +- ディレクトリ .opvault/default ã¯èª­ã¿å–ã‚Šå¯èƒ½ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ +- +- +- Unable to decode masterKey: %1 +- masterKey をデコードã§ãã¾ã›ã‚“: %1 +- +- +- Unable to derive master key: %1 +- マスターキーを導出ã§ãã¾ã›ã‚“: %1 +- +- +- +- OpenSSHKey +- +- Invalid key file, expecting an OpenSSH key +- OpenSSH ã®éµã§ã¯ãªã„ä¸æ­£ãªã‚­ãƒ¼ãƒ•ã‚¡ã‚¤ãƒ«ã§ã™ +- +- +- PEM boundary mismatch +- PEM ã®ãƒã‚¦ãƒ³ãƒ€ãƒªãƒ¼ãŒä¸ä¸€è‡´ã§ã™ +- +- +- Base64 decoding failed +- Base64 ã®ãƒ‡ã‚³ãƒ¼ãƒ‰ã«å¤±æ•—ã—ã¾ã—㟠+- +- +- Key file way too small. +- キーファイルãŒå°ã•ã™ãŽã¾ã™ã€‚ +- +- +- Key file magic header id invalid +- キーファイルã®ãƒžã‚¸ãƒƒã‚¯ãƒ˜ãƒƒãƒ€ãƒ¼ ID ãŒä¸æ­£ã§ã™ +- +- +- Found zero keys +- キー㌠0 ã§ã™ +- +- +- Failed to read public key. +- 公開éµã®èª­ã¿å–ã‚Šã«å¤±æ•—ã—ã¾ã—ãŸã€‚ +- +- +- Corrupted key file, reading private key failed +- キーファイルãŒç ´æã—ã¦ã„ã‚‹ãŸã‚秘密éµã®èª­ã¿å–ã‚Šã«å¤±æ•—ã—ã¾ã—㟠+- +- +- No private key payload to decrypt +- 復å·ã™ã‚‹ç§˜å¯†éµã®ãƒ‡ãƒ¼ã‚¿ãŒã‚ã‚Šã¾ã›ã‚“ +- +- +- Trying to run KDF without cipher +- æš—å·ãªã—㧠KDF を実行ã—よã†ã¨ã—ã¦ã„ã¾ã™ +- +- +- Passphrase is required to decrypt this key +- ã“ã®éµã‚’復å·ã™ã‚‹ãƒ‘スフレーズãŒå¿…è¦ã§ã™ +- +- +- Key derivation failed, key file corrupted? +- éµã®å°Žå‡ºã«å¤±æ•—ã—ã¾ã—ãŸã€‚キーファイルãŒå£Šã‚Œã¦ã„ã¾ã›ã‚“ã‹ï¼Ÿ +- +- +- Decryption failed, wrong passphrase? +- 復å·åŒ–ã«å¤±æ•—ã—ã¾ã—ãŸã€‚パスフレーズãŒé–“é•ã£ã¦ã„ã¾ã›ã‚“ã‹ï¼Ÿ +- +- +- Unexpected EOF while reading public key +- 公開éµã®èª­ã¿å–り中ã«äºˆæœŸã—ãªã„ EOF ãŒã‚ã‚Šã¾ã—㟠+- +- +- Unexpected EOF while reading private key +- 秘密éµã®èª­ã¿å–り中ã«äºˆæœŸã—ãªã„ EOF ãŒã‚ã‚Šã¾ã—㟠+- +- +- Can't write public key as it is empty +- 公開éµãŒç©ºæ¬„ã®ã¾ã¾ã§ã¯ä¿å­˜ã§ãã¾ã›ã‚“ +- +- +- Unexpected EOF when writing public key +- 公開éµã®æ›¸ãè¾¼ã¿æ™‚ã«äºˆæœŸã—ãªã„ EOF ãŒã‚ã‚Šã¾ã—㟠+- +- +- Can't write private key as it is empty +- 秘密éµãŒç©ºæ¬„ã®ã¾ã¾ã§ã¯ä¿å­˜ã§ãã¾ã›ã‚“ +- +- +- Unexpected EOF when writing private key +- 秘密éµã®æ›¸ãè¾¼ã¿æ™‚ã«äºˆæœŸã—ãªã„ EOF ãŒã‚ã‚Šã¾ã—㟠+- +- +- Unsupported key type: %1 +- サãƒãƒ¼ãƒˆã—ã¦ã„ãªã„éµã®ç¨®é¡žã§ã™: %1 +- +- +- Unknown cipher: %1 +- ä¸æ˜Žãªæš—å·ã§ã™: %1 +- +- +- Cipher IV is too short for MD5 kdf +- æš—å·åˆæœŸåŒ–ベクトル㌠MD5 KDF ã«å¯¾ã—ã¦çŸ­ã™ãŽã¾ã™ +- +- +- Unknown KDF: %1 +- ä¸æ˜Žãª KDF ã§ã™: %1 +- +- +- Unknown key type: %1 +- ä¸æ˜Žãªéµã®ç¨®é¡žã§ã™: %1 +- +- +- +- PasswordEdit +- +- Passwords do not match +- パスワードãŒä¸€è‡´ã—ã¾ã›ã‚“ +- +- +- Passwords match so far +- 今ã®æ‰€ãƒ‘スワードã¯ä¸€è‡´ã—ã¦ã„ã¾ã™ +- +- +- Toggle Password (%1) +- パスワードを切り替㈠(%1) +- +- +- Generate Password (%1) +- ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã‚’ç”Ÿæˆ (%1) +- +- +- Warning: Caps Lock enabled! +- 警告: Caps Lock ãŒæœ‰åŠ¹ã«ãªã£ã¦ã„ã¾ã™ï¼ +- +- +- +- PasswordEditWidget +- +- Enter password: +- パスワードを入力ã—ã¦ãã ã•ã„: +- +- +- Confirm password: +- パスワードã®ç¢ºèª: +- +- +- Password +- パスワード +- +- +- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> +- <p>パスワードã¯ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’ä¿è­·ã™ã‚‹ãŸã‚ã®åŸºæœ¬çš„手段ã§ã™ã€‚</p><p>é•·ãã¦è¤‡é›‘ãªãƒ‘スワードãŒè‰¯ã„パスワードã¨ã•ã‚Œã¦ã„ã¾ã™ã€‚KeePassXC ã«ç”Ÿæˆã•ã›ã‚‹ã“ã¨ã‚‚å¯èƒ½ã§ã™ã€‚</p> +- +- +- Passwords do not match. +- パスワードãŒä¸€è‡´ã—ã¾ã›ã‚“。 +- +- +- Password field +- パスワードフィールド +- +- +- Repeat password field +- パスワードå†å…¥åŠ›ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ +- +- +- +- PasswordGeneratorWidget +- +- %p% +- %p% +- +- +- strength +- Password strength +- 強度 +- +- +- entropy +- エントロピー +- +- +- Password +- パスワード +- +- +- Character Types +- 文字種 +- +- +- Numbers +- æ•°å­— +- +- +- Extended ASCII +- æ‹¡å¼µ ASCII +- +- +- Exclude look-alike characters +- よãä¼¼ãŸæ–‡å­—を除外ã™ã‚‹ +- +- +- Pick characters from every group +- 使用ã™ã‚‹å…¨ã¦ã®æ–‡å­—種ã‹ã‚‰æ–‡å­—ã‚’é¸ã¶ +- +- +- &Length: +- é•·ã•(&L): +- +- +- Passphrase +- パスフレーズ +- +- +- Wordlist: +- å˜èªžãƒªã‚¹ãƒˆ: +- +- +- Word Separator: +- å˜èªžã®åŒºåˆ‡ã‚Šæ–‡å­—: +- +- +- Close +- é–‰ã˜ã‚‹ +- +- +- Entropy: %1 bit +- エントロピー: %1 ビット +- +- +- Password Quality: %1 +- パスワードã®å“質: %1 +- +- +- Poor +- Password quality +- 貧弱 +- +- +- Weak +- Password quality +- 弱ㄠ+- +- +- Good +- Password quality +- 良ㄠ+- +- +- Excellent +- Password quality +- ã™ã°ã‚‰ã—ã„ +- +- +- Switch to advanced mode +- 詳細モードã«åˆ‡ã‚Šæ›¿ãˆ +- +- +- Advanced +- 詳細設定 +- +- +- Braces +- 括弧 +- +- +- Punctuation +- å¥èª­ç‚¹ +- +- +- Quotes +- 引用符 +- +- +- Logograms +- 表語文字 +- +- +- Character set to exclude from generated password +- 生æˆã•ã‚ŒãŸãƒ‘スワードã‹ã‚‰æ–‡å­—集åˆã‚’除外ã™ã‚‹ +- +- +- Do not include: +- 次を除外: +- +- +- Add non-hex letters to "do not include" list +- "除外" リストã«éž16進数ã®æ–‡å­—列を追加 +- +- +- Hex +- 16進数 +- +- +- Excluded characters: "0", "1", "l", "I", "O", "|", "ï¹’" +- 除外ã•ã‚Œã‚‹æ–‡å­—: "0"ã€"1"ã€"l"ã€"I"ã€"O"ã€"|"ã€"ï¹’" +- +- +- Generated password +- 生æˆã•ã‚ŒãŸãƒ‘スワード +- +- +- Upper-case letters +- 大文字 +- +- +- Lower-case letters +- å°æ–‡å­— +- +- +- Special characters +- 特殊文字 +- +- +- Math Symbols +- æ•°å¼ã‚·ãƒ³ãƒœãƒ« +- +- +- Dashes and Slashes +- ダッシュやスラッシュ +- +- +- Excluded characters +- 除外ã•ã‚Œã‚‹æ–‡å­— +- +- +- Hex Passwords +- 16進数パスワード +- +- +- Password length +- パスワード長 +- +- +- Word Case: +- å˜èªžã®å¤§å°æ–‡å­—: +- +- +- Regenerate password +- パスワードをå†ç”Ÿæˆ +- +- +- Copy password +- パスワードをコピー +- +- +- lower case +- å°æ–‡å­— +- +- +- UPPER CASE +- 大文字 +- +- +- Title Case +- 先頭文字ã®ã¿å¤§æ–‡å­— +- +- +- Generate Password +- ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã‚’ç”Ÿæˆ +- +- +- Also choose from: +- 次ã‹ã‚‰ã‚‚é¸æŠž: +- +- +- Additional characters to use for the generated password +- パスワード生æˆã«ä½¿ç”¨ã™ã‚‹è¿½åŠ ã®æ–‡å­— +- +- +- Additional characters +- 追加ã®æ–‡å­— +- +- +- Word Count: +- å˜èªžæ•°: +- +- +- Esc +- Esc +- +- +- Apply Password +- パスワードをé©ç”¨ +- +- +- Ctrl+S +- Ctrl+S +- +- +- Regenerate password (%1) +- パスワードをå†ç”Ÿæˆ (%1) +- +- +- Special Characters +- 特殊文字 +- +- +- +- QApplication +- +- KeeShare +- KeeShare +- +- +- Statistics +- 統計 +- +- +- Very weak password +- éžå¸¸ã«å¼±ã„パスワード +- +- +- Password entropy is %1 bits +- パスワードã®ã‚¨ãƒ³ãƒˆãƒ­ãƒ”ー㯠%1 ビットã§ã™ +- +- +- Weak password +- å¼±ã„パスワード +- +- +- Used in %1/%2 +- %1/%2 ã§ä½¿ç”¨ +- +- +- Password is used %1 times +- パスワード㯠%1 ヵ所ã§ä½¿ç”¨ã•ã‚Œã¦ã„ã¾ã™ +- +- +- Password has expired +- パスワードã®æœ‰åŠ¹æœŸé™ãŒåˆ‡ã‚Œã¦ã„ã¾ã™ +- +- +- Password expiry was %1 +- パスワードã®æœ‰åŠ¹æœŸé™ã¯ %1 ã§ã—㟠+- +- +- Password is about to expire +- パスワードã®æœ‰åŠ¹æœŸé™ãŒåˆ‡ã‚Œãã†ã§ã™ +- +- +- Password expires in %1 days +- パスワードã®æœ‰åŠ¹æœŸé™ã¯ %1 日後ã§ã™ +- +- +- Password will expire soon +- パスワードã¯é–“ã‚‚ãªã期é™åˆ‡ã‚Œã«ãªã‚Šã¾ã™ +- +- +- Password expires on %1 +- パスワードã®æœ‰åŠ¹æœŸé™ã¯ %1 ã§ã™ +- +- +- Health Check +- å¥å…¨æ€§ã®ç¢ºèª +- +- +- HIBP +- HIBP +- +- +- +- QMessageBox +- +- Overwrite +- 上書ã +- +- +- Delete +- 削除 +- +- +- Move +- 移動 +- +- +- Empty +- 空ã«ã™ã‚‹ +- +- +- Remove +- 削除 +- +- +- Skip +- スキップ +- +- +- Disable +- 無効 +- +- +- Merge +- マージ +- +- +- Continue +- 続行 +- +- +- +- QObject +- +- Database not opened +- データベースを開ã„ã¦ã„ã¾ã›ã‚“ +- +- +- Database hash not available +- データベースãƒãƒƒã‚·ãƒ¥ãŒåˆ©ç”¨ã§ãã¾ã›ã‚“ +- +- +- Client public key not received +- クライアントã®å…¬é–‹éµã‚’å—ä¿¡ã—ã¾ã›ã‚“ã§ã—㟠+- +- +- Cannot decrypt message +- メッセージを復å·ã§ãã¾ã›ã‚“ +- +- +- Action cancelled or denied +- アクションãŒã‚­ãƒ£ãƒ³ã‚»ãƒ«ã¾ãŸã¯æ‹’å¦ã•ã‚Œã¾ã—㟠+- +- +- KeePassXC association failed, try again +- KeePassXC ã®ã‚¢ã‚½ã‚·ã‚¨ãƒ¼ã‚·ãƒ§ãƒ³ã«å¤±æ•—ã—ã¾ã—ãŸã€‚å†è©¦è¡Œã—ã¦ãã ã•ã„。 +- +- +- Encryption key is not recognized +- æš—å·åŒ–キーãŒèªè­˜ã•ã‚Œã¾ã›ã‚“ +- +- +- Incorrect action +- ä¸æ­£ç¢ºãªã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã§ã™ +- +- +- Empty message received +- 空ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’å—ä¿¡ã—ã¾ã—㟠+- +- +- No URL provided +- URL ãŒã‚ã‚Šã¾ã›ã‚“ +- +- +- No logins found +- ログイン情報ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ +- +- +- Unknown error +- ä¸æ˜Žãªã‚¨ãƒ©ãƒ¼ã§ã™ +- +- +- Add a new entry to a database. +- データベースã«æ–°ã—ã„エントリーを追加ã™ã‚‹ã€‚ +- +- +- Path of the database. +- データベースã®ãƒ‘ス。 +- +- +- Key file of the database. +- データベースã®ã‚­ãƒ¼ãƒ•ã‚¡ã‚¤ãƒ«ã€‚ +- +- +- path +- パス +- +- +- Username for the entry. +- エントリーã®ãƒ¦ãƒ¼ã‚¶ãƒ¼å。 +- +- +- username +- ユーザーå +- +- +- URL for the entry. +- エントリー㮠URL。 +- +- +- URL +- URL +- +- +- Prompt for the entry's password. +- エントリーã®ãƒ‘スワードをè¦æ±‚ã™ã‚‹ã€‚ +- +- +- Generate a password for the entry. +- エントリーã®ãƒ‘スワードを生æˆã™ã‚‹ã€‚ +- +- +- length +- é•·ã• +- +- +- Path of the entry to add. +- 追加ã™ã‚‹ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã®ãƒ‘ス。 +- +- +- Path of the entry to clip. +- clip = copy to clipboard +- クリップボードã«ã‚³ãƒ”ーã™ã‚‹ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã®ãƒ‘ス。 +- +- +- Timeout in seconds before clearing the clipboard. +- クリップボードを消去ã™ã‚‹ã¾ã§ã®æ™‚é–“ (秒) +- +- +- Edit an entry. +- エントリーを編集ã™ã‚‹ã€‚ +- +- +- Title for the entry. +- エントリーã®ã‚¿ã‚¤ãƒˆãƒ«ã€‚ +- +- +- title +- タイトル +- +- +- Path of the entry to edit. +- 編集ã™ã‚‹ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã®ãƒ‘ス。 +- +- +- Estimate the entropy of a password. +- パスワードã®ã‚¨ãƒ³ãƒˆãƒ­ãƒ”ーã®æŽ¨å®šã€‚ +- +- +- Password for which to estimate the entropy. +- エントロピーを推定ã™ã‚‹ãƒ‘スワード。 +- +- +- Perform advanced analysis on the password. +- パスワードã®è©³ç´°ãªåˆ†æžã‚’実行ã™ã‚‹ã€‚ +- +- +- +- +-Available commands: +- +- +- +-利用å¯èƒ½ãªã‚³ãƒžãƒ³ãƒ‰: +- +- +- +- Name of the command to execute. +- 実行ã™ã‚‹ã‚³ãƒžãƒ³ãƒ‰ã®åå‰ã€‚ +- +- +- List database entries. +- データベースã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã®ãƒªã‚¹ãƒˆã‚’表示ã™ã‚‹ã€‚ +- +- +- Path of the group to list. Default is / +- リストを表示ã™ã‚‹ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ‘ス。既定ã®è¨­å®šã¯ / (ルート) +- +- +- Find entries quickly. +- ç´ æ—©ãエントリーを見ã¤ã‘出ã™ã€‚ +- +- +- Search term. +- 検索語。 +- +- +- Merge two databases. +- 2ã¤ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’マージã™ã‚‹ã€‚ +- +- +- Path of the database to merge from. +- マージ元ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ãƒ‘ス。 +- +- +- Use the same credentials for both database files. +- 両方ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ã«å¯¾ã—ã¦åŒä¸€ã®è³‡æ ¼æƒ…報を使用ã™ã‚‹ã€‚ +- +- +- Key file of the database to merge from. +- マージ元ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ã‚­ãƒ¼ãƒ•ã‚¡ã‚¤ãƒ«ã€‚ +- +- +- Show an entry's information. +- エントリーã®æƒ…報を表示ã™ã‚‹ã€‚ +- +- +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- 表示ã™ã‚‹å±žæ€§ã®åå‰ã€‚ã“ã®ã‚ªãƒ—ションã¯ã„ãã¤ã§ã‚‚指定ã™ã‚‹ã“ã¨ãŒã§ãã€å„属性ã¯æŒ‡å®šã—ãŸé †ã«ä¸€è¡Œã«ä¸€ã¤ãšã¤è¡¨ç¤ºã•ã‚Œã¾ã™ã€‚属性ã®æŒ‡å®šãŒãªã„å ´åˆã¯æ—¢å®šã®å±žæ€§ã®æ¦‚è¦ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚ +- +- +- attribute +- 属性 +- +- +- Name of the entry to show. +- 表示ã™ã‚‹ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã®åå‰ã€‚ +- +- +- NULL device +- NULL デãƒã‚¤ã‚¹ +- +- +- error reading from device +- デãƒã‚¤ã‚¹èª­ã¿è¾¼ã¿ã‚¨ãƒ©ãƒ¼ +- +- +- malformed string +- ä¸æ­£ãªå½¢å¼ã®æ–‡å­—列 +- +- +- missing closing quote +- é–‰ã˜å¼•ç”¨ç¬¦ãŒã‚ã‚Šã¾ã›ã‚“ +- +- +- Group +- グループ +- +- +- Title +- タイトル +- +- +- Username +- ユーザーå +- +- +- Password +- パスワード +- +- +- Notes +- メモ +- +- +- Last Modified +- 最終更新日時 +- +- +- Created +- 作æˆæ—¥æ™‚ +- +- +- Browser Integration +- ãƒ–ãƒ©ã‚¦ã‚¶ãƒ¼çµ±åˆ +- +- +- SSH Agent +- SSH エージェント +- +- +- Generate a new random diceware passphrase. +- æ–°ã—ã„ランダムãªãƒ€ã‚¤ã‚¹ã‚¦ã‚§ã‚¢ãƒ‘スフレーズを生æˆã™ã‚‹ã€‚ +- +- +- Word count for the diceware passphrase. +- ダイスウェアパスフレーズã®å˜èªžæ•°ã€‚ +- +- +- Wordlist for the diceware generator. +-[Default: EFF English] +- ダイスウェアジェãƒãƒ¬ãƒ¼ã‚¿ãƒ¼ã®å˜èªžãƒªã‚¹ãƒˆã€‚ +-[既定: EFF English] +- +- +- Generate a new random password. +- æ–°ã—ã„ランダムãªãƒ‘スワードを生æˆã™ã‚‹ã€‚ +- +- +- Could not create entry with path %1. +- パス %1 ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’作æˆã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ +- +- +- Enter password for new entry: +- æ–°ã—ã„エントリーã®ãƒ‘スワードを入力ã—ã¦ãã ã•ã„: +- +- +- Writing the database failed %1. +- データベースã¸ã®æ›¸ãè¾¼ã¿ã¯ã‚¨ãƒ©ãƒ¼ "%1" ã§å¤±æ•—ã—ã¾ã—ãŸã€‚ +- +- +- Successfully added entry %1. +- エントリー %1 を正常ã«è¿½åŠ ã—ã¾ã—ãŸã€‚ +- +- +- Invalid timeout value %1. +- タイムアウトã®å€¤ %1 ã¯ä¸æ­£ã§ã™ã€‚ +- +- +- Entry %1 not found. +- エントリー %1 ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。 +- +- +- Entry with path %1 has no TOTP set up. +- パス %1 ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã«ã¯ TOTP ã®è¨­å®šãŒã‚ã‚Šã¾ã›ã‚“。 +- +- +- Clearing the clipboard in %1 second(s)... +- %1 秒後ã«ã‚¯ãƒªãƒƒãƒ—ボードを消去ã—ã¾ã™... +- +- +- Clipboard cleared! +- クリップボードを消去ã—ã¾ã—ãŸã€‚ +- +- +- Silence password prompt and other secondary outputs. +- パスワードã®è¦æ±‚ã‚„ãã®ä»–ã®æ§˜ã€…ãªå‡ºåŠ›ã‚’抑制ã™ã‚‹ã€‚ +- +- +- count +- CLI parameter +- æ•° +- +- +- Could not find entry with path %1. +- パス %1 ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’見ã¤ã‘られã¾ã›ã‚“ã§ã—ãŸã€‚ +- +- +- Not changing any field for entry %1. +- エントリー %1 ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã¯å¤‰æ›´ã•ã‚Œã¦ã„ã¾ã›ã‚“。 +- +- +- Enter new password for entry: +- エントリーã®æ–°ã—ã„パスワードを入力ã—ã¦ãã ã•ã„: +- +- +- Writing the database failed: %1 +- データベースã¸ã®æ›¸ãè¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ: %1 +- +- +- Successfully edited entry %1. +- エントリー %1 を正常ã«ç·¨é›†ã—ã¾ã—ãŸã€‚ +- +- +- Length %1 +- é•·ã• %1 +- +- +- Entropy %1 +- エントロピー %1 +- +- +- Log10 %1 +- log10 %1 +- +- +- Multi-word extra bits %1 +- マルãƒãƒ¯ãƒ¼ãƒ‰ã‚¨ã‚¯ã‚¹ãƒˆãƒ©ãƒ“ット %1 +- +- +- Type: Bruteforce +- 種類: ブルートフォース +- +- +- Type: Dictionary +- 種類: 辞書 +- +- +- Type: Dict+Leet +- 種類: 辞書 + Leet +- +- +- Type: User Words +- 種類: ユーザー辞書 +- +- +- Type: User+Leet +- 種類: ユーザー辞書 + Leet +- +- +- Type: Repeated +- 種類: リピート +- +- +- Type: Sequence +- 種類: 連続 +- +- +- Type: Spatial +- 種類: 空間 +- +- +- Type: Date +- 種類: 日付 +- +- +- Type: Bruteforce(Rep) +- 種類: ブルートフォース (å復) +- +- +- Type: Dictionary(Rep) +- 種類: 辞書 (å復) +- +- +- Type: Dict+Leet(Rep) +- 種類: 辞書 + Leet (å復) +- +- +- Type: User Words(Rep) +- 種類: ユーザー辞書 (å復) +- +- +- Type: User+Leet(Rep) +- 種類: ユーザー辞書 + Leet (å復) +- +- +- Type: Repeated(Rep) +- 種類: リピート (å復) +- +- +- Type: Sequence(Rep) +- 種類: 連続 (å復) +- +- +- Type: Spatial(Rep) +- 種類: 空間 (å復) +- +- +- Type: Date(Rep) +- 種類: 日付 (å復) +- +- +- Type: Unknown%1 +- 種類: ä¸æ˜Ž (%1) +- +- +- Entropy %1 (%2) +- エントロピー %1 (%2) +- +- +- *** Password length (%1) != sum of length of parts (%2) *** +- *** パスワードã®é•·ã• (%1) != å„é•·ã•ã®åˆè¨ˆå€¤ (%2) *** +- +- +- Failed to load key file %1: %2 +- キーファイル %1 ã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ: %2 +- +- +- Length of the generated password +- 生æˆã•ã‚Œã‚‹ãƒ‘スワードã®é•·ã• +- +- +- Use lowercase characters +- å°æ–‡å­—を使用ã™ã‚‹ +- +- +- Use uppercase characters +- 大文字を使用ã™ã‚‹ +- +- +- Use special characters +- 特殊文字を使用ã™ã‚‹ +- +- +- Use extended ASCII +- æ‹¡å¼µ ASCII を使用ã™ã‚‹ +- +- +- Exclude character set +- 文字集åˆã‚’除外ã™ã‚‹ +- +- +- chars +- 文字 +- +- +- Exclude similar looking characters +- よãä¼¼ãŸæ–‡å­—を除外ã™ã‚‹ +- +- +- Include characters from every selected group +- é¸æŠžã—ãŸå„グループã®æ–‡å­—ã‚’å«ã‚€ +- +- +- Recursively list the elements of the group. +- グループã®è¦ç´ ã‚’å†å¸°çš„ã«ãƒªã‚¹ãƒˆåŒ–ã™ã‚‹ã€‚ +- +- +- Cannot find group %1. +- グループ %1 ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。 +- +- +- Error reading merge file: +-%1 +- マージã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã®èª­ã¿è¾¼ã¿æ™‚ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ: +-%1 +- +- +- Unable to save database to file : %1 +- データベースをファイルã«ä¿å­˜ã§ãã¾ã›ã‚“: %1 +- +- +- Unable to save database to file: %1 +- データベースをファイルã«ä¿å­˜ã§ãã¾ã›ã‚“: %1 +- +- +- Successfully recycled entry %1. +- エントリー %1 を正常ã«ã‚´ãƒŸç®±ã¸ç§»å‹•ã—ã¾ã—ãŸã€‚ +- +- +- Successfully deleted entry %1. +- エントリー %1 を正常ã«å‰Šé™¤ã—ã¾ã—ãŸã€‚ +- +- +- Show the entry's current TOTP. +- エントリーã®ç¾åœ¨ã® TOTP を表示ã™ã‚‹ã€‚ +- +- +- ERROR: unknown attribute %1. +- エラー: %1 ã¯ä¸æ˜Žãªå±žæ€§ã§ã™ã€‚ +- +- +- No program defined for clipboard manipulation +- クリップボードæ“作用プログラムを定義ã—ã¦ã„ã¾ã›ã‚“ +- +- +- file empty +- ファイルãŒç©ºã§ã™ +- +- +- %1: (row, col) %2,%3 +- %1: (è¡Œ, 列) %2,%3 +- +- +- AES-KDF (KDBX 4) +- AES-KDF (KDBX 4) +- +- +- AES-KDF (KDBX 3.1) +- AES-KDF (KDBX 3.1) +- +- +- Invalid Settings +- TOTP +- 設定ãŒä¸æ­£ã§ã™ +- +- +- Invalid Key +- TOTP +- キーãŒä¸æ­£ã§ã™ +- +- +- Message encryption failed. +- メッセージã®æš—å·åŒ–ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ +- +- +- No groups found +- グループãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ +- +- +- Create a new database. +- æ–°ã—ã„データベースを作æˆã™ã‚‹ã€‚ +- +- +- File %1 already exists. +- ファイル %1 ã¯æ—¢ã«å­˜åœ¨ã—ã¾ã™ã€‚ +- +- +- Loading the key file failed +- キーファイルã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—㟠+- +- +- No key is set. Aborting database creation. +- キーを設定ã—ã¦ã„ã¾ã›ã‚“。データベースã®ä½œæˆã‚’中止ã—ã¾ã™ã€‚ +- +- +- Failed to save the database: %1. +- データベースã®ä¿å­˜ã«å¤±æ•—ã—ã¾ã—ãŸ: %1. +- +- +- Successfully created new database. +- æ–°ã—ã„データベースを正常ã«ä½œæˆã—ã¾ã—ãŸã€‚ +- +- +- Creating KeyFile %1 failed: %2 +- キーファイル %1 ã®ä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸ: %2 +- +- +- Loading KeyFile %1 failed: %2 +- キーファイル %1 ã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ: %2 +- +- +- Path of the entry to remove. +- 削除ã™ã‚‹ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã®ãƒ‘ス。 +- +- +- Existing single-instance lock file is invalid. Launching new instance. +- 既存ã®ã‚·ãƒ³ã‚°ãƒ«ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãƒ­ãƒƒã‚¯ãƒ•ã‚¡ã‚¤ãƒ«ã¯ç„¡åŠ¹ã§ã™ã€‚æ–°ã—ã„インスタンスを起動ã—ã¾ã™ã€‚ +- +- +- The lock file could not be created. Single-instance mode disabled. +- ロックファイルを作æˆã§ãã¾ã›ã‚“ã§ã—ãŸã€‚シングルインスタンスモードã¯ç„¡åŠ¹ã§ã™ã€‚ +- +- +- KeePassXC - cross-platform password manager +- KeePassXC - クロスプラットフォームã®ãƒ‘スワードマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ +- +- +- filenames of the password databases to open (*.kdbx) +- é–‹ãパスワードデータベースã®ãƒ•ã‚¡ã‚¤ãƒ«å (*.kdbx) +- +- +- path to a custom config file +- カスタム設定ファイルã¸ã®ãƒ‘ス +- +- +- key file of the database +- データベースã®ã‚­ãƒ¼ãƒ•ã‚¡ã‚¤ãƒ« +- +- +- read password of the database from stdin +- 標準入力ã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ãƒ‘スワードを読ã¿è¾¼ã‚€ +- +- +- Another instance of KeePassXC is already running. +- KeePassXC ã®åˆ¥ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒæ—¢ã«èµ·å‹•ã—ã¦ã„ã¾ã™ã€‚ +- +- +- Fatal error while testing the cryptographic functions. +- æš—å·åŒ–機能ã®ãƒ†ã‚¹ãƒˆä¸­ã«è‡´å‘½çš„ãªã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ +- +- +- KeePassXC - Error +- KeePassXC - エラー +- +- +- Database password: +- データベースã®ãƒ‘スワード: +- +- +- Cannot create new group +- æ–°ã—ã„グループを作æˆã§ãã¾ã›ã‚“ +- +- +- Deactivate password key for the database. +- データベースã®ãƒ‘スワードキーを無効ã«ã™ã‚‹ã€‚ +- +- +- Displays debugging information. +- デãƒãƒƒã‚°æƒ…報を表示ã™ã‚‹ã€‚ +- +- +- Deactivate password key for the database to merge from. +- マージ元データベースã®ãƒ‘スワードキーを無効ã«ã™ã‚‹ã€‚ +- +- +- Version %1 +- ãƒãƒ¼ã‚¸ãƒ§ãƒ³ %1 +- +- +- Build Type: %1 +- ビルド形å¼: %1 +- +- +- Revision: %1 +- リビジョン: %1 +- +- +- Distribution: %1 +- é…布形å¼: %1 +- +- +- Debugging mode is disabled. +- デãƒãƒƒã‚°ãƒ¢ãƒ¼ãƒ‰ã¯ç„¡åŠ¹ã§ã™ã€‚ +- +- +- Debugging mode is enabled. +- デãƒãƒƒã‚°ãƒ¢ãƒ¼ãƒ‰ãŒæœ‰åŠ¹ã§ã™ã€‚ +- +- +- Operating system: %1 +-CPU architecture: %2 +-Kernel: %3 %4 +- オペレーティングシステム: %1 +-CPU アーキテクãƒãƒ£ãƒ¼: %2 +-カーãƒãƒ«: %3 %4 +- +- +- Auto-Type +- 自動入力 +- +- +- KeeShare (signed and unsigned sharing) +- KeeShare (ç½²å共有ã¨æœªç½²å共有) +- +- +- KeeShare (only signed sharing) +- KeeShare (ç½²å共有ã®ã¿) +- +- +- KeeShare (only unsigned sharing) +- KeeShare (未署å共有ã®ã¿) +- +- +- YubiKey +- YubiKey +- +- +- TouchID +- TouchID +- +- +- None +- ãªã— +- +- +- Enabled extensions: +- 有効ãªæ‹¡å¼µæ©Ÿèƒ½: +- +- +- Cryptographic libraries: +- æš—å·åŒ–ライブラリ: +- +- +- Cannot generate a password and prompt at the same time! +- パスワードã®ç”Ÿæˆã¨ãƒ—ロンプトã®è¡¨ç¤ºã¯åŒæ™‚使用ã§ãã¾ã›ã‚“。 +- +- +- Adds a new group to a database. +- データベースã«æ–°ã—ã„グループを追加ã™ã‚‹ã€‚ +- +- +- Path of the group to add. +- 追加ã™ã‚‹ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ‘ス。 +- +- +- Group %1 already exists! +- グループ %1 ã¯æ—¢ã«å­˜åœ¨ã—ã¾ã™ï¼ +- +- +- Group %1 not found. +- グループ %1 ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。 +- +- +- Successfully added group %1. +- グループ %1 を正常ã«è¿½åŠ ã—ã¾ã—ãŸã€‚ +- +- +- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. +- パスワードãŒå…¬ã«æµå‡ºã—ã¦ã„ã‚‹ã‹ç¢ºèªã™ã‚‹ã€‚FILENAME ã¯ã€https://haveibeenpwned.com/Passwords ã§åˆ©ç”¨å¯èƒ½ãª HIBP å½¢å¼ (æµå‡ºã—ãŸãƒ‘スワード㮠SHA-1 ãƒãƒƒã‚·ãƒ¥ã®ãƒªã‚¹ãƒˆ) ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®ãƒ‘スã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ +- +- +- FILENAME +- FILENAME +- +- +- Analyze passwords for weaknesses and problems. +- パスワードã®è„†å¼±æ€§ã‚„å•é¡Œç‚¹ã‚’解æžã™ã‚‹ã€‚ +- +- +- Failed to open HIBP file %1: %2 +- HIBP ファイル %1 ã‚’é–‹ãã®ã«å¤±æ•—ã—ã¾ã—ãŸ: %2 +- +- +- Evaluating database entries against HIBP file, this will take a while... +- HIBP ファイルを対象ã«ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’評価中ã§ã™ã€‚ã—ã°ã‚‰ã時間ãŒã‹ã‹ã‚Šã¾ã™... +- +- +- Close the currently opened database. +- ç¾åœ¨é–‹ã„ã¦ã„るデータベースを閉ã˜ã‚‹ã€‚ +- +- +- Display this help. +- ã“ã®ãƒ˜ãƒ«ãƒ—を表示ã™ã‚‹ã€‚ +- +- +- slot +- スロット +- +- +- Invalid word count %1 +- å˜èªžæ•° %1 ã¯ä¸æ­£ã§ã™ +- +- +- The word list is too small (< 1000 items) +- å˜èªžãƒªã‚¹ãƒˆãŒå°ã•ã™ãŽã¾ã™ (< 1000 アイテム) +- +- +- Exit interactive mode. +- 対話モードを終了ã™ã‚‹ã€‚ +- +- +- Exports the content of a database to standard output in the specified format. +- データベースã®å†…容を指定ã—ãŸå½¢å¼ã§æ¨™æº–出力ã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã™ã‚‹ã€‚ +- +- +- Unable to export database to XML: %1 +- データベースを XML ã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“: %1 +- +- +- Unsupported format %1 +- %1 ã¯ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ãªã„フォーマットã§ã™ +- +- +- Use numbers +- 数字を使用ã™ã‚‹ +- +- +- Invalid password length %1 +- %1 ã¯ãƒ‘スワード長ã¨ã—ã¦é©åˆ‡ã§ã¯ã‚ã‚Šã¾ã›ã‚“ +- +- +- Display command help. +- コマンドã®ãƒ˜ãƒ«ãƒ—を表示ã™ã‚‹ã€‚ +- +- +- Available commands: +- 利用å¯èƒ½ãªã‚³ãƒžãƒ³ãƒ‰: +- +- +- Import the contents of an XML database. +- XML データベースã®å†…容をインãƒãƒ¼ãƒˆã™ã‚‹ã€‚ +- +- +- Path of the XML database export. +- XML データベースエクスãƒãƒ¼ãƒˆã®ãƒ‘ス。 +- +- +- Path of the new database. +- æ–°ã—ã„データベースã®ãƒ‘ス。 +- +- +- Successfully imported database. +- データベースを正常ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã—ã¾ã—ãŸã€‚ +- +- +- Unknown command %1 +- %1 ã¯ä¸æ˜Žãªã‚³ãƒžãƒ³ãƒ‰ã§ã™ +- +- +- Flattens the output to single lines. +- 出力をフラットãªå˜ä¸€è¡Œã«ã™ã‚‹ã€‚ +- +- +- Only print the changes detected by the merge operation. +- マージ処ç†ã§æ¤œå‡ºã—ãŸå¤‰æ›´ã®ã¿ã‚’出力ã™ã‚‹ã€‚ +- +- +- Yubikey slot for the second database. +- 2ã¤ç›®ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ç”¨ã® Yubikey スロット。 +- +- +- Successfully merged %1 into %2. +- %1 ã‚’ %2 ã¸æ­£å¸¸ã«ãƒžãƒ¼ã‚¸ã—ã¾ã—ãŸã€‚ +- +- +- Database was not modified by merge operation. +- データベースã¯ãƒžãƒ¼ã‚¸å‡¦ç†ã§æ›´æ–°ã•ã‚Œã¾ã›ã‚“ã§ã—ãŸã€‚ +- +- +- Moves an entry to a new group. +- エントリーを新ã—ã„グループã«ç§»å‹•ã™ã‚‹ã€‚ +- +- +- Path of the entry to move. +- 移動ã™ã‚‹ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã®ãƒ‘ス。 +- +- +- Path of the destination group. +- 移動先グループã®ãƒ‘ス。 +- +- +- Could not find group with path %1. +- パス %1 ã®ã‚°ãƒ«ãƒ¼ãƒ—ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ +- +- +- Entry is already in group %1. +- エントリーã¯æ—¢ã«ã‚°ãƒ«ãƒ¼ãƒ— %1 ã«å­˜åœ¨ã—ã¾ã™ã€‚ +- +- +- Successfully moved entry %1 to group %2. +- エントリー %1 を正常ã«ã‚°ãƒ«ãƒ¼ãƒ— %2 ã¸ç§»å‹•ã—ã¾ã—ãŸã€‚ +- +- +- Open a database. +- データベースを開ã。 +- +- +- Path of the group to remove. +- 削除ã™ã‚‹ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ‘ス。 +- +- +- Cannot remove root group from database. +- データベースã‹ã‚‰ãƒ«ãƒ¼ãƒˆã‚°ãƒ«ãƒ¼ãƒ—を削除ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 +- +- +- Successfully recycled group %1. +- グループ %1 を正常ã«ã‚´ãƒŸç®±ã¸ç§»å‹•ã—ã¾ã—ãŸã€‚ +- +- +- Successfully deleted group %1. +- グループ %1 を正常ã«å‰Šé™¤ã—ã¾ã—ãŸã€‚ +- +- +- Failed to open database file %1: not found +- データベースファイル %1 ã‚’é–‹ãã®ã«å¤±æ•—ã—ã¾ã—ãŸ: 見ã¤ã‹ã‚Šã¾ã›ã‚“ +- +- +- Failed to open database file %1: not a plain file +- データベースファイル %1 ã‚’é–‹ãã®ã«å¤±æ•—ã—ã¾ã—ãŸ: プレーンãªãƒ•ã‚¡ã‚¤ãƒ«ã§ã¯ã‚ã‚Šã¾ã›ã‚“ +- +- +- Failed to open database file %1: not readable +- データベースファイル %1 ã‚’é–‹ãã®ã«å¤±æ•—ã—ã¾ã—ãŸ: 読ã¿å–ã‚Šå¯èƒ½ã§ã¯ã‚ã‚Šã¾ã›ã‚“ +- +- +- Enter password to unlock %1: +- %1 ã®ãƒ­ãƒƒã‚¯ã‚’解除ã™ã‚‹ãŸã‚ã®ãƒ‘スワードを入力ã—ã¦ãã ã•ã„: +- +- +- Invalid YubiKey slot %1 +- YubiKey ã®ã‚¹ãƒ­ãƒƒãƒˆ %1 ã¯ä¸æ­£ã§ã™ +- +- +- Enter password to encrypt database (optional): +- データベースを暗å·åŒ–ã™ã‚‹ãŸã‚ã®ãƒ‘スワードを入力ã—ã¦ãã ã•ã„ (オプション): +- +- +- HIBP file, line %1: parse error +- HIBP ファイル㮠%1 行目: パースエラー +- +- +- Secret Service Integration +- ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆã‚µãƒ¼ãƒ“ã‚¹çµ±åˆ +- +- +- User name +- ユーザーå +- +- +- Password for '%1' has been leaked %2 time(s)! +- '%1' ã®ãƒ‘スワード㯠%2 回æµå‡ºã—ã¦ã„ã¾ã™ï¼ +- +- +- Invalid password generator after applying all options +- å…¨ã¦ã®ã‚ªãƒ—ションをé©ç”¨ã—ãŸãƒ‘スワード生æˆã¯ç„¡åŠ¹ã§ã™ +- +- +- Show the protected attributes in clear text. +- クリアテキストã®ä¿è­·ã•ã‚ŒãŸå±žæ€§ã‚’表示ã™ã‚‹ã€‚ +- +- +- Browser Plugin Failure +- ブラウザープラグインエラー +- +- +- Could not save the native messaging script file for %1. +- %1 用㮠Native messaging スクリプトファイルをä¿å­˜ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ +- +- +- Copy the given attribute to the clipboard. Defaults to "password" if not specified. +- 指定ã—ãŸå±žæ€§ã‚’クリップボードã«ã‚³ãƒ”ーã™ã‚‹ã€‚指定ã—ãªã„å ´åˆã¯ "パスワード" ã«ãªã‚Šã¾ã™ã€‚ +- +- +- Copy the current TOTP to the clipboard (equivalent to "-a totp"). +- ç¾åœ¨ã® TOTP をクリップボードã«ã‚³ãƒ”ーã™ã‚‹ ("-a totp" ã¨åŒã˜)。 +- +- +- Copy an entry's attribute to the clipboard. +- エントリーã®å±žæ€§ã‚’クリップボードã«ã‚³ãƒ”ーã™ã‚‹ã€‚ +- +- +- ERROR: Please specify one of --attribute or --totp, not both. +- エラー: --attribute ã¾ãŸã¯ --totp を一ã¤æŒ‡å®šã—ã¦ãã ã•ã„ (両方ã¯ä¸å¯)。 +- +- +- ERROR: attribute %1 is ambiguous, it matches %2. +- エラー: 属性 %1 ã¯ä¸æ˜Žçž­ã§ã™ã€‚%2 ã¨ä¸€è‡´ã—ã¾ã™ã€‚ +- +- +- Attribute "%1" not found. +- 属性 "%1" ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。 +- +- +- Entry's "%1" attribute copied to the clipboard! +- エントリー㮠"%1" 属性をクリップボードã«ã‚³ãƒ”ーã—ã¾ã—ãŸã€‚ +- +- +- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). +- データベースã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã«ä½¿ç”¨ã™ã‚‹ Yubikey ã®ã‚¹ãƒ­ãƒƒãƒˆç•ªå·ã¨ã‚ªãƒ—ションã®ã‚·ãƒªã‚¢ãƒ«ç•ªå· (例: 1:7370001)。 +- +- +- slot[:serial] +- スロット[:シリアル] +- +- +- Target decryption time in MS for the database. +- データベースã®ç›®æ¨™å¾©å·æ™‚é–“ (ミリ秒)。 +- +- +- time +- 時間 +- +- +- Set the key file for the database. +- データベースã®ã‚­ãƒ¼ãƒ•ã‚¡ã‚¤ãƒ«ã‚’設定ã™ã‚‹ã€‚ +- +- +- Set a password for the database. +- データベースã®ãƒ‘スワードを設定ã™ã‚‹ã€‚ +- +- +- Invalid decryption time %1. +- %1 ã¯å¾©å·æ™‚é–“ã¨ã—ã¦ä¸é©åˆ‡ã§ã™ã€‚ +- +- +- Target decryption time must be between %1 and %2. +- 目標復å·æ™‚é–“ã®ç¯„囲㯠%1 ã‹ã‚‰ %2 ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ +- +- +- Failed to set database password. +- データベースパスワードã®è¨­å®šã«å¤±æ•—ã—ã¾ã—ãŸã€‚ +- +- +- Benchmarking key derivation function for %1ms delay. +- éµå°Žå‡ºé–¢æ•°ã‚’ %1ms ã®é…延ã§ãƒ™ãƒ³ãƒãƒžãƒ¼ã‚¯ä¸­ã€‚ +- +- +- Setting %1 rounds for key derivation function. +- éµå°Žå‡ºé–¢æ•°ã‚’ %1 回設定中。 +- +- +- error while setting database key derivation settings. +- データベースã®éµå°Žå‡ºè¨­å®šä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ +- +- +- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. +- エクスãƒãƒ¼ãƒˆæ™‚ã«ä½¿ç”¨ã™ã‚‹ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã€‚'xml' ãŒæ—¢å®šã§ã€'csv' ã‚‚é¸æŠžå¯èƒ½ã§ã™ã€‚ +- +- +- Unable to import XML database: %1 +- XML データベースをインãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“: %1 +- +- +- Show a database's information. +- データベースã®æƒ…報を表示ã™ã‚‹ã€‚ +- +- +- UUID: +- UUID: +- +- +- Name: +- åå‰: +- +- +- Description: +- 概è¦: +- +- +- Cipher: +- æš—å·: +- +- +- KDF: +- KDF: +- +- +- Recycle bin is enabled. +- ゴミ箱ãŒæœ‰åŠ¹ã§ã™ã€‚ +- +- +- Recycle bin is not enabled. +- ゴミ箱ã¯æœ‰åŠ¹ã«ãªã£ã¦ã„ã¾ã›ã‚“。 +- +- +- Invalid command %1. +- %1 ã¯ç„¡åŠ¹ãªã‚³ãƒžãƒ³ãƒ‰ã§ã™ã€‚ +- +- +- Invalid YubiKey serial %1 +- YubiKey ã®ã‚·ãƒªã‚¢ãƒ« %1 ã¯ä¸æ­£ã§ã™ +- +- +- Please touch the button on your YubiKey to continue… +- 続行ã™ã‚‹ãŸã‚ã« YubiKey ã®ãƒœã‚¿ãƒ³ã«ã‚¿ãƒƒãƒã—ã¦ãã ã•ã„… +- +- +- Do you want to create a database with an empty password? [y/N]: +- 空ã®ãƒ‘スワードã§ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’作æˆã—ã¾ã™ã‹ï¼Ÿ[y/N]: +- +- +- Repeat password: +- パスワードをå†å…¥åŠ›: +- +- +- Error: Passwords do not match. +- エラー: パスワードãŒä¸€è‡´ã—ã¾ã›ã‚“。 +- +- +- All clipping programs failed. Tried %1 +- +- å…¨ã¦ã®ã‚¯ãƒªãƒƒãƒ”ングプログラムãŒå¤±æ•—ã—ã¾ã—ãŸã€‚試行: %1 +- +- +- +- AES (%1 rounds) +- AES (%1 回) +- +- +- AES 256-bit +- AES 256 ビット +- +- +- Twofish 256-bit +- Twofish 256 ビット +- +- +- ChaCha20 256-bit +- ChaCha20: 256 ビット {20 256-?} +- +- +- Benchmark %1 delay +- ベンãƒãƒžãƒ¼ã‚¯ (é…延: %1) +- +- +- %1 ms +- milliseconds +- %1 ミリ秒 +- +- +- %1 s +- seconds +- %1 秒 +- +- +- path to a custom local config file +- カスタムローカル設定ファイルã¸ã®ãƒ‘ス +- +- +- WARNING: You are using an old key file format which KeePassXC may +-stop supporting in the future. +- +-Please consider generating a new key file. +- 警告: KeePassXC ã¯å°†æ¥çš„ã«ã€å¤ã„キーファイル +-å½¢å¼ã‚’サãƒãƒ¼ãƒˆã—ãªããªã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚ +- +-æ–°ã—ã„キーファイルã®ç”Ÿæˆã‚’検討ã—ã¦ãã ã•ã„。 +- +- +- Argon2%1 (%2 rounds, %3 KB) +- Argon2%1 (%2 回, %3 KB) +- +- +- Argon2d (KDBX 4 – recommended) +- Argon2d (KDBX 4 – 推奨) +- +- +- Argon2id (KDBX 4) +- Argon2id (KDBX 4) +- +- +- TOTP +- TOTP +- +- +- Icon +- アイコン +- +- +- Unsupported key file version: %1 +- サãƒãƒ¼ãƒˆã—ã¦ã„ãªã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ã‚­ãƒ¼ãƒ•ã‚¡ã‚¤ãƒ«ã§ã™: %1 +- +- +- Checksum mismatch! Key file may be corrupt. +- ãƒã‚§ãƒƒã‚¯ã‚µãƒ ãŒä¸€è‡´ã—ã¾ã›ã‚“ï¼ã‚­ãƒ¼ãƒ•ã‚¡ã‚¤ãƒ«ãŒç ´æã—ã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚ +- +- +- Unexpected key file data! Key file may be corrupt. +- 予期ã—ãªã„キーファイルデータã§ã™ï¼ã‚­ãƒ¼ãƒ•ã‚¡ã‚¤ãƒ«ãŒç ´æã—ã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚ +- +- +- +- QtIOCompressor +- +- Internal zlib error when compressing: +- 圧縮時ã«å†…部 zlib エラーãŒç™ºç”Ÿã—ã¾ã—ãŸ: +- +- +- Error writing to underlying device: +- 基本デãƒã‚¤ã‚¹ã¸ã®æ›¸ãè¾¼ã¿æ™‚ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ: +- +- +- Error opening underlying device: +- 基本デãƒã‚¤ã‚¹ã‚’é–‹ãéš›ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ: +- +- +- Error reading data from underlying device: +- 基本デãƒã‚¤ã‚¹ã‹ã‚‰ã®èª­ã¿å–り時ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ: +- +- +- Internal zlib error when decompressing: +- 展開時ã«å†…部 zlib エラーãŒç™ºç”Ÿã—ã¾ã—ãŸ: +- +- +- +- QtIOCompressor::open +- +- The gzip format not supported in this version of zlib. +- ç¾åœ¨ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® zlib ã¯ã€ãã® gzip å½¢å¼ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。 +- +- +- Internal zlib error: +- 内部 zlib エラー: +- +- +- +- ReportsWidgetHealthcheck +- +- Also show entries that have been excluded from reports +- レãƒãƒ¼ãƒˆã‹ã‚‰é™¤å¤–ã•ã‚Œã¦ã„るエントリーも表示ã™ã‚‹ +- +- +- Hover over reason to show additional details. Double-click entries to edit. +- ç†ç”±ã«ãƒžã‚¦ã‚¹ã‚ªãƒ¼ãƒãƒ¼ã™ã‚‹ã¨è¿½åŠ ã®è©³ç´°ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚エントリーをダブルクリックã™ã‚‹ã¨ç·¨é›†ã§ãã¾ã™ã€‚ +- +- +- Bad +- Password quality +- 悪ㄠ+- +- +- Bad — password must be changed +- 悪ㄠ— パスワードを変更ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ +- +- +- Poor +- Password quality +- 貧弱 +- +- +- Poor — password should be changed +- 貧弱 — パスワードを変更ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ +- +- +- Weak +- Password quality +- 弱ㄠ+- +- +- Weak — consider changing the password +- 弱ㄠ— パスワードã®å¤‰æ›´ã‚’検討ã—ã¦ãã ã•ã„ +- +- +- (Excluded) +- (除外) +- +- +- This entry is being excluded from reports +- ã“ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã¯ãƒ¬ãƒãƒ¼ãƒˆã‹ã‚‰é™¤å¤–ã•ã‚Œã¦ã„ã¾ã™ +- +- +- Please wait, health data is being calculated... +- å¥å…¨æ€§ãƒ‡ãƒ¼ã‚¿ã‚’計算中ã§ã™ã€ãŠå¾…ã¡ãã ã•ã„... +- +- +- Congratulations, everything is healthy! +- å…¨ã¦å¥å…¨ã§ã™ã€‚ãŠã‚ã§ã¨ã†ã”ã–ã„ã¾ã™ï¼ +- +- +- Title +- タイトル +- +- +- Path +- パス +- +- +- Score +- スコア +- +- +- Reason +- ç†ç”± +- +- +- Edit Entry... +- エントリーを編集... +- +- +- Exclude from reports +- レãƒãƒ¼ãƒˆã‹ã‚‰é™¤å¤– +- +- +- +- ReportsWidgetHibp +- +- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. +- 注æ„: ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã‚µãƒ¼ãƒ“ス㮠Have I Been Pwned (https://haveibeenpwned.com) ã«æƒ…報をé€ä¿¡ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚続行ã—ãŸå ´åˆã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ãƒ‘スワードã¯æš—å·å­¦çš„ãƒãƒƒã‚·ãƒ¥åŒ–ãŒæ–½ã•ã‚Œã€ãれらã®ãƒãƒƒã‚·ãƒ¥ã®æœ€åˆã®5文字ãŒã€ã“ã®ã‚µãƒ¼ãƒ“スã¸å®‰å…¨ã«é€ä¿¡ã•ã‚Œã¾ã™ã€‚ã“ã®æƒ…å ±ã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ãŒå†æ§‹æˆã•ã‚Œã‚‹ã“ã¨ã¯ãªãã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ãŒå®‰å…¨ã§ã‚ã‚‹ã“ã¨ã«å¤‰ã‚ã‚Šã¯ã‚ã‚Šã¾ã›ã‚“。ã—ã‹ã—ãªãŒã‚‰ã€ã‚ãªãŸã® IP アドレスやé€ä¿¡ã™ã‚‹ãƒ‘スワードã®æ•°ã¯ã€ã“ã®ã‚µãƒ¼ãƒ“スã«å…¬é–‹ã•ã‚Œã¾ã™ã€‚ +- +- +- Perform Online Analysis +- オンライン分æžã‚’実行 +- +- +- Also show entries that have been excluded from reports +- レãƒãƒ¼ãƒˆã‹ã‚‰é™¤å¤–ã•ã‚Œã¦ã„るエントリーも表示ã™ã‚‹ +- +- +- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. +- ã“ã®ãƒ“ルド㮠KeePassXC ã¯ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æ©Ÿèƒ½ãŒã‚ã‚Šã¾ã›ã‚“。パスワードを Have I Been Pwned ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã§ç…§åˆã™ã‚‹ã«ã¯ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æ©Ÿèƒ½ãŒå¿…è¦ã§ã™ã€‚ +- +- +- Congratulations, no exposed passwords! +- パスワードã¯æµå‡ºã—ã¦ã„ã¾ã›ã‚“。ãŠã‚ã§ã¨ã†ã”ã–ã„ã¾ã™ï¼ +- +- +- Title +- タイトル +- +- +- Path +- パス +- +- +- Password exposed… +- パスワードãŒæµå‡ºã—ã¦ã„ã¾ã™â€¦ +- +- +- (Excluded) +- (除外) +- +- +- This entry is being excluded from reports +- ã“ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã¯ãƒ¬ãƒãƒ¼ãƒˆã‹ã‚‰é™¤å¤–ã•ã‚Œã¦ã„ã¾ã™ +- +- +- once +- 1 回 +- +- +- up to 10 times +- 10 回以下 +- +- +- up to 100 times +- 100 回以下 +- +- +- up to 1000 times +- 1000 回以下 +- +- +- up to 10,000 times +- 10,000 回以下 +- +- +- up to 100,000 times +- 100,000 回以下 +- +- +- up to a million times +- 1,000,000 回以下 +- +- +- millions of times +- 数百万回 +- +- +- Edit Entry... +- エントリーを編集... +- +- +- Exclude from reports +- レãƒãƒ¼ãƒˆã‹ã‚‰é™¤å¤– +- +- +- +- ReportsWidgetStatistics +- +- Hover over lines with error icons for further information. +- エラーアイコンãŒã‚ã‚‹è¡Œã«ãƒžã‚¦ã‚¹ã‚ªãƒ¼ãƒãƒ¼ã™ã‚‹ã¨è©³ç´°ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚ +- +- +- Name +- åå‰ +- +- +- Value +- 値 +- +- +- Please wait, database statistics are being calculated... +- データベースã®çµ±è¨ˆã‚’算出ã—ã¦ã„ã‚‹ãŸã‚ã€ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„... +- +- +- Database name +- データベースå +- +- +- Description +- æ¦‚è¦ +- +- +- Location +- 場所 +- +- +- Last saved +- 最終更新日時 +- +- +- Unsaved changes +- 未ä¿å­˜ã®å¤‰æ›´ +- +- +- yes +- ã¯ã„ +- +- +- no +- ã„ã„㈠+- +- +- The database was modified, but the changes have not yet been saved to disk. +- データベースã¯å¤‰æ›´æ¸ˆã¿ã§ã™ãŒã€ã¾ã ãƒ‡ã‚£ã‚¹ã‚¯ã«ä¿å­˜ã—ã¦ã„ã¾ã›ã‚“。 +- +- +- Number of groups +- グループ数 +- +- +- Number of entries +- エントリー数 +- +- +- Number of expired entries +- 期é™åˆ‡ã‚Œã‚¨ãƒ³ãƒˆãƒªãƒ¼æ•° +- +- +- The database contains entries that have expired. +- データベースã«æœŸé™åˆ‡ã‚Œã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ +- +- +- Unique passwords +- 固有パスワード +- +- +- Non-unique passwords +- éžå›ºæœ‰ãƒ‘スワード +- +- +- More than 10% of passwords are reused. Use unique passwords when possible. +- 10% 以上ã®ãƒ‘スワードãŒä½¿ã„回ã•ã‚Œã¦ã„ã¾ã™ã€‚å¯èƒ½ãªé™ã‚Šã€ãれ専用ã®ãƒ‘スワードを使用ã—ã¦ãã ã•ã„。 +- +- +- Maximum password reuse +- パスワード使ã„回ã—ã®æœ€å¤§æ•° +- +- +- Some passwords are used more than three times. Use unique passwords when possible. +- 一部ã®ãƒ‘スワードãŒ3回以上使ã„回ã•ã‚Œã¦ã„ã¾ã™ã€‚å¯èƒ½ãªé™ã‚Šã€ãれ専用ã®ãƒ‘スワードを使用ã—ã¦ãã ã•ã„。 +- +- +- Number of short passwords +- 短ã„パスワードã®æ•° +- +- +- Recommended minimum password length is at least 8 characters. +- 推奨最å°ãƒ‘スワード長ã¯æœ€ä½Ž8文字ã§ã™ã€‚ +- +- +- Number of weak passwords +- 脆弱ãªãƒ‘スワードã®æ•° +- +- +- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. +- 「良ã„ã€ã¾ãŸã¯ã€Œã™ã°ã‚‰ã—ã„ã€è©•ä¾¡ã®é•·ãã¦ãƒ©ãƒ³ãƒ€ãƒ ãªãƒ‘スワードã®ä½¿ç”¨ã‚’推奨ã—ã¾ã™ã€‚ +- +- +- Entries excluded from reports +- レãƒãƒ¼ãƒˆã‹ã‚‰é™¤å¤–ã•ã‚ŒãŸã‚¨ãƒ³ãƒˆãƒªãƒ¼ +- +- +- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. +- レãƒãƒ¼ãƒˆã‹ã‚‰é™¤å¤–ã•ã‚ŒãŸã‚¨ãƒ³ãƒˆãƒªãƒ¼ã€‚パスワードã«å•é¡ŒãŒã‚ã‚‹ã“ã¨ãŒåˆ†ã‹ã£ã¦ã„ã‚‹ãŸã‚ã€å¿…ãšã—ã‚‚å•é¡Œã§ã¯ã‚ã‚Šã¾ã›ã‚“ãŒã€ãれらã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã®ã“ã¨ã‚’忘れãªã„よã†ã«ã—ã¦ãŠãå¿…è¦ã¯ã‚ã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 +- +- +- Average password length +- å¹³å‡ãƒ‘スワード長 +- +- +- %1 characters +- %1文字 +- +- +- Average password length is less than ten characters. Longer passwords provide more security. +- パスワード長ã®å¹³å‡å€¤ãŒ10文字以下ã§ã™ã€‚パスワードã¯é•·ã„ã»ã©ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãŒå‘上ã—ã¾ã™ã€‚ +- +- +- +- SSHAgent +- +- Agent connection failed. +- エージェントã®æŽ¥ç¶šã«å¤±æ•—ã—ã¾ã—ãŸã€‚ +- +- +- Agent protocol error. +- エージェントã®ãƒ—ロトコルエラーã§ã™ã€‚ +- +- +- No agent running, cannot add identity. +- エージェントãŒå®Ÿè¡Œã•ã‚Œã¦ã„ãªã„ãŸã‚ã€ID を追加ã§ãã¾ã›ã‚“。 +- +- +- No agent running, cannot remove identity. +- エージェントãŒå®Ÿè¡Œã•ã‚Œã¦ã„ãªã„ãŸã‚ã€ID を削除ã§ãã¾ã›ã‚“。 +- +- +- Agent refused this identity. Possible reasons include: +- エージェントãŒã“ã® ID ã‚’æ‹’å¦ã—ã¾ã—ãŸã€‚次ã®ç†ç”±ãŒè€ƒãˆã‚‰ã‚Œã¾ã™: +- +- +- The key has already been added. +- キーãŒæ—¢ã«è¿½åŠ ã•ã‚Œã¦ã„る。 +- +- +- Restricted lifetime is not supported by the agent (check options). +- エージェントãŒæœ‰åŠ¹æœŸé–“ã®åˆ¶é™ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ãªã„ (オプションを確èª)。 +- +- +- A confirmation request is not supported by the agent (check options). +- エージェントãŒç¢ºèªè¦æ±‚をサãƒãƒ¼ãƒˆã—ã¦ã„ãªã„ (オプションを確èª)。 +- +- +- Key identity ownership conflict. Refusing to add. +- éµã® ID ã®æ‰€æœ‰æ¨©ãŒç«¶åˆã—ã¦ã„ã‚‹ãŸã‚追加を拒å¦ã—ã¦ã„ã¾ã™ã€‚ +- +- +- No agent running, cannot list identities. +- エージェントãŒå®Ÿè¡Œã•ã‚Œã¦ã„ãªã„ãŸã‚ã€ID ã®ä¸€è¦§ã‚’å–å¾—ã§ãã¾ã›ã‚“。 +- +- +- +- SearchHelpWidget +- +- Search Help +- 検索ã®ãƒ˜ãƒ«ãƒ— +- +- +- Search terms are as follows: [modifiers][field:]["]term["] +- 検索語ã¯æ¬¡ã®é€šã‚Šã§ã™: [修飾å­][フィールド:]["]用語["] +- +- +- Every search term must match (ie, logical AND) +- 用語ã¯å…¨ã¦ä¸€è‡´ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ (ã¤ã¾ã‚Šè«–ç†ç©) +- +- +- Modifiers +- ä¿®é£¾å­ +- +- +- exclude term from results +- çµæžœã‹ã‚‰ç”¨èªžã‚’除外 +- +- +- match term exactly +- 用語ãŒå®Œå…¨ã«ä¸€è‡´ +- +- +- use regex in term +- 用語ã«æ­£è¦è¡¨ç¾ã‚’使用 +- +- +- Fields +- フィールド +- +- +- Term Wildcards +- 用語ã®ãƒ¯ã‚¤ãƒ«ãƒ‰ã‚«ãƒ¼ãƒ‰ +- +- +- match anything +- 何れã‹ãŒä¸€è‡´ +- +- +- match one +- 一文字一致 +- +- +- logical OR +- è«–ç†å’Œ +- +- +- Examples +- 例 +- +- +- +- SearchWidget +- +- Search +- 検索 +- +- +- Limit search to selected group +- é¸æŠžã—ãŸã‚°ãƒ«ãƒ¼ãƒ—ã«æ¤œç´¢å¯¾è±¡ã‚’åˆ¶é™ +- +- +- Search Help +- 検索ã®ãƒ˜ãƒ«ãƒ— +- +- +- Search (%1)... +- Search placeholder text, %1 is the keyboard shortcut +- 検索 (%1)... +- +- +- Case sensitive +- 大文字ã¨å°æ–‡å­—を区別 +- +- +- +- SettingsWidgetFdoSecrets +- +- Options +- オプション +- +- +- Enable KeepassXC Freedesktop.org Secret Service integration +- KeepassXC Freedesktop.org シークレットサービス統åˆã‚’有効ã«ã™ã‚‹ +- +- +- General +- 全般 +- +- +- Show notification when credentials are requested +- 資格情報ãŒè¦æ±‚ã•ã‚ŒãŸéš›ã«é€šçŸ¥ã‚’表示ã™ã‚‹ +- +- +- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> +- <html><head/><body><p>データベースã®ã‚´ãƒŸç®±ãŒæœ‰åŠ¹ã«ãªã£ã¦ã„ã‚‹å ´åˆã¯ã€ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’ゴミ箱ã«ç›´æŽ¥ç§»å‹•ã—ã€ãã†ã§ãªã„å ´åˆã¯ç¢ºèªãªã—ã§å‰Šé™¤ã—ã¾ã™ã€‚</p><p>エントリーãŒä»–ã‹ã‚‰å‚ç…§ã•ã‚Œã¦ã„ã‚‹å ´åˆã¯ãƒ—ロンプトを表示ã—ã¾ã™ã€‚</p></body></html> +- +- +- Exposed database groups: +- 公開ã™ã‚‹ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ã‚°ãƒ«ãƒ¼ãƒ—: +- +- +- Authorization +- èªè¨¼ +- +- +- These applications are currently connected: +- ã“れらã®ã‚¢ãƒ—リケーションãŒç¾åœ¨æŽ¥ç¶šæ¸ˆã¿ã§ã™: +- +- +- Don't confirm when entries are deleted by clients +- クライアントã«ã‚ˆã£ã¦ã‚¨ãƒ³ãƒˆãƒªãƒ¼ãŒå‰Šé™¤ã•ã‚Œã‚‹éš›ã«ç¢ºèªã—ãªã„ +- +- +- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. +- <b>エラー:</b> DBus ã¸ã®æŽ¥ç¶šã«å¤±æ•—ã—ã¾ã—ãŸã€‚DBus ã®è¨­å®šã‚’確èªã—ã¦ãã ã•ã„。 +- +- +- <b>Warning:</b> +- <b>警告:</b> +- +- +- Save current changes to activate the plugin and enable editing of this section. +- プラグインをアクティブã«ã™ã‚‹ãŸã‚ã«ç¾åœ¨ã®å¤‰æ›´ã‚’ä¿å­˜ã—ã€ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®ç·¨é›†ã‚’有効ã«ã—ã¦ãã ã•ã„。 +- +- +- +- SettingsWidgetKeeShare +- +- Active +- アクティブ +- +- +- Allow export +- エクスãƒãƒ¼ãƒˆã‚’許å¯ã™ã‚‹ +- +- +- Allow import +- インãƒãƒ¼ãƒˆã‚’許å¯ã™ã‚‹ +- +- +- Own certificate +- 自身ã®è¨¼æ˜Žæ›¸ +- +- +- Fingerprint: +- フィンガープリント: +- +- +- Certificate: +- 証明書: +- +- +- Signer +- ç½²å者 +- +- +- Key: +- キー: +- +- +- Generate +- ç”Ÿæˆ +- +- +- Import +- インãƒãƒ¼ãƒˆ +- +- +- Export +- エクスãƒãƒ¼ãƒˆ +- +- +- Imported certificates +- インãƒãƒ¼ãƒˆã—ãŸè¨¼æ˜Žæ›¸ +- +- +- Trust +- 信用 +- +- +- Ask +- ç¢ºèª +- +- +- Untrust +- ä¸ä¿¡ +- +- +- Remove +- 削除 +- +- +- Path +- パス +- +- +- Status +- ステータス +- +- +- Fingerprint +- フィンガープリント +- +- +- Certificate +- 証明書 +- +- +- Trusted +- 信用 +- +- +- Untrusted +- ä¸ä¿¡ +- +- +- Unknown +- ä¸æ˜Ž +- +- +- key.share +- Filetype for KeeShare key +- key.share +- +- +- KeeShare key file +- KeeShare キーファイル +- +- +- All files +- å…¨ã¦ã®ãƒ•ã‚¡ã‚¤ãƒ« +- +- +- Select path +- パスをé¸æŠž +- +- +- Exporting changed certificate +- 変更ã—ãŸè¨¼æ˜Žæ›¸ã‚’エクスãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ +- +- +- The exported certificate is not the same as the one in use. Do you want to export the current certificate? +- エクスãƒãƒ¼ãƒˆã•ã‚Œã‚‹è¨¼æ˜Žæ›¸ã¯ä½¿ç”¨ä¸­ã®è¨¼æ˜Žæ›¸ã¨åŒä¸€ã§ã¯ã‚ã‚Šã¾ã›ã‚“。ç¾åœ¨ã®è¨¼æ˜Žæ›¸ã‚’エクスãƒãƒ¼ãƒˆã—ã¾ã™ã‹ï¼Ÿ +- +- +- Signer: +- ç½²å者: +- +- +- Allow KeeShare imports +- KeeShare ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã‚’è¨±å¯ +- +- +- Allow KeeShare exports +- KeeShare ã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã‚’è¨±å¯ +- +- +- Only show warnings and errors +- 警告ã¨ã‚¨ãƒ©ãƒ¼ã®ã¿è¡¨ç¤ºã™ã‚‹ +- +- +- Key +- キー +- +- +- Signer name field +- ç½²å者åフィールド +- +- +- Generate new certificate +- æ–°ã—ã„è¨¼æ˜Žæ›¸ã‚’ç”Ÿæˆ +- +- +- Import existing certificate +- 既存ã®è¨¼æ˜Žæ›¸ã‚’インãƒãƒ¼ãƒˆ +- +- +- Export own certificate +- 自身ã®è¨¼æ˜Žæ›¸ã‚’エクスãƒãƒ¼ãƒˆ +- +- +- Known shares +- 既知ã®å…±æœ‰ +- +- +- Trust selected certificate +- é¸æŠžã—ãŸè¨¼æ˜Žæ›¸ã‚’信用 +- +- +- Ask whether to trust the selected certificate every time +- é¸æŠžã—ãŸè¨¼æ˜Žæ›¸ã‚’信用ã™ã‚‹ã‹ã©ã†ã‹æ¯Žå›žç¢ºèª +- +- +- Untrust selected certificate +- é¸æŠžã—ãŸè¨¼æ˜Žæ›¸ã‚’信用ã—ãªã„ +- +- +- Remove selected certificate +- é¸æŠžã—ãŸè¨¼æ˜Žæ›¸ã‚’削除 +- +- +- +- ShareExport +- +- Overwriting signed share container is not supported - export prevented +- ç½²å共有コンテナã®ä¸Šæ›¸ãã¯ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“ - エクスãƒãƒ¼ãƒˆã‚’阻害ã—ã¾ã—㟠+- +- +- Could not write export container (%1) +- コンテナを書ãè¾¼ã‚ã¾ã›ã‚“ã§ã—㟠(%1) +- +- +- Could not embed signature: Could not open file to write (%1) +- ç½²åを埋ã‚è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ: ファイルを書ãè¾¼ã¿ç”¨ã«é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“ (%1) +- +- +- Could not embed signature: Could not write file (%1) +- ç½²åを埋ã‚è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ: ファイルã«æ›¸ã込むã“ã¨ãŒã§ãã¾ã›ã‚“ (%1) +- +- +- Could not embed database: Could not open file to write (%1) +- データベースを埋ã‚è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ: ファイルを書ãè¾¼ã¿ç”¨ã«é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“ (%1) +- +- +- Could not embed database: Could not write file (%1) +- データベースを埋ã‚è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ: ファイルã«æ›¸ã込むã“ã¨ãŒã§ãã¾ã›ã‚“ (%1) +- +- +- Overwriting unsigned share container is not supported - export prevented +- 未署å共有コンテナã®ä¸Šæ›¸ãã¯ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“ - エクスãƒãƒ¼ãƒˆã‚’阻害ã—ã¾ã—㟠+- +- +- Could not write export container +- コンテナを書ãè¾¼ã‚ã¾ã›ã‚“ã§ã—㟠+- +- +- Unexpected export error occurred +- 予期ã—ãªã„エクスãƒãƒ¼ãƒˆã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—㟠+- +- +- +- ShareImport +- +- Import from container without signature +- ç½²åãªã—コンテナã‹ã‚‰ã‚¤ãƒ³ãƒãƒ¼ãƒˆ +- +- +- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? +- 共有コンテナã¯ç½²åã•ã‚Œã¦ã„ãªã„ãŸã‚ã€ã‚½ãƒ¼ã‚¹ã‚’確èªã§ãã¾ã›ã‚“。本当㫠%1 ã‹ã‚‰ã‚¤ãƒ³ãƒãƒ¼ãƒˆã—ã¾ã™ã‹ï¼Ÿ +- +- +- Import from container with certificate +- 証明書付ãコンテナã‹ã‚‰ã‚¤ãƒ³ãƒãƒ¼ãƒˆ +- +- +- Do you want to trust %1 with the fingerprint of %2 from %3? +- %3 ã® %1 (フィンガープリント %2) を信用ã—ã¾ã™ã‹ï¼Ÿ{1 ?} {2 ?} +- +- +- Not this time +- 今回ã¯ã—ãªã„ +- +- +- Never +- 常ã«ã—ãªã„ +- +- +- Always +- 常ã«ã™ã‚‹ +- +- +- Just this time +- 今回ã¯ã™ã‚‹ +- +- +- Signed share container are not supported - import prevented +- ç½²å共有コンテナã¯ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“ - インãƒãƒ¼ãƒˆã‚’阻害ã—ã¾ã—㟠+- +- +- File is not readable +- ファイルãŒèª­ã¿å–ã‚Šå¯èƒ½ã§ã¯ã‚ã‚Šã¾ã›ã‚“ +- +- +- Invalid sharing container +- 共有コンテナãŒä¸æ­£ã§ã™ +- +- +- Untrusted import prevented +- ä¸ä¿¡ãªã‚¤ãƒ³ãƒãƒ¼ãƒˆã‚’阻害ã—ã¾ã—㟠+- +- +- Successful signed import +- ç½²å付ãã®ã‚‚ã®ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã«æˆåŠŸã—ã¾ã—㟠+- +- +- Unsigned share container are not supported - import prevented +- 未署å共有コンテナã¯ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“ - インãƒãƒ¼ãƒˆã‚’阻害ã—ã¾ã—㟠+- +- +- Successful unsigned import +- 未署åã®ã‚‚ã®ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã«æˆåŠŸã—ã¾ã—㟠+- +- +- File does not exist +- ファイルãŒå­˜åœ¨ã—ã¾ã›ã‚“ +- +- +- Unknown share container type +- ä¸æ˜Žãªå…±æœ‰ã‚³ãƒ³ãƒ†ãƒŠå½¢å¼ã§ã™ +- +- +- +- ShareObserver +- +- Import from %1 failed (%2) +- %1 ã‹ã‚‰ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã«å¤±æ•—ã—ã¾ã—㟠(%2) +- +- +- Import from %1 successful (%2) +- %1 ã‹ã‚‰ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã«æˆåŠŸã—ã¾ã—㟠(%2) +- +- +- Imported from %1 +- %1 ã‹ã‚‰ã‚¤ãƒ³ãƒãƒ¼ãƒˆã—ã¾ã—㟠+- +- +- Export to %1 failed (%2) +- %1 ã¸ã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã«å¤±æ•—ã—ã¾ã—㟠(%2) +- +- +- Export to %1 successful (%2) +- %1 ã¸ã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã«æˆåŠŸã—ã¾ã—㟠(%2) +- +- +- Export to %1 +- %1 ã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ +- +- +- Multiple import source path to %1 in %2 +- %2 ã® %1 ã¸ã®è¤‡æ•°ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã‚½ãƒ¼ã‚¹ãƒ‘ス +- +- +- Conflicting export target path %1 in %2 +- %2 ã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒ‘ス %1 ãŒç«¶åˆã—ã¦ã„ã¾ã™ +- +- +- +- TotpDialog +- +- Timed Password +- 時é™ãƒ‘スワード +- +- +- 000000 +- 000000 +- +- +- Copy +- コピー +- +- +- Expires in <b>%n</b> second(s) +- 期é™åˆ‡ã‚Œã¾ã§ <b>%n</b> 秒 +- +- +- +- TotpExportSettingsDialog +- +- Copy +- コピー +- +- +- NOTE: These TOTP settings are custom and may not work with other authenticators. +- TOTP QR code dialog warning +- 備考: ã“れら㮠TOTP 設定ã¯ä»–ã® Authenticator ã§ã¯å‹•ä½œã—ãªã„å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚ +- +- +- There was an error creating the QR code. +- QR コードã®ä½œæˆä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ +- +- +- Closing in %1 seconds. +- %1 秒後ã«é–‰ã˜ã¾ã™ã€‚ +- +- +- +- TotpSetupDialog +- +- Setup TOTP +- TOTP ã®è¨­å®š +- +- +- Default RFC 6238 token settings +- 既定㮠RFC 6238 トークン設定 +- +- +- Steam token settings +- Steam トークン設定 +- +- +- Use custom settings +- カスタム設定を使用ã™ã‚‹ +- +- +- Custom Settings +- カスタム設定 +- +- +- Time step: +- タイムステップ: +- +- +- sec +- Seconds +- 秒 +- +- +- Code size: +- コードサイズ: +- +- +- Secret Key: +- 秘密éµ: +- +- +- Secret key must be in Base32 format +- 秘密éµã¯ Base32 å½¢å¼ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ +- +- +- Secret key field +- 秘密éµãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ +- +- +- Algorithm: +- アルゴリズム: +- +- +- Time step field +- タイムステップフィールド +- +- +- digits +- æ¡ +- +- +- Invalid TOTP Secret +- ä¸æ­£ãª TOTP +- +- +- You have entered an invalid secret key. The key must be in Base32 format. +-Example: JBSWY3DPEHPK3PXP +- 入力ã—ãŸç§˜å¯†éµã¯ä¸æ­£ã§ã™ã€‚éµã¯ Base32 å½¢å¼ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ +-例: JBSWY3DPEHPK3PXP +- +- +- Confirm Remove TOTP Settings +- TOTP 設定ã®å‰Šé™¤ç¢ºèª +- +- +- Are you sure you want to delete TOTP settings for this entry? +- ã“ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã® TOTP 設定を削除ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ +- +- +- +- URLEdit +- +- Invalid URL +- 無効㪠URL +- +- +- +- UpdateCheckDialog +- +- Checking for updates +- 更新を確èªä¸­ +- +- +- Checking for updates... +- 更新を確èªä¸­... +- +- +- Close +- é–‰ã˜ã‚‹ +- +- +- Update Error! +- æ›´æ–°ã‚¨ãƒ©ãƒ¼ï¼ +- +- +- An error occurred in retrieving update information. +- 更新情報ã®ç¢ºèªä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ +- +- +- Please try again later. +- 後ã§å†è©¦è¡Œã—ã¦ãã ã•ã„。 +- +- +- Software Update +- ソフトウェアã®æ›´æ–° +- +- +- A new version of KeePassXC is available! +- KeePassXC ã®æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒåˆ©ç”¨å¯èƒ½ã§ã™ã€‚ +- +- +- KeePassXC %1 is now available — you have %2. +- KeePassXC %1 ãŒåˆ©ç”¨å¯èƒ½ã§ã™ (ç¾åœ¨ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ %2)。 +- +- +- Download it at keepassxc.org +- keepassxc.org ã‹ã‚‰ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã—ã¦ãã ã•ã„ +- +- +- You're up-to-date! +- 最新ã§ã™ï¼ +- +- +- KeePassXC %1 is currently the newest version available +- KeePassXC %1 ã¯ç¾åœ¨åˆ©ç”¨å¯èƒ½ãªæœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã™ +- +- +- +- WelcomeWidget +- +- Start storing your passwords securely in a KeePassXC database +- KeePassXC データベースã«å®‰å…¨ã«ãƒ‘スワードをä¿ç®¡ã™ã‚‹ +- +- +- Create new database +- æ–°ã—ã„データベースを作æˆã™ã‚‹ +- +- +- Open existing database +- 既存ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’é–‹ã +- +- +- Import from KeePass 1 +- KeePass 1 ã‹ã‚‰ã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹ +- +- +- Import from CSV +- CSV ã‹ã‚‰ã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹ +- +- +- Recent databases +- 最近使用ã—ãŸãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ +- +- +- Welcome to KeePassXC %1 +- KeePassXC %1 ã¸ã‚ˆã†ã“ã +- +- +- Import from 1Password +- 1Password ã‹ã‚‰ã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹ +- +- +- Open a recent database +- 最近使用ã—ãŸãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’é–‹ã +- +- +- +- YubiKey +- +- %1 [%2] Configured Slot - %3 +- %1 [%2] 設定済ã¿ã‚¹ãƒ­ãƒƒãƒˆ - %3 +- +- +- %1 [%2] Challenge Response - Slot %3 - %4 +- %1 [%2] ãƒãƒ£ãƒ¬ãƒ³ã‚¸ãƒ¬ã‚¹ãƒãƒ³ã‚¹ - スロット %3 - %4 +- +- +- Press +- Press +- +- +- Passive +- Passive +- +- +- %1 Invalid slot specified - %2 +- ä¸æ­£ãªã‚¹ãƒ­ãƒƒãƒˆãŒæŒ‡å®šã•ã‚Œã¾ã—ãŸ: %1 - %2 +- +- +- The YubiKey interface has not been initialized. +- YubiKey ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒåˆæœŸåŒ–ã•ã‚Œã¦ã„ã¾ã›ã‚“。 +- +- +- Hardware key is currently in use. +- ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚­ãƒ¼ã¯ç¾åœ¨ä½¿ç”¨ä¸­ã§ã™ã€‚ +- +- +- Could not find hardware key with serial number %1. Please plug it in to continue. +- シリアルナンãƒãƒ¼ %1 ã®ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚­ãƒ¼ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚続行ã™ã‚‹ã«ã¯ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚­ãƒ¼ã‚’接続ã—ã¦ãã ã•ã„。 +- +- +- Hardware key timed out waiting for user interaction. +- ユーザーã¨ã®å¯¾è©±ã®å¾…機中ã«ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚­ãƒ¼ãŒã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã—ã¾ã—ãŸã€‚ +- +- +- A USB error ocurred when accessing the hardware key: %1 +- ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚­ãƒ¼ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹æ™‚ã« USB ã®ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ: %1 +- +- +- Failed to complete a challenge-response, the specific error was: %1 +- ãƒãƒ£ãƒ¬ãƒ³ã‚¸ãƒ¬ã‚¹ãƒãƒ³ã‚¹ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ: %1 +- +- +- +- YubiKeyEditWidget +- +- Refresh +- å†èª­ã¿è¾¼ã¿ +- +- +- YubiKey Challenge-Response +- YubiKey ã®ãƒãƒ£ãƒ¬ãƒ³ã‚¸ãƒ¬ã‚¹ãƒãƒ³ã‚¹ +- +- +- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- <p>セキュリティ対策ã¨ã—㦠<a href="https://www.yubico.com/">YubiKey</a> を使用ã§ãã¾ã™ã€‚</p><p>YubiKey ã®ã‚¹ãƒ­ãƒƒãƒˆã®1ã¤ã‚’ <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 ãƒãƒ£ãƒ¬ãƒ³ã‚¸ãƒ¬ã‚¹ãƒãƒ³ã‚¹</a> ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚</p> +- +- +- Refresh hardware tokens +- ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ãƒˆãƒ¼ã‚¯ãƒ³ã‚’æ›´æ–° +- +- +- Hardware key slot selection +- ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚­ãƒ¼ã‚¹ãƒ­ãƒƒãƒˆã®é¸æŠž +- +- +- Could not find any hardware keys! +- ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚­ãƒ¼ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ +- +- +- Selected hardware key slot does not support challenge-response! +- é¸æŠžã—ãŸãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚­ãƒ¼ã®ã‚¹ãƒ­ãƒƒãƒˆã¯ãƒãƒ£ãƒ¬ãƒ³ã‚¸ãƒ¬ã‚¹ãƒãƒ³ã‚¹ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。 +- +- +- Detecting hardware keys… +- ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚­ãƒ¼ã‚’検出中… +- +- +- No hardware keys detected +- 検出ã—ãŸãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚­ãƒ¼ã¯ã‚ã‚Šã¾ã›ã‚“ +- +- +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_ko.ts keepassxc-2.6.4-patched/share/translations/keepassx_ko.ts +--- keepassxc-2.6.4-orig/share/translations/keepassx_ko.ts 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/translations/keepassx_ko.ts 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7890 +0,0 @@ +- +- +- AboutDialog +- +- About KeePassXC +- KeePassXC ì •ë³´ +- +- +- About +- ì •ë³´ +- +- +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> 사ì´íŠ¸ì— 버그를 ë³´ê³ í•´ 주십시오 +- +- +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- KeePassXC는 GNU ì¼ë°˜ 공중 ë¼ì´ì„ ìŠ¤(GPL) 버전 2 ë° (ì„ íƒì ìœ¼ë¡œ) 버전 3으로 ë°°í¬ë©ë‹ˆë‹¤. +- +- +- Contributors +- ê¸°ì—¬ìž +- +- +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">GitHubì—ì„œ ê¸°ì—¬ìž ë³´ê¸°</a> +- +- +- Debug Info +- 디버그 ì •ë³´ +- +- +- Include the following information whenever you report a bug: +- 버그를 ë³´ê³ í•  ë•Œ ë‹¤ìŒ ì •ë³´ë¥¼ í¬í•¨í•˜ì‹­ì‹œì˜¤: +- +- +- Copy to clipboard +- í´ë¦½ë³´ë“œì— 복사 +- +- +- Project Maintainers: +- 프로ì íŠ¸ 관리ìž: +- +- +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- KeePassXC íŒ€ì€ ì› í”„ë¡œì íŠ¸ì¸ KeePassXì˜ ê°œë°œìž debfxì—게 특별한 ê°ì‚¬ë¥¼ 전합니다. +- +- +- +- AgentSettingsWidget +- +- Use OpenSSH for Windows instead of Pageant +- Pageant 대신 OpenSSH for Windows 사용 +- +- +- Enable SSH Agent integration +- SSH ì—ì´ì „트 통합 활성화 +- +- +- SSH_AUTH_SOCK value +- SSH_AUTH_SOCK ê°’ +- +- +- SSH_AUTH_SOCK override +- SSH_AUTH_SOCK ìž¬ì •ì˜ +- +- +- (empty) +- (비어 있ìŒ) +- +- +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- SSH ì—ì´ì „트 ì†Œì¼“ì„ ì‚¬ìš©í•  수 없습니다. SSH_AUTH_SOCK 환경 변수가 설정ë˜ì–´ 있는지 확ì¸í•˜ì‹œê³ , 없다면 재정ì˜í•  수 있습니다. +- +- +- SSH Agent connection is working! +- SSH ì—ì´ì „íŠ¸ì— ì—°ê²°í•  수 있습니다! +- +- +- +- ApplicationSettingsWidget +- +- Application Settings +- 프로그램 설정 +- +- +- General +- ì¼ë°˜ +- +- +- Security +- 보안 +- +- +- Access error for config file %1 +- 설정 íŒŒì¼ %1ì— ì ‘ê·¼í•  수 ì—†ìŒ +- +- +- Icon only +- ì•„ì´ì½˜ë§Œ +- +- +- Text only +- í…스트만 +- +- +- Text beside icon +- ì•„ì´ì½˜ ì˜†ì— í…스트 +- +- +- Text under icon +- ì•„ì´ì½˜ ë°‘ì— í…스트 +- +- +- Follow style +- ìŠ¤íƒ€ì¼ ë”°ë¥´ê¸° +- +- +- Reset Settings? +- ì„¤ì •ì„ ì´ˆê¸°í™”í•˜ì‹œê² ìŠµë‹ˆê¹Œ? +- +- +- Are you sure you want to reset all general and security settings to default? +- 모든 ì¼ë°˜ 설정과 보안 ì„¤ì •ì„ ì´ˆê¸°í™”í•˜ì‹œê² ìŠµë‹ˆê¹Œ? +- +- +- Monochrome (light) +- 단색(ë°ìŒ) +- +- +- Monochrome (dark) +- 단색(ì–´ë‘움) +- +- +- Colorful +- 컬러풀 +- +- +- You must restart the application to set the new language. Would you like to restart now? +- +- +- +- +- ApplicationSettingsWidgetGeneral +- +- Basic Settings +- 기본 설정 +- +- +- Startup +- 시작 +- +- +- Start only a single instance of KeePassXC +- KeePassXC ë‹¨ì¼ ì¸ìŠ¤í„´ìŠ¤ë§Œ 사용 +- +- +- Minimize window at application startup +- 프로그램 시작 ì‹œ ì°½ 최소화 +- +- +- File Management +- íŒŒì¼ ê´€ë¦¬ +- +- +- Backup database file before saving +- 저장하기 ì „ì— ë°ì´í„°ë² ì´ìŠ¤ íŒŒì¼ ë°±ì—… +- +- +- Automatically save after every change +- í•­ëª©ì„ ë³€ê²½í•  ë•Œ ìžë™ 저장 +- +- +- Automatically reload the database when modified externally +- 외부ì—ì„œ ë°ì´í„°ë² ì´ìŠ¤ë¥¼ ìˆ˜ì •í–ˆì„ ë•Œ ìžë™ìœ¼ë¡œ 새로 고침 +- +- +- Entry Management +- 항목 관리 +- +- +- Use group icon on entry creation +- í•­ëª©ì„ ë§Œë“¤ ë•Œ 그룹 ì•„ì´ì½˜ 사용 +- +- +- Minimize instead of app exit +- í”„ë¡œê·¸ëž¨ì„ ë내지 ì•Šê³  최소화 +- +- +- Show a system tray icon +- 시스템 íŠ¸ë ˆì´ ì•„ì´ì½˜ 표시 +- +- +- Hide window to system tray when minimized +- 시스템 트레ì´ë¡œ 최소화 +- +- +- Auto-Type +- ìžë™ ìž…ë ¥ +- +- +- Use entry title to match windows for global Auto-Type +- ì „ì—­ ìžë™ ìž…ë ¥ ì‹œ ì°½ ì œëª©ì„ í•­ëª© 제목ì—ì„œ 검색 +- +- +- Use entry URL to match windows for global Auto-Type +- ì „ì—­ ìžë™ ìž…ë ¥ ì‹œ ì°½ ì œëª©ì„ í•­ëª© URLì—ì„œ 검색 +- +- +- Always ask before performing Auto-Type +- ìžë™ ìž…ë ¥ ì‹œ í•­ìƒ ë¬»ê¸° +- +- +- ms +- Milliseconds +- ms +- +- +- Movable toolbar +- ì´ë™ 가능한 ë„구 ëª¨ìŒ +- +- +- Remember previously used databases +- 과거 ë°ì´í„°ë² ì´ìŠ¤ 기억 +- +- +- Load previously open databases on startup +- 시작할 ë•Œ ì´ì „ì— ì‚¬ìš©í•œ ë°ì´í„°ë² ì´ìŠ¤ 열기 +- +- +- Remember database key files and security dongles +- ë°ì´í„°ë² ì´ìŠ¤ 키 파ì¼ê³¼ 보안 ë™ê¸€ 기억 +- +- +- Check for updates at application startup once per week +- í”„ë¡œê·¸ëž¨ì„ ì‹œìž‘í•  ë•Œ 1주ì¼ì— 1번 ì—…ë°ì´íŠ¸ í™•ì¸ +- +- +- Include beta releases when checking for updates +- ì—…ë°ì´íŠ¸ë¥¼ 확ì¸í•  ë•Œ 베타 릴리스 í¬í•¨ +- +- +- Language: +- 언어: +- +- +- (restart program to activate) +- (다시 시작 후 ì ìš©ë¨) +- +- +- Minimize window after unlocking database +- ë°ì´í„°ë² ì´ìŠ¤ 잠금 í•´ì œ 후 ì°½ 최소화 +- +- +- Minimize when opening a URL +- URLì„ ì—´ ë•Œ ì°½ 최소화 +- +- +- Hide window when copying to clipboard +- í´ë¦½ë³´ë“œì— 복사할 ë•Œ ì°½ 숨기기 +- +- +- Minimize +- 최소화 +- +- +- Drop to background +- 백그ë¼ìš´ë“œë¡œ 전환 +- +- +- Favicon download timeout: +- 파비콘 다운로드 시간 제한: +- +- +- Website icon download timeout in seconds +- 웹 사ì´íŠ¸ ì•„ì´ì½˜ 다운로드 시간 제한(ì´ˆ 단위) +- +- +- sec +- Seconds +- ì´ˆ +- +- +- Toolbar button style +- ë„구 ëª¨ìŒ ë‹¨ì¶” ìŠ¤íƒ€ì¼ +- +- +- Language selection +- 언어 ì„ íƒ +- +- +- Global auto-type shortcut +- ì „ì—­ ìžë™ ìž…ë ¥ 단축키 +- +- +- Auto-type character typing delay milliseconds +- 글ìžë‹¹ ìžë™ ìž…ë ¥ 지연 시간(밀리초 단위) +- +- +- Auto-type start delay milliseconds +- ìžë™ ìž…ë ¥ 시작 지연 시간(밀리초 단위) +- +- +- Automatically launch KeePassXC at system startup +- 시스템 시작 ì‹œ KeePassXC ìžë™ 시작 +- +- +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- ë°ì´í„°ë² ì´ìŠ¤ íŒŒì¼ ì•ˆì „ 저장(Dropbox 등ì—ì„œ 문제 ë°œìƒ ì‹œ 비활성화) +- +- +- User Interface +- ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ +- +- +- Toolbar button style: +- ë„구 ëª¨ìŒ ë‹¨ì¶” 스타ì¼: +- +- +- Use monospaced font for notes +- ë©”ëª¨ì— ê³ ì •í­ ê¸€ê¼´ 사용 +- +- +- Tray icon type: +- íŠ¸ë ˆì´ ì•„ì´ì½˜ 형ì‹: +- +- +- Reset settings to default… +- 기본값으로 설정 ë³µì›... +- +- +- Auto-Type typing delay: +- ìžë™ ìž…ë ¥ 지연 시간: +- +- +- Global Auto-Type shortcut: +- ì „ì—­ ìžë™ ìž…ë ¥ 단축키: +- +- +- Auto-Type start delay: +- ìžë™ ìž…ë ¥ 시작 지연 시간: +- +- +- Automatically save when locking database +- +- +- +- Automatically save non-data changes when locking database +- +- +- +- Tray icon type +- +- +- +- +- ApplicationSettingsWidgetSecurity +- +- Timeouts +- 시간 제한 +- +- +- Clear clipboard after +- ë‹¤ìŒ ì‹œê°„ ì´í›„ í´ë¦½ë³´ë“œ 비우기 +- +- +- sec +- Seconds +- ì´ˆ +- +- +- Lock databases after inactivity of +- ë‹¤ìŒ ì‹œê°„ ë™ì•ˆ 활ë™ì´ ì—†ì„ ë•Œ ë°ì´í„°ë² ì´ìŠ¤ 잠금 +- +- +- min +- 분 +- +- +- Forget TouchID after inactivity of +- ë‹¤ìŒ ì‹œê°„ ë™ì•ˆ 활ë™ì´ ì—†ì„ ë•Œ TouchID 잊기 +- +- +- Convenience +- 편ì˜ì„± +- +- +- Lock databases when session is locked or lid is closed +- ì„¸ì…˜ì´ ìž ê²¼ì„ ë•Œë‚˜ ë®ê°œë¥¼ ë‹«ì•˜ì„ ë•Œ ë°ì´í„°ë² ì´ìŠ¤ 잠금 +- +- +- Forget TouchID when session is locked or lid is closed +- ì„¸ì…˜ì„ ìž ê·¸ê±°ë‚˜ ë®ê°œë¥¼ ë‹«ì•˜ì„ ë•Œ TouchID 잊기 +- +- +- Lock databases after minimizing the window +- ì°½ì„ ìµœì†Œí™”í•  ë•Œ ë°ì´í„°ë² ì´ìŠ¤ 잠금 +- +- +- Re-lock previously locked database after performing Auto-Type +- ìžë™ ìž…ë ¥ ì´í›„ ì´ì „ì— ìž ê¸´ ë°ì´í„°ë² ì´ìŠ¤ 다시 잠그기 +- +- +- Hide passwords in the entry preview panel +- 항목 미리 보기 패ë„ì—ì„œ 암호 숨기기 +- +- +- Hide entry notes by default +- 기본값으로 암호 숨기기 +- +- +- Privacy +- ê°œì¸ ì •ë³´ +- +- +- Use DuckDuckGo service to download website icons +- 웹 사ì´íŠ¸ ì•„ì´ì½˜ì„ 다운로드할 ë•Œ DuckDuckGo 서비스 사용 +- +- +- Clipboard clear seconds +- í´ë¦½ë³´ë“œë¥¼ 지울 시간 +- +- +- Touch ID inactivity reset +- 사용하지 ì•Šì„ ë•Œ Touch ID 초기화 +- +- +- Database lock timeout seconds +- ë°ì´í„°ë² ì´ìŠ¤ 잠금 시간 제한(ì´ˆ 단위) +- +- +- min +- Minutes +- 분 +- +- +- Clear search query after +- ë‹¤ìŒ ì‹œê°„ ì´í›„ 검색어 비우기 +- +- +- Require password repeat when it is visible +- 암호가 ë³´ì¼ ë•Œ 반복 í•„ìš” +- +- +- Hide passwords when editing them +- 암호를 편집할 ë•Œ 숨기기 +- +- +- Use placeholder for empty password fields +- 빈 암호 í•„ë“œì— ìžë¦¬ ë¹„ì›€ìž ì‚¬ìš© +- +- +- +- AutoType +- +- Couldn't find an entry that matches the window title: +- ì°½ 제목과 ì¼ì¹˜í•˜ëŠ” í•­ëª©ì„ ì°¾ì„ ìˆ˜ 없습니다: +- +- +- Auto-Type - KeePassXC +- ìžë™ ìž…ë ¥ - KeePassXC +- +- +- Auto-Type +- ìžë™ ìž…ë ¥ +- +- +- The Syntax of your Auto-Type statement is incorrect! +- ìžë™ ìž…ë ¥ 구문 ë¬¸ë²•ì´ ìž˜ëª»ë˜ì—ˆìŠµë‹ˆë‹¤! +- +- +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- ìžë™ ìž…ë ¥ ëª…ë ¹ì— ê¸´ 지연 ì‹œê°„ì´ í¬í•¨ë˜ì–´ 있습니다. ê³„ì† ì§„í–‰í•˜ì‹œê² ìŠµë‹ˆê¹Œ? +- +- +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- ìžë™ ìž…ë ¥ ëª…ë ¹ì— ëŠë¦° 키 ìž…ë ¥ì´ í¬í•¨ë˜ì–´ 있습니다. ê³„ì† ì§„í–‰í•˜ì‹œê² ìŠµë‹ˆê¹Œ? +- +- +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- ìžë™ ìž…ë ¥ ëª…ë ¹ì— ë§Žì´ ë°˜ë³µë˜ëŠ” ì¸ìžê°€ í¬í•¨ë˜ì–´ 있습니다. ê³„ì† ì§„í–‰í•˜ì‹œê² ìŠµë‹ˆê¹Œ? +- +- +- Permission Required +- ê¶Œí•œì´ í•„ìš”í•¨ +- +- +- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. +- 항목별 ìžë™ ìž…ë ¥ì„ ì‚¬ìš©í•˜ë ¤ë©´ KeePassXCì— ì ‘ê·¼ì„± ê¶Œí•œì„ í—ˆìš©í•´ì•¼ 합니다. ê¶Œí•œì„ ì´ë¯¸ 허용했다면 KeePassXC를 다시 시작해 보십시오. +- +- +- +- AutoTypeAssociationsModel +- +- Window +- ì°½ +- +- +- Sequence +- 순서 +- +- +- Default sequence +- 기본 순서 +- +- +- +- AutoTypeMatchModel +- +- Group +- 그룹 +- +- +- Title +- 제목 +- +- +- Username +- ì‚¬ìš©ìž ì´ë¦„ +- +- +- Sequence +- 순서 +- +- +- +- AutoTypeMatchView +- +- Copy &username +- ì‚¬ìš©ìž ì´ë¦„ 복사(&U) +- +- +- Copy &password +- 암호 복사(&P) +- +- +- +- AutoTypePlatformMac +- +- Permission Required +- ê¶Œí•œì´ í•„ìš”í•©ë‹ˆë‹¤. +- +- +- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. +- 항목별 ìžë™ ìž…ë ¥ì„ ì‚¬ìš©í•˜ë ¤ë©´ KeePassXCì— ì ‘ê·¼ì„± ë° í™”ë©´ 녹화 ê¶Œí•œì„ í—ˆìš©í•´ì•¼ 합니다. 화면 녹화 ê¶Œí•œì€ ì°½ 제목과 í•­ëª©ì„ ì°¾ê¸° 위해서 필요합니다. ê¶Œí•œì„ ì´ë¯¸ 허용했다면 KeePassXC를 다시 시작해 보십시오. +- +- +- +- AutoTypeSelectDialog +- +- Auto-Type - KeePassXC +- ìžë™ ìž…ë ¥ - KeePassXC +- +- +- Select entry to Auto-Type: +- ìžë™ìœ¼ë¡œ 입력할 항목 ì„ íƒ: +- +- +- Search... +- 찾기... +- +- +- +- BrowserAccessControlDialog +- +- KeePassXC - Browser Access Request +- KeePassXC - 브ë¼ìš°ì € ì ‘ê·¼ í™•ì¸ +- +- +- %1 is requesting access to the following entries: +- %1ì—ì„œ ë‹¤ìŒ í•­ëª©ì— ì ‘ê·¼í•˜ë ¤ê³  합니다: +- +- +- Remember access to checked entries +- ì„ íƒí•œ 항목 ì ‘ê·¼ 여부 기억 +- +- +- Remember +- 기억 +- +- +- Allow access to entries +- 항목 ì ‘ê·¼ 허용 +- +- +- Allow Selected +- ì„ íƒ í—ˆìš© +- +- +- Deny All +- ëª¨ë‘ ê±°ë¶€ +- +- +- Disable for this site +- ì´ ì‚¬ì´íŠ¸ì—서는 거부 +- +- +- +- BrowserEntrySaveDialog +- +- KeePassXC-Browser Save Entry +- KeePassXC-브ë¼ìš°ì € 항목 저장 +- +- +- Ok +- í™•ì¸ +- +- +- Cancel +- 취소 +- +- +- You have multiple databases open. +-Please select the correct database for saving credentials. +- 여러 ê°œì˜ ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 열었습니다. +-ì¸ì¦ 정보를 저장할 ë°ì´í„°ë² ì´ìŠ¤ë¥¼ ì„ íƒí•˜ì‹­ì‹œì˜¤. +- +- +- +- BrowserService +- +- KeePassXC: New key association request +- KeePassXC: 새 키 ì—°ê²° 요청 +- +- +- Save and allow access +- 저장하고 ì ‘ê·¼ 허용 +- +- +- KeePassXC: Overwrite existing key? +- KeePassXC: 기존 키를 ë®ì–´ì“°ì‹œê² ìŠµë‹ˆê¹Œ? +- +- +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- ì´ë¦„ì´ "%1"ì¸ ê³µìœ  암호화 키가 ì´ë¯¸ 있습니다. +-ë®ì–´ì“°ì‹œê² ìŠµë‹ˆê¹Œ? +- +- +- KeePassXC: Update Entry +- KeePassXC: 항목 ì—…ë°ì´íŠ¸ +- +- +- Do you want to update the information in %1 - %2? +- %1 - %2ì˜ ì •ë³´ë¥¼ ì—…ë°ì´íŠ¸í•˜ì‹œê² ìŠµë‹ˆê¹Œ? +- +- +- Abort +- 중지 +- +- +- Converting attributes to custom data… +- ì†ì„±ì„ ì‚¬ìš©ìž ì •ì˜ ë°ì´í„°ë¡œ 변환 중… +- +- +- KeePassXC: Converted KeePassHTTP attributes +- KeePassXC: KeePassHTTP ì†ì„± ë³€í™˜ë¨ +- +- +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- %1ê°œ í•­ëª©ì˜ ì†ì„±ì„ 변환했습니다. +-키 %2개를 ì‚¬ìš©ìž ì •ì˜ ë°ì´í„°ë¡œ ì´ë™í–ˆìŠµë‹ˆë‹¤. +- +- +- Successfully moved %n keys to custom data. +- 키 %n개를 ì‚¬ìš©ìž ì •ì˜ ë°ì´í„°ë¡œ ì´ë™í–ˆìŠµë‹ˆë‹¤. +- +- +- KeePassXC: No entry with KeePassHTTP attributes found! +- KeePassXC: KeePassHTTP ì†ì„±ì´ 있는 í•­ëª©ì„ ì°¾ì„ ìˆ˜ 없습니다! +- +- +- The active database does not contain an entry with KeePassHTTP attributes. +- 현재 í™œì„±í™”ëœ ë°ì´í„°ë² ì´ìŠ¤ì— KeePassHTTP ì†ì„±ì´ 있는 í•­ëª©ì´ ì—†ìŠµë‹ˆë‹¤. +- +- +- KeePassXC: Legacy browser integration settings detected +- KeePassXC: 레거시 브ë¼ìš°ì € 통합 설정 ê°ì§€ë¨ +- +- +- KeePassXC: Create a new group +- KeePassXC: 새 그룹 ìƒì„± +- +- +- A request for creating a new group "%1" has been received. +-Do you want to create this group? +- +- 새 그룹 "%1"ì„(를) ìƒì„±í•˜ëŠ” ìš”ì²­ì„ ë°›ì•˜ìŠµë‹ˆë‹¤. +-ì´ ê·¸ë£¹ì„ ìƒì„±í•˜ì‹œê² ìŠµë‹ˆê¹Œ? +- +- +- +- Your KeePassXC-Browser settings need to be moved into the database settings. +-This is necessary to maintain your current browser connections. +-Would you like to migrate your existing settings now? +- KeePassXC-브ë¼ìš°ì € ì„¤ì •ì„ ë°ì´í„°ë² ì´ìŠ¤ 설정으로 ì´ë™í•´ì•¼ 합니다. +-현재 브ë¼ìš°ì € ì—°ê²°ì„ ìœ ì§€í•˜ë ¤ë©´ ì´ ìž‘ì—…ì´ í•„ìš”í•©ë‹ˆë‹¤. +-존재하는 ì„¤ì •ì„ ì´ì „하시겠습니까? +- +- +- Don't show this warning again +- ë” ì´ìƒ ì´ ê²½ê³  표시하지 않기 +- +- +- You have received an association request for the following database: +-%1 +- +-Give the connection a unique name or ID, for example: +-chrome-laptop. +- ë‹¤ìŒ ë°ì´í„°ë² ì´ìŠ¤ ì—°ê²° ìš”ì²­ì„ ë°›ì•˜ìŠµë‹ˆë‹¤: +-%1 +- +-ë°ì´í„°ë² ì´ìŠ¤ ì—°ê²°ì„ ì‹ë³„í•  수 있는 ì´ë¦„ì´ë‚˜ ID를 입력하십시오. 예: +-chrome-laptop. +- +- +- +- BrowserSettingsWidget +- +- Dialog +- 대화 ìƒìž +- +- +- This is required for accessing your databases with KeePassXC-Browser +- KeePassXC-브ë¼ìš°ì €ì—ì„œ ë°ì´í„°ë² ì´ìŠ¤ì— 접근하려면 필요합니다 +- +- +- Enable browser integration +- 브ë¼ìš°ì € 통합 활성화 +- +- +- General +- ì¼ë°˜ +- +- +- Browsers installed as snaps are currently not supported. +- Snap으로 설치한 브ë¼ìš°ì €ëŠ” 지ì›í•˜ì§€ 않습니다. +- +- +- Enable integration for these browsers: +- ë‹¤ìŒ ë¸Œë¼ìš°ì €ì— 통합: +- +- +- Vivaldi +- Vivaldi +- +- +- &Edge +- Edge(&E) +- +- +- Firefox +- Firefox +- +- +- Tor Browser +- Tor 브ë¼ìš°ì € +- +- +- Brave +- Brave +- +- +- Google Chrome +- Google Chrome +- +- +- Chromium +- Chromium +- +- +- Show a notification when credentials are requested +- Credentials mean login data requested via browser extension +- ì¸ì¦ ì •ë³´ê°€ 필요할 ë•Œ 알림 표시 +- +- +- Request to unlock the database if it is locked +- ë°ì´í„°ë² ì´ìŠ¤ê°€ ìž ê²¼ì„ ë•Œ 잠금 í•´ì œ 요청 +- +- +- Only entries with the same scheme (http://, https://, ...) are returned. +- ê°™ì€ ìŠ¤í‚¤ë§ˆ(http://, https://, ftp://)를 사용하는 항목만 반환합니다. +- +- +- Match URL scheme (e.g., https://...) +- URL 스키마 ì¼ì¹˜(예: https://...) +- +- +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- ë„ë©”ì¸ì´ ì¼ì¹˜í•˜ëŠ” 모든 항목 대신 지정한 URLê³¼ ì¼ì¹˜í•˜ëŠ” 항목만 반환합니다. +- +- +- Return only best-matching credentials +- 가장 잘 ì¼ì¹˜í•˜ëŠ” ì¸ì¦ ì •ë³´ 항목만 반환 +- +- +- Returns expired credentials. String [expired] is added to the title. +- ë§Œë£Œëœ ì¸ì¦ ì •ë³´ë„ ë°˜í™˜í•©ë‹ˆë‹¤. ì œëª©ì— [만료ë¨] 문ìžì—´ì´ 추가ë©ë‹ˆë‹¤. +- +- +- Allow returning expired credentials +- ë§Œë£Œëœ ì¸ì¦ ì •ë³´ 반환 허용 +- +- +- All databases connected to the extension will return matching credentials. +- 확장 ê¸°ëŠ¥ì— ì—°ê²°ëœ ëª¨ë“  ë°ì´í„°ë² ì´ìŠ¤ì—ì„œ ì¼ì¹˜í•˜ëŠ” ì¸ì¦ 정보를 반환합니다. +- +- +- Search in all opened databases for matching credentials +- Credentials mean login data requested via browser extension +- 모든 열린 ë°ì´í„°ë² ì´ìŠ¤ì—ì„œ ì €ìž¥ëœ ì¸ì¦ ì •ë³´ 검색 +- +- +- Sort matching credentials by title +- Credentials mean login data requested via browser extension +- 제목 순으로 ì¼ì¹˜í•˜ëŠ” ì¸ì¦ ì •ë³´ ì •ë ¬ +- +- +- Sort matching credentials by username +- Credentials mean login data requested via browser extension +- ì‚¬ìš©ìž ì´ë¦„ 순으로 ì¼ì¹˜í•˜ëŠ” ì¸ì¦ ì •ë³´ ì •ë ¬ +- +- +- Advanced +- 고급 +- +- +- Never ask before accessing credentials +- Credentials mean login data requested via browser extension +- ì €ìž¥ëœ ì¸ì¦ ì •ë³´ì— ì ‘ê·¼í•˜ê¸° ì „ì— ë¬»ì§€ 않기 +- +- +- Never ask before updating credentials +- Credentials mean login data requested via browser extension +- ì €ìž¥ëœ ì¸ì¦ 정보를 ì—…ë°ì´íŠ¸í•˜ê¸° ì „ì— ë¬»ì§€ 않기 +- +- +- Do not ask permission for HTTP Basic Auth +- An extra HTTP Basic Auth setting +- HTTP Basic ì¸ì¦ 권한 묻지 않기 +- +- +- Automatically creating or updating string fields is not supported. +- 문ìžì—´ 필드를 ìžë™ìœ¼ë¡œ 만들거나 ì—…ë°ì´íŠ¸í•˜ëŠ” ê²ƒì€ ì§€ì›ë˜ì§€ 않습니다. +- +- +- Return advanced string fields which start with "KPH: " +- "KPH: "ë¡œ 시작하는 고급 문ìžì—´ í•„ë“œ 반환 +- +- +- Don't display the popup suggesting migration of legacy KeePassHTTP settings. +- 레거시 KeePassHTTP ì„¤ì •ì„ ì´ì „하는 대화 ìƒìžë¥¼ 표시하지 않습니다. +- +- +- Do not prompt for KeePassHTTP settings migration. +- KeePassHTTP 설정 ì´ì „ 묻지 않기 +- +- +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- 네ì´í‹°ë¸Œ 메시징 스í¬ë¦½íŠ¸ì—ì„œ 사용하는 KeePassXC ë° keepassxc-proxy 실행 íŒŒì¼ ê²½ë¡œë¥¼ 시작할 ë•Œ ìžë™ìœ¼ë¡œ ì—…ë°ì´íŠ¸í•©ë‹ˆë‹¤. +- +- +- Update native messaging manifest files at startup +- 시작할 ë•Œ 네ì´í‹°ë¸Œ 메시징 ì„ ì–¸ íŒŒì¼ ì—…ë°ì´íŠ¸ +- +- +- Use a custom proxy location if you installed a proxy manually. +- 프ë¡ì‹œë¥¼ ì§ì ‘ 설치했으면 ì‚¬ìš©ìž ì •ì˜ í”„ë¡ì‹œ 위치를 지정하십시오. +- +- +- Use a custom proxy location: +- Meant is the proxy for KeePassXC-Browser +- ì‚¬ìš©ìž ì •ì˜ í”„ë¡ì‹œ 위치 사용: +- +- +- Custom proxy location field +- ì‚¬ìš©ìž ì •ì˜ í”„ë¡ì‹œ 위치 í•„ë“œ +- +- +- Browser for custom proxy file +- ì‚¬ìš©ìž ì •ì˜ í”„ë¡ì‹œ íŒŒì¼ ì°¾ì•„ë³´ê¸° +- +- +- Browse... +- Button for opening file dialog +- 찾아보기... +- +- +- Use a custom browser configuration location: +- ì‚¬ìš©ìž ì •ì˜ ë¸Œë¼ìš°ì € 설정 위치 사용: +- +- +- Browser type: +- 브ë¼ìš°ì € 종류: +- +- +- Toolbar button style +- ë„구 ëª¨ìŒ ë‹¨ì¶” ìŠ¤íƒ€ì¼ +- +- +- Config Location: +- 설정 위치: +- +- +- Custom browser location field +- ì‚¬ìš©ìž ì •ì˜ ë¸Œë¼ìš°ì € 위치 í•„ë“œ +- +- +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- +- +- Browse for custom browser path +- ì‚¬ìš©ìž ì •ì˜ ë¸Œë¼ìš°ì € 경로 찾아보기 +- +- +- Custom extension ID: +- ì‚¬ìš©ìž ì •ì˜ í™•ìž¥ 기능 ID: +- +- +- Custom extension ID +- ì‚¬ìš©ìž ì •ì˜ í™•ìž¥ 기능 ID +- +- +- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 +- Snap 샌드박스로 ì¸í•˜ì—¬ 브ë¼ìš°ì € 확장 ê¸°ëŠ¥ì„ ì‚¬ìš©í•˜ë ¤ë©´ 스í¬ë¦½íŠ¸ë¥¼ 실행해야 합니다.<br />%1ì—ì„œ 스í¬ë¦½íŠ¸ë¥¼ 확ì¸í•  수 있습니다 +- +- +- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 +- 브ë¼ìš°ì € 통합 ê¸°ëŠ¥ì„ ì‚¬ìš©í•˜ë ¤ë©´ KeePassXC-브ë¼ìš°ì €ê°€ 필요합니다.<br />%1, %2, %3, %4용으로 다운로드할 수 있습니다. +- +- +- Please see special instructions for browser extension use below +- 브ë¼ìš°ì € 확장 ê¸°ëŠ¥ì„ ìœ„í•œ 추가 절차를 참조하십시오 +- +- +- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. +- <b>오류:</b> ì‚¬ìš©ìž ì •ì˜ í”„ë¡ì‹œ 위치를 ì°¾ì„ ìˆ˜ 없습니다!<br/>브ë¼ìš°ì € 통합 ê¸°ëŠ¥ì„ ì‚¬ìš©í•˜ë ¤ë©´ 프ë¡ì‹œ í”„ë¡œê·¸ëž¨ì´ í•„ìš”í•©ë‹ˆë‹¤. +- +- +- <b>Warning:</b> The following options can be dangerous! +- <b>경고:</b> ë‹¤ìŒ ì˜µì…˜ì€ ì‹ ì¤‘í•˜ê²Œ 사용하십시오! +- +- +- Executable Files +- 실행 íŒŒì¼ +- +- +- All Files +- 모든 íŒŒì¼ +- +- +- Select custom proxy location +- ì‚¬ìš©ìž ì •ì˜ í”„ë¡ì‹œ 위치 지정 +- +- +- Select native messaging host folder location +- 네ì´í‹°ë¸Œ 메시징 호스트 í´ë” 위치 ì„ íƒ +- +- +- +- CloneDialog +- +- Clone Options +- 복제 옵션 +- +- +- Append ' - Clone' to title +- ì œëª©ì— ' - 사본' 추가 +- +- +- Replace username and password with references +- ì‚¬ìš©ìž ì´ë¦„ê³¼ 암호를 참조로 대체 +- +- +- Copy history +- 과거 ê¸°ë¡ ë³µì‚¬ +- +- +- +- CsvImportWidget +- +- Import CSV fields +- CSV í•„ë“œ 가져오기 +- +- +- filename +- íŒŒì¼ ì´ë¦„ +- +- +- size, rows, columns +- í¬ê¸°, 줄, 칸 +- +- +- Encoding +- ì¸ì½”딩 +- +- +- Codec +- ì¸ì½”딩 +- +- +- Text is qualified by +- 문ìžì—´ êµ¬ë¶„ìž +- +- +- Fields are separated by +- í•„ë“œ êµ¬ë¶„ìž +- +- +- Comments start with +- ì£¼ì„ ì‹œìž‘ ê¸€ìž +- +- +- Consider '\' an escape character +- '\' 글ìžë¥¼ 탈출 문ìžë¡œ 간주 +- +- +- Preview +- 미리 보기 +- +- +- Imported from CSV file +- CSV 파ì¼ì—ì„œ 가져옴 +- +- +- Original data: +- ì›ë³¸ ë°ì´í„°: +- +- +- Error +- 오류 +- +- +- Error(s) detected in CSV file! +- CSV 파ì¼ì— 오류가 있습니다! +- +- +- [%n more message(s) skipped] +- [추가 메시지 %nê°œ 건너뜀] +- +- +- CSV import: writer has errors: +-%1 +- CSV 가져오기: ê¸°ë¡ ë„êµ¬ì— ì˜¤ë¥˜ê°€ 있습니다: +-%1 +- +- +- Text qualification +- 문ìžì—´ 구분 +- +- +- Field separation +- í•„ë“œ 구분 +- +- +- Number of header lines to discard +- 무시할 머리글 줄 수 +- +- +- CSV import preview +- CSV 가져오기 미리 보기 +- +- +- Column Association +- ì—´ ì—°ê²° +- +- +- Last Modified +- 마지막 수정 +- +- +- Password +- 암호 +- +- +- Created +- ìƒì„± +- +- +- Notes +- 메모 +- +- +- Title +- 제목 +- +- +- Group +- 그룹 +- +- +- URL +- URL +- +- +- Username +- ì‚¬ìš©ìž ì´ë¦„ +- +- +- Header lines skipped +- 머리글 줄 건너뜀 +- +- +- First line has field names +- 첫 ì¤„ì— í•„ë“œ ì´ë¦„ì´ ìžˆìŒ +- +- +- Not Present +- ì—†ìŒ +- +- +- Column %1 +- ì—´ %1 +- +- +- TOTP +- TOTP +- +- +- Icon +- ì•„ì´ì½˜ +- +- +- +- CsvParserModel +- +- %n column(s) +- %n칸 +- +- +- %1, %2, %3 +- file info: bytes, rows, columns +- %1, %2, %3 +- +- +- %n byte(s) +- %në°”ì´íŠ¸ +- +- +- %n row(s) +- %n줄 +- +- +- +- Database +- +- File %1 does not exist. +- íŒŒì¼ %1ì´(ê°€) 존재하지 않습니다. +- +- +- Unable to open file %1. +- íŒŒì¼ %1ì„(를) ì—´ 수 없습니다. +- +- +- Error while reading the database: %1 +- ë°ì´í„°ë² ì´ìŠ¤ ì½ê¸° 오류: %1 +- +- +- File cannot be written as it is opened in read-only mode. +- ì½ê¸° ì „ìš© 모드로 파ì¼ì„ 열었기 ë•Œë¬¸ì— ì €ìž¥í•  수 없습니다. +- +- +- Key not transformed. This is a bug, please report it to the developers! +- 키 변형 ê³¼ì •ì´ ì¼ì–´ë‚˜ì§€ 않았습니다. 버그ì´ë¯€ë¡œ 개발ìžì—게 ë³´ê³ í•´ 주십시오! +- +- +- %1 +-Backup database located at %2 +- %1 +-백업 ë°ì´í„°ë² ì´ìŠ¤ 위치: %2 +- +- +- Could not save, database does not point to a valid file. +- ë°ì´í„°ë² ì´ìŠ¤ê°€ 올바른 파ì¼ì„ 가리키지 ì•Šì•„ì„œ 저장할 수 없습니다. +- +- +- Could not save, database file is read-only. +- ë°ì´í„°ë² ì´ìŠ¤ 파ì¼ì´ ì½ê¸° ì „ìš©ì´ì–´ì„œ 저장할 수 없습니다. +- +- +- Database file has unmerged changes. +- ë°ì´í„°ë² ì´ìŠ¤ 파ì¼ì— 병합ë˜ì§€ ì•Šì€ ë³€ê²½ ì‚¬í•­ì´ ìžˆìŠµë‹ˆë‹¤. +- +- +- Recycle Bin +- 휴지통 +- +- +- Passwords +- Root group name +- 암호 +- +- +- Database save is already in progress. +- ë°ì´í„°ë² ì´ìŠ¤ ì €ìž¥ì´ ì§„í–‰ 중입니다. +- +- +- Could not save, database has not been initialized! +- ë°ì´í„°ë² ì´ìŠ¤ 파ì¼ì´ 초기화ë˜ì§€ ì•Šì•„ì„œ 저장할 수 없습니다! +- +- +- +- DatabaseOpenDialog +- +- Unlock Database - KeePassXC +- ë°ì´í„°ë² ì´ìŠ¤ 잠금 í•´ì œ - KeePassXC +- +- +- +- DatabaseOpenWidget +- +- Key File: +- 키 파ì¼: +- +- +- Refresh +- 새로 고침 +- +- +- Don't show this warning again +- ë” ì´ìƒ ì´ ê²½ê³  표시하지 않기 +- +- +- All files +- 모든 íŒŒì¼ +- +- +- Key files +- 키 íŒŒì¼ +- +- +- Select key file +- 키 íŒŒì¼ ì„ íƒ +- +- +- Failed to open key file: %1 +- 키 파ì¼ì„ ì—´ 수 ì—†ìŒ: %1 +- +- +- Unlock KeePassXC Database +- KeePassXC ë°ì´í„°ë² ì´ìŠ¤ 잠금 í•´ì œ +- +- +- Enter Password: +- 암호 ìž…ë ¥: +- +- +- Password field +- 암호 í•„ë“œ +- +- +- Hardware key slot selection +- 하드웨어 키 슬롯 ì„ íƒ +- +- +- Browse for key file +- 키 íŒŒì¼ ì°¾ì•„ë³´ê¸° +- +- +- Browse... +- 찾아보기... +- +- +- Refresh hardware tokens +- 하드웨어 í† í° ìƒˆë¡œ 고침 +- +- +- Hardware Key: +- 하드웨어 키: +- +- +- Hardware key help +- 하드웨어 키 ë„ì›€ë§ +- +- +- TouchID for Quick Unlock +- 빠른 잠금 해제용 Touch ID +- +- +- Unlock failed and no password given +- 잠금 í•´ì œ 실패, 지정한 암호 ì—†ìŒ +- +- +- Unlocking the database failed and you did not enter a password. +-Do you want to retry with an "empty" password instead? +- +-To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. +- ë°ì´í„°ë² ì´ìŠ¤ 잠금 해제가 실패했고 암호를 입력하지 않았습니다. +-"빈" 암호로 다시 ì‹œë„하시겠습니까? +- +-ì´ ì˜¤ë¥˜ê°€ 표시ë˜ì§€ ì•Šë„ë¡ í•˜ë ¤ë©´ "ë°ì´í„°ë² ì´ìŠ¤ 설정/보안"ì—ì„œ 암호를 초기화해야 합니다. +- +- +- Retry with empty password +- 빈 암호로 다시 ì‹œë„ +- +- +- Enter Additional Credentials (if any): +- 추가 ì¸ì¦ ì •ë³´ ìž…ë ¥(해당ë˜ëŠ” 경우): +- +- +- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +-<p>Click for more information...</p> +- <p><strong>YubiKey</strong>나 <strong>OnlyKey</strong>와 ê°™ì€ í•˜ë“œì›¨ì–´ í‚¤ì˜ ìŠ¬ë¡¯ì„ HMAC-SHA1ë¡œ 설정 ì‹œ 사용할 수 있습니다.</p> +-<p>ë” ë§Žì€ ì •ë³´ë¥¼ 보려면 누르십시오...</p> +- +- +- Key file help +- 키 íŒŒì¼ ë„ì›€ë§ +- +- +- ? +- ? +- +- +- Cannot use database file as key file +- ë°ì´í„°ë² ì´ìŠ¤ 파ì¼ì€ 키 파ì¼ë¡œ 사용할 수 없습니다. +- +- +- You cannot use your database file as a key file. +-If you do not have a key file, please leave the field empty. +- ë°ì´í„°ë² ì´ìŠ¤ 파ì¼ì„ ìžê¸° ìžì‹ ì˜ 키 파ì¼ë¡œ 사용할 수 없습니다. +-키 파ì¼ì´ 없는 경우, 해당 필드를 비워ë‘십시오. +- +- +- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> +- <p>암호 외ì—ë„ ë¹„ë°€ 파ì¼ì„ 사용하여 ë°ì´í„°ë² ì´ìŠ¤ ë³´ì•ˆì„ ê°•í™”í•  수 있습니다. ì´ íŒŒì¼ì€ ë°ì´í„°ë² ì´ìŠ¤ 보안 설정ì—ì„œ ìƒì„±í•  수 있습니다.</p><p>ì´ íŒŒì¼ì€ *.kdbx ë°ì´í„°ë² ì´ìŠ¤ 파ì¼ê³¼ <strong>ë³„ê°œì˜ íŒŒì¼</strong>입니다!<br>키 파ì¼ì´ 없다면 ì´ í•„ë“œë¥¼ 비워 ë‘십시오.</p><p>ìžì„¸í•œ 정보를 보려면 누르십시오...</p> +- +- +- Key file to unlock the database +- ë°ì´í„°ë² ì´ìŠ¤ 잠금 í•´ì œ 키 íŒŒì¼ +- +- +- Please touch the button on your YubiKey! +- YubiKeyì˜ ë‹¨ì¶”ë¥¼ 누르십시오! +- +- +- Detecting hardware keys… +- 하드웨어 키 ì¸ì‹ 중... +- +- +- No hardware keys detected +- ì¸ì‹ëœ 하드웨어 키 ì—†ìŒ +- +- +- Select hardware key… +- 하드웨어 키 ì„ íƒ... +- +- +- Old key file format +- +- +- +- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> +- +- +- +- +- DatabaseSettingWidgetMetaData +- +- Passwords +- 암호 +- +- +- +- DatabaseSettingsDialog +- +- Advanced Settings +- 고급 설정 +- +- +- General +- ì¼ë°˜ +- +- +- Security +- 보안 +- +- +- Encryption Settings +- 암호화 설정 +- +- +- Browser Integration +- 브ë¼ìš°ì € 통합 +- +- +- Database Credentials +- ë°ì´í„°ë² ì´ìŠ¤ ì¸ì¦ ì •ë³´ +- +- +- +- DatabaseSettingsWidgetBrowser +- +- KeePassXC-Browser settings +- KeePassXC-브ë¼ìš°ì € 설정 +- +- +- Stored keys +- ì €ìž¥ëœ í‚¤ +- +- +- Remove +- ì‚­ì œ +- +- +- Delete the selected key? +- ì„ íƒí•œ 키를 삭제하시겠습니까? +- +- +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- ì„ íƒí•œ 키를 삭제하시겠습니까? +-브ë¼ìš°ì € 플러그ì¸ì— 연결하지 못할 ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. +- +- +- Key +- 키 +- +- +- Value +- ê°’ +- +- +- Enable Browser Integration to access these settings. +- ì´ ì„¤ì •ì„ ë³€ê²½í•˜ë ¤ë©´ 브ë¼ìš°ì € í†µí•©ì„ í™œì„±í™”í•˜ì‹­ì‹œì˜¤. +- +- +- Disconnect all browsers +- 모든 브ë¼ìš°ì € ì—°ê²° ëŠê¸° +- +- +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- 모든 브ë¼ìš°ì € ì—°ê²°ì„ ëŠìœ¼ì‹œê² ìŠµë‹ˆê¹Œ? +-브ë¼ìš°ì € 플러그ì¸ì— 연결하지 못할 ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. +- +- +- KeePassXC: No keys found +- KeePassXC: 키를 ì°¾ì„ ìˆ˜ ì—†ìŒ +- +- +- No shared encryption keys found in KeePassXC settings. +- KeePassXC 설정ì—ì„œ ê³µìœ ëœ ì•”í˜¸í™” 키를 ì°¾ì„ ìˆ˜ 없습니다. +- +- +- KeePassXC: Removed keys from database +- KeePassXC: ë°ì´í„°ë² ì´ìŠ¤ì—ì„œ 키 ì‚­ì œë¨ +- +- +- Successfully removed %n encryption key(s) from KeePassXC settings. +- KeePassXC 설정ì—ì„œ 암호화 키 %n개를 삭제했습니다. +- +- +- Forget all site-specific settings on entries +- í•­ëª©ì˜ ëª¨ë“  사ì´íŠ¸ë³„ 설정 ì‚­ì œ +- +- +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- 모든 í•­ëª©ì˜ ì‚¬ì´íŠ¸ë³„ ì„¤ì •ì„ ì‚­ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ? +-í•­ëª©ì— ì ‘ê·¼í•  ê¶Œí•œì´ ì·¨ì†Œë©ë‹ˆë‹¤. +- +- +- Removing stored permissions… +- ì €ìž¥ëœ ê¶Œí•œ ì‚­ì œ 중... +- +- +- Abort +- 중지 +- +- +- KeePassXC: Removed permissions +- KeePassXC: 권한 ì‚­ì œë¨ +- +- +- Successfully removed permissions from %n entry(s). +- 항목 %nê°œì—ì„œ ê¶Œí•œì„ ì‚­ì œí–ˆìŠµë‹ˆë‹¤. +- +- +- KeePassXC: No entry with permissions found! +- KeePassXC: ê¶Œí•œì´ ìžˆëŠ” í•­ëª©ì„ ì°¾ì„ ìˆ˜ ì—†ìŒ! +- +- +- The active database does not contain an entry with permissions. +- 활성 ë°ì´í„°ë² ì´ìŠ¤ì— ê¶Œí•œì´ ë¶€ì—¬ëœ í•­ëª©ì´ ì—†ìŠµë‹ˆë‹¤. +- +- +- Move KeePassHTTP attributes to custom data +- KeePassHTTP ì†ì„±ì„ ì‚¬ìš©ìž ì •ì˜ ë°ì´í„°ë¡œ ì´ë™ +- +- +- Do you really want to move all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- 모든 레거시 브ë¼ìš°ì € 통합 ë°ì´í„°ë¥¼ 최신 표준으로 ì´ì „하시겠습니까? +-브ë¼ìš°ì € 통합 플러그ì¸ê³¼ í˜¸í™˜ì„±ì„ ìœ ì§€í•˜ê¸° 위해서 필요합니다. +- +- +- Stored browser keys +- ì €ìž¥ëœ ë¸Œë¼ìš°ì € 키 +- +- +- Remove selected key +- ì„ íƒí•œ 키 ì‚­ì œ +- +- +- Move KeePassHTTP attributes to KeePassXC-Browser custom data +- KeePassHTTP ì†ì„±ì„ ì‚¬ìš©ìž ì •ì˜ KeePassXC-브ë¼ìš°ì € ë°ì´í„°ë¡œ ì´ë™ +- +- +- Refresh database root group ID +- ë°ì´í„°ë² ì´ìŠ¤ 루트 그룹 ID 새로 고침 +- +- +- Created +- ìƒì„± +- +- +- Refresh database ID +- ë°ì´í„°ë² ì´ìŠ¤ ID 새로 고침 +- +- +- Do you really want refresh the database ID? +-This is only necessary if your database is a copy of another and the browser extension cannot connect. +- ë°ì´í„°ë² ì´ìŠ¤ ID를 새로 고치시겠습니까? +-ë°ì´í„°ë² ì´ìŠ¤ê°€ 다른 ë°ì´í„°ë² ì´ìŠ¤ì˜ 복제본ì´ê³  브ë¼ìš°ì € 확장 기능ì—ì„œ ì—°ê²°í•  수 ì—†ì„ ë•Œì—만 사용하십시오. +- +- +- +- DatabaseSettingsWidgetDatabaseKey +- +- Add additional protection... +- 추가 보호 추가... +- +- +- No password set +- 암호가 설정ë˜ì§€ ì•Šì•˜ìŒ +- +- +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- 경고! 암호를 설정하지 않았습니다. ë°ì´í„°ë² ì´ìŠ¤ 암호를 설정하지 않는 ê²ƒì€ ì¶”ì²œí•˜ì§€ 않습니다! +- +-암호를 지정하지 ì•Šê³  ê³„ì† ì§„í–‰í•˜ì‹œê² ìŠµë‹ˆê¹Œ? +- +- +- Continue without password +- 암호 ì—†ì´ ê³„ì† +- +- +- No encryption key added +- 암호화 키가 추가ë˜ì§€ ì•Šì•˜ìŒ +- +- +- You must add at least one encryption key to secure your database! +- ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 보호할 암호화 키를 최소 하나 추가해야 합니다! +- +- +- Unknown error +- ì•Œ 수 없는 오류 +- +- +- Failed to change database credentials +- ë°ì´í„°ë² ì´ìŠ¤ ì¸ì¦ 정보를 변경할 수 ì—†ìŒ +- +- +- +- DatabaseSettingsWidgetEncryption +- +- Encryption Algorithm: +- 암호화 알고리즘: +- +- +- AES: 256 Bit (default) +- AES: 256비트(기본값) +- +- +- Twofish: 256 Bit +- Twofish: 256비트 +- +- +- Key Derivation Function: +- 키 ìœ ë„ í•¨ìˆ˜: +- +- +- Transform rounds: +- 변환 횟수: +- +- +- Memory Usage: +- 메모리 사용량: +- +- +- Parallelism: +- 스레드 수: +- +- +- Decryption Time: +- 복호화 시간: +- +- +- ?? s +- ??ì´ˆ +- +- +- Change +- 변경 +- +- +- Higher values offer more protection, but opening the database will take longer. +- ì‹œê°„ì„ ë” ëŠ˜ë¦¬ë©´ 보호 ì •ë„를 ë†’ì¼ ìˆ˜ 있지만 ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 여는 ë° ë” ì˜¤ëžœ ì‹œê°„ì´ ê±¸ë¦´ 것입니다. +- +- +- Database format: +- ë°ì´í„°ë² ì´ìŠ¤ 형ì‹: +- +- +- This is only important if you need to use your database with other programs. +- ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 다른 프로그램ì—ì„œ 사용할 ì¼ì´ ìžˆì„ ë•Œ 중요합니다. +- +- +- KDBX 4.0 (recommended) +- KDBX 4.0(추천) +- +- +- KDBX 3.1 +- KDBX 3.1 +- +- +- unchanged +- Database decryption time is unchanged +- 변경ë˜ì§€ ì•ŠìŒ +- +- +- Number of rounds too high +- Key transformation rounds +- ë¼ìš´ë“œ 수가 너무 ë†’ìŒ +- +- +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or days (or even longer) to open! +- Argon2 키 변형 ë¼ìš´ë“œ 수가 너무 높습니다. +- +-해당 수치를 사용하면 ë°ì´í„°ë² ì´ìŠ¤ë¥¼ ì—´ ë•Œ 수 시간ì´ë‚˜ 수 ì¼ ì´ìƒ ì†Œìš”ë  ìˆ˜ 있습니다! +- +- +- Understood, keep number +- ì´í•´í•¨, ìˆ«ìž ìœ ì§€ +- +- +- Cancel +- 취소 +- +- +- Number of rounds too low +- Key transformation rounds +- ë¼ìš´ë“œ 수가 너무 ë‚®ìŒ +- +- +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database may be too easy to crack! +- AES-KDF 키 변형 ë¼ìš´ë“œ 수가 너무 낮습니다. +- +-해당 수치를 ê³„ì† ì‚¬ìš©í•˜ë©´ ë°ì´í„°ë² ì´ìŠ¤ì˜ ë³´ì•ˆì„ ì‰½ê²Œ 해제할 수 있습니다! +- +- +- KDF unchanged +- 키 ìœ ë„ í•¨ìˆ˜ 변경ë˜ì§€ ì•ŠìŒ +- +- +- Failed to transform key with new KDF parameters; KDF unchanged. +- 새로운 키 ìœ ë„ í•¨ìˆ˜ ì¸ìžë¡œ 키를 변경할 수 없어서 키 ìœ ë„ í•¨ìˆ˜ë¥¼ 변경하지 않았습니다. +- +- +- MiB +- Abbreviation for Mebibytes (KDF settings) +- MiB +- +- +- thread(s) +- Threads for parallel execution (KDF settings) +- ê°œ 스레드 +- +- +- Change existing decryption time +- 기존 복호화 시간 변경 +- +- +- Decryption time in seconds +- ì´ˆ ë‹¨ìœ„ì˜ ë³µí˜¸í™” 시간 +- +- +- Database format +- ë°ì´í„°ë² ì´ìŠ¤ í˜•ì‹ +- +- +- Encryption algorithm +- 암호화 알고리즘 +- +- +- Key derivation function +- 키 ìœ ë„ í•¨ìˆ˜ +- +- +- Transform rounds +- 변환 횟수 +- +- +- Memory usage +- 메모리 사용 +- +- +- Parallelism +- 병렬화 +- +- +- ?? ms +- ?? ms +- +- +- ? s +- ?ì´ˆ +- +- +- +- DatabaseSettingsWidgetFdoSecrets +- +- Exposed Entries +- 내보낼 항목 +- +- +- Don't expose this database +- ì´ ë°ì´í„°ë² ì´ìŠ¤ 내보내지 않기 +- +- +- Expose entries under this group: +- ë‹¤ìŒ ê·¸ë£¹ì— ì†í•œ 항목 내보내기: +- +- +- Enable Secret Service to access these settings. +- ì´ ì„¤ì •ì— ì ‘ê·¼í•˜ë ¤ë©´ 비밀 서비스를 활성화하십시오. +- +- +- +- DatabaseSettingsWidgetGeneral +- +- Database Meta Data +- ë°ì´í„°ë² ì´ìŠ¤ 메타ë°ì´í„° +- +- +- Database name: +- ë°ì´í„°ë² ì´ìŠ¤ ì´ë¦„: +- +- +- Database description: +- ë°ì´í„°ë² ì´ìŠ¤ 설명: +- +- +- Default username: +- 기본 ì‚¬ìš©ìž ì´ë¦„: +- +- +- History Settings +- 과거 ê¸°ë¡ ì„¤ì • +- +- +- Max. history items: +- 최대 과거 항목 수: +- +- +- Max. history size: +- 최대 과거 항목 í¬ê¸°: +- +- +- MiB +- MiB +- +- +- Use recycle bin +- 휴지통 사용 +- +- +- Additional Database Settings +- 추가 ë°ì´í„°ë² ì´ìŠ¤ 설정 +- +- +- Database name field +- ë°ì´í„°ë² ì´ìŠ¤ ì´ë¦„ í•„ë“œ +- +- +- Database description field +- ë°ì´í„°ë² ì´ìŠ¤ 설명 í•„ë“œ +- +- +- Default username field +- 기본 ì‚¬ìš©ìž ì´ë¦„ í•„ë“œ +- +- +- Maximum number of history items per entry +- 항목당 최대 과거 ê¸°ë¡ ê°œìˆ˜ +- +- +- Maximum size of history per entry +- 항목당 최대 과거 ê¸°ë¡ í¬ê¸° +- +- +- Delete Recycle Bin +- 휴지통 지우기 +- +- +- Do you want to delete the current recycle bin and all its contents? +-This action is not reversible. +- 현재 휴지통과 í¬í•¨ëœ 모든 ë‚´ìš©ì„ ì‚­ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ? +-ì´ ìž‘ì—…ì€ ì·¨ì†Œí•  수 없습니다. +- +- +- (old) +- (ì´ì „) +- +- +- Enable compression (recommended) +- 압축 사용(추천) +- +- +- +- DatabaseSettingsWidgetKeeShare +- +- Sharing +- 공유 +- +- +- Breadcrumb +- 단계 +- +- +- Type +- í˜•ì‹ +- +- +- Path +- 경로 +- +- +- Last Signer +- 마지막 ì„œëª…ìž +- +- +- Certificates +- ì¸ì¦ì„œ +- +- +- > +- Breadcrumb separator +- > +- +- +- +- DatabaseSettingsWidgetMetaDataSimple +- +- Database Name: +- ë°ì´í„°ë² ì´ìŠ¤ ì´ë¦„: +- +- +- Description: +- 설명: +- +- +- Database name field +- ë°ì´í„°ë² ì´ìŠ¤ ì´ë¦„ í•„ë“œ +- +- +- Database description field +- ë°ì´í„°ë² ì´ìŠ¤ 설명 í•„ë“œ +- +- +- +- DatabaseTabWidget +- +- KeePass 2 Database +- KeePass 2 ë°ì´í„°ë² ì´ìŠ¤ +- +- +- All files +- 모든 íŒŒì¼ +- +- +- Open database +- ë°ì´í„°ë² ì´ìŠ¤ 열기 +- +- +- CSV file +- CSV íŒŒì¼ +- +- +- Merge database +- ë°ì´í„°ë² ì´ìŠ¤ 합치기 +- +- +- Open KeePass 1 database +- KeePass 1 ë°ì´í„°ë² ì´ìŠ¤ 열기 +- +- +- KeePass 1 database +- KeePass 1 ë°ì´í„°ë² ì´ìŠ¤ +- +- +- Export database to CSV file +- ë°ì´í„°ë² ì´ìŠ¤ë¥¼ CSV 파ì¼ë¡œ 내보내기 +- +- +- Writing the CSV file failed. +- CSV 파ì¼ì— 기ë¡í•  수 없습니다. +- +- +- Database creation error +- Database creation error +- +- +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- ì´ ìƒì„±ëœ ë°ì´í„°ë² ì´ìŠ¤ì— 키나 KDFê°€ 없어서 저장하지 ì•Šì„ ê²ƒìž…ë‹ˆë‹¤. +-버그ì´ë¯€ë¡œ 개발ìžì—게 ë³´ê³ í•´ 주십시오. +- +- +- Select CSV file +- CSV íŒŒì¼ ì„ íƒ +- +- +- New Database +- 새 ë°ì´í„°ë² ì´ìŠ¤ +- +- +- %1 [New Database] +- Database tab name modifier +- %1 [새 ë°ì´í„°ë² ì´ìŠ¤] +- +- +- %1 [Locked] +- Database tab name modifier +- %1 [ìž ê¹€] +- +- +- %1 [Read-only] +- Database tab name modifier +- %1 [ì½ê¸° ì „ìš©] +- +- +- Failed to open %1. It either does not exist or is not accessible. +- %1ì„(를) ì—´ 수 없습니다. ë” ì´ìƒ 존재하지 않거나 접근할 수 없습니다. +- +- +- Export database to HTML file +- ë°ì´í„°ë² ì´ìŠ¤ë¥¼ HTML 파ì¼ë¡œ 내보내기 +- +- +- HTML file +- HTML íŒŒì¼ +- +- +- Writing the HTML file failed. +- HTML 파ì¼ì— 쓸 수 없습니다. +- +- +- Export Confirmation +- 내보내기 í™•ì¸ +- +- +- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? +- ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 암호화ë˜ì§€ ì•Šì€ íŒŒì¼ë¡œ 내보냅니다. 암호와 기타 ë¯¼ê° ì •ë³´ë¥¼ 노출시킬 수 있습니다! ê³„ì† ì§„í–‰í•˜ì‹œê² ìŠµë‹ˆê¹Œ? +- +- +- Open OPVault +- OPVault 열기 +- +- +- +- DatabaseWidget +- +- Searching... +- 찾는 중... +- +- +- Do you really want to delete the entry "%1" for good? +- ì •ë§ í•­ëª© "%1"ì„(를) 삭제하시겠습니까? +- +- +- Do you really want to move entry "%1" to the recycle bin? +- 항목 "%1"ì„(를) 휴지통으로 ì´ë™í•˜ì‹œê² ìŠµë‹ˆê¹Œ? +- +- +- Do you really want to move %n entry(s) to the recycle bin? +- 항목 %n개를 휴지통으로 ì´ë™í•˜ì‹œê² ìŠµë‹ˆê¹Œ? +- +- +- Execute command? +- ëª…ë ¹ì„ ì‹¤í–‰í•˜ì‹œê² ìŠµë‹ˆê¹Œ? +- +- +- Do you really want to execute the following command?<br><br>%1<br> +- ë‹¤ìŒ ëª…ë ¹ì„ ì‹¤í–‰í•˜ì‹œê² ìŠµë‹ˆê¹Œ?<br><br>%1<br> +- +- +- Remember my choice +- ì´ ì„ íƒ ê¸°ì–µí•˜ê¸° +- +- +- Do you really want to delete the group "%1" for good? +- ì •ë§ ê·¸ë£¹ "%1"ì„(를) 삭제하시겠습니까? +- +- +- No current database. +- 현재 ë°ì´í„°ë² ì´ìŠ¤ê°€ 없습니다. +- +- +- No source database, nothing to do. +- ì›ë³¸ ë°ì´í„°ë² ì´ìŠ¤ê°€ 없습니다. +- +- +- Search Results (%1) +- 검색 ê²°ê³¼(%1) +- +- +- No Results +- ê²°ê³¼ ì—†ìŒ +- +- +- File has changed +- íŒŒì¼ ë³€ê²½ë¨ +- +- +- The database file has changed. Do you want to load the changes? +- ë°ì´í„°ë² ì´ìŠ¤ 파ì¼ì´ 변경ë˜ì—ˆìŠµë‹ˆë‹¤. 변경 ì‚¬í•­ì„ ë¶ˆëŸ¬ì˜¤ì‹œê² ìŠµë‹ˆê¹Œ? +- +- +- Merge Request +- 요청 합치기 +- +- +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- ë°ì´í„°ë² ì´ìŠ¤ 파ì¼ì´ 변경ë˜ì—ˆê³  저장하지 ì•Šì€ ë³€ê²½ ì‚¬í•­ì´ ìžˆìŠµë‹ˆë‹¤. +-변경 ì‚¬í•­ì„ í•©ì¹˜ê² ìŠµë‹ˆê¹Œ? +- +- +- Empty recycle bin? +- íœ´ì§€í†µì„ ë¹„ìš°ì‹œê² ìŠµë‹ˆê¹Œ? +- +- +- Are you sure you want to permanently delete everything from your recycle bin? +- íœ´ì§€í†µì— ìžˆëŠ” í•­ëª©ì„ ì˜ì›ížˆ 삭제하시겠습니까? +- +- +- Do you really want to delete %n entry(s) for good? +- 항목 %n개를 ì˜ì›ížˆ 삭제하시겠습니까? +- +- +- Delete entry(s)? +- í•­ëª©ì„ ì‚­ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ? +- +- +- Move entry(s) to recycle bin? +- í•­ëª©ì„ íœ´ì§€í†µìœ¼ë¡œ ì´ë™í•˜ì‹œê² ìŠµë‹ˆê¹Œ? +- +- +- Lock Database? +- ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 잠그시겠습니까? +- +- +- You are editing an entry. Discard changes and lock anyway? +- í•­ëª©ì„ íŽ¸ì§‘í•˜ê³  있습니다. 변경 ì‚¬í•­ì„ ë¬´ì‹œí•˜ê³  잠그시겠습니까? +- +- +- "%1" was modified. +-Save changes? +- "%1"ì´(ê°€) 변경ë˜ì—ˆìŠµë‹ˆë‹¤. 저장하시겠습니까? +- +- +- Database was modified. +-Save changes? +- ë°ì´í„°ë² ì´ìŠ¤ê°€ 변경ë˜ì—ˆìŠµë‹ˆë‹¤. +-저장하시겠습니까? +- +- +- Save changes? +- 변경 사항 저장 확ì¸? +- +- +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- ìžë™ìœ¼ë¡œ 다시 불러오려는 중 새 ë°ì´í„°ë² ì´ìŠ¤ 파ì¼ì„ ì—´ 수 없었습니다. +-오류: %1 +- +- +- Disable safe saves? +- 안전 ì €ìž¥ì„ ë¹„í™œì„±í™” 하시겠습니까? +- +- +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- KeePassXCì—ì„œ ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 여러 번 저장하려고 ì‹œë„했으나 실패했습니다. íŒŒì¼ ë™ê¸°í™” 서비스ì—ì„œ ë°ì´í„°ë² ì´ìŠ¤ 파ì¼ì„ ìž ê·¼ 것 같습니다. +-안전 ì €ìž¥ì„ ë¹„í™œì„±í™” í•œ ë‹¤ìŒ ë‹¤ì‹œ ì‹œë„하시겠습니까? +- +- +- Passwords +- 암호 +- +- +- Save database as +- 다른 ì´ë¦„으로 ë°ì´í„°ë² ì´ìŠ¤ 저장 +- +- +- KeePass 2 Database +- KeePass 2 ë°ì´í„°ë² ì´ìŠ¤ +- +- +- Replace references to entry? +- í•­ëª©ì— ëŒ€í•œ 참조를 변경하시겠습니까? +- +- +- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? +- 항목 "%1"ì— ì°¸ì¡° %2개가 있습니다. 해당 참조를 값으로 ë®ì–´ 쓰거나, í•­ëª©ì„ ê±´ë„ˆë›°ê±°ë‚˜, ê·¸ëž˜ë„ ì‚­ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ? +- +- +- Delete group +- 그룹 ì‚­ì œ +- +- +- Move group to recycle bin? +- ê·¸ë£¹ì„ íœ´ì§€í†µìœ¼ë¡œ ì´ë™í•˜ì‹œê² ìŠµë‹ˆê¹Œ? +- +- +- Do you really want to move the group "%1" to the recycle bin? +- 그룹 "%1"ì„(를) 휴지통으로 ì´ë™í•˜ì‹œê² ìŠµë‹ˆê¹Œ? +- +- +- Successfully merged the database files. +- ë°ì´í„°ë² ì´ìŠ¤ 파ì¼ì„ 합쳤습니다. +- +- +- Database was not modified by merge operation. +- 수정 작업으로 ë°ì´í„°ë² ì´ìŠ¤ê°€ 변경ë˜ì§€ 않았습니다. +- +- +- Shared group... +- ê³µìœ ëœ ê·¸ë£¹... +- +- +- Writing the database failed: %1 +- ë°ì´í„°ë² ì´ìŠ¤ì—기ë¡í•  수 ì—†ìŒ: %1 +- +- +- This database is opened in read-only mode. Autosave is disabled. +- ë°ì´í„°ë² ì´ìŠ¤ê°€ ì½ê¸° ì „ìš© 모드로 열렸습니다. ìžë™ ì €ìž¥ì„ ë¹„í™œì„±í™”í•©ë‹ˆë‹¤. +- +- +- Save database backup +- ë°ì´í„°ë² ì´ìŠ¤ 백업 저장 +- +- +- Could not find database file: %1 +- ë°ì´í„°ë² ì´ìŠ¤ 파ì¼ì„ ì°¾ì„ ìˆ˜ ì—†ìŒ: %1 +- +- +- +- EditEntryWidget +- +- Entry +- 항목 +- +- +- Advanced +- 고급 +- +- +- Icon +- ì•„ì´ì½˜ +- +- +- Auto-Type +- ìžë™ ìž…ë ¥ +- +- +- Properties +- ì†ì„± +- +- +- History +- 과거 ê¸°ë¡ +- +- +- SSH Agent +- SSH ì—ì´ì „트 +- +- +- n/a +- ì—†ìŒ +- +- +- (encrypted) +- (암호화ë¨) +- +- +- Select private key +- 비밀 키 ì„ íƒ +- +- +- Entry history +- 항목 과거 ê¸°ë¡ +- +- +- Add entry +- 항목 추가 +- +- +- Edit entry +- 항목 편집 +- +- +- New attribute +- 새 ì†ì„± +- +- +- Are you sure you want to remove this attribute? +- ì´ ì†ì„±ì„ 삭제하시겠습니까? +- +- +- Tomorrow +- ë‚´ì¼ +- +- +- %n week(s) +- %n주 +- +- +- %n month(s) +- %n개월 +- +- +- Entry updated successfully. +- í•­ëª©ì„ ì—…ë°ì´íŠ¸í–ˆìŠµë‹ˆë‹¤. +- +- +- New attribute %1 +- 새 ì†ì„± %1 +- +- +- %n year(s) +- %në…„ +- +- +- Confirm Removal +- ì‚­ì œ í™•ì¸ +- +- +- Browser Integration +- 브ë¼ìš°ì € 통합 +- +- +- <empty URL> +- <빈 URL> +- +- +- Are you sure you want to remove this URL? +- ì´ URLì„ ì‚­ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ? +- +- +- Reveal +- ë³´ì´ê¸° +- +- +- Hide +- 숨기기 +- +- +- Unsaved Changes +- 저장하지 ì•Šì€ ë³€ê²½ 사항 +- +- +- Would you like to save changes to this entry? +- ì´ í•­ëª©ì˜ ë³€ê²½ ì‚¬í•­ì„ ì €ìž¥í•˜ì‹œê² ìŠµë‹ˆê¹Œ? +- +- +- [PROTECTED] Press Reveal to view or edit +- [보호ë¨] 보거나 편집하려면 "ë³´ì´ê¸°"를 누르십시오 +- +- +- Invalid Entry +- +- +- +- An external merge operation has invalidated this entry. +-Unfortunately, any changes made have been lost. +- +- +- +- +- EditEntryWidgetAdvanced +- +- Additional attributes +- 추가 ì†ì„± +- +- +- Add +- 추가 +- +- +- Remove +- ì‚­ì œ +- +- +- Edit Name +- ì´ë¦„ 편집 +- +- +- Protect +- 보호 +- +- +- Reveal +- ë³´ì´ê¸° +- +- +- Attachments +- 첨부 +- +- +- Foreground Color: +- 글ìžìƒ‰: +- +- +- Background Color: +- 배경색: +- +- +- Attribute selection +- ì†ì„± ì„ íƒ +- +- +- Attribute value +- ì†ì„± ê°’ +- +- +- Add a new attribute +- 새 ì†ì„± 추가 +- +- +- Remove selected attribute +- ì„ íƒí•œ ì†ì„± ì‚­ì œ +- +- +- Edit attribute name +- ì†ì„± ì´ë¦„ 편집 +- +- +- Toggle attribute protection +- ì†ì„± 보호 전환 +- +- +- Show a protected attribute +- ë³´í˜¸ëœ ì†ì„± 표시 +- +- +- Foreground color selection +- 글ìžìƒ‰ ì„ íƒ +- +- +- Background color selection +- 배경색 ì„ íƒ +- +- +- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> +- <html><head/><body><p>ì´ ì˜µì…˜ì„ ì‚¬ìš©í•˜ë©´ ê¸°ì¤€ì„ ë§Œì¡±í•˜ì§€ 못하ë”ë¼ë„(예: 암호 엔트로피나 재사용) 안전성 검사나 HIBP와 ê°™ì€ ë³´ê³ ì„œì— ì´ í•­ëª©ì„ í‘œì‹œí•˜ì§€ 않습니다. ì•”í˜¸ì— ì‚¬ìš©í•  수 있는 문ìžì—´ì— 제약 ì‚¬í•­ì´ ìžˆë‹¤ë©´(예: 4ìžë¦¬ PIN) ì´ ì˜µì…˜ì„ ì„ íƒí•˜ì—¬ ë³´ê³ ì„œì— í‘œì‹œë˜ì§€ ì•Šë„ë¡ í•  수 있습니다.</p></body></html> +- +- +- Exclude from database reports +- ë°ì´í„°ë² ì´ìŠ¤ ë³´ê³ ì„œì—ì„œ 제외 +- +- +- +- EditEntryWidgetAutoType +- +- Enable Auto-Type for this entry +- ì´ í•­ëª© ìžë™ ìž…ë ¥ 사용 +- +- +- Window Associations +- ì°½ ì—°ê²° +- +- +- + +- + +- +- +- - +- - +- +- +- Window title: +- ì°½ 제목: +- +- +- Use a specific sequence for this association: +- ì´ ì¡°í•©ì— ì§€ì •ëœ ìˆœì„œ 사용: +- +- +- Custom Auto-Type sequence +- ì‚¬ìš©ìž ì •ì˜ ìžë™ ìž…ë ¥ 순서 +- +- +- Open Auto-Type help webpage +- ìžë™ ìž…ë ¥ ë„ì›€ë§ ì›¹ 페ì´ì§€ 열기 +- +- +- Existing window associations +- 기존 ì°½ ì—°ê²° +- +- +- Add new window association +- 새 ì°½ ì—°ê²° 추가 +- +- +- Remove selected window association +- ì„ íƒí•œ ì°½ ì—°ê²° ì‚­ì œ +- +- +- You can use an asterisk (*) to match everything +- 모든 것과 ì¼ì¹˜í•˜ë ¤ë©´ 별표(*)를 사용하십시오 +- +- +- Set the window association title +- ì°½ ì—°ê²° 제목 설정 +- +- +- You can use an asterisk to match everything +- 모든 것과 ì¼ì¹˜í•˜ë ¤ë©´ 별표(*)를 사용하십시오 +- +- +- Custom Auto-Type sequence for this window +- ì´ ì°½ì˜ ì‚¬ìš©ìž ì •ì˜ ìžë™ ìž…ë ¥ 순서 +- +- +- Inherit default Auto-Type sequence from the group +- ê·¸ë£¹ì˜ ê¸°ë³¸ ìžë™ ìž…ë ¥ 순서 사용 +- +- +- Use custom Auto-Type sequence: +- ì‚¬ìš©ìž ì •ì˜ ìžë™ ìž…ë ¥ 순서 사용: +- +- +- +- EditEntryWidgetBrowser +- +- These settings affect to the entry's behaviour with the browser extension. +- ì´ ì„¤ì •ì€ ë¸Œë¼ìš°ì € 확장 기능ì—ì„œ 해당 í•­ëª©ì„ ì²˜ë¦¬í•˜ëŠ” ë°©ë²•ì„ ë³€ê²½í•©ë‹ˆë‹¤. +- +- +- General +- ì¼ë°˜ +- +- +- Skip Auto-Submit for this entry +- ì´ í•­ëª© ìžë™ 제출 건너뛰기 +- +- +- Hide this entry from the browser extension +- ì´ í•­ëª©ì„ ë¸Œë¼ìš°ì € 확장 기능ì—ì„œ 숨기기 +- +- +- Additional URL's +- 추가 URL +- +- +- Add +- 추가 +- +- +- Remove +- ì‚­ì œ +- +- +- Edit +- 편집 +- +- +- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. +- 웹 브ë¼ìš°ì €ì˜ HTTP ì¸ì¦ 대화 ìƒìžì—만 ì´ ì„¤ì •ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. 활성화하면 ì¼ë°˜ ë¡œê·¸ì¸ í¼ ì„ íƒ ëª©ë¡ì— ì´ í•­ëª©ì„ í‘œì‹œí•˜ì§€ 않습니다. +- +- +- Use this entry only with HTTP Basic Auth +- HTTP Basic ì¸ì¦ì—만 ì´ í•­ëª© 사용 +- +- +- +- EditEntryWidgetHistory +- +- Show +- 표시 +- +- +- Restore +- ë³µì› +- +- +- Delete +- ì‚­ì œ +- +- +- Delete all +- ëª¨ë‘ ì‚­ì œ +- +- +- Entry history selection +- 항목 과거 ê¸°ë¡ ì„ íƒ +- +- +- Show entry at selected history state +- ì„ íƒí•œ 과거 ê¸°ë¡ ì‹œì ì—ì„œì˜ í•­ëª© 표시 +- +- +- Restore entry to selected history state +- ì„ íƒí•œ 과거 ê¸°ë¡ ì‹œì ìœ¼ë¡œ 항목 ë˜ëŒë¦¬ê¸° +- +- +- Delete selected history state +- ì„ íƒí•œ 과거 ê¸°ë¡ ì‹œì  ì‚­ì œ +- +- +- Delete all history +- 모든 과거 ê¸°ë¡ ì‚­ì œ +- +- +- +- EditEntryWidgetMain +- +- URL: +- URL: +- +- +- Password: +- 암호: +- +- +- Title: +- 제목: +- +- +- Presets +- 사전 설정 +- +- +- Toggle the checkbox to reveal the notes section. +- 메모 ë¶€ë¶„ì„ í‘œì‹œí•˜ë ¤ë©´ ì²´í¬ ìƒìžë¥¼ 전환하십시오. +- +- +- Username: +- ì‚¬ìš©ìž ì´ë¦„: +- +- +- Url field +- URL í•„ë“œ +- +- +- Download favicon for URL +- URLì˜ íŒŒë¹„ì½˜ 다운로드 +- +- +- Password field +- 암호 í•„ë“œ +- +- +- Toggle notes visible +- 메모 표시 여부 전환 +- +- +- Expiration field +- 만료 í•„ë“œ +- +- +- Expiration Presets +- 만료 사전 설정 +- +- +- Expiration presets +- 만료 사전 설정 +- +- +- Notes field +- 메모 í•„ë“œ +- +- +- Title field +- 제목 í•„ë“œ +- +- +- Username field +- ì‚¬ìš©ìž ì´ë¦„ í•„ë“œ +- +- +- Toggle expiration +- 만료 여부 전환 +- +- +- Notes: +- 메모: +- +- +- https://example.com +- https://example.com +- +- +- Expires: +- 만료: +- +- +- Edit Entry +- +- +- +- +- EditEntryWidgetSSHAgent +- +- Form +- í¼ +- +- +- Remove key from agent after +- ë‹¤ìŒ ì‹œê°„ ì´í›„ì— ì—ì´ì „트ì—ì„œ 키 ì‚­ì œ +- +- +- seconds +- ì´ˆ +- +- +- Fingerprint +- 지문 +- +- +- Remove key from agent when database is closed/locked +- ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 잠그거나 ë‹«ì„ ë•Œ ì—ì´ì „트ì—ì„œ 키 ì‚­ì œ +- +- +- Public key +- 공개 키 +- +- +- Add key to agent when database is opened/unlocked +- ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 열거나 잠금 해제할 ë•Œ ì—ì´ì „íŠ¸ì— í‚¤ 추가 +- +- +- Comment +- ì£¼ì„ +- +- +- Decrypt +- 복호화 +- +- +- n/a +- ì—†ìŒ +- +- +- Copy to clipboard +- í´ë¦½ë³´ë“œì— 복사 +- +- +- Private key +- 비밀 키 +- +- +- External file +- 외부 íŒŒì¼ +- +- +- Browse... +- Button for opening file dialog +- 찾아보기... +- +- +- Attachment +- 첨부 +- +- +- Add to agent +- ì—ì´ì „íŠ¸ì— ì¶”ê°€ +- +- +- Remove from agent +- ì—ì´ì „트ì—ì„œ ì‚­ì œ +- +- +- Require user confirmation when this key is used +- ì´ í‚¤ë¥¼ 사용할 ë•Œ 사용ìžì—게 묻기 +- +- +- Remove key from agent after specified seconds +- ë‹¤ìŒ ì‹œê°„ ì´í›„ì— ì—ì´ì „트ì—ì„œ 키 ì‚­ì œ +- +- +- Browser for key file +- 키 íŒŒì¼ ì°¾ì•„ë³´ê¸° +- +- +- External key file +- 외부 키 íŒŒì¼ +- +- +- Select attachment file +- 첨부 íŒŒì¼ ì„ íƒ +- +- +- +- EditGroupWidget +- +- Group +- 그룹 +- +- +- Icon +- ì•„ì´ì½˜ +- +- +- Properties +- ì†ì„± +- +- +- Add group +- 그룹 추가 +- +- +- Edit group +- 그룹 편집 +- +- +- Enable +- 활성화 +- +- +- Disable +- 비활성화 +- +- +- Inherit from parent group (%1) +- 부모 그룹ì—ì„œ ìƒì†(%1) +- +- +- Entry has unsaved changes +- í•­ëª©ì— ì €ìž¥ë˜ì§€ ì•Šì€ ë³€ê²½ ì‚¬í•­ì´ ìžˆìŒ +- +- +- +- EditGroupWidgetKeeShare +- +- Type: +- 형ì‹: +- +- +- Path: +- 경로: +- +- +- Password: +- 암호: +- +- +- Inactive +- 비활성 +- +- +- KeeShare unsigned container +- KeeShare 서명ë˜ì§€ ì•Šì€ ì»¨í…Œì´ë„ˆ +- +- +- KeeShare signed container +- KeeShare ì„œëª…ëœ ì»¨í…Œì´ë„ˆ +- +- +- Select import source +- 가져올 ì›ë³¸ ì„ íƒ +- +- +- Select export target +- 내보낼 ëŒ€ìƒ ì„ íƒ +- +- +- Select import/export file +- 가져올/내보낼 íŒŒì¼ ì„ íƒ +- +- +- Clear +- 비우기 +- +- +- Import +- 가져오기 +- +- +- Export +- 내보내기 +- +- +- Synchronize +- ë™ê¸°í™” +- +- +- Your KeePassXC version does not support sharing this container type. +-Supported extensions are: %1. +- KeePassXC 현재 버전ì—ì„œ 현재 컨테ì´ë„ˆ 형ì‹ì„ 공유할 수 없습니다. +-지ì›í•˜ëŠ” 확장 형ì‹: %1. +- +- +- %1 is already being exported by this database. +- ì´ ë°ì´í„°ë² ì´ìŠ¤ì—ì„œ %1ì„(를) ì´ë¯¸ ë‚´ë³´ë‚´ê³  있습니다. +- +- +- %1 is already being imported by this database. +- ì´ ë°ì´í„°ë² ì´ìŠ¤ì—ì„œ %1ì„(를) ì´ë¯¸ 가져오고 있습니다. +- +- +- %1 is being imported and exported by different groups in this database. +- ì´ ë°ì´í„°ë² ì´ìŠ¤ì˜ 다른 그룹ì—ì„œ %1ì„(를) 가져오거나 ë‚´ë³´ë‚´ê³  있습니다. +- +- +- KeeShare is currently disabled. You can enable import/export in the application settings. +- KeeShare is a proper noun +- KeeShareê°€ 비활성화ë˜ì–´ 있습니다. 프로그램 설정ì—ì„œ 가져오기/내보내기를 활성화할 수 있습니다. +- +- +- Database export is currently disabled by application settings. +- 프로그램 설정ì—ì„œ ë°ì´í„°ë² ì´ìŠ¤ 내보내기가 비활성화ë˜ì–´ 있습니다. +- +- +- Database import is currently disabled by application settings. +- 프로그램 설정ì—ì„œ ë°ì´í„°ë² ì´ìŠ¤ 가져오기가 비활성화ë˜ì–´ 있습니다. +- +- +- Sharing mode field +- 공유 모드 í•„ë“œ +- +- +- Path to share file field +- 공유할 íŒŒì¼ ê²½ë¡œ í•„ë“œ +- +- +- Password field +- 암호 í•„ë“œ +- +- +- Clear fields +- í•„ë“œ 비우기 +- +- +- Browse for share file +- 공유 íŒŒì¼ ì°¾ì•„ë³´ê¸° +- +- +- Browse... +- 찾아보기... +- +- +- +- EditGroupWidgetMain +- +- Name field +- ì´ë¦„ í•„ë“œ +- +- +- Notes field +- 메모 í•„ë“œ +- +- +- Toggle expiration +- 만료 여부 전환 +- +- +- Auto-Type toggle for this and sub groups +- ì´ ê·¸ë£¹ê³¼ 하위 ê·¸ë£¹ì˜ ìžë™ ìž…ë ¥ 전환 +- +- +- Expiration field +- 만료 í•„ë“œ +- +- +- Search toggle for this and sub groups +- ì´ ê·¸ë£¹ê³¼ 하위 ê·¸ë£¹ì˜ ê²€ìƒ‰ 전환 +- +- +- Default auto-type sequence field +- 기본 ìžë™ ìž…ë ¥ 순서 í•„ë“œ +- +- +- Expires: +- 만료: +- +- +- Use default Auto-Type sequence of parent group +- 부모 ê·¸ë£¹ì˜ ê¸°ë³¸ ìžë™ ìž…ë ¥ 순서 사용 +- +- +- Auto-Type: +- ìžë™ ìž…ë ¥: +- +- +- Search: +- 찾기: +- +- +- Notes: +- 메모: +- +- +- Name: +- ì´ë¦„: +- +- +- Set default Auto-Type sequence +- 기본 ìžë™ ìž…ë ¥ 순서 설정 +- +- +- Edit Group +- +- +- +- +- EditWidgetIcons +- +- Add custom icon +- ì‚¬ìš©ìž ì •ì˜ ì•„ì´ì½˜ 추가 +- +- +- Delete custom icon +- ì‚¬ìš©ìž ì •ì˜ ì•„ì´ì½˜ ì‚­ì œ +- +- +- Download favicon +- 파비콘 다운로드 +- +- +- Unable to fetch favicon. +- íŒŒë¹„ì½˜ì„ ë‹¤ìš´ë¡œë“œí•  수 없습니다. +- +- +- Images +- 그림 +- +- +- All files +- 모든 íŒŒì¼ +- +- +- Confirm Delete +- ì‚­ì œ í™•ì¸ +- +- +- Select Image(s) +- ì´ë¯¸ì§€ ì„ íƒ +- +- +- Successfully loaded %1 of %n icon(s) +- ì•„ì´ì½˜ %nê°œ 중 %1ê°œ 불러옴 +- +- +- No icons were loaded +- ì•„ì´ì½˜ì„ 불러오지 ì•Šì•˜ìŒ +- +- +- %n icon(s) already exist in the database +- ë°ì´í„°ë² ì´ìŠ¤ì— ì•„ì´ì½˜ %n개가 ì´ë¯¸ 존재함 +- +- +- The following icon(s) failed: +- ë‹¤ìŒ ì•„ì´ì½˜ì—ì„œ 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤: +- +- +- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? +- %nê°œ 항목ì—ì„œ ì´ ì•„ì´ì½˜ì„ 사용하고 있으며 기본 ì•„ì´ì½˜ìœ¼ë¡œ 대체ë©ë‹ˆë‹¤. 삭제하시겠습니까? +- +- +- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security +- ë„구 -> 설정 -> 보안ì—ì„œ DuckDuckGo 웹 사ì´íŠ¸ ì•„ì´ì½˜ 서비스를 활성화할 수 있습니다 +- +- +- Download favicon for URL +- URLì˜ íŒŒë¹„ì½˜ 다운로드 +- +- +- Apply selected icon to subgroups and entries +- ì„ íƒí•œ ì•„ì´ì½˜ì„ 하위 그룹과 í•­ëª©ì— ì ìš© +- +- +- Also apply to child groups +- 하위 그룹ì—ë„ ì ìš© +- +- +- Also apply to child entries +- 하위 항목ì—ë„ ì ìš© +- +- +- Also apply to all children +- 모든 하위 항목ì—ë„ ì ìš© +- +- +- Existing icon selected. +- 기존 ì•„ì´ì½˜ì„ ì„ íƒí–ˆìŠµë‹ˆë‹¤. +- +- +- Use default icon +- 기본 ì•„ì´ì½˜ 사용 +- +- +- Use custom icon +- ì‚¬ìš©ìž ì •ì˜ ì•„ì´ì½˜ 사용 +- +- +- Apply icon to... +- 다ìŒì— ì•„ì´ì½˜ ì ìš©... +- +- +- Apply to this group only +- ì´ ê·¸ë£¹ì—만 ì ìš© +- +- +- +- EditWidgetProperties +- +- Created: +- 만든 날짜: +- +- +- Modified: +- 수정한 날짜: +- +- +- Accessed: +- 접근한 날짜: +- +- +- Uuid: +- UUID: +- +- +- Plugin Data +- í”ŒëŸ¬ê·¸ì¸ ë°ì´í„° +- +- +- Remove +- ì‚­ì œ +- +- +- Delete plugin data? +- í”ŒëŸ¬ê·¸ì¸ ë°ì´í„°ë¥¼ 삭제하시겠습니까? +- +- +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- ì„ íƒí•œ í”ŒëŸ¬ê·¸ì¸ ë°ì´í„°ë¥¼ 삭제하시겠습니까? +-ì˜í–¥ë°›ëŠ” 플러그ì¸ì´ 제대로 ë™ìž‘하지 ì•Šì„ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. +- +- +- Key +- 키 +- +- +- Value +- ê°’ +- +- +- Datetime created +- 만든 날짜 +- +- +- Datetime modified +- 수정한 날짜 +- +- +- Datetime accessed +- 접근한 날짜 +- +- +- Unique ID +- 고유 ID +- +- +- Plugin data +- í”ŒëŸ¬ê·¸ì¸ ë°ì´í„° +- +- +- Remove selected plugin data +- ì„ íƒí•œ í”ŒëŸ¬ê·¸ì¸ ë°ì´í„° ì‚­ì œ +- +- +- +- Entry +- +- %1 - Clone +- %1 - 사본 +- +- +- +- EntryAttachmentsModel +- +- Name +- ì´ë¦„ +- +- +- Size +- í¬ê¸° +- +- +- +- EntryAttachmentsWidget +- +- Form +- í¼ +- +- +- Add +- 추가 +- +- +- Remove +- ì‚­ì œ +- +- +- Open +- 열기 +- +- +- Save +- 저장 +- +- +- Select files +- íŒŒì¼ ì„ íƒ +- +- +- Are you sure you want to remove %n attachment(s)? +- 첨부 항목 %n개를 삭제하시겠습니까? +- +- +- Save attachments +- 첨부 항목 저장 +- +- +- Unable to create directory: +-%1 +- 디렉터리를 만들 수 ì—†ìŒ: +-%1 +- +- +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- 기존 íŒŒì¼ "%1"ì˜ ë‚´ìš©ì„ ì²¨ë¶€ 항목으로 ë®ì–´ 쓰시겠습니까? +- +- +- Confirm overwrite +- ë®ì–´ì“°ê¸° í™•ì¸ +- +- +- Unable to save attachments: +-%1 +- 첨부 í•­ëª©ì„ ì €ìž¥í•  수 ì—†ìŒ: +-%1 +- +- +- Unable to open attachment: +-%1 +- 첨부 í•­ëª©ì„ ì—´ 수 ì—†ìŒ: +-%1 +- +- +- Unable to open attachments: +-%1 +- 첨부 í•­ëª©ì„ ì—´ 수 ì—†ìŒ: +-%1 +- +- +- Confirm remove +- ì‚­ì œ í™•ì¸ +- +- +- Unable to open file(s): +-%1 +- 파ì¼ì„ ì—´ 수 ì—†ìŒ: +-%1 +- +- +- Attachments +- 첨부 +- +- +- Add new attachment +- 새 첨부 íŒŒì¼ ì¶”ê°€ +- +- +- Remove selected attachment +- ì„ íƒí•œ 첨부 íŒŒì¼ ì‚­ì œ +- +- +- Open selected attachment +- ì„ íƒí•œ 첨부 íŒŒì¼ ì—´ê¸° +- +- +- Save selected attachment to disk +- ì„ íƒí•œ 첨부 íŒŒì¼ ì €ìž¥ +- +- +- %1 is a big file (%2 MB). +-Your database may get very large and reduce performance. +- +-Are you sure to add this file? +- íŒŒì¼ %1ì´(ê°€) í½ë‹ˆë‹¤(%2 MB). +-ë°ì´í„°ë² ì´ìŠ¤ í¬ê¸°ê°€ 커질 ìˆ˜ë„ ìžˆìœ¼ë©° ì„±ëŠ¥ì´ ì €í•˜ë  ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. +- +-ì´ íŒŒì¼ì„ 추가하시겠습니까? +- +- +- Confirm Attachment +- 첨부 í™•ì¸ +- +- +- +- EntryAttributesModel +- +- Name +- ì´ë¦„ +- +- +- +- EntryHistoryModel +- +- Last modified +- 마지막 수정 +- +- +- Title +- 제목 +- +- +- Username +- ì‚¬ìš©ìž ì´ë¦„ +- +- +- URL +- URL +- +- +- +- EntryModel +- +- Ref: +- Reference abbreviation +- 참조: +- +- +- Group +- 그룹 +- +- +- Title +- 제목 +- +- +- Username +- ì‚¬ìš©ìž ì´ë¦„ +- +- +- URL +- URL +- +- +- Never +- 하지 ì•ŠìŒ +- +- +- Password +- 암호 +- +- +- Notes +- 메모 +- +- +- Expires +- 만료 기간 +- +- +- Created +- ìƒì„± +- +- +- Modified +- ìˆ˜ì •ë¨ +- +- +- Accessed +- 접근함 +- +- +- Attachments +- 첨부 +- +- +- Size +- í¬ê¸° +- +- +- Group name +- 그룹 ì´ë¦„ +- +- +- Entry title +- 항목 ì´ë¦„ +- +- +- Entry notes +- 항목 메모 +- +- +- Entry expires at +- 항목 만료 시간 +- +- +- Creation date +- 만든 날짜 +- +- +- Last modification date +- 마지막 수정한 날짜 +- +- +- Last access date +- 마지막 접근한 날짜 +- +- +- Attached files +- ì²¨ë¶€ëœ íŒŒì¼ +- +- +- Entry size +- 항목 í¬ê¸° +- +- +- Has attachments +- 첨부 항목 ìžˆìŒ +- +- +- Has TOTP one-time password +- TOTP ì¼íšŒìš© 암호 ìžˆìŒ +- +- +- +- EntryPreviewWidget +- +- Close +- 닫기 +- +- +- General +- ì¼ë°˜ +- +- +- Username +- ì‚¬ìš©ìž ì´ë¦„ +- +- +- Password +- 암호 +- +- +- Expiration +- 만료 +- +- +- URL +- URL +- +- +- Attributes +- ì†ì„± +- +- +- Attachments +- 첨부 +- +- +- Notes +- 메모 +- +- +- Autotype +- ìžë™ ìž…ë ¥ +- +- +- Window +- ì°½ +- +- +- Sequence +- 순서 +- +- +- Searching +- 찾기 +- +- +- Search +- 찾기 +- +- +- Clear +- 비우기 +- +- +- Never +- 하지 ì•ŠìŒ +- +- +- [PROTECTED] +- [보호ë¨] +- +- +- Enabled +- 사용함 +- +- +- Disabled +- 사용 안함 +- +- +- Share +- 공유 +- +- +- Display current TOTP value +- 현재 TOTP ê°’ 표시 +- +- +- Advanced +- 고급 +- +- +- Default Sequence +- +- +- +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- attributes line +- +- +- +- +- EntryURLModel +- +- Invalid URL +- ìž˜ëª»ëœ URL +- +- +- +- EntryView +- +- Fit to window +- ì°½ì— ë§žì¶¤ +- +- +- Fit to contents +- ë‚´ìš©ì— ë§žì¶¤ +- +- +- Reset to defaults +- 기본값으로 ë³µì› +- +- +- Has attachments +- Entry attachment icon toggle +- 첨부 ìžˆìŒ +- +- +- Has TOTP +- Entry TOTP icon toggle +- TOTP ìžˆìŒ +- +- +- +- FdoSecrets::Item +- +- Entry "%1" from database "%2" was used by %3 +- %3ì´(ê°€) ë°ì´í„°ë² ì´ìŠ¤ "%2"ì˜ í•­ëª© "%1"ì„(를) 사용함 +- +- +- +- FdoSecrets::Service +- +- Failed to register DBus service at %1.<br/> +- %1ì— DBus 서비스를 등ë¡í•  수 없습니다.<br/> +- +- +- %n Entry(s) was used by %1 +- %1 is the name of an application +- %1ì—ì„œ 항목 %nê°œ 사용함 +- +- +- +- FdoSecrets::SettingsDatabaseModel +- +- File Name +- íŒŒì¼ ì´ë¦„ +- +- +- Group +- 그룹 +- +- +- Manage +- 관리 +- +- +- Unlock to show +- 잠금 해제해서 보기 +- +- +- None +- ì—†ìŒ +- +- +- +- FdoSecrets::SettingsSessionModel +- +- Application +- 프로그램 +- +- +- Manage +- 관리 +- +- +- +- FdoSecretsPlugin +- +- <b>Fdo Secret Service:</b> %1 +- <b>Fdo 비밀 서비스:</b> %1 +- +- +- Unknown +- Unknown PID +- ì•Œ 수 ì—†ìŒ +- +- +- Unknown +- Unknown executable path +- ì•Œ 수 ì—†ìŒ +- +- +- <i>PID: %1, Executable: %2</i> +- <i>PID: 1234, Executable: /path/to/exe</i> +- <i>PID: %1, 실행 파ì¼: %2</i> +- +- +- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. +- 다른 비밀 서비스(%1)ê°€ 실행 중입니다.<br/>비밀 서비스 í†µí•©ì„ ë‹¤ì‹œ 활성화하기 ì „ì— ì •ì§€/삭제하십시오. +- +- +- +- Group +- +- [empty] +- group has no children +- [비어 있ìŒ] +- +- +- +- HibpDownloader +- +- Online password validation failed +- 온ë¼ì¸ 암호 ê²€ì¦ ì‹¤íŒ¨ +- +- +- +- IconDownloaderDialog +- +- Download Favicons +- 파비콘 다운로드 +- +- +- Cancel +- 취소 +- +- +- Having trouble downloading icons? +-You can enable the DuckDuckGo website icon service in the security section of the application settings. +- ë‹¤ìš´ë¡œë“œì— ë¬¸ì œê°€ 있나요? +-프로그램 ì„¤ì •ì˜ ë³´ì•ˆ 부분ì—ì„œ DuckDuckGo 웹 사ì´íŠ¸ ì•„ì´ì½˜ 서비스를 활성화할 수 있습니다. +- +- +- Close +- 닫기 +- +- +- URL +- URL +- +- +- Status +- ìƒíƒœ +- +- +- Please wait, processing entry list... +- 기다려 주십시오. 항목 ëª©ë¡ ì²˜ë¦¬ 중... +- +- +- Downloading... +- 다운로드 중... +- +- +- Ok +- í™•ì¸ +- +- +- Already Exists +- ì´ë¯¸ 존재함 +- +- +- Download Failed +- 다운로드 실패 +- +- +- Downloading favicons (%1/%2)... +- 파비콘 다운로드 중(%1/%2)... +- +- +- +- KMessageWidget +- +- &Close +- 닫기(&C) +- +- +- Close message +- 메시지 닫기 +- +- +- +- Kdbx3Reader +- +- missing database headers +- ë°ì´í„°ë² ì´ìŠ¤ í—¤ë” ì—†ìŒ +- +- +- Header doesn't match hash +- í—¤ë”ì˜ í•´ì‹œê°€ ì¼ì¹˜í•˜ì§€ ì•ŠìŒ +- +- +- Invalid header id size +- ìž˜ëª»ëœ í—¤ë” ID í¬ê¸° +- +- +- Invalid header field length +- ìž˜ëª»ëœ í—¤ë” í•„ë“œ ê¸¸ì´ +- +- +- Invalid header data length +- ìž˜ëª»ëœ í—¤ë” ë°ì´í„° ê¸¸ì´ +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- ì¸ì¦ ì •ë³´ê°€ 잘못ë˜ì—ˆìŠµë‹ˆë‹¤. 다시 ì‹œë„하십시오. +-ê°™ì€ ì˜¤ë¥˜ê°€ ê³„ì† ë°œìƒí•œë‹¤ë©´ ë°ì´í„°ë² ì´ìŠ¤ 파ì¼ì´ ì†ìƒë˜ì—ˆì„ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. +- +- +- Unable to calculate database key +- ë°ì´í„°ë² ì´ìŠ¤ 키를 계산할 수 ì—†ìŒ +- +- +- Unable to issue challenge-response: %1 +- Challenge-Response를 ìƒì„±í•  수 ì—†ìŒ: %1 +- +- +- +- Kdbx3Writer +- +- Unable to issue challenge-response: %1 +- Challenge-Response를 ìƒì„±í•  수 ì—†ìŒ: %1 +- +- +- Unable to calculate database key +- ë°ì´í„°ë² ì´ìŠ¤ 키를 계산할 수 ì—†ìŒ +- +- +- +- Kdbx4Reader +- +- missing database headers +- ë°ì´í„°ë² ì´ìŠ¤ í—¤ë” ì—†ìŒ +- +- +- Invalid header checksum size +- ìž˜ëª»ëœ í—¤ë” ì²´í¬ì„¬ í¬ê¸° +- +- +- Header SHA256 mismatch +- í—¤ë” SHA256ì´ ì¼ì¹˜í•˜ì§€ ì•ŠìŒ +- +- +- Unknown cipher +- ì•Œ 수 없는 암호화 +- +- +- Invalid header id size +- ìž˜ëª»ëœ í—¤ë” ID í¬ê¸° +- +- +- Invalid header field length +- ìž˜ëª»ëœ í—¤ë” í•„ë“œ ê¸¸ì´ +- +- +- Invalid header data length +- ìž˜ëª»ëœ í—¤ë” ë°ì´í„° ê¸¸ì´ +- +- +- Failed to open buffer for KDF parameters in header +- í—¤ë”ì— ìžˆëŠ” 키 ìœ ë„ í•¨ìˆ˜ ì¸ìžì— 필요한 버í¼ë¥¼ ì—´ 수 ì—†ìŒ +- +- +- Unsupported key derivation function (KDF) or invalid parameters +- 지ì›í•˜ì§€ 않는 키 ìœ ë„ í•¨ìˆ˜(KDF) ë° ìž˜ëª»ëœ ì¸ìž +- +- +- Legacy header fields found in KDBX4 file. +- KDBX4 파ì¼ì— 레거시 í—¤ë” í•„ë“œê°€ 있습니다. +- +- +- Invalid inner header id size +- ìž˜ëª»ëœ ë‚´ë¶€ í—¤ë” ID í¬ê¸° +- +- +- Invalid inner header field length +- ìž˜ëª»ëœ ë‚´ë¶€ í—¤ë” í•„ë“œ ê¸¸ì´ +- +- +- Invalid inner header binary size +- ìž˜ëª»ëœ ë‚´ë¶€ í—¤ë” ë°”ì´ë„ˆë¦¬ í¬ê¸° +- +- +- Unsupported KeePass variant map version. +- Translation: variant map = data structure for storing meta data +- 지ì›í•˜ì§€ 않는 KeePass 메타ë°ì´í„° 저장소 버전입니다. +- +- +- Invalid variant map entry name length +- Translation: variant map = data structure for storing meta data +- ìž˜ëª»ëœ ë©”íƒ€ë°ì´í„° 저장소 항목 ì´ë¦„ ê¸¸ì´ +- +- +- Invalid variant map entry name data +- Translation: variant map = data structure for storing meta data +- ìž˜ëª»ëœ ë©”íƒ€ë°ì´í„° 저장소 ì´ë¦„ ë°ì´í„° +- +- +- Invalid variant map entry value length +- Translation: variant map = data structure for storing meta data +- ìž˜ëª»ëœ ë©”íƒ€ë°ì´í„° 저장소 ê°’ ê¸¸ì´ +- +- +- Invalid variant map entry value data +- Translation comment: variant map = data structure for storing meta data +- ìž˜ëª»ëœ ë©”íƒ€ë°ì´í„° 저장소 ê°’ ë°ì´í„° +- +- +- Invalid variant map Bool entry value length +- Translation: variant map = data structure for storing meta data +- ìž˜ëª»ëœ ë©”íƒ€ë°ì´í„° 저장소 Bool 항목 ê°’ ê¸¸ì´ +- +- +- Invalid variant map Int32 entry value length +- Translation: variant map = data structure for storing meta data +- ìž˜ëª»ëœ ë©”íƒ€ë°ì´í„° 저장소 Int32 항목 ê°’ ê¸¸ì´ +- +- +- Invalid variant map UInt32 entry value length +- Translation: variant map = data structure for storing meta data +- ìž˜ëª»ëœ ë©”íƒ€ë°ì´í„° 저장소 UInt32 항목 ê°’ ê¸¸ì´ +- +- +- Invalid variant map Int64 entry value length +- Translation: variant map = data structure for storing meta data +- ìž˜ëª»ëœ ë©”íƒ€ë°ì´í„° 저장소 Int64 항목 ê°’ ê¸¸ì´ +- +- +- Invalid variant map UInt64 entry value length +- Translation: variant map = data structure for storing meta data +- ìž˜ëª»ëœ ë©”íƒ€ë°ì´í„° 저장소 UInt64 항목 ê°’ ê¸¸ì´ +- +- +- Invalid variant map entry type +- Translation: variant map = data structure for storing meta data +- ìž˜ëª»ëœ ë©”íƒ€ë°ì´í„° 저장소 항목 í˜•ì‹ +- +- +- Invalid variant map field type size +- Translation: variant map = data structure for storing meta data +- ìž˜ëª»ëœ ë©”íƒ€ë°ì´í„° 저장소 í•„ë“œ í˜•ì‹ í¬ê¸° +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- ì¸ì¦ ì •ë³´ê°€ 잘못ë˜ì—ˆìŠµë‹ˆë‹¤. 다시 ì‹œë„하십시오. +-ê°™ì€ ì˜¤ë¥˜ê°€ ê³„ì† ë°œìƒí•œë‹¤ë©´ ë°ì´í„°ë² ì´ìŠ¤ 파ì¼ì´ ì†ìƒë˜ì—ˆì„ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. +- +- +- (HMAC mismatch) +- (HMAC ì¼ì¹˜í•˜ì§€ ì•ŠìŒ) +- +- +- Unable to calculate database key: %1 +- ë°ì´í„°ë² ì´ìŠ¤ 키를 계산할 수 ì—†ìŒ: %1 +- +- +- +- Kdbx4Writer +- +- Invalid symmetric cipher algorithm. +- ìž˜ëª»ëœ ëŒ€ì¹­ 키 암호화 알고리즘입니다. +- +- +- Invalid symmetric cipher IV size. +- IV = Initialization Vector for symmetric cipher +- ìž˜ëª»ëœ ëŒ€ì¹­ 키 암호화 IV í¬ê¸°ìž…니다. +- +- +- Failed to serialize KDF parameters variant map +- Translation comment: variant map = data structure for storing meta data +- 키 ìœ ë„ í•¨ìˆ˜ ì¸ìž 메타ë°ì´í„° 저장소를 ì§ë ¬í™”í•  수 ì—†ìŒ +- +- +- Unable to calculate database key: %1 +- ë°ì´í„°ë² ì´ìŠ¤ 키를 계산할 수 ì—†ìŒ: %1 +- +- +- +- KdbxReader +- +- Unsupported cipher +- 지ì›í•˜ì§€ 않는 암호화 +- +- +- Invalid compression flags length +- ìž˜ëª»ëœ ì••ì¶• 플래그 ê¸¸ì´ +- +- +- Unsupported compression algorithm +- 지ì›í•˜ì§€ 않는 압축 알고리즘 +- +- +- Invalid master seed size +- ìž˜ëª»ëœ ë§ˆìŠ¤í„° 시드 í¬ê¸° +- +- +- Invalid transform seed size +- ìž˜ëª»ëœ ë³€í˜• 시드 í¬ê¸° +- +- +- Invalid transform rounds size +- ìž˜ëª»ëœ ë³€í˜• ë¼ìš´ë“œ í¬ê¸° +- +- +- Invalid start bytes size +- ìž˜ëª»ëœ ì‹œìž‘ ë°”ì´íŠ¸ í¬ê¸° +- +- +- Invalid random stream id size +- ìž˜ëª»ëœ ë¬´ìž‘ìœ„ 스트림 ID í¬ê¸° +- +- +- Invalid inner random stream cipher +- ìž˜ëª»ëœ ë‚´ë¶€ 무작위 스트림 암호화 +- +- +- Not a KeePass database. +- KeePass ë°ì´í„°ë² ì´ìŠ¤ê°€ 아닙니다. +- +- +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- ì„ íƒí•œ 파ì¼ì€ KeePass 1 ë°ì´í„°ë² ì´ìŠ¤(.kdb)입니다. +- +-ë°ì´í„°ë² ì´ìŠ¤ > 'KeePass 1 ë°ì´í„°ë² ì´ìŠ¤ 가져오기...' 메뉴ì—ì„œ í•­ëª©ì„ ê°€ì ¸ì˜¬ 수 있습니다. +-ì´ ìž‘ì—…ì€ í•œ 방향으로만 ì´ë¤„집니다. 가져온 ë°ì´í„°ë² ì´ìŠ¤ëŠ” KeePassX 0.4 버전ì—ì„œ ì—´ 수 없습니다. +- +- +- Unsupported KeePass 2 database version. +- 지ì›í•˜ì§€ 않는 KeePass 2 ë°ì´í„°ë² ì´ìŠ¤ 버전입니다. +- +- +- Invalid cipher uuid length: %1 (length=%2) +- ìž˜ëª»ëœ ì•”í˜¸í™” UUID 길ì´: %1(length=%2) +- +- +- Unable to parse UUID: %1 +- UUID를 처리할 수 ì—†ìŒ: %1 +- +- +- Failed to read database file. +- ë°ì´í„°ë² ì´ìŠ¤ 파ì¼ì„ ì½ì„ 수 없습니다. +- +- +- +- KdbxXmlReader +- +- XML parsing failure: %1 +- XML 처리 실패: %1 +- +- +- No root group +- 루트 그룹 ì—†ìŒ +- +- +- Missing icon uuid or data +- ì•„ì´ì½˜ UUID나 ë°ì´í„° ì—†ìŒ +- +- +- Missing custom data key or value +- ì‚¬ìš©ìž ì •ì˜ ë°ì´í„° 키나 ê°’ì´ ì—†ìŒ +- +- +- Multiple group elements +- 여러 ê°œì˜ ê·¸ë£¹ ì›ì†Œ +- +- +- Null group uuid +- 빈 그룹 UUID +- +- +- Invalid group icon number +- ìž˜ëª»ëœ ê·¸ë£¹ ì•„ì´ì½˜ 번호 +- +- +- Invalid EnableAutoType value +- ìž˜ëª»ëœ EnableAutoType ê°’ +- +- +- Invalid EnableSearching value +- ìž˜ëª»ëœ EnableSearching ê°’ +- +- +- No group uuid found +- 그룹 UUID를 ì°¾ì„ ìˆ˜ ì—†ìŒ +- +- +- Null DeleteObject uuid +- 비어 있는 DeleteObject UUID +- +- +- Missing DeletedObject uuid or time +- DeletedObject UUID나 ì‹œê°„ì´ ì—†ìŒ +- +- +- Null entry uuid +- 빈 항목 UUID +- +- +- Invalid entry icon number +- ìž˜ëª»ëœ í•­ëª© ì•„ì´ì½˜ 번호 +- +- +- History element in history entry +- 과거 ê¸°ë¡ í•­ëª©ì˜ ê³¼ê±° ê¸°ë¡ ì›ì†Œ +- +- +- No entry uuid found +- 항목 UUID를 ì°¾ì„ ìˆ˜ ì—†ìŒ +- +- +- History element with different uuid +- 다른 UUID를 사용하는 과거 ê¸°ë¡ ì›ì†Œ +- +- +- Duplicate custom attribute found +- ì¤‘ë³µëœ ì‚¬ìš©ìž ì •ì˜ ì†ì„±ì´ ìžˆìŒ +- +- +- Entry string key or value missing +- 항목 문ìžì—´ 키나 ê°’ì´ ì—†ìŒ +- +- +- Entry binary key or value missing +- 항목 ë°”ì´ë„ˆë¦¬ 키나 ê°’ì´ ì—†ìŒ +- +- +- Auto-type association window or sequence missing +- ìžë™ ìž…ë ¥ ì—°ê²° ì°½ì´ë‚˜ 순서가 ì—†ìŒ +- +- +- Invalid bool value +- ìž˜ëª»ëœ ì´ì§„ê°’ +- +- +- Invalid date time value +- ìž˜ëª»ëœ ë‚ ì§œ/시간 ê°’ +- +- +- Invalid color value +- ìž˜ëª»ëœ ìƒ‰ìƒ ê°’ +- +- +- Invalid color rgb part +- ìž˜ëª»ëœ ìƒ‰ìƒ RGB 부분 +- +- +- Invalid number value +- ìž˜ëª»ëœ ìˆ«ìž ê°’ +- +- +- Invalid uuid value +- ìž˜ëª»ëœ UUID ê°’ +- +- +- Unable to decompress binary +- Translator meant is a binary data inside an entry +- ë°”ì´ë„ˆë¦¬ ì••ì¶•ì„ í•´ì œí•  수 ì—†ìŒ +- +- +- XML error: +-%1 +-Line %2, column %3 +- XML 오류: +-%1 +-%2줄, %3칸 +- +- +- +- KeeAgentSettings +- +- Invalid KeeAgent settings file structure. +- KeeAgent 설정 íŒŒì¼ êµ¬ì¡°ê°€ 잘못ë˜ì—ˆìŠµë‹ˆë‹¤. +- +- +- Private key is an attachment but no attachments provided. +- 비밀 키를 ì²¨ë¶€ëœ í•­ëª©ì—ì„œ 사용하기로 했으나 ì²¨ë¶€ëœ í•­ëª©ì„ ì§€ì •í•˜ì§€ 않았습니다. +- +- +- Private key is empty +- 비밀 키가 비어 ìžˆìŒ +- +- +- File too large to be a private key +- 비밀 키로 ì‚¬ìš©í•˜ê¸°ì— íŒŒì¼ì´ 너무 í¼ +- +- +- Failed to open private key +- 비밀 키를 ì—´ 수 ì—†ìŒ +- +- +- +- KeePass1OpenWidget +- +- Unable to open the database. +- ë°ì´í„°ë² ì´ìŠ¤ë¥¼ ì—´ 수 없습니다. +- +- +- Import KeePass1 Database +- KeePass1 ë°ì´í„°ë² ì´ìŠ¤ 가져오기 +- +- +- +- KeePass1Reader +- +- Unable to read keyfile. +- 키 파ì¼ì„ ì½ì„ 수 없습니다. +- +- +- Not a KeePass database. +- KeePass ë°ì´í„°ë² ì´ìŠ¤ê°€ 아닙니다. +- +- +- Unsupported encryption algorithm. +- 지ì›í•˜ì§€ 않는 암호화 알고리즘입니다. +- +- +- Unsupported KeePass database version. +- 지ì›í•˜ì§€ 않는 KeePass ë°ì´í„°ë² ì´ìŠ¤ 버전입니다. +- +- +- Unable to read encryption IV +- IV = Initialization Vector for symmetric cipher +- 암호화 IV를 ì½ì„ 수 ì—†ìŒ +- +- +- Invalid number of groups +- ìž˜ëª»ëœ ê·¸ë£¹ 개수 +- +- +- Invalid number of entries +- ìž˜ëª»ëœ í•­ëª© 개수 +- +- +- Invalid content hash size +- ìž˜ëª»ëœ ë‚´ìš© í•´ì‹œ í¬ê¸° +- +- +- Invalid transform seed size +- ìž˜ëª»ëœ ë³€í˜• 시드 í¬ê¸° +- +- +- Invalid number of transform rounds +- ìž˜ëª»ëœ ë³€í˜• ë¼ìš´ë“œ í¬ê¸° +- +- +- Unable to construct group tree +- 그룹 트리를 만들 수 ì—†ìŒ +- +- +- Root +- 루트 +- +- +- Key transformation failed +- 키 변형 실패 +- +- +- Invalid group field type number +- ìž˜ëª»ëœ ê·¸ë£¹ í•„ë“œ í˜•ì‹ ë²ˆí˜¸ +- +- +- Invalid group field size +- ìž˜ëª»ëœ ê·¸ë£¹ í•„ë“œ í¬ê¸° +- +- +- Read group field data doesn't match size +- ì½ì€ 그룹 í•„ë“œ ë°ì´í„°ì™€ í¬ê¸°ê°€ ì¼ì¹˜í•˜ì§€ ì•ŠìŒ +- +- +- Incorrect group id field size +- ìž˜ëª»ëœ ê·¸ë£¹ ID í•„ë“œ í¬ê¸° +- +- +- Incorrect group creation time field size +- ìž˜ëª»ëœ ê·¸ë£¹ ìƒì„± 시간 í•„ë“œ í¬ê¸° +- +- +- Incorrect group modification time field size +- ìž˜ëª»ëœ ê·¸ë£¹ 수정 시간 í•„ë“œ í¬ê¸° +- +- +- Incorrect group access time field size +- ìž˜ëª»ëœ ê·¸ë£¹ ì ‘ê·¼ 시간 í•„ë“œ í¬ê¸° +- +- +- Incorrect group expiry time field size +- ìž˜ëª»ëœ ê·¸ë£¹ 만료 시간 í•„ë“œ í¬ê¸° +- +- +- Incorrect group icon field size +- ìž˜ëª»ëœ ê·¸ë£¹ ì•„ì´ì½˜ í•„ë“œ í¬ê¸° +- +- +- Incorrect group level field size +- ìž˜ëª»ëœ ê·¸ë£¹ 단계 í•„ë“œ í¬ê¸° +- +- +- Invalid group field type +- ìž˜ëª»ëœ ê·¸ë£¹ í•„ë“œ 형싞 +- +- +- Missing group id or level +- 그룹 ID나 단계가 ì—†ìŒ +- +- +- Missing entry field type number +- 그룹 항목 í˜•ì‹ ë²ˆí˜¸ê°€ ì—†ìŒ +- +- +- Invalid entry field size +- ìž˜ëª»ëœ í•­ëª© í•„ë“œ í¬ê¸° +- +- +- Read entry field data doesn't match size +- ì½ì€ 항목 í•„ë“œ ë°ì´í„°ì™€ í¬ê¸°ê°€ ì¼ì¹˜í•˜ì§€ ì•ŠìŒ +- +- +- Invalid entry uuid field size +- ìž˜ëª»ëœ í•­ëª© UUID í•„ë“œ í¬ê¸° +- +- +- Invalid entry group id field size +- ìž˜ëª»ëœ í•­ëª© 그룹 ID í•„ë“œ í¬ê¸° +- +- +- Invalid entry icon field size +- ìž˜ëª»ëœ í•­ëª© ì•„ì´ì½˜ í•„ë“œ í¬ê¸° +- +- +- Invalid entry creation time field size +- ìž˜ëª»ëœ í•­ëª© ìƒì„± 시간 í•„ë“œ í¬ê¸° +- +- +- Invalid entry modification time field size +- ìž˜ëª»ëœ í•­ëª© 수정 시간 í•„ë“œ í¬ê¸° +- +- +- Invalid entry expiry time field size +- ìž˜ëª»ëœ í•­ëª© 만료 시간 í•„ë“œ í¬ê¸° +- +- +- Invalid entry field type +- ìž˜ëª»ëœ í•­ëª© í•„ë“œ í¬ê¸° +- +- +- unable to seek to content position +- ë‚´ìš© 위치로 ì´ë™í•  수 ì—†ìŒ +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- ì¸ì¦ ì •ë³´ê°€ 잘못ë˜ì—ˆìŠµë‹ˆë‹¤. 다시 ì‹œë„하십시오. +-ê°™ì€ ì˜¤ë¥˜ê°€ ê³„ì† ë°œìƒí•œë‹¤ë©´ ë°ì´í„°ë² ì´ìŠ¤ 파ì¼ì´ ì†ìƒë˜ì—ˆì„ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. +- +- +- Unable to calculate database key +- ë°ì´í„°ë² ì´ìŠ¤ 키를 계산할 수 ì—†ìŒ +- +- +- +- KeeShare +- +- Invalid sharing reference +- ìž˜ëª»ëœ ê³µìœ  참조 +- +- +- Inactive share %1 +- 비활성 공유 %1 +- +- +- Imported from %1 +- %1ì—ì„œ 가져옴 +- +- +- Exported to %1 +- %1(으)ë¡œ 내보냄 +- +- +- Synchronized with %1 +- %1와(ê³¼) ë™ê¸°í™”ë¨ +- +- +- Import is disabled in settings +- 설정ì—ì„œ 가져오기가 ë¹„í™œì„±í™”ë¨ +- +- +- Export is disabled in settings +- 설정ì—ì„œ 내보내기가 ë¹„í™œì„±í™”ë¨ +- +- +- Inactive share +- 비활성 공유 +- +- +- Imported from +- 가져온 위치: +- +- +- Exported to +- 내보낸 위치: +- +- +- Synchronized with +- ë™ê¸°í™” 대ìƒ: +- +- +- +- KeyComponentWidget +- +- Key Component +- 키 구성 요소 +- +- +- Key Component Description +- 키 구성 요소 설명 +- +- +- Cancel +- 취소 +- +- +- Key Component set, click to change or remove +- 키 구성 요소 집합, 눌러서 변경하거나 ì‚­ì œ +- +- +- Add %1 +- Add a key component +- %1 추가 +- +- +- Change %1 +- Change a key component +- %1 변경 +- +- +- Remove %1 +- Remove a key component +- %1 ì‚­ì œ +- +- +- %1 set, click to change or remove +- Change or remove a key component +- %1 설정ë¨, 눌러서 변경 ë° ì‚­ì œ +- +- +- +- KeyFileEditWidget +- +- Generate +- ìƒì„± +- +- +- Key File +- 키 íŒŒì¼ +- +- +- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> +- <p>무작위 ë°”ì´íŠ¸ê°€ 들어 있는 키 파ì¼ì„ 추가하여 ë³´ì•ˆì„ í–¥ìƒì‹œí‚¬ 수 있습니다.</p><p>키 파ì¼ì„ 안전한 ê³³ì— ë³´ê´€í•´ì•¼ 하며 키 파ì¼ì„ 잃어버리면 ë°ì´í„°ë² ì´ìŠ¤ì— 접근할 수 없습니다!</p> +- +- +- Error loading the key file '%1' +-Message: %2 +- 키 íŒŒì¼ '%1'ì„(를) 불러올 수 ì—†ìŒ +-메시지: %2 +- +- +- Key files +- 키 íŒŒì¼ +- +- +- All files +- 모든 íŒŒì¼ +- +- +- Create Key File... +- 키 íŒŒì¼ ë§Œë“¤ê¸°... +- +- +- Error creating key file +- 키 íŒŒì¼ ìƒì„± 오류 +- +- +- Unable to create key file: %1 +- 키 파ì¼ì„ 만들 수 ì—†ìŒ: %1 +- +- +- Select a key file +- 키 íŒŒì¼ ì„ íƒ +- +- +- Key file selection +- 키 íŒŒì¼ ì„ íƒ +- +- +- Browse for key file +- 키 íŒŒì¼ ì°¾ì•„ë³´ê¸° +- +- +- Browse... +- 찾아보기... +- +- +- Generate a new key file +- 새 키 íŒŒì¼ ìƒì„± +- +- +- Note: Do not use a file that may change as that will prevent you from unlocking your database! +- 메모: ë³€ê²½ë  ìˆ˜ 있는 파ì¼ì„ 사용하면 ë‚˜ì¤‘ì— ë°ì´í„°ë² ì´ìŠ¤ì˜ ìž ê¸ˆì„ í•´ì œí•˜ì§€ 못할 ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤! +- +- +- Invalid Key File +- ìž˜ëª»ëœ í‚¤ íŒŒì¼ +- +- +- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. +- ë°ì´í„°ë² ì´ìŠ¤ 파ì¼ì„ ìžê¸° ìžì‹ ì˜ 키 파ì¼ë¡œ 사용할 수 없습니다. 다른 파ì¼ì„ ì„ íƒí•˜ê±°ë‚˜ 새 키 파ì¼ì„ ìƒì„±í•˜ì‹­ì‹œì˜¤. +- +- +- Suspicious Key File +- ì˜ì‹¬ë˜ëŠ” 키 íŒŒì¼ +- +- +- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. +-Are you sure you want to continue with this file? +- ì„ íƒí•œ 키 파ì¼ì´ 암호 ë°ì´í„°ë² ì´ìŠ¤ íŒŒì¼ ê°™ìŠµë‹ˆë‹¤. 키 파ì¼ì€ 변경ë˜ì§€ ì•Šì„ íŒŒì¼ì´ì–´ì•¼ 하며 파ì¼ì´ 변경ë˜ë©´ ë°ì´í„°ë² ì´ìŠ¤ì— ë” ì´ìƒ 접근할 수 없습니다. +-ì´ íŒŒì¼ì„ ê·¸ëž˜ë„ ì‚¬ìš©í•˜ì‹œê² ìŠµë‹ˆê¹Œ? +- +- +- Old key file format +- +- +- +- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. +- +- +- +- +- MainWindow +- +- &Database +- ë°ì´í„°ë² ì´ìŠ¤(&D) +- +- +- &Help +- ë„움ë§(&H) +- +- +- &Groups +- 그룹(&G) +- +- +- &Tools +- ë„구(&T) +- +- +- &Quit +- ë내기(&Q) +- +- +- &About +- ì •ë³´(&A) +- +- +- Database settings +- ë°ì´í„°ë² ì´ìŠ¤ 설정 +- +- +- Copy username to clipboard +- í´ë¦½ë³´ë“œì— ì‚¬ìš©ìž ì´ë¦„ 복사 +- +- +- Copy password to clipboard +- í´ë¦½ë³´ë“œì— 암호 복사 +- +- +- &Settings +- 설정(&S) +- +- +- &Title +- 제목(&T) +- +- +- Copy title to clipboard +- í´ë¦½ë³´ë“œì— 제목 복사 +- +- +- &URL +- URL(&U) +- +- +- Copy URL to clipboard +- í´ë¦½ë³´ë“œì— URL 복사 +- +- +- &Notes +- 메모(&N) +- +- +- Copy notes to clipboard +- í´ë¦½ë³´ë“œì— 메모 복사 +- +- +- Copy &TOTP +- TOTP 복사(&T) +- +- +- E&mpty recycle bin +- 휴지통 비우기(&M) +- +- +- Clear history +- 과거 ê¸°ë¡ ì‚­ì œ +- +- +- Access error for config file %1 +- 설정 íŒŒì¼ %1ì— ì ‘ê·¼í•  수 ì—†ìŒ +- +- +- Settings +- 설정 +- +- +- Toggle window +- ì°½ 전환 +- +- +- Quit KeePassXC +- KeePassXC ë내기 +- +- +- Please touch the button on your YubiKey! +- YubiKeyì˜ ë‹¨ì¶”ë¥¼ 누르십시오! +- +- +- WARNING: You are using an unstable build of KeePassXC! +-There is a high risk of corruption, maintain a backup of your databases. +-This version is not meant for production use. +- 경고: KeePassXC 불안정 빌드를 사용하고 있습니다! +-ë°ì´í„°ë² ì´ìŠ¤ 파ì¼ì´ ìž˜ëª»ë  ê°€ëŠ¥ì„±ì´ ë†’ìœ¼ë¯€ë¡œ í•­ìƒ ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 백업하십시오. +-ì´ ë²„ì „ì€ ì‹¤ì œ 환경ì—ì„œ ì‚¬ìš©ì„ ê°€ì •í•˜ì§€ 않습니다. +- +- +- &Donate +- 기부(&D) +- +- +- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +-We recommend you use the AppImage available on our downloads page. +- 경고: 사용 ì¤‘ì¸ Qt 버전ì—ì„œ KeePassXC를 í™”ìƒ í‚¤ë³´ë“œì™€ ì‚¬ìš©í–ˆì„ ë•Œ 충ëŒí•  수 있습니다! +-다운로드 페ì´ì§€ì— 있는 AppImage ì‚¬ìš©ì„ ì¶”ì²œí•©ë‹ˆë‹¤. +- +- +- &Import +- 가져오기(&I) +- +- +- Create a new database +- 새 ë°ì´í„°ë² ì´ìŠ¤ 만들기 +- +- +- Merge from another KDBX database +- 다른 KDBX ë°ì´í„°ë² ì´ìŠ¤ì—ì„œ 합치기 +- +- +- Add a new entry +- 새 항목 추가하기 +- +- +- View or edit entry +- í•­ëª©ì„ ë³´ê±°ë‚˜ 편집하기 +- +- +- Add a new group +- 새 그룹 추가하기 +- +- +- Perform &Auto-Type +- ìžë™ ìž…ë ¥ 실행(&A) +- +- +- Open &URL +- URL 열기(&U) +- +- +- Import a KeePass 1 database +- KeePass 1 ë°ì´í„°ë² ì´ìŠ¤ 가져오기 +- +- +- Import a CSV file +- CSV íŒŒì¼ ê°€ì ¸ì˜¤ê¸° +- +- +- NOTE: You are using a pre-release version of KeePassXC! +-Expect some bugs and minor issues, this version is not meant for production use. +- 알림: KeePassXCì˜ ë¯¸ë¦¬ 보기 ë²„ì „ì„ ì‚¬ìš©í•˜ê³  있습니다! +-ì´ ë²„ì „ì€ ì¼ë°˜ ì‚¬ìš©ìž ëŒ€ìƒ ë²„ì „ì´ ì•„ë‹ˆë¯€ë¡œ 버그나 사소한 문제가 ë°œìƒí•  수 있습니다. +- +- +- Check for updates on startup? +- 시작할 ë•Œ ì—…ë°ì´íŠ¸ë¥¼ 확ì¸í•˜ì‹œê² ìŠµë‹ˆê¹Œ? +- +- +- Would you like KeePassXC to check for updates on startup? +- KeePassXC를 시작할 ë•Œ ì—…ë°ì´íŠ¸ë¥¼ 확ì¸í•˜ì‹œê² ìŠµë‹ˆê¹Œ? +- +- +- You can always check for updates manually from the application menu. +- 언제든지 프로그램 메뉴ì—ì„œ 수ë™ìœ¼ë¡œ ì—…ë°ì´íŠ¸ë¥¼ 확ì¸í•  수 있습니다. +- +- +- &Export +- 내보내기(&E) +- +- +- Sort &A-Z +- 가나다순 ì •ë ¬(&A) +- +- +- Sort &Z-A +- 가나다 역순 ì •ë ¬(&Z) +- +- +- &Password Generator +- 암호 ìƒì„±ê¸°(&P) +- +- +- Import a 1Password Vault +- 1Password Vault 가져오기 +- +- +- &Getting Started +- 시작하기(&G) +- +- +- &User Guide +- ì‚¬ìš©ìž ê°€ì´ë“œ(&U) +- +- +- &Keyboard Shortcuts +- 키보드 단축키(&K) +- +- +- &Recent Databases +- 최근 ë°ì´í„°ë² ì´ìŠ¤(&R) +- +- +- &Entries +- 항목(&E) +- +- +- Copy Att&ribute +- ì†ì„± 복사(&R) +- +- +- TOTP +- TOTP +- +- +- View +- 보기 +- +- +- Theme +- 테마 +- +- +- &Check for Updates +- ì—…ë°ì´íŠ¸ 확ì¸(&C) +- +- +- &Open Database… +- ë°ì´í„°ë² ì´ìŠ¤ 열기(&O)... +- +- +- &Save Database +- ë°ì´í„°ë² ì´ìŠ¤ 저장(&S) +- +- +- &Close Database +- ë°ì´í„°ë² ì´ìŠ¤ 닫기(&C) +- +- +- &New Database… +- 새 ë°ì´í„°ë² ì´ìŠ¤(&N)... +- +- +- &Merge From Database… +- ë°ì´í„°ë² ì´ìŠ¤ì—ì„œ 합치기(&M)... +- +- +- &New Entry… +- 새 항목(&N)... +- +- +- &Edit Entry… +- 항목 편집(&E)... +- +- +- &Delete Entry… +- 항목 ì‚­ì œ(&D)... +- +- +- &New Group… +- 새 그룹(&N)... +- +- +- &Edit Group… +- 그룹 편집(&E)... +- +- +- &Delete Group… +- 그룹 ì‚­ì œ(&D)... +- +- +- Download All &Favicons… +- 모든 파비콘 다운로드(&F)... +- +- +- Sa&ve Database As… +- 다른 ì´ë¦„으로 ë°ì´í„°ë² ì´ìŠ¤ 저장(&V)... +- +- +- Database &Security… +- ë°ì´í„°ë² ì´ìŠ¤ 보안(&S)... +- +- +- Database &Reports... +- ë°ì´í„°ë² ì´ìŠ¤ ë³´ê³ ì„œ(&R)... +- +- +- Statistics, health check, etc. +- 통계, 안전성 검사 등. +- +- +- &Database Settings… +- ë°ì´í„°ë² ì´ìŠ¤ 설정(&D)... +- +- +- &Clone Entry… +- 항목 복제(&C)... +- +- +- Move u&p +- 위로 ì´ë™(&P) +- +- +- Move entry one step up +- í•œ 단계 위로 항목 ì´ë™ +- +- +- Move do&wn +- 아래로 ì´ë™(&W) +- +- +- Move entry one step down +- í•œ 단계 아래로 항목 ì´ë™ +- +- +- Copy &Username +- ì‚¬ìš©ìž ì´ë¦„ 복사(&U) +- +- +- Copy &Password +- 암호 복사(&P) +- +- +- Download &Favicon +- 파비콘 다운로드(&F) +- +- +- &Lock Databases +- ë°ì´í„°ë² ì´ìŠ¤ 잠금(&L) +- +- +- &CSV File… +- CSV 파ì¼(&C)... +- +- +- &HTML File… +- HTML 파ì¼(&H)... +- +- +- KeePass 1 Database… +- KeePass 1 ë°ì´í„°ë² ì´ìŠ¤... +- +- +- 1Password Vault… +- 1Password Vault... +- +- +- CSV File… +- CSV 파ì¼... +- +- +- Show TOTP +- TOTP 표시 +- +- +- Show QR Code +- QR 코드 표시 +- +- +- Set up TOTP… +- TOTP 설정... +- +- +- Report a &Bug +- 버그 ë³´ê³ (&B) +- +- +- Open Getting Started Guide +- 시작하기 ë„ì›€ë§ ì—´ê¸° +- +- +- &Online Help +- 온ë¼ì¸ ë„움ë§(&O) +- +- +- Go to online documentation +- 온ë¼ì¸ 문서로 ì´ë™ +- +- +- Open User Guide +- ì‚¬ìš©ìž ê°€ì´ë“œ 열기 +- +- +- Save Database Backup... +- ë°ì´í„°ë² ì´ìŠ¤ 백업 저장... +- +- +- Add key to SSH Agent +- SSH ì—ì´ì „íŠ¸ì— í‚¤ 추가 +- +- +- Remove key from SSH Agent +- SSH ì—ì´ì „트ì—ì„œ 키 ì‚­ì œ +- +- +- Compact Mode +- 축소 모드 +- +- +- Automatic +- ìžë™ +- +- +- Light +- ë°ìŒ +- +- +- Dark +- ì–´ë‘움 +- +- +- Classic (Platform-native) +- ê³ ì „(í”Œëž«í¼ ë„¤ì´í‹°ë¸Œ) +- +- +- Show Toolbar +- ë„구 ëª¨ìŒ í‘œì‹œ +- +- +- Show Preview Panel +- 미리 보기 íŒ¨ë„ í‘œì‹œ +- +- +- Don't show again for this version +- ì´ ë²„ì „ì—ì„œ 다시 표시하지 않기 +- +- +- Restart Application? +- í”„ë¡œê·¸ëž¨ì„ ë‹¤ì‹œ 시작하시겠습니까? +- +- +- You must restart the application to apply this setting. Would you like to restart now? +- ì´ ì„¤ì •ì„ ì ìš©í•˜ë ¤ë©´ í”„ë¡œê·¸ëž¨ì„ ë‹¤ì‹œ 시작해야 합니다. 지금 다시 시작하시겠습니까? +- +- +- Perform Auto-Type Sequence +- +- +- +- {USERNAME} +- +- +- +- {USERNAME}{ENTER} +- +- +- +- {PASSWORD} +- +- +- +- {PASSWORD}{ENTER} +- +- +- +- Always on Top +- +- +- +- Hide Usernames +- ì‚¬ìš©ìž ì´ë¦„ 숨기기 +- +- +- Hide Passwords +- 암호 숨기기 +- +- +- +- ManageDatabase +- +- Database settings +- ë°ì´í„°ë² ì´ìŠ¤ 설정 +- +- +- Edit database settings +- ë°ì´í„°ë² ì´ìŠ¤ 설정 편집 +- +- +- Unlock database +- ë°ì´í„°ë² ì´ìŠ¤ 잠금 í•´ì œ +- +- +- Unlock database to show more information +- ë” ë§Žì€ ì •ë³´ë¥¼ 보려면 ë°ì´í„°ë² ì´ìŠ¤ ìž ê¸ˆì„ í•´ì œí•˜ì‹­ì‹œì˜¤ +- +- +- Lock database +- ë°ì´í„°ë² ì´ìŠ¤ 잠금 +- +- +- +- ManageSession +- +- Disconnect +- ì—°ê²° í•´ì œ +- +- +- Disconnect this application +- ì´ í”„ë¡œê·¸ëž¨ ì—°ê²° í•´ì œ +- +- +- +- Merger +- +- Creating missing %1 [%2] +- 존재하지 않는 %1 [%2] ìƒì„± 중 +- +- +- Relocating %1 [%2] +- %1 [%2] 위치 변경 중 +- +- +- Overwriting %1 [%2] +- %1 [%2] ë®ì–´ì“°ëŠ” 중 +- +- +- older entry merged from database "%1" +- ë°ì´í„°ë² ì´ìŠ¤ "%1"ì—ì„œ í•©ì³ì§„ ì´ì „ 항목 +- +- +- Adding backup for older target %1 [%2] +- ì˜¤ëž˜ëœ ëŒ€ìƒ %1 [%2]ì˜ ë°±ì—… 추가 중 +- +- +- Adding backup for older source %1 [%2] +- ì˜¤ëž˜ëœ ì›ë³¸ %1 [%2]ì˜ ë°±ì—… 추가 중 +- +- +- Reapplying older target entry on top of newer source %1 [%2] +- 새로운 ì›ë³¸ %1 [%2]ì— ì˜¤ëž˜ëœ ëŒ€ìƒ í•­ëª© 다시 ì ìš©í•˜ëŠ” 중 +- +- +- Reapplying older source entry on top of newer target %1 [%2] +- 새로운 ëŒ€ìƒ %1 [%2]ì— ì˜¤ëž˜ëœ ì›ë³¸ 항목 다시 ì ìš©í•˜ëŠ” 중 +- +- +- Synchronizing from newer source %1 [%2] +- 새로운 ì›ë³¸ %1 [%2]ì—ì„œ ë™ê¸°í™”하는 중 +- +- +- Synchronizing from older source %1 [%2] +- ì˜¤ëž˜ëœ ì›ë³¸ %1 [%2]ì—ì„œ ë™ê¸°í™”하는 중 +- +- +- Deleting child %1 [%2] +- ìžì‹ 항목 %1 [%2] ì‚­ì œ 중 +- +- +- Deleting orphan %1 [%2] +- ê³ ë¦½ëœ í•­ëª© %1 [%2] ì‚­ì œ 중 +- +- +- Changed deleted objects +- ë³€ê²½ëœ ì‚­ì œëœ ê°œì²´ +- +- +- Adding missing icon %1 +- 빠진 ì•„ì´ì½˜ %1 추가하는 중 +- +- +- Removed custom data %1 [%2] +- ì‚¬ìš©ìž ì •ì˜ ë°ì´í„° %1[%2] ì‚­ì œë¨ +- +- +- Adding custom data %1 [%2] +- ì‚¬ìš©ìž ì •ì˜ ë°ì´í„° %1[%2] 추가 중 +- +- +- +- NewDatabaseWizard +- +- Create a new KeePassXC database... +- 새 KeePassXC ë°ì´í„°ë² ì´ìŠ¤ 만들기... +- +- +- Root +- Root group +- 루트 +- +- +- +- NewDatabaseWizardPage +- +- WizardPage +- 마법사페ì´ì§€ +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- ë°ì´í„°ë² ì´ìŠ¤ 암호화 ì„¤ì •ì„ ë³€ê²½í•  수 있습니다. ë‚˜ì¤‘ì— ë°ì´í„°ë² ì´ìŠ¤ 설정ì—ì„œë„ ë³€ê²½í•  수 있습니다. +- +- +- Advanced Settings +- 고급 설정 +- +- +- Simple Settings +- 간단한 설정 +- +- +- Encryption Settings +- 암호화 설정 +- +- +- +- NewDatabaseWizardPageDatabaseKey +- +- Database Credentials +- ë°ì´í„°ë² ì´ìŠ¤ ì¸ì¦ ì •ë³´ +- +- +- A set of credentials known only to you that protects your database. +- 나만 알고 있는 ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 보호할 ì¸ì¦ 정보입니다. +- +- +- +- NewDatabaseWizardPageEncryption +- +- Encryption Settings +- 암호화 설정 +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- ë°ì´í„°ë² ì´ìŠ¤ 암호화 ì„¤ì •ì„ ë³€ê²½í•  수 있습니다. ë‚˜ì¤‘ì— ë°ì´í„°ë² ì´ìŠ¤ 설정ì—ì„œë„ ë³€ê²½í•  수 있습니다. +- +- +- +- NewDatabaseWizardPageMetaData +- +- General Database Information +- ì¼ë°˜ ë°ì´í„°ë² ì´ìŠ¤ ì •ë³´ +- +- +- Please fill in the display name and an optional description for your new database: +- 새 ë°ì´í„°ë² ì´ìŠ¤ 표시 ì´ë¦„ê³¼ 추가 설명(ì„ íƒ)ì„ ìž…ë ¥í•˜ì‹­ì‹œì˜¤: +- +- +- +- NixUtils +- +- Password Manager +- 암호 ê´€ë¦¬ìž +- +- +- +- OpData01 +- +- Invalid OpData01, does not contain header +- ìž˜ëª»ëœ OpData01, í—¤ë” ì •ë³´ ì—†ìŒ +- +- +- Unable to read all IV bytes, wanted 16 but got %1 +- 모든 IV ë°”ì´íŠ¸ë¥¼ ì½ì„ 수 ì—†ìŒ, 16ë°”ì´íŠ¸ê°€ 필요하지만 %1ë°”ì´íŠ¸ë§Œ ë°›ìŒ +- +- +- Unable to init cipher for opdata01: %1 +- opdata01ì˜ ì•”í˜¸í™”ë¥¼ 초기화할 수 ì—†ìŒ: %1 +- +- +- Unable to read all HMAC signature bytes +- 모든 HMAC 서명 ë°”ì´íŠ¸ë¥¼ ì½ì„ 수 ì—†ìŒ +- +- +- Malformed OpData01 due to a failed HMAC +- ìž˜ëª»ëœ OpData01, HMACì´ ìž˜ëª»ë¨ +- +- +- Unable to process clearText in place +- 위치ì—ì„œ 곧바로 clearText를 처리할 수 ì—†ìŒ +- +- +- Expected %1 bytes of clear-text, found %2 +- í‰ë¬¸ 문ìžì—´ %1ë°”ì´íŠ¸ê°€ 필요하지만 %2ë°”ì´íŠ¸ë¥¼ ë°›ìŒ +- +- +- +- OpVaultOpenWidget +- +- Read Database did not produce an instance +-%1 +- ë°ì´í„°ë² ì´ìŠ¤ ì½ê¸° ëª…ë ¹ì´ ì¸ìŠ¤í„´ìŠ¤ë¥¼ 반환하지 ì•ŠìŒ +-%1 +- +- +- +- OpVaultReader +- +- Directory .opvault must exist +- .opvault 디렉터리가 존재해야 함 +- +- +- Directory .opvault must be readable +- .opvault 디렉터리를 ì½ì„ 수 있어야 함 +- +- +- Directory .opvault/default must exist +- .opvault/default 디렉터리가 존재해야 함 +- +- +- Directory .opvault/default must be readable +- .opvault/default 디렉터리를 ì½ì„ 수 있어야 함 +- +- +- Unable to decode masterKey: %1 +- masterKey를 디코드할 수 ì—†ìŒ: %1 +- +- +- Unable to derive master key: %1 +- 마스터 키를 계산할 수 ì—†ìŒ: %1 +- +- +- +- OpenSSHKey +- +- Invalid key file, expecting an OpenSSH key +- ìž˜ëª»ëœ í‚¤ 파ì¼, OpenSSH 키가 필요함 +- +- +- PEM boundary mismatch +- PEM 경계가 ì¼ì¹˜í•˜ì§€ ì•ŠìŒ +- +- +- Base64 decoding failed +- Base64 디코드 실패 +- +- +- Key file way too small. +- 키 파ì¼ì´ 너무 작습니다. +- +- +- Key file magic header id invalid +- 키 íŒŒì¼ ë§¤ì§ í—¤ë” IDê°€ ìž˜ëª»ë¨ +- +- +- Found zero keys +- 키를 ì°¾ì„ ìˆ˜ ì—†ìŒ +- +- +- Failed to read public key. +- 공개 키를 ì½ì„ 수 없습니다. +- +- +- Corrupted key file, reading private key failed +- 키 파ì¼ì´ 잘못ë¨, 비밀 키를 ì½ì„ 수 ì—†ìŒ +- +- +- No private key payload to decrypt +- 암호화 해제할 비밀 키 페ì´ë¡œë“œê°€ ì—†ìŒ +- +- +- Trying to run KDF without cipher +- 키 ìœ ë„ í•¨ìˆ˜ë¥¼ 암호화 ì—†ì´ ì‹¤í–‰í•˜ë ¤ê³  함 +- +- +- Passphrase is required to decrypt this key +- ì´ í‚¤ë¥¼ 복호화하려면 암호가 필요함 +- +- +- Key derivation failed, key file corrupted? +- 키 ìœ ë„ ì‹¤íŒ¨, 키 파ì¼ì´ 유효합니까? +- +- +- Decryption failed, wrong passphrase? +- 복호화 실패, 암호가 올바릅니까? +- +- +- Unexpected EOF while reading public key +- 공개 키를 ì½ëŠ” 중 예ìƒí•˜ì§€ 못한 ê³³ì—ì„œ 파ì¼ì´ ë남 +- +- +- Unexpected EOF while reading private key +- 비밀 키를 ì½ëŠ” 중 예ìƒí•˜ì§€ 못한 ê³³ì—ì„œ 파ì¼ì´ ë남 +- +- +- Can't write public key as it is empty +- 공개 키가 비어 있어서 기ë¡í•  수 ì—†ìŒ +- +- +- Unexpected EOF when writing public key +- 공개 키를 기ë¡í•˜ëŠ” 중 예ìƒí•˜ì§€ 못한 ê³³ì—ì„œ 파ì¼ì´ ë남 +- +- +- Can't write private key as it is empty +- 비밀 키가 비어 있어서 기ë¡í•  수 ì—†ìŒ +- +- +- Unexpected EOF when writing private key +- 비밀 키를 기ë¡í•˜ëŠ” 중 예ìƒí•˜ì§€ 못한 ê³³ì—ì„œ 파ì¼ì´ ë남 +- +- +- Unsupported key type: %1 +- 지ì›í•˜ì§€ 않는 키 형ì‹: %1 +- +- +- Unknown cipher: %1 +- ì•Œ 수 없는 암호화: %1 +- +- +- Cipher IV is too short for MD5 kdf +- MD5 키 ìœ ë„ í•¨ìˆ˜ì— IVê°€ 너무 ì§§ìŒ +- +- +- Unknown KDF: %1 +- ì•Œ 수 없는 KDF: %1 +- +- +- Unknown key type: %1 +- ì•Œ 수 없는 키 형ì‹: %1 +- +- +- +- PasswordEdit +- +- Passwords do not match +- 암호가 ì¼ì¹˜í•˜ì§€ ì•ŠìŒ +- +- +- Passwords match so far +- 암호가 ì¼ì¹˜í•¨ +- +- +- Toggle Password (%1) +- 암호 표시/숨기기(%1) +- +- +- Generate Password (%1) +- 암호 ìƒì„±(%1) +- +- +- Warning: Caps Lock enabled! +- 경고: Caps Lockì´ ì¼œì ¸ 있습니다 +- +- +- +- PasswordEditWidget +- +- Enter password: +- 암호 ìž…ë ¥: +- +- +- Confirm password: +- 암호 확ì¸: +- +- +- Password +- 암호 +- +- +- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> +- <p>암호는 ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 보호하는 주요 수단입니다.</p><p>ì¢‹ì€ ì•”í˜¸ëŠ” 길고 예측할 수 없어야 합니다. KeePassXCì—ì„œ 암호를 ìƒì„±í•  수 있습니다.</p> +- +- +- Passwords do not match. +- 암호가 ì¼ì¹˜í•˜ì§€ 않습니다. +- +- +- Password field +- 암호 í•„ë“œ +- +- +- Repeat password field +- 암호 í™•ì¸ í•„ë“œ +- +- +- +- PasswordGeneratorWidget +- +- %p% +- %p% +- +- +- strength +- Password strength +- ê°•ë„ +- +- +- entropy +- 엔트로피 +- +- +- Password +- 암호 +- +- +- Character Types +- ë¬¸ìž ì¢…ë¥˜ +- +- +- Numbers +- ìˆ«ìž +- +- +- Extended ASCII +- 확장 ASCII +- +- +- Exclude look-alike characters +- 비슷하게 ìƒê¸´ ë¬¸ìž ì œì™¸ +- +- +- Pick characters from every group +- 모든 그룹ì—ì„œ ê¸€ìž ì„ íƒ +- +- +- &Length: +- 길ì´(&L): +- +- +- Passphrase +- 암구호 +- +- +- Wordlist: +- 단어 목ë¡: +- +- +- Word Separator: +- 단어 구분ìž: +- +- +- Close +- 닫기 +- +- +- Entropy: %1 bit +- 엔트로피: %1비트 +- +- +- Password Quality: %1 +- 암호 ê°•ë„: %1 +- +- +- Poor +- Password quality +- 매우 약함 +- +- +- Weak +- Password quality +- 약함 +- +- +- Good +- Password quality +- ì¢‹ìŒ +- +- +- Excellent +- Password quality +- 매우 ì¢‹ìŒ +- +- +- Switch to advanced mode +- 고급 모드로 전환 +- +- +- Advanced +- 고급 +- +- +- Braces +- 괄호 +- +- +- Punctuation +- 구ë‘ì  +- +- +- Quotes +- 따옴표 +- +- +- Logograms +- 로고그램 +- +- +- Character set to exclude from generated password +- ìƒì„±ëœ 암호ì—ì„œ 제외할 ë¬¸ìž ì§‘í•© +- +- +- Do not include: +- í¬í•¨í•˜ì§€ ì•ŠìŒ: +- +- +- Add non-hex letters to "do not include" list +- "í¬í•¨í•˜ì§€ ì•ŠìŒ" 목ë¡ì— 16진수가 ì•„ë‹Œ ë¬¸ìž ì¶”ê°€ +- +- +- Hex +- 16진 +- +- +- Excluded characters: "0", "1", "l", "I", "O", "|", "ï¹’" +- 제외할 글ìž: "0", "1", "l", "I", "O", "|", "ï¹’" +- +- +- Generated password +- ìƒì„±ëœ 암호 +- +- +- Upper-case letters +- ëŒ€ë¬¸ìž +- +- +- Lower-case letters +- ì†Œë¬¸ìž +- +- +- Special characters +- íŠ¹ìˆ˜ë¬¸ìž +- +- +- Math Symbols +- 수학 기호 +- +- +- Dashes and Slashes +- 대시와 슬래시 +- +- +- Excluded characters +- 제외할 ë¬¸ìž +- +- +- Hex Passwords +- 16진 암호 +- +- +- Password length +- 암호 ê¸¸ì´ +- +- +- Word Case: +- 대소문ìž: +- +- +- Regenerate password +- 암호 다시 ìƒì„± +- +- +- Copy password +- 암호 복사 +- +- +- lower case +- ì†Œë¬¸ìž +- +- +- UPPER CASE +- ëŒ€ë¬¸ìž +- +- +- Title Case +- 제목 대문ìž(Title Case) +- +- +- Generate Password +- 암호 ìƒì„± +- +- +- Also choose from: +- 다ìŒì—ì„œë„ ì„ íƒ: +- +- +- Additional characters to use for the generated password +- ìƒì„±í•œ ì•”í˜¸ì— í¬í•¨í•  추가 ë¬¸ìž +- +- +- Additional characters +- 추가 ë¬¸ìž +- +- +- Word Count: +- 단어 개수: +- +- +- Esc +- Esc +- +- +- Apply Password +- 암호 ì ìš© +- +- +- Ctrl+S +- Ctrl+S +- +- +- Regenerate password (%1) +- 암호 다시 ìƒì„±(%1) +- +- +- Special Characters +- 특수 ë¬¸ìž +- +- +- +- QApplication +- +- KeeShare +- KeeShare +- +- +- Statistics +- 통계 +- +- +- Very weak password +- 매우 약한 암호 +- +- +- Password entropy is %1 bits +- 암호 엔트로피가 %1비트임 +- +- +- Weak password +- 약한 암호 +- +- +- Used in %1/%2 +- %1/%2ì—ì„œ ì‚¬ìš©ë¨ +- +- +- Password is used %1 times +- 암호가 %1번 ì‚¬ìš©ë¨ +- +- +- Password has expired +- 암호가 ë§Œë£Œë¨ +- +- +- Password expiry was %1 +- 암호 만료: %1 +- +- +- Password is about to expire +- 암호가 빠른 ì‹œì¼ ë‚´ ë§Œë£Œë¨ +- +- +- Password expires in %1 days +- 암호가 %1ì¼ í›„ ë§Œë£Œë¨ +- +- +- Password will expire soon +- 암호가 곧 ë§Œë£Œë¨ +- +- +- Password expires on %1 +- 암호가 %1ì— ë§Œë£Œë¨ +- +- +- Health Check +- 안전성 검사 +- +- +- HIBP +- HIBP +- +- +- +- QMessageBox +- +- Overwrite +- ë®ì–´ì“°ê¸° +- +- +- Delete +- ì‚­ì œ +- +- +- Move +- ì´ë™ +- +- +- Empty +- 비어 ìžˆìŒ +- +- +- Remove +- ì‚­ì œ +- +- +- Skip +- 건너뛰기 +- +- +- Disable +- 비활성화 +- +- +- Merge +- 합치기 +- +- +- Continue +- ê³„ì† +- +- +- +- QObject +- +- Database not opened +- ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 열지 ì•Šì•˜ìŒ +- +- +- Database hash not available +- ë°ì´í„°ë² ì´ìŠ¤ 해시를 사용할 수 ì—†ìŒ +- +- +- Client public key not received +- í´ë¼ì´ì–¸íŠ¸ 공개 키를 받지 ì•Šì•˜ìŒ +- +- +- Cannot decrypt message +- 메시지를 복호화할 수 ì—†ìŒ +- +- +- Action cancelled or denied +- ì ‘ê·¼ì´ ì·¨ì†Œë˜ì—ˆê±°ë‚˜ ê±°ë¶€ë¨ +- +- +- KeePassXC association failed, try again +- KeePassXC ì—°ê²° 실패, 다시 ì‹œë„하십시오 +- +- +- Encryption key is not recognized +- 암호화 키를 ì¸ì‹í•  수 ì—†ìŒ +- +- +- Incorrect action +- ìž˜ëª»ëœ ë™ìž‘ +- +- +- Empty message received +- 빈 메시지 ë°›ìŒ +- +- +- No URL provided +- URLì´ ì§€ì •ë˜ì§€ ì•ŠìŒ +- +- +- No logins found +- 로그ì¸ì„ ì°¾ì„ ìˆ˜ ì—†ìŒ +- +- +- Unknown error +- ì•Œ 수 없는 오류 +- +- +- Add a new entry to a database. +- ë°ì´í„°ë² ì´ìŠ¤ì— 새 í•­ëª©ì„ ì¶”ê°€í•©ë‹ˆë‹¤. +- +- +- Path of the database. +- ë°ì´í„°ë² ì´ìŠ¤ì˜ 경로입니다. +- +- +- Key file of the database. +- ë°ì´í„°ë² ì´ìŠ¤ì˜ 키 파ì¼ìž…니다. +- +- +- path +- 경로 +- +- +- Username for the entry. +- í•­ëª©ì˜ ì‚¬ìš©ìž ì´ë¦„입니다. +- +- +- username +- ì‚¬ìš©ìž ì´ë¦„ +- +- +- URL for the entry. +- í•­ëª©ì˜ URL입니다. +- +- +- URL +- URL +- +- +- Prompt for the entry's password. +- 항목 ì•”í˜¸ì˜ í”„ë¡¬í”„íŠ¸ìž…ë‹ˆë‹¤. +- +- +- Generate a password for the entry. +- 항목 암호를 ìƒì„±í•©ë‹ˆë‹¤. +- +- +- length +- ê¸¸ì´ +- +- +- Path of the entry to add. +- 추가할 í•­ëª©ì˜ ê²½ë¡œìž…ë‹ˆë‹¤. +- +- +- Path of the entry to clip. +- clip = copy to clipboard +- í´ë¦½ë³´ë“œì— 복사할 í•­ëª©ì˜ ê²½ë¡œìž…ë‹ˆë‹¤. +- +- +- Timeout in seconds before clearing the clipboard. +- í´ë¦½ë³´ë“œë¥¼ 지우기 ì „ 대기할 ì´ˆ 단위 시간입니다. +- +- +- Edit an entry. +- í•­ëª©ì„ íŽ¸ì§‘í•©ë‹ˆë‹¤. +- +- +- Title for the entry. +- í•­ëª©ì˜ ì œëª©ìž…ë‹ˆë‹¤. +- +- +- title +- 제목 +- +- +- Path of the entry to edit. +- 편집할 í•­ëª©ì˜ ê²½ë¡œìž…ë‹ˆë‹¤. +- +- +- Estimate the entropy of a password. +- ì•”í˜¸ì˜ ì˜ˆìƒ ì—”íŠ¸ë¡œí”¼ë¥¼ 계산합니다. +- +- +- Password for which to estimate the entropy. +- 엔트로피를 예ìƒí•  암호입니다. +- +- +- Perform advanced analysis on the password. +- ì•”í˜¸ì— ê³ ê¸‰ 분ì„ì„ ì‹œí–‰í•©ë‹ˆë‹¤. +- +- +- +- +-Available commands: +- +- +- +-사용 가능한 명령: +- +- +- +- Name of the command to execute. +- 실행할 명령 ì´ë¦„입니다. +- +- +- List database entries. +- ë°ì´í„°ë² ì´ìŠ¤ í•­ëª©ì„ í‘œì‹œí•©ë‹ˆë‹¤. +- +- +- Path of the group to list. Default is / +- 표시할 ê·¸ë£¹ì˜ ê²½ë¡œìž…ë‹ˆë‹¤. ê¸°ë³¸ê°’ì€ /입니다 +- +- +- Find entries quickly. +- 빠르게 í•­ëª©ì„ ì°¾ìŠµë‹ˆë‹¤. +- +- +- Search term. +- í•­ëª©ì„ ê²€ìƒ‰í•©ë‹ˆë‹¤. +- +- +- Merge two databases. +- ë‘ ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 합칩니다. +- +- +- Path of the database to merge from. +- í•©ì¹  ì›ë³¸ ë°ì´í„°ë² ì´ìŠ¤ 경로입니다. +- +- +- Use the same credentials for both database files. +- ë‘ ë°ì´í„°ë² ì´ìŠ¤ 파ì¼ì— ê°™ì€ ì¸ì¦ 정보를 사용합니다. +- +- +- Key file of the database to merge from. +- í•©ì¹  ë°ì´í„°ë² ì´ìŠ¤ 파ì¼ì˜ 키 파ì¼ìž…니다. +- +- +- Show an entry's information. +- 항목 정보를 표시합니다. +- +- +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- 표시할 ì†ì„± ì´ë¦„입니다. ì´ ì˜µì…˜ì€ í•œ 번 ì´ìƒ 사용할 수 있으며, 주어진 순서대로 ê°ê° ì†ì„±ì„ í•œ ì¤„ì— í•˜ë‚˜ì”© 표시합니다. ì†ì„±ì„ 지정하지 않으면 기본 ì†ì„±ì˜ ìš”ì•½ì„ í‘œì‹œí•©ë‹ˆë‹¤. +- +- +- attribute +- ì†ì„± +- +- +- Name of the entry to show. +- 표시할 항목 ì´ë¦„입니다. +- +- +- NULL device +- NULL 장치 +- +- +- error reading from device +- 장치ì—ì„œ ì½ëŠ” 중 오류 ë°œìƒ +- +- +- malformed string +- ìž˜ëª»ëœ ë¬¸ìžì—´ +- +- +- missing closing quote +- 닫는 따옴표 ì—†ìŒ +- +- +- Group +- 그룹 +- +- +- Title +- 제목 +- +- +- Username +- ì‚¬ìš©ìž ì´ë¦„ +- +- +- Password +- 암호 +- +- +- Notes +- 메모 +- +- +- Last Modified +- 마지막 수정 +- +- +- Created +- ìƒì„± +- +- +- Browser Integration +- 브ë¼ìš°ì € 통합 +- +- +- SSH Agent +- SSH ì—ì´ì „트 +- +- +- Generate a new random diceware passphrase. +- 새로운 주사위 암호를 ìƒì„±í•©ë‹ˆë‹¤. +- +- +- Word count for the diceware passphrase. +- 주사위 암호 단어 개수입니다. +- +- +- Wordlist for the diceware generator. +-[Default: EFF English] +- 주사위 암호 ìƒì„± ì‹œ 사용할 단어 목ë¡ìž…니다. +-[기본값: EFF ì˜ì–´] +- +- +- Generate a new random password. +- 새 무작위 암호를 ìƒì„±í•©ë‹ˆë‹¤. +- +- +- Could not create entry with path %1. +- 경로 %1ì— í•­ëª©ì„ ë§Œë“¤ 수 없습니다. +- +- +- Enter password for new entry: +- 새 í•­ëª©ì˜ ì•”í˜¸ ìž…ë ¥: +- +- +- Writing the database failed %1. +- ë°ì´í„°ë² ì´ìŠ¤ì— 기ë¡í•  수 없습니다 %1. +- +- +- Successfully added entry %1. +- 항목 %1ì„(를) 추가했습니다. +- +- +- Invalid timeout value %1. +- 시간 제한 ê°’ %1ì´(ê°€) 잘못ë˜ì—ˆìŠµë‹ˆë‹¤. +- +- +- Entry %1 not found. +- 항목 %1ì„(를) ì°¾ì„ ìˆ˜ 없습니다. +- +- +- Entry with path %1 has no TOTP set up. +- 경로 %1ì— ìžˆëŠ” í•­ëª©ì— TOTPê°€ 설정ë˜ì§€ 않았습니다. +- +- +- Clearing the clipboard in %1 second(s)... +- %1ì´ˆ 후 í´ë¦½ë³´ë“œë¥¼ 지ì›ë‹ˆë‹¤... +- +- +- Clipboard cleared! +- í´ë¦½ë³´ë“œë¥¼ 지웠습니다! +- +- +- Silence password prompt and other secondary outputs. +- 암호 ìž…ë ¥ 프롬프트 ë° ì¶”ê°€ ì¶œë ¥ì„ ìˆ¨ê¹ë‹ˆë‹¤. +- +- +- count +- CLI parameter +- count +- +- +- Could not find entry with path %1. +- 경로 %1ì—ì„œ í•­ëª©ì„ ì°¾ì„ ìˆ˜ 없습니다. +- +- +- Not changing any field for entry %1. +- 항목 %1ì˜ í•„ë“œë¥¼ 변경하지 않습니다. +- +- +- Enter new password for entry: +- í•­ëª©ì˜ ìƒˆë¡œìš´ 암호 ìž…ë ¥: +- +- +- Writing the database failed: %1 +- ë°ì´í„°ë² ì´ìŠ¤ì—기ë¡í•  수 ì—†ìŒ: %1 +- +- +- Successfully edited entry %1. +- 항목 %1ì„(를) 편집했습니다. +- +- +- Length %1 +- ê¸¸ì´ %1 +- +- +- Entropy %1 +- 엔트로피 %1 +- +- +- Log10 %1 +- Log10 %1 +- +- +- Multi-word extra bits %1 +- 여러 단어 추가 비트 %1 +- +- +- Type: Bruteforce +- 형ì‹: 무작위 대입 +- +- +- Type: Dictionary +- 형ì‹: 사전 +- +- +- Type: Dict+Leet +- 형ì‹: 사전+Leet +- +- +- Type: User Words +- 형ì‹: ì‚¬ìš©ìž ë‹¨ì–´ +- +- +- Type: User+Leet +- 형ì‹: 사용ìž+Leet +- +- +- Type: Repeated +- 형ì‹: ë°˜ë³µë¨ +- +- +- Type: Sequence +- 형ì‹: 시퀀스 +- +- +- Type: Spatial +- 형ì‹: ì¸ì ‘ +- +- +- Type: Date +- 형ì‹: 날짜 +- +- +- Type: Bruteforce(Rep) +- 형ì‹: 무작위 대입(반복) +- +- +- Type: Dictionary(Rep) +- 형ì‹: 사전(반복) +- +- +- Type: Dict+Leet(Rep) +- 형ì‹: 사전+Leet(반복) +- +- +- Type: User Words(Rep) +- 형ì‹: ì‚¬ìš©ìž ë‹¨ì–´(반복) +- +- +- Type: User+Leet(Rep) +- 형ì‹: 사용ìž+Leet(반복) +- +- +- Type: Repeated(Rep) +- 형ì‹: 반복ë¨(반복) +- +- +- Type: Sequence(Rep) +- 형ì‹: 시퀀스(반복) +- +- +- Type: Spatial(Rep) +- 형ì‹: ì¸ì ‘(반복) +- +- +- Type: Date(Rep) +- 형ì‹: 날짜(반복) +- +- +- Type: Unknown%1 +- 형ì‹: ì•Œ 수 ì—†ìŒ%1 +- +- +- Entropy %1 (%2) +- 엔트로피 %1(%2) +- +- +- *** Password length (%1) != sum of length of parts (%2) *** +- *** 암호 ê¸¸ì´ (%1) != 개별 부분 길ì´ì˜ í•© (%2) *** +- +- +- Failed to load key file %1: %2 +- 키 íŒŒì¼ %1ì„(를) 불러올 수 ì—†ìŒ: %2 +- +- +- Length of the generated password +- ìƒì„±ëœ ì•”í˜¸ì˜ ê¸¸ì´ +- +- +- Use lowercase characters +- ì†Œë¬¸ìž ì‚¬ìš© +- +- +- Use uppercase characters +- ëŒ€ë¬¸ìž ì‚¬ìš© +- +- +- Use special characters +- 특수 ë¬¸ìž ì‚¬ìš© +- +- +- Use extended ASCII +- 확장 ASCII 사용 +- +- +- Exclude character set +- 제외할 ë¬¸ìž ì§‘í•© +- +- +- chars +- ê¸€ìž +- +- +- Exclude similar looking characters +- 비슷하게 ìƒê¸´ ë¬¸ìž ì œì™¸ +- +- +- Include characters from every selected group +- 모든 그룹ì—ì„œ ê¸€ìž ì„ íƒ +- +- +- Recursively list the elements of the group. +- ê·¸ë£¹ì˜ êµ¬ì„± 요소를 재귀ì ìœ¼ë¡œ 표시합니다. +- +- +- Cannot find group %1. +- 그룹 %1ì„(를) ì°¾ì„ ìˆ˜ 없습니다. +- +- +- Error reading merge file: +-%1 +- í•©ì¹  파ì¼ì„ ì½ëŠ” 중 오류 ë°œìƒ: +-%1 +- +- +- Unable to save database to file : %1 +- ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 파ì¼ë¡œ 저장할 수 ì—†ìŒ: %1 +- +- +- Unable to save database to file: %1 +- ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 파ì¼ë¡œ 저장할 수 ì—†ìŒ: %1 +- +- +- Successfully recycled entry %1. +- 항목 %1ì„(를) 휴지통으로 ì´ë™í–ˆìŠµë‹ˆë‹¤. +- +- +- Successfully deleted entry %1. +- 항목 %1ì„(를) 삭제했습니다. +- +- +- Show the entry's current TOTP. +- í•­ëª©ì˜ í˜„ìž¬ TOTP를 표시합니다. +- +- +- ERROR: unknown attribute %1. +- 오류: ì•Œ 수 없는 ì†ì„± %1. +- +- +- No program defined for clipboard manipulation +- í´ë¦½ë³´ë“œ 변경 í”„ë¡œê·¸ëž¨ì´ ì§€ì •ë˜ì§€ ì•Šì•˜ìŒ +- +- +- file empty +- 파ì¼ì´ 비어 ìžˆìŒ +- +- +- %1: (row, col) %2,%3 +- %1: (줄, 칸) %2, %3 +- +- +- AES-KDF (KDBX 4) +- AES-KDF(KDBX 4) +- +- +- AES-KDF (KDBX 3.1) +- AES-KDF(KDBX 3.1) +- +- +- Invalid Settings +- TOTP +- ìž˜ëª»ëœ ì„¤ì • +- +- +- Invalid Key +- TOTP +- ìž˜ëª»ëœ í‚¤ +- +- +- Message encryption failed. +- 메시지를 암호화할 수 없습니다. +- +- +- No groups found +- ê·¸ë£¹ì„ ì°¾ì„ ìˆ˜ ì—†ìŒ +- +- +- Create a new database. +- 새 ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 만듭니다. +- +- +- File %1 already exists. +- íŒŒì¼ %1ì´(ê°€) ì´ë¯¸ 존재합니다. +- +- +- Loading the key file failed +- 키 파ì¼ì„ 불러올 수 ì—†ìŒ +- +- +- No key is set. Aborting database creation. +- ì„¤ì •ëœ í‚¤ê°€ 없습니다. ë°ì´í„°ë² ì´ìŠ¤ ìƒì„±ì„ 중단합니다. +- +- +- Failed to save the database: %1. +- ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 저장할 수 ì—†ìŒ: %1. +- +- +- Successfully created new database. +- 새 ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 만들었습니다. +- +- +- Creating KeyFile %1 failed: %2 +- 키 íŒŒì¼ %1 ìƒì„± 실패: %2 +- +- +- Loading KeyFile %1 failed: %2 +- 키 íŒŒì¼ %1 불러오기 실패: %2 +- +- +- Path of the entry to remove. +- 삭제할 í•­ëª©ì˜ ê²½ë¡œìž…ë‹ˆë‹¤. +- +- +- Existing single-instance lock file is invalid. Launching new instance. +- 존재하는 ë‹¨ì¼ ì¸ìŠ¤í„´ìŠ¤ 잠금 파ì¼ì´ 잘못ë˜ì—ˆìŠµë‹ˆë‹¤. 새 ì¸ìŠ¤í„´ìŠ¤ë¥¼ 실행합니다. +- +- +- The lock file could not be created. Single-instance mode disabled. +- 잠금 파ì¼ì„ 만들 수 없습니다. ë‹¨ì¼ ì¸ìŠ¤í„´ìŠ¤ 모드가 비활성화ë˜ì—ˆìŠµë‹ˆë‹¤. +- +- +- KeePassXC - cross-platform password manager +- KeePassXC - í¬ë¡œìŠ¤ í”Œëž«í¼ ì•”í˜¸ ê´€ë¦¬ìž +- +- +- filenames of the password databases to open (*.kdbx) +- ì—´ 암호 ë°ì´í„°ë² ì´ìŠ¤ íŒŒì¼ ì´ë¦„(*.kdbx) +- +- +- path to a custom config file +- ì‚¬ìš©ìž ì •ì˜ ì„¤ì • íŒŒì¼ ê²½ë¡œ +- +- +- key file of the database +- ë°ì´í„°ë² ì´ìŠ¤ 키 íŒŒì¼ +- +- +- read password of the database from stdin +- 표준 ìž…ë ¥ì—ì„œ ë°ì´í„°ë² ì´ìŠ¤ 암호 ì½ê¸° +- +- +- Another instance of KeePassXC is already running. +- 다른 KeePassXC ì¸ìŠ¤í„´ìŠ¤ê°€ ì´ë¯¸ 실행 중입니다. +- +- +- Fatal error while testing the cryptographic functions. +- 암호화 함수를 시험하는 중 오류가 ë°œìƒí•˜ì˜€ìŠµë‹ˆë‹¤. +- +- +- KeePassXC - Error +- KeePassXC - 오류 +- +- +- Database password: +- ë°ì´í„°ë² ì´ìŠ¤ 암호: +- +- +- Cannot create new group +- 새 ê·¸ë£¹ì„ ë§Œë“¤ 수 ì—†ìŒ +- +- +- Deactivate password key for the database. +- ë°ì´í„°ë² ì´ìŠ¤ì˜ 암호 키를 비활성화합니다. +- +- +- Displays debugging information. +- 디버그 정보를 표시합니다. +- +- +- Deactivate password key for the database to merge from. +- í•©ì¹  ë°ì´í„°ë² ì´ìŠ¤ì˜ 암호 키를 비활성화합니다. +- +- +- Version %1 +- 버전 %1 +- +- +- Build Type: %1 +- 빌드 형ì‹: %1 +- +- +- Revision: %1 +- 리비전: %1 +- +- +- Distribution: %1 +- ë°°í¬íŒ: %1 +- +- +- Debugging mode is disabled. +- 디버그 모드가 비활성화ë˜ì—ˆìŠµë‹ˆë‹¤. +- +- +- Debugging mode is enabled. +- 디버그 모드가 활성화ë˜ì—ˆìŠµë‹ˆë‹¤. +- +- +- Operating system: %1 +-CPU architecture: %2 +-Kernel: %3 %4 +- ìš´ì˜ ì²´ì œ: %1 +-CPU 아키í…처: %2 +-커ë„: %3 %4 +- +- +- Auto-Type +- ìžë™ ìž…ë ¥ +- +- +- KeeShare (signed and unsigned sharing) +- KeeShare(ì„œëª…ëœ ê³µìœ  ë° ì„œëª…ë˜ì§€ ì•Šì€ ê³µìœ ) +- +- +- KeeShare (only signed sharing) +- KeeShare(ì„œëª…ëœ ê³µìœ ë§Œ) +- +- +- KeeShare (only unsigned sharing) +- KeeShare(서명ë˜ì§€ ì•Šì€ ê³µìœ ë§Œ) +- +- +- YubiKey +- YubiKey +- +- +- TouchID +- TouchID +- +- +- None +- ì—†ìŒ +- +- +- Enabled extensions: +- í™œì„±í™”ëœ í™•ìž¥ 기능: +- +- +- Cryptographic libraries: +- 암호화 ë¼ì´ë¸ŒëŸ¬ë¦¬: +- +- +- Cannot generate a password and prompt at the same time! +- 암호와 프롬프트를 ë™ì‹œì— ìƒì„±í•  수 없습니다! +- +- +- Adds a new group to a database. +- ë°ì´í„°ë² ì´ìŠ¤ì— 새 ê·¸ë£¹ì„ ì¶”ê°€í•©ë‹ˆë‹¤. +- +- +- Path of the group to add. +- 추가할 ê·¸ë£¹ì˜ ê²½ë¡œìž…ë‹ˆë‹¤. +- +- +- Group %1 already exists! +- 그룹 %1ì´(ê°€) ì´ë¯¸ 존재합니다! +- +- +- Group %1 not found. +- 그룹 %1ì„(를) ì°¾ì„ ìˆ˜ 없습니다. +- +- +- Successfully added group %1. +- 그룹 %1ì„(를) 추가했습니다. +- +- +- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. +- 암호가 ìœ ì¶œëœ ì ì´ 있는지 검사합니다. íŒŒì¼ ì´ë¦„ì—는 HIBP 형ì‹ìœ¼ë¡œ ëœ ìœ ì¶œëœ ì•”í˜¸ì˜ SHA-1 해시가 ì €ìž¥ëœ íŒŒì¼ì„ 지정해야 합니다. https://haveibeenpwned.com/Passwords 사ì´íŠ¸ì—ì„œ 다운로드할 수 있습니다. +- +- +- FILENAME +- íŒŒì¼ ì´ë¦„ +- +- +- Analyze passwords for weaknesses and problems. +- 취약한 암호와 문제를 분ì„합니다. +- +- +- Failed to open HIBP file %1: %2 +- HIBP íŒŒì¼ %1ì„(를) ì—´ 수 ì—†ìŒ: %2 +- +- +- Evaluating database entries against HIBP file, this will take a while... +- ë°ì´í„°ë² ì´ìŠ¤ 항목과 HIBP 파ì¼ì„ 분ì„하고 있습니다. ìž ì‹œ 기다려 주십시오... +- +- +- Close the currently opened database. +- 현재 열린 ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 닫습니다. +- +- +- Display this help. +- ì´ ë„움ë§ì„ 표시합니다. +- +- +- slot +- 슬롯 +- +- +- Invalid word count %1 +- ìž˜ëª»ëœ ë‹¨ì–´ 개수 %1 +- +- +- The word list is too small (< 1000 items) +- 단어 목ë¡ì´ 너무 ìž‘ìŒ(1000ê°œ 미만) +- +- +- Exit interactive mode. +- 대화형 모드를 종료합니다. +- +- +- Exports the content of a database to standard output in the specified format. +- ë°ì´í„°ë² ì´ìŠ¤ ë‚´ìš©ì„ ì§€ì •í•œ 형ì‹ìœ¼ë¡œ 표준 출력으로 내보냅니다. +- +- +- Unable to export database to XML: %1 +- XMLë¡œ ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 내보낼 수 ì—†ìŒ: %1 +- +- +- Unsupported format %1 +- 지ì›í•˜ì§€ 않는 형ì‹: %1 +- +- +- Use numbers +- ìˆ«ìž ì‚¬ìš© +- +- +- Invalid password length %1 +- ìž˜ëª»ëœ ì•”í˜¸ 길ì´: %1 +- +- +- Display command help. +- 명령 ë„움ë§ì„ 표시합니다. +- +- +- Available commands: +- 사용 가능한 명령: +- +- +- Import the contents of an XML database. +- XML ë°ì´í„°ë² ì´ìŠ¤ì˜ ë‚´ìš©ì„ ê°€ì ¸ì˜µë‹ˆë‹¤. +- +- +- Path of the XML database export. +- XMLë¡œ ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 내보낼 경로입니다. +- +- +- Path of the new database. +- 새 ë°ì´í„°ë² ì´ìŠ¤ì˜ 경로입니다. +- +- +- Successfully imported database. +- ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 가져왔습니다. +- +- +- Unknown command %1 +- ì•Œ 수 없는 명령 %1 +- +- +- Flattens the output to single lines. +- ì¶œë ¥ì„ í•œ 줄로 합칩니다. +- +- +- Only print the changes detected by the merge operation. +- 합치기 작업으로 변경할 사항만 출력합니다. +- +- +- Yubikey slot for the second database. +- ë‘ ë²ˆì§¸ ë°ì´í„°ë² ì´ìŠ¤ì˜ YubiKey 슬롯입니다. +- +- +- Successfully merged %1 into %2. +- %1ì„(를) %2(으)ë¡œ 합쳤습니다. +- +- +- Database was not modified by merge operation. +- 수정 작업으로 ë°ì´í„°ë² ì´ìŠ¤ê°€ 변경ë˜ì§€ 않았습니다. +- +- +- Moves an entry to a new group. +- í•­ëª©ì„ ìƒˆ 그룹으로 ì´ë™í•©ë‹ˆë‹¤. +- +- +- Path of the entry to move. +- ì´ë™í•  í•­ëª©ì˜ ê²½ë¡œìž…ë‹ˆë‹¤. +- +- +- Path of the destination group. +- ëŒ€ìƒ ê·¸ë£¹ì˜ ê²½ë¡œìž…ë‹ˆë‹¤. +- +- +- Could not find group with path %1. +- 경로 %1ì—ì„œ ê·¸ë£¹ì„ ì°¾ì„ ìˆ˜ 없습니다. +- +- +- Entry is already in group %1. +- 경로 %1ì— í•­ëª©ì´ ì´ë¯¸ 있습니다. +- +- +- Successfully moved entry %1 to group %2. +- 항목 %1ì„(를) 그룹 %2(으)ë¡œ ì´ë™í–ˆìŠµë‹ˆë‹¤. +- +- +- Open a database. +- ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 엽니다. +- +- +- Path of the group to remove. +- 삭제할 ê·¸ë£¹ì˜ ê²½ë¡œìž…ë‹ˆë‹¤. +- +- +- Cannot remove root group from database. +- ë°ì´í„°ë² ì´ìŠ¤ 루트 ê·¸ë£¹ì„ ì‚­ì œí•  수 없습니다. +- +- +- Successfully recycled group %1. +- 그룹 %1ì„(를) 휴지통으로 ì´ë™í–ˆìŠµë‹ˆë‹¤. +- +- +- Successfully deleted group %1. +- 그룹 %1ì„(를) 삭제했습니다. +- +- +- Failed to open database file %1: not found +- ë°ì´í„°ë² ì´ìŠ¤ íŒŒì¼ %1ì„(를) ì—´ 수 ì—†ìŒ: ì°¾ì„ ìˆ˜ ì—†ìŒ +- +- +- Failed to open database file %1: not a plain file +- ë°ì´í„°ë² ì´ìŠ¤ íŒŒì¼ %1ì„(를) ì—´ 수 ì—†ìŒ: ì¼ë°˜ 파ì¼ì´ 아님 +- +- +- Failed to open database file %1: not readable +- ë°ì´í„°ë² ì´ìŠ¤ íŒŒì¼ %1ì„(를) ì—´ 수 ì—†ìŒ: ì½ì„ 수 ì—†ìŒ +- +- +- Enter password to unlock %1: +- %1ì˜ ìž ê¸ˆ í•´ì œ 암호 ìž…ë ¥: +- +- +- Invalid YubiKey slot %1 +- ìž˜ëª»ëœ YubiKey 슬롯 %1 +- +- +- Enter password to encrypt database (optional): +- ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 암호화할 암호 ìž…ë ¥(ì„ íƒ ì‚¬í•­): +- +- +- HIBP file, line %1: parse error +- HIBP íŒŒì¼ %1줄: 처리 오류 +- +- +- Secret Service Integration +- 비밀 서비스 통합 +- +- +- User name +- ì‚¬ìš©ìž ì´ë¦„ +- +- +- Password for '%1' has been leaked %2 time(s)! +- '%1'ì˜ ì•”í˜¸ê°€ %2번 유출ë˜ì—ˆìŠµë‹ˆë‹¤! +- +- +- Invalid password generator after applying all options +- 모든 ì˜µì…˜ì„ ì ìš©í–ˆì„ ë•Œ 암호 ìƒì„±ê¸°ê°€ ìž˜ëª»ë¨ +- +- +- Show the protected attributes in clear text. +- ë³´í˜¸ëœ ì†ì„±ì„ í‰ë¬¸ìœ¼ë¡œ 표시합니다. +- +- +- Browser Plugin Failure +- 브ë¼ìš°ì € í”ŒëŸ¬ê·¸ì¸ ì˜¤ë¥˜ +- +- +- Could not save the native messaging script file for %1. +- %1ì˜ ë„¤ì´í‹°ë¸Œ 메시징 스í¬ë¦½íŠ¸ 파ì¼ì„ 저장할 수 없습니다. +- +- +- Copy the given attribute to the clipboard. Defaults to "password" if not specified. +- 지정한 ì†ì„±ì„ í´ë¦½ë³´ë“œì— 복사합니다. 지정하지 ì•Šì•˜ì„ ë•Œì˜ ê¸°ë³¸ê°’ì€ "password"입니다. +- +- +- Copy the current TOTP to the clipboard (equivalent to "-a totp"). +- 현재 TOTP ê°’ì„ í´ë¦½ë³´ë“œì— 복사합니다("-a totp"와 ë™ì¼í•¨). +- +- +- Copy an entry's attribute to the clipboard. +- í•­ëª©ì˜ ì†ì„±ì„ í´ë¦½ë³´ë“œì— 복사합니다. +- +- +- ERROR: Please specify one of --attribute or --totp, not both. +- 오류: --attribute나 --totp 둘 중 하나만 지정하십시오. +- +- +- ERROR: attribute %1 is ambiguous, it matches %2. +- 오류: ì†ì„± %1ì´(ê°€) 모호합니다. ì¼ì¹˜í•˜ëŠ” 항목: %2. +- +- +- Attribute "%1" not found. +- ì†ì„± "%1"ì„(를) ì°¾ì„ ìˆ˜ 없습니다. +- +- +- Entry's "%1" attribute copied to the clipboard! +- í•­ëª©ì˜ "%1" ì†ì„±ì„ í´ë¦½ë³´ë“œì— 복사했습니다! +- +- +- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). +- ë°ì´í„°ë² ì´ìŠ¤ì— 접근할 ë•Œ 사용할 YubiKey 슬롯과 ì„ íƒì ì¸ ì¼ë ¨ 번호입니다(예: 1:7370001). +- +- +- slot[:serial] +- slot[:serial] +- +- +- Target decryption time in MS for the database. +- 밀리초 단위 ë°ì´í„°ë² ì´ìŠ¤ 복호화 목표 시간입니다. +- +- +- time +- time +- +- +- Set the key file for the database. +- ë°ì´í„°ë² ì´ìŠ¤ 키 파ì¼ì„ 설정합니다. +- +- +- Set a password for the database. +- ë°ì´í„°ë² ì´ìŠ¤ 암호를 설정합니다. +- +- +- Invalid decryption time %1. +- ìž˜ëª»ëœ ë³µí˜¸í™” 시간: %1. +- +- +- Target decryption time must be between %1 and %2. +- ëŒ€ìƒ ë³µí˜¸í™” ì‹œê°„ì€ %1 - %2 사ì´ì— 있어야 합니다. +- +- +- Failed to set database password. +- ë°ì´í„°ë² ì´ìŠ¤ 암호를 설정할 수 없습니다. +- +- +- Benchmarking key derivation function for %1ms delay. +- %1 ms 지연 시간 ë™ì•ˆ 키 ìœ ë„ í•¨ìˆ˜(KDF)를 벤치마í¬í•˜ê³  있습니다. +- +- +- Setting %1 rounds for key derivation function. +- 키 ìœ ë„ í•¨ìˆ˜(KDF)ì˜ ë¼ìš´ë“œ 수를 %1(으)ë¡œ 설정합니다. +- +- +- error while setting database key derivation settings. +- ë°ì´í„°ë² ì´ìŠ¤ 키 ìœ ë„ ì„¤ì • 중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤. +- +- +- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. +- 내보낼 ë•Œ 사용할 형ì‹ìž…니다. 'xml', 'csv'를 사용할 수 있으며 ê¸°ë³¸ê°’ì€ 'xml'입니다. +- +- +- Unable to import XML database: %1 +- XML ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 가져올 수 ì—†ìŒ: %1 +- +- +- Show a database's information. +- ë°ì´í„°ë² ì´ìŠ¤ 정보를 표시합니다. +- +- +- UUID: +- UUID: +- +- +- Name: +- ì´ë¦„: +- +- +- Description: +- 설명: +- +- +- Cipher: +- 암호화: +- +- +- KDF: +- KDF: +- +- +- Recycle bin is enabled. +- íœ´ì§€í†µì´ í™œì„±í™”ë˜ì—ˆìŠµë‹ˆë‹¤. +- +- +- Recycle bin is not enabled. +- íœ´ì§€í†µì´ ë¹„í™œì„±í™”ë˜ì—ˆìŠµë‹ˆë‹¤. +- +- +- Invalid command %1. +- ìž˜ëª»ëœ ëª…ë ¹ %1. +- +- +- Invalid YubiKey serial %1 +- ìž˜ëª»ëœ YubiKey ì¼ë ¨ 번호 %1 +- +- +- Please touch the button on your YubiKey to continue… +- ê³„ì† ì§„í–‰í•˜ë ¤ë©´ YubiKeyì˜ ë‹¨ì¶”ë¥¼ 누르십시오... +- +- +- Do you want to create a database with an empty password? [y/N]: +- 빈 암호를 사용해서 ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 만드시겠습니까? [y/N]: +- +- +- Repeat password: +- 암호 반복: +- +- +- Error: Passwords do not match. +- 오류: 암호가 ì¼ì¹˜í•˜ì§€ 않습니다. +- +- +- All clipping programs failed. Tried %1 +- +- 모든 í´ë¦½ë³´ë“œ í”„ë¡œê·¸ëž¨ì´ ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤. ì‹œë„: %1 +- +- +- +- AES (%1 rounds) +- AES(%1ë¼ìš´ë“œ) +- +- +- AES 256-bit +- AES 256비트 +- +- +- Twofish 256-bit +- Twofish 256비트 +- +- +- ChaCha20 256-bit +- ChaCha20 256비트 +- +- +- Benchmark %1 delay +- %1 ë²¤ì¹˜ë§ˆí¬ ì§€ì—° 시간 +- +- +- %1 ms +- milliseconds +- %1 ms +- +- +- %1 s +- seconds +- %1ì´ˆ +- +- +- path to a custom local config file +- +- +- +- WARNING: You are using an old key file format which KeePassXC may +-stop supporting in the future. +- +-Please consider generating a new key file. +- +- +- +- Argon2%1 (%2 rounds, %3 KB) +- +- +- +- Argon2d (KDBX 4 – recommended) +- +- +- +- Argon2id (KDBX 4) +- +- +- +- TOTP +- TOTP +- +- +- Icon +- ì•„ì´ì½˜ +- +- +- Unsupported key file version: %1 +- +- +- +- Checksum mismatch! Key file may be corrupt. +- +- +- +- Unexpected key file data! Key file may be corrupt. +- +- +- +- +- QtIOCompressor +- +- Internal zlib error when compressing: +- 압축 중 내부 zlib 오류 ë°œìƒ: +- +- +- Error writing to underlying device: +- ìž¥ì¹˜ì— ê¸°ë¡í•˜ëŠ” 중 오류 ë°œìƒ: +- +- +- Error opening underlying device: +- 장치를 여는 중 오류 ë°œìƒ: +- +- +- Error reading data from underlying device: +- 장치ì—ì„œ ì½ëŠ” 중 오류 ë°œìƒ: +- +- +- Internal zlib error when decompressing: +- 압축 푸는 중 내부 zlib 오류 ë°œìƒ: +- +- +- +- QtIOCompressor::open +- +- The gzip format not supported in this version of zlib. +- ì´ ë²„ì „ì˜ zlibì—ì„œ gzip 형ì‹ì„ 지ì›í•˜ì§€ 않습니다. +- +- +- Internal zlib error: +- 내부 zlib 오류: +- +- +- +- ReportsWidgetHealthcheck +- +- Also show entries that have been excluded from reports +- ë³´ê³ ì„œì—ì„œ ì œì™¸ëœ í•­ëª©ë„ í‘œì‹œ +- +- +- Hover over reason to show additional details. Double-click entries to edit. +- ì´ìœ  ìœ„ì— ë§ˆìš°ìŠ¤ë¥¼ 올려 ë‘ë©´ ìžì„¸í•œ 정보를 표시합니다. í•­ëª©ì„ ë‘ ë²ˆ í´ë¦­í•˜ë©´ 편집할 수 있습니다. +- +- +- Bad +- Password quality +- ë‚˜ì¨ +- +- +- Bad — password must be changed +- ë‚˜ì¨ â€” 암호를 변경해야 함 +- +- +- Poor +- Password quality +- 매우 약함 +- +- +- Poor — password should be changed +- 매우 약함 — 암호 ë³€ê²½ì„ ê³ ë ¤í•´ì•¼ 함 +- +- +- Weak +- Password quality +- 약함 +- +- +- Weak — consider changing the password +- 약함 — 암호 ë³€ê²½ì„ ê¶Œìž¥í•¨ +- +- +- (Excluded) +- (제외ë¨) +- +- +- This entry is being excluded from reports +- ì´ í•­ëª©ì€ ë³´ê³ ì„œì—ì„œ ì œì™¸ë¨ +- +- +- Please wait, health data is being calculated... +- 안전성 검사를 진행하는 ë™ì•ˆ ìž ì‹œ 기다려 주십시오... +- +- +- Congratulations, everything is healthy! +- 축하합니다, 모든 í•­ëª©ì´ ì•ˆì „í•©ë‹ˆë‹¤! +- +- +- Title +- 제목 +- +- +- Path +- 경로 +- +- +- Score +- ì ìˆ˜ +- +- +- Reason +- ì´ìœ  +- +- +- Edit Entry... +- 항목 편집... +- +- +- Exclude from reports +- ë³´ê³ ì„œì—ì„œ 제외 +- +- +- +- ReportsWidgetHibp +- +- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. +- 경고: ì´ ë³´ê³ ì„œë¥¼ ìƒì„±í•˜ë ¤ë©´ Have I Been Pwned 온ë¼ì¸ 서비스(https://haveibeenpwned.com)ë¡œ 정보를 보내야 합니다. ê³„ì† ì§„í–‰í•˜ë©´ ë°ì´í„°ë² ì´ìŠ¤ì— ì €ìž¥ëœ ëª¨ë“  ì•”í˜¸ì˜ ì•”í˜¸í•™ì  í•´ì‹œì˜ ì²« 5글ìžë¥¼ ì´ ì„œë¹„ìŠ¤ë¡œ 안전하게 전송합니다. ë°ì´í„°ë² ì´ìŠ¤ëŠ” 안전하게 유지ë˜ë©°, ì´ ì •ë³´ë¥¼ 사용하여 ë°ì´í„°ë² ì´ìŠ¤ì— ì €ìž¥ëœ ì›ëž˜ 암호를 ë³µì›í•  수는 없습니다. 그러나 해당 온ë¼ì¸ 서비스ì—서는 암호를 보낸 횟수와 IP 주소를 ì•Œ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. +- +- +- Perform Online Analysis +- 온ë¼ì¸ ë¶„ì„ ì‹œí–‰ +- +- +- Also show entries that have been excluded from reports +- ë³´ê³ ì„œì—ì„œ ì œì™¸ëœ í•­ëª©ë„ í‘œì‹œ +- +- +- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. +- 현재 KeePassXC 빌드ì—ì„œ ë„¤íŠ¸ì›Œí¬ ê¸°ëŠ¥ì„ ì§€ì›í•˜ì§€ 않습니다. Have I Been Pwned ë°ì´í„°ë² ì´ìŠ¤ì— 암호를 조회하려면 ë„¤íŠ¸ì›Œí¬ ê¸°ëŠ¥ì´ í•„ìš”í•©ë‹ˆë‹¤. +- +- +- Congratulations, no exposed passwords! +- 축하합니다, ìœ ì¶œëœ ì•”í˜¸ê°€ 없습니다! +- +- +- Title +- 제목 +- +- +- Path +- 경로 +- +- +- Password exposed… +- 암호 유출ë¨... +- +- +- (Excluded) +- (제외ë¨) +- +- +- This entry is being excluded from reports +- ì´ í•­ëª©ì€ ë³´ê³ ì„œì—ì„œ ì œì™¸ë¨ +- +- +- once +- í•œ 번 +- +- +- up to 10 times +- 최대 10번 +- +- +- up to 100 times +- 최대 100번 +- +- +- up to 1000 times +- 최대 1000번 +- +- +- up to 10,000 times +- 최대 10,000번 +- +- +- up to 100,000 times +- 최대 100,000번 +- +- +- up to a million times +- 최대 1,000,000번 +- +- +- millions of times +- 1,000,000번 ì´ìƒ +- +- +- Edit Entry... +- 항목 편집... +- +- +- Exclude from reports +- ë³´ê³ ì„œì—ì„œ 제외 +- +- +- +- ReportsWidgetStatistics +- +- Hover over lines with error icons for further information. +- 오류 ì•„ì´ì½˜ì´ í‘œì‹œëœ í•­ëª© ìœ„ì— ë§ˆìš°ìŠ¤ë¥¼ 올려 놓으면 ìžì„¸í•œ 정보를 표시합니다. +- +- +- Name +- ì´ë¦„ +- +- +- Value +- ê°’ +- +- +- Please wait, database statistics are being calculated... +- ë°ì´í„°ë² ì´ìŠ¤ 통계를 계산하는 ë™ì•ˆ ìž ì‹œ 기다려 주십시오... +- +- +- Database name +- ë°ì´í„°ë² ì´ìŠ¤ ì´ë¦„ +- +- +- Description +- 설명 +- +- +- Location +- 위치 +- +- +- Last saved +- 마지막 저장 +- +- +- Unsaved changes +- 저장하지 ì•Šì€ ë³€ê²½ 사항 +- +- +- yes +- 예 +- +- +- no +- 아니요 +- +- +- The database was modified, but the changes have not yet been saved to disk. +- ë°ì´í„°ë² ì´ìŠ¤ê°€ 수정ë˜ì—ˆì§€ë§Œ 변경 ì‚¬í•­ì„ ë””ìŠ¤í¬ì— 저장하지 않았습니다. +- +- +- Number of groups +- 그룹 개수 +- +- +- Number of entries +- 항목 개수 +- +- +- Number of expired entries +- 내보낸 항목 개수 +- +- +- The database contains entries that have expired. +- ë°ì´í„°ë² ì´ìŠ¤ì— ë§Œë£Œëœ í•­ëª©ì´ í¬í•¨ë˜ì–´ 있습니다. +- +- +- Unique passwords +- 중복ë˜ì§€ 않는 암호 +- +- +- Non-unique passwords +- ì¤‘ë³µëœ ì•”í˜¸ +- +- +- More than 10% of passwords are reused. Use unique passwords when possible. +- ì „ì²´ 암호 중 10% ì´ìƒì„ 재사용하고 있습니다. 가능하다면 유ì¼í•œ 암호를 사용하십시오. +- +- +- Maximum password reuse +- 최대 암호 재사용 +- +- +- Some passwords are used more than three times. Use unique passwords when possible. +- ì¼ë¶€ 암호가 3ê³³ ì´ìƒì—ì„œ 재사용ë˜ê³  있습니다. 가능하다면 유ì¼í•œ 암호를 사용하십시오. +- +- +- Number of short passwords +- ì§§ì€ ì•”í˜¸ 개수 +- +- +- Recommended minimum password length is at least 8 characters. +- 최소 8ìž ì´ìƒì˜ 암호를 사용하십시오. +- +- +- Number of weak passwords +- 약한 암호 개수 +- +- +- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. +- 암호 ê°•ë„ê°€ '좋ìŒ'ì´ë‚˜ '매우 좋ìŒ' 등급으로 ë¶„ë¥˜ëœ ê¸´ 무작위 암호를 사용하는 ê²ƒì„ ì¶”ì²œí•©ë‹ˆë‹¤. +- +- +- Entries excluded from reports +- ë³´ê³ ì„œì—ì„œ ì œì™¸ëœ í•­ëª© +- +- +- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. +- 보안 ê°•ë„ê°€ ë‚®ì€ ì•”í˜¸ë¥¼ 사용하는 ë“±ì˜ í•­ëª©ì„ ë³´ê³ ì„œì—ì„œ 제외할 수 있습니다. í•­ìƒ ë¬¸ì œì¸ ê²ƒì€ ì•„ë‹ˆì§€ë§Œ ì‚¬ìš©ì— ì£¼ì˜í•˜ì‹­ì‹œì˜¤. +- +- +- Average password length +- í‰ê·  암호 ê¸¸ì´ +- +- +- %1 characters +- %1ìž +- +- +- Average password length is less than ten characters. Longer passwords provide more security. +- í‰ê·  암호 길ì´ê°€ 10ìž ì´í•˜ìž…니다. 긴 암호를 ì‚¬ìš©í• ìˆ˜ë¡ ë” ì•ˆì „í•©ë‹ˆë‹¤. +- +- +- +- SSHAgent +- +- Agent connection failed. +- ì—ì´ì „íŠ¸ì— ì—°ê²°í•  수 없습니다. +- +- +- Agent protocol error. +- ì—ì´ì „트 프로토콜 오류입니다. +- +- +- No agent running, cannot add identity. +- ì—ì´ì „트가 실행 중ì´ì§€ ì•Šì•„ì„œ ì‹ë³„ìžë¥¼ 추가할 수 없습니다. +- +- +- No agent running, cannot remove identity. +- ì—ì´ì „트가 실행 중ì´ì§€ ì•Šì•„ì„œ ì‹ë³„ìžë¥¼ 삭제할 수 없습니다. +- +- +- Agent refused this identity. Possible reasons include: +- ì—ì´ì „트ì—ì„œ ì´ ì‹ë³„ìžë¥¼ 거부했습니다. 가능한 ì´ìœ : +- +- +- The key has already been added. +- 키가 ì´ë¯¸ 추가ë˜ì—ˆìŠµë‹ˆë‹¤. +- +- +- Restricted lifetime is not supported by the agent (check options). +- ì—ì´ì „트ì—ì„œ 시간 ì œí•œì„ ì§€ì›í•˜ì§€ 않습니다(ì˜µì…˜ì„ í™•ì¸í•˜ì‹­ì‹œì˜¤). +- +- +- A confirmation request is not supported by the agent (check options). +- ì—ì´ì „트ì—ì„œ í™•ì¸ ìš”ì²­ì„ ì§€ì›í•˜ì§€ 않습니다(ì˜µì…˜ì„ í™•ì¸í•˜ì‹­ì‹œì˜¤). +- +- +- Key identity ownership conflict. Refusing to add. +- 키 ì‹ë³„ìž ì†Œìœ ê¶Œì´ ì¶©ëŒí•©ë‹ˆë‹¤. 추가하지 않습니다. +- +- +- No agent running, cannot list identities. +- ì—ì´ì „트가 실행 중ì´ì§€ ì•Šì•„ì„œ ì‹ë³„ìž ëª©ë¡ì„ 표시할 수 없습니다. +- +- +- +- SearchHelpWidget +- +- Search Help +- 검색 ë„ì›€ë§ +- +- +- Search terms are as follows: [modifiers][field:]["]term["] +- ë‹¤ìŒ ê²€ìƒ‰ì–´ë¥¼ 사용할 수 있습니다: [수정ìž][í•„ë“œ:]["]검색어["] +- +- +- Every search term must match (ie, logical AND) +- 모든 검색어가 ì¼ì¹˜í•´ì•¼ 합니다(논리곱, AND) +- +- +- Modifiers +- ìˆ˜ì •ìž +- +- +- exclude term from results +- ê²°ê³¼ì—ì„œ 검색어 제외 +- +- +- match term exactly +- 검색어와 정확히 ì¼ì¹˜ +- +- +- use regex in term +- ê²€ìƒ‰ì–´ì— ì •ê·œ í‘œí˜„ì‹ ì‚¬ìš© +- +- +- Fields +- í•„ë“œ +- +- +- Term Wildcards +- 항목 와ì¼ë“œì¹´ë“œ +- +- +- match anything +- 모든 것과 ì¼ì¹˜ +- +- +- match one +- 하나와 ì¼ì¹˜ +- +- +- logical OR +- 논리합(OR) +- +- +- Examples +- 예제 +- +- +- +- SearchWidget +- +- Search +- 찾기 +- +- +- Limit search to selected group +- 지정한 그룹ì—서만 찾기 +- +- +- Search Help +- 검색 ë„ì›€ë§ +- +- +- Search (%1)... +- Search placeholder text, %1 is the keyboard shortcut +- 검색(%1)... +- +- +- Case sensitive +- ëŒ€ì†Œë¬¸ìž êµ¬ë¶„ +- +- +- +- SettingsWidgetFdoSecrets +- +- Options +- 옵션 +- +- +- Enable KeepassXC Freedesktop.org Secret Service integration +- KeePassXC Freedesktop.org 비밀 서비스 통합 사용 +- +- +- General +- ì¼ë°˜ +- +- +- Show notification when credentials are requested +- ì¸ì¦ ì •ë³´ê°€ 필요할 ë•Œ 알림 표시 +- +- +- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> +- <html><head/><body><p>ë°ì´í„°ë² ì´ìŠ¤ì˜ íœ´ì§€í†µì„ í™œì„±í™”í•˜ë©´ í•­ëª©ì„ íœ´ì§€í†µìœ¼ë¡œ ì´ë™í•©ë‹ˆë‹¤. 그렇지 않으면 확ì¸í•˜ì§€ ì•Šê³  삭제합니다.</p><p>다른 항목ì—ì„œ 삭제할 í•­ëª©ì„ ì°¸ì¡°í•  ë•Œì—는 ê³„ì† í™•ì¸ ëŒ€í™”ìƒìžë¥¼ 표시합니다.</p></body></html> +- +- +- Exposed database groups: +- 내보낼 ë°ì´í„°ë² ì´ìŠ¤ 그룹: +- +- +- Authorization +- ì¸ì¦ +- +- +- These applications are currently connected: +- ë‹¤ìŒ í”„ë¡œê·¸ëž¨ì´ ì—°ê²°ë˜ì–´ 있습니다: +- +- +- Don't confirm when entries are deleted by clients +- í´ë¼ì´ì–¸íŠ¸ì—ì„œ í•­ëª©ì„ ì‚­ì œí•  ë•Œ 확ì¸í•˜ì§€ 않기 +- +- +- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. +- <b>오류:</b> DBusì— ì—°ê²°í•  수 없습니다. DBus 설치 ìƒíƒœë¥¼ 확ì¸í•˜ì‹­ì‹œì˜¤. +- +- +- <b>Warning:</b> +- <b>경고:</b> +- +- +- Save current changes to activate the plugin and enable editing of this section. +- 플러그ì¸ì„ 활성화하고 ì´ ë¶€ë¶„ íŽ¸ì§‘ì„ í™œì„±í™”í•˜ë ¤ë©´ 변경 ì‚¬í•­ì„ ì €ìž¥í•˜ì‹­ì‹œì˜¤. +- +- +- +- SettingsWidgetKeeShare +- +- Active +- 활성 +- +- +- Allow export +- 내보내기 허용 +- +- +- Allow import +- 가져오기 허용 +- +- +- Own certificate +- ìžê°€ ì¸ì¦ì„œ +- +- +- Fingerprint: +- 지문: +- +- +- Certificate: +- ì¸ì¦ì„œ: +- +- +- Signer +- ì„œëª…ìž +- +- +- Key: +- 키: +- +- +- Generate +- ìƒì„± +- +- +- Import +- 가져오기 +- +- +- Export +- 내보내기 +- +- +- Imported certificates +- 가져온 ì¸ì¦ì„œ +- +- +- Trust +- 신뢰 +- +- +- Ask +- 묻기 +- +- +- Untrust +- 믿지 ì•ŠìŒ +- +- +- Remove +- ì‚­ì œ +- +- +- Path +- 경로 +- +- +- Status +- ìƒíƒœ +- +- +- Fingerprint +- 지문 +- +- +- Certificate +- ì¸ì¦ì„œ +- +- +- Trusted +- 신뢰함 +- +- +- Untrusted +- 신뢰하지 ì•ŠìŒ +- +- +- Unknown +- ì•Œ 수 ì—†ìŒ +- +- +- key.share +- Filetype for KeeShare key +- key.share +- +- +- KeeShare key file +- KeeShare 키 íŒŒì¼ +- +- +- All files +- 모든 íŒŒì¼ +- +- +- Select path +- 경로 ì„ íƒ +- +- +- Exporting changed certificate +- ë³€ê²½ëœ ì¸ì¦ì„œ 내보내기 +- +- +- The exported certificate is not the same as the one in use. Do you want to export the current certificate? +- 내보낸 ì¸ì¦ì„œê°€ 사용 ì¤‘ì¸ ì¸ì¦ì„œì™€ 다릅니다. 현재 ì¸ì¦ì„œë¥¼ 내보내시겠습니까? +- +- +- Signer: +- 서명ìž: +- +- +- Allow KeeShare imports +- KeeShare 가져오기 허용 +- +- +- Allow KeeShare exports +- KeeShare 내보내기 허용 +- +- +- Only show warnings and errors +- 경고와 오류만 표시 +- +- +- Key +- 키 +- +- +- Signer name field +- ì„œëª…ìž ì´ë¦„ í•„ë“œ +- +- +- Generate new certificate +- 새 ì¸ì¦ì„œ ìƒì„± +- +- +- Import existing certificate +- 기존 ì¸ì¦ì„œ 가져오기 +- +- +- Export own certificate +- ë‚´ ì¸ì¦ì„œ 내보내기 +- +- +- Known shares +- 알려진 공유 +- +- +- Trust selected certificate +- ì„ íƒí•œ ì¸ì¦ì„œ 신뢰 +- +- +- Ask whether to trust the selected certificate every time +- ì„ íƒí•œ ì¸ì¦ì„œë¥¼ 신뢰할지 í•­ìƒ ë¬»ê¸° +- +- +- Untrust selected certificate +- ì„ íƒí•œ ì¸ì¦ì„œ 신뢰 í•´ì œ +- +- +- Remove selected certificate +- ì„ íƒí•œ ì¸ì¦ì„œ ì‚­ì œ +- +- +- +- ShareExport +- +- Overwriting signed share container is not supported - export prevented +- ì„œëª…ëœ ê³µìœ  컨테ì´ë„ˆì— ë®ì–´ì“°ê¸°ëŠ” 지ì›ë˜ì§€ ì•ŠìŒ - 내보내기 ì¤‘ë‹¨ë¨ +- +- +- Could not write export container (%1) +- 내보내기 컨테ì´ë„ˆì— 기ë¡í•  수 ì—†ìŒ (%1) +- +- +- Could not embed signature: Could not open file to write (%1) +- ì„œëª…ì„ ìž„ë² ë“œí•  수 ì—†ìŒ: 쓰기 위해 파ì¼ì„ ì—´ 수 ì—†ìŒ (%1) +- +- +- Could not embed signature: Could not write file (%1) +- ì„œëª…ì„ ìž„ë² ë“œí•  수 ì—†ìŒ: 파ì¼ì— 쓸 수 ì—†ìŒ (%1) +- +- +- Could not embed database: Could not open file to write (%1) +- ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 임베드할 수 ì—†ìŒ: 쓰기 위해 파ì¼ì„ ì—´ 수 ì—†ìŒ (%1) +- +- +- Could not embed database: Could not write file (%1) +- ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 임베드할 수 ì—†ìŒ: 파ì¼ì— 쓸 수 ì—†ìŒ (%1) +- +- +- Overwriting unsigned share container is not supported - export prevented +- 서명ë˜ì§€ ì•Šì€ ê³µìœ  컨테ì´ë„ˆì— ë®ì–´ì“°ê¸°ëŠ” 지ì›ë˜ì§€ ì•ŠìŒ - 내보내기 ì¤‘ë‹¨ë¨ +- +- +- Could not write export container +- 내보내기 컨테ì´ë„ˆì— 기ë¡í•  수 ì—†ìŒ +- +- +- Unexpected export error occurred +- 예ìƒí•˜ì§€ 못한 내보내기 오류 +- +- +- +- ShareImport +- +- Import from container without signature +- 서명ë˜ì§€ ì•Šì€ ì»¨í…Œì´ë„ˆì—ì„œ 가져오기 +- +- +- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? +- ê³µìœ ëœ ì»¨í…Œì´ë„ˆê°€ 서명ë˜ì–´ 있지 ì•Šì•„ì„œ ì›ë³¸ì„ 확ì¸í•  수 없습니다. %1ì—ì„œ 가져오시겠습니까? +- +- +- Import from container with certificate +- ì„œëª…ëœ ì»¨í…Œì´ë„ˆì—ì„œ 가져오기 +- +- +- Do you want to trust %1 with the fingerprint of %2 from %3? +- %3ì—ì„œ 온 ì§€ë¬¸ì´ %2ì¸ %1ì„(를) 신뢰하시겠습니까? +- +- +- Not this time +- ì§€ê¸ˆì€ í•˜ì§€ ì•ŠìŒ +- +- +- Never +- 하지 ì•ŠìŒ +- +- +- Always +- í•­ìƒ +- +- +- Just this time +- ì´ë²ˆ í•œ 번 +- +- +- Signed share container are not supported - import prevented +- ì„œëª…ëœ ê³µìœ  컨테ì´ë„ˆëŠ” 지ì›í•˜ì§€ ì•ŠìŒ - 가져오기 ì¤‘ë‹¨ë¨ +- +- +- File is not readable +- 파ì¼ì—ì„œ ì½ì„ 수 ì—†ìŒ +- +- +- Invalid sharing container +- ìž˜ëª»ëœ ê³µìœ  컨테ì´ë„ˆ +- +- +- Untrusted import prevented +- 신뢰할 수 없는 가져오기 ì¤‘ë‹¨ë¨ +- +- +- Successful signed import +- ì„œëª…ëœ ê°€ì ¸ì˜¤ê¸° 성공 +- +- +- Unsigned share container are not supported - import prevented +- 서명ë˜ì§€ ì•Šì€ ê³µìœ  컨테ì´ë„ˆëŠ” 지ì›í•˜ì§€ ì•ŠìŒ - 가져오기 ì¤‘ë‹¨ë¨ +- +- +- Successful unsigned import +- 서명ë˜ì§€ ì•Šì€ ê°€ì ¸ì˜¤ê¸° 성공 +- +- +- File does not exist +- 파ì¼ì´ 존재하지 ì•ŠìŒ +- +- +- Unknown share container type +- ì•Œ 수 없는 공유 컨테ì´ë„ˆ í˜•ì‹ +- +- +- +- ShareObserver +- +- Import from %1 failed (%2) +- %1ì—ì„œ 가져오기 실패 (%2) +- +- +- Import from %1 successful (%2) +- %1ì—ì„œ 가져오기 성공 (%2) +- +- +- Imported from %1 +- %1ì—ì„œ 가져옴 +- +- +- Export to %1 failed (%2) +- %1(으)ë¡œ 내보내기 실패 (%2) +- +- +- Export to %1 successful (%2) +- %1(으)ë¡œ 내보내기 성공 (%2) +- +- +- Export to %1 +- %1(으)ë¡œ 내보내기 +- +- +- Multiple import source path to %1 in %2 +- %2ì˜ %1(으)ë¡œ 다중 가져오기 ì›ë³¸ 경로 +- +- +- Conflicting export target path %1 in %2 +- %2ì˜ ë‚´ë³´ë‚´ê¸° ëŒ€ìƒ ê²½ë¡œ %1ì´(ê°€) 충ëŒí•¨ +- +- +- +- TotpDialog +- +- Timed Password +- 시간 ì œí•œëœ ì•”í˜¸ +- +- +- 000000 +- 000000 +- +- +- Copy +- 복사 +- +- +- Expires in <b>%n</b> second(s) +- <b>%n</b>ì´ˆ 후 ë§Œë£Œë¨ +- +- +- +- TotpExportSettingsDialog +- +- Copy +- 복사 +- +- +- NOTE: These TOTP settings are custom and may not work with other authenticators. +- TOTP QR code dialog warning +- 메모: ì´ TOTP ì„¤ì •ì€ ì‚¬ìš©ìž ì •ì˜ ì„¤ì •ì´ë©° 다른 ì¸ì¦ê¸°ì—ì„œ ë™ìž‘하지 ì•Šì„ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. +- +- +- There was an error creating the QR code. +- QR 코드를 ìƒì„±í•˜ëŠ” 중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤. +- +- +- Closing in %1 seconds. +- %1ì´ˆ 후 닫습니다. +- +- +- +- TotpSetupDialog +- +- Setup TOTP +- TOTP 설정 +- +- +- Default RFC 6238 token settings +- 기본 RFC 6238 í† í° ì„¤ì • +- +- +- Steam token settings +- Steam í† í° ì„¤ì • +- +- +- Use custom settings +- ì‚¬ìš©ìž ì •ì˜ ì„¤ì • 사용 +- +- +- Custom Settings +- ì‚¬ìš©ìž ì •ì˜ ì„¤ì • +- +- +- Time step: +- 시간 단계: +- +- +- sec +- Seconds +- ì´ˆ +- +- +- Code size: +- 코드 í¬ê¸°: +- +- +- Secret Key: +- 비밀 키: +- +- +- Secret key must be in Base32 format +- 비밀 키는 Base32 형ì‹ì´ì–´ì•¼ 함 +- +- +- Secret key field +- 비밀 키 í•„ë“œ +- +- +- Algorithm: +- 알고리즘: +- +- +- Time step field +- 시간 단계 í•„ë“œ +- +- +- digits +- ìžë¦¬ +- +- +- Invalid TOTP Secret +- ìž˜ëª»ëœ TOTP 비밀 ê°’ +- +- +- You have entered an invalid secret key. The key must be in Base32 format. +-Example: JBSWY3DPEHPK3PXP +- ìž˜ëª»ëœ ë¹„ë°€ 키를 입력했습니다. 키는 Base32 형ì‹ì´ì–´ì•¼ 합니다. +-예: JBSWY3DPEHPK3PXP +- +- +- Confirm Remove TOTP Settings +- TOTP 설정 ì‚­ì œ í™•ì¸ +- +- +- Are you sure you want to delete TOTP settings for this entry? +- ì´ í•­ëª©ì˜ TOTP ì„¤ì •ì„ ì‚­ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ? +- +- +- +- URLEdit +- +- Invalid URL +- ìž˜ëª»ëœ URL +- +- +- +- UpdateCheckDialog +- +- Checking for updates +- ì—…ë°ì´íŠ¸ í™•ì¸ ì¤‘ +- +- +- Checking for updates... +- ì—…ë°ì´íŠ¸ í™•ì¸ ì¤‘... +- +- +- Close +- 닫기 +- +- +- Update Error! +- ì—…ë°ì´íŠ¸ 오류! +- +- +- An error occurred in retrieving update information. +- ì—…ë°ì´íŠ¸ 정보를 가져오는 중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤. +- +- +- Please try again later. +- ë‚˜ì¤‘ì— ë‹¤ì‹œ ì‹œë„하십시오. +- +- +- Software Update +- 소프트웨어 ì—…ë°ì´íŠ¸ +- +- +- A new version of KeePassXC is available! +- KeePassXCì˜ ìƒˆë¡œìš´ ë²„ì „ì„ ì‚¬ìš©í•  수 있습니다! +- +- +- KeePassXC %1 is now available — you have %2. +- KeePassXC %1ì„(를) 사용할 수 있습니다 — 사용 ì¤‘ì¸ ë²„ì „ì€ %2입니다. +- +- +- Download it at keepassxc.org +- keepassxc.orgì—ì„œ 다운로드 +- +- +- You're up-to-date! +- 최신 ë²„ì „ì„ ì‚¬ìš©í•˜ê³  있습니다! +- +- +- KeePassXC %1 is currently the newest version available +- KeePassXCì˜ í˜„ìž¬ 최신 ë²„ì „ì€ %1입니다 +- +- +- +- WelcomeWidget +- +- Start storing your passwords securely in a KeePassXC database +- KeePassXC ë°ì´í„°ë² ì´ìŠ¤ì— 암호를 안전하게 저장하십시오 +- +- +- Create new database +- 새 ë°ì´í„°ë² ì´ìŠ¤ 만들기 +- +- +- Open existing database +- 기존 ë°ì´í„°ë² ì´ìŠ¤ 열기 +- +- +- Import from KeePass 1 +- KeePass 1ì—ì„œ 가져오기 +- +- +- Import from CSV +- CSVì—ì„œ 가져오기 +- +- +- Recent databases +- 최근 ë°ì´í„°ë² ì´ìŠ¤ +- +- +- Welcome to KeePassXC %1 +- KeePassXC %1ì— ì˜¤ì‹  ê²ƒì„ í™˜ì˜í•©ë‹ˆë‹¤ +- +- +- Import from 1Password +- 1Passwordì—ì„œ 가져오기 +- +- +- Open a recent database +- 최근 ë°ì´í„°ë² ì´ìŠ¤ 열기 +- +- +- +- YubiKey +- +- %1 [%2] Configured Slot - %3 +- %1 [%2] ì„¤ì •ëœ ìŠ¬ë¡¯ - %3 +- +- +- %1 [%2] Challenge Response - Slot %3 - %4 +- %1 [%2] ì§ˆì˜ ì‘답 - 슬롯 %3 - %4 +- +- +- Press +- 누르기 +- +- +- Passive +- 수ë™ì  +- +- +- %1 Invalid slot specified - %2 +- %1 ìž˜ëª»ëœ ìŠ¬ë¡¯ ì§€ì •ë¨ - %2 +- +- +- The YubiKey interface has not been initialized. +- YubiKey ì¸í„°íŽ˜ì´ìŠ¤ê°€ 초기화ë˜ì§€ 않았습니다. +- +- +- Hardware key is currently in use. +- 하드웨어 키가 사용 중입니다. +- +- +- Could not find hardware key with serial number %1. Please plug it in to continue. +- ì¼ë ¨ 번호가 %1ì¸ í•˜ë“œì›¨ì–´ 키를 ì°¾ì„ ìˆ˜ 없습니다. ê³„ì† ì§„í–‰í•˜ë ¤ë©´ 연결하십시오. +- +- +- Hardware key timed out waiting for user interaction. +- ì‚¬ìš©ìž ìž…ë ¥ì„ ê¸°ë‹¤ë¦¬ëŠ” 중 하드웨어 키 ì‹œê°„ì´ ì´ˆê³¼ë˜ì—ˆìŠµë‹ˆë‹¤. +- +- +- A USB error ocurred when accessing the hardware key: %1 +- 하드웨어 í‚¤ì— ì ‘ê·¼í•˜ëŠ” 중 USB 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤: %1 +- +- +- Failed to complete a challenge-response, the specific error was: %1 +- ì§ˆì˜ ì‘ë‹µì„ ì™„ë£Œí•  수 없습니다. 오류: %1 +- +- +- +- YubiKeyEditWidget +- +- Refresh +- 새로 고침 +- +- +- YubiKey Challenge-Response +- YubiKey ì§ˆì˜ ì‘답 +- +- +- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- <p><a href="https://www.yubico.com/">YubiKey</a>를 가지고 있다면 추가 ë³´ì•ˆì— ì‚¬ìš©í•  수 있습니다.</p><p>YubiKey 슬롯 중 하나를 <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a> 모드로 프로그래ë°í•´ì•¼ 합니다.</p> +- +- +- Refresh hardware tokens +- 하드웨어 í† í° ìƒˆë¡œ 고침 +- +- +- Hardware key slot selection +- 하드웨어 키 슬롯 ì„ íƒ +- +- +- Could not find any hardware keys! +- 하드웨어 키를 ì°¾ì„ ìˆ˜ 없습니다! +- +- +- Selected hardware key slot does not support challenge-response! +- ì„ íƒí•œ 하드웨어 키 슬롯ì—ì„œ ì§ˆì˜ ì‘ë‹µì„ ì§€ì›í•˜ì§€ 않습니다! +- +- +- Detecting hardware keys… +- 하드웨어 키 ì¸ì‹ 중... +- +- +- No hardware keys detected +- ì¸ì‹ëœ 하드웨어 키 ì—†ìŒ +- +- +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_lt.ts keepassxc-2.6.4-patched/share/translations/keepassx_lt.ts +--- keepassxc-2.6.4-orig/share/translations/keepassx_lt.ts 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/translations/keepassx_lt.ts 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7839 +0,0 @@ +- +- +- AboutDialog +- +- About KeePassXC +- Apie KeePassXC +- +- +- About +- Apie +- +- +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- Apie klaidas praneÅ¡kite adresu: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- +- +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- KeePassXC yra platinama GNU Bendrosios VieÅ¡osios Licencijos (GPL) versijos 2 arba (jÅ«sų pasirinkimu) versijos 3 sÄ…lygomis. +- +- +- Contributors +- Talkininkai +- +- +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">ŽiÅ«rÄ—ti talkinimus GitHub puslapyje</a> +- +- +- Debug Info +- Derinimo informacija +- +- +- Include the following information whenever you report a bug: +- PraneÅ¡dami apie klaidÄ…, visuomet pateikite ir Å¡iÄ… informacijÄ…: +- +- +- Copy to clipboard +- Kopijuoti į iÅ¡karpinÄ™ +- +- +- Project Maintainers: +- ProjektÄ… prižiÅ«ri: +- +- +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- Ypatinga padÄ—ka nuo KeePassXC komandos yra skiriama debfx už pradinÄ—s KeePassX programos sukÅ«rimÄ…. +- +- +- +- AgentSettingsWidget +- +- Use OpenSSH for Windows instead of Pageant +- +- +- +- Enable SSH Agent integration +- +- +- +- SSH_AUTH_SOCK value +- +- +- +- SSH_AUTH_SOCK override +- +- +- +- (empty) +- +- +- +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- +- +- +- SSH Agent connection is working! +- +- +- +- +- ApplicationSettingsWidget +- +- Application Settings +- Programos nustatymai +- +- +- General +- Bendra +- +- +- Security +- Saugumas +- +- +- Access error for config file %1 +- KonfigÅ«racijos failo %1 prieigos klaida +- +- +- Icon only +- Tik piktograma +- +- +- Text only +- Tik tekstas +- +- +- Text beside icon +- Tekstas Å¡alia piktogramos +- +- +- Text under icon +- Tekstas po piktograma +- +- +- Follow style +- Sekti stiliumi +- +- +- Reset Settings? +- Atstatyti nustatymus? +- +- +- Are you sure you want to reset all general and security settings to default? +- +- +- +- Monochrome (light) +- +- +- +- Monochrome (dark) +- +- +- +- Colorful +- +- +- +- You must restart the application to set the new language. Would you like to restart now? +- +- +- +- +- ApplicationSettingsWidgetGeneral +- +- Basic Settings +- Pagrindiniai nustatymai +- +- +- Startup +- Ä®jungimo +- +- +- Start only a single instance of KeePassXC +- Paleisti tik vienÄ… KeePassXC egzempliorių +- +- +- Minimize window at application startup +- Paleidus programÄ…, suskleisti langÄ… +- +- +- File Management +- Failų tvarkymas +- +- +- Backup database file before saving +- IÅ¡saugoti duomenų bazÄ™ prieÅ¡ iÅ¡saugant +- +- +- Automatically save after every change +- AutomatiÅ¡kai įraÅ¡yti po kiekvieno pakeitimo +- +- +- Automatically reload the database when modified externally +- IÅ¡oriÅ¡kai modifikavus duomenų bazÄ™, automatiÅ¡kai įkelti jÄ… iÅ¡ naujo +- +- +- Entry Management +- Ä®rašų tvarkymas +- +- +- Use group icon on entry creation +- Kuriant įraÅ¡us, naudoti grupÄ—s piktogramÄ… +- +- +- Minimize instead of app exit +- +- +- +- Show a system tray icon +- Rodyti sistemos dÄ—klo piktogramÄ… +- +- +- Hide window to system tray when minimized +- Suskleidus langÄ…, slÄ—pti jį į sistemos dÄ—klÄ… +- +- +- Auto-Type +- Automatinis rinkimas +- +- +- Use entry title to match windows for global Auto-Type +- Naudoti įraÅ¡o antraÅ¡tÄ™, norint sutapatinti langus visuotiniam Automatiniam rinkimui +- +- +- Use entry URL to match windows for global Auto-Type +- Naudoti įraÅ¡o URL, norint sutapatinti langus visuotiniam Automatiniam rinkimui +- +- +- Always ask before performing Auto-Type +- Visada klausti prieÅ¡ atliekant automatinį rinkimÄ… +- +- +- ms +- Milliseconds +- ms +- +- +- Movable toolbar +- Perkeliama įrankių juosta +- +- +- Remember previously used databases +- +- +- +- Load previously open databases on startup +- +- +- +- Remember database key files and security dongles +- +- +- +- Check for updates at application startup once per week +- +- +- +- Include beta releases when checking for updates +- +- +- +- Language: +- Kalba: +- +- +- (restart program to activate) +- +- +- +- Minimize window after unlocking database +- +- +- +- Minimize when opening a URL +- +- +- +- Hide window when copying to clipboard +- +- +- +- Minimize +- +- +- +- Drop to background +- +- +- +- Favicon download timeout: +- +- +- +- Website icon download timeout in seconds +- +- +- +- sec +- Seconds +- sek. +- +- +- Toolbar button style +- +- +- +- Language selection +- +- +- +- Global auto-type shortcut +- +- +- +- Auto-type character typing delay milliseconds +- +- +- +- Auto-type start delay milliseconds +- +- +- +- Automatically launch KeePassXC at system startup +- +- +- +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- +- +- +- User Interface +- +- +- +- Toolbar button style: +- +- +- +- Use monospaced font for notes +- +- +- +- Tray icon type: +- +- +- +- Reset settings to default… +- +- +- +- Auto-Type typing delay: +- +- +- +- Global Auto-Type shortcut: +- +- +- +- Auto-Type start delay: +- +- +- +- Automatically save when locking database +- +- +- +- Automatically save non-data changes when locking database +- +- +- +- Tray icon type +- +- +- +- +- ApplicationSettingsWidgetSecurity +- +- Timeouts +- Laiko limitai +- +- +- Clear clipboard after +- IÅ¡valyti iÅ¡karpinÄ™ po +- +- +- sec +- Seconds +- sek. +- +- +- Lock databases after inactivity of +- Užrakinti duomenų bazes, kai kompiuteris neaktyvus +- +- +- min +- min. +- +- +- Forget TouchID after inactivity of +- PamirÅ¡ti TouchID kai nÄ—ra jokios veiklos +- +- +- Convenience +- Patogumas +- +- +- Lock databases when session is locked or lid is closed +- Užrakinti duomenų bazes, kai yra užrakinamas seansas ar uždaromas neÅ¡iojamojo kompiuterio dangtis +- +- +- Forget TouchID when session is locked or lid is closed +- PamirÅ¡ti TouchID, kai yra užrakinamas seansas ar uždaromas neÅ¡iojamojo kompiuterio dangtis +- +- +- Lock databases after minimizing the window +- Suskleidus langÄ…, užrakinti duomenų bazes +- +- +- Re-lock previously locked database after performing Auto-Type +- +- +- +- Hide passwords in the entry preview panel +- +- +- +- Hide entry notes by default +- Pagal numatymÄ…, slÄ—pti įraÅ¡o pastabas +- +- +- Privacy +- Privatumas +- +- +- Use DuckDuckGo service to download website icons +- +- +- +- Clipboard clear seconds +- +- +- +- Touch ID inactivity reset +- +- +- +- Database lock timeout seconds +- +- +- +- min +- Minutes +- min. +- +- +- Clear search query after +- +- +- +- Require password repeat when it is visible +- +- +- +- Hide passwords when editing them +- +- +- +- Use placeholder for empty password fields +- +- +- +- +- AutoType +- +- Couldn't find an entry that matches the window title: +- Nepavyko rasti įraÅ¡o, kuris atitiktų lango antraÅ¡tÄ™: +- +- +- Auto-Type - KeePassXC +- Automatinis rinkimas - KeePassXC +- +- +- Auto-Type +- Automatinis rinkimas +- +- +- The Syntax of your Auto-Type statement is incorrect! +- +- +- +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- +- +- +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- +- +- +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- +- +- +- Permission Required +- +- +- +- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. +- +- +- +- +- AutoTypeAssociationsModel +- +- Window +- Langas +- +- +- Sequence +- Seka +- +- +- Default sequence +- Numatytoji seka +- +- +- +- AutoTypeMatchModel +- +- Group +- GrupÄ— +- +- +- Title +- AntraÅ¡tÄ— +- +- +- Username +- Naudotojo vardas +- +- +- Sequence +- Seka +- +- +- +- AutoTypeMatchView +- +- Copy &username +- Kopijuoti &naudotojo vardÄ… +- +- +- Copy &password +- Kopijuoti sla&ptažodį +- +- +- +- AutoTypePlatformMac +- +- Permission Required +- +- +- +- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. +- +- +- +- +- AutoTypeSelectDialog +- +- Auto-Type - KeePassXC +- Automatinis rinkimas - KeePassXC +- +- +- Select entry to Auto-Type: +- Pasirinkite įraÅ¡Ä… automatiniam rinkimui: +- +- +- Search... +- IeÅ¡koti... +- +- +- +- BrowserAccessControlDialog +- +- KeePassXC - Browser Access Request +- +- +- +- %1 is requesting access to the following entries: +- +- +- +- Remember access to checked entries +- +- +- +- Remember +- +- +- +- Allow access to entries +- +- +- +- Allow Selected +- +- +- +- Deny All +- +- +- +- Disable for this site +- +- +- +- +- BrowserEntrySaveDialog +- +- KeePassXC-Browser Save Entry +- +- +- +- Ok +- Gerai +- +- +- Cancel +- Atsisakyti +- +- +- You have multiple databases open. +-Please select the correct database for saving credentials. +- Turite atvertas kelias duomenų bazes. +-Prisijungimo duomenų įraÅ¡ymui, pasirinkite teisingÄ… duomenų bazÄ™. +- +- +- +- BrowserService +- +- KeePassXC: New key association request +- KeePassXC: Naujo rakto susiejimo užklausa +- +- +- Save and allow access +- Ä®raÅ¡yti ir leisti prieigÄ… +- +- +- KeePassXC: Overwrite existing key? +- KeePassXC: PerraÅ¡yti esamÄ… raktÄ…? +- +- +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- Bendrinamas Å¡ifravimo raktas, pavadinimu "%1" jau yra. +-Ar norite jį perraÅ¡yti? +- +- +- KeePassXC: Update Entry +- KeePassXC: Atnaujinti įraÅ¡Ä… +- +- +- Do you want to update the information in %1 - %2? +- Ar norite atnaujinti informacijÄ… ties %1 - %2? +- +- +- Abort +- Nutraukti +- +- +- Converting attributes to custom data… +- Konvertuojami požymiai į tinkintus duomenis… +- +- +- KeePassXC: Converted KeePassHTTP attributes +- KeePassXC: Konvertuoti KeePassHTTP požymiai +- +- +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- SÄ—kmingai konvertuoti požymiai iÅ¡ %1 įraÅ¡o(-ų). +-Perkelta %2 raktų į tinkintus duomenis. +- +- +- Successfully moved %n keys to custom data. +- +- +- +- KeePassXC: No entry with KeePassHTTP attributes found! +- KeePassXC: Nerasta jokio įraÅ¡o su KeePassHTTP požymiais! +- +- +- The active database does not contain an entry with KeePassHTTP attributes. +- Aktyvioje duomenų bazÄ—je nÄ—ra įraÅ¡o su KeePassHTTP požymiais. +- +- +- KeePassXC: Legacy browser integration settings detected +- +- +- +- KeePassXC: Create a new group +- +- +- +- A request for creating a new group "%1" has been received. +-Do you want to create this group? +- +- +- +- +- Your KeePassXC-Browser settings need to be moved into the database settings. +-This is necessary to maintain your current browser connections. +-Would you like to migrate your existing settings now? +- +- +- +- Don't show this warning again +- Daugiau neberodyti Å¡io įspÄ—jimo +- +- +- You have received an association request for the following database: +-%1 +- +-Give the connection a unique name or ID, for example: +-chrome-laptop. +- +- +- +- +- BrowserSettingsWidget +- +- Dialog +- Dialogas +- +- +- This is required for accessing your databases with KeePassXC-Browser +- +- +- +- Enable browser integration +- +- +- +- General +- Bendra +- +- +- Browsers installed as snaps are currently not supported. +- +- +- +- Enable integration for these browsers: +- Ä®jungti integracijÄ… Å¡ioms narÅ¡yklÄ—ms: +- +- +- Vivaldi +- +- +- +- &Edge +- +- +- +- Firefox +- +- +- +- Tor Browser +- +- +- +- Brave +- +- +- +- Google Chrome +- +- +- +- Chromium +- +- +- +- Show a notification when credentials are requested +- Credentials mean login data requested via browser extension +- +- +- +- Request to unlock the database if it is locked +- +- +- +- Only entries with the same scheme (http://, https://, ...) are returned. +- Bus grąžinami įraÅ¡ai tik su ta paÄia schema (http://, https://, ...). +- +- +- Match URL scheme (e.g., https://...) +- +- +- +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- Vietoj visos srities visų įrašų, grąžina tik geriausiai tam tikrÄ… URL atitinkanÄius įraÅ¡us. +- +- +- Return only best-matching credentials +- +- +- +- Returns expired credentials. String [expired] is added to the title. +- +- +- +- Allow returning expired credentials +- +- +- +- All databases connected to the extension will return matching credentials. +- +- +- +- Search in all opened databases for matching credentials +- Credentials mean login data requested via browser extension +- +- +- +- Sort matching credentials by title +- Credentials mean login data requested via browser extension +- +- +- +- Sort matching credentials by username +- Credentials mean login data requested via browser extension +- +- +- +- Advanced +- IÅ¡plÄ—stiniai +- +- +- Never ask before accessing credentials +- Credentials mean login data requested via browser extension +- +- +- +- Never ask before updating credentials +- Credentials mean login data requested via browser extension +- +- +- +- Do not ask permission for HTTP Basic Auth +- An extra HTTP Basic Auth setting +- +- +- +- Automatically creating or updating string fields is not supported. +- Automatinis eilutÄ—s laukų kÅ«rimas ar atnaujinimas nÄ—ra palaikomas. +- +- +- Return advanced string fields which start with "KPH: " +- +- +- +- Don't display the popup suggesting migration of legacy KeePassHTTP settings. +- +- +- +- Do not prompt for KeePassHTTP settings migration. +- +- +- +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- +- +- +- Update native messaging manifest files at startup +- +- +- +- Use a custom proxy location if you installed a proxy manually. +- +- +- +- Use a custom proxy location: +- Meant is the proxy for KeePassXC-Browser +- +- +- +- Custom proxy location field +- +- +- +- Browser for custom proxy file +- +- +- +- Browse... +- Button for opening file dialog +- NarÅ¡yti... +- +- +- Use a custom browser configuration location: +- +- +- +- Browser type: +- +- +- +- Toolbar button style +- +- +- +- Config Location: +- +- +- +- Custom browser location field +- +- +- +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- +- +- +- Browse for custom browser path +- +- +- +- Custom extension ID: +- +- +- +- Custom extension ID +- +- +- +- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 +- +- +- +- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 +- +- +- +- Please see special instructions for browser extension use below +- +- +- +- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. +- +- +- +- <b>Warning:</b> The following options can be dangerous! +- <b>Ä®spÄ—jimas:</b> Å ie parametrai gali bÅ«ti pavojingi! +- +- +- Executable Files +- Vykdomieji failai +- +- +- All Files +- Visi failai +- +- +- Select custom proxy location +- +- +- +- Select native messaging host folder location +- +- +- +- +- CloneDialog +- +- Clone Options +- Dubliavimo parinktys +- +- +- Append ' - Clone' to title +- PridÄ—ti prie pavadinimo " - Dublikatas" +- +- +- Replace username and password with references +- Pakeisti naudotojo vardÄ… ir slaptažodį nuorodomis +- +- +- Copy history +- Kopijuoti istorijÄ… +- +- +- +- CsvImportWidget +- +- Import CSV fields +- Importuoti CSV laukus +- +- +- filename +- failo pavadinimas +- +- +- size, rows, columns +- dydis, eiluÄių, stulpelių +- +- +- Encoding +- KoduotÄ— +- +- +- Codec +- Kodekas +- +- +- Text is qualified by +- Tekstas yra parengtas pagal +- +- +- Fields are separated by +- Laukai yra atskirti +- +- +- Comments start with +- Komentarai prasideda su +- +- +- Consider '\' an escape character +- Laikyti "\" kaitos ženklu +- +- +- Preview +- PeržiÅ«ra +- +- +- Imported from CSV file +- Importuota iÅ¡ CSV failo +- +- +- Original data: +- Pradiniai duomenys: +- +- +- Error +- Klaida +- +- +- Error(s) detected in CSV file! +- CSV faile aptikta klaida(-os)! +- +- +- [%n more message(s) skipped] +- +- +- +- CSV import: writer has errors: +-%1 +- +- +- +- Text qualification +- +- +- +- Field separation +- +- +- +- Number of header lines to discard +- +- +- +- CSV import preview +- +- +- +- Column Association +- +- +- +- Last Modified +- Paskutinis keitimas +- +- +- Password +- Slaptažodis +- +- +- Created +- Sukurta +- +- +- Notes +- Pastabos +- +- +- Title +- AntraÅ¡tÄ— +- +- +- Group +- GrupÄ— +- +- +- URL +- URL +- +- +- Username +- Naudotojo vardas +- +- +- Header lines skipped +- +- +- +- First line has field names +- +- +- +- Not Present +- +- +- +- Column %1 +- +- +- +- TOTP +- +- +- +- Icon +- Piktograma +- +- +- +- CsvParserModel +- +- %n column(s) +- %n stulpelis%n stulpeliai%n stulpelių%n stulpelių +- +- +- %1, %2, %3 +- file info: bytes, rows, columns +- %1, %2, %3 +- +- +- %n byte(s) +- +- +- +- %n row(s) +- +- +- +- +- Database +- +- File %1 does not exist. +- Failo %1 nÄ—ra. +- +- +- Unable to open file %1. +- Nepavyko atverti failÄ… %1. +- +- +- Error while reading the database: %1 +- Klaida skaitant duomenų bazÄ™: %1 +- +- +- File cannot be written as it is opened in read-only mode. +- Failas negali bÅ«ti įraÅ¡ytas, nes jis atvertas tik skaitymo veiksenoje. +- +- +- Key not transformed. This is a bug, please report it to the developers! +- +- +- +- %1 +-Backup database located at %2 +- +- +- +- Could not save, database does not point to a valid file. +- +- +- +- Could not save, database file is read-only. +- +- +- +- Database file has unmerged changes. +- +- +- +- Recycle Bin +- Å iukÅ¡linÄ— +- +- +- Passwords +- Root group name +- Slaptažodžiai +- +- +- Database save is already in progress. +- +- +- +- Could not save, database has not been initialized! +- +- +- +- +- DatabaseOpenDialog +- +- Unlock Database - KeePassXC +- Atrakinti duomenų bazÄ™ - KeePassXC +- +- +- +- DatabaseOpenWidget +- +- Key File: +- Rakto failas: +- +- +- Refresh +- Ä®kelti iÅ¡ naujo +- +- +- Don't show this warning again +- Daugiau neberodyti Å¡io įspÄ—jimo +- +- +- All files +- Visi failai +- +- +- Key files +- Rakto failai +- +- +- Select key file +- Pasirinkite rakto failÄ… +- +- +- Failed to open key file: %1 +- +- +- +- Unlock KeePassXC Database +- +- +- +- Enter Password: +- +- +- +- Password field +- +- +- +- Hardware key slot selection +- +- +- +- Browse for key file +- +- +- +- Browse... +- NarÅ¡yti... +- +- +- Refresh hardware tokens +- +- +- +- Hardware Key: +- +- +- +- Hardware key help +- +- +- +- TouchID for Quick Unlock +- +- +- +- Unlock failed and no password given +- +- +- +- Unlocking the database failed and you did not enter a password. +-Do you want to retry with an "empty" password instead? +- +-To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. +- +- +- +- Retry with empty password +- +- +- +- Enter Additional Credentials (if any): +- +- +- +- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +-<p>Click for more information...</p> +- +- +- +- Key file help +- +- +- +- ? +- +- +- +- Cannot use database file as key file +- +- +- +- You cannot use your database file as a key file. +-If you do not have a key file, please leave the field empty. +- +- +- +- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> +- +- +- +- Key file to unlock the database +- +- +- +- Please touch the button on your YubiKey! +- PraÅ¡ome priliesti mygtukÄ… ant savo YubiKey! +- +- +- Detecting hardware keys… +- +- +- +- No hardware keys detected +- +- +- +- Select hardware key… +- +- +- +- Old key file format +- +- +- +- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> +- +- +- +- +- DatabaseSettingWidgetMetaData +- +- Passwords +- Slaptažodžiai +- +- +- +- DatabaseSettingsDialog +- +- Advanced Settings +- IÅ¡plÄ—stiniai nustatymai +- +- +- General +- Bendra +- +- +- Security +- Saugumas +- +- +- Encryption Settings +- Å ifravimo nustatymai +- +- +- Browser Integration +- NarÅ¡yklÄ—s integracija +- +- +- Database Credentials +- +- +- +- +- DatabaseSettingsWidgetBrowser +- +- KeePassXC-Browser settings +- +- +- +- Stored keys +- +- +- +- Remove +- Å alinti +- +- +- Delete the selected key? +- IÅ¡trinti pasirinktÄ… raktÄ…? +- +- +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- +- +- +- Key +- Raktas +- +- +- Value +- ReikÅ¡mÄ— +- +- +- Enable Browser Integration to access these settings. +- +- +- +- Disconnect all browsers +- Atjungti visas narÅ¡ykles +- +- +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- +- +- +- KeePassXC: No keys found +- KeePassXC: Raktų nerasta +- +- +- No shared encryption keys found in KeePassXC settings. +- +- +- +- KeePassXC: Removed keys from database +- KeePassXC: PaÅ¡alinti raktai iÅ¡ duomenų bazÄ—s +- +- +- Successfully removed %n encryption key(s) from KeePassXC settings. +- +- +- +- Forget all site-specific settings on entries +- +- +- +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- +- +- +- Removing stored permissions… +- Å alinami saugomi leidimai… +- +- +- Abort +- Nutraukti +- +- +- KeePassXC: Removed permissions +- KeePassXC: PaÅ¡alinti leidimai +- +- +- Successfully removed permissions from %n entry(s). +- +- +- +- KeePassXC: No entry with permissions found! +- KeePassXC: Nerasta jokių įrašų su leidimais! +- +- +- The active database does not contain an entry with permissions. +- Aktyvioje duomenų bazÄ—je nÄ—ra įraÅ¡o su leidimais. +- +- +- Move KeePassHTTP attributes to custom data +- Perkelti KeePassHTTP požymius į tinkintus duomenis +- +- +- Do you really want to move all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- +- +- +- Stored browser keys +- +- +- +- Remove selected key +- +- +- +- Move KeePassHTTP attributes to KeePassXC-Browser custom data +- +- +- +- Refresh database root group ID +- +- +- +- Created +- Sukurta +- +- +- Refresh database ID +- +- +- +- Do you really want refresh the database ID? +-This is only necessary if your database is a copy of another and the browser extension cannot connect. +- +- +- +- +- DatabaseSettingsWidgetDatabaseKey +- +- Add additional protection... +- PridÄ—ti papildomÄ… apsaugÄ…... +- +- +- No password set +- Nenustatytas joks slaptažodis +- +- +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- +- +- +- Continue without password +- +- +- +- No encryption key added +- NepridÄ—tas joks Å¡ifravimo raktas +- +- +- You must add at least one encryption key to secure your database! +- NorÄ—dami apsaugoti savo duomenų bazÄ™, privalote pridÄ—ti bent vienÄ… Å¡ifravimo raktÄ…! +- +- +- Unknown error +- Nežinoma klaida +- +- +- Failed to change database credentials +- +- +- +- +- DatabaseSettingsWidgetEncryption +- +- Encryption Algorithm: +- Å ifravimo algoritmas: +- +- +- AES: 256 Bit (default) +- AES: 256 Bitų (numatytasis) +- +- +- Twofish: 256 Bit +- Twofish: 256 Bitų +- +- +- Key Derivation Function: +- Rakto iÅ¡vedimo funkcija: +- +- +- Transform rounds: +- Pasikeitimo ciklų: +- +- +- Memory Usage: +- Atminties naudojimas: +- +- +- Parallelism: +- +- +- +- Decryption Time: +- IÅ¡Å¡ifravimo laikas: +- +- +- ?? s +- ?? s +- +- +- Change +- Keisti +- +- +- Higher values offer more protection, but opening the database will take longer. +- +- +- +- Database format: +- Duomenų bazÄ—s formatas: +- +- +- This is only important if you need to use your database with other programs. +- Tai yra svarbu tik tuo atveju, jeigu jums reikia naudoti duomenų bazÄ™ su kitomis programomis. +- +- +- KDBX 4.0 (recommended) +- KDBX 4.0 (rekomenduojama) +- +- +- KDBX 3.1 +- KDBX 3.1 +- +- +- unchanged +- Database decryption time is unchanged +- +- +- +- Number of rounds too high +- Key transformation rounds +- +- +- +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or days (or even longer) to open! +- +- +- +- Understood, keep number +- +- +- +- Cancel +- Atsisakyti +- +- +- Number of rounds too low +- Key transformation rounds +- +- +- +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database may be too easy to crack! +- +- +- +- KDF unchanged +- +- +- +- Failed to transform key with new KDF parameters; KDF unchanged. +- +- +- +- MiB +- Abbreviation for Mebibytes (KDF settings) +- MiB MiB MiB MiB +- +- +- thread(s) +- Threads for parallel execution (KDF settings) +- gija gijos gijų gija +- +- +- Change existing decryption time +- +- +- +- Decryption time in seconds +- +- +- +- Database format +- +- +- +- Encryption algorithm +- +- +- +- Key derivation function +- +- +- +- Transform rounds +- +- +- +- Memory usage +- +- +- +- Parallelism +- +- +- +- ?? ms +- +- +- +- ? s +- +- +- +- +- DatabaseSettingsWidgetFdoSecrets +- +- Exposed Entries +- +- +- +- Don't expose this database +- +- +- +- Expose entries under this group: +- +- +- +- Enable Secret Service to access these settings. +- +- +- +- +- DatabaseSettingsWidgetGeneral +- +- Database Meta Data +- Duomenų bazÄ—s metaduomenys +- +- +- Database name: +- Duomenų bazÄ—s pavadinimas: +- +- +- Database description: +- Duomenų bazÄ—s apraÅ¡as: +- +- +- Default username: +- Numatytasis naudotojo vardas: +- +- +- History Settings +- Istorijos nustatymai +- +- +- Max. history items: +- Daugiausia istorijos elementų: +- +- +- Max. history size: +- Didžiausias istorijos dydis: +- +- +- MiB +- MiB +- +- +- Use recycle bin +- Naudoti Å¡iukÅ¡linÄ™ +- +- +- Additional Database Settings +- Papildomi duomenų bazÄ—s nustatymai +- +- +- Database name field +- +- +- +- Database description field +- +- +- +- Default username field +- +- +- +- Maximum number of history items per entry +- +- +- +- Maximum size of history per entry +- +- +- +- Delete Recycle Bin +- +- +- +- Do you want to delete the current recycle bin and all its contents? +-This action is not reversible. +- +- +- +- (old) +- +- +- +- Enable compression (recommended) +- +- +- +- +- DatabaseSettingsWidgetKeeShare +- +- Sharing +- +- +- +- Breadcrumb +- +- +- +- Type +- Tipas +- +- +- Path +- Kelias +- +- +- Last Signer +- +- +- +- Certificates +- Liudijimai +- +- +- > +- Breadcrumb separator +- > +- +- +- +- DatabaseSettingsWidgetMetaDataSimple +- +- Database Name: +- Duomenų bazÄ—s pavadinimas: +- +- +- Description: +- ApraÅ¡as: +- +- +- Database name field +- +- +- +- Database description field +- +- +- +- +- DatabaseTabWidget +- +- KeePass 2 Database +- KeePass 2 duomenų bazÄ— +- +- +- All files +- Visi failai +- +- +- Open database +- Atverti duomenų bazÄ™ +- +- +- CSV file +- CSV failas +- +- +- Merge database +- Sulieti duomenų bazÄ™ +- +- +- Open KeePass 1 database +- Atverkite KeePass 1 duomenų bazÄ™ +- +- +- KeePass 1 database +- KeePass 1 duomenų bazÄ— +- +- +- Export database to CSV file +- Eksportuoti duomenų bazÄ™ į CSV failÄ… +- +- +- Writing the CSV file failed. +- CSV failo įraÅ¡ymas nepavyko. +- +- +- Database creation error +- Duomenų bazÄ—s sukÅ«rimo klaida +- +- +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- +- +- +- Select CSV file +- +- +- +- New Database +- Nauja duomenų bazÄ— +- +- +- %1 [New Database] +- Database tab name modifier +- %1 [Nauja duomenų bazÄ—] +- +- +- %1 [Locked] +- Database tab name modifier +- %1 [Užrakinta] +- +- +- %1 [Read-only] +- Database tab name modifier +- %1 [Tik skaitymui] +- +- +- Failed to open %1. It either does not exist or is not accessible. +- +- +- +- Export database to HTML file +- +- +- +- HTML file +- +- +- +- Writing the HTML file failed. +- +- +- +- Export Confirmation +- +- +- +- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? +- +- +- +- Open OPVault +- +- +- +- +- DatabaseWidget +- +- Searching... +- IeÅ¡koma... +- +- +- Do you really want to delete the entry "%1" for good? +- Ar tikrai norite iÅ¡trinti įraÅ¡Ä… "%1"? +- +- +- Do you really want to move entry "%1" to the recycle bin? +- Ar tikrai norite perkelti įraÅ¡Ä… "%1" į Å¡iukÅ¡linÄ™? +- +- +- Do you really want to move %n entry(s) to the recycle bin? +- +- +- +- Execute command? +- Vykdyti komandÄ…? +- +- +- Do you really want to execute the following command?<br><br>%1<br> +- Ar tikrai norite vykdyti Å¡iÄ… komandÄ…?<br><br>%1<br> +- +- +- Remember my choice +- Prisiminti mano pasirinkimÄ… +- +- +- Do you really want to delete the group "%1" for good? +- Ar tikrai norite iÅ¡trinti grupÄ™ "%1"? +- +- +- No current database. +- NÄ—ra esamos duomenų bazÄ—s. +- +- +- No source database, nothing to do. +- NÄ—ra Å¡altinio duomenų bazÄ—s, nÄ—ra kÄ… atlikti. +- +- +- Search Results (%1) +- PaieÅ¡kos rezultatai (%1) +- +- +- No Results +- NÄ—ra rezultatų +- +- +- File has changed +- Failas pasikeitÄ— +- +- +- The database file has changed. Do you want to load the changes? +- Duomenų bazÄ—s failas pasikeitÄ—. Ar norite įkelti pakeitimus? +- +- +- Merge Request +- Suliejimo užklausa +- +- +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- Duomenų bazÄ—s failas pasikeitÄ— ir jÅ«s turite neįraÅ¡ytų pakeitimų. +-Ar norite sulieti savo pakeitimus? +- +- +- Empty recycle bin? +- IÅ¡valyti Å¡iukÅ¡linÄ™? +- +- +- Are you sure you want to permanently delete everything from your recycle bin? +- Ar tikrai norite negrįžtamai viskÄ… iÅ¡trinti iÅ¡ savo Å¡iukÅ¡linÄ—s? +- +- +- Do you really want to delete %n entry(s) for good? +- +- +- +- Delete entry(s)? +- +- +- +- Move entry(s) to recycle bin? +- +- +- +- Lock Database? +- Užrakinti duomenų bazÄ™? +- +- +- You are editing an entry. Discard changes and lock anyway? +- +- +- +- "%1" was modified. +-Save changes? +- "%1" buvo pakeista. +-Ä®raÅ¡yti pakeitimus? +- +- +- Database was modified. +-Save changes? +- +- +- +- Save changes? +- Ä®raÅ¡yti pakeitimus? +- +- +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- +- +- +- Disable safe saves? +- +- +- +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- +- +- +- Passwords +- Slaptažodžiai +- +- +- Save database as +- Ä®raÅ¡yti duomenų bazÄ™ kaip +- +- +- KeePass 2 Database +- KeePass 2 duomenų bazÄ— +- +- +- Replace references to entry? +- +- +- +- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? +- +- +- +- Delete group +- IÅ¡trinti grupÄ™ +- +- +- Move group to recycle bin? +- Perkelti grupÄ™ į Å¡iukÅ¡linÄ™? +- +- +- Do you really want to move the group "%1" to the recycle bin? +- Ar tikrai norite perkelti grupÄ™ "%1" į Å¡iukÅ¡linÄ™? +- +- +- Successfully merged the database files. +- Duomenų bazÄ—s failai sÄ—kmingai sulieti. +- +- +- Database was not modified by merge operation. +- +- +- +- Shared group... +- +- +- +- Writing the database failed: %1 +- +- +- +- This database is opened in read-only mode. Autosave is disabled. +- +- +- +- Save database backup +- +- +- +- Could not find database file: %1 +- +- +- +- +- EditEntryWidget +- +- Entry +- Ä®raÅ¡as +- +- +- Advanced +- IÅ¡plÄ—stiniai +- +- +- Icon +- Piktograma +- +- +- Auto-Type +- Automatinis rinkimas +- +- +- Properties +- SavybÄ—s +- +- +- History +- Istorija +- +- +- SSH Agent +- SSH agentas +- +- +- n/a +- nÄ—ra +- +- +- (encrypted) +- (Å¡ifruota) +- +- +- Select private key +- Pasirinkti privatųjį raktÄ… +- +- +- Entry history +- Ä®raÅ¡o istorija +- +- +- Add entry +- PridÄ—ti įraÅ¡Ä… +- +- +- Edit entry +- Keisti įraÅ¡Ä… +- +- +- New attribute +- Naujas požymis +- +- +- Are you sure you want to remove this attribute? +- Ar tikrai norite paÅ¡alinti šį požymi? +- +- +- Tomorrow +- Rytoj +- +- +- %n week(s) +- %n savaitÄ—%n savaitÄ—s%n savaiÄių%n savaiÄių +- +- +- %n month(s) +- %n mÄ—nesis%n mÄ—nesiai%n mÄ—nesių%n mÄ—nesių +- +- +- Entry updated successfully. +- Ä®raÅ¡as sÄ—kmingai atnaujintas. +- +- +- New attribute %1 +- Naujas požymis %1 +- +- +- %n year(s) +- +- +- +- Confirm Removal +- +- +- +- Browser Integration +- NarÅ¡yklÄ—s integracija +- +- +- <empty URL> +- +- +- +- Are you sure you want to remove this URL? +- +- +- +- Reveal +- Atskleisti +- +- +- Hide +- +- +- +- Unsaved Changes +- +- +- +- Would you like to save changes to this entry? +- +- +- +- [PROTECTED] Press Reveal to view or edit +- +- +- +- Invalid Entry +- +- +- +- An external merge operation has invalidated this entry. +-Unfortunately, any changes made have been lost. +- +- +- +- +- EditEntryWidgetAdvanced +- +- Additional attributes +- Papildomi požymiai +- +- +- Add +- PridÄ—ti +- +- +- Remove +- Å alinti +- +- +- Edit Name +- Taisyti pavadinimÄ… +- +- +- Protect +- Apsaugoti +- +- +- Reveal +- Atskleisti +- +- +- Attachments +- Priedai +- +- +- Foreground Color: +- Priekinio plano spalva: +- +- +- Background Color: +- Fono spalva: +- +- +- Attribute selection +- +- +- +- Attribute value +- +- +- +- Add a new attribute +- +- +- +- Remove selected attribute +- +- +- +- Edit attribute name +- +- +- +- Toggle attribute protection +- +- +- +- Show a protected attribute +- +- +- +- Foreground color selection +- +- +- +- Background color selection +- +- +- +- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> +- +- +- +- Exclude from database reports +- +- +- +- +- EditEntryWidgetAutoType +- +- Enable Auto-Type for this entry +- Ä®jungti Å¡iam įraÅ¡ui automatinį rinkimÄ… +- +- +- Window Associations +- Lango asociacijos +- +- +- + +- + +- +- +- - +- - +- +- +- Window title: +- Lango antraÅ¡tÄ—: +- +- +- Use a specific sequence for this association: +- +- +- +- Custom Auto-Type sequence +- +- +- +- Open Auto-Type help webpage +- +- +- +- Existing window associations +- +- +- +- Add new window association +- +- +- +- Remove selected window association +- +- +- +- You can use an asterisk (*) to match everything +- +- +- +- Set the window association title +- +- +- +- You can use an asterisk to match everything +- +- +- +- Custom Auto-Type sequence for this window +- +- +- +- Inherit default Auto-Type sequence from the group +- PaveldÄ—ti numatytÄ…jÄ… automatinio rinkimo sekÄ… iÅ¡ grupÄ—s +- +- +- Use custom Auto-Type sequence: +- Naudoti tinkintÄ… automatinio rinkimo seka: +- +- +- +- EditEntryWidgetBrowser +- +- These settings affect to the entry's behaviour with the browser extension. +- +- +- +- General +- Bendra +- +- +- Skip Auto-Submit for this entry +- +- +- +- Hide this entry from the browser extension +- +- +- +- Additional URL's +- +- +- +- Add +- PridÄ—ti +- +- +- Remove +- Å alinti +- +- +- Edit +- Keisti +- +- +- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. +- +- +- +- Use this entry only with HTTP Basic Auth +- +- +- +- +- EditEntryWidgetHistory +- +- Show +- Rodyti +- +- +- Restore +- Atkurti +- +- +- Delete +- IÅ¡trinti +- +- +- Delete all +- IÅ¡trinti visus +- +- +- Entry history selection +- +- +- +- Show entry at selected history state +- +- +- +- Restore entry to selected history state +- +- +- +- Delete selected history state +- +- +- +- Delete all history +- +- +- +- +- EditEntryWidgetMain +- +- URL: +- URL: +- +- +- Password: +- Slaptažodis: +- +- +- Title: +- AntraÅ¡tÄ—: +- +- +- Presets +- Parinktys +- +- +- Toggle the checkbox to reveal the notes section. +- NorÄ—dami atskleisti pastabų sekcijÄ…, perjunkite žymimÄ…jį langelį. +- +- +- Username: +- Naudotojo vardas: +- +- +- Url field +- +- +- +- Download favicon for URL +- +- +- +- Password field +- +- +- +- Toggle notes visible +- +- +- +- Expiration field +- +- +- +- Expiration Presets +- +- +- +- Expiration presets +- +- +- +- Notes field +- +- +- +- Title field +- +- +- +- Username field +- +- +- +- Toggle expiration +- +- +- +- Notes: +- Pastabos: +- +- +- https://example.com +- +- +- +- Expires: +- +- +- +- Edit Entry +- +- +- +- +- EditEntryWidgetSSHAgent +- +- Form +- Forma +- +- +- Remove key from agent after +- Å alinti raktÄ… iÅ¡ agento po +- +- +- seconds +- sekundžių +- +- +- Fingerprint +- Kontrolinis kodas +- +- +- Remove key from agent when database is closed/locked +- UžvÄ—rus/užrakinus duomenų bazÄ™, Å¡alinti raktÄ… iÅ¡ agento +- +- +- Public key +- VieÅ¡asis raktas +- +- +- Add key to agent when database is opened/unlocked +- AtvÄ—rus/atrakinus duomenų bazÄ™, pridÄ—ti raktÄ… į agentÄ… +- +- +- Comment +- Komentaras +- +- +- Decrypt +- IÅ¡Å¡ifruoti +- +- +- n/a +- nÄ—ra +- +- +- Copy to clipboard +- Kopijuoti į iÅ¡karpinÄ™ +- +- +- Private key +- Privatusis raktas +- +- +- External file +- IÅ¡orinis failas +- +- +- Browse... +- Button for opening file dialog +- NarÅ¡yti... +- +- +- Attachment +- Priedas +- +- +- Add to agent +- PridÄ—ti į agentÄ… +- +- +- Remove from agent +- Å alinti iÅ¡ agento +- +- +- Require user confirmation when this key is used +- Naudojant šį raktÄ…, reikalauti naudotojo patvirtinimo +- +- +- Remove key from agent after specified seconds +- +- +- +- Browser for key file +- +- +- +- External key file +- +- +- +- Select attachment file +- +- +- +- +- EditGroupWidget +- +- Group +- GrupÄ— +- +- +- Icon +- Piktograma +- +- +- Properties +- SavybÄ—s +- +- +- Add group +- PridÄ—ti grupÄ™ +- +- +- Edit group +- Keisti grupÄ™ +- +- +- Enable +- Ä®jungti +- +- +- Disable +- IÅ¡jungti +- +- +- Inherit from parent group (%1) +- PaveldÄ—ti iÅ¡ pirminÄ—s grupÄ—s (%1) +- +- +- Entry has unsaved changes +- Ä®raÅ¡e yra neįraÅ¡ytų pakeitimų +- +- +- +- EditGroupWidgetKeeShare +- +- Type: +- Tipas: +- +- +- Path: +- Kelias: +- +- +- Password: +- Slaptažodis: +- +- +- Inactive +- +- +- +- KeeShare unsigned container +- +- +- +- KeeShare signed container +- +- +- +- Select import source +- +- +- +- Select export target +- +- +- +- Select import/export file +- +- +- +- Clear +- IÅ¡valyti +- +- +- Import +- Importuoti +- +- +- Export +- +- +- +- Synchronize +- +- +- +- Your KeePassXC version does not support sharing this container type. +-Supported extensions are: %1. +- +- +- +- %1 is already being exported by this database. +- +- +- +- %1 is already being imported by this database. +- +- +- +- %1 is being imported and exported by different groups in this database. +- +- +- +- KeeShare is currently disabled. You can enable import/export in the application settings. +- KeeShare is a proper noun +- +- +- +- Database export is currently disabled by application settings. +- +- +- +- Database import is currently disabled by application settings. +- +- +- +- Sharing mode field +- +- +- +- Path to share file field +- +- +- +- Password field +- +- +- +- Clear fields +- +- +- +- Browse for share file +- +- +- +- Browse... +- NarÅ¡yti... +- +- +- +- EditGroupWidgetMain +- +- Name field +- +- +- +- Notes field +- +- +- +- Toggle expiration +- +- +- +- Auto-Type toggle for this and sub groups +- +- +- +- Expiration field +- +- +- +- Search toggle for this and sub groups +- +- +- +- Default auto-type sequence field +- +- +- +- Expires: +- +- +- +- Use default Auto-Type sequence of parent group +- +- +- +- Auto-Type: +- +- +- +- Search: +- +- +- +- Notes: +- Pastabos: +- +- +- Name: +- +- +- +- Set default Auto-Type sequence +- +- +- +- Edit Group +- +- +- +- +- EditWidgetIcons +- +- Add custom icon +- PridÄ—ti tinkintÄ… piktogramÄ… +- +- +- Delete custom icon +- IÅ¡trinti tinkintÄ… piktogramÄ… +- +- +- Download favicon +- Atsisiųsti svetainÄ—s piktogramÄ… +- +- +- Unable to fetch favicon. +- Nepavyko gauti svetainÄ—s piktogramos. +- +- +- Images +- Paveikslai +- +- +- All files +- Visi failai +- +- +- Confirm Delete +- Patvirtinti iÅ¡trynimÄ… +- +- +- Select Image(s) +- +- +- +- Successfully loaded %1 of %n icon(s) +- +- +- +- No icons were loaded +- Neįkelta jokių piktogramų +- +- +- %n icon(s) already exist in the database +- +- +- +- The following icon(s) failed: +- Å i piktograma patyrÄ— nesÄ—kmÄ™:Å ios piktogramos patyrÄ— nesÄ—kmÄ™:Å ios piktogramos patyrÄ— nesÄ—kmÄ™:Å ios piktogramos patyrÄ— nesÄ—kmÄ™: +- +- +- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? +- +- +- +- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security +- +- +- +- Download favicon for URL +- +- +- +- Apply selected icon to subgroups and entries +- +- +- +- Also apply to child groups +- +- +- +- Also apply to child entries +- +- +- +- Also apply to all children +- +- +- +- Existing icon selected. +- +- +- +- Use default icon +- Naudoti numatytÄ…jÄ… piktogramÄ… +- +- +- Use custom icon +- Naudoti tinkintÄ… piktogramÄ… +- +- +- Apply icon to... +- +- +- +- Apply to this group only +- +- +- +- +- EditWidgetProperties +- +- Created: +- Sukurta: +- +- +- Modified: +- Keista: +- +- +- Accessed: +- Prieiga: +- +- +- Uuid: +- Uuid: +- +- +- Plugin Data +- +- +- +- Remove +- Å alinti +- +- +- Delete plugin data? +- +- +- +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- +- +- +- Key +- Raktas +- +- +- Value +- ReikÅ¡mÄ— +- +- +- Datetime created +- +- +- +- Datetime modified +- +- +- +- Datetime accessed +- +- +- +- Unique ID +- +- +- +- Plugin data +- +- +- +- Remove selected plugin data +- +- +- +- +- Entry +- +- %1 - Clone +- +- +- +- +- EntryAttachmentsModel +- +- Name +- Pavadinimas +- +- +- Size +- Dydis +- +- +- +- EntryAttachmentsWidget +- +- Form +- Forma +- +- +- Add +- PridÄ—ti +- +- +- Remove +- Å alinti +- +- +- Open +- Atverti +- +- +- Save +- Ä®raÅ¡yti +- +- +- Select files +- Pasirinkti failus +- +- +- Are you sure you want to remove %n attachment(s)? +- Ar tikrai norite paÅ¡alinti %n priedÄ…?Ar tikrai norite paÅ¡alinti %n priedus?Ar tikrai norite paÅ¡alinti %n priedų?Ar tikrai norite paÅ¡alinti %n priedų? +- +- +- Save attachments +- Ä®raÅ¡yti priedus +- +- +- Unable to create directory: +-%1 +- Nepavyko sukurti katalogÄ…: +-%1 +- +- +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- Ar tikrai norite perraÅ¡yti failÄ… "%1" priedu? +- +- +- Confirm overwrite +- Patvirtinti perraÅ¡ymÄ… +- +- +- Unable to save attachments: +-%1 +- Nepavyko įraÅ¡yti priedus: +-%1 +- +- +- Unable to open attachment: +-%1 +- Nepavyko atverti priedÄ…: +-%1 +- +- +- Unable to open attachments: +-%1 +- Nepavyko atverti priedus: +-%1 +- +- +- Confirm remove +- +- +- +- Unable to open file(s): +-%1 +- +- +- +- Attachments +- Priedai +- +- +- Add new attachment +- +- +- +- Remove selected attachment +- +- +- +- Open selected attachment +- +- +- +- Save selected attachment to disk +- +- +- +- %1 is a big file (%2 MB). +-Your database may get very large and reduce performance. +- +-Are you sure to add this file? +- +- +- +- Confirm Attachment +- +- +- +- +- EntryAttributesModel +- +- Name +- Pavadinimas +- +- +- +- EntryHistoryModel +- +- Last modified +- Paskutinis keitimas +- +- +- Title +- AntraÅ¡tÄ— +- +- +- Username +- Naudotojo vardas +- +- +- URL +- URL +- +- +- +- EntryModel +- +- Ref: +- Reference abbreviation +- Nuoroda: +- +- +- Group +- GrupÄ— +- +- +- Title +- AntraÅ¡tÄ— +- +- +- Username +- Naudotojo vardas +- +- +- URL +- URL +- +- +- Never +- Niekada +- +- +- Password +- Slaptažodis +- +- +- Notes +- Pastabos +- +- +- Expires +- Baigia galioti +- +- +- Created +- Sukurta +- +- +- Modified +- Keista +- +- +- Accessed +- Prieiga +- +- +- Attachments +- Priedai +- +- +- Size +- Dydis +- +- +- Group name +- +- +- +- Entry title +- +- +- +- Entry notes +- +- +- +- Entry expires at +- +- +- +- Creation date +- +- +- +- Last modification date +- +- +- +- Last access date +- +- +- +- Attached files +- +- +- +- Entry size +- +- +- +- Has attachments +- +- +- +- Has TOTP one-time password +- +- +- +- +- EntryPreviewWidget +- +- Close +- Užverti +- +- +- General +- Bendra +- +- +- Username +- Naudotojo vardas +- +- +- Password +- Slaptažodis +- +- +- Expiration +- Galiojimas +- +- +- URL +- URL +- +- +- Attributes +- Požymiai +- +- +- Attachments +- Priedai +- +- +- Notes +- Pastabos +- +- +- Autotype +- Automatinis rinkimas +- +- +- Window +- Langas +- +- +- Sequence +- Seka +- +- +- Searching +- PaieÅ¡ka +- +- +- Search +- PaieÅ¡ka +- +- +- Clear +- IÅ¡valyti +- +- +- Never +- Niekada +- +- +- [PROTECTED] +- [APSAUGOTA] +- +- +- Enabled +- Ä®jungta +- +- +- Disabled +- IÅ¡jungta +- +- +- Share +- +- +- +- Display current TOTP value +- +- +- +- Advanced +- IÅ¡plÄ—stiniai +- +- +- Default Sequence +- +- +- +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- attributes line +- +- +- +- +- EntryURLModel +- +- Invalid URL +- +- +- +- +- EntryView +- +- Fit to window +- Priderinti prie lango +- +- +- Fit to contents +- Priderinti prie turinio +- +- +- Reset to defaults +- Atstatyti į numatytuosius +- +- +- Has attachments +- Entry attachment icon toggle +- +- +- +- Has TOTP +- Entry TOTP icon toggle +- +- +- +- +- FdoSecrets::Item +- +- Entry "%1" from database "%2" was used by %3 +- +- +- +- +- FdoSecrets::Service +- +- Failed to register DBus service at %1.<br/> +- +- +- +- %n Entry(s) was used by %1 +- %1 is the name of an application +- +- +- +- +- FdoSecrets::SettingsDatabaseModel +- +- File Name +- +- +- +- Group +- GrupÄ— +- +- +- Manage +- +- +- +- Unlock to show +- +- +- +- None +- NÄ—ra +- +- +- +- FdoSecrets::SettingsSessionModel +- +- Application +- +- +- +- Manage +- +- +- +- +- FdoSecretsPlugin +- +- <b>Fdo Secret Service:</b> %1 +- +- +- +- Unknown +- Unknown PID +- Nežinoma +- +- +- Unknown +- Unknown executable path +- Nežinoma +- +- +- <i>PID: %1, Executable: %2</i> +- <i>PID: 1234, Executable: /path/to/exe</i> +- +- +- +- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. +- +- +- +- +- Group +- +- [empty] +- group has no children +- [tuÅ¡Äia] +- +- +- +- HibpDownloader +- +- Online password validation failed +- +- +- +- +- IconDownloaderDialog +- +- Download Favicons +- +- +- +- Cancel +- Atsisakyti +- +- +- Having trouble downloading icons? +-You can enable the DuckDuckGo website icon service in the security section of the application settings. +- +- +- +- Close +- Užverti +- +- +- URL +- URL +- +- +- Status +- BÅ«sena +- +- +- Please wait, processing entry list... +- +- +- +- Downloading... +- +- +- +- Ok +- Gerai +- +- +- Already Exists +- +- +- +- Download Failed +- +- +- +- Downloading favicons (%1/%2)... +- +- +- +- +- KMessageWidget +- +- &Close +- &Užverti +- +- +- Close message +- Užverti žinutÄ™ +- +- +- +- Kdbx3Reader +- +- missing database headers +- trÅ«ksta duomenų bazÄ—s antraÅ¡Äių +- +- +- Header doesn't match hash +- AntraÅ¡tÄ— neatitinka maiÅ¡Ä… +- +- +- Invalid header id size +- Neteisingas antraÅ¡tÄ—s id dydis +- +- +- Invalid header field length +- Neteisingas antraÅ¡tÄ—s lauko ilgis +- +- +- Invalid header data length +- Neteisingas antraÅ¡tÄ—s duomenų ilgis +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- +- +- +- Unable to calculate database key +- +- +- +- Unable to issue challenge-response: %1 +- +- +- +- +- Kdbx3Writer +- +- Unable to issue challenge-response: %1 +- +- +- +- Unable to calculate database key +- +- +- +- +- Kdbx4Reader +- +- missing database headers +- trÅ«ksta duomenų bazÄ—s antraÅ¡Äių +- +- +- Invalid header checksum size +- Neteisingas antraÅ¡tÄ—s kontrolinÄ—s sumos dydis +- +- +- Header SHA256 mismatch +- AntraÅ¡tÄ—s SHA256 neatitikimas +- +- +- Unknown cipher +- Nežinomas Å¡ifras +- +- +- Invalid header id size +- Neteisingas antraÅ¡tÄ—s id dydis +- +- +- Invalid header field length +- Neteisingas antraÅ¡tÄ—s lauko ilgis +- +- +- Invalid header data length +- Neteisingas antraÅ¡tÄ—s duomenų ilgis +- +- +- Failed to open buffer for KDF parameters in header +- +- +- +- Unsupported key derivation function (KDF) or invalid parameters +- +- +- +- Legacy header fields found in KDBX4 file. +- +- +- +- Invalid inner header id size +- Neteisingas vidinÄ—s antraÅ¡tÄ—s id dydis +- +- +- Invalid inner header field length +- Neteisingas vidinÄ—s antraÅ¡tÄ—s lauko ilgis +- +- +- Invalid inner header binary size +- +- +- +- Unsupported KeePass variant map version. +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map entry name length +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map entry name data +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map entry value length +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map entry value data +- Translation comment: variant map = data structure for storing meta data +- +- +- +- Invalid variant map Bool entry value length +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map Int32 entry value length +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map UInt32 entry value length +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map Int64 entry value length +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map UInt64 entry value length +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map entry type +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map field type size +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- +- +- +- (HMAC mismatch) +- +- +- +- Unable to calculate database key: %1 +- +- +- +- +- Kdbx4Writer +- +- Invalid symmetric cipher algorithm. +- +- +- +- Invalid symmetric cipher IV size. +- IV = Initialization Vector for symmetric cipher +- +- +- +- Failed to serialize KDF parameters variant map +- Translation comment: variant map = data structure for storing meta data +- +- +- +- Unable to calculate database key: %1 +- +- +- +- +- KdbxReader +- +- Unsupported cipher +- Nepalaikomas Å¡ifras +- +- +- Invalid compression flags length +- +- +- +- Unsupported compression algorithm +- Nepalaikomas glaudinimo algoritmas +- +- +- Invalid master seed size +- +- +- +- Invalid transform seed size +- +- +- +- Invalid transform rounds size +- +- +- +- Invalid start bytes size +- +- +- +- Invalid random stream id size +- +- +- +- Invalid inner random stream cipher +- +- +- +- Not a KeePass database. +- Ne KeePass duomenų bazÄ—. +- +- +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- Pasirinktas failas yra sena KeePass 1 duomenų bazÄ— (.kdb). +- +-JÅ«s galite jÄ… importuoti, nuspausdami Duomenų bazÄ— > "Importuoti KeePass 1 duomenų bazÄ™...". +-Tai yra vienakryptis perkÄ—limas. JÅ«s negalÄ—site atverti importuotos duomenų bazÄ—s, naudodami senÄ…jÄ… KeePassX 0.4 versija. +- +- +- Unsupported KeePass 2 database version. +- Nepalaikoma KeePass 2 duomenų bazÄ—s versija. +- +- +- Invalid cipher uuid length: %1 (length=%2) +- +- +- +- Unable to parse UUID: %1 +- +- +- +- Failed to read database file. +- +- +- +- +- KdbxXmlReader +- +- XML parsing failure: %1 +- XML nagrinÄ—jimo nesÄ—kmÄ—: %1 +- +- +- No root group +- +- +- +- Missing icon uuid or data +- TrÅ«ksta piktogramos uuid ar duomenų +- +- +- Missing custom data key or value +- +- +- +- Multiple group elements +- +- +- +- Null group uuid +- +- +- +- Invalid group icon number +- +- +- +- Invalid EnableAutoType value +- +- +- +- Invalid EnableSearching value +- +- +- +- No group uuid found +- Nerastas grupÄ—s uuid +- +- +- Null DeleteObject uuid +- +- +- +- Missing DeletedObject uuid or time +- +- +- +- Null entry uuid +- +- +- +- Invalid entry icon number +- +- +- +- History element in history entry +- Istorijos elementas istorijos įraÅ¡e +- +- +- No entry uuid found +- Nerastas įraÅ¡o uuid +- +- +- History element with different uuid +- +- +- +- Duplicate custom attribute found +- Rastas dubliuotas tinkintas požymis +- +- +- Entry string key or value missing +- +- +- +- Entry binary key or value missing +- +- +- +- Auto-type association window or sequence missing +- +- +- +- Invalid bool value +- +- +- +- Invalid date time value +- Neteisinga datos laiko reikÅ¡mÄ— +- +- +- Invalid color value +- Neteisinga spalvos reikÅ¡mÄ— +- +- +- Invalid color rgb part +- Neteisinga spalvos rgb dalis +- +- +- Invalid number value +- Neteisinga skaitmeninÄ— reikÅ¡mÄ— +- +- +- Invalid uuid value +- Neteisinga uuid reikÅ¡mÄ— +- +- +- Unable to decompress binary +- Translator meant is a binary data inside an entry +- +- +- +- XML error: +-%1 +-Line %2, column %3 +- XML klaida: +-%1 +-%2 eilutÄ—, %3 stulpelis +- +- +- +- KeeAgentSettings +- +- Invalid KeeAgent settings file structure. +- +- +- +- Private key is an attachment but no attachments provided. +- +- +- +- Private key is empty +- +- +- +- File too large to be a private key +- Failas per didelis, kad bÅ«tų privatusis raktas +- +- +- Failed to open private key +- Nepavyko atverti privaÄiojo rakto +- +- +- +- KeePass1OpenWidget +- +- Unable to open the database. +- Nepavyko atverti duomenų bazÄ—s. +- +- +- Import KeePass1 Database +- +- +- +- +- KeePass1Reader +- +- Unable to read keyfile. +- Nepavyko perskaityti rakto failo. +- +- +- Not a KeePass database. +- Ne KeePass duomenų bazÄ—. +- +- +- Unsupported encryption algorithm. +- Nepalaikomas Å¡ifravimo algoritmas. +- +- +- Unsupported KeePass database version. +- Nepalaikoma KeePass duomenų bazÄ—s versija. +- +- +- Unable to read encryption IV +- IV = Initialization Vector for symmetric cipher +- Nepavyko perskaityti Å¡ifravimo IV +- +- +- Invalid number of groups +- Neteisingas grupių skaiÄius +- +- +- Invalid number of entries +- Neteisingas įrašų skaiÄius +- +- +- Invalid content hash size +- Neteisingas turinio maiÅ¡os dydis +- +- +- Invalid transform seed size +- +- +- +- Invalid number of transform rounds +- +- +- +- Unable to construct group tree +- +- +- +- Root +- Å aknis +- +- +- Key transformation failed +- Rakto transformacija nepavyko +- +- +- Invalid group field type number +- +- +- +- Invalid group field size +- +- +- +- Read group field data doesn't match size +- +- +- +- Incorrect group id field size +- +- +- +- Incorrect group creation time field size +- +- +- +- Incorrect group modification time field size +- +- +- +- Incorrect group access time field size +- +- +- +- Incorrect group expiry time field size +- +- +- +- Incorrect group icon field size +- +- +- +- Incorrect group level field size +- +- +- +- Invalid group field type +- Neteisingas grupÄ—s lauko tipas +- +- +- Missing group id or level +- +- +- +- Missing entry field type number +- +- +- +- Invalid entry field size +- Neteisingas įraÅ¡o lauko dydis +- +- +- Read entry field data doesn't match size +- +- +- +- Invalid entry uuid field size +- Neteisingas įraÅ¡o uuid lauko dydis +- +- +- Invalid entry group id field size +- +- +- +- Invalid entry icon field size +- +- +- +- Invalid entry creation time field size +- +- +- +- Invalid entry modification time field size +- +- +- +- Invalid entry expiry time field size +- +- +- +- Invalid entry field type +- Neteisingas įraÅ¡o lauko tipas +- +- +- unable to seek to content position +- +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- +- +- +- Unable to calculate database key +- +- +- +- +- KeeShare +- +- Invalid sharing reference +- +- +- +- Inactive share %1 +- +- +- +- Imported from %1 +- Importuota iÅ¡ %1 +- +- +- Exported to %1 +- +- +- +- Synchronized with %1 +- +- +- +- Import is disabled in settings +- +- +- +- Export is disabled in settings +- +- +- +- Inactive share +- +- +- +- Imported from +- +- +- +- Exported to +- +- +- +- Synchronized with +- +- +- +- +- KeyComponentWidget +- +- Key Component +- +- +- +- Key Component Description +- +- +- +- Cancel +- Atsisakyti +- +- +- Key Component set, click to change or remove +- +- +- +- Add %1 +- Add a key component +- PridÄ—ti %1 +- +- +- Change %1 +- Change a key component +- Keisti %1 +- +- +- Remove %1 +- Remove a key component +- Å alinti %1 +- +- +- %1 set, click to change or remove +- Change or remove a key component +- +- +- +- +- KeyFileEditWidget +- +- Generate +- Generuoti +- +- +- Key File +- Rakto failas +- +- +- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> +- +- +- +- Error loading the key file '%1' +-Message: %2 +- +- +- +- Key files +- Rakto failai +- +- +- All files +- Visi failai +- +- +- Create Key File... +- Sukurti rakto failÄ…... +- +- +- Error creating key file +- Klaida kuriant rakto failÄ… +- +- +- Unable to create key file: %1 +- Nepavyko sukurti rakto failo: %1 +- +- +- Select a key file +- Pasirinkite rakto failÄ… +- +- +- Key file selection +- +- +- +- Browse for key file +- +- +- +- Browse... +- NarÅ¡yti... +- +- +- Generate a new key file +- +- +- +- Note: Do not use a file that may change as that will prevent you from unlocking your database! +- +- +- +- Invalid Key File +- +- +- +- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. +- +- +- +- Suspicious Key File +- +- +- +- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. +-Are you sure you want to continue with this file? +- +- +- +- Old key file format +- +- +- +- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. +- +- +- +- +- MainWindow +- +- &Database +- &Duomenų bazÄ— +- +- +- &Help +- Ž&inynas +- +- +- &Groups +- &GrupÄ—s +- +- +- &Tools +- Ä®&rankiai +- +- +- &Quit +- &Baigti +- +- +- &About +- &Apie +- +- +- Database settings +- Duomenų bazÄ—s nustatymai +- +- +- Copy username to clipboard +- Kopijuoti naudotojo vardÄ… į iÅ¡karpinÄ™ +- +- +- Copy password to clipboard +- Kopijuoti slaptažodį į iÅ¡karpinÄ™ +- +- +- &Settings +- &Nustatymai +- +- +- &Title +- &AntraÅ¡tÄ— +- +- +- Copy title to clipboard +- Kopijuoti pavadinimÄ… į iÅ¡karpinÄ™ +- +- +- &URL +- &URL +- +- +- Copy URL to clipboard +- Kopijuoti URL į iÅ¡karpinÄ™ +- +- +- &Notes +- &Pastabos +- +- +- Copy notes to clipboard +- Kopijuoti pastabas į iÅ¡karpinÄ™ +- +- +- Copy &TOTP +- Kopijuoti &NTVS +- +- +- E&mpty recycle bin +- IÅ¡&valyti Å¡iukÅ¡linÄ™ +- +- +- Clear history +- IÅ¡valyti istorijÄ… +- +- +- Access error for config file %1 +- KonfigÅ«racijos failo %1 prieigos klaida +- +- +- Settings +- Nustatymai +- +- +- Toggle window +- Perjungti langÄ… +- +- +- Quit KeePassXC +- IÅ¡eiti iÅ¡ KeePassXC +- +- +- Please touch the button on your YubiKey! +- PraÅ¡ome priliesti mygtukÄ… ant savo YubiKey! +- +- +- WARNING: You are using an unstable build of KeePassXC! +-There is a high risk of corruption, maintain a backup of your databases. +-This version is not meant for production use. +- +- +- +- &Donate +- &Paaukoti +- +- +- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +-We recommend you use the AppImage available on our downloads page. +- +- +- +- &Import +- &Importuoti +- +- +- Create a new database +- Sukurti naujÄ… duomenų bazÄ™ +- +- +- Merge from another KDBX database +- Sulieti iÅ¡ kitos KDBX duomenų bazÄ—s +- +- +- Add a new entry +- PridÄ—ti naujÄ… įraÅ¡Ä… +- +- +- View or edit entry +- Rodyti ar taisyti įraÅ¡Ä… +- +- +- Add a new group +- PridÄ—ti naujÄ… grupÄ™ +- +- +- Perform &Auto-Type +- +- +- +- Open &URL +- Atverti &URL +- +- +- Import a KeePass 1 database +- Importuoti KeePass 1 duomenų bazÄ™ +- +- +- Import a CSV file +- Importuoti CSV failÄ… +- +- +- NOTE: You are using a pre-release version of KeePassXC! +-Expect some bugs and minor issues, this version is not meant for production use. +- +- +- +- Check for updates on startup? +- +- +- +- Would you like KeePassXC to check for updates on startup? +- +- +- +- You can always check for updates manually from the application menu. +- +- +- +- &Export +- +- +- +- Sort &A-Z +- +- +- +- Sort &Z-A +- +- +- +- &Password Generator +- +- +- +- Import a 1Password Vault +- +- +- +- &Getting Started +- +- +- +- &User Guide +- +- +- +- &Keyboard Shortcuts +- +- +- +- &Recent Databases +- +- +- +- &Entries +- +- +- +- Copy Att&ribute +- +- +- +- TOTP +- +- +- +- View +- Rodinys +- +- +- Theme +- +- +- +- &Check for Updates +- +- +- +- &Open Database… +- +- +- +- &Save Database +- +- +- +- &Close Database +- +- +- +- &New Database… +- +- +- +- &Merge From Database… +- +- +- +- &New Entry… +- +- +- +- &Edit Entry… +- +- +- +- &Delete Entry… +- +- +- +- &New Group… +- +- +- +- &Edit Group… +- +- +- +- &Delete Group… +- +- +- +- Download All &Favicons… +- +- +- +- Sa&ve Database As… +- +- +- +- Database &Security… +- +- +- +- Database &Reports... +- +- +- +- Statistics, health check, etc. +- +- +- +- &Database Settings… +- +- +- +- &Clone Entry… +- +- +- +- Move u&p +- +- +- +- Move entry one step up +- +- +- +- Move do&wn +- +- +- +- Move entry one step down +- +- +- +- Copy &Username +- +- +- +- Copy &Password +- +- +- +- Download &Favicon +- +- +- +- &Lock Databases +- +- +- +- &CSV File… +- +- +- +- &HTML File… +- +- +- +- KeePass 1 Database… +- +- +- +- 1Password Vault… +- +- +- +- CSV File… +- +- +- +- Show TOTP +- Rodyti NTVS +- +- +- Show QR Code +- +- +- +- Set up TOTP… +- +- +- +- Report a &Bug +- +- +- +- Open Getting Started Guide +- +- +- +- &Online Help +- +- +- +- Go to online documentation +- +- +- +- Open User Guide +- +- +- +- Save Database Backup... +- +- +- +- Add key to SSH Agent +- +- +- +- Remove key from SSH Agent +- +- +- +- Compact Mode +- +- +- +- Automatic +- +- +- +- Light +- +- +- +- Dark +- +- +- +- Classic (Platform-native) +- +- +- +- Show Toolbar +- +- +- +- Show Preview Panel +- +- +- +- Don't show again for this version +- +- +- +- Restart Application? +- +- +- +- You must restart the application to apply this setting. Would you like to restart now? +- +- +- +- Perform Auto-Type Sequence +- +- +- +- {USERNAME} +- +- +- +- {USERNAME}{ENTER} +- +- +- +- {PASSWORD} +- +- +- +- {PASSWORD}{ENTER} +- +- +- +- Always on Top +- +- +- +- Hide Usernames +- SlÄ—pti naudotojo vardus +- +- +- Hide Passwords +- SlÄ—pti slaptažodžius +- +- +- +- ManageDatabase +- +- Database settings +- Duomenų bazÄ—s nustatymai +- +- +- Edit database settings +- +- +- +- Unlock database +- Atrakinti duomenų bazÄ™ +- +- +- Unlock database to show more information +- +- +- +- Lock database +- Užrakinti duomenų bazÄ™ +- +- +- +- ManageSession +- +- Disconnect +- +- +- +- Disconnect this application +- +- +- +- +- Merger +- +- Creating missing %1 [%2] +- +- +- +- Relocating %1 [%2] +- +- +- +- Overwriting %1 [%2] +- +- +- +- older entry merged from database "%1" +- +- +- +- Adding backup for older target %1 [%2] +- +- +- +- Adding backup for older source %1 [%2] +- +- +- +- Reapplying older target entry on top of newer source %1 [%2] +- +- +- +- Reapplying older source entry on top of newer target %1 [%2] +- +- +- +- Synchronizing from newer source %1 [%2] +- +- +- +- Synchronizing from older source %1 [%2] +- +- +- +- Deleting child %1 [%2] +- +- +- +- Deleting orphan %1 [%2] +- +- +- +- Changed deleted objects +- +- +- +- Adding missing icon %1 +- Pridedama trÅ«kstama piktograma %1 +- +- +- Removed custom data %1 [%2] +- +- +- +- Adding custom data %1 [%2] +- +- +- +- +- NewDatabaseWizard +- +- Create a new KeePassXC database... +- Sukurti naujÄ… KeePassXC duomenų bazÄ™... +- +- +- Root +- Root group +- Å aknis +- +- +- +- NewDatabaseWizardPage +- +- WizardPage +- +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- ÄŒia galite derinti duomenų bazÄ—s Å¡ifravimo nustatymus. Nesijaudinkite, vÄ—liau galÄ—site juos keisti duomenų bazÄ—s nustatymuose. +- +- +- Advanced Settings +- IÅ¡plÄ—stiniai nustatymai +- +- +- Simple Settings +- Paprasti nustatymai +- +- +- Encryption Settings +- Å ifravimo nustatymai +- +- +- +- NewDatabaseWizardPageDatabaseKey +- +- Database Credentials +- +- +- +- A set of credentials known only to you that protects your database. +- +- +- +- +- NewDatabaseWizardPageEncryption +- +- Encryption Settings +- Å ifravimo nustatymai +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- ÄŒia galite derinti duomenų bazÄ—s Å¡ifravimo nustatymus. Nesijaudinkite, vÄ—liau galÄ—site juos keisti duomenų bazÄ—s nustatymuose. +- +- +- +- NewDatabaseWizardPageMetaData +- +- General Database Information +- +- +- +- Please fill in the display name and an optional description for your new database: +- +- +- +- +- NixUtils +- +- Password Manager +- +- +- +- +- OpData01 +- +- Invalid OpData01, does not contain header +- +- +- +- Unable to read all IV bytes, wanted 16 but got %1 +- +- +- +- Unable to init cipher for opdata01: %1 +- +- +- +- Unable to read all HMAC signature bytes +- +- +- +- Malformed OpData01 due to a failed HMAC +- +- +- +- Unable to process clearText in place +- +- +- +- Expected %1 bytes of clear-text, found %2 +- +- +- +- +- OpVaultOpenWidget +- +- Read Database did not produce an instance +-%1 +- +- +- +- +- OpVaultReader +- +- Directory .opvault must exist +- +- +- +- Directory .opvault must be readable +- +- +- +- Directory .opvault/default must exist +- +- +- +- Directory .opvault/default must be readable +- +- +- +- Unable to decode masterKey: %1 +- +- +- +- Unable to derive master key: %1 +- +- +- +- +- OpenSSHKey +- +- Invalid key file, expecting an OpenSSH key +- Neteisingas rakto failas, tikimasi OpenSSH rakto +- +- +- PEM boundary mismatch +- PEM ribos neatitikimas +- +- +- Base64 decoding failed +- Base64 dekodavimas patyrÄ— nesÄ—kmÄ™ +- +- +- Key file way too small. +- Rakto failas buvo per mažas. +- +- +- Key file magic header id invalid +- Neteisingas rakto failo magiÅ¡kosios antraÅ¡tÄ—s id +- +- +- Found zero keys +- Rasta nulis raktų +- +- +- Failed to read public key. +- Nepavyko perskaityti vieÅ¡ojo rakto. +- +- +- Corrupted key file, reading private key failed +- Sugadintas rakto failas, privaÄiojo rakto skaitymas nepavyko +- +- +- No private key payload to decrypt +- NÄ—ra jokios privaÄiojo rakto naudingosios apkrovos, kuriÄ… iÅ¡Å¡ifruoti +- +- +- Trying to run KDF without cipher +- Bandoma paleisti KDF be Å¡ifro +- +- +- Passphrase is required to decrypt this key +- Norint iÅ¡Å¡ifruoti šį raktÄ…, reikalinga slaptafrazÄ— +- +- +- Key derivation failed, key file corrupted? +- Rakto iÅ¡vedimas nepavyko, pažeistas rakto failas? +- +- +- Decryption failed, wrong passphrase? +- IÅ¡Å¡ifravimas nepavyko, neteisinga slaptafrazÄ—? +- +- +- Unexpected EOF while reading public key +- NetikÄ—ta failo pabaiga, skaitant vieÅ¡Ä…jį raktÄ… +- +- +- Unexpected EOF while reading private key +- NetikÄ—ta failo pabaiga, skaitant privatųjį raktÄ… +- +- +- Can't write public key as it is empty +- Nepavyksta raÅ¡yti vieÅ¡ojo rakto, nes jis tuÅ¡Äias +- +- +- Unexpected EOF when writing public key +- NetikÄ—ta failo pabaiga, raÅ¡ant vieÅ¡Ä…jį raktÄ… +- +- +- Can't write private key as it is empty +- Nepavyksta raÅ¡yti privaÄiojo rakto, nes jis tuÅ¡Äias +- +- +- Unexpected EOF when writing private key +- NetikÄ—ta failo pabaiga, raÅ¡ant privatųjį raktÄ… +- +- +- Unsupported key type: %1 +- Nepalaikomas rakto tipas: %1 +- +- +- Unknown cipher: %1 +- Nežinomas Å¡ifras: %1 +- +- +- Cipher IV is too short for MD5 kdf +- +- +- +- Unknown KDF: %1 +- Nežinomas KDF: %1 +- +- +- Unknown key type: %1 +- Nežinomas rakto tipas: %1 +- +- +- +- PasswordEdit +- +- Passwords do not match +- +- +- +- Passwords match so far +- +- +- +- Toggle Password (%1) +- +- +- +- Generate Password (%1) +- +- +- +- Warning: Caps Lock enabled! +- +- +- +- +- PasswordEditWidget +- +- Enter password: +- Ä®raÅ¡ykite slaptažodį: +- +- +- Confirm password: +- +- +- +- Password +- Slaptažodis +- +- +- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> +- +- +- +- Passwords do not match. +- Slaptažodžiai nesutampa. +- +- +- Password field +- +- +- +- Repeat password field +- +- +- +- +- PasswordGeneratorWidget +- +- %p% +- %p% +- +- +- strength +- Password strength +- stiprumas +- +- +- entropy +- entropija +- +- +- Password +- Slaptažodis +- +- +- Character Types +- Simbolių tipai +- +- +- Numbers +- SkaiÄiai +- +- +- Extended ASCII +- Papildomi ASCII +- +- +- Exclude look-alike characters +- PaÅ¡alinti panaÅ¡iai atrodanÄius simbolius +- +- +- Pick characters from every group +- Parinkti simbolius iÅ¡ kiekvienos grupÄ—s +- +- +- &Length: +- &Ilgis: +- +- +- Passphrase +- SlaptafrazÄ— +- +- +- Wordlist: +- Žodžių sÄ…raÅ¡as: +- +- +- Word Separator: +- Žodžių skirtukas: +- +- +- Close +- Užverti +- +- +- Entropy: %1 bit +- Entropija: %1 bitų +- +- +- Password Quality: %1 +- Slaptažodžio kokybÄ—: %1 +- +- +- Poor +- Password quality +- Blogas +- +- +- Weak +- Password quality +- Silpnas +- +- +- Good +- Password quality +- Geras +- +- +- Excellent +- Password quality +- Puikus +- +- +- Switch to advanced mode +- Perjungti į iÅ¡plÄ—stinÄ™ veiksenÄ… +- +- +- Advanced +- IÅ¡plÄ—stiniai +- +- +- Braces +- +- +- +- Punctuation +- +- +- +- Quotes +- KabutÄ—s +- +- +- Logograms +- +- +- +- Character set to exclude from generated password +- +- +- +- Do not include: +- Neįtraukti: +- +- +- Add non-hex letters to "do not include" list +- +- +- +- Hex +- +- +- +- Excluded characters: "0", "1", "l", "I", "O", "|", "ï¹’" +- +- +- +- Generated password +- +- +- +- Upper-case letters +- +- +- +- Lower-case letters +- +- +- +- Special characters +- +- +- +- Math Symbols +- +- +- +- Dashes and Slashes +- +- +- +- Excluded characters +- +- +- +- Hex Passwords +- +- +- +- Password length +- +- +- +- Word Case: +- +- +- +- Regenerate password +- +- +- +- Copy password +- Kopijuoti slaptažodį +- +- +- lower case +- +- +- +- UPPER CASE +- +- +- +- Title Case +- +- +- +- Generate Password +- +- +- +- Also choose from: +- +- +- +- Additional characters to use for the generated password +- +- +- +- Additional characters +- +- +- +- Word Count: +- Žodžių skaiÄius: +- +- +- Esc +- +- +- +- Apply Password +- +- +- +- Ctrl+S +- +- +- +- Regenerate password (%1) +- +- +- +- Special Characters +- SpecialÅ«s simboliai +- +- +- +- QApplication +- +- KeeShare +- +- +- +- Statistics +- +- +- +- Very weak password +- +- +- +- Password entropy is %1 bits +- +- +- +- Weak password +- +- +- +- Used in %1/%2 +- +- +- +- Password is used %1 times +- +- +- +- Password has expired +- +- +- +- Password expiry was %1 +- +- +- +- Password is about to expire +- +- +- +- Password expires in %1 days +- +- +- +- Password will expire soon +- +- +- +- Password expires on %1 +- +- +- +- Health Check +- +- +- +- HIBP +- +- +- +- +- QMessageBox +- +- Overwrite +- +- +- +- Delete +- IÅ¡trinti +- +- +- Move +- +- +- +- Empty +- +- +- +- Remove +- Å alinti +- +- +- Skip +- +- +- +- Disable +- IÅ¡jungti +- +- +- Merge +- +- +- +- Continue +- +- +- +- +- QObject +- +- Database not opened +- Duomenų bazÄ— neatverta +- +- +- Database hash not available +- Duomenų bazÄ—s maiÅ¡a yra neprieinama +- +- +- Client public key not received +- +- +- +- Cannot decrypt message +- Nepavyksta iÅ¡Å¡ifruoti žinutÄ—s +- +- +- Action cancelled or denied +- Veiksmo atsisakyta arba jis atmestas +- +- +- KeePassXC association failed, try again +- +- +- +- Encryption key is not recognized +- Å ifravimo raktas yra neatpažintas +- +- +- Incorrect action +- Neteisingas veiksmas +- +- +- Empty message received +- Gauta tuÅ¡Äia žinutÄ— +- +- +- No URL provided +- Nepateiktas URL +- +- +- No logins found +- Nerasta prisijungimų +- +- +- Unknown error +- Nežinoma klaida +- +- +- Add a new entry to a database. +- PridÄ—ti naujÄ… įraÅ¡Ä… į duomenų bazÄ™. +- +- +- Path of the database. +- Duomenų bazÄ—s kelias. +- +- +- Key file of the database. +- Duomenų bazÄ—s rakto failas. +- +- +- path +- kelias +- +- +- Username for the entry. +- Ä®raÅ¡o naudotojo vardas. +- +- +- username +- naudotojo vardas +- +- +- URL for the entry. +- Ä®raÅ¡o URL. +- +- +- URL +- URL +- +- +- Prompt for the entry's password. +- Klausti įraÅ¡o slaptažodžio. +- +- +- Generate a password for the entry. +- Generuoti įraÅ¡ui slaptažodį. +- +- +- length +- ilgis +- +- +- Path of the entry to add. +- Ä®raÅ¡o, kurį pridÄ—ti, kelias. +- +- +- Path of the entry to clip. +- clip = copy to clipboard +- Ä®raÅ¡o, kurį iÅ¡kirpti, kelias. +- +- +- Timeout in seconds before clearing the clipboard. +- Skirtas laikas, sekundÄ—mis, prieÅ¡ iÅ¡valant iÅ¡karpinÄ™. +- +- +- Edit an entry. +- Taisyti įraÅ¡Ä…. +- +- +- Title for the entry. +- Ä®raÅ¡o pavadinimas. +- +- +- title +- antraÅ¡tÄ— +- +- +- Path of the entry to edit. +- Ä®raÅ¡o, kurį taisyti, kelias. +- +- +- Estimate the entropy of a password. +- ApskaiÄiuoti slaptažodžio entropijÄ…. +- +- +- Password for which to estimate the entropy. +- Slaptažodis, kurio entropijÄ… apskaiÄiuoti +- +- +- Perform advanced analysis on the password. +- Atlikti iÅ¡plÄ—stinÄ™ slaptažodžio analizÄ™ +- +- +- +- +-Available commands: +- +- +- +-Prieinamos komandos: +- +- +- +- Name of the command to execute. +- Komandos, kuriÄ… vykdyti, pavadinimas. +- +- +- List database entries. +- IÅ¡vardyti duomenų bazÄ—s įraÅ¡us. +- +- +- Path of the group to list. Default is / +- GrupÄ—s, kuriÄ… iÅ¡vardyti, kelias. Numatytasis yra / +- +- +- Find entries quickly. +- Greitai rasti įraÅ¡us. +- +- +- Search term. +- PaieÅ¡kos žodis. +- +- +- Merge two databases. +- Sulieti dvi duomenų bazes. +- +- +- Path of the database to merge from. +- Duomenų bazÄ—s, iÅ¡ kurios sulieti, kelias. +- +- +- Use the same credentials for both database files. +- Abiems duomenų bazių failams naudoti tuos paÄius prisijungimo duomenis. +- +- +- Key file of the database to merge from. +- Duomenų bazÄ—s, iÅ¡ kurios sulieti, rakto failas. +- +- +- Show an entry's information. +- Rodyti įraÅ¡o informacijÄ…. +- +- +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- Požymių, kuriuos rodyti, pavadinimai. Å i parinktis gali bÅ«ti nurodyta daugiau nei vienÄ… kartÄ…, kiekvienoje eilutÄ—je nurodyta tvarka rodant po atskirÄ… požymį. Jei nÄ—ra nurodyti jokie požymiai, bus nurodyta numatytųjų požymių santrauka. +- +- +- attribute +- požymis +- +- +- Name of the entry to show. +- Ä®raÅ¡o, kurį rodyti, pavadinimas. +- +- +- NULL device +- NIEKINIS įrenginys +- +- +- error reading from device +- klaida skaitant iÅ¡ įrenginio +- +- +- malformed string +- netaisyklinga eilutÄ— +- +- +- missing closing quote +- trÅ«ksta užveriamosios kabutÄ—s +- +- +- Group +- GrupÄ— +- +- +- Title +- AntraÅ¡tÄ— +- +- +- Username +- Naudotojo vardas +- +- +- Password +- Slaptažodis +- +- +- Notes +- Pastabos +- +- +- Last Modified +- Paskutinis keitimas +- +- +- Created +- Sukurta +- +- +- Browser Integration +- NarÅ¡yklÄ—s integracija +- +- +- SSH Agent +- SSH agentas +- +- +- Generate a new random diceware passphrase. +- +- +- +- Word count for the diceware passphrase. +- +- +- +- Wordlist for the diceware generator. +-[Default: EFF English] +- +- +- +- Generate a new random password. +- Generuoti naujÄ… atsitiktinį slaptažodį. +- +- +- Could not create entry with path %1. +- +- +- +- Enter password for new entry: +- +- +- +- Writing the database failed %1. +- RaÅ¡ymas į duomenų bazÄ™ patyrÄ— nesÄ—kmÄ™ %1. +- +- +- Successfully added entry %1. +- SÄ—kmingai pridÄ—tas įraÅ¡as %1. +- +- +- Invalid timeout value %1. +- +- +- +- Entry %1 not found. +- Ä®raÅ¡as %1 nerastas. +- +- +- Entry with path %1 has no TOTP set up. +- +- +- +- Clearing the clipboard in %1 second(s)... +- +- +- +- Clipboard cleared! +- IÅ¡karpinÄ— iÅ¡valyta! +- +- +- Silence password prompt and other secondary outputs. +- +- +- +- count +- CLI parameter +- kiekis +- +- +- Could not find entry with path %1. +- +- +- +- Not changing any field for entry %1. +- +- +- +- Enter new password for entry: +- +- +- +- Writing the database failed: %1 +- +- +- +- Successfully edited entry %1. +- +- +- +- Length %1 +- Ilgis %1 +- +- +- Entropy %1 +- +- +- +- Log10 %1 +- +- +- +- Multi-word extra bits %1 +- +- +- +- Type: Bruteforce +- +- +- +- Type: Dictionary +- +- +- +- Type: Dict+Leet +- +- +- +- Type: User Words +- +- +- +- Type: User+Leet +- +- +- +- Type: Repeated +- +- +- +- Type: Sequence +- +- +- +- Type: Spatial +- +- +- +- Type: Date +- +- +- +- Type: Bruteforce(Rep) +- +- +- +- Type: Dictionary(Rep) +- +- +- +- Type: Dict+Leet(Rep) +- +- +- +- Type: User Words(Rep) +- +- +- +- Type: User+Leet(Rep) +- +- +- +- Type: Repeated(Rep) +- +- +- +- Type: Sequence(Rep) +- +- +- +- Type: Spatial(Rep) +- +- +- +- Type: Date(Rep) +- +- +- +- Type: Unknown%1 +- +- +- +- Entropy %1 (%2) +- +- +- +- *** Password length (%1) != sum of length of parts (%2) *** +- +- +- +- Failed to load key file %1: %2 +- Nepavyko įkelti rakto failo %1: %2 +- +- +- Length of the generated password +- +- +- +- Use lowercase characters +- +- +- +- Use uppercase characters +- +- +- +- Use special characters +- +- +- +- Use extended ASCII +- +- +- +- Exclude character set +- +- +- +- chars +- +- +- +- Exclude similar looking characters +- +- +- +- Include characters from every selected group +- +- +- +- Recursively list the elements of the group. +- +- +- +- Cannot find group %1. +- Nepavyksta rasti grupÄ—s %1. +- +- +- Error reading merge file: +-%1 +- +- +- +- Unable to save database to file : %1 +- Nepavyko įraÅ¡yti duomenų bazÄ™ į failÄ… : %1 +- +- +- Unable to save database to file: %1 +- Nepavyko įraÅ¡yti duomenų bazÄ™ į failÄ…: %1 +- +- +- Successfully recycled entry %1. +- +- +- +- Successfully deleted entry %1. +- SÄ—kmingai iÅ¡trintas įraÅ¡as %1. +- +- +- Show the entry's current TOTP. +- +- +- +- ERROR: unknown attribute %1. +- KLAIDA: nežinomas požymis %1. +- +- +- No program defined for clipboard manipulation +- +- +- +- file empty +- failas tuÅ¡Äias +- +- +- %1: (row, col) %2,%3 +- %1: (eil., stulp.) %2,%3 +- +- +- AES-KDF (KDBX 4) +- AES-KDF (KDBX 4) +- +- +- AES-KDF (KDBX 3.1) +- AES-KDF (KDBX 3.1) +- +- +- Invalid Settings +- TOTP +- Neteisingi nustatymai +- +- +- Invalid Key +- TOTP +- Neteisingas raktas +- +- +- Message encryption failed. +- +- +- +- No groups found +- Nerasta jokių grupių +- +- +- Create a new database. +- Sukurti naujÄ… duomenų bazÄ™. +- +- +- File %1 already exists. +- Failas %1 jau yra. +- +- +- Loading the key file failed +- Rakto failo įkÄ—limas nepavyko +- +- +- No key is set. Aborting database creation. +- Nenustatytas joks raktas. Duomenų bazÄ—s sukÅ«rimas nutraukiamas. +- +- +- Failed to save the database: %1. +- Nepavyko įraÅ¡yti duomenų bazÄ—s: %1. +- +- +- Successfully created new database. +- Nauja duomenų bazÄ— sÄ—kmingai sukurta. +- +- +- Creating KeyFile %1 failed: %2 +- +- +- +- Loading KeyFile %1 failed: %2 +- +- +- +- Path of the entry to remove. +- Ä®raÅ¡o, kurį Å¡alinti, kelias. +- +- +- Existing single-instance lock file is invalid. Launching new instance. +- Esamas vieno egzemplioriaus užrakto failas yra neteisingas. Paleidžiamas naujas egzempliorius. +- +- +- The lock file could not be created. Single-instance mode disabled. +- Nepavyko sukurti užrakto. Vieno egzemplioriaus veiksena iÅ¡jungta. +- +- +- KeePassXC - cross-platform password manager +- KeePassXC - daugiaplatformÄ— slaptažodžių tvarkytuvÄ— +- +- +- filenames of the password databases to open (*.kdbx) +- norimų atverti slaptažodžių duomenų bazių failų pavadinimai (*.kdbx) +- +- +- path to a custom config file +- kelias į tinkintÄ… konfigÅ«racijos failÄ… +- +- +- key file of the database +- duomenų bazÄ—s rakto failas +- +- +- read password of the database from stdin +- nuskaityti duomenų bazÄ—s slaptažodį iÅ¡ stdin +- +- +- Another instance of KeePassXC is already running. +- Jau yra paleistas kitas KeePassXC egzempliorius. +- +- +- Fatal error while testing the cryptographic functions. +- Lemtingoji klaida, testuojant Å¡ifravimo funkcijas. +- +- +- KeePassXC - Error +- KeePassXC - Klaida +- +- +- Database password: +- Duomenų bazÄ—s slaptažodis: +- +- +- Cannot create new group +- +- +- +- Deactivate password key for the database. +- +- +- +- Displays debugging information. +- +- +- +- Deactivate password key for the database to merge from. +- +- +- +- Version %1 +- Versija %1 +- +- +- Build Type: %1 +- Darinio tipas: %1 +- +- +- Revision: %1 +- Revizija: %1 +- +- +- Distribution: %1 +- Platinimas: %1 +- +- +- Debugging mode is disabled. +- +- +- +- Debugging mode is enabled. +- +- +- +- Operating system: %1 +-CPU architecture: %2 +-Kernel: %3 %4 +- OperacinÄ— sistema: %1 +-Procesoriaus architektÅ«ra: %2 +-Branduolys: %3 %4 +- +- +- Auto-Type +- Automatinis rinkimas +- +- +- KeeShare (signed and unsigned sharing) +- +- +- +- KeeShare (only signed sharing) +- +- +- +- KeeShare (only unsigned sharing) +- +- +- +- YubiKey +- YubiKey +- +- +- TouchID +- TouchID +- +- +- None +- NÄ—ra +- +- +- Enabled extensions: +- Ä®jungti plÄ—tiniai: +- +- +- Cryptographic libraries: +- +- +- +- Cannot generate a password and prompt at the same time! +- +- +- +- Adds a new group to a database. +- +- +- +- Path of the group to add. +- +- +- +- Group %1 already exists! +- +- +- +- Group %1 not found. +- +- +- +- Successfully added group %1. +- +- +- +- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. +- +- +- +- FILENAME +- +- +- +- Analyze passwords for weaknesses and problems. +- +- +- +- Failed to open HIBP file %1: %2 +- +- +- +- Evaluating database entries against HIBP file, this will take a while... +- +- +- +- Close the currently opened database. +- +- +- +- Display this help. +- +- +- +- slot +- +- +- +- Invalid word count %1 +- +- +- +- The word list is too small (< 1000 items) +- +- +- +- Exit interactive mode. +- +- +- +- Exports the content of a database to standard output in the specified format. +- +- +- +- Unable to export database to XML: %1 +- +- +- +- Unsupported format %1 +- +- +- +- Use numbers +- +- +- +- Invalid password length %1 +- +- +- +- Display command help. +- +- +- +- Available commands: +- +- +- +- Import the contents of an XML database. +- +- +- +- Path of the XML database export. +- +- +- +- Path of the new database. +- +- +- +- Successfully imported database. +- +- +- +- Unknown command %1 +- +- +- +- Flattens the output to single lines. +- +- +- +- Only print the changes detected by the merge operation. +- +- +- +- Yubikey slot for the second database. +- +- +- +- Successfully merged %1 into %2. +- +- +- +- Database was not modified by merge operation. +- +- +- +- Moves an entry to a new group. +- +- +- +- Path of the entry to move. +- +- +- +- Path of the destination group. +- +- +- +- Could not find group with path %1. +- +- +- +- Entry is already in group %1. +- +- +- +- Successfully moved entry %1 to group %2. +- +- +- +- Open a database. +- +- +- +- Path of the group to remove. +- +- +- +- Cannot remove root group from database. +- +- +- +- Successfully recycled group %1. +- +- +- +- Successfully deleted group %1. +- +- +- +- Failed to open database file %1: not found +- +- +- +- Failed to open database file %1: not a plain file +- +- +- +- Failed to open database file %1: not readable +- +- +- +- Enter password to unlock %1: +- +- +- +- Invalid YubiKey slot %1 +- +- +- +- Enter password to encrypt database (optional): +- +- +- +- HIBP file, line %1: parse error +- +- +- +- Secret Service Integration +- +- +- +- User name +- +- +- +- Password for '%1' has been leaked %2 time(s)! +- +- +- +- Invalid password generator after applying all options +- +- +- +- Show the protected attributes in clear text. +- +- +- +- Browser Plugin Failure +- +- +- +- Could not save the native messaging script file for %1. +- +- +- +- Copy the given attribute to the clipboard. Defaults to "password" if not specified. +- +- +- +- Copy the current TOTP to the clipboard (equivalent to "-a totp"). +- +- +- +- Copy an entry's attribute to the clipboard. +- +- +- +- ERROR: Please specify one of --attribute or --totp, not both. +- +- +- +- ERROR: attribute %1 is ambiguous, it matches %2. +- +- +- +- Attribute "%1" not found. +- +- +- +- Entry's "%1" attribute copied to the clipboard! +- +- +- +- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). +- +- +- +- slot[:serial] +- +- +- +- Target decryption time in MS for the database. +- +- +- +- time +- +- +- +- Set the key file for the database. +- +- +- +- Set a password for the database. +- +- +- +- Invalid decryption time %1. +- +- +- +- Target decryption time must be between %1 and %2. +- +- +- +- Failed to set database password. +- +- +- +- Benchmarking key derivation function for %1ms delay. +- +- +- +- Setting %1 rounds for key derivation function. +- +- +- +- error while setting database key derivation settings. +- +- +- +- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. +- +- +- +- Unable to import XML database: %1 +- +- +- +- Show a database's information. +- +- +- +- UUID: +- +- +- +- Name: +- +- +- +- Description: +- +- +- +- Cipher: +- +- +- +- KDF: +- +- +- +- Recycle bin is enabled. +- +- +- +- Recycle bin is not enabled. +- +- +- +- Invalid command %1. +- +- +- +- Invalid YubiKey serial %1 +- +- +- +- Please touch the button on your YubiKey to continue… +- +- +- +- Do you want to create a database with an empty password? [y/N]: +- +- +- +- Repeat password: +- +- +- +- Error: Passwords do not match. +- +- +- +- All clipping programs failed. Tried %1 +- +- +- +- +- AES (%1 rounds) +- +- +- +- AES 256-bit +- +- +- +- Twofish 256-bit +- +- +- +- ChaCha20 256-bit +- +- +- +- Benchmark %1 delay +- +- +- +- %1 ms +- milliseconds +- +- +- +- %1 s +- seconds +- +- +- +- path to a custom local config file +- +- +- +- WARNING: You are using an old key file format which KeePassXC may +-stop supporting in the future. +- +-Please consider generating a new key file. +- +- +- +- Argon2%1 (%2 rounds, %3 KB) +- +- +- +- Argon2d (KDBX 4 – recommended) +- +- +- +- Argon2id (KDBX 4) +- +- +- +- TOTP +- +- +- +- Icon +- Piktograma +- +- +- Unsupported key file version: %1 +- +- +- +- Checksum mismatch! Key file may be corrupt. +- +- +- +- Unexpected key file data! Key file may be corrupt. +- +- +- +- +- QtIOCompressor +- +- Internal zlib error when compressing: +- VidinÄ— zlib klaida, glaudinant: +- +- +- Error writing to underlying device: +- Klaida, įraÅ¡ant į bazinį įrenginį: +- +- +- Error opening underlying device: +- Klaida, atveriant bazinį įrenginį: +- +- +- Error reading data from underlying device: +- Klaida, skaitant iÅ¡ bazinio įrenginio: +- +- +- Internal zlib error when decompressing: +- VidinÄ— zlib klaida, iÅ¡skleidžiant: +- +- +- +- QtIOCompressor::open +- +- The gzip format not supported in this version of zlib. +- Å ioje zlib versijoje gzip formatas yra nepalaikomas. +- +- +- Internal zlib error: +- VidinÄ— zlib klaida: +- +- +- +- ReportsWidgetHealthcheck +- +- Also show entries that have been excluded from reports +- +- +- +- Hover over reason to show additional details. Double-click entries to edit. +- +- +- +- Bad +- Password quality +- +- +- +- Bad — password must be changed +- +- +- +- Poor +- Password quality +- Blogas +- +- +- Poor — password should be changed +- +- +- +- Weak +- Password quality +- Silpnas +- +- +- Weak — consider changing the password +- +- +- +- (Excluded) +- +- +- +- This entry is being excluded from reports +- +- +- +- Please wait, health data is being calculated... +- +- +- +- Congratulations, everything is healthy! +- +- +- +- Title +- AntraÅ¡tÄ— +- +- +- Path +- Kelias +- +- +- Score +- +- +- +- Reason +- +- +- +- Edit Entry... +- +- +- +- Exclude from reports +- +- +- +- +- ReportsWidgetHibp +- +- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. +- +- +- +- Perform Online Analysis +- +- +- +- Also show entries that have been excluded from reports +- +- +- +- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. +- +- +- +- Congratulations, no exposed passwords! +- +- +- +- Title +- AntraÅ¡tÄ— +- +- +- Path +- Kelias +- +- +- Password exposed… +- +- +- +- (Excluded) +- +- +- +- This entry is being excluded from reports +- +- +- +- once +- +- +- +- up to 10 times +- +- +- +- up to 100 times +- +- +- +- up to 1000 times +- +- +- +- up to 10,000 times +- +- +- +- up to 100,000 times +- +- +- +- up to a million times +- +- +- +- millions of times +- +- +- +- Edit Entry... +- +- +- +- Exclude from reports +- +- +- +- +- ReportsWidgetStatistics +- +- Hover over lines with error icons for further information. +- +- +- +- Name +- Pavadinimas +- +- +- Value +- ReikÅ¡mÄ— +- +- +- Please wait, database statistics are being calculated... +- +- +- +- Database name +- +- +- +- Description +- +- +- +- Location +- +- +- +- Last saved +- +- +- +- Unsaved changes +- +- +- +- yes +- +- +- +- no +- +- +- +- The database was modified, but the changes have not yet been saved to disk. +- +- +- +- Number of groups +- +- +- +- Number of entries +- +- +- +- Number of expired entries +- +- +- +- The database contains entries that have expired. +- +- +- +- Unique passwords +- +- +- +- Non-unique passwords +- +- +- +- More than 10% of passwords are reused. Use unique passwords when possible. +- +- +- +- Maximum password reuse +- +- +- +- Some passwords are used more than three times. Use unique passwords when possible. +- +- +- +- Number of short passwords +- +- +- +- Recommended minimum password length is at least 8 characters. +- +- +- +- Number of weak passwords +- +- +- +- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. +- +- +- +- Entries excluded from reports +- +- +- +- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. +- +- +- +- Average password length +- +- +- +- %1 characters +- +- +- +- Average password length is less than ten characters. Longer passwords provide more security. +- +- +- +- +- SSHAgent +- +- Agent connection failed. +- +- +- +- Agent protocol error. +- Agento protokolo klaida. +- +- +- No agent running, cannot add identity. +- +- +- +- No agent running, cannot remove identity. +- +- +- +- Agent refused this identity. Possible reasons include: +- +- +- +- The key has already been added. +- Raktas jau buvo pridÄ—tas. +- +- +- Restricted lifetime is not supported by the agent (check options). +- +- +- +- A confirmation request is not supported by the agent (check options). +- +- +- +- Key identity ownership conflict. Refusing to add. +- +- +- +- No agent running, cannot list identities. +- +- +- +- +- SearchHelpWidget +- +- Search Help +- +- +- +- Search terms are as follows: [modifiers][field:]["]term["] +- +- +- +- Every search term must match (ie, logical AND) +- +- +- +- Modifiers +- Modifikatoriai +- +- +- exclude term from results +- +- +- +- match term exactly +- +- +- +- use regex in term +- +- +- +- Fields +- Laukai +- +- +- Term Wildcards +- +- +- +- match anything +- +- +- +- match one +- +- +- +- logical OR +- +- +- +- Examples +- Pavyzdžiai +- +- +- +- SearchWidget +- +- Search +- PaieÅ¡ka +- +- +- Limit search to selected group +- Riboti paieÅ¡kÄ… iki pasirinktos grupÄ—s +- +- +- Search Help +- +- +- +- Search (%1)... +- Search placeholder text, %1 is the keyboard shortcut +- +- +- +- Case sensitive +- Skiriant raidžių registrÄ… +- +- +- +- SettingsWidgetFdoSecrets +- +- Options +- +- +- +- Enable KeepassXC Freedesktop.org Secret Service integration +- +- +- +- General +- Bendra +- +- +- Show notification when credentials are requested +- +- +- +- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> +- +- +- +- Exposed database groups: +- +- +- +- Authorization +- +- +- +- These applications are currently connected: +- +- +- +- Don't confirm when entries are deleted by clients +- +- +- +- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. +- +- +- +- <b>Warning:</b> +- +- +- +- Save current changes to activate the plugin and enable editing of this section. +- +- +- +- +- SettingsWidgetKeeShare +- +- Active +- +- +- +- Allow export +- +- +- +- Allow import +- +- +- +- Own certificate +- +- +- +- Fingerprint: +- Kontrolinis kodas: +- +- +- Certificate: +- Liudijimas: +- +- +- Signer +- +- +- +- Key: +- Raktas: +- +- +- Generate +- Generuoti +- +- +- Import +- Importuoti +- +- +- Export +- +- +- +- Imported certificates +- Importuoti liudijimai +- +- +- Trust +- +- +- +- Ask +- +- +- +- Untrust +- +- +- +- Remove +- Å alinti +- +- +- Path +- Kelias +- +- +- Status +- BÅ«sena +- +- +- Fingerprint +- Kontrolinis kodas +- +- +- Certificate +- Liudijimas +- +- +- Trusted +- +- +- +- Untrusted +- +- +- +- Unknown +- Nežinoma +- +- +- key.share +- Filetype for KeeShare key +- +- +- +- KeeShare key file +- +- +- +- All files +- Visi failai +- +- +- Select path +- +- +- +- Exporting changed certificate +- +- +- +- The exported certificate is not the same as the one in use. Do you want to export the current certificate? +- +- +- +- Signer: +- +- +- +- Allow KeeShare imports +- +- +- +- Allow KeeShare exports +- +- +- +- Only show warnings and errors +- +- +- +- Key +- Raktas +- +- +- Signer name field +- +- +- +- Generate new certificate +- +- +- +- Import existing certificate +- +- +- +- Export own certificate +- +- +- +- Known shares +- +- +- +- Trust selected certificate +- +- +- +- Ask whether to trust the selected certificate every time +- +- +- +- Untrust selected certificate +- +- +- +- Remove selected certificate +- +- +- +- +- ShareExport +- +- Overwriting signed share container is not supported - export prevented +- +- +- +- Could not write export container (%1) +- +- +- +- Could not embed signature: Could not open file to write (%1) +- +- +- +- Could not embed signature: Could not write file (%1) +- +- +- +- Could not embed database: Could not open file to write (%1) +- +- +- +- Could not embed database: Could not write file (%1) +- +- +- +- Overwriting unsigned share container is not supported - export prevented +- +- +- +- Could not write export container +- +- +- +- Unexpected export error occurred +- Ä®vyko netikÄ—ta eksportavimo klaida +- +- +- +- ShareImport +- +- Import from container without signature +- +- +- +- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? +- +- +- +- Import from container with certificate +- +- +- +- Do you want to trust %1 with the fingerprint of %2 from %3? +- +- +- +- Not this time +- Ne šį kartÄ… +- +- +- Never +- Niekada +- +- +- Always +- Visada +- +- +- Just this time +- Tik šį kartÄ… +- +- +- Signed share container are not supported - import prevented +- +- +- +- File is not readable +- +- +- +- Invalid sharing container +- +- +- +- Untrusted import prevented +- +- +- +- Successful signed import +- +- +- +- Unsigned share container are not supported - import prevented +- +- +- +- Successful unsigned import +- +- +- +- File does not exist +- Failo nÄ—ra +- +- +- Unknown share container type +- +- +- +- +- ShareObserver +- +- Import from %1 failed (%2) +- Importavimas iÅ¡ %1 nepavyko (%2) +- +- +- Import from %1 successful (%2) +- Importavimas iÅ¡ %1 sÄ—kmingas (%2) +- +- +- Imported from %1 +- Importuota iÅ¡ %1 +- +- +- Export to %1 failed (%2) +- Eksportavimas į %1 nepavyko (%2) +- +- +- Export to %1 successful (%2) +- Eksportavimas į %1 sÄ—kmingas (%2) +- +- +- Export to %1 +- +- +- +- Multiple import source path to %1 in %2 +- +- +- +- Conflicting export target path %1 in %2 +- +- +- +- +- TotpDialog +- +- Timed Password +- Numatytosios trukmÄ—s slaptažodis +- +- +- 000000 +- 000000 +- +- +- Copy +- Kopijuoti +- +- +- Expires in <b>%n</b> second(s) +- +- +- +- +- TotpExportSettingsDialog +- +- Copy +- Kopijuoti +- +- +- NOTE: These TOTP settings are custom and may not work with other authenticators. +- TOTP QR code dialog warning +- +- +- +- There was an error creating the QR code. +- +- +- +- Closing in %1 seconds. +- Užveriama po %1 sekundžių. +- +- +- +- TotpSetupDialog +- +- Setup TOTP +- Nustatyti NTVS +- +- +- Default RFC 6238 token settings +- Numatytojo RFC 6238 prieigos rakto nustatymai +- +- +- Steam token settings +- Steam prieigos rakto nustatymai +- +- +- Use custom settings +- Naudoti tinkintus nustatymus +- +- +- Custom Settings +- +- +- +- Time step: +- Laiko žingsnis: +- +- +- sec +- Seconds +- sek. +- +- +- Code size: +- Kodo dydis: +- +- +- Secret Key: +- +- +- +- Secret key must be in Base32 format +- +- +- +- Secret key field +- +- +- +- Algorithm: +- Algoritmas: +- +- +- Time step field +- +- +- +- digits +- +- +- +- Invalid TOTP Secret +- +- +- +- You have entered an invalid secret key. The key must be in Base32 format. +-Example: JBSWY3DPEHPK3PXP +- +- +- +- Confirm Remove TOTP Settings +- +- +- +- Are you sure you want to delete TOTP settings for this entry? +- +- +- +- +- URLEdit +- +- Invalid URL +- +- +- +- +- UpdateCheckDialog +- +- Checking for updates +- +- +- +- Checking for updates... +- +- +- +- Close +- Užverti +- +- +- Update Error! +- Atnaujinimo klaida! +- +- +- An error occurred in retrieving update information. +- Gaunant atnaujinimo informacijÄ…, įvyko klaida. +- +- +- Please try again later. +- Bandykite dar kartÄ… vÄ—liau. +- +- +- Software Update +- PrograminÄ—s įrangos atnaujinimas +- +- +- A new version of KeePassXC is available! +- Yra prieinama nauja KeePassXC versija! +- +- +- KeePassXC %1 is now available — you have %2. +- Dabar yra prieinama KeePassXC %1 — jÅ«s naudojate %2. +- +- +- Download it at keepassxc.org +- Atsisiųskite jÄ… iÅ¡ keepassxc.org +- +- +- You're up-to-date! +- Naudojate naujausiÄ… versijÄ…! +- +- +- KeePassXC %1 is currently the newest version available +- Å iuo metu KeePassXC %1 yra naujausia prieinama versija +- +- +- +- WelcomeWidget +- +- Start storing your passwords securely in a KeePassXC database +- PradÄ—kite saugiai laikyti savo slaptažodžius KeePassXC duomenų bazÄ—je +- +- +- Create new database +- Sukurti naujÄ… duomenų bazÄ™ +- +- +- Open existing database +- Atverti esamÄ… duomenų bazÄ™ +- +- +- Import from KeePass 1 +- Importuoti iÅ¡ KeePass +- +- +- Import from CSV +- Importuoti iÅ¡ CSV +- +- +- Recent databases +- Paskiausios duomenų bazÄ—s +- +- +- Welcome to KeePassXC %1 +- Sveiki atvykÄ™ į KeePassXC %1 +- +- +- Import from 1Password +- +- +- +- Open a recent database +- +- +- +- +- YubiKey +- +- %1 [%2] Configured Slot - %3 +- +- +- +- %1 [%2] Challenge Response - Slot %3 - %4 +- +- +- +- Press +- Paspausti +- +- +- Passive +- Pasyvus +- +- +- %1 Invalid slot specified - %2 +- +- +- +- The YubiKey interface has not been initialized. +- +- +- +- Hardware key is currently in use. +- +- +- +- Could not find hardware key with serial number %1. Please plug it in to continue. +- +- +- +- Hardware key timed out waiting for user interaction. +- +- +- +- A USB error ocurred when accessing the hardware key: %1 +- +- +- +- Failed to complete a challenge-response, the specific error was: %1 +- +- +- +- +- YubiKeyEditWidget +- +- Refresh +- Ä®kelti iÅ¡ naujo +- +- +- YubiKey Challenge-Response +- +- +- +- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- +- +- +- Refresh hardware tokens +- +- +- +- Hardware key slot selection +- +- +- +- Could not find any hardware keys! +- +- +- +- Selected hardware key slot does not support challenge-response! +- +- +- +- Detecting hardware keys… +- +- +- +- No hardware keys detected +- +- +- +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_nb.ts keepassxc-2.6.4-patched/share/translations/keepassx_nb.ts +--- keepassxc-2.6.4-orig/share/translations/keepassx_nb.ts 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/translations/keepassx_nb.ts 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7850 +0,0 @@ +- +- +- AboutDialog +- +- About KeePassXC +- Om KeePassXC +- +- +- About +- Om +- +- +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- Meld fra om feil pÃ¥: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- +- +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- KeePassXC er distribuert under vilkÃ¥rene i GNU General Public License (GPL) versjon 2 eller (etter eget valg) versjon 3. +- +- +- Contributors +- Bidragsytere +- +- +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Se Bidrag pÃ¥ GitHub</a> +- +- +- Debug Info +- Debuggingsinfo +- +- +- Include the following information whenever you report a bug: +- Hvis du vil rapportere en feil, inkluder følgende informasjon: +- +- +- Copy to clipboard +- Kopier til utklippstavle +- +- +- Project Maintainers: +- Prosjektets vedlikeholdere: +- +- +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- En spesiell takk fra KeePassXC-laget gÃ¥r til debfx, utvikler av programmet KeePassX. +- +- +- +- AgentSettingsWidget +- +- Use OpenSSH for Windows instead of Pageant +- Bruk OpenSSH for Windows i stedet for Pageant +- +- +- Enable SSH Agent integration +- +- +- +- SSH_AUTH_SOCK value +- +- +- +- SSH_AUTH_SOCK override +- +- +- +- (empty) +- +- +- +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- +- +- +- SSH Agent connection is working! +- +- +- +- +- ApplicationSettingsWidget +- +- Application Settings +- Applikasjonsinnstillinger +- +- +- General +- Generelt +- +- +- Security +- Sikkerhet +- +- +- Access error for config file %1 +- Feil ved tilgang til konfigurasjonsfilen %1 +- +- +- Icon only +- Kun ikon +- +- +- Text only +- Kun tekst +- +- +- Text beside icon +- Tekst ved siden av ikon +- +- +- Text under icon +- Tekst under ikon +- +- +- Follow style +- Følg stil +- +- +- Reset Settings? +- Tilbakestill innstillinger? +- +- +- Are you sure you want to reset all general and security settings to default? +- Er du sikker pÃ¥ at du vil tilbakestille alle generelle og sikkerhetsinnstillinger til standard? +- +- +- Monochrome (light) +- +- +- +- Monochrome (dark) +- +- +- +- Colorful +- +- +- +- You must restart the application to set the new language. Would you like to restart now? +- +- +- +- +- ApplicationSettingsWidgetGeneral +- +- Basic Settings +- Grunnleggende +- +- +- Startup +- Oppstart +- +- +- Start only a single instance of KeePassXC +- Kjør kun én instans av KeePassXC om gangen +- +- +- Minimize window at application startup +- Minimer ved programstart +- +- +- File Management +- FilhÃ¥ndtering +- +- +- Backup database file before saving +- Sikkerhetskopier database-filen før lagring +- +- +- Automatically save after every change +- Lagre automatisk etter hver endring +- +- +- Automatically reload the database when modified externally +- Last databasen automatisk pÃ¥ nytt hvis den blir endret eksternt +- +- +- Entry Management +- OppføringshÃ¥ndtering +- +- +- Use group icon on entry creation +- Bruk gruppeikon ved ny oppføring +- +- +- Minimize instead of app exit +- Minimer istedenfor app-avslutning +- +- +- Show a system tray icon +- Vis et ikon i systemkurven +- +- +- Hide window to system tray when minimized +- Skjul vindu til systemkurven nÃ¥r minimert +- +- +- Auto-Type +- Autoskriv +- +- +- Use entry title to match windows for global Auto-Type +- Bruk tittel i oppføringa for Ã¥ matche vindu ved global autoskriv +- +- +- Use entry URL to match windows for global Auto-Type +- Bruk URL i oppføringa for Ã¥ matche vindu ved global autoskriv +- +- +- Always ask before performing Auto-Type +- Alltid spør før utførelse av autoskriv +- +- +- ms +- Milliseconds +- ms +- +- +- Movable toolbar +- Bevegelig verktøylinje +- +- +- Remember previously used databases +- Husk tidligere brukte databaser +- +- +- Load previously open databases on startup +- Last tidligere Ã¥pne databaser ved oppstart +- +- +- Remember database key files and security dongles +- Husk database nøkkelfiler og sikkerhetsdongler +- +- +- Check for updates at application startup once per week +- Se etter oppdateringer ved oppstart av applikasjonen en gang per uke +- +- +- Include beta releases when checking for updates +- Ta med betaversjoner nÃ¥r du ser etter oppdateringer +- +- +- Language: +- SprÃ¥k: +- +- +- (restart program to activate) +- (start programmet pÃ¥ nytt for Ã¥ aktivere) +- +- +- Minimize window after unlocking database +- Minimer vinduet etter at du har lÃ¥st opp database +- +- +- Minimize when opening a URL +- Minimer nÃ¥r du Ã¥pner en URL +- +- +- Hide window when copying to clipboard +- Skjul vindu nÃ¥r du kopierer til utklippstavle +- +- +- Minimize +- Minimer +- +- +- Drop to background +- Slipp til bakgrunnen +- +- +- Favicon download timeout: +- +- +- +- Website icon download timeout in seconds +- +- +- +- sec +- Seconds +- sek +- +- +- Toolbar button style +- +- +- +- Language selection +- Valg av sprÃ¥k +- +- +- Global auto-type shortcut +- +- +- +- Auto-type character typing delay milliseconds +- +- +- +- Auto-type start delay milliseconds +- +- +- +- Automatically launch KeePassXC at system startup +- +- +- +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- +- +- +- User Interface +- +- +- +- Toolbar button style: +- +- +- +- Use monospaced font for notes +- +- +- +- Tray icon type: +- +- +- +- Reset settings to default… +- +- +- +- Auto-Type typing delay: +- +- +- +- Global Auto-Type shortcut: +- +- +- +- Auto-Type start delay: +- +- +- +- Automatically save when locking database +- +- +- +- Automatically save non-data changes when locking database +- +- +- +- Tray icon type +- +- +- +- +- ApplicationSettingsWidgetSecurity +- +- Timeouts +- Tidsavbrudd +- +- +- Clear clipboard after +- Slett utklippstavlen etter +- +- +- sec +- Seconds +- sek +- +- +- Lock databases after inactivity of +- LÃ¥s databaser etter inaktivitet i +- +- +- min +- min +- +- +- Forget TouchID after inactivity of +- Glem berørings-id etter inaktivitet i +- +- +- Convenience +- Bekvemmelighet +- +- +- Lock databases when session is locked or lid is closed +- LÃ¥s databaser nÃ¥r økta lÃ¥ses eller lokket lukkes +- +- +- Forget TouchID when session is locked or lid is closed +- Glem berørings-id nÃ¥r økten er lÃ¥st eller lokket er lukket +- +- +- Lock databases after minimizing the window +- LÃ¥s databaser nÃ¥r vinduet minimeres +- +- +- Re-lock previously locked database after performing Auto-Type +- LÃ¥s tidligere lÃ¥st database etter utført autoskriv +- +- +- Hide passwords in the entry preview panel +- Skjul passord i oppføring panelet +- +- +- Hide entry notes by default +- Skjul notater i oppføringa som standard +- +- +- Privacy +- Personvern +- +- +- Use DuckDuckGo service to download website icons +- Bruk DuckDuckGo-tjenesten for Ã¥ laste ned nettstedikoner +- +- +- Clipboard clear seconds +- +- +- +- Touch ID inactivity reset +- +- +- +- Database lock timeout seconds +- +- +- +- min +- Minutes +- min +- +- +- Clear search query after +- Tøm søket etter +- +- +- Require password repeat when it is visible +- +- +- +- Hide passwords when editing them +- +- +- +- Use placeholder for empty password fields +- +- +- +- +- AutoType +- +- Couldn't find an entry that matches the window title: +- Kunne ikke finne en oppføring som samsvarer med vindutittelen: +- +- +- Auto-Type - KeePassXC +- Autoskriv - KeePassXC +- +- +- Auto-Type +- Autoskriv +- +- +- The Syntax of your Auto-Type statement is incorrect! +- Syntaksen til autoskrivuttrykket er galt. +- +- +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- Denne autoskrivkommandoen inneholder en lang forsinkelse. Vil du fortsette? +- +- +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- Denne autoskriv-kommandoen inneholder svært sene tastetrykk. Vil du virkelig fortsette? +- +- +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- Denne autoskriv-kommandoen inneholder argument som gjentas svært hyppig. Vil du virkelig fortsette? +- +- +- Permission Required +- Tillatelse kreves +- +- +- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. +- +- +- +- +- AutoTypeAssociationsModel +- +- Window +- Vindu +- +- +- Sequence +- Sekvens +- +- +- Default sequence +- Standard rekkefølge +- +- +- +- AutoTypeMatchModel +- +- Group +- Gruppe +- +- +- Title +- Tittel +- +- +- Username +- Brukernavn +- +- +- Sequence +- Rekkefølge +- +- +- +- AutoTypeMatchView +- +- Copy &username +- Kopier &brukernavn +- +- +- Copy &password +- Kopier &passord +- +- +- +- AutoTypePlatformMac +- +- Permission Required +- Tillatelse kreves +- +- +- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. +- +- +- +- +- AutoTypeSelectDialog +- +- Auto-Type - KeePassXC +- Autoskriv - KeePassXC +- +- +- Select entry to Auto-Type: +- Velg oppføring som skal autoskrives: +- +- +- Search... +- Søk... +- +- +- +- BrowserAccessControlDialog +- +- KeePassXC - Browser Access Request +- +- +- +- %1 is requesting access to the following entries: +- +- +- +- Remember access to checked entries +- +- +- +- Remember +- +- +- +- Allow access to entries +- +- +- +- Allow Selected +- +- +- +- Deny All +- +- +- +- Disable for this site +- +- +- +- +- BrowserEntrySaveDialog +- +- KeePassXC-Browser Save Entry +- +- +- +- Ok +- Ok +- +- +- Cancel +- Avbryt +- +- +- You have multiple databases open. +-Please select the correct database for saving credentials. +- Du har flere databaser Ã¥pne. +-Vennligst velge riktig database for Ã¥ lagre identifikasjon. +- +- +- +- BrowserService +- +- KeePassXC: New key association request +- KeePassXC: Tilknytningsforespørsel for ny nøkkel. +- +- +- Save and allow access +- Lagre og tillat aksess +- +- +- KeePassXC: Overwrite existing key? +- KeePassXC: Overskrive eksisterende nøkkel? +- +- +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- En delt krypteringsnøkkel med navn "%1" eksisterer fra før. +-Vil du overskrive den? +- +- +- KeePassXC: Update Entry +- KeePassXC: Oppdater oppføring. +- +- +- Do you want to update the information in %1 - %2? +- Vil du oppdatere informasjonen i %1 - %2? +- +- +- Abort +- Avbryt +- +- +- Converting attributes to custom data… +- +- +- +- KeePassXC: Converted KeePassHTTP attributes +- +- +- +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- +- +- +- Successfully moved %n keys to custom data. +- +- +- +- KeePassXC: No entry with KeePassHTTP attributes found! +- KeePassXC: Ingen oppføring med KeePassHTTP-attributter funnet! +- +- +- The active database does not contain an entry with KeePassHTTP attributes. +- Den aktiv database inneholder ikke en oppføring med KeePassHTTP-attributter. +- +- +- KeePassXC: Legacy browser integration settings detected +- KeePassXC: Gammel nettleser integrasjon innstillinger oppdaget +- +- +- KeePassXC: Create a new group +- KeePassXC: Lag en ny gruppe +- +- +- A request for creating a new group "%1" has been received. +-Do you want to create this group? +- +- +- +- +- Your KeePassXC-Browser settings need to be moved into the database settings. +-This is necessary to maintain your current browser connections. +-Would you like to migrate your existing settings now? +- +- +- +- Don't show this warning again +- Ikke vis denne advarselen igjen +- +- +- You have received an association request for the following database: +-%1 +- +-Give the connection a unique name or ID, for example: +-chrome-laptop. +- +- +- +- +- BrowserSettingsWidget +- +- Dialog +- Vindu +- +- +- This is required for accessing your databases with KeePassXC-Browser +- Dette er nødvendig for Ã¥ fÃ¥ tilgang til dine databaser med KeePassXC-Browser +- +- +- Enable browser integration +- Aktiver nettleser integrasjon +- +- +- General +- Generelt +- +- +- Browsers installed as snaps are currently not supported. +- +- +- +- Enable integration for these browsers: +- Bruk tillegget i disse nettleserne: +- +- +- Vivaldi +- +- +- +- &Edge +- +- +- +- Firefox +- +- +- +- Tor Browser +- +- +- +- Brave +- +- +- +- Google Chrome +- +- +- +- Chromium +- +- +- +- Show a notification when credentials are requested +- Credentials mean login data requested via browser extension +- +- +- +- Request to unlock the database if it is locked +- +- +- +- Only entries with the same scheme (http://, https://, ...) are returned. +- Bare oppføringer med samme protokoll (http://, https://, ...) er returnert. +- +- +- Match URL scheme (e.g., https://...) +- +- +- +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- Returnerer bare beste matcher for en spesifikk URL i stedet for alle oppføringer i hele domenet. +- +- +- Return only best-matching credentials +- +- +- +- Returns expired credentials. String [expired] is added to the title. +- +- +- +- Allow returning expired credentials +- +- +- +- All databases connected to the extension will return matching credentials. +- +- +- +- Search in all opened databases for matching credentials +- Credentials mean login data requested via browser extension +- +- +- +- Sort matching credentials by title +- Credentials mean login data requested via browser extension +- +- +- +- Sort matching credentials by username +- Credentials mean login data requested via browser extension +- +- +- +- Advanced +- Avansert +- +- +- Never ask before accessing credentials +- Credentials mean login data requested via browser extension +- +- +- +- Never ask before updating credentials +- Credentials mean login data requested via browser extension +- +- +- +- Do not ask permission for HTTP Basic Auth +- An extra HTTP Basic Auth setting +- +- +- +- Automatically creating or updating string fields is not supported. +- Automatisk registrering eller endring av tekstfelt er ikke støttet. +- +- +- Return advanced string fields which start with "KPH: " +- +- +- +- Don't display the popup suggesting migration of legacy KeePassHTTP settings. +- +- +- +- Do not prompt for KeePassHTTP settings migration. +- +- +- +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- Oppdaterer automatisk KeePassXC eller sti til binær keepassxc-proxy til lokale meldings-skript ved oppstart. +- +- +- Update native messaging manifest files at startup +- +- +- +- Use a custom proxy location if you installed a proxy manually. +- Oppgi en selvvalgt mellomtjener dersom du installerte mellomtjeneren manuelt. +- +- +- Use a custom proxy location: +- Meant is the proxy for KeePassXC-Browser +- +- +- +- Custom proxy location field +- +- +- +- Browser for custom proxy file +- +- +- +- Browse... +- Button for opening file dialog +- Bla gjennom... +- +- +- Use a custom browser configuration location: +- +- +- +- Browser type: +- +- +- +- Toolbar button style +- +- +- +- Config Location: +- +- +- +- Custom browser location field +- +- +- +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- +- +- +- Browse for custom browser path +- +- +- +- Custom extension ID: +- +- +- +- Custom extension ID +- +- +- +- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 +- +- +- +- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 +- +- +- +- Please see special instructions for browser extension use below +- Vennligst se spesielle instruksjoner for bruk av nettleserutvidelse nedenfor +- +- +- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. +- +- +- +- <b>Warning:</b> The following options can be dangerous! +- <b>Advarsel:</b> Disse innstillingene kan medføre risiko. +- +- +- Executable Files +- Kjørbare filer +- +- +- All Files +- Alle Filer +- +- +- Select custom proxy location +- Oppgi en selvvalgt mellomtjerneradresse +- +- +- Select native messaging host folder location +- +- +- +- +- CloneDialog +- +- Clone Options +- Klonevalg +- +- +- Append ' - Clone' to title +- Tilføy ' - Klone' til tittel +- +- +- Replace username and password with references +- Bytt ut brukernavn og passord med referansene +- +- +- Copy history +- Kopier historie +- +- +- +- CsvImportWidget +- +- Import CSV fields +- Importer CSV-felter +- +- +- filename +- filnavn +- +- +- size, rows, columns +- størrelse, rader, kolonner +- +- +- Encoding +- Koding +- +- +- Codec +- Kodek +- +- +- Text is qualified by +- Tekst er markert ved +- +- +- Fields are separated by +- Felt er separert av +- +- +- Comments start with +- Kommentarer starter med +- +- +- Consider '\' an escape character +- Betrakt '\' som en escape-sekvens +- +- +- Preview +- ForhÃ¥ndsvis +- +- +- Imported from CSV file +- Importert fra CSV-fil +- +- +- Original data: +- Originale data: +- +- +- Error +- Feil +- +- +- Error(s) detected in CSV file! +- Feil(er) oppdaget i CSV-fil! +- +- +- [%n more message(s) skipped] +- +- +- +- CSV import: writer has errors: +-%1 +- +- +- +- Text qualification +- +- +- +- Field separation +- +- +- +- Number of header lines to discard +- +- +- +- CSV import preview +- +- +- +- Column Association +- +- +- +- Last Modified +- Sist endra +- +- +- Password +- Passord +- +- +- Created +- Opprettet +- +- +- Notes +- Notater +- +- +- Title +- Tittel +- +- +- Group +- Gruppe +- +- +- URL +- Adresse +- +- +- Username +- Brukernavn +- +- +- Header lines skipped +- +- +- +- First line has field names +- +- +- +- Not Present +- +- +- +- Column %1 +- +- +- +- TOTP +- TOTP +- +- +- Icon +- Ikon +- +- +- +- CsvParserModel +- +- %n column(s) +- %n kolonne(r)%n kolonne(r) +- +- +- %1, %2, %3 +- file info: bytes, rows, columns +- %1, %2, %3 +- +- +- %n byte(s) +- +- +- +- %n row(s) +- +- +- +- +- Database +- +- File %1 does not exist. +- Filen %1 eksisterer ikke. +- +- +- Unable to open file %1. +- Kan ikke Ã¥pne filen %1. +- +- +- Error while reading the database: %1 +- Feil under lesing av database: %1 +- +- +- File cannot be written as it is opened in read-only mode. +- Filen kan ikke skrives da den Ã¥pnes i skrivebeskyttet modus. +- +- +- Key not transformed. This is a bug, please report it to the developers! +- Nøkkel ikke transformert. Dette er en feil, vennligst rapporter det til utviklerne! +- +- +- %1 +-Backup database located at %2 +- +- +- +- Could not save, database does not point to a valid file. +- +- +- +- Could not save, database file is read-only. +- +- +- +- Database file has unmerged changes. +- +- +- +- Recycle Bin +- Papirkurv +- +- +- Passwords +- Root group name +- Passord +- +- +- Database save is already in progress. +- +- +- +- Could not save, database has not been initialized! +- +- +- +- +- DatabaseOpenDialog +- +- Unlock Database - KeePassXC +- LÃ¥s opp database - KeePassXC +- +- +- +- DatabaseOpenWidget +- +- Key File: +- Nøkkelfil: +- +- +- Refresh +- Last pÃ¥ ny +- +- +- Don't show this warning again +- Ikke vis denne advarselen igjen +- +- +- All files +- Alle filer +- +- +- Key files +- Nøkkelfiler +- +- +- Select key file +- Velg nøkkelfil +- +- +- Failed to open key file: %1 +- Kunne ikke Ã¥pne nøkkelfil: %1 +- +- +- Unlock KeePassXC Database +- LÃ¥se opp KeePassXC Database +- +- +- Enter Password: +- Oppgi passord: +- +- +- Password field +- Passord felt +- +- +- Hardware key slot selection +- +- +- +- Browse for key file +- +- +- +- Browse... +- Bla gjennom... +- +- +- Refresh hardware tokens +- +- +- +- Hardware Key: +- Maskinvarenøkkel: +- +- +- Hardware key help +- +- +- +- TouchID for Quick Unlock +- +- +- +- Unlock failed and no password given +- +- +- +- Unlocking the database failed and you did not enter a password. +-Do you want to retry with an "empty" password instead? +- +-To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. +- +- +- +- Retry with empty password +- Prøv igjen med tomt passord +- +- +- Enter Additional Credentials (if any): +- +- +- +- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +-<p>Click for more information...</p> +- +- +- +- Key file help +- +- +- +- ? +- ? +- +- +- Cannot use database file as key file +- Kan ikke bruke database fil som nøkkelfil +- +- +- You cannot use your database file as a key file. +-If you do not have a key file, please leave the field empty. +- +- +- +- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> +- +- +- +- Key file to unlock the database +- +- +- +- Please touch the button on your YubiKey! +- Vennligst trykk pÃ¥ knappen pÃ¥ din YubiKey! +- +- +- Detecting hardware keys… +- +- +- +- No hardware keys detected +- +- +- +- Select hardware key… +- +- +- +- Old key file format +- +- +- +- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> +- +- +- +- +- DatabaseSettingWidgetMetaData +- +- Passwords +- Passord +- +- +- +- DatabaseSettingsDialog +- +- Advanced Settings +- Avanserte Innstillinger +- +- +- General +- Generelt +- +- +- Security +- Sikkerhet +- +- +- Encryption Settings +- Krypteringsinnstillinger +- +- +- Browser Integration +- Nettlesertillegg +- +- +- Database Credentials +- +- +- +- +- DatabaseSettingsWidgetBrowser +- +- KeePassXC-Browser settings +- KeePassXC nettleser-innstillinger +- +- +- Stored keys +- Lagrede nøkler +- +- +- Remove +- Fjern +- +- +- Delete the selected key? +- Slette den valgte nøkkelen? +- +- +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- +- +- +- Key +- Nøkkel +- +- +- Value +- Verdi +- +- +- Enable Browser Integration to access these settings. +- Aktiver nettleser integrasjon for Ã¥ fÃ¥ tilgang til disse innstillingene. +- +- +- Disconnect all browsers +- Koble fra alle nettlesere +- +- +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- +- +- +- KeePassXC: No keys found +- KeePassXC: Ingen nøkler funnet +- +- +- No shared encryption keys found in KeePassXC settings. +- Ingen delte kryptering nøkkel funnet i KeePassXC-innstillingene. +- +- +- KeePassXC: Removed keys from database +- KeePassXC: Fjernet nøkler fra database +- +- +- Successfully removed %n encryption key(s) from KeePassXC settings. +- +- +- +- Forget all site-specific settings on entries +- Glem alle side-spesifikke innstillinger og oppføringer +- +- +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- +- +- +- Removing stored permissions… +- Fjerner lagrede tillatelser... +- +- +- Abort +- Avbryt +- +- +- KeePassXC: Removed permissions +- KeePassXC: Fjernet tillatelser +- +- +- Successfully removed permissions from %n entry(s). +- +- +- +- KeePassXC: No entry with permissions found! +- KeePassXC: Ingen oppføring med tillatelser funnet! +- +- +- The active database does not contain an entry with permissions. +- Den aktive databasen inneholder ikke et oppsett med tillatelser. +- +- +- Move KeePassHTTP attributes to custom data +- +- +- +- Do you really want to move all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- +- +- +- Stored browser keys +- +- +- +- Remove selected key +- +- +- +- Move KeePassHTTP attributes to KeePassXC-Browser custom data +- +- +- +- Refresh database root group ID +- +- +- +- Created +- Opprettet +- +- +- Refresh database ID +- +- +- +- Do you really want refresh the database ID? +-This is only necessary if your database is a copy of another and the browser extension cannot connect. +- +- +- +- +- DatabaseSettingsWidgetDatabaseKey +- +- Add additional protection... +- Legg til ekstra beskyttelse +- +- +- No password set +- Passord ikke satt +- +- +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- ADVARSEL! Du har ikke angitt et passord. Ã… bruke en database uten passord frarÃ¥des sterkt! +- +-Er du sikker pÃ¥ at du vil fortsette uten passord? +- +- +- Continue without password +- Fortsett uten passord +- +- +- No encryption key added +- Ingen krypteringsnøkkel lagt til +- +- +- You must add at least one encryption key to secure your database! +- Du mÃ¥ legge til minst en krypteringsnøkkel for Ã¥ sikre databasen! +- +- +- Unknown error +- Ukjent feil +- +- +- Failed to change database credentials +- +- +- +- +- DatabaseSettingsWidgetEncryption +- +- Encryption Algorithm: +- Krypteringsalgoritme: +- +- +- AES: 256 Bit (default) +- AES: 256 Bit (standard) +- +- +- Twofish: 256 Bit +- Twofish: 256 Bit +- +- +- Key Derivation Function: +- Nøkkelavledningsfunksjon: +- +- +- Transform rounds: +- Transformasjonsrunder: +- +- +- Memory Usage: +- Minnebruk: +- +- +- Parallelism: +- Parallellitet: +- +- +- Decryption Time: +- Krypteringstid: +- +- +- ?? s +- ?? s +- +- +- Change +- Endring +- +- +- Higher values offer more protection, but opening the database will take longer. +- Høyere verdier gir mer beskyttelse, men Ã¥ Ã¥pne database vil ta lengre tid. +- +- +- Database format: +- Databaseformat: +- +- +- This is only important if you need to use your database with other programs. +- Dette er bare viktig hvis du trenger Ã¥ bruke database med andre programmer. +- +- +- KDBX 4.0 (recommended) +- KDBX 4.0 (anbefalt) +- +- +- KDBX 3.1 +- KDBX 3.1 +- +- +- unchanged +- Database decryption time is unchanged +- uendret +- +- +- Number of rounds too high +- Key transformation rounds +- Antall runder er for høyt +- +- +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or days (or even longer) to open! +- Du bruker et svært høyt antall nøkkeltransformasjons-runder med Argon2. +- +-Dersom du beholder dette antallet sÃ¥ vil det ta timer eller dager (og kanskje lengre) Ã¥ Ã¥pne databasen! +- +- +- Understood, keep number +- ForstÃ¥tt; behold antallet +- +- +- Cancel +- Avbryt +- +- +- Number of rounds too low +- Key transformation rounds +- Antall runder er for lavt +- +- +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database may be too easy to crack! +- Du bruker et svært lavt antall nøkkeltransformasjons-runder med AES-KDF. +- +-Dersom du beholder dette antallet sÃ¥ kan databasen være for lett Ã¥ knekke! +- +- +- KDF unchanged +- KDF uendret +- +- +- Failed to transform key with new KDF parameters; KDF unchanged. +- Kunne ikke omskape nøkkel med nye KDF-parametere; KDF uendret. +- +- +- MiB +- Abbreviation for Mebibytes (KDF settings) +- MiBMiB +- +- +- thread(s) +- Threads for parallel execution (KDF settings) +- trÃ¥d(er)trÃ¥d(er) +- +- +- Change existing decryption time +- +- +- +- Decryption time in seconds +- Dekrypteringstid i sekunder +- +- +- Database format +- +- +- +- Encryption algorithm +- Kryptering algoritme +- +- +- Key derivation function +- +- +- +- Transform rounds +- +- +- +- Memory usage +- Minnebruk +- +- +- Parallelism +- +- +- +- ?? ms +- +- +- +- ? s +- +- +- +- +- DatabaseSettingsWidgetFdoSecrets +- +- Exposed Entries +- +- +- +- Don't expose this database +- +- +- +- Expose entries under this group: +- +- +- +- Enable Secret Service to access these settings. +- +- +- +- +- DatabaseSettingsWidgetGeneral +- +- Database Meta Data +- Database metadata +- +- +- Database name: +- Databasenavn: +- +- +- Database description: +- Databasens beskrivelse: +- +- +- Default username: +- Standard brukernavn: +- +- +- History Settings +- Historikk-innstillinger +- +- +- Max. history items: +- Maks. historikk-antall: +- +- +- Max. history size: +- Maks. historikk-størrelse: +- +- +- MiB +- MiB +- +- +- Use recycle bin +- Bruk søppelbøtte +- +- +- Additional Database Settings +- Ekstra database-innstillinger +- +- +- Database name field +- +- +- +- Database description field +- +- +- +- Default username field +- +- +- +- Maximum number of history items per entry +- +- +- +- Maximum size of history per entry +- +- +- +- Delete Recycle Bin +- Slett søppelbøtte +- +- +- Do you want to delete the current recycle bin and all its contents? +-This action is not reversible. +- +- +- +- (old) +- (gammel) +- +- +- Enable compression (recommended) +- +- +- +- +- DatabaseSettingsWidgetKeeShare +- +- Sharing +- Deling +- +- +- Breadcrumb +- Brødsmule +- +- +- Type +- Type +- +- +- Path +- Sti +- +- +- Last Signer +- Siste Signatur +- +- +- Certificates +- Sertifikater +- +- +- > +- Breadcrumb separator +- > +- +- +- +- DatabaseSettingsWidgetMetaDataSimple +- +- Database Name: +- Databasenavn: +- +- +- Description: +- Beskrivelse: +- +- +- Database name field +- +- +- +- Database description field +- +- +- +- +- DatabaseTabWidget +- +- KeePass 2 Database +- KeePass2-database +- +- +- All files +- Alle filer +- +- +- Open database +- Ã…pne database +- +- +- CSV file +- CSV fil +- +- +- Merge database +- SlÃ¥ sammen database +- +- +- Open KeePass 1 database +- Ã…pne KeePass1-database +- +- +- KeePass 1 database +- KeePass1-database +- +- +- Export database to CSV file +- Eksporter database til CSV fil +- +- +- Writing the CSV file failed. +- Skriving av CSV fil feilet. +- +- +- Database creation error +- Database opprettelsesfeil +- +- +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- Den opprettede database har ingen nøkkel eller KDF, og nekter Ã¥ lagre den. +-Dette er definitivt en feil, rapporter det til utviklerne. +- +- +- Select CSV file +- Velg CSV fil +- +- +- New Database +- Ny database +- +- +- %1 [New Database] +- Database tab name modifier +- %1 [Ny Database] +- +- +- %1 [Locked] +- Database tab name modifier +- %1 [LÃ¥st] +- +- +- %1 [Read-only] +- Database tab name modifier +- %1 [Skrivebeskyttet] +- +- +- Failed to open %1. It either does not exist or is not accessible. +- Kunne ikke Ã¥pne %1. Enten eksisterer den ikke eller er ikke tilgjengelig. +- +- +- Export database to HTML file +- Eksporter database til HTML-fil +- +- +- HTML file +- HTML-fil +- +- +- Writing the HTML file failed. +- +- +- +- Export Confirmation +- +- +- +- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? +- +- +- +- Open OPVault +- +- +- +- +- DatabaseWidget +- +- Searching... +- Søker... +- +- +- Do you really want to delete the entry "%1" for good? +- Vil du virkelig slette oppføringen "%1" for godt? +- +- +- Do you really want to move entry "%1" to the recycle bin? +- Ønsker du virkelig Ã¥ flytte oppføring "%1" til søppelkurven? +- +- +- Do you really want to move %n entry(s) to the recycle bin? +- Ønsker du virkelig Ã¥ flytte %n oppføring(er) til søppelkurven?Ønsker du virkelig Ã¥ flytte %n oppføring(er) til søppelkurven? +- +- +- Execute command? +- Utfør kommando? +- +- +- Do you really want to execute the following command?<br><br>%1<br> +- Ønsker du virkelig Ã¥ utføre følgende kommando?<br><br>%1<br> +- +- +- Remember my choice +- Husk mitt valg +- +- +- Do you really want to delete the group "%1" for good? +- Ønsker du virkelig Ã¥ slette gruppen "%1" for godt? +- +- +- No current database. +- Ingen nÃ¥værende database. +- +- +- No source database, nothing to do. +- Ingen kilde-database, ingenting Ã¥ gjøre. +- +- +- Search Results (%1) +- Søkeresultater (%1) +- +- +- No Results +- Ingen resultater +- +- +- File has changed +- Fil er endret +- +- +- The database file has changed. Do you want to load the changes? +- Databasen er endret. Ønsker du Ã¥ laste inn endringene? +- +- +- Merge Request +- Forespørsel om sammenslÃ¥ing +- +- +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- Databasefila er endra og du har ulagra endringer. +-Vil du slÃ¥ sammen fila med endringene dine? +- +- +- Empty recycle bin? +- Tom papirkurv? +- +- +- Are you sure you want to permanently delete everything from your recycle bin? +- Er du sikker pÃ¥ at du ønsker Ã¥ slette alt i papirkurven permanent? +- +- +- Do you really want to delete %n entry(s) for good? +- Ønsker du virkelig Ã¥ slette %n oppføring(s) for godt (permanent)Ønsker du virkelig Ã¥ slette %n oppføring(s) for godt (permanent) +- +- +- Delete entry(s)? +- Vil du slette oppføring?Vil du slette oppføringer? +- +- +- Move entry(s) to recycle bin? +- +- +- +- Lock Database? +- LÃ¥se database? +- +- +- You are editing an entry. Discard changes and lock anyway? +- Du redigerer en oppføring. Kast endringer og lÃ¥se likevel? +- +- +- "%1" was modified. +-Save changes? +- "%1" er endet. +-Lagre endringer? +- +- +- Database was modified. +-Save changes? +- Database ble endret. +-Lagre endringer? +- +- +- Save changes? +- Lagre endringer? +- +- +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- +- +- +- Disable safe saves? +- Deaktivere sikker lagring? +- +- +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- KeePassXC har mislykkes i Ã¥ lagre databasen flere ganger. Dette er trolig forÃ¥rsaket av at synkroniserings-tjenester har lÃ¥st lagrings-filen. +-Deaktivere sikker lagring og prøve igjen? +- +- +- Passwords +- Passord +- +- +- Save database as +- Lagre database som +- +- +- KeePass 2 Database +- KeePass2-database +- +- +- Replace references to entry? +- Erstatte referanser til oppføring? +- +- +- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? +- +- +- +- Delete group +- Slett gruppe +- +- +- Move group to recycle bin? +- Flytt gruppe til søppelbøtte? +- +- +- Do you really want to move the group "%1" to the recycle bin? +- +- +- +- Successfully merged the database files. +- +- +- +- Database was not modified by merge operation. +- +- +- +- Shared group... +- Delt gruppe... +- +- +- Writing the database failed: %1 +- +- +- +- This database is opened in read-only mode. Autosave is disabled. +- +- +- +- Save database backup +- +- +- +- Could not find database file: %1 +- +- +- +- +- EditEntryWidget +- +- Entry +- Oppføring +- +- +- Advanced +- Avansert +- +- +- Icon +- Ikon +- +- +- Auto-Type +- Autoskriv +- +- +- Properties +- Egenskaper +- +- +- History +- Historie +- +- +- SSH Agent +- SSH-agent +- +- +- n/a +- i/a +- +- +- (encrypted) +- (kryptert) +- +- +- Select private key +- Velg privat nøkkel +- +- +- Entry history +- Oppførings-historikk +- +- +- Add entry +- Legg til oppføring +- +- +- Edit entry +- Rediger oppføring +- +- +- New attribute +- Ny attributt +- +- +- Are you sure you want to remove this attribute? +- Er du sikker pÃ¥ at du ønsker Ã¥ fjerne denne attributten? +- +- +- Tomorrow +- I morgen +- +- +- %n week(s) +- %n uke(r)%n uke(r) +- +- +- %n month(s) +- %n mÃ¥ned(er)%n mÃ¥ned(er) +- +- +- Entry updated successfully. +- Oppføring oppdatert. +- +- +- New attribute %1 +- +- +- +- %n year(s) +- +- +- +- Confirm Removal +- Bekreft fjerning +- +- +- Browser Integration +- Nettlesertillegg +- +- +- <empty URL> +- <empty URL> +- +- +- Are you sure you want to remove this URL? +- Er du sikker pÃ¥ at du vil fjerne denne URL-en? +- +- +- Reveal +- Vis +- +- +- Hide +- +- +- +- Unsaved Changes +- +- +- +- Would you like to save changes to this entry? +- +- +- +- [PROTECTED] Press Reveal to view or edit +- +- +- +- Invalid Entry +- +- +- +- An external merge operation has invalidated this entry. +-Unfortunately, any changes made have been lost. +- +- +- +- +- EditEntryWidgetAdvanced +- +- Additional attributes +- Ekstra attributter +- +- +- Add +- Legg til +- +- +- Remove +- Fjern +- +- +- Edit Name +- Rediger navn +- +- +- Protect +- Beskytt +- +- +- Reveal +- Vis +- +- +- Attachments +- Vedlegg +- +- +- Foreground Color: +- Forgrunnsfarge: +- +- +- Background Color: +- Bakgrunnsfarge: +- +- +- Attribute selection +- +- +- +- Attribute value +- +- +- +- Add a new attribute +- +- +- +- Remove selected attribute +- +- +- +- Edit attribute name +- +- +- +- Toggle attribute protection +- +- +- +- Show a protected attribute +- +- +- +- Foreground color selection +- +- +- +- Background color selection +- +- +- +- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> +- +- +- +- Exclude from database reports +- +- +- +- +- EditEntryWidgetAutoType +- +- Enable Auto-Type for this entry +- Aktiver autoskriv for denne oppføringa +- +- +- Window Associations +- Vindustilknytninger +- +- +- + +- + +- +- +- - +- - +- +- +- Window title: +- Vindustittel: +- +- +- Use a specific sequence for this association: +- Bruk en spesiell sekvens for denne tilknytningen: +- +- +- Custom Auto-Type sequence +- +- +- +- Open Auto-Type help webpage +- +- +- +- Existing window associations +- +- +- +- Add new window association +- +- +- +- Remove selected window association +- +- +- +- You can use an asterisk (*) to match everything +- +- +- +- Set the window association title +- +- +- +- You can use an asterisk to match everything +- +- +- +- Custom Auto-Type sequence for this window +- +- +- +- Inherit default Auto-Type sequence from the group +- +- +- +- Use custom Auto-Type sequence: +- +- +- +- +- EditEntryWidgetBrowser +- +- These settings affect to the entry's behaviour with the browser extension. +- +- +- +- General +- Generelt +- +- +- Skip Auto-Submit for this entry +- +- +- +- Hide this entry from the browser extension +- +- +- +- Additional URL's +- +- +- +- Add +- Legg til +- +- +- Remove +- Fjern +- +- +- Edit +- Endring +- +- +- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. +- +- +- +- Use this entry only with HTTP Basic Auth +- +- +- +- +- EditEntryWidgetHistory +- +- Show +- Vis +- +- +- Restore +- Gjenopprett +- +- +- Delete +- Slett +- +- +- Delete all +- Slett alt +- +- +- Entry history selection +- +- +- +- Show entry at selected history state +- +- +- +- Restore entry to selected history state +- +- +- +- Delete selected history state +- +- +- +- Delete all history +- +- +- +- +- EditEntryWidgetMain +- +- URL: +- URL: +- +- +- Password: +- Passord: +- +- +- Title: +- Tittel: +- +- +- Presets +- Hurtigvalg +- +- +- Toggle the checkbox to reveal the notes section. +- Veksle avkrysningsboksen for Ã¥ vise notatdelen. +- +- +- Username: +- Brukernavn: +- +- +- Url field +- +- +- +- Download favicon for URL +- +- +- +- Password field +- Passord felt +- +- +- Toggle notes visible +- +- +- +- Expiration field +- +- +- +- Expiration Presets +- +- +- +- Expiration presets +- +- +- +- Notes field +- +- +- +- Title field +- +- +- +- Username field +- +- +- +- Toggle expiration +- +- +- +- Notes: +- +- +- +- https://example.com +- +- +- +- Expires: +- +- +- +- Edit Entry +- +- +- +- +- EditEntryWidgetSSHAgent +- +- Form +- Skjema +- +- +- Remove key from agent after +- Fjern nøkkel fra agent etter +- +- +- seconds +- sekunder +- +- +- Fingerprint +- Fingeravtrykk +- +- +- Remove key from agent when database is closed/locked +- Fjern nøkkel fra agent nÃ¥r database er lukket/lÃ¥st +- +- +- Public key +- Offentlig nøkkel +- +- +- Add key to agent when database is opened/unlocked +- Legg nøkkel til agent nÃ¥r database er Ã¥pnet/ulÃ¥st +- +- +- Comment +- Kommentar +- +- +- Decrypt +- Dekrypter +- +- +- n/a +- i/a +- +- +- Copy to clipboard +- Kopier til utklippstavle +- +- +- Private key +- Privat nøkkel +- +- +- External file +- Ekstern fil +- +- +- Browse... +- Button for opening file dialog +- Bla gjennom... +- +- +- Attachment +- Vedlegg +- +- +- Add to agent +- Legg til til agent +- +- +- Remove from agent +- Fjern fra agent +- +- +- Require user confirmation when this key is used +- Krev brukerbekreftelse nÃ¥r denne nøkkelen blir brukt +- +- +- Remove key from agent after specified seconds +- +- +- +- Browser for key file +- +- +- +- External key file +- +- +- +- Select attachment file +- +- +- +- +- EditGroupWidget +- +- Group +- Gruppe +- +- +- Icon +- Ikon +- +- +- Properties +- Egenskaper +- +- +- Add group +- Lag ny gruppe +- +- +- Edit group +- Rediger gruppe +- +- +- Enable +- Aktiver +- +- +- Disable +- Deaktiver +- +- +- Inherit from parent group (%1) +- Arv fra foreldre-gruppe (%1) +- +- +- Entry has unsaved changes +- +- +- +- +- EditGroupWidgetKeeShare +- +- Type: +- Type: +- +- +- Path: +- Sti: +- +- +- Password: +- Passord: +- +- +- Inactive +- Inaktiv +- +- +- KeeShare unsigned container +- +- +- +- KeeShare signed container +- +- +- +- Select import source +- Velg kilde for importering +- +- +- Select export target +- Velg eksporteringsmÃ¥l +- +- +- Select import/export file +- +- +- +- Clear +- Tøm +- +- +- Import +- Importer +- +- +- Export +- Eksporter +- +- +- Synchronize +- +- +- +- Your KeePassXC version does not support sharing this container type. +-Supported extensions are: %1. +- +- +- +- %1 is already being exported by this database. +- +- +- +- %1 is already being imported by this database. +- +- +- +- %1 is being imported and exported by different groups in this database. +- +- +- +- KeeShare is currently disabled. You can enable import/export in the application settings. +- KeeShare is a proper noun +- +- +- +- Database export is currently disabled by application settings. +- +- +- +- Database import is currently disabled by application settings. +- +- +- +- Sharing mode field +- +- +- +- Path to share file field +- +- +- +- Password field +- Passord felt +- +- +- Clear fields +- +- +- +- Browse for share file +- +- +- +- Browse... +- Bla gjennom... +- +- +- +- EditGroupWidgetMain +- +- Name field +- +- +- +- Notes field +- +- +- +- Toggle expiration +- +- +- +- Auto-Type toggle for this and sub groups +- +- +- +- Expiration field +- +- +- +- Search toggle for this and sub groups +- +- +- +- Default auto-type sequence field +- +- +- +- Expires: +- +- +- +- Use default Auto-Type sequence of parent group +- +- +- +- Auto-Type: +- +- +- +- Search: +- +- +- +- Notes: +- +- +- +- Name: +- +- +- +- Set default Auto-Type sequence +- +- +- +- Edit Group +- +- +- +- +- EditWidgetIcons +- +- Add custom icon +- Legg til selvvalgt ikon +- +- +- Delete custom icon +- Slett selvvalgt ikon +- +- +- Download favicon +- Last ned ikoner +- +- +- Unable to fetch favicon. +- Kan ikke hente favorittikon. +- +- +- Images +- Bilder +- +- +- All files +- Alle filer +- +- +- Confirm Delete +- Bekreft sletting +- +- +- Select Image(s) +- Velg Bilde(-r) +- +- +- Successfully loaded %1 of %n icon(s) +- +- +- +- No icons were loaded +- Ingen ikoner ble lastet +- +- +- %n icon(s) already exist in the database +- +- +- +- The following icon(s) failed: +- +- +- +- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? +- +- +- +- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security +- Du kan aktivere DuckDuckGo-ikonetjenesten under Verktøy -> Innstillinger -> Sikkerhet +- +- +- Download favicon for URL +- +- +- +- Apply selected icon to subgroups and entries +- +- +- +- Also apply to child groups +- +- +- +- Also apply to child entries +- +- +- +- Also apply to all children +- +- +- +- Existing icon selected. +- +- +- +- Use default icon +- +- +- +- Use custom icon +- +- +- +- Apply icon to... +- +- +- +- Apply to this group only +- +- +- +- +- EditWidgetProperties +- +- Created: +- Opprettet: +- +- +- Modified: +- Endret: +- +- +- Accessed: +- Ã…pnet: +- +- +- Uuid: +- Uuid: +- +- +- Plugin Data +- Data for programtillegg +- +- +- Remove +- Fjern +- +- +- Delete plugin data? +- Slett programtillegg-data? +- +- +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- Ønsker du virkelig Ã¥ slette de valgte programtillegg-dataene? +-Dette kan føre til feil for de berørte programtilleggene. +- +- +- Key +- Nøkkel +- +- +- Value +- Verdi +- +- +- Datetime created +- +- +- +- Datetime modified +- +- +- +- Datetime accessed +- +- +- +- Unique ID +- Unik ID +- +- +- Plugin data +- +- +- +- Remove selected plugin data +- +- +- +- +- Entry +- +- %1 - Clone +- +- +- +- +- EntryAttachmentsModel +- +- Name +- Navn +- +- +- Size +- Størrelse +- +- +- +- EntryAttachmentsWidget +- +- Form +- Skjema +- +- +- Add +- Legg til +- +- +- Remove +- Fjern +- +- +- Open +- Ã…pne +- +- +- Save +- Lagre +- +- +- Select files +- Velg filer +- +- +- Are you sure you want to remove %n attachment(s)? +- Er du sikker pÃ¥ at du vil fjerne %n vedlegg?Er du sikker pÃ¥ at du vil fjerne %n vedlegg? +- +- +- Save attachments +- Lagre vedlegg +- +- +- Unable to create directory: +-%1 +- Kan ikke opprette katalog: +-%1 +- +- +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- Er du sikker pÃ¥ at du ønsker Ã¥ overskrive eksisterende fil "%1" med vedlegget? +- +- +- Confirm overwrite +- Bekreft overskriving +- +- +- Unable to save attachments: +-%1 +- Kan ikke lagre vedlegg: +-%1 +- +- +- Unable to open attachment: +-%1 +- Kan ikke Ã¥pne vedlegg: +-%1 +- +- +- Unable to open attachments: +-%1 +- Kan ikke Ã¥pne vedlegg: +-%1 +- +- +- Confirm remove +- Bekreft fjerning +- +- +- Unable to open file(s): +-%1 +- +- +- +- Attachments +- Vedlegg +- +- +- Add new attachment +- +- +- +- Remove selected attachment +- +- +- +- Open selected attachment +- +- +- +- Save selected attachment to disk +- +- +- +- %1 is a big file (%2 MB). +-Your database may get very large and reduce performance. +- +-Are you sure to add this file? +- +- +- +- Confirm Attachment +- +- +- +- +- EntryAttributesModel +- +- Name +- Navn +- +- +- +- EntryHistoryModel +- +- Last modified +- Sist endret +- +- +- Title +- Tittel +- +- +- Username +- Brukernavn +- +- +- URL +- URL +- +- +- +- EntryModel +- +- Ref: +- Reference abbreviation +- Ref: +- +- +- Group +- Gruppe +- +- +- Title +- Tittel +- +- +- Username +- Brukernavn +- +- +- URL +- URL +- +- +- Never +- Aldri +- +- +- Password +- Passord +- +- +- Notes +- Notater +- +- +- Expires +- Utløper +- +- +- Created +- Opprettet +- +- +- Modified +- Endret +- +- +- Accessed +- Brukt +- +- +- Attachments +- Vedlegg +- +- +- Size +- Størrelse +- +- +- Group name +- +- +- +- Entry title +- +- +- +- Entry notes +- +- +- +- Entry expires at +- +- +- +- Creation date +- +- +- +- Last modification date +- +- +- +- Last access date +- +- +- +- Attached files +- +- +- +- Entry size +- +- +- +- Has attachments +- +- +- +- Has TOTP one-time password +- +- +- +- +- EntryPreviewWidget +- +- Close +- Lukk +- +- +- General +- Generelt +- +- +- Username +- Brukernavn +- +- +- Password +- Passord +- +- +- Expiration +- Utløp +- +- +- URL +- Adresse +- +- +- Attributes +- Attributter +- +- +- Attachments +- Vedlegg +- +- +- Notes +- Notater +- +- +- Autotype +- Autoskriv +- +- +- Window +- Vindu +- +- +- Sequence +- Rekkefølge +- +- +- Searching +- Søking +- +- +- Search +- Søk +- +- +- Clear +- Tøm +- +- +- Never +- Aldri +- +- +- [PROTECTED] +- [BESKYTTET] +- +- +- Enabled +- Aktivert +- +- +- Disabled +- Deaktivert +- +- +- Share +- Del +- +- +- Display current TOTP value +- +- +- +- Advanced +- Avansert +- +- +- Default Sequence +- +- +- +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- attributes line +- +- +- +- +- EntryURLModel +- +- Invalid URL +- +- +- +- +- EntryView +- +- Fit to window +- Tilpass til vindu +- +- +- Fit to contents +- Tilpass til innhold +- +- +- Reset to defaults +- Resette til standard +- +- +- Has attachments +- Entry attachment icon toggle +- +- +- +- Has TOTP +- Entry TOTP icon toggle +- +- +- +- +- FdoSecrets::Item +- +- Entry "%1" from database "%2" was used by %3 +- +- +- +- +- FdoSecrets::Service +- +- Failed to register DBus service at %1.<br/> +- +- +- +- %n Entry(s) was used by %1 +- %1 is the name of an application +- +- +- +- +- FdoSecrets::SettingsDatabaseModel +- +- File Name +- +- +- +- Group +- Gruppe +- +- +- Manage +- +- +- +- Unlock to show +- +- +- +- None +- Ingen +- +- +- +- FdoSecrets::SettingsSessionModel +- +- Application +- +- +- +- Manage +- +- +- +- +- FdoSecretsPlugin +- +- <b>Fdo Secret Service:</b> %1 +- +- +- +- Unknown +- Unknown PID +- Ukjent +- +- +- Unknown +- Unknown executable path +- Ukjent +- +- +- <i>PID: %1, Executable: %2</i> +- <i>PID: 1234, Executable: /path/to/exe</i> +- +- +- +- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. +- +- +- +- +- Group +- +- [empty] +- group has no children +- [tom] +- +- +- +- HibpDownloader +- +- Online password validation failed +- +- +- +- +- IconDownloaderDialog +- +- Download Favicons +- +- +- +- Cancel +- Avbryt +- +- +- Having trouble downloading icons? +-You can enable the DuckDuckGo website icon service in the security section of the application settings. +- +- +- +- Close +- Lukk +- +- +- URL +- Adresse +- +- +- Status +- Status +- +- +- Please wait, processing entry list... +- +- +- +- Downloading... +- Laster ned... +- +- +- Ok +- Ok +- +- +- Already Exists +- +- +- +- Download Failed +- +- +- +- Downloading favicons (%1/%2)... +- +- +- +- +- KMessageWidget +- +- &Close +- &Lukk +- +- +- Close message +- Lukk melding +- +- +- +- Kdbx3Reader +- +- missing database headers +- manglende database-headere +- +- +- Header doesn't match hash +- +- +- +- Invalid header id size +- Ugyldig: Header id size +- +- +- Invalid header field length +- Ugyldig: Header field length +- +- +- Invalid header data length +- Ugyldig: Header data length +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- +- +- +- Unable to calculate database key +- +- +- +- Unable to issue challenge-response: %1 +- +- +- +- +- Kdbx3Writer +- +- Unable to issue challenge-response: %1 +- +- +- +- Unable to calculate database key +- +- +- +- +- Kdbx4Reader +- +- missing database headers +- manglende database-headere +- +- +- Invalid header checksum size +- Ugyldig header-sjekksumstørrelse +- +- +- Header SHA256 mismatch +- Ikke samsvar med SHA256-header +- +- +- Unknown cipher +- Ukjent kryptering +- +- +- Invalid header id size +- Ugyldig: Header id size +- +- +- Invalid header field length +- Ugyldig: Header field length +- +- +- Invalid header data length +- Ugyldig: Header data length +- +- +- Failed to open buffer for KDF parameters in header +- Kunne ikke Ã¥pne buffer til KDF-parametere i header +- +- +- Unsupported key derivation function (KDF) or invalid parameters +- Ikke støttet funksjon for nøkkelavledning (KDF) eller ugyldige parametre +- +- +- Legacy header fields found in KDBX4 file. +- Eldre header-felt funnet i KDBX4-fil. +- +- +- Invalid inner header id size +- Ugyldig: Inner header id size +- +- +- Invalid inner header field length +- Ugyldig: Inner header field length +- +- +- Invalid inner header binary size +- Ugyldig: Inner header binary size +- +- +- Unsupported KeePass variant map version. +- Translation: variant map = data structure for storing meta data +- Ikke støttet KeePass variant-map versjon. +- +- +- Invalid variant map entry name length +- Translation: variant map = data structure for storing meta data +- Ugyldig: Variant map entry name length +- +- +- Invalid variant map entry name data +- Translation: variant map = data structure for storing meta data +- Ugyldig: Variant map entry name data +- +- +- Invalid variant map entry value length +- Translation: variant map = data structure for storing meta data +- Ugyldig: Variant map entry value length +- +- +- Invalid variant map entry value data +- Translation comment: variant map = data structure for storing meta data +- Ugyldig: Variant map entry value data +- +- +- Invalid variant map Bool entry value length +- Translation: variant map = data structure for storing meta data +- Ugyldig: Variant map Bool entry value length +- +- +- Invalid variant map Int32 entry value length +- Translation: variant map = data structure for storing meta data +- Ugyldig: Variant map Int32 entry value length +- +- +- Invalid variant map UInt32 entry value length +- Translation: variant map = data structure for storing meta data +- Ugyldig: Variant map UInt32 entry value length +- +- +- Invalid variant map Int64 entry value length +- Translation: variant map = data structure for storing meta data +- Ugyldig: Variant map Int64 entry value length +- +- +- Invalid variant map UInt64 entry value length +- Translation: variant map = data structure for storing meta data +- Ugyldig: Variant map UInt64 entry value length +- +- +- Invalid variant map entry type +- Translation: variant map = data structure for storing meta data +- Ugyldig: Variant map entry type +- +- +- Invalid variant map field type size +- Translation: variant map = data structure for storing meta data +- Ugyldig: Variant map field type size +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- +- +- +- (HMAC mismatch) +- +- +- +- Unable to calculate database key: %1 +- +- +- +- +- Kdbx4Writer +- +- Invalid symmetric cipher algorithm. +- Ugyldig: Symmetric cipher algorithm. +- +- +- Invalid symmetric cipher IV size. +- IV = Initialization Vector for symmetric cipher +- Ugyldig: Symmetric cipher IV size. +- +- +- Failed to serialize KDF parameters variant map +- Translation comment: variant map = data structure for storing meta data +- Kunne ikke serialisere KDF-parametre variant-map +- +- +- Unable to calculate database key: %1 +- +- +- +- +- KdbxReader +- +- Unsupported cipher +- Ikke støttet kryptering +- +- +- Invalid compression flags length +- Ugyldig: Compression flags length +- +- +- Unsupported compression algorithm +- Ikke støttet komprimeringsalgoritme +- +- +- Invalid master seed size +- Ugyldig: Master seed size +- +- +- Invalid transform seed size +- Ugyldig: Transform seed size +- +- +- Invalid transform rounds size +- Ugyldig: Transform rounds size +- +- +- Invalid start bytes size +- Ugyldig: Start bytes size +- +- +- Invalid random stream id size +- Ugyldig: Random stream id size +- +- +- Invalid inner random stream cipher +- Ugyldig: Inner random stream cipher +- +- +- Not a KeePass database. +- Ikke en KeePass-database. +- +- +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- Den valgte fila er en gammel KeePass1-database (.kdb). +- +-Du kan importere den ved Ã¥ velge «Database → Importer KeePass1-database...» +-Dette er en en-veis-migrasjon. Du kan ikke Ã¥pne den importerte databasen med den gamle versjonen KeePassX 0.4. +- +- +- Unsupported KeePass 2 database version. +- Ikke støttet KeePass2-databaseversjon. +- +- +- Invalid cipher uuid length: %1 (length=%2) +- +- +- +- Unable to parse UUID: %1 +- +- +- +- Failed to read database file. +- Kunne ikke lese database filen. +- +- +- +- KdbxXmlReader +- +- XML parsing failure: %1 +- XML-parsingfeil: %1 +- +- +- No root group +- Ingen root-gruppe +- +- +- Missing icon uuid or data +- Mangler: Icon uuid or data +- +- +- Missing custom data key or value +- Mangler: Custom data key or value +- +- +- Multiple group elements +- Flere gruppe-elementer +- +- +- Null group uuid +- Null: Group uuid +- +- +- Invalid group icon number +- Ugyldig: Group icon number +- +- +- Invalid EnableAutoType value +- Ugyldig: EnableAutoType value +- +- +- Invalid EnableSearching value +- Ugyldig: EnableSearching value +- +- +- No group uuid found +- Ikke funnet: group uuid +- +- +- Null DeleteObject uuid +- Null: DeleteObject uuid +- +- +- Missing DeletedObject uuid or time +- Mangler: DeletedObject uuid or time +- +- +- Null entry uuid +- Null: Entry uuid +- +- +- Invalid entry icon number +- Ugyldig: Entry icon number +- +- +- History element in history entry +- Historikkelement i historikkoppføring +- +- +- No entry uuid found +- Ikke funnet: Entry uuid +- +- +- History element with different uuid +- Historikkelement med forskjellig uuid +- +- +- Duplicate custom attribute found +- Duplikat: Custom attribute +- +- +- Entry string key or value missing +- Mangler: Entry string key or value +- +- +- Entry binary key or value missing +- Mangler: Entry binary key or value +- +- +- Auto-type association window or sequence missing +- Mangler: Auto-type association window or sequence +- +- +- Invalid bool value +- Ugyldig: Bool value +- +- +- Invalid date time value +- Ugyldig: date time value +- +- +- Invalid color value +- Ugyldig: Color value +- +- +- Invalid color rgb part +- Ugyldig: Color rgb part +- +- +- Invalid number value +- Ugyldig: Number value +- +- +- Invalid uuid value +- Ugyldig: Uuid value +- +- +- Unable to decompress binary +- Translator meant is a binary data inside an entry +- Kan ikke dekryptere binær +- +- +- XML error: +-%1 +-Line %2, column %3 +- +- +- +- +- KeeAgentSettings +- +- Invalid KeeAgent settings file structure. +- +- +- +- Private key is an attachment but no attachments provided. +- +- +- +- Private key is empty +- +- +- +- File too large to be a private key +- Fil for stor til Ã¥ være privat nøkkel +- +- +- Failed to open private key +- Kunne ikke Ã¥pne den private nøkkelen +- +- +- +- KeePass1OpenWidget +- +- Unable to open the database. +- Kan ikke Ã¥pne databasen. +- +- +- Import KeePass1 Database +- +- +- +- +- KeePass1Reader +- +- Unable to read keyfile. +- Kan ikke lese nøkkelfil. +- +- +- Not a KeePass database. +- Ikke en KeePass-database. +- +- +- Unsupported encryption algorithm. +- Ikke støttet krypteringsalgoritme. +- +- +- Unsupported KeePass database version. +- Ikke støttet KeePass databaseversion. +- +- +- Unable to read encryption IV +- IV = Initialization Vector for symmetric cipher +- Kan ikke lese krypterings-IV +- +- +- Invalid number of groups +- Ugyldig antall grupper +- +- +- Invalid number of entries +- Ugyldig antall oppføringer +- +- +- Invalid content hash size +- Ugyldig: Content hash size +- +- +- Invalid transform seed size +- Ugyldig: Transform seed size +- +- +- Invalid number of transform rounds +- Ugyldig: Number of transform rounds +- +- +- Unable to construct group tree +- Kan ikke opprette gruppe-tre +- +- +- Root +- Rot +- +- +- Key transformation failed +- Nøkkeltransformasjon feila +- +- +- Invalid group field type number +- Ugyldig: Group field type number +- +- +- Invalid group field size +- Ugyldig: Group field size +- +- +- Read group field data doesn't match size +- Lest gruppefeltdata matcher ikke størrelsen +- +- +- Incorrect group id field size +- Feil: Group id field size +- +- +- Incorrect group creation time field size +- Feil: Group creation time field size +- +- +- Incorrect group modification time field size +- Feil: Group modification time field size +- +- +- Incorrect group access time field size +- Feil: Group access time field size +- +- +- Incorrect group expiry time field size +- Feil: Group expiry time field size +- +- +- Incorrect group icon field size +- Feil: Group icon field size +- +- +- Incorrect group level field size +- Feil: Group level field size +- +- +- Invalid group field type +- Ugyldig: Group field type +- +- +- Missing group id or level +- Mangler: group id or level +- +- +- Missing entry field type number +- Mangler: Entry field type number +- +- +- Invalid entry field size +- Ugyldig: Entry field size +- +- +- Read entry field data doesn't match size +- Lest felt i oppføring matcher ikke størrelse +- +- +- Invalid entry uuid field size +- Ugyldig: Entry uuid field size +- +- +- Invalid entry group id field size +- Ugyldig: Entry group id field size +- +- +- Invalid entry icon field size +- Ugyldig: Entry icon field size +- +- +- Invalid entry creation time field size +- Ugyldig: Entry creation time field size +- +- +- Invalid entry modification time field size +- Ugyldig: Entry modification time field size +- +- +- Invalid entry expiry time field size +- Ugyldig: Entry expiry time field size +- +- +- Invalid entry field type +- Ugyldig: Entry field type +- +- +- unable to seek to content position +- +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- +- +- +- Unable to calculate database key +- +- +- +- +- KeeShare +- +- Invalid sharing reference +- +- +- +- Inactive share %1 +- +- +- +- Imported from %1 +- +- +- +- Exported to %1 +- +- +- +- Synchronized with %1 +- +- +- +- Import is disabled in settings +- +- +- +- Export is disabled in settings +- +- +- +- Inactive share +- +- +- +- Imported from +- Importert fra +- +- +- Exported to +- Eksportert til +- +- +- Synchronized with +- Synkronisert med +- +- +- +- KeyComponentWidget +- +- Key Component +- Nøkkelkomponent +- +- +- Key Component Description +- +- +- +- Cancel +- Avbryt +- +- +- Key Component set, click to change or remove +- +- +- +- Add %1 +- Add a key component +- Legg til %1 +- +- +- Change %1 +- Change a key component +- Endre %1 +- +- +- Remove %1 +- Remove a key component +- Fjern %1 +- +- +- %1 set, click to change or remove +- Change or remove a key component +- %1 sett, klikk for Ã¥ endre eller fjerne +- +- +- +- KeyFileEditWidget +- +- Generate +- Lag passord +- +- +- Key File +- Nøkkelfil +- +- +- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> +- +- +- +- Error loading the key file '%1' +-Message: %2 +- +- +- +- Key files +- Nøkkelfiler +- +- +- All files +- Alle filer +- +- +- Create Key File... +- Opprett nøkkelfil ... +- +- +- Error creating key file +- Feil ved oppretting av nøkkelfil +- +- +- Unable to create key file: %1 +- Kunne ikke opprette nøkkelfil: %1 +- +- +- Select a key file +- Velg en nøkkelfil +- +- +- Key file selection +- +- +- +- Browse for key file +- +- +- +- Browse... +- Bla gjennom... +- +- +- Generate a new key file +- +- +- +- Note: Do not use a file that may change as that will prevent you from unlocking your database! +- +- +- +- Invalid Key File +- Ugyldig nøkkelfil +- +- +- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. +- +- +- +- Suspicious Key File +- Mistenkelig nøkkelfil +- +- +- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. +-Are you sure you want to continue with this file? +- +- +- +- Old key file format +- +- +- +- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. +- +- +- +- +- MainWindow +- +- &Database +- &Database +- +- +- &Help +- &Hjelp +- +- +- &Groups +- &Grupper +- +- +- &Tools +- &Verktøy +- +- +- &Quit +- &Avslutt +- +- +- &About +- &Om +- +- +- Database settings +- Databaseoppsett +- +- +- Copy username to clipboard +- Kopier brukernavn til utklippstavlen +- +- +- Copy password to clipboard +- Kopier passord til utklippstavlen +- +- +- &Settings +- &Oppsett +- +- +- &Title +- &Tittel +- +- +- Copy title to clipboard +- Kopier tittel til utklippstavlen +- +- +- &URL +- &URL +- +- +- Copy URL to clipboard +- Kopier URL til utklippstavlen +- +- +- &Notes +- &Notater +- +- +- Copy notes to clipboard +- Kopier notater til utklippstavle +- +- +- Copy &TOTP +- Kopier &TOTP +- +- +- E&mpty recycle bin +- &Tøm papirkurv +- +- +- Clear history +- Slett historikk +- +- +- Access error for config file %1 +- Feil ved tilgang for konfigurasjonsfilen %1 +- +- +- Settings +- Oppsett +- +- +- Toggle window +- Vis vinduet +- +- +- Quit KeePassXC +- Avslutt KeePassXC +- +- +- Please touch the button on your YubiKey! +- Vennligst trykk pÃ¥ knappen pÃ¥ din YubiKey! +- +- +- WARNING: You are using an unstable build of KeePassXC! +-There is a high risk of corruption, maintain a backup of your databases. +-This version is not meant for production use. +- ADVARSEL: Du bruker en ustabil bygge-versjon av KeePassXC! +-Det er stor risiko for inkonsistens, ha en sikkerhetskopi av databasene dine. +-Denne versjonen er ikke ment for produksjonsmiljø. +- +- +- &Donate +- &Donér +- +- +- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +-We recommend you use the AppImage available on our downloads page. +- ADVARSEL: Qt-versjon du bruker kan føre til at KeePassXC kræsjer med et skjermtastatur! +-Vi anbefaler at du bruker det AppImage som er tilgjengelig pÃ¥ nedlastingssiden. +- +- +- &Import +- +- +- +- Create a new database +- Opprett en ny database +- +- +- Merge from another KDBX database +- +- +- +- Add a new entry +- +- +- +- View or edit entry +- Vis eller endring oppføring +- +- +- Add a new group +- Legg til ny gruppe +- +- +- Perform &Auto-Type +- +- +- +- Open &URL +- Ã…pne &URL +- +- +- Import a KeePass 1 database +- Importer en KeePass 1 database +- +- +- Import a CSV file +- Importer en CSV-fil +- +- +- NOTE: You are using a pre-release version of KeePassXC! +-Expect some bugs and minor issues, this version is not meant for production use. +- +- +- +- Check for updates on startup? +- Sjekk etter oppdateringer ved oppstart? +- +- +- Would you like KeePassXC to check for updates on startup? +- Vil du at KeePassXC skal se etter oppdateringer ved oppstart? +- +- +- You can always check for updates manually from the application menu. +- Du kan alltid sjekke om oppdateringer manuelt fra programmenyen. +- +- +- &Export +- +- +- +- Sort &A-Z +- +- +- +- Sort &Z-A +- +- +- +- &Password Generator +- &Passord generator +- +- +- Import a 1Password Vault +- +- +- +- &Getting Started +- +- +- +- &User Guide +- +- +- +- &Keyboard Shortcuts +- +- +- +- &Recent Databases +- +- +- +- &Entries +- +- +- +- Copy Att&ribute +- +- +- +- TOTP +- TOTP +- +- +- View +- +- +- +- Theme +- +- +- +- &Check for Updates +- +- +- +- &Open Database… +- +- +- +- &Save Database +- +- +- +- &Close Database +- +- +- +- &New Database… +- +- +- +- &Merge From Database… +- +- +- +- &New Entry… +- +- +- +- &Edit Entry… +- +- +- +- &Delete Entry… +- +- +- +- &New Group… +- +- +- +- &Edit Group… +- +- +- +- &Delete Group… +- +- +- +- Download All &Favicons… +- +- +- +- Sa&ve Database As… +- +- +- +- Database &Security… +- +- +- +- Database &Reports... +- +- +- +- Statistics, health check, etc. +- +- +- +- &Database Settings… +- +- +- +- &Clone Entry… +- +- +- +- Move u&p +- +- +- +- Move entry one step up +- +- +- +- Move do&wn +- +- +- +- Move entry one step down +- +- +- +- Copy &Username +- +- +- +- Copy &Password +- +- +- +- Download &Favicon +- +- +- +- &Lock Databases +- +- +- +- &CSV File… +- +- +- +- &HTML File… +- +- +- +- KeePass 1 Database… +- +- +- +- 1Password Vault… +- +- +- +- CSV File… +- +- +- +- Show TOTP +- Vis TOTP +- +- +- Show QR Code +- +- +- +- Set up TOTP… +- +- +- +- Report a &Bug +- +- +- +- Open Getting Started Guide +- +- +- +- &Online Help +- +- +- +- Go to online documentation +- +- +- +- Open User Guide +- +- +- +- Save Database Backup... +- +- +- +- Add key to SSH Agent +- +- +- +- Remove key from SSH Agent +- +- +- +- Compact Mode +- +- +- +- Automatic +- +- +- +- Light +- +- +- +- Dark +- +- +- +- Classic (Platform-native) +- +- +- +- Show Toolbar +- +- +- +- Show Preview Panel +- +- +- +- Don't show again for this version +- +- +- +- Restart Application? +- +- +- +- You must restart the application to apply this setting. Would you like to restart now? +- +- +- +- Perform Auto-Type Sequence +- +- +- +- {USERNAME} +- +- +- +- {USERNAME}{ENTER} +- +- +- +- {PASSWORD} +- +- +- +- {PASSWORD}{ENTER} +- +- +- +- Always on Top +- +- +- +- Hide Usernames +- Masker brukernavn +- +- +- Hide Passwords +- Masker passord +- +- +- +- ManageDatabase +- +- Database settings +- Databaseoppsett +- +- +- Edit database settings +- +- +- +- Unlock database +- LÃ¥s opp databasen +- +- +- Unlock database to show more information +- +- +- +- Lock database +- LÃ¥s database +- +- +- +- ManageSession +- +- Disconnect +- +- +- +- Disconnect this application +- +- +- +- +- Merger +- +- Creating missing %1 [%2] +- +- +- +- Relocating %1 [%2] +- +- +- +- Overwriting %1 [%2] +- +- +- +- older entry merged from database "%1" +- +- +- +- Adding backup for older target %1 [%2] +- +- +- +- Adding backup for older source %1 [%2] +- +- +- +- Reapplying older target entry on top of newer source %1 [%2] +- +- +- +- Reapplying older source entry on top of newer target %1 [%2] +- +- +- +- Synchronizing from newer source %1 [%2] +- +- +- +- Synchronizing from older source %1 [%2] +- +- +- +- Deleting child %1 [%2] +- +- +- +- Deleting orphan %1 [%2] +- +- +- +- Changed deleted objects +- +- +- +- Adding missing icon %1 +- +- +- +- Removed custom data %1 [%2] +- +- +- +- Adding custom data %1 [%2] +- +- +- +- +- NewDatabaseWizard +- +- Create a new KeePassXC database... +- Opprett en ny KeePassXC database... +- +- +- Root +- Root group +- Rot +- +- +- +- NewDatabaseWizardPage +- +- WizardPage +- +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- +- +- +- Advanced Settings +- Avanserte Innstillinger +- +- +- Simple Settings +- Enkle innstillinger +- +- +- Encryption Settings +- Krypteringsinnstillinger +- +- +- +- NewDatabaseWizardPageDatabaseKey +- +- Database Credentials +- +- +- +- A set of credentials known only to you that protects your database. +- +- +- +- +- NewDatabaseWizardPageEncryption +- +- Encryption Settings +- Krypteringsinnstillinger +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- +- +- +- +- NewDatabaseWizardPageMetaData +- +- General Database Information +- Generell database informasjon +- +- +- Please fill in the display name and an optional description for your new database: +- +- +- +- +- NixUtils +- +- Password Manager +- +- +- +- +- OpData01 +- +- Invalid OpData01, does not contain header +- +- +- +- Unable to read all IV bytes, wanted 16 but got %1 +- +- +- +- Unable to init cipher for opdata01: %1 +- +- +- +- Unable to read all HMAC signature bytes +- +- +- +- Malformed OpData01 due to a failed HMAC +- +- +- +- Unable to process clearText in place +- +- +- +- Expected %1 bytes of clear-text, found %2 +- +- +- +- +- OpVaultOpenWidget +- +- Read Database did not produce an instance +-%1 +- +- +- +- +- OpVaultReader +- +- Directory .opvault must exist +- +- +- +- Directory .opvault must be readable +- +- +- +- Directory .opvault/default must exist +- +- +- +- Directory .opvault/default must be readable +- +- +- +- Unable to decode masterKey: %1 +- +- +- +- Unable to derive master key: %1 +- +- +- +- +- OpenSSHKey +- +- Invalid key file, expecting an OpenSSH key +- Ugyldig nøkkelfil. Forventer OpenSSH-nøkkel +- +- +- PEM boundary mismatch +- ‘PEM boundary’ samsvarer ikke +- +- +- Base64 decoding failed +- Base64 dekryptering feila +- +- +- Key file way too small. +- Nøkkelfil er alt for liten. +- +- +- Key file magic header id invalid +- ’Magic header id’ i nøkkelfil er ugyldig +- +- +- Found zero keys +- Fant null nøkler +- +- +- Failed to read public key. +- Lesing av offentlig nøkkel feilet. +- +- +- Corrupted key file, reading private key failed +- Skadet nøkkelfil. Lesing av privat nøkkel feilet +- +- +- No private key payload to decrypt +- Ingen private nøkkeldata Ã¥ dekryptere +- +- +- Trying to run KDF without cipher +- Prøver Ã¥ kjøre KDF uten kryptering +- +- +- Passphrase is required to decrypt this key +- Passordfrase er nødvendig for Ã¥ dekryptere denne nøkkelen +- +- +- Key derivation failed, key file corrupted? +- Nøkkelavledning mislyktes. Nøkkelfil skadet? +- +- +- Decryption failed, wrong passphrase? +- Dekryptering feilet. Feil passordfrase? +- +- +- Unexpected EOF while reading public key +- Uventet EOF ved lesing av offentlig nøkkel +- +- +- Unexpected EOF while reading private key +- Uventet EOF ved lesing av privat nøkkel +- +- +- Can't write public key as it is empty +- Kan ikke skrive offentlig nøkkel fordi den er tom +- +- +- Unexpected EOF when writing public key +- Uventet EOF ved skriving av offentlig nøkkel +- +- +- Can't write private key as it is empty +- Kan ikke skrive privat nøkkel fordi den er tom +- +- +- Unexpected EOF when writing private key +- Uventet EOF ved skriving av privat nøkkel +- +- +- Unsupported key type: %1 +- Ikke støttet nøkkeltype: %1 +- +- +- Unknown cipher: %1 +- Ukjent kryptering: %1 +- +- +- Cipher IV is too short for MD5 kdf +- Krypterings-IV er for kort for MD5 kdf +- +- +- Unknown KDF: %1 +- Ukjent KDF: %1 +- +- +- Unknown key type: %1 +- Ukjent nøkkeltype: %1 +- +- +- +- PasswordEdit +- +- Passwords do not match +- Passordene er ikke like +- +- +- Passwords match so far +- +- +- +- Toggle Password (%1) +- +- +- +- Generate Password (%1) +- +- +- +- Warning: Caps Lock enabled! +- +- +- +- +- PasswordEditWidget +- +- Enter password: +- Angi passord: +- +- +- Confirm password: +- Bekreft passord: +- +- +- Password +- Passord +- +- +- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> +- +- +- +- Passwords do not match. +- Passordene er ikke like. +- +- +- Password field +- Passord felt +- +- +- Repeat password field +- +- +- +- +- PasswordGeneratorWidget +- +- %p% +- %p% +- +- +- strength +- Password strength +- styrke +- +- +- entropy +- entropi +- +- +- Password +- Passord +- +- +- Character Types +- Tegntyper +- +- +- Numbers +- Tall +- +- +- Extended ASCII +- Utvida ASCII +- +- +- Exclude look-alike characters +- Ekskluder tegn som er nesten makne +- +- +- Pick characters from every group +- Velg tegn fra hver gruppe +- +- +- &Length: +- &Lengde +- +- +- Passphrase +- Passordfrase +- +- +- Wordlist: +- Ordliste: +- +- +- Word Separator: +- Ord-skilletegn: +- +- +- Close +- Lukk +- +- +- Entropy: %1 bit +- Entropi: %1 bit +- +- +- Password Quality: %1 +- Passordkvalitet: %1 +- +- +- Poor +- Password quality +- DÃ¥rlig +- +- +- Weak +- Password quality +- Svak +- +- +- Good +- Password quality +- Bra +- +- +- Excellent +- Password quality +- Utmerket +- +- +- Switch to advanced mode +- Bytt til avansert modus +- +- +- Advanced +- Avansert +- +- +- Braces +- +- +- +- Punctuation +- +- +- +- Quotes +- +- +- +- Logograms +- +- +- +- Character set to exclude from generated password +- +- +- +- Do not include: +- Ikke ta med: +- +- +- Add non-hex letters to "do not include" list +- +- +- +- Hex +- +- +- +- Excluded characters: "0", "1", "l", "I", "O", "|", "ï¹’" +- +- +- +- Generated password +- Generert passord +- +- +- Upper-case letters +- +- +- +- Lower-case letters +- +- +- +- Special characters +- +- +- +- Math Symbols +- +- +- +- Dashes and Slashes +- +- +- +- Excluded characters +- +- +- +- Hex Passwords +- +- +- +- Password length +- Passord lengde +- +- +- Word Case: +- +- +- +- Regenerate password +- +- +- +- Copy password +- Kopier passord +- +- +- lower case +- +- +- +- UPPER CASE +- +- +- +- Title Case +- +- +- +- Generate Password +- +- +- +- Also choose from: +- +- +- +- Additional characters to use for the generated password +- +- +- +- Additional characters +- +- +- +- Word Count: +- Antall ord: +- +- +- Esc +- +- +- +- Apply Password +- +- +- +- Ctrl+S +- +- +- +- Regenerate password (%1) +- +- +- +- Special Characters +- Spesialtegn +- +- +- +- QApplication +- +- KeeShare +- +- +- +- Statistics +- Statistikk +- +- +- Very weak password +- +- +- +- Password entropy is %1 bits +- +- +- +- Weak password +- +- +- +- Used in %1/%2 +- +- +- +- Password is used %1 times +- +- +- +- Password has expired +- +- +- +- Password expiry was %1 +- +- +- +- Password is about to expire +- +- +- +- Password expires in %1 days +- +- +- +- Password will expire soon +- +- +- +- Password expires on %1 +- +- +- +- Health Check +- +- +- +- HIBP +- +- +- +- +- QMessageBox +- +- Overwrite +- Erstatte +- +- +- Delete +- Slett +- +- +- Move +- Flytt +- +- +- Empty +- Tom +- +- +- Remove +- Fjern +- +- +- Skip +- Hopp over +- +- +- Disable +- Deaktiver +- +- +- Merge +- +- +- +- Continue +- Fortsett +- +- +- +- QObject +- +- Database not opened +- Database ikke Ã¥pnet +- +- +- Database hash not available +- Database-hash er ikke tilgjengelig +- +- +- Client public key not received +- Klients offentlige nøkkel ikke mottatt +- +- +- Cannot decrypt message +- Kan ikke dekryptere melding +- +- +- Action cancelled or denied +- Handlingen er kansellert eller avvist +- +- +- KeePassXC association failed, try again +- Assosiering av KeePassXC mislyktes, prøv igjen +- +- +- Encryption key is not recognized +- Krypteringsnøkkel er ikke gjenkjent +- +- +- Incorrect action +- Feil handling +- +- +- Empty message received +- Tom melding mottatt +- +- +- No URL provided +- Ingen URL oppgitt +- +- +- No logins found +- Ingen innlogginger funnet +- +- +- Unknown error +- Ukjent feil +- +- +- Add a new entry to a database. +- Legg til en ny oppføring til en database. +- +- +- Path of the database. +- Database-sti. +- +- +- Key file of the database. +- Nøkkelfil til databasen. +- +- +- path +- sti +- +- +- Username for the entry. +- Brukernavn for oppføringen. +- +- +- username +- brukernavn +- +- +- URL for the entry. +- URL for oppføringa. +- +- +- URL +- URL +- +- +- Prompt for the entry's password. +- Spør etter oppføringens passord. +- +- +- Generate a password for the entry. +- Generer et passord til oppføringa. +- +- +- length +- lengde +- +- +- Path of the entry to add. +- Sti til oppføringa som skal legges til. +- +- +- Path of the entry to clip. +- clip = copy to clipboard +- Sti til oppføring som skal klippes ut. +- +- +- Timeout in seconds before clearing the clipboard. +- Forsinkelse i sekund før tømming av utklippstavlen. +- +- +- Edit an entry. +- Rediger oppføring. +- +- +- Title for the entry. +- Tittel for oppføringa. +- +- +- title +- tittel +- +- +- Path of the entry to edit. +- Sti til oppføringa som skal redigeres. +- +- +- Estimate the entropy of a password. +- Beregn entropien til et passord. +- +- +- Password for which to estimate the entropy. +- Passord for beregning av entropi. +- +- +- Perform advanced analysis on the password. +- Utfør avansert analyse pÃ¥ passordet. +- +- +- +- +-Available commands: +- +- +- +-Tilgjengelige kommandoer: +- +- +- +- Name of the command to execute. +- Navn pÃ¥ kommandoen som skal utføres. +- +- +- List database entries. +- Liste databaseoppføringer. +- +- +- Path of the group to list. Default is / +- Sti til gruppen som skal listes. Standard er / +- +- +- Find entries quickly. +- Finn oppføring fort. +- +- +- Search term. +- Søkeord. +- +- +- Merge two databases. +- SlÃ¥ sammen to databaser. +- +- +- Path of the database to merge from. +- Sti til databasen det skal slÃ¥s sammen fra. +- +- +- Use the same credentials for both database files. +- Bruk samme identifikasjon for begge databasefilene. +- +- +- Key file of the database to merge from. +- Nøkkelfil til databasen det skal slÃ¥s sammen fra. +- +- +- Show an entry's information. +- Vis informasjon i oppføringen. +- +- +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- Navn pÃ¥ attributtene som skal vises. Dette alternativet kan spesifiseres mer enn en gang, med hvert attributt vist ett per linje i den oppgitte rekkefølgen. Hvis ingen attributter er oppgitt, blir det gitt en oppsummering av standardattributtene. +- +- +- attribute +- attributt +- +- +- Name of the entry to show. +- Navn pÃ¥ oppføring som skal vises +- +- +- NULL device +- NULL-enhet +- +- +- error reading from device +- Feil ved lesing fra enhet +- +- +- malformed string +- Ugyldig streng +- +- +- missing closing quote +- Manglende avsluttende anførselstegn +- +- +- Group +- Gruppe +- +- +- Title +- Tittel +- +- +- Username +- Brukernavn +- +- +- Password +- Passord +- +- +- Notes +- Notater +- +- +- Last Modified +- Sist endra +- +- +- Created +- Opprettet +- +- +- Browser Integration +- Nettlesertillegg +- +- +- SSH Agent +- SSH-agent +- +- +- Generate a new random diceware passphrase. +- Generer en ny tilfeldig diceware passordfrase. +- +- +- Word count for the diceware passphrase. +- Antall ord i diceware-passordfrasen. +- +- +- Wordlist for the diceware generator. +-[Default: EFF English] +- Ordliste for diceware-generatoren. +-[Standard: EFF engelsk] +- +- +- Generate a new random password. +- Generer et nytt tilfeldig passord. +- +- +- Could not create entry with path %1. +- +- +- +- Enter password for new entry: +- +- +- +- Writing the database failed %1. +- +- +- +- Successfully added entry %1. +- +- +- +- Invalid timeout value %1. +- +- +- +- Entry %1 not found. +- +- +- +- Entry with path %1 has no TOTP set up. +- +- +- +- Clearing the clipboard in %1 second(s)... +- +- +- +- Clipboard cleared! +- Utklippstavle ryddet! +- +- +- Silence password prompt and other secondary outputs. +- +- +- +- count +- CLI parameter +- Antall +- +- +- Could not find entry with path %1. +- +- +- +- Not changing any field for entry %1. +- +- +- +- Enter new password for entry: +- +- +- +- Writing the database failed: %1 +- +- +- +- Successfully edited entry %1. +- +- +- +- Length %1 +- Lengde %1 +- +- +- Entropy %1 +- +- +- +- Log10 %1 +- +- +- +- Multi-word extra bits %1 +- +- +- +- Type: Bruteforce +- +- +- +- Type: Dictionary +- +- +- +- Type: Dict+Leet +- +- +- +- Type: User Words +- +- +- +- Type: User+Leet +- +- +- +- Type: Repeated +- +- +- +- Type: Sequence +- +- +- +- Type: Spatial +- +- +- +- Type: Date +- Type: Dato +- +- +- Type: Bruteforce(Rep) +- +- +- +- Type: Dictionary(Rep) +- +- +- +- Type: Dict+Leet(Rep) +- +- +- +- Type: User Words(Rep) +- +- +- +- Type: User+Leet(Rep) +- +- +- +- Type: Repeated(Rep) +- +- +- +- Type: Sequence(Rep) +- +- +- +- Type: Spatial(Rep) +- +- +- +- Type: Date(Rep) +- +- +- +- Type: Unknown%1 +- Type: Ukjent%1 +- +- +- Entropy %1 (%2) +- +- +- +- *** Password length (%1) != sum of length of parts (%2) *** +- +- +- +- Failed to load key file %1: %2 +- +- +- +- Length of the generated password +- +- +- +- Use lowercase characters +- +- +- +- Use uppercase characters +- +- +- +- Use special characters +- +- +- +- Use extended ASCII +- +- +- +- Exclude character set +- +- +- +- chars +- +- +- +- Exclude similar looking characters +- +- +- +- Include characters from every selected group +- +- +- +- Recursively list the elements of the group. +- +- +- +- Cannot find group %1. +- Kan ikke finne gruppe %1 . +- +- +- Error reading merge file: +-%1 +- +- +- +- Unable to save database to file : %1 +- +- +- +- Unable to save database to file: %1 +- +- +- +- Successfully recycled entry %1. +- +- +- +- Successfully deleted entry %1. +- +- +- +- Show the entry's current TOTP. +- +- +- +- ERROR: unknown attribute %1. +- +- +- +- No program defined for clipboard manipulation +- +- +- +- file empty +- +- +- +- %1: (row, col) %2,%3 +- +- +- +- AES-KDF (KDBX 4) +- AES-KDF (KDBX 4) +- +- +- AES-KDF (KDBX 3.1) +- AES-KDF (KDBX 3.1) +- +- +- Invalid Settings +- TOTP +- Ugyldige innstillinger +- +- +- Invalid Key +- TOTP +- +- +- +- Message encryption failed. +- +- +- +- No groups found +- Ingen grupper funnet +- +- +- Create a new database. +- Opprett en ny database. +- +- +- File %1 already exists. +- Filen %1 eksisterer allerede. +- +- +- Loading the key file failed +- +- +- +- No key is set. Aborting database creation. +- +- +- +- Failed to save the database: %1. +- +- +- +- Successfully created new database. +- Vellykket oppretting ny database. +- +- +- Creating KeyFile %1 failed: %2 +- +- +- +- Loading KeyFile %1 failed: %2 +- +- +- +- Path of the entry to remove. +- Sti til oppføring som skal fjernes. +- +- +- Existing single-instance lock file is invalid. Launching new instance. +- Eksisterende enbrukermodus lock-fil er ugyldig. Starter ny instans. +- +- +- The lock file could not be created. Single-instance mode disabled. +- Lock-filen kunne ikke opprettes. Enbrukermodus deaktivert. +- +- +- KeePassXC - cross-platform password manager +- KeePassXC - en multiplattforms passordhÃ¥ndterer +- +- +- filenames of the password databases to open (*.kdbx) +- Filnavn pÃ¥ passord-databasene som skal Ã¥pnes (*.kdbx) +- +- +- path to a custom config file +- Sti til tilpasset konfigurasjonsfil +- +- +- key file of the database +- Database-nøkkelfil +- +- +- read password of the database from stdin +- Les database-passord fra standard input +- +- +- Another instance of KeePassXC is already running. +- En annen instans av KeePassXC kjører allerede. +- +- +- Fatal error while testing the cryptographic functions. +- Alvorlig feil ved testing av de kryptografiske funksjonene. +- +- +- KeePassXC - Error +- KeePassXC - Feil +- +- +- Database password: +- Databasepassord: +- +- +- Cannot create new group +- +- +- +- Deactivate password key for the database. +- +- +- +- Displays debugging information. +- +- +- +- Deactivate password key for the database to merge from. +- +- +- +- Version %1 +- Versjon %1 +- +- +- Build Type: %1 +- Byggetype: %1 +- +- +- Revision: %1 +- Revisjon: %1 +- +- +- Distribution: %1 +- Distribusjon: %1 +- +- +- Debugging mode is disabled. +- +- +- +- Debugging mode is enabled. +- +- +- +- Operating system: %1 +-CPU architecture: %2 +-Kernel: %3 %4 +- Operativsystem: %1 +-CPU-arkitektur: %2 +-Kjerne: %3 %4 +- +- +- Auto-Type +- Autoskriv +- +- +- KeeShare (signed and unsigned sharing) +- +- +- +- KeeShare (only signed sharing) +- +- +- +- KeeShare (only unsigned sharing) +- +- +- +- YubiKey +- YubiKey +- +- +- TouchID +- Berørings-id +- +- +- None +- Ingen +- +- +- Enabled extensions: +- Aktive utvidelser: +- +- +- Cryptographic libraries: +- +- +- +- Cannot generate a password and prompt at the same time! +- +- +- +- Adds a new group to a database. +- +- +- +- Path of the group to add. +- +- +- +- Group %1 already exists! +- +- +- +- Group %1 not found. +- Gruppe %1 ikke funnet. +- +- +- Successfully added group %1. +- +- +- +- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. +- +- +- +- FILENAME +- FILNAVN +- +- +- Analyze passwords for weaknesses and problems. +- +- +- +- Failed to open HIBP file %1: %2 +- +- +- +- Evaluating database entries against HIBP file, this will take a while... +- +- +- +- Close the currently opened database. +- +- +- +- Display this help. +- +- +- +- slot +- +- +- +- Invalid word count %1 +- +- +- +- The word list is too small (< 1000 items) +- +- +- +- Exit interactive mode. +- +- +- +- Exports the content of a database to standard output in the specified format. +- +- +- +- Unable to export database to XML: %1 +- +- +- +- Unsupported format %1 +- +- +- +- Use numbers +- +- +- +- Invalid password length %1 +- +- +- +- Display command help. +- +- +- +- Available commands: +- +- +- +- Import the contents of an XML database. +- +- +- +- Path of the XML database export. +- +- +- +- Path of the new database. +- +- +- +- Successfully imported database. +- +- +- +- Unknown command %1 +- +- +- +- Flattens the output to single lines. +- +- +- +- Only print the changes detected by the merge operation. +- +- +- +- Yubikey slot for the second database. +- +- +- +- Successfully merged %1 into %2. +- +- +- +- Database was not modified by merge operation. +- +- +- +- Moves an entry to a new group. +- +- +- +- Path of the entry to move. +- +- +- +- Path of the destination group. +- +- +- +- Could not find group with path %1. +- +- +- +- Entry is already in group %1. +- +- +- +- Successfully moved entry %1 to group %2. +- +- +- +- Open a database. +- +- +- +- Path of the group to remove. +- +- +- +- Cannot remove root group from database. +- +- +- +- Successfully recycled group %1. +- +- +- +- Successfully deleted group %1. +- +- +- +- Failed to open database file %1: not found +- +- +- +- Failed to open database file %1: not a plain file +- +- +- +- Failed to open database file %1: not readable +- +- +- +- Enter password to unlock %1: +- Skriv inn passord for Ã¥ lÃ¥se opp %1: +- +- +- Invalid YubiKey slot %1 +- +- +- +- Enter password to encrypt database (optional): +- +- +- +- HIBP file, line %1: parse error +- +- +- +- Secret Service Integration +- +- +- +- User name +- +- +- +- Password for '%1' has been leaked %2 time(s)! +- +- +- +- Invalid password generator after applying all options +- +- +- +- Show the protected attributes in clear text. +- +- +- +- Browser Plugin Failure +- +- +- +- Could not save the native messaging script file for %1. +- +- +- +- Copy the given attribute to the clipboard. Defaults to "password" if not specified. +- +- +- +- Copy the current TOTP to the clipboard (equivalent to "-a totp"). +- +- +- +- Copy an entry's attribute to the clipboard. +- +- +- +- ERROR: Please specify one of --attribute or --totp, not both. +- +- +- +- ERROR: attribute %1 is ambiguous, it matches %2. +- +- +- +- Attribute "%1" not found. +- +- +- +- Entry's "%1" attribute copied to the clipboard! +- +- +- +- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). +- +- +- +- slot[:serial] +- +- +- +- Target decryption time in MS for the database. +- +- +- +- time +- +- +- +- Set the key file for the database. +- +- +- +- Set a password for the database. +- +- +- +- Invalid decryption time %1. +- +- +- +- Target decryption time must be between %1 and %2. +- +- +- +- Failed to set database password. +- +- +- +- Benchmarking key derivation function for %1ms delay. +- +- +- +- Setting %1 rounds for key derivation function. +- +- +- +- error while setting database key derivation settings. +- +- +- +- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. +- +- +- +- Unable to import XML database: %1 +- +- +- +- Show a database's information. +- +- +- +- UUID: +- +- +- +- Name: +- +- +- +- Description: +- +- +- +- Cipher: +- +- +- +- KDF: +- +- +- +- Recycle bin is enabled. +- +- +- +- Recycle bin is not enabled. +- +- +- +- Invalid command %1. +- +- +- +- Invalid YubiKey serial %1 +- +- +- +- Please touch the button on your YubiKey to continue… +- +- +- +- Do you want to create a database with an empty password? [y/N]: +- +- +- +- Repeat password: +- +- +- +- Error: Passwords do not match. +- +- +- +- All clipping programs failed. Tried %1 +- +- +- +- +- AES (%1 rounds) +- +- +- +- AES 256-bit +- +- +- +- Twofish 256-bit +- +- +- +- ChaCha20 256-bit +- +- +- +- Benchmark %1 delay +- +- +- +- %1 ms +- milliseconds +- +- +- +- %1 s +- seconds +- +- +- +- path to a custom local config file +- +- +- +- WARNING: You are using an old key file format which KeePassXC may +-stop supporting in the future. +- +-Please consider generating a new key file. +- +- +- +- Argon2%1 (%2 rounds, %3 KB) +- +- +- +- Argon2d (KDBX 4 – recommended) +- +- +- +- Argon2id (KDBX 4) +- +- +- +- TOTP +- TOTP +- +- +- Icon +- Ikon +- +- +- Unsupported key file version: %1 +- +- +- +- Checksum mismatch! Key file may be corrupt. +- +- +- +- Unexpected key file data! Key file may be corrupt. +- +- +- +- +- QtIOCompressor +- +- Internal zlib error when compressing: +- Intern zlib-feil under pakking: +- +- +- Error writing to underlying device: +- Feil ved skriving til underliggende enhet: +- +- +- Error opening underlying device: +- Feil ved Ã¥pning av underliggende enhet: +- +- +- Error reading data from underlying device: +- Feil ved lesing av data fra underliggende enhet: +- +- +- Internal zlib error when decompressing: +- Intern zlib-feil under utpakking: +- +- +- +- QtIOCompressor::open +- +- The gzip format not supported in this version of zlib. +- Gzip-formatet er ikke støttet i denne versjonen av zlib. +- +- +- Internal zlib error: +- Intern zlib-feil: +- +- +- +- ReportsWidgetHealthcheck +- +- Also show entries that have been excluded from reports +- +- +- +- Hover over reason to show additional details. Double-click entries to edit. +- +- +- +- Bad +- Password quality +- +- +- +- Bad — password must be changed +- +- +- +- Poor +- Password quality +- DÃ¥rlig +- +- +- Poor — password should be changed +- +- +- +- Weak +- Password quality +- Svak +- +- +- Weak — consider changing the password +- +- +- +- (Excluded) +- +- +- +- This entry is being excluded from reports +- +- +- +- Please wait, health data is being calculated... +- +- +- +- Congratulations, everything is healthy! +- +- +- +- Title +- Tittel +- +- +- Path +- Sti +- +- +- Score +- +- +- +- Reason +- +- +- +- Edit Entry... +- +- +- +- Exclude from reports +- +- +- +- +- ReportsWidgetHibp +- +- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. +- +- +- +- Perform Online Analysis +- +- +- +- Also show entries that have been excluded from reports +- +- +- +- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. +- +- +- +- Congratulations, no exposed passwords! +- +- +- +- Title +- Tittel +- +- +- Path +- Sti +- +- +- Password exposed… +- +- +- +- (Excluded) +- +- +- +- This entry is being excluded from reports +- +- +- +- once +- +- +- +- up to 10 times +- +- +- +- up to 100 times +- +- +- +- up to 1000 times +- +- +- +- up to 10,000 times +- +- +- +- up to 100,000 times +- +- +- +- up to a million times +- +- +- +- millions of times +- +- +- +- Edit Entry... +- +- +- +- Exclude from reports +- +- +- +- +- ReportsWidgetStatistics +- +- Hover over lines with error icons for further information. +- +- +- +- Name +- Navn +- +- +- Value +- Verdi +- +- +- Please wait, database statistics are being calculated... +- Vent, database statistikk blir beregnet... +- +- +- Database name +- Database navn +- +- +- Description +- Beskrivelse +- +- +- Location +- +- +- +- Last saved +- Sist lagret +- +- +- Unsaved changes +- +- +- +- yes +- ja +- +- +- no +- nei +- +- +- The database was modified, but the changes have not yet been saved to disk. +- +- +- +- Number of groups +- +- +- +- Number of entries +- +- +- +- Number of expired entries +- +- +- +- The database contains entries that have expired. +- +- +- +- Unique passwords +- Unike passord +- +- +- Non-unique passwords +- +- +- +- More than 10% of passwords are reused. Use unique passwords when possible. +- Mer enn 10% av passordene brukes pÃ¥ nytt. Bruk unike passord nÃ¥r det er mulig. +- +- +- Maximum password reuse +- +- +- +- Some passwords are used more than three times. Use unique passwords when possible. +- Noen passord brukes mer enn tre ganger. Bruk unike passord nÃ¥r det er mulig. +- +- +- Number of short passwords +- +- +- +- Recommended minimum password length is at least 8 characters. +- +- +- +- Number of weak passwords +- +- +- +- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. +- Anbefaler Ã¥ bruke lange, tilfeldige passord med en vurdering av 'bra' eller 'utmerket'. +- +- +- Entries excluded from reports +- +- +- +- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. +- +- +- +- Average password length +- +- +- +- %1 characters +- +- +- +- Average password length is less than ten characters. Longer passwords provide more security. +- +- +- +- +- SSHAgent +- +- Agent connection failed. +- Agentforbindelse mislyktes. +- +- +- Agent protocol error. +- Agent protokollfeil. +- +- +- No agent running, cannot add identity. +- Ingen agent kjører. Kan ikke identifisere. +- +- +- No agent running, cannot remove identity. +- Ingen agent kjører, kan ikke fjerne identitet. +- +- +- Agent refused this identity. Possible reasons include: +- Agent nektet denne identiteten. Mulige grunner er: +- +- +- The key has already been added. +- Nøkkelen er alt blitt lagt til. +- +- +- Restricted lifetime is not supported by the agent (check options). +- Begrenset levetid støttes ikke av agenten (sjekk alternativene). +- +- +- A confirmation request is not supported by the agent (check options). +- En bekreftelsesforespørsel støttes ikke av agenten (sjekk alternativene). +- +- +- Key identity ownership conflict. Refusing to add. +- +- +- +- No agent running, cannot list identities. +- +- +- +- +- SearchHelpWidget +- +- Search Help +- +- +- +- Search terms are as follows: [modifiers][field:]["]term["] +- +- +- +- Every search term must match (ie, logical AND) +- +- +- +- Modifiers +- +- +- +- exclude term from results +- +- +- +- match term exactly +- +- +- +- use regex in term +- +- +- +- Fields +- +- +- +- Term Wildcards +- +- +- +- match anything +- +- +- +- match one +- +- +- +- logical OR +- +- +- +- Examples +- Eksempler +- +- +- +- SearchWidget +- +- Search +- Søk +- +- +- Limit search to selected group +- Avgrens søket til valgt gruppe +- +- +- Search Help +- +- +- +- Search (%1)... +- Search placeholder text, %1 is the keyboard shortcut +- Søk (%1)... +- +- +- Case sensitive +- +- +- +- +- SettingsWidgetFdoSecrets +- +- Options +- Alternativer +- +- +- Enable KeepassXC Freedesktop.org Secret Service integration +- +- +- +- General +- Generelt +- +- +- Show notification when credentials are requested +- +- +- +- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> +- +- +- +- Exposed database groups: +- +- +- +- Authorization +- +- +- +- These applications are currently connected: +- +- +- +- Don't confirm when entries are deleted by clients +- +- +- +- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. +- +- +- +- <b>Warning:</b> +- +- +- +- Save current changes to activate the plugin and enable editing of this section. +- +- +- +- +- SettingsWidgetKeeShare +- +- Active +- Aktiv +- +- +- Allow export +- +- +- +- Allow import +- +- +- +- Own certificate +- Egne sertifikat +- +- +- Fingerprint: +- Fingeravtrykk: +- +- +- Certificate: +- Sertifikat +- +- +- Signer +- +- +- +- Key: +- Nøkkel: +- +- +- Generate +- Lag passord +- +- +- Import +- Importer +- +- +- Export +- Eksporter +- +- +- Imported certificates +- Importerte sertifikater +- +- +- Trust +- +- +- +- Ask +- Spør +- +- +- Untrust +- +- +- +- Remove +- Fjern +- +- +- Path +- Sti +- +- +- Status +- Status +- +- +- Fingerprint +- Fingeravtrykk +- +- +- Certificate +- Sertifikat +- +- +- Trusted +- Klarert +- +- +- Untrusted +- Uklarert +- +- +- Unknown +- Ukjent +- +- +- key.share +- Filetype for KeeShare key +- +- +- +- KeeShare key file +- +- +- +- All files +- Alle filer +- +- +- Select path +- Velg sti +- +- +- Exporting changed certificate +- Eksporterer endret sertifikat +- +- +- The exported certificate is not the same as the one in use. Do you want to export the current certificate? +- Eksportert sertifikat er ikke det samme som det som er i bruk. Vil du eksportere gjeldende sertifikat? +- +- +- Signer: +- +- +- +- Allow KeeShare imports +- +- +- +- Allow KeeShare exports +- +- +- +- Only show warnings and errors +- +- +- +- Key +- Nøkkel +- +- +- Signer name field +- +- +- +- Generate new certificate +- +- +- +- Import existing certificate +- +- +- +- Export own certificate +- +- +- +- Known shares +- +- +- +- Trust selected certificate +- +- +- +- Ask whether to trust the selected certificate every time +- +- +- +- Untrust selected certificate +- +- +- +- Remove selected certificate +- +- +- +- +- ShareExport +- +- Overwriting signed share container is not supported - export prevented +- +- +- +- Could not write export container (%1) +- +- +- +- Could not embed signature: Could not open file to write (%1) +- +- +- +- Could not embed signature: Could not write file (%1) +- +- +- +- Could not embed database: Could not open file to write (%1) +- +- +- +- Could not embed database: Could not write file (%1) +- +- +- +- Overwriting unsigned share container is not supported - export prevented +- +- +- +- Could not write export container +- Kunne ikke skrive eksport-container +- +- +- Unexpected export error occurred +- Uventet feil oppstÃ¥tt +- +- +- +- ShareImport +- +- Import from container without signature +- +- +- +- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? +- +- +- +- Import from container with certificate +- +- +- +- Do you want to trust %1 with the fingerprint of %2 from %3? +- +- +- +- Not this time +- Ikke denne gangen +- +- +- Never +- Aldri +- +- +- Always +- Alltid +- +- +- Just this time +- Bare denne gangen +- +- +- Signed share container are not supported - import prevented +- +- +- +- File is not readable +- Filen er ikke lesbar +- +- +- Invalid sharing container +- +- +- +- Untrusted import prevented +- +- +- +- Successful signed import +- +- +- +- Unsigned share container are not supported - import prevented +- +- +- +- Successful unsigned import +- +- +- +- File does not exist +- Filen eksisterer ikke +- +- +- Unknown share container type +- +- +- +- +- ShareObserver +- +- Import from %1 failed (%2) +- +- +- +- Import from %1 successful (%2) +- +- +- +- Imported from %1 +- +- +- +- Export to %1 failed (%2) +- Eksport til %1 feilet (%2) +- +- +- Export to %1 successful (%2) +- Eksport til %1 vellykket (%2) +- +- +- Export to %1 +- Eksporter til %1 +- +- +- Multiple import source path to %1 in %2 +- +- +- +- Conflicting export target path %1 in %2 +- +- +- +- +- TotpDialog +- +- Timed Password +- Tidsbasert passord +- +- +- 000000 +- 000000 +- +- +- Copy +- Kopier +- +- +- Expires in <b>%n</b> second(s) +- Utløper om %n sekundUtløper om <b>%n</b> sekunder +- +- +- +- TotpExportSettingsDialog +- +- Copy +- Kopier +- +- +- NOTE: These TOTP settings are custom and may not work with other authenticators. +- TOTP QR code dialog warning +- MERK: Disse TOTP-innstillingene er egendefinerte og fungerer kanskje ikke med andre autentifikatorer. +- +- +- There was an error creating the QR code. +- Feil ved opprettelse av QR-koden. +- +- +- Closing in %1 seconds. +- Lukker om %1 sekunder. +- +- +- +- TotpSetupDialog +- +- Setup TOTP +- Oppsett TOTP +- +- +- Default RFC 6238 token settings +- Standard RFC 6238 token-innstillinger +- +- +- Steam token settings +- Steam token-innstillinger +- +- +- Use custom settings +- Bruk egendefinerte innstillinger +- +- +- Custom Settings +- Egendefinerte innstillinger +- +- +- Time step: +- Tidsintervall: +- +- +- sec +- Seconds +- sek +- +- +- Code size: +- Kodestørrelse: +- +- +- Secret Key: +- +- +- +- Secret key must be in Base32 format +- +- +- +- Secret key field +- +- +- +- Algorithm: +- Algoritme: +- +- +- Time step field +- +- +- +- digits +- +- +- +- Invalid TOTP Secret +- +- +- +- You have entered an invalid secret key. The key must be in Base32 format. +-Example: JBSWY3DPEHPK3PXP +- +- +- +- Confirm Remove TOTP Settings +- +- +- +- Are you sure you want to delete TOTP settings for this entry? +- +- +- +- +- URLEdit +- +- Invalid URL +- +- +- +- +- UpdateCheckDialog +- +- Checking for updates +- Sjekker for oppdateringer +- +- +- Checking for updates... +- Sjekker for oppdateringer... +- +- +- Close +- Lukk +- +- +- Update Error! +- Feil ved oppdatering! +- +- +- An error occurred in retrieving update information. +- En feil oppstod ved mottak av oppdateringsinformasjon. +- +- +- Please try again later. +- Prøv igjen senere. +- +- +- Software Update +- Programvareoppdatering +- +- +- A new version of KeePassXC is available! +- En ny versjon av KeePassXC er tilgjengelig! +- +- +- KeePassXC %1 is now available — you have %2. +- KeePassXC %1 er nÃ¥ tilgjengelig — du har %2. +- +- +- Download it at keepassxc.org +- Lastes ned fra keepassxc.org +- +- +- You're up-to-date! +- Du er oppdatert! +- +- +- KeePassXC %1 is currently the newest version available +- KeePassXC %1 er nÃ¥ nyeste versjon som er tilgjengelig +- +- +- +- WelcomeWidget +- +- Start storing your passwords securely in a KeePassXC database +- Begynn Ã¥ lagre passordene dine i en trygg KeePassXC-database +- +- +- Create new database +- Opprett ny database +- +- +- Open existing database +- Ã…pne eksisterende database +- +- +- Import from KeePass 1 +- Importer KeePass1-database +- +- +- Import from CSV +- Importer fra CSV-fil +- +- +- Recent databases +- Nylige databaser +- +- +- Welcome to KeePassXC %1 +- Velkommen til KeePassXC %1 +- +- +- Import from 1Password +- Importer fra 1Password +- +- +- Open a recent database +- +- +- +- +- YubiKey +- +- %1 [%2] Configured Slot - %3 +- +- +- +- %1 [%2] Challenge Response - Slot %3 - %4 +- +- +- +- Press +- Trykk +- +- +- Passive +- Passiv +- +- +- %1 Invalid slot specified - %2 +- +- +- +- The YubiKey interface has not been initialized. +- +- +- +- Hardware key is currently in use. +- +- +- +- Could not find hardware key with serial number %1. Please plug it in to continue. +- +- +- +- Hardware key timed out waiting for user interaction. +- +- +- +- A USB error ocurred when accessing the hardware key: %1 +- +- +- +- Failed to complete a challenge-response, the specific error was: %1 +- +- +- +- +- YubiKeyEditWidget +- +- Refresh +- Last pÃ¥ ny +- +- +- YubiKey Challenge-Response +- YubiKey utfordrings-respons +- +- +- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- <p>Dersom du har en <a href="https://www.yubico.com/">YubiKey</a>, sÃ¥ kan du bruke den for økt sikkerhet.</p><p>Ett av sporene pÃ¥ YubiKey mÃ¥ programmeres med <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 utfordrings-respons</a>.</p> +- +- +- Refresh hardware tokens +- +- +- +- Hardware key slot selection +- +- +- +- Could not find any hardware keys! +- +- +- +- Selected hardware key slot does not support challenge-response! +- +- +- +- Detecting hardware keys… +- +- +- +- No hardware keys detected +- +- +- +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_nl_NL.ts keepassxc-2.6.4-patched/share/translations/keepassx_nl_NL.ts +--- keepassxc-2.6.4-orig/share/translations/keepassx_nl_NL.ts 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/translations/keepassx_nl_NL.ts 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7890 +0,0 @@ +- +- +- AboutDialog +- +- About KeePassXC +- Over KeePassXC +- +- +- About +- Over +- +- +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- Meld problemen op: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;"> https://github.com</a> +- +- +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- KeePassXC wordt verspreid onder de voorwaarden van de GNU General Public License (GPL) versie 2 of (desgewenst) versie 3. +- +- +- Contributors +- Bijdragen van +- +- +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Toon bijdragen op GitHub</a> +- +- +- Debug Info +- Foutinformatie +- +- +- Include the following information whenever you report a bug: +- Voeg de volgende informatie bij de foutrapportage: +- +- +- Copy to clipboard +- Naar klembord kopiëren +- +- +- Project Maintainers: +- Projectbeheerders: +- +- +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- Bijzondere dank van het KeePassXC-team gaat uit naar debfx voor het creëren van het oorspronkelijke KeePassX. +- +- +- +- AgentSettingsWidget +- +- Use OpenSSH for Windows instead of Pageant +- Gebruik OpenSSH voor Windows in plaats van Pageant +- +- +- Enable SSH Agent integration +- SSH Agent-integratie inschakelen +- +- +- SSH_AUTH_SOCK value +- SSH_AUTH_SOCK waarde +- +- +- SSH_AUTH_SOCK override +- SSH_AUTH_SOCK overschrijven +- +- +- (empty) +- (leeg) +- +- +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- Geen SSH Agent-socket beschikbaar. Zorg ervoor dat de omgevingsvariabele SSH_AUTH_SOCK bestaat of stel een overschrijving in. +- +- +- SSH Agent connection is working! +- SSH Agent-verbinding werkt! +- +- +- +- ApplicationSettingsWidget +- +- Application Settings +- Programma-instellingen +- +- +- General +- Algemeen +- +- +- Security +- Beveiliging +- +- +- Access error for config file %1 +- Geen toegang tot configuratiebestand %1 +- +- +- Icon only +- Alleen pictogram +- +- +- Text only +- Alleen tekst +- +- +- Text beside icon +- Tekst naast pictogram +- +- +- Text under icon +- Tekst onder pictogram +- +- +- Follow style +- Volg stijl +- +- +- Reset Settings? +- Instellingen herstellen? +- +- +- Are you sure you want to reset all general and security settings to default? +- Weet je zeker dat je de algemene en beveiligingsinstellingen opnieuw wilt instellen? +- +- +- Monochrome (light) +- Monochroom (licht) +- +- +- Monochrome (dark) +- Monochroom (donker) +- +- +- Colorful +- Kleurrijk +- +- +- You must restart the application to set the new language. Would you like to restart now? +- Je moet de toepassing opnieuw starten om de nieuwe taal in te stellen. Wil je dat nu doen? +- +- +- +- ApplicationSettingsWidgetGeneral +- +- Basic Settings +- Basisinstellingen +- +- +- Startup +- Opstarten +- +- +- Start only a single instance of KeePassXC +- Start niet meer dan één instantie van KeePassXC +- +- +- Minimize window at application startup +- Scherm minimaliseren bij het opstarten +- +- +- File Management +- Bestandsbeheer +- +- +- Backup database file before saving +- Back-up databasebestand voor het opslaan +- +- +- Automatically save after every change +- Automatisch opslaan na iedere wijziging +- +- +- Automatically reload the database when modified externally +- Database automatisch opnieuw laden als deze van buitenaf is gewijzigd +- +- +- Entry Management +- Itembeheer +- +- +- Use group icon on entry creation +- Groepspictogram toepassen bij nieuwe items +- +- +- Minimize instead of app exit +- Minimaliseren in plaats van app afsluiten +- +- +- Show a system tray icon +- Pictogram in het systeemvak weergeven +- +- +- Hide window to system tray when minimized +- Minimaliseren naar systeemvak +- +- +- Auto-Type +- Auto-type +- +- +- Use entry title to match windows for global Auto-Type +- Gebruik naam van item als vensternaam voor Auto-type +- +- +- Use entry URL to match windows for global Auto-Type +- Laat URL overeenkomen met item bij Auto-type +- +- +- Always ask before performing Auto-Type +- Altijd vragen voor toepassen Auto-type +- +- +- ms +- Milliseconds +- ms +- +- +- Movable toolbar +- Verplaatsbare werkbalk +- +- +- Remember previously used databases +- Laatstgebruikte databases onthouden +- +- +- Load previously open databases on startup +- Laatstgebruikte databases openen bij het opstarten +- +- +- Remember database key files and security dongles +- Laatstgebruikte sleutelbestanden en beveiligingssticks onthouden +- +- +- Check for updates at application startup once per week +- Controleer eens per week op updates bij het opstarten van het programma +- +- +- Include beta releases when checking for updates +- Zoek ook naar bèta-releases bij het controleren op updates +- +- +- Language: +- Taal: +- +- +- (restart program to activate) +- (programma opnieuw starten om te activeren) +- +- +- Minimize window after unlocking database +- Venster minimaliseren na ontgrendelen van database +- +- +- Minimize when opening a URL +- Minimaliseren bij het openen van een URL +- +- +- Hide window when copying to clipboard +- Venster verbergen bij kopiëren naar klembord +- +- +- Minimize +- Minimaliseren +- +- +- Drop to background +- Naar achtergrond verplaatsen +- +- +- Favicon download timeout: +- Favicon download time-out: +- +- +- Website icon download timeout in seconds +- Websitepictogram download time-out in seconden +- +- +- sec +- Seconds +- sec +- +- +- Toolbar button style +- Knopstijl van de werkbalk +- +- +- Language selection +- Taalkeuze +- +- +- Global auto-type shortcut +- Globale sneltoets voor Auto-type +- +- +- Auto-type character typing delay milliseconds +- Auto-typevertraging milliseconden +- +- +- Auto-type start delay milliseconds +- Auto-type startvertraging milliseconden +- +- +- Automatically launch KeePassXC at system startup +- KeePassXC automatisch opstarten met het systeem +- +- +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- Databasebestanden veilig opslaan (uitschakelen bij problemen met Dropbox, enz.) +- +- +- User Interface +- Gebruikersomgeving +- +- +- Toolbar button style: +- Knopstijl van de werkbalk: +- +- +- Use monospaced font for notes +- Mono-lettertype gebruiken voor notities +- +- +- Tray icon type: +- Systeemvak-pictogram: +- +- +- Reset settings to default… +- Standaardinstellingen terugzetten... +- +- +- Auto-Type typing delay: +- Auto-type typevertraging: +- +- +- Global Auto-Type shortcut: +- Algemene Auto-type sneltoets: +- +- +- Auto-Type start delay: +- Auto-type startvertraging: +- +- +- Automatically save when locking database +- Automatisch opslaan bij het vergrendelen van de database +- +- +- Automatically save non-data changes when locking database +- Automatisch niet-gegevens wijzigingen opslaan bij het vergrendelen van de database +- +- +- Tray icon type +- Systeemvak-pictogram +- +- +- +- ApplicationSettingsWidgetSecurity +- +- Timeouts +- Time-outs +- +- +- Clear clipboard after +- Klembord wissen na +- +- +- sec +- Seconds +- sec +- +- +- Lock databases after inactivity of +- Databases vergrendelen na inactiviteit van +- +- +- min +- min +- +- +- Forget TouchID after inactivity of +- Touch ID vergeten na inactiviteit van +- +- +- Convenience +- Gebruiksgemak +- +- +- Lock databases when session is locked or lid is closed +- Databases vergrendelen als de gebruikerssessie wordt vergrendeld of bij het sluiten van het deksel +- +- +- Forget TouchID when session is locked or lid is closed +- Touch ID vergeten wanneer sessie wordt vergrendeld of deksel wordt gesloten +- +- +- Lock databases after minimizing the window +- Databases vergrendelen bij het minimaliseren van het venster +- +- +- Re-lock previously locked database after performing Auto-Type +- Vergrendelde database na Auto-type weer vergrendelen +- +- +- Hide passwords in the entry preview panel +- Wachtwoorden in voorvertoning verbergen +- +- +- Hide entry notes by default +- Notities standaard verbergen +- +- +- Privacy +- Privacy +- +- +- Use DuckDuckGo service to download website icons +- DuckDuckGo gebruiken om websitepictogrammen te downloaden +- +- +- Clipboard clear seconds +- Klembord wissen in seconden +- +- +- Touch ID inactivity reset +- Touch ID inactiviteit herstellen +- +- +- Database lock timeout seconds +- Database vergrendeling wachttijd seconden +- +- +- min +- Minutes +- min +- +- +- Clear search query after +- Zoekopdracht wissen na +- +- +- Require password repeat when it is visible +- Herhaling vereisen wanneer het wachtwoord zichtbaar is +- +- +- Hide passwords when editing them +- Wachtwoord verbergen tijdens bewerken +- +- +- Use placeholder for empty password fields +- Tijdelijke aanduiding gebruiken voor lege wachtwoordvelden +- +- +- +- AutoType +- +- Couldn't find an entry that matches the window title: +- Kon geen item vinden dat overeenkomt met de vensternaam: +- +- +- Auto-Type - KeePassXC +- Auto-type - KeePassXC +- +- +- Auto-Type +- Auto-type +- +- +- The Syntax of your Auto-Type statement is incorrect! +- De syntaxis van de Auto-type opdracht is onjuist! +- +- +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- Deze Auto-type opdracht bevat een zeer lange vertraging. Wil je echt doorgaan? +- +- +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- Deze Auto-type opdracht bevat zeer trage toetsaanslagen. Wil je echt doorgaan? +- +- +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- Deze Auto-type opdracht bevat elementen die zeer vaak worden herhaald. Wil je echt doorgaan? +- +- +- Permission Required +- Toestemming vereist +- +- +- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC heeft de Toegankelijkheid-machtiging nodig om invoerniveau Auto-type te kunnen uitvoeren. Als je de machtiging al gegeven hebt, is het mogelijk dat je KeePassXC opnieuw moet opstarten. +- +- +- +- AutoTypeAssociationsModel +- +- Window +- Venster +- +- +- Sequence +- Tekenreeks +- +- +- Default sequence +- Standaard tekenreeks +- +- +- +- AutoTypeMatchModel +- +- Group +- Groep +- +- +- Title +- Naam +- +- +- Username +- Gebruikersnaam +- +- +- Sequence +- Tekenreeks +- +- +- +- AutoTypeMatchView +- +- Copy &username +- &Gebruikersnaam kopiëren +- +- +- Copy &password +- &Wachtwoord kopiëren +- +- +- +- AutoTypePlatformMac +- +- Permission Required +- Toestemming vereist +- +- +- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC heeft de Toegankelijkheid- en Schermopname-machtiging nodig om globale Auto-type te kunnen uitvoeren. Schermopname is benodigd om het venster te gebruiken om invoer te kunnen vinden. Als je de machtiging al gegeven hebt, is het mogelijk dat je KeePassXC opnieuw moet opstarten. +- +- +- +- AutoTypeSelectDialog +- +- Auto-Type - KeePassXC +- Auto-type - KeePassXC +- +- +- Select entry to Auto-Type: +- Kies item om automatisch in te vullen: +- +- +- Search... +- Zoeken… +- +- +- +- BrowserAccessControlDialog +- +- KeePassXC - Browser Access Request +- KeePassXC - Verzoek om browsertoegang +- +- +- %1 is requesting access to the following entries: +- %1 vraagt toegang tot de volgende vermeldingen: +- +- +- Remember access to checked entries +- Onthoud de toegang tot aangevinkte vermeldingen +- +- +- Remember +- Onthouden +- +- +- Allow access to entries +- Toegang tot vermeldingen toestaan +- +- +- Allow Selected +- Selectie toestaan +- +- +- Deny All +- Alles weigeren +- +- +- Disable for this site +- Uitschakelen voor deze website +- +- +- +- BrowserEntrySaveDialog +- +- KeePassXC-Browser Save Entry +- KeePassXC-Browser: Item opslaan +- +- +- Ok +- Oké +- +- +- Cancel +- Annuleren +- +- +- You have multiple databases open. +-Please select the correct database for saving credentials. +- Er zijn meerdere databases geopend. +-Selecteer de database voor het opslaan van de inloggegevens. +- +- +- +- BrowserService +- +- KeePassXC: New key association request +- KeePassXC: Nieuw verzoek voor sleutelkoppeling +- +- +- Save and allow access +- Opslaan en toegang verlenen +- +- +- KeePassXC: Overwrite existing key? +- KeePassXC: Bestaande sleutel overschrijven? +- +- +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- Een gedeelde coderingssleutel met de naam "%1" bestaat al. +-Wil je deze overschrijven? +- +- +- KeePassXC: Update Entry +- KeePassXC: Item bijwerken +- +- +- Do you want to update the information in %1 - %2? +- Wil je de gegevens in %1 - %2 bijwerken? +- +- +- Abort +- Afbreken +- +- +- Converting attributes to custom data… +- Kenmerken worden omgezet in aangepaste gegevens... +- +- +- KeePassXC: Converted KeePassHTTP attributes +- KeePassXC: Omgezette KeePassHTTP-kenmerken +- +- +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- Kenmerken van %1 item(s) is/zijn omgezet. +-%2 sleutels naar aangepaste gegevens verplaatst. +- +- +- Successfully moved %n keys to custom data. +- Sleutel is verplaats naar speciale data.%n Sleutels zijn verplaatst naar aangepaste gegevens. +- +- +- KeePassXC: No entry with KeePassHTTP attributes found! +- KeePassXC: Geen item met KeePassHTTP-kenmerken gevonden! +- +- +- The active database does not contain an entry with KeePassHTTP attributes. +- De actieve database bevat geen item met KeePassHTTP-kenmerken. +- +- +- KeePassXC: Legacy browser integration settings detected +- KeePassXC: instellingen voor oudere browserintegratie gedetecteerd +- +- +- KeePassXC: Create a new group +- KeePassXC: Een nieuwe groep aanmaken +- +- +- A request for creating a new group "%1" has been received. +-Do you want to create this group? +- +- Een aanvraag voor het aanmaken van een nieuwe groep '%1' werd ontvangen. +-Wil je deze groep aanmaken? +- +- +- +- Your KeePassXC-Browser settings need to be moved into the database settings. +-This is necessary to maintain your current browser connections. +-Would you like to migrate your existing settings now? +- De KeePassXC-Browser instellingen moeten worden verplaatst naar de instellingen-database. +-Dit is nodig om de huidige browserverbindingen te behouden. +-Wil je de bestaande instellingen nu migreren? +- +- +- Don't show this warning again +- Deze waarschuwing niet meer geven +- +- +- You have received an association request for the following database: +-%1 +- +-Give the connection a unique name or ID, for example: +-chrome-laptop. +- Je hebt een associatieverzoek ontvangen voor de volgende database: +-%1 +- +-Geef de verbinding een unieke naam of ID, voorbeeld: +-chrome-laptop +- +- +- +- BrowserSettingsWidget +- +- Dialog +- Dialoog +- +- +- This is required for accessing your databases with KeePassXC-Browser +- Dit is vereist voor toegang tot jouw databases met KeePassXC-Browser +- +- +- Enable browser integration +- Browserintegratie inschakelen +- +- +- General +- Algemeen +- +- +- Browsers installed as snaps are currently not supported. +- Browsers die als snaps zijn geïnstalleerd, worden momenteel niet ondersteund. +- +- +- Enable integration for these browsers: +- Activeer integratie voor deze browsers: +- +- +- Vivaldi +- Vivaldi +- +- +- &Edge +- &Edge +- +- +- Firefox +- Firefox +- +- +- Tor Browser +- Tor Browser +- +- +- Brave +- Brave +- +- +- Google Chrome +- Google Chrome +- +- +- Chromium +- Chromium +- +- +- Show a notification when credentials are requested +- Credentials mean login data requested via browser extension +- Toon een melding wanneer om referenties wordt gevraagd +- +- +- Request to unlock the database if it is locked +- Verzoek om ontgrendeling van de database als deze is vergrendeld +- +- +- Only entries with the same scheme (http://, https://, ...) are returned. +- Alleen items van hetzelfde schema (http://, https://, …) worden gegeven. +- +- +- Match URL scheme (e.g., https://...) +- Overeenkomstig URL-schema (bijv. https://...) +- +- +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- Geeft alleen de beste overeenkomsten terug voor een specifieke URL in plaats van alle items voor het hele domein. +- +- +- Return only best-matching credentials +- Geef alleen best overeenkomende inloggegevens +- +- +- Returns expired credentials. String [expired] is added to the title. +- Geeft verlopen inloggegevens. Woord [expired] is aan de titel toegevoegd. +- +- +- Allow returning expired credentials +- Verlopen inloggegevens toestaan +- +- +- All databases connected to the extension will return matching credentials. +- Alle databases verbonden met de extensie kunnen overeenkomende inloggegevens geven. +- +- +- Search in all opened databases for matching credentials +- Credentials mean login data requested via browser extension +- Zoek in alle geopende databases naar overeenkomende inloggegevens +- +- +- Sort matching credentials by title +- Credentials mean login data requested via browser extension +- Sorteer inloggegevens op titel +- +- +- Sort matching credentials by username +- Credentials mean login data requested via browser extension +- Sorteer inloggegevens op gebruikersnaam +- +- +- Advanced +- Geavanceerd +- +- +- Never ask before accessing credentials +- Credentials mean login data requested via browser extension +- Nooit waarschuwen bij toegang tot logingegevens +- +- +- Never ask before updating credentials +- Credentials mean login data requested via browser extension +- Nooit waarschuwen bij bijwerken van inloggegevens +- +- +- Do not ask permission for HTTP Basic Auth +- An extra HTTP Basic Auth setting +- Vraag geen toestemming voor HTTP Basic Auth +- +- +- Automatically creating or updating string fields is not supported. +- Het automatisch aanmaken of wijzigen van tekenreeks-velden wordt niet ondersteund. +- +- +- Return advanced string fields which start with "KPH: " +- Lever geavanceerde tekenreeksvelden die beginnen met "KPH:" +- +- +- Don't display the popup suggesting migration of legacy KeePassHTTP settings. +- Laat de pop-up die de migratie van KeePassHTTP naar KeePassXC-Browser aanbiedt, niet meer zien. +- +- +- Do not prompt for KeePassHTTP settings migration. +- Vraag niet om migratie van KeePassHTTP-instellingen. +- +- +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- Wijzig bij het opstarten automatisch het zoekpad van KeePassXC of keepassxc-proxy naar de native messaging scripts. +- +- +- Update native messaging manifest files at startup +- Native messaging-manifestbestanden bij het opstarten bijwerken +- +- +- Use a custom proxy location if you installed a proxy manually. +- Gebruik een aangepaste proxy-locatie als je zelf een proxy hebt geïnstalleerd. +- +- +- Use a custom proxy location: +- Meant is the proxy for KeePassXC-Browser +- Aangepaste proxy-locatie toepassen: +- +- +- Custom proxy location field +- Handmatig Proxy invulveld +- +- +- Browser for custom proxy file +- Blader naar eigen Proxy configuratiebestand +- +- +- Browse... +- Button for opening file dialog +- Bladeren… +- +- +- Use a custom browser configuration location: +- Aangepaste locatie voor de browserconfiguratie gebruiken: +- +- +- Browser type: +- Browser-type: +- +- +- Toolbar button style +- Knopstijl van de werkbalk +- +- +- Config Location: +- Locatie configuratiebestand: +- +- +- Custom browser location field +- Aangepast locatieveld van de browser +- +- +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- +- +- Browse for custom browser path +- Blader naar een aangepast browserpad +- +- +- Custom extension ID: +- Aangepast extensie-ID: +- +- +- Custom extension ID +- Aangepast extensie-ID +- +- +- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 +- Vanwege de Snap-sandboxing moet je een script uitvoeren waarmee browserintegratie mogelijk wordt. <br /> Je kunt dit script vinden op %1 +- +- +- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 +- KeePassXC-Browser is nodig om de integratie met de browser te laten werken. <br /> Download het voor %1 en %2 en %3. %4. +- +- +- Please see special instructions for browser extension use below +- Raadpleeg onderstaande speciale instructies voor gebruik van browserextensie +- +- +- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. +- Fout:</b> De aangepaste proxy-locatie is niet gevonden!<br/>Browserintegratie WERKT NIET zonder de proxy-applicatie. +- +- +- <b>Warning:</b> The following options can be dangerous! +- <b>Waarschuwing:</b> De volgende opties kunnen gevaarlijk zijn! +- +- +- Executable Files +- Uitvoerbare bestanden +- +- +- All Files +- Alle bestanden +- +- +- Select custom proxy location +- Selecteer aangepaste proxy-locatie +- +- +- Select native messaging host folder location +- Selecteer de locatie van de native messaging-hostmap +- +- +- +- CloneDialog +- +- Clone Options +- Opties dupliceren +- +- +- Append ' - Clone' to title +- Voeg ' - Duplicaat' toe aan naam +- +- +- Replace username and password with references +- Gebruikersnaam en wachtwoord vervangen door referenties +- +- +- Copy history +- Historie kopiëren +- +- +- +- CsvImportWidget +- +- Import CSV fields +- CSV-velden importeren +- +- +- filename +- bestandsnaam +- +- +- size, rows, columns +- grootte, rijen, kolommen +- +- +- Encoding +- Codering +- +- +- Codec +- Codec +- +- +- Text is qualified by +- Tekst staat tussen +- +- +- Fields are separated by +- Velden worden gescheiden door +- +- +- Comments start with +- Commentaar start met +- +- +- Consider '\' an escape character +- Beschouw '\' als escape-teken +- +- +- Preview +- Voorvertoning +- +- +- Imported from CSV file +- Geïmporteerd uit CSV-bestand +- +- +- Original data: +- Originele gegevens: +- +- +- Error +- Fout +- +- +- Error(s) detected in CSV file! +- Fout(en) gevonden in CSV-bestand! +- +- +- [%n more message(s) skipped] +- [%n meer bericht(en) overgeslagen][%n bericht(en) overgeslagen] +- +- +- CSV import: writer has errors: +-%1 +- CSV importeren: schrijver heeft fouten: +-%1 +- +- +- Text qualification +- Tekstkwalificatie +- +- +- Field separation +- Veldscheiding +- +- +- Number of header lines to discard +- Aantal te negeren kopregels +- +- +- CSV import preview +- CSV import voorbeeld +- +- +- Column Association +- Kolomverwijzing +- +- +- Last Modified +- Laatst bewerkt +- +- +- Password +- Wachtwoord +- +- +- Created +- Aangemaakt +- +- +- Notes +- Notities +- +- +- Title +- Naam +- +- +- Group +- Groep +- +- +- URL +- URL +- +- +- Username +- Gebruikersnaam +- +- +- Header lines skipped +- Koptekstregels overgeslagen +- +- +- First line has field names +- De eerste regel bevat veldnamen +- +- +- Not Present +- Niet aanwezig +- +- +- Column %1 +- Kolom %1 +- +- +- TOTP +- TOTP +- +- +- Icon +- Pictogram +- +- +- +- CsvParserModel +- +- %n column(s) +- %n kolom%n kolom(men) +- +- +- %1, %2, %3 +- file info: bytes, rows, columns +- %1, %2, %3 +- +- +- %n byte(s) +- %n byte (s)%n byte(s) +- +- +- %n row(s) +- %n rij(en)%n rij(en) +- +- +- +- Database +- +- File %1 does not exist. +- Bestand %1 bestaat niet. +- +- +- Unable to open file %1. +- Kan bestand %1 niet openen. +- +- +- Error while reading the database: %1 +- Fout bij het lezen van de database: %1 +- +- +- File cannot be written as it is opened in read-only mode. +- Bestand kan niet worden geschreven omdat het in de alleen-lezen modus is geopend. +- +- +- Key not transformed. This is a bug, please report it to the developers! +- Sleutel is niet getransformeerd. Dit is een fout, rapporteer deze alsjeblieft aan de ontwikkelaars! +- +- +- %1 +-Backup database located at %2 +- %1 +-Back-up databestand op %2 +- +- +- Could not save, database does not point to a valid file. +- Kan niet opslaan. Database verwijst niet naar een geldig bestand. +- +- +- Could not save, database file is read-only. +- Kan niet opslaan. Databasebestand is alleen-lezen. +- +- +- Database file has unmerged changes. +- Databasebestand heeft niet opgeslagen gegevens. +- +- +- Recycle Bin +- Prullenbak +- +- +- Passwords +- Root group name +- Wachtwoorden +- +- +- Database save is already in progress. +- Database wordt opgeslagen. +- +- +- Could not save, database has not been initialized! +- Niet opgeslagen, database is niet geïnitialiseerd! +- +- +- +- DatabaseOpenDialog +- +- Unlock Database - KeePassXC +- Database ontgrendelen - KeePassXC +- +- +- +- DatabaseOpenWidget +- +- Key File: +- Sleutelbestand: +- +- +- Refresh +- Vernieuwen +- +- +- Don't show this warning again +- Deze waarschuwing niet meer geven +- +- +- All files +- Alle bestanden +- +- +- Key files +- Sleutelbestanden +- +- +- Select key file +- Kies sleutelbestand +- +- +- Failed to open key file: %1 +- Kon sleutelbestand niet openen: %1 +- +- +- Unlock KeePassXC Database +- KeePassXC-database ontgrendelen +- +- +- Enter Password: +- Geef wachtwoord: +- +- +- Password field +- Wachtwoord invulveld +- +- +- Hardware key slot selection +- Hardwaresleutel positie selectie +- +- +- Browse for key file +- Blader naar sleutelbestand +- +- +- Browse... +- Bladeren… +- +- +- Refresh hardware tokens +- Hardwaretoken verversen +- +- +- Hardware Key: +- Hardwaresleutel: +- +- +- Hardware key help +- Hardwaresleutelhulp +- +- +- TouchID for Quick Unlock +- Touch ID voor snelle ontgrendeling +- +- +- Unlock failed and no password given +- Ontgrendeling mislukt en geen wachtwoord ingevoerd +- +- +- Unlocking the database failed and you did not enter a password. +-Do you want to retry with an "empty" password instead? +- +-To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. +- Het ontgrendelen van de database is mislukt en je hebt geen wachtwoord ingevoerd. +-Wil je het opnieuw proberen met een "leeg" wachtwoord? +- +-Om deze fout te voorkomen ga je naar "Database instellingen.../Beveiliging" en herstel daar het wachtwoord. +- +- +- Retry with empty password +- Probeer opnieuw met leeg wachtwoord +- +- +- Enter Additional Credentials (if any): +- Voer eventuele aanvullende inloggegevens in: +- +- +- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +-<p>Click for more information...</p> +- <p>Je kunt een hardwarebeveiligingssleutel gebruiken, zoals een <strong>YubiKey</strong> of <strong>OnlyKey</strong> met posities (slots) geconfigureerd voor HMAC-SHA1.</p> +-<p>Klik voor meer informatie...</p> +- +- +- Key file help +- Sleutelbestandhulp +- +- +- ? +- ? +- +- +- Cannot use database file as key file +- Kan database niet als sleutelbestand gebruiken +- +- +- You cannot use your database file as a key file. +-If you do not have a key file, please leave the field empty. +- Je kunt je database niet als sleutelbestand gebruiken. +-Als je geen sleutelbestand hebt laat je het veld leeg. +- +- +- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> +- <p>Naast een wachtwoord kan je een geheim bestand gebruiken om de beveiliging van je database te verbeteren. Dit bestand kan worden gegenereerd in de beveiligingsinstellingen van je database.</p><p>Dit is <strong>niet</strong> jouw *.kdbx database-bestand!<br>Laat dit veld leeg als je geen sleutelbestand gebruikt.</p><p>Klik hier voor meer informatie...</p> +- +- +- Key file to unlock the database +- Sleutelbestand om de database te ontgrendelen +- +- +- Please touch the button on your YubiKey! +- Druk op de knop van je YubiKey! +- +- +- Detecting hardware keys… +- Hardwaresleutels detecteren... +- +- +- No hardware keys detected +- Geen hardwaresleutels gedetecteerd +- +- +- Select hardware key… +- Selecteer hardwaresleutel... +- +- +- Old key file format +- +- +- +- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> +- +- +- +- +- DatabaseSettingWidgetMetaData +- +- Passwords +- Wachtwoorden +- +- +- +- DatabaseSettingsDialog +- +- Advanced Settings +- Geavanceerde instellingen +- +- +- General +- Algemeen +- +- +- Security +- Beveiliging +- +- +- Encryption Settings +- Versleutelingsinstellingen +- +- +- Browser Integration +- Browserintegratie +- +- +- Database Credentials +- Databasegegevens +- +- +- +- DatabaseSettingsWidgetBrowser +- +- KeePassXC-Browser settings +- KeePassXC-Browser instellingen +- +- +- Stored keys +- Opgeslagen sleutels +- +- +- Remove +- Verwijderen +- +- +- Delete the selected key? +- Geselecteerde sleutel verwijderen? +- +- +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- Wil je de geselecteerde sleutel echt verwijderen? +-Hierdoor werkt de verbinding met de browserextensie mogelijk niet meer. +- +- +- Key +- Sleutel +- +- +- Value +- Waarde +- +- +- Enable Browser Integration to access these settings. +- Activeer browserintegratie om deze instellingen te kunnen wijzigen. +- +- +- Disconnect all browsers +- Verbreek de verbinding met alle browsers +- +- +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- Wil je echt de verbinding met alle browsers verbreken? +-Hierdoor werkt de verbinding met de browserextensie mogelijk niet meer. +- +- +- KeePassXC: No keys found +- KeePassXC: Geen sleutels gevonden +- +- +- No shared encryption keys found in KeePassXC settings. +- Geen gedeelde coderingssleutels gevonden in KeePassXC instellingen. +- +- +- KeePassXC: Removed keys from database +- KeePassXC: Sleutels uit database verwijderd +- +- +- Successfully removed %n encryption key(s) from KeePassXC settings. +- %n coderingssleutel uit KeePassXC instellingen verwijderd.Er zijn %n coderingssleutel(s) uit KeePassXC-instellingen verwijderd. +- +- +- Forget all site-specific settings on entries +- Vergeet alle site-specifieke instellingen bij items +- +- +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- Wil je echt alle site-specifieke instellingen bij items vergeten? Machtigingen voor toegang zullen worden ingetrokken. +- +- +- Removing stored permissions… +- Opgeslagen machtigingen verwijderen… +- +- +- Abort +- Afbreken +- +- +- KeePassXC: Removed permissions +- KeePassXC: machtigingen verwijderd +- +- +- Successfully removed permissions from %n entry(s). +- Machtigingen zijn verwijderd uit %n item(s).Machtigingen zijn verwijderd uit %n item(s). +- +- +- KeePassXC: No entry with permissions found! +- KeePassXC: Geen item met machtigingen gevonden! +- +- +- The active database does not contain an entry with permissions. +- De actieve database bevat geen items met machtigingen. +- +- +- Move KeePassHTTP attributes to custom data +- KeePassHTTP-kenmerken naar aangepaste gegevens verplaasen +- +- +- Do you really want to move all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- Wil je echt alle instellingen voor de oudere browserintegratie veranderen naar de nieuwste standaard? +-Dit is nodig om compatibiliteit met de browserextensie te behouden. +- +- +- Stored browser keys +- Opgeslagen browsersleutels +- +- +- Remove selected key +- Geselecteerde sleutel verwijderen +- +- +- Move KeePassHTTP attributes to KeePassXC-Browser custom data +- Verplaats KeePassHTTP-kenmerken naar aangepaste KeePassXC-Browser-gegevens +- +- +- Refresh database root group ID +- Database-rootgroep-ID vernieuwen +- +- +- Created +- Aangemaakt +- +- +- Refresh database ID +- Database-ID vernieuwen +- +- +- Do you really want refresh the database ID? +-This is only necessary if your database is a copy of another and the browser extension cannot connect. +- Wilt je echt de database-ID vernieuwen? +-Dit is alleen nodig als je database een kopie is van een andere en de browserextensie geen verbinding kan maken. +- +- +- +- DatabaseSettingsWidgetDatabaseKey +- +- Add additional protection... +- Aanvullende beveiliging toevoegen... +- +- +- No password set +- Geen wachtwoord ingesteld +- +- +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- WAARSCHUWING! Je hebt geen wachtwoord ingesteld. Een database gebruiken zonder wachtwoord wordt sterk afgeraden! +- +-Weet je zeker dat je door wilt gaan zonder een wachtwoord? +- +- +- Continue without password +- Doorgaan zonder wachtwoord +- +- +- No encryption key added +- Geen coderingssleutel toegevoegd +- +- +- You must add at least one encryption key to secure your database! +- Je moet minstens één coderingssleutel aan je database toevoegen om deze te beveiligen! +- +- +- Unknown error +- Onbekende fout +- +- +- Failed to change database credentials +- Veranderen van databasereferenties is mislukt +- +- +- +- DatabaseSettingsWidgetEncryption +- +- Encryption Algorithm: +- Versleutelingsalgoritme: +- +- +- AES: 256 Bit (default) +- AES: 256 bit (standaard) +- +- +- Twofish: 256 Bit +- Twofish: 256 bit +- +- +- Key Derivation Function: +- Sleutel-afleidingsfunctie: +- +- +- Transform rounds: +- Transformatie-iteraties: +- +- +- Memory Usage: +- Geheugengebruik: +- +- +- Parallelism: +- Parallelliteit: +- +- +- Decryption Time: +- Decoderingstijd: +- +- +- ?? s +- ?? s +- +- +- Change +- Wijzigen +- +- +- Higher values offer more protection, but opening the database will take longer. +- Hogere waarden bieden meer bescherming, maar laten het openen van de database langer duren. +- +- +- Database format: +- Database-indeling: +- +- +- This is only important if you need to use your database with other programs. +- Dit is alleen van belang als je de database met andere programma's wil gebruiken. +- +- +- KDBX 4.0 (recommended) +- KDBX 4.0 (aanbevolen) +- +- +- KDBX 3.1 +- KDBX 3.1 +- +- +- unchanged +- Database decryption time is unchanged +- ongewijzigd +- +- +- Number of rounds too high +- Key transformation rounds +- Aantal iteraties te hoog +- +- +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or days (or even longer) to open! +- Je gebruikt een zeer groot aantal sleuteltransformatie-iteraties met Argon2. +- +-Als je dit aantal aanhoudt, kan het uren, dagen (of zelfs langer) duren om de database te openen! +- +- +- Understood, keep number +- Begrepen, aantal aanhouden +- +- +- Cancel +- Annuleren +- +- +- Number of rounds too low +- Key transformation rounds +- Aantal iteraties te laag +- +- +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database may be too easy to crack! +- Je gebruikt een zeer laag aantal sleuteltransformatie-iteraties met AES-KDF. +- +-Als je dit aantal aanhoudt is het mogelijk heel gemakkelijk om de database te kraken! +- +- +- KDF unchanged +- KDF ongewijzigd +- +- +- Failed to transform key with new KDF parameters; KDF unchanged. +- Het transformeren van de sleutel met de nieuwe KDF-parameters is mislukt; KDF is ongewijzigd. +- +- +- MiB +- Abbreviation for Mebibytes (KDF settings) +- MiB MiB +- +- +- thread(s) +- Threads for parallel execution (KDF settings) +- thread(s)thread(s) +- +- +- Change existing decryption time +- Huidige decoderingstijd wijzigen +- +- +- Decryption time in seconds +- Decoderingstijd in seconden +- +- +- Database format +- Database-indeling +- +- +- Encryption algorithm +- Versleutelingsalgoritme +- +- +- Key derivation function +- Sleutelafleidingsfunctie +- +- +- Transform rounds +- Transformatierondes +- +- +- Memory usage +- Geheugengebruik +- +- +- Parallelism +- Parallelliteit +- +- +- ?? ms +- ?? ms +- +- +- ? s +- ? s +- +- +- +- DatabaseSettingsWidgetFdoSecrets +- +- Exposed Entries +- Beschikbare items +- +- +- Don't expose this database +- Deze database niet blootstellen +- +- +- Expose entries under this group: +- Items onder deze groep blootstellen: +- +- +- Enable Secret Service to access these settings. +- Schakel Secret Service in om toegang te krijgen tot deze instellingen. +- +- +- +- DatabaseSettingsWidgetGeneral +- +- Database Meta Data +- Database meta-gegevens +- +- +- Database name: +- Naam van de database: +- +- +- Database description: +- Beschrijving van de database: +- +- +- Default username: +- Standaard gebruikersnaam: +- +- +- History Settings +- Geschiedenis-instellingen +- +- +- Max. history items: +- Max. geschiedenisitems: +- +- +- Max. history size: +- Max. geschiedenisgrootte: +- +- +- MiB +- MiB +- +- +- Use recycle bin +- Prullenbak gebruiken +- +- +- Additional Database Settings +- Aanvullende database-instellingen +- +- +- Database name field +- Databasenaamveld +- +- +- Database description field +- Databaseomschrijvingveld +- +- +- Default username field +- Standaardgebruikersnaamveld +- +- +- Maximum number of history items per entry +- Maximum aantal vorige versies per item +- +- +- Maximum size of history per entry +- Maximale grootte van vorige versies per item +- +- +- Delete Recycle Bin +- Verwijder prullenbak +- +- +- Do you want to delete the current recycle bin and all its contents? +-This action is not reversible. +- Wil je de huidige prullenbak en al zijn inhoud verwijderen? +-Deze actie is onomkeerbaar. +- +- +- (old) +- (oud) +- +- +- Enable compression (recommended) +- Compressie inschakelen (aanbevolen) +- +- +- +- DatabaseSettingsWidgetKeeShare +- +- Sharing +- Delen +- +- +- Breadcrumb +- Broodkruimel +- +- +- Type +- Type +- +- +- Path +- Pad +- +- +- Last Signer +- Laatste Ondertekenaar +- +- +- Certificates +- Certificaten +- +- +- > +- Breadcrumb separator +- > +- +- +- +- DatabaseSettingsWidgetMetaDataSimple +- +- Database Name: +- Database naam: +- +- +- Description: +- Beschrijving: +- +- +- Database name field +- Databasenaamveld +- +- +- Database description field +- Databaseomschrijvingveld +- +- +- +- DatabaseTabWidget +- +- KeePass 2 Database +- KeePass 2-database +- +- +- All files +- Alle bestanden +- +- +- Open database +- Database openen +- +- +- CSV file +- CSV-bestand +- +- +- Merge database +- Database samenvoegen +- +- +- Open KeePass 1 database +- KeePass 1-database openen +- +- +- KeePass 1 database +- KeePass 1-database +- +- +- Export database to CSV file +- Database exporteren naar CSV-bestand +- +- +- Writing the CSV file failed. +- Schrijven van het CSV-bestand mislukt. +- +- +- Database creation error +- Fout bij het aanmaken van de database: +- +- +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- De aangemaakte database heeft geen sleutel of KDF en kan daarom niet worden opgeslagen. +-Dit is zeker een fout, rapporteer dit aan de ontwikkelaars. +- +- +- Select CSV file +- Selecteer CSV-bestand +- +- +- New Database +- Nieuwe database +- +- +- %1 [New Database] +- Database tab name modifier +- %1 [nieuwe database] +- +- +- %1 [Locked] +- Database tab name modifier +- %1 [vergrendeld] +- +- +- %1 [Read-only] +- Database tab name modifier +- %1 [alleen lezen] +- +- +- Failed to open %1. It either does not exist or is not accessible. +- Kon %1 niet openen. Het bestaat niet of is niet toegankelijk. +- +- +- Export database to HTML file +- Database exporteren naar HTML-bestand +- +- +- HTML file +- HTML-bestand +- +- +- Writing the HTML file failed. +- Schrijven van het HTML-bestand is mislukt. +- +- +- Export Confirmation +- Exporteerbevestiging +- +- +- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? +- Je gaat je database naar een niet-versleuteld bestand exporteren. Dit maakt je wachtwoorden en gevoelige informatie kwetsbaar! Weet je zeker dat je door wil gaan? +- +- +- Open OPVault +- OPVault openen +- +- +- +- DatabaseWidget +- +- Searching... +- Bezig met zoeken… +- +- +- Do you really want to delete the entry "%1" for good? +- Weet je zeker dat je item "%1" definitief wil verwijderen? +- +- +- Do you really want to move entry "%1" to the recycle bin? +- Weet je zeker dat je item "%1" naar de prullenbak wil verplaatsen? +- +- +- Do you really want to move %n entry(s) to the recycle bin? +- Wil je echt %n item naar de Prullenbak verplaatsen?Wil je echt %n items naar de Prullenbak verplaatsen? +- +- +- Execute command? +- Opdracht uitvoeren? +- +- +- Do you really want to execute the following command?<br><br>%1<br> +- Weet je zeker dat je de volgende opdracht wil uitvoeren? <br><br>%1<br> +- +- +- Remember my choice +- Mijn keuze onthouden +- +- +- Do you really want to delete the group "%1" for good? +- Weet je zeker dat je de groep "%1" wil verwijderen? +- +- +- No current database. +- Geen actuele database. +- +- +- No source database, nothing to do. +- Geen brondatabase; er valt niks te doen. +- +- +- Search Results (%1) +- Zoekresultaten (%1) +- +- +- No Results +- Geen resultaten +- +- +- File has changed +- Bestand is gewijzigd +- +- +- The database file has changed. Do you want to load the changes? +- Het database-bestand is gewijzigd. Wil je de aanpassingen inlezen? +- +- +- Merge Request +- Samenvoegingsverzoek +- +- +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- Het databasebestand is veranderd en er zijn niet-opgeslagen wijzigingen. +-Wil je de wijzigingen samenvoegen? +- +- +- Empty recycle bin? +- Prullenbak legen? +- +- +- Are you sure you want to permanently delete everything from your recycle bin? +- Weet je zeker dat je alles definitief uit de prullenbak wil verwijderen? +- +- +- Do you really want to delete %n entry(s) for good? +- Wilt u echt %n item(s) voorgoed verwijderen?Weet je zeker dat je %n item(s) definitief wilt verwijderen? +- +- +- Delete entry(s)? +- Verwijderen entry(s)?Item(s) verwijderen? +- +- +- Move entry(s) to recycle bin? +- Item(s) naar prullenbak verplaatsen?Item(s) naar prullenbak verplaatsen? +- +- +- Lock Database? +- Database vergrendelen? +- +- +- You are editing an entry. Discard changes and lock anyway? +- Je bewerkt een item. De wijzigingen verwerpen en toch vergrendelen? +- +- +- "%1" was modified. +-Save changes? +- "%1" is aangepast. +-Wijzigingen opslaan? +- +- +- Database was modified. +-Save changes? +- Database is gewijzigd. +-Wijzigingen opslaan? +- +- +- Save changes? +- Wijzigingen opslaan? +- +- +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- Kan het nieuwe databasebestand niet openen tijdens het automatisch opnieuw laden. +-Fout: %1 +- +- +- Disable safe saves? +- Veilig opslaan uitschakelen? +- +- +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- KeePassXC heeft de database meerdere keren niet kunnen opslaan. Dit wordt waarschijnlijk veroorzaakt doordat een synchronisatie-dienst het bestand vergrendeld houdt. +-Veilig opslaan uitschakelen en opnieuw proberen? +- +- +- Passwords +- Wachtwoorden +- +- +- Save database as +- Database opslaan als +- +- +- KeePass 2 Database +- KeePass 2-database +- +- +- Replace references to entry? +- Referenties naar items vervangen? +- +- +- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? +- Vermelding "%1" heeft %2 reference(s). Wilt u verwijzingen vervangen door waarden, dit bericht overslaan of verwijderen toch?Item "%1" heeft %2 referentie(s). Wil je de verwijzingen vervangen door waarden, dit bericht overslaan, of toch verwijderen ? +- +- +- Delete group +- Groep verwijderen +- +- +- Move group to recycle bin? +- Groep naar prullenbak verplaatsen? +- +- +- Do you really want to move the group "%1" to the recycle bin? +- Weet je zeker dat je de groep '%1' naar de prullenbak wilt verplaatsen? +- +- +- Successfully merged the database files. +- De databasebestanden zijn samengevoegd. +- +- +- Database was not modified by merge operation. +- Database werd niet gewijzigd door het samenvoegen. +- +- +- Shared group... +- Gedeelde groep... +- +- +- Writing the database failed: %1 +- Het schrijven van de database is mislukt: %1 +- +- +- This database is opened in read-only mode. Autosave is disabled. +- De database is in alleen-lezenmodus geopend. Automatisch opslaan is uitgeschakeld. +- +- +- Save database backup +- Database-backup opslaan +- +- +- Could not find database file: %1 +- Databasebestand is niet aangetroffen: %1 +- +- +- +- EditEntryWidget +- +- Entry +- Item +- +- +- Advanced +- Geavanceerd +- +- +- Icon +- Pictogram +- +- +- Auto-Type +- Auto-type +- +- +- Properties +- Eigenschappen +- +- +- History +- Geschiedenis +- +- +- SSH Agent +- SSH-agent +- +- +- n/a +- n.v.t. +- +- +- (encrypted) +- (versleuteld) +- +- +- Select private key +- Kies persoonlijke sleutel +- +- +- Entry history +- Item geschiedenis +- +- +- Add entry +- Item toevoegen +- +- +- Edit entry +- Item bewerken +- +- +- New attribute +- Nieuw kenmerk +- +- +- Are you sure you want to remove this attribute? +- Weet je zeker dat je dit kenmerk wil verwijderen? +- +- +- Tomorrow +- Morgen +- +- +- %n week(s) +- %n week%n weken +- +- +- %n month(s) +- %n maand%n maanden +- +- +- Entry updated successfully. +- Het item is bijgewerkt. +- +- +- New attribute %1 +- Nieuw kenmerk %1 +- +- +- %n year(s) +- %n jaar%n jaren +- +- +- Confirm Removal +- Verwijdering bevestigen +- +- +- Browser Integration +- Browserintegratie +- +- +- <empty URL> +- <empty URL> +- +- +- Are you sure you want to remove this URL? +- Weet je zeker dat je dit URL wil verwijderen? +- +- +- Reveal +- Onthullen +- +- +- Hide +- Verbergen +- +- +- Unsaved Changes +- Niet-opgeslagen wijzigingen +- +- +- Would you like to save changes to this entry? +- Wil je de wijzigingen in dit item opslaan? +- +- +- [PROTECTED] Press Reveal to view or edit +- [BESCHERMD] Druk op Onthullen om te bekijken of te bewerken +- +- +- Invalid Entry +- +- +- +- An external merge operation has invalidated this entry. +-Unfortunately, any changes made have been lost. +- +- +- +- +- EditEntryWidgetAdvanced +- +- Additional attributes +- Aanvullende kenmerken +- +- +- Add +- Toevoegen +- +- +- Remove +- Verwijderen +- +- +- Edit Name +- Naam bewerken +- +- +- Protect +- Beveiligen +- +- +- Reveal +- Onthullen +- +- +- Attachments +- Bijlagen +- +- +- Foreground Color: +- Voorgrondkleur: +- +- +- Background Color: +- Achtergrondkleur: +- +- +- Attribute selection +- Kenmerkselectie +- +- +- Attribute value +- Kenmerkwaarde +- +- +- Add a new attribute +- Een nieuw kenmerk toevoegen +- +- +- Remove selected attribute +- Gekozen kenmerk verwijderen +- +- +- Edit attribute name +- Kenmerknaam bewerken +- +- +- Toggle attribute protection +- Kenmerkbescherming aan/uit +- +- +- Show a protected attribute +- Een beschermd kenmerk weergeven +- +- +- Foreground color selection +- Voorgrondkleurselectie +- +- +- Background color selection +- Achtergrondkleurselectie +- +- +- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> +- <html><head/><body><p>Indien aangevinkt, zal het item niet verschijnen in rapportages zoals Health Check en HIBP, zelfs als het niet voldoet aan de kwaliteitseisen (bijv. wachtwoord-entropie of -hergebruik). Je kunt het vinkje plaatsen als je geen controle hebt over het wachtwoord (bijvoorbeeld als het een viercijferige pincode moet zijn) om te voorkomen dat de rapportages onoverzichtelijk worden.</p></body></html> +- +- +- Exclude from database reports +- Uitsluiten van databaserapportage +- +- +- +- EditEntryWidgetAutoType +- +- Enable Auto-Type for this entry +- Auto-type inschakelen voor dit item +- +- +- Window Associations +- Scherm-koppelingen +- +- +- + +- + +- +- +- - +- - +- +- +- Window title: +- Vensternaam: +- +- +- Use a specific sequence for this association: +- Gebruik een specifieke tekenreeks voor deze associatie. +- +- +- Custom Auto-Type sequence +- Aangepaste Auto-type tekenreeks +- +- +- Open Auto-Type help webpage +- Open Auto-type help-webpagina +- +- +- Existing window associations +- Bestaande venster koppelingen +- +- +- Add new window association +- Voeg venster koppeling toe +- +- +- Remove selected window association +- Verwijder scherm koppeling +- +- +- You can use an asterisk (*) to match everything +- Je kunt een ster (*) gebruiken om alles te vinden +- +- +- Set the window association title +- Stel de venster koppeling titel in +- +- +- You can use an asterisk to match everything +- Je kunt een sterretje gebruiken om alles te vinden +- +- +- Custom Auto-Type sequence for this window +- Aangepaste Auto-type tekenreeks voor dit venster +- +- +- Inherit default Auto-Type sequence from the group +- Standaard auto-typevolgorde van de groep overnemen +- +- +- Use custom Auto-Type sequence: +- Gebruik aangepaste Auto-typevolgorde: +- +- +- +- EditEntryWidgetBrowser +- +- These settings affect to the entry's behaviour with the browser extension. +- Deze instellingen beïnvloeden het gedrag van de browserextensie voor dit item. +- +- +- General +- Algemeen +- +- +- Skip Auto-Submit for this entry +- Automatisch indienen uitschakelen voor dit item +- +- +- Hide this entry from the browser extension +- Verberg dit item in de browserextensie +- +- +- Additional URL's +- Aanvullende URLs +- +- +- Add +- Toevoegen +- +- +- Remove +- Verwijderen +- +- +- Edit +- Bewerken +- +- +- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. +- Stuur deze instelling alleen naar de browser voor HTTP Auth-dialogen. Indien ingeschakeld, tonen normale aanmeldingsformulieren dit item niet voor selectie. +- +- +- Use this entry only with HTTP Basic Auth +- Gebruik dit item alleen met HTTP Basic Auth +- +- +- +- EditEntryWidgetHistory +- +- Show +- Tonen +- +- +- Restore +- Herstellen +- +- +- Delete +- Verwijderen +- +- +- Delete all +- Alles verwijderen +- +- +- Entry history selection +- Item geschiedenis selectie +- +- +- Show entry at selected history state +- Toon het item zoals in geselecteerde vorige versie +- +- +- Restore entry to selected history state +- Herstel het item naar de geselecteerde vorige versie +- +- +- Delete selected history state +- Verwijder geselecteerde vorige versie +- +- +- Delete all history +- Verwijder alle vorige versies +- +- +- +- EditEntryWidgetMain +- +- URL: +- URL: +- +- +- Password: +- Wachtwoord: +- +- +- Title: +- Naam: +- +- +- Presets +- Voorkeuze +- +- +- Toggle the checkbox to reveal the notes section. +- Inschakelen om de notities weer te geven. +- +- +- Username: +- Gebruikersnaam: +- +- +- Url field +- URL veld +- +- +- Download favicon for URL +- Favicon downloaden voor URL +- +- +- Password field +- Wachtwoord invulveld +- +- +- Toggle notes visible +- Laat notities wel/niet zien. +- +- +- Expiration field +- Vervaldatum veld +- +- +- Expiration Presets +- Vervaldatum voorinstellingen +- +- +- Expiration presets +- Vervaldatum voorinstellingen +- +- +- Notes field +- Notities veld +- +- +- Title field +- Titel veld +- +- +- Username field +- Gebruikersnaam veld +- +- +- Toggle expiration +- Vervaldatum wel/niet tonen +- +- +- Notes: +- Opmerkingen: +- +- +- https://example.com +- https://example.com +- +- +- Expires: +- Verloopt: +- +- +- Edit Entry +- +- +- +- +- EditEntryWidgetSSHAgent +- +- Form +- Formulier +- +- +- Remove key from agent after +- Sleutel bij agent wegnemen na +- +- +- seconds +- seconden +- +- +- Fingerprint +- Vingerafdruk +- +- +- Remove key from agent when database is closed/locked +- Sleutel bij agent wegnemen als de database wordt gesloten/vergrendeld +- +- +- Public key +- Openbare sleutel +- +- +- Add key to agent when database is opened/unlocked +- Sleutel aan agent toevoegen wanneer de database wordt geopend/ontgrendeld +- +- +- Comment +- Opmerking +- +- +- Decrypt +- Decoderen +- +- +- n/a +- n.v.t. +- +- +- Copy to clipboard +- Naar klembord kopiëren +- +- +- Private key +- Persoonlijke sleutel +- +- +- External file +- Extern bestand +- +- +- Browse... +- Button for opening file dialog +- Bladeren… +- +- +- Attachment +- Bijlage +- +- +- Add to agent +- Aan agent toevoegen +- +- +- Remove from agent +- Van agent verwijderen +- +- +- Require user confirmation when this key is used +- Bevestiging van de gebruiker vragen als deze sleutel wordt gebruikt +- +- +- Remove key from agent after specified seconds +- Verwijder de sleutel van de agent na het opgegeven aantal seconden +- +- +- Browser for key file +- Blader naar sleutelbestand +- +- +- External key file +- Extern sleutelbestand +- +- +- Select attachment file +- Selecteer bijlage bestand +- +- +- +- EditGroupWidget +- +- Group +- Groep +- +- +- Icon +- Pictogram +- +- +- Properties +- Eigenschappen +- +- +- Add group +- Groep toevoegen +- +- +- Edit group +- Groep bewerken +- +- +- Enable +- Activeren +- +- +- Disable +- Uitschakelen +- +- +- Inherit from parent group (%1) +- Overnemen van bovenliggende groep (%1) +- +- +- Entry has unsaved changes +- Het item heeft niet-opgeslagen wijzigingen +- +- +- +- EditGroupWidgetKeeShare +- +- Type: +- Type: +- +- +- Path: +- Pad: +- +- +- Password: +- Wachtwoord: +- +- +- Inactive +- Inactief +- +- +- KeeShare unsigned container +- KeeShare niet-ondertekende container +- +- +- KeeShare signed container +- KeeShare ondertekende container +- +- +- Select import source +- Selecteer bron voor import +- +- +- Select export target +- Selecteer doel voor export +- +- +- Select import/export file +- Selecteer import-/exportbestand +- +- +- Clear +- Wissen +- +- +- Import +- Importeren +- +- +- Export +- Exporteren +- +- +- Synchronize +- Synchroniseer +- +- +- Your KeePassXC version does not support sharing this container type. +-Supported extensions are: %1. +- Deze KeePassXC-versie biedt geen ondersteuning voor het delen van dit container type. +-Ondersteund zijn: %1. +- +- +- %1 is already being exported by this database. +- %1 wordt al geëxporteerd door deze database. +- +- +- %1 is already being imported by this database. +- %1 wordt al geïmporteerd door deze database. +- +- +- %1 is being imported and exported by different groups in this database. +- %1 wordt geïmporteerd en geëxporteerd door verschillende groepen in deze database. +- +- +- KeeShare is currently disabled. You can enable import/export in the application settings. +- KeeShare is a proper noun +- KeeShare is momenteel uitgeschakeld. Je kunt importeren/exporteren inschakelen in de instellingen. +- +- +- Database export is currently disabled by application settings. +- Database export is momenteel uitgeschakeld in de programma instellingen. +- +- +- Database import is currently disabled by application settings. +- Database import is momenteel uitgeschakeld in de programma instellingen. +- +- +- Sharing mode field +- Delen modus veld +- +- +- Path to share file field +- Pad naar te delen bestand veld +- +- +- Password field +- Wachtwoord invulveld +- +- +- Clear fields +- Wis velden +- +- +- Browse for share file +- Blader naar deelbestand +- +- +- Browse... +- Bladeren… +- +- +- +- EditGroupWidgetMain +- +- Name field +- Naam veld +- +- +- Notes field +- Notities veld +- +- +- Toggle expiration +- Vervaldatum wel/niet tonen +- +- +- Auto-Type toggle for this and sub groups +- Auto-type aan/uit voor deze en onderliggende groepen +- +- +- Expiration field +- Vervaldatum veld +- +- +- Search toggle for this and sub groups +- Zoeken aan/uit voor deze en onderliggende groepen +- +- +- Default auto-type sequence field +- Standaard Auto-type tekenreeks veld +- +- +- Expires: +- Verloopt: +- +- +- Use default Auto-Type sequence of parent group +- Gebruik standaard Auto-type volgorde van bovenliggende groep +- +- +- Auto-Type: +- Auto-type: +- +- +- Search: +- Zoeken: +- +- +- Notes: +- Opmerkingen: +- +- +- Name: +- Naam: +- +- +- Set default Auto-Type sequence +- Standaard Auto-type tekenreeks instellen +- +- +- Edit Group +- +- +- +- +- EditWidgetIcons +- +- Add custom icon +- Aangepast pictogram toevoegen +- +- +- Delete custom icon +- Aangepast pictogram verwijderen +- +- +- Download favicon +- Favicon downloaden +- +- +- Unable to fetch favicon. +- Kan favicon niet ophalen. +- +- +- Images +- Afbeeldingen +- +- +- All files +- Alle bestanden +- +- +- Confirm Delete +- Verwijdering bevestigen +- +- +- Select Image(s) +- Selecteer afbeelding(en) +- +- +- Successfully loaded %1 of %n icon(s) +- %1 van %n pictogram(men) geladen%1 van %n pictogram(men) geladen +- +- +- No icons were loaded +- Geen pictogrammen geladen +- +- +- %n icon(s) already exist in the database +- %n pictogram(men) al aanwezig in de database%n pictogram(men) al aanwezig in de database +- +- +- The following icon(s) failed: +- De volgende pictogram(men) mislukten:De volgende pictogram(men) mislukten: +- +- +- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? +- Dit pictogram wordt gebruikt door %n item(s) en zal worden vervangen door het standaardpictogram. Weet je zeker dat je het wilt verwijderen?Dit pictogram wordt gebruikt door %n item(s) en zal worden vervangen door het standaardpictogram. Weet je zeker dat je het wilt verwijderen? +- +- +- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security +- Je kunt de DuckDuckGo website pictogram dienst inschakelen onder Extra>Instellingen>Beveiliging +- +- +- Download favicon for URL +- Favicon downloaden voor URL +- +- +- Apply selected icon to subgroups and entries +- Gebruik het geselecteerde pictogram voor onderliggende groepen en items +- +- +- Also apply to child groups +- Ook toepassen op onderliggende groepen +- +- +- Also apply to child entries +- Ook toepassen op onderliggende items +- +- +- Also apply to all children +- Ook toepassen op alle onderliggenden +- +- +- Existing icon selected. +- Bestaand pictogram geselecteerd. +- +- +- Use default icon +- Standaardpictogram gebruiken +- +- +- Use custom icon +- Aangepast pictogram gebruiken +- +- +- Apply icon to... +- Pictogram toepassen op... +- +- +- Apply to this group only +- Alleen op deze groep toepassen +- +- +- +- EditWidgetProperties +- +- Created: +- Aangemaakt: +- +- +- Modified: +- Gewijzigd: +- +- +- Accessed: +- Toegang: +- +- +- Uuid: +- Uuid: +- +- +- Plugin Data +- Plugin-gegevens: +- +- +- Remove +- Verwijderen +- +- +- Delete plugin data? +- Plugin-gegevens verwijderen? +- +- +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- Weet je zeker dat je de geselecteerde plugin-gegevens wilt verwijderen? +-Hierdoor werken de plugins mogelijk niet meer goed. +- +- +- Key +- Sleutel +- +- +- Value +- Waarde +- +- +- Datetime created +- Datum tijd gemaakt +- +- +- Datetime modified +- Datum tijd gewijzigd +- +- +- Datetime accessed +- Datum tijd laatste toegang +- +- +- Unique ID +- Uniek ID +- +- +- Plugin data +- Plugin-gegevens +- +- +- Remove selected plugin data +- Geselecteerde plugin-gegevens verwijderen +- +- +- +- Entry +- +- %1 - Clone +- %1 - Duplicaat +- +- +- +- EntryAttachmentsModel +- +- Name +- Naam +- +- +- Size +- Grootte +- +- +- +- EntryAttachmentsWidget +- +- Form +- Formulier +- +- +- Add +- Toevoegen +- +- +- Remove +- Verwijderen +- +- +- Open +- Openen +- +- +- Save +- Opslaan +- +- +- Select files +- Kies bestanden +- +- +- Are you sure you want to remove %n attachment(s)? +- Weet je zeker dat je %n bijlage wil verwijderen?Weet je zeker dat je %n bijlagen wil verwijderen? +- +- +- Save attachments +- Bijlagen opslaan +- +- +- Unable to create directory: +-%1 +- Kan de map niet maken: +-%1 +- +- +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- Weet je zeker dat je het bestaande bestand "%1" met de bijlage wil overschrijven? +- +- +- Confirm overwrite +- Overschrijving bevestigen +- +- +- Unable to save attachments: +-%1 +- Kan de bijlagen niet opslaan: +-%1 +- +- +- Unable to open attachment: +-%1 +- Kan de bijlage niet openen: +-%1 +- +- +- Unable to open attachments: +-%1 +- Kan de bijlagen niet openen: +-%1 +- +- +- Confirm remove +- Verwijdering bevestigen +- +- +- Unable to open file(s): +-%1 +- Kan bestand niet openen: %1Kan bestand(en) niet openen: %1 +- +- +- Attachments +- Bijlagen +- +- +- Add new attachment +- Nieuwe bijlage toevoegen +- +- +- Remove selected attachment +- Geselecteerde bijlage verwijderen +- +- +- Open selected attachment +- Geselecteerde bijlage openen +- +- +- Save selected attachment to disk +- Geselecteerde bijlage opslaan +- +- +- %1 is a big file (%2 MB). +-Your database may get very large and reduce performance. +- +-Are you sure to add this file? +- %1 is een groot bestand (%2 MB). +-De database kan erg groot worden en de prestaties verminderen. +- +-Weet je zeker dat je dit bestand wilt toevoegen? +- +- +- Confirm Attachment +- Bijlage bevestigen +- +- +- +- EntryAttributesModel +- +- Name +- Naam +- +- +- +- EntryHistoryModel +- +- Last modified +- Laatst gewijzigd +- +- +- Title +- Naam +- +- +- Username +- Gebruikersnaam +- +- +- URL +- URL +- +- +- +- EntryModel +- +- Ref: +- Reference abbreviation +- Ref: +- +- +- Group +- Groep +- +- +- Title +- Naam +- +- +- Username +- Gebruikersnaam +- +- +- URL +- URL +- +- +- Never +- Nooit +- +- +- Password +- Wachtwoord +- +- +- Notes +- Notities +- +- +- Expires +- Verloopt +- +- +- Created +- Aangemaakt +- +- +- Modified +- Gewijzigd +- +- +- Accessed +- Toegang +- +- +- Attachments +- Bijlagen +- +- +- Size +- Grootte +- +- +- Group name +- Groepnaam +- +- +- Entry title +- Titel van het item +- +- +- Entry notes +- Notities bij het item +- +- +- Entry expires at +- Item verloopt op +- +- +- Creation date +- Aanmaakdatum +- +- +- Last modification date +- Datum laatste wijziging +- +- +- Last access date +- Datum laatste toegang +- +- +- Attached files +- Bijgevoegde bestanden +- +- +- Entry size +- Grootte van het item +- +- +- Has attachments +- Heeft bijlagen +- +- +- Has TOTP one-time password +- Bevat TOTP eenmalig wachtwoord +- +- +- +- EntryPreviewWidget +- +- Close +- Sluiten +- +- +- General +- Algemeen +- +- +- Username +- Gebruikersnaam +- +- +- Password +- Wachtwoord +- +- +- Expiration +- Vervaldatum +- +- +- URL +- URL +- +- +- Attributes +- Kenmerken +- +- +- Attachments +- Bijlagen +- +- +- Notes +- Notities +- +- +- Autotype +- Auto-type +- +- +- Window +- Venster +- +- +- Sequence +- Tekenreeks +- +- +- Searching +- Zoeken +- +- +- Search +- Zoeken +- +- +- Clear +- Wissen +- +- +- Never +- Nooit +- +- +- [PROTECTED] +- [BEVEILIGD] +- +- +- Enabled +- Geactiveerd +- +- +- Disabled +- Uitgeschakeld +- +- +- Share +- Delen +- +- +- Display current TOTP value +- Toon huidige TOTP-waarde +- +- +- Advanced +- Geavanceerd +- +- +- Default Sequence +- +- +- +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- attributes line +- +- +- +- +- EntryURLModel +- +- Invalid URL +- Ongeldige URL +- +- +- +- EntryView +- +- Fit to window +- Aanpassen aan venstergrootte +- +- +- Fit to contents +- Aanpassen aan inhoud +- +- +- Reset to defaults +- Standaardwaarden opnieuw instellen +- +- +- Has attachments +- Entry attachment icon toggle +- Heeft bijlagen +- +- +- Has TOTP +- Entry TOTP icon toggle +- Heeft TOTP +- +- +- +- FdoSecrets::Item +- +- Entry "%1" from database "%2" was used by %3 +- Het item "%1" van de database "%2" werd gebruikt door %3 +- +- +- +- FdoSecrets::Service +- +- Failed to register DBus service at %1.<br/> +- Kan DBus-service niet registreren op %1.<br/> +- +- +- %n Entry(s) was used by %1 +- %1 is the name of an application +- %n Item is gebruikt door %1%n Items zijn gebruikt door %1 +- +- +- +- FdoSecrets::SettingsDatabaseModel +- +- File Name +- Bestandsnaam +- +- +- Group +- Groep +- +- +- Manage +- Beheren +- +- +- Unlock to show +- Ontgrendel voor deze informatie +- +- +- None +- Geen +- +- +- +- FdoSecrets::SettingsSessionModel +- +- Application +- Programma +- +- +- Manage +- Beheren +- +- +- +- FdoSecretsPlugin +- +- <b>Fdo Secret Service:</b> %1 +- <b>Fdo Secret Service:</b> %1 +- +- +- Unknown +- Unknown PID +- Onbekend +- +- +- Unknown +- Unknown executable path +- Onbekend +- +- +- <i>PID: %1, Executable: %2</i> +- <i>PID: 1234, Executable: /path/to/exe</i> +- <i>PID: %1, Uitvoerbaar bestand: %2</i> +- +- +- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. +- Een andere secret service is actief (%1).<br/>Stop/verwijder deze en probeer de Secret Service-integratie opnieuw te activeren. +- +- +- +- Group +- +- [empty] +- group has no children +- [leeg] +- +- +- +- HibpDownloader +- +- Online password validation failed +- Online validatie van wachtwoord is mislukt +- +- +- +- IconDownloaderDialog +- +- Download Favicons +- Favicons downloaden +- +- +- Cancel +- Annuleren +- +- +- Having trouble downloading icons? +-You can enable the DuckDuckGo website icon service in the security section of the application settings. +- Problemen met het downloaden van pictogrammen? +-Je kunt de DuckDuckGo website pictogram dienst inschakelen in de sectie 'Beveiliging' in de instellingen. +- +- +- Close +- Sluiten +- +- +- URL +- URL +- +- +- Status +- Status +- +- +- Please wait, processing entry list... +- Even wachten, de items worden verwerkt... +- +- +- Downloading... +- Downloaden... +- +- +- Ok +- Oké +- +- +- Already Exists +- Bestaat al +- +- +- Download Failed +- Download is mislukt +- +- +- Downloading favicons (%1/%2)... +- Favicons downloaden (%1/%2)... +- +- +- +- KMessageWidget +- +- &Close +- &Sluiten +- +- +- Close message +- Bericht sluiten +- +- +- +- Kdbx3Reader +- +- missing database headers +- ontbrekende database-koppen +- +- +- Header doesn't match hash +- Header komt niet overeen met hash +- +- +- Invalid header id size +- Ongeldige grootte van header-ID +- +- +- Invalid header field length +- Ongeldige lengte van header-veld +- +- +- Invalid header data length +- Ongeldige lengte van header-data +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Ongeldige inloggegevens, probeer het opnieuw. +-Als dit vaker gebeurt, is het databasebestand mogelijk beschadigd. +- +- +- Unable to calculate database key +- Kan databasesleutel niet berekenen +- +- +- Unable to issue challenge-response: %1 +- Kan challenge-antwoord niet uitgeven: %1 +- +- +- +- Kdbx3Writer +- +- Unable to issue challenge-response: %1 +- Kan challenge-antwoord niet uitgeven: %1 +- +- +- Unable to calculate database key +- Kan databasesleutel niet berekenen +- +- +- +- Kdbx4Reader +- +- missing database headers +- ontbrekende database-koppen +- +- +- Invalid header checksum size +- Ongeldige grootte van header-controlecijfer +- +- +- Header SHA256 mismatch +- SHA256-kop komt niet overeen +- +- +- Unknown cipher +- Onbekend versleutelingsalgoritme +- +- +- Invalid header id size +- Ongeldige grootte van header-ID +- +- +- Invalid header field length +- Ongeldige lengte van header-veld +- +- +- Invalid header data length +- Ongeldige lengte van header-data +- +- +- Failed to open buffer for KDF parameters in header +- Fout bij het openen van de buffer voor KDF-parameters in header +- +- +- Unsupported key derivation function (KDF) or invalid parameters +- Niet-ondersteunde sleutel-afleidingsfunctie (KDF) of ongeldige parameters +- +- +- Legacy header fields found in KDBX4 file. +- Verouderde header-velden gevonden in KDBX4 bestand. +- +- +- Invalid inner header id size +- Ongeldige grootte van inner header-id +- +- +- Invalid inner header field length +- Ongeldige lengte van inner header-veld +- +- +- Invalid inner header binary size +- Ongeldige binaire grootte van inner header +- +- +- Unsupported KeePass variant map version. +- Translation: variant map = data structure for storing meta data +- Niet-ondersteunde versie van KeePass variant map. +- +- +- Invalid variant map entry name length +- Translation: variant map = data structure for storing meta data +- Ongeldige lengte van een variant map item naam +- +- +- Invalid variant map entry name data +- Translation: variant map = data structure for storing meta data +- Ongeldige data in een variant map item naam +- +- +- Invalid variant map entry value length +- Translation: variant map = data structure for storing meta data +- Ongeldige lengte van een variant map waarde +- +- +- Invalid variant map entry value data +- Translation comment: variant map = data structure for storing meta data +- Ongeldige data in een variant map waarde +- +- +- Invalid variant map Bool entry value length +- Translation: variant map = data structure for storing meta data +- Ongeldige lengte van een variant map Boolean-waarde +- +- +- Invalid variant map Int32 entry value length +- Translation: variant map = data structure for storing meta data +- Ongeldige lengte van een variant map Int32-waarde +- +- +- Invalid variant map UInt32 entry value length +- Translation: variant map = data structure for storing meta data +- Ongeldige lengte van een variant map UInt32-waarde +- +- +- Invalid variant map Int64 entry value length +- Translation: variant map = data structure for storing meta data +- Ongeldige lengte van een variant map Int64-waarde +- +- +- Invalid variant map UInt64 entry value length +- Translation: variant map = data structure for storing meta data +- Ongeldige lengte van een variant map UInt64-waarde +- +- +- Invalid variant map entry type +- Translation: variant map = data structure for storing meta data +- Ongeldige item-type in variant map +- +- +- Invalid variant map field type size +- Translation: variant map = data structure for storing meta data +- Ongeldige grootte van variant map veld-type +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Ongeldige inloggegevens, probeer het opnieuw. +-Als dit vaker gebeurt, is het databasebestand mogelijk beschadigd. +- +- +- (HMAC mismatch) +- (HMAC komt niet overeen) +- +- +- Unable to calculate database key: %1 +- Kan databasesleutel niet berekenen: %1 +- +- +- +- Kdbx4Writer +- +- Invalid symmetric cipher algorithm. +- Ongeldig symmetrisch versleutelingsalgoritme. +- +- +- Invalid symmetric cipher IV size. +- IV = Initialization Vector for symmetric cipher +- Ongeldige grootte van symmetrisch versleutelingsalgoritme IV. +- +- +- Failed to serialize KDF parameters variant map +- Translation comment: variant map = data structure for storing meta data +- Fout bij serialisering van KDF-parameters variant map +- +- +- Unable to calculate database key: %1 +- Kan databasesleutel niet berekenen: %1 +- +- +- +- KdbxReader +- +- Unsupported cipher +- Niet ondersteund versleutelingsalgoritme +- +- +- Invalid compression flags length +- Ongeldige lengte van compressie-opties +- +- +- Unsupported compression algorithm +- Niet ondersteund compressie-algoritme +- +- +- Invalid master seed size +- Ongeldige grootte van master-seed +- +- +- Invalid transform seed size +- Ongeldige grootte van transform-seed +- +- +- Invalid transform rounds size +- Ongeldig aantal transformatie-iteraties +- +- +- Invalid start bytes size +- Ongeldige grootte van start-bytes +- +- +- Invalid random stream id size +- Ongeldige grootte van random stream-id +- +- +- Invalid inner random stream cipher +- Ongeldig inner-random-stream versleutelingsalgoritme +- +- +- Not a KeePass database. +- Geen KeePass-database. +- +- +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- Het gekozen bestand is een oude KeePass 1 database (.kdb) +- +-Je kunt het importeren door te klikken op Database>'KeePass 1-database importeren'. +-Deze actie is niet omkeerbaar. Je kunt de geïmporteerde database niet meer openen met de oude KeePassX 0.4 versie. +- +- +- Unsupported KeePass 2 database version. +- Niet-ondersteunde KeePass 2-databaseversie. +- +- +- Invalid cipher uuid length: %1 (length=%2) +- Ongeldige versleuteling uuid lengte: %1 (lengte=%2) +- +- +- Unable to parse UUID: %1 +- Geen geldige UUID: %1 +- +- +- Failed to read database file. +- Lezen van databasebestand is mislukt. +- +- +- +- KdbxXmlReader +- +- XML parsing failure: %1 +- XML leesfout: %1 +- +- +- No root group +- Geen hoofdgroep +- +- +- Missing icon uuid or data +- Ontbrekende pictogram-uuid of -gegevens +- +- +- Missing custom data key or value +- Ontbrekende aangepaste datasleutel of -waarde +- +- +- Multiple group elements +- Meerdere groepselementen +- +- +- Null group uuid +- Null groep uuid +- +- +- Invalid group icon number +- Ongeldig groepspictogramnummer +- +- +- Invalid EnableAutoType value +- Ongeldige EnableAutoType-waarde +- +- +- Invalid EnableSearching value +- Ongeldige EnableSearching-waarde +- +- +- No group uuid found +- Geen groep-uuid gevonden +- +- +- Null DeleteObject uuid +- Null DeleteObject uuid +- +- +- Missing DeletedObject uuid or time +- Ontbrekende DeletedObject uuid of tijd +- +- +- Null entry uuid +- Null item uuid +- +- +- Invalid entry icon number +- Ongeldig pictogramnummer +- +- +- History element in history entry +- Geschiedenis element in geschiedenis item +- +- +- No entry uuid found +- Geen item-uuid gevonden +- +- +- History element with different uuid +- Geschiedenis element met ander uuid +- +- +- Duplicate custom attribute found +- Duplicaat aangepast kenmerk gevonden +- +- +- Entry string key or value missing +- Stringsleutel of -waarde ontbreekt in item +- +- +- Entry binary key or value missing +- Binaire sleutel of waarde ontbreekt in item +- +- +- Auto-type association window or sequence missing +- Auto-type vensterkoppeling of tekenreeks ontbreekt +- +- +- Invalid bool value +- Ongeldige boolean-waarde +- +- +- Invalid date time value +- Ongeldige datum-tijdwaarde +- +- +- Invalid color value +- Ongeldige kleurwaarde +- +- +- Invalid color rgb part +- Ongeldige kleur in rgb-deel +- +- +- Invalid number value +- Ongeldig getal +- +- +- Invalid uuid value +- Ongeldige uuid-waarde +- +- +- Unable to decompress binary +- Translator meant is a binary data inside an entry +- Kan binaire gegevens niet decomprimeren +- +- +- XML error: +-%1 +-Line %2, column %3 +- XML fout: +-%1 +-Lijn %2, kolom %3 +- +- +- +- KeeAgentSettings +- +- Invalid KeeAgent settings file structure. +- Ongeldige bestandsstructuur van KeeAgent-instellingen. +- +- +- Private key is an attachment but no attachments provided. +- Privésleutel is een bijlage maar er is geen bijlage verstrekt. +- +- +- Private key is empty +- Privésleutel is leeg +- +- +- File too large to be a private key +- Bestand te groot voor een persoonlijke sleutel +- +- +- Failed to open private key +- Persoonlijk sleutelbestand niet kunnen openen +- +- +- +- KeePass1OpenWidget +- +- Unable to open the database. +- Kan database niet openen. +- +- +- Import KeePass1 Database +- Importeer KeePass1 database +- +- +- +- KeePass1Reader +- +- Unable to read keyfile. +- Kan sleutelbestand niet lezen. +- +- +- Not a KeePass database. +- Geen KeePass-database +- +- +- Unsupported encryption algorithm. +- Niet-ondersteund versleutelings-algoritme +- +- +- Unsupported KeePass database version. +- Niet-ondersteunde versie van KeePass-database. +- +- +- Unable to read encryption IV +- IV = Initialization Vector for symmetric cipher +- Kan versleuteling IV niet lezen +- +- +- Invalid number of groups +- Ongeldig aantal groepen +- +- +- Invalid number of entries +- Ongeldig aantal items +- +- +- Invalid content hash size +- Ongeldige grootte van inhoud-hash +- +- +- Invalid transform seed size +- Ongeldige grootte van transform-seed +- +- +- Invalid number of transform rounds +- Ongeldig aantal transformatie-iteraties +- +- +- Unable to construct group tree +- Kan groepsstructuur niet opbouwen +- +- +- Root +- Alles +- +- +- Key transformation failed +- Sleuteltransformatie is mislukt +- +- +- Invalid group field type number +- Ongeldig veld typenummer van groep +- +- +- Invalid group field size +- Ongeldige veldgrootte van groep +- +- +- Read group field data doesn't match size +- Groep veld data komt niet overeen met grootte +- +- +- Incorrect group id field size +- Onjuiste veldgrootte van id +- +- +- Incorrect group creation time field size +- Onjuiste veldgrootte van aanmaaktijd +- +- +- Incorrect group modification time field size +- Onjuiste veldgrootte van wijzigingstijd +- +- +- Incorrect group access time field size +- Onjuiste veldgrootte van toegangstijd +- +- +- Incorrect group expiry time field size +- Onjuiste veldgrootte van verlooptijd +- +- +- Incorrect group icon field size +- Onjuiste veldgrootte groepspictogram +- +- +- Incorrect group level field size +- Onjuiste veldgrootte van groepsniveau +- +- +- Invalid group field type +- Ongeldig veldtype van groep +- +- +- Missing group id or level +- Ontbrekende groeps-id of -niveau +- +- +- Missing entry field type number +- Ontbrekend veldnummer van item +- +- +- Invalid entry field size +- Ongeldige veldgrootte van item +- +- +- Read entry field data doesn't match size +- Itemgegevens komen niet overeen met veldgrootte +- +- +- Invalid entry uuid field size +- Ongeldige veldgrootte van uuid +- +- +- Invalid entry group id field size +- Ongeldige veldgrootte van groepid +- +- +- Invalid entry icon field size +- Ongeldige veldgrootte van pictogram +- +- +- Invalid entry creation time field size +- Ongeldige veldgrootte van aanmaaktijd +- +- +- Invalid entry modification time field size +- Ongeldige veldgrootte van wijzigingstijd +- +- +- Invalid entry expiry time field size +- Ongeldige veldgrootte van verlooptijd +- +- +- Invalid entry field type +- Ongeldig item veldtype +- +- +- unable to seek to content position +- kan niet naar positie in inhoud springen +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Ongeldige inloggegevens, probeer het opnieuw. +-Als dit vaker gebeurt, is het databasebestand mogelijk beschadigd. +- +- +- Unable to calculate database key +- Kan databasesleutel niet berekenen +- +- +- +- KeeShare +- +- Invalid sharing reference +- Ongeldige verwijzing +- +- +- Inactive share %1 +- Niet actieve gedaalde database %1 +- +- +- Imported from %1 +- Geïmporteerd vanuit %1 +- +- +- Exported to %1 +- Geëxporteerd naar %1 +- +- +- Synchronized with %1 +- Gesynchroniseerd met %1 +- +- +- Import is disabled in settings +- Importeren is uitgeschakeld in instellingen +- +- +- Export is disabled in settings +- Exporteren is uitgeschakeld in instellingen +- +- +- Inactive share +- Niet actieve gedeelde database +- +- +- Imported from +- Geïmporteerd uit +- +- +- Exported to +- Geëxporteerd naar +- +- +- Synchronized with +- Gesynchroniseerd met +- +- +- +- KeyComponentWidget +- +- Key Component +- Sleutelcomponent +- +- +- Key Component Description +- Sleutelcomponent beschrijving +- +- +- Cancel +- Annuleren +- +- +- Key Component set, click to change or remove +- Sleutelcomponent verzameling, klik om te wijzigen of verwijderen +- +- +- Add %1 +- Add a key component +- %1 toevoegen +- +- +- Change %1 +- Change a key component +- %1 aanpassen +- +- +- Remove %1 +- Remove a key component +- %1 verwijderen +- +- +- %1 set, click to change or remove +- Change or remove a key component +- %1 ingesteld, klik om te wijzigen of verwijderen +- +- +- +- KeyFileEditWidget +- +- Generate +- Genereren +- +- +- Key File +- Sleutelbestand +- +- +- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> +- <p>Je kunt een sleutelbestand met willekeurige bytes toevoegen voor extra veiligheid.</p> <p>Je moet het sleutelbestand geheim houden en nooit verliezen anders wordt je buitengesloten!</p> +- +- +- Error loading the key file '%1' +-Message: %2 +- Er ging iets fout bij het laden van het sleutelbestand '%1' +-Bericht: %2 +- +- +- Key files +- Sleutelbestanden +- +- +- All files +- Alle bestanden +- +- +- Create Key File... +- Sleutelbestand aanmaken… +- +- +- Error creating key file +- Er ging iets fout bij het maken van het sleutelbestand +- +- +- Unable to create key file: %1 +- Kan sleutelbestand niet maken: %1 +- +- +- Select a key file +- Kies een sleutelbestand +- +- +- Key file selection +- Sleutelbestand +- +- +- Browse for key file +- Blader naar sleutelbestand +- +- +- Browse... +- Bladeren… +- +- +- Generate a new key file +- Een nieuw sleutelbestand genereren +- +- +- Note: Do not use a file that may change as that will prevent you from unlocking your database! +- Merk op: gebruik geen bestand dat kan veranderen; elke verandering maakt het ontgrendelen van je database onmogelijk! +- +- +- Invalid Key File +- Ongeldig sleutelbestand +- +- +- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. +- Je kunt de huidige database niet gebruiken als zijn eigen sleutelbestand. Kies een ander bestand of genereer een nieuw sleutelbestand. +- +- +- Suspicious Key File +- Verdacht sleutelbestand +- +- +- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. +-Are you sure you want to continue with this file? +- Het gekozen sleutelbestand ziet eruit als een wachtwoord databasebestand. Een sleutelbestand moet een statisch bestand zijn dat nooit wijzigt ander verlies je voor altijd toegang tot de database. +-Weet je zeker dat je wilt doorgaan met dit bestand? +- +- +- Old key file format +- +- +- +- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. +- +- +- +- +- MainWindow +- +- &Database +- &Database +- +- +- &Help +- &Help +- +- +- &Groups +- &Groepen +- +- +- &Tools +- E&xtra +- +- +- &Quit +- &Afsluiten +- +- +- &About +- &Over +- +- +- Database settings +- Database-instellingen +- +- +- Copy username to clipboard +- Gebruikersnaam naar klembord kopiëren +- +- +- Copy password to clipboard +- Wachtwoord naar klembord kopiëren +- +- +- &Settings +- &Instellingen +- +- +- &Title +- &Naam +- +- +- Copy title to clipboard +- Naam naar klembord kopiëren +- +- +- &URL +- &URL +- +- +- Copy URL to clipboard +- URL naar klembord kopiëren +- +- +- &Notes +- &Notities +- +- +- Copy notes to clipboard +- Notities naar klembord kopiëren +- +- +- Copy &TOTP +- &TOTP kopiëren +- +- +- E&mpty recycle bin +- Prullenbak leegmaken +- +- +- Clear history +- Geschiedenislijst wissen +- +- +- Access error for config file %1 +- Geen toegang tot configuratiebestand %1 +- +- +- Settings +- Instellingen +- +- +- Toggle window +- Venster openen +- +- +- Quit KeePassXC +- KeePassXC afsluiten +- +- +- Please touch the button on your YubiKey! +- Druk op de knop van je YubiKey! +- +- +- WARNING: You are using an unstable build of KeePassXC! +-There is a high risk of corruption, maintain a backup of your databases. +-This version is not meant for production use. +- WAARSCHUWING: Je gebruikt een niet-stabiele versie van KeePassXC! +-Deze versie is niet bedoeld voor dagelijks gebruik. +-Er is een hoog risico op beschadiging. Bewaar een back-up van jouw databases. +- +- +- &Donate +- &Doneren +- +- +- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +-We recommend you use the AppImage available on our downloads page. +- WAARSCHUWING: Jouw Qt-versie kan KeePassXC laten crashen bij gebruik van een schermtoetsenbord! +-Wij raden je aan om de AppImage te gebruiken welke beschikbaar is op onze downloadpagina. +- +- +- &Import +- &Importeren +- +- +- Create a new database +- Een nieuwe database maken +- +- +- Merge from another KDBX database +- Samenvoegen uit een andere KDBX database +- +- +- Add a new entry +- Nieuw item toevoegen +- +- +- View or edit entry +- Item bekijken/bewerken +- +- +- Add a new group +- Een nieuwe groep toevoegen +- +- +- Perform &Auto-Type +- &Auto-type uitvoeren +- +- +- Open &URL +- &URL openen +- +- +- Import a KeePass 1 database +- Een KeePass 1-database importeren +- +- +- Import a CSV file +- Een CSV-bestand importeren +- +- +- NOTE: You are using a pre-release version of KeePassXC! +-Expect some bugs and minor issues, this version is not meant for production use. +- Opmerking: Je gebruikt een pre-release versie van KeePassXC! +-Houd rekening met fouten en kleine problemen. Deze versie is niet bedoeld voor regulier gebruik. +- +- +- Check for updates on startup? +- Controleren op updates bij het opstarten? +- +- +- Would you like KeePassXC to check for updates on startup? +- Wil je dat KeePassXC bij het opstarten controleert op updates? +- +- +- You can always check for updates manually from the application menu. +- Je kunt altijd handmatig controleren of er updates zijn vanuit het programmamenu. +- +- +- &Export +- &Exporteren +- +- +- Sort &A-Z +- Sorteer &A-Z +- +- +- Sort &Z-A +- Sorteer &Z-A +- +- +- &Password Generator +- &Wachtwoordgenerator +- +- +- Import a 1Password Vault +- Importeer een 1Password vault +- +- +- &Getting Started +- &Aan de slag +- +- +- &User Guide +- &Gebruikershandleiding +- +- +- &Keyboard Shortcuts +- &Sneltoetsen +- +- +- &Recent Databases +- &Recente databases +- +- +- &Entries +- &Items +- +- +- Copy Att&ribute +- Ken&merk kopiëren +- +- +- TOTP +- TOTP +- +- +- View +- Beeld +- +- +- Theme +- Thema +- +- +- &Check for Updates +- &Controleer op updates +- +- +- &Open Database… +- Database &openen... +- +- +- &Save Database +- Database op&slaan... +- +- +- &Close Database +- Database s&luiten +- +- +- &New Database… +- &Nieuwe database... +- +- +- &Merge From Database… +- Database sa&menvoegen... +- +- +- &New Entry… +- &Nieuw item… +- +- +- &Edit Entry… +- Item &bewerken… +- +- +- &Delete Entry… +- Item &verwijderen… +- +- +- &New Group… +- &Nieuwe Groep… +- +- +- &Edit Group… +- Groep &bewerken… +- +- +- &Delete Group… +- &Verwijder Groep… +- +- +- Download All &Favicons… +- Alle &favicons downloaden... +- +- +- Sa&ve Database As… +- Database opslaan &als... +- +- +- Database &Security… +- Database-be&veiliging... +- +- +- Database &Reports... +- Database-&rapportage... +- +- +- Statistics, health check, etc. +- Statistieken, gezondheidscontrole, etc. +- +- +- &Database Settings… +- &Database-instellingen +- +- +- &Clone Entry… +- Item &dupliceren... +- +- +- Move u&p +- Om&hoog verplaatsen +- +- +- Move entry one step up +- Hiermee verplaats je een item een positie omhoog. +- +- +- Move do&wn +- Om&laag verplaatsen +- +- +- Move entry one step down +- Hiermee verplaats je een item een positie omlaag. +- +- +- Copy &Username +- &Gebruikersnaam kopiëren +- +- +- Copy &Password +- &Wachtwoord kopiëren +- +- +- Download &Favicon +- &Favicon downloaden +- +- +- &Lock Databases +- Databases vergrende&len +- +- +- &CSV File… +- &CSV-bestand... +- +- +- &HTML File… +- &HTML-bestand... +- +- +- KeePass 1 Database… +- KeePass 1 database... +- +- +- 1Password Vault… +- 1Password vault... +- +- +- CSV File… +- CSV-bestand... +- +- +- Show TOTP +- TOTP weergeven +- +- +- Show QR Code +- TOTP QR-code tonen +- +- +- Set up TOTP… +- TOTP instellen… +- +- +- Report a &Bug +- Meld een &fout +- +- +- Open Getting Started Guide +- Open de handleiding Aan de slag +- +- +- &Online Help +- &Online hulp +- +- +- Go to online documentation +- Online documentatie +- +- +- Open User Guide +- Open de gebruikershandleiding +- +- +- Save Database Backup... +- Database-backup opslaan... +- +- +- Add key to SSH Agent +- Sleutel toevoegen aan SSH-agent +- +- +- Remove key from SSH Agent +- Sleutel wegnemen van SSH-agent +- +- +- Compact Mode +- Compacte weergave +- +- +- Automatic +- Automatisch +- +- +- Light +- Licht +- +- +- Dark +- Donker +- +- +- Classic (Platform-native) +- Klassiek (platform-eigen) +- +- +- Show Toolbar +- Werkbalk weergeven +- +- +- Show Preview Panel +- Voorbeeldvenster weergeven +- +- +- Don't show again for this version +- Niet meer weergeven voor deze versie +- +- +- Restart Application? +- Programma opnieuw starten? +- +- +- You must restart the application to apply this setting. Would you like to restart now? +- Je moet de applicatie opnieuw opstarten om deze instelling toe te passen. +-Wil je KeePassXC nu opnieuw opstarten? +- +- +- Perform Auto-Type Sequence +- Auto-type tekenreeks uitvoeren +- +- +- {USERNAME} +- {GEBRUIKERSNAAM} +- +- +- {USERNAME}{ENTER} +- {GEBRUIKERSNAAM}{ENTER} +- +- +- {PASSWORD} +- {WACHTWOORD} +- +- +- {PASSWORD}{ENTER} +- {WACHTWOORD}{ENTER} +- +- +- Always on Top +- +- +- +- Hide Usernames +- Gebruikersnamen verbergen +- +- +- Hide Passwords +- Wachtwoorden verbergen +- +- +- +- ManageDatabase +- +- Database settings +- Database-instellingen +- +- +- Edit database settings +- Database instellingen bewerken +- +- +- Unlock database +- Database ontgrendelen +- +- +- Unlock database to show more information +- Ontgrendel de database voor meer informatie +- +- +- Lock database +- Database vergrendelen +- +- +- +- ManageSession +- +- Disconnect +- Verbreken +- +- +- Disconnect this application +- Deze applicatie loskoppelen +- +- +- +- Merger +- +- Creating missing %1 [%2] +- Ontbrekende %1 [%2] aanmaken +- +- +- Relocating %1 [%2] +- %1 [%2] verplaatsen +- +- +- Overwriting %1 [%2] +- %1 [%2] overschrijven +- +- +- older entry merged from database "%1" +- ouder item samengevoegd uit database '%1' +- +- +- Adding backup for older target %1 [%2] +- Back-up toevoegen voor ouder doel %1 [%2] +- +- +- Adding backup for older source %1 [%2] +- Back-up toevoegen voor oudere bron %1 [%2] +- +- +- Reapplying older target entry on top of newer source %1 [%2] +- Ouder doel item is opnieuw toegepast over nieuwer bron item %1 [%2] +- +- +- Reapplying older source entry on top of newer target %1 [%2] +- Ouder bron item is opnieuw toegepast over nieuwer doel item %1 [%2] +- +- +- Synchronizing from newer source %1 [%2] +- Synchroniseren van nieuwere bron %1 [%2] +- +- +- Synchronizing from older source %1 [%2] +- Synchroniseren van oudere bron %1 [%2] +- +- +- Deleting child %1 [%2] +- Verwijderen van kind %1 [%2] +- +- +- Deleting orphan %1 [%2] +- Verwijderen wees %1 [%2] +- +- +- Changed deleted objects +- Verwijderde objecten gewijzigd +- +- +- Adding missing icon %1 +- Toevoegen van ontbrekend pictogram %1 +- +- +- Removed custom data %1 [%2] +- Gebruikersinstellingen verwijderd %1 [%2] +- +- +- Adding custom data %1 [%2] +- Gebruikersinstellingen toegevoegd %1 [%2] +- +- +- +- NewDatabaseWizard +- +- Create a new KeePassXC database... +- Nieuwe KeePassXC database aanmaken... +- +- +- Root +- Root group +- Alles +- +- +- +- NewDatabaseWizardPage +- +- WizardPage +- Assistent +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Hier kun je de versleutelingsinstellingen van de database aanpassen. Maak je geen zorgen, je kunt dit later in de database-instellingen wijzigen. +- +- +- Advanced Settings +- Geavanceerde instellingen +- +- +- Simple Settings +- Eenvoudige instellingen +- +- +- Encryption Settings +- Versleutelingsinstellingen +- +- +- +- NewDatabaseWizardPageDatabaseKey +- +- Database Credentials +- Databasegegevens +- +- +- A set of credentials known only to you that protects your database. +- Een verzameling referenties die jij alleen kent en die je database beschermt. +- +- +- +- NewDatabaseWizardPageEncryption +- +- Encryption Settings +- Versleutelingsinstellingen +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Hier kun je de versleutelingsinstellingen van de database aanpassen. Maak je geen zorgen, je kunt dit later in de database-instellingen wijzigen. +- +- +- +- NewDatabaseWizardPageMetaData +- +- General Database Information +- Algemene database-informatie +- +- +- Please fill in the display name and an optional description for your new database: +- Geef de weergavenaam en een optionele beschrijving voor de nieuwe database: +- +- +- +- NixUtils +- +- Password Manager +- Wachtwoordbeheer +- +- +- +- OpData01 +- +- Invalid OpData01, does not contain header +- Ongeldige OpData01, bevat geen header +- +- +- Unable to read all IV bytes, wanted 16 but got %1 +- Kon niet alle IV bytes lezen, gewenst is 16 maar kreeg er %1 +- +- +- Unable to init cipher for opdata01: %1 +- Kan versleuteling niet initiëren voor opdata01: %1 +- +- +- Unable to read all HMAC signature bytes +- Kan niet alle HMAC-handtekening bytes lezen +- +- +- Malformed OpData01 due to a failed HMAC +- Ongeldige OpData01 vanwege een mislukte HMAC +- +- +- Unable to process clearText in place +- Kan hier alleen versleutelde tekst verwerken +- +- +- Expected %1 bytes of clear-text, found %2 +- %1 bytes niet versleutelde tekst verwacht, %2 aangetroffen +- +- +- +- OpVaultOpenWidget +- +- Read Database did not produce an instance +-%1 +- De te lezen database heeft geen exemplaar geproduceerd +-%1 +- +- +- +- OpVaultReader +- +- Directory .opvault must exist +- Directory .opvault moet bestaan +- +- +- Directory .opvault must be readable +- Directory .opvault moet leesbaar zijn +- +- +- Directory .opvault/default must exist +- Directory .opvault/default moet bestaan +- +- +- Directory .opvault/default must be readable +- Directory .opvault/default moet leesbaar zijn +- +- +- Unable to decode masterKey: %1 +- Kan hoofdsleutel niet decoderen: %1 +- +- +- Unable to derive master key: %1 +- Kan hoofdsleutel niet afleiden: %1 +- +- +- +- OpenSSHKey +- +- Invalid key file, expecting an OpenSSH key +- Ongeldig sleutelbestand, er werd een OpenSSH-sleutel verwacht +- +- +- PEM boundary mismatch +- PEM-grens komt niet overeen +- +- +- Base64 decoding failed +- Base64-decodering mislukt +- +- +- Key file way too small. +- Sleutelbestand veel te klein. +- +- +- Key file magic header id invalid +- Ongeldig 'magic header id' in sleutelbestand +- +- +- Found zero keys +- Geen sleutels gevonden +- +- +- Failed to read public key. +- Lezen publieke sleutel mislukt. +- +- +- Corrupted key file, reading private key failed +- Beschadigd sleutelbestand, lezen persoonlijke sleutel mislukt +- +- +- No private key payload to decrypt +- Geen inhoud persoonlijke sleutel om te decoderen +- +- +- Trying to run KDF without cipher +- Probeer KDF uit te voeren zonder versleutelingsalgoritme +- +- +- Passphrase is required to decrypt this key +- Wachtwoord(-zin) nodig om deze sleutel te ontcijferen +- +- +- Key derivation failed, key file corrupted? +- Sleutelafleiding mislukt, beschadigd sleutelbestand? +- +- +- Decryption failed, wrong passphrase? +- Decodering mislukt, verkeerd wachtwoord(-zin)? +- +- +- Unexpected EOF while reading public key +- Onverwacht bestandseinde publieke sleutel +- +- +- Unexpected EOF while reading private key +- Onverwacht bestandseinde persoonlijke sleutel +- +- +- Can't write public key as it is empty +- Kan publieke sleutel niet opslaan, aangezien deze leeg is +- +- +- Unexpected EOF when writing public key +- Onverwacht bestandseinde bij schrijven publieke sleutel +- +- +- Can't write private key as it is empty +- Kan persoonlijke sleutel niet opslaan, aangezien deze leeg is +- +- +- Unexpected EOF when writing private key +- Onverwacht bestandseinde bij schrijven persoonlijke sleutel +- +- +- Unsupported key type: %1 +- Niet ondersteund sleuteltype: %1 +- +- +- Unknown cipher: %1 +- Onbekende versleuteling: %1 +- +- +- Cipher IV is too short for MD5 kdf +- Versleuteilng IV is te kort om MD5-sleutel te verkrijgen. +- +- +- Unknown KDF: %1 +- Onbekende sleutelafleidings-functie: %1 +- +- +- Unknown key type: %1 +- Onbekend sleuteltype: %1 +- +- +- +- PasswordEdit +- +- Passwords do not match +- Wachtwoorden komen niet overeen +- +- +- Passwords match so far +- Wachtwoorden overeenkomst tot nu toe +- +- +- Toggle Password (%1) +- Wachtwoord schakelen (%1) +- +- +- Generate Password (%1) +- Wachtwoord genereren (%1) +- +- +- Warning: Caps Lock enabled! +- Let op: Caps Lock geactiveerd! +- +- +- +- PasswordEditWidget +- +- Enter password: +- Wachtwoord invoeren: +- +- +- Confirm password: +- Wachtwoord bevestigen: +- +- +- Password +- Wachtwoord +- +- +- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> +- <p>Een wachtwoord is de primaire methode voor het beveiligen van een database.</p> <p>Goede wachtwoorden zijn lang en uniek. KeePassXC kan er een voor je genereren.</p> +- +- +- Passwords do not match. +- Wachtwoorden komen niet overeen. +- +- +- Password field +- Wachtwoord invulveld +- +- +- Repeat password field +- Wachtwoord herhaling veld +- +- +- +- PasswordGeneratorWidget +- +- %p% +- %p% +- +- +- strength +- Password strength +- sterkte +- +- +- entropy +- entropie +- +- +- Password +- Wachtwoord +- +- +- Character Types +- Tekens +- +- +- Numbers +- Cijfers +- +- +- Extended ASCII +- Uitgebreide ASCII +- +- +- Exclude look-alike characters +- Op elkaar lijkende tekens niet gebruiken +- +- +- Pick characters from every group +- Gebruik tekens uit iedere groep +- +- +- &Length: +- &Lengte: +- +- +- Passphrase +- Wachtwoordzin +- +- +- Wordlist: +- Woordenlijst: +- +- +- Word Separator: +- Scheidingsteken: +- +- +- Close +- Sluiten +- +- +- Entropy: %1 bit +- Entropie: %1 bit +- +- +- Password Quality: %1 +- Kwaliteit: %1 +- +- +- Poor +- Password quality +- Slecht +- +- +- Weak +- Password quality +- Zwak +- +- +- Good +- Password quality +- Goed +- +- +- Excellent +- Password quality +- Uitstekend +- +- +- Switch to advanced mode +- Overschakelen naar de geavanceerde modus +- +- +- Advanced +- Geavanceerd +- +- +- Braces +- Haakjes +- +- +- Punctuation +- Leestekens +- +- +- Quotes +- Aanhalingstekens +- +- +- Logograms +- Special tekens +- +- +- Character set to exclude from generated password +- Tekenset die niet gebruikt mag worden in het gegenereerde wachtwoord +- +- +- Do not include: +- Niet gebruiken: +- +- +- Add non-hex letters to "do not include" list +- Voeg niet-hex karakters toe aan de "niet gebruiken" lijst +- +- +- Hex +- Hex +- +- +- Excluded characters: "0", "1", "l", "I", "O", "|", "ï¹’" +- Niet te gebruiken karakters: "0", "1", "l", "I", "O", "|", "ï¹’" +- +- +- Generated password +- Gegenereerd wachtwoord +- +- +- Upper-case letters +- Hoofdletters +- +- +- Lower-case letters +- Kleine letters +- +- +- Special characters +- Speciale tekens +- +- +- Math Symbols +- Wiskunde tekens +- +- +- Dashes and Slashes +- Streepjes en schuine streepjes +- +- +- Excluded characters +- Niet te gebruiken tekens +- +- +- Hex Passwords +- Hex wachtwoord +- +- +- Password length +- Wachtwoordlengte +- +- +- Word Case: +- Teken grootte +- +- +- Regenerate password +- Opnieuw genereren +- +- +- Copy password +- Wachtwoord kopiëren +- +- +- lower case +- kleine letters +- +- +- UPPER CASE +- HOOFDLETTERS +- +- +- Title Case +- Eerste Letter Als Hoofdletter +- +- +- Generate Password +- Wachtwoord genereren +- +- +- Also choose from: +- Kies ook uit: +- +- +- Additional characters to use for the generated password +- Aanvullende tekens in het gegenereerde wachtwoord +- +- +- Additional characters +- Aanvullende tekens +- +- +- Word Count: +- Aantal woorden: +- +- +- Esc +- Esc +- +- +- Apply Password +- Wachtwoord gebruiken +- +- +- Ctrl+S +- Ctrl+S +- +- +- Regenerate password (%1) +- Ã’pnieuw genereren (%1) +- +- +- Special Characters +- Speciale tekens +- +- +- +- QApplication +- +- KeeShare +- KeeShare +- +- +- Statistics +- Statistieken +- +- +- Very weak password +- Zeer zwak wachtwoord +- +- +- Password entropy is %1 bits +- Wachtwoord-entropie is %1 bits +- +- +- Weak password +- Zwak wachtwoord +- +- +- Used in %1/%2 +- Gebruikt in %1/%2 +- +- +- Password is used %1 times +- Wachtwoord is %1 keer gebruikt +- +- +- Password has expired +- Wachtwoord is verlopen +- +- +- Password expiry was %1 +- Wachtwoord is %1 verlopen +- +- +- Password is about to expire +- Wachtwoord is bijna verlopen +- +- +- Password expires in %1 days +- Wachtwoord verloopt in %1 dagen +- +- +- Password will expire soon +- Wachtwoord verloopt snel +- +- +- Password expires on %1 +- Wachtwoord verloopt op %1 +- +- +- Health Check +- Gezondheid +- +- +- HIBP +- HIBP +- +- +- +- QMessageBox +- +- Overwrite +- Overschrijven +- +- +- Delete +- Verwijderen +- +- +- Move +- Verplaatsen +- +- +- Empty +- Leeg +- +- +- Remove +- Verwijderen +- +- +- Skip +- Overslaan +- +- +- Disable +- Uitschakelen +- +- +- Merge +- Samenvoegen +- +- +- Continue +- Doorgaan +- +- +- +- QObject +- +- Database not opened +- Database niet geopend +- +- +- Database hash not available +- Database-hashwaarde is niet beschikbaar +- +- +- Client public key not received +- Openbare sleutel niet ontvangen +- +- +- Cannot decrypt message +- Kan bericht niet decoderen +- +- +- Action cancelled or denied +- Actie afgebroken of geweigerd +- +- +- KeePassXC association failed, try again +- KeePassXC-koppeling is mislukt, probeer het opnieuw +- +- +- Encryption key is not recognized +- De coderingssleutel is niet herkend +- +- +- Incorrect action +- Onjuiste actie +- +- +- Empty message received +- Leeg bericht ontvangen +- +- +- No URL provided +- Geen URL opgegeven +- +- +- No logins found +- Geen aanmeldingen gevonden +- +- +- Unknown error +- Onbekende fout +- +- +- Add a new entry to a database. +- Nieuw item toevoegen aan een database. +- +- +- Path of the database. +- Pad naar de database. +- +- +- Key file of the database. +- Sleutelbestand van de database. +- +- +- path +- pad +- +- +- Username for the entry. +- Gebruikersnaam voor het item. +- +- +- username +- gebruikersnaam +- +- +- URL for the entry. +- URL voor het item. +- +- +- URL +- URL +- +- +- Prompt for the entry's password. +- Vraag om het item's wachtwoord. +- +- +- Generate a password for the entry. +- Genereer een wachtwoord voor het item. +- +- +- length +- lengte +- +- +- Path of the entry to add. +- Pad van toe te voegen item. +- +- +- Path of the entry to clip. +- clip = copy to clipboard +- Pad van het te kopiëren item. +- +- +- Timeout in seconds before clearing the clipboard. +- Wachttijd (sec) voor het wissen van het klembord. +- +- +- Edit an entry. +- Een item bewerken. +- +- +- Title for the entry. +- Naam voor deze entry. +- +- +- title +- naam +- +- +- Path of the entry to edit. +- Pad van het te bewerken item. +- +- +- Estimate the entropy of a password. +- De entropie van een wachtwoord inschatten. +- +- +- Password for which to estimate the entropy. +- Wachtwoord waarvoor de entropie geschat moet worden. +- +- +- Perform advanced analysis on the password. +- Geavanceerde analyse op het wachtwoord uitvoeren. +- +- +- +- +-Available commands: +- +- +- +-Beschikbare opdrachten: +-: +- +- +- Name of the command to execute. +- Naam van de uit te voeren opdracht. +- +- +- List database entries. +- Lijst van database-items. +- +- +- Path of the group to list. Default is / +- Pad naar de groepslijst. Standaard is / +- +- +- Find entries quickly. +- Items snel zoeken. +- +- +- Search term. +- Zoekterm. +- +- +- Merge two databases. +- Twee databases samenvoegen. +- +- +- Path of the database to merge from. +- Pad naar de samen te voegen brondatabase. +- +- +- Use the same credentials for both database files. +- Gebruik dezelfde gegevens voor beide gegevensbestanden. +- +- +- Key file of the database to merge from. +- Sleutelbestand van gegevensbestand om samen te voegen. +- +- +- Show an entry's information. +- Toon de informatie die hoort bij een item. +- +- +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- Namen van de te tonen kenmerken. Deze optie kan meer dan eens worden opgegeven, waarbij elk kenmerk op een regel wordt getoond in de opgegeven volgorde. Als er geen kenmerken worden opgegeven, wordt een samenvatting van de standaardkenmerken gegeven. +- +- +- attribute +- kenmerk +- +- +- Name of the entry to show. +- Naam van het item dat getoond moet worden. +- +- +- NULL device +- NULL-apparaat +- +- +- error reading from device +- fout bij het lezen van apparaat +- +- +- malformed string +- misvormde tekenreeks +- +- +- missing closing quote +- afsluitend aanhalingsteken ontbreekt +- +- +- Group +- Groep +- +- +- Title +- Naam +- +- +- Username +- Gebruikersnaam +- +- +- Password +- Wachtwoord +- +- +- Notes +- Notities +- +- +- Last Modified +- Laatst bewerkt +- +- +- Created +- Aangemaakt +- +- +- Browser Integration +- Browserintegratie +- +- +- SSH Agent +- SSH-agent +- +- +- Generate a new random diceware passphrase. +- Genereer een nieuwe willekeurige Diceware wachtwoordzin +- +- +- Word count for the diceware passphrase. +- Aantal woorden voor de Diceware wachtwoordzin. +- +- +- Wordlist for the diceware generator. +-[Default: EFF English] +- Woordenlijst voor de Diceware-generator. +-[Standaard: EFF Engels] +- +- +- Generate a new random password. +- Genereer een willekeurig wachtwoord +- +- +- Could not create entry with path %1. +- Kan geen item maken met pad %1. +- +- +- Enter password for new entry: +- Voer wachtwoord in voor nieuw item: +- +- +- Writing the database failed %1. +- Het schrijven van de database is mislukt %1. +- +- +- Successfully added entry %1. +- Item %1 toegevoegd. +- +- +- Invalid timeout value %1. +- Ongeldige time-out %1. +- +- +- Entry %1 not found. +- Item %1 niet gevonden. +- +- +- Entry with path %1 has no TOTP set up. +- Item met pad %1 heeft geen TOTP instellingen. +- +- +- Clearing the clipboard in %1 second(s)... +- Het klemboard wordt over %1 seconde(n) gewist...Het klembord wordt over %1 seconde(n) gewist... +- +- +- Clipboard cleared! +- Klembord gewist! +- +- +- Silence password prompt and other secondary outputs. +- Wachtwoordprompt en andere bijkomstige meldingen verbergen. +- +- +- count +- CLI parameter +- aantal +- +- +- Could not find entry with path %1. +- Kan item met pad %1 niet vinden. +- +- +- Not changing any field for entry %1. +- Geen enkel veld in item %1 is gewijzigd. +- +- +- Enter new password for entry: +- Voer nieuw wachtwoord in voor item: +- +- +- Writing the database failed: %1 +- Het schrijven van de database is mislukt: %1 +- +- +- Successfully edited entry %1. +- Item %1 is aangepast. +- +- +- Length %1 +- Lengte %1 +- +- +- Entropy %1 +- Entropie %1 +- +- +- Log10 %1 +- Log10 %1 +- +- +- Multi-word extra bits %1 +- Multi-word extra bits %1 +- +- +- Type: Bruteforce +- Type: Brute kracht +- +- +- Type: Dictionary +- Type: Woordenboek +- +- +- Type: Dict+Leet +- Type: Woordenboek + Leet +- +- +- Type: User Words +- Type: Gebruikerwoorden +- +- +- Type: User+Leet +- Type: Gebruikerwoorden + Leet +- +- +- Type: Repeated +- Type: Herhaald +- +- +- Type: Sequence +- Type: Reeks +- +- +- Type: Spatial +- Type: Ruimtelijk +- +- +- Type: Date +- Type: Datum +- +- +- Type: Bruteforce(Rep) +- Type: Brute kracht (herh) +- +- +- Type: Dictionary(Rep) +- Type: Woordenboek (herh) +- +- +- Type: Dict+Leet(Rep) +- Type: Woordenboek + Leet (herh) +- +- +- Type: User Words(Rep) +- Type: Gebruikerwoorden (herh) +- +- +- Type: User+Leet(Rep) +- Type: Gebruikerwoorden + Leet (herh) +- +- +- Type: Repeated(Rep) +- Type: Herhaald (herh) +- +- +- Type: Sequence(Rep) +- Type: Reeks (herh) +- +- +- Type: Spatial(Rep) +- Type: Ruimtelijk (herh) +- +- +- Type: Date(Rep) +- Type: Datum (herh) +- +- +- Type: Unknown%1 +- Type: Onbekend %1 +- +- +- Entropy %1 (%2) +- Entropie %1 (%2) +- +- +- *** Password length (%1) != sum of length of parts (%2) *** +- *** Wachtwoordlengte (%1) ! = som van de lengte van de onderdelen (%2) *** +- +- +- Failed to load key file %1: %2 +- Er ging iets fout bij het laden van sleutelbestand %1: %2 +- +- +- Length of the generated password +- Lengte van het gegenereerde wachtwoord +- +- +- Use lowercase characters +- Kleine letters gebruiken +- +- +- Use uppercase characters +- Hoofdletters gebruiken +- +- +- Use special characters +- Speciale tekens gebruiken +- +- +- Use extended ASCII +- Uitgebreide ASCII-tekens gebruiken +- +- +- Exclude character set +- Tekenset uitsluiten +- +- +- chars +- Tekens +- +- +- Exclude similar looking characters +- Op elkaar lijkende tekens niet gebruiken +- +- +- Include characters from every selected group +- Tekens uit iedere geslecteerde groep opnemen +- +- +- Recursively list the elements of the group. +- De elementen van de groep recursief opsommen +- +- +- Cannot find group %1. +- Kan groep %1 niet vinden. +- +- +- Error reading merge file: +-%1 +- Fout bij lezen van samenvoegbestand: +-%1 +- +- +- Unable to save database to file : %1 +- Kan de database niet opslaan in bestand: %1 +- +- +- Unable to save database to file: %1 +- Kan de database niet opslaan in bestand: %1 +- +- +- Successfully recycled entry %1. +- Item %1 is hergebruikt. +- +- +- Successfully deleted entry %1. +- Item %1 is verwijderd. +- +- +- Show the entry's current TOTP. +- Toon de huidige TOTP van het item. +- +- +- ERROR: unknown attribute %1. +- FOUT: onbekend kenmerk %1. +- +- +- No program defined for clipboard manipulation +- Geen programma ingesteld voor klembord manipulatie +- +- +- file empty +- leeg bestand +- +- +- %1: (row, col) %2,%3 +- %1: (rij, col) %2,%3 +- +- +- AES-KDF (KDBX 4) +- AES-KDF (KDBX 4) +- +- +- AES-KDF (KDBX 3.1) +- AES-KDF (KDBX 3.1) +- +- +- Invalid Settings +- TOTP +- Ongeldige instellingen +- +- +- Invalid Key +- TOTP +- Ongeldige sleutel +- +- +- Message encryption failed. +- Berichtcodering is mislukt. +- +- +- No groups found +- Geen groepen gevonden +- +- +- Create a new database. +- Nieuwe database aanmaken +- +- +- File %1 already exists. +- Bestand %1 bestaat al. +- +- +- Loading the key file failed +- Laden van het sleutelbestand is mislukt +- +- +- No key is set. Aborting database creation. +- Geen sleutel ingesteld. De aanmaak van de database is afgebroken. +- +- +- Failed to save the database: %1. +- Opslaan van de database is mislukt: %1 +- +- +- Successfully created new database. +- Nieuwe database is aangemaakt +- +- +- Creating KeyFile %1 failed: %2 +- Aanmaak van sleutelbestand %1 is mislukt: %2 +- +- +- Loading KeyFile %1 failed: %2 +- Laden van sleutelbestand %1 is mislukt: %2 +- +- +- Path of the entry to remove. +- Pad van het te verwijderen item. +- +- +- Existing single-instance lock file is invalid. Launching new instance. +- Het bestaande single-instance vergrendelingsbestand is niet geldig. Een nieuwe instantie wordt gestart. +- +- +- The lock file could not be created. Single-instance mode disabled. +- Het vergrendelingsbestand kon niet worden aangemaakt. Single-instance mode uitgeschakeld. +- +- +- KeePassXC - cross-platform password manager +- KeepassXC - multi-platform wachtwoordbeheerder +- +- +- filenames of the password databases to open (*.kdbx) +- bestandsnamen van de te openen wachtwoorddatabases (*.kdbx) +- +- +- path to a custom config file +- pad naar aangepast configuratiebestand +- +- +- key file of the database +- sleutelbestand van de database +- +- +- read password of the database from stdin +- lees wachtwoord van de database uit stdin +- +- +- Another instance of KeePassXC is already running. +- Een andere instantie van KeePassXC is reeds actief. +- +- +- Fatal error while testing the cryptographic functions. +- Cruciale fout bij het testen van de cryptografische functies. +- +- +- KeePassXC - Error +- KeePassXC - Fout +- +- +- Database password: +- Databasewachtwoord: +- +- +- Cannot create new group +- Kan geen nieuwe groep aanmaken +- +- +- Deactivate password key for the database. +- Schakel de wachtwoordsleutel voor de database uit. +- +- +- Displays debugging information. +- Geeft foutopsporingsinformatie weer. +- +- +- Deactivate password key for the database to merge from. +- Deactiveer de wachtwoordsleutel voor de database waaruit je wil samenvoegen. +- +- +- Version %1 +- Versie %1 +- +- +- Build Type: %1 +- Bouwtype: %1 +- +- +- Revision: %1 +- Revisie: %1 +- +- +- Distribution: %1 +- Distributie: %1 +- +- +- Debugging mode is disabled. +- De foutopsporingsmodus is uitgeschakeld. +- +- +- Debugging mode is enabled. +- De foutopsporingsmodus is ingeschakeld. +- +- +- Operating system: %1 +-CPU architecture: %2 +-Kernel: %3 %4 +- Besturingssysteem: %1 +-CPU-architectuur: %2 +-Kernelversie: %3 %4 +- +- +- Auto-Type +- Auto-type +- +- +- KeeShare (signed and unsigned sharing) +- KeeShare (getekend en ongetekend delen) +- +- +- KeeShare (only signed sharing) +- KeeShare (alleen ondertekend delen) +- +- +- KeeShare (only unsigned sharing) +- KeeShare (alleen niet-ondertekend delen) +- +- +- YubiKey +- YubiKey +- +- +- TouchID +- TouchID +- +- +- None +- Geen +- +- +- Enabled extensions: +- Geactiveerde extensies: +- +- +- Cryptographic libraries: +- Cryptografische bibliotheken: +- +- +- Cannot generate a password and prompt at the same time! +- Kan geen wachtwoord en prompt op hetzelfde moment genereren! +- +- +- Adds a new group to a database. +- Voegt een nieuwe groep toe aan een database. +- +- +- Path of the group to add. +- Pad van de toe te voegen groep. +- +- +- Group %1 already exists! +- Groep %1 bestaat al! +- +- +- Group %1 not found. +- Groep %1 niet gevonden. +- +- +- Successfully added group %1. +- Groep %1 toegevoegd. +- +- +- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. +- Controleer of er wachtwoorden zijn gelekt en openbaar zijn gemaakt. BESTANDSNAAM moet het pad zijn van een bestand met SHA-1-hashes van gelekte wachtwoorden in HIBP-indeling, zoals beschikbaar op https://haveibeenpwned.com/Passwords. +- +- +- FILENAME +- BESTANDSNAAM +- +- +- Analyze passwords for weaknesses and problems. +- Analyseer wachtwoorden op zwakke punten en problemen. +- +- +- Failed to open HIBP file %1: %2 +- Kon HIBP bestand niet openen %1: %2 +- +- +- Evaluating database entries against HIBP file, this will take a while... +- De database items worden onderzocht met behulp van het HIBP-bestand, dit zal een tijdje duren... +- +- +- Close the currently opened database. +- Sluit de geopende database. +- +- +- Display this help. +- Toont deze helptekst. +- +- +- slot +- positie +- +- +- Invalid word count %1 +- Ongeldig aantal woorden %1 +- +- +- The word list is too small (< 1000 items) +- De woordenlijst is te klein (< 1000 items) +- +- +- Exit interactive mode. +- Interactieve modus afsluiten. +- +- +- Exports the content of a database to standard output in the specified format. +- Exporteert de inhoud van een database naar standaarduitvoer in de opgegeven indeling. +- +- +- Unable to export database to XML: %1 +- Kon de database niet exporteren naar XML: %1 +- +- +- Unsupported format %1 +- Niet-ondersteund formaat %1 +- +- +- Use numbers +- Getallen gebruiken. +- +- +- Invalid password length %1 +- Ongeldige wachtwoordlengte %1 +- +- +- Display command help. +- Toon helptekst voor opdracht. +- +- +- Available commands: +- Beschikbare opdrachten: +- +- +- Import the contents of an XML database. +- Importeer de inhoud van een XML-database. +- +- +- Path of the XML database export. +- Pad van de XML-database export. +- +- +- Path of the new database. +- Pad van de nieuwe database. +- +- +- Successfully imported database. +- Database is geïmporteerd. +- +- +- Unknown command %1 +- Onbekende opdracht %1 +- +- +- Flattens the output to single lines. +- Hiermee wordt de uitvoer samengevoegd tot enkele lijnen. +- +- +- Only print the changes detected by the merge operation. +- Alleen de wijzigingen afdrukken die zijn gedetecteerd door de samenvoegbewerking. +- +- +- Yubikey slot for the second database. +- YubiKey positie voor de tweede database. +- +- +- Successfully merged %1 into %2. +- %1 en %2 zijn samengevoegd. +- +- +- Database was not modified by merge operation. +- Database werd niet gewijzigd door het samenvoegen. +- +- +- Moves an entry to a new group. +- Hiermee verplaats je een item naar een nieuwe groep. +- +- +- Path of the entry to move. +- Pad van het te verplaatsen item. +- +- +- Path of the destination group. +- Pad van de doelgroep. +- +- +- Could not find group with path %1. +- Kan groep met pad %1 niet vinden. +- +- +- Entry is already in group %1. +- Het item is al in groep %1. +- +- +- Successfully moved entry %1 to group %2. +- Item %1 is verplaatst naar groep %2. +- +- +- Open a database. +- Open een gegevensbestand. +- +- +- Path of the group to remove. +- Pad van de te verwijderen groep. +- +- +- Cannot remove root group from database. +- Kan de hoofdgroep niet verwijderen uit de database. +- +- +- Successfully recycled group %1. +- Groep %1 is hergebruikt. +- +- +- Successfully deleted group %1. +- Groep %1 is verwijderd. +- +- +- Failed to open database file %1: not found +- Kan het databasebestand %1 niet openen: niet gevonden +- +- +- Failed to open database file %1: not a plain file +- Kan het databasebestand %1 niet openen: geen gewoon bestand +- +- +- Failed to open database file %1: not readable +- Kan het databasebestand %1 niet openen: niet leesbaar +- +- +- Enter password to unlock %1: +- Geef het wachtwoord om %1 te ontgrendelen: +- +- +- Invalid YubiKey slot %1 +- Ongeldige YubiKey positie %1 +- +- +- Enter password to encrypt database (optional): +- Voer een wachtwoord in om de database te versleutelen (optioneel): +- +- +- HIBP file, line %1: parse error +- HIBP-bestand, regel %1: fout bij interpreteren +- +- +- Secret Service Integration +- Integratie van geheime diensten +- +- +- User name +- Gebruikersnaam +- +- +- Password for '%1' has been leaked %2 time(s)! +- Wachtwoord voor '%1' is %2 keer gelekt!Wachtwoorden voor '%1' zijn %2 keer gelekt! +- +- +- Invalid password generator after applying all options +- Ongeldige wachtwoordgenerator na het toepassen van alle opties +- +- +- Show the protected attributes in clear text. +- Toon de beschermde kenmerken in tekst. +- +- +- Browser Plugin Failure +- Fout met browser-extensie +- +- +- Could not save the native messaging script file for %1. +- Kan het native messaging scriptbestand voor %1 niet opslaan. +- +- +- Copy the given attribute to the clipboard. Defaults to "password" if not specified. +- Kopieer het gegeven kenmerk naar het klembord. Dit is "wachtwoord" tenzij anders gespecificeerd. +- +- +- Copy the current TOTP to the clipboard (equivalent to "-a totp"). +- Kopieer de huidige TOTP naar het klembord (equivalent aan "-a totp"). +- +- +- Copy an entry's attribute to the clipboard. +- Kopieer het kenmerk van een item naar het klembord. +- +- +- ERROR: Please specify one of --attribute or --totp, not both. +- FOUT: geef --attribute op OF --totp, niet beide. +- +- +- ERROR: attribute %1 is ambiguous, it matches %2. +- FOUT: kenmerk %1 is dubbelzinnig, het komt overeen met %2. +- +- +- Attribute "%1" not found. +- Kenmerk "%1" niet aangetroffen. +- +- +- Entry's "%1" attribute copied to the clipboard! +- Kenmerk "%1" van het item is naar het klembord gekopieerd! +- +- +- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). +- Yubikey-positie en optioneel serienummer dat wordt gebruikt om toegang te krijgen tot de database (bijv. 1: 7370001). +- +- +- slot[:serial] +- positie[:nummer] +- +- +- Target decryption time in MS for the database. +- Beoogde decoderingstijd voor de database [ms]. +- +- +- time +- tijd +- +- +- Set the key file for the database. +- Het sleutelbestand voor de database instellen. +- +- +- Set a password for the database. +- Stel een wachtwoord in voor de database. +- +- +- Invalid decryption time %1. +- Ongeldige decoderingstijd %1. +- +- +- Target decryption time must be between %1 and %2. +- Beoogde decoderingstijd moet tussen %1 en %2 liggen. +- +- +- Failed to set database password. +- Kan databasewachtwoord niet instellen. +- +- +- Benchmarking key derivation function for %1ms delay. +- Tijdmeting sleutel-afleidingsfunctie bij %1 ms vertraging. +- +- +- Setting %1 rounds for key derivation function. +- Sleutel-afleidingsfunctie instellen op %1 iteraties. +- +- +- error while setting database key derivation settings. +- fout bij het instellen van database-sleutelafleiding. +- +- +- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. +- Formaat om te gebruiken bij het exporteren. Beschikbare keuzes zijn 'xml' of 'csv'. Standaard ingesteld op 'xml'. +- +- +- Unable to import XML database: %1 +- Kan XML-database niet importeren: %1 +- +- +- Show a database's information. +- Toon de gegevens van een database. +- +- +- UUID: +- UUID: +- +- +- Name: +- Naam: +- +- +- Description: +- Beschrijving: +- +- +- Cipher: +- Versleuteling: +- +- +- KDF: +- KDF: +- +- +- Recycle bin is enabled. +- Prullenbak is ingeschakeld. +- +- +- Recycle bin is not enabled. +- Prullenbak is niet ingeschakeld. +- +- +- Invalid command %1. +- Ongeldige opdracht %1. +- +- +- Invalid YubiKey serial %1 +- Ongeldig YubiKey nummer %1 +- +- +- Please touch the button on your YubiKey to continue… +- Druk op de knop van je YubiKey om door te gaan... +- +- +- Do you want to create a database with an empty password? [y/N]: +- Wil je een database aanmaken met een leeg wachtwoord? [j/N]: +- +- +- Repeat password: +- Herhaal wachtwoord: +- +- +- Error: Passwords do not match. +- Fout: wachtwoorden komen niet overeen. +- +- +- All clipping programs failed. Tried %1 +- +- Alle knipprogramma's zijn mislukt. Ik heb %1 geprobeerd +- +- +- +- AES (%1 rounds) +- AES (%1 iteraties) +- +- +- AES 256-bit +- AES 256-bit +- +- +- Twofish 256-bit +- Twofish 256-bit +- +- +- ChaCha20 256-bit +- ChaCha20: 256-bit {20 256-?} +- +- +- Benchmark %1 delay +- Tijdmeting %1 vertraging +- +- +- %1 ms +- milliseconds +- %1 ms%1 ms +- +- +- %1 s +- seconds +- %1 s%1 s +- +- +- path to a custom local config file +- +- +- +- WARNING: You are using an old key file format which KeePassXC may +-stop supporting in the future. +- +-Please consider generating a new key file. +- +- +- +- Argon2%1 (%2 rounds, %3 KB) +- +- +- +- Argon2d (KDBX 4 – recommended) +- +- +- +- Argon2id (KDBX 4) +- +- +- +- TOTP +- TOTP +- +- +- Icon +- Pictogram +- +- +- Unsupported key file version: %1 +- +- +- +- Checksum mismatch! Key file may be corrupt. +- +- +- +- Unexpected key file data! Key file may be corrupt. +- +- +- +- +- QtIOCompressor +- +- Internal zlib error when compressing: +- Interne fout in zlib bij inpakken: +- +- +- Error writing to underlying device: +- Fout bij schrijven naar onderliggend apparaat: +- +- +- Error opening underlying device: +- Fout bij openen van onderliggend apparaat: +- +- +- Error reading data from underlying device: +- Fout bij lezen van gegevens van onderliggend apparaat: +- +- +- Internal zlib error when decompressing: +- Interne fout in zlib bij uitpakken: +- +- +- +- QtIOCompressor::open +- +- The gzip format not supported in this version of zlib. +- Gzip wordt niet ondersteund in deze versie van zlib. +- +- +- Internal zlib error: +- Interne fout in zlib: +- +- +- +- ReportsWidgetHealthcheck +- +- Also show entries that have been excluded from reports +- Toon ook vermeldingen die zijn uitgesloten van rapportage +- +- +- Hover over reason to show additional details. Double-click entries to edit. +- Positioneer de muis boven een item om aanvullende details weer te geven. Dubbelklik een items om het te bewerken. +- +- +- Bad +- Password quality +- Slecht +- +- +- Bad — password must be changed +- Slecht — wachtwoord moet worden gewijzigd +- +- +- Poor +- Password quality +- Slecht +- +- +- Poor — password should be changed +- Mager — wachtwoord moet worden gewijzigd +- +- +- Weak +- Password quality +- Zwak +- +- +- Weak — consider changing the password +- Zwak — overweeg het wachtwoord te wijzigen +- +- +- (Excluded) +- (Uitgesloten) +- +- +- This entry is being excluded from reports +- Dit item wordt uitgesloten van rapportage +- +- +- Please wait, health data is being calculated... +- Even geduld, gezondheidsgegevens worden verzameld... +- +- +- Congratulations, everything is healthy! +- Gefeliciteerd, alles ziet er goed uit! +- +- +- Title +- Naam +- +- +- Path +- Pad +- +- +- Score +- Score +- +- +- Reason +- Reden +- +- +- Edit Entry... +- Item bewerken... +- +- +- Exclude from reports +- Uitsluiten van rapportage +- +- +- +- ReportsWidgetHibp +- +- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. +- LET OP: Voor deze rapportage wordt informatie verzonden naar de online dienst Have I Been Pwned (HIBP) (https://haveibeenpwned.com). Als je doorgaat, worden je databasewachtwoorden cryptografisch gehasht en worden de eerste vijf tekens van die hashes op veilige wijze verzonden naar deze dienst. Jouw database blijft veilig en kan uit deze informatie niet worden samengesteld. Het aantal wachtwoorden dat je verzendt en je IP-adres worden wel blootgesteld aan deze dienst. +- +- +- Perform Online Analysis +- Online analyse uitvoeren +- +- +- Also show entries that have been excluded from reports +- Toon ook vermeldingen die zijn uitgesloten van rapportage +- +- +- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. +- Deze versie van KeePassXC biedt geen netwerkfunctionaliteit. Dit is nodig om jouw wachtwoorden te vergelijken met die in de databases van Have I Been Pwned. +- +- +- Congratulations, no exposed passwords! +- Gefeliciteerd, geen gelekte wachtwoorden! +- +- +- Title +- Naam +- +- +- Path +- Pad +- +- +- Password exposed… +- Gelekte wachtwoorden... +- +- +- (Excluded) +- (Uitgesloten) +- +- +- This entry is being excluded from reports +- Dit item wordt uitgesloten van rapportage +- +- +- once +- eenmalig +- +- +- up to 10 times +- tot 10 keer +- +- +- up to 100 times +- tot 100 keer +- +- +- up to 1000 times +- tot 1000 keer +- +- +- up to 10,000 times +- tot 10.000 keer +- +- +- up to 100,000 times +- tot 100.000 keer +- +- +- up to a million times +- tot miljoen keer +- +- +- millions of times +- miljoen keer +- +- +- Edit Entry... +- Item bewerken... +- +- +- Exclude from reports +- Uitsluiten van rapportage +- +- +- +- ReportsWidgetStatistics +- +- Hover over lines with error icons for further information. +- Beweeg de muis over regels met foutpictogrammen voor meer informatie. +- +- +- Name +- Naam +- +- +- Value +- Waarde +- +- +- Please wait, database statistics are being calculated... +- Even geduld, databasestatistieken worden berekend... +- +- +- Database name +- Databasenaam +- +- +- Description +- Beschrijving +- +- +- Location +- Locatie +- +- +- Last saved +- Laatst opgeslagen +- +- +- Unsaved changes +- Niet-opgeslagen wijzigingen +- +- +- yes +- ja +- +- +- no +- nee +- +- +- The database was modified, but the changes have not yet been saved to disk. +- De database is bewerkt, maar de wijzigingen zijn nog niet opgeslagen. +- +- +- Number of groups +- Aantal groepen +- +- +- Number of entries +- Aantal items +- +- +- Number of expired entries +- Aantal verlopen items +- +- +- The database contains entries that have expired. +- De database bevat items die verlopen zijn. +- +- +- Unique passwords +- Unieke wachtwoorden +- +- +- Non-unique passwords +- Niet-unieke wachtwoorden +- +- +- More than 10% of passwords are reused. Use unique passwords when possible. +- Meer dan 10% van de wachtwoorden zijn dubbel gebruikt. Gebruik waar mogelijk unieke wachtwoorden. +- +- +- Maximum password reuse +- Maximaal wachtwoordherbruik +- +- +- Some passwords are used more than three times. Use unique passwords when possible. +- Verscheidene wachtwoorden worden meer dan drie keer gebruikt. Gebruik waar mogelijk unieke wachtwoorden. +- +- +- Number of short passwords +- Aantal korte wachtwoorden +- +- +- Recommended minimum password length is at least 8 characters. +- Aangeraden minimumlengte voor wachtwoorden is 8 tekens. +- +- +- Number of weak passwords +- Aantal zwakke wachtwoorden +- +- +- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. +- Het is aanbevolen om lange, willekeurige wachtwoorden te gebruiken met een beoordeling van 'goed' of 'uitstekend'. +- +- +- Entries excluded from reports +- Items die zijn uitgesloten van rapportage +- +- +- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. +- Het uitsluiten van vermeldingen uit rapportage, bijv. omdat al bekend is dat ze een slecht wachtwoord hebben, is niet per se een probleem, maar je moet ze wel in de gaten houden. +- +- +- Average password length +- Gemiddelde wachtwoordlengte +- +- +- %1 characters +- %1 tekens +- +- +- Average password length is less than ten characters. Longer passwords provide more security. +- Gemiddeld wachtwoordlengte is minder dan tien tekens. Langere wachtwoorden bieden meer veiligheid. +- +- +- +- SSHAgent +- +- Agent connection failed. +- Verbinding met agent mislukt. +- +- +- Agent protocol error. +- Agent-protocolfout. +- +- +- No agent running, cannot add identity. +- Geen agent actief, kan geen identiteit toevoegen. +- +- +- No agent running, cannot remove identity. +- Geen agent actief, kan geen identiteit verwijderen. +- +- +- Agent refused this identity. Possible reasons include: +- Agent weigerde deze identiteit. Mogelijke redenen zijn onder andere: +- +- +- The key has already been added. +- De sleutel was al toegevoegd. +- +- +- Restricted lifetime is not supported by the agent (check options). +- De agent ondersteunt beperkte levensduur niet (zie opties). +- +- +- A confirmation request is not supported by the agent (check options). +- De agent ondersteunt aanvraag voor transactiebevestiging niet (zie opties). +- +- +- Key identity ownership conflict. Refusing to add. +- Conflict tussen sleutelidentiteit. Geweigerd. +- +- +- No agent running, cannot list identities. +- Geen agent actief, kan geen identiteiten opsommen. +- +- +- +- SearchHelpWidget +- +- Search Help +- Zoek hulp +- +- +- Search terms are as follows: [modifiers][field:]["]term["] +- Zoektermen zijn als volgt: [parameters][veld:]["]term["] +- +- +- Every search term must match (ie, logical AND) +- Elke zoekterm moet overeenkomen (een logisch EN) +- +- +- Modifiers +- Modifiers +- +- +- exclude term from results +- zoekterm uit resultaten weglaten +- +- +- match term exactly +- zoekterm moet exact overeenkomen +- +- +- use regex in term +- expressies gebruiken in zoekopdracht +- +- +- Fields +- Velden +- +- +- Term Wildcards +- Zoekterm jokertekens +- +- +- match anything +- elke overeenkomst +- +- +- match one +- één overeenkomst +- +- +- logical OR +- logische OF +- +- +- Examples +- Voorbeelden +- +- +- +- SearchWidget +- +- Search +- Zoeken +- +- +- Limit search to selected group +- Beperk het zoeken tot de geselecteerde groep +- +- +- Search Help +- Zoek hulp +- +- +- Search (%1)... +- Search placeholder text, %1 is the keyboard shortcut +- Zoeken (%1)... +- +- +- Case sensitive +- Hoofdlettergevoelig +- +- +- +- SettingsWidgetFdoSecrets +- +- Options +- Opties +- +- +- Enable KeepassXC Freedesktop.org Secret Service integration +- De integratie van KeepassXC Freedesktop.org Secret service inschakelen +- +- +- General +- Algemeen +- +- +- Show notification when credentials are requested +- Toon een melding wanneer inloggegevens worden gevraagd +- +- +- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> +- <html><head></head><body><p>Als de prullenbak is ingeschakeld voor de database, worden items rechtstreeks naar de prullenbak verplaatst. Anders, zullen ze zonder bevestiging worden verwijderd.</p><p>Je wordt nog steeds gevraagd voor het verwijderen van items waarnaar wordt verwezen door andere items.</p></body></html> +- +- +- Exposed database groups: +- Blootgestelde databasegroepen: +- +- +- Authorization +- Autorisatie +- +- +- These applications are currently connected: +- Deze programma's zijn momenteel verbonden: +- +- +- Don't confirm when entries are deleted by clients +- Niet om bevestiging vragen wanneer items worden verwijderd door clients +- +- +- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. +- <b>Fout:</b> Geen verbinding met DBus. Controleer de DBus-instellingen. +- +- +- <b>Warning:</b> +- <b>Waarschuwing:</b> +- +- +- Save current changes to activate the plugin and enable editing of this section. +- Sla huidige wijzigingen op om de plug-in te activeren en het bewerken van deze sectie mogelijk te maken. +- +- +- +- SettingsWidgetKeeShare +- +- Active +- Activering +- +- +- Allow export +- Exporteren toestaan +- +- +- Allow import +- Importeren toestaan +- +- +- Own certificate +- Eigen certificaat +- +- +- Fingerprint: +- Vingerafdruk: +- +- +- Certificate: +- Certificaat: +- +- +- Signer +- Ondertekenaar +- +- +- Key: +- Sleutel: +- +- +- Generate +- Genereren +- +- +- Import +- Importeren +- +- +- Export +- Exporteren +- +- +- Imported certificates +- Geïmporteerde certificaten +- +- +- Trust +- Vertrouwen +- +- +- Ask +- Vragen +- +- +- Untrust +- Niet vertrouwen +- +- +- Remove +- Verwijderen +- +- +- Path +- Pad +- +- +- Status +- Status +- +- +- Fingerprint +- Vingerafdruk +- +- +- Certificate +- Certificaat +- +- +- Trusted +- Vertrouwd +- +- +- Untrusted +- Niet-vertrouwd +- +- +- Unknown +- Onbekend +- +- +- key.share +- Filetype for KeeShare key +- Key.share +- +- +- KeeShare key file +- KeeShare sleutelbestand +- +- +- All files +- Alle bestanden +- +- +- Select path +- Pad selecteren +- +- +- Exporting changed certificate +- Gewijzigd certificaat exporteren +- +- +- The exported certificate is not the same as the one in use. Do you want to export the current certificate? +- Het geëxporteerde certificaat is niet hetzelfde als die in gebruik is. Wil je het huidige certificaat exporteren? +- +- +- Signer: +- Ondertekenaar: +- +- +- Allow KeeShare imports +- Importeren van KeeShare toestaan +- +- +- Allow KeeShare exports +- Sta KeeShare exports toe +- +- +- Only show warnings and errors +- Alleen waarschuwingen en fouten weergeven +- +- +- Key +- Sleutel +- +- +- Signer name field +- Ondertekenaar naam veld +- +- +- Generate new certificate +- Nieuw certificaat genereren +- +- +- Import existing certificate +- Bestaand certificaat importeren +- +- +- Export own certificate +- Eigen certificaat exporteren +- +- +- Known shares +- Bekende gedeelde databases +- +- +- Trust selected certificate +- Geselecteerd certificaat vertrouwen +- +- +- Ask whether to trust the selected certificate every time +- Vraag elke keer of je het geselecteerde certificaat wilt vertrouwen +- +- +- Untrust selected certificate +- Geselecteerd certificaat niet vertrouwen +- +- +- Remove selected certificate +- Geselecteerd certificaat verwijderen +- +- +- +- ShareExport +- +- Overwriting signed share container is not supported - export prevented +- Het overschrijven van een ondertekende container wordt niet ondersteund - export is niet uitgevoerd +- +- +- Could not write export container (%1) +- Kan geen export-container schrijven (%1) +- +- +- Could not embed signature: Could not open file to write (%1) +- Kon handtekening niet insluiten: kan bestand niet openen om te schrijven (%1) +- +- +- Could not embed signature: Could not write file (%1) +- Kon handtekening niet insluiten: kan niet schrijven naar bestand (%1) +- +- +- Could not embed database: Could not open file to write (%1) +- Kan database niet insluiten: kan bestand niet openen om te schrijven (%1) +- +- +- Could not embed database: Could not write file (%1) +- Kan database niet insluiten: kan niet schrijven naar bestand (%1) +- +- +- Overwriting unsigned share container is not supported - export prevented +- Het overschrijven van een niet-ondertekende container wordt niet ondersteund - export is niet uitgevoerd +- +- +- Could not write export container +- Kan niet schrijven naar export-container +- +- +- Unexpected export error occurred +- Onverwachte fout bij het exporteren +- +- +- +- ShareImport +- +- Import from container without signature +- Importeren vanuit een niet-ondertekende container +- +- +- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? +- De bron van de gedeelde container kan niet worden gecontroleerd omdat deze niet ondertekend is. Weet je zeker dat je vanuit %1 wilt importeren? +- +- +- Import from container with certificate +- Importeren vanuit een container met certificaat +- +- +- Do you want to trust %1 with the fingerprint of %2 from %3? +- Wil je %1 met vingerafdruk %2 vanaf %3 vertrouwen? {1 ?} {2 ?} +- +- +- Not this time +- Deze keer niet +- +- +- Never +- Nooit +- +- +- Always +- Altijd +- +- +- Just this time +- Alleen deze keer +- +- +- Signed share container are not supported - import prevented +- Ondertekende containers wordt niet ondersteund - import is niet uitgevoerd +- +- +- File is not readable +- Bestand is niet leesbaar +- +- +- Invalid sharing container +- Ongeldige deel-container +- +- +- Untrusted import prevented +- Onbetrouwbare import is niet uitgevoerd +- +- +- Successful signed import +- Ondertekende import is voltooid +- +- +- Unsigned share container are not supported - import prevented +- Niet-ondertekende container wordt niet ondersteund - import is niet uitgevoerd +- +- +- Successful unsigned import +- Niet-ondertekende import voltooid +- +- +- File does not exist +- Bestand bestaat niet +- +- +- Unknown share container type +- Type van deel-container is onbekend +- +- +- +- ShareObserver +- +- Import from %1 failed (%2) +- Importeren vanuit %1 is mislukt (%2) +- +- +- Import from %1 successful (%2) +- Importeren vanuit %1 is voltooid (%2) +- +- +- Imported from %1 +- Geïmporteerd vanuit %1 +- +- +- Export to %1 failed (%2) +- Exporteren naar %1 is mislukt (%2) +- +- +- Export to %1 successful (%2) +- Exporteren naar %1 gelukt (%2) +- +- +- Export to %1 +- Exporteren naar %1 +- +- +- Multiple import source path to %1 in %2 +- Meerdere import-bronpaden naar %1 in %2 +- +- +- Conflicting export target path %1 in %2 +- Conflicterend export-doelpad %1 in %2 +- +- +- +- TotpDialog +- +- Timed Password +- Tijdgebonden wachtwoord +- +- +- 000000 +- 000000 +- +- +- Copy +- Kopiëren +- +- +- Expires in <b>%n</b> second(s) +- Verloopt in <b>%n</b> seconde(n)Verloopt over <b>%n</b> seconde(n) +- +- +- +- TotpExportSettingsDialog +- +- Copy +- Kopiëren +- +- +- NOTE: These TOTP settings are custom and may not work with other authenticators. +- TOTP QR code dialog warning +- Let op: deze TOTP-instellingen zijn applicatie-specifiek en werken mogelijk niet met andere authenticators. +- +- +- There was an error creating the QR code. +- Er ging iets fout bij het maken van de QR-code. +- +- +- Closing in %1 seconds. +- Sluiten in %1 seconden. +- +- +- +- TotpSetupDialog +- +- Setup TOTP +- TOTP-instellen +- +- +- Default RFC 6238 token settings +- Standaardinstellingen RFC 6238-token +- +- +- Steam token settings +- Steam-tokeninstellingen +- +- +- Use custom settings +- Aangepaste instellingen gebruiken +- +- +- Custom Settings +- Aangepaste instellingen +- +- +- Time step: +- Tijdsinterval: +- +- +- sec +- Seconds +- sec +- +- +- Code size: +- Grootte van de code: +- +- +- Secret Key: +- Geheime sleutel: +- +- +- Secret key must be in Base32 format +- Geheime sleutel moet in Base32-indeling zijn +- +- +- Secret key field +- Geheime sleutel veld +- +- +- Algorithm: +- Algoritme: +- +- +- Time step field +- Tijd-stap veld +- +- +- digits +- cijfers +- +- +- Invalid TOTP Secret +- Ongeldig TOTP-geheim +- +- +- You have entered an invalid secret key. The key must be in Base32 format. +-Example: JBSWY3DPEHPK3PXP +- Je hebt een ongeldige geheime sleutel ingevoerd. De sleutel moet in Base32-indeling zijn. +-Voorbeeld: JBSWY3DPEHPK3PXP +- +- +- Confirm Remove TOTP Settings +- Bevestig het verwijderen van de TOTP instellingen +- +- +- Are you sure you want to delete TOTP settings for this entry? +- Weet je zeker dat je de TOTP instellingen voor dit item wilt verwijderen? +- +- +- +- URLEdit +- +- Invalid URL +- Ongeldige URL +- +- +- +- UpdateCheckDialog +- +- Checking for updates +- Controleren op updates +- +- +- Checking for updates... +- Controleren op updates... +- +- +- Close +- Sluiten +- +- +- Update Error! +- Update-fout! +- +- +- An error occurred in retrieving update information. +- Er ging iets fout bij het ophalen van de update-informatie. +- +- +- Please try again later. +- Probeer het later nog eens. +- +- +- Software Update +- Software-update +- +- +- A new version of KeePassXC is available! +- Er is een nieuwe versie van KeePassXC! +- +- +- KeePassXC %1 is now available — you have %2. +- KeePassXC %1 is nu beschikbaar — jij gebruikt %2. +- +- +- Download it at keepassxc.org +- Download het van keepassxc.org +- +- +- You're up-to-date! +- Je bent up-to-date! +- +- +- KeePassXC %1 is currently the newest version available +- KeePassXC %1 is de nieuwste versie +- +- +- +- WelcomeWidget +- +- Start storing your passwords securely in a KeePassXC database +- Sla jouw wachtwoorden veilig op in een KeePassXC-database +- +- +- Create new database +- Nieuwe database aanmaken +- +- +- Open existing database +- Bestaande database openen +- +- +- Import from KeePass 1 +- Importeren vanuit Keepass 1-database +- +- +- Import from CSV +- Importeren vanuit CSV-bestand +- +- +- Recent databases +- Recente databases +- +- +- Welcome to KeePassXC %1 +- Welkom bij KeePassXC %1 +- +- +- Import from 1Password +- Van 1Password importeren +- +- +- Open a recent database +- Een recente database openen +- +- +- +- YubiKey +- +- %1 [%2] Configured Slot - %3 +- %1 [%2] Ingestelde positie - %3 +- +- +- %1 [%2] Challenge Response - Slot %3 - %4 +- %1 [%2] Challenge Response - Positie %3 - %4 +- +- +- Press +- Druk +- +- +- Passive +- Passief +- +- +- %1 Invalid slot specified - %2 +- %1 Ongeldige positie opgegeven - %2 +- +- +- The YubiKey interface has not been initialized. +- De YubiKey-interface is niet geïnitialiseerd. +- +- +- Hardware key is currently in use. +- Hardwaresleutel is momenteel in gebruik. +- +- +- Could not find hardware key with serial number %1. Please plug it in to continue. +- Hardwaresleutel met serienummer %1 niet gevonden. Sluit deze aan om door te gaan. +- +- +- Hardware key timed out waiting for user interaction. +- Er is een time-out opgetreden voor de hardwaresleutel tijdens het wachten op gebruikersinteractie. +- +- +- A USB error ocurred when accessing the hardware key: %1 +- Er is een USB-fout opgetreden bij het openen van de hardwaresleutel: %1 +- +- +- Failed to complete a challenge-response, the specific error was: %1 +- Challenge-response is niet voltooid, de specifieke fout was: %1 +- +- +- +- YubiKeyEditWidget +- +- Refresh +- Vernieuwen +- +- +- YubiKey Challenge-Response +- YubiKey challenge/response +- +- +- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- <p>Als je zelf een <a href="https://www.yubico.com/"> YubiKey</a> hebt, kun je deze gebruiken voor extra beveiliging.</p> <p>De YubiKey vereist dat een van zijn posities (slots) wordt geprogrammeerd als <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/"> HMAC-SHA1 Challenge-Response</a>.</p> +- +- +- Refresh hardware tokens +- Hardwaretoken verversen +- +- +- Hardware key slot selection +- Hardwaresleutel positie selectie +- +- +- Could not find any hardware keys! +- Geen hardwaresleutels aangetroffen! +- +- +- Selected hardware key slot does not support challenge-response! +- Geselecteerde hardwaresleutel-positie ondersteunt geen challenge-respons! +- +- +- Detecting hardware keys… +- Hardwaresleutels detecteren... +- +- +- No hardware keys detected +- Geen hardwaresleutels gedetecteerd +- +- +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_pl.ts keepassxc-2.6.4-patched/share/translations/keepassx_pl.ts +--- keepassxc-2.6.4-orig/share/translations/keepassx_pl.ts 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/translations/keepassx_pl.ts 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7897 +0,0 @@ +- +- +- AboutDialog +- +- About KeePassXC +- O programie KeePassXC +- +- +- About +- O programie +- +- +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- ZgÅ‚oÅ› bÅ‚Ä™dy na: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- +- +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- KeePassXC jest dystrybuowany zgodnie z warunkami licencji GNU General Public License (GPL) w wersji 2 lub (opcjonalnie) w wersji 3. +- +- +- Contributors +- Współtwórcy +- +- +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Zobacz wkÅ‚ady na GitHubie</a> +- +- +- Debug Info +- Informacje debugowania +- +- +- Include the following information whenever you report a bug: +- Przy zgÅ‚aszaniu bÅ‚Ä™dów uwzglÄ™dnij nastÄ™pujÄ…ce informacje: +- +- +- Copy to clipboard +- Skopiuj do schowka +- +- +- Project Maintainers: +- Opiekunowie projektu: +- +- +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- Specjalne podziÄ™kowania od zespoÅ‚u KeePassXC dla debfx za stworzenie oryginalnego KeePassX. +- +- +- +- AgentSettingsWidget +- +- Use OpenSSH for Windows instead of Pageant +- Użyj OpenSSH dla Windows zamiast Pageanta +- +- +- Enable SSH Agent integration +- WÅ‚Ä…cz integracjÄ™ agenta SSH +- +- +- SSH_AUTH_SOCK value +- Wartość SSH_AUTH_SOCK +- +- +- SSH_AUTH_SOCK override +- ZastÄ…pienie SSH_AUTH_SOCK +- +- +- (empty) +- (puste) +- +- +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- Brak dostÄ™pnego gniazda agenta SSH. Sprawdź, czy istnieje zmienna Å›rodowiskowa SSH_AUTH_SOCK, lub ustaw zastÄ…pienie. +- +- +- SSH Agent connection is working! +- PoÅ‚Ä…czenie agenta SSH dziaÅ‚a! +- +- +- +- ApplicationSettingsWidget +- +- Application Settings +- Ustawienia aplikacji +- +- +- General +- Ogólne +- +- +- Security +- BezpieczeÅ„stwo +- +- +- Access error for config file %1 +- BÅ‚Ä…d dostÄ™pu pliku konfiguracyjnego %1 +- +- +- Icon only +- Tylko ikona +- +- +- Text only +- Tylko tekst +- +- +- Text beside icon +- Tekst obok ikony +- +- +- Text under icon +- Tekst pod ikonÄ… +- +- +- Follow style +- Utrzymaj styl +- +- +- Reset Settings? +- Zresetować ustawienia? +- +- +- Are you sure you want to reset all general and security settings to default? +- Czy na pewno chcesz zresetować wszystkie ustawienia ogólne i zabezpieczeÅ„ do domyÅ›lnych? +- +- +- Monochrome (light) +- Monochromatyczny (jasny) +- +- +- Monochrome (dark) +- Monochromatyczny (ciemny) +- +- +- Colorful +- Kolorowy +- +- +- You must restart the application to set the new language. Would you like to restart now? +- Musisz uruchomić ponownie aplikacjÄ™, aby ustawić nowy jÄ™zyk. Czy chcesz teraz to zrobić? +- +- +- +- ApplicationSettingsWidgetGeneral +- +- Basic Settings +- Ustawienia podstawowe +- +- +- Startup +- Uruchamianie +- +- +- Start only a single instance of KeePassXC +- Uruchom tylko jednÄ… instancjÄ™ KeePassXC +- +- +- Minimize window at application startup +- Minimalizuj okno podczas uruchamiania aplikacji +- +- +- File Management +- ZarzÄ…dzanie plikami +- +- +- Backup database file before saving +- Utwórz kopiÄ™ zapasowÄ… pliku bazy danych przed zapisaniem +- +- +- Automatically save after every change +- Automatycznie zapisz po każdej zmianie +- +- +- Automatically reload the database when modified externally +- Automatycznie przeÅ‚aduj bazÄ™ danych, gdy zostanie zmodyfikowana zewnÄ™trznie +- +- +- Entry Management +- ZarzÄ…dzanie wpisami +- +- +- Use group icon on entry creation +- Użyj ikony grupy podczas tworzenia wpisu +- +- +- Minimize instead of app exit +- Zminimalizuj zamiast wyjść z aplikacji +- +- +- Show a system tray icon +- Pokaż ikonÄ™ w zasobniku systemowym +- +- +- Hide window to system tray when minimized +- Schowaj okno do zasobnika podczas minimalizacji +- +- +- Auto-Type +- Autowpisywanie +- +- +- Use entry title to match windows for global Auto-Type +- Użyj tytuÅ‚u wpisy, aby dopasować okna dla globalnego autowpisywania +- +- +- Use entry URL to match windows for global Auto-Type +- Użyj adresu URL wpisu, aby dopasować okna dla globalnego autowpisywania +- +- +- Always ask before performing Auto-Type +- Zawsze pytaj przed wykonaniem autowpisywania +- +- +- ms +- Milliseconds +- ms +- +- +- Movable toolbar +- Ruchomy pasek narzÄ™dzi +- +- +- Remember previously used databases +- PamiÄ™taj wczeÅ›niej używane bazy danych +- +- +- Load previously open databases on startup +- ZaÅ‚aduj wczeÅ›niej otwarte bazy danych podczas uruchamiania +- +- +- Remember database key files and security dongles +- PamiÄ™taj pliki kluczy bazy danych i klucze sprzÄ™towe +- +- +- Check for updates at application startup once per week +- Sprawdzaj aktualizacje przy uruchamianiu aplikacji raz w tygodniu +- +- +- Include beta releases when checking for updates +- UwzglÄ™dnij wersje beta podczas sprawdzania aktualizacji +- +- +- Language: +- JÄ™zyk: +- +- +- (restart program to activate) +- (uruchom ponownie program, aby aktywować) +- +- +- Minimize window after unlocking database +- Minimalizuj okno po odblokowaniu bazy danych +- +- +- Minimize when opening a URL +- Minimalizuj podczas otwierania adresu URL +- +- +- Hide window when copying to clipboard +- Ukryj okno podczas kopiowania do schowka +- +- +- Minimize +- Minimalizuj +- +- +- Drop to background +- Upuść w tle +- +- +- Favicon download timeout: +- Limit czasu pobierania ikony ulubionych: +- +- +- Website icon download timeout in seconds +- Limit czasu pobierania ikony witryny w sekundach +- +- +- sec +- Seconds +- s +- +- +- Toolbar button style +- Styl przycisków paska narzÄ™dzi +- +- +- Language selection +- Wybór jÄ™zyka +- +- +- Global auto-type shortcut +- Skrót globalnego autowpisywania +- +- +- Auto-type character typing delay milliseconds +- Opóźnienie wpisywania znaków przez autowpisywanie w milisekundach +- +- +- Auto-type start delay milliseconds +- Opóźnienie rozpoczÄ™cia autowpisywania w milisekundach +- +- +- Automatically launch KeePassXC at system startup +- Automatycznie uruchom KeePassXC podczas uruchamiania systemu +- +- +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- Bezpiecznie zapisuj pliki bazy danych (wyÅ‚Ä…cz, jeÅ›li wystÄ™pujÄ… problemy z Dropboksem itp.) +- +- +- User Interface +- Interfejs użytkownika +- +- +- Toolbar button style: +- Styl przycisków paska narzÄ™dzi: +- +- +- Use monospaced font for notes +- Użyj czcionek o staÅ‚ej szerokoÅ›ci w notatkach +- +- +- Tray icon type: +- Typ ikony zasobnika: +- +- +- Reset settings to default… +- Zresetuj ustawienia do domyÅ›lnych… +- +- +- Auto-Type typing delay: +- Opóźnienie pisania autowpisywania: +- +- +- Global Auto-Type shortcut: +- Skrót globalnego autowpisywania: +- +- +- Auto-Type start delay: +- Opóźnienie rozpoczÄ™cia autowpisywania: +- +- +- Automatically save when locking database +- Automatycznie zapisuj podczas blokowania bazy danych +- +- +- Automatically save non-data changes when locking database +- Automatycznie zapisuj zmiany niezwiÄ…zane z danymi podczas blokowania bazy danych +- +- +- Tray icon type +- Typ ikony zasobnika +- +- +- +- ApplicationSettingsWidgetSecurity +- +- Timeouts +- Limity czasowe +- +- +- Clear clipboard after +- Wyczyść schowek po +- +- +- sec +- Seconds +- s +- +- +- Lock databases after inactivity of +- Zablokuj bazÄ™ danych po nieaktywnoÅ›ci +- +- +- min +- min +- +- +- Forget TouchID after inactivity of +- Zapomnij TouchID po nieaktywnoÅ›ci +- +- +- Convenience +- PorÄ™czność +- +- +- Lock databases when session is locked or lid is closed +- Zablokuj bazy danych, gdy sesja jest zablokowana albo pokrywa jest zamkniÄ™ta +- +- +- Forget TouchID when session is locked or lid is closed +- Zapomnij TouchID, gdy sesja jest zablokowana lub pokrywa jest zamkniÄ™ta +- +- +- Lock databases after minimizing the window +- Zablokuj bazÄ™ danych po zminimalizowaniu okna +- +- +- Re-lock previously locked database after performing Auto-Type +- Ponownie zablokuj poprzednio zablokowanÄ… bazÄ™ danych po wykonaniu autowpisywania +- +- +- Hide passwords in the entry preview panel +- Ukryj hasÅ‚a w panelu podglÄ…du wpisu +- +- +- Hide entry notes by default +- DomyÅ›lnie ukrywaj wpisy notatek +- +- +- Privacy +- Prywatność +- +- +- Use DuckDuckGo service to download website icons +- Użyj usÅ‚ugi DuckDuckGo do pobierania ikon witryn +- +- +- Clipboard clear seconds +- Wyczyszczenie schowka w sekundach +- +- +- Touch ID inactivity reset +- Reset nieaktywnoÅ›ci Touch ID +- +- +- Database lock timeout seconds +- Limit czasu blokady bazy danych w sekundach +- +- +- min +- Minutes +- min +- +- +- Clear search query after +- Wyczyść wyszukanÄ… frazÄ™ po +- +- +- Require password repeat when it is visible +- Wymagaj powtórzenia hasÅ‚a, gdy jest widoczne +- +- +- Hide passwords when editing them +- Ukryj hasÅ‚a podczas ich edycji +- +- +- Use placeholder for empty password fields +- Używaj symboli zastÄ™pczych w pustych polach hasÅ‚a +- +- +- +- AutoType +- +- Couldn't find an entry that matches the window title: +- Nie znaleziono wpisu pasujÄ…cego do nazwy okna: +- +- +- Auto-Type - KeePassXC +- Autowpisywanie - KeePassXC +- +- +- Auto-Type +- Autowpisywanie +- +- +- The Syntax of your Auto-Type statement is incorrect! +- SkÅ‚adnia instrukcji autowpisywania jest niepoprawna! +- +- +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- Polecenie autowpisywania zawiera bardzo dÅ‚ugie opóźnienie. Czy chcesz kontynuować? +- +- +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- Polecenie autowpisywania zawiera bardzo wolne wciÅ›niÄ™cia klawiszy. Czy chcesz kontynuować? +- +- +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- Polecenie autowpisywania zawiera argumenty, które powtarzajÄ… siÄ™ bardzo czÄ™sto. Czy chcesz kontynuować? +- +- +- Permission Required +- Wymagane uprawnienie +- +- +- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC wymaga uprawnienia dostÄ™pnoÅ›ci w celu wykonania podstawowego autowpisywania. JeÅ›li już udzielono uprawnienia, być może bÄ™dzie wymagane ponowne uruchomienie KeePassXC. +- +- +- +- AutoTypeAssociationsModel +- +- Window +- Okno +- +- +- Sequence +- Sekwencja +- +- +- Default sequence +- DomyÅ›lna sekwencja +- +- +- +- AutoTypeMatchModel +- +- Group +- Grupa +- +- +- Title +- TytuÅ‚ +- +- +- Username +- Użytkownik +- +- +- Sequence +- Sekwencja +- +- +- +- AutoTypeMatchView +- +- Copy &username +- Skopi&uj nazwÄ™ użytkownika +- +- +- Copy &password +- Skopiuj &hasÅ‚o +- +- +- +- AutoTypePlatformMac +- +- Permission Required +- Wymagane uprawnienie +- +- +- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC wymaga uprawnieÅ„ dostÄ™pnoÅ›ci i rejestratora ekranu w celu wykonania globalnego autowpisywania. Nagrywanie ekranu jest konieczne, aby użyć tytuÅ‚u okna do odnajdywania wpisów. JeÅ›li już udzielono uprawnieÅ„, być może bÄ™dzie wymagane ponowne uruchomienie KeePassXC. +- +- +- +- AutoTypeSelectDialog +- +- Auto-Type - KeePassXC +- Autowpisywanie - KeePassXC +- +- +- Select entry to Auto-Type: +- Wybierz wpis do autowpisywania: +- +- +- Search... +- Szukaj... +- +- +- +- BrowserAccessControlDialog +- +- KeePassXC - Browser Access Request +- KeePassXC - Żądanie dostÄ™pu do przeglÄ…darki +- +- +- %1 is requesting access to the following entries: +- %1 prosi o dostÄ™p do nastÄ™pujÄ…cych wpisów: +- +- +- Remember access to checked entries +- ZapamiÄ™taj dostÄ™p do zaznaczonych wpisów +- +- +- Remember +- ZapamiÄ™taj +- +- +- Allow access to entries +- Zezwalaj na dostÄ™p do wpisów +- +- +- Allow Selected +- Zezwalaj wybranym +- +- +- Deny All +- Odmów wszystkim +- +- +- Disable for this site +- WyÅ‚Ä…cz dla tej witryny +- +- +- +- BrowserEntrySaveDialog +- +- KeePassXC-Browser Save Entry +- Zapisz wpis KeePassXC-Browser +- +- +- Ok +- OK +- +- +- Cancel +- Anuluj +- +- +- You have multiple databases open. +-Please select the correct database for saving credentials. +- Masz wiele otwartych baz danych. +-Wybierz wÅ‚aÅ›ciwÄ… bazÄ™ danych do zapisania danych uwierzytelniajÄ…cych. +- +- +- +- BrowserService +- +- KeePassXC: New key association request +- KeePassXC: Nowe żądanie skojarzenia klucza +- +- +- Save and allow access +- Zapisz i zezwól na dostÄ™p +- +- +- KeePassXC: Overwrite existing key? +- KeePassXC: Nadpisać istniejÄ…cy klucz? +- +- +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- Współdzielony klucz szyfrujÄ…cy o nazwie "%1" już istnieje. +-Czy chcesz go nadpisać? +- +- +- KeePassXC: Update Entry +- KeePassXC: Aktualizacja wpisu +- +- +- Do you want to update the information in %1 - %2? +- Czy chcesz uaktualnić informacjÄ™ w %1 - %2? +- +- +- Abort +- Zaniechaj +- +- +- Converting attributes to custom data… +- Konwertowanie atrybutów na niestandardowe dane... +- +- +- KeePassXC: Converted KeePassHTTP attributes +- KeePassXC: Przekonwertowane atrybuty KeePassHTTP +- +- +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- PomyÅ›lnie przekonwertowano atrybuty z %1 wpis(ów). +-Przeniesiono %2 klucze do niestandardowych danych. +- +- +- Successfully moved %n keys to custom data. +- PomyÅ›lnie przeniesiono %n klucz do niestandardowych danych.PomyÅ›lnie przeniesiono %n klucze do niestandardowych danych.PomyÅ›lnie przeniesiono %n kluczy do niestandardowych danych.PomyÅ›lnie przeniesiono %n kluczy do niestandardowych danych. +- +- +- KeePassXC: No entry with KeePassHTTP attributes found! +- KeePassXC: Nie znaleziono wpisu z atrybutami KeePassHTTP! +- +- +- The active database does not contain an entry with KeePassHTTP attributes. +- Aktywna baza danych nie zawiera wpisu z atrybutami KeePassHTTP. +- +- +- KeePassXC: Legacy browser integration settings detected +- KeePassXC: Wykryto ustawienia przestarzaÅ‚ej integracji z przeglÄ…darkÄ… +- +- +- KeePassXC: Create a new group +- KeePassXC: Utwórz nowÄ… grupÄ™ +- +- +- A request for creating a new group "%1" has been received. +-Do you want to create this group? +- +- Otrzymano żądanie utworzenia nowej grupy "%1". +-Czy chcesz stworzyć tÄ™ grupÄ™? +- +- +- +- Your KeePassXC-Browser settings need to be moved into the database settings. +-This is necessary to maintain your current browser connections. +-Would you like to migrate your existing settings now? +- Twoje ustawienia KeePassXC-Browser należy przenieść do ustawieÅ„ bazy danych. +-Jest to konieczne, aby utrzymać bieżące poÅ‚Ä…czenia przeglÄ…darki. +-Czy chcesz teraz migrować istniejÄ…ce ustawienia? +- +- +- Don't show this warning again +- Nie wyÅ›wietlaj ponownie tego ostrzeżenia +- +- +- You have received an association request for the following database: +-%1 +- +-Give the connection a unique name or ID, for example: +-chrome-laptop. +- OtrzymaÅ‚eÅ› żądanie skojarzenia nastÄ™pujÄ…cej bazy danych: +-%1 +- +-Nadaj poÅ‚Ä…czeniu unikatowÄ… nazwÄ™ lub identyfikator, na przykÅ‚ad: +-chrome-laptop. +- +- +- +- BrowserSettingsWidget +- +- Dialog +- Okno dialogowe +- +- +- This is required for accessing your databases with KeePassXC-Browser +- Wymagane jest to aby uzyskać dostÄ™p do baz danych za pomocÄ… KeePassXC-Browser +- +- +- Enable browser integration +- WÅ‚Ä…cz integracjÄ™ z przeglÄ…darkÄ… +- +- +- General +- Ogólne +- +- +- Browsers installed as snaps are currently not supported. +- PrzeglÄ…darki zainstalowane jako snapy sÄ… obecnie nieobsÅ‚ugiwane. +- +- +- Enable integration for these browsers: +- WÅ‚Ä…cz integracjÄ™ z tymi przeglÄ…darkami: +- +- +- Vivaldi +- Vivaldi +- +- +- &Edge +- &Edge +- +- +- Firefox +- Firefox +- +- +- Tor Browser +- Tor Browser +- +- +- Brave +- Brave +- +- +- Google Chrome +- Google Chrome +- +- +- Chromium +- Chromium +- +- +- Show a notification when credentials are requested +- Credentials mean login data requested via browser extension +- Pokaż powiadomienie, gdy wymagane sÄ… dane uwierzytelniajÄ…ce +- +- +- Request to unlock the database if it is locked +- Żądaj odblokowania bazy danych, jeżeli jest zablokowana +- +- +- Only entries with the same scheme (http://, https://, ...) are returned. +- Tylko wpisy z tym samym schematem (http://, https://, ...) sÄ… zwracane. +- +- +- Match URL scheme (e.g., https://...) +- Dopasuj schemat adresu URL (np. https://...) +- +- +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- Zwracaj tylko najlepsze dopasowania wpisów dla adresu URL zamiast wszystkich wpisów domeny. +- +- +- Return only best-matching credentials +- Zwróć tylko najlepiej pasujÄ…ce dane uwierzytelniajÄ…ce +- +- +- Returns expired credentials. String [expired] is added to the title. +- Zwraca wygasÅ‚e dane uwierzytelniajÄ…ce. CiÄ…g [wygasÅ‚e] jest dodawany do tytuÅ‚u. +- +- +- Allow returning expired credentials +- Zezwalaj na zwrot wygasÅ‚ych danych uwierzytelniajÄ…cych +- +- +- All databases connected to the extension will return matching credentials. +- Wszystkie bazy danych podÅ‚Ä…czone do rozszerzenia zwrócÄ… pasujÄ…ce dane uwierzytelniajÄ…ce. +- +- +- Search in all opened databases for matching credentials +- Credentials mean login data requested via browser extension +- Szukaj we wszystkich otwartych bazach danych dopasowanych danych uwierzytelniajÄ…cych +- +- +- Sort matching credentials by title +- Credentials mean login data requested via browser extension +- Sortuj dopasowane dane uwierzytelniajÄ…ce wedÅ‚ug tytuÅ‚u +- +- +- Sort matching credentials by username +- Credentials mean login data requested via browser extension +- Sortuj dopasowane dane uwierzytelniajÄ…ce wedÅ‚ug nazwy użytkownika +- +- +- Advanced +- Zaawansowane +- +- +- Never ask before accessing credentials +- Credentials mean login data requested via browser extension +- Nigdy nie pytaj przed uzyskaniem dostÄ™pu do danych uwierzytelniajÄ…cych +- +- +- Never ask before updating credentials +- Credentials mean login data requested via browser extension +- Nigdy nie pytaj przed aktualizacjÄ… danych uwierzytelniajÄ…cych +- +- +- Do not ask permission for HTTP Basic Auth +- An extra HTTP Basic Auth setting +- Nie pytaj o uprawnienie dla podstawowego uwierzytelniania HTTP +- +- +- Automatically creating or updating string fields is not supported. +- Automatyczne tworzenie albo aktualizowanie pól ciÄ…gów znaków nie jest obsÅ‚ugiwane. +- +- +- Return advanced string fields which start with "KPH: " +- Zwracaj zaawansowane pola ciÄ…gów znaków, które zaczynajÄ… siÄ™ od "KPH: " +- +- +- Don't display the popup suggesting migration of legacy KeePassHTTP settings. +- Nie wyÅ›wietlaj wyskakujÄ…cego okienka sugerujÄ…cego migracjÄ™ przestarzaÅ‚ych ustawieÅ„ KeePassHTTP. +- +- +- Do not prompt for KeePassHTTP settings migration. +- Nie pytaj o migracjÄ™ ustawieÅ„ KeePassHTTP. +- +- +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- Aktualizuje automatycznie Å›cieżkÄ™ binarnÄ… KeePassXC albo keepassxc-proxy do skryptów wiadomoÅ›ci natywnych podczas uruchamiania. +- +- +- Update native messaging manifest files at startup +- Aktualizuj pliki manifestu wiadomoÅ›ci natywnych podczas uruchamiania +- +- +- Use a custom proxy location if you installed a proxy manually. +- Używaj niestandardowej lokalizacji proxy, jeżeli zostaÅ‚a zainstalowana rÄ™cznie. +- +- +- Use a custom proxy location: +- Meant is the proxy for KeePassXC-Browser +- Używaj niestandardowej lokalizacji proxy: +- +- +- Custom proxy location field +- Niestandardowe pole lokalizacji proxy +- +- +- Browser for custom proxy file +- PrzeglÄ…darka niestandardowego pliku proxy +- +- +- Browse... +- Button for opening file dialog +- PrzeglÄ…daj... +- +- +- Use a custom browser configuration location: +- Używaj niestandardowej lokalizacji konfiguracji przeglÄ…darki: +- +- +- Browser type: +- Typ przeglÄ…darki: +- +- +- Toolbar button style +- Styl przycisku paska narzÄ™dzi +- +- +- Config Location: +- Lokalizacja konfiguracji: +- +- +- Custom browser location field +- Niestandardowe pole lokalizacji przeglÄ…darki +- +- +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- +- +- Browse for custom browser path +- Wyszukaj niestandardowÄ… Å›cieżkÄ™ przeglÄ…darki +- +- +- Custom extension ID: +- Identyfikator niestandardowego rozszerzenia: +- +- +- Custom extension ID +- Identyfikator niestandardowego rozszerzenia +- +- +- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 +- Ze wzglÄ™du na sandboxing Snap należy uruchomić skrypt, aby umożliwić integracjÄ™ przeglÄ…darki.<br />Możesz uzyskać ten skrypt z %1 +- +- +- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 +- KeePassXC-Browser jest niezbÄ™dny do integracji przeglÄ…darki. <br />Pobierz go dla %1 oraz %2 i %3. %4 +- +- +- Please see special instructions for browser extension use below +- Zobacz poniżej specjalne instrukcje dotyczÄ…ce używania rozszerzenia przeglÄ…darki +- +- +- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. +- <b>BÅ‚Ä…d:</b> Nie można znaleźć niestandardowej lokalizacji proxy! Integracja przeglÄ…darki NIE DZIAÅA bez aplikacji proxy. +- +- +- <b>Warning:</b> The following options can be dangerous! +- <b>Ostrzeżenie:</b> Poniższe opcje mogÄ… być niebezpieczne! +- +- +- Executable Files +- Pliki wykonywalne +- +- +- All Files +- Wszystkie pliki +- +- +- Select custom proxy location +- Wybierz niestandardowÄ… lokalizacjÄ™ proxy +- +- +- Select native messaging host folder location +- Wybierz lokalizacjÄ™ folderu hosta wiadomoÅ›ci natywnych +- +- +- +- CloneDialog +- +- Clone Options +- Opcje klonowania +- +- +- Append ' - Clone' to title +- Dodaj ' - Klon' do nazwy +- +- +- Replace username and password with references +- WymieÅ„ nazwÄ™ użytkownika i hasÅ‚o z odniesieniami +- +- +- Copy history +- Skopiuj historiÄ™ +- +- +- +- CsvImportWidget +- +- Import CSV fields +- Importuj pola CSV +- +- +- filename +- nazwa pliku +- +- +- size, rows, columns +- rozmiar, wiersze, kolumny +- +- +- Encoding +- Kodowanie +- +- +- Codec +- Kodek +- +- +- Text is qualified by +- Tekst jest klasyfikowany za pomocÄ… +- +- +- Fields are separated by +- Pola sÄ… oddzielone za pomocÄ… +- +- +- Comments start with +- Komentarze zaczynajÄ… siÄ™ od +- +- +- Consider '\' an escape character +- Traktuj '\' jako znak ucieczki +- +- +- Preview +- PodglÄ…d +- +- +- Imported from CSV file +- Importowane z pliku CSV +- +- +- Original data: +- Oryginalne dane: +- +- +- Error +- BÅ‚Ä…d +- +- +- Error(s) detected in CSV file! +- Wykryto bÅ‚Ä…d lub bÅ‚Ä™dy w pliku CSV! +- +- +- [%n more message(s) skipped] +- [%n wiÄ™cej komunikat pominiÄ™to] [%n wiÄ™cej komunikatów pominiÄ™to] [%n wiÄ™cej komunikatów pominiÄ™to] [%n wiÄ™cej komunikatów pominiÄ™to] +- +- +- CSV import: writer has errors: +-%1 +- Import CSV: zapisywanie z bÅ‚Ä™dami: +-%1 +- +- +- Text qualification +- Kwalifikacja tekstu +- +- +- Field separation +- Separacja pola +- +- +- Number of header lines to discard +- Liczba wierszy nagłówka do odrzucenia +- +- +- CSV import preview +- PodglÄ…d importu CSV +- +- +- Column Association +- Skojarzenie kolumny +- +- +- Last Modified +- Ostatnia modyfikacja +- +- +- Password +- HasÅ‚o +- +- +- Created +- Stworzone +- +- +- Notes +- Notatki +- +- +- Title +- TytuÅ‚ +- +- +- Group +- Grupa +- +- +- URL +- Adres URL +- +- +- Username +- Użytkownik +- +- +- Header lines skipped +- Wiersze nagłówka pominiÄ™to +- +- +- First line has field names +- Pierwszy wiersz ma nazwy pól +- +- +- Not Present +- Nieobecne +- +- +- Column %1 +- Kolumna %1 +- +- +- TOTP +- TOTP +- +- +- Icon +- Ikona +- +- +- +- CsvParserModel +- +- %n column(s) +- %n kolumna%n kolumny%n kolumn%n kolumn +- +- +- %1, %2, %3 +- file info: bytes, rows, columns +- %1, %2, %3 +- +- +- %n byte(s) +- %n bajt%n bajty%n bajtów%n bajtów +- +- +- %n row(s) +- %n rzÄ…d%n rzÄ™dy%n rzÄ™dów%n rzÄ™dów +- +- +- +- Database +- +- File %1 does not exist. +- Plik %1 nie istnieje. +- +- +- Unable to open file %1. +- Nie można otworzyć pliku %1. +- +- +- Error while reading the database: %1 +- BÅ‚Ä…d podczas odczytu bazy danych: %1 +- +- +- File cannot be written as it is opened in read-only mode. +- Plik nie może zostać zapisany, ponieważ jest otwarty w trybie tylko do odczytu. +- +- +- Key not transformed. This is a bug, please report it to the developers! +- Klucz nie zostaÅ‚ przeksztaÅ‚cony. To jest bÅ‚Ä…d, zgÅ‚oÅ› go deweloperom! +- +- +- %1 +-Backup database located at %2 +- %1 +-Zapasowa baza danych znajduje siÄ™ w %2 +- +- +- Could not save, database does not point to a valid file. +- Nie można zapisać, baza danych nie wskazuje poprawnego pliku. +- +- +- Could not save, database file is read-only. +- Nie można zapisać, plik bazy danych jest tylko do odczytu. +- +- +- Database file has unmerged changes. +- Plik bazy danych zawiera niescalone zmiany. +- +- +- Recycle Bin +- Kosz +- +- +- Passwords +- Root group name +- HasÅ‚a +- +- +- Database save is already in progress. +- Zapisywanie bazy danych jest już w toku. +- +- +- Could not save, database has not been initialized! +- Nie można zapisać, baza danych nie zostaÅ‚a zainicjowana! +- +- +- +- DatabaseOpenDialog +- +- Unlock Database - KeePassXC +- Odblokuj bazÄ™ danych - KeePassXC +- +- +- +- DatabaseOpenWidget +- +- Key File: +- Plik klucza: +- +- +- Refresh +- OdÅ›wież +- +- +- Don't show this warning again +- Nie wyÅ›wietlaj ponownie tego ostrzeżenia +- +- +- All files +- Wszystkie pliki +- +- +- Key files +- Pliki kluczy +- +- +- Select key file +- Wybierz plik klucza +- +- +- Failed to open key file: %1 +- Nie można otworzyć pliku klucza: %1 +- +- +- Unlock KeePassXC Database +- Odblokuj bazÄ™ danych KeePassXC +- +- +- Enter Password: +- Wprowadź hasÅ‚o: +- +- +- Password field +- Pole hasÅ‚a +- +- +- Hardware key slot selection +- Wybór gniazda klucza sprzÄ™towego +- +- +- Browse for key file +- PrzeglÄ…daj plik klucza +- +- +- Browse... +- PrzeglÄ…daj... +- +- +- Refresh hardware tokens +- OdÅ›wież tokeny sprzÄ™towe +- +- +- Hardware Key: +- Klucz sprzÄ™towy: +- +- +- Hardware key help +- Pomoc klucza sprzÄ™towego +- +- +- TouchID for Quick Unlock +- TouchID do szybkiego odblokowania +- +- +- Unlock failed and no password given +- Odblokowanie nie powiodÅ‚o siÄ™ i nie podano hasÅ‚a +- +- +- Unlocking the database failed and you did not enter a password. +-Do you want to retry with an "empty" password instead? +- +-To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. +- Odblokowanie bazy danych nie powiodÅ‚o siÄ™ i nie wprowadzono hasÅ‚a. +-Czy zamiast tego chcesz spróbować ponownie z "pustym" hasÅ‚em? +- +-Aby zapobiec pojawianiu siÄ™ tego bÅ‚Ä™du, musisz przejść do "Ustawienia bazy danych / BezpieczeÅ„stwo" i zresetować hasÅ‚o. +- +- +- Retry with empty password +- Spróbuj ponownie z pustym hasÅ‚em +- +- +- Enter Additional Credentials (if any): +- Wprowadź dodatkowe dane uwierzytelniajÄ…ce (jeÅ›li istniejÄ…): +- +- +- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +-<p>Click for more information...</p> +- <p>Możesz użyć sprzÄ™towego klucza bezpieczeÅ„stwa, takiego jak <strong>YubiKey</strong> albo <strong>OnlyKey</strong> z gniazdami skonfigurowanymi dla HMAC-SHA1.</p> +-<p>Kliknij, aby uzyskać wiÄ™cej informacji...</p> +- +- +- Key file help +- Pomoc dotyczÄ…ca pliku klucza +- +- +- ? +- ? +- +- +- Cannot use database file as key file +- Nie można użyć pliku bazy danych jako pliku klucza +- +- +- You cannot use your database file as a key file. +-If you do not have a key file, please leave the field empty. +- Nie można użyć pliku bazy danych jako pliku klucza. +-JeÅ›li nie masz pliku klucza, pozostaw puste pole. +- +- +- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> +- <p>Oprócz hasÅ‚a głównego można użyć pliku sekretnego w celu zwiÄ™kszenia bezpieczeÅ„stwa bazy danych. Ten plik można wygenerować w ustawieniach zabezpieczeÅ„ bazy danych.</p><p>To <strong>nie</strong> jest plik bazy danych *. kdbx!<br>JeÅ›li nie masz pliku klucza, pozostaw to pole puste.</p><p>Kliknij, aby uzyskać wiÄ™cej informacji...</p> +- +- +- Key file to unlock the database +- Plik klucza do odblokowania bazy danych +- +- +- Please touch the button on your YubiKey! +- ProszÄ™ dotknąć przycisku na twoim YubiKey! +- +- +- Detecting hardware keys… +- Wykrywanie kluczy sprzÄ™towych… +- +- +- No hardware keys detected +- Nie wykryto kluczy sprzÄ™towych +- +- +- Select hardware key… +- Wybierz klucz sprzÄ™towy… +- +- +- Old key file format +- Stary format pliku klucza +- +- +- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> +- Używasz starego formatu pliku klucza, który KeePassXC może<br>przestać obsÅ‚ugiwać w przyszÅ‚oÅ›ci.<br><br>Rozważ wygenerowanie nowego pliku klucza, przechodzÄ…c do:<br><strong>Baza danych / BezpieczeÅ„stwo bazy danych / ZmieÅ„ plik klucza.</strong><br> +- +- +- +- DatabaseSettingWidgetMetaData +- +- Passwords +- HasÅ‚a +- +- +- +- DatabaseSettingsDialog +- +- Advanced Settings +- Ustawienia zaawansowane +- +- +- General +- Ogólne +- +- +- Security +- BezpieczeÅ„stwo +- +- +- Encryption Settings +- Ustawienia szyfrowania +- +- +- Browser Integration +- Integracja z przeglÄ…darkÄ… +- +- +- Database Credentials +- Dane uwierzytelniajÄ…ce bazy danych +- +- +- +- DatabaseSettingsWidgetBrowser +- +- KeePassXC-Browser settings +- Ustawienia KeePassXC-Browser +- +- +- Stored keys +- Przechowywane klucze +- +- +- Remove +- UsuÅ„ +- +- +- Delete the selected key? +- Usunąć wybrany klucz? +- +- +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- Czy na pewno chcesz usunąć wybrany klucz? +-Może to uniemożliwić poÅ‚Ä…czenie z wtyczkÄ… przeglÄ…darki. +- +- +- Key +- Klucz +- +- +- Value +- Wartość +- +- +- Enable Browser Integration to access these settings. +- WÅ‚Ä…cz integracjÄ™ z przeglÄ…darkÄ…, aby uzyskać dostÄ™p do tych ustawieÅ„. +- +- +- Disconnect all browsers +- RozÅ‚Ä…cz wszystkie przeglÄ…darki +- +- +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- Czy na pewno chcesz rozÅ‚Ä…czyć wszystkie przeglÄ…darki? +-Może to uniemożliwić poÅ‚Ä…czenie z wtyczkÄ… przeglÄ…darki. +- +- +- KeePassXC: No keys found +- KeePassXC: Nie znaleziono kluczy +- +- +- No shared encryption keys found in KeePassXC settings. +- Nie znaleziono współdzielonych kluczy szyfrujÄ…cych w ustawieniach KeePassXC. +- +- +- KeePassXC: Removed keys from database +- KeePassXC: UsuniÄ™to klucze z bazy danych +- +- +- Successfully removed %n encryption key(s) from KeePassXC settings. +- PomyÅ›lnie usuniÄ™to %n klucz szyfrowania z ustawieÅ„ KeePassXC.PomyÅ›lnie usuniÄ™to %n klucze szyfrowania z ustawieÅ„ KeePassXC.PomyÅ›lnie usuniÄ™to %n kluczy szyfrowania z ustawieÅ„ KeePassXC.PomyÅ›lnie usuniÄ™to %n kluczy szyfrowania z ustawieÅ„ KeePassXC. +- +- +- Forget all site-specific settings on entries +- Zapomnij wszystkie ustawienia witryn dla wpisów +- +- +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- Czy na pewno chcesz zapomnieć wszystkie ustawienia witryn dla każdego wpisu? +-Uprawnienia dostÄ™pu do wpisów zostanÄ… odwoÅ‚ane. +- +- +- Removing stored permissions… +- Usuwanie przechowywanych uprawnieÅ„... +- +- +- Abort +- Zaniechaj +- +- +- KeePassXC: Removed permissions +- KeePassXC: UsuniÄ™to uprawnienia +- +- +- Successfully removed permissions from %n entry(s). +- PomyÅ›lnie usuniÄ™to uprawnienia z %n wpisu.PomyÅ›lnie usuniÄ™to uprawnienia z %n wpisów.PomyÅ›lnie usuniÄ™to uprawnienia z %n wpisów.PomyÅ›lnie usuniÄ™to uprawnienia z %n wpisów. +- +- +- KeePassXC: No entry with permissions found! +- KeePassXC: Nie znaleziono wpisu z uprawnieniami! +- +- +- The active database does not contain an entry with permissions. +- Aktywna baza danych nie zawiera wpisu z uprawnieniami. +- +- +- Move KeePassHTTP attributes to custom data +- PrzenieÅ› atrybuty KeePassHTTP do niestandardowych danych +- +- +- Do you really want to move all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- Czy na pewno chcesz przenieść wszystkie dane przestarzaÅ‚ej integracji z przeglÄ…darkÄ… do najnowszego standardu? +-Jest to konieczne, aby zachować zgodność z wtyczkÄ… przeglÄ…darki. +- +- +- Stored browser keys +- Przechowywane klucze przeglÄ…darki +- +- +- Remove selected key +- UsuÅ„ wybrany klucz +- +- +- Move KeePassHTTP attributes to KeePassXC-Browser custom data +- PrzenieÅ› atrybuty KeePassHTTP do niestandardowych danych KeePassXC-Browser +- +- +- Refresh database root group ID +- OdÅ›wież identyfikator grupy głównej bazy danych +- +- +- Created +- Stworzone +- +- +- Refresh database ID +- OdÅ›wież identyfikator bazy danych +- +- +- Do you really want refresh the database ID? +-This is only necessary if your database is a copy of another and the browser extension cannot connect. +- Czy naprawdÄ™ chcesz odÅ›wieżyć identyfikator bazy danych? +-Jest to konieczne tylko wtedy, gdy baza danych jest kopiÄ… innej, a rozszerzenie przeglÄ…darki nie może siÄ™ poÅ‚Ä…czyć. +- +- +- +- DatabaseSettingsWidgetDatabaseKey +- +- Add additional protection... +- Dodaj dodatkowÄ… ochronÄ™... +- +- +- No password set +- Nie ustawiono hasÅ‚a +- +- +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- OSTRZEÅ»ENIE! Nie ustawiÅ‚eÅ› hasÅ‚a. Używanie bazy danych bez hasÅ‚a jest zdecydowanie odradzane! +- +-Czy na pewno chcesz kontynuować bez hasÅ‚a? +- +- +- Continue without password +- Kontynuuj bez hasÅ‚a +- +- +- No encryption key added +- Nie dodano klucza szyfrowania +- +- +- You must add at least one encryption key to secure your database! +- Musisz dodać co najmniej jeden klucz szyfrowania, aby zabezpieczyć bazÄ™ danych! +- +- +- Unknown error +- Nieznany bÅ‚Ä…d +- +- +- Failed to change database credentials +- Nie udaÅ‚o siÄ™ zmienić danych uwierzytelniajÄ…cych bazy danych +- +- +- +- DatabaseSettingsWidgetEncryption +- +- Encryption Algorithm: +- Algorytm szyfrowania: +- +- +- AES: 256 Bit (default) +- AES: 256-bitowy (domyÅ›lny) +- +- +- Twofish: 256 Bit +- Twofish: 256-bitowy +- +- +- Key Derivation Function: +- Funkcja derywacji klucza: +- +- +- Transform rounds: +- Liczba rund szyfrowania: +- +- +- Memory Usage: +- Zużycie pamiÄ™ci: +- +- +- Parallelism: +- Paralelizm: +- +- +- Decryption Time: +- Czas odszyfrowania: +- +- +- ?? s +- ?? s +- +- +- Change +- ZmieÅ„ +- +- +- Higher values offer more protection, but opening the database will take longer. +- Wyższe wartoÅ›ci zapewniajÄ… lepszÄ… ochronÄ™, ale otwarcie bazy danych potrwa dÅ‚użej. +- +- +- Database format: +- Format bazy danych: +- +- +- This is only important if you need to use your database with other programs. +- Jest to ważne tylko wtedy, gdy musisz korzystać z bazy danych z innymi programami. +- +- +- KDBX 4.0 (recommended) +- KDBX 4.0 (zalecany) +- +- +- KDBX 3.1 +- KDBX 3.1 +- +- +- unchanged +- Database decryption time is unchanged +- niezmieniony +- +- +- Number of rounds too high +- Key transformation rounds +- Zbyt duża liczba rund +- +- +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or days (or even longer) to open! +- Używasz bardzo dużej liczby rund transformacji klucza z Argon2. +- +-JeÅ›li zachowasz ten numer, otworzenie twojej bazy danych może zająć kilka godzin lub dni (lub nawet dÅ‚użej)! +- +- +- Understood, keep number +- Zrozumiano, zachowaj numer +- +- +- Cancel +- Anuluj +- +- +- Number of rounds too low +- Key transformation rounds +- Za maÅ‚a liczba rund +- +- +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database may be too easy to crack! +- Używasz bardzo maÅ‚ej liczby rund transformacji klucza z AES-KDF. +- +-JeÅ›li zachowasz tÄ™ liczbÄ™, twoja baza danych może być zbyt Å‚atwa do zÅ‚amania! +- +- +- KDF unchanged +- KDF niezmieniona +- +- +- Failed to transform key with new KDF parameters; KDF unchanged. +- Nie udaÅ‚o siÄ™ transformować klucza za pomocÄ… nowych parametrów KDF; KDF bez zmian. +- +- +- MiB +- Abbreviation for Mebibytes (KDF settings) +- MiB MiB MiB MiB +- +- +- thread(s) +- Threads for parallel execution (KDF settings) +- wÄ…tek wÄ…tki wÄ…tków wÄ…tków +- +- +- Change existing decryption time +- ZmieÅ„ istniejÄ…cy czas odszyfrowywania +- +- +- Decryption time in seconds +- Czas odszyfrowania w sekundach +- +- +- Database format +- Format bazy danych +- +- +- Encryption algorithm +- Algorytm szyfrowania +- +- +- Key derivation function +- Funkcja derywacji klucza +- +- +- Transform rounds +- Liczba rund szyfrowania +- +- +- Memory usage +- Zużycie pamiÄ™ci +- +- +- Parallelism +- Paralelizm +- +- +- ?? ms +- ?? ms +- +- +- ? s +- ? s +- +- +- +- DatabaseSettingsWidgetFdoSecrets +- +- Exposed Entries +- OdsÅ‚oniÄ™te wpisy +- +- +- Don't expose this database +- Nie odsÅ‚aniaj tej bazy danych +- +- +- Expose entries under this group: +- OdsÅ‚oÅ„ wpisy w tej grupie: +- +- +- Enable Secret Service to access these settings. +- WÅ‚Ä…cz usÅ‚ugÄ™ sekretnÄ…, aby uzyskać dostÄ™p do tych ustawieÅ„. +- +- +- +- DatabaseSettingsWidgetGeneral +- +- Database Meta Data +- Metadane bazy danych +- +- +- Database name: +- Nazwa bazy danych: +- +- +- Database description: +- Opis bazy danych: +- +- +- Default username: +- DomyÅ›lny użytkownik: +- +- +- History Settings +- Ustawienia historii +- +- +- Max. history items: +- Maks. liczba wpisów w historii: +- +- +- Max. history size: +- Maks. rozmiar historii: +- +- +- MiB +- MiB +- +- +- Use recycle bin +- Użyj kosza +- +- +- Additional Database Settings +- Dodatkowe ustawienia bazy danych +- +- +- Database name field +- Pole nazwy bazy danych +- +- +- Database description field +- Pole opisu bazy danych +- +- +- Default username field +- Pole domyÅ›lnej nazwy użytkownika +- +- +- Maximum number of history items per entry +- Maksymalna liczba pozycji historii na wpis +- +- +- Maximum size of history per entry +- Maksymalny rozmiar historii na wpis +- +- +- Delete Recycle Bin +- UsuÅ„ kosz +- +- +- Do you want to delete the current recycle bin and all its contents? +-This action is not reversible. +- Czy chcesz usunąć bieżący kosz i caÅ‚Ä… jego zawartość? +-To dziaÅ‚anie jest nieodwracalne. +- +- +- (old) +- (stare) +- +- +- Enable compression (recommended) +- WÅ‚Ä…cz kompresjÄ™ (zalecane) +- +- +- +- DatabaseSettingsWidgetKeeShare +- +- Sharing +- UdostÄ™pnianie +- +- +- Breadcrumb +- Nawigacja okruszkowa +- +- +- Type +- Typ +- +- +- Path +- Åšcieżka +- +- +- Last Signer +- Ostatni podpisujÄ…cy +- +- +- Certificates +- Certyfikaty +- +- +- > +- Breadcrumb separator +- > +- +- +- +- DatabaseSettingsWidgetMetaDataSimple +- +- Database Name: +- Nazwa bazy danych: +- +- +- Description: +- Opis: +- +- +- Database name field +- Pole nazwy bazy danych +- +- +- Database description field +- Pole opisu bazy danych +- +- +- +- DatabaseTabWidget +- +- KeePass 2 Database +- Baza danych KeePass 2 +- +- +- All files +- Wszystkie pliki +- +- +- Open database +- Otwórz bazÄ™ danych +- +- +- CSV file +- plik CSV +- +- +- Merge database +- Scal bazÄ™ danych +- +- +- Open KeePass 1 database +- Otwórz bazÄ™ danych KeePass 1 +- +- +- KeePass 1 database +- Baza danych KeePass 1 +- +- +- Export database to CSV file +- Eksportuj bazÄ™ danych do pliku CSV +- +- +- Writing the CSV file failed. +- BÅ‚Ä…d przy zapisywaniu pliku CSV. +- +- +- Database creation error +- BÅ‚Ä…d tworzenia bazy danych +- +- +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- Utworzona baza danych nie ma klucza ani KDF, odmawiam jej zapisania. +-Jest to z pewnoÅ›ciÄ… bÅ‚Ä…d, zgÅ‚oÅ› go programistom. +- +- +- Select CSV file +- Wybierz plik CSV +- +- +- New Database +- Nowa baza danych +- +- +- %1 [New Database] +- Database tab name modifier +- %1 [Nowa baza danych] +- +- +- %1 [Locked] +- Database tab name modifier +- %1 [Zablokowana] +- +- +- %1 [Read-only] +- Database tab name modifier +- %1 [Tylko do odczytu] +- +- +- Failed to open %1. It either does not exist or is not accessible. +- Nie udaÅ‚o siÄ™ otworzyć %1. To nie istnieje lub jest niedostÄ™pne. +- +- +- Export database to HTML file +- Eksportuj bazÄ™ danych do pliku HTML +- +- +- HTML file +- Plik HTML +- +- +- Writing the HTML file failed. +- Nie udaÅ‚o siÄ™ zapisać pliku HTML. +- +- +- Export Confirmation +- Potwierdzenie eksportu +- +- +- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? +- Za chwilÄ™ wyeksportujesz bazÄ™ danych do niezaszyfrowanego pliku. To narazi twoje hasÅ‚a i wrażliwe informacje! JesteÅ› pewien, że chcesz kontynuować? +- +- +- Open OPVault +- Otwórz OPVault +- +- +- +- DatabaseWidget +- +- Searching... +- Wyszukiwanie... +- +- +- Do you really want to delete the entry "%1" for good? +- Czy na pewno caÅ‚kowicie usunąć wpis "%1" ? +- +- +- Do you really want to move entry "%1" to the recycle bin? +- Czy na pewno chcesz przenieść wpis "%1" do kosza? +- +- +- Do you really want to move %n entry(s) to the recycle bin? +- Czy na pewno chcesz przenieść %n wpis do kosza?Czy na pewno chcesz przenieść %n wpisy do kosza?Czy na pewno chcesz przenieść %n wpisów do kosza?Czy na pewno chcesz przenieść %n wpisów do kosza? +- +- +- Execute command? +- Wykonać polecenie? +- +- +- Do you really want to execute the following command?<br><br>%1<br> +- Czy na pewno chcesz wykonać nastÄ™pujÄ…ce polecenie?<br><br>%1<br> +- +- +- Remember my choice +- ZapamiÄ™taj mój wybór +- +- +- Do you really want to delete the group "%1" for good? +- Czy na pewno caÅ‚kowicie usunąć grupÄ™ "%1"? +- +- +- No current database. +- Brak bieżącej bazy danych. +- +- +- No source database, nothing to do. +- Brak źródÅ‚owej bazy danych, nic do zrobienia. +- +- +- Search Results (%1) +- Wyniki wyszukiwania (%1) +- +- +- No Results +- Brak wyników +- +- +- File has changed +- Plik siÄ™ zmieniÅ‚ +- +- +- The database file has changed. Do you want to load the changes? +- Plik bazy danych ulegÅ‚ zmianie. Czy chcesz zaÅ‚adować zmiany? +- +- +- Merge Request +- Żądanie scalenia +- +- +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- Plik bazy danych zostaÅ‚ zmieniony, a masz niezapisane zmiany. +-Czy chcesz scalić twoje zmiany? +- +- +- Empty recycle bin? +- Opróżnić kosz? +- +- +- Are you sure you want to permanently delete everything from your recycle bin? +- Czy na pewno chcesz nieodwracalnie usunąć wszystko z twojego kosza? +- +- +- Do you really want to delete %n entry(s) for good? +- Czy naprawdÄ™ chcesz usunąć %n wpis na dobre?Czy naprawdÄ™ chcesz usunąć %n wpisy na dobre?Czy naprawdÄ™ chcesz usunąć %n wpisów na dobre?Czy naprawdÄ™ chcesz usunąć %n wpisów na dobre? +- +- +- Delete entry(s)? +- Usunąć wpis?Usunąć wpisy?Usunąć wpisy?Usunąć wpisy? +- +- +- Move entry(s) to recycle bin? +- Przenieść wpis do kosza?Przenieść wpisy do kosza?Przenieść wpisy do kosza?Przenieść wpisy do kosza? +- +- +- Lock Database? +- Zablokować bazÄ™ danych? +- +- +- You are editing an entry. Discard changes and lock anyway? +- Edytujesz wpis. Odrzucić zmiany i mimo to zablokować? +- +- +- "%1" was modified. +-Save changes? +- "%1" zostaÅ‚ zmieniony. +-Zapisać zmiany? +- +- +- Database was modified. +-Save changes? +- Baza danych zostaÅ‚a zmodyfikowana. +-Zapisać zmiany? +- +- +- Save changes? +- Zapisać zmiany? +- +- +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- Nie można otworzyć nowego pliku bazy danych podczas próby automatycznego przeÅ‚adowania. +-BÅ‚Ä…d: %1 +- +- +- Disable safe saves? +- WyÅ‚Ä…czyć bezpieczne zapisywanie? +- +- +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- KeePassXC nie zdoÅ‚aÅ‚ wielokrotnie zapisać bazy danych. Jest to prawdopodobnie spowodowane przez usÅ‚ugi synchronizacji plików, które blokujÄ… plik zapisu. +-WyÅ‚Ä…czyć bezpieczne zapisywanie i spróbować ponownie? +- +- +- Passwords +- HasÅ‚a +- +- +- Save database as +- Zapisz bazÄ™ danych jako +- +- +- KeePass 2 Database +- Baza danych KeePass 2 +- +- +- Replace references to entry? +- ZastÄ…pić odniesienia do wpisu? +- +- +- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? +- Wpis "%1" ma %2 odniesienie. Czy chcesz zastÄ…pić odniesienia wartoÅ›ciami, pominąć ten wpis, czy usunąć mimo to?Wpis "%1" ma %2 odniesienia. Czy chcesz zastÄ…pić odniesienia wartoÅ›ciami, pominąć ten wpis, czy usunąć mimo to?Wpis "%1" ma %2 odniesieÅ„. Czy chcesz zastÄ…pić odniesienia wartoÅ›ciami, pominąć ten wpis, czy usunąć mimo to?Wpis "%1" ma %2 odniesieÅ„. Czy chcesz zastÄ…pić odniesienia wartoÅ›ciami, pominąć ten wpis, czy usunąć mimo to? +- +- +- Delete group +- UsuÅ„ grupÄ™ +- +- +- Move group to recycle bin? +- Przenieść grupÄ™ do kosza? +- +- +- Do you really want to move the group "%1" to the recycle bin? +- Czy na pewno chcesz przenieść grupÄ™ "%1" do kosza? +- +- +- Successfully merged the database files. +- PomyÅ›lnie scalono pliki bazy danych. +- +- +- Database was not modified by merge operation. +- Baza danych nie zostaÅ‚a zmodyfikowana operacjÄ… scalania. +- +- +- Shared group... +- Grupa współdzielona... +- +- +- Writing the database failed: %1 +- BÅ‚Ä…d zapisu bazy danych: %1 +- +- +- This database is opened in read-only mode. Autosave is disabled. +- Ta baza danych jest otwarta w trybie tylko do odczytu. Automatyczne zapisywanie jest wyÅ‚Ä…czone. +- +- +- Save database backup +- Zapisz kopiÄ™ zapasowÄ… bazy danych +- +- +- Could not find database file: %1 +- Nie można znaleźć pliku bazy danych: %1 +- +- +- +- EditEntryWidget +- +- Entry +- Wpis +- +- +- Advanced +- Zaawansowane +- +- +- Icon +- Ikona +- +- +- Auto-Type +- Autowpisywanie +- +- +- Properties +- WÅ‚aÅ›ciwoÅ›ci +- +- +- History +- Historia +- +- +- SSH Agent +- Agent SSH +- +- +- n/a +- nie dotyczy +- +- +- (encrypted) +- (zaszyfrowane) +- +- +- Select private key +- Wybierz klucz prywatny +- +- +- Entry history +- Historia wpisu +- +- +- Add entry +- Dodaj wpis +- +- +- Edit entry +- Edycja wpisu +- +- +- New attribute +- Nowy atrybut +- +- +- Are you sure you want to remove this attribute? +- Czy na pewno chcesz usunąć ten atrybut? +- +- +- Tomorrow +- Jutro +- +- +- %n week(s) +- %n tydzieÅ„%n tygodnie%n tygodni%n tygodni +- +- +- %n month(s) +- %n miesiÄ…c%n miesiÄ…ce%n miesiÄ™cy%n miesiÄ™cy +- +- +- Entry updated successfully. +- Wpis zostaÅ‚ pomyÅ›lnie zaktualizowany. +- +- +- New attribute %1 +- Nowy atrybut %1 +- +- +- %n year(s) +- %n rok%n lata%n lat%n lat +- +- +- Confirm Removal +- Potwierdź usuniÄ™cie +- +- +- Browser Integration +- Integracja z przeglÄ…darkÄ… +- +- +- <empty URL> +- <empty URL> +- +- +- Are you sure you want to remove this URL? +- Czy na pewno chcesz usunąć ten adres URL? +- +- +- Reveal +- OdsÅ‚oÅ„ +- +- +- Hide +- Ukryj +- +- +- Unsaved Changes +- Niezapisane zmiany +- +- +- Would you like to save changes to this entry? +- Czy chcesz zapisać zmiany w tym wpisie? +- +- +- [PROTECTED] Press Reveal to view or edit +- [CHRONIONE] WciÅ›nij OdsÅ‚oÅ„, aby zobaczyć albo edytować +- +- +- Invalid Entry +- NieprawidÅ‚owy wpis +- +- +- An external merge operation has invalidated this entry. +-Unfortunately, any changes made have been lost. +- ZewnÄ™trzna operacja scalania unieważniÅ‚a ten wpis. +-Niestety, wszelkie wprowadzone zmiany zostaÅ‚y utracone. +- +- +- +- EditEntryWidgetAdvanced +- +- Additional attributes +- Dodatkowe atrybuty +- +- +- Add +- Dodaj +- +- +- Remove +- UsuÅ„ +- +- +- Edit Name +- Edytuj nazwÄ™ +- +- +- Protect +- ChroÅ„ +- +- +- Reveal +- OdsÅ‚oÅ„ +- +- +- Attachments +- ZaÅ‚Ä…czniki +- +- +- Foreground Color: +- Kolor pierwszego planu: +- +- +- Background Color: +- Kolor tÅ‚a: +- +- +- Attribute selection +- Wybór atrybutu +- +- +- Attribute value +- Wartość atrybutu +- +- +- Add a new attribute +- Dodaj nowy atrybut +- +- +- Remove selected attribute +- UsuÅ„ wybrany atrybut +- +- +- Edit attribute name +- Edytuj nazwÄ™ atrybutu +- +- +- Toggle attribute protection +- PrzeÅ‚Ä…cz ochronÄ™ atrybutu +- +- +- Show a protected attribute +- Pokaż chroniony atrybut +- +- +- Foreground color selection +- Wybór koloru pierwszego planu +- +- +- Background color selection +- Wybór koloru tÅ‚a +- +- +- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> +- <html><head/><body><p>JeÅ›li zaznaczone, wpis nie pojawi siÄ™ w raportach takich jak kontrola zdrowia i HIBP, nawet jeÅ›li nie speÅ‚nia wymagaÅ„ jakoÅ›ciowych (np. entropia hasÅ‚a lub ponowne użycie). Możesz ustawić znacznik wyboru, jeÅ›li hasÅ‚o jest poza twojÄ… kontrolÄ… (np. jeÅ›li musi to być czterocyfrowy kod PIN), aby zapobiec zaÅ›miecaniu raportów.</p></body></html> +- +- +- Exclude from database reports +- Wyklucz z raportów bazy danych +- +- +- +- EditEntryWidgetAutoType +- +- Enable Auto-Type for this entry +- WÅ‚Ä…cz autowpisywanie dla tego wpisu +- +- +- Window Associations +- Skojarzenia okna +- +- +- + +- + +- +- +- - +- - +- +- +- Window title: +- TytuÅ‚ okna: +- +- +- Use a specific sequence for this association: +- Użyj okreÅ›lonej sekwencji dla tego powiÄ…zania: +- +- +- Custom Auto-Type sequence +- Niestandardowa sekwencja autowpisywania +- +- +- Open Auto-Type help webpage +- Otwórz stronÄ™ pomocy autowpisywania +- +- +- Existing window associations +- IstniejÄ…ce skojarzenia okien +- +- +- Add new window association +- Dodaj nowe skojarzenie okna +- +- +- Remove selected window association +- UsuÅ„ wybrane skojarzenie okna +- +- +- You can use an asterisk (*) to match everything +- Możesz użyć gwiazdki (*), aby dopasować wszystko +- +- +- Set the window association title +- Ustaw tytuÅ‚ skojarzonego okna +- +- +- You can use an asterisk to match everything +- Możesz użyć gwiazdki, aby dopasować wszystko +- +- +- Custom Auto-Type sequence for this window +- Niestandardowa sekwencja autowpisywania dla tego okna +- +- +- Inherit default Auto-Type sequence from the group +- Dziedzicz domyÅ›lnÄ… sekwencjÄ™ autowpisywania z grupy +- +- +- Use custom Auto-Type sequence: +- Używaj niestandardowej sekwencji autowpisywania: +- +- +- +- EditEntryWidgetBrowser +- +- These settings affect to the entry's behaviour with the browser extension. +- Te ustawienia wpÅ‚ywajÄ… na zachowanie wpisu z rozszerzeniem przeglÄ…darki. +- +- +- General +- Ogólne +- +- +- Skip Auto-Submit for this entry +- PomiÅ„ autoprzesyÅ‚anie dla tego wpisu +- +- +- Hide this entry from the browser extension +- Ukryj ten wpis przed rozszerzeniem przeglÄ…darki +- +- +- Additional URL's +- Dodatkowe adresy URL +- +- +- Add +- Dodaj +- +- +- Remove +- UsuÅ„ +- +- +- Edit +- Edytuj +- +- +- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. +- WyÅ›lij to ustawienie do przeglÄ…darki tylko w przypadku okien dialogowych uwierzytelniania HTTP. JeÅ›li ta opcja jest wÅ‚Ä…czona, zwykÅ‚e formularze logowania nie bÄ™dÄ… wyÅ›wietlać tego wpisu do wyboru. +- +- +- Use this entry only with HTTP Basic Auth +- Użyj tego wpisu tylko w przypadku podstawowego uwierzytelniania HTTP +- +- +- +- EditEntryWidgetHistory +- +- Show +- Pokaż +- +- +- Restore +- Przywróć +- +- +- Delete +- UsuÅ„ +- +- +- Delete all +- UsuÅ„ wszystkie +- +- +- Entry history selection +- Wybór historii wpisów +- +- +- Show entry at selected history state +- Pokaż wpis w wybranym stanie historii +- +- +- Restore entry to selected history state +- Przywróć wpis do wybranego stanu historii +- +- +- Delete selected history state +- UsuÅ„ wybrany stan historii +- +- +- Delete all history +- UsuÅ„ caÅ‚Ä… historiÄ™ +- +- +- +- EditEntryWidgetMain +- +- URL: +- Adres URL: +- +- +- Password: +- HasÅ‚o: +- +- +- Title: +- TytuÅ‚: +- +- +- Presets +- Ustawienia +- +- +- Toggle the checkbox to reveal the notes section. +- PrzeÅ‚Ä…cz pole wyboru, aby wyÅ›wietlić sekcjÄ™ notatek. +- +- +- Username: +- Użytkownik: +- +- +- Url field +- Pole adresu URL +- +- +- Download favicon for URL +- Pobierz ikonÄ™ ulubionych dla adresu URL +- +- +- Password field +- Pole hasÅ‚a +- +- +- Toggle notes visible +- PrzeÅ‚Ä…cz widoczność notatek +- +- +- Expiration field +- Pole wygaÅ›niÄ™cia +- +- +- Expiration Presets +- Presety wygaÅ›niÄ™cia +- +- +- Expiration presets +- Presety wygaÅ›niÄ™cia +- +- +- Notes field +- Pole notatek +- +- +- Title field +- Pole tytuÅ‚u +- +- +- Username field +- Pole nazwy użytkownika +- +- +- Toggle expiration +- PrzeÅ‚Ä…cz wygasanie +- +- +- Notes: +- Notatki: +- +- +- https://example.com +- https://example.com +- +- +- Expires: +- Wygasa: +- +- +- Edit Entry +- Edytuj wpis +- +- +- +- EditEntryWidgetSSHAgent +- +- Form +- Formularz +- +- +- Remove key from agent after +- UsuÅ„ klucz z agenta po jego wygaÅ›niÄ™ciu +- +- +- seconds +- sekundy +- +- +- Fingerprint +- Odcisk palca +- +- +- Remove key from agent when database is closed/locked +- UsuÅ„ klucz z agenta po zamkniÄ™ciu/zablokowaniu bazy danych +- +- +- Public key +- Klucz publiczny +- +- +- Add key to agent when database is opened/unlocked +- Dodaj klucz do agenta podczas otwierania/odblokowywania bazy danych +- +- +- Comment +- Komentarz +- +- +- Decrypt +- Odszyfruj +- +- +- n/a +- nie dotyczy +- +- +- Copy to clipboard +- Skopiuj do schowka +- +- +- Private key +- Klucz prywatny +- +- +- External file +- Plik zewnÄ™trzny +- +- +- Browse... +- Button for opening file dialog +- PrzeglÄ…daj... +- +- +- Attachment +- ZaÅ‚Ä…cznik +- +- +- Add to agent +- Dodaj do agenta +- +- +- Remove from agent +- UsuÅ„ z agenta +- +- +- Require user confirmation when this key is used +- Wymagaj potwierdzenia użytkownika, gdy ten klucz jest używany +- +- +- Remove key from agent after specified seconds +- UsuÅ„ klucz z agenta po okreÅ›lonych sekundach +- +- +- Browser for key file +- PrzeglÄ…daj plik klucza +- +- +- External key file +- ZewnÄ™trzny plik klucza +- +- +- Select attachment file +- Wybierz plik zaÅ‚Ä…cznika +- +- +- +- EditGroupWidget +- +- Group +- Grupa +- +- +- Icon +- Ikona +- +- +- Properties +- WÅ‚aÅ›ciwoÅ›ci +- +- +- Add group +- Dodaj grupÄ™ +- +- +- Edit group +- Edytuj grupÄ™ +- +- +- Enable +- WÅ‚Ä…cz +- +- +- Disable +- WyÅ‚Ä…cz +- +- +- Inherit from parent group (%1) +- Dziedzicz z nadrzÄ™dnej grupy (%1) +- +- +- Entry has unsaved changes +- Wpis ma niezapisane zmiany +- +- +- +- EditGroupWidgetKeeShare +- +- Type: +- Typ: +- +- +- Path: +- Åšcieżka: +- +- +- Password: +- HasÅ‚o: +- +- +- Inactive +- Nieaktywne +- +- +- KeeShare unsigned container +- Niepodpisany kontener KeeShare +- +- +- KeeShare signed container +- Podpisany kontener KeeShare +- +- +- Select import source +- Wybierz cel importu +- +- +- Select export target +- Wybierz cel eksportu +- +- +- Select import/export file +- Wybierz plik importu/eksportu +- +- +- Clear +- Wyczyść +- +- +- Import +- Importuj +- +- +- Export +- Eksportuj +- +- +- Synchronize +- Synchronizuj +- +- +- Your KeePassXC version does not support sharing this container type. +-Supported extensions are: %1. +- Twoja wersja KeePassXC nie obsÅ‚uguje udostÄ™pniania tego typu kontenera. +-ObsÅ‚ugiwane rozszerzenia to: %1. +- +- +- %1 is already being exported by this database. +- %1 jest już eksportowany przez tÄ™ bazÄ™ danych. +- +- +- %1 is already being imported by this database. +- %1 jest już importowany przez tÄ™ bazÄ™ danych. +- +- +- %1 is being imported and exported by different groups in this database. +- %1 jest importowany i eksportowany przez różne grupy w tej bazie danych. +- +- +- KeeShare is currently disabled. You can enable import/export in the application settings. +- KeeShare is a proper noun +- KeeShare jest obecnie wyÅ‚Ä…czony. Możesz wÅ‚Ä…czyć import/eksport w ustawieniach aplikacji. +- +- +- Database export is currently disabled by application settings. +- Eksport bazy danych jest obecnie wyÅ‚Ä…czony przez ustawienia aplikacji. +- +- +- Database import is currently disabled by application settings. +- Import danych jest obecnie wyÅ‚Ä…czony przez ustawienia aplikacji. +- +- +- Sharing mode field +- Pole trybu udostÄ™pniania +- +- +- Path to share file field +- Åšcieżka do pola udostÄ™pniania pliku +- +- +- Password field +- Pole hasÅ‚a +- +- +- Clear fields +- Wyczyść pola +- +- +- Browse for share file +- PrzeglÄ…daj plik udostÄ™pniania +- +- +- Browse... +- PrzeglÄ…daj... +- +- +- +- EditGroupWidgetMain +- +- Name field +- Pole nazwy +- +- +- Notes field +- Pole notatek +- +- +- Toggle expiration +- PrzeÅ‚Ä…cz wygasanie +- +- +- Auto-Type toggle for this and sub groups +- PrzeÅ‚Ä…czenie autowpisywania dla tej i podgrup +- +- +- Expiration field +- Pole wygaÅ›niÄ™cia +- +- +- Search toggle for this and sub groups +- PrzeÅ‚Ä…czenie wyszukiwania dla tej i podgrup +- +- +- Default auto-type sequence field +- Pole domyÅ›lnej sekwencji autowpisywnaia +- +- +- Expires: +- Wygasa: +- +- +- Use default Auto-Type sequence of parent group +- Korzystaj z domyÅ›lnej sekwencji autowpisywania z nadrzÄ™dnej grupy +- +- +- Auto-Type: +- Autowpisywanie: +- +- +- Search: +- Szukaj: +- +- +- Notes: +- Notatki: +- +- +- Name: +- Nazwa: +- +- +- Set default Auto-Type sequence +- Ustaw domyÅ›lnÄ… sekwencjÄ™ autowpisywania +- +- +- Edit Group +- Edytuj grupÄ™ +- +- +- +- EditWidgetIcons +- +- Add custom icon +- Dodaj niestandardowÄ… ikonÄ™ +- +- +- Delete custom icon +- UsuÅ„ niestandardowÄ… ikonÄ™ +- +- +- Download favicon +- Pobierz ikonÄ™ ulubionych +- +- +- Unable to fetch favicon. +- Nie można pobrać ikony ulubionych. +- +- +- Images +- Obrazy +- +- +- All files +- Wszystkie pliki +- +- +- Confirm Delete +- Potwierdź usuniÄ™cie +- +- +- Select Image(s) +- Wybierz obraz(y) +- +- +- Successfully loaded %1 of %n icon(s) +- PomyÅ›lnie zaÅ‚adowano %1 z %n ikonyPomyÅ›lnie zaÅ‚adowano %1 z %n ikonPomyÅ›lnie zaÅ‚adowano %1 z %n ikonPomyÅ›lnie zaÅ‚adowano %1 z %n ikon +- +- +- No icons were loaded +- Å»adne ikony nie zostaÅ‚y zaÅ‚adowane +- +- +- %n icon(s) already exist in the database +- %n ikona już istnieje w bazie danych%n ikony już istniejÄ… w bazie danych%n ikon już istnieje w bazie danych%n ikon już istnieje w bazie danych +- +- +- The following icon(s) failed: +- Niepowodzenie nastÄ™pujÄ…cej ikony:Niepowodzenie nastÄ™pujÄ…cych ikon:Niepowodzenie nastÄ™pujÄ…cych ikon:Niepowodzenie nastÄ™pujÄ…cych ikon: +- +- +- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? +- Ta ikona używana jest przez %n wpis i zostanie zamieniona na ikonÄ™ domyÅ›lnÄ…. Czy na pewno chcesz jÄ… usunąć?Ta ikona używana jest przez %n wpisy i zostanie zamieniona na ikonÄ™ domyÅ›lnÄ…. Czy na pewno chcesz jÄ… usunąć?Ta ikona używana jest przez %n wpisów i zostanie zamieniona na ikonÄ™ domyÅ›lnÄ…. Czy na pewno chcesz jÄ… usunąć?Ta ikona używana jest przez %n wpisów i zostanie zamieniona na ikonÄ™ domyÅ›lnÄ…. Czy na pewno chcesz jÄ… usunąć? +- +- +- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security +- Możesz wÅ‚Ä…czyć usÅ‚ugÄ™ ikon witryn DuckDuckGo w menu NarzÄ™dzia -> Ustawienia -> BezpieczeÅ„stwo +- +- +- Download favicon for URL +- Pobierz ikonÄ™ ulubionych dla adresu URL +- +- +- Apply selected icon to subgroups and entries +- Zastosuj wybranÄ… ikonÄ™ do podgrup i wpisów +- +- +- Also apply to child groups +- Zastosuj również do grup podrzÄ™dnych +- +- +- Also apply to child entries +- Zastosuj również do wpisów podrzÄ™dnych +- +- +- Also apply to all children +- Zastosuj również do wszystkich podrzÄ™dnych +- +- +- Existing icon selected. +- Wybrano istniejÄ…cÄ… ikonÄ™. +- +- +- Use default icon +- Ustaw domyÅ›lnÄ… ikonÄ™ +- +- +- Use custom icon +- Ustaw niestandardowÄ… ikonÄ™ +- +- +- Apply icon to... +- Zastosuj ikonÄ™ do... +- +- +- Apply to this group only +- Zastosuj tylko do tej grupy +- +- +- +- EditWidgetProperties +- +- Created: +- Stworzone: +- +- +- Modified: +- Modyfikowane: +- +- +- Accessed: +- Ostatnio używane: +- +- +- Uuid: +- UUID: +- +- +- Plugin Data +- Dane wtyczki +- +- +- Remove +- UsuÅ„ +- +- +- Delete plugin data? +- Usunąć dane wtyczki? +- +- +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- Czy na pewno chcesz usunąć wybrane dane wtyczki? +-Może to spowodować nieprawidÅ‚owe dziaÅ‚anie wtyczek. +- +- +- Key +- Klucz +- +- +- Value +- Wartość +- +- +- Datetime created +- Utworzono datÄ™ i godzinÄ™ +- +- +- Datetime modified +- Zmodyfikowano datÄ™ i godzinÄ™ +- +- +- Datetime accessed +- Ostatnio używano datÄ™ i godzinÄ™ +- +- +- Unique ID +- Niepowtarzalny identyfikator +- +- +- Plugin data +- Dane wtyczki +- +- +- Remove selected plugin data +- UsuÅ„ wybrane dane wtyczki +- +- +- +- Entry +- +- %1 - Clone +- %1 - klon +- +- +- +- EntryAttachmentsModel +- +- Name +- Nazwa +- +- +- Size +- Rozmiar +- +- +- +- EntryAttachmentsWidget +- +- Form +- Formularz +- +- +- Add +- Dodaj +- +- +- Remove +- UsuÅ„ +- +- +- Open +- Otwórz +- +- +- Save +- Zapisz +- +- +- Select files +- Wybierz pliki +- +- +- Are you sure you want to remove %n attachment(s)? +- Czy na pewno chcesz usunąć %n zaÅ‚Ä…cznik?Czy na pewno chcesz usunąć %n zaÅ‚Ä…czniki?Czy na pewno chcesz usunąć %n zaÅ‚Ä…czników?Czy na pewno chcesz usunąć %n zaÅ‚Ä…czników? +- +- +- Save attachments +- Zapisz zaÅ‚Ä…czniki +- +- +- Unable to create directory: +-%1 +- Nie można utworzyć katalogu: +-%1 +- +- +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- Czy na pewno chcesz zastÄ…pić istniejÄ…cy plik "%1" zaÅ‚Ä…cznikiem? +- +- +- Confirm overwrite +- Potwierdź zastÄ…pienie +- +- +- Unable to save attachments: +-%1 +- Nie można zapisać zaÅ‚Ä…czników: +-%1 +- +- +- Unable to open attachment: +-%1 +- Nie można otworzyć zaÅ‚Ä…cznika: +-%1 +- +- +- Unable to open attachments: +-%1 +- Nie można otworzyć zaÅ‚Ä…czników: +-%1 +- +- +- Confirm remove +- Potwierdź usuniÄ™cie +- +- +- Unable to open file(s): +-%1 +- Nie można otworzyć pliku: +-%1Nie można otworzyć plików: +-%1Nie można otworzyć plików: +-%1Nie można otworzyć plików: +-%1 +- +- +- Attachments +- ZaÅ‚Ä…czniki +- +- +- Add new attachment +- Dodaj nowy zaÅ‚Ä…cznik +- +- +- Remove selected attachment +- UsuÅ„ wybrany zaÅ‚Ä…cznik +- +- +- Open selected attachment +- Otwórz wybrany zaÅ‚Ä…cznik +- +- +- Save selected attachment to disk +- Zapisz wybrany zaÅ‚Ä…cznik na dysk +- +- +- %1 is a big file (%2 MB). +-Your database may get very large and reduce performance. +- +-Are you sure to add this file? +- %1 to duży plik (%2 MB). +-Twoja baza danych może być bardzo duża i zmniejszać wydajność. +- +-Czy na pewno chcesz dodać ten plik? +- +- +- Confirm Attachment +- Potwierdź zaÅ‚Ä…cznik +- +- +- +- EntryAttributesModel +- +- Name +- Nazwa +- +- +- +- EntryHistoryModel +- +- Last modified +- Ostatnia modyfikacja +- +- +- Title +- TytuÅ‚ +- +- +- Username +- Użytkownik +- +- +- URL +- Adres URL +- +- +- +- EntryModel +- +- Ref: +- Reference abbreviation +- Odniesienie: +- +- +- Group +- Grupa +- +- +- Title +- TytuÅ‚ +- +- +- Username +- Użytkownik +- +- +- URL +- Adres URL +- +- +- Never +- Nigdy +- +- +- Password +- HasÅ‚o +- +- +- Notes +- Notatki +- +- +- Expires +- Wygasa +- +- +- Created +- Stworzone +- +- +- Modified +- Modyfikowane +- +- +- Accessed +- Ostatnio używane +- +- +- Attachments +- ZaÅ‚Ä…czniki +- +- +- Size +- Rozmiar +- +- +- Group name +- Nazwa grupy +- +- +- Entry title +- TytuÅ‚ wpisu +- +- +- Entry notes +- Notatki wpisu +- +- +- Entry expires at +- Wpis wygasa +- +- +- Creation date +- Data utworzenia +- +- +- Last modification date +- Data ostatniej modyfikacji +- +- +- Last access date +- Data ostatniego dostÄ™pu +- +- +- Attached files +- ZaÅ‚Ä…czone pliki +- +- +- Entry size +- Rozmiar wpisu +- +- +- Has attachments +- Ma zaÅ‚Ä…czniki +- +- +- Has TOTP one-time password +- Ma hasÅ‚o jednorazowe TOTP +- +- +- +- EntryPreviewWidget +- +- Close +- Zamknij +- +- +- General +- Ogólne +- +- +- Username +- Użytkownik +- +- +- Password +- HasÅ‚o +- +- +- Expiration +- WygaÅ›niÄ™cie +- +- +- URL +- Adres URL +- +- +- Attributes +- Atrybuty +- +- +- Attachments +- ZaÅ‚Ä…czniki +- +- +- Notes +- Notatki +- +- +- Autotype +- Autowpisywanie +- +- +- Window +- Okno +- +- +- Sequence +- Sekwencja +- +- +- Searching +- Wyszukiwanie +- +- +- Search +- Szukaj +- +- +- Clear +- Wyczyść +- +- +- Never +- Nigdy +- +- +- [PROTECTED] +- [CHRONIONE] +- +- +- Enabled +- WÅ‚Ä…czone +- +- +- Disabled +- WyÅ‚Ä…czone +- +- +- Share +- UdziaÅ‚ +- +- +- Display current TOTP value +- WyÅ›wietl bieżącÄ… wartość TOTP +- +- +- Advanced +- Zaawansowane +- +- +- Default Sequence +- Sekwencja domyÅ›lna +- +- +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- attributes line +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- +- +- +- EntryURLModel +- +- Invalid URL +- NieprawidÅ‚owy adres URL +- +- +- +- EntryView +- +- Fit to window +- Dopasuj do okna +- +- +- Fit to contents +- Dopasuj do treÅ›ci +- +- +- Reset to defaults +- Przywróć domyÅ›lne +- +- +- Has attachments +- Entry attachment icon toggle +- Ma zaÅ‚Ä…czniki +- +- +- Has TOTP +- Entry TOTP icon toggle +- Ma TOTP +- +- +- +- FdoSecrets::Item +- +- Entry "%1" from database "%2" was used by %3 +- Wpis "%1" z bazy danych "%2" zostaÅ‚ użyty przez %3 +- +- +- +- FdoSecrets::Service +- +- Failed to register DBus service at %1.<br/> +- Rejestracja usÅ‚ugi DBus w %1 nie powiodÅ‚a siÄ™.<br/> +- +- +- %n Entry(s) was used by %1 +- %1 is the name of an application +- %n wpis byÅ‚ używany przez %1%n wpisy byÅ‚y używane przez %1%n wpisów byÅ‚o używanych przez %1%n wpisów byÅ‚o używanych przez %1 +- +- +- +- FdoSecrets::SettingsDatabaseModel +- +- File Name +- Nazwa pliku +- +- +- Group +- Grupa +- +- +- Manage +- ZarzÄ…dzaj +- +- +- Unlock to show +- Odblokuj, aby pokazać +- +- +- None +- Å»aden +- +- +- +- FdoSecrets::SettingsSessionModel +- +- Application +- Aplikacja +- +- +- Manage +- ZarzÄ…dzaj +- +- +- +- FdoSecretsPlugin +- +- <b>Fdo Secret Service:</b> %1 +- <b>UsÅ‚uga sekretna Fdo:</b> %1 +- +- +- Unknown +- Unknown PID +- Nieznany +- +- +- Unknown +- Unknown executable path +- Nieznany +- +- +- <i>PID: %1, Executable: %2</i> +- <i>PID: 1234, Executable: /path/to/exe</i> +- <i>PID: %1, plik wykonywalny: %2</i> +- +- +- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. +- Uruchomiona jest inna usÅ‚uga sekretna (%1). Zatrzymaj jÄ…/usuÅ„ przed ponownym wÅ‚Ä…czeniem Integracji usÅ‚ugi sekretnej. +- +- +- +- Group +- +- [empty] +- group has no children +- [pusty] +- +- +- +- HibpDownloader +- +- Online password validation failed +- Sprawdzanie hasÅ‚a online nie powiodÅ‚o siÄ™ +- +- +- +- IconDownloaderDialog +- +- Download Favicons +- Pobierz ikony ulubionych +- +- +- Cancel +- Anuluj +- +- +- Having trouble downloading icons? +-You can enable the DuckDuckGo website icon service in the security section of the application settings. +- Masz problem z pobraniem ikon? +-Możesz wÅ‚Ä…czyć usÅ‚ugÄ™ ikon witryn DuckDuckGo w sekcji bezpieczeÅ„stwa ustawieÅ„ aplikacji. +- +- +- Close +- Zamknij +- +- +- URL +- Adres URL +- +- +- Status +- Status +- +- +- Please wait, processing entry list... +- ProszÄ™ czekać, przetwarzanie listy wpisów... +- +- +- Downloading... +- Pobieranie... +- +- +- Ok +- OK +- +- +- Already Exists +- Już istnieje +- +- +- Download Failed +- Pobieranie nie powiodÅ‚o siÄ™ +- +- +- Downloading favicons (%1/%2)... +- Pobieranie ikon ulubionych (%1/%2)... +- +- +- +- KMessageWidget +- +- &Close +- &Zamknij +- +- +- Close message +- Zamknij komunikat +- +- +- +- Kdbx3Reader +- +- missing database headers +- brakuje nagłówków bazy danych +- +- +- Header doesn't match hash +- Nagłówek nie pasuje do hasza +- +- +- Invalid header id size +- NieprawidÅ‚owy rozmiar identyfikatora nagłówka +- +- +- Invalid header field length +- NieprawidÅ‚owa dÅ‚ugość pola nagłówka +- +- +- Invalid header data length +- NieprawidÅ‚owa dÅ‚ugość danych nagÅ‚owka +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Podano nieprawidÅ‚owe dane uwierzytelniajÄ…ce, spróbuj ponownie. +-JeÅ›li wystÄ…pi to ponownie, plik bazy danych może być uszkodzony. +- +- +- Unable to calculate database key +- Nie można wyliczyć klucza bazy danych +- +- +- Unable to issue challenge-response: %1 +- Nie można wywoÅ‚ać wyzwania-odpowiedzi: %1 +- +- +- +- Kdbx3Writer +- +- Unable to issue challenge-response: %1 +- Nie można wywoÅ‚ać wyzwania-odpowiedzi: %1 +- +- +- Unable to calculate database key +- Nie można wyliczyć klucza bazy danych +- +- +- +- Kdbx4Reader +- +- missing database headers +- brakuje nagłówków bazy danych +- +- +- Invalid header checksum size +- NieprawidÅ‚owy rozmiar sumy kontrolnej nagłówka +- +- +- Header SHA256 mismatch +- Niepoprawny nagłówek SHA256 +- +- +- Unknown cipher +- Nieznany szyfr +- +- +- Invalid header id size +- NieprawidÅ‚owy rozmiar identyfikatora nagłówka +- +- +- Invalid header field length +- NieprawidÅ‚owa dÅ‚ugość pola nagłówka +- +- +- Invalid header data length +- NieprawidÅ‚owa dÅ‚ugość danych nagÅ‚owka +- +- +- Failed to open buffer for KDF parameters in header +- Nie można otworzyć bufora dla parametrów KDF w nagłówku +- +- +- Unsupported key derivation function (KDF) or invalid parameters +- NieobsÅ‚ugiwana funkcja derywacji klucza (KDF) albo nieprawidÅ‚owe parametry +- +- +- Legacy header fields found in KDBX4 file. +- W pliku KDBX4 znaleziono przestarzaÅ‚e pola nagłówków. +- +- +- Invalid inner header id size +- NieprawidÅ‚owy rozmiar id wewnÄ™trznego nagłówka +- +- +- Invalid inner header field length +- NieprawidÅ‚owa dÅ‚ugość pola wewnÄ™trznego nagłówka +- +- +- Invalid inner header binary size +- NieprawidÅ‚owy rozmiar binarny wewnÄ™trznego nagłówka +- +- +- Unsupported KeePass variant map version. +- Translation: variant map = data structure for storing meta data +- Niewspierana wersja mapy odmian KeePass. +- +- +- Invalid variant map entry name length +- Translation: variant map = data structure for storing meta data +- NieprawidÅ‚owa dÅ‚ugość nazwy wpisu mapy odmian +- +- +- Invalid variant map entry name data +- Translation: variant map = data structure for storing meta data +- NieprawidÅ‚owe dane nazwy wpisu mapy odmian +- +- +- Invalid variant map entry value length +- Translation: variant map = data structure for storing meta data +- NieprawidÅ‚owa dÅ‚ugość wartoÅ›ci wpisu mapy odmian +- +- +- Invalid variant map entry value data +- Translation comment: variant map = data structure for storing meta data +- NieprawidÅ‚owe dane wartoÅ›ci wpisu mapy odmian +- +- +- Invalid variant map Bool entry value length +- Translation: variant map = data structure for storing meta data +- NieprawidÅ‚owa dÅ‚ugość Bool wpisu mapy odmian +- +- +- Invalid variant map Int32 entry value length +- Translation: variant map = data structure for storing meta data +- NieprawidÅ‚owa dÅ‚ugość Int32 wartoÅ›ci wpisu mapy odmian +- +- +- Invalid variant map UInt32 entry value length +- Translation: variant map = data structure for storing meta data +- NieprawidÅ‚owa dÅ‚ugość UInt32 wartoÅ›ci wpisu mapy odmian +- +- +- Invalid variant map Int64 entry value length +- Translation: variant map = data structure for storing meta data +- NieprawidÅ‚owa dÅ‚ugość Int64 wartoÅ›ci wpisu mapy odmian +- +- +- Invalid variant map UInt64 entry value length +- Translation: variant map = data structure for storing meta data +- NieprawidÅ‚owa dÅ‚ugość UInt64 wartoÅ›ci wpisu mapy odmian +- +- +- Invalid variant map entry type +- Translation: variant map = data structure for storing meta data +- NieprawidÅ‚owe typ wpisu mapy odmian +- +- +- Invalid variant map field type size +- Translation: variant map = data structure for storing meta data +- NieprawidÅ‚owy rozmiar typu pola mapy odmian +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Podano nieprawidÅ‚owe dane uwierzytelniajÄ…ce, spróbuj ponownie. +-JeÅ›li wystÄ…pi to ponownie, plik bazy danych może być uszkodzony. +- +- +- (HMAC mismatch) +- (Niezgodność HMAC) +- +- +- Unable to calculate database key: %1 +- Nie można wyliczyć klucza bazy danych: %1 +- +- +- +- Kdbx4Writer +- +- Invalid symmetric cipher algorithm. +- NieprawidÅ‚owy algorytm szyfrowania symetrycznego. +- +- +- Invalid symmetric cipher IV size. +- IV = Initialization Vector for symmetric cipher +- NieprawidÅ‚owy rozmiar symetrycznego szyfru IV. +- +- +- Failed to serialize KDF parameters variant map +- Translation comment: variant map = data structure for storing meta data +- Nie udaÅ‚o siÄ™ serializować mapy odmian parametrów KDF +- +- +- Unable to calculate database key: %1 +- Nie można wyliczyć klucza bazy danych: %1 +- +- +- +- KdbxReader +- +- Unsupported cipher +- NieobsÅ‚ugiwany szyfr +- +- +- Invalid compression flags length +- NieprawidÅ‚owa dÅ‚ugość flag kompresji +- +- +- Unsupported compression algorithm +- Niewspierany algorytm kompresji +- +- +- Invalid master seed size +- NieprawidÅ‚owy rozmiar głównej liczby losowej +- +- +- Invalid transform seed size +- NieprawidÅ‚owy rozmiar seedu transformacji +- +- +- Invalid transform rounds size +- NieprawidÅ‚owy rozmiar rund transformacji +- +- +- Invalid start bytes size +- NieprawidÅ‚owy rozmiar poczÄ…tkowy bajtu +- +- +- Invalid random stream id size +- NieprawidÅ‚owy rozmiar losowy id strumienia +- +- +- Invalid inner random stream cipher +- Niepoprawny wewnÄ™trzny szyfr losowy strumienia +- +- +- Not a KeePass database. +- To nie baza danych KeePass. +- +- +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- Wybrany plik jest starÄ… bazÄ… danych KeePassX 1 (.kdb). +- +-Możesz zaimportować jÄ… przez wybranie Baza danych > 'Importuj bazÄ™ danych KeePass 1...'. +-Jest to migracja w jednÄ… stronÄ™. Nie bÄ™dzie można otworzyć importowanej bazy danych za pomocÄ… starej wersji KeePassX 0.4. +- +- +- Unsupported KeePass 2 database version. +- NieobsÅ‚ugiwana wersja bazy danych KeePass 2. +- +- +- Invalid cipher uuid length: %1 (length=%2) +- NieprawidÅ‚owa dÅ‚ugość szyfru uuid: %1 (dÅ‚ugość=%2) +- +- +- Unable to parse UUID: %1 +- Nie można parsować UUID: %1 +- +- +- Failed to read database file. +- Nie udaÅ‚o siÄ™ odczytać pliku bazy danych. +- +- +- +- KdbxXmlReader +- +- XML parsing failure: %1 +- BÅ‚Ä…d parsowania XML: %1 +- +- +- No root group +- Brak głównej grupy +- +- +- Missing icon uuid or data +- BrakujÄ…ce uuid ikony lub danych +- +- +- Missing custom data key or value +- BrakujÄ…cy niestandardowy klucz danych lub wartość +- +- +- Multiple group elements +- Elementy wielu grup +- +- +- Null group uuid +- Zerowa grupa uuid +- +- +- Invalid group icon number +- NieprawidÅ‚owy numer ikony grupy +- +- +- Invalid EnableAutoType value +- NieprawidÅ‚owa wartość EnableAutoType +- +- +- Invalid EnableSearching value +- NieprawidÅ‚owa wartość EnableSearching +- +- +- No group uuid found +- Nie znaleziono grupy uuid +- +- +- Null DeleteObject uuid +- Zerowy uuid DeleteObject +- +- +- Missing DeletedObject uuid or time +- BrakujÄ…ce uuid DeletedObject lub czasu +- +- +- Null entry uuid +- Zerwoy wpis uuid +- +- +- Invalid entry icon number +- NieprawidÅ‚owy numer ikony wejÅ›ciowej +- +- +- History element in history entry +- Element historii we wpisie historii +- +- +- No entry uuid found +- Nie znaleziono wpisu uuid +- +- +- History element with different uuid +- Element historii z innym uuid +- +- +- Duplicate custom attribute found +- Znaleziono zduplikowany niestandardowy atrybut +- +- +- Entry string key or value missing +- Brak klucza lub wartoÅ›ci dla wpisu +- +- +- Entry binary key or value missing +- Brak wejÅ›ciowego klucza binarnego lub wartoÅ›ci +- +- +- Auto-type association window or sequence missing +- Brak skojarzenego okna lub sekwencji autowpisywania +- +- +- Invalid bool value +- NieprawidÅ‚owa wartość bool +- +- +- Invalid date time value +- NieprawidÅ‚owa wartość czasu daty +- +- +- Invalid color value +- NieprawidÅ‚owa wartość koloru +- +- +- Invalid color rgb part +- NieprawidÅ‚owa wartość części koloru rgb +- +- +- Invalid number value +- NieprawidÅ‚owa wartość liczbowa +- +- +- Invalid uuid value +- NieprawidÅ‚owa wartość uuid +- +- +- Unable to decompress binary +- Translator meant is a binary data inside an entry +- Nie można zdekompresować pliku binarnego +- +- +- XML error: +-%1 +-Line %2, column %3 +- BÅ‚Ä…d XML: +-%1 +-Wiersz %2, kolumna %3 +- +- +- +- KeeAgentSettings +- +- Invalid KeeAgent settings file structure. +- Niepoprawna struktura pliku ustawieÅ„ KeeAgenta. +- +- +- Private key is an attachment but no attachments provided. +- Klucz prywatny jest zaÅ‚Ä…cznikiem, ale nie ma zaÅ‚Ä…czników. +- +- +- Private key is empty +- Klucz prywatny jest pusty +- +- +- File too large to be a private key +- Plik jest zbyt duży, aby być kluczem prywatnym +- +- +- Failed to open private key +- Nie udaÅ‚o siÄ™ otworzyć klucza prywatnego +- +- +- +- KeePass1OpenWidget +- +- Unable to open the database. +- Nie można otworzyć bazy danych. +- +- +- Import KeePass1 Database +- Importuj bazÄ™ danych KeePass1 +- +- +- +- KeePass1Reader +- +- Unable to read keyfile. +- Nie można otworzyć pliku klucza. +- +- +- Not a KeePass database. +- To nie baza danych KeePass. +- +- +- Unsupported encryption algorithm. +- Niewspierany algorytm szyfrowania. +- +- +- Unsupported KeePass database version. +- Niewspierana wersja bazy danych KeePass. +- +- +- Unable to read encryption IV +- IV = Initialization Vector for symmetric cipher +- Nie można odczytać szyfrowania IV +- +- +- Invalid number of groups +- NieprawidÅ‚owa liczba grup +- +- +- Invalid number of entries +- NieprawidÅ‚owa liczba wpisów +- +- +- Invalid content hash size +- NieprawidÅ‚owy rozmiar hashu zawartoÅ›ci +- +- +- Invalid transform seed size +- NieprawidÅ‚owy rozmiar seedu transformacji +- +- +- Invalid number of transform rounds +- NieprawidÅ‚owa liczba rund transformacji +- +- +- Unable to construct group tree +- Nie można skonstruować drzewa grup +- +- +- Root +- Główna +- +- +- Key transformation failed +- Nie udaÅ‚o siÄ™ transformować klucza +- +- +- Invalid group field type number +- NieprawidÅ‚owa liczba typu pola grupy +- +- +- Invalid group field size +- NieprawidÅ‚owy rozmiar pola grupy +- +- +- Read group field data doesn't match size +- Odczytane dane pola grupy nie pasujÄ… do rozmiaru +- +- +- Incorrect group id field size +- Niepoprawny rozmiar pola dla identyfikatora grupy +- +- +- Incorrect group creation time field size +- Niepoprawny rozmiar pola dla czasu utworzenia grupy +- +- +- Incorrect group modification time field size +- Niepoprawny rozmiar pola dla czasu modyfikacji grupy +- +- +- Incorrect group access time field size +- Niepoprawny rozmiar pola dla czasu dostÄ™pu do grupy +- +- +- Incorrect group expiry time field size +- Niepoprawny rozmiar pola dla czasu wygaÅ›niÄ™cia grupy +- +- +- Incorrect group icon field size +- Niepoprawny rozmiar pola dla ikony grupy +- +- +- Incorrect group level field size +- Niepoprawny rozmiar pola dla poziomu grupy +- +- +- Invalid group field type +- NieprawidÅ‚owy typ pola grupy +- +- +- Missing group id or level +- Brak poziomu lub identyfikatora grupy +- +- +- Missing entry field type number +- Brak numeru typu dla pola wpisu +- +- +- Invalid entry field size +- NieprawidÅ‚owy rozmiar pola wpisu +- +- +- Read entry field data doesn't match size +- Odczytane dane pola wpisu nie pasujÄ… do rozmiaru +- +- +- Invalid entry uuid field size +- NieprawidÅ‚owy rozmiar pola wpisu uuid +- +- +- Invalid entry group id field size +- NieprawidÅ‚owy rozmiar pola dla identyfikatora grupy wpisu +- +- +- Invalid entry icon field size +- NieprawidÅ‚owy rozmiar pola dla ikony wpisu +- +- +- Invalid entry creation time field size +- NieprawidÅ‚owy rozmiar pola dla czasu utworzenia wpisu +- +- +- Invalid entry modification time field size +- NieprawidÅ‚owy rozmiar pola dla czasu modyfikacji wpisu +- +- +- Invalid entry expiry time field size +- NieprawidÅ‚owy rozmiar pola dla czasu wygaÅ›niÄ™cia wpisu +- +- +- Invalid entry field type +- NieprawidÅ‚owy typ pola wpisu +- +- +- unable to seek to content position +- nie można znaleźć pozycji treÅ›ci +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Podano nieprawidÅ‚owe dane uwierzytelniajÄ…ce, spróbuj ponownie. +-JeÅ›li wystÄ…pi to ponownie, plik bazy danych może być uszkodzony. +- +- +- Unable to calculate database key +- Nie można wyliczyć klucza bazy danych +- +- +- +- KeeShare +- +- Invalid sharing reference +- NieprawidÅ‚owe odwoÅ‚anie do udostÄ™pniania +- +- +- Inactive share %1 +- Nieaktywny udziaÅ‚ %1 +- +- +- Imported from %1 +- Importowane z %1 +- +- +- Exported to %1 +- Wyeksportowano do %1 +- +- +- Synchronized with %1 +- Zsynchronizowano z %1 +- +- +- Import is disabled in settings +- Import jest wyÅ‚Ä…czony w ustawieniach +- +- +- Export is disabled in settings +- Eksport jest wyÅ‚Ä…czony w ustawieniach +- +- +- Inactive share +- Nieaktywny udziaÅ‚ +- +- +- Imported from +- Importowane z +- +- +- Exported to +- Eksportowane do +- +- +- Synchronized with +- Zsynchronizowane z +- +- +- +- KeyComponentWidget +- +- Key Component +- SkÅ‚adnik klucza +- +- +- Key Component Description +- Opis skÅ‚adnika klucza +- +- +- Cancel +- Anuluj +- +- +- Key Component set, click to change or remove +- Ustawiono skÅ‚adnik klucza, kliknij, aby zmienić lub usunąć +- +- +- Add %1 +- Add a key component +- Dodaj %1 +- +- +- Change %1 +- Change a key component +- ZmieÅ„ %1 +- +- +- Remove %1 +- Remove a key component +- UsuÅ„ %1 +- +- +- %1 set, click to change or remove +- Change or remove a key component +- %1 ustawiono, kliknij, aby zmienić lub usunąć +- +- +- +- KeyFileEditWidget +- +- Generate +- Wygeneruj +- +- +- Key File +- Plik klucza +- +- +- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> +- <p>Możesz dodać plik klucza zawierajÄ…cy losowe bajty do zwiÄ™kszenia bezpieczeÅ„stwa.</p><p>Musisz trzymać go w tajemnicy i nigdy go nie stracić, bo zostaniesz zablokowany!</p> +- +- +- Error loading the key file '%1' +-Message: %2 +- BÅ‚Ä…d Å‚adowania pliku klucza '%1' +-Komunikat: %2 +- +- +- Key files +- Pliki kluczy +- +- +- All files +- Wszystkie pliki +- +- +- Create Key File... +- Utwórz plik klucza... +- +- +- Error creating key file +- BÅ‚Ä…d tworzenia pliku klucza +- +- +- Unable to create key file: %1 +- Nie można utworzyć pliku klucza: %1 +- +- +- Select a key file +- Wybierz plik klucza +- +- +- Key file selection +- Wybór pliku klucza +- +- +- Browse for key file +- PrzeglÄ…daj plik klucza +- +- +- Browse... +- PrzeglÄ…daj... +- +- +- Generate a new key file +- Generuj nowy plik klucza +- +- +- Note: Do not use a file that may change as that will prevent you from unlocking your database! +- Uwaga: nie należy używać pliku, który może ulec zmianie, ponieważ uniemożliwi to odblokowanie bazy danych! +- +- +- Invalid Key File +- NieprawidÅ‚owy plik klucza +- +- +- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. +- Nie można użyć bieżącej bazy danych jako wÅ‚asnego pliku klucza. ProszÄ™ wybrać inny plik lub wygenerować nowy plik klucza. +- +- +- Suspicious Key File +- Podejrzany plik klucza +- +- +- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. +-Are you sure you want to continue with this file? +- Wybrany plik klucza wyglÄ…da jak plik bazy danych haseÅ‚. Plik klucza musi być plikiem statycznym, który nigdy siÄ™ nie zmienia albo utracisz dostÄ™p do bazy danych na zawsze. +-Czy na pewno chcesz kontynuować z tym plikiem? +- +- +- Old key file format +- Stary format pliku klucza +- +- +- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. +- Wybrano plik klucza w starym formacie, który KeePassXC<br>może przestać obsÅ‚ugiwać w przyszÅ‚oÅ›ci.<br><br>Zamiast tego warto rozważyć wygenerowanie nowego pliku klucza. +- +- +- +- MainWindow +- +- &Database +- &Baza danych +- +- +- &Help +- &Pomoc +- +- +- &Groups +- &Grupy +- +- +- &Tools +- &NarzÄ™dzia +- +- +- &Quit +- Za&koÅ„cz +- +- +- &About +- &O programie +- +- +- Database settings +- Ustawienia bazy danych +- +- +- Copy username to clipboard +- Skopiuj użytkownika do schowka +- +- +- Copy password to clipboard +- Skopiuj hasÅ‚o do schowka +- +- +- &Settings +- &Ustawienia +- +- +- &Title +- &TytuÅ‚ +- +- +- Copy title to clipboard +- Skopiuj tytuÅ‚ do schowka +- +- +- &URL +- Adres &URL +- +- +- Copy URL to clipboard +- Skopiuj adres URL do schowka +- +- +- &Notes +- &Notatki +- +- +- Copy notes to clipboard +- Skopiuj notatki do schowka +- +- +- Copy &TOTP +- Skopiuj &TOTP +- +- +- E&mpty recycle bin +- Opróżnij k&osz +- +- +- Clear history +- Wyczyść historiÄ™ +- +- +- Access error for config file %1 +- BÅ‚Ä…d dostÄ™pu pliku konfiguracyjnego %1 +- +- +- Settings +- Ustawienia +- +- +- Toggle window +- Pokaż/ukryj okno +- +- +- Quit KeePassXC +- ZakoÅ„cz KeePassXC +- +- +- Please touch the button on your YubiKey! +- ProszÄ™ dotknąć przycisku na twoim YubiKey! +- +- +- WARNING: You are using an unstable build of KeePassXC! +-There is a high risk of corruption, maintain a backup of your databases. +-This version is not meant for production use. +- OSTRZEÅ»ENIE: Używasz niestabilnej kompilacji KeePassXC! +-Istnieje duże ryzyko uszkodzenia, utrzymuj kopie zapasowe baz danych. +-Ta wersja nie jest przeznaczona do użytku produkcyjnego. +- +- +- &Donate +- &Wspomóż +- +- +- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +-We recommend you use the AppImage available on our downloads page. +- OSTRZEÅ»ENIE: Twoja wersja Qt może powodować awarie KeePassXC z klawiaturÄ… ekranowÄ…! +-Zalecamy korzystanie z AppImage dostÄ™pnego na naszej stronie pobierania. +- +- +- &Import +- &Importuj +- +- +- Create a new database +- Stwórz nowÄ… bazÄ™ danych +- +- +- Merge from another KDBX database +- Scal z innÄ… bazÄ… KDBX +- +- +- Add a new entry +- Dodaj nowy wpis +- +- +- View or edit entry +- PodglÄ…d lub edycja wpisu +- +- +- Add a new group +- Dodaj nowÄ… grupÄ™ +- +- +- Perform &Auto-Type +- Wykonaj &autowpisywanie +- +- +- Open &URL +- Otwórz adres &URL +- +- +- Import a KeePass 1 database +- Importuj bazÄ™ danych KeePass 1 +- +- +- Import a CSV file +- Importuj plik CSV +- +- +- NOTE: You are using a pre-release version of KeePassXC! +-Expect some bugs and minor issues, this version is not meant for production use. +- UWAGA: Używasz wstÄ™pnej wersji KeePassXC! Spodziewaj siÄ™ pewnych bÅ‚Ä™dów i drobnych problemów, ta wersja nie jest przeznaczona do użytku produkcyjnego. +- +- +- Check for updates on startup? +- Sprawdzać aktualizacje podczas uruchamiania? +- +- +- Would you like KeePassXC to check for updates on startup? +- Czy chcesz, aby KeePassXC sprawdzaÅ‚ aktualizacje podczas uruchamiania? +- +- +- You can always check for updates manually from the application menu. +- Zawsze możesz sprawdzić aktualizacje rÄ™cznie w menu aplikacji. +- +- +- &Export +- &Eksportuj +- +- +- Sort &A-Z +- Sortuj &A-Z +- +- +- Sort &Z-A +- Sortuj &Z-A +- +- +- &Password Generator +- &Generator hasÅ‚a +- +- +- Import a 1Password Vault +- Importuj sejf 1Password +- +- +- &Getting Started +- &Pierwsze kroki +- +- +- &User Guide +- PodrÄ™cznik uż&ytkownika +- +- +- &Keyboard Shortcuts +- &Skróty klawiaturowe +- +- +- &Recent Databases +- &Ostatnie bazy danych +- +- +- &Entries +- W&pisy +- +- +- Copy Att&ribute +- Skopiuj atry&but +- +- +- TOTP +- TOTP +- +- +- View +- Widok +- +- +- Theme +- Motyw +- +- +- &Check for Updates +- Sprawdź &aktualizacje +- +- +- &Open Database… +- Ot&wórz bazÄ™ danych… +- +- +- &Save Database +- &Zapisz bazÄ™ danych +- +- +- &Close Database +- Zamknij bazÄ™ da&nych +- +- +- &New Database… +- &Nowa baza danych… +- +- +- &Merge From Database… +- &Scal z bazÄ… danych… +- +- +- &New Entry… +- &Nowy wpis… +- +- +- &Edit Entry… +- &Edytuj wpis… +- +- +- &Delete Entry… +- &UsuÅ„ wpis… +- +- +- &New Group… +- &Nowa grupa… +- +- +- &Edit Group… +- &Edytuj grupę… +- +- +- &Delete Group… +- U&suÅ„ grupę… +- +- +- Download All &Favicons… +- Pobierz wszystkie ikony &ulubionych… +- +- +- Sa&ve Database As… +- &Zapisz bazÄ™ danych jako… +- +- +- Database &Security… +- &BezpieczeÅ„stwo bazy danych… +- +- +- Database &Reports... +- &Raporty bazy danych... +- +- +- Statistics, health check, etc. +- Statystyka, kontrola zdrowia itp. +- +- +- &Database Settings… +- Ustawienia bazy &danych… +- +- +- &Clone Entry… +- &Sklonuj wpis… +- +- +- Move u&p +- PrzesuÅ„ w &górÄ™ +- +- +- Move entry one step up +- PrzesuÅ„ wpis o jeden krok w górÄ™ +- +- +- Move do&wn +- PrzesuÅ„ w &dół +- +- +- Move entry one step down +- PrzesuÅ„ wpis o jeden krok w dół +- +- +- Copy &Username +- Skopi&uj nazwÄ™ użytkownika +- +- +- Copy &Password +- Skopiuj &hasÅ‚o +- +- +- Download &Favicon +- Pobierz &ikonÄ™ ulubionych +- +- +- &Lock Databases +- Zab&lokuj bazy danych +- +- +- &CSV File… +- Plik &CSV… +- +- +- &HTML File… +- Plik &HTML… +- +- +- KeePass 1 Database… +- Baza danych KeePass 1… +- +- +- 1Password Vault… +- Sejf 1Password… +- +- +- CSV File… +- Plik CSV… +- +- +- Show TOTP +- Pokaż TOTP +- +- +- Show QR Code +- Pokaż kod QR +- +- +- Set up TOTP… +- Ustaw TOTP… +- +- +- Report a &Bug +- ZgÅ‚oÅ› &bÅ‚Ä…d +- +- +- Open Getting Started Guide +- Otwórz przewodnik pierwszych kroków +- +- +- &Online Help +- Po&moc online +- +- +- Go to online documentation +- Przejdź do dokumentacji online +- +- +- Open User Guide +- Otwórz podrÄ™cznik użytkownika +- +- +- Save Database Backup... +- Zapisz kopiÄ™ zapasowÄ… bazy danych… +- +- +- Add key to SSH Agent +- Dodaj klucz do agenta SSH +- +- +- Remove key from SSH Agent +- UsuÅ„ klucz z agenta SSH +- +- +- Compact Mode +- Tryb kompaktowy +- +- +- Automatic +- Automatyczny +- +- +- Light +- Jasny +- +- +- Dark +- Ciemny +- +- +- Classic (Platform-native) +- Klasyczny (natywny dla platformy) +- +- +- Show Toolbar +- Pokaż pasek narzÄ™dzi +- +- +- Show Preview Panel +- Pokaż panel podglÄ…du +- +- +- Don't show again for this version +- Nie pokazuj wiÄ™cej dla tej wersji +- +- +- Restart Application? +- Uruchomić ponownie aplikacjÄ™? +- +- +- You must restart the application to apply this setting. Would you like to restart now? +- Musisz uruchomić ponownie aplikacjÄ™, aby zastosować to ustawienie. Czy chcesz teraz to zrobić? +- +- +- Perform Auto-Type Sequence +- Wykonaj sekwencjÄ™ autowpisywania +- +- +- {USERNAME} +- {UÅ»YTKOWNIK} +- +- +- {USERNAME}{ENTER} +- {UÅ»YTKOWNIK}{ENTER} +- +- +- {PASSWORD} +- {HASÅO} +- +- +- {PASSWORD}{ENTER} +- {HASÅO}{ENTER} +- +- +- Always on Top +- Zawsze na wierzchu +- +- +- Hide Usernames +- Ukryj użytkowników +- +- +- Hide Passwords +- Ukryj hasÅ‚a +- +- +- +- ManageDatabase +- +- Database settings +- Ustawienia bazy danych +- +- +- Edit database settings +- Edytuj ustawienia bazy danych +- +- +- Unlock database +- Odblokuj bazÄ™ danych +- +- +- Unlock database to show more information +- Odblokuj bazÄ™ danych, aby wyÅ›wietlić wiÄ™cej informacji +- +- +- Lock database +- Zablokuj bazÄ™ danych +- +- +- +- ManageSession +- +- Disconnect +- RozÅ‚Ä…cz +- +- +- Disconnect this application +- RozÅ‚Ä…cz tÄ™ aplikacjÄ™ +- +- +- +- Merger +- +- Creating missing %1 [%2] +- Tworzenie brakujÄ…cego %1 [%2] +- +- +- Relocating %1 [%2] +- Przemieszczanie %1 [%2] +- +- +- Overwriting %1 [%2] +- Nadpisywanie %1 [%2] +- +- +- older entry merged from database "%1" +- starszy wpis scalony z bazy danych "%1" +- +- +- Adding backup for older target %1 [%2] +- Dodawanie kopii zapasowej dla starszego celu %1 [%2] +- +- +- Adding backup for older source %1 [%2] +- Dodawanie kopii zapasowej dla starszego źródÅ‚a %1 [%2] +- +- +- Reapplying older target entry on top of newer source %1 [%2] +- Ponowne stosowanie starszego wpisu docelowego na nowszym źródle %1 [%2] +- +- +- Reapplying older source entry on top of newer target %1 [%2] +- Ponowne stosowanie starszego wpisu źródÅ‚owego na nowszym celu %1 [%2] +- +- +- Synchronizing from newer source %1 [%2] +- Synchronizacja z nowszego źródÅ‚a %1 [%2] +- +- +- Synchronizing from older source %1 [%2] +- Synchronizacja ze starszego źródÅ‚a %1 [%2] +- +- +- Deleting child %1 [%2] +- Usuwanie dziecka %1 [%2] +- +- +- Deleting orphan %1 [%2] +- Usuwanie sieroty %1 [%2] +- +- +- Changed deleted objects +- Zmieniono usuniÄ™te obiekty +- +- +- Adding missing icon %1 +- Dodawanie brakujÄ…cej ikony %1 +- +- +- Removed custom data %1 [%2] +- UsuniÄ™to niestandardowe dane %1 [%2] +- +- +- Adding custom data %1 [%2] +- Dodawanie niestandardowych danych %1 [%2] +- +- +- +- NewDatabaseWizard +- +- Create a new KeePassXC database... +- Stwórz nowÄ… bazÄ™ danych KeePassXC... +- +- +- Root +- Root group +- Główna +- +- +- +- NewDatabaseWizardPage +- +- WizardPage +- WizardPage +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Tutaj możesz dostosować ustawienia szyfrowania bazy danych. Nie martw siÄ™, możesz je później zmienić w ustawieniach bazy danych. +- +- +- Advanced Settings +- Ustawienia zaawansowane +- +- +- Simple Settings +- Ustawienia proste +- +- +- Encryption Settings +- Ustawienia szyfrowania +- +- +- +- NewDatabaseWizardPageDatabaseKey +- +- Database Credentials +- Dane uwierzytelniajÄ…ce bazy danych +- +- +- A set of credentials known only to you that protects your database. +- Zestaw danych uwierzytelniajÄ…cych, znanych tylko Tobie, który chroni TwojÄ… bazÄ™ danych. +- +- +- +- NewDatabaseWizardPageEncryption +- +- Encryption Settings +- Ustawienia szyfrowania +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Tutaj możesz dostosować ustawienia szyfrowania bazy danych. Nie martw siÄ™, możesz je później zmienić w ustawieniach bazy danych. +- +- +- +- NewDatabaseWizardPageMetaData +- +- General Database Information +- Ogólne informacje o bazie danych +- +- +- Please fill in the display name and an optional description for your new database: +- UzupeÅ‚nij wyÅ›wietlanÄ… nazwÄ™ i opcjonalny opis nowej bazy danych: +- +- +- +- NixUtils +- +- Password Manager +- Menedżer haseÅ‚ +- +- +- +- OpData01 +- +- Invalid OpData01, does not contain header +- NieprawidÅ‚owy OpData01, nie zawiera nagłówka +- +- +- Unable to read all IV bytes, wanted 16 but got %1 +- Nie można odczytać wszystkich bajtów IV, poszukiwano 16, ale otrzymano %1 +- +- +- Unable to init cipher for opdata01: %1 +- Nie można zainicjować szyfru dla opdata01: %1 +- +- +- Unable to read all HMAC signature bytes +- Nie można odczytać wszystkich bajtów podpisu HMAC +- +- +- Malformed OpData01 due to a failed HMAC +- NieprawidÅ‚owo sformuÅ‚owany OpData01 z powodu bÅ‚Ä™dnego HMAC +- +- +- Unable to process clearText in place +- Nie można przetworzyć czystego tekstu w miejscu +- +- +- Expected %1 bytes of clear-text, found %2 +- Oczekiwano %1 bajtów czystego tekstu, znaleziono %2 +- +- +- +- OpVaultOpenWidget +- +- Read Database did not produce an instance +-%1 +- Odczyt bazy danych nie wytworzyÅ‚ wystÄ…pienia +-%1 +- +- +- +- OpVaultReader +- +- Directory .opvault must exist +- Katalog .opvault musi istnieć +- +- +- Directory .opvault must be readable +- Katalog .opvault musi być czytelny +- +- +- Directory .opvault/default must exist +- Katalog .opvault/default musi istnieć +- +- +- Directory .opvault/default must be readable +- Katalog .opvault/default musi być czytelny +- +- +- Unable to decode masterKey: %1 +- Nie można zdekodować klucza głównego: %1 +- +- +- Unable to derive master key: %1 +- Nie można derywować klucza głównego: %1 +- +- +- +- OpenSSHKey +- +- Invalid key file, expecting an OpenSSH key +- NieprawidÅ‚owy plik klucza, oczekiwany klucz OpenSSH +- +- +- PEM boundary mismatch +- Niedopasowanie w granicy PEM +- +- +- Base64 decoding failed +- Dekodowanie Base64 nie powiodÅ‚o siÄ™ +- +- +- Key file way too small. +- Plik klucza jest zbyt maÅ‚y. +- +- +- Key file magic header id invalid +- NieprawidÅ‚owy identyfikator nagłówka magicznego pliku klucza +- +- +- Found zero keys +- Znaleziono zero kluczy +- +- +- Failed to read public key. +- Nie udaÅ‚o siÄ™ odczytać klucza publicznego. +- +- +- Corrupted key file, reading private key failed +- Uszkodzony plik klucza, odczytu klucza prywatnego nie powiodÅ‚o siÄ™ +- +- +- No private key payload to decrypt +- Brak zawrtoÅ›ci prywatnego klucza do odszyfrowania +- +- +- Trying to run KDF without cipher +- PróbujÄ™ uruchomić KDF bez szyfru +- +- +- Passphrase is required to decrypt this key +- Do odszyfrowania tego klucza wymagane jest hasÅ‚o +- +- +- Key derivation failed, key file corrupted? +- Derywacja klucza nie powiodÅ‚a siÄ™, plik klucza uszkodzony? +- +- +- Decryption failed, wrong passphrase? +- Odszyfrowanie nie powiodÅ‚o siÄ™, bÅ‚Ä™dne hasÅ‚o? +- +- +- Unexpected EOF while reading public key +- Nieoczekiwany koniec pliku (EOF) podczas odczytu klucza publicznego +- +- +- Unexpected EOF while reading private key +- Nieoczekiwany koniec pliku (EOF) podczas odczytu klucza prywatnego +- +- +- Can't write public key as it is empty +- Nie można zapisać klucza publicznego, ponieważ jest pusty +- +- +- Unexpected EOF when writing public key +- Nieoczekiwany koniec pliku (EOF) podczas zapisu klucza publicznego +- +- +- Can't write private key as it is empty +- Nie można zapisać klucza prywatnego, ponieważ jest pusty +- +- +- Unexpected EOF when writing private key +- Nieoczekiwany koniec pliku (EOF) podczas zapisu klucza prywatnego +- +- +- Unsupported key type: %1 +- NieobsÅ‚ugiwany typ klucza: %1 +- +- +- Unknown cipher: %1 +- Nieznany szyfr: %1 +- +- +- Cipher IV is too short for MD5 kdf +- Szyfr IV jest za krótki dla kdf MD5 +- +- +- Unknown KDF: %1 +- Nieznana KDF: %1 +- +- +- Unknown key type: %1 +- Nieznany typ klucza: %1 +- +- +- +- PasswordEdit +- +- Passwords do not match +- HasÅ‚a nie sÄ… zgodne +- +- +- Passwords match so far +- HasÅ‚a sÄ… do tej pory zgodne +- +- +- Toggle Password (%1) +- PrzeÅ‚Ä…cz hasÅ‚o (%1) +- +- +- Generate Password (%1) +- Wygeneruj hasÅ‚o (%1) +- +- +- Warning: Caps Lock enabled! +- Ostrzeżenie: wÅ‚Ä…czony Caps Lock! +- +- +- +- PasswordEditWidget +- +- Enter password: +- Wprowadź hasÅ‚o: +- +- +- Confirm password: +- Potwierdź hasÅ‚o: +- +- +- Password +- HasÅ‚o +- +- +- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> +- <p>HasÅ‚o jest podstawowÄ… metodÄ… zabezpieczania bazy danych.</p><p>Dobre hasÅ‚a sÄ… dÅ‚ugie i niepowtarzalne. KeePassXC może je wygenerować dla ciebie.</p> +- +- +- Passwords do not match. +- HasÅ‚a nie pasujÄ… do siebie. +- +- +- Password field +- Pole hasÅ‚a +- +- +- Repeat password field +- Pole powtórzenia hasÅ‚a +- +- +- +- PasswordGeneratorWidget +- +- %p% +- %p% +- +- +- strength +- Password strength +- siÅ‚a +- +- +- entropy +- entropia +- +- +- Password +- HasÅ‚o +- +- +- Character Types +- Typy znaków +- +- +- Numbers +- Liczby +- +- +- Extended ASCII +- Rozszerzony ASCII +- +- +- Exclude look-alike characters +- Wyklucz podobnie wyglÄ…dajÄ…ce znaki +- +- +- Pick characters from every group +- Wybierz znaki ze wszystkich grup +- +- +- &Length: +- &DÅ‚ugość: +- +- +- Passphrase +- Tekst szyfrujÄ…cy +- +- +- Wordlist: +- Lista słów: +- +- +- Word Separator: +- Separator słów: +- +- +- Close +- Zamknij +- +- +- Entropy: %1 bit +- Entropia: %1 bity +- +- +- Password Quality: %1 +- Jakość hasÅ‚a: %1 +- +- +- Poor +- Password quality +- Uboga +- +- +- Weak +- Password quality +- SÅ‚aba +- +- +- Good +- Password quality +- Dobra +- +- +- Excellent +- Password quality +- Znakomita +- +- +- Switch to advanced mode +- ZmieÅ„ na tryb zaawansowany +- +- +- Advanced +- Zaawansowane +- +- +- Braces +- Nawiasy klamrowe +- +- +- Punctuation +- Interpunkcja +- +- +- Quotes +- CudzysÅ‚owy +- +- +- Logograms +- Logogramy +- +- +- Character set to exclude from generated password +- Zestaw znaków do wykluczenia w wygenerowanym haÅ›le +- +- +- Do not include: +- Nie zawiera: +- +- +- Add non-hex letters to "do not include" list +- Dodaj nieheksadecymalne litery do listy "nie doÅ‚Ä…czaj" +- +- +- Hex +- Heksadecymalne +- +- +- Excluded characters: "0", "1", "l", "I", "O", "|", "ï¹’" +- Wykluczone znaki: "0", "1", "l", "I", "O", "|", "ï¹’" +- +- +- Generated password +- Wygenerowane hasÅ‚o +- +- +- Upper-case letters +- Wielkie litery +- +- +- Lower-case letters +- MaÅ‚e litery +- +- +- Special characters +- Znaki specjalne +- +- +- Math Symbols +- Symbole matematyczne +- +- +- Dashes and Slashes +- Kreski i ukoÅ›niki +- +- +- Excluded characters +- Wykluczone znaki +- +- +- Hex Passwords +- HasÅ‚a szesnastkowe +- +- +- Password length +- DÅ‚ugość hasÅ‚a +- +- +- Word Case: +- Rozmiar sÅ‚owa: +- +- +- Regenerate password +- Wygeneruj ponownie hasÅ‚o +- +- +- Copy password +- Skopiuj hasÅ‚o +- +- +- lower case +- maÅ‚e litery +- +- +- UPPER CASE +- WIELKIE LITERY +- +- +- Title Case +- TytuÅ‚owe Litery +- +- +- Generate Password +- Wygeneruj hasÅ‚o +- +- +- Also choose from: +- Wybierz także: +- +- +- Additional characters to use for the generated password +- Dodatkowe znaki do użycia dla wygenerowanego hasÅ‚a +- +- +- Additional characters +- Dodatkowe znaki +- +- +- Word Count: +- Liczba słów: +- +- +- Esc +- Esc +- +- +- Apply Password +- Zastosuj hasÅ‚o +- +- +- Ctrl+S +- Ctrl+S +- +- +- Regenerate password (%1) +- Wygeneruj ponownie hasÅ‚o (%1) +- +- +- Special Characters +- Znaki specjalne +- +- +- +- QApplication +- +- KeeShare +- KeeShare +- +- +- Statistics +- Statystyka +- +- +- Very weak password +- Bardzo sÅ‚abe hasÅ‚o +- +- +- Password entropy is %1 bits +- Entropia hasÅ‚a to %1 bitów +- +- +- Weak password +- SÅ‚abe hasÅ‚o +- +- +- Used in %1/%2 +- Użyte w %1/%2 +- +- +- Password is used %1 times +- HasÅ‚o użyte %1 razy +- +- +- Password has expired +- HasÅ‚o wygasÅ‚o +- +- +- Password expiry was %1 +- WygaÅ›niÄ™cie hasÅ‚a byÅ‚o %1 +- +- +- Password is about to expire +- HasÅ‚o zaraz wygaÅ›nie +- +- +- Password expires in %1 days +- HasÅ‚o wygaÅ›nie za %1 dni +- +- +- Password will expire soon +- HasÅ‚o wkrótce wygaÅ›nie +- +- +- Password expires on %1 +- HasÅ‚o wygasa w %1 +- +- +- Health Check +- Kontrola zdrowia +- +- +- HIBP +- HIBP +- +- +- +- QMessageBox +- +- Overwrite +- ZastÄ…p +- +- +- Delete +- UsuÅ„ +- +- +- Move +- PrzenieÅ› +- +- +- Empty +- Pusty +- +- +- Remove +- UsuÅ„ +- +- +- Skip +- PomiÅ„ +- +- +- Disable +- WyÅ‚Ä…cz +- +- +- Merge +- Scal +- +- +- Continue +- Kontynuuj +- +- +- +- QObject +- +- Database not opened +- Baza danych nie zostaÅ‚a otwarta +- +- +- Database hash not available +- Hash bazy danych jest niedostÄ™pny +- +- +- Client public key not received +- Klucz publiczny klienta nie zostaÅ‚ odebrany +- +- +- Cannot decrypt message +- Nie można odszyfrować wiadomoÅ›ci +- +- +- Action cancelled or denied +- DziaÅ‚anie anulowane lub odrzucone +- +- +- KeePassXC association failed, try again +- Skojarzenie KeePassXC nie powiodÅ‚o siÄ™, spróbuj ponownie +- +- +- Encryption key is not recognized +- Klucz szyfrowania nie jest rozpoznawany +- +- +- Incorrect action +- NieprawidÅ‚owe dziaÅ‚anie +- +- +- Empty message received +- Otrzymano pustÄ… wiadomość +- +- +- No URL provided +- Nie podano adresu URL +- +- +- No logins found +- Nie znaleziono danych do logowania +- +- +- Unknown error +- Nieznany bÅ‚Ä…d +- +- +- Add a new entry to a database. +- Dodaj nowy wpis do bazy danych. +- +- +- Path of the database. +- Åšcieżka bazy danych. +- +- +- Key file of the database. +- Plik z kluczem bazy danych. +- +- +- path +- Å›cieżka +- +- +- Username for the entry. +- Nazwa użytkownika dla wpisu. +- +- +- username +- użytkownik +- +- +- URL for the entry. +- Adres URL wpisu. +- +- +- URL +- Adres URL +- +- +- Prompt for the entry's password. +- Pytaj o hasÅ‚o do wpisu. +- +- +- Generate a password for the entry. +- Wygeneruj hasÅ‚o dla wpisu. +- +- +- length +- dÅ‚ugość +- +- +- Path of the entry to add. +- Åšcieżka wpisu do dodania. +- +- +- Path of the entry to clip. +- clip = copy to clipboard +- Åšcieżka wpisu do zapamiÄ™tania. +- +- +- Timeout in seconds before clearing the clipboard. +- Limit czasu w sekundach przed wyczyszczeniem Schowka. +- +- +- Edit an entry. +- Edycja wpisu. +- +- +- Title for the entry. +- TytuÅ‚ dla wpisu. +- +- +- title +- tytuÅ‚ +- +- +- Path of the entry to edit. +- Åšcieżka wpisu do edycji. +- +- +- Estimate the entropy of a password. +- Oszacuj zÅ‚ożoność hasÅ‚a. +- +- +- Password for which to estimate the entropy. +- HasÅ‚o dla którego chcesz oszacować zÅ‚ożoność. +- +- +- Perform advanced analysis on the password. +- Wykonaj zaawansowanÄ… analizÄ™ hasÅ‚a. +- +- +- +- +-Available commands: +- +- +- +-DostÄ™pne polecenia: +- +- +- +- Name of the command to execute. +- Nazwa polecenia do wykonania. +- +- +- List database entries. +- Wypisz wpisy bazy danych. +- +- +- Path of the group to list. Default is / +- Åšcieżka grupy do wymienienia. DomyÅ›lna to / +- +- +- Find entries quickly. +- Szybkie wyszukiwanie wpisów. +- +- +- Search term. +- Zapytanie wyszukiwania. +- +- +- Merge two databases. +- Scal dwie bazy danych. +- +- +- Path of the database to merge from. +- Åšcieżka bazy danych, z której scalić. +- +- +- Use the same credentials for both database files. +- Użyj tych samych poÅ›wiadczeÅ„ dla obu plików bazy danych. +- +- +- Key file of the database to merge from. +- Plik klucza bazy danych, z której scalić. +- +- +- Show an entry's information. +- Pokaż informacje o wpisie. +- +- +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- Nazwy atrybutów do wyÅ›wietlenia. TÄ… opcjÄ™ można zastosować wiÄ™cej niż jeden raz, podajÄ…c każdy atrybut w osobnym wierszu w okreÅ›lonej kolejnoÅ›ci. JeÅ›li atrybuty nie sÄ… okreÅ›lone, wyÅ›wietla siÄ™ podsumowanie domyÅ›lnych atrybutów. +- +- +- attribute +- atrybut +- +- +- Name of the entry to show. +- Nazwa wpisu do pokazania. +- +- +- NULL device +- UrzÄ…dzenie NULL +- +- +- error reading from device +- bÅ‚Ä…d odczytu z urzÄ…dzenia +- +- +- malformed string +- nieprawidÅ‚owy ciÄ…g +- +- +- missing closing quote +- brak cytatu zamkniÄ™cia +- +- +- Group +- Grupa +- +- +- Title +- TytuÅ‚ +- +- +- Username +- Użytkownik +- +- +- Password +- HasÅ‚o +- +- +- Notes +- Notatki +- +- +- Last Modified +- Ostatnia modyfikacja +- +- +- Created +- Stworzone +- +- +- Browser Integration +- Integracja z przeglÄ…darkÄ… +- +- +- SSH Agent +- Agent SSH +- +- +- Generate a new random diceware passphrase. +- Wygeneruj nowe hasÅ‚o losowe diceware. +- +- +- Word count for the diceware passphrase. +- Liczba słów dla hasÅ‚a diceware. +- +- +- Wordlist for the diceware generator. +-[Default: EFF English] +- Lista słów dla generatora diceware. +-[DomyÅ›lna: EFF English] +- +- +- Generate a new random password. +- Wygeneruj nowe hasÅ‚o losowe. +- +- +- Could not create entry with path %1. +- Nie można utworzyć wpisu ze Å›cieżkÄ… %1. +- +- +- Enter password for new entry: +- Wprowadź hasÅ‚o dla nowego wpisu: +- +- +- Writing the database failed %1. +- BÅ‚Ä…d przy zapisie bazy danych %1. +- +- +- Successfully added entry %1. +- PomyÅ›lnie dodano wpis %1. +- +- +- Invalid timeout value %1. +- NieprawidÅ‚owa wartość limitu czasu %1. +- +- +- Entry %1 not found. +- Nie znaleziono wpisu %1. +- +- +- Entry with path %1 has no TOTP set up. +- Wpis ze Å›cieżkÄ… %1 nie ma ustawionego TOTP. +- +- +- Clearing the clipboard in %1 second(s)... +- Czyszczenie schowka za %1 sekundÄ™...Czyszczenie schowka za %1 sekundy...Czyszczenie schowka za %1 sekund...Czyszczenie schowka za %1 sekund... +- +- +- Clipboard cleared! +- Schowek wyczyszczony! +- +- +- Silence password prompt and other secondary outputs. +- Cichy monit o hasÅ‚o i inne wyjÅ›cia pomocnicze. +- +- +- count +- CLI parameter +- liczba +- +- +- Could not find entry with path %1. +- Nie można znaleźć wpisu ze Å›cieżkÄ… %1. +- +- +- Not changing any field for entry %1. +- Bez zmiany żadnego pola dla wpisu %1. +- +- +- Enter new password for entry: +- Wprowadź nowe hasÅ‚o dls wpisu: +- +- +- Writing the database failed: %1 +- BÅ‚Ä…d zapisu bazy danych: %1 +- +- +- Successfully edited entry %1. +- PomyÅ›lnie edytowano wpis %1. +- +- +- Length %1 +- DÅ‚ugość %1 +- +- +- Entropy %1 +- Entropia %1 +- +- +- Log10 %1 +- Log10 %1 +- +- +- Multi-word extra bits %1 +- Dodatkowe bity w wielu wyrazach %1 +- +- +- Type: Bruteforce +- Typ: Bruteforce +- +- +- Type: Dictionary +- Type: SÅ‚ownikowy +- +- +- Type: Dict+Leet +- Typ: SÅ‚ownikowy+Leet +- +- +- Type: User Words +- Typ: SÅ‚owa użytkownika +- +- +- Type: User+Leet +- Typ: Użytkownika+Leet +- +- +- Type: Repeated +- Typ: Powtarzany +- +- +- Type: Sequence +- Typ: Sekwencja +- +- +- Type: Spatial +- Typ: Przestrzenny +- +- +- Type: Date +- Typ: Data +- +- +- Type: Bruteforce(Rep) +- Typ: Bruteforce(Powt.) +- +- +- Type: Dictionary(Rep) +- Typ: SÅ‚ownikowy(Powt.) +- +- +- Type: Dict+Leet(Rep) +- Typ: SÅ‚ownikowy+Leet(Powt.) +- +- +- Type: User Words(Rep) +- Typ: SÅ‚owa użytkownika(Powt.) +- +- +- Type: User+Leet(Rep) +- Typ: Użytkownika+Leet(Powt.) +- +- +- Type: Repeated(Rep) +- Typ: Powtarzany(Powt.) +- +- +- Type: Sequence(Rep) +- Typ: Sekwencja(Powt.) +- +- +- Type: Spatial(Rep) +- Typ: Przestrzenny(Powt.) +- +- +- Type: Date(Rep) +- Typ: Data(Powt.) +- +- +- Type: Unknown%1 +- Typ: Nieznany%1 +- +- +- Entropy %1 (%2) +- Entropia %1 (%2) +- +- +- *** Password length (%1) != sum of length of parts (%2) *** +- *** DÅ‚ugość hasÅ‚a (%1) != suma dÅ‚ugoÅ›ci części (%2) *** +- +- +- Failed to load key file %1: %2 +- Nie udaÅ‚o siÄ™ zaÅ‚adować pliku klucza %1: %2 +- +- +- Length of the generated password +- DÅ‚ugość wygenerowanego hasÅ‚a +- +- +- Use lowercase characters +- Użyj maÅ‚ych liter +- +- +- Use uppercase characters +- Użyj dużych liter +- +- +- Use special characters +- Użyj znaków specjalnych +- +- +- Use extended ASCII +- Użyj rozszerzonego ASCII +- +- +- Exclude character set +- Wyklucz zestaw znaków +- +- +- chars +- znaki +- +- +- Exclude similar looking characters +- Wyklucz podobnie wyglÄ…dajÄ…ce znaki +- +- +- Include characters from every selected group +- UwzglÄ™dnij znaki z każdej wybranej grupy +- +- +- Recursively list the elements of the group. +- Rekurencyjnie wylistuj elementy grupy. +- +- +- Cannot find group %1. +- Nie można znaleźć grupy %1. +- +- +- Error reading merge file: +-%1 +- BÅ‚Ä…d odczytu pliku scalania: +-%1 +- +- +- Unable to save database to file : %1 +- Nie można zapisać bazy danych do pliku : %1 +- +- +- Unable to save database to file: %1 +- Nie można zapisać bazy danych do pliku: %1 +- +- +- Successfully recycled entry %1. +- PomyÅ›lnie przeniesiono do kosza wpis %1. +- +- +- Successfully deleted entry %1. +- PomyÅ›lnie usuniÄ™to wpis %1. +- +- +- Show the entry's current TOTP. +- Pokaż bieżące TOTP wpisu. +- +- +- ERROR: unknown attribute %1. +- BÅÄ„D: nieznany atrybut %1. +- +- +- No program defined for clipboard manipulation +- Nie zdefiniowano żadnego programu do manipulacji schowkiem +- +- +- file empty +- plik pusty +- +- +- %1: (row, col) %2,%3 +- %1: (rzÄ…d, kolumna) %2,%3 +- +- +- AES-KDF (KDBX 4) +- AES-KDF (KDBX 4) +- +- +- AES-KDF (KDBX 3.1) +- AES-KDF (KDBX 3.1) +- +- +- Invalid Settings +- TOTP +- Ustawienia nieprawidÅ‚owe +- +- +- Invalid Key +- TOTP +- NieprawidÅ‚owy klucz +- +- +- Message encryption failed. +- Szyfrowanie wiadomoÅ›ci nie powiodÅ‚o siÄ™. +- +- +- No groups found +- Nie znaleziono grup +- +- +- Create a new database. +- Stwórz nowÄ… bazÄ™ danych. +- +- +- File %1 already exists. +- Plik %1 już istnieje. +- +- +- Loading the key file failed +- Åadowanie pliku klucza nie powiodÅ‚o siÄ™ +- +- +- No key is set. Aborting database creation. +- Å»aden klawisz nie jest ustawiony. Przerwanie tworzenia bazy danych. +- +- +- Failed to save the database: %1. +- Nie udaÅ‚o siÄ™ zapisać bazy danych: %1. +- +- +- Successfully created new database. +- PomyÅ›lnie utworzono nowÄ… bazÄ™ danych. +- +- +- Creating KeyFile %1 failed: %2 +- Tworzenie pliku klucza %1 nie powiodÅ‚o siÄ™: %2 +- +- +- Loading KeyFile %1 failed: %2 +- Åadowanie pliku klucza %1 nie powiodÅ‚o siÄ™: %2 +- +- +- Path of the entry to remove. +- Åšcieżka wpisu do usuniÄ™cia. +- +- +- Existing single-instance lock file is invalid. Launching new instance. +- IstniejÄ…cy plik blokady pojedynczego wystÄ…pienia jest nieprawidÅ‚owy. Uruchamianie nowego wystÄ…pienia. +- +- +- The lock file could not be created. Single-instance mode disabled. +- Nie można utworzyć pliku blokady. Tryb pojedynczej instancji jest wyÅ‚Ä…czony. +- +- +- KeePassXC - cross-platform password manager +- KeePassXC - wieloplatformowy menedżer haseÅ‚ +- +- +- filenames of the password databases to open (*.kdbx) +- nazwy plików baz danych haseÅ‚ do otwarcia (*.kdbx) +- +- +- path to a custom config file +- Å›cieżka do pliku z ustawieniami +- +- +- key file of the database +- plik klucza bazy danych +- +- +- read password of the database from stdin +- odczytaj hasÅ‚o bazy danych z stdin +- +- +- Another instance of KeePassXC is already running. +- Inna instancja KeePassXC jest już uruchomiona. +- +- +- Fatal error while testing the cryptographic functions. +- BÅ‚Ä…d krytyczny podczas testowania funkcji kryptograficznych. +- +- +- KeePassXC - Error +- KeePassXC - BÅ‚Ä…d +- +- +- Database password: +- HasÅ‚o bazy danych: +- +- +- Cannot create new group +- Nie można utworzyć nowej grupy +- +- +- Deactivate password key for the database. +- Dezaktywuj klucz hasÅ‚a dla bazy danych. +- +- +- Displays debugging information. +- WyÅ›wietla informacje o debugowaniu. +- +- +- Deactivate password key for the database to merge from. +- Dezaktywuj klucz hasÅ‚a dla bazy danych do scalenia. +- +- +- Version %1 +- Wersja %1 +- +- +- Build Type: %1 +- Typ kompilacji: %1 +- +- +- Revision: %1 +- Rewizja: %1 +- +- +- Distribution: %1 +- Dystrybucja: %1 +- +- +- Debugging mode is disabled. +- Tryb debugowania jest wyÅ‚Ä…czony. +- +- +- Debugging mode is enabled. +- Tryb debugowania jest wÅ‚Ä…czony. +- +- +- Operating system: %1 +-CPU architecture: %2 +-Kernel: %3 %4 +- System operacyjny: %1 +-Architektura procesora: %2 +-JÄ…dro: %3 %4 +- +- +- Auto-Type +- Autowpisywanie +- +- +- KeeShare (signed and unsigned sharing) +- KeeShare (podpisane i niepodpisane udostÄ™pnianie) +- +- +- KeeShare (only signed sharing) +- KeeShare (tylko podpisane udostÄ™pnianie) +- +- +- KeeShare (only unsigned sharing) +- KeeShare (tylko niepodpisane udostÄ™pnianie) +- +- +- YubiKey +- YubiKey +- +- +- TouchID +- TouchID +- +- +- None +- Å»aden +- +- +- Enabled extensions: +- WÅ‚Ä…czone rozszerzenia: +- +- +- Cryptographic libraries: +- Biblioteki kryptograficzne: +- +- +- Cannot generate a password and prompt at the same time! +- Nie można wygenerować hasÅ‚a i monitu w tym samym czasie! +- +- +- Adds a new group to a database. +- Dodaje nowÄ… grupÄ™ do bazy danych. +- +- +- Path of the group to add. +- Åšcieżka grupy do dodania. +- +- +- Group %1 already exists! +- Grupa %1 już istnieje! +- +- +- Group %1 not found. +- Grupy %1 nie zostaÅ‚a znaleziona. +- +- +- Successfully added group %1. +- PomyÅ›lnie dodano grupÄ™ %1. +- +- +- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. +- Sprawdź, czy jakiekolwiek hasÅ‚a nie zostaÅ‚y publicznie ujawnione. NAZWA PLIKU musi być Å›cieżkÄ… do pliku zawierajÄ…cego hashe SHA-1 wyciekÅ‚ych haseÅ‚ w formacie HIBP dostÄ™pnych na https://haveibeenpwned.com/Passwords. +- +- +- FILENAME +- NAZWA PLIKU +- +- +- Analyze passwords for weaknesses and problems. +- Analizuj hasÅ‚a pod kÄ…tem sÅ‚abych punktów i problemów. +- +- +- Failed to open HIBP file %1: %2 +- Nie można otworzyć pliku HIBP %1: %2 +- +- +- Evaluating database entries against HIBP file, this will take a while... +- Oceniam wpisy w bazie danych w stosunku do pliku HIBP, to zajmie trochÄ™ czasu... +- +- +- Close the currently opened database. +- Zamknij aktualnie otwartÄ… bazÄ™ danych. +- +- +- Display this help. +- WyÅ›wietl tÄ™ pomoc. +- +- +- slot +- gniazdo +- +- +- Invalid word count %1 +- NieprawidÅ‚owa liczba wyrazów %1 +- +- +- The word list is too small (< 1000 items) +- Lista wyrazów jest za maÅ‚a (< 1000 elementów) +- +- +- Exit interactive mode. +- Wyjdź z trybu interaktywnego. +- +- +- Exports the content of a database to standard output in the specified format. +- Eksportuje zawartość bazy danych do standardowego wyjÅ›cia w okreÅ›lonym formacie. +- +- +- Unable to export database to XML: %1 +- Nie można wyeksportować bazy danych do pliku XML: %1 +- +- +- Unsupported format %1 +- NieobsÅ‚ugiwany format %1 +- +- +- Use numbers +- Użyj liczb +- +- +- Invalid password length %1 +- NieprawidÅ‚owa dÅ‚ugość hasÅ‚a %1 +- +- +- Display command help. +- WyÅ›wietl pomoc dotyczÄ…cÄ… poleceÅ„. +- +- +- Available commands: +- DostÄ™pne polecenia: +- +- +- Import the contents of an XML database. +- Importuj zawartość bazy danych XML. +- +- +- Path of the XML database export. +- Åšcieżka eksportu bazy danych XML. +- +- +- Path of the new database. +- Åšcieżka nowej bazy danych. +- +- +- Successfully imported database. +- PomyÅ›lnie zaimportowano bazÄ™ danych. +- +- +- Unknown command %1 +- Nieznane polecenie %1 +- +- +- Flattens the output to single lines. +- SpÅ‚aszcza dane wyjÅ›ciowe do pojedynczych wierszy. +- +- +- Only print the changes detected by the merge operation. +- Drukuj tylko zmiany wykryte przez operacjÄ™ scalania. +- +- +- Yubikey slot for the second database. +- Gniazdo YubiKey dla drugiej bazy danych. +- +- +- Successfully merged %1 into %2. +- PomyÅ›lnie scalono %1 z %2. +- +- +- Database was not modified by merge operation. +- Baza danych nie zostaÅ‚a zmodyfikowana operacjÄ… scalania. +- +- +- Moves an entry to a new group. +- Przenosi wpis do nowej grupy. +- +- +- Path of the entry to move. +- Åšcieżka wpisu do przeniesienia. +- +- +- Path of the destination group. +- Åšcieżka grupy docelowej. +- +- +- Could not find group with path %1. +- Nie można odnaleźć grupy ze Å›cieżkÄ… %1. +- +- +- Entry is already in group %1. +- Wpis jest już w grupie %1. +- +- +- Successfully moved entry %1 to group %2. +- PomyÅ›lnie przeniesiono wpis %1 do grupy %2. +- +- +- Open a database. +- Otwórz bazÄ™ danych. +- +- +- Path of the group to remove. +- Åšcieżka grupy do usuniÄ™cia. +- +- +- Cannot remove root group from database. +- Nie można usunąć grupy głównej z bazy danych. +- +- +- Successfully recycled group %1. +- PomyÅ›lnie przetworzono grupÄ™ %1. +- +- +- Successfully deleted group %1. +- PomyÅ›lnie usuniÄ™to grupÄ™ %1. +- +- +- Failed to open database file %1: not found +- Nie można otworzyć pliku bazy danych %1: nie znaleziono +- +- +- Failed to open database file %1: not a plain file +- Nie można otworzyć pliku bazy danych %1: nie jest to zwykÅ‚y plik +- +- +- Failed to open database file %1: not readable +- Nie można otworzyć pliku bazy danych %1: nieczytelny +- +- +- Enter password to unlock %1: +- Wprowadź hasÅ‚o, aby odblokować %1: +- +- +- Invalid YubiKey slot %1 +- NieprawidÅ‚owe gniazdo YubiKey %1 +- +- +- Enter password to encrypt database (optional): +- Wprowadź hasÅ‚o do szyfrowania bazy danych (opcjonalnie): +- +- +- HIBP file, line %1: parse error +- Plik HIBP, wiersz %1: bÅ‚Ä…d analizy +- +- +- Secret Service Integration +- Integracja usÅ‚ugi sekretnej +- +- +- User name +- Nazwa użytkownika +- +- +- Password for '%1' has been leaked %2 time(s)! +- HasÅ‚o do '%1' wyciekÅ‚o %2 raz!HasÅ‚o do '%1' wyciekÅ‚o %2 razy!HasÅ‚o do '%1' wyciekÅ‚o %2 razy!HasÅ‚o do '%1' wyciekÅ‚o %2 razy! +- +- +- Invalid password generator after applying all options +- NieprawidÅ‚owy generator haseÅ‚ po zastosowaniu wszystkich opcji +- +- +- Show the protected attributes in clear text. +- Pokaż chronione atrybuty w postaci zwykÅ‚ego tekstu. +- +- +- Browser Plugin Failure +- BÅ‚Ä…d wtyczki przeglÄ…darki +- +- +- Could not save the native messaging script file for %1. +- Nie można zapisać pliku skryptu wiadomoÅ›ci natywnej dla %1. +- +- +- Copy the given attribute to the clipboard. Defaults to "password" if not specified. +- Skopiuj dany atrybut do schowka. DomyÅ›lnie "hasÅ‚o", jeÅ›li nie jest okreÅ›lony. +- +- +- Copy the current TOTP to the clipboard (equivalent to "-a totp"). +- Skopiuj bieżący TOTP do schowka (odpowiednik "-a totp"). +- +- +- Copy an entry's attribute to the clipboard. +- Skopiuj atrybut wpisu do schowka. +- +- +- ERROR: Please specify one of --attribute or --totp, not both. +- BÅÄ„D: ProszÄ™ okreÅ›lić jeden z --atrybut lub --totp, a nie oba. +- +- +- ERROR: attribute %1 is ambiguous, it matches %2. +- BÅÄ„D: atrybut %1 jest niejednoznaczny, jest zgodny z %2. +- +- +- Attribute "%1" not found. +- Nie znaleziono atrybutu "%1". +- +- +- Entry's "%1" attribute copied to the clipboard! +- Atrybut "%1" wpisu skopiowany do schowka! +- +- +- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). +- Gniazdo Yubikey i opcjonalny numer seryjny używane do uzyskiwania dostÄ™pu do bazy danych (np. 1:7370001). +- +- +- slot[:serial] +- gniazdo[:numer seryjny] +- +- +- Target decryption time in MS for the database. +- Docelowy czas odszyfrowywania w ms dla bazy danych. +- +- +- time +- czas +- +- +- Set the key file for the database. +- Ustaw plik klucza dla bazy danych. +- +- +- Set a password for the database. +- Ustaw hasÅ‚o bazy danych. +- +- +- Invalid decryption time %1. +- NieprawidÅ‚owy czas odszyfrowywania %1. +- +- +- Target decryption time must be between %1 and %2. +- Docelowy czas odszyfrowywania musi wynosić od %1 do %2. +- +- +- Failed to set database password. +- Nie można ustawić hasÅ‚a bazy danych. +- +- +- Benchmarking key derivation function for %1ms delay. +- Testowanie wydajnoÅ›ci funkcji derywacji klucza dla opóźnienia %1ms. +- +- +- Setting %1 rounds for key derivation function. +- Ustawienie %1 rund dla funkcji derywacji klucza. +- +- +- error while setting database key derivation settings. +- bÅ‚Ä…d podczas tworzenia ustawieÅ„ derywacji klucza. +- +- +- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. +- Formatowanie do użycia podczas eksportowania. DostÄ™pne opcje to 'xml' lub 'csv'. DomyÅ›lnie wartość 'xml'. +- +- +- Unable to import XML database: %1 +- Nie można zaimportować bazy danych XML: %1 +- +- +- Show a database's information. +- Pokaż informacje o bazie danych. +- +- +- UUID: +- UUID: +- +- +- Name: +- Nazwa: +- +- +- Description: +- Opis: +- +- +- Cipher: +- Szyfr: +- +- +- KDF: +- KDF: +- +- +- Recycle bin is enabled. +- Kosz jest wÅ‚Ä…czony. +- +- +- Recycle bin is not enabled. +- Kosz nie jest wÅ‚Ä…czony. +- +- +- Invalid command %1. +- NieprawidÅ‚owe polecenie %1. +- +- +- Invalid YubiKey serial %1 +- NieprawidÅ‚owy numer seryjny YubiKey %1 +- +- +- Please touch the button on your YubiKey to continue… +- ProszÄ™ dotknąć przycisku na YubiKey, aby kontynuować… +- +- +- Do you want to create a database with an empty password? [y/N]: +- Czy chcesz utworzyć bazÄ™ danych z pustym hasÅ‚em? [t/N]: +- +- +- Repeat password: +- Powtarzanie hasÅ‚a: +- +- +- Error: Passwords do not match. +- BÅ‚Ä…d: hasÅ‚a nie sÄ… zgodne. +- +- +- All clipping programs failed. Tried %1 +- +- Wszystkie programy obcinajÄ…ce zawiodÅ‚y. Próbowano %1 +- +- +- +- AES (%1 rounds) +- AES (rundy: %1) +- +- +- AES 256-bit +- AES 256-bitowy +- +- +- Twofish 256-bit +- Twofish 256-bitowy +- +- +- ChaCha20 256-bit +- ChaCha20: 256-bitowy {20 256-?} +- +- +- Benchmark %1 delay +- Test wydajnoÅ›ci opóźnienia %1 +- +- +- %1 ms +- milliseconds +- %1 ms%1 ms%1 ms%1 ms +- +- +- %1 s +- seconds +- %1 s%1 s%1 s%1 s +- +- +- path to a custom local config file +- Å›cieżka do lokalnego pliku z ustawieniami +- +- +- WARNING: You are using an old key file format which KeePassXC may +-stop supporting in the future. +- +-Please consider generating a new key file. +- OSTRZEÅ»ENIE: Używasz starego formatu pliku klucza, który może nie być +-obsÅ‚ugiwany przez KeePassXC w przyszÅ‚oÅ›ci. +- +-Rozważ wygenerowanie nowego pliku klucza. +- +- +- Argon2%1 (%2 rounds, %3 KB) +- Argon2%1 (%2 rundy, %3 KB) +- +- +- Argon2d (KDBX 4 – recommended) +- Argon2d (KDBX 4 – zalecany) +- +- +- Argon2id (KDBX 4) +- Argon2id (KDBX 4) +- +- +- TOTP +- TOTP +- +- +- Icon +- Ikona +- +- +- Unsupported key file version: %1 +- NieobsÅ‚ugiwana wersja pliku klucza: %1 +- +- +- Checksum mismatch! Key file may be corrupt. +- Niezgodność sumy kontrolnej! Plik klucza może być uszkodzony. +- +- +- Unexpected key file data! Key file may be corrupt. +- Nieoczekiwane dane pliku klucza! Plik klucza może być uszkodzony. +- +- +- +- QtIOCompressor +- +- Internal zlib error when compressing: +- BÅ‚Ä…d wewnÄ™trzny zlib podczas kompresowania: +- +- +- Error writing to underlying device: +- BÅ‚Ä…d w zapisie na urzÄ…dzenie: +- +- +- Error opening underlying device: +- BÅ‚Ä…d w otwieraniu z urzÄ…dzenia: +- +- +- Error reading data from underlying device: +- BÅ‚Ä…d w odczycie danych z urzÄ…dzenia: +- +- +- Internal zlib error when decompressing: +- BÅ‚Ä…d wewnÄ™trzny zlib podczas dekompresowania: +- +- +- +- QtIOCompressor::open +- +- The gzip format not supported in this version of zlib. +- Format gzip nie wspierany przez tÄ™ wersjÄ™ zlib. +- +- +- Internal zlib error: +- BÅ‚Ä…d wewnÄ™trzny zlib: +- +- +- +- ReportsWidgetHealthcheck +- +- Also show entries that have been excluded from reports +- Pokaż również wpisy, które zostaÅ‚y wykluczone z raportów +- +- +- Hover over reason to show additional details. Double-click entries to edit. +- Umieść wskaźnik myszy nad powodem, aby wyÅ›wietlić dodatkowe szczegóły. Kliknij dwukrotnie wpisy, aby edytować. +- +- +- Bad +- Password quality +- ZÅ‚a +- +- +- Bad — password must be changed +- ZÅ‚e — hasÅ‚o musi zostać zmienione +- +- +- Poor +- Password quality +- Uboga +- +- +- Poor — password should be changed +- Ubogie — hasÅ‚o powinno zostać zmienione +- +- +- Weak +- Password quality +- SÅ‚aba +- +- +- Weak — consider changing the password +- SÅ‚abe — rozważ zmianÄ™ hasÅ‚a +- +- +- (Excluded) +- (Wykluczone) +- +- +- This entry is being excluded from reports +- Ten wpis jest wykluczony z raportów +- +- +- Please wait, health data is being calculated... +- ProszÄ™ czekać, dane zdrowotne sÄ… obliczane... +- +- +- Congratulations, everything is healthy! +- Gratulacje, wszystko jest zdrowe! +- +- +- Title +- TytuÅ‚ +- +- +- Path +- Åšcieżka +- +- +- Score +- Ocena +- +- +- Reason +- Powód +- +- +- Edit Entry... +- Edytuj wpis... +- +- +- Exclude from reports +- Wyklucz z raportów +- +- +- +- ReportsWidgetHibp +- +- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. +- UWAGA: Ten raport wymaga wysÅ‚ania informacji do serwisu internetowego Have I Been Pwned (https://haveibeenpwned.com). JeÅ›li bÄ™dziesz kontynuować, hasÅ‚a bazy danych zostanÄ… zahashowane kryptograficznie i pierwsze pięć znaków tych hashów zostanie wysÅ‚ane bezpiecznie do tej usÅ‚ugi. Twoja baza danych pozostanie bezpieczna i nie bÄ™dzie można jej odtworzyć na podstawie tych informacji. Jednak liczba wysÅ‚anych haseÅ‚ i adres IP bÄ™dÄ… widoczne dla tej usÅ‚ugi. +- +- +- Perform Online Analysis +- Przeprowadź analizÄ™ online +- +- +- Also show entries that have been excluded from reports +- Pokaż również wpisy, które zostaÅ‚y wykluczone z raportów +- +- +- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. +- Ta kompilacja KeePassXC nie ma funkcji sieciowych. Sieć jest wymagana do sprawdzania haseÅ‚ w bazach danych Have I Been Pwned. +- +- +- Congratulations, no exposed passwords! +- Gratulacje, bez narażonych haseÅ‚! +- +- +- Title +- TytuÅ‚ +- +- +- Path +- Åšcieżka +- +- +- Password exposed… +- HasÅ‚o narażone… +- +- +- (Excluded) +- (Wykluczone) +- +- +- This entry is being excluded from reports +- Ten wpis jest wykluczony z raportów +- +- +- once +- raz +- +- +- up to 10 times +- do 10 razy +- +- +- up to 100 times +- do 100 razy +- +- +- up to 1000 times +- do 1000 razy +- +- +- up to 10,000 times +- do 10 000 razy +- +- +- up to 100,000 times +- do 100 000 razy +- +- +- up to a million times +- do miliona razy +- +- +- millions of times +- miliony razy +- +- +- Edit Entry... +- Edytuj wpis... +- +- +- Exclude from reports +- Wyklucz z raportów +- +- +- +- ReportsWidgetStatistics +- +- Hover over lines with error icons for further information. +- Najedź kursorem na wiersze z ikonami bÅ‚Ä™dów, aby uzyskać wiÄ™cej informacji. +- +- +- Name +- Nazwa +- +- +- Value +- Wartość +- +- +- Please wait, database statistics are being calculated... +- ProszÄ™ czekać, statystyki bazy danych sÄ… obliczane... +- +- +- Database name +- Nazwa bazy danych +- +- +- Description +- Opis +- +- +- Location +- Lokalizacja +- +- +- Last saved +- Ostatnio zapisane +- +- +- Unsaved changes +- Niezapisane zmiany +- +- +- yes +- tak +- +- +- no +- nie +- +- +- The database was modified, but the changes have not yet been saved to disk. +- Baza danych zostaÅ‚a zmodyfikowana, ale zmiany nie zostaÅ‚y jeszcze zapisane na dysku. +- +- +- Number of groups +- Liczba grup +- +- +- Number of entries +- Liczba wpisów +- +- +- Number of expired entries +- Liczba wygasÅ‚ych wpisów +- +- +- The database contains entries that have expired. +- Baza danych zawiera wpisy, które wygasÅ‚y. +- +- +- Unique passwords +- Niepowtarzalne hasÅ‚a +- +- +- Non-unique passwords +- Powtarzalne hasÅ‚a +- +- +- More than 10% of passwords are reused. Use unique passwords when possible. +- Ponad 10% haseÅ‚ jest ponownie wykorzystywanych. JeÅ›li to możliwe, używaj niepowtarzalnych haseÅ‚. +- +- +- Maximum password reuse +- Maksymalne ponowne użycie hasÅ‚a +- +- +- Some passwords are used more than three times. Use unique passwords when possible. +- Niektóre hasÅ‚a sÄ… używane wiÄ™cej niż trzy razy. JeÅ›li to możliwe, używaj niepowtarzalnych haseÅ‚. +- +- +- Number of short passwords +- Liczba krótkich haseÅ‚ +- +- +- Recommended minimum password length is at least 8 characters. +- Zalecana minimalna dÅ‚ugość hasÅ‚a to co najmniej 8 znaków. +- +- +- Number of weak passwords +- Liczba sÅ‚abych haseÅ‚ +- +- +- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. +- Zaleca siÄ™ używanie dÅ‚ugich, losowych haseÅ‚ z ocenÄ… 'dobra' lub 'znakomita'. +- +- +- Entries excluded from reports +- Wpisy wykluczone z raportów +- +- +- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. +- Wykluczenie wpisów z raportów, np. ponieważ wiadomo, że majÄ… sÅ‚abe hasÅ‚o, niekoniecznie jest to problem, ale należy na to uważać. +- +- +- Average password length +- Åšrednia dÅ‚ugość hasÅ‚a +- +- +- %1 characters +- %1 znaków +- +- +- Average password length is less than ten characters. Longer passwords provide more security. +- Åšrednia dÅ‚ugość hasÅ‚a wynosi mniej niż dziesięć znaków. DÅ‚uższe hasÅ‚a zapewniajÄ… wiÄ™ksze bezpieczeÅ„stwo. +- +- +- +- SSHAgent +- +- Agent connection failed. +- PoÅ‚Ä…czenie agenta nie powiodÅ‚o siÄ™. +- +- +- Agent protocol error. +- BÅ‚Ä…d protokoÅ‚u agenta. +- +- +- No agent running, cannot add identity. +- Å»aden agent nie dziaÅ‚a, nie można dodać tożsamoÅ›ci. +- +- +- No agent running, cannot remove identity. +- Å»aden agent nie dziaÅ‚a, nie można usunąć tożsamoÅ›ci. +- +- +- Agent refused this identity. Possible reasons include: +- Agent odmówiÅ‚ tej tożsamoÅ›ci. Możliwe przyczyny to: +- +- +- The key has already been added. +- Klucz zostaÅ‚ już dodany. +- +- +- Restricted lifetime is not supported by the agent (check options). +- Ograniczony czas życia nie jest obsÅ‚ugiwany przez agenta (sprawdź opcje). +- +- +- A confirmation request is not supported by the agent (check options). +- Żądanie potwierdzenia nie jest obsÅ‚ugiwane przez agenta (sprawdź opcje). +- +- +- Key identity ownership conflict. Refusing to add. +- Konflikt wÅ‚asnoÅ›ci tożsamoÅ›ci klucza. Odmowa dodania. +- +- +- No agent running, cannot list identities. +- Å»aden agent uruchomiony, nie może wyÅ›wietlić listy tożsamoÅ›ci. +- +- +- +- SearchHelpWidget +- +- Search Help +- Przeszukaj pomoc +- +- +- Search terms are as follows: [modifiers][field:]["]term["] +- Zapytania wyszukiwania sÄ… nastÄ™pujÄ…ce: [modyfikatory][pole:]["]zapytanie["] +- +- +- Every search term must match (ie, logical AND) +- Każde zapytanie wyszukiwania musi pasować (tj. logiczny AND) +- +- +- Modifiers +- Modyfikatory +- +- +- exclude term from results +- wyklucz zapytanie z wyników +- +- +- match term exactly +- dopasuj dokÅ‚adnie zapytanie +- +- +- use regex in term +- użyj wyrażenia regularnego w zapytaniu +- +- +- Fields +- Pola +- +- +- Term Wildcards +- Wieloznacznik zapytania +- +- +- match anything +- dopasuj cokolwiek +- +- +- match one +- dopasuj jeden +- +- +- logical OR +- logiczny OR +- +- +- Examples +- PrzykÅ‚ady +- +- +- +- SearchWidget +- +- Search +- Szukaj +- +- +- Limit search to selected group +- Ogranicz wyszukiwanie do wybranych grup +- +- +- Search Help +- Przeszukaj pomoc +- +- +- Search (%1)... +- Search placeholder text, %1 is the keyboard shortcut +- Szukaj (%1)... +- +- +- Case sensitive +- Rozróżniaj wielkość znaków +- +- +- +- SettingsWidgetFdoSecrets +- +- Options +- Opcje +- +- +- Enable KeepassXC Freedesktop.org Secret Service integration +- WÅ‚Ä…cz integracjÄ™ KeepassXC z usÅ‚ugÄ… sekretnÄ… Freedesktop.org +- +- +- General +- Ogólne +- +- +- Show notification when credentials are requested +- Pokaż powiadomienie, gdy wymagane sÄ… dane uwierzytelniajÄ…ce +- +- +- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> +- <html><head/><body><p>Jeżeli kosz jest wÅ‚Ä…czony dla bazy danych, wpisy zostanÄ… przeniesione do kosza bezpoÅ›rednio. W przeciwnym razie zostanÄ… one usuniÄ™te bez potwierdzenia.</p><p>Nadal bÄ™dzie wyÅ›wietlany monit, jeÅ›li jakiekolwiek wpisy sÄ… przywoÅ‚ywane przez inne.</p></body></html> +- +- +- Exposed database groups: +- OdsÅ‚oniÄ™te grupy bazy danych: +- +- +- Authorization +- Uwierzytelnienie +- +- +- These applications are currently connected: +- Aplikacje te sÄ… obecnie podÅ‚Ä…czone: +- +- +- Don't confirm when entries are deleted by clients +- Nie potwierdzaj, kiedy wpisy sÄ… usuwane przez klientów +- +- +- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. +- <b>BÅ‚Ä…d:</b> Nie można poÅ‚Ä…czyć siÄ™ z DBus. Sprawdź konfiguracjÄ™ DBus. +- +- +- <b>Warning:</b> +- <b>Ostrzeżenie:</b> +- +- +- Save current changes to activate the plugin and enable editing of this section. +- Zapisz bieżące zmiany, aby aktywować wtyczkÄ™ i wÅ‚Ä…czyć edycjÄ™ tej sekcji. +- +- +- +- SettingsWidgetKeeShare +- +- Active +- Aktywuj +- +- +- Allow export +- Pozwól eksportować +- +- +- Allow import +- Pozwól importować +- +- +- Own certificate +- WÅ‚asny certyfikat +- +- +- Fingerprint: +- Odcisk palca: +- +- +- Certificate: +- Certyfikat: +- +- +- Signer +- PodpisujÄ…cy +- +- +- Key: +- Klucz: +- +- +- Generate +- Wygeneruj +- +- +- Import +- Importuj +- +- +- Export +- Eksportuj +- +- +- Imported certificates +- Importowane certyfikaty +- +- +- Trust +- Zaufaj +- +- +- Ask +- Zapytaj +- +- +- Untrust +- Nie ufaj +- +- +- Remove +- UsuÅ„ +- +- +- Path +- Åšcieżka +- +- +- Status +- Status +- +- +- Fingerprint +- Odcisk palca +- +- +- Certificate +- Certyfikat +- +- +- Trusted +- Zaufany +- +- +- Untrusted +- Niezaufany +- +- +- Unknown +- Nieznany +- +- +- key.share +- Filetype for KeeShare key +- key.share +- +- +- KeeShare key file +- Plik klucza KeeShare +- +- +- All files +- Wszystkie pliki +- +- +- Select path +- Wybierz Å›cieżkÄ™ +- +- +- Exporting changed certificate +- Eksportowanie zmienionego certyfikatu +- +- +- The exported certificate is not the same as the one in use. Do you want to export the current certificate? +- Wyeksportowany certyfikat nie jest tym samym, co używany. Czy chcesz wyeksportować bieżący certyfikat? +- +- +- Signer: +- PodpisujÄ…cy: +- +- +- Allow KeeShare imports +- Zezwalaj na importowanie KeeShare +- +- +- Allow KeeShare exports +- Zezwalaj na eksportowanie KeeShare +- +- +- Only show warnings and errors +- Pokazuj tylko ostrzeżenia i bÅ‚Ä™dy +- +- +- Key +- Klucz +- +- +- Signer name field +- Pole nazwy osoby podpisujÄ…cej +- +- +- Generate new certificate +- Wygeneruj nowy certyfikat +- +- +- Import existing certificate +- Importuj istniejÄ…cy certyfikat +- +- +- Export own certificate +- Eksportuj wÅ‚asny certyfikat +- +- +- Known shares +- Znane zasoby +- +- +- Trust selected certificate +- Zaufaj wybranym certyfikatom +- +- +- Ask whether to trust the selected certificate every time +- Pytaj za każdym razem, czy chcesz ufać wybranemu certyfikatowi +- +- +- Untrust selected certificate +- PrzestaÅ„ ufać wybranemu certyfikatowi +- +- +- Remove selected certificate +- UsuÅ„ wybrany certyfikat +- +- +- +- ShareExport +- +- Overwriting signed share container is not supported - export prevented +- ZastÄ…pienie podpisanego kontenera udostÄ™pniania nie jest obsÅ‚ugiwane - eksport zostaÅ‚ zablokowany +- +- +- Could not write export container (%1) +- Nie można zapisać kontenera eksportu (%1) +- +- +- Could not embed signature: Could not open file to write (%1) +- Nie można osadzić podpisu: Nie można otworzyć pliku do zapisu (%1) +- +- +- Could not embed signature: Could not write file (%1) +- Nie można osadzić podpisu: Nie można zapisać pliku (%1) +- +- +- Could not embed database: Could not open file to write (%1) +- Nie można osadzić bazy danych: Nie można otworzyć pliku do zapisu (%1) +- +- +- Could not embed database: Could not write file (%1) +- Nie można osadzić bazy danych: Nie można zapisać pliku (%1) +- +- +- Overwriting unsigned share container is not supported - export prevented +- ZastÄ…pienie niepodpisanego kontenera udostÄ™pniania nie jest obsÅ‚ugiwane - eksport zostaÅ‚ zablokowany +- +- +- Could not write export container +- Nie można zapisać kontenera eksportu +- +- +- Unexpected export error occurred +- WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d eksportu +- +- +- +- ShareImport +- +- Import from container without signature +- Importuj z kontenera bez podpisu +- +- +- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? +- Nie możemy zweryfikować źródÅ‚a udostÄ™pnionego kontenera, ponieważ nie jest on podpisany. Czy na pewno chcesz importować dane z %1? +- +- +- Import from container with certificate +- Importuj z kontenera z certyfikatem +- +- +- Do you want to trust %1 with the fingerprint of %2 from %3? +- Czy chcesz zaufać %1 z odciskiem palca %2 z %3? {1 ?} {2 ?} +- +- +- Not this time +- Nie tym razem +- +- +- Never +- Nigdy +- +- +- Always +- Zawsze +- +- +- Just this time +- Tylko tym razem +- +- +- Signed share container are not supported - import prevented +- Podpisany kontener udostÄ™pniania nie jest obsÅ‚ugiwany - import zostaÅ‚ zablokowany +- +- +- File is not readable +- Plik nie jest czytelny +- +- +- Invalid sharing container +- NieprawidÅ‚owy kontener udostÄ™pniania +- +- +- Untrusted import prevented +- Uniemożliwiono niezaufany import +- +- +- Successful signed import +- PomyÅ›lnie podpisany import +- +- +- Unsigned share container are not supported - import prevented +- Niepodpisany kontener udostÄ™pniania nie jest obsÅ‚ugiwany - import zostaÅ‚ zablokowany +- +- +- Successful unsigned import +- PomyÅ›lnie niepodpisany import +- +- +- File does not exist +- Plik nie istnieje +- +- +- Unknown share container type +- Nieznany typ kontenera udostÄ™pniania +- +- +- +- ShareObserver +- +- Import from %1 failed (%2) +- Import z %1 zakoÅ„czyÅ‚ siÄ™ niepomyÅ›lnie (%2) +- +- +- Import from %1 successful (%2) +- Import z %1 zakoÅ„czyÅ‚ siÄ™ pomyÅ›lnie (%2) +- +- +- Imported from %1 +- Importowane z %1 +- +- +- Export to %1 failed (%2) +- Eksport do %1 zakoÅ„czyÅ‚ siÄ™ niepomyÅ›lnie (%2) +- +- +- Export to %1 successful (%2) +- Eksport do %1 zakoÅ„czyÅ‚ siÄ™ pomyÅ›lnie (%2) +- +- +- Export to %1 +- Eksportuj do %1 +- +- +- Multiple import source path to %1 in %2 +- Wiele Å›cieżek źródÅ‚owych importu do %1 w %2 +- +- +- Conflicting export target path %1 in %2 +- Sprzeczna Å›cieżka docelowa eksportu %1 w %2 +- +- +- +- TotpDialog +- +- Timed Password +- HasÅ‚o zależne od czasu +- +- +- 000000 +- 000000 +- +- +- Copy +- Skopiuj +- +- +- Expires in <b>%n</b> second(s) +- Wygasa za <b>%n</b> sekundÄ™Wygasa za <b>%n</b> sekundyWygasa za <b>%n</b> sekundWygasa za <b>%n</b> sekund +- +- +- +- TotpExportSettingsDialog +- +- Copy +- Skopiuj +- +- +- NOTE: These TOTP settings are custom and may not work with other authenticators. +- TOTP QR code dialog warning +- UWAGA: Te ustawienia TOTP sÄ… niestandardowe i mogÄ… nie dziaÅ‚ać z innymi autoryzatoram. +- +- +- There was an error creating the QR code. +- WystÄ…piÅ‚ bÅ‚Ä…d podczas tworzenia kodu QR. +- +- +- Closing in %1 seconds. +- Zamykanie za %1 sekund. +- +- +- +- TotpSetupDialog +- +- Setup TOTP +- Ustaw TOTP +- +- +- Default RFC 6238 token settings +- DomyÅ›lne ustawienia tokenu RFC 6238 +- +- +- Steam token settings +- Ustawienia tokenu Steam +- +- +- Use custom settings +- Użyj niestandardowych ustawieÅ„ +- +- +- Custom Settings +- Ustawienia niestandardowe +- +- +- Time step: +- Krok czasowy: +- +- +- sec +- Seconds +- s +- +- +- Code size: +- Rozmiar kodu: +- +- +- Secret Key: +- Klucz sekretny: +- +- +- Secret key must be in Base32 format +- Klucz sekretny musi być w formacie Base32 +- +- +- Secret key field +- Pole klucza sekretnego +- +- +- Algorithm: +- Algorytm: +- +- +- Time step field +- Pole kroku czasu +- +- +- digits +- cyfry +- +- +- Invalid TOTP Secret +- NieprawidÅ‚owy sekret TOTP +- +- +- You have entered an invalid secret key. The key must be in Base32 format. +-Example: JBSWY3DPEHPK3PXP +- Wprowadzono nieprawidÅ‚owy klucz sekretny. Klucz musi być w formacie Base32. +-PrzykÅ‚ad: JBSWY3DPEHPK3PXP +- +- +- Confirm Remove TOTP Settings +- Potwierdź usuniÄ™cie ustawieÅ„ TOTP +- +- +- Are you sure you want to delete TOTP settings for this entry? +- Czy na pewno chcesz usunąć ustawienia TOTP dla tego wpisu? +- +- +- +- URLEdit +- +- Invalid URL +- NieprawidÅ‚owy adres URL +- +- +- +- UpdateCheckDialog +- +- Checking for updates +- Sprawdzanie aktualizacji +- +- +- Checking for updates... +- Sprawdzanie aktualizacji... +- +- +- Close +- Zamknij +- +- +- Update Error! +- BÅ‚Ä…d aktualizacji! +- +- +- An error occurred in retrieving update information. +- WystÄ…piÅ‚ bÅ‚Ä…d podczas pobierania informacji o aktualizacji. +- +- +- Please try again later. +- Spróbuj ponownie później. +- +- +- Software Update +- Aktualizacja oprogramowania +- +- +- A new version of KeePassXC is available! +- Nowa wersja KeePassXC jest dostÄ™pna! +- +- +- KeePassXC %1 is now available — you have %2. +- KeePassXC %1 jest już dostÄ™pny — masz %2. +- +- +- Download it at keepassxc.org +- Pobierz to z keepassxc.org +- +- +- You're up-to-date! +- JesteÅ› aktualny! +- +- +- KeePassXC %1 is currently the newest version available +- KeePassXC %1 to obecnie najnowsza dostÄ™pna wersja +- +- +- +- WelcomeWidget +- +- Start storing your passwords securely in a KeePassXC database +- Zacznij bezpiecznie przechowywać swoje hasÅ‚a w bazie danych KeePassXC +- +- +- Create new database +- Stwórz nowÄ… bazÄ™ danych +- +- +- Open existing database +- Otwórz istniejÄ…cÄ… bazÄ™ danych +- +- +- Import from KeePass 1 +- Importuj z KeePass 1 +- +- +- Import from CSV +- Importuj z CSV +- +- +- Recent databases +- Niedawne bazy danych +- +- +- Welcome to KeePassXC %1 +- Witaj w KeePassXC %1 +- +- +- Import from 1Password +- Importuj z 1Password +- +- +- Open a recent database +- Otwórz ostatniÄ… bazÄ™ danych +- +- +- +- YubiKey +- +- %1 [%2] Configured Slot - %3 +- %1 [%2] skonfigurowane gniazdo - %3 +- +- +- %1 [%2] Challenge Response - Slot %3 - %4 +- %1 [%2] wyzwanie-odpowiedź - gniazdo %3-%4 +- +- +- Press +- NaciÅ›nij +- +- +- Passive +- Pasywny +- +- +- %1 Invalid slot specified - %2 +- %1 okreÅ›lono nieprawidÅ‚owe gniazdo - %2 +- +- +- The YubiKey interface has not been initialized. +- Interfejs YubiKey nie zostaÅ‚ zainicjowany. +- +- +- Hardware key is currently in use. +- Klucz sprzÄ™towy jest obecnie używany. +- +- +- Could not find hardware key with serial number %1. Please plug it in to continue. +- Nie można odnaleźć klucza sprzÄ™towego o numerze seryjnym %1. PodÅ‚Ä…cz go, aby kontynuować. +- +- +- Hardware key timed out waiting for user interaction. +- Przekroczono limit czasu klucza sprzÄ™towego oczekujÄ…cego na interakcjÄ™ z użytkownikiem. +- +- +- A USB error ocurred when accessing the hardware key: %1 +- Podczas uzyskiwania dostÄ™pu do klucza sprzÄ™towego wystÄ…piÅ‚ bÅ‚Ä…d USB: %1 +- +- +- Failed to complete a challenge-response, the specific error was: %1 +- Nie można ukoÅ„czyć wyzwania-odpowiedzi, konkretny bÅ‚Ä…d to: %1 +- +- +- +- YubiKeyEditWidget +- +- Refresh +- OdÅ›wież +- +- +- YubiKey Challenge-Response +- Wyzwanie-odpowiedź YubiKey +- +- +- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- <p>JeÅ›li jesteÅ› wÅ‚aÅ›cicielem <a href="https://www.yubico.com/">YubiKey</a>, możesz go użyć do zwiÄ™kszenia bezpieczeÅ„stwa.</p><p>YubiKey wymaga zaprogramowania jednego z jego gniazd jako <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">Wyzwanie-odpowiedź HMAC-SHA1</a>.</p> +- +- +- Refresh hardware tokens +- OdÅ›wież tokeny sprzÄ™towe +- +- +- Hardware key slot selection +- Wybór gniazda klucza sprzÄ™towego +- +- +- Could not find any hardware keys! +- Nie można znaleźć żadnych kluczy sprzÄ™towych! +- +- +- Selected hardware key slot does not support challenge-response! +- Wybrane gniazdo klucza sprzÄ™towego nie obsÅ‚uguje wyzwania-odpowiedzi! +- +- +- Detecting hardware keys… +- Wykrywanie kluczy sprzÄ™towych… +- +- +- No hardware keys detected +- Nie wykryto kluczy sprzÄ™towych +- +- +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_pt_BR.ts keepassxc-2.6.4-patched/share/translations/keepassx_pt_BR.ts +--- keepassxc-2.6.4-orig/share/translations/keepassx_pt_BR.ts 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/translations/keepassx_pt_BR.ts 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7891 +0,0 @@ +- +- +- AboutDialog +- +- About KeePassXC +- Sobre o KeePassXC +- +- +- About +- Sobre +- +- +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- Reporte erros em: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- +- +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- KeePassXC é distribuído sob os termos da Licença Pública Geral (GPL), versão 2 ou (à sua escolha) versão 3, do GNU. +- +- +- Contributors +- Colaboradores +- +- +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Ver Colaborações no GitHub</a> +- +- +- Debug Info +- Informações de Depuração +- +- +- Include the following information whenever you report a bug: +- Inclua as informações abaixo quando reportar um erro: +- +- +- Copy to clipboard +- Copiar para a área de transferência +- +- +- Project Maintainers: +- Mantenedores do Projeto: +- +- +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- A equipe KeePassXC agradece especialmente à debfx pela criação do KeePassX original. +- +- +- +- AgentSettingsWidget +- +- Use OpenSSH for Windows instead of Pageant +- Usar o OpenSSH para Windows em vez de Pageant +- +- +- Enable SSH Agent integration +- Habilitar integração com agente SSH +- +- +- SSH_AUTH_SOCK value +- Valor de SSH_AUTH_SOCK +- +- +- SSH_AUTH_SOCK override +- Sobrescrever SSH_AUTH_SOCK +- +- +- (empty) +- (vazio) +- +- +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- Nenhum socket de agente SSH disponível. Verifique se uma variável de ambiente SSH_AUTH_SOCK existe ou configure um substituto. +- +- +- SSH Agent connection is working! +- A conexão com o agente SSH está funcionando corretamente! +- +- +- +- ApplicationSettingsWidget +- +- Application Settings +- Configurações do Aplicativo +- +- +- General +- Geral +- +- +- Security +- Segurança +- +- +- Access error for config file %1 +- Erro de acesso para o arquivo de configuração %1 +- +- +- Icon only +- Apenas ícones +- +- +- Text only +- Apenas texto +- +- +- Text beside icon +- Texto ao lado do ícone +- +- +- Text under icon +- Texto abaixo do ícone +- +- +- Follow style +- Seguir o estilo +- +- +- Reset Settings? +- Restaurar Configurações? +- +- +- Are you sure you want to reset all general and security settings to default? +- Você tem certeza que deseja restaurar todas as configurações gerais e de segurança para o padrão? +- +- +- Monochrome (light) +- Monocromático (claro) +- +- +- Monochrome (dark) +- Monocromático (escuro) +- +- +- Colorful +- Colorido +- +- +- You must restart the application to set the new language. Would you like to restart now? +- +- +- +- +- ApplicationSettingsWidgetGeneral +- +- Basic Settings +- Configurações Básicas +- +- +- Startup +- Inicialização +- +- +- Start only a single instance of KeePassXC +- Iniciar apenas uma instância do KeePassXC +- +- +- Minimize window at application startup +- Iniciar programa com janela minimizada +- +- +- File Management +- Gerenciamento de Arquivo +- +- +- Backup database file before saving +- Fazer cópia de segurança do banco de dados antes de salvar +- +- +- Automatically save after every change +- Salvar automaticamente depois de cada alteração +- +- +- Automatically reload the database when modified externally +- Automaticamente recarregar o banco de dados quando houver modificações externas +- +- +- Entry Management +- Gerenciamento de entrada +- +- +- Use group icon on entry creation +- Usar ícone de grupo na criação da entrada +- +- +- Minimize instead of app exit +- Minimizar em vez de sair do aplicativo +- +- +- Show a system tray icon +- Mostrar um ícone na bandeja do sistema +- +- +- Hide window to system tray when minimized +- Ocultar janela na bandeja de sistema quando minimizada +- +- +- Auto-Type +- Autodigitação +- +- +- Use entry title to match windows for global Auto-Type +- Usar o título de entrada para coincidir com a janela para Auto-Digitar global +- +- +- Use entry URL to match windows for global Auto-Type +- Use o URL de entrada para coincidir com a janela para Auto-Digitar global +- +- +- Always ask before performing Auto-Type +- Sempre perguntar antes de executar o Auto-Digitar +- +- +- ms +- Milliseconds +- ms +- +- +- Movable toolbar +- Barra de Ferramentas Móvel +- +- +- Remember previously used databases +- Lembrar dos bancos de dados usados anteriormente +- +- +- Load previously open databases on startup +- Carregar bancos de dados previamente abertos na inicialização +- +- +- Remember database key files and security dongles +- Lembrar do arquivo-chave e dongles de segurança do banco de dados +- +- +- Check for updates at application startup once per week +- Verificar por atualizações na inicialização do aplicativo uma vez por semana +- +- +- Include beta releases when checking for updates +- Incluir versões betas durante a verificação de atualizações +- +- +- Language: +- Idioma: +- +- +- (restart program to activate) +- (reiniciar programa para ativar) +- +- +- Minimize window after unlocking database +- Minimizar a janela após destravar banco de dados +- +- +- Minimize when opening a URL +- Minimizar quando abrir uma URL +- +- +- Hide window when copying to clipboard +- Ocultar a janela quando copiar para área de transferência +- +- +- Minimize +- Minimizar +- +- +- Drop to background +- Enviar para trás +- +- +- Favicon download timeout: +- Tempo limite de download Favicon: +- +- +- Website icon download timeout in seconds +- Esgotamento de tempo do download de ícone do website em segundos +- +- +- sec +- Seconds +- seg +- +- +- Toolbar button style +- Estilo de botão da barra de ferramentas +- +- +- Language selection +- Seleção de idioma +- +- +- Global auto-type shortcut +- Atalho para Auto-Digitar global +- +- +- Auto-type character typing delay milliseconds +- Digitação de caracteres com Auto-Digitar com atraso de milissegundos +- +- +- Auto-type start delay milliseconds +- Auto-Digitar inicia com atraso de milissegundos +- +- +- Automatically launch KeePassXC at system startup +- Iniciar KeePassXC automaticamente com a inicialização do sistema +- +- +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- Salvar os arquivos de banco de dados com segurança (desative se tiver problemas com o Dropbox, etc) +- +- +- User Interface +- Interface do Usuário +- +- +- Toolbar button style: +- Estilo de botão da barra de ferramentas: +- +- +- Use monospaced font for notes +- Usar fonte monoespaçada para notas +- +- +- Tray icon type: +- Tipo de ícone da área de notificação: +- +- +- Reset settings to default… +- Reverter às configurações originais... +- +- +- Auto-Type typing delay: +- Atraso para digitação automática: +- +- +- Global Auto-Type shortcut: +- Atalho para Auto-Digitação global: +- +- +- Auto-Type start delay: +- Atraso para início de digitação automática: +- +- +- Automatically save when locking database +- +- +- +- Automatically save non-data changes when locking database +- +- +- +- Tray icon type +- +- +- +- +- ApplicationSettingsWidgetSecurity +- +- Timeouts +- Tempos limite +- +- +- Clear clipboard after +- Limpar área de transferência após +- +- +- sec +- Seconds +- seg +- +- +- Lock databases after inactivity of +- Travar bancos de dados após inatividade de +- +- +- min +- min +- +- +- Forget TouchID after inactivity of +- Esqueça o TouchID após inatividade de +- +- +- Convenience +- Conveniência +- +- +- Lock databases when session is locked or lid is closed +- Bloqueio de bancos de dados quando a sessão estiver bloqueada ou a tampa está fechada +- +- +- Forget TouchID when session is locked or lid is closed +- Esqueça o TouchID quando a sessão está bloqueada ou a tampa está fechada +- +- +- Lock databases after minimizing the window +- Bloquear bancos de dados após minimizar a janela +- +- +- Re-lock previously locked database after performing Auto-Type +- Bloquear novamente o banco de dados anteriormente bloqueado depois de executar o Auto-Digitar +- +- +- Hide passwords in the entry preview panel +- Ocultar senhas no painel da prévia de entrada +- +- +- Hide entry notes by default +- Esconder notas de entrada por padrão +- +- +- Privacy +- Privacidade +- +- +- Use DuckDuckGo service to download website icons +- Usar o serviço DuckDuckGo para baixar ícones de websites +- +- +- Clipboard clear seconds +- Limpeza da área de transferência em segundos +- +- +- Touch ID inactivity reset +- Redefinição de inatividade do Touch ID +- +- +- Database lock timeout seconds +- Tempo limite em segundos para trancar o banco de dados +- +- +- min +- Minutes +- min +- +- +- Clear search query after +- Limpar pesquisa depois de +- +- +- Require password repeat when it is visible +- Requisitar repetição da senha quando visível +- +- +- Hide passwords when editing them +- Ocultar senhas ao editá-las +- +- +- Use placeholder for empty password fields +- Utilizar espaço reservado para campos de senha vazios +- +- +- +- AutoType +- +- Couldn't find an entry that matches the window title: +- Não foi possível localizar uma entrada que corresponda ao título da janela: +- +- +- Auto-Type - KeePassXC +- Auto-Digitação - KeePassXC +- +- +- Auto-Type +- Auto-Digitação +- +- +- The Syntax of your Auto-Type statement is incorrect! +- A sintaxe da sua sequência de Auto-Digitação está incorreta! +- +- +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- Este comando de Auto-Digitação contém um tempo de espera muito longo. Você tem certeza que deseja continuar? +- +- +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- Este comando Autotipo contém pressionamentos de teclas muito lentos. Você realmente deseja prosseguir? +- +- +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- Este comando Auto-Type contém os argumentos que são repetidos muitas vezes. Você realmente deseja prosseguir? +- +- +- Permission Required +- Permissão Requerida +- +- +- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC requer a permissão de Acessibilidade para realizar Auto-Digitar no nível de entrada. Se você já garantiu as permissões, você deve reiniciar o KeePassXC. +- +- +- +- AutoTypeAssociationsModel +- +- Window +- Janela +- +- +- Sequence +- Sequência +- +- +- Default sequence +- Sequência pré-definida +- +- +- +- AutoTypeMatchModel +- +- Group +- Grupo +- +- +- Title +- Título +- +- +- Username +- Nome de usuário +- +- +- Sequence +- Sequência +- +- +- +- AutoTypeMatchView +- +- Copy &username +- Copiar n&ome de usuário +- +- +- Copy &password +- Copiar &senha +- +- +- +- AutoTypePlatformMac +- +- Permission Required +- Permissão Requerida +- +- +- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC requer as permissões de Acessibilidade e de Gravação de Tela para realizar o Auto-Digitar global. Gravação de Tela é necessário para usar o título da janela e encontrar as entradas. Se você já garantiu as permissões, você deve reiniciar o KeePassXC. +- +- +- +- AutoTypeSelectDialog +- +- Auto-Type - KeePassXC +- Auto-Digitação - KeePassXC +- +- +- Select entry to Auto-Type: +- Escolha uma entrada para Auto-Digitar: +- +- +- Search... +- Buscar... +- +- +- +- BrowserAccessControlDialog +- +- KeePassXC - Browser Access Request +- KeePassXC - Requisição de Acesso ao Browser +- +- +- %1 is requesting access to the following entries: +- %1 está requisitando acesso aos seguintes itens: +- +- +- Remember access to checked entries +- Lembrar acesso aos itens marcados +- +- +- Remember +- Lembrar +- +- +- Allow access to entries +- Permitir acesso aos itens +- +- +- Allow Selected +- Permitir Selecionados +- +- +- Deny All +- Negar Todos +- +- +- Disable for this site +- Desabilitar para este site +- +- +- +- BrowserEntrySaveDialog +- +- KeePassXC-Browser Save Entry +- KeePassXC-Browser Salvar Entrada +- +- +- Ok +- Ok +- +- +- Cancel +- Cancelar +- +- +- You have multiple databases open. +-Please select the correct database for saving credentials. +- Você tem vários bancos de dados abertos. +-Por favor, selecione o banco de dados correto para salvar as credenciais. +- +- +- +- BrowserService +- +- KeePassXC: New key association request +- KeePassXC: Nova associação de chaves requisitada +- +- +- Save and allow access +- Salvar e permitir acesso +- +- +- KeePassXC: Overwrite existing key? +- KeePassXC: Substituir chave existente? +- +- +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- Uma chave de criptografia compartilhada com o nome "% 1" já existe. +-Você deseja sobrescreve-la? +- +- +- KeePassXC: Update Entry +- KeePassXC: Atualizar entrada +- +- +- Do you want to update the information in %1 - %2? +- Deseja atualizar as informações em %1 - %2? +- +- +- Abort +- Cancelar +- +- +- Converting attributes to custom data… +- Convertendo atributos para dados personalizados... +- +- +- KeePassXC: Converted KeePassHTTP attributes +- KeePassXC: Convertido KeePassHTTP atributos +- +- +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- Atributos convertidos com sucesso de %1 entrada(s). +-Movido %2 chaves para dados personalizados. +- +- +- Successfully moved %n keys to custom data. +- Movido com sucesso %n chaves para dados personalizados.Movido com sucesso %n chaves para dados personalizados. +- +- +- KeePassXC: No entry with KeePassHTTP attributes found! +- KeePassXC: Nenhuma entrada com os atributos KeePassHTTP encontrados! +- +- +- The active database does not contain an entry with KeePassHTTP attributes. +- O banco de dados ativo não contém uma entrada com atributos KeePassHTTP. +- +- +- KeePassXC: Legacy browser integration settings detected +- KeePassXC: Configurações de integração do navegador herdado detectadas +- +- +- KeePassXC: Create a new group +- KeePassXC: Crie um novo grupo +- +- +- A request for creating a new group "%1" has been received. +-Do you want to create this group? +- +- Um pedido para criar um novo grupo "%1" foi recebido. +-Você quer criar este grupo? +- +- +- +- Your KeePassXC-Browser settings need to be moved into the database settings. +-This is necessary to maintain your current browser connections. +-Would you like to migrate your existing settings now? +- As configurações do seu navegador KeePassXC precisam ser movidas para as configurações do banco de dados. +-Isso é necessário para manter as conexões atuais do navegador. +-Gostaria de migrar suas configurações existentes agora? +- +- +- Don't show this warning again +- Não mostrar este alerta novamente +- +- +- You have received an association request for the following database: +-%1 +- +-Give the connection a unique name or ID, for example: +-chrome-laptop. +- Você recebeu um pedido de associação para o seguinte banco de dados: +-%1 +- +-Dê à conexão um nome único ou um ID, por exemplo: +-chrome-laptop +- +- +- +- BrowserSettingsWidget +- +- Dialog +- Diálogo +- +- +- This is required for accessing your databases with KeePassXC-Browser +- Isso é necessário para acessar os seus bancos de dados usando o KeePassXC-Browser +- +- +- Enable browser integration +- Habilitar integração com navegadores +- +- +- General +- Geral +- +- +- Browsers installed as snaps are currently not supported. +- Navegadores instalados como snaps atualmente não são suportados. +- +- +- Enable integration for these browsers: +- Habilitar integração para estes navegadores: +- +- +- Vivaldi +- Vivaldi +- +- +- &Edge +- &Edge +- +- +- Firefox +- Firefox +- +- +- Tor Browser +- Tor Browser +- +- +- Brave +- Brave +- +- +- Google Chrome +- Google Chrome +- +- +- Chromium +- Chromium +- +- +- Show a notification when credentials are requested +- Credentials mean login data requested via browser extension +- Exibir uma notificação quando as credenciais forem solicitadas +- +- +- Request to unlock the database if it is locked +- Solicitar para destrancar o banco de dados se estiver bloqueado +- +- +- Only entries with the same scheme (http://, https://, ...) are returned. +- Apenas entradas com o mesmo esquema (http://, https://,...) são retornados. +- +- +- Match URL scheme (e.g., https://...) +- Combinar com esquema de URL (por exemplo, https://...) +- +- +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- Retorna apenas as melhores correspondências para um URL específico em vez de todas entradas para todo o domínio. +- +- +- Return only best-matching credentials +- Retornar apenas as credenciais com melhor correspondência +- +- +- Returns expired credentials. String [expired] is added to the title. +- Retornou credenciais expiradas. [expired] foi adicionado ao título. +- +- +- Allow returning expired credentials +- Permitir retorno de credenciais expiradas +- +- +- All databases connected to the extension will return matching credentials. +- Todos os bancos de dados conectados a extensão irão retornar as credenciais correspondentes. +- +- +- Search in all opened databases for matching credentials +- Credentials mean login data requested via browser extension +- Pesquisar em todas as bases de dados por credenciais correspondentes +- +- +- Sort matching credentials by title +- Credentials mean login data requested via browser extension +- Ordenar credenciais correspondentes por título +- +- +- Sort matching credentials by username +- Credentials mean login data requested via browser extension +- Ordenar credenciais correspondentes por nome de usuário +- +- +- Advanced +- Avançado +- +- +- Never ask before accessing credentials +- Credentials mean login data requested via browser extension +- Nunca pedir confirmação antes de acessar as credenciais +- +- +- Never ask before updating credentials +- Credentials mean login data requested via browser extension +- Nunca pedir confirmação antes de atualizar as credenciais +- +- +- Do not ask permission for HTTP Basic Auth +- An extra HTTP Basic Auth setting +- Não pedir permissão para HTTP Basic Auth +- +- +- Automatically creating or updating string fields is not supported. +- Criação automática ou atualizações não são suportadas para os valores dos campos. +- +- +- Return advanced string fields which start with "KPH: " +- Mostrar campos avançados que começam com "KPH: " +- +- +- Don't display the popup suggesting migration of legacy KeePassHTTP settings. +- Não mostrar o popup sugerindo migração das configurações do KeePassHTTP legado. +- +- +- Do not prompt for KeePassHTTP settings migration. +- Não alertar sobre a migração das configurações do KeePassHTTP. +- +- +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- Atualiza os caminhos dos binários do KeePassXC ou keepassxc-proxy automaticamente para o envio de mensagens de scripts nativo na inicialização. +- +- +- Update native messaging manifest files at startup +- Atualizar arquivos de manifesto de mensagens nativas na inicialização +- +- +- Use a custom proxy location if you installed a proxy manually. +- Usar um local de proxy personalizado se você instalou um proxy manualmente. +- +- +- Use a custom proxy location: +- Meant is the proxy for KeePassXC-Browser +- Utilizar endereço de proxy customizado: +- +- +- Custom proxy location field +- Campo de localização proxy personalizado +- +- +- Browser for custom proxy file +- Procurar por arquivo proxy personalizado +- +- +- Browse... +- Button for opening file dialog +- Procurar... +- +- +- Use a custom browser configuration location: +- Utilizar localização de configuração de navegador customizada: +- +- +- Browser type: +- Tipo de navegador: +- +- +- Toolbar button style +- Estilo de botão da barra de ferramentas +- +- +- Config Location: +- Localização da configuração: +- +- +- Custom browser location field +- Campo de localização de navegador personalizado +- +- +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- +- +- Browse for custom browser path +- Navegar para caminho de navegador personalizado +- +- +- Custom extension ID: +- ID de extensão personalizado: +- +- +- Custom extension ID +- ID de extensão personalizado: +- +- +- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 +- Devido ao sandbox do Snap, você deve executar um script para ativar a integração do navegador.<br />Você pode obter este script de %1 +- +- +- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 +- O KeePassXC-Browser é necessário para que a integração com navegador funcione. Faça o download para %1, %2 e %3. %4 +- +- +- Please see special instructions for browser extension use below +- Por favor, veja as instruções especiais para o uso da extensão do navegador abaixo +- +- +- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. +- <b>Erro:</b> O endereço de proxy personalizado não foi encontrado!<br/>A integração com o navegador NÃO IRà funcionar sem a aplicação de proxy. +- +- +- <b>Warning:</b> The following options can be dangerous! +- <b>AVISO:</b> As seguintes opções podem ser perigosas! +- +- +- Executable Files +- Arquivos Executáveis +- +- +- All Files +- Todos os arquivos +- +- +- Select custom proxy location +- Selecione localização para o proxy +- +- +- Select native messaging host folder location +- Selecione o local da pasta de host de mensagens nativas +- +- +- +- CloneDialog +- +- Clone Options +- Opções de Clonagem +- +- +- Append ' - Clone' to title +- Anexar '-Clonar' ao título +- +- +- Replace username and password with references +- Substituir o usuário e senha com referências +- +- +- Copy history +- Copiar histórico +- +- +- +- CsvImportWidget +- +- Import CSV fields +- Importar campos CSV +- +- +- filename +- nome do arquivo +- +- +- size, rows, columns +- tamanho, linhas, colunas +- +- +- Encoding +- Codificação +- +- +- Codec +- Codec +- +- +- Text is qualified by +- Texto é qualificado por +- +- +- Fields are separated by +- Campos são separados por +- +- +- Comments start with +- Comentários começam com +- +- +- Consider '\' an escape character +- Considere '\' como caractere de escape +- +- +- Preview +- Visualização +- +- +- Imported from CSV file +- Importado do arquivo CSV +- +- +- Original data: +- Dados originais: +- +- +- Error +- Erro +- +- +- Error(s) detected in CSV file! +- Erro(s) detectado(s) no arquivo CSV! +- +- +- [%n more message(s) skipped] +- [%n mais mensagem(ns) ignoradas][%n mais mensagem(ns) ignoradas] +- +- +- CSV import: writer has errors: +-%1 +- Importação de CSV: o gravador tem erros: +-%1 +- +- +- Text qualification +- Qualificação textual +- +- +- Field separation +- Separação de campos +- +- +- Number of header lines to discard +- Número de linhas do cabeçalho para descartar +- +- +- CSV import preview +- Prever importação de CSV +- +- +- Column Association +- Associação de Coluna +- +- +- Last Modified +- Última modificação +- +- +- Password +- Senha +- +- +- Created +- Criado +- +- +- Notes +- Notas +- +- +- Title +- Título +- +- +- Group +- Grupo +- +- +- URL +- URL +- +- +- Username +- Nome de usuário +- +- +- Header lines skipped +- Linhas do cabeçalho ignoradas +- +- +- First line has field names +- Primeira linha possui nomes dos campos +- +- +- Not Present +- Não Presente +- +- +- Column %1 +- Coluna %1 +- +- +- TOTP +- TOTP +- +- +- Icon +- Ãcone +- +- +- +- CsvParserModel +- +- %n column(s) +- %n coluna(s)%n coluna(s) +- +- +- %1, %2, %3 +- file info: bytes, rows, columns +- %1, %2, %3 +- +- +- %n byte(s) +- %n byte%n bytes +- +- +- %n row(s) +- %n linha%n linhas +- +- +- +- Database +- +- File %1 does not exist. +- Arquivo %1 não existe. +- +- +- Unable to open file %1. +- Não é possível abrir o arquivo %1. +- +- +- Error while reading the database: %1 +- Erro ao ler o banco de dados: %1 +- +- +- File cannot be written as it is opened in read-only mode. +- O arquivo não pode ser gravado, pois é aberto no modo somente leitura. +- +- +- Key not transformed. This is a bug, please report it to the developers! +- Chave não transformada. Este é um bug, por favor denuncie para os desenvolvedores! +- +- +- %1 +-Backup database located at %2 +- %1 +-Backup do banco de dados alocado em %2 +- +- +- Could not save, database does not point to a valid file. +- Não foi possível salvar. Banco de dados não aponta para um arquivo válido. +- +- +- Could not save, database file is read-only. +- Não foi possível salvar. Banco de dados é somente leitura. +- +- +- Database file has unmerged changes. +- O arquivo de banco de dados separou as mudanças. +- +- +- Recycle Bin +- Lixeira +- +- +- Passwords +- Root group name +- Senhas +- +- +- Database save is already in progress. +- Salvamento do banco de dados já está em andamento. +- +- +- Could not save, database has not been initialized! +- Não foi possível salvar, o banco de dados não foi inicializado! +- +- +- +- DatabaseOpenDialog +- +- Unlock Database - KeePassXC +- Desbloquear Banco de Dados - KeePassXC +- +- +- +- DatabaseOpenWidget +- +- Key File: +- Arquivo-Chave: +- +- +- Refresh +- Atualizar +- +- +- Don't show this warning again +- Não mostrar este alerta novamente +- +- +- All files +- Todos arquivos +- +- +- Key files +- Arquivos-chave +- +- +- Select key file +- Escolha o arquivo-chave +- +- +- Failed to open key file: %1 +- Falha ao abrir o arquivo-chave: %1 +- +- +- Unlock KeePassXC Database +- Destrancar banco de dados do KeePassXC +- +- +- Enter Password: +- Digite a senha: +- +- +- Password field +- Campo de senha +- +- +- Hardware key slot selection +- Seleção de campo de chave de hardware +- +- +- Browse for key file +- Procurar por arquivo-chave +- +- +- Browse... +- Procurar... +- +- +- Refresh hardware tokens +- Atualizar os tokens de hardware +- +- +- Hardware Key: +- Chave de hardware: +- +- +- Hardware key help +- Ajuda da chave física +- +- +- TouchID for Quick Unlock +- TouchID para destrancar rapidamente +- +- +- Unlock failed and no password given +- Destrancar falhou e nenhuma senha foi digitada +- +- +- Unlocking the database failed and you did not enter a password. +-Do you want to retry with an "empty" password instead? +- +-To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. +- Falha ao destrancar banco de dados e você não digitou uma senha. +-Você quer tentar com uma senha "vazia"? +- +-Para impedir que esses erros apareçam, você deve ir em "Configurações do banco de dados / Segurança" e resetar sua senha. +- +- +- Retry with empty password +- Tentar novamente com senha vazia +- +- +- Enter Additional Credentials (if any): +- Entre com as credenciais adicionais (se tiver alguma): +- +- +- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +-<p>Click for more information...</p> +- <p>Você pode usar uma chave de segurança em hardware, como um <strong>YubiKey</strong> ou <strong>OnlyKey</strong> com campos configurados para HMAC-SHA1</p> +-<p>Clique para maiores informações...</p> +- +- +- Key file help +- Ajuda do arquivo-chave +- +- +- ? +- ? +- +- +- Cannot use database file as key file +- Não use arquivos de banco de dados (*.kdbx) como arquivo-chave +- +- +- You cannot use your database file as a key file. +-If you do not have a key file, please leave the field empty. +- Você não pode usar seu arquivo de banco de dados como arquivo-chave. +-Se você não tem um arquivo-chave, por favor deixe o campo vazio. +- +- +- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> +- <p>Em adição à sua senha, você pode usar um arquivo secreto para aumentar a segurança de seu banco de dados. Este arquivo pode ser gerado em suas configurações de segurança do banco de dados.</p><p>Este <strong>não</strong> é seu arquivo de banco de dados *.kdbx!<br>Se você não tem um arquivo-chave, deixe o campo em branco.</p><p>Clique para maiores informações...</p> +- +- +- Key file to unlock the database +- Arquivo-chave para desbloquear banco de dados +- +- +- Please touch the button on your YubiKey! +- Por favor pressione o botão em seu YubiKey! +- +- +- Detecting hardware keys… +- Detectando chaves físicas... +- +- +- No hardware keys detected +- Nenhuma chave física detectada +- +- +- Select hardware key… +- Selecionar chave física... +- +- +- Old key file format +- +- +- +- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> +- +- +- +- +- DatabaseSettingWidgetMetaData +- +- Passwords +- Senhas +- +- +- +- DatabaseSettingsDialog +- +- Advanced Settings +- Definições avançadas +- +- +- General +- Geral +- +- +- Security +- Segurança +- +- +- Encryption Settings +- Definições de cifra +- +- +- Browser Integration +- Integração com o Navegador +- +- +- Database Credentials +- Credenciais do Banco de Dados +- +- +- +- DatabaseSettingsWidgetBrowser +- +- KeePassXC-Browser settings +- Configurações do KeePassXC-Browser +- +- +- Stored keys +- Chaves guardadas +- +- +- Remove +- Remover +- +- +- Delete the selected key? +- Apagar chave selecionada? +- +- +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- Você realmente deseja excluir a chave selecionada? +-Isso pode impedir a conexão com o plugin do navegador. +- +- +- Key +- Chave +- +- +- Value +- Valor +- +- +- Enable Browser Integration to access these settings. +- Ative a integração do navegador para acessar essas configurações. +- +- +- Disconnect all browsers +- Desconectar todos os navegadores +- +- +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- Você realmente deseja desconectar todos os navegadores? +-Isso pode impedir a conexão com o plugin do navegador. +- +- +- KeePassXC: No keys found +- KeePassXC: Nenhuma chave localizada +- +- +- No shared encryption keys found in KeePassXC settings. +- Nenhuma chave de criptografia compartilhada encontrada nas configurações do KeePassXC. +- +- +- KeePassXC: Removed keys from database +- KeePassXC: Chaves removidas do banco de dados +- +- +- Successfully removed %n encryption key(s) from KeePassXC settings. +- Removido com sucesso% n chave (s) criptográficas das configurações do KeePassXC.Removido com sucesso% n chave (s) criptográficas das configurações do KeePassXC. +- +- +- Forget all site-specific settings on entries +- Esqueça todas as configurações específicas do site nas entradas +- +- +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- Você realmente quer esquecer todas as configurações específicas do site em cada entrada? +-Permissões para acessar entradas serão revogadas. +- +- +- Removing stored permissions… +- Removendo permissões armazenadas... +- +- +- Abort +- Cancelar +- +- +- KeePassXC: Removed permissions +- KeePassXC: Permissões removidas +- +- +- Successfully removed permissions from %n entry(s). +- Permissões removidas com sucesso de %n entrada(s).Permissões removidas com sucesso de %n entrada(s). +- +- +- KeePassXC: No entry with permissions found! +- KeePassXC: Nenhuma entrada com permissões localizada! +- +- +- The active database does not contain an entry with permissions. +- O banco de dados ativo não contém uma entrada com permissões. +- +- +- Move KeePassHTTP attributes to custom data +- Mover atributos KeePassHTTP para dados personalizados +- +- +- Do you really want to move all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- Você realmente deseja mover todos os dados de integração do navegador herdados para o padrão mais recente? +-Isso é necessário para manter a compatibilidade com o plugin do navegador. +- +- +- Stored browser keys +- Chaves do navegador armazenadas +- +- +- Remove selected key +- Remover chave selecionada +- +- +- Move KeePassHTTP attributes to KeePassXC-Browser custom data +- Mover os atributos do KeePassHTTP para os dados personalizados do KeePassXC-Browser +- +- +- Refresh database root group ID +- Atualizar ID do grupo raiz do banco de dados +- +- +- Created +- Criado +- +- +- Refresh database ID +- Atualizar ID da banco de dados +- +- +- Do you really want refresh the database ID? +-This is only necessary if your database is a copy of another and the browser extension cannot connect. +- Você deseja realmente atualizar o ID do banco de dados? +-Isto somente é necessário se o seu banco de dados é uma cópia de outro e a extensão do navegador não puder conectar. +- +- +- +- DatabaseSettingsWidgetDatabaseKey +- +- Add additional protection... +- Adicionar proteção adicional... +- +- +- No password set +- Nenhuma senha definida +- +- +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- AVISO! Você não definiu uma senha. Usar um banco de dados sem uma senha é altamente desencorajado! +- +-Tem certeza de que deseja continuar sem uma senha? +- +- +- Continue without password +- Continuar sem senha +- +- +- No encryption key added +- Chave de criptografia não adicionada +- +- +- You must add at least one encryption key to secure your database! +- Você deve adicionar pelo menos uma chave de criptografia para proteger seu banco de dados! +- +- +- Unknown error +- Erro desconhecido +- +- +- Failed to change database credentials +- Falha ao alterar credenciais do banco de dados +- +- +- +- DatabaseSettingsWidgetEncryption +- +- Encryption Algorithm: +- Algoritmo de Encriptação: +- +- +- AES: 256 Bit (default) +- AES: 256 Bit (padrão) +- +- +- Twofish: 256 Bit +- Twofish: 256 Bit +- +- +- Key Derivation Function: +- Função de Derivação de Chave: +- +- +- Transform rounds: +- Rodadas de transformação: +- +- +- Memory Usage: +- Uso de Memória: +- +- +- Parallelism: +- Paralelismo: +- +- +- Decryption Time: +- Hora da descriptografia: +- +- +- ?? s +- ?? s +- +- +- Change +- Alterar +- +- +- Higher values offer more protection, but opening the database will take longer. +- Valores mais altos oferecem mais proteção, mas a abertura do banco de dados levará mais tempo. +- +- +- Database format: +- Formato de banco de dados: +- +- +- This is only important if you need to use your database with other programs. +- Isso só é importante se você precisar usar seu banco de dados com outros programas. +- +- +- KDBX 4.0 (recommended) +- KDBX 4.0 (recomendado) +- +- +- KDBX 3.1 +- KDBX 3.1 +- +- +- unchanged +- Database decryption time is unchanged +- inalterado +- +- +- Number of rounds too high +- Key transformation rounds +- Número de voltas muito alto +- +- +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or days (or even longer) to open! +- Você está usando um número muito elevado de transformação chave rodadas com Argon2. +- +-Se você mantiver este número, seu banco de dados pode levar horas ou dias (ou até mais) para abrir! +- +- +- Understood, keep number +- Entendido, manter o número +- +- +- Cancel +- Cancelar +- +- +- Number of rounds too low +- Key transformation rounds +- Número de voltas muito baixo +- +- +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database may be too easy to crack! +- Você está usando um número muito baixo de transformação chave rodadas com KDF-AES. +- +-Se você manter este número, seu banco de dados pode ser facilmente crackeado! +- +- +- KDF unchanged +- KDF não modificado +- +- +- Failed to transform key with new KDF parameters; KDF unchanged. +- Não foi possível transformar a chave com novos parâmetros KDF; KDF inalterado. +- +- +- MiB +- Abbreviation for Mebibytes (KDF settings) +- MiB MiB +- +- +- thread(s) +- Threads for parallel execution (KDF settings) +- processo(s)processo(s) +- +- +- Change existing decryption time +- Mudar tempo de descriptografia +- +- +- Decryption time in seconds +- Tempo de descriptografia em segundos +- +- +- Database format +- Formato do banco de dados +- +- +- Encryption algorithm +- Algorítimo de criptografia +- +- +- Key derivation function +- Função de derivação da chave +- +- +- Transform rounds +- Rodadas de transformação +- +- +- Memory usage +- Uso de memória +- +- +- Parallelism +- Paralelismo +- +- +- ?? ms +- ?? ms +- +- +- ? s +- ? s +- +- +- +- DatabaseSettingsWidgetFdoSecrets +- +- Exposed Entries +- Entradas Expostas +- +- +- Don't expose this database +- Não exibir este banco de dados +- +- +- Expose entries under this group: +- Exibir entradas deste grupo: +- +- +- Enable Secret Service to access these settings. +- Habilitar Serviço Secreto para acessar estas configurações. +- +- +- +- DatabaseSettingsWidgetGeneral +- +- Database Meta Data +- Metadados do Banco de Dados +- +- +- Database name: +- Nome do banco de dados: +- +- +- Database description: +- Descrição do banco de dados: +- +- +- Default username: +- Usuário padrão: +- +- +- History Settings +- Configurações de Histórico +- +- +- Max. history items: +- Máx. itens no histórico: +- +- +- Max. history size: +- Tamanho máx. do histórico: +- +- +- MiB +- MB +- +- +- Use recycle bin +- Usar lixeira +- +- +- Additional Database Settings +- Configurações do Banco de Dados +- +- +- Database name field +- Nome do campo do banco de dados +- +- +- Database description field +- Campo de descrição do banco de dados +- +- +- Default username field +- Campo de usuário padrão +- +- +- Maximum number of history items per entry +- Número máximo de histórico dos itens por entrada +- +- +- Maximum size of history per entry +- Número máximo de histórico dos itens por entrada +- +- +- Delete Recycle Bin +- Esvaziar Lixeira +- +- +- Do you want to delete the current recycle bin and all its contents? +-This action is not reversible. +- Você quer deletar a lixeira atual e todo o conteúdo dela? +-Esta ação não é reversível. +- +- +- (old) +- (antigo) +- +- +- Enable compression (recommended) +- Ativar compressão (recomendado) +- +- +- +- DatabaseSettingsWidgetKeeShare +- +- Sharing +- Compartilhando +- +- +- Breadcrumb +- Breadcrumb +- +- +- Type +- Tipo +- +- +- Path +- Caminho +- +- +- Last Signer +- Último Signatário +- +- +- Certificates +- Certificados +- +- +- > +- Breadcrumb separator +- > +- +- +- +- DatabaseSettingsWidgetMetaDataSimple +- +- Database Name: +- Nome do banco de dados: +- +- +- Description: +- Descrição: +- +- +- Database name field +- Nome do campo do banco de dados +- +- +- Database description field +- Campo de descrição do banco de dados +- +- +- +- DatabaseTabWidget +- +- KeePass 2 Database +- Banco de dados Keepass 2 +- +- +- All files +- Todos arquivos +- +- +- Open database +- Abrir banco de dados +- +- +- CSV file +- Arquivo CSV +- +- +- Merge database +- Juntar banco de dados +- +- +- Open KeePass 1 database +- Abrir banco de dados KeePass 1 +- +- +- KeePass 1 database +- Banco de dados KeePass 1 +- +- +- Export database to CSV file +- Exportar banco de dados para arquivo CSV +- +- +- Writing the CSV file failed. +- Falha ao gravar arquivo CSV. +- +- +- Database creation error +- Erro ao criar o banco de dados +- +- +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- O banco de dados criado não possui chave ou KDF, recusando-se a salvá-lo. +-Este é definitivamente um bug, por favor denuncie para os desenvolvedores. +- +- +- Select CSV file +- Selecionar arquivo CSV +- +- +- New Database +- Novo Banco de Dados +- +- +- %1 [New Database] +- Database tab name modifier +- %1 [Novo banco de dados] +- +- +- %1 [Locked] +- Database tab name modifier +- %1 [Bloqueada] +- +- +- %1 [Read-only] +- Database tab name modifier +- %1 [Apenas leitura] +- +- +- Failed to open %1. It either does not exist or is not accessible. +- Falha ao abrir %1. Está inacessível ou não existe. +- +- +- Export database to HTML file +- Exportar banco de dados como arquivo &HTML +- +- +- HTML file +- Arquivo HTML +- +- +- Writing the HTML file failed. +- Falha ao escrever no arquivo HTML +- +- +- Export Confirmation +- Confirmação da Exportação +- +- +- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? +- Você está prestes a exportar o seu banco de dados para um arquivo não criptografado. Isso vai deixar suas senhas e informações confidenciais vulneráveis! Você tem certeza que quer continuar? +- +- +- Open OPVault +- Abrir o OPVault +- +- +- +- DatabaseWidget +- +- Searching... +- Pesquisando... +- +- +- Do you really want to delete the entry "%1" for good? +- Você realmente quer apagar a entrada "%1" para sempre? +- +- +- Do you really want to move entry "%1" to the recycle bin? +- Pretende realmente mover a entrada "%1" para a lixeira? +- +- +- Do you really want to move %n entry(s) to the recycle bin? +- Você quer realmente mudar %n entradas para a lixeira?Você deseja realmente mover %n entrada(s) para a lixeira? +- +- +- Execute command? +- Executar comando? +- +- +- Do you really want to execute the following command?<br><br>%1<br> +- Você quer realmente executar o comando seguinte?<br><br>%1<br> +- +- +- Remember my choice +- Lembrar minha escolha +- +- +- Do you really want to delete the group "%1" for good? +- Você realmente quer apagar o grupo "%1" para sempre? +- +- +- No current database. +- Nenhuma banco de dados atual. +- +- +- No source database, nothing to do. +- Nenhuma banco de dados de origem, nada a fazer. +- +- +- Search Results (%1) +- Resultados da Pesquisa (%1) +- +- +- No Results +- Sem Resultados +- +- +- File has changed +- O arquivo foi modificado +- +- +- The database file has changed. Do you want to load the changes? +- O banco de dados foi alterado. Deseja carregar as alterações? +- +- +- Merge Request +- Juntar Pedido +- +- +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- O arquivo de banco de dados foi alterado e você tem alterações não salvas. +-Você deseja combinar suas alterações? +- +- +- Empty recycle bin? +- Esvaziar lixeira? +- +- +- Are you sure you want to permanently delete everything from your recycle bin? +- Você tem certeza que deseja apagar permanentemente tudo que está na lixeira? +- +- +- Do you really want to delete %n entry(s) for good? +- Você realmente quer apagar %n entrada(s) para o bem?Você realmente quer apagar %n entrada(s) para o bem? +- +- +- Delete entry(s)? +- Apagar entrada?Apagar entradas? +- +- +- Move entry(s) to recycle bin? +- Mover entrada para a lixeira?Mover entradas para a lixeira? +- +- +- Lock Database? +- Travar banco de dados? +- +- +- You are editing an entry. Discard changes and lock anyway? +- Você está editando uma entrada. Descartar as mudanças e travar de qualquer maneira? +- +- +- "%1" was modified. +-Save changes? +- "%1" foi modificado. +-Salvar alterações? +- +- +- Database was modified. +-Save changes? +- Banco de dados foi modificado. +-Salvar alterações? +- +- +- Save changes? +- Salvar alterações? +- +- +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- Não foi possível abrir o novo arquivo de banco de dados ao tentar executar o carregamento automático. +-Erro: %1 +- +- +- Disable safe saves? +- Desativar armazenamento seguro? +- +- +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- KeePassXC não pôde salvar o banco de dados após várias tentativas. Isto é causado provavelmente pelo serviço de sincronização de arquivo que mantém um bloqueio ao salvar o arquivo. +-Deseja desabilitar salvamento seguro e tentar novamente? +- +- +- Passwords +- Senhas +- +- +- Save database as +- Salvar banco de dados como +- +- +- KeePass 2 Database +- Banco de dados Keepass 2 +- +- +- Replace references to entry? +- Substituir referências para entrada? +- +- +- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? +- A entrada "%1" tem %2 referência(s). Deseja substituir referências por valores, ignorar essa entrada ou excluir mesmo assim?A entrada "%1" tem %2 referência(s). Deseja substituir referências por valores, ignorar essa entrada ou excluir mesmo assim? +- +- +- Delete group +- Excluir grupo +- +- +- Move group to recycle bin? +- Mover o grupo para a lixeira? +- +- +- Do you really want to move the group "%1" to the recycle bin? +- Você realmente quer mover o grupo "%1" para a Lixeira? +- +- +- Successfully merged the database files. +- Fundiu com sucesso os arquivos do banco de dados. +- +- +- Database was not modified by merge operation. +- Banco de dados não foi modificado pela operação de mesclagem. +- +- +- Shared group... +- Grupo compartilhado... +- +- +- Writing the database failed: %1 +- Gravação do banco de dados falhou: %1 +- +- +- This database is opened in read-only mode. Autosave is disabled. +- Este banco de dados está aberto em modo de leitura. Auto-salvar está desabilitado. +- +- +- Save database backup +- Salvar backup do banco de dados +- +- +- Could not find database file: %1 +- Não foi possível localizar o arquivo do banco de dados: %1 +- +- +- +- EditEntryWidget +- +- Entry +- Entrada +- +- +- Advanced +- Avançado +- +- +- Icon +- Ãcone +- +- +- Auto-Type +- Auto-Digitação +- +- +- Properties +- Propriedades +- +- +- History +- Histórico +- +- +- SSH Agent +- Agente SSH +- +- +- n/a +- n/d +- +- +- (encrypted) +- (criptografado) +- +- +- Select private key +- Escolha uma chave privada +- +- +- Entry history +- Histórico de Entradas +- +- +- Add entry +- Adicionar entrada +- +- +- Edit entry +- Editar entrada +- +- +- New attribute +- Novo atributo +- +- +- Are you sure you want to remove this attribute? +- Você tem certeza que deseja remover este atributo? +- +- +- Tomorrow +- Amanhã +- +- +- %n week(s) +- %n semana(s)%n semana(s) +- +- +- %n month(s) +- %n mese(s)%n mese(s) +- +- +- Entry updated successfully. +- Item atualizado com sucesso. +- +- +- New attribute %1 +- Novo atributo %1 +- +- +- %n year(s) +- %n ano%n anos +- +- +- Confirm Removal +- Confirme a Remoção +- +- +- Browser Integration +- Integração com o navegador +- +- +- <empty URL> +- <empty URL> +- +- +- Are you sure you want to remove this URL? +- Tem certeza de que deseja remover esta URL? +- +- +- Reveal +- Revelar +- +- +- Hide +- Ocultar +- +- +- Unsaved Changes +- Desfazer Mundanças +- +- +- Would you like to save changes to this entry? +- Você gostaria de salvar as mudanças para esta entrada? +- +- +- [PROTECTED] Press Reveal to view or edit +- [PROTEGIDO] Pressione Revelar para visualizar ou editar +- +- +- Invalid Entry +- +- +- +- An external merge operation has invalidated this entry. +-Unfortunately, any changes made have been lost. +- +- +- +- +- EditEntryWidgetAdvanced +- +- Additional attributes +- Atributos extras +- +- +- Add +- Adicionar +- +- +- Remove +- Remover +- +- +- Edit Name +- Editar Nome +- +- +- Protect +- Proteger +- +- +- Reveal +- Revelar +- +- +- Attachments +- Anexos +- +- +- Foreground Color: +- Cor de primeiro plano: +- +- +- Background Color: +- Cor de fundo: +- +- +- Attribute selection +- Seleção de atributos +- +- +- Attribute value +- Valor do atributo +- +- +- Add a new attribute +- Adicionar um novo atributo +- +- +- Remove selected attribute +- Remover atributo selecionado +- +- +- Edit attribute name +- Editar nome do atributo +- +- +- Toggle attribute protection +- Alterar a proteção do atributo +- +- +- Show a protected attribute +- Mostrar um atributo protegido +- +- +- Foreground color selection +- Seleção da cor do primeiro plano +- +- +- Background color selection +- Seleção de cor do plano de fundo +- +- +- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> +- <html><head/><body><p>Se marcado, a entrada não aparecerá em relatórios como Verificação de Saúde e HIBP, mesmo se ela não corresponder aos requerimentos de qualidade (ex.: entropia de senha ou reuso). Você pode definir a marca de seleção se a senha estiver fora do seu controle (por exemplo, se precisar ser um PIN de quatro dígitos) para evitar que isso atrapalhe os relatórios.</p></body></html> +- +- +- Exclude from database reports +- Excluir dos relatórios do banco de dados +- +- +- +- EditEntryWidgetAutoType +- +- Enable Auto-Type for this entry +- Habilitar Auto-Digitação para esta entrada +- +- +- Window Associations +- Associações de Janela +- +- +- + +- + +- +- +- - +- - +- +- +- Window title: +- Título da Janela: +- +- +- Use a specific sequence for this association: +- Usar sequência especifica para essa associação: +- +- +- Custom Auto-Type sequence +- Personalizar sequência de Auto-Digitar +- +- +- Open Auto-Type help webpage +- Abrir a página de ajuda do Auto-Digitar +- +- +- Existing window associations +- Associar janelas existentes +- +- +- Add new window association +- Adicionar nova associação de janela +- +- +- Remove selected window association +- Remover a associação de janela selecionada +- +- +- You can use an asterisk (*) to match everything +- Você pode usar um asterisco (*) para corresponder a tudo +- +- +- Set the window association title +- Montar um arquivo de associação de janela +- +- +- You can use an asterisk to match everything +- Você pode usar um asterisco para corresponder a tudo +- +- +- Custom Auto-Type sequence for this window +- Sequência de Auto-Digitar personalizada para esta janela +- +- +- Inherit default Auto-Type sequence from the group +- Herdar sequência pré-definida de Auto-Digitação do grupo +- +- +- Use custom Auto-Type sequence: +- Usar sequência de Auto-Digitação personalizada: +- +- +- +- EditEntryWidgetBrowser +- +- These settings affect to the entry's behaviour with the browser extension. +- Essas configurações afetam o comportamento de entrada da extensão do navegador. +- +- +- General +- Geral +- +- +- Skip Auto-Submit for this entry +- Ignorar Auto-Envio para esta entrada +- +- +- Hide this entry from the browser extension +- Ocultar esta entrada da extensão do navegador +- +- +- Additional URL's +- URL's adicionais +- +- +- Add +- Adicionar +- +- +- Remove +- Remover +- +- +- Edit +- Editar +- +- +- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. +- Envia esta configuração apenas ao navegador para caixas de diálogo de Autenticação HTTP. Se ativado, os formulários de login normais não mostrarão esta entrada para seleção. +- +- +- Use this entry only with HTTP Basic Auth +- Usar esta entrada somente com Autenticação HTTP Básica +- +- +- +- EditEntryWidgetHistory +- +- Show +- Mostrar +- +- +- Restore +- Restaurar +- +- +- Delete +- Excluir +- +- +- Delete all +- Excluir todos +- +- +- Entry history selection +- Seleção de histórico de entrada +- +- +- Show entry at selected history state +- Mostrar entrada no estado de histórico selecionado +- +- +- Restore entry to selected history state +- Restaurar entrada para o estado de histórico selecionado +- +- +- Delete selected history state +- Apagar o estado de histórico selecionado +- +- +- Delete all history +- Apagar todo histórico +- +- +- +- EditEntryWidgetMain +- +- URL: +- URL: +- +- +- Password: +- Senha: +- +- +- Title: +- Título: +- +- +- Presets +- Pré-definidos +- +- +- Toggle the checkbox to reveal the notes section. +- Altere a caixa de checagem para revelar a seção de notas. +- +- +- Username: +- Nome de Usuário: +- +- +- Url field +- Campo da url +- +- +- Download favicon for URL +- Baixar favicon para URL +- +- +- Password field +- Campo de senha +- +- +- Toggle notes visible +- Alternar visibilidade das notas +- +- +- Expiration field +- Campo de expiração +- +- +- Expiration Presets +- Expiração Predefinida +- +- +- Expiration presets +- Expiração predefinida +- +- +- Notes field +- Campo notas +- +- +- Title field +- Campo de título +- +- +- Username field +- Campo de usuário +- +- +- Toggle expiration +- Alternar expiração +- +- +- Notes: +- Notas: +- +- +- https://example.com +- https://example.com +- +- +- Expires: +- Expira em: +- +- +- Edit Entry +- +- +- +- +- EditEntryWidgetSSHAgent +- +- Form +- Formulário +- +- +- Remove key from agent after +- Remover a chave do agente após +- +- +- seconds +- segundos +- +- +- Fingerprint +- Fingerprint +- +- +- Remove key from agent when database is closed/locked +- Remover chave do agente ao fechar/bloquear o banco de dados +- +- +- Public key +- Chave pública +- +- +- Add key to agent when database is opened/unlocked +- Adicionar chave ao agente quando abrir/desbloquear o banco de dados +- +- +- Comment +- Comentário +- +- +- Decrypt +- Descriptografar +- +- +- n/a +- n/d +- +- +- Copy to clipboard +- Copiar para a área de transferência +- +- +- Private key +- Chave privada +- +- +- External file +- Arquivo externo +- +- +- Browse... +- Button for opening file dialog +- Navegar... +- +- +- Attachment +- Anexo +- +- +- Add to agent +- Adicionar ao agente +- +- +- Remove from agent +- Remover do agente +- +- +- Require user confirmation when this key is used +- Requer confirmação do usuário quando essa chave é usada +- +- +- Remove key from agent after specified seconds +- Remover chave do agente após os segundos especificados +- +- +- Browser for key file +- Procurar por arquivo-chave +- +- +- External key file +- Arquivo-chave externo +- +- +- Select attachment file +- Selecionar arquivo anexado +- +- +- +- EditGroupWidget +- +- Group +- Grupo +- +- +- Icon +- Ãcone +- +- +- Properties +- Propriedades +- +- +- Add group +- Adicionar grupo +- +- +- Edit group +- Editar grupo +- +- +- Enable +- Habilitar +- +- +- Disable +- Desabilitar +- +- +- Inherit from parent group (%1) +- Herdar do grupo pai (%1) +- +- +- Entry has unsaved changes +- A entrada tem alterações não salvas +- +- +- +- EditGroupWidgetKeeShare +- +- Type: +- Tipo: +- +- +- Path: +- Caminho: +- +- +- Password: +- Senha: +- +- +- Inactive +- Inativo +- +- +- KeeShare unsigned container +- Recipiente KeeShare não assinado +- +- +- KeeShare signed container +- Recipiente KeeShare assinado +- +- +- Select import source +- Selecione a fonte de importação +- +- +- Select export target +- Selecione o destino de exportação +- +- +- Select import/export file +- Selecione o arquivo de importação/exportação +- +- +- Clear +- Limpar +- +- +- Import +- Importar +- +- +- Export +- Exportar +- +- +- Synchronize +- Sincronizar +- +- +- Your KeePassXC version does not support sharing this container type. +-Supported extensions are: %1. +- Sua versão do KeePassXC não suporta compartilhamento desse tipo de recipiente. +-Extensões suportadas são: %1 +- +- +- %1 is already being exported by this database. +- %1 já foi exportado deste banco de dados. +- +- +- %1 is already being imported by this database. +- %1 já foi importado deste banco de dados. +- +- +- %1 is being imported and exported by different groups in this database. +- %1 já foi importado e exportado por diferentes grupos neste banco de dados. +- +- +- KeeShare is currently disabled. You can enable import/export in the application settings. +- KeeShare is a proper noun +- KeeShare está atualmente desativado. Você pode habilitar importação/exportação nas configurações do aplicativo. +- +- +- Database export is currently disabled by application settings. +- Exportação de banco de dados está atualmente desativado nas configurações do aplicativo. +- +- +- Database import is currently disabled by application settings. +- Importação de banco de dados está atualmente desativado nas configurações do aplicativo. +- +- +- Sharing mode field +- Campo do modo de compartilhamento +- +- +- Path to share file field +- Campo do caminho para compartilhar arquivo +- +- +- Password field +- Campo de senha +- +- +- Clear fields +- Limpar campos +- +- +- Browse for share file +- Procurar por arquivo compartilhado +- +- +- Browse... +- Procurar... +- +- +- +- EditGroupWidgetMain +- +- Name field +- Campo nome +- +- +- Notes field +- Campo notas +- +- +- Toggle expiration +- Alternar expiração +- +- +- Auto-Type toggle for this and sub groups +- Alternar Auto-Digitar para estes sub grupos +- +- +- Expiration field +- Campo de expiração +- +- +- Search toggle for this and sub groups +- Alternar busca para estes sub grupos +- +- +- Default auto-type sequence field +- Campo de sequência de Auto-Digitar padrão +- +- +- Expires: +- Expira em: +- +- +- Use default Auto-Type sequence of parent group +- Usar a sequência padrão de Auto-Digitar do grupo pai +- +- +- Auto-Type: +- Auto-Digitar: +- +- +- Search: +- Pesquisar: +- +- +- Notes: +- Notas: +- +- +- Name: +- Nome: +- +- +- Set default Auto-Type sequence +- Configurar sequência padrão de Auto-Digitar +- +- +- Edit Group +- +- +- +- +- EditWidgetIcons +- +- Add custom icon +- Adicionar ícone personalizado +- +- +- Delete custom icon +- Excluir ícone personalizado +- +- +- Download favicon +- Baixar favicon +- +- +- Unable to fetch favicon. +- Não foi possível obter favicon. +- +- +- Images +- Imagens +- +- +- All files +- Todos arquivos +- +- +- Confirm Delete +- Confirmar Exclusão +- +- +- Select Image(s) +- Selecionar Imagem(ns) +- +- +- Successfully loaded %1 of %n icon(s) +- Carregado com sucesso %1 de %n ícone(s)Carregado com sucesso %1 de %n ícone(s) +- +- +- No icons were loaded +- Nenhum ícone foi carregado +- +- +- %n icon(s) already exist in the database +- %n ícone(s) já existe no banco de dados%n ícone(s) já existe no banco de dados +- +- +- The following icon(s) failed: +- O seguinte ícone falhou:O(s) ícone(s) a seguir falharam: +- +- +- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? +- Este ícone é usado por %n entrada(s) e será substituído pelo ícone padrão. Tem certeza de que deseja excluí-lo?Este ícone é usado por %n entrada(s) e será substituído pelo ícone padrão. Tem certeza de que deseja excluí-lo? +- +- +- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security +- Você pode habilitar o serviço de ícone do site do DuckDuckGo em Ferramentas -> Configurações -> Segurança +- +- +- Download favicon for URL +- Baixar favicon para URL +- +- +- Apply selected icon to subgroups and entries +- Aplicar ícone selecionado aos sub grupos e entradas +- +- +- Also apply to child groups +- Também aplicar nos grupos herdeiros +- +- +- Also apply to child entries +- Também aplicar nas entradas herdeiras +- +- +- Also apply to all children +- Também aplicar a todos os herdeiros +- +- +- Existing icon selected. +- Ãcone existente selecionado. +- +- +- Use default icon +- Usar ícone padrão +- +- +- Use custom icon +- Usar ícone personalizado +- +- +- Apply icon to... +- Aplicar ícone para... +- +- +- Apply to this group only +- Aplicar para este grupo somente +- +- +- +- EditWidgetProperties +- +- Created: +- Criado em: +- +- +- Modified: +- Modificado em: +- +- +- Accessed: +- Acessado em: +- +- +- Uuid: +- Uuid: +- +- +- Plugin Data +- Dados do plugin +- +- +- Remove +- Remover +- +- +- Delete plugin data? +- Apagar dados do plugin? +- +- +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- Você quer realmente apagar os dados do plugin selecionados? +-Isto pode causar mal funcionamento dos plugins afetados. +- +- +- Key +- Chave +- +- +- Value +- Valor +- +- +- Datetime created +- Data criada +- +- +- Datetime modified +- Data modificada +- +- +- Datetime accessed +- Data acessada +- +- +- Unique ID +- ID única +- +- +- Plugin data +- Dados do plugin +- +- +- Remove selected plugin data +- Remover dados do plugin selecionado +- +- +- +- Entry +- +- %1 - Clone +- %1 - Clone +- +- +- +- EntryAttachmentsModel +- +- Name +- Nome +- +- +- Size +- Tamanho +- +- +- +- EntryAttachmentsWidget +- +- Form +- Formulário +- +- +- Add +- Adicionar +- +- +- Remove +- Remover +- +- +- Open +- Abrir +- +- +- Save +- Salvar +- +- +- Select files +- Selecionar arquivos +- +- +- Are you sure you want to remove %n attachment(s)? +- Tem certeza que deseja remover anexos de %n?Tem certeza que deseja remover os %n anexo(s)? +- +- +- Save attachments +- Salvar anexos +- +- +- Unable to create directory: +-%1 +- Não foi possível criar o diretório: +-%1 +- +- +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- Tem certeza que deseja substituir o arquivo existente "%1" com o anexo? +- +- +- Confirm overwrite +- Confirmar sobrescrever +- +- +- Unable to save attachments: +-%1 +- Não foi possível salvar anexos: +-%1 +- +- +- Unable to open attachment: +-%1 +- Não foi possível abrir anexo: +-%1 +- +- +- Unable to open attachments: +-%1 +- Não foi possível abrir anexos: +-%1 +- +- +- Confirm remove +- Confirmar remoção +- +- +- Unable to open file(s): +-%1 +- Incapaz de abrir o arquivo (s): +-%1Não foi possível abrir arquivo(s): +-%1 +- +- +- Attachments +- Anexos +- +- +- Add new attachment +- Adicionar novo anexo +- +- +- Remove selected attachment +- Remover anexo selecionado +- +- +- Open selected attachment +- Abrir anexo selecionado +- +- +- Save selected attachment to disk +- Salvar anexo selecionado no disco +- +- +- %1 is a big file (%2 MB). +-Your database may get very large and reduce performance. +- +-Are you sure to add this file? +- %1 é um arquivo grande (%2 MB). +-Seu banco de dados pode ficar muito grande e reduzir o desempenho. +- +-Você deseja realmente adicionar este arquivo? +- +- +- Confirm Attachment +- Confirmar Anexo +- +- +- +- EntryAttributesModel +- +- Name +- Nome +- +- +- +- EntryHistoryModel +- +- Last modified +- Modificado pela última vez em +- +- +- Title +- Título +- +- +- Username +- Nome de usuário +- +- +- URL +- URL +- +- +- +- EntryModel +- +- Ref: +- Reference abbreviation +- Ref: +- +- +- Group +- Grupo +- +- +- Title +- Título +- +- +- Username +- Nome de usuário +- +- +- URL +- URL +- +- +- Never +- Nunca +- +- +- Password +- Senha +- +- +- Notes +- Notas +- +- +- Expires +- Expira em +- +- +- Created +- Criado +- +- +- Modified +- Modificado +- +- +- Accessed +- Acessado +- +- +- Attachments +- Anexos +- +- +- Size +- Tamanho +- +- +- Group name +- Nome do grupo +- +- +- Entry title +- Título da entrada +- +- +- Entry notes +- Anotações da entrada +- +- +- Entry expires at +- Entrada expira em +- +- +- Creation date +- Data de criação +- +- +- Last modification date +- Data da última modificação +- +- +- Last access date +- Data do último acesso +- +- +- Attached files +- Arquivos anexados +- +- +- Entry size +- Tamanho da entrada +- +- +- Has attachments +- Tem anexos +- +- +- Has TOTP one-time password +- Possui senha de uso único TOPT +- +- +- +- EntryPreviewWidget +- +- Close +- Fechar +- +- +- General +- Geral +- +- +- Username +- Nome de usuário +- +- +- Password +- Senha +- +- +- Expiration +- Expiração +- +- +- URL +- URL +- +- +- Attributes +- Atributos +- +- +- Attachments +- Anexos +- +- +- Notes +- Notas +- +- +- Autotype +- Auto-Digitação +- +- +- Window +- Janela +- +- +- Sequence +- Sequência +- +- +- Searching +- Busca +- +- +- Search +- Pesquisar +- +- +- Clear +- Limpar +- +- +- Never +- Nunca +- +- +- [PROTECTED] +- [PROTEGIDO] +- +- +- Enabled +- Habilitado +- +- +- Disabled +- Desabilitado +- +- +- Share +- Compartilhar +- +- +- Display current TOTP value +- Mostrar valor TOTP atual +- +- +- Advanced +- Avançado +- +- +- Default Sequence +- +- +- +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- attributes line +- +- +- +- +- EntryURLModel +- +- Invalid URL +- URL inválida +- +- +- +- EntryView +- +- Fit to window +- Ajustar à janela +- +- +- Fit to contents +- Ajustar ao conteúdo +- +- +- Reset to defaults +- Redefinir as configurações padrões +- +- +- Has attachments +- Entry attachment icon toggle +- Tem anexos +- +- +- Has TOTP +- Entry TOTP icon toggle +- Possui TOTP +- +- +- +- FdoSecrets::Item +- +- Entry "%1" from database "%2" was used by %3 +- Entrada "%1" do banco de dados "%2" foi usada por %3 +- +- +- +- FdoSecrets::Service +- +- Failed to register DBus service at %1.<br/> +- Falha ao registrar serviço DBus em %1.<br/> +- +- +- %n Entry(s) was used by %1 +- %1 is the name of an application +- %n entrada foi usada por %1%n entradas foram usadas por %1 +- +- +- +- FdoSecrets::SettingsDatabaseModel +- +- File Name +- Nome do arquivo +- +- +- Group +- Grupo +- +- +- Manage +- Gerenciar +- +- +- Unlock to show +- Destrancar para mostrar +- +- +- None +- Nada +- +- +- +- FdoSecrets::SettingsSessionModel +- +- Application +- Aplicativo +- +- +- Manage +- Gerenciar +- +- +- +- FdoSecretsPlugin +- +- <b>Fdo Secret Service:</b> %1 +- <b>Fdo Secret Service:</b> %1 +- +- +- Unknown +- Unknown PID +- Desconhecido +- +- +- Unknown +- Unknown executable path +- Desconhecido +- +- +- <i>PID: %1, Executable: %2</i> +- <i>PID: 1234, Executable: /path/to/exe</i> +- <i>PID: %1, Executável: %2</i> +- +- +- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. +- Outro serviço secreto está em execução (%1).<br/>Por favor, encerre/remova ele antes de reabilitar a integração com o Serviço Secreto. +- +- +- +- Group +- +- [empty] +- group has no children +- [vazio] +- +- +- +- HibpDownloader +- +- Online password validation failed +- Falha na validação online da senha +- +- +- +- IconDownloaderDialog +- +- Download Favicons +- Baixar Favicons +- +- +- Cancel +- Cancelar +- +- +- Having trouble downloading icons? +-You can enable the DuckDuckGo website icon service in the security section of the application settings. +- Tendo problemas ao baixar ícones? +-Você pode habilitar o serviço de ícones do DuckDuckGo na seção de segurança desse aplicativo. +- +- +- Close +- Fechar +- +- +- URL +- URL +- +- +- Status +- Status +- +- +- Please wait, processing entry list... +- Por favor espere... Processando lista de entradas... +- +- +- Downloading... +- Baixando... +- +- +- Ok +- Ok +- +- +- Already Exists +- Já existe +- +- +- Download Failed +- Falha no download +- +- +- Downloading favicons (%1/%2)... +- Baixando favicons (%1/%2)... +- +- +- +- KMessageWidget +- +- &Close +- Fe&char +- +- +- Close message +- Fechar mensagem +- +- +- +- Kdbx3Reader +- +- missing database headers +- cabeçalhos de banco de dados ausente +- +- +- Header doesn't match hash +- Cabeçalho não corresponde ao hash +- +- +- Invalid header id size +- Tamanho do id do cabeçalho inválido +- +- +- Invalid header field length +- Comprimento do campo de cabeçalho inválido +- +- +- Invalid header data length +- Comprimento de dados cabeçalho inválido +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Credenciais inválidas foram informadas, por favor tente novamente. +-Se este erro ocorrer novamente, seu banco de dados pode estar corrompido. +- +- +- Unable to calculate database key +- Não foi possível calcular a chave do banco de dados +- +- +- Unable to issue challenge-response: %1 +- Não foi possível emitir resposta ao desafio: %1 +- +- +- +- Kdbx3Writer +- +- Unable to issue challenge-response: %1 +- Não foi possível emitir resposta ao desafio: %1 +- +- +- Unable to calculate database key +- Não foi possível calcular a chave do banco de dados +- +- +- +- Kdbx4Reader +- +- missing database headers +- cabeçalhos de banco de dados ausente +- +- +- Invalid header checksum size +- Tamanho de soma de verificação do cabeçalho inválido +- +- +- Header SHA256 mismatch +- Incompatibilidade de cabeçalho SHA256 +- +- +- Unknown cipher +- Cifra desconhecida +- +- +- Invalid header id size +- Tamanho do id do cabeçalho inválido +- +- +- Invalid header field length +- Comprimento do campo de cabeçalho inválido +- +- +- Invalid header data length +- Comprimento de dados cabeçalho inválido +- +- +- Failed to open buffer for KDF parameters in header +- Falha ao abrir o buffer para parâmetros KDF no cabeçalho +- +- +- Unsupported key derivation function (KDF) or invalid parameters +- Função de derivação de chaves sem suporte (KDF) ou parâmetros inválidos +- +- +- Legacy header fields found in KDBX4 file. +- Campos de cabeçalho de legado encontrados no arquivo KDBX4. +- +- +- Invalid inner header id size +- Tamanho do id do cabeçalho interno inválido +- +- +- Invalid inner header field length +- Comprimento do campo de cabeçalho interno inválido +- +- +- Invalid inner header binary size +- Tamanho binário cabeçalho interno inválido +- +- +- Unsupported KeePass variant map version. +- Translation: variant map = data structure for storing meta data +- Versão não suportada do mapa variante KeePass. +- +- +- Invalid variant map entry name length +- Translation: variant map = data structure for storing meta data +- Comprimento inválido do nome da entrada da variante do mapa +- +- +- Invalid variant map entry name data +- Translation: variant map = data structure for storing meta data +- Dados inválidos do nome da entrada da variante do mapa +- +- +- Invalid variant map entry value length +- Translation: variant map = data structure for storing meta data +- Comprimento inválido do valor de entrada do mapa +- +- +- Invalid variant map entry value data +- Translation comment: variant map = data structure for storing meta data +- Dados inválidos do valor da entrada da variante do mapa +- +- +- Invalid variant map Bool entry value length +- Translation: variant map = data structure for storing meta data +- Comprimento inválido do valor booleano da entrada da variante do mapa +- +- +- Invalid variant map Int32 entry value length +- Translation: variant map = data structure for storing meta data +- Comprimento inválido do valor da entrada Int32 da variante do mapa +- +- +- Invalid variant map UInt32 entry value length +- Translation: variant map = data structure for storing meta data +- Comprimento inválido do valor da entrada UInt32 da variante do mapa +- +- +- Invalid variant map Int64 entry value length +- Translation: variant map = data structure for storing meta data +- Comprimento inválido do valor da entrada Int64 da variante do mapa +- +- +- Invalid variant map UInt64 entry value length +- Translation: variant map = data structure for storing meta data +- Comprimento inválido do valor da entrada UInt64 da variante do mapa +- +- +- Invalid variant map entry type +- Translation: variant map = data structure for storing meta data +- Tipo inválido da entrada da variante do mapa +- +- +- Invalid variant map field type size +- Translation: variant map = data structure for storing meta data +- Tamanho inválido do tipo de campo da variante do mapa +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Credenciais inválidas foram informadas, por favor tente novamente. +-Se este erro ocorrer novamente, seu banco de dados pode estar corrompido. +- +- +- (HMAC mismatch) +- (HMAC não combina) +- +- +- Unable to calculate database key: %1 +- Não foi possível calcular a chave do banco de dados: %1 +- +- +- +- Kdbx4Writer +- +- Invalid symmetric cipher algorithm. +- Algoritmo de cifra simétrica inválido. +- +- +- Invalid symmetric cipher IV size. +- IV = Initialization Vector for symmetric cipher +- Tamanho de cifra simétrica IV inválida. +- +- +- Failed to serialize KDF parameters variant map +- Translation comment: variant map = data structure for storing meta data +- Falha ao serializar mapa variante do parâmetros KDF +- +- +- Unable to calculate database key: %1 +- Não foi possível calcular a chave do banco de dados: %1 +- +- +- +- KdbxReader +- +- Unsupported cipher +- Cifra não suportada +- +- +- Invalid compression flags length +- Comprimento de flags de compressão inválido +- +- +- Unsupported compression algorithm +- Algoritmo de compressão não suportado +- +- +- Invalid master seed size +- Tamanho da semente de mestre inválido +- +- +- Invalid transform seed size +- Tamanho de semente de transformação inválido +- +- +- Invalid transform rounds size +- Tamanho do número de rodadas transformação inválido +- +- +- Invalid start bytes size +- Tamanho de bytes de início inválido +- +- +- Invalid random stream id size +- Tamanho de ID de fluxo aleatório inválido +- +- +- Invalid inner random stream cipher +- Cifra de fluxo aleatório interno inválido +- +- +- Not a KeePass database. +- Não é um banco de dados KeePass. +- +- +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- O arquivo selecionado é um velho banco de dados do KeePass 1 (.kdb) +- +-Você pode importá-lo clicando em Banco de Dados > "Importar banco de dados do KeePss 1..." +-Isto é uma migração de caminho único. Você não poderá abrir o banco de dados importado com a velha versão KeePassX 0.4. +- +- +- Unsupported KeePass 2 database version. +- Versão do banco de dados KeePass 2 não suportada. +- +- +- Invalid cipher uuid length: %1 (length=%2) +- Tamanho de cifra uuid inválida: %1 (tamanho=%2) +- +- +- Unable to parse UUID: %1 +- Não é possível analisar o UUID: %1 +- +- +- Failed to read database file. +- Falha ao ler o arquivo de banco de dados. +- +- +- +- KdbxXmlReader +- +- XML parsing failure: %1 +- Análise de falha de XML: %1 +- +- +- No root group +- Sem grupo raiz +- +- +- Missing icon uuid or data +- Faltando uuid ou dados do ícone +- +- +- Missing custom data key or value +- Chave de dados customizada ou valor ausente +- +- +- Multiple group elements +- Vários elementos do grupo +- +- +- Null group uuid +- Uuid group inválido +- +- +- Invalid group icon number +- Número do grupo de ícone inválido +- +- +- Invalid EnableAutoType value +- Valor de EnableAutoType inválido +- +- +- Invalid EnableSearching value +- Valor EnableSearching inválido +- +- +- No group uuid found +- Nenhum grupo uuid encontrado +- +- +- Null DeleteObject uuid +- DeleteObject uuid nulo +- +- +- Missing DeletedObject uuid or time +- DeletedObject uuid ou tempo ausente +- +- +- Null entry uuid +- Item uuid nulo +- +- +- Invalid entry icon number +- Item inválido número de ícone +- +- +- History element in history entry +- Elemento de histórico na entrada de histórico +- +- +- No entry uuid found +- Nenhuma entrada uuid encontrado +- +- +- History element with different uuid +- Elemento de história com diferente uuid +- +- +- Duplicate custom attribute found +- Atributo customizado duplicado encontrado +- +- +- Entry string key or value missing +- Chave de cadeia de caracteres de entrada ou valor ausente +- +- +- Entry binary key or value missing +- Entrada de chave binária ou valor ausente +- +- +- Auto-type association window or sequence missing +- Janela associada ao Auto-Digitar ou sequência ausente +- +- +- Invalid bool value +- Valor booleano inválido +- +- +- Invalid date time value +- Valor de tempo e data inválido +- +- +- Invalid color value +- Valor de cor inválido +- +- +- Invalid color rgb part +- Valor de número inválido +- +- +- Invalid number value +- Valor numérico inválido +- +- +- Invalid uuid value +- Valor uuid inválido +- +- +- Unable to decompress binary +- Translator meant is a binary data inside an entry +- Não é possível descompactar binário +- +- +- XML error: +-%1 +-Line %2, column %3 +- Erro XML: +-%1 +-Linha %2, coluna %3 +- +- +- +- KeeAgentSettings +- +- Invalid KeeAgent settings file structure. +- Estrutura inválida do arquivo de configurações do KeeAgent. +- +- +- Private key is an attachment but no attachments provided. +- A chave privada é um anexo, mas nenhum anexo foi fornecido. +- +- +- Private key is empty +- A chave privada está vazia +- +- +- File too large to be a private key +- Este arquivo é muito grande para ser uma chave privada +- +- +- Failed to open private key +- Falha ao abrir chave privada +- +- +- +- KeePass1OpenWidget +- +- Unable to open the database. +- Não foi possível abrir o banco de dados. +- +- +- Import KeePass1 Database +- Importar banco de dados KeePass1 +- +- +- +- KeePass1Reader +- +- Unable to read keyfile. +- Não foi possível ler o arquivo-chave. +- +- +- Not a KeePass database. +- Não é um banco de dados KeePass. +- +- +- Unsupported encryption algorithm. +- Algoritmo de encriptação não suportado. +- +- +- Unsupported KeePass database version. +- Versão não suportada do banco de dados KeePass. +- +- +- Unable to read encryption IV +- IV = Initialization Vector for symmetric cipher +- Não é possível ler criptografia IV +- +- +- Invalid number of groups +- Número inválido de grupos +- +- +- Invalid number of entries +- Número inválido de entradas +- +- +- Invalid content hash size +- Tamanho de hash conteúdo inválido +- +- +- Invalid transform seed size +- Tamanho de sementes de transformação inválido +- +- +- Invalid number of transform rounds +- Número inválido de ciclos de transformção +- +- +- Unable to construct group tree +- Não é possível construir árvore de grupo +- +- +- Root +- Raíz +- +- +- Key transformation failed +- Transformação de chave falhou +- +- +- Invalid group field type number +- Grupo inválido número do tipo de campo +- +- +- Invalid group field size +- Tamanho do campo Grupo inválido +- +- +- Read group field data doesn't match size +- Leitura de grupo dados do campo não correspondem em tamanho +- +- +- Incorrect group id field size +- Tamanho de campo de id de grupo incorreto +- +- +- Incorrect group creation time field size +- Grupo incorreto tamanho do campo de hora de criação +- +- +- Incorrect group modification time field size +- Grupo incorreto tamanho do campo de hora de modificação +- +- +- Incorrect group access time field size +- Grupo incorreto tamanho do campo de hora de acesso +- +- +- Incorrect group expiry time field size +- Grupo incorreto tamanho do campo de hora de expiração +- +- +- Incorrect group icon field size +- Grupo incorreto tamanho do campo de ícone +- +- +- Incorrect group level field size +- Grupo incorreto tamanho do campo de nível +- +- +- Invalid group field type +- Grupo incorreto tipo de campo +- +- +- Missing group id or level +- Grupo ausente id ou nível +- +- +- Missing entry field type number +- Item ausente número do tipo de campo +- +- +- Invalid entry field size +- Item inválido tamanho do campo +- +- +- Read entry field data doesn't match size +- Leitura do dados de campo de entrada não correspondem com o tamanho +- +- +- Invalid entry uuid field size +- Item inválido tamanho do campo uuid +- +- +- Invalid entry group id field size +- Item inválido tamanho do campo de id de grupo +- +- +- Invalid entry icon field size +- Item inválido tamanho de campo de ícone +- +- +- Invalid entry creation time field size +- Item inválido tamanho do campo de hora de criação +- +- +- Invalid entry modification time field size +- Item inválido Tamanho do campo de hora de modificação +- +- +- Invalid entry expiry time field size +- Tamanho de campo de tempo de expiração entrada inválida +- +- +- Invalid entry field type +- Tipo de campo de entrada inválido +- +- +- unable to seek to content position +- incapaz de buscar a posição de conteúdo +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Credenciais inválidas foram informadas, por favor tente novamente. +-Se este erro ocorrer novamente, seu banco de dados pode estar corrompido. +- +- +- Unable to calculate database key +- Não foi possível calcular a chave do banco de dados +- +- +- +- KeeShare +- +- Invalid sharing reference +- Referência de compartilhamento inválida +- +- +- Inactive share %1 +- Desativar compartilhamento %1 +- +- +- Imported from %1 +- Importado de %1 +- +- +- Exported to %1 +- Exportar para %1 +- +- +- Synchronized with %1 +- Sincronizar com %1 +- +- +- Import is disabled in settings +- Importar está desabilitado nas configurações +- +- +- Export is disabled in settings +- Exportar está desabilitado nas configurações +- +- +- Inactive share +- Desativar compartilhamento +- +- +- Imported from +- Importado de +- +- +- Exported to +- Exportado para +- +- +- Synchronized with +- Sincronizado com +- +- +- +- KeyComponentWidget +- +- Key Component +- Componente chave +- +- +- Key Component Description +- Descrição do Componente Chave +- +- +- Cancel +- Cancelar +- +- +- Key Component set, click to change or remove +- Componente Chave definido, clique para alterar ou remover +- +- +- Add %1 +- Add a key component +- Adicionar %1 +- +- +- Change %1 +- Change a key component +- Mudar %1 +- +- +- Remove %1 +- Remove a key component +- Remover %1 +- +- +- %1 set, click to change or remove +- Change or remove a key component +- %1 definido, clique para mudar ou remover +- +- +- +- KeyFileEditWidget +- +- Generate +- Gerar +- +- +- Key File +- Arquivo Chave +- +- +- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> +- <p>Você pode adicionar um arquivo de chave contendo bytes aleatórios para segurança adicional.</p><p>Você deve mantê-lo em segredo e nunca perdê-lo ou você será bloqueado!</p> +- +- +- Error loading the key file '%1' +-Message: %2 +- Erro ao carregar o arquivo de chave '%1' +-Mensagem: %2 +- +- +- Key files +- Arquivos-chave +- +- +- All files +- Todos arquivos +- +- +- Create Key File... +- Criar Arquivo-Chave... +- +- +- Error creating key file +- Erro ao criar o arquivo de chave +- +- +- Unable to create key file: %1 +- Não foi possível criar arquivo de chave: %1 +- +- +- Select a key file +- Escolha um arquivo-chave +- +- +- Key file selection +- Seleção do arquivo-chave +- +- +- Browse for key file +- Procurar por arquivo-chave +- +- +- Browse... +- Procurar... +- +- +- Generate a new key file +- Gerar um novo arquivo-chave +- +- +- Note: Do not use a file that may change as that will prevent you from unlocking your database! +- Nota: Não use um arquivo que possa ser modificado, pois isso irá impedir que você destranque seu banco de dados! +- +- +- Invalid Key File +- Arquivo-chave inválido +- +- +- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. +- Você não pode usar o banco de dados atual como seu próprio arquivo-chave. Por favor, escolha um arquivo diferente ou gere um novo arquivo-chave. +- +- +- Suspicious Key File +- Arquivo-chave suspeito +- +- +- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. +-Are you sure you want to continue with this file? +- O arquivo-chave escolhido parece com um arquivo de banco de dados. Um arquivo-chave deve ser um arquivo estático que nunca sofrerá mudanças, pois senão você perderá acesso ao seu banco de dados para sempre. +-Tem certeza que deseja continuar com este arquivo? +- +- +- Old key file format +- +- +- +- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. +- +- +- +- +- MainWindow +- +- &Database +- Banco de &dados +- +- +- &Help +- &Ajuda +- +- +- &Groups +- &Grupos +- +- +- &Tools +- &Ferramentas +- +- +- &Quit +- &Sair +- +- +- &About +- &Sobre +- +- +- Database settings +- Configurações do Banco de Dados +- +- +- Copy username to clipboard +- Copiar nome de usuário para área de transferência +- +- +- Copy password to clipboard +- Copiar senha para área de transferência +- +- +- &Settings +- &Configurações +- +- +- &Title +- &Título +- +- +- Copy title to clipboard +- Copiar título para a área de transferência +- +- +- &URL +- &URL +- +- +- Copy URL to clipboard +- Copiar URL para a área de transferência +- +- +- &Notes +- &Notas +- +- +- Copy notes to clipboard +- Copiar notas para a área de transferência +- +- +- Copy &TOTP +- Copiar &TOTP +- +- +- E&mpty recycle bin +- Esvaziar &lixeira +- +- +- Clear history +- Limpar histórico +- +- +- Access error for config file %1 +- Erro de acesso para o arquivo de configuração %1 +- +- +- Settings +- Configurações +- +- +- Toggle window +- Alternar Janela +- +- +- Quit KeePassXC +- Fechar KeePassXC +- +- +- Please touch the button on your YubiKey! +- Por favor pressione o botão em seu YubiKey! +- +- +- WARNING: You are using an unstable build of KeePassXC! +-There is a high risk of corruption, maintain a backup of your databases. +-This version is not meant for production use. +- AVISO: você está usando uma compilação instável do KeePassXC! +-Existe um alto risco de corrupção, mantenha um backup de seus bancos de dados. +-Esta versão não se destina ao uso em produção. +- +- +- &Donate +- &Doar +- +- +- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +-We recommend you use the AppImage available on our downloads page. +- AVISO: Sua versão do Qt pode fazer com que o KeePassXC trave com um teclado na tela! +-Recomendamos que você use o AppImage disponível em nossa página de downloads. +- +- +- &Import +- &Importar +- +- +- Create a new database +- Criar um banco de dados +- +- +- Merge from another KDBX database +- Mesclar de outro banco de dados KDBX +- +- +- Add a new entry +- Adicionar uma nova entrada +- +- +- View or edit entry +- Exibir ou editar entrada +- +- +- Add a new group +- Adicionar a um novo grupo +- +- +- Perform &Auto-Type +- Executar &Auto Digitação +- +- +- Open &URL +- Abrir &URL +- +- +- Import a KeePass 1 database +- Importar banco de dados do KeePass 1 +- +- +- Import a CSV file +- Importar arquivo CSV +- +- +- NOTE: You are using a pre-release version of KeePassXC! +-Expect some bugs and minor issues, this version is not meant for production use. +- NOTA: Você está usando uma versão de pré-lançamento do KeePassXC! +-Espere alguns bugs e problemas menores, esta versão não é para uso em produção. +- +- +- Check for updates on startup? +- Verificar se há atualizações na inicialização? +- +- +- Would you like KeePassXC to check for updates on startup? +- Gostaria que o KeePassXC procure atualizações na inicialização? +- +- +- You can always check for updates manually from the application menu. +- Você sempre pode verificar atualizações manualmente no menu do aplicativo. +- +- +- &Export +- &Exportar +- +- +- Sort &A-Z +- Organizar &A-Z +- +- +- Sort &Z-A +- Organizar &Z-A +- +- +- &Password Generator +- &Gerador de senhas +- +- +- Import a 1Password Vault +- Importar cofre 1Password +- +- +- &Getting Started +- &Começando +- +- +- &User Guide +- &Guia do usuário +- +- +- &Keyboard Shortcuts +- &Atalhos no teclado +- +- +- &Recent Databases +- &Banco de Dados Recentes +- +- +- &Entries +- &Entradas +- +- +- Copy Att&ribute +- Copiar At&ributo +- +- +- TOTP +- TOTP +- +- +- View +- Ver +- +- +- Theme +- Tema +- +- +- &Check for Updates +- &Checar Atualizações +- +- +- &Open Database… +- &Abrir Banco de Dados... +- +- +- &Save Database +- &Salvar Banco de Dados +- +- +- &Close Database +- &Fechar Banco de Dados +- +- +- &New Database… +- &Novo Banco de Dados... +- +- +- &Merge From Database… +- &Mesclar do Banco de Dados... +- +- +- &New Entry… +- &Nova Entrada... +- +- +- &Edit Entry… +- &Editar Entrada… +- +- +- &Delete Entry… +- &Excluir Entrada… +- +- +- &New Group… +- &Novo Grupo… +- +- +- &Edit Group… +- &Editar Grupo +- +- +- &Delete Group… +- &Excluir Grupo... +- +- +- Download All &Favicons… +- Baixar Todos &Favicons... +- +- +- Sa&ve Database As… +- Sal&var Banco de Dados Como... +- +- +- Database &Security… +- &Segurança do Banco de Dados... +- +- +- Database &Reports... +- &Relatórios do Banco de Dados... +- +- +- Statistics, health check, etc. +- Estatísticas, verificação de saúde, etc. +- +- +- &Database Settings… +- Configurações do Banco de &Dados... +- +- +- &Clone Entry… +- &Clonar Entrada... +- +- +- Move u&p +- Mover para &cima +- +- +- Move entry one step up +- Mover entrada um passo para cima +- +- +- Move do&wn +- Move para &baixo +- +- +- Move entry one step down +- Mover entrada um passo para baixo +- +- +- Copy &Username +- Copiar &Nome de Usuário +- +- +- Copy &Password +- Copiar &Senha +- +- +- Download &Favicon +- Baixar &Favicon +- +- +- &Lock Databases +- &Bloquear Banco de Dados +- +- +- &CSV File… +- Arquivo &CSV... +- +- +- &HTML File… +- Arquivo &HTML... +- +- +- KeePass 1 Database… +- Banco de dados do KeePass 1... +- +- +- 1Password Vault… +- Cofre do 1Password... +- +- +- CSV File… +- Arquivo CSV... +- +- +- Show TOTP +- Mostrar TOTP +- +- +- Show QR Code +- Exibir QR Code +- +- +- Set up TOTP… +- Configurar TOTP +- +- +- Report a &Bug +- Reportar um &Bug +- +- +- Open Getting Started Guide +- Abra o Guia de Introdução +- +- +- &Online Help +- &Ajuda Online +- +- +- Go to online documentation +- Ir para documentação online +- +- +- Open User Guide +- Abrir Guia do Usuário +- +- +- Save Database Backup... +- Salvar Backup do Banco de Dados... +- +- +- Add key to SSH Agent +- Adicionar chave ao Agente SSH +- +- +- Remove key from SSH Agent +- Remover a chave do agente SSH +- +- +- Compact Mode +- Modo Compacto +- +- +- Automatic +- Automático +- +- +- Light +- Claro +- +- +- Dark +- Escuro +- +- +- Classic (Platform-native) +- Clássico (nativo da plataforma) +- +- +- Show Toolbar +- Exibir Barra de Ferramentas +- +- +- Show Preview Panel +- Exibir Painel de Prévia +- +- +- Don't show again for this version +- Não exibir novamenete para esta versão +- +- +- Restart Application? +- Reiniciar Aplicativo? +- +- +- You must restart the application to apply this setting. Would you like to restart now? +- Você precisa reiniciar o aplicativo para aplicar esta configuração. Você gostaria de reiniciar agora? +- +- +- Perform Auto-Type Sequence +- +- +- +- {USERNAME} +- +- +- +- {USERNAME}{ENTER} +- +- +- +- {PASSWORD} +- +- +- +- {PASSWORD}{ENTER} +- +- +- +- Always on Top +- +- +- +- Hide Usernames +- Ocultar nome de usuários +- +- +- Hide Passwords +- Ocultar senhas +- +- +- +- ManageDatabase +- +- Database settings +- Configurações do Banco de Dados +- +- +- Edit database settings +- Editar configurações de banco de dados +- +- +- Unlock database +- Destrancar banco de dados +- +- +- Unlock database to show more information +- Destranque o banco de dados para mostrar mais informações +- +- +- Lock database +- Trancar Banco de Dados +- +- +- +- ManageSession +- +- Disconnect +- Desconectar +- +- +- Disconnect this application +- Desconectar este aplicativo +- +- +- +- Merger +- +- Creating missing %1 [%2] +- Criando %1 [%2] +- +- +- Relocating %1 [%2] +- Realocando %1 [%2] +- +- +- Overwriting %1 [%2] +- Substituindo %1 [%2] +- +- +- older entry merged from database "%1" +- entrada mais antiga mesclada do banco de dados "%1" +- +- +- Adding backup for older target %1 [%2] +- Adicionando backup para o alvo mais antigo %1 [%2] +- +- +- Adding backup for older source %1 [%2] +- Adicionando backup para fonte mais antiga %1 [%2] +- +- +- Reapplying older target entry on top of newer source %1 [%2] +- Reaplicar entradas alvo antigas em cima da fonte nova %1 [%2] +- +- +- Reapplying older source entry on top of newer target %1 [%2] +- Reaplicar fonte alvo antiga em cima do alvo novo %1 [%2] +- +- +- Synchronizing from newer source %1 [%2] +- Sincronizando de uma fonte mais nova %1 [%2] +- +- +- Synchronizing from older source %1 [%2] +- Sincronizando a partir da fonte antiga %1 [%2] +- +- +- Deleting child %1 [%2] +- Deletar herdeiro %1 [%2] +- +- +- Deleting orphan %1 [%2] +- Excluindo órfã %1 [%2] +- +- +- Changed deleted objects +- Objetos excluídos alterados +- +- +- Adding missing icon %1 +- Adicionando ícone ausente %1 +- +- +- Removed custom data %1 [%2] +- Remover dado personalizado %1 [%2] +- +- +- Adding custom data %1 [%2] +- Adicionar dado personalizado %1 [%2] +- +- +- +- NewDatabaseWizard +- +- Create a new KeePassXC database... +- Criar um novo banco de dados KeePassXC... +- +- +- Root +- Root group +- Raíz +- +- +- +- NewDatabaseWizardPage +- +- WizardPage +- Assistente +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Aqui você pode ajustar as configurações de criptografia do banco de dados. Não se preocupe, você pode alterá-los mais tarde nas configurações do banco de dados. +- +- +- Advanced Settings +- Definições avançadas +- +- +- Simple Settings +- Definições básicas +- +- +- Encryption Settings +- Configurações de criptografia +- +- +- +- NewDatabaseWizardPageDatabaseKey +- +- Database Credentials +- Credenciais do Banco de Dados +- +- +- A set of credentials known only to you that protects your database. +- Um conjunto de credenciais conhecidas apenas por você que protege seu banco de dados. +- +- +- +- NewDatabaseWizardPageEncryption +- +- Encryption Settings +- Definições de cifra +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Aqui você pode ajustar as configurações de criptografia do banco de dados. Não se preocupe, você pode alterá-los mais tarde nas configurações do banco de dados. +- +- +- +- NewDatabaseWizardPageMetaData +- +- General Database Information +- Informações Gerais Sobre o Banco de Dados +- +- +- Please fill in the display name and an optional description for your new database: +- Por favor preencha o nome de exibição e uma descrição opcional para o seu novo banco de dados: +- +- +- +- NixUtils +- +- Password Manager +- Gerenciador de Senhas +- +- +- +- OpData01 +- +- Invalid OpData01, does not contain header +- OpData01 inválido. Não contém cabeçalho. +- +- +- Unable to read all IV bytes, wanted 16 but got %1 +- Não foi possível ler todos os IV bytes. Requer 16 mas só foi recebido %1 +- +- +- Unable to init cipher for opdata01: %1 +- Não foi possível iniciar criptografia para opdata01: %1 +- +- +- Unable to read all HMAC signature bytes +- Não foi possível ler todos os bytes de assinatura do HMAC +- +- +- Malformed OpData01 due to a failed HMAC +- OpData01 malformado devido a falha no HMAC +- +- +- Unable to process clearText in place +- Não foi possível processar clearText no lugar +- +- +- Expected %1 bytes of clear-text, found %2 +- Experado %1 bytes de clear-text. Encontrados %2 +- +- +- +- OpVaultOpenWidget +- +- Read Database did not produce an instance +-%1 +- Ler banco de dados não produz uma instância +-%1 +- +- +- +- OpVaultReader +- +- Directory .opvault must exist +- Diretório .opvault deve existir +- +- +- Directory .opvault must be readable +- Diretório .opvault deve ser legível +- +- +- Directory .opvault/default must exist +- Diretório .opvault/default deve existir +- +- +- Directory .opvault/default must be readable +- Diretório .opvault/default deve ser legível +- +- +- Unable to decode masterKey: %1 +- Não foi possível decodificar senha-mestre: %1 +- +- +- Unable to derive master key: %1 +- Não foi possível derivar senha mestre: %1 +- +- +- +- OpenSSHKey +- +- Invalid key file, expecting an OpenSSH key +- Arquivo chave inválido, é esperado uma chave OpenSSH +- +- +- PEM boundary mismatch +- Incompatibilidade de limite do PEM +- +- +- Base64 decoding failed +- Decodificação Base64 falhou +- +- +- Key file way too small. +- O modo do arquivo chave é muito pequeno. +- +- +- Key file magic header id invalid +- O id do cabeçalho mágico do arquivo chave é invalido +- +- +- Found zero keys +- Nenhuma chave encontrada +- +- +- Failed to read public key. +- Falha ao ler chave pública +- +- +- Corrupted key file, reading private key failed +- Arquivo chave corrompido, leitura da chave privada falhou +- +- +- No private key payload to decrypt +- Chave privada não carregada para decriptar +- +- +- Trying to run KDF without cipher +- Tentando rodar KDF sem cifra +- +- +- Passphrase is required to decrypt this key +- Senha é necessária para decriptar esta chave +- +- +- Key derivation failed, key file corrupted? +- A derivação da chave falhou, o arquivo chave esta corrompido? +- +- +- Decryption failed, wrong passphrase? +- Decriptação falhou, senha errada? +- +- +- Unexpected EOF while reading public key +- EOF inesperado enquanto lendo a chave pública. +- +- +- Unexpected EOF while reading private key +- EOF inesperado enquanto lendo a chave privada. +- +- +- Can't write public key as it is empty +- Não é possível escrever a chave pública enquanto estiver vazio. +- +- +- Unexpected EOF when writing public key +- EOF inesperado enquanto escrevendo a chave pública. +- +- +- Can't write private key as it is empty +- EOF inesperado enquanto escrevendo a chave privada. +- +- +- Unexpected EOF when writing private key +- EOF inesperado enquanto escrevendp a chave privada. +- +- +- Unsupported key type: %1 +- Tipo de chave não suportada: %1 +- +- +- Unknown cipher: %1 +- Cifra desconhecida: %1 +- +- +- Cipher IV is too short for MD5 kdf +- Cifra de IV é muito curta para MD5 kdf +- +- +- Unknown KDF: %1 +- KDF desconhecido: %1 +- +- +- Unknown key type: %1 +- Tipo de chave desconhecida: %1 +- +- +- +- PasswordEdit +- +- Passwords do not match +- Senhas não coicidem +- +- +- Passwords match so far +- Senhas não coincidem até agora +- +- +- Toggle Password (%1) +- Alternar Senha (%1) +- +- +- Generate Password (%1) +- Gerar Senha (%1) +- +- +- Warning: Caps Lock enabled! +- Alerta: Caps Lock habilitado! +- +- +- +- PasswordEditWidget +- +- Enter password: +- Insira senha: +- +- +- Confirm password: +- Confirmar senha: +- +- +- Password +- Senha +- +- +- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> +- <p>Uma senha é o principal método para proteger seu banco de dados.</p><p>Boas senhas são longas e únicas. KeePassXC pode gerar uma para você.</p> +- +- +- Passwords do not match. +- Senha não corresponde. +- +- +- Password field +- Campo de senha +- +- +- Repeat password field +- Repetir campo de senha +- +- +- +- PasswordGeneratorWidget +- +- %p% +- %p% +- +- +- strength +- Password strength +- força +- +- +- entropy +- entropia +- +- +- Password +- Senha +- +- +- Character Types +- Tipo de Caracteres +- +- +- Numbers +- Números +- +- +- Extended ASCII +- ASCII extendido +- +- +- Exclude look-alike characters +- Excluir caracteres semelhantes +- +- +- Pick characters from every group +- Selecione caracteres de todos os grupos +- +- +- &Length: +- &Tamanho: +- +- +- Passphrase +- Senha +- +- +- Wordlist: +- Lista de palavras: +- +- +- Word Separator: +- Separador de Palavras: +- +- +- Close +- Fechar +- +- +- Entropy: %1 bit +- Entropia: %1 bit +- +- +- Password Quality: %1 +- Qualidade da senha: %1 +- +- +- Poor +- Password quality +- Pobre +- +- +- Weak +- Password quality +- Fraco +- +- +- Good +- Password quality +- Bom +- +- +- Excellent +- Password quality +- Excelente +- +- +- Switch to advanced mode +- Mudar para o modo avançado +- +- +- Advanced +- Avançado +- +- +- Braces +- Colchetes +- +- +- Punctuation +- Pontuação +- +- +- Quotes +- Aspas +- +- +- Logograms +- Logo-gramas +- +- +- Character set to exclude from generated password +- Conjunto de caracteres para excluir da senha gerada +- +- +- Do not include: +- Não incluir: +- +- +- Add non-hex letters to "do not include" list +- Adicionar letras não hexadecimais à lista "não incluir" +- +- +- Hex +- Hex +- +- +- Excluded characters: "0", "1", "l", "I", "O", "|", "ï¹’" +- Caracteres excluídos: "0", "1", "l", "I", "O", "|", "ï¹’" +- +- +- Generated password +- Senha geradas +- +- +- Upper-case letters +- Letras maiúsculas +- +- +- Lower-case letters +- Letras minúsculas +- +- +- Special characters +- Caracteres especiais +- +- +- Math Symbols +- Símbolos matemáticos +- +- +- Dashes and Slashes +- Barras e traços +- +- +- Excluded characters +- Caracteres excluídos +- +- +- Hex Passwords +- Senhas hexadecimais +- +- +- Password length +- Tamanho da senha +- +- +- Word Case: +- Caixa da palavra: +- +- +- Regenerate password +- Gerar senha novamente +- +- +- Copy password +- Copiar senha +- +- +- lower case +- minúsculo +- +- +- UPPER CASE +- MAIÚSCULO +- +- +- Title Case +- Caixa do título +- +- +- Generate Password +- Gerar Senha +- +- +- Also choose from: +- Escolher também de: +- +- +- Additional characters to use for the generated password +- Caracteres adicionais a serem usados para a senha gerada +- +- +- Additional characters +- Caracteres adicionais +- +- +- Word Count: +- Número de Palavras: +- +- +- Esc +- Esc +- +- +- Apply Password +- Aplicar Senha +- +- +- Ctrl+S +- Ctrl+S +- +- +- Regenerate password (%1) +- Regenerar senha (%1) +- +- +- Special Characters +- Caracteres Especiais +- +- +- +- QApplication +- +- KeeShare +- KeeShare +- +- +- Statistics +- Estatísticas +- +- +- Very weak password +- Senha muito fraca +- +- +- Password entropy is %1 bits +- A entropia da senha é de %1 bits +- +- +- Weak password +- Senha fraca +- +- +- Used in %1/%2 +- Usada em %1/%2 +- +- +- Password is used %1 times +- A senha foi usada %1 vezes +- +- +- Password has expired +- Senha expirou +- +- +- Password expiry was %1 +- A expiração da senha foi %1 +- +- +- Password is about to expire +- A senha está prestes a expirar +- +- +- Password expires in %1 days +- A senha expira em %1 dias +- +- +- Password will expire soon +- A senha irá expirar em breve +- +- +- Password expires on %1 +- A senha expira em %1 +- +- +- Health Check +- Verificação de Saúde +- +- +- HIBP +- HIBP +- +- +- +- QMessageBox +- +- Overwrite +- Sobrescrever +- +- +- Delete +- Excluir +- +- +- Move +- Mover +- +- +- Empty +- Vazio +- +- +- Remove +- Remover +- +- +- Skip +- Ignorar +- +- +- Disable +- Desabilitar +- +- +- Merge +- Fundir +- +- +- Continue +- Continuar +- +- +- +- QObject +- +- Database not opened +- Banco de dados não foi aberto +- +- +- Database hash not available +- Hash de banco de dados não disponível +- +- +- Client public key not received +- Chave pública do cliente não recebida +- +- +- Cannot decrypt message +- Não é possível descriptografar a mensagem +- +- +- Action cancelled or denied +- Ação cancelada ou negada +- +- +- KeePassXC association failed, try again +- KeePassXC associação falhou, tente novamente +- +- +- Encryption key is not recognized +- Chave criptográfica não é reconhecida +- +- +- Incorrect action +- Ação incorreta +- +- +- Empty message received +- Mensagem vazia recebida +- +- +- No URL provided +- Nenhuma URL informada +- +- +- No logins found +- Nenhum login encontrado +- +- +- Unknown error +- Erro desconhecido +- +- +- Add a new entry to a database. +- Adicionar uma nova entrada ao banco de dados. +- +- +- Path of the database. +- Caminho do banco de dados +- +- +- Key file of the database. +- Arquivo-chave do banco de dados. +- +- +- path +- caminho +- +- +- Username for the entry. +- Usuário para a entrada. +- +- +- username +- usuário +- +- +- URL for the entry. +- URL para a entrada. +- +- +- URL +- URL +- +- +- Prompt for the entry's password. +- Solicitar senha da entrada. +- +- +- Generate a password for the entry. +- Gerar uma senha para a entrada. +- +- +- length +- tamanho +- +- +- Path of the entry to add. +- Caminho da entrada para adicionar. +- +- +- Path of the entry to clip. +- clip = copy to clipboard +- Caminho da entrada para copiar. +- +- +- Timeout in seconds before clearing the clipboard. +- Tempo limite em segundos antes de limpar a área de transferência. +- +- +- Edit an entry. +- Editar uma entrada. +- +- +- Title for the entry. +- Título para a entrada. +- +- +- title +- título +- +- +- Path of the entry to edit. +- Caminho da entrada para editar. +- +- +- Estimate the entropy of a password. +- Calcular a entropia da senha. +- +- +- Password for which to estimate the entropy. +- Senha para o qual deseja calcular a entropia. +- +- +- Perform advanced analysis on the password. +- Execute análise avançada sobre a senha. +- +- +- +- +-Available commands: +- +- +- +-Comandos disponíveis: +- +- +- +- Name of the command to execute. +- Nome do comando para executar. +- +- +- List database entries. +- Listar entradas do banco de dados. +- +- +- Path of the group to list. Default is / +- Caminho do grupo para à lista. O padrão é / +- +- +- Find entries quickly. +- Encontrar entradas rapidamente. +- +- +- Search term. +- Termo de pesquisa. +- +- +- Merge two databases. +- Juntar dois bancos de dados. +- +- +- Path of the database to merge from. +- Caminho do banco de dados para combinar como base. +- +- +- Use the same credentials for both database files. +- Use as mesmas credenciais para ambos os arquivos de banco de dados. +- +- +- Key file of the database to merge from. +- Arquivo de chave do banco de dados para combinar como base. +- +- +- Show an entry's information. +- Mostre informações de uma entrada. +- +- +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- Nomes de atributos para exibir. Esta opção pode ser especificada mais de uma vez, com cada atributo mostrado um-por-linha em ordem determinada. Se nenhum atributo é especificado, um resumo dos atributos padrão é fornecido. +- +- +- attribute +- atributo +- +- +- Name of the entry to show. +- Nome da entrada para mostrar. +- +- +- NULL device +- Dispositivo NULL +- +- +- error reading from device +- erro ao ler dispositivo +- +- +- malformed string +- sequência de caracteres malformada +- +- +- missing closing quote +- apóstrofo de fechamento ausente +- +- +- Group +- Grupo +- +- +- Title +- Título +- +- +- Username +- Nome de usuário +- +- +- Password +- Senha +- +- +- Notes +- Notas +- +- +- Last Modified +- Última modificação +- +- +- Created +- Criado +- +- +- Browser Integration +- Integração com o Navegador +- +- +- SSH Agent +- Agente SSH +- +- +- Generate a new random diceware passphrase. +- Gere uma senha aleatória diceware novamente. +- +- +- Word count for the diceware passphrase. +- Contagem de palavra para a frase-chave diceware. +- +- +- Wordlist for the diceware generator. +-[Default: EFF English] +- Lista de palavras para o gerador diceware. +-[Padrão: EFF Inglês] +- +- +- Generate a new random password. +- Gerar nova senha aleatória. +- +- +- Could not create entry with path %1. +- Não foi possível criar uma entrada com o caminho %1. +- +- +- Enter password for new entry: +- Digite a senha para a nova entrada: +- +- +- Writing the database failed %1. +- Gravação do banco de dados falhou %1. +- +- +- Successfully added entry %1. +- Entrada adicionada com sucesso %1. +- +- +- Invalid timeout value %1. +- Valor de tempo limite inválido %1. +- +- +- Entry %1 not found. +- Entrada%1 não encontrada. +- +- +- Entry with path %1 has no TOTP set up. +- Entrada com caminho %1 não tem configuração TOTP +- +- +- Clearing the clipboard in %1 second(s)... +- Limpando a área de transferência em %1 segundo(s)...Limpando a área de transferência em %1 segundo(s)... +- +- +- Clipboard cleared! +- Ãrea de transferência apagada! +- +- +- Silence password prompt and other secondary outputs. +- Pergunta por senha em silêncio e outras saídas secundárias. +- +- +- count +- CLI parameter +- contagem +- +- +- Could not find entry with path %1. +- Não foi possível encontrar a entrada com o caminho %1. +- +- +- Not changing any field for entry %1. +- Não mudar qualquer campo para a entrada %1. +- +- +- Enter new password for entry: +- Digite uma nova senha para entrada: +- +- +- Writing the database failed: %1 +- Gravação do banco de dados falhou: %1 +- +- +- Successfully edited entry %1. +- Entrada editada com sucesso %1. +- +- +- Length %1 +- Tamanho %1 +- +- +- Entropy %1 +- Entropia %1 +- +- +- Log10 %1 +- Log10 %1 +- +- +- Multi-word extra bits %1 +- Bits extra multi-palavra %1 +- +- +- Type: Bruteforce +- Tipo: Força Bruta +- +- +- Type: Dictionary +- Tipo: Dicionário +- +- +- Type: Dict+Leet +- Tipo: Dict+leet +- +- +- Type: User Words +- Tipo: Palavras do usuário +- +- +- Type: User+Leet +- Tipo: Usuário+Leet +- +- +- Type: Repeated +- Tipo: Repetido +- +- +- Type: Sequence +- Tipo: Sequência +- +- +- Type: Spatial +- Tipo: Espacial +- +- +- Type: Date +- Tipo: Data +- +- +- Type: Bruteforce(Rep) +- Tipo: Bruteforce(Rep) +- +- +- Type: Dictionary(Rep) +- Tipo: Dicionário(Rep) +- +- +- Type: Dict+Leet(Rep) +- Tipo: Dicionário+Leet(Rep) +- +- +- Type: User Words(Rep) +- Tipo: Palavras do usuário(Rep) +- +- +- Type: User+Leet(Rep) +- Tipo: Usuário+Leet(Rep) +- +- +- Type: Repeated(Rep) +- Tipo: Repetido(Rep) +- +- +- Type: Sequence(Rep) +- Tipo: Sequência(Rep) +- +- +- Type: Spatial(Rep) +- Tipo: Espacial(Rep) +- +- +- Type: Date(Rep) +- Tipo: Data(Rep) +- +- +- Type: Unknown%1 +- Tipo: Desconhecido%1 +- +- +- Entropy %1 (%2) +- Entropia %1 (%2) +- +- +- *** Password length (%1) != sum of length of parts (%2) *** +- *** Comprimento da senha (%1) != soma do comprimento das partes (%2) *** +- +- +- Failed to load key file %1: %2 +- Falha ao carregar o arquivo de chave %1: %2 +- +- +- Length of the generated password +- Comprimento da senha gerada +- +- +- Use lowercase characters +- Usar caracteres minúsculos +- +- +- Use uppercase characters +- Usar caracteres maiúsculos +- +- +- Use special characters +- Usar caracteres especiais +- +- +- Use extended ASCII +- Use estendido ASCII +- +- +- Exclude character set +- Excluir conjunto de caracteres +- +- +- chars +- caracteres +- +- +- Exclude similar looking characters +- Excluir caracteres parecidos +- +- +- Include characters from every selected group +- Incluir caracteres de cada grupo selecionado +- +- +- Recursively list the elements of the group. +- Listar recursivamente os elementos do grupo. +- +- +- Cannot find group %1. +- Não foi possível encontrar o grupo %1. +- +- +- Error reading merge file: +-%1 +- Erro ao ler arquivo para fundir: +-%1 +- +- +- Unable to save database to file : %1 +- Não foi possível salvar banco de dados no arquivo: %1 +- +- +- Unable to save database to file: %1 +- Não foi possível salvar bando de dados no arquivo: %1 +- +- +- Successfully recycled entry %1. +- Entrada %1 reciclada com sucesso +- +- +- Successfully deleted entry %1. +- Entrada %1 deletada com sucesso +- +- +- Show the entry's current TOTP. +- Mostrar o TOTP atual da entrada. +- +- +- ERROR: unknown attribute %1. +- ERRO: atributo desconhecido %1. +- +- +- No program defined for clipboard manipulation +- Nenhum programa definido para manipulação da área de transferência +- +- +- file empty +- arquivo vazio +- +- +- %1: (row, col) %2,%3 +- %1: (linha, coluna) %2,%3 +- +- +- AES-KDF (KDBX 4) +- AES-KDF (KDBX 4) +- +- +- AES-KDF (KDBX 3.1) +- AES-KDF (KDBX 3.1) +- +- +- Invalid Settings +- TOTP +- Configurações Inválidas +- +- +- Invalid Key +- TOTP +- Chave Inválida +- +- +- Message encryption failed. +- Criptografia de mensagens falhou. +- +- +- No groups found +- Nenhum grupo encontrado +- +- +- Create a new database. +- Criar um novo banco de dados. +- +- +- File %1 already exists. +- Arquivo %1 já existe. +- +- +- Loading the key file failed +- O carregamento do arquivo de chave falhou +- +- +- No key is set. Aborting database creation. +- Nenhuma chave definida. Abortando a criação de banco de dados. +- +- +- Failed to save the database: %1. +- Falha ao salvar o banco de dados: %1. +- +- +- Successfully created new database. +- Novo banco de dados criado com sucesso. +- +- +- Creating KeyFile %1 failed: %2 +- Criação de Arquivo-Chave %1 falhou: %2 +- +- +- Loading KeyFile %1 failed: %2 +- Carregamento de Arquivo-Chave %1 falhou: %2 +- +- +- Path of the entry to remove. +- Caminho para remover entrada. +- +- +- Existing single-instance lock file is invalid. Launching new instance. +- O arquivo cadeado de instância única existente é inválido. Iniciando nova instância. +- +- +- The lock file could not be created. Single-instance mode disabled. +- O arquivo cadeado não pode ser criado. Modo de instância única desabilitado. +- +- +- KeePassXC - cross-platform password manager +- KeePassXC - gerenciador de senhas multiplataforma +- +- +- filenames of the password databases to open (*.kdbx) +- nome de arquivo do banco de dados de senhas a ser aberto (*.kdbx) +- +- +- path to a custom config file +- caminho para um arquivo de configuração personalizado +- +- +- key file of the database +- arquivo-chave do banco de dados +- +- +- read password of the database from stdin +- ler a senha do banco de dados da entrada padrão +- +- +- Another instance of KeePassXC is already running. +- Outra instância do KeePassXC já está rodando. +- +- +- Fatal error while testing the cryptographic functions. +- Erro fatal enquanto testava as funções criptográficas. +- +- +- KeePassXC - Error +- KeePassXC - Erro +- +- +- Database password: +- Senha do banco de dados: +- +- +- Cannot create new group +- Não é possível criar um novo grupo +- +- +- Deactivate password key for the database. +- Desativar chave de senha para o banco de dados. +- +- +- Displays debugging information. +- Mostrar informações de debug. +- +- +- Deactivate password key for the database to merge from. +- Desativar chave de senha para o banco de dados a qual será mesclado. +- +- +- Version %1 +- Versão %1 +- +- +- Build Type: %1 +- Tipo da Build: %1 +- +- +- Revision: %1 +- Revisão: %1 +- +- +- Distribution: %1 +- Distribuição: %1 +- +- +- Debugging mode is disabled. +- Modo de debug desativado. +- +- +- Debugging mode is enabled. +- Modo de debug ativado. +- +- +- Operating system: %1 +-CPU architecture: %2 +-Kernel: %3 %4 +- Sistema operacional: %1 +-Arquitetura da CPU: %2 +-Kernel: %3 %4 +- +- +- Auto-Type +- Auto-Digitar +- +- +- KeeShare (signed and unsigned sharing) +- KeeShare (compartilhamento assinado e não assinado) +- +- +- KeeShare (only signed sharing) +- KeeShare (somente compartilhamento assinado) +- +- +- KeeShare (only unsigned sharing) +- KeeShare (somente compartilhamento não assinado) +- +- +- YubiKey +- YubiKey +- +- +- TouchID +- TouchID +- +- +- None +- Nada +- +- +- Enabled extensions: +- Extensões habilitadas: +- +- +- Cryptographic libraries: +- Bibliotecas de criptografia: +- +- +- Cannot generate a password and prompt at the same time! +- Não foi possível gerar uma senha e um alerta ao mesmo tempo! +- +- +- Adds a new group to a database. +- Adicionar um novo grupo ao banco de dados. +- +- +- Path of the group to add. +- Caminho para adicionar o grupo +- +- +- Group %1 already exists! +- Grupo %1 já existe! +- +- +- Group %1 not found. +- Grupo %1 não encontrado. +- +- +- Successfully added group %1. +- Grupo %1 adicionado com sucesso. +- +- +- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. +- Checar se alguma senha vazou publicamente. NOMEDOARQUIVO deve ser o caminho do arquivo listando hashes SHA-1 de senhas vazadas no formato HIBP, assim como disponível em https://haveibeenpwned.com/Passwords. +- +- +- FILENAME +- NOMEDOARQUIVO +- +- +- Analyze passwords for weaknesses and problems. +- Analisar senhas por fraquezas e problemas. +- +- +- Failed to open HIBP file %1: %2 +- Falha ao abrir arquivo HIBP %1: %2 +- +- +- Evaluating database entries against HIBP file, this will take a while... +- Avaliando entradas no banco de dados com arquivo HIBP. Isto pode demorar um pouco... +- +- +- Close the currently opened database. +- Fechar o atual banco de dados aberto. +- +- +- Display this help. +- Mostrar esta ajuda. +- +- +- slot +- campo +- +- +- Invalid word count %1 +- Contador de palavra %1 inválido +- +- +- The word list is too small (< 1000 items) +- A lista de palavras é muito pequena (<1000 itens) +- +- +- Exit interactive mode. +- Sair do modo interativo. +- +- +- Exports the content of a database to standard output in the specified format. +- Exportar o conteúdo do banco de dados para um padrão de saída no formato especificado. +- +- +- Unable to export database to XML: %1 +- Não foi possível exportar o banco de dados para XML: %1 +- +- +- Unsupported format %1 +- Formato %1 não suportado +- +- +- Use numbers +- Usar números +- +- +- Invalid password length %1 +- Tamanho de senha inválido: %1 +- +- +- Display command help. +- Exibir comando de ajuda. +- +- +- Available commands: +- Comandos disponíveis: +- +- +- Import the contents of an XML database. +- Importar o conteúdo de um banco de dados XML. +- +- +- Path of the XML database export. +- Caminho do banco de dados XML exportado. +- +- +- Path of the new database. +- Caminho do novo banco de dados. +- +- +- Successfully imported database. +- Banco de dados importado com sucesso. +- +- +- Unknown command %1 +- Comando desconhecido %1 +- +- +- Flattens the output to single lines. +- Achatar as saídas em únicas linhas. +- +- +- Only print the changes detected by the merge operation. +- Somente exibir mudanças detectadas pela operação de mesclagem. +- +- +- Yubikey slot for the second database. +- Campo Yubikey para o segundo banco de dados. +- +- +- Successfully merged %1 into %2. +- Sucesso ao mesclar %1 com %2. +- +- +- Database was not modified by merge operation. +- O banco de dados não foi modificado pela operação de mesclagem. +- +- +- Moves an entry to a new group. +- Mover uma entrada para um novo grupo. +- +- +- Path of the entry to move. +- Caminho da entrada para mover. +- +- +- Path of the destination group. +- Caminho do grupo de destino. +- +- +- Could not find group with path %1. +- Não foi possível encontrar o grupo com o caminho %1 +- +- +- Entry is already in group %1. +- Entrada já está no grupo %1. +- +- +- Successfully moved entry %1 to group %2. +- Sucesso ao mover entrada %1 para o grupo %2. +- +- +- Open a database. +- Abrir um banco de dados. +- +- +- Path of the group to remove. +- Caminho do grupo para remover. +- +- +- Cannot remove root group from database. +- Não é possível remover o grupo raiz do banco de dados. +- +- +- Successfully recycled group %1. +- Sucesso ao reciclar grupo %1. +- +- +- Successfully deleted group %1. +- Sucesso ao apagar grupo %1. +- +- +- Failed to open database file %1: not found +- Falha ao abrir arquivo de banco de dados %1: não encontrado +- +- +- Failed to open database file %1: not a plain file +- Falha ao abrir arquivo de banco de dados %1: não é um arquivo válido +- +- +- Failed to open database file %1: not readable +- Falha ao abrir arquivo de banco de dados %1: não é legível +- +- +- Enter password to unlock %1: +- Digite a senha para destrancar %1: +- +- +- Invalid YubiKey slot %1 +- Campo YubiKey inválido %1 +- +- +- Enter password to encrypt database (optional): +- Digite a senha para encriptar seu banco de dados (opcional): +- +- +- HIBP file, line %1: parse error +- Arquivo HIBP, linha %1: parse error +- +- +- Secret Service Integration +- Integração com Secret Service +- +- +- User name +- Nome de usuário +- +- +- Password for '%1' has been leaked %2 time(s)! +- A senha para '%1' foi vazada %2 vez(es)!A senha para '%1' foi vazada %2 vez(es)! +- +- +- Invalid password generator after applying all options +- Gerador de senhas inválido após aplicar todas as opções +- +- +- Show the protected attributes in clear text. +- Mostrar os atributos protegidos como texto legível. +- +- +- Browser Plugin Failure +- Falha no Plugin do Navegador +- +- +- Could not save the native messaging script file for %1. +- Não foi possível salvar o arquivo de script do sistema de mensagens nativo para %1 +- +- +- Copy the given attribute to the clipboard. Defaults to "password" if not specified. +- Copie o atributo fornecido para a área de transferência. O padrão é "senha", se não especificado. +- +- +- Copy the current TOTP to the clipboard (equivalent to "-a totp"). +- Copia o TOTP atual para a área de transferência (equivalente a "-a totp"). +- +- +- Copy an entry's attribute to the clipboard. +- Copia um atributo da entrada para a área de transferência. +- +- +- ERROR: Please specify one of --attribute or --totp, not both. +- ERRO: Por favor, especifique um de --attribute ou --totp, não ambos. +- +- +- ERROR: attribute %1 is ambiguous, it matches %2. +- ERRO: o atributo %1 é ambíguo, corresponde a %2. +- +- +- Attribute "%1" not found. +- Atributo "%1" não encontrado +- +- +- Entry's "%1" attribute copied to the clipboard! +- Atributo "%1" da entrada copiado para a área de transferência! +- +- +- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). +- Slot Yubikey e serial opcional usado para acessar o banco de dados (por exemplo: 1:7370001). +- +- +- slot[:serial] +- slot[:serial] +- +- +- Target decryption time in MS for the database. +- Tempo de descriptografia de destino em MS para o banco de dados. +- +- +- time +- tempo +- +- +- Set the key file for the database. +- Define o arquivo-chave para o banco de dados. +- +- +- Set a password for the database. +- Define uma senha para o banco de dados. +- +- +- Invalid decryption time %1. +- Tempo de descriptografia inválido %1. +- +- +- Target decryption time must be between %1 and %2. +- O tempo de descriptografia de destino deve ser entre %1 e %2. +- +- +- Failed to set database password. +- Falha ao definir a senha do banco de dados. +- +- +- Benchmarking key derivation function for %1ms delay. +- Função de derivação de chave de benchmarking para atraso de %1 ms. +- +- +- Setting %1 rounds for key derivation function. +- Configurando %1 rodadas para a função de derivação de chave. +- +- +- error while setting database key derivation settings. +- erro ao definir configurações de derivação da chave do banco de dados. +- +- +- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. +- Formato usado ao exportar. Escolhas disponíveis são 'xml' ou 'csv'. O padrão é 'xml'. +- +- +- Unable to import XML database: %1 +- Não foi possível importar banco de dados XML: %1 +- +- +- Show a database's information. +- Mostra as informações de um banco de dados. +- +- +- UUID: +- UUID: +- +- +- Name: +- Nome: +- +- +- Description: +- Descrição: +- +- +- Cipher: +- Cifra: +- +- +- KDF: +- KDF: +- +- +- Recycle bin is enabled. +- A Lixeira está habilitada. +- +- +- Recycle bin is not enabled. +- A Lixeira não está habilitada. +- +- +- Invalid command %1. +- Comando inválido: %1. +- +- +- Invalid YubiKey serial %1 +- Serial YubiKey inválido %1 +- +- +- Please touch the button on your YubiKey to continue… +- Por favor, pressione o botão em seu YubiKey para continuar... +- +- +- Do you want to create a database with an empty password? [y/N]: +- Você deseja criar um banco de dados com uma senha vazia? [S/N]: +- +- +- Repeat password: +- Repetir senha: +- +- +- Error: Passwords do not match. +- Erro: as senhas não correspondem. +- +- +- All clipping programs failed. Tried %1 +- +- Todos os programas de recorte falharam. Tentativas: %1 +- +- +- AES (%1 rounds) +- AES (%1 rodadas) +- +- +- AES 256-bit +- AES 256-bit +- +- +- Twofish 256-bit +- Twofish 256-bit +- +- +- ChaCha20 256-bit +- ChaCha20: 256-bit {20 256-?} +- +- +- Benchmark %1 delay +- Atraso de benchmark %1 +- +- +- %1 ms +- milliseconds +- %1 ms%1 ms +- +- +- %1 s +- seconds +- %1 s%1 s +- +- +- path to a custom local config file +- +- +- +- WARNING: You are using an old key file format which KeePassXC may +-stop supporting in the future. +- +-Please consider generating a new key file. +- +- +- +- Argon2%1 (%2 rounds, %3 KB) +- +- +- +- Argon2d (KDBX 4 – recommended) +- +- +- +- Argon2id (KDBX 4) +- +- +- +- TOTP +- TOTP +- +- +- Icon +- Ãcone +- +- +- Unsupported key file version: %1 +- +- +- +- Checksum mismatch! Key file may be corrupt. +- +- +- +- Unexpected key file data! Key file may be corrupt. +- +- +- +- +- QtIOCompressor +- +- Internal zlib error when compressing: +- Erro interno do zlib ao compactar: +- +- +- Error writing to underlying device: +- Erro ao gravar no dispositivo subjacente: +- +- +- Error opening underlying device: +- Erro ao abrir dispositivo subjacente: +- +- +- Error reading data from underlying device: +- Erro ao ler dados do dispositivo subjacente: +- +- +- Internal zlib error when decompressing: +- Erro interno do zlib ao descompactar: +- +- +- +- QtIOCompressor::open +- +- The gzip format not supported in this version of zlib. +- Sem suporte ao formato gzip nesta versão do zlib. +- +- +- Internal zlib error: +- Erro interno do zlib: +- +- +- +- ReportsWidgetHealthcheck +- +- Also show entries that have been excluded from reports +- Exibir também entradas que foram excluídas dos relatórios +- +- +- Hover over reason to show additional details. Double-click entries to edit. +- Passe o mouse sobre o motivo para mostrar detalhes adicionais. Clique duas vezes nas entradas para editar. +- +- +- Bad +- Password quality +- Ruim +- +- +- Bad — password must be changed +- Ruim — a senha precisa ser mudada +- +- +- Poor +- Password quality +- Pobre +- +- +- Poor — password should be changed +- Pobre — a senha precisa ser mudada +- +- +- Weak +- Password quality +- Fraco +- +- +- Weak — consider changing the password +- Fraca — considere mudar a senha +- +- +- (Excluded) +- (Excluída) +- +- +- This entry is being excluded from reports +- Esta entrada está sendo excluída dos relatórios +- +- +- Please wait, health data is being calculated... +- Por favor espere, os dados de saúde estão sendo calculados... +- +- +- Congratulations, everything is healthy! +- Parabéns, tudo está saudável! +- +- +- Title +- Título +- +- +- Path +- Caminho +- +- +- Score +- Pontuação +- +- +- Reason +- Motivo +- +- +- Edit Entry... +- Editar Entrada... +- +- +- Exclude from reports +- Excluir dos relatórios +- +- +- +- ReportsWidgetHibp +- +- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. +- CUIDADO: Este relatório requer o envio de informações para o serviço online Have I Been Pwned (https://haveibeenpwned.com). Se você prosseguir, as senhas do banco de dados serão criptografadas e os cinco primeiros caracteres desses hashes serão enviados com segurança para este serviço. Seu banco de dados permanece seguro e não pode ser reconstituído com essas informações. No entanto, o número de senhas enviadas e o seu endereço IP serão expostos a este serviço. +- +- +- Perform Online Analysis +- Executar Análise Online +- +- +- Also show entries that have been excluded from reports +- Exibir também entradas que foram excluídas dos relatórios +- +- +- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. +- Esta versão do KeePassXC não possui funções de rede. A rede é necessária para verificar suas senhas no banco de dados do Have I Been Pwned. +- +- +- Congratulations, no exposed passwords! +- Parabéns, nenhuma senha expostas! +- +- +- Title +- Título +- +- +- Path +- Caminho +- +- +- Password exposed… +- Senha exposta... +- +- +- (Excluded) +- (Excluída) +- +- +- This entry is being excluded from reports +- Esta entrada está sendo excluída dos relatórios +- +- +- once +- uma vez +- +- +- up to 10 times +- acima de 10 vezes +- +- +- up to 100 times +- acima de 100 vezes +- +- +- up to 1000 times +- acima de 1000 vezes +- +- +- up to 10,000 times +- acima de 10000 vezes +- +- +- up to 100,000 times +- acima de 100000 vezes +- +- +- up to a million times +- acima de um milhão de vezes +- +- +- millions of times +- milhões de vezes +- +- +- Edit Entry... +- Editar Entrada... +- +- +- Exclude from reports +- Excluir dos relatórios +- +- +- +- ReportsWidgetStatistics +- +- Hover over lines with error icons for further information. +- Passe o mouse por cima dos ícones de erro para maiores informações. +- +- +- Name +- Nome +- +- +- Value +- Valor +- +- +- Please wait, database statistics are being calculated... +- Por favor espere, as estatísticas do banco de dados estão sendo calculadas... +- +- +- Database name +- Nome do banco de dados +- +- +- Description +- Descrição +- +- +- Location +- Localização +- +- +- Last saved +- Salvo por último em +- +- +- Unsaved changes +- Mudanças não-salvas +- +- +- yes +- sim +- +- +- no +- não +- +- +- The database was modified, but the changes have not yet been saved to disk. +- O banco de dados foi modificado, mas as mudanças ainda não foram salvas no disco. +- +- +- Number of groups +- Número de grupos +- +- +- Number of entries +- Número de entradas +- +- +- Number of expired entries +- Número de entradas expiradas +- +- +- The database contains entries that have expired. +- O banco de dados contém entradas que expiraram. +- +- +- Unique passwords +- Senhas únicas +- +- +- Non-unique passwords +- Senhas não-únicas +- +- +- More than 10% of passwords are reused. Use unique passwords when possible. +- Mais que 10% das senhas estão sendo reutilizadas. Use senhas únicas quando possível. +- +- +- Maximum password reuse +- Máximo de reusos da senha +- +- +- Some passwords are used more than three times. Use unique passwords when possible. +- Algumas senhas são usadas mais do que três vezes. Use senhas únicas quando possível. +- +- +- Number of short passwords +- Números de senhas pequenas +- +- +- Recommended minimum password length is at least 8 characters. +- Comprimento mínimo recomendado de senha é pelo menos 8 caracteres. +- +- +- Number of weak passwords +- Número de senhas fracas +- +- +- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. +- Recomendamos o uso de senhas longas e randomizados com uma classificação de 'bom' ou 'excelente'. +- +- +- Entries excluded from reports +- Entradas excluídas dos relatórios +- +- +- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. +- Excluindo entradas de relatórios. Por exemplo: porque elas têm uma senha ruim, não é necessariamente um problema, mas você deve ficar de olho nelas. +- +- +- Average password length +- Comprimento médio da senha +- +- +- %1 characters +- %1 caracteres +- +- +- Average password length is less than ten characters. Longer passwords provide more security. +- O tamanho médio das senhas é menor que dez caracteres. Senhas maiores são mais seguras. +- +- +- +- SSHAgent +- +- Agent connection failed. +- Falha na conexão do agente. +- +- +- Agent protocol error. +- Erro de protocolo do agente +- +- +- No agent running, cannot add identity. +- Nenhum agente em execução, não é possível adicionar identidade. +- +- +- No agent running, cannot remove identity. +- Nenhum agente em execução, não é possível remover a identidade. +- +- +- Agent refused this identity. Possible reasons include: +- Agente recusou essa identidade. Possíveis razões incluem: +- +- +- The key has already been added. +- O atalho já foi adicionado. +- +- +- Restricted lifetime is not supported by the agent (check options). +- Vida útil limitada não é suportado pelo agente (verificar opções). +- +- +- A confirmation request is not supported by the agent (check options). +- Uma solicitação de confirmação não é suportado pelo agente (verificar opções). +- +- +- Key identity ownership conflict. Refusing to add. +- Conflito de propriedade da identidade principal. Recusando-se a adicionar. +- +- +- No agent running, cannot list identities. +- Nenhum agente em execução, não é possível listar identidades. +- +- +- +- SearchHelpWidget +- +- Search Help +- Ajuda com a Busca +- +- +- Search terms are as follows: [modifiers][field:]["]term["] +- Termos de pesquisa são as seguintes: [modifiers][field:]["]term["] +- +- +- Every search term must match (ie, logical AND) +- Cada termo pesquisado deve corresponder (exemplo, logical AND) +- +- +- Modifiers +- Modificadores +- +- +- exclude term from results +- excluir termo dos resultados +- +- +- match term exactly +- encontrar termo exato +- +- +- use regex in term +- usar regex no termo +- +- +- Fields +- Campos +- +- +- Term Wildcards +- Termos Coringas +- +- +- match anything +- coincidir com qualquer coisa +- +- +- match one +- coincidir com um +- +- +- logical OR +- lógico OU +- +- +- Examples +- Exemplos +- +- +- +- SearchWidget +- +- Search +- Pesquisar +- +- +- Limit search to selected group +- Limitar busca ao grupo selecionado +- +- +- Search Help +- Ajuda com a Busca +- +- +- Search (%1)... +- Search placeholder text, %1 is the keyboard shortcut +- Buscar (%1)... +- +- +- Case sensitive +- Diferenciar maiúsculas e minúsculas +- +- +- +- SettingsWidgetFdoSecrets +- +- Options +- Opções +- +- +- Enable KeepassXC Freedesktop.org Secret Service integration +- Habilitar integração KeePassXC Freedesktop.org Secret Service +- +- +- General +- Geral +- +- +- Show notification when credentials are requested +- Mostrar notificação quando credenciais forem solicitadas +- +- +- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> +- <html><head/><body><p>Se a lixeira estiver habilitado para o banco de dados, as entradas serão movidas para a lixeira diretamente. Por outro lado, elas serão apagadas sem confirmação.</p><p>Você irá ser alertado se alguma entrada for referenciada por outras.</p></body></html> +- +- +- Exposed database groups: +- Grupos do banco de dados exposto: +- +- +- Authorization +- Autorização +- +- +- These applications are currently connected: +- Esses aplicativos estão atualmente conectados: +- +- +- Don't confirm when entries are deleted by clients +- Não confirmar quando entradas são excluídas por clientes +- +- +- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. +- <b>Erro:</b> Falha na conexão com o DBus. Por favor, verifique sua configuração do DBus. +- +- +- <b>Warning:</b> +- <b>Aviso:</b> +- +- +- Save current changes to activate the plugin and enable editing of this section. +- Salve as alterações atuais para ativar o plugin e ativar a edição desta seção. +- +- +- +- SettingsWidgetKeeShare +- +- Active +- Ativo +- +- +- Allow export +- Permitir exportação +- +- +- Allow import +- Permitir importação +- +- +- Own certificate +- Certificado próprio +- +- +- Fingerprint: +- Impressão digital: +- +- +- Certificate: +- Certificado: +- +- +- Signer +- Signatário +- +- +- Key: +- Chave: +- +- +- Generate +- Gerar +- +- +- Import +- Importar +- +- +- Export +- Exportar +- +- +- Imported certificates +- Certificados importados +- +- +- Trust +- Confiar +- +- +- Ask +- Perguntar +- +- +- Untrust +- Não Confiar +- +- +- Remove +- Remover +- +- +- Path +- Caminho +- +- +- Status +- Status +- +- +- Fingerprint +- Fingerprint +- +- +- Certificate +- Certificado +- +- +- Trusted +- Confiável +- +- +- Untrusted +- Não Confiável +- +- +- Unknown +- Desconhecido +- +- +- key.share +- Filetype for KeeShare key +- key.share +- +- +- KeeShare key file +- Arquivo chave KeeShare +- +- +- All files +- Todos arquivos +- +- +- Select path +- Selecione o caminho +- +- +- Exporting changed certificate +- Exportando certificado alterado +- +- +- The exported certificate is not the same as the one in use. Do you want to export the current certificate? +- O certificado exportado não é o mesmo que está em uso. Você quer exportar o certificado atual? +- +- +- Signer: +- Signatário: +- +- +- Allow KeeShare imports +- Permitir KeeShare importar +- +- +- Allow KeeShare exports +- Permitir KeeShare exportar +- +- +- Only show warnings and errors +- Mostrar apenas avisos e erros +- +- +- Key +- Chave +- +- +- Signer name field +- Campo de nome do signatário +- +- +- Generate new certificate +- Gerar novo certificado +- +- +- Import existing certificate +- Importar certificado existente +- +- +- Export own certificate +- Exportar próprio certificado +- +- +- Known shares +- Compartilhamentos conhecidos +- +- +- Trust selected certificate +- Confiar nos certificados selecionados +- +- +- Ask whether to trust the selected certificate every time +- Perguntar se deve confiar nos certificados selecionados sempre +- +- +- Untrust selected certificate +- Não confiar nos certificados selecionados +- +- +- Remove selected certificate +- Remover certificado selecionado +- +- +- +- ShareExport +- +- Overwriting signed share container is not supported - export prevented +- Sobrescrever recipiente de compartilhamento assinado não é suportado - exportação impedida +- +- +- Could not write export container (%1) +- Não foi possível exportar recipiente (%1) +- +- +- Could not embed signature: Could not open file to write (%1) +- Não foi possível embutir assinatura: não foi possível abrir o arquivo para escrever (%1) +- +- +- Could not embed signature: Could not write file (%1) +- Não foi possível embutir assinatura: não foi possível escrever no arquivo (%1) +- +- +- Could not embed database: Could not open file to write (%1) +- Não foi possível embutir banco de dados: não foi possível abrir o arquivo para escrever (%1) +- +- +- Could not embed database: Could not write file (%1) +- Não foi possível incorporar o banco de dados: não foi possível gravar o arquivo (%1) +- +- +- Overwriting unsigned share container is not supported - export prevented +- A substituição de recipiente de compartilhamento não assinado não é suportada - exportação impedida +- +- +- Could not write export container +- Não foi possível escrever o recipiente de exportação +- +- +- Unexpected export error occurred +- Ocorreu um erro de exportação inesperado +- +- +- +- ShareImport +- +- Import from container without signature +- Importar do recipiente sem assinatura +- +- +- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? +- Não podemos verificar a origem do recipiente compartilhado porque ele não está assinado. Você realmente quer importar de %1? +- +- +- Import from container with certificate +- Importar do recipiente com certificado +- +- +- Do you want to trust %1 with the fingerprint of %2 from %3? +- Você quer confiar em %1 com a impressão digitar de %2 até %3? {1 ?}{2 ?} +- +- +- Not this time +- Não dessa vez +- +- +- Never +- Nunca +- +- +- Always +- Sempre +- +- +- Just this time +- Só desta vez +- +- +- Signed share container are not supported - import prevented +- Compartilhamento assinado de recipiente não é suportado - importação impedida +- +- +- File is not readable +- Arquivo não é legível +- +- +- Invalid sharing container +- Recipiente de compartilhamento inválido +- +- +- Untrusted import prevented +- Importação não confiável impedida +- +- +- Successful signed import +- Importação assinada bem-sucedida +- +- +- Unsigned share container are not supported - import prevented +- Compartilhamento não assinado de recipiente não é suportado - importação impedida +- +- +- Successful unsigned import +- Sucesso ao importar não assinado +- +- +- File does not exist +- Arquivo não existe +- +- +- Unknown share container type +- Tipo de compartilhamento de recipiente desconhecido +- +- +- +- ShareObserver +- +- Import from %1 failed (%2) +- Importação de %1 falhou (%2) +- +- +- Import from %1 successful (%2) +- Importado de %1 com sucesso (%2) +- +- +- Imported from %1 +- Importado de %1 +- +- +- Export to %1 failed (%2) +- Exportar para %1 falhou (%2) +- +- +- Export to %1 successful (%2) +- Exportado para %1 com sucesso (%2) +- +- +- Export to %1 +- Exportar para %1 +- +- +- Multiple import source path to %1 in %2 +- Importação de múltiplos caminhos de fontes para %1 em %2 +- +- +- Conflicting export target path %1 in %2 +- Alvo de caminhos %1 em %2 de exportação conflitante +- +- +- +- TotpDialog +- +- Timed Password +- Senha Temporária +- +- +- 000000 +- 000000 +- +- +- Copy +- Copiar +- +- +- Expires in <b>%n</b> second(s) +- Expira em <b>%n</b> segundo(s)Expira em <b>%n</b> segundo(s) +- +- +- +- TotpExportSettingsDialog +- +- Copy +- Copiar +- +- +- NOTE: These TOTP settings are custom and may not work with other authenticators. +- TOTP QR code dialog warning +- NOTA: Essas configurações de TOTP são personalizadas e podem não funcionar com outros autenticadores. +- +- +- There was an error creating the QR code. +- Ocorreu um erro ao criar o código QR. +- +- +- Closing in %1 seconds. +- Fechando em %1 segundos. +- +- +- +- TotpSetupDialog +- +- Setup TOTP +- Configurar TOTP +- +- +- Default RFC 6238 token settings +- Configurações de símbolo padrão RFC 6238 +- +- +- Steam token settings +- Configurações de steam token +- +- +- Use custom settings +- Usar configurações personalizadas +- +- +- Custom Settings +- Configurações Personalizadas +- +- +- Time step: +- Período de tempo: +- +- +- sec +- Seconds +- seg +- +- +- Code size: +- Tamanho do código: +- +- +- Secret Key: +- Chave secreta: +- +- +- Secret key must be in Base32 format +- Chave secreta deve ser em formato Base32 +- +- +- Secret key field +- Campo da chave secreta +- +- +- Algorithm: +- Algoritimo: +- +- +- Time step field +- Campo do passo de tempo +- +- +- digits +- dígitos +- +- +- Invalid TOTP Secret +- Segredo TOTP inválido +- +- +- You have entered an invalid secret key. The key must be in Base32 format. +-Example: JBSWY3DPEHPK3PXP +- Você digitou uma chave secreta inválida. A chave deve ser em formato Base32. +-Exemplo: JBSWY3DPEHPK3PXP +- +- +- Confirm Remove TOTP Settings +- Confirmar Remoção de Configurações TOTP +- +- +- Are you sure you want to delete TOTP settings for this entry? +- Tem certeza que quer apagar as configurações TOTP para esta entrada? +- +- +- +- URLEdit +- +- Invalid URL +- URL inválida +- +- +- +- UpdateCheckDialog +- +- Checking for updates +- Verificando atualizações +- +- +- Checking for updates... +- Verificando atualizações... +- +- +- Close +- Fechar +- +- +- Update Error! +- Erro de atualização! +- +- +- An error occurred in retrieving update information. +- Ocorreu um erro ao recuperar informações de atualização. +- +- +- Please try again later. +- Por favor, tente novamente mais tarde. +- +- +- Software Update +- Atualização de software +- +- +- A new version of KeePassXC is available! +- Uma nova versão do KeePassXC está disponível! +- +- +- KeePassXC %1 is now available — you have %2. +- KeePassXC %1 está agora disponível - você tem %2. +- +- +- Download it at keepassxc.org +- Faça o download em keepassxc.org +- +- +- You're up-to-date! +- Você está atualizado! +- +- +- KeePassXC %1 is currently the newest version available +- KeePassXC %1 é atualmente a versão mais recente disponível +- +- +- +- WelcomeWidget +- +- Start storing your passwords securely in a KeePassXC database +- Começe a guardar suas senhas de maneira segura em um banco de dados do KeePassXC +- +- +- Create new database +- Criar novo banco de dados +- +- +- Open existing database +- Abrir banco de dados existente +- +- +- Import from KeePass 1 +- Importar do KeePass 1 +- +- +- Import from CSV +- Importar arquivo CSV +- +- +- Recent databases +- Bancos de dados recentes +- +- +- Welcome to KeePassXC %1 +- Bem-vindo ao KeePassXC %1 +- +- +- Import from 1Password +- Importar do 1Password +- +- +- Open a recent database +- Abrir um banco de dados recente +- +- +- +- YubiKey +- +- %1 [%2] Configured Slot - %3 +- %1 [%2] Slot Configurado - %3 +- +- +- %1 [%2] Challenge Response - Slot %3 - %4 +- %1 [%2] Resposta do Desafio - Slot %3 - %4 +- +- +- Press +- Aperte +- +- +- Passive +- Passivo +- +- +- %1 Invalid slot specified - %2 +- Slot inválido do %1 especificado - %2 +- +- +- The YubiKey interface has not been initialized. +- A interface do YubiKey não foi inicializada. +- +- +- Hardware key is currently in use. +- A chave de hardware está atualmente em uso. +- +- +- Could not find hardware key with serial number %1. Please plug it in to continue. +- Não foi possível encontrar a chave de hardware com o número de série %1. Por favor, conecte-o para continuar. +- +- +- Hardware key timed out waiting for user interaction. +- Chave de hardware atingiu o tempo limite aguardando interação do usuário. +- +- +- A USB error ocurred when accessing the hardware key: %1 +- Ocorreu um erro de USB ao acessar a chave de hardware: %1 +- +- +- Failed to complete a challenge-response, the specific error was: %1 +- Falha ao completar o desafio-resposta, o erro específico foi: %1 +- +- +- +- YubiKeyEditWidget +- +- Refresh +- Atualizar +- +- +- YubiKey Challenge-Response +- YubiKey Desafio-Resposta +- +- +- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- <p>Se você possui uma <a href="https://www.yubico.com/">YubiKey</a>, você pode usá-la para segurança adicional.</p><p>A YubiKey requer que um de seus slots seja programado como <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Desafio-Resposta</a>.</p> +- +- +- Refresh hardware tokens +- Atualizar os tokens de hardware +- +- +- Hardware key slot selection +- Seleção de campo de chave de hardware +- +- +- Could not find any hardware keys! +- Não foi possível encontrar nenhuma chave de hardware! +- +- +- Selected hardware key slot does not support challenge-response! +- O slot de chave de hardware selecionado não suporta resposta a desafios! +- +- +- Detecting hardware keys… +- Detectando chaves de hardware... +- +- +- No hardware keys detected +- Nenhuma chave física detectada +- +- +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_pt_PT.ts keepassxc-2.6.4-patched/share/translations/keepassx_pt_PT.ts +--- keepassxc-2.6.4-orig/share/translations/keepassx_pt_PT.ts 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/translations/keepassx_pt_PT.ts 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7895 +0,0 @@ +- +- +- AboutDialog +- +- About KeePassXC +- Acerca de KeePassXC +- +- +- About +- Acerca +- +- +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- Reporte os erros em: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- +- +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- KeePassXC é distribuído nos termos da GNU General Public License (GPL) versão 2 ou versão 3 (por opção). +- +- +- Contributors +- Colaboradores +- +- +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Consulte os contributos em GitHub</a> +- +- +- Debug Info +- Informação de depuração +- +- +- Include the following information whenever you report a bug: +- Inclua as seguintes informações sempre que reportar um erro: +- +- +- Copy to clipboard +- Copiar para a área de transferência +- +- +- Project Maintainers: +- Manutenção do projeto: +- +- +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- Um agradecimento especial da equipa KeePassXC a debfx por ter criado a aplicação KeePassX. +- +- +- +- AgentSettingsWidget +- +- Use OpenSSH for Windows instead of Pageant +- Utilizar OpenSSH para Windows em vez de Pageant +- +- +- Enable SSH Agent integration +- Ativar integração de agente SSH +- +- +- SSH_AUTH_SOCK value +- Valor SSH_AUTH_SOCK +- +- +- SSH_AUTH_SOCK override +- Substituição SSH_AUTH_SOCK +- +- +- (empty) +- (vazio) +- +- +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- Não existe um 'socket' do agente SSh. Certifique-se que a variável de ambiente SSH_AUTH_SOCK existe ou defina uma sobreposição. +- +- +- SSH Agent connection is working! +- Ligação ao agente SSH a funcionar! +- +- +- +- ApplicationSettingsWidget +- +- Application Settings +- Definições da aplicação +- +- +- General +- Geral +- +- +- Security +- Segurança +- +- +- Access error for config file %1 +- Erro de acesso ao ficheiro %1 +- +- +- Icon only +- Apenas ícones +- +- +- Text only +- Apenas texto +- +- +- Text beside icon +- Texto ao lado dos ícones +- +- +- Text under icon +- Texto por baixo dos ícones +- +- +- Follow style +- Seguir estilo +- +- +- Reset Settings? +- Repor definições? +- +- +- Are you sure you want to reset all general and security settings to default? +- Tem a certeza de que deseja repor todas as definições para os valores padrão? +- +- +- Monochrome (light) +- Monocromático (claro) +- +- +- Monochrome (dark) +- Monocromático (escuro) +- +- +- Colorful +- Colorido +- +- +- You must restart the application to set the new language. Would you like to restart now? +- Tem que reiniciar a aplicação para aplicar o novo idioma. Reiniciar agora? +- +- +- +- ApplicationSettingsWidgetGeneral +- +- Basic Settings +- Definições básicas +- +- +- Startup +- Arranque +- +- +- Start only a single instance of KeePassXC +- Iniciar apenas uma instância do KeepassXC +- +- +- Minimize window at application startup +- Minimizar janela ao iniciar a aplicação +- +- +- File Management +- Gestão de ficheiros +- +- +- Backup database file before saving +- Criar backup da base de dados antes de guardar +- +- +- Automatically save after every change +- Guardar automaticamente a cada alteração +- +- +- Automatically reload the database when modified externally +- Recarregar base de dados se esta for modificada externamente +- +- +- Entry Management +- Gestão de entradas +- +- +- Use group icon on entry creation +- Utilizar ícone do grupo ao criar a entrada +- +- +- Minimize instead of app exit +- Minimizar aplicação em vez de fechar +- +- +- Show a system tray icon +- Mostrar ícone na bandeja do sistema +- +- +- Hide window to system tray when minimized +- Ao minimizar, ocultar janela na bandeja do sistema +- +- +- Auto-Type +- Escrita automática +- +- +- Use entry title to match windows for global Auto-Type +- Utilizar título da entrada para correspondência com a escrita automática +- +- +- Use entry URL to match windows for global Auto-Type +- Utilizar URL da entrada para correspondência com a escrita automática +- +- +- Always ask before performing Auto-Type +- Perguntar antes de executar a escrita automática +- +- +- ms +- Milliseconds +- ms +- +- +- Movable toolbar +- Barra de ferramentas amovível +- +- +- Remember previously used databases +- Memorizar últimas bases de dados utilizadas +- +- +- Load previously open databases on startup +- Ao iniciar, carregar as últimas base de dados utilizadas +- +- +- Remember database key files and security dongles +- Memorizar ficheiros-chave e dispositivos de segurança da base de dados +- +- +- Check for updates at application startup once per week +- Procurar por atualizações semanalmente +- +- +- Include beta releases when checking for updates +- Incluir versões beta ao procurar por atualizações +- +- +- Language: +- Idioma: +- +- +- (restart program to activate) +- (reinicie para aplicar as alterações) +- +- +- Minimize window after unlocking database +- Minimizar janela após desbloquear a base de dados +- +- +- Minimize when opening a URL +- Minimizar ao abrir um URL +- +- +- Hide window when copying to clipboard +- Ocultar janela ao copiar para a área de transferência +- +- +- Minimize +- Minimizar +- +- +- Drop to background +- Enviar para segundo plano +- +- +- Favicon download timeout: +- Tempo limite para descarregar o 'favicon': +- +- +- Website icon download timeout in seconds +- Tempo limite para descarregar os ícones dos sites (em segundos) +- +- +- sec +- Seconds +- seg +- +- +- Toolbar button style +- Estilo dos botões da barra de ferramentas +- +- +- Language selection +- Seleção de idioma +- +- +- Global auto-type shortcut +- Atalho global para escrita automática +- +- +- Auto-type character typing delay milliseconds +- Atraso para digitar a escrita automática de caracteres (milissegundos) +- +- +- Auto-type start delay milliseconds +- Atraso para iniciar a escrita automática (milissegundos) +- +- +- Automatically launch KeePassXC at system startup +- Iniciar KeePassXC ao arrancar o sistema +- +- +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- Guardar bases de dados em segurança (desative se ocorrerem erros com Dropbox e outros serviços) +- +- +- User Interface +- Interface +- +- +- Toolbar button style: +- Estilo dos botões da barra de ferramentas: +- +- +- Use monospaced font for notes +- Utilizar letra mono-espaçada para as notas +- +- +- Tray icon type: +- Ãcone na bandeja: +- +- +- Reset settings to default… +- Repor definições padrão... +- +- +- Auto-Type typing delay: +- Atraso para digitar a escrita automática: +- +- +- Global Auto-Type shortcut: +- Atalho global para escrita automática: +- +- +- Auto-Type start delay: +- Atraso para iniciar a escrita automática: +- +- +- Automatically save when locking database +- Guardar alterações ao bloquear a base de dados +- +- +- Automatically save non-data changes when locking database +- Guardar alterações a não-dados ao bloquear a base de dados +- +- +- Tray icon type +- Tipo de ícone na bandeja +- +- +- +- ApplicationSettingsWidgetSecurity +- +- Timeouts +- Tempo limite +- +- +- Clear clipboard after +- Limpar área de transferência após +- +- +- sec +- Seconds +- seg +- +- +- Lock databases after inactivity of +- Bloquear base de dados se inativa durante +- +- +- min +- min +- +- +- Forget TouchID after inactivity of +- Esquecer TouchID após inatividade de +- +- +- Convenience +- Conveniência +- +- +- Lock databases when session is locked or lid is closed +- Bloquear base de dados ao bloquear a sessão ou ao fechar a tampa do portátil +- +- +- Forget TouchID when session is locked or lid is closed +- Esquecer TouchID ao bloquear a sessão ou ao fechar a tampa do portátil +- +- +- Lock databases after minimizing the window +- Bloquear base de dados ao minimizar a janela +- +- +- Re-lock previously locked database after performing Auto-Type +- Bloquear novamente a base de dados depois de usar a escrita automática +- +- +- Hide passwords in the entry preview panel +- Ocultar palavras-passe no painel de pré-visualização de entradas +- +- +- Hide entry notes by default +- Por definição, ocultar notas da entrada +- +- +- Privacy +- Privacidade +- +- +- Use DuckDuckGo service to download website icons +- Utilizar DuckDuckGo para descarregar os ícones dos sites +- +- +- Clipboard clear seconds +- Limpar área de transferência após +- +- +- Touch ID inactivity reset +- Repor inatividade de TouchID +- +- +- Database lock timeout seconds +- Bloquear base de dados após (segundos) +- +- +- min +- Minutes +- min +- +- +- Clear search query after +- Limpar campo de pesquisa após +- +- +- Require password repeat when it is visible +- Pedir repetição de palavra-passe mesmo se visível +- +- +- Hide passwords when editing them +- Ocultar palavras-passe durante a edição +- +- +- Use placeholder for empty password fields +- Utilizar marcadores de posição para campos vazios +- +- +- +- AutoType +- +- Couldn't find an entry that matches the window title: +- Não foi encontrada uma entrada coincidente com o título da janela: +- +- +- Auto-Type - KeePassXC +- KeePassXC - Escrita automática +- +- +- Auto-Type +- Escrita automática +- +- +- The Syntax of your Auto-Type statement is incorrect! +- A sintaxe da instrução de escrita automática está errada! +- +- +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- Este comando de escrita automática tem um atraso muito grande. Deseja mesmo continuar? +- +- +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- O comando de escrita automática tem uma pressão de teclas muito lenta. Deseja mesmo continuar? +- +- +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- O comando de escrita automática contém argumentos que se repetem muitas vezes. Deseja mesmo continuar? +- +- +- Permission Required +- Permissão necessária +- +- +- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC necessita da permissão 'Accessibility' para poder executar a escrita automática. Se já concedeu esta permissão, pode ser necessário reiniciar a aplicação. +- +- +- +- AutoTypeAssociationsModel +- +- Window +- Janela +- +- +- Sequence +- Sequência +- +- +- Default sequence +- Sequência padrão +- +- +- +- AutoTypeMatchModel +- +- Group +- Grupo +- +- +- Title +- Título +- +- +- Username +- Nome de utilizador +- +- +- Sequence +- Sequência +- +- +- +- AutoTypeMatchView +- +- Copy &username +- Copiar nome de &utilizador +- +- +- Copy &password +- Copiar &palavra-passe +- +- +- +- AutoTypePlatformMac +- +- Permission Required +- Permissão necessária +- +- +- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC necessita das permissões 'Accessibility' e 'Screen Recorder' para poder executar a escrita automática. A permissão 'Screen recording' é necessária para associar o titulo da janela às entradas. Se já concedeu estas permissões, pode ser necessário reiniciar a aplicação. +- +- +- +- AutoTypeSelectDialog +- +- Auto-Type - KeePassXC +- KeePassXC - Escrita automática +- +- +- Select entry to Auto-Type: +- Selecione a entrada para escrita automática: +- +- +- Search... +- Pesquisar... +- +- +- +- BrowserAccessControlDialog +- +- KeePassXC - Browser Access Request +- KeePassXC - Pedido de acesso +- +- +- %1 is requesting access to the following entries: +- %1 está a solicitar acesso às seguintes entradas: +- +- +- Remember access to checked entries +- Memorizar acesso às entradas marcadas +- +- +- Remember +- Memorizar +- +- +- Allow access to entries +- Permitir acesso às entradas +- +- +- Allow Selected +- Permitir selecionados +- +- +- Deny All +- Recusar tudo +- +- +- Disable for this site +- Desativar para este site +- +- +- +- BrowserEntrySaveDialog +- +- KeePassXC-Browser Save Entry +- KeePassXC-Browser - Guardar entrada +- +- +- Ok +- Ok +- +- +- Cancel +- Cancelar +- +- +- You have multiple databases open. +-Please select the correct database for saving credentials. +- Existem várias bases de dados abertas. +-Selecione a base de dados correta para guardar as credenciais. +- +- +- +- BrowserService +- +- KeePassXC: New key association request +- KeePassXC: Pedido de associação da nova chave +- +- +- Save and allow access +- Guardar e permitir acesso +- +- +- KeePassXC: Overwrite existing key? +- KeePassXC: Substituir chave existente? +- +- +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- Já existe uma chave de cifra partilhada com o nome "%1". +-Deseja substituir a chave existente? +- +- +- KeePassXC: Update Entry +- KeePassXC: Atualizar entrada +- +- +- Do you want to update the information in %1 - %2? +- Deseja atualizar as informações em %1 - %2? +- +- +- Abort +- Abortar +- +- +- Converting attributes to custom data… +- A converter atributos para dados personalizados... +- +- +- KeePassXC: Converted KeePassHTTP attributes +- KeePassXC: Atributos KeePassHTTP convertidos +- +- +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- Convertidos com sucesso s atributos para %1 entrada(s). +-%2 chaves movidas para dados personalizados. +- +- +- Successfully moved %n keys to custom data. +- %n chave movida para dados personalizados.%n chaves movidas para dados personalizados. +- +- +- KeePassXC: No entry with KeePassHTTP attributes found! +- KeePassXC: Não existem entradas com atributos KeePassHTTP! +- +- +- The active database does not contain an entry with KeePassHTTP attributes. +- A base de dados ativa não tem entradas com atributos KeePassHTTP. +- +- +- KeePassXC: Legacy browser integration settings detected +- KeePassXC: Detetadas definições de integração legada com o navegador +- +- +- KeePassXC: Create a new group +- KeePassXC: Criar um novo grupo +- +- +- A request for creating a new group "%1" has been received. +-Do you want to create this group? +- +- Recebido um pedido para a criação do grupo "%1". +-Deseja criar este grupo? +- +- +- +- Your KeePassXC-Browser settings need to be moved into the database settings. +-This is necessary to maintain your current browser connections. +-Would you like to migrate your existing settings now? +- Tem que mover as definições KeePassXC-Browser para as definições da base de dados. +-Este procedimento é necessário para manter as ligações existentes. +-Gostaria de migrar agora as definições? +- +- +- Don't show this warning again +- Não mostrar novamente +- +- +- You have received an association request for the following database: +-%1 +- +-Give the connection a unique name or ID, for example: +-chrome-laptop. +- Recebeu um pedido de associação para a base de dados abaixo: +-%1 +- +-Indique um nome ou ID exclusivo para a ligação como, por exemplo: +-chrome-laptop +- +- +- +- BrowserSettingsWidget +- +- Dialog +- Caixa de diálogo +- +- +- This is required for accessing your databases with KeePassXC-Browser +- Necessário para aceder às suas bases de dados com KeePassXC-Browser +- +- +- Enable browser integration +- Ativar integração com o navegador +- +- +- General +- Geral +- +- +- Browsers installed as snaps are currently not supported. +- Ainda não existe suporte a navegadores no formato Snap. +- +- +- Enable integration for these browsers: +- Ativar integração para estes navegadores: +- +- +- Vivaldi +- Vivaldi +- +- +- &Edge +- &Edge +- +- +- Firefox +- Firefox +- +- +- Tor Browser +- Tor Browser +- +- +- Brave +- Brave +- +- +- Google Chrome +- Google Chrome +- +- +- Chromium +- Chromium +- +- +- Show a notification when credentials are requested +- Credentials mean login data requested via browser extension +- Mostrar notificação se as credenciais forem solicitadas +- +- +- Request to unlock the database if it is locked +- Pedir para desbloquear a base de dados se esta estiver bloqueada +- +- +- Only entries with the same scheme (http://, https://, ...) are returned. +- Devolver apenas as entradas com o mesmo esquema (http://, https://, ...) +- +- +- Match URL scheme (e.g., https://...) +- Correspondência com os esquemas URL (https://...) +- +- +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- Devolver apenas as melhores entradas para o URL específico em vez das entradas para o domínio +- +- +- Return only best-matching credentials +- Devolver apenas as credenciais mais parecidas +- +- +- Returns expired credentials. String [expired] is added to the title. +- Devolve as credenciais caducadas. Adiciona [caducada] ao título. +- +- +- Allow returning expired credentials +- Permitir devolução de credencias caducadas +- +- +- All databases connected to the extension will return matching credentials. +- Todas as bases de dados conectadas à extensão devolverão as credenciais coincidentes. +- +- +- Search in all opened databases for matching credentials +- Credentials mean login data requested via browser extension +- Pesquisar por credenciais semelhantes em todas as base de dados abertas +- +- +- Sort matching credentials by title +- Credentials mean login data requested via browser extension +- Ordenar por título as credenciais coincidentes +- +- +- Sort matching credentials by username +- Credentials mean login data requested via browser extension +- Ordenar por nome de utilizador as credenciais coincidentes +- +- +- Advanced +- Avançado +- +- +- Never ask before accessing credentials +- Credentials mean login data requested via browser extension +- Nunca perguntar antes de aceder às credenciais +- +- +- Never ask before updating credentials +- Credentials mean login data requested via browser extension +- Nunca perguntar antes de atualizar as credenciais +- +- +- Do not ask permission for HTTP Basic Auth +- An extra HTTP Basic Auth setting +- Não pedir permissão para autorização HTTP Basic Auth +- +- +- Automatically creating or updating string fields is not supported. +- A criação ou atualização dos campos de cadeias não é suportada. +- +- +- Return advanced string fields which start with "KPH: " +- Mostrar campos avançados que iniciem com "KPH: " +- +- +- Don't display the popup suggesting migration of legacy KeePassHTTP settings. +- Não mostrar janela que sugere a migração das definições KeePassHTTP legadas. +- +- +- Do not prompt for KeePassHTTP settings migration. +- Não perguntar para migrar as definições KeePassHTTP. +- +- +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- Ao iniciar, atualizar automaticamente o caminho do KeePassXC ou do binário keepassxc-proxy para os 'sripts' nativos de mensagens. +- +- +- Update native messaging manifest files at startup +- Ao iniciar, atualizar ficheiros de mensagens nativas +- +- +- Use a custom proxy location if you installed a proxy manually. +- Utilize um proxy personalizado caso o tenha instalado manualmente. +- +- +- Use a custom proxy location: +- Meant is the proxy for KeePassXC-Browser +- Utilizar proxy personalizado: +- +- +- Custom proxy location field +- Campo Localização do proxy personalizado +- +- +- Browser for custom proxy file +- Navegador para o ficheiro do proxy personalizado +- +- +- Browse... +- Button for opening file dialog +- Explorar... +- +- +- Use a custom browser configuration location: +- Utilizar localização personalizada para o navegador: +- +- +- Browser type: +- Tipo de navegador: +- +- +- Toolbar button style +- Estilo dos botões da barra de ferramentas +- +- +- Config Location: +- Localização da configuração: +- +- +- Custom browser location field +- Campo de localização personalizado +- +- +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- +- +- Browse for custom browser path +- Procurar por um caminho personalizado +- +- +- Custom extension ID: +- ID da extensão personalizada: +- +- +- Custom extension ID +- ID da extensão personalizada +- +- +- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 +- Devido a 'Snap sandboxing', tem que executar um script para ativar a integração com o navegador.<br />Pode obter o script em %1 +- +- +- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 +- Necessita de KeePassXC-Browser para que a integração funcione corretamente.<br /> Disponível para %1, %2 e %3. %4 +- +- +- Please see special instructions for browser extension use below +- Por favor consulte abaixo as instruções para a utilização da extensão +- +- +- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. +- <b>Erro:</b> não foi possível encontrar a localização do proxy!<br/> A integração com o navegador não funcionará sem um proxy. +- +- +- <b>Warning:</b> The following options can be dangerous! +- <b>Aviso</b>: as opções seguintes podem ser perigosas! +- +- +- Executable Files +- Ficheiros executáveis +- +- +- All Files +- Todos os ficheiros +- +- +- Select custom proxy location +- Selecione a localização do proxy personalizado +- +- +- Select native messaging host folder location +- Selecione a localização da pasta de mensagens nativas +- +- +- +- CloneDialog +- +- Clone Options +- Opções de clonagem +- +- +- Append ' - Clone' to title +- Adicionar ' -Clone' ao título +- +- +- Replace username and password with references +- Substituir nome de utilizador e palavra-passe por referências +- +- +- Copy history +- Copiar histórico +- +- +- +- CsvImportWidget +- +- Import CSV fields +- Importar campos do CSV +- +- +- filename +- nome do ficheiro +- +- +- size, rows, columns +- tamanho, linhas, colunas +- +- +- Encoding +- Codificação +- +- +- Codec +- Codificador +- +- +- Text is qualified by +- Texto qualificado por +- +- +- Fields are separated by +- Campos separados por +- +- +- Comments start with +- Comentários iniciados por +- +- +- Consider '\' an escape character +- Considerar '\' como carácter de escape +- +- +- Preview +- Pré-visualização +- +- +- Imported from CSV file +- Importada de ficheiro CSV +- +- +- Original data: +- Dados originais: +- +- +- Error +- Erro +- +- +- Error(s) detected in CSV file! +- Detetado(s) erro(s) no ficheiro CSV! +- +- +- [%n more message(s) skipped] +- [%n mensagem ignorada][%n mensagens ignoradas] +- +- +- CSV import: writer has errors: +-%1 +- Importação CSV com erros: +-%1 +- +- +- Text qualification +- Qualificação de texto +- +- +- Field separation +- Separação de campos +- +- +- Number of header lines to discard +- Número de linhas de cabeçalho a desconsiderar +- +- +- CSV import preview +- Pré-visualização da importação CSV +- +- +- Column Association +- Associação de colunas +- +- +- Last Modified +- Última modificação +- +- +- Password +- Palavra-passe +- +- +- Created +- Criada +- +- +- Notes +- Notas +- +- +- Title +- Título +- +- +- Group +- Grupo +- +- +- URL +- URL +- +- +- Username +- Nome de utilizador +- +- +- Header lines skipped +- Linhas de cabeçalho ignoradas +- +- +- First line has field names +- Primeira linha tem nomes de campo +- +- +- Not Present +- Inexistente +- +- +- Column %1 +- Coluna %1 +- +- +- TOTP +- TOTP +- +- +- Icon +- Ãcone +- +- +- +- CsvParserModel +- +- %n column(s) +- %n coluna%n colunas +- +- +- %1, %2, %3 +- file info: bytes, rows, columns +- %1, %2, %3 +- +- +- %n byte(s) +- %n byte%n bytes +- +- +- %n row(s) +- %n linha%n linhas +- +- +- +- Database +- +- File %1 does not exist. +- Ficheiro %1 não existe. +- +- +- Unable to open file %1. +- Não foi possível abrir o ficheiro %1. +- +- +- Error while reading the database: %1 +- Erro ao ler a base de dados: %1 +- +- +- File cannot be written as it is opened in read-only mode. +- Não é possível escrever no ficheiro porque este foi aberto no modo de leitura. +- +- +- Key not transformed. This is a bug, please report it to the developers! +- Chave não transformada. Isto é um erro e deve ser reportado aos programadores! +- +- +- %1 +-Backup database located at %2 +- %1 +-Backup localizado em %2 +- +- +- Could not save, database does not point to a valid file. +- Não foi possível guardar porque a base de dados não indica um ficheiro válido. +- +- +- Could not save, database file is read-only. +- Não foi possível guardar porque a base de dados está no modo de leitura. +- +- +- Database file has unmerged changes. +- A base de dados tem alterações não guardadas. +- +- +- Recycle Bin +- Reciclagem +- +- +- Passwords +- Root group name +- Palavras-passe +- +- +- Database save is already in progress. +- A base de dados já está a ser guardada. +- +- +- Could not save, database has not been initialized! +- Não é possível guardar, base de dados não inicializada! +- +- +- +- DatabaseOpenDialog +- +- Unlock Database - KeePassXC +- KeePassXC - Desbloquear base de dados +- +- +- +- DatabaseOpenWidget +- +- Key File: +- Ficheiro-chave: +- +- +- Refresh +- Recarregar +- +- +- Don't show this warning again +- Não mostrar novamente +- +- +- All files +- Todos os ficheiros +- +- +- Key files +- Ficheiros-chave +- +- +- Select key file +- Selecione o ficheiro-chave +- +- +- Failed to open key file: %1 +- Não foi possível abrir o ficheiro-chave: %1 +- +- +- Unlock KeePassXC Database +- Desbloquear base de dados do KeePassXC +- +- +- Enter Password: +- Introduza a palavra-passe: +- +- +- Password field +- Campo Palavra-passe +- +- +- Hardware key slot selection +- Seleção de 'slot' para a chave de hardware +- +- +- Browse for key file +- Procurar ficheiro-chave +- +- +- Browse... +- Explorar... +- +- +- Refresh hardware tokens +- Recarregar 'tokens' de hardware +- +- +- Hardware Key: +- Chave de hardware: +- +- +- Hardware key help +- Ajuda para chaves de hardware +- +- +- TouchID for Quick Unlock +- TouchID para desbloqueio rápido +- +- +- Unlock failed and no password given +- Não foi possível desbloquear - palavra-passe não introduzida +- +- +- Unlocking the database failed and you did not enter a password. +-Do you want to retry with an "empty" password instead? +- +-To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. +- Não foi possível desbloquear a base de dados e não foi introduzida uma palavra-passe. +-Deseja tentar com uma palavra-passe vazia? +- +-Para impedir que este erro surja novamente, deve aceder a "Definições da base de dados -> Segurança" para repor a palavra-passe. +- +- +- Retry with empty password +- Tentar com palavra-passe vazia +- +- +- Enter Additional Credentials (if any): +- Introduza as credenciais adicionais (se existentes): +- +- +- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +-<p>Click for more information...</p> +- <p>Pode utilizar uma chave de segurança como, por exemplo, os dispositivos <strong>YubiKey</strong> ou <strong>OnlyKey</strong> com 'slots' configuradas para HMAC-SHA1.</p> +-<p>Clique aqui para mais informações.</p> +- +- +- Key file help +- Ajuda para ficheiros-chave +- +- +- ? +- ? +- +- +- Cannot use database file as key file +- Não pode utilizar uma base de dados como ficheiro-chave +- +- +- You cannot use your database file as a key file. +-If you do not have a key file, please leave the field empty. +- Não pode utilizar o ficheiro da sua base de dados como ficheiro-chave. +-Se não quiser utilizar um ficheiro-chave, deixe este campo em branco. +- +- +- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> +- <p>Para além da palavra-passe, pode utilizar um ficheiro-chave para aumentar a segurança da sua base de dados. Este ficheiro pode ser gerado nas definições de segurança da sua base de dados..</p><p><strong>Não</strong> pode utilizar ficheiros *.kdbx como ficheiro-chave!<br>Se não quiser utilizar um ficheiro-chave, deixe este campo em branco.</p><p>Clique aqui para mais informação.</p> +- +- +- Key file to unlock the database +- Ficheiro-chave para desbloquear a base de dados +- +- +- Please touch the button on your YubiKey! +- Toque no botão da sua YubiKey! +- +- +- Detecting hardware keys… +- A detetar chaves de hardware... +- +- +- No hardware keys detected +- Não foram detetadas chaves de hardware +- +- +- Select hardware key… +- Selecione a chave de hardware... +- +- +- Old key file format +- Formato de ficheiro-chave antigo +- +- +- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> +- Está a utilizar um formato de ficheiro-chave antigo que KeePassXC pode<br>deixar de ter suporte no futuro.<br><br>Por favor considere a geração de um novo ficheiro-chave em:<br><strong>Base de dados -> Segurança da base de dados -> Alterar ficheiro-chave.</strong><br> +- +- +- +- DatabaseSettingWidgetMetaData +- +- Passwords +- Palavras-passe +- +- +- +- DatabaseSettingsDialog +- +- Advanced Settings +- Definições avançadas +- +- +- General +- Geral +- +- +- Security +- Segurança +- +- +- Encryption Settings +- Definições de cifra +- +- +- Browser Integration +- Integração com navegadores +- +- +- Database Credentials +- Credenciais da base de dados +- +- +- +- DatabaseSettingsWidgetBrowser +- +- KeePassXC-Browser settings +- Definições KeePassXC-Browser +- +- +- Stored keys +- Chaves guardadas +- +- +- Remove +- Remover +- +- +- Delete the selected key? +- Apagar chave selecionada? +- +- +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- Tem a certeza de que deseja apagar a chave selecionada? +-Esta ação pode impedir a ligação ao suplemento. +- +- +- Key +- Chave +- +- +- Value +- Valor +- +- +- Enable Browser Integration to access these settings. +- Ative a integração com o navegador para aceder a estas definições. +- +- +- Disconnect all browsers +- Desconectar de todos os navegadores +- +- +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- Tem a certeza de que deseja desconectar todos os navegadores? +-Esta ação pode interferir com a ligação ao suplemento. +- +- +- KeePassXC: No keys found +- KeePassXC: Nenhuma chave encontrada +- +- +- No shared encryption keys found in KeePassXC settings. +- Não foram encontradas chaves de cifra nas definições do KeePassXC. +- +- +- KeePassXC: Removed keys from database +- KeePassXC: Chaves removidas da base de dados +- +- +- Successfully removed %n encryption key(s) from KeePassXC settings. +- %n chave de cifra removida das definições do KeePassXC.%n chaves de cifra removidas das definições do KeePassXC. +- +- +- Forget all site-specific settings on entries +- Esquecer definições específicas dos sites (nas entradas) +- +- +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- Tem a certeza de que deseja esquecer as definições específicas de todas as entradas? +-Serão removidas todas as permissões para aceder às entradas. +- +- +- Removing stored permissions… +- A remover permissões guardadas... +- +- +- Abort +- Abortar +- +- +- KeePassXC: Removed permissions +- KeePassXC: Permissões removidas +- +- +- Successfully removed permissions from %n entry(s). +- Removidas com sucesso as permissões de %n entrada.Removidas com sucesso as permissões de %n entradas. +- +- +- KeePassXC: No entry with permissions found! +- KeePassXC: Não existem entradas com permissões! +- +- +- The active database does not contain an entry with permissions. +- A base de dados ativa não contém qualquer entrada com permissões. +- +- +- Move KeePassHTTP attributes to custom data +- Mover atributos KeePassHTTP para dados personalizados +- +- +- Do you really want to move all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- Tem a certeza de que deseja atualizar todos os dados legados para a versão mais recente? +-Esta atualização é necessária para manter a compatibilidade com o suplemento. +- +- +- Stored browser keys +- Chaves armazenadas +- +- +- Remove selected key +- Remover chave selecionada +- +- +- Move KeePassHTTP attributes to KeePassXC-Browser custom data +- Mover atributos KeePassHTTP para dados personalizados KeePassXC-Browser +- +- +- Refresh database root group ID +- Recarregar ID do grupo raiz da base de dados +- +- +- Created +- Criada +- +- +- Refresh database ID +- Recarregar ID da base de dados +- +- +- Do you really want refresh the database ID? +-This is only necessary if your database is a copy of another and the browser extension cannot connect. +- Tem a certeza de que deseja recarregar a ID da base de dados? +-Esta ação apenas será necessária se a sua base de dados for uma cópia de outra e não for possível estabelecer ligação ao navegador. +- +- +- +- DatabaseSettingsWidgetDatabaseKey +- +- Add additional protection... +- Adicionar proteção extra... +- +- +- No password set +- Palavra-passe não definida +- +- +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- AVISO! Não definiu uma palavra-passe. Não deve utilizar uma base de dados que não tenha uma palavra-passe definida! +- +-Tem a certeza de que deseja continuar? +- +- +- Continue without password +- Continuar sem palavra-passe +- +- +- No encryption key added +- Chave de cifra não adicionada +- +- +- You must add at least one encryption key to secure your database! +- Tem que adicionar, pelo menos, uma chave de cifra para proteger a sua base de dados! +- +- +- Unknown error +- Erro desconhecido +- +- +- Failed to change database credentials +- Não foi possível alterar as credenciais +- +- +- +- DatabaseSettingsWidgetEncryption +- +- Encryption Algorithm: +- Algoritmo de cifra: +- +- +- AES: 256 Bit (default) +- AES: 256 bits (padrão) +- +- +- Twofish: 256 Bit +- Twofish: 256 bits +- +- +- Key Derivation Function: +- Função derivação de chave: +- +- +- Transform rounds: +- Ciclos de transformação: +- +- +- Memory Usage: +- Utilização de memória: +- +- +- Parallelism: +- Paralelismo: +- +- +- Decryption Time: +- Tempo para decifrar: +- +- +- ?? s +- ?? s +- +- +- Change +- Alterar +- +- +- Higher values offer more protection, but opening the database will take longer. +- Valores mais altos oferecem mais proteção mas também pode demorar mais tempo para abrir a base de dados. +- +- +- Database format: +- Formato da base de dados: +- +- +- This is only important if you need to use your database with other programs. +- Apenas relevante se necessitar de utilizar a base de dados com outros programas. +- +- +- KDBX 4.0 (recommended) +- KDBX 4.0 (recomendado) +- +- +- KDBX 3.1 +- KDBX 3.1 +- +- +- unchanged +- Database decryption time is unchanged +- inalterado +- +- +- Number of rounds too high +- Key transformation rounds +- Número de ciclos muito alto +- +- +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or days (or even longer) to open! +- Está a utilizar um número muito alto para a transformação de chaves com Argon2. +- +-Se mantiver este número, a sua base de dados pode levar muitas horas/dias (ou ainda mais) para ser aberta! +- +- +- Understood, keep number +- Percebi, manter número +- +- +- Cancel +- Cancelar +- +- +- Number of rounds too low +- Key transformation rounds +- Número de ciclos muito baixo +- +- +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database may be too easy to crack! +- Está a utilizar um número muito baixo para a transformação de chaves com Argon2. +- +-Se mantiver este número, a sua base de dados pode ser desbloqueada muito facilmente! +- +- +- KDF unchanged +- KDF inalterado +- +- +- Failed to transform key with new KDF parameters; KDF unchanged. +- Não foi possível transformar a chave com os novos parâmetros. KDF inalterado. +- +- +- MiB +- Abbreviation for Mebibytes (KDF settings) +- MiB MiB +- +- +- thread(s) +- Threads for parallel execution (KDF settings) +- processo processos +- +- +- Change existing decryption time +- Alterar tempo para decifrar +- +- +- Decryption time in seconds +- Tempo para decifrar (segundos) +- +- +- Database format +- Formato da base de dados +- +- +- Encryption algorithm +- Algoritmo de cifra +- +- +- Key derivation function +- Função derivação de chave +- +- +- Transform rounds +- Ciclos de transformação +- +- +- Memory usage +- Utilização de memória +- +- +- Parallelism +- Paralelismo +- +- +- ?? ms +- ?? ms +- +- +- ? s +- ? s +- +- +- +- DatabaseSettingsWidgetFdoSecrets +- +- Exposed Entries +- Entradas expostas +- +- +- Don't expose this database +- Não expor esta base de dados +- +- +- Expose entries under this group: +- Expor entradas existentes neste grupo: +- +- +- Enable Secret Service to access these settings. +- Ative 'Secret Service' para aceder a estas definições. +- +- +- +- DatabaseSettingsWidgetGeneral +- +- Database Meta Data +- Meta-dados da base de dados +- +- +- Database name: +- Nome da base de dados: +- +- +- Database description: +- Descrição da base de dados: +- +- +- Default username: +- Nome de utilizador padrão: +- +- +- History Settings +- Definições de histórico +- +- +- Max. history items: +- Número máximo de itens no histórico: +- +- +- Max. history size: +- Tamanho máximo para o histórico: +- +- +- MiB +- MiB +- +- +- Use recycle bin +- Utilizar reciclagem +- +- +- Additional Database Settings +- Definições extra para a base de dados +- +- +- Database name field +- Campo Nome da base de dados +- +- +- Database description field +- Campo Descrição da base de dados +- +- +- Default username field +- Campo Nome de utilizador +- +- +- Maximum number of history items per entry +- Número máximo de itens de histórico por entrada +- +- +- Maximum size of history per entry +- Tamanho de histórico por entrada +- +- +- Delete Recycle Bin +- Limpar reciclagem +- +- +- Do you want to delete the current recycle bin and all its contents? +-This action is not reversible. +- Tem a certeza de que deseja limpar a reciclagem e o seu conteúdo? +-Esta ação é irreversível. +- +- +- (old) +- (antiga) +- +- +- Enable compression (recommended) +- Ativar compressão (recomendado) +- +- +- +- DatabaseSettingsWidgetKeeShare +- +- Sharing +- Partilha +- +- +- Breadcrumb +- Breadcrumb +- +- +- Type +- Tipo +- +- +- Path +- Caminho +- +- +- Last Signer +- Último signatário +- +- +- Certificates +- Certificados +- +- +- > +- Breadcrumb separator +- > +- +- +- +- DatabaseSettingsWidgetMetaDataSimple +- +- Database Name: +- Nome da base de dados: +- +- +- Description: +- Descrição: +- +- +- Database name field +- Campo Nome da base de dados +- +- +- Database description field +- Campo Descrição da base de dados +- +- +- +- DatabaseTabWidget +- +- KeePass 2 Database +- Base de dados do KeePass 2 +- +- +- All files +- Todos os ficheiros +- +- +- Open database +- Abrir base de dados +- +- +- CSV file +- Ficheiro CSV +- +- +- Merge database +- Combinar base de dados +- +- +- Open KeePass 1 database +- Abrir base de dados do KeePass 1 +- +- +- KeePass 1 database +- Base de dados do KeePass 1 +- +- +- Export database to CSV file +- Exportar base de dados para ficheiro CSV +- +- +- Writing the CSV file failed. +- Não foi possível escrever no ficheiro CSV. +- +- +- Database creation error +- Erro ao criar a base de dados +- +- +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- A base de dados criada não tem chave ou KDF e não pode ser guardada. +-Existe aqui um erro que deve ser reportado aos programadores. +- +- +- Select CSV file +- Selecionar ficheiro CSV +- +- +- New Database +- Nova base de dados +- +- +- %1 [New Database] +- Database tab name modifier +- %1 [Nova base de dados] +- +- +- %1 [Locked] +- Database tab name modifier +- %1 [Bloqueada] +- +- +- %1 [Read-only] +- Database tab name modifier +- %1 [Apenas leitura] +- +- +- Failed to open %1. It either does not exist or is not accessible. +- Não foi possível abrir %1. Provavelmente não existe ou não está acessível. +- +- +- Export database to HTML file +- Exportar base de dados para ficheiro HTML +- +- +- HTML file +- Ficheiro HTML +- +- +- Writing the HTML file failed. +- Não foi possível escrever no ficheiro HTML. +- +- +- Export Confirmation +- Confirmação de exportação +- +- +- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? +- Está prestes a exportar a sua base de dados para um ficheiro não cifrado. As suas palavras-passe e informações pessoais ficarão vulneráveis. Tem a certeza de que deseja continuar? +- +- +- Open OPVault +- Open OPVault +- +- +- +- DatabaseWidget +- +- Searching... +- Pesquisar... +- +- +- Do you really want to delete the entry "%1" for good? +- Tem a certeza de que deseja apagar permanentemente a entrada "%1"? +- +- +- Do you really want to move entry "%1" to the recycle bin? +- Tem a certeza de que deseja mover a entrada "%1" para a reciclagem? +- +- +- Do you really want to move %n entry(s) to the recycle bin? +- Tem a certeza de que deseja mover %n entrada para a reciclagem?Tem a certeza de que deseja mover %n entradas para a reciclagem? +- +- +- Execute command? +- Executar comando? +- +- +- Do you really want to execute the following command?<br><br>%1<br> +- Tem a certeza de que deseja executar este comando?<br><br>%1<br> +- +- +- Remember my choice +- Memorizar escolha +- +- +- Do you really want to delete the group "%1" for good? +- Tem a certeza de que deseja apagar permanentemente o grupo "%1"? +- +- +- No current database. +- Nenhuma base de dados. +- +- +- No source database, nothing to do. +- Não existe base de dados de origem, nada para fazer. +- +- +- Search Results (%1) +- Resultados da pesquisa (%1) +- +- +- No Results +- Não há resultados +- +- +- File has changed +- Ficheiro alterado +- +- +- The database file has changed. Do you want to load the changes? +- O ficheiro da base de dados foi alterado. Deseja carregar as alterações? +- +- +- Merge Request +- Pedido de combinação +- +- +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- A base de dados foi alterada e tem alterações não guardadas. +-Deseja combinar as suas alterações? +- +- +- Empty recycle bin? +- Limpar reciclagem? +- +- +- Are you sure you want to permanently delete everything from your recycle bin? +- Tem a certeza de que deseja apagar permanentemente os itens da reciclagem? +- +- +- Do you really want to delete %n entry(s) for good? +- Tem a certeza de que deseja apagar %n entrada?Tem a certeza de que deseja apagar %n entradas? +- +- +- Delete entry(s)? +- Apagar entrada?Apagar entradas? +- +- +- Move entry(s) to recycle bin? +- Mover entrada para a reciclagem?Mover entradas para a reciclagem? +- +- +- Lock Database? +- Bloquear base de dados? +- +- +- You are editing an entry. Discard changes and lock anyway? +- Está a editar uma entrada. Rejeitar alterações e bloquear? +- +- +- "%1" was modified. +-Save changes? +- "%1" foi modificada. +-Guardar alterações? +- +- +- Database was modified. +-Save changes? +- A base de dados foi modificada. +-Guardar alterações? +- +- +- Save changes? +- Guardar alterações? +- +- +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- Não foi possível abrir a nova base de dados durante o carregamento. +-Erro: %1 +- +- +- Disable safe saves? +- Desativar salvaguardas? +- +- +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- O KeePassXC falhou ao tentar guardar a base de dados múltiplas vezes. Muito provavelmente, os serviços de sincronização não o permitiram. +-Desativar salvaguardas e tentar novamente? +- +- +- Passwords +- Palavras-passe +- +- +- Save database as +- Guardar base de dados como +- +- +- KeePass 2 Database +- Base de dados do KeePass 2 +- +- +- Replace references to entry? +- Substituir referências na entrada? +- +- +- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? +- A entrada "%1" tem %2 referência. Deseja substituir a referência com valores, ignorar ou apagar a entrada?A entrada "%1" tem %2 referências. Deseja substituir as referências com valores, ignorar ou apagar a entrada? +- +- +- Delete group +- Apagar grupo +- +- +- Move group to recycle bin? +- Mover grupo para a reciclagem? +- +- +- Do you really want to move the group "%1" to the recycle bin? +- Tem a certeza de que deseja mover o grupo "%1" para a reciclagem? +- +- +- Successfully merged the database files. +- Bases de dados combinadas com sucesso. +- +- +- Database was not modified by merge operation. +- A base de dados não foi modificada pela combinação. +- +- +- Shared group... +- Grupo partilhado... +- +- +- Writing the database failed: %1 +- Não foi possível escrever na base de dados: %1 +- +- +- This database is opened in read-only mode. Autosave is disabled. +- Esta base de dados está aberta no modo de leitura. Não é possível guardar as alterações. +- +- +- Save database backup +- Guardar backup da base de dados +- +- +- Could not find database file: %1 +- Não foi possível encontrar a base de dados: %1 +- +- +- +- EditEntryWidget +- +- Entry +- Entrada +- +- +- Advanced +- Avançado +- +- +- Icon +- Ãcone +- +- +- Auto-Type +- Escrita automática +- +- +- Properties +- Propriedades +- +- +- History +- Histórico +- +- +- SSH Agent +- Agente SSH +- +- +- n/a +- n/d +- +- +- (encrypted) +- (cifrada) +- +- +- Select private key +- Selecionar chave privada +- +- +- Entry history +- Histórico da entrada +- +- +- Add entry +- Adicionar entrada +- +- +- Edit entry +- Editar entrada +- +- +- New attribute +- Novo atributo +- +- +- Are you sure you want to remove this attribute? +- Tem a certeza de que deseja remover este atributo? +- +- +- Tomorrow +- Amanhã +- +- +- %n week(s) +- %n semana%n semanas +- +- +- %n month(s) +- %n mês%n meses +- +- +- Entry updated successfully. +- Entrada atualizada com sucesso. +- +- +- New attribute %1 +- Novo atributo %1 +- +- +- %n year(s) +- %n ano%n anos +- +- +- Confirm Removal +- Confirmação de remoção +- +- +- Browser Integration +- Integração com o navegador +- +- +- <empty URL> +- <URL vazio> +- +- +- Are you sure you want to remove this URL? +- Tem a certeza de que deseja remover este URL? +- +- +- Reveal +- Mostrar +- +- +- Hide +- Ocultar +- +- +- Unsaved Changes +- Alterações por guardar +- +- +- Would you like to save changes to this entry? +- Gostaria de guardar as alterações a esta entrada? +- +- +- [PROTECTED] Press Reveal to view or edit +- [PROTEGIDA] Por favor revele para ver ou editar +- +- +- Invalid Entry +- Entrada inválida +- +- +- An external merge operation has invalidated this entry. +-Unfortunately, any changes made have been lost. +- Uma operação externa de combinação invalidou esta entrada. +-Infelizmente, quaisquer alterações efetuadas foram perdidas. +- +- +- +- EditEntryWidgetAdvanced +- +- Additional attributes +- Atributos extra +- +- +- Add +- Adicionar +- +- +- Remove +- Remover +- +- +- Edit Name +- Editar nome +- +- +- Protect +- Proteger +- +- +- Reveal +- Mostrar +- +- +- Attachments +- Anexos +- +- +- Foreground Color: +- Cor principal: +- +- +- Background Color: +- Cor secundária: +- +- +- Attribute selection +- Seleção de atributo +- +- +- Attribute value +- Valor do atributo +- +- +- Add a new attribute +- Adicionar novo atributo +- +- +- Remove selected attribute +- Remover atributo selecionado +- +- +- Edit attribute name +- Editar nome do atributo +- +- +- Toggle attribute protection +- Alternar proteção do atributo +- +- +- Show a protected attribute +- Mostrar atributo protegido +- +- +- Foreground color selection +- Cor principal +- +- +- Background color selection +- Cor secundária +- +- +- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> +- <html><head/><body><p>Se ativa, a entrada não aparecerá nos relatórios de verificação e/ou HIBP, mesmo que não cumpra os requisitos de qualidade (por exemplo entropia ou reutilização). Pode assinalar esta opção se a palavra-passe não estiver sobre o seu controlo (por exemplo: se precisar de um código PIN) para impedir de atafulhar os relatórios.</p></body></html> +- +- +- Exclude from database reports +- Excluir dos relatórios +- +- +- +- EditEntryWidgetAutoType +- +- Enable Auto-Type for this entry +- Ativar escrita automática para esta entrada +- +- +- Window Associations +- Associação de janelas +- +- +- + +- + +- +- +- - +- - +- +- +- Window title: +- Título da janela: +- +- +- Use a specific sequence for this association: +- Utilizar sequência específica para esta associação: +- +- +- Custom Auto-Type sequence +- Sequência personalizada de escrita automática +- +- +- Open Auto-Type help webpage +- Abrir página de ajuda sobre escrita automática +- +- +- Existing window associations +- Associações existentes +- +- +- Add new window association +- Adicionar nova associação +- +- +- Remove selected window association +- Remover associação selecionada +- +- +- You can use an asterisk (*) to match everything +- Pode utilizar um asterisco (*) para correspondência global +- +- +- Set the window association title +- Definir título de associação da janela +- +- +- You can use an asterisk to match everything +- Pode utilizar um asterisco para correspondência global +- +- +- Custom Auto-Type sequence for this window +- Sequência personalizada de escrita automática para esta janela +- +- +- Inherit default Auto-Type sequence from the group +- Herdar sequência de auto escrita padrão deste grupo +- +- +- Use custom Auto-Type sequence: +- Utilizar sequência de auto escrita personalizada: +- +- +- +- EditEntryWidgetBrowser +- +- These settings affect to the entry's behaviour with the browser extension. +- Estas definições afetam o comportamento da entrada com a extensão do navegador. +- +- +- General +- Geral +- +- +- Skip Auto-Submit for this entry +- Ignorar submissão automática para esta entrada +- +- +- Hide this entry from the browser extension +- Ocultar esta entrada da extensão do navegador +- +- +- Additional URL's +- URL(s) extra +- +- +- Add +- Adicionar +- +- +- Remove +- Remover +- +- +- Edit +- Editar +- +- +- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. +- Apenas enviar esta definição para o navegador em diálogos HTTP Auth. Se ativa, os formulários normais de acesso não mostrarão esta entrada para seleção. +- +- +- Use this entry only with HTTP Basic Auth +- Apenas utilizar esta entrada com HTTP Basic Auth +- +- +- +- EditEntryWidgetHistory +- +- Show +- Mostrar +- +- +- Restore +- Restaurar +- +- +- Delete +- Apagar +- +- +- Delete all +- Apagar tudo +- +- +- Entry history selection +- Seleção de histórico de entradas +- +- +- Show entry at selected history state +- Mostrar entrada num estado do histórico +- +- +- Restore entry to selected history state +- Restaurar entrada para um valor do histórico +- +- +- Delete selected history state +- Apagar estado do histórico selecionado +- +- +- Delete all history +- Apagar todo o histórico +- +- +- +- EditEntryWidgetMain +- +- URL: +- URL: +- +- +- Password: +- Palavra-passe: +- +- +- Title: +- Título: +- +- +- Presets +- Predefinições +- +- +- Toggle the checkbox to reveal the notes section. +- Alternar caixa de seleção para mostrar a secção de notas. +- +- +- Username: +- Nome de utilizador: +- +- +- Url field +- Campo URL +- +- +- Download favicon for URL +- Descarregar 'favicon' para o URL +- +- +- Password field +- Campo Palavra-passe +- +- +- Toggle notes visible +- Alternar visibilidade das notas +- +- +- Expiration field +- Campo Caduca +- +- +- Expiration Presets +- Predefinições de caducidade +- +- +- Expiration presets +- Predefinições de caducidade +- +- +- Notes field +- Campo Notas +- +- +- Title field +- Campo Título +- +- +- Username field +- Campo Nome de utilizador +- +- +- Toggle expiration +- Alternar caducidade +- +- +- Notes: +- Notas: +- +- +- https://example.com +- https://example.com +- +- +- Expires: +- Caduca: +- +- +- Edit Entry +- Editar entrada +- +- +- +- EditEntryWidgetSSHAgent +- +- Form +- Formulário +- +- +- Remove key from agent after +- Remover chave do agente depois de +- +- +- seconds +- segundos +- +- +- Fingerprint +- Impressão digital +- +- +- Remove key from agent when database is closed/locked +- Remover chave do agente ao fechar/bloquear a base de dados +- +- +- Public key +- Chave pública +- +- +- Add key to agent when database is opened/unlocked +- Adicionar chave ao agente ao abrir/desbloquear a base de dados +- +- +- Comment +- Comentário +- +- +- Decrypt +- Decifrar +- +- +- n/a +- n/d +- +- +- Copy to clipboard +- Copiar para a área de transferência +- +- +- Private key +- Chave privada +- +- +- External file +- Ficheiro externo +- +- +- Browse... +- Button for opening file dialog +- Explorar... +- +- +- Attachment +- Anexo +- +- +- Add to agent +- Adicionar ao agente +- +- +- Remove from agent +- Remover do agente +- +- +- Require user confirmation when this key is used +- Solicitar confirmação para utilizar esta chave +- +- +- Remove key from agent after specified seconds +- Remover chave do agente após os segundos definidos +- +- +- Browser for key file +- Explorador para ficheiro-chave +- +- +- External key file +- Ficheiro-chave externo +- +- +- Select attachment file +- Selecionar anexo +- +- +- +- EditGroupWidget +- +- Group +- Grupo +- +- +- Icon +- Ãcone +- +- +- Properties +- Propriedades +- +- +- Add group +- Adicionar grupo +- +- +- Edit group +- Editar grupo +- +- +- Enable +- Ativar +- +- +- Disable +- Desativar +- +- +- Inherit from parent group (%1) +- Herdar do grupo (%1) +- +- +- Entry has unsaved changes +- Entrada com alterações não guardadas +- +- +- +- EditGroupWidgetKeeShare +- +- Type: +- Tipo: +- +- +- Path: +- Caminho: +- +- +- Password: +- Palavra-passe: +- +- +- Inactive +- Inativo +- +- +- KeeShare unsigned container +- Contentor KeeShare não assinado +- +- +- KeeShare signed container +- Contentor KeeShare assinado +- +- +- Select import source +- Selecione a origem da importação +- +- +- Select export target +- Selecione o destino da exportação +- +- +- Select import/export file +- Selecione o ficheiro de importação/exportação +- +- +- Clear +- Limpar +- +- +- Import +- Importar +- +- +- Export +- Exportar +- +- +- Synchronize +- Sincronizar +- +- +- Your KeePassXC version does not support sharing this container type. +-Supported extensions are: %1. +- A sua versão de KeePasXC não tem suporte a partilha deste tipo de contentor. +-As extensões suportadas são: %1. +- +- +- %1 is already being exported by this database. +- %1 já está a ser exportado para esta base de dados. +- +- +- %1 is already being imported by this database. +- %1 já está a ser importado para esta base de dados. +- +- +- %1 is being imported and exported by different groups in this database. +- %1 está a ser importada e exportada por grupos distintos desta base de dados. +- +- +- KeeShare is currently disabled. You can enable import/export in the application settings. +- KeeShare is a proper noun +- KeeShare está desativada. Pode ativar a importação/exportação nas definições. +- +- +- Database export is currently disabled by application settings. +- As suas definições não permitem a exportação de bases de dados. +- +- +- Database import is currently disabled by application settings. +- As suas definições não permitem a importação de bases de dados. +- +- +- Sharing mode field +- Campo Modo de partilha +- +- +- Path to share file field +- Caminho para o campo ficheiro de partilha +- +- +- Password field +- Campo Palavra-passe +- +- +- Clear fields +- Limpar campos +- +- +- Browse for share file +- Procurar por ficheiro de partilha +- +- +- Browse... +- Explorar... +- +- +- +- EditGroupWidgetMain +- +- Name field +- Campo Nome +- +- +- Notes field +- Campo Notas +- +- +- Toggle expiration +- Alternar caducidade +- +- +- Auto-Type toggle for this and sub groups +- Ativar/desativar escrita automática para este grupo e sub-grupos +- +- +- Expiration field +- Campo Caduca +- +- +- Search toggle for this and sub groups +- Ativar/desativar pesquisa para este grupo e os seus sub-grupos +- +- +- Default auto-type sequence field +- Campo Sequência padrão de escrita automática +- +- +- Expires: +- Caduca: +- +- +- Use default Auto-Type sequence of parent group +- Utilizar sequência de escrita automática do grupo relacionado +- +- +- Auto-Type: +- Escrita automática: +- +- +- Search: +- Pesquisa: +- +- +- Notes: +- Notas: +- +- +- Name: +- Nome: +- +- +- Set default Auto-Type sequence +- Definir sequência padrão para escrita automática +- +- +- Edit Group +- Editar grupo +- +- +- +- EditWidgetIcons +- +- Add custom icon +- Adicionar ícone personalizado +- +- +- Delete custom icon +- Apagar ícone personalizado +- +- +- Download favicon +- Descarregar 'favicon' +- +- +- Unable to fetch favicon. +- Não foi possível obter o 'favicon'. +- +- +- Images +- Imagens +- +- +- All files +- Todos os ficheiros +- +- +- Confirm Delete +- Confirmação de eliminação +- +- +- Select Image(s) +- Selecionar imagens +- +- +- Successfully loaded %1 of %n icon(s) +- %1 de %n ícone carregados com sucesso%1 de %n ícones carregados com sucesso +- +- +- No icons were loaded +- Não foram carregados ícones +- +- +- %n icon(s) already exist in the database +- %n ícone já existe na sua base de dados%n ícones já existem na sua base de dados +- +- +- The following icon(s) failed: +- Falha no seguinte ícone:Falha nos seguintes ícones: +- +- +- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? +- Este ícone é utilizado por %n entrada e será substituído pelo ícone padrão. Tem a certeza de que deseja apagar o ícone?Este ícone é utilizado por %n entradas e será substituído pelo ícone padrão. Tem a certeza de que deseja apagar o ícone? +- +- +- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security +- Pode ativar o serviço DuckDuckGo em Ferramentas -> Definições -> Segurança +- +- +- Download favicon for URL +- Descarregar 'favicon' para o URL +- +- +- Apply selected icon to subgroups and entries +- Aplicar ícone aos sub-grupos e entradas +- +- +- Also apply to child groups +- Aplicar aos grupos dependentes +- +- +- Also apply to child entries +- Aplicar às entradas dependentes +- +- +- Also apply to all children +- Aplicar também aos dependentes +- +- +- Existing icon selected. +- Selecionou um ícone existente. +- +- +- Use default icon +- Utilizar ícone padrão +- +- +- Use custom icon +- Utilizar ícone padrão +- +- +- Apply icon to... +- Aplicar ícone a... +- +- +- Apply to this group only +- Aplicar apenas a este grupo +- +- +- +- EditWidgetProperties +- +- Created: +- Criada: +- +- +- Modified: +- Modificada: +- +- +- Accessed: +- Acedida: +- +- +- Uuid: +- UUID: +- +- +- Plugin Data +- Dados do suplemento +- +- +- Remove +- Remover +- +- +- Delete plugin data? +- Apagar dados do suplemento? +- +- +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- Tem a certeza de que deseja apagar os dados do suplemento? +-Esta ação pode implicar um funcionamento errático. +- +- +- Key +- Chave +- +- +- Value +- Valor +- +- +- Datetime created +- Data/hora de criação +- +- +- Datetime modified +- Data/hora de modificação +- +- +- Datetime accessed +- Data/hora de acesso +- +- +- Unique ID +- ID unívoca +- +- +- Plugin data +- Dados do suplemento +- +- +- Remove selected plugin data +- Remover dados do suplemento selecionado +- +- +- +- Entry +- +- %1 - Clone +- %1 - Clone +- +- +- +- EntryAttachmentsModel +- +- Name +- Nome +- +- +- Size +- Tamanho +- +- +- +- EntryAttachmentsWidget +- +- Form +- Formulário +- +- +- Add +- Adicionar +- +- +- Remove +- Remover +- +- +- Open +- Abrir +- +- +- Save +- Guardar +- +- +- Select files +- Selecionar ficheiros +- +- +- Are you sure you want to remove %n attachment(s)? +- Tem a certeza de que deseja remover %n anexo?Tem a certeza de que deseja remover %n anexos? +- +- +- Save attachments +- Guardar anexos +- +- +- Unable to create directory: +-%1 +- Não foi possível criar o diretório: +-%1 +- +- +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- Tem a certeza de que deseja substituir o ficheiro "%1" pelo anexo? +- +- +- Confirm overwrite +- Confirmação de substituição +- +- +- Unable to save attachments: +-%1 +- Não foi possível guardar os anexos: +-%1 +- +- +- Unable to open attachment: +-%1 +- Não foi possível abrir o anexo: +-%1 +- +- +- Unable to open attachments: +-%1 +- Não foi possível abrir os anexos: +-%1 +- +- +- Confirm remove +- Confirmação de remoção +- +- +- Unable to open file(s): +-%1 +- Não foi possível abrir o ficheiro: +-%1Não foi possível abrir os ficheiros: +-%1 +- +- +- Attachments +- Anexos +- +- +- Add new attachment +- Adicionar novo anexo +- +- +- Remove selected attachment +- Remover anexo selecionado +- +- +- Open selected attachment +- Abrir anexo selecionado +- +- +- Save selected attachment to disk +- Guardar anexo selecionado no disco +- +- +- %1 is a big file (%2 MB). +-Your database may get very large and reduce performance. +- +-Are you sure to add this file? +- %1 é um ficheiro grande (%2 MB) +-A base de dados ficará muito grande e poderá reduzir o desempenho. +- +-Tem a certeza de que deseja adicionar este ficheiro? +- +- +- Confirm Attachment +- Confirmar anexo +- +- +- +- EntryAttributesModel +- +- Name +- Nome +- +- +- +- EntryHistoryModel +- +- Last modified +- Última modificação +- +- +- Title +- Título +- +- +- Username +- Nome de utilizador +- +- +- URL +- URL +- +- +- +- EntryModel +- +- Ref: +- Reference abbreviation +- Ref: +- +- +- Group +- Grupo +- +- +- Title +- Título +- +- +- Username +- Nome de utilizador +- +- +- URL +- URL +- +- +- Never +- Nunca +- +- +- Password +- Palavra-passe +- +- +- Notes +- Notas +- +- +- Expires +- Caduca +- +- +- Created +- Criada +- +- +- Modified +- Modificada +- +- +- Accessed +- Acedida +- +- +- Attachments +- Anexos +- +- +- Size +- Tamanho +- +- +- Group name +- Nome do grupo +- +- +- Entry title +- Título da entrada +- +- +- Entry notes +- Notas da entrada +- +- +- Entry expires at +- Entrada caduca a +- +- +- Creation date +- Data de criação +- +- +- Last modification date +- Data da última modificação +- +- +- Last access date +- Data do último acesso +- +- +- Attached files +- Ficheiros anexos +- +- +- Entry size +- Tamanho da entrada +- +- +- Has attachments +- Tem anexos +- +- +- Has TOTP one-time password +- Tem palavra-passe TOTP +- +- +- +- EntryPreviewWidget +- +- Close +- Fechar +- +- +- General +- Geral +- +- +- Username +- Nome de utilizador +- +- +- Password +- Palavra-passe +- +- +- Expiration +- Caducidade +- +- +- URL +- URL +- +- +- Attributes +- Atributos +- +- +- Attachments +- Anexos +- +- +- Notes +- Notas +- +- +- Autotype +- Escrita automática +- +- +- Window +- Janela +- +- +- Sequence +- Sequência +- +- +- Searching +- Pesquisa +- +- +- Search +- Pesquisa +- +- +- Clear +- Limpar +- +- +- Never +- Nunca +- +- +- [PROTECTED] +- [PROTEGIDA] +- +- +- Enabled +- Ativada +- +- +- Disabled +- Desativada +- +- +- Share +- Partilhar +- +- +- Display current TOTP value +- Mostrar valor TOTP atual +- +- +- Advanced +- Avançado +- +- +- Default Sequence +- Sequência padrão +- +- +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- attributes line +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- +- +- +- EntryURLModel +- +- Invalid URL +- URL inválido +- +- +- +- EntryView +- +- Fit to window +- Ajustar à janela +- +- +- Fit to contents +- Ajustar ao conteúdo +- +- +- Reset to defaults +- Repor predefinições +- +- +- Has attachments +- Entry attachment icon toggle +- Tem anexos +- +- +- Has TOTP +- Entry TOTP icon toggle +- Tem TOTP +- +- +- +- FdoSecrets::Item +- +- Entry "%1" from database "%2" was used by %3 +- A entrada "%1" da base de dados "%2" foi utilizada por %3 +- +- +- +- FdoSecrets::Service +- +- Failed to register DBus service at %1.<br/> +- Não foi possível registar o serviços DBus em %1.<br/> +- +- +- %n Entry(s) was used by %1 +- %1 is the name of an application +- %n entrada foi utilizada por %1%n entradas foram utilizadas por %1 +- +- +- +- FdoSecrets::SettingsDatabaseModel +- +- File Name +- Nome do ficheiro +- +- +- Group +- Grupo +- +- +- Manage +- Gerir +- +- +- Unlock to show +- Desbloquear para mostrar +- +- +- None +- Nada +- +- +- +- FdoSecrets::SettingsSessionModel +- +- Application +- Aplicação +- +- +- Manage +- Gerir +- +- +- +- FdoSecretsPlugin +- +- <b>Fdo Secret Service:</b> %1 +- <b>Fdo Secret Service:</b> %1 +- +- +- Unknown +- Unknown PID +- Desconhecido +- +- +- Unknown +- Unknown executable path +- Desconhecido +- +- +- <i>PID: %1, Executable: %2</i> +- <i>PID: 1234, Executable: /path/to/exe</i> +- <i>PID: %1, Executável: %2</i> +- +- +- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. +- Já existe um serviço em execução (%1)<br/> Tem que parar/remover este serviço antes de poder reativar a integração Secret Service. +- +- +- +- Group +- +- [empty] +- group has no children +- [vazio] +- +- +- +- HibpDownloader +- +- Online password validation failed +- Falha na validação online da palavra-passe +- +- +- +- IconDownloaderDialog +- +- Download Favicons +- Descarregar 'favicons' +- +- +- Cancel +- Cancelar +- +- +- Having trouble downloading icons? +-You can enable the DuckDuckGo website icon service in the security section of the application settings. +- Problemas para descarregar ícones? +-Pode ativar o serviço DuckDuckGo na secção 'Segurança' das definições. +- +- +- Close +- Fechar +- +- +- URL +- URL +- +- +- Status +- Estado +- +- +- Please wait, processing entry list... +- Por favor aguarde... +- +- +- Downloading... +- A descarregar... +- +- +- Ok +- Ok +- +- +- Already Exists +- Já existe +- +- +- Download Failed +- Falha ao descarregar +- +- +- Downloading favicons (%1/%2)... +- A descarregar (%1/%2)... +- +- +- +- KMessageWidget +- +- &Close +- Fe&char +- +- +- Close message +- Fechar mensagem +- +- +- +- Kdbx3Reader +- +- missing database headers +- cabeçalhos em falta da base de dados +- +- +- Header doesn't match hash +- Disparidade de 'hash' no cabeçalho +- +- +- Invalid header id size +- Tamanho inválido no id do cabeçalho +- +- +- Invalid header field length +- Comprimento do campo de cabeçalho inválido +- +- +- Invalid header data length +- Comprimento dos dados de cabeçalho inválido +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Credenciais inválidas. Por favor tente novamente. +-Caso isto volte a acontecer, pode ser que a base de dados esteja danificada. +- +- +- Unable to calculate database key +- Não foi possível calcular a chave da base de dados +- +- +- Unable to issue challenge-response: %1 +- Não foi possível emitir a pergunta de segurança: %1 +- +- +- +- Kdbx3Writer +- +- Unable to issue challenge-response: %1 +- Não foi possível emitir a pergunta de segurança: %1 +- +- +- Unable to calculate database key +- Não foi possível calcular a chave da base de dados +- +- +- +- Kdbx4Reader +- +- missing database headers +- cabeçalhos em falta da base de dados +- +- +- Invalid header checksum size +- Tamanho inválido para o 'checksum' do cabeçalho +- +- +- Header SHA256 mismatch +- Disparidade no cabeçalho SHA256 +- +- +- Unknown cipher +- Cifra desconhecida +- +- +- Invalid header id size +- Tamanho inválido para a ID do cabeçalho +- +- +- Invalid header field length +- Comprimento inválido para o campo de cabeçalho +- +- +- Invalid header data length +- Comprimento inválido para os dados do cabeçalho +- +- +- Failed to open buffer for KDF parameters in header +- Não foi possível processar os parâmetros KDF no cabeçalho +- +- +- Unsupported key derivation function (KDF) or invalid parameters +- Função de derivação de chave (KDF) não suportada ou parâmetros inválidos +- +- +- Legacy header fields found in KDBX4 file. +- Encontrados campos legados no ficheiro KDBX4. +- +- +- Invalid inner header id size +- Tamanho inválido na ID do cabeçalho interno +- +- +- Invalid inner header field length +- Comprimento inválido no campo de cabeçalho interno +- +- +- Invalid inner header binary size +- Tamanho binário inválido no cabeçalho interno +- +- +- Unsupported KeePass variant map version. +- Translation: variant map = data structure for storing meta data +- Versão não suportada da variente de mapa KeePass. +- +- +- Invalid variant map entry name length +- Translation: variant map = data structure for storing meta data +- Comprimento inválido no nome da entrada da variante de mapa +- +- +- Invalid variant map entry name data +- Translation: variant map = data structure for storing meta data +- Dados inválidos no nome da entrada da variante de mapa +- +- +- Invalid variant map entry value length +- Translation: variant map = data structure for storing meta data +- Comprimento inválido no valor de entrada na variente de mapa +- +- +- Invalid variant map entry value data +- Translation comment: variant map = data structure for storing meta data +- Dados inválidos no valor de entrada da variante de mapa +- +- +- Invalid variant map Bool entry value length +- Translation: variant map = data structure for storing meta data +- Comprimento inválido do valor de entrada booleano da variante de mapa +- +- +- Invalid variant map Int32 entry value length +- Translation: variant map = data structure for storing meta data +- Comprimento inválido no valor de entrada Int32 da variante de mapa +- +- +- Invalid variant map UInt32 entry value length +- Translation: variant map = data structure for storing meta data +- Comprimento inválido no valor de entrada UInt32 da variante de mapa +- +- +- Invalid variant map Int64 entry value length +- Translation: variant map = data structure for storing meta data +- Comprimento inválido no valor de entrada Int64 da variante de mapa +- +- +- Invalid variant map UInt64 entry value length +- Translation: variant map = data structure for storing meta data +- Comprimento inválido no valor de entrada UInt64 da variante de mapa +- +- +- Invalid variant map entry type +- Translation: variant map = data structure for storing meta data +- Tipo inválido na entrada da variante de mapa +- +- +- Invalid variant map field type size +- Translation: variant map = data structure for storing meta data +- Tamanho inválido no tipo de campo da variante de mapa +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Credenciais inválidas. Por favor tente novamente. +-Caso isto volte a acontecer, pode ser que a base de dados esteja danificada. +- +- +- (HMAC mismatch) +- (Disparidade HMAC) +- +- +- Unable to calculate database key: %1 +- Não foi possível calcular a chave da base de dados: %1 +- +- +- +- Kdbx4Writer +- +- Invalid symmetric cipher algorithm. +- Algoritmo inválido de cifra simétrica. +- +- +- Invalid symmetric cipher IV size. +- IV = Initialization Vector for symmetric cipher +- Tamanho inválido da cifra simétrica IV. +- +- +- Failed to serialize KDF parameters variant map +- Translation comment: variant map = data structure for storing meta data +- Não foi possível serializar os parâmetros KDF do mapa +- +- +- Unable to calculate database key: %1 +- Não foi possível calcular a chave da base de dados: %1 +- +- +- +- KdbxReader +- +- Unsupported cipher +- Cifra não suportada +- +- +- Invalid compression flags length +- Tamanho inválido da compressão +- +- +- Unsupported compression algorithm +- Algoritmo de compressão não suportado +- +- +- Invalid master seed size +- Tamanho inválido da semente mestre +- +- +- Invalid transform seed size +- Tamanho inválido da semente de transformação +- +- +- Invalid transform rounds size +- Tamanho inválido para os ciclos de transformação +- +- +- Invalid start bytes size +- Tamanho inválido dos bytes iniciais +- +- +- Invalid random stream id size +- Tamanho inválido da ID do fluxo aleatório +- +- +- Invalid inner random stream cipher +- Cifra inválida de fluxo aleatório interno +- +- +- Not a KeePass database. +- Não é uma base de dados do KeePass. +- +- +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- O ficheiro selecionado é uma base de dados do KeePass 1 (.kdb). +- +-Pode importá-lo em Base de dados - > 'Importar base de dados do KeePass 1...'. +-Esta é uma migração unidirecional. Não será possível abrir a base de dados importada com a versão 0.4 do KeePassX. +- +- +- Unsupported KeePass 2 database version. +- Versão da base de dados KeePass2 não suportada. +- +- +- Invalid cipher uuid length: %1 (length=%2) +- Tamanho inválido para o UUID da cifra: %1 (tamanho=%2) +- +- +- Unable to parse UUID: %1 +- Não foi possível processar UUID: %1 +- +- +- Failed to read database file. +- Não foi possível ler o ficheiro da base de dados. +- +- +- +- KdbxXmlReader +- +- XML parsing failure: %1 +- Não foi possível processar o XML: %1 +- +- +- No root group +- Sem grupo root +- +- +- Missing icon uuid or data +- Dados ou UUID do ícone em falta +- +- +- Missing custom data key or value +- Valor ou chave de dados personalizados em falta +- +- +- Multiple group elements +- Múltiplos elementos de grupo +- +- +- Null group uuid +- UUID de grupo nulo +- +- +- Invalid group icon number +- Número inválido de ícone de grupo +- +- +- Invalid EnableAutoType value +- Valor inválido para EnableAutoType +- +- +- Invalid EnableSearching value +- Valor inválido para EnableSearching +- +- +- No group uuid found +- UUID de grupo não encontrado +- +- +- Null DeleteObject uuid +- UUID de DeleteObject nulo +- +- +- Missing DeletedObject uuid or time +- Tempo ou UUID de DeletedObject em falta +- +- +- Null entry uuid +- Entrada de UUID nula +- +- +- Invalid entry icon number +- Número inválido na entrada de ícone +- +- +- History element in history entry +- Elemento de histórico na entrada do histórico +- +- +- No entry uuid found +- Não foi encontrada o UUID da entrada +- +- +- History element with different uuid +- Elemento do histórico com UUID diferente +- +- +- Duplicate custom attribute found +- Encontrado atributo personalizado em duplicado +- +- +- Entry string key or value missing +- Chave 'string' ou valor em falta +- +- +- Entry binary key or value missing +- Chave binária ou valor em falta +- +- +- Auto-type association window or sequence missing +- Associação de escrita automática ou sequência em falta +- +- +- Invalid bool value +- Valor booleano inválido +- +- +- Invalid date time value +- Valor de data/hora inválido +- +- +- Invalid color value +- Valor de cor inválido +- +- +- Invalid color rgb part +- Parte de cor RGB inválida +- +- +- Invalid number value +- Valor numérico inválido +- +- +- Invalid uuid value +- Valor UUID inválido +- +- +- Unable to decompress binary +- Translator meant is a binary data inside an entry +- Não foi possível descomprimir o binário +- +- +- XML error: +-%1 +-Line %2, column %3 +- Erro no XML: +-%1 +-Linha %2, coluna %3 +- +- +- +- KeeAgentSettings +- +- Invalid KeeAgent settings file structure. +- Estrutura inválida no ficheiro de definições KeeAgent. +- +- +- Private key is an attachment but no attachments provided. +- Chave privada é um anexo mas o anexo não foi indicado. +- +- +- Private key is empty +- Chave privada vazia +- +- +- File too large to be a private key +- Ficheiro muito grande para ser uma chave privada +- +- +- Failed to open private key +- Não foi possível abrir a chave privada +- +- +- +- KeePass1OpenWidget +- +- Unable to open the database. +- Não foi possível abrir a base de dados. +- +- +- Import KeePass1 Database +- Importar base de dados do KeePass 1 +- +- +- +- KeePass1Reader +- +- Unable to read keyfile. +- Não foi possível ler o ficheiro-chave. +- +- +- Not a KeePass database. +- Não é uma base de dados do KeePass. +- +- +- Unsupported encryption algorithm. +- Algoritmo de cifra não suportado. +- +- +- Unsupported KeePass database version. +- Versão da base de dados KeePass não suportada. +- +- +- Unable to read encryption IV +- IV = Initialization Vector for symmetric cipher +- Não foi possível ler a cifra IV +- +- +- Invalid number of groups +- Número inválido de grupos +- +- +- Invalid number of entries +- Número inválido de entradas +- +- +- Invalid content hash size +- Tamanho inválido para a 'hash' do conteúdo +- +- +- Invalid transform seed size +- Tamanho inválido da semente de transformação +- +- +- Invalid number of transform rounds +- Número inválido para os ciclos de transformação +- +- +- Unable to construct group tree +- Não foi possível criar a árvore de grupo +- +- +- Root +- Raiz +- +- +- Key transformation failed +- Não foi possível transformar a chave +- +- +- Invalid group field type number +- Número inválido do tipo de grupo de campo +- +- +- Invalid group field size +- Tamanho inválido do grupo de campo +- +- +- Read group field data doesn't match size +- Leitura de grupo de dados do campo não coincide no tamanho +- +- +- Incorrect group id field size +- Tamanho incorreto de campo de ID de grupo +- +- +- Incorrect group creation time field size +- Tamanho incorreto do campo do grupo de tempo de criação +- +- +- Incorrect group modification time field size +- Tamanho de campo de hora de alteração de grupo incorreto +- +- +- Incorrect group access time field size +- Tamanho de campo de tempo de acesso de grupo incorreto +- +- +- Incorrect group expiry time field size +- Tamanho inválido para o campo de caducidade do grupo +- +- +- Incorrect group icon field size +- Tamanho do campo do ícone de grupo incorreto +- +- +- Incorrect group level field size +- Tamanho de campo do nível de grupo incorreto +- +- +- Invalid group field type +- Tipo inválido para o campo de grupo +- +- +- Missing group id or level +- ID ou nível de grupo em falta +- +- +- Missing entry field type number +- Falta a entrada de tipo número no campo +- +- +- Invalid entry field size +- Tamanho inválido para o campo da entrada +- +- +- Read entry field data doesn't match size +- Dados do campo de entrada não coincidem no tamanho +- +- +- Invalid entry uuid field size +- Tamanho da entrada para o campo UUID inválido +- +- +- Invalid entry group id field size +- Tamanho da entrada para o campo identificador de grupo inválido +- +- +- Invalid entry icon field size +- Tamanho da entrada para o campo ícone inválido +- +- +- Invalid entry creation time field size +- Tamanho da entrada para o campo tempo de criação inválido +- +- +- Invalid entry modification time field size +- Tamanho da entrada para o campo tempo de alteração inválido +- +- +- Invalid entry expiry time field size +- Tamanho inválido para o campo de caducidade da entrada +- +- +- Invalid entry field type +- Tipo inválido para o campo da entrada +- +- +- unable to seek to content position +- Não foi possível pesquisar no conteúdo +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Credenciais inválidas. Por favor tente novamente. +-Caso isto volte a acontecer, pode ser que a base de dados esteja danificada. +- +- +- Unable to calculate database key +- Não foi possível calcular a chave da base de dados +- +- +- +- KeeShare +- +- Invalid sharing reference +- Referência de partilha inválida +- +- +- Inactive share %1 +- Partilha %1 inativa +- +- +- Imported from %1 +- Importada de %1 +- +- +- Exported to %1 +- Exportada para %1 +- +- +- Synchronized with %1 +- Sincronizada com %1 +- +- +- Import is disabled in settings +- A importação está desativada nas definições +- +- +- Export is disabled in settings +- A exportação está desativada nas definições +- +- +- Inactive share +- Partilha inativa +- +- +- Imported from +- Importada de +- +- +- Exported to +- Exportada para +- +- +- Synchronized with +- Sincronizada com +- +- +- +- KeyComponentWidget +- +- Key Component +- Componente chave +- +- +- Key Component Description +- Descrição do componente chave +- +- +- Cancel +- Cancelar +- +- +- Key Component set, click to change or remove +- Componente chave definido, clique para alterar ou remover +- +- +- Add %1 +- Add a key component +- Adicionar %1 +- +- +- Change %1 +- Change a key component +- Alterar %1 +- +- +- Remove %1 +- Remove a key component +- Remover %1 +- +- +- %1 set, click to change or remove +- Change or remove a key component +- %1 definida, clique para alterar ou remover +- +- +- +- KeyFileEditWidget +- +- Generate +- Gerar +- +- +- Key File +- Ficheiro-chave +- +- +- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> +- <p>Para mais segurança, pode adicionar um ficheiro-chave que contenha dados aleatórios.</p><p>Tem de o manter secreto e não o pode perder pois se tal acontecer, nunca mais conseguirá abrir a base de dados.</p> +- +- +- Error loading the key file '%1' +-Message: %2 +- Erro ao carregar o ficheiro-chave %1 +-Mensagem: %2 +- +- +- Key files +- Ficheiros-chave +- +- +- All files +- Todos os ficheiros +- +- +- Create Key File... +- Criar ficheiro-chave... +- +- +- Error creating key file +- Erro ao criar o ficheiro-chave +- +- +- Unable to create key file: %1 +- Não foi possível criar o ficheiro-chave: %1 +- +- +- Select a key file +- Selecione o ficheiro-chave +- +- +- Key file selection +- Seleção do ficheiro-chave +- +- +- Browse for key file +- Procurar ficheiro-chave +- +- +- Browse... +- Explorar... +- +- +- Generate a new key file +- Gerar um novo ficheiro-chave +- +- +- Note: Do not use a file that may change as that will prevent you from unlocking your database! +- AVISO: Não utilize um ficheiro que possa ser alterado pois deixará de conseguir desbloquear a sua base de dados! +- +- +- Invalid Key File +- Ficheiro-chave inválido +- +- +- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. +- Não pode utilizar o ficheiro da base de dados atual como ficheiro-chave. Escolha um ficheiro diferente ou crie um novo ficheiro-chave. +- +- +- Suspicious Key File +- Ficheiro-chave suspeito +- +- +- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. +-Are you sure you want to continue with this file? +- Parece que o ficheiro-chave utilizado é um ficheiro de uma base de dados. Deve utilizar um ficheiro estático ou deixará de conseguir aceder à sua base de dados. +-Tem a certeza de que deseja utilizar este ficheiro? +- +- +- Old key file format +- Formato de ficheiro-chave antigo +- +- +- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. +- Está a utilizar um formato de ficheiro-chave antigo que KeePassXC pode <br>deixar de ter suporte no futuro.<br><br>Deve considerar a geração de um novo ficheiro-chave. +- +- +- +- MainWindow +- +- &Database +- Base &de dados +- +- +- &Help +- Aj&uda +- +- +- &Groups +- &Grupos +- +- +- &Tools +- Ferramen&tas +- +- +- &Quit +- &Sair +- +- +- &About +- &Acerca +- +- +- Database settings +- Definições da base de dados +- +- +- Copy username to clipboard +- Copiar nome de utilizador para a área de transferência +- +- +- Copy password to clipboard +- Copiar palavra-passe para a área de transferência +- +- +- &Settings +- Definiçõe&s +- +- +- &Title +- &Título +- +- +- Copy title to clipboard +- Copiar título para a área de transferência +- +- +- &URL +- &URL +- +- +- Copy URL to clipboard +- Copiar URL para a área de transferência +- +- +- &Notes +- &Notas +- +- +- Copy notes to clipboard +- Copiar notas para a área de transferência +- +- +- Copy &TOTP +- Copiar &TOTP +- +- +- E&mpty recycle bin +- Limpar reciclage&m +- +- +- Clear history +- Limpar histórico +- +- +- Access error for config file %1 +- Erro de acesso ao ficheiro %1 +- +- +- Settings +- Definições +- +- +- Toggle window +- Alternar janela +- +- +- Quit KeePassXC +- Sair do KeePassXC +- +- +- Please touch the button on your YubiKey! +- Toque no botão da sua YubiKey! +- +- +- WARNING: You are using an unstable build of KeePassXC! +-There is a high risk of corruption, maintain a backup of your databases. +-This version is not meant for production use. +- AVISO: está a utilizar uma versão instável do KeePassXC! +-Existe um risco elevado de corrupção de ficheiros. Deve criar um backup da base de dados. +-Esta versão não deve ser utilizada em ambientes de produção. +- +- +- &Donate +- &Donativos +- +- +- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +-We recommend you use the AppImage available on our downloads page. +- AVISO: a versão Qt do seu sistema pode causar o encerramento do KeePassXC se estiver a utilizar o teclado no ecrã (On-Screen Keyboard)! +-Recomendamos que utilize a versão AppImage disponível no nosso site. +- +- +- &Import +- &Importar +- +- +- Create a new database +- Criar uma nova base de dados +- +- +- Merge from another KDBX database +- Combinar com outra base de dados KDBX +- +- +- Add a new entry +- Adicionar uma nova entrada +- +- +- View or edit entry +- Ver ou editar entrada +- +- +- Add a new group +- Adicionar um novo grupo +- +- +- Perform &Auto-Type +- Execut&ar escrita automática +- +- +- Open &URL +- Abrir &URL +- +- +- Import a KeePass 1 database +- Importar base de dados do KeePass 1 +- +- +- Import a CSV file +- Importar ficheiro CSV +- +- +- NOTE: You are using a pre-release version of KeePassXC! +-Expect some bugs and minor issues, this version is not meant for production use. +- NOTA: está a utilizar uma versão de testes do KeePassXC! +-Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes de produção. +- +- +- Check for updates on startup? +- Procurar por atualizações ao iniciar? +- +- +- Would you like KeePassXC to check for updates on startup? +- Deseja que o KeePassXC procure atualizações ao iniciar? +- +- +- You can always check for updates manually from the application menu. +- Também pode verificar se existem atualizações através do menu da aplicação. +- +- +- &Export +- &Exportar +- +- +- Sort &A-Z +- De &A-Z +- +- +- Sort &Z-A +- De &Z-A +- +- +- &Password Generator +- Gerador de &palavras-passe +- +- +- Import a 1Password Vault +- Importar um cofre 1Password +- +- +- &Getting Started +- &Iniciação +- +- +- &User Guide +- Guia de &utilizador +- +- +- &Keyboard Shortcuts +- Atal&hos de teclado +- +- +- &Recent Databases +- Bases de dados &recentes +- +- +- &Entries +- &Entradas +- +- +- Copy Att&ribute +- Copiar at&ributo +- +- +- TOTP +- TOTP +- +- +- View +- Vista +- +- +- Theme +- Tema +- +- +- &Check for Updates +- Pro&curar atualizações +- +- +- &Open Database… +- Abrir base de dad&os... +- +- +- &Save Database +- Guardar base de dado&s +- +- +- &Close Database +- Fe&char base de dados +- +- +- &New Database… +- &Nova base de dados... +- +- +- &Merge From Database… +- Co&mbinar da base de dados... +- +- +- &New Entry… +- &Nova entrada... +- +- +- &Edit Entry… +- &Editar entrada... +- +- +- &Delete Entry… +- Apagar entra&da... +- +- +- &New Group… +- &Novo grupo... +- +- +- &Edit Group… +- &Editar grupo... +- +- +- &Delete Group… +- Apagar g&rupo... +- +- +- Download All &Favicons… +- Descarregar todos os '&favicons'... +- +- +- Sa&ve Database As… +- G&uardar base de dados como... +- +- +- Database &Security… +- &Segurança da base de dados... +- +- +- Database &Reports... +- &Relatórios da base de dados... +- +- +- Statistics, health check, etc. +- Estatísticas, verificações, etc. +- +- +- &Database Settings… +- &Definições da base de dados... +- +- +- &Clone Entry… +- &Clonar entrada... +- +- +- Move u&p +- Mover para &cima +- +- +- Move entry one step up +- Move a entrada para cima +- +- +- Move do&wn +- Mover para &baixo +- +- +- Move entry one step down +- Move a entrada para baixo +- +- +- Copy &Username +- Copiar nome de &utilizador +- +- +- Copy &Password +- Copiar &palavra-passe +- +- +- Download &Favicon +- Descarregar '&favicon' +- +- +- &Lock Databases +- B&loquear bases de dados +- +- +- &CSV File… +- Ficheiro &CSV... +- +- +- &HTML File… +- Ficheiro &HTML... +- +- +- KeePass 1 Database… +- Base de dados do KeePass 1... +- +- +- 1Password Vault… +- Cofre 1Password... +- +- +- CSV File… +- Ficheiro CSV... +- +- +- Show TOTP +- Mostrar TOTP +- +- +- Show QR Code +- Mostrar código QR +- +- +- Set up TOTP… +- Configurar TOTP... +- +- +- Report a &Bug +- Reportar um &erro +- +- +- Open Getting Started Guide +- Abrir guia de iniciação +- +- +- &Online Help +- Ajuda &online +- +- +- Go to online documentation +- Aceder à documentação online +- +- +- Open User Guide +- Abrir manual de utilizador +- +- +- Save Database Backup... +- Guardar backup da base de dados... +- +- +- Add key to SSH Agent +- Adicionar chave ao agente SSH +- +- +- Remove key from SSH Agent +- Remover chave do agente SSH +- +- +- Compact Mode +- Modo compacto +- +- +- Automatic +- Automático +- +- +- Light +- Claro +- +- +- Dark +- Escuro +- +- +- Classic (Platform-native) +- Clássico (nativo do SO) +- +- +- Show Toolbar +- Mostrar barra de ferramentas +- +- +- Show Preview Panel +- Mostrar painel de pré-visualização +- +- +- Don't show again for this version +- Não mostrar novamente para esta versão +- +- +- Restart Application? +- Reiniciar aplicação? +- +- +- You must restart the application to apply this setting. Would you like to restart now? +- Tem que reiniciar a aplicação para aplicar as alterações. Gostaria de o fazer agora? +- +- +- Perform Auto-Type Sequence +- Executar sequência de escrita automática +- +- +- {USERNAME} +- {NomeDeUtilizador} +- +- +- {USERNAME}{ENTER} +- {NomeDeUtilizador}{ENTER} +- +- +- {PASSWORD} +- {Palavra-passe} +- +- +- {PASSWORD}{ENTER} +- {Palavra-passe}{ENTER} +- +- +- Always on Top +- Sempre na frente +- +- +- Hide Usernames +- Ocultar nome de utilizador +- +- +- Hide Passwords +- Ocultar palavras-passe +- +- +- +- ManageDatabase +- +- Database settings +- Definições da base de dados +- +- +- Edit database settings +- Editar definições da base de dados +- +- +- Unlock database +- Desbloquear base de dados +- +- +- Unlock database to show more information +- Desbloquear base de dados para mostrar mais informação +- +- +- Lock database +- Bloquear base de dados +- +- +- +- ManageSession +- +- Disconnect +- Desconectar +- +- +- Disconnect this application +- Desconectar esta aplicação +- +- +- +- Merger +- +- Creating missing %1 [%2] +- A criar %1 [%2] +- +- +- Relocating %1 [%2] +- A realocar %1 [%2] +- +- +- Overwriting %1 [%2] +- A substituir %1 [%2] +- +- +- older entry merged from database "%1" +- entrada antiga combinada da base de dados %1 +- +- +- Adding backup for older target %1 [%2] +- A adicionar backup para o destino antigo %1 [%2] +- +- +- Adding backup for older source %1 [%2] +- A adicionar backup para a origem antiga %1 [%2] +- +- +- Reapplying older target entry on top of newer source %1 [%2] +- A reaplicar a entrada de destino antiga na origem recente %1 [%2] +- +- +- Reapplying older source entry on top of newer target %1 [%2] +- A reaplicar a entrada de origem antiga no destinio recente %1 [%2] +- +- +- Synchronizing from newer source %1 [%2] +- A sincronizar da origem recente %1 [%2] +- +- +- Synchronizing from older source %1 [%2] +- A sincronizar da origem antiga %1 [%2] +- +- +- Deleting child %1 [%2] +- A apagar dependente %1 [%2] +- +- +- Deleting orphan %1 [%2] +- A apagar órfão %1 [%2] +- +- +- Changed deleted objects +- Objetos apagados alterados +- +- +- Adding missing icon %1 +- Adicionar ícone em falta %1 +- +- +- Removed custom data %1 [%2] +- Dados personalizados removidos %1 [%2] +- +- +- Adding custom data %1 [%2] +- A adicionar dados personalizados %1 [%2] +- +- +- +- NewDatabaseWizard +- +- Create a new KeePassXC database... +- Criar uma nova base de dados do KeePassXC... +- +- +- Root +- Root group +- Raiz +- +- +- +- NewDatabaseWizardPage +- +- WizardPage +- Assistente +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Aqui pode ajustar as definições de cifra da sua base de dados. Não se preocupe porque, a qualquer momento, poderá alterar esta opção nas definições da base de dados. +- +- +- Advanced Settings +- Definições avançadas +- +- +- Simple Settings +- Definições básicas +- +- +- Encryption Settings +- Definições de cifra +- +- +- +- NewDatabaseWizardPageDatabaseKey +- +- Database Credentials +- Credenciais da base de dados +- +- +- A set of credentials known only to you that protects your database. +- Um conjunto de credenciais só suas e que protegem a base de dados. +- +- +- +- NewDatabaseWizardPageEncryption +- +- Encryption Settings +- Definições de cifra +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Aqui pode ajustar as definições de cifra da sua base de dados. Não se preocupe porque, a qualquer momento, poderá alterar esta opção nas definições da base de dados. +- +- +- +- NewDatabaseWizardPageMetaData +- +- General Database Information +- Informação geral sobre a base de dados +- +- +- Please fill in the display name and an optional description for your new database: +- Preencha o nome de exibição e uma descrição extra para a sua nova base de dados: +- +- +- +- NixUtils +- +- Password Manager +- Gestor de palavras-passe +- +- +- +- OpData01 +- +- Invalid OpData01, does not contain header +- OpData01 inválido, não existe um cabeçalho +- +- +- Unable to read all IV bytes, wanted 16 but got %1 +- Não foi possível ler todos os bytes IV, necessita 16 e obteve %1 +- +- +- Unable to init cipher for opdata01: %1 +- Não foi possível iniciar a cifra para OpData01: %1 +- +- +- Unable to read all HMAC signature bytes +- Não foi possível ler todos os bytes da assinatura HMAC +- +- +- Malformed OpData01 due to a failed HMAC +- OpData01 mal formado por causa de uma falha HMAC +- +- +- Unable to process clearText in place +- Não foi possível processar 'clear-text' localmente +- +- +- Expected %1 bytes of clear-text, found %2 +- Esperados %1 bytes de 'clear-text' mas foram encontrados %2 +- +- +- +- OpVaultOpenWidget +- +- Read Database did not produce an instance +-%1 +- A leitura da base de dados não produziu uma instância +-%1 +- +- +- +- OpVaultReader +- +- Directory .opvault must exist +- Tem que existir um diretório .opvault +- +- +- Directory .opvault must be readable +- O diretório .opvault tem que ser legível +- +- +- Directory .opvault/default must exist +- Tem que existir o diretório .opvault/default +- +- +- Directory .opvault/default must be readable +- O diretório .opvault/default tem que ser legível +- +- +- Unable to decode masterKey: %1 +- Não foi possível descodificar a chave-mestre: %1 +- +- +- Unable to derive master key: %1 +- Não foi possível derivar a chave-mestre: %1 +- +- +- +- OpenSSHKey +- +- Invalid key file, expecting an OpenSSH key +- Chave inválida, esperada chave OpenSSH +- +- +- PEM boundary mismatch +- Disparidade nos limites PEM +- +- +- Base64 decoding failed +- Falha de descodificação Base64 +- +- +- Key file way too small. +- Ficheiro-chave muito pequeno. +- +- +- Key file magic header id invalid +- ID do cabeçalho mágico do ficheiro-chave inválida +- +- +- Found zero keys +- Encontradas zero chaves +- +- +- Failed to read public key. +- Não foi possível ler a chave pública. +- +- +- Corrupted key file, reading private key failed +- Ficheiro danificado, não foi possível ler a chave privada +- +- +- No private key payload to decrypt +- Não existe uma chave privada para decifrar +- +- +- Trying to run KDF without cipher +- A tentar executar KDF sem cifra +- +- +- Passphrase is required to decrypt this key +- Necessita de uma frase-chave para decifrar esta chave +- +- +- Key derivation failed, key file corrupted? +- Falha na derivação da chave, ficheiro-chave danificado? +- +- +- Decryption failed, wrong passphrase? +- Falha ao decifrar, frase-chave errada? +- +- +- Unexpected EOF while reading public key +- EOF inesperado ao ler a chave pública +- +- +- Unexpected EOF while reading private key +- EOF inesperado ao ler a chave privada +- +- +- Can't write public key as it is empty +- Incapaz de escrever a chave pública porque está vazia +- +- +- Unexpected EOF when writing public key +- EOF inesperado ao escrever a chave pública +- +- +- Can't write private key as it is empty +- Incapaz de escrever a chave privada porque está vazia +- +- +- Unexpected EOF when writing private key +- EOF inesperado ao escrever a chave privada +- +- +- Unsupported key type: %1 +- Tipo de chave não suportado: %1 +- +- +- Unknown cipher: %1 +- Cifra desconhecida: %1 +- +- +- Cipher IV is too short for MD5 kdf +- Cifra IV é muito curta para MD5 kdf +- +- +- Unknown KDF: %1 +- KDF desconhecido: %1 +- +- +- Unknown key type: %1 +- Tipo de chave desconhecido: %1 +- +- +- +- PasswordEdit +- +- Passwords do not match +- Disparidade nas palavras-passe +- +- +- Passwords match so far +- Correspondências até agora +- +- +- Toggle Password (%1) +- Alternar palavra-passe (%1) +- +- +- Generate Password (%1) +- Gerar palavra-passe (%1) +- +- +- Warning: Caps Lock enabled! +- Aviso: Caps Lock ativado! +- +- +- +- PasswordEditWidget +- +- Enter password: +- Introduza a palavra-passe: +- +- +- Confirm password: +- Confirmação de palavra-passe: +- +- +- Password +- Palavra-passe +- +- +- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> +- <p>A palavra-passe é o método primário para proteger a sua base de dados.</p><p>As boas palavras-passe são extensão e únicas. O KeePassXC pode gerar uma palavra-passe por si.</p> +- +- +- Passwords do not match. +- Disparidade nas palavras-passe. +- +- +- Password field +- Campo Palavra-passe +- +- +- Repeat password field +- Campo Repetição de palavra-passe +- +- +- +- PasswordGeneratorWidget +- +- %p% +- %p% +- +- +- strength +- Password strength +- qualidade +- +- +- entropy +- entropia +- +- +- Password +- Palavra-passe +- +- +- Character Types +- Tipos de caracteres +- +- +- Numbers +- Números +- +- +- Extended ASCII +- ASCII expandido +- +- +- Exclude look-alike characters +- Excluir caracteres semelhantes +- +- +- Pick characters from every group +- Obter caracteres de todos os grupos +- +- +- &Length: +- &Tamanho: +- +- +- Passphrase +- Frase-chave +- +- +- Wordlist: +- Lista de palavras: +- +- +- Word Separator: +- Separador de palavras: +- +- +- Close +- Fechar +- +- +- Entropy: %1 bit +- Entropia: %1 bit +- +- +- Password Quality: %1 +- Qualidade da palavra-passe: %1 +- +- +- Poor +- Password quality +- Má +- +- +- Weak +- Password quality +- Fraca +- +- +- Good +- Password quality +- Boa +- +- +- Excellent +- Password quality +- Excelente +- +- +- Switch to advanced mode +- Ativar modo avançado +- +- +- Advanced +- Avançado +- +- +- Braces +- Parênteses +- +- +- Punctuation +- Pontuação +- +- +- Quotes +- Aspas +- +- +- Logograms +- Logo-gramas +- +- +- Character set to exclude from generated password +- Conjunto de caracteres a excluir da palavra-passe gerada +- +- +- Do not include: +- Não incluir: +- +- +- Add non-hex letters to "do not include" list +- Adicionar letras 'non-hex' à lista de exclusão +- +- +- Hex +- Hex +- +- +- Excluded characters: "0", "1", "l", "I", "O", "|", "ï¹’" +- Caracteres excluídos: "0", "1", "l", "I", "O", "|", "ï¹’" +- +- +- Generated password +- Palavra-passe gerada +- +- +- Upper-case letters +- Letras maiúsculas +- +- +- Lower-case letters +- Letras minúsculas +- +- +- Special characters +- Caracteres especiais +- +- +- Math Symbols +- Símbolos matemáticos +- +- +- Dashes and Slashes +- Traços e travessões +- +- +- Excluded characters +- Caracteres excluídos +- +- +- Hex Passwords +- Palavras-passe Hex +- +- +- Password length +- Tamanho da palavra-passe +- +- +- Word Case: +- Tipo de letra: +- +- +- Regenerate password +- Recriar palavra-passe +- +- +- Copy password +- Copiar palavra-passe +- +- +- lower case +- minúsculas +- +- +- UPPER CASE +- MAIÚSCULAS +- +- +- Title Case +- Primeira Letra Em Maiúscula +- +- +- Generate Password +- Gerar palavra-passe +- +- +- Also choose from: +- Escolher também de: +- +- +- Additional characters to use for the generated password +- Caracteres extra a utilizar na palavra-passe gerada +- +- +- Additional characters +- Caracteres extra +- +- +- Word Count: +- Número de palavras: +- +- +- Esc +- Esc +- +- +- Apply Password +- Aplicar palavra-passe +- +- +- Ctrl+S +- Ctrl+S +- +- +- Regenerate password (%1) +- Recriar palavra-passe (%1) +- +- +- Special Characters +- Caracteres especiais +- +- +- +- QApplication +- +- KeeShare +- KeeShare +- +- +- Statistics +- Estatísticas +- +- +- Very weak password +- Palavra-passe muito fraca +- +- +- Password entropy is %1 bits +- A entropia da palavra-passe é de %1 bits +- +- +- Weak password +- Palavra-passe fraca +- +- +- Used in %1/%2 +- Utilizada em %1/%2 +- +- +- Password is used %1 times +- Palavra-passe utilizada %1 vezes +- +- +- Password has expired +- Palavra-passe caducada +- +- +- Password expiry was %1 +- Palavra-passe caducou em %1 +- +- +- Password is about to expire +- Palavra-passe perto de caducar +- +- +- Password expires in %1 days +- Palavra-passe caduca dentro de %1 dias +- +- +- Password will expire soon +- Palavra-passe está perto de caducar +- +- +- Password expires on %1 +- Palavra-passe caduca em %1 +- +- +- Health Check +- Verificações de qualidade +- +- +- HIBP +- HIBP +- +- +- +- QMessageBox +- +- Overwrite +- Substituir +- +- +- Delete +- Apagar +- +- +- Move +- Mover +- +- +- Empty +- Sim +- +- +- Remove +- Remover +- +- +- Skip +- Ignorar +- +- +- Disable +- Desativar +- +- +- Merge +- Combinar +- +- +- Continue +- Continuar +- +- +- +- QObject +- +- Database not opened +- Base de dados não aberta +- +- +- Database hash not available +- 'Hash' da base de dados não disponível +- +- +- Client public key not received +- Chave pública do cliente não recebida +- +- +- Cannot decrypt message +- Não foi possível decifrar a mensagem +- +- +- Action cancelled or denied +- Ação cancelada ou recusada +- +- +- KeePassXC association failed, try again +- Não foi possível associar KeePassXC. Por favor tente novamente. +- +- +- Encryption key is not recognized +- Chave de cifra não reconhecida +- +- +- Incorrect action +- Ação incorreta +- +- +- Empty message received +- Recebida mensagem vazia +- +- +- No URL provided +- URL não disponibilizado +- +- +- No logins found +- Não existem credenciais +- +- +- Unknown error +- Erro desconhecido +- +- +- Add a new entry to a database. +- Adicionar entrada à base de dados. +- +- +- Path of the database. +- Caminho da base de dados. +- +- +- Key file of the database. +- Ficheiro-chave da base de dados. +- +- +- path +- caminho +- +- +- Username for the entry. +- Nome de utilizador para a entrada. +- +- +- username +- nome de utilizador +- +- +- URL for the entry. +- URL para a entrada. +- +- +- URL +- URL +- +- +- Prompt for the entry's password. +- Pedir palavra-passe para a entrada. +- +- +- Generate a password for the entry. +- Gerar palavra-passe para a entrada. +- +- +- length +- tamanho +- +- +- Path of the entry to add. +- Caminho da entrada a adicionar. +- +- +- Path of the entry to clip. +- clip = copy to clipboard +- Caminho da entrada a copiar. +- +- +- Timeout in seconds before clearing the clipboard. +- Tempo limite, em segundos, antes de limpar a área de transferência. +- +- +- Edit an entry. +- Editar entrada. +- +- +- Title for the entry. +- Título para a entrada. +- +- +- title +- título +- +- +- Path of the entry to edit. +- Caminho da entrada a editar. +- +- +- Estimate the entropy of a password. +- Estimar entropia da palavra-passe. +- +- +- Password for which to estimate the entropy. +- Palavra-passe para a qual será estimada a entropia. +- +- +- Perform advanced analysis on the password. +- Executar análise avançada da palavra-passe. +- +- +- +- +-Available commands: +- +- +- +-Comandos disponíveis: +- +- +- +- Name of the command to execute. +- Nome do comando a executar. +- +- +- List database entries. +- Listar entradas da base de dados. +- +- +- Path of the group to list. Default is / +- Caminho do grupo a listar. Padrão é / +- +- +- Find entries quickly. +- Localizar entradas rapidamente. +- +- +- Search term. +- Termo de pesquisa. +- +- +- Merge two databases. +- Combinar duas bases de dados. +- +- +- Path of the database to merge from. +- Caminho da base de dados de origem para a combinação. +- +- +- Use the same credentials for both database files. +- Utilizar as mesmas credenciais para ambos os ficheiros de bases de dados. +- +- +- Key file of the database to merge from. +- Ficheiro-chave da base de dados para a combinação. +- +- +- Show an entry's information. +- Mostrar informações de uma entrada. +- +- +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- Nome dos atributos a mostrar. Esta opção pode ser especificada mais do que uma vez, sendo que os atributos são mostrados um por linha, na ordem indicada. Se não especificar atributos, será dado um resumo dos atributos padrão. +- +- +- attribute +- atributo +- +- +- Name of the entry to show. +- Nome da entrada a mostrar. +- +- +- NULL device +- Dispositivo NULL +- +- +- error reading from device +- erro ao ler do dispositivo +- +- +- malformed string +- cadeira mal fomada +- +- +- missing closing quote +- carácter de fecho em falta +- +- +- Group +- Grupo +- +- +- Title +- Título +- +- +- Username +- Nome de utilizador +- +- +- Password +- Palavra-passe +- +- +- Notes +- Notas +- +- +- Last Modified +- Última modificação +- +- +- Created +- Criada +- +- +- Browser Integration +- Integração com o navegador +- +- +- SSH Agent +- Agente SSH +- +- +- Generate a new random diceware passphrase. +- Gerar uma frase-chave baseada em dados (diceware). +- +- +- Word count for the diceware passphrase. +- Número de palavras para a frase-chave. +- +- +- Wordlist for the diceware generator. +-[Default: EFF English] +- Lista de palavras para o gerador. +-[Padrão: EFF inglês] +- +- +- Generate a new random password. +- Gerar nova palavra-passe aleatória. +- +- +- Could not create entry with path %1. +- Não foi possível criar a entrada com o caminho %1. +- +- +- Enter password for new entry: +- Introduza a palavra-passe para a nova entrada: +- +- +- Writing the database failed %1. +- Não foi possível escrever na base de dados %1. +- +- +- Successfully added entry %1. +- Entrada %1 adicionada com sucesso. +- +- +- Invalid timeout value %1. +- Valor limite inválido %1. +- +- +- Entry %1 not found. +- Entrada %1 não encontrada. +- +- +- Entry with path %1 has no TOTP set up. +- A entrada com o caminho %1 não tem uma TOTP configurada. +- +- +- Clearing the clipboard in %1 second(s)... +- A área de transferência será limpa dentro de %1 segundo...A área de transferência será limpa dentro de %1 segundos... +- +- +- Clipboard cleared! +- Ãrea de transferência limpa! +- +- +- Silence password prompt and other secondary outputs. +- Silenciar pedidos de palavra-passe e outros resultados secundários. +- +- +- count +- CLI parameter +- número +- +- +- Could not find entry with path %1. +- Não foi possível encontrar a entrada com o caminho %1. +- +- +- Not changing any field for entry %1. +- Não foi alterado qualquer campo para a entrada %1. +- +- +- Enter new password for entry: +- Introduza a nova palavra-passe da entrada: +- +- +- Writing the database failed: %1 +- Não foi possível escrever na base de dados: %1 +- +- +- Successfully edited entry %1. +- Entrada %1 editada com sucesso. +- +- +- Length %1 +- Tamanho %1 +- +- +- Entropy %1 +- Entropia %1 +- +- +- Log10 %1 +- Log10 %1 +- +- +- Multi-word extra bits %1 +- Bits extra multi-palavra %1 +- +- +- Type: Bruteforce +- Tipo: Bruteforce +- +- +- Type: Dictionary +- Tipo: Dictionary +- +- +- Type: Dict+Leet +- Tipo: Dict+Leet +- +- +- Type: User Words +- Tipo: User Words +- +- +- Type: User+Leet +- Tipo: User+Leet +- +- +- Type: Repeated +- Tipo: Repeated +- +- +- Type: Sequence +- Tipo: Sequence +- +- +- Type: Spatial +- Tipo: Spatial +- +- +- Type: Date +- Tipo: Date +- +- +- Type: Bruteforce(Rep) +- Tipo: Bruteforce(Rep) +- +- +- Type: Dictionary(Rep) +- Tipo: Dictionary(Rep) +- +- +- Type: Dict+Leet(Rep) +- Tipo: Dict+Leet(Rep) +- +- +- Type: User Words(Rep) +- Tipo: User Words(Rep) +- +- +- Type: User+Leet(Rep) +- Tipo: User+Leet(Rep) +- +- +- Type: Repeated(Rep) +- Tipo: Repeated(Rep) +- +- +- Type: Sequence(Rep) +- Tipo: Sequence(Rep) +- +- +- Type: Spatial(Rep) +- Tipo: Spatial(Rep) +- +- +- Type: Date(Rep) +- Tipo: Date(Rep) +- +- +- Type: Unknown%1 +- Tipo: Desconhecido%1 +- +- +- Entropy %1 (%2) +- Entropia %1 (%2) +- +- +- *** Password length (%1) != sum of length of parts (%2) *** +- *** Tamanho da palavra-passe (%1) != soma do tamanho das partes (%2) *** +- +- +- Failed to load key file %1: %2 +- Não foi possível carregar o ficheiro-chave %1: %2 +- +- +- Length of the generated password +- Tamanho da palavra-passe gerada +- +- +- Use lowercase characters +- Utilizar letras minúsculas +- +- +- Use uppercase characters +- Utilizar letras maiúsculas +- +- +- Use special characters +- Utilizar caracteres especiais +- +- +- Use extended ASCII +- Utilizar ASCII expandido +- +- +- Exclude character set +- Conjunto de caracteres a excluir +- +- +- chars +- caracteres +- +- +- Exclude similar looking characters +- Excluir caracteres semelhantes +- +- +- Include characters from every selected group +- Incluir caracteres de todos os grupos selecionados +- +- +- Recursively list the elements of the group. +- Listar recursivamente todos os elementos do grupo +- +- +- Cannot find group %1. +- Não foi possível encontrar o grupo %1. +- +- +- Error reading merge file: +-%1 +- Erro ao ler o ficheiro de combinação: +-%1 +- +- +- Unable to save database to file : %1 +- Não foi possível guardar a base de dados no ficheiro: %1 +- +- +- Unable to save database to file: %1 +- Não foi possível guardar a base de dados no ficheiro: %1 +- +- +- Successfully recycled entry %1. +- Entrada %1 movida para a reciclagem. +- +- +- Successfully deleted entry %1. +- A entrada %1 foi apagada. +- +- +- Show the entry's current TOTP. +- Mostrar TOTP da entrada atual. +- +- +- ERROR: unknown attribute %1. +- Erro: atributo desconhecido %1. +- +- +- No program defined for clipboard manipulation +- Não definiu um programa para manipular a área de transferência +- +- +- file empty +- ficheiro vazio +- +- +- %1: (row, col) %2,%3 +- %1: (linha, coluna) %2,%3 +- +- +- AES-KDF (KDBX 4) +- AES-KDF (KDBX 4) +- +- +- AES-KDF (KDBX 3.1) +- AES-KDF (KDBX 3.1) +- +- +- Invalid Settings +- TOTP +- Definições inválidas +- +- +- Invalid Key +- TOTP +- Chave inválida +- +- +- Message encryption failed. +- Não foi possível cifrar a mensagem. +- +- +- No groups found +- Não foram encontrados grupos +- +- +- Create a new database. +- Criar uma nova base de dados. +- +- +- File %1 already exists. +- Ficheiro %1 já existe. +- +- +- Loading the key file failed +- Não foi possível carregar o ficheiro-chave. +- +- +- No key is set. Aborting database creation. +- Chave não definida. A abortar criação da base de dados. +- +- +- Failed to save the database: %1. +- Não foi possível guardar a base de dados: %1. +- +- +- Successfully created new database. +- A base de dados foi criada com sucesso. +- +- +- Creating KeyFile %1 failed: %2 +- Não foi possível criar o ficheiro-chave %1: %2 +- +- +- Loading KeyFile %1 failed: %2 +- Não foi possível carregar o ficheiro-chave %1: %2 +- +- +- Path of the entry to remove. +- Caminho da entrada a remover. +- +- +- Existing single-instance lock file is invalid. Launching new instance. +- O ficheiro de bloqueio da instância única é inválido. A iniciar nova instância. +- +- +- The lock file could not be created. Single-instance mode disabled. +- Não foi possível criar o ficheiro de bloqueio. Modo de única instância desativado. +- +- +- KeePassXC - cross-platform password manager +- KeePassXC - Gestor de palavras-passe multi-plataforma +- +- +- filenames of the password databases to open (*.kdbx) +- nome de ficheiro das bases de dados a abrir (*.kdbx) +- +- +- path to a custom config file +- caminho para um ficheiro de configuração personalizado +- +- +- key file of the database +- ficheiro-chave da base de dados +- +- +- read password of the database from stdin +- ler palavra-passe da base de dados a partir de stdin +- +- +- Another instance of KeePassXC is already running. +- Já está em execução uma instância do KeePassXC. +- +- +- Fatal error while testing the cryptographic functions. +- Erro fatal ao testar as funções de criptografia. +- +- +- KeePassXC - Error +- KeePassXC - Erro +- +- +- Database password: +- Palavra-passe da base de dados: +- +- +- Cannot create new group +- Não foi possível criar o novo grupo +- +- +- Deactivate password key for the database. +- Desativar chave de segurança para a base de dados. +- +- +- Displays debugging information. +- Mostra a informação de depuração. +- +- +- Deactivate password key for the database to merge from. +- Desativar palavra-passe da base de dados de origem. +- +- +- Version %1 +- Versão %1 +- +- +- Build Type: %1 +- Tipo de compilação: %1 +- +- +- Revision: %1 +- Revisão: %1 +- +- +- Distribution: %1 +- Distribuição: %1 +- +- +- Debugging mode is disabled. +- Modo de depuração desativado. +- +- +- Debugging mode is enabled. +- Modo de depuração ativado. +- +- +- Operating system: %1 +-CPU architecture: %2 +-Kernel: %3 %4 +- Sistema operativo: %1 +-Arquitetura do CPU: %2 +-Kernel: %3 %4 +- +- +- Auto-Type +- Escrita automática +- +- +- KeeShare (signed and unsigned sharing) +- KeeShare (partilha assinada e não assinada) +- +- +- KeeShare (only signed sharing) +- KeeShare (apenas partilha assinada) +- +- +- KeeShare (only unsigned sharing) +- KeeShare (apenas partilha não assinada) +- +- +- YubiKey +- YubiKey +- +- +- TouchID +- TouchID +- +- +- None +- Nada +- +- +- Enabled extensions: +- Extensões ativas: +- +- +- Cryptographic libraries: +- Bibliotecas de criptografia: +- +- +- Cannot generate a password and prompt at the same time! +- Não pode utilizar as opções "Gerar palavra-passe" e "Pedir palavra-passe" ao mesmo tempo"! +- +- +- Adds a new group to a database. +- Adiciona um novo grupo à base de dados. +- +- +- Path of the group to add. +- Caminho do grupo a adicionar. +- +- +- Group %1 already exists! +- Grupo %1 já existe! +- +- +- Group %1 not found. +- Grupo %1 não encontrado! +- +- +- Successfully added group %1. +- Grupo %1 adicionado com sucesso. +- +- +- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. +- Verifique se as suas palavras-passe foram expostas publicamente. FILENAME tem que ser o caminho de um ficheiro que liste as 'hashes' SHA-1 das palavras-passe expostas (no formato HIBP), tal como definido em https://haveibeenpwned.com/Passwords. +- +- +- FILENAME +- FILENAME +- +- +- Analyze passwords for weaknesses and problems. +- Analisar qualidade e problemas das palavras-passe. +- +- +- Failed to open HIBP file %1: %2 +- Não foi possível abrir o ficheiro HIBP %1: %2 +- +- +- Evaluating database entries against HIBP file, this will take a while... +- A avaliar as entradas da base de dados com o ficheiro HIBP, por favor aguarde... +- +- +- Close the currently opened database. +- Fechar a base de dados aberta. +- +- +- Display this help. +- Mostra esta ajuda. +- +- +- slot +- slot +- +- +- Invalid word count %1 +- Número de palavras inválido: %1 +- +- +- The word list is too small (< 1000 items) +- A lista de palavras é muito pequena (< 1000 itens) +- +- +- Exit interactive mode. +- Sair do modo interativo. +- +- +- Exports the content of a database to standard output in the specified format. +- Exporta o conteúdo da base de dados para o formato especificado. +- +- +- Unable to export database to XML: %1 +- Não foi possível exportar a base de dados para o formato XML: %1 +- +- +- Unsupported format %1 +- Formato não suportado: %1 +- +- +- Use numbers +- Utilizar números +- +- +- Invalid password length %1 +- Tamanho inválido %1 +- +- +- Display command help. +- Mostra a ajuda para os comandos. +- +- +- Available commands: +- Comandos disponíveis: +- +- +- Import the contents of an XML database. +- Importar conteúdo de uma base de dados no formato XML. +- +- +- Path of the XML database export. +- Caminho para guardar a base de dados em XML. +- +- +- Path of the new database. +- Caminho da nova base de dados. +- +- +- Successfully imported database. +- Base de dados importada com sucesso. +- +- +- Unknown command %1 +- Comando desconhecido - %1 +- +- +- Flattens the output to single lines. +- Restringe o resultado para uma linha única. +- +- +- Only print the changes detected by the merge operation. +- Imprimir apenas as alterações detetadas pela operação de combinação. +- +- +- Yubikey slot for the second database. +- 'Slot' Yubikey para a segunda base de dados. +- +- +- Successfully merged %1 into %2. +- %1 combinado com sucesso para %2. +- +- +- Database was not modified by merge operation. +- A base de dados não foi modificada pela combinação. +- +- +- Moves an entry to a new group. +- Move uma entrada para outro grupo. +- +- +- Path of the entry to move. +- Caminho da entrada a mover. +- +- +- Path of the destination group. +- Caminho do grupo de destino. +- +- +- Could not find group with path %1. +- Não foi possível encontrar o grupo no caminho %1. +- +- +- Entry is already in group %1. +- O grupo %1 já possui esta entrada. +- +- +- Successfully moved entry %1 to group %2. +- Entrada %1 movida com sucesso para o grupo %2. +- +- +- Open a database. +- Abrir base de dados. +- +- +- Path of the group to remove. +- Caminho do grupo a remover. +- +- +- Cannot remove root group from database. +- Não é possível remover o grupo raiz da base de dados. +- +- +- Successfully recycled group %1. +- Grupo %1 enviado para a reciclagem. +- +- +- Successfully deleted group %1. +- O gripo %1 foi apagado. +- +- +- Failed to open database file %1: not found +- Não foi possível abrir %1: ficheiro não encontrado +- +- +- Failed to open database file %1: not a plain file +- Não foi possível abrir %1: não é um ficheiro simples +- +- +- Failed to open database file %1: not readable +- Não foi possível abrir %1: ficheiro não legível +- +- +- Enter password to unlock %1: +- Introduza a palavra-passe para desbloquear %1: +- +- +- Invalid YubiKey slot %1 +- 'Slot' Yubikey inválida: %1 +- +- +- Enter password to encrypt database (optional): +- Introduza a palavra-passe para cifrar a base de dados (opcional): +- +- +- HIBP file, line %1: parse error +- Ficheiro HIBP, linha %1: erro ao processar +- +- +- Secret Service Integration +- Integração 'Secret Service' +- +- +- User name +- Nome de utilizador +- +- +- Password for '%1' has been leaked %2 time(s)! +- A palavra-passe para '%1' foi exposta %2 vez!A palavra-passe para '%1' foi exposta %2 vezes! +- +- +- Invalid password generator after applying all options +- Gerador de palavras-passe inválido depois de aplicar todas as opções +- +- +- Show the protected attributes in clear text. +- Mostrar atributos protegidos em 'clear-text'. +- +- +- Browser Plugin Failure +- Falha no plugin do navegador +- +- +- Could not save the native messaging script file for %1. +- Não foi possível guardar o script de mensagens nativas para %1. +- +- +- Copy the given attribute to the clipboard. Defaults to "password" if not specified. +- Copiar atributo para a área de transferÊncia. Utiliza "password" se nenhum for especificado. +- +- +- Copy the current TOTP to the clipboard (equivalent to "-a totp"). +- Copiar TOTP para a área de transferência (equivalente a "-a totp"). +- +- +- Copy an entry's attribute to the clipboard. +- Copiar atributo de uma entrada para a área de transferência. +- +- +- ERROR: Please specify one of --attribute or --totp, not both. +- ERRO: tem que especificar --attribute ou --totp, mas não ambos. +- +- +- ERROR: attribute %1 is ambiguous, it matches %2. +- ERRO: atributo %1 é ambíguo porque coincide com %2. +- +- +- Attribute "%1" not found. +- Atributo %1 não encontrado. +- +- +- Entry's "%1" attribute copied to the clipboard! +- Atributo da entrada "%1" copiado para a área de transferência! +- +- +- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). +- Slot Yubikey e número de série (opcional) para aceder à base de dados (exemplo 1:7370001). +- +- +- slot[:serial] +- slot[:serial] +- +- +- Target decryption time in MS for the database. +- Duração (em ms) para decifrar a base de dados. +- +- +- time +- duração +- +- +- Set the key file for the database. +- Definir um ficheiro-chave para a base de dados. +- +- +- Set a password for the database. +- Definir uma palavra-passe para a base de dados. +- +- +- Invalid decryption time %1. +- Duração inválida %1. +- +- +- Target decryption time must be between %1 and %2. +- A duração para decifrar tem que estar entre %1 e%2. +- +- +- Failed to set database password. +- Não foi possível definir a palavra-passe para a base de dados. +- +- +- Benchmarking key derivation function for %1ms delay. +- Função de derivação de chave para um atraso de %1 ms. +- +- +- Setting %1 rounds for key derivation function. +- A definir %1 ciclos para a função de derivação da chave. +- +- +- error while setting database key derivation settings. +- erro ao definir as definições de derivação da chave. +- +- +- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. +- Formato a utilizar para a exportação. As opções possíveis são 'xml' e 'csv'. Por definição, é utilizado o formato 'XML'. +- +- +- Unable to import XML database: %1 +- Não foi possível importar a base de dados em XML: %1 +- +- +- Show a database's information. +- Mostrar informação da base de dados. +- +- +- UUID: +- UUID: +- +- +- Name: +- Nome: +- +- +- Description: +- Descrição: +- +- +- Cipher: +- Cifra: +- +- +- KDF: +- KDF: +- +- +- Recycle bin is enabled. +- Reciclagem ativada. +- +- +- Recycle bin is not enabled. +- Reciclagem desativada. +- +- +- Invalid command %1. +- Comando inválido %1. +- +- +- Invalid YubiKey serial %1 +- N.º de série YubiKey inválido %1 +- +- +- Please touch the button on your YubiKey to continue… +- Toque no botão da YubiKey para continuar... +- +- +- Do you want to create a database with an empty password? [y/N]: +- Tem a certeza de que deseja criar a base de dados com uma palavra-passe vazia? [y/N]: +- +- +- Repeat password: +- Repetição de palavra-passe: +- +- +- Error: Passwords do not match. +- Erro: disparidade nas palavras-passe. +- +- +- All clipping programs failed. Tried %1 +- +- Falha em todos os programas. Tentados %1 +- +- +- +- AES (%1 rounds) +- AES (%1 ciclos) +- +- +- AES 256-bit +- AES 256-bit +- +- +- Twofish 256-bit +- Twofish 256-bit +- +- +- ChaCha20 256-bit +- ChaCha20: 256-bit {20 256-?} +- +- +- Benchmark %1 delay +- Testar atraso de %1 +- +- +- %1 ms +- milliseconds +- %1 ms%1 ms +- +- +- %1 s +- seconds +- %1 s%1 s +- +- +- path to a custom local config file +- caminho para um ficheiro de configuração local +- +- +- WARNING: You are using an old key file format which KeePassXC may +-stop supporting in the future. +- +-Please consider generating a new key file. +- AVISO: está a utilizar um formato de ficheiro-chave antigo que KeePassXC +-pode deixar de ter suporte no futuro. +- +-Deve considerar a geração de um novo ficheiro-chave. +- +- +- Argon2%1 (%2 rounds, %3 KB) +- Argon2%1 (%2 ciclos, %3 KB) +- +- +- Argon2d (KDBX 4 – recommended) +- Argon2d (KDBX 4 – recomendado) +- +- +- Argon2id (KDBX 4) +- Argon2id (KDBX 4) +- +- +- TOTP +- TOTP +- +- +- Icon +- Ãcone +- +- +- Unsupported key file version: %1 +- Versão de ficheiro-chave não suportada: %1 +- +- +- Checksum mismatch! Key file may be corrupt. +- Disparidade 'checksum'! O ficheiro-chave pode estar danificado. +- +- +- Unexpected key file data! Key file may be corrupt. +- Dados inesperados! O ficheiro-chave pode estar danificado. +- +- +- +- QtIOCompressor +- +- Internal zlib error when compressing: +- Erro interno zlib durante a compressão: +- +- +- Error writing to underlying device: +- Erro de escrita no dispositivo subjacente: +- +- +- Error opening underlying device: +- Erro ao abrir o dispositivo subjacente: +- +- +- Error reading data from underlying device: +- Erro de leitura no dispositivo subjacente: +- +- +- Internal zlib error when decompressing: +- Erro interno zlib durante a descompressão: +- +- +- +- QtIOCompressor::open +- +- The gzip format not supported in this version of zlib. +- O formato gzip não é suportado por esta versão zlib. +- +- +- Internal zlib error: +- Erro interno zlib: +- +- +- +- ReportsWidgetHealthcheck +- +- Also show entries that have been excluded from reports +- Incluir também as entradas que tenham sido excluídas dos relatórios +- +- +- Hover over reason to show additional details. Double-click entries to edit. +- Passe com o rato pelo motivo para obter mais informação. Clique duas vezes na entrada para editar. +- +- +- Bad +- Password quality +- Má +- +- +- Bad — password must be changed +- Má - deve alterar a palavra-passe +- +- +- Poor +- Password quality +- Má +- +- +- Poor — password should be changed +- Fraquinha - deve alterar a palavra-passe +- +- +- Weak +- Password quality +- Fraca +- +- +- Weak — consider changing the password +- Fraca - considere alterar a palavra-passe +- +- +- (Excluded) +- (Excluída) +- +- +- This entry is being excluded from reports +- Esta entrada está a ser excluída dos relatórios +- +- +- Please wait, health data is being calculated... +- Por favor aguarde, os dados estão a ser calculados... +- +- +- Congratulations, everything is healthy! +- Parabéns, tudo parece estar bem! +- +- +- Title +- Título +- +- +- Path +- Caminho +- +- +- Score +- Avaliação +- +- +- Reason +- Motivo +- +- +- Edit Entry... +- Editar entrada... +- +- +- Exclude from reports +- Excluir dos relatórios +- +- +- +- ReportsWidgetHibp +- +- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. +- ATENÇÃO: este relatório envia informações para o serviço Have I Been Pwned (https://haveibeenpwned.com). Se continuar, as suas palavras-passe serão cifradas com 'hashes' e os primeiros 5 caracteres dessas 'hashes' serão enviados para o serviço. A sua base de dados não sofre alterações e não pode ser reconstituída a partir desta informação. Contudo, o número de palavras-passe enviadas e o seu endereço IP serão expostos ao serviço. +- +- +- Perform Online Analysis +- Executar análise online +- +- +- Also show entries that have been excluded from reports +- Incluir também as entradas que tenham sido excluídas dos relatórios +- +- +- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. +- Esta versão do KeePassXC não possui funcionalidades de rede. Necessita da funcionalidade de rede para comparar as suas palavras-passe com as base de dados Have I Been Pwned (HIBP). +- +- +- Congratulations, no exposed passwords! +- Parabéns, não possui palavras-passe expostas! +- +- +- Title +- Título +- +- +- Path +- Caminho +- +- +- Password exposed… +- Palavra-passe exposta... +- +- +- (Excluded) +- (Excluída) +- +- +- This entry is being excluded from reports +- Esta entrada está a ser excluída dos relatórios +- +- +- once +- uma +- +- +- up to 10 times +- até 10 vezes +- +- +- up to 100 times +- até 100 vezes +- +- +- up to 1000 times +- até 1000 vezes +- +- +- up to 10,000 times +- até 10 000 vezes +- +- +- up to 100,000 times +- até 100 000 vezes +- +- +- up to a million times +- até 1 milhão de vezes +- +- +- millions of times +- milhões de vezes +- +- +- Edit Entry... +- Editar entrada... +- +- +- Exclude from reports +- Excluir dos relatórios +- +- +- +- ReportsWidgetStatistics +- +- Hover over lines with error icons for further information. +- Passe com o rato por cima das linhas com o erro para mais informações. +- +- +- Name +- Nome +- +- +- Value +- Valor +- +- +- Please wait, database statistics are being calculated... +- Por favor aguarde. As estatísticas da base de dados estão a ser calculadas... +- +- +- Database name +- Nome da base de dados +- +- +- Description +- Descrição +- +- +- Location +- Localização +- +- +- Last saved +- Última gravação +- +- +- Unsaved changes +- Alterações por guardar +- +- +- yes +- sim +- +- +- no +- não +- +- +- The database was modified, but the changes have not yet been saved to disk. +- A base de dados foi modificada mas as alterações ainda não foram guardadas. +- +- +- Number of groups +- Número de grupos +- +- +- Number of entries +- Numero de entradas +- +- +- Number of expired entries +- Número de entradas caducadas +- +- +- The database contains entries that have expired. +- A base de dados contém entradas caducadas. +- +- +- Unique passwords +- Palavras-passe unívocas +- +- +- Non-unique passwords +- Palavras-passe não unívocas +- +- +- More than 10% of passwords are reused. Use unique passwords when possible. +- Mais de 10% das palavras-passes foram reutilizadas. Se possível, utilize palavras-passe unívocas. +- +- +- Maximum password reuse +- Número máximo de reutilizações +- +- +- Some passwords are used more than three times. Use unique passwords when possible. +- Algumas palavras-passe estão a ser utilizadas mais do que 3 vezes. Se possível, utilize palavras-passes unívocas. +- +- +- Number of short passwords +- Número de palavras-passes curtas +- +- +- Recommended minimum password length is at least 8 characters. +- Recomendamos que utilize palavras-passe com um mínimo de 8 caracteres. +- +- +- Number of weak passwords +- Número de palavras-passe fracas +- +- +- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. +- Recomendamos que utilize palavras-passe longas e aleatórias e que tenham uma avaliação 'boa' ou 'excelente'. +- +- +- Entries excluded from reports +- Entradas excluídas dos relatórios +- +- +- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. +- A exclusão de entradas dos relatórios, porque sabe-se que são de fraca qualidade, não é necessariamente um problema mas deve manter uma atenção sobre as mesmas. +- +- +- Average password length +- Tamanho médio das palavras-passe +- +- +- %1 characters +- %1 caracteres +- +- +- Average password length is less than ten characters. Longer passwords provide more security. +- O tamanho médio das palavras-passe é inferior a 10 caracteres. Palavras-passe com tamanho maior conferem mais segurança. +- +- +- +- SSHAgent +- +- Agent connection failed. +- Erro ao conectar com o agente. +- +- +- Agent protocol error. +- Erro no protocolo do agente. +- +- +- No agent running, cannot add identity. +- O agente não está em execução e não é possível adicionar a identidade. +- +- +- No agent running, cannot remove identity. +- O agente não está em execução e não é possível remover a identidade. +- +- +- Agent refused this identity. Possible reasons include: +- O agente recusou esta identidade. Causas possíveis: +- +- +- The key has already been added. +- A chave já foi adicionada. +- +- +- Restricted lifetime is not supported by the agent (check options). +- O tempo de vida restrito não é suportado pelo agente (consulte as opções). +- +- +- A confirmation request is not supported by the agent (check options). +- O agente não tem suporte a pedidos de confirmação (consulte as opções). +- +- +- Key identity ownership conflict. Refusing to add. +- Conflito na titularidade da chave. Não será adicionada. +- +- +- No agent running, cannot list identities. +- Nenhum agente em execução, não é possível listar as identidades. +- +- +- +- SearchHelpWidget +- +- Search Help +- Pesquisar na ajuda +- +- +- Search terms are as follows: [modifiers][field:]["]term["] +- Introduza os termos de pesquisa da seguinte forma: [modificadores][campo:]["]termo["] +- +- +- Every search term must match (ie, logical AND) +- Todos os termos de pesquisa coincidentes (AND lógico) +- +- +- Modifiers +- Modificadores +- +- +- exclude term from results +- excluir termo dos resultados +- +- +- match term exactly +- coincidência exata +- +- +- use regex in term +- utilizar regex no termo +- +- +- Fields +- Campos +- +- +- Term Wildcards +- Caracteres universais do termo +- +- +- match anything +- coincidência relativa +- +- +- match one +- uma coincidência +- +- +- logical OR +- OU lógico +- +- +- Examples +- Exemplos +- +- +- +- SearchWidget +- +- Search +- Pesquisa +- +- +- Limit search to selected group +- Limitar pesquisa ao grupo selecionado +- +- +- Search Help +- Pesquisar na ajuda +- +- +- Search (%1)... +- Search placeholder text, %1 is the keyboard shortcut +- Pesquisar (%1)... +- +- +- Case sensitive +- Diferenciar maiúsculas/minúsculas +- +- +- +- SettingsWidgetFdoSecrets +- +- Options +- Opções +- +- +- Enable KeepassXC Freedesktop.org Secret Service integration +- Ativar integração Freedesktop.org Secret Service no KeepassXC +- +- +- General +- Geral +- +- +- Show notification when credentials are requested +- Mostrar notificação se as credenciais forem solicitadas +- +- +- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> +- <html><head/><body><p>Se ativar a reciclagem para esta base de dados, as entradas serão movidas diretamente para a reciclagem. Se não a utilizar, as entradas serão apagadas sem qualquer confirmação.</p><p>Contudo, se as entradas apagadas forem referenciadas por outras, será mostrado um aviso.</p></body></html> +- +- +- Exposed database groups: +- Grupos expostos: +- +- +- Authorization +- Autorização +- +- +- These applications are currently connected: +- Estas aplicações estão conectadas: +- +- +- Don't confirm when entries are deleted by clients +- Não confirmar se as entradas forem apagadas pelos clientes +- +- +- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. +- <b>Erro:</b> falha na ligação a DBus. Verifique a configuração DBus. +- +- +- <b>Warning:</b> +- <b>Aviso:</b> +- +- +- Save current changes to activate the plugin and enable editing of this section. +- Guarde as alterações atuais para ativar o plugin e permitir a edição desta secção. +- +- +- +- SettingsWidgetKeeShare +- +- Active +- Ativo +- +- +- Allow export +- Permitir exportação +- +- +- Allow import +- Permitir importação +- +- +- Own certificate +- Certificado próprio +- +- +- Fingerprint: +- Impressão digital: +- +- +- Certificate: +- Certificado: +- +- +- Signer +- Signatário: +- +- +- Key: +- Chave: +- +- +- Generate +- Gerar +- +- +- Import +- Importar +- +- +- Export +- Exportar +- +- +- Imported certificates +- Certificados importados +- +- +- Trust +- Confiar +- +- +- Ask +- Perguntar +- +- +- Untrust +- Deixar de confiar +- +- +- Remove +- Remover +- +- +- Path +- Caminho +- +- +- Status +- Estado +- +- +- Fingerprint +- Impressão digital +- +- +- Certificate +- Certificado +- +- +- Trusted +- Confiável +- +- +- Untrusted +- Não confiável +- +- +- Unknown +- Desconhecido +- +- +- key.share +- Filetype for KeeShare key +- chave.partilha +- +- +- KeeShare key file +- Ficheiro-chave KeeShare +- +- +- All files +- Todos os ficheiros +- +- +- Select path +- Selecionar caminho +- +- +- Exporting changed certificate +- Exportação do certificado alterado +- +- +- The exported certificate is not the same as the one in use. Do you want to export the current certificate? +- O certificado exportado não é o que está a ser utilizado. Deseja exportar o certificado atual? +- +- +- Signer: +- Signatário: +- +- +- Allow KeeShare imports +- Permitir importação KeeShare +- +- +- Allow KeeShare exports +- Permitir exportação KeeShare +- +- +- Only show warnings and errors +- Mostrar apenas avisos e erros +- +- +- Key +- Chave +- +- +- Signer name field +- Campo Nome do signatário +- +- +- Generate new certificate +- Gerar novo certificado +- +- +- Import existing certificate +- Importar certificado +- +- +- Export own certificate +- Exportar o meu certificado +- +- +- Known shares +- Partilhas conhecidas +- +- +- Trust selected certificate +- Confiar no certificado selecionado +- +- +- Ask whether to trust the selected certificate every time +- Perguntar sempre pela fiabilidade do certificado selecionado +- +- +- Untrust selected certificate +- Deixar de confiar no certificado selecionado +- +- +- Remove selected certificate +- Remover certificado selecionado +- +- +- +- ShareExport +- +- Overwriting signed share container is not supported - export prevented +- A substituição de contentores de partilha assinados não é suportada - exportação evitada +- +- +- Could not write export container (%1) +- Não foi possível escrever o contentor de exportação (%1) +- +- +- Could not embed signature: Could not open file to write (%1) +- Assinatura não incorporada. Não foi possível abrir o ficheiro para escrita (%1) +- +- +- Could not embed signature: Could not write file (%1) +- Assinatura não incorporada. Não foi possível escrever no ficheiro (%1) +- +- +- Could not embed database: Could not open file to write (%1) +- Base de dados não incorporada. Não foi possível abrir o ficheiro para escrita (%1) +- +- +- Could not embed database: Could not write file (%1) +- Base de dados não incorporada. Não foi possível escrever no ficheiro (%1) +- +- +- Overwriting unsigned share container is not supported - export prevented +- A substituição de contentores de partilha não assinados não é suportada - exportação evitada +- +- +- Could not write export container +- Não foi possível escrever o contentor de exportação +- +- +- Unexpected export error occurred +- Ocorreu um erro inesperado ao exportar +- +- +- +- ShareImport +- +- Import from container without signature +- Importar de um contentor sem assinatura +- +- +- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? +- Não foi possível verificar a fonte do contentor partilhado, porque não está assinado. Tem a certeza de que o quer importar de %1? +- +- +- Import from container with certificate +- Importar de um contentor com certificado +- +- +- Do you want to trust %1 with the fingerprint of %2 from %3? +- Deseja confiar em %1 com a impressão digital de %2 em %3? +- +- +- Not this time +- Agora não +- +- +- Never +- Nunca +- +- +- Always +- Sempre +- +- +- Just this time +- Apenas agora +- +- +- Signed share container are not supported - import prevented +- O contentor de partilha assinado não é suportado - importação evitada +- +- +- File is not readable +- O ficheiro não é legível +- +- +- Invalid sharing container +- Contentor de partilha inválido +- +- +- Untrusted import prevented +- Importação não fiável impedida +- +- +- Successful signed import +- Importação assinada bem sucedida +- +- +- Unsigned share container are not supported - import prevented +- O contentor de partilha não assinado não é suportado - importação evitada +- +- +- Successful unsigned import +- Importação não assinada bem sucedida +- +- +- File does not exist +- O ficheiro não existe +- +- +- Unknown share container type +- Tipo de contentor de partilha desconhecido +- +- +- +- ShareObserver +- +- Import from %1 failed (%2) +- Não foi possível importar %1 (%2) +- +- +- Import from %1 successful (%2) +- %1 foi importada com sucesso (%2) +- +- +- Imported from %1 +- Importada de %1 +- +- +- Export to %1 failed (%2) +- Não foi possível exportar %1 (%2) +- +- +- Export to %1 successful (%2) +- %1 foi exportada com sucesso (%2) +- +- +- Export to %1 +- Exportar para %1 +- +- +- Multiple import source path to %1 in %2 +- Diversos caminhos de importação para %1 em %2 +- +- +- Conflicting export target path %1 in %2 +- Conflito no caminho de exportação para %1 em %2 +- +- +- +- TotpDialog +- +- Timed Password +- Palavra-passe limitada +- +- +- 000000 +- 000000 +- +- +- Copy +- Copiar +- +- +- Expires in <b>%n</b> second(s) +- Caduca dentro de <b>%n</b> segundoCaduca dentro de <b>%n</b> segundos +- +- +- +- TotpExportSettingsDialog +- +- Copy +- Copiar +- +- +- NOTE: These TOTP settings are custom and may not work with other authenticators. +- TOTP QR code dialog warning +- Nota: estas definições TOTP são personalizadas e podem não funcionar com outros autenticadores. +- +- +- There was an error creating the QR code. +- Ocorreu um erro ao criar o código QR. +- +- +- Closing in %1 seconds. +- A fechar dentro de %1 segundos. +- +- +- +- TotpSetupDialog +- +- Setup TOTP +- Configurar TOTP +- +- +- Default RFC 6238 token settings +- Definições padrão do 'token' RFC 6238 +- +- +- Steam token settings +- Definições do 'token' do fluxo +- +- +- Use custom settings +- Utilizar definições personalizadas +- +- +- Custom Settings +- Definições personalizadas +- +- +- Time step: +- Avanço de tempo: +- +- +- sec +- Seconds +- seg +- +- +- Code size: +- Tamanho do código: +- +- +- Secret Key: +- Chave secreta: +- +- +- Secret key must be in Base32 format +- A chave secreta tem que estar no formato Base32 +- +- +- Secret key field +- Campo Chave secreta +- +- +- Algorithm: +- Algoritmo: +- +- +- Time step field +- Campo Avanço de tempo +- +- +- digits +- dígitos +- +- +- Invalid TOTP Secret +- TOTP secreta inválida +- +- +- You have entered an invalid secret key. The key must be in Base32 format. +-Example: JBSWY3DPEHPK3PXP +- Introduziu uma chave secreta inválida. A chave tem que estar no formato Base32. Exemplo: JBSWY3DPEHPK3PXP +- +- +- Confirm Remove TOTP Settings +- Confirmar remoção das definições TOTP +- +- +- Are you sure you want to delete TOTP settings for this entry? +- Tem a certeza de que deseja remover as definições TOTP desta entrada? +- +- +- +- URLEdit +- +- Invalid URL +- URL inválido +- +- +- +- UpdateCheckDialog +- +- Checking for updates +- A procurar por atualizações +- +- +- Checking for updates... +- A procurar por atualizações... +- +- +- Close +- Fechar +- +- +- Update Error! +- Erro ao atualizar! +- +- +- An error occurred in retrieving update information. +- Ocorreu um erro ao obter a informação de atualização. +- +- +- Please try again later. +- Por favor tente mais tarde. +- +- +- Software Update +- Atualização do programa +- +- +- A new version of KeePassXC is available! +- Está disponível uma nova versão do KeePassXC! +- +- +- KeePassXC %1 is now available — you have %2. +- Está disponível o KeePassXC %1 — você tem a versão %2. +- +- +- Download it at keepassxc.org +- Descarregue em keepassxc.org +- +- +- You're up-to-date! +- Versão atualizada! +- +- +- KeePassXC %1 is currently the newest version available +- Atualmente, KeePassXC %1 é a versão mais recente +- +- +- +- WelcomeWidget +- +- Start storing your passwords securely in a KeePassXC database +- Armazene as suas palavras-passe em segurança com o KeePassXC +- +- +- Create new database +- Criar nova base de dados +- +- +- Open existing database +- Abrir base de dados existente +- +- +- Import from KeePass 1 +- Importar de KeePass 1 +- +- +- Import from CSV +- Importar de ficheiro CSV +- +- +- Recent databases +- Bases de dados recentes +- +- +- Welcome to KeePassXC %1 +- Bem-vindo ao KeePassXC %1 +- +- +- Import from 1Password +- Importar de 1Password +- +- +- Open a recent database +- Abrir uma base de dados recente +- +- +- +- YubiKey +- +- %1 [%2] Configured Slot - %3 +- %1 [%2] Slot configurada - %3 +- +- +- %1 [%2] Challenge Response - Slot %3 - %4 +- %1 [%2] Pergunta de segurança - Slot %3 - %4 +- +- +- Press +- Prima +- +- +- Passive +- Passiva +- +- +- %1 Invalid slot specified - %2 +- %1 Especificado um slot inválido - %2 +- +- +- The YubiKey interface has not been initialized. +- A interface YubiKey não foi inicializada. +- +- +- Hardware key is currently in use. +- A chave de hardware está a ser utilizada. +- +- +- Could not find hardware key with serial number %1. Please plug it in to continue. +- Não foi possível localizar a chave de hardware com o número de série %1. Introduza a sua chave de hardware para continuar. +- +- +- Hardware key timed out waiting for user interaction. +- Tempo limite excedido ou à espera de interação do utilizador. +- +- +- A USB error ocurred when accessing the hardware key: %1 +- Ocorreu um erro USB ao tentar aceder à chave de hardware: %1 +- +- +- Failed to complete a challenge-response, the specific error was: %1 +- Erro ao tentar concluir a pergunta de segurança. O erro foi: %1 +- +- +- +- YubiKeyEditWidget +- +- Refresh +- Recarregar +- +- +- YubiKey Challenge-Response +- Pergunta de segurança YubiKey +- +- +- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- <p>Se tiver uma <a href="https://www.yubico.com/">YubiKey</a>, pode utilizá-la para obter mais segurança.</p><p>A YubiKey requer que uma das suas ranhuras seja programada como uma <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- +- +- Refresh hardware tokens +- Recarregar 'tokens' de hardware +- +- +- Hardware key slot selection +- Seleção de 'slot' para a chave de hardware +- +- +- Could not find any hardware keys! +- Não foram encontradas chaves de hardware! +- +- +- Selected hardware key slot does not support challenge-response! +- A chave de hardware selecionada não tem suporte a pergunta de segurança! +- +- +- Detecting hardware keys… +- A detetar chaves de hardware... +- +- +- No hardware keys detected +- Não foram detetadas chaves de hardware +- +- +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_ro.ts keepassxc-2.6.4-patched/share/translations/keepassx_ro.ts +--- keepassxc-2.6.4-orig/share/translations/keepassx_ro.ts 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/translations/keepassx_ro.ts 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7887 +0,0 @@ +- +- +- AboutDialog +- +- About KeePassXC +- Despre KeePassXC +- +- +- About +- Despre +- +- +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- RaportaÈ›i erorile la: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- +- +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- KeePassXC este distribuit în conformitate cu termenii GNU General Public License (GPL) versiunea 2 sau (la opÈ›iunea dumneavoastră) versiunea 3. +- +- +- Contributors +- Contribuitori +- +- +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Vezi contibuÈ›iile pe GitHub</a> +- +- +- Debug Info +- InformaÈ›ii depanare +- +- +- Include the following information whenever you report a bug: +- IncludeÈ›i următoarea informaÈ›ie când raportaÈ›i o eroare: +- +- +- Copy to clipboard +- Copiază în clipboard +- +- +- Project Maintainers: +- MentenanÈ›ii proiectului: +- +- +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- MulÈ›umiri speciale de la echipa KeePassXC Du-te la debfx pentru crearea KeePassX original. +- +- +- +- AgentSettingsWidget +- +- Use OpenSSH for Windows instead of Pageant +- Folositi OpenSSH pentru Windows in loc de Pageant +- +- +- Enable SSH Agent integration +- +- +- +- SSH_AUTH_SOCK value +- +- +- +- SSH_AUTH_SOCK override +- +- +- +- (empty) +- +- +- +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- +- +- +- SSH Agent connection is working! +- +- +- +- +- ApplicationSettingsWidget +- +- Application Settings +- Setări aplicaÈ›ie +- +- +- General +- General +- +- +- Security +- Securitate +- +- +- Access error for config file %1 +- Eroare de acces pentru fisier de configurare %1 +- +- +- Icon only +- Numai pictograma +- +- +- Text only +- Numai text +- +- +- Text beside icon +- Text linga iconita +- +- +- Text under icon +- text sub iconita +- +- +- Follow style +- Urmareste stilistica +- +- +- Reset Settings? +- Resetare Setări? +- +- +- Are you sure you want to reset all general and security settings to default? +- Sigur resetaÈ›i în mod implicit toate setările generale È™i de securitate ? +- +- +- Monochrome (light) +- +- +- +- Monochrome (dark) +- +- +- +- Colorful +- +- +- +- You must restart the application to set the new language. Would you like to restart now? +- +- +- +- +- ApplicationSettingsWidgetGeneral +- +- Basic Settings +- Setări de bază +- +- +- Startup +- Pornire +- +- +- Start only a single instance of KeePassXC +- Start numai o singură instanță de KeePassXC +- +- +- Minimize window at application startup +- Minimizare fereastră la pornirea aplicaÈ›iei +- +- +- File Management +- Gestionare fiÈ™iere +- +- +- Backup database file before saving +- Fă copie de rezervă fiÈ™ierului bazei de date înainte de salvare +- +- +- Automatically save after every change +- Salvare automată după fiecare modificare +- +- +- Automatically reload the database when modified externally +- ReîncărcaÈ›i automat baza de date atunci când este modificată extern +- +- +- Entry Management +- Managementul inregistrarii +- +- +- Use group icon on entry creation +- Utilizarea pictogramei grupului la crearea inregistrarii +- +- +- Minimize instead of app exit +- Minimizare în locul ieÈ™irii aplicaÈ›iei +- +- +- Show a system tray icon +- AfiÈ™are pictogramă tavă de sistem +- +- +- Hide window to system tray when minimized +- Ascundere fereastră în tava de sistem atunci când este minimizată +- +- +- Auto-Type +- Auto tiparire +- +- +- Use entry title to match windows for global Auto-Type +- Utilizarea titlului inregistrarii pentru a se potrivi cu ferestrele pentru auto-tiparire globala +- +- +- Use entry URL to match windows for global Auto-Type +- UtilizaÈ›i URL-ul din inregistrare pentru a se potrivi Windows pentru autotiparire globala +- +- +- Always ask before performing Auto-Type +- ÃŽntrebaÈ›i întotdeauna înainte de a efectua auto-tiparire +- +- +- ms +- Milliseconds +- ms +- +- +- Movable toolbar +- Bara de instrumente mobila +- +- +- Remember previously used databases +- Retine bazele de date utilizate anterior +- +- +- Load previously open databases on startup +- la pornirea incărcarea bazelor de date deschise anterior +- +- +- Remember database key files and security dongles +- Retine fiÈ™ierele cheie de baze de date È™i Dongles de securitate +- +- +- Check for updates at application startup once per week +- CăutaÈ›i actualizări la pornirea aplicaÈ›iei o dată pe săptămână +- +- +- Include beta releases when checking for updates +- Includere versiuni beta la verificarea actualizărilor +- +- +- Language: +- Limba: +- +- +- (restart program to activate) +- (reporniÈ›i programul pentru a activa) +- +- +- Minimize window after unlocking database +- Minimizare fereastră după deblocarea bazei de date +- +- +- Minimize when opening a URL +- Minimizare la deschiderea unui URL +- +- +- Hide window when copying to clipboard +- Ascundere fereastră la copierea în Clipboard +- +- +- Minimize +- Minimizare +- +- +- Drop to background +- Picătură în fundal +- +- +- Favicon download timeout: +- Favicon download timeout: +- +- +- Website icon download timeout in seconds +- Site-ul descărca pictograma timeout în câteva secunde +- +- +- sec +- Seconds +- sec +- +- +- Toolbar button style +- Stil buton bară de instrumente +- +- +- Language selection +- Selectarea limbii +- +- +- Global auto-type shortcut +- Comandă rapidă de tip auto global +- +- +- Auto-type character typing delay milliseconds +- Tipul de auto-tastare întârziere milisecunde +- +- +- Auto-type start delay milliseconds +- Auto-tip de pornire întârziere milisecunde +- +- +- Automatically launch KeePassXC at system startup +- +- +- +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- +- +- +- User Interface +- +- +- +- Toolbar button style: +- +- +- +- Use monospaced font for notes +- +- +- +- Tray icon type: +- +- +- +- Reset settings to default… +- +- +- +- Auto-Type typing delay: +- +- +- +- Global Auto-Type shortcut: +- +- +- +- Auto-Type start delay: +- +- +- +- Automatically save when locking database +- +- +- +- Automatically save non-data changes when locking database +- +- +- +- Tray icon type +- +- +- +- +- ApplicationSettingsWidgetSecurity +- +- Timeouts +- Timeout +- +- +- Clear clipboard after +- GoleÈ™te clipboard după +- +- +- sec +- Seconds +- sec +- +- +- Lock databases after inactivity of +- Blocarea bazelor de date după inactivitatea +- +- +- min +- Min +- +- +- Forget TouchID after inactivity of +- Uita TouchID după inactivitatea de +- +- +- Convenience +- Comoditate +- +- +- Lock databases when session is locked or lid is closed +- Blocarea bazelor de date atunci când sesiunea este blocată sau capacul este închis +- +- +- Forget TouchID when session is locked or lid is closed +- UitaÈ›i TouchID când sesiunea este blocată sau capacul este închis +- +- +- Lock databases after minimizing the window +- Blocarea bazelor de date după Minimizarea ferestrei +- +- +- Re-lock previously locked database after performing Auto-Type +- Re-Lock bazei de date blocate anterior după efectuarea auto-Type +- +- +- Hide passwords in the entry preview panel +- Ascunderea parolelor în panoul de previzualizare inregistrarii +- +- +- Hide entry notes by default +- Ascundere implicită notei inregistrarii +- +- +- Privacy +- ConfidenÈ›ialitate +- +- +- Use DuckDuckGo service to download website icons +- UtilizaÈ›i serviciul DuckDuckGo pentru a descărca pictogramele site-ului +- +- +- Clipboard clear seconds +- Stergere clipboard secunde +- +- +- Touch ID inactivity reset +- Resetare inactivitate ID Touch +- +- +- Database lock timeout seconds +- Baza de date blocare timeout secunde +- +- +- min +- Minutes +- Min +- +- +- Clear search query after +- Stergerea interogarea de căutare după +- +- +- Require password repeat when it is visible +- +- +- +- Hide passwords when editing them +- +- +- +- Use placeholder for empty password fields +- +- +- +- +- AutoType +- +- Couldn't find an entry that matches the window title: +- Nu a putut fi gasită o intrare care să coincidă cu titlul ferestrei: +- +- +- Auto-Type - KeePassXC +- Auto-tiparire-KeePassXC +- +- +- Auto-Type +- Auto tiparire +- +- +- The Syntax of your Auto-Type statement is incorrect! +- Sintaxa declaraÅ£iei de auto-tiparire este incorectă! +- +- +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- Această comandă auto-tip conÈ›ine o întârziere foarte lungă. Chiar vrei să continuăm? +- +- +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- Această comandă auto-tip conÈ›ine apăsări foarte lente ale tastelor. Chiar vrei să continuăm? +- +- +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- Această comandă auto-tip conÈ›ine argumente care se repetă foarte des. Chiar vrei să continuăm? +- +- +- Permission Required +- Permisiune necesară +- +- +- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC necesită permisiunea de accesibilitate pentru a efectua intrare nivel auto-Type. Dacă aÈ›i acordat deja permisiunea, poate fi nevoie să reporniÈ›i KeePassXC. +- +- +- +- AutoTypeAssociationsModel +- +- Window +- Fereastră +- +- +- Sequence +- Secvență +- +- +- Default sequence +- Secvență implicită +- +- +- +- AutoTypeMatchModel +- +- Group +- Grup +- +- +- Title +- Titlu +- +- +- Username +- Nume utilizator +- +- +- Sequence +- Secvență +- +- +- +- AutoTypeMatchView +- +- Copy &username +- Copiază &numele de utilizator +- +- +- Copy &password +- Copiază &parola +- +- +- +- AutoTypePlatformMac +- +- Permission Required +- Permisiune necesară +- +- +- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC necesită permisiunea Accesorizării È™i Recorderului ecranului pentru a efectua tipul automat global. ÃŽnregistrarea ecranului este necesară pentru a utiliza titlul ferestrei pentru a găsi intrări. Dacă aÈ›i acordat deja permisiunea, poate fi necesar să reporniÈ›i KeePassXC. +- +- +- +- AutoTypeSelectDialog +- +- Auto-Type - KeePassXC +- Auto-tip-KeePassXC +- +- +- Select entry to Auto-Type: +- Selectare inregistrare pentru Auto-tip: +- +- +- Search... +- Caută... +- +- +- +- BrowserAccessControlDialog +- +- KeePassXC - Browser Access Request +- +- +- +- %1 is requesting access to the following entries: +- +- +- +- Remember access to checked entries +- +- +- +- Remember +- +- +- +- Allow access to entries +- +- +- +- Allow Selected +- +- +- +- Deny All +- +- +- +- Disable for this site +- +- +- +- +- BrowserEntrySaveDialog +- +- KeePassXC-Browser Save Entry +- KeePassXC-browser-ul salvare inregistrarii +- +- +- Ok +- Ok +- +- +- Cancel +- Anulare +- +- +- You have multiple databases open. +-Please select the correct database for saving credentials. +- AveÈ›i mai multe baze de date deschise. +-SelectaÈ›i baza de date corectă pentru salvarea acreditărilor. +- +- +- +- BrowserService +- +- KeePassXC: New key association request +- KeePassXC: noua cerere de asociere cheie +- +- +- Save and allow access +- Salvează È™i permite acces +- +- +- KeePassXC: Overwrite existing key? +- KeePassXC: Suprascriere cheie existentă? +- +- +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- Există deja o cheie de criptare partajată cu numele "%1" . +-DoriÈ›i să o suprascrieÈ›i? +- +- +- KeePassXC: Update Entry +- KeePassXC: actualizare intrare +- +- +- Do you want to update the information in %1 - %2? +- ActualizaÈ›i informaÈ›iile în %1 - %2 ? +- +- +- Abort +- Anulează +- +- +- Converting attributes to custom data… +- Conversia atributelor in date particularizate... +- +- +- KeePassXC: Converted KeePassHTTP attributes +- KeePassXC: conversia atributelor KeePassHTTP +- +- +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- Atributele convertite cu succes din %1 intrare (i). +-S-au mutat %2 chei la date particularizate. +- +- +- Successfully moved %n keys to custom data. +- S-au mutat cu succes% n chei la date particularizate.S-au mutat cu succes% n chei la date particularizate.S-au mutat cu succes %n chei la date particularizate. +- +- +- KeePassXC: No entry with KeePassHTTP attributes found! +- KeePassXC: n-a fost găsita nici o intrare cu KeePassHTTP atribute ! +- +- +- The active database does not contain an entry with KeePassHTTP attributes. +- Baza de date activă nu conÈ›ine nici o intrare cu atributele KeePassHTTP. +- +- +- KeePassXC: Legacy browser integration settings detected +- KeePassXC: Au fost detectate setările moÈ™tenite de integrare a browserului +- +- +- KeePassXC: Create a new group +- KeePassXC: crearea unui grup nou +- +- +- A request for creating a new group "%1" has been received. +-Do you want to create this group? +- +- S-a primit o solicitare de creare a unui grup nou "%1". +-DoriÈ›i să creaÈ›i acest grup? +- +- +- Your KeePassXC-Browser settings need to be moved into the database settings. +-This is necessary to maintain your current browser connections. +-Would you like to migrate your existing settings now? +- Setările KeePassXC-browser trebuie mutate în setările bazei de date. +-Acest lucru este necesar pentru a menÈ›ine conexiunile browser-ului curent. +-MigraÈ›i acum setările existente? +- +- +- Don't show this warning again +- Nu mai afiÈ™a acest avertisment +- +- +- You have received an association request for the following database: +-%1 +- +-Give the connection a unique name or ID, for example: +-chrome-laptop. +- AÈ›i primit o solicitare de asociere pentru următoarea bază de date: +-%1 +- +-DaÈ›i conexiunii un nume sau un ID unic, de exemplu: +-chrome-laptop. +- +- +- +- BrowserSettingsWidget +- +- Dialog +- Dialog +- +- +- This is required for accessing your databases with KeePassXC-Browser +- Acest lucru este necesar pentru accesarea bazelor de date cu KeePassXC-browser +- +- +- Enable browser integration +- ActivaÈ›i integrarea browserului +- +- +- General +- General +- +- +- Browsers installed as snaps are currently not supported. +- Browserele instalate ca snaps nu sunt acceptate momentan. +- +- +- Enable integration for these browsers: +- ActivaÈ›i integrarea pentru aceste browsere: +- +- +- Vivaldi +- Vivaldi +- +- +- &Edge +- &Edge +- +- +- Firefox +- Firefox +- +- +- Tor Browser +- Navigator web Tor +- +- +- Brave +- Brave +- +- +- Google Chrome +- Google Chrome +- +- +- Chromium +- Chromium +- +- +- Show a notification when credentials are requested +- Credentials mean login data requested via browser extension +- +- +- +- Request to unlock the database if it is locked +- +- +- +- Only entries with the same scheme (http://, https://, ...) are returned. +- Sunt returnate numai intrările cu aceeaÈ™i schemă (http://, https://,...) . +- +- +- Match URL scheme (e.g., https://...) +- +- +- +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- Returnează numai cele mai bune potriviri pentru un anumit URL în loc de toate intrările pentru întregul domeniu. +- +- +- Return only best-matching credentials +- +- +- +- Returns expired credentials. String [expired] is added to the title. +- Returnează acreditările expirate. String [expirat] se adaugă la titlu. +- +- +- Allow returning expired credentials +- +- +- +- All databases connected to the extension will return matching credentials. +- Toate bazele de date conectate la extensie vor returna acreditările corespondente. +- +- +- Search in all opened databases for matching credentials +- Credentials mean login data requested via browser extension +- +- +- +- Sort matching credentials by title +- Credentials mean login data requested via browser extension +- +- +- +- Sort matching credentials by username +- Credentials mean login data requested via browser extension +- +- +- +- Advanced +- Avansat +- +- +- Never ask before accessing credentials +- Credentials mean login data requested via browser extension +- +- +- +- Never ask before updating credentials +- Credentials mean login data requested via browser extension +- +- +- +- Do not ask permission for HTTP Basic Auth +- An extra HTTP Basic Auth setting +- +- +- +- Automatically creating or updating string fields is not supported. +- Crearea sau actualizarea automată a câmpurilor È™ir nu este acceptată. +- +- +- Return advanced string fields which start with "KPH: " +- +- +- +- Don't display the popup suggesting migration of legacy KeePassHTTP settings. +- Nu afiÈ™aÈ›i popup-ul sugerând migrarea setărilor KeePassHTTP moÈ™tenite. +- +- +- Do not prompt for KeePassHTTP settings migration. +- +- +- +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- Actualizează la pornire calea binară KeePassXC sau keepassxc-proxy automat la script-uri de mesagerie native. +- +- +- Update native messaging manifest files at startup +- +- +- +- Use a custom proxy location if you installed a proxy manually. +- UtilizaÈ›i o locaÈ›ie proxy particularizată dacă aÈ›i instalat manual un proxy. +- +- +- Use a custom proxy location: +- Meant is the proxy for KeePassXC-Browser +- +- +- +- Custom proxy location field +- Câmp de locaÈ›ie proxy particularizat +- +- +- Browser for custom proxy file +- Browser pentru fiÈ™ier proxy personalizat +- +- +- Browse... +- Button for opening file dialog +- RăsfoieÈ™te... +- +- +- Use a custom browser configuration location: +- +- +- +- Browser type: +- +- +- +- Toolbar button style +- Stil buton bară de instrumente +- +- +- Config Location: +- LocaÈ›ie configurare: +- +- +- Custom browser location field +- +- +- +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- +- +- +- Browse for custom browser path +- +- +- +- Custom extension ID: +- +- +- +- Custom extension ID +- +- +- +- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 +- Datorită snap sandboxing, trebuie să executaÈ›i un script pentru a activa integrarea browser-ului.<br>PuteÈ›i obÈ›ine acest script de la % 1 +- +- +- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 +- +- +- +- Please see special instructions for browser extension use below +- Vă rugăm să consultaÈ›i instrucÈ›iunile speciale pentru utilizarea extensiei browserului de mai jos +- +- +- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. +- +- +- +- <b>Warning:</b> The following options can be dangerous! +- <b>Avertizare:</b> Următoarele opÈ›iuni pot fi periculoase! +- +- +- Executable Files +- FiÈ™iere executabile +- +- +- All Files +- Toate fiÈ™ierele +- +- +- Select custom proxy location +- Selectare locaÈ›ie proxy particularizată +- +- +- Select native messaging host folder location +- +- +- +- +- CloneDialog +- +- Clone Options +- Clonare opÈ›iuni +- +- +- Append ' - Clone' to title +- Adăugare " - Clonat" la titlu +- +- +- Replace username and password with references +- ÃŽnlocuieÈ™te numele utilizator È™i parola cu referinÈ›e +- +- +- Copy history +- Copiază istoric +- +- +- +- CsvImportWidget +- +- Import CSV fields +- Importă câmpuri CSV +- +- +- filename +- nume fiÈ™ier +- +- +- size, rows, columns +- dimensiune, rânduri, coloane +- +- +- Encoding +- Codificare +- +- +- Codec +- Codec +- +- +- Text is qualified by +- Textul este calificat de +- +- +- Fields are separated by +- Câmpurile sunt separate de +- +- +- Comments start with +- Comentariile încep cu +- +- +- Consider '\' an escape character +- Considera "\" un caracter Escape +- +- +- Preview +- Previzualizare +- +- +- Imported from CSV file +- Importat din fiÈ™ier CSV +- +- +- Original data: +- Datele originale: +- +- +- Error +- Eroare +- +- +- Error(s) detected in CSV file! +- Eroare (i) detectată în fiÈ™ierul CSV! +- +- +- [%n more message(s) skipped] +- [% n mai mult mesaj (e) ignorate][% n mai mult mesaj (e) ignorate][%n mai mult mesaj (e) ignorate] +- +- +- CSV import: writer has errors: +-%1 +- Import CSV: scriitor are erori: +-%1 +- +- +- Text qualification +- Calificarea textului +- +- +- Field separation +- Separarea câmpului +- +- +- Number of header lines to discard +- Numărul de linii de antet de aruncat +- +- +- CSV import preview +- Previzualizare import CSV +- +- +- Column Association +- +- +- +- Last Modified +- Ultima modificare +- +- +- Password +- Parola +- +- +- Created +- Creat +- +- +- Notes +- NotiÈ›e +- +- +- Title +- Titlu +- +- +- Group +- Grup +- +- +- URL +- URL +- +- +- Username +- Nume utilizator +- +- +- Header lines skipped +- +- +- +- First line has field names +- +- +- +- Not Present +- +- +- +- Column %1 +- +- +- +- TOTP +- TOTP +- +- +- Icon +- Icon +- +- +- +- CsvParserModel +- +- %n column(s) +- % n coloană (e)% n coloană (e)%n coloană (e) +- +- +- %1, %2, %3 +- file info: bytes, rows, columns +- %1, %2, %3 +- +- +- %n byte(s) +- % n byte (e)% n byte (e)%n byte (e) +- +- +- %n row(s) +- % n rând (e)% n rând (e)%n rând (uri) +- +- +- +- Database +- +- File %1 does not exist. +- FiÈ™ierul %1 nu există. +- +- +- Unable to open file %1. +- Imposibil de deschis fiÈ™ierul %1. +- +- +- Error while reading the database: %1 +- Eroare la citirea bazei de date: %1 +- +- +- File cannot be written as it is opened in read-only mode. +- FiÈ™ierul nu poate fi scris deoarece este deschis în modul doar pentru citire. +- +- +- Key not transformed. This is a bug, please report it to the developers! +- Cheia nu s-a transformat. Acesta este un bug, vă rugăm să raportati la dezvoltatorii! +- +- +- %1 +-Backup database located at %2 +- %1 +-Baza de date de rezervă localizată la %2 +- +- +- Could not save, database does not point to a valid file. +- Nu s-a putut salva, baza de date nu indică un fiÈ™ier valid. +- +- +- Could not save, database file is read-only. +- Nu s-a putut salva, fiÈ™ierul bazei de date este numai în citire. +- +- +- Database file has unmerged changes. +- FiÈ™ierul bazei de date are modificări nemergite. +- +- +- Recycle Bin +- CoÈ™ de gunoi +- +- +- Passwords +- Root group name +- Parole +- +- +- Database save is already in progress. +- +- +- +- Could not save, database has not been initialized! +- +- +- +- +- DatabaseOpenDialog +- +- Unlock Database - KeePassXC +- Deblocare bază de date - KeePassXC +- +- +- +- DatabaseOpenWidget +- +- Key File: +- FiÈ™ier cheie: +- +- +- Refresh +- Actualizează +- +- +- Don't show this warning again +- Nu mai afiÈ™a acest avertisment +- +- +- All files +- Toate fiÈ™ierele +- +- +- Key files +- FiÈ™iere cheie +- +- +- Select key file +- SelectaÈ›i fiÈ™ier cheie +- +- +- Failed to open key file: %1 +- Nu a putut fi deschis fiÈ™ierul cheii: %1 +- +- +- Unlock KeePassXC Database +- DeblocaÈ›i baza de date KeePassXC +- +- +- Enter Password: +- Introdu parola: +- +- +- Password field +- Câmp parola +- +- +- Hardware key slot selection +- Selectarea sloturilor pentru cheie hardware +- +- +- Browse for key file +- CăutaÈ›i fiÈ™ierul cheie +- +- +- Browse... +- RăsfoieÈ™te... +- +- +- Refresh hardware tokens +- ActualizaÈ›i jetoane hardware +- +- +- Hardware Key: +- Cheie hardware: +- +- +- Hardware key help +- Ajutor cheie hardware +- +- +- TouchID for Quick Unlock +- TouchID pentru deblocare rapidă +- +- +- Unlock failed and no password given +- Deblocarea a eÈ™uat È™i nu a fost dată nicio parolă +- +- +- Unlocking the database failed and you did not enter a password. +-Do you want to retry with an "empty" password instead? +- +-To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. +- Deblocarea bazei de date a eÈ™uat È™i nu aÈ›i introdus o parolă. +-Vrei să încerci din nou cu o parolă „goalăâ€? +- +-Pentru a preveni apariÈ›ia acestei erori, trebuie să accesaÈ›i „Setări baza de date / securitate†și să vă resetaÈ›i parola. +- +- +- Retry with empty password +- ÃŽncercaÈ›i din nou cu parola goală +- +- +- Enter Additional Credentials (if any): +- IntroduceÈ›i acreditări suplimentare (dacă există): +- +- +- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +-<p>Click for more information...</p> +- <p>PuteÈ›i utiliza o cheie de securitate hardware, cum ar fi <strong>YubiKey</strong> sau <strong>OnlyKey</strong>, cu sloturi configurate pentru HMAC-SHA1.</p> +-<p>FaceÈ›i clic pentru mai multe informaÈ›ii ...</p> +- +- +- Key file help +- Ajutor de fiÈ™iere cheie +- +- +- ? +- ? +- +- +- Cannot use database file as key file +- Nu se poate utiliza fiÈ™ierul bazei de date ca fiÈ™ier cheie +- +- +- You cannot use your database file as a key file. +-If you do not have a key file, please leave the field empty. +- Nu puteÈ›i utiliza fiÈ™ierul dvs. de bază de date ca fiÈ™ier cheie. +-Dacă nu aveÈ›i un fiÈ™ier cheie, lăsaÈ›i câmpul gol. +- +- +- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> +- +- +- +- Key file to unlock the database +- +- +- +- Please touch the button on your YubiKey! +- Vă rugăm să atingeÈ›i butonul de pe YubiKey dvs.! +- +- +- Detecting hardware keys… +- +- +- +- No hardware keys detected +- +- +- +- Select hardware key… +- +- +- +- Old key file format +- +- +- +- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> +- +- +- +- +- DatabaseSettingWidgetMetaData +- +- Passwords +- Parole +- +- +- +- DatabaseSettingsDialog +- +- Advanced Settings +- Setări avansate +- +- +- General +- General +- +- +- Security +- Securitate +- +- +- Encryption Settings +- Setări criptare +- +- +- Browser Integration +- Integrare cu browserul +- +- +- Database Credentials +- +- +- +- +- DatabaseSettingsWidgetBrowser +- +- KeePassXC-Browser settings +- Setări KeePassXC-Browser +- +- +- Stored keys +- Taste memorate +- +- +- Remove +- ÃŽnlătură +- +- +- Delete the selected key? +- Șterg cheia selectată? +- +- +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- Chiar doriÈ›i să È™tergeÈ›i cheia selectată? +-Acest lucru poate împiedica conectarea la plugin-ul browser-ului. +- +- +- Key +- Cheie +- +- +- Value +- Valoare +- +- +- Enable Browser Integration to access these settings. +- ActivaÈ›i integrarea browserului pentru a accesa aceste setări. +- +- +- Disconnect all browsers +- Deconectează toate navigatoarele web +- +- +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- Chiar doriÈ›i să deconectaÈ›i toate browserele? +-Acest lucru poate împiedica conectarea la plugin-ul browser-ului. +- +- +- KeePassXC: No keys found +- KeePassXC: nu s-au găsit chei +- +- +- No shared encryption keys found in KeePassXC settings. +- Nu sunt găsite chei de criptare partajate în setările KeePassXC. +- +- +- KeePassXC: Removed keys from database +- KeePassXC: cheile sterse din baza de date +- +- +- Successfully removed %n encryption key(s) from KeePassXC settings. +- S-a eliminat cu succes% n cheie de criptare din setările KeePassXC.S-a eliminat cu succes% n cheie de criptare din setările KeePassXC.S-a eliminat cu succes %n chei de criptare din setările KeePassXC. +- +- +- Forget all site-specific settings on entries +- Uita toate setările specifice site-ului pe intrările +- +- +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- Chiar vrei sa se uite toate setările specifice site-ului pe fiecare intrare? +-Permisiunile de accesare a intrărilor vor fi revocate. +- +- +- Removing stored permissions… +- Se elimină permisiunile stocate... +- +- +- Abort +- Anulează +- +- +- KeePassXC: Removed permissions +- KeePassXC: permisiuni eliminate +- +- +- Successfully removed permissions from %n entry(s). +- Permisiuni eliminate cu succes de la% n intrare (e).Permisiuni eliminate cu succes de la% n intrare (e).Permisiuni eliminate cu succes pentru %n intrare(i). +- +- +- KeePassXC: No entry with permissions found! +- KeePassXC: nici o intrare cu permisiuni găsit! +- +- +- The active database does not contain an entry with permissions. +- Baza de date activă nu conÈ›ine o intrare cu permisiuni. +- +- +- Move KeePassHTTP attributes to custom data +- Mutarea atributelor KeePassHTTP la date particularizate +- +- +- Do you really want to move all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- Chiar doriÈ›i să mutaÈ›i toate datele de integrare a browserului moÈ™tenite la cel mai recent standard? +-Acest lucru este necesar pentru a menÈ›ine compatibilitatea cu plugin-ul browser-ului. +- +- +- Stored browser keys +- Tastele browserului stocate +- +- +- Remove selected key +- ȘtergeÈ›i tasta selectată +- +- +- Move KeePassHTTP attributes to KeePassXC-Browser custom data +- +- +- +- Refresh database root group ID +- +- +- +- Created +- Creat +- +- +- Refresh database ID +- +- +- +- Do you really want refresh the database ID? +-This is only necessary if your database is a copy of another and the browser extension cannot connect. +- +- +- +- +- DatabaseSettingsWidgetDatabaseKey +- +- Add additional protection... +- Adauga protectie suplimentara... +- +- +- No password set +- Nici o parolă setată +- +- +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- Avertizare! Nu aÈ›i setat o parolă. Folosind o bază de date fără o parolă este puternic descurajat! +- +-Sigur continuaÈ›i fără parolă? +- +- +- Continue without password +- ContinuaÈ›i fără parolă +- +- +- No encryption key added +- Nu s-a adăugat cheia de criptare +- +- +- You must add at least one encryption key to secure your database! +- Trebuie să adăugaÈ›i cel puÈ›in o cheie de criptare pentru a securiza baza de date! +- +- +- Unknown error +- Eroare necunoscută +- +- +- Failed to change database credentials +- +- +- +- +- DatabaseSettingsWidgetEncryption +- +- Encryption Algorithm: +- Algoritm Criptare: +- +- +- AES: 256 Bit (default) +- AES: 256 Bit (implicit) +- +- +- Twofish: 256 Bit +- Twofish: 256 Bit +- +- +- Key Derivation Function: +- FuncÈ›ie Derivare Cheie: +- +- +- Transform rounds: +- Runde de transformare: +- +- +- Memory Usage: +- Utilizare Memorie: +- +- +- Parallelism: +- Paralelism: +- +- +- Decryption Time: +- Timp de decriptare: +- +- +- ?? s +- ?? s +- +- +- Change +- Schimba +- +- +- Higher values offer more protection, but opening the database will take longer. +- Valorile mai mari oferă o protecÈ›ie mai mare, dar deschiderea bazei de date va dura mai mult. +- +- +- Database format: +- Format bază de date: +- +- +- This is only important if you need to use your database with other programs. +- Acest lucru este important numai dacă trebuie să utilizaÈ›i baza de date cu alte programe. +- +- +- KDBX 4.0 (recommended) +- KDBX 4,0 (recomandat) +- +- +- KDBX 3.1 +- KDBX 3.1 +- +- +- unchanged +- Database decryption time is unchanged +- Neschimbat +- +- +- Number of rounds too high +- Key transformation rounds +- Numărul de runde prea mare +- +- +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or days (or even longer) to open! +- UtilizaÈ›i un număr foarte mare de runde de transformare cheie cu Argon2. +- +-Dacă păstraÈ›i acest număr, deschiderea bazei de date poate dura ore sau zile (sau chiar mai mult)! +- +- +- Understood, keep number +- ÃŽnÈ›eles, păstraÈ›i numărul +- +- +- Cancel +- Anulare +- +- +- Number of rounds too low +- Key transformation rounds +- Număr de runde prea mici +- +- +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database may be too easy to crack! +- UtilizaÈ›i un număr foarte mic de runde de transformare cheie cu AES-KDF. +- +-Dacă păstraÈ›i acest număr, baza de date poate fi prea uÈ™or de spart! +- +- +- KDF unchanged +- KDF nemodificat +- +- +- Failed to transform key with new KDF parameters; KDF unchanged. +- Nu s-a reuÈ™it transformarea cheii cu noi parametri KDF; KDF neschimbat. +- +- +- MiB +- Abbreviation for Mebibytes (KDF settings) +- MiB MiB MiB +- +- +- thread(s) +- Threads for parallel execution (KDF settings) +- filet (e)filet (e)thread(s) +- +- +- Change existing decryption time +- ModificaÈ›i timpul de decriptare existent +- +- +- Decryption time in seconds +- Timpul de decriptare în secunde +- +- +- Database format +- Formatul bazei de date +- +- +- Encryption algorithm +- Algoritmul de criptare +- +- +- Key derivation function +- FuncÈ›ia cheie de derivare +- +- +- Transform rounds +- Rundele de transformare +- +- +- Memory usage +- Folosirea memoriei +- +- +- Parallelism +- Paralelism +- +- +- ?? ms +- ?? ms +- +- +- ? s +- ? s +- +- +- +- DatabaseSettingsWidgetFdoSecrets +- +- Exposed Entries +- Intrări expuse +- +- +- Don't expose this database +- +- +- +- Expose entries under this group: +- +- +- +- Enable Secret Service to access these settings. +- +- +- +- +- DatabaseSettingsWidgetGeneral +- +- Database Meta Data +- Meta Date Bază de Date +- +- +- Database name: +- Nume bază de date: +- +- +- Database description: +- Descriere bază de date: +- +- +- Default username: +- Nume utilizator implicit: +- +- +- History Settings +- Setări Istoric +- +- +- Max. history items: +- Max. elemente de istorie: +- +- +- Max. history size: +- Max. Dimensiune istorie: +- +- +- MiB +- Mib +- +- +- Use recycle bin +- Utilizare coÈ™ de gunoi +- +- +- Additional Database Settings +- Setări AdiÈ›ionale Bază de Date +- +- +- Database name field +- Câmpul numelui bazei de date +- +- +- Database description field +- Câmpul descrierii bazei de date +- +- +- Default username field +- Câmpul utilizatorului implicit +- +- +- Maximum number of history items per entry +- Numărul maxim de articole istorice pe intrare +- +- +- Maximum size of history per entry +- Mărimea maximă a istoricului pe intrare +- +- +- Delete Recycle Bin +- ȘtergeÈ›i coÈ™ul de reciclare +- +- +- Do you want to delete the current recycle bin and all its contents? +-This action is not reversible. +- DoriÈ›i să È™tergeÈ›i coÈ™ul de reciclare curent È™i tot conÈ›inutul acesteia? +-Această acÈ›iune nu este reversibilă. +- +- +- (old) +- (vechi) +- +- +- Enable compression (recommended) +- +- +- +- +- DatabaseSettingsWidgetKeeShare +- +- Sharing +- Partajare +- +- +- Breadcrumb +- Breadcrumb +- +- +- Type +- Tip +- +- +- Path +- Cale +- +- +- Last Signer +- Ultimul semnatar +- +- +- Certificates +- Certificate +- +- +- > +- Breadcrumb separator +- > +- +- +- +- DatabaseSettingsWidgetMetaDataSimple +- +- Database Name: +- Nume bază de date: +- +- +- Description: +- Descrierea : +- +- +- Database name field +- Câmpul numelui bazei de date +- +- +- Database description field +- Câmpul descrierii bazei de date +- +- +- +- DatabaseTabWidget +- +- KeePass 2 Database +- Bază de date KeePass 2 +- +- +- All files +- Toate fiÈ™ierele +- +- +- Open database +- Deschide baza de date +- +- +- CSV file +- FiÈ™ier CSV +- +- +- Merge database +- ÃŽmbină baza de date +- +- +- Open KeePass 1 database +- Deschide bază de date KeePass 1 +- +- +- KeePass 1 database +- Bază de date KeePass 1 +- +- +- Export database to CSV file +- Exportă baza de date în fiÈ™ier CSV +- +- +- Writing the CSV file failed. +- Scrierea în fiÈ™ierul CSV a eÈ™uat. +- +- +- Database creation error +- Eroare la crearea bazei de date +- +- +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- Baza de date creată nu are cheie sau KDF, refuzând să o salveze. +-Acest lucru este cu siguranta un bug, vă rugăm să raporteze la dezvoltatori. +- +- +- Select CSV file +- SelectaÈ›i fiÈ™ierul CSV +- +- +- New Database +- Bază de date nouă +- +- +- %1 [New Database] +- Database tab name modifier +- %1 [bază de date nouă] +- +- +- %1 [Locked] +- Database tab name modifier +- %1 [blocat] +- +- +- %1 [Read-only] +- Database tab name modifier +- %1 [doar în citire] +- +- +- Failed to open %1. It either does not exist or is not accessible. +- Nu a reuÈ™it să deschidă %1. Fie nu există, fie nu este accesibil. +- +- +- Export database to HTML file +- ExportaÈ›i baza de date în fiÈ™ier HTML +- +- +- HTML file +- FiÈ™ier HTML +- +- +- Writing the HTML file failed. +- Scrierea fiÈ™ierului HTML a eÈ™uat. +- +- +- Export Confirmation +- Confirmare la export +- +- +- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? +- EÈ™ti pe cale să exporti baza de date într-un fiÈ™ier necriptat. Acest lucru va lăsa parolele È™i informaÈ›iile dvs. sensibile vulnerabile! Esti sigur ca vrei sa continui? +- +- +- Open OPVault +- +- +- +- +- DatabaseWidget +- +- Searching... +- Căutare... +- +- +- Do you really want to delete the entry "%1" for good? +- Chiar doriÈ›i să È™tergeÈ›i intrarea "%1" pentru totdeauna? +- +- +- Do you really want to move entry "%1" to the recycle bin? +- Chiar doriÈ›i să mutaÈ›i intrarea "%1" în CoÈ™ul de reciclare? +- +- +- Do you really want to move %n entry(s) to the recycle bin? +- Chiar doriÈ›i să mutaÈ›i% n intrare (e) în CoÈ™ul de reciclare?Chiar doriÈ›i să mutaÈ›i% n intrare (e) în CoÈ™ul de reciclare?Chiar doriÈ›i să mutaÈ›i %n intrare (i) în CoÈ™ul de reciclare? +- +- +- Execute command? +- ExecutaÈ›i comanda? +- +- +- Do you really want to execute the following command?<br><br>%1<br> +- Chiar vrei să execute următoarea comandă?<br><br>%1<br> +- +- +- Remember my choice +- Èšine minte alegerea mea +- +- +- Do you really want to delete the group "%1" for good? +- Chiar doriÈ›i să È™tergeÈ›i grupul "%1"? +- +- +- No current database. +- Nu există o baza de date curentă. +- +- +- No source database, nothing to do. +- Nicio bază de date sursă, nimic de făcut. +- +- +- Search Results (%1) +- Rezultatele căutării (%1) +- +- +- No Results +- Nu sunt rezultate +- +- +- File has changed +- FiÈ™ierul a fost modificat +- +- +- The database file has changed. Do you want to load the changes? +- FiÈ™ierul bazei de date a fost modificat. DoriÈ›i să încărcaÈ›i ultimele modificări? +- +- +- Merge Request +- Cerere îmbinare +- +- +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- FiÈ™ierul bazei de date s-a modificat È™i aveÈ›i modificări nesalvate. +-DoriÈ›i să îmbinaÈ›i modificările? +- +- +- Empty recycle bin? +- GoliÈ›i coÈ™ul de gunoi? +- +- +- Are you sure you want to permanently delete everything from your recycle bin? +- Sigur È™tergeÈ›i definitiv totul din CoÈ™ul de reciclare? +- +- +- Do you really want to delete %n entry(s) for good? +- Chiar doriÈ›i să È™tergeÈ›i% n intrare (e) pentru totdeauna?Chiar doriÈ›i să È™tergeÈ›i% n intrare (e) pentru totdeauna?Chiar doriÈ›i să È™tergeÈ›i %n intrare(i) pentru totdeauna? +- +- +- Delete entry(s)? +- ȘtergeÈ›i intrările?ȘtergeÈ›i intrările?Șterge intrările? +- +- +- Move entry(s) to recycle bin? +- MutaÈ›i intrările în CoÈ™ul de reciclare?MutaÈ›i intrările în CoÈ™ul de reciclare?MutaÈ›i intrările în CoÈ™ul de reciclare? +- +- +- Lock Database? +- Blocarea bazei de date? +- +- +- You are editing an entry. Discard changes and lock anyway? +- EditaÈ›i o intrare. RenunÈ›aÈ›i la modificări È™i blocaÈ›i oricum? +- +- +- "%1" was modified. +-Save changes? +- "%1" a fost modificat. +-SalvaÈ›i modificările? +- +- +- Database was modified. +-Save changes? +- Baza de date a fost modificată. +-SalvaÈ›i modificările? +- +- +- Save changes? +- Salvare modificări? +- +- +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- Imposibil de deschis noul fiÈ™ier bază de date în timp ce încercaÈ›i să autoreload. +-Eroare: %1 +- +- +- Disable safe saves? +- DezactivaÈ›i salvarea sigură? +- +- +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- KeePassXC nu a reuÈ™it să salveze baza de date de mai multe ori. Acest lucru este probabil cauzat de serviciile de sincronizare a fiÈ™ierelor care deÈ›in o blocare pe fiÈ™ierul de salvare. +-DezactivaÈ›i salvarea sigură È™i încercaÈ›i din nou? +- +- +- Passwords +- Parole +- +- +- Save database as +- Salvează bază de date ca +- +- +- KeePass 2 Database +- Bază de date KeePass 2 +- +- +- Replace references to entry? +- ÃŽnlocuiÈ›i referinÈ›ele la intrare? +- +- +- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? +- Intrarea "% 1" are% 2 referinÈ›e (e). SuprascrieÈ›i referinÈ›ele cu valori, ignoraÈ›i această intrare sau È™tergeÈ›i-o oricum?Intrarea "% 1" are% 2 referinÈ›e (e). SuprascrieÈ›i referinÈ›ele cu valori, ignoraÈ›i această intrare sau È™tergeÈ›i-o oricum?Intrarea "%1" are %2 referinÈ›e. SuprascrieÈ›i referinÈ›ele cu valori, ignoraÈ›i această intrare sau È™tergeÈ›i-o oricum? +- +- +- Delete group +- Ștergere grup +- +- +- Move group to recycle bin? +- MutaÈ›i grupul în CoÈ™ul de reciclare? +- +- +- Do you really want to move the group "%1" to the recycle bin? +- Chiar doriÈ›i să mutaÈ›i grupul "%1" în CoÈ™ul de reciclare? +- +- +- Successfully merged the database files. +- A fuzionat cu succes fiÈ™ierele bazei de date. +- +- +- Database was not modified by merge operation. +- Baza de date nu a fost modificată de operaÈ›iunea de îmbinare. +- +- +- Shared group... +- Grup partajat... +- +- +- Writing the database failed: %1 +- Scrierea bazei de date nu a reuÈ™it: %1 +- +- +- This database is opened in read-only mode. Autosave is disabled. +- Această bază de date este deschisă în modul numai de citire. Autosave este dezactivat. +- +- +- Save database backup +- +- +- +- Could not find database file: %1 +- +- +- +- +- EditEntryWidget +- +- Entry +- Intrare +- +- +- Advanced +- Avansat +- +- +- Icon +- Icon +- +- +- Auto-Type +- Auto tiparire +- +- +- Properties +- Proprietăți +- +- +- History +- Istoric +- +- +- SSH Agent +- Agent SSH +- +- +- n/a +- nu se aplică +- +- +- (encrypted) +- (criptat) +- +- +- Select private key +- SelectaÈ›i cheia privată +- +- +- Entry history +- Istoric intrare +- +- +- Add entry +- Adaugă intrare +- +- +- Edit entry +- Editează intrare +- +- +- New attribute +- Atribut nou +- +- +- Are you sure you want to remove this attribute? +- SunteÈ›i sigur că doriÈ›i să eliminaÈ›i acest atribut? +- +- +- Tomorrow +- Mâine +- +- +- %n week(s) +- % n săptămână (i)% n săptămână (i)%n săptămână(i) +- +- +- %n month(s) +- % n lună (i)% n lună (i)%n lună(i) +- +- +- Entry updated successfully. +- Intrare actualizată cu succes. +- +- +- New attribute %1 +- Atribut nou %1 +- +- +- %n year(s) +- % n an (i)% n an (i)%n an(i) +- +- +- Confirm Removal +- Confirmare eliminare +- +- +- Browser Integration +- Integrare cu browserul +- +- +- <empty URL> +- <empty URL> +- +- +- Are you sure you want to remove this URL? +- Sigur doriÈ›i să eliminaÈ›i această adresă URL? +- +- +- Reveal +- Dezvăluie +- +- +- Hide +- Ascunde +- +- +- Unsaved Changes +- +- +- +- Would you like to save changes to this entry? +- +- +- +- [PROTECTED] Press Reveal to view or edit +- +- +- +- Invalid Entry +- +- +- +- An external merge operation has invalidated this entry. +-Unfortunately, any changes made have been lost. +- +- +- +- +- EditEntryWidgetAdvanced +- +- Additional attributes +- Atribute adiÈ›ionale +- +- +- Add +- Adaugă +- +- +- Remove +- ÃŽnlătură +- +- +- Edit Name +- Editează nume +- +- +- Protect +- Protejează +- +- +- Reveal +- Dezvăluie +- +- +- Attachments +- AtaÈ™amente +- +- +- Foreground Color: +- Culoare prim plan: +- +- +- Background Color: +- Culoare de fundal: +- +- +- Attribute selection +- Selectarea atributelor +- +- +- Attribute value +- Valoarea atributului +- +- +- Add a new attribute +- AdăugaÈ›i un atribut nou +- +- +- Remove selected attribute +- ȘtergeÈ›i atributul selectat +- +- +- Edit attribute name +- EditaÈ›i numele atributului +- +- +- Toggle attribute protection +- ComutaÈ›i protecÈ›ia atributelor +- +- +- Show a protected attribute +- AfiÈ™aÈ›i un atribut protejat +- +- +- Foreground color selection +- Selectarea culorilor prim-plan +- +- +- Background color selection +- Selectarea culorii de fundal +- +- +- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> +- +- +- +- Exclude from database reports +- +- +- +- +- EditEntryWidgetAutoType +- +- Enable Auto-Type for this entry +- Activare tiparire automat pentru această intrare +- +- +- Window Associations +- Asocieri de Ferestre +- +- +- + +- + +- +- +- - +- - +- +- +- Window title: +- Titlu fereastră: +- +- +- Use a specific sequence for this association: +- UtilizaÈ›i o secvență specifică pentru această asociere: +- +- +- Custom Auto-Type sequence +- Secvență personalizată Auto-Type +- +- +- Open Auto-Type help webpage +- DeschideÈ›i pagina web de ajutor Auto-Type +- +- +- Existing window associations +- Asocieri de ferestre existente +- +- +- Add new window association +- AdăugaÈ›i asociere fereastră nouă +- +- +- Remove selected window association +- EliminaÈ›i asocierea ferestrei selectată +- +- +- You can use an asterisk (*) to match everything +- PuteÈ›i utiliza un asterisc (*) pentru a se potrivi cu totul +- +- +- Set the window association title +- SetaÈ›i titlul asocierii ferestrei +- +- +- You can use an asterisk to match everything +- PuteÈ›i utiliza un asterisc pentru a se potrivi cu totul +- +- +- Custom Auto-Type sequence for this window +- Secvență personalizată de tip automat pentru această fereastră +- +- +- Inherit default Auto-Type sequence from the group +- +- +- +- Use custom Auto-Type sequence: +- +- +- +- +- EditEntryWidgetBrowser +- +- These settings affect to the entry's behaviour with the browser extension. +- Aceste setări afectează comportamentul intrării cu extensia browserului. +- +- +- General +- General +- +- +- Skip Auto-Submit for this entry +- SariÈ›i la Trimitere automată pentru această intrare +- +- +- Hide this entry from the browser extension +- AscundeÈ›i această intrare din extensia browserului +- +- +- Additional URL's +- Adresa URL suplimentară +- +- +- Add +- Adaugă +- +- +- Remove +- ÃŽnlătură +- +- +- Edit +- EditaÈ›i +- +- +- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. +- +- +- +- Use this entry only with HTTP Basic Auth +- +- +- +- +- EditEntryWidgetHistory +- +- Show +- Arată +- +- +- Restore +- Restaurează +- +- +- Delete +- Șterge +- +- +- Delete all +- Șterge toate +- +- +- Entry history selection +- Selectarea istoricului de intrare +- +- +- Show entry at selected history state +- AfiÈ™are intrare la starea istoricului selectat +- +- +- Restore entry to selected history state +- RestauraÈ›i intrarea la starea istoricului selectat +- +- +- Delete selected history state +- ȘtergeÈ›i starea istoricului selectat +- +- +- Delete all history +- ȘtergeÈ›i tot istoricul +- +- +- +- EditEntryWidgetMain +- +- URL: +- URL: +- +- +- Password: +- Parola: +- +- +- Title: +- Titlu: +- +- +- Presets +- Presetări +- +- +- Toggle the checkbox to reveal the notes section. +- ComutaÈ›i caseta de selectare pentru a dezvălui secÈ›iunea de note. +- +- +- Username: +- Nume utilizator: +- +- +- Url field +- Câmp url +- +- +- Download favicon for URL +- DescărcaÈ›i favicon pentru URL +- +- +- Password field +- Câmp parola +- +- +- Toggle notes visible +- Notele de comutare sunt vizibile +- +- +- Expiration field +- Câmp de expirare +- +- +- Expiration Presets +- Presetări expirare +- +- +- Expiration presets +- Presetări expirare +- +- +- Notes field +- Câmpul de note +- +- +- Title field +- Câmpul titlu +- +- +- Username field +- Câmpul utilizatorului +- +- +- Toggle expiration +- Combate expirarea +- +- +- Notes: +- +- +- +- https://example.com +- +- +- +- Expires: +- +- +- +- Edit Entry +- +- +- +- +- EditEntryWidgetSSHAgent +- +- Form +- De la +- +- +- Remove key from agent after +- EliminaÈ›i cheia de la agent după +- +- +- seconds +- secunde +- +- +- Fingerprint +- Amprentă +- +- +- Remove key from agent when database is closed/locked +- EliminaÈ›i cheia de la agent atunci când baza de date este închisă/blocată +- +- +- Public key +- Cheie publică +- +- +- Add key to agent when database is opened/unlocked +- Adăugare cheie la agent când baza de date este deschisă/dezblocată +- +- +- Comment +- Comentariu +- +- +- Decrypt +- Decriptează +- +- +- n/a +- nu se aplică +- +- +- Copy to clipboard +- Copiază în clipboard +- +- +- Private key +- Cheie privată +- +- +- External file +- FiÈ™ier extern +- +- +- Browse... +- Button for opening file dialog +- RăsfoieÈ™te... +- +- +- Attachment +- AtaÈ™ament +- +- +- Add to agent +- Adaugă în agent +- +- +- Remove from agent +- Elimină din agent +- +- +- Require user confirmation when this key is used +- SolicitaÈ›i confirmarea utilizatorului când se utilizează această cheie +- +- +- Remove key from agent after specified seconds +- ScoateÈ›i cheia din agent după câteva secunde specificate +- +- +- Browser for key file +- Browser pentru fiÈ™ierul cheie +- +- +- External key file +- FiÈ™ier cheie externă +- +- +- Select attachment file +- SelectaÈ›i fiÈ™ierul de ataÈ™ament +- +- +- +- EditGroupWidget +- +- Group +- Grup +- +- +- Icon +- Icon +- +- +- Properties +- Proprietăți +- +- +- Add group +- Adaugă grup +- +- +- Edit group +- Editează grup +- +- +- Enable +- Activează +- +- +- Disable +- Dezactivează +- +- +- Inherit from parent group (%1) +- MoÈ™tenire din grupul părinte (%1) +- +- +- Entry has unsaved changes +- Intrarea are modificări nesalvate +- +- +- +- EditGroupWidgetKeeShare +- +- Type: +- Tip: +- +- +- Path: +- Calea: +- +- +- Password: +- Parola: +- +- +- Inactive +- Inactiv +- +- +- KeeShare unsigned container +- KeeShare container nesemnat +- +- +- KeeShare signed container +- KeeShare container semnat +- +- +- Select import source +- SelectaÈ›i sursă de import +- +- +- Select export target +- SelectaÈ›i È›intă de export +- +- +- Select import/export file +- SelectaÈ›i fiÈ™ier pentru import/export +- +- +- Clear +- GoleÈ™te +- +- +- Import +- Import +- +- +- Export +- Export +- +- +- Synchronize +- Sincronizeaza +- +- +- Your KeePassXC version does not support sharing this container type. +-Supported extensions are: %1. +- Versiunea dvs. KeePassXC nu acceptă distribuirea acestui tip de container. +-Extensiile acceptate sunt: %1. +- +- +- %1 is already being exported by this database. +- %1 este deja exportat de această bază de date. +- +- +- %1 is already being imported by this database. +- %1 este deja importat de această bază de date. +- +- +- %1 is being imported and exported by different groups in this database. +- %1 este importat È™i exportat de diferite grupuri din această bază de date. +- +- +- KeeShare is currently disabled. You can enable import/export in the application settings. +- KeeShare is a proper noun +- ÃŽn prezent, KeeShare este dezactivat. PuteÈ›i activa importul / exportul în setările aplicaÈ›iei. +- +- +- Database export is currently disabled by application settings. +- Exportul bazei de date este dezactivat în prezent de setările aplicaÈ›iei. +- +- +- Database import is currently disabled by application settings. +- Importul bazei de date este dezactivat în prezent de setările aplicaÈ›iei. +- +- +- Sharing mode field +- Câmpul modului de partajare +- +- +- Path to share file field +- Calea de partajare a câmpului de fiÈ™iere +- +- +- Password field +- Câmp parola +- +- +- Clear fields +- Câmpuri clare +- +- +- Browse for share file +- +- +- +- Browse... +- RăsfoieÈ™te... +- +- +- +- EditGroupWidgetMain +- +- Name field +- Câmpul de nume +- +- +- Notes field +- Câmpul de note +- +- +- Toggle expiration +- Combate expirarea +- +- +- Auto-Type toggle for this and sub groups +- Comută automat pentru această opÈ›iune È™i subgrupuri +- +- +- Expiration field +- Câmp de expirare +- +- +- Search toggle for this and sub groups +- CăutaÈ›i pentru aceasta È™i subgrupuri +- +- +- Default auto-type sequence field +- Câmpul de secvență implicit de tip automat +- +- +- Expires: +- +- +- +- Use default Auto-Type sequence of parent group +- +- +- +- Auto-Type: +- +- +- +- Search: +- +- +- +- Notes: +- +- +- +- Name: +- +- +- +- Set default Auto-Type sequence +- +- +- +- Edit Group +- +- +- +- +- EditWidgetIcons +- +- Add custom icon +- Adaugă icon personalizat +- +- +- Delete custom icon +- Șterge icon personalizat +- +- +- Download favicon +- Descarcă favicon +- +- +- Unable to fetch favicon. +- Nu pot descărca favicon. +- +- +- Images +- Imagini +- +- +- All files +- Toate fiÈ™ierele +- +- +- Confirm Delete +- ConfirmaÈ›i È™tergerea +- +- +- Select Image(s) +- Selectare imagine(i) +- +- +- Successfully loaded %1 of %n icon(s) +- ÃŽncărcat cu succes% 1 din% n pictogramă (e)ÃŽncărcat cu succes% 1 din% n pictogramă (e)ÃŽncărcat cu succes %1 din %n pictograme +- +- +- No icons were loaded +- Nu s-au încărcat pictograme +- +- +- %n icon(s) already exist in the database +- % n pictograma (ele) există deja în baza de date% n pictograma (ele) există deja în baza de date%n pictograma(e) există deja în baza de date +- +- +- The following icon(s) failed: +- Pictograma (ele) următoare nu a reuÈ™it:Pictograma (ele) următoare nu a reuÈ™it:Pictograma(e) următoare nu au reuÈ™it: +- +- +- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? +- Această pictogramă este utilizată de% n intrare (e) È™i va fi înlocuită de pictograma implicită. Sigur È™tergeÈ›i-l?Această pictogramă este utilizată de% n intrare (e) È™i va fi înlocuită de pictograma implicită. Sigur È™tergeÈ›i-l?Această pictogramă este utilizată de %n intrare(i) È™i va fi înlocuită de pictograma implicită. Sigur È™tergeÈ›i-l? +- +- +- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security +- PuteÈ›i activa serviciul de pictogramă a site-ului web DuckDuckGo în Instrumente -> Setări -> Securitate +- +- +- Download favicon for URL +- DescărcaÈ›i favicon pentru URL +- +- +- Apply selected icon to subgroups and entries +- AplicaÈ›i pictograma selectată pe subgrupuri È™i intrări +- +- +- Also apply to child groups +- De asemenea, aplicaÈ›i pentru grupuri de copii +- +- +- Also apply to child entries +- De asemenea, aplicaÈ›i pentru înregistrările copilului +- +- +- Also apply to all children +- De asemenea, aplicaÈ›i tuturor copiilor +- +- +- Existing icon selected. +- Pictograma existentă selectată. +- +- +- Use default icon +- +- +- +- Use custom icon +- +- +- +- Apply icon to... +- +- +- +- Apply to this group only +- +- +- +- +- EditWidgetProperties +- +- Created: +- Creat: +- +- +- Modified: +- Modificat: +- +- +- Accessed: +- Accesat: +- +- +- Uuid: +- Uuid: +- +- +- Plugin Data +- Modul de date +- +- +- Remove +- ÃŽnlătură +- +- +- Delete plugin data? +- ȘtergeÈ›i datele modulului? +- +- +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- Chiar doriÈ›i să È™tergeÈ›i datele selectate modulului? +-Acest lucru poate provoca moduluri afectate la defecÈ›iune. +- +- +- Key +- Cheie +- +- +- Value +- Valoare +- +- +- Datetime created +- Datetime creat +- +- +- Datetime modified +- Datetime modificat +- +- +- Datetime accessed +- Data datei accesată +- +- +- Unique ID +- ID unic +- +- +- Plugin data +- Date despre pluginuri +- +- +- Remove selected plugin data +- EliminaÈ›i datele pluginului selectate +- +- +- +- Entry +- +- %1 - Clone +- %1 - Clona +- +- +- +- EntryAttachmentsModel +- +- Name +- Nume +- +- +- Size +- Dimensiunea +- +- +- +- EntryAttachmentsWidget +- +- Form +- De la +- +- +- Add +- Adaugă +- +- +- Remove +- ÃŽnlătură +- +- +- Open +- Deschide +- +- +- Save +- Salvează +- +- +- Select files +- SelectaÈ›i fiÈ™ierele +- +- +- Are you sure you want to remove %n attachment(s)? +- Sigur eliminaÈ›i% n ataÈ™amente?Sigur eliminaÈ›i% n ataÈ™amente?Sigur eliminaÈ›i %n ataÈ™amente? +- +- +- Save attachments +- SalvaÈ›i ataÈ™amentele +- +- +- Unable to create directory: +-%1 +- Imposibil de creat dosar: +-%1 +- +- +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- Sigur suprascrieÈ›i fiÈ™ierul existent "%1" cu ataÈ™amentul? +- +- +- Confirm overwrite +- ConfirmaÈ›i suprascrierea +- +- +- Unable to save attachments: +-%1 +- Imposibil de salvat ataÈ™amentele: +-%1 +- +- +- Unable to open attachment: +-%1 +- Imposibil de deschis ataÈ™ament: +-%1 +- +- +- Unable to open attachments: +-%1 +- Imposibil de deschis atașări: +-%1 +- +- +- Confirm remove +- Confirmare eliminare +- +- +- Unable to open file(s): +-%1 +- Imposibil de deschis fiÈ™ierul (e): +-% 1Imposibil de deschis fiÈ™ierul (e): +-% 1Imposibil de deschis fiÈ™ierul(e): +-%1 +- +- +- Attachments +- AtaÈ™amente +- +- +- Add new attachment +- AdăugaÈ›i un nou ataÈ™ament +- +- +- Remove selected attachment +- EliminaÈ›i ataÈ™amentul selectat +- +- +- Open selected attachment +- DeschideÈ›i ataÈ™amentul selectat +- +- +- Save selected attachment to disk +- SalvaÈ›i ataÈ™amentul selectat pe disc +- +- +- %1 is a big file (%2 MB). +-Your database may get very large and reduce performance. +- +-Are you sure to add this file? +- +- +- +- Confirm Attachment +- +- +- +- +- EntryAttributesModel +- +- Name +- Nume +- +- +- +- EntryHistoryModel +- +- Last modified +- Ultima modificare +- +- +- Title +- Titlu +- +- +- Username +- Nume utilizator +- +- +- URL +- URL +- +- +- +- EntryModel +- +- Ref: +- Reference abbreviation +- Ref: +- +- +- Group +- Grup +- +- +- Title +- Titlu +- +- +- Username +- Nume utilizator +- +- +- URL +- URL +- +- +- Never +- Niciodată +- +- +- Password +- Parolă +- +- +- Notes +- NotiÈ›e +- +- +- Expires +- Expiră +- +- +- Created +- Creat +- +- +- Modified +- Modificat +- +- +- Accessed +- Accesate +- +- +- Attachments +- AtaÈ™amente +- +- +- Size +- Dimensiunea +- +- +- Group name +- Numele grupului +- +- +- Entry title +- +- +- +- Entry notes +- +- +- +- Entry expires at +- +- +- +- Creation date +- +- +- +- Last modification date +- +- +- +- Last access date +- +- +- +- Attached files +- +- +- +- Entry size +- +- +- +- Has attachments +- +- +- +- Has TOTP one-time password +- +- +- +- +- EntryPreviewWidget +- +- Close +- ÃŽnchide +- +- +- General +- General +- +- +- Username +- Nume utilizator +- +- +- Password +- Parola +- +- +- Expiration +- Expirare +- +- +- URL +- URL +- +- +- Attributes +- Atribute +- +- +- Attachments +- AtaÈ™amente +- +- +- Notes +- NotiÈ›e +- +- +- Autotype +- autotipie +- +- +- Window +- Fereastră +- +- +- Sequence +- Secvență +- +- +- Searching +- Căutare +- +- +- Search +- Caută +- +- +- Clear +- GoleÈ™te +- +- +- Never +- Niciodată +- +- +- [PROTECTED] +- [PROTEJAT] +- +- +- Enabled +- Activat +- +- +- Disabled +- Dezactivat +- +- +- Share +- ÃŽmpărtăşire +- +- +- Display current TOTP value +- AfiÈ™ează valoarea curentă TOTP +- +- +- Advanced +- Avansat +- +- +- Default Sequence +- +- +- +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- attributes line +- +- +- +- +- EntryURLModel +- +- Invalid URL +- URL invalid +- +- +- +- EntryView +- +- Fit to window +- Potrivire la fereastră +- +- +- Fit to contents +- Potrivire la conÈ›inut +- +- +- Reset to defaults +- Resetare la valorile implicite +- +- +- Has attachments +- Entry attachment icon toggle +- +- +- +- Has TOTP +- Entry TOTP icon toggle +- Are TOTP +- +- +- +- FdoSecrets::Item +- +- Entry "%1" from database "%2" was used by %3 +- Intrarea „%1†din baza de date „%2†a fost utilizată de %3 +- +- +- +- FdoSecrets::Service +- +- Failed to register DBus service at %1.<br/> +- +- +- +- %n Entry(s) was used by %1 +- %1 is the name of an application +- +- +- +- +- FdoSecrets::SettingsDatabaseModel +- +- File Name +- Nume de fiÈ™ier +- +- +- Group +- Grup +- +- +- Manage +- Administra +- +- +- Unlock to show +- DeblocaÈ›i să afiÈ™aÈ›i +- +- +- None +- Nici unul +- +- +- +- FdoSecrets::SettingsSessionModel +- +- Application +- AplicaÅ£ie +- +- +- Manage +- Administra +- +- +- +- FdoSecretsPlugin +- +- <b>Fdo Secret Service:</b> %1 +- +- +- +- Unknown +- Unknown PID +- Necunoscut +- +- +- Unknown +- Unknown executable path +- Necunoscut +- +- +- <i>PID: %1, Executable: %2</i> +- <i>PID: 1234, Executable: /path/to/exe</i> +- +- +- +- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. +- +- +- +- +- Group +- +- [empty] +- group has no children +- [gol] +- +- +- +- HibpDownloader +- +- Online password validation failed +- +- +- +- +- IconDownloaderDialog +- +- Download Favicons +- Descarcă Favicons +- +- +- Cancel +- Anulare +- +- +- Having trouble downloading icons? +-You can enable the DuckDuckGo website icon service in the security section of the application settings. +- AveÈ›i probleme la descărcarea pictogramelor? +-PuteÈ›i activa serviciul pictogramelor site-ului web DuckDuckGo în secÈ›iunea de securitate a setărilor aplicaÈ›iei. +- +- +- Close +- ÃŽnchide +- +- +- URL +- URL +- +- +- Status +- Stare +- +- +- Please wait, processing entry list... +- Vă rugăm să aÈ™teptaÈ›i, prelucrarea listei de intrare ... +- +- +- Downloading... +- Descărcarea... +- +- +- Ok +- Ok +- +- +- Already Exists +- Deja exista +- +- +- Download Failed +- Descarcare esuata +- +- +- Downloading favicons (%1/%2)... +- Descărcarea de preferinÈ›e (%1/%2) ... +- +- +- +- KMessageWidget +- +- &Close +- &ÃŽnchide +- +- +- Close message +- ÃŽnchide mesaj +- +- +- +- Kdbx3Reader +- +- missing database headers +- Lipsă de anteturi de baze de date +- +- +- Header doesn't match hash +- Antetul nu se potriveÈ™te cu hash +- +- +- Invalid header id size +- Dimensiune ID antet nevalidă +- +- +- Invalid header field length +- Lungime câmp antet nevalid +- +- +- Invalid header data length +- Lungime de date antet nevalidă +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Au fost furnizate datele de acreditare nevalide, încercaÈ›i din nou. +-Dacă reîncepe, atunci fiÈ™ierul dvs. de bază de date poate fi corupt. +- +- +- Unable to calculate database key +- +- +- +- Unable to issue challenge-response: %1 +- +- +- +- +- Kdbx3Writer +- +- Unable to issue challenge-response: %1 +- +- +- +- Unable to calculate database key +- +- +- +- +- Kdbx4Reader +- +- missing database headers +- Lipsă de anteturi de baze de date +- +- +- Invalid header checksum size +- Dimensiune de control antet nevalidă +- +- +- Header SHA256 mismatch +- Antet SHA256 nepotrivire +- +- +- Unknown cipher +- Cifru necunoscut +- +- +- Invalid header id size +- Dimensiune ID antet nevalidă +- +- +- Invalid header field length +- Lungime câmp antet nevalid +- +- +- Invalid header data length +- Lungime de date antet nevalidă +- +- +- Failed to open buffer for KDF parameters in header +- Nu s-a reuÈ™it deschiderea tampon pentru parametrii KDF în antet +- +- +- Unsupported key derivation function (KDF) or invalid parameters +- FuncÈ›ia de derivare a cheii neacceptate (KDF) sau parametrii nevaliÈ›i +- +- +- Legacy header fields found in KDBX4 file. +- Câmpuri antet moÈ™tenite găsite în fiÈ™ierul KDBX4. +- +- +- Invalid inner header id size +- Dimensiune ID antet interior nevalidă +- +- +- Invalid inner header field length +- Lungime câmp antet interior nevalid +- +- +- Invalid inner header binary size +- Dimensiune binar antet interior nevalid +- +- +- Unsupported KeePass variant map version. +- Translation: variant map = data structure for storing meta data +- Versiune de hartă variantă neacceptată. +- +- +- Invalid variant map entry name length +- Translation: variant map = data structure for storing meta data +- Lungime nevalidă a numelui intrării hărÈ›ii de variantă +- +- +- Invalid variant map entry name data +- Translation: variant map = data structure for storing meta data +- Nume de intrare date hartă variantă nevalidă +- +- +- Invalid variant map entry value length +- Translation: variant map = data structure for storing meta data +- Lungime nevalidă a valorii intrării hărÈ›ii de variantă +- +- +- Invalid variant map entry value data +- Translation comment: variant map = data structure for storing meta data +- Date de valoare de intrare hartă variantă nevalidă +- +- +- Invalid variant map Bool entry value length +- Translation: variant map = data structure for storing meta data +- Hartă variantă nevalidă lungimea valorii intrării bool +- +- +- Invalid variant map Int32 entry value length +- Translation: variant map = data structure for storing meta data +- Hartă variantă nevalidă Int32 lungime valoare intrare +- +- +- Invalid variant map UInt32 entry value length +- Translation: variant map = data structure for storing meta data +- Hartă variantă nevalidă UInt32 lungime valoare intrare +- +- +- Invalid variant map Int64 entry value length +- Translation: variant map = data structure for storing meta data +- Hartă variantă nevalidă Int64 lungime valoare intrare +- +- +- Invalid variant map UInt64 entry value length +- Translation: variant map = data structure for storing meta data +- Hartă variantă nevalidă UInt64 lungime valoare intrare +- +- +- Invalid variant map entry type +- Translation: variant map = data structure for storing meta data +- Tip de intrare hartă variantă nevalidă +- +- +- Invalid variant map field type size +- Translation: variant map = data structure for storing meta data +- Dimensiune tip câmp hartă variantă nevalidă +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Au fost furnizate datele de acreditare nevalide, încercaÈ›i din nou. +-Dacă reîncepe, atunci fiÈ™ierul dvs. de bază de date poate fi corupt. +- +- +- (HMAC mismatch) +- (Nepotrivire HMAC) +- +- +- Unable to calculate database key: %1 +- +- +- +- +- Kdbx4Writer +- +- Invalid symmetric cipher algorithm. +- Algoritm de cifrare simetrică nevalid. +- +- +- Invalid symmetric cipher IV size. +- IV = Initialization Vector for symmetric cipher +- Cifrul simetric nevalid dimensiune IV. +- +- +- Failed to serialize KDF parameters variant map +- Translation comment: variant map = data structure for storing meta data +- Nu s-a reuÈ™it serializarea hărÈ›ii variantei parametrilor KDF +- +- +- Unable to calculate database key: %1 +- +- +- +- +- KdbxReader +- +- Unsupported cipher +- Cifru neacceptat +- +- +- Invalid compression flags length +- Lungime steaguri de compresie nevalidă +- +- +- Unsupported compression algorithm +- Algoritm de compresie neacceptat +- +- +- Invalid master seed size +- Dimensiune de seminÈ›e coordonatoare nevalidă +- +- +- Invalid transform seed size +- Dimensiune de seminÈ›e de transformare nevalidă +- +- +- Invalid transform rounds size +- Dimensiune incorectă a rundelor de transformare +- +- +- Invalid start bytes size +- Dimensiune nevalidă a octeÈ›ilor de pornire +- +- +- Invalid random stream id size +- Dimensiune incorectă a fluxului de flux aleator +- +- +- Invalid inner random stream cipher +- Cifrul intern nevalid al fluxului aleator +- +- +- Not a KeePass database. +- Nu este o bază de date KeePass. +- +- +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- FiÈ™ierul selectat este o bază de date vechi KeePass 1 (.KDB). +- +-Tu poÈ›i importa prin click pe bază de date > 'importarea bază de date KeePass 1... '. +-Aceasta este o migrare într-un singur sens. Nu veÈ›i putea deschide baza de date importată cu vechea versiune KeePassX 0,4. +- +- +- Unsupported KeePass 2 database version. +- Versiunea bazei de date KeePass 2 neacceptată. +- +- +- Invalid cipher uuid length: %1 (length=%2) +- lungime nevalidă a UUID criptat: %1 (lungime = %2) +- +- +- Unable to parse UUID: %1 +- Imposibil de analizat UUID: %1 +- +- +- Failed to read database file. +- Imposibil de citit fiÈ™ierul bazei de date. +- +- +- +- KdbxXmlReader +- +- XML parsing failure: %1 +- Eroare de analizare XML: %1 +- +- +- No root group +- Nici un grup rădăcină +- +- +- Missing icon uuid or data +- LipseÈ™te pictograma UUID sau date +- +- +- Missing custom data key or value +- Lipsă de cheie sau valoare de date particularizate +- +- +- Multiple group elements +- Mai multe elemente de grup +- +- +- Null group uuid +- Grup nul UUID +- +- +- Invalid group icon number +- Numărul pictogramei de grup nevalid +- +- +- Invalid EnableAutoType value +- Valoare nevalidă pentru permite AutoTiparire +- +- +- Invalid EnableSearching value +- Valoare nevalidă pentru Permite cautare +- +- +- No group uuid found +- Nici un grup UUID găsit +- +- +- Null DeleteObject uuid +- UUID Null pentru Sterge Obiect +- +- +- Missing DeletedObject uuid or time +- Lipsă UUID sau timp pentru Obiect Sters +- +- +- Null entry uuid +- Intrare nulă UUID +- +- +- Invalid entry icon number +- Număr pictogramă de intrare nevalidă +- +- +- History element in history entry +- Element istoric în intrarea în istorie +- +- +- No entry uuid found +- Nici o intrare UUID găsit +- +- +- History element with different uuid +- Element istoric cu diferite UUID +- +- +- Duplicate custom attribute found +- Atribut personalizat duplicat găsit +- +- +- Entry string key or value missing +- Lipsă de cheie È™ir de intrare sau valoare +- +- +- Entry binary key or value missing +- Lipsă cheiei binare sau valorii intrare +- +- +- Auto-type association window or sequence missing +- Lipsă de fereastra de asociere de tiparire auto sau secvenÈ›a +- +- +- Invalid bool value +- Valoare bool nevalidă +- +- +- Invalid date time value +- Valoare dată nevalidă +- +- +- Invalid color value +- Valoare de culoare nevalidă +- +- +- Invalid color rgb part +- Parte RGB de culoare nevalidă +- +- +- Invalid number value +- Valoare numerică nevalidă +- +- +- Invalid uuid value +- Valoare UUID nevalidă +- +- +- Unable to decompress binary +- Translator meant is a binary data inside an entry +- Imposibil de a decomprima binar +- +- +- XML error: +-%1 +-Line %2, column %3 +- Eroare XML: +-%1 +-Linia %2, coloana %3 +- +- +- +- KeeAgentSettings +- +- Invalid KeeAgent settings file structure. +- +- +- +- Private key is an attachment but no attachments provided. +- +- +- +- Private key is empty +- +- +- +- File too large to be a private key +- FiÈ™ier prea mare pentru a fi cheie privată +- +- +- Failed to open private key +- Deschiderea cheii private a eÈ™uat +- +- +- +- KeePass1OpenWidget +- +- Unable to open the database. +- Nu pot deschide baza de date. +- +- +- Import KeePass1 Database +- ImportaÈ›i baza de date KeePass1 +- +- +- +- KeePass1Reader +- +- Unable to read keyfile. +- FiÈ™ierul cheie nu poate fi citit. +- +- +- Not a KeePass database. +- Nu este o bază de date KeePass. +- +- +- Unsupported encryption algorithm. +- Algoritm criptare nesuportat. +- +- +- Unsupported KeePass database version. +- Versiune bază de date KeePass nesuportată. +- +- +- Unable to read encryption IV +- IV = Initialization Vector for symmetric cipher +- Imposibil de citit criptarea IV +- +- +- Invalid number of groups +- Număr nevalid de grupuri +- +- +- Invalid number of entries +- Număr nevalid de intrări +- +- +- Invalid content hash size +- Dimensiune hash conÈ›inut nevalidă +- +- +- Invalid transform seed size +- Dimensiune de seminÈ›e de transformare nevalidă +- +- +- Invalid number of transform rounds +- Număr nevalid de runde de transformare +- +- +- Unable to construct group tree +- Imposibil de construit arborele de grup +- +- +- Root +- Rădăcină +- +- +- Key transformation failed +- Transformarea cheii nu a reuÈ™it +- +- +- Invalid group field type number +- Număr de câmp de grupă nevalid +- +- +- Invalid group field size +- Dimensiune câmp de grup nevalid +- +- +- Read group field data doesn't match size +- Citirea datelor câmpului de grup nu corespunde dimensiunii +- +- +- Incorrect group id field size +- Dimensiune incorecta a câmpului ID grup +- +- +- Incorrect group creation time field size +- Dimensiune incorect a câmpului de timp creare grup +- +- +- Incorrect group modification time field size +- Dimensiunea incorectă a câmpului timpul modificarii grupei +- +- +- Incorrect group access time field size +- Dimensiune incorecta câmpului timp de acces a grupului +- +- +- Incorrect group expiry time field size +- Dimensiunea incorecta a câmpului timp de expirare grup +- +- +- Incorrect group icon field size +- Dimensiune incorecta a câmpului pictogramă grupei +- +- +- Incorrect group level field size +- Dimensiune incorecta a câmpului nivelul grupei +- +- +- Invalid group field type +- Tip nevalid a câmpului grup +- +- +- Missing group id or level +- Lipsă ID-ul grupului sau nivelul +- +- +- Missing entry field type number +- Lipsă numărului tipului câmpului de intrare +- +- +- Invalid entry field size +- Dimensiune nevalidă câmp intrare +- +- +- Read entry field data doesn't match size +- Citirea datelor câmpului de intrare nu corespunde dimensiunii +- +- +- Invalid entry uuid field size +- Dimensiune nevalidă a câmpului UUID intrare +- +- +- Invalid entry group id field size +- Dimensiune nevalida a câmpului ID grup de intrare +- +- +- Invalid entry icon field size +- Dimensiune nevalidă a câmpului pictogramă intrare +- +- +- Invalid entry creation time field size +- Dimensiune nevalidă a câmpului marcă de timp de creare intrare +- +- +- Invalid entry modification time field size +- Dimensiune nevalidă a câmpului marcă de timp modificarii intrare +- +- +- Invalid entry expiry time field size +- Dimensiune nevalidă a câmpului timp expirare intrare +- +- +- Invalid entry field type +- Tipul câmpului de intrare nevalid +- +- +- unable to seek to content position +- imposibilitatea de a căuta la poziÈ›ia de conÈ›inut +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Au fost furnizate datele de acreditare nevalide, încercaÈ›i din nou. +-Dacă reîncepe, atunci fiÈ™ierul dvs. de bază de date poate fi corupt. +- +- +- Unable to calculate database key +- +- +- +- +- KeeShare +- +- Invalid sharing reference +- Referință de partajare nevalidă +- +- +- Inactive share %1 +- Ponderea inactivă %1 +- +- +- Imported from %1 +- Importat din %1 +- +- +- Exported to %1 +- Exportat la %1 +- +- +- Synchronized with %1 +- Sincronizat cu %1 +- +- +- Import is disabled in settings +- Importul este dezactivat în setări +- +- +- Export is disabled in settings +- Exportul este dezactivat în setări +- +- +- Inactive share +- Ponderea inactivă +- +- +- Imported from +- Importat din +- +- +- Exported to +- Exportat în +- +- +- Synchronized with +- Sincronizat cu +- +- +- +- KeyComponentWidget +- +- Key Component +- Componenta cheie +- +- +- Key Component Description +- Descriere componentă cheie +- +- +- Cancel +- Anulare +- +- +- Key Component set, click to change or remove +- Set de componente cheie, faceÈ›i clic pentru a modifica sau elimina +- +- +- Add %1 +- Add a key component +- Adăugare %1 +- +- +- Change %1 +- Change a key component +- Modificare %1 +- +- +- Remove %1 +- Remove a key component +- Eliminare %1 +- +- +- %1 set, click to change or remove +- Change or remove a key component +- %1 set, faceÈ›i clic pentru a modifica sau elimina +- +- +- +- KeyFileEditWidget +- +- Generate +- Generează +- +- +- Key File +- FiÈ™ier cheie +- +- +- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> +- <p>AveÈ›i posibilitatea să adăugaÈ›i un fiÈ™ier cheie care conÈ›ine octeÈ›i aleatoare pentru securitate suplimentară.</p><p>Trebuie să-l păstraÈ›i secret È™i niciodată nu-l pierde sau vei fi blocat!</p> +- +- +- Error loading the key file '%1' +-Message: %2 +- Eroare la încărcarea fiÈ™ierului cheie '%1' +-Mesaj: %2 +- +- +- Key files +- FiÈ™iere cheie +- +- +- All files +- Toate fiÈ™ierele +- +- +- Create Key File... +- Creare fiÈ™ier cheie... +- +- +- Error creating key file +- Eroare la crearea fiÈ™ierului cheie +- +- +- Unable to create key file: %1 +- Imposibil de creat fiÈ™ierul cheie: %1 +- +- +- Select a key file +- SelectaÈ›i un fiÈ™ier cheie +- +- +- Key file selection +- Selectarea fiÈ™ierelor cheie +- +- +- Browse for key file +- CăutaÈ›i fiÈ™ierul cheie +- +- +- Browse... +- RăsfoieÈ™te... +- +- +- Generate a new key file +- GeneraÈ›i un nou fiÈ™ier cheie +- +- +- Note: Do not use a file that may change as that will prevent you from unlocking your database! +- Notă: Nu folosiÈ›i un fiÈ™ier care s-ar putea schimba, deoarece acest lucru vă va împiedica să deblocaÈ›i baza de date! +- +- +- Invalid Key File +- FiÈ™ier cheie nevalid +- +- +- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. +- Nu puteÈ›i utiliza baza de date curentă ca propriul fiÈ™ier cheie. Vă rugăm să alegeÈ›i un alt fiÈ™ier sau să generaÈ›i un nou fiÈ™ier cheie. +- +- +- Suspicious Key File +- FiÈ™ier cu cheie suspectă +- +- +- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. +-Are you sure you want to continue with this file? +- FiÈ™ierul cheie ales arată ca un fiÈ™ier de bază de date cu parolă. Un fiÈ™ier cheie trebuie să fie un fiÈ™ier static care nu se schimbă niciodată sau veÈ›i pierde accesul la baza de date pentru totdeauna. +-Sigur doriÈ›i să continuaÈ›i cu acest fiÈ™ier? +- +- +- Old key file format +- +- +- +- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. +- +- +- +- +- MainWindow +- +- &Database +- &Bază de date +- +- +- &Help +- &Ajutor +- +- +- &Groups +- &Grupuri +- +- +- &Tools +- &Unelte +- +- +- &Quit +- &IeÈ™ire +- +- +- &About +- &Despre +- +- +- Database settings +- Setări bază de date +- +- +- Copy username to clipboard +- Copiere nume utilizator în Clipboard +- +- +- Copy password to clipboard +- Copiere parolă în Clipboard +- +- +- &Settings +- &Setări +- +- +- &Title +- &Titlu +- +- +- Copy title to clipboard +- Copiere titlu în Clipboard +- +- +- &URL +- &URL +- +- +- Copy URL to clipboard +- Copiere URL în Clipboard +- +- +- &Notes +- &NotiÈ›e +- +- +- Copy notes to clipboard +- Copierea notelor în Clipboard +- +- +- Copy &TOTP +- Copiază &TOTP +- +- +- E&mpty recycle bin +- coÈ™ de r&eciclare gol +- +- +- Clear history +- GoleÈ™te istoric +- +- +- Access error for config file %1 +- Eroare de acces pentru fisier de configurare %1 +- +- +- Settings +- Setări +- +- +- Toggle window +- Comutare fereastră +- +- +- Quit KeePassXC +- PărăsiÈ›i KeePassXC +- +- +- Please touch the button on your YubiKey! +- Vă rugăm să atingeÈ›i butonul de pe YubiKey dvs.! +- +- +- WARNING: You are using an unstable build of KeePassXC! +-There is a high risk of corruption, maintain a backup of your databases. +-This version is not meant for production use. +- Avertisment: utilizaÈ›i un build instabil de KeePassXC! +-Există un risc ridicat de corupÈ›ie, menÈ›ine o copie de rezervă a bazelor de date. +-Această versiune nu este destinată utilizării producÈ›iei. +- +- +- &Donate +- &Donează +- +- +- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +-We recommend you use the AppImage available on our downloads page. +- Avertisment: versiunea dumneavoastră QT poate provoca KeePassXC să se blocheze cu o tastatură vizuală! +-Vă recomandăm să utilizaÈ›i AppImage disponibile pe pagina noastră de descărcări. +- +- +- &Import +- &Import +- +- +- Create a new database +- Crearea unei baze de date noi +- +- +- Merge from another KDBX database +- ÃŽmbinare dintr-o altă bază de date KDBX +- +- +- Add a new entry +- Adăugarea unei noi intrări +- +- +- View or edit entry +- Vizualizarea sau editarea intrării +- +- +- Add a new group +- Adăugarea unui grup nou +- +- +- Perform &Auto-Type +- EfectuaÈ›i È™i &Auto-Tiparire +- +- +- Open &URL +- Deschide &URL-ul +- +- +- Import a KeePass 1 database +- Importul unei baze de date KeePass 1 +- +- +- Import a CSV file +- Importul unui fiÈ™ier CSV +- +- +- NOTE: You are using a pre-release version of KeePassXC! +-Expect some bugs and minor issues, this version is not meant for production use. +- Notă: utilizaÈ›i o versiune pre-release de KeePassXC! +-Asteptati-va unele bug-uri È™i probleme minore, această versiune nu este destinat pentru utilizarea producÈ›iei. +- +- +- Check for updates on startup? +- CăutaÈ›i actualizări la pornire? +- +- +- Would you like KeePassXC to check for updates on startup? +- DoriÈ›i ca KeePassXC să caute actualizări la pornire? +- +- +- You can always check for updates manually from the application menu. +- PuteÈ›i căuta întotdeauna actualizări manual din meniul aplicaÈ›iei. +- +- +- &Export +- &Export +- +- +- Sort &A-Z +- Sortare &A-Z +- +- +- Sort &Z-A +- Sortare &Z-A +- +- +- &Password Generator +- Generator de &parolă +- +- +- Import a 1Password Vault +- Import 1Password Vault +- +- +- &Getting Started +- NoÈ›iuni de bază +- +- +- &User Guide +- Manualul &utilizatorului +- +- +- &Keyboard Shortcuts +- comenzi rapide de la tastatură +- +- +- &Recent Databases +- &Baze de date recente +- +- +- &Entries +- +- +- +- Copy Att&ribute +- +- +- +- TOTP +- TOTP +- +- +- View +- +- +- +- Theme +- +- +- +- &Check for Updates +- +- +- +- &Open Database… +- Deschide baza de date +- +- +- &Save Database +- &Salvează baza de date +- +- +- &Close Database +- &ÃŽnchide baza de date +- +- +- &New Database… +- &Bază de date nouă... +- +- +- &Merge From Database… +- +- +- +- &New Entry… +- +- +- +- &Edit Entry… +- +- +- +- &Delete Entry… +- +- +- +- &New Group… +- +- +- +- &Edit Group… +- +- +- +- &Delete Group… +- +- +- +- Download All &Favicons… +- +- +- +- Sa&ve Database As… +- +- +- +- Database &Security… +- +- +- +- Database &Reports... +- +- +- +- Statistics, health check, etc. +- +- +- +- &Database Settings… +- Setări bază de &date... +- +- +- &Clone Entry… +- +- +- +- Move u&p +- +- +- +- Move entry one step up +- +- +- +- Move do&wn +- +- +- +- Move entry one step down +- +- +- +- Copy &Username +- +- +- +- Copy &Password +- +- +- +- Download &Favicon +- +- +- +- &Lock Databases +- +- +- +- &CSV File… +- +- +- +- &HTML File… +- +- +- +- KeePass 1 Database… +- +- +- +- 1Password Vault… +- +- +- +- CSV File… +- FiÈ™ier CSV... +- +- +- Show TOTP +- +- +- +- Show QR Code +- +- +- +- Set up TOTP… +- +- +- +- Report a &Bug +- +- +- +- Open Getting Started Guide +- +- +- +- &Online Help +- +- +- +- Go to online documentation +- +- +- +- Open User Guide +- +- +- +- Save Database Backup... +- +- +- +- Add key to SSH Agent +- +- +- +- Remove key from SSH Agent +- +- +- +- Compact Mode +- +- +- +- Automatic +- +- +- +- Light +- +- +- +- Dark +- +- +- +- Classic (Platform-native) +- +- +- +- Show Toolbar +- +- +- +- Show Preview Panel +- +- +- +- Don't show again for this version +- +- +- +- Restart Application? +- +- +- +- You must restart the application to apply this setting. Would you like to restart now? +- +- +- +- Perform Auto-Type Sequence +- +- +- +- {USERNAME} +- +- +- +- {USERNAME}{ENTER} +- +- +- +- {PASSWORD} +- +- +- +- {PASSWORD}{ENTER} +- +- +- +- Always on Top +- +- +- +- Hide Usernames +- Ascundere nume de utilizator +- +- +- Hide Passwords +- Ascundere parole +- +- +- +- ManageDatabase +- +- Database settings +- Setări bază de date +- +- +- Edit database settings +- EditaÈ›i setările bazei de date +- +- +- Unlock database +- Deblocare bază de date +- +- +- Unlock database to show more information +- DeblocaÈ›i baza de date pentru a afiÈ™a mai multe informaÈ›ii +- +- +- Lock database +- Blocare bază de date +- +- +- +- ManageSession +- +- Disconnect +- Deconecta +- +- +- Disconnect this application +- +- +- +- +- Merger +- +- Creating missing %1 [%2] +- Creare lipsă %1 [%2] +- +- +- Relocating %1 [%2] +- Relocalizarea %1 [%2] +- +- +- Overwriting %1 [%2] +- Suprascrierea %1 [%2] +- +- +- older entry merged from database "%1" +- intrare mai veche îmbinată din baza de date "%1" +- +- +- Adding backup for older target %1 [%2] +- Adăugarea copiei de rezervă pentru È›inta mai veche %1 [%2] +- +- +- Adding backup for older source %1 [%2] +- Adăugarea copiei de rezervă pentru sursa mai veche %1 [%2] +- +- +- Reapplying older target entry on top of newer source %1 [%2] +- Reaplicarea intrării È›intă mai vechi în partea de sus a sursei mai noi %1 [%2] +- +- +- Reapplying older source entry on top of newer target %1 [%2] +- Reaplicarea intrării sursei mai vechi în partea de sus a È›intei mai noi %1 [%2] +- +- +- Synchronizing from newer source %1 [%2] +- Sincronizarea din sursa mai nouă %1 [%2] +- +- +- Synchronizing from older source %1 [%2] +- Sincronizarea din sursa mai veche %1 [%2] +- +- +- Deleting child %1 [%2] +- Ștergerea copilului %1 [%2] +- +- +- Deleting orphan %1 [%2] +- Ștergerea intrarii orfane %1 [%2] +- +- +- Changed deleted objects +- Obiecte È™terse modificate +- +- +- Adding missing icon %1 +- Adăugarea pictogramei lipsă %1 +- +- +- Removed custom data %1 [%2] +- Șters date personalizate %1 [%2] +- +- +- Adding custom data %1 [%2] +- Adăugarea de date personalizate %1 [%2] +- +- +- +- NewDatabaseWizard +- +- Create a new KeePassXC database... +- CreaÈ›i o nouă bază de date KeePassXC... +- +- +- Root +- Root group +- Rădăcină +- +- +- +- NewDatabaseWizardPage +- +- WizardPage +- Pagină de start +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Aici aveÈ›i posibilitatea să ajustaÈ›i setările de criptare a bazei de date. Nu vă faceÈ›i griji, le puteÈ›i modifica mai târziu în setările bazei de date. +- +- +- Advanced Settings +- Setări avansate +- +- +- Simple Settings +- Setări simple +- +- +- Encryption Settings +- Setări criptare +- +- +- +- NewDatabaseWizardPageDatabaseKey +- +- Database Credentials +- +- +- +- A set of credentials known only to you that protects your database. +- +- +- +- +- NewDatabaseWizardPageEncryption +- +- Encryption Settings +- Setări criptare +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Aici aveÈ›i posibilitatea să ajustaÈ›i setările de criptare a bazei de date. Nu vă faceÈ›i griji, le puteÈ›i modifica mai târziu în setările bazei de date. +- +- +- +- NewDatabaseWizardPageMetaData +- +- General Database Information +- InformaÈ›ii generale despre baza de date +- +- +- Please fill in the display name and an optional description for your new database: +- Vă rugăm să completaÈ›i numele afiÈ™at È™i o descriere opÈ›ională pentru noua bază de date: +- +- +- +- NixUtils +- +- Password Manager +- +- +- +- +- OpData01 +- +- Invalid OpData01, does not contain header +- OpData01 nevalid, nu conÈ›ine antet +- +- +- Unable to read all IV bytes, wanted 16 but got %1 +- Nu a putut citi toate octeÈ›ii IV, a dorit 16, dar a primit %1 +- +- +- Unable to init cipher for opdata01: %1 +- Imposibil de iniÈ›iat cifrarea pentru opdata01: %1 +- +- +- Unable to read all HMAC signature bytes +- Imposibil de citit toÈ›i octeÈ›ii de semnătură HMAC +- +- +- Malformed OpData01 due to a failed HMAC +- OpData01 defectuos din cauza unei HMAC eÈ™uate +- +- +- Unable to process clearText in place +- Imposibil de procesat clearText în loc +- +- +- Expected %1 bytes of clear-text, found %2 +- Se aÈ™teaptă %1 octeÈ›i de text clar, %2 găsit +- +- +- +- OpVaultOpenWidget +- +- Read Database did not produce an instance +-%1 +- Citirea bazei de date nu a produs o instanță +-%1 +- +- +- +- OpVaultReader +- +- Directory .opvault must exist +- Directory .opvault trebuie să existe +- +- +- Directory .opvault must be readable +- Directory .opvault trebuie să fie lizibil +- +- +- Directory .opvault/default must exist +- Directory .opvault / default trebuie să existe +- +- +- Directory .opvault/default must be readable +- Directorul .opvault / default trebuie să fie lizibil +- +- +- Unable to decode masterKey: %1 +- Imposibil de decodat masterKey: %1 +- +- +- Unable to derive master key: %1 +- Nu se poate derula cheia principală: %1 +- +- +- +- OpenSSHKey +- +- Invalid key file, expecting an OpenSSH key +- FiÈ™ier cheie nevalid, aÈ™teptând o cheie OpenSSH +- +- +- PEM boundary mismatch +- Nepotrivire de graniță PEM +- +- +- Base64 decoding failed +- Decodificare base64 nu a reuÈ™it +- +- +- Key file way too small. +- Cheie dosar e prea mica. +- +- +- Key file magic header id invalid +- Cheie dosar Magic antet ID nevalid +- +- +- Found zero keys +- Găsit zero chei +- +- +- Failed to read public key. +- Citirea cheii publice a eÈ™uat. +- +- +- Corrupted key file, reading private key failed +- FiÈ™ier cheie deteriorat, citirea cheii private nu a reuÈ™it +- +- +- No private key payload to decrypt +- Nici o sarcină cheie privată pentru a decripta +- +- +- Trying to run KDF without cipher +- ÃŽncercarea de a rula KDF fără cifrul +- +- +- Passphrase is required to decrypt this key +- Passphrase este necesar pentru a decripta această tastă +- +- +- Key derivation failed, key file corrupted? +- Derivare cheie nu a reuÈ™it, fiÈ™ierul cheie corupt? +- +- +- Decryption failed, wrong passphrase? +- Decriptarea nu a reuÈ™it, fraza de acces greÈ™ită? +- +- +- Unexpected EOF while reading public key +- EOF neaÈ™teptate în timpul citirii cheii publice +- +- +- Unexpected EOF while reading private key +- EOF neaÈ™teptate în timp ce citiÈ›i cheia privată +- +- +- Can't write public key as it is empty +- Nu se poate scrie cheie publică, deoarece este goală +- +- +- Unexpected EOF when writing public key +- EOF neaÈ™teptate atunci când scrierea cheie publică +- +- +- Can't write private key as it is empty +- Nu se poate scrie cheie privată, deoarece este goală +- +- +- Unexpected EOF when writing private key +- EOF neaÈ™teptate atunci când scrierea cheie privată +- +- +- Unsupported key type: %1 +- Tip de cheie neacceptat: %1 +- +- +- Unknown cipher: %1 +- Cifru necunoscut: %1 +- +- +- Cipher IV is too short for MD5 kdf +- Cifrul IV este prea scurt pentru MD5 KDF +- +- +- Unknown KDF: %1 +- KDF necunoscut: %1 +- +- +- Unknown key type: %1 +- Tip de cheie necunoscut: %1 +- +- +- +- PasswordEdit +- +- Passwords do not match +- parolele nu se potrivesc +- +- +- Passwords match so far +- Parolele se potrivesc până acum +- +- +- Toggle Password (%1) +- +- +- +- Generate Password (%1) +- +- +- +- Warning: Caps Lock enabled! +- +- +- +- +- PasswordEditWidget +- +- Enter password: +- Introdu parola: +- +- +- Confirm password: +- ConfirmaÈ›i parola: +- +- +- Password +- Parola +- +- +- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> +- <p>O parolă este metoda primară pentru securizarea bazei de date.</p><p>Parolele bune sunt lungi È™i unice. KeePassXC poate genera unul pentru tine.</p> +- +- +- Passwords do not match. +- Parolele nu se potrivesc. +- +- +- Password field +- Câmp parola +- +- +- Repeat password field +- RepetaÈ›i câmpul de parolă +- +- +- +- PasswordGeneratorWidget +- +- %p% +- %p% +- +- +- strength +- Password strength +- putere +- +- +- entropy +- entropie +- +- +- Password +- Parolă +- +- +- Character Types +- Tipuri de caractere +- +- +- Numbers +- Numere +- +- +- Extended ASCII +- Extins ASCII +- +- +- Exclude look-alike characters +- Exclude caractere asemănătoare +- +- +- Pick characters from every group +- AlegeÈ›i caractere din fiecare grup +- +- +- &Length: +- &Lungime: +- +- +- Passphrase +- Frază parola +- +- +- Wordlist: +- lista cuvintelor +- +- +- Word Separator: +- Separator cuvinte: +- +- +- Close +- ÃŽnchide +- +- +- Entropy: %1 bit +- Entropie: %1 bit +- +- +- Password Quality: %1 +- Calitate parolă: %1 +- +- +- Poor +- Password quality +- Inacceptabil +- +- +- Weak +- Password quality +- Slab +- +- +- Good +- Password quality +- Bun +- +- +- Excellent +- Password quality +- Excelent +- +- +- Switch to advanced mode +- Comutarea la modul avansat +- +- +- Advanced +- Avansat +- +- +- Braces +- Bretele +- +- +- Punctuation +- PunctuaÅ£ie +- +- +- Quotes +- Citate +- +- +- Logograms +- Logograme +- +- +- Character set to exclude from generated password +- Set de caractere pentru a exclude din parola generată +- +- +- Do not include: +- Nu includeÈ›i: +- +- +- Add non-hex letters to "do not include" list +- AdăugaÈ›i litere non-hex la "nu includ" lista +- +- +- Hex +- Hex +- +- +- Excluded characters: "0", "1", "l", "I", "O", "|", "ï¹’" +- Caractere excluse: "0", "1", "l", "I", "O", "|", "." +- +- +- Generated password +- Parol generat +- +- +- Upper-case letters +- Litere mari +- +- +- Lower-case letters +- Litere mici +- +- +- Special characters +- Personaje speciale +- +- +- Math Symbols +- Simboluri matematice +- +- +- Dashes and Slashes +- Dashes È™i Slashes +- +- +- Excluded characters +- Personaje excluse +- +- +- Hex Passwords +- Parole hex +- +- +- Password length +- Lungimea parolei +- +- +- Word Case: +- Registrul cuvântelor +- +- +- Regenerate password +- RegeneraÈ›i parola +- +- +- Copy password +- Copiază parola +- +- +- lower case +- minuscule +- +- +- UPPER CASE +- MAJUSCULE +- +- +- Title Case +- registrul antetului +- +- +- Generate Password +- +- +- +- Also choose from: +- +- +- +- Additional characters to use for the generated password +- +- +- +- Additional characters +- +- +- +- Word Count: +- Număr cuvinte: +- +- +- Esc +- +- +- +- Apply Password +- +- +- +- Ctrl+S +- +- +- +- Regenerate password (%1) +- +- +- +- Special Characters +- Caractere speciale +- +- +- +- QApplication +- +- KeeShare +- De la KeeShare +- +- +- Statistics +- Statistici +- +- +- Very weak password +- +- +- +- Password entropy is %1 bits +- +- +- +- Weak password +- +- +- +- Used in %1/%2 +- +- +- +- Password is used %1 times +- +- +- +- Password has expired +- +- +- +- Password expiry was %1 +- +- +- +- Password is about to expire +- +- +- +- Password expires in %1 days +- +- +- +- Password will expire soon +- +- +- +- Password expires on %1 +- +- +- +- Health Check +- +- +- +- HIBP +- +- +- +- +- QMessageBox +- +- Overwrite +- Suprascrie +- +- +- Delete +- Șterge +- +- +- Move +- Muta +- +- +- Empty +- Gol +- +- +- Remove +- ÃŽnlătură +- +- +- Skip +- Sări peste +- +- +- Disable +- Dezactivează +- +- +- Merge +- ÃŽmbinare +- +- +- Continue +- Continua +- +- +- +- QObject +- +- Database not opened +- Bază de date nedeschisă +- +- +- Database hash not available +- Hash bază de date nu este disponibilă +- +- +- Client public key not received +- Cheie publică client neprimită +- +- +- Cannot decrypt message +- Nu se poate decripta mesajul +- +- +- Action cancelled or denied +- AcÈ›iune anulată sau refuzată +- +- +- KeePassXC association failed, try again +- AsociaÈ›ia KeePassXC nu a reuÈ™it, încercaÈ›i din nou +- +- +- Encryption key is not recognized +- Cheia de criptare nu este recunoscută +- +- +- Incorrect action +- AcÈ›iune incorectă +- +- +- Empty message received +- Mesaj gol primit +- +- +- No URL provided +- Niciun URL furnizat +- +- +- No logins found +- Nu s-au găsit conectări +- +- +- Unknown error +- Eroare necunoscută +- +- +- Add a new entry to a database. +- Adaugă o intrare nouă în baza de date. +- +- +- Path of the database. +- Calea către baza de date +- +- +- Key file of the database. +- FiÈ™ier cheie al bazei de date. +- +- +- path +- cale +- +- +- Username for the entry. +- Nume de utilizator pentru intrare. +- +- +- username +- nume utilizator +- +- +- URL for the entry. +- URL pentru intrare. +- +- +- URL +- URL +- +- +- Prompt for the entry's password. +- Se solicită parola intrării. +- +- +- Generate a password for the entry. +- Generează o parolă pentru intrare. +- +- +- length +- lungime +- +- +- Path of the entry to add. +- Calea intrării de adăugat. +- +- +- Path of the entry to clip. +- clip = copy to clipboard +- Calea intrării în clip. +- +- +- Timeout in seconds before clearing the clipboard. +- Expirare în secunde înainte de Golirea Clipboard. +- +- +- Edit an entry. +- EditaÈ›i o intrare. +- +- +- Title for the entry. +- Titlu pentru intrare. +- +- +- title +- titlu +- +- +- Path of the entry to edit. +- Calea intrării de editat. +- +- +- Estimate the entropy of a password. +- EstimaÈ›i entropia a unei parole. +- +- +- Password for which to estimate the entropy. +- Parola pentru care să estimezi entropia. +- +- +- Perform advanced analysis on the password. +- EfectuaÈ›i o analiză avansată a parolei. +- +- +- +- +-Available commands: +- +- +- +-Comenzi disponibile: +- +- +- +- Name of the command to execute. +- Numele comenzii de executat. +- +- +- List database entries. +- Listare intrări din bază de date. +- +- +- Path of the group to list. Default is / +- Calea grupului la listă. Implicit este/ +- +- +- Find entries quickly. +- GăsiÈ›i rapid intrările. +- +- +- Search term. +- Termen de căutare. +- +- +- Merge two databases. +- ÃŽmbina doua baze de date +- +- +- Path of the database to merge from. +- Calea bazei de date din care să fuzioneze. +- +- +- Use the same credentials for both database files. +- UtilizaÈ›i aceleaÈ™i acreditări pentru ambele fiÈ™iere de baze de date. +- +- +- Key file of the database to merge from. +- FiÈ™ier cheie al bazei de date pentru a fuziona din. +- +- +- Show an entry's information. +- AfiÈ™aÈ›i informaÈ›iile unei intrări. +- +- +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- Numele atributelor de arătat. Această opÈ›iune poate fi specificată de mai multe ori, fiecare atribut fiind afiÈ™at într-o singură linie în ordinea dată. Dacă nu sunt specificate atribute, se acordă un rezumat al atributelor implicite. +- +- +- attribute +- atribut +- +- +- Name of the entry to show. +- Numele intrării de arătat. +- +- +- NULL device +- Dispozitiv NULL +- +- +- error reading from device +- citirea erorilor de pe dispozitiv +- +- +- malformed string +- È™ir incorect +- +- +- missing closing quote +- lipsă citat de închidere +- +- +- Group +- Grup +- +- +- Title +- Titlu +- +- +- Username +- Nume utilizator +- +- +- Password +- Parolă +- +- +- Notes +- NotiÈ›e +- +- +- Last Modified +- Ultima modificare +- +- +- Created +- Creat +- +- +- Browser Integration +- Integrare cu browserul +- +- +- SSH Agent +- Agent SSH +- +- +- Generate a new random diceware passphrase. +- Generează o nouă frază de acces diceware aleatoare. +- +- +- Word count for the diceware passphrase. +- Word conta pentru fraza de acces diceware. +- +- +- Wordlist for the diceware generator. +-[Default: EFF English] +- Lista de cuvinte pentru generatorul de diceware. +-[Default: EFF engleză] +- +- +- Generate a new random password. +- Generează o nouă parolă aleatorie. +- +- +- Could not create entry with path %1. +- Imposibil de creat intrarea cu calea %1. +- +- +- Enter password for new entry: +- IntroduceÈ›i parola pentru intrare nouă: +- +- +- Writing the database failed %1. +- Scrierea bazei de date nu a reuÈ™it% 1. +- +- +- Successfully added entry %1. +- Intrare adăugată cu succes %1. +- +- +- Invalid timeout value %1. +- Valoare de expirare nevalidă %1. +- +- +- Entry %1 not found. +- Intrarea% 1 nu a fost găsită. +- +- +- Entry with path %1 has no TOTP set up. +- Intrarea cu calea %1 nu are TOTP configurat. +- +- +- Clearing the clipboard in %1 second(s)... +- Golirea Clipboard-ului în% 1 second (s)...Golirea Clipboard-ului în% 1 second (s)...Golirea Clipboard-ului în %1 secund(e)... +- +- +- Clipboard cleared! +- Clipboard sters! +- +- +- Silence password prompt and other secondary outputs. +- Tăcere parola prompt È™i alte ieÈ™iri secundare. +- +- +- count +- CLI parameter +- număr +- +- +- Could not find entry with path %1. +- Imposibil de găsit intrarea cu calea %1. +- +- +- Not changing any field for entry %1. +- Nu se modifică niciun câmp pentru intrarea %1. +- +- +- Enter new password for entry: +- IntroduceÈ›i parola nouă pentru intrare: +- +- +- Writing the database failed: %1 +- Scrierea bazei de date nu a reuÈ™it: %1 +- +- +- Successfully edited entry %1. +- Intrare editată cu succes %1. +- +- +- Length %1 +- Lungime %1 +- +- +- Entropy %1 +- Entropie %1 +- +- +- Log10 %1 +- Log10 %1 +- +- +- Multi-word extra bits %1 +- Multi-cuvânt extra Bits %1 +- +- +- Type: Bruteforce +- Tipul: Bruteforce +- +- +- Type: Dictionary +- Tip: dicÈ›ionar +- +- +- Type: Dict+Leet +- Tip: dict + Leet +- +- +- Type: User Words +- Tip: cuvinte utilizator +- +- +- Type: User+Leet +- Tip: utilizator + Leet +- +- +- Type: Repeated +- Tip: repetat +- +- +- Type: Sequence +- Tip: secvență +- +- +- Type: Spatial +- Tip: spatial +- +- +- Type: Date +- Tip: data +- +- +- Type: Bruteforce(Rep) +- Tipul: Bruteforce (Rep) +- +- +- Type: Dictionary(Rep) +- Tip: DicÈ›ionar (Rep) +- +- +- Type: Dict+Leet(Rep) +- Tip: dict + Leet (Rep) +- +- +- Type: User Words(Rep) +- Tip: cuvinte utilizator (Rep) +- +- +- Type: User+Leet(Rep) +- Tip: utilizator + Leet (Rep) +- +- +- Type: Repeated(Rep) +- Tip: repetat (Rep) +- +- +- Type: Sequence(Rep) +- Tip: secvență (Rep) +- +- +- Type: Spatial(Rep) +- Tip: spatial (Rep) +- +- +- Type: Date(Rep) +- Tip: data (Rep) +- +- +- Type: Unknown%1 +- Tip: necunoscut %1 +- +- +- Entropy %1 (%2) +- Entropie %1 (%2) +- +- +- *** Password length (%1) != sum of length of parts (%2) *** +- *** Lungime parolă (%1) != suma de lungime a pieselor (%2) * * * +- +- +- Failed to load key file %1: %2 +- ÃŽncărcarea fiÈ™ierului cheie %1: %2 nu a reuÈ™it +- +- +- Length of the generated password +- Lungimea parolei generate +- +- +- Use lowercase characters +- FoloseÈ™te minuscule +- +- +- Use uppercase characters +- FoloseÈ™te majuscule +- +- +- Use special characters +- FoloseÈ™te caractere speciale +- +- +- Use extended ASCII +- Utilizarea ASCII extinsă +- +- +- Exclude character set +- Excludere set de caractere +- +- +- chars +- caractere +- +- +- Exclude similar looking characters +- Exclude caractere similare în căutarea +- +- +- Include characters from every selected group +- Includere caractere din fiecare grup selectat +- +- +- Recursively list the elements of the group. +- Recursiv lista elementele grupului. +- +- +- Cannot find group %1. +- Imposibil de găsit grupul %1. +- +- +- Error reading merge file: +-%1 +- Eroare la citirea fiÈ™ierului de îmbinare: +-%1 +- +- +- Unable to save database to file : %1 +- Imposibil de salvat baza de date în fiÈ™ier: %1 +- +- +- Unable to save database to file: %1 +- Imposibil de salvat baza de date în fiÈ™ier: %1 +- +- +- Successfully recycled entry %1. +- Intrare reciclată cu succes %1. +- +- +- Successfully deleted entry %1. +- Intrare È™tearsă cu succes %1. +- +- +- Show the entry's current TOTP. +- AfiÈ™aÈ›i TOTP-ul curent al intrării. +- +- +- ERROR: unknown attribute %1. +- EROARE: atribut necunoscut %1. +- +- +- No program defined for clipboard manipulation +- Nici un program definit pentru manipularea Clipboard +- +- +- file empty +- fiÈ™ier gol +- +- +- %1: (row, col) %2,%3 +- % 1: (rând, col) %2,%3 +- +- +- AES-KDF (KDBX 4) +- AES-KDF (KDBX 4) +- +- +- AES-KDF (KDBX 3.1) +- AES-KDF (KDBX 3.1) +- +- +- Invalid Settings +- TOTP +- Setări invalide +- +- +- Invalid Key +- TOTP +- Cheie invalidă +- +- +- Message encryption failed. +- Criptarea mesajelor nu a reuÈ™it. +- +- +- No groups found +- Nu s-au găsit grupuri +- +- +- Create a new database. +- Creează o bază de date nouă. +- +- +- File %1 already exists. +- FiÈ™ierul %1 există deja. +- +- +- Loading the key file failed +- ÃŽncărcarea fiÈ™ierului cheie nu a reuÈ™it +- +- +- No key is set. Aborting database creation. +- Nu este setată nicio cheie. Abandonarea creării bazei de date. +- +- +- Failed to save the database: %1. +- Salvarea bazei de date nu a reuÈ™it: %1. +- +- +- Successfully created new database. +- Noua bază de date a fost creată cu succes. +- +- +- Creating KeyFile %1 failed: %2 +- Crearea KeyFile %1 nu a reuÈ™it: %2 +- +- +- Loading KeyFile %1 failed: %2 +- ÃŽncărcarea KeyFile %1 nu a reuÈ™it: %2 +- +- +- Path of the entry to remove. +- Calea intrării de eliminat. +- +- +- Existing single-instance lock file is invalid. Launching new instance. +- FiÈ™ierul de blocare cu o singură instanță existentă nu este valid. Lansează o nouă instanță. +- +- +- The lock file could not be created. Single-instance mode disabled. +- Imposibil de creat fiÈ™ierul de blocare. Modul single-instanță dezactivat. +- +- +- KeePassXC - cross-platform password manager +- KeePassXC - manager de parole multi-platformă +- +- +- filenames of the password databases to open (*.kdbx) +- nume de fiÈ™iere de baze de date parola pentru a deschide (*.kdbx) +- +- +- path to a custom config file +- calea către un fiÈ™ier de configurare particularizat +- +- +- key file of the database +- fiÈ™ier cheie al bazei de date +- +- +- read password of the database from stdin +- citi parola bazei de date de la stdin +- +- +- Another instance of KeePassXC is already running. +- O altă instanță a KeePassXC este deja în execuÈ›ie. +- +- +- Fatal error while testing the cryptographic functions. +- Eroare fatală în timpul testării funcÈ›iilor criptografice. +- +- +- KeePassXC - Error +- KeePassXC - Eroare +- +- +- Database password: +- Parolă bază de date: +- +- +- Cannot create new group +- Imposibil de creat un grup nou +- +- +- Deactivate password key for the database. +- DezactivaÈ›i cheia parolă pentru baza de date. +- +- +- Displays debugging information. +- AfiÈ™ează informaÈ›ii de depanare. +- +- +- Deactivate password key for the database to merge from. +- DezactivaÈ›i cheia parolă pentru care se bazează baza de date. +- +- +- Version %1 +- Versiunea %1 +- +- +- Build Type: %1 +- Tip de construcÈ›ie: %1 +- +- +- Revision: %1 +- Revizie: %1 +- +- +- Distribution: %1 +- DistribuÈ›ie: %1 +- +- +- Debugging mode is disabled. +- Modul de depanare este dezactivat. +- +- +- Debugging mode is enabled. +- Modul de depanare este activat. +- +- +- Operating system: %1 +-CPU architecture: %2 +-Kernel: %3 %4 +- Sistem de operare: %1 +-Arhitectura procesor (CPU): %2 +-Nucleu (Kernel): %3 %4 +- +- +- Auto-Type +- Auto tiparire +- +- +- KeeShare (signed and unsigned sharing) +- KeeShare (partajare semnată È™i nesemnată) +- +- +- KeeShare (only signed sharing) +- KeeShare (doar partajare semnată) +- +- +- KeeShare (only unsigned sharing) +- KeeShare (doar partajare nesemnată) +- +- +- YubiKey +- YubiKey +- +- +- TouchID +- TouchID +- +- +- None +- Nici unul +- +- +- Enabled extensions: +- Extensii activate: +- +- +- Cryptographic libraries: +- Biblioteci criptografice: +- +- +- Cannot generate a password and prompt at the same time! +- Nu se poate genera o parolă È™i o solicitare în acelaÈ™i timp! +- +- +- Adds a new group to a database. +- Adaugă un grup nou la o bază de date. +- +- +- Path of the group to add. +- Calea grupului de adăugat. +- +- +- Group %1 already exists! +- Grupul %1 există deja! +- +- +- Group %1 not found. +- Grupul %1 nu a fost găsit. +- +- +- Successfully added group %1. +- A adăugat cu succes grupul %1. +- +- +- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. +- VerificaÈ›i dacă au fost scurse parole în mod public. FILENAME trebuie să fie calea unui fiÈ™ier care să enumeze hash-urile SHA-1 ale parolelor scurse în format HIBP, aÈ™a cum este disponibil pe https://haveibeenpwned.com/Passwords. +- +- +- FILENAME +- NUME DE FIȘIER +- +- +- Analyze passwords for weaknesses and problems. +- AnalizaÈ›i parolele pentru deficienÈ›e È™i probleme. +- +- +- Failed to open HIBP file %1: %2 +- Nu a putut fi deschis fiÈ™ierul HIBP %1: %2 +- +- +- Evaluating database entries against HIBP file, this will take a while... +- Evaluarea intrărilor din baza de date cu fiÈ™ierul HIBP, va dura puÈ›in ... +- +- +- Close the currently opened database. +- ÃŽnchideÈ›i baza de date deschisă în prezent. +- +- +- Display this help. +- AfiÈ™aÈ›i acest ajutor. +- +- +- slot +- slot +- +- +- Invalid word count %1 +- Număr de cuvinte nevalide %1 +- +- +- The word list is too small (< 1000 items) +- Lista de cuvinte este prea mică (<1000 de articole) +- +- +- Exit interactive mode. +- IeÈ™iÈ›i din modul interactiv. +- +- +- Exports the content of a database to standard output in the specified format. +- Exportă conÈ›inutul unei baze de date până la ieÈ™irea standard în formatul specificat. +- +- +- Unable to export database to XML: %1 +- Imposibil de exportat baza de date în XML: %1 +- +- +- Unsupported format %1 +- Formatul neacceptat %1 +- +- +- Use numbers +- FolosiÈ›i numere +- +- +- Invalid password length %1 +- Lungime parolă nevalidă %1 +- +- +- Display command help. +- AfiÈ™aÈ›i ajutorul comenzii. +- +- +- Available commands: +- Comenzi disponibile: +- +- +- Import the contents of an XML database. +- ImportaÈ›i conÈ›inutul unei baze de date XML. +- +- +- Path of the XML database export. +- Calea de export a bazei de date XML. +- +- +- Path of the new database. +- Calea noii baze de date. +- +- +- Successfully imported database. +- Baza de date importată cu succes. +- +- +- Unknown command %1 +- Comanda necunoscută %1 +- +- +- Flattens the output to single lines. +- Aplica ieÈ™irea pe linii unice. +- +- +- Only print the changes detected by the merge operation. +- TipăriÈ›i numai modificările detectate de operaÈ›ia de îmbinare. +- +- +- Yubikey slot for the second database. +- Slot Yubikey pentru a doua bază de date. +- +- +- Successfully merged %1 into %2. +- Fuzionarea cu succes %1 în %2. +- +- +- Database was not modified by merge operation. +- Baza de date nu a fost modificată de operaÈ›iunea de îmbinare. +- +- +- Moves an entry to a new group. +- Mută ​​o intrare într-un grup nou. +- +- +- Path of the entry to move. +- Calea de intrare pentru a vă deplasa. +- +- +- Path of the destination group. +- Calea grupului de destinaÈ›ie. +- +- +- Could not find group with path %1. +- Nu s-a putut găsi grupul cu calea% 1. +- +- +- Entry is already in group %1. +- Intrarea este deja în grupul %1. +- +- +- Successfully moved entry %1 to group %2. +- MutaÈ›i cu succes intrarea %1 în grupul %2. +- +- +- Open a database. +- DeschideÈ›i o bază de date. +- +- +- Path of the group to remove. +- Calea grupului de eliminat. +- +- +- Cannot remove root group from database. +- Nu se poate elimina grupul rădăcină din baza de date. +- +- +- Successfully recycled group %1. +- Grup reciclat cu succes %1. +- +- +- Successfully deleted group %1. +- Grupul %1 a fost È™ters cu succes. +- +- +- Failed to open database file %1: not found +- Nu a putut fi deschis fiÈ™ierul bazei de date %1: nu a fost găsit +- +- +- Failed to open database file %1: not a plain file +- Nu a putut deschide fiÈ™ierul bazei de date %1: nu un fiÈ™ier simplu +- +- +- Failed to open database file %1: not readable +- Nu a putut deschide fiÈ™ierul bazei de date %1: nu poate fi citit +- +- +- Enter password to unlock %1: +- IntroduceÈ›i parola pentru a debloca %1: +- +- +- Invalid YubiKey slot %1 +- Slot YubiKey %1 nevalid +- +- +- Enter password to encrypt database (optional): +- IntroduceÈ›i parola pentru criptarea bazei de date (opÈ›ional): +- +- +- HIBP file, line %1: parse error +- FiÈ™ier HIBP, linia %1: eroare de analiză +- +- +- Secret Service Integration +- Integrarea serviciilor secrete +- +- +- User name +- Nume utilizator +- +- +- Password for '%1' has been leaked %2 time(s)! +- +- +- +- Invalid password generator after applying all options +- Generator de parole nevalide după aplicarea tuturor opÈ›iunilor +- +- +- Show the protected attributes in clear text. +- AfiÈ™ează atributele protejate într-un text clar. +- +- +- Browser Plugin Failure +- +- +- +- Could not save the native messaging script file for %1. +- +- +- +- Copy the given attribute to the clipboard. Defaults to "password" if not specified. +- +- +- +- Copy the current TOTP to the clipboard (equivalent to "-a totp"). +- +- +- +- Copy an entry's attribute to the clipboard. +- +- +- +- ERROR: Please specify one of --attribute or --totp, not both. +- +- +- +- ERROR: attribute %1 is ambiguous, it matches %2. +- +- +- +- Attribute "%1" not found. +- +- +- +- Entry's "%1" attribute copied to the clipboard! +- +- +- +- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). +- +- +- +- slot[:serial] +- +- +- +- Target decryption time in MS for the database. +- +- +- +- time +- timp +- +- +- Set the key file for the database. +- +- +- +- Set a password for the database. +- +- +- +- Invalid decryption time %1. +- +- +- +- Target decryption time must be between %1 and %2. +- +- +- +- Failed to set database password. +- +- +- +- Benchmarking key derivation function for %1ms delay. +- +- +- +- Setting %1 rounds for key derivation function. +- +- +- +- error while setting database key derivation settings. +- +- +- +- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. +- +- +- +- Unable to import XML database: %1 +- +- +- +- Show a database's information. +- +- +- +- UUID: +- UUID: +- +- +- Name: +- Nume: +- +- +- Description: +- Descriere: +- +- +- Cipher: +- Cifru: +- +- +- KDF: +- KDF: +- +- +- Recycle bin is enabled. +- +- +- +- Recycle bin is not enabled. +- +- +- +- Invalid command %1. +- +- +- +- Invalid YubiKey serial %1 +- +- +- +- Please touch the button on your YubiKey to continue… +- +- +- +- Do you want to create a database with an empty password? [y/N]: +- +- +- +- Repeat password: +- +- +- +- Error: Passwords do not match. +- +- +- +- All clipping programs failed. Tried %1 +- +- +- +- +- AES (%1 rounds) +- +- +- +- AES 256-bit +- AES 256-biÈ›i +- +- +- Twofish 256-bit +- Twofish 256-biÈ›i +- +- +- ChaCha20 256-bit +- +- +- +- Benchmark %1 delay +- +- +- +- %1 ms +- milliseconds +- +- +- +- %1 s +- seconds +- +- +- +- path to a custom local config file +- +- +- +- WARNING: You are using an old key file format which KeePassXC may +-stop supporting in the future. +- +-Please consider generating a new key file. +- +- +- +- Argon2%1 (%2 rounds, %3 KB) +- +- +- +- Argon2d (KDBX 4 – recommended) +- +- +- +- Argon2id (KDBX 4) +- +- +- +- TOTP +- TOTP +- +- +- Icon +- Icon +- +- +- Unsupported key file version: %1 +- +- +- +- Checksum mismatch! Key file may be corrupt. +- +- +- +- Unexpected key file data! Key file may be corrupt. +- +- +- +- +- QtIOCompressor +- +- Internal zlib error when compressing: +- Eroare internă zlib la comprimarea: +- +- +- Error writing to underlying device: +- Eroare la scrierea dispozitivului subiacent: +- +- +- Error opening underlying device: +- Eroare la deschiderea dispozitivului subiacent: +- +- +- Error reading data from underlying device: +- Eroare la citirea datelor de pe dispozitivul subiacent: +- +- +- Internal zlib error when decompressing: +- Eroare internă zlib la decomprimare: +- +- +- +- QtIOCompressor::open +- +- The gzip format not supported in this version of zlib. +- Formatul gzip nu este acceptat în această versiune de zlib. +- +- +- Internal zlib error: +- Eroare internă zlib: +- +- +- +- ReportsWidgetHealthcheck +- +- Also show entries that have been excluded from reports +- +- +- +- Hover over reason to show additional details. Double-click entries to edit. +- +- +- +- Bad +- Password quality +- +- +- +- Bad — password must be changed +- +- +- +- Poor +- Password quality +- Inacceptabil +- +- +- Poor — password should be changed +- +- +- +- Weak +- Password quality +- Slab +- +- +- Weak — consider changing the password +- +- +- +- (Excluded) +- +- +- +- This entry is being excluded from reports +- +- +- +- Please wait, health data is being calculated... +- +- +- +- Congratulations, everything is healthy! +- +- +- +- Title +- Titlu +- +- +- Path +- Cale +- +- +- Score +- Scor +- +- +- Reason +- Motiv +- +- +- Edit Entry... +- Editare intrare... +- +- +- Exclude from reports +- +- +- +- +- ReportsWidgetHibp +- +- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. +- +- +- +- Perform Online Analysis +- +- +- +- Also show entries that have been excluded from reports +- +- +- +- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. +- +- +- +- Congratulations, no exposed passwords! +- +- +- +- Title +- Titlu +- +- +- Path +- Cale +- +- +- Password exposed… +- +- +- +- (Excluded) +- +- +- +- This entry is being excluded from reports +- +- +- +- once +- o dată +- +- +- up to 10 times +- +- +- +- up to 100 times +- +- +- +- up to 1000 times +- +- +- +- up to 10,000 times +- +- +- +- up to 100,000 times +- +- +- +- up to a million times +- +- +- +- millions of times +- +- +- +- Edit Entry... +- Editare intrare... +- +- +- Exclude from reports +- +- +- +- +- ReportsWidgetStatistics +- +- Hover over lines with error icons for further information. +- TreceÈ›i peste linii cu pictograme de eroare pentru informaÈ›ii suplimentare. +- +- +- Name +- Nume +- +- +- Value +- Valoare +- +- +- Please wait, database statistics are being calculated... +- Vă rugăm să aÈ™teptaÈ›i, se calculează statisticile bazei de date ... +- +- +- Database name +- Numele bazei de date +- +- +- Description +- Descriere +- +- +- Location +- LocaÈ›ie +- +- +- Last saved +- Ultima salvare +- +- +- Unsaved changes +- Modificări salvate +- +- +- yes +- da +- +- +- no +- Nu +- +- +- The database was modified, but the changes have not yet been saved to disk. +- Baza de date a fost modificată, dar modificările nu au fost încă salvate pe disc. +- +- +- Number of groups +- Număr de grupuri +- +- +- Number of entries +- Numărul de intrări +- +- +- Number of expired entries +- Numărul de intrări expirate +- +- +- The database contains entries that have expired. +- Baza de date conÈ›ine intrări care au expirat. +- +- +- Unique passwords +- Parole unice +- +- +- Non-unique passwords +- Parole non-unice +- +- +- More than 10% of passwords are reused. Use unique passwords when possible. +- Mai mult de 10% din parolele sunt reutilizate. UtilizaÈ›i parole unice atunci când este posibil. +- +- +- Maximum password reuse +- Reutilizarea maximă a parolei +- +- +- Some passwords are used more than three times. Use unique passwords when possible. +- Unele parole sunt folosite de mai mult de trei ori. UtilizaÈ›i parole unice atunci când este posibil. +- +- +- Number of short passwords +- Număr de parole scurte +- +- +- Recommended minimum password length is at least 8 characters. +- Lungimea minimă recomandată a parolei este de cel puÈ›in 8 caractere. +- +- +- Number of weak passwords +- Număr de parole slabe +- +- +- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. +- Recomandă folosirea parolelor lungi, aleatorii, cu o notă de „bun†sau „excelentâ€. +- +- +- Entries excluded from reports +- +- +- +- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. +- +- +- +- Average password length +- Lungimea medie a parolei +- +- +- %1 characters +- %1 caractere +- +- +- Average password length is less than ten characters. Longer passwords provide more security. +- Lungimea medie a parolei este mai mică de zece caractere. Parolele mai lungi oferă mai multă securitate. +- +- +- +- SSHAgent +- +- Agent connection failed. +- Conexiunea agentului nu a reuÈ™it. +- +- +- Agent protocol error. +- Eroare de protocol agent. +- +- +- No agent running, cannot add identity. +- Nu se execută niciun agent, nu se poate adăuga identitate. +- +- +- No agent running, cannot remove identity. +- Nu se execută niciun agent, nu se poate elimina identitatea. +- +- +- Agent refused this identity. Possible reasons include: +- Agentul a refuzat această identitate. Motive posibile includ: +- +- +- The key has already been added. +- Cheia a fost deja adăugată. +- +- +- Restricted lifetime is not supported by the agent (check options). +- Durata de viață restricÈ›ionată nu este acceptată de agent (opÈ›iuni de verificare). +- +- +- A confirmation request is not supported by the agent (check options). +- O solicitare de confirmare nu este acceptată de agent (opÈ›iuni de selectare). +- +- +- Key identity ownership conflict. Refusing to add. +- +- +- +- No agent running, cannot list identities. +- +- +- +- +- SearchHelpWidget +- +- Search Help +- Căutare ajutor +- +- +- Search terms are as follows: [modifiers][field:]["]term["] +- Termenii de căutare sunt după urmează: [modifiers][field:]["]term["] +- +- +- Every search term must match (ie, logical AND) +- Fiecare termen de căutare trebuie să corespundă (de exemplu, logică È™i) +- +- +- Modifiers +- Modificatori +- +- +- exclude term from results +- exclude termenul de la rezultate +- +- +- match term exactly +- termenul de potrivire exact +- +- +- use regex in term +- utilizarea regex în termen +- +- +- Fields +- Câmpuri +- +- +- Term Wildcards +- Wildcards pe termen +- +- +- match anything +- se potrivesc cu orice +- +- +- match one +- se potriveste unul +- +- +- logical OR +- logică sau +- +- +- Examples +- Exemple +- +- +- +- SearchWidget +- +- Search +- Caută +- +- +- Limit search to selected group +- LimitaÈ›i căutarea la grupul selectat +- +- +- Search Help +- Căutare ajutor +- +- +- Search (%1)... +- Search placeholder text, %1 is the keyboard shortcut +- Căutare (%1)... +- +- +- Case sensitive +- Caz sensibil +- +- +- +- SettingsWidgetFdoSecrets +- +- Options +- OpÈ›iuni +- +- +- Enable KeepassXC Freedesktop.org Secret Service integration +- ActivaÈ›i integrarea KeepassXC Freedesktop.org Serviciu secret +- +- +- General +- General +- +- +- Show notification when credentials are requested +- AfiÈ™aÈ›i notificarea atunci când sunt solicitate acreditările +- +- +- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> +- <html><head/><body><p>ÃŽn cazul în care coÈ™ul de reciclare este activat pentru baza de date, intrările vor fi mutate direct la coÈ™ul de gunoi. ÃŽn caz contrar, acestea vor fi È™terse fără confirmare.</p><p> Vi se va solicita totuÈ™i dacă orice alte înregistrări sunt trimise de către alÈ›ii.</p></body></html> +- +- +- Exposed database groups: +- Grupuri de baze de date expuse: +- +- +- Authorization +- Autorizare +- +- +- These applications are currently connected: +- Aceste aplicaÈ›ii sunt conectate în prezent: +- +- +- Don't confirm when entries are deleted by clients +- +- +- +- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. +- +- +- +- <b>Warning:</b> +- +- +- +- Save current changes to activate the plugin and enable editing of this section. +- +- +- +- +- SettingsWidgetKeeShare +- +- Active +- Activ +- +- +- Allow export +- Se permite exportul +- +- +- Allow import +- Se permite importul +- +- +- Own certificate +- Certificat propriu +- +- +- Fingerprint: +- Amprentă: +- +- +- Certificate: +- Certificat: +- +- +- Signer +- Semnatar +- +- +- Key: +- Cheie: +- +- +- Generate +- Generează +- +- +- Import +- Import +- +- +- Export +- Export +- +- +- Imported certificates +- Certificate importate +- +- +- Trust +- ÃŽncredere +- +- +- Ask +- ÃŽntreabă +- +- +- Untrust +- Fără încredere +- +- +- Remove +- ÃŽnlătură +- +- +- Path +- Cale +- +- +- Status +- Stare +- +- +- Fingerprint +- Amprentă +- +- +- Certificate +- Certificat +- +- +- Trusted +- ÃŽncredere +- +- +- Untrusted +- Fara ÃŽncredere +- +- +- Unknown +- Necunoscut +- +- +- key.share +- Filetype for KeeShare key +- cheie.Share +- +- +- KeeShare key file +- KeeShare fisier-cheie +- +- +- All files +- Toate fiÈ™ierele +- +- +- Select path +- Selectare traseu +- +- +- Exporting changed certificate +- Exportul certificatului modificat +- +- +- The exported certificate is not the same as the one in use. Do you want to export the current certificate? +- Certificatul exportat nu este identic cu cel utilizat. ExportaÈ›i certificatul curent? +- +- +- Signer: +- Semnatar: +- +- +- Allow KeeShare imports +- Permite importurile KeeShare +- +- +- Allow KeeShare exports +- Permite exporturile KeeShare +- +- +- Only show warnings and errors +- AfiÈ™aÈ›i doar avertismente È™i erori +- +- +- Key +- Cheie +- +- +- Signer name field +- Câmpul nume semnatar +- +- +- Generate new certificate +- GeneraÈ›i un nou certificat +- +- +- Import existing certificate +- ImportaÈ›i certificatul existent +- +- +- Export own certificate +- Export certificat propriu +- +- +- Known shares +- AcÈ›iuni cunoscute +- +- +- Trust selected certificate +- Certificat selectat de încredere +- +- +- Ask whether to trust the selected certificate every time +- ÃŽntrebaÈ›i dacă aveÈ›i încredere în certificatul selectat de fiecare dată +- +- +- Untrust selected certificate +- Certificat selectat neîncredere +- +- +- Remove selected certificate +- ȘtergeÈ›i certificatul selectat +- +- +- +- ShareExport +- +- Overwriting signed share container is not supported - export prevented +- Suprascrierea container de partajare semnate nu este acceptată-exportul împiedicat +- +- +- Could not write export container (%1) +- Imposibil de scris containerul de export (%1) +- +- +- Could not embed signature: Could not open file to write (%1) +- Imposibil de încorporat semnătura: Imposibil de deschis fiÈ™ierul de scris (%1) +- +- +- Could not embed signature: Could not write file (%1) +- Imposibil de încorporat semnătura: Imposibil de scris fiÈ™ierul (%1) +- +- +- Could not embed database: Could not open file to write (%1) +- Imposibil de încorporat baza de date: Imposibil de deschis fiÈ™ierul pentru scris (%1) +- +- +- Could not embed database: Could not write file (%1) +- Imposibil de încorporat baza de date: Imposibil de scris fiÈ™ierul (%1) +- +- +- Overwriting unsigned share container is not supported - export prevented +- Suprascrierea containerului de partajare nesemnate nu este acceptată-exportul împiedicat +- +- +- Could not write export container +- Imposibil de scris container de export +- +- +- Unexpected export error occurred +- Eroare de export neaÈ™teptată +- +- +- +- ShareImport +- +- Import from container without signature +- Importul din container fără semnătură +- +- +- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? +- Nu putem verifica sursa containerului partajat, deoarece nu este semnat. Chiar doriÈ›i să importaÈ›i de la %1? +- +- +- Import from container with certificate +- Importul din container cu certificat +- +- +- Do you want to trust %1 with the fingerprint of %2 from %3? +- DoriÈ›i să aveÈ›i încredere în %1 cu amprenta de %2 de la %3? {1 ?} {2 ?} +- +- +- Not this time +- Nu È™i de data asta. +- +- +- Never +- Niciodată +- +- +- Always +- ÃŽntotdeauna +- +- +- Just this time +- Doar de data asta. +- +- +- Signed share container are not supported - import prevented +- Container de partajare semnat nu sunt acceptate-import prevenit +- +- +- File is not readable +- FiÈ™ierul nu este lizibil +- +- +- Invalid sharing container +- Container de partajare nevalid +- +- +- Untrusted import prevented +- Import de neîncredere împiedicat +- +- +- Successful signed import +- Import semnat cu succes +- +- +- Unsigned share container are not supported - import prevented +- Container de partajare nesemnate nu sunt acceptate-import prevenit +- +- +- Successful unsigned import +- Import nesemnate cu succes +- +- +- File does not exist +- FiÈ™ierul nu există +- +- +- Unknown share container type +- Tip de container de partajare necunoscut +- +- +- +- ShareObserver +- +- Import from %1 failed (%2) +- Importul din %1 nu a reuÈ™it (%2) +- +- +- Import from %1 successful (%2) +- Importul de la %1 cu succes (%2) +- +- +- Imported from %1 +- Importat din %1 +- +- +- Export to %1 failed (%2) +- Exportul în %1 nu a reuÈ™it (%2) +- +- +- Export to %1 successful (%2) +- Exportul către %1 cu succes (%2) +- +- +- Export to %1 +- Export în %1 +- +- +- Multiple import source path to %1 in %2 +- Mai multe căi de import sursă la %1 în %2 +- +- +- Conflicting export target path %1 in %2 +- Calea È›intă de export în conflict %1 în %2 +- +- +- +- TotpDialog +- +- Timed Password +- Parolă temporizată +- +- +- 000000 +- 000000 +- +- +- Copy +- Copiază +- +- +- Expires in <b>%n</b> second(s) +- Expiră în <b>% n</b> second (s)Expiră în <b>% n</b> second (s)Expiră în <b>%n</b> secunde +- +- +- +- TotpExportSettingsDialog +- +- Copy +- Copiază +- +- +- NOTE: These TOTP settings are custom and may not work with other authenticators. +- TOTP QR code dialog warning +- Notă: aceste setări TOTP sunt particularizate È™i pot să nu funcÈ›ioneze cu alÈ›i autentificatori. +- +- +- There was an error creating the QR code. +- Eroare la crearea codului QR. +- +- +- Closing in %1 seconds. +- Se închide în %1 secunde. +- +- +- +- TotpSetupDialog +- +- Setup TOTP +- ConfiguraÈ›i TOTP +- +- +- Default RFC 6238 token settings +- Setări implicite token RFC 6238 +- +- +- Steam token settings +- Setări token Steam +- +- +- Use custom settings +- UtilizaÈ›i setările personalizate +- +- +- Custom Settings +- Setări particularizate +- +- +- Time step: +- Pasul de timp: +- +- +- sec +- Seconds +- sec +- +- +- Code size: +- Dimensiune cod: +- +- +- Secret Key: +- Cheie secreta: +- +- +- Secret key must be in Base32 format +- Cheia secretă trebuie să fie în format Base32 +- +- +- Secret key field +- Câmpul cu cheie secretă +- +- +- Algorithm: +- Algoritm: +- +- +- Time step field +- Câmp pas cu timp +- +- +- digits +- cifre +- +- +- Invalid TOTP Secret +- Secret TOTP nevalid +- +- +- You have entered an invalid secret key. The key must be in Base32 format. +-Example: JBSWY3DPEHPK3PXP +- AÈ›i introdus o cheie secretă nevalidă. Cheia trebuie să fie în format Base32. +-Exemplu: JBSWY3DPEHPK3PXP +- +- +- Confirm Remove TOTP Settings +- ConfirmaÈ›i Eliminarea setărilor TOTP +- +- +- Are you sure you want to delete TOTP settings for this entry? +- Sigur doriÈ›i să È™tergeÈ›i setările TOTP pentru această intrare? +- +- +- +- URLEdit +- +- Invalid URL +- URL invalid +- +- +- +- UpdateCheckDialog +- +- Checking for updates +- Se caută actualizări +- +- +- Checking for updates... +- Se caută actualizări... +- +- +- Close +- ÃŽnchide +- +- +- Update Error! +- Eroare de actualizare! +- +- +- An error occurred in retrieving update information. +- S-a produs o eroare la recuperarea informaÈ›iilor de actualizare. +- +- +- Please try again later. +- Vă rugăm să încercaÈ›i din nou mai târziu. +- +- +- Software Update +- Actualizări software +- +- +- A new version of KeePassXC is available! +- O nouă versiune a KeePassXC este disponibila! +- +- +- KeePassXC %1 is now available — you have %2. +- KeePassXC %1 este acum disponibil — aveÈ›i %2. +- +- +- Download it at keepassxc.org +- DescărcaÈ›i-l la keepassxc.org +- +- +- You're up-to-date! +- EÈ™ti la zi! +- +- +- KeePassXC %1 is currently the newest version available +- KeePassXC %1 este în prezent cea mai nouă versiune disponibilă +- +- +- +- WelcomeWidget +- +- Start storing your passwords securely in a KeePassXC database +- ÃŽncepeÈ›i să stocaÈ›i parolele în siguranță într-o bază de date KeePassXC +- +- +- Create new database +- Creează o bază de date nouă +- +- +- Open existing database +- Deschide bază de date existentă +- +- +- Import from KeePass 1 +- Importă din KeePass 1 +- +- +- Import from CSV +- Importă din CSV +- +- +- Recent databases +- Baze de date recente +- +- +- Welcome to KeePassXC %1 +- Bun venit la KeePassXC %1 +- +- +- Import from 1Password +- Importă de la 1Password +- +- +- Open a recent database +- DeschideÈ›i o bază de date recentă +- +- +- +- YubiKey +- +- %1 [%2] Configured Slot - %3 +- +- +- +- %1 [%2] Challenge Response - Slot %3 - %4 +- +- +- +- Press +- Apasă +- +- +- Passive +- Pasiv +- +- +- %1 Invalid slot specified - %2 +- +- +- +- The YubiKey interface has not been initialized. +- +- +- +- Hardware key is currently in use. +- +- +- +- Could not find hardware key with serial number %1. Please plug it in to continue. +- +- +- +- Hardware key timed out waiting for user interaction. +- +- +- +- A USB error ocurred when accessing the hardware key: %1 +- +- +- +- Failed to complete a challenge-response, the specific error was: %1 +- +- +- +- +- YubiKeyEditWidget +- +- Refresh +- Actualizează +- +- +- YubiKey Challenge-Response +- YubiKey Challenge-răspuns +- +- +- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- <p>Dacă deÈ›ineÈ›i un <a href="https://www.yubico.com/">YubiKey</a>, îl puteÈ›i folosi pentru securitate suplimentară.</p><p>YubiKey necesită unul dintre sloturile sale să fie programat ca <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-răspuns</a>.</p> +- +- +- Refresh hardware tokens +- ActualizaÈ›i jetoane hardware +- +- +- Hardware key slot selection +- Selectarea sloturilor pentru cheie hardware +- +- +- Could not find any hardware keys! +- +- +- +- Selected hardware key slot does not support challenge-response! +- +- +- +- Detecting hardware keys… +- +- +- +- No hardware keys detected +- +- +- +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_ru.ts keepassxc-2.6.4-patched/share/translations/keepassx_ru.ts +--- keepassxc-2.6.4-orig/share/translations/keepassx_ru.ts 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/translations/keepassx_ru.ts 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7888 +0,0 @@ +- +- +- AboutDialog +- +- About KeePassXC +- О KeePassXC +- +- +- About +- О программе +- +- +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- Сообщить об <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">ошибках</a> по https://github.com +- +- +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- KeePassXC раÑпроÑтранÑетÑÑ Ð½Ð° уÑловиÑÑ… универÑальной общедоÑтупной лицензии GNU (GPL) верÑии 2 или 3 (на ваше уÑмотрение). +- +- +- Contributors +- Соавторы +- +- +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">ПоÑмотреть Ñоавторов на GitHub</a> +- +- +- Debug Info +- ÐžÑ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ +- +- +- Include the following information whenever you report a bug: +- Добавьте в Ñообщение об ошибке Ñледующую информацию: +- +- +- Copy to clipboard +- Скопировать в буфер обмена +- +- +- Project Maintainers: +- Проект Ñопровождают: +- +- +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- Команда KeePassXC выражает оÑобую благодарноÑÑ‚ÑŒ debfx за Ñоздание оригинального KeePassX. +- +- +- +- AgentSettingsWidget +- +- Use OpenSSH for Windows instead of Pageant +- ИÑпользовать OpenSSH Ð´Ð»Ñ Windows вмеÑто Pageant +- +- +- Enable SSH Agent integration +- Включить интеграцию SSH-агента +- +- +- SSH_AUTH_SOCK value +- значение SSH_AUTH_SOCK +- +- +- SSH_AUTH_SOCK override +- переопределить SSH_AUTH_SOCK +- +- +- (empty) +- (пуÑто) +- +- +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- ОтÑутÑтвуют Ñокеты агента SSH. УбедитеÑÑŒ, что Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ SSL_AUTH_SOCK определена или переопределите её значение. +- +- +- SSH Agent connection is working! +- Соединение Ñ Ð°Ð³ÐµÐ½Ñ‚Ð¾Ð¼ SSH активно. +- +- +- +- ApplicationSettingsWidget +- +- Application Settings +- Параметры Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ +- +- +- General +- Общие +- +- +- Security +- БезопаÑноÑÑ‚ÑŒ +- +- +- Access error for config file %1 +- Ошибка доÑтупа к файлу конфигурации %1 +- +- +- Icon only +- Только значок +- +- +- Text only +- Только текÑÑ‚ +- +- +- Text beside icon +- ТекÑÑ‚ Ñ€Ñдом Ñо значком +- +- +- Text under icon +- ТекÑÑ‚ под значком +- +- +- Follow style +- Следовать Ñтилю +- +- +- Reset Settings? +- СброÑить наÑтройки? +- +- +- Are you sure you want to reset all general and security settings to default? +- ДейÑтвительно ÑброÑить вÑе общие параметры и параметры безопаÑноÑти к значениÑм, заданным по умолчанию? +- +- +- Monochrome (light) +- Монохромный (Ñветлый) +- +- +- Monochrome (dark) +- Монохромный (тёмный) +- +- +- Colorful +- Цветной +- +- +- You must restart the application to set the new language. Would you like to restart now? +- Ð’Ñ‹ должны перезапуÑтить приложение, чтобы уÑтановить новый Ñзык. Хотите перезапуÑтить ÑейчаÑ? +- +- +- +- ApplicationSettingsWidgetGeneral +- +- Basic Settings +- ОÑновные параметры +- +- +- Startup +- ЗапуÑк +- +- +- Start only a single instance of KeePassXC +- ЗапуÑкать только один ÑкземплÑÑ€ KeePassXC +- +- +- Minimize window at application startup +- ЗапуÑкать приложение в Ñвёрнутом виде +- +- +- File Management +- Управление файлами +- +- +- Backup database file before saving +- Создавать резервную копию базы данных перед Ñохранением +- +- +- Automatically save after every change +- ÐвтоматичеÑки ÑохранÑÑ‚ÑŒ поÑле каждого Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ +- +- +- Automatically reload the database when modified externally +- ÐвтоматичеÑки перезагружать базу данных при её изменении извне +- +- +- Entry Management +- Управление запиÑÑми +- +- +- Use group icon on entry creation +- ИÑпользовать значок группы Ð´Ð»Ñ Ð½Ð¾Ð²Ñ‹Ñ… запиÑей +- +- +- Minimize instead of app exit +- Сворачивать вмеÑто Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ +- +- +- Show a system tray icon +- Значок в облаÑти уведомлений +- +- +- Hide window to system tray when minimized +- Сворачивать окно в облаÑÑ‚ÑŒ уведомлений +- +- +- Auto-Type +- Ðвтоввод +- +- +- Use entry title to match windows for global Auto-Type +- ИÑпользовать название запиÑи Ð´Ð»Ñ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ автоввода +- +- +- Use entry URL to match windows for global Auto-Type +- ИÑпользовать URL-Ð°Ð´Ñ€ÐµÑ Ð´Ð»Ñ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ автоввода +- +- +- Always ask before performing Auto-Type +- Ð’Ñегда Ñпрашивать перед автовводом +- +- +- ms +- Milliseconds +- Ð¼Ñ +- +- +- Movable toolbar +- ÐŸÐµÑ€ÐµÐ¼ÐµÑ‰Ð°ÐµÐ¼Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ инÑтрументов +- +- +- Remember previously used databases +- Запоминать ранее иÑпользованные базы данных +- +- +- Load previously open databases on startup +- Загружать прошлые базы данных при запуÑке +- +- +- Remember database key files and security dongles +- Запоминать Ð´Ð»Ñ Ð±Ð°Ð· данных файлы-ключи и аппаратные ключи безопаÑноÑти +- +- +- Check for updates at application startup once per week +- ПроверÑÑ‚ÑŒ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ запуÑке раз в неделю +- +- +- Include beta releases when checking for updates +- Включать в проверку обновлений бета-релизы +- +- +- Language: +- Язык: +- +- +- (restart program to activate) +- (перезапуÑтить программу Ð´Ð»Ñ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ð¸Ð¸) +- +- +- Minimize window after unlocking database +- Минимизировать окно поÑле Ñ€Ð°Ð·Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð±Ð°Ð·Ñ‹ данных +- +- +- Minimize when opening a URL +- Сворачивать при открытии URL +- +- +- Hide window when copying to clipboard +- Скрывать окно поÑле ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² буфер обмена: +- +- +- Minimize +- Сворачивать +- +- +- Drop to background +- Убирать на задний план +- +- +- Favicon download timeout: +- Тайм-аут загрузки значков: +- +- +- Website icon download timeout in seconds +- Тайм-аут Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð·Ð½Ð°Ñ‡ÐºÐ¾Ð² веб-Ñайтов, задаётÑÑ Ð² Ñекундах +- +- +- sec +- Seconds +- Ñ +- +- +- Toolbar button style +- Внешний вид кнопок на панели инÑтрументов +- +- +- Language selection +- Выбор Ñзыка +- +- +- Global auto-type shortcut +- ÐšÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ñˆ Ð´Ð»Ñ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ автоввода: +- +- +- Auto-type character typing delay milliseconds +- Задержка ввода Ñимволов, задаётÑÑ Ð² миллиÑекундах +- +- +- Auto-type start delay milliseconds +- Задержка начала автоввода, задаётÑÑ Ð² милиÑекундах +- +- +- Automatically launch KeePassXC at system startup +- ÐвтоматичеÑки запуÑк KeePassXC при запуÑке ÑиÑтемы +- +- +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- БезопаÑное Ñохранение файлов базы данных (возможна неÑовмеÑтимоÑÑ‚ÑŒ Ñ Dropbox и др.) +- +- +- User Interface +- Ð˜Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ +- +- +- Toolbar button style: +- Внешний вид кнопок панели инÑтрументов: +- +- +- Use monospaced font for notes +- ИÑпользовать Ð´Ð»Ñ Ð·Ð°Ð¼ÐµÑ‚Ð¾Ðº моноширинный шрифт +- +- +- Tray icon type: +- Тип значка в ÑиÑтемном лотке: +- +- +- Reset settings to default… +- СброÑить наÑтройки по умолчанию... +- +- +- Auto-Type typing delay: +- Задержка набора автоввода: +- +- +- Global Auto-Type shortcut: +- ÐšÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ñˆ Ð´Ð»Ñ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ автоввода: +- +- +- Auto-Type start delay: +- Задержка начала автоввода: +- +- +- Automatically save when locking database +- ÐвтоматичеÑкое Ñохранение при блокировке базы данных +- +- +- Automatically save non-data changes when locking database +- ÐвтоматичеÑкое Ñохранение изменений, не ÑвÑзанных Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸, при блокировке базы данных. +- +- +- Tray icon type +- Тип значка в ÑиÑтемном лотке +- +- +- +- ApplicationSettingsWidgetSecurity +- +- Timeouts +- Таймауты +- +- +- Clear clipboard after +- Очищать буфер обмена через +- +- +- sec +- Seconds +- Ñ +- +- +- Lock databases after inactivity of +- Блокировать базу данных при неактивноÑти в течение +- +- +- min +- мин +- +- +- Forget TouchID after inactivity of +- Забывать TouchID поÑле неактивноÑти +- +- +- Convenience +- УдобÑтво +- +- +- Lock databases when session is locked or lid is closed +- Блокировать базу данных при блокировке ÑеанÑа или закрытии крышки ноутбука +- +- +- Forget TouchID when session is locked or lid is closed +- Забывать TouchID при блокировке ÑеанÑа или закрытии крышки ноутбука +- +- +- Lock databases after minimizing the window +- Блокировать базы данных при Ñворачивании окна +- +- +- Re-lock previously locked database after performing Auto-Type +- Блокировать ранее заблокированную БД поÑле автоввода +- +- +- Hide passwords in the entry preview panel +- Скрывать пароли в панели предварительного проÑмотра запиÑи +- +- +- Hide entry notes by default +- По умолчанию Ñкрывать Ð¿Ñ€Ð¸Ð¼ÐµÑ‡Ð°Ð½Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñи +- +- +- Privacy +- КонфиденциальноÑÑ‚ÑŒ +- +- +- Use DuckDuckGo service to download website icons +- ИÑпользовать DuckDuckGo Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ значков +- +- +- Clipboard clear seconds +- ОчиÑтка буфера обмена в Ñекундах +- +- +- Touch ID inactivity reset +- Ð¡Ð±Ñ€Ð¾Ñ Touch ID при неактивноÑти +- +- +- Database lock timeout seconds +- Задержка Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð±Ð°Ð·Ñ‹ (Ñ): +- +- +- min +- Minutes +- мин +- +- +- Clear search query after +- Задержка очиÑтки поиÑкового запроÑа: +- +- +- Require password repeat when it is visible +- Требовать повтора паролÑ, когда он виден +- +- +- Hide passwords when editing them +- Скрыть пароли при их редактировании +- +- +- Use placeholder for empty password fields +- ИÑпользовать заполнитель Ð´Ð»Ñ Ð¿Ð¾Ð»ÐµÐ¹ Ñ Ð¿ÑƒÑтым паролем +- +- +- +- AutoType +- +- Couldn't find an entry that matches the window title: +- Ðевозможно найти запиÑÑŒ, ÑоответÑтвующую заголовку окна: +- +- +- Auto-Type - KeePassXC +- Ðвтоввод - KeePassXC +- +- +- Auto-Type +- Ðвтоввод +- +- +- The Syntax of your Auto-Type statement is incorrect! +- ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ Ð¸Ð½ÑÑ‚Ñ€ÑƒÐºÑ†Ð¸Ñ Ð°Ð²Ñ‚Ð¾Ð²Ð²Ð¾Ð´Ð°! +- +- +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- Слишком Ð±Ð¾Ð»ÑŒÑˆÐ°Ñ Ð·Ð°Ð´ÐµÑ€Ð¶ÐºÐ° в команде автоввода. ДейÑтвительно продолжить? +- +- +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- Команда автоввода Ñодержит очень медленные Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ñˆ. ДейÑтвительно продолжить? +- +- +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- Команда автоввода Ñодержит чаÑто повторÑющиеÑÑ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ñ‹. ДейÑтвительно продолжить? +- +- +- Permission Required +- ТребуетÑÑ Ð¿Ñ€ÐµÐ´Ð¾Ñтавление разрешений +- +- +- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. +- Приложению KeePassXC Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð°Ð²Ñ‚Ð¾Ð²Ð²Ð¾Ð´Ð° требуетÑÑ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ðµ разрешений на доÑтуп к Ñпециальным возможноÑÑ‚Ñм. ЕÑли такое разрешение уже предоÑтавлено, требуетÑÑ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ñ‹Ð¹ запуÑк KeePassXC. +- +- +- +- AutoTypeAssociationsModel +- +- Window +- Окно +- +- +- Sequence +- ПоÑледовательноÑÑ‚ÑŒ +- +- +- Default sequence +- Ð¡Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð°Ñ Ð¿Ð¾ÑледовательноÑÑ‚ÑŒ +- +- +- +- AutoTypeMatchModel +- +- Group +- Группа +- +- +- Title +- Ð˜Ð¼Ñ Ð·Ð°Ð¿Ð¸Ñи +- +- +- Username +- Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ +- +- +- Sequence +- ПоÑледовательноÑÑ‚ÑŒ +- +- +- +- AutoTypeMatchView +- +- Copy &username +- Скопировать лог&ин +- +- +- Copy &password +- Скопировать п&ароль +- +- +- +- AutoTypePlatformMac +- +- Permission Required +- ТребуетÑÑ Ð¿Ñ€ÐµÐ´Ð¾Ñтавление разрешений +- +- +- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. +- Приложению KeePassXC Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð°Ð²Ñ‚Ð¾Ð²Ð²Ð¾Ð´Ð° на уровне ÑиÑтемы требуетÑÑ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ðµ разрешений на доÑтуп к Ñпециальным возможноÑÑ‚Ñм и запиÑи Ñкрана. ЗапиÑÑŒ Ñкрана необходима Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ¾Ð² окон Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка полей ввода. ЕÑли такие Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ ÑƒÐ¶Ðµ предоÑтавлены, требуетÑÑ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ñ‹Ð¹ запуÑк KeePassXC. +- +- +- +- AutoTypeSelectDialog +- +- Auto-Type - KeePassXC +- Ðвтоввод - KeePassXC +- +- +- Select entry to Auto-Type: +- Выберите запиÑÑŒ Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð²Ð²Ð¾Ð´Ð°: +- +- +- Search... +- ПоиÑк… +- +- +- +- BrowserAccessControlDialog +- +- KeePassXC - Browser Access Request +- KeepassXC — Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð´Ð¾Ñтупа браузером +- +- +- %1 is requesting access to the following entries: +- %1 запрашивает доÑтуп к Ñледующим запиÑÑм: +- +- +- Remember access to checked entries +- Ð’Ñегда разрешать доÑтуп к отмеченным запиÑÑм +- +- +- Remember +- Запомнить +- +- +- Allow access to entries +- Ð’Ñегда разрешать доÑтуп к запиÑÑм +- +- +- Allow Selected +- Разрешить выбранные +- +- +- Deny All +- Запретить вÑе +- +- +- Disable for this site +- Отключить Ð´Ð»Ñ Ñтого Ñайта +- +- +- +- BrowserEntrySaveDialog +- +- KeePassXC-Browser Save Entry +- KeePassXC-Browser - Ñохранить запиÑÑŒ +- +- +- Ok +- OK +- +- +- Cancel +- Отмена +- +- +- You have multiple databases open. +-Please select the correct database for saving credentials. +- У Ð²Ð°Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¾ неÑколько баз данных. +-Выберите нужную базу Ð´Ð»Ñ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ ÑƒÑ‡Ñ‘Ñ‚Ð½Ñ‹Ñ… данных. +- +- +- +- BrowserService +- +- KeePassXC: New key association request +- KeePassXC: Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° аÑÑоциацию нового ключа +- +- +- Save and allow access +- Сохранить и разрешить доÑтуп +- +- +- KeePassXC: Overwrite existing key? +- KeePassXC: ПерезапиÑать ÑущеÑтвующий ключ? +- +- +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- Общий Ñекретный ключ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ "%1" уже ÑущеÑтвует. +-Ð’Ñ‹ дейÑтвительно хотите его перезапиÑать? +- +- +- KeePassXC: Update Entry +- KeePassXC: Обновить запиÑÑŒ +- +- +- Do you want to update the information in %1 - %2? +- Обновить информацию в %1 — %2? +- +- +- Abort +- Прервать +- +- +- Converting attributes to custom data… +- Преобразование атрибутов в пользовательÑких данных... +- +- +- KeePassXC: Converted KeePassHTTP attributes +- KeePassXC: Ðтрибуты KeePassHTTP преобразованы +- +- +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- УÑпешно преобразованы атрибуты из %1 запиÑи(ей). +-Перемещено ключей в пользовательÑкие данные: %2. +- +- +- Successfully moved %n keys to custom data. +- УÑпешно переехал %n ключи пользовательÑких данных.УÑпешно переехал %n ключи пользовательÑких данных.УÑпешно переехал %n ключи пользовательÑких данных.УÑпешно перемещено ключей в пользовательÑкие данные: %n. +- +- +- KeePassXC: No entry with KeePassHTTP attributes found! +- KeePassXC: Ðе найдено запиÑи Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð°Ð¼Ð¸ KeePassHTTP! +- +- +- The active database does not contain an entry with KeePassHTTP attributes. +- Ð’ активной базе данных нет запиÑи Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð°Ð¼Ð¸ KeePassHTTP. +- +- +- KeePassXC: Legacy browser integration settings detected +- KeePassXC: Обнаружена уÑÑ‚Ð°Ñ€ÐµÐ²ÑˆÐ°Ñ Ð¸Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ñ Ð±Ñ€Ð°ÑƒÐ·ÐµÑ€Ð¾Ð¼ +- +- +- KeePassXC: Create a new group +- KeePassXC: Создать новую группу +- +- +- A request for creating a new group "%1" has been received. +-Do you want to create this group? +- +- Получен Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° Ñоздание новой группы "%1". +-Создать Ñту группу? +- +- +- +- Your KeePassXC-Browser settings need to be moved into the database settings. +-This is necessary to maintain your current browser connections. +-Would you like to migrate your existing settings now? +- Ваши наÑтройки KeePassXC-Browser требуетÑÑ Ð¿ÐµÑ€ÐµÐ¼ÐµÑтить в наÑтройки базы данных. +-Это необходимо, чтобы поддерживать текущие Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð±Ñ€Ð°ÑƒÐ·ÐµÑ€Ð°. +-Хотите перенеÑти наÑтройки ÑейчаÑ? +- +- +- Don't show this warning again +- Ðе показывать Ñто предупреждение +- +- +- You have received an association request for the following database: +-%1 +- +-Give the connection a unique name or ID, for example: +-chrome-laptop. +- Получен Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° аÑÑоциацию Ð´Ð»Ñ Ñледующей базы данных: +-%1 +- +-Задайте Ð´Ð»Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ ÑƒÐ½Ð¸ÐºÐ°Ð»ÑŒÐ½Ð¾Ðµ Ð¸Ð¼Ñ Ð¸Ð»Ð¸ идентификатор, например: chrome-laptop. +- +- +- +- BrowserSettingsWidget +- +- Dialog +- Диалог +- +- +- This is required for accessing your databases with KeePassXC-Browser +- Это требуетÑÑ Ð´Ð»Ñ Ð´Ð¾Ñтупа к базам данных Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ KeePassXC-Browser +- +- +- Enable browser integration +- Включить интеграцию Ñ Ð±Ñ€Ð°ÑƒÐ·ÐµÑ€Ð¾Ð¼ +- +- +- General +- Общие +- +- +- Browsers installed as snaps are currently not supported. +- Браузеры, уÑтановленные в виде snap-пакетов, в наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð½Ðµ поддерживаютÑÑ. +- +- +- Enable integration for these browsers: +- Включить интеграцию Ð´Ð»Ñ Ð±Ñ€Ð°ÑƒÐ·ÐµÑ€Ð¾Ð²: +- +- +- Vivaldi +- Vivaldi +- +- +- &Edge +- &Edge +- +- +- Firefox +- Firefox +- +- +- Tor Browser +- Tor Browser +- +- +- Brave +- Brave +- +- +- Google Chrome +- Google Chrome +- +- +- Chromium +- Chromium +- +- +- Show a notification when credentials are requested +- Credentials mean login data requested via browser extension +- Показывать уведомление при запроÑе учётных данных +- +- +- Request to unlock the database if it is locked +- Запрашивать разблокировку базы данных, еÑли она заблокирована +- +- +- Only entries with the same scheme (http://, https://, ...) are returned. +- ВозвращаютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ запиÑи Ñ Ñ‚Ð°ÐºÐ¸Ð¼ же протоколом (http://, https://, ...). +- +- +- Match URL scheme (e.g., https://...) +- ПроверÑÑ‚ÑŒ Ñовпадение протокола Ð´Ð»Ñ URL-адреÑов (например: https://...) +- +- +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- При поиÑке по URL возвращать только лучшие ÑовпадениÑ, а не вÑе запиÑи Ð´Ð»Ñ Ð´Ð¾Ð¼ÐµÐ½Ð°. +- +- +- Return only best-matching credentials +- Возвращать только наиболее подходÑщие ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ +- +- +- Returns expired credentials. String [expired] is added to the title. +- Возвращать также запиÑи Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ð²ÑˆÐ¸Ð¼ÑÑ Ñроком дейÑтвиÑ. К названию таких запиÑей будет добавлено «[expired]». +- +- +- Allow returning expired credentials +- Возвращать иÑтёкшие запиÑи +- +- +- All databases connected to the extension will return matching credentials. +- Получать результаты поиÑка из вÑех подключённых баз данных +- +- +- Search in all opened databases for matching credentials +- Credentials mean login data requested via browser extension +- ИÑкать во вÑех открытых базах +- +- +- Sort matching credentials by title +- Credentials mean login data requested via browser extension +- Сортировать возвращаемые данные по названию +- +- +- Sort matching credentials by username +- Credentials mean login data requested via browser extension +- Сортировать возвращаемые данные по имени Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ +- +- +- Advanced +- РаÑширенный режим +- +- +- Never ask before accessing credentials +- Credentials mean login data requested via browser extension +- Ðе подтверждать доÑтуп к запиÑÑм +- +- +- Never ask before updating credentials +- Credentials mean login data requested via browser extension +- Ðе подтверждать обновление запиÑей +- +- +- Do not ask permission for HTTP Basic Auth +- An extra HTTP Basic Auth setting +- Ðе Ñпрашивать Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¾Ð±Ñ‹Ñ‡Ð½Ð¾Ð¹ проверки подлинноÑти HTTP +- +- +- Automatically creating or updating string fields is not supported. +- ÐвтоматичеÑкое Ñоздание или обновление Ñтроковых полей не поддерживаетÑÑ. +- +- +- Return advanced string fields which start with "KPH: " +- Возвращать дополнительные Ñтроковые полÑ, начинающиеÑÑ Ñ "KPH: " +- +- +- Don't display the popup suggesting migration of legacy KeePassHTTP settings. +- Ðе показывать напоминание о переноÑе уÑтаревших параметров KeePassHTTP. +- +- +- Do not prompt for KeePassHTTP settings migration. +- Ðе показывать напоминание о переноÑе уÑтаревших параметров KeePassHTTP +- +- +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- ÐвтоматичеÑки обновлÑÑ‚ÑŒ пути к ÑценариÑм механизма native messaging при запуÑке KeePassXC или keepassxc-proxy. +- +- +- Update native messaging manifest files at startup +- ОбновлÑÑ‚ÑŒ файлы манифеÑта механизма native messaging при запуÑке +- +- +- Use a custom proxy location if you installed a proxy manually. +- ИÑпользовать пользовательÑкий путь к прокÑи при уÑтановке прокÑи вручную. +- +- +- Use a custom proxy location: +- Meant is the proxy for KeePassXC-Browser +- Задать Ñвоё раÑположение прокÑи: +- +- +- Custom proxy location field +- Поле раÑÐ¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑкого прокÑи Ñервера +- +- +- Browser for custom proxy file +- Выбрать файл пользовательÑкого прокÑи Ñервера +- +- +- Browse... +- Button for opening file dialog +- Обзор… +- +- +- Use a custom browser configuration location: +- Задать Ñвоё раÑположение файла конфигурации браузера: +- +- +- Browser type: +- Тип браузера: +- +- +- Toolbar button style +- Внешний вид кнопок на панели инÑтрументов +- +- +- Config Location: +- РаÑположение файла конфигурации: +- +- +- Custom browser location field +- Поле раÑÐ¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑкого браузера +- +- +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- +- +- Browse for custom browser path +- Выбрать раÑположение браузера +- +- +- Custom extension ID: +- ПользовательÑкий идентификатор раÑширениÑ: +- +- +- Custom extension ID +- ПользовательÑкий идентификатор раÑÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ +- +- +- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 +- Так как Snap Ñто пеÑочница, Ð´Ð»Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð±Ñ€Ð°ÑƒÐ·ÐµÑ€Ð½Ð¾Ð¹ интеграции нужно выполнить Ñценарий.<br />Этот Ñценарий можно получить Ñ %1 +- +- +- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 +- Ð”Ð»Ñ Ð¸Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ð¸ требуетÑÑ ÑƒÑтановить раÑширение Ð´Ð»Ñ Ð±Ñ€Ð°ÑƒÐ·ÐµÑ€Ð° «KeePassXC-Browser». <br />УÑтановите его Ð´Ð»Ñ %1, %2 и %3. %4 +- +- +- Please see special instructions for browser extension use below +- ОзнакомьтеÑÑŒ Ñ Ð¸Ð½ÑтрукциÑми по иÑпользованию раÑÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ Ð±Ñ€Ð°ÑƒÐ·ÐµÑ€Ð° ниже +- +- +- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. +- <b>Внимание:</b> не удалоÑÑŒ найти заданное пользователем раÑположение прокÑи.<br/> Ð˜Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ñ Ð±Ñ€Ð°ÑƒÐ·ÐµÑ€Ð¾Ð¼ ÐЕ РÐБОТÐЕТ без Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾ÐºÑи. +- +- +- <b>Warning:</b> The following options can be dangerous! +- <b>Ð’ÐИМÐÐИЕ:</b> Следующие параметры могут быть опаÑны! +- +- +- Executable Files +- ИÑполнÑемые файлы +- +- +- All Files +- Ð’Ñе файлы +- +- +- Select custom proxy location +- Выбрать другое раÑположение прокÑи +- +- +- Select native messaging host folder location +- Выбрать раÑположение папки native messaging +- +- +- +- CloneDialog +- +- Clone Options +- Параметры ÐºÐ»Ð¾Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ +- +- +- Append ' - Clone' to title +- Добавить к названию « - клон» +- +- +- Replace username and password with references +- ИÑпользовать ÑÑылки Ð´Ð»Ñ Ð¸Ð¼ÐµÐ½Ð¸ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸ Ð¿Ð°Ñ€Ð¾Ð»Ñ +- +- +- Copy history +- ИÑÑ‚Ð¾Ñ€Ð¸Ñ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ +- +- +- +- CsvImportWidget +- +- Import CSV fields +- Импорт полей CSV +- +- +- filename +- Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° +- +- +- size, rows, columns +- размер, Ñтрок, Ñтолбцов +- +- +- Encoding +- Кодировка +- +- +- Codec +- Кодек +- +- +- Text is qualified by +- ТекÑÑ‚ ÑоответÑтвует +- +- +- Fields are separated by +- Разделитель полей +- +- +- Comments start with +- Символ начала ÐºÐ¾Ð¼Ð¼ÐµÐ½Ñ‚Ð°Ñ€Ð¸Ñ +- +- +- Consider '\' an escape character +- Символ «\» ÑвлÑетÑÑ Ñкранирующим +- +- +- Preview +- Предварительный проÑмотр +- +- +- Imported from CSV file +- Импортировано из CSV-файла +- +- +- Original data: +- ИÑходные данные: +- +- +- Error +- Ошибка +- +- +- Error(s) detected in CSV file! +- Ошибки в CSV-файле! +- +- +- [%n more message(s) skipped] +- [%n больше Ñообщений пропущен][%n больше Ñообщений пропущен][%n больше Ñообщений пропущен][пропущено Ñообщений: %n] +- +- +- CSV import: writer has errors: +-%1 +- Импорт CSV: запиÑÑŒ Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°Ð¼Ð¸ - %1 +- +- +- Text qualification +- Разделитель текÑта +- +- +- Field separation +- Разделитель полей +- +- +- Number of header lines to discard +- КоличеÑтво пропуÑкаемых Ñтрок заголовка +- +- +- CSV import preview +- Предварительный проÑмотр импорта из CSV +- +- +- Column Association +- СвÑзывание Ñтолбцов +- +- +- Last Modified +- Изменён +- +- +- Password +- Пароль +- +- +- Created +- Создано +- +- +- Notes +- Заметки +- +- +- Title +- Заголовок +- +- +- Group +- Группа +- +- +- URL +- URL-Ð°Ð´Ñ€ÐµÑ +- +- +- Username +- Логин +- +- +- Header lines skipped +- Ðачальные Ñтроки пропущены +- +- +- First line has field names +- ÐŸÐµÑ€Ð²Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ Ñодержит имена полей +- +- +- Not Present +- ОтуÑуÑтвует +- +- +- Column %1 +- Столбец %1 +- +- +- TOTP +- TOTP +- +- +- Icon +- Значок +- +- +- +- CsvParserModel +- +- %n column(s) +- %n Ñтолбцов%n Ñтолбцов%n Ñтолбцов%n Ñтолбцов +- +- +- %1, %2, %3 +- file info: bytes, rows, columns +- %1, %2, %3 +- +- +- %n byte(s) +- %n байт(ов)%n байт(ов)%n байт(ов)%n байт +- +- +- %n row(s) +- %n Ñтрока%n Ñтрок%n Ñтрок%n Ñтрок +- +- +- +- Database +- +- File %1 does not exist. +- Файл %1 не ÑущеÑтвует. +- +- +- Unable to open file %1. +- Ðевозможно открыть файл %1. +- +- +- Error while reading the database: %1 +- Ошибка при чтении базы данных: %1 +- +- +- File cannot be written as it is opened in read-only mode. +- Файл не может быть перезапиÑан - он открыт в режиме "только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ". +- +- +- Key not transformed. This is a bug, please report it to the developers! +- Ключ не преобразован. Это ошибка, Ñообщите о ней разработчикам! +- +- +- %1 +-Backup database located at %2 +- %1 +-РаÑположение резервной копии базы данных: «%2» +- +- +- Could not save, database does not point to a valid file. +- Ðе удалоÑÑŒ Ñохранить, база данных не указывает на верный файл. +- +- +- Could not save, database file is read-only. +- Ðевозможно Ñохранить, файл базы данных доÑтупен только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ +- +- +- Database file has unmerged changes. +- Файл базы данных имеет неÑинхронизированные Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ +- +- +- Recycle Bin +- Корзина +- +- +- Passwords +- Root group name +- Пароли +- +- +- Database save is already in progress. +- Сохранение базы данных уже выполнÑетÑÑ. +- +- +- Could not save, database has not been initialized! +- Ðе удалоÑÑŒ Ñохранить, база данных не была инициализирована. +- +- +- +- DatabaseOpenDialog +- +- Unlock Database - KeePassXC +- Разблокировать базу данных - KeePassXC +- +- +- +- DatabaseOpenWidget +- +- Key File: +- Файл-ключ: +- +- +- Refresh +- Обновить +- +- +- Don't show this warning again +- Ðе показывать Ñто предупреждение +- +- +- All files +- Ð’Ñе файлы +- +- +- Key files +- Файлы-ключи +- +- +- Select key file +- Выберите файл-ключ +- +- +- Failed to open key file: %1 +- Ошибка при открытии файла-ключа: %1 +- +- +- Unlock KeePassXC Database +- Открытие базы данных KeePassXC +- +- +- Enter Password: +- Введите пароль: +- +- +- Password field +- Поле Ð¿Ð°Ñ€Ð¾Ð»Ñ +- +- +- Hardware key slot selection +- Выбор Ñлота аппаратного ключа +- +- +- Browse for key file +- Открыть диалога выбора файла-ключа +- +- +- Browse... +- Обзор… +- +- +- Refresh hardware tokens +- Перечитать токены +- +- +- Hardware Key: +- Ðппаратный ключ: +- +- +- Hardware key help +- Помощь по аппаратному ключу +- +- +- TouchID for Quick Unlock +- TouchID Ð´Ð»Ñ Ð‘Ñ‹Ñтрой Разблокировки +- +- +- Unlock failed and no password given +- Ðеудачное разблокирование, пароль не указан +- +- +- Unlocking the database failed and you did not enter a password. +-Do you want to retry with an "empty" password instead? +- +-To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. +- Ðе удалоÑÑŒ разблокировать базу данных, пароль не был указан. +-Повторить попытку Ñ Ð¿ÑƒÑтым паролем? +- +-Чтобы отключить вывод Ñтого ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± ошибке, выполните ÑÐ±Ñ€Ð¾Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð² меню «Параметры базы данных» → «БезопаÑноÑть». +- +- +- Retry with empty password +- Попробовать ещё раз Ñ Ð¿ÑƒÑтым паролем +- +- +- Enter Additional Credentials (if any): +- Дополнительные механизмы аутентификации: +- +- +- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +-<p>Click for more information...</p> +- <p>Возможно иÑпользовать аппаратные ключи безопаÑноÑти, такие как <strong>Yubikey</strong> или <strong>OneKey</strong> Ñо Ñлотами, наÑтроенными в режиме HMAC-SHA1.</p> +-<p>Ðажмите здеÑÑŒ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации…</p> +- +- +- Key file help +- Справка о файле-ключе +- +- +- ? +- ? +- +- +- Cannot use database file as key file +- Файл базы данных не может быть файлом-ключом +- +- +- You cannot use your database file as a key file. +-If you do not have a key file, please leave the field empty. +- Файл базы данных не может быть иÑпользован в качеÑтве файла-ключа. ЕÑли файл-ключ не иÑпользуетÑÑ, оÑтавьте Ñто поле пуÑтым. +- +- +- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> +- <p>Ð”Ð»Ñ ÑƒÑÐ¸Ð»ÐµÐ½Ð¸Ñ Ð·Ð°Ñ‰Ð¸Ñ‚Ñ‹ базы данных, в дополнение к оÑновному паролю, возможно иÑпользовать Ñекретный файл. Такой файл может быть Ñоздан из раздела «БезопаÑноÑть» диалога параметров базы данных.</p><p>Файл-ключ <strong>не ÑвлÑетÑÑ</strong> файлом базы данных в формате *.kdbx!<br>ЕÑли файл-ключ не иÑпользуетÑÑ, оÑтавьте Ñто поле пуÑтым.</p><p>Ðажмите Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ñ… Ñведений…</p> +- +- +- Key file to unlock the database +- Файл-ключ Ð´Ð»Ñ Ñ€Ð°Ð·Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð±Ð°Ð·Ñ‹ данных +- +- +- Please touch the button on your YubiKey! +- Ðажмите кнопку на YubiKey! +- +- +- Detecting hardware keys… +- Обнаружение аппаратных ключей... +- +- +- No hardware keys detected +- Ðппаратные ключи не обнаружены +- +- +- Select hardware key… +- Выберите аппаратный ключ... +- +- +- Old key file format +- +- +- +- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> +- +- +- +- +- DatabaseSettingWidgetMetaData +- +- Passwords +- Пароли +- +- +- +- DatabaseSettingsDialog +- +- Advanced Settings +- Дополнительные параметры +- +- +- General +- Общие +- +- +- Security +- БезопаÑноÑÑ‚ÑŒ +- +- +- Encryption Settings +- Параметры ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ +- +- +- Browser Integration +- Ð˜Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ñ Ð±Ñ€Ð°ÑƒÐ·ÐµÑ€Ð°Ð¼Ð¸ +- +- +- Database Credentials +- ДоÑтуп к базе данных +- +- +- +- DatabaseSettingsWidgetBrowser +- +- KeePassXC-Browser settings +- ÐаÑтройки KeePassXC-Browser +- +- +- Stored keys +- Сохранённые ключи +- +- +- Remove +- Удалить +- +- +- Delete the selected key? +- Удалить выбранный ключ? +- +- +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- Ð’Ñ‹ дейÑтвительно хотите удалить выбранный ключ? +-Это может помешать подключению к плагину браузера. +- +- +- Key +- Ключ +- +- +- Value +- Значение +- +- +- Enable Browser Integration to access these settings. +- Ð”Ð»Ñ Ð´Ð¾Ñтупа к Ñтим параметрам требуетÑÑ Ð²ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒ интеграцию Ñ Ð±Ñ€Ð°ÑƒÐ·ÐµÑ€Ð¾Ð¼. +- +- +- Disconnect all browsers +- Отключить вÑе браузеры +- +- +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- Ð’Ñ‹ дейÑтвительно хотите отключить вÑе браузеры? +-Это может помешать подключению к плагину браузера. +- +- +- KeePassXC: No keys found +- KeePassXC: Ключи не найдены +- +- +- No shared encryption keys found in KeePassXC settings. +- Ð’ наÑтройках KeePassXC нет общих ключей шифрованиÑ. +- +- +- KeePassXC: Removed keys from database +- KeePassXC: Ключи удалены из базы данных +- +- +- Successfully removed %n encryption key(s) from KeePassXC settings. +- УÑпешно удалён %n ключ ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð· наÑтроек KeePassXC.УÑпешно удалёны %n ключа ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð· наÑтроек KeePassXC.УÑпешно удалёны %n ключей ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð· наÑтроек KeePassXC.УÑпешно удалено ключей ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð· наÑтроек KeePassXC: %n. +- +- +- Forget all site-specific settings on entries +- Забыть вÑе наÑтройки запиÑей Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑ€ÐµÑ‚Ð½Ñ‹Ñ… Ñайтов +- +- +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- Ð’Ñ‹ дейÑтвительно хотите забыть вÑе наÑтройки Ñайта Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ запиÑи? +-Ð Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½Ð° доÑтуп к запиÑÑм будут отменены. +- +- +- Removing stored permissions… +- Удаление Ñохранённых разрешений... +- +- +- Abort +- Прервать +- +- +- KeePassXC: Removed permissions +- KeePassXC: Ð Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ñ‹ +- +- +- Successfully removed permissions from %n entry(s). +- УÑпешно удалено разрешение от %n запиÑи.УÑпешно удалены Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¾Ñ‚ %n запиÑей.УÑпешно удалены Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¾Ñ‚ %n запиÑей.УÑпешно удалены Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¸Ð· %n шт. запиÑей. +- +- +- KeePassXC: No entry with permissions found! +- KeePassXC: Ðе найдена запиÑÑŒ Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñми! +- +- +- The active database does not contain an entry with permissions. +- Ð’ активной базе данных нет запиÑей Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñми. +- +- +- Move KeePassHTTP attributes to custom data +- ПеремеÑтить атрибуты KeePassHTTP в пользовательÑкие данные +- +- +- Do you really want to move all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- Ð’Ñ‹ дейÑтвительно хотите перевеÑти вÑе уÑтаревшие данные интеграции браузера в новый Ñтандарт? +-Это необходимо Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð°Ð½Ð¸Ñ ÑовмеÑтимоÑти Ñ Ð¿Ð»Ð°Ð³Ð¸Ð½Ð¾Ð¼ браузера. +- +- +- Stored browser keys +- Сохранённые ключи браузера +- +- +- Remove selected key +- Удалить выбранный ключ +- +- +- Move KeePassHTTP attributes to KeePassXC-Browser custom data +- ПеремеÑтить аттрибуты KeePassHTTP в пользовательÑкие данные KeePassXC-Browser +- +- +- Refresh database root group ID +- Обновление идентификатора корневой запиÑи базы данных +- +- +- Created +- Создано +- +- +- Refresh database ID +- Обновление идентификатора базы данных +- +- +- Do you really want refresh the database ID? +-This is only necessary if your database is a copy of another and the browser extension cannot connect. +- ДейÑтвительно хотите перезагруить ID базы данных? +-Это необходимо только еÑли ваша база ÑвлÑетÑÑ ÐºÐ¾Ð¿Ð¸ÐµÐ¹ другой и браузерное раÑширение не может подключитьÑÑ. +- +- +- +- DatabaseSettingsWidgetDatabaseKey +- +- Add additional protection... +- Ð”Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð·Ð°Ñ‰Ð¸Ñ‚Ð°... +- +- +- No password set +- Ðе задан пароль +- +- +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- Ð’ÐИМÐÐИЕ! Ð’Ñ‹ не уÑтановили пароль. ÐаÑтоÑтельно ÐЕ рекомендуетÑÑ Ð¸Ñпользовать базу данных без паролÑ! +- +-Ð’Ñ‹ дейÑтвительно хотите продолжить без паролÑ? +- +- +- Continue without password +- Продолжить без Ð¿Ð°Ñ€Ð¾Ð»Ñ +- +- +- No encryption key added +- Ключ ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ðµ добавлен +- +- +- You must add at least one encryption key to secure your database! +- Ðужно добавить Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ один ключ ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð·Ð°Ñ‰Ð¸Ñ‚Ñ‹ базы данных! +- +- +- Unknown error +- ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° +- +- +- Failed to change database credentials +- Ðе получилоÑÑŒ изменить учётные данные базы +- +- +- +- DatabaseSettingsWidgetEncryption +- +- Encryption Algorithm: +- Ðлгоритм шифрованиÑ: +- +- +- AES: 256 Bit (default) +- AES: 256 бит (по умолчанию) +- +- +- Twofish: 256 Bit +- Twofish: 256 бит +- +- +- Key Derivation Function: +- Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡Ð°: +- +- +- Transform rounds: +- Циклов преобразованиÑ: +- +- +- Memory Usage: +- ИÑпользование памÑти: +- +- +- Parallelism: +- Параллелизм: +- +- +- Decryption Time: +- Ð’Ñ€ÐµÐ¼Ñ Ñ€Ð°Ñшифровки: +- +- +- ?? s +- ?? Ñ +- +- +- Change +- Изменить +- +- +- Higher values offer more protection, but opening the database will take longer. +- Чем больше значение, тем Ñильнее защита, но дольше открываетÑÑ Ð±Ð°Ð·Ð° данных. +- +- +- Database format: +- Формат базы данных: +- +- +- This is only important if you need to use your database with other programs. +- Это важно, только еÑли нужно иÑпользовать базу данных Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ программами. +- +- +- KDBX 4.0 (recommended) +- KDBX 4.0 (рекомендуетÑÑ) +- +- +- KDBX 3.1 +- KDBX 3.1 +- +- +- unchanged +- Database decryption time is unchanged +- без изменений +- +- +- Number of rounds too high +- Key transformation rounds +- Слишком много циклов +- +- +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or days (or even longer) to open! +- Слишком много циклов Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡Ð° Argon2. +- +-ЕÑли оÑтавить Ñто значение, то база данных может открыватьÑÑ Ñ‡Ð°ÑÑ‹, дни или даже дольше! +- +- +- Understood, keep number +- ПонÑтно, Ñохранить значение +- +- +- Cancel +- Отмена +- +- +- Number of rounds too low +- Key transformation rounds +- Слишком мало циклов +- +- +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database may be too easy to crack! +- Слишком мало циклов Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡Ð° AES-KDF. +- +-ЕÑли оÑтавить Ñто значение, базу данных можно будет Ñлишком легко взломать! +- +- +- KDF unchanged +- ФФК не изменена +- +- +- Failed to transform key with new KDF parameters; KDF unchanged. +- Ошибка Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¤Ð¤Ðš Ñ Ð½Ð¾Ð²Ñ‹Ð¼Ð¸ параметрами; ФФК не изменена. +- +- +- MiB +- Abbreviation for Mebibytes (KDF settings) +- МиБ МиБ МиБ МиБ +- +- +- thread(s) +- Threads for parallel execution (KDF settings) +- потоков потоков потоков потоков +- +- +- Change existing decryption time +- Изменить Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°ÑÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ñ‹Ð²Ð°Ð½Ð¸Ñ +- +- +- Decryption time in seconds +- Ð’Ñ€ÐµÐ¼Ñ Ñ€Ð°ÑÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ñ‹Ð²Ð°Ð½Ð¸Ñ Ð² Ñекундах +- +- +- Database format +- Формат базы данных +- +- +- Encryption algorithm +- Ðлгоритм ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ +- +- +- Key derivation function +- Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡Ð° +- +- +- Transform rounds +- Раундов преобразованиÑ: +- +- +- Memory usage +- ИÑпользование памÑти +- +- +- Parallelism +- Параллелизм +- +- +- ?? ms +- ?? Ð¼Ñ +- +- +- ? s +- ? Ñ +- +- +- +- DatabaseSettingsWidgetFdoSecrets +- +- Exposed Entries +- ДоÑтуп к запиÑÑм +- +- +- Don't expose this database +- Ðе публиковать Ñту базу данных +- +- +- Expose entries under this group: +- Показать запиÑи внутри Ñтой группы: +- +- +- Enable Secret Service to access these settings. +- Включите Ñлужбу Secret Service, чтобы наÑтроить Ñти параметры. +- +- +- +- DatabaseSettingsWidgetGeneral +- +- Database Meta Data +- Метаданные базы данных +- +- +- Database name: +- Ð˜Ð¼Ñ Ð±Ð°Ð·Ñ‹ данных: +- +- +- Database description: +- ОпиÑание базы данных: +- +- +- Default username: +- Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¿Ð¾ умолчанию: +- +- +- History Settings +- ÐаÑтройки иÑтории +- +- +- Max. history items: +- МакÑимум запиÑей в иÑтории: +- +- +- Max. history size: +- МакÑимальный размер иÑтории: +- +- +- MiB +- МиБ +- +- +- Use recycle bin +- ИÑпользовать корзину +- +- +- Additional Database Settings +- Дополнительные параметры базы данных +- +- +- Database name field +- Поле имени базы данных +- +- +- Database description field +- Поле опиÑÐ°Ð½Ð¸Ñ Ð±Ð°Ð·Ñ‹ данных +- +- +- Default username field +- Поле имени Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¿Ð¾ умолчанию +- +- +- Maximum number of history items per entry +- МакÑимальное количеÑтво Ñобытий иÑтории Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ из запиÑей +- +- +- Maximum size of history per entry +- МакÑимальный размер Ñобытий иÑтории Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ из запиÑей +- +- +- Delete Recycle Bin +- Удалить корзину +- +- +- Do you want to delete the current recycle bin and all its contents? +-This action is not reversible. +- Удалить корзину и вÑÑ‘ её Ñодержимое? +-Это необратимое дейÑтвие. +- +- +- (old) +- (уÑтар.) +- +- +- Enable compression (recommended) +- ИÑпользовать Ñжатие (рекомендуетÑÑ) +- +- +- +- DatabaseSettingsWidgetKeeShare +- +- Sharing +- СовмеÑтное иÑпользование +- +- +- Breadcrumb +- Цепочка +- +- +- Type +- Тип +- +- +- Path +- Путь +- +- +- Last Signer +- ПоÑледний подпиÑавшийÑÑ +- +- +- Certificates +- Сертификаты +- +- +- > +- Breadcrumb separator +- > +- +- +- +- DatabaseSettingsWidgetMetaDataSimple +- +- Database Name: +- Ð˜Ð¼Ñ Ð±Ð°Ð·Ñ‹ данных: +- +- +- Description: +- ОпиÑание: +- +- +- Database name field +- Поле имени базы данных +- +- +- Database description field +- Поле опиÑÐ°Ð½Ð¸Ñ Ð±Ð°Ð·Ñ‹ данных +- +- +- +- DatabaseTabWidget +- +- KeePass 2 Database +- База данных KeePass 2 +- +- +- All files +- Ð’Ñе файлы +- +- +- Open database +- Открыть базу данных +- +- +- CSV file +- Файл CSV +- +- +- Merge database +- Объединить базу данных +- +- +- Open KeePass 1 database +- Открыть базу данных KeePass 1 +- +- +- KeePass 1 database +- База данных KeePass 1 +- +- +- Export database to CSV file +- ЭкÑпортировать базу данных в файл CSV +- +- +- Writing the CSV file failed. +- Ðе удалоÑÑŒ запиÑать CSV-файл. +- +- +- Database creation error +- Ошибка ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð±Ð°Ð·Ñ‹ данных +- +- +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- У Ñозданной базы данных нет ключа или ФФК, Ñохранение невозможно. +-Это определённо ошибка, Ñообщите о ней разработчикам. +- +- +- Select CSV file +- Выберите CSV-файл +- +- +- New Database +- ÐÐ¾Ð²Ð°Ñ Ð±Ð°Ð·Ð° данных +- +- +- %1 [New Database] +- Database tab name modifier +- %1 [Ð½Ð¾Ð²Ð°Ñ Ð±Ð°Ð·Ð° данных] +- +- +- %1 [Locked] +- Database tab name modifier +- %1 [заблокировано] +- +- +- %1 [Read-only] +- Database tab name modifier +- %1 [только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ] +- +- +- Failed to open %1. It either does not exist or is not accessible. +- Ðе удалоÑÑŒ открыть «%1», файл не ÑущеÑтвует или недоÑтупен. +- +- +- Export database to HTML file +- ЭкÑпортировать базу данных в HTML файл +- +- +- HTML file +- HTML файл +- +- +- Writing the HTML file failed. +- Ошибка запиÑи HTML файла. +- +- +- Export Confirmation +- Подтверждение ÑкÑÐ¿Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ +- +- +- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? +- При продолжении, будет выполнен ÑкÑпорт базы данных в незашифрованный файл, что делает доÑтупными ÑодержащиеÑÑ Ð² нём пароли и другие чувÑтвительные данные. Продолжить ÑкÑпортирование? +- +- +- Open OPVault +- Открыть OPVault +- +- +- +- DatabaseWidget +- +- Searching... +- ПоиÑк... +- +- +- Do you really want to delete the entry "%1" for good? +- Удалить запиÑÑŒ «%1» окончательно? +- +- +- Do you really want to move entry "%1" to the recycle bin? +- ПеремеÑтить запиÑÑŒ «%1» в корзину? +- +- +- Do you really want to move %n entry(s) to the recycle bin? +- Ð’Ñ‹ дейÑтвительно хотите перемеÑтить %n entry(s) в корзину?Ð’Ñ‹ дейÑтвительно хотите перемеÑтить %n entry(s) в корзину?Ð’Ñ‹ дейÑтвительно хотите перемеÑтить %n entry(s) в корзину?Ð’Ñ‹ дейÑтвительно хотите перемеÑтить запиÑи (%n) в корзину? +- +- +- Execute command? +- Выполнить команду? +- +- +- Do you really want to execute the following command?<br><br>%1<br> +- Выполнить Ñледующую команду?<br><br>%1<br> +- +- +- Remember my choice +- Запомнить мой выбор +- +- +- Do you really want to delete the group "%1" for good? +- Удалить группу «%1» окончательно? +- +- +- No current database. +- Ðет текущей базы данных. +- +- +- No source database, nothing to do. +- Ðет иÑходной базы данных, нечего обрабатывать. +- +- +- Search Results (%1) +- Результаты поиÑка (%1) +- +- +- No Results +- Ðет результатов +- +- +- File has changed +- Файл изменён +- +- +- The database file has changed. Do you want to load the changes? +- Файл базы данных был изменён. Загрузить изменениÑ? +- +- +- Merge Request +- Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° ÑлиÑние +- +- +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- База данных была изменена, еÑÑ‚ÑŒ неÑохранённые изменениÑ. +-Объединить изменениÑ? +- +- +- Empty recycle bin? +- ОчиÑтить корзину? +- +- +- Are you sure you want to permanently delete everything from your recycle bin? +- Удалить вÑÑ‘ из корзины? +- +- +- Do you really want to delete %n entry(s) for good? +- Ð’Ñ‹ дейÑтвительно хотите удалить %n запиÑÑŒ наÑовÑем?Ð’Ñ‹ дейÑтвительно хотите удалить %n запиÑи наÑовÑем?Ð’Ñ‹ дейÑтвительно хотите удалить %n запиÑей наÑовÑем?Ð’Ñ‹ дейÑтвительно хотите окончательно удалить запиÑи (%n шт.)? +- +- +- Delete entry(s)? +- Удалить запиÑÑŒ?Удалить запиÑи?Удалить запиÑи?Удалить запиÑи? +- +- +- Move entry(s) to recycle bin? +- ПеремеÑтить запиÑÑŒ в корзину?ПеремеÑтить запиÑи в корзину?ПеремеÑтить запиÑи в корзину?ПеремеÑтить запиÑи в корзину? +- +- +- Lock Database? +- Заблокировать базу данных? +- +- +- You are editing an entry. Discard changes and lock anyway? +- Ð’Ñ‹ ÑÐµÐ¹Ñ‡Ð°Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€ÑƒÐµÑ‚Ðµ запиÑÑŒ. Отменить Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸ вÑÑ‘ равно заблокировать? +- +- +- "%1" was modified. +-Save changes? +- «%1» изменён. +-Сохранить изменениÑ? +- +- +- Database was modified. +-Save changes? +- База данных была изменена. +-Сохранить изменениÑ? +- +- +- Save changes? +- Сохранить изменениÑ? +- +- +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- Ðе удалоÑÑŒ открыть новый файл базы данных при попытке автоматичеÑки загрузить повторно. +-Ошибка: %1 +- +- +- Disable safe saves? +- Отключить безопаÑное Ñохранение? +- +- +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- KeePassXC неÑколько раз не удалоÑÑŒ Ñохранить базу данных. Это могло быть вызвано Ñлужбами Ñинхронизации файлов, блокирующими файл при Ñохранении. +-Отключить безопаÑное Ñохранение и повторить попытку? +- +- +- Passwords +- Пароли +- +- +- Save database as +- Сохранить базу данных как +- +- +- KeePass 2 Database +- База данных KeePass 2 +- +- +- Replace references to entry? +- Заменить ÑÑылки на запиÑÑŒ? +- +- +- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? +- ЗапиÑÑŒ "%1" имеет %2 ÑÑылку. Ð’Ñ‹ хотите перепиÑать ÑÑылки значениÑми, пропуÑтить Ñту запиÑÑŒ или удалить в любом Ñлучае?ЗапиÑÑŒ "%1" имеет %2 ÑÑылки. Ð’Ñ‹ хотите перепиÑать ÑÑылки значениÑми, пропуÑтить Ñту запиÑÑŒ или удалить в любом Ñлучае?ЗапиÑÑŒ "%1" имеет %2 ÑÑылок. Ð’Ñ‹ хотите перепиÑать ÑÑылки значениÑми, пропуÑтить Ñту запиÑÑŒ или удалить в любом Ñлучае?У запиÑи "%1" еÑÑ‚ÑŒ ÑÑылки (%2 шт.). Хотите перезапиÑать ÑÑылки значениÑми, пропуÑтить Ñту запиÑÑŒ или вÑÑ‘ равно её удалить? +- +- +- Delete group +- Удалить группу +- +- +- Move group to recycle bin? +- ПеремеÑтить группу в корзину? +- +- +- Do you really want to move the group "%1" to the recycle bin? +- Ð’Ñ‹ дейÑтвительно хотите перемеÑтить группу "%1" в корзину? +- +- +- Successfully merged the database files. +- Файлы баз данных уÑпешно объединены. +- +- +- Database was not modified by merge operation. +- База данных не была изменена операцией объединениÑ. +- +- +- Shared group... +- ÐžÐ±Ñ‰Ð°Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð°... +- +- +- Writing the database failed: %1 +- Ошибка при запиÑи базы данных: %1 +- +- +- This database is opened in read-only mode. Autosave is disabled. +- База данных открыта в режиме только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ. ÐвтоÑохраниение отключено. +- +- +- Save database backup +- Сохранить резервную копию базы +- +- +- Could not find database file: %1 +- Ðе удалоÑÑŒ найти файл базы данных: %1 +- +- +- +- EditEntryWidget +- +- Entry +- ЗапиÑÑŒ +- +- +- Advanced +- Дополнительные +- +- +- Icon +- Значок +- +- +- Auto-Type +- Ðвтоввод +- +- +- Properties +- Параметры +- +- +- History +- ИÑÑ‚Ð¾Ñ€Ð¸Ñ +- +- +- SSH Agent +- SSH-агент +- +- +- n/a +- н/д +- +- +- (encrypted) +- (зашифровано) +- +- +- Select private key +- Выберите закрытый (личный) ключ +- +- +- Entry history +- ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñи +- +- +- Add entry +- Добавить запиÑÑŒ +- +- +- Edit entry +- Изменить запиÑÑŒ +- +- +- New attribute +- Ðовый атрибут +- +- +- Are you sure you want to remove this attribute? +- Удалить Ñтот атрибут? +- +- +- Tomorrow +- Завтра +- +- +- %n week(s) +- %n нед%n нед%n нед%n нед. +- +- +- %n month(s) +- %n меÑÑц(-а)(-ев)%n меÑÑц(-а)(-ев)%n меÑÑц(-а)(-ев)%n меÑ. +- +- +- Entry updated successfully. +- ЗапиÑÑŒ уÑпешно обновлена. +- +- +- New attribute %1 +- Ðовый атрибут %1 +- +- +- %n year(s) +- %n год%n лет%n лет%n лет +- +- +- Confirm Removal +- Подтвердите удаление +- +- +- Browser Integration +- Ð˜Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ñ Ð±Ñ€Ð°ÑƒÐ·ÐµÑ€Ð°Ð¼Ð¸ +- +- +- <empty URL> +- <ПуÑтой URL> +- +- +- Are you sure you want to remove this URL? +- Удалить Ñтот URL? +- +- +- Reveal +- Показать +- +- +- Hide +- Скрыть +- +- +- Unsaved Changes +- ÐеÑохраненные Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ +- +- +- Would you like to save changes to this entry? +- Сохранить внеÑённые изменениÑ? +- +- +- [PROTECTED] Press Reveal to view or edit +- [ЗÐЩИЩЕÐО] Ðажмите Ð´Ð»Ñ Ð²Ð¾ÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ +- +- +- Invalid Entry +- +- +- +- An external merge operation has invalidated this entry. +-Unfortunately, any changes made have been lost. +- +- +- +- +- EditEntryWidgetAdvanced +- +- Additional attributes +- Дополнительные атрибуты +- +- +- Add +- Создать +- +- +- Remove +- Удалить +- +- +- Edit Name +- Изменить Ð¸Ð¼Ñ +- +- +- Protect +- Защитить +- +- +- Reveal +- Показать +- +- +- Attachments +- Ð’Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ +- +- +- Foreground Color: +- ОÑновной цвет: +- +- +- Background Color: +- Цвет фона: +- +- +- Attribute selection +- Выбор атрибута +- +- +- Attribute value +- Значение атрибута +- +- +- Add a new attribute +- Добавить новый атрибут +- +- +- Remove selected attribute +- Удалить выбранный атрибут +- +- +- Edit attribute name +- Изменить Ð¸Ð¼Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð° +- +- +- Toggle attribute protection +- Включить или отключить защиту атрибута +- +- +- Show a protected attribute +- Показать защищённый атрибут +- +- +- Foreground color selection +- Выбор оÑновного цвета +- +- +- Background color selection +- Выбор цвета фона +- +- +- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> +- <html><head/><body><p>При включении, запиÑÑŒ не поÑвитÑÑ Ð² отчетах (например, Проверки безопаÑноÑти или HIBP), даже еÑли она не ÑоответÑтвует требованиÑм к качеÑтву (ÑнтропиÑ, переиÑпользование). Можно включить Ñтот параметр, еÑли вы не можете контролировать Ñтот пароль (например, 4-значные пин-кодыж), чтобы не заÑорÑÑ‚ÑŒ отчет.</p></body></html> +- +- +- Exclude from database reports +- ИÑключить из отчетов +- +- +- +- EditEntryWidgetAutoType +- +- Enable Auto-Type for this entry +- Включить автоввод Ð´Ð»Ñ Ñтой запиÑи +- +- +- Window Associations +- ÐÑÑоциации окон +- +- +- + +- + +- +- +- - +- - +- +- +- Window title: +- Заголовок окна: +- +- +- Use a specific sequence for this association: +- ИÑпользовать Ñпециальную поÑледовательноÑÑ‚ÑŒ Ð´Ð»Ñ Ñтой аÑÑоциации: +- +- +- Custom Auto-Type sequence +- Ð¡Ð²Ð¾Ñ Ð¿Ð¾ÑледовательноÑÑ‚ÑŒ автоввода +- +- +- Open Auto-Type help webpage +- Открыть Ñтраницу Ñправки по авто-вводу +- +- +- Existing window associations +- СущеÑтвующие аÑÑоциации Ñ Ð¾ÐºÐ½Ð°Ð¼Ð¸ +- +- +- Add new window association +- Добавить аÑÑоциацию Ñ Ð¾ÐºÐ½Ð¾Ð¼ +- +- +- Remove selected window association +- Удалить выбранную аÑÑоциацию Ñ Ð¾ÐºÐ½Ð¾Ð¼ +- +- +- You can use an asterisk (*) to match everything +- Ð”Ð»Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ð° вÑех значений иÑпользуйте звёздочку (*) +- +- +- Set the window association title +- Задайте заголовок окна Ð´Ð»Ñ Ð°ÑÑоциации +- +- +- You can use an asterisk to match everything +- Ð”Ð»Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ð° вÑех значений иÑпользуйте звёздочку (*) +- +- +- Custom Auto-Type sequence for this window +- ПользовательÑÐºÐ°Ñ Ð¿Ð¾ÑледовательноÑÑ‚ÑŒ автоввода Ð´Ð»Ñ Ñтого окна +- +- +- Inherit default Auto-Type sequence from the group +- УнаÑледовать Ñтандартную поÑледовательноÑÑ‚ÑŒ автоввода от группы +- +- +- Use custom Auto-Type sequence: +- ИÑпользовать Ñвою поÑледовательноÑÑ‚ÑŒ автоввода: +- +- +- +- EditEntryWidgetBrowser +- +- These settings affect to the entry's behaviour with the browser extension. +- Эти параметры влиÑÑŽÑ‚ на данные, возвращаемые при запроÑе из раÑÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ Ð±Ñ€Ð°ÑƒÐ·ÐµÑ€Ð°. +- +- +- General +- Общие +- +- +- Skip Auto-Submit for this entry +- Ðе иÑпользовать автоматичеÑкую отправку данных форм Ð´Ð»Ñ Ñтой запиÑи +- +- +- Hide this entry from the browser extension +- Ðе показывать Ñту запиÑÑŒ при запроÑе из раÑÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ Ð±Ñ€Ð°ÑƒÐ·ÐµÑ€Ð° +- +- +- Additional URL's +- Дополнительные URL-адреÑа +- +- +- Add +- Создать +- +- +- Remove +- Удалить +- +- +- Edit +- Изменить +- +- +- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. +- ОтправлÑÑ‚ÑŒ Ñту наÑтройку только браузерным диалогам Ð´Ð»Ñ HTTP Auth. ЕÑли включено, обычные формы авторизации не покажут запиÑÑŒ Ñреди вариантов выбора. +- +- +- Use this entry only with HTTP Basic Auth +- ИÑпользовать Ñту запиÑÑŒ только при обычной проверке подлинноÑти HTTP +- +- +- +- EditEntryWidgetHistory +- +- Show +- Показать +- +- +- Restore +- ВоÑÑтановить +- +- +- Delete +- Удалить +- +- +- Delete all +- Удалить вÑÑ‘ +- +- +- Entry history selection +- Выбор иÑтории запиÑи +- +- +- Show entry at selected history state +- Показать запиÑÑŒ в ÑоÑтоÑнии на выбранный момент иÑтории +- +- +- Restore entry to selected history state +- ВоÑÑтановить запиÑÑŒ в ÑоÑтоÑнии на выбранный момент иÑтории +- +- +- Delete selected history state +- Удалить выбранное ÑоÑтоÑние запиÑи +- +- +- Delete all history +- Удалить вÑÑŽ иÑторию +- +- +- +- EditEntryWidgetMain +- +- URL: +- URL-адреÑ: +- +- +- Password: +- Пароль: +- +- +- Title: +- Ðазвание: +- +- +- Presets +- ПредуÑтановки +- +- +- Toggle the checkbox to reveal the notes section. +- Включите Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° примечаний. +- +- +- Username: +- Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ: +- +- +- Url field +- Поле URL-адреÑа +- +- +- Download favicon for URL +- Загрузить значок Ñайта Ð´Ð»Ñ URL-адреÑа +- +- +- Password field +- Поле Ð¿Ð°Ñ€Ð¾Ð»Ñ +- +- +- Toggle notes visible +- Скрыть или показать заметку +- +- +- Expiration field +- Поле ввода Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ Ñрока дейÑÑ‚Ð²Ð¸Ñ +- +- +- Expiration Presets +- СпиÑок предварительно заданных Ñроков дейÑÑ‚Ð²Ð¸Ñ +- +- +- Expiration presets +- СпиÑок предварительно заданных Ñроков дейÑÑ‚Ð²Ð¸Ñ +- +- +- Notes field +- Поле заметок +- +- +- Title field +- Поле Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ +- +- +- Username field +- Поле имени Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ +- +- +- Toggle expiration +- ИÑпользовать Ñрок Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ Ð´ÐµÐ¹ÑÑ‚Ð²Ð¸Ñ +- +- +- Notes: +- ПримечаниÑ: +- +- +- https://example.com +- https://example.com +- +- +- Expires: +- ИÑтекает: +- +- +- Edit Entry +- +- +- +- +- EditEntryWidgetSSHAgent +- +- Form +- Форма +- +- +- Remove key from agent after +- Убрать ключ из агента через +- +- +- seconds +- Ñ +- +- +- Fingerprint +- Отпечаток +- +- +- Remove key from agent when database is closed/locked +- Убрать ключ из агента при закрытии/блокировке базы данных +- +- +- Public key +- Публичный ключ +- +- +- Add key to agent when database is opened/unlocked +- Добавить ключ в агент при открытии/разблокировке базы данных +- +- +- Comment +- Комментарий +- +- +- Decrypt +- РаÑшифровать +- +- +- n/a +- н/д +- +- +- Copy to clipboard +- Скопировать в буфер обмена +- +- +- Private key +- Закрытый (личный) ключ +- +- +- External file +- Внешний файл +- +- +- Browse... +- Button for opening file dialog +- ПроÑмотр... +- +- +- Attachment +- Вложение +- +- +- Add to agent +- Добавить в агент +- +- +- Remove from agent +- Убрать из агента +- +- +- Require user confirmation when this key is used +- Требовать подтверждение при иÑпользовании Ñтого ключа +- +- +- Remove key from agent after specified seconds +- Убрать ключ из агента по иÑтечению заданного интервала времени +- +- +- Browser for key file +- Выбор файла-ключа +- +- +- External key file +- Внешний файл-ключ +- +- +- Select attachment file +- Выберите файл Ð²Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ +- +- +- +- EditGroupWidget +- +- Group +- Группа +- +- +- Icon +- Значок +- +- +- Properties +- Параметры +- +- +- Add group +- Добавить группу +- +- +- Edit group +- Править группу +- +- +- Enable +- Включено +- +- +- Disable +- Выключено +- +- +- Inherit from parent group (%1) +- ÐаÑледовать от родительÑкой группы (%1) +- +- +- Entry has unsaved changes +- ЗапиÑÑŒ Ñодержит неÑохранённые изменениÑ. +- +- +- +- EditGroupWidgetKeeShare +- +- Type: +- Тип: +- +- +- Path: +- Путь: +- +- +- Password: +- Пароль: +- +- +- Inactive +- Ðеактивные +- +- +- KeeShare unsigned container +- ÐеподпиÑанный контейнер KeeShare +- +- +- KeeShare signed container +- ПодпиÑанный контейнер KeeShare +- +- +- Select import source +- Выберите иÑточник импорта +- +- +- Select export target +- Выберите меÑто ÑкÑпорта +- +- +- Select import/export file +- Выберите файл Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°/ÑкÑпорта +- +- +- Clear +- ОчиÑтить +- +- +- Import +- ИмпортируетÑÑ +- +- +- Export +- ЭкÑпортируетÑÑ +- +- +- Synchronize +- СинхронизируетÑÑ +- +- +- Your KeePassXC version does not support sharing this container type. +-Supported extensions are: %1. +- УÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ KeePassXC не поддерживает ÑовмеÑтное иÑпользование контейнера такого типа. СпиÑок поддерживаемых раÑширений: %1. +- +- +- %1 is already being exported by this database. +- %1 уже ÑкÑпортируетÑÑ Ñтой базой данных. +- +- +- %1 is already being imported by this database. +- %1 уже импортируетÑÑ Ñтой базой данных. +- +- +- %1 is being imported and exported by different groups in this database. +- %1 уже ÑкÑпортируетÑÑ Ð¸ импортируетÑÑ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ñ‹Ð¼Ð¸ группами Ñтой базы данных. +- +- +- KeeShare is currently disabled. You can enable import/export in the application settings. +- KeeShare is a proper noun +- Обмен запиÑÑми KeeShare отключён. Включите возможноÑÑ‚ÑŒ импорта и/или ÑкÑпорта в параметрах приложениÑ. +- +- +- Database export is currently disabled by application settings. +- ЭкÑпорт базы данных запрещён параметрами приложениÑ. +- +- +- Database import is currently disabled by application settings. +- Импорт в базу данных запрещён параметрами приложениÑ. +- +- +- Sharing mode field +- Поле ÑоÑтоÑÐ½Ð¸Ñ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ доÑтупа +- +- +- Path to share file field +- Поле пути к общему файлу +- +- +- Password field +- Поле Ð¿Ð°Ñ€Ð¾Ð»Ñ +- +- +- Clear fields +- ОчиÑтить Ð¿Ð¾Ð»Ñ +- +- +- Browse for share file +- Выбрать общий файл +- +- +- Browse... +- Обзор… +- +- +- +- EditGroupWidgetMain +- +- Name field +- Поле имени +- +- +- Notes field +- Поле заметок +- +- +- Toggle expiration +- ИÑпользовать Ñрок Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ Ð´ÐµÐ¹ÑÑ‚Ð²Ð¸Ñ +- +- +- Auto-Type toggle for this and sub groups +- Включение или отключение автоввода Ð´Ð»Ñ Ñтой и вложенных групп +- +- +- Expiration field +- Поле ввода Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ Ñрока дейÑÑ‚Ð²Ð¸Ñ +- +- +- Search toggle for this and sub groups +- Включение или отключение поиÑка Ð´Ð»Ñ Ñтой и вложенных групп +- +- +- Default auto-type sequence field +- Поле поÑледовательноÑти автоввода, иÑпользуемой по умолчанию +- +- +- Expires: +- ИÑтекает: +- +- +- Use default Auto-Type sequence of parent group +- &ИÑпользовать поÑледовательноÑÑ‚ÑŒ по умолчанию автоввода родительÑкой группы +- +- +- Auto-Type: +- Ðвтоввод: +- +- +- Search: +- ПоиÑк: +- +- +- Notes: +- ПримечаниÑ: +- +- +- Name: +- ИмÑ: +- +- +- Set default Auto-Type sequence +- Задать поÑледовательноÑÑ‚ÑŒ автоввода по умолчанию +- +- +- Edit Group +- +- +- +- +- EditWidgetIcons +- +- Add custom icon +- Добавить Ñвой значок +- +- +- Delete custom icon +- Удалить Ñвой значок +- +- +- Download favicon +- Скачать значок Ñайта +- +- +- Unable to fetch favicon. +- Ðе удалоÑÑŒ получить значок. +- +- +- Images +- Ð˜Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ +- +- +- All files +- Ð’Ñе файлы +- +- +- Confirm Delete +- Подтверждение ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ +- +- +- Select Image(s) +- Выбор Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ +- +- +- Successfully loaded %1 of %n icon(s) +- УÑпешно загружен %1 из %n значкаУÑпешно загружены %1 из %n значковУÑпешно загружены %1 из %n значковУÑпешно загружено значков: %1 из %n +- +- +- No icons were loaded +- Ðе загружено ни одного значка +- +- +- %n icon(s) already exist in the database +- %n значок уже ÑущеÑтвует в базе данных%n значка уже ÑущеÑтвуют в базе данных%n значков уже ÑущеÑтвуют в базе данныхЗначков, уже имеющихÑÑ Ð² базе данных: %n +- +- +- The following icon(s) failed: +- Следующий значок потерпел неудачу:Следующие значки потерпели неудачу:Следующие значки потерпели неудачу:Ошибки в Ñледующих значках: +- +- +- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? +- Этот значок иÑпользуетÑÑ %n запиÑью и будет замещён значком по умолчанию. Ð’Ñ‹ уверены, что хотите удалить его?Этот значок иÑпользуетÑÑ %n запиÑÑми и будет замещён значком по умолчанию. Ð’Ñ‹ уверены, что хотите удалить его?Этот значок иÑпользуетÑÑ %n запиÑÑми и будет замещён значком по умолчанию. Ð’Ñ‹ уверены, что хотите удалить его?Этот значок иÑпользуетÑÑ Ð·Ð°Ð¿Ð¸ÑÑми (%n), он будет замещён Ñтандартным значком. Ð’Ñ‹ дейÑтвительно хотите его удалить? +- +- +- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security +- Возможно иÑпользовать Ñлужбу поиÑка значков Ñайта DuckDuckGo в меню «СервиÑ» → «Параметры» → «БезопаÑноÑть» +- +- +- Download favicon for URL +- Загрузить значок Ñайта Ð´Ð»Ñ URL-адреÑа +- +- +- Apply selected icon to subgroups and entries +- ИÑпользовать выбранный значок Ð´Ð»Ñ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñ‹Ñ… групп и запиÑей +- +- +- Also apply to child groups +- Также применить к дочерним группам +- +- +- Also apply to child entries +- Также применить к дочерним запиÑÑм +- +- +- Also apply to all children +- Также применить ко вÑем дочерним Ñлементам +- +- +- Existing icon selected. +- Выбран ÑущеÑтвующий значок. +- +- +- Use default icon +- ИÑпользовать Ñтандартный значок +- +- +- Use custom icon +- ИÑпользовать Ñвой значок +- +- +- Apply icon to... +- ИÑпользовать выбранный значок длÑ… +- +- +- Apply to this group only +- ИÑпользовать только Ð´Ð»Ñ Ñтой группы +- +- +- +- EditWidgetProperties +- +- Created: +- Создание: +- +- +- Modified: +- Изменение: +- +- +- Accessed: +- ДоÑтуп: +- +- +- Uuid: +- UUID: +- +- +- Plugin Data +- Данные плагинов +- +- +- Remove +- Удалить +- +- +- Delete plugin data? +- Удалить данные плагинов? +- +- +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- Ð’Ñ‹ дейÑтвительно хотите удалить выбранные данные плагинов? +-Это может привеÑти к ÑбоÑм плагинов. +- +- +- Key +- Ключ +- +- +- Value +- Значение +- +- +- Datetime created +- Дата и Ð²Ñ€ÐµÐ¼Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ +- +- +- Datetime modified +- Дата и Ð²Ñ€ÐµÐ¼Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ +- +- +- Datetime accessed +- Дата и Ð²Ñ€ÐµÐ¼Ñ Ð¿Ð¾Ñледнего иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ +- +- +- Unique ID +- Уникальный ID +- +- +- Plugin data +- Данные подключаемого Ð¼Ð¾Ð´ÑƒÐ»Ñ +- +- +- Remove selected plugin data +- Удаление выбранных данных подключаемого Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð±Ñ€Ð°ÑƒÐ·ÐµÑ€Ð° +- +- +- +- Entry +- +- %1 - Clone +- %1 - клон +- +- +- +- EntryAttachmentsModel +- +- Name +- Ð˜Ð¼Ñ +- +- +- Size +- Размер +- +- +- +- EntryAttachmentsWidget +- +- Form +- Форма +- +- +- Add +- Создать +- +- +- Remove +- Удалить +- +- +- Open +- Открыть +- +- +- Save +- Сохранить +- +- +- Select files +- Выберите файлы +- +- +- Are you sure you want to remove %n attachment(s)? +- Ð’Ñ‹ уверены, что вы хотите удалить %n вложениÑ?Ð’Ñ‹ уверены, что вы хотите удалить %n вложениÑ?Ð’Ñ‹ уверены, что вы хотите удалить %n вложениÑ?Ð’Ñ‹ дейÑтвительно хотите удалить Ð²Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ (%n шт.)? +- +- +- Save attachments +- Сохранить Ð²Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ +- +- +- Unable to create directory: +-%1 +- Ðевозможно Ñоздать папку: +-%1 +- +- +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- Ð’Ñ‹ дейÑтвительно хотите перезапиÑать имеющийÑÑ Ñ„Ð°Ð¹Ð» "%1" Ñ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð¸ÐµÐ¼? +- +- +- Confirm overwrite +- Подтвердите перезапиÑÑŒ +- +- +- Unable to save attachments: +-%1 +- Ðевозможно Ñохранить вложениÑ: +-%1 +- +- +- Unable to open attachment: +-%1 +- Ðевозможно открыть вложение: +-%1 +- +- +- Unable to open attachments: +-%1 +- Ðевозможно открыть вложениÑ: +-%1 +- +- +- Confirm remove +- Подтвердите удаление +- +- +- Unable to open file(s): +-%1 +- Ðе удалоÑÑŒ открыть файл: +-%1Ðе удалоÑÑŒ открыть файлы: +-%1Ðе удалоÑÑŒ открыть файлы: +-%1Ðевозможно открыть файл(Ñ‹): +-%1 +- +- +- Attachments +- Ð’Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ +- +- +- Add new attachment +- Добавить вложение +- +- +- Remove selected attachment +- Удалить выбранное вложение +- +- +- Open selected attachment +- Открыть выбранное вложение +- +- +- Save selected attachment to disk +- Сохранить выбранное вложение на диÑк +- +- +- %1 is a big file (%2 MB). +-Your database may get very large and reduce performance. +- +-Are you sure to add this file? +- У файла «%1» очень большой размер (%2 МБ). +-База данных увеличитÑÑ Ð² размере, что приведёт к замедлению её работы. +- +-Продолжить добавление Ñтого файла? +- +- +- Confirm Attachment +- Подтвердить вложение +- +- +- +- EntryAttributesModel +- +- Name +- Ð˜Ð¼Ñ +- +- +- +- EntryHistoryModel +- +- Last modified +- ПоÑледнее изменение +- +- +- Title +- Ð˜Ð¼Ñ Ð·Ð°Ð¿Ð¸Ñи +- +- +- Username +- Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ +- +- +- URL +- URL-Ð°Ð´Ñ€ÐµÑ +- +- +- +- EntryModel +- +- Ref: +- Reference abbreviation +- СÑылка: +- +- +- Group +- Группа +- +- +- Title +- Ð˜Ð¼Ñ Ð·Ð°Ð¿Ð¸Ñи +- +- +- Username +- Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ +- +- +- URL +- URL-Ð°Ð´Ñ€ÐµÑ +- +- +- Never +- Ðикогда +- +- +- Password +- Пароль +- +- +- Notes +- ÐŸÑ€Ð¸Ð¼ÐµÑ‡Ð°Ð½Ð¸Ñ +- +- +- Expires +- ИÑтекает +- +- +- Created +- Создан +- +- +- Modified +- Изменение +- +- +- Accessed +- ДоÑтуп +- +- +- Attachments +- Ð’Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ +- +- +- Size +- Размер +- +- +- Group name +- Ðазвание группы +- +- +- Entry title +- Ðазвание запиÑи +- +- +- Entry notes +- ÐŸÑ€Ð¸Ð¼ÐµÑ‡Ð°Ð½Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñи +- +- +- Entry expires at +- ИÑтечение запиÑи +- +- +- Creation date +- Дата ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ +- +- +- Last modification date +- Дата поÑледнего Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ +- +- +- Last access date +- Дата поÑледнего доÑтупа +- +- +- Attached files +- Вложенные файлы +- +- +- Entry size +- Размер запиÑи +- +- +- Has attachments +- ИмеютÑÑ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ +- +- +- Has TOTP one-time password +- ИÑпользуетÑÑ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ñ‹Ð¹ одноразовый пароль +- +- +- +- EntryPreviewWidget +- +- Close +- Закрыть +- +- +- General +- Общие +- +- +- Username +- Логин +- +- +- Password +- Пароль +- +- +- Expiration +- Срок дейÑÑ‚Ð²Ð¸Ñ +- +- +- URL +- URL-Ð°Ð´Ñ€ÐµÑ +- +- +- Attributes +- Ðтрибуты +- +- +- Attachments +- Ð’Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ +- +- +- Notes +- ÐŸÑ€Ð¸Ð¼ÐµÑ‡Ð°Ð½Ð¸Ñ +- +- +- Autotype +- Ðвтоввод +- +- +- Window +- Окно +- +- +- Sequence +- ПоÑледовательноÑÑ‚ÑŒ +- +- +- Searching +- ПоиÑк +- +- +- Search +- ПоиÑк +- +- +- Clear +- ОчиÑтить +- +- +- Never +- Ðикогда +- +- +- [PROTECTED] +- [ЗÐЩИЩЕÐО] +- +- +- Enabled +- Включено +- +- +- Disabled +- Отключено +- +- +- Share +- ПредоÑтавить общий доÑтуп +- +- +- Display current TOTP value +- Показать текущее значение TOTP +- +- +- Advanced +- РаÑширенный режим +- +- +- Default Sequence +- +- +- +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- attributes line +- +- +- +- +- EntryURLModel +- +- Invalid URL +- Ðеверный URL +- +- +- +- EntryView +- +- Fit to window +- По размеру окна +- +- +- Fit to contents +- По размеру Ñодержимого +- +- +- Reset to defaults +- Ð¡Ð±Ñ€Ð¾Ñ Ð² Ñтандартные Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ +- +- +- Has attachments +- Entry attachment icon toggle +- ИмеютÑÑ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ +- +- +- Has TOTP +- Entry TOTP icon toggle +- ИÑпользует TOTP +- +- +- +- FdoSecrets::Item +- +- Entry "%1" from database "%2" was used by %3 +- ЗапиÑÑŒ «%1» из базы данных «%2» иÑпользована %3 +- +- +- +- FdoSecrets::Service +- +- Failed to register DBus service at %1.<br/> +- Ðе удалоÑÑŒ зарегиÑтрировать Ñлужбу DBus на %1.<br/> +- +- +- %n Entry(s) was used by %1 +- %1 is the name of an application +- %n запиÑÑŒ иÑпользована %1%n запиÑи иÑпользованы %1%n запиÑей иÑпользованы %1%n запиÑи иÑпользованы %1 +- +- +- +- FdoSecrets::SettingsDatabaseModel +- +- File Name +- Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° +- +- +- Group +- Группа +- +- +- Manage +- Управление +- +- +- Unlock to show +- Разблокируйте Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра +- +- +- None +- Ðет +- +- +- +- FdoSecrets::SettingsSessionModel +- +- Application +- Приложение +- +- +- Manage +- Управление +- +- +- +- FdoSecretsPlugin +- +- <b>Fdo Secret Service:</b> %1 +- <b>FDO Secret Service:</b> %1 +- +- +- Unknown +- Unknown PID +- ÐеизвеÑтен +- +- +- Unknown +- Unknown executable path +- ÐеизвеÑтен +- +- +- <i>PID: %1, Executable: %2</i> +- <i>PID: 1234, Executable: /path/to/exe</i> +- <i>ID процеÑÑа: %1, иÑполнÑемый файл: %2</i> +- +- +- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. +- Запущен другой Secret Service (%1)<br/>ПожалуйÑта отключите/удалите его перед тем как включать интеграцию Ñ Ð½Ð¸Ð¼. +- +- +- +- Group +- +- [empty] +- group has no children +- [пуÑто] +- +- +- +- HibpDownloader +- +- Online password validation failed +- Ðе удалоÑÑŒ проверить пароли онлайн +- +- +- +- IconDownloaderDialog +- +- Download Favicons +- Получение значков Ñайтов +- +- +- Cancel +- Отмена +- +- +- Having trouble downloading icons? +-You can enable the DuckDuckGo website icon service in the security section of the application settings. +- Ðе удалоÑÑŒ получить значки Ñайтов? +-Ð’ разделе «КонфиденциальноÑть» вкладки «БезопаÑноÑть» параметров Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ включить иÑпользование Ñлужбы значков Ñайта DuckDuckGo. +- +- +- Close +- Закрыть +- +- +- URL +- URL-Ð°Ð´Ñ€ÐµÑ +- +- +- Status +- Ð¡Ñ‚Ð°Ñ‚ÑƒÑ +- +- +- Please wait, processing entry list... +- ДождитеÑÑŒ Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ ÑпиÑка запиÑей… +- +- +- Downloading... +- Загрузка... +- +- +- Ok +- OK +- +- +- Already Exists +- Уже ÑущеÑтвует +- +- +- Download Failed +- Ошибка загрузки +- +- +- Downloading favicons (%1/%2)... +- Получение значков (%1 из %2)… +- +- +- +- KMessageWidget +- +- &Close +- &Закрыть +- +- +- Close message +- Закрыть Ñообщение +- +- +- +- Kdbx3Reader +- +- missing database headers +- отÑутÑтвуют заголовки базы данных +- +- +- Header doesn't match hash +- Заголовок не ÑоответÑтвует хешу +- +- +- Invalid header id size +- ÐедопуÑтимый размер идентификатора заголовка +- +- +- Invalid header field length +- ÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ Ð´Ð»Ð¸Ð½Ð° Ð¿Ð¾Ð»Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° +- +- +- Invalid header data length +- ÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ Ð´Ð»Ð¸Ð½Ð° данных заголовка +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- ВероÑтно, Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ð° были указанные неверные данные. +-Попробуйте ввеÑти данные ещё раз, еÑли ошибка повторитьÑÑ, возможно, файл базы данных повреждён. +- +- +- Unable to calculate database key +- Ðе удалоÑÑŒ вычиÑлить ключ базы данных +- +- +- Unable to issue challenge-response: %1 +- Ðе удалоÑÑŒ выполнить вызов-ответ: %1 +- +- +- +- Kdbx3Writer +- +- Unable to issue challenge-response: %1 +- Ðе удалоÑÑŒ выполнить вызов-ответ: %1 +- +- +- Unable to calculate database key +- Ðе удалоÑÑŒ вычиÑлить ключ базы данных +- +- +- +- Kdbx4Reader +- +- missing database headers +- отÑутÑтвуют заголовки базы данных +- +- +- Invalid header checksum size +- ÐедопуÑтимый размер контрольной Ñуммы заголовка +- +- +- Header SHA256 mismatch +- ÐеÑоответÑтвие SHA256 заголовка +- +- +- Unknown cipher +- ÐеизвеÑтный шифр +- +- +- Invalid header id size +- ÐедопуÑтимый размер идентификатора заголовка +- +- +- Invalid header field length +- ÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ Ð´Ð»Ð¸Ð½Ð° Ð¿Ð¾Ð»Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° +- +- +- Invalid header data length +- ÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ Ð´Ð»Ð¸Ð½Ð° данных заголовка +- +- +- Failed to open buffer for KDF parameters in header +- Ðе удалоÑÑŒ открыть буфер Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð² ФФК в заголовке +- +- +- Unsupported key derivation function (KDF) or invalid parameters +- Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡Ð° (ФФК) не поддерживаетÑÑ, либо неверные параметры +- +- +- Legacy header fields found in KDBX4 file. +- Ð’ файле KDBX4 обнаружены уÑтаревшие Ð¿Ð¾Ð»Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ¾Ð². +- +- +- Invalid inner header id size +- ÐедопуÑтимый внутренний идентификатор заголовка +- +- +- Invalid inner header field length +- ÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ Ð´Ð»Ð¸Ð½Ð° Ð¿Ð¾Ð»Ñ Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½ÐµÐ³Ð¾ заголовка +- +- +- Invalid inner header binary size +- ÐедопуÑтимый двоичный размер внутреннего заголовка +- +- +- Unsupported KeePass variant map version. +- Translation: variant map = data structure for storing meta data +- ÐÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ñтруктуры метаданных KeePass. +- +- +- Invalid variant map entry name length +- Translation: variant map = data structure for storing meta data +- ÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ Ð´Ð»Ð¸Ð½Ð° имени Ñтруктуры метаданных +- +- +- Invalid variant map entry name data +- Translation: variant map = data structure for storing meta data +- ÐедопуÑтимое Ð¸Ð¼Ñ Ð´Ð»Ñ Ñтруктуры метаданных +- +- +- Invalid variant map entry value length +- Translation: variant map = data structure for storing meta data +- ÐедопуÑтимое значение длины запиÑи в Ñтруктуре метаданных +- +- +- Invalid variant map entry value data +- Translation comment: variant map = data structure for storing meta data +- ÐедопуÑтимые Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñтруктуры метаданных +- +- +- Invalid variant map Bool entry value length +- Translation: variant map = data structure for storing meta data +- ÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ Ð´Ð»Ð¸Ð½Ð° логичеÑкого Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð² Ñтруктуре метаданных +- +- +- Invalid variant map Int32 entry value length +- Translation: variant map = data structure for storing meta data +- ÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ Ð´Ð»Ð¸Ð½Ð° Int32 Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð² Ñтруктуре метаданных +- +- +- Invalid variant map UInt32 entry value length +- Translation: variant map = data structure for storing meta data +- ÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ Ð´Ð»Ð¸Ð½Ð° UInt32 Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð² Ñтруктуре метаданных +- +- +- Invalid variant map Int64 entry value length +- Translation: variant map = data structure for storing meta data +- ÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ Ð´Ð»Ð¸Ð½Ð° Int64 Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð² Ñтруктуре метаданных +- +- +- Invalid variant map UInt64 entry value length +- Translation: variant map = data structure for storing meta data +- ÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ Ð´Ð»Ð¸Ð½Ð° UInt64 Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð² Ñтруктуре метаданных +- +- +- Invalid variant map entry type +- Translation: variant map = data structure for storing meta data +- ÐедопуÑтимый тип запиÑи в Ñтруктуре метаданных +- +- +- Invalid variant map field type size +- Translation: variant map = data structure for storing meta data +- ÐедопуÑтимый размер Ð¿Ð¾Ð»Ñ Ð¿Ð¾Ð»Ñ Ð² Ñтруктуре метаданных +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- ВероÑтно, Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ð° были указанные неверные данные. +-Попробуйте ввеÑти данные ещё раз, еÑли ошибка повторитьÑÑ, возможно, файл базы данных повреждён. +- +- +- (HMAC mismatch) +- (неÑоответÑтвие HMAC) +- +- +- Unable to calculate database key: %1 +- Ðе удалоÑÑŒ вычиÑлить ключ базы данных: %1 +- +- +- +- Kdbx4Writer +- +- Invalid symmetric cipher algorithm. +- ÐедопуÑтимый Ñимметричный алгоритм шифрованиÑ. +- +- +- Invalid symmetric cipher IV size. +- IV = Initialization Vector for symmetric cipher +- ÐедопуÑтимый размер Ñимметричного шифра IV. +- +- +- Failed to serialize KDF parameters variant map +- Translation comment: variant map = data structure for storing meta data +- Ошибка Ñериализации ФФК параметров Ñтруктуры матаданных +- +- +- Unable to calculate database key: %1 +- Ðе удалоÑÑŒ вычиÑлить ключ базы данных: %1 +- +- +- +- KdbxReader +- +- Unsupported cipher +- Ðеподдерживаемый шифр +- +- +- Invalid compression flags length +- ÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ Ð´Ð»Ð¸Ð½Ð° флагов ÑÐ¶Ð°Ñ‚Ð¸Ñ +- +- +- Unsupported compression algorithm +- Ðеподдерживаемый алгоритм ÑÐ¶Ð°Ñ‚Ð¸Ñ +- +- +- Invalid master seed size +- ÐедопуÑтимый размер оÑновного seed +- +- +- Invalid transform seed size +- ÐедопуÑтимый размер seed Ð´Ð»Ñ Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ +- +- +- Invalid transform rounds size +- ÐедопуÑтимый размер цикла Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ +- +- +- Invalid start bytes size +- ÐедопуÑтимый начальный размер байт +- +- +- Invalid random stream id size +- ÐедопуÑтимый размер индентификатора Ñлучайного потока +- +- +- Invalid inner random stream cipher +- ÐедопуÑтимый шифр Ñлучайного внутреннего потока +- +- +- Not a KeePass database. +- Ðе база данных KeePass. +- +- +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- Выбран файл Ñтарой базы данных KeePass 1 (.kdb). +- +-Ð’Ñ‹ можете импортировать его, нажав «База данных -> Импорт базы данных KeePass 1...». +-Это Ð½ÐµÐ¾Ð±Ñ€Ð°Ñ‚Ð¸Ð¼Ð°Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð°: импортированную базу Ð½ÐµÐ»ÑŒÐ·Ñ Ð±ÑƒÐ´ÐµÑ‚ открыть в Ñтарой верÑии KeePassX 0.4. +- +- +- Unsupported KeePass 2 database version. +- ÐÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ð±Ð°Ð·Ñ‹ данных KeePass 2. +- +- +- Invalid cipher uuid length: %1 (length=%2) +- ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° UUID шифра: %1 (длина=%2) +- +- +- Unable to parse UUID: %1 +- Ðе удаетÑÑ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ разбор UUID: %1 +- +- +- Failed to read database file. +- Ðе удалоÑÑŒ прочитать файл базы данных. +- +- +- +- KdbxXmlReader +- +- XML parsing failure: %1 +- Ошибка разбора XML: %1 +- +- +- No root group +- Ðет корневой группы +- +- +- Missing icon uuid or data +- Ðет UUID значка или данных +- +- +- Missing custom data key or value +- Ðет ключа пользовательÑких данных или Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ +- +- +- Multiple group elements +- ÐеÑколько Ñлементов группы +- +- +- Null group uuid +- UUID Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ NULL +- +- +- Invalid group icon number +- ÐедопуÑтимый номер значка группы +- +- +- Invalid EnableAutoType value +- ÐедопуÑтимое значение EnableAutoType +- +- +- Invalid EnableSearching value +- ÐедопуÑтимое значение EnableSearching +- +- +- No group uuid found +- Ðет UUID группы +- +- +- Null DeleteObject uuid +- UUID DeleteObject Null +- +- +- Missing DeletedObject uuid or time +- Ðет UUID или времени Ð´Ð»Ñ DeletedObject +- +- +- Null entry uuid +- UUID Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи Null +- +- +- Invalid entry icon number +- ÐедопуÑтимый номер значка запиÑи +- +- +- History element in history entry +- Элемент иÑтории в иÑтории запиÑи +- +- +- No entry uuid found +- Ðет UUID Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи +- +- +- History element with different uuid +- Элемент иÑтории Ñ Ð¾Ñ‚Ð»Ð¸Ñ‡Ð°ÑŽÑ‰Ð¸Ð¼ÑÑ UUID +- +- +- Duplicate custom attribute found +- Обнаружен повторÑющиеÑÑ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑкий атрибут +- +- +- Entry string key or value missing +- Ðет ключа или Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñи +- +- +- Entry binary key or value missing +- Ðет двоичного ключа или Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñи +- +- +- Auto-type association window or sequence missing +- Ðет окна или поÑледовательноÑти Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð²Ð²Ð¾Ð´Ð° +- +- +- Invalid bool value +- ÐедопуÑтимое логичеÑкое значение +- +- +- Invalid date time value +- ÐедопуÑтимое значение даты/времени +- +- +- Invalid color value +- ÐедопуÑтимое значение цвета +- +- +- Invalid color rgb part +- ÐедопуÑтимое значение чаÑти цвета RGB +- +- +- Invalid number value +- ÐедопуÑтимое чиÑловое значение +- +- +- Invalid uuid value +- ÐедопуÑтимое значение UUID +- +- +- Unable to decompress binary +- Translator meant is a binary data inside an entry +- Ðевозможно раÑпаковать двоичные данные +- +- +- XML error: +-%1 +-Line %2, column %3 +- Ошибка XML: +-%1 +-Строка %2, Ñтолбец %3 +- +- +- +- KeeAgentSettings +- +- Invalid KeeAgent settings file structure. +- ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ Ñтруктура файла параметров KeeAgent +- +- +- Private key is an attachment but no attachments provided. +- Закрытый ключ — Ñто вложение, но вложенные файлы отÑутÑтвуют. +- +- +- Private key is empty +- Закрытый ключ не Ñодержит данных +- +- +- File too large to be a private key +- Слишком большой файл Ð´Ð»Ñ Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¾Ð³Ð¾ ключа +- +- +- Failed to open private key +- Ðе удалоÑÑŒ открыть закрытый ключ +- +- +- +- KeePass1OpenWidget +- +- Unable to open the database. +- Ðевозможно открыть базу данных. +- +- +- Import KeePass1 Database +- Импортировать базу данных в формате KeePass1 +- +- +- +- KeePass1Reader +- +- Unable to read keyfile. +- Ðевозможно прочитать файл-ключ. +- +- +- Not a KeePass database. +- Ðе база данных KeePass. +- +- +- Unsupported encryption algorithm. +- Ðлгоритм ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ðµ поддерживаетÑÑ. +- +- +- Unsupported KeePass database version. +- ВерÑÐ¸Ñ Ð±Ð°Ð·Ñ‹ данных KeePass не поддерживаетÑÑ. +- +- +- Unable to read encryption IV +- IV = Initialization Vector for symmetric cipher +- Ðевозможно прочитать шифрование IV +- +- +- Invalid number of groups +- ÐедопуÑтимое количеÑтво групп +- +- +- Invalid number of entries +- ÐедопуÑтимое количеÑтво запиÑей +- +- +- Invalid content hash size +- ÐедопуÑтимый размер хеша Ñодержимого +- +- +- Invalid transform seed size +- ÐедопуÑтимый размер seed Ð´Ð»Ñ Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ +- +- +- Invalid number of transform rounds +- ÐедопуÑтимое чиÑло циклов Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ +- +- +- Unable to construct group tree +- Ðе удалоÑÑŒ Ñоздать дерево групп +- +- +- Root +- Корень +- +- +- Key transformation failed +- Ðе удалоÑÑŒ выполнить преобразование ключа +- +- +- Invalid group field type number +- ÐедопуÑтимый тип Ð¿Ð¾Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ +- +- +- Invalid group field size +- ÐедопуÑтимый размер Ð¿Ð¾Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ +- +- +- Read group field data doesn't match size +- Ðе ÑоответÑтвует размер облаÑти данных группы +- +- +- Incorrect group id field size +- Ðеверный размер Ð¿Ð¾Ð»Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð° группы +- +- +- Incorrect group creation time field size +- Ðеверный размер Ð¿Ð¾Ð»Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ +- +- +- Incorrect group modification time field size +- Ðеверный размер Ð¿Ð¾Ð»Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ +- +- +- Incorrect group access time field size +- Ðеверный размер Ð¿Ð¾Ð»Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸ доÑтупа к группе +- +- +- Incorrect group expiry time field size +- Ðеверный размер Ð¿Ð¾Ð»Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸ иÑÑ‚ÐµÑ‡ÐµÐ½Ð¸Ñ Ñрока дейÑÑ‚Ð²Ð¸Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ +- +- +- Incorrect group icon field size +- Ðеверный размер Ð¿Ð¾Ð»Ñ Ð·Ð½Ð°Ñ‡ÐºÐ° группы +- +- +- Incorrect group level field size +- Ðеверный размер Ð¿Ð¾Ð»Ñ ÑƒÑ€Ð¾Ð²Ð½Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ +- +- +- Invalid group field type +- ÐедопуÑтимый тип Ð¿Ð¾Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ +- +- +- Missing group id or level +- Ðет группового идентификатора или ÑƒÑ€Ð¾Ð²Ð½Ñ +- +- +- Missing entry field type number +- Ðет номера типа Ð¿Ð¾Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи +- +- +- Invalid entry field size +- Ðеверный размер Ð¿Ð¾Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи +- +- +- Read entry field data doesn't match size +- ÐŸÐ¾Ð»Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… запиÑи не ÑоответÑтвуют размеру +- +- +- Invalid entry uuid field size +- Ðеверный размер Ð¿Ð¾Ð»Ñ UUID запиÑи +- +- +- Invalid entry group id field size +- ÐедопуÑтимый размер Ð¿Ð¾Ð»Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð° запиÑи группы +- +- +- Invalid entry icon field size +- ÐедопуÑтимый размер Ð¿Ð¾Ð»Ñ Ð·Ð½Ð°Ñ‡ÐºÐ° запиÑи +- +- +- Invalid entry creation time field size +- ÐедопуÑтимный размер Ð¿Ð¾Ð»Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñи +- +- +- Invalid entry modification time field size +- ÐедопуÑтимый размер Ð¿Ð¾Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´Ð°Ñ‚Ñ‹ ввода +- +- +- Invalid entry expiry time field size +- ÐедопуÑтимый размер Ð¿Ð¾Ð»Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸ Ñрока дейÑÑ‚Ð²Ð¸Ñ +- +- +- Invalid entry field type +- ÐедопуÑтимый тип Ð¿Ð¾Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи +- +- +- unable to seek to content position +- не удалоÑÑŒ перемеÑтитьÑÑ Ðº позиции Ñодержимого +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- ВероÑтно, Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ð° были указанные неверные данные. +-Попробуйте ввеÑти данные ещё раз, еÑли ошибка повторитьÑÑ, возможно, файл базы данных повреждён. +- +- +- Unable to calculate database key +- Ðе удалоÑÑŒ вычиÑлить ключ базы данных +- +- +- +- KeeShare +- +- Invalid sharing reference +- ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ ÑÑылка общего доÑтупа +- +- +- Inactive share %1 +- ÐÐµÐ°ÐºÑ‚Ð¸Ð²Ð½Ð°Ñ Ð¾Ð±Ñ‰Ð°Ñ Ð±Ð°Ð·Ð° %1 +- +- +- Imported from %1 +- Импортировано из %1 +- +- +- Exported to %1 +- Выполнен ÑкÑпорт в «%1» +- +- +- Synchronized with %1 +- Синхронизировано Ñ Â«%1» +- +- +- Import is disabled in settings +- ВозможноÑÑ‚ÑŒ импортировать отключена в параметрах программы +- +- +- Export is disabled in settings +- ВозможноÑÑ‚ÑŒ ÑкÑпорировать отключена в параметрах программы +- +- +- Inactive share +- ÐÐµÐ°ÐºÑ‚Ð¸Ð²Ð½Ð°Ñ Ð¾Ð±Ñ‰Ð°Ñ Ð±Ð°Ð·Ð° +- +- +- Imported from +- Импортировано из +- +- +- Exported to +- ЭкÑпортировано в +- +- +- Synchronized with +- Синхронизировано Ñ +- +- +- +- KeyComponentWidget +- +- Key Component +- Ключевой компонент +- +- +- Key Component Description +- ОпиÑание ключевого компонента +- +- +- Cancel +- Отмена +- +- +- Key Component set, click to change or remove +- Ключевой компонент уÑтановлен, нажмите, чтобы изменить или удалить +- +- +- Add %1 +- Add a key component +- Добавить %1 +- +- +- Change %1 +- Change a key component +- Изменить %1 +- +- +- Remove %1 +- Remove a key component +- Удалить %1 +- +- +- %1 set, click to change or remove +- Change or remove a key component +- %1 уÑтановлен, нажмите, чтобы изменить или удалить +- +- +- +- KeyFileEditWidget +- +- Generate +- Генерировать +- +- +- Key File +- Файл-ключ +- +- +- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> +- <p>Ð”Ð»Ñ Ð±Ð¾Ð»ÑŒÑˆÐµÐ¹ безопаÑноÑти вы можете добавить файл-ключ Ñо Ñлучайным Ñодержимым.</p><p>Храните его в надёжном меÑте и не терÑйте, иначе доÑтуп к базе будет заблокирован.</p> +- +- +- Error loading the key file '%1' +-Message: %2 +- Ошибка загрузки ключевого файла '%1' +-Сообщение: %2 +- +- +- Key files +- Файлы-ключи +- +- +- All files +- Ð’Ñе файлы +- +- +- Create Key File... +- Создать файл-ключ… +- +- +- Error creating key file +- Ошибка ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð°-ключа +- +- +- Unable to create key file: %1 +- Ðевозможно Ñоздать файл-ключ: %1 +- +- +- Select a key file +- Выберите файл-ключ +- +- +- Key file selection +- Выбор файла-ключа +- +- +- Browse for key file +- Открыть диалога выбора файла-ключа +- +- +- Browse... +- Обзор… +- +- +- Generate a new key file +- Создать новый файл-ключ +- +- +- Note: Do not use a file that may change as that will prevent you from unlocking your database! +- Внимание: изменение файла приведёт к невозможноÑти разблокировать базу данных! +- +- +- Invalid Key File +- Ðеверный файл-ключ +- +- +- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. +- Файл базы данных не может быть иÑпользован в качеÑтве файла-ключа. Выберите другой файл или Ñоздайте файл-ключ. +- +- +- Suspicious Key File +- Подозрительный файл-ключ +- +- +- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. +-Are you sure you want to continue with this file? +- Выбранный файл-ключ, вероÑтно, ÑвлÑетÑÑ Ñ„Ð°Ð¹Ð»Ð¾Ð¼ базы данных паролей. Файл-ключ должен ÑвлÑÑ‚ÑŒÑÑ Ð½ÐµÐ¸Ð·Ð¼ÐµÐ½Ñемым файлом, в противном Ñлучае доÑтуп к базе данных будет безвозвратно утерÑн. +-Продолжить иÑпользовать выбранный файл? +- +- +- Old key file format +- +- +- +- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. +- +- +- +- +- MainWindow +- +- &Database +- &База данных +- +- +- &Help +- &Справка +- +- +- &Groups +- &Группы +- +- +- &Tools +- Серв&Ð¸Ñ +- +- +- &Quit +- Ð’&ыход +- +- +- &About +- &О программе +- +- +- Database settings +- Параметры базы данных +- +- +- Copy username to clipboard +- Скопировать логин в буфер обмена +- +- +- Copy password to clipboard +- Скопировать пароль в буфер обмена +- +- +- &Settings +- &Параметры +- +- +- &Title +- Ðазван&ие +- +- +- Copy title to clipboard +- Скопировать название в буфер обмена +- +- +- &URL +- &URL-Ð°Ð´Ñ€ÐµÑ +- +- +- Copy URL to clipboard +- Скопировать URL-Ð°Ð´Ñ€ÐµÑ Ð² буфер обмена +- +- +- &Notes +- &ÐŸÑ€Ð¸Ð¼ÐµÑ‡Ð°Ð½Ð¸Ñ +- +- +- Copy notes to clipboard +- Скопировать Ð¿Ñ€Ð¸Ð¼ÐµÑ‡Ð°Ð½Ð¸Ñ Ð² буфер обмена +- +- +- Copy &TOTP +- Скопировать &TOTP +- +- +- E&mpty recycle bin +- О&чиÑтить корзину +- +- +- Clear history +- ОчиÑтить иÑторию +- +- +- Access error for config file %1 +- Ошибка доÑтупа к файлу конфигурации %1 +- +- +- Settings +- Параметры +- +- +- Toggle window +- Переключить окно +- +- +- Quit KeePassXC +- Закрыть KeePassXC +- +- +- Please touch the button on your YubiKey! +- Ðажмите кнопку на YubiKey! +- +- +- WARNING: You are using an unstable build of KeePassXC! +-There is a high risk of corruption, maintain a backup of your databases. +-This version is not meant for production use. +- Ð’ÐИМÐÐИЕ: ИÑпользуетÑÑ Ð½ÐµÑÑ‚Ð°Ð±Ð¸Ð»ÑŒÐ½Ð°Ñ Ñборка KeePassXC! +-ВеÑьма вероÑтно повреждение базы данных, Ñделайте её резервную копию. +-Эта верÑÐ¸Ñ Ð½Ðµ предназначена Ð´Ð»Ñ Ð¿Ð¾Ð²Ñедневного иÑпользованиÑ. +- +- +- &Donate +- &Пожертвовать +- +- +- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +-We recommend you use the AppImage available on our downloads page. +- Ð’ÐИМÐÐИЕ: Ваша верÑÐ¸Ñ Qt может привеÑти к ÑбоÑм KeePassXC при работе Ñ Ñкранной клавиатурой! +-Рекомендуем иÑпользовать AppImage (Ñм. нашу Ñтраницу загрузок). +- +- +- &Import +- &Импорт +- +- +- Create a new database +- Создать новую базу данных +- +- +- Merge from another KDBX database +- Объединить Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð¹ базой данных KDBX +- +- +- Add a new entry +- Добавить новую запиÑÑŒ +- +- +- View or edit entry +- Показать/изменить запиÑÑŒ +- +- +- Add a new group +- Добавить новую группу +- +- +- Perform &Auto-Type +- Выполнить а&втоввод +- +- +- Open &URL +- Открыть &URL +- +- +- Import a KeePass 1 database +- Импортировать базу данных KeePass 1 +- +- +- Import a CSV file +- Импортировать файл CSV +- +- +- NOTE: You are using a pre-release version of KeePassXC! +-Expect some bugs and minor issues, this version is not meant for production use. +- Ð’ÐИМÐÐИЕ: Ð’Ñ‹ иÑпользуете бета-верÑию KeePassXC! +-Ð’ ней возможны ошибки и небольшие проблемы, она не предназначена Ð´Ð»Ñ Ð¾Ñновного применениÑ. +- +- +- Check for updates on startup? +- ПроверÑÑ‚ÑŒ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ запуÑке? +- +- +- Would you like KeePassXC to check for updates on startup? +- Хотите проверÑÑ‚ÑŒ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ KeePassXC при запуÑке? +- +- +- You can always check for updates manually from the application menu. +- ПроверÑÑ‚ÑŒ наличие обновлений можно вручную из меню приложениÑ. +- +- +- &Export +- &ЭкÑпорт +- +- +- Sort &A-Z +- Сортировать &Ð-Я +- +- +- Sort &Z-A +- Сортировать &Я-Ð +- +- +- &Password Generator +- &Генератор паролей +- +- +- Import a 1Password Vault +- Импортировать хранилище 1Password +- +- +- &Getting Started +- &Ðачало работы +- +- +- &User Guide +- &РуководÑтво Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ +- +- +- &Keyboard Shortcuts +- &Комбинации клавиш +- +- +- &Recent Databases +- &Ðедавние базы данных +- +- +- &Entries +- &ЗапиÑи +- +- +- Copy Att&ribute +- Скопировать ат&рибут +- +- +- TOTP +- TOTP +- +- +- View +- Вид +- +- +- Theme +- Оформление +- +- +- &Check for Updates +- &Проверить Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ +- +- +- &Open Database… +- &Открыть базу данных… +- +- +- &Save Database +- &Сохранить базу данных +- +- +- &Close Database +- &Закрыть базу данных +- +- +- &New Database… +- Со&здать базу даннных… +- +- +- &Merge From Database… +- Объе&динить Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð¹ базой данных... +- +- +- &New Entry… +- &Создать запиÑь… +- +- +- &Edit Entry… +- &Изменить запиÑь… +- +- +- &Delete Entry… +- &Удалить запиÑь… +- +- +- &New Group… +- &Создать группу… +- +- +- &Edit Group… +- &Изменить группу… +- +- +- &Delete Group… +- &Удалить группу… +- +- +- Download All &Favicons… +- Загрузить &значки Ñайтов Ð´Ð»Ñ Ð²Ñех запиÑей… +- +- +- Sa&ve Database As… +- &Сохранить базу данных как… +- +- +- Database &Security… +- &БезопаÑноÑÑŒ базы данных… +- +- +- Database &Reports... +- &Отчёты по базе данных… +- +- +- Statistics, health check, etc. +- СтатиÑтика, проверка безопаÑноÑти… +- +- +- &Database Settings… +- Параметры базы данных… +- +- +- &Clone Entry… +- &Клонировать запиÑь… +- +- +- Move u&p +- ПеремеÑтить &выше +- +- +- Move entry one step up +- ПеремеÑтить запиÑÑŒ выше на одну позицию +- +- +- Move do&wn +- ПеремеÑтить &ниже +- +- +- Move entry one step down +- ПеремеÑтить запиÑÑŒ ниже на одну позицию +- +- +- Copy &Username +- Скопировать &Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ +- +- +- Copy &Password +- Скопировать п&ароль +- +- +- Download &Favicon +- Загрузить &значок Ñайта +- +- +- &Lock Databases +- &Заблокировать базу данных +- +- +- &CSV File… +- Файл &CSV... +- +- +- &HTML File… +- Файл &HTML… +- +- +- KeePass 1 Database… +- База данных KeePass 1… +- +- +- 1Password Vault… +- Хранилище 1Password… +- +- +- CSV File… +- Файл &CSV... +- +- +- Show TOTP +- Показать TOTP +- +- +- Show QR Code +- Показать QR-код +- +- +- Set up TOTP… +- ÐаÑтроить TOTP… +- +- +- Report a &Bug +- Сообщить об &ошибке +- +- +- Open Getting Started Guide +- Открыть руководÑтво по началу работы +- +- +- &Online Help +- Справка в &интернете +- +- +- Go to online documentation +- Перейти к онлайн документации +- +- +- Open User Guide +- Открыть руководÑтво Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ +- +- +- Save Database Backup... +- Сохранить резервную копию базы… +- +- +- Add key to SSH Agent +- Добавить ключ к SSH-агент +- +- +- Remove key from SSH Agent +- Убрать ключ из агента SSH +- +- +- Compact Mode +- Компактный режим +- +- +- Automatic +- ÐвтоматичеÑки +- +- +- Light +- Ð¡Ð²ÐµÑ‚Ð»Ð°Ñ +- +- +- Dark +- Ð¢ÐµÐ¼Ð½Ð°Ñ +- +- +- Classic (Platform-native) +- КлаÑÑичеÑÐºÐ°Ñ (платформо-завиÑимаÑ) +- +- +- Show Toolbar +- Показать панель инÑтрументов +- +- +- Show Preview Panel +- Показывать панель предварительного проÑмотра +- +- +- Don't show again for this version +- Ðе показывать предупреждение Ð´Ð»Ñ Ñтой верÑии +- +- +- Restart Application? +- ПерезапуÑтить приложение? +- +- +- You must restart the application to apply this setting. Would you like to restart now? +- ТребуетÑÑ Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿ÑƒÑк Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñтого параметра. Выполнить перезапуÑк ÑейчаÑ? +- +- +- Perform Auto-Type Sequence +- Выполнить поÑледовательноÑÑ‚ÑŒ автоматичеÑкого ввода +- +- +- {USERNAME} +- {USERNAME} +- +- +- {USERNAME}{ENTER} +- {USERNAME}{ENTER} +- +- +- {PASSWORD} +- {PASSWORD} +- +- +- {PASSWORD}{ENTER} +- {PASSWORD}{ENTER} +- +- +- Always on Top +- +- +- +- Hide Usernames +- Скрыть логины +- +- +- Hide Passwords +- Скрыть пароли +- +- +- +- ManageDatabase +- +- Database settings +- Параметры базы данных +- +- +- Edit database settings +- Редактирование параметров базы данных +- +- +- Unlock database +- Разблокировать базу данных +- +- +- Unlock database to show more information +- Разблокируйте базу данных Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра дополнительных Ñведений +- +- +- Lock database +- Заблокировать базу данных +- +- +- +- ManageSession +- +- Disconnect +- Отключить +- +- +- Disconnect this application +- Отключить Ñто приложение +- +- +- +- Merger +- +- Creating missing %1 [%2] +- Создание отÑутÑтвующей %1 [%2] +- +- +- Relocating %1 [%2] +- Перемещение %1 [%2] +- +- +- Overwriting %1 [%2] +- ПерезапиÑÑŒ %1 [%2] +- +- +- older entry merged from database "%1" +- более ÑÑ‚Ð°Ñ€Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ из базы данных "%1" +- +- +- Adding backup for older target %1 [%2] +- Добавление резервной копии Ð´Ð»Ñ Ð±Ð¾Ð»ÐµÐµ Ñтарой цели %1 [%2] +- +- +- Adding backup for older source %1 [%2] +- Добавление резервной копии Ð´Ð»Ñ Ð±Ð¾Ð»ÐµÐµ Ñтарого иÑточника %1 [%2] +- +- +- Reapplying older target entry on top of newer source %1 [%2] +- Повторное применение более Ñтарой целевой запиÑи поверх более нового иÑточника %1 [%2] +- +- +- Reapplying older source entry on top of newer target %1 [%2] +- Повторное применение более Ñтарой иÑходной запиÑи поверх более новой целевой запиÑи %1 [%2] +- +- +- Synchronizing from newer source %1 [%2] +- Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ñ Ð±Ð¾Ð»ÐµÐµ новым иÑточником %1 [%2] +- +- +- Synchronizing from older source %1 [%2] +- Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ñ Ð±Ð¾Ð»ÐµÐµ Ñтарым иÑточником %1 [%2] +- +- +- Deleting child %1 [%2] +- Удаление дочерней запиÑи %1 [%2] +- +- +- Deleting orphan %1 [%2] +- Удаление «оÑиротевшей» запиÑи %1 [%2] +- +- +- Changed deleted objects +- Изменены удалённые объекты +- +- +- Adding missing icon %1 +- Добавление отÑутÑтвующего значка %1 +- +- +- Removed custom data %1 [%2] +- ПользовательÑкие данные %1 [%2] удалены +- +- +- Adding custom data %1 [%2] +- Добавление пользовательÑких данные %1 [%2] +- +- +- +- NewDatabaseWizard +- +- Create a new KeePassXC database... +- Создать новую базу данных KeePassXC +- +- +- Root +- Root group +- Корень +- +- +- +- NewDatabaseWizardPage +- +- WizardPage +- Страница маÑтера +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- ЗдеÑÑŒ можно наÑтроить параметры ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð±Ð°Ð·Ñ‹ данных. Их можно будет изменить позже в наÑтройках базы данных. +- +- +- Advanced Settings +- Дополнительные параметры +- +- +- Simple Settings +- ПроÑтые наÑтройки +- +- +- Encryption Settings +- Параметры ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ +- +- +- +- NewDatabaseWizardPageDatabaseKey +- +- Database Credentials +- ДоÑтуп к базе данных +- +- +- A set of credentials known only to you that protects your database. +- ИзвеÑтные только вам реквизиты Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ð°, защищающие базу данных. +- +- +- +- NewDatabaseWizardPageEncryption +- +- Encryption Settings +- Параметры ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- ЗдеÑÑŒ можно наÑтроить параметры ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð±Ð°Ð·Ñ‹ данных. Их можно будет изменить позже в наÑтройках базы данных. +- +- +- +- NewDatabaseWizardPageMetaData +- +- General Database Information +- ÐžÐ±Ñ‰Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ базе данных +- +- +- Please fill in the display name and an optional description for your new database: +- Заполните отображаемое Ð¸Ð¼Ñ Ð¸, при желании, опиÑание новой базы данных: +- +- +- +- NixUtils +- +- Password Manager +- Менеджер паролей +- +- +- +- OpData01 +- +- Invalid OpData01, does not contain header +- Данные OpData01 не Ñодержат заголовка +- +- +- Unable to read all IV bytes, wanted 16 but got %1 +- Ðевозможно Ñчитать вÑе данные вектора инициализации: ожидалоÑÑŒ 16 байт, но получено %1 байт +- +- +- Unable to init cipher for opdata01: %1 +- Ðевозможно инициализировать шифрование Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… opdata01: %1 +- +- +- Unable to read all HMAC signature bytes +- Ðе удалоÑÑŒ полноÑтью Ñчитать данные подпиÑи HMAC +- +- +- Malformed OpData01 due to a failed HMAC +- Повреждённые данные OpData01 по причине неверного HMAC +- +- +- Unable to process clearText in place +- Ðевозможно обработать проÑтой текÑÑ‚ +- +- +- Expected %1 bytes of clear-text, found %2 +- ОжидалоÑÑŒ %1 байт проÑтого текÑта, найдено %2 +- +- +- +- OpVaultOpenWidget +- +- Read Database did not produce an instance +-%1 +- Ðевозможно Ñоздать базу данных из прочитанного файла +-%1 +- +- +- +- OpVaultReader +- +- Directory .opvault must exist +- Ðе найден каталог «.opvault» +- +- +- Directory .opvault must be readable +- Каталог «.opvault» не доÑтупен Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ +- +- +- Directory .opvault/default must exist +- Ðе найден каталог «.opvault/default» +- +- +- Directory .opvault/default must be readable +- Каталог «.opvault/default» не доÑтупен Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ +- +- +- Unable to decode masterKey: %1 +- Ðе удалоÑÑŒ декодировать оÑновной ключ: %1 +- +- +- Unable to derive master key: %1 +- Ðе удалоÑÑŒ извлечь маÑтер-ключ: %1 +- +- +- +- OpenSSHKey +- +- Invalid key file, expecting an OpenSSH key +- ÐедопуÑтимый файл-ключ, ожидаетÑÑ ÐºÐ»ÑŽÑ‡ OpenSSH +- +- +- PEM boundary mismatch +- ÐеÑоответÑтвие границ PEM +- +- +- Base64 decoding failed +- Ошибка Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Base64 +- +- +- Key file way too small. +- Файл-ключ Ñлишком мал. +- +- +- Key file magic header id invalid +- ÐедопуÑтимый идентификатор заголовка файла-ключа. +- +- +- Found zero keys +- Обнаружены пуÑтые ключи +- +- +- Failed to read public key. +- Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¾Ð³Ð¾ (публичного) ключа. +- +- +- Corrupted key file, reading private key failed +- Файл-ключ повреждён, ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¾Ð³Ð¾ (личного) ключа +- +- +- No private key payload to decrypt +- Ðет данных Ð´Ð»Ñ Ñ€Ð°Ñшифровки в закрытом (личном) ключе +- +- +- Trying to run KDF without cipher +- Попытка запуÑтить ФФК без ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ +- +- +- Passphrase is required to decrypt this key +- Ð”Ð»Ñ Ñ€Ð°Ñшифровки Ñтого ключа требуетÑÑ Ð¿Ð°Ñ€Ð¾Ð»ÑŒ +- +- +- Key derivation failed, key file corrupted? +- Ошибка Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡Ð°, возможно, повреждён файл-ключ. +- +- +- Decryption failed, wrong passphrase? +- Ошибка раÑшифровки, неверный пароль? +- +- +- Unexpected EOF while reading public key +- Ðеожиданный конец файла при чтении открытого (публичного) ключа +- +- +- Unexpected EOF while reading private key +- Ðеожиданный конец файла при чтении закрытого (личного) ключа +- +- +- Can't write public key as it is empty +- Ðевозможно запиÑать открытый (публичный) ключ, так как он пуÑÑ‚ +- +- +- Unexpected EOF when writing public key +- Ðеожиданный конец файла при запиÑи открытого (публичного) ключа +- +- +- Can't write private key as it is empty +- Ðевозможно запиÑать закрытый (личный) ключ, так как он пуÑÑ‚ +- +- +- Unexpected EOF when writing private key +- Ðеожиданный конец файла при запиÑи закрытого (личного) ключа +- +- +- Unsupported key type: %1 +- Ðеподдерживаемый тип ключа: %1 +- +- +- Unknown cipher: %1 +- Ðеподдерживаемый шифр: %1 +- +- +- Cipher IV is too short for MD5 kdf +- Слишком короткий вектор инициализации (IV) Ð´Ð»Ñ MD5 ФФК +- +- +- Unknown KDF: %1 +- ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¤Ð¤Ðš: %1 +- +- +- Unknown key type: %1 +- ÐеизвеÑтный тип ключа: %1 +- +- +- +- PasswordEdit +- +- Passwords do not match +- Пароли не Ñовпадают +- +- +- Passwords match so far +- КоличеÑтво Ñовпавших паролей +- +- +- Toggle Password (%1) +- Скрыть или показать пароль (%1) +- +- +- Generate Password (%1) +- Сгенерировать пароль (%1) +- +- +- Warning: Caps Lock enabled! +- Внимание: включен режим CAPS LOCK. +- +- +- +- PasswordEditWidget +- +- Enter password: +- Введите пароль: +- +- +- Confirm password: +- Подтвердите пароль: +- +- +- Password +- Пароль +- +- +- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> +- <p>Пароль - Ñто оÑновной метод защиты базы данных.</p><p>Хороший пароль должен быть длинным и уникальным. KeePassXC может Ñгенерировать его Ñам.</p> +- +- +- Passwords do not match. +- Пароли не Ñовпадают. +- +- +- Password field +- Поле Ð¿Ð°Ñ€Ð¾Ð»Ñ +- +- +- Repeat password field +- Поле повтора Ð¿Ð°Ñ€Ð¾Ð»Ñ +- +- +- +- PasswordGeneratorWidget +- +- %p% +- %p% +- +- +- strength +- Password strength +- надёжноÑÑ‚ÑŒ +- +- +- entropy +- ÑÐ½Ñ‚Ñ€Ð¾Ð¿Ð¸Ñ +- +- +- Password +- Пароль +- +- +- Character Types +- Виды Ñимволов +- +- +- Numbers +- Цифры +- +- +- Extended ASCII +- РаÑширенный ASCII +- +- +- Exclude look-alike characters +- Ðе иÑпользовать визуально Ñхожие Ñимволы +- +- +- Pick characters from every group +- Подобрать Ñимволы из каждой группы +- +- +- &Length: +- &Длина: +- +- +- Passphrase +- ÐŸÐ°Ñ€Ð¾Ð»ÑŒÐ½Ð°Ñ Ñ„Ñ€Ð°Ð·Ð° +- +- +- Wordlist: +- СпиÑок Ñлов: +- +- +- Word Separator: +- Разделитель Ñлов: +- +- +- Close +- Закрыть +- +- +- Entropy: %1 bit +- ЭнтропиÑ: %1 бит +- +- +- Password Quality: %1 +- КачеÑтво паролÑ: %1 +- +- +- Poor +- Password quality +- Плохой +- +- +- Weak +- Password quality +- Слабый +- +- +- Good +- Password quality +- Хороший +- +- +- Excellent +- Password quality +- Отличный +- +- +- Switch to advanced mode +- Ð’ раÑширенный режим +- +- +- Advanced +- Дополнительно +- +- +- Braces +- Скобки +- +- +- Punctuation +- Знаки Ð¿Ñ€ÐµÐ¿Ð¸Ð½Ð°Ð½Ð¸Ñ +- +- +- Quotes +- Кавычки +- +- +- Logograms +- Логограммы +- +- +- Character set to exclude from generated password +- Ðабор Ñимволов Ð´Ð»Ñ Ð¸ÑÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð· Ñгенерированного Ð¿Ð°Ñ€Ð¾Ð»Ñ +- +- +- Do not include: +- Ðе включать: +- +- +- Add non-hex letters to "do not include" list +- Добавить не-шеÑтнадцатеричные буквы к ÑпиÑку иÑключений +- +- +- Hex +- Hex +- +- +- Excluded characters: "0", "1", "l", "I", "O", "|", "ï¹’" +- ИÑключить Ñимволы: «0», «1», «l», «I», «O», «|», «﹒» +- +- +- Generated password +- Сгенерированный пароль +- +- +- Upper-case letters +- Большие буквы +- +- +- Lower-case letters +- Маленькие буквы +- +- +- Special characters +- Специальные Ñимволы +- +- +- Math Symbols +- МатематичеÑкие Ñимволы +- +- +- Dashes and Slashes +- Тире и ÑлÑши +- +- +- Excluded characters +- ИÑключенные Ñимволы +- +- +- Hex Passwords +- Hex пароли +- +- +- Password length +- Длина Ð¿Ð°Ñ€Ð¾Ð»Ñ +- +- +- Word Case: +- РегиÑÑ‚Ñ€ Ñлов: +- +- +- Regenerate password +- Создать пароль заново +- +- +- Copy password +- Скопировать пароль +- +- +- lower case +- нижний региÑÑ‚Ñ€ +- +- +- UPPER CASE +- ВЕРХÐИЙ РЕГИСТР +- +- +- Title Case +- Каждое Слово С Заглавной Буквы +- +- +- Generate Password +- Создать пароль +- +- +- Also choose from: +- Дополнительные Ñимволы: +- +- +- Additional characters to use for the generated password +- Дополнительные Ñимволы +- +- +- Additional characters +- Дополнительные Ñимволы +- +- +- Word Count: +- КоличеÑтво Ñлов: +- +- +- Esc +- Esc +- +- +- Apply Password +- ИÑпользовать пароль +- +- +- Ctrl+S +- Ctrl+S +- +- +- Regenerate password (%1) +- Создать заново (%1) +- +- +- Special Characters +- Специальные Ñимволы +- +- +- +- QApplication +- +- KeeShare +- KeeShare +- +- +- Statistics +- СтатиÑтика +- +- +- Very weak password +- Очень Ñлабый пароль +- +- +- Password entropy is %1 bits +- Ð­Ð½Ñ‚Ñ€Ð¾Ð¿Ð¸Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ: %1 бит +- +- +- Weak password +- Слабый пароль +- +- +- Used in %1/%2 +- ИÑпользуетÑÑ Ð² %1/%2 +- +- +- Password is used %1 times +- Пароль иÑпользуетÑÑ %1 раз(а) +- +- +- Password has expired +- ИÑтёк Ñрок дейÑÑ‚Ð²Ð¸Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ +- +- +- Password expiry was %1 +- Срок дейÑÑ‚Ð²Ð¸Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð¸Ñтёк %1 +- +- +- Password is about to expire +- Срок дейÑÑ‚Ð²Ð¸Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ Ñкоро иÑтечёт +- +- +- Password expires in %1 days +- Срок дейÑÑ‚Ð²Ð¸Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð¸Ñтечёт через %1 Ð´Ð½Ñ (дней). +- +- +- Password will expire soon +- Срок дейÑÑ‚Ð²Ð¸Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ Ñкоро иÑтечёт +- +- +- Password expires on %1 +- Срок дейÑÑ‚Ð²Ð¸Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð¸Ñтекает %1 +- +- +- Health Check +- Проверка безопаÑноÑти +- +- +- HIBP +- HIBP +- +- +- +- QMessageBox +- +- Overwrite +- ПерезапиÑÑŒ +- +- +- Delete +- Удалить +- +- +- Move +- ПеремеÑтить +- +- +- Empty +- Удалить +- +- +- Remove +- Удалить +- +- +- Skip +- ПропуÑтить +- +- +- Disable +- Выключено +- +- +- Merge +- СлиÑние +- +- +- Continue +- Продолжить +- +- +- +- QObject +- +- Database not opened +- База данных не открыта +- +- +- Database hash not available +- ОтÑутÑтвует хеш базы данных +- +- +- Client public key not received +- Ðе получен открытый (публичный) ключ клиента +- +- +- Cannot decrypt message +- Ðевозможно раÑшифровать Ñообщение +- +- +- Action cancelled or denied +- ДейÑтвие отменено или запрещено +- +- +- KeePassXC association failed, try again +- ÐÑÑоциирование KeePassXC не выполнено, попробуйте ещё раз +- +- +- Encryption key is not recognized +- Ðе раÑпознан ключ ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ +- +- +- Incorrect action +- Ðеправильное дейÑтвие +- +- +- Empty message received +- Получено пуÑтое Ñообщение +- +- +- No URL provided +- Ðет URL-адреÑа +- +- +- No logins found +- Логины не найдены +- +- +- Unknown error +- ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° +- +- +- Add a new entry to a database. +- Добавить новую запиÑÑŒ в базу данных. +- +- +- Path of the database. +- Путь к базе данных. +- +- +- Key file of the database. +- Файл-ключ базы данных. +- +- +- path +- путь +- +- +- Username for the entry. +- Логин Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи. +- +- +- username +- логин +- +- +- URL for the entry. +- URL-Ð°Ð´Ñ€ÐµÑ Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи +- +- +- URL +- URL-Ð°Ð´Ñ€ÐµÑ +- +- +- Prompt for the entry's password. +- Введите пароль запиÑи. +- +- +- Generate a password for the entry. +- Сгенерировать пароль Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи. +- +- +- length +- длина +- +- +- Path of the entry to add. +- Путь к запиÑи Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ. +- +- +- Path of the entry to clip. +- clip = copy to clipboard +- Скопировать путь к запиÑи. +- +- +- Timeout in seconds before clearing the clipboard. +- Ð’Ñ€ÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð² Ñекундах до очиÑтки буфера обмена. +- +- +- Edit an entry. +- Редактирование запиÑи. +- +- +- Title for the entry. +- Ðазвание запиÑи. +- +- +- title +- название +- +- +- Path of the entry to edit. +- Путь к запиÑи Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ. +- +- +- Estimate the entropy of a password. +- Оценка Ñнтропии паролÑ. +- +- +- Password for which to estimate the entropy. +- Пароль Ð´Ð»Ñ Ð¾Ñ†ÐµÐ½ÐºÐ¸ Ñнтропии. +- +- +- Perform advanced analysis on the password. +- Выполнить раÑширенный анализ паролÑ. +- +- +- +- +-Available commands: +- +- +- +-ДоÑтупные команды: +- +- +- +- Name of the command to execute. +- Ð˜Ð¼Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ñемой команды. +- +- +- List database entries. +- СпиÑок запиÑей в базе данных. +- +- +- Path of the group to list. Default is / +- Путь к ÑпиÑку группы. Значение по умолчанию / +- +- +- Find entries quickly. +- БыÑтрый поиÑк запиÑей. +- +- +- Search term. +- ПоиÑковый запроÑ. +- +- +- Merge two databases. +- Объединить две базы данных. +- +- +- Path of the database to merge from. +- Путь к базе-иÑточнику Ð´Ð»Ñ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ. +- +- +- Use the same credentials for both database files. +- ИÑпользуйте те же учетные данные Ð´Ð»Ñ Ð¾Ð±Ð¾Ð¸Ñ… файлов базы данных. +- +- +- Key file of the database to merge from. +- Ключевой файл базы данных Ð´Ð»Ñ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ. +- +- +- Show an entry's information. +- Показать ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ запиÑÑÑ…. +- +- +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- Имена атрибутов Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ. Эта Ð¾Ð¿Ñ†Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ‚ быть указана более одного раза - каждый атрибут будет показан по одному в Ñтроке в заданном порÑдке. ЕÑли атрибуты не указаны, даётÑÑ Ñводка атрибутов по умолчанию. +- +- +- attribute +- атрибут +- +- +- Name of the entry to show. +- Ðазвание запиÑи Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ. +- +- +- NULL device +- УÑтройÑтво NULL +- +- +- error reading from device +- Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸Ð· уÑтройÑтва +- +- +- malformed string +- ÐÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ñтрока +- +- +- missing closing quote +- ОтÑутÑтвует Ð·Ð°ÐºÑ€Ñ‹Ð²Ð°ÑŽÑ‰Ð°Ñ ÐºÐ°Ð²Ñ‹Ñ‡ÐºÐ° +- +- +- Group +- Группа +- +- +- Title +- Ðазвание +- +- +- Username +- Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ +- +- +- Password +- Пароль +- +- +- Notes +- ÐŸÑ€Ð¸Ð¼ÐµÑ‡Ð°Ð½Ð¸Ñ +- +- +- Last Modified +- Изменён +- +- +- Created +- Создан +- +- +- Browser Integration +- Ð˜Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ñ Ð±Ñ€Ð°ÑƒÐ·ÐµÑ€Ð¾Ð¼ +- +- +- SSH Agent +- SSH-агент +- +- +- Generate a new random diceware passphrase. +- Сгенерировать новую парольную фразу. +- +- +- Word count for the diceware passphrase. +- КоличеÑтво Ñлов Ð´Ð»Ñ Ð¿Ð°Ñ€Ð¾Ð»ÑŒÐ½Ð¾Ð¹ фразы. +- +- +- Wordlist for the diceware generator. +-[Default: EFF English] +- СпиÑок Ñлов Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ‚Ð¾Ñ€Ð° парольной фразы. +-[По умолчанию: ÐнглийÑкий EFF] +- +- +- Generate a new random password. +- Сгенерировать новый Ñлучайный пароль. +- +- +- Could not create entry with path %1. +- Ðе удалоÑÑŒ Ñоздать запиÑÑŒ Ñ Ð¿ÑƒÑ‚Ñ‘Ð¼ %1. +- +- +- Enter password for new entry: +- Введите пароль Ð´Ð»Ñ Ð½Ð¾Ð²Ð¾Ð¹ запиÑи: +- +- +- Writing the database failed %1. +- ЗапиÑÑŒ базы данных не удалаÑÑŒ %1. +- +- +- Successfully added entry %1. +- УÑпешно добавлена запиÑÑŒ %1. +- +- +- Invalid timeout value %1. +- Ðеверное значение времени Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ %1. +- +- +- Entry %1 not found. +- ЗапиÑÑŒ %1 не найдена. +- +- +- Entry with path %1 has no TOTP set up. +- У запиÑи Ñ Ð¿ÑƒÑ‚Ñ‘Ð¼ %1 не наÑтроен TOTP. +- +- +- Clearing the clipboard in %1 second(s)... +- Очищение буфера обмена через %1 Ñекунду...Очищение буфера обмена через %1 Ñекунды..Очищение буфера обмена через %1 Ñекунд...ОчиÑтка буфера обмена через %1 Ñек... +- +- +- Clipboard cleared! +- Буфер обмена очищен. +- +- +- Silence password prompt and other secondary outputs. +- Заглушить Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð¸ другие второÑтепенные выводы. +- +- +- count +- CLI parameter +- количеÑтво +- +- +- Could not find entry with path %1. +- Ðе удалоÑÑŒ найти запиÑÑŒ Ñ Ð¿ÑƒÑ‚Ñ‘Ð¼ %1. +- +- +- Not changing any field for entry %1. +- Ðе менÑÑŽÑ‚ÑÑ Ð½Ð¸ÐºÐ°ÐºÐ¸Ðµ Ð¿Ð¾Ð»Ñ Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи %1. +- +- +- Enter new password for entry: +- Введите новый пароль Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи: +- +- +- Writing the database failed: %1 +- Ошибка запиÑи базы данных: %1 +- +- +- Successfully edited entry %1. +- ЗапиÑÑŒ %1 отредактирована. +- +- +- Length %1 +- Длина %1 +- +- +- Entropy %1 +- Ð­Ð½Ñ‚Ñ€Ð¾Ð¿Ð¸Ñ %1 +- +- +- Log10 %1 +- Log10 %1 +- +- +- Multi-word extra bits %1 +- Дополнительные биты мультиÑлова %1 +- +- +- Type: Bruteforce +- Тип: перебор +- +- +- Type: Dictionary +- Тип: Ñловарь +- +- +- Type: Dict+Leet +- Тип: Ñловарь + замена букв цифрами и знаками +- +- +- Type: User Words +- Тип: пользовательÑкие Ñлова +- +- +- Type: User+Leet +- Тип: пользователь + замена букв цифрами и знаками +- +- +- Type: Repeated +- Тип: повторы +- +- +- Type: Sequence +- Тип: поÑледовательноÑÑ‚ÑŒ +- +- +- Type: Spatial +- Тип: проÑтранÑтвенный +- +- +- Type: Date +- Тип: дата +- +- +- Type: Bruteforce(Rep) +- Тип: перебор (повт.) +- +- +- Type: Dictionary(Rep) +- Тип: Ñловарь (повт.) +- +- +- Type: Dict+Leet(Rep) +- Тип: Ñловарь + замена букв цифрами и знаками (повт.) +- +- +- Type: User Words(Rep) +- Тип: пользовательÑкие Ñлова (повт.) +- +- +- Type: User+Leet(Rep) +- Тип: Пользователь + замена букв цифрами и знаками (повт.) +- +- +- Type: Repeated(Rep) +- Тип: повторы (повт.) +- +- +- Type: Sequence(Rep) +- Тип: поÑледовательноÑÑ‚ÑŒ (повт.) +- +- +- Type: Spatial(Rep) +- Тип: проÑтранÑтвенный (повт.) +- +- +- Type: Date(Rep) +- Тип: дата (повт.) +- +- +- Type: Unknown%1 +- Тип: неизвеÑтный%1 +- +- +- Entropy %1 (%2) +- Ð­Ð½Ñ‚Ñ€Ð¾Ð¿Ð¸Ñ %1 (%2) +- +- +- *** Password length (%1) != sum of length of parts (%2) *** +- *** Длина Ð¿Ð°Ñ€Ð¾Ð»Ñ (%1) != Ñумма длин чаÑтей (%2) *** +- +- +- Failed to load key file %1: %2 +- Ошибка загрузки ключевого файла %1: %2 +- +- +- Length of the generated password +- Длина генерируемого Ð¿Ð°Ñ€Ð¾Ð»Ñ +- +- +- Use lowercase characters +- ИÑпользовать Ñтрочные буквы +- +- +- Use uppercase characters +- ИÑпользовать заглавные буквы +- +- +- Use special characters +- ИÑпользовать Ñпециальные Ñимволы +- +- +- Use extended ASCII +- ИÑпользовать раÑширенный набор ASCII +- +- +- Exclude character set +- ИÑключить набор Ñимволов +- +- +- chars +- Ñимв. +- +- +- Exclude similar looking characters +- ИÑключать похожие Ñимволы +- +- +- Include characters from every selected group +- Включать Ñимволы из каждой выбранной группы +- +- +- Recursively list the elements of the group. +- РекурÑивный ÑпиÑок Ñлементов группы. +- +- +- Cannot find group %1. +- Ðевозможно найти группу %1. +- +- +- Error reading merge file: +-%1 +- Ошибка при чтении объединÑемого файла: +-%1 +- +- +- Unable to save database to file : %1 +- Ðевозможно Ñохранить базу данных в файл: %1 +- +- +- Unable to save database to file: %1 +- Ðевозможно Ñохранить базу данных в файл: %1 +- +- +- Successfully recycled entry %1. +- ЗапиÑÑŒ %1 перемещена в корзину. +- +- +- Successfully deleted entry %1. +- ЗапиÑÑŒ %1 удалена. +- +- +- Show the entry's current TOTP. +- Показать текущий TOTP запиÑи. +- +- +- ERROR: unknown attribute %1. +- ОШИБКÐ: ÐеизвеÑтный атрибут %1. +- +- +- No program defined for clipboard manipulation +- Ðе задана программа Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð±ÑƒÑ„ÐµÑ€Ð¾Ð¼ обмена +- +- +- file empty +- пуÑтой файл +- +- +- %1: (row, col) %2,%3 +- %1: (Ñтрока, Ñтолбец) %2,%3 +- +- +- AES-KDF (KDBX 4) +- AES-KDF (KDBX 4) +- +- +- AES-KDF (KDBX 3.1) +- AES-KDF (KDBX 3.1) +- +- +- Invalid Settings +- TOTP +- ÐедопуÑтимые параметры +- +- +- Invalid Key +- TOTP +- ÐедопуÑтимый ключ +- +- +- Message encryption failed. +- Ошибка ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñообщений. +- +- +- No groups found +- Группы не найдены +- +- +- Create a new database. +- Создать новую базу данных. +- +- +- File %1 already exists. +- Файл %1 уже ÑущеÑтвует. +- +- +- Loading the key file failed +- Ошибка загрузки ключевого файла +- +- +- No key is set. Aborting database creation. +- Ðе задан ключ. Создание базы данных отменено. +- +- +- Failed to save the database: %1. +- Ошибка ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð±Ð°Ð·Ñ‹ данных: %1. +- +- +- Successfully created new database. +- ÐÐ¾Ð²Ð°Ñ Ð±Ð°Ð·Ð° данных уÑпешно Ñоздана. +- +- +- Creating KeyFile %1 failed: %2 +- Ошибка ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð°-ключа %1: %2 +- +- +- Loading KeyFile %1 failed: %2 +- Ошибка загрузки файла-ключа %1: %2 +- +- +- Path of the entry to remove. +- Путь к запиÑи Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ. +- +- +- Existing single-instance lock file is invalid. Launching new instance. +- Повреждён файл блокировки запуÑка. ЗапуÑкаетÑÑ Ð½Ð¾Ð²Ñ‹Ð¹ ÑкземплÑÑ€ программы. +- +- +- The lock file could not be created. Single-instance mode disabled. +- Ðевозможно Ñоздать файл блокировки. Режим недублирующего Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡Ñ‘Ð½. +- +- +- KeePassXC - cross-platform password manager +- KeePassXC - кроÑÑплатформенный менеджер паролей +- +- +- filenames of the password databases to open (*.kdbx) +- имена файлов открываемой базы данных паролей (*.kdbx) +- +- +- path to a custom config file +- путь к Ñвоему файлу наÑтроек +- +- +- key file of the database +- файл-ключ базы данных +- +- +- read password of the database from stdin +- читать пароли базы данных Ñ stdin +- +- +- Another instance of KeePassXC is already running. +- Другой ÑкземплÑÑ€ KeePassXC уже запущен. +- +- +- Fatal error while testing the cryptographic functions. +- ÐеуÑÑ‚Ñ€Ð°Ð½Ð¸Ð¼Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° при теÑтировании криптографичеÑких функций. +- +- +- KeePassXC - Error +- Ошибка - KeePassXC +- +- +- Database password: +- Пароль базы данных: +- +- +- Cannot create new group +- Ðевозможно Ñоздать новую группу +- +- +- Deactivate password key for the database. +- Отключить иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð°Ñ€Ð¾Ð»ÑŒÐ½Ð¾Ð³Ð¾ ключа базой данных. +- +- +- Displays debugging information. +- Выводить отладочную информацию. +- +- +- Deactivate password key for the database to merge from. +- Отключить иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð°Ñ€Ð¾Ð»ÑŒÐ½Ð¾Ð³Ð¾ ключа Ð´Ð»Ñ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½Ñемой базы данных. +- +- +- Version %1 +- ВерÑÐ¸Ñ %1 +- +- +- Build Type: %1 +- Тип Ñборки: %1 +- +- +- Revision: %1 +- РевизиÑ: %1 +- +- +- Distribution: %1 +- ДиÑтрибутив: %1 +- +- +- Debugging mode is disabled. +- Режим отладки выключен. +- +- +- Debugging mode is enabled. +- Режим отладки включен. +- +- +- Operating system: %1 +-CPU architecture: %2 +-Kernel: %3 %4 +- ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ ÑиÑтема: %1 +-Ðрхитектура ЦП: %2 +-Ядро: %3 %4 +- +- +- Auto-Type +- Ðвтоввод +- +- +- KeeShare (signed and unsigned sharing) +- KeeShare (доÑтуп Ñ Ð¸Ñпользованием подпиÑей и без) +- +- +- KeeShare (only signed sharing) +- KeeShare (доÑтуп только Ñ Ð¸Ñпользованием подпиÑи) +- +- +- KeeShare (only unsigned sharing) +- KeeShare (доÑтуп только без иÑпользованием подпиÑи) +- +- +- YubiKey +- YubiKey +- +- +- TouchID +- TouchID +- +- +- None +- Ðет +- +- +- Enabled extensions: +- Включённые раÑширениÑ: +- +- +- Cryptographic libraries: +- КриптографичеÑкие библиотеки: +- +- +- Cannot generate a password and prompt at the same time! +- Ðевозможно одновременно Ñоздать пароль и запроÑ. +- +- +- Adds a new group to a database. +- Добавить новую группу в базу данных. +- +- +- Path of the group to add. +- Путь к добавлÑемой группе. +- +- +- Group %1 already exists! +- Группа %1 уже ÑущеÑтвует. +- +- +- Group %1 not found. +- Группа %1 не найдена. +- +- +- Successfully added group %1. +- Группа %1 добавлена. +- +- +- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. +- Проверка паролей на компрометацию. Параметр ИМЯ_ФÐЙЛРдолжен быть путём к файлу данных ÑпиÑка SHA-1 Ñ…Ñшей паролей в формате HIBP, полученным, например, Ñ Ñайта https://haveibeenpwned.com/Passwords. +- +- +- FILENAME +- ИМЯ_ФÐЙЛР+- +- +- Analyze passwords for weaknesses and problems. +- Проверка надёжноÑти и других характериÑтик паролей. +- +- +- Failed to open HIBP file %1: %2 +- Ðе удалоÑÑŒ открыть файл в формате HIBP %1: %2 +- +- +- Evaluating database entries against HIBP file, this will take a while... +- ПроизводитÑÑ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ° запиÑей базы данных отноÑительно файла в формате HIBP… +- +- +- Close the currently opened database. +- Закрыть текущую базу данных. +- +- +- Display this help. +- Показать Ñту помощь. +- +- +- slot +- Ñлот +- +- +- Invalid word count %1 +- КоличеÑтво неверных Ñлов: %1 +- +- +- The word list is too small (< 1000 items) +- Словарь Ñлишком маленький (< 1000 Ñлов) +- +- +- Exit interactive mode. +- Покинуть интерактивный режим. +- +- +- Exports the content of a database to standard output in the specified format. +- ЭкÑпорт базы данных в заданном формате на уÑтройÑтво Ñтандартного вывода. +- +- +- Unable to export database to XML: %1 +- Ошибка ÑкÑÐ¿Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð±Ð°Ð·Ñ‹ данных в формат XML: %1 +- +- +- Unsupported format %1 +- Ðеподдерживаемый формат %1 +- +- +- Use numbers +- ИÑпользовать цифры +- +- +- Invalid password length %1 +- ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° Ð¿Ð°Ñ€Ð¾Ð»Ñ %1 +- +- +- Display command help. +- Показать Ñправку команды. +- +- +- Available commands: +- ДоÑтупные команды: +- +- +- Import the contents of an XML database. +- Импортировать базу данных в формате XML. +- +- +- Path of the XML database export. +- Путь Ð´Ð»Ñ ÑкÑпорта базы данных в формат XML +- +- +- Path of the new database. +- Путь до новой базы данных. +- +- +- Successfully imported database. +- База данных уÑпешно импортирована. +- +- +- Unknown command %1 +- ÐеизвеÑÑ‚Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %1 +- +- +- Flattens the output to single lines. +- Формирование вывода в виде отдельных Ñтрок. +- +- +- Only print the changes detected by the merge operation. +- Ðе выполнÑÑ‚ÑŒ объединение, а только Ñообщать о найденных изменениÑÑ… +- +- +- Yubikey slot for the second database. +- Слот Yubikey Ð´Ð»Ñ Ð²Ñ‚Ð¾Ñ€Ð¾Ð¹ базы данных. +- +- +- Successfully merged %1 into %2. +- %1 уÑпешно объединён Ñ %2. +- +- +- Database was not modified by merge operation. +- База данных не была изменена операцией объединениÑ. +- +- +- Moves an entry to a new group. +- Перемещение запиÑи в новую группу. +- +- +- Path of the entry to move. +- Путь к перемещаемой запиÑи. +- +- +- Path of the destination group. +- Путь к группе назначениÑ. +- +- +- Could not find group with path %1. +- Ðе удалоÑÑŒ найти группу Ñ Ð¿ÑƒÑ‚Ñ‘Ð¼ %1. +- +- +- Entry is already in group %1. +- ЗапиÑÑŒ уже ÑущеÑтвует в группе %1. +- +- +- Successfully moved entry %1 to group %2. +- ЗапиÑÑŒ %1 перемещена в группу %2. +- +- +- Open a database. +- Открыть базу данных. +- +- +- Path of the group to remove. +- Путь к удалÑемой группе. +- +- +- Cannot remove root group from database. +- Ðевозможно удалить корневую группу базы данных. +- +- +- Successfully recycled group %1. +- Группа %1 перемещена в корзину. +- +- +- Successfully deleted group %1. +- Группа %1 удалена. +- +- +- Failed to open database file %1: not found +- Ðе удалоÑÑŒ открыть базу данных «%1»: файл не найден +- +- +- Failed to open database file %1: not a plain file +- Ðе удалоÑÑŒ открыть базу данных «%1»: файл не ÑвлÑетÑÑ Ð¿Ñ€Ð¾Ñтым +- +- +- Failed to open database file %1: not readable +- Ðе удалоÑÑŒ открыть базу данных «%1»: файл не может быть прочитан +- +- +- Enter password to unlock %1: +- Введите пароль Ð´Ð»Ñ Ñ€Ð°Ð·Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²ÐºÐ¸ %1: +- +- +- Invalid YubiKey slot %1 +- ÐедейÑтвительный Ñлот Yubikey %1 +- +- +- Enter password to encrypt database (optional): +- Введите пароль Ð´Ð»Ñ ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð±Ð°Ð·Ñ‹ данных (необÑзательно): +- +- +- HIBP file, line %1: parse error +- Ошибка разбора Ñтроки %1 файла в формате HIBP +- +- +- Secret Service Integration +- Ð˜Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ñо Ñлужбой Secret Service +- +- +- User name +- Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ +- +- +- Password for '%1' has been leaked %2 time(s)! +- Пароль Ð´Ð»Ñ Â«%1» был замечен в утечках %2 раз.Пароль Ð´Ð»Ñ Â«%1» был замечен в утечках %2 раза.Пароль Ð´Ð»Ñ Â«%1» был замечен в утечках %2 раз.Пароль Ð´Ð»Ñ Â«%1» был замечен в утечках %2 раза. +- +- +- Invalid password generator after applying all options +- Ðевозможно Ñоздать пароль Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸ параметрами +- +- +- Show the protected attributes in clear text. +- Показать защищённый атрибут в виде проÑтого текÑта. +- +- +- Browser Plugin Failure +- Ошибка подключаемого Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð±Ñ€Ð°ÑƒÐ·ÐµÑ€Ð° +- +- +- Could not save the native messaging script file for %1. +- Ðе удаетÑÑ Ñохранить файл ÑÑ†ÐµÐ½Ð°Ñ€Ð¸Ñ Ð¼ÐµÑ…Ð°Ð½Ð¸Ð·Ð¼Ð° native messaging Ð´Ð»Ñ Â«%1». +- +- +- Copy the given attribute to the clipboard. Defaults to "password" if not specified. +- Скопировать указанный аттрибут в буфер обмена. ЕÑли аттрибут не указан, иÑпользуетÑÑ Ð¿Ð°Ñ€Ð¾Ð»ÑŒ. +- +- +- Copy the current TOTP to the clipboard (equivalent to "-a totp"). +- Скопировать текущий TOTP в буфер обмена (Ñквивалентно «-a totp»). +- +- +- Copy an entry's attribute to the clipboard. +- Скопировать в буфер обмена аттрибуты запиÑи. +- +- +- ERROR: Please specify one of --attribute or --totp, not both. +- ОШИБКÐ: ИÑпользуйте один из аргументов --attribute или --totp, а не оба. +- +- +- ERROR: attribute %1 is ambiguous, it matches %2. +- ОШИБКÐ: аттрибут %1 неоднозначный, он ÑоответÑтвует %2. +- +- +- Attribute "%1" not found. +- Ðттрибут «%1» не найден. +- +- +- Entry's "%1" attribute copied to the clipboard! +- Ðттрибуты запиÑи «%1» Ñкопированы в буфер обмена. +- +- +- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). +- Ðомер Ñлота ключа Yubikey и дополнительный Ñерийный номер Ð´Ð»Ñ Ð´Ð¾Ñтупа к базе данных (например: :7370001). +- +- +- slot[:serial] +- Ñлот[:serial] +- +- +- Target decryption time in MS for the database. +- Целевое Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°ÑÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ñ‹Ð²Ð°Ð½Ð¸Ñ Ð±Ð°Ð·Ñ‹ данных в миллиÑекундах. +- +- +- time +- Ð²Ñ€ÐµÐ¼Ñ +- +- +- Set the key file for the database. +- Задать файл-ключ базы данных. +- +- +- Set a password for the database. +- Задать пароль базы данных. +- +- +- Invalid decryption time %1. +- Ðеверное Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°ÑÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ñ‹Ð²Ð°Ð½Ð¸Ñ %1. +- +- +- Target decryption time must be between %1 and %2. +- Целевое Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°ÑÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ñ‹Ð²Ð°Ð½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð¾ находитьÑÑ Ð² интервале от %1 до %2. +- +- +- Failed to set database password. +- Ðе удалоÑÑŒ уÑтановить пароль базы данных. +- +- +- Benchmarking key derivation function for %1ms delay. +- ТеÑÑ‚ функции Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡Ð° на %1 Ð¼Ñ Ð·Ð°Ð´ÐµÑ€Ð¶ÐºÑƒ. +- +- +- Setting %1 rounds for key derivation function. +- Ð”Ð»Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡Ð° задано иÑпользование %1 раундов. +- +- +- error while setting database key derivation settings. +- ошибка при задании параметров базы данных Ð´Ð»Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡Ð°. +- +- +- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. +- Выбор формата файла Ð´Ð»Ñ ÑкÑпорта. Возможные варианты: XML (по умолчанию) или CSV. +- +- +- Unable to import XML database: %1 +- Ошибка импорта базы данных из формата XML: %1 +- +- +- Show a database's information. +- Показать ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ базе данных. +- +- +- UUID: +- UUID: +- +- +- Name: +- ИмÑ: +- +- +- Description: +- ОпиÑание: +- +- +- Cipher: +- Шифрование: +- +- +- KDF: +- KDF: +- +- +- Recycle bin is enabled. +- ИÑпользование корзины включено. +- +- +- Recycle bin is not enabled. +- ИÑпользование корзины не включено. +- +- +- Invalid command %1. +- ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°: %1. +- +- +- Invalid YubiKey serial %1 +- Ðеверный Ñерийный номер Yubikey %1 +- +- +- Please touch the button on your YubiKey to continue… +- Ð”Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ñ Ð½Ð°Ð¶Ð¼Ð¸Ñ‚Ðµ кнопку на уÑтройÑтве YubiKey… +- +- +- Do you want to create a database with an empty password? [y/N]: +- ИÑпользовать пуÑтой пароль базы данных? [y/N]: +- +- +- Repeat password: +- Повторите пароль: +- +- +- Error: Passwords do not match. +- Ошибка: пароли не Ñовпадают +- +- +- All clipping programs failed. Tried %1 +- +- Ðи одна программа ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ðµ Ñработала. Пробовали %1 +- +- +- AES (%1 rounds) +- AES (%1 раунд(а)) +- +- +- AES 256-bit +- AES 256 бит +- +- +- Twofish 256-bit +- Twofish 256-бит +- +- +- ChaCha20 256-bit +- ChaCha20: 256-бит {20 256-?} +- +- +- Benchmark %1 delay +- ТеÑÑ‚ %1-Ñекундной задержки +- +- +- %1 ms +- milliseconds +- %1 мÑ%1 мÑ%1 мÑ%1 Ð¼Ñ +- +- +- %1 s +- seconds +- %1 Ñ%1 Ñ%1 Ñ%1 Ñ +- +- +- path to a custom local config file +- +- +- +- WARNING: You are using an old key file format which KeePassXC may +-stop supporting in the future. +- +-Please consider generating a new key file. +- +- +- +- Argon2%1 (%2 rounds, %3 KB) +- +- +- +- Argon2d (KDBX 4 – recommended) +- +- +- +- Argon2id (KDBX 4) +- +- +- +- TOTP +- TOTP +- +- +- Icon +- Значок +- +- +- Unsupported key file version: %1 +- +- +- +- Checksum mismatch! Key file may be corrupt. +- +- +- +- Unexpected key file data! Key file may be corrupt. +- +- +- +- +- QtIOCompressor +- +- Internal zlib error when compressing: +- ВнутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ° zlib при Ñжатии: +- +- +- Error writing to underlying device: +- Ошибка запиÑи на оÑновное уÑтройÑтво: +- +- +- Error opening underlying device: +- Ошибка Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð¾Ñновного уÑтройÑтва: +- +- +- Error reading data from underlying device: +- Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ñ Ð¾Ñновного уÑтройÑтва: +- +- +- Internal zlib error when decompressing: +- ВнутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ° zlib при раÑпаковке: +- +- +- +- QtIOCompressor::open +- +- The gzip format not supported in this version of zlib. +- Формат gzip не поддерживаетÑÑ Ð² Ñтой верÑии zlib. +- +- +- Internal zlib error: +- ВнутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ° zlib: +- +- +- +- ReportsWidgetHealthcheck +- +- Also show entries that have been excluded from reports +- Также показать запиÑи, которые были иÑключены из отчётов +- +- +- Hover over reason to show additional details. Double-click entries to edit. +- Ðаведите курÑор чтобы проÑмотреть дополнительные ÑведениÑ. Ð”Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñи щелкните два раза левой кнопкой мыши. +- +- +- Bad +- Password quality +- Плохой +- +- +- Bad — password must be changed +- Плохой — пароль должен быть изменён +- +- +- Poor +- Password quality +- Слабый +- +- +- Poor — password should be changed +- Так Ñебе — пароль Ñледует изменить +- +- +- Weak +- Password quality +- Слабый +- +- +- Weak — consider changing the password +- Слабый — пароль желательно изменить +- +- +- (Excluded) +- (ИÑключено) +- +- +- This entry is being excluded from reports +- Эта запиÑÑŒ иÑключена из отчёта +- +- +- Please wait, health data is being calculated... +- Отчёт готовитÑÑ... +- +- +- Congratulations, everything is healthy! +- Проблем безопаÑноÑти не найдено. +- +- +- Title +- Заголовок +- +- +- Path +- Путь +- +- +- Score +- Рейтинг +- +- +- Reason +- Причина +- +- +- Edit Entry... +- Редактировать ЗапиÑÑŒ... +- +- +- Exclude from reports +- ИÑключить из отчетов +- +- +- +- ReportsWidgetHibp +- +- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. +- Ð’ÐИМÐÐИЕ: Ð”Ð»Ñ Ð¿Ð¾Ð´Ð³Ð¾Ñ‚Ð¾Ð²ÐºÐ¸ Ñтого отчёта данные будут переданы в Ñлужбу «Have I Been Pwned» (https://haveibeenpwned.com) в виде первых пÑти Ñимволов от хеша паролÑ. Другие ÑведениÑ, за иÑключением количеÑтва паролей и IP-адреÑа, не передаютÑÑ. +- +- +- Perform Online Analysis +- Выполнить анализ онлайн +- +- +- Also show entries that have been excluded from reports +- Также показать запиÑи, которые были иÑключены из отчётов +- +- +- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. +- Эта Ñборка KeePassXC не имеет Ñетевых функций. Сеть необходима Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸ паролей по базе данных "Have I Been Pwned". +- +- +- Congratulations, no exposed passwords! +- ПоздравлÑем, нет раÑкрытых паролей! +- +- +- Title +- Заголовок +- +- +- Path +- Путь +- +- +- Password exposed… +- Пароль опубликован... +- +- +- (Excluded) +- (ИÑключено) +- +- +- This entry is being excluded from reports +- Эта запиÑÑŒ иÑключена из отчёта +- +- +- once +- один раз +- +- +- up to 10 times +- до деÑÑти раз +- +- +- up to 100 times +- до Ñта раз +- +- +- up to 1000 times +- до Ñ‚Ñ‹ÑÑчи раз +- +- +- up to 10,000 times +- до 10 000 раз +- +- +- up to 100,000 times +- до 100 000 раз +- +- +- up to a million times +- до миллиона раз +- +- +- millions of times +- миллионов раз +- +- +- Edit Entry... +- Редактировать ЗапиÑÑŒ... +- +- +- Exclude from reports +- ИÑключить из отчетов +- +- +- +- ReportsWidgetStatistics +- +- Hover over lines with error icons for further information. +- Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации наведите курÑор мыши на Ñтроки, Ñодержащие значок ошибки. +- +- +- Name +- Ð˜Ð¼Ñ +- +- +- Value +- Значение +- +- +- Please wait, database statistics are being calculated... +- Подождите, выполнÑетÑÑ Ñбор ÑтатиÑтики… +- +- +- Database name +- Ð˜Ð¼Ñ Ð±Ð°Ð·Ñ‹ данных +- +- +- Description +- ОпиÑание +- +- +- Location +- РаÑположение +- +- +- Last saved +- ПоÑледнее Ñохранение +- +- +- Unsaved changes +- ÐеÑохраненные Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ +- +- +- yes +- да +- +- +- no +- нет +- +- +- The database was modified, but the changes have not yet been saved to disk. +- База данных была изменена, но Ñти Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÐµÑ‰Ñ‘ не были Ñохранены на диÑк. +- +- +- Number of groups +- КоличеÑтво групп +- +- +- Number of entries +- КоличеÑтво запиÑей +- +- +- Number of expired entries +- КоличеÑтво иÑтёкших запиÑей +- +- +- The database contains entries that have expired. +- База данных Ñодержит запиÑи, Ñрок дейÑÑ‚Ð²Ð¸Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… иÑтёк. +- +- +- Unique passwords +- Уникальные пароли +- +- +- Non-unique passwords +- Ðеуникальные пароли +- +- +- More than 10% of passwords are reused. Use unique passwords when possible. +- Ð”Ð»Ñ Ð±Ð¾Ð»ÐµÐµ 10% запиÑей иÑпользуютÑÑ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÑющиеÑÑ Ð¿Ð°Ñ€Ð¾Ð»Ð¸. ИÑпользуйте уникальные пароли, когда Ñто возможно. +- +- +- Maximum password reuse +- МакÑимальное количеÑтво повторных иÑпользований Ð¿Ð°Ñ€Ð¾Ð»Ñ +- +- +- Some passwords are used more than three times. Use unique passwords when possible. +- Ðекоторые пароли иÑпользуютÑÑ Ð±Ð¾Ð»ÐµÐµ трёх раз. ИÑпользуйте уникальные пароли, когда Ñто возможно. +- +- +- Number of short passwords +- КоличеÑтво коротких паролей +- +- +- Recommended minimum password length is at least 8 characters. +- Ð ÐµÐºÐ¾Ð¼ÐµÐ½Ð´ÑƒÐµÐ¼Ð°Ñ Ð´Ð»Ð¸Ð½Ð° паролей — не менее 8 Ñимволов. +- +- +- Number of weak passwords +- КоличеÑтво ненадёжных паролей +- +- +- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. +- РекомендуетÑÑ Ð¸Ñпользовать длинные пароли, ÑоÑтоÑщие из Ñлучайных Ñимволов Ñ ÑƒÑ€Ð¾Ð²Ð½Ñми безопаÑноÑти «хорошо» или «отлично». +- +- +- Entries excluded from reports +- ИÑключённые из отчёта запиÑи +- +- +- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. +- ИÑключение запиÑей из отчётов, еÑли, к примеру, извеÑтно, что в таких запиÑÑÑ… иÑпользуетÑÑ Ñлабый пароль, не обÑзательно ÑвлÑетÑÑ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð¾Ð¹, но Ñтоит обратить на Ñто внимание. +- +- +- Average password length +- СреднÑÑ Ð´Ð»Ð¸Ð½Ð° Ð¿Ð°Ñ€Ð¾Ð»Ñ +- +- +- %1 characters +- %1 Ñимволов +- +- +- Average password length is less than ten characters. Longer passwords provide more security. +- СреднÑÑ Ð´Ð»Ð¸Ð½Ð° паролей менее деÑÑти Ñимволов. Более длинные пароли более безопаÑны. +- +- +- +- SSHAgent +- +- Agent connection failed. +- Сбой Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð°Ð³ÐµÐ½Ñ‚Ð°. +- +- +- Agent protocol error. +- Ошибка протокола агента. +- +- +- No agent running, cannot add identity. +- Ðгент не запущен, невозможно добавить идентификатор. +- +- +- No agent running, cannot remove identity. +- Ðгент не запущен, невозможно удалить идентификатор. +- +- +- Agent refused this identity. Possible reasons include: +- Идентификатор отклонён агентом. Возможные причины: +- +- +- The key has already been added. +- Ключ уже добавлен. +- +- +- Restricted lifetime is not supported by the agent (check options). +- Ограничение по времени не поддерживаетÑÑ Ñтим агентом (проверьте наÑтройки). +- +- +- A confirmation request is not supported by the agent (check options). +- Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð½Ðµ поддерживаетÑÑ Ñтим агентом (проверьте наÑтройки). +- +- +- Key identity ownership conflict. Refusing to add. +- Конфликт Ð²Ð»Ð°Ð´ÐµÐ½Ð¸Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¾Ð½Ð½Ñ‹Ð¼ ключом, добавление отменено. +- +- +- No agent running, cannot list identities. +- Ðи один агент не запущен, идентификационные данные недоÑтупны. +- +- +- +- SearchHelpWidget +- +- Search Help +- ПоиÑк в Ñправке +- +- +- Search terms are as follows: [modifiers][field:]["]term["] +- ПоиÑковые Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð²Ñ‹Ð³Ð»ÑдÑÑ‚ так: [модификаторы][поле:]["]выражение["] +- +- +- Every search term must match (ie, logical AND) +- Каждое поиÑковое выражение должно иметь ÑоответÑтвие (Ñ‚.е. логичеÑкое И) +- +- +- Modifiers +- Модификаторы +- +- +- exclude term from results +- иÑключить выражение из результатов +- +- +- match term exactly +- ÑоответÑтвовать выражению в точноÑти +- +- +- use regex in term +- иÑпользовать регулÑрные Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ +- +- +- Fields +- ÐŸÐ¾Ð»Ñ +- +- +- Term Wildcards +- Шаблоны Ð´Ð»Ñ Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ð¹ +- +- +- match anything +- ÑоответÑтвие вÑему +- +- +- match one +- ÑоответÑтвие одному +- +- +- logical OR +- логичеÑкое ИЛИ +- +- +- Examples +- Примеры +- +- +- +- SearchWidget +- +- Search +- ПоиÑк +- +- +- Limit search to selected group +- ПоиÑк только в выбранной группе +- +- +- Search Help +- ПоиÑк в Справке +- +- +- Search (%1)... +- Search placeholder text, %1 is the keyboard shortcut +- ПоиÑк (%1)... +- +- +- Case sensitive +- Учитывать региÑÑ‚Ñ€ +- +- +- +- SettingsWidgetFdoSecrets +- +- Options +- Опции +- +- +- Enable KeepassXC Freedesktop.org Secret Service integration +- Включить интеграцию KeepassXC Ñо Ñлужбой Freedesktop.org Secret Service +- +- +- General +- Общие +- +- +- Show notification when credentials are requested +- Выводить ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ запроÑе запиÑей +- +- +- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> +- <html><head/><body><p>ЕÑли в параметрах базы данных разрешено иÑпользование корзины, то при удалении запиÑи будут перемещены в неё. Ð’ противном Ñлучае, будет выполнено необратимое удаление без подтверждениÑ.</p><p>Ð’ Ñлучае, еÑли на удалÑемые запиÑи имеютÑÑ ÑÑылки, потребуетÑÑ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ðµ удалениÑ.</p></body></html> +- +- +- Exposed database groups: +- ДоÑтупные группы из базы данных: +- +- +- Authorization +- ÐÐ²Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ñ +- +- +- These applications are currently connected: +- Подключены Ñледующие приложениÑ: +- +- +- Don't confirm when entries are deleted by clients +- Ðе подтверждать удаление запиÑей приложениÑми-клиентами +- +- +- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. +- <b>Ошибка:</b> не удалоÑÑŒ подключитьÑÑ Ðº D-Bus, проверьте параметры. +- +- +- <b>Warning:</b> +- <b>Внимание:</b> +- +- +- Save current changes to activate the plugin and enable editing of this section. +- Сохраните Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ð¸Ð¸ подключаемого Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð¸ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñтого раздела. +- +- +- +- SettingsWidgetKeeShare +- +- Active +- Ðктивный +- +- +- Allow export +- Разрешить ÑкÑпорт +- +- +- Allow import +- Разрешить импорт +- +- +- Own certificate +- Свой Ñертификат +- +- +- Fingerprint: +- Отпечаток: +- +- +- Certificate: +- Сертификат: +- +- +- Signer +- ПодпиÑант +- +- +- Key: +- Ключ: +- +- +- Generate +- Генерировать +- +- +- Import +- Импортировать +- +- +- Export +- ЭкÑпортировать +- +- +- Imported certificates +- Импортированные Ñертификаты +- +- +- Trust +- ДоверÑÑ‚ÑŒ +- +- +- Ask +- ЗапроÑить +- +- +- Untrust +- Ðе доверÑÑ‚ÑŒ +- +- +- Remove +- Удалить +- +- +- Path +- Путь +- +- +- Status +- Ð¡Ñ‚Ð°Ñ‚ÑƒÑ +- +- +- Fingerprint +- Отпечаток +- +- +- Certificate +- Сертификат +- +- +- Trusted +- Ðадёжный +- +- +- Untrusted +- Ðенадёжный +- +- +- Unknown +- ÐеизвеÑтен +- +- +- key.share +- Filetype for KeeShare key +- key.share +- +- +- KeeShare key file +- Файл-ключ KeeShare +- +- +- All files +- Ð’Ñе файлы +- +- +- Select path +- Выберите путь +- +- +- Exporting changed certificate +- ЭкÑпортирование изменённого Ñертификата +- +- +- The exported certificate is not the same as the one in use. Do you want to export the current certificate? +- ЭкÑпортированный Ñертификат отличаетÑÑ Ð¾Ñ‚ иÑпользуемого. Хотите ÑкÑпортировать текущий Ñертификат? +- +- +- Signer: +- ПодпиÑант: +- +- +- Allow KeeShare imports +- Разрешить импорт KeeShare +- +- +- Allow KeeShare exports +- Разрешить ÑкÑпорт KeeShare +- +- +- Only show warnings and errors +- Показывать только ошибки и Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ñ +- +- +- Key +- Ключ +- +- +- Signer name field +- Поле имени владельца Ñертификата +- +- +- Generate new certificate +- Создать Ñертификат +- +- +- Import existing certificate +- Импортировать ÑущеÑтвующий Ñертификат +- +- +- Export own certificate +- ЭкÑпортировать ÑобÑтвенный Ñертификат +- +- +- Known shares +- ИзвеÑтные общие реÑурÑÑ‹ +- +- +- Trust selected certificate +- ДоверÑÑ‚ÑŒ выбранному Ñертификату +- +- +- Ask whether to trust the selected certificate every time +- Ð’Ñегда запрашивать подтверждение Ð´Ð¾Ð²ÐµÑ€Ð¸Ñ Ðº Ñертификату +- +- +- Untrust selected certificate +- Ðе доверÑÑ‚ÑŒ выбранному Ñертификату +- +- +- Remove selected certificate +- Удалить выбранный Ñертификат +- +- +- +- ShareExport +- +- Overwriting signed share container is not supported - export prevented +- ПерезапиÑÑŒ подпиÑанного ÑовмеÑтного контейнера не поддерживаетÑÑ - ÑкÑпорт запрещён +- +- +- Could not write export container (%1) +- Ðе удалоÑÑŒ запиÑать ÑкÑпортируемый контейнер (%1) +- +- +- Could not embed signature: Could not open file to write (%1) +- Ðе удалоÑÑŒ вÑтроить подпиÑÑŒ: невозможно открыть файл Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи (%1) +- +- +- Could not embed signature: Could not write file (%1) +- Ðе удалоÑÑŒ вÑтроить подпиÑÑŒ: невозможно запиÑать файл (%1) +- +- +- Could not embed database: Could not open file to write (%1) +- Ðе удалоÑÑŒ вÑтроить базу данных: невозможно открыть файл Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи (%1) +- +- +- Could not embed database: Could not write file (%1) +- Ðе удалоÑÑŒ вÑтроить базу данных: невозможно запиÑать файл (%1) +- +- +- Overwriting unsigned share container is not supported - export prevented +- ПерезапиÑÑŒ не подпиÑанного ÑовмеÑтного контейнера не поддерживаетÑÑ - ÑкÑпорт запрещён +- +- +- Could not write export container +- Ðе удалоÑÑŒ запиÑать ÑкÑпортируемый контейнер +- +- +- Unexpected export error occurred +- ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° ÑкÑпорта +- +- +- +- ShareImport +- +- Import from container without signature +- Импорт из контейнера без подпиÑи +- +- +- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? +- Ðевозможно проверить иÑточник ÑовмеÑтно иÑпользуемого контейнера, потому что он не подпиÑан. Ð’Ñ‹ дейÑтвительно хотите выполнить импорт из %1? +- +- +- Import from container with certificate +- Импорт из контейнера Ñ Ñертификатом +- +- +- Do you want to trust %1 with the fingerprint of %2 from %3? +- ДоверÑÑ‚ÑŒ %1 Ñ Ð¾Ñ‚Ð¿ÐµÑ‡Ð°Ñ‚ÐºÐ¾Ð¼ %2 из %3? {1 ?} {2 ?} +- +- +- Not this time +- Ðе ÑÐµÐ¹Ñ‡Ð°Ñ +- +- +- Never +- Ðикогда +- +- +- Always +- Ð’Ñегда +- +- +- Just this time +- Только ÑÐµÐ¹Ñ‡Ð°Ñ +- +- +- Signed share container are not supported - import prevented +- ПодпиÑанный ÑовмеÑтно иÑпользуемый контейнер не поддерживаетÑÑ - импорт запрещён +- +- +- File is not readable +- Файл не читаетÑÑ +- +- +- Invalid sharing container +- Ðеверный ÑовмеÑтно иÑпользуемый контейнер +- +- +- Untrusted import prevented +- Предотвращён ненадёжный импорт +- +- +- Successful signed import +- ПодпиÑанный импорт выполнен +- +- +- Unsigned share container are not supported - import prevented +- Ðе подпиÑанный ÑовмеÑтно иÑпользуемый контейнер не поддерживаетÑÑ - импорт запрещён +- +- +- Successful unsigned import +- Импорт без подпиÑи выполнен +- +- +- File does not exist +- Файл не ÑущеÑтвует +- +- +- Unknown share container type +- ÐеизвеÑтный тип ÑовмеÑтного контейнера +- +- +- +- ShareObserver +- +- Import from %1 failed (%2) +- Ошибка импорта из %1 (%2) +- +- +- Import from %1 successful (%2) +- Импорт из %1 выполнен (%2) +- +- +- Imported from %1 +- Импортировано из %1 +- +- +- Export to %1 failed (%2) +- Ошибка ÑкÑпорта в %1 (%2) +- +- +- Export to %1 successful (%2) +- ЭкÑпорт в %1 выполнен (%2) +- +- +- Export to %1 +- ЭкÑпорт в %1 +- +- +- Multiple import source path to %1 in %2 +- МножеÑтвенный путь иÑточника импорта к %1 в %2 +- +- +- Conflicting export target path %1 in %2 +- Конфликтный путь цели ÑкÑпорта %1 в %2 +- +- +- +- TotpDialog +- +- Timed Password +- Временной пароль +- +- +- 000000 +- 000000 +- +- +- Copy +- Скопировать +- +- +- Expires in <b>%n</b> second(s) +- ИÑтекает через <b>%n</b> ÑекундуИÑтекает через <b>%n</b> ÑекундыИÑтекает через <b>%n</b> ÑекундИÑтекает через <b>%n</b> Ñек +- +- +- +- TotpExportSettingsDialog +- +- Copy +- Скопировать +- +- +- NOTE: These TOTP settings are custom and may not work with other authenticators. +- TOTP QR code dialog warning +- * Эти параметры TOTP - пользовательÑкие, они могут не работать Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ ÑредÑтвами проверки подлинноÑти. +- +- +- There was an error creating the QR code. +- Ошибка при Ñоздании QR-кода. +- +- +- Closing in %1 seconds. +- Закрытие через %1 Ñ. +- +- +- +- TotpSetupDialog +- +- Setup TOTP +- ÐаÑтроить TOTP +- +- +- Default RFC 6238 token settings +- Стандартные параметры токена RFC 6238 +- +- +- Steam token settings +- Параметры токена Steam +- +- +- Use custom settings +- ИÑпользовать оÑобые наÑтройки +- +- +- Custom Settings +- ОÑобые наÑтройки +- +- +- Time step: +- Временной шаг: +- +- +- sec +- Seconds +- Ñек +- +- +- Code size: +- Размер кода: +- +- +- Secret Key: +- Секретный ключ: +- +- +- Secret key must be in Base32 format +- Секретный ключ должен быть задан в формате Base32 +- +- +- Secret key field +- Поле Ñекретного ключа +- +- +- Algorithm: +- Ðлгоритм: +- +- +- Time step field +- Поле шага времени +- +- +- digits +- цифр(Ñ‹) +- +- +- Invalid TOTP Secret +- ÐедейÑтвительный Ñекрет TOTP +- +- +- You have entered an invalid secret key. The key must be in Base32 format. +-Example: JBSWY3DPEHPK3PXP +- Введён недейÑтвительный Ñекретный ключ. Ключ должен быть задан в формате Base32, например: JBSWY3DPEHPK3PXP. +- +- +- Confirm Remove TOTP Settings +- Подтверждение ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð² TOTP +- +- +- Are you sure you want to delete TOTP settings for this entry? +- Удалить параметры TOTP Ñтой запиÑи? +- +- +- +- URLEdit +- +- Invalid URL +- Ðеверный URL +- +- +- +- UpdateCheckDialog +- +- Checking for updates +- Проверка обновлений +- +- +- Checking for updates... +- Проверка обновлений... +- +- +- Close +- Закрыть +- +- +- Update Error! +- Ошибка обновлениÑ! +- +- +- An error occurred in retrieving update information. +- Ошибка при получении информации об обновлении. +- +- +- Please try again later. +- Повторите попытку позже. +- +- +- Software Update +- Обновление ПО +- +- +- A new version of KeePassXC is available! +- ДоÑтупна Ð½Ð¾Ð²Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ KeePassXC. +- +- +- KeePassXC %1 is now available — you have %2. +- ДоÑтупна KeePassXC верÑии %1. У Ð²Ð°Ñ â€” %2. +- +- +- Download it at keepassxc.org +- Загрузите её Ñ keepassxc.org +- +- +- You're up-to-date! +- У Ð²Ð°Ñ ÑÐ°Ð¼Ð°Ñ Ð½Ð¾Ð²Ð°Ñ Ð²ÐµÑ€ÑиÑ! +- +- +- KeePassXC %1 is currently the newest version available +- Ðа данный момент KeePassXC %1 — ÑÐ°Ð¼Ð°Ñ Ð½Ð¾Ð²Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ +- +- +- +- WelcomeWidget +- +- Start storing your passwords securely in a KeePassXC database +- Ðачать безопаÑное хранение ваших паролей в базе данных KeePassXC +- +- +- Create new database +- Создать новую базу данных +- +- +- Open existing database +- Открыть имеющуюÑÑ Ð±Ð°Ð·Ñƒ данных +- +- +- Import from KeePass 1 +- Импорт из KeePass 1 +- +- +- Import from CSV +- Импорт из CSV +- +- +- Recent databases +- Ðедавние базы данных +- +- +- Welcome to KeePassXC %1 +- Ð’Ð°Ñ Ð¿Ñ€Ð¸Ð²ÐµÑ‚Ñтвует KeePassXC %1 +- +- +- Import from 1Password +- Импорт из 1Password +- +- +- Open a recent database +- Открыть недавнюю базу данных +- +- +- +- YubiKey +- +- %1 [%2] Configured Slot - %3 +- %1 [%2] ÐаÑтроенный Ñлот — %3 +- +- +- %1 [%2] Challenge Response - Slot %3 - %4 +- %1 [%2] Вызов-ответ — Ñлот %3 - %4 +- +- +- Press +- Ðажать +- +- +- Passive +- ПаÑÑÐ¸Ð²Ð½Ð°Ñ +- +- +- %1 Invalid slot specified - %2 +- %1 указан неверный Ñлот — %2 +- +- +- The YubiKey interface has not been initialized. +- Ð˜Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ YubiKey не был инициализирован. +- +- +- Hardware key is currently in use. +- Ðппаратный ключ уже иÑпользуетÑÑ. +- +- +- Could not find hardware key with serial number %1. Please plug it in to continue. +- Ð”Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ подключите аппаратный ключ Ñ Ñерийным номером %1. +- +- +- Hardware key timed out waiting for user interaction. +- Тайм-аут аппаратного ключа во Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð´ÐµÐ¹Ñтвий пользователÑ. +- +- +- A USB error ocurred when accessing the hardware key: %1 +- Ошибка подÑиÑтемы USB при доÑтупе к аппаратному ключу: %1 +- +- +- Failed to complete a challenge-response, the specific error was: %1 +- Ðе удалоÑÑŒ завершить обмен «вызов—ответ»: %1 +- +- +- +- YubiKeyEditWidget +- +- Refresh +- Обновить +- +- +- YubiKey Challenge-Response +- Вызов-ответ YubiKey +- +- +- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- <p>ЕÑли у Ð²Ð°Ñ ÐµÑÑ‚ÑŒ <a href="https://www.yubico.com/">YubiKey</a>, его можно иÑпользовать Ð´Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ безопаÑноÑти.</p><p>YubiKey требует, чтобы один из его Ñлотов был запрограммирован как <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/"> вызов-ответ HMAC-SHA1</a>.</p> +- +- +- Refresh hardware tokens +- Перечитать токены +- +- +- Hardware key slot selection +- Выбор Ñлота аппаратного ключа +- +- +- Could not find any hardware keys! +- Ðе удалоÑÑŒ найти ни одного аппаратного ключа. +- +- +- Selected hardware key slot does not support challenge-response! +- Выбранный аппаратный ключ не поддерживает механизм «вызов—ответ». +- +- +- Detecting hardware keys… +- Обнаружение аппаратных ключей... +- +- +- No hardware keys detected +- Ðппаратные ключи не обнаружены +- +- +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_sk.ts keepassxc-2.6.4-patched/share/translations/keepassx_sk.ts +--- keepassxc-2.6.4-orig/share/translations/keepassx_sk.ts 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/translations/keepassx_sk.ts 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7894 +0,0 @@ +- +- +- AboutDialog +- +- About KeePassXC +- O KeepassXC +- +- +- About +- O aplikácii +- +- +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- Chyby hláste na: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- +- +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- KeePassXC je distribuovaný za podmienok GNU General Public License (GPL) verzie 2 alebo (podľa Vášho výberu) verzie 3. +- +- +- Contributors +- K vývoju prispeli +- +- +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">ViÄ prispievateľov na GitHub</a> +- +- +- Debug Info +- Ladiace informácie +- +- +- Include the following information whenever you report a bug: +- Do každého hlásenia chyby zahrňte nasledujúce informácie: +- +- +- Copy to clipboard +- KopírovaÅ¥ do schránky +- +- +- Project Maintainers: +- Správcovia projektu: +- +- +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- Å peciálne poÄakovanie od tímu KeePassXC patrí debfx za vytvorenie pôvodného KeePassX. +- +- +- +- AgentSettingsWidget +- +- Use OpenSSH for Windows instead of Pageant +- PoužiÅ¥ OpenSSH pre Windows namiesto Pageant +- +- +- Enable SSH Agent integration +- Zapnúť integráciu Agenta SSH +- +- +- SSH_AUTH_SOCK value +- Hodnota SSH_AUTH_SOCK +- +- +- SSH_AUTH_SOCK override +- Prepísanie SSH_AUTH_SOCK +- +- +- (empty) +- (prázdne) +- +- +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- Nie je dostupný socket Agenta SSH. BuÄ zaistite existenciu premennej prostredia SSH_AUTH_SOCK alebo nastavte prepísanie. +- +- +- SSH Agent connection is working! +- Spojenie Agenta SSH funkÄné! +- +- +- +- ApplicationSettingsWidget +- +- Application Settings +- Nastavenia aplikácie +- +- +- General +- VÅ¡eobecné +- +- +- Security +- BezpeÄnosÅ¥ +- +- +- Access error for config file %1 +- Chyba prístupu ku konfiguraÄnému súboru %1 +- +- +- Icon only +- Len ikona +- +- +- Text only +- Len text +- +- +- Text beside icon +- Text vedľa ikony +- +- +- Text under icon +- Text pod ikonou +- +- +- Follow style +- Å týl nasledovania +- +- +- Reset Settings? +- ResetovaÅ¥ nastavenia? +- +- +- Are you sure you want to reset all general and security settings to default? +- Naozaj chcete obnoviÅ¥ vÅ¡etky vÅ¡eobecné nastavenia na predvolené hodnoty? +- +- +- Monochrome (light) +- Monochromatický (svetlé) +- +- +- Monochrome (dark) +- Monochromatický (tmavé) +- +- +- Colorful +- Farebné +- +- +- You must restart the application to set the new language. Would you like to restart now? +- Musíte reÅ¡tartovaÅ¥ aplikáciu, aby sa tieto zmeny prejavili. Chcete ju reÅ¡tartovaÅ¥ teraz? +- +- +- +- ApplicationSettingsWidgetGeneral +- +- Basic Settings +- Základné nastavenia +- +- +- Startup +- Å tart +- +- +- Start only a single instance of KeePassXC +- SpustiÅ¥ len jednu inÅ¡tanciu KeePassXC +- +- +- Minimize window at application startup +- MinimalizovaÅ¥ okno pri spustení aplikácie +- +- +- File Management +- Správa súborov +- +- +- Backup database file before saving +- ZálohovaÅ¥ databázu pri každom uložení +- +- +- Automatically save after every change +- Automaticky uložiÅ¥ po každej zmene +- +- +- Automatically reload the database when modified externally +- Automaticky naÄítaÅ¥ databázu, ak je upravená externe +- +- +- Entry Management +- Správa položky +- +- +- Use group icon on entry creation +- PoužiÅ¥ ikonu skupiny pri vytváraní položky +- +- +- Minimize instead of app exit +- MinimalizovaÅ¥ namiesto ukonÄenia +- +- +- Show a system tray icon +- ZobraziÅ¥ ikonu v oznamovacej oblasti +- +- +- Hide window to system tray when minimized +- SkryÅ¥ okno do oznamovacej oblasti pri minimalizácii +- +- +- Auto-Type +- Automatické vypĺňanie +- +- +- Use entry title to match windows for global Auto-Type +- PoužiÅ¥ názov položky na zhodu okna pre globálne Automatické vypĺňanie +- +- +- Use entry URL to match windows for global Auto-Type +- PoužiÅ¥ URL položky na zhodu okna pre globálne Automatické vypĺňanie +- +- +- Always ask before performing Auto-Type +- Vždy sa spýtaÅ¥ pred vykonaním Automatického vypĺňania +- +- +- ms +- Milliseconds +- ms +- +- +- Movable toolbar +- Presúvateľný panel nástrojov +- +- +- Remember previously used databases +- ZapamätaÅ¥ si predtým používané databázy +- +- +- Load previously open databases on startup +- NaÄítanie predtým otvorených databáz pri spustení +- +- +- Remember database key files and security dongles +- ZapamätaÅ¥ databázové kľúÄové súbory a zabezpeÄovacie HW kľúÄe +- +- +- Check for updates at application startup once per week +- Pri Å¡tarte skontrolovaÅ¥ aktualizácie raz týždenne +- +- +- Include beta releases when checking for updates +- Pri kontrole aktualizácii zahrnúť pred-vydania +- +- +- Language: +- Jazyk: +- +- +- (restart program to activate) +- (reÅ¡tartovaÅ¥ program kvôli aktivácii) +- +- +- Minimize window after unlocking database +- MinimalizovaÅ¥ okno po odomknutí databázy +- +- +- Minimize when opening a URL +- MinimalizovaÅ¥ pri otvorení URL +- +- +- Hide window when copying to clipboard +- SkryÅ¥ okno pri kopírovaní do schránky +- +- +- Minimize +- MinimalizovaÅ¥ +- +- +- Drop to background +- PoslaÅ¥ do pozadia +- +- +- Favicon download timeout: +- ÄŒasový limit stiahnutia ikony: +- +- +- Website icon download timeout in seconds +- ÄŒasový limit stiahnutia ikony v sekundách +- +- +- sec +- Seconds +- s +- +- +- Toolbar button style +- Å týl tlaÄidiel panela nástrojov +- +- +- Language selection +- Výber jazyka +- +- +- Global auto-type shortcut +- Globálna klávesová skratka Automatického vypĺňania +- +- +- Auto-type character typing delay milliseconds +- Oneskorenie Automatického vypĺňania znakov v milisekundách +- +- +- Auto-type start delay milliseconds +- Oneskorenia spustenia Automatického vypĺňania v milisekundách +- +- +- Automatically launch KeePassXC at system startup +- Automaticky spustiÅ¥ KeePassXC pri Å¡tarte systému +- +- +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- BezpeÄne uložiÅ¥ súbory databáz (vypnite pri problémoch s Dropbox, apod) +- +- +- User Interface +- Používateľské rozhranie +- +- +- Toolbar button style: +- Å týl tlaÄidiel panela nástrojov: +- +- +- Use monospaced font for notes +- Na poznámky použiÅ¥ písmo Monospace +- +- +- Tray icon type: +- Ikona oznamovacej oblasti: +- +- +- Reset settings to default… +- ObnoviÅ¥ predvolené nastavenia +- +- +- Auto-Type typing delay: +- Oneskorenie Automatického vypĺňania: +- +- +- Global Auto-Type shortcut: +- Globálna klávesová skratka Automatického vypĺňania: +- +- +- Auto-Type start delay: +- Oneskorenia spustenia Automatického vypĺňania: +- +- +- Automatically save when locking database +- Pri zamknutí databázy automaticky uložiÅ¥ +- +- +- Automatically save non-data changes when locking database +- Pri zamknutí databázy automaticky uložiÅ¥ nedátové zmeny +- +- +- Tray icon type +- Typ ikona oznamovacej oblasti +- +- +- +- ApplicationSettingsWidgetSecurity +- +- Timeouts +- ÄŒasové limity +- +- +- Clear clipboard after +- VymazaÅ¥ schránku po +- +- +- sec +- Seconds +- s +- +- +- Lock databases after inactivity of +- Zamknúť databázu po neaktivite +- +- +- min +- min +- +- +- Forget TouchID after inactivity of +- Zabudnúť TouchID po neaktivite dlhÅ¡ej ako +- +- +- Convenience +- Pohodlie +- +- +- Lock databases when session is locked or lid is closed +- Zamknúť databázu pri zamknutí relácie alebo zatvorení krytu +- +- +- Forget TouchID when session is locked or lid is closed +- Zabudnúť TouchID po neaktivite dlhÅ¡ej ako +- +- +- Lock databases after minimizing the window +- Zamknúť databázu pri minimalizovaní okna +- +- +- Re-lock previously locked database after performing Auto-Type +- Znova zamknúť predtým zamknutú databázu po vykonaní Automatického vypĺňania +- +- +- Hide passwords in the entry preview panel +- SkryÅ¥ heslá v paneli ukážky položky +- +- +- Hide entry notes by default +- Predvolene skryÅ¥ poznámky položky +- +- +- Privacy +- Súkromie +- +- +- Use DuckDuckGo service to download website icons +- PoužívaÅ¥ služby DuckDuckGo na stiahnutie ikon webových stránok +- +- +- Clipboard clear seconds +- Sekundy do vymazania schárnky +- +- +- Touch ID inactivity reset +- Reset TouchID po neaktivite +- +- +- Database lock timeout seconds +- ÄŒasový limit zamknutia databázy v sekundách +- +- +- min +- Minutes +- min +- +- +- Clear search query after +- VymazaÅ¥ dopyt po +- +- +- Require password repeat when it is visible +- VyžadovaÅ¥ opakovanie hesla, aj ak je viditeľné +- +- +- Hide passwords when editing them +- SkryÅ¥ heslo pri jeho úprave +- +- +- Use placeholder for empty password fields +- PoužiÅ¥ zástupnú hodnotu na prázdne polia hesiel +- +- +- +- AutoType +- +- Couldn't find an entry that matches the window title: +- Nemožno nájsÅ¥ žiadnu položku, ktorá zodpovedá názvu okna: +- +- +- Auto-Type - KeePassXC +- Automatické vypĺňanie – KeePassXC +- +- +- Auto-Type +- Automatické vypĺňanie +- +- +- The Syntax of your Auto-Type statement is incorrect! +- Syntax Vášho Automatického vypĺňania nieje správna! +- +- +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- Tento príkaz Automatického vypĺňania obsahuje príliÅ¡ dlhú pauzu. Naozaj ho chcete vykonaÅ¥? +- +- +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- Tento príkaz Automatického vypĺňania obsahuje príliÅ¡ pomalé stlaÄenia kláves. Do you really want to proceed? +- +- +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- Tento príkaz Automatického vypĺňania obsahuje argumenty, ktoré sú opakované príliÅ¡ Äasto. Naozaj ho chcete vykonaÅ¥? +- +- +- Permission Required +- Požadované práva +- +- +- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC vyžaduje povolenie PrístupnosÅ¥ aby mohol realizovaÅ¥ Automatické dopĺňanie na úrovni položky. Ak ste povolenie už pridelili, môže byÅ¥ potrebné reÅ¡tartovaÅ¥. +- +- +- +- AutoTypeAssociationsModel +- +- Window +- Okno +- +- +- Sequence +- PostupnosÅ¥ +- +- +- Default sequence +- Predvolená postupnosÅ¥ +- +- +- +- AutoTypeMatchModel +- +- Group +- Skupina +- +- +- Title +- Nadpis +- +- +- Username +- Používateľské meno +- +- +- Sequence +- PostupnosÅ¥ +- +- +- +- AutoTypeMatchView +- +- Copy &username +- KopírovaÅ¥ po&už. meno +- +- +- Copy &password +- KopírovaÅ¥ &heslo +- +- +- +- AutoTypePlatformMac +- +- Permission Required +- Požadované práva +- +- +- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC vyžaduje povolenie PrístupnosÅ¥ a Záznam obrazovky aby mohol realizovaÅ¥ globálne Automatické dopĺňanie. Záznam obrazovky je potrebný na získanie názvu okna na vyhľadávanie položiek. Ak ste povolenie už pridelili, môže byÅ¥ potrebné reÅ¡tartovaÅ¥. +- +- +- +- AutoTypeSelectDialog +- +- Auto-Type - KeePassXC +- Automatické vypĺňanie – KeePassXC +- +- +- Select entry to Auto-Type: +- Vyberte položku na Automatické vypĺňanie: +- +- +- Search... +- Hľadanie… +- +- +- +- BrowserAccessControlDialog +- +- KeePassXC - Browser Access Request +- ŽiadosÅ¥ o prístup KeePassXC-PrehliadaÄ +- +- +- %1 is requesting access to the following entries: +- %1 žiada prístup k nasledujúcim položkám: +- +- +- Remember access to checked entries +- ZapamätaÅ¥ si prístup k oznaÄeným položkám +- +- +- Remember +- ZapamätaÅ¥ +- +- +- Allow access to entries +- PovoliÅ¥ prístup k položkám +- +- +- Allow Selected +- PovoliÅ¥ vybraným +- +- +- Deny All +- ZakázaÅ¥ vÅ¡etkým +- +- +- Disable for this site +- ZakázaÅ¥ tejto stránke +- +- +- +- BrowserEntrySaveDialog +- +- KeePassXC-Browser Save Entry +- KeePassXC-Browser UložiÅ¥ položku +- +- +- Ok +- Ok +- +- +- Cancel +- ZruÅ¡iÅ¥ +- +- +- You have multiple databases open. +-Please select the correct database for saving credentials. +- Máte otvorených viac databáz. +-Prosím, vyberte správnu databázu na uloženie prihlasovacích údajov. +- +- +- +- BrowserService +- +- KeePassXC: New key association request +- KeePassXC: Nová požiadavka priradenia kľúÄa +- +- +- Save and allow access +- UložiÅ¥ a povoliÅ¥ prístup +- +- +- KeePassXC: Overwrite existing key? +- KeePassXC: PrepísaÅ¥ existujúci kľúÄ? +- +- +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- Zdieľaný Å¡ifrovací kÄ¾ÃºÄ s menom „%1†už existuje. +-Chcete ho prepísaÅ¥? +- +- +- KeePassXC: Update Entry +- KeePassXC: UpraviÅ¥ položku +- +- +- Do you want to update the information in %1 - %2? +- Chcete upraviÅ¥ informácie v %1 – %2? +- +- +- Abort +- ZruÅ¡iÅ¥ +- +- +- Converting attributes to custom data… +- Konvertovanie atribútov na vlastné dáta… +- +- +- KeePassXC: Converted KeePassHTTP attributes +- KeePassXC: Konvertované atribúty KeePassHTTP +- +- +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- ÚspeÅ¡ne skonvertované atribúty z %1 položky(iek). +-Do vlastných dát presunuté %2 kľúÄe. +- +- +- Successfully moved %n keys to custom data. +- ÚspeÅ¡ne presunutý %n kÄ¾ÃºÄ do vlastných dát.ÚspeÅ¡ne presunuté %n kľúÄe do vlastných dát.ÚspeÅ¡ne presunutých %n kľúÄov do vlastných dát.ÚspeÅ¡ne presunutých %n kľúÄov do vlastných dát. +- +- +- KeePassXC: No entry with KeePassHTTP attributes found! +- KeePassXC: Nenájdená žiadna položka s atribútmi KeePassHTTP! +- +- +- The active database does not contain an entry with KeePassHTTP attributes. +- Aktívna databáza neobsahuje žiadnu položku s atribútmi KeePassHTTP. +- +- +- KeePassXC: Legacy browser integration settings detected +- KeePassXC: Zistené staré nastavenia integrácie prehliadaÄa +- +- +- KeePassXC: Create a new group +- KeePassXC: VytvoriÅ¥ novú skupinu +- +- +- A request for creating a new group "%1" has been received. +-Do you want to create this group? +- +- Bola prijatá požiadavka n novú skupinu „%1â€. +-Chcete vytvoriÅ¥ túto skupinu? +- +- +- +- Your KeePassXC-Browser settings need to be moved into the database settings. +-This is necessary to maintain your current browser connections. +-Would you like to migrate your existing settings now? +- Je potrebné presunúť vaÅ¡e nastavenia KeePassXC-Browser do nastavenia databázovy. +-Je to potrebné kvôli správe aktuálnych pripojení prehliadaÄa. +-Chcete teraz migrovaÅ¥ svoje nastavenia? +- +- +- Don't show this warning again +- NezobrazovaÅ¥ znova toto upozornenie +- +- +- You have received an association request for the following database: +-%1 +- +-Give the connection a unique name or ID, for example: +-chrome-laptop. +- Obdržali ste požiadavku na priradenie nasledujúcej databázy. +-%1 +- +-Zadajte mu jedineÄný názov alebo identifikátor, napríklad: +-chrome-laptop. +- +- +- +- BrowserSettingsWidget +- +- Dialog +- Dialóg +- +- +- This is required for accessing your databases with KeePassXC-Browser +- Toto je potrebné na prístup k vaÅ¡im databázam cez KeePassXC-Browser +- +- +- Enable browser integration +- PovoliÅ¥ integráciu prehľadávaÄa +- +- +- General +- VÅ¡eobecné +- +- +- Browsers installed as snaps are currently not supported. +- Boli nainÅ¡talované prehliadaÄe lebo "snaps" momentálne nie sú podporované. +- +- +- Enable integration for these browsers: +- Zapnúť integráciu v týchto prehliadaÄoch: +- +- +- Vivaldi +- Vivaldi +- +- +- &Edge +- &Edge +- +- +- Firefox +- Firefox +- +- +- Tor Browser +- Tor Browser +- +- +- Brave +- Brave +- +- +- Google Chrome +- Google Chrome +- +- +- Chromium +- Chromium +- +- +- Show a notification when credentials are requested +- Credentials mean login data requested via browser extension +- ZobraziÅ¥ upozornenie, keÄ sú požadované prihlasovacie údaje +- +- +- Request to unlock the database if it is locked +- PožiadaÅ¥ o odomknutie databázy, ak je zamknutá +- +- +- Only entries with the same scheme (http://, https://, ...) are returned. +- Vrátené budú len položky s rovnakou schémou (http://, https://, …). +- +- +- Match URL scheme (e.g., https://...) +- Zhoda schémy URL (napr., https://…) +- +- +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- VrátiÅ¥ len najlepÅ¡ie zhody danej URL, namiesto vÅ¡etkých položiek celej domény. +- +- +- Return only best-matching credentials +- VrátiÅ¥ len prihlasovacie údaje s najlepÅ¡ou zhodou +- +- +- Returns expired credentials. String [expired] is added to the title. +- VrátiÅ¥ prshlasovacie údaje po vyprÅ¡aní platnosti. Do názvu je pridaný reÅ¥azec [expired]. +- +- +- Allow returning expired credentials +- PovoliÅ¥ vrátenie prihlasovacích údajov po dobe platnosti +- +- +- All databases connected to the extension will return matching credentials. +- VÅ¡etky databázy pripojené k rozšíreniu budú vracaÅ¥ zodpovedajúce prihlasovacie údaje. +- +- +- Search in all opened databases for matching credentials +- Credentials mean login data requested via browser extension +- HľadaÅ¥ vyhovujúce prihlasovacie údaje vo vÅ¡etkých databázach +- +- +- Sort matching credentials by title +- Credentials mean login data requested via browser extension +- ZoradiÅ¥ vyhovujúce prihlasovacie údaje podľa názvu +- +- +- Sort matching credentials by username +- Credentials mean login data requested via browser extension +- ZoradiÅ¥ vyhovujúce prihlasovacie údaje podľa použ. mena +- +- +- Advanced +- PokroÄilé +- +- +- Never ask before accessing credentials +- Credentials mean login data requested via browser extension +- Nikdy sa nepýtaÅ¥ pred prístupom k prihlasovacím údajom +- +- +- Never ask before updating credentials +- Credentials mean login data requested via browser extension +- Nikdy sa nepýtaÅ¥ pred úpravou prihlasovacích údajov +- +- +- Do not ask permission for HTTP Basic Auth +- An extra HTTP Basic Auth setting +- NepýtaÅ¥ povolenie na HTTP Basic Auth +- +- +- Automatically creating or updating string fields is not supported. +- Automatické vytváranie alebo úprava textových polí nie je podporovaná. +- +- +- Return advanced string fields which start with "KPH: " +- VrátiÅ¥ reÅ¥azce pokroÄilých polí, ktoré zaÄínajú na „KPH: †+- +- +- Don't display the popup suggesting migration of legacy KeePassHTTP settings. +- NezobrazovaÅ¥ okno s návrhom na migráciu starých nastavení KeePassHTTP. +- +- +- Do not prompt for KeePassHTTP settings migration. +- NepýtaÅ¥ sa na migráciu nastavení KeePassHTTP. +- +- +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- Pri Å¡tarte automaticky aktualizovaÅ¥ cestu spustiteľného súboru s KeePassXC alebo keepassxc-proxy na skripty posielania správ medzi prehliadaÄom a KeePassXC (native messaging). +- +- +- Update native messaging manifest files at startup +- Pri Å¡tarte automaticky aktualizovaÅ¥ súbory manifestu +- +- +- Use a custom proxy location if you installed a proxy manually. +- PoužiÅ¥ vlastné umiestnenie proxy, ak ste nainÅ¡talovali proxy manuálne. +- +- +- Use a custom proxy location: +- Meant is the proxy for KeePassXC-Browser +- PoužiÅ¥ vlastné umiestnenie proxy: +- +- +- Custom proxy location field +- Pole vlastné umiestnenia proxy +- +- +- Browser for custom proxy file +- PrehliadaÄ súboru vlastného proxy +- +- +- Browse... +- Button for opening file dialog +- Prechádzať… +- +- +- Use a custom browser configuration location: +- PoužiÅ¥ vlastné umiestnenie nastavenia prehliadaÄa: +- +- +- Browser type: +- Typ prehliadaÄa: +- +- +- Toolbar button style +- Å týl tlaÄidiel panela nástrojov +- +- +- Config Location: +- Umiestnenie nastavenia: +- +- +- Custom browser location field +- Pole vlastného umiestnenia prehlaidaÄa +- +- +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- +- +- Browse for custom browser path +- NájsÅ¥ cestu vlastného prehlaidaÄa +- +- +- Custom extension ID: +- Vlastné ID rozšírenia: +- +- +- Custom extension ID +- Vlastné ID rozšírenia +- +- +- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 +- Kvôli ochrane Snap v sandboxe, musíte na povolenie integrácie prehliadaÄa spustiÅ¥ skript.<br />Skript môžete získaÅ¥ z %1 +- +- +- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 +- Na fungovanie integrácie s prehliadaÄom je potrebný KeePassXC-Browser.<br /> Stiahnite ho pre %1 a %2. %3. %4 +- +- +- Please see special instructions for browser extension use below +- Prosím, pozrite si Å¡peciálne inÅ¡trukcie na použite integrácie prehliadaÄa nižšie +- +- +- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. +- <b>Chyba:</b> Vlastné umiestnenie proxy nemožno nájsÅ¥!<br/>Integrácia prehliadaÄa NEBUDE FUNGOVAŤ bez aplikácie proxy. +- +- +- <b>Warning:</b> The following options can be dangerous! +- <b>Upozornenie:</b> nasledujúce voľby môžu byÅ¥ nebezpeÄné! +- +- +- Executable Files +- Spustiteľné súbory +- +- +- All Files +- VÅ¡etky súbory +- +- +- Select custom proxy location +- ZvoliÅ¥ vlastné umiestnenie proxy +- +- +- Select native messaging host folder location +- Vyberte umiestnenie zložky hostiteľa správe medzi prehliadaÄom a KeePassXC +- +- +- +- CloneDialog +- +- Clone Options +- Voľby klonovania +- +- +- Append ' - Clone' to title +- PripojiÅ¥ do názvu „- Klon†+- +- +- Replace username and password with references +- NahradiÅ¥ použ. meno a heslo odkazmi +- +- +- Copy history +- KopírovaÅ¥ históriu +- +- +- +- CsvImportWidget +- +- Import CSV fields +- ImportovaÅ¥ polia CSV +- +- +- filename +- meno súboru +- +- +- size, rows, columns +- veľkosÅ¥, riadky, stĺpce +- +- +- Encoding +- Kódovanie +- +- +- Codec +- Kodek +- +- +- Text is qualified by +- Text je vymedzený pomocou +- +- +- Fields are separated by +- Polia sú oddelené pomocou +- +- +- Comments start with +- Komentáre zaÄínajú +- +- +- Consider '\' an escape character +- PovažovaÅ¥ „\†za znak „escape†+- +- +- Preview +- Ukážka +- +- +- Imported from CSV file +- Importované zo súboru CSV +- +- +- Original data: +- Pôvodné dáta: +- +- +- Error +- Chyba +- +- +- Error(s) detected in CSV file! +- V súbore CSV zistená chyba(y)! +- +- +- [%n more message(s) skipped] +- [%n ÄalÅ¡ia správa preskoÄená][%n ÄalÅ¡ie správy preskoÄené[%n Äalších správ preskoÄených][%n Äalších správ preskoÄených] +- +- +- CSV import: writer has errors: +-%1 +- Import CSV: chyby zápisu: +-%1 +- +- +- Text qualification +- Kvalifikácia textu +- +- +- Field separation +- Oddeľovanie polí +- +- +- Number of header lines to discard +- PoÄet riadkov hlaviÄky na zahodenie +- +- +- CSV import preview +- Ukážka importu CSV +- +- +- Column Association +- Asociaácia stĺpca +- +- +- Last Modified +- Posledná úprava +- +- +- Password +- Heslo +- +- +- Created +- Vytvorené +- +- +- Notes +- Poznámky +- +- +- Title +- Nadpis +- +- +- Group +- Skupina +- +- +- URL +- URL +- +- +- Username +- Použ. meno: +- +- +- Header lines skipped +- PreskoÄené riadky hlaviÄky +- +- +- First line has field names +- Prvý riadok sú názvy polí +- +- +- Not Present +- Chýba +- +- +- Column %1 +- Stĺpec %1 +- +- +- TOTP +- TOTP +- +- +- Icon +- Ikona +- +- +- +- CsvParserModel +- +- %n column(s) +- %n stĺpec%n stĺpce%n stĺpcov%n stĺpcov +- +- +- %1, %2, %3 +- file info: bytes, rows, columns +- %1, %2, %3 +- +- +- %n byte(s) +- %n bajt%n bajty%n bajtov%n bajt(y) +- +- +- %n row(s) +- %n riadok%n riadky%n riadkov%n riadkov +- +- +- +- Database +- +- File %1 does not exist. +- Súbor %1 neexistuje. +- +- +- Unable to open file %1. +- Nemožno otvoriÅ¥ súbor %1. +- +- +- Error while reading the database: %1 +- Chyba Äítania databázy: %1 +- +- +- File cannot be written as it is opened in read-only mode. +- Do súboru nemožno zapisovaÅ¥, pretože je otvorený v režime len na Äítanie. +- +- +- Key not transformed. This is a bug, please report it to the developers! +- KÄ¾ÃºÄ nebol transformovaný. Je to chyba, prosím, nahláste ju vývojárom! +- +- +- %1 +-Backup database located at %2 +- %1 +-ZálohovaÅ¥ databázu nachádzajúcu sa na %2 +- +- +- Could not save, database does not point to a valid file. +- Nepodarilo sa uložiÅ¥, databáza neukazuje na platný súbor. +- +- +- Could not save, database file is read-only. +- Nepodarilo sa uložiÅ¥, databázový súbor je iba na Äítanie +- +- +- Database file has unmerged changes. +- Súbor databázy má neuložené zmeny. +- +- +- Recycle Bin +- Kôš +- +- +- Passwords +- Root group name +- Heslá +- +- +- Database save is already in progress. +- Ukladanie databázy už prebieha. +- +- +- Could not save, database has not been initialized! +- Nemožno uložiÅ¥, databáza nebola inicializovaná! +- +- +- +- DatabaseOpenDialog +- +- Unlock Database - KeePassXC +- Odomknúť databázu – KeePassXC +- +- +- +- DatabaseOpenWidget +- +- Key File: +- Súbor kľúÄa: +- +- +- Refresh +- ObnoviÅ¥ +- +- +- Don't show this warning again +- NezobrazovaÅ¥ znova toto upozornenie +- +- +- All files +- VÅ¡etky súbory +- +- +- Key files +- Súbory kľúÄov +- +- +- Select key file +- Zvoľte súbor kľúÄa +- +- +- Failed to open key file: %1 +- Nepodarilo sa otvoriÅ¥ kľúÄový súbor: %1 +- +- +- Unlock KeePassXC Database +- Odomknúť databázu KeePassXC +- +- +- Enter Password: +- Zadajte heslo: +- +- +- Password field +- Pole pre heslo +- +- +- Hardware key slot selection +- Výber slotu hardvérového kľúÄa +- +- +- Browse for key file +- VyhľadaÅ¥ súbor kľúÄa +- +- +- Browse... +- Prechádzať… +- +- +- Refresh hardware tokens +- ObnoviÅ¥ hardvérové tokeny +- +- +- Hardware Key: +- Hardvérový kľúÄ: +- +- +- Hardware key help +- Pomocník pre hardvérový kÄ¾ÃºÄ +- +- +- TouchID for Quick Unlock +- TouchID pre rýchle odomknutie +- +- +- Unlock failed and no password given +- Odomkntie zlyhalo a nebolo zadané žiadne heslo +- +- +- Unlocking the database failed and you did not enter a password. +-Do you want to retry with an "empty" password instead? +- +-To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. +- Odomknutie databázy zlyhalo a nezadali ste heslo. +-Chcete sa pokúsiÅ¥ znova s prázdnym heslom? +- +-Ak chcete zabrániÅ¥ zobrazovaniu tejto chyby, musíte ísÅ¥ do "Nastavenia databázy/ZabezpeÄenia" a obnoviÅ¥ heslo. +- +- +- Retry with empty password +- SkúsiÅ¥ znova s prázdnym heslom +- +- +- Enter Additional Credentials (if any): +- Zadajte dodatoÄné prihlasovacie údaje (ak treba): +- +- +- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +-<p>Click for more information...</p> +- <p>Môžete použiÅ¥ hardvérový bezpeÄnostný kÄ¾ÃºÄ ako <strong>Yubikey</strong> alebo <strong>OnlyKey</strong> so slotmi nakonfigurovanými pre HMAC-SHA1.</p> +- <p>Kliknite pre viac informácií...</p> +- +- +- Key file help +- Pomocník súbora kľúÄov +- +- +- ? +- ? +- +- +- Cannot use database file as key file +- Súbor databázy nemožno použiÅ¥ ako súbor kľúÄa +- +- +- You cannot use your database file as a key file. +-If you do not have a key file, please leave the field empty. +- Nemôžete použiÅ¥ svoju databázu ako súbor kľúÄa. +-Ak nemáte súbor kľúÄa, prosím nechajte toto pole prázdne. +- +- +- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> +- <p>Ako doplnok hesla môžete, na zvýšenie bezpeÄnosti databázy, použiÅ¥ tajný súbor. Tento súbor môže byÅ¥ vygenerovaný v nastaveniach bezpeÄnosti databázy.</p><p>Tento súbor <strong>nie je</strong> súbor vaÅ¡ej databázy *.kdbx!<br>Ak nemáte súbor kľúÄa, nechajte toto pole prázdne.</p><p>Kliknite na ÄalÅ¡ie informácie…</p> +- +- +- Key file to unlock the database +- Súbor kľúÄa na odomknutie databázy +- +- +- Please touch the button on your YubiKey! +- Prosím, stlaÄte tlaÄidlo svojho YubiKey! +- +- +- Detecting hardware keys… +- Detekcia hardvérových kľúÄov… +- +- +- No hardware keys detected +- Nenájdené žiadne hardvérové kľúÄe +- +- +- Select hardware key… +- Zvoľte hardvérový kľúÄ… +- +- +- Old key file format +- +- +- +- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> +- +- +- +- +- DatabaseSettingWidgetMetaData +- +- Passwords +- Heslá +- +- +- +- DatabaseSettingsDialog +- +- Advanced Settings +- PokroÄilé nastavenia +- +- +- General +- VÅ¡eobecné +- +- +- Security +- BezpeÄnosÅ¥ +- +- +- Encryption Settings +- Nastavenia Å¡ifrovania +- +- +- Browser Integration +- Integrácia prehliadaÄa +- +- +- Database Credentials +- Prihlasovacie údaje databázy +- +- +- +- DatabaseSettingsWidgetBrowser +- +- KeePassXC-Browser settings +- Nastavenia KeePassXC-Browser +- +- +- Stored keys +- Uložené kľúÄe +- +- +- Remove +- OdstrániÅ¥ +- +- +- Delete the selected key? +- OdstrániÅ¥ zvolený kľúÄ? +- +- +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- Naozaj chcete odstrániÅ¥ zvolený kľúÄ? +-Môže to brániÅ¥ pripojeniu zásuvného modulu prehliadaÄa. +- +- +- Key +- KÄ¾ÃºÄ +- +- +- Value +- Hodnota +- +- +- Enable Browser Integration to access these settings. +- Zapnúť Integráciu prehliadaÄa na prístup k týmto nastaveniam. +- +- +- Disconnect all browsers +- OdpojiÅ¥ vÅ¡etky prehliadaÄe +- +- +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- Naozaj chcete odpojiÅ¥ vÅ¡etky prehliadaÄe? +-Môže to brániÅ¥ pripojeniu zásuvného modulu prehliadaÄa. +- +- +- KeePassXC: No keys found +- KeePassXC: Nenájdené žiadne kľúÄe +- +- +- No shared encryption keys found in KeePassXC settings. +- V nastavení KeePassXC neboli nájdené zdieľané Å¡ifrovacie kľúÄe. +- +- +- KeePassXC: Removed keys from database +- KeePassXC: KlúÄe odstránené z databázy +- +- +- Successfully removed %n encryption key(s) from KeePassXC settings. +- ÚspeÅ¡ne odstránený %n Å¡ifrovací kÄ¾ÃºÄ z nastavení KeePassXC.ÚspeÅ¡ne odstránené %n Å¡ifrovacie kľúÄe z nastavení KeePassXC.ÚspeÅ¡ne odstránených %n Å¡ifrovacích kľúÄov z nastavení KeePassXC.ÚspeÅ¡ne odstránených %n Å¡ifrovacích kľúÄov z nastavení KeePassXC. +- +- +- Forget all site-specific settings on entries +- Zabudnúť vÅ¡etky nastavenia položiek Å¡pecifické pre stránky +- +- +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- Naozaj chcete zabudnúť vÅ¡etky nastavenia stránok v každej položke? +-Povolenia na prístup k položkám budú odvolané. +- +- +- Removing stored permissions… +- Odstraňovanie uložených povolení… +- +- +- Abort +- ZruÅ¡iÅ¥ +- +- +- KeePassXC: Removed permissions +- KeePassXC: Povolenia odstránené +- +- +- Successfully removed permissions from %n entry(s). +- ÚspeÅ¡ne odstránené povolenia z %n položky.ÚspeÅ¡ne odstránené povolenia z %n položiek.ÚspeÅ¡ne odstránené povolenia z %n položiek.ÚspeÅ¡ne odstránené povolenia z %n položky. +- +- +- KeePassXC: No entry with permissions found! +- KeePassXC: Nenájdená žiadna položka s povoleniami! +- +- +- The active database does not contain an entry with permissions. +- Aktívna databáza neobsahuje položku s povoleniami. +- +- +- Move KeePassHTTP attributes to custom data +- Presunúť atribúty KeePassHTTP do vlastných dát +- +- +- Do you really want to move all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- Naozaj chcete presunúť vÅ¡etky staré dáta integrácie prehliadaÄa do najnovÅ¡ej normy? +-Je to potrebné kvôli udržaniu kompatibility so zásuvným modulom prehliadaÄa. +- +- +- Stored browser keys +- KľúÄe prehliadaÄa uložené +- +- +- Remove selected key +- OdstrániÅ¥ vybraný kÄ¾ÃºÄ +- +- +- Move KeePassHTTP attributes to KeePassXC-Browser custom data +- Presunúť atribúty KeePassHTTP do vlastných dát KeePassXC-Browser +- +- +- Refresh database root group ID +- ObnoviÅ¥ ID koreňovej skupiny databázy +- +- +- Created +- Vytvorené +- +- +- Refresh database ID +- ObnoviÅ¥ ID databázy +- +- +- Do you really want refresh the database ID? +-This is only necessary if your database is a copy of another and the browser extension cannot connect. +- Naozaj chcete obnoviÅ¥ ID databázy? +-Toto je potrebné len ak je vaÅ¡a databáza kópiou inej a doplnok prehliadaÄa sa nemôže pripojiÅ¥. +- +- +- +- DatabaseSettingsWidgetDatabaseKey +- +- Add additional protection... +- PridaÅ¥ dodatoÄné zabezpeÄenie… +- +- +- No password set +- Nie je nastavené heslo +- +- +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- UPOZORNENIE! Nenastavili iste heslo. Použitie databázy bez hesla dôrazne neodporúÄame! +- +-Naozaj chcete pokraÄovaÅ¥ bez hesla? +- +- +- Continue without password +- PokraÄovaÅ¥ bez hesla +- +- +- No encryption key added +- Nie je pridaný Å¡ifrovací kÄ¾ÃºÄ +- +- +- You must add at least one encryption key to secure your database! +- Na zabezpeÄenie svojej databázy musíte pridaÅ¥ aspoň jeden Å¡ifrovací kľúÄ! +- +- +- Unknown error +- Neznáma chyba +- +- +- Failed to change database credentials +- Zlyhala zmena prihlasovacích údajov databázy +- +- +- +- DatabaseSettingsWidgetEncryption +- +- Encryption Algorithm: +- Å ifrovací algoritmus: +- +- +- AES: 256 Bit (default) +- AES: 256 bit (predvolené) +- +- +- Twofish: 256 Bit +- Twofish: 256 bitov +- +- +- Key Derivation Function: +- Funkcia odvodenia kľúÄa (KDF): +- +- +- Transform rounds: +- PoÄet transformácií: +- +- +- Memory Usage: +- Využitie pamäte: +- +- +- Parallelism: +- Paralelizmus: +- +- +- Decryption Time: +- ÄŒas deÅ¡ifrovania: +- +- +- ?? s +- ?? s +- +- +- Change +- ZmeniÅ¥ +- +- +- Higher values offer more protection, but opening the database will take longer. +- VyÅ¡Å¡ie hodnoty poskytujú viac ochrany, ale otvorenie databázy bude trvaÅ¥ dlhÅ¡ie. +- +- +- Database format: +- Formát databázy: +- +- +- This is only important if you need to use your database with other programs. +- Toto je dôležité len ak potrebujete používaÅ¥ svoju databázu z iných programov. +- +- +- KDBX 4.0 (recommended) +- KDBX 4.0 (odporúÄané) +- +- +- KDBX 3.1 +- KDBX 3.1 +- +- +- unchanged +- Database decryption time is unchanged +- bez zmeny +- +- +- Number of rounds too high +- Key transformation rounds +- PoÄet prechodov príliÅ¡ vysoký +- +- +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or days (or even longer) to open! +- Zadali ste príliÅ¡ vysoký poÄet prechodov transformácie kľúÄa pre Argon2. +- +-Ak ponecháte toto Äíslo, môže otvorenie databázy trvaÅ¥ hodiny alebo i dni (dokonca i dlhÅ¡ie)! +- +- +- Understood, keep number +- Rozumiem, nechaÅ¥ hodnotu +- +- +- Cancel +- ZruÅ¡iÅ¥ +- +- +- Number of rounds too low +- Key transformation rounds +- PoÄet prechodov príliÅ¡ nízky +- +- +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database may be too easy to crack! +- Zadali ste príliÅ¡ nízky poÄet prechodov transformácie kľúÄa pre Argon2. +- +-Ak ponecháte toto Äíslo, môže byÅ¥ prelomenie ochrany databázy príliÅ¡ jednoduché! +- +- +- KDF unchanged +- KDF nezmenené +- +- +- Failed to transform key with new KDF parameters; KDF unchanged. +- Zlyhala transformácia kľúÄa s novými parametrami KDF; KDF nezmenené. +- +- +- MiB +- Abbreviation for Mebibytes (KDF settings) +- MiB MiB MiB MiB +- +- +- thread(s) +- Threads for parallel execution (KDF settings) +- vláknovláknavlákien vlákien +- +- +- Change existing decryption time +- ZmeniÅ¥ existujúci Äas deÅ¡ifrovania +- +- +- Decryption time in seconds +- ÄŒas deÅ¡ifrovania v sekundách +- +- +- Database format +- Formát databázy +- +- +- Encryption algorithm +- Å ifrovací algoritmus +- +- +- Key derivation function +- Funkcia odvodenia kľúÄa +- +- +- Transform rounds +- PoÄet transformácií +- +- +- Memory usage +- Využitie pamäte +- +- +- Parallelism +- Paralelizácia +- +- +- ?? ms +- ?? ms +- +- +- ? s +- ? s +- +- +- +- DatabaseSettingsWidgetFdoSecrets +- +- Exposed Entries +- Exponované položky +- +- +- Don't expose this database +- NezverejňovaÅ¥ túto databázu +- +- +- Expose entries under this group: +- ZverejňovaÅ¥ položky tejto skupiny: +- +- +- Enable Secret Service to access these settings. +- Zapnúť Tajnú službu na prístup k týmto nastaveniam. +- +- +- +- DatabaseSettingsWidgetGeneral +- +- Database Meta Data +- Meta dáta databázy +- +- +- Database name: +- Meno databázy: +- +- +- Database description: +- Popis databázy: +- +- +- Default username: +- Predvolené použ. meno: +- +- +- History Settings +- Nastavenia histórie +- +- +- Max. history items: +- Max. položiek histórie: +- +- +- Max. history size: +- Max. veľkosÅ¥ histórie: +- +- +- MiB +- MiB +- +- +- Use recycle bin +- PoužiÅ¥ kôš +- +- +- Additional Database Settings +- DodatoÄné nastavenia databázy +- +- +- Database name field +- Pole názvu databázy +- +- +- Database description field +- Pole popisu databázy +- +- +- Default username field +- Pole predvoleného používateľa +- +- +- Maximum number of history items per entry +- Maximálny poÄet histórie na položku +- +- +- Maximum size of history per entry +- Maximálna veľkosÅ¥ histórie na položku +- +- +- Delete Recycle Bin +- OdstrániÅ¥ Kôš +- +- +- Do you want to delete the current recycle bin and all its contents? +-This action is not reversible. +- Chcete odstrániÅ¥ aktuálny Kôš a vÅ¡etok jeho obsah? +-Táto akcia nie je reverzibilná. +- +- +- (old) +- (staré) +- +- +- Enable compression (recommended) +- Zapnúť komprimáciu (odporúÄané) +- +- +- +- DatabaseSettingsWidgetKeeShare +- +- Sharing +- Zdieľanie +- +- +- Breadcrumb +- Breadcrumb +- +- +- Type +- Typ +- +- +- Path +- Cesta +- +- +- Last Signer +- Naposledy podpísal +- +- +- Certificates +- Certifikáty +- +- +- > +- Breadcrumb separator +- > +- +- +- +- DatabaseSettingsWidgetMetaDataSimple +- +- Database Name: +- Meno databázy: +- +- +- Description: +- Popis: +- +- +- Database name field +- Pole názvu databázy +- +- +- Database description field +- Pole popisu databázy +- +- +- +- DatabaseTabWidget +- +- KeePass 2 Database +- Databáza KeePass 2 +- +- +- All files +- VÅ¡etky súbory +- +- +- Open database +- OtvoriÅ¥ databázu +- +- +- CSV file +- Súbor CSV +- +- +- Merge database +- ZlúÄiÅ¥ databázu +- +- +- Open KeePass 1 database +- OtvoriÅ¥ databázu KeePass 1 +- +- +- KeePass 1 database +- Databáza KeePass 1 +- +- +- Export database to CSV file +- ExportovaÅ¥ databázu do súboru CSV +- +- +- Writing the CSV file failed. +- Zápis do súboru CSV zlyhal. +- +- +- Database creation error +- Chyba vytvorenia databázy +- +- +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- Vytvorená databáza nemá kľúÄa alebo KDF, jej uloženie je odmietnuté. +-Toto je urÄite chyba, prosím nahláste ju vývojárom. +- +- +- Select CSV file +- Zvoľte súbor CSV +- +- +- New Database +- Nová databáza +- +- +- %1 [New Database] +- Database tab name modifier +- %1 [Nová databáza] +- +- +- %1 [Locked] +- Database tab name modifier +- %1 [Zamknutá] +- +- +- %1 [Read-only] +- Database tab name modifier +- %1 [Len na Äítanie] +- +- +- Failed to open %1. It either does not exist or is not accessible. +- Zlyhalo otvorenie %1. BuÄ neexistuje alebo je neprístupný. +- +- +- Export database to HTML file +- ExportovaÅ¥ databázu do súboru HTML +- +- +- HTML file +- Súbor HTML +- +- +- Writing the HTML file failed. +- Zápis do súboru HTML zlyhal. +- +- +- Export Confirmation +- Potvrdenie exportu +- +- +- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? +- Chystáte sa exportovaÅ¥ svoju databázu do neÅ¡ifrovaného súboru. Takto necháte svoje heslá a citlivé informácie nechránené! Naozaj chcete pokraÄovaÅ¥? +- +- +- Open OPVault +- OtvoriÅ¥ OPVault +- +- +- +- DatabaseWidget +- +- Searching... +- Hľadanie… +- +- +- Do you really want to delete the entry "%1" for good? +- Naozaj chcete nadobro odstrániÅ¥ položku „%1â€? +- +- +- Do you really want to move entry "%1" to the recycle bin? +- Naozaj chcete presunúť položku „%1†do koÅ¡a? +- +- +- Do you really want to move %n entry(s) to the recycle bin? +- Naozaj chcete presunúť %1 položku do koÅ¡a?Naozaj chcete presunúť %1 položky do koÅ¡a?Naozaj chcete presunúť %1 položiek do koÅ¡a?Naozaj chcete presunúť %1 položiek do koÅ¡a? +- +- +- Execute command? +- VykonaÅ¥ príkaz? +- +- +- Do you really want to execute the following command?<br><br>%1<br> +- Naozaj chcete spustiÅ¥ nasledujúci príkaz?<br><br>%1<br> +- +- +- Remember my choice +- ZapamätaÅ¥ si moju voľbu +- +- +- Do you really want to delete the group "%1" for good? +- Naozaj chcete nadobro odstrániÅ¥ skupinu „%1â€? +- +- +- No current database. +- Žiadna otvorená databáza. +- +- +- No source database, nothing to do. +- Žiadna zdrojová databáza, niet Äo robiÅ¥. +- +- +- Search Results (%1) +- Výsledky hľadania (%1) +- +- +- No Results +- Žiadne výsledky +- +- +- File has changed +- Súbor bol zmenený +- +- +- The database file has changed. Do you want to load the changes? +- Súbor databázy bol zmenený. Chcete naÄítaÅ¥ zmeny? +- +- +- Merge Request +- Požiadavka zlúÄenia +- +- +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- Súbor databázy bol zmenený a Vy máte neuložené zmeny. +-Chcete zlúÄiÅ¥ svoje zmeny? +- +- +- Empty recycle bin? +- VyprázdniÅ¥ kôš? +- +- +- Are you sure you want to permanently delete everything from your recycle bin? +- Naozaj chcete na trvalo odstrániÅ¥ vÅ¡etko zo svojho koÅ¡a? +- +- +- Do you really want to delete %n entry(s) for good? +- Naozaj chcete natrvalo odstrániÅ¥ %n položku?Naozaj chcete natrvalo odstrániÅ¥ %n položky?Naozaj chcete natrvalo odstrániÅ¥ %n položiek?Naozaj chcete natrvalo odstrániÅ¥ %n položky? +- +- +- Delete entry(s)? +- OdstrániÅ¥ položku?OdstrániÅ¥ položky?OdstrániÅ¥ položky?OdstrániÅ¥ položky? +- +- +- Move entry(s) to recycle bin? +- Presunúť položku do koÅ¡a?Presunúť položky do koÅ¡a?Presunúť položky do koÅ¡a?Presunúť položky do koÅ¡a? +- +- +- Lock Database? +- Zamknúť databázu? +- +- +- You are editing an entry. Discard changes and lock anyway? +- Upravujete položku. ZahodiÅ¥ zmeny a zamknúť napriek tomu? +- +- +- "%1" was modified. +-Save changes? +- „%1†bol zmenený. +-UložiÅ¥ zmeny? +- +- +- Database was modified. +-Save changes? +- Databáza bola zmenená. +-UložiÅ¥ zmeny? +- +- +- Save changes? +- UložiÅ¥ zmeny? +- +- +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- Nemožno otvoriÅ¥ nový databázový súbor poÄas pokusu o automatické opätovné naÄítanie. +-Chyba: %1 +- +- +- Disable safe saves? +- Vypnúť bezpeÄné ukladanie? +- +- +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- KeePassXC pri ukladaní databázy viac krát zlyhal. Pravdepodobne to je spôsobené službou synchronizácie súborov, ktorá drží zámok na ukladanom súbore. +-Vypnúť bezpeÄné ukladanie a skúsiÅ¥ znova? +- +- +- Passwords +- Heslá +- +- +- Save database as +- UložiÅ¥ databázu ako +- +- +- KeePass 2 Database +- Databáza KeePass 2 +- +- +- Replace references to entry? +- NahradiÅ¥ existujúcu položku? +- +- +- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? +- Položka „%1†má %2 odkaz. Chcete prepísaÅ¥ odkazy hodnotami, preskoÄiÅ¥ túto položku alebo ju i tak odstrániÅ¥?Položka „%1†má %2 odkazy. Chcete prepísaÅ¥ odkazy hodnotami, preskoÄiÅ¥ túto položku alebo ju i tak odstrániÅ¥?Položka „%1†má %2 odkazov. Chcete prepísaÅ¥ odkazy hodnotami, preskoÄiÅ¥ túto položku alebo ju i tak odstrániÅ¥?Položka „%1†má %2 odkazu. Chcete prepísaÅ¥ odkazy hodnotami, preskoÄiÅ¥ túto položku alebo ju i tak odstrániÅ¥? +- +- +- Delete group +- OdstrániÅ¥ skupinu +- +- +- Move group to recycle bin? +- Presunúť skupinu do koÅ¡a? +- +- +- Do you really want to move the group "%1" to the recycle bin? +- Naozaj chcete presunúť skupinu „%1†do koÅ¡a? +- +- +- Successfully merged the database files. +- ÚspeÅ¡ne zlúÄené databázové súbory. +- +- +- Database was not modified by merge operation. +- Databáza nebola operáciou zlúÄenia zmenená. +- +- +- Shared group... +- Zdieľaná skupina… +- +- +- Writing the database failed: %1 +- Zápis do databázy zlyhal: %1 +- +- +- This database is opened in read-only mode. Autosave is disabled. +- Táto databáza je otvorená len na Äítanie. Automatické ukladanie je vypnuté. +- +- +- Save database backup +- UložiÅ¥ zálohu databázy +- +- +- Could not find database file: %1 +- Nemožno nájsÅ¥ súbor databázy: %1 +- +- +- +- EditEntryWidget +- +- Entry +- Položka +- +- +- Advanced +- PokroÄilé +- +- +- Icon +- Ikona +- +- +- Auto-Type +- Automatické vypĺňanie +- +- +- Properties +- Vlastnosti +- +- +- History +- História +- +- +- SSH Agent +- Agent SSH +- +- +- n/a +- neznáme +- +- +- (encrypted) +- (Å¡ifrované) +- +- +- Select private key +- Zvoľte súkromný kÄ¾ÃºÄ +- +- +- Entry history +- História položky +- +- +- Add entry +- PridaÅ¥ položku +- +- +- Edit entry +- UpraviÅ¥ položku +- +- +- New attribute +- Nový atribút +- +- +- Are you sure you want to remove this attribute? +- Naozaj chcete odstrániÅ¥ tento atribút? +- +- +- Tomorrow +- Zajtra +- +- +- %n week(s) +- %n týždeň%n týždne%n týždňov%n týždňov +- +- +- %n month(s) +- %n mesiacoch%n mesiacoch%n mesiacoch%n mesiacoch +- +- +- Entry updated successfully. +- Položka úspeÅ¡ne zmenená. +- +- +- New attribute %1 +- Nový atribút %1 +- +- +- %n year(s) +- %n rok%n roky%n rokov%n rokov +- +- +- Confirm Removal +- PotvrdiÅ¥ odstránenie +- +- +- Browser Integration +- Integrácia prehliadaÄa +- +- +- <empty URL> +- <prázdna URL> +- +- +- Are you sure you want to remove this URL? +- Naozaj chcete odstrániÅ¥ túto URL? +- +- +- Reveal +- OdkryÅ¥ +- +- +- Hide +- SkryÅ¥ +- +- +- Unsaved Changes +- Neuložené zmeny +- +- +- Would you like to save changes to this entry? +- Chcete uložiÅ¥ zmeny tejto položky? +- +- +- [PROTECTED] Press Reveal to view or edit +- [CHRÃNENÉ] StlaÄte odkryÅ¥ na zobrazenie alebo úpravu +- +- +- Invalid Entry +- +- +- +- An external merge operation has invalidated this entry. +-Unfortunately, any changes made have been lost. +- +- +- +- +- EditEntryWidgetAdvanced +- +- Additional attributes +- ÄŽalÅ¡ie atribúty +- +- +- Add +- PridaÅ¥ +- +- +- Remove +- OdstrániÅ¥ +- +- +- Edit Name +- UpraviÅ¥ názov +- +- +- Protect +- ChrániÅ¥ +- +- +- Reveal +- OdkryÅ¥ +- +- +- Attachments +- Prílohy +- +- +- Foreground Color: +- Farba popredia: +- +- +- Background Color: +- Farba pozadia: +- +- +- Attribute selection +- Výber atribútu +- +- +- Attribute value +- Hodnota atribútu +- +- +- Add a new attribute +- PridaÅ¥ nový atribút +- +- +- Remove selected attribute +- OdstrániÅ¥ vybraný atribút +- +- +- Edit attribute name +- UpraviÅ¥ meno atribúta +- +- +- Toggle attribute protection +- Prepnúť ochranu atribúta +- +- +- Show a protected attribute +- ZobraziÅ¥ chránený atribút +- +- +- Foreground color selection +- Výber farby popredia +- +- +- Background color selection +- Výber farby pozadia +- +- +- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> +- <html><head/><body><p>Ak je zvolené, položka nebude zahrnutá v hlásenia ako Health Check alebo HIBP, a to ani keÄ nespĺňa požiadavky kvality (napr. náhodnosÅ¥ hesla alebo jeho opakované použitie). Môžete to zvoliÅ¥, ak máte heslo mimo svojej kontroly (napr. Å¡tvorciferný PIN), aby ste zbytoÄne nezapĺňali hlasenia.</p></body></html> +- +- +- Exclude from database reports +- VylúÄiÅ¥ z hlásení databázy +- +- +- +- EditEntryWidgetAutoType +- +- Enable Auto-Type for this entry +- Zapnúť Automatické vypĺňanie pre túto položku +- +- +- Window Associations +- Priradenie okna +- +- +- + +- + +- +- +- - +- - +- +- +- Window title: +- Názov okna: +- +- +- Use a specific sequence for this association: +- Pre toto priradenie použiÅ¥ Å¡pecifickú postupnosÅ¥: +- +- +- Custom Auto-Type sequence +- Vlastná postupnosÅ¥ Automatického vypĺňania +- +- +- Open Auto-Type help webpage +- Otvorí webovú stránku Automatického vypĺňania +- +- +- Existing window associations +- Existujúce priradenia okna +- +- +- Add new window association +- PridaÅ¥ nové priradenia okna +- +- +- Remove selected window association +- OdstrániÅ¥ vybrané priradenia okna +- +- +- You can use an asterisk (*) to match everything +- Môžete použiÅ¥ hviezdiÄku (*) na zhodu so vÅ¡etkým +- +- +- Set the window association title +- NastaviÅ¥ názov priradenia okna +- +- +- You can use an asterisk to match everything +- Môžete použiÅ¥ hviezdiÄku na zhodu so vÅ¡etkým +- +- +- Custom Auto-Type sequence for this window +- Vlastná postupnosÅ¥ Automatického vypĺňania tohoto okna +- +- +- Inherit default Auto-Type sequence from the group +- ZdediÅ¥ predvolenú postupnosÅ¥ Automatického vypĺňania zo skupiny +- +- +- Use custom Auto-Type sequence: +- PoužiÅ¥ vlastnú postupnosÅ¥ Automatického vypĺňania: +- +- +- +- EditEntryWidgetBrowser +- +- These settings affect to the entry's behaviour with the browser extension. +- Tieto nastavenia ovplyvňujú správanie položky s doplnkom prehliadaÄa. +- +- +- General +- VÅ¡eobecné +- +- +- Skip Auto-Submit for this entry +- Zapnúť Automatické vypĺňanie pre túto položku +- +- +- Hide this entry from the browser extension +- SkryÅ¥ túto položku v rozšírení prehliadaÄa +- +- +- Additional URL's +- ÄŽalÅ¡ie URL +- +- +- Add +- PridaÅ¥ +- +- +- Remove +- OdstrániÅ¥ +- +- +- Edit +- UpraviÅ¥ +- +- +- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. +- Toto nastavenie posielaÅ¥ do prehliadaÄa len pre dialógy HTTP Auth. Ak je zapnuté, bežné prihlasovacie formuláre nebudú na výber poskytovaÅ¥ túto položku. +- +- +- Use this entry only with HTTP Basic Auth +- PoužiÅ¥ položku len pre HTTP Basic Auth +- +- +- +- EditEntryWidgetHistory +- +- Show +- ZobraziÅ¥ +- +- +- Restore +- VrátiÅ¥ +- +- +- Delete +- OdstrániÅ¥ +- +- +- Delete all +- OdstrániÅ¥ vÅ¡etko +- +- +- Entry history selection +- Výber histórie položky +- +- +- Show entry at selected history state +- ZobraziÅ¥ stav položky v okamžiku zvolenej histórie +- +- +- Restore entry to selected history state +- ObnoviÅ¥ stav položky do okamžiku zvolenej histórie +- +- +- Delete selected history state +- VymazaÅ¥ zvolený stav histórie +- +- +- Delete all history +- VymazaÅ¥ celú históriu +- +- +- +- EditEntryWidgetMain +- +- URL: +- URL: +- +- +- Password: +- Heslo: +- +- +- Title: +- Názov: +- +- +- Presets +- Predvoľby +- +- +- Toggle the checkbox to reveal the notes section. +- Prepnite zaÅ¡krtávacie pole na odkrytie sekcie poznámok. +- +- +- Username: +- Použ. meno: +- +- +- Url field +- Pole URL +- +- +- Download favicon for URL +- StiahnuÅ¥ ikonu URL +- +- +- Password field +- Pole pre heslo +- +- +- Toggle notes visible +- Prepnúť tobrazenie poznámok +- +- +- Expiration field +- Pole doby platnosti +- +- +- Expiration Presets +- Prednastavenia platnosti +- +- +- Expiration presets +- Prednastavenia platnosti +- +- +- Notes field +- Pole poznámok +- +- +- Title field +- Pole nadpisu +- +- +- Username field +- Pole použ. mena +- +- +- Toggle expiration +- Prepnúť dobu platnosti +- +- +- Notes: +- Poznámky: +- +- +- https://example.com +- https://example.com +- +- +- Expires: +- Platí do: +- +- +- Edit Entry +- +- +- +- +- EditEntryWidgetSSHAgent +- +- Form +- Formulár +- +- +- Remove key from agent after +- OdstrániÅ¥ kÄ¾ÃºÄ z agenta po +- +- +- seconds +- sekundy +- +- +- Fingerprint +- OdtlaÄok +- +- +- Remove key from agent when database is closed/locked +- OdstrániÅ¥ kÄ¾ÃºÄ z agenta po zatvorení/zamknutí databázy +- +- +- Public key +- Verejný kÄ¾ÃºÄ +- +- +- Add key to agent when database is opened/unlocked +- PridaÅ¥ kÄ¾ÃºÄ do agenta keÄ je databáza otvorená/odomknutá +- +- +- Comment +- Komentár +- +- +- Decrypt +- DeÅ¡ifrovaÅ¥ +- +- +- n/a +- neznáme +- +- +- Copy to clipboard +- KopírovaÅ¥ do schránky +- +- +- Private key +- Súkromný kÄ¾ÃºÄ +- +- +- External file +- Externý súbor +- +- +- Browse... +- Button for opening file dialog +- Prechádzať… +- +- +- Attachment +- Príloha +- +- +- Add to agent +- PridaÅ¥ do agenta +- +- +- Remove from agent +- OdstrániÅ¥ z agenta +- +- +- Require user confirmation when this key is used +- VyžadovaÅ¥ potvrdenie používateľa, keÄ je tento kÄ¾ÃºÄ použitý +- +- +- Remove key from agent after specified seconds +- OdstrániÅ¥ kÄ¾ÃºÄ z agenta po zadanom poÄte sekúnd +- +- +- Browser for key file +- VybraÅ¥ súbor kľúÄa +- +- +- External key file +- Súbor externého kľúÄa +- +- +- Select attachment file +- Zvoľte súbor prílohy +- +- +- +- EditGroupWidget +- +- Group +- Skupina +- +- +- Icon +- Ikona +- +- +- Properties +- Vlastnosti +- +- +- Add group +- PridaÅ¥ skupinu +- +- +- Edit group +- UpraviÅ¥ skupinu +- +- +- Enable +- Zapnúť +- +- +- Disable +- Vypnúť +- +- +- Inherit from parent group (%1) +- ZdediÅ¥ z nadradenej skupiny (%1) +- +- +- Entry has unsaved changes +- Položka má neuložené zmeny +- +- +- +- EditGroupWidgetKeeShare +- +- Type: +- Typ: +- +- +- Path: +- Cesta: +- +- +- Password: +- Heslo: +- +- +- Inactive +- Neaktívne +- +- +- KeeShare unsigned container +- Nepodpísaný kontajner KeeShare +- +- +- KeeShare signed container +- Podpísaný kontajner KeeShare +- +- +- Select import source +- Vyberte zdroj importu +- +- +- Select export target +- Vyberte cieľ exportu +- +- +- Select import/export file +- Vyberte súbor importu/exportu +- +- +- Clear +- VymazaÅ¥ +- +- +- Import +- ImportovaÅ¥ +- +- +- Export +- Export +- +- +- Synchronize +- SynchronizovaÅ¥ +- +- +- Your KeePassXC version does not support sharing this container type. +-Supported extensions are: %1. +- Táto verzia KeePassXC nepodporuje zdieľanie tohoto typu kontajnera. +-Podporované rozšírenia sú: %1. +- +- +- %1 is already being exported by this database. +- %1 už bolo exportované touto databázou. +- +- +- %1 is already being imported by this database. +- %1 už bolo importované touto databázou. +- +- +- %1 is being imported and exported by different groups in this database. +- %1 má byÅ¥ importované a exportované rôznymi skupinami tejto databázy. +- +- +- KeeShare is currently disabled. You can enable import/export in the application settings. +- KeeShare is a proper noun +- KeeShare je momentálne vypnuté. Import/export môžete zapnúť v nastaveniach aplikácie. +- +- +- Database export is currently disabled by application settings. +- Export databázy je momentálne vypnutý v nastaveniach aplikácie. +- +- +- Database import is currently disabled by application settings. +- Import databázy je momentálne vypnutý v nastaveniach aplikácie. +- +- +- Sharing mode field +- Pole režimu zdieľania +- +- +- Path to share file field +- Pole cesty zdieľania súboru +- +- +- Password field +- Pole pre heslo +- +- +- Clear fields +- VymazaÅ¥ polia +- +- +- Browse for share file +- VybraÅ¥ zdieľaný súbor +- +- +- Browse... +- Prechádzať… +- +- +- +- EditGroupWidgetMain +- +- Name field +- Pole mena +- +- +- Notes field +- Pole poznámok +- +- +- Toggle expiration +- Prepnúť dobu platnosti +- +- +- Auto-Type toggle for this and sub groups +- Prepnúť Automatické dopĺňanie tejto a vnorených skupín +- +- +- Expiration field +- Pole doby platnosti +- +- +- Search toggle for this and sub groups +- Prepnúť hľadanie tejto a podriadených skupín +- +- +- Default auto-type sequence field +- Pole postupnosti Automatického vypĺňania +- +- +- Expires: +- Platí do: +- +- +- Use default Auto-Type sequence of parent group +- PoužiÅ¥ predvolenú postupnosÅ¥ Automatického vypĺňania rodiÄovskej skupiny +- +- +- Auto-Type: +- Automatické vypĺňanie: +- +- +- Search: +- HľadaÅ¥: +- +- +- Notes: +- Poznámky: +- +- +- Name: +- Názov: +- +- +- Set default Auto-Type sequence +- NastaviÅ¥ predvolenú postupnosÅ¥ Automatického vypĺňania +- +- +- Edit Group +- +- +- +- +- EditWidgetIcons +- +- Add custom icon +- PridaÅ¥ vlastnú ikonu +- +- +- Delete custom icon +- OdstrániÅ¥ vlastnú ikonu +- +- +- Download favicon +- StiahnuÅ¥ ikonu stránky +- +- +- Unable to fetch favicon. +- Nemožno stiahnuÅ¥ ikonu stránky +- +- +- Images +- Obrázky +- +- +- All files +- VÅ¡etky súbory +- +- +- Confirm Delete +- PotvrÄte odstránenie +- +- +- Select Image(s) +- vyberte obrázok(y) +- +- +- Successfully loaded %1 of %n icon(s) +- ÚspeÅ¡ne naÄítané %1 z %n ikonyÚspeÅ¡ne naÄítané %1 z %n ikonÚspeÅ¡ne naÄítané %1 z %n ikonÚspeÅ¡ne naÄítané %1 z %n ikony +- +- +- No icons were loaded +- Neboli naÄítané ikony +- +- +- %n icon(s) already exist in the database +- %n ikony už v databáze existuje%n ikony už v databáze existujú%n ikon už v databáze existuje%n ikony už v databáze existuje +- +- +- The following icon(s) failed: +- Nasledujúca ikona zlyhala:Nasledujúce ikony zlyhali:Nasledujúce ikony zlyhali:Nasledujúce ikony zlyhali: +- +- +- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? +- Táto ikona je použitá v %n položke a bude nahradená predvolenou ikonou. Naozaj ju chcete odstrániÅ¥?Táto ikona je použitá v %n položkách a bude nahradená predvolenou ikonou. Naozaj ju chcete odstrániÅ¥?Táto ikona je použitá v %n položkách a bude nahradená predvolenou ikonou. Naozaj ju chcete odstrániÅ¥?Táto ikona je použitá v %n položke a bude nahradená predvolenou ikonou. Naozaj ju chcete odstrániÅ¥? +- +- +- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security +- Môžete zapnúť webovú službu ikon DuckDuckGo v Nástroje -> Nastavenie -> BezpeÄnosÅ¥ +- +- +- Download favicon for URL +- StiahnuÅ¥ ikonu URL +- +- +- Apply selected icon to subgroups and entries +- PoužiÅ¥ zvolenú ikonu na podskupiny a položky +- +- +- Also apply to child groups +- PoužiÅ¥ aj na podriadené skupiny +- +- +- Also apply to child entries +- PoužiÅ¥ aj na podriadené položky +- +- +- Also apply to all children +- PoužiÅ¥ na vÅ¡etkých potomkov +- +- +- Existing icon selected. +- Zvolená existujúca ikona. +- +- +- Use default icon +- PoužiÅ¥ predvolenú ikonu +- +- +- Use custom icon +- PoužiÅ¥ vlastnú ikonu +- +- +- Apply icon to... +- PoužiÅ¥ ikonu na… +- +- +- Apply to this group only +- PoužiÅ¥ len na túto skupinu +- +- +- +- EditWidgetProperties +- +- Created: +- Vytvorené: +- +- +- Modified: +- Zmenené: +- +- +- Accessed: +- Pristupované: +- +- +- Uuid: +- UUID: +- +- +- Plugin Data +- Dáta zásuvného modulu +- +- +- Remove +- OdstrániÅ¥ +- +- +- Delete plugin data? +- OdstrániÅ¥ dáta zásuvného modulu? +- +- +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- Naozaj chcete odstrániÅ¥ dáta zvoleného zásuvného modulu? +-Môže to spôsobiÅ¥ nefunkÄnosÅ¥ dotknutých zásuvných modulov. +- +- +- Key +- KÄ¾ÃºÄ +- +- +- Value +- Hodnota +- +- +- Datetime created +- Dátum a Äas vytvorenia +- +- +- Datetime modified +- Dátum a Äas úpravy +- +- +- Datetime accessed +- Dátum a Äas použitia +- +- +- Unique ID +- JedineÄné ID +- +- +- Plugin data +- Dáta zásuvného modulu +- +- +- Remove selected plugin data +- OdstrániÅ¥ dáta zásuvného modulu +- +- +- +- Entry +- +- %1 - Clone +- %1 – Klon +- +- +- +- EntryAttachmentsModel +- +- Name +- Názov +- +- +- Size +- VeľkosÅ¥ +- +- +- +- EntryAttachmentsWidget +- +- Form +- Formulár +- +- +- Add +- PridaÅ¥ +- +- +- Remove +- OdstrániÅ¥ +- +- +- Open +- OtvoriÅ¥ +- +- +- Save +- UložiÅ¥ +- +- +- Select files +- Zvoľte súbory +- +- +- Are you sure you want to remove %n attachment(s)? +- Naozaj chcete odstrániÅ¥ %n prílohu?Naozaj chcete odstrániÅ¥ %n prílohy?Naozaj chcete odstrániÅ¥ %n príloh?Naozaj chcete odstrániÅ¥ %n príloh? +- +- +- Save attachments +- UložiÅ¥ prílohy +- +- +- Unable to create directory: +-%1 +- Nemožno vytvoriÅ¥ zložku: +-%1 +- +- +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- Naozaj chcete prepísaÅ¥ existujúci súbor „%1†prílohou? +- +- +- Confirm overwrite +- PotvrÄte prepísanie +- +- +- Unable to save attachments: +-%1 +- Nemožno uložiÅ¥ prílohy: +-%1 +- +- +- Unable to open attachment: +-%1 +- Nemožno otvoriÅ¥ prílohu: +-%1 +- +- +- Unable to open attachments: +-%1 +- Nemožno otvoriÅ¥ prílohy: +-%1 +- +- +- Confirm remove +- PotvrdiÅ¥ odstránenie +- +- +- Unable to open file(s): +-%1 +- Nemožno otvoriÅ¥ súbor: +-%1Nemožno otvoriÅ¥ súbory: +-%1Nemožno otvoriÅ¥ súbory: +-%1Nemožno otvoriÅ¥ súbory: +-%1 +- +- +- Attachments +- Prílohy +- +- +- Add new attachment +- PridaÅ¥ novú prílohu +- +- +- Remove selected attachment +- OdstrániÅ¥ zvolenú prílohu +- +- +- Open selected attachment +- OtvoriÅ¥ zvolenú prílohu +- +- +- Save selected attachment to disk +- UložiÅ¥ zvolenú prílohu na disk +- +- +- %1 is a big file (%2 MB). +-Your database may get very large and reduce performance. +- +-Are you sure to add this file? +- %1 je veľký súbor (%2 MB). +-VaÅ¡a databáza môže veľmi narásÅ¥ a znížiÅ¥ výkon. +- +-Naozaj chcete pridaÅ¥ tento súbor? +- +- +- Confirm Attachment +- PotvrdiÅ¥ prílohu +- +- +- +- EntryAttributesModel +- +- Name +- Názov +- +- +- +- EntryHistoryModel +- +- Last modified +- Posledná úprava +- +- +- Title +- Nadpis +- +- +- Username +- Používateľské meno +- +- +- URL +- URL +- +- +- +- EntryModel +- +- Ref: +- Reference abbreviation +- Ref: +- +- +- Group +- Skupina +- +- +- Title +- Nadpis +- +- +- Username +- Používateľské meno +- +- +- URL +- URL +- +- +- Never +- Nikdy +- +- +- Password +- Heslo +- +- +- Notes +- Poznámky +- +- +- Expires +- Platí do +- +- +- Created +- Vytvorené +- +- +- Modified +- Upravené +- +- +- Accessed +- Pristupované +- +- +- Attachments +- Prílohy +- +- +- Size +- VeľkosÅ¥ +- +- +- Group name +- Názov skupiny +- +- +- Entry title +- Názov položky +- +- +- Entry notes +- Poznámky položky +- +- +- Entry expires at +- Položka platí do +- +- +- Creation date +- Dátum vytvorenia +- +- +- Last modification date +- Dátum poslednej úpravy +- +- +- Last access date +- Dátum posledného prístupu +- +- +- Attached files +- Pripojené súbory +- +- +- Entry size +- VeľkosÅ¥ položky +- +- +- Has attachments +- Má prílohy +- +- +- Has TOTP one-time password +- Má TOTP jednorázové Äasové heslo +- +- +- +- EntryPreviewWidget +- +- Close +- ZatvoriÅ¥ +- +- +- General +- VÅ¡eobecné +- +- +- Username +- Použ. meno: +- +- +- Password +- Heslo +- +- +- Expiration +- Platí do +- +- +- URL +- URL +- +- +- Attributes +- Atribúty +- +- +- Attachments +- Prílohy +- +- +- Notes +- Poznámky +- +- +- Autotype +- Automatické vypĺňanie +- +- +- Window +- Okno +- +- +- Sequence +- PostupnosÅ¥ +- +- +- Searching +- Hľadanie +- +- +- Search +- HľadaÅ¥ +- +- +- Clear +- VymazaÅ¥ +- +- +- Never +- Nikdy +- +- +- [PROTECTED] +- [CHRÃNENÉ] +- +- +- Enabled +- Zapnuté +- +- +- Disabled +- Vypnuté +- +- +- Share +- ZdieľaÅ¥ +- +- +- Display current TOTP value +- ZobraziÅ¥ aktuálnu hodnotu TOTP +- +- +- Advanced +- PokroÄilé +- +- +- Default Sequence +- +- +- +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- attributes line +- +- +- +- +- EntryURLModel +- +- Invalid URL +- Neplatná URL +- +- +- +- EntryView +- +- Fit to window +- PrispôsobiÅ¥ oknu +- +- +- Fit to contents +- PrispôsobiÅ¥ obsahu +- +- +- Reset to defaults +- ObnoviÅ¥ predvolené +- +- +- Has attachments +- Entry attachment icon toggle +- Má prílohy +- +- +- Has TOTP +- Entry TOTP icon toggle +- Má TOTP +- +- +- +- FdoSecrets::Item +- +- Entry "%1" from database "%2" was used by %3 +- Položka „%1†z databázy „%2†bola použitá %3 +- +- +- +- FdoSecrets::Service +- +- Failed to register DBus service at %1.<br/> +- Zlyhala registrácia služby DBus na %1. +- +- +- %n Entry(s) was used by %1 +- %1 is the name of an application +- %n položka použitá v %1%n položky použité v %1%n položiek použitých v %1%n položky použité v %1 +- +- +- +- FdoSecrets::SettingsDatabaseModel +- +- File Name +- Meno súboru +- +- +- Group +- Skupina +- +- +- Manage +- SpravovaÅ¥ +- +- +- Unlock to show +- Odomknúť na zobrazenie +- +- +- None +- Žiadny +- +- +- +- FdoSecrets::SettingsSessionModel +- +- Application +- Aplikácia +- +- +- Manage +- SpravovaÅ¥ +- +- +- +- FdoSecretsPlugin +- +- <b>Fdo Secret Service:</b> %1 +- +- +- +- Unknown +- Unknown PID +- Neznámy +- +- +- Unknown +- Unknown executable path +- Neznámy +- +- +- <i>PID: %1, Executable: %2</i> +- <i>PID: 1234, Executable: /path/to/exe</i> +- <i>PID: %1, príkaz: %2</i> +- +- +- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. +- Je spustená iná tajná služba (%1).<br/>Prosím, zastavte/odstráňte ju pred zapnutím Integrácie Tajnej služby. +- +- +- +- Group +- +- [empty] +- group has no children +- [prázdne] +- +- +- +- HibpDownloader +- +- Online password validation failed +- Online overenie hesla zlyahlo +- +- +- +- IconDownloaderDialog +- +- Download Favicons +- StiahnuÅ¥ ikony +- +- +- Cancel +- ZruÅ¡iÅ¥ +- +- +- Having trouble downloading icons? +-You can enable the DuckDuckGo website icon service in the security section of the application settings. +- Máte problémy so sÅ¥ahovaním ikon? +-V bezpeÄnostnej sekcii nastavení aplikácie môžete zapnúť webovú službu ikon. +- +- +- Close +- ZatvoriÅ¥ +- +- +- URL +- URL +- +- +- Status +- Status +- +- +- Please wait, processing entry list... +- Prosím, poÄkajte, spracovanie zoznamu položiek… +- +- +- Downloading... +- SÅ¥ahovanie… +- +- +- Ok +- Ok +- +- +- Already Exists +- Už existuje +- +- +- Download Failed +- SÅ¥ahovanie zlyhalo +- +- +- Downloading favicons (%1/%2)... +- SÅ¥ahovanie ikon (%1/%2)… +- +- +- +- KMessageWidget +- +- &Close +- &ZatvoriÅ¥ +- +- +- Close message +- ZatvoriÅ¥ správu +- +- +- +- Kdbx3Reader +- +- missing database headers +- chýbajúce hlaviÄky databázy +- +- +- Header doesn't match hash +- HlaviÄka nezodpovedá odtlaÄku +- +- +- Invalid header id size +- Neplatná veľkosÅ¥ ID hlaviÄky +- +- +- Invalid header field length +- Neplatná dĺžka poľa hlaviÄky +- +- +- Invalid header data length +- Neplatná dĺžka dát hlaviÄky +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Boli zadané neplatné prihlasovacie údaje, prosím skúste znova. +-Ak sa to opakuje, potom môže byÅ¥ súbor databázy poÅ¡kodený. +- +- +- Unable to calculate database key +- Nemožno vypoÄítaÅ¥ kÄ¾ÃºÄ databázy +- +- +- Unable to issue challenge-response: %1 +- Nemožno vyvolaÅ¥ výzvu – odpoveÄ: %1 +- +- +- +- Kdbx3Writer +- +- Unable to issue challenge-response: %1 +- Nemožno vyvolaÅ¥ výzvu – odpoveÄ: %1 +- +- +- Unable to calculate database key +- Nemožno vypoÄítaÅ¥ kÄ¾ÃºÄ databázy +- +- +- +- Kdbx4Reader +- +- missing database headers +- chýbajúce hlaviÄky databázy +- +- +- Invalid header checksum size +- Neplatná veľkosÅ¥ kontrolného súÄtu hlaviÄky +- +- +- Header SHA256 mismatch +- Nezhoda hlaviÄky SHA256 +- +- +- Unknown cipher +- Neznáma Å¡ifra +- +- +- Invalid header id size +- Neplatná veľkosÅ¥ ID hlaviÄky +- +- +- Invalid header field length +- Neplatná dĺžka poľa hlaviÄky +- +- +- Invalid header data length +- Neplatná dĺžka dát hlaviÄky +- +- +- Failed to open buffer for KDF parameters in header +- Zlyhalo otvorenie bufera parametrov KDF v hlaviÄke +- +- +- Unsupported key derivation function (KDF) or invalid parameters +- Nepodporovaná funkcia odvodenia kľúÄa (KDF) alebo neplatné parametre +- +- +- Legacy header fields found in KDBX4 file. +- V súbore KDBX4 nájdené staré polia hlaviÄiek. +- +- +- Invalid inner header id size +- Neplatná veľkosÅ¥ ID vnútornej hlaviÄky +- +- +- Invalid inner header field length +- Neplatná dĺžka poľa vnútornej hlaviÄky +- +- +- Invalid inner header binary size +- Neplatná binárna veľkosÅ¥ vnútornej hlaviÄky +- +- +- Unsupported KeePass variant map version. +- Translation: variant map = data structure for storing meta data +- Nepodporovaná verzia meta-dát KeePass. +- +- +- Invalid variant map entry name length +- Translation: variant map = data structure for storing meta data +- Neplatná dĺžka názvu položky mapy varianty +- +- +- Invalid variant map entry name data +- Translation: variant map = data structure for storing meta data +- Neplatné dáta názvu položky mapy varianty +- +- +- Invalid variant map entry value length +- Translation: variant map = data structure for storing meta data +- Neplatná dĺžka hodnoty položky mapy varianty +- +- +- +- Invalid variant map entry value data +- Translation comment: variant map = data structure for storing meta data +- Neplatné dáta hodnoty položky mapy varianty +- +- +- Invalid variant map Bool entry value length +- Translation: variant map = data structure for storing meta data +- Neplatná dĺžka hodnoty logickej položky meta-dát +- +- +- Invalid variant map Int32 entry value length +- Translation: variant map = data structure for storing meta data +- Neplatná dĺžka 32 bitovej celoÄíselnej hodnoty položky meta-dát +- +- +- Invalid variant map UInt32 entry value length +- Translation: variant map = data structure for storing meta data +- Neplatná dĺžka 32 bitovej kladnej celoÄíselné hodnoty meta-dát +- +- +- Invalid variant map Int64 entry value length +- Translation: variant map = data structure for storing meta data +- Neplatná dĺžka 64 bitovej celoÄíselnej hodnoty meta-dát +- +- +- Invalid variant map UInt64 entry value length +- Translation: variant map = data structure for storing meta data +- Neplatná dĺžka 64 bitovej kladnej celoÄíselné hodnoty meta-dát +- +- +- Invalid variant map entry type +- Translation: variant map = data structure for storing meta data +- Neplatný typ položky meta-dát +- +- +- Invalid variant map field type size +- Translation: variant map = data structure for storing meta data +- Neplatná veľkosÅ¥ typu poľa meta-dát +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Boli zadané neplatné prihlasovacie údaje, prosím skúste znova. +-Ak sa to opakuje, potom môže byÅ¥ súbor databázy poÅ¡kodený. +- +- +- (HMAC mismatch) +- (nezhoda HMAC) +- +- +- Unable to calculate database key: %1 +- Nemožno vypoÄítaÅ¥ kÄ¾ÃºÄ databázy: %1 +- +- +- +- Kdbx4Writer +- +- Invalid symmetric cipher algorithm. +- Neplatný algoritmus symetrickej Å¡ifry. +- +- +- Invalid symmetric cipher IV size. +- IV = Initialization Vector for symmetric cipher +- Neplatná veľkosÅ¥ IV symetrickej Å¡ifry. +- +- +- Failed to serialize KDF parameters variant map +- Translation comment: variant map = data structure for storing meta data +- Zlyhala serializácia parametrov KDF meta-dát +- +- +- Unable to calculate database key: %1 +- Nemožno vypoÄítaÅ¥ kÄ¾ÃºÄ databázy: %1 +- +- +- +- KdbxReader +- +- Unsupported cipher +- Nepodporovaná Å¡ifra +- +- +- Invalid compression flags length +- Nepodporovaný komprimaÄný algoritmus +- +- +- Unsupported compression algorithm +- Nepodporovaný komprimaÄný algoritmus +- +- +- Invalid master seed size +- Neplatná veľkosÅ¥ hlavnej náhodnosti (seed) +- +- +- Invalid transform seed size +- Neplatná transformácia hlavnej náhodnosti (seed) +- +- +- Invalid transform rounds size +- Neplatná veľkosÅ¥ transformaÄných prechodov +- +- +- Invalid start bytes size +- Neplatná poÄiatoÄná veľkosÅ¥ bajtov +- +- +- Invalid random stream id size +- Neplatná veľkosÅ¥ ID náhodného prúdu +- +- +- Invalid inner random stream cipher +- Neplatná vnútorná náhodnosÅ¥ prúdovej Å¡ifry +- +- +- Not a KeePass database. +- Nie je databáza KeePass +- +- +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- Zvolený súbor je stará databáza KeePass 1 (.kdb). +- +-Môžete ju importovaÅ¥ kliknutím na Databáza > „ImportovaÅ¥ databázu KeePass 1…â€. +-Je to jednosmerná migrácia. Importovanú databázu už nebude možné otvoriÅ¥ pomocou starej verzie KeePassX 0.4. +- +- +- Unsupported KeePass 2 database version. +- Nepodporovaná verzia databázy KeePass 2. +- +- +- Invalid cipher uuid length: %1 (length=%2) +- Neplatná dĺžka UUID Å¡ifry: %1 (length=%2) +- +- +- Unable to parse UUID: %1 +- Nemožno spracovaÅ¥ UUID: %1 +- +- +- Failed to read database file. +- Zlyhalo Äítanie súboru databázy. +- +- +- +- KdbxXmlReader +- +- XML parsing failure: %1 +- Chyba spracovania XML: %1 +- +- +- No root group +- Žiadna koreňová skupina +- +- +- Missing icon uuid or data +- Chýbajúce UUID ikony alebo dáta +- +- +- Missing custom data key or value +- Chýbajúci kÄ¾ÃºÄ alebo hodnota vlastných dát +- +- +- Multiple group elements +- Viaceré položky skupiny +- +- +- Null group uuid +- Nulový UUID skupiny +- +- +- Invalid group icon number +- Neplatný poÄet ikon skupiny +- +- +- Invalid EnableAutoType value +- Neplatná hodnota EnableAutoType +- +- +- Invalid EnableSearching value +- Neplatná hodnota EnableSearching +- +- +- No group uuid found +- Nenájdené UUID skupiny +- +- +- Null DeleteObject uuid +- Nulový UUID DeleteObject +- +- +- Missing DeletedObject uuid or time +- Chýbajúci UUID alebo Äas DeletedObject +- +- +- Null entry uuid +- Nulový UUID položky +- +- +- Invalid entry icon number +- Neplatný poÄet ikon položky +- +- +- History element in history entry +- Prvok histórie v položke histórie +- +- +- No entry uuid found +- Nenájdené UUID položky +- +- +- History element with different uuid +- Prvok histórie s iným UUID +- +- +- Duplicate custom attribute found +- Nájdený duplicitný vlastný atribút +- +- +- Entry string key or value missing +- Chýba kÄ¾ÃºÄ alebo hodnota reÅ¥azca položky +- +- +- Entry binary key or value missing +- Chýba binárny kÄ¾ÃºÄ alebo hodnota položky +- +- +- Auto-type association window or sequence missing +- Chýba priradenie okna alebo postupnosÅ¥ Automatického vypĺňania +- +- +- Invalid bool value +- Neplatná logická hodnota +- +- +- Invalid date time value +- Neplatná hodnota dátumu/Äasu +- +- +- Invalid color value +- Neplatná hodnota farby +- +- +- Invalid color rgb part +- neplatná ÄasÅ¥ RGB farby +- +- +- Invalid number value +- Neplatná Äíselná hodnota +- +- +- Invalid uuid value +- Neplatná hodnota UUID +- +- +- Unable to decompress binary +- Translator meant is a binary data inside an entry +- Nemožno dekomprimovaÅ¥ binárku +- +- +- XML error: +-%1 +-Line %2, column %3 +- Chyba XML: +-%1 +-Riadok %2, stĺpec %3 +- +- +- +- KeeAgentSettings +- +- Invalid KeeAgent settings file structure. +- Neplatná Å¡truktúra súboru nastavení KeeAgent. +- +- +- Private key is an attachment but no attachments provided. +- Súkromný kÄ¾ÃºÄ je prílohou, ale nie sú žiadne prílohy. +- +- +- Private key is empty +- Súkromný kÄ¾ÃºÄ je prázdny +- +- +- File too large to be a private key +- Súbor je na súkromný kÄ¾ÃºÄ príliÅ¡ veľký +- +- +- Failed to open private key +- Zlyhalo otvorenie súkromného kľúÄa +- +- +- +- KeePass1OpenWidget +- +- Unable to open the database. +- Nemožno otvoriÅ¥ databázu. +- +- +- Import KeePass1 Database +- ImportovaÅ¥ databázu KeePass 1 +- +- +- +- KeePass1Reader +- +- Unable to read keyfile. +- Nemožno ÄítaÅ¥ súbor kľúÄa. +- +- +- Not a KeePass database. +- Nie je databáza KeePass +- +- +- Unsupported encryption algorithm. +- Nepodporovaný Å¡ifrovací algoritmus. +- +- +- Unsupported KeePass database version. +- Nepodporovaná verzia databázy KeePass. +- +- +- Unable to read encryption IV +- IV = Initialization Vector for symmetric cipher +- Nemožno ÄítaÅ¥ Å¡ifrovací IV +- +- +- Invalid number of groups +- Neplatný poÄet skupín +- +- +- Invalid number of entries +- Neplatný poÄet položiek +- +- +- Invalid content hash size +- Neplatná veľkosÅ¥ odtlaÄku obsahu +- +- +- Invalid transform seed size +- Neplatná transformácia hlavnej náhodnosti (seed) +- +- +- Invalid number of transform rounds +- Neplatný poÄet transformaÄných prechodov +- +- +- Unable to construct group tree +- Nemožno zostaviÅ¥ strom skupiny +- +- +- Root +- Koreň +- +- +- Key transformation failed +- Transformácia kľúÄa zlyhala +- +- +- Invalid group field type number +- Neplatné Äíslo typu poľa skupiny +- +- +- Invalid group field size +- Neplatná veľkosÅ¥ poľa skupiny +- +- +- Read group field data doesn't match size +- PreÄítané dáta poľa skupiny nezodpovedajú veľkosÅ¥ou +- +- +- Incorrect group id field size +- Nesprávna veľkosÅ¥ ID poľa skupiny +- +- +- Incorrect group creation time field size +- Nesprávna veľkosÅ¥ poľa Äasu vytvorenia skupiny +- +- +- Incorrect group modification time field size +- Nesprávna veľkosÅ¥ poľa Äasu úpravy skupiny +- +- +- Incorrect group access time field size +- Nesprávna veľkosÅ¥ poľa Äasu prístupu skupiny +- +- +- Incorrect group expiry time field size +- nesprávna veľkosÅ¥ poľa vyprÅ¡ania platnosti skupiny +- +- +- Incorrect group icon field size +- Nesprávna veľkosÅ¥ poľa ikony skupiny +- +- +- Incorrect group level field size +- Nesprávna veľkosÅ¥ poľa úrovne skupiny +- +- +- Invalid group field type +- Neplatný typ poľa skupiny +- +- +- Missing group id or level +- Chýbajúce ID alebo úrovne skupiny +- +- +- Missing entry field type number +- Chýbajúce Äíslo typu poľa položky +- +- +- Invalid entry field size +- Neplatná veľkosÅ¥ poľa položky +- +- +- Read entry field data doesn't match size +- PreÄítané dáta poľa položky majú neplatnú veľkosÅ¥ +- +- +- Invalid entry uuid field size +- Neplatná veľkosÅ¥ UUID poľa položky +- +- +- Invalid entry group id field size +- Neplatná veľkosÅ¥ ID poľa položky skupiny +- +- +- Invalid entry icon field size +- Neplatná veľkosÅ¥ poľa ikony položky +- +- +- Invalid entry creation time field size +- Neplatná veľkosÅ¥ poľa vytvorenia položky +- +- +- Invalid entry modification time field size +- Neplatná veľkosÅ¥ poľa poslednej úpravy +- +- +- Invalid entry expiry time field size +- Neplatná veľkosÅ¥ poľa vyprÅ¡ania platnosti +- +- +- Invalid entry field type +- Neplatný typ poľa položky +- +- +- unable to seek to content position +- nemožno sa posunúť na pozíciu obsahu +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Boli zadané neplatné prihlasovacie údaje, prosím skúste znova. +-Ak sa to opakuje, potom môže byÅ¥ súbor databázy poÅ¡kodený. +- +- +- Unable to calculate database key +- Nemožno vypoÄítaÅ¥ kÄ¾ÃºÄ databázy +- +- +- +- KeeShare +- +- Invalid sharing reference +- Neplatný odkaz zdieľania +- +- +- Inactive share %1 +- Neaktívne zdieľanie %1 +- +- +- Imported from %1 +- Importované z %1 +- +- +- Exported to %1 +- Exportované do %1 +- +- +- Synchronized with %1 +- Synchronizované s %1 +- +- +- Import is disabled in settings +- Import je vypnutý v nastaveniach +- +- +- Export is disabled in settings +- Export je vypnutý v nastaveniach +- +- +- Inactive share +- Neaktívne zdieľanie +- +- +- Imported from +- Importované z +- +- +- Exported to +- Exportované do +- +- +- Synchronized with +- Synchronizované s +- +- +- +- KeyComponentWidget +- +- Key Component +- KÄ¾ÃºÄ komponentu +- +- +- Key Component Description +- Popis kľúÄa komponentu +- +- +- Cancel +- ZruÅ¡iÅ¥ +- +- +- Key Component set, click to change or remove +- Nastavenie kľúÄa komponentu, kliknite na zmenu alebo odstránenie +- +- +- Add %1 +- Add a key component +- PridaÅ¥ %1 +- +- +- Change %1 +- Change a key component +- ZmeniÅ¥ %1 +- +- +- Remove %1 +- Remove a key component +- OdstrániÅ¥ %1 +- +- +- %1 set, click to change or remove +- Change or remove a key component +- %1 nastavené, kliknite na zmenu alebo odstránenie +- +- +- +- KeyFileEditWidget +- +- Generate +- GenerovaÅ¥ +- +- +- Key File +- Súbor kľúÄa +- +- +- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> +- <p>Môžete pridaÅ¥ súbor kľúÄa s náhodnými bajtmi, na dodatoÄnú bezpeÄnosÅ¥ .</p><p>Musíte ho držaÅ¥ v tajnosti a nikdy nestratiÅ¥, inak prídete o prístup!</p> +- +- +- Error loading the key file '%1' +-Message: %2 +- Chyba naÄítania súboru kľúÄa „%1†+-Správa: %2 +- +- +- Key files +- Súbory kľúÄov +- +- +- All files +- VÅ¡etky súbory +- +- +- Create Key File... +- VytvoriÅ¥ súbor kľúÄa... +- +- +- Error creating key file +- Chyba vytvárania súboru kľúÄa +- +- +- Unable to create key file: %1 +- Nemožno vytvoriÅ¥ súbor kľúÄa: %1 +- +- +- Select a key file +- Zvoľte súbor kľúÄa +- +- +- Key file selection +- Výber kľúÄového súboru +- +- +- Browse for key file +- VyhľadaÅ¥ súbor kľúÄa +- +- +- Browse... +- Prechádzať… +- +- +- Generate a new key file +- GenerovaÅ¥ nový súbor kľúÄa +- +- +- Note: Do not use a file that may change as that will prevent you from unlocking your database! +- Poznámka: Nepoužívajte súbor, ktorý sa môže zmeniÅ¥, pretože to zabráni odomknutiu databázy! +- +- +- Invalid Key File +- Neplatný súbor kľúÄa +- +- +- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. +- Nemôžete použiÅ¥ svoju databázu ako súbor kľúÄa. Prosím, zvoľte iný súbor alebo vygenerujte nový súbor kľúÄa. +- +- +- Suspicious Key File +- Podozrivý súbor kľúÄa +- +- +- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. +-Are you sure you want to continue with this file? +- Zvolený súbor kľúÄa vyzerá ako súbor hesla databázy. Súbor kľúÄa musí byÅ¥ statický súbor, ktorý sa nikdy nezmení, inak navždy stratíte prístup k svojej databáze. +-Naozaj chcete pokraÄovaÅ¥ s týmto súborom? +- +- +- Old key file format +- +- +- +- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. +- +- +- +- +- MainWindow +- +- &Database +- &Databáza +- +- +- &Help +- &Pomocník +- +- +- &Groups +- &Skupiny +- +- +- &Tools +- &Nástroje +- +- +- &Quit +- &Koniec +- +- +- &About +- &O programe +- +- +- Database settings +- Nastavenia databázy +- +- +- Copy username to clipboard +- Skopíruje používateľské meno do schránky +- +- +- Copy password to clipboard +- Skopíruje heslo do schránky +- +- +- &Settings +- Na&stavenia +- +- +- &Title +- &Názov +- +- +- Copy title to clipboard +- KopírovaÅ¥ názov do schránky +- +- +- &URL +- &URL +- +- +- Copy URL to clipboard +- KopírovaÅ¥ URL do schránky +- +- +- &Notes +- &Poznámky +- +- +- Copy notes to clipboard +- KopírovaÅ¥ poznámky do schránky +- +- +- Copy &TOTP +- KopírovaÅ¥ &TOTP +- +- +- E&mpty recycle bin +- V&yprázdniÅ¥ kôš +- +- +- Clear history +- VymazaÅ¥ históriu +- +- +- Access error for config file %1 +- Chyba prístupu ku konfiguraÄnému súboru %1 +- +- +- Settings +- Nastavenia +- +- +- Toggle window +- Prepnúť okno +- +- +- Quit KeePassXC +- SkonÄiÅ¥ KeePassXC +- +- +- Please touch the button on your YubiKey! +- Prosím, stlaÄte tlaÄidlo svojho YubiKey! +- +- +- WARNING: You are using an unstable build of KeePassXC! +-There is a high risk of corruption, maintain a backup of your databases. +-This version is not meant for production use. +- UPOZORNENIE: Používate nestabilné zostavenie KeePassXC! +-Existuje veľké riziko poÅ¡kodenia, zálohujte svoje dtabázy. +-Táto verzia nie je urÄená na produkÄné použitie. +- +- +- &Donate +- &PodporiÅ¥ +- +- +- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +-We recommend you use the AppImage available on our downloads page. +- UPOZORNENIE: VaÅ¡a verzia Qt môže spôsobiÅ¥ pád KeePassXC s klávesnicou na obrazovke! +-OdporúÄame použiÅ¥ AppImage dostupný v naÅ¡ej stránke sÅ¥ahovaní. +- +- +- &Import +- &Import +- +- +- Create a new database +- VytvoriÅ¥ novú databázu +- +- +- Merge from another KDBX database +- ZlúÄiÅ¥ s inou databázou KDBX +- +- +- Add a new entry +- PridaÅ¥ novú položku +- +- +- View or edit entry +- ZobraziÅ¥ alebo upraviÅ¥ položku +- +- +- Add a new group +- PridaÅ¥ novú skupinu +- +- +- Perform &Auto-Type +- VykonaÅ¥ &Automatické vypĺňanie +- +- +- Open &URL +- OtvoriÅ¥ &URL +- +- +- Import a KeePass 1 database +- ImportovaÅ¥ databázu KeePass 1… +- +- +- Import a CSV file +- ImportovaÅ¥ súbor CSV… +- +- +- NOTE: You are using a pre-release version of KeePassXC! +-Expect some bugs and minor issues, this version is not meant for production use. +- UPOZORNENIE: Používate nestabilné zostavenie KeePassXC! +-OÄakávajte chyby a menÅ¡ie problémy, táto verzia nie je urÄená na produkÄné použitie. +- +- +- Check for updates on startup? +- SkontrolovaÅ¥ aktualizácie pri Å¡tarte? +- +- +- Would you like KeePassXC to check for updates on startup? +- Chcete aby KeePassXC skontroloval aktualizácie pri Å¡tarte? +- +- +- You can always check for updates manually from the application menu. +- Vždy môžete skontrolovaÅ¥ aktualizácie manuálne z menu aplikácie. +- +- +- &Export +- &ExportovaÅ¥ +- +- +- Sort &A-Z +- ZoradiÅ¥ &A-Z +- +- +- Sort &Z-A +- ZoradiÅ¥ &Z-A +- +- +- &Password Generator +- &Generátor hesla +- +- +- Import a 1Password Vault +- ImportovaÅ¥ z úložiska 1Password +- +- +- &Getting Started +- &ZaÄíname +- +- +- &User Guide +- &Používateľská príruÄka +- +- +- &Keyboard Shortcuts +- &Klávesové skratky +- +- +- &Recent Databases +- &Nedávne databázy +- +- +- &Entries +- &Položky +- +- +- Copy Att&ribute +- KopírovaÅ¥ at&ribút +- +- +- TOTP +- TOTP +- +- +- View +- ZobraziÅ¥ +- +- +- Theme +- Téma +- +- +- &Check for Updates +- &SkontrolovaÅ¥ aktualizácie +- +- +- &Open Database… +- &OtvoriÅ¥ databázu… +- +- +- &Save Database +- &UložiÅ¥ databázu +- +- +- &Close Database +- &ZatvoriÅ¥ databázu +- +- +- &New Database… +- &Nová databáza… +- +- +- &Merge From Database… +- &ZlúÄiÅ¥ z databázou… +- +- +- &New Entry… +- &Nová položka… +- +- +- &Edit Entry… +- &UpraviÅ¥ položku… +- +- +- &Delete Entry… +- O&dstrániÅ¥ položku… +- +- +- &New Group… +- &Nová skupina… +- +- +- &Edit Group… +- &UpraviÅ¥ skupinu… +- +- +- &Delete Group… +- O&dstrániÅ¥ skupinu… +- +- +- Download All &Favicons… +- StiahnuÅ¥ &vÅ¡etky ikony… +- +- +- Sa&ve Database As… +- UložiÅ¥ data&bázu ako… +- +- +- Database &Security… +- &BezpeÄnosÅ¥ databázy… +- +- +- Database &Reports... +- &Hlásenia databázy… +- +- +- Statistics, health check, etc. +- Å tatistiky, kontrola zdravia, apod. +- +- +- &Database Settings… +- Nastavenia &databázy… +- +- +- &Clone Entry… +- &KlonovaÅ¥ položku… +- +- +- Move u&p +- &Posunúť vyÅ¡Å¡ie +- +- +- Move entry one step up +- Posunie položku o jedno vyÅ¡Å¡ie +- +- +- Move do&wn +- &Posunúť nižšie +- +- +- Move entry one step down +- Posunie položku o jedno nižšie +- +- +- Copy &Username +- KopírovaÅ¥ po&už. meno +- +- +- Copy &Password +- KopírovaÅ¥ &heslo +- +- +- Download &Favicon +- StiahnuÅ¥ i&konu +- +- +- &Lock Databases +- Za&mknúť databázy +- +- +- &CSV File… +- Súbor &CSV… +- +- +- &HTML File… +- Súbor &HTML… +- +- +- KeePass 1 Database… +- Databáza KeePass 1 +- +- +- 1Password Vault… +- Úložisko 1Password... +- +- +- CSV File… +- Súbor CSV… +- +- +- Show TOTP +- ZobraziÅ¥ TOTP +- +- +- Show QR Code +- ZobraziÅ¥ QR kód +- +- +- Set up TOTP… +- NastaviÅ¥ TOTP… +- +- +- Report a &Bug +- NahlásiÅ¥ &chybu +- +- +- Open Getting Started Guide +- Otvorí príruÄku ZaÄíname +- +- +- &Online Help +- Pomocník &online +- +- +- Go to online documentation +- PrejsÅ¥ na dokumentáciu on-line +- +- +- Open User Guide +- Otvorí používateľskú príruÄku +- +- +- Save Database Backup... +- UložiÅ¥ zálohu databázy… +- +- +- Add key to SSH Agent +- PridaÅ¥ kÄ¾ÃºÄ do Agenta SSH +- +- +- Remove key from SSH Agent +- OdstrániÅ¥ kÄ¾ÃºÄ z Agenta SSH +- +- +- Compact Mode +- Kompaktný režim +- +- +- Automatic +- Automaticky +- +- +- Light +- Svetlý +- +- +- Dark +- Tmavý +- +- +- Classic (Platform-native) +- Klasický (podľa platformy) +- +- +- Show Toolbar +- ZobraziÅ¥ panel nástrojov +- +- +- Show Preview Panel +- ZobraziÅ¥ panel ukážky +- +- +- Don't show again for this version +- NezobrazovaÅ¥ znova v tejto verzii +- +- +- Restart Application? +- ReÅ¡tartovaÅ¥ aplikáciu? +- +- +- You must restart the application to apply this setting. Would you like to restart now? +- Musíte reÅ¡tartovaÅ¥ aplikáciu, aby sa tieto zmeny prejavili. Chcete ju reÅ¡tartovaÅ¥ teraz? +- +- +- Perform Auto-Type Sequence +- VykonaÅ¥ Automatické vypĺňanie +- +- +- {USERNAME} +- {POUŽÃVATEĽ} +- +- +- {USERNAME}{ENTER} +- {POUŽÃVATEĽ}{ENTER} +- +- +- {PASSWORD} +- {HESLO} +- +- +- {PASSWORD}{ENTER} +- {HESLO}{ENTER} +- +- +- Always on Top +- +- +- +- Hide Usernames +- SkryÅ¥ použ. mená +- +- +- Hide Passwords +- SkryÅ¥ heslá +- +- +- +- ManageDatabase +- +- Database settings +- Nastavenia databázy +- +- +- Edit database settings +- UpraviÅ¥ nastavenia databázy +- +- +- Unlock database +- Odomknúť databázu +- +- +- Unlock database to show more information +- Odomknúť databázu na zobrazenie Äalších informácií +- +- +- Lock database +- Zamknúť databázu +- +- +- +- ManageSession +- +- Disconnect +- OdpojiÅ¥ +- +- +- Disconnect this application +- OdpojiÅ¥ túto palikáciu +- +- +- +- Merger +- +- Creating missing %1 [%2] +- Vytváranie chýbajúceho %1 [%2] +- +- +- Relocating %1 [%2] +- Relokácia %1 [%2] +- +- +- Overwriting %1 [%2] +- Prepísanie %1 [%2] +- +- +- older entry merged from database "%1" +- starÅ¡ia položka zlúÄená z databázy „%1†+- +- +- Adding backup for older target %1 [%2] +- Pridávanie zálohy starÅ¡ieho cieľa %1 [%2] +- +- +- Adding backup for older source %1 [%2] +- Pridávanie zálohy starÅ¡ieho zdroja %1 [%2] +- +- +- Reapplying older target entry on top of newer source %1 [%2] +- Aplikujem položku starÅ¡ieho cieľa na novší zdroj %1 [%2] +- +- +- Reapplying older source entry on top of newer target %1 [%2] +- Aplikujem položku starÅ¡ieho zdroja na novší cieľ %1 [%2] +- +- +- Synchronizing from newer source %1 [%2] +- Synchronizujem z novÅ¡ieho zdroja %1 [%2] +- +- +- Synchronizing from older source %1 [%2] +- Synchronizujem zo starÅ¡ieho zdroja %1 [%2] +- +- +- Deleting child %1 [%2] +- Odstraňuje sa dieÅ¥a %1 [%2] +- +- +- Deleting orphan %1 [%2] +- Odstraňujú sa ojedinelé ochorenia %1 [%2] +- +- +- Changed deleted objects +- Odstránené objekty boli zmenené +- +- +- Adding missing icon %1 +- Pridáva sa chýbajúca ikona %1 +- +- +- Removed custom data %1 [%2] +- Odstránené vlastné dáta %1 [%2] +- +- +- Adding custom data %1 [%2] +- Pridanie vlastných dát %1 [%2] +- +- +- +- NewDatabaseWizard +- +- Create a new KeePassXC database... +- VytvoriÅ¥ novú databázu KeePassXC... +- +- +- Root +- Root group +- Koreň +- +- +- +- NewDatabaseWizardPage +- +- WizardPage +- Stránka sprievodcu +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Tu môžete prispôsobiÅ¥ nastavenia Å¡ifrovania databázy. Nebojte sa, neskôr ich môžete zmeniÅ¥ v nastavení databázy. +- +- +- Advanced Settings +- PokroÄilé nastavenia +- +- +- Simple Settings +- Jednoduché nastavenia +- +- +- Encryption Settings +- Nastavenia Å¡ifrovania +- +- +- +- NewDatabaseWizardPageDatabaseKey +- +- Database Credentials +- Prihlasovacie údaje databázy +- +- +- A set of credentials known only to you that protects your database. +- Sada prihlasovacích údajov, známe len Vám, chráni vaÅ¡u databázu. +- +- +- +- NewDatabaseWizardPageEncryption +- +- Encryption Settings +- Nastavenia Å¡ifrovania +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Tu môžete prispôsobiÅ¥ nastavenia Å¡ifrovania databázy. Nebojte sa, neskôr ich môžete zmeniÅ¥ v nastavení databázy. +- +- +- +- NewDatabaseWizardPageMetaData +- +- General Database Information +- VÅ¡eobecné informácie databázy +- +- +- Please fill in the display name and an optional description for your new database: +- Prosím, vyplňte meno a prípadne aj popis svojej novej databázy: +- +- +- +- NixUtils +- +- Password Manager +- Správca hesiel +- +- +- +- OpData01 +- +- Invalid OpData01, does not contain header +- Neplatné OpData01, neobsahuje hlaviÄku +- +- +- Unable to read all IV bytes, wanted 16 but got %1 +- Nemožno ÄítaÅ¥ vÅ¡etky bajty IV, potrebných 16, ale získaných %1 +- +- +- Unable to init cipher for opdata01: %1 +- Nemožno inicializovaÅ¥ Å¡ifru pre opdata01: %1 +- +- +- Unable to read all HMAC signature bytes +- Nemožno ÄítaÅ¥ vÅ¡etky bajty podpisu HMAC +- +- +- Malformed OpData01 due to a failed HMAC +- Zlý formát OpData01 kvôli zlyhanému HMAC +- +- +- Unable to process clearText in place +- +- +- +- Expected %1 bytes of clear-text, found %2 +- OÄakávaných %1 B prostého textu, nájdených %2 +- +- +- +- OpVaultOpenWidget +- +- Read Database did not produce an instance +-%1 +- Čítanie databázy neposkytuje inÅ¡tanciu +-%1 +- +- +- +- OpVaultReader +- +- Directory .opvault must exist +- Adresár .opvault musí existovaÅ¥ +- +- +- Directory .opvault must be readable +- Adresár .opvault musí byÅ¥ Äitateľný +- +- +- Directory .opvault/default must exist +- Adresár .opvault/default musí existovaÅ¥ +- +- +- Directory .opvault/default must be readable +- Adresár .opvault/default musí byÅ¥ Äitateľný +- +- +- Unable to decode masterKey: %1 +- Nemožno dekódovaÅ¥ hlavný kľúÄ: %1 +- +- +- Unable to derive master key: %1 +- Nemožno odvodiÅ¥ hlavný kľúÄ: %1 +- +- +- +- OpenSSHKey +- +- Invalid key file, expecting an OpenSSH key +- Neplatný súbor kľúÄa, oÄakávaný je kÄ¾ÃºÄ OpenSSH +- +- +- PEM boundary mismatch +- Nezhoda ohraniÄenia PEM +- +- +- Base64 decoding failed +- Dekódovanie Base64 zlyhalo +- +- +- Key file way too small. +- Súbor kľúÄa je príliÅ¡ krátky. +- +- +- Key file magic header id invalid +- Neplatný ID magickej hlaviÄky súboru kľúÄa +- +- +- Found zero keys +- Nenájdené žiadne kľúÄe +- +- +- Failed to read public key. +- Zlyhalo Äítanie verejného kľúÄa. +- +- +- Corrupted key file, reading private key failed +- PoÅ¡kodený súbor kľúÄa, Äítanie súkromného kÄ¾ÃºÄ azlyhalo +- +- +- No private key payload to decrypt +- Žiadny obsah súkromného kľúÄa na deÅ¡ifrovanie +- +- +- Trying to run KDF without cipher +- Pokúšate sa spustiÅ¥ KDF bez Å¡ifry +- +- +- Passphrase is required to decrypt this key +- Na deÅ¡ifrovanie tohoto kľúÄa je potrebná tajná veta +- +- +- Key derivation failed, key file corrupted? +- Odvodenie kľúÄa zlyhalo, súbor kľúÄa je poÅ¡kodený? +- +- +- Decryption failed, wrong passphrase? +- DeÅ¡ifrovanie zlyhalo, zlá tajná veta? +- +- +- Unexpected EOF while reading public key +- NeoÄakávaný koniec súboru pri Äítaní verejného kľúÄa +- +- +- Unexpected EOF while reading private key +- NeoÄakávaný koniec súboru pri Äítaní súkromného kľúÄa +- +- +- Can't write public key as it is empty +- Nemožno zapísaÅ¥ verejný kľúÄ, pretože je prázdny +- +- +- Unexpected EOF when writing public key +- NeoÄakávaný koniec súboru pri zápise verejného kľúÄa +- +- +- Can't write private key as it is empty +- Nemožno zapísaÅ¥ súkromný kľúÄ, pretože je prázdny +- +- +- Unexpected EOF when writing private key +- NeoÄakávaný koniec súboru pri zápise súkromného kľúÄa +- +- +- Unsupported key type: %1 +- Nepodporovaný typ kľúÄa: %1 +- +- +- Unknown cipher: %1 +- Neznáma Å¡ifra: %1 +- +- +- Cipher IV is too short for MD5 kdf +- IV Å¡ifry je príliÅ¡ krátky na MD5 KDF +- +- +- Unknown KDF: %1 +- Neznáma KDF: %1 +- +- +- Unknown key type: %1 +- Neznámy typ kľúÄa: %1 +- +- +- +- PasswordEdit +- +- Passwords do not match +- Heslá sa nezhodujú. +- +- +- Passwords match so far +- Heslá sa zhodujú až potiaľ +- +- +- Toggle Password (%1) +- Prepnúť heslo (%1) +- +- +- Generate Password (%1) +- GenerovaÅ¥ heslo (%1) +- +- +- Warning: Caps Lock enabled! +- Upozornenie: Caps Lock zapnutý! +- +- +- +- PasswordEditWidget +- +- Enter password: +- Zadajte heslo: +- +- +- Confirm password: +- PotvrÄte heslo: +- +- +- Password +- Heslo +- +- +- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> +- <p>Heslo je primárna metóda na zabezpeÄenie svojej databázy.</p><p>Dobré heslá sú dlhé a jedineÄné. KeePassXC Vám môže nejaké vygenerovaÅ¥.</p> +- +- +- Passwords do not match. +- Heslá sa nezhodujú. +- +- +- Password field +- Pole pre heslo +- +- +- Repeat password field +- Pole opakovaného hesla +- +- +- +- PasswordGeneratorWidget +- +- %p% +- %p% +- +- +- strength +- Password strength +- sila +- +- +- entropy +- náhodnosÅ¥ +- +- +- Password +- Heslo +- +- +- Character Types +- Typy znakov +- +- +- Numbers +- Číslice +- +- +- Extended ASCII +- Rozšírené ASCII +- +- +- Exclude look-alike characters +- VynechaÅ¥ podobne vyzerajúce znaky +- +- +- Pick characters from every group +- ZvoliÅ¥ znak z každej skupiny +- +- +- &Length: +- &Dĺžka: +- +- +- Passphrase +- Tajná veta +- +- +- Wordlist: +- Zoznam slov: +- +- +- Word Separator: +- OddeľovaÄ slov: +- +- +- Close +- ZatvoriÅ¥ +- +- +- Entropy: %1 bit +- NáhodnosÅ¥: %1 b +- +- +- Password Quality: %1 +- Kvalita hesla: %1 +- +- +- Poor +- Password quality +- Slabé +- +- +- Weak +- Password quality +- Slabé +- +- +- Good +- Password quality +- Dobré +- +- +- Excellent +- Password quality +- Výbroné +- +- +- Switch to advanced mode +- Prepnúť na pokroÄilý režim +- +- +- Advanced +- PokroÄilé +- +- +- Braces +- Zátvorky +- +- +- Punctuation +- Interpunkcia +- +- +- Quotes +- Úvodzovky +- +- +- Logograms +- Zástupné znaky +- +- +- Character set to exclude from generated password +- Sady znakov, ktoré majú byÅ¥ vynechané pri generovaní hesla +- +- +- Do not include: +- NezahŕňaÅ¥: +- +- +- Add non-hex letters to "do not include" list +- Pridajte nie-Å¡estnástkové písmená do zoznamu „vynechať†+- +- +- Hex +- Å estnástkové +- +- +- Excluded characters: "0", "1", "l", "I", "O", "|", "ï¹’" +- Vynechané znaky: „0â€, „1â€, „lâ€, „Iâ€, „Oâ€, „|â€, „﹒†+- +- +- Generated password +- Generované heslo +- +- +- Upper-case letters +- Veľké písmená +- +- +- Lower-case letters +- Malé písmená +- +- +- Special characters +- Å peciálne znaky +- +- +- Math Symbols +- Matematické symboly +- +- +- Dashes and Slashes +- PomlÄky a lomky +- +- +- Excluded characters +- Rozšírené znaky +- +- +- Hex Passwords +- Hexadecimálne heslá +- +- +- Password length +- Dĺžka hesla +- +- +- Word Case: +- Slová veľkými: +- +- +- Regenerate password +- ObnoviÅ¥ heslo +- +- +- Copy password +- KopírovaÅ¥ heslo +- +- +- lower case +- malé písmená +- +- +- UPPER CASE +- VEĽKÉ PÃSMENà +- +- +- Title Case +- Titulková VeľkosÅ¥ +- +- +- Generate Password +- GenerovaÅ¥ heslo +- +- +- Also choose from: +- Tiež vybraÅ¥ z: +- +- +- Additional characters to use for the generated password +- DodatoÄné znaky použité pri generovaní hesla +- +- +- Additional characters +- DodatoÄné znaky +- +- +- Word Count: +- PoÄet slov: +- +- +- Esc +- Esc +- +- +- Apply Password +- PoužiÅ¥ heslo +- +- +- Ctrl+S +- Ctrl+S +- +- +- Regenerate password (%1) +- ObnoviÅ¥ heslo (%1) +- +- +- Special Characters +- Å peciálne znaky +- +- +- +- QApplication +- +- KeeShare +- KeeShare +- +- +- Statistics +- Å tatistiky +- +- +- Very weak password +- Veľmi slabé heslo +- +- +- Password entropy is %1 bits +- NáhodnosÅ¥ hesla je %1 b +- +- +- Weak password +- Slabé heslo +- +- +- Used in %1/%2 +- Použité v %1/%2 +- +- +- Password is used %1 times +- Heslo je použité %1 krát +- +- +- Password has expired +- Heslo vyprÅ¡alo +- +- +- Password expiry was %1 +- PlatnosÅ¥ hesla bola %1 +- +- +- Password is about to expire +- Heslo Äoskoro vyprší +- +- +- Password expires in %1 days +- PlatnosÅ¥ hesla vyprší za %1 dní +- +- +- Password will expire soon +- Heslo Äoskoro vyprší +- +- +- Password expires on %1 +- PlatnosÅ¥ hesla vyprší %1 +- +- +- Health Check +- Kontrola zdravia +- +- +- HIBP +- HIBP +- +- +- +- QMessageBox +- +- Overwrite +- PrepísaÅ¥ +- +- +- Delete +- OdstrániÅ¥ +- +- +- Move +- Presunúť +- +- +- Empty +- VyprádzniÅ¥ +- +- +- Remove +- OdstrániÅ¥ +- +- +- Skip +- PreskoÄiÅ¥ +- +- +- Disable +- Vypnúť +- +- +- Merge +- ZlúÄiÅ¥ +- +- +- Continue +- PokraÄovaÅ¥ +- +- +- +- QObject +- +- Database not opened +- Databáza nie je otvorená +- +- +- Database hash not available +- OdtlaÄok databázy nie je dostupný +- +- +- Client public key not received +- Nebol prijatý verejný kÄ¾ÃºÄ klienta +- +- +- Cannot decrypt message +- Nemožno deÅ¡ifrovaÅ¥ správu +- +- +- Action cancelled or denied +- Akcia zruÅ¡ená alebo odmietnutá +- +- +- KeePassXC association failed, try again +- Spojenie s KeePassXC zlyhalo, skúste znova +- +- +- Encryption key is not recognized +- Å ifrovací kÄ¾ÃºÄ nerozpoznaný +- +- +- Incorrect action +- Nesprávna akcia +- +- +- Empty message received +- Prijatá prázdna správa +- +- +- No URL provided +- Nebolo poskytnuté URL +- +- +- No logins found +- Nebolo nájdené prihlásenie +- +- +- Unknown error +- Neznáma chyba +- +- +- Add a new entry to a database. +- Pridá do databázy novú položku +- +- +- Path of the database. +- Cesta k databáze. +- +- +- Key file of the database. +- Súbor kľúÄa databázy. +- +- +- path +- cesta +- +- +- Username for the entry. +- Použ. meno položky. +- +- +- username +- použmeno +- +- +- URL for the entry. +- URL položky. +- +- +- URL +- URL +- +- +- Prompt for the entry's password. +- VyžiadaÅ¥ heslo položky. +- +- +- Generate a password for the entry. +- GenerovaÅ¥ heslo tejto položky. +- +- +- length +- dĺžka +- +- +- Path of the entry to add. +- Cesta pridávanej položky +- +- +- Path of the entry to clip. +- clip = copy to clipboard +- Cesta položky na vystrihnutie. +- +- +- Timeout in seconds before clearing the clipboard. +- ÄŒasový limit pred vymazaním schránky. +- +- +- Edit an entry. +- UpraviÅ¥ položku. +- +- +- Title for the entry. +- Názov položky. +- +- +- title +- názov +- +- +- Path of the entry to edit. +- Cesta položky na úpravu. +- +- +- Estimate the entropy of a password. +- OÄakávaná náhodnosÅ¥ hesla. +- +- +- Password for which to estimate the entropy. +- Heslo, ktorému zistiÅ¥ oÄakávanú náhodnosÅ¥. +- +- +- Perform advanced analysis on the password. +- VykonaÅ¥ pokroÄilú analýzu hesla. +- +- +- +- +-Available commands: +- +- +- +-Dostupné príkazy: +- +- +- +- Name of the command to execute. +- Názov príkazu na spustenie. +- +- +- List database entries. +- Zoznam položiek databázy. +- +- +- Path of the group to list. Default is / +- Cesta vypísanej skupiny. Predvolene / +- +- +- Find entries quickly. +- Rýchlo nájdite položky. +- +- +- Search term. +- Hľadaný výraz. +- +- +- Merge two databases. +- ZlúÄiÅ¥ dve databázy. +- +- +- Path of the database to merge from. +- Cesta k databáze, z ktorej zlúÄiÅ¥. +- +- +- Use the same credentials for both database files. +- PoužiÅ¥ rovnaké prihlásenie pre oba súbory databáz. +- +- +- Key file of the database to merge from. +- Súbor kľúÄa databázy, z ktorej má byÅ¥ zlúÄené. +- +- +- Show an entry's information. +- ZobraziÅ¥ informácie položky. +- +- +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- Názvy zobrazených atribútov. Táto voľba môže byÅ¥ zadaná viac ako raz a každý atribút bude zobrazený jeden na riadok v zadanom poradí. Ak nie sú zadané žiadne atribúty, je použité zhrnutie predvolených atribútov. +- +- +- attribute +- atribút +- +- +- Name of the entry to show. +- Názov položky na zobrazenie. +- +- +- NULL device +- Žiadne zariadenie +- +- +- error reading from device +- chyba Äítania zo zariadenia +- +- +- malformed string +- zlý formát reÅ¥azca +- +- +- missing closing quote +- chýba koncová úvodzovka +- +- +- Group +- Skupina +- +- +- Title +- Nadpis +- +- +- Username +- Používateľské meno +- +- +- Password +- Heslo +- +- +- Notes +- Poznámky +- +- +- Last Modified +- Posledná úprava +- +- +- Created +- Vytvorené +- +- +- Browser Integration +- Integrácia prehliadaÄa +- +- +- SSH Agent +- Agent SSH +- +- +- Generate a new random diceware passphrase. +- GenerovaÅ¥ novú náhodnú diceware tajnú vetu. +- +- +- Word count for the diceware passphrase. +- PoÄet slov pre diceware tajnú vetu. +- +- +- Wordlist for the diceware generator. +-[Default: EFF English] +- Zoznam slov pre generátor diceware. +-[Predvolené: EFF angliÄtina] +- +- +- Generate a new random password. +- GenerovaÅ¥ nové náhodné heslo. +- +- +- Could not create entry with path %1. +- Nemožno vytvoriÅ¥ položku s cestou %1. +- +- +- Enter password for new entry: +- Zadajte heslo novej položky: +- +- +- Writing the database failed %1. +- Zápis do databázy zlyhal %1. +- +- +- Successfully added entry %1. +- ÚspeÅ¡ne pridaná položka %1. +- +- +- Invalid timeout value %1. +- Neplatná hodnota Äasového limitu %1. +- +- +- Entry %1 not found. +- Položka %1 nenájdená. +- +- +- Entry with path %1 has no TOTP set up. +- Položka s cestou %1 nemá nastavený TOTP. +- +- +- Clearing the clipboard in %1 second(s)... +- Vymazaním schránky v %1 sekundu...Vymazaním schránky v %1 sekundu...Vymazaním schránky v %1 sekundu...Clipboard bude vymazaný za %1 sek. +- +- +- Clipboard cleared! +- Schránka vymazaná! +- +- +- Silence password prompt and other secondary outputs. +- PotlaÄiÅ¥ prompt hesla a ÄalÅ¡ie sekundárne výstupy +- +- +- count +- CLI parameter +- poÄet +- +- +- Could not find entry with path %1. +- Nepodarilo sa nájsÅ¥ položku s cestou %1. +- +- +- Not changing any field for entry %1. +- Nemení sa žiadne pole položky %1. +- +- +- Enter new password for entry: +- Zadajte nové heslo položky: +- +- +- Writing the database failed: %1 +- Zápis do databázy zlyhal: %1 +- +- +- Successfully edited entry %1. +- ÚspeÅ¡ne upravená položka %1. +- +- +- Length %1 +- Dĺžka %1 +- +- +- Entropy %1 +- NáhodnosÅ¥ %1 +- +- +- Log10 %1 +- Log10 %1 +- +- +- Multi-word extra bits %1 +- Viacslovné extra bity %1 +- +- +- Type: Bruteforce +- Type: Hrubou silou +- +- +- Type: Dictionary +- Typ: Slovník +- +- +- Type: Dict+Leet +- Typ: Slovník+Leet +- +- +- Type: User Words +- Typ: Použ. slová +- +- +- Type: User+Leet +- Typ: Použ.+Leet +- +- +- Type: Repeated +- Typ: Opakované +- +- +- Type: Sequence +- Typ: Postupné +- +- +- Type: Spatial +- Typ: Geometrické +- +- +- Type: Date +- Typ: Dátum +- +- +- Type: Bruteforce(Rep) +- Typ: Hrubou silou(Rep) +- +- +- Type: Dictionary(Rep) +- Typ: Slovník(Rep) +- +- +- Type: Dict+Leet(Rep) +- Typ: Slovník+Leet(Rep) +- +- +- Type: User Words(Rep) +- Type: Použ. slová(Rep) +- +- +- Type: User+Leet(Rep) +- Typ: Použ.+Leet(Rep) +- +- +- Type: Repeated(Rep) +- Typ: Opakované(Rep) +- +- +- Type: Sequence(Rep) +- Typ: Postupné(Rep) +- +- +- Type: Spatial(Rep) +- Typ: Geometrické(Rep) +- +- +- Type: Date(Rep) +- Typ: Dátum(Rep) +- +- +- Type: Unknown%1 +- Type: Neznámy%1 +- +- +- Entropy %1 (%2) +- NáhodnosÅ¥ %1 (%2) +- +- +- *** Password length (%1) != sum of length of parts (%2) *** +- *** Dĺžka hesla (%1) NIE JE súÄtom dĺžky Äastí (%2) * * * +- +- +- Failed to load key file %1: %2 +- Zlyhalo naÄítanie súboru kľúÄa %1: %2 +- +- +- Length of the generated password +- Dĺžka generovaného hesla +- +- +- Use lowercase characters +- PožiÅ¥ malé písmená +- +- +- Use uppercase characters +- PoužiÅ¥ veľké písmená +- +- +- Use special characters +- PoužiÅ¥ Å¡peciálne znaky +- +- +- Use extended ASCII +- PoužiÅ¥ rozšírené ASCII +- +- +- Exclude character set +- Množina vynechaných znakov +- +- +- chars +- znaky +- +- +- Exclude similar looking characters +- VynechaÅ¥ podobne vyzerajúce znaky +- +- +- Include characters from every selected group +- PoužiÅ¥ znaky z každej zvolenej skupiny +- +- +- Recursively list the elements of the group. +- Rekurzívne vypísaÅ¥ zoznam prvkov skupiny. +- +- +- Cannot find group %1. +- Nemožno nájsÅ¥ skupinu %1. +- +- +- Error reading merge file: +-%1 +- Chyba Äítania súboru zlúÄenia: +-%1 +- +- +- Unable to save database to file : %1 +- Nemožno uložiÅ¥ databázu do súboru: %1 +- +- +- Unable to save database to file: %1 +- Nemožno uložiÅ¥ databázu do súboru: %1 +- +- +- Successfully recycled entry %1. +- Položka %1 bola úspeÅ¡ne recyklovaná. +- +- +- Successfully deleted entry %1. +- Položka %1 bola úspeÅ¡ne odstránená. +- +- +- Show the entry's current TOTP. +- ZobraziÅ¥ aktuálny TOTP položky. +- +- +- ERROR: unknown attribute %1. +- CHYBA: Neznámy atribút %1. +- +- +- No program defined for clipboard manipulation +- Nie je definovaný program na manipuláciu so schránkou +- +- +- file empty +- prázdny súbor +- +- +- %1: (row, col) %2,%3 +- %1: (riadok, stĺpec) %2, %3 +- +- +- AES-KDF (KDBX 4) +- AES-KDF (KDBX 4) +- +- +- AES-KDF (KDBX 3.1) +- AES-KDF (KDBX 3.1) +- +- +- Invalid Settings +- TOTP +- Neplatné nastavenia +- +- +- Invalid Key +- TOTP +- Neplatný kÄ¾ÃºÄ +- +- +- Message encryption failed. +- Å ifrovanie správy zlyhalo. +- +- +- No groups found +- Skupiny nenájdené +- +- +- Create a new database. +- VytvoriÅ¥ novú databázu. +- +- +- File %1 already exists. +- Súbor %1 už existuje. +- +- +- Loading the key file failed +- NaÄítanie nového kľúÄa zlyhalo +- +- +- No key is set. Aborting database creation. +- Nie je nastavený kľúÄ. Vytvorenie novej databázy zruÅ¡ené. +- +- +- Failed to save the database: %1. +- Zlyhalo uloženie databázy: %1. +- +- +- Successfully created new database. +- ÚspeÅ¡ne vytvorená nová databáza. +- +- +- Creating KeyFile %1 failed: %2 +- Vytvorenie súboru KeyFile %1 zlyhalo: %2 +- +- +- Loading KeyFile %1 failed: %2 +- NaÄítanie súboru KeyFile %1 zlyhalo: %2 +- +- +- Path of the entry to remove. +- Cesta položky na odstránenie. +- +- +- Existing single-instance lock file is invalid. Launching new instance. +- Existujúci súbor zámku jednej inÅ¡tancie nie je platný. Spúšťam novú inÅ¡tanciu. +- +- +- The lock file could not be created. Single-instance mode disabled. +- Súbor zámku nemožno vytvoriÅ¥. Režim jednej inÅ¡tancie vypnutý. +- +- +- KeePassXC - cross-platform password manager +- KeePassXC – multi-platformový správca hesiel +- +- +- filenames of the password databases to open (*.kdbx) +- mená súborov databáz hesiel na otvorenie (*.kdbx) +- +- +- path to a custom config file +- cesta k vlastnému konfiguraÄnému súboru +- +- +- key file of the database +- súbor kľúÄa databázy +- +- +- read password of the database from stdin +- ÄítaÅ¥ heslo databázy zo stdin +- +- +- Another instance of KeePassXC is already running. +- Už je spustená iná inÅ¡tancia KeePassXC. +- +- +- Fatal error while testing the cryptographic functions. +- Fatálna chyba pri testovaní kryptografických funkcií. +- +- +- KeePassXC - Error +- KeePassXC – Chyba +- +- +- Database password: +- Heslo databázy: +- +- +- Cannot create new group +- Nemožno vytvoriÅ¥ novú skupinu +- +- +- Deactivate password key for the database. +- DeaktivovaÅ¥ heslo kľúÄa databázy. +- +- +- Displays debugging information. +- ZobraziÅ¥ ladiace informácie +- +- +- Deactivate password key for the database to merge from. +- DeaktivovaÅ¥ heslo kľúÄa zluÄovanej databázy. +- +- +- Version %1 +- Verzia %1 +- +- +- Build Type: %1 +- Typ zostavenia: %1 +- +- +- Revision: %1 +- Revízia %1 +- +- +- Distribution: %1 +- Distribúcia %1 +- +- +- Debugging mode is disabled. +- Režim ladenia je vypnutý. +- +- +- Debugging mode is enabled. +- Režim ladenia je zapnutý. +- +- +- Operating system: %1 +-CPU architecture: %2 +-Kernel: %3 %4 +- OperaÄný systém: %1 +-Architektúra CPU: %2 +-Jadro: %3 %4 +- +- +- Auto-Type +- Automatické vypĺňanie +- +- +- KeeShare (signed and unsigned sharing) +- KeeShare (podpísané a nepodpísané zdieľanie) +- +- +- KeeShare (only signed sharing) +- KeeShare (len podpísané zdieľanie) +- +- +- KeeShare (only unsigned sharing) +- KeeShare (len nepodpísané zdieľanie) +- +- +- YubiKey +- YubiKey +- +- +- TouchID +- TouchID +- +- +- None +- Žiadny +- +- +- Enabled extensions: +- Zapnuté rozšírenia: +- +- +- Cryptographic libraries: +- Kryptografické knižnice: +- +- +- Cannot generate a password and prompt at the same time! +- Nemožno naraz generovaÅ¥ aj zadaÅ¥ heslo! +- +- +- Adds a new group to a database. +- Pridá do databázy novú skupinu +- +- +- Path of the group to add. +- Cesta pridávanej skupiny. +- +- +- Group %1 already exists! +- Skupina %1 už existuje! +- +- +- Group %1 not found. +- Skupina %1 nenájdená. +- +- +- Successfully added group %1. +- ÚspeÅ¡ne pridaná skupina %1. +- +- +- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. +- SkontrolovaÅ¥, Äi nejaké heslo neuniklo na verejnosÅ¥. MENOSÚBORU musí byÅ¥ cesta k súboru so zoznamom odtlaÄkov SHA-1 uniknutých hesiel vo formáte HIBP, ako je dostupný z https://haveibeenpwned.com/Passwords. +- +- +- FILENAME +- MENOSÚBORU +- +- +- Analyze passwords for weaknesses and problems. +- AnalyzovaÅ¥ slabé a problémové heslá. +- +- +- Failed to open HIBP file %1: %2 +- Zlyhalo otvorenie súboru HIBP %1: %2 +- +- +- Evaluating database entries against HIBP file, this will take a while... +- Hodnotenie položiek databázy oproti súboru HIBP, bude to chvíľu trvať… +- +- +- Close the currently opened database. +- ZatvoriÅ¥ aktuálne otvorenú databázu. +- +- +- Display this help. +- Zobrazí tohoto pomocníka. +- +- +- slot +- slot +- +- +- Invalid word count %1 +- Neplatný poÄet slov %1 +- +- +- The word list is too small (< 1000 items) +- Zoznam slov je príliÅ¡ krátky (< 1000 položiek) +- +- +- Exit interactive mode. +- UkonÄiÅ¥ interaktívny režim. +- +- +- Exports the content of a database to standard output in the specified format. +- Exportuje obsah databázy na Å¡tandardný výstup v zadanom formáte. +- +- +- Unable to export database to XML: %1 +- Nemožno exportovaÅ¥ databázu do XML: %1 +- +- +- Unsupported format %1 +- Nepodporovaný formát: %1 +- +- +- Use numbers +- PoužiÅ¥ Äísla +- +- +- Invalid password length %1 +- Neplatná dĺžka hesla %1 +- +- +- Display command help. +- Zobrazí pomocníka príkazu. +- +- +- Available commands: +- Dostupné príkazy: +- +- +- Import the contents of an XML database. +- Import obsahu databázy XML. +- +- +- Path of the XML database export. +- Cesta na export databázy XML. +- +- +- Path of the new database. +- Cesta k novej databáze. +- +- +- Successfully imported database. +- ÚspeÅ¡ne importovaná databáza. +- +- +- Unknown command %1 +- Neznáma príkaz %1 +- +- +- Flattens the output to single lines. +- Spája výstup do jedného riadku. +- +- +- Only print the changes detected by the merge operation. +- VypisovaÅ¥ len zmeny zistený pri operácii zlúÄenia. +- +- +- Yubikey slot for the second database. +- Slot Yubikey pre druhú databázu. +- +- +- Successfully merged %1 into %2. +- ÚspeÅ¡ne zlúÄené %1 do %2. +- +- +- Database was not modified by merge operation. +- Databáza nebola operáciou zlúÄenia zmenená. +- +- +- Moves an entry to a new group. +- Presunie položku do novej skupiny. +- +- +- Path of the entry to move. +- Cesta položky na presun. +- +- +- Path of the destination group. +- Cesta cieľovej skupiny. +- +- +- Could not find group with path %1. +- Nemožno nájsÅ¥ skupinu s cestou %1. +- +- +- Entry is already in group %1. +- Položka už je v skupine %1. +- +- +- Successfully moved entry %1 to group %2. +- Položka %1 úspeÅ¡ne presunutá do skupiny %2. +- +- +- Open a database. +- Otvorí databázu. +- +- +- Path of the group to remove. +- Cesta skupiny na odstránenie. +- +- +- Cannot remove root group from database. +- Nemožno odstrániÅ¥ koreňovú skupinu z databázy. +- +- +- Successfully recycled group %1. +- Skupina %1 bola úspeÅ¡ne recyklovaná. +- +- +- Successfully deleted group %1. +- ÚspeÅ¡ne odstránená skupina %1. +- +- +- Failed to open database file %1: not found +- Zlyhalo otvorenie súboru databázy %1: nenájdené +- +- +- Failed to open database file %1: not a plain file +- Zlyhalo otvorenie súboru databázy %1: nie je súbor +- +- +- Failed to open database file %1: not readable +- Zlyhalo otvorenie súboru databázy %1: nie je Äitateľné +- +- +- Enter password to unlock %1: +- Zadajte heslo na odomknutie %1: +- +- +- Invalid YubiKey slot %1 +- Neplatný slot Yubikey %1 +- +- +- Enter password to encrypt database (optional): +- Zadajte heslo na zaÅ¡ifrovanie databázy (voliteľné): +- +- +- HIBP file, line %1: parse error +- Súbor HIBP, riadok %1: chyba spracovania +- +- +- Secret Service Integration +- Integrácia Tajnej služby +- +- +- User name +- Meno používavteľa +- +- +- Password for '%1' has been leaked %2 time(s)! +- Heslo k „%1†uniknuté %2 krát!Heslo k „%1†uniknuté %2 krát!Heslo k „%1†uniknuté %2 krát!Heslo k „%1†uniknuté %2 krát! +- +- +- Invalid password generator after applying all options +- Neplatný generátor hesla po aplikovaní vÅ¡etkých volieb +- +- +- Show the protected attributes in clear text. +- ZobraziÅ¥ chránené atribúty ako prostý text. +- +- +- Browser Plugin Failure +- Chyba doplnku prehlaidaÄa +- +- +- Could not save the native messaging script file for %1. +- Nemožno uložiÅ¥ súbor skriptu správ medzi prehliadaÄom a KeePassXC (native messaging) pre %1. +- +- +- Copy the given attribute to the clipboard. Defaults to "password" if not specified. +- PrekopírovaÅ¥ zadaný atribút do schránky. Ak nie je zadané, predvolene bude „passwordâ€. +- +- +- Copy the current TOTP to the clipboard (equivalent to "-a totp"). +- KopírovaÅ¥ aktuálny TOTP do schránky (ekvivalent „-a totpâ€). +- +- +- Copy an entry's attribute to the clipboard. +- SkopírovaÅ¥ atribút položky do schránky. +- +- +- ERROR: Please specify one of --attribute or --totp, not both. +- CHYBA: Prosím, zadajte len jedno z --attribute alebo --totp, nie oba. +- +- +- ERROR: attribute %1 is ambiguous, it matches %2. +- CHYBA: atribút %1 je nejednoznaÄný, vyhovuje %2. +- +- +- Attribute "%1" not found. +- Atribút „%1†nenájdený. +- +- +- Entry's "%1" attribute copied to the clipboard! +- Atribút „%1†položky skopírovaný do schránky! +- +- +- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). +- Slot Yubikey a voliteľné sériové Äíslo na prístup k databáze (napr. 1:7370001). +- +- +- slot[:serial] +- slot[:ser.Äíslo] +- +- +- Target decryption time in MS for the database. +- Cieľový Äas deÅ¡ifrovania databázy v ms. +- +- +- time +- Äas +- +- +- Set the key file for the database. +- NastaviÅ¥ súbor kľúÄa databázy. +- +- +- Set a password for the database. +- NastaviÅ¥ heslo databázy. +- +- +- Invalid decryption time %1. +- Neplatný Äas deÅ¡ifrovania %1. +- +- +- Target decryption time must be between %1 and %2. +- Cieľový Äas deÅ¡ifrovania databázy má byÅ¥ medzi %1 a %2. +- +- +- Failed to set database password. +- Zlyhalo nastavenie hesla databázy. +- +- +- Benchmarking key derivation function for %1ms delay. +- meranie výkonu funkcie odvodenia kľúÄa pre %1ms trvanie. +- +- +- Setting %1 rounds for key derivation function. +- Nastavenie %1 opakovaní pre funkciu odvodenia kľúÄa. +- +- +- error while setting database key derivation settings. +- chyba nastavovania kľúÄa databázy pri nastavení odvodenia kľúÄa. +- +- +- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. +- Formát exportu. Dostupné voľby sú „xml†alebo „csvâ€. Predvolene „xmlâ€. +- +- +- Unable to import XML database: %1 +- Nemožno importovaÅ¥ databázu XML: %1 +- +- +- Show a database's information. +- ZobraziÅ¥ informácie databázy. +- +- +- UUID: +- UUID: +- +- +- Name: +- Názov: +- +- +- Description: +- Popis: +- +- +- Cipher: +- Å ifra: +- +- +- KDF: +- KDF: +- +- +- Recycle bin is enabled. +- Odpadkový kôš je zapnutý. +- +- +- Recycle bin is not enabled. +- Odpadkový kôš nie je zapnutý. +- +- +- Invalid command %1. +- Neplatný príkaz %1. +- +- +- Invalid YubiKey serial %1 +- Neplatné sériové Äíslo Yubikey %1 +- +- +- Please touch the button on your YubiKey to continue… +- Prosím, stlaÄte tlaÄidlo svojho YubiKey na pokraÄovanie*… +- +- +- Do you want to create a database with an empty password? [y/N]: +- Naozaj chcete vytvoriÅ¥ databázu s prázdnym heslom? [y/N] +- +- +- Repeat password: +- Zopakujte heslo: +- +- +- Error: Passwords do not match. +- Chyba: Heslá sa nezhodujú. +- +- +- All clipping programs failed. Tried %1 +- +- +- +- +- AES (%1 rounds) +- AES (%1 opakovaní) +- +- +- AES 256-bit +- AES 256b +- +- +- Twofish 256-bit +- Twofish 256b +- +- +- ChaCha20 256-bit +- ChaCha20: 256b {20 256-?} +- +- +- Benchmark %1 delay +- Meranie výkonu %1 oneskorenie +- +- +- %1 ms +- milliseconds +- %1 ms%1 ms%1 ms%1 ms +- +- +- %1 s +- seconds +- %1 s%1 s%1 s%1 s +- +- +- path to a custom local config file +- +- +- +- WARNING: You are using an old key file format which KeePassXC may +-stop supporting in the future. +- +-Please consider generating a new key file. +- +- +- +- Argon2%1 (%2 rounds, %3 KB) +- +- +- +- Argon2d (KDBX 4 – recommended) +- +- +- +- Argon2id (KDBX 4) +- +- +- +- TOTP +- TOTP +- +- +- Icon +- Ikona +- +- +- Unsupported key file version: %1 +- +- +- +- Checksum mismatch! Key file may be corrupt. +- +- +- +- Unexpected key file data! Key file may be corrupt. +- +- +- +- +- QtIOCompressor +- +- Internal zlib error when compressing: +- Pri komprimácii sa vyskytla interná chyba zlib: +- +- +- Error writing to underlying device: +- Chyba zápisu na zariadenie: +- +- +- Error opening underlying device: +- Chyba otvorenia zariadenia: +- +- +- Error reading data from underlying device: +- Chyba Äítania dát zo zariadenia: +- +- +- Internal zlib error when decompressing: +- Pri dekomprimácii sa vyskytla interná chyba zlib: +- +- +- +- QtIOCompressor::open +- +- The gzip format not supported in this version of zlib. +- Formát gzip nie je touto verziou zlib podporovaný. +- +- +- Internal zlib error: +- Interná chyba zlib: +- +- +- +- ReportsWidgetHealthcheck +- +- Also show entries that have been excluded from reports +- ZobraziÅ¥ aj položky vylúÄené z hlásení +- +- +- Hover over reason to show additional details. Double-click entries to edit. +- Prejdite myÅ¡ou na príÄinou, na zobrazenie dodatoÄných podrobností. Dvojklikom na položku ju upravíte. +- +- +- Bad +- Password quality +- Zlé +- +- +- Bad — password must be changed +- Zlé — heslo treba zmeniÅ¥ +- +- +- Poor +- Password quality +- Biedne +- +- +- Poor — password should be changed +- Biedne — heslo by ste mali zmeniÅ¥ +- +- +- Weak +- Password quality +- Slabé +- +- +- Weak — consider changing the password +- Slabé — zvážte zmenu hesla +- +- +- (Excluded) +- (VylúÄené) +- +- +- This entry is being excluded from reports +- Táto položka je vylúÄená z hlásení +- +- +- Please wait, health data is being calculated... +- Prosím poÄkajte, poÄítanie dát zdravia… +- +- +- Congratulations, everything is healthy! +- Blahoželáme, vÅ¡etko je v poriadku! +- +- +- Title +- Nadpis +- +- +- Path +- Cesta +- +- +- Score +- Skóre +- +- +- Reason +- Dôvod +- +- +- Edit Entry... +- UpraviÅ¥ položku… +- +- +- Exclude from reports +- VylúÄiÅ¥ z hlásení +- +- +- +- ReportsWidgetHibp +- +- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. +- VÃSTRAHA: Toto hlásenie vyžaduje odoslanie informácií do online služby Have I Been Pwned (https://haveibeenpwned.com). Ak budete pokraÄovaÅ¥, z databáza VaÅ¡ich hesiel budú urobené kryptografické odtlaÄky a prvých päť znakov týchto odtlaÄkov bude zabezpeÄene poslaných do tejto služby. VaÅ¡a databáza ostane bezpeÄná a nebude možné ju z týchto informácií spätne zostaviÅ¥. Ale službe bude známy poÄet odoslaných hesiel a vaÅ¡a adresa IP. +- +- +- Perform Online Analysis +- VykonaÅ¥ online analýzu +- +- +- Also show entries that have been excluded from reports +- ZobraziÅ¥ aj položky vylúÄené z hlásení +- +- +- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. +- Toto zostavenie KeePassXC nemá sieÅ¥ové funkcie. SieÅ¥ je potrebná na overenie vaÅ¡ich hesiel pomocou databáz Have I Been Pwned. +- +- +- Congratulations, no exposed passwords! +- Blahoželáme, žiadne uniknuté heslá! +- +- +- Title +- Nadpis +- +- +- Path +- Cesta +- +- +- Password exposed… +- Heslo uniknuté… +- +- +- (Excluded) +- (VylúÄené) +- +- +- This entry is being excluded from reports +- Táto položka je vylúÄená z hlásení +- +- +- once +- raz +- +- +- up to 10 times +- až 10 krát +- +- +- up to 100 times +- až 100 krát +- +- +- up to 1000 times +- až 1 000 krát +- +- +- up to 10,000 times +- až 10 000 krát +- +- +- up to 100,000 times +- až 100 000 krát +- +- +- up to a million times +- až milión krát +- +- +- millions of times +- milión krát +- +- +- Edit Entry... +- UpraviÅ¥ položku… +- +- +- Exclude from reports +- VylúÄiÅ¥ z hlásení +- +- +- +- ReportsWidgetStatistics +- +- Hover over lines with error icons for further information. +- Pre ÄalÅ¡ie informácie umiestnite kurzor myÅ¡i na riadky s ikonami chýb. +- +- +- Name +- Názov +- +- +- Value +- Hodnota +- +- +- Please wait, database statistics are being calculated... +- Prosím poÄkajte, poÄítanie Å¡tatistík databázy… +- +- +- Database name +- Názov databázy +- +- +- Description +- Popis +- +- +- Location +- Umiestnenie +- +- +- Last saved +- Naposledy uložené +- +- +- Unsaved changes +- Neuložené zmeny +- +- +- yes +- áno +- +- +- no +- nie +- +- +- The database was modified, but the changes have not yet been saved to disk. +- Databáza bola zmenená, ale zmeny eÅ¡te neboli uložené na disk. +- +- +- Number of groups +- PoÄet skupín +- +- +- Number of entries +- PoÄet položiek +- +- +- Number of expired entries +- PoÄet položiek po dobe platnosti +- +- +- The database contains entries that have expired. +- Databáza obsahuje položky ktoré expirovali. +- +- +- Unique passwords +- JedineÄné heslá +- +- +- Non-unique passwords +- Nie jedineÄné heslá +- +- +- More than 10% of passwords are reused. Use unique passwords when possible. +- Viac ako 10 % hesiel je použitých opakovanie. Použite jedineÄné heslá, vždy keÄ je to možné. +- +- +- Maximum password reuse +- Maximálny poÄet opakovane použitých hesiel +- +- +- Some passwords are used more than three times. Use unique passwords when possible. +- Niektoré heslá sú použité viac tri krát. Použite jedineÄné heslá, vždy keÄ je to možné. +- +- +- Number of short passwords +- PoÄet krátkych hesiel +- +- +- Recommended minimum password length is at least 8 characters. +- OdporúÄaná minimálna dĺžka hesla je aspoň 8 znakov. +- +- +- Number of weak passwords +- PoÄet slabých hesiel +- +- +- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. +- OdporúÄame použiÅ¥ dlhé, náhodné heslá s hodnotením „dobré†alebo „výborné†good' or 'excellent'. +- +- +- Entries excluded from reports +- Položky vylúÄené z hlásení +- +- +- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. +- VylúÄenie položiek z hlásení, napr. pretože je známe ich slabé heslo, zvyÄajne nemusí byÅ¥ problém, ale mali by ste sa na to dávaÅ¥ pozor. +- +- +- Average password length +- Priemerná dĺžka hesla +- +- +- %1 characters +- %1 znakov +- +- +- Average password length is less than ten characters. Longer passwords provide more security. +- Priemerná dĺžka hesla je menÅ¡ia ako desaÅ¥ znakov. DlhÅ¡ie heslá poskytujú vyÅ¡Å¡iu bezpeÄnosÅ¥. +- +- +- +- SSHAgent +- +- Agent connection failed. +- Spojenie agenta zlyhalo. +- +- +- Agent protocol error. +- Chyba protokolu agenta. +- +- +- No agent running, cannot add identity. +- Nie je spustený žiadny agent, nemožno identifikovaÅ¥. +- +- +- No agent running, cannot remove identity. +- Nie je spustený žiadny agent, nemožno odstrániÅ¥ identitu. +- +- +- Agent refused this identity. Possible reasons include: +- Agent odmietol túto identitu. Možné príÄiny: +- +- +- The key has already been added. +- KÄ¾ÃºÄ už bol pridaný. +- +- +- Restricted lifetime is not supported by the agent (check options). +- Obmedzená doba platnosti nie je agentom podporovaná (skontrolujte voľby) +- +- +- A confirmation request is not supported by the agent (check options). +- Potrvrdzovací požiadavok nie je podporovaný (skontrolujte voľby). +- +- +- Key identity ownership conflict. Refusing to add. +- Konflikt identity vlastníctva kľúÄa. Odmietnuté pridaÅ¥. +- +- +- No agent running, cannot list identities. +- Nie je spustený agent, nemožno získaÅ¥ zoznam identít. +- +- +- +- SearchHelpWidget +- +- Search Help +- HľadaÅ¥ v pomocníkovi +- +- +- Search terms are as follows: [modifiers][field:]["]term["] +- Hľadané výrazy sú nasledovné: [modifikátory] [pole:] ["] výraz ["] +- +- +- Every search term must match (ie, logical AND) +- Každý hľadaný výraz sa musí zhodovaÅ¥ (tj. platí logické AND) +- +- +- Modifiers +- Modifikátory +- +- +- exclude term from results +- vylúÄiÅ¥ hľadaný výraz z výsledkov +- +- +- match term exactly +- presná zhoda výrazu +- +- +- use regex in term +- použiÅ¥ regex vo výraze +- +- +- Fields +- Polia +- +- +- Term Wildcards +- zástupné znaky (wildcards) vo výraze +- +- +- match anything +- zhoda s ktorýmkoľvek z výrazov +- +- +- match one +- zhoda s jedným z výrazov +- +- +- logical OR +- logické OR (alebo) +- +- +- Examples +- Príklady +- +- +- +- SearchWidget +- +- Search +- HľadaÅ¥ +- +- +- Limit search to selected group +- ObmedziÅ¥ hľadanie na zvolenú skupinu +- +- +- Search Help +- HľadaÅ¥ v pomocníkovi +- +- +- Search (%1)... +- Search placeholder text, %1 is the keyboard shortcut +- Hľadanie (%1)... +- +- +- Case sensitive +- RozliÅ¡ovaÅ¥ veľkosÅ¥ písmen +- +- +- +- SettingsWidgetFdoSecrets +- +- Options +- Voľby +- +- +- Enable KeepassXC Freedesktop.org Secret Service integration +- Zapne Integráciu KeepassXC Freedesktop.org Secret Service +- +- +- General +- VÅ¡eobecné +- +- +- Show notification when credentials are requested +- ZobraziÅ¥ upozornenie, keÄ sú požadované prihlasovacie údaje +- +- +- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> +- <html><head/><body><p>Ak je pre databázu zapnutý kôš, položky budú presunuté priamo do koÅ¡a. V opaÄnom prípade budú odstránené bez potvrdenia.</p><p>Potvrdenie bude vyžadované, len ak sú položky odkazované inými.</p></body></html> +- +- +- Exposed database groups: +- Zverejnené skupiny databázy: +- +- +- Authorization +- Autorizácia +- +- +- These applications are currently connected: +- Aktuálne pripojené aplikácie: +- +- +- Don't confirm when entries are deleted by clients +- NepotvrdzovaÅ¥ pri odstránení položiek klientmi. +- +- +- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. +- <b>Chyba:</b> Zlyhalo pripojenie k DBus. Prosím, skontrolujte nastavenie svojho DBus. +- +- +- <b>Warning:</b> +- <b>Upozornenie:</b> +- +- +- Save current changes to activate the plugin and enable editing of this section. +- Uložte aktuálne zmeny na aktiváciu zásuvného modulu a zapnutie úpravy tejto sekcie. +- +- +- +- SettingsWidgetKeeShare +- +- Active +- Aktívne +- +- +- Allow export +- PovoliÅ¥ export +- +- +- Allow import +- PovoliÅ¥ import +- +- +- Own certificate +- Vlastný certifikát +- +- +- Fingerprint: +- OdtlaÄok: +- +- +- Certificate: +- Certifikát: +- +- +- Signer +- Podpísal +- +- +- Key: +- KľúÄ: +- +- +- Generate +- GenerovaÅ¥ +- +- +- Import +- ImportovaÅ¥ +- +- +- Export +- Export +- +- +- Imported certificates +- Importované certifikáty +- +- +- Trust +- DôverovaÅ¥ +- +- +- Ask +- SpýtaÅ¥ sa +- +- +- Untrust +- NedôverovaÅ¥ +- +- +- Remove +- OdstrániÅ¥ +- +- +- Path +- Cesta +- +- +- Status +- Status +- +- +- Fingerprint +- OdtlaÄok +- +- +- Certificate +- Certifikát +- +- +- Trusted +- Dôveryhodný +- +- +- Untrusted +- Nedôveryhodný +- +- +- Unknown +- Neznámy +- +- +- key.share +- Filetype for KeeShare key +- key.share +- +- +- KeeShare key file +- KľúÄový súbor KeeShare +- +- +- All files +- VÅ¡etky súbory +- +- +- Select path +- Zvoľte cestu +- +- +- Exporting changed certificate +- Exportuje sa zmenený certifikát +- +- +- The exported certificate is not the same as the one in use. Do you want to export the current certificate? +- Exportovaný certifikát nie je rovnaký ako ten, ktorý sa používa. Chcete exportovaÅ¥ aktuálny certifikát? +- +- +- Signer: +- Podpísaný: +- +- +- Allow KeeShare imports +- PovoliÅ¥ importy KeeShare +- +- +- Allow KeeShare exports +- PovoliÅ¥ exporty KeeShare +- +- +- Only show warnings and errors +- ZobraziÅ¥ len upozornenia a chyby +- +- +- Key +- KÄ¾ÃºÄ +- +- +- Signer name field +- Pole mena podpisovaného +- +- +- Generate new certificate +- GenerovaÅ¥ nový certifikát +- +- +- Import existing certificate +- ImportovaÅ¥ existujúci certifikát +- +- +- Export own certificate +- Exportuje vlastný certifikát +- +- +- Known shares +- Známe zdieľania +- +- +- Trust selected certificate +- DôverovaÅ¥ zvolenému certifikátu +- +- +- Ask whether to trust the selected certificate every time +- Vždy sa spýtaÅ¥, Äi dôverovaÅ¥ zvolenému certifikátu +- +- +- Untrust selected certificate +- ZruÅ¡iÅ¥ dôveru zvoleného certifikátu +- +- +- Remove selected certificate +- OdstrániÅ¥ zvolený certifikát +- +- +- +- ShareExport +- +- Overwriting signed share container is not supported - export prevented +- Prepis podpísaných zdieľaných kontajnerov nie je podporovaný - export sa neuskutoÄnil +- +- +- Could not write export container (%1) +- Nemožno zapísaÅ¥ do exportného kontajnera (%1) +- +- +- Could not embed signature: Could not open file to write (%1) +- Podpis sa nedá vložiÅ¥: nedá sa otvoriÅ¥ súbor na zápis (%1) +- +- +- Could not embed signature: Could not write file (%1) +- Podpis sa nedá vložiÅ¥: do súboru sa nedá zapísaÅ¥ (%1) +- +- +- Could not embed database: Could not open file to write (%1) +- Nedá sa vložiÅ¥ databáza: nedá sa otvoriÅ¥ súbor na zápis (%1) +- +- +- Could not embed database: Could not write file (%1) +- Nedá sa vložiÅ¥ databáza: súbor sa nedá zapísaÅ¥ (%1) +- +- +- Overwriting unsigned share container is not supported - export prevented +- Prepis nepodpísaných zdieľaných kontajnerov nie je podporovaný - export sa neuskutoÄnil +- +- +- Could not write export container +- Nemožno zapísaÅ¥ do exportného kontajnera +- +- +- Unexpected export error occurred +- Vyskytla sa neoÄakávaná chyba exportu +- +- +- +- ShareImport +- +- Import from container without signature +- Import z kontajnera bez podpisu +- +- +- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? +- Nie je možné overiÅ¥ zdroj zdieľaného kontajnera, pretože nie je podpísaný. Naozaj chcete importovaÅ¥ z %1? +- +- +- Import from container with certificate +- ImportovaÅ¥ z kontajnera s certifikátom +- +- +- Do you want to trust %1 with the fingerprint of %2 from %3? +- Chcete dôverovaÅ¥ %1 s odtlaÄkom prsta %2 z %3? {1?} {2?} +- +- +- Not this time +- Teraz nie +- +- +- Never +- Nikdy +- +- +- Always +- Vždy +- +- +- Just this time +- Len tentokrát +- +- +- Signed share container are not supported - import prevented +- Podpísané zdieľané kontajnery nie sú podporované - import sa neuskutoÄnil +- +- +- File is not readable +- Súbor nie je Äitateľný +- +- +- Invalid sharing container +- Neplatný kontajner zdieľania +- +- +- Untrusted import prevented +- Bolo zabránené nedôveryhodnému importu +- +- +- Successful signed import +- ÚspeÅ¡ný podpísaný import +- +- +- Unsigned share container are not supported - import prevented +- Nepodpísané zdieľané kontajnery nie sú podporované - import sa neuskutoÄnil +- +- +- Successful unsigned import +- ÚspeÅ¡ný nepodpísaný import +- +- +- File does not exist +- Súbor neexistuje +- +- +- Unknown share container type +- Neznámy typ kontajnera zdieľania +- +- +- +- ShareObserver +- +- Import from %1 failed (%2) +- Import z %1 zlyhal (%2) +- +- +- Import from %1 successful (%2) +- Import z %1 úspeÅ¡ný (%2) +- +- +- Imported from %1 +- Importované z %1 +- +- +- Export to %1 failed (%2) +- Exportovanie do %1 zlyhalo (%2) +- +- +- Export to %1 successful (%2) +- Export do %1 úspeÅ¡ný (%2) +- +- +- Export to %1 +- ExportovaÅ¥ do %1 +- +- +- Multiple import source path to %1 in %2 +- Viaceré cesty zdroja importu do %1 v %2 +- +- +- Conflicting export target path %1 in %2 +- Konfliktná cieľová cesta exportu %1 v %2 +- +- +- +- TotpDialog +- +- Timed Password +- ÄŒasové heslo +- +- +- 000000 +- 000000 +- +- +- Copy +- KopírovaÅ¥ +- +- +- Expires in <b>%n</b> second(s) +- Uplynie v <b>% n</b> sekunda (s)Uplynie v <b>% n</b> sekunda (s)Uplynie v <b>% n</b> sekunda (s)Expiruje za <b>% n</b> sekúnd +- +- +- +- TotpExportSettingsDialog +- +- Copy +- KopírovaÅ¥ +- +- +- NOTE: These TOTP settings are custom and may not work with other authenticators. +- TOTP QR code dialog warning +- Poznámka: tieto nastavenia TOTP sú používateľské a nemusia pracovaÅ¥ s inými autentikátormi. +- +- +- There was an error creating the QR code. +- Pri vytváraní QR kódu sa vyskytla chyba. +- +- +- Closing in %1 seconds. +- Zatvorí sa za %1 sekúnd. +- +- +- +- TotpSetupDialog +- +- Setup TOTP +- NastaviÅ¥ TOTP +- +- +- Default RFC 6238 token settings +- Predvolené nastavenia tokenu RFC 6238 +- +- +- Steam token settings +- Nastavenie Steam tokenu +- +- +- Use custom settings +- PoužiÅ¥ vlastné nastavenia +- +- +- Custom Settings +- Používateľské nastavenia +- +- +- Time step: +- ÄŒasový krok: +- +- +- sec +- Seconds +- s +- +- +- Code size: +- VeľkosÅ¥ kódu: +- +- +- Secret Key: +- Tajný kľúÄ: +- +- +- Secret key must be in Base32 format +- Tajný kÄ¾ÃºÄ musí byÅ¥ vo formáte Base32 +- +- +- Secret key field +- Pole tajného kľúÄa +- +- +- Algorithm: +- Algoritmus: +- +- +- Time step field +- Pole kroku Äasu +- +- +- digits +- Äíslice +- +- +- Invalid TOTP Secret +- Neplatné tajomstvo TOTP +- +- +- You have entered an invalid secret key. The key must be in Base32 format. +-Example: JBSWY3DPEHPK3PXP +- Zadali ste neplatný tajný kľúÄ. KÄ¾ÃºÄ musí byÅ¥ vo formáte Base32. +-Napríklad: JBSWY3DPEHPK3PXP +- +- +- Confirm Remove TOTP Settings +- PotvrÄte odstránenie nastavení TOTP +- +- +- Are you sure you want to delete TOTP settings for this entry? +- Naozaj chcete odstrániÅ¥ nastavenia TOTP tejto položky? +- +- +- +- URLEdit +- +- Invalid URL +- Neplatná URL +- +- +- +- UpdateCheckDialog +- +- Checking for updates +- Kontrola aktualizácií +- +- +- Checking for updates... +- Kontrola aktualizácií... +- +- +- Close +- ZatvoriÅ¥ +- +- +- Update Error! +- Chyba pri aktualizácii! +- +- +- An error occurred in retrieving update information. +- Pri získavaní informácií o aktualizácii sa vyskytla chyba. +- +- +- Please try again later. +- Skúste znova neskôr. +- +- +- Software Update +- Aktualizácia softvéru +- +- +- A new version of KeePassXC is available! +- Už existuje nová verzia KeePassXC! +- +- +- KeePassXC %1 is now available — you have %2. +- Už existuje KeePassXC %1 — vy máte %2. +- +- +- Download it at keepassxc.org +- Stiahnite si ho na keepassxc.org +- +- +- You're up-to-date! +- Máte najnovÅ¡iu verziu. +- +- +- KeePassXC %1 is currently the newest version available +- KeePassXC %1 je v súÄasnosti najnovÅ¡ia verzia +- +- +- +- WelcomeWidget +- +- Start storing your passwords securely in a KeePassXC database +- ZaÄnite ukladaÅ¥ svoje heslá bezpeÄne v databáze KeePassXC +- +- +- Create new database +- VytvoriÅ¥ novú databázu +- +- +- Open existing database +- OtvoriÅ¥ existujúcu databázu +- +- +- Import from KeePass 1 +- ImportovaÅ¥ z KeePass 1 +- +- +- Import from CSV +- Importované z CSV +- +- +- Recent databases +- Nedávne databázy +- +- +- Welcome to KeePassXC %1 +- Vitajte v KeePassXC %1 +- +- +- Import from 1Password +- ImportovaÅ¥ z 1Password +- +- +- Open a recent database +- OtvoriÅ¥ nedávnu databázu +- +- +- +- YubiKey +- +- %1 [%2] Configured Slot - %3 +- %1 [%2] Nastavený slot – %3 +- +- +- %1 [%2] Challenge Response - Slot %3 - %4 +- %1[%2] Výzva – odpoveÄ â€“ slot %3 – %4 +- +- +- Press +- StlaÄiÅ¥ +- +- +- Passive +- Pasívne +- +- +- %1 Invalid slot specified - %2 +- %1 zadaný neplatný slot – %2 +- +- +- The YubiKey interface has not been initialized. +- Rozhranie YubiKey nebolo inicializované. +- +- +- Hardware key is currently in use. +- Hardvérový kÄ¾ÃºÄ je práve používaný. +- +- +- Could not find hardware key with serial number %1. Please plug it in to continue. +- Nemožno nájsÅ¥ hardvérový kÄ¾ÃºÄ so sériovým Äíslom %1. Prosím, pripojte ho na pokraÄovanie. +- +- +- Hardware key timed out waiting for user interaction. +- Uplynul Äasový limit hardvérového kľúÄa pri Äakaní na ÄinnosÅ¥ používateľa. +- +- +- A USB error ocurred when accessing the hardware key: %1 +- Pri prístupe k hardvérovému kľúÄu nastala chyba USB: %1 +- +- +- Failed to complete a challenge-response, the specific error was: %1 +- Zlyhalo dokonÄenie výzvy.odpovede, konkrétna chyba bola: %1 +- +- +- +- YubiKeyEditWidget +- +- Refresh +- ObnoviÅ¥ +- +- +- YubiKey Challenge-Response +- YubiKey výzva-odpoveÄ (Challenge-Response) +- +- +- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- <p>Ak vlastníte <a href="https://www.yubico.com/">Yubikey</a>, môžete ho použiÅ¥ na dodatoÄné zabezpeÄenie.</p><p>YubiKey vyžaduje, aby jeden z jeho slotov bol naprogramovaný ako <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- +- +- Refresh hardware tokens +- ObnoviÅ¥ hardvérové tokeny +- +- +- Hardware key slot selection +- Výber slotu hardvérového kľúÄa +- +- +- Could not find any hardware keys! +- Nemožno nájsÅ¥ žiadny hardvérový kľúÄ! +- +- +- Selected hardware key slot does not support challenge-response! +- Zvolený slot hardvérového kľúÄa nepodporuje výzvu.dopoveÄ! +- +- +- Detecting hardware keys… +- Detekcia hardvérových kľúÄov… +- +- +- No hardware keys detected +- Nenájdené žiadne hardvérové kľúÄe +- +- +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_sl_SI.ts keepassxc-2.6.4-patched/share/translations/keepassx_sl_SI.ts +--- keepassxc-2.6.4-orig/share/translations/keepassx_sl_SI.ts 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/translations/keepassx_sl_SI.ts 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7838 +0,0 @@ +- +- +- AboutDialog +- +- About KeePassXC +- O programu KeePassXC +- +- +- About +- O programu +- +- +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- Napake sporoÄite na:<a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- +- +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- KeePassXC je distribuiran pod pogojih GNU sploÅ¡ne javne licence (GPL) razliÄica 2 ali (po vaÅ¡i presoji) razliÄica 3. +- +- +- Contributors +- SodelujoÄi +- +- +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Poglej sodelujoÄe na GitHub</a> +- +- +- Debug Info +- Debug Informacije +- +- +- Include the following information whenever you report a bug: +- Pri poroÄanju o napaki vkljuÄi naslednje informacije: +- +- +- Copy to clipboard +- Kopiraj v odložiÅ¡Äe +- +- +- Project Maintainers: +- Vzdrževalci projekta: +- +- +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- S strani KeePassXC ekipe gre posebna zahvala debfx za ustvarjanje izvirnega KeePassX programa. +- +- +- +- AgentSettingsWidget +- +- Use OpenSSH for Windows instead of Pageant +- Uporabi Windows OpenSSH namesto Pageant +- +- +- Enable SSH Agent integration +- OmogoÄi integracijo z SSH agentom +- +- +- SSH_AUTH_SOCK value +- SSH_AUTH_SOCK vrednost +- +- +- SSH_AUTH_SOCK override +- SSH_AUTH_SOCK prepis +- +- +- (empty) +- (prazno) +- +- +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- +- +- SSH Agent connection is working! +- Povezava s SSH agentom deluje! +- +- +- +- ApplicationSettingsWidget +- +- Application Settings +- Nastavitve aplikacije +- +- +- General +- SploÅ¡no +- +- +- Security +- Varnost +- +- +- Access error for config file %1 +- Napaka pri dostopu do konfiguracijske datoteke %1 +- +- +- Icon only +- Samo ikone +- +- +- Text only +- Samo besedilo +- +- +- Text beside icon +- Besedilo poleg ikone +- +- +- Text under icon +- Besedilo pod ikono +- +- +- Follow style +- +- +- +- Reset Settings? +- Ponastavim nastavitve? +- +- +- Are you sure you want to reset all general and security settings to default? +- Ali ste prepriÄani, da želite ponastaviti vse sploÅ¡ne in varnostne nastavitve na privzete vrednosti? +- +- +- Monochrome (light) +- Monochrome (svetla) +- +- +- Monochrome (dark) +- Monochrome (temna) +- +- +- Colorful +- +- +- +- You must restart the application to set the new language. Would you like to restart now? +- Da se nastavi novi jezik je potrebno ponovno zagnati aplikacijo. Ali želite ponovno zagnati sedaj? +- +- +- +- ApplicationSettingsWidgetGeneral +- +- Basic Settings +- Osnovne nastavitve +- +- +- Startup +- Zagon +- +- +- Start only a single instance of KeePassXC +- Zaženi samo eno instanco KeePassXC programa +- +- +- Minimize window at application startup +- Minimiziraj okno, ko se aplikacija zažene +- +- +- File Management +- Urejanje datoteke +- +- +- Backup database file before saving +- Pred shranjevanjem naredi varnostno kopijo +- +- +- Automatically save after every change +- Samodejno shrani po vsaki spremembi +- +- +- Automatically reload the database when modified externally +- Samodejno osveži bazo, kadar je spremenjena iz zunanjih virov +- +- +- Entry Management +- Urejanje vnosa +- +- +- Use group icon on entry creation +- Za nove vnose uporabi ikono skupine +- +- +- Minimize instead of app exit +- Minimiziraj aplikacijo, da se zapre +- +- +- Show a system tray icon +- Pokaži ikono v sistemski vrstici +- +- +- Hide window to system tray when minimized +- Minimiziraj v sistemsko vrstico +- +- +- Auto-Type +- Samodejno tipkanje +- +- +- Use entry title to match windows for global Auto-Type +- +- +- +- Use entry URL to match windows for global Auto-Type +- +- +- +- Always ask before performing Auto-Type +- +- +- +- ms +- Milliseconds +- ms +- +- +- Movable toolbar +- PremiÄna orodna vrstica +- +- +- Remember previously used databases +- Zapomni si od prej odprte baze +- +- +- Load previously open databases on startup +- Ob zagonu naloži zadnje odprte baze +- +- +- Remember database key files and security dongles +- Zapomni si datoteke kljuÄev in varnostne kljuÄe od baze +- +- +- Check for updates at application startup once per week +- Enkrat na teden preveri za posodobitve ob zagonu aplikacije +- +- +- Include beta releases when checking for updates +- +- +- +- Language: +- Jezik: +- +- +- (restart program to activate) +- (za aktivacijo ponovno zaženi program ) +- +- +- Minimize window after unlocking database +- +- +- +- Minimize when opening a URL +- +- +- +- Hide window when copying to clipboard +- +- +- +- Minimize +- Minimiziraj +- +- +- Drop to background +- +- +- +- Favicon download timeout: +- +- +- +- Website icon download timeout in seconds +- +- +- +- sec +- Seconds +- s +- +- +- Toolbar button style +- Slog gumba v orodni vrstici +- +- +- Language selection +- Izbira jezika +- +- +- Global auto-type shortcut +- +- +- +- Auto-type character typing delay milliseconds +- +- +- +- Auto-type start delay milliseconds +- +- +- +- Automatically launch KeePassXC at system startup +- +- +- +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- +- +- +- User Interface +- +- +- +- Toolbar button style: +- Slog gumba v orodni vrstici: +- +- +- Use monospaced font for notes +- Za opombe uporabljaj pisavo monospaced +- +- +- Tray icon type: +- +- +- +- Reset settings to default… +- Ponastavi nastavitve na privzete vrednosti… +- +- +- Auto-Type typing delay: +- +- +- +- Global Auto-Type shortcut: +- +- +- +- Auto-Type start delay: +- +- +- +- Automatically save when locking database +- +- +- +- Automatically save non-data changes when locking database +- +- +- +- Tray icon type +- +- +- +- +- ApplicationSettingsWidgetSecurity +- +- Timeouts +- ÄŒasovne omejitve +- +- +- Clear clipboard after +- PobriÅ¡i odložiÅ¡Äe po +- +- +- sec +- Seconds +- s +- +- +- Lock databases after inactivity of +- Zakleni podatkovne baze po neaktivnosti +- +- +- min +- min +- +- +- Forget TouchID after inactivity of +- +- +- +- Convenience +- PriroÄnost +- +- +- Lock databases when session is locked or lid is closed +- +- +- +- Forget TouchID when session is locked or lid is closed +- +- +- +- Lock databases after minimizing the window +- +- +- +- Re-lock previously locked database after performing Auto-Type +- +- +- +- Hide passwords in the entry preview panel +- +- +- +- Hide entry notes by default +- +- +- +- Privacy +- Zasebnost +- +- +- Use DuckDuckGo service to download website icons +- Uporabi storitev DuckDuckGo za prenos ikon od spletnih strani +- +- +- Clipboard clear seconds +- +- +- +- Touch ID inactivity reset +- +- +- +- Database lock timeout seconds +- +- +- +- min +- Minutes +- min +- +- +- Clear search query after +- PobriÅ¡i iskalno poizvedbo po +- +- +- Require password repeat when it is visible +- +- +- +- Hide passwords when editing them +- Skrij gesla med urejanjem +- +- +- Use placeholder for empty password fields +- +- +- +- +- AutoType +- +- Couldn't find an entry that matches the window title: +- Ne najdem vnosa, ki bi ustrezal: +- +- +- Auto-Type - KeePassXC +- +- +- +- Auto-Type +- Samodejno tipkanje +- +- +- The Syntax of your Auto-Type statement is incorrect! +- +- +- +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- +- +- +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- +- +- +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- +- +- +- Permission Required +- Zahtevano je dovoljenje +- +- +- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. +- +- +- +- +- AutoTypeAssociationsModel +- +- Window +- Okno +- +- +- Sequence +- Zaporedje +- +- +- Default sequence +- Privzeto zaporedje +- +- +- +- AutoTypeMatchModel +- +- Group +- Skupina +- +- +- Title +- Naslov +- +- +- Username +- UporabniÅ¡ko ime +- +- +- Sequence +- Zaporedje +- +- +- +- AutoTypeMatchView +- +- Copy &username +- Kopiraj &uporabniÅ¡ko ime +- +- +- Copy &password +- Kopiraj &geslo +- +- +- +- AutoTypePlatformMac +- +- Permission Required +- Zahtevano je dovoljenje +- +- +- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. +- +- +- +- +- AutoTypeSelectDialog +- +- Auto-Type - KeePassXC +- +- +- +- Select entry to Auto-Type: +- Izberi vnos za samodejno tipkanje: +- +- +- Search... +- IÅ¡Äi... +- +- +- +- BrowserAccessControlDialog +- +- KeePassXC - Browser Access Request +- +- +- +- %1 is requesting access to the following entries: +- +- +- +- Remember access to checked entries +- Zapomnite si dostop za oznaÄene vnose +- +- +- Remember +- Zapomni si +- +- +- Allow access to entries +- Dovoli dostop do vnosov +- +- +- Allow Selected +- Dovoli izbrano +- +- +- Deny All +- Zavrni vse +- +- +- Disable for this site +- OnemogoÄi za to stran +- +- +- +- BrowserEntrySaveDialog +- +- KeePassXC-Browser Save Entry +- +- +- +- Ok +- V redu +- +- +- Cancel +- PrekliÄi +- +- +- You have multiple databases open. +-Please select the correct database for saving credentials. +- +- +- +- +- BrowserService +- +- KeePassXC: New key association request +- +- +- +- Save and allow access +- Shrani in dovoli dostop +- +- +- KeePassXC: Overwrite existing key? +- KeePassXC: PrepiÅ¡em obstojeÄi kljuÄ? +- +- +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- +- +- +- KeePassXC: Update Entry +- KeePassXC: Posodobi vnos +- +- +- Do you want to update the information in %1 - %2? +- Ali želite posodobiti podatke v %1 - %2? +- +- +- Abort +- Prekini +- +- +- Converting attributes to custom data… +- +- +- +- KeePassXC: Converted KeePassHTTP attributes +- +- +- +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- +- +- +- Successfully moved %n keys to custom data. +- +- +- +- KeePassXC: No entry with KeePassHTTP attributes found! +- +- +- +- The active database does not contain an entry with KeePassHTTP attributes. +- +- +- +- KeePassXC: Legacy browser integration settings detected +- +- +- +- KeePassXC: Create a new group +- +- +- +- A request for creating a new group "%1" has been received. +-Do you want to create this group? +- +- +- +- +- Your KeePassXC-Browser settings need to be moved into the database settings. +-This is necessary to maintain your current browser connections. +-Would you like to migrate your existing settings now? +- +- +- +- Don't show this warning again +- Ne prikaži ponovno tega opozorila +- +- +- You have received an association request for the following database: +-%1 +- +-Give the connection a unique name or ID, for example: +-chrome-laptop. +- +- +- +- +- BrowserSettingsWidget +- +- Dialog +- Dialog +- +- +- This is required for accessing your databases with KeePassXC-Browser +- +- +- +- Enable browser integration +- OmogoÄi integracijo s spletni brskalnikom +- +- +- General +- SploÅ¡no +- +- +- Browsers installed as snaps are currently not supported. +- +- +- +- Enable integration for these browsers: +- OmogoÄi integracijo za te spletne brskalnike: +- +- +- Vivaldi +- Vivaldi +- +- +- &Edge +- &Edge +- +- +- Firefox +- Firefox +- +- +- Tor Browser +- Tor Browser +- +- +- Brave +- Brave +- +- +- Google Chrome +- Google Chrome +- +- +- Chromium +- Chromium +- +- +- Show a notification when credentials are requested +- Credentials mean login data requested via browser extension +- Prikaži obvestilo, ko so zahtevane poverilnice +- +- +- Request to unlock the database if it is locked +- Naredi zahtevo za odklenite baze, Äe je zaklenjena +- +- +- Only entries with the same scheme (http://, https://, ...) are returned. +- +- +- +- Match URL scheme (e.g., https://...) +- +- +- +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- +- +- +- Return only best-matching credentials +- +- +- +- Returns expired credentials. String [expired] is added to the title. +- +- +- +- Allow returning expired credentials +- +- +- +- All databases connected to the extension will return matching credentials. +- +- +- +- Search in all opened databases for matching credentials +- Credentials mean login data requested via browser extension +- +- +- +- Sort matching credentials by title +- Credentials mean login data requested via browser extension +- +- +- +- Sort matching credentials by username +- Credentials mean login data requested via browser extension +- +- +- +- Advanced +- Napredno +- +- +- Never ask before accessing credentials +- Credentials mean login data requested via browser extension +- +- +- +- Never ask before updating credentials +- Credentials mean login data requested via browser extension +- +- +- +- Do not ask permission for HTTP Basic Auth +- An extra HTTP Basic Auth setting +- +- +- +- Automatically creating or updating string fields is not supported. +- +- +- +- Return advanced string fields which start with "KPH: " +- +- +- +- Don't display the popup suggesting migration of legacy KeePassHTTP settings. +- +- +- +- Do not prompt for KeePassHTTP settings migration. +- +- +- +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- +- +- +- Update native messaging manifest files at startup +- +- +- +- Use a custom proxy location if you installed a proxy manually. +- +- +- +- Use a custom proxy location: +- Meant is the proxy for KeePassXC-Browser +- +- +- +- Custom proxy location field +- +- +- +- Browser for custom proxy file +- +- +- +- Browse... +- Button for opening file dialog +- Prebrskaj... +- +- +- Use a custom browser configuration location: +- +- +- +- Browser type: +- Vrsta spletnega brskalnika: +- +- +- Toolbar button style +- Slog gumba v orodni vrstici +- +- +- Config Location: +- +- +- +- Custom browser location field +- +- +- +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- +- +- +- Browse for custom browser path +- +- +- +- Custom extension ID: +- +- +- +- Custom extension ID +- +- +- +- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 +- +- +- +- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 +- +- +- +- Please see special instructions for browser extension use below +- +- +- +- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. +- +- +- +- <b>Warning:</b> The following options can be dangerous! +- +- +- +- Executable Files +- Programske datoteke +- +- +- All Files +- Vse datoteke +- +- +- Select custom proxy location +- +- +- +- Select native messaging host folder location +- +- +- +- +- CloneDialog +- +- Clone Options +- Možnosti kloniranja +- +- +- Append ' - Clone' to title +- Dodaj niz "- Klon" v naslov +- +- +- Replace username and password with references +- Zamenjaj uporabniÅ¡ko ime in geslo z referencami +- +- +- Copy history +- Kopiraj zgodovino +- +- +- +- CsvImportWidget +- +- Import CSV fields +- Uvozi polja iz CSV +- +- +- filename +- ime datoteke +- +- +- size, rows, columns +- velikost, vrstic, stolpcev +- +- +- Encoding +- +- +- +- Codec +- Kodek +- +- +- Text is qualified by +- Besedilo je kvalificirano z +- +- +- Fields are separated by +- Polja so loÄena z +- +- +- Comments start with +- Komentarji se zaÄnejo z +- +- +- Consider '\' an escape character +- Smatraj '\' za ubežni znak +- +- +- Preview +- Preview +- +- +- Imported from CSV file +- Uvoženo iz CSV datoteke +- +- +- Original data: +- Izvorni podatki: +- +- +- Error +- Napaka +- +- +- Error(s) detected in CSV file! +- Zaznane so bila napaka(e) v CSV datoteki! +- +- +- [%n more message(s) skipped] +- [%n veÄ preskok sporoÄil][%n veÄ preskok sporoÄil][%n veÄ preskok sporoÄil][Å¡e %n sporoÄil je preskoÄenih] +- +- +- CSV import: writer has errors: +-%1 +- +- +- +- Text qualification +- Kvalifikacija besedila +- +- +- Field separation +- +- +- +- Number of header lines to discard +- +- +- +- CSV import preview +- Predogled CSV uvoza +- +- +- Column Association +- +- +- +- Last Modified +- Nazadnje spremenjeno +- +- +- Password +- Geslo +- +- +- Created +- Ustvarjeno +- +- +- Notes +- Opombe +- +- +- Title +- Naslov +- +- +- Group +- Skupina +- +- +- URL +- URL +- +- +- Username +- UporabniÅ¡ko ime +- +- +- Header lines skipped +- +- +- +- First line has field names +- +- +- +- Not Present +- Ni prisoten +- +- +- Column %1 +- Stolpec %1 +- +- +- TOTP +- TOTP +- +- +- Icon +- Ikona +- +- +- +- CsvParserModel +- +- %n column(s) +- %n stolpcev%n stolpcev%n stolpcev%n stolpcev +- +- +- %1, %2, %3 +- file info: bytes, rows, columns +- %1, %2, %3 +- +- +- %n byte(s) +- %n byte%n byte%n byte%n bajtov +- +- +- %n row(s) +- %n vrstic%n vrstic%n vrstic%n vrstic +- +- +- +- Database +- +- File %1 does not exist. +- Datoteka %1 ne obstaja. +- +- +- Unable to open file %1. +- Datoteke %1 ni bilo mogoÄe odpreti. +- +- +- Error while reading the database: %1 +- Napaka pri branju baze: %1 +- +- +- File cannot be written as it is opened in read-only mode. +- Datoteke ni mogoÄe zapisati, saj je odprta v naÄinu samo za branje. +- +- +- Key not transformed. This is a bug, please report it to the developers! +- Key not transformed. This is a bug, please report it to the developers! +- +- +- %1 +-Backup database located at %2 +- %1 +-Varnostna kopija baze se nahaja na %2 +- +- +- Could not save, database does not point to a valid file. +- Ni bilo mogoÄe shraniti, baza podatkov ne kaže na veljavno datoteko. +- +- +- Could not save, database file is read-only. +- Ni bilo mogoÄe shraniti, datoteka baze je samo za branje. +- +- +- Database file has unmerged changes. +- Datoteka zbirke podatkov ima nepretoÄnjene spremembe. +-Datoteka baze ima Å¡e ne združene spremembe. +- +- +- Recycle Bin +- KoÅ¡ +- +- +- Passwords +- Root group name +- Gesla +- +- +- Database save is already in progress. +- Shranjevanje baze je že v teku. +- +- +- Could not save, database has not been initialized! +- Ni bilo mogoÄe shraniti, baza ni bila inicializirana! +- +- +- +- DatabaseOpenDialog +- +- Unlock Database - KeePassXC +- Odkleni bazo - KeePassXC +- +- +- +- DatabaseOpenWidget +- +- Key File: +- Datoteka s kljuÄi: +- +- +- Refresh +- Osveži +- +- +- Don't show this warning again +- Ne prikaži ponovno tega opozorila +- +- +- All files +- Vse datoteke +- +- +- Key files +- Datoteke s kljuÄi +- +- +- Select key file +- Izberi datoteko s kljuÄi +- +- +- Failed to open key file: %1 +- Datoteke s kljuÄem ni bilo mogoÄe odpreti: %1 +- +- +- Unlock KeePassXC Database +- Odkleni KeePassXC bazo +- +- +- Enter Password: +- Vnesite geslo: +- +- +- Password field +- Polje za geslo +- +- +- Hardware key slot selection +- +- +- +- Browse for key file +- Prebrskaj za datoteko s kljuÄi +- +- +- Browse... +- Prebrskaj... +- +- +- Refresh hardware tokens +- +- +- +- Hardware Key: +- +- +- +- Hardware key help +- +- +- +- TouchID for Quick Unlock +- +- +- +- Unlock failed and no password given +- Odklepanje ni uspelo in geslo ni bilo podano +- +- +- Unlocking the database failed and you did not enter a password. +-Do you want to retry with an "empty" password instead? +- +-To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. +- +- +- +- Retry with empty password +- Znova poskusite s praznim geslom +- +- +- Enter Additional Credentials (if any): +- +- +- +- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +-<p>Click for more information...</p> +- +- +- +- Key file help +- +- +- +- ? +- ? +- +- +- Cannot use database file as key file +- +- +- +- You cannot use your database file as a key file. +-If you do not have a key file, please leave the field empty. +- +- +- +- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> +- +- +- +- Key file to unlock the database +- +- +- +- Please touch the button on your YubiKey! +- Prosim, dotaknite se gumba na vaÅ¡i YubiKey napravi! +- +- +- Detecting hardware keys… +- +- +- +- No hardware keys detected +- +- +- +- Select hardware key… +- +- +- +- Old key file format +- +- +- +- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> +- +- +- +- +- DatabaseSettingWidgetMetaData +- +- Passwords +- Gesla +- +- +- +- DatabaseSettingsDialog +- +- Advanced Settings +- Napredne nastavitve +- +- +- General +- SploÅ¡no +- +- +- Security +- Varnost +- +- +- Encryption Settings +- Nastavitve Å¡ifriranja +- +- +- Browser Integration +- Integracija s spletnim brskalnikom +- +- +- Database Credentials +- Poverilnice baze +- +- +- +- DatabaseSettingsWidgetBrowser +- +- KeePassXC-Browser settings +- KeePassXC-Nastavitve spletnega brskalnika +- +- +- Stored keys +- Shranjeni kljuÄi +- +- +- Remove +- Odstrani +- +- +- Delete the selected key? +- IzbriÅ¡i izbrani kljuÄ? +- +- +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- Ali zares želite izbrisati izbrani kljuÄ? +-To lahko prepreÄi povezavo z vtiÄnikom spletnega brskalnika. +- +- +- Key +- KljuÄ +- +- +- Value +- Vrednost +- +- +- Enable Browser Integration to access these settings. +- Za dostop do teh nastavitev omogoÄite integracijo s spletnim brskalnikom. +- +- +- Disconnect all browsers +- Odklopi vse spletne brskalnike +- +- +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- +- +- +- KeePassXC: No keys found +- KeePassXC: KljuÄev ni bilo mogoÄe najti +- +- +- No shared encryption keys found in KeePassXC settings. +- +- +- +- KeePassXC: Removed keys from database +- +- +- +- Successfully removed %n encryption key(s) from KeePassXC settings. +- +- +- +- Forget all site-specific settings on entries +- +- +- +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- +- +- +- Removing stored permissions… +- +- +- +- Abort +- Prekini +- +- +- KeePassXC: Removed permissions +- +- +- +- Successfully removed permissions from %n entry(s). +- +- +- +- KeePassXC: No entry with permissions found! +- +- +- +- The active database does not contain an entry with permissions. +- +- +- +- Move KeePassHTTP attributes to custom data +- +- +- +- Do you really want to move all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- +- +- +- Stored browser keys +- Shranjeni kljuÄi spletnega brskalnika +- +- +- Remove selected key +- Odstrani izbrani kljuÄ +- +- +- Move KeePassHTTP attributes to KeePassXC-Browser custom data +- +- +- +- Refresh database root group ID +- +- +- +- Created +- Ustvarjeno +- +- +- Refresh database ID +- Osveži ID baze +- +- +- Do you really want refresh the database ID? +-This is only necessary if your database is a copy of another and the browser extension cannot connect. +- +- +- +- +- DatabaseSettingsWidgetDatabaseKey +- +- Add additional protection... +- Dodajte dodatno zaÅ¡Äito... +- +- +- No password set +- Geslo ni nastavljeno +- +- +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- +- +- +- Continue without password +- Nadaljujte brez gesla +- +- +- No encryption key added +- KljuÄ za Å¡ifriranje ni dodan +- +- +- You must add at least one encryption key to secure your database! +- Za zaÅ¡Äito vaÅ¡e baze morate dodati vsaj en Å¡ifrirni kljuÄ! +- +- +- Unknown error +- Neznana napaka +- +- +- Failed to change database credentials +- Spreminjanje poverilnic baze je spodletelo +- +- +- +- DatabaseSettingsWidgetEncryption +- +- Encryption Algorithm: +- Å ifrirni algoritem: +- +- +- AES: 256 Bit (default) +- AES: 256 Bit (default) +- +- +- Twofish: 256 Bit +- Twofish: 256 Bit +- +- +- Key Derivation Function: +- Funkcija izpeljavo kljuÄa: +- +- +- Transform rounds: +- +- +- +- Memory Usage: +- Poraba pomnilnika: +- +- +- Parallelism: +- +- +- +- Decryption Time: +- ÄŒas deÅ¡ifriranja: +- +- +- ?? s +- ?? s +- +- +- Change +- Spremeni +- +- +- Higher values offer more protection, but opening the database will take longer. +- ViÅ¡je vrednosti nudijo veÄ zaÅ¡Äite, vendar bo odpiranje baze trajalo dlje. +- +- +- Database format: +- Format baze: +- +- +- This is only important if you need to use your database with other programs. +- To je pomembno le, Äe želite uporabljati bazo z drugimi programi. +- +- +- KDBX 4.0 (recommended) +- KDBX 4.0 (priporoÄeno) +- +- +- KDBX 3.1 +- KDBX 3.1 +- +- +- unchanged +- Database decryption time is unchanged +- nespremenjeno +- +- +- Number of rounds too high +- Key transformation rounds +- +- +- +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or days (or even longer) to open! +- +- +- +- Understood, keep number +- +- +- +- Cancel +- PrekliÄi +- +- +- Number of rounds too low +- Key transformation rounds +- +- +- +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database may be too easy to crack! +- +- +- +- KDF unchanged +- KDF nespremenjen +- +- +- Failed to transform key with new KDF parameters; KDF unchanged. +- +- +- +- MiB +- Abbreviation for Mebibytes (KDF settings) +- Mib Mib Mib MiB +- +- +- thread(s) +- Threads for parallel execution (KDF settings) +- nit(e) nit(e) nit(e) nit +- +- +- Change existing decryption time +- Spremeni obstojeÄi Äas deÅ¡ifriranja +- +- +- Decryption time in seconds +- ÄŒas deÅ¡ifriranja v sekundah +- +- +- Database format +- Format baze +- +- +- Encryption algorithm +- Å ifrirni algoritem +- +- +- Key derivation function +- Funkcija izpeljavo kljuÄa +- +- +- Transform rounds +- +- +- +- Memory usage +- Uporaba pomnilnika +- +- +- Parallelism +- +- +- +- ?? ms +- ?? ms +- +- +- ? s +- ? s +- +- +- +- DatabaseSettingsWidgetFdoSecrets +- +- Exposed Entries +- Izpostavljeni vnosi +- +- +- Don't expose this database +- Ne izpostavi te baze +- +- +- Expose entries under this group: +- Izpostavi vnose v tej skupini: +- +- +- Enable Secret Service to access these settings. +- +- +- +- +- DatabaseSettingsWidgetGeneral +- +- Database Meta Data +- Metapodatki baze +- +- +- Database name: +- Ime podatkovne baze: +- +- +- Database description: +- Opis podatkovne baze: +- +- +- Default username: +- Privzeto uporabniÅ¡ko ime: +- +- +- History Settings +- Nastavitve zgodovine +- +- +- Max. history items: +- Max. vnosov zgodovine: +- +- +- Max. history size: +- Max. velikost zgodovine: +- +- +- MiB +- MiB +- +- +- Use recycle bin +- Uporabi koÅ¡ +- +- +- Additional Database Settings +- Dodatne nastavitve baze +- +- +- Database name field +- Polje ime baze +- +- +- Database description field +- Polje opis baze +- +- +- Default username field +- Polje privzeto uporabniÅ¡ko ime +- +- +- Maximum number of history items per entry +- NajveÄje Å¡tevilo zgodovinskih elementov na vnos +- +- +- Maximum size of history per entry +- NajveÄja velikost zgodovine na vnos +- +- +- Delete Recycle Bin +- IzbriÅ¡ite koÅ¡ +- +- +- Do you want to delete the current recycle bin and all its contents? +-This action is not reversible. +- Ali želite izbrisati trenutni koÅ¡ in vso njegovo vsebino? +-To dejanje ni mogoÄe razveljaviti. +- +- +- (old) +- (staro) +- +- +- Enable compression (recommended) +- OmogoÄi stiskanje (priporoÄeno) +- +- +- +- DatabaseSettingsWidgetKeeShare +- +- Sharing +- Skupna raba +- +- +- Breadcrumb +- +- +- +- Type +- Vrsta +- +- +- Path +- Pot +- +- +- Last Signer +- Zadnji podpisnik +- +- +- Certificates +- Certifikati +- +- +- > +- Breadcrumb separator +- > +- +- +- +- DatabaseSettingsWidgetMetaDataSimple +- +- Database Name: +- Ime baze: +- +- +- Description: +- Opis: +- +- +- Database name field +- Polje ime baze +- +- +- Database description field +- Polje opis baze +- +- +- +- DatabaseTabWidget +- +- KeePass 2 Database +- KeePass 2 podatkovna baza +- +- +- All files +- Vse datoteke +- +- +- Open database +- Odpri podatkovno bazo +- +- +- CSV file +- CSV datoteka +- +- +- Merge database +- Združi bazo +- +- +- Open KeePass 1 database +- Odpri KeePass 1 podatkovno bazo +- +- +- KeePass 1 database +- KeePass 1 podatkovna baza +- +- +- Export database to CSV file +- Izvozi podatkovno bazo v CSV datoteko +- +- +- Writing the CSV file failed. +- Pisanje v CSV datoteko ni uspelo +- +- +- Database creation error +- Napaka pri ustvarjanju baze +- +- +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- +- +- +- Select CSV file +- Izberite CSV datoteko +- +- +- New Database +- Nova baza +- +- +- %1 [New Database] +- Database tab name modifier +- %1 [Nova baza] +- +- +- %1 [Locked] +- Database tab name modifier +- %1 [Zaklenjeno] +- +- +- %1 [Read-only] +- Database tab name modifier +- %1 [Pregled] +- +- +- Failed to open %1. It either does not exist or is not accessible. +- +- +- +- Export database to HTML file +- Izvoz baze v datoteko HTML +- +- +- HTML file +- HTML datoteka +- +- +- Writing the HTML file failed. +- Shranjevanje HTML datoteke ni uspelo. +- +- +- Export Confirmation +- Potrditev izvoza +- +- +- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? +- Bazo boste izvozili v neÅ¡ifrirano datoteko. Gesla in obÄutljivi podatki bodo s tem dejanjem postali ranljivi! Ali ste prepriÄani, da želite nadaljevati? +- +- +- Open OPVault +- Odpri OPVault +- +- +- +- DatabaseWidget +- +- Searching... +- Iskanje... +- +- +- Do you really want to delete the entry "%1" for good? +- Ali res želite izbrisati "%1"? +- +- +- Do you really want to move entry "%1" to the recycle bin? +- Ali zares želite premakniti vnos "%1" v koÅ¡? +- +- +- Do you really want to move %n entry(s) to the recycle bin? +- Ali res želite premakniti %n v koÅ¡?Ali res želite premakniti %n v koÅ¡?Ali res želite premakniti %n v koÅ¡?Ali zares želite premakniti %n vnos(ov) v koÅ¡? +- +- +- Execute command? +- Izvedi ukaz? +- +- +- Do you really want to execute the following command?<br><br>%1<br> +- Ali resniÄno želite izvesti naslednji ukaz?<br><br>%1<br> +- +- +- Remember my choice +- Zapomni si mojo izbiro +- +- +- Do you really want to delete the group "%1" for good? +- Ali res želite izbrisati skupino "%1"? +- +- +- No current database. +- Ni trenutne baze. +- +- +- No source database, nothing to do. +- Ni izvorne baze, niÄ ni za postoriti. +- +- +- Search Results (%1) +- Rezultati iskanja (%1) +- +- +- No Results +- Ni rezultatov +- +- +- File has changed +- Datoteka je bila spremenjena +- +- +- The database file has changed. Do you want to load the changes? +- Datoteka baze je bila spremenjena. Ali želite naložiti spremembe? +- +- +- Merge Request +- Zahteva za združitev +- +- +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- Datoteka baze se je spremenila in imate ne shranjene spremembe. +-Ali želite združiti vaÅ¡e spremembe? +- +- +- Empty recycle bin? +- Izprazni koÅ¡? +- +- +- Are you sure you want to permanently delete everything from your recycle bin? +- Ali ste prepriÄani, da želite trajno izbrisati vse iz koÅ¡a? +- +- +- Do you really want to delete %n entry(s) for good? +- Ali res želite izbrisati %n vnosov za vedno?Ali res želite izbrisati %n vnosov za vedno?Ali res želite izbrisati %n vnosov za vedno?Ali zares želite dokonÄno izbrisati %n vnosov? +- +- +- Delete entry(s)? +- Ali želite izbrisati vnose?Ali želite izbrisati vnose?Ali želite izbrisati vnose?IzbriÅ¡i vnos(e)? +- +- +- Move entry(s) to recycle bin? +- Premikanje vnosov v koÅ¡?Premikanje vnosov v koÅ¡?Premikanje vnosov v koÅ¡?Premakni vnos(e) v koÅ¡? +- +- +- Lock Database? +- Želite zakleniti bazo? +- +- +- You are editing an entry. Discard changes and lock anyway? +- Trenutno urejate vnos. Želite vseeno zakleniti bazo in zavreÄi spremembe? +- +- +- "%1" was modified. +-Save changes? +- "%1" spremenjeno. +-Želite shraniti spremembe? +- +- +- Database was modified. +-Save changes? +- Baza je bila spremenjena. +-Želite shraniti spremembe? +- +- +- Save changes? +- Shrani spremembe? +- +- +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- +- +- +- Disable safe saves? +- +- +- +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- +- +- +- Passwords +- Gesla +- +- +- Save database as +- Shrani podatkovno bazo kot +- +- +- KeePass 2 Database +- KeePass 2 podatkovna baza +- +- +- Replace references to entry? +- Želite zamenjati reference za vnos? +- +- +- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? +- +- +- +- Delete group +- IzbriÅ¡i skupino +- +- +- Move group to recycle bin? +- Premakniti skupino v koÅ¡? +- +- +- Do you really want to move the group "%1" to the recycle bin? +- Ali zares želite premakniti skupino "% 1" v koÅ¡? +- +- +- Successfully merged the database files. +- Datoteke baz so bile uspeÅ¡no združene. +- +- +- Database was not modified by merge operation. +- Z operacijo združevanja baza ni bila spremenjena. +- +- +- Shared group... +- Deljena skupina... +- +- +- Writing the database failed: %1 +- Shranjevanje baze ni uspelo: %1 +- +- +- This database is opened in read-only mode. Autosave is disabled. +- Baza je odprta v naÄinu samo za branje. Samodejno shranjevanje je onemogoÄeno. +- +- +- Save database backup +- Shrani varnostno kopijo baze +- +- +- Could not find database file: %1 +- Datoteke baze ni bilo mogoÄe najti: %1 +- +- +- +- EditEntryWidget +- +- Entry +- Vnos +- +- +- Advanced +- Napredno +- +- +- Icon +- Ikona +- +- +- Auto-Type +- Samodejno tipkanje +- +- +- Properties +- Lastnosti +- +- +- History +- Zgodovina +- +- +- SSH Agent +- SSH Agent +- +- +- n/a +- ni na voljo +- +- +- (encrypted) +- (Å¡ifrirano) +- +- +- Select private key +- Izberite zasebni kljuÄ +- +- +- Entry history +- Zgodovina vnosov +- +- +- Add entry +- Dodaj vnos +- +- +- Edit entry +- Uredi vnos +- +- +- New attribute +- Nov atribut +- +- +- Are you sure you want to remove this attribute? +- Ali ste prepriÄani, da želite odstraniti ta atribut? +- +- +- Tomorrow +- Jutri +- +- +- %n week(s) +- %n ted(ov)%n ted(ov)%n ted(ov)%n teden(ov) +- +- +- %n month(s) +- %n mesecev%n mesecev%n mesecev%n mesec(ev) +- +- +- Entry updated successfully. +- Vnos je bil uspeÅ¡no posodobljen. +- +- +- New attribute %1 +- Nov atribut %1 +- +- +- %n year(s) +- %n let%n let%n let%n let +- +- +- Confirm Removal +- Potrdite odstranitev +- +- +- Browser Integration +- Integracija s spletnim brskalnikom +- +- +- <empty URL> +- <empty URL> +- +- +- Are you sure you want to remove this URL? +- Ali ste prepriÄani, da želite odstraniti ta URL? +- +- +- Reveal +- Pokaži +- +- +- Hide +- Skrij +- +- +- Unsaved Changes +- Neshranjene spremembe +- +- +- Would you like to save changes to this entry? +- Ali želite shraniti spremembe tega vnosa? +- +- +- [PROTECTED] Press Reveal to view or edit +- [ZAÅ ÄŒITENO] Pritisni gumb Pokaži za ogled ali urejanje +- +- +- Invalid Entry +- Neveljaven vnos +- +- +- An external merge operation has invalidated this entry. +-Unfortunately, any changes made have been lost. +- Zunanja operacija združevanja je razveljavila ta vnos. +-Na žalost so bile vse spremembe izgubljene. +- +- +- +- EditEntryWidgetAdvanced +- +- Additional attributes +- Dodatni atributi +- +- +- Add +- Dodaj +- +- +- Remove +- Odstrani +- +- +- Edit Name +- Uredi ime +- +- +- Protect +- ZaÅ¡Äititi +- +- +- Reveal +- Pokaži +- +- +- Attachments +- Priponke +- +- +- Foreground Color: +- Barva ospredja: +- +- +- Background Color: +- Barva ozadja: +- +- +- Attribute selection +- Izbira atributa +- +- +- Attribute value +- Vrednost atributa +- +- +- Add a new attribute +- Dodajte nov atribut +- +- +- Remove selected attribute +- Odstrani izbrani atribut +- +- +- Edit attribute name +- Uredi ime atributa +- +- +- Toggle attribute protection +- Preklopi zaÅ¡Äito atributa +- +- +- Show a protected attribute +- Prikaži zaÅ¡Äiten atribut +- +- +- Foreground color selection +- Izbira barve ospredja +- +- +- Background color selection +- Izbira barve ozadja +- +- +- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> +- +- +- +- Exclude from database reports +- Izvzemi iz poroÄil o bazi +- +- +- +- EditEntryWidgetAutoType +- +- Enable Auto-Type for this entry +- OmogoÄi samodejno tipkanje za ta vnos +- +- +- Window Associations +- +- +- +- + +- + +- +- +- - +- - +- +- +- Window title: +- Naslov okna: +- +- +- Use a specific sequence for this association: +- +- +- +- Custom Auto-Type sequence +- +- +- +- Open Auto-Type help webpage +- +- +- +- Existing window associations +- +- +- +- Add new window association +- +- +- +- Remove selected window association +- +- +- +- You can use an asterisk (*) to match everything +- +- +- +- Set the window association title +- +- +- +- You can use an asterisk to match everything +- +- +- +- Custom Auto-Type sequence for this window +- +- +- +- Inherit default Auto-Type sequence from the group +- Dedovanje privzete sekvence za samodejno tipkanje iz skupine +- +- +- Use custom Auto-Type sequence: +- Uporabi poljubno sekvenco za samodejno tipkanje: +- +- +- +- EditEntryWidgetBrowser +- +- These settings affect to the entry's behaviour with the browser extension. +- +- +- +- General +- SploÅ¡no +- +- +- Skip Auto-Submit for this entry +- +- +- +- Hide this entry from the browser extension +- +- +- +- Additional URL's +- Dodatni URL-ji +- +- +- Add +- Dodaj +- +- +- Remove +- Odstrani +- +- +- Edit +- Uredi +- +- +- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. +- +- +- +- Use this entry only with HTTP Basic Auth +- +- +- +- +- EditEntryWidgetHistory +- +- Show +- Prikaži +- +- +- Restore +- Obnovi +- +- +- Delete +- IzbriÅ¡i +- +- +- Delete all +- IzbriÅ¡i vse +- +- +- Entry history selection +- Izbor zgodovine vnosa +- +- +- Show entry at selected history state +- +- +- +- Restore entry to selected history state +- +- +- +- Delete selected history state +- +- +- +- Delete all history +- +- +- +- +- EditEntryWidgetMain +- +- URL: +- URL: +- +- +- Password: +- Geslo: +- +- +- Title: +- Naslov: +- +- +- Presets +- Prednastavljeno +- +- +- Toggle the checkbox to reveal the notes section. +- +- +- +- Username: +- UporabniÅ¡ko ime: +- +- +- Url field +- Polje Url +- +- +- Download favicon for URL +- Prenesite favicon ikono za URL +- +- +- Password field +- Polje za geslo +- +- +- Toggle notes visible +- Preklopi vidnost opomb +- +- +- Expiration field +- Polje za potek +- +- +- Expiration Presets +- Prednastavitve za potek +- +- +- Expiration presets +- Prednastavitve za potek +- +- +- Notes field +- Polje za opombe +- +- +- Title field +- Naslovno polje +- +- +- Username field +- Polje za uporabniÅ¡ko ime +- +- +- Toggle expiration +- +- +- +- Notes: +- Opombe: +- +- +- https://example.com +- https://example.com +- +- +- Expires: +- PoteÄe: +- +- +- Edit Entry +- Uredi vnos +- +- +- +- EditEntryWidgetSSHAgent +- +- Form +- Obrazec +- +- +- Remove key from agent after +- Odstrani kljuÄ iz agenta po +- +- +- seconds +- sekundah +- +- +- Fingerprint +- Prstni odtis +- +- +- Remove key from agent when database is closed/locked +- Odstrani kljuÄ iz agenta ko je baza zaprta/zaklenjena +- +- +- Public key +- Javni kljuÄ +- +- +- Add key to agent when database is opened/unlocked +- Dodaj kljuÄ v agenta, ko je baza odprta/odklenjena +- +- +- Comment +- Komentar +- +- +- Decrypt +- DeÅ¡ifriraj +- +- +- n/a +- ni na voljo +- +- +- Copy to clipboard +- Kopiraj v odložiÅ¡Äe +- +- +- Private key +- Zasebni kljuÄ +- +- +- External file +- Zunanja datoteka +- +- +- Browse... +- Button for opening file dialog +- Prebrskaj... +- +- +- Attachment +- Priloga +- +- +- Add to agent +- Dodaj v agenta +- +- +- Remove from agent +- Odstrani iz agenta +- +- +- Require user confirmation when this key is used +- Zahtevaj potrditev od uporabnika, ko se uporabi ta kljuÄ +- +- +- Remove key from agent after specified seconds +- Po doloÄenih sekundah odstrani kljuÄ iz agenta +- +- +- Browser for key file +- Prebrskaj za datoteko kljuÄa +- +- +- External key file +- Zunanja datoteka kljuÄa +- +- +- Select attachment file +- Izberite datoteko za prilogami +- +- +- +- EditGroupWidget +- +- Group +- Skupina +- +- +- Icon +- Ikona +- +- +- Properties +- Lastnosti +- +- +- Add group +- Dodaj skupino +- +- +- Edit group +- Uredi skupino +- +- +- Enable +- OmogoÄi +- +- +- Disable +- OnemogoÄi +- +- +- Inherit from parent group (%1) +- Podeduj iz nadrejene skupine (%1) +- +- +- Entry has unsaved changes +- Vnos ima ne shranjene spremembe +- +- +- +- EditGroupWidgetKeeShare +- +- Type: +- Vrsta: +- +- +- Path: +- Pot: +- +- +- Password: +- Geslo: +- +- +- Inactive +- Neaktivno +- +- +- KeeShare unsigned container +- KeeShare podpisan kontejner +- +- +- KeeShare signed container +- KeeShare podpisani kontejner +- +- +- Select import source +- Izberite uvozni vir +- +- +- Select export target +- Izberite cilj izvoza +- +- +- Select import/export file +- Izberite uvozno/izvozno datoteko +- +- +- Clear +- PoÄisti +- +- +- Import +- Uvozi +- +- +- Export +- Izvozi +- +- +- Synchronize +- Sinhroniziraj +- +- +- Your KeePassXC version does not support sharing this container type. +-Supported extensions are: %1. +- +- +- +- %1 is already being exported by this database. +- +- +- +- %1 is already being imported by this database. +- +- +- +- %1 is being imported and exported by different groups in this database. +- +- +- +- KeeShare is currently disabled. You can enable import/export in the application settings. +- KeeShare is a proper noun +- +- +- +- Database export is currently disabled by application settings. +- +- +- +- Database import is currently disabled by application settings. +- +- +- +- Sharing mode field +- Polje naÄina skupne rabe +- +- +- Path to share file field +- Polje za pot do skupne rabe datoteke +- +- +- Password field +- Polje za geslo +- +- +- Clear fields +- PoÄisti polja +- +- +- Browse for share file +- Prebrskaj datoteko za skupno rabo +- +- +- Browse... +- Prebrskaj... +- +- +- +- EditGroupWidgetMain +- +- Name field +- Polje za ime +- +- +- Notes field +- Polje za opombe +- +- +- Toggle expiration +- +- +- +- Auto-Type toggle for this and sub groups +- +- +- +- Expiration field +- Polje za potek +- +- +- Search toggle for this and sub groups +- +- +- +- Default auto-type sequence field +- +- +- +- Expires: +- PoteÄe: +- +- +- Use default Auto-Type sequence of parent group +- +- +- +- Auto-Type: +- +- +- +- Search: +- Iskanje: +- +- +- Notes: +- Opombe: +- +- +- Name: +- Ime: +- +- +- Set default Auto-Type sequence +- +- +- +- Edit Group +- Uredi skupino +- +- +- +- EditWidgetIcons +- +- Add custom icon +- Dodaj poljubno ikono +- +- +- Delete custom icon +- IzbriÅ¡i ikono +- +- +- Download favicon +- Prenesi favicon ikono +- +- +- Unable to fetch favicon. +- Favicona ikono ni mogoÄe pridobiti. +- +- +- Images +- Slike +- +- +- All files +- Vse datoteke +- +- +- Confirm Delete +- Potrdi izbris +- +- +- Select Image(s) +- Izberi slike +- +- +- Successfully loaded %1 of %n icon(s) +- UspeÅ¡no naloženih %1 ikon %nUspeÅ¡no naloženih %1 ikon %nUspeÅ¡no naloženih %1 ikon %nUspeÅ¡no naložene ikone %1 od %n +- +- +- No icons were loaded +- Nobena ikona ni bila naložena +- +- +- %n icon(s) already exist in the database +- %n ikone že obstajajo v zbirki podatkov%n ikone že obstajajo v zbirki podatkov%n ikone že obstajajo v zbirki podatkovV bazi že obstaja %n ikon +- +- +- The following icon(s) failed: +- Te ikone niso uspele:Te ikone niso uspele:Te ikone niso uspele:Te ikone niso uspele: +- +- +- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? +- +- +- +- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security +- +- +- +- Download favicon for URL +- Prenesite favicon ikono za URL +- +- +- Apply selected icon to subgroups and entries +- +- +- +- Also apply to child groups +- +- +- +- Also apply to child entries +- +- +- +- Also apply to all children +- +- +- +- Existing icon selected. +- Izbrana obstojeÄa ikona. +- +- +- Use default icon +- Uporabi privzeto ikono +- +- +- Use custom icon +- Uporabi ikono po meri +- +- +- Apply icon to... +- Uporabi ikono za... +- +- +- Apply to this group only +- Uporabi samo za to skupino +- +- +- +- EditWidgetProperties +- +- Created: +- Ustvarjeno: +- +- +- Modified: +- Spremenjeno: +- +- +- Accessed: +- Zadnji dostop: +- +- +- Uuid: +- Uuid: +- +- +- Plugin Data +- Podatki vtiÄnika +- +- +- Remove +- Odstrani +- +- +- Delete plugin data? +- Izbris podatkov od vtiÄnika? +- +- +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- Ali zares želite izbrisati izbrane podatke vtiÄnika? +-To lahko povzroÄi nepravilno delovanje izbranih vtiÄnikov. +- +- +- Key +- KljuÄ +- +- +- Value +- Vrednost +- +- +- Datetime created +- Datum ustvarjenja +- +- +- Datetime modified +- Datum spreminjanja +- +- +- Datetime accessed +- Datum dostopanja +- +- +- Unique ID +- Edinstven ID +- +- +- Plugin data +- Podatki vtiÄnika +- +- +- Remove selected plugin data +- Odstranite izbrane podatke vtiÄnika +- +- +- +- Entry +- +- %1 - Clone +- %1 - Klon +- +- +- +- EntryAttachmentsModel +- +- Name +- Ime +- +- +- Size +- Velikost +- +- +- +- EntryAttachmentsWidget +- +- Form +- Obrazec +- +- +- Add +- Dodaj +- +- +- Remove +- Odstrani +- +- +- Open +- Odpri +- +- +- Save +- Shrani +- +- +- Select files +- Izberi datoteke +- +- +- Are you sure you want to remove %n attachment(s)? +- Ali ste prepriÄani, da želite odstraniti %n prilog?Ali ste prepriÄani, da želite odstraniti %n prilog?Ali ste prepriÄani, da želite odstraniti %n prilog?Ali ste prepriÄani, da želite odstraniti %n prilog? +- +- +- Save attachments +- Shrani priloge +- +- +- Unable to create directory: +-%1 +- Mape ni mogoÄe ustvariti: +-% 1 +- +- +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- Ali ste prepriÄani, da želite zamenjati obstojeÄo datoteko "%1" s prilogo? +- +- +- Confirm overwrite +- Potrdi zamenjavo +- +- +- Unable to save attachments: +-%1 +- +- +- +- Unable to open attachment: +-%1 +- +- +- +- Unable to open attachments: +-%1 +- +- +- +- Confirm remove +- Potrdi odstranitev +- +- +- Unable to open file(s): +-%1 +- +- +- +- Attachments +- Priponke +- +- +- Add new attachment +- Dodaj novo prilogo +- +- +- Remove selected attachment +- +- +- +- Open selected attachment +- +- +- +- Save selected attachment to disk +- +- +- +- %1 is a big file (%2 MB). +-Your database may get very large and reduce performance. +- +-Are you sure to add this file? +- +- +- +- Confirm Attachment +- +- +- +- +- EntryAttributesModel +- +- Name +- Ime +- +- +- +- EntryHistoryModel +- +- Last modified +- Zadnja sprememba +- +- +- Title +- Naslov +- +- +- Username +- UporabniÅ¡ko ime +- +- +- URL +- URL +- +- +- +- EntryModel +- +- Ref: +- Reference abbreviation +- Ref: +- +- +- Group +- Skupina +- +- +- Title +- Naslov +- +- +- Username +- UporabniÅ¡ko ime +- +- +- URL +- URL +- +- +- Never +- Nikoli +- +- +- Password +- Geslo +- +- +- Notes +- Opombe +- +- +- Expires +- PoteÄe +- +- +- Created +- Ustvarjeno +- +- +- Modified +- Spremenjeno +- +- +- Accessed +- Dostopano +- +- +- Attachments +- Priponke +- +- +- Size +- Velikost +- +- +- Group name +- Ime skupine +- +- +- Entry title +- Naslov vnosa +- +- +- Entry notes +- Opombe vnosa +- +- +- Entry expires at +- Vnos poteÄe +- +- +- Creation date +- Datum ustvarjanja +- +- +- Last modification date +- Datum zadnje spremembe +- +- +- Last access date +- Datum zadnjega dostopa +- +- +- Attached files +- Priložene datoteke +- +- +- Entry size +- Velikost vnosa +- +- +- Has attachments +- Ima priloge +- +- +- Has TOTP one-time password +- Ima TOTP enkratno geslo +- +- +- +- EntryPreviewWidget +- +- Close +- Zapri +- +- +- General +- SploÅ¡no +- +- +- Username +- UporabniÅ¡ko ime +- +- +- Password +- Geslo +- +- +- Expiration +- PoteÄe +- +- +- URL +- URL +- +- +- Attributes +- Atributi +- +- +- Attachments +- Priponke +- +- +- Notes +- Opombe +- +- +- Autotype +- +- +- +- Window +- Okno +- +- +- Sequence +- Zaporedje +- +- +- Searching +- Iskanje +- +- +- Search +- IÅ¡Äi +- +- +- Clear +- PoÄisti +- +- +- Never +- Nikoli +- +- +- [PROTECTED] +- [ZAÅ ÄŒITENO] +- +- +- Enabled +- OmogoÄeno +- +- +- Disabled +- OnemogoÄen +- +- +- Share +- Deli +- +- +- Display current TOTP value +- Prikaži trenutno vrednost TOTP +- +- +- Advanced +- Napredno +- +- +- Default Sequence +- Privzeto zaporedje +- +- +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- attributes line +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- +- +- +- EntryURLModel +- +- Invalid URL +- Neveljaven URL +- +- +- +- EntryView +- +- Fit to window +- Prilagodi oknu +- +- +- Fit to contents +- Prilagodi vsebini +- +- +- Reset to defaults +- Ponastavi na privzeto +- +- +- Has attachments +- Entry attachment icon toggle +- Ima priloge +- +- +- Has TOTP +- Entry TOTP icon toggle +- +- +- +- +- FdoSecrets::Item +- +- Entry "%1" from database "%2" was used by %3 +- Vnos "%1" iz baze "%2" je uporabil %3 +- +- +- +- FdoSecrets::Service +- +- Failed to register DBus service at %1.<br/> +- Registracija storitve DBus v %1 ni uspela.<br/> +- +- +- %n Entry(s) was used by %1 +- %1 is the name of an application +- %n vnosov je uporabil %1%n vnosov je uporabil %1%n vnosov je uporabil %1%n vnosov je uporabil %1 +- +- +- +- FdoSecrets::SettingsDatabaseModel +- +- File Name +- Ime datoteke +- +- +- Group +- Skupina +- +- +- Manage +- Uredi +- +- +- Unlock to show +- Odkleni za prikaz +- +- +- None +- Nobeden +- +- +- +- FdoSecrets::SettingsSessionModel +- +- Application +- Aplikacija +- +- +- Manage +- Uredi +- +- +- +- FdoSecretsPlugin +- +- <b>Fdo Secret Service:</b> %1 +- <b>Fdo Secret Service:</b> %1 +- +- +- Unknown +- Unknown PID +- Neznano +- +- +- Unknown +- Unknown executable path +- Neznano +- +- +- <i>PID: %1, Executable: %2</i> +- <i>PID: 1234, Executable: /path/to/exe</i> +- <i>PID: %1, Program: %2</i> +- +- +- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. +- +- +- +- +- Group +- +- [empty] +- group has no children +- [prazno] +- +- +- +- HibpDownloader +- +- Online password validation failed +- Spletna validacija gesla ni uspela +- +- +- +- IconDownloaderDialog +- +- Download Favicons +- Prenos Favicon ikon +- +- +- Cancel +- PrekliÄi +- +- +- Having trouble downloading icons? +-You can enable the DuckDuckGo website icon service in the security section of the application settings. +- Imate težave pri prenosu ikon? +-V varnostnem razdelku nastavitev aplikacije lahko omogoÄite DuckDuckGo storitev za pridobivanje ikon spletnih strani. +- +- +- Close +- Zapri +- +- +- URL +- URL +- +- +- Status +- Status +- +- +- Please wait, processing entry list... +- Prosimo poÄakajte, obdelava seznama vnosov... +- +- +- Downloading... +- PrenaÅ¡anje... +- +- +- Ok +- V redu +- +- +- Already Exists +- Že obstaja +- +- +- Download Failed +- Prenos ni uspel +- +- +- Downloading favicons (%1/%2)... +- Prenos faviconov ikon (%1/%2)... +- +- +- +- KMessageWidget +- +- &Close +- &Zapri +- +- +- Close message +- Zapri sporoÄilo +- +- +- +- Kdbx3Reader +- +- missing database headers +- missing database headers +- +- +- Header doesn't match hash +- Header doesn't match hash +- +- +- Invalid header id size +- Invalid header id size +- +- +- Invalid header field length +- Invalid header field length +- +- +- Invalid header data length +- Invalid header data length +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Vnesene so bile neveljavne poverilnice, prosim poskusite znova. +-ÄŒe se to ponovi, je morda poÅ¡kodovana datoteka baze. +- +- +- Unable to calculate database key +- Unable to calculate database key +- +- +- Unable to issue challenge-response: %1 +- Unable to issue challenge-response: %1 +- +- +- +- Kdbx3Writer +- +- Unable to issue challenge-response: %1 +- Unable to issue challenge-response: %1 +- +- +- Unable to calculate database key +- Unable to calculate database key +- +- +- +- Kdbx4Reader +- +- missing database headers +- missing database headers +- +- +- Invalid header checksum size +- Invalid header checksum size +- +- +- Header SHA256 mismatch +- Header SHA256 mismatch +- +- +- Unknown cipher +- Unknown cipher +- +- +- Invalid header id size +- Invalid header id size +- +- +- Invalid header field length +- Invalid header field length +- +- +- Invalid header data length +- Invalid header data length +- +- +- Failed to open buffer for KDF parameters in header +- Failed to open buffer for KDF parameters in header +- +- +- Unsupported key derivation function (KDF) or invalid parameters +- Unsupported key derivation function (KDF) or invalid parameters +- +- +- Legacy header fields found in KDBX4 file. +- ZapuÅ¡Äina polj glave, ki so najdena v datoteki KDBX4. +- +- +- Invalid inner header id size +- Invalid inner header id size +- +- +- Invalid inner header field length +- Invalid inner header field length +- +- +- Invalid inner header binary size +- Invalid inner header binary size +- +- +- Unsupported KeePass variant map version. +- Translation: variant map = data structure for storing meta data +- Unsupported KeePass variant map version. +- +- +- Invalid variant map entry name length +- Translation: variant map = data structure for storing meta data +- Invalid variant map entry name length +- +- +- Invalid variant map entry name data +- Translation: variant map = data structure for storing meta data +- Invalid variant map entry name data +- +- +- Invalid variant map entry value length +- Translation: variant map = data structure for storing meta data +- Invalid variant map entry value length +- +- +- Invalid variant map entry value data +- Translation comment: variant map = data structure for storing meta data +- Invalid variant map entry value data +- +- +- Invalid variant map Bool entry value length +- Translation: variant map = data structure for storing meta data +- Invalid variant map Bool entry value length +- +- +- Invalid variant map Int32 entry value length +- Translation: variant map = data structure for storing meta data +- Invalid variant map Int32 entry value length +- +- +- Invalid variant map UInt32 entry value length +- Translation: variant map = data structure for storing meta data +- Invalid variant map UInt32 entry value length +- +- +- Invalid variant map Int64 entry value length +- Translation: variant map = data structure for storing meta data +- Invalid variant map Int64 entry value length +- +- +- Invalid variant map UInt64 entry value length +- Translation: variant map = data structure for storing meta data +- Invalid variant map UInt64 entry value length +- +- +- Invalid variant map entry type +- Translation: variant map = data structure for storing meta data +- Invalid variant map entry type +- +- +- Invalid variant map field type size +- Translation: variant map = data structure for storing meta data +- Invalid variant map field type size +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Vnesene so bile neveljavne poverilnice, prosim poskusite znova. +-ÄŒe se to ponovi, je morda poÅ¡kodovana datoteka baze. +- +- +- (HMAC mismatch) +- (HMAC mismatch) +- +- +- Unable to calculate database key: %1 +- Unable to calculate database key: %1 +- +- +- +- Kdbx4Writer +- +- Invalid symmetric cipher algorithm. +- Invalid symmetric cipher algorithm. +- +- +- Invalid symmetric cipher IV size. +- IV = Initialization Vector for symmetric cipher +- Invalid symmetric cipher IV size. +- +- +- Failed to serialize KDF parameters variant map +- Translation comment: variant map = data structure for storing meta data +- Failed to serialize KDF parameters variant map +- +- +- Unable to calculate database key: %1 +- Unable to calculate database key: %1 +- +- +- +- KdbxReader +- +- Unsupported cipher +- Unsupported cipher +- +- +- Invalid compression flags length +- Invalid compression flags length +- +- +- Unsupported compression algorithm +- Unsupported compression algorithm +- +- +- Invalid master seed size +- Invalid master seed size +- +- +- Invalid transform seed size +- Invalid transform seed size +- +- +- Invalid transform rounds size +- Invalid transform rounds size +- +- +- Invalid start bytes size +- Invalid start bytes size +- +- +- Invalid random stream id size +- Invalid random stream id size +- +- +- Invalid inner random stream cipher +- Invalid inner random stream cipher +- +- +- Not a KeePass database. +- Datoteka ni KeePass podatkovna baza. +- +- +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- +- +- +- Unsupported KeePass 2 database version. +- Nepodprta razliÄica KeePass 2 baze. +- +- +- Invalid cipher uuid length: %1 (length=%2) +- Invalid cipher uuid length: %1 (length=%2) +- +- +- Unable to parse UUID: %1 +- Unable to parse UUID: %1 +- +- +- Failed to read database file. +- Branje baze ni uspelo. +- +- +- +- KdbxXmlReader +- +- XML parsing failure: %1 +- XML parsing failure: %1 +- +- +- No root group +- No root group +- +- +- Missing icon uuid or data +- Missing icon uuid or data +- +- +- Missing custom data key or value +- Missing custom data key or value +- +- +- Multiple group elements +- Multiple group elements +- +- +- Null group uuid +- Null group uuid +- +- +- Invalid group icon number +- Invalid group icon number +- +- +- Invalid EnableAutoType value +- Neveljavna vrednost EnableAutoType +- +- +- Invalid EnableSearching value +- Invalid EnableSearching value +- +- +- No group uuid found +- No group uuid found +- +- +- Null DeleteObject uuid +- Null DeleteObject uuid +- +- +- Missing DeletedObject uuid or time +- Missing DeletedObject uuid or time +- +- +- Null entry uuid +- Null entry uuid +- +- +- Invalid entry icon number +- Neveljavna Å¡tevilka ikone vnosa +- +- +- History element in history entry +- +- +- +- No entry uuid found +- uuid vnosa ni bil najden +- +- +- History element with different uuid +- +- +- +- Duplicate custom attribute found +- +- +- +- Entry string key or value missing +- +- +- +- Entry binary key or value missing +- +- +- +- Auto-type association window or sequence missing +- +- +- +- Invalid bool value +- Invalid bool value +- +- +- Invalid date time value +- Invalid date time value +- +- +- Invalid color value +- Invalid color value +- +- +- Invalid color rgb part +- Invalid color rgb part +- +- +- Invalid number value +- Invalid number value +- +- +- Invalid uuid value +- Invalid uuid value +- +- +- Unable to decompress binary +- Translator meant is a binary data inside an entry +- Unable to decompress binary +- +- +- XML error: +-%1 +-Line %2, column %3 +- XML error: +-%1 +-Line %2, column %3 +- +- +- +- KeeAgentSettings +- +- Invalid KeeAgent settings file structure. +- Invalid KeeAgent settings file structure. +- +- +- Private key is an attachment but no attachments provided. +- Zasebni kljuÄ je priloga, vendar nobena priloga ni priloženih. +- +- +- Private key is empty +- Zasebni kljuÄ je prazen +- +- +- File too large to be a private key +- Datoteka je prevelika, da bi bila zasebna kljuÄ +- +- +- Failed to open private key +- Odpiranje zasebnega kljuÄa ni uspelo +- +- +- +- KeePass1OpenWidget +- +- Unable to open the database. +- Odpiranje podatkovne baze ni uspelo. +- +- +- Import KeePass1 Database +- Uvoz KeePass1 baze +- +- +- +- KeePass1Reader +- +- Unable to read keyfile. +- Branje datoteke s kljuÄi ni uspelo. +- +- +- Not a KeePass database. +- Datoteka ni KeePass podatkovna baza. +- +- +- Unsupported encryption algorithm. +- Algoritem za enkripcijo ni podprt. +- +- +- Unsupported KeePass database version. +- RazliÄica KeePass podatkovne baze ni podprta. +- +- +- Unable to read encryption IV +- IV = Initialization Vector for symmetric cipher +- Å¡ifrirni IV ni mogoÄe prebrati +- +- +- Invalid number of groups +- Neveljavno Å¡tevilo skupin +- +- +- Invalid number of entries +- Neveljavno Å¡tevilo vnosov +- +- +- Invalid content hash size +- Invalid content hash size +- +- +- Invalid transform seed size +- Invalid transform seed size +- +- +- Invalid number of transform rounds +- Invalid number of transform rounds +- +- +- Unable to construct group tree +- Unable to construct group tree +- +- +- Root +- Koren +- +- +- Key transformation failed +- Key transformation failed +- +- +- Invalid group field type number +- Invalid group field type number +- +- +- Invalid group field size +- Invalid group field size +- +- +- Read group field data doesn't match size +- Read group field data doesn't match size +- +- +- Incorrect group id field size +- Incorrect group id field size +- +- +- Incorrect group creation time field size +- Incorrect group creation time field size +- +- +- Incorrect group modification time field size +- Incorrect group modification time field size +- +- +- Incorrect group access time field size +- Incorrect group access time field size +- +- +- Incorrect group expiry time field size +- Incorrect group expiry time field size +- +- +- Incorrect group icon field size +- Incorrect group icon field size +- +- +- Incorrect group level field size +- Incorrect group level field size +- +- +- Invalid group field type +- Invalid group field type +- +- +- Missing group id or level +- Missing group id or level +- +- +- Missing entry field type number +- Missing entry field type number +- +- +- Invalid entry field size +- Invalid entry field size +- +- +- Read entry field data doesn't match size +- Read entry field data doesn't match size +- +- +- Invalid entry uuid field size +- Invalid entry uuid field size +- +- +- Invalid entry group id field size +- Invalid entry group id field size +- +- +- Invalid entry icon field size +- Invalid entry icon field size +- +- +- Invalid entry creation time field size +- Invalid entry creation time field size +- +- +- Invalid entry modification time field size +- Invalid entry modification time field size +- +- +- Invalid entry expiry time field size +- Invalid entry expiry time field size +- +- +- Invalid entry field type +- Invalid entry field type +- +- +- unable to seek to content position +- unable to seek to content position +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Vnesene so bile neveljavne poverilnice, prosim poskusite znova. +-ÄŒe se to ponovi, je morda poÅ¡kodovana datoteka baze. +- +- +- Unable to calculate database key +- Unable to calculate database key +- +- +- +- KeeShare +- +- Invalid sharing reference +- Neveljavna referenca za skupno rabo +- +- +- Inactive share %1 +- Neaktivna skupna raba %1 +- +- +- Imported from %1 +- Uvoženo iz %1 +- +- +- Exported to %1 +- Izvoženo v %1 +- +- +- Synchronized with %1 +- Sinhronizirano s %1 +- +- +- Import is disabled in settings +- Uvoz je onemogoÄen v nastavitvah +- +- +- Export is disabled in settings +- Izvoz je onemogoÄen v nastavitvah +- +- +- Inactive share +- Neaktivna skupna raba +- +- +- Imported from +- Uvoženo iz +- +- +- Exported to +- Izvoženo v +- +- +- Synchronized with +- Sinhronizirano s +- +- +- +- KeyComponentWidget +- +- Key Component +- Komponenta kljuÄa +- +- +- Key Component Description +- Opis komponente kljuÄa +- +- +- Cancel +- PrekliÄi +- +- +- Key Component set, click to change or remove +- Komponenta kljuÄa je postavljena, kliknite za spremembo ali odstranitev +- +- +- Add %1 +- Add a key component +- Dodaj %1 +- +- +- Change %1 +- Change a key component +- Spremeni %1 +- +- +- Remove %1 +- Remove a key component +- Odstrani %1 +- +- +- %1 set, click to change or remove +- Change or remove a key component +- %1 je nastavljen, kliknite, Äe želite spremeniti ali odstraniti +- +- +- +- KeyFileEditWidget +- +- Generate +- Ustvari +- +- +- Key File +- Datoteka s kljuÄi +- +- +- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> +- +- +- +- Error loading the key file '%1' +-Message: %2 +- +- +- +- Key files +- Datoteke s kljuÄi +- +- +- All files +- Vse datoteke +- +- +- Create Key File... +- Ustvari datoteko s kljuÄi... +- +- +- Error creating key file +- Napaka pri ustvarjanju datoteke kljuÄev +- +- +- Unable to create key file: %1 +- Ni mogoÄe ustvariti datoteke s kljuÄi: %1 +- +- +- Select a key file +- Izberi datoteko s kljući +- +- +- Key file selection +- Izbira datoteke s kljuÄi +- +- +- Browse for key file +- Prebrskaj za datoteko s kljuÄi +- +- +- Browse... +- Prebrskaj... +- +- +- Generate a new key file +- Ustvari novo datoteko kljuÄa +- +- +- Note: Do not use a file that may change as that will prevent you from unlocking your database! +- Opomba: Ne uporabljajte datoteke, ki se lahko spremeni, saj vam bo to prepreÄilo odklepanje baze! +- +- +- Invalid Key File +- Neveljavna datoteka kljuÄa +- +- +- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. +- Trenutne baze ne morete uporabiti kot datoteko kljuÄa. Prosimo izberite drugo datoteko ali ustvarite novo datoteko kljuÄa. +- +- +- Suspicious Key File +- Sumljiva datoteka kljuÄa +- +- +- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. +-Are you sure you want to continue with this file? +- +- +- +- Old key file format +- +- +- +- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. +- +- +- +- +- MainWindow +- +- &Database +- &Baza +- +- +- &Help +- &PomoÄ +- +- +- &Groups +- &Skupine +- +- +- &Tools +- &Orodja +- +- +- &Quit +- &Izhod +- +- +- &About +- &O programu +- +- +- Database settings +- Nastavitve podatkovne baze +- +- +- Copy username to clipboard +- Kopiraj uporabniÅ¡ko ime v odložiÅ¡Äe +- +- +- Copy password to clipboard +- Kopiraj geslo v odložiÅ¡Äe +- +- +- &Settings +- &Nastavitve +- +- +- &Title +- &Naslov +- +- +- Copy title to clipboard +- Kopiraj naslov v odložiÅ¡Äe +- +- +- &URL +- &URL +- +- +- Copy URL to clipboard +- Kopiraj URL v odložiÅ¡Äe +- +- +- &Notes +- &Opombe +- +- +- Copy notes to clipboard +- Kopiraj opombe v odložiÅ¡Äe +- +- +- Copy &TOTP +- Kopiraj &TOTP +- +- +- E&mpty recycle bin +- &Izprazni koÅ¡ +- +- +- Clear history +- PoÄisti zgodovino +- +- +- Access error for config file %1 +- Napaka pri dostopu do konfiguracijske datoteke %1 +- +- +- Settings +- Nastavitve +- +- +- Toggle window +- Preklopi okno +- +- +- Quit KeePassXC +- Izhod iz KeePassXC +- +- +- Please touch the button on your YubiKey! +- Prosim, dotaknite se gumba na vaÅ¡i YubiKey napravi! +- +- +- WARNING: You are using an unstable build of KeePassXC! +-There is a high risk of corruption, maintain a backup of your databases. +-This version is not meant for production use. +- +- +- +- &Donate +- +- +- +- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +-We recommend you use the AppImage available on our downloads page. +- +- +- +- &Import +- &Uvoz +- +- +- Create a new database +- Ustvarjanje nove bazo +- +- +- Merge from another KDBX database +- +- +- +- Add a new entry +- Dodaj nov vnos +- +- +- View or edit entry +- Ogled ali uredi vnos +- +- +- Add a new group +- Dodaj novo skupino +- +- +- Perform &Auto-Type +- +- +- +- Open &URL +- Odpri &URL +- +- +- Import a KeePass 1 database +- Uvoz KeePass 1 baze +- +- +- Import a CSV file +- Uvoz CSV datoteke +- +- +- NOTE: You are using a pre-release version of KeePassXC! +-Expect some bugs and minor issues, this version is not meant for production use. +- +- +- +- Check for updates on startup? +- Ali ob zagonu želite preveriti, Äe so na voljo posodobitve? +- +- +- Would you like KeePassXC to check for updates on startup? +- Ali želite, da KeePassXC preveri ob zagonu, Äe so na voljo posodobitve? +- +- +- You can always check for updates manually from the application menu. +- Posodobitve lahko vedno preverite roÄno v meniju programa. +- +- +- &Export +- &Izvoz +- +- +- Sort &A-Z +- Razvrsti &A-Z +- +- +- Sort &Z-A +- Razvrsti &Z-A +- +- +- &Password Generator +- &Generator gesel +- +- +- Import a 1Password Vault +- Uvoz 1Password Vault +- +- +- &Getting Started +- &Kako zaÄeti +- +- +- &User Guide +- &UporabniÅ¡ki priroÄnik +- +- +- &Keyboard Shortcuts +- &Bližnjice na tipkovnici +- +- +- &Recent Databases +- &Nedavno odprte baze +- +- +- &Entries +- &Vnosi +- +- +- Copy Att&ribute +- Kopiraj a&tribut +- +- +- TOTP +- TOTP +- +- +- View +- Pogled +- +- +- Theme +- Tema +- +- +- &Check for Updates +- &Preveri za posodobitve +- +- +- &Open Database… +- &Odpri bazo... +- +- +- &Save Database +- &Shrani bazo +- +- +- &Close Database +- &Zapri bazo +- +- +- &New Database… +- &Nova baza... +- +- +- &Merge From Database… +- &Združi z bazo... +- +- +- &New Entry… +- &Novi vnos... +- +- +- &Edit Entry… +- &Uredi vnos... +- +- +- &Delete Entry… +- &IzbriÅ¡i vnos... +- +- +- &New Group… +- &Nova skupina... +- +- +- &Edit Group… +- &Uredi skupino... +- +- +- &Delete Group… +- &IzbriÅ¡i skupino ... +- +- +- Download All &Favicons… +- Prenesi vse &favicon ikone... +- +- +- Sa&ve Database As… +- S&hrani bazo kot... +- +- +- Database &Security… +- &Varnost baze... +- +- +- Database &Reports... +- &PoroÄila baze... +- +- +- Statistics, health check, etc. +- +- +- +- &Database Settings… +- &Nastavitve baze... +- +- +- &Clone Entry… +- &Kloniraj vnos... +- +- +- Move u&p +- Premakni v&iÅ¡je +- +- +- Move entry one step up +- +- +- +- Move do&wn +- +- +- +- Move entry one step down +- +- +- +- Copy &Username +- Kopiraj &uporabniÅ¡ko ime +- +- +- Copy &Password +- Kopiraj &geslo +- +- +- Download &Favicon +- &Prenos favicon ikono +- +- +- &Lock Databases +- &Zakleni baze +- +- +- &CSV File… +- &CSV datoteka... +- +- +- &HTML File… +- &HTML datoteka... +- +- +- KeePass 1 Database… +- KeePass 1 baza... +- +- +- 1Password Vault… +- 1Password Vault… +- +- +- CSV File… +- Datoteka CSV... +- +- +- Show TOTP +- Pokaži TOTP +- +- +- Show QR Code +- Pokaži QR kodo +- +- +- Set up TOTP… +- Nastavitev TOTP... +- +- +- Report a &Bug +- PoroÄaj o &napaki +- +- +- Open Getting Started Guide +- Odpri vodnik za zaÄetek +- +- +- &Online Help +- &Spletna pomoÄ +- +- +- Go to online documentation +- Pojdi na spletno dokumentacijo +- +- +- Open User Guide +- Odpri navodila +- +- +- Save Database Backup... +- +- +- +- Add key to SSH Agent +- Dodaj kljuÄ v SSH agenta +- +- +- Remove key from SSH Agent +- Odstrani kljuÄ iz SSH agenta +- +- +- Compact Mode +- +- +- +- Automatic +- Samodejno +- +- +- Light +- Svetla +- +- +- Dark +- Temna +- +- +- Classic (Platform-native) +- +- +- +- Show Toolbar +- Pokaži orodno vrstico +- +- +- Show Preview Panel +- +- +- +- Don't show again for this version +- +- +- +- Restart Application? +- Želite znova zagnati aplikacijo? +- +- +- You must restart the application to apply this setting. Would you like to restart now? +- ÄŒe želite uporabiti to nastavitev, morate znova zagnati aplikacijo. Ali želite znova zagnati zdaj? +- +- +- Perform Auto-Type Sequence +- +- +- +- {USERNAME} +- +- +- +- {USERNAME}{ENTER} +- +- +- +- {PASSWORD} +- +- +- +- {PASSWORD}{ENTER} +- +- +- +- Always on Top +- Vedno na vrhu +- +- +- Hide Usernames +- Skrij uporabniÅ¡ka imena +- +- +- Hide Passwords +- Skrij gesla +- +- +- +- ManageDatabase +- +- Database settings +- Nastavitve podatkovne baze +- +- +- Edit database settings +- Uredi nastavitve baze +- +- +- Unlock database +- Odkleni podatkovno bazo +- +- +- Unlock database to show more information +- Za veÄ informacij odklenite bazo +- +- +- Lock database +- Zakleni podatkovno bazo +- +- +- +- ManageSession +- +- Disconnect +- Prekiniti +- +- +- Disconnect this application +- Prekinite povezavo tega programa +- +- +- +- Merger +- +- Creating missing %1 [%2] +- Ustvarjanje manjkajoÄega %1 [%2] +- +- +- Relocating %1 [%2] +- Prestavljanje %1 [%2] +- +- +- Overwriting %1 [%2] +- Prepisovanje %1 [%2] +- +- +- older entry merged from database "%1" +- +- +- +- Adding backup for older target %1 [%2] +- +- +- +- Adding backup for older source %1 [%2] +- +- +- +- Reapplying older target entry on top of newer source %1 [%2] +- +- +- +- Reapplying older source entry on top of newer target %1 [%2] +- +- +- +- Synchronizing from newer source %1 [%2] +- +- +- +- Synchronizing from older source %1 [%2] +- +- +- +- Deleting child %1 [%2] +- +- +- +- Deleting orphan %1 [%2] +- +- +- +- Changed deleted objects +- +- +- +- Adding missing icon %1 +- +- +- +- Removed custom data %1 [%2] +- +- +- +- Adding custom data %1 [%2] +- +- +- +- +- NewDatabaseWizard +- +- Create a new KeePassXC database... +- +- +- +- Root +- Root group +- Koren +- +- +- +- NewDatabaseWizardPage +- +- WizardPage +- ÄŒarovnik +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- +- +- +- Advanced Settings +- Napredne nastavitve +- +- +- Simple Settings +- Enostavne nastavitve +- +- +- Encryption Settings +- Nastavitve Å¡ifriranja +- +- +- +- NewDatabaseWizardPageDatabaseKey +- +- Database Credentials +- Poverilnice baze +- +- +- A set of credentials known only to you that protects your database. +- +- +- +- +- NewDatabaseWizardPageEncryption +- +- Encryption Settings +- Nastavitve Å¡ifriranja +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- +- +- +- +- NewDatabaseWizardPageMetaData +- +- General Database Information +- +- +- +- Please fill in the display name and an optional description for your new database: +- +- +- +- +- NixUtils +- +- Password Manager +- +- +- +- +- OpData01 +- +- Invalid OpData01, does not contain header +- +- +- +- Unable to read all IV bytes, wanted 16 but got %1 +- +- +- +- Unable to init cipher for opdata01: %1 +- +- +- +- Unable to read all HMAC signature bytes +- +- +- +- Malformed OpData01 due to a failed HMAC +- +- +- +- Unable to process clearText in place +- +- +- +- Expected %1 bytes of clear-text, found %2 +- +- +- +- +- OpVaultOpenWidget +- +- Read Database did not produce an instance +-%1 +- +- +- +- +- OpVaultReader +- +- Directory .opvault must exist +- +- +- +- Directory .opvault must be readable +- +- +- +- Directory .opvault/default must exist +- +- +- +- Directory .opvault/default must be readable +- +- +- +- Unable to decode masterKey: %1 +- +- +- +- Unable to derive master key: %1 +- +- +- +- +- OpenSSHKey +- +- Invalid key file, expecting an OpenSSH key +- +- +- +- PEM boundary mismatch +- +- +- +- Base64 decoding failed +- +- +- +- Key file way too small. +- +- +- +- Key file magic header id invalid +- +- +- +- Found zero keys +- +- +- +- Failed to read public key. +- +- +- +- Corrupted key file, reading private key failed +- +- +- +- No private key payload to decrypt +- +- +- +- Trying to run KDF without cipher +- +- +- +- Passphrase is required to decrypt this key +- +- +- +- Key derivation failed, key file corrupted? +- +- +- +- Decryption failed, wrong passphrase? +- +- +- +- Unexpected EOF while reading public key +- +- +- +- Unexpected EOF while reading private key +- +- +- +- Can't write public key as it is empty +- +- +- +- Unexpected EOF when writing public key +- +- +- +- Can't write private key as it is empty +- +- +- +- Unexpected EOF when writing private key +- +- +- +- Unsupported key type: %1 +- +- +- +- Unknown cipher: %1 +- +- +- +- Cipher IV is too short for MD5 kdf +- +- +- +- Unknown KDF: %1 +- +- +- +- Unknown key type: %1 +- +- +- +- +- PasswordEdit +- +- Passwords do not match +- +- +- +- Passwords match so far +- +- +- +- Toggle Password (%1) +- +- +- +- Generate Password (%1) +- +- +- +- Warning: Caps Lock enabled! +- +- +- +- +- PasswordEditWidget +- +- Enter password: +- Vnos gesla: +- +- +- Confirm password: +- Potrditev gesla: +- +- +- Password +- Geslo +- +- +- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> +- +- +- +- Passwords do not match. +- +- +- +- Password field +- Polje za geslo +- +- +- Repeat password field +- +- +- +- +- PasswordGeneratorWidget +- +- %p% +- %p% +- +- +- strength +- Password strength +- +- +- +- entropy +- entropija +- +- +- Password +- Geslo +- +- +- Character Types +- Tipi znakov +- +- +- Numbers +- Å tevilke +- +- +- Extended ASCII +- RazÅ¡irjeni ASCII nabor +- +- +- Exclude look-alike characters +- IzkljuÄi podobne znake +- +- +- Pick characters from every group +- Izbir znake iz vsake skupine +- +- +- &Length: +- &Dolžina: +- +- +- Passphrase +- Fraza +- +- +- Wordlist: +- Seznam besed: +- +- +- Word Separator: +- LoÄilo besed: +- +- +- Close +- Zapri +- +- +- Entropy: %1 bit +- Entropija: %1 bit +- +- +- Password Quality: %1 +- Kakovost gesla: %1 +- +- +- Poor +- Password quality +- Slaba +- +- +- Weak +- Password quality +- Å ibka +- +- +- Good +- Password quality +- Dobra +- +- +- Excellent +- Password quality +- OdliÄna +- +- +- Switch to advanced mode +- Preklopi v napredni naÄin +- +- +- Advanced +- Napredno +- +- +- Braces +- Oklepaji +- +- +- Punctuation +- LoÄila +- +- +- Quotes +- Narekovaji +- +- +- Logograms +- Logogrami +- +- +- Character set to exclude from generated password +- Nabor znakov ki so izkljuÄeni pri ustvarjanju gesla +- +- +- Do not include: +- Ne vkljuÄi: +- +- +- Add non-hex letters to "do not include" list +- Dodaj na seznam "ne vkljuÄi" ne-Å¡estnajstiÅ¡ke Ärke +- +- +- Hex +- Hex +- +- +- Excluded characters: "0", "1", "l", "I", "O", "|", "ï¹’" +- IzkljuÄeni znaki: "0", "1", "l", "I", "O", "|", "." +- +- +- Generated password +- Ustvarjeno geslo +- +- +- Upper-case letters +- Velike Ärke +- +- +- Lower-case letters +- Male Ärke +- +- +- Special characters +- Posebni znaki +- +- +- Math Symbols +- MatematiÄni simboli +- +- +- Dashes and Slashes +- PoÅ¡evnice +- +- +- Excluded characters +- IzkljuÄeni znaki +- +- +- Hex Passwords +- Hex gesla +- +- +- Password length +- Dolžina gesla +- +- +- Word Case: +- +- +- +- Regenerate password +- Regeneriraj geslo +- +- +- Copy password +- Kopiraj geslo +- +- +- lower case +- male Ärke +- +- +- UPPER CASE +- Velike Ärke +- +- +- Title Case +- +- +- +- Generate Password +- Ustvari geslo +- +- +- Also choose from: +- Izberi tudi med: +- +- +- Additional characters to use for the generated password +- Dodatni znaki za generirano geslo +- +- +- Additional characters +- Dodatni znaki +- +- +- Word Count: +- Å tevilo besed: +- +- +- Esc +- Esc +- +- +- Apply Password +- Uporabi geslo +- +- +- Ctrl+S +- Ctrl+S +- +- +- Regenerate password (%1) +- Regeneriraj geslo (%1) +- +- +- Special Characters +- Posebni znaki +- +- +- +- QApplication +- +- KeeShare +- KeeShare +- +- +- Statistics +- Statistika +- +- +- Very weak password +- Zelo Å¡ibko geslo +- +- +- Password entropy is %1 bits +- Entropija gesla je %1 bitov +- +- +- Weak password +- Å ibko geslo +- +- +- Used in %1/%2 +- Uporablja se v %1/%2 +- +- +- Password is used %1 times +- Geslo se uporablja %1 krat +- +- +- Password has expired +- Geslo je poteklo +- +- +- Password expiry was %1 +- +- +- +- Password is about to expire +- Geslo bo poteklo +- +- +- Password expires in %1 days +- Geslo poteÄe v %1 dneh +- +- +- Password will expire soon +- Geslo bo kmalu poteklo +- +- +- Password expires on %1 +- Geslo poteÄe %1 +- +- +- Health Check +- +- +- +- HIBP +- HIBP +- +- +- +- QMessageBox +- +- Overwrite +- PrepiÅ¡i +- +- +- Delete +- IzbriÅ¡i +- +- +- Move +- Premakni +- +- +- Empty +- Prazno +- +- +- Remove +- Odstrani +- +- +- Skip +- PreskoÄi +- +- +- Disable +- OnemogoÄi +- +- +- Merge +- Združi +- +- +- Continue +- Nadaljuj +- +- +- +- QObject +- +- Database not opened +- Baza ni odprta +- +- +- Database hash not available +- +- +- +- Client public key not received +- +- +- +- Cannot decrypt message +- SporoÄila ni mogoÄe deÅ¡ifrirati +- +- +- Action cancelled or denied +- Dejanje preklicano ali zavrnjeno +- +- +- KeePassXC association failed, try again +- +- +- +- Encryption key is not recognized +- Å ifrirnega kljuÄa ni mogoÄe prepoznati +- +- +- Incorrect action +- Neveljavno dejanje +- +- +- Empty message received +- Prejeto prazno sporoÄilo +- +- +- No URL provided +- URL ni naveden +- +- +- No logins found +- Nobene prijave ni bilo mogoÄe najti +- +- +- Unknown error +- Neznana napaka +- +- +- Add a new entry to a database. +- Dodajte nov vnos v bazo. +- +- +- Path of the database. +- Pot do baze. +- +- +- Key file of the database. +- +- +- +- path +- pot +- +- +- Username for the entry. +- UporabniÅ¡ko ime za vnos. +- +- +- username +- uporabniÅ¡ko ime +- +- +- URL for the entry. +- URL za vnos. +- +- +- URL +- URL +- +- +- Prompt for the entry's password. +- +- +- +- Generate a password for the entry. +- Ustvarite geslo za vnos. +- +- +- length +- dolžina +- +- +- Path of the entry to add. +- Pot vnosa, ki jo želite dodati. +- +- +- Path of the entry to clip. +- clip = copy to clipboard +- +- +- +- Timeout in seconds before clearing the clipboard. +- +- +- +- Edit an entry. +- Uredi vnos. +- +- +- Title for the entry. +- +- +- +- title +- naslov +- +- +- Path of the entry to edit. +- +- +- +- Estimate the entropy of a password. +- +- +- +- Password for which to estimate the entropy. +- +- +- +- Perform advanced analysis on the password. +- +- +- +- +- +-Available commands: +- +- +- +- +- Name of the command to execute. +- +- +- +- List database entries. +- +- +- +- Path of the group to list. Default is / +- +- +- +- Find entries quickly. +- +- +- +- Search term. +- +- +- +- Merge two databases. +- +- +- +- Path of the database to merge from. +- +- +- +- Use the same credentials for both database files. +- +- +- +- Key file of the database to merge from. +- +- +- +- Show an entry's information. +- +- +- +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- +- +- +- attribute +- +- +- +- Name of the entry to show. +- +- +- +- NULL device +- +- +- +- error reading from device +- +- +- +- malformed string +- +- +- +- missing closing quote +- +- +- +- Group +- Skupina +- +- +- Title +- Naslov +- +- +- Username +- UporabniÅ¡ko ime +- +- +- Password +- Geslo +- +- +- Notes +- Opombe +- +- +- Last Modified +- Nazadnje spremenjeno +- +- +- Created +- Ustvarjeno +- +- +- Browser Integration +- Integracija s spletnim brskalnikom +- +- +- SSH Agent +- SSH Agent +- +- +- Generate a new random diceware passphrase. +- +- +- +- Word count for the diceware passphrase. +- +- +- +- Wordlist for the diceware generator. +-[Default: EFF English] +- +- +- +- Generate a new random password. +- +- +- +- Could not create entry with path %1. +- +- +- +- Enter password for new entry: +- +- +- +- Writing the database failed %1. +- +- +- +- Successfully added entry %1. +- +- +- +- Invalid timeout value %1. +- +- +- +- Entry %1 not found. +- +- +- +- Entry with path %1 has no TOTP set up. +- +- +- +- Clearing the clipboard in %1 second(s)... +- +- +- +- Clipboard cleared! +- +- +- +- Silence password prompt and other secondary outputs. +- +- +- +- count +- CLI parameter +- +- +- +- Could not find entry with path %1. +- +- +- +- Not changing any field for entry %1. +- +- +- +- Enter new password for entry: +- +- +- +- Writing the database failed: %1 +- Shranjevanje baze ni uspelo: +- +- +- Successfully edited entry %1. +- +- +- +- Length %1 +- Dolžina %1 +- +- +- Entropy %1 +- +- +- +- Log10 %1 +- +- +- +- Multi-word extra bits %1 +- +- +- +- Type: Bruteforce +- +- +- +- Type: Dictionary +- +- +- +- Type: Dict+Leet +- +- +- +- Type: User Words +- +- +- +- Type: User+Leet +- +- +- +- Type: Repeated +- +- +- +- Type: Sequence +- +- +- +- Type: Spatial +- +- +- +- Type: Date +- +- +- +- Type: Bruteforce(Rep) +- +- +- +- Type: Dictionary(Rep) +- +- +- +- Type: Dict+Leet(Rep) +- +- +- +- Type: User Words(Rep) +- +- +- +- Type: User+Leet(Rep) +- +- +- +- Type: Repeated(Rep) +- +- +- +- Type: Sequence(Rep) +- +- +- +- Type: Spatial(Rep) +- +- +- +- Type: Date(Rep) +- +- +- +- Type: Unknown%1 +- +- +- +- Entropy %1 (%2) +- +- +- +- *** Password length (%1) != sum of length of parts (%2) *** +- +- +- +- Failed to load key file %1: %2 +- +- +- +- Length of the generated password +- +- +- +- Use lowercase characters +- +- +- +- Use uppercase characters +- +- +- +- Use special characters +- +- +- +- Use extended ASCII +- +- +- +- Exclude character set +- +- +- +- chars +- +- +- +- Exclude similar looking characters +- +- +- +- Include characters from every selected group +- +- +- +- Recursively list the elements of the group. +- +- +- +- Cannot find group %1. +- +- +- +- Error reading merge file: +-%1 +- +- +- +- Unable to save database to file : %1 +- +- +- +- Unable to save database to file: %1 +- +- +- +- Successfully recycled entry %1. +- +- +- +- Successfully deleted entry %1. +- +- +- +- Show the entry's current TOTP. +- +- +- +- ERROR: unknown attribute %1. +- +- +- +- No program defined for clipboard manipulation +- Noben program ni doloÄen za manipulacijo odložiÅ¡Äa +- +- +- file empty +- datoteka prazna +- +- +- %1: (row, col) %2,%3 +- +- +- +- AES-KDF (KDBX 4) +- AES-KDF (KDBX 4) +- +- +- AES-KDF (KDBX 3.1) +- AES-KDF (KDBX 3.1) +- +- +- Invalid Settings +- TOTP +- Neveljavne nastavitve +- +- +- Invalid Key +- TOTP +- Neveljaven kljuÄ +- +- +- Message encryption failed. +- +- +- +- No groups found +- +- +- +- Create a new database. +- Ustvarite novo bazo. +- +- +- File %1 already exists. +- Datoteka %1 že obstaja. +- +- +- Loading the key file failed +- +- +- +- No key is set. Aborting database creation. +- +- +- +- Failed to save the database: %1. +- +- +- +- Successfully created new database. +- +- +- +- Creating KeyFile %1 failed: %2 +- +- +- +- Loading KeyFile %1 failed: %2 +- +- +- +- Path of the entry to remove. +- +- +- +- Existing single-instance lock file is invalid. Launching new instance. +- +- +- +- The lock file could not be created. Single-instance mode disabled. +- +- +- +- KeePassXC - cross-platform password manager +- +- +- +- filenames of the password databases to open (*.kdbx) +- +- +- +- path to a custom config file +- pot do konfiguracijske datoteke po meri +- +- +- key file of the database +- datoteka s kljuÄi podatkovne baze +- +- +- read password of the database from stdin +- +- +- +- Another instance of KeePassXC is already running. +- +- +- +- Fatal error while testing the cryptographic functions. +- Napaka pri testiranju kriptografskih funkcij. +- +- +- KeePassXC - Error +- KeePassXC - Napaka +- +- +- Database password: +- Geslo za bazo: +- +- +- Cannot create new group +- Ni mogoÄe ustvariti nove skupine +- +- +- Deactivate password key for the database. +- +- +- +- Displays debugging information. +- +- +- +- Deactivate password key for the database to merge from. +- +- +- +- Version %1 +- RazliÄica %1 +- +- +- Build Type: %1 +- +- +- +- Revision: %1 +- Revizija: %1 +- +- +- Distribution: %1 +- +- +- +- Debugging mode is disabled. +- +- +- +- Debugging mode is enabled. +- +- +- +- Operating system: %1 +-CPU architecture: %2 +-Kernel: %3 %4 +- Operacijski sistem: %1 +-arhitektura procesorja: %2 +-Jedro: %3 %4 +- +- +- Auto-Type +- Samodejno tipkanje +- +- +- KeeShare (signed and unsigned sharing) +- +- +- +- KeeShare (only signed sharing) +- +- +- +- KeeShare (only unsigned sharing) +- +- +- +- YubiKey +- YubiKey +- +- +- TouchID +- TouchID +- +- +- None +- Nobeden +- +- +- Enabled extensions: +- OmogoÄene razÅ¡iritve: +- +- +- Cryptographic libraries: +- Kriptografske knjižnice: +- +- +- Cannot generate a password and prompt at the same time! +- +- +- +- Adds a new group to a database. +- V bazo doda novo skupino. +- +- +- Path of the group to add. +- Pot skupine, ki jo želite dodati. +- +- +- Group %1 already exists! +- Skupina %1 že obstaja! +- +- +- Group %1 not found. +- Skupine %1 ni mogoÄe najti. +- +- +- Successfully added group %1. +- UspeÅ¡no dodana skupina %1. +- +- +- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. +- +- +- +- FILENAME +- +- +- +- Analyze passwords for weaknesses and problems. +- +- +- +- Failed to open HIBP file %1: %2 +- +- +- +- Evaluating database entries against HIBP file, this will take a while... +- +- +- +- Close the currently opened database. +- +- +- +- Display this help. +- +- +- +- slot +- +- +- +- Invalid word count %1 +- +- +- +- The word list is too small (< 1000 items) +- +- +- +- Exit interactive mode. +- +- +- +- Exports the content of a database to standard output in the specified format. +- +- +- +- Unable to export database to XML: %1 +- +- +- +- Unsupported format %1 +- Nepodprta format %1 +- +- +- Use numbers +- Uporabi Å¡tevilke +- +- +- Invalid password length %1 +- Neveljavna dolžina gesla %1 +- +- +- Display command help. +- +- +- +- Available commands: +- Razpoložljivi ukazi: +- +- +- Import the contents of an XML database. +- +- +- +- Path of the XML database export. +- +- +- +- Path of the new database. +- Pot nove baze. +- +- +- Successfully imported database. +- UspeÅ¡no uvožena baza. +- +- +- Unknown command %1 +- Neznan ukaz %1 +- +- +- Flattens the output to single lines. +- +- +- +- Only print the changes detected by the merge operation. +- +- +- +- Yubikey slot for the second database. +- +- +- +- Successfully merged %1 into %2. +- %1 je uspeÅ¡no združen v %2. +- +- +- Database was not modified by merge operation. +- Z operacijo združevanja baza ni bila spremenjena. +- +- +- Moves an entry to a new group. +- +- +- +- Path of the entry to move. +- Pot vnosa za premikanje. +- +- +- Path of the destination group. +- Pot ciljne skupine. +- +- +- Could not find group with path %1. +- Ni bilo mogoÄe najti skupine s potjo %1. +- +- +- Entry is already in group %1. +- Vnos je že v skupini %1. +- +- +- Successfully moved entry %1 to group %2. +- Vnos %1 je bil uspeÅ¡no premaknjen v skupino %2. +- +- +- Open a database. +- Odpri bazo. +- +- +- Path of the group to remove. +- Pot do skupine, ki jo želite odstraniti. +- +- +- Cannot remove root group from database. +- +- +- +- Successfully recycled group %1. +- +- +- +- Successfully deleted group %1. +- +- +- +- Failed to open database file %1: not found +- +- +- +- Failed to open database file %1: not a plain file +- +- +- +- Failed to open database file %1: not readable +- +- +- +- Enter password to unlock %1: +- Vnesite geslo za odklepanje %1: +- +- +- Invalid YubiKey slot %1 +- +- +- +- Enter password to encrypt database (optional): +- Vnesite geslo za Å¡ifriranje baze (neobvezno): +- +- +- HIBP file, line %1: parse error +- +- +- +- Secret Service Integration +- +- +- +- User name +- UporabniÅ¡ko ime +- +- +- Password for '%1' has been leaked %2 time(s)! +- +- +- +- Invalid password generator after applying all options +- +- +- +- Show the protected attributes in clear text. +- +- +- +- Browser Plugin Failure +- +- +- +- Could not save the native messaging script file for %1. +- +- +- +- Copy the given attribute to the clipboard. Defaults to "password" if not specified. +- +- +- +- Copy the current TOTP to the clipboard (equivalent to "-a totp"). +- +- +- +- Copy an entry's attribute to the clipboard. +- +- +- +- ERROR: Please specify one of --attribute or --totp, not both. +- +- +- +- ERROR: attribute %1 is ambiguous, it matches %2. +- +- +- +- Attribute "%1" not found. +- Atribut "%1" ni bil najden. +- +- +- Entry's "%1" attribute copied to the clipboard! +- +- +- +- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). +- +- +- +- slot[:serial] +- slot[:serial] +- +- +- Target decryption time in MS for the database. +- +- +- +- time +- +- +- +- Set the key file for the database. +- +- +- +- Set a password for the database. +- Nastavi geslo za bazo. +- +- +- Invalid decryption time %1. +- +- +- +- Target decryption time must be between %1 and %2. +- +- +- +- Failed to set database password. +- +- +- +- Benchmarking key derivation function for %1ms delay. +- +- +- +- Setting %1 rounds for key derivation function. +- +- +- +- error while setting database key derivation settings. +- +- +- +- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. +- +- +- +- Unable to import XML database: %1 +- +- +- +- Show a database's information. +- +- +- +- UUID: +- UUID: +- +- +- Name: +- ime: +- +- +- Description: +- Opis: +- +- +- Cipher: +- +- +- +- KDF: +- KDF: +- +- +- Recycle bin is enabled. +- KoÅ¡ je omogoÄen. +- +- +- Recycle bin is not enabled. +- KoÅ¡ ni omogoÄen. +- +- +- Invalid command %1. +- Neveljaven ukaz %1. +- +- +- Invalid YubiKey serial %1 +- +- +- +- Please touch the button on your YubiKey to continue… +- +- +- +- Do you want to create a database with an empty password? [y/N]: +- +- +- +- Repeat password: +- +- +- +- Error: Passwords do not match. +- Error: Passwords do not match. +- +- +- All clipping programs failed. Tried %1 +- +- +- +- +- AES (%1 rounds) +- AES (%1 rounds) +- +- +- AES 256-bit +- AES 256-bit +- +- +- Twofish 256-bit +- Twofish 256-bit +- +- +- ChaCha20 256-bit +- ChaCha20: 256-bit {20 256-?} +- +- +- Benchmark %1 delay +- +- +- +- %1 ms +- milliseconds +- %1 ms%1 ms%1 ms%1 ms +- +- +- %1 s +- seconds +- %1 s%1 s%1 s%1 s +- +- +- path to a custom local config file +- +- +- +- WARNING: You are using an old key file format which KeePassXC may +-stop supporting in the future. +- +-Please consider generating a new key file. +- +- +- +- Argon2%1 (%2 rounds, %3 KB) +- Argon2%1 (%2 rounds, %3 KB) +- +- +- Argon2d (KDBX 4 – recommended) +- Argon2d (KDBX 4 – priporoÄeno) +- +- +- Argon2id (KDBX 4) +- Argon2id (KDBX 4) +- +- +- TOTP +- TOTP +- +- +- Icon +- Ikona +- +- +- Unsupported key file version: %1 +- +- +- +- Checksum mismatch! Key file may be corrupt. +- +- +- +- Unexpected key file data! Key file may be corrupt. +- +- +- +- +- QtIOCompressor +- +- Internal zlib error when compressing: +- Notranja zlib napaka pri stiskanju: +- +- +- Error writing to underlying device: +- Napaka pri pisanju na napravo: +- +- +- Error opening underlying device: +- Napaka pri odpiranju naprave: +- +- +- Error reading data from underlying device: +- Napak pri branju iz naprave: +- +- +- Internal zlib error when decompressing: +- Notranja zlib napaka pri dekompresiranju: +- +- +- +- QtIOCompressor::open +- +- The gzip format not supported in this version of zlib. +- Ta razliÄica zlib ne podpira gzip formata. +- +- +- Internal zlib error: +- Notranja zlib napaka: +- +- +- +- ReportsWidgetHealthcheck +- +- Also show entries that have been excluded from reports +- Prikaži tudi vnosi, ki so bili izkljuÄeni iz poroÄil +- +- +- Hover over reason to show additional details. Double-click entries to edit. +- +- +- +- Bad +- Password quality +- Zelo slabo +- +- +- Bad — password must be changed +- Zelo slabo — geslo je treba spremeniti +- +- +- Poor +- Password quality +- Slabo +- +- +- Poor — password should be changed +- Slabo — geslo je treba spremeniti +- +- +- Weak +- Password quality +- Å ibko +- +- +- Weak — consider changing the password +- Å ibko — razmislite o spremembi gesla +- +- +- (Excluded) +- (IzkljuÄeno) +- +- +- This entry is being excluded from reports +- Ta vnos je izkljuÄen iz poroÄil +- +- +- Please wait, health data is being calculated... +- +- +- +- Congratulations, everything is healthy! +- +- +- +- Title +- Naslov +- +- +- Path +- Pot +- +- +- Score +- Rezultat +- +- +- Reason +- Razlog +- +- +- Edit Entry... +- Uredi vnos... +- +- +- Exclude from reports +- IzkljuÄi iz poroÄil +- +- +- +- ReportsWidgetHibp +- +- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. +- +- +- +- Perform Online Analysis +- Izvedite spletno analizo +- +- +- Also show entries that have been excluded from reports +- Prikaži tudi vnosi, ki so bili izkljuÄeni iz poroÄil +- +- +- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. +- +- +- +- Congratulations, no exposed passwords! +- ÄŒestitke, brez izpostavljenih gesel! +- +- +- Title +- Naslov +- +- +- Path +- Pot +- +- +- Password exposed… +- Geslo je izpostavljeno... +- +- +- (Excluded) +- (IzkljuÄeno) +- +- +- This entry is being excluded from reports +- Ta vnos je izkljuÄen iz poroÄil +- +- +- once +- enkrat +- +- +- up to 10 times +- +- +- +- up to 100 times +- +- +- +- up to 1000 times +- +- +- +- up to 10,000 times +- +- +- +- up to 100,000 times +- +- +- +- up to a million times +- +- +- +- millions of times +- +- +- +- Edit Entry... +- Uredi vnos ... +- +- +- Exclude from reports +- IzkljuÄi iz poroÄil +- +- +- +- ReportsWidgetStatistics +- +- Hover over lines with error icons for further information. +- +- +- +- Name +- Ime +- +- +- Value +- Vrednost +- +- +- Please wait, database statistics are being calculated... +- Prosimo poÄakajte, statistika baze se izraÄunava... +- +- +- Database name +- Ime baze +- +- +- Description +- Opis +- +- +- Location +- Lokacijo +- +- +- Last saved +- Nazadnje shranjeno +- +- +- Unsaved changes +- Neshranjene spremembe +- +- +- yes +- da +- +- +- no +- ne +- +- +- The database was modified, but the changes have not yet been saved to disk. +- Baza je bila spremenjena, vendar spremembe Å¡e niso bile shranjene na disk. +- +- +- Number of groups +- Å tevilo skupin +- +- +- Number of entries +- Å tevilo vnosov +- +- +- Number of expired entries +- Å tevilo vnosov, ki so potekli +- +- +- The database contains entries that have expired. +- Baza vsebuje vnose, ki so potekli. +- +- +- Unique passwords +- Unikatna gesla +- +- +- Non-unique passwords +- Neunikatna gesla +- +- +- More than 10% of passwords are reused. Use unique passwords when possible. +- +- +- +- Maximum password reuse +- +- +- +- Some passwords are used more than three times. Use unique passwords when possible. +- +- +- +- Number of short passwords +- +- +- +- Recommended minimum password length is at least 8 characters. +- +- +- +- Number of weak passwords +- +- +- +- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. +- +- +- +- Entries excluded from reports +- +- +- +- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. +- +- +- +- Average password length +- +- +- +- %1 characters +- +- +- +- Average password length is less than ten characters. Longer passwords provide more security. +- +- +- +- +- SSHAgent +- +- Agent connection failed. +- +- +- +- Agent protocol error. +- +- +- +- No agent running, cannot add identity. +- +- +- +- No agent running, cannot remove identity. +- +- +- +- Agent refused this identity. Possible reasons include: +- +- +- +- The key has already been added. +- +- +- +- Restricted lifetime is not supported by the agent (check options). +- +- +- +- A confirmation request is not supported by the agent (check options). +- +- +- +- Key identity ownership conflict. Refusing to add. +- +- +- +- No agent running, cannot list identities. +- +- +- +- +- SearchHelpWidget +- +- Search Help +- PomoÄ pri iskanju +- +- +- Search terms are as follows: [modifiers][field:]["]term["] +- +- +- +- Every search term must match (ie, logical AND) +- +- +- +- Modifiers +- +- +- +- exclude term from results +- +- +- +- match term exactly +- +- +- +- use regex in term +- +- +- +- Fields +- +- +- +- Term Wildcards +- +- +- +- match anything +- +- +- +- match one +- +- +- +- logical OR +- +- +- +- Examples +- Primeri +- +- +- +- SearchWidget +- +- Search +- IÅ¡Äi +- +- +- Limit search to selected group +- +- +- +- Search Help +- PomoÄ pri iskanju +- +- +- Search (%1)... +- Search placeholder text, %1 is the keyboard shortcut +- Iskanje (%1)... +- +- +- Case sensitive +- Razlikuj med velikimi in malimi Ärkami +- +- +- +- SettingsWidgetFdoSecrets +- +- Options +- Možnosti +- +- +- Enable KeepassXC Freedesktop.org Secret Service integration +- +- +- +- General +- SploÅ¡no +- +- +- Show notification when credentials are requested +- Pokaži obvestilo, ko so zahtevane poverilnice +- +- +- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> +- +- +- +- Exposed database groups: +- +- +- +- Authorization +- Pooblastilo +- +- +- These applications are currently connected: +- +- +- +- Don't confirm when entries are deleted by clients +- +- +- +- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. +- +- +- +- <b>Warning:</b> +- <b>Opozorilo:</b> +- +- +- Save current changes to activate the plugin and enable editing of this section. +- +- +- +- +- SettingsWidgetKeeShare +- +- Active +- Aktivno +- +- +- Allow export +- Dovoli izvoz +- +- +- Allow import +- Dovoli uvoz +- +- +- Own certificate +- Lastni certifikat +- +- +- Fingerprint: +- +- +- +- Certificate: +- Certifikat: +- +- +- Signer +- Podpisnik +- +- +- Key: +- KljuÄ: +- +- +- Generate +- Ustvari +- +- +- Import +- Uvozi +- +- +- Export +- Izvozi +- +- +- Imported certificates +- Uvoženi certifikati +- +- +- Trust +- Zaupaj +- +- +- Ask +- VpraÅ¡aj +- +- +- Untrust +- +- +- +- Remove +- Odstrani +- +- +- Path +- Pot +- +- +- Status +- Status +- +- +- Fingerprint +- Prstni odtis +- +- +- Certificate +- Certifikat +- +- +- Trusted +- +- +- +- Untrusted +- +- +- +- Unknown +- Neznano +- +- +- key.share +- Filetype for KeeShare key +- +- +- +- KeeShare key file +- KeeShare datoteka kljuÄa +- +- +- All files +- Vse datoteke +- +- +- Select path +- +- +- +- Exporting changed certificate +- +- +- +- The exported certificate is not the same as the one in use. Do you want to export the current certificate? +- +- +- +- Signer: +- Podpisnik: +- +- +- Allow KeeShare imports +- Dovoli uvoze preko KeeShare +- +- +- Allow KeeShare exports +- +- +- +- Only show warnings and errors +- +- +- +- Key +- KljuÄ +- +- +- Signer name field +- +- +- +- Generate new certificate +- Ustvari nov certifikat +- +- +- Import existing certificate +- Uvozi obstojeÄ certifikat +- +- +- Export own certificate +- Izvozi lastni certifikat +- +- +- Known shares +- +- +- +- Trust selected certificate +- Zaupaj izbranemu certifikatu +- +- +- Ask whether to trust the selected certificate every time +- +- +- +- Untrust selected certificate +- Nezaupanj izbranemu certifikatu +- +- +- Remove selected certificate +- Odstrani izbran certifikat +- +- +- +- ShareExport +- +- Overwriting signed share container is not supported - export prevented +- +- +- +- Could not write export container (%1) +- +- +- +- Could not embed signature: Could not open file to write (%1) +- +- +- +- Could not embed signature: Could not write file (%1) +- +- +- +- Could not embed database: Could not open file to write (%1) +- +- +- +- Could not embed database: Could not write file (%1) +- +- +- +- Overwriting unsigned share container is not supported - export prevented +- +- +- +- Could not write export container +- +- +- +- Unexpected export error occurred +- Pri izvozu je priÅ¡lo do nepriÄakovane napake +- +- +- +- ShareImport +- +- Import from container without signature +- Uvozi iz nepodpisanega kontejnerja +- +- +- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? +- +- +- +- Import from container with certificate +- Uvozi iz kontejnerja s certifikatom +- +- +- Do you want to trust %1 with the fingerprint of %2 from %3? +- +- +- +- Not this time +- Ne tokrat +- +- +- Never +- Nikoli +- +- +- Always +- Vedno +- +- +- Just this time +- +- +- +- Signed share container are not supported - import prevented +- Podpisan deljeni kontejner ni podprt - uvoz prepreÄen +- +- +- File is not readable +- Datoteko ni možno prebrati +- +- +- Invalid sharing container +- +- +- +- Untrusted import prevented +- +- +- +- Successful signed import +- UspeÅ¡en podpisan uvoz +- +- +- Unsigned share container are not supported - import prevented +- Nepodpisan deljeni kontejner ni podprt - uvoz prepreÄen +- +- +- Successful unsigned import +- UspeÅ¡en nepodpisan uvoz +- +- +- File does not exist +- Datoteka ne obstaja +- +- +- Unknown share container type +- Neznana vrsta deljenega kontejnerja +- +- +- +- ShareObserver +- +- Import from %1 failed (%2) +- Uvoz iz %1 je spodletel (%2) +- +- +- Import from %1 successful (%2) +- UspeÅ¡en uvoz iz %1 (%2) +- +- +- Imported from %1 +- Uvoženo iz +- +- +- Export to %1 failed (%2) +- +- +- +- Export to %1 successful (%2) +- +- +- +- Export to %1 +- +- +- +- Multiple import source path to %1 in %2 +- +- +- +- Conflicting export target path %1 in %2 +- +- +- +- +- TotpDialog +- +- Timed Password +- +- +- +- 000000 +- 000000 +- +- +- Copy +- Kopiraj +- +- +- Expires in <b>%n</b> second(s) +- PoteÄe v <b>%n sekundah</b>PoteÄe v <b>%n sekundah</b>PoteÄe v <b>%n sekundah</b>PoteÄe Äez <b>%n</b> sekund(o) +- +- +- +- TotpExportSettingsDialog +- +- Copy +- Kopiraj +- +- +- NOTE: These TOTP settings are custom and may not work with other authenticators. +- TOTP QR code dialog warning +- OPOMBA: TOTP nastavitve niso standardne in lahko ne bodo delovale z drugimi avtentikator-ji. +- +- +- There was an error creating the QR code. +- Pri ustvarjanju QR kode je priÅ¡lo do napake. +- +- +- Closing in %1 seconds. +- Zapiranje Äez% 1 sekund(o). +- +- +- +- TotpSetupDialog +- +- Setup TOTP +- Nastavi TOTP +- +- +- Default RFC 6238 token settings +- Privzete nastavitve RFC 6238 žetona +- +- +- Steam token settings +- +- +- +- Use custom settings +- Uporabi nastavitve po meri +- +- +- Custom Settings +- Nastavitve po meri +- +- +- Time step: +- +- +- +- sec +- Seconds +- s +- +- +- Code size: +- +- +- +- Secret Key: +- +- +- +- Secret key must be in Base32 format +- +- +- +- Secret key field +- +- +- +- Algorithm: +- Algoritem: +- +- +- Time step field +- +- +- +- digits +- Å¡tevilke +- +- +- Invalid TOTP Secret +- +- +- +- You have entered an invalid secret key. The key must be in Base32 format. +-Example: JBSWY3DPEHPK3PXP +- +- +- +- Confirm Remove TOTP Settings +- P +- +- +- Are you sure you want to delete TOTP settings for this entry? +- Ali ste prepriÄani, da želite izbrisati TOTP nastavitve za ta vnos? +- +- +- +- URLEdit +- +- Invalid URL +- Neveljaven URL +- +- +- +- UpdateCheckDialog +- +- Checking for updates +- Preverjam za nove posodobitve +- +- +- Checking for updates... +- Preverjam za nove posodobitve... +- +- +- Close +- Zapri +- +- +- Update Error! +- Napaka pri posodabljanju! +- +- +- An error occurred in retrieving update information. +- Pri pridobivanju informacij o posodobitvi je priÅ¡lo do napake. +- +- +- Please try again later. +- Prosim ponovno poskusite kasneje. +- +- +- Software Update +- Posodobitve +- +- +- A new version of KeePassXC is available! +- Na voljo je nova razliÄica KeePassXC! +- +- +- KeePassXC %1 is now available — you have %2. +- Na voljo je KeePassXC %1 — trenutno je nameÅ¡Äena %2. +- +- +- Download it at keepassxc.org +- Prenesi jo iz keepassxc.org +- +- +- You're up-to-date! +- +- +- +- KeePassXC %1 is currently the newest version available +- KeePassXC %1 je trenutno zadnja razliÄica, ki je na voljo +- +- +- +- WelcomeWidget +- +- Start storing your passwords securely in a KeePassXC database +- +- +- +- Create new database +- ustvari novo bazo +- +- +- Open existing database +- Odpri obstojeÄo bazo +- +- +- Import from KeePass 1 +- Uvozi iz KeePass 1 +- +- +- Import from CSV +- Uvozi iz CSV +- +- +- Recent databases +- Nedavne podatkovne baze +- +- +- Welcome to KeePassXC %1 +- +- +- +- Import from 1Password +- +- +- +- Open a recent database +- +- +- +- +- YubiKey +- +- %1 [%2] Configured Slot - %3 +- +- +- +- %1 [%2] Challenge Response - Slot %3 - %4 +- +- +- +- Press +- +- +- +- Passive +- +- +- +- %1 Invalid slot specified - %2 +- +- +- +- The YubiKey interface has not been initialized. +- +- +- +- Hardware key is currently in use. +- +- +- +- Could not find hardware key with serial number %1. Please plug it in to continue. +- +- +- +- Hardware key timed out waiting for user interaction. +- +- +- +- A USB error ocurred when accessing the hardware key: %1 +- +- +- +- Failed to complete a challenge-response, the specific error was: %1 +- +- +- +- +- YubiKeyEditWidget +- +- Refresh +- Osveži +- +- +- YubiKey Challenge-Response +- +- +- +- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- +- +- +- Refresh hardware tokens +- +- +- +- Hardware key slot selection +- +- +- +- Could not find any hardware keys! +- +- +- +- Selected hardware key slot does not support challenge-response! +- +- +- +- Detecting hardware keys… +- +- +- +- No hardware keys detected +- +- +- +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_sv.ts keepassxc-2.6.4-patched/share/translations/keepassx_sv.ts +--- keepassxc-2.6.4-orig/share/translations/keepassx_sv.ts 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/translations/keepassx_sv.ts 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7892 +0,0 @@ +- +- +- AboutDialog +- +- About KeePassXC +- Om KeePassXC +- +- +- About +- Om +- +- +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- Rapportera fel pÃ¥: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- +- +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- KeePassXC distribueras enligt villkoren i GNU General Public License (GPL) version 2 eller (om du vill) version 3. +- +- +- Contributors +- Medverkande +- +- +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Se alla bidrag pÃ¥ GitHub</a> +- +- +- Debug Info +- Felsökningsinformation +- +- +- Include the following information whenever you report a bug: +- Inkludera följande information när du rapporterar ett fel: +- +- +- Copy to clipboard +- Kopiera till urklipp +- +- +- Project Maintainers: +- Projektansvariga: +- +- +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- Ett särskilt tack frÃ¥n teamet bakom KeePassXC riktas till debfx som skapade den ursprungliga KeePassX. +- +- +- +- AgentSettingsWidget +- +- Use OpenSSH for Windows instead of Pageant +- Använd OpenSSH för Windows istället för Pageant +- +- +- Enable SSH Agent integration +- Aktivera SSH-tjänstintegrering +- +- +- SSH_AUTH_SOCK value +- SSH_AUTH_SOCK värde +- +- +- SSH_AUTH_SOCK override +- SSH_AUTH_SOCK Ã¥sidosättning +- +- +- (empty) +- (tomt) +- +- +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- Ingen socket för SSH-tjänsten tillgänglig. Tillse antingen att SSH_AUTH_SOCK miljövaiabel finns eller eller ange en Ã¥sidosättning. +- +- +- SSH Agent connection is working! +- SSH-tjänstens anslutning arbetar! +- +- +- +- ApplicationSettingsWidget +- +- Application Settings +- Programinställningar +- +- +- General +- Allmänt +- +- +- Security +- Säkerhet +- +- +- Access error for config file %1 +- Ã…tkomstfel för konfigurationsfil %1 +- +- +- Icon only +- Endast Ikon +- +- +- Text only +- Endast text +- +- +- Text beside icon +- Text bredvid ikon +- +- +- Text under icon +- Text under ikon +- +- +- Follow style +- Följ stil +- +- +- Reset Settings? +- Vill du Ã¥terställa inställningarna? +- +- +- Are you sure you want to reset all general and security settings to default? +- Vill du verkligen Ã¥terställa alla allmäna och säkerhetsinställningar till standardinställning? +- +- +- Monochrome (light) +- Monochrome (ljus) +- +- +- Monochrome (dark) +- Monochrome (mörk) +- +- +- Colorful +- Färgstark +- +- +- You must restart the application to set the new language. Would you like to restart now? +- Du mÃ¥ste starta om programmet för att tillämpa det nya sprÃ¥ket. Vill du starta om nu? +- +- +- +- ApplicationSettingsWidgetGeneral +- +- Basic Settings +- Grundinställningar +- +- +- Startup +- Uppstart +- +- +- Start only a single instance of KeePassXC +- TillÃ¥t endast en instans av KeePassXC +- +- +- Minimize window at application startup +- Minimera fönstret vid programstart +- +- +- File Management +- Filhantering +- +- +- Backup database file before saving +- Säkerhetskopiera databasfilen innan den sparas +- +- +- Automatically save after every change +- Spara automatiskt efter varje ändring +- +- +- Automatically reload the database when modified externally +- Läs om databasen automatiskt när den ändrats externt +- +- +- Entry Management +- Posthantering +- +- +- Use group icon on entry creation +- Använd gruppikon för nya poster +- +- +- Minimize instead of app exit +- Minimera istället för att avsluta programmet +- +- +- Show a system tray icon +- Visa en systemfältsikon +- +- +- Hide window to system tray when minimized +- Minimera fönstret till systemfältet, vid minimering +- +- +- Auto-Type +- Autoskriv +- +- +- Use entry title to match windows for global Auto-Type +- Använd postens titel för att matcha fönster vid global autoskriv +- +- +- Use entry URL to match windows for global Auto-Type +- Använd postens URL för att matcha fönster vid global autoskriv +- +- +- Always ask before performing Auto-Type +- FrÃ¥ga alltid innan autoskriv utförs +- +- +- ms +- Milliseconds +- ms +- +- +- Movable toolbar +- Flyttbart verktygsfält +- +- +- Remember previously used databases +- Kom ihÃ¥g tidigare databaser +- +- +- Load previously open databases on startup +- Läs in tidigare öppna databaser vid programstart +- +- +- Remember database key files and security dongles +- Kom ihÃ¥g databasnyckelfiler och säkerhetsenheter +- +- +- Check for updates at application startup once per week +- Sök efter uppdateringar vid programstart, en gÃ¥ng per vecka +- +- +- Include beta releases when checking for updates +- Inkludera betaversioner vid sökning efter uppdateringar +- +- +- Language: +- SprÃ¥k: +- +- +- (restart program to activate) +- (starta om programmet för att aktivera) +- +- +- Minimize window after unlocking database +- Minimera fönstret efter upplÃ¥sning av databas +- +- +- Minimize when opening a URL +- Minimera vid öppning av URL +- +- +- Hide window when copying to clipboard +- Dölj fönstret vid kopiering till urklipp +- +- +- Minimize +- Mimimera +- +- +- Drop to background +- Flytta till bakgrunden +- +- +- Favicon download timeout: +- Tidsgräns för nerladdning av favicon: +- +- +- Website icon download timeout in seconds +- Tidsgräns för nerladdning av webbsideikon, i sekunder. +- +- +- sec +- Seconds +- sek +- +- +- Toolbar button style +- Knappstil för verktygsfält +- +- +- Language selection +- SprÃ¥kval +- +- +- Global auto-type shortcut +- Övergripande autoskrivgenväg +- +- +- Auto-type character typing delay milliseconds +- Fördröjning vid utomatisk skrivning, i millisekunder. +- +- +- Auto-type start delay milliseconds +- Autoskrivfördröjning i millisekunder +- +- +- Automatically launch KeePassXC at system startup +- Starta KeePassXC automatiskt vid systemstart +- +- +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- Spara databasfiler säkert (inaktivera vid problem med Dropbox etc) +- +- +- User Interface +- Användargränssnitt +- +- +- Toolbar button style: +- Knappstil för verktygsfält: +- +- +- Use monospaced font for notes +- Använd teckensnitt med fast teckenbredd för anteckningar +- +- +- Tray icon type: +- Typ av systemfältsikon: +- +- +- Reset settings to default… +- Ã…terställ inställningarna till standard... +- +- +- Auto-Type typing delay: +- Autoskriv skrivfördröjning: +- +- +- Global Auto-Type shortcut: +- Övergripande autoskrivgenväg: +- +- +- Auto-Type start delay: +- Autoskriv startfördröjning: +- +- +- Automatically save when locking database +- Spara automatiskt när databasen lÃ¥ses +- +- +- Automatically save non-data changes when locking database +- Spara icke-dataändringar automatiskt när databasen lÃ¥ses +- +- +- Tray icon type +- Typ av systemfältsikon +- +- +- +- ApplicationSettingsWidgetSecurity +- +- Timeouts +- Tidsgränser +- +- +- Clear clipboard after +- Rensa urklipp efter +- +- +- sec +- Seconds +- sek +- +- +- Lock databases after inactivity of +- LÃ¥s databaser efter inaktivitet i +- +- +- min +- min +- +- +- Forget TouchID after inactivity of +- Glöm TouchID efter inaktivitet i +- +- +- Convenience +- Bekvämlighet +- +- +- Lock databases when session is locked or lid is closed +- LÃ¥s databaserna när sessionen lÃ¥ses eller locket stängs +- +- +- Forget TouchID when session is locked or lid is closed +- Glöm TouchID när sessionen lÃ¥ses eller locket stängs +- +- +- Lock databases after minimizing the window +- LÃ¥s databaserna när fönstret minimeras +- +- +- Re-lock previously locked database after performing Auto-Type +- LÃ¥s tidigare lÃ¥st databas efter att ha utfört autoskriv +- +- +- Hide passwords in the entry preview panel +- Dölj lösenord i förhandsgranskningsrutan +- +- +- Hide entry notes by default +- Dölj posters anteckningar som standard +- +- +- Privacy +- Integritet +- +- +- Use DuckDuckGo service to download website icons +- Använd DuckDuckGo för att ladda ner webbplatsikoner +- +- +- Clipboard clear seconds +- Tidsgräns för urklippsrensing i sekunder +- +- +- Touch ID inactivity reset +- Ã…terställning av Touch-ID vid inaktivitet +- +- +- Database lock timeout seconds +- Tidsgräns för databaslÃ¥s i sekunder +- +- +- min +- Minutes +- min +- +- +- Clear search query after +- Radera söksträng efter +- +- +- Require password repeat when it is visible +- Kräv lösenordsupprepning när det är synligt +- +- +- Hide passwords when editing them +- Dölj lösenord när de redigeras +- +- +- Use placeholder for empty password fields +- Använd platshÃ¥llare för tomma lösenordfält +- +- +- +- AutoType +- +- Couldn't find an entry that matches the window title: +- Kunde inte hitta nÃ¥gon post som matchar fönstertiteln: +- +- +- Auto-Type - KeePassXC +- Autoskriv – KeePassXC +- +- +- Auto-Type +- Autoskriv +- +- +- The Syntax of your Auto-Type statement is incorrect! +- Din autoskrivsats innehÃ¥ller ett syntaxfel! +- +- +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- Det här autoskrivkommandot innehÃ¥ller en lÃ¥ng fördröjning. Vill du verkligen fortsätta? +- +- +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- Det här autoskrivkommandot innehÃ¥ller mycket lÃ¥ngsamma tangenttryckningar. Vill du verkligen fortsätta? +- +- +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- Det här autoskrivkommandot innehÃ¥ller parametrar som upprepas mÃ¥nga gÃ¥nger. Vill du verkligen fortsätta? +- +- +- Permission Required +- TillstÃ¥nd krävs +- +- +- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC kräver Ã¥tkomsttillstÃ¥nd för att utföra automatisk skrivning pÃ¥ postnivÃ¥. Om du redan har beviljat tillstÃ¥nd, kanske du behöver styarta om KeePassXC. +- +- +- +- AutoTypeAssociationsModel +- +- Window +- Fönster +- +- +- Sequence +- Sekvens +- +- +- Default sequence +- Standardsekvens +- +- +- +- AutoTypeMatchModel +- +- Group +- Grupp +- +- +- Title +- Titel +- +- +- Username +- Användarnamn +- +- +- Sequence +- Sekvens +- +- +- +- AutoTypeMatchView +- +- Copy &username +- Kopiera användar&namn +- +- +- Copy &password +- Kopiera &lösenord +- +- +- +- AutoTypePlatformMac +- +- Permission Required +- TillstÃ¥nd krävs +- +- +- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC kräver Ã¥tkomst- och inspelningstillstÃ¥nd för att utföra automatisk skrivning pÃ¥ övergripande nivÃ¥. Skärminspelning krävs för att använda fönstertiteln till att identifiera poster. Om du redan har beviljat tillstÃ¥nd, kanske du behöver styarta om KeePassXC. +- +- +- +- AutoTypeSelectDialog +- +- Auto-Type - KeePassXC +- Autoskriv – KeePassXC +- +- +- Select entry to Auto-Type: +- Välj post att skriva automatiskt: +- +- +- Search... +- Sök... +- +- +- +- BrowserAccessControlDialog +- +- KeePassXC - Browser Access Request +- KeePassXC - WebbläsarÃ¥tkomst +- +- +- %1 is requesting access to the following entries: +- %1 begär Ã¥tkomst till följande poster: +- +- +- Remember access to checked entries +- Kom ihÃ¥g Ã¥tkomst till markerade poster +- +- +- Remember +- Kom ihÃ¥g +- +- +- Allow access to entries +- TillÃ¥t Ã¥tkomst till poster +- +- +- Allow Selected +- TillÃ¥t markerade +- +- +- Deny All +- Neka alla +- +- +- Disable for this site +- Inaktivera för denna sida +- +- +- +- BrowserEntrySaveDialog +- +- KeePassXC-Browser Save Entry +- KeePassXC-Browser spara post +- +- +- Ok +- OK +- +- +- Cancel +- Avbryt +- +- +- You have multiple databases open. +-Please select the correct database for saving credentials. +- Du ha flera databaser öppna. +-Välj rätt databas för att spara inloggningsuppgifterna. +- +- +- +- BrowserService +- +- KeePassXC: New key association request +- KeePassXC: Ny nyckelassocieringsbegäran +- +- +- Save and allow access +- Spara och tillÃ¥t Ã¥tkomst +- +- +- KeePassXC: Overwrite existing key? +- KeePassXC: Vill du skriva över befintlig nyckel? +- +- +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- En delad krypteringsnyckel med namnet "%1" finns redan. +-Vill du skriva över den? +- +- +- KeePassXC: Update Entry +- KeePassXC: Uppdatera post +- +- +- Do you want to update the information in %1 - %2? +- Vill du uppdatera informationen i %1 - %2? +- +- +- Abort +- Avbryt +- +- +- Converting attributes to custom data… +- Konverterar attribut till anpassad data... +- +- +- KeePassXC: Converted KeePassHTTP attributes +- KeePassXC: Konverterade KeePassHTTP-attribut +- +- +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- Konverterade attribut frÃ¥n %1 post(er). +-Flyttade %2 nycklar till anpassad data. +- +- +- Successfully moved %n keys to custom data. +- Flyttade %n nyckel till anpassad data.Flyttade %n nycklar till anpassad data. +- +- +- KeePassXC: No entry with KeePassHTTP attributes found! +- KeePassXC: Hittade ingen post med KeePassHTTP-attribut! +- +- +- The active database does not contain an entry with KeePassHTTP attributes. +- Den aktiva databasen innehÃ¥ller inte nÃ¥gon post med KeePassHTTP-attribut. +- +- +- KeePassXC: Legacy browser integration settings detected +- KeePassXC: FörÃ¥ldrade inställningar för webbläsarintegrering har identifierats +- +- +- KeePassXC: Create a new group +- KeePassXC: Skapa en ny grupp +- +- +- A request for creating a new group "%1" has been received. +-Do you want to create this group? +- +- En begäran om att skapa en ny grupp "%1" har tagits emot. +-Vill du skapa denna grupp? +- +- +- +- Your KeePassXC-Browser settings need to be moved into the database settings. +-This is necessary to maintain your current browser connections. +-Would you like to migrate your existing settings now? +- Dina inställningar för KeePassXC-Browser behöver flyttas in i databasinställningarna. +-Detta är nödvändigt för att behÃ¥lla dina aktuella webbläsaranslutningar. +-Vill du migrera dina befintliga inställningar nu? +- +- +- Don't show this warning again +- Visa inte denna varning igen +- +- +- You have received an association request for the following database: +-%1 +- +-Give the connection a unique name or ID, for example: +-chrome-laptop. +- Du har fÃ¥tt en associationsbegäran för följande databas: +-%1 +- +-Ge anslutningen ett unikt namn eller ID, som t.ex.: +-chrome-laptop. +- +- +- +- BrowserSettingsWidget +- +- Dialog +- Dialog +- +- +- This is required for accessing your databases with KeePassXC-Browser +- Detta krävs för att KeePassXC-Browser ska kunna komma Ã¥t dina databaser +- +- +- Enable browser integration +- Aktivera webbläsarintegration +- +- +- General +- Allmänt +- +- +- Browsers installed as snaps are currently not supported. +- Webbläsare installerade via Snap, stöds för närvarande inte. +- +- +- Enable integration for these browsers: +- Aktivera integrering i dessa webbläsare: +- +- +- Vivaldi +- Vivaldi +- +- +- &Edge +- &Edge +- +- +- Firefox +- Firefox +- +- +- Tor Browser +- Tor Browser +- +- +- Brave +- Brave +- +- +- Google Chrome +- Google Chrome +- +- +- Chromium +- Chromium +- +- +- Show a notification when credentials are requested +- Credentials mean login data requested via browser extension +- Visa en avisering när inloggningsuppgifter begärs +- +- +- Request to unlock the database if it is locked +- Be om upplÃ¥sning av databasen när den är lÃ¥st +- +- +- Only entries with the same scheme (http://, https://, ...) are returned. +- Bara poster med samma protokoll (http://, https:// etc.) returneras. +- +- +- Match URL scheme (e.g., https://...) +- Matcha URL-mall (t.ex. https://...) +- +- +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- Returnerar bara de lämpligaste posterna för en viss webbadress istället för alla poster som rör den domänen. +- +- +- Return only best-matching credentials +- Returnera endast bäst matchande autentiseringsuppgifter +- +- +- Returns expired credentials. String [expired] is added to the title. +- Returnerar förfallna autentiseringsuppgifter [Förfallen] läggs till i titeln. +- +- +- Allow returning expired credentials +- TillÃ¥t utgÃ¥ngna autentiseringsuppgifter som retur +- +- +- All databases connected to the extension will return matching credentials. +- Alla databaser anslutna till tillägget, kommer att returnera matchande autentiseringsuppgifter. +- +- +- Search in all opened databases for matching credentials +- Credentials mean login data requested via browser extension +- Sök i alla öppnade databaser efter matchande autentiseringsuppgifter +- +- +- Sort matching credentials by title +- Credentials mean login data requested via browser extension +- Sortera matchande autentiseringsuppgifter efter titel +- +- +- Sort matching credentials by username +- Credentials mean login data requested via browser extension +- Sortera matchande autentiseringsuppgifter efter användarnamn +- +- +- Advanced +- Avancerat +- +- +- Never ask before accessing credentials +- Credentials mean login data requested via browser extension +- FrÃ¥ga aldrig innan Ã¥tkomst till autentiseringsuppgifter +- +- +- Never ask before updating credentials +- Credentials mean login data requested via browser extension +- FrÃ¥ga aldrig innan autentiseringsuppgifter uppdateras +- +- +- Do not ask permission for HTTP Basic Auth +- An extra HTTP Basic Auth setting +- Be inte om lov för HTTP Basic Auth +- +- +- Automatically creating or updating string fields is not supported. +- Automatiskt skapande eller uppdaterande av textfält stöds inte. +- +- +- Return advanced string fields which start with "KPH: " +- Returnera avancerade strängar som börjar med "KPH: " +- +- +- Don't display the popup suggesting migration of legacy KeePassHTTP settings. +- Visa inte popup-fönstret som föreslÃ¥r migrering av äldre KeePassHTTP-inställningar. +- +- +- Do not prompt for KeePassHTTP settings migration. +- FrÃ¥ga inte efter migrering av KeePassHTTP-inställningar. +- +- +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- Uppdaterar KeePassXC eller keepassxc-proxyns binärsökväg automatiskt, till ursprungliga meddelandeskript vid uppstart. +- +- +- Update native messaging manifest files at startup +- Uppdatera inbyggda meddelandemanifestfiler vid start +- +- +- Use a custom proxy location if you installed a proxy manually. +- Använd en anpassad proxy-inställning om du har installerat en proxy manuellt. +- +- +- Use a custom proxy location: +- Meant is the proxy for KeePassXC-Browser +- Använd en anpassad proxyplats: +- +- +- Custom proxy location field +- Fält för anpassad proxyplats +- +- +- Browser for custom proxy file +- Webbläsare för anpassad proxyfil +- +- +- Browse... +- Button for opening file dialog +- Bläddra... +- +- +- Use a custom browser configuration location: +- Använd en anpassad plats för webbläsarkonfiguration: +- +- +- Browser type: +- Webbläsartyp: +- +- +- Toolbar button style +- Knappstil för verktygsfält +- +- +- Config Location: +- Konfigurationsplats: +- +- +- Custom browser location field +- Platsfält för anpassad webbläsare +- +- +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- +- +- Browse for custom browser path +- Bläddra efter anpassad webbläsarsökväg +- +- +- Custom extension ID: +- Anpassat tilläggs-ID: +- +- +- Custom extension ID +- Anpassat tilläggs-ID +- +- +- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 +- PÃ¥ grund av Snaps sandlÃ¥deteknik, mÃ¥ste du köra ett skript för att aktivera webbläsarintegration.<br />Du kan hämta skriptet frÃ¥n %1 +- +- +- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 +- KeePassXC-Browser behövs för att webbläsarintegrationen ska fungera. <br />Ladda ner dent för %1 och %2 och %3. %4 +- +- +- Please see special instructions for browser extension use below +- Se specialinstruktioner för webbläsarintegreringens användning nedan +- +- +- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. +- <b>Fel:</b> Det gÃ¥r inte att hitta den anpassade proxyplatsen!<br/>Webbläsarintegration KOMMER INTE ATT FUNGERA utan proxyprogrammet. +- +- +- <b>Warning:</b> The following options can be dangerous! +- <b>Varning:</b> Följande alternativ kan vara farliga! +- +- +- Executable Files +- Körbara filer +- +- +- All Files +- Alla filer +- +- +- Select custom proxy location +- Välj en anpassad proxy +- +- +- Select native messaging host folder location +- Välj plats för den inbyggda värdmappen för meddelanden +- +- +- +- CloneDialog +- +- Clone Options +- Kloningsalternativ +- +- +- Append ' - Clone' to title +- Lägg till " - Klon" i titeln +- +- +- Replace username and password with references +- Ersätt användarnamn och lösenord med referenser +- +- +- Copy history +- Kopiera historik +- +- +- +- CsvImportWidget +- +- Import CSV fields +- Importera CSV-fält +- +- +- filename +- filnamn +- +- +- size, rows, columns +- storlek, rader, kolumner +- +- +- Encoding +- Kodning +- +- +- Codec +- Kodek +- +- +- Text is qualified by +- Text är kvalificerad av +- +- +- Fields are separated by +- Fält är separerade med +- +- +- Comments start with +- Kommentarer inleds med +- +- +- Consider '\' an escape character +- Betrakta "\" som ett kommentarstecken +- +- +- Preview +- Förhandsgranska +- +- +- Imported from CSV file +- Importerat frÃ¥n CSV-fil +- +- +- Original data: +- Ursprunglig data: +- +- +- Error +- Fel +- +- +- Error(s) detected in CSV file! +- Fel upptäckta i CSV-fil! +- +- +- [%n more message(s) skipped] +- [%n meddelande hoppades över][%n meddelanden hoppades över] +- +- +- CSV import: writer has errors: +-%1 +- CSV-import: Skrivare har fel: +-%1 +- +- +- Text qualification +- Textkvalificering +- +- +- Field separation +- Fältseparation +- +- +- Number of header lines to discard +- Antal rubrikrader att kassera +- +- +- CSV import preview +- Förhandsgranskning av CSV-import +- +- +- Column Association +- Kolumnassociering +- +- +- Last Modified +- Ändrad +- +- +- Password +- Lösenord +- +- +- Created +- Skapad +- +- +- Notes +- Anteckningar +- +- +- Title +- Titel +- +- +- Group +- Grupp +- +- +- URL +- URL +- +- +- Username +- Användarnamn +- +- +- Header lines skipped +- Rubriker undantagna +- +- +- First line has field names +- Första raden har fältnamn +- +- +- Not Present +- Inte tillgänglig +- +- +- Column %1 +- Kolumn %1 +- +- +- TOTP +- TOTP +- +- +- Icon +- Ikon +- +- +- +- CsvParserModel +- +- %n column(s) +- %n kolumn%n kolumner +- +- +- %1, %2, %3 +- file info: bytes, rows, columns +- %1, %2, %3 +- +- +- %n byte(s) +- %n byte%n byte +- +- +- %n row(s) +- %n rad%n rader +- +- +- +- Database +- +- File %1 does not exist. +- Filen %1 finns inte. +- +- +- Unable to open file %1. +- Kunde inte öppna filen %1. +- +- +- Error while reading the database: %1 +- Fel vid inläsning av databas: %1 +- +- +- File cannot be written as it is opened in read-only mode. +- Filen kan inte skrivas eftersom den är öppnad i skrivskyddat läge. +- +- +- Key not transformed. This is a bug, please report it to the developers! +- Nyckeln har inte transformerats. Detta är ett programfel, rapportera det till utvecklarna! +- +- +- %1 +-Backup database located at %2 +- %1 +-Säkerhetskopierad databas hittad i %2 +- +- +- Could not save, database does not point to a valid file. +- Kunde inte spara. Databasen pekar inte mot en giltig fil. +- +- +- Could not save, database file is read-only. +- Kunde inte spara. Databasfilen är skrivskyddad. +- +- +- Database file has unmerged changes. +- Databasfilen har ändringar som inte har infogats. +- +- +- Recycle Bin +- Papperskorg +- +- +- Passwords +- Root group name +- Lösenord +- +- +- Database save is already in progress. +- Dtabasens sparande pÃ¥gÃ¥r redan. +- +- +- Could not save, database has not been initialized! +- Kunde inte spara, databasen har inte startats! +- +- +- +- DatabaseOpenDialog +- +- Unlock Database - KeePassXC +- LÃ¥s upp databas - KeePassXC +- +- +- +- DatabaseOpenWidget +- +- Key File: +- Nyckelfil: +- +- +- Refresh +- Uppdatera +- +- +- Don't show this warning again +- Visa inte denna varning igen +- +- +- All files +- Alla filer +- +- +- Key files +- Nyckelfiler +- +- +- Select key file +- Välj nyckelfil +- +- +- Failed to open key file: %1 +- Kunde inte öppna nyckelfil: %1 +- +- +- Unlock KeePassXC Database +- LÃ¥s upp KeePassXC-databas +- +- +- Enter Password: +- Ange lösenord: +- +- +- Password field +- Lösenord +- +- +- Hardware key slot selection +- Val av plats för hÃ¥rdvarunyckel +- +- +- Browse for key file +- Bläddra efter nyckelfil +- +- +- Browse... +- Bläddra... +- +- +- Refresh hardware tokens +- Uppdatera hÃ¥rdvaru-tokens +- +- +- Hardware Key: +- HÃ¥rdvarunyckel: +- +- +- Hardware key help +- Hjälp med hÃ¥rdvarunyckel +- +- +- TouchID for Quick Unlock +- TouchID för snabb upplÃ¥sning +- +- +- Unlock failed and no password given +- UpplÃ¥sning misslyckades och lösenord saknas +- +- +- Unlocking the database failed and you did not enter a password. +-Do you want to retry with an "empty" password instead? +- +-To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. +- Kunde inte lÃ¥sa upp databasen och du angav inget lösenord. +-Vill du försöka igen, med ett "tomt" lösenord istället? +- +-För att förhindra att detta fel uppstÃ¥r igen, mÃ¥ste du gÃ¥ till "Databasinställningar/Säkerhet" och Ã¥terställa dittlösenord. +- +- +- Retry with empty password +- Försök med tomt lösenord +- +- +- Enter Additional Credentials (if any): +- Ange fler autentiseringsuppgifter (om det finns nÃ¥gra): +- +- +- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +-<p>Click for more information...</p> +- <p>Du kan använda en hÃ¥rdvarunyckel sÃ¥som <strong>YubiKey</strong> eller <strong>OnlyKey</strong> med anslutningsplatser konfigurerade för HMAC-SHA1.</p> +-<p>Klicka för mer information...</p> +- +- +- Key file help +- Nyckelfilshjälp +- +- +- ? +- ? +- +- +- Cannot use database file as key file +- Kan inte använda en databasfil som nyckelfil +- +- +- You cannot use your database file as a key file. +-If you do not have a key file, please leave the field empty. +- Du kan inte använda din databasfil som nyckelfil. +-Om du inte har nÃ¥gon nyckelfil, lämnar du fältet tomt. +- +- +- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> +- <p>Som tillägg till ditt huvudlösenord, kan du använda en hemlig fil för att förbättra säkerheten i din databas. En sÃ¥dan fil kan genereras i databasens säkerhetsinställningar.</p><p>Detta är <strong>inte</strong> din *.kdbx-databasfil!<br>Om du inte har nÃ¥gon nyckelfil, lämnar du fältet tomt.</p><p>Klicka för mer information...</p> +- +- +- Key file to unlock the database +- Nyckelfil för att lÃ¥sa upp databasen +- +- +- Please touch the button on your YubiKey! +- Rör vid knappen pÃ¥ din YubiKey! +- +- +- Detecting hardware keys… +- Identifierar hÃ¥rdvarunycklar... +- +- +- No hardware keys detected +- Inga hÃ¥rdvarunycklar identifierade +- +- +- Select hardware key… +- Välj hÃ¥rdvarunyckel... +- +- +- Old key file format +- Gammalt nyckelfilsformat +- +- +- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> +- Du använder ett äldre nyckelfilsformat som kanske<br>inte kommer att stödjas i framtiden.<br><br>Överväg att generera en ny nyckelfil genom att gÃ¥ till: <br><strong>Databas / Databassäkerhet / Ändra nyckelfil.</strong><br> +- +- +- +- DatabaseSettingWidgetMetaData +- +- Passwords +- Lösenord +- +- +- +- DatabaseSettingsDialog +- +- Advanced Settings +- Avancerade inställningar +- +- +- General +- Allmänt +- +- +- Security +- Säkerhet +- +- +- Encryption Settings +- Krypteringsinställningar +- +- +- Browser Integration +- Webbläsarintegrering +- +- +- Database Credentials +- Databasens inloggningsuppgifter +- +- +- +- DatabaseSettingsWidgetBrowser +- +- KeePassXC-Browser settings +- KeePassXC-Browser-inställningar +- +- +- Stored keys +- Lagrade nycklar +- +- +- Remove +- Ta bort +- +- +- Delete the selected key? +- Vill du ta bort den valda nyckeln? +- +- +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- Vill du verkligen ta bort den valda nyckeln? +-Detta kan förhindra anslutning till webbläsartillägget. +- +- +- Key +- Nyckel +- +- +- Value +- Värde +- +- +- Enable Browser Integration to access these settings. +- Aktivera webbläsarintegrering för Ã¥tkomst till dessa inställningar. +- +- +- Disconnect all browsers +- Koppla bort alla webbläsare +- +- +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- Vill du verkligen koppla bort alla webbläsare? +-Detta kan förhindra anslutning till webbläsartillägget. +- +- +- KeePassXC: No keys found +- KeePassXC: Inga nycklar hittades +- +- +- No shared encryption keys found in KeePassXC settings. +- Inga delade krypteringsnycklar hittades i KeePassXC:s inställningar. +- +- +- KeePassXC: Removed keys from database +- KeePassXC: Tog bort nycklar frÃ¥n databasen +- +- +- Successfully removed %n encryption key(s) from KeePassXC settings. +- Tog bort %n krypteringsnyckel frÃ¥n KeePassXC:s inställningar.Tog bort %n krypteringsnycklar frÃ¥n KeePassXC:s inställningar. +- +- +- Forget all site-specific settings on entries +- Glöm alla sidspecifika inställningar i befintliga poster +- +- +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- Vill du verkligen glömma alla sidspecifika inställningar i varje post? +-Behörighet att komma Ã¥t posterna kommer att Ã¥terkallas. +- +- +- Removing stored permissions… +- Tar bort lagrade rättigheter... +- +- +- Abort +- Avbryt +- +- +- KeePassXC: Removed permissions +- KeePassXC: Tog bort behörigheter +- +- +- Successfully removed permissions from %n entry(s). +- Tog bort behörighet frÃ¥n %n post.Tog bort behörigheter frÃ¥n %n poster. +- +- +- KeePassXC: No entry with permissions found! +- KeePassXC: Ingen post med behörigheter hittades! +- +- +- The active database does not contain an entry with permissions. +- Den aktiva databasen innehÃ¥ller ingen post med behörigheter. +- +- +- Move KeePassHTTP attributes to custom data +- Flytta KeePassHTTP-attribut till anpassad data +- +- +- Do you really want to move all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- Vill du verkligen flytta all äldre webbläsarintegrationsdata till den senaste standarden? +-Detta är nödvändigt för att fÃ¥ kompatibilitet med webbläsartillägget. +- +- +- Stored browser keys +- Lagrade webbläsarnycklar +- +- +- Remove selected key +- Ta bort markerad nyckel +- +- +- Move KeePassHTTP attributes to KeePassXC-Browser custom data +- Flytta KeePassHTTP-attribut till anpassad data för KeePassXC-Browser +- +- +- Refresh database root group ID +- Uppdatera databasens rotgrupps-ID +- +- +- Created +- Skapad +- +- +- Refresh database ID +- Uppdatera databas-ID +- +- +- Do you really want refresh the database ID? +-This is only necessary if your database is a copy of another and the browser extension cannot connect. +- Vill du verkligen uppdatera databas-ID? +-Detta är bara nödvändigt om databasen är en kopia av en annan och webbläsartillägget inte kan ansluta. +- +- +- +- DatabaseSettingsWidgetDatabaseKey +- +- Add additional protection... +- Lägg till ytterligare skydd... +- +- +- No password set +- Inget lösenord angivet +- +- +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- VARNING! Du har inte angivit nÃ¥got lösenord. Du avrÃ¥ds bestämt frÃ¥n att använda en databas utan lösenord! +- +-Vill du verkligen fortsätta utan lösenord? +- +- +- Continue without password +- Fortsätt utan lösenord +- +- +- No encryption key added +- Ingen krypteringsnyckel tillagd +- +- +- You must add at least one encryption key to secure your database! +- Du mÃ¥ste lägga till minst en krypteringsnyckel, för att säkra din databas! +- +- +- Unknown error +- Okänt fel +- +- +- Failed to change database credentials +- Kunde inte ändra databasens inloggningsuppgifter +- +- +- +- DatabaseSettingsWidgetEncryption +- +- Encryption Algorithm: +- Krypteringsalgoritm: +- +- +- AES: 256 Bit (default) +- AES: 256 bitar (standard) +- +- +- Twofish: 256 Bit +- Twofish: 256 bitar +- +- +- Key Derivation Function: +- Nyckelhärledningsfunktion: +- +- +- Transform rounds: +- Transformeringsrundor: +- +- +- Memory Usage: +- Minnesanvändning: +- +- +- Parallelism: +- Parallellitet: +- +- +- Decryption Time: +- Dekrypteringstid: +- +- +- ?? s +- ?? s +- +- +- Change +- Ändra +- +- +- Higher values offer more protection, but opening the database will take longer. +- Högre värde medger bättre skydd, men databasen tar längre tid att öppna. +- +- +- Database format: +- Databasformat: +- +- +- This is only important if you need to use your database with other programs. +- Detta är bara viktigt om du behöver använda din databas med andra program. +- +- +- KDBX 4.0 (recommended) +- KDBX 4.0 (rekommenderas) +- +- +- KDBX 3.1 +- KDBX 3.1 +- +- +- unchanged +- Database decryption time is unchanged +- oförändrad +- +- +- Number of rounds too high +- Key transformation rounds +- För högt antal rundor +- +- +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or days (or even longer) to open! +- Du använder ett mycket högt antal nyckeltransformeringsrundor med Argon2. +- +-Om du behÃ¥ller detta antal, kan din databas ta timmar eller dagar (eller t.om. längre) att öppna! +- +- +- Understood, keep number +- Uppfattat, behÃ¥ll antalet +- +- +- Cancel +- Avbryt +- +- +- Number of rounds too low +- Key transformation rounds +- För lÃ¥gt antal rundor +- +- +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database may be too easy to crack! +- Du använder ett mycket lÃ¥gt antal nyckeltransformeringsrundor med AES-KDF. +- +-Om du behÃ¥ller detta antal, kan din databas bli för lätt att hacka! +- +- +- KDF unchanged +- KDF oförändrad +- +- +- Failed to transform key with new KDF parameters; KDF unchanged. +- Kunde inte transformera nyckeln med nya KDF-parametrar. KDF oförändrad. +- +- +- MiB +- Abbreviation for Mebibytes (KDF settings) +- MiB MiB +- +- +- thread(s) +- Threads for parallel execution (KDF settings) +- trÃ¥d trÃ¥dar +- +- +- Change existing decryption time +- Ändra befintlig avkrypteringstid +- +- +- Decryption time in seconds +- Avkrypteringstid i sekunder +- +- +- Database format +- Databasformat +- +- +- Encryption algorithm +- Krypteringsalgoritm +- +- +- Key derivation function +- Nyckelhärledningsfunktion +- +- +- Transform rounds +- Transformeringsrundor +- +- +- Memory usage +- Minnesanvändning +- +- +- Parallelism +- Parallellitet +- +- +- ?? ms +- ?? ms +- +- +- ? s +- ? s +- +- +- +- DatabaseSettingsWidgetFdoSecrets +- +- Exposed Entries +- Exponerade poster +- +- +- Don't expose this database +- Visa inte denna databas +- +- +- Expose entries under this group: +- Visa poster under denna grupp: +- +- +- Enable Secret Service to access these settings. +- Aktivera Secret Service för att komma Ã¥t dessa inställningar. +- +- +- +- DatabaseSettingsWidgetGeneral +- +- Database Meta Data +- Databasens metadata +- +- +- Database name: +- Databasnamn: +- +- +- Database description: +- Databasbeskrivning: +- +- +- Default username: +- Standardanvändarnamn: +- +- +- History Settings +- Historikinställningar +- +- +- Max. history items: +- Max antal historikposter: +- +- +- Max. history size: +- Maximal historikstorlek: +- +- +- MiB +- MiB +- +- +- Use recycle bin +- Använd papperskorgen +- +- +- Additional Database Settings +- Ytterligare databasinställningar +- +- +- Database name field +- Databasens namn +- +- +- Database description field +- Databasens beskrivning +- +- +- Default username field +- Standard användarnamn +- +- +- Maximum number of history items per entry +- Max antal historikobjekt per post +- +- +- Maximum size of history per entry +- Max historikstorlek per post +- +- +- Delete Recycle Bin +- Ta bort papperskorgen +- +- +- Do you want to delete the current recycle bin and all its contents? +-This action is not reversible. +- Vill du ta bort papperskorgen med allt innehÃ¥ll? +-Denna Ã¥tgärd kan inte Ã¥ngras. +- +- +- (old) +- (gammal) +- +- +- Enable compression (recommended) +- Aktivera komprimering (rekommenderas) +- +- +- +- DatabaseSettingsWidgetKeeShare +- +- Sharing +- Delning +- +- +- Breadcrumb +- Synlig sökväg +- +- +- Type +- Typ +- +- +- Path +- Sökväg +- +- +- Last Signer +- Senaste undertecknare +- +- +- Certificates +- Certifikat +- +- +- > +- Breadcrumb separator +- > +- +- +- +- DatabaseSettingsWidgetMetaDataSimple +- +- Database Name: +- Databasnamn: +- +- +- Description: +- Beskrivning: +- +- +- Database name field +- Databasens namn +- +- +- Database description field +- Databasens beskrivning +- +- +- +- DatabaseTabWidget +- +- KeePass 2 Database +- KeePass 2-databas +- +- +- All files +- Alla filer +- +- +- Open database +- Öppna databas +- +- +- CSV file +- CSV-fil +- +- +- Merge database +- SlÃ¥ samman databas +- +- +- Open KeePass 1 database +- Öppna KeePass 1-databas +- +- +- KeePass 1 database +- KeePass 1-databas +- +- +- Export database to CSV file +- Exportera databasen till en CSV-fil +- +- +- Writing the CSV file failed. +- Kunde inte skriva CSV-filen. +- +- +- Database creation error +- Fel vid databasskapande +- +- +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- Den skapade databasen har ingen nyckel eller KDF, vägrar att spara den. +-Detta är definitivt ett programfel, rapportera det till utvecklarna. +- +- +- Select CSV file +- Välj CSV-fil +- +- +- New Database +- Ny databas +- +- +- %1 [New Database] +- Database tab name modifier +- %1 [Ny databas] +- +- +- %1 [Locked] +- Database tab name modifier +- %1 [LÃ¥st] +- +- +- %1 [Read-only] +- Database tab name modifier +- %1 [Skrivskyddad] +- +- +- Failed to open %1. It either does not exist or is not accessible. +- Kunde öppna %1. Antingen finns den inte eller ocksÃ¥ är den inte Ã¥tkomstbar. +- +- +- Export database to HTML file +- Exportera databas till HTML-fil +- +- +- HTML file +- HTML-fil +- +- +- Writing the HTML file failed. +- Kunde inte skriva HTML-filen. +- +- +- Export Confirmation +- Exportbekräftelse +- +- +- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? +- Du är pÃ¥ väg att exportera din databas till en okrypterad fil. Detta kommer att lämna dina lösenord annan känslig information i ett sÃ¥rbart skick (klartext). Vill du verkligen fortsätta? +- +- +- Open OPVault +- Öppna OPVault +- +- +- +- DatabaseWidget +- +- Searching... +- Söker... +- +- +- Do you really want to delete the entry "%1" for good? +- Vill du verkligen ta bort "%1" för gott? +- +- +- Do you really want to move entry "%1" to the recycle bin? +- Vill du verkligen flytta "%1" till papperskorgen? +- +- +- Do you really want to move %n entry(s) to the recycle bin? +- Vill du verkligen flytta %n post till papperskorgen?Vill du verkligen flytta %n poster till papperskorgen? +- +- +- Execute command? +- Vill du köra kommandot? +- +- +- Do you really want to execute the following command?<br><br>%1<br> +- Vill du verkligen köra följande kommando?<br><br>%1<br> +- +- +- Remember my choice +- KomihÃ¥g mitt val +- +- +- Do you really want to delete the group "%1" for good? +- Vill du verkligen ta bort gruppen "%1" för gott? +- +- +- No current database. +- Ingen aktuell databas. +- +- +- No source database, nothing to do. +- Ingen källdatabas, inget att göra. +- +- +- Search Results (%1) +- Sökresultat (%1) +- +- +- No Results +- Inget resultat +- +- +- File has changed +- Filen har ändrats +- +- +- The database file has changed. Do you want to load the changes? +- Databasfilen har ändrats. Vill du läsa in ändringarna? +- +- +- Merge Request +- SlÃ¥ samman begäran +- +- +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- Databasfilen har ändrats och du har osparade ändringar. +-Vill du slÃ¥ samman dina ändringar? +- +- +- Empty recycle bin? +- Vill du tömma papperskorgen? +- +- +- Are you sure you want to permanently delete everything from your recycle bin? +- Vill du verkligen ta bort allt frÃ¥n din papperskorg permanent? +- +- +- Do you really want to delete %n entry(s) for good? +- Vill du verkligen ta bort %n post för gott?Vill du verkligen ta bort %n poster för gott? +- +- +- Delete entry(s)? +- Vill du ta bort posten?Vill du ta bort posterna? +- +- +- Move entry(s) to recycle bin? +- Vill du flytta posten till papperskorgen?Vill du flytta posterna till papperskorgen? +- +- +- Lock Database? +- Vill du lÃ¥sa databasen? +- +- +- You are editing an entry. Discard changes and lock anyway? +- Du redigerar en post. Vill du förkasta ändringarna och lÃ¥sa ändÃ¥? +- +- +- "%1" was modified. +-Save changes? +- "%1" har ändrats. +-Vill du spara ändringarna? +- +- +- Database was modified. +-Save changes? +- Databasen har ändrats. +-Vill du spara ändringarna? +- +- +- Save changes? +- Vill du spara ändringarna? +- +- +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- Kunde inte öppna den nya databasen vid försök att läsa in automatisk. +-Fel: %1 +- +- +- Disable safe saves? +- Vill du inaktivera "Spara säkert"? +- +- +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- KeePassXC har misslyckats med att spara databasen flera gÃ¥nger. Det beror troligen pÃ¥ att filsynkroniseringstjänsten har lÃ¥st filsparandet. +-Vill du inaktivera "Spara säkert" och försöka igen? +- +- +- Passwords +- Lösenord +- +- +- Save database as +- Spara databasen som +- +- +- KeePass 2 Database +- KeePass 2-databas +- +- +- Replace references to entry? +- Vill du ersätta referenserna till posten? +- +- +- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? +- Posten "%1" har %2 referens. Vill du skriva över referensen med nya värden, hoppa över den här posten eller ta bort ändÃ¥?Posten "%1" har %2 referenser. Vill du skriva över referenserna med nya värden, hoppa över den här posten eller ta bort ändÃ¥? +- +- +- Delete group +- Ta bort gruppen +- +- +- Move group to recycle bin? +- Vill du flytta gruppen till papperskorgen? +- +- +- Do you really want to move the group "%1" to the recycle bin? +- Vill du verkligen flytta "%1" till papperskorgen? +- +- +- Successfully merged the database files. +- Slog samman databasfilerna. +- +- +- Database was not modified by merge operation. +- Databasen ändrades inte av sammanslagningen. +- +- +- Shared group... +- Delad grupp... +- +- +- Writing the database failed: %1 +- Kunde inte skriva databasen: %1 +- +- +- This database is opened in read-only mode. Autosave is disabled. +- Databasen är öppnad i skrivskyddat läge. Autospar är inaktiverat. +- +- +- Save database backup +- Spara säkerhetskopia av databasen +- +- +- Could not find database file: %1 +- Kunde inte hitta databasfilen: %1 +- +- +- +- EditEntryWidget +- +- Entry +- Post +- +- +- Advanced +- Avancerat +- +- +- Icon +- Ikon +- +- +- Auto-Type +- Autoskriv +- +- +- Properties +- Egenskaper +- +- +- History +- Historik +- +- +- SSH Agent +- SSH-tjänst +- +- +- n/a +- n/a +- +- +- (encrypted) +- (krypterad) +- +- +- Select private key +- Välj privat nyckel +- +- +- Entry history +- Posthistorik +- +- +- Add entry +- Lägg till post +- +- +- Edit entry +- Redigera post +- +- +- New attribute +- Nytt attribut +- +- +- Are you sure you want to remove this attribute? +- Vill du verkligen ta bort detta attribut? +- +- +- Tomorrow +- Imorgon +- +- +- %n week(s) +- %n vecka%n veckor +- +- +- %n month(s) +- %n mÃ¥nad%n mÃ¥nader +- +- +- Entry updated successfully. +- Posten uppdaterad. +- +- +- New attribute %1 +- Nytt attribut %1 +- +- +- %n year(s) +- %n Ã¥r%n Ã¥r +- +- +- Confirm Removal +- Bekräfta borttagning +- +- +- Browser Integration +- Webbläsarintegrering +- +- +- <empty URL> +- <tom URL> +- +- +- Are you sure you want to remove this URL? +- Vill du verkligen ta bort denna URL? +- +- +- Reveal +- Visa +- +- +- Hide +- Dölj +- +- +- Unsaved Changes +- Osparade ändringar +- +- +- Would you like to save changes to this entry? +- Vill du spara ändringarna i denna post? +- +- +- [PROTECTED] Press Reveal to view or edit +- [SKYDDAD] Tryck "Visa" för att visa eller redigera +- +- +- Invalid Entry +- Ogiltig post +- +- +- An external merge operation has invalidated this entry. +-Unfortunately, any changes made have been lost. +- En extern sammanslagningsÃ¥tgärd har ogiltigförklarat denna post. +-Alla genomförda ändringar kan tyvärr ha förlorats. +- +- +- +- EditEntryWidgetAdvanced +- +- Additional attributes +- Ytterligare attribut +- +- +- Add +- Lägg till +- +- +- Remove +- Ta bort +- +- +- Edit Name +- Redigera namn +- +- +- Protect +- Skydda +- +- +- Reveal +- Visa +- +- +- Attachments +- Bilagor +- +- +- Foreground Color: +- Förgrundsfärg: +- +- +- Background Color: +- Bakgrundsfärg: +- +- +- Attribute selection +- Attributval +- +- +- Attribute value +- Attributvärde +- +- +- Add a new attribute +- Lägg till nytt attribut +- +- +- Remove selected attribute +- Ta bort markerade attribut +- +- +- Edit attribute name +- Redigera attributnamn +- +- +- Toggle attribute protection +- Attributskydd av/pÃ¥ +- +- +- Show a protected attribute +- Visa ett skyddat attribut +- +- +- Foreground color selection +- Val av förgrundsfärg +- +- +- Background color selection +- Val av bakgrundsfärg +- +- +- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> +- <html><head/><body><p>Vid aktivering visas posten inte i rapporter som Hälsokontroll och HIBP även om den inte matchar kvalitetskraven (t.ex. lösenordsentropin eller Ã¥teranvändning). Du kan aktivera om lösenordet ligger utanför din kontroll (t.ex. om det behöver vara en fyrsiffrig PIN-kod) för att förhindra att det belamrar rapporterna.</p></body></html> +- +- +- Exclude from database reports +- Undanta frÃ¥n databasrapporter +- +- +- +- EditEntryWidgetAutoType +- +- Enable Auto-Type for this entry +- Aktivera autoskriv för denna post +- +- +- Window Associations +- Fönsterassociering +- +- +- + +- + +- +- +- - +- - +- +- +- Window title: +- Fönstertitel: +- +- +- Use a specific sequence for this association: +- Använd en specifik sekvens för denna association: +- +- +- Custom Auto-Type sequence +- Anpassad autoskrivsekvens +- +- +- Open Auto-Type help webpage +- Öppna autoskrivhjälpens hemsida +- +- +- Existing window associations +- Befintliga fönsterassociationer +- +- +- Add new window association +- Lägg till ny fönsterassociation +- +- +- Remove selected window association +- Ta bort markerad fönsterassociation +- +- +- You can use an asterisk (*) to match everything +- Du kan använda en asterisk (*) för att matcha allt (jokertecken) +- +- +- Set the window association title +- Ange fönsterassociationstitel +- +- +- You can use an asterisk to match everything +- Du kan använda en asterisk som jokertecken +- +- +- Custom Auto-Type sequence for this window +- Anpassad autoskrivsekvens för detta fönster +- +- +- Inherit default Auto-Type sequence from the group +- Ärv standard auto-skriv sekvens för grupp +- +- +- Use custom Auto-Type sequence: +- Använd egen auto-skriv sekvens: +- +- +- +- EditEntryWidgetBrowser +- +- These settings affect to the entry's behaviour with the browser extension. +- Dessa inställningar pÃ¥verkar posternas beteende i webbläsartillägget. +- +- +- General +- Allmänt +- +- +- Skip Auto-Submit for this entry +- Undanta autoskriv för den här posten +- +- +- Hide this entry from the browser extension +- Dölj den här posten frÃ¥n webbläsartillägget +- +- +- Additional URL's +- Ytterligare URL:er +- +- +- Add +- Lägg till +- +- +- Remove +- Ta bort +- +- +- Edit +- Redigera +- +- +- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. +- Skicka bara den här inställningen till webbläsaren för HTTP-autentisering. Vid aktivering visas inte den här posten i normala inloggningsformulär. +- +- +- Use this entry only with HTTP Basic Auth +- Använd den här posten endast med HTTP Basic Auth +- +- +- +- EditEntryWidgetHistory +- +- Show +- Visa +- +- +- Restore +- Ã…terställ +- +- +- Delete +- Ta bort +- +- +- Delete all +- Ta bort alla +- +- +- Entry history selection +- Posthistorik +- +- +- Show entry at selected history state +- Visa posten i markerad historikstatus +- +- +- Restore entry to selected history state +- Ã…terställ posten till markerad historikstatus +- +- +- Delete selected history state +- Ta bort markerad historikstatus +- +- +- Delete all history +- Ta bort all historik +- +- +- +- EditEntryWidgetMain +- +- URL: +- URL: +- +- +- Password: +- Lösenord: +- +- +- Title: +- Titel: +- +- +- Presets +- Förinställningar +- +- +- Toggle the checkbox to reveal the notes section. +- Klicka i kryssrutan för att visa anteckningssektionen. +- +- +- Username: +- Användarnamn: +- +- +- Url field +- URL +- +- +- Download favicon for URL +- Ladda ner favicon för URL:en +- +- +- Password field +- Lösenord +- +- +- Toggle notes visible +- Visa/Dölj anteckningar +- +- +- Expiration field +- Förfaller +- +- +- Expiration Presets +- Förinställningar för förfallodag +- +- +- Expiration presets +- Förinställningar för förfallodag +- +- +- Notes field +- Anteckningar +- +- +- Title field +- Titel +- +- +- Username field +- Användarnamn +- +- +- Toggle expiration +- Förfallodag pÃ¥/av +- +- +- Notes: +- Anteckningar: +- +- +- https://example.com +- https://exempel.com +- +- +- Expires: +- Förfaller: +- +- +- Edit Entry +- Redigera post +- +- +- +- EditEntryWidgetSSHAgent +- +- Form +- Formulär +- +- +- Remove key from agent after +- Ta bort nyckeln frÃ¥n agenten efter +- +- +- seconds +- sekunder +- +- +- Fingerprint +- Fingeravtryck +- +- +- Remove key from agent when database is closed/locked +- Ta bort nyckeln frÃ¥n bakgrundstjänsten när databasen stängs/lÃ¥ses +- +- +- Public key +- Offentlig nyckel +- +- +- Add key to agent when database is opened/unlocked +- Lägg till nyckeln till bakgrundstjänsten när databasen öppnas/lÃ¥ses upp +- +- +- Comment +- Kommentar +- +- +- Decrypt +- Avkryptera +- +- +- n/a +- Ej tillämplig +- +- +- Copy to clipboard +- Kopiera till urklipp +- +- +- Private key +- Privat nyckel +- +- +- External file +- Extern fil +- +- +- Browse... +- Button for opening file dialog +- Bläddra... +- +- +- Attachment +- Bilaga +- +- +- Add to agent +- Lägg till i bakgrundstjänsten +- +- +- Remove from agent +- Ta bort frÃ¥n bakgrundstjänsten +- +- +- Require user confirmation when this key is used +- Kräv användarbekräftelse när denna nyckel används +- +- +- Remove key from agent after specified seconds +- Ta bort nyckeln frÃ¥n bakgrundstjänsten efter specificerat antal sekunder +- +- +- Browser for key file +- Bläddra efter nyckelfil +- +- +- External key file +- Extern nyckelfil +- +- +- Select attachment file +- Välj bilagefil +- +- +- +- EditGroupWidget +- +- Group +- Grupp +- +- +- Icon +- Ikon +- +- +- Properties +- Egenskaper +- +- +- Add group +- Lägg till grupp +- +- +- Edit group +- Redigera grupp +- +- +- Enable +- Aktivera +- +- +- Disable +- Avaktivera +- +- +- Inherit from parent group (%1) +- Ärv frÃ¥n överordnad grupp (%1) +- +- +- Entry has unsaved changes +- Posten har osparade ändringar +- +- +- +- EditGroupWidgetKeeShare +- +- Type: +- Typ: +- +- +- Path: +- Sökväg: +- +- +- Password: +- Lösenord: +- +- +- Inactive +- Inaktiv +- +- +- KeeShare unsigned container +- KeeShare osignerad behÃ¥llare +- +- +- KeeShare signed container +- KeeShare signerad behÃ¥llare +- +- +- Select import source +- Välj importkälla +- +- +- Select export target +- Välj exportmÃ¥l +- +- +- Select import/export file +- Välj import-/exportfil +- +- +- Clear +- Rensa +- +- +- Import +- Importera +- +- +- Export +- Exportera +- +- +- Synchronize +- Synkronisera +- +- +- Your KeePassXC version does not support sharing this container type. +-Supported extensions are: %1. +- Din PassXC-version stöder inte delning av den här behÃ¥llartypen. +-Filtyper som stöds är: %1. +- +- +- %1 is already being exported by this database. +- %1 exporteras redan av den här databasen. +- +- +- %1 is already being imported by this database. +- %1 importeras redan av den här databasen. +- +- +- %1 is being imported and exported by different groups in this database. +- %1 importeras och exporteras av olika grupper i den här databasen. +- +- +- KeeShare is currently disabled. You can enable import/export in the application settings. +- KeeShare is a proper noun +- KeeShare är inaktiverat. Du kan aktivera import/export i programinställningarna. +- +- +- Database export is currently disabled by application settings. +- Databasexport är inaktiverat av programinställningarna. +- +- +- Database import is currently disabled by application settings. +- Databasimport är inaktiverat av programinställningarna. +- +- +- Sharing mode field +- Delningsläge +- +- +- Path to share file field +- Sökväg till delningsfil +- +- +- Password field +- Lösenord +- +- +- Clear fields +- Rensa +- +- +- Browse for share file +- Bläddra efter delningsfil +- +- +- Browse... +- Bläddra... +- +- +- +- EditGroupWidgetMain +- +- Name field +- Namn +- +- +- Notes field +- Anteckningar +- +- +- Toggle expiration +- Förfallodag pÃ¥/av +- +- +- Auto-Type toggle for this and sub groups +- Autoskriv pÃ¥/av för denna grupp och undergrupper +- +- +- Expiration field +- Förfaller +- +- +- Search toggle for this and sub groups +- Sökning pÃ¥/av för denna grupp och undergrupper +- +- +- Default auto-type sequence field +- Standard autoskrivsekvens +- +- +- Expires: +- Förfaller: +- +- +- Use default Auto-Type sequence of parent group +- Använd standard autoskrivsekvens för överordnad grupp +- +- +- Auto-Type: +- Autoskriv: +- +- +- Search: +- Sök: +- +- +- Notes: +- Anteckningar: +- +- +- Name: +- Namn: +- +- +- Set default Auto-Type sequence +- Ange standard autoskrivsekvens +- +- +- Edit Group +- Redigera grupp +- +- +- +- EditWidgetIcons +- +- Add custom icon +- Lägg till anpassad ikon +- +- +- Delete custom icon +- Ta bort anpassad ikon +- +- +- Download favicon +- Ladda ner favicon +- +- +- Unable to fetch favicon. +- Kunde inte hämta favicon. +- +- +- Images +- Bilder +- +- +- All files +- Alla filer +- +- +- Confirm Delete +- Bekräfta borttagning +- +- +- Select Image(s) +- Välj bild(er) +- +- +- Successfully loaded %1 of %n icon(s) +- Läste in %1 av %n ikonerLäste in %1 av %n ikoner +- +- +- No icons were loaded +- Inga ikoner lästes in +- +- +- %n icon(s) already exist in the database +- %n ikon finns redan i databasen%n ikoner finns redan i databasen +- +- +- The following icon(s) failed: +- Följande ikon misslyckades:Följande ikoner misslyckades: +- +- +- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? +- Denna ikon används av %n post och kommer att ersättas av standardikonen. Vill du verkligen ta bort den?Denna ikon används av %n poster och kommer att ersättas av standardikonen. Vill du verkligen ta bort den? +- +- +- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security +- Du kan aktivera ikontjänsten frÃ¥n DuckDuckGo under Verktyg -> Inställningar -> Säkerhet +- +- +- Download favicon for URL +- Ladda ner favicon för URL:en +- +- +- Apply selected icon to subgroups and entries +- Använd markerad ikon till undergrupper och poster +- +- +- Also apply to child groups +- Använd även till undergrupper +- +- +- Also apply to child entries +- Använd även till underposter +- +- +- Also apply to all children +- Använd även till alla undergrupper/-poster +- +- +- Existing icon selected. +- Befintlig ikon vald. +- +- +- Use default icon +- Använd standard ikon +- +- +- Use custom icon +- Använd egen ikon +- +- +- Apply icon to... +- Tillämpa ikonen pÃ¥... +- +- +- Apply to this group only +- Använd endast till denna grupp +- +- +- +- EditWidgetProperties +- +- Created: +- Skapad: +- +- +- Modified: +- Ändrad: +- +- +- Accessed: +- Använd: +- +- +- Uuid: +- UUID: +- +- +- Plugin Data +- Tilläggsdata +- +- +- Remove +- Ta bort +- +- +- Delete plugin data? +- Vill du ta bort tilläggsdata? +- +- +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- Vill du verkligen ta bort den valda tilläggsdatan? +-Det kan medföra att de berörda tilläggen inte fungerar. +- +- +- Key +- Nyckel +- +- +- Value +- Värde +- +- +- Datetime created +- Skapad datum/tid +- +- +- Datetime modified +- Ändrad datum/tid +- +- +- Datetime accessed +- Använd datum/tid +- +- +- Unique ID +- Unikt ID +- +- +- Plugin data +- Tilläggsdata +- +- +- Remove selected plugin data +- Ta bort markerad tilläggsdata +- +- +- +- Entry +- +- %1 - Clone +- %1 - Klona +- +- +- +- EntryAttachmentsModel +- +- Name +- Namn +- +- +- Size +- Storlek +- +- +- +- EntryAttachmentsWidget +- +- Form +- Formulär +- +- +- Add +- Lägg till +- +- +- Remove +- Ta bort +- +- +- Open +- Öppna +- +- +- Save +- Spara +- +- +- Select files +- Välj filer +- +- +- Are you sure you want to remove %n attachment(s)? +- Vill du verkligen ta bort %n bilaga?Vill du verkligen ta bort %n bilagor? +- +- +- Save attachments +- Spara bilagor +- +- +- Unable to create directory: +-%1 +- Kan inte skapa mappen: +-%1 +- +- +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- Vill du verkligen skriva över den befintliga filen "%1" med bilagan? +- +- +- Confirm overwrite +- Bekräfta överskrivning +- +- +- Unable to save attachments: +-%1 +- Kan inte spara bilagor: +-%1 +- +- +- Unable to open attachment: +-%1 +- Kan inte öppna bilaga: +-%1 +- +- +- Unable to open attachments: +-%1 +- Kan inte öppna bilagor: +-%1 +- +- +- Confirm remove +- Bekräfta borttagning +- +- +- Unable to open file(s): +-%1 +- Kan inte öppna fil:Kan inte öppna filer: +-%1 +- +- +- Attachments +- Bilagor +- +- +- Add new attachment +- Lägg tillny bilaga +- +- +- Remove selected attachment +- Ta bort markerad bilaga +- +- +- Open selected attachment +- Öppna markerad bilaga +- +- +- Save selected attachment to disk +- Spara markerad bilaga pÃ¥ disk +- +- +- %1 is a big file (%2 MB). +-Your database may get very large and reduce performance. +- +-Are you sure to add this file? +- %1 är en stor fil (%2 MB). +-Databasen kan bli mycket stor och försämra prestanda. +- +-Vill du verkligen lägga till den här filen? +- +- +- Confirm Attachment +- Bekräfta bilaga +- +- +- +- EntryAttributesModel +- +- Name +- Namn +- +- +- +- EntryHistoryModel +- +- Last modified +- Ändrad +- +- +- Title +- Titel +- +- +- Username +- Användarnamn +- +- +- URL +- URL +- +- +- +- EntryModel +- +- Ref: +- Reference abbreviation +- Ref: +- +- +- Group +- Grupp +- +- +- Title +- Titel +- +- +- Username +- Användarnamn +- +- +- URL +- URL +- +- +- Never +- Aldrig +- +- +- Password +- Lösenord +- +- +- Notes +- Anteckningar +- +- +- Expires +- Förfaller +- +- +- Created +- Skapad +- +- +- Modified +- Ändrad +- +- +- Accessed +- Använd +- +- +- Attachments +- Bilagor +- +- +- Size +- Storlek +- +- +- Group name +- Gruppnamn +- +- +- Entry title +- Posttitel +- +- +- Entry notes +- Postanteckning +- +- +- Entry expires at +- Posten upphör att gälla +- +- +- Creation date +- Skapad +- +- +- Last modification date +- Ändrad +- +- +- Last access date +- Senast använd +- +- +- Attached files +- Bifogade filer +- +- +- Entry size +- Postens storlek +- +- +- Has attachments +- Har bilagor +- +- +- Has TOTP one-time password +- Har TOTP engÃ¥ngslösenord +- +- +- +- EntryPreviewWidget +- +- Close +- Stäng +- +- +- General +- Allmänt +- +- +- Username +- Användarnamn +- +- +- Password +- Lösenord +- +- +- Expiration +- Förfaller +- +- +- URL +- URL +- +- +- Attributes +- Attribut +- +- +- Attachments +- Bilagor +- +- +- Notes +- Anteckningar +- +- +- Autotype +- Autoskriv +- +- +- Window +- Fönster +- +- +- Sequence +- Sekvens +- +- +- Searching +- Söker +- +- +- Search +- Sök +- +- +- Clear +- Rensa +- +- +- Never +- Aldrig +- +- +- [PROTECTED] +- [SKYDDAD] +- +- +- Enabled +- Aktiverad +- +- +- Disabled +- Inaktiverad +- +- +- Share +- Dela +- +- +- Display current TOTP value +- Visa aktuellt TOTP-värde +- +- +- Advanced +- Avancerat +- +- +- Default Sequence +- Standardsekvens +- +- +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- attributes line +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- +- +- +- EntryURLModel +- +- Invalid URL +- Ogiltig URL +- +- +- +- EntryView +- +- Fit to window +- Anpassa till fönster +- +- +- Fit to contents +- Anpassa till innehÃ¥ll +- +- +- Reset to defaults +- Ã…terställ till standardvärden +- +- +- Has attachments +- Entry attachment icon toggle +- Har bilagor +- +- +- Has TOTP +- Entry TOTP icon toggle +- Har TOTP +- +- +- +- FdoSecrets::Item +- +- Entry "%1" from database "%2" was used by %3 +- Posten "%1" frÃ¥n databas "%2" har använts av %3 +- +- +- +- FdoSecrets::Service +- +- Failed to register DBus service at %1.<br/> +- Kunde inte registrera DBus-tjänsten pÃ¥ %1.<br/> +- +- +- %n Entry(s) was used by %1 +- %1 is the name of an application +- %n post användes av %1%n poster användes av %1 +- +- +- +- FdoSecrets::SettingsDatabaseModel +- +- File Name +- Filnamn +- +- +- Group +- Grupp +- +- +- Manage +- Hantera +- +- +- Unlock to show +- LÃ¥s upp för att visa +- +- +- None +- Ingen +- +- +- +- FdoSecrets::SettingsSessionModel +- +- Application +- Program +- +- +- Manage +- Hantera +- +- +- +- FdoSecretsPlugin +- +- <b>Fdo Secret Service:</b> %1 +- <b>Fdo Secret Service:</b> %1 +- +- +- Unknown +- Unknown PID +- Okänd +- +- +- Unknown +- Unknown executable path +- Okänd +- +- +- <i>PID: %1, Executable: %2</i> +- <i>PID: 1234, Executable: /path/to/exe</i> +- <i>PID: %1, Körbar: %2</i> +- +- +- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. +- En annan Secret Service körs (%1).<br/> Stoppa/ta bort den innan du aktiverar Secret Service-integreringen igen. +- +- +- +- Group +- +- [empty] +- group has no children +- [tom] +- +- +- +- HibpDownloader +- +- Online password validation failed +- Lösenordsvalidering online misslyckades +- +- +- +- IconDownloaderDialog +- +- Download Favicons +- Ladda ner faviconer +- +- +- Cancel +- Avbryt +- +- +- Having trouble downloading icons? +-You can enable the DuckDuckGo website icon service in the security section of the application settings. +- Har du problem att ladda ner ikoner? +-Du kan aktivera ikontjänsten frÃ¥n DuckDuckGo, i säkerhetssektionen av programinställningarna. +- +- +- Close +- Stäng +- +- +- URL +- URL +- +- +- Status +- Status +- +- +- Please wait, processing entry list... +- Vänta, postlistan bearbetas... +- +- +- Downloading... +- Laddar ner... +- +- +- Ok +- OK +- +- +- Already Exists +- Finns redan +- +- +- Download Failed +- Nerladdning misslyckades +- +- +- Downloading favicons (%1/%2)... +- Laddar ner faviconer (%1/%2)... +- +- +- +- KMessageWidget +- +- &Close +- &Stäng +- +- +- Close message +- Stäng meddelandet +- +- +- +- Kdbx3Reader +- +- missing database headers +- saknade databashuvuden +- +- +- Header doesn't match hash +- Huvudet stämmer inte med hashen +- +- +- Invalid header id size +- Ogiltig storlek pÃ¥ sidhuvudets ID +- +- +- Invalid header field length +- Ogiltig storlek pÃ¥ sidhuvudets fältlängd +- +- +- Invalid header data length +- Ogiltig storlek pÃ¥ sidhuvudets datalängd +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Ogiltiga autentiseringsuppgifter angavs. Försök igen. +-Om detta upprepas, kan din databasfil vara skadad. +- +- +- Unable to calculate database key +- Kan inte beräkna databasnyckeln +- +- +- Unable to issue challenge-response: %1 +- Kunde inte utfärda challenge-response: %1 +- +- +- +- Kdbx3Writer +- +- Unable to issue challenge-response: %1 +- Kunde inte utfärda challenge-response: %1 +- +- +- Unable to calculate database key +- Kan inte beräkna databasnyckeln +- +- +- +- Kdbx4Reader +- +- missing database headers +- saknade databashuvuden +- +- +- Invalid header checksum size +- Ogiltig storlek pÃ¥ sidhuvudets kontrollsumma +- +- +- Header SHA256 mismatch +- Sidhuvudets SHA256 stämmer inte +- +- +- Unknown cipher +- Okänt chiffer +- +- +- Invalid header id size +- Ogiltig storlek pÃ¥ sidhuvudets ID +- +- +- Invalid header field length +- Ogiltig storlek pÃ¥ sidhuvudets fältlängd +- +- +- Invalid header data length +- Ogiltig storlek pÃ¥ sidhuvudets datalängd +- +- +- Failed to open buffer for KDF parameters in header +- Kunde inte öppna buffert för KDF-parametrar i sidhuvudet +- +- +- Unsupported key derivation function (KDF) or invalid parameters +- Nyckelhärledningen stöds inte (KDF), eller ogiltiga parametrar. +- +- +- Legacy header fields found in KDBX4 file. +- Äldre sidhuvudfält hittades i KDBX4-filen. +- +- +- Invalid inner header id size +- Ogiltig storlek pÃ¥ inre sidhuvud-ID +- +- +- Invalid inner header field length +- Ogiltig längd pÃ¥ inre sidhuvudfält +- +- +- Invalid inner header binary size +- Ogiltig storlek pÃ¥ inre sidhuvudbinär +- +- +- Unsupported KeePass variant map version. +- Translation: variant map = data structure for storing meta data +- KeePass-versionen av datastruktur för lagring av metadata stöds inte. +- +- +- Invalid variant map entry name length +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map entry name data +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map entry value length +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map entry value data +- Translation comment: variant map = data structure for storing meta data +- +- +- +- Invalid variant map Bool entry value length +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map Int32 entry value length +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map UInt32 entry value length +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map Int64 entry value length +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map UInt64 entry value length +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map entry type +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid variant map field type size +- Translation: variant map = data structure for storing meta data +- +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Ogiltiga autentiseringsuppgifter angavs. Försök igen. +-Om detta upprepas, kan din databasfil vara skadad. +- +- +- (HMAC mismatch) +- (HMAC matchningsfel) +- +- +- Unable to calculate database key: %1 +- Kan inte beräkna databasnyckel: %1 +- +- +- +- Kdbx4Writer +- +- Invalid symmetric cipher algorithm. +- Ogiltig symetrisk chifferalgoritm. +- +- +- Invalid symmetric cipher IV size. +- IV = Initialization Vector for symmetric cipher +- Ogiltig symmetrisk chiffer IV-storlek. +- +- +- Failed to serialize KDF parameters variant map +- Translation comment: variant map = data structure for storing meta data +- Det gick inte att serialisera KDF-parametrarnas datastruktur för lagring av metadata +- +- +- Unable to calculate database key: %1 +- Kunde inte beräkna databasnyckel: %1 +- +- +- +- KdbxReader +- +- Unsupported cipher +- Chiffret stöds inte +- +- +- Invalid compression flags length +- +- +- +- Unsupported compression algorithm +- Stöd saknas för komprimeringsalgoritmen +- +- +- Invalid master seed size +- +- +- +- Invalid transform seed size +- +- +- +- Invalid transform rounds size +- Ogiltig storlek pÃ¥ transformeringsrundor +- +- +- Invalid start bytes size +- +- +- +- Invalid random stream id size +- +- +- +- Invalid inner random stream cipher +- +- +- +- Not a KeePass database. +- Inte en KeePass-databas. +- +- +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- Den valda filen är en gammal KeePass 1-databas (.kdb). +- +-Du kan importera den genom att klicka pÃ¥ "Databas > Importera > KeePass 1-databas...". +-Detta är en envägsmigrering. Du kommer inte att kunna öppna den importerade databasen med den gamla KeePassX 0.4-versionen. +- +- +- Unsupported KeePass 2 database version. +- KeePass 2 databasversion som inte stöds. +- +- +- Invalid cipher uuid length: %1 (length=%2) +- Ogiltig uuid-längd för chiffer: %1 (längd=%2) +- +- +- Unable to parse UUID: %1 +- Kan inte tolka UUID: %1 +- +- +- Failed to read database file. +- Kunde inte läsa databasfilen. +- +- +- +- KdbxXmlReader +- +- XML parsing failure: %1 +- XML-tolkning misslyckades: %1 +- +- +- No root group +- Ingen root-grupp +- +- +- Missing icon uuid or data +- Saknar uuid eller data för ikon +- +- +- Missing custom data key or value +- Anpassad datanyckel eller värde saknas +- +- +- Multiple group elements +- Flera gruppelement +- +- +- Null group uuid +- uuid för grupp är null +- +- +- Invalid group icon number +- Ogiltigt gruppnummer för ikon +- +- +- Invalid EnableAutoType value +- Ogiltigt värde för EnableAutoType +- +- +- Invalid EnableSearching value +- Ogiltigt värde för EnableSearching +- +- +- No group uuid found +- Inget grupp-uuid hittades +- +- +- Null DeleteObject uuid +- +- +- +- Missing DeletedObject uuid or time +- Saknar DeletedObject uuid eller tid +- +- +- Null entry uuid +- Null post-uuid +- +- +- Invalid entry icon number +- Ogiltigt post ikon nummer +- +- +- History element in history entry +- Historikelement i historikpost +- +- +- No entry uuid found +- Inget post-uuid hittades +- +- +- History element with different uuid +- Historikelement med annat uuid +- +- +- Duplicate custom attribute found +- Dubbla anpassade attribut hittades +- +- +- Entry string key or value missing +- Postens text-nyckel eller värde saknas +- +- +- Entry binary key or value missing +- Postens binär-nyckel eller värde saknas +- +- +- Auto-type association window or sequence missing +- Auto-skrivassociationsfönster eller sekvens saknas +- +- +- Invalid bool value +- Ogiltigt bool värde +- +- +- Invalid date time value +- Ogiltigt datum-/tidsvärde +- +- +- Invalid color value +- Ogiltigt färgvärde +- +- +- Invalid color rgb part +- Ogiltigt färg rgb del +- +- +- Invalid number value +- Felaktigt numeriskt värde +- +- +- Invalid uuid value +- Ogiltigt uuid-värde +- +- +- Unable to decompress binary +- Translator meant is a binary data inside an entry +- Kunde inte dekomprimera binären. +- +- +- XML error: +-%1 +-Line %2, column %3 +- XML-fel: +-%1 +-Rad %2, kolumn: %3 +- +- +- +- KeeAgentSettings +- +- Invalid KeeAgent settings file structure. +- Ogiltig KeeAgent-inställningsfilstruktur. +- +- +- Private key is an attachment but no attachments provided. +- Privat nyckel är en bifogad fil men inga bilagor tillhandahÃ¥lls. +- +- +- Private key is empty +- Privat nyckel är tom +- +- +- File too large to be a private key +- Filen är för stor för att vara en privat nyckel +- +- +- Failed to open private key +- Kunde inte öppna privat nyckel +- +- +- +- KeePass1OpenWidget +- +- Unable to open the database. +- Kan inte öppna databasen. +- +- +- Import KeePass1 Database +- Importera KeePass1-databas +- +- +- +- KeePass1Reader +- +- Unable to read keyfile. +- Kan inte läsa nyckelfilen. +- +- +- Not a KeePass database. +- Inte en KeePass-databas. +- +- +- Unsupported encryption algorithm. +- Krypteringsalgoritnmen stöds ej. +- +- +- Unsupported KeePass database version. +- KeePass-databasversionen stöds ej. +- +- +- Unable to read encryption IV +- IV = Initialization Vector for symmetric cipher +- Kan inte läsa kryptering IV +- +- +- Invalid number of groups +- Ogiltigt antal grupper +- +- +- Invalid number of entries +- Ogiltigt antal poster +- +- +- Invalid content hash size +- Ogiltig storlek pÃ¥ innehÃ¥lls-hash +- +- +- Invalid transform seed size +- +- +- +- Invalid number of transform rounds +- Ogiltigt antal transformeringsrundor +- +- +- Unable to construct group tree +- Kan inte konstruera gruppträd +- +- +- Root +- Root +- +- +- Key transformation failed +- Nyckeltransformering misslyckades +- +- +- Invalid group field type number +- +- +- +- Invalid group field size +- Ogiltig fältstorlek för grupp +- +- +- Read group field data doesn't match size +- +- +- +- Incorrect group id field size +- +- +- +- Incorrect group creation time field size +- +- +- +- Incorrect group modification time field size +- +- +- +- Incorrect group access time field size +- +- +- +- Incorrect group expiry time field size +- +- +- +- Incorrect group icon field size +- Felaktig gruppikonstorlek +- +- +- Incorrect group level field size +- Felaktig gruppnivÃ¥storlek +- +- +- Invalid group field type +- Ogiltig grupptyp +- +- +- Missing group id or level +- Grupp-ID eller nivÃ¥ saknas +- +- +- Missing entry field type number +- +- +- +- Invalid entry field size +- Ogiltig fältstorlek +- +- +- Read entry field data doesn't match size +- Inläst data stämmer inte med fältstorleken +- +- +- Invalid entry uuid field size +- Ogiltig fältstorlek för uuid +- +- +- Invalid entry group id field size +- Ogiltig fältstorlek för grupp-id +- +- +- Invalid entry icon field size +- Ogiltig fältstorlek för ikon +- +- +- Invalid entry creation time field size +- Ogiltig fältstorlek för skapandedatum +- +- +- Invalid entry modification time field size +- Ogiltig fältstorlek för ändringsdatum +- +- +- Invalid entry expiry time field size +- Ogiltig fältstorlek för utgÃ¥ngsdatum +- +- +- Invalid entry field type +- Ogiltig posttyp +- +- +- unable to seek to content position +- kunde inte söka till innehÃ¥llets position +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Ogiltiga autentiseringsuppgifter angavs. Försök igen. +-Om detta upprepas, kan din databasfil vara skadad. +- +- +- Unable to calculate database key +- Kan inte beräkna databasnyckeln +- +- +- +- KeeShare +- +- Invalid sharing reference +- Ogiltig delningsreferens +- +- +- Inactive share %1 +- Inaktiv delning %1 +- +- +- Imported from %1 +- Importerat frÃ¥n %1 +- +- +- Exported to %1 +- Exporterat till %1 +- +- +- Synchronized with %1 +- Synkroniserat med %1 +- +- +- Import is disabled in settings +- Import är inaktiverat i inställningarna +- +- +- Export is disabled in settings +- Export är inaktiverat i inställningarna +- +- +- Inactive share +- Inaktiv delning +- +- +- Imported from +- Importerat frÃ¥n +- +- +- Exported to +- Exporterat till +- +- +- Synchronized with +- Synkroniserat med +- +- +- +- KeyComponentWidget +- +- Key Component +- Nyckelkomponent +- +- +- Key Component Description +- Beskrivning för nyckelkomponent +- +- +- Cancel +- Avbryt +- +- +- Key Component set, click to change or remove +- Nyckelkomponent angiven, klicka för att ändra eller ta bort +- +- +- Add %1 +- Add a key component +- Lägg till %1 +- +- +- Change %1 +- Change a key component +- Ändra %1 +- +- +- Remove %1 +- Remove a key component +- Ta bort %1 +- +- +- %1 set, click to change or remove +- Change or remove a key component +- %1 angivet, klicka för att ändra eller ta bort +- +- +- +- KeyFileEditWidget +- +- Generate +- Generera +- +- +- Key File +- Nyckelfil +- +- +- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> +- <p>Du kan lägga till en nyckelfil innehÃ¥llande slumpmässiga byte för ytterligare säkerhet.</p><p>Du mÃ¥ste lagra den säkert och aldrig förlora den, för att inte bli utestängd</p> +- +- +- Error loading the key file '%1' +-Message: %2 +- Kunde inte läsa in nyckelfilen "%1" +-Meddelande: %2 +- +- +- Key files +- Nyckelfiler +- +- +- All files +- Alla filer +- +- +- Create Key File... +- Skapa nyckelfil... +- +- +- Error creating key file +- Kunde inte skapa nyckelfil +- +- +- Unable to create key file: %1 +- Kunde inte skapa nyckelfil: %1 +- +- +- Select a key file +- Välj nyckelfil +- +- +- Key file selection +- Nyckelfiler +- +- +- Browse for key file +- Bläddra efter nyckelfil +- +- +- Browse... +- Bläddra... +- +- +- Generate a new key file +- Generera en ny nyckelfil +- +- +- Note: Do not use a file that may change as that will prevent you from unlocking your database! +- OBS! Använd inte en fil som kanske kommer att modifieras, eftersom det kommer att förhindra upplÃ¥sning av databasen! +- +- +- Invalid Key File +- Ogiltig nyckelfil +- +- +- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. +- Du kan inte använda den aktuella databasen som sin egen nyckelfil. Välj en annan fil eller generera en ny nyckelfil. +- +- +- Suspicious Key File +- Misstänkt nyckelfil +- +- +- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. +-Are you sure you want to continue with this file? +- Den valda filen ser ut som en lösenordsdatabas. En nyckelfil mÃ¥ste vara en statisk fil som aldrig ändras, annars förlorar du Ã¥tkomst till databasen för alltid. +-Vill du verkligen fortsätta med den här filen? +- +- +- Old key file format +- Gammalt nyckelfilsformat +- +- +- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. +- +- +- +- +- MainWindow +- +- &Database +- &Databas +- +- +- &Help +- &Hjälp +- +- +- &Groups +- &Grupper +- +- +- &Tools +- &Verktyg +- +- +- &Quit +- &Avsluta +- +- +- &About +- &Om +- +- +- Database settings +- Databasinställningar +- +- +- Copy username to clipboard +- Kopiera användarnamn till urklipp +- +- +- Copy password to clipboard +- Kopiera lösenord till urklipp +- +- +- &Settings +- &Inställningar +- +- +- &Title +- &Titel +- +- +- Copy title to clipboard +- Kopiera titel till urklipp +- +- +- &URL +- &URL +- +- +- Copy URL to clipboard +- Kopiera URL till urklipp +- +- +- &Notes +- &Anteckningar +- +- +- Copy notes to clipboard +- Kopiera anteckningar till urklipp +- +- +- Copy &TOTP +- Kopiera &TOTP +- +- +- E&mpty recycle bin +- T&öm papperskorg +- +- +- Clear history +- Rensa historiken +- +- +- Access error for config file %1 +- Ã…tkomstfel för konfigurationsfil %1 +- +- +- Settings +- Inställningar +- +- +- Toggle window +- Visa/Dölj fönster +- +- +- Quit KeePassXC +- Avsluta KeePassXC +- +- +- Please touch the button on your YubiKey! +- Rör vid knappen pÃ¥ din YubiKey! +- +- +- WARNING: You are using an unstable build of KeePassXC! +-There is a high risk of corruption, maintain a backup of your databases. +-This version is not meant for production use. +- VARNING! Du använder en instabil kompilering av KeePassXC! +-Det är hög risk för fel, säkerhetskopiera dina databaser. +-Denna version är inte ämnad för daglig användning. +- +- +- &Donate +- &Donera +- +- +- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +-We recommend you use the AppImage available on our downloads page. +- VARNING! Din Qt-version kan leda till att KeePassXC kraschar vid användning av skärmtangentbord! +-Vi rekommenderar att du använder tillgänglig AppImage, frÃ¥n vÃ¥r nerladdningssida. +- +- +- &Import +- &Importera +- +- +- Create a new database +- Skapa en ny databas +- +- +- Merge from another KDBX database +- Infoga frÃ¥n annan KDBX-databas +- +- +- Add a new entry +- Lägg till en ny post +- +- +- View or edit entry +- Visa eller redigera posten +- +- +- Add a new group +- Lägg till en ny grupp +- +- +- Perform &Auto-Type +- &Utför autoskriv +- +- +- Open &URL +- &Öppna URL +- +- +- Import a KeePass 1 database +- Importera en KeePass1-databas +- +- +- Import a CSV file +- Importera en CSV-fil +- +- +- NOTE: You are using a pre-release version of KeePassXC! +-Expect some bugs and minor issues, this version is not meant for production use. +- OBS! Du använder en förhandsversion av KeePassXC! +-Vissa fel och mindre problem kan uppstÃ¥. Denna version är inte ämnad för dagligt bruk. +- +- +- Check for updates on startup? +- Vill du söka efter uppdateringar vid uppstart? +- +- +- Would you like KeePassXC to check for updates on startup? +- Vill du att KeePassXC skall söka efter uppdateringar vid uppstart? +- +- +- You can always check for updates manually from the application menu. +- Du kan alltid söka efter uppdateringar manuellt, frÃ¥n programmenyn. +- +- +- &Export +- &Exportera +- +- +- Sort &A-Z +- Sortera &A-Z +- +- +- Sort &Z-A +- Sortera &Z-A +- +- +- &Password Generator +- &Lösenordsgenerator +- +- +- Import a 1Password Vault +- Importera ett 1Password-valv +- +- +- &Getting Started +- &Kom igÃ¥ng +- +- +- &User Guide +- &Användarmanual +- +- +- &Keyboard Shortcuts +- &Tangentbordsgenvägar +- +- +- &Recent Databases +- &Tidigare databaser +- +- +- &Entries +- &Poster +- +- +- Copy Att&ribute +- Kopiera att&ribut +- +- +- TOTP +- TOTP +- +- +- View +- Vy +- +- +- Theme +- Tema +- +- +- &Check for Updates +- Sök efter &uppdateringar +- +- +- &Open Database… +- &Öppna databas... +- +- +- &Save Database +- &Spara databas +- +- +- &Close Database +- S&täng databas +- +- +- &New Database… +- &Ny databas... +- +- +- &Merge From Database… +- S&lÃ¥ samman frÃ¥n databas... +- +- +- &New Entry… +- &Ny post... +- +- +- &Edit Entry… +- &Redigera post... +- +- +- &Delete Entry… +- &Ta bort post... +- +- +- &New Group… +- &Ny grupp... +- +- +- &Edit Group… +- &Redigera grupp... +- +- +- &Delete Group… +- &Ta bort grupp... +- +- +- Download All &Favicons… +- Ladda ner alla favikoner... +- +- +- Sa&ve Database As… +- S&para databas som... +- +- +- Database &Security… +- Databas&säkerhet... +- +- +- Database &Reports... +- Databas&rapporter... +- +- +- Statistics, health check, etc. +- Statistik, hälsokontroll, etc. +- +- +- &Database Settings… +- &Databasinställningar... +- +- +- &Clone Entry… +- &Klona post... +- +- +- Move u&p +- Flytta u&pp +- +- +- Move entry one step up +- Flytta upp posten ett steg +- +- +- Move do&wn +- Flytta &ner +- +- +- Move entry one step down +- Flytta ner posten ett steg +- +- +- Copy &Username +- Kopiera an&vändarnamn +- +- +- Copy &Password +- Kopiera &lösenord +- +- +- Download &Favicon +- Ladda ner &favikon +- +- +- &Lock Databases +- &LÃ¥s databasen +- +- +- &CSV File… +- &CSV-fil... +- +- +- &HTML File… +- &HTML-fil... +- +- +- KeePass 1 Database… +- KeePass 1-databas… +- +- +- 1Password Vault… +- 1Password Vault… +- +- +- CSV File… +- CSV-file… +- +- +- Show TOTP +- Visa TOTP +- +- +- Show QR Code +- Visa QR-kod +- +- +- Set up TOTP… +- Konfigurera TOTP... +- +- +- Report a &Bug +- Rapportera ett &fel +- +- +- Open Getting Started Guide +- Öppna Kom-igÃ¥ng-guiden +- +- +- &Online Help +- &Online-hjälp +- +- +- Go to online documentation +- GÃ¥ till online-dokumentationen +- +- +- Open User Guide +- Öppna användarmanualen +- +- +- Save Database Backup... +- Spara säkerhetskopia av databasen... +- +- +- Add key to SSH Agent +- Lägg till nyckel till SSH-tjänsten +- +- +- Remove key from SSH Agent +- Ta bort nyckel frÃ¥n SSH-tjänsten +- +- +- Compact Mode +- Kompakt läge +- +- +- Automatic +- Automatisk +- +- +- Light +- Ljus +- +- +- Dark +- Mörk +- +- +- Classic (Platform-native) +- Klassisk (Platfformsintegration) +- +- +- Show Toolbar +- Visa verktygsfält +- +- +- Show Preview Panel +- Visa förhandsgranskningspanelen +- +- +- Don't show again for this version +- Visa inte igen för denna version +- +- +- Restart Application? +- Vill du starta om programmet? +- +- +- You must restart the application to apply this setting. Would you like to restart now? +- Du mÃ¥ste starta om programmet för att tillämpa den här inställningen. Vill du starta om nu? +- +- +- Perform Auto-Type Sequence +- Utför auto-skrivsekvens +- +- +- {USERNAME} +- +- +- +- {USERNAME}{ENTER} +- +- +- +- {PASSWORD} +- +- +- +- {PASSWORD}{ENTER} +- +- +- +- Always on Top +- +- +- +- Hide Usernames +- Dölj användarnamn +- +- +- Hide Passwords +- Dölj lösenord +- +- +- +- ManageDatabase +- +- Database settings +- Databasinställningar +- +- +- Edit database settings +- Avsluta databasinställningar +- +- +- Unlock database +- LÃ¥s upp databasen +- +- +- Unlock database to show more information +- LÃ¥s upp databasen för att visa mer information +- +- +- Lock database +- LÃ¥s databasen +- +- +- +- ManageSession +- +- Disconnect +- Kopla ifrÃ¥n +- +- +- Disconnect this application +- Koppla ifrÃ¥n detta program +- +- +- +- Merger +- +- Creating missing %1 [%2] +- Skapar saknad %1 [%2] +- +- +- Relocating %1 [%2] +- Omplacerar %1 [%2] +- +- +- Overwriting %1 [%2] +- Skriver över %1[%2] +- +- +- older entry merged from database "%1" +- äldre post infogad frÃ¥n databas "%1" +- +- +- Adding backup for older target %1 [%2] +- Lägger till säkerhetskopia frÃ¥n äldre mÃ¥l %1 [%2] +- +- +- Adding backup for older source %1 [%2] +- Lägger till säkerhetskopia frÃ¥n äldre källa %1 [%2] +- +- +- Reapplying older target entry on top of newer source %1 [%2] +- Ã…teranvänder äldre mÃ¥lpost ovanpÃ¥ nyare källa %1 [%2] +- +- +- Reapplying older source entry on top of newer target %1 [%2] +- Ã…teranvänder äldre källpost ovanpÃ¥ nyare mÃ¥l %1 [%2] +- +- +- Synchronizing from newer source %1 [%2] +- Synkroniserar frÃ¥n nyare källa %1 [%2] +- +- +- Synchronizing from older source %1 [%2] +- Synkroniserar frÃ¥n äldre källa %1 [%2] +- +- +- Deleting child %1 [%2] +- Tar bort underpost %1 [%2] +- +- +- Deleting orphan %1 [%2] +- Tar bort post %1 [%2] +- +- +- Changed deleted objects +- Ändrade borttagna objekt +- +- +- Adding missing icon %1 +- Lägger till saknad ikon %1 +- +- +- Removed custom data %1 [%2] +- Tog bort anpassad data %1 [%2] +- +- +- Adding custom data %1 [%2] +- Lägger till anpassad data %1 [%2] +- +- +- +- NewDatabaseWizard +- +- Create a new KeePassXC database... +- Skapa en ny KeePassXC-databas... +- +- +- Root +- Root group +- Root +- +- +- +- NewDatabaseWizardPage +- +- WizardPage +- Guidesida +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Här kan du justera inställningarna för databaskrypteringen. Oroa dig inte, du kan ändra dem senare, i databasinställningarna. +- +- +- Advanced Settings +- Avancerade inställningar +- +- +- Simple Settings +- Förenklade inställningar +- +- +- Encryption Settings +- Krypteringsinställningar +- +- +- +- NewDatabaseWizardPageDatabaseKey +- +- Database Credentials +- Databasens inloggningsuppgifter +- +- +- A set of credentials known only to you that protects your database. +- En uppsättning inloggningsuppgifter som bara du känner till, skyddar din databas. +- +- +- +- NewDatabaseWizardPageEncryption +- +- Encryption Settings +- Krypteringsinställningar +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Här kan du justera inställningarna för databaskrypteringen. Oroa dig inte, du kan ändra dem senare, i databasinställningarna. +- +- +- +- NewDatabaseWizardPageMetaData +- +- General Database Information +- Allmän databasinformation +- +- +- Please fill in the display name and an optional description for your new database: +- Fyll i visningsnamnet och en frivillig beskrivning för din nya databas: +- +- +- +- NixUtils +- +- Password Manager +- Lösenordshanterare +- +- +- +- OpData01 +- +- Invalid OpData01, does not contain header +- Ogiltig OpData01, innehÃ¥ller inget huvud +- +- +- Unable to read all IV bytes, wanted 16 but got %1 +- Kan inte läsa alla IV-byte, förväntade 16 men fick %1 +- +- +- Unable to init cipher for opdata01: %1 +- Kan inte initiera chiffer för opdata01: %1 +- +- +- Unable to read all HMAC signature bytes +- Kan inte läsa alla byte i HMAC signatur +- +- +- Malformed OpData01 due to a failed HMAC +- Felaktigt formaterad OpData01 pÃ¥ grund av en misslyckad HMAC +- +- +- Unable to process clearText in place +- Kan inte att bearbeta klartext pÃ¥ plats +- +- +- Expected %1 bytes of clear-text, found %2 +- Förväntade %1 byte klartext, hittade %2 +- +- +- +- OpVaultOpenWidget +- +- Read Database did not produce an instance +-%1 +- Läsning av databas producerade inte nÃ¥gon instans +-%1 +- +- +- +- OpVaultReader +- +- Directory .opvault must exist +- Mappen .opvault mÃ¥ste finnas +- +- +- Directory .opvault must be readable +- Mappen .opvault mÃ¥ste vara läsbar +- +- +- Directory .opvault/default must exist +- Mappen .opvault/default mÃ¥ste finnas +- +- +- Directory .opvault/default must be readable +- Mappen .opvault/default mÃ¥ste vara läsbar +- +- +- Unable to decode masterKey: %1 +- Kan inte avkoda huvudnyckel: %1 +- +- +- Unable to derive master key: %1 +- Kan inte härleda huvudnyckel: %1 +- +- +- +- OpenSSHKey +- +- Invalid key file, expecting an OpenSSH key +- Ogiltig nyckelfil, en OpenSSH-nyckel förväntas +- +- +- PEM boundary mismatch +- PEM-gränsfel +- +- +- Base64 decoding failed +- Base64-avkodning misslyckades +- +- +- Key file way too small. +- Nyckelfilen är alldeles för liten. +- +- +- Key file magic header id invalid +- Nyckelfilens magiska huvud-ID är ogiltigt +- +- +- Found zero keys +- Hittade inga nycklar +- +- +- Failed to read public key. +- Kunde inte läsa offentlig nyckel. +- +- +- Corrupted key file, reading private key failed +- Skadad nyckelfil, kunde inte läsa privat nyckel +- +- +- No private key payload to decrypt +- Ingen nyttolast att avkryptera, frÃ¥n privat nyckel +- +- +- Trying to run KDF without cipher +- Försöker köra KDF utan chiffer +- +- +- Passphrase is required to decrypt this key +- Lösenordsfras krävs för att avkryptera denna nyckel +- +- +- Key derivation failed, key file corrupted? +- Nyckelhärledning misslyckades, är nyckelfilen skadad? +- +- +- Decryption failed, wrong passphrase? +- Avkryptering misslyckades, är det fel lösenord? +- +- +- Unexpected EOF while reading public key +- Oväntad EOF, under inläsning av offentlig nyckel +- +- +- Unexpected EOF while reading private key +- Oväntad EOF, under inläsning av privat nyckel +- +- +- Can't write public key as it is empty +- Kan inte skriva offentlig nyckel, eftersom den är tom +- +- +- Unexpected EOF when writing public key +- Oväntad EOF, vid skrivning av offentlig nyckel +- +- +- Can't write private key as it is empty +- Kan inte skriva privat nyckel, eftersom den är tom +- +- +- Unexpected EOF when writing private key +- Oväntad EOF, vid skrivning av privat nyckel +- +- +- Unsupported key type: %1 +- Nyckeltypen stöds ej: %1 +- +- +- Unknown cipher: %1 +- Okänt chiffer: %1 +- +- +- Cipher IV is too short for MD5 kdf +- Chiffer IV är för kort för MD5 kdf +- +- +- Unknown KDF: %1 +- Okänd KDF: %1 +- +- +- Unknown key type: %1 +- Okänd nyckeltyp: %1 +- +- +- +- PasswordEdit +- +- Passwords do not match +- Lösenorden stämmer inte överens +- +- +- Passwords match so far +- Lösenorden stämmer sÃ¥ lÃ¥ngt +- +- +- Toggle Password (%1) +- Växla lösenord (%1) +- +- +- Generate Password (%1) +- Generera lösenord (%1) +- +- +- Warning: Caps Lock enabled! +- Varning! Caps Lock aktiverat! +- +- +- +- PasswordEditWidget +- +- Enter password: +- Ange lösenord: +- +- +- Confirm password: +- Bekräfta lösenord: +- +- +- Password +- Lösenord +- +- +- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> +- <p>Ett lösenord är den primära metoden för att säkra din databas.</p><p>Bra lösenord är lÃ¥nga, komplexa och unika. KeePassXC kan skapa dem Ã¥t dig.</p> +- +- +- Passwords do not match. +- Lösenorden stämmer inte. +- +- +- Password field +- Lösenord +- +- +- Repeat password field +- Upprepa lösenordet +- +- +- +- PasswordGeneratorWidget +- +- %p% +- %p% +- +- +- strength +- Password strength +- styrka +- +- +- entropy +- entropi +- +- +- Password +- Lösenord +- +- +- Character Types +- Teckentyper +- +- +- Numbers +- Siffror +- +- +- Extended ASCII +- Utökad ASCII +- +- +- Exclude look-alike characters +- Undanta tecken som liknar varandra +- +- +- Pick characters from every group +- Plocka tecken frÃ¥n alla grupper +- +- +- &Length: +- &Längd: +- +- +- Passphrase +- Lösenordsfras +- +- +- Wordlist: +- Ordlista: +- +- +- Word Separator: +- Ordavdelare: +- +- +- Close +- Stäng +- +- +- Entropy: %1 bit +- Entropi: %1 bitar +- +- +- Password Quality: %1 +- Lösenordskvalitet: %1 +- +- +- Poor +- Password quality +- DÃ¥lig +- +- +- Weak +- Password quality +- Svag +- +- +- Good +- Password quality +- Bra +- +- +- Excellent +- Password quality +- Utmärkt +- +- +- Switch to advanced mode +- Växla till avancerat läge +- +- +- Advanced +- Avancerat +- +- +- Braces +- Klammerparenteser +- +- +- Punctuation +- Skiljetecken +- +- +- Quotes +- Citationstecken +- +- +- Logograms +- Logogram +- +- +- Character set to exclude from generated password +- Tecken som undantas frÃ¥n genererade lösenord +- +- +- Do not include: +- Undanta: +- +- +- Add non-hex letters to "do not include" list +- Lägg till icke-hexadecimala tecken till undantagslistan +- +- +- Hex +- Hex +- +- +- Excluded characters: "0", "1", "l", "I", "O", "|", "ï¹’" +- Undanta tecknen: "0", "1", "l", "I", "O", "|", "ï¹’" +- +- +- Generated password +- Genererat lösenord +- +- +- Upper-case letters +- VERSALER +- +- +- Lower-case letters +- gemener +- +- +- Special characters +- Specialtecken +- +- +- Math Symbols +- Mattematiksymboler +- +- +- Dashes and Slashes +- Streck och snedstreck +- +- +- Excluded characters +- Undantagna tecken +- +- +- Hex Passwords +- Hexadecimala lösenord +- +- +- Password length +- Lösenordslängd +- +- +- Word Case: +- Skiftläge: +- +- +- Regenerate password +- Generera om lösenordet +- +- +- Copy password +- Kopiera lösenordet +- +- +- lower case +- gemener +- +- +- UPPER CASE +- VERSALER +- +- +- Title Case +- Titelns skiftläge +- +- +- Generate Password +- Generera lösenord +- +- +- Also choose from: +- Välj ocksÃ¥ frÃ¥n: +- +- +- Additional characters to use for the generated password +- Fler tecken att användas för lösenordsgenerering +- +- +- Additional characters +- Fler tecken +- +- +- Word Count: +- Antal ord: +- +- +- Esc +- Esc +- +- +- Apply Password +- Tillämpa lösenordet +- +- +- Ctrl+S +- Ctrl+S +- +- +- Regenerate password (%1) +- Generera om lösenordet (%1) +- +- +- Special Characters +- Specialtecken +- +- +- +- QApplication +- +- KeeShare +- KeeShare +- +- +- Statistics +- Statistik +- +- +- Very weak password +- Mycket svagt lösenord +- +- +- Password entropy is %1 bits +- Lösenordsentropin är %1 bitar +- +- +- Weak password +- Svagt lösenord +- +- +- Used in %1/%2 +- Använt i %1/%2 +- +- +- Password is used %1 times +- Lösenordet används %1 gÃ¥nger +- +- +- Password has expired +- Lösenordet har upphört att gälla +- +- +- Password expiry was %1 +- Lösenordet upphörde att gälla %1 +- +- +- Password is about to expire +- Lösenordet upphör snart att gälla +- +- +- Password expires in %1 days +- Lösenordet upphör att gälla om %1 dagar +- +- +- Password will expire soon +- Lösenordet upphör snart att gälla +- +- +- Password expires on %1 +- Lösenordet upphör att gälla %1 +- +- +- Health Check +- Hälsokontroll +- +- +- HIBP +- HIBP +- +- +- +- QMessageBox +- +- Overwrite +- Skriv över +- +- +- Delete +- Ta bort +- +- +- Move +- Flytta +- +- +- Empty +- Töm +- +- +- Remove +- Ta bort +- +- +- Skip +- Hoppa över +- +- +- Disable +- Inaktivera +- +- +- Merge +- Sammanfoga +- +- +- Continue +- Fortsätt +- +- +- +- QObject +- +- Database not opened +- Databasen är inte öppen +- +- +- Database hash not available +- Databas-hash inte tillgänglig +- +- +- Client public key not received +- Klientens offentliga nyckel inte mottagen +- +- +- Cannot decrypt message +- Kan inte avkryptera meddelande +- +- +- Action cancelled or denied +- Ã…tgärden avbröts eller avisades +- +- +- KeePassXC association failed, try again +- KeePassXC-association misslyckades, försök igen! +- +- +- Encryption key is not recognized +- Krypteringsnyckeln känns inte igen +- +- +- Incorrect action +- Felaktig Ã¥tgärd +- +- +- Empty message received +- Tomt meddelande mottaget +- +- +- No URL provided +- Ingen URL angiven +- +- +- No logins found +- Inga inloggningar hittades +- +- +- Unknown error +- Okänt fel +- +- +- Add a new entry to a database. +- Lägga till en ny post i en databas. +- +- +- Path of the database. +- Sökväg till databasen. +- +- +- Key file of the database. +- Nyckelfilen för databasen. +- +- +- path +- sökväg +- +- +- Username for the entry. +- Användarnamn för posten. +- +- +- username +- användarnamn +- +- +- URL for the entry. +- URL för posten. +- +- +- URL +- URL +- +- +- Prompt for the entry's password. +- FrÃ¥ga efter postens lösenord. +- +- +- Generate a password for the entry. +- Generera ett lösenord för posten. +- +- +- length +- längd +- +- +- Path of the entry to add. +- Sökväg till den tillagda posten. +- +- +- Path of the entry to clip. +- clip = copy to clipboard +- Sökväg att kopiera. +- +- +- Timeout in seconds before clearing the clipboard. +- Tidsgräns i sekunder innan urklipp rensas. +- +- +- Edit an entry. +- Redigera en post. +- +- +- Title for the entry. +- Titel för posten. +- +- +- title +- titel +- +- +- Path of the entry to edit. +- Sökväg till posten att redigera. +- +- +- Estimate the entropy of a password. +- Uppskatta ett lösenords entropi. +- +- +- Password for which to estimate the entropy. +- Lösenord som entropin skall uppskattas för. +- +- +- Perform advanced analysis on the password. +- Utföra avancerad analys av lösenordet. +- +- +- +- +-Available commands: +- +- +- +-Tillgängliga kommandon: +- +- +- +- Name of the command to execute. +- Namn pÃ¥ kommandot som skall köras. +- +- +- List database entries. +- Lista databasposter. +- +- +- Path of the group to list. Default is / +- Sökväg till gruppen som skall listas. Standard är / +- +- +- Find entries quickly. +- Hitta poster snabbt. +- +- +- Search term. +- Sökterm. +- +- +- Merge two databases. +- Sammanfoga tvÃ¥ databaser. +- +- +- Path of the database to merge from. +- Sökväg till databas att infoga frÃ¥n. +- +- +- Use the same credentials for both database files. +- Använd samma autentiseringsuppgifter för bägge databasfilerna. +- +- +- Key file of the database to merge from. +- Nyckelfil för databas att infoga frÃ¥n. +- +- +- Show an entry's information. +- Visa en information för en post. +- +- +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- Attributnamn att visa. Detta alternativ kan specificeras fler än en gÃ¥ng, med varje attribut visat, ett per rad i given ordning. Om inga attribut specificeras, kommer en summering av standardattributen att ges. +- +- +- attribute +- attribut +- +- +- Name of the entry to show. +- Visningsnamn för posten. +- +- +- NULL device +- NULL-enhet +- +- +- error reading from device +- fel vid läsning frÃ¥n enhet +- +- +- malformed string +- felaktigt uppbyggd sträng +- +- +- missing closing quote +- saknar avslutande citationstecken +- +- +- Group +- Grupp +- +- +- Title +- Titel +- +- +- Username +- Användarnamn +- +- +- Password +- Lösenord +- +- +- Notes +- Anteckningar +- +- +- Last Modified +- Ändrad +- +- +- Created +- Skapad +- +- +- Browser Integration +- Webbläsarintegration +- +- +- SSH Agent +- SSH-tjänst +- +- +- Generate a new random diceware passphrase. +- Generera en ny slumpmässig lösenordsfras. +- +- +- Word count for the diceware passphrase. +- Antal ord för lösenordsfrasen. +- +- +- Wordlist for the diceware generator. +-[Default: EFF English] +- Ordlista för lösenordgeneratorn. +-[Standard: EFF English] +- +- +- Generate a new random password. +- Skapa ett nytt slumpmässigt lösenord. +- +- +- Could not create entry with path %1. +- Kunde inte skapa post med sökvägen %1. +- +- +- Enter password for new entry: +- Ange lösenord för ny post: +- +- +- Writing the database failed %1. +- Kunde inte skriva databas %1. +- +- +- Successfully added entry %1. +- Posten %1 tillagd. +- +- +- Invalid timeout value %1. +- Ogiltig tidsgräns %1. +- +- +- Entry %1 not found. +- Posten %1 hittades inte. +- +- +- Entry with path %1 has no TOTP set up. +- Posten med sökväg %1 har ingen TOTP konfigurerad. +- +- +- Clearing the clipboard in %1 second(s)... +- Rensar urklipp om %1 sekund...Rensar urklipp om %1 sekunder... +- +- +- Clipboard cleared! +- Urklipp rensat! +- +- +- Silence password prompt and other secondary outputs. +- FrÃ¥ga inte efter lösenord och andra sekundära utdata. +- +- +- count +- CLI parameter +- antal +- +- +- Could not find entry with path %1. +- Kunde inte hitta post pÃ¥ sökvägen %1. +- +- +- Not changing any field for entry %1. +- Ändrar inga fält för posten %1. +- +- +- Enter new password for entry: +- Ange nytt lösenord för posten: +- +- +- Writing the database failed: %1 +- Kunde inte skriva databas: %1 +- +- +- Successfully edited entry %1. +- Redigerade posten %1. +- +- +- Length %1 +- Längd %1 +- +- +- Entropy %1 +- Entropi %1 +- +- +- Log10 %1 +- Logg10 %1 +- +- +- Multi-word extra bits %1 +- Extra bitar för flerord %1 +- +- +- Type: Bruteforce +- Typ: Bruteforce +- +- +- Type: Dictionary +- Typ: Ordbok +- +- +- Type: Dict+Leet +- Typ: Ordbok+Leet +- +- +- Type: User Words +- Typ: Användarord +- +- +- Type: User+Leet +- Typ: Användare+Leet +- +- +- Type: Repeated +- Typ: Repeterad +- +- +- Type: Sequence +- Typ: Sekvens +- +- +- Type: Spatial +- Typ: Spatial +- +- +- Type: Date +- Typ: Datum +- +- +- Type: Bruteforce(Rep) +- Typ: Bruteforce (Rep) +- +- +- Type: Dictionary(Rep) +- Typ: Ordbok (Rep) +- +- +- Type: Dict+Leet(Rep) +- Typ: Ordbok+Leet (Rep) +- +- +- Type: User Words(Rep) +- Typ: Användarord (Rep) +- +- +- Type: User+Leet(Rep) +- Typ: Användare+Leet (Rep) +- +- +- Type: Repeated(Rep) +- Typ: Repeterad (Rep) +- +- +- Type: Sequence(Rep) +- Typ: Sekvens (Rep) +- +- +- Type: Spatial(Rep) +- Typ: Spatial (Rep) +- +- +- Type: Date(Rep) +- Typ: Datum (Rep) +- +- +- Type: Unknown%1 +- Typ: Okänd %1 +- +- +- Entropy %1 (%2) +- Entropi %1 (%2) +- +- +- *** Password length (%1) != sum of length of parts (%2) *** +- *** Lösenordslängd (%1) != sammanlagd längd av delar (%2) *** +- +- +- Failed to load key file %1: %2 +- Kunde inte läsa in nyckelfil %1: %2 +- +- +- Length of the generated password +- Längd pÃ¥ det genererade lösenordet +- +- +- Use lowercase characters +- Använd gemener +- +- +- Use uppercase characters +- Amvänd VERSALER +- +- +- Use special characters +- Använd specialtecken +- +- +- Use extended ASCII +- Använd utökad ASCII +- +- +- Exclude character set +- Undanta teckenupsättning +- +- +- chars +- tecken +- +- +- Exclude similar looking characters +- Undanta tecken som liknar varandra +- +- +- Include characters from every selected group +- Ta med tecken frÃ¥n samtliga valda grupper +- +- +- Recursively list the elements of the group. +- Lista elementen i gruppen rekursivt. +- +- +- Cannot find group %1. +- Kan inte hitta gruppen %1. +- +- +- Error reading merge file: +-%1 +- Fel vid läsning av sammanslagningsfil: +-%1 +- +- +- Unable to save database to file : %1 +- Kan inte spara databas till fil: %1 +- +- +- Unable to save database to file: %1 +- Kan inte spara databas till fil: %1 +- +- +- Successfully recycled entry %1. +- Ã…tervinning av posten %1 slutförd. +- +- +- Successfully deleted entry %1. +- Tog bort posten %1. +- +- +- Show the entry's current TOTP. +- Visa postens aktuella TOTP. +- +- +- ERROR: unknown attribute %1. +- FEL: Okänt attribut %1. +- +- +- No program defined for clipboard manipulation +- Inget program definierat för urklippsmanipulation +- +- +- file empty +- filen är tom +- +- +- %1: (row, col) %2,%3 +- %1: (rad, kolumn) %2,%3 +- +- +- AES-KDF (KDBX 4) +- AES-KDF (KDBX 4) +- +- +- AES-KDF (KDBX 3.1) +- AES-KDF (KDBX 3.1) +- +- +- Invalid Settings +- TOTP +- Ogiltiga inställningar +- +- +- Invalid Key +- TOTP +- Ogiltig nyckel +- +- +- Message encryption failed. +- Meddelandekryptering misslyckaes. +- +- +- No groups found +- Inga grupper hittades +- +- +- Create a new database. +- Skapa en ny databas. +- +- +- File %1 already exists. +- Filen %1 finns redan. +- +- +- Loading the key file failed +- Kunde inte läsa in nyckelfilen +- +- +- No key is set. Aborting database creation. +- Ingen nyckel angiven. Avbryter skapande av databas. +- +- +- Failed to save the database: %1. +- Kunde inte spara databasen: %1. +- +- +- Successfully created new database. +- Ny databas skapad. +- +- +- Creating KeyFile %1 failed: %2 +- Kunde inte skapa nyckelfilen %1: %2 +- +- +- Loading KeyFile %1 failed: %2 +- Kunde inte läsa in nyckelfilen %1: %2 +- +- +- Path of the entry to remove. +- Sökväg till posten som tas bort. +- +- +- Existing single-instance lock file is invalid. Launching new instance. +- LÃ¥sfilen för befintlig enkelinstans är ogiltig. Startar en ny instans. +- +- +- The lock file could not be created. Single-instance mode disabled. +- LÃ¥sfilen kunde inte skapas. Enkelinstansläge inaktiverat. +- +- +- KeePassXC - cross-platform password manager +- KeePassXC - Plattformsoberoende lösenordshanterare +- +- +- filenames of the password databases to open (*.kdbx) +- filnamn pÃ¥ lösenordsdatabaser att öppna (*.kdbx) +- +- +- path to a custom config file +- Sökväg till en anpassad konfigurationsfil +- +- +- key file of the database +- nyckelfil för databasen +- +- +- read password of the database from stdin +- hämta databaslösenordet frÃ¥n stdin +- +- +- Another instance of KeePassXC is already running. +- En annan instans av KeePassXC körs redan. +- +- +- Fatal error while testing the cryptographic functions. +- Allvarligt fel vid test av kryptografiska funktioner. +- +- +- KeePassXC - Error +- KeePassXC - Fel +- +- +- Database password: +- Databaslösenord: +- +- +- Cannot create new group +- Kan inte skapa ny grupp +- +- +- Deactivate password key for the database. +- Inaktivera lösenordsnyckeln för databasen. +- +- +- Displays debugging information. +- Visa felsökningsinformation. +- +- +- Deactivate password key for the database to merge from. +- Avaktivera lösenordsnyckel för databas som infogas ifrÃ¥n. +- +- +- Version %1 +- Version %1 +- +- +- Build Type: %1 +- Kompileringstyp: %1 +- +- +- Revision: %1 +- Revision: %1 +- +- +- Distribution: %1 +- Distribution: %1 +- +- +- Debugging mode is disabled. +- Felsökningsläget är inaktiverat. +- +- +- Debugging mode is enabled. +- Felsökningsläget är aktiverat. +- +- +- Operating system: %1 +-CPU architecture: %2 +-Kernel: %3 %4 +- Operativsystem: %1 +-Processorarkitektur: %2 +-Kärna: %3 %4 +- +- +- Auto-Type +- Autoskriv +- +- +- KeeShare (signed and unsigned sharing) +- KeeShare (signerad och osignerad delning) +- +- +- KeeShare (only signed sharing) +- KeeShare (endast signerad delning) +- +- +- KeeShare (only unsigned sharing) +- KeeShare (endast osignerad delning) +- +- +- YubiKey +- YubiKey +- +- +- TouchID +- TouchID +- +- +- None +- Ingen +- +- +- Enabled extensions: +- Aktiverade tillägg: +- +- +- Cryptographic libraries: +- Kryptografiska bibliotek: +- +- +- Cannot generate a password and prompt at the same time! +- Kan inte generera lösenord och frÃ¥ga pÃ¥ samma gÃ¥ng! +- +- +- Adds a new group to a database. +- Lägger till en ny grupp i en databas. +- +- +- Path of the group to add. +- Sökväg till gruppen som läggs till. +- +- +- Group %1 already exists! +- Gruppen %1 finns redan! +- +- +- Group %1 not found. +- Gruppen %1 hittades inte. +- +- +- Successfully added group %1. +- Lade till gruppen %1. +- +- +- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. +- Kontrollera om om nÃ¥gra lösenord har läckt ut offentligt. FILNAMN mÃ¥ste vara sökvägen till en SHA-1-hashad fillista med läckta lösenord i HIBP-format, sÃ¥som tillgänglig frÃ¥n https://haveibeenpwned.com/Passwords. +- +- +- FILENAME +- FILNAMN +- +- +- Analyze passwords for weaknesses and problems. +- Analysera lösenord efter svagheter och problem. +- +- +- Failed to open HIBP file %1: %2 +- Kunde inte öppna HIBP-filen %1: %2 +- +- +- Evaluating database entries against HIBP file, this will take a while... +- Utvärderar databasposter mot HIBP-fil. Detta kommer att ta en stund... +- +- +- Close the currently opened database. +- Stäng den öppna databasen. +- +- +- Display this help. +- Visa den här hjälpen. +- +- +- slot +- anslutningsplats +- +- +- Invalid word count %1 +- Ogiltigt antal ord %1 +- +- +- The word list is too small (< 1000 items) +- Ordlistan är för liten (<1000 objekt) +- +- +- Exit interactive mode. +- Avsluta interaktivt läge. +- +- +- Exports the content of a database to standard output in the specified format. +- Exporterar innehÃ¥llet i en databas till standardutdata i angivet format. +- +- +- Unable to export database to XML: %1 +- Kan inte exportera databas till XML: %1 +- +- +- Unsupported format %1 +- Formatet stöd inte, %1 +- +- +- Use numbers +- Använd siffror +- +- +- Invalid password length %1 +- Ogiltig lösenordslängd %1 +- +- +- Display command help. +- Visa kommandohjälp. +- +- +- Available commands: +- Tillgängliga kommandon: +- +- +- Import the contents of an XML database. +- Importera innehÃ¥llet frÃ¥n en XML-databas. +- +- +- Path of the XML database export. +- MÃ¥lsökväg för XML-databasexport. +- +- +- Path of the new database. +- Sökväg till den nya databasen. +- +- +- Successfully imported database. +- Databas importera. +- +- +- Unknown command %1 +- Okänt kommando %1 +- +- +- Flattens the output to single lines. +- Slätar ut utdata till enkelrader. +- +- +- Only print the changes detected by the merge operation. +- Skriv bara ut de ändringar som upptäckts av sammanfogningsoperationen. +- +- +- Yubikey slot for the second database. +- Yubikey-plats för den andra databasen. +- +- +- Successfully merged %1 into %2. +- Infogade %1 i %2. +- +- +- Database was not modified by merge operation. +- Databasen ändrades inte av sammanslagningen. +- +- +- Moves an entry to a new group. +- Flyttar en post till ny grupp. +- +- +- Path of the entry to move. +- Sökväg till posten som skall flyttas. +- +- +- Path of the destination group. +- Sökväg till mÃ¥lgruppen. +- +- +- Could not find group with path %1. +- Kunde inte hitta nÃ¥gon grupp med sökväg %1. +- +- +- Entry is already in group %1. +- Posten finns redan i gruppen %1. +- +- +- Successfully moved entry %1 to group %2. +- Flyttade posten %1 till gruppen %2. +- +- +- Open a database. +- Öppna en databas. +- +- +- Path of the group to remove. +- Sökväg till gruppen som skall tas bort. +- +- +- Cannot remove root group from database. +- Kan inte ta bort root-gruppen frÃ¥n databasen. +- +- +- Successfully recycled group %1. +- Gruppen %1 har Ã¥tervunnits. +- +- +- Successfully deleted group %1. +- Gruppen %1 har tagits bort. +- +- +- Failed to open database file %1: not found +- Kunde inte öppna databasfilen %1: Hittades inte +- +- +- Failed to open database file %1: not a plain file +- Kunde inte öppna databasfilen %1: Ingen vanlig fil +- +- +- Failed to open database file %1: not readable +- Kunde inte öppna databasfilen %1: Inte läsbar +- +- +- Enter password to unlock %1: +- Ange lösenord för att lÃ¥sa upp %1: +- +- +- Invalid YubiKey slot %1 +- Ogiltig YubiKey-plats %1 +- +- +- Enter password to encrypt database (optional): +- Ange lösenord för att avkryptera databasen (valfritt): +- +- +- HIBP file, line %1: parse error +- HIBP-fil, rad %1: tolkningsfel +- +- +- Secret Service Integration +- Secret Service-integration +- +- +- User name +- Användarnamn +- +- +- Password for '%1' has been leaked %2 time(s)! +- Lösenordet för "%1" har läckts %2 gÃ¥ng!Lösenordet för "%1" har läckts %2 gÃ¥nger! +- +- +- Invalid password generator after applying all options +- Ogiltig lösenordsgenerator efter tillämpning av alla alternativ +- +- +- Show the protected attributes in clear text. +- Visa de skyddade attributen i klartext. +- +- +- Browser Plugin Failure +- Webbläsartillägget misslyckades +- +- +- Could not save the native messaging script file for %1. +- Kunde inte spara den inbyggda meddelandeskriptfilen för %1. +- +- +- Copy the given attribute to the clipboard. Defaults to "password" if not specified. +- Kopiera det angivna attributet till urklipp. Standardvärdet är "password" om inget annat anges. +- +- +- Copy the current TOTP to the clipboard (equivalent to "-a totp"). +- Kopiera aktuell TOTP till urklipp (motsvarar "-a totp"). +- +- +- Copy an entry's attribute to the clipboard. +- Kopiera en posts attribut till urklipp. +- +- +- ERROR: Please specify one of --attribute or --totp, not both. +- FEL: Ange antingen --attribute eller --totp, inte bägge. +- +- +- ERROR: attribute %1 is ambiguous, it matches %2. +- FEL: attributet %1 är tvetydigt, det matchar %2. +- +- +- Attribute "%1" not found. +- Kunde inte hitta attributet "%1". +- +- +- Entry's "%1" attribute copied to the clipboard! +- Attributet "%1" kopierat till urklipp! +- +- +- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). +- Yubikey-plats och valfritt serienummer som används för att komma Ã¥t databasen (t.ex. 1:7370001). +- +- +- slot[:serial] +- slot[:serial] +- +- +- Target decryption time in MS for the database. +- MÃ¥lets avkrypteringstid i ms för databasen. +- +- +- time +- tid +- +- +- Set the key file for the database. +- Ange nyckelfil för databasen. +- +- +- Set a password for the database. +- Ange lösenord för databasen. +- +- +- Invalid decryption time %1. +- Ogiltig avkrypteringstid %1. +- +- +- Target decryption time must be between %1 and %2. +- MÃ¥lets avkrypteringstid mÃ¥ste vara mellan %1 och %2. +- +- +- Failed to set database password. +- Kunde inte ange databaslösenord. +- +- +- Benchmarking key derivation function for %1ms delay. +- Benchmarking nyckelhärledningsfunktion för %1ms fördröjning. +- +- +- Setting %1 rounds for key derivation function. +- Anger %1 rundor för nyckelhärledningsfunktionen. +- +- +- error while setting database key derivation settings. +- fel vid inställning av databasens nyckel härledning. +- +- +- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. +- Format att använda vid export. Tillgängliga alternativ är "xml" eller "csv". Standardvärdet är "xml". +- +- +- Unable to import XML database: %1 +- Kunde inte importera XML-databas: %1 +- +- +- Show a database's information. +- Visa en databas information. +- +- +- UUID: +- UUID: +- +- +- Name: +- Namn: +- +- +- Description: +- Beskrivning: +- +- +- Cipher: +- Chiffer: +- +- +- KDF: +- KDF: +- +- +- Recycle bin is enabled. +- Papperskorgen är aktiverad. +- +- +- Recycle bin is not enabled. +- Papperskorgen är inte aktiverad. +- +- +- Invalid command %1. +- Ogiltigt kommando %1. +- +- +- Invalid YubiKey serial %1 +- Ogiltigt YubiKey serienummer %1 +- +- +- Please touch the button on your YubiKey to continue… +- Tryck pÃ¥ knappen pÃ¥ din YubiKey för att fortsätta... +- +- +- Do you want to create a database with an empty password? [y/N]: +- Vill du skapa en databas med ett tomt lösenord? [y/N]: +- +- +- Repeat password: +- Upprepa lösenordet: +- +- +- Error: Passwords do not match. +- Fel: Lösenorden stämmer inte. +- +- +- All clipping programs failed. Tried %1 +- +- Alla klippprogram misslyckades. Försökte med %1 +- +- +- +- AES (%1 rounds) +- AES (%1 rundor) +- +- +- AES 256-bit +- AES 256-bit +- +- +- Twofish 256-bit +- Twofish 256-bit +- +- +- ChaCha20 256-bit +- ChaCha20 256-bit +- +- +- Benchmark %1 delay +- Benchmark %1 fördröjning +- +- +- %1 ms +- milliseconds +- %1 ms%1 ms +- +- +- %1 s +- seconds +- %1 s%1 s +- +- +- path to a custom local config file +- +- +- +- WARNING: You are using an old key file format which KeePassXC may +-stop supporting in the future. +- +-Please consider generating a new key file. +- +- +- +- Argon2%1 (%2 rounds, %3 KB) +- +- +- +- Argon2d (KDBX 4 – recommended) +- +- +- +- Argon2id (KDBX 4) +- +- +- +- TOTP +- TOTP +- +- +- Icon +- Ikon +- +- +- Unsupported key file version: %1 +- +- +- +- Checksum mismatch! Key file may be corrupt. +- +- +- +- Unexpected key file data! Key file may be corrupt. +- +- +- +- +- QtIOCompressor +- +- Internal zlib error when compressing: +- Internt zlib-fel vid komprimering: +- +- +- Error writing to underlying device: +- Kunde inte skriva till underliggande enhet: +- +- +- Error opening underlying device: +- Kunde inte öppna underliggande enhet: +- +- +- Error reading data from underlying device: +- Kunde inte läsa data frÃ¥n underliggande enhet: +- +- +- Internal zlib error when decompressing: +- Internt zlib-fel vid extrahering: +- +- +- +- QtIOCompressor::open +- +- The gzip format not supported in this version of zlib. +- Gzip-formatet stöds inte i denna version av zlib. +- +- +- Internal zlib error: +- Internt zlib-fel: +- +- +- +- ReportsWidgetHealthcheck +- +- Also show entries that have been excluded from reports +- Visa ocksÃ¥ poster som har undantagits frÃ¥n rapporter +- +- +- Hover over reason to show additional details. Double-click entries to edit. +- HÃ¥ll muspekaren över anledning, för att visa fler detaljer. Dubbelklicka pÃ¥ posten för att redigera. +- +- +- Bad +- Password quality +- Usel +- +- +- Bad — password must be changed +- Usel — Lösenordet mÃ¥ste ändras +- +- +- Poor +- Password quality +- DÃ¥lig +- +- +- Poor — password should be changed +- DÃ¥lig — Lösenordet mÃ¥ste ändras +- +- +- Weak +- Password quality +- Svag +- +- +- Weak — consider changing the password +- Svag — Överväg att ändra lösenordet +- +- +- (Excluded) +- (Undantagen) +- +- +- This entry is being excluded from reports +- Denna post undantas frÃ¥n rapporter +- +- +- Please wait, health data is being calculated... +- Vänta, hälsodata beräknas... +- +- +- Congratulations, everything is healthy! +- Grattis! Allt är friskt! +- +- +- Title +- Titel +- +- +- Path +- Sökväg +- +- +- Score +- Poäng +- +- +- Reason +- Anledning +- +- +- Edit Entry... +- Redigera post... +- +- +- Exclude from reports +- Undanta frÃ¥n rapporter +- +- +- +- ReportsWidgetHibp +- +- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. +- VARNING! Denna rapport kräver att du skickar information till onlinetjänsten Have I Been Pwned (https://haveibeenpwned.com). Om du fortsätter kommer dina databaslösenord att hashas kryptografiskt och de första fem tecknen i dessa hashar kommer att skickas säkert till den här tjänsten. Databasen förblir säker och kan inte rekonstitueras frÃ¥n denna information. Antalet lösenord som du skickar och din IP-adress kommer dock att exponeras för den här tjänsten. +- +- +- Perform Online Analysis +- Utför online-analys +- +- +- Also show entries that have been excluded from reports +- Visa även poster som har uteslutits frÃ¥n rapporter +- +- +- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. +- Denna version av KeePassXC har inga nätverksfunktioner. Nätverk krävs för att kontrollera dina lösenord mot Have I Been Pwned-databaser. +- +- +- Congratulations, no exposed passwords! +- Grattis, inga exponerade lösenord! +- +- +- Title +- Titel +- +- +- Path +- Sökväg +- +- +- Password exposed… +- Lösenord exponerat... +- +- +- (Excluded) +- (Undantaget) +- +- +- This entry is being excluded from reports +- Denna post har undantagits frÃ¥n rapporter +- +- +- once +- en gÃ¥ng +- +- +- up to 10 times +- upp till 10 gÃ¥nger +- +- +- up to 100 times +- upp till 100 gÃ¥nger +- +- +- up to 1000 times +- upp till 1000 gÃ¥nger +- +- +- up to 10,000 times +- upp till 10000 gÃ¥nger +- +- +- up to 100,000 times +- upp till 100000 gÃ¥nger +- +- +- up to a million times +- upp till en miljon gÃ¥nger +- +- +- millions of times +- milljoner gÃ¥nger +- +- +- Edit Entry... +- Redigera posten... +- +- +- Exclude from reports +- Undanta frÃ¥n rapporter +- +- +- +- ReportsWidgetStatistics +- +- Hover over lines with error icons for further information. +- HÃ¥ll muspekaren över rader med felikoner för mer information. +- +- +- Name +- Namn +- +- +- Value +- Värde +- +- +- Please wait, database statistics are being calculated... +- Vänta, databasstatistiken hÃ¥ller pÃ¥ att beräknas... +- +- +- Database name +- Databasnamn +- +- +- Description +- Beskrivning +- +- +- Location +- Plats +- +- +- Last saved +- Senast sparad +- +- +- Unsaved changes +- Osparade ändringar +- +- +- yes +- Ja +- +- +- no +- Nej +- +- +- The database was modified, but the changes have not yet been saved to disk. +- Databasen har ändrats, men ändringarna har ännu inte sparats till disk. +- +- +- Number of groups +- Antal grupper +- +- +- Number of entries +- Antal poster +- +- +- Number of expired entries +- Antal förfallna poster +- +- +- The database contains entries that have expired. +- Databasen innehÃ¥ller poster som har förfallit. +- +- +- Unique passwords +- Unika lösenord +- +- +- Non-unique passwords +- Icke unika lösenord +- +- +- More than 10% of passwords are reused. Use unique passwords when possible. +- Mer än 10% av lösenorden är Ã¥teranvända. Försök använda unika lösenord om möjligt. +- +- +- Maximum password reuse +- Max antal Ã¥teranvända lösenord +- +- +- Some passwords are used more than three times. Use unique passwords when possible. +- Vissa lösenord är använda mer än tre gÃ¥nger. Använd unika lösenord om möjligt. +- +- +- Number of short passwords +- Antal korta lösenord +- +- +- Recommended minimum password length is at least 8 characters. +- Rekommenderad minimilängd pÃ¥ lösenord är minst 8 tecken. +- +- +- Number of weak passwords +- Antal svaga lösenord +- +- +- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. +- LÃ¥nga slumpartade lösenord med betyget "Bra" eller "Utmärkt" rekommenderas. +- +- +- Entries excluded from reports +- Poster undantagna frÃ¥n rapporter +- +- +- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. +- Att utesluta poster frÃ¥n rapporter, t.ex. för att de har ett svagt lösenord, är inte nödvändigtvis ett problem, men du bör hÃ¥lla ett öga pÃ¥ dem. +- +- +- Average password length +- Genomsnittlig lösenordslängd +- +- +- %1 characters +- %1 tecken +- +- +- Average password length is less than ten characters. Longer passwords provide more security. +- Genomsnittlig lösenordslängd är mindre än 10 tecken. Längre lösenord är säkrare. +- +- +- +- SSHAgent +- +- Agent connection failed. +- Anslutning till tjänsten misslyckades. +- +- +- Agent protocol error. +- Fel i tjänstprotokollet. +- +- +- No agent running, cannot add identity. +- Ingen tjänst körs. Kan inte lägga till identitet. +- +- +- No agent running, cannot remove identity. +- Ingen tjänst körs. Kan inte ta bort identitet. +- +- +- Agent refused this identity. Possible reasons include: +- Tjänsten avvisade denna identitet. Möjliga orsaker inkluderar: +- +- +- The key has already been added. +- Nyckeln har redan lagts till. +- +- +- Restricted lifetime is not supported by the agent (check options). +- Begränsad livstid stöds inte av tjänsten (kontrollera alternativen). +- +- +- A confirmation request is not supported by the agent (check options). +- Bekräftelsebegäran stöds inte av tjänsten (kontrollera alternativen). +- +- +- Key identity ownership conflict. Refusing to add. +- Nyckelidentitets ägarskapskonflikt. Nekar att lägga till. +- +- +- No agent running, cannot list identities. +- Tjänsten körs inte, kan inte lista identiteter. +- +- +- +- SearchHelpWidget +- +- Search Help +- Sökhjälp +- +- +- Search terms are as follows: [modifiers][field:]["]term["] +- Söktermer är följande: [modifierare][fält:]["]term["] +- +- +- Every search term must match (ie, logical AND) +- Varje sökterm mÃ¥ste matcha (ex. logisk OCH) +- +- +- Modifiers +- Modifierare +- +- +- exclude term from results +- Undanta termen frÃ¥n resultat +- +- +- match term exactly +- Matcha termen exakt +- +- +- use regex in term +- Använd RegEx i termen +- +- +- Fields +- Fält +- +- +- Term Wildcards +- Jokertecken +- +- +- match anything +- Matcha allt +- +- +- match one +- Matcha en +- +- +- logical OR +- Logisk ELLER +- +- +- Examples +- Exempel +- +- +- +- SearchWidget +- +- Search +- Sök +- +- +- Limit search to selected group +- Begränsa sökningen till vald grupp +- +- +- Search Help +- Sökhjälp +- +- +- Search (%1)... +- Search placeholder text, %1 is the keyboard shortcut +- Sök (%1)... +- +- +- Case sensitive +- Skiftlägeskänslig +- +- +- +- SettingsWidgetFdoSecrets +- +- Options +- Alternativ +- +- +- Enable KeepassXC Freedesktop.org Secret Service integration +- Aktivera KeePassXC Secret Service-integration frÃ¥n Freedesktop.org +- +- +- General +- Allmänt +- +- +- Show notification when credentials are requested +- Visa avisering när autentiseringsuppgifter begärs +- +- +- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> +- <html><head/><body><p>Om papperskorgen är aktiverad för databasen, kommer posterna att flyttas direkt till papperskorgen. Annars kommer de att tas bort utan bekräftelse.</p><p>Du kommer fortfarande att tillfrÃ¥gas om nÃ¥gra poster refereras av andra.</p></body></html> +- +- +- Exposed database groups: +- Exponerade databasgrupper: +- +- +- Authorization +- Auktorisation +- +- +- These applications are currently connected: +- Dessa program är för närvarande anslutna: +- +- +- Don't confirm when entries are deleted by clients +- Bekräfta inte när poster tas bort av klienter +- +- +- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. +- <b>Fel:</b> Kunde inte ansluta till DBus. Kontrollera din DBus-installation. +- +- +- <b>Warning:</b> +- <b>Varning!</b> +- +- +- Save current changes to activate the plugin and enable editing of this section. +- Spara aktuella ändringar för att aktivera insticksmodulen och aktivera redigering av det här avsnittet. +- +- +- +- SettingsWidgetKeeShare +- +- Active +- Aktiv +- +- +- Allow export +- TillÃ¥t export +- +- +- Allow import +- TillÃ¥t import +- +- +- Own certificate +- Eget certifikat +- +- +- Fingerprint: +- Fingeravtryck: +- +- +- Certificate: +- Certifikat: +- +- +- Signer +- Undertecknare +- +- +- Key: +- Nyckel: +- +- +- Generate +- Generera +- +- +- Import +- Importera +- +- +- Export +- Exportera +- +- +- Imported certificates +- Importerade certifikat +- +- +- Trust +- Betrodd +- +- +- Ask +- FrÃ¥ga +- +- +- Untrust +- Ej betrodd +- +- +- Remove +- Ta bort +- +- +- Path +- Sökväg +- +- +- Status +- Status +- +- +- Fingerprint +- Fingeravtryck +- +- +- Certificate +- Certifikat +- +- +- Trusted +- Betrodd +- +- +- Untrusted +- Ej betrodd +- +- +- Unknown +- Okänd +- +- +- key.share +- Filetype for KeeShare key +- key.share +- +- +- KeeShare key file +- KeeShare nyckelfil +- +- +- All files +- Alla filer +- +- +- Select path +- Välj sökväg +- +- +- Exporting changed certificate +- Exporterar ändrat certifikat +- +- +- The exported certificate is not the same as the one in use. Do you want to export the current certificate? +- Det exporterade certifikatet är inte detsamma som det som används. Vill du exportera det aktuella certifikatet? +- +- +- Signer: +- Undertecknare: +- +- +- Allow KeeShare imports +- TillÃ¥t KeeShare-import +- +- +- Allow KeeShare exports +- TillÃ¥t KeeShare-export +- +- +- Only show warnings and errors +- Visa bara varningar och fel +- +- +- Key +- Nyckel +- +- +- Signer name field +- Undertecknarens namn +- +- +- Generate new certificate +- Generera nytt certifikat +- +- +- Import existing certificate +- Importera befintligt certifikat +- +- +- Export own certificate +- Exportera eget certifikat +- +- +- Known shares +- Kända delningar +- +- +- Trust selected certificate +- Lita pÃ¥ markerat certifikat +- +- +- Ask whether to trust the selected certificate every time +- FrÃ¥ga om markerat certifikat alltid skall betraktas som pÃ¥litligt varje gÃ¥ng +- +- +- Untrust selected certificate +- Lita inte pÃ¥ markerat certifikat +- +- +- Remove selected certificate +- Ta bort markerat certifikat +- +- +- +- ShareExport +- +- Overwriting signed share container is not supported - export prevented +- Det saknas stöd för att skriva över signerad delningsbehÃ¥llare. - Export förhindrad. +- +- +- Could not write export container (%1) +- Kunde inte skriva exportbehÃ¥llare (%1) +- +- +- Could not embed signature: Could not open file to write (%1) +- Kunde inte bädda in signatur: Kunde inte öppna filen för skrivning (%1) +- +- +- Could not embed signature: Could not write file (%1) +- Kunde inte bädda in signatur: Kunde inte skriva filen (%1) +- +- +- Could not embed database: Could not open file to write (%1) +- Kunde inte bädda in databas: Kunde inte öppna filen för skrivning (%1) +- +- +- Could not embed database: Could not write file (%1) +- Kunde inte bädda in databa: Kunde inte skriva filen (%1) +- +- +- Overwriting unsigned share container is not supported - export prevented +- Det saknas stöd för att skriva över osignerad delningsbehÃ¥llare. - Export förhindrad. +- +- +- Could not write export container +- Kunde inte skriva exportbehÃ¥llare +- +- +- Unexpected export error occurred +- Ett oväntat exportfel inträffade +- +- +- +- ShareImport +- +- Import from container without signature +- Importera frÃ¥n behÃ¥llare utan signatur +- +- +- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? +- Vi kan inte verifiera källan för den delade behÃ¥llaren, eftersom den inte är signerad. Vill du verkligen importera frÃ¥n %1? +- +- +- Import from container with certificate +- Importera frÃ¥n behÃ¥llare med certifikat +- +- +- Do you want to trust %1 with the fingerprint of %2 from %3? +- Vill du lita pÃ¥ %1, med fingeravtryck för %2, frÃ¥n %3? +- +- +- Not this time +- Inte den här gÃ¥ngen +- +- +- Never +- Aldrig +- +- +- Always +- Alltid +- +- +- Just this time +- Endast den här gÃ¥ngen +- +- +- Signed share container are not supported - import prevented +- Signerad delningsbehÃ¥llare stöds inte. - Import förhindrad. +- +- +- File is not readable +- Filen kan inte läsas +- +- +- Invalid sharing container +- Ogiltig delningsbehÃ¥llare +- +- +- Untrusted import prevented +- Ej betrodd import förhindrad +- +- +- Successful signed import +- Signerad import slutförd +- +- +- Unsigned share container are not supported - import prevented +- Osignerad delningsbehÃ¥llare stöds inte. - Import förhindrad. +- +- +- Successful unsigned import +- Osignerad import slutförd +- +- +- File does not exist +- Filen finns inte +- +- +- Unknown share container type +- Okänd typ av delningsbehÃ¥llare +- +- +- +- ShareObserver +- +- Import from %1 failed (%2) +- Import frÃ¥n %1 misslyckades (%2) +- +- +- Import from %1 successful (%2) +- Import frÃ¥n %1 slutförd (%2) +- +- +- Imported from %1 +- Importerad ifrÃ¥n %1 +- +- +- Export to %1 failed (%2) +- Export till %1 misslyckades (%2) +- +- +- Export to %1 successful (%2) +- Export till %1 slutförd (%2) +- +- +- Export to %1 +- Exportera till %1 +- +- +- Multiple import source path to %1 in %2 +- Sökväg till flerfaldig importkälla för %1 i %2 +- +- +- Conflicting export target path %1 in %2 +- Motstridiga sökvägar för exportmÃ¥l %1 i %2 +- +- +- +- TotpDialog +- +- Timed Password +- Tidsbegränsat lösenord +- +- +- 000000 +- 000000 +- +- +- Copy +- Kopiera +- +- +- Expires in <b>%n</b> second(s) +- Upphör att gälla om <b>%n</b> sekundUpphör att gälla om <b>%n</b> sekunder +- +- +- +- TotpExportSettingsDialog +- +- Copy +- Kopiera +- +- +- NOTE: These TOTP settings are custom and may not work with other authenticators. +- TOTP QR code dialog warning +- OBS! Dessa TOTP-inställningar är anpassade och kanske inte fungerar med andra autentiserare. +- +- +- There was an error creating the QR code. +- Det uppstod ett fel när QR-koden skapades. +- +- +- Closing in %1 seconds. +- Stänger om %1 sekunder. +- +- +- +- TotpSetupDialog +- +- Setup TOTP +- Konfigurera TOTP +- +- +- Default RFC 6238 token settings +- Standard RFC 6238 token-inställningar +- +- +- Steam token settings +- Steam token-inställningar +- +- +- Use custom settings +- Använd anpassade inställningar +- +- +- Custom Settings +- Anpassade inställningar +- +- +- Time step: +- Tidsteg: +- +- +- sec +- Seconds +- sek +- +- +- Code size: +- Kodstorlek: +- +- +- Secret Key: +- Hemlig nyckel: +- +- +- Secret key must be in Base32 format +- En hemlig nyckel mÃ¥ste vara i Base32-format +- +- +- Secret key field +- Hemlig nyckel +- +- +- Algorithm: +- Algoritm: +- +- +- Time step field +- Tidssteg +- +- +- digits +- siffror +- +- +- Invalid TOTP Secret +- Ogiltig TOTP-hemlighet +- +- +- You have entered an invalid secret key. The key must be in Base32 format. +-Example: JBSWY3DPEHPK3PXP +- Du har angivit en ogiltig hemlig nyckel. Nyckeln mÃ¥ste vara i Base32-format. +-Exempel: JBSWY3DPEHPK3PXP +- +- +- Confirm Remove TOTP Settings +- Bekräfta borttagning av TOTP-inställningar +- +- +- Are you sure you want to delete TOTP settings for this entry? +- Vill du verkligen ta bort TOTP-inställningarna för den här posten? +- +- +- +- URLEdit +- +- Invalid URL +- Ogiltig URL +- +- +- +- UpdateCheckDialog +- +- Checking for updates +- Söker efter uppdateringar +- +- +- Checking for updates... +- Söker efter uppdateringar... +- +- +- Close +- Stäng +- +- +- Update Error! +- Uppdateringsfel! +- +- +- An error occurred in retrieving update information. +- Ett fel inträffade vid inhämtning av uppdateringsinformation. +- +- +- Please try again later. +- Försök igen senare. +- +- +- Software Update +- Mjukvaruuppdatering +- +- +- A new version of KeePassXC is available! +- En ny version av KeePassXC finns tillgänglig! +- +- +- KeePassXC %1 is now available — you have %2. +- KeePassXC %1 är nu tillgänglig — Du har %2. +- +- +- Download it at keepassxc.org +- Ladda ner den pÃ¥ keepassxc.org +- +- +- You're up-to-date! +- Du är uppdaterad! +- +- +- KeePassXC %1 is currently the newest version available +- KeePassXC %1 är för närvarande den nyaste tillgängliga versionen +- +- +- +- WelcomeWidget +- +- Start storing your passwords securely in a KeePassXC database +- Börja spara dina lösenord säkert, i en KeePassXC-databas. +- +- +- Create new database +- Skapa ny databas +- +- +- Open existing database +- Öppna befintlig databas +- +- +- Import from KeePass 1 +- Importera frÃ¥n KeePass 1 +- +- +- Import from CSV +- Importera frÃ¥n CSV +- +- +- Recent databases +- Tidigare databaser +- +- +- Welcome to KeePassXC %1 +- Välkommen till KeePassXC %1 +- +- +- Import from 1Password +- Importera frÃ¥n 1Password +- +- +- Open a recent database +- Öppna en tidigare databas +- +- +- +- YubiKey +- +- %1 [%2] Configured Slot - %3 +- %1 [%2] Konfigurerad plats - %3 +- +- +- %1 [%2] Challenge Response - Slot %3 - %4 +- %1 [%2] Challenge Response - Plats %3 - %4 +- +- +- Press +- Tryck +- +- +- Passive +- Passiv +- +- +- %1 Invalid slot specified - %2 +- %1 Ogiltig plats specificerad - %2 +- +- +- The YubiKey interface has not been initialized. +- YubiKey-gränssnittet har inte startats. +- +- +- Hardware key is currently in use. +- HÃ¥rdvarunyckel används för närvarande. +- +- +- Could not find hardware key with serial number %1. Please plug it in to continue. +- Kunde hitta hÃ¥rdvarunyckel med serienummer %1. Anslut den för att fortsätta. +- +- +- Hardware key timed out waiting for user interaction. +- HÃ¥rdvarunyckelns tidsgräns för användarinteraktion överskreds. +- +- +- A USB error ocurred when accessing the hardware key: %1 +- Ett USB-fel uppstod vid Ã¥tkomst till maskinvarunyckeln: %1 +- +- +- Failed to complete a challenge-response, the specific error was: %1 +- Kunde inte slutföra en challenge-response, det specifika felet var: %1 +- +- +- +- YubiKeyEditWidget +- +- Refresh +- Uppdatera +- +- +- YubiKey Challenge-Response +- YubiKey Challenge-Response +- +- +- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- <p>Om du äger en <a href="https://www.yubico.com/">YubiKey</a>, kan du använda den för ytterligare säkerhet.</p><p>YubiKey kräver att en av dess platser programmeras som <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- +- +- Refresh hardware tokens +- Uppdatera hÃ¥rdvaru-tokens +- +- +- Hardware key slot selection +- Val av plats för hÃ¥rdvarunyckel +- +- +- Could not find any hardware keys! +- Kunde inte hitta nÃ¥gra hÃ¥rdvarunycklar! +- +- +- Selected hardware key slot does not support challenge-response! +- Den valda maskinvarunyckelplatsen stöder inte challenge-response! +- +- +- Detecting hardware keys… +- Identifierar hÃ¥rdvarunycklar... +- +- +- No hardware keys detected +- Inga hÃ¥rdvarunycklar identifierade +- +- +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_th.ts keepassxc-2.6.4-patched/share/translations/keepassx_th.ts +--- keepassxc-2.6.4-orig/share/translations/keepassx_th.ts 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/translations/keepassx_th.ts 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7861 +0,0 @@ +- +- +- AboutDialog +- +- About KeePassXC +- เà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸š KeePassXC +- +- +- About +- เà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸š +- +- +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- รายงานจุดบà¸à¸žà¸£à¹ˆà¸­à¸‡à¸—ี่ <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- +- +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- KeePassXC เผยà¹à¸žà¸£à¹ˆà¸ à¸²à¸¢à¹ƒà¸•à¹‰à¹€à¸‡à¸·à¹ˆà¸­à¸™à¹„ขของสัà¸à¸à¸²à¸­à¸™à¸¸à¸à¸²à¸•à¸ªà¸²à¸˜à¸²à¸£à¸“ะทั่วไปของà¸à¸™à¸¹ (GNU GPL) รุ่น 2 หรือรุ่น 3 (คุณสามารถเลือà¸à¹„ด้) +- +- +- Contributors +- ผู้ร่วมสมทบ +- +- +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">ดูรายชื่อผู้สมทบบน GitHub</a> +- +- +- Debug Info +- ข้อมูลà¸à¸²à¸£à¹à¸à¹‰à¸ˆà¸¸à¸”บà¸à¸žà¸£à¹ˆà¸­à¸‡ +- +- +- Include the following information whenever you report a bug: +- ใส่ข้อมูลดังต่อไปนี้ทุà¸à¸„รั้งที่คุณรายงานจุดบà¸à¸žà¸£à¹ˆà¸­à¸‡à¸‚องซอฟต์à¹à¸§à¸£à¹Œ +- +- +- Copy to clipboard +- คัดลอà¸à¹„ปยังคลิปบอร์ด +- +- +- Project Maintainers: +- ผู้ดูà¹à¸¥à¹‚ครงà¸à¸²à¸£ +- +- +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- ทีมงาน KeePassXC ขอขอบคุณ debfx สำหรับà¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¸•à¸±à¸§à¸•à¹‰à¸™à¸‰à¸šà¸±à¸šà¸‚อง KeePassX +- +- +- +- AgentSettingsWidget +- +- Use OpenSSH for Windows instead of Pageant +- ใช้ OpenSSH สำหรับ Windows à¹à¸—น Pageant +- +- +- Enable SSH Agent integration +- +- +- +- SSH_AUTH_SOCK value +- +- +- +- SSH_AUTH_SOCK override +- +- +- +- (empty) +- (ว่าง) +- +- +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- +- +- +- SSH Agent connection is working! +- +- +- +- +- ApplicationSettingsWidget +- +- Application Settings +- à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าโปรà¹à¸à¸£à¸¡ +- +- +- General +- ทั่วไป +- +- +- Security +- ความปลอดภัย +- +- +- Access error for config file %1 +- มีข้อผิดพลาดในà¸à¸²à¸£à¹€à¸‚้าถึงà¹à¸Ÿà¹‰à¸¡à¸•à¸±à¹‰à¸‡à¸„่า %1 +- +- +- Icon only +- ไอคอนเท่านั้น +- +- +- Text only +- ข้อความเท่านั้น +- +- +- Text beside icon +- ข้อความข้างไอคอน +- +- +- Text under icon +- ข้อความข้างล่างไอคอน +- +- +- Follow style +- ปà¸à¸´à¸šà¸±à¸•à¸´à¸•à¸²à¸¡à¸ªà¹„ตล์ +- +- +- Reset Settings? +- ล้างà¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าหรือไม่? +- +- +- Are you sure you want to reset all general and security settings to default? +- +- +- +- Monochrome (light) +- สีเดียว (สว่าง) +- +- +- Monochrome (dark) +- สีเดียว (มืด) +- +- +- Colorful +- สีสดใส +- +- +- You must restart the application to set the new language. Would you like to restart now? +- +- +- +- +- ApplicationSettingsWidgetGeneral +- +- Basic Settings +- à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าพื้นà¸à¸²à¸™ +- +- +- Startup +- เริ่มต้น +- +- +- Start only a single instance of KeePassXC +- เริ่มต้นอินสà¹à¸•à¸™à¸‹à¹Œà¹€à¸”ี่ยวของ KeePassXC เท่านั้น +- +- +- Minimize window at application startup +- ย่อหน้าต่างลงเล็à¸à¸ªà¸¸à¸”ตอนเริ่มโปรà¹à¸à¸£à¸¡ +- +- +- File Management +- à¸à¸²à¸£à¸ˆà¸±à¸”à¸à¸²à¸£à¹„ฟล์ +- +- +- Backup database file before saving +- สำรองไฟล์à¸à¸²à¸™à¸‚้อมูลà¸à¹ˆà¸­à¸™à¸à¸²à¸£à¸šà¸±à¸™à¸—ึภ+- +- +- Automatically save after every change +- บันทึà¸à¸­à¸±à¸•à¹‚นมัติทุà¸à¸„รั้งที่มีà¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡ +- +- +- Automatically reload the database when modified externally +- โหลดà¸à¸²à¸™à¸‚้อมูลใหม่โดยอัตโนมัติเมื่อมีà¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸ˆà¸²à¸à¸ à¸²à¸¢à¸™à¸­à¸ +- +- +- Entry Management +- à¸à¸²à¸£à¸ˆà¸±à¸”à¸à¸²à¸£à¸£à¸²à¸¢à¸à¸²à¸£ +- +- +- Use group icon on entry creation +- ใช้ไอคอนà¸à¸¥à¸¸à¹ˆà¸¡à¸šà¸™à¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¸£à¸²à¸¢à¸à¸²à¸£ +- +- +- Minimize instead of app exit +- ย่อหน้าต่างà¹à¸—นที่à¸à¸²à¸£à¸›à¸´à¸”à¹à¸­à¸› +- +- +- Show a system tray icon +- à¹à¸ªà¸”งไอคอนของซิสเต็มเทรย์ +- +- +- Hide window to system tray when minimized +- ซ่อนหน้าต่างในซิสเต็มเทรย์เมื่อถูà¸à¸¢à¹ˆà¸­ +- +- +- Auto-Type +- Auto-Type +- +- +- Use entry title to match windows for global Auto-Type +- ใช้หัวข้อของรายà¸à¸²à¸£à¹ƒà¸™à¸à¸²à¸£à¸ˆà¸±à¸šà¸„ู่หน้าต่างà¸à¸±à¸š Auto-Type สาà¸à¸¥ +- +- +- Use entry URL to match windows for global Auto-Type +- ใช้ URL ของรายà¸à¸²à¸£à¹ƒà¸™à¸à¸²à¸£à¸ˆà¸±à¸šà¸„ู่หน้าต่างà¸à¸±à¸š Auto-Type สาà¸à¸¥ +- +- +- Always ask before performing Auto-Type +- ถามà¸à¹ˆà¸­à¸™à¹€à¸ªà¸¡à¸­à¹€à¸¡à¸·à¹ˆà¸­à¸ˆà¸°à¸—ำà¸à¸²à¸£ Auto-Type +- +- +- ms +- Milliseconds +- มิลลิวินาที +- +- +- Movable toolbar +- à¹à¸–บเครื่องมือที่เคลื่อนย้ายได้ +- +- +- Remember previously used databases +- จำà¸à¸²à¸™à¸‚้อมูลที่ใช้ครั้งที่à¹à¸¥à¹‰à¸§ +- +- +- Load previously open databases on startup +- เรียà¸à¹ƒà¸Šà¹‰à¸à¸²à¸™à¸‚้อมูลที่เปิดใช้à¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²à¹ƒà¸™à¸•à¸­à¸™à¹€à¸£à¸´à¹ˆà¸¡à¹‚ปรà¹à¸à¸£à¸¡ +- +- +- Remember database key files and security dongles +- จำà¹à¸Ÿà¹‰à¸¡à¸à¸¸à¸à¹à¸ˆà¹à¸¥à¸°à¸”องเà¸à¸´à¸¥à¸„วามปลอดภัยที่ใช้à¸à¸±à¸šà¸à¸²à¸™à¸‚้อมูล +- +- +- Check for updates at application startup once per week +- ตรวจสอบà¸à¸²à¸£à¸›à¸£à¸±à¸šà¸›à¸£à¸¸à¸‡à¸ªà¸±à¸›à¸”าห์ละครั้งขณะเปิดà¹à¸­à¸› +- +- +- Include beta releases when checking for updates +- ให้ตรวจสอบรุ่นทดสอบเบตาด้วย ขณะตรวจสอบà¸à¸²à¸£à¸›à¸£à¸±à¸šà¸›à¸£à¸¸à¸‡ +- +- +- Language: +- ภาษา: +- +- +- (restart program to activate) +- (เริ่มโปรà¹à¸à¸£à¸¡à¹ƒà¸«à¸¡à¹ˆà¹€à¸žà¸·à¹ˆà¸­à¹ƒà¸Šà¹‰à¸‡à¸²à¸™) +- +- +- Minimize window after unlocking database +- +- +- +- Minimize when opening a URL +- +- +- +- Hide window when copying to clipboard +- ซ่อนหน้าต่างขณะที่คัดลอà¸à¹„ปยังคลิปบอร์ด +- +- +- Minimize +- ย่อเล็ภ+- +- +- Drop to background +- หลบไปอยู่ที่ฉาà¸à¸«à¸¥à¸±à¸‡ +- +- +- Favicon download timeout: +- ระยะหมดเวลาดาวน์โหลด favicon: +- +- +- Website icon download timeout in seconds +- จำนวนวินาทีที่จะพยายามดาวน์โหลดไอคอนของเว็บไซต์ +- +- +- sec +- Seconds +- วินาที +- +- +- Toolbar button style +- รูปà¹à¸šà¸šà¸›à¸¸à¹ˆà¸¡à¸šà¸™à¹à¸–บเครื่องมือ +- +- +- Language selection +- เลือà¸à¸ à¸²à¸©à¸² +- +- +- Global auto-type shortcut +- ปุ่มลัดพิมพ์อัตโนมัติในทุà¸à¹‚ปรà¹à¸à¸£à¸¡ +- +- +- Auto-type character typing delay milliseconds +- หน่วงเวลาพิมพ์อัตโนมัติà¹à¸•à¹ˆà¸¥à¸°à¸•à¸±à¸§à¸­à¸±à¸à¸©à¸£ หน่วยเป็นมิลลิวินาที +- +- +- Auto-type start delay milliseconds +- หน่วงเวลาเริ่มพิมพ์อัตโนมัติ หน่วยเป็นมิลลิวินาที +- +- +- Automatically launch KeePassXC at system startup +- เรียà¸à¹ƒà¸«à¹‰ KeePassXC โดยอัตโนมัติเมื่อเริ่มระบบ +- +- +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- +- +- +- User Interface +- ส่วนติดต่อผู้ใช้ +- +- +- Toolbar button style: +- +- +- +- Use monospaced font for notes +- +- +- +- Tray icon type: +- ชนิดไอคอนที่ถาด: +- +- +- Reset settings to default… +- +- +- +- Auto-Type typing delay: +- +- +- +- Global Auto-Type shortcut: +- +- +- +- Auto-Type start delay: +- +- +- +- Automatically save when locking database +- +- +- +- Automatically save non-data changes when locking database +- +- +- +- Tray icon type +- +- +- +- +- ApplicationSettingsWidgetSecurity +- +- Timeouts +- หมดเวลา +- +- +- Clear clipboard after +- ล้างคลิปบอร์ดหลัง +- +- +- sec +- Seconds +- วินาที +- +- +- Lock databases after inactivity of +- ล็อคà¸à¸²à¸™à¸‚้อมูลหลังไม่มีà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™ +- +- +- min +- นาที +- +- +- Forget TouchID after inactivity of +- ไม่จำ TouchID หลังไม่มีà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™ +- +- +- Convenience +- ความสะดวภ+- +- +- Lock databases when session is locked or lid is closed +- ล็อคà¸à¸²à¸™à¸‚้อมูลเมื่อเซสชันถูà¸à¸¥à¹‡à¸­à¸„หรือà¸à¸²à¸–ูà¸à¸›à¸´à¸” +- +- +- Forget TouchID when session is locked or lid is closed +- ไม่จำ TouchID เมื่อเซสชันถูà¸à¸¥à¹‡à¸­à¸„หรือà¸à¸²à¸–ูà¸à¸›à¸´à¸” +- +- +- Lock databases after minimizing the window +- ล็อคà¸à¸²à¸™à¸‚้อมูลหลังย่อหน้าต่างลง +- +- +- Re-lock previously locked database after performing Auto-Type +- ล็อคà¸à¸²à¸™à¸‚้อมูลà¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²à¸­à¸µà¸à¸„รั้งหลังทำà¸à¸²à¸£ Auto-Type +- +- +- Hide passwords in the entry preview panel +- ซ่อนรหัสผ่านในà¹à¸œà¸‡à¹à¸ªà¸”งตัวอย่างรายà¸à¸²à¸£ +- +- +- Hide entry notes by default +- ซ่อนบันทึà¸à¸£à¸²à¸¢à¸à¸²à¸£à¹€à¸›à¹‡à¸™à¸„่าตั้งต้น +- +- +- Privacy +- ความเป็นส่วนตัว +- +- +- Use DuckDuckGo service to download website icons +- ใช้บริà¸à¸²à¸£à¸‚อง DuckDuckGo เพื่อดาวน์โหลดไอคอนของเว็บไซต์ +- +- +- Clipboard clear seconds +- ล้างคลิปบอร์ดภายใน หน่วยเป็นวินาที +- +- +- Touch ID inactivity reset +- +- +- +- Database lock timeout seconds +- +- +- +- min +- Minutes +- นาที +- +- +- Clear search query after +- ล้างคำค้นหลังจาภ+- +- +- Require password repeat when it is visible +- +- +- +- Hide passwords when editing them +- +- +- +- Use placeholder for empty password fields +- +- +- +- +- AutoType +- +- Couldn't find an entry that matches the window title: +- ไม่พบรายà¸à¸²à¸£à¸—ี่ตรงà¸à¸±à¸šà¸«à¸±à¸§à¸‚้อเว็บไซต์ +- +- +- Auto-Type - KeePassXC +- Auto-Type - KeePassXC +- +- +- Auto-Type +- Auto-Type +- +- +- The Syntax of your Auto-Type statement is incorrect! +- ไวยาà¸à¸£à¸“์ของคำสั่ง Auto-Type ไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- คำสั่ง Auto-Type นี้ล่าช้า ต้องà¸à¸²à¸£à¸”ำเนินà¸à¸²à¸£à¸•à¹ˆà¸­à¸«à¸£à¸·à¸­à¹„ม่ +- +- +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- คำสั่ง Auto-Type นี้à¸à¸”à¹à¸›à¹‰à¸™à¸žà¸´à¸¡à¸žà¹Œà¸Šà¹‰à¸² ต้องà¸à¸²à¸£à¸”ำเนินà¸à¸²à¸£à¸•à¹ˆà¸­à¸«à¸£à¸·à¸­à¹„ม่ +- +- +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- คำสั่ง Auto-Type นี้มีอาร์à¸à¸´à¸§à¹€à¸¡à¸™à¸•à¹Œà¸‹à¹‰à¸³à¸à¸±à¸™à¸«à¸¥à¸²à¸¢à¸„รั้ง ต้องà¸à¸²à¸£à¸”ำเนินà¸à¸²à¸£à¸•à¹ˆà¸­à¸«à¸£à¸·à¸­à¹„ม่ +- +- +- Permission Required +- ต้องà¸à¸²à¸£à¸à¸²à¸£à¸­à¸™à¸¸à¸à¸²à¸• +- +- +- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. +- +- +- +- +- AutoTypeAssociationsModel +- +- Window +- หน้าต่าง +- +- +- Sequence +- ลำดับ +- +- +- Default sequence +- ลำดับมาตรà¸à¸²à¸™ +- +- +- +- AutoTypeMatchModel +- +- Group +- à¸à¸¥à¸¸à¹ˆà¸¡ +- +- +- Title +- หัวเรื่อง +- +- +- Username +- ชื่อผู้ใช้ +- +- +- Sequence +- ลำดับ +- +- +- +- AutoTypeMatchView +- +- Copy &username +- คัดลอà¸à¸Šà¸·à¹ˆà¸­à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰ (&U) +- +- +- Copy &password +- คัดลอà¸à¸£à¸«à¸±à¸ªà¸œà¹ˆà¸²à¸™ +- +- +- +- AutoTypePlatformMac +- +- Permission Required +- ต้องà¸à¸²à¸£à¸à¸²à¸£à¸­à¸™à¸¸à¸à¸²à¸• +- +- +- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. +- +- +- +- +- AutoTypeSelectDialog +- +- Auto-Type - KeePassXC +- Auto-Type - KeePassXC +- +- +- Select entry to Auto-Type: +- เลือà¸à¸£à¸²à¸¢à¸à¸²à¸£à¹€à¸žà¸·à¹ˆà¸­ Auto-Type +- +- +- Search... +- ค้นหา... +- +- +- +- BrowserAccessControlDialog +- +- KeePassXC - Browser Access Request +- KeePassXC - à¸à¸²à¸£à¸‚อเข้าถึงเบราว์เซอร์ +- +- +- %1 is requesting access to the following entries: +- +- +- +- Remember access to checked entries +- +- +- +- Remember +- +- +- +- Allow access to entries +- +- +- +- Allow Selected +- +- +- +- Deny All +- +- +- +- Disable for this site +- +- +- +- +- BrowserEntrySaveDialog +- +- KeePassXC-Browser Save Entry +- เบราว์เซอร์ KeePassXC บันทึà¸à¸‚้อมูล +- +- +- Ok +- โอเค +- +- +- Cancel +- ยà¸à¹€à¸¥à¸´à¸ +- +- +- You have multiple databases open. +-Please select the correct database for saving credentials. +- คุณเปิดหลายà¸à¸²à¸™à¸‚้อมูล à¸à¸£à¸¸à¸“าเลือà¸à¸à¸²à¸™à¸‚้อมูลที่ถูà¸à¸•à¹‰à¸­à¸‡à¹€à¸žà¸·à¹ˆà¸­à¸šà¸±à¸™à¸—ึà¸à¸‚้อมูลของคุณ +- +- +- +- BrowserService +- +- KeePassXC: New key association request +- KeePassXC คำขอà¸à¸¸à¸à¹à¸ˆà¸—ี่เชื่อมโยงใหม่ +- +- +- Save and allow access +- บันทึà¸à¹à¸¥à¸°à¸­à¸™à¸¸à¸à¸²à¸•à¸´à¹ƒà¸«à¹‰à¹€à¸‚้าถึง +- +- +- KeePassXC: Overwrite existing key? +- KeePassXC เขียนทับà¸à¸¸à¸à¹à¸ˆà¸—ี่มีอยู่เดิม +- +- +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- à¸à¸¸à¸à¹à¸ˆà¸–อดรหัสลับที่ถูà¸à¹à¸šà¹ˆà¸‡à¸›à¸±à¸™à¸”้วยชื่อ "%1" มีอยู่à¸à¹ˆà¸­à¸™à¹à¸¥à¹‰à¸§ +-คุณต้องà¸à¸²à¸£à¸ˆà¸°à¹€à¸‚ียนทับมันหรือไม่ +- +- +- KeePassXC: Update Entry +- KeePassXC ปรับปรุงรายà¸à¸²à¸£ +- +- +- Do you want to update the information in %1 - %2? +- เธอต้องà¸à¸²à¸£à¸ˆà¸°à¸›à¸£à¸±à¸šà¸›à¸£à¸¸à¸‡à¸‚้อมูลให้ทันสมัยใน %1 - %2 หรือไม่ +- +- +- Abort +- หยุด +- +- +- Converting attributes to custom data… +- à¸à¸³à¸¥à¸±à¸‡à¹à¸›à¸¥à¸‡à¸„ุณสมบัติต่างๆเป็นข้อมูลที่à¸à¸³à¸«à¸™à¸”เอง ... +- +- +- KeePassXC: Converted KeePassHTTP attributes +- KeePassXC: à¹à¸›à¸¥à¸‡à¸„ุณลัà¸à¸©à¸“ะของ KeePassHTTP +- +- +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- à¹à¸›à¸¥à¸‡à¸„ุณสมบัติจาà¸à¸£à¸²à¸¢à¸à¸²à¸£ %1 สำเร็จ +-ย้าย %2 à¸à¸¸à¸à¹à¸ˆà¹„ปยังข้อมูลที่à¸à¸³à¸«à¸™à¸”เอง +- +- +- Successfully moved %n keys to custom data. +- ย้ายà¸à¸¸à¸à¹à¸ˆ %n ไปยังข้อมูลที่à¸à¸³à¸«à¸™à¸”เองได้สำเร็จ +- +- +- KeePassXC: No entry with KeePassHTTP attributes found! +- KeePassXC ไม่พบรายà¸à¸²à¸£à¸—ี่มีคุณสมบัติ KeePassHTTP +- +- +- The active database does not contain an entry with KeePassHTTP attributes. +- à¸à¸²à¸™à¸‚้อมูลที่ยังใช้งานอยู่ไม่มีรายà¸à¸²à¸£à¸•à¸²à¸¡à¸„ุณสมบัติ KeePassHTTP. +- +- +- KeePassXC: Legacy browser integration settings detected +- KeePassXC ตรวจพบà¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าà¸à¸²à¸£à¸£à¸§à¸¡à¹€à¸šà¸£à¸²à¸§à¹Œà¹€à¸‹à¸­à¸£à¹Œà¸”ั้งเดิม +- +- +- KeePassXC: Create a new group +- KeePassXC สร้างà¸à¸¥à¸¸à¹ˆà¸¡à¹ƒà¸«à¸¡à¹ˆ +- +- +- A request for creating a new group "%1" has been received. +-Do you want to create this group? +- +- ได้รับคำขอสำหรับà¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¸à¸¥à¸¸à¹ˆà¸¡à¹ƒà¸«à¸¡à¹ˆ "%1". +-คุณต้องà¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¸à¸¥à¸¸à¹ˆà¸¡à¸™à¸µà¹‰à¸«à¸£à¸·à¸­? +- +- +- +- Your KeePassXC-Browser settings need to be moved into the database settings. +-This is necessary to maintain your current browser connections. +-Would you like to migrate your existing settings now? +- à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าเบราว์เซอร์ KeePassXC ของคุณต้องถูà¸à¸¢à¹‰à¸²à¸¢à¹„ปสู่à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าà¸à¸²à¸™à¸‚้อมูล นี่จำเป็นต่อà¸à¸²à¸£à¸£à¸±à¸à¸©à¸²à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­à¹€à¸šà¸£à¸²à¸§à¹Œà¹€à¸‹à¸­à¸£à¹Œà¸›à¸±à¸ˆà¸ˆà¸¸à¸šà¸±à¸™à¸‚องคุณ คุณต้องà¸à¸²à¸£à¸¢à¹‰à¸²à¸¢à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าที่มีอยู่à¹à¸¥à¹‰à¸§à¸•à¸­à¸™à¸™à¸µà¹‰à¸«à¸£à¸·à¸­à¹„ม่ +- +- +- Don't show this warning again +- ไม่ต้องà¹à¸ªà¸”งคำเตือนนี้อีภ+- +- +- You have received an association request for the following database: +-%1 +- +-Give the connection a unique name or ID, for example: +-chrome-laptop. +- +- +- +- +- BrowserSettingsWidget +- +- Dialog +- หน้าต่าง +- +- +- This is required for accessing your databases with KeePassXC-Browser +- สิ่งนี้จำเป็นเพื่อà¸à¸²à¸£à¹€à¸‚้าถึงà¸à¸²à¸™à¸‚้อมูลผ่านเบราว์เซอร์ KeePassXC +- +- +- Enable browser integration +- เปิดใช้à¸à¸²à¸£à¸œà¸ªà¸²à¸™à¸à¸±à¸šà¹€à¸§à¹‡à¸šà¹€à¸šà¸£à¸²à¸§à¹Œà¹€à¸‹à¸­à¸£à¹Œ +- +- +- General +- ทั่วไป +- +- +- Browsers installed as snaps are currently not supported. +- ยังไม่รองรับเบราว์เซอร์ที่ถูà¸à¸•à¸´à¸”ตั้งจาภSnap +- +- +- Enable integration for these browsers: +- เปิดà¸à¸²à¸£à¹ƒà¸Šà¹‰à¹€à¸šà¸£à¸²à¸§à¹Œà¹€à¸‹à¸­à¸£à¹Œà¹€à¸«à¸¥à¹ˆà¸²à¸™à¸µà¹‰à¸£à¹ˆà¸§à¸¡à¸à¸±à¸š +- +- +- Vivaldi +- Vivaldi +- +- +- &Edge +- &Edge +- +- +- Firefox +- Firefox +- +- +- Tor Browser +- Tor Browser +- +- +- Brave +- Brave +- +- +- Google Chrome +- Google Chrome +- +- +- Chromium +- Chromium +- +- +- Show a notification when credentials are requested +- Credentials mean login data requested via browser extension +- +- +- +- Request to unlock the database if it is locked +- +- +- +- Only entries with the same scheme (http://, https://, ...) are returned. +- ข้อมูลรูปà¹à¸šà¸šà¹€à¸”ียวà¸à¸±à¸™à¹€à¸—่านั้น (http://, https://, ...) จะถูà¸à¸ªà¹ˆà¸‡à¸„ืน +- +- +- Match URL scheme (e.g., https://...) +- +- +- +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- ส่งคืนรายà¸à¸²à¸£à¹€à¸‰à¸žà¸²à¸°à¸—ี่ตรงà¸à¸±à¸š URL มาà¸à¸—ี่สุด à¹à¸—นที่จะส่งคืนรายà¸à¸²à¸£à¸—ั้งหมดของทั้งโดเมน +- +- +- Return only best-matching credentials +- +- +- +- Returns expired credentials. String [expired] is added to the title. +- +- +- +- Allow returning expired credentials +- +- +- +- All databases connected to the extension will return matching credentials. +- +- +- +- Search in all opened databases for matching credentials +- Credentials mean login data requested via browser extension +- +- +- +- Sort matching credentials by title +- Credentials mean login data requested via browser extension +- +- +- +- Sort matching credentials by username +- Credentials mean login data requested via browser extension +- +- +- +- Advanced +- ขั้นสูง +- +- +- Never ask before accessing credentials +- Credentials mean login data requested via browser extension +- +- +- +- Never ask before updating credentials +- Credentials mean login data requested via browser extension +- +- +- +- Do not ask permission for HTTP Basic Auth +- An extra HTTP Basic Auth setting +- +- +- +- Automatically creating or updating string fields is not supported. +- ไม่รองรับà¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¸«à¸£à¸·à¸­à¸­à¸±à¸žà¹€à¸”ท string fields โดยอัตโนมัติ +- +- +- Return advanced string fields which start with "KPH: " +- +- +- +- Don't display the popup suggesting migration of legacy KeePassHTTP settings. +- +- +- +- Do not prompt for KeePassHTTP settings migration. +- +- +- +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- ปรับปรุงข้อมูล KeePassXC หรือเส้นทางของไบนารี keepassxc-proxy โดยอัตโนมัติไปยังà¸à¸²à¸£à¸ªà¹ˆà¸‡à¸‚้อความฉบับดั้งเดิมเมื่อเริ่มต้น +- +- +- Update native messaging manifest files at startup +- +- +- +- Use a custom proxy location if you installed a proxy manually. +- ใช้พร็อà¸à¸‹à¸µà¹à¸šà¸šà¸à¸³à¸«à¸™à¸”เอง ในà¸à¸£à¸“ีที่คุณติดตั้งพร็อà¸à¸‹à¸µà¸”้วยตนเอง +- +- +- Use a custom proxy location: +- Meant is the proxy for KeePassXC-Browser +- +- +- +- Custom proxy location field +- +- +- +- Browser for custom proxy file +- เรียà¸à¸”ูà¹à¸Ÿà¹‰à¸¡à¸žà¸£à¹‡à¸­à¸à¸‹à¸µà¸—ี่à¸à¸³à¸«à¸™à¸”เอง +- +- +- Browse... +- Button for opening file dialog +- เรียà¸à¸”ู... +- +- +- Use a custom browser configuration location: +- +- +- +- Browser type: +- ชนิดเบราว์เซอร์: +- +- +- Toolbar button style +- รูปà¹à¸šà¸šà¸›à¸¸à¹ˆà¸¡à¸šà¸™à¹à¸–บเครื่องมือ +- +- +- Config Location: +- +- +- +- Custom browser location field +- +- +- +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- +- +- +- Browse for custom browser path +- เบราว์เซอร์จาà¸à¸žà¸²à¸˜à¸—ี่ตั้งเบราว์เซอร์ที่ระบุเอง +- +- +- Custom extension ID: +- +- +- +- Custom extension ID +- +- +- +- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 +- เนื่องจาภSnap sandbox คุณต้องเรียà¸à¹ƒà¸Šà¹‰à¸ªà¸„ริปต์เพื่อเปิดใช้งานà¸à¸²à¸£à¸£à¸§à¸¡à¹€à¸šà¸£à¸²à¸§à¹Œà¹€à¸‹à¸­à¸£à¹Œ <br /> คุณสามารถรับสคริปต์นี้จาภ%1 +- +- +- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 +- จำเป็นต้องมีโปรà¹à¸à¸£à¸¡ KeePassXC-Browser เพื่อให้à¸à¸²à¸£à¸œà¸ªà¸²à¸™à¸à¸±à¸šà¹€à¸šà¸£à¸²à¸§à¹Œà¹€à¸‹à¸­à¸£à¹Œà¸—ำงานได้ <br />ดาวน์โหลดมันสำหรับ %1 à¹à¸¥à¸° %2 à¹à¸¥à¸° %3. %4 +- +- +- Please see special instructions for browser extension use below +- โปรดดูคำà¹à¸™à¸°à¸™à¸³à¸žà¸´à¹€à¸¨à¸©à¸ªà¸³à¸«à¸£à¸±à¸šà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸ªà¹ˆà¸§à¸™à¸‚ยายเบราว์เซอร์ด้านล่าง +- +- +- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. +- +- +- +- <b>Warning:</b> The following options can be dangerous! +- <b> คำเตือน </b> ตัวเลือà¸à¸•à¹ˆà¸­à¹„ปนี้อาจจะอันตราย +- +- +- Executable Files +- ไฟล์ปà¸à¸´à¸šà¸±à¸•à¸´à¸à¸²à¸£ +- +- +- All Files +- ไฟล์ทั้งหมด +- +- +- Select custom proxy location +- เลือà¸à¸•à¸³à¹à¸«à¸™à¹ˆà¸‡à¸žà¸£à¹‡à¸­à¸à¸‹à¸µà¸—ี่à¸à¸³à¸«à¸™à¸”เอง +- +- +- Select native messaging host folder location +- +- +- +- +- CloneDialog +- +- Clone Options +- ตัวเลือà¸à¸à¸²à¸£à¹‚คลน +- +- +- Append ' - Clone' to title +- เติม '- Clone' ต่อท้ายชื่อ +- +- +- Replace username and password with references +- à¹à¸—นที่ชื่อผู้ใช้à¹à¸¥à¸°à¸£à¸«à¸±à¸ªà¸œà¹ˆà¸²à¸™à¸”้วยข้อมูลอ้างอิง +- +- +- Copy history +- ทำสำเนาประวัติ +- +- +- +- CsvImportWidget +- +- Import CSV fields +- นำเข้าฟิลด์ CSV +- +- +- filename +- ชื่อไฟล์ +- +- +- size, rows, columns +- ขนาด, à¹à¸–ว, หลัภ+- +- +- Encoding +- à¸à¸²à¸£à¹€à¸‚้ารหัส +- +- +- Codec +- ตัวเข้ารหัส +- +- +- Text is qualified by +- ข้อความถูà¸à¸à¸³à¸à¸±à¸šà¸”้วย +- +- +- Fields are separated by +- ฟิลด์ถูà¸à¹à¸šà¹ˆà¸‡à¸”้วย +- +- +- Comments start with +- บันทึà¸à¸„วามเห็นเริ่มต้นด้วย +- +- +- Consider '\' an escape character +- ให้นับ '\' เป็น escape character +- +- +- Preview +- ดูตัวอย่าง +- +- +- Imported from CSV file +- นำเข้าจาà¸à¹„ฟล์ CSV à¹à¸¥à¹‰à¸§ +- +- +- Original data: +- ข้อมูลต้นฉบับ +- +- +- Error +- ผิดพลาด +- +- +- Error(s) detected in CSV file! +- ตรวจพบข้อผิดพลาดในไฟล์ CSV +- +- +- [%n more message(s) skipped] +- [อีภ%n ข้อความถูà¸à¸‚้าม] +- +- +- CSV import: writer has errors: +-%1 +- นำเข้า CSV ผู้เขียนมีข้อผิดพลาด %1 +- +- +- Text qualification +- +- +- +- Field separation +- +- +- +- Number of header lines to discard +- +- +- +- CSV import preview +- +- +- +- Column Association +- +- +- +- Last Modified +- ถูà¸à¹à¸à¹‰à¹„ขล่าสุด +- +- +- Password +- รหัสผ่าน +- +- +- Created +- ถูà¸à¸ªà¸£à¹‰à¸²à¸‡ +- +- +- Notes +- บันทึภ+- +- +- Title +- หัวข้อ +- +- +- Group +- à¸à¸¥à¸¸à¹ˆà¸¡ +- +- +- URL +- URL +- +- +- Username +- ชื่อผู้ใช้ +- +- +- Header lines skipped +- +- +- +- First line has field names +- +- +- +- Not Present +- +- +- +- Column %1 +- +- +- +- TOTP +- TOTP +- +- +- Icon +- ไอคอน +- +- +- +- CsvParserModel +- +- %n column(s) +- %n คอลัมน์ +- +- +- %1, %2, %3 +- file info: bytes, rows, columns +- %1 %2 %3 +- +- +- %n byte(s) +- %n ไบท์ +- +- +- %n row(s) +- %n à¹à¸–ว +- +- +- +- Database +- +- File %1 does not exist. +- ไม่มีไฟล์ %1 +- +- +- Unable to open file %1. +- ไม่สามารถเปิดไฟล์ %1 +- +- +- Error while reading the database: %1 +- เà¸à¸´à¸”ข้อผิดพลาดระหว่างอ่านà¸à¸²à¸™à¸‚้อมูล %1 +- +- +- File cannot be written as it is opened in read-only mode. +- ไม่สามารถเขียนไฟล์ได้เนื่องจาà¸à¸–ูà¸à¹€à¸›à¸´à¸”อยู่ในโหมดอ่านเท่านั้น +- +- +- Key not transformed. This is a bug, please report it to the developers! +- à¸à¸¸à¸à¹à¸ˆà¹„ม่ถูà¸à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡ นี่คือจุดบà¸à¸žà¸£à¹ˆà¸­à¸‡ à¸à¸£à¸¸à¸“ารายงานไปที่นัà¸à¸žà¸±à¸’นา +- +- +- %1 +-Backup database located at %2 +- %1 +-พบà¸à¸²à¸™à¸‚้อมูลสำรองที่ %2 +- +- +- Could not save, database does not point to a valid file. +- ไม่สามารถบันทึà¸à¹„ด้ à¸à¸²à¸™à¸‚้อมูลไม่ได้ถูà¸à¸Šà¸µà¹‰à¹„ปยังà¹à¸Ÿà¹‰à¸¡à¸—ี่ใช้งานได้ +- +- +- Could not save, database file is read-only. +- ไม่สามารถบันทึà¸à¹„ด้ à¹à¸Ÿà¹‰à¸¡à¸à¸²à¸™à¸‚้อมูลเป็นà¹à¸šà¸šà¸­à¹ˆà¸²à¸™à¸­à¸¢à¹ˆà¸²à¸‡à¹€à¸”ียว +- +- +- Database file has unmerged changes. +- à¹à¸Ÿà¹‰à¸¡à¸à¸²à¸™à¸‚้อมูลมีความเปลี่ยนà¹à¸›à¸¥à¸‡à¸—ี่ยังไม่ถูà¸à¸šà¸±à¸™à¸—ึà¸à¸à¸¥à¸±à¸š +- +- +- Recycle Bin +- ถังขยะ +- +- +- Passwords +- Root group name +- รหัสผ่าน +- +- +- Database save is already in progress. +- +- +- +- Could not save, database has not been initialized! +- +- +- +- +- DatabaseOpenDialog +- +- Unlock Database - KeePassXC +- ปลดล็อà¸à¸à¸²à¸™à¸‚้อมูล - KeePassXC +- +- +- +- DatabaseOpenWidget +- +- Key File: +- ไฟล์à¸à¸¸à¸à¹à¸ˆà¸„ือ +- +- +- Refresh +- รีเฟรช +- +- +- Don't show this warning again +- ไม่ต้องà¹à¸ªà¸”งคำเตือนนี้อีภ+- +- +- All files +- ทุà¸à¹„ฟล์ +- +- +- Key files +- ไฟล์à¸à¸¸à¸à¹à¸ˆ +- +- +- Select key file +- เลือà¸à¹„ฟล์à¸à¸¸à¸à¹à¸ˆ +- +- +- Failed to open key file: %1 +- ไม่สามารถเปิดà¹à¸Ÿà¹‰à¸¡à¸à¸¸à¸à¹à¸ˆà¹„ด้: %1 +- +- +- Unlock KeePassXC Database +- ปลดล็อà¸à¸à¸²à¸™à¸‚้อมูล KeePassXC +- +- +- Enter Password: +- ใส่รหัสผ่าน: +- +- +- Password field +- ช่องรหัสผ่าน +- +- +- Hardware key slot selection +- +- +- +- Browse for key file +- เลือà¸à¹à¸Ÿà¹‰à¸¡à¸à¸¸à¸à¹à¸ˆ +- +- +- Browse... +- เรียà¸à¸”ู... +- +- +- Refresh hardware tokens +- +- +- +- Hardware Key: +- à¸à¸¸à¸à¹à¸ˆà¸®à¸²à¸£à¹Œà¸”à¹à¸§à¸£à¹Œ: +- +- +- Hardware key help +- +- +- +- TouchID for Quick Unlock +- +- +- +- Unlock failed and no password given +- +- +- +- Unlocking the database failed and you did not enter a password. +-Do you want to retry with an "empty" password instead? +- +-To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. +- +- +- +- Retry with empty password +- ลองด้วยรหัสผ่านว่างเปล่า +- +- +- Enter Additional Credentials (if any): +- +- +- +- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +-<p>Click for more information...</p> +- +- +- +- Key file help +- ช่วยเหลือเรื่องà¹à¸Ÿà¹‰à¸¡à¸à¸¸à¸à¹à¸ˆ +- +- +- ? +- ? +- +- +- Cannot use database file as key file +- ไม่สามารถใช้à¹à¸Ÿà¹‰à¸¡à¸à¸²à¸™à¸‚้อมูลเป็นà¹à¸Ÿà¹‰à¸¡à¸à¸¸à¸à¹à¸ˆà¹„ด้ +- +- +- You cannot use your database file as a key file. +-If you do not have a key file, please leave the field empty. +- +- +- +- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> +- +- +- +- Key file to unlock the database +- +- +- +- Please touch the button on your YubiKey! +- à¸à¸£à¸¸à¸“าà¹à¸•à¸°à¸›à¸¸à¹ˆà¸¡à¸šà¸™ YubiKey ของคุณ! +- +- +- Detecting hardware keys… +- +- +- +- No hardware keys detected +- +- +- +- Select hardware key… +- เลือà¸à¸à¸¸à¸à¹à¸ˆà¸à¸²à¸¢à¸ à¸²à¸ž... +- +- +- Old key file format +- +- +- +- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> +- +- +- +- +- DatabaseSettingWidgetMetaData +- +- Passwords +- รหัสผ่าน +- +- +- +- DatabaseSettingsDialog +- +- Advanced Settings +- à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าขั้นสูง +- +- +- General +- ทั่วไป +- +- +- Security +- à¸à¸²à¸£à¸£à¸±à¸à¸©à¸²à¸„วามปลอดภัย +- +- +- Encryption Settings +- à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าà¸à¸²à¸£à¹€à¸‚้ารหัสลับ +- +- +- Browser Integration +- à¸à¸²à¸£à¸—ำงานร่วมà¸à¸±à¸šà¹€à¸šà¸£à¸²à¸§à¹Œà¹€à¸‹à¸­à¸£à¹Œ +- +- +- Database Credentials +- +- +- +- +- DatabaseSettingsWidgetBrowser +- +- KeePassXC-Browser settings +- à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าของเบราว์เซอร์ KeePassXC +- +- +- Stored keys +- à¸à¸¸à¸à¹à¸ˆà¸—ี่ถูà¸à¹€à¸à¹‡à¸šà¹„ว้ +- +- +- Remove +- ลบ +- +- +- Delete the selected key? +- ลบà¸à¸¸à¸à¹à¸ˆà¸—ี่เลือà¸à¸«à¸£à¸·à¸­à¹„ม่ +- +- +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- คุณต้องà¸à¸²à¸£à¸ˆà¸°à¸¥à¸šà¸à¸¸à¸à¹à¸ˆà¸—ี่เลือà¸à¸«à¸£à¸·à¸­à¹„ม่ +-สิ่งนี้อาจทำให้à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­à¸à¸±à¸šà¹‚ปรà¹à¸à¸£à¸¡à¹€à¸ªà¸£à¸´à¸¡à¸šà¸™à¹€à¸šà¸£à¸²à¸§à¹Œà¹€à¸‹à¸­à¸£à¹Œà¸¡à¸µà¸›à¸±à¸à¸«à¸² +- +- +- Key +- à¸à¸¸à¸à¹à¸ˆ +- +- +- Value +- ค่า +- +- +- Enable Browser Integration to access these settings. +- เปิดà¸à¸²à¸£à¹ƒà¸Šà¹‰ Browser Integration เพื่อเข้าถึงà¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่านี้ +- +- +- Disconnect all browsers +- หยุดà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­à¸à¸±à¸šà¸—ุà¸à¹€à¸šà¸£à¸²à¸§à¹Œà¹€à¸‹à¸­à¸£à¹Œ +- +- +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- คุณต้องà¸à¸²à¸£à¸«à¸¢à¸¸à¸”à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­à¸à¸±à¸šà¸—ุà¸à¹€à¸šà¸£à¸²à¸§à¹€à¸‹à¸­à¸£à¹Œà¸«à¸£à¸·à¸­à¹„ม่ +-สิ่งนี้อาจทำให้à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­à¸à¸±à¸šà¹‚ปรà¹à¸à¸£à¸¡à¹€à¸ªà¸£à¸´à¸¡à¸šà¸™à¹€à¸šà¸£à¸²à¸§à¹Œà¹€à¸‹à¸­à¸£à¹Œà¸¡à¸µà¸›à¸±à¸à¸«à¸² +- +- +- KeePassXC: No keys found +- KeePassXC: ไม่พบà¸à¸¸à¸à¹à¸ˆ +- +- +- No shared encryption keys found in KeePassXC settings. +- ไม่พบà¸à¸²à¸£à¹à¸šà¹ˆà¸‡à¸›à¸±à¸™à¸à¸¸à¸à¹à¸ˆà¸—ี่ถูà¸à¹€à¸‚้ารหัสลับà¹à¸¥à¹‰à¸§à¹ƒà¸™à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่า KeePassXC +- +- +- KeePassXC: Removed keys from database +- KeePassXC: à¸à¸¸à¸à¹à¸ˆà¸–ูà¸à¸™à¸³à¸­à¸­à¸à¸ˆà¸²à¸à¸à¸²à¸™à¸‚้อมูล +- +- +- Successfully removed %n encryption key(s) from KeePassXC settings. +- ลบ %n à¸à¸¸à¸à¹à¸ˆà¹€à¸‚้ารหัสลับจาà¸à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่า KeePassXC สำเร็จ +- +- +- Forget all site-specific settings on entries +- ไม่จำà¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าเฉพาะสำหรับทุà¸à¹„ซต์บนรายà¸à¸²à¸£ +- +- +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- คุณจะไม่จำà¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าเฉพาะสำหรับทุà¸à¹„ซต์บนทุà¸à¸£à¸²à¸¢à¸à¸²à¸£à¸«à¸£à¸·à¸­à¹„ม่ +-à¸à¸²à¸£à¸­à¸™à¸¸à¸à¸²à¸•à¹ƒà¸«à¹‰à¹€à¸‚้าถึงรายà¸à¸²à¸£à¸•à¹ˆà¸²à¸‡à¹† จะถูà¸à¸¢à¸à¹€à¸¥à¸´à¸ +- +- +- Removing stored permissions… +- à¸à¸³à¸¥à¸±à¸‡à¸¥à¸šà¸à¸²à¸£à¸­à¸™à¸¸à¸à¸²à¸•à¸—ี่บันทึà¸à¸­à¸­à¸ +- +- +- Abort +- ยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸—ำงาน +- +- +- KeePassXC: Removed permissions +- KeePassXC: à¸à¸²à¸£à¸­à¸™à¸¸à¸à¸²à¸•à¸–ูà¸à¸¥à¸šà¸­à¸­à¸ +- +- +- Successfully removed permissions from %n entry(s). +- ลบà¸à¸²à¸£à¸­à¸™à¸¸à¸à¸²à¸•à¸ˆà¸²à¸à¸£à¸²à¸¢à¸à¸²à¸£ %n +- +- +- KeePassXC: No entry with permissions found! +- KeePassXC: ไม่มีรายà¸à¸²à¸£à¸—ี่ได้รับอนุà¸à¸²à¸• +- +- +- The active database does not contain an entry with permissions. +- à¸à¸²à¸™à¸‚้อมูลที่ปà¸à¸´à¸šà¸±à¸•à¸´à¸à¸²à¸£à¸­à¸¢à¸¹à¹ˆà¹„ม่มีรายà¸à¸²à¸£à¸—ี่ได้รับอนุà¸à¸²à¸• +- +- +- Move KeePassHTTP attributes to custom data +- ย้ายลัà¸à¸©à¸“ะ KeePassHTTP ไปยังข้อมูลตามคำสั่ง +- +- +- Do you really want to move all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- คุณต้องà¸à¸²à¸£à¸—ี่จะย้ายข้อมูลผสานในเบราว์เซอร์à¹à¸šà¸šà¹€à¸”ิมไปยังมาตรà¸à¸²à¸™à¸¥à¹ˆà¸²à¸ªà¸¸à¸”จริงหรือ นี่เป็นสิ่งที่จำเป็นในà¸à¸²à¸£à¸£à¸±à¸à¸©à¸²à¸„วามเข้าà¸à¸±à¸šà¹‚ปรà¹à¸à¸£à¹€à¸ªà¸£à¸´à¸¡à¸‚องเบราว์เซอร์ +- +- +- Stored browser keys +- à¸à¸¸à¸à¹à¸ˆà¹€à¸šà¸£à¸²à¸§à¹Œà¹€à¸‹à¸­à¸£à¹Œà¸—ี่ถูà¸à¹€à¸à¹‡à¸šà¸­à¸¢à¸¹à¹ˆ +- +- +- Remove selected key +- ลบà¸à¸¸à¸à¹à¸ˆà¸—ี่เลือภ+- +- +- Move KeePassHTTP attributes to KeePassXC-Browser custom data +- +- +- +- Refresh database root group ID +- +- +- +- Created +- ถูà¸à¸ªà¸£à¹‰à¸²à¸‡ +- +- +- Refresh database ID +- +- +- +- Do you really want refresh the database ID? +-This is only necessary if your database is a copy of another and the browser extension cannot connect. +- +- +- +- +- DatabaseSettingsWidgetDatabaseKey +- +- Add additional protection... +- เพิ่มเติมส่วนป้องà¸à¸±à¸™à¹€à¸žà¸´à¹ˆà¸¡à¹€à¸•à¸´à¸¡ +- +- +- No password set +- รหัสผ่านยังไม่ได้ติดตั้ง +- +- +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- คำเตือน! คุณยังไม่ได้ตั้งรหัสผ่าน. à¸à¸²à¸£à¹ƒà¸Šà¹‰à¸à¸²à¸™à¸‚้อมูลโดยไม่ใช้รหัสผ่านเป็นเรื่องที่ไม่สนับสนุนเป็นอย่างยิ่ง +- +-คุณà¹à¸™à¹ˆà¹ƒà¸ˆà¸«à¸£à¸·à¸­à¹„ม่ที่จะดำเนินà¸à¸²à¸£à¸•à¹ˆà¸­à¹‚ดยไม่ใช้รหัสผ่าน? +- +- +- Continue without password +- +- +- +- No encryption key added +- ไม่มีà¸à¸¸à¸à¹à¸ˆà¸–อดรหัสลับที่เพิ่มเข้ามา +- +- +- You must add at least one encryption key to secure your database! +- คุณต้องเพิ่มà¸à¸¸à¸à¹à¸ˆà¹€à¸›à¸´à¸”รหัสลับอย่างน้อย 1 อันเพื่อป้องà¸à¸±à¸™à¸à¸²à¸™à¸‚้อมูลของคุณ +- +- +- Unknown error +- ความผิดพลาดที่ไม่อาจระบุได้ +- +- +- Failed to change database credentials +- +- +- +- +- DatabaseSettingsWidgetEncryption +- +- Encryption Algorithm: +- อัลà¸à¸­à¸£à¸´à¸—ึมเข้ารหัสลับ: +- +- +- AES: 256 Bit (default) +- AES: 256 บิต (ค่าเริ่มต้น) +- +- +- Twofish: 256 Bit +- Twofish: 256 บิต +- +- +- Key Derivation Function: +- อนุพันธ์ของฟังà¸à¹Œà¸Šà¸±à¸™à¸«à¸¥à¸±à¸ +- +- +- Transform rounds: +- รอบเปลี่ยนรูป +- +- +- Memory Usage: +- à¸à¸²à¸£à¹ƒà¸Šà¹‰à¸«à¸™à¹ˆà¸§à¸¢à¸„วามจำ +- +- +- Parallelism: +- à¸à¸²à¸£à¸—ำงานà¹à¸šà¸šà¸‚นาน +- +- +- Decryption Time: +- เวลาà¸à¸²à¸£à¹€à¸‚้ารหัสลับ +- +- +- ?? s +- ?? วินาที +- +- +- Change +- เปลี่ยนà¹à¸›à¸¥à¸‡ +- +- +- Higher values offer more protection, but opening the database will take longer. +- ค่าที่สูงà¸à¸§à¹ˆà¸²à¸ˆà¸°à¸¡à¸µà¸à¸²à¸£à¸›à¹‰à¸­à¸‡à¸à¸±à¸™à¸¡à¸²à¸à¸à¸§à¹ˆà¸² à¹à¸•à¹ˆà¸ˆà¸°à¹ƒà¸Šà¹‰à¹€à¸§à¸¥à¸²à¹ƒà¸™à¸à¸²à¸£à¹€à¸›à¸´à¸”à¸à¸²à¸™à¸‚้อมูลนานà¸à¸§à¹ˆà¸² +- +- +- Database format: +- รูปà¹à¸šà¸šà¸à¸²à¸™à¸‚้อมูล +- +- +- This is only important if you need to use your database with other programs. +- ส่วนนี้สำคัà¸à¹€à¸‰à¸žà¸²à¸°à¹€à¸¡à¸·à¹ˆà¸­à¸„ุณต้องà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸à¸²à¸™à¸‚้อมูลà¸à¸±à¸šà¹‚ปรà¹à¸à¸£à¸¡à¸­à¸·à¹ˆà¸™ +- +- +- KDBX 4.0 (recommended) +- KDBX 4.0 (à¹à¸™à¸°à¸™à¸³) +- +- +- KDBX 3.1 +- KDBX 3.1 +- +- +- unchanged +- Database decryption time is unchanged +- ไม่เปลี่ยนà¹à¸›à¸¥à¸‡ +- +- +- Number of rounds too high +- Key transformation rounds +- จำนวนรอบยาวเà¸à¸´à¸™à¹„ป +- +- +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or days (or even longer) to open! +- คุณà¸à¸³à¸¥à¸±à¸‡à¹ƒà¸Šà¹‰à¸ˆà¸³à¸™à¸§à¸™à¸‚องรอบà¸à¸²à¸£à¹à¸›à¸¥à¸‡à¸à¸¸à¸à¹à¸ˆà¸à¸±à¸š Argon2 สูง +-ถ้าคุณใช้จำนวนนี้ à¸à¸²à¸™à¸‚้อมูลของคุณอาจจะใช้เวลาหลายชั่วโมง หรือหลายวัน (หรือนานà¸à¸§à¹ˆà¸²à¸™à¸±à¹‰à¸™) เพื่อเปิด +- +- +- Understood, keep number +- เข้าใจà¹à¸¥à¹‰à¸§ เà¸à¹‡à¸šà¸•à¸±à¸§à¹€à¸¥à¸‚ไว้ +- +- +- Cancel +- ยà¸à¹€à¸¥à¸´à¸ +- +- +- Number of rounds too low +- Key transformation rounds +- จำนวนรอบต่ำเà¸à¸´à¸™à¹„ป +- +- +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database may be too easy to crack! +- คุณà¸à¸³à¸¥à¸±à¸‡à¹ƒà¸Šà¹‰à¸ˆà¸³à¸™à¸§à¸™à¸‚องรอบà¸à¸²à¸£à¹à¸›à¸¥à¸‡à¸à¸¸à¸à¹à¸ˆà¸à¸±à¸š AES-KDF ต่ำ +-ถ้าคุณใช้จำนวนนี้ à¸à¸²à¸™à¸‚้อมูลของคุณอาจจะถูà¸à¸–อดได้อย่างง่าย +- +- +- KDF unchanged +- KDF ไม่เปลี่ยนà¹à¸›à¸¥à¸‡ +- +- +- Failed to transform key with new KDF parameters; KDF unchanged. +- ล้มเหลวà¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¸à¸¸à¸à¹à¸ˆà¸à¸±à¸šà¹€à¸„รื่องวัด KDF ใหม่ KDF จึงไม่เปลี่นà¹à¸›à¸¥à¸‡ +- +- +- MiB +- Abbreviation for Mebibytes (KDF settings) +- MiB +- +- +- thread(s) +- Threads for parallel execution (KDF settings) +- thread(s) +- +- +- Change existing decryption time +- +- +- +- Decryption time in seconds +- เวลาถอดรหัสลับ หน่วยเป็นวินาที +- +- +- Database format +- รูปà¹à¸šà¸šà¸à¸²à¸™à¸‚้อมูล +- +- +- Encryption algorithm +- อัลà¸à¸­à¸£à¸´à¸—ึมà¸à¸²à¸£à¹€à¸‚้ารหัสลับ +- +- +- Key derivation function +- +- +- +- Transform rounds +- +- +- +- Memory usage +- หน่วยความจำที่ใช้ +- +- +- Parallelism +- +- +- +- ?? ms +- ?? มิลลิวินาที +- +- +- ? s +- ? วิ +- +- +- +- DatabaseSettingsWidgetFdoSecrets +- +- Exposed Entries +- +- +- +- Don't expose this database +- +- +- +- Expose entries under this group: +- +- +- +- Enable Secret Service to access these settings. +- +- +- +- +- DatabaseSettingsWidgetGeneral +- +- Database Meta Data +- เมทาดาทาà¸à¸²à¸™à¸‚้อมูล +- +- +- Database name: +- ชื่อà¸à¸²à¸™à¸‚้อมูล +- +- +- Database description: +- รายละเอียดà¸à¸²à¸™à¸‚้อมูล +- +- +- Default username: +- ค่าเริ่มต้นของชื่อผู้ใช้ +- +- +- History Settings +- à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าประวัติ +- +- +- Max. history items: +- จำนวนมาà¸à¸ªà¸¸à¸”ของรายà¸à¸²à¸£à¸›à¸£à¸°à¸§à¸±à¸•à¸´ +- +- +- Max. history size: +- ขนาดมาà¸à¸ªà¸¸à¸”ของรายà¸à¸²à¸£à¸›à¸£à¸°à¸§à¸±à¸•à¸´ +- +- +- MiB +- MiB +- +- +- Use recycle bin +- ใช้ถังขยะรีไซเคิล +- +- +- Additional Database Settings +- à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าà¸à¸²à¸™à¸‚้อมูลเพิ่มเติม +- +- +- Database name field +- ช่องข้อมูลชื่อà¸à¸²à¸™à¸‚้อมูล +- +- +- Database description field +- ช่องข้อมูลคำอธิบายà¸à¸²à¸™à¸‚้อมูล +- +- +- Default username field +- ช่องข้อมูลชื่อผู้ใช้à¸à¸²à¸™à¸‚้อมูล +- +- +- Maximum number of history items per entry +- +- +- +- Maximum size of history per entry +- +- +- +- Delete Recycle Bin +- ลบถังขยะ +- +- +- Do you want to delete the current recycle bin and all its contents? +-This action is not reversible. +- +- +- +- (old) +- (เà¸à¹ˆà¸²) +- +- +- Enable compression (recommended) +- +- +- +- +- DatabaseSettingsWidgetKeeShare +- +- Sharing +- à¹à¸šà¹ˆà¸‡à¸›à¸±à¸™ +- +- +- Breadcrumb +- ชิ้นส่วนย่อย +- +- +- Type +- ชนิด +- +- +- Path +- เส้นทาง +- +- +- Last Signer +- ผู้ลงชื่อเข้าใช้คนล่าสุด +- +- +- Certificates +- ใบรับรอง +- +- +- > +- Breadcrumb separator +- > +- +- +- +- DatabaseSettingsWidgetMetaDataSimple +- +- Database Name: +- ชื่อà¸à¸²à¸™à¸‚้อมูล +- +- +- Description: +- รายละเอียด +- +- +- Database name field +- ช่องข้อมูลชื่อà¸à¸²à¸™à¸‚้อมูล +- +- +- Database description field +- ช่องข้อมูลคำอธิบายà¸à¸²à¸™à¸‚้อมูล +- +- +- +- DatabaseTabWidget +- +- KeePass 2 Database +- à¸à¸²à¸™à¸‚้อมูล KeePass 2 +- +- +- All files +- ทุà¸à¹„ฟล์ +- +- +- Open database +- เปิดà¸à¸²à¸™à¸‚้อมูล +- +- +- CSV file +- ไฟล์ CSV +- +- +- Merge database +- ผสานà¸à¸²à¸™à¸‚้อมูล +- +- +- Open KeePass 1 database +- เปิดà¸à¸²à¸™à¸‚้อมูล KeePass 1 +- +- +- KeePass 1 database +- à¸à¸²à¸™à¸‚้อมูล KeePass 1 +- +- +- Export database to CSV file +- ส่งออà¸à¸à¸²à¸™à¸‚้อมูลเป็นไฟล์ CSV +- +- +- Writing the CSV file failed. +- à¸à¸²à¸£à¹€à¸‚ียนไฟล์ CSV ล้มเหลว +- +- +- Database creation error +- à¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¸à¸²à¸™à¸‚้อมูลเà¸à¸´à¸”ข้อผิดพลาด +- +- +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- à¸à¸²à¸™à¸‚้อมูลที่สร้างขึ้นไม่มีรหัสหรือ KDF ปà¸à¸´à¹€à¸ªà¸˜à¸—ี่จะบันทึภ+-สิ่งนี้มีจุดบà¸à¸žà¸£à¹ˆà¸­à¸‡à¹à¸™à¹ˆà¸™à¸­à¸™à¹‚ปรดรายงานต่อนัà¸à¸žà¸±à¸’นาเวป +- +- +- Select CSV file +- เลือà¸à¹„ฟล์ CSV +- +- +- New Database +- à¸à¸²à¸™à¸‚้อมูลใหม่ +- +- +- %1 [New Database] +- Database tab name modifier +- %1 [à¸à¸²à¸™à¸‚้อมูลใหม่] +- +- +- %1 [Locked] +- Database tab name modifier +- %1 [ถูà¸à¸¥à¹‡à¸­à¸] +- +- +- %1 [Read-only] +- Database tab name modifier +- %1 [อ่านอย่างเดียว] +- +- +- Failed to open %1. It either does not exist or is not accessible. +- +- +- +- Export database to HTML file +- +- +- +- HTML file +- à¹à¸Ÿà¹‰à¸¡ HTML +- +- +- Writing the HTML file failed. +- +- +- +- Export Confirmation +- +- +- +- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? +- +- +- +- Open OPVault +- +- +- +- +- DatabaseWidget +- +- Searching... +- à¸à¸³à¸¥à¸±à¸‡à¸„้นหา +- +- +- Do you really want to delete the entry "%1" for good? +- คุณต้องà¸à¸²à¸£à¸ˆà¸°à¸¥à¸šà¸£à¸²à¸¢à¸à¸²à¸£ "%1" ให้หายไปอย่างถาวรจริงหรือไม่ +- +- +- Do you really want to move entry "%1" to the recycle bin? +- คุณต้องà¸à¸²à¸£à¸ˆà¸°à¸¢à¹‰à¸²à¸¢à¸£à¸²à¸¢à¸à¸²à¸£ "%1" ไปยังถังขยะจริงหรือไม่ +- +- +- Do you really want to move %n entry(s) to the recycle bin? +- คุณต้องà¸à¸²à¸£à¸ˆà¸°à¸¥à¸š %n รายà¸à¸²à¸£à¹„ปยังถังขยะจริงหรือไม่ +- +- +- Execute command? +- เริ่มดำเนินà¸à¸²à¸£à¸•à¸²à¸¡à¸„ำสั่งเลยหรือไม่ +- +- +- Do you really want to execute the following command?<br><br>%1<br> +- คุณต้องà¸à¸²à¸£à¸”ำเนินà¸à¸²à¸£à¸•à¸²à¸¡à¸„ำสั่งหรือไม่<br><br>%1<br> +- +- +- Remember my choice +- จำสิ่งที่ฉันเลือภ+- +- +- Do you really want to delete the group "%1" for good? +- คุณต้องà¸à¸²à¸£à¸ˆà¸°à¸¥à¸šà¸à¸¥à¸¸à¹ˆà¸¡ "%1" ให้หายไปอย่างถาวรจริงหรือไม่ +- +- +- No current database. +- ไม่มีà¸à¸²à¸™à¸‚้อมูลปัจจุบัน +- +- +- No source database, nothing to do. +- ไม่มีà¸à¸²à¸™à¸‚้อมูลต้นทาง ไม่ต้องทำอะไร +- +- +- Search Results (%1) +- ผลà¸à¸²à¸£à¸„้นหา (%1) +- +- +- No Results +- ไม่มีผลลัพธ์ +- +- +- File has changed +- ไฟล์เปลี่ยนไปà¹à¸¥à¹‰à¸§ +- +- +- The database file has changed. Do you want to load the changes? +- à¸à¸²à¸™à¸‚้อมูลไฟล์เปลี่ยนไปà¹à¸¥à¹‰à¸§ คุณต้องà¸à¸²à¸£à¹‚หลดà¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸«à¸£à¸·à¸­à¹„ม่ +- +- +- Merge Request +- คำร้องเพื่อผสาน +- +- +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- ไฟล์à¸à¸²à¸™à¸‚้อมูลเปลี่ยนไปà¹à¸¥à¹‰à¸§à¹à¸¥à¸°à¸„ุณได้ยà¸à¹€à¸¥à¸´à¸à¸šà¸±à¸™à¸—ึà¸à¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¹à¸¥à¹‰à¸§ +-คุณต้องà¸à¸²à¸£à¸œà¸ªà¸²à¸™à¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸‚องคุณหรือไม่ +- +- +- Empty recycle bin? +- ล้างถังขยะหรือไม่ +- +- +- Are you sure you want to permanently delete everything from your recycle bin? +- คุณà¹à¸™à¹ˆà¹ƒà¸ˆà¸§à¹ˆà¸²à¸ˆà¸°à¸¥à¸šà¸—ุà¸à¸­à¸¢à¹ˆà¸²à¸‡à¸­à¸­à¸à¸ˆà¸²à¸à¸–ังขยะของคุณอย่างถาวรหรือไม่ +- +- +- Do you really want to delete %n entry(s) for good? +- คุณต้องà¸à¸²à¸£à¸ˆà¸°à¸¥à¸š %n รายà¸à¸²à¸£à¸­à¸¢à¹ˆà¸²à¸‡à¸–าวรหรือไม่ +- +- +- Delete entry(s)? +- ลบรายà¸à¸²à¸£à¸«à¸£à¸·à¸­à¹„ม่ +- +- +- Move entry(s) to recycle bin? +- ย้ายรายà¸à¸²à¸£à¹„ปยังถังขยะหรือไม่ +- +- +- Lock Database? +- ล็อคà¸à¸²à¸™à¸‚้อมูลหรือไม่ +- +- +- You are editing an entry. Discard changes and lock anyway? +- à¸à¸³à¸¥à¸±à¸‡à¸­à¸¢à¸¹à¹ˆà¹ƒà¸™à¸£à¸°à¸«à¸§à¹ˆà¸²à¸‡à¹à¸à¹‰à¹„ขรายà¸à¸²à¸£ คุณต้องà¸à¸²à¸£à¸ˆà¸°à¸¢à¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¹à¸à¹‰à¹„ขà¹à¸¥à¸°à¸¥à¹‡à¸­à¸„ตอนนี้จริงหรือไม่ +- +- +- "%1" was modified. +-Save changes? +- "%1" ถูà¸à¹à¸à¹‰à¹„ขà¹à¸¥à¹‰à¸§ +-บันทึà¸à¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸«à¸£à¸·à¸­à¹„ม่ +- +- +- Database was modified. +-Save changes? +- à¸à¸²à¸™à¸‚้อมูลถูà¸à¹à¸à¹‰à¹„ขà¹à¸¥à¹‰à¸§ +-บันทึà¸à¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸«à¸£à¸·à¸­à¹„ม่ +- +- +- Save changes? +- บันทึà¸à¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡? +- +- +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- ไม่สามารถเปิดไฟล์à¸à¸²à¸™à¸‚้อมูลใหม่ขณะà¸à¸³à¸¥à¸±à¸‡à¸žà¸¢à¸²à¸¢à¸²à¸¡à¸£à¸µà¹‚หลดอัตโนมัติ +-ข้อผิดพลาด %1 +- +- +- Disable safe saves? +- ปิดà¸à¸²à¸£à¸šà¸±à¸™à¸—ึà¸à¹à¸šà¸šà¸›à¸¥à¸­à¸”ภัยหรือไม่ +- +- +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- KeePassXC ไม่สามารถบันทึà¸à¸à¸²à¸™à¸‚้อมูลà¹à¸¥à¹‰à¸§à¸«à¸¥à¸²à¸¢à¸„รั้ง สิ่งนี้อาจทำให้บริà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¹‚ยงไฟล์ล็อคไฟล์ที่ถูà¸à¸šà¸±à¸™à¸—ึà¸à¹„ว้à¹à¸¥à¹‰à¸§ +-ปิดà¸à¸²à¸£à¸šà¸±à¸™à¸—ึà¸à¹à¸šà¸šà¸›à¸¥à¸­à¸”ภัยà¹à¸¥à¸°à¸¥à¸­à¸‡à¸­à¸µà¸à¸„รั้งหรือไม่ +- +- +- Passwords +- รหัสผ่าน +- +- +- Save database as +- บันทึà¸à¸à¸²à¸™à¸‚้อมูลเป็น +- +- +- KeePass 2 Database +- à¸à¸²à¸™à¸‚้อมูล KeePass 2 +- +- +- Replace references to entry? +- เปลี่ยนà¹à¸«à¸¥à¹ˆà¸‡à¸­à¹‰à¸²à¸‡à¸­à¸´à¸‡à¸‚องรายà¸à¸²à¸£à¸«à¸£à¸·à¸­à¹„ม่ +- +- +- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? +- รายà¸à¸²à¸£ "%1" มี %2 à¹à¸«à¸¥à¹ˆà¸‡à¸­à¹‰à¸²à¸‡à¸­à¸´à¸‡ คุณต้องà¸à¸²à¸£à¸ˆà¸°à¹€à¸‚ียนทับà¹à¸«à¸¥à¹ˆà¸‡à¸­à¹‰à¸²à¸‡à¸­à¸´à¸‡à¸”้วยค่า หรือข้ามรายà¸à¸²à¸£à¸™à¸µà¹‰ หรือต้องà¸à¸²à¸£à¸¥à¸šà¸«à¸£à¸·à¸­à¹„ม่ +- +- +- Delete group +- ลบà¸à¸¥à¸¸à¹ˆà¸¡ +- +- +- Move group to recycle bin? +- ย้ายà¸à¸¥à¸¸à¹ˆà¸¡à¹„ปถังขยะ +- +- +- Do you really want to move the group "%1" to the recycle bin? +- คุณต้องà¸à¸²à¸£à¸¢à¹‰à¸²à¸¢à¸à¸¥à¸¸à¹ˆà¸¡ "%1" ไปถังขยะจริงหรือไม่ +- +- +- Successfully merged the database files. +- รวมไฟล์à¸à¸²à¸™à¸‚้อมูลเรียบร้อยà¹à¸¥à¹‰à¸§ +- +- +- Database was not modified by merge operation. +- à¸à¸²à¸™à¸‚้อมูลไม่ถูà¸à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¹‚ดยà¸à¸²à¸£à¸”ำเนินà¸à¸²à¸£à¸œà¸ªà¸²à¸™ +- +- +- Shared group... +- à¸à¸¥à¸¸à¹ˆà¸¡à¸—ี่ใช้ร่วมà¸à¸±à¸™ +- +- +- Writing the database failed: %1 +- เขียนà¸à¸²à¸™à¸‚้อมูลล้มเหลว %1 +- +- +- This database is opened in read-only mode. Autosave is disabled. +- +- +- +- Save database backup +- +- +- +- Could not find database file: %1 +- +- +- +- +- EditEntryWidget +- +- Entry +- รายà¸à¸²à¸£ +- +- +- Advanced +- ขั้นสูง +- +- +- Icon +- ไอคอน +- +- +- Auto-Type +- Auto-Type +- +- +- Properties +- คุณสมบัติ +- +- +- History +- ประวัติ +- +- +- SSH Agent +- ตัวà¹à¸—น SSH +- +- +- n/a +- n/a +- +- +- (encrypted) +- (เข้ารหัสลับอยู่) +- +- +- Select private key +- เลือà¸à¸à¸¸à¸à¹à¸ˆà¸ªà¹ˆà¸§à¸™à¸•à¸±à¸§ +- +- +- Entry history +- ประวัติรายà¸à¸²à¸£ +- +- +- Add entry +- เพิ่มรายà¸à¸²à¸£ +- +- +- Edit entry +- à¹à¸à¹‰à¹„ขรายà¸à¸²à¸£ +- +- +- New attribute +- คุณสมบัติใหม่ +- +- +- Are you sure you want to remove this attribute? +- คุณà¹à¸™à¹ˆà¹ƒà¸ˆà¸«à¸£à¸·à¸­à¹„ม่ว่าต้องà¸à¸²à¸£à¸¥à¸šà¸„ุณสมบัตินี้ +- +- +- Tomorrow +- พรุ่งนี้ +- +- +- %n week(s) +- %n สัปดาห์ +- +- +- %n month(s) +- %n เดือน +- +- +- Entry updated successfully. +- รายà¸à¸²à¸£à¸–ูà¸à¸­à¸±à¸›à¹€à¸”ตสำเร็จà¹à¸¥à¹‰à¸§ +- +- +- New attribute %1 +- คุณสมบัติใหม่ %1 +- +- +- %n year(s) +- %n ปี +- +- +- Confirm Removal +- ยืนยันà¸à¸²à¸£à¸™à¸³à¸­à¸­à¸ +- +- +- Browser Integration +- à¸à¸²à¸£à¸—ำงานร่วมà¸à¸±à¸šà¹€à¸šà¸£à¸²à¸§à¹Œà¹€à¸‹à¸­à¸£à¹Œ +- +- +- <empty URL> +- +- +- +- Are you sure you want to remove this URL? +- +- +- +- Reveal +- เปิดเผย +- +- +- Hide +- +- +- +- Unsaved Changes +- +- +- +- Would you like to save changes to this entry? +- +- +- +- [PROTECTED] Press Reveal to view or edit +- +- +- +- Invalid Entry +- +- +- +- An external merge operation has invalidated this entry. +-Unfortunately, any changes made have been lost. +- +- +- +- +- EditEntryWidgetAdvanced +- +- Additional attributes +- คุณสมบัติเพิ่มเติม +- +- +- Add +- เพิ่ม +- +- +- Remove +- นำออภ+- +- +- Edit Name +- à¹à¸à¹‰à¹„ขชื่อ +- +- +- Protect +- ป้องà¸à¸±à¸™ +- +- +- Reveal +- เปิดเผย +- +- +- Attachments +- à¹à¸Ÿà¹‰à¸¡à¹à¸™à¸š +- +- +- Foreground Color: +- สีพื้นหน้า +- +- +- Background Color: +- สีพื้นหลัง +- +- +- Attribute selection +- +- +- +- Attribute value +- +- +- +- Add a new attribute +- +- +- +- Remove selected attribute +- +- +- +- Edit attribute name +- +- +- +- Toggle attribute protection +- +- +- +- Show a protected attribute +- +- +- +- Foreground color selection +- +- +- +- Background color selection +- +- +- +- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> +- +- +- +- Exclude from database reports +- +- +- +- +- EditEntryWidgetAutoType +- +- Enable Auto-Type for this entry +- เปิดใช้ Auto -Type สำหรับรายà¸à¸²à¸£à¸™à¸µà¹‰ +- +- +- Window Associations +- หน้าต่างà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¹‚ยง +- +- +- + +- + +- +- +- - +- - +- +- +- Window title: +- หัวเรื่องของหน้าต่าง +- +- +- Use a specific sequence for this association: +- ใช้ลำดับเฉพาะในà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¹‚ยง +- +- +- Custom Auto-Type sequence +- +- +- +- Open Auto-Type help webpage +- +- +- +- Existing window associations +- +- +- +- Add new window association +- +- +- +- Remove selected window association +- +- +- +- You can use an asterisk (*) to match everything +- +- +- +- Set the window association title +- +- +- +- You can use an asterisk to match everything +- +- +- +- Custom Auto-Type sequence for this window +- +- +- +- Inherit default Auto-Type sequence from the group +- +- +- +- Use custom Auto-Type sequence: +- +- +- +- +- EditEntryWidgetBrowser +- +- These settings affect to the entry's behaviour with the browser extension. +- à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าเหล่านี้จะส่งผลต่อพฤติà¸à¸£à¸£à¸¡à¸à¸²à¸£à¸›à¹‰à¸­à¸™à¸‚้อมูลด้วยส่วนเสริมในเบราว์เซอร์ +- +- +- General +- ทั่วไป +- +- +- Skip Auto-Submit for this entry +- +- +- +- Hide this entry from the browser extension +- ซ่อนรายà¸à¸²à¸£à¸‚้อมูลนี้จาà¸à¸ªà¹ˆà¸§à¸™à¹€à¸ªà¸£à¸´à¸¡à¹ƒà¸™à¹€à¸šà¸£à¸²à¸§à¹Œà¹€à¸‹à¸­à¸£à¹Œ +- +- +- Additional URL's +- URL เพิ่มเติม +- +- +- Add +- เพิ่ม +- +- +- Remove +- ลบ +- +- +- Edit +- à¹à¸à¹‰à¹„ข +- +- +- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. +- +- +- +- Use this entry only with HTTP Basic Auth +- +- +- +- +- EditEntryWidgetHistory +- +- Show +- à¹à¸ªà¸”ง +- +- +- Restore +- เรียà¸à¸„ืน +- +- +- Delete +- ลบ +- +- +- Delete all +- ลบทั้งหมด +- +- +- Entry history selection +- +- +- +- Show entry at selected history state +- +- +- +- Restore entry to selected history state +- +- +- +- Delete selected history state +- ลบช่วงประวัติที่เลือภ+- +- +- Delete all history +- ลบประวัติทั้งหมด +- +- +- +- EditEntryWidgetMain +- +- URL: +- URL: +- +- +- Password: +- รหัสผ่าน +- +- +- Title: +- หัวเรื่อง +- +- +- Presets +- ค่าปรับà¹à¸•à¹ˆà¸‡à¸ªà¸³à¹€à¸£à¹‡à¸ˆà¸£à¸¹à¸› +- +- +- Toggle the checkbox to reveal the notes section. +- สลับà¸à¸¥à¹ˆà¸­à¸‡à¸à¸²à¹€à¸„รื่องหมายเพื่อà¹à¸ªà¸”งส่วนบันทึภ+- +- +- Username: +- ชื่อผู้ใช้งาน +- +- +- Url field +- +- +- +- Download favicon for URL +- +- +- +- Password field +- ช่องรหัสผ่าน +- +- +- Toggle notes visible +- สลับให้เห็นบันทึภ+- +- +- Expiration field +- ช่องà¸à¸²à¸£à¸«à¸¡à¸”อายุ +- +- +- Expiration Presets +- +- +- +- Expiration presets +- +- +- +- Notes field +- ชื่อบันทึภ+- +- +- Title field +- ช่องหัวเรื่อง +- +- +- Username field +- ช่องชื่อผู้ใช้ +- +- +- Toggle expiration +- สลับà¸à¸²à¸£à¸«à¸¡à¸”อายุ +- +- +- Notes: +- บันทึภ+- +- +- https://example.com +- +- +- +- Expires: +- หมดอายุ: +- +- +- Edit Entry +- +- +- +- +- EditEntryWidgetSSHAgent +- +- Form +- จาภ+- +- +- Remove key from agent after +- ลบà¸à¸¸à¸à¹à¸ˆà¸­à¸­à¸à¸ˆà¸²à¸à¸•à¸±à¸§à¹à¸—น +- +- +- seconds +- วินาที +- +- +- Fingerprint +- ลายนิ้วมือ +- +- +- Remove key from agent when database is closed/locked +- ลบà¸à¸¸à¸à¹à¸ˆà¸­à¸­à¸à¸ˆà¸²à¸à¸•à¸±à¸§à¹à¸—น เมือà¸à¸²à¸™à¸‚้อมูลถูà¸à¸›à¸´à¸”หรือล๊อค +- +- +- Public key +- à¸à¸¸à¸à¹à¸ˆà¸ªà¸²à¸˜à¸²à¸£à¸“ะ +- +- +- Add key to agent when database is opened/unlocked +- เพิ่มà¸à¸¸à¸à¹à¸ˆà¹„ปยังตัวยà¹à¸—น เมื่อà¸à¸²à¸™à¸‚้อมูลถูà¸à¹€à¸›à¸´à¸”ออà¸à¸«à¸£à¸·à¸­à¸–ูà¸à¸›à¸¥à¸”ล๊อด +- +- +- Comment +- ข้อคิดเห็น +- +- +- Decrypt +- ถอดรหัสลับ +- +- +- n/a +- ไม่มีข้อมูล +- +- +- Copy to clipboard +- คัดลอà¸à¹„ปยังคลิปบอร์ด +- +- +- Private key +- à¸à¸¸à¸à¹à¸ˆà¸ªà¹ˆà¸§à¸™à¸•à¸±à¸§ +- +- +- External file +- à¹à¸Ÿà¹‰à¸¡à¸ à¸²à¸¢à¸™à¸­à¸ +- +- +- Browse... +- Button for opening file dialog +- เรียà¸à¸”ู... +- +- +- Attachment +- à¹à¸Ÿà¹‰à¸¡à¹à¸™à¸š +- +- +- Add to agent +- เพิ่มไปยังตัวà¹à¸—น +- +- +- Remove from agent +- ลบออà¸à¸ˆà¸²à¸à¸•à¸±à¸§à¹à¸—น +- +- +- Require user confirmation when this key is used +- จำเป็นต้องยืนยันผู้ใช้เมื่อมีà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸à¸¸à¸à¹à¸ˆ +- +- +- Remove key from agent after specified seconds +- +- +- +- Browser for key file +- เรียà¸à¸”ูà¹à¸Ÿà¹‰à¸¡à¸à¸¸à¸à¹à¸ˆ +- +- +- External key file +- +- +- +- Select attachment file +- +- +- +- +- EditGroupWidget +- +- Group +- à¸à¸¥à¸¸à¹ˆà¸¡ +- +- +- Icon +- ไอคอน +- +- +- Properties +- คุณสมบัติ +- +- +- Add group +- เพิ่มà¸à¸¥à¸¸à¹ˆà¸¡ +- +- +- Edit group +- à¹à¸à¹‰à¹„ขà¸à¸¥à¸¸à¹ˆà¸¡ +- +- +- Enable +- เปิดใช้ +- +- +- Disable +- ปิดใช้ +- +- +- Inherit from parent group (%1) +- รับช่วงจาà¸à¸à¸¥à¸¸à¹ˆà¸¡à¸«à¸¥à¸±à¸ (%1) +- +- +- Entry has unsaved changes +- รายà¸à¸²à¸£à¸¡à¸µà¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸—ี่ไม่ถูà¸à¸šà¸±à¸™à¸—ึภ+- +- +- +- EditGroupWidgetKeeShare +- +- Type: +- ชนิด +- +- +- Path: +- เส้นทาง +- +- +- Password: +- รหัสผ่าน +- +- +- Inactive +- ไม่มีà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™ +- +- +- KeeShare unsigned container +- ที่จัดเà¸à¹‡à¸šà¸—ี่ไม่ได้เซ็นไว้ของ KeeShare +- +- +- KeeShare signed container +- ที่จัดเà¸à¹‡à¸šà¸—ี่เซ็นไว้ของ KeeShare +- +- +- Select import source +- เลือà¸à¸™à¸³à¸à¸²à¸™à¸‚้อมูลที่นำเข้า +- +- +- Select export target +- เลือà¸à¹€à¸›à¹‰à¸²à¸«à¸¡à¸²à¸¢à¸—ี่นำออภ+- +- +- Select import/export file +- เลือà¸à¹à¸Ÿà¹‰à¸¡à¸™à¸³à¹€à¸‚้า/นำออภ+- +- +- Clear +- ล้าง +- +- +- Import +- นำเข้า +- +- +- Export +- นำออภ+- +- +- Synchronize +- +- +- +- Your KeePassXC version does not support sharing this container type. +-Supported extensions are: %1. +- +- +- +- %1 is already being exported by this database. +- +- +- +- %1 is already being imported by this database. +- +- +- +- %1 is being imported and exported by different groups in this database. +- +- +- +- KeeShare is currently disabled. You can enable import/export in the application settings. +- KeeShare is a proper noun +- +- +- +- Database export is currently disabled by application settings. +- +- +- +- Database import is currently disabled by application settings. +- +- +- +- Sharing mode field +- +- +- +- Path to share file field +- +- +- +- Password field +- ช่องรหัสผ่าน +- +- +- Clear fields +- +- +- +- Browse for share file +- เรียà¸à¸”ูà¹à¸Ÿà¹‰à¸¡à¸—ี่à¹à¸šà¹ˆà¸‡à¸›à¸±à¸™ +- +- +- Browse... +- เรียà¸à¸”ู... +- +- +- +- EditGroupWidgetMain +- +- Name field +- ช่องชื่อ +- +- +- Notes field +- ชื่อบันทึภ+- +- +- Toggle expiration +- สลับà¸à¸²à¸£à¸«à¸¡à¸”อายุ +- +- +- Auto-Type toggle for this and sub groups +- +- +- +- Expiration field +- ช่องà¸à¸²à¸£à¸«à¸¡à¸”อายุ +- +- +- Search toggle for this and sub groups +- +- +- +- Default auto-type sequence field +- +- +- +- Expires: +- หมดอายุ: +- +- +- Use default Auto-Type sequence of parent group +- +- +- +- Auto-Type: +- Auto-Type: +- +- +- Search: +- +- +- +- Notes: +- บันทึภ+- +- +- Name: +- ชื่อ: +- +- +- Set default Auto-Type sequence +- +- +- +- Edit Group +- +- +- +- +- EditWidgetIcons +- +- Add custom icon +- เพิ่มไอคอนที่à¸à¸³à¸«à¸™à¸”เอง +- +- +- Delete custom icon +- ลบไอคอนที่à¸à¸³à¸«à¸™à¸”เอง +- +- +- Download favicon +- ดาวน์โหลด favicon +- +- +- Unable to fetch favicon. +- ไม่สามารถดึงข้อมูล favicon ได้ +- +- +- Images +- ภาพ +- +- +- All files +- ทุà¸à¹à¸Ÿà¹‰à¸¡ +- +- +- Confirm Delete +- ยืนยันà¸à¸²à¸£à¸¥à¸š +- +- +- Select Image(s) +- เลือà¸à¸£à¸¹à¸›à¸ à¸²à¸ž +- +- +- Successfully loaded %1 of %n icon(s) +- à¸à¸²à¸£à¹‚หลดไอคอน %1 ของ %1 ประสบความสำเร็จ +- +- +- No icons were loaded +- ไอคอนไม่ถูà¸à¹‚หลด +- +- +- %n icon(s) already exist in the database +- %n ไอคอนมีอยู่à¹à¸¥à¹‰à¸§à¹ƒà¸™à¸à¸²à¸™à¸‚้อมูล +- +- +- The following icon(s) failed: +- ไอคอนต่อไปนี้ล้มเหลว +- +- +- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? +- ไอคอนนี้ถูà¸à¹ƒà¸Šà¹‰à¹‚ดย %n เอ็นทรี à¹à¸¥à¸°à¸ˆà¸°à¸–ูà¸à¹à¸—นที่ด้วยไอคอนตั้งต้น คุณà¹à¸™à¹ˆà¹ƒà¸ˆà¸«à¸£à¸·à¸­à¹„ม่ว่าคุณต้องà¸à¸²à¸£à¸¥à¸šà¹„อคอน +- +- +- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security +- +- +- +- Download favicon for URL +- +- +- +- Apply selected icon to subgroups and entries +- +- +- +- Also apply to child groups +- +- +- +- Also apply to child entries +- +- +- +- Also apply to all children +- +- +- +- Existing icon selected. +- +- +- +- Use default icon +- +- +- +- Use custom icon +- +- +- +- Apply icon to... +- +- +- +- Apply to this group only +- +- +- +- +- EditWidgetProperties +- +- Created: +- สร้าง +- +- +- Modified: +- à¹à¸à¹‰à¹„ข +- +- +- Accessed: +- เข้าถึง +- +- +- Uuid: +- Uuid +- +- +- Plugin Data +- ข้อมูลโปรà¹à¸à¸£à¸¡à¹€à¸ªà¸£à¸´à¸¡ +- +- +- Remove +- นำออภ+- +- +- Delete plugin data? +- ลบข้อมูลโปรà¹à¸à¸£à¸¡à¹€à¸ªà¸£à¸´à¸¡à¸«à¸£à¸·à¸­à¹„ม่ +- +- +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- คุณต้องà¸à¸²à¸£à¸¥à¸šà¸‚้อมูลโปรà¹à¸à¸£à¸¡à¹€à¸ªà¸£à¸´à¸¡à¸—ี่เลือà¸à¹„ว้หรือไม่ +-à¸à¸²à¸£à¸à¸£à¸°à¸—ำนี้อาจจะà¸à¸£à¸°à¸—บโปรà¹à¸à¸£à¸¡à¹€à¸ªà¸£à¸´à¸¡à¹ƒà¸«à¹‰à¸—ำงานผิดพลาด +- +- +- Key +- à¸à¸¸à¸à¹à¸ˆ +- +- +- Value +- ค่า +- +- +- Datetime created +- +- +- +- Datetime modified +- +- +- +- Datetime accessed +- +- +- +- Unique ID +- รหัสระบุตัวที่ไม่ซ้ำ +- +- +- Plugin data +- +- +- +- Remove selected plugin data +- +- +- +- +- Entry +- +- %1 - Clone +- %1 -ลอà¸à¹à¸šà¸š +- +- +- +- EntryAttachmentsModel +- +- Name +- ชื่อ +- +- +- Size +- ขนาด +- +- +- +- EntryAttachmentsWidget +- +- Form +- รูปà¹à¸šà¸š +- +- +- Add +- เพิ่ม +- +- +- Remove +- นำออภ+- +- +- Open +- เปิด +- +- +- Save +- บันทึภ+- +- +- Select files +- เลือà¸à¹à¸Ÿà¹‰à¸¡ +- +- +- Are you sure you want to remove %n attachment(s)? +- คุณà¹à¸™à¹ˆà¹ƒà¸ˆà¸«à¸£à¸·à¸­à¹„ม่ว่าคุณต้องà¸à¸²à¸£à¸¥à¸šà¹„ฟล์à¹à¸™à¸š +- +- +- Save attachments +- บันทึà¸à¹à¸Ÿà¹‰à¸¡à¹à¸™à¸š +- +- +- Unable to create directory: +-%1 +- ไม่สามารถสร้างไดเรคทอรี +-%1 +- +- +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- คุณà¹à¸™à¹ˆà¹ƒà¸ˆà¸«à¸£à¸·à¸­à¸§à¹ˆà¸²à¸ˆà¸°à¹€à¸‚ียนทับà¹à¸Ÿà¹‰à¸¡à¸—ี่มีอยู่ "1%" ด้วยà¹à¸Ÿà¹‰à¸¡à¹à¸™à¸š +- +- +- Confirm overwrite +- ยืนยันà¸à¸²à¸£à¹€à¸‚ียนทับ +- +- +- Unable to save attachments: +-%1 +- ไม่สามารถบันทึà¸à¹à¸Ÿà¹‰à¸¡à¹à¸™à¸š: +-%1 +- +- +- Unable to open attachment: +-%1 +- ไม่สามารถเปิดà¹à¸Ÿà¹‰à¸¡à¹à¸™à¸š: +-%1 +- +- +- Unable to open attachments: +-%1 +- ไม่สามารถเปิดà¹à¸Ÿà¹‰à¸¡à¹à¸™à¸š: +-%1 +- +- +- Confirm remove +- ยืนยันà¸à¸²à¸£à¸¥à¸š +- +- +- Unable to open file(s): +-%1 +- ไม่สามารถเปิดไฟล์ +- +- +- Attachments +- à¹à¸Ÿà¹‰à¸¡à¹à¸™à¸š +- +- +- Add new attachment +- +- +- +- Remove selected attachment +- +- +- +- Open selected attachment +- +- +- +- Save selected attachment to disk +- +- +- +- %1 is a big file (%2 MB). +-Your database may get very large and reduce performance. +- +-Are you sure to add this file? +- +- +- +- Confirm Attachment +- +- +- +- +- EntryAttributesModel +- +- Name +- ชื่อ +- +- +- +- EntryHistoryModel +- +- Last modified +- ถูà¸à¹à¸à¹‰à¹„ขครั้งสุดท้าย +- +- +- Title +- หัวเรื่อง +- +- +- Username +- ชื่อผู้ใช้ +- +- +- URL +- URL +- +- +- +- EntryModel +- +- Ref: +- Reference abbreviation +- อ้างอิง +- +- +- Group +- à¸à¸¥à¸¸à¹ˆà¸¡ +- +- +- Title +- หัวเรื่อง +- +- +- Username +- ชื่อผู้ใช้ +- +- +- URL +- URL +- +- +- Never +- ไม่เลย +- +- +- Password +- รหัสผ่าน +- +- +- Notes +- บันทึภ+- +- +- Expires +- หมดอายุ +- +- +- Created +- ถูà¸à¸ªà¸£à¹‰à¸²à¸‡ +- +- +- Modified +- à¹à¸à¹‰à¹„ข +- +- +- Accessed +- เข้าถึง +- +- +- Attachments +- à¹à¸Ÿà¹‰à¸¡à¹à¸™à¸š +- +- +- Size +- ขนาด +- +- +- Group name +- +- +- +- Entry title +- +- +- +- Entry notes +- +- +- +- Entry expires at +- +- +- +- Creation date +- +- +- +- Last modification date +- +- +- +- Last access date +- +- +- +- Attached files +- +- +- +- Entry size +- +- +- +- Has attachments +- +- +- +- Has TOTP one-time password +- +- +- +- +- EntryPreviewWidget +- +- Close +- ปิด +- +- +- General +- ทั่วไป +- +- +- Username +- ชื่อผู้ใช้ +- +- +- Password +- รหัสผ่าน +- +- +- Expiration +- หมดอายุ +- +- +- URL +- URL +- +- +- Attributes +- คุณสมบัติ +- +- +- Attachments +- à¹à¸Ÿà¹‰à¸¡à¹à¸™à¸š +- +- +- Notes +- บันทึภ+- +- +- Autotype +- Autotype +- +- +- Window +- หน้าต่าง +- +- +- Sequence +- ลำดับ +- +- +- Searching +- à¸à¸³à¸¥à¸±à¸‡à¸„้นหา +- +- +- Search +- ค้นหา +- +- +- Clear +- ล้าง +- +- +- Never +- ไม่เลย +- +- +- [PROTECTED] +- [ถูà¸à¸›à¹‰à¸­à¸‡à¸à¸±à¸™à¸­à¸¢à¸¹à¹ˆ] +- +- +- Enabled +- เปิดใช้ +- +- +- Disabled +- ปิดใช้ +- +- +- Share +- à¹à¸šà¹ˆà¸‡à¸›à¸±à¸™ +- +- +- Display current TOTP value +- +- +- +- Advanced +- ขั้นสูง +- +- +- Default Sequence +- +- +- +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- attributes line +- +- +- +- +- EntryURLModel +- +- Invalid URL +- +- +- +- +- EntryView +- +- Fit to window +- พอดีà¸à¸±à¸š window +- +- +- Fit to contents +- พอดีà¸à¸±à¸šà¹€à¸™à¸·à¹‰à¸­à¸«à¸² +- +- +- Reset to defaults +- เริ่มใหม่เป็นค่าเริ่มต้น +- +- +- Has attachments +- Entry attachment icon toggle +- +- +- +- Has TOTP +- Entry TOTP icon toggle +- +- +- +- +- FdoSecrets::Item +- +- Entry "%1" from database "%2" was used by %3 +- +- +- +- +- FdoSecrets::Service +- +- Failed to register DBus service at %1.<br/> +- +- +- +- %n Entry(s) was used by %1 +- %1 is the name of an application +- +- +- +- +- FdoSecrets::SettingsDatabaseModel +- +- File Name +- ชื่อà¹à¸Ÿà¹‰à¸¡ +- +- +- Group +- à¸à¸¥à¸¸à¹ˆà¸¡ +- +- +- Manage +- จัดà¸à¸²à¸£ +- +- +- Unlock to show +- +- +- +- None +- ไม่มี +- +- +- +- FdoSecrets::SettingsSessionModel +- +- Application +- à¹à¸­à¸›à¸žà¸¥à¸´à¹€à¸„ชัน +- +- +- Manage +- จัดà¸à¸²à¸£ +- +- +- +- FdoSecretsPlugin +- +- <b>Fdo Secret Service:</b> %1 +- +- +- +- Unknown +- Unknown PID +- ไม่รู้จัภ+- +- +- Unknown +- Unknown executable path +- ไม่รู้จัภ+- +- +- <i>PID: %1, Executable: %2</i> +- <i>PID: 1234, Executable: /path/to/exe</i> +- +- +- +- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. +- +- +- +- +- Group +- +- [empty] +- group has no children +- (ที่ว่าง) +- +- +- +- HibpDownloader +- +- Online password validation failed +- +- +- +- +- IconDownloaderDialog +- +- Download Favicons +- +- +- +- Cancel +- ยà¸à¹€à¸¥à¸´à¸ +- +- +- Having trouble downloading icons? +-You can enable the DuckDuckGo website icon service in the security section of the application settings. +- +- +- +- Close +- ปิด +- +- +- URL +- URL +- +- +- Status +- สถานะ +- +- +- Please wait, processing entry list... +- +- +- +- Downloading... +- à¸à¸³à¸¥à¸±à¸‡à¸”าวน์โหลด... +- +- +- Ok +- โอเค +- +- +- Already Exists +- มีอยู่à¹à¸¥à¹‰à¸§ +- +- +- Download Failed +- à¸à¸²à¸£à¸”าวน์โหลดล้มเหลว +- +- +- Downloading favicons (%1/%2)... +- à¸à¸³à¸¥à¸±à¸‡à¸”าวน์โหลด favicon (%1/%2)... +- +- +- +- KMessageWidget +- +- &Close +- ปิด (&C) +- +- +- Close message +- ปิดข้อความ +- +- +- +- Kdbx3Reader +- +- missing database headers +- à¸à¸²à¸™à¸‚้อมูลส่วนหัวหายไป +- +- +- Header doesn't match hash +- ส่วนหัวไม่ตรงà¸à¸±à¸šà¸£à¸²à¸¢à¸¥à¸°à¹€à¸­à¸µà¸¢à¸” +- +- +- Invalid header id size +- ขนาดบัà¸à¸Šà¸µà¸ªà¹ˆà¸§à¸™à¸«à¸±à¸§à¹„ม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid header field length +- ความยาวของฟิลด์ส่วนหัวไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid header data length +- ความยาวของข้อมูลส่วนหัวไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- +- +- +- Unable to calculate database key +- +- +- +- Unable to issue challenge-response: %1 +- +- +- +- +- Kdbx3Writer +- +- Unable to issue challenge-response: %1 +- +- +- +- Unable to calculate database key +- +- +- +- +- Kdbx4Reader +- +- missing database headers +- à¸à¸²à¸™à¸‚้อมูลส่วนหัวหายไป +- +- +- Invalid header checksum size +- ขนาดผลรวมหัวข้อไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Header SHA256 mismatch +- หัวข้อ SHA256 ไม่ตรงà¸à¸±à¸™ +- +- +- Unknown cipher +- à¸à¸²à¸£à¹€à¸‚้ารหัสที่ไม่รู้จัภ+- +- +- Invalid header id size +- ขนาด ID ส่วนหัวไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid header field length +- ความยาวฟิลด์ส่วนหัวไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid header data length +- ความยาวข้อมูลส่วนหัวไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Failed to open buffer for KDF parameters in header +- ไม่สามารถเปิดบัฟเฟอร์สำหรับพารามิเตอร์ KDF ในส่วนต้น +- +- +- Unsupported key derivation function (KDF) or invalid parameters +- ไม่รองรับฟังà¸à¹Œà¸Šà¸±à¹ˆà¸™à¸à¸²à¸£à¸„้นพบà¸à¸¸à¸à¹à¸ˆ (KDF) หรือพารามิเตอร์ที่ไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Legacy header fields found in KDBX4 file. +- หัวข้อฟิลด์เลà¸à¸²à¸‹à¸µà¹ƒà¸™à¹„ฟล์ KDBX4 +- +- +- Invalid inner header id size +- ขนาดบัà¸à¸Šà¸µà¸ªà¹ˆà¸§à¸™à¸«à¸±à¸§à¸”้านในไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid inner header field length +- ความยาวของสนามวงในไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid inner header binary size +- ขนาดไบนารีส่วนหัวภายในไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Unsupported KeePass variant map version. +- Translation: variant map = data structure for storing meta data +- ไม่รองรับ KeePass รุ่น variant map +- +- +- Invalid variant map entry name length +- Translation: variant map = data structure for storing meta data +- ความยาวชื่อรายà¸à¸²à¸£ variant map ไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid variant map entry name data +- Translation: variant map = data structure for storing meta data +- ข้อมูลชื่อรายà¸à¸²à¸£ variant map ไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid variant map entry value length +- Translation: variant map = data structure for storing meta data +- ความยาวรายà¸à¸²à¸£ variant map ไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid variant map entry value data +- Translation comment: variant map = data structure for storing meta data +- ข้อมูลรายà¸à¸²à¸£à¹€à¸£à¸´à¹ˆà¸¡à¸•à¹‰à¸™ variant map ไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid variant map Bool entry value length +- Translation: variant map = data structure for storing meta data +- ความยาวค่ารายà¸à¸²à¸£ Bool variant map ไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid variant map Int32 entry value length +- Translation: variant map = data structure for storing meta data +- ความยาวค่ารายà¸à¸²à¸£ Int32 variant map ไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid variant map UInt32 entry value length +- Translation: variant map = data structure for storing meta data +- ความยาวค่ารายà¸à¸²à¸£ UInt32 variant map ไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid variant map Int64 entry value length +- Translation: variant map = data structure for storing meta data +- ความยาวค่ารายà¸à¸²à¸£ Int64 variant map ไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid variant map UInt64 entry value length +- Translation: variant map = data structure for storing meta data +- ความยาวค่ารายà¸à¸²à¸£ UInt64 variant map ไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid variant map entry type +- Translation: variant map = data structure for storing meta data +- ประเภทรายà¸à¸²à¸£ variant map ไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid variant map field type size +- Translation: variant map = data structure for storing meta data +- ขนาดชนิดของเขตข้อมูล variant map ไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- +- +- +- (HMAC mismatch) +- +- +- +- Unable to calculate database key: %1 +- +- +- +- +- Kdbx4Writer +- +- Invalid symmetric cipher algorithm. +- ขั้นตอนà¸à¸²à¸£à¹€à¸‚้ารหัสà¹à¸šà¸šà¸ªà¸¡à¸¡à¸²à¸•à¸£à¹„ม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid symmetric cipher IV size. +- IV = Initialization Vector for symmetric cipher +- ขนาด IV à¸à¸²à¸£à¹€à¸‚้ารหัสà¹à¸šà¸šà¸ªà¸¡à¸¡à¸²à¸•à¸£à¹„ม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Failed to serialize KDF parameters variant map +- Translation comment: variant map = data structure for storing meta data +- ล้มเหลวในà¸à¸²à¸£à¸¥à¸³à¸”ับà¹à¸œà¸™à¸—ี่à¹à¸›à¸£à¸œà¸±à¸™à¸žà¸²à¸£à¸²à¸¡à¸´à¹€à¸•à¸­à¸£à¹Œ KDF +- +- +- Unable to calculate database key: %1 +- +- +- +- +- KdbxReader +- +- Unsupported cipher +- ไม่รองรับà¸à¸²à¸£à¹€à¸‚้ารหัส +- +- +- Invalid compression flags length +- ความยาวà¹à¸Ÿà¸¥à¹‡à¸à¸šà¸µà¸šà¸­à¸±à¸”ไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Unsupported compression algorithm +- อัลà¸à¸­à¸£à¸´à¸—ีมà¸à¸²à¸£à¸šà¸µà¸šà¸­à¸±à¸”ไม่รองรับ +- +- +- Invalid master seed size +- à¸à¸²à¸£à¹à¸›à¸¥à¸‡à¸‚นาดมาสเตอร์ไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid transform seed size +- à¸à¸²à¸£à¹à¸›à¸¥à¸‡à¸‚นาดค่าเริ่มต้นไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid transform rounds size +- ขนาดรอบà¸à¸²à¸£à¹à¸›à¸¥à¸‡à¹„ม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid start bytes size +- ขนาดของไบต์เริ่มต้นไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid random stream id size +- ขนาด ID สตรีมà¹à¸šà¸šà¸ªà¸¸à¹ˆà¸¡à¹„ม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid inner random stream cipher +- à¸à¸²à¸£à¹€à¸‚้ารหัสสตรีมà¹à¸šà¸šà¸ªà¸¸à¹ˆà¸¡à¸”้านในไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Not a KeePass database. +- ไม่ใช่à¸à¸²à¸™à¸‚้อมูล KeePass +- +- +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- ไฟล์ที่เลือà¸à¹€à¸›à¹‡à¸™à¸à¸²à¸™à¸‚้อมูล KeePass 1 เà¸à¹ˆà¸² (.kdb) +- +-คุณสามารถนำเข้าได้โดยคลิà¸à¸—ี่à¸à¸²à¸™à¸‚้อมูล นำเข้าà¸à¸²à¸™à¸‚้อมูล KeePass 1 +-นี่คือà¸à¸²à¸£à¹‚อนย้ายทางเดียว คุณจะไม่สามารถเปิดà¸à¸²à¸™à¸‚้อมูลที่นำเข้าด้วยรุ่น KeePassX 0.4 รุ่นเà¸à¹ˆà¸²à¹„ด้ +- +- +- Unsupported KeePass 2 database version. +- ไม่สนับสนุนรุ่นà¸à¸²à¸™à¸‚้อมูล KeePass 2 +- +- +- Invalid cipher uuid length: %1 (length=%2) +- ความยาวรหัสตัวเลขไม่ถูà¸à¸•à¹‰à¸­à¸‡:% 1 (ความยาว =% 2) +- +- +- Unable to parse UUID: %1 +- ไม่สามารถà¹à¸¢à¸à¸§à¸´à¹€à¸„ราะห์ UUID :% 1 +- +- +- Failed to read database file. +- ไม่สามารถอ่านไฟล์à¸à¸²à¸™à¸‚้อมูล +- +- +- +- KdbxXmlReader +- +- XML parsing failure: %1 +- à¸à¸²à¸£à¹à¸¢à¸à¸§à¸´à¹€à¸„ราะห์ XML ล้มเหลว : % 1 +- +- +- No root group +- ไม่มีà¸à¸¥à¸¸à¹ˆà¸¡à¸£à¸¹à¸• +- +- +- Missing icon uuid or data +- ไอคอน uuid หรือ ข้อมูล หายไป +- +- +- Missing custom data key or value +- ไม่มีข้อมูลà¸à¸¸à¸à¹à¸ˆà¸«à¸£à¸·à¸­à¸„่าที่à¸à¸³à¸«à¸™à¸”เอง +- +- +- Multiple group elements +- à¸à¸¥à¸¸à¹ˆà¸¡à¸­à¸‡à¸„์ประà¸à¸­à¸šà¸«à¸¥à¸²à¸¢à¸à¸²à¸™à¸‚้อมูล +- +- +- Null group uuid +- à¸à¸¥à¸¸à¹ˆà¸¡ uuid ที่ว่าง +- +- +- Invalid group icon number +- à¸à¸¥à¸¸à¹ˆà¸¡à¸•à¸±à¸§à¹€à¸¥à¸‚ไอคอนไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid EnableAutoType value +- ค่า EnableAutoType ไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid EnableSearching value +- ค่า EnableSearching ไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- No group uuid found +- ไม่พบà¸à¸¥à¸¸à¹ˆà¸¡ uuid +- +- +- Null DeleteObject uuid +- DeleteObject uuid ที่ว่าง +- +- +- Missing DeletedObject uuid or time +- ไม่มี DeleteObject uuid หรือ เวลา +- +- +- Null entry uuid +- รายà¸à¸²à¸£ uuid ที่ว่าง +- +- +- Invalid entry icon number +- ตัวเลขไอคอนไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- History element in history entry +- ประวัติของส่วนประà¸à¸­à¸šà¹ƒà¸™à¸›à¸£à¸°à¸§à¸±à¸•à¸´à¸£à¸²à¸¢à¸à¸²à¸£ +- +- +- No entry uuid found +- ไม่พบรายà¸à¸²à¸£ uuid +- +- +- History element with different uuid +- ประวัติของส่วนประà¸à¸­à¸šà¸—ี่ uuid ต่างà¸à¸±à¸™ +- +- +- Duplicate custom attribute found +- ค้นพบคัดลอà¸à¸„ุณสมบัติที่à¸à¸³à¸«à¸™à¸”เอง +- +- +- Entry string key or value missing +- รายà¸à¸²à¸£à¸ªà¸²à¸¢à¸à¸¸à¸à¹à¸ˆà¸«à¸£à¸·à¸­à¸„่าที่หายไป +- +- +- Entry binary key or value missing +- รายà¸à¸²à¸£à¸à¸¸à¸à¹à¸ˆà¹„บนารีหรือค่าที่หายไป +- +- +- Auto-type association window or sequence missing +- ไม่พบà¸à¸²à¸£à¸žà¸´à¸¡à¸žà¹Œà¸­à¸±à¸•à¹‚นมัติของหน้าต่างที่เชื่อมต่อ หรือลำดับ +- +- +- Invalid bool value +- ค่าบูลไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid date time value +- ค่าวันที่à¹à¸¥à¸°à¹€à¸§à¸¥à¸²à¹„ม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid color value +- ค่าสีไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid color rgb part +- ค่าสีส่วนRGBไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid number value +- ค่าตัวเลขไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid uuid value +- ค่า uuid ไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Unable to decompress binary +- Translator meant is a binary data inside an entry +- à¸à¸²à¸£à¸‚ยายไบนารีล้มเหลว +- +- +- XML error: +-%1 +-Line %2, column %3 +- XML ผิดพลาด +-%1 +-บรรทัด %2 +-หลัภ%3 +- +- +- +- +- KeeAgentSettings +- +- Invalid KeeAgent settings file structure. +- +- +- +- Private key is an attachment but no attachments provided. +- +- +- +- Private key is empty +- +- +- +- File too large to be a private key +- ไฟล์ใหà¸à¹ˆà¹€à¸à¸´à¸™à¸à¸§à¹ˆà¸²à¸ˆà¸°à¹€à¸›à¹‡à¸™à¸à¸¸à¸à¹à¸ˆà¸ªà¹ˆà¸§à¸™à¸•à¸±à¸§ +- +- +- Failed to open private key +- ล้มเหลวระหว่างà¸à¸²à¸£à¹€à¸›à¸´à¸”à¸à¸¸à¸à¹à¸ˆà¸ªà¹ˆà¸§à¸™à¸•à¸±à¸§ +- +- +- +- KeePass1OpenWidget +- +- Unable to open the database. +- ไม่สามารถเปิดà¸à¸²à¸™à¸‚้อมูลดังà¸à¸¥à¹ˆà¸²à¸§ +- +- +- Import KeePass1 Database +- +- +- +- +- KeePass1Reader +- +- Unable to read keyfile. +- ไม่สามารถอ่านà¹à¸Ÿà¹‰à¸¡à¸à¸¸à¸à¹à¸ˆà¹„ด้ +- +- +- Not a KeePass database. +- ไม่ใช่à¸à¸²à¸™à¸‚้อมูล KeePass +- +- +- Unsupported encryption algorithm. +- อัลà¸à¸­à¸£à¸´à¸—ีมเข้ารหัสลับไม่รองรับ +- +- +- Unsupported KeePass database version. +- รุ่นของà¸à¸²à¸™à¸‚้อมูล Keepass ไม่รองรับ +- +- +- Unable to read encryption IV +- IV = Initialization Vector for symmetric cipher +- ไม่สามารถอ่านà¸à¸²à¸£à¹€à¸‚้ารหัสลับ IV +- +- +- Invalid number of groups +- จำนวนà¸à¸¥à¸¸à¹ˆà¸¡à¹„ม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid number of entries +- จำนวนรายà¸à¸²à¸£à¹„ม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid content hash size +- ขนาดเนื้อหาโดยละเอียดไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid transform seed size +- à¸à¸²à¸£à¹à¸›à¸¥à¸‡à¸‚นาดค่าเริ่มต้นไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid number of transform rounds +- à¸à¸²à¸£à¹à¸›à¸¥à¸‡à¸ˆà¸³à¸™à¸§à¸™à¸£à¸­à¸šà¸‚องà¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¹„ม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Unable to construct group tree +- ไม่สามารถสร้าง group tree +- +- +- Root +- รูต +- +- +- Key transformation failed +- à¸à¸²à¸£à¹à¸›à¸¥à¸‡à¸£à¸«à¸±à¸ªà¸¥à¹‰à¸¡à¹€à¸«à¸¥à¸§ +- +- +- Invalid group field type number +- à¸à¸£à¸¸à¹Šà¸›à¸•à¸±à¸§à¹€à¸¥à¸‚ฟิลด์ไทป์ไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid group field size +- ขนาดà¸à¸£à¸¸à¹Šà¸›à¸Ÿà¸´à¸¥à¸”์ไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Read group field data doesn't match size +- ข้อมูลà¸à¸²à¸£à¸­à¹ˆà¸²à¸™à¸à¸£à¸¸à¹Šà¸›à¸Ÿà¸´à¸¥à¸”์ฟิลด์จับคู่ไม่ได้ขนาด +- +- +- Incorrect group id field size +- ขนาดà¸à¸£à¸¸à¹Šà¸›à¹„อดีฟิลด์ไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Incorrect group creation time field size +- เวลาà¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¸à¸£à¸¸à¹Šà¸›à¸Ÿà¸´à¸¥à¸”์ไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Incorrect group modification time field size +- à¸à¸²à¸£à¹à¸à¹‰à¹„ขเวลาà¸à¸£à¸¸à¹Šà¸›à¸Ÿà¸´à¸¥à¸”์ไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Incorrect group access time field size +- เวลาà¸à¸²à¸£à¹€à¸‚้าถึงà¸à¸£à¸¸à¹Šà¸›à¸Ÿà¸´à¸¥à¸”์ไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Incorrect group expiry time field size +- เวลาหมดอายุของà¸à¸£à¸¸à¹Šà¸›à¸Ÿà¸´à¸¥à¸”์ไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Incorrect group icon field size +- ขนาดà¸à¸£à¸¸à¹Šà¸›à¸Ÿà¸´à¸¥à¸”์ไอคอนไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Incorrect group level field size +- ขนาดเลเวลà¸à¸£à¸¸à¹Šà¸›à¸Ÿà¸´à¸¥à¸”์ไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid group field type +- à¸à¸¥à¸¸à¹ˆà¸¡à¸à¸£à¸¸à¹Šà¸›à¸Ÿà¸´à¸¥à¸”์ไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Missing group id or level +- บัà¸à¸Šà¸µà¸à¸¥à¸¸à¹ˆà¸¡à¸«à¸£à¸·à¸­à¹€à¸¥à¹€à¸§à¸¥à¸«à¸²à¸¢à¹„ป +- +- +- Missing entry field type number +- ตัวเลขเอ็นทรีฟิลด์ไทป์หายไป +- +- +- Invalid entry field size +- ขนาดเอ็นทรีฟิลด์ไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Read entry field data doesn't match size +- ขนาดà¸à¸²à¸£à¸­à¹ˆà¸²à¸™à¸‚้อมูลเอ็นทรีฟิลด์ไม่เหมาะสมà¸à¸±à¸šà¸‚นาด +- +- +- Invalid entry uuid field size +- ขนาดฟิลด์ UUID เอ็นทรีไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid entry group id field size +- ขนาดบัà¸à¸Šà¸µà¹€à¸­à¹‡à¸™à¸—รีà¸à¸£à¸¸à¹Šà¸›à¹„ม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid entry icon field size +- ขนาดฟิลด์ไอคอนเอ็นทรีไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid entry creation time field size +- เวลาสร้างขนาดฟิลด์เอ็นทรีไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid entry modification time field size +- เวลาà¹à¸à¹‰à¹„ขขนาดฟิลด์เอ็นทรีไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid entry expiry time field size +- เวลาหมดอายุขนาดฟิลด์เอ็นทรีไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid entry field type +- à¸à¸¥à¸¸à¹ˆà¸¡à¹€à¸­à¹‡à¸™à¸—รีฟิลด์ไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- unable to seek to content position +- ไม่สามารถที่จะหาตำà¹à¸«à¸™à¹ˆà¸‡à¹€à¸™à¸·à¹‰à¸­à¸«à¸²à¹„ด้ +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- +- +- +- Unable to calculate database key +- +- +- +- +- KeeShare +- +- Invalid sharing reference +- +- +- +- Inactive share %1 +- +- +- +- Imported from %1 +- นำเข้า จาภ1% +- +- +- Exported to %1 +- +- +- +- Synchronized with %1 +- +- +- +- Import is disabled in settings +- +- +- +- Export is disabled in settings +- +- +- +- Inactive share +- +- +- +- Imported from +- นำเข้าจาภ+- +- +- Exported to +- ส่งออà¸à¹„ป +- +- +- Synchronized with +- +- +- +- +- KeyComponentWidget +- +- Key Component +- ส่วนโปรà¹à¸à¸£à¸¡à¸«à¸¥à¸±à¸ +- +- +- Key Component Description +- คำบรรยายส่วนโปรà¹à¸à¸£à¸¡à¸«à¸¥à¸±à¸ +- +- +- Cancel +- ยà¸à¹€à¸¥à¸´à¸ +- +- +- Key Component set, click to change or remove +- จัดตั้งส่วนโปรà¹à¸à¸£à¸¡à¸«à¸¥à¸±à¸à¸ªà¸³à¹€à¸£à¹‡à¸ˆ คลิà¸à¹€à¸žà¸·à¹ˆà¸­à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸«à¸£à¸·à¸­à¸¥à¸šà¸­à¸­à¸ +- +- +- Add %1 +- Add a key component +- เพิ่ม %1 +- +- +- Change %1 +- Change a key component +- เปลี่ยนà¹à¸›à¸¥à¸‡ %1 +- +- +- Remove %1 +- Remove a key component +- ลบออภ%1 +- +- +- %1 set, click to change or remove +- Change or remove a key component +- ตั้งค่า %1 คลิà¸à¹€à¸žà¸·à¹ˆà¸­à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸«à¸£à¸·à¸­à¸¢à¸à¹€à¸¥à¸´à¸ +- +- +- +- KeyFileEditWidget +- +- Generate +- สร้าง +- +- +- Key File +- à¹à¸Ÿà¹‰à¸¡à¸à¸¸à¸à¹à¸ˆ +- +- +- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> +- <p>คุณสามารถเพิ่มà¹à¸Ÿà¹‰à¸¡à¸à¸¸à¸à¹à¸ˆà¸—ี่ประà¸à¸­à¸šà¹„ปด้วยไบต์à¹à¸šà¸šà¸ªà¸¸à¹ˆà¸¡à¹€à¸žà¸·à¹ˆà¸­à¸„วามปลอดภัยที่มาà¸à¸‚ึ้น</p><p>คุณต้องเà¸à¹‡à¸šà¸‚้อมูลเป็นความลับห้ามทำหาย ไม่เช่นนั้นจะหลุดออà¸à¸ˆà¸²à¸à¸£à¸°à¸šà¸š +- +- +- Error loading the key file '%1' +-Message: %2 +- มีปัà¸à¸«à¸²à¹ƒà¸™à¸à¸²à¸£à¹‚หลดà¹à¸Ÿà¹‰à¸¡à¸à¸¸à¸à¹à¸ˆ %1 +-ข้อความ %2 +- +- +- Key files +- à¹à¸Ÿà¹‰à¸¡à¸à¸¸à¸à¹à¸ˆ +- +- +- All files +- ทุà¸à¹à¸Ÿà¹‰à¸¡ +- +- +- Create Key File... +- สร้างà¹à¸Ÿà¹‰à¸¡à¸à¸¸à¸à¹à¸ˆ... +- +- +- Error creating key file +- พบปัà¸à¸«à¸²à¹ƒà¸™à¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¹à¸Ÿà¹‰à¸¡à¸à¸¸à¸à¹à¸ˆ +- +- +- Unable to create key file: %1 +- ไม่สามารถสร้างà¹à¸Ÿà¹‰à¸¡à¸à¸¸à¸à¹à¸ˆ %1 +- +- +- Select a key file +- เลือà¸à¹à¸Ÿà¹‰à¸¡à¸à¸¸à¸à¹à¸ˆ +- +- +- Key file selection +- เลือà¸à¹à¸Ÿà¹‰à¸¡à¸à¸¸à¸à¹à¸ˆ +- +- +- Browse for key file +- เลือà¸à¹à¸Ÿà¹‰à¸¡à¸à¸¸à¸à¹à¸ˆ +- +- +- Browse... +- เรียà¸à¸”ู... +- +- +- Generate a new key file +- สร้างà¹à¸Ÿà¹‰à¸¡à¸à¸¸à¸à¹à¸ˆà¹ƒà¸«à¸¡à¹ˆ +- +- +- Note: Do not use a file that may change as that will prevent you from unlocking your database! +- +- +- +- Invalid Key File +- +- +- +- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. +- +- +- +- Suspicious Key File +- +- +- +- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. +-Are you sure you want to continue with this file? +- +- +- +- Old key file format +- +- +- +- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. +- +- +- +- +- MainWindow +- +- &Database +- à¸à¸²à¸™à¸‚้อมูล (&D) +- +- +- &Help +- ช่วยเหลือ (&H) +- +- +- &Groups +- à¸à¸¥à¸¸à¹ˆà¸¡ (&G) +- +- +- &Tools +- เครื่องมือ (&T) +- +- +- &Quit +- ออภ(&Q) +- +- +- &About +- เà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸š (&A) +- +- +- Database settings +- à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าà¸à¸²à¸™à¸‚้อมูล +- +- +- Copy username to clipboard +- คัดลอà¸à¸Šà¸·à¹ˆà¸­à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¹„ปคลิปบอร์ด +- +- +- Copy password to clipboard +- คัดลอà¸à¸£à¸«à¸±à¸ªà¸œà¹ˆà¸²à¸™à¹„ปคลิปบอร์ด +- +- +- &Settings +- à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่า (&S) +- +- +- &Title +- หัวเรื่อง (&T) +- +- +- Copy title to clipboard +- คัดลอà¸à¸«à¸±à¸§à¸‚้อไปยังคลิปบอร์ด +- +- +- &URL +- URL (&U) +- +- +- Copy URL to clipboard +- คัดลอภURL ไปยัง คลิปบอร์ด +- +- +- &Notes +- บันทึภ(&N) +- +- +- Copy notes to clipboard +- คัดลอà¸à¸‚้อมูลไปยังคลิปบอร์ด +- +- +- Copy &TOTP +- คัดลอภ&TOTP +- +- +- E&mpty recycle bin +- ล้างถังรีไซเคิล +- +- +- Clear history +- ล้างประวัติ +- +- +- Access error for config file %1 +- มีข้อผิดพลาดในà¸à¸²à¸£à¹€à¸‚้าถึงà¹à¸Ÿà¹‰à¸¡à¸•à¸±à¹‰à¸‡à¸„่า %1 +- +- +- Settings +- ตั้งค่า +- +- +- Toggle window +- สลับหน้าต่าง +- +- +- Quit KeePassXC +- ออà¸à¸ˆà¸²à¸ KeePassXC +- +- +- Please touch the button on your YubiKey! +- à¸à¸£à¸¸à¸“าà¹à¸•à¸°à¸›à¸¸à¹ˆà¸¡à¸šà¸™ YubiKey ของคุณ! +- +- +- WARNING: You are using an unstable build of KeePassXC! +-There is a high risk of corruption, maintain a backup of your databases. +-This version is not meant for production use. +- คำเตือน คุณà¸à¸³à¸¥à¸±à¸‡à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸—ี่ไม่เสถียรของ KeePassXC! +-มีความเสี่ยงสูงในà¸à¸²à¸£à¹€à¸à¸´à¸”ความเสียหาย เà¸à¹‡à¸šà¸ªà¸³à¸£à¸­à¸‡à¸‚้อมูลของคุณ +-รุ่นนี้ไม่ได้มีไว้สำหรับà¸à¸²à¸£à¹ƒà¸Šà¹‰ +- +- +- &Donate +- บริจาค +- +- +- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +-We recommend you use the AppImage available on our downloads page. +- คำเตือน รุ่น Qt ของคุณอาจทำให้ KeePassXC ขัดข้องà¸à¸±à¸šà¸šà¸™à¸«à¸™à¹‰à¸²à¸ˆà¸­à¸„ีย์บอร์ท +-พวà¸à¹€à¸£à¸²à¹à¸™à¸°à¸™à¸³à¹ƒà¸«à¹‰à¸„ุณใช้ Applmage อยู่หน้าดาวน์โหลด +- +- +- &Import +- &นำเข้า +- +- +- Create a new database +- สร้างà¸à¸²à¸™à¸‚้อมูลใหม่ +- +- +- Merge from another KDBX database +- รวมà¸à¸²à¸™à¸‚้อมูลKDBXอีà¸à¸Šà¸¸à¸” +- +- +- Add a new entry +- เพิ่มรายà¸à¸²à¸£à¹ƒà¸«à¸¡à¹ˆ +- +- +- View or edit entry +- ดู หรือ à¹à¸à¹‰à¹„ขรายà¸à¸²à¸£ +- +- +- Add a new group +- เพิ่มà¸à¸¥à¸¸à¹ˆà¸¡à¹ƒà¸«à¸¡à¹ˆ +- +- +- Perform &Auto-Type +- ดำเนินà¸à¸²à¸£à¹à¸¥à¸°à¸žà¸´à¸¡à¸žà¹Œà¸­à¸±à¸•à¹‚นมัติ +- +- +- Open &URL +- เปิดà¹à¸¥à¸° URL +- +- +- Import a KeePass 1 database +- นำเข้า à¸à¸²à¸™à¸‚้อมูล KeePass1... +- +- +- Import a CSV file +- นำเข้า à¹à¸Ÿà¹‰à¸¡ CSV +- +- +- NOTE: You are using a pre-release version of KeePassXC! +-Expect some bugs and minor issues, this version is not meant for production use. +- หมายเหตุ คุณà¸à¸³à¸¥à¸±à¸‡à¹ƒà¸Šà¹‰à¸‡à¸²à¸™ KeePassXC รุ่นà¸à¹ˆà¸­à¸™à¸§à¸²à¸‡à¸ˆà¸³à¸«à¸™à¹ˆà¸²à¸¢ คาดว่าข้อบà¸à¸žà¸£à¹ˆà¸­à¸‡à¸šà¸²à¸‡à¸­à¸¢à¹ˆà¸²à¸‡à¹à¸¥à¸°à¸›à¸±à¸à¸«à¸²à¹€à¸¥à¹‡à¸à¸™à¹‰à¸­à¸¢ รุ่นนี้ไม่ได้มีไว้สำหรับà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸ˆà¸£à¸´à¸‡ +- +- +- Check for updates on startup? +- ตรวจสอบà¸à¸²à¸£à¸­à¸±à¸›à¹€à¸”ทเมื่อเริ่มโปรà¹à¸à¸£à¸¡ +- +- +- Would you like KeePassXC to check for updates on startup? +- คุณต้องà¸à¸²à¸£à¹ƒà¸«à¹‰ KeePassXC ตรวจสอบเพื่ออัปเดตคลิà¸à¸—ี่ปุ่มเปิด +- +- +- You can always check for updates manually from the application menu. +- คุณสามารถตรวจสอบà¸à¸²à¸£à¸­à¸±à¸›à¹€à¸”ตได้ด้วยตนเองจาà¸à¹€à¸¡à¸™à¸¹à¹à¸­à¸›à¸žà¸¥à¸´à¹€à¸„ชัน +- +- +- &Export +- +- +- +- Sort &A-Z +- +- +- +- Sort &Z-A +- +- +- +- &Password Generator +- +- +- +- Import a 1Password Vault +- +- +- +- &Getting Started +- +- +- +- &User Guide +- +- +- +- &Keyboard Shortcuts +- +- +- +- &Recent Databases +- +- +- +- &Entries +- +- +- +- Copy Att&ribute +- +- +- +- TOTP +- TOTP +- +- +- View +- +- +- +- Theme +- +- +- +- &Check for Updates +- +- +- +- &Open Database… +- +- +- +- &Save Database +- +- +- +- &Close Database +- +- +- +- &New Database… +- +- +- +- &Merge From Database… +- +- +- +- &New Entry… +- +- +- +- &Edit Entry… +- +- +- +- &Delete Entry… +- +- +- +- &New Group… +- +- +- +- &Edit Group… +- +- +- +- &Delete Group… +- +- +- +- Download All &Favicons… +- +- +- +- Sa&ve Database As… +- +- +- +- Database &Security… +- +- +- +- Database &Reports... +- +- +- +- Statistics, health check, etc. +- +- +- +- &Database Settings… +- +- +- +- &Clone Entry… +- +- +- +- Move u&p +- +- +- +- Move entry one step up +- +- +- +- Move do&wn +- +- +- +- Move entry one step down +- +- +- +- Copy &Username +- +- +- +- Copy &Password +- +- +- +- Download &Favicon +- +- +- +- &Lock Databases +- +- +- +- &CSV File… +- +- +- +- &HTML File… +- +- +- +- KeePass 1 Database… +- +- +- +- 1Password Vault… +- +- +- +- CSV File… +- +- +- +- Show TOTP +- à¹à¸ªà¸”ง TOTP +- +- +- Show QR Code +- +- +- +- Set up TOTP… +- +- +- +- Report a &Bug +- +- +- +- Open Getting Started Guide +- +- +- +- &Online Help +- +- +- +- Go to online documentation +- +- +- +- Open User Guide +- +- +- +- Save Database Backup... +- +- +- +- Add key to SSH Agent +- +- +- +- Remove key from SSH Agent +- +- +- +- Compact Mode +- +- +- +- Automatic +- +- +- +- Light +- +- +- +- Dark +- +- +- +- Classic (Platform-native) +- +- +- +- Show Toolbar +- +- +- +- Show Preview Panel +- +- +- +- Don't show again for this version +- +- +- +- Restart Application? +- +- +- +- You must restart the application to apply this setting. Would you like to restart now? +- +- +- +- Perform Auto-Type Sequence +- +- +- +- {USERNAME} +- +- +- +- {USERNAME}{ENTER} +- +- +- +- {PASSWORD} +- +- +- +- {PASSWORD}{ENTER} +- +- +- +- Always on Top +- +- +- +- Hide Usernames +- ซ่อนชื่อผู้ใช้ +- +- +- Hide Passwords +- ซ่อนรหัสผ่าน +- +- +- +- ManageDatabase +- +- Database settings +- à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าà¸à¸²à¸™à¸‚้อมูล +- +- +- Edit database settings +- à¹à¸à¹‰à¹„ขà¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าà¸à¸²à¸™à¸‚้อมูล +- +- +- Unlock database +- ปลดล็อà¸à¸à¸²à¸™à¸‚้อมูล +- +- +- Unlock database to show more information +- +- +- +- Lock database +- ล็อà¸à¸à¸²à¸™à¸‚้อมูล +- +- +- +- ManageSession +- +- Disconnect +- หยุดเชื่อมต่อ +- +- +- Disconnect this application +- +- +- +- +- Merger +- +- Creating missing %1 [%2] +- à¸à¸³à¸¥à¸±à¸‡à¸ªà¸£à¹‰à¸²à¸‡à¸ªà¹ˆà¸§à¸™à¸—ี่หายไป %1 [%2] +- +- +- Relocating %1 [%2] +- ย้าย% 1 [% 2] +- +- +- Overwriting %1 [%2] +- เขียนทับ % 1 [% 2] +- +- +- older entry merged from database "%1" +- รวมข้อมูลที่เà¸à¹ˆà¸²à¸à¸§à¹ˆà¸²à¹€à¸‚้าà¸à¸±à¸šà¸à¸²à¸™à¸‚้อมูล "% 1" +- +- +- Adding backup for older target %1 [%2] +- à¸à¸³à¸¥à¸±à¸‡à¹€à¸žà¸´à¹ˆà¸¡à¸à¸²à¸£à¸ªà¸³à¸£à¸­à¸‡à¸‚้อมูลสำหรับเป้าหมายที่เà¸à¹ˆà¸²à¸à¸§à¹ˆà¸²% 1 [% 2] +- +- +- Adding backup for older source %1 [%2] +- à¸à¸³à¸¥à¸±à¸‡à¹€à¸žà¸´à¹ˆà¸¡à¸à¸²à¸£à¸ªà¸³à¸£à¸­à¸‡à¸‚้อมูลสำหรับà¹à¸«à¸¥à¹ˆà¸‡à¸‚้อมูลที่เà¸à¹ˆà¸²à¸à¸§à¹ˆà¸²% 1 [% 2] +- +- +- Reapplying older target entry on top of newer source %1 [%2] +- à¸à¸²à¸£à¸™à¸³à¸£à¸²à¸¢à¸à¸²à¸£à¹à¸«à¸¥à¹ˆà¸‡à¸‚้อมูลเà¸à¹ˆà¸²à¸¡à¸²à¹ƒà¸Šà¹‰à¹ƒà¸«à¸¡à¹ˆà¸—ี่ด้านบนของà¸à¸²à¸™à¸‚้อมูลใหม่à¸à¸§à¹ˆà¸²% 1 [% 2] +- +- +- Reapplying older source entry on top of newer target %1 [%2] +- à¸à¸²à¸£à¸™à¸³à¸£à¸²à¸¢à¸à¸²à¸£à¹à¸«à¸¥à¹ˆà¸‡à¸‚้อมูลเà¸à¹ˆà¸²à¸¡à¸²à¹ƒà¸Šà¹‰à¹ƒà¸«à¸¡à¹ˆà¸—ี่ด้านบนของเป้าหมายใหม่à¸à¸§à¹ˆà¸²% 1 [% 2] +- +- +- Synchronizing from newer source %1 [%2] +- เชื่อมต่อจาà¸à¸à¸²à¸™à¸‚้อมูลใหม่ %1 [%2] +- +- +- Synchronizing from older source %1 [%2] +- เชื่อมต่อจาà¸à¸à¸²à¸™à¸‚้อมูลเดิม %1 [%2] +- +- +- Deleting child %1 [%2] +- ลบข้อมูลลูภ%1 [%2] +- +- +- Deleting orphan %1 [%2] +- ลบข้อมูลà¸à¸³à¸žà¸£à¹‰à¸² %1 [%2] +- +- +- Changed deleted objects +- เปลี่ยนสิ่งที่ถูà¸à¸¥à¸š +- +- +- Adding missing icon %1 +- เพิ่มไอคอนขาดหายไป % 1 +- +- +- Removed custom data %1 [%2] +- +- +- +- Adding custom data %1 [%2] +- +- +- +- +- NewDatabaseWizard +- +- Create a new KeePassXC database... +- สร้าง à¸à¸²à¸™à¸‚้อมูล Keepass XC ใหม่ +- +- +- Root +- Root group +- รูต +- +- +- +- NewDatabaseWizardPage +- +- WizardPage +- วิซาร์ดเพจ +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- ที่นี่คุณสามารถปรับà¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าà¸à¸²à¸£à¹€à¸‚้ารหัสà¸à¸²à¸™à¸‚้อมูล ไม่ต้องà¸à¸±à¸‡à¸§à¸¥à¸„ุณสามารถเปลี่ยนได้ในภายหลังในà¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่า à¸à¸²à¸™à¸‚้อมูล +- +- +- Advanced Settings +- à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าขั้นสูง +- +- +- Simple Settings +- à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าพื้นà¸à¸²à¸™ +- +- +- Encryption Settings +- à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าà¸à¸²à¸£à¹€à¸‚้ารหัสลับ +- +- +- +- NewDatabaseWizardPageDatabaseKey +- +- Database Credentials +- +- +- +- A set of credentials known only to you that protects your database. +- +- +- +- +- NewDatabaseWizardPageEncryption +- +- Encryption Settings +- à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าà¸à¸²à¸£à¹€à¸‚้ารหัส +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- ที่นี่คุณสามารถปรับà¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าà¸à¸²à¸£à¹€à¸‚้ารหัสà¸à¸²à¸™à¸‚้อมูล ไม่ต้องà¸à¸±à¸‡à¸§à¸¥à¸„ุณสามารถเปลี่ยนได้ในภายหลังในà¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าà¸à¸²à¸™à¸‚้อมูล +- +- +- +- NewDatabaseWizardPageMetaData +- +- General Database Information +- ข้อมูล à¸à¸²à¸™à¸‚้อมูล ทั่วไป +- +- +- Please fill in the display name and an optional description for your new database: +- à¸à¸£à¸¸à¸“าà¸à¸£à¸­à¸à¸Šà¸·à¹ˆà¸­à¸—ี่à¹à¸ªà¸”ง à¹à¸¥à¸°à¸„ำอธิบายเพิ่มเติมสำหรับ à¸à¸²à¸™à¸‚้อมูล ใหม่ของคุณ +- +- +- +- NixUtils +- +- Password Manager +- +- +- +- +- OpData01 +- +- Invalid OpData01, does not contain header +- +- +- +- Unable to read all IV bytes, wanted 16 but got %1 +- +- +- +- Unable to init cipher for opdata01: %1 +- +- +- +- Unable to read all HMAC signature bytes +- +- +- +- Malformed OpData01 due to a failed HMAC +- +- +- +- Unable to process clearText in place +- +- +- +- Expected %1 bytes of clear-text, found %2 +- +- +- +- +- OpVaultOpenWidget +- +- Read Database did not produce an instance +-%1 +- +- +- +- +- OpVaultReader +- +- Directory .opvault must exist +- +- +- +- Directory .opvault must be readable +- +- +- +- Directory .opvault/default must exist +- +- +- +- Directory .opvault/default must be readable +- +- +- +- Unable to decode masterKey: %1 +- +- +- +- Unable to derive master key: %1 +- +- +- +- +- OpenSSHKey +- +- Invalid key file, expecting an OpenSSH key +- à¹à¸Ÿà¹‰à¸¡à¸à¸¸à¸à¹à¸ˆ ไม่ถูà¸à¸•à¹‰à¸­à¸‡ คาดว่าจะมี à¸à¸¸à¸à¹à¸ˆ OpenSSH +- +- +- PEM boundary mismatch +- เงื่อนไข PEM ไม่ตรงà¸à¸±à¸™ +- +- +- Base64 decoding failed +- à¸à¸²à¸£à¸–อดรหัส Base64 ล้มเหลว +- +- +- Key file way too small. +- à¹à¸Ÿà¹‰à¸¡à¸à¸¸à¸à¹à¸ˆ มีขนาดเล็à¸à¸¡à¸²à¸ +- +- +- Key file magic header id invalid +- รหัสหัวไฟล์à¸à¸¸à¸à¹à¸ˆà¹€à¸¡à¸ˆà¸´à¸à¹„ม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Found zero keys +- ไมพบà¸à¸¸à¸à¹à¸ˆ +- +- +- Failed to read public key. +- ไม่สามารถอ่านà¸à¸¸à¸à¹à¸ˆà¸ªà¸²à¸˜à¸²à¸£à¸“ะ +- +- +- Corrupted key file, reading private key failed +- ไฟล์à¸à¸¸à¸à¹à¸ˆà¹€à¸ªà¸µà¸¢à¸«à¸²à¸¢ à¸à¸²à¸£à¸­à¹ˆà¸²à¸™à¸à¸¸à¸à¹à¸ˆà¸ªà¹ˆà¸§à¸™à¸•à¸±à¸§à¸¥à¹‰à¸¡à¹€à¸«à¸¥à¸§ +- +- +- No private key payload to decrypt +- ไม่มีส่วนข้อมูลของà¸à¸¸à¸à¹à¸ˆà¸ªà¹ˆà¸§à¸™à¸•à¸±à¸§à¹€à¸žà¸·à¹ˆà¸­à¸–อดรหัสลับ +- +- +- Trying to run KDF without cipher +- พยายามจะเรียà¸à¹ƒà¸Šà¹‰ KDF โดยไม่ใช้à¸à¸²à¸£à¹€à¸‚้ารหัส +- +- +- Passphrase is required to decrypt this key +- จำเป็นต้องใช้วลีรหัสผ่านเพื่อถอดรหัสผ่านà¸à¸¸à¸à¹à¸ˆà¸™à¸µà¹‰ +- +- +- Key derivation failed, key file corrupted? +- à¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¸à¸¸à¸à¹à¸ˆà¸¥à¹‰à¸¡à¹€à¸«à¸¥à¸§ ไฟล์à¸à¸¸à¸à¹à¸ˆà¸¡à¸µà¸›à¸±à¸à¸«à¸²à¸«à¸£à¸·à¸­à¹„ม่ +- +- +- Decryption failed, wrong passphrase? +- à¸à¸²à¸£à¸–อดรหัสลับล้มเหลว ใส่วลีรหัสผ่านผิดหรือไม่ +- +- +- Unexpected EOF while reading public key +- เà¸à¸´à¸” EOF ที่ไม่คาดคิดขณะอ่านà¸à¸¸à¸à¹à¸ˆà¸ªà¸²à¸˜à¸²à¸£à¸“ะ +- +- +- Unexpected EOF while reading private key +- เà¸à¸´à¸” EOF ที่ไม่คาดคิดขณะอ่านà¸à¸¸à¸à¹à¸ˆà¸ªà¹ˆà¸§à¸™à¸•à¸±à¸§ +- +- +- Can't write public key as it is empty +- ไม่สามารถเขียนà¸à¸¸à¸à¹à¸ˆà¸ªà¸²à¸˜à¸²à¸£à¸“ะได้เนื่องจาà¸à¹„ม่มี +- +- +- Unexpected EOF when writing public key +- เà¸à¸´à¸” EOF ที่ไม่คาดคิดขณะเขียนà¸à¸¸à¸à¹à¸ˆà¸ªà¸²à¸˜à¸²à¸£à¸“ะ +- +- +- Can't write private key as it is empty +- ไม่สามารถเขียนà¸à¸¸à¸à¹à¸ˆà¸ªà¹ˆà¸§à¸™à¸•à¸±à¸§à¹„ด้เนื่องจาà¸à¹„ม่มี +- +- +- Unexpected EOF when writing private key +- เà¸à¸´à¸” EOF ที่ไม่คาดคิดขณะเขียนà¸à¸¸à¸à¹à¸ˆà¸ªà¹ˆà¸§à¸™à¸•à¸±à¸§ +- +- +- Unsupported key type: %1 +- ชนิดà¸à¸¸à¸à¹à¸ˆà¸—ี่ไม่รองรับ: %1 +- +- +- Unknown cipher: %1 +- à¸à¸²à¸£à¹€à¸‚้ารหัสที่ไม่รู้จัà¸: %1 +- +- +- Cipher IV is too short for MD5 kdf +- à¸à¸²à¸£à¹€à¸‚้ารหัส IV สั้นเà¸à¸´à¸™à¹„ปสำหรับ MD5 kdf +- +- +- Unknown KDF: %1 +- KDF ที่ไม่รู้จัà¸: %1 +- +- +- Unknown key type: %1 +- ประเภทà¸à¸¸à¸à¹à¸ˆà¸—ี่ไม่รู้จัà¸: %1 +- +- +- +- PasswordEdit +- +- Passwords do not match +- +- +- +- Passwords match so far +- +- +- +- Toggle Password (%1) +- +- +- +- Generate Password (%1) +- +- +- +- Warning: Caps Lock enabled! +- +- +- +- +- PasswordEditWidget +- +- Enter password: +- à¸à¸£à¸­à¸à¸£à¸«à¸±à¸ªà¸œà¹ˆà¸²à¸™ +- +- +- Confirm password: +- ยืนยันรหัสผ่าน +- +- +- Password +- รหัสผ่าน +- +- +- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> +- <p>รหัสผ่านเป็นวิธีพื้นà¸à¸²à¸™à¹ƒà¸™à¸à¸²à¸£à¸›à¸à¸›à¹‰à¸­à¸‡à¸à¸²à¸™à¸‚้อมูลของคุณ</p><p>รหัสผ่านที่ดีควรยาวà¹à¸¥à¸°à¸¡à¸µà¹€à¸­à¸à¸¥à¸±à¸à¸©à¸“์ KeePassXC สร้างรหัสผ่านให้คุณได้</p> +- +- +- Passwords do not match. +- รหัสผ่านไม่ตรง +- +- +- Password field +- ช่องรหัสผ่าน +- +- +- Repeat password field +- +- +- +- +- PasswordGeneratorWidget +- +- %p% +- %p% +- +- +- strength +- Password strength +- ความà¹à¸‚็งà¹à¸£à¸‡ +- +- +- entropy +- เอนโทรปี +- +- +- Password +- รหัสผ่าน +- +- +- Character Types +- ชนิดอัà¸à¸‚ระ +- +- +- Numbers +- ตัวเลข +- +- +- Extended ASCII +- Extended ASCII +- +- +- +- Exclude look-alike characters +- ไม่ใช้อัà¸à¸‚ระที่หน้าตาคล้ายà¸à¸±à¸™ +- +- +- Pick characters from every group +- เลือà¸à¹ƒà¸Šà¹‰à¸•à¸±à¸§à¸­à¸±à¸à¸‚ระจาà¸à¸—ุà¸à¸à¸¥à¸¸à¹ˆà¸¡ +- +- +- &Length: +- ความยาว (&L) +- +- +- Passphrase +- วลีรหัสผ่าน +- +- +- Wordlist: +- รายà¸à¸²à¸£à¸„ำ +- +- +- Word Separator: +- ตัวà¹à¸šà¹ˆà¸‡à¸„ำ +- +- +- Close +- ปิด +- +- +- Entropy: %1 bit +- เอนโทรปี: %1 บิต +- +- +- Password Quality: %1 +- คุณภาพรหัสผ่าน: %1 +- +- +- Poor +- Password quality +- à¹à¸¢à¹ˆ +- +- +- Weak +- Password quality +- อ่อนà¹à¸­ +- +- +- Good +- Password quality +- ดี +- +- +- Excellent +- Password quality +- ดีมาภ+- +- +- Switch to advanced mode +- เปลี่ยนเป็นโหมดใช้งานขั้นสูง +- +- +- Advanced +- ขั้นสูง +- +- +- Braces +- วงเล็บปีà¸à¸à¸² +- +- +- Punctuation +- วรรคตอน +- +- +- Quotes +- คำพูด +- +- +- Logograms +- สัà¸à¸¥à¸±à¸à¸©à¸“์หรือตัวอัà¸à¸©à¸£à¸—ี่ใช้à¹à¸—นคำ +- +- +- Character set to exclude from generated password +- ชุดอัà¸à¸‚ระที่ต้องà¸à¸²à¸£à¸¢à¸à¹€à¸§à¹‰à¸™à¸ˆà¸²à¸à¸£à¸«à¸±à¸ªà¸œà¹ˆà¸²à¸™à¸—ี่สร้างขึ้น +- +- +- Do not include: +- ไม่รวม +- +- +- Add non-hex letters to "do not include" list +- เพิ่มตัวอัà¸à¸‚ระที่ไม่ใช่เลขà¸à¸²à¸™à¸ªà¸´à¸šà¸«à¸à¹ƒà¸™à¸£à¸²à¸¢à¸à¸²à¸£ "ห้ามรวม" +- +- +- Hex +- เลขà¸à¸²à¸™à¸ªà¸´à¸šà¸«à¸ +- +- +- Excluded characters: "0", "1", "l", "I", "O", "|", "ï¹’" +- อัà¸à¸‚ระที่ยà¸à¹€à¸§à¹‰à¸™: "0", "1", "l", "I", "O", "|", "ï¹’" +- +- +- Generated password +- +- +- +- Upper-case letters +- +- +- +- Lower-case letters +- +- +- +- Special characters +- +- +- +- Math Symbols +- +- +- +- Dashes and Slashes +- +- +- +- Excluded characters +- +- +- +- Hex Passwords +- +- +- +- Password length +- +- +- +- Word Case: +- +- +- +- Regenerate password +- +- +- +- Copy password +- +- +- +- lower case +- +- +- +- UPPER CASE +- +- +- +- Title Case +- +- +- +- Generate Password +- +- +- +- Also choose from: +- +- +- +- Additional characters to use for the generated password +- +- +- +- Additional characters +- +- +- +- Word Count: +- จำนวนคำ: +- +- +- Esc +- +- +- +- Apply Password +- +- +- +- Ctrl+S +- +- +- +- Regenerate password (%1) +- +- +- +- Special Characters +- อัà¸à¸‚ระพิเศษ +- +- +- +- QApplication +- +- KeeShare +- KeeShare +- +- +- Statistics +- สถิติ +- +- +- Very weak password +- +- +- +- Password entropy is %1 bits +- +- +- +- Weak password +- +- +- +- Used in %1/%2 +- +- +- +- Password is used %1 times +- +- +- +- Password has expired +- +- +- +- Password expiry was %1 +- +- +- +- Password is about to expire +- +- +- +- Password expires in %1 days +- +- +- +- Password will expire soon +- +- +- +- Password expires on %1 +- +- +- +- Health Check +- +- +- +- HIBP +- +- +- +- +- QMessageBox +- +- Overwrite +- เขียนทับ +- +- +- Delete +- ลบ +- +- +- Move +- เคลื่อนย้าย +- +- +- Empty +- ว่างเปล่า +- +- +- Remove +- นำออภ+- +- +- Skip +- ข้ามไป +- +- +- Disable +- ปิดใช้ +- +- +- Merge +- ผสาน +- +- +- Continue +- +- +- +- +- QObject +- +- Database not opened +- ไม่ได้เปิดà¸à¸²à¸™à¸‚้อมูล +- +- +- Database hash not available +- à¸à¸²à¸™à¸‚้อมูล hash ไม่พร้อมใช้งาน +- +- +- Client public key not received +- ไม่ได้รับà¸à¸¸à¸à¹à¸ˆà¸ªà¸²à¸˜à¸²à¸£à¸“ะของผู้รับบริà¸à¸²à¸£ +- +- +- Cannot decrypt message +- ไม่สามารถถอดรหัสข้อความ +- +- +- Action cancelled or denied +- à¸à¸²à¸£à¸à¸£à¸°à¸—ำถูà¸à¸¢à¸à¹€à¸¥à¸´à¸à¸«à¸£à¸·à¸­à¸›à¸à¸´à¹€à¸ªà¸˜ +- +- +- KeePassXC association failed, try again +- à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¹‚ยง KeePassXC ล้มเหลว ลองอีà¸à¸„รั้ง +- +- +- Encryption key is not recognized +- ไม่รู้จัà¸à¸à¸¸à¸à¹à¸ˆà¹€à¸‚้ารหัสลับ +- +- +- Incorrect action +- à¸à¸²à¸£à¸”ำเนินà¸à¸²à¸£à¸—ี่ไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Empty message received +- ได้รับข้อความว่างเปล่า +- +- +- No URL provided +- ไม่ได้ระบุ URL +- +- +- No logins found +- ไม่พบà¸à¸²à¸£à¹€à¸‚้าสู่ระบบ +- +- +- Unknown error +- ความผิดพลาดที่ไม่อาจระบุได้ +- +- +- Add a new entry to a database. +- เพิ่มรายà¸à¸²à¸£à¹ƒà¸«à¸¡à¹ˆà¹„ปยังà¸à¸²à¸™à¸‚้อมูล +- +- +- Path of the database. +- เส้นทางของà¸à¸²à¸™à¸‚้อมูล +- +- +- Key file of the database. +- à¹à¸Ÿà¹‰à¸¡à¸à¸¸à¸à¹à¸ˆà¸‚องà¸à¸²à¸™à¸‚้อมูล +- +- +- path +- เส้นทาง +- +- +- Username for the entry. +- ชื่อผู้ใช้สำหรับรายà¸à¸²à¸£ +- +- +- username +- ชื่อผู้ใช้ +- +- +- URL for the entry. +- URL สำหรับรายà¸à¸²à¸£. +- +- +- URL +- URL +- +- +- Prompt for the entry's password. +- พร้อมสำหรับรหัสผ่านของรายà¸à¸²à¸£ +- +- +- Generate a password for the entry. +- สร้างรหัสผ่านสำหรับรายà¸à¸²à¸£ +- +- +- length +- ความยาว +- +- +- Path of the entry to add. +- เส้นทางของรายà¸à¸²à¸£à¸—ี่จะเพิ่ม +- +- +- Path of the entry to clip. +- clip = copy to clipboard +- เส้นทางของรายà¸à¸²à¸£à¹„ปยังคลิป +- +- +- Timeout in seconds before clearing the clipboard. +- ใà¸à¸¥à¹‰à¸«à¸¡à¸”เวลาà¸à¹ˆà¸­à¸™à¸—ี่จะล้างคลิปบอร์ด +- +- +- Edit an entry. +- à¹à¸à¹‰à¹„ขรายà¸à¸²à¸£ +- +- +- Title for the entry. +- หัวข้อสำหรับรายà¸à¸²à¸£ +- +- +- title +- หัวข้อ +- +- +- Path of the entry to edit. +- เส้นทางของรายà¸à¸²à¸£à¸—ี่จะà¹à¸à¹‰à¹„ข +- +- +- Estimate the entropy of a password. +- คาดคะเนเอนโทรปีของรหัสผ่าน +- +- +- Password for which to estimate the entropy. +- รหัสผ่านสำหรับคาดคะเนเอนโทรปี +- +- +- Perform advanced analysis on the password. +- วิเคราะห์รหัสผ่านชั้นสูง +- +- +- +- +-Available commands: +- +- +- +-คำสั่งที่พร้อมใช้งานคือ +- +- +- +- Name of the command to execute. +- ชื่อของคำสั่งที่จะดำเนินà¸à¸²à¸£ +- +- +- List database entries. +- à¹à¸ªà¸”งรายà¸à¸²à¸£à¸à¸²à¸™à¸‚้อมูล +- +- +- Path of the group to list. Default is / +- เส้นทางของà¸à¸¥à¸¸à¹ˆà¸¡à¸—ี่จะสร้างรายà¸à¸²à¸£ ค่าเริ่มต้นคือ +- +- +- Find entries quickly. +- ค้นหารายà¸à¸²à¸£à¸­à¸¢à¹ˆà¸²à¸‡à¸£à¸§à¸”เร็ว +- +- +- Search term. +- คำที่ใช้ค้นหา +- +- +- Merge two databases. +- ผสานสองà¸à¸²à¸™à¸‚้อมูลเข้าด้วยà¸à¸±à¸™ +- +- +- Path of the database to merge from. +- เส้นทางของà¸à¸²à¸™à¸‚้อมูลที่จะเอามาผสาน +- +- +- Use the same credentials for both database files. +- ใช้ข้อมูลประจำตัวชุดเดียวà¸à¸±à¸™à¹€à¸žà¸·à¹ˆà¸­à¹€à¸‚้าระบบสำหรับไฟล์à¸à¸²à¸™à¸‚้อมูลทั้งคู่ +- +- +- Key file of the database to merge from. +- ไฟล์à¸à¸¸à¸à¹à¸ˆà¸‚องà¸à¸²à¸™à¸‚้อมูลที่จะเอามาผสาน +- +- +- Show an entry's information. +- à¹à¸ªà¸”งข้อมูลของรายà¸à¸²à¸£ +- +- +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- ชื่อของคุณสมบัติที่จะà¹à¸ªà¸”ง ตัวเลือà¸à¸™à¸µà¹‰à¸ªà¸²à¸¡à¸²à¸£à¸–ถูà¸à¸£à¸°à¸šà¸¸à¹„ด้มาà¸à¸à¸§à¹ˆà¸²à¸«à¸™à¸¶à¹ˆà¸‡à¸„รั้ง โดยคุณสมบัติถูà¸à¹à¸ªà¸”งบรรทัดอันหนึ่งอันตามลำดับ ถ้าไม่มีคุณสมบัติใดถูà¸à¸£à¸°à¸šà¸¸ คุณสมบัติเริ่มต้นจะถูà¸à¹€à¸¥à¸·à¸­à¸à¹à¸—น +- +- +- attribute +- คุณสมบัติ +- +- +- Name of the entry to show. +- ชื่อของรายà¸à¸²à¸£à¸—ี่จะà¹à¸ªà¸”ง +- +- +- NULL device +- อุปà¸à¸£à¸“์ NULL +- +- +- error reading from device +- ข้อผิดพลาดà¸à¸²à¸£à¸­à¹ˆà¸²à¸™à¸ˆà¸²à¸à¸­à¸¸à¸›à¸à¸£à¸“์ +- +- +- malformed string +- รูปà¹à¸šà¸šà¸ªà¸•à¸£à¸´à¸‡à¹„ม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- missing closing quote +- เครื่องหมายปิดคำพูดหายไป +- +- +- Group +- à¸à¸¥à¸¸à¹ˆà¸¡ +- +- +- Title +- หัวข้อ +- +- +- Username +- ชื่อผู้ใช้ +- +- +- Password +- รหัสผ่าน +- +- +- Notes +- บันทึภ+- +- +- Last Modified +- ถูà¸à¹à¸à¹‰à¹„ขล่าสุด +- +- +- Created +- ถูà¸à¸ªà¸£à¹‰à¸²à¸‡ +- +- +- Browser Integration +- à¸à¸²à¸£à¸—ำงานร่วมà¸à¸±à¸šà¹€à¸šà¸£à¸²à¸§à¹Œà¹€à¸‹à¸­à¸£à¹Œ +- +- +- SSH Agent +- ตัวà¹à¸—น SSH +- +- +- Generate a new random diceware passphrase. +- สร้างวลีรหัสผ่าน diceware ใหม่à¹à¸šà¸šà¸ªà¸¸à¹ˆà¸¡ +- +- +- Word count for the diceware passphrase. +- จำนวนคำสำหรับวลีรหัสผ่าน diceware +- +- +- Wordlist for the diceware generator. +-[Default: EFF English] +- รายà¸à¸²à¸£à¸„ำสำหรับà¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡ diceware +-[ค่าเริ่มต้น: EFF ภาษาอังà¸à¸¤à¸©] +- +- +- Generate a new random password. +- สร้างรหัสผ่านใหม่à¹à¸šà¸šà¸ªà¸¸à¹ˆà¸¡ +- +- +- Could not create entry with path %1. +- ไม่สามารถสร้างรายà¸à¸²à¸£à¸”้วยเส้นทาง %1 +- +- +- Enter password for new entry: +- ใส่รหัสผ่านสำหรับรายà¸à¸²à¸£à¹ƒà¸«à¸¡à¹ˆ +- +- +- Writing the database failed %1. +- à¸à¸²à¸£à¹€à¸‚ียนà¸à¸²à¸™à¸‚้อมูลล้มเหลว %1 +- +- +- Successfully added entry %1. +- เพิ่มรายà¸à¸²à¸£ %1 สำเร็จà¹à¸¥à¹‰à¸§ +- +- +- Invalid timeout value %1. +- ค่าหมดเวลาไม่ถูà¸à¸•à¹‰à¸­à¸‡ %1 +- +- +- Entry %1 not found. +- ไม่พบรายà¸à¸²à¸£ %1 +- +- +- Entry with path %1 has no TOTP set up. +- รายà¸à¸²à¸£à¸”้วยเส้นทาง %1 ไม่มีà¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่า TOTP +- +- +- Clearing the clipboard in %1 second(s)... +- ล้างข้อมูลคลิปบอร์ดใน %1 วินาที +- +- +- Clipboard cleared! +- คลิปบอร์ดถูà¸à¸¥à¹‰à¸²à¸‡à¹à¸¥à¹‰à¸§ +- +- +- Silence password prompt and other secondary outputs. +- รหัสผ่านเงียบพร้อมท์à¹à¸¥à¸°à¸œà¸¥à¸¥à¸±à¸žà¸˜à¹Œà¸£à¸­à¸‡à¸­à¸·à¹ˆà¸™ +- +- +- count +- CLI parameter +- à¸à¸²à¸£à¸™à¸±à¸šà¸ˆà¸³à¸™à¸§à¸™ +- +- +- Could not find entry with path %1. +- ไม่สามารถหารายà¸à¸²à¸£à¸ªà¸³à¸«à¸£à¸±à¸šà¹€à¸ªà¹‰à¸™à¸—าง %1 +- +- +- Not changing any field for entry %1. +- ไม่มีà¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸Ÿà¸´à¸¥à¸”์ของรายà¸à¸²à¸£ %1 +- +- +- Enter new password for entry: +- ใส่รหัสผ่านใหม่สำหรับรายà¸à¸²à¸£ +- +- +- Writing the database failed: %1 +- เขียนà¸à¸²à¸™à¸‚้อมูลล้มเหลว %1 +- +- +- Successfully edited entry %1. +- à¹à¸à¹‰à¹„ขรายà¸à¸²à¸£à¸ªà¸³à¹€à¸£à¹‡à¸ˆà¹à¸¥à¹‰à¸§ %1 +- +- +- Length %1 +- ความยาว %1 +- +- +- Entropy %1 +- เอนโทรปี %1 +- +- +- Log10 %1 +- Log10 %1 +- +- +- Multi-word extra bits %1 +- Multi-word บิตมาà¸à¸žà¸´à¹€à¸¨à¸© %1 +- +- +- Type: Bruteforce +- ชนิด บรู๊ทฟอร์ส +- +- +- Type: Dictionary +- ชนิด ไดเรคทอรี +- +- +- Type: Dict+Leet +- ชนิด: พจนานุà¸à¸£à¸¡+ลีท +- +- +- Type: User Words +- ชนิด: User Words +- +- +- Type: User+Leet +- ชนิด: ผู้ใช้+ ลีท +- +- +- Type: Repeated +- ชนิด: คำซ้ำ +- +- +- Type: Sequence +- ชนิด: ลำดับ +- +- +- Type: Spatial +- ชนิด: เชิงพื้นที่ +- +- +- Type: Date +- ชนิด: วันที่ +- +- +- Type: Bruteforce(Rep) +- ชนิด: บรู๊ทฟอร์ส(Rep) +- +- +- Type: Dictionary(Rep) +- พิมพ์: Dictionary(Rep) +- +- +- Type: Dict+Leet(Rep) +- พิมพ์: Dict+Leet(Rep) +- +- +- Type: User Words(Rep) +- พิมพ์: User Words(Rep) +- +- +- Type: User+Leet(Rep) +- พิมพ์: User+Leet(Rep) +- +- +- Type: Repeated(Rep) +- พิมพ์: Repeated(Rep) +- +- +- Type: Sequence(Rep) +- พิมพ์: Sequence(Rep) +- +- +- Type: Spatial(Rep) +- พิมพ์: Spatial(Rep) +- +- +- Type: Date(Rep) +- พิมพ์: Date(Rep) +- +- +- Type: Unknown%1 +- ชนิด: ไม่รู้จัà¸%1 +- +- +- Entropy %1 (%2) +- เอนโทรปี: %1 (%2) +- +- +- *** Password length (%1) != sum of length of parts (%2) *** +- ***รหัสผ่านความยาว (%1) != sum of length of parts (%2) *** +- +- +- Failed to load key file %1: %2 +- à¸à¸²à¸£à¹‚หลดไฟล์à¸à¸¸à¸à¹à¸ˆà¸¥à¹‰à¸¡à¹€à¸«à¸¥à¸§ %1: %2 +- +- +- Length of the generated password +- ความยาวของรหัสผ่านที่สร้างà¹à¸¥à¹‰à¸§ +- +- +- Use lowercase characters +- ใช้ตัวพิมพ์เล็ภ+- +- +- Use uppercase characters +- ใช้ตัวพิมพ์ใหà¸à¹ˆ +- +- +- Use special characters +- ใช้อัà¸à¸‚ระพิเศษ +- +- +- Use extended ASCII +- ใช้ extended ASCII +- +- +- Exclude character set +- ไม่รวมชุดตัวอัà¸à¸©à¸£ +- +- +- chars +- อัà¸à¸‚ระ +- +- +- Exclude similar looking characters +- ไม่รวมตัวอัà¸à¸©à¸£à¸—ี่ดูคล้ายà¸à¸±à¸™ +- +- +- Include characters from every selected group +- รวมตัวอัà¸à¸©à¸£à¸ˆà¸²à¸à¸—ุà¸à¸à¸¥à¸¸à¹ˆà¸¡à¸—ี่เลือà¸à¹„ว้ +- +- +- Recursively list the elements of the group. +- สร้างรายà¸à¸²à¸¢à¸ªà¹ˆà¸§à¸™à¸›à¸£à¸°à¸à¸­à¸šà¸‚องà¸à¸¥à¸¸à¹ˆà¸¡à¸‹à¹‰à¸³à¹„ปมา +- +- +- Cannot find group %1. +- ไม่สามารถหาà¸à¸¥à¸¸à¹ˆà¸¡ %1 +- +- +- Error reading merge file: +-%1 +- à¸à¸²à¸£à¸­à¹ˆà¸²à¸™à¹„ฟล์ที่รวมà¸à¸±à¸™à¸¥à¹‰à¸¡à¹€à¸«à¸¥à¸§à¸„ือ %1 +- +- +- Unable to save database to file : %1 +- ไม่สามารถบันทึà¸à¸à¸²à¸™à¸‚้อมูลไปยังไฟล์คือ %1 +- +- +- Unable to save database to file: %1 +- ไม่สามารถบันทึà¸à¸à¸²à¸™à¸‚้อมูลไปยังไฟล์คือ %1 +- +- +- Successfully recycled entry %1. +- รายà¸à¸²à¸£à¸£à¸µà¹„ซเคิลสำเร็จ %1 +- +- +- Successfully deleted entry %1. +- ลบรายà¸à¸²à¸£à¸ªà¸³à¹€à¸£à¹‡à¸ˆ %1 +- +- +- Show the entry's current TOTP. +- à¹à¸ªà¸”งรายà¸à¸²à¸£ TOTP ปัจจุบัน +- +- +- ERROR: unknown attribute %1. +- ข้อผิดพลาด: ไม่รู้จัà¸à¸„ุณสมบัติ %1 +- +- +- No program defined for clipboard manipulation +- ไม่มีโปรà¹à¸à¸£à¸¡à¸à¸³à¸«à¸™à¸”สำหรับà¸à¸²à¸£à¸ˆà¸±à¸”à¸à¸²à¸£à¸„ลิปบอร์ด +- +- +- file empty +- ไฟล์ว่างเปล่า +- +- +- %1: (row, col) %2,%3 +- %1: (row, col) %2,%3 +- +- +- AES-KDF (KDBX 4) +- AES-KDF (KDBX 4) +- +- +- AES-KDF (KDBX 3.1) +- AES-KDF (KDBX 3.1) +- +- +- Invalid Settings +- TOTP +- à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าไม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Invalid Key +- TOTP +- à¸à¸¸à¸à¹à¸ˆà¹„ม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Message encryption failed. +- à¸à¸²à¸£à¹€à¸‚้ารหัสลับข้อความล้มเหลว +- +- +- No groups found +- ไม่พบà¸à¸¥à¸¸à¹ˆà¸¡ +- +- +- Create a new database. +- สร้างà¸à¸²à¸™à¸‚้อมูลใหม่ +- +- +- File %1 already exists. +- มีไฟล์ %1 อยู่à¹à¸¥à¹‰à¸§ +- +- +- Loading the key file failed +- à¸à¸²à¸£à¹‚หลดไฟล์à¸à¸¸à¸à¹à¸ˆà¸¥à¹‰à¸¡à¹€à¸«à¸¥à¸§ +- +- +- No key is set. Aborting database creation. +- ไม่มีà¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าà¸à¸¸à¸à¹à¸ˆ ยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¸à¸²à¸™à¸‚้อมูล +- +- +- Failed to save the database: %1. +- à¸à¸²à¸£à¸šà¸±à¸™à¸—ึà¸à¸à¸²à¸™à¸‚้อมูลล้มเหลว % 1 +- +- +- Successfully created new database. +- à¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¸à¸²à¸™à¸‚้อมูลใหม่ประสบความสำเร็จ +- +- +- Creating KeyFile %1 failed: %2 +- à¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¸à¸¸à¸à¹à¸ˆà¹„ฟล์ %1 ล้มเหลว: %2 +- +- +- Loading KeyFile %1 failed: %2 +- à¸à¸²à¸£à¹‚หลดà¸à¸¸à¸à¹à¸ˆà¹„ฟล์ % 1 ล้มเหลว:% 2 +- +- +- Path of the entry to remove. +- เส้นทางของรายà¸à¸²à¸£à¸—ี่จะลบ +- +- +- Existing single-instance lock file is invalid. Launching new instance. +- ไฟล์ single-instance lock ที่มีอยู่ไม่ถูà¸à¸•à¹‰à¸­à¸‡ เปิด instance ใหม่ +- +- +- The lock file could not be created. Single-instance mode disabled. +- ไม่สามารถสร้าง lock file ได้ โหมด Single-instance ถูà¸à¸›à¸´à¸”ใช้งาน +- +- +- KeePassXC - cross-platform password manager +- KeePassXC - à¹à¸­à¸›à¸ˆà¸±à¸”à¸à¸²à¸£à¸£à¸«à¸±à¸ªà¸œà¹ˆà¸²à¸™à¸‚้ามà¹à¸žà¸¥à¸•à¸Ÿà¸­à¸£à¹Œà¸¡ +- +- +- filenames of the password databases to open (*.kdbx) +- ชื่อไฟล์ของรหัสผ่านà¸à¸²à¸™à¸‚้อมูลที่จะเปิด (*.kdbx) +- +- +- path to a custom config file +- เส้นทางไปยังไฟล์ปรับà¹à¸•à¹ˆà¸‡à¸—ี่à¸à¸³à¸«à¸™à¸”เอง +- +- +- key file of the database +- à¹à¸Ÿà¹‰à¸¡à¸à¸¸à¸à¹à¸ˆà¸ªà¸³à¸«à¸£à¸±à¸šà¸à¸²à¸™à¸‚้อมูลดังà¸à¸¥à¹ˆà¸²à¸§ +- +- +- read password of the database from stdin +- อ่านรหัสผ่านของà¸à¸²à¸™à¸‚้อมูลจาภstdin +- +- +- Another instance of KeePassXC is already running. +- อีà¸à¸­à¸´à¸™à¸ªà¹à¸•à¸™à¸‹à¹Œà¸‚อง KeePassXC à¸à¸³à¸¥à¸±à¸‡à¸—ำงานอยู่ +- +- +- Fatal error while testing the cryptographic functions. +- เà¸à¸´à¸”ข้อผิดพลาดร้ายà¹à¸£à¸‡à¸‚ณะทดสอบฟังà¸à¹Œà¸Šà¸±à¹ˆà¸™à¸à¸²à¸£à¹€à¸‚้ารหัส +- +- +- KeePassXC - Error +- KeePassXC - ข้อผิดพลาด +- +- +- Database password: +- รหัสผ่านà¸à¸²à¸™à¸‚้อมูล +- +- +- Cannot create new group +- ไม่สามารถสร้างà¸à¸¥à¸¸à¹ˆà¸¡à¹ƒà¸«à¸¡à¹ˆà¹„ด้ +- +- +- Deactivate password key for the database. +- +- +- +- Displays debugging information. +- +- +- +- Deactivate password key for the database to merge from. +- +- +- +- Version %1 +- +- +- +- Build Type: %1 +- ชนิดรุ่นที่สร้าง: %1 +- +- +- Revision: %1 +- à¸à¸²à¸£à¸›à¸£à¸±à¸šà¸›à¸£à¸¸à¸‡: %1 +- +- +- Distribution: %1 +- à¸à¸²à¸£à¸ˆà¸±à¸”จำหน่าย: %1 +- +- +- Debugging mode is disabled. +- +- +- +- Debugging mode is enabled. +- +- +- +- Operating system: %1 +-CPU architecture: %2 +-Kernel: %3 %4 +- ระบบปà¸à¸´à¸šà¸±à¸•à¸´à¸à¸²à¸£: %1 +-สถาปัตยà¸à¸£à¸£à¸¡ CPU: %2 +-เคอร์เนล: %3 %4 +- +- +- Auto-Type +- Auto-Type +- +- +- KeeShare (signed and unsigned sharing) +- +- +- +- KeeShare (only signed sharing) +- +- +- +- KeeShare (only unsigned sharing) +- +- +- +- YubiKey +- +- +- +- TouchID +- +- +- +- None +- ไม่มี +- +- +- Enabled extensions: +- ส่วนขยายที่เปิดใช้: +- +- +- Cryptographic libraries: +- +- +- +- Cannot generate a password and prompt at the same time! +- +- +- +- Adds a new group to a database. +- +- +- +- Path of the group to add. +- +- +- +- Group %1 already exists! +- +- +- +- Group %1 not found. +- +- +- +- Successfully added group %1. +- +- +- +- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. +- +- +- +- FILENAME +- +- +- +- Analyze passwords for weaknesses and problems. +- +- +- +- Failed to open HIBP file %1: %2 +- +- +- +- Evaluating database entries against HIBP file, this will take a while... +- +- +- +- Close the currently opened database. +- +- +- +- Display this help. +- +- +- +- slot +- +- +- +- Invalid word count %1 +- +- +- +- The word list is too small (< 1000 items) +- +- +- +- Exit interactive mode. +- +- +- +- Exports the content of a database to standard output in the specified format. +- +- +- +- Unable to export database to XML: %1 +- +- +- +- Unsupported format %1 +- +- +- +- Use numbers +- +- +- +- Invalid password length %1 +- +- +- +- Display command help. +- +- +- +- Available commands: +- +- +- +- Import the contents of an XML database. +- +- +- +- Path of the XML database export. +- +- +- +- Path of the new database. +- +- +- +- Successfully imported database. +- +- +- +- Unknown command %1 +- +- +- +- Flattens the output to single lines. +- +- +- +- Only print the changes detected by the merge operation. +- +- +- +- Yubikey slot for the second database. +- +- +- +- Successfully merged %1 into %2. +- +- +- +- Database was not modified by merge operation. +- à¸à¸²à¸™à¸‚้อมูลไม่ถูà¸à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¹‚ดยà¸à¸²à¸£à¸”ำเนินà¸à¸²à¸£à¸œà¸ªà¸²à¸™ +- +- +- Moves an entry to a new group. +- +- +- +- Path of the entry to move. +- +- +- +- Path of the destination group. +- +- +- +- Could not find group with path %1. +- +- +- +- Entry is already in group %1. +- +- +- +- Successfully moved entry %1 to group %2. +- +- +- +- Open a database. +- +- +- +- Path of the group to remove. +- +- +- +- Cannot remove root group from database. +- +- +- +- Successfully recycled group %1. +- +- +- +- Successfully deleted group %1. +- +- +- +- Failed to open database file %1: not found +- +- +- +- Failed to open database file %1: not a plain file +- +- +- +- Failed to open database file %1: not readable +- +- +- +- Enter password to unlock %1: +- +- +- +- Invalid YubiKey slot %1 +- +- +- +- Enter password to encrypt database (optional): +- +- +- +- HIBP file, line %1: parse error +- +- +- +- Secret Service Integration +- +- +- +- User name +- +- +- +- Password for '%1' has been leaked %2 time(s)! +- +- +- +- Invalid password generator after applying all options +- +- +- +- Show the protected attributes in clear text. +- +- +- +- Browser Plugin Failure +- โปรà¹à¸à¸£à¸¡à¹€à¸ªà¸£à¸´à¸¡à¹€à¸šà¸£à¸²à¸§à¹Œà¹€à¸‹à¸­à¸£à¹Œà¸¥à¹‰à¸¡à¹€à¸«à¸¥à¸§ +- +- +- Could not save the native messaging script file for %1. +- +- +- +- Copy the given attribute to the clipboard. Defaults to "password" if not specified. +- +- +- +- Copy the current TOTP to the clipboard (equivalent to "-a totp"). +- +- +- +- Copy an entry's attribute to the clipboard. +- +- +- +- ERROR: Please specify one of --attribute or --totp, not both. +- +- +- +- ERROR: attribute %1 is ambiguous, it matches %2. +- +- +- +- Attribute "%1" not found. +- +- +- +- Entry's "%1" attribute copied to the clipboard! +- +- +- +- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). +- +- +- +- slot[:serial] +- +- +- +- Target decryption time in MS for the database. +- +- +- +- time +- +- +- +- Set the key file for the database. +- +- +- +- Set a password for the database. +- +- +- +- Invalid decryption time %1. +- +- +- +- Target decryption time must be between %1 and %2. +- +- +- +- Failed to set database password. +- +- +- +- Benchmarking key derivation function for %1ms delay. +- +- +- +- Setting %1 rounds for key derivation function. +- +- +- +- error while setting database key derivation settings. +- +- +- +- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. +- +- +- +- Unable to import XML database: %1 +- +- +- +- Show a database's information. +- +- +- +- UUID: +- +- +- +- Name: +- +- +- +- Description: +- +- +- +- Cipher: +- +- +- +- KDF: +- +- +- +- Recycle bin is enabled. +- +- +- +- Recycle bin is not enabled. +- +- +- +- Invalid command %1. +- +- +- +- Invalid YubiKey serial %1 +- +- +- +- Please touch the button on your YubiKey to continue… +- +- +- +- Do you want to create a database with an empty password? [y/N]: +- +- +- +- Repeat password: +- +- +- +- Error: Passwords do not match. +- +- +- +- All clipping programs failed. Tried %1 +- +- +- +- +- AES (%1 rounds) +- +- +- +- AES 256-bit +- +- +- +- Twofish 256-bit +- +- +- +- ChaCha20 256-bit +- +- +- +- Benchmark %1 delay +- +- +- +- %1 ms +- milliseconds +- +- +- +- %1 s +- seconds +- +- +- +- path to a custom local config file +- +- +- +- WARNING: You are using an old key file format which KeePassXC may +-stop supporting in the future. +- +-Please consider generating a new key file. +- +- +- +- Argon2%1 (%2 rounds, %3 KB) +- +- +- +- Argon2d (KDBX 4 – recommended) +- +- +- +- Argon2id (KDBX 4) +- +- +- +- TOTP +- TOTP +- +- +- Icon +- ไอคอน +- +- +- Unsupported key file version: %1 +- +- +- +- Checksum mismatch! Key file may be corrupt. +- +- +- +- Unexpected key file data! Key file may be corrupt. +- +- +- +- +- QtIOCompressor +- +- Internal zlib error when compressing: +- เà¸à¸´à¸”ข้อผิดพลาด zlib ภายในในระหว่างà¸à¸²à¸£à¸šà¸µà¸šà¸­à¸±à¸” +- +- +- Error writing to underlying device: +- เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¹€à¸‚ียนไปยังอุปà¸à¸£à¸“์ที่รองรับ +- +- +- Error opening underlying device: +- เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¹€à¸›à¸´à¸”อุปà¸à¸£à¸“์อ้างอิง +- +- +- Error reading data from underlying device: +- เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸­à¹ˆà¸²à¸™à¸­à¸¸à¸›à¸à¸£à¸“์อ้างอิง +- +- +- Internal zlib error when decompressing: +- ข้อผิดพลาด zlib ภายในเมื่อคลายà¸à¸²à¸£à¸šà¸µà¸šà¸­à¸±à¸” +- +- +- +- QtIOCompressor::open +- +- The gzip format not supported in this version of zlib. +- รูปà¹à¸šà¸š gzip ไม่รองรับ zlib เวอร์ชั่นนี้ +- +- +- Internal zlib error: +- ความผิดพลาดภายในของ zlib +- +- +- +- ReportsWidgetHealthcheck +- +- Also show entries that have been excluded from reports +- +- +- +- Hover over reason to show additional details. Double-click entries to edit. +- +- +- +- Bad +- Password quality +- +- +- +- Bad — password must be changed +- +- +- +- Poor +- Password quality +- à¹à¸¢à¹ˆ +- +- +- Poor — password should be changed +- +- +- +- Weak +- Password quality +- อ่อนà¹à¸­ +- +- +- Weak — consider changing the password +- +- +- +- (Excluded) +- +- +- +- This entry is being excluded from reports +- +- +- +- Please wait, health data is being calculated... +- +- +- +- Congratulations, everything is healthy! +- +- +- +- Title +- หัวข้อ +- +- +- Path +- เส้นทาง +- +- +- Score +- +- +- +- Reason +- +- +- +- Edit Entry... +- +- +- +- Exclude from reports +- +- +- +- +- ReportsWidgetHibp +- +- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. +- +- +- +- Perform Online Analysis +- +- +- +- Also show entries that have been excluded from reports +- +- +- +- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. +- +- +- +- Congratulations, no exposed passwords! +- +- +- +- Title +- หัวข้อ +- +- +- Path +- เส้นทาง +- +- +- Password exposed… +- +- +- +- (Excluded) +- +- +- +- This entry is being excluded from reports +- +- +- +- once +- +- +- +- up to 10 times +- +- +- +- up to 100 times +- +- +- +- up to 1000 times +- +- +- +- up to 10,000 times +- +- +- +- up to 100,000 times +- +- +- +- up to a million times +- +- +- +- millions of times +- +- +- +- Edit Entry... +- +- +- +- Exclude from reports +- +- +- +- +- ReportsWidgetStatistics +- +- Hover over lines with error icons for further information. +- +- +- +- Name +- ชื่อ +- +- +- Value +- ค่า +- +- +- Please wait, database statistics are being calculated... +- +- +- +- Database name +- ชื่อà¸à¸²à¸™à¸‚้อมูล +- +- +- Description +- คำอธิบาย +- +- +- Location +- ที่ตั้ง +- +- +- Last saved +- บันทึà¸à¸„รั้งสุดท้าย +- +- +- Unsaved changes +- ความเปลี่ยนà¹à¸›à¸¥à¸‡à¸—ี่ยังไม่ได้บันทึภ+- +- +- yes +- ใช่ +- +- +- no +- ไม่ +- +- +- The database was modified, but the changes have not yet been saved to disk. +- +- +- +- Number of groups +- จำนวนà¸à¸¥à¸¸à¹ˆà¸¡ +- +- +- Number of entries +- จำนวนรายà¸à¸²à¸£ +- +- +- Number of expired entries +- จำนวนรายà¸à¸²à¸£à¸—ี่หมดอายุ +- +- +- The database contains entries that have expired. +- à¸à¸²à¸™à¸‚้อมูลมีรายà¸à¸²à¸£à¸—ี่หมดอายุà¹à¸¥à¹‰à¸§ +- +- +- Unique passwords +- รหัสผ่านที่ไม่ซ้ำ +- +- +- Non-unique passwords +- รหัสผ่านที่ซ้ำ +- +- +- More than 10% of passwords are reused. Use unique passwords when possible. +- มาà¸à¸à¸§à¹ˆà¸² 10% ของรหัสผ่านถูà¸à¹ƒà¸Šà¹‰à¸‹à¹‰à¸³ ควรใช้รหัสผ่านที่ไม่ซ้ำถ้าทำได้ +- +- +- Maximum password reuse +- +- +- +- Some passwords are used more than three times. Use unique passwords when possible. +- +- +- +- Number of short passwords +- +- +- +- Recommended minimum password length is at least 8 characters. +- +- +- +- Number of weak passwords +- +- +- +- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. +- +- +- +- Entries excluded from reports +- +- +- +- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. +- +- +- +- Average password length +- +- +- +- %1 characters +- %1 ตัวอัà¸à¸©à¸£ +- +- +- Average password length is less than ten characters. Longer passwords provide more security. +- +- +- +- +- SSHAgent +- +- Agent connection failed. +- à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­à¸•à¸±à¸§à¹à¸—นล้มเหลว +- +- +- Agent protocol error. +- ตัวà¹à¸—นโพรโทคอลผิดพลาด +- +- +- No agent running, cannot add identity. +- ไม่มีà¸à¸²à¸£à¹€à¸£à¸µà¸¢à¸à¹ƒà¸Šà¹‰à¸•à¸±à¸§à¹à¸—น ไม่สามารถเพิ่มตัวตน +- +- +- No agent running, cannot remove identity. +- ไม่มีà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸•à¸±à¸§à¹à¸—น ไม่สามารถลบตัวตน +- +- +- Agent refused this identity. Possible reasons include: +- ตัวà¹à¸—นปà¸à¸´à¹€à¸ªà¸˜à¸•à¸±à¸§à¸•à¸™à¸™à¸µà¹‰ เหตุผลที่เป็นไปได้คือ +- +- +- The key has already been added. +- เพิ่มà¸à¸¸à¸à¹à¸ˆà¹à¸¥à¹‰à¸§ +- +- +- Restricted lifetime is not supported by the agent (check options). +- ไม่รับรองอายุà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸—ี่จำà¸à¸±à¸”โดยตัวà¹à¸—น ตรวจสอบตัวเลือภ+- +- +- A confirmation request is not supported by the agent (check options). +- ไม่รองรับà¸à¸²à¸£à¸¢à¸·à¸™à¸¢à¸±à¸™à¸„ำร้องโดยตัวà¹à¸—น ตรวจสอบตัวเลือภ+- +- +- Key identity ownership conflict. Refusing to add. +- +- +- +- No agent running, cannot list identities. +- +- +- +- +- SearchHelpWidget +- +- Search Help +- ตัวช่วยค้นหา +- +- +- Search terms are as follows: [modifiers][field:]["]term["] +- คำค้นมีดังนี้: [modifiers][field:]["]term["] +- +- +- Every search term must match (ie, logical AND) +- คำค้นทุà¸à¸„ำต้องสอดคล้อง เช่น โลจิคัล AND +- +- +- Modifiers +- ตัวà¹à¸à¹‰à¹„ข +- +- +- exclude term from results +- à¹à¸¢à¸à¸„ำออà¸à¸ˆà¸²à¸à¸œà¸¥à¸¥à¸±à¸žà¸˜à¹Œ +- +- +- match term exactly +- à¸à¸²à¸£à¸ˆà¸±à¸šà¸„ู่คำสอดคล้องà¸à¸±à¸™ +- +- +- use regex in term +- ใช้ regex ในคำ +- +- +- Fields +- ฟิลด์ +- +- +- Term Wildcards +- อัà¸à¸‚ระตัวà¹à¸—นคำ +- +- +- match anything +- จับคู่ทุà¸à¹†à¸­à¸¢à¹ˆà¸²à¸‡ +- +- +- match one +- จับคู่หนึ่ง +- +- +- logical OR +- โลจิคัล OR +- +- +- Examples +- ตัวอย่าง +- +- +- +- SearchWidget +- +- Search +- ค้นหา +- +- +- Limit search to selected group +- จำà¸à¸±à¸”à¸à¸²à¸£à¸„้นไว้สำหรับเฉพาะà¸à¸¥à¸¸à¹ˆà¸¡à¸—ี่เลือภ+- +- +- Search Help +- ตัวช่วยค้นหา +- +- +- Search (%1)... +- Search placeholder text, %1 is the keyboard shortcut +- ค้นหา %1 +- +- +- Case sensitive +- คำนึงถึงอัà¸à¸©à¸£à¸—ั้งตัวใหà¸à¹ˆà¹à¸¥à¸°à¹€à¸¥à¹‡à¸ +- +- +- +- SettingsWidgetFdoSecrets +- +- Options +- ตัวเลือภ+- +- +- Enable KeepassXC Freedesktop.org Secret Service integration +- +- +- +- General +- ทั่วไป +- +- +- Show notification when credentials are requested +- +- +- +- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> +- +- +- +- Exposed database groups: +- +- +- +- Authorization +- ตรวจยืนยันสิทธิ์ +- +- +- These applications are currently connected: +- +- +- +- Don't confirm when entries are deleted by clients +- +- +- +- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. +- +- +- +- <b>Warning:</b> +- +- +- +- Save current changes to activate the plugin and enable editing of this section. +- +- +- +- +- SettingsWidgetKeeShare +- +- Active +- ใช้งานอยู่ +- +- +- Allow export +- อนุà¸à¸²à¸•à¸´à¹ƒà¸«à¹‰à¸™à¸³à¸­à¸­à¸ +- +- +- Allow import +- อนุà¸à¸²à¸•à¸´à¹ƒà¸«à¹‰à¸™à¸³à¹€à¸‚้า +- +- +- Own certificate +- เป็นเจ้าของใบรับรอง +- +- +- Fingerprint: +- ลายนิ้วมือ +- +- +- Certificate: +- ใบรับรอง +- +- +- Signer +- ผู้เซ็นชื่อ +- +- +- Key: +- à¸à¸¸à¸à¹à¸ˆ +- +- +- Generate +- สร้าง +- +- +- Import +- นำเข้า +- +- +- Export +- นำออภ+- +- +- Imported certificates +- นำเข้าใบรับรองà¹à¸¥à¹‰à¸§ +- +- +- Trust +- น่าเชื่อถือ +- +- +- Ask +- ถาม +- +- +- Untrust +- ไม่น่าเชื่อถือ +- +- +- Remove +- นำออภ+- +- +- Path +- เส้นทาง +- +- +- Status +- สถานะ +- +- +- Fingerprint +- ลายนิ้วมือ +- +- +- Certificate +- ใบรับรอง +- +- +- Trusted +- เชื่อถือได้ +- +- +- Untrusted +- เชื่อถือไม่ได้ +- +- +- Unknown +- ไม่รู้จัภ+- +- +- key.share +- Filetype for KeeShare key +- à¹à¸šà¹ˆà¸‡à¸›à¸±à¸™à¸à¸¸à¸à¹à¸ˆ +- +- +- KeeShare key file +- à¹à¸Ÿà¹‰à¸¡à¸à¸¸à¸à¹à¸ˆ KeeShare หลัภ+- +- +- All files +- ทุà¸à¹„ฟล์ +- +- +- Select path +- เลือà¸à¹€à¸ªà¹‰à¸™à¸—าง +- +- +- Exporting changed certificate +- นำออà¸à¹ƒà¸šà¸£à¸±à¸šà¸£à¸­à¸‡à¸—ี่เปลี่ยนà¹à¸›à¸¥à¸‡à¹à¸¥à¹‰à¸§ +- +- +- The exported certificate is not the same as the one in use. Do you want to export the current certificate? +- ใบรับรองที่นำออà¸à¹à¸¥à¹‰à¸§à¹„ม่ใช่ฉบับเดียวà¸à¸±à¸šà¸—ี่ใช้งานอยู่ คุณต้องà¸à¸²à¸£à¸™à¸³à¹ƒà¸šà¸£à¸±à¸šà¸£à¸­à¸‡à¸›à¸±à¸ˆà¸ˆà¸¸à¸šà¸±à¸™à¸­à¸­à¸à¸«à¸£à¸·à¸­à¹„ม่ +- +- +- Signer: +- ผู้ลงชื่อ +- +- +- Allow KeeShare imports +- อนุà¸à¸²à¸•à¸à¸²à¸£à¸™à¸³à¹€à¸‚้า KeeShare +- +- +- Allow KeeShare exports +- อนุà¸à¸²à¸•à¸à¸²à¸£à¸ªà¹ˆà¸‡à¸­à¸­à¸ KeeShare +- +- +- Only show warnings and errors +- +- +- +- Key +- à¸à¸¸à¸à¹à¸ˆ +- +- +- Signer name field +- +- +- +- Generate new certificate +- +- +- +- Import existing certificate +- +- +- +- Export own certificate +- +- +- +- Known shares +- +- +- +- Trust selected certificate +- +- +- +- Ask whether to trust the selected certificate every time +- +- +- +- Untrust selected certificate +- +- +- +- Remove selected certificate +- +- +- +- +- ShareExport +- +- Overwriting signed share container is not supported - export prevented +- ไม่สามารถเขียนทับที่จัดเà¸à¹‡à¸š ที่à¹à¸šà¹ˆà¸‡à¸›à¸±à¸™à¹„ว้ à¹à¸¥à¸°à¹€à¸‹à¹‡à¸™à¹à¸¥à¹‰à¸§- ไม่อนุà¸à¸²à¸•à¸à¸²à¸£à¸™à¸³à¸­à¸­à¸ +- +- +- Could not write export container (%1) +- ไม่สามารถเขียนที่จัดเà¸à¹‡à¸šà¸—ี่ส่งออà¸à¹„ด้ (%1) +- +- +- Could not embed signature: Could not open file to write (%1) +- ไม่สามารถà¸à¸±à¸‡à¸¥à¸²à¸¢à¹€à¸‹à¹‡à¸™ ไม่สามารถเปิดไฟล์เพือเขียน (%1) +- +- +- Could not embed signature: Could not write file (%1) +- ไม่สามารถà¸à¸±à¸‡à¸¥à¸²à¸¢à¹€à¸‹à¹‡à¸™ ไม่สามารถเขียนไฟล์ (%1) +- +- +- Could not embed database: Could not open file to write (%1) +- ไม่สามารถà¸à¸±à¸‡à¸à¸²à¸™à¸‚้อมูล ไม่สามารถเปิดไฟล์เพื่อทำà¸à¸²à¸£à¹€à¸‚ียน (%1) +- +- +- Could not embed database: Could not write file (%1) +- ไม่สามารถà¸à¸±à¸‡à¸à¸²à¸™à¸‚้อมูล ไม่สามารถเขียนไฟล์ได้ (%1) +- +- +- Overwriting unsigned share container is not supported - export prevented +- ไม่รองรับà¸à¸²à¸£à¹€à¸‚ียนทับà¸à¸²à¸£à¹à¸Šà¸£à¹Œà¸—ี่จัดเà¸à¹‡à¸šà¸—ี่ไม่ได้ลงชื่อ - ป้องà¸à¸±à¸™à¸à¸²à¸£à¸ªà¹ˆà¸‡à¸­à¸­à¸ +- +- +- Could not write export container +- ไม่สามารถนำออà¸à¸—ี่จัดเà¸à¹‡à¸šà¹„ด้ +- +- +- Unexpected export error occurred +- เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸ªà¹ˆà¸‡à¸­à¸­à¸à¸—ี่ไม่คาดคิด +- +- +- +- ShareImport +- +- Import from container without signature +- นำเข้าจาà¸à¸—ี่จัดเà¸à¹‡à¸šà¹‚ดยไม่มีลายเซ็น +- +- +- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? +- เราไม่สามารถยืนยันความถูà¸à¸•à¹‰à¸­à¸‡à¸‚องà¸à¸²à¸™à¸‚้อมูลในที่จัดเà¸à¹‡à¸šà¸—ี่à¹à¸šà¹ˆà¸‡à¸›à¸±à¸™à¹„ว้ เพราะไม่ถูà¸à¹€à¸‹à¹‡à¸™ คุณต้องà¸à¸²à¸£à¸™à¸³à¹€à¸‚้าจาภ%1 จริงๆหรือไม่ +- +- +- Import from container with certificate +- นำเข้าที่จัดเà¸à¹‡à¸šà¸”้วยใบรับรอง +- +- +- Do you want to trust %1 with the fingerprint of %2 from %3? +- คุณเชื่อถือ %1 à¸à¸²à¸£à¸žà¸´à¸¡à¸žà¹Œà¸¥à¸²à¸¢à¸™à¸´à¹‰à¸§à¸¡à¸·à¸­ %2 จาà¸%3? {1 ?} {2 ?} +- +- +- Not this time +- ไม่ใช่เวลานี้ +- +- +- Never +- ไม่เคย +- +- +- Always +- เสมอ +- +- +- Just this time +- เวลานี้ +- +- +- Signed share container are not supported - import prevented +- ไม่รองรับที่จัดเà¸à¹‡à¸šà¹à¸šà¹ˆà¸‡à¸›à¸±à¸™à¸—ี่เซ็นไว้ - ไม่อนุà¸à¸²à¸•à¸à¸²à¸£à¸™à¸³à¹€à¸‚้า +- +- +- File is not readable +- ไฟล์ไม่สามารถอ่านได้ +- +- +- Invalid sharing container +- ที่จัดเà¸à¹‡à¸šà¸—ี่à¹à¸Šà¸£à¹Œà¹„ม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- Untrusted import prevented +- à¸à¸²à¸£à¸™à¸³à¹€à¸‚้าไม่น่าเชื่อถือ +- +- +- Successful signed import +- à¸à¸²à¸£à¸™à¸³à¹€à¸‚้าลายเซ็นสำเร็จ +- +- +- Unsigned share container are not supported - import prevented +- ไม่รองรับที่จัดเà¸à¹‡à¸šà¹à¸šà¹ˆà¸‡à¸›à¸±à¸™à¸—ี่ไม่ได้เซ็นไว้ -ไม่อนุà¸à¸²à¸•à¸à¸²à¸£à¸™à¸³à¹€à¸‚้า +- +- +- Successful unsigned import +- à¸à¸²à¸£à¸™à¸³à¹€à¸‚้าลายเซ็นสำเร็จ +- +- +- File does not exist +- ไม่มีไฟล์ +- +- +- Unknown share container type +- à¸à¸²à¸£à¹à¸šà¹ˆà¸‡à¸›à¸±à¸™à¸—ี่จัดเà¸à¹‡à¸šà¸ˆà¸²à¸à¹à¸«à¸¥à¹ˆà¸‡à¸—ี่ไม่รู้จัภ+- +- +- +- ShareObserver +- +- Import from %1 failed (%2) +- นำเข้า 1% ล้มเหลว 2% +- +- +- Import from %1 successful (%2) +- นำเข้าจาภ1% สำเร็จ 2% +- +- +- Imported from %1 +- นำเข้า จาภ1% +- +- +- Export to %1 failed (%2) +- à¸à¸²à¸£à¸ªà¹ˆà¸‡à¸­à¸­à¸ %1 ไม่สำเร็จ (%2) +- +- +- Export to %1 successful (%2) +- à¸à¸²à¸£à¸™à¸³à¸­à¸­à¸ %1 สำเร็จ (%2) +- +- +- Export to %1 +- นำออภ%1 +- +- +- Multiple import source path to %1 in %2 +- นำเข้าจาà¸à¹à¸«à¸¥à¹ˆà¸‡à¸žà¸²à¸—หลายà¹à¸«à¹ˆà¸‡à¹„ปยัง %1 ใน %2 +- +- +- Conflicting export target path %1 in %2 +- à¸à¸²à¸£à¸™à¸³à¹€à¸›à¹‰à¸²à¸«à¸¡à¸²à¸¢à¸žà¸²à¸—ออà¸à¸‚ัดà¹à¸¢à¹‰à¸‡à¸à¸±à¸™ %1 ใน %2 +- +- +- +- TotpDialog +- +- Timed Password +- รหัสผ่านà¸à¸³à¸«à¸™à¸”เวลา +- +- +- 000000 +- 000000 +- +- +- Copy +- คัดลอภ+- +- +- Expires in <b>%n</b> second(s) +- หมดอายุภายใน <b>%n</b> วินาที +- +- +- +- TotpExportSettingsDialog +- +- Copy +- คัดลอภ+- +- +- NOTE: These TOTP settings are custom and may not work with other authenticators. +- TOTP QR code dialog warning +- บันทึภà¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่า TOTP เป็นà¹à¸šà¸šà¸à¸³à¸«à¸™à¸”เอง อาจไม่สามารถใช้งานà¸à¸±à¸šà¸•à¸±à¸§à¸£à¸±à¸šà¸£à¸­à¸‡à¸„วามถูà¸à¸•à¹‰à¸­à¸‡à¸­à¸·à¹ˆà¸™à¹† +- +- +- There was an error creating the QR code. +- มีข้อผิดพลาดในà¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡ QR code +- +- +- Closing in %1 seconds. +- à¸à¸³à¸¥à¸±à¸‡à¸›à¸´à¸”ภายใน %1 วินาที +- +- +- +- TotpSetupDialog +- +- Setup TOTP +- ติดตั้ง TOTP +- +- +- Default RFC 6238 token settings +- à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าโทเค็น RFC 6238 ตั้งต้น +- +- +- Steam token settings +- à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าสตีมโทเค็น +- +- +- Use custom settings +- ใช้à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าที่à¸à¸³à¸«à¸™à¸”เอง +- +- +- Custom Settings +- à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าà¹à¸šà¸šà¸›à¸£à¸±à¸šà¹à¸•à¹ˆà¸‡à¹€à¸­à¸‡ +- +- +- Time step: +- ขั้นเวลา +- +- +- sec +- Seconds +- วินาที +- +- +- Code size: +- ขนาดรหัส +- +- +- Secret Key: +- à¸à¸¸à¸à¹à¸ˆà¸¥à¸±à¸š: +- +- +- Secret key must be in Base32 format +- +- +- +- Secret key field +- +- +- +- Algorithm: +- อัลà¸à¸­à¸£à¸´à¸—ึม: +- +- +- Time step field +- +- +- +- digits +- หลัภ+- +- +- Invalid TOTP Secret +- +- +- +- You have entered an invalid secret key. The key must be in Base32 format. +-Example: JBSWY3DPEHPK3PXP +- +- +- +- Confirm Remove TOTP Settings +- +- +- +- Are you sure you want to delete TOTP settings for this entry? +- +- +- +- +- URLEdit +- +- Invalid URL +- +- +- +- +- UpdateCheckDialog +- +- Checking for updates +- ตรวจสอบà¸à¸²à¸£à¸­à¸±à¸›à¹€à¸”ท +- +- +- Checking for updates... +- ตรวจสอบà¸à¸²à¸£à¸­à¸±à¸›à¹€à¸”ท... +- +- +- Close +- ปิด +- +- +- Update Error! +- à¸à¸²à¸£à¸­à¸±à¸›à¹€à¸”ทผิดพลาด +- +- +- An error occurred in retrieving update information. +- ข้อผิดพลาดที่เà¸à¸´à¸”ขึ้นในà¸à¸²à¸£à¸­à¸±à¸›à¹€à¸”ตเรียà¸à¹ƒà¸Šà¹‰à¸‚้อมูล +- +- +- Please try again later. +- à¸à¸£à¸¸à¸“าลองอีà¸à¸„รั้งภายหลัง +- +- +- Software Update +- อัปเดทซอฟต์à¹à¸§à¸£à¹Œ +- +- +- A new version of KeePassXC is available! +- KeePassXC เวอร์ชั่นใหม่พร้อมใช้à¹à¸¥à¹‰à¸§ +- +- +- KeePassXC %1 is now available — you have %2. +- KeePassXC %1 มีให้ใช้à¹à¸¥à¹‰à¸§ — คุณมี %2 +- +- +- Download it at keepassxc.org +- ดาวน์โหลดได้ที่ keepassxc.org +- +- +- You're up-to-date! +- คุณอัปเดตà¹à¸¥à¹‰à¸§ +- +- +- KeePassXC %1 is currently the newest version available +- KeePassXC %1 เป็นรุ่นใหม่ล่าสุดที่พร้อมใช้งานà¹à¸¥à¹‰à¸§ +- +- +- +- WelcomeWidget +- +- Start storing your passwords securely in a KeePassXC database +- เริ่มเà¸à¹‡à¸šà¸£à¸«à¸±à¸ªà¸œà¹ˆà¸²à¸™à¸‚องคุณให้ปลอดภัยในà¸à¸²à¸™à¸‚้อมูลของ KeePassXC +- +- +- Create new database +- สร้างà¸à¸²à¸™à¸‚้อมูลใหม่ +- +- +- Open existing database +- เปิดà¸à¸²à¸™à¸‚้อมูลที่มีอยู่ +- +- +- Import from KeePass 1 +- นำเข้าจาภKeePass 1 +- +- +- Import from CSV +- นำเข้าจาภCSV +- +- +- Recent databases +- à¸à¸²à¸™à¸‚้อมูลที่เพิ่งใช้ +- +- +- Welcome to KeePassXC %1 +- ยินดีต้อนรับสู่ KeePassXC %1 +- +- +- Import from 1Password +- นำเข้าจาภ1Password +- +- +- Open a recent database +- เปิดà¸à¸²à¸™à¸‚้อมูลล่าสุด +- +- +- +- YubiKey +- +- %1 [%2] Configured Slot - %3 +- +- +- +- %1 [%2] Challenge Response - Slot %3 - %4 +- +- +- +- Press +- à¸à¸” +- +- +- Passive +- à¹à¸žà¸ªà¸‹à¸µà¸Ÿ +- +- +- %1 Invalid slot specified - %2 +- +- +- +- The YubiKey interface has not been initialized. +- +- +- +- Hardware key is currently in use. +- +- +- +- Could not find hardware key with serial number %1. Please plug it in to continue. +- +- +- +- Hardware key timed out waiting for user interaction. +- +- +- +- A USB error ocurred when accessing the hardware key: %1 +- +- +- +- Failed to complete a challenge-response, the specific error was: %1 +- +- +- +- +- YubiKeyEditWidget +- +- Refresh +- เรียà¸à¹ƒà¸«à¸¡à¹ˆ +- +- +- YubiKey Challenge-Response +- YubiKey ตอบà¸à¸¥à¸±à¸šà¸à¸²à¸£à¸•à¸£à¸§à¸ˆà¸ªà¸­à¸šà¹„ม่ถูà¸à¸•à¹‰à¸­à¸‡ +- +- +- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- <p>หาà¸à¸„ุณเป็นเจ้าของ<a href="https://www.yubico.com/">YubiKey</a>คุณสามารถใช้มันสำหรับความปลอดภัยเพิ่มเติมได้</p><p>YubiKeyจำเป็นต้องใช้ช่องว่างเพื่อลงโปรà¹à¸à¸£à¸¡à¹€à¸›à¹‡à¸™<a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a></p> +- +- +- Refresh hardware tokens +- +- +- +- Hardware key slot selection +- +- +- +- Could not find any hardware keys! +- +- +- +- Selected hardware key slot does not support challenge-response! +- +- +- +- Detecting hardware keys… +- +- +- +- No hardware keys detected +- +- +- +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_tr.ts keepassxc-2.6.4-patched/share/translations/keepassx_tr.ts +--- keepassxc-2.6.4-orig/share/translations/keepassx_tr.ts 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/translations/keepassx_tr.ts 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7893 +0,0 @@ +- +- +- AboutDialog +- +- About KeePassXC +- KeePassXC Hakkında +- +- +- About +- Hakkında +- +- +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- Hataları bildir: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- +- +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- KeePassXC GNU Genel Kamu Lisansı (GPL) sürüm 2 veya (isteÄŸinize göre) sürüm 3 ÅŸartları altında dağıtılmıştır. +- +- +- Contributors +- Katkıcılar +- +- +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Katkıları GitHub'da Gör</a> +- +- +- Debug Info +- Hata Ayıklama Bilgisi +- +- +- Include the following information whenever you report a bug: +- Bir hata bildirirken ÅŸu bilgileri ekleyin: +- +- +- Copy to clipboard +- Panoya kopyala +- +- +- Project Maintainers: +- Proje Sahipleri: +- +- +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- KeePassXC ekibinden özel teÅŸekkürler, özgün KeePassX'i yaptığı için debfx'e gider. +- +- +- +- AgentSettingsWidget +- +- Use OpenSSH for Windows instead of Pageant +- Pageant yerine Windows için OpenSSH kullan +- +- +- Enable SSH Agent integration +- SSH Ä°stemci bütünleÅŸmesini etkinleÅŸtir +- +- +- SSH_AUTH_SOCK value +- SSH_AUTH_SOCK deÄŸeri +- +- +- SSH_AUTH_SOCK override +- SSH_AUTH_SOCK yeni deÄŸer +- +- +- (empty) +- (boÅŸ) +- +- +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- Hiç bir SSH Vekili kullanılabilir deÄŸil. SSH_AUTH_SOCK ortam deÄŸiÅŸkeninin var olduÄŸundan emin olun veya yeni deÄŸer girin. +- +- +- SSH Agent connection is working! +- SSH Ä°stemci baÄŸlantısı çalışıyor! +- +- +- +- ApplicationSettingsWidget +- +- Application Settings +- Uygulama Ayarları +- +- +- General +- Genel +- +- +- Security +- Güvenlik +- +- +- Access error for config file %1 +- Yapılandırma dosyası eriÅŸim hatası %1 +- +- +- Icon only +- Sadece simge +- +- +- Text only +- Sadece yazı +- +- +- Text beside icon +- Simge yanında yazı +- +- +- Text under icon +- Simge altında yazı +- +- +- Follow style +- Takip tipi +- +- +- Reset Settings? +- Ayarları Sıfırla? +- +- +- Are you sure you want to reset all general and security settings to default? +- Tüm genel ayarları ve güvenlik ayarlarını varsayılan ayarlara getirmek istediÄŸinizden emin misiniz? +- +- +- Monochrome (light) +- Tek renkli (açık) +- +- +- Monochrome (dark) +- Tek renkli (koyu) +- +- +- Colorful +- Renkli +- +- +- You must restart the application to set the new language. Would you like to restart now? +- Yeni dili ayarlamak için uygulamayı yeniden baÅŸlatmalısınız. Åžimdi yeniden baÅŸlamak ister misin? +- +- +- +- ApplicationSettingsWidgetGeneral +- +- Basic Settings +- Temel Ayarlar +- +- +- Startup +- BaÅŸlangıç +- +- +- Start only a single instance of KeePassXC +- KeePassXC 'nin yalnızca tek bir örneÄŸini baÅŸlat +- +- +- Minimize window at application startup +- Uygulama baÅŸlangıcında pencereyi simge durumuna küçült +- +- +- File Management +- Dosya Yönetimi +- +- +- Backup database file before saving +- Kaydetmeden önce veritabanı dosyasını yedekle +- +- +- Automatically save after every change +- Her deÄŸiÅŸiklik sonrası otomatik kaydet +- +- +- Automatically reload the database when modified externally +- Harici olarak deÄŸiÅŸtirildiÄŸinde veritabanını otomatik olarak yeniden yükle +- +- +- Entry Management +- Girdi Yönetimi +- +- +- Use group icon on entry creation +- Girdi oluÅŸturmada küme simgesini kullan +- +- +- Minimize instead of app exit +- Uygulamadan çıkmak yerine simge durumuna küçült +- +- +- Show a system tray icon +- Sistem tepsisi simgesi göster +- +- +- Hide window to system tray when minimized +- Simge durumuna küçültüldüğünde pencereyi sistem tepsisine gizle +- +- +- Auto-Type +- Otomatik Yazım +- +- +- Use entry title to match windows for global Auto-Type +- Genel Otomatik Yazım için pencereleri karşılaÅŸtırmada girdi baÅŸlığını kullan +- +- +- Use entry URL to match windows for global Auto-Type +- Genel Otomatik Yazım için pencereleri karşılaÅŸtırmada girdi URL'sini kullan +- +- +- Always ask before performing Auto-Type +- Otomatik Yazım gerçekleÅŸtirmeden önce her zaman sor +- +- +- ms +- Milliseconds +- ms +- +- +- Movable toolbar +- Hareketli araç çubuÄŸu +- +- +- Remember previously used databases +- Daha önce kullanılan veritabanlarını hatırla +- +- +- Load previously open databases on startup +- BaÅŸlangıçta önceden açılmış veritabanlarını yükle +- +- +- Remember database key files and security dongles +- Veritabanı anahtar dosyalarını ve güvenlik donanımlarını hatırla +- +- +- Check for updates at application startup once per week +- Uygulama baÅŸlangıcında güncellemeleri haftada bir kontrol et +- +- +- Include beta releases when checking for updates +- Güncellemeleri kontrol ederken beta sürümleri dahil et +- +- +- Language: +- Dil: +- +- +- (restart program to activate) +- (etkinleÅŸtirmek için programı yeniden baÅŸlat) +- +- +- Minimize window after unlocking database +- Veritabanı kilidini açınca pencereyi simge durumuna küçült +- +- +- Minimize when opening a URL +- URL açarken simge durumuna küçült +- +- +- Hide window when copying to clipboard +- Panoya kopyalarken pencereyi gizle +- +- +- Minimize +- Küçült +- +- +- Drop to background +- Arkaplana sürükle +- +- +- Favicon download timeout: +- Site simgesi indirme zaman aşımı: +- +- +- Website icon download timeout in seconds +- Web sitesi simge indirme zaman aşımı süresi +- +- +- sec +- Seconds +- sn +- +- +- Toolbar button style +- Araç çubuÄŸu düğme tipi +- +- +- Language selection +- Dil seçimi +- +- +- Global auto-type shortcut +- Genel otomatik yazım kısayolu +- +- +- Auto-type character typing delay milliseconds +- Otomatik yazım karakter yazma gecikmesi milisaniye +- +- +- Auto-type start delay milliseconds +- Otomatik yazım baÅŸlangıç gecikmesi milisaniye +- +- +- Automatically launch KeePassXC at system startup +- Sistem baÅŸlangıcında KeePassXC'yi otomatik olarak baÅŸlat +- +- +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- Veritabanı dosyalarını güvenle kaydet (Dropbox, vb. Ä°le ilgili sorun olursa devre dışı bırak) +- +- +- User Interface +- Kullanıcı Arayüzü +- +- +- Toolbar button style: +- Araç çubuÄŸu düğme tipi: +- +- +- Use monospaced font for notes +- Notlar için tek aralıklı yazı tipi kullan +- +- +- Tray icon type: +- Tepsi simgesi türü: +- +- +- Reset settings to default… +- Ayarları varsayılanlara sıfırla… +- +- +- Auto-Type typing delay: +- Otomatik Yazım yazma gecikmesi: +- +- +- Global Auto-Type shortcut: +- Genel Otomatik Yazım kısayolu: +- +- +- Auto-Type start delay: +- Otomatik Yazım baÅŸlangıç gecikmesi: +- +- +- Automatically save when locking database +- Veritabanını kilitlerken otomatik kaydet +- +- +- Automatically save non-data changes when locking database +- Veritabanını kilitlerken veri dışı deÄŸiÅŸiklikleri otomatik olarak kaydet +- +- +- Tray icon type +- Tepsi simgesi türü +- +- +- +- ApplicationSettingsWidgetSecurity +- +- Timeouts +- Zaman Aşımları +- +- +- Clear clipboard after +- Sonrasında panoyu temizle +- +- +- sec +- Seconds +- san +- +- +- Lock databases after inactivity of +- EtkinliÄŸini kaybettikten sonra veritabanlarını kilitle +- +- +- min +- dak +- +- +- Forget TouchID after inactivity of +- Etkin olmadığında TouchID'yi unut +- +- +- Convenience +- ElveriÅŸlilik +- +- +- Lock databases when session is locked or lid is closed +- Oturum kilitlendiÄŸinde veya kapak kapandığında veritabanlarını kilitle +- +- +- Forget TouchID when session is locked or lid is closed +- Oturum kilitlendiÄŸinde veya kapak kapatıldığında TouchID'yi unut +- +- +- Lock databases after minimizing the window +- Pencereyi küçülttükten sonra veritabanlarını kilitle +- +- +- Re-lock previously locked database after performing Auto-Type +- Otomatik Yazım gerçekleÅŸtirdikten sonra önceden kilitli veritabanını yeniden kilitle +- +- +- Hide passwords in the entry preview panel +- Önizleme giriÅŸ panelinde parolaları gizle +- +- +- Hide entry notes by default +- Girdi notlarını öntanımlı olarak gizle +- +- +- Privacy +- Gizlilik +- +- +- Use DuckDuckGo service to download website icons +- Web sitesi simgelerini indirmek için DuckDuckGo kullan +- +- +- Clipboard clear seconds +- Pano temizleme süresi +- +- +- Touch ID inactivity reset +- Dokunmatik kimlik iÅŸlemsizlik sıfırlandı +- +- +- Database lock timeout seconds +- Veritabanı kilidi zaman aşımı süresi +- +- +- min +- Minutes +- dak +- +- +- Clear search query after +- Sonrasında arama sorgusunu temizle +- +- +- Require password repeat when it is visible +- Görünür durumdayken parola tekrarı iste +- +- +- Hide passwords when editing them +- Parolaları düzenlerken gizle +- +- +- Use placeholder for empty password fields +- BoÅŸ parola alanları için yer tutucu kullan +- +- +- +- AutoType +- +- Couldn't find an entry that matches the window title: +- Pencere baÅŸlığı ile eÅŸleÅŸen bir girdi bulunamadı: +- +- +- Auto-Type - KeePassXC +- Otomatik Yazım - KeePassXC +- +- +- Auto-Type +- Otomatik Yazım +- +- +- The Syntax of your Auto-Type statement is incorrect! +- Otomatik Yazım ifadenizin söz dizimi yanlış! +- +- +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- Bu Otomatik Yazım komutu çok uzun bir gecikme içeriyor. Gerçekten devam etmek istiyor musun? +- +- +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- Bu Otomatik Yazım komutu çok yavaÅŸ tuÅŸa basar. Gerçekten devam etmek istiyor musun? +- +- +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- Bu Otomatik Yazım komutu çok sık tekrarlanan argümanlar içerir. Gerçekten devam etmek istiyor musun? +- +- +- Permission Required +- Ä°zin Gerekli +- +- +- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC, giriÅŸ seviyesi Otomatik Yazım gerçekleÅŸtirmek için EriÅŸilebilirlik iznine ihtiyaç duyar. Zaten izin verdiyseniz, KeePassXC'yi yeniden baÅŸlatmanız gerekebilir. +- +- +- +- AutoTypeAssociationsModel +- +- Window +- Pencere +- +- +- Sequence +- Sıra +- +- +- Default sequence +- Öntanımlı sıra +- +- +- +- AutoTypeMatchModel +- +- Group +- Küme +- +- +- Title +- BaÅŸlık +- +- +- Username +- Kullanıcı adı +- +- +- Sequence +- Sıra +- +- +- +- AutoTypeMatchView +- +- Copy &username +- &Kullanıcı adını kopyala +- +- +- Copy &password +- &Parolayı kopyala +- +- +- +- AutoTypePlatformMac +- +- Permission Required +- Ä°zin Gerekli +- +- +- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC, genel Otomatik Yazım gerçekleÅŸtirmek için EriÅŸilebilirlik ve Ekran Kaydedici iznine ihtiyaç duyar. Ekran Kaydı, giriÅŸleri bulmak için pencere baÅŸlığını kullanmak için gereklidir. Zaten izin verdiyseniz, KeePassXC'yi yeniden baÅŸlatmanız gerekebilir. +- +- +- +- AutoTypeSelectDialog +- +- Auto-Type - KeePassXC +- Otomatik Yazım - KeePassXC +- +- +- Select entry to Auto-Type: +- Otomatik Yazım için girdi seç: +- +- +- Search... +- Ara... +- +- +- +- BrowserAccessControlDialog +- +- KeePassXC - Browser Access Request +- KeePassXC - Tarayıcı EriÅŸim Ä°steÄŸi +- +- +- %1 is requesting access to the following entries: +- %1 aÅŸağıdaki girdilere eriÅŸim istiyor: +- +- +- Remember access to checked entries +- Ä°ÅŸaretli girdilere eriÅŸimi hatırla +- +- +- Remember +- Hatırla +- +- +- Allow access to entries +- Girdilere eriÅŸime izin ver +- +- +- Allow Selected +- Seçilene izin ver +- +- +- Deny All +- Tümünü Reddet +- +- +- Disable for this site +- Bu site için devre dışı bırak +- +- +- +- BrowserEntrySaveDialog +- +- KeePassXC-Browser Save Entry +- KeePassXC-Tarayıcı Girdiyi Kaydet +- +- +- Ok +- Tamam +- +- +- Cancel +- Ä°ptal +- +- +- You have multiple databases open. +-Please select the correct database for saving credentials. +- Çok sayıda açık veritabanı var. +-Lütfen kimlik bilgilerini kaydetmek için doÄŸru veritabanını seç. +- +- +- +- BrowserService +- +- KeePassXC: New key association request +- KeePassXC: Yeni anahtar iliÅŸkilendirme isteÄŸi +- +- +- Save and allow access +- Kaydet ve eriÅŸime izin ver +- +- +- KeePassXC: Overwrite existing key? +- KeePassXC: Var olan anahtarın üstüne yaz? +- +- +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- "%1" adıyla paylaşılan bir ÅŸifreleme anahtarı zaten var. +-Ãœzerine yazmak istiyor musun? +- +- +- KeePassXC: Update Entry +- KeePassXC: Girdiyi Güncelle +- +- +- Do you want to update the information in %1 - %2? +- %1 -%2 bilgilerini güncellemek istiyor musun? +- +- +- Abort +- Ä°ptal +- +- +- Converting attributes to custom data… +- Öznitelikler özel verilere dönüştürüyor… +- +- +- KeePassXC: Converted KeePassHTTP attributes +- KeePassXC: Dönüştürülmüş KeePassHTTP özellikleri +- +- +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- %1 girdiden özellikler baÅŸarıyla dönüştürüldü. +-%2 anahtar özel veriye taşındı. +- +- +- Successfully moved %n keys to custom data. +- %n anahtarları baÅŸarıyla özel veriye taşındı.%n anahtar baÅŸarıyla özel veriye taşındı. +- +- +- KeePassXC: No entry with KeePassHTTP attributes found! +- KeePassXC: KeePassHTTP özniteliklerine sahip bir girdi bulunamadı! +- +- +- The active database does not contain an entry with KeePassHTTP attributes. +- Aktif veritabanı KeePassHTTP özelliklerine sahip bir giriÅŸ içermiyor. +- +- +- KeePassXC: Legacy browser integration settings detected +- KeePassXC: Eski tarayıcı bütünleÅŸtirme ayarları tespit edildi +- +- +- KeePassXC: Create a new group +- KeePassXC: Yeni bir küme oluÅŸtur +- +- +- A request for creating a new group "%1" has been received. +-Do you want to create this group? +- +- "%1" adlı yeni bir küme oluÅŸturma isteÄŸi alındı. +-Bu kümeyi oluÅŸturmak ister misiniz? +- +- +- +- Your KeePassXC-Browser settings need to be moved into the database settings. +-This is necessary to maintain your current browser connections. +-Would you like to migrate your existing settings now? +- KeePassXC-Tarayıcı ayarlarınızın veritabanı ayarlarına taşınması gerekir. +-Bu, mevcut tarayıcı baÄŸlantılarınızı korumak için gereklidir. +-Mevcut ayarlarınızı ÅŸimdi taşımak ister misiniz? +- +- +- Don't show this warning again +- Bu uyarıyı bir daha gösterme +- +- +- You have received an association request for the following database: +-%1 +- +-Give the connection a unique name or ID, for example: +-chrome-laptop. +- AÅŸağıdaki veritabanı için bir iliÅŸkilendirme isteÄŸi aldınız: +-%1 +- +-BaÄŸlantıya benzersiz bir ad veya kimlik verin, örneÄŸin: +-linux-laptop. +- +- +- +- BrowserSettingsWidget +- +- Dialog +- Diyalog +- +- +- This is required for accessing your databases with KeePassXC-Browser +- Bu, KeePassXC-Tarayıcı ile veritabanlarınıza eriÅŸmek için gereklidir. +- +- +- Enable browser integration +- Tarayıcı bütünleÅŸmesini etkinleÅŸtir +- +- +- General +- Genel +- +- +- Browsers installed as snaps are currently not supported. +- Ek olarak yüklenen tarayıcılar ÅŸu anda desteklenmemektedir. +- +- +- Enable integration for these browsers: +- Bu tarayıcılar için tümleÅŸtirmeyi etkinleÅŸtir: +- +- +- Vivaldi +- Vivaldi +- +- +- &Edge +- &Edge +- +- +- Firefox +- Firefox +- +- +- Tor Browser +- Tor Tarayıcı +- +- +- Brave +- Brave +- +- +- Google Chrome +- Google Chrome +- +- +- Chromium +- Chromium +- +- +- Show a notification when credentials are requested +- Credentials mean login data requested via browser extension +- Kimlik bilgileri istendiÄŸinde bir bildirim göster +- +- +- Request to unlock the database if it is locked +- Veritabanı kilitliyse, kilidin açılmasını iste +- +- +- Only entries with the same scheme (http://, https://, ...) are returned. +- Yalnızca aynı ÅŸemadaki girdiler (http://, https://, ...) döndürülür. +- +- +- Match URL scheme (e.g., https://...) +- URL ÅŸablonunu eÅŸleÅŸtir (örn., https://...) +- +- +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- Tüm alan adı için tüm girdiler yerine yalnızca belirli bir URL için en iyi eÅŸleÅŸenleri döndürür. +- +- +- Return only best-matching credentials +- Sadece en iyi eÅŸleÅŸen kimlik bilgilerini getir +- +- +- Returns expired credentials. String [expired] is added to the title. +- Süresi dolmuÅŸ kimlik bilgilerini döndürür. Dize [süresi doldu] baÅŸlığa eklendi. +- +- +- Allow returning expired credentials +- Vadesi dolan kimlik bilgilerinin getirilmesine izin ver +- +- +- All databases connected to the extension will return matching credentials. +- Eklentiye baÄŸlı tüm veritabanları eÅŸleÅŸen kimlik bilgilerini döndürür. +- +- +- Search in all opened databases for matching credentials +- Credentials mean login data requested via browser extension +- Tüm açık veritabanlarında eÅŸleÅŸen kimlik bilgilerini araÅŸtır +- +- +- Sort matching credentials by title +- Credentials mean login data requested via browser extension +- EÅŸleÅŸen kimlik bilgilerini baÅŸlığa göre sırala +- +- +- Sort matching credentials by username +- Credentials mean login data requested via browser extension +- EÅŸleÅŸen kimlik bilgilerini kullanıcı adına göre sırala +- +- +- Advanced +- GeliÅŸmiÅŸ +- +- +- Never ask before accessing credentials +- Credentials mean login data requested via browser extension +- Kimlik bilgilerine eriÅŸmeden önce asla sorma +- +- +- Never ask before updating credentials +- Credentials mean login data requested via browser extension +- Kimlik bilgilerini güncellemeden önce asla sorma +- +- +- Do not ask permission for HTTP Basic Auth +- An extra HTTP Basic Auth setting +- HTTP ve Temel Kimlik DoÄŸrulama için izin isteme +- +- +- Automatically creating or updating string fields is not supported. +- Dizge alanlarını otomatik oluÅŸturma veya güncelleme desteklenmiyor. +- +- +- Return advanced string fields which start with "KPH: " +- "KPH: " ile baÅŸlayan geliÅŸmiÅŸ dizge alanları &döndür +- +- +- Don't display the popup suggesting migration of legacy KeePassHTTP settings. +- Eski KeePassHTTP ayarlarının taşınmasını öneren açılır pencereyi görüntülemeyin. +- +- +- Do not prompt for KeePassHTTP settings migration. +- KeePassHTTP ayarlarının taşınmasını &istemeyin. +- +- +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- BaÅŸlangıçta yerel mesajlaÅŸma komut dosyalarına KeePassXC veya keepassxc-proxy ikili yolunu otomatik olarak günceller. +- +- +- Update native messaging manifest files at startup +- BaÅŸlangıçta yerel mesajlaÅŸma açıklama dosyalarını güncelle +- +- +- Use a custom proxy location if you installed a proxy manually. +- Elle bir vekil sunucu kurduysanız, özel vekil sunucu konumu kullanın. +- +- +- Use a custom proxy location: +- Meant is the proxy for KeePassXC-Browser +- Özel vekil sunucu konumunu seç +- +- +- Custom proxy location field +- Özel vekil sunucu konum alanı +- +- +- Browser for custom proxy file +- Özel vekil sunucu dosyası seç +- +- +- Browse... +- Button for opening file dialog +- Gözat... +- +- +- Use a custom browser configuration location: +- Özel tarayıcı ayarı konumu kullan +- +- +- Browser type: +- Tarayıcı tipi: +- +- +- Toolbar button style +- Araç çubuÄŸu düğme tipi +- +- +- Config Location: +- Ayar Konumu: +- +- +- Custom browser location field +- Özel tarayıcı konum alanı +- +- +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- +- +- Browse for custom browser path +- Özel tarayıcı yolu için gözat +- +- +- Custom extension ID: +- Özel eklenti tanımlayıcısı(ID): +- +- +- Custom extension ID +- Özel eklenti tanımlayıcısı(ID): +- +- +- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 +- Snap sanal alanı nedeniyle, tarayıcı bütünleÅŸmesini etkinleÅŸtirmek için bir komut dosyası çalıştırmalısınız.<br />Bu betiÄŸi %1 adresinden edinebilirsiniz. +- +- +- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 +- Tarayıcı bütünleÅŸmesinin çalışması için KeePassXC-Tarayıcı gereklidir. <br /> %1, %2, %3 ve %4 tarayıcıları için indir. +- +- +- Please see special instructions for browser extension use below +- Lütfen aÅŸağıdaki tarayıcı eklentisi kullanımına iliÅŸkin özel talimatlara bakın +- +- +- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. +- <b>Hata:</b> Özel vekil sunucu konumu bulunamıyor !<br/>Tarayıcı bütünleÅŸmesi vekil sunucu uygulaması olmadan ÇALIÅžMAYACAKTIR. +- +- +- <b>Warning:</b> The following options can be dangerous! +- <b>Uyarı:</b> AÅŸağıdaki seçenekler tehlikeli olabilir! +- +- +- Executable Files +- Yürütülebilir Dosyalar +- +- +- All Files +- Tüm Dosyalar +- +- +- Select custom proxy location +- Özel vekil sunucu konumunu seç +- +- +- Select native messaging host folder location +- Yerel mesajlaÅŸma bilgisayar klasör konumunu seç +- +- +- +- CloneDialog +- +- Clone Options +- Klonlama Seçenekleri +- +- +- Append ' - Clone' to title +- BaÅŸlık sonuna ' - Klon' ekle +- +- +- Replace username and password with references +- Kullanıcı adı ve parolayı referanslarla deÄŸiÅŸtir +- +- +- Copy history +- Kopyalama geçmiÅŸi +- +- +- +- CsvImportWidget +- +- Import CSV fields +- CSV alanlarını içe aktar +- +- +- filename +- dosya adı +- +- +- size, rows, columns +- boyut, satırlar, sütunlar +- +- +- Encoding +- Kodlayıcı +- +- +- Codec +- Kod çözücü +- +- +- Text is qualified by +- Åžu tarafından metin yetkilendirildi +- +- +- Fields are separated by +- Åžu tarafından alanlar bölümlendi +- +- +- Comments start with +- Yorumlar ÅŸununla baÅŸlar +- +- +- Consider '\' an escape character +- '\' kaçış karakteri olduÄŸunu göz önünde bulundurun +- +- +- Preview +- Ön izle +- +- +- Imported from CSV file +- CSV dosyasından içe aktarıldı +- +- +- Original data: +- Özgün veri: +- +- +- Error +- Hata +- +- +- Error(s) detected in CSV file! +- CSV dosyasında hata saptandı! +- +- +- [%n more message(s) skipped] +- [%n daha fazla ileti atlandı][%n daha fazla ileti atlandı] +- +- +- CSV import: writer has errors: +-%1 +- CSV içe aktarma: yazarken hatalar var: +-%1 +- +- +- Text qualification +- Metin niteliÄŸi +- +- +- Field separation +- Alan ayrıştırma +- +- +- Number of header lines to discard +- Atılacak baÅŸlık satırı sayısı +- +- +- CSV import preview +- CSV içe aktarma önizlemesi +- +- +- Column Association +- Sütun Ä°liÅŸkilendirmeleri +- +- +- Last Modified +- Son DeÄŸiÅŸiklik +- +- +- Password +- Parola +- +- +- Created +- OluÅŸturuldu +- +- +- Notes +- Notlar +- +- +- Title +- BaÅŸlık +- +- +- Group +- Küme +- +- +- URL +- URL +- +- +- Username +- Kullanıcı adı +- +- +- Header lines skipped +- BaÅŸlık satırları atlanıldı +- +- +- First line has field names +- Ä°lk satır alan adlarını içerir +- +- +- Not Present +- Mevcut DeÄŸil +- +- +- Column %1 +- Sütun %1 +- +- +- TOTP +- TOTP +- +- +- Icon +- Simge +- +- +- +- CsvParserModel +- +- %n column(s) +- %n sütun%n sütun +- +- +- %1, %2, %3 +- file info: bytes, rows, columns +- %1, %2, %3 +- +- +- %n byte(s) +- %n bayt%n bayt +- +- +- %n row(s) +- %n satır%n satır +- +- +- +- Database +- +- File %1 does not exist. +- %1 dosyası mevcut deÄŸil. +- +- +- Unable to open file %1. +- Dosya açılamıyor %1. +- +- +- Error while reading the database: %1 +- Veritabanını okurken hata: %1 +- +- +- File cannot be written as it is opened in read-only mode. +- Dosya salt okunur kipinde açıldığı için yazılamıyor. +- +- +- Key not transformed. This is a bug, please report it to the developers! +- Anahtar dönüştürülmedi. Bu bir hatadır, lütfen geliÅŸtiricilere bildirin! +- +- +- %1 +-Backup database located at %2 +- %1 +-Yedek veritabanının konumu %2 +- +- +- Could not save, database does not point to a valid file. +- Kaydedilemedi, veritabanı geçerli bir dosyayı göstermiyor. +- +- +- Could not save, database file is read-only. +- Kaydedilemedi, veritabanı dosyası salt okunur. +- +- +- Database file has unmerged changes. +- Veritabanı dosyasında birleÅŸtirilmemiÅŸ deÄŸiÅŸiklikler var. +- +- +- Recycle Bin +- Geri Dönüşüm Kutusu +- +- +- Passwords +- Root group name +- Parolalar +- +- +- Database save is already in progress. +- Veritabanı kaydı ÅŸu anda iÅŸleniyor. +- +- +- Could not save, database has not been initialized! +- Kaydedilemiyor, veritabanı baÅŸlatılamadı! +- +- +- +- DatabaseOpenDialog +- +- Unlock Database - KeePassXC +- Veritabanı Kilidini Aç - KeePassXC +- +- +- +- DatabaseOpenWidget +- +- Key File: +- Anahtar Dosyası: +- +- +- Refresh +- Yenile +- +- +- Don't show this warning again +- Bu uyarıyı bir daha gösterme +- +- +- All files +- Tüm dosyalar +- +- +- Key files +- Anahtar dosyaları +- +- +- Select key file +- Anahtar dosyası seç +- +- +- Failed to open key file: %1 +- Anahtar dosyası açılamadı: %1 +- +- +- Unlock KeePassXC Database +- KeePassXC Veritabanı Kilidini Aç +- +- +- Enter Password: +- Parolayı Gir: +- +- +- Password field +- Parola alanı +- +- +- Hardware key slot selection +- Donanım anahtarı yuvası seçimi +- +- +- Browse for key file +- Anahtar dosyasına göz at +- +- +- Browse... +- Gözat... +- +- +- Refresh hardware tokens +- Donanım belirteçlerini yenile +- +- +- Hardware Key: +- Donanım Anahtarı: +- +- +- Hardware key help +- Donanım anahtarı yardım +- +- +- TouchID for Quick Unlock +- Hızlı Kilit Açma için TouchID +- +- +- Unlock failed and no password given +- Kilit açma baÅŸarısız oldu ve parola verilmedi +- +- +- Unlocking the database failed and you did not enter a password. +-Do you want to retry with an "empty" password instead? +- +-To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. +- Veritabanı açılamadı ve parola girmediniz. +-Onun yerine boÅŸ bir parola ile tekrar denemek ister misiniz ? +- +-Bu hatanın oluÅŸmasını engellemek için, "Veritabanı Ayarları / Güvenlik" e gitmeli ve parolanızı sıfırlamalısınız. +- +- +- Retry with empty password +- BoÅŸ parola ile tekrar deneyin +- +- +- Enter Additional Credentials (if any): +- Ek Kimlik Bilgileri Gir (varsa): +- +- +- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +-<p>Click for more information...</p> +- <p> <strong>YubiKey</strong> ve ya <strong>OnlyKey</strong> gibi donanım bazlı güvenlik anahtarlarının HMAC-SHA1 için ayarlanmış yuvaları olanlarını kullanabilirsiniz.</p> +-<p>Daha fazla bilgi için tıklayınız...</p> +- +- +- Key file help +- Anahtar dosyası yardım +- +- +- ? +- ? +- +- +- Cannot use database file as key file +- Veritabanı dosyası anahtar dosyası olarak kullanılamaz +- +- +- You cannot use your database file as a key file. +-If you do not have a key file, please leave the field empty. +- Veritabanı dosyanızı bir anahtar dosyası olarak kullanamazsınız. +-Bir anahtar dosyanız yoksa, lütfen alanı boÅŸ bırakınız. +- +- +- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> +- <p>Bir parolaya ek olarak, bir gizli dosyayı veritabanınızın güvenliÄŸini arttırmak için kullanabilirsiniz. .Bu dosya veritabanınızın güvenlik ayarlarında oluÅŸturulabilir.</p><p>Bu sizin *.kdbx veritabanı dosyanız <strong>deÄŸil</strong>!<br>Bir anahtar dosyanız yoksa, bu alanı boÅŸ bırakınız.</p><p>Daha fazla bilgi için tıklayınız...</p> +- +- +- Key file to unlock the database +- Veritanını açmak için anahtar dosyası +- +- +- Please touch the button on your YubiKey! +- Lütfen YubiKey'inizdeki düğmeye dokunun! +- +- +- Detecting hardware keys… +- Donanım anahtarları tespit ediliyor... +- +- +- No hardware keys detected +- Hiç bir donanım anahtarı tespit edilmedi +- +- +- Select hardware key… +- Donanım anahtarı seçin... +- +- +- Old key file format +- +- +- +- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> +- +- +- +- +- DatabaseSettingWidgetMetaData +- +- Passwords +- Parolalar +- +- +- +- DatabaseSettingsDialog +- +- Advanced Settings +- GeliÅŸmiÅŸ Ayarlar +- +- +- General +- Genel +- +- +- Security +- Güvenlik +- +- +- Encryption Settings +- Åžifreleme Ayarları +- +- +- Browser Integration +- Tarayıcı BütünleÅŸmesi +- +- +- Database Credentials +- Veritabanı Kimlik Bilgileri +- +- +- +- DatabaseSettingsWidgetBrowser +- +- KeePassXC-Browser settings +- KeePassXC-Tarayıcı ayarları +- +- +- Stored keys +- Depolanan anahtarlar +- +- +- Remove +- Kaldır +- +- +- Delete the selected key? +- Seçili anahtarı silmek istiyor musun? +- +- +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- Seçili anahtarı gerçekten silmek istiyor musunuz? +-Bu iÅŸlem, tarayıcı eklentisine baÄŸlantıyı engelleyebilir. +- +- +- Key +- Anahtar +- +- +- Value +- DeÄŸer +- +- +- Enable Browser Integration to access these settings. +- Bu ayarlara eriÅŸmek için Tarayıcı BütünleÅŸmesini etkinleÅŸtir. +- +- +- Disconnect all browsers +- Tüm tarayıcıların baÄŸlantısını kes +- +- +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- Tüm tarayıcıların baÄŸlantısını kesmek istiyor musunuz? +-Bu iÅŸlem, tarayıcı eklentisi baÄŸlantısını engelleyebilir. +- +- +- KeePassXC: No keys found +- KeePassXC: Anahtar bulunamadı +- +- +- No shared encryption keys found in KeePassXC settings. +- KeePassXC ayarlarında paylaşılan ÅŸifreleme anahtarı bulunamadı. +- +- +- KeePassXC: Removed keys from database +- KeePassXC: Anahtarlar veritabanından kaldırıldı +- +- +- Successfully removed %n encryption key(s) from KeePassXC settings. +- %n ÅŸifreleme anahtarı KeePassXC ayarlarından baÅŸarıyla çıkarıldı.%n ÅŸifreleme anahtarı KeePassXC ayarlarından baÅŸarıyla çıkarıldı. +- +- +- Forget all site-specific settings on entries +- Girdilerde siteye özgü tüm ayarları unut +- +- +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- %n giriÅŸindeki izinler kaldırıldı. +-GiriÅŸlere eriÅŸim izinleri iptal edilecek. +- +- +- Removing stored permissions… +- Depolanmış izinler kaldırılıyor… +- +- +- Abort +- Ä°ptal +- +- +- KeePassXC: Removed permissions +- KeePassXC: Kaldırılan izinler +- +- +- Successfully removed permissions from %n entry(s). +- %n giriÅŸindeki izinler baÅŸarıyla kaldırıldı.%n giriÅŸindeki izinler baÅŸarıyla kaldırıldı. +- +- +- KeePassXC: No entry with permissions found! +- KeePassXC: Ä°zinli girdi bulunamadı! +- +- +- The active database does not contain an entry with permissions. +- Etkin veritabanı, izinleri olan bir girdi içermiyor. +- +- +- Move KeePassHTTP attributes to custom data +- KeePassHTTP özniteliklerini özel verilere taşı +- +- +- Do you really want to move all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- Tüm eski tarayıcı bütünleÅŸme verilerini gerçekten en son standarda taşımak istiyor musunuz? +-Tarayıcı eklentisiyle uyumluluÄŸu korumak için bu gereklidir. +- +- +- Stored browser keys +- Saklanan tarayıcı tuÅŸları +- +- +- Remove selected key +- Seçili anahtarı kaldır +- +- +- Move KeePassHTTP attributes to KeePassXC-Browser custom data +- KeePassHTTP özniteliklerini KeePassXC-Tarayıcı özel verisine taşı +- +- +- Refresh database root group ID +- Veritabanı root group ID deÄŸerini yenile +- +- +- Created +- OluÅŸturuldu +- +- +- Refresh database ID +- Veritabanı ID yenile +- +- +- Do you really want refresh the database ID? +-This is only necessary if your database is a copy of another and the browser extension cannot connect. +- Gerçekten veritabanı ID deÄŸerini yenilemek istiyor musunuz ? +-Bu sadece veritabanınız baÅŸka bir veritabanının kopyasıysa ve tarayıcı eklentisi baÄŸlanamıyorsa gereklidir. +- +- +- +- DatabaseSettingsWidgetDatabaseKey +- +- Add additional protection... +- Ek koruma ekle... +- +- +- No password set +- Parola ayarlanmadı +- +- +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- UYARI! Bir parola belirlemediniz. Parola olmadan bir veritabanı kullanmak kesinlikle önerilmez! +- +-Parola olmadan devam etmek istediÄŸinize emin misiniz? +- +- +- Continue without password +- Parola olmadan devam et +- +- +- No encryption key added +- Åžifreleme anahtarı eklenmedi +- +- +- You must add at least one encryption key to secure your database! +- Veritabanınızı korumak için en az bir ÅŸifreleme anahtarı eklemelisiniz! +- +- +- Unknown error +- Bilinmeyen hata +- +- +- Failed to change database credentials +- Veritabanı kimlik bilgileri deÄŸiÅŸtirilemedi +- +- +- +- DatabaseSettingsWidgetEncryption +- +- Encryption Algorithm: +- Åžifreleme Algoritması: +- +- +- AES: 256 Bit (default) +- AES: 256 Bit (öntanımlı) +- +- +- Twofish: 256 Bit +- Twofish: 256 Bit +- +- +- Key Derivation Function: +- Anahtar Türetme Ä°ÅŸlevi: +- +- +- Transform rounds: +- Dönüşüm turları: +- +- +- Memory Usage: +- Bellek Kullanımı: +- +- +- Parallelism: +- Benzerlik: +- +- +- Decryption Time: +- Åžifre Çözme Zamanı: +- +- +- ?? s +- ?? s +- +- +- Change +- DeÄŸiÅŸtir +- +- +- Higher values offer more protection, but opening the database will take longer. +- Daha yüksek deÄŸerler daha fazla koruma saÄŸlar, ancak veritabanını açmak daha uzun sürer. +- +- +- Database format: +- Veritabanı biçimi: +- +- +- This is only important if you need to use your database with other programs. +- Bu, veritabanınızı baÅŸka programlarla birlikte kullanmanız gerektiÄŸinde önemlidir. +- +- +- KDBX 4.0 (recommended) +- KDBX 4.0 (önerilen) +- +- +- KDBX 3.1 +- KDBX 3.1 +- +- +- unchanged +- Database decryption time is unchanged +- deÄŸiÅŸmedi +- +- +- Number of rounds too high +- Key transformation rounds +- Tur sayısı çok yüksek +- +- +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or days (or even longer) to open! +- Argon2 ile çok yüksek sayıda anahtar dönüştürme turu kullanıyorsunuz. +- +-EÄŸer bu sayı ile devam ederseniz, veritabanınızın açılması saatler veya günler (hatta daha uzun) sürebilir! +- +- +- Understood, keep number +- Anlaşıldı, sayıyı koru +- +- +- Cancel +- Ä°ptal +- +- +- Number of rounds too low +- Key transformation rounds +- Tur sayısı çok düşük +- +- +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database may be too easy to crack! +- AES-KDF ile çok düşük sayıda anahtar dönüştürme turu kullanıyorsunuz. +- +-EÄŸer bu sayı ile devam ederseniz, veritabanınız çok kolay çözülerek kırılabilir! +- +- +- KDF unchanged +- KDF deÄŸiÅŸmedi +- +- +- Failed to transform key with new KDF parameters; KDF unchanged. +- Yeni KDF parametreleri ile anahtar dönüştürülemedi; KDF deÄŸiÅŸmedi. +- +- +- MiB +- Abbreviation for Mebibytes (KDF settings) +- MBMB +- +- +- thread(s) +- Threads for parallel execution (KDF settings) +- iÅŸ parçacığıiÅŸ parçacığı +- +- +- Change existing decryption time +- Mevcut ÅŸifre çözme süresini deÄŸiÅŸtir +- +- +- Decryption time in seconds +- Saniyede ÅŸifre çözme süresi +- +- +- Database format +- Veritabanı biçimi +- +- +- Encryption algorithm +- Åžifreleme algoritması +- +- +- Key derivation function +- Anahtar türetme iÅŸlevi +- +- +- Transform rounds +- Dönüşüm çevrimleri +- +- +- Memory usage +- Bellek kullanımı +- +- +- Parallelism +- Benzerlik +- +- +- ?? ms +- ?? ms +- +- +- ? s +- ? s +- +- +- +- DatabaseSettingsWidgetFdoSecrets +- +- Exposed Entries +- Maruz Kalan Girdiler +- +- +- Don't expose this database +- Bu veritabanını açma +- +- +- Expose entries under this group: +- Bu grubun altındaki girdileri aç: +- +- +- Enable Secret Service to access these settings. +- Gizli Servisin bu ayarlara eriÅŸmesini izin ver. +- +- +- +- DatabaseSettingsWidgetGeneral +- +- Database Meta Data +- Veritabanı Ãœst Veri +- +- +- Database name: +- Veritabanı adı: +- +- +- Database description: +- Veritabanı açıklaması: +- +- +- Default username: +- Öntanımlı kullanıcı adı: +- +- +- History Settings +- GeçmiÅŸ Ayarları +- +- +- Max. history items: +- Azami geçmiÅŸ ögesi: +- +- +- Max. history size: +- Azami geçmiÅŸ boyutu: +- +- +- MiB +- MiB +- +- +- Use recycle bin +- Geri dönüşüm kutusunu kullan +- +- +- Additional Database Settings +- Ek Veritabanı Ayarları +- +- +- Database name field +- Veritabanı isim alanı +- +- +- Database description field +- Veritabanı açıklama alanı +- +- +- Default username field +- Varsayılan kullanıcı adı alanı +- +- +- Maximum number of history items per entry +- Girdi başına azami geçmiÅŸ ögesi sayısı +- +- +- Maximum size of history per entry +- Girdi başına azami geçmiÅŸ boyutu +- +- +- Delete Recycle Bin +- Geri Dönüşüm Kutusunu Sil +- +- +- Do you want to delete the current recycle bin and all its contents? +-This action is not reversible. +- Mevcut geri dönüşüm kutusunu ve tüm içeriÄŸini silmek istiyor musunuz? +-Bu eylem geri alınamaz. +- +- +- (old) +- (eski) +- +- +- Enable compression (recommended) +- Sıkıştırmayı etkinleÅŸtir (önerilir) +- +- +- +- DatabaseSettingsWidgetKeeShare +- +- Sharing +- Paylaşım +- +- +- Breadcrumb +- İçerik Haritası +- +- +- Type +- Tür +- +- +- Path +- Yol +- +- +- Last Signer +- Son Ä°mzalayan +- +- +- Certificates +- Sertifikalar +- +- +- > +- Breadcrumb separator +- > +- +- +- +- DatabaseSettingsWidgetMetaDataSimple +- +- Database Name: +- Veritabanı Adı: +- +- +- Description: +- Açıklama: +- +- +- Database name field +- Veritabanı isim alanı +- +- +- Database description field +- Veritabanı açıklama alanı +- +- +- +- DatabaseTabWidget +- +- KeePass 2 Database +- KeePass 2 Veritabanı +- +- +- All files +- Tüm dosyalar +- +- +- Open database +- Veritabanı aç +- +- +- CSV file +- CSV dosyası +- +- +- Merge database +- Veritabanını birleÅŸtir +- +- +- Open KeePass 1 database +- KeePass 1 veritabanı aç +- +- +- KeePass 1 database +- KeePass 1 veritabanı +- +- +- Export database to CSV file +- Veritabanını CSV dosyasına dışa aktar +- +- +- Writing the CSV file failed. +- CSV dosyasına yazma baÅŸarısız. +- +- +- Database creation error +- Veritabanı oluÅŸturma hatası +- +- +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- OluÅŸturulan veritabanının anahtarı veya KDF'si yoktur, kaydetme reddedilir. +-Bu kesinlikle bir hatadır, lütfen geliÅŸtiricilere bildirin. +- +- +- Select CSV file +- CSV dosyası seç +- +- +- New Database +- Yeni Veritabanı +- +- +- %1 [New Database] +- Database tab name modifier +- %1 [Yeni Veritabanı] +- +- +- %1 [Locked] +- Database tab name modifier +- %1 [Kilitli] +- +- +- %1 [Read-only] +- Database tab name modifier +- %1 [Salt okunur] +- +- +- Failed to open %1. It either does not exist or is not accessible. +- %1 açılamadı. Ya mevcut deÄŸil ya da eriÅŸilebilir deÄŸil. +- +- +- Export database to HTML file +- Veritabanını HTML dosyasına aktar +- +- +- HTML file +- HTML dosyası +- +- +- Writing the HTML file failed. +- HTML dosyası yazılamadı. +- +- +- Export Confirmation +- Dışa Aktarım Onayı +- +- +- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? +- Veritabanınızı ÅŸifrelenmemiÅŸ bir dosyaya vermek üzeresiniz. Bu, parolalarınızı ve hassas bilgilerinizi savunmasız bırakacaktır! Devam etmek istediÄŸine emin misin? +- +- +- Open OPVault +- OPVault u aç +- +- +- +- DatabaseWidget +- +- Searching... +- Aranıyor... +- +- +- Do you really want to delete the entry "%1" for good? +- "%1" girdisini tümüyle silmek istediÄŸinize emin misiniz? +- +- +- Do you really want to move entry "%1" to the recycle bin? +- "%1" girdisini geri dönüşüm kutusuna taşımak istediÄŸinize emin misiniz? +- +- +- Do you really want to move %n entry(s) to the recycle bin? +- %n girdiyi geri dönüşüm kutusuna taşımak istediÄŸinize emin misiniz?%n girdiyi geri dönüşüm kutusuna taşımak istediÄŸinize emin misiniz? +- +- +- Execute command? +- Komut çalıştır? +- +- +- Do you really want to execute the following command?<br><br>%1<br> +- Åžu komutu çalıştırmak istediÄŸinize emin misiniz?<br><br>%1<br> +- +- +- Remember my choice +- Seçimimi hatırla +- +- +- Do you really want to delete the group "%1" for good? +- Gerçekten "%1" grubunu tamamen silmek istiyor musunuz? +- +- +- No current database. +- Geçerli veritabanı yok. +- +- +- No source database, nothing to do. +- Kaynak veritabanı yok, yapılacak bir ÅŸey yok. +- +- +- Search Results (%1) +- Arama Sonuçları (%1) +- +- +- No Results +- Sonuç Yok +- +- +- File has changed +- Dosya deÄŸiÅŸti +- +- +- The database file has changed. Do you want to load the changes? +- Veritabanı dosyası deÄŸiÅŸtirildi. DeÄŸiÅŸiklikleri yüklemek ister misiniz? +- +- +- Merge Request +- BirleÅŸtirme Ä°steÄŸi +- +- +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- Veritabanı dosyası deÄŸiÅŸti ve kaydedilmemiÅŸ deÄŸiÅŸiklikleriniz var. +-DeÄŸiÅŸikliklerinizi birleÅŸtirmek ister misiniz? +- +- +- Empty recycle bin? +- Geri dönüşüm kutusunu boÅŸalt? +- +- +- Are you sure you want to permanently delete everything from your recycle bin? +- Geri dönüşüm kutunuzdaki her ÅŸeyi kalıcı olarak silmek istediÄŸinize emin misiniz? +- +- +- Do you really want to delete %n entry(s) for good? +- %n giriÅŸlerini gerçekten kalıcı olarak silmek istiyor musunuz?%n giriÅŸlerini gerçekten kalıcı olarak silmek istiyor musunuz? +- +- +- Delete entry(s)? +- Girdiyi sil?Girdiyi sil? +- +- +- Move entry(s) to recycle bin? +- Girdiyi geri dönüşüm kutusuna taşı?Girdiyi geri dönüşüm kutusuna taşı? +- +- +- Lock Database? +- Veritabanını Kilitle? +- +- +- You are editing an entry. Discard changes and lock anyway? +- Bir giriÅŸi düzenliyorsunuz. DeÄŸiÅŸiklikleri iptal et ve yine de kilitle? +- +- +- "%1" was modified. +-Save changes? +- "%1" deÄŸiÅŸtirildi. +-DeÄŸiÅŸiklikler kaydedilsin mi? +- +- +- Database was modified. +-Save changes? +- Veritabanı deÄŸiÅŸtirildi. +-DeÄŸiÅŸiklikleri kaydet? +- +- +- Save changes? +- DeÄŸiÅŸiklikleri kaydet? +- +- +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- Otomatik yükleme denenirken yeni veritabanı dosyası açılamadı. +-Hata: %1 +- +- +- Disable safe saves? +- Güvenli kaydetme devre dışı? +- +- +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- KeePassXC veritabanını birkaç kez kaydetmeyi baÅŸaramadı. Buna genellikle bir kayıt dosyası üzerinde kilit tutan dosya eÅŸitleme hizmetleri neden olur. +-Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi? +- +- +- Passwords +- Parolalar +- +- +- Save database as +- Veritabanını farklı kaydet +- +- +- KeePass 2 Database +- KeePass 2 Veritabanı +- +- +- Replace references to entry? +- GiriÅŸ referansları deÄŸiÅŸtirilsin mi? +- +- +- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? +- Girdi "%1" , %2 referansa sahip. DeÄŸerlerin referanslarını üzerine yazmak, bu girdiyi atlamak ya da yine de silmek istiyor musunuz?Girdi "%1" , %2 referansa sahip. DeÄŸerlerin referanslarını üzerine yazmak, bu girdiyi atlamak ya da yine de silmek istiyor musunuz? +- +- +- Delete group +- Kümeyi sil +- +- +- Move group to recycle bin? +- Kümeyi geri dönüşüm kutusuna taşı? +- +- +- Do you really want to move the group "%1" to the recycle bin? +- "%1" kümesini gerçekten geri dönüşüm kutusuna taşımak istiyor musunuz? +- +- +- Successfully merged the database files. +- Veritabanı dosyaları baÅŸarıyla birleÅŸtirildi. +- +- +- Database was not modified by merge operation. +- Veritabanı birleÅŸtirme iÅŸlemi tarafından deÄŸiÅŸtirilmedi. +- +- +- Shared group... +- Paylaşılan küme... +- +- +- Writing the database failed: %1 +- Veritabanına yazma baÅŸarısız: %1 +- +- +- This database is opened in read-only mode. Autosave is disabled. +- Bu veritabanı salt okunur kipte açılır. Otomatik kaydetme devre dışı. +- +- +- Save database backup +- Veritabanı yedeÄŸini kaydet +- +- +- Could not find database file: %1 +- Veritabanı dosyası bulunamadı: %1 +- +- +- +- EditEntryWidget +- +- Entry +- Girdi +- +- +- Advanced +- GeliÅŸmiÅŸ +- +- +- Icon +- Simge +- +- +- Auto-Type +- Otomatik Yazım +- +- +- Properties +- Özellikler +- +- +- History +- GeçmiÅŸ +- +- +- SSH Agent +- SSH Ä°stemci +- +- +- n/a +- yok +- +- +- (encrypted) +- (ÅŸifrelenmiÅŸ) +- +- +- Select private key +- Özel anahtar seç +- +- +- Entry history +- Girdi geçmiÅŸi +- +- +- Add entry +- Girdi ekle +- +- +- Edit entry +- Girdiyi düzenle +- +- +- New attribute +- Yeni öznitelik +- +- +- Are you sure you want to remove this attribute? +- Bu özniteliÄŸi silmek istediÄŸinizden emin misiniz? +- +- +- Tomorrow +- Yarın +- +- +- %n week(s) +- %n hafta%n hafta +- +- +- %n month(s) +- %n ay%n ay +- +- +- Entry updated successfully. +- Girdi güncelleme baÅŸarılı. +- +- +- New attribute %1 +- Yeni öznitelik %1 +- +- +- %n year(s) +- %n yıl%n yıl +- +- +- Confirm Removal +- Kaldırmayı Onayla +- +- +- Browser Integration +- Tarayıcı BütünleÅŸmesi +- +- +- <empty URL> +- <empty URL> +- +- +- Are you sure you want to remove this URL? +- Bu URL'yi kaldırmak istediÄŸinizden emin misiniz? +- +- +- Reveal +- Göster +- +- +- Hide +- Gizle +- +- +- Unsaved Changes +- KaydedilmemiÅŸ DeÄŸiÅŸiklikler +- +- +- Would you like to save changes to this entry? +- Bu girdideki deÄŸiÅŸiklikleri kaydetmek istiyor musunuz ? +- +- +- [PROTECTED] Press Reveal to view or edit +- [KORUMALI] Görmek veya düzenlemek için Göster e basın +- +- +- Invalid Entry +- +- +- +- An external merge operation has invalidated this entry. +-Unfortunately, any changes made have been lost. +- +- +- +- +- EditEntryWidgetAdvanced +- +- Additional attributes +- Ek öznitelikler +- +- +- Add +- Ekle +- +- +- Remove +- Kaldır +- +- +- Edit Name +- Adı Düzenle +- +- +- Protect +- Koru +- +- +- Reveal +- Göster +- +- +- Attachments +- Ekler +- +- +- Foreground Color: +- Ön Plan Rengi: +- +- +- Background Color: +- Arka Plan Rengi: +- +- +- Attribute selection +- Öznitelik seçimi +- +- +- Attribute value +- Öznitelik deÄŸeri +- +- +- Add a new attribute +- Yeni öznitelik ekle +- +- +- Remove selected attribute +- Seçili özniteliÄŸi kaldır +- +- +- Edit attribute name +- Öznitelik adını düzenle +- +- +- Toggle attribute protection +- Öznitlik korumasını aç/kapat +- +- +- Show a protected attribute +- Korumalı bir özelliÄŸi göster +- +- +- Foreground color selection +- Ön plan renk seçimi +- +- +- Background color selection +- Arka plan rengi seçimi +- +- +- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> +- <html><head/><body><p>Ä°ÅŸaretlenirse, girdi kalite gereksinimlerine(örn. parola entropisi veya tekrar kulllanımı) uymasa dahi SaÄŸlık Taraması ve HIBP gibi raporlarda görünmez. Parola kontrolünüzün dışındaysa(örn. dört basamaklı bir pin olması gerekiyorsa) raporların gereksiz yere ÅŸiÅŸmesini engellemek için iÅŸaretleyebilirsiniz .</p></body></html> +- +- +- Exclude from database reports +- Veritabanını raporlardan hariç tut +- +- +- +- EditEntryWidgetAutoType +- +- Enable Auto-Type for this entry +- Bu girdi için Otomatik Yazımı etkinleÅŸtir +- +- +- Window Associations +- Pencere Ä°liÅŸkilendirmeleri +- +- +- + +- + +- +- +- - +- - +- +- +- Window title: +- Pencere baÅŸlığı: +- +- +- Use a specific sequence for this association: +- Bu iliÅŸki için belirli bir sıra kullan: +- +- +- Custom Auto-Type sequence +- Özel Otomatik Yazım sırası +- +- +- Open Auto-Type help webpage +- Otomatik Yazım yardım sayfasını aç +- +- +- Existing window associations +- Mevcut pencere iliÅŸkilendirmeleri +- +- +- Add new window association +- Yeni pencere iliÅŸkilendirmesi ekle +- +- +- Remove selected window association +- Seçili pencere iliÅŸkilendirmesini kaldır +- +- +- You can use an asterisk (*) to match everything +- Her ÅŸeyi eÅŸleÅŸtirmek için yıldız iÅŸareti (*) kullanabilirsiniz +- +- +- Set the window association title +- Pencere iliÅŸkilendirme baÅŸlığını ayarla +- +- +- You can use an asterisk to match everything +- Her ÅŸeyi eÅŸleÅŸtirmek için yıldız iÅŸareti kullanabilirsiniz +- +- +- Custom Auto-Type sequence for this window +- Bu pencere için özel Otomatik Yazım sırası +- +- +- Inherit default Auto-Type sequence from the group +- Varsayılan Oto-Yazım sırasını gruptan devral +- +- +- Use custom Auto-Type sequence: +- Özel Oto-Yazım sırasını kullan +- +- +- +- EditEntryWidgetBrowser +- +- These settings affect to the entry's behaviour with the browser extension. +- Bu ayarlar, girdinin tarayıcı eklentisiyle davranışını etkiler. +- +- +- General +- Genel +- +- +- Skip Auto-Submit for this entry +- Bu girdi için Otomatik Gönder'i atla +- +- +- Hide this entry from the browser extension +- Bu girdiyi tarayıcı eklentisi üstünde gizle +- +- +- Additional URL's +- Ek URL'ler +- +- +- Add +- Ekle +- +- +- Remove +- Kaldır +- +- +- Edit +- Düzenle +- +- +- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. +- Bu ayarı tarayıcıya sadece HRRP Auth diyalogları için gönder. EtkinleÅŸtirildiÄŸinde, normal giriÅŸ formları bu girdiyi seçmek için göstermeyecektir. +- +- +- Use this entry only with HTTP Basic Auth +- Bu girdiyi sadece HTTP Basic Auth ile kullan +- +- +- +- EditEntryWidgetHistory +- +- Show +- Göster +- +- +- Restore +- Geri yükle +- +- +- Delete +- Sil +- +- +- Delete all +- Tümünü sil +- +- +- Entry history selection +- Girdi geçmiÅŸi seçimi +- +- +- Show entry at selected history state +- Seçili tarih durumundaki girdiyi göster +- +- +- Restore entry to selected history state +- Girdiyi seçilen tarih durumuna geri yükle +- +- +- Delete selected history state +- Seçili geçmiÅŸ durumunu sil +- +- +- Delete all history +- Tüm geçmiÅŸi sil +- +- +- +- EditEntryWidgetMain +- +- URL: +- URL: +- +- +- Password: +- Parola: +- +- +- Title: +- BaÅŸlık: +- +- +- Presets +- ÖndeÄŸerler +- +- +- Toggle the checkbox to reveal the notes section. +- Notlar bölümünü göstermek için onay kutusunu deÄŸiÅŸtirin. +- +- +- Username: +- Kullanıcı adı: +- +- +- Url field +- URL alanı +- +- +- Download favicon for URL +- URL üstünden simge indir +- +- +- Password field +- Parola alanı +- +- +- Toggle notes visible +- Notların görünürlüğünü deÄŸiÅŸtirir +- +- +- Expiration field +- Son kullanma alanı +- +- +- Expiration Presets +- Son Kullanma Önayarları +- +- +- Expiration presets +- Son kullanma öntanımları +- +- +- Notes field +- Notlar alanı +- +- +- Title field +- BaÅŸlık alanı +- +- +- Username field +- Kullanıcı adı alanı +- +- +- Toggle expiration +- Son kullanma tarihi var / yok +- +- +- Notes: +- Notlar +- +- +- https://example.com +- https://example.com +- +- +- Expires: +- Son Kul.Tarihi: +- +- +- Edit Entry +- +- +- +- +- EditEntryWidgetSSHAgent +- +- Form +- Form +- +- +- Remove key from agent after +- Anahtarı istemciden sonra kaldır +- +- +- seconds +- saniye +- +- +- Fingerprint +- Parmak izi +- +- +- Remove key from agent when database is closed/locked +- Veritabanı kapalı/kilitliyken istemciden anahtarı kaldır +- +- +- Public key +- Genel anahtar +- +- +- Add key to agent when database is opened/unlocked +- Veritabanı kapalı/kilitliyken istemciye anahtar ekle +- +- +- Comment +- Yorum +- +- +- Decrypt +- Åžifreyi çöz +- +- +- n/a +- yok +- +- +- Copy to clipboard +- Panoya kopyala +- +- +- Private key +- Özel anahtar +- +- +- External file +- Harici dosya +- +- +- Browse... +- Button for opening file dialog +- Gözat... +- +- +- Attachment +- Dosya eki +- +- +- Add to agent +- Ä°stemciye ekle +- +- +- Remove from agent +- Ä°stemciden kaldır +- +- +- Require user confirmation when this key is used +- Bu tuÅŸ kullanıldığında kullanıcı onayı iste +- +- +- Remove key from agent after specified seconds +- Belirtilen saniye sonra anahtarı aracıdan kaldır +- +- +- Browser for key file +- Anahtar dosyasına göz at +- +- +- External key file +- Harici anahtar dosyası +- +- +- Select attachment file +- Ek dosyasını seç +- +- +- +- EditGroupWidget +- +- Group +- Küme +- +- +- Icon +- Simge +- +- +- Properties +- Özellikler +- +- +- Add group +- Küme ekle +- +- +- Edit group +- Kümeyi düzenle +- +- +- Enable +- EtkinleÅŸtir +- +- +- Disable +- Devre dışı +- +- +- Inherit from parent group (%1) +- Ãœst kümeden devral (%1) +- +- +- Entry has unsaved changes +- Girdi kaydedilmemiÅŸ deÄŸiÅŸikliklere sahip +- +- +- +- EditGroupWidgetKeeShare +- +- Type: +- Tür: +- +- +- Path: +- Yol: +- +- +- Password: +- Parola: +- +- +- Inactive +- Etkisiz +- +- +- KeeShare unsigned container +- KeeShare imzalanmamış konteyner +- +- +- KeeShare signed container +- KeeShare imzalanmış konteyner +- +- +- Select import source +- İçe aktarım kaynağını seç +- +- +- Select export target +- Dışa aktarma hedefini seç +- +- +- Select import/export file +- Aktarma dosyasını seç içe/dışa +- +- +- Clear +- Temizle +- +- +- Import +- İçe aktar +- +- +- Export +- Dışa aktar +- +- +- Synchronize +- EÅŸitle +- +- +- Your KeePassXC version does not support sharing this container type. +-Supported extensions are: %1. +- KeePassXC sürümü bu konteyner türünün paylaşılmasını desteklemiyor. +-Desteklenen eklentiler: %1. +- +- +- %1 is already being exported by this database. +- %1 zaten bu veritabanından dışarı verildi. +- +- +- %1 is already being imported by this database. +- %1 zaten bu veritabanına içeri alınmıştı. +- +- +- %1 is being imported and exported by different groups in this database. +- %1 bu veritabanındaki farklı gruplar tarafından içeri alınıyor ve dışarı veriliyor. +- +- +- KeeShare is currently disabled. You can enable import/export in the application settings. +- KeeShare is a proper noun +- KeeShare ÅŸu anda devre dışı, içe/dışa aktarmayı uygulama ayarlarından etkinleÅŸtirebilirsiniz. +- +- +- Database export is currently disabled by application settings. +- Veritabanı dışa aktarma uygulama ayarları tarafından devre dışı bırakıldı. +- +- +- Database import is currently disabled by application settings. +- Veritabanı içe aktarma uygulama ayarları tarafından devre dışı bırakıldı. +- +- +- Sharing mode field +- PaylaÅŸma kipi alanı +- +- +- Path to share file field +- Dosya paylaşım yolu +- +- +- Password field +- Parola alanı +- +- +- Clear fields +- Alanları temizle +- +- +- Browse for share file +- Paylaşılan dosyayı seç +- +- +- Browse... +- Gözat... +- +- +- +- EditGroupWidgetMain +- +- Name field +- Ä°sim alanı +- +- +- Notes field +- Notlar alanı +- +- +- Toggle expiration +- Son kullanma tarihi olsun / olmasın +- +- +- Auto-Type toggle for this and sub groups +- Bu ve alt gruplar için Otomatik Yazım geçiÅŸi +- +- +- Expiration field +- Son kullanma alanı +- +- +- Search toggle for this and sub groups +- Bu ve alt gruplar için arama seçimi +- +- +- Default auto-type sequence field +- Varsayılan oto-yazım sıralama alanı +- +- +- Expires: +- Son Kul.Tarihi: +- +- +- Use default Auto-Type sequence of parent group +- Ãœst grubun varsayılan oto-yazım sıralamasını kullan +- +- +- Auto-Type: +- Otomatik Yazım: +- +- +- Search: +- Ara: +- +- +- Notes: +- Notlar +- +- +- Name: +- Adı +- +- +- Set default Auto-Type sequence +- Varsayılan Oto-Yazım sırasını ayarla +- +- +- Edit Group +- +- +- +- +- EditWidgetIcons +- +- Add custom icon +- Özel simge ekle +- +- +- Delete custom icon +- Özel simgeyi sil +- +- +- Download favicon +- Simge indir +- +- +- Unable to fetch favicon. +- Simge getirilemedi. +- +- +- Images +- Resimler +- +- +- All files +- Tüm dosyalar +- +- +- Confirm Delete +- Silmeyi Onayla +- +- +- Select Image(s) +- Resim Seç +- +- +- Successfully loaded %1 of %n icon(s) +- %n simgesinin %1'i baÅŸarıyla yüklendi%n simgesinin %1'i baÅŸarıyla yüklendi +- +- +- No icons were loaded +- Hiçbir simge yüklenmedi +- +- +- %n icon(s) already exist in the database +- %n simgesi veritabanında zaten var%n simgesi veritabanında zaten var +- +- +- The following icon(s) failed: +- AÅŸağıdaki simge baÅŸarısız oldu:AÅŸağıdaki simge baÅŸarısız oldu: +- +- +- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? +- Bu simge %n giriÅŸi tarafından kullanılır ve öntanımlı simge ile deÄŸiÅŸtirilir. Silmek istediÄŸinize emin misiniz?Bu simge %n giriÅŸi tarafından kullanılır ve öntanımlı simge ile deÄŸiÅŸtirilir. Silmek istediÄŸinize emin misiniz? +- +- +- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security +- DuckDuckGo web sitesi simge hizmetini Araçlar -> Ayarlar -> Güvenlik altından etkinleÅŸtirebilirsiniz +- +- +- Download favicon for URL +- URL üstünden simge indir +- +- +- Apply selected icon to subgroups and entries +- Seçili simgeyi alt gruplara ve girdilere uygula +- +- +- Also apply to child groups +- Aynı zamanda ast gruplara uygula +- +- +- Also apply to child entries +- Aynı zamanda ast girdilere uygula +- +- +- Also apply to all children +- Aynı zamanda tüm astlara uygula +- +- +- Existing icon selected. +- Var olan simge seçildi. +- +- +- Use default icon +- Varsayılan simgeyi kullan +- +- +- Use custom icon +- Özel simge kullan +- +- +- Apply icon to... +- Simgeyi uygula... +- +- +- Apply to this group only +- Sadece bu gruba uygula +- +- +- +- EditWidgetProperties +- +- Created: +- OluÅŸturuldu: +- +- +- Modified: +- DeÄŸiÅŸtirildi: +- +- +- Accessed: +- EriÅŸildi: +- +- +- Uuid: +- Uuid: +- +- +- Plugin Data +- Eklenti Verisi +- +- +- Remove +- Kaldır +- +- +- Delete plugin data? +- Eklenti verisi silinsin mi? +- +- +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- Seçilen eklenti verilerini gerçekten silmek istiyor musunuz? +-Bu etkilenen eklentilerin bozulmasına neden olabilir. +- +- +- Key +- Anahtar +- +- +- Value +- DeÄŸer +- +- +- Datetime created +- OluÅŸturulma tarih saati +- +- +- Datetime modified +- Düzenlenme tarih saati +- +- +- Datetime accessed +- EriÅŸim tarih saati +- +- +- Unique ID +- Benzersiz ID +- +- +- Plugin data +- Eklenti verisi +- +- +- Remove selected plugin data +- Seçili eklenti verilerini kaldır +- +- +- +- Entry +- +- %1 - Clone +- %1 - Klon +- +- +- +- EntryAttachmentsModel +- +- Name +- Ad +- +- +- Size +- Boyut +- +- +- +- EntryAttachmentsWidget +- +- Form +- Form +- +- +- Add +- Ekle +- +- +- Remove +- Kaldır +- +- +- Open +- Aç +- +- +- Save +- Kaydet +- +- +- Select files +- Dosyaları seç +- +- +- Are you sure you want to remove %n attachment(s)? +- %n eki kaldırmak istediÄŸinize emin misiniz?%n eki kaldırmak istediÄŸinize emin misiniz? +- +- +- Save attachments +- Ekleri kaydet +- +- +- Unable to create directory: +-%1 +- Dizin oluÅŸturulamadı: +-%1 +- +- +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- Eki, var olan "%1" dosyasının üstüne yazmak istediÄŸinize emin misiniz? +- +- +- Confirm overwrite +- Ãœzerine yazımı onayla +- +- +- Unable to save attachments: +-%1 +- Ekler kaydedilemiyor: +-%1 +- +- +- Unable to open attachment: +-%1 +- Ek açılamıyor: +-%1 +- +- +- Unable to open attachments: +-%1 +- Açılamayan ekler: +-%1 +- +- +- Confirm remove +- Kaldırmayı onayla +- +- +- Unable to open file(s): +-%1 +- Dosyalar açılamıyor: +-%1Dosyalar açılamıyor: +-%1 +- +- +- Attachments +- Ekler +- +- +- Add new attachment +- Yeni ek ekle +- +- +- Remove selected attachment +- Seçili eki kaldır +- +- +- Open selected attachment +- Seçili eki aç +- +- +- Save selected attachment to disk +- Seçili eki diske kaydet +- +- +- %1 is a big file (%2 MB). +-Your database may get very large and reduce performance. +- +-Are you sure to add this file? +- %1 büyük bir dosya (%2 MB). +-Veritabanınız çok büyüyebilir ve performans düşebilir. +- +-Bu dosyayı eklemek istediÄŸinize emin misiniz? +- +- +- Confirm Attachment +- Dosya ekini onaylayın +- +- +- +- EntryAttributesModel +- +- Name +- Ad +- +- +- +- EntryHistoryModel +- +- Last modified +- Son deÄŸiÅŸtirilme +- +- +- Title +- BaÅŸlık +- +- +- Username +- Kullanıcı adı +- +- +- URL +- URL +- +- +- +- EntryModel +- +- Ref: +- Reference abbreviation +- Ref: +- +- +- Group +- Küme +- +- +- Title +- BaÅŸlık +- +- +- Username +- Kullanıcı adı +- +- +- URL +- URL +- +- +- Never +- Asla +- +- +- Password +- Parola +- +- +- Notes +- Notlar +- +- +- Expires +- Süre bitimi +- +- +- Created +- OluÅŸturuldu +- +- +- Modified +- Düzenlendi +- +- +- Accessed +- EriÅŸildi +- +- +- Attachments +- Ekler +- +- +- Size +- Boyut +- +- +- Group name +- Grup adı +- +- +- Entry title +- Girdi baÅŸlığı +- +- +- Entry notes +- Girdi notları +- +- +- Entry expires at +- Girdi son kullanma tarihi +- +- +- Creation date +- Yaratılma tarihi +- +- +- Last modification date +- Son deÄŸiÅŸiklik tarihi +- +- +- Last access date +- Son eriÅŸim tarihi +- +- +- Attached files +- Eklenen dosyalar +- +- +- Entry size +- Girdi byüklüğü +- +- +- Has attachments +- Eklentileri var +- +- +- Has TOTP one-time password +- TOTP tek kullanımlık parolası var +- +- +- +- EntryPreviewWidget +- +- Close +- Kapat +- +- +- General +- Genel +- +- +- Username +- Kullanıcı adı +- +- +- Password +- Parola +- +- +- Expiration +- Süre bitimi +- +- +- URL +- URL +- +- +- Attributes +- Öznitelikler +- +- +- Attachments +- Dosya ekleri +- +- +- Notes +- Notlar +- +- +- Autotype +- Otomatik yazım +- +- +- Window +- Pencere +- +- +- Sequence +- Sıra +- +- +- Searching +- Aranıyor +- +- +- Search +- Ara +- +- +- Clear +- Temizle +- +- +- Never +- Asla +- +- +- [PROTECTED] +- [KORUMALI] +- +- +- Enabled +- Etkin +- +- +- Disabled +- Devre dışı +- +- +- Share +- PaylaÅŸ +- +- +- Display current TOTP value +- Geçerli TOTP deÄŸerini göster +- +- +- Advanced +- GeliÅŸmiÅŸ +- +- +- Default Sequence +- +- +- +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- attributes line +- +- +- +- +- EntryURLModel +- +- Invalid URL +- Geçersiz URL +- +- +- +- EntryView +- +- Fit to window +- Pencereye sığdır +- +- +- Fit to contents +- İçeriklere sığdır +- +- +- Reset to defaults +- Öntanımlılara sıfırla +- +- +- Has attachments +- Entry attachment icon toggle +- Eklentileri var +- +- +- Has TOTP +- Entry TOTP icon toggle +- TOTP si var +- +- +- +- FdoSecrets::Item +- +- Entry "%1" from database "%2" was used by %3 +- "%2" veritabanındaki "%1" girdisi "%3" tarafından kullanıldı +- +- +- +- FdoSecrets::Service +- +- Failed to register DBus service at %1.<br/> +- %1 deki DBus servisi tescil edilemedi.<br/> +- +- +- %n Entry(s) was used by %1 +- %1 is the name of an application +- %n Girdi %1 tarafından kullanıldı%n Girdi %1 tarafından kullanıldı +- +- +- +- FdoSecrets::SettingsDatabaseModel +- +- File Name +- Dosya Adı +- +- +- Group +- Küme +- +- +- Manage +- Yönetim +- +- +- Unlock to show +- Göstermek için kilidi aç +- +- +- None +- Yok +- +- +- +- FdoSecrets::SettingsSessionModel +- +- Application +- Uygulama +- +- +- Manage +- Yönetim +- +- +- +- FdoSecretsPlugin +- +- <b>Fdo Secret Service:</b> %1 +- <b>Fdo Gizli Servisi:</b> %1 +- +- +- Unknown +- Unknown PID +- Bilinmeyen +- +- +- Unknown +- Unknown executable path +- Bilinmeyen +- +- +- <i>PID: %1, Executable: %2</i> +- <i>PID: 1234, Executable: /path/to/exe</i> +- <i>PID: %1, Çalıştırılabilir: %2</i> +- +- +- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. +- BaÅŸka bir gizli servis çalışıyor (%1).<br/>Gizli Servis BütünleÅŸmesini tekrar etkinleÅŸtirmeden önce bunu durdurun/kaldırın. +- +- +- +- Group +- +- [empty] +- group has no children +- [boÅŸ] +- +- +- +- HibpDownloader +- +- Online password validation failed +- Çevrimiçi parola onaylanması hata verdi +- +- +- +- IconDownloaderDialog +- +- Download Favicons +- Simge Ä°ndir +- +- +- Cancel +- Ä°ptal +- +- +- Having trouble downloading icons? +-You can enable the DuckDuckGo website icon service in the security section of the application settings. +- Simgeleri indirmede sorun mu yaşıyorsunuz? +-DuckDuckGo web sitesi simge servisini uygulama ayarlarının güvenlik bölümünden etkinleÅŸtirin. +- +- +- Close +- Kapat +- +- +- URL +- URL +- +- +- Status +- Durum +- +- +- Please wait, processing entry list... +- Lütfen bekleyin, girdi listesi iÅŸleniyor... +- +- +- Downloading... +- Ä°ndiriliyor... +- +- +- Ok +- Tamam +- +- +- Already Exists +- Zaten Var +- +- +- Download Failed +- Ä°ndirme BaÅŸarısız +- +- +- Downloading favicons (%1/%2)... +- Simgeler indiriliyor (%1/%2)... +- +- +- +- KMessageWidget +- +- &Close +- &Kapat +- +- +- Close message +- Ä°letiyi kapat +- +- +- +- Kdbx3Reader +- +- missing database headers +- eksik veritabanı baÅŸlıkları +- +- +- Header doesn't match hash +- BaÅŸlık saÄŸlama ile eÅŸleÅŸmiyor +- +- +- Invalid header id size +- Geçersiz baÅŸlık kimliÄŸi boyutu +- +- +- Invalid header field length +- Geçersiz baÅŸlık alanı geniÅŸliÄŸi +- +- +- Invalid header data length +- Geçersiz baÅŸlık veri geniÅŸliÄŸi +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Geçersiz kimlik bilgileri saÄŸlandı, lütfen tekrar deneyin. +-Bu yeniden oluÅŸursa, veritabanı dosyanız bozuk olabilir. +- +- +- Unable to calculate database key +- Veritabanı anahtarı hesaplanamadı +- +- +- Unable to issue challenge-response: %1 +- Zorluk-tepki gerçekleÅŸtirilemiyor: %1 +- +- +- +- Kdbx3Writer +- +- Unable to issue challenge-response: %1 +- Zorluk-tepki gerçekleÅŸtirilemiyor: %1 +- +- +- Unable to calculate database key +- Veritabanı anahtarı hesaplanamadı +- +- +- +- Kdbx4Reader +- +- missing database headers +- eksik veritabanı baÅŸlıkları +- +- +- Invalid header checksum size +- Geçersiz baÅŸlık dosya özeti boyutu +- +- +- Header SHA256 mismatch +- BaÅŸlık SHA256 verisi uyuÅŸmuyor +- +- +- Unknown cipher +- Bilinmeyen ÅŸifreleme +- +- +- Invalid header id size +- Geçersiz baÅŸlık kimliÄŸi boyutu +- +- +- Invalid header field length +- Geçersiz baÅŸlık alanı uzunluÄŸu +- +- +- Invalid header data length +- Geçersiz baÅŸlık veri geniÅŸliÄŸi +- +- +- Failed to open buffer for KDF parameters in header +- Ãœstbilgideki KDF parametreleri için arabellek açılamadı +- +- +- Unsupported key derivation function (KDF) or invalid parameters +- Desteklenmeyen anahtar türetme iÅŸlevi (KDF) veya geçersiz parametreler +- +- +- Legacy header fields found in KDBX4 file. +- KDBX4 dosyasında eski baÅŸlık alanları bulundu. +- +- +- Invalid inner header id size +- Geçersiz iç baÅŸlık kimlik boyutu +- +- +- Invalid inner header field length +- Geçersiz iç baÅŸlık alanı uzunluÄŸu +- +- +- Invalid inner header binary size +- Geçersiz iç baÅŸlık ikili boyutu +- +- +- Unsupported KeePass variant map version. +- Translation: variant map = data structure for storing meta data +- Desteklenmeyen KeePass deÄŸiÅŸken harita sürümü. +- +- +- Invalid variant map entry name length +- Translation: variant map = data structure for storing meta data +- Geçersiz deÄŸiÅŸken harita girdi adı uzunluÄŸu +- +- +- Invalid variant map entry name data +- Translation: variant map = data structure for storing meta data +- Geçersiz deÄŸiÅŸken harita girdi adı verisi +- +- +- Invalid variant map entry value length +- Translation: variant map = data structure for storing meta data +- Geçersiz deÄŸiÅŸken harita girdi deÄŸeri uzunluÄŸu +- +- +- Invalid variant map entry value data +- Translation comment: variant map = data structure for storing meta data +- Geçersiz deÄŸiÅŸken harita girdi deÄŸeri verisi +- +- +- Invalid variant map Bool entry value length +- Translation: variant map = data structure for storing meta data +- Geçersiz deÄŸiÅŸken harita Bool girdi deÄŸeri uzunluÄŸu +- +- +- Invalid variant map Int32 entry value length +- Translation: variant map = data structure for storing meta data +- Geçersiz deÄŸiÅŸken harita Int32 girdi deÄŸeri uzunluÄŸu +- +- +- Invalid variant map UInt32 entry value length +- Translation: variant map = data structure for storing meta data +- Geçersiz deÄŸiÅŸken harita UInt32 girdi deÄŸeri uzunluÄŸu +- +- +- Invalid variant map Int64 entry value length +- Translation: variant map = data structure for storing meta data +- Geçersiz deÄŸiÅŸken harita Int64 girdi deÄŸeri uzunluÄŸu +- +- +- Invalid variant map UInt64 entry value length +- Translation: variant map = data structure for storing meta data +- Geçersiz deÄŸiÅŸken harita UInt64 girdi deÄŸeri uzunluÄŸu +- +- +- Invalid variant map entry type +- Translation: variant map = data structure for storing meta data +- Geçersiz deÄŸiÅŸken harita girdi türü +- +- +- Invalid variant map field type size +- Translation: variant map = data structure for storing meta data +- Geçersiz deÄŸiÅŸken harita alan tipi boyutu +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Geçersiz kimlik bilgileri saÄŸlandı, lütfen tekrar deneyin. +-Bu yeniden oluÅŸursa, veritabanı dosyanız bozuk olabilir. +- +- +- (HMAC mismatch) +- (HMAC uyumsuzluÄŸu) +- +- +- Unable to calculate database key: %1 +- Veritabanı anahtarı hesaplanamıyor: %1 +- +- +- +- Kdbx4Writer +- +- Invalid symmetric cipher algorithm. +- Geçersiz simetrik ÅŸifreleme algoritması. +- +- +- Invalid symmetric cipher IV size. +- IV = Initialization Vector for symmetric cipher +- Geçersiz simetrik ÅŸifreleme IV boyutu. +- +- +- Failed to serialize KDF parameters variant map +- Translation comment: variant map = data structure for storing meta data +- KDF parametreleri deÄŸiÅŸken haritası serileÅŸtirme baÅŸarısız +- +- +- Unable to calculate database key: %1 +- Veritabanı anahtarı hesaplanamıyor: %1 +- +- +- +- KdbxReader +- +- Unsupported cipher +- Desteklenmeyen ÅŸifreleme +- +- +- Invalid compression flags length +- Geçersiz sıkıştırma bayrakları uzunluÄŸu +- +- +- Unsupported compression algorithm +- Desteklenmeyen sıkıştırma algoritması +- +- +- Invalid master seed size +- Geçersiz ana çekirdek boyutu +- +- +- Invalid transform seed size +- Geçersiz dönüşüm çekirdek boyutu +- +- +- Invalid transform rounds size +- Geçersiz dönüşüm turu boyutu +- +- +- Invalid start bytes size +- Geçersiz baÅŸlangıç bayt boyutu +- +- +- Invalid random stream id size +- Geçersiz rastgele akış kimliÄŸi boyutu +- +- +- Invalid inner random stream cipher +- Geçersiz dahili rastgele akış ÅŸifrelemesi +- +- +- Not a KeePass database. +- KeePass veritabanı deÄŸil. +- +- +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- Seçilen dosya eski bir KeePass1 veritabanıdır (.kdb). +- +-Veritabanı > 'KeePass1 veritabanı içe aktar...' üzerine tıklayarak içe aktarabilirsiniz. +-Bu tek yönlü bir yer deÄŸiÅŸtirmedir. İçe aktarılan veritabanını eski KeePassX 0.4 sürümüyle açamayacaksınız. +- +- +- Unsupported KeePass 2 database version. +- Desteklenmeyen KeePass 2 veritabanı sürümü. +- +- +- Invalid cipher uuid length: %1 (length=%2) +- Geçersiz ÅŸifreleme UUID uzunluÄŸu: %1 (uzunluk=%2) +- +- +- Unable to parse UUID: %1 +- UUID ayrıştırılamadı: %1 +- +- +- Failed to read database file. +- Veritabanı dosyası okunamadı. +- +- +- +- KdbxXmlReader +- +- XML parsing failure: %1 +- XML ayrıştırma baÅŸarısız: %1 +- +- +- No root group +- Kök küme yok +- +- +- Missing icon uuid or data +- Uuid simgesi veya veri eksik +- +- +- Missing custom data key or value +- Özel veri anahtarı veya deÄŸeri eksik +- +- +- Multiple group elements +- Çoklu küme elementleri +- +- +- Null group uuid +- BoÅŸ küme uuid +- +- +- Invalid group icon number +- Geçersiz küme simge numarası +- +- +- Invalid EnableAutoType value +- Geçersiz Otomatik Yazım EtkinleÅŸtirme deÄŸeri +- +- +- Invalid EnableSearching value +- Geçersiz Arama Etkin deÄŸeri +- +- +- No group uuid found +- Kümede uuid bulunamadı +- +- +- Null DeleteObject uuid +- BoÅŸ "DeleteObject" UUID +- +- +- Missing DeletedObject uuid or time +- SilinmiÅŸNesne uuid veya zamanı eksik +- +- +- Null entry uuid +- BoÅŸ uuid girdisi +- +- +- Invalid entry icon number +- Geçersiz simge numarası girdisi +- +- +- History element in history entry +- GeçmiÅŸ girdisinde geçmiÅŸ element +- +- +- No entry uuid found +- Uuid girdisi bulunamadı +- +- +- History element with different uuid +- Farklı uuid ile geçmiÅŸ ögesi +- +- +- Duplicate custom attribute found +- Yinelenen özel öznitelik bulundu +- +- +- Entry string key or value missing +- GiriÅŸ dizesi anahtarı veya deÄŸeri eksik +- +- +- Entry binary key or value missing +- Girdi ikili anahtarı veya deÄŸeri eksik +- +- +- Auto-type association window or sequence missing +- Otomatik Yazım iliÅŸkilendirme penceresi veya sırası eksik +- +- +- Invalid bool value +- Geçersiz bool deÄŸeri +- +- +- Invalid date time value +- Geçersiz tarih zaman deÄŸeri +- +- +- Invalid color value +- Geçersiz renk deÄŸeri +- +- +- Invalid color rgb part +- Geçersiz rgb renk parçası +- +- +- Invalid number value +- Geçersiz sayı deÄŸeri +- +- +- Invalid uuid value +- Geçersiz uuid deÄŸeri +- +- +- Unable to decompress binary +- Translator meant is a binary data inside an entry +- Ä°kili dosya sıkıştırması açılamıyor +- +- +- XML error: +-%1 +-Line %2, column %3 +- XML hatası: +-%1 +-Satır %2, sütun %3 +- +- +- +- KeeAgentSettings +- +- Invalid KeeAgent settings file structure. +- Geçersiz KeeAgent ayar dosyası yapısı. +- +- +- Private key is an attachment but no attachments provided. +- Özel anahtar bir dosya eki ama hiç bir dosya eki saÄŸlanmadı. +- +- +- Private key is empty +- Özel anahtar boÅŸ +- +- +- File too large to be a private key +- Dosya bir özel anahtar olmak için çok büyük +- +- +- Failed to open private key +- Özel anahtarı açma baÅŸarısız +- +- +- +- KeePass1OpenWidget +- +- Unable to open the database. +- Veritabanı açılamıyor. +- +- +- Import KeePass1 Database +- KeePass1 veritabanı içe aktar +- +- +- +- KeePass1Reader +- +- Unable to read keyfile. +- Anahtar dosyası okunamıyor. +- +- +- Not a KeePass database. +- KeePass veritabanı deÄŸil. +- +- +- Unsupported encryption algorithm. +- Desteklenmeyen ÅŸifreleme algoritması. +- +- +- Unsupported KeePass database version. +- Desteklenmeyen KeePass veritabanı sürümü. +- +- +- Unable to read encryption IV +- IV = Initialization Vector for symmetric cipher +- Åžifreleme IV okunamadı +- +- +- Invalid number of groups +- Geçersiz küme numarası +- +- +- Invalid number of entries +- Geçersiz giriÅŸ numarası +- +- +- Invalid content hash size +- Geçersiz içerik karma boyutu +- +- +- Invalid transform seed size +- Geçersiz dönüşüm çekirdek boyutu +- +- +- Invalid number of transform rounds +- Geçersiz dönüşüm turu sayısı +- +- +- Unable to construct group tree +- Küme aÄŸacı oluÅŸturulamadı +- +- +- Root +- Kök +- +- +- Key transformation failed +- Anahtar dönüştürme baÅŸarısız +- +- +- Invalid group field type number +- Geçersiz küme alanı türü numarası +- +- +- Invalid group field size +- Geçersiz küme alanı boyutu +- +- +- Read group field data doesn't match size +- Okuma kümesi alanı verileri boyutla eÅŸleÅŸmiyor +- +- +- Incorrect group id field size +- Hatalı küme kimliÄŸi alan boyutu +- +- +- Incorrect group creation time field size +- Hatalı küme oluÅŸturma zaman alanı boyutu +- +- +- Incorrect group modification time field size +- Hatalı küme deÄŸiÅŸiklik zaman alanı boyutu +- +- +- Incorrect group access time field size +- Hatalı küme eriÅŸim zamanı alan boyutu +- +- +- Incorrect group expiry time field size +- Hatalı küme zaman aşımı alan boyutu +- +- +- Incorrect group icon field size +- Geçersiz küme simge alanı boyutu +- +- +- Incorrect group level field size +- Geçersiz küme seviye alanı boyutu +- +- +- Invalid group field type +- Geçersiz küme alanı tipi +- +- +- Missing group id or level +- Eksik küme kimliÄŸi veya seviyesi +- +- +- Missing entry field type number +- Eksik girdi alanı tipi numarası +- +- +- Invalid entry field size +- Geçersiz girdi alanı boyutu +- +- +- Read entry field data doesn't match size +- GiriÅŸ alan verisi okuma boyutuyla eÅŸleÅŸmiyor +- +- +- Invalid entry uuid field size +- Geçersiz girdi UUID alan boyutu +- +- +- Invalid entry group id field size +- Geçersiz küme kimliÄŸi alan boyutu girdisi +- +- +- Invalid entry icon field size +- Geçersiz giriÅŸ simgesi alan boyutu +- +- +- Invalid entry creation time field size +- Geçersiz giriÅŸ oluÅŸturma zamanı alan boyutu +- +- +- Invalid entry modification time field size +- Geçersiz giriÅŸ deÄŸiÅŸtirme zamanı alan boyutu +- +- +- Invalid entry expiry time field size +- Geçersiz giriÅŸ süre sonu alan boyutu +- +- +- Invalid entry field type +- Geçersiz girdi alanı tipi +- +- +- unable to seek to content position +- içerik konumuna ulaşılamıyor +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Geçersiz kimlik bilgileri saÄŸlandı, lütfen tekrar deneyin. +-Bu yeniden oluÅŸursa, veritabanı dosyanız bozuk olabilir. +- +- +- Unable to calculate database key +- Veritabanı anahtarı hesaplanamadı +- +- +- +- KeeShare +- +- Invalid sharing reference +- Geçersiz paylaşım referansı +- +- +- Inactive share %1 +- Etkin olmayan paylaşım %1 +- +- +- Imported from %1 +- %1 den içe aktarıldı +- +- +- Exported to %1 +- %1 klasörüne aktarıldı +- +- +- Synchronized with %1 +- %1 ile eÅŸitlendi +- +- +- Import is disabled in settings +- Ayarlarda içe aktarma devre dışı +- +- +- Export is disabled in settings +- Ayarlarda dışa aktarma devre dışı +- +- +- Inactive share +- Etkin olmayan paylaşım +- +- +- Imported from +- İçe aktarıldı +- +- +- Exported to +- Dışa aktarıldı +- +- +- Synchronized with +- EÅŸitlendi +- +- +- +- KeyComponentWidget +- +- Key Component +- Anahtar BileÅŸen +- +- +- Key Component Description +- Anahtar BileÅŸen Açıklaması +- +- +- Cancel +- Ä°ptal +- +- +- Key Component set, click to change or remove +- Anahtar BileÅŸen seti, deÄŸiÅŸtirmek veya kaldırmak için tıkla +- +- +- Add %1 +- Add a key component +- Ekle %1 +- +- +- Change %1 +- Change a key component +- DeÄŸiÅŸtir %1 +- +- +- Remove %1 +- Remove a key component +- Kaldır %1 +- +- +- %1 set, click to change or remove +- Change or remove a key component +- %1 ayarlı, deÄŸiÅŸtirmek veya kaldırmak için tıkla +- +- +- +- KeyFileEditWidget +- +- Generate +- OluÅŸtur +- +- +- Key File +- Anahtar Dosyası +- +- +- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> +- <p>Ek güvenlik için rasgele bayt içeren bir anahtar dosyası ekleyebilirsiniz.</p><p>Gizli tutmalı ve asla kaybetmemelisin yoksa kilitleneceksin!</p> +- +- +- Error loading the key file '%1' +-Message: %2 +- '%1' anahtar dosyası yüklenirken hata +-Ä°leti: %2 +- +- +- Key files +- Anahtar dosyaları +- +- +- All files +- Tüm dosyalar +- +- +- Create Key File... +- Anahtar Dosyası OluÅŸtur... +- +- +- Error creating key file +- Anahtar dosyası oluÅŸturulurken hata +- +- +- Unable to create key file: %1 +- Anahtar dosyası oluÅŸturulamıyor: %1 +- +- +- Select a key file +- Bir anahtar dosyası seç +- +- +- Key file selection +- Anahtar dosya seçimi +- +- +- Browse for key file +- Anahtar dosyasına göz at +- +- +- Browse... +- Gözat... +- +- +- Generate a new key file +- Yeni anahtar dosyası oluÅŸtur +- +- +- Note: Do not use a file that may change as that will prevent you from unlocking your database! +- Not: Veritabanınızın kilidini açmanızı engelleyeceÄŸi için deÄŸiÅŸebilecek bir dosya kullanmayın! +- +- +- Invalid Key File +- Geçersiz Anahtar Dosyası +- +- +- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. +- Mevcut veritabanını kendi anahtar dosyası olarak kullanamazsınız. Lütfen farklı bir dosya seçin veya yeni bir anahtar dosyası oluÅŸturun. +- +- +- Suspicious Key File +- Şüpheli Anahtar Dosyası +- +- +- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. +-Are you sure you want to continue with this file? +- Seçilen anahtar dosyası bir parola veritabanı dosyasına benziyor. Anahtar dosya, deÄŸiÅŸmeyen statik bir dosya olmalıdır, aksi takdirde veritabanınıza sonsuza kadar eriÅŸiminizi kaybedersiniz. +-Bu dosyaya devam etmek istediÄŸinizden emin misiniz? +- +- +- Old key file format +- +- +- +- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. +- +- +- +- +- MainWindow +- +- &Database +- &Veritabanı +- +- +- &Help +- &Yardım +- +- +- &Groups +- &Kümeler +- +- +- &Tools +- &Araçlar +- +- +- &Quit +- &Çık +- +- +- &About +- &Hakkında +- +- +- Database settings +- Veritabanı ayarları +- +- +- Copy username to clipboard +- Kullanıcı adını panoya kopyala +- +- +- Copy password to clipboard +- Parolayı panoya kopyala +- +- +- &Settings +- &Ayarlar +- +- +- &Title +- &BaÅŸlık +- +- +- Copy title to clipboard +- BaÅŸlığı panoya kopyala +- +- +- &URL +- &URL +- +- +- Copy URL to clipboard +- URL'yi panoya kopyala +- +- +- &Notes +- &Notlar +- +- +- Copy notes to clipboard +- Notları panoya kopyala +- +- +- Copy &TOTP +- &TOTP'yi kopyala +- +- +- E&mpty recycle bin +- Geri dönüşüm kutusunu b&oÅŸalt +- +- +- Clear history +- GeçmiÅŸi temizle +- +- +- Access error for config file %1 +- Yapılandırma dosyası için eriÅŸim hatası %1 +- +- +- Settings +- Ayarlar +- +- +- Toggle window +- Pencereyi aç/kapa +- +- +- Quit KeePassXC +- KeePassXC'den Çık +- +- +- Please touch the button on your YubiKey! +- Lütfen YubiKey'inizdeki düğmeye dokunun! +- +- +- WARNING: You are using an unstable build of KeePassXC! +-There is a high risk of corruption, maintain a backup of your databases. +-This version is not meant for production use. +- UYARI: KeePassXC'nin kararsız inÅŸasını kullanıyorsunuz! +-Yüksek bozulma tehlikesi bulunmaktadır, veri tabanlarınızın yedeÄŸini alın. +-Bu sürüm, üretimde kullanıma uygun deÄŸildir. +- +- +- &Donate +- &Bağış +- +- +- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +-We recommend you use the AppImage available on our downloads page. +- Uyarı: Qt sürümünüz Keepassxc'nin ekran klavyesiyle çökmesine neden olabilir! +-Keepassxc indirme sayfasında mevcut Appımage kullanmanızı öneririz. +- +- +- &Import +- &İçe Aktar +- +- +- Create a new database +- Yeni veritabanı oluÅŸtur +- +- +- Merge from another KDBX database +- BaÅŸka bir KDBX veritabanından birleÅŸtir +- +- +- Add a new entry +- Yeni girdi ekle +- +- +- View or edit entry +- Girdiyi görüntüle veya düzenle +- +- +- Add a new group +- Yeni bir küme ekle +- +- +- Perform &Auto-Type +- &Otomatik Yazım GerçekleÅŸtir +- +- +- Open &URL +- URL'yi &Aç +- +- +- Import a KeePass 1 database +- KeePass 1 veritabanını içe aktar +- +- +- Import a CSV file +- CSV dosyasını içe aktar +- +- +- NOTE: You are using a pre-release version of KeePassXC! +-Expect some bugs and minor issues, this version is not meant for production use. +- NOT: KeePassXC'nin yayın öncesi bir sürümünü kullanıyorsunuz! +-Bazı hatalar ve küçük sorunlar olabilir, bu sürüm ÅŸu an dağıtımda deÄŸildir. +- +- +- Check for updates on startup? +- BaÅŸlangıçta güncellemeleri kontrol et? +- +- +- Would you like KeePassXC to check for updates on startup? +- KeePassXC'in baÅŸlangıçta güncellemeleri kontrol etmesini ister misiniz? +- +- +- You can always check for updates manually from the application menu. +- Güncellemeleri her zaman elle uygulama menüsünden kontrol edebilirsiniz. +- +- +- &Export +- Dışa &Aktar +- +- +- Sort &A-Z +- Sırala &A-Z +- +- +- Sort &Z-A +- Sırala &Z-A +- +- +- &Password Generator +- &Parola OluÅŸturucu +- +- +- Import a 1Password Vault +- Bir 1Password kasasını içeri al +- +- +- &Getting Started +- &BaÅŸlangıç +- +- +- &User Guide +- &Kullanıcı Rehberi +- +- +- &Keyboard Shortcuts +- &Klavye Kısayolları +- +- +- &Recent Databases +- &GeçmiÅŸ Veritabanları +- +- +- &Entries +- &Girdiler +- +- +- Copy Att&ribute +- &ÖzniteliÄŸi Kopyala +- +- +- TOTP +- TOTP +- +- +- View +- Görünüm +- +- +- Theme +- Tema +- +- +- &Check for Updates +- &Güncellemeleri Denetle +- +- +- &Open Database… +- &Veritabanı Aç... +- +- +- &Save Database +- &Veritabanını Kaydet +- +- +- &Close Database +- &Veritabanını Kapat +- +- +- &New Database… +- &Yeni Veritabanı... +- +- +- &Merge From Database… +- &Veritabanından BirleÅŸtir... +- +- +- &New Entry… +- &Yeni Girdi... +- +- +- &Edit Entry… +- &Girdiyi Düzenle... +- +- +- &Delete Entry… +- &Girdiyi Sil... +- +- +- &New Group… +- &Yeni Küme... +- +- +- &Edit Group… +- &Kümeyi Düzenle... +- +- +- &Delete Group… +- &Kümeyi Sil... +- +- +- Download All &Favicons… +- &Tüm Simgeleri Ä°ndir... +- +- +- Sa&ve Database As… +- &Veritabanını Farklı Kaydet... +- +- +- Database &Security… +- &Veritabanı GüvenliÄŸi... +- +- +- Database &Reports... +- &Veritabanı Raporları... +- +- +- Statistics, health check, etc. +- Ä°statistikler, saÄŸlık kontrolü vb. +- +- +- &Database Settings… +- &Veritabanı Ayarları… +- +- +- &Clone Entry… +- &Girdiyi Klonla... +- +- +- Move u&p +- &Yukarı taşı +- +- +- Move entry one step up +- Girdiyi bir adım yukarı taşı +- +- +- Move do&wn +- &AÅŸağı taşı +- +- +- Move entry one step down +- Girdiyi bir adım aÅŸağı taşı +- +- +- Copy &Username +- &Kullanıcı Adını Kopyala +- +- +- Copy &Password +- &Parolayı Kopyala +- +- +- Download &Favicon +- &Simge Ä°ndir +- +- +- &Lock Databases +- &Veritabanlarını Kilitle +- +- +- &CSV File… +- &CSV Dosyası... +- +- +- &HTML File… +- &HTML Dosyası... +- +- +- KeePass 1 Database… +- KeePass 1 Veritabanı... +- +- +- 1Password Vault… +- 1Password Kasası... +- +- +- CSV File… +- CSV Dosyası... +- +- +- Show TOTP +- ZTSP'yi göster +- +- +- Show QR Code +- QR Kodunu Göster +- +- +- Set up TOTP… +- TOTP Ayarla... +- +- +- Report a &Bug +- Hata &Bildir +- +- +- Open Getting Started Guide +- BaÅŸlangıç Klavuzunu aç +- +- +- &Online Help +- &Çevrimiçi Yardım +- +- +- Go to online documentation +- Çevrimiçi Belgelere git +- +- +- Open User Guide +- Kullanıcı Klavuzunu aç +- +- +- Save Database Backup... +- Veritabanı YedeÄŸini Kaydet... +- +- +- Add key to SSH Agent +- SSH Vekiline bir anahtar ekle +- +- +- Remove key from SSH Agent +- SSH Vekilinden bir anahtarı sil +- +- +- Compact Mode +- Küçültülmüş Kip +- +- +- Automatic +- Otomatik +- +- +- Light +- Açık +- +- +- Dark +- Koyu +- +- +- Classic (Platform-native) +- Klasik (DoÄŸal sistem) +- +- +- Show Toolbar +- Araç ÇubuÄŸunu Göster +- +- +- Show Preview Panel +- Önizleme Panelini Göster +- +- +- Don't show again for this version +- Bu sürüm için bir daha gösterme +- +- +- Restart Application? +- Uygulamayı yeniden baÅŸlat? +- +- +- You must restart the application to apply this setting. Would you like to restart now? +- Bu ayarı uygulamak için uygulamayı yeniden baÅŸlatmalısınız. Åžimdi uygulamayı yeniden baÅŸlatmak ister misiniz ? +- +- +- Perform Auto-Type Sequence +- Otomatik Yazım Sırası +- +- +- {USERNAME} +- {KULLANICI ADI} +- +- +- {USERNAME}{ENTER} +- {KULLANICI ADI}{ENTER} +- +- +- {PASSWORD} +- {PAROLA} +- +- +- {PASSWORD}{ENTER} +- {PAROLA}{ENTER} +- +- +- Always on Top +- +- +- +- Hide Usernames +- Kullanıcı Adlarını Gizle +- +- +- Hide Passwords +- Parolaları Gizle +- +- +- +- ManageDatabase +- +- Database settings +- Veritabanı ayarları +- +- +- Edit database settings +- Veritabanı ayarlarını düzenle +- +- +- Unlock database +- Veritabanı kilidini kaldır +- +- +- Unlock database to show more information +- Daha fazla bilgi göstermek için veritabanı kilidini aç +- +- +- Lock database +- Veritabanını kilitle +- +- +- +- ManageSession +- +- Disconnect +- BaÄŸlantıyı kes +- +- +- Disconnect this application +- Bu uygulamanın baÄŸlanntısını kes +- +- +- +- Merger +- +- Creating missing %1 [%2] +- Eksik oluÅŸturuluyor %1 [%2] +- +- +- Relocating %1 [%2] +- Taşınıyor %1 [%2] +- +- +- Overwriting %1 [%2] +- Ãœzerine yazılıyor %1 [%2] +- +- +- older entry merged from database "%1" +- eski girdi "%1" veritabanıyla birleÅŸtirildi +- +- +- Adding backup for older target %1 [%2] +- Eski hedef için yedekleme ekle %1 [%2] +- +- +- Adding backup for older source %1 [%2] +- Eski kaynak için yedekleme ekle %1 [%2] +- +- +- Reapplying older target entry on top of newer source %1 [%2] +- Eski hedef giriÅŸini yeni kaynağın üstüne yeniden uygula %1 [%2] +- +- +- Reapplying older source entry on top of newer target %1 [%2] +- Eski kaynak giriÅŸini yeni hedefin üstüne yeniden uygulama %1 [%2] +- +- +- Synchronizing from newer source %1 [%2] +- Yeni kaynaktan eÅŸitle %1 [%2] +- +- +- Synchronizing from older source %1 [%2] +- Eski kaynaktan eÅŸitle %1 [%2] +- +- +- Deleting child %1 [%2] +- Alt giriÅŸler siliniyor %1 [%2] +- +- +- Deleting orphan %1 [%2] +- Sahipsizler siliniyor %1 [%2] +- +- +- Changed deleted objects +- DeÄŸiÅŸtirilen silinmiÅŸ nesneler +- +- +- Adding missing icon %1 +- Eksik simge ekleniyor %1 +- +- +- Removed custom data %1 [%2] +- Özel veri kaldırıldı %1 [%2] +- +- +- Adding custom data %1 [%2] +- Özel veri eklendi %1 [%2] +- +- +- +- NewDatabaseWizard +- +- Create a new KeePassXC database... +- Yeni bir KeePassXC veritabanı oluÅŸtur... +- +- +- Root +- Root group +- Kök +- +- +- +- NewDatabaseWizardPage +- +- WizardPage +- SayfaSihirbazı +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Burada veritabanı ÅŸifreleme ayarlarını düzenleyebilirsiniz. EndiÅŸelenmeyin, bunları daha sonra veritabanı ayarlarında deÄŸiÅŸtirebilirsiniz. +- +- +- Advanced Settings +- GeliÅŸmiÅŸ Ayarlar +- +- +- Simple Settings +- Temel Ayarlar +- +- +- Encryption Settings +- Åžifreleme Ayarları +- +- +- +- NewDatabaseWizardPageDatabaseKey +- +- Database Credentials +- Veritabanı Kimlik Bilgileri +- +- +- A set of credentials known only to you that protects your database. +- Veritabanınızı koruyan, sadece sizce bilinen bir grup kimlik bilgisi +- +- +- +- NewDatabaseWizardPageEncryption +- +- Encryption Settings +- Åžifreleme Ayarları +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Burada veritabanı ÅŸifreleme ayarlarını düzenleyebilirsiniz. EndiÅŸelenmeyin, bunları daha sonra veritabanı ayarlarında deÄŸiÅŸtirebilirsiniz. +- +- +- +- NewDatabaseWizardPageMetaData +- +- General Database Information +- Genel Veritabanı Bilgileri +- +- +- Please fill in the display name and an optional description for your new database: +- Lütfen yeni veritabanı için görünen bir isim ve isteÄŸe baÄŸlı bir açıklama girin: +- +- +- +- NixUtils +- +- Password Manager +- Parola Yönetici +- +- +- +- OpData01 +- +- Invalid OpData01, does not contain header +- Geçersiz OpData01, baÅŸlık içermiyor +- +- +- Unable to read all IV bytes, wanted 16 but got %1 +- Tüm IV baytları okunamadı, 16 istendi ama %1 alındı +- +- +- Unable to init cipher for opdata01: %1 +- opdata01 için ÅŸifreleme baÅŸlatılamıyor: %1 +- +- +- Unable to read all HMAC signature bytes +- Tüm HMAC imza bayları okunamadı +- +- +- Malformed OpData01 due to a failed HMAC +- Hatalı HMAC yüzünden OpData01 kusurlu +- +- +- Unable to process clearText in place +- Bulunulan yerde clearText komutu çalıştırılamıyor +- +- +- Expected %1 bytes of clear-text, found %2 +- %1 bayt boÅŸ-yazı bekleniyordu, %2 bulundu +- +- +- +- OpVaultOpenWidget +- +- Read Database did not produce an instance +-%1 +- Read Database komutu bir örnek oluÅŸturmadı +-%1 +- +- +- +- OpVaultReader +- +- Directory .opvault must exist +- Dizin .opvault mevcut olmalıdır +- +- +- Directory .opvault must be readable +- Dizin .opvault okunabilir olmalıdır +- +- +- Directory .opvault/default must exist +- Dizin .opvault/default mevcut olmalıdır +- +- +- Directory .opvault/default must be readable +- Dizin .opvault/default okunabilir olmalıdır +- +- +- Unable to decode masterKey: %1 +- masterKey çözümlenemedi: %1 +- +- +- Unable to derive master key: %1 +- master key türetilemedi: %1 +- +- +- +- OpenSSHKey +- +- Invalid key file, expecting an OpenSSH key +- Geçersiz anahtar dosyası, OpenSSH anahtarı bekleniyor +- +- +- PEM boundary mismatch +- PEM limitleri uyumsuz +- +- +- Base64 decoding failed +- Base64 çözme baÅŸarısız +- +- +- Key file way too small. +- Anahtar dosyası çok küçük. +- +- +- Key file magic header id invalid +- Anahtar dosyası sihirbazı baÅŸlık kimliÄŸi geçersiz +- +- +- Found zero keys +- Sıfır anahtar bulundu +- +- +- Failed to read public key. +- Genel anahtar okunamadı. +- +- +- Corrupted key file, reading private key failed +- Bozuk anahtar dosyası, özel anahtar okuma baÅŸarısız +- +- +- No private key payload to decrypt +- Åžifresini çözmek için yüklü özel anahtar yok +- +- +- Trying to run KDF without cipher +- KDF'yi ÅŸifreleme olmadan çalıştırmayı dene +- +- +- Passphrase is required to decrypt this key +- Bu anahtarın ÅŸifresini çözmek için parola gerekiyor +- +- +- Key derivation failed, key file corrupted? +- Anahtar türetme baÅŸarısız, anahtar dosya bozuk mu? +- +- +- Decryption failed, wrong passphrase? +- Åžifre çözme baÅŸarısız, parola yanlış mı? +- +- +- Unexpected EOF while reading public key +- Ortak anahtar okunurken beklenmeyen dosya sonu +- +- +- Unexpected EOF while reading private key +- Özel anahtar okunurken beklenmeyen dosya sonu +- +- +- Can't write public key as it is empty +- Genel anahtar boÅŸ olduÄŸundan yazılamıyor +- +- +- Unexpected EOF when writing public key +- Ortak anahtar yazılırken beklenmeyen dosya sonu +- +- +- Can't write private key as it is empty +- Özel anahtar boÅŸ olduÄŸu için yazılamıyor +- +- +- Unexpected EOF when writing private key +- Özel anahtar yazarken beklenmeyen EOF +- +- +- Unsupported key type: %1 +- Desteklenmeyen anahtar türü: %1 +- +- +- Unknown cipher: %1 +- Bilinmeyen ÅŸifreleme: %1 +- +- +- Cipher IV is too short for MD5 kdf +- Cipher IV, MD5 kdf için çok kısa +- +- +- Unknown KDF: %1 +- Bilinmeyen KDF: %1 +- +- +- Unknown key type: %1 +- Bilinmeyen anahtar türü: %1 +- +- +- +- PasswordEdit +- +- Passwords do not match +- Parolalar eÅŸleÅŸmiyor +- +- +- Passwords match so far +- Parolalar ÅŸu ana kadar eÅŸleÅŸiyor +- +- +- Toggle Password (%1) +- Parolayı Göster/Gizle (%1) +- +- +- Generate Password (%1) +- Parola OluÅŸtur (%1) +- +- +- Warning: Caps Lock enabled! +- Uyarı: Caps Lock basılı! +- +- +- +- PasswordEditWidget +- +- Enter password: +- Parolayı gir: +- +- +- Confirm password: +- Parolayı onayla: +- +- +- Password +- Parola +- +- +- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> +- <p>Parola, veritabanınızın güvenliÄŸini saÄŸlamak için birincil yöntemdir.</p><p>Güçlü parolalar uzun ve benzersizdir. KeePassXC sizin için bir tane üretebilir.</p> +- +- +- Passwords do not match. +- Parolalar uyuÅŸmuyor. +- +- +- Password field +- Parola alanı +- +- +- Repeat password field +- Parola tekrarlama alanı +- +- +- +- PasswordGeneratorWidget +- +- %p% +- %%p +- +- +- strength +- Password strength +- güç +- +- +- entropy +- entropi +- +- +- Password +- Parola +- +- +- Character Types +- Karakter Türleri +- +- +- Numbers +- Rakamlar +- +- +- Extended ASCII +- GeniÅŸletilmiÅŸ ASCII +- +- +- Exclude look-alike characters +- Benzer karakterleri dışla +- +- +- Pick characters from every group +- Her kümeden karakter seç +- +- +- &Length: +- &Uzunluk: +- +- +- Passphrase +- Parola ÖbeÄŸi +- +- +- Wordlist: +- Sözcük listesi: +- +- +- Word Separator: +- Sözcük Ayırıcı: +- +- +- Close +- Kapat +- +- +- Entropy: %1 bit +- Entropi: %1 bit +- +- +- Password Quality: %1 +- Parola Kalitesi: %1 +- +- +- Poor +- Password quality +- Kötü +- +- +- Weak +- Password quality +- Zayıf +- +- +- Good +- Password quality +- Ä°yi +- +- +- Excellent +- Password quality +- Harika +- +- +- Switch to advanced mode +- GeliÅŸmiÅŸ kipe geç +- +- +- Advanced +- GeliÅŸmiÅŸ +- +- +- Braces +- Ayraç +- +- +- Punctuation +- Noktalama +- +- +- Quotes +- Tırnak +- +- +- Logograms +- Logogramlar +- +- +- Character set to exclude from generated password +- OluÅŸturulan paroladan dışlanacak karakter kümesi +- +- +- Do not include: +- Dahil etme: +- +- +- Add non-hex letters to "do not include" list +- Listeye onaltılık (hex) olmayan harfler ekleme "dahil etmeyin" +- +- +- Hex +- Hex +- +- +- Excluded characters: "0", "1", "l", "I", "O", "|", "ï¹’" +- Dışlanan karakterler: "0", "1", "l", "I", "O", "|", "ï¹’" +- +- +- Generated password +- OluÅŸturulan parola +- +- +- Upper-case letters +- Büyük harfler +- +- +- Lower-case letters +- Küçük harfler +- +- +- Special characters +- Özel karakterler +- +- +- Math Symbols +- Matematiksel Semboller +- +- +- Dashes and Slashes +- Tire ve EÄŸik çizgiler +- +- +- Excluded characters +- Hariç tutulan karakterler +- +- +- Hex Passwords +- Onaltılı Parolalar +- +- +- Password length +- Parola uzunluÄŸu +- +- +- Word Case: +- Kelime ÖrneÄŸi: +- +- +- Regenerate password +- Yeniden parola oluÅŸtur +- +- +- Copy password +- Parolayı kopyala +- +- +- lower case +- küçük harf +- +- +- UPPER CASE +- Büyük Harf +- +- +- Title Case +- BaÅŸlık ÖrneÄŸi +- +- +- Generate Password +- Parola oluÅŸtur +- +- +- Also choose from: +- Aynı zamanda bunlardan seç: +- +- +- Additional characters to use for the generated password +- OluÅŸturulan parolalar için kullanılacak ek karakterler +- +- +- Additional characters +- Ek karakterler +- +- +- Word Count: +- Sözcük Sayısı: +- +- +- Esc +- Esc +- +- +- Apply Password +- Parolayı Onayla +- +- +- Ctrl+S +- Ctrl+S +- +- +- Regenerate password (%1) +- Parolayı tekrar üret (%1) +- +- +- Special Characters +- Özel Karakterler +- +- +- +- QApplication +- +- KeeShare +- KeeShare +- +- +- Statistics +- Ä°statistikler +- +- +- Very weak password +- Çok zayıf parola +- +- +- Password entropy is %1 bits +- Parola entropisi %1 bits +- +- +- Weak password +- Zayıf parola +- +- +- Used in %1/%2 +- %1/%2 de kullanıldı +- +- +- Password is used %1 times +- Parola %1 kere kullanıldı +- +- +- Password has expired +- Parolanın süresi doldu +- +- +- Password expiry was %1 +- Parola süresi dolalı %1 +- +- +- Password is about to expire +- Parola son kullanma süresini doldurmak üzere +- +- +- Password expires in %1 days +- Parolanın %1 gün içinde son kullanma süresi dolacak +- +- +- Password will expire soon +- Parolanın yakında son kullanma süresi bitecek +- +- +- Password expires on %1 +- Parolanın son kullanma tarihi %1 +- +- +- Health Check +- SaÄŸlık Taraması +- +- +- HIBP +- HIBP +- +- +- +- QMessageBox +- +- Overwrite +- Ãœzerine yaz +- +- +- Delete +- Sil +- +- +- Move +- Taşı +- +- +- Empty +- BoÅŸ +- +- +- Remove +- Kaldır +- +- +- Skip +- Atla +- +- +- Disable +- Devre dışı +- +- +- Merge +- BirleÅŸtir +- +- +- Continue +- Devam +- +- +- +- QObject +- +- Database not opened +- Veritabanı açılmadı +- +- +- Database hash not available +- Veritabanı saÄŸlaması mevcut deÄŸil +- +- +- Client public key not received +- Ä°stemci genel anahtarı alınmadı +- +- +- Cannot decrypt message +- Ä°letinin ÅŸifresi çözülemedi +- +- +- Action cancelled or denied +- Eylem iptal edildi veya reddedildi +- +- +- KeePassXC association failed, try again +- KeePassXC iliÅŸkilendirmesi baÅŸarısız, yeniden dene +- +- +- Encryption key is not recognized +- Åžifreleme anahtarı tanınmadı +- +- +- Incorrect action +- DoÄŸru olmayan eylem +- +- +- Empty message received +- BoÅŸ ileti alındı +- +- +- No URL provided +- URL saÄŸlanmadı +- +- +- No logins found +- GiriÅŸ bulunamadı +- +- +- Unknown error +- Bilinmeyen hata +- +- +- Add a new entry to a database. +- Veritabanına yeni bir girdi ekle. +- +- +- Path of the database. +- Veritabanının yolu. +- +- +- Key file of the database. +- Veritabanının anahtar dosyası. +- +- +- path +- yol +- +- +- Username for the entry. +- Girdi için kullanıcı adı. +- +- +- username +- kullanıcı adı +- +- +- URL for the entry. +- Girdi için URL. +- +- +- URL +- URL +- +- +- Prompt for the entry's password. +- Girdi parolasını sor. +- +- +- Generate a password for the entry. +- Girdi için parola oluÅŸtur. +- +- +- length +- uzunluk +- +- +- Path of the entry to add. +- Eklenecek girdinin yolu. +- +- +- Path of the entry to clip. +- clip = copy to clipboard +- GiriÅŸi kısaltmanın yolu. +- +- +- Timeout in seconds before clearing the clipboard. +- Pano temizlenmeden önce geçecek saniye. +- +- +- Edit an entry. +- Bir girdi düzenle. +- +- +- Title for the entry. +- Girdi için baÅŸlık. +- +- +- title +- baÅŸlık +- +- +- Path of the entry to edit. +- Düzenlenecek girdinin yolu. +- +- +- Estimate the entropy of a password. +- Parolanın entropisini ölç. +- +- +- Password for which to estimate the entropy. +- Entropisi ölçülecek parola. +- +- +- Perform advanced analysis on the password. +- Parola üzerinde geliÅŸmiÅŸ inceleme gerçekleÅŸtir. +- +- +- +- +-Available commands: +- +- +- +-Kullanılabilir komutlar: +- +- +- +- Name of the command to execute. +- Çalıştırılacak komutun adı. +- +- +- List database entries. +- Veritabanı girdilerini listele. +- +- +- Path of the group to list. Default is / +- Listelenecek kümenin yolu. Öntanımlı / +- +- +- Find entries quickly. +- Hızlıca girdi bul. +- +- +- Search term. +- Arama terimi. +- +- +- Merge two databases. +- Ä°ki veritabanını birleÅŸtir. +- +- +- Path of the database to merge from. +- BirleÅŸtirilecek veritabanının yolu. +- +- +- Use the same credentials for both database files. +- Her iki veritabanı dosyası için aynı kimliÄŸi kullan. +- +- +- Key file of the database to merge from. +- BirleÅŸtirilecek veritabanının anahtar dosyası. +- +- +- Show an entry's information. +- Bir girdinin bilgilerini göster. +- +- +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- Gösterilecek özniteliklerin isimleri. Bu seçenek, her bir özniteliÄŸin verilen sıraya göre bir satırda gösterilmesiyle birden fazla kez belirtilebilir. EÄŸer hiçbir öznitelik belirtilmediyse, öntanımlı özniteliklerin bir özeti verilir. +- +- +- attribute +- öznitelik +- +- +- Name of the entry to show. +- Gösterilecek girdinin adı. +- +- +- NULL device +- Geçersiz cihaz +- +- +- error reading from device +- cihazdan okuma hatası +- +- +- malformed string +- kusurlu dizge +- +- +- missing closing quote +- kapanış tırnak iÅŸareti eksik +- +- +- Group +- Küme +- +- +- Title +- BaÅŸlık +- +- +- Username +- Kullanıcı adı +- +- +- Password +- Parola +- +- +- Notes +- Notlar +- +- +- Last Modified +- Son DeÄŸiÅŸiklik +- +- +- Created +- OluÅŸturuldu +- +- +- Browser Integration +- Tarayıcı BütünleÅŸmesi +- +- +- SSH Agent +- SSH Ä°stemci +- +- +- Generate a new random diceware passphrase. +- Yeni bir rastgele diceware parolası oluÅŸtur. +- +- +- Word count for the diceware passphrase. +- Diceware parolası için kelime sayısı. +- +- +- Wordlist for the diceware generator. +-[Default: EFF English] +- Diceware oluÅŸturucu için Kelime Listesi. +-[Öntanımlı: EFF Ä°ngilizce] +- +- +- Generate a new random password. +- Yeni bir rastgele parola oluÅŸtur. +- +- +- Could not create entry with path %1. +- %1 yolu ile giriÅŸ oluÅŸturulamadı. +- +- +- Enter password for new entry: +- Yeni girdi için parolayı gir: +- +- +- Writing the database failed %1. +- Veritabanına yazma baÅŸarısız: %1 +- +- +- Successfully added entry %1. +- %1 giriÅŸi baÅŸarıyla eklendi. +- +- +- Invalid timeout value %1. +- Geçersiz zaman aşımı deÄŸeri %1. +- +- +- Entry %1 not found. +- Girdi %1 bulunamadı. +- +- +- Entry with path %1 has no TOTP set up. +- %1 yolunun giriÅŸinde TOTP ayarlanmadı. +- +- +- Clearing the clipboard in %1 second(s)... +- %1 saniye içinde pano temizleniyor...%1 saniye içinde pano temizleniyor... +- +- +- Clipboard cleared! +- Pano temizlendi! +- +- +- Silence password prompt and other secondary outputs. +- Sessiz parola istemi ve diÄŸer ikincil çıkışlar. +- +- +- count +- CLI parameter +- sayım +- +- +- Could not find entry with path %1. +- GiriÅŸ yolu bulunamadı %1. +- +- +- Not changing any field for entry %1. +- %1 giriÅŸi için herhangi bir alanı deÄŸiÅŸtirmez. +- +- +- Enter new password for entry: +- Girdi için yeni parola gir: +- +- +- Writing the database failed: %1 +- Veritabanına yazma baÅŸarısız: %1 +- +- +- Successfully edited entry %1. +- %1 giriÅŸi baÅŸarıyla düzenlendi. +- +- +- Length %1 +- Uzunluk %1 +- +- +- Entropy %1 +- Entropi %1 +- +- +- Log10 %1 +- Günlük10 %1 +- +- +- Multi-word extra bits %1 +- Çok kelimeli ekstra bit %1 +- +- +- Type: Bruteforce +- Tür: Zorla +- +- +- Type: Dictionary +- Tür: Sözlük +- +- +- Type: Dict+Leet +- Tür: Sözlük+Leet +- +- +- Type: User Words +- Tür: Kullanıcı Sözcükleri +- +- +- Type: User+Leet +- Tür: Kullanıcı+Leet +- +- +- Type: Repeated +- Tür: Tekrarlanan +- +- +- Type: Sequence +- Tür: Sıra +- +- +- Type: Spatial +- Tür: Mekansal +- +- +- Type: Date +- Tür: Tarih +- +- +- Type: Bruteforce(Rep) +- Tür: Zorla(Rep) +- +- +- Type: Dictionary(Rep) +- Tür: Sözlük(Rep) +- +- +- Type: Dict+Leet(Rep) +- Tür: Sözlük+Leet(Rep) +- +- +- Type: User Words(Rep) +- Tür: Kullanıcı Sözcükleri(Rep) +- +- +- Type: User+Leet(Rep) +- Tür: Kullanıcı+Leet(Rep) +- +- +- Type: Repeated(Rep) +- Tür: Tekrarlanan(Rep) +- +- +- Type: Sequence(Rep) +- Tür: Sıra(Rep) +- +- +- Type: Spatial(Rep) +- Tür: Mekansal(Rep) +- +- +- Type: Date(Rep) +- Tür: Tarih(Rep) +- +- +- Type: Unknown%1 +- Tür: Bilinmiyor%1 +- +- +- Entropy %1 (%2) +- Entropi %1 (%2) +- +- +- *** Password length (%1) != sum of length of parts (%2) *** +- *** Parola uzunluÄŸu (%1) != parçaların uzunluÄŸu toplamı (%2) *** +- +- +- Failed to load key file %1: %2 +- Anahtar dosyası yüklenemedi %1: %2 +- +- +- Length of the generated password +- OluÅŸturulan parolanın uzunluÄŸu +- +- +- Use lowercase characters +- Küçük harfli karakterler kullan +- +- +- Use uppercase characters +- Büyük harfli karakterler kullan +- +- +- Use special characters +- Özel karakterler kullan +- +- +- Use extended ASCII +- GeniÅŸletilmiÅŸ ASCII kullan +- +- +- Exclude character set +- Karakter kümesini hariç tut +- +- +- chars +- karakter +- +- +- Exclude similar looking characters +- Benzer görünen karakterleri hariç tut +- +- +- Include characters from every selected group +- Seçilen her kümedeki karakterleri dahil et +- +- +- Recursively list the elements of the group. +- Kümenin ögelerini özyinelemeli olarak listeler. +- +- +- Cannot find group %1. +- %1 kümesi bulunamıyor. +- +- +- Error reading merge file: +-%1 +- BirleÅŸtirme dosyası okunurken hata: +-%1 +- +- +- Unable to save database to file : %1 +- Veritabanı dosyaya kaydedilemedi: %1 +- +- +- Unable to save database to file: %1 +- Veritabanı dosyaya kaydedilemedi: %1 +- +- +- Successfully recycled entry %1. +- %1 giriÅŸi baÅŸarıyla geri dönüştürüldü. +- +- +- Successfully deleted entry %1. +- Girdi baÅŸarıyla silindi %1 +- +- +- Show the entry's current TOTP. +- GiriÅŸin mevcut TOTP'sini göster. +- +- +- ERROR: unknown attribute %1. +- HATA: bilinmeyen öznitelik %1. +- +- +- No program defined for clipboard manipulation +- Pano manipülasyonu için tanımlanmış bir program yok +- +- +- file empty +- dosya boÅŸ +- +- +- %1: (row, col) %2,%3 +- %1: (satır, sütun) %2,%3 +- +- +- AES-KDF (KDBX 4) +- AES-KDF (KDBX 4) +- +- +- AES-KDF (KDBX 3.1) +- AES-KDF (KDBX 3.1) +- +- +- Invalid Settings +- TOTP +- Geçersiz Ayarlar +- +- +- Invalid Key +- TOTP +- Geçersiz Anahtar +- +- +- Message encryption failed. +- Ä°leti ÅŸifreleme baÅŸarısız. +- +- +- No groups found +- Hiçbir küme bulunamadı +- +- +- Create a new database. +- Yeni veritabanı oluÅŸtur. +- +- +- File %1 already exists. +- %1 dosyası zaten var. +- +- +- Loading the key file failed +- Anahtar dosyası yüklenemedi +- +- +- No key is set. Aborting database creation. +- Hiçbir anahtar ayarlanmadı. Veritabanı oluÅŸturma iptal ediliyor. +- +- +- Failed to save the database: %1. +- Veritabanı kaydedilemedi: %1. +- +- +- Successfully created new database. +- Yeni veritabanı baÅŸarıyla oluÅŸturuldu. +- +- +- Creating KeyFile %1 failed: %2 +- %1 AnahtarDosyası oluÅŸturulamadı: %2 +- +- +- Loading KeyFile %1 failed: %2 +- %1 AnahtarDosyası yüklenemedi:%2 +- +- +- Path of the entry to remove. +- Kaldırılacak girdinin yolu. +- +- +- Existing single-instance lock file is invalid. Launching new instance. +- Var olan tekil oluÅŸum kilit dosyası geçersiz. Yeni oluÅŸum baÅŸlatılıyor. +- +- +- The lock file could not be created. Single-instance mode disabled. +- Kilit dosyası oluÅŸturulamadı. Tekil oluÅŸum kipi devre dışı bırakıldı. +- +- +- KeePassXC - cross-platform password manager +- KeePassXC - çapraz platformlu parola yöneticisi +- +- +- filenames of the password databases to open (*.kdbx) +- açılacak parola veritabanlarının dosya adları (*.kdbx) +- +- +- path to a custom config file +- özel yapılandırma dosyası yolu +- +- +- key file of the database +- veritabanı anahtar dosyası +- +- +- read password of the database from stdin +- veritabanının parolasını stdin'den oku +- +- +- Another instance of KeePassXC is already running. +- KeePassXC'nin baÅŸka bir örneÄŸi zaten çalışıyor. +- +- +- Fatal error while testing the cryptographic functions. +- Kriptografik iÅŸlevler sınanırken ölümcül hata. +- +- +- KeePassXC - Error +- KeePassXC - Hata +- +- +- Database password: +- Veritabanı parolası: +- +- +- Cannot create new group +- Yeni küme oluÅŸturulamıyor +- +- +- Deactivate password key for the database. +- Veritabanı için parola anahtarını devre dışı bırak. +- +- +- Displays debugging information. +- Hata ayıklama bilgilerini görüntüler. +- +- +- Deactivate password key for the database to merge from. +- Veritabanının birleÅŸtirileceÄŸi parola anahtarını devre dışı bırak. +- +- +- Version %1 +- Sürüm %1 +- +- +- Build Type: %1 +- Yapı: %1 +- +- +- Revision: %1 +- Düzeltme: %1 +- +- +- Distribution: %1 +- Dağıtım: %1 +- +- +- Debugging mode is disabled. +- Hata ayıklama kipi devre dışı. +- +- +- Debugging mode is enabled. +- Hata ayıklama kipi etkin. +- +- +- Operating system: %1 +-CPU architecture: %2 +-Kernel: %3 %4 +- Ä°ÅŸletim sistemi: %1 +-MÄ°B mimarisi: %2 +-Çekirdek: %3 %4 +- +- +- Auto-Type +- Otomatik Yazım +- +- +- KeeShare (signed and unsigned sharing) +- KeeShare (imzalı ve imzasız paylaşım) +- +- +- KeeShare (only signed sharing) +- KeeShare (sadece imzalanmış paylaşım) +- +- +- KeeShare (only unsigned sharing) +- KeeShare (sadece imzasız paylaşım) +- +- +- YubiKey +- YubiKey +- +- +- TouchID +- TouchID +- +- +- None +- Yok +- +- +- Enabled extensions: +- Etkin eklentiler: +- +- +- Cryptographic libraries: +- Åžifreleme kütüphaneleri: +- +- +- Cannot generate a password and prompt at the same time! +- Parola ve komut istemi aynı anda oluÅŸturulamaz! +- +- +- Adds a new group to a database. +- Veritabanına yeni bir küme ekler. +- +- +- Path of the group to add. +- Eklenecek kümenin yolu. +- +- +- Group %1 already exists! +- %1 grubu zaten var! +- +- +- Group %1 not found. +- %1 grubu bulunamadı. +- +- +- Successfully added group %1. +- BaÅŸarıyla %1 grubuna eklendi +- +- +- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. +- Parolalar açıktan sızdırıldı mı diye kontrol et. FILENAME sızdırılmış parolaların SHA-1 karmalarını HIBP biçiminde listeleyen bir dosyanın yolu olmalı, https://haveibeenpwned.com/Passwords adresindeki bulunabildiÄŸi gibi. +- +- +- FILENAME +- DOSYAADI +- +- +- Analyze passwords for weaknesses and problems. +- Parolaları zayıflıklar ve problemler için incele. +- +- +- Failed to open HIBP file %1: %2 +- HIBP dosya açılamadı: %1: %2 +- +- +- Evaluating database entries against HIBP file, this will take a while... +- Veritabanı girdileri HIBP dosyasına çevriliyor, bu biraz zaman alacak... +- +- +- Close the currently opened database. +- Åžu anda açık olan veritabanını kapat. +- +- +- Display this help. +- Bu yardımı görüntüle. +- +- +- slot +- yuva +- +- +- Invalid word count %1 +- Geçersiz kelime sayımı %1 +- +- +- The word list is too small (< 1000 items) +- Kelime listesi çok küçük(< 1000 öge) +- +- +- Exit interactive mode. +- EtkileÅŸimli kipten çık. +- +- +- Exports the content of a database to standard output in the specified format. +- Bir veritabanının içeriÄŸini belirtilen biçimde standart çıktıya aktarır. +- +- +- Unable to export database to XML: %1 +- Veritabanı XML'ye dışa aktarılamıyor: %1 +- +- +- Unsupported format %1 +- Desteklenmeyen biçim %1 +- +- +- Use numbers +- Sayıları kullan +- +- +- Invalid password length %1 +- Geçersiz parola uzunluÄŸu %1 +- +- +- Display command help. +- Komut yardımını görüntüle. +- +- +- Available commands: +- Kullanılabilir komutlar: +- +- +- Import the contents of an XML database. +- XML veritabanının içeriÄŸini içe aktar. +- +- +- Path of the XML database export. +- XML veritabanının dışa aktarılacağı dosya yolu. +- +- +- Path of the new database. +- Yeni veritabanının yolu. +- +- +- Successfully imported database. +- Veritabanı baÅŸarıyla içe aktarıldı. +- +- +- Unknown command %1 +- Bilinmeyen komut %1 +- +- +- Flattens the output to single lines. +- Çıkışı tekil satırlara indirger. +- +- +- Only print the changes detected by the merge operation. +- Yalnızca birleÅŸtirme iÅŸlemi tarafından algılanan deÄŸiÅŸiklikleri yazdır. +- +- +- Yubikey slot for the second database. +- Ä°kinci veritabanı için Yubikey yuvası. +- +- +- Successfully merged %1 into %2. +- BaÅŸarıyla %1 ile %2 birleÅŸtirildi. +- +- +- Database was not modified by merge operation. +- Veritabanı birleÅŸtirme iÅŸlemi tarafından deÄŸiÅŸtirilmedi. +- +- +- Moves an entry to a new group. +- Bir girdiyi yeni bir gruba taşır. +- +- +- Path of the entry to move. +- Taşınacak girdini yolu. +- +- +- Path of the destination group. +- Hedef grubun yolu. +- +- +- Could not find group with path %1. +- %1 yolundaki grup bulunamadı. +- +- +- Entry is already in group %1. +- Girdi zaten grup %1 in içinde. +- +- +- Successfully moved entry %1 to group %2. +- BaÅŸarıyla girdi %1 grubundan %2 ye taşındı. +- +- +- Open a database. +- Bir veritabanı aç. +- +- +- Path of the group to remove. +- Kaldırılacak kümenin yolu. +- +- +- Cannot remove root group from database. +- root grubunu veritabanından kaldıramayız. +- +- +- Successfully recycled group %1. +- Grup %1 baÅŸarıyla geri dönüştürüldü. +- +- +- Successfully deleted group %1. +- Grup %1 baÅŸarıyla silindi. +- +- +- Failed to open database file %1: not found +- Veritabanı dosyası açılamadı %1: bulunamadı +- +- +- Failed to open database file %1: not a plain file +- Veritabanı dosyası %1 açılamadı: basit bir dosya deÄŸil +- +- +- Failed to open database file %1: not readable +- Veritabanı dosyası %1 açılamadı: okunamıyor +- +- +- Enter password to unlock %1: +- %1 in kilidini açmak için parola girin: +- +- +- Invalid YubiKey slot %1 +- Geçersiz YubiKey yuvası %1 +- +- +- Enter password to encrypt database (optional): +- Veritabanını ÅŸifrelemek için parola gir (isteÄŸe baÄŸlı): +- +- +- HIBP file, line %1: parse error +- HIBP dosyası, satır %1: çözümleme hatası +- +- +- Secret Service Integration +- Gizli Servis BütünleÅŸmesi +- +- +- User name +- Kullanıcı adı +- +- +- Password for '%1' has been leaked %2 time(s)! +- '%1' girdisinin parolası %2 kere sızdırıldı!'%1' girdisinin parolası %2 kere sızdırıldı! +- +- +- Invalid password generator after applying all options +- Tüm ÅŸeçenekler uygulandıktan sonra geçersiz parola üretiliyor. +- +- +- Show the protected attributes in clear text. +- Korumalı öznitelikleri açık yazı olarak göster. +- +- +- Browser Plugin Failure +- Tarayıcı Eklenti Hatası +- +- +- Could not save the native messaging script file for %1. +- %1 için yerel mesajlaÅŸma komut dosyası kaydedilemedi. +- +- +- Copy the given attribute to the clipboard. Defaults to "password" if not specified. +- Verilen özniteliÄŸi parolayı kopyalar. BelirtilmemiÅŸse varsayılan olarak "password" özniteliÄŸini panoya kopyalar. +- +- +- Copy the current TOTP to the clipboard (equivalent to "-a totp"). +- Geçerli TOTP deÄŸerini panoya kopyala ("-a totp" ye eÅŸdeÄŸer). +- +- +- Copy an entry's attribute to the clipboard. +- Bir girdinin özniteliÄŸini panoya kopyala. +- +- +- ERROR: Please specify one of --attribute or --totp, not both. +- HATA: --attribute veya --totp seçeneklerinden birini belirtiniz, ikisini birden deÄŸil. +- +- +- ERROR: attribute %1 is ambiguous, it matches %2. +- HATA: %1 özniteliÄŸinin birden fazla karşılığı var, %2 eÅŸleÅŸme var. +- +- +- Attribute "%1" not found. +- "%1" özniteliÄŸi bulunamadı. +- +- +- Entry's "%1" attribute copied to the clipboard! +- Girdinin "%1" özniteliÄŸi panoya kopyalandı! +- +- +- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). +- Yubikey yuvası ve seçimlik seri numarası, veritabanına eriÅŸmek için kullanıldı (örn., 1:7370001). +- +- +- slot[:serial] +- slot[:serial] +- +- +- Target decryption time in MS for the database. +- ms cinsinden veritabanı ÅŸifre çözme süresi hedefi. +- +- +- time +- zaman +- +- +- Set the key file for the database. +- Veritanı için anahtar dosyasını belirleyin. +- +- +- Set a password for the database. +- Veritabanı için bir parola belirleyin. +- +- +- Invalid decryption time %1. +- Geçersiz ÅŸifre çözme süresi %1. +- +- +- Target decryption time must be between %1 and %2. +- Hedef ÅŸifre çözme süresi %1 ile %2 arasında olmalı. +- +- +- Failed to set database password. +- Veritabanı parolası ayarlanamadı. +- +- +- Benchmarking key derivation function for %1ms delay. +- Anahtar türetme iÅŸlevi, %1ms geçikme için kıyaslanıyor. +- +- +- Setting %1 rounds for key derivation function. +- Anahtar türetme iÅŸlevi için %1 çevrim ayarlanıyor. +- +- +- error while setting database key derivation settings. +- veritabanı anahtar türetme ayarları belirlenirken hata oluÅŸtu. +- +- +- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. +- Dışarı verirken kullanılacak format. Uygun olan seçenekler 'xml' veya 'csv'. Varsayılan 'xml'. +- +- +- Unable to import XML database: %1 +- XML veritabanı içeri alınamadı: %1 +- +- +- Show a database's information. +- Bir veritabanının bilgisini göster. +- +- +- UUID: +- UUID: +- +- +- Name: +- Ä°sim: +- +- +- Description: +- Açıklama: +- +- +- Cipher: +- Åžifreleme: +- +- +- KDF: +- Anahtar Türetme Ä°ÅŸlevi: +- +- +- Recycle bin is enabled. +- Çöp kutusu etkinleÅŸtirildi. +- +- +- Recycle bin is not enabled. +- Çöp kutusu etkinleÅŸtirilmedi. +- +- +- Invalid command %1. +- Geçersiz komut %1. +- +- +- Invalid YubiKey serial %1 +- Geçersiz YubiKey seri numarası %1 +- +- +- Please touch the button on your YubiKey to continue… +- Lütfen, devam etmek için YubiKey üzerindeki tuÅŸa dokunun... +- +- +- Do you want to create a database with an empty password? [y/N]: +- BoÅŸ bir parolayla veritabanı oluÅŸturmak ister misiniz ? [y/N]: +- +- +- Repeat password: +- Parola tekrar: +- +- +- Error: Passwords do not match. +- Hata: Parolalar eÅŸleÅŸmiyor. +- +- +- All clipping programs failed. Tried %1 +- +- Tüm kesme programları baÅŸarısız oldu. Denedi %1 +- +- +- +- AES (%1 rounds) +- AES (%1 çevrim) +- +- +- AES 256-bit +- AES 256-bit +- +- +- Twofish 256-bit +- Twofish 256-bit +- +- +- ChaCha20 256-bit +- ChaCha20: 256-bit {20 256-?} +- +- +- Benchmark %1 delay +- KarşılaÅŸtırma deneyi %1 gecikmeli +- +- +- %1 ms +- milliseconds +- %1 ms%1 ms +- +- +- %1 s +- seconds +- %1 s%1 s +- +- +- path to a custom local config file +- +- +- +- WARNING: You are using an old key file format which KeePassXC may +-stop supporting in the future. +- +-Please consider generating a new key file. +- +- +- +- Argon2%1 (%2 rounds, %3 KB) +- +- +- +- Argon2d (KDBX 4 – recommended) +- +- +- +- Argon2id (KDBX 4) +- +- +- +- TOTP +- TOTP +- +- +- Icon +- Simge +- +- +- Unsupported key file version: %1 +- +- +- +- Checksum mismatch! Key file may be corrupt. +- +- +- +- Unexpected key file data! Key file may be corrupt. +- +- +- +- +- QtIOCompressor +- +- Internal zlib error when compressing: +- Sıkıştırılırken dahili zlib hatası: +- +- +- Error writing to underlying device: +- Temel aygıta yazma hatası: +- +- +- Error opening underlying device: +- Temel cihaz açılırken hata oluÅŸtu: +- +- +- Error reading data from underlying device: +- Temel aygıttan veri okuma hatası: +- +- +- Internal zlib error when decompressing: +- Açma sırasında dahili zlib hatası: +- +- +- +- QtIOCompressor::open +- +- The gzip format not supported in this version of zlib. +- gzip biçimi zlib'in bu sürümünde desteklenmiyor. +- +- +- Internal zlib error: +- Dahili zlib hatası: +- +- +- +- ReportsWidgetHealthcheck +- +- Also show entries that have been excluded from reports +- Raporlardan hariç tutulan girdileri de göster +- +- +- Hover over reason to show additional details. Double-click entries to edit. +- Ek ayrıntılar göstermek için fareyi sebep üzerinde gezdir. +-Girdiyi düzenlemek için tıkla. +- +- +- Bad +- Password quality +- Kötü +- +- +- Bad — password must be changed +- Kötü — parola mutlaka deÄŸiÅŸtirilmeli +- +- +- Poor +- Password quality +- Kötü +- +- +- Poor — password should be changed +- Yetersiz — parola deÄŸiÅŸtirilmeli +- +- +- Weak +- Password quality +- Zayıf +- +- +- Weak — consider changing the password +- Zayıf — parolayı deÄŸiÅŸtirmeyi düşünün +- +- +- (Excluded) +- (Hariç tutuldu) +- +- +- This entry is being excluded from reports +- Bu girdi raporlardan hariç tutuldu +- +- +- Please wait, health data is being calculated... +- Lütfen bekleyiniz, saÄŸlık verisi hesaplanıyor... +- +- +- Congratulations, everything is healthy! +- Tebrikler, herÅŸey saÄŸlıklı! +- +- +- Title +- BaÅŸlık +- +- +- Path +- Yol +- +- +- Score +- Puan +- +- +- Reason +- Sebep +- +- +- Edit Entry... +- Girdiyi Düzenle... +- +- +- Exclude from reports +- Raporlardan hariç tut +- +- +- +- ReportsWidgetHibp +- +- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. +- UYARI: Bu rapor "Have I Been Pwned" çevrimiçi servisine (https://haveibeenpwned.com) bilgi göndermeyi gerektirir. Devam ederseniz, veritabanı parolalarınız kriptografik olarak karıştırılıp bu karmanın ilk beÅŸ karakteri güvenli olarak bu servise gönderilecek. Veritabanınız güvenli kalır ve bu bilgiyle yeniden oluÅŸturulamaz. Fakat, gönderdiÄŸiniz parolaların sayısı ve IP adresiniz bu servise açılmış olacak. +- +- +- Perform Online Analysis +- Çevrimiçi Analiz Yapın +- +- +- Also show entries that have been excluded from reports +- Raporlardan hariç tutulan girdileri de göster +- +- +- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. +- KeePassXC'nin bu yapımı aÄŸ iÅŸlevleri içermez. AÄŸ, parolalarınızı Have I Been Pwned veritabanlarıyla kontrol etmek için gereklidir. +- +- +- Congratulations, no exposed passwords! +- Tebrikler, hiç bir açığa çıkmış parolanız yok! +- +- +- Title +- BaÅŸlık +- +- +- Path +- Yol +- +- +- Password exposed… +- Parola açığa çıktı... +- +- +- (Excluded) +- (Hariç tutuldu) +- +- +- This entry is being excluded from reports +- Bu girdi raporlardan hariç tutuldu +- +- +- once +- bir kere +- +- +- up to 10 times +- 10 defaya kadar +- +- +- up to 100 times +- 100 defaya kadar +- +- +- up to 1000 times +- 1000 defaya kadar +- +- +- up to 10,000 times +- 10000 defaya kadar +- +- +- up to 100,000 times +- 100000 defaya kadar +- +- +- up to a million times +- milyon defaya kadar +- +- +- millions of times +- milyonlarca kere +- +- +- Edit Entry... +- Girdiyi Düzenle... +- +- +- Exclude from reports +- Raporlardan hariç tut +- +- +- +- ReportsWidgetStatistics +- +- Hover over lines with error icons for further information. +- Daha fazla bilgi için farenizi hata simgeli satırların üzerine getirin. +- +- +- Name +- Adı +- +- +- Value +- DeÄŸer +- +- +- Please wait, database statistics are being calculated... +- Lütfen bekleyin, veritabanı istatistikleri hesaplanıyor... +- +- +- Database name +- Veritabanı adı +- +- +- Description +- Açıklama +- +- +- Location +- Konum +- +- +- Last saved +- Son kaydedilen +- +- +- Unsaved changes +- KaydedilmemiÅŸ deÄŸiÅŸiklikler +- +- +- yes +- evet +- +- +- no +- hayır +- +- +- The database was modified, but the changes have not yet been saved to disk. +- Veritabanı deÄŸiÅŸtirildi, ancak deÄŸiÅŸiklikler henüz diske kaydedilmedi. +- +- +- Number of groups +- Küme sayısı +- +- +- Number of entries +- Girdilerin sayısı +- +- +- Number of expired entries +- Süresi dolmuÅŸ girdi sayısı +- +- +- The database contains entries that have expired. +- Veritabanı süresi dolmuÅŸ girdiler içeriyor. +- +- +- Unique passwords +- Benzersiz parolalar +- +- +- Non-unique passwords +- Benzersiz olmayan parolalar +- +- +- More than 10% of passwords are reused. Use unique passwords when possible. +- Parolaların %10'undan fazlası yeniden kullanılır. Mümkünse benzersiz parolalar kullanın. +- +- +- Maximum password reuse +- Azami parola kullanımı +- +- +- Some passwords are used more than three times. Use unique passwords when possible. +- Bazı parolalar üç kereden fazla kullanılır. Mümkünse benzersiz parolalar kullanın. +- +- +- Number of short passwords +- Kısa parola sayısı +- +- +- Recommended minimum password length is at least 8 characters. +- Önerilen asgari parola uzunluÄŸu en az 8 karakterdir. +- +- +- Number of weak passwords +- Zayıf parola sayısı +- +- +- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. +- 'Ä°yi' veya 'mükemmel' derecesine sahip uzun, rastgele parolalar kullanmanızı öneririz. +- +- +- Entries excluded from reports +- Raporlardan hariç tutulan girdiler +- +- +- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. +- Girdileri raporlardan hariç tutuyoruz, örn. çünkü yetersiz bir parola sahip oldukları biliniyor, mutlak bir problem deÄŸil ama gözünüzün üzerinde olması lazım. +- +- +- Average password length +- Ortalama parola uzunluÄŸu +- +- +- %1 characters +- %1 karakter +- +- +- Average password length is less than ten characters. Longer passwords provide more security. +- Ortalama parola uzunluÄŸu on karakterden az. Daha uzun parolalar daha fazla güvenlik saÄŸlar. +- +- +- +- SSHAgent +- +- Agent connection failed. +- Ä°stemci baÄŸlantısı baÅŸarısız. +- +- +- Agent protocol error. +- Ä°stemci protokol hatası. +- +- +- No agent running, cannot add identity. +- Çalışan istemci yok, kimlik ekleyemezsiniz. +- +- +- No agent running, cannot remove identity. +- Çalışan istemci yok, kimlik kaldırılamaz. +- +- +- Agent refused this identity. Possible reasons include: +- Ä°stemci bu kimliÄŸi reddetti. Olası nedenler ÅŸunlardır: +- +- +- The key has already been added. +- Anahtar zaten eklendi. +- +- +- Restricted lifetime is not supported by the agent (check options). +- Kısıtlı süre istemci tarafından desteklenmez (seçenekleri kontrol edin). +- +- +- A confirmation request is not supported by the agent (check options). +- Onay isteÄŸi istemci tarafından desteklenmiyor (seçenekleri kontrol edin). +- +- +- Key identity ownership conflict. Refusing to add. +- Anahtar kimlik sahipliÄŸi uyuÅŸmazlığı. Ekleme reddediliyor. +- +- +- No agent running, cannot list identities. +- Hiç bir istemci çalışmıyor, kimlikler listelenemiyor. +- +- +- +- SearchHelpWidget +- +- Search Help +- Yardım Ara +- +- +- Search terms are as follows: [modifiers][field:]["]term["] +- Arama terimleri ÅŸunlar gibidir: [deÄŸiÅŸtiren][alan:]["]terim["] +- +- +- Every search term must match (ie, logical AND) +- Her arama terimi eÅŸleÅŸmelidir (yani, mantıksal ve) +- +- +- Modifiers +- Düzenleyen +- +- +- exclude term from results +- terimi sonuçların dışında tut +- +- +- match term exactly +- tam eÅŸleÅŸme terimi +- +- +- use regex in term +- regex terimini kullan +- +- +- Fields +- Alanlar +- +- +- Term Wildcards +- Terim Joker Karakterler +- +- +- match anything +- her ÅŸeyle eÅŸleÅŸtir +- +- +- match one +- birini eÅŸleÅŸtir +- +- +- logical OR +- mantıksal yada +- +- +- Examples +- Örnekler +- +- +- +- SearchWidget +- +- Search +- Ara +- +- +- Limit search to selected group +- Aramayı seçilen kümeyle sınırla +- +- +- Search Help +- Yardım Ara +- +- +- Search (%1)... +- Search placeholder text, %1 is the keyboard shortcut +- Ara (%1)... +- +- +- Case sensitive +- Harfe duyarlı +- +- +- +- SettingsWidgetFdoSecrets +- +- Options +- Seçenekler +- +- +- Enable KeepassXC Freedesktop.org Secret Service integration +- KeepassXC Freedesktop.org Gizli Servis bütünleÅŸmesini etkinleÅŸtir +- +- +- General +- Genel +- +- +- Show notification when credentials are requested +- Kimlik bilgileri istendiÄŸinde bir bildirim göster +- +- +- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> +- <html><head/><body><p>Çöp kutusu veritabanı için etkinleÅŸtirilmiÅŸse, girdiler doÄŸrudan çöp kutusuna taşınacaklar. DeÄŸilse, onay alınmadan silinecekler.</p><p>Herhangi bir girdi diÄŸerleri tarafından kaynak gösterildiyse hala uyarılacaksınız.</p></body></html> +- +- +- Exposed database groups: +- Maruz kalan veritabanı kümeleri: +- +- +- Authorization +- Yetki +- +- +- These applications are currently connected: +- Bu uygulamalar ÅŸu anda baÄŸlı: +- +- +- Don't confirm when entries are deleted by clients +- Girdiler istemciler tarafından silinirse onay isteme +- +- +- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. +- <b>Hata:</b> DBus'a vaÄŸlanılamadı. Lütfen DBus ayarlarınızı kontrol edin. +- +- +- <b>Warning:</b> +- <b>Uyarı:</b> +- +- +- Save current changes to activate the plugin and enable editing of this section. +- Eklentiyi etkinleÅŸtirmek için ÅŸu anki deÄŸiÅŸiklikleri kaydedin ve bu bölümü düzenlemeyi etkinleÅŸtirin. +- +- +- +- SettingsWidgetKeeShare +- +- Active +- Aktif +- +- +- Allow export +- Dışa aktarmaya izin ver +- +- +- Allow import +- İçe aktarmaya izin ver +- +- +- Own certificate +- Öz sertifika +- +- +- Fingerprint: +- Parmak izi: +- +- +- Certificate: +- Sertifika: +- +- +- Signer +- Ä°mzalayan +- +- +- Key: +- Anahtar: +- +- +- Generate +- OluÅŸtur +- +- +- Import +- İçe aktar +- +- +- Export +- Dışa aktar +- +- +- Imported certificates +- Alınan sertifikalar +- +- +- Trust +- Güven +- +- +- Ask +- Sor +- +- +- Untrust +- Güvenme +- +- +- Remove +- Kaldır +- +- +- Path +- Yol +- +- +- Status +- Durum +- +- +- Fingerprint +- Parmak izi +- +- +- Certificate +- Sertifika +- +- +- Trusted +- Güvenilir +- +- +- Untrusted +- Güvenilmez +- +- +- Unknown +- Bilinmeyen +- +- +- key.share +- Filetype for KeeShare key +- anahtar.paylaÅŸ +- +- +- KeeShare key file +- KeeShare anahtar dosyası +- +- +- All files +- Tüm dosyalar +- +- +- Select path +- Yol seç +- +- +- Exporting changed certificate +- DeÄŸiÅŸen sertifikayı dışa aktar +- +- +- The exported certificate is not the same as the one in use. Do you want to export the current certificate? +- Aktarılan sertifika kullanılan sertifika ile aynı deÄŸil. Mevcut sertifikayı vermek aktarmak musunuz? +- +- +- Signer: +- Ä°mzalayan: +- +- +- Allow KeeShare imports +- KeeShare içe aktarımlara izin ver +- +- +- Allow KeeShare exports +- KeeShare dışa aktarımlara izin ver +- +- +- Only show warnings and errors +- Yalnızca uyarıları ve hataları göster +- +- +- Key +- Anahtar +- +- +- Signer name field +- Ä°mzalayan adı alanı +- +- +- Generate new certificate +- Yeni sertifika oluÅŸtur +- +- +- Import existing certificate +- Var olan sertifikayı içeri al +- +- +- Export own certificate +- Kendi sertifikanı dışarı ver +- +- +- Known shares +- Bilinen paylaşımlar +- +- +- Trust selected certificate +- Seçili sertifikaya güven +- +- +- Ask whether to trust the selected certificate every time +- Seçili sertifikaya güvenilecek mi diye her seferinde sor +- +- +- Untrust selected certificate +- Seçili sertifikaya güvenme +- +- +- Remove selected certificate +- Seçilen sertifikayı kaldır +- +- +- +- ShareExport +- +- Overwriting signed share container is not supported - export prevented +- Ä°mzalı paylaşım konteynerin üzerine yazma desteklenmiyor -dışa aktarma engellendi +- +- +- Could not write export container (%1) +- Dışa aktarım konteynere yazılamadı (%1) +- +- +- Could not embed signature: Could not open file to write (%1) +- Ä°mza gömülemedi: Yazılacak dosya açılamadı (%1) +- +- +- Could not embed signature: Could not write file (%1) +- Ä°mza gömülemedi: Dosya yazılamadı (%1) +- +- +- Could not embed database: Could not open file to write (%1) +- Veritabanı gömülemedi: Yazılacak dosya açılamadı (%1) +- +- +- Could not embed database: Could not write file (%1) +- Veritabanı gömülemedi: dosya yazılamadı (%1) +- +- +- Overwriting unsigned share container is not supported - export prevented +- Ä°mzasız paylaşım konteynerin üzerine yazma desteklenmiyor -dışa aktarma engellendi +- +- +- Could not write export container +- Dışa aktarım konteynere yazılamadı +- +- +- Unexpected export error occurred +- Beklenmeyen dışa aktarma hatası oluÅŸtu +- +- +- +- ShareImport +- +- Import from container without signature +- Ä°mzayı konteynerden içeri aktar +- +- +- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? +- Ä°mzalı olmadığından paylaşılan konteynerin kaynağını doÄŸrulayamazsınız. %1 ögesinden içeri aktarmak istiyor musunuz? +- +- +- Import from container with certificate +- Sertifikayı konteynerden içe aktar +- +- +- Do you want to trust %1 with the fingerprint of %2 from %3? +- %3'ten %2 parmak izi ile %1'e güvenmek ister misiniz? {1 ?} {2 ?} +- +- +- Not this time +- Bu sefer deÄŸil +- +- +- Never +- Asla +- +- +- Always +- Daima +- +- +- Just this time +- Sadece bu seferlik +- +- +- Signed share container are not supported - import prevented +- Ä°mzalı paylaşım konteyneri desteklenmiyor -içeri alma engellendi +- +- +- File is not readable +- Dosya okunamıyor +- +- +- Invalid sharing container +- Geçersiz konteyner paylaşımı +- +- +- Untrusted import prevented +- Güvenilmeyen içe aktarma önlendi +- +- +- Successful signed import +- Ä°mzalı içe aktarma baÅŸarılı +- +- +- Unsigned share container are not supported - import prevented +- Ä°mzalanmamış paylaşım konteyneri desteklenmiyor -içeri alma engellendi +- +- +- Successful unsigned import +- Ä°mzasız içe aktarma baÅŸarılı +- +- +- File does not exist +- Dosya mevcut deÄŸil +- +- +- Unknown share container type +- Bilinmeyen konteyner paylaşım türü +- +- +- +- ShareObserver +- +- Import from %1 failed (%2) +- % 1'den içe aktarma baÅŸarısız (%2) +- +- +- Import from %1 successful (%2) +- %1'den içe aktarma baÅŸarılı (%2) +- +- +- Imported from %1 +- %1 den içe aktarıldı +- +- +- Export to %1 failed (%2) +- %1'e aktarma baÅŸarısız oldu (%2) +- +- +- Export to %1 successful (%2) +- %1’e aktarma baÅŸarılı (%2) +- +- +- Export to %1 +- %1'e aktar +- +- +- Multiple import source path to %1 in %2 +- %2 içinde %1'e çoklu içe aktarma kaynak yolu +- +- +- Conflicting export target path %1 in %2 +- Çakışan aktarma hedef yolu %1 %2 +- +- +- +- TotpDialog +- +- Timed Password +- Zamanlı Parola +- +- +- 000000 +- 000000 +- +- +- Copy +- Kopyala +- +- +- Expires in <b>%n</b> second(s) +- <b>%n</b> saniye içinde sona erecek<b>%n</b> saniye içinde sona erecek +- +- +- +- TotpExportSettingsDialog +- +- Copy +- Kopyala +- +- +- NOTE: These TOTP settings are custom and may not work with other authenticators. +- TOTP QR code dialog warning +- NOT: Bu TOTP ayarları özeldir ve diÄŸer kimlik doÄŸrulayıcılarla çalışmayabilir. +- +- +- There was an error creating the QR code. +- QR kodunu oluÅŸtururken bir hata oluÅŸtu. +- +- +- Closing in %1 seconds. +- %1 saniye içinde kapanıyor. +- +- +- +- TotpSetupDialog +- +- Setup TOTP +- TOTP Kurulum +- +- +- Default RFC 6238 token settings +- Öntanımlı RFC 6238 anahtar ayarları +- +- +- Steam token settings +- Steam anahtar ayarları +- +- +- Use custom settings +- Özel ayarlar kullan +- +- +- Custom Settings +- Özel Ayarlar +- +- +- Time step: +- Zaman adımı: +- +- +- sec +- Seconds +- san +- +- +- Code size: +- Kod boyutu: +- +- +- Secret Key: +- Gizli Anahtar: +- +- +- Secret key must be in Base32 format +- Gizli anahtar Base32 biçiminde olmalıdır +- +- +- Secret key field +- Gizli anahtar alanı +- +- +- Algorithm: +- Algoritma: +- +- +- Time step field +- Zaman adımı alanı +- +- +- digits +- basamak +- +- +- Invalid TOTP Secret +- Geçersiz TOTP gizli anahtarı +- +- +- You have entered an invalid secret key. The key must be in Base32 format. +-Example: JBSWY3DPEHPK3PXP +- Geçersiz bir gizli anahtar girdiniz. Anahtar Base32 formatında olmalı. +-ÖrneÄŸin: JBSWY3DPEHPK3PXP +- +- +- Confirm Remove TOTP Settings +- TOTP Ayarlarını Kaldırmayı Onaylayın +- +- +- Are you sure you want to delete TOTP settings for this entry? +- Bu girdi için TOTP ayarlarını silmek istediÄŸinize emin misiniz ? +- +- +- +- URLEdit +- +- Invalid URL +- Geçersiz URL +- +- +- +- UpdateCheckDialog +- +- Checking for updates +- Güncellemeleri kontrol et +- +- +- Checking for updates... +- Güncellemeler kontrol ediliyor... +- +- +- Close +- Kapat +- +- +- Update Error! +- Güncelleme Hatası! +- +- +- An error occurred in retrieving update information. +- Güncelleme bilgileri alınırken bir hata oluÅŸtu. +- +- +- Please try again later. +- Lütfen daha sonra tekrar deneyin. +- +- +- Software Update +- Yazılım Güncellemesi +- +- +- A new version of KeePassXC is available! +- KeePassXC'in yeni bir sürümü mevcut! +- +- +- KeePassXC %1 is now available — you have %2. +- KeePassXC %1 ÅŸimdi kullanılabilir — sizdeki %2. +- +- +- Download it at keepassxc.org +- Keepassxc.org adresinden indirin +- +- +- You're up-to-date! +- Güncelsin! +- +- +- KeePassXC %1 is currently the newest version available +- KeePassXC %1 ÅŸu anda mevcut en yeni sürüm +- +- +- +- WelcomeWidget +- +- Start storing your passwords securely in a KeePassXC database +- Parolalarınızı KeePassXC veritabanında güvenle depolamaya baÅŸlayın +- +- +- Create new database +- Yeni veritabanı oluÅŸtur +- +- +- Open existing database +- Varolan veritabanını aç +- +- +- Import from KeePass 1 +- KeePass 1'den içe aktar +- +- +- Import from CSV +- CSV'den içe aktar +- +- +- Recent databases +- Son veritabanları +- +- +- Welcome to KeePassXC %1 +- KeePassXC'ye hoÅŸ geldin %1 +- +- +- Import from 1Password +- 1Password'den içeri al +- +- +- Open a recent database +- Son kullanılan veritabanını aç +- +- +- +- YubiKey +- +- %1 [%2] Configured Slot - %3 +- %1[%2] Ayarlanmış Yuva - %3 +- +- +- %1 [%2] Challenge Response - Slot %3 - %4 +- %1 [%2] Zorluk Tepki - Yuva %3 - %4 +- +- +- Press +- Basın +- +- +- Passive +- Pasif +- +- +- %1 Invalid slot specified - %2 +- %1 Geçersiz yuva belirtilmiÅŸ - %2 +- +- +- The YubiKey interface has not been initialized. +- YubiKey arayüzü baÅŸlatılamadı. +- +- +- Hardware key is currently in use. +- Donanım anahtarı ÅŸu anda kullanımda. +- +- +- Could not find hardware key with serial number %1. Please plug it in to continue. +- %1 seri numaralı donanım anahtarı bulunamadı. Lütfen devam etmek için anahtarı takınız. +- +- +- Hardware key timed out waiting for user interaction. +- Donanım anahtarı kullanıcı etkileÅŸimini beklerken zaman aşımına uÄŸradı. +- +- +- A USB error ocurred when accessing the hardware key: %1 +- Donanım anahtarın eriÅŸilirken bir USB hatası oluÅŸtu: %1 +- +- +- Failed to complete a challenge-response, the specific error was: %1 +- Zorluk-tepki tamamlanamadı, ayrıntılı hata : %1 +- +- +- +- YubiKeyEditWidget +- +- Refresh +- Yenile +- +- +- YubiKey Challenge-Response +- YubiKey Karşılama Yanıtı +- +- +- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- <p>EÄŸer bir <a href="https://www.yubico.com/">YubiKey</a> sahibiyseniz ek güvenlik için kullanabilirsiniz.</p><p>YubiKey yuvalarından birinin programlanması gerekir <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Karşılama-Yanıtı</a>.</p> +- +- +- Refresh hardware tokens +- Donanım belirteçlerini yenile +- +- +- Hardware key slot selection +- Donanım anahtarı yuvası seçimi +- +- +- Could not find any hardware keys! +- Hiç donanım anahtarı bulunamadı! +- +- +- Selected hardware key slot does not support challenge-response! +- Seçili donanım anahtar yuvası zorluk-tepkiyi desteklemiyor! +- +- +- Detecting hardware keys… +- Donanım anahtarları tespit ediliyor... +- +- +- No hardware keys detected +- Hiç bir donanım anahtarı tespit edilmedi +- +- +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_uk.ts keepassxc-2.6.4-patched/share/translations/keepassx_uk.ts +--- keepassxc-2.6.4-orig/share/translations/keepassx_uk.ts 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/translations/keepassx_uk.ts 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7891 +0,0 @@ +- +- +- AboutDialog +- +- About KeePassXC +- Про KeePassXC +- +- +- About +- Про програму +- +- +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- ПовідомлÑйте про вади на <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- +- +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- KeePassXC розповÑюджуєтьÑÑ Ð½Ð° умовах Загальної публічної ліцензії GNU (GPL) верÑÑ–Ñ— 2 або (на ваш вибір) верÑÑ–Ñ— 3. +- +- +- Contributors +- Спільнота +- +- +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">ПереглÑнути внеÑок на GitHub</a> +- +- +- Debug Info +- Зневаджувальна Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ +- +- +- Include the following information whenever you report a bug: +- ПовідомлÑючи про проблему, завжди долучайте наÑтупну інформацію: +- +- +- Copy to clipboard +- Скопіювати в кишеню +- +- +- Project Maintainers: +- Супровідники проекту: +- +- +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- Команда KeePassXC щиро дÑкує debfx за ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¿ÐµÑ€Ð²Ñ–Ñної верÑÑ–Ñ— KeePassX. +- +- +- +- AgentSettingsWidget +- +- Use OpenSSH for Windows instead of Pageant +- ВикориÑтовувати OpenSSH Ð´Ð»Ñ Windows заміÑÑ‚ÑŒ Pageant +- +- +- Enable SSH Agent integration +- Увімкнути інтеграцію з SSH Agent +- +- +- SSH_AUTH_SOCK value +- Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ SSH_AUTH_SOCK +- +- +- SSH_AUTH_SOCK override +- Ð¿ÐµÑ€ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ SSH_AUTH_SOCK +- +- +- (empty) +- (порожньо) +- +- +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- Ðемає доÑтупних гнізд Ð´Ð»Ñ SSH Agent. Ðбо переконайтеÑÑ, що змінна Ð¾Ñ‚Ð¾Ñ‡ÐµÐ½Ð½Ñ SSH_AUTH_SOCK Ñ–Ñнує, або вкажіть Ð¿ÐµÑ€ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð½ÐµÑ—. +- +- +- SSH Agent connection is working! +- З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· SSH Agent працює! +- +- +- +- ApplicationSettingsWidget +- +- Application Settings +- ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°ÑтоÑунку +- +- +- General +- Загальне +- +- +- Security +- Безпека +- +- +- Access error for config file %1 +- Помилка доÑтупу до файлу конфігурації %1 +- +- +- Icon only +- Лише значок +- +- +- Text only +- Лише текÑÑ‚ +- +- +- Text beside icon +- ТекÑÑ‚ поруч зі значком +- +- +- Text under icon +- ТекÑÑ‚ під значком +- +- +- Follow style +- ÐаÑлідувати Ñтиль +- +- +- Reset Settings? +- Скинути налаштуваннÑ? +- +- +- Are you sure you want to reset all general and security settings to default? +- Ви дійÑно бажаєте повніÑÑ‚ÑŽ Ñкинути Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ– повернутиÑÑŒ до Ñтандартних параметрів? +- +- +- Monochrome (light) +- Монохромна (Ñвітла) +- +- +- Monochrome (dark) +- Монохромна (темна) +- +- +- Colorful +- Кольорова +- +- +- You must restart the application to set the new language. Would you like to restart now? +- +- +- +- +- ApplicationSettingsWidgetGeneral +- +- Basic Settings +- Базове Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ +- +- +- Startup +- ЗапуÑк +- +- +- Start only a single instance of KeePassXC +- ЗапуÑкати лише один примірник KeePassXC +- +- +- Minimize window at application startup +- Згортати вікно піÑÐ»Ñ Ð·Ð°Ð¿ÑƒÑку заÑтоÑунку +- +- +- File Management +- ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ +- +- +- Backup database file before saving +- Створювати резервну копію Ñховища перед збереженнÑм +- +- +- Automatically save after every change +- Ðвтоматично зберігати піÑÐ»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ñ— зміни +- +- +- Automatically reload the database when modified externally +- Ðвтоматично перезавантажувати Ñховище піÑÐ»Ñ Ð·Ð¾Ð²Ð½Ñ–ÑˆÐ½Ñ–Ñ… змін +- +- +- Entry Management +- ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñами +- +- +- Use group icon on entry creation +- ВикориÑтовувати Ð´Ð»Ñ Ð½Ð¾Ð²Ð¸Ñ… запиÑів значок групи +- +- +- Minimize instead of app exit +- Згортати вікно заміÑÑ‚ÑŒ Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ‚Ñ +- +- +- Show a system tray icon +- Показувати значок у ÑиÑтемному лотку +- +- +- Hide window to system tray when minimized +- ПіÑÐ»Ñ Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ Ñ…Ð¾Ð²Ð°Ñ‚Ð¸ вікно в ÑиÑтемний лоток +- +- +- Auto-Type +- ÐÐ²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ +- +- +- Use entry title to match windows for global Auto-Type +- ВикориÑтовувати заголовок запиÑу Ð´Ð»Ñ Ð·Ð½Ð°Ñ…Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ð¾Ð³Ð¾ вікна у глобальному автозаповненні +- +- +- Use entry URL to match windows for global Auto-Type +- ВикориÑтовувати URL запиÑу Ð´Ð»Ñ Ð·Ð½Ð°Ñ…Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ð¾Ð³Ð¾ вікна у глобальному автозаповненні +- +- +- Always ask before performing Auto-Type +- Завжди питати перед автозаповненнÑм +- +- +- ms +- Milliseconds +- Ð¼Ñ +- +- +- Movable toolbar +- Рухома панель інÑтрументів +- +- +- Remember previously used databases +- Пам'Ñтати раніше викориÑтані Ñховища +- +- +- Load previously open databases on startup +- Завантажувати попередньо відкриті Ñховища під Ñ‡Ð°Ñ Ð·Ð°Ð¿ÑƒÑку +- +- +- Remember database key files and security dongles +- Пам'Ñтати файлові ключі та апаратні ключі Ð´Ð»Ñ Ñховища +- +- +- Check for updates at application startup once per week +- ПеревірÑти наÑвніÑÑ‚ÑŒ оновлень Ñ‰Ð¾Ñ‚Ð¸Ð¶Ð½Ñ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ Ð·Ð°Ð¿ÑƒÑку заÑтоÑунку +- +- +- Include beta releases when checking for updates +- Пропонувати бета випуÑки Ð´Ð»Ñ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ +- +- +- Language: +- Мова: +- +- +- (restart program to activate) +- (перезапуÑÑ‚Ñ–Ñ‚ÑŒ програму, щоб активувати) +- +- +- Minimize window after unlocking database +- Згортати вікно піÑÐ»Ñ Ñ€Ð¾Ð·Ð±Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ñховища +- +- +- Minimize when opening a URL +- Згортати піÑÐ»Ñ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ URL +- +- +- Hide window when copying to clipboard +- Ховати вікно піÑÐ»Ñ ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ Ñƒ кишеню +- +- +- Minimize +- Згорнути +- +- +- Drop to background +- ПереÑунути на задній план +- +- +- Favicon download timeout: +- Ліміт чаÑу Ð´Ð»Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð²Ñ–ÐºÐ¾Ð½Ñƒ: +- +- +- Website icon download timeout in seconds +- Ліміт чаÑу в Ñекундах Ð´Ð»Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð½Ð°Ñ‡ÐºÐ° Ñайту +- +- +- sec +- Seconds +- Ñек +- +- +- Toolbar button style +- Стиль кнопки Ð´Ð»Ñ Ð¿Ð°Ð½ÐµÐ»Ñ– інÑтрументів +- +- +- Language selection +- Вибір мови +- +- +- Global auto-type shortcut +- Глобальне ÑÐ¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ ÐºÐ»Ð°Ð²Ñ–Ñˆ Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ +- +- +- Auto-type character typing delay milliseconds +- Затримка в міліÑекундах перед введеннÑм Ñимволів під Ñ‡Ð°Ñ Ð°Ð²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ +- +- +- Auto-type start delay milliseconds +- Затримка в міліÑекундах перед початком Ð°Ð²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ +- +- +- Automatically launch KeePassXC at system startup +- Ðвтоматично запуÑкати KeePassXC під Ñ‡Ð°Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ– ÑиÑтеми +- +- +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- Безпечно зберігати файли Ñховищ (вимкніть, Ñкщо виникають проблеми з Dropbox та ін.) +- +- +- User Interface +- Ð†Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÐºÐ¾Ñ€Ð¸Ñтувача +- +- +- Toolbar button style: +- Стиль кнопок панелі інÑтрументів: +- +- +- Use monospaced font for notes +- ВикориÑтовувати моноширинний шрифт Ð´Ð»Ñ Ð½Ð¾Ñ‚Ð°Ñ‚Ð¾Ðº +- +- +- Tray icon type: +- Варіант значка в лотку: +- +- +- Reset settings to default… +- Скинути параметри до типових... +- +- +- Auto-Type typing delay: +- Затримка Ð²Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ñимволів під Ñ‡Ð°Ñ Ð°Ð²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ: +- +- +- Global Auto-Type shortcut: +- Глобальне ÑÐ¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ ÐºÐ»Ð°Ð²Ñ–Ñˆ Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ: +- +- +- Auto-Type start delay: +- Затримка початку автозаповненнÑ: +- +- +- Automatically save when locking database +- +- +- +- Automatically save non-data changes when locking database +- +- +- +- Tray icon type +- +- +- +- +- ApplicationSettingsWidgetSecurity +- +- Timeouts +- Ð§Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ +- +- +- Clear clipboard after +- Очищати кишеню через +- +- +- sec +- Seconds +- Ñек +- +- +- Lock databases after inactivity of +- Блокувати Ñховища, неактивні протÑгом +- +- +- min +- хвилин +- +- +- Forget TouchID after inactivity of +- Забувати TouchID, неактивний протÑгом +- +- +- Convenience +- ЗручніÑÑ‚ÑŒ +- +- +- Lock databases when session is locked or lid is closed +- Блокувати Ñховища піÑÐ»Ñ Ð±Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ ÑеÑÑ–Ñ— або Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ‚Ñ ÐºÑ€Ð¸ÑˆÐºÐ¸ приÑтрою +- +- +- Forget TouchID when session is locked or lid is closed +- Забувати TouchID піÑÐ»Ñ Ð±Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ ÑеÑÑ–Ñ— або Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ‚Ñ ÐºÑ€Ð¸ÑˆÐºÐ¸ приÑтрою +- +- +- Lock databases after minimizing the window +- Блокувати Ñховища піÑÐ»Ñ Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ Ð²Ñ–ÐºÐ½Ð° +- +- +- Re-lock previously locked database after performing Auto-Type +- Блокувати попередньо заблоковане Ñховище піÑÐ»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð°Ð²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ +- +- +- Hide passwords in the entry preview panel +- Приховувати паролі у панелі передпереглÑду запиÑу +- +- +- Hide entry notes by default +- Типово приховувати нотатки до запиÑу +- +- +- Privacy +- ПриватніÑÑ‚ÑŒ +- +- +- Use DuckDuckGo service to download website icons +- ВикориÑтовувати ÑÐµÑ€Ð²Ñ–Ñ DuckDuckGo Ð´Ð»Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð½Ð°Ñ‡ÐºÑ–Ð² Ñайтів +- +- +- Clipboard clear seconds +- Очищати кишеню через Ñтільки Ñекунд +- +- +- Touch ID inactivity reset +- Ð¡ÐºÐ¸Ð´Ð°Ð½Ð½Ñ TouchID піÑÐ»Ñ Ð±ÐµÐ·Ð´Ñ–ÑльноÑÑ‚Ñ– +- +- +- Database lock timeout seconds +- Ð‘Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ñховища за чаÑом в Ñекундах +- +- +- min +- Minutes +- хвилин +- +- +- Clear search query after +- Очищати пошуковий запит через +- +- +- Require password repeat when it is visible +- Вимагати Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ, Ñкщо він не прихований +- +- +- Hide passwords when editing them +- Приховувати паролі під Ñ‡Ð°Ñ Ñ—Ñ… Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ +- +- +- Use placeholder for empty password fields +- Показувати текÑÑ‚-заповнювач Ð´Ð»Ñ Ð¿Ð¾Ñ€Ð¾Ð¶Ð½Ñ–Ñ… полів паролів +- +- +- +- AutoType +- +- Couldn't find an entry that matches the window title: +- Ðе знайдено запиÑ, що відповідає заголовку вікна: +- +- +- Auto-Type - KeePassXC +- ÐÐ²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ â€“ KeePassXC +- +- +- Auto-Type +- ÐÐ²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ +- +- +- The Syntax of your Auto-Type statement is incorrect! +- СинтакÑÐ¸Ñ Ð²Ð¸Ñ€Ð°Ð·Ñƒ ÐÐ²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¸Ð¹! +- +- +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- Команда ÐÐ²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð¼Ñ–Ñтить надто довгу затримку. Ви дійÑно хочете продовжити? +- +- +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- Команда ÐÐ²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð¼Ñ–Ñтить надто повільні натиÑÐºÐ°Ð½Ð½Ñ ÐºÐ»Ð°Ð²Ñ–Ñˆ. Ви дійÑно хочете продовжити? +- +- +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- Команда ÐÐ²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð¼Ñ–Ñтить надто чаÑто повторювані параметри. Ви дійÑно хочете продовжити? +- +- +- Permission Required +- Ðеобхідний дозвіл +- +- +- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC потребує дозволу на доÑтупніÑÑ‚ÑŒ Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð°Ð²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð½Ð° рівні запиÑів. Якщо Ви вже надали цей дозвіл, можливо Вам необхідно перезапуÑтити KeePassXC. +- +- +- +- AutoTypeAssociationsModel +- +- Window +- Вікно +- +- +- Sequence +- ПоÑлідовніÑÑ‚ÑŒ +- +- +- Default sequence +- Типова поÑлідовніÑÑ‚ÑŒ +- +- +- +- AutoTypeMatchModel +- +- Group +- Група +- +- +- Title +- Заголовок +- +- +- Username +- Ð†Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача +- +- +- Sequence +- ПоÑлідовніÑÑ‚ÑŒ +- +- +- +- AutoTypeMatchView +- +- Copy &username +- Скопіювати &ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача +- +- +- Copy &password +- Скопіювати &пароль +- +- +- +- AutoTypePlatformMac +- +- Permission Required +- Ðеобхідний дозвіл +- +- +- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC потребує дозволу на доÑтупніÑÑ‚ÑŒ Ñ– Ð·Ð°Ð¿Ð¸Ñ ÐµÐºÑ€Ð°Ð½Ñƒ Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ автозаповненнÑ. Ð—Ð°Ð¿Ð¸Ñ ÐµÐºÑ€Ð°Ð½Ñƒ необхідний, щоб виÑвити зоголовок вікна Ð´Ð»Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ запиÑів. Якщо Ви вже надали цей дозвіл, можливо Вам необхідно перезапуÑтити KeePassXC. +- +- +- +- AutoTypeSelectDialog +- +- Auto-Type - KeePassXC +- ÐÐ²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ â€“ KeePassXC +- +- +- Select entry to Auto-Type: +- Виберіть Ð·Ð°Ð¿Ð¸Ñ Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ: +- +- +- Search... +- Знайти... +- +- +- +- BrowserAccessControlDialog +- +- KeePassXC - Browser Access Request +- Запит доÑтупу Ð´Ð»Ñ KeePassXC-Browser +- +- +- %1 is requesting access to the following entries: +- %1 запитує доÑтуп до таких запиÑів: +- +- +- Remember access to checked entries +- Запам'Ñтати доÑтуп до позначених запиÑів +- +- +- Remember +- Запам'Ñтати +- +- +- Allow access to entries +- Дозволити доÑтуп до запиÑів +- +- +- Allow Selected +- Дозволити обрані +- +- +- Deny All +- Заборонити вÑÑ– +- +- +- Disable for this site +- Вимкнути Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ Ñайту +- +- +- +- BrowserEntrySaveDialog +- +- KeePassXC-Browser Save Entry +- KeePassXC-Browser Ð—Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñу +- +- +- Ok +- Гаразд +- +- +- Cancel +- СкаÑувати +- +- +- You have multiple databases open. +-Please select the correct database for saving credentials. +- У Ð²Ð°Ñ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¾ декілька Ñховищ. +-Будь лаÑка, оберіть правильне Ñховище Ð´Ð»Ñ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ñ€ÐµÑ”Ñтраційних даних. +- +- +- +- BrowserService +- +- KeePassXC: New key association request +- KeePassXC: новий запит на прив'Ñзку ключа +- +- +- Save and allow access +- Зберегти Ñ– дозволити доÑтуп +- +- +- KeePassXC: Overwrite existing key? +- KeePassXC: перезапиÑати наÑвний ключ? +- +- +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- Спільний ключ ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð· назвою «%1» вже Ñ–Ñнує. +-ПерезапиÑати його? +- +- +- KeePassXC: Update Entry +- KeePassXC: оновити Ð·Ð°Ð¿Ð¸Ñ +- +- +- Do you want to update the information in %1 - %2? +- Бажаєте оновити інформацію у %1 – %2? +- +- +- Abort +- СкаÑувати +- +- +- Converting attributes to custom data… +- ÐŸÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð·Ð½Ð°Ðº кориÑтувацьких даних… +- +- +- KeePassXC: Converted KeePassHTTP attributes +- KeePassXC: Ознаки KeePassHTTP перетворено +- +- +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- Ознаки %1 запиÑу(-ів) уÑпішно перетворені. +-%2 ключів переміщено до кориÑтувацьких даних. +- +- +- Successfully moved %n keys to custom data. +- %n ключ уÑпішно переміщено до кориÑтувацьких даних.%n ключа уÑпішно переміщено до кориÑтувацьких даних.%n ключів уÑпішно переміщено до кориÑтувацьких даних.%n ключів уÑпішно переміщено до кориÑтувацьких даних. +- +- +- KeePassXC: No entry with KeePassHTTP attributes found! +- KeePassXC: ЗапиÑів з ознаками KeePassHTTP не знайдено! +- +- +- The active database does not contain an entry with KeePassHTTP attributes. +- Поточне Ñховище не міÑтить запиÑу з ознаками KeePassHTTP. +- +- +- KeePassXC: Legacy browser integration settings detected +- KeePassXC: знайдено заÑтаріле Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÑÐ¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð· переглÑдачами +- +- +- KeePassXC: Create a new group +- KeePassXC: Створити нову групу +- +- +- A request for creating a new group "%1" has been received. +-Do you want to create this group? +- +- Отримано запит Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð½Ð¾Ð²Ð¾Ñ— групи "%1". +-Ви хочете Ñтворити цю групу? +- +- +- +- Your KeePassXC-Browser settings need to be moved into the database settings. +-This is necessary to maintain your current browser connections. +-Would you like to migrate your existing settings now? +- Потрібно переміÑтити Ваші параметри Ð´Ð»Ñ KeePassXC-Browser до параметрів Ñховища. +-Це необхідно Ð´Ð»Ñ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ñполучень з Вашим поточним переглÑдачем. +-Бажаєте переміÑтити параметри зараз? +- +- +- Don't show this warning again +- Більше не показувати це Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ +- +- +- You have received an association request for the following database: +-%1 +- +-Give the connection a unique name or ID, for example: +-chrome-laptop. +- Ви одержали запит на ÑÐ¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð· таким Ñховищем: +-%1 +- +-Ðадайте Ñполученню унікальне ім'Ñ Ð°Ð±Ð¾ ідентифікатор, наприклад: +-chrome-на-ноутбуці. +- +- +- +- BrowserSettingsWidget +- +- Dialog +- Діалог +- +- +- This is required for accessing your databases with KeePassXC-Browser +- Це необхідно Ð´Ð»Ñ Ð½Ð°Ð´Ð°Ð½Ð½Ñ KeePassXC-Browser доÑтупу до Ваших Ñховищ +- +- +- Enable browser integration +- Увімкнути ÑÐ¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð· переглÑдачами +- +- +- General +- Загальні +- +- +- Browsers installed as snaps are currently not supported. +- Підтримка переглÑдачів, вÑтановлених через Snap, наразі не втілена. +- +- +- Enable integration for these browsers: +- Увімкнути ÑÐ¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð· такими переглÑдачами: +- +- +- Vivaldi +- Vivaldi +- +- +- &Edge +- &Edge +- +- +- Firefox +- Firefox +- +- +- Tor Browser +- Tor Browser +- +- +- Brave +- Brave +- +- +- Google Chrome +- Google Chrome +- +- +- Chromium +- Chromium +- +- +- Show a notification when credentials are requested +- Credentials mean login data requested via browser extension +- Показувати повідомленнÑ, коли надходить запит на реєÑтраційні дані +- +- +- Request to unlock the database if it is locked +- Запитувати щодо Ñ€Ð¾Ð·Ð±Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ñховища, Ñкщо воно заблоковане +- +- +- Only entries with the same scheme (http://, https://, ...) are returned. +- Показані тільки запиÑи з такою Ñамою Ñхемою (http://, https://, ftp://, …). +- +- +- Match URL scheme (e.g., https://...) +- Узгоджувати Ñхеми URL (наприклад, https://...) +- +- +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- Показувати лише найкращі збіги Ð´Ð»Ñ Ð¿ÐµÐ²Ð½Ð¾Ð³Ð¾ URL заміÑÑ‚ÑŒ уÑÑ–Ñ… запиÑів Ð´Ð»Ñ Ð²Ñієї облаÑÑ‚Ñ–. +- +- +- Return only best-matching credentials +- Показувати лише найкращі збіги реєÑтраційних даних +- +- +- Returns expired credentials. String [expired] is added to the title. +- Показує знечинені реєÑтраційні дані. Заголовок міÑтитимить позначку [знечинені]. +- +- +- Allow returning expired credentials +- Дозволити показ недійÑних реєÑтраційних даних +- +- +- All databases connected to the extension will return matching credentials. +- Збіги з реєÑтраційними даними буде знайдено в уÑÑ–Ñ… Ñполучених Ñховищах. +- +- +- Search in all opened databases for matching credentials +- Credentials mean login data requested via browser extension +- Шукати збіги з реєÑтраційними даними в уÑÑ–Ñ… відкритих Ñховищах +- +- +- Sort matching credentials by title +- Credentials mean login data requested via browser extension +- Сортувати збіжні реєÑтраційні дані за заголовком +- +- +- Sort matching credentials by username +- Credentials mean login data requested via browser extension +- Сортувати збіжні реєÑтраційні дані за іменем кориÑтувача +- +- +- Advanced +- Розширене +- +- +- Never ask before accessing credentials +- Credentials mean login data requested via browser extension +- Ðіколи не запитувати перед читаннÑм реєÑтраційних даних +- +- +- Never ask before updating credentials +- Credentials mean login data requested via browser extension +- Ðіколи не запитувати перед оновленнÑм реєÑтраційних даних +- +- +- Do not ask permission for HTTP Basic Auth +- An extra HTTP Basic Auth setting +- Ðе запитувати дозвіл Ð´Ð»Ñ HTTP Basic Auth +- +- +- Automatically creating or updating string fields is not supported. +- Ðвтоматичне ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ‚Ð° Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ‚ÐµÐºÑтових полів не втілене. +- +- +- Return advanced string fields which start with "KPH: " +- Показувати розширені текÑтові полÑ, що починаютьÑÑ Ð· "KPH: " +- +- +- Don't display the popup suggesting migration of legacy KeePassHTTP settings. +- Ðе показувати вигульк, що рекомендує Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ–Ð² заÑтарілого KeePassHTTP. +- +- +- Do not prompt for KeePassHTTP settings migration. +- Ðе запитувати щодо Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ–Ð² KeePassHTTP. +- +- +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- Ðвтоматично оновлює шлÑÑ… до Ñценаріїв влаÑного обміну повідомленнÑми Ð´Ð»Ñ KeePassXC або двійкового поÑередника KeePassXC під Ñ‡Ð°Ñ Ð·Ð°Ð¿ÑƒÑку. +- +- +- Update native messaging manifest files at startup +- Оновлювати файли маніфеÑту влаÑного обміну повідомленнÑми під Ñ‡Ð°Ñ Ð·Ð°Ð¿ÑƒÑку +- +- +- Use a custom proxy location if you installed a proxy manually. +- ВикориÑтовувати влаÑне Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñередника, Ñкщо Ви вÑтановили поÑередника вручну. +- +- +- Use a custom proxy location: +- Meant is the proxy for KeePassXC-Browser +- ВикориÑтовувати влаÑне Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñередника: +- +- +- Custom proxy location field +- Поле влаÑного Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñередника +- +- +- Browser for custom proxy file +- ПереглÑдач Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ñƒ влаÑного поÑередника +- +- +- Browse... +- Button for opening file dialog +- ПереглÑнути... +- +- +- Use a custom browser configuration location: +- ВикориÑтовувати влаÑне Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ–Ð² переглÑдача: +- +- +- Browser type: +- Тип переглÑдача: +- +- +- Toolbar button style +- Стиль кнопки Ð´Ð»Ñ Ð¿Ð°Ð½ÐµÐ»Ñ– інÑтрументів +- +- +- Config Location: +- Ð Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ–Ð²: +- +- +- Custom browser location field +- Поле влаÑного Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÐ³Ð»Ñдача +- +- +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- +- +- Browse for custom browser path +- Вибрати влаÑний шлÑÑ… Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ³Ð»Ñдача +- +- +- Custom extension ID: +- ВлаÑний ідентифікатор розширеннÑ: +- +- +- Custom extension ID +- ВлаÑний ідентифікатор Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ +- +- +- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 +- Через заходи безпеки у Snap Вам необхідно виконати Ñценарій Ð´Ð»Ñ ÑÐ¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð· переглÑдачем. <br />Ви можете знайти файл Ñценарію в %1 +- +- +- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 +- Ð”Ð»Ñ ÑÐ¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð· переглÑдачем потрібен KeePassXC-Browser. <br />Заватнажити Ð´Ð»Ñ %1 Ñ– %2 та %3. %4 +- +- +- Please see special instructions for browser extension use below +- Ðижче Ви можете знайти довідку з викориÑÑ‚Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÐ³Ð»Ñдача +- +- +- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. +- <b>Помилка:</b> Ðе можливо знайти влаÑного поÑередника за вказаним шлÑхом!<br/>Ð¡Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð· переглÑдачем <b>не працюватиме</b> без поÑередницького заÑтоÑунку. +- +- +- <b>Warning:</b> The following options can be dangerous! +- <b>ПопередженнÑ:</b> ці параметри можуть бути небезпечними! +- +- +- Executable Files +- Виконувані файли +- +- +- All Files +- Ð’ÑÑ– файли +- +- +- Select custom proxy location +- Вибрати влаÑне Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñередника +- +- +- Select native messaging host folder location +- Вибрати Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚ÐµÐºÐ¸ Ð´Ð»Ñ Ð³Ð¾ÑÐ¿Ð¾Ð´Ð°Ñ€Ñ Ð²Ð»Ð°Ñного обміну повідомленнÑми +- +- +- +- CloneDialog +- +- Clone Options +- Параметри ÐºÐ»Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ +- +- +- Append ' - Clone' to title +- Додати « – клон» до заголовка +- +- +- Replace username and password with references +- Замінити ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача Ñ– пароль поÑиланнÑми +- +- +- Copy history +- Скопіювати журнал +- +- +- +- CsvImportWidget +- +- Import CSV fields +- Імпортувати Ð¿Ð¾Ð»Ñ CSV +- +- +- filename +- ім'Ñ Ñ„Ð°Ð¹Ð»Ñƒ +- +- +- size, rows, columns +- розмір, Ñ€Ñдки, колонки +- +- +- Encoding +- ÐšÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ +- +- +- Codec +- Кодек +- +- +- Text is qualified by +- ТекÑÑ‚ обмежений Ñимволами +- +- +- Fields are separated by +- ÐŸÐ¾Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»ÐµÐ½Ñ– Ñимволом +- +- +- Comments start with +- Коментарі починаютьÑÑ Ð· +- +- +- Consider '\' an escape character +- ВикориÑтовувати '\' Ð´Ð»Ñ Ð·Ð°Ñ…Ð¸Ñту Ñимволів +- +- +- Preview +- Попередній переглÑд +- +- +- Imported from CSV file +- Імпортовано з файлу CSV +- +- +- Original data: +- Початкові дані: +- +- +- Error +- Помилка +- +- +- Error(s) detected in CSV file! +- У файлі CSV знайдено помилки! +- +- +- [%n more message(s) skipped] +- [ще %n Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾][ще %n Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾][ще %n повідомлень пропущено][ще %n повідомлень пропущено] +- +- +- CSV import: writer has errors: +-%1 +- Ð†Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ CSV: помилки запиÑувача: +-%1 +- +- +- Text qualification +- ÐžÐ±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ñ‚ÐµÐºÑту +- +- +- Field separation +- Розділювач полів +- +- +- Number of header lines to discard +- КількіÑÑ‚ÑŒ Ñ€Ñдків заголовка, Ñкі треба пропуÑтити +- +- +- CSV import preview +- Попередній переглÑд імпортованого CSV +- +- +- Column Association +- Прив'Ñзка Ñтовпчиків +- +- +- Last Modified +- ОÑÑ‚Ð°Ð½Ð½Ñ Ð·Ð¼Ñ–Ð½Ð° +- +- +- Password +- Пароль +- +- +- Created +- Створено +- +- +- Notes +- Примітки +- +- +- Title +- Заголовок +- +- +- Group +- Група +- +- +- URL +- URL +- +- +- Username +- Ð†Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача +- +- +- Header lines skipped +- Пропущені Ñ€Ñдки заголовка +- +- +- First line has field names +- Перший Ñ€Ñдок міÑтить назви полів +- +- +- Not Present +- ВідÑутні +- +- +- Column %1 +- Стовпчик %1 +- +- +- TOTP +- ТОП +- +- +- Icon +- Значок +- +- +- +- CsvParserModel +- +- %n column(s) +- %n колонка%n колонки%n колонок%n колонок +- +- +- %1, %2, %3 +- file info: bytes, rows, columns +- %1, %2, %3 +- +- +- %n byte(s) +- %n байт%n байти%n байтів%n байтів +- +- +- %n row(s) +- %n Ñ€Ñдок%n Ñ€Ñдки%n Ñ€Ñдків%n Ñ€Ñдків +- +- +- +- Database +- +- File %1 does not exist. +- Файл %1 не Ñ–Ñнує. +- +- +- Unable to open file %1. +- Ðеможливо відкрити файл %1. +- +- +- Error while reading the database: %1 +- Помилка Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñховища: %1 +- +- +- File cannot be written as it is opened in read-only mode. +- Ðеможливо запиÑати файл, оÑкільки він відкритий у режимі читаннÑ. +- +- +- Key not transformed. This is a bug, please report it to the developers! +- Ключ не перетворено через ваду в програмі. Будь лаÑка, повідомте про це розробникам! +- +- +- %1 +-Backup database located at %2 +- %1 +-Резервне Ñховище знаходитьÑÑ Ð² %2 +- +- +- Could not save, database does not point to a valid file. +- Ð—Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ оÑкільки шлÑÑ… до Ñховища не вказує на придатний файл. +- +- +- Could not save, database file is read-only. +- Ð—Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ оÑкільки файл Ñховища доÑтупний лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ. +- +- +- Database file has unmerged changes. +- Файл Ñховища міÑтить необ'єднані зміни. +- +- +- Recycle Bin +- Смітник +- +- +- Passwords +- Root group name +- Паролі +- +- +- Database save is already in progress. +- Ð—Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ñховища вже триває. +- +- +- Could not save, database has not been initialized! +- Ð—Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ оÑкільки Ñховище не започатковане! +- +- +- +- DatabaseOpenDialog +- +- Unlock Database - KeePassXC +- Розблокувати Ñховище - KeePassXC +- +- +- +- DatabaseOpenWidget +- +- Key File: +- Файловий ключ: +- +- +- Refresh +- Оновити +- +- +- Don't show this warning again +- Більше не показувати це Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ +- +- +- All files +- Ð’ÑÑ– файли +- +- +- Key files +- Файлові ключі +- +- +- Select key file +- Виберіть файловий ключ +- +- +- Failed to open key file: %1 +- Ð’Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ð³Ð¾ ключа зазнало невдачі: %1 +- +- +- Unlock KeePassXC Database +- Розблокувати Ñховище KeePassXC +- +- +- Enter Password: +- Введіть пароль: +- +- +- Password field +- Поле Ð¿Ð°Ñ€Ð¾Ð»Ñ +- +- +- Hardware key slot selection +- Вибір гнізда апаратного захиÑту +- +- +- Browse for key file +- Вибір файлового ключа +- +- +- Browse... +- ПереглÑнути... +- +- +- Refresh hardware tokens +- Оновити апаратні позначки +- +- +- Hardware Key: +- Ðпаратний ключ: +- +- +- Hardware key help +- Довідка щодо апаратних ключів +- +- +- TouchID for Quick Unlock +- TouchID Ð´Ð»Ñ ÑˆÐ²Ð¸Ð´ÐºÐ¾Ð³Ð¾ Ñ€Ð¾Ð·Ð±Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ +- +- +- Unlock failed and no password given +- Ð Ð¾Ð·Ð±Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð·Ð½Ð°Ð»Ð¾ невдачі й пароль не надано +- +- +- Unlocking the database failed and you did not enter a password. +-Do you want to retry with an "empty" password instead? +- +-To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. +- Ð Ð¾Ð·Ð±Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ñховища зазнало невдачі Ñ– Ви не ввели пароль. +-Бажаєте Ñпробувати натоміÑÑ‚ÑŒ з порожнім паролем? +- +-Щоб уникати цього Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñƒ майбутньому, Ви муÑите вибрати в меню в меню «ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñховища / Безпека» Ñ– вÑтановити Ваш пароль. +- +- +- Retry with empty password +- Спробувати знову з порожнім паролем +- +- +- Enter Additional Credentials (if any): +- Введіть додаткові реєÑтраційні дані (Ñкщо Ñ”): +- +- +- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +-<p>Click for more information...</p> +- <p>Ви можете викориÑтовувати апаратний ключ захиÑту на кшталт <strong>YubiKey</strong> чи <strong>OnlyKey</strong> з гніздами налаштованими під HMAC-SHA1.</p> +-<p>ÐатиÑніть тут Ð´Ð»Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ¾Ð²Ð¾Ñ— інформації...</p> +- +- +- Key file help +- Довідка щодо файлового ключа +- +- +- ? +- ? +- +- +- Cannot use database file as key file +- Ðеможливо викориÑтати файл Ñховища Ñк файловий ключ +- +- +- You cannot use your database file as a key file. +-If you do not have a key file, please leave the field empty. +- Ви не можете викориÑтовувати файл Ñховища Ñк файловий ключ. +-Якщо у Ð’Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” файлового ключа, залиште, будь лаÑка, це поле порожнім. +- +- +- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> +- <p>Ðа додаток до Вашого Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð’Ð¸ можете викориÑтовувати таємний файл Ð´Ð»Ñ Ð¿Ð¾ÑÐ¸Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ñ…Ð¸Ñту Вашого Ñховища. Такий файл можна Ñтворити у розділі Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð±ÐµÐ·Ð¿ÐµÐºÐ¸ Вашого Ñховища.</p><p>Цей файл <strong>відрізнÑєтьÑÑ</strong> від Вашого файлу Ñховища *.kdbx!<br>Якщо у Ð’Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” файлового ключа, залиште це поле порожнім.</p><p>ÐатиÑніть тут Ð´Ð»Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ¾Ð²Ð¾Ñ— інформації...</p> +- +- +- Key file to unlock the database +- Файловий ключ Ð´Ð»Ñ Ñ€Ð¾Ð·Ð±Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ñховища +- +- +- Please touch the button on your YubiKey! +- ÐатиÑніть, будь лаÑка, кнопку на вашому YubiKey! +- +- +- Detecting hardware keys… +- ВиÑÐ²Ð»ÐµÐ½Ð½Ñ Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð¸Ñ… ключів... +- +- +- No hardware keys detected +- Ðе виÑвлено апаратних ключів +- +- +- Select hardware key… +- Вибрати ключ апаратного захиÑту... +- +- +- Old key file format +- +- +- +- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> +- +- +- +- +- DatabaseSettingWidgetMetaData +- +- Passwords +- Паролі +- +- +- +- DatabaseSettingsDialog +- +- Advanced Settings +- Розширене Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ +- +- +- General +- Загальне +- +- +- Security +- Безпека +- +- +- Encryption Settings +- ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ +- +- +- Browser Integration +- Ð¡Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð· переглÑдачем +- +- +- Database Credentials +- РеєÑтраційні дані Ñховища +- +- +- +- DatabaseSettingsWidgetBrowser +- +- KeePassXC-Browser settings +- ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ KeePassXC-Browser +- +- +- Stored keys +- Збережені ключі +- +- +- Remove +- Видалити +- +- +- Delete the selected key? +- Видалити вибраний ключ? +- +- +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- Ви дійÑно бажаєте видалити позначений ключ? +-Це може пошкодити ÑÐ¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð· модулем переглÑдача. +- +- +- Key +- Ключ +- +- +- Value +- Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ +- +- +- Enable Browser Integration to access these settings. +- Увімкніть ÑÐ¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð· переглÑдачем, щоб діÑтати доÑтуп до цих параметрів. +- +- +- Disconnect all browsers +- Від'єднати від уÑÑ–Ñ… переглÑдачів +- +- +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- Ви дійÑно хочете від'єднати уÑÑ– переглÑдачі? +-Це може пошкодити ÑÐ¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð· модулем переглÑдача. +- +- +- KeePassXC: No keys found +- KeePassXC: жодного ключа не знайдено +- +- +- No shared encryption keys found in KeePassXC settings. +- Ðе знайдено жодного Ñпільного ключа у параметрах KeePassXC. +- +- +- KeePassXC: Removed keys from database +- KeePassXC: ключі видалено зі Ñховища +- +- +- Successfully removed %n encryption key(s) from KeePassXC settings. +- УÑпішно видалено %n ключ ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð· параметрів KeePassXC.УÑпішно видалено %n ключі ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð· параметрів KeePassXC.УÑпішно видалено %n ключів ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð· параметрів KeePassXC.УÑпішно видалено %n ключів ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð· параметрів KeePassXC. +- +- +- Forget all site-specific settings on entries +- Забути оÑобливе Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñайтів у вÑÑ–Ñ… запиÑах +- +- +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- Ви дійÑно бажаєте позбутиÑÑ Ð¾Ñобливого Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²ÑÑ–Ñ… Ñайтів у кожному запиÑÑ–? +-Дозволи доÑтупу до запиÑів будуть ÑкаÑовані. +- +- +- Removing stored permissions… +- Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¸Ñ… дозволів... +- +- +- Abort +- СкаÑувати +- +- +- KeePassXC: Removed permissions +- KeePassXC: дозволи видалено +- +- +- Successfully removed permissions from %n entry(s). +- УÑпішно видалено дозволи з %n запиÑу.УÑпішно видалено дозволи з %n запиÑів.УÑпішно видалено дозволи з %n запиÑів.УÑпішно видалено дозволи з %n запиÑів. +- +- +- KeePassXC: No entry with permissions found! +- KeePassXC: Ð·Ð°Ð¿Ð¸Ñ Ð· дозволами не знайдено! +- +- +- The active database does not contain an entry with permissions. +- Поточне Ñховище не міÑтить запиÑів з дозволами. +- +- +- Move KeePassHTTP attributes to custom data +- ПереміÑтити ознаки KeePassHTTP до кориÑтувацьких даних +- +- +- Do you really want to move all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- Ви дійÑно бажаєте оновити заÑтаріле Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÑÐ¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð· переглÑдачами згідно з найновішими Ñтандартами? +-Це необхідно Ð´Ð»Ñ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ ÑуміÑноÑÑ‚Ñ– з модулем переглÑдача. +- +- +- Stored browser keys +- Збережені ключі переглÑдачів +- +- +- Remove selected key +- Видалити вибраний ключ +- +- +- Move KeePassHTTP attributes to KeePassXC-Browser custom data +- ПереміÑтити ознаки KeePassHTTP до влаÑних даних KeePassXC-Browser +- +- +- Refresh database root group ID +- Оновити ідентифікатор кореневої групи Ñховища +- +- +- Created +- Створено +- +- +- Refresh database ID +- Оновити ідентифікатор Ñховища +- +- +- Do you really want refresh the database ID? +-This is only necessary if your database is a copy of another and the browser extension cannot connect. +- Ви дійÑно бажаєте оновити ID Ñховища? +-Це необхідно лише тоді, коли ваше Ñховище Ñ” копією іншого Ñ– не вдаєтьÑÑ Ð¿Ñ–Ð´'єднати Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð±Ñ€Ð°ÑƒÐ·ÐµÑ€Ð°. +- +- +- +- DatabaseSettingsWidgetDatabaseKey +- +- Add additional protection... +- Поліпшити захиÑÑ‚... +- +- +- No password set +- Пароль не вÑтановлено +- +- +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- <b>ПопередженнÑ!</b> Ви не вÑтановили пароль. Ðедоцільно викориÑтовувати Ñховище без паролÑ! +- +-Ви дійÑно хочете продовжити без паролÑ? +- +- +- Continue without password +- Продовжити без Ð¿Ð°Ñ€Ð¾Ð»Ñ +- +- +- No encryption key added +- Жодного шифрувального ключа не додано +- +- +- You must add at least one encryption key to secure your database! +- Ви муÑите додати щонайменьше один шифрувальний ключ, щоб захиÑтити Ваше Ñховище! +- +- +- Unknown error +- Ðевідома помилка +- +- +- Failed to change database credentials +- Ðе вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ облікові дані Ñховища +- +- +- +- DatabaseSettingsWidgetEncryption +- +- Encryption Algorithm: +- Ðлгоритм шифруваннÑ: +- +- +- AES: 256 Bit (default) +- AES: 256 біт (типове) +- +- +- Twofish: 256 Bit +- Twofish: 256 біт +- +- +- Key Derivation Function: +- Ð¤ÑƒÐ½ÐºÑ†Ñ–Ñ Ð¾Ð±Ñ‡Ð¸ÑÐ»ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð°: +- +- +- Transform rounds: +- Циклів перетвореннÑ: +- +- +- Memory Usage: +- ВикориÑтана пам'ÑÑ‚ÑŒ: +- +- +- Parallelism: +- ПаралельніÑÑ‚ÑŒ: +- +- +- Decryption Time: +- Ð§Ð°Ñ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ: +- +- +- ?? s +- ?? Ñ +- +- +- Change +- Змінити +- +- +- Higher values offer more protection, but opening the database will take longer. +- Вищі Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ð»Ñ–Ð¿ÑˆÑƒÑŽÑ‚ÑŒ захиÑÑ‚, але Ñповільнюють Ð²Ñ–Ð´ÐºÑ€Ð¸Ð²Ð°Ð½Ð½Ñ Ñховища. +- +- +- Database format: +- Формат Ñховища: +- +- +- This is only important if you need to use your database with other programs. +- Це важливо тільки Ñкщо Вам потрібно викориÑтовувати Ваше Ñховище з іншими програмами. +- +- +- KDBX 4.0 (recommended) +- KDBX 4.0 (рекомендовано) +- +- +- KDBX 3.1 +- KDBX 3.1 +- +- +- unchanged +- Database decryption time is unchanged +- без змін +- +- +- Number of rounds too high +- Key transformation rounds +- КількіÑÑ‚ÑŒ циклів надто виÑока +- +- +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or days (or even longer) to open! +- Ви викориÑтовуєте надто багато циклів Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð´Ð»Ñ ÐºÐ»ÑŽÑ‡Ð° у форматі Argon2. +- +-Якщо Ви залишите таку кількіÑÑ‚ÑŒ циклів, Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ð’Ð°ÑˆÐ¾Ð³Ð¾ Ñховища може тривати кілька годин або днів (чи навіть довше)! +- +- +- Understood, keep number +- Зрозуміло, залишити таку кількіÑÑ‚ÑŒ +- +- +- Cancel +- СкаÑувати +- +- +- Number of rounds too low +- Key transformation rounds +- КількіÑÑ‚ÑŒ циклів надто низька +- +- +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database may be too easy to crack! +- Ви викориÑтовуєте надто мало циклів Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð´Ð»Ñ ÐºÐ»ÑŽÑ‡Ð° у форматі AES-KDF. +- +-Якщо Ви залишите таку кількіÑÑ‚ÑŒ циклів, Ваше Ñховище буде легко зламати! +- +- +- KDF unchanged +- ФОК не змінено +- +- +- Failed to transform key with new KDF parameters; KDF unchanged. +- Спроба перетворити ключ згідно з новими налаштуваннÑми ФОК зазнала невдачі; ФОК залишилаÑÑŒ без змін. +- +- +- MiB +- Abbreviation for Mebibytes (KDF settings) +- МіБМіБМіБМіБ +- +- +- thread(s) +- Threads for parallel execution (KDF settings) +- потікпотокипотоківпотоків +- +- +- Change existing decryption time +- Змінити наÑвний Ñ‡Ð°Ñ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ +- +- +- Decryption time in seconds +- Ð§Ð°Ñ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð² Ñекундах +- +- +- Database format +- Формат Ñховища +- +- +- Encryption algorithm +- Ðлгоритм ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ +- +- +- Key derivation function +- Ð¤ÑƒÐ½ÐºÑ†Ñ–Ñ Ð¾Ð±Ñ‡Ð¸ÑÐ»ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð° +- +- +- Transform rounds +- КількіÑÑ‚ÑŒ циклів Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ +- +- +- Memory usage +- ВикориÑтана пам'ÑÑ‚ÑŒ +- +- +- Parallelism +- ПаралельніÑÑ‚ÑŒ +- +- +- ?? ms +- ?? Ð¼Ñ +- +- +- ? s +- ? Ñ +- +- +- +- DatabaseSettingsWidgetFdoSecrets +- +- Exposed Entries +- ВиÑтавлені запиÑи +- +- +- Don't expose this database +- Ðе виÑтавлÑти це Ñховище +- +- +- Expose entries under this group: +- ВиÑтавити запиÑи з такої групи: +- +- +- Enable Secret Service to access these settings. +- +- +- +- +- DatabaseSettingsWidgetGeneral +- +- Database Meta Data +- Метадані Ñховища +- +- +- Database name: +- Ðазва Ñховища: +- +- +- Database description: +- ÐžÐ¿Ð¸Ñ Ñховища: +- +- +- Default username: +- Типове Ñ–Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача: +- +- +- History Settings +- ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¶ÑƒÑ€Ð½Ð°Ð»Ñƒ +- +- +- Max. history items: +- МакÑ. запиÑів журналу: +- +- +- Max. history size: +- МакÑ. розмір журналу: +- +- +- MiB +- МіБ +- +- +- Use recycle bin +- ВикориÑтовувати Ñмітник +- +- +- Additional Database Settings +- Додаткове Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñховища +- +- +- Database name field +- Поле назви Ñховища +- +- +- Database description field +- Поле опиÑу Ñховища +- +- +- Default username field +- Поле типового імені кориÑтувача +- +- +- Maximum number of history items per entry +- Ðайбільша кількіÑÑ‚ÑŒ заміток журналу Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу +- +- +- Maximum size of history per entry +- МакÑимальний розмір журналу Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу +- +- +- Delete Recycle Bin +- Видалити Ñмітник +- +- +- Do you want to delete the current recycle bin and all its contents? +-This action is not reversible. +- Ви дійÑно хочете видалити Ñмітник Ñ– веÑÑŒ його вміÑÑ‚? +-Ð’Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð±ÑƒÐ´Ðµ неможливим. +- +- +- (old) +- (Ñтарий) +- +- +- Enable compression (recommended) +- Увімкнути ÑтиÑÐ½ÐµÐ½Ð½Ñ (рекомендовано) +- +- +- +- DatabaseSettingsWidgetKeeShare +- +- Sharing +- Спільне кориÑÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ +- +- +- Breadcrumb +- Хлібні крихти +- +- +- Type +- Тип +- +- +- Path +- ШлÑÑ… +- +- +- Last Signer +- ОÑтанній підпиÑувач +- +- +- Certificates +- Сертифікати +- +- +- > +- Breadcrumb separator +- > +- +- +- +- DatabaseSettingsWidgetMetaDataSimple +- +- Database Name: +- Ðазва Ñховища: +- +- +- Description: +- ОпиÑ: +- +- +- Database name field +- Поле назви Ñховища +- +- +- Database description field +- Поле опиÑу Ñховища +- +- +- +- DatabaseTabWidget +- +- KeePass 2 Database +- Сховище KeePass 2 +- +- +- All files +- Ð’ÑÑ– файли +- +- +- Open database +- Відкрити Ñховище +- +- +- CSV file +- Файл CSV +- +- +- Merge database +- Об'єднати Ñховище +- +- +- Open KeePass 1 database +- Відкрити Ñховище KeePass 1 +- +- +- KeePass 1 database +- Сховище KeePass 1 +- +- +- Export database to CSV file +- ЕкÑпортувати Ñховище до файлу CSV +- +- +- Writing the CSV file failed. +- Ðе вдалоÑÑŒ запиÑати CSV файл. +- +- +- Database creation error +- Помилка ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñховища +- +- +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- Створене Ñховище не має ані ключа, ані ФОК, Ñ– тому не може бути збереженим. +-Це певно Ñ” вадою програми, будь лаÑка, повідомте про це розробникам. +- +- +- Select CSV file +- Вибрати файл CSV +- +- +- New Database +- Ðове Ñховище +- +- +- %1 [New Database] +- Database tab name modifier +- %1 [Ðове Ñховище] +- +- +- %1 [Locked] +- Database tab name modifier +- %1 [Заблоковане] +- +- +- %1 [Read-only] +- Database tab name modifier +- %1 [лише читаннÑ] +- +- +- Failed to open %1. It either does not exist or is not accessible. +- Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ %1. Він або не Ñ–Ñнує, або не Ñ” доÑтупним. +- +- +- Export database to HTML file +- ЕкÑпортувати Ñховище до файлу HTML +- +- +- HTML file +- Файл HTML +- +- +- Writing the HTML file failed. +- Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати файл HTML. +- +- +- Export Confirmation +- Ð¡Ñ…Ð²Ð°Ð»ÐµÐ½Ð½Ñ ÐµÐºÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ +- +- +- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? +- Ви збираєтеÑÑŒ екÑпортувати Ваше Ñховище в незашифрований файл. Це зробить Ваші паролі Ñ– вразливі дані незахищеними! Ви дійÑно бажаєте продовжити? +- +- +- Open OPVault +- +- +- +- +- DatabaseWidget +- +- Searching... +- Триває пошук… +- +- +- Do you really want to delete the entry "%1" for good? +- Ви дійÑно хочете оÑтаточно видалити Ð·Ð°Ð¿Ð¸Ñ Â«%1»? +- +- +- Do you really want to move entry "%1" to the recycle bin? +- Ви дійÑно хочете переміÑтити Ð·Ð°Ð¿Ð¸Ñ Â«%1» у Ñмітник? +- +- +- Do you really want to move %n entry(s) to the recycle bin? +- Ви дійÑно хочете переміÑтити %n Ð·Ð°Ð¿Ð¸Ñ Ñƒ Ñмітник?Ви дійÑно хочете переміÑтити %n запиÑи у Ñмітник?Ви дійÑно хочете переміÑтити %n запиÑів у Ñмітник?Ви дійÑно хочете переміÑтити %n запиÑів у Ñмітник? +- +- +- Execute command? +- Виконати команду? +- +- +- Do you really want to execute the following command?<br><br>%1<br> +- Ви дійÑно хочете виконати таку команду? <br><br>%1<br> +- +- +- Remember my choice +- Запам'Ñтати мій вибір +- +- +- Do you really want to delete the group "%1" for good? +- Ви дійÑно хочете оÑтаточно видалити групу «%1»? +- +- +- No current database. +- Сховище не обране. +- +- +- No source database, nothing to do. +- Джерельне Ñховище відÑутнє, Ð¾Ð±Ñ€Ð¾Ð±Ð»ÐµÐ½Ð½Ñ Ð½Ðµ потрібне. +- +- +- Search Results (%1) +- Результати пошуку (%1) +- +- +- No Results +- Збіги відÑутні +- +- +- File has changed +- Файл був змінений +- +- +- The database file has changed. Do you want to load the changes? +- Файл Ñховища змінено. Завантажити зміни? +- +- +- Merge Request +- Запит на об'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ +- +- +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- Файл Ñховища було змінено, а Ви маєте незбережені зміни. +-Об‘єднати ці зміни? +- +- +- Empty recycle bin? +- Спорожнити Ñмітник? +- +- +- Are you sure you want to permanently delete everything from your recycle bin? +- Ви дійÑно бажаєте оÑтаточно видалити вÑе зі Ñмітника? +- +- +- Do you really want to delete %n entry(s) for good? +- Ви дійÑно хочете оÑтаточно видалити %n запиÑ?Ви дійÑно хочете оÑтаточно видалити %n запиÑи?Ви дійÑно хочете оÑтаточно видалити %n запиÑів?Ви дійÑно хочете оÑтаточно видалити %n запиÑів? +- +- +- Delete entry(s)? +- Видалити запиÑ?Видалити запиÑи?Видалити запиÑи?Видалити запиÑи? +- +- +- Move entry(s) to recycle bin? +- ПереміÑтити Ð·Ð°Ð¿Ð¸Ñ Ñƒ Ñмітник?ПереміÑтити запиÑи в Ñмітник?ПереміÑтити запиÑи в Ñмітник?ПереміÑтити запиÑи в Ñмітник? +- +- +- Lock Database? +- Заблокувати Ñховище? +- +- +- You are editing an entry. Discard changes and lock anyway? +- Ви змінюєте запиÑ. Відкинути зміни Ñ– вÑе одно заблокувати? +- +- +- "%1" was modified. +-Save changes? +- «%1» змінено. +-Зберегти зміни? +- +- +- Database was modified. +-Save changes? +- Сховище змінено. +-Зберегти зміни? +- +- +- Save changes? +- Зберегти зміни? +- +- +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- Ð’Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ файлу Ñховища зазнало невдачі під Ñ‡Ð°Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ перевантаженнÑ. +-Помилка: %1 +- +- +- Disable safe saves? +- Вимкнути безпечне збереженнÑ? +- +- +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- KeePassXC не зміг зберегти Ñховище кілька разів поÑпіль. Швидше за вÑе це ÑталоÑÑ Ñ‚Ð¾Ð¼Ñƒ, що Ñлужба ÑƒÐ·Ð³Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² блокує файл Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу. +-Вимкнути безпечне Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ñ– Ñпробувати знов? +- +- +- Passwords +- Паролі +- +- +- Save database as +- Зберегти Ñховище Ñк +- +- +- KeePass 2 Database +- Сховище KeePass 2 +- +- +- Replace references to entry? +- Замінити поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° запиÑ? +- +- +- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? +- Ð—Ð°Ð¿Ð¸Ñ Â«%1» має %2 поÑиланнÑ. Бажаєте перезапиÑати поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñм, пропуÑтити Ð·Ð°Ð¿Ð¸Ñ Ð°Ð±Ð¾ вÑе одно видалити?Ð—Ð°Ð¿Ð¸Ñ Â«%1» має %2 поÑиланнÑ. Бажаєте перезапиÑати поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñм, пропуÑтити Ð·Ð°Ð¿Ð¸Ñ Ð°Ð±Ð¾ вÑе одно видалити?Ð—Ð°Ð¿Ð¸Ñ Â«%1» має %2 поÑилань. Бажаєте перезапиÑати поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñм, пропуÑтити Ð·Ð°Ð¿Ð¸Ñ Ð°Ð±Ð¾ вÑе одно видалити?Ð—Ð°Ð¿Ð¸Ñ Â«%1» має %2 поÑилань. Бажаєте перезапиÑати поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñм, пропуÑтити Ð·Ð°Ð¿Ð¸Ñ Ð°Ð±Ð¾ вÑе одно видалити? +- +- +- Delete group +- Видалити групу +- +- +- Move group to recycle bin? +- ПереміÑтити групу у Ñмітник? +- +- +- Do you really want to move the group "%1" to the recycle bin? +- Ви дійÑно хочете переміÑтити групу «%1» у Ñмітник? +- +- +- Successfully merged the database files. +- Файли Ñховищ вдало об'єднано. +- +- +- Database was not modified by merge operation. +- Об'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ змінило Ñховище. +- +- +- Shared group... +- Спільна група... +- +- +- Writing the database failed: %1 +- ЗапиÑати Ñховище не вдалоÑÑ: %1 +- +- +- This database is opened in read-only mode. Autosave is disabled. +- Сховище відкрито у режимі читаннÑ. Ðвтоматичне Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð¾. +- +- +- Save database backup +- Зберегти резервну копію Ñховища +- +- +- Could not find database file: %1 +- Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ файл Ñховища: %1 +- +- +- +- EditEntryWidget +- +- Entry +- Ð—Ð°Ð¿Ð¸Ñ +- +- +- Advanced +- Розширене +- +- +- Icon +- Значок +- +- +- Auto-Type +- ÐÐ²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ +- +- +- Properties +- ВлаÑтивоÑÑ‚Ñ– +- +- +- History +- Журнал +- +- +- SSH Agent +- ПоÑередник SSH +- +- +- n/a +- немає +- +- +- (encrypted) +- (зашифровано) +- +- +- Select private key +- Вибрати таємний ключ +- +- +- Entry history +- Журнал запиÑу +- +- +- Add entry +- Додати Ð·Ð°Ð¿Ð¸Ñ +- +- +- Edit entry +- Змінити Ð·Ð°Ð¿Ð¸Ñ +- +- +- New attribute +- Ðова ознака +- +- +- Are you sure you want to remove this attribute? +- Ви дійÑно бажаєте видалити цю ознаку? +- +- +- Tomorrow +- Завтра +- +- +- %n week(s) +- %n тиждень%n тижнÑ%n тижнів%n тижнів +- +- +- %n month(s) +- %n міÑÑць%n міÑÑцÑ%n міÑÑців%n міÑÑців +- +- +- Entry updated successfully. +- Ð—Ð°Ð¿Ð¸Ñ ÑƒÑпішно оновлено. +- +- +- New attribute %1 +- Ðова ознака %1 +- +- +- %n year(s) +- %n рік%n роки%n років%n років +- +- +- Confirm Removal +- Схваліть Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ +- +- +- Browser Integration +- Ð¡Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð· переглÑдачем +- +- +- <empty URL> +- <порожній URL> +- +- +- Are you sure you want to remove this URL? +- Ви дійÑно бажаєте видалити цей URL? +- +- +- Reveal +- Показати +- +- +- Hide +- +- +- +- Unsaved Changes +- +- +- +- Would you like to save changes to this entry? +- Бажаєте зберегти зміни внеÑені до цього запиÑу? +- +- +- [PROTECTED] Press Reveal to view or edit +- +- +- +- Invalid Entry +- +- +- +- An external merge operation has invalidated this entry. +-Unfortunately, any changes made have been lost. +- +- +- +- +- EditEntryWidgetAdvanced +- +- Additional attributes +- Додаткові ознаки +- +- +- Add +- Додати +- +- +- Remove +- Видалити +- +- +- Edit Name +- Змінити назву +- +- +- Protect +- ЗахиÑтити +- +- +- Reveal +- Показати +- +- +- Attachments +- Ð’ÐºÐ»Ð°Ð´ÐµÐ½Ð½Ñ +- +- +- Foreground Color: +- Колір переднього плану: +- +- +- Background Color: +- Колір тла: +- +- +- Attribute selection +- Вибір ознаки +- +- +- Attribute value +- Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¾Ð·Ð½Ð°ÐºÐ¸ +- +- +- Add a new attribute +- Додати нову ознаку +- +- +- Remove selected attribute +- Видалити вибрану ознаку +- +- +- Edit attribute name +- Змінити назву ознаки +- +- +- Toggle attribute protection +- Перемкнути захиÑÑ‚ ознаки +- +- +- Show a protected attribute +- Показати захищену ознаку +- +- +- Foreground color selection +- Вибір кольору переднього плану +- +- +- Background color selection +- Вибір кольору тла +- +- +- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> +- <html><head/><body><p>Якщо відмічено, Ð·Ð°Ð¿Ð¸Ñ Ð½Ðµ буде показано у таких звітах, Ñк Health Check та HIBP, навіть Ñкщо він не відповідає вимогам безпеки (наприклад, ÐµÐ½Ñ‚Ñ€Ð¾Ð¿Ñ–Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ Ñ‡Ð¸ повторніÑÑ‚ÑŒ викориÑтаннÑ). Ви можете вÑтановити цей прапорець у випадках, коли вибір Ð¿Ð°Ñ€Ð¾Ð»Ñ Ñ” Вашим контролем (наприклад, чотиризначний PIN-код), аби не захаращувати звіти.</p></body></html> +- +- +- Exclude from database reports +- Виключити зі звітів по Ñховищам +- +- +- +- EditEntryWidgetAutoType +- +- Enable Auto-Type for this entry +- Увімкнути Ð°Ð²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ запиÑу +- +- +- Window Associations +- Прив'Ñзки вікон +- +- +- + +- + +- +- +- - +- - +- +- +- Window title: +- Заголовок вікна: +- +- +- Use a specific sequence for this association: +- ВикориÑтовувати певну поÑлідовніÑÑ‚ÑŒ Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— прив'Ñзки: +- +- +- Custom Auto-Type sequence +- ВлаÑна поÑлідовніÑÑ‚ÑŒ Ð°Ð²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ +- +- +- Open Auto-Type help webpage +- Відкрити Ñторінку довідки щодо Ð°Ð²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ +- +- +- Existing window associations +- ÐаÑвні прив'Ñзки вікон +- +- +- Add new window association +- Додати нову прив'Ñзку вікна +- +- +- Remove selected window association +- Видалити вибрану прив'Ñзку вікна +- +- +- You can use an asterisk (*) to match everything +- Ви можете викориÑтовувати зірочку (*) Ð´Ð»Ñ Ð´Ð¾Ð²Ñ–Ð»ÑŒÐ½Ð¸Ñ… збігів +- +- +- Set the window association title +- Ð’Ñтановити заголовок Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð²'Ñзки вікна +- +- +- You can use an asterisk to match everything +- Ви можете викориÑтовувати зірочку Ð´Ð»Ñ Ð´Ð¾Ð²Ñ–Ð»ÑŒÐ½Ð¸Ñ… збігів +- +- +- Custom Auto-Type sequence for this window +- ВлаÑна поÑлідовніÑÑ‚ÑŒ Ð°Ð²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ вікна +- +- +- Inherit default Auto-Type sequence from the group +- УÑпадкувати типову поÑлідовніÑÑ‚ÑŒ Ð°Ð²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð²Ñ–Ð´ групи +- +- +- Use custom Auto-Type sequence: +- ВикориÑтовувати Ñвою поÑлідовніÑÑ‚ÑŒ автозаповненнÑ: +- +- +- +- EditEntryWidgetBrowser +- +- These settings affect to the entry's behaviour with the browser extension. +- Ці параметри впливають на поведінку запиÑу в розширенні переглÑдача. +- +- +- General +- Загальні +- +- +- Skip Auto-Submit for this entry +- ПропуÑкати автоматичне надÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ запиÑу +- +- +- Hide this entry from the browser extension +- Сховати цей Ð·Ð°Ð¿Ð¸Ñ Ð²Ñ–Ð´ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÐ³Ð»Ñдача +- +- +- Additional URL's +- Додаткові URL +- +- +- Add +- Додати +- +- +- Remove +- Видалити +- +- +- Edit +- Змінити +- +- +- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. +- ÐадÑилати це Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾ браузера лише в діалогах автентифікації HTTP. Якщо увімкнено, цей Ð·Ð°Ð¿Ð¸Ñ Ð½Ðµ буде показано Ð´Ð»Ñ Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ð¸Ñ… форм входу. +- +- +- Use this entry only with HTTP Basic Auth +- ВикориÑтовувати цей Ð·Ð°Ð¿Ð¸Ñ Ð»Ð¸ÑˆÐµ з HTTP Basic Auth +- +- +- +- EditEntryWidgetHistory +- +- Show +- Показати +- +- +- Restore +- Відновити +- +- +- Delete +- Видалити +- +- +- Delete all +- Видалити вÑÑ– +- +- +- Entry history selection +- Вибір журналу запиÑу +- +- +- Show entry at selected history state +- Показати вибраний хронологічний Ñтан запиÑу +- +- +- Restore entry to selected history state +- Відновити Ð·Ð°Ð¿Ð¸Ñ Ð· вибраного хронологічного Ñтану +- +- +- Delete selected history state +- Видалити вибраний хронологічний Ñтан +- +- +- Delete all history +- Видалити веÑÑŒ журнал +- +- +- +- EditEntryWidgetMain +- +- URL: +- URL: +- +- +- Password: +- Пароль: +- +- +- Title: +- Заголовок: +- +- +- Presets +- Заготовки +- +- +- Toggle the checkbox to reveal the notes section. +- ÐатиÑніть перемикач, щоб показати розділ нотаток. +- +- +- Username: +- Ð†Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача: +- +- +- Url field +- Поле URL +- +- +- Download favicon for URL +- Завантажити фавікон Ð´Ð»Ñ URL +- +- +- Password field +- Поле Ð¿Ð°Ñ€Ð¾Ð»Ñ +- +- +- Toggle notes visible +- Перемкнути видиміÑÑ‚ÑŒ нотаток +- +- +- Expiration field +- Поле Ð·Ð½ÐµÑ‡Ð¸Ð½ÐµÐ½Ð½Ñ +- +- +- Expiration Presets +- Типове Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð½ÐµÑ‡Ð¸Ð½ÐµÐ½Ð½Ñ +- +- +- Expiration presets +- Типове Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð½ÐµÑ‡Ð¸Ð½ÐµÐ½Ð½Ñ +- +- +- Notes field +- Поле нотаток +- +- +- Title field +- Поле заголовка +- +- +- Username field +- Поле імені кориÑтувача +- +- +- Toggle expiration +- Перемкнути Ð·Ð½ÐµÑ‡Ð¸Ð½ÐµÐ½Ð½Ñ +- +- +- Notes: +- Примітки: +- +- +- https://example.com +- +- +- +- Expires: +- +- +- +- Edit Entry +- +- +- +- +- EditEntryWidgetSSHAgent +- +- Form +- Форма +- +- +- Remove key from agent after +- ВидалÑти ключ із в'Ñзки поÑередника піÑÐ»Ñ +- +- +- seconds +- Ñекунд +- +- +- Fingerprint +- Відбиток +- +- +- Remove key from agent when database is closed/locked +- ВидалÑти ключ із в'Ñзки поÑередника під Ñ‡Ð°Ñ Ð±Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ñховища +- +- +- Public key +- Відкритий ключ +- +- +- Add key to agent when database is opened/unlocked +- Ðадавати ключ поÑередникові під Ñ‡Ð°Ñ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ð°Ð±Ð¾ Ñ€Ð¾Ð·Ð±Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ñховища +- +- +- Comment +- Коментар +- +- +- Decrypt +- Розшифрувати +- +- +- n/a +- немає +- +- +- Copy to clipboard +- Скопіювати в кишеню +- +- +- Private key +- Таємний ключ +- +- +- External file +- Зовнішній файл +- +- +- Browse... +- Button for opening file dialog +- ПереглÑнути... +- +- +- Attachment +- Ð’ÐºÐ»Ð°Ð´ÐµÐ½Ð½Ñ +- +- +- Add to agent +- Додати до в'Ñзки поÑередника +- +- +- Remove from agent +- Видалити з в'Ñзки поÑередника +- +- +- Require user confirmation when this key is used +- Запитувати Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑÑ‚Ð°Ð½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ ключа +- +- +- Remove key from agent after specified seconds +- Видалити ключ з агенту піÑÐ»Ñ Ð²ÐºÐ°Ð·Ð°Ð½Ð¾Ñ— кількоÑÑ‚Ñ– Ñекунд +- +- +- Browser for key file +- ПереглÑдач файлових ключів +- +- +- External key file +- Зовнішній файловий ключ +- +- +- Select attachment file +- Вибрати файл Ð²ÐºÐ»Ð°Ð´ÐµÐ½Ð½Ñ +- +- +- +- EditGroupWidget +- +- Group +- Група +- +- +- Icon +- Значок +- +- +- Properties +- ВлаÑтивоÑÑ‚Ñ– +- +- +- Add group +- Додати групу +- +- +- Edit group +- Редагувати групу +- +- +- Enable +- Увімкнути +- +- +- Disable +- Вимкнути +- +- +- Inherit from parent group (%1) +- УÑпадкувати від батьківÑької групи (%1) +- +- +- Entry has unsaved changes +- Ð—Ð°Ð¿Ð¸Ñ Ð¼Ð°Ñ” незбережені зміни +- +- +- +- EditGroupWidgetKeeShare +- +- Type: +- Тип: +- +- +- Path: +- ШлÑÑ…: +- +- +- Password: +- Пароль: +- +- +- Inactive +- Ðеактивна +- +- +- KeeShare unsigned container +- ÐепідпиÑана оболонка KeeShare +- +- +- KeeShare signed container +- ПідпиÑана оболонка KeeShare +- +- +- Select import source +- Вибрати джерело імпорту +- +- +- Select export target +- Вибрати ціль екÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ +- +- +- Select import/export file +- Вибрати файл імпорту/екÑпорту +- +- +- Clear +- ОчиÑтити +- +- +- Import +- Ð†Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ +- +- +- Export +- ЕкÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ +- +- +- Synchronize +- Узгодити +- +- +- Your KeePassXC version does not support sharing this container type. +-Supported extensions are: %1. +- Ваша верÑÑ–Ñ KeePassXC не підтримує Ñпільне викориÑÑ‚Ð°Ð½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ типу оболонки. +-Підтримані розширеннÑ: %1. +- +- +- %1 is already being exported by this database. +- Сховище вже екÑпортує %1. +- +- +- %1 is already being imported by this database. +- Сховище вже імпортує %1. +- +- +- %1 is being imported and exported by different groups in this database. +- У цьому Ñховищі %1 екÑпортують Ñ– імпортують різні групи. +- +- +- KeeShare is currently disabled. You can enable import/export in the application settings. +- KeeShare is a proper noun +- KeeShare наразі вимкнено. Ви можете ввімкнути Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚Ð° екÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ параметрах заÑтоÑунку. +- +- +- Database export is currently disabled by application settings. +- ЕкÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñховища наразі вимкнено в параметрах заÑтоÑунку. +- +- +- Database import is currently disabled by application settings. +- Ð†Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñховища наразі вимкнено в параметрах заÑтоÑунку. +- +- +- Sharing mode field +- Поле режиму Ñпільного викориÑÑ‚Ð°Ð½Ð½Ñ +- +- +- Path to share file field +- Поле шлÑху до Ñпільного файлу +- +- +- Password field +- Поле Ð¿Ð°Ñ€Ð¾Ð»Ñ +- +- +- Clear fields +- ОчиÑтити Ð¿Ð¾Ð»Ñ +- +- +- Browse for share file +- +- +- +- Browse... +- ПереглÑнути... +- +- +- +- EditGroupWidgetMain +- +- Name field +- Поле назви +- +- +- Notes field +- Поле нотаток +- +- +- Toggle expiration +- Перемкнути Ð·Ð½ÐµÑ‡Ð¸Ð½ÐµÐ½Ð½Ñ +- +- +- Auto-Type toggle for this and sub groups +- ÐŸÐµÑ€ÐµÐ¼Ð¸ÐºÐ°Ð½Ð½Ñ Ð°Ð²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— групи Ñ– вÑÑ–Ñ… дочерніх груп +- +- +- Expiration field +- Поле Ð·Ð½ÐµÑ‡Ð¸Ð½ÐµÐ½Ð½Ñ +- +- +- Search toggle for this and sub groups +- ÐŸÐµÑ€ÐµÐ¼Ð¸ÐºÐ°Ð½Ð½Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— групи Ñ– вÑÑ–Ñ… дочерніх груп +- +- +- Default auto-type sequence field +- Поле типової поÑлідовноÑÑ‚Ñ– Ð°Ð²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ +- +- +- Expires: +- +- +- +- Use default Auto-Type sequence of parent group +- +- +- +- Auto-Type: +- +- +- +- Search: +- +- +- +- Notes: +- Примітки: +- +- +- Name: +- +- +- +- Set default Auto-Type sequence +- +- +- +- Edit Group +- +- +- +- +- EditWidgetIcons +- +- Add custom icon +- Додати Ñвій значок +- +- +- Delete custom icon +- Видалити Ñвій значок +- +- +- Download favicon +- Завантажити фавікон +- +- +- Unable to fetch favicon. +- Ðеможливо діÑтати фавікон. +- +- +- Images +- Ð—Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ +- +- +- All files +- Ð’ÑÑ– файли +- +- +- Confirm Delete +- Схвалити Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ +- +- +- Select Image(s) +- Вибрати Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ +- +- +- Successfully loaded %1 of %n icon(s) +- УÑпішно завантажено %1 з %n значкаУÑпішно завантажено %1 з %n значківУÑпішно завантажено %1 з %n значківУÑпішно завантажено %1 з %n значків +- +- +- No icons were loaded +- Жодного значка не завантажено +- +- +- %n icon(s) already exist in the database +- %n значок вже Ñ–Ñнує у Ñховищі%n значки вже Ñ–Ñнують у Ñховищі%n значків вже Ñ–Ñнують у Ñховищі%n значків вже Ñ–Ñнують у Ñховищі +- +- +- The following icon(s) failed: +- Такий значок зазнав невдачі:Такі значки зазнали невдачі:Такі значки зазнали невдачі:Такі значки зазнали невдачі: +- +- +- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? +- Цей значок викориÑтовує %n Ð·Ð°Ð¿Ð¸Ñ Ñ– його буде замінено на типовий значок. Ви дійÑно хочете видалити його?Цей значок викориÑтовують %n запиÑи Ñ– його буде замінено на типовий значок. Ви дійÑно хочете видалити його?Цей значок викориÑтовують %n запиÑів Ñ– його буде замінено на типовий значок. Ви дійÑно хочете видалити його?Цей значок викориÑтовують %n запиÑів Ñ– його буде замінено на типовий значок. Ви дійÑно хочете видалити його? +- +- +- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security +- Ви можете ввімкнути Ñлужбу значків DuckDuckGo в меню ІнÑтрументи -> ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ -> Безпека +- +- +- Download favicon for URL +- Завантажити фавікон Ð´Ð»Ñ URL +- +- +- Apply selected icon to subgroups and entries +- ЗаÑтоÑувати вибраній значок Ð´Ð»Ñ Ð´Ð¾Ñ‡ÐµÑ€Ð½Ñ–Ñ… груп Ñ– запиÑів +- +- +- Also apply to child groups +- Також заÑтоÑувати до дочерніх груп +- +- +- Also apply to child entries +- Також заÑтоÑувати до дочерніх запиÑів +- +- +- Also apply to all children +- Також заÑтоÑувати до вÑÑ–Ñ… дочерніх елементів +- +- +- Existing icon selected. +- Вибрано наÑвний значок. +- +- +- Use default icon +- ВикориÑтовувати типовий значок +- +- +- Use custom icon +- ВикориÑтовувати Ñвій значок +- +- +- Apply icon to... +- +- +- +- Apply to this group only +- +- +- +- +- EditWidgetProperties +- +- Created: +- Створено: +- +- +- Modified: +- Змінено: +- +- +- Accessed: +- ДоÑтуп: +- +- +- Uuid: +- Uuid: +- +- +- Plugin Data +- Дані Ð¼Ð¾Ð´ÑƒÐ»Ñ +- +- +- Remove +- Видалити +- +- +- Delete plugin data? +- Видалити дані модулÑ? +- +- +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- Ви дійÑно хочете видалити вÑÑ– дані позначеного модулÑ? +-Це може призвеÑти до порушень у роботі інших модулів. +- +- +- Key +- Ключ +- +- +- Value +- Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ +- +- +- Datetime created +- Дата й Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ +- +- +- Datetime modified +- Дата й Ñ‡Ð°Ñ Ð·Ð¼Ñ–Ð½Ð¸ +- +- +- Datetime accessed +- Дата й Ñ‡Ð°Ñ Ð´Ð¾Ñтупу +- +- +- Unique ID +- Унікальний ідентифікатор +- +- +- Plugin data +- Дані Ð¼Ð¾Ð´ÑƒÐ»Ñ +- +- +- Remove selected plugin data +- Видалити дані вибраного Ð¼Ð¾Ð´ÑƒÐ»Ñ +- +- +- +- Entry +- +- %1 - Clone +- %1 - Клон +- +- +- +- EntryAttachmentsModel +- +- Name +- Ðазва +- +- +- Size +- Розмір +- +- +- +- EntryAttachmentsWidget +- +- Form +- Форма +- +- +- Add +- Додати +- +- +- Remove +- Видалити +- +- +- Open +- Відкрити +- +- +- Save +- Зберегти +- +- +- Select files +- Вибрати файли +- +- +- Are you sure you want to remove %n attachment(s)? +- Ви дійÑно бажаєте видалити %n вкладеннÑ?Ви дійÑно бажаєте видалити %n вкладеннÑ?Ви дійÑно бажаєте видалити %n вкладень?Ви дійÑно бажаєте видалити %n вкладень? +- +- +- Save attachments +- Зберегти Ð²ÐºÐ»Ð°Ð´ÐµÐ½Ð½Ñ +- +- +- Unable to create directory: +-%1 +- Ðеможливо Ñтворити директорію: +-%1 +- +- +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- Ви дійÑно бажаєте перезапиÑати наÑвний файл «%1» цим вкладеннÑм? +- +- +- Confirm overwrite +- Схвалити Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿Ð¸Ñ +- +- +- Unable to save attachments: +-%1 +- Ðеможливо зберегти вкладеннÑ: +-%1 +- +- +- Unable to open attachment: +-%1 +- Ðеможливо відкрити вкладеннÑ: +-%1 +- +- +- Unable to open attachments: +-%1 +- Ðеможливо відкрити вкладеннÑ: +-%1 +- +- +- Confirm remove +- Схвалити Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ +- +- +- Unable to open file(s): +-%1 +- Ðеможливо відкрити файл: +-%1Ðеможливо відкрити файли: +-%1Ðеможливо відкрити файли: +-%1Ðеможливо відкрити файли: +-%1 +- +- +- Attachments +- Ð’ÐºÐ»Ð°Ð´ÐµÐ½Ð½Ñ +- +- +- Add new attachment +- Долучити нове Ð²ÐºÐ»Ð°Ð´ÐµÐ½Ð½Ñ +- +- +- Remove selected attachment +- Видалити вибране Ð²ÐºÐ»Ð°Ð´ÐµÐ½Ð½Ñ +- +- +- Open selected attachment +- Відкрити вибране Ð²ÐºÐ»Ð°Ð´ÐµÐ½Ð½Ñ +- +- +- Save selected attachment to disk +- Зберегти вибране Ð²ÐºÐ»Ð°Ð´ÐµÐ½Ð½Ñ Ð½Ð° диÑк +- +- +- %1 is a big file (%2 MB). +-Your database may get very large and reduce performance. +- +-Are you sure to add this file? +- %1 Ñ” великим файлом (%2 MБ). +-Ваше Ñховище може Ñтати завеликим Ñ– ÑˆÐ²Ð¸Ð´ÐºÐ¾Ð´Ñ–Ñ Ð·Ð½Ð¸Ð·Ð¸Ñ‚ÑŒÑÑ. +- +-Ви дійÑно бажаєте додати цей файл? +- +- +- Confirm Attachment +- Схвалити Ð´Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ +- +- +- +- EntryAttributesModel +- +- Name +- Ðазва +- +- +- +- EntryHistoryModel +- +- Last modified +- ОÑÑ‚Ð°Ð½Ð½Ñ Ð·Ð¼Ñ–Ð½Ð° +- +- +- Title +- Заголовок +- +- +- Username +- Ð†Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача +- +- +- URL +- URL +- +- +- +- EntryModel +- +- Ref: +- Reference abbreviation +- ПоÑ.: +- +- +- Group +- Група +- +- +- Title +- Заголовок +- +- +- Username +- Ð†Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача +- +- +- URL +- URL +- +- +- Never +- Ðіколи +- +- +- Password +- Пароль +- +- +- Notes +- Примітки +- +- +- Expires +- ЗнечинюєтьÑÑ +- +- +- Created +- Створено +- +- +- Modified +- Змінено +- +- +- Accessed +- ДоÑтуп +- +- +- Attachments +- Ð’ÐºÐ»Ð°Ð´ÐµÐ½Ð½Ñ +- +- +- Size +- Розмір +- +- +- Group name +- Ðазва групи +- +- +- Entry title +- Ðазва запиÑу +- +- +- Entry notes +- Ðотатки до запиÑу +- +- +- Entry expires at +- Термін дії Ñпливає +- +- +- Creation date +- Дата ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ +- +- +- Last modification date +- Дата оÑтанньої зміни +- +- +- Last access date +- Дата оÑтаннього доÑтупу +- +- +- Attached files +- Вкладені файли +- +- +- Entry size +- Розмір запиÑу +- +- +- Has attachments +- МіÑтить Ð²ÐºÐ»Ð°Ð´ÐµÐ½Ð½Ñ +- +- +- Has TOTP one-time password +- Має одноразовий пароль ТОП +- +- +- +- EntryPreviewWidget +- +- Close +- Закрити +- +- +- General +- Загальне +- +- +- Username +- Ð†Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача +- +- +- Password +- Пароль +- +- +- Expiration +- ЗнечинюєтьÑÑ +- +- +- URL +- URL +- +- +- Attributes +- Ознаки +- +- +- Attachments +- Ð’ÐºÐ»Ð°Ð´ÐµÐ½Ð½Ñ +- +- +- Notes +- Примітки +- +- +- Autotype +- ÐÐ²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ +- +- +- Window +- Вікно +- +- +- Sequence +- ПоÑлідовніÑÑ‚ÑŒ +- +- +- Searching +- Пошук +- +- +- Search +- Пошук +- +- +- Clear +- ОчиÑтити +- +- +- Never +- Ðіколи +- +- +- [PROTECTED] +- [ЗÐХИЩЕÐО] +- +- +- Enabled +- Увімкнено +- +- +- Disabled +- Вимкнено +- +- +- Share +- Спільне викориÑÑ‚Ð°Ð½Ð½Ñ +- +- +- Display current TOTP value +- Показати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ ТОП +- +- +- Advanced +- Розширене +- +- +- Default Sequence +- +- +- +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- attributes line +- +- +- +- +- EntryURLModel +- +- Invalid URL +- Ðепридатний URL +- +- +- +- EntryView +- +- Fit to window +- ПрипаÑовувати до вікна +- +- +- Fit to contents +- ПрипаÑовувати до вміÑту +- +- +- Reset to defaults +- Повернути до типового Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ +- +- +- Has attachments +- Entry attachment icon toggle +- МіÑтить Ð²ÐºÐ»Ð°Ð´ÐµÐ½Ð½Ñ +- +- +- Has TOTP +- Entry TOTP icon toggle +- +- +- +- +- FdoSecrets::Item +- +- Entry "%1" from database "%2" was used by %3 +- Програма %3 викориÑтала Ð·Ð°Ð¿Ð¸Ñ "%1" зі Ñховища "%2" +- +- +- +- FdoSecrets::Service +- +- Failed to register DBus service at %1.<br/> +- +- +- +- %n Entry(s) was used by %1 +- %1 is the name of an application +- +- +- +- +- FdoSecrets::SettingsDatabaseModel +- +- File Name +- Ім'Ñ Ñ„Ð°Ð¹Ð»Ñƒ +- +- +- Group +- Група +- +- +- Manage +- Керувати +- +- +- Unlock to show +- Розблокуйте Ð´Ð»Ñ Ð¿Ð¾ÐºÐ°Ð·Ñƒ +- +- +- None +- ВідÑутні +- +- +- +- FdoSecrets::SettingsSessionModel +- +- Application +- ЗаÑтоÑунок +- +- +- Manage +- Керувати +- +- +- +- FdoSecretsPlugin +- +- <b>Fdo Secret Service:</b> %1 +- +- +- +- Unknown +- Unknown PID +- Ðевідомий +- +- +- Unknown +- Unknown executable path +- Ðевідомий +- +- +- <i>PID: %1, Executable: %2</i> +- <i>PID: 1234, Executable: /path/to/exe</i> +- +- +- +- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. +- +- +- +- +- Group +- +- [empty] +- group has no children +- [порожнÑ] +- +- +- +- HibpDownloader +- +- Online password validation failed +- +- +- +- +- IconDownloaderDialog +- +- Download Favicons +- Завантажити фавікони +- +- +- Cancel +- СкаÑувати +- +- +- Having trouble downloading icons? +-You can enable the DuckDuckGo website icon service in the security section of the application settings. +- Маєте проблеми з завантаженнÑм значків? +-Ви можете ввімкнути Ñлужбу значків DuckDuckGo в налаштуванні заÑтоÑунку в розділі безпеки. +- +- +- Close +- Закрити +- +- +- URL +- URL +- +- +- Status +- Стан +- +- +- Please wait, processing entry list... +- Зачекайте, будь лаÑка, триває Ð¾Ð±Ñ€Ð¾Ð±Ð»ÐµÐ½Ð½Ñ ÑпиÑку запиÑів... +- +- +- Downloading... +- ЗавантаженнÑ... +- +- +- Ok +- Гаразд +- +- +- Already Exists +- Вже Ñ–Ñнує +- +- +- Download Failed +- Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð°Ð·Ð½Ð°Ð»Ð¾ невдачі +- +- +- Downloading favicons (%1/%2)... +- Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð²Ñ–ÐºÐ¾Ð½Ñ–Ð² (%1/%2)... +- +- +- +- KMessageWidget +- +- &Close +- &Закрити +- +- +- Close message +- Закрити Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ +- +- +- +- Kdbx3Reader +- +- missing database headers +- відÑутні заголовки Ñховища +- +- +- Header doesn't match hash +- Заголовок не відповідає контрольній Ñумі +- +- +- Invalid header id size +- Ðепридатний розмір ідентифікатора заголовка +- +- +- Invalid header field length +- Ðепридатна довжина Ð¿Ð¾Ð»Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° +- +- +- Invalid header data length +- Ðепридатна довжина даних заголовка +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Ðадано непридатні реєÑтраційні дані. Спробуйте, будь лаÑка, ще раз. +-Якщо це повторюватиметьÑÑ, файл Вашого Ñховища може бути пошкодженим. +- +- +- Unable to calculate database key +- +- +- +- Unable to issue challenge-response: %1 +- Ðеможливо видати виклик-відповідь: %1 +- +- +- +- Kdbx3Writer +- +- Unable to issue challenge-response: %1 +- Ðеможливо видати виклик-відповідь: %1 +- +- +- Unable to calculate database key +- +- +- +- +- Kdbx4Reader +- +- missing database headers +- відÑутні заголовки Ñховища +- +- +- Invalid header checksum size +- Ðепридатний розмір контрольної Ñуми заголовка +- +- +- Header SHA256 mismatch +- ÐевідповідніÑÑ‚ÑŒ заголовку SHA256 +- +- +- Unknown cipher +- Ðевідомий шифр +- +- +- Invalid header id size +- Ðепридатний розмір ідентифікатора заголовка +- +- +- Invalid header field length +- Ðепридатна довжина Ð¿Ð¾Ð»Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° +- +- +- Invalid header data length +- Ðепридатна довжина даних заголовка +- +- +- Failed to open buffer for KDF parameters in header +- Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ буфер Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ–Ð² ФОК у заголовку +- +- +- Unsupported key derivation function (KDF) or invalid parameters +- Ðепідтримувана Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ Ð¾Ð±Ñ‡Ð¸ÑÐ»ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð° (ФОК) або непридатні параметри +- +- +- Legacy header fields found in KDBX4 file. +- Знайдені заÑтарілі Ð¿Ð¾Ð»Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° у файлі KDBX4. +- +- +- Invalid inner header id size +- Ðепридатний розмір ідентифікатора внутрішнього заголовка +- +- +- Invalid inner header field length +- Ðепридатна довжина Ð¿Ð¾Ð»Ñ Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½ÑŒÐ¾Ð³Ð¾ заголовка +- +- +- Invalid inner header binary size +- Ðепридатний розмір двійкового внутрішнього заголовка +- +- +- Unsupported KeePass variant map version. +- Translation: variant map = data structure for storing meta data +- Ðепідтримувана верÑÑ–Ñ Ñтруктури метаданих KeePass. +- +- +- Invalid variant map entry name length +- Translation: variant map = data structure for storing meta data +- Ðепридатна довжина назви запиÑу в Ñтруктурі метаданих +- +- +- Invalid variant map entry name data +- Translation: variant map = data structure for storing meta data +- Ðепридатна назва запиÑу в Ñтруктурі метаданих +- +- +- Invalid variant map entry value length +- Translation: variant map = data structure for storing meta data +- Ðепридатна довжина Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñу в Ñтруктурі метаданих +- +- +- Invalid variant map entry value data +- Translation comment: variant map = data structure for storing meta data +- Ðепридатне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñу в Ñтруктурі метаданих +- +- +- Invalid variant map Bool entry value length +- Translation: variant map = data structure for storing meta data +- Ðепридатна довжина логічного запиÑу в Ñтруктурі метаданих +- +- +- Invalid variant map Int32 entry value length +- Translation: variant map = data structure for storing meta data +- Ðепридатна довжина Int32 запиÑу в Ñтруктурі метаданих +- +- +- Invalid variant map UInt32 entry value length +- Translation: variant map = data structure for storing meta data +- Ðепридатна довжина UInt32 запиÑу в Ñтруктурі метаданих +- +- +- Invalid variant map Int64 entry value length +- Translation: variant map = data structure for storing meta data +- Ðепридатна довжина Int64 запиÑу в Ñтруктурі метаданих +- +- +- Invalid variant map UInt64 entry value length +- Translation: variant map = data structure for storing meta data +- Ðепридатна довжина UInt64 запиÑу в Ñтруктурі метаданих +- +- +- Invalid variant map entry type +- Translation: variant map = data structure for storing meta data +- Ðепридатний тип запиÑу в Ñтруктурі метаданих +- +- +- Invalid variant map field type size +- Translation: variant map = data structure for storing meta data +- Ðепридатний розмір типу Ð¿Ð¾Ð»Ñ Ð² Ñтруктурі метаданих +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Ðадано непридатні реєÑтраційні дані. Спробуйте, будь лаÑка, ще раз. +-Якщо це повторюватиметьÑÑ, файл Вашого Ñховища може бути пошкодженим. +- +- +- (HMAC mismatch) +- (неузгідніÑÑ‚ÑŒ HMAC) +- +- +- Unable to calculate database key: %1 +- Ðеможливо обчиÑлити ключ Ñховища: %1 +- +- +- +- Kdbx4Writer +- +- Invalid symmetric cipher algorithm. +- Ðепридатний алгоритм Ñиметричного шифру. +- +- +- Invalid symmetric cipher IV size. +- IV = Initialization Vector for symmetric cipher +- Ðепридатний розмір Ñиметричного шифру IV. +- +- +- Failed to serialize KDF parameters variant map +- Translation comment: variant map = data structure for storing meta data +- ÐŸÐµÑ€ÐµÐ²ÐµÐ´ÐµÐ½Ð½Ñ Ñƒ поÑлідовний формат Ñтруктури параметрів ФОК зазнало невдачі +- +- +- Unable to calculate database key: %1 +- Ðеможливо обчиÑлити ключ Ñховища: %1 +- +- +- +- KdbxReader +- +- Unsupported cipher +- Ðепідтримуваний шифр +- +- +- Invalid compression flags length +- Ðепридатна довжина прапорців ÑтиÑÐ½ÐµÐ½Ð½Ñ +- +- +- Unsupported compression algorithm +- Ðепідтримуваний алгоритм ÑтиÑÐ½ÐµÐ½Ð½Ñ +- +- +- Invalid master seed size +- Ðепридатний розмір головного початкового чиÑла +- +- +- Invalid transform seed size +- Ðепридатний розмір початкового чиÑла Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ +- +- +- Invalid transform rounds size +- Ðепридатний розмір циклу Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ +- +- +- Invalid start bytes size +- Ðепридатний розмір початкових байтів +- +- +- Invalid random stream id size +- Ðепридатний розмір ідентифікатора випадкового потоку +- +- +- Invalid inner random stream cipher +- Ðепридатний шифр внутрішнього випадкового потоку +- +- +- Not a KeePass database. +- Це не Ñховище KeePass. +- +- +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- Вибраний файл Ñ” Ñтарим Ñховищем Ð´Ð»Ñ KeePass 1 (.kdb). +- +-Щоб імпортувати його, виберіть пункт меню «Сховище > Імпортувати > Сховище KeePass 1…». +-ÐŸÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ лише в одному напрÑмку. Ви не зможете відкрити імпортоване Ñховище Ñтарою верÑією KeePassX 0.4. +- +- +- Unsupported KeePass 2 database version. +- Ðепідтримувана верÑÑ–Ñ Ñховища KeePass 2. +- +- +- Invalid cipher uuid length: %1 (length=%2) +- Ðепридатна довжина uuid шифру: %1 (довжина=%2) +- +- +- Unable to parse UUID: %1 +- Ðеможливо розібрати UUID: %1 +- +- +- Failed to read database file. +- Ð—Ñ‡Ð¸Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ Ñховища зазнало невдачі. +- +- +- +- KdbxXmlReader +- +- XML parsing failure: %1 +- Помилка ÑинтакÑичного аналізу XML: %1 +- +- +- No root group +- Коренева група відÑÑƒÑ‚Ð½Ñ +- +- +- Missing icon uuid or data +- Бракує uuid або даних значка +- +- +- Missing custom data key or value +- Бракує ключа або Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð²Ð»Ð°Ñних даних +- +- +- Multiple group elements +- Декілька елементів групи +- +- +- Null group uuid +- Порожній uuid групи +- +- +- Invalid group icon number +- Ðепридатна кількіÑÑ‚ÑŒ значків групи +- +- +- Invalid EnableAutoType value +- Ðепридатне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñƒ Ð²Ð²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð½Ñ Ð°Ð²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ +- +- +- Invalid EnableSearching value +- Ðепридатне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñƒ Ð²Ð²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð½Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ +- +- +- No group uuid found +- Uuid групи не знайдено +- +- +- Null DeleteObject uuid +- Порожній DeleteObject uuid +- +- +- Missing DeletedObject uuid or time +- Бракує Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ‡Ð°Ñу або uuid Ð´Ð»Ñ DeleteObject +- +- +- Null entry uuid +- Порожній uuid запиÑу +- +- +- Invalid entry icon number +- Ðепридатна кількіÑÑ‚ÑŒ значків запиÑу +- +- +- History element in history entry +- Журнальний елемент у запиÑу журналу +- +- +- No entry uuid found +- Uuid запиÑу не знайдено +- +- +- History element with different uuid +- Елемент журналу з відмінним uuid +- +- +- Duplicate custom attribute found +- Знайдено дублікат Вашої влаÑної ознаки +- +- +- Entry string key or value missing +- ЗапиÑу бракує текÑтового ключа або Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ +- +- +- Entry binary key or value missing +- ЗапиÑу бракує двійкового ключа або Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ +- +- +- Auto-type association window or sequence missing +- ВідÑутнє вікно або поÑлідовніÑÑ‚ÑŒ прив'Ñзки Ð°Ð²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ +- +- +- Invalid bool value +- Ðепридатне логічне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ +- +- +- Invalid date time value +- Ðепридатне чаÑове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ +- +- +- Invalid color value +- Ðепридатне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ¾Ð»ÑŒÐ¾Ñ€Ñƒ +- +- +- Invalid color rgb part +- Ðепридатна чаÑтина кольору rgb +- +- +- Invalid number value +- Ðепридатне чиÑлове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ +- +- +- Invalid uuid value +- Ðепридатне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ uuid +- +- +- Unable to decompress binary +- Translator meant is a binary data inside an entry +- Ðеможливо розпакувати двійковий код +- +- +- XML error: +-%1 +-Line %2, column %3 +- Помилка XML: +-%1 +-РÑдок %2, Ð·Ð½Ð°ÐºÐ¾Ð¿Ð¾Ð·Ð¸Ñ†Ñ–Ñ %3 +- +- +- +- KeeAgentSettings +- +- Invalid KeeAgent settings file structure. +- +- +- +- Private key is an attachment but no attachments provided. +- +- +- +- Private key is empty +- +- +- +- File too large to be a private key +- Файл занадто великий Ð´Ð»Ñ Ñ‚Ð°Ñ”Ð¼Ð½Ð¾Ð³Ð¾ ключа +- +- +- Failed to open private key +- Ð’Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ñ‚Ð°Ñ”Ð¼Ð½Ð¾Ð³Ð¾ ключа зазнало невдачі +- +- +- +- KeePass1OpenWidget +- +- Unable to open the database. +- Ðеможливо відкрити Ñховище. +- +- +- Import KeePass1 Database +- Імпортувати Ñховище KeePass1 +- +- +- +- KeePass1Reader +- +- Unable to read keyfile. +- Ðеможливо прочитати файловий ключ. +- +- +- Not a KeePass database. +- Це не Ñховище KeePass. +- +- +- Unsupported encryption algorithm. +- Ðепідтримуваний алгоритм шифруваннÑ. +- +- +- Unsupported KeePass database version. +- Ðепідтримувана верÑÑ–Ñ Ñховища KeePass. +- +- +- Unable to read encryption IV +- IV = Initialization Vector for symmetric cipher +- Ðеможливо прочитати ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ IV +- +- +- Invalid number of groups +- Ðепридатна кількіÑÑ‚ÑŒ груп +- +- +- Invalid number of entries +- Ðепридатна кількіÑÑ‚ÑŒ запиÑів +- +- +- Invalid content hash size +- Ðепридатний розмір контрольної Ñуми вміÑту +- +- +- Invalid transform seed size +- Ðепридатний розмір початкового чиÑла Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ +- +- +- Invalid number of transform rounds +- Ðепридатний кількіÑÑ‚ÑŒ циклів Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ +- +- +- Unable to construct group tree +- Ðеможливо побудувати дерево групи +- +- +- Root +- Корінь +- +- +- Key transformation failed +- ÐŸÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð° зазнало невдачі +- +- +- Invalid group field type number +- Ðепридатна кількіÑÑ‚ÑŒ типів Ð¿Ð¾Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¸ +- +- +- Invalid group field size +- Ðепридатний розмір Ð¿Ð¾Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¸ +- +- +- Read group field data doesn't match size +- Дані у полі групи Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð½Ðµ відповідають розміру +- +- +- Incorrect group id field size +- Хибний розмір Ð¿Ð¾Ð»Ñ Ñ–Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ‚Ð¾Ñ€Ð° групи +- +- +- Incorrect group creation time field size +- Хибний розмір Ð¿Ð¾Ð»Ñ Ñ‡Ð°Ñу ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð³Ñ€ÑƒÐ¿Ð¸ +- +- +- Incorrect group modification time field size +- Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ‡Ð°Ñу у полі оÑтанньої зміни групи має хибний розмір +- +- +- Incorrect group access time field size +- Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ‡Ð°Ñу у полі оÑтаннього доÑтупу має хибний розмір +- +- +- Incorrect group expiry time field size +- Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ‡Ð°Ñу у полі Ð·Ð°ÐºÑ–Ð½Ñ‡ÐµÐ½Ð½Ñ Ñ‚ÐµÑ€Ð¼Ñ–Ð½Ñƒ чинноÑÑ‚Ñ– групи має хибний розмір +- +- +- Incorrect group icon field size +- Хибний розмір Ð¿Ð¾Ð»Ñ Ð·Ð½Ð°Ñ‡ÐºÐ° групи +- +- +- Incorrect group level field size +- Хибний розмір Ð¿Ð¾Ð»Ñ Ð´Ð»Ñ Ñ€Ñ–Ð²Ð½Ñ Ð³Ñ€ÑƒÐ¿Ð¸ +- +- +- Invalid group field type +- Ðепридатний тип Ð¿Ð¾Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¸ +- +- +- Missing group id or level +- Бракує ідентифікатора або Ñ€Ñ–Ð²Ð½Ñ Ð³Ñ€ÑƒÐ¿Ð¸ +- +- +- Missing entry field type number +- Бракує кількоÑÑ‚Ñ– типів Ð´Ð»Ñ Ð¿Ð¾Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу +- +- +- Invalid entry field size +- Ðепридатний розмір Ð¿Ð¾Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу +- +- +- Read entry field data doesn't match size +- Дані у полі запиÑу Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð½Ðµ відповідають розміру +- +- +- Invalid entry uuid field size +- Ðепридатний розмір Ð¿Ð¾Ð»Ñ uuid запиÑу +- +- +- Invalid entry group id field size +- Ðепридатний розмір Ð¿Ð¾Ð»Ñ Ð´Ð»Ñ Ñ–Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ‚Ð¾Ñ€Ð° групи запиÑу +- +- +- Invalid entry icon field size +- Ðепридатний розмір Ð¿Ð¾Ð»Ñ Ð´Ð»Ñ Ð·Ð½Ð°Ñ‡ÐºÐ° запиÑу +- +- +- Invalid entry creation time field size +- Ðепридатний розмір Ð¿Ð¾Ð»Ñ Ð´Ð»Ñ Ñ‡Ð°Ñу ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñу +- +- +- Invalid entry modification time field size +- Ðепридатний розмір Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñƒ полі оÑтанньої зміни запиÑу +- +- +- Invalid entry expiry time field size +- Поле Ð·Ð°ÐºÑ–Ð½Ñ‡ÐµÐ½Ð½Ñ Ñ‚ÐµÑ€Ð¼Ñ–Ð½Ñƒ чинноÑÑ‚Ñ– запиÑу має непридатний розмір +- +- +- Invalid entry field type +- Ðепридатний тип Ð¿Ð¾Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу +- +- +- unable to seek to content position +- неможливо знайти позицію вміÑту +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- Ðадано непридатні реєÑтраційні дані. Спробуйте, будь лаÑка, ще раз. +-Якщо це повторюватиметьÑÑ, файл Вашого Ñховища може бути пошкодженим. +- +- +- Unable to calculate database key +- +- +- +- +- KeeShare +- +- Invalid sharing reference +- Ðепридатне Ñпільне поÑÐ¸Ð»Ð°Ð½Ð½Ñ +- +- +- Inactive share %1 +- БездіÑльне Ñпільне викориÑÑ‚Ð°Ð½Ð½Ñ %1 +- +- +- Imported from %1 +- Імпортовано з %1 +- +- +- Exported to %1 +- ЕкÑпортовано в %1 +- +- +- Synchronized with %1 +- Узгоджено з %1 +- +- +- Import is disabled in settings +- Ð†Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð¾ у параметрах +- +- +- Export is disabled in settings +- ЕкÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð¾ у параметрах +- +- +- Inactive share +- БездіÑльне Ñпільне викориÑÑ‚Ð°Ð½Ð½Ñ +- +- +- Imported from +- Імпортовано з +- +- +- Exported to +- ЕкÑпортовано в +- +- +- Synchronized with +- Узгоджено з +- +- +- +- KeyComponentWidget +- +- Key Component +- Складник ключа +- +- +- Key Component Description +- ÐžÐ¿Ð¸Ñ Ñкладника ключа +- +- +- Cancel +- СкаÑувати +- +- +- Key Component set, click to change or remove +- Ðабір Ñкладників ключа, клацніть щоб змінити або видалити +- +- +- Add %1 +- Add a key component +- Додати %1 +- +- +- Change %1 +- Change a key component +- Змінити %1 +- +- +- Remove %1 +- Remove a key component +- Видалити %1 +- +- +- %1 set, click to change or remove +- Change or remove a key component +- %1 вÑтановлено, клацніть, щоб змінити або видалити +- +- +- +- KeyFileEditWidget +- +- Generate +- Створити +- +- +- Key File +- Файловий ключ +- +- +- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> +- <p>Ви можете додати файловий ключ, що міÑтить випадкові байти Ð´Ð»Ñ Ð¿Ð¾ÐºÑ€Ð°Ñ‰ÐµÐ½Ð½Ñ Ð±ÐµÐ·Ð¿ÐµÐºÐ¸.</p><p>Ви муÑите зберігати його таємно Ñ– не губити, інакше Ви не зможете відкрити Ñховище.</p> +- +- +- Error loading the key file '%1' +-Message: %2 +- Помилка Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ð³Ð¾ ключа '%1' +-ПовідомленнÑ: %2 +- +- +- Key files +- Файлові ключі +- +- +- All files +- Ð’ÑÑ– файли +- +- +- Create Key File... +- Створити файловий ключ... +- +- +- Error creating key file +- Помилка ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ð³Ð¾ ключа +- +- +- Unable to create key file: %1 +- Ðеможливо Ñтворити файловий ключ: %1 +- +- +- Select a key file +- Обрати файловий ключ +- +- +- Key file selection +- Вибір файлового ключа +- +- +- Browse for key file +- Вибір файлового ключа +- +- +- Browse... +- ПереглÑнути... +- +- +- Generate a new key file +- Створити новий файловий ключ +- +- +- Note: Do not use a file that may change as that will prevent you from unlocking your database! +- Увага: не викориÑтовуйте файл, що може змінитиÑÑ Ñƒ майбутньому, інакше Ви не зможете розблокувати Ваше Ñховище! +- +- +- Invalid Key File +- Ðепридатний файловий ключ +- +- +- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. +- Ви не можете викориÑтати поточне Ñховище Ñк файловий ключ. Будь лаÑка, виберіть інший файл або Ñтворіть новий файловий ключ. +- +- +- Suspicious Key File +- Підозрілий файловий ключ +- +- +- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. +-Are you sure you want to continue with this file? +- Вибраний фаловий ключ Ñхожий на файл Ñховища паролів. Файловий ключ муÑить бути незмінним файлом, Ñкий ніколи не змінюють, інакше Ви назавжди втратите доÑтуп до Вашого Ñховища. +-Ви певні, що хочете продовжити з цим файлом? +- +- +- Old key file format +- +- +- +- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. +- +- +- +- +- MainWindow +- +- &Database +- &Сховище +- +- +- &Help +- &Довідка +- +- +- &Groups +- &Групи +- +- +- &Tools +- &ІнÑтрументи +- +- +- &Quit +- &Вихід +- +- +- &About +- &Про KeePassXC +- +- +- Database settings +- ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñховища +- +- +- Copy username to clipboard +- Скопіювати Ñ–Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача до кишені +- +- +- Copy password to clipboard +- Скопіювати пароль до кишені +- +- +- &Settings +- Ðала&ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ +- +- +- &Title +- Заголовок +- +- +- Copy title to clipboard +- Скопіювати заголовок до кишені +- +- +- &URL +- &URL +- +- +- Copy URL to clipboard +- Скопіювати URL до кишені +- +- +- &Notes +- Ðотатки +- +- +- Copy notes to clipboard +- Скопіювати примітки в кишеню +- +- +- Copy &TOTP +- Скопіювати ТОП +- +- +- E&mpty recycle bin +- Спорожнити Ñмітник +- +- +- Clear history +- ОчиÑтити журнал +- +- +- Access error for config file %1 +- Помилка доÑтупу до файлу конфігурації %1 +- +- +- Settings +- ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ +- +- +- Toggle window +- Перемкнути вікно +- +- +- Quit KeePassXC +- Вийти з KeePassXC +- +- +- Please touch the button on your YubiKey! +- ÐатиÑніть, будь лаÑка, кнопку на вашому YubiKey! +- +- +- WARNING: You are using an unstable build of KeePassXC! +-There is a high risk of corruption, maintain a backup of your databases. +-This version is not meant for production use. +- ПопередженнÑ: Ви викориÑтовуєте неÑтійку збірку KeePassXC! +-Зберігайте резервну копію Ваших Ñховищ через підвищений ризик Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…. +-Ð¦Ñ Ð²ÐµÑ€ÑÑ–Ñ Ð½Ðµ призначена Ð´Ð»Ñ Ð¿Ð¾Ð²ÑÑкденного кориÑтуваннÑ. +- +- +- &Donate +- Пожерт&вувати +- +- +- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +-We recommend you use the AppImage available on our downloads page. +- <b>ПопередженнÑ</b>: ВикориÑÑ‚Ð°Ð½Ð½Ñ Ð’Ð°ÑˆÐ¾Ñ— верÑÑ–Ñ— Qt з екранною клавіатурою може призвеÑти до збою KeePassXC. +- +- +- &Import +- Імпортувати +- +- +- Create a new database +- Створити нове Ñховище +- +- +- Merge from another KDBX database +- Об'єднати з іншого Ñховища KDBX +- +- +- Add a new entry +- Додати новий Ð·Ð°Ð¿Ð¸Ñ +- +- +- View or edit entry +- ПереглÑнути або змінити Ð·Ð°Ð¿Ð¸Ñ +- +- +- Add a new group +- Додати нову групу +- +- +- Perform &Auto-Type +- Виконати ÐÐ²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ +- +- +- Open &URL +- Відкрити URL +- +- +- Import a KeePass 1 database +- Імпортувати Ñховище KeePass 1 +- +- +- Import a CSV file +- Імпортувати файл CSV +- +- +- NOTE: You are using a pre-release version of KeePassXC! +-Expect some bugs and minor issues, this version is not meant for production use. +- <b>Примітка</b>: Ви викориÑтовуєте попередній випуÑк KeePassXC! +-Зважайте на ймовірні помилки та незначні проблеми, Ñ†Ñ Ð²ÐµÑ€ÑÑ–Ñ Ð½Ðµ призначена Ð´Ð»Ñ Ð¿Ð¾Ð²ÑÑкденного кориÑтуваннÑ. +- +- +- Check for updates on startup? +- ПеревірÑти наÑвніÑÑ‚ÑŒ оновлень під Ñ‡Ð°Ñ Ð·Ð°Ð¿ÑƒÑку? +- +- +- Would you like KeePassXC to check for updates on startup? +- Ви хочете, щоб KeePassXC перевірÑв наÑвніÑÑ‚ÑŒ оновлень під Ñ‡Ð°Ñ Ð·Ð°Ð¿ÑƒÑку? +- +- +- You can always check for updates manually from the application menu. +- Ви завжди можете перевірити наÑвніÑÑ‚ÑŒ оновлень з меню заÑтоÑунку. +- +- +- &Export +- &ЕкÑпортувати +- +- +- Sort &A-Z +- ВпорÑдкувати &Ð-Я +- +- +- Sort &Z-A +- ВпорÑдкувати &Я-Ð +- +- +- &Password Generator +- Генератор паролів +- +- +- Import a 1Password Vault +- Імпортувати Ñховище 1Password +- +- +- &Getting Started +- &Ð’Ñтуп +- +- +- &User Guide +- Довідник &кориÑтувача +- +- +- &Keyboard Shortcuts +- &Ð¡Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ ÐºÐ»Ð°Ð²Ñ–Ñˆ +- +- +- &Recent Databases +- Ðедавні Ñховища +- +- +- &Entries +- ЗапиÑи +- +- +- Copy Att&ribute +- Скопіювати ознаку +- +- +- TOTP +- ТОП +- +- +- View +- ВиглÑд +- +- +- Theme +- Тема +- +- +- &Check for Updates +- Перевірити наÑвніÑÑ‚ÑŒ оновлень +- +- +- &Open Database… +- Відкрити Ñховище... +- +- +- &Save Database +- Зберегти Ñховище +- +- +- &Close Database +- Закрити Ñховище +- +- +- &New Database… +- Ðове Ñховище +- +- +- &Merge From Database… +- Об'&єднати зі Ñховищем… +- +- +- &New Entry… +- Ðовий запиÑ... +- +- +- &Edit Entry… +- Змінити запиÑ... +- +- +- &Delete Entry… +- Видалити запиÑ... +- +- +- &New Group… +- Ðова група... +- +- +- &Edit Group… +- Змінити групу... +- +- +- &Delete Group… +- Видалити групу... +- +- +- Download All &Favicons… +- Завантажити вÑÑ– фавікони... +- +- +- Sa&ve Database As… +- Зберегти Ñховище Ñк... +- +- +- Database &Security… +- Безпека Ñховища... +- +- +- Database &Reports... +- Звіти Ð´Ð»Ñ Ñховища... +- +- +- Statistics, health check, etc. +- +- +- +- &Database Settings… +- ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñховища... +- +- +- &Clone Entry… +- Склонувати запиÑ... +- +- +- Move u&p +- ПереміÑтити вгору +- +- +- Move entry one step up +- ПоÑунути Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° один крок вище +- +- +- Move do&wn +- ПереміÑтити вниз +- +- +- Move entry one step down +- ПоÑунути Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° один крок нижче +- +- +- Copy &Username +- Скопіювати ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача +- +- +- Copy &Password +- Скопіювати пароль +- +- +- Download &Favicon +- Завантажити &Favicon +- +- +- &Lock Databases +- Замкнути Ñховища +- +- +- &CSV File… +- &CSV-файл... +- +- +- &HTML File… +- &HTML-файл... +- +- +- KeePass 1 Database… +- Сховище KeePass 1… +- +- +- 1Password Vault… +- Сховище 1Password... +- +- +- CSV File… +- CSV-файл... +- +- +- Show TOTP +- Показати ТОП +- +- +- Show QR Code +- Показати QR-код +- +- +- Set up TOTP… +- Ð’Ñтановити ТОП… +- +- +- Report a &Bug +- Повідомит&и про ваду +- +- +- Open Getting Started Guide +- +- +- +- &Online Help +- &Довідка в мережі... +- +- +- Go to online documentation +- Перейти до документації в мережі +- +- +- Open User Guide +- Відкрити довідник кориÑтувача +- +- +- Save Database Backup... +- Зберегти резервну копію Ñховища... +- +- +- Add key to SSH Agent +- Додати до в'Ñзки поÑередника SSH +- +- +- Remove key from SSH Agent +- Видалити з в'Ñзки поÑередника SSH +- +- +- Compact Mode +- Компактний режим +- +- +- Automatic +- Ðвтоматично +- +- +- Light +- Світла +- +- +- Dark +- Темна +- +- +- Classic (Platform-native) +- КлаÑична (тема платформи) +- +- +- Show Toolbar +- Показувати панель инÑтрументів +- +- +- Show Preview Panel +- Показувати панель переглÑду +- +- +- Don't show again for this version +- Ðе показувати знову Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— верÑÑ–Ñ— +- +- +- Restart Application? +- ПерезапуÑтити програму? +- +- +- You must restart the application to apply this setting. Would you like to restart now? +- +- +- +- Perform Auto-Type Sequence +- +- +- +- {USERNAME} +- +- +- +- {USERNAME}{ENTER} +- +- +- +- {PASSWORD} +- +- +- +- {PASSWORD}{ENTER} +- +- +- +- Always on Top +- +- +- +- Hide Usernames +- Приховувати імена кориÑтувача +- +- +- Hide Passwords +- Приховувати паролі +- +- +- +- ManageDatabase +- +- Database settings +- ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñховища +- +- +- Edit database settings +- Змінити параметри Ñховища +- +- +- Unlock database +- Розблокувати Ñховище +- +- +- Unlock database to show more information +- Розблокуйте Ñховище, щоб показати додаткову інформацію +- +- +- Lock database +- Заблокувати Ñховище +- +- +- +- ManageSession +- +- Disconnect +- Від'єднати +- +- +- Disconnect this application +- +- +- +- +- Merger +- +- Creating missing %1 [%2] +- Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ñутніх %1 [%2] +- +- +- Relocating %1 [%2] +- ÐŸÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %1 [%2] +- +- +- Overwriting %1 [%2] +- ÐŸÐµÑ€ÐµÐ·Ð°Ð¿Ð¸Ñ %1 [%2] +- +- +- older entry merged from database "%1" +- об'єднано зі Ñтарішим запиÑом зі Ñховища "%1" +- +- +- Adding backup for older target %1 [%2] +- Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ€ÐµÐ·ÐµÑ€Ð²Ð½Ð¾Ñ— копії Ñтарішої цілі %1 [%2] +- +- +- Adding backup for older source %1 [%2] +- Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ€ÐµÐ·ÐµÑ€Ð²Ð½Ð¾Ñ— копії Ñтарішого джерела %1 [%2] +- +- +- Reapplying older target entry on top of newer source %1 [%2] +- ÐÐ°ÐºÐ»Ð°Ð´Ð°Ð½Ð½Ñ Ñтарішого цільового запиÑу на новіше джерело %1 [%2] +- +- +- Reapplying older source entry on top of newer target %1 [%2] +- ÐÐ°ÐºÐ»Ð°Ð´Ð°Ð½Ð½Ñ Ð½Ð¾Ð²Ñ–ÑˆÐ¾Ð³Ð¾ джерельного запиÑу на Ñтарішу ціль %1 [%2] +- +- +- Synchronizing from newer source %1 [%2] +- Ð£Ð·Ð³Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ Ð· новішим джерелом %1 [%2] +- +- +- Synchronizing from older source %1 [%2] +- Ð£Ð·Ð³Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ Ð·Ñ– Ñтарішим джерелом %1 [%2] +- +- +- Deleting child %1 [%2] +- Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð½Ð°Ñ‰Ð°Ð´ÐºÐ° %1 [%2] +- +- +- Deleting orphan %1 [%2] +- Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¾Ð´Ð¸Ð½Ð¾ÐºÐ¾Ð³Ð¾ об'єкту %1 [%2] +- +- +- Changed deleted objects +- Змінено видалені об'єкти +- +- +- Adding missing icon %1 +- Ð”Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´Ñутнього значка %1 +- +- +- Removed custom data %1 [%2] +- Видалено кориÑтувацькі дані %1 [%2] +- +- +- Adding custom data %1 [%2] +- Ð”Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувацьких даних %1 [%2] +- +- +- +- NewDatabaseWizard +- +- Create a new KeePassXC database... +- Створити нове Ñховище KeePassXC... +- +- +- Root +- Root group +- Корінь +- +- +- +- NewDatabaseWizardPage +- +- WizardPage +- Сторінка майÑтера Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Тут Ви можете налаштувати ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñховища. Ðе хвилюйтеÑÑŒ, Ви зможете зробити зміни пізніше в параметрах Ñховища. +- +- +- Advanced Settings +- Розширене Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ +- +- +- Simple Settings +- ПроÑте Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ +- +- +- Encryption Settings +- Параметри ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ +- +- +- +- NewDatabaseWizardPageDatabaseKey +- +- Database Credentials +- Облікові дані Ñховища +- +- +- A set of credentials known only to you that protects your database. +- Ðабір відомих лише Вам облікових даних, Ñкі захищають Ñховище. +- +- +- +- NewDatabaseWizardPageEncryption +- +- Encryption Settings +- Параметри ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- Тут Ви можете налаштувати ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñховища. Ðе хвилюйтеÑÑŒ, Ви зможете зробити зміни пізніше в параметрах Ñховища. +- +- +- +- NewDatabaseWizardPageMetaData +- +- General Database Information +- Загальна Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾ Ñховище +- +- +- Please fill in the display name and an optional description for your new database: +- Будь лаÑка, надайте назву Ð´Ð»Ñ Ð¿Ð¾ÐºÐ°Ð·Ñƒ Ñ–, можливо, іншу необов'Ñзкову інформацію щодо Вашого нового Ñховища: +- +- +- +- NixUtils +- +- Password Manager +- Керівник паролів +- +- +- +- OpData01 +- +- Invalid OpData01, does not contain header +- Ðепридатні OpData01, заголовок відÑутній +- +- +- Unable to read all IV bytes, wanted 16 but got %1 +- Ðеможливо прочитати вÑÑ– IV байти, потрібно 16 але одержано %1 +- +- +- Unable to init cipher for opdata01: %1 +- Ðеможливо започаткувати шифр Ð´Ð»Ñ opdata01: %1 +- +- +- Unable to read all HMAC signature bytes +- Ðеможливо прочитати вÑÑ– байти підпиÑу HMAC +- +- +- Malformed OpData01 due to a failed HMAC +- OpData01 Ñпотворені через Ñхиблений HMAC +- +- +- Unable to process clearText in place +- Ðеможливо обробити відкритий текÑÑ‚ на міÑці +- +- +- Expected %1 bytes of clear-text, found %2 +- ОчікувалоÑÑŒ %1 байтів відкритого текÑтку, знайдено %2 +- +- +- +- OpVaultOpenWidget +- +- Read Database did not produce an instance +-%1 +- Ð—Ñ‡Ð¸Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñховища не Ñтворило примірник +-%1 +- +- +- +- OpVaultReader +- +- Directory .opvault must exist +- Тека .opvault муÑить Ñ–Ñнувати +- +- +- Directory .opvault must be readable +- Тека .opvault муÑить бути прочитною +- +- +- Directory .opvault/default must exist +- Тека .opvault/default муÑить Ñ–Ñнувати +- +- +- Directory .opvault/default must be readable +- Тека .opvault/default муÑить бути прочитною +- +- +- Unable to decode masterKey: %1 +- Ðеможливо розшифрувати головний ключ: %1 +- +- +- Unable to derive master key: %1 +- Ðеможливо вивеÑти головний ключ: %1 +- +- +- +- OpenSSHKey +- +- Invalid key file, expecting an OpenSSH key +- Ðепридатний файловий ключ. Ключ має бути у форматі OpenSSH +- +- +- PEM boundary mismatch +- ÐевідповідніÑÑ‚ÑŒ межам PEM +- +- +- Base64 decoding failed +- Ð Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Base64 зазнало невдачі +- +- +- Key file way too small. +- Файловий ключ надто маленький. +- +- +- Key file magic header id invalid +- Ðепридатний логічний код файлу ключа +- +- +- Found zero keys +- Ðе знайдено жодного ключа +- +- +- Failed to read public key. +- Ð—Ñ‡Ð¸Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¾Ð³Ð¾ ключа зазнало невдачі. +- +- +- Corrupted key file, reading private key failed +- Файл ключа пошкоджений, Ð·Ñ‡Ð¸Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚Ð°Ñ”Ð¼Ð½Ð¾Ð³Ð¾ ключа зазнало невдачі +- +- +- No private key payload to decrypt +- КориÑної навантаги таємного ключа не знайдено +- +- +- Trying to run KDF without cipher +- Пробуємо обчиÑлити ФОК без шифру +- +- +- Passphrase is required to decrypt this key +- Ð”Ð»Ñ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ ключа потрібен вираз Ð¿Ð°Ñ€Ð¾Ð»Ñ +- +- +- Key derivation failed, key file corrupted? +- ОбчиÑÐ»ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð° зазнало невдачі. Можливо, файл ключа пошкоджений? +- +- +- Decryption failed, wrong passphrase? +- Розшифрувати не вдалоÑÑ, можливо, через хибний вираз паролÑ? +- +- +- Unexpected EOF while reading public key +- ÐеÑподіваний кінець файлу під Ñ‡Ð°Ñ Ð·Ñ‡Ð¸Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¾Ð³Ð¾ ключа +- +- +- Unexpected EOF while reading private key +- ÐеÑподіваний кінець файлу під Ñ‡Ð°Ñ Ð·Ñ‡Ð¸Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚Ð°Ñ”Ð¼Ð½Ð¾Ð³Ð¾ ключа +- +- +- Can't write public key as it is empty +- Ðеможливо запиÑати відкритий ключ, оÑкільки він пуÑтий +- +- +- Unexpected EOF when writing public key +- ÐеÑподіваний кінець файлу під Ñ‡Ð°Ñ Ð·Ð°Ð¿Ð¸Ñу відкритого ключа +- +- +- Can't write private key as it is empty +- Ðеможливо запиÑати таємний ключ, оÑкільки він пуÑтий +- +- +- Unexpected EOF when writing private key +- ÐеÑподіваний кінець файлу під Ñ‡Ð°Ñ Ð·Ð°Ð¿Ð¸Ñу таємного ключа +- +- +- Unsupported key type: %1 +- Ðепідтримуваний тип ключа: %1 +- +- +- Unknown cipher: %1 +- Ðевідомий шифр: %1 +- +- +- Cipher IV is too short for MD5 kdf +- Шифр IV занадто короткий Ð´Ð»Ñ Ð¤ÐžÐš MD5 +- +- +- Unknown KDF: %1 +- Ðевідома ФОК: %1 +- +- +- Unknown key type: %1 +- Ðевідомий тип ключа: %1 +- +- +- +- PasswordEdit +- +- Passwords do not match +- Паролі не Ñпівпадають +- +- +- Passwords match so far +- Паролі поки що Ñпівпадають +- +- +- Toggle Password (%1) +- +- +- +- Generate Password (%1) +- +- +- +- Warning: Caps Lock enabled! +- Увага: Caps Lock увімкнено! +- +- +- +- PasswordEditWidget +- +- Enter password: +- Введіть пароль: +- +- +- Confirm password: +- ÐŸÑ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ: +- +- +- Password +- Пароль +- +- +- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> +- <p>Пароль Ñ” оÑновним заÑобом Ð´Ð»Ñ ÑƒÐ±ÐµÐ·Ð¿ÐµÑ‡ÐµÐ½Ð½Ñ Ð’Ð°ÑˆÐ¾Ð³Ð¾ Ñховища.</p><p>Ðайкращі паролі мають бути довгими та унікальними. KeePassXC може Ñтворити такий Ð´Ð»Ñ Ð’Ð°Ñ.</p> +- +- +- Passwords do not match. +- Паролі не збігаютьÑÑ. +- +- +- Password field +- Поле Ð¿Ð°Ñ€Ð¾Ð»Ñ +- +- +- Repeat password field +- Поле Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ +- +- +- +- PasswordGeneratorWidget +- +- %p% +- %p% +- +- +- strength +- Password strength +- надійніÑÑ‚ÑŒ +- +- +- entropy +- ÐµÐ½Ñ‚Ñ€Ð¾Ð¿Ñ–Ñ +- +- +- Password +- Пароль +- +- +- Character Types +- Види Ñимволів +- +- +- Numbers +- Цифри +- +- +- Extended ASCII +- Розширені ASCII +- +- +- Exclude look-alike characters +- Виключити неоднозначні Ñимволи +- +- +- Pick characters from every group +- ВикориÑтати Ñимволи з кожної групи +- +- +- &Length: +- Довжина: +- +- +- Passphrase +- Вираз Ð¿Ð°Ñ€Ð¾Ð»Ñ +- +- +- Wordlist: +- Перелік Ñлів: +- +- +- Word Separator: +- Розділювач Ñлів: +- +- +- Close +- Закрити +- +- +- Entropy: %1 bit +- ЕнтропіÑ: %1 біт +- +- +- Password Quality: %1 +- ЯкіÑÑ‚ÑŒ паролÑ: %1 +- +- +- Poor +- Password quality +- Погана +- +- +- Weak +- Password quality +- Ðизька +- +- +- Good +- Password quality +- Добра +- +- +- Excellent +- Password quality +- Відмінна +- +- +- Switch to advanced mode +- Перемкнути в розширений режим +- +- +- Advanced +- Розширене +- +- +- Braces +- Дужки +- +- +- Punctuation +- Знаки пунктуації +- +- +- Quotes +- Лапки +- +- +- Logograms +- Логограми +- +- +- Character set to exclude from generated password +- Ðабір Ñимволів, Ñких треба уникати +- +- +- Do not include: +- Ðе залучати: +- +- +- Add non-hex letters to "do not include" list +- Ðе залучати літери, що не предÑтавлÑÑŽÑ‚ÑŒ шиÑтнадцÑтковий код (G - Z) +- +- +- Hex +- ШіÑтнадцÑткові чиÑла +- +- +- Excluded characters: "0", "1", "l", "I", "O", "|", "ï¹’" +- Виключені знаки: "0", "1", "l", "I", "O", "|", "ï¹’" +- +- +- Generated password +- Створений пароль +- +- +- Upper-case letters +- Великі літери +- +- +- Lower-case letters +- Маленькі літери +- +- +- Special characters +- Спеціальні Ñимволи +- +- +- Math Symbols +- Математичні Ñимволи +- +- +- Dashes and Slashes +- РиÑки +- +- +- Excluded characters +- Виключені Ñимволи +- +- +- Hex Passwords +- ШіÑтнадцÑткові паролі +- +- +- Password length +- Довжина Ð¿Ð°Ñ€Ð¾Ð»Ñ +- +- +- Word Case: +- РегіÑÑ‚Ñ€ Ñлів: +- +- +- Regenerate password +- Створити пароль знову +- +- +- Copy password +- Копіювати пароль +- +- +- lower case +- нижній регіÑÑ‚Ñ€ +- +- +- UPPER CASE +- ВЕРХÐІЙ РЕГІСТР +- +- +- Title Case +- З заголовної літери +- +- +- Generate Password +- Створити пароль +- +- +- Also choose from: +- +- +- +- Additional characters to use for the generated password +- +- +- +- Additional characters +- Додаткові Ñимволи +- +- +- Word Count: +- КількіÑÑ‚ÑŒ Ñлів: +- +- +- Esc +- Esc +- +- +- Apply Password +- ЗаÑтоÑувати пароль +- +- +- Ctrl+S +- Ctrl+S +- +- +- Regenerate password (%1) +- Створити пароль знову (%1) +- +- +- Special Characters +- Спеціальні Ñимволи +- +- +- +- QApplication +- +- KeeShare +- KeeShare +- +- +- Statistics +- СтатиÑтика +- +- +- Very weak password +- Дуже Ñлабкий пароль +- +- +- Password entropy is %1 bits +- Ð•Ð½Ñ‚Ñ€Ð¾Ð¿Ñ–Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ: %1 біт +- +- +- Weak password +- Слабкий пароль +- +- +- Used in %1/%2 +- +- +- +- Password is used %1 times +- Пароль викориÑтано %1 разів +- +- +- Password has expired +- Термін дії Ð¿Ð°Ñ€Ð¾Ð»Ñ Ñплив +- +- +- Password expiry was %1 +- +- +- +- Password is about to expire +- Термін дії Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð¾ÑÑŒ-оÑÑŒ Ñпливе +- +- +- Password expires in %1 days +- Термін дії Ð¿Ð°Ñ€Ð¾Ð»Ñ Ñпливає через %1 днів +- +- +- Password will expire soon +- Термін дії Ð¿Ð°Ñ€Ð¾Ð»Ñ Ñпливає незабаром +- +- +- Password expires on %1 +- Термін дії Ð¿Ð°Ñ€Ð¾Ð»Ñ Ñпливає %1 +- +- +- Health Check +- +- +- +- HIBP +- +- +- +- +- QMessageBox +- +- Overwrite +- ПерезапиÑати +- +- +- Delete +- Видалити +- +- +- Move +- ПереміÑтити +- +- +- Empty +- Спорожнити +- +- +- Remove +- Видалити +- +- +- Skip +- ПропуÑтити +- +- +- Disable +- Вимкнути +- +- +- Merge +- Об'єднати +- +- +- Continue +- Продовжити +- +- +- +- QObject +- +- Database not opened +- Сховище не відкрите +- +- +- Database hash not available +- Контрольна Ñума Ñховища недоÑтупна +- +- +- Client public key not received +- Відкритий ключ кориÑтувача не одержано +- +- +- Cannot decrypt message +- Ðеможливо розшифрувати Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ +- +- +- Action cancelled or denied +- Дію ÑкаÑовано або заборонено +- +- +- KeePassXC association failed, try again +- Прив'Ñзка KeePassXC зазнала невдачі, Ñпробуйте ще раз +- +- +- Encryption key is not recognized +- Шифрувальний ключ не розпізнано +- +- +- Incorrect action +- Хибна Ð´Ñ–Ñ +- +- +- Empty message received +- Одержано порожнє Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ +- +- +- No URL provided +- URL не надано +- +- +- No logins found +- Імен кориÑтувача не знайдено +- +- +- Unknown error +- Ðевідома помилка +- +- +- Add a new entry to a database. +- Додати новий Ð·Ð°Ð¿Ð¸Ñ Ð´Ð¾ Ñховища. +- +- +- Path of the database. +- ШлÑÑ… до Ñховища. +- +- +- Key file of the database. +- Файловий ключа Ð´Ð»Ñ Ñховища. +- +- +- path +- шлÑÑ… +- +- +- Username for the entry. +- Ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу. +- +- +- username +- ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача +- +- +- URL for the entry. +- URL Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу. +- +- +- URL +- URL +- +- +- Prompt for the entry's password. +- Запитати Ð²Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу. +- +- +- Generate a password for the entry. +- Створити пароль Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу. +- +- +- length +- довжина +- +- +- Path of the entry to add. +- ШлÑÑ… до запиÑу, що підлÑгає додаванню. +- +- +- Path of the entry to clip. +- clip = copy to clipboard +- ШлÑÑ… до запиÑу, що підлÑгає копіюванню. +- +- +- Timeout in seconds before clearing the clipboard. +- Ð§Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð² Ñекундах перед очищеннÑм кишені. +- +- +- Edit an entry. +- Змінити запиÑ. +- +- +- Title for the entry. +- Заголовок запиÑу. +- +- +- title +- Заголовок +- +- +- Path of the entry to edit. +- ШлÑÑ… до запиÑу, що підлÑгає зміні. +- +- +- Estimate the entropy of a password. +- ОбчиÑлити ентропію паролÑ. +- +- +- Password for which to estimate the entropy. +- Пароль, що підлÑгає обчиÑленню ентропії. +- +- +- Perform advanced analysis on the password. +- Виконати поглиблений аналіз паролÑ. +- +- +- +- +-Available commands: +- +- +- +-ДоÑтупні команди: +- +- +- +- Name of the command to execute. +- Ðазва команди до виконаннÑ. +- +- +- List database entries. +- Показати перелік Ñховищ. +- +- +- Path of the group to list. Default is / +- ШлÑÑ… групи. Типовим Ñ” / +- +- +- Find entries quickly. +- Знаходити запиÑи швидко. +- +- +- Search term. +- Слово Ð´Ð»Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ. +- +- +- Merge two databases. +- Об'єднати два Ñховища. +- +- +- Path of the database to merge from. +- ШлÑÑ… до Ñховища, Ñке підлÑгає об'єднанню. +- +- +- Use the same credentials for both database files. +- ВикориÑтовувати однакові реєÑтраційні дані Ð´Ð»Ñ Ð¾Ð±Ð¾Ñ… Ñховищ. +- +- +- Key file of the database to merge from. +- Файловий ключ Ð´Ð»Ñ Ñховища, Ñке підлÑгає об'єднанню. +- +- +- Show an entry's information. +- Показати дані запиÑу. +- +- +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- Ðазви ознак Ð´Ð»Ñ Ð¿Ð¾ÐºÐ°Ð·Ñƒ. Цей параметр можна вказати кілька разів, тим чаÑом у кожному Ñ€Ñдку може бути тільки один примірник у заданому порÑдку. Якщо ознаки не вказані, буде показано типові ознаки. +- +- +- attribute +- ознака +- +- +- Name of the entry to show. +- Ðазва запиÑу Ð´Ð»Ñ Ð¿Ð¾ÐºÐ°Ð·Ñƒ. +- +- +- NULL device +- NULL приÑтрій +- +- +- error reading from device +- помилка Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð· приÑтрою +- +- +- malformed string +- хибне Ñ€Ñдкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ +- +- +- missing closing quote +- бракує закривальних лапок +- +- +- Group +- Група +- +- +- Title +- Заголовок +- +- +- Username +- Ð†Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача +- +- +- Password +- Пароль +- +- +- Notes +- Примітки +- +- +- Last Modified +- ОÑÑ‚Ð°Ð½Ð½Ñ Ð·Ð¼Ñ–Ð½Ð° +- +- +- Created +- Створено +- +- +- Browser Integration +- Ð¡Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð· переглÑдачем +- +- +- SSH Agent +- ПоÑередник SSH +- +- +- Generate a new random diceware passphrase. +- Створити новий вираз Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð¼ÐµÑ‚Ð¾Ð´Ð¾Ð¼ гральних кіÑток (diceware). +- +- +- Word count for the diceware passphrase. +- КількіÑÑ‚ÑŒ Ñлів у виразі паролÑ. +- +- +- Wordlist for the diceware generator. +-[Default: EFF English] +- СпиÑок Ñлів Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ‚Ð¾Ñ€Ð° паролів методом diceware. +-[Типово: англійÑька верÑÑ–Ñ EFF] +- +- +- Generate a new random password. +- Створити новий випадковий пароль. +- +- +- Could not create entry with path %1. +- Ðеможливо Ñтворити Ð·Ð°Ð¿Ð¸Ñ Ñ–Ð· шлÑхом %1. +- +- +- Enter password for new entry: +- Введіть пароль Ð´Ð»Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ запиÑу: +- +- +- Writing the database failed %1. +- ЗапиÑати Ñховище не вдалоÑÑ %1. +- +- +- Successfully added entry %1. +- УÑпішно додано Ð·Ð°Ð¿Ð¸Ñ %1. +- +- +- Invalid timeout value %1. +- Ðепридатне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð»Ñ–Ð¼Ñ–Ñ‚Ñƒ чаÑу %1. +- +- +- Entry %1 not found. +- Ð—Ð°Ð¿Ð¸Ñ %1 не знайдено. +- +- +- Entry with path %1 has no TOTP set up. +- Ð—Ð°Ð¿Ð¸Ñ Ñ–Ð· шлÑхом %1 не має налаштованого ТОП. +- +- +- Clearing the clipboard in %1 second(s)... +- ÐžÑ‡Ð¸Ñ‰ÐµÐ½Ð½Ñ ÐºÐ¸ÑˆÐµÐ½Ñ– через %1 Ñекунду...ÐžÑ‡Ð¸Ñ‰ÐµÐ½Ð½Ñ ÐºÐ¸ÑˆÐµÐ½Ñ– через %1 Ñекунди...ÐžÑ‡Ð¸Ñ‰ÐµÐ½Ð½Ñ ÐºÐ¸ÑˆÐµÐ½Ñ– через %1 Ñекунд...ÐžÑ‡Ð¸Ñ‰ÐµÐ½Ð½Ñ Ð±ÑƒÑ„ÐµÑ€Ð° обміну через %1 Ñекунд... +- +- +- Clipboard cleared! +- Кишеню очищено! +- +- +- Silence password prompt and other secondary outputs. +- Тихе Ð·Ð°Ð¿Ñ€Ð¾ÑˆÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ Ñ‚Ð° інші вторинні виводи. +- +- +- count +- CLI parameter +- кількіÑÑ‚ÑŒ +- +- +- Could not find entry with path %1. +- Ðеможливо знайти Ð·Ð°Ð¿Ð¸Ñ Ñ–Ð· шлÑхом %1. +- +- +- Not changing any field for entry %1. +- ÐŸÐ¾Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу %1 залишаютьÑÑ Ð±ÐµÐ· змін. +- +- +- Enter new password for entry: +- Введіть новий пароль Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу: +- +- +- Writing the database failed: %1 +- ЗапиÑати Ñховище не вдалоÑÑ: %1 +- +- +- Successfully edited entry %1. +- УÑпішно змінено Ð·Ð°Ð¿Ð¸Ñ %1. +- +- +- Length %1 +- Довжина: %1 +- +- +- Entropy %1 +- ЕнтропіÑ: %1 +- +- +- Log10 %1 +- Log10 %1 +- +- +- Multi-word extra bits %1 +- БагатоÑловні додаткові біти %1 +- +- +- Type: Bruteforce +- Тип: Метод грубої Ñили +- +- +- Type: Dictionary +- Тип: Словник +- +- +- Type: Dict+Leet +- Тип: Словник+Leet +- +- +- Type: User Words +- Тип: КориÑтувацькі Ñлова +- +- +- Type: User+Leet +- Тип: КориÑтувач+Leet +- +- +- Type: Repeated +- Тип: ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€ÑŽÐ²Ð°Ð½Ð½Ñ +- +- +- Type: Sequence +- Тип: ПоÑлідовніÑÑ‚ÑŒ +- +- +- Type: Spatial +- Тип: ПроÑторовий +- +- +- Type: Date +- Тип: Дата +- +- +- Type: Bruteforce(Rep) +- Тип: Метод грубої Ñили (повт.) +- +- +- Type: Dictionary(Rep) +- Тип: Словник (повт.) +- +- +- Type: Dict+Leet(Rep) +- Тип: Словник+Leet (повт.) +- +- +- Type: User Words(Rep) +- Тип: КориÑтувацькі Ñлова (повт.) +- +- +- Type: User+Leet(Rep) +- Тип: КориÑтувач+Leet (повт.) +- +- +- Type: Repeated(Rep) +- Тип: ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€ÑŽÐ²Ð°Ð½Ð½Ñ (повт.) +- +- +- Type: Sequence(Rep) +- Тип: ПоÑлідовніÑÑ‚ÑŒ (повт.) +- +- +- Type: Spatial(Rep) +- Тип: ПроÑторовий (повт.) +- +- +- Type: Date(Rep) +- Тип: Дата (повт.) +- +- +- Type: Unknown%1 +- Тип: Ðевідомий%1 +- +- +- Entropy %1 (%2) +- ЕнтропіÑ: %1 (%2) +- +- +- *** Password length (%1) != sum of length of parts (%2) *** +- *** Довжина Ð¿Ð°Ñ€Ð¾Ð»Ñ (%1) != Ñума довжин чаÑтин (%2) *** +- +- +- Failed to load key file %1: %2 +- Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ ключа зазнало невдачі %1: %2 +- +- +- Length of the generated password +- Довжина Ñтворюваного Ð¿Ð°Ñ€Ð¾Ð»Ñ +- +- +- Use lowercase characters +- ВикориÑтовувати малі літери +- +- +- Use uppercase characters +- ВикориÑтовувати великі літери +- +- +- Use special characters +- ВикориÑтовувати Ñпеціальні Ñимволи +- +- +- Use extended ASCII +- ВикориÑтовувати розширені ASCII +- +- +- Exclude character set +- Виключити набір Ñимволів +- +- +- chars +- Ñимволи +- +- +- Exclude similar looking characters +- Виключати Ñхожі Ñимволи +- +- +- Include characters from every selected group +- ВикориÑтовувати Ñимволи з кожної групи +- +- +- Recursively list the elements of the group. +- Показувати елементи групи рекурÑивно. +- +- +- Cannot find group %1. +- Ðеможливо знайти групу %1. +- +- +- Error reading merge file: +-%1 +- Помилка Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ Ð´Ð»Ñ Ð¾Ð±'єднаннÑ: +-%1 +- +- +- Unable to save database to file : %1 +- Ðеможливо зберегти Ñховище до файлу : %1 +- +- +- Unable to save database to file: %1 +- Ðеможливо зберегти Ñховище до файлу: %1 +- +- +- Successfully recycled entry %1. +- УÑпішно видалено Ð·Ð°Ð¿Ð¸Ñ %1. +- +- +- Successfully deleted entry %1. +- УÑпішно вилучено Ð·Ð°Ð¿Ð¸Ñ %1. +- +- +- Show the entry's current TOTP. +- Показати поточний ТОП запиÑу. +- +- +- ERROR: unknown attribute %1. +- ПОМИЛКÐ: невідома ознака %1. +- +- +- No program defined for clipboard manipulation +- Програму Ð´Ð»Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ з кишенею не визначено +- +- +- file empty +- порожній файл +- +- +- %1: (row, col) %2,%3 +- %1: (Ñ€Ñдок, позиціÑ) %2,%3 +- +- +- AES-KDF (KDBX 4) +- AES-KDF (KDBX 4) +- +- +- AES-KDF (KDBX 3.1) +- AES-KDF (KDBX 3.1) +- +- +- Invalid Settings +- TOTP +- Ðепридатні параметри +- +- +- Invalid Key +- TOTP +- Ðепридатний ключ +- +- +- Message encryption failed. +- Ð¨Ð¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ð·Ð½Ð°Ð»Ð¾ невдачі. +- +- +- No groups found +- Жодної групи не знайдено +- +- +- Create a new database. +- Створити нове Ñховище. +- +- +- File %1 already exists. +- Файл %1 вже Ñ–Ñнує. +- +- +- Loading the key file failed +- Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð° зазнало невдачі +- +- +- No key is set. Aborting database creation. +- Ключ не вÑтановлено. Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñховища ÑкаÑовано. +- +- +- Failed to save the database: %1. +- Зберегти Ñховище не вдалоÑÑ %1. +- +- +- Successfully created new database. +- Ðове Ñховище уÑпішно Ñтворено. +- +- +- Creating KeyFile %1 failed: %2 +- Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ð³Ð¾ ключа %1 зазнало невдачі: %2 +- +- +- Loading KeyFile %1 failed: %2 +- Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ð³Ð¾ ключа %1 зазнало невдачі: %2 +- +- +- Path of the entry to remove. +- ШлÑÑ… до запиÑу, що підлÑгає видаленню. +- +- +- Existing single-instance lock file is invalid. Launching new instance. +- ÐаÑвний блокувальний файл режиму одного примірника Ñ” непридатним. ЗапуÑкаємо новий примірник. +- +- +- The lock file could not be created. Single-instance mode disabled. +- Ðеможливо Ñтворити блокувальний файл. Режим одного примірника вимкнено. +- +- +- KeePassXC - cross-platform password manager +- KeePassXC – багатоплатформний розпорÑдник паролів +- +- +- filenames of the password databases to open (*.kdbx) +- назви файлів Ñховищ, Ñкі треба відкрити (*.kdbx) +- +- +- path to a custom config file +- шлÑÑ… до влаÑного файлу параметрів +- +- +- key file of the database +- файловий ключ Ñховища +- +- +- read password of the database from stdin +- отримати пароль до Ñховища із stdin +- +- +- Another instance of KeePassXC is already running. +- Інший примірник KeePassXC вже запущено. +- +- +- Fatal error while testing the cryptographic functions. +- Ðевиправна помилка в процеÑÑ– теÑÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ð³Ñ€Ð°Ñ„Ñ–Ñ‡Ð½Ð¸Ñ… функцій. +- +- +- KeePassXC - Error +- KeePassXC – помилка +- +- +- Database password: +- Пароль Ñховища: +- +- +- Cannot create new group +- Ðеможливо Ñтворити нову групу +- +- +- Deactivate password key for the database. +- Вимкнути парольний ключ Ð´Ð»Ñ Ñховища. +- +- +- Displays debugging information. +- Показаує інформацію щодо зневадженнÑ. +- +- +- Deactivate password key for the database to merge from. +- Вимкнути парольний ключ Ð´Ð»Ñ Ñховища, Ñке підлÑгає об'єднанню. +- +- +- Version %1 +- ВерÑÑ–Ñ %1 +- +- +- Build Type: %1 +- Тип збірки: %1 +- +- +- Revision: %1 +- РевізіÑ: %1 +- +- +- Distribution: %1 +- ДиÑтрибутив: %1 +- +- +- Debugging mode is disabled. +- Режим Ð·Ð½ÐµÐ²Ð°Ð´Ð¶ÐµÐ½Ð½Ñ Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð¾. +- +- +- Debugging mode is enabled. +- Режим Ð·Ð½ÐµÐ²Ð°Ð´Ð¶ÐµÐ½Ð½Ñ Ð²Ð²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð¾. +- +- +- Operating system: %1 +-CPU architecture: %2 +-Kernel: %3 %4 +- Операційна ÑиÑтема: %1 +-Ðрхітектура ЦП: %2 +-Ядро: %3 %4 +- +- +- Auto-Type +- ÐÐ²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ +- +- +- KeeShare (signed and unsigned sharing) +- KeeShare (підпиÑане Ñ– непідпиÑане Ñпільне викориÑтаннÑ) +- +- +- KeeShare (only signed sharing) +- KeeShare (тільки підпиÑане Ñпільне викориÑтаннÑ) +- +- +- KeeShare (only unsigned sharing) +- KeeShare (тільки непідпиÑане Ñпільне викориÑтаннÑ) +- +- +- YubiKey +- YubiKey +- +- +- TouchID +- TouchID +- +- +- None +- ВідÑутні +- +- +- Enabled extensions: +- Увімкнені розширеннÑ: +- +- +- Cryptographic libraries: +- Шифрувальні бібліотеки: +- +- +- Cannot generate a password and prompt at the same time! +- Ðеможливо Ñтворити пароль Ñ– запроÑити його водночаÑно! +- +- +- Adds a new group to a database. +- Додає нову групу Ð´Ð»Ñ Ñховища. +- +- +- Path of the group to add. +- ШлÑÑ… до групи, Ñку треба додати. +- +- +- Group %1 already exists! +- Група %1 вже Ñ–Ñнує! +- +- +- Group %1 not found. +- Групу %1 не знайдено. +- +- +- Successfully added group %1. +- УÑпішно додано групу %1. +- +- +- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. +- ПеревірÑÑ”, чи Ñтали ÑкіÑÑŒ паролі відомими. ІМ'Я ФÐЙЛУ має бути шлÑхом до файлу, Ñкий міÑтить контрольні Ñуми SHA-1 відомих паролів у форматі HIBP. Такий файл можна завантажити, наприклад, з https://haveibeenpwned.com/Passwords . +- +- +- FILENAME +- ІМʼЯ ФÐЙЛУ +- +- +- Analyze passwords for weaknesses and problems. +- Проаналізувати паролі на ÑлабкіÑÑ‚ÑŒ та інші проблеми. +- +- +- Failed to open HIBP file %1: %2 +- Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл HIBP %1: %2 +- +- +- Evaluating database entries against HIBP file, this will take a while... +- ЗвірÑÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñів Ñховища з файлом HIBP, це може тривате доÑить довго... +- +- +- Close the currently opened database. +- Закрити наразі відкрите Ñховище. +- +- +- Display this help. +- Показати цю довідку. +- +- +- slot +- гніздо +- +- +- Invalid word count %1 +- Ðепридатна кількіÑÑ‚ÑŒ Ñлів %1 +- +- +- The word list is too small (< 1000 items) +- СпиÑок Ñлів надто малий (< 1000 одиниць) +- +- +- Exit interactive mode. +- Вийти з діалогового режиму. +- +- +- Exports the content of a database to standard output in the specified format. +- ÐадÑилає вміÑÑ‚ Ñховища до Ñтандартного виходу в зазначеному форматі. +- +- +- Unable to export database to XML: %1 +- Ðеможливо екÑпортувати Ñховище в XML: %1 +- +- +- Unsupported format %1 +- Ðепідтримуваний формат %1 +- +- +- Use numbers +- ВикориÑтовувати цифри +- +- +- Invalid password length %1 +- Ðепридатна довжина Ð¿Ð°Ñ€Ð¾Ð»Ñ %1 +- +- +- Display command help. +- Показати довідку щодо команд. +- +- +- Available commands: +- ДоÑтупні команди: +- +- +- Import the contents of an XML database. +- Імпортувати вміÑÑ‚ Ñховища XML. +- +- +- Path of the XML database export. +- ШлÑÑ… Ð´Ð»Ñ ÐµÐºÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñховища XML. +- +- +- Path of the new database. +- ШлÑÑ… до нового Ñховища. +- +- +- Successfully imported database. +- Сховище вдало імпортовано. +- +- +- Unknown command %1 +- Ðевідома команда %1 +- +- +- Flattens the output to single lines. +- Сплощує вивід до єдиного Ñ€Ñдка. +- +- +- Only print the changes detected by the merge operation. +- Лише надрукувати зміни, знайдені операцією об'єднаннÑ. +- +- +- Yubikey slot for the second database. +- Гніздо Yubikey Ð´Ð»Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð³Ð¾ Ñховища. +- +- +- Successfully merged %1 into %2. +- %1 уÑпішно обÌ'єднано з %2. +- +- +- Database was not modified by merge operation. +- Об'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ змінило Ñховище. +- +- +- Moves an entry to a new group. +- Переміщує Ð·Ð°Ð¿Ð¸Ñ Ð´Ð¾ нової групи. +- +- +- Path of the entry to move. +- ШлÑÑ… до запиÑу, що підлÑгає переміщенню. +- +- +- Path of the destination group. +- ШлÑÑ… до групи призначеннÑ. +- +- +- Could not find group with path %1. +- Ðеможливо знайти групу за шлÑхом %1. +- +- +- Entry is already in group %1. +- Ð—Ð°Ð¿Ð¸Ñ Ð²Ð¶Ðµ в групі %1. +- +- +- Successfully moved entry %1 to group %2. +- Ð—Ð°Ð¿Ð¸Ñ %1 уÑпішно переміщено до групи %2. +- +- +- Open a database. +- Відкрити Ñховище. +- +- +- Path of the group to remove. +- ШлÑÑ… до групи, що підлÑгає видаленню. +- +- +- Cannot remove root group from database. +- Ðеможливо видалити кореневу групу зі Ñховища. +- +- +- Successfully recycled group %1. +- УÑпішно перероблено групу %1. +- +- +- Successfully deleted group %1. +- Групу %1 уÑпішно вилучено. +- +- +- Failed to open database file %1: not found +- Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл Ñховища %1: файл не знайдено +- +- +- Failed to open database file %1: not a plain file +- Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл Ñховища %1: не звичайний файл +- +- +- Failed to open database file %1: not readable +- Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл Ñховища %1: недоÑтупний Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ +- +- +- Enter password to unlock %1: +- Введіть пароль Ð´Ð»Ñ Ñ€Ð¾Ð·Ð±Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ %1: +- +- +- Invalid YubiKey slot %1 +- Ðепридатне гніздо YubiKey %1 +- +- +- Enter password to encrypt database (optional): +- Введіть пароль Ð´Ð»Ñ ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñховища (необов'Ñзково): +- +- +- HIBP file, line %1: parse error +- Файл HIBP, Ñ€Ñдок %1: помилка ÑинтакÑичного аналізу +- +- +- Secret Service Integration +- Ð¡Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð· Таємною Ñлужбою +- +- +- User name +- Ð†Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача +- +- +- Password for '%1' has been leaked %2 time(s)! +- +- +- +- Invalid password generator after applying all options +- ПіÑÐ»Ñ Ð·Ð°ÑтоÑÑƒÐ²Ð°Ð½Ð½Ñ Ð²ÑÑ–Ñ… параметрів генератор паролів Ñтав непридатним +- +- +- Show the protected attributes in clear text. +- Показувати захищені ознаки незахищеним текÑтом. +- +- +- Browser Plugin Failure +- Помилка Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÐ³Ð»Ñдача +- +- +- Could not save the native messaging script file for %1. +- +- +- +- Copy the given attribute to the clipboard. Defaults to "password" if not specified. +- +- +- +- Copy the current TOTP to the clipboard (equivalent to "-a totp"). +- +- +- +- Copy an entry's attribute to the clipboard. +- Скопіювати атрибут запиÑу в буфер обміну. +- +- +- ERROR: Please specify one of --attribute or --totp, not both. +- +- +- +- ERROR: attribute %1 is ambiguous, it matches %2. +- +- +- +- Attribute "%1" not found. +- Ознаку "%1" не знайдено. +- +- +- Entry's "%1" attribute copied to the clipboard! +- Ознаку запиÑу "%1" Ñкопійовано до кишені! +- +- +- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). +- +- +- +- slot[:serial] +- +- +- +- Target decryption time in MS for the database. +- +- +- +- time +- Ñ‡Ð°Ñ +- +- +- Set the key file for the database. +- Вкажіть файловий ключ Ð´Ð»Ñ Ñховища. +- +- +- Set a password for the database. +- Вкажіть пароль Ð´Ð»Ñ Ñховища. +- +- +- Invalid decryption time %1. +- +- +- +- Target decryption time must be between %1 and %2. +- +- +- +- Failed to set database password. +- Ðе вдалоÑÑ Ð²Ñтановити пароль Ð´Ð»Ñ Ñховища. +- +- +- Benchmarking key derivation function for %1ms delay. +- +- +- +- Setting %1 rounds for key derivation function. +- +- +- +- error while setting database key derivation settings. +- +- +- +- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. +- Формат Ð´Ð»Ñ ÐµÐºÑпортуваннÑ. Можливі формати: xml або csv. Типовий формат – xml. +- +- +- Unable to import XML database: %1 +- Ðеможливо імпортувати Ñховище XML: %1 +- +- +- Show a database's information. +- Показати інформацію про Ñховище. +- +- +- UUID: +- UUID: +- +- +- Name: +- Ðазва: +- +- +- Description: +- ОпиÑ: +- +- +- Cipher: +- Шифр: +- +- +- KDF: +- KDF: +- +- +- Recycle bin is enabled. +- +- +- +- Recycle bin is not enabled. +- +- +- +- Invalid command %1. +- +- +- +- Invalid YubiKey serial %1 +- +- +- +- Please touch the button on your YubiKey to continue… +- ÐатиÑніть, будь лаÑка, кнопку на вашому YubiKey Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð²Ð¶ÐµÐ½Ð½Ñ… +- +- +- Do you want to create a database with an empty password? [y/N]: +- Ви дійÑно бажаєте Ñтворити Ñховище з порожнім паролем? [y/N]: +- +- +- Repeat password: +- Повторіть пароль: +- +- +- Error: Passwords do not match. +- Помилка: паролі не збігаютьÑÑ. +- +- +- All clipping programs failed. Tried %1 +- +- +- +- +- AES (%1 rounds) +- AES (%1 раундів) +- +- +- AES 256-bit +- AES 256-біт +- +- +- Twofish 256-bit +- Twofish 256-біт +- +- +- ChaCha20 256-bit +- ChaCha20: 256-біт {20 256-?} +- +- +- Benchmark %1 delay +- Оцінити %1 затримку еталонним теÑтом +- +- +- %1 ms +- milliseconds +- %1 мÑ%1 мÑ%1 мÑ%1 Ð¼Ñ +- +- +- %1 s +- seconds +- %1 Ñ%1 Ñ%1 Ñ%1 Ñ +- +- +- path to a custom local config file +- +- +- +- WARNING: You are using an old key file format which KeePassXC may +-stop supporting in the future. +- +-Please consider generating a new key file. +- +- +- +- Argon2%1 (%2 rounds, %3 KB) +- +- +- +- Argon2d (KDBX 4 – recommended) +- +- +- +- Argon2id (KDBX 4) +- +- +- +- TOTP +- ТОП +- +- +- Icon +- Значок +- +- +- Unsupported key file version: %1 +- +- +- +- Checksum mismatch! Key file may be corrupt. +- +- +- +- Unexpected key file data! Key file may be corrupt. +- +- +- +- +- QtIOCompressor +- +- Internal zlib error when compressing: +- Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° zlib під Ñ‡Ð°Ñ ÑтиÑненнÑ: +- +- +- Error writing to underlying device: +- Помилка запиÑу на оÑновний приÑтрій: +- +- +- Error opening underlying device: +- Помилка Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ð¾Ñновного приÑтрою: +- +- +- Error reading data from underlying device: +- Помилка Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð· оÑновного приÑтрою: +- +- +- Internal zlib error when decompressing: +- Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° zlib під Ñ‡Ð°Ñ Ñ€Ð¾Ð·Ð¿Ð°ÐºÑƒÐ²Ð°Ð½Ð½Ñ: +- +- +- +- QtIOCompressor::open +- +- The gzip format not supported in this version of zlib. +- Ð¦Ñ Ð²ÐµÑ€ÑÑ–Ñ zlib не підтримує формат gzip. +- +- +- Internal zlib error: +- Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° zlib: +- +- +- +- ReportsWidgetHealthcheck +- +- Also show entries that have been excluded from reports +- Також показувати запиÑи, Ñкі було виключено зі звітів +- +- +- Hover over reason to show additional details. Double-click entries to edit. +- Ðаведіть курÑор на причину, щоб переглÑнути додаткові відомоÑÑ‚Ñ–. Клацніть двічі по запиÑу Ð´Ð»Ñ Ð¹Ð¾Ð³Ð¾ редагуваннÑ. +- +- +- Bad +- Password quality +- Погана +- +- +- Bad — password must be changed +- Погана – пароль необхідно змінити +- +- +- Poor +- Password quality +- Погана +- +- +- Poor — password should be changed +- Слабка – пароль Ñлід змінити +- +- +- Weak +- Password quality +- Ðизька +- +- +- Weak — consider changing the password +- Слабка – розглÑньте можливіÑÑ‚ÑŒ змінити пароль +- +- +- (Excluded) +- (Виключено) +- +- +- This entry is being excluded from reports +- Цей Ð·Ð°Ð¿Ð¸Ñ Ð²Ð¸ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¾ зі звітів +- +- +- Please wait, health data is being calculated... +- Зачекайте, будь лаÑка, триває обчиÑÐ»ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… Ñтану... +- +- +- Congratulations, everything is healthy! +- Вітаємо, вÑе здорово! +- +- +- Title +- Заголовок +- +- +- Path +- ШлÑÑ… +- +- +- Score +- Оцінка +- +- +- Reason +- Причина +- +- +- Edit Entry... +- Змінити запиÑ... +- +- +- Exclude from reports +- Виключити зі звітів +- +- +- +- ReportsWidgetHibp +- +- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. +- УВÐГÐ: цей звіт вимагає надÑÐ¸Ð»Ð°Ð½Ð½Ñ Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ— до онлайн-ÑервіÑу Have I Been Pwned (https://haveibeenpwned.com). Якщо Ви продовжите, паролі з вашого Ñховища буде криптографічно гешовано, а перші п'ÑÑ‚ÑŒ Ñимволів отриманих гешів буде безпечно надіÑлано до цього ÑервіÑу. Ваше Ñховище залишаєтьÑÑ Ð² безпеці Ñ– не може бути відтвореним на оÑнові переданої інформації. Однак, кількіÑÑ‚ÑŒ паролів, Ñкі ви надÑилаєте, та вашу IP-адреÑу буде розкрито цьому ÑервіÑу. +- +- +- Perform Online Analysis +- Виконати онлайн-аналіз +- +- +- Also show entries that have been excluded from reports +- Також показувати запиÑи, Ñкі було виключено зі звітів +- +- +- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. +- Ð¦Ñ Ð·Ð±Ñ–Ñ€ÐºÐ° KeePassXC не має мережевих функцій. Мережа необхідна Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€ÑÐ½Ð½Ñ Ð½Ð°ÑвноÑÑ‚Ñ– паролів в базах даних Have I Been Pwned. +- +- +- Congratulations, no exposed passwords! +- Вітаємо, розкритих паролів немає! +- +- +- Title +- Заголовок +- +- +- Path +- ШлÑÑ… +- +- +- Password exposed… +- Пароль розкрито... +- +- +- (Excluded) +- (Виключено) +- +- +- This entry is being excluded from reports +- Цей Ð·Ð°Ð¿Ð¸Ñ Ð²Ð¸ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¾ зі звітів +- +- +- once +- одноразово +- +- +- up to 10 times +- до 10 разів +- +- +- up to 100 times +- до 100 разів +- +- +- up to 1000 times +- до 1000 разів +- +- +- up to 10,000 times +- до 10 000 разів +- +- +- up to 100,000 times +- до 100 000 разів +- +- +- up to a million times +- до мільйона разів +- +- +- millions of times +- мільйони разів +- +- +- Edit Entry... +- Змінити запиÑ... +- +- +- Exclude from reports +- Виключити зі звітів +- +- +- +- ReportsWidgetStatistics +- +- Hover over lines with error icons for further information. +- Ðаведіть мишкою на Ñ€Ñдки зі значком помилки Ð´Ð»Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ¾Ð²Ð¾Ñ— інформації. +- +- +- Name +- Ðазва +- +- +- Value +- Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ +- +- +- Please wait, database statistics are being calculated... +- Зачекайте, будь лаÑка, триває обчиÑÐ»ÐµÐ½Ð½Ñ ÑтатиÑтики Ñховища... +- +- +- Database name +- Ðазва Ñховища +- +- +- Description +- ÐžÐ¿Ð¸Ñ +- +- +- Location +- Ð Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ +- +- +- Last saved +- ОÑтаннє Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ +- +- +- Unsaved changes +- Ðезбережені зміни +- +- +- yes +- так +- +- +- no +- ні +- +- +- The database was modified, but the changes have not yet been saved to disk. +- Сховище було змінено, але поточні зміни ще не було запиÑано на диÑк. +- +- +- Number of groups +- КількіÑÑ‚ÑŒ груп +- +- +- Number of entries +- КількіÑÑ‚ÑŒ запиÑів +- +- +- Number of expired entries +- КількіÑÑ‚ÑŒ знечинених запиÑів +- +- +- The database contains entries that have expired. +- Сховище міÑтить знечинені запиÑи. +- +- +- Unique passwords +- Унікальні паролі +- +- +- Non-unique passwords +- Повторювані паролі +- +- +- More than 10% of passwords are reused. Use unique passwords when possible. +- Понад 10% паролів повторюютьÑÑ. ВикориÑтовуйте унікальні паролі завжди, коли це можливо. +- +- +- Maximum password reuse +- Ðайбільша кількіÑÑ‚ÑŒ повторень Ð¿Ð°Ñ€Ð¾Ð»Ñ +- +- +- Some passwords are used more than three times. Use unique passwords when possible. +- ДеÑкі паролі викориÑтано понад три рази. ВикориÑтовуйте унікальні паролі завжди, коли це можливо. +- +- +- Number of short passwords +- КількіÑÑ‚ÑŒ коротких паролів +- +- +- Recommended minimum password length is at least 8 characters. +- Рекомендована найменша довжина Ð¿Ð°Ñ€Ð¾Ð»Ñ â€” 8 Ñимволів. +- +- +- Number of weak passwords +- КількіÑÑ‚ÑŒ Ñлабких паролів +- +- +- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. +- Рекомендовано викориÑтовувати довгі, випадкові паролі з оцінкою «добре» або «відмінно». +- +- +- Entries excluded from reports +- ЗапиÑи, виключені зі звітів +- +- +- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. +- Виключати запиÑи зі звітів, наприклад, тому що в них Ñлабкий пароль, що не обов'Ñзково Ñ” проблемою, але ви повинні Ñтежити за ними. +- +- +- Average password length +- Ð¡ÐµÑ€ÐµÐ´Ð½Ñ Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ð¿Ð°Ñ€Ð¾Ð»Ñ +- +- +- %1 characters +- %1 Ñимволів +- +- +- Average password length is less than ten characters. Longer passwords provide more security. +- Ð¡ÐµÑ€ÐµÐ´Ð½Ñ Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð¼ÐµÐ½ÑˆÐ° 10 Ñимволів. Довші паролі покращують безпеку. +- +- +- +- SSHAgent +- +- Agent connection failed. +- Ðе вдалоÑÑ Ð·'єднатиÑÑ Ð· поÑередником. +- +- +- Agent protocol error. +- Помилка протоколу поÑередника. +- +- +- No agent running, cannot add identity. +- Ðемає запущеного поÑередника, неможливо додати ключ до в'Ñзки. +- +- +- No agent running, cannot remove identity. +- Ðемає запущеного поÑередника, неможливо видалити ключ із в'Ñзки. +- +- +- Agent refused this identity. Possible reasons include: +- ПоÑередник відхилив цей ключ. Ймовірні причини: +- +- +- The key has already been added. +- Цей ключ вже додано. +- +- +- Restricted lifetime is not supported by the agent (check options). +- ÐžÐ±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ñ‡Ð°Ñу не підтримуєтьÑÑ Ñ†Ð¸Ð¼ поÑередником (перевірте налаштуваннÑ). +- +- +- A confirmation request is not supported by the agent (check options). +- Запит Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð½Ðµ підтримуєтьÑÑ Ñ†Ð¸Ð¼ поÑередником (перевірте налаштуваннÑ). +- +- +- Key identity ownership conflict. Refusing to add. +- Конфлікт влаÑноÑÑ‚Ñ– ключа. Ð”Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ ÑкаÑовано. +- +- +- No agent running, cannot list identities. +- Ðемає запущеного поÑередника, неможливо відобразити перелік ключів. +- +- +- +- SearchHelpWidget +- +- Search Help +- Довідка з пошуку +- +- +- Search terms are as follows: [modifiers][field:]["]term["] +- Пошукові терміни мають такий формат: [модифікатори][поле:]["]термін["] +- +- +- Every search term must match (ie, logical AND) +- Ð’ÑÑ– пошукові терміни повинні Ñпівпадати (тобто, логічне І) +- +- +- Modifiers +- Модифікатори +- +- +- exclude term from results +- Виключити термін з результатів +- +- +- match term exactly +- лише точні збіги з терміном +- +- +- use regex in term +- увімкнути реґулÑрні вирази у терміні +- +- +- Fields +- ÐŸÐ¾Ð»Ñ +- +- +- Term Wildcards +- Байдужі Ñимволи у термінах +- +- +- match anything +- відповідає будь-Ñкому текÑтові +- +- +- match one +- відповідає одному Ñимволові +- +- +- logical OR +- логічне ÐБО +- +- +- Examples +- Приклади +- +- +- +- SearchWidget +- +- Search +- Пошук +- +- +- Limit search to selected group +- Обмежити пошук вибраною групою +- +- +- Search Help +- Довідка з пошуку +- +- +- Search (%1)... +- Search placeholder text, %1 is the keyboard shortcut +- Знайти (%1)... +- +- +- Case sensitive +- ВраховуєтьÑÑ Ñ€ÐµÐ³Ñ–ÑÑ‚Ñ€ +- +- +- +- SettingsWidgetFdoSecrets +- +- Options +- Параметри +- +- +- Enable KeepassXC Freedesktop.org Secret Service integration +- Увімкнути ÑÐ¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ KeePassXC з Таємною Ñлужбою Freedesktop.org +- +- +- General +- Загальні +- +- +- Show notification when credentials are requested +- Показувати повідомленнÑ, коли надходить запит на реєÑтраційні дані +- +- +- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> +- <html><head/><body><p>Якщо Ñмітник увімкнено Ð´Ð»Ñ Ñховища, запиÑи будуть переміщені у Ñмітник, а не видалені. Інакше Ñ—Ñ… буде видалено без додаткового ÑхваленнÑ.</p><p>Ви одержуватими Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ‚Ñ–Ð»ÑŒÐºÐ¸ Ñкщо Ñ–Ñнують поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° запиÑи, що Ви видалÑєте.</p></body></html> +- +- +- Exposed database groups: +- ВиÑтавлені групи Ñховища: +- +- +- Authorization +- Дозвіл +- +- +- These applications are currently connected: +- Такі заÑтоÑунки зараз Ñполучені: +- +- +- Don't confirm when entries are deleted by clients +- Ðе запитувати ÑхваленнÑ, коли запиÑи видалÑÑŽÑ‚ÑŒ інші клієнти +- +- +- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. +- +- +- +- <b>Warning:</b> +- <b>ПопередженнÑ:</b> +- +- +- Save current changes to activate the plugin and enable editing of this section. +- +- +- +- +- SettingsWidgetKeeShare +- +- Active +- Ðктивний +- +- +- Allow export +- Дозволити екÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ +- +- +- Allow import +- Дозволити Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ +- +- +- Own certificate +- ВлаÑний Ñертифікат +- +- +- Fingerprint: +- Відбиток: +- +- +- Certificate: +- Сертифікат: +- +- +- Signer +- ПідпиÑувач +- +- +- Key: +- Ключ: +- +- +- Generate +- Створити +- +- +- Import +- Ð†Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ +- +- +- Export +- ЕкÑпортувати +- +- +- Imported certificates +- Імпортовані Ñертифікати +- +- +- Trust +- Довірити +- +- +- Ask +- Запитати +- +- +- Untrust +- Ðе довірÑти +- +- +- Remove +- Видалити +- +- +- Path +- ШлÑÑ… +- +- +- Status +- Стан +- +- +- Fingerprint +- Відбиток +- +- +- Certificate +- Сертифікат +- +- +- Trusted +- Перевірений +- +- +- Untrusted +- Ðеперевірений +- +- +- Unknown +- Ðевідомий +- +- +- key.share +- Filetype for KeeShare key +- key.share +- +- +- KeeShare key file +- Файл ключа KeeShare +- +- +- All files +- Ð’ÑÑ– файли +- +- +- Select path +- Вибрати шлÑÑ… +- +- +- Exporting changed certificate +- ЕкÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð¼Ñ–Ð½ÐµÐ½Ð¾Ð³Ð¾ Ñертифікату +- +- +- The exported certificate is not the same as the one in use. Do you want to export the current certificate? +- ЕкÑпортований Ñертифікат не відповідає чинному Ñертифікатові. Бажаєте екÑпортувати чинний Ñертифікат? +- +- +- Signer: +- ПідпиÑувач: +- +- +- Allow KeeShare imports +- Дозволити Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ KeeShare +- +- +- Allow KeeShare exports +- Дозволити екÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ KeeShare +- +- +- Only show warnings and errors +- Показувати лише Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ñ– помилки +- +- +- Key +- Ключ +- +- +- Signer name field +- Поле імені підпиÑувача +- +- +- Generate new certificate +- Створити новий Ñертифікат +- +- +- Import existing certificate +- Імпортувати наÑвний Ñертифікат +- +- +- Export own certificate +- ЕкÑпортувати влаÑний Ñертифікат +- +- +- Known shares +- Відоме Ñпільне викориÑÑ‚Ð°Ð½Ð½Ñ +- +- +- Trust selected certificate +- ДовірÑти вибраним Ñертифікатам +- +- +- Ask whether to trust the selected certificate every time +- Запитувати кожного разу, чи довірÑти вибраному Ñертифікатові +- +- +- Untrust selected certificate +- СкаÑувати довіру вибраним Ñертифікатам +- +- +- Remove selected certificate +- Видалити вибраний Ñертифікат +- +- +- +- ShareExport +- +- Overwriting signed share container is not supported - export prevented +- ПерезапиÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ–Ð´Ð¿Ð¸Ñаної Ñпільної оболонки не підтримане – екÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´Ð²ÐµÑ€Ð½ÑƒÑ‚Ðµ +- +- +- Could not write export container (%1) +- Ðеможливо запиÑати екÑпортовану оболонку (%1) +- +- +- Could not embed signature: Could not open file to write (%1) +- Ðеможливо вклаÑти підпиÑ: неможливо відкрити файл Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу (%1) +- +- +- Could not embed signature: Could not write file (%1) +- Ðеможливо вклаÑти підпиÑ: неможливо запиÑати файл (%1) +- +- +- Could not embed database: Could not open file to write (%1) +- Ðеможливо вклаÑти Ñховище: неможливо відкрити файл Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу (%1) +- +- +- Could not embed database: Could not write file (%1) +- Ðеможливо вклаÑти Ñховище: неможливо запиÑати файл (%1) +- +- +- Overwriting unsigned share container is not supported - export prevented +- ПерезапиÑÑƒÐ²Ð°Ð½Ð½Ñ Ð½ÐµÐ¿Ñ–Ð´Ð¿Ð¸Ñаної Ñпільної оболонки не підтримане – екÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´Ð²ÐµÑ€Ð½ÑƒÑ‚Ðµ +- +- +- Could not write export container +- Ðеможливо запиÑати екÑпортовану оболонку +- +- +- Unexpected export error occurred +- Ðеочікувана помилка під Ñ‡Ð°Ñ ÐµÐºÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ +- +- +- +- ShareImport +- +- Import from container without signature +- Ð†Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð· оболонки без підпиÑу +- +- +- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? +- Ми не можемо перевірити джерело Ñпільної оболонки, тому що вона не підпиÑана. Ви дійÑно хочете імпортувати з %1? +- +- +- Import from container with certificate +- Ð†Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð· оболонки, що має Ñертифікат +- +- +- Do you want to trust %1 with the fingerprint of %2 from %3? +- Довірити %1, що має відбиток %2 з %3? {1 ?} {2 ?} +- +- +- Not this time +- Ðе зараз +- +- +- Never +- Ðіколи +- +- +- Always +- Завжди +- +- +- Just this time +- Тільки зараз +- +- +- Signed share container are not supported - import prevented +- ÐŸÑ–Ð´Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð¿Ñ–Ð´Ð¿Ð¸Ñаних Ñпільних оболонок відÑутнє - Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´Ð²ÐµÑ€Ð½ÑƒÑ‚Ðµ +- +- +- File is not readable +- Файл непридатний до Ð¾Ð¿Ñ€Ð°Ñ†ÑŽÐ²Ð°Ð½Ð½Ñ +- +- +- Invalid sharing container +- Ðепридатна Ñпільна оболонка +- +- +- Untrusted import prevented +- Ðеперевірене Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´Ð²ÐµÑ€Ð½ÑƒÑ‚Ðµ +- +- +- Successful signed import +- УÑпішне підпиÑане Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ +- +- +- Unsigned share container are not supported - import prevented +- ÐŸÑ–Ð´Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð½ÐµÐ¿Ñ–Ð´Ð¿Ð¸Ñаних Ñпільних оболонок відÑутнє – Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´Ð²ÐµÑ€Ð½ÑƒÑ‚Ðµ +- +- +- Successful unsigned import +- УÑпішне непідпиÑане Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ +- +- +- File does not exist +- Файл не Ñ–Ñнує +- +- +- Unknown share container type +- Ðевідомий тип Ñпільної оболонки +- +- +- +- ShareObserver +- +- Import from %1 failed (%2) +- Ð†Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð· %1 зазнало невдачі (%2) +- +- +- Import from %1 successful (%2) +- УÑпішно імпортовано з %1 (%2) +- +- +- Imported from %1 +- Імпортовано з %1 +- +- +- Export to %1 failed (%2) +- ЕкÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð· %1 зазнало невдачі (%2) +- +- +- Export to %1 successful (%2) +- УÑпішно екÑпортовано %1 (%2) +- +- +- Export to %1 +- ЕкÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾ %1 +- +- +- Multiple import source path to %1 in %2 +- ШлÑÑ… до %1 має декілька джерел імпорту в %2. +- +- +- Conflicting export target path %1 in %2 +- Суперечливий шлÑÑ… Ð´Ð»Ñ ÐµÐºÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ %1 до %2 +- +- +- +- TotpDialog +- +- Timed Password +- ТимчаÑовий пароль +- +- +- 000000 +- 000000 +- +- +- Copy +- Cкопіювати +- +- +- Expires in <b>%n</b> second(s) +- Втрачає чинніÑÑ‚ÑŒ через <b>%n</b> ÑекундуВтрачає чинніÑÑ‚ÑŒ через <b>%n</b> ÑекундиВтрачає чинніÑÑ‚ÑŒ через <b>%n</b> ÑекундВтрачає чинніÑÑ‚ÑŒ через <b>%n</b> Ñекунд +- +- +- +- TotpExportSettingsDialog +- +- Copy +- Cкопіювати +- +- +- NOTE: These TOTP settings are custom and may not work with other authenticators. +- TOTP QR code dialog warning +- УВÐГÐ: Таке Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¢ÐžÐŸ Ñ” неÑтандартним Ñ– може не працювати з іншими автентифікаторами. +- +- +- There was an error creating the QR code. +- Ðе вдалоÑÑ Ñтворити QR-код. +- +- +- Closing in %1 seconds. +- ЗакриєтьÑÑ Ñ‡ÐµÑ€ÐµÐ· %1 Ñекунд. +- +- +- +- TotpSetupDialog +- +- Setup TOTP +- ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¢ÐžÐŸ +- +- +- Default RFC 6238 token settings +- Типове Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð·Ð½Ð°Ñ‡ÐºÐ¸ RFC 6238 +- +- +- Steam token settings +- ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð·Ð½Ð°Ñ‡ÐºÐ¸ потока +- +- +- Use custom settings +- ВикориÑтовувати влаÑне Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ +- +- +- Custom Settings +- ВлаÑне Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ +- +- +- Time step: +- Крок зміни чаÑу: +- +- +- sec +- Seconds +- Ñек +- +- +- Code size: +- Розмір кодуваннÑ: +- +- +- Secret Key: +- Таємний ключ: +- +- +- Secret key must be in Base32 format +- Таємний ключ муÑить бути в форматі Base32 +- +- +- Secret key field +- Поле таємного ключа +- +- +- Algorithm: +- Ðлгоритм: +- +- +- Time step field +- Поле кроку чаÑу +- +- +- digits +- цифр +- +- +- Invalid TOTP Secret +- Ðепридатний таємний ТОП +- +- +- You have entered an invalid secret key. The key must be in Base32 format. +-Example: JBSWY3DPEHPK3PXP +- Ви ввели непридатний таємний ключ. Ключ муÑить бути в форматі Base32. Ðаприклад: JBSWY3DPEHPK3PXP +- +- +- Confirm Remove TOTP Settings +- Схвалити Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ–Ð² ТОП +- +- +- Are you sure you want to delete TOTP settings for this entry? +- Ви дійÑно хочете видалити параметри ТОП Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ запиÑу? +- +- +- +- URLEdit +- +- Invalid URL +- Ðепридатний URL +- +- +- +- UpdateCheckDialog +- +- Checking for updates +- ПеревірÑÐ½Ð½Ñ Ð½Ð°ÑвноÑÑ‚Ñ– оновлень +- +- +- Checking for updates... +- ПеревірÑÐ½Ð½Ñ Ð½Ð°ÑвноÑÑ‚Ñ– оновлень... +- +- +- Close +- Закрити +- +- +- Update Error! +- Помилка оновленнÑ! +- +- +- An error occurred in retrieving update information. +- Помилка під Ñ‡Ð°Ñ Ð²Ð¸Ð´Ð¾Ð±ÑƒÐ²Ð°Ð½Ð½Ñ Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ— щодо оновленнÑ. +- +- +- Please try again later. +- Будь лаÑка, Ñпробуйте ще раз пізніше. +- +- +- Software Update +- ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ +- +- +- A new version of KeePassXC is available! +- ДоÑтупна нова верÑÑ–Ñ KeePassXC! +- +- +- KeePassXC %1 is now available — you have %2. +- ДоÑтупна верÑÑ–Ñ %1 KeePassXC — Ваша верÑÑ–Ñ %2. +- +- +- Download it at keepassxc.org +- Завантажити Ñ—Ñ— з keepassxc.org +- +- +- You're up-to-date! +- Маєте найновішу верÑÑ–ÑŽ! +- +- +- KeePassXC %1 is currently the newest version available +- Ðаразі KeePassXC %1 Ñ” найновішую доÑтупною верÑією +- +- +- +- WelcomeWidget +- +- Start storing your passwords securely in a KeePassXC database +- Почніть надійно Ñ– безпечно зберігати ваші паролі у Ñховищі KeePassXC +- +- +- Create new database +- Створити нове Ñховище +- +- +- Open existing database +- Відкрити наÑвне Ñховище +- +- +- Import from KeePass 1 +- Імпортувати з KeePass 1 +- +- +- Import from CSV +- Імпортувати з CSV +- +- +- Recent databases +- Ðедавні Ñховища +- +- +- Welcome to KeePassXC %1 +- ЛаÑкаво проÑимо до KeePassXC %1 +- +- +- Import from 1Password +- Імпортувати з 1Password +- +- +- Open a recent database +- Відкрити недавнє Ñховище +- +- +- +- YubiKey +- +- %1 [%2] Configured Slot - %3 +- +- +- +- %1 [%2] Challenge Response - Slot %3 - %4 +- +- +- +- Press +- ÐатиÑнути +- +- +- Passive +- ПаÑивне +- +- +- %1 Invalid slot specified - %2 +- +- +- +- The YubiKey interface has not been initialized. +- +- +- +- Hardware key is currently in use. +- +- +- +- Could not find hardware key with serial number %1. Please plug it in to continue. +- +- +- +- Hardware key timed out waiting for user interaction. +- +- +- +- A USB error ocurred when accessing the hardware key: %1 +- +- +- +- Failed to complete a challenge-response, the specific error was: %1 +- Ðе вдалоÑÑ Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ñ‚Ð¸ виклик-відповідь, конкретна помилка: %1 +- +- +- +- YubiKeyEditWidget +- +- Refresh +- Оновити +- +- +- YubiKey Challenge-Response +- YubiKey Challenge-Response +- +- +- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- <p>Якщо у Ð²Ð°Ñ Ñ” <a href="https://www.yubico.com/">YubiKey</a>, ви можете викориÑтовувати його Ð´Ð»Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ¾Ð²Ð¾Ñ— безпеки.</p><p>Один із Ñлотів YubiKey має бути налаштованим Ñк <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- +- +- Refresh hardware tokens +- Оновити апаратні позначки +- +- +- Hardware key slot selection +- Вибір гнізда апаратного захиÑту +- +- +- Could not find any hardware keys! +- Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ апаратні ключі! +- +- +- Selected hardware key slot does not support challenge-response! +- Обрана комірка апаратного ключа не підтримує виклик-відповідь! +- +- +- Detecting hardware keys… +- ВиÑÐ²Ð»ÐµÐ½Ð½Ñ Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð¸Ñ… ключів... +- +- +- No hardware keys detected +- Ðе виÑвлено апаратних ключів +- +- +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_zh_CN.ts keepassxc-2.6.4-patched/share/translations/keepassx_zh_CN.ts +--- keepassxc-2.6.4-orig/share/translations/keepassx_zh_CN.ts 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/translations/keepassx_zh_CN.ts 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7892 +0,0 @@ +- +- +- AboutDialog +- +- About KeePassXC +- 关于 KeePassXC +- +- +- About +- 关于 +- +- +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- 在此报告错误:<a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- +- +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- KeePassXC 使用第 2 版 GNU 通用公共授æƒå议(GPL)分å‘,(您也å¯ä»¥æ ¹æ®éœ€è¦ï¼‰é€‰ç”¨ç¬¬ 3 版。 +- +- +- Contributors +- 贡献者 +- +- +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">在 GitHub 上查阅贡献信æ¯</a> +- +- +- Debug Info +- è°ƒè¯•ä¿¡æ¯ +- +- +- Include the following information whenever you report a bug: +- 报告任何错误时,请包å«ä»¥ä¸‹ä¿¡æ¯ï¼š +- +- +- Copy to clipboard +- å¤åˆ¶åˆ°å‰ªè´´æ¿ +- +- +- Project Maintainers: +- 项目维护者: +- +- +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- KeePassXC 团队特别感谢 debfx å¼€å‘了最åˆç‰ˆ KeePassX。 +- +- +- +- AgentSettingsWidget +- +- Use OpenSSH for Windows instead of Pageant +- 在 Windows 上使用 OpenSSH 而ä¸æ˜¯ Pageant +- +- +- Enable SSH Agent integration +- å¯ç”¨ SSH 代ç†é›†æˆ +- +- +- SSH_AUTH_SOCK value +- SSH_AUTH_SOCK 值 +- +- +- SSH_AUTH_SOCK override +- SSH_AUTH_SOCK é‡å†™ +- +- +- (empty) +- (空) +- +- +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- 没有å¯ç”¨çš„ SSH 代ç†å¥—接字。确ä¿çŽ¯å¢ƒå˜é‡ SSH_AUTH_SOCK 存在或已设置é‡å†™ã€‚ +- +- +- SSH Agent connection is working! +- SSH 代ç†è¿žæŽ¥å·¥ä½œæ­£å¸¸ï¼ +- +- +- +- ApplicationSettingsWidget +- +- Application Settings +- 应用程åºè®¾ç½® +- +- +- General +- 常规 +- +- +- Security +- 安全 +- +- +- Access error for config file %1 +- 访问é…置文件 %1 错误 +- +- +- Icon only +- 仅图标 +- +- +- Text only +- 仅文本 +- +- +- Text beside icon +- æ–‡æœ¬åœ¨å›¾æ ‡æ— +- +- +- Text under icon +- 文本在图标下 +- +- +- Follow style +- 系统风格 +- +- +- Reset Settings? +- é‡ç½®é€‰é¡¹ï¼Ÿ +- +- +- Are you sure you want to reset all general and security settings to default? +- 您确定è¦å°†æ‰€æœ‰å¸¸è§„和安全设置é‡ç½®ä¸ºé»˜è®¤å€¼å—? +- +- +- Monochrome (light) +- å•è‰²ï¼ˆæµ…色) +- +- +- Monochrome (dark) +- å•è‰²ï¼ˆæ·±è‰²ï¼‰ +- +- +- Colorful +- 彩色 +- +- +- You must restart the application to set the new language. Would you like to restart now? +- 您必须é‡æ–°å¯åŠ¨åº”用æ‰èƒ½åº”用新语言。è¦çŽ°åœ¨é‡æ–°å¯åŠ¨å—? +- +- +- +- ApplicationSettingsWidgetGeneral +- +- Basic Settings +- 基础设置 +- +- +- Startup +- å¯åŠ¨ +- +- +- Start only a single instance of KeePassXC +- åªå¯åŠ¨ä¸€ä¸ª KeePassXC 实例 +- +- +- Minimize window at application startup +- 在应用程åºå¯åŠ¨æ—¶æœ€å°åŒ–çª—å£ +- +- +- File Management +- æ–‡ä»¶ç®¡ç† +- +- +- Backup database file before saving +- ä¿å­˜å‰å¤‡ä»½æ•°æ®åº“文件 +- +- +- Automatically save after every change +- 修改åŽè‡ªåŠ¨ä¿å­˜ +- +- +- Automatically reload the database when modified externally +- 当外部修改时自动é‡æ–°åŠ è½½æ•°æ®åº“ +- +- +- Entry Management +- æ¡ç›®ç®¡ç† +- +- +- Use group icon on entry creation +- 新增æ¡ç›®æ—¶ä½¿ç”¨ç¾¤ç»„图标 +- +- +- Minimize instead of app exit +- 最å°åŒ–而ä¸æ˜¯é€€å‡ºåº”ç”¨ç¨‹åº +- +- +- Show a system tray icon +- 显示任务æ å›¾æ ‡ +- +- +- Hide window to system tray when minimized +- 将窗å£æœ€å°åŒ–è‡³ä»»åŠ¡æ  +- +- +- Auto-Type +- 自动输入 +- +- +- Use entry title to match windows for global Auto-Type +- 全局自动输入时使用æ¡ç›®æ ‡é¢˜åŒ¹é…çª—å£ +- +- +- Use entry URL to match windows for global Auto-Type +- 全局自动输入时使用æ¡ç›® URL 匹é…çª—å£ +- +- +- Always ask before performing Auto-Type +- 总在执行自动输入å‰è¯¢é—® +- +- +- ms +- Milliseconds +- 毫秒 +- +- +- Movable toolbar +- å¯ç§»åŠ¨å·¥å…·æ  +- +- +- Remember previously used databases +- è®°ä½ä»¥å‰ä½¿ç”¨çš„æ•°æ®åº“ +- +- +- Load previously open databases on startup +- å¯åŠ¨æ—¶åŠ è½½ä»¥å‰æ‰“开的数æ®åº“ +- +- +- Remember database key files and security dongles +- è®°ä½æ•°æ®åº“密钥文件和安全加密狗 +- +- +- Check for updates at application startup once per week +- æ¯å‘¨åœ¨åº”用程åºå¯åŠ¨æ—¶æ£€æŸ¥æ›´æ–° +- +- +- Include beta releases when checking for updates +- æ£€æŸ¥æ›´æ–°æ—¶åŒ…å« Beta 版本 +- +- +- Language: +- 语言: +- +- +- (restart program to activate) +- (é‡æ–°å¯åŠ¨ç¨‹åºä»¥æ¿€æ´»ï¼‰ +- +- +- Minimize window after unlocking database +- 解é”æ•°æ®åº“åŽæœ€å°åŒ–çª—å£ +- +- +- Minimize when opening a URL +- 打开 URL 时最å°åŒ– +- +- +- Hide window when copying to clipboard +- å¤åˆ¶åˆ°å‰ªè´´æ¿æ—¶éšè—çª—å£ +- +- +- Minimize +- 最å°åŒ– +- +- +- Drop to background +- 放到其他窗å£åº•éƒ¨ +- +- +- Favicon download timeout: +- 网站图标下载超时: +- +- +- Website icon download timeout in seconds +- 网站图标下载超时秒数 +- +- +- sec +- Seconds +- 秒 +- +- +- Toolbar button style +- 工具æ æŒ‰é’®æ ·å¼ +- +- +- Language selection +- 语言选择 +- +- +- Global auto-type shortcut +- 全局自动输入快æ·é”® +- +- +- Auto-type character typing delay milliseconds +- 自动输入字符键入延迟毫秒数 +- +- +- Auto-type start delay milliseconds +- 自动输入起始延迟毫秒数 +- +- +- Automatically launch KeePassXC at system startup +- 系统å¯åŠ¨æ—¶è‡ªåŠ¨å¯åŠ¨ KeePassXC +- +- +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- 安全地ä¿å­˜æ•°æ®åº“文件(如果与 Dropbox å‘生冲çªï¼Œè¯·ç¦ç”¨ï¼‰ +- +- +- User Interface +- ç”¨æˆ·ç•Œé¢ +- +- +- Toolbar button style: +- 工具æ æŒ‰é’®æ ·å¼ï¼š +- +- +- Use monospaced font for notes +- 备注使用等宽字体 +- +- +- Tray icon type: +- 托盘图标类型: +- +- +- Reset settings to default… +- 将设置é‡ç½®ä¸ºé»˜è®¤å€¼... +- +- +- Auto-Type typing delay: +- 自动输入延迟: +- +- +- Global Auto-Type shortcut: +- 全局自动输入快æ·é”®ï¼š +- +- +- Auto-Type start delay: +- 自动输入起始延迟: +- +- +- Automatically save when locking database +- é”定数æ®åº“时自动ä¿å­˜ +- +- +- Automatically save non-data changes when locking database +- é”定数æ®åº“时,自动ä¿å­˜éžæ•°æ®æ›´æ”¹ +- +- +- Tray icon type +- 状æ€æ å›¾æ ‡ç±»åž‹ +- +- +- +- ApplicationSettingsWidgetSecurity +- +- Timeouts +- 超时 +- +- +- Clear clipboard after +- 在多久åŽæ¸…ç©ºå‰ªè´´æ¿ +- +- +- sec +- Seconds +- 秒 +- +- +- Lock databases after inactivity of +- 在闲置多久åŽé”定数æ®åº“ +- +- +- min +- 分 +- +- +- Forget TouchID after inactivity of +- 在闲置多久åŽå¿˜è®° TouchID +- +- +- Convenience +- 便利性 +- +- +- Lock databases when session is locked or lid is closed +- 系统é”定或åˆä¸Šç›–å­æ—¶é”定数æ®åº“ +- +- +- Forget TouchID when session is locked or lid is closed +- 系统é”定或åˆä¸Šç›–å­æ—¶å¿˜è®° TouchID +- +- +- Lock databases after minimizing the window +- 在最å°åŒ–窗å£åŽé”定数æ®åº“ +- +- +- Re-lock previously locked database after performing Auto-Type +- 执行自动输入åŽé‡æ–°é”定之å‰é”定的数æ®åº“ +- +- +- Hide passwords in the entry preview panel +- 在æ¡ç›®é¢„览é¢æ¿ä¸­éšè—å¯†ç  +- +- +- Hide entry notes by default +- 默认情况下éšè—æ¡ç›®å¤‡æ³¨ +- +- +- Privacy +- éšç§ +- +- +- Use DuckDuckGo service to download website icons +- 使用 DuckDuckGo æ¥ä¸‹è½½ç½‘站图标 +- +- +- Clipboard clear seconds +- 剪贴æ¿æ¸…空秒数 +- +- +- Touch ID inactivity reset +- Touch ID 闲置é‡ç½®æ—¶é—´ +- +- +- Database lock timeout seconds +- æ•°æ®åº“超时é”定秒数 +- +- +- min +- Minutes +- 分 +- +- +- Clear search query after +- 在多久åŽæ¸…空æœç´¢æ¡† +- +- +- Require password repeat when it is visible +- 当密ç å¯è§æ—¶ï¼Œéœ€è¦é‡å¤å¯†ç  +- +- +- Hide passwords when editing them +- 编辑密ç æ—¶éšè—å¯†ç  +- +- +- Use placeholder for empty password fields +- 对空密ç å­—段使用å ä½ç¬¦ +- +- +- +- AutoType +- +- Couldn't find an entry that matches the window title: +- 无法找到符åˆçª—å£æ ‡é¢˜çš„æ¡ç›®ï¼š +- +- +- Auto-Type - KeePassXC +- 自动输入 - KeePassXC +- +- +- Auto-Type +- 自动输入 +- +- +- The Syntax of your Auto-Type statement is incorrect! +- 自动输入语å¥çš„语法ä¸æ­£ç¡®ï¼ +- +- +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- 此自动输入命令包å«å¾ˆé•¿çš„延迟。确定è¦ç»§ç»­å—? +- +- +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- 此自动输入命令包å«éžå¸¸æ…¢çš„按键æ“作。确定è¦ç»§ç»­å—? +- +- +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- 此自动输入命令包å«é¢‘ç¹é‡å¤çš„å‚数。确定è¦ç»§ç»­å—? +- +- +- Permission Required +- 需è¦æƒé™ +- +- +- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC 需è¦è¾…助功能æƒé™ä»¥å®žçŽ°æ¡ç›®è‡ªåŠ¨è¾“入。如果您已ç»æŽˆäºˆæ­¤æƒé™ï¼Œæ‚¨å¯èƒ½éœ€è¦é‡æ–°å¯åŠ¨ KeePassXC。 +- +- +- +- AutoTypeAssociationsModel +- +- Window +- çª—å£ +- +- +- Sequence +- 输入åºåˆ— +- +- +- Default sequence +- 默认åºåˆ— +- +- +- +- AutoTypeMatchModel +- +- Group +- 群组 +- +- +- Title +- 标题 +- +- +- Username +- 用户å +- +- +- Sequence +- 输入åºåˆ— +- +- +- +- AutoTypeMatchView +- +- Copy &username +- å¤åˆ¶ç”¨æˆ·å(&U) +- +- +- Copy &password +- å¤åˆ¶å¯†ç (&P) +- +- +- +- AutoTypePlatformMac +- +- Permission Required +- 需è¦æƒé™ +- +- +- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC 需è¦è¾…助功能和录制å±å¹•æƒé™ä»¥å®žçŽ°å…¨å±€è‡ªåŠ¨è¾“入。使用窗å£æ ‡é¢˜åŒ¹é…æ¡ç›®éœ€è¦å½•åˆ¶å±å¹•æƒé™ã€‚如果您已ç»æŽˆäºˆæ­¤æƒé™ï¼Œæ‚¨å¯èƒ½éœ€è¦é‡æ–°å¯åŠ¨ KeePassXC。 +- +- +- +- AutoTypeSelectDialog +- +- Auto-Type - KeePassXC +- 自动输入 - KeePassXC +- +- +- Select entry to Auto-Type: +- 选择自动输入的æ¡ç›®ï¼š +- +- +- Search... +- æœç´¢... +- +- +- +- BrowserAccessControlDialog +- +- KeePassXC - Browser Access Request +- KeePassXC - æµè§ˆå™¨è®¿é—®è¯·æ±‚ +- +- +- %1 is requesting access to the following entries: +- %1 请求访问以下æ¡ç›®ï¼š +- +- +- Remember access to checked entries +- è®°ä½å¯¹å·²é€‰æ‹©æ¡ç›®çš„è®¸å¯ +- +- +- Remember +- è®°ä½ +- +- +- Allow access to entries +- å…许访问æ¡ç›® +- +- +- Allow Selected +- å…许选定 +- +- +- Deny All +- æ‹’ç»å…¨éƒ¨ +- +- +- Disable for this site +- 对此站点ç¦ç”¨ +- +- +- +- BrowserEntrySaveDialog +- +- KeePassXC-Browser Save Entry +- KeePassXC-Browser ä¿å­˜æ¡ç›® +- +- +- Ok +- 确定 +- +- +- Cancel +- å–消 +- +- +- You have multiple databases open. +-Please select the correct database for saving credentials. +- 您打开了多个数æ®åº“ +-请选择正确的数æ®åº“以ä¿å­˜å‡­æ®ã€‚ +- +- +- +- BrowserService +- +- KeePassXC: New key association request +- KeePassXC:新的密钥关è”请求 +- +- +- Save and allow access +- ä¿å­˜å¹¶å…许访问 +- +- +- KeePassXC: Overwrite existing key? +- KeePassXC:覆盖现有的密钥å—? +- +- +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- 一个å为“%1â€çš„共享加密密钥已存在。 +-确认è¦è¦†ç›–它å—? +- +- +- KeePassXC: Update Entry +- KeePassXC:更新æ¡ç›® +- +- +- Do you want to update the information in %1 - %2? +- 您想更新 %1 - %2 中的信æ¯å—? +- +- +- Abort +- 中止 +- +- +- Converting attributes to custom data… +- 将属性转æ¢ä¸ºè‡ªå®šä¹‰æ•°æ®... +- +- +- KeePassXC: Converted KeePassHTTP attributes +- KeePassXC:已转æ¢ä¸º KeePassHTTP 属性 +- +- +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- å·²æˆåŠŸè½¬æ¢ %1 个æ¡ç›®çš„属性。 +-已移动 %2 个密钥到自定义数æ®ã€‚ +- +- +- Successfully moved %n keys to custom data. +- å·²æˆåŠŸç§»åŠ¨ %n 个密钥到自定义数æ®ã€‚ +- +- +- KeePassXC: No entry with KeePassHTTP attributes found! +- KeePassXC:找ä¸åˆ°å«æœ‰ KeePassHTTP 属性的æ¡ç›®ï¼ +- +- +- The active database does not contain an entry with KeePassHTTP attributes. +- 当å‰æ•°æ®åº“中ä¸å­˜åœ¨æœ‰ KeePassHTTP 属性的æ¡ç›®ã€‚ +- +- +- KeePassXC: Legacy browser integration settings detected +- KeePassXC:检测到旧版æµè§ˆå™¨é›†æˆè®¾ç½® +- +- +- KeePassXC: Create a new group +- KeePassXC:创建新群组 +- +- +- A request for creating a new group "%1" has been received. +-Do you want to create this group? +- +- 已收到创建新群组“%1â€çš„请求。 +-是å¦è¦åˆ›å»ºæ­¤ç¾¤ç»„? +- +- +- +- Your KeePassXC-Browser settings need to be moved into the database settings. +-This is necessary to maintain your current browser connections. +-Would you like to migrate your existing settings now? +- 您的 KeePassXC-Browser 设置需è¦ç§»åŠ¨åˆ°æ•°æ®åº“设置中。 +-这对于ä¿æŒå½“å‰æµè§ˆå™¨è¿žæŽ¥æ˜¯å¿…需的。 +-是å¦è¦ç«‹å³è¿ç§»çŽ°æœ‰è®¾ç½®ï¼Ÿ +- +- +- Don't show this warning again +- ä¸å†æ˜¾ç¤ºæ­¤è­¦å‘Š +- +- +- You have received an association request for the following database: +-%1 +- +-Give the connection a unique name or ID, for example: +-chrome-laptop. +- 您收到下列数æ®åº“çš„å…³è”请求: +-%1 +- +-请为此连接æ供唯一的å称或 ID,例如: +-Chrome 笔记本电脑 +- +- +- +- BrowserSettingsWidget +- +- Dialog +- 对è¯æ¡† +- +- +- This is required for accessing your databases with KeePassXC-Browser +- è¦ä½¿ç”¨ KeePassXC-Browser 访问您的数æ®åº“,这是必须的。 +- +- +- Enable browser integration +- å¯ç”¨æµè§ˆå™¨é›†æˆ +- +- +- General +- 常规 +- +- +- Browsers installed as snaps are currently not supported. +- 以 Snap 软件包形å¼å®‰è£…çš„æµè§ˆå™¨ç›®å‰ä¸å—支æŒã€‚ +- +- +- Enable integration for these browsers: +- 为这些æµè§ˆå™¨å¼€å¯é›†æˆï¼š +- +- +- Vivaldi +- Vivaldi +- +- +- &Edge +- &Edge +- +- +- Firefox +- Firefox +- +- +- Tor Browser +- Tor æµè§ˆå™¨ +- +- +- Brave +- Brave +- +- +- Google Chrome +- Google Chrome +- +- +- Chromium +- Chromium +- +- +- Show a notification when credentials are requested +- Credentials mean login data requested via browser extension +- 请求凭æ®æ—¶æ˜¾ç¤ºé€šçŸ¥ +- +- +- Request to unlock the database if it is locked +- 如果数æ®åº“å·²é”å®šï¼Œåˆ™è¯·æ±‚è§£é” +- +- +- Only entries with the same scheme (http://, https://, ...) are returned. +- åªè¿”回方案(http://ã€https:// 等) 相åŒçš„æ¡ç›®ã€‚ +- +- +- Match URL scheme (e.g., https://...) +- åŒ¹é… URL 方案(例如,https:// 等) +- +- +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- 对于特定的网å€ï¼Œä»…返回最佳匹é…,而ä¸æ˜¯ç¬¦åˆåŸŸå的所有æ¡ç›®ã€‚ +- +- +- Return only best-matching credentials +- 仅返回最佳匹é…çš„å‡­æ® +- +- +- Returns expired credentials. String [expired] is added to the title. +- å…许返回过期的凭æ®ã€‚其标题会注明 [已过期]。 +- +- +- Allow returning expired credentials +- å…è®¸è¿”å›žè¿‡æœŸçš„å‡­æ® +- +- +- All databases connected to the extension will return matching credentials. +- 所有连接到扩展的数æ®åº“都返回匹é…的凭æ®ã€‚ +- +- +- Search in all opened databases for matching credentials +- Credentials mean login data requested via browser extension +- 在所有打开的数æ®åº“中æœç´¢åŒ¹é…çš„å‡­æ® +- +- +- Sort matching credentials by title +- Credentials mean login data requested via browser extension +- 按标题对匹é…的凭æ®è¿›è¡ŒæŽ’åº +- +- +- Sort matching credentials by username +- Credentials mean login data requested via browser extension +- 按用户å对匹é…的凭æ®è¿›è¡ŒæŽ’åº +- +- +- Advanced +- 高级 +- +- +- Never ask before accessing credentials +- Credentials mean login data requested via browser extension +- 在访问凭æ®ä¹‹å‰æ°¸ä¸è¯¢é—® +- +- +- Never ask before updating credentials +- Credentials mean login data requested via browser extension +- 在更新凭æ®ä¹‹å‰æ°¸ä¸è¯¢é—® +- +- +- Do not ask permission for HTTP Basic Auth +- An extra HTTP Basic Auth setting +- ä¸è¯·æ±‚ HTTP Basic 认è¯çš„æƒé™ +- +- +- Automatically creating or updating string fields is not supported. +- ä¸æ”¯æŒè‡ªåŠ¨åˆ›å»ºæˆ–更新字符串字段。 +- +- +- Return advanced string fields which start with "KPH: " +- 返回以“KPH: â€å¼€å§‹çš„高级字符串字段 +- +- +- Don't display the popup suggesting migration of legacy KeePassHTTP settings. +- ä¸è¦æ˜¾ç¤ºæ—§ç‰ˆ KeePassHTTP 设置è¿ç§»å»ºè®®çª—å£ã€‚ +- +- +- Do not prompt for KeePassHTTP settings migration. +- ä¸è¦æ示è¿ç§» KeePassHTTP 设置。 +- +- +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- å¯åŠ¨æ—¶è‡ªåŠ¨å°† KeePassXC 或 keepassxc-proxy å¯æ‰§è¡Œæ–‡ä»¶è·¯å¾„更新到 Native Messaging 脚本。 +- +- +- Update native messaging manifest files at startup +- 在å¯åŠ¨æ—¶æ›´æ–° Native Messaging 清å•æ–‡ä»¶ +- +- +- Use a custom proxy location if you installed a proxy manually. +- 手动安装代ç†æ—¶ï¼Œè®¾ç½®è‡ªå®šä¹‰ä»£ç†çš„路径。 +- +- +- Use a custom proxy location: +- Meant is the proxy for KeePassXC-Browser +- 使用自定义代ç†ï¼š +- +- +- Custom proxy location field +- 自定义代ç†ä½ç½®å­—段 +- +- +- Browser for custom proxy file +- æµè§ˆè‡ªå®šä¹‰ä»£ç†æ–‡ä»¶ +- +- +- Browse... +- Button for opening file dialog +- æµè§ˆ... +- +- +- Use a custom browser configuration location: +- 使用自定义æµè§ˆå™¨é…置: +- +- +- Browser type: +- æµè§ˆå™¨ç±»åž‹ï¼š +- +- +- Toolbar button style +- 工具æ æŒ‰é’®æ ·å¼ +- +- +- Config Location: +- é…ç½®ä½ç½®ï¼š +- +- +- Custom browser location field +- 自定义æµè§ˆå™¨ä½ç½®å­—段 +- +- +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- +- +- Browse for custom browser path +- æµè§ˆè‡ªå®šä¹‰æµè§ˆå™¨è·¯å¾„ +- +- +- Custom extension ID: +- 自定义扩展 ID: +- +- +- Custom extension ID +- 自定义扩展 ID +- +- +- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 +- 由于 Snap 沙盒é™åˆ¶ï¼Œæ‚¨å¿…é¡»è¿è¡Œä¸€ä¸ªè„šæœ¬æ‰èƒ½å¯ç”¨æµè§ˆå™¨é›†æˆã€‚<br />您å¯ä»¥ä»Ž %1 获å–此脚本 +- +- +- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 +- è¦å¯ç”¨æµè§ˆå™¨é›†æˆï¼Œæ‚¨å¿…须安装 KeePassXC-Browser。<br />下载适用于 %1ã€%2 å’Œ %3 的版本。%4 +- +- +- Please see special instructions for browser extension use below +- 请å‚阅下é¢çš„æµè§ˆå™¨æ‰©å±•ä½¿ç”¨ç‰¹æ®Šè¯´æ˜Ž +- +- +- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. +- <b>错误:</b>找ä¸åˆ°è‡ªå®šä¹‰ä»£ç†ä½ç½®ï¼<br/>没有代ç†åº”用程åºï¼Œæµè§ˆå™¨é›†æˆå°†æ— æ³•ä½¿ç”¨ã€‚ +- +- +- <b>Warning:</b> The following options can be dangerous! +- <b>警告:</b>以下选项å¯èƒ½æœ‰å±é™©ï¼ +- +- +- Executable Files +- å¯æ‰§è¡Œæ–‡ä»¶ +- +- +- All Files +- 所有文件 +- +- +- Select custom proxy location +- 选择自定义代ç†ä½ç½® +- +- +- Select native messaging host folder location +- 选择 Native Messaging 主机文件夹ä½ç½® +- +- +- +- CloneDialog +- +- Clone Options +- å¤åˆ¶é€‰é¡¹ +- +- +- Append ' - Clone' to title +- 在标题åŽè¿½åŠ â€œ - 副本†+- +- +- Replace username and password with references +- 替æ¢ç”¨æˆ·å和密ç ä¸ºå¼•ç”¨ +- +- +- Copy history +- å¤åˆ¶åŽ†å² +- +- +- +- CsvImportWidget +- +- Import CSV fields +- 导入 CSV 字段 +- +- +- filename +- 文件å +- +- +- size, rows, columns +- 大å°ã€è¡Œã€åˆ— +- +- +- Encoding +- ç¼–ç  +- +- +- Codec +- 编解ç å™¨ +- +- +- Text is qualified by +- 文本é™å®šç¬¦ +- +- +- Fields are separated by +- 字段分隔符 +- +- +- Comments start with +- 注释å‰ç¼€ +- +- +- Consider '\' an escape character +- 将“\â€è§†ä¸ºè½¬ä¹‰å­—符 +- +- +- Preview +- 预览 +- +- +- Imported from CSV file +- 从 CSV 文件中导入 +- +- +- Original data: +- 原始数æ®ï¼š +- +- +- Error +- 错误 +- +- +- Error(s) detected in CSV file! +- 在 CSV æ–‡ä»¶ä¸­æ£€æµ‹åˆ°é”™è¯¯ï¼ +- +- +- [%n more message(s) skipped] +- [%n æ¡ä¿¡æ¯è¢«è·³è¿‡] +- +- +- CSV import: writer has errors: +-%1 +- CSV 导入:写入错误: +-%1 +- +- +- Text qualification +- 文本é™å®š +- +- +- Field separation +- 字段分隔 +- +- +- Number of header lines to discard +- 应该被忽略的表头行数 +- +- +- CSV import preview +- CSV 导入预览 +- +- +- Column Association +- åˆ—å…³è” +- +- +- Last Modified +- 修改时间 +- +- +- Password +- å¯†ç  +- +- +- Created +- 创建时间 +- +- +- Notes +- 备注 +- +- +- Title +- 标题 +- +- +- Group +- 群组 +- +- +- URL +- ç½‘å€ +- +- +- Username +- 用户å +- +- +- Header lines skipped +- 跳过表头行数 +- +- +- First line has field names +- 第一行作为字段å称 +- +- +- Not Present +- ä¸å­˜åœ¨ +- +- +- Column %1 +- 列 %1 +- +- +- TOTP +- TOTP +- +- +- Icon +- 图标 +- +- +- +- CsvParserModel +- +- %n column(s) +- %n 列 +- +- +- %1, %2, %3 +- file info: bytes, rows, columns +- %1,%2,%3 +- +- +- %n byte(s) +- %n 字节 +- +- +- %n row(s) +- %n è¡Œ +- +- +- +- Database +- +- File %1 does not exist. +- 文件 %1 ä¸å­˜åœ¨ã€‚ +- +- +- Unable to open file %1. +- 无法打开文件 %1。 +- +- +- Error while reading the database: %1 +- 读å–æ•°æ®åº“时出错:%1 +- +- +- File cannot be written as it is opened in read-only mode. +- 文件无法写入,因为它以åªè¯»æ¨¡å¼æ‰“开。 +- +- +- Key not transformed. This is a bug, please report it to the developers! +- 密钥未转æ¢ã€‚这是一个错误,请报告给开å‘è€…ï¼ +- +- +- %1 +-Backup database located at %2 +- %1 +-æ•°æ®åº“的备份路径是 %2 +- +- +- Could not save, database does not point to a valid file. +- 无法ä¿å­˜ï¼Œæ•°æ®åº“没有指å‘一个有效文件。 +- +- +- Could not save, database file is read-only. +- 无法ä¿å­˜ï¼Œæ•°æ®åº“文件为åªè¯»ã€‚ +- +- +- Database file has unmerged changes. +- æ•°æ®åº“存在未åˆå¹¶çš„改动。 +- +- +- Recycle Bin +- 回收站 +- +- +- Passwords +- Root group name +- å¯†ç  +- +- +- Database save is already in progress. +- æ•°æ®åº“å·²ç»åœ¨è¿›è¡Œä¿å­˜ã€‚ +- +- +- Could not save, database has not been initialized! +- 无法ä¿å­˜ï¼Œæ•°æ®åº“尚未åˆå§‹åŒ–ï¼ +- +- +- +- DatabaseOpenDialog +- +- Unlock Database - KeePassXC +- 解é”æ•°æ®åº“ - KeePassXC +- +- +- +- DatabaseOpenWidget +- +- Key File: +- 密钥文件: +- +- +- Refresh +- 刷新 +- +- +- Don't show this warning again +- ä¸å†æ˜¾ç¤ºæ­¤è­¦å‘Š +- +- +- All files +- 所有文件 +- +- +- Key files +- 密钥文件 +- +- +- Select key file +- 选择密钥文件 +- +- +- Failed to open key file: %1 +- 无法打开密钥文件:%1 +- +- +- Unlock KeePassXC Database +- è§£é” KeePassXC æ•°æ®åº“ +- +- +- Enter Password: +- 输入密ç ï¼š +- +- +- Password field +- 密ç å­—段 +- +- +- Hardware key slot selection +- 选择实体密钥的æ’槽 +- +- +- Browse for key file +- æµè§ˆå¯†é’¥æ–‡ä»¶ +- +- +- Browse... +- æµè§ˆ... +- +- +- Refresh hardware tokens +- 刷新实体令牌 +- +- +- Hardware Key: +- 实体密钥: +- +- +- Hardware key help +- 实体密钥帮助 +- +- +- TouchID for Quick Unlock +- TouchID å¿«é€Ÿè§£é” +- +- +- Unlock failed and no password given +- 解é”å¤±è´¥ï¼Œæœªæ”¶åˆ°å¯†ç  +- +- +- Unlocking the database failed and you did not enter a password. +-Do you want to retry with an "empty" password instead? +- +-To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. +- 解é”æ•°æ®åº“失败,您没有输入密ç ã€‚ +-您è¦ç”¨ç©ºå¯†ç å†å°è¯•è§£é”一次å—? +- +-为了é¿å…这样的错误,您必须å‰å¾€â€œæ•°æ®åº“设置/安全â€é¡µé¢é‡ç½®æ‚¨çš„密ç ã€‚ +- +- +- Retry with empty password +- 使用空密ç é‡è¯• +- +- +- Enter Additional Credentials (if any): +- 输入附加凭æ®ï¼ˆå¦‚果有): +- +- +- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +-<p>Click for more information...</p> +- <p>您å¯ä»¥ä½¿ç”¨åƒ <strong>YubiKey</strong> 或 <strong>OnlyKey</strong> è¿™ç§å¸¦æœ‰ HMAC-SHA1 é…ç½®æ’槽的硬件安全密钥。</p> +-<p>点击获å–更多信æ¯...</p> +- +- +- Key file help +- 密钥文件帮助 +- +- +- ? +- ? +- +- +- Cannot use database file as key file +- 无法使用数æ®åº“文件作为密钥 +- +- +- You cannot use your database file as a key file. +-If you do not have a key file, please leave the field empty. +- 您ä¸èƒ½ç”¨æ‚¨çš„æ•°æ®åº“作为密钥文件。 +-如果您没有密钥文件,请留空这个字段。 +- +- +- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> +- <p>除了密ç ä¹‹å¤–,您还å¯ä»¥ä½¿ç”¨æœºå¯†æ–‡ä»¶æ¥å¢žå¼ºæ•°æ®åº“的安全性。此文件å¯ä»¥åœ¨æ•°æ®åº“的安全设置中生æˆã€‚</p><p>è¿™<strong>ä¸æ˜¯</strong>您的 *.kdbx æ•°æ®åº“文件ï¼<br>如果没有密钥文件,请将此字段留空。</p><p>点击获å–更多信æ¯...</p> +- +- +- Key file to unlock the database +- 用于解é”æ•°æ®åº“的密钥文件 +- +- +- Please touch the button on your YubiKey! +- 请触摸您 YubiKey ä¸Šçš„æŒ‰é”®ï¼ +- +- +- Detecting hardware keys… +- 正在检测硬件密钥... +- +- +- No hardware keys detected +- 未检测到硬件密钥 +- +- +- Select hardware key… +- 选择硬件密钥... +- +- +- Old key file format +- æ—§ç‰ˆå¯†é’¥æ–‡ä»¶æ ¼å¼ +- +- +- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> +- 您使用的是旧版密钥文件格å¼ï¼ŒKeePassXC å¯èƒ½ä¼šåœ¨å°†æ¥åœæ­¢å¯¹å®ƒçš„支æŒã€‚<br><br>请考虑é‡æ–°ç”Ÿæˆä¸€ä¸ªæ–°å¯†é’¥æ–‡ä»¶ï¼Œå‰å¾€ï¼š<br><strong>æ•°æ®åº“ / æ•°æ®åº“安全 / 更改密钥文件</strong>。<br> +- +- +- +- DatabaseSettingWidgetMetaData +- +- Passwords +- å¯†ç  +- +- +- +- DatabaseSettingsDialog +- +- Advanced Settings +- 高级设置 +- +- +- General +- 常规 +- +- +- Security +- 安全 +- +- +- Encryption Settings +- 加密设置 +- +- +- Browser Integration +- æµè§ˆå™¨é›†æˆ +- +- +- Database Credentials +- æ•°æ®åº“å‡­æ® +- +- +- +- DatabaseSettingsWidgetBrowser +- +- KeePassXC-Browser settings +- KeePassXC-Browser 设置 +- +- +- Stored keys +- 存储的密钥 +- +- +- Remove +- 删除 +- +- +- Delete the selected key? +- 删除所选密钥? +- +- +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- 您确定è¦åˆ é™¤æ‰€é€‰çš„密钥å—? +-è¿™å¯èƒ½ä¼šå½±å“与æµè§ˆå™¨æ’件的连接。 +- +- +- Key +- 密钥 +- +- +- Value +- 值 +- +- +- Enable Browser Integration to access these settings. +- å¯ç”¨æµè§ˆå™¨é›†æˆä»¥è®¿é—®è¿™äº›è®¾ç½®ã€‚ +- +- +- Disconnect all browsers +- 断开与所有æµè§ˆå™¨çš„å…³è” +- +- +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- 您确定è¦æ–­å¼€ä¸Žæ‰€æœ‰æµè§ˆå™¨çš„å…³è”å—? +-è¿™å¯èƒ½ä¼šå½±å“与æµè§ˆå™¨æ’件的连接。 +- +- +- KeePassXC: No keys found +- KeePassXC:未找到密钥 +- +- +- No shared encryption keys found in KeePassXC settings. +- 未在 KeePassXC 设置中找到共享加密密钥。 +- +- +- KeePassXC: Removed keys from database +- KeePassXC:已从数æ®åº“中删除密钥 +- +- +- Successfully removed %n encryption key(s) from KeePassXC settings. +- å·²æˆåŠŸä»Ž KeePassXC 设置中删除了 %n 个加密密钥。 +- +- +- Forget all site-specific settings on entries +- å–消æ¡ç›®ä¸Šæ‰€æœ‰ç«™ç‚¹ç‰¹å®šè®¾ç½® +- +- +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- 您确定è¦å–消æ¯ä¸ªæ¡ç›®ä¸Šçš„所有站点特定设置å—? +-访问æ¡ç›®çš„æƒé™å°†è¢«æ’¤é”€ã€‚ +- +- +- Removing stored permissions… +- 正在删除存储的æƒé™... +- +- +- Abort +- 中止 +- +- +- KeePassXC: Removed permissions +- KeePassXC:已删除æƒé™ +- +- +- Successfully removed permissions from %n entry(s). +- å·²æˆåŠŸä»Ž %n 个æ¡ç›®ä¸­åˆ é™¤æƒé™ã€‚ +- +- +- KeePassXC: No entry with permissions found! +- KeePassXC:未找到有æƒé™çš„æ¡ç›®ï¼ +- +- +- The active database does not contain an entry with permissions. +- 当å‰æ•°æ®åº“中ä¸åŒ…å«å…·æœ‰æƒé™çš„æ¡ç›®ã€‚ +- +- +- Move KeePassHTTP attributes to custom data +- å°† KeePassHTTP å±žæ€§ç§»åŠ¨åˆ°è‡ªå®šä¹‰æ•°æ® +- +- +- Do you really want to move all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- 您确定è¦å°†æ‰€æœ‰æ—§ç‰ˆæµè§ˆå™¨é›†æˆæ•°æ®ç§»è‡³æœ€æ–°æ ‡å‡†å—? +-这对于ä¿æŒä¸Žæµè§ˆå™¨æ’件的兼容性是必è¦çš„。 +- +- +- Stored browser keys +- 存储的æµè§ˆå™¨å¯†é’¥ +- +- +- Remove selected key +- 移除选择的密钥 +- +- +- Move KeePassHTTP attributes to KeePassXC-Browser custom data +- å°† KeePassHTTP 属性移动到 KeePassXC-Browser è‡ªå®šä¹‰æ•°æ® +- +- +- Refresh database root group ID +- 刷新数æ®åº“根群组 ID +- +- +- Created +- 创建时间 +- +- +- Refresh database ID +- 刷新数æ®åº“ ID +- +- +- Do you really want refresh the database ID? +-This is only necessary if your database is a copy of another and the browser extension cannot connect. +- 是å¦è¦åˆ·æ–°æ•°æ®åº“ ID? +-åªæœ‰å½“您的数æ®åº“是å¦ä¸€ä¸ªæ•°æ®åº“的副本并且æµè§ˆå™¨æ‰©å±•æ— æ³•è¿žæŽ¥æ—¶ï¼Œæ‰æœ‰å¿…è¦è¿™æ ·åšã€‚ +- +- +- +- DatabaseSettingsWidgetDatabaseKey +- +- Add additional protection... +- 添加é¢å¤–ä¿æŠ¤...... +- +- +- No password set +- æ²¡æœ‰è®¾ç½®å¯†ç  +- +- +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- 警告ï¼æ‚¨å°šæœªè®¾ç½®å¯†ç ã€‚强烈建议ä¸è¦ä½¿ç”¨æ— å¯†ç çš„æ•°æ®åº“ï¼ +- +-您确定è¦åœ¨æ²¡æœ‰å¯†ç çš„情况下继续å—? +- +- +- Continue without password +- ä¸ä½¿ç”¨å¯†ç ç»§ç»­ +- +- +- No encryption key added +- 没有添加加密密钥 +- +- +- You must add at least one encryption key to secure your database! +- 您必须添加至少一个加密密钥,æ‰èƒ½ä¿æŠ¤æ‚¨çš„æ•°æ®åº“ï¼ +- +- +- Unknown error +- 未知错误 +- +- +- Failed to change database credentials +- 更改数æ®åº“凭æ®å¤±è´¥ +- +- +- +- DatabaseSettingsWidgetEncryption +- +- Encryption Algorithm: +- 加密算法: +- +- +- AES: 256 Bit (default) +- AES:256 ä½ ï¼ˆé»˜è®¤ï¼‰ +- +- +- Twofish: 256 Bit +- Twofish:256 ä½ +- +- +- Key Derivation Function: +- 密钥派生函数: +- +- +- Transform rounds: +- 转æ¢æ¬¡æ•°ï¼š +- +- +- Memory Usage: +- 内存å ç”¨ï¼š +- +- +- Parallelism: +- 并行计算: +- +- +- Decryption Time: +- 解密时间: +- +- +- ?? s +- ?? 秒 +- +- +- Change +- 更改 +- +- +- Higher values offer more protection, but opening the database will take longer. +- 较高的值å¯æ供更多ä¿æŠ¤ï¼Œä½†æ‰“开数æ®åº“需è¦æ›´é•¿æ—¶é—´ã€‚ +- +- +- Database format: +- æ•°æ®åº“æ ¼å¼ï¼š +- +- +- This is only important if you need to use your database with other programs. +- åªæœ‰åœ¨éœ€è¦å°†æ•°æ®åº“与其他程åºä¸€èµ·ä½¿ç”¨æ—¶ï¼Œè¿™ä¸€é¡¹æ‰é‡è¦ã€‚ +- +- +- KDBX 4.0 (recommended) +- KDBX 4.0(推è) +- +- +- KDBX 3.1 +- KDBX 3.1 +- +- +- unchanged +- Database decryption time is unchanged +- æ— å˜åŒ– +- +- +- Number of rounds too high +- Key transformation rounds +- 次数过高 +- +- +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or days (or even longer) to open! +- 您正在使用的密钥转æ¢æ¬¡æ•°å¯¹äºŽ Argon2 算法过高。 +- +-如果执æ„使用此次数,您的数æ®åº“å¯èƒ½éœ€è¦æ•°å°æ—¶æˆ–数天(甚至更长时间)æ‰èƒ½æ‰“å¼€ï¼ +- +- +- Understood, keep number +- 了解,ä»ä½¿ç”¨æ­¤æ•°é‡ +- +- +- Cancel +- å–消 +- +- +- Number of rounds too low +- Key transformation rounds +- 次数过低 +- +- +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database may be too easy to crack! +- 您正在使用的密钥转æ¢æ¬¡æ•°å¯¹äºŽ AES-KDF 算法过低。 +- +-如果执æ„使用此次数,您的数æ®åº“å¯èƒ½ä¼šç›¸å½“æ˜“äºŽç ´è§£ï¼ +- +- +- KDF unchanged +- KDF æ— å˜åŒ– +- +- +- Failed to transform key with new KDF parameters; KDF unchanged. +- 无法使用新的 KDF å‚数转æ¢å¯†é’¥ï¼›KDF æ— å˜åŒ–。 +- +- +- MiB +- Abbreviation for Mebibytes (KDF settings) +- MiB +- +- +- thread(s) +- Threads for parallel execution (KDF settings) +- 线程 +- +- +- Change existing decryption time +- 改å˜çŽ°åœ¨çš„解密时间 +- +- +- Decryption time in seconds +- 解密时间秒数 +- +- +- Database format +- æ•°æ®åº“æ ¼å¼ +- +- +- Encryption algorithm +- 加密算法 +- +- +- Key derivation function +- 密钥派生函数 +- +- +- Transform rounds +- 转æ¢æ¬¡æ•° +- +- +- Memory usage +- 内存å ç”¨ +- +- +- Parallelism +- 并行计算 +- +- +- ?? ms +- ?? 毫秒 +- +- +- ? s +- ? 秒 +- +- +- +- DatabaseSettingsWidgetFdoSecrets +- +- Exposed Entries +- 公开æ¡ç›® +- +- +- Don't expose this database +- ä¸å…¬å¼€æ­¤æ•°æ®åº“ +- +- +- Expose entries under this group: +- 公开此群组下的æ¡ç›®ï¼š +- +- +- Enable Secret Service to access these settings. +- å¯ç”¨ä¿å¯†æœåŠ¡ä»¥è®¿é—®è¿™äº›è®¾ç½®ã€‚ +- +- +- +- DatabaseSettingsWidgetGeneral +- +- Database Meta Data +- æ•°æ®åº“å…ƒæ•°æ® +- +- +- Database name: +- æ•°æ®åº“å称: +- +- +- Database description: +- æ•°æ®åº“æ述: +- +- +- Default username: +- 默认用户å: +- +- +- History Settings +- 历å²è®¾ç½® +- +- +- Max. history items: +- 最大历å²è®°å½•æ•°ï¼š +- +- +- Max. history size: +- 最大历å²è®°å½•å¤§å°ï¼š +- +- +- MiB +- MiB +- +- +- Use recycle bin +- å¯ç”¨å›žæ”¶ç«™ +- +- +- Additional Database Settings +- 其他数æ®åº“设置 +- +- +- Database name field +- æ•°æ®åº“å称字段 +- +- +- Database description field +- æ•°æ®åº“æ述字段 +- +- +- Default username field +- 默认用户å字段 +- +- +- Maximum number of history items per entry +- æ¯ä¸ªæ¡ç›®æœ€å¤šåŽ†å²è®°å½•æ•° +- +- +- Maximum size of history per entry +- æ¯ä¸ªé¡¹ç›®æœ€å¤§åŽ†å²è®°å½•å¤§å° +- +- +- Delete Recycle Bin +- 清空回收站 +- +- +- Do you want to delete the current recycle bin and all its contents? +-This action is not reversible. +- 确定清空回收站? +-这个动作无法逆转。 +- +- +- (old) +- (旧的) +- +- +- Enable compression (recommended) +- å¯ç”¨åŽ‹ç¼©ï¼ˆæŽ¨è) +- +- +- +- DatabaseSettingsWidgetKeeShare +- +- Sharing +- 共享 +- +- +- Breadcrumb +- ä½ç½® +- +- +- Type +- 类型 +- +- +- Path +- 路径 +- +- +- Last Signer +- 最åŽç­¾å者 +- +- +- Certificates +- è¯ä¹¦ +- +- +- > +- Breadcrumb separator +- > +- +- +- +- DatabaseSettingsWidgetMetaDataSimple +- +- Database Name: +- æ•°æ®åº“å称: +- +- +- Description: +- æ述: +- +- +- Database name field +- æ•°æ®åº“å称字段 +- +- +- Database description field +- æ•°æ®åº“æ述字段 +- +- +- +- DatabaseTabWidget +- +- KeePass 2 Database +- KeePass 2 æ•°æ®åº“ +- +- +- All files +- 所有文件 +- +- +- Open database +- 打开数æ®åº“ +- +- +- CSV file +- CSV 文件 +- +- +- Merge database +- åˆå¹¶æ•°æ®åº“ +- +- +- Open KeePass 1 database +- 打开 KeePass 1 æ•°æ®åº“ +- +- +- KeePass 1 database +- KeePass 1 æ•°æ®åº“ +- +- +- Export database to CSV file +- 导出数æ®åº“到 CSV 文件 +- +- +- Writing the CSV file failed. +- 写入 CSV 文件失败。 +- +- +- Database creation error +- æ•°æ®åº“创建错误 +- +- +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- 已创建的数æ®åº“没有密钥或 KDF,拒ç»ä¿å­˜ã€‚ +-这一定是一个错误,请报告给开å‘者。 +- +- +- Select CSV file +- 选择 CSV 文件 +- +- +- New Database +- 新建数æ®åº“ +- +- +- %1 [New Database] +- Database tab name modifier +- %1 [新建数æ®åº“] +- +- +- %1 [Locked] +- Database tab name modifier +- %1 [é”定] +- +- +- %1 [Read-only] +- Database tab name modifier +- %1 [åªè¯»] +- +- +- Failed to open %1. It either does not exist or is not accessible. +- 打开 %1 失败,它å¯èƒ½ä¸å­˜åœ¨æˆ–无法访问。 +- +- +- Export database to HTML file +- 导出数æ®åº“到 HTML 文件 +- +- +- HTML file +- HTML 文件 +- +- +- Writing the HTML file failed. +- 写入 HTML 文件失败 +- +- +- Export Confirmation +- 导出确认 +- +- +- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? +- 您å³å°†å¯¼å‡ºæ•°æ®åº“到未加密文件,这将会直接暴露您的密ç æˆ–æ•æ„Ÿä¿¡æ¯ï¼ç¡®å®šè¦ç»§ç»­å—? +- +- +- Open OPVault +- 打开 OPVault +- +- +- +- DatabaseWidget +- +- Searching... +- æœç´¢ä¸­... +- +- +- Do you really want to delete the entry "%1" for good? +- 您确定è¦åˆ é™¤â€œ%1â€æ¡ç›®å—? +- +- +- Do you really want to move entry "%1" to the recycle bin? +- 您确定è¦å°†æ¡ç›®â€œ%1â€ç§»åŠ¨åˆ°å›žæ”¶ç«™å—? +- +- +- Do you really want to move %n entry(s) to the recycle bin? +- 您确定è¦å°† %n 个æ¡ç›®ç§»åˆ°å›žæ”¶ç«™å—? +- +- +- Execute command? +- 执行命令? +- +- +- Do you really want to execute the following command?<br><br>%1<br> +- 您确定è¦æ‰§è¡Œä»¥ä¸‹å‘½ä»¤ï¼Ÿ<br><br>%1<br> +- +- +- Remember my choice +- è®°ä½æˆ‘的选择 +- +- +- Do you really want to delete the group "%1" for good? +- 您确定è¦æ°¸ä¹…删除“%1â€ç¾¤ç»„å—? +- +- +- No current database. +- 未打开任何数æ®åº“。 +- +- +- No source database, nothing to do. +- 没有æºæ•°æ®åº“,无å¯ç”¨æ“作。 +- +- +- Search Results (%1) +- æœç´¢ç»“果(%1) +- +- +- No Results +- 无结果 +- +- +- File has changed +- 文件已å˜æ›´ +- +- +- The database file has changed. Do you want to load the changes? +- æ•°æ®åº“文件已å‘生å˜åŒ–。是å¦é‡æ–°è½½å…¥ï¼Ÿ +- +- +- Merge Request +- åˆå¹¶è¯·æ±‚ +- +- +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- æ•°æ®åº“文件已å‘生å˜åŒ–,并且您有未ä¿å­˜çš„更改。 +-您想åˆå¹¶æ‚¨çš„修改å—? +- +- +- Empty recycle bin? +- 清空回收站? +- +- +- Are you sure you want to permanently delete everything from your recycle bin? +- 您确定è¦æ°¸ä¹…删除回收站中的所有内容? +- +- +- Do you really want to delete %n entry(s) for good? +- 您真的想删除 %n 个æ¡ç›®å—? +- +- +- Delete entry(s)? +- 删除æ¡ç›®ï¼Ÿ +- +- +- Move entry(s) to recycle bin? +- å°†æ¡ç›®ç§»åŠ¨åˆ°å›žæ”¶ç«™ï¼Ÿ +- +- +- Lock Database? +- é”定数æ®åº“? +- +- +- You are editing an entry. Discard changes and lock anyway? +- 您正在编辑一个æ¡ç›®ã€‚确定è¦æ”¾å¼ƒæ›´æ”¹å¹¶é”定å—? +- +- +- "%1" was modified. +-Save changes? +- “%1â€å·²è¢«ä¿®æ”¹ã€‚ +-ä¿å­˜æ›´æ”¹å—? +- +- +- Database was modified. +-Save changes? +- æ•°æ®åº“已被修改。 +-ä¿å­˜æ›´æ”¹å—? +- +- +- Save changes? +- ä¿å­˜æ›´æ”¹å—? +- +- +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- å°è¯•è‡ªåŠ¨é‡è½½æ—¶æ— æ³•æ‰“开新的数æ®åº“文件。 +-错误:%1 +- +- +- Disable safe saves? +- ç¦ç”¨å®‰å…¨ä¿å­˜ï¼Ÿ +- +- +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- KeePassXC 未能多次ä¿å­˜æ•°æ®åº“。这å¯èƒ½æ˜¯å› ä¸ºæ–‡ä»¶åŒæ­¥æœåŠ¡é”定了è¦ä¿å­˜çš„文件。 +-ç¦ç”¨å®‰å…¨ä¿å­˜å¹¶é‡è¯•ï¼Ÿ +- +- +- Passwords +- å¯†ç  +- +- +- Save database as +- å¦å­˜ä¸ºæ•°æ®åº“ +- +- +- KeePass 2 Database +- KeePass 2 æ•°æ®åº“ +- +- +- Replace references to entry? +- 替æ¢å¯¹æ¡ç›®çš„引用? +- +- +- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? +- æ¡ç›®â€œ%1â€å«æœ‰ %2 的引用。您è¦ç”¨å€¼è¦†ç›–引用ã€è·³è¿‡æ­¤é¡¹è¿˜æ˜¯ç›´æŽ¥åˆ é™¤å¼•ç”¨ï¼Ÿ +- +- +- Delete group +- 删除群组 +- +- +- Move group to recycle bin? +- è¦å°†ç¾¤ç»„移动到回收站å—? +- +- +- Do you really want to move the group "%1" to the recycle bin? +- 您确实è¦å°†ç»„“%1â€ç§»åŠ¨åˆ°å›žæ”¶ç«™å—? +- +- +- Successfully merged the database files. +- å·²æˆåŠŸåˆå¹¶æ•°æ®åº“文件。 +- +- +- Database was not modified by merge operation. +- åˆå¹¶æ“作未修改数æ®åº“。 +- +- +- Shared group... +- 共享群组... +- +- +- Writing the database failed: %1 +- 写入数æ®åº“失败:%1 +- +- +- This database is opened in read-only mode. Autosave is disabled. +- 这个数æ®åº“通过åªè¯»æ¨¡å¼æ‰“开,自动ä¿å­˜å·²å…³é—­ã€‚ +- +- +- Save database backup +- ä¿å­˜æ•°æ®åº“备份 +- +- +- Could not find database file: %1 +- 找ä¸åˆ°æ•°æ®åº“文件:%1 +- +- +- +- EditEntryWidget +- +- Entry +- æ¡ç›® +- +- +- Advanced +- 高级 +- +- +- Icon +- 图标 +- +- +- Auto-Type +- 自动输入 +- +- +- Properties +- 属性 +- +- +- History +- 历å²è®°å½• +- +- +- SSH Agent +- SSH ä»£ç† +- +- +- n/a +- æ—  +- +- +- (encrypted) +- (已加密) +- +- +- Select private key +- 选择ç§é’¥æ–‡ä»¶ +- +- +- Entry history +- æ¡ç›®åŽ†å² +- +- +- Add entry +- 添加æ¡ç›® +- +- +- Edit entry +- 编辑æ¡ç›® +- +- +- New attribute +- 新属性 +- +- +- Are you sure you want to remove this attribute? +- 您确定è¦åˆ é™¤è¿™ä¸ªå±žæ€§å—? +- +- +- Tomorrow +- 明天 +- +- +- %n week(s) +- %n 周 +- +- +- %n month(s) +- %n 月 +- +- +- Entry updated successfully. +- æ¡ç›®å·²æˆåŠŸæ›´æ–°ã€‚ +- +- +- New attribute %1 +- 新属性 %1 +- +- +- %n year(s) +- %n å¹´ +- +- +- Confirm Removal +- 确认删除 +- +- +- Browser Integration +- æµè§ˆå™¨é›†æˆ +- +- +- <empty URL> +- <空 URL> +- +- +- Are you sure you want to remove this URL? +- 您确定è¦åˆ é™¤è¿™ä¸ª URL? +- +- +- Reveal +- 显示 +- +- +- Hide +- éšè— +- +- +- Unsaved Changes +- 未ä¿å­˜çš„更改 +- +- +- Would you like to save changes to this entry? +- 您è¦ä¿å­˜å¯¹æ­¤æ¡ç›®çš„更改å—? +- +- +- [PROTECTED] Press Reveal to view or edit +- [å·²ä¿æŠ¤] 点击“显示â€ä»¥æŸ¥çœ‹æˆ–编辑 +- +- +- Invalid Entry +- 无效æ¡ç›® +- +- +- An external merge operation has invalidated this entry. +-Unfortunately, any changes made have been lost. +- 一次外部åˆå¹¶æ“作æŸå了此æ¡ç›®ã€‚ +-很é—憾,所有修改都已丢失。 +- +- +- +- EditEntryWidgetAdvanced +- +- Additional attributes +- 附加属性 +- +- +- Add +- 添加 +- +- +- Remove +- 删除 +- +- +- Edit Name +- 编辑å称 +- +- +- Protect +- ä¿æŠ¤ +- +- +- Reveal +- 显示 +- +- +- Attachments +- 附件 +- +- +- Foreground Color: +- å‰æ™¯è‰²ï¼š +- +- +- Background Color: +- 背景色: +- +- +- Attribute selection +- 属性选择 +- +- +- Attribute value +- 属性值 +- +- +- Add a new attribute +- 添加新属性 +- +- +- Remove selected attribute +- 删除所选的属性 +- +- +- Edit attribute name +- 编辑属性å称 +- +- +- Toggle attribute protection +- 属性ä¿æŠ¤å¼€å…³ +- +- +- Show a protected attribute +- 显示被ä¿æŠ¤çš„属性 +- +- +- Foreground color selection +- å‰æ™¯è‰²é€‰æ‹© +- +- +- Background color selection +- 背景色选择 +- +- +- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> +- <html><head/><body><p>如果选中,该æ¡ç›®å°†ä¸ä¼šæ˜¾ç¤ºåœ¨å¥åº·æ£€æŸ¥å’Œ HIBP 等报告中,å³ä½¿å®ƒä¸ç¬¦åˆè´¨é‡è¦æ±‚(例如密ç ç†µæˆ–é‡å¤ä½¿ç”¨ï¼‰ã€‚如果密ç è¶…出您的控制范围(例如密ç å¿…须为四ä½æ•°çš„ PIN),您å¯ä»¥å‹¾é€‰æ­¤é¡¹ï¼Œé˜²æ­¢å®ƒä½¿æŠ¥å‘Šè¿‡äºŽæ··ä¹±ã€‚</p></body></html> +- +- +- Exclude from database reports +- 从数æ®åº“报告中排除 +- +- +- +- EditEntryWidgetAutoType +- +- Enable Auto-Type for this entry +- 为此æ¡ç›®å¯ç”¨è‡ªåŠ¨è¾“å…¥ +- +- +- Window Associations +- 窗å£å…³è” +- +- +- + +- + +- +- +- - +- - +- +- +- Window title: +- 窗å£æ ‡é¢˜ï¼š +- +- +- Use a specific sequence for this association: +- 为此关è”使用特定åºåˆ—: +- +- +- Custom Auto-Type sequence +- 自定义自动输入åºåˆ— +- +- +- Open Auto-Type help webpage +- æ‰“å¼€è‡ªåŠ¨è¾“å…¥çš„å¸®åŠ©é¡µé¢ +- +- +- Existing window associations +- 已有的窗å£å…³è” +- +- +- Add new window association +- 添加一个新的窗å£å…³è” +- +- +- Remove selected window association +- 删除所选的窗å£å…³è” +- +- +- You can use an asterisk (*) to match everything +- 您å¯ä»¥ä½¿ç”¨é€šé…符星å·ï¼ˆ*)æ¥åŒ¹é…任何内容 +- +- +- Set the window association title +- 设定窗å£å…³è”标题 +- +- +- You can use an asterisk to match everything +- 您å¯ä»¥ä½¿ç”¨æ˜Ÿå·æ¥åŒ¹é…任何内容 +- +- +- Custom Auto-Type sequence for this window +- 自定义此窗å£çš„自动输入åºåˆ— +- +- +- Inherit default Auto-Type sequence from the group +- 从父群组继承默认的自动输入åºåˆ— +- +- +- Use custom Auto-Type sequence: +- 使用自定义自动输入åºåˆ—: +- +- +- +- EditEntryWidgetBrowser +- +- These settings affect to the entry's behaviour with the browser extension. +- 这些设置会影å“å¯ç”¨æµè§ˆå™¨æ‰©å±•æ—¶æ­¤æ¡ç›®çš„行为。 +- +- +- General +- 常规 +- +- +- Skip Auto-Submit for this entry +- 跳过此æ¡ç›®çš„自动æ交 +- +- +- Hide this entry from the browser extension +- 在æµè§ˆå™¨æ‰©å±•ä¸­éšè—æ­¤æ¡ç›® +- +- +- Additional URL's +- 附加 URL +- +- +- Add +- 添加 +- +- +- Remove +- 移除 +- +- +- Edit +- 编辑 +- +- +- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. +- 仅将此设置å‘é€åˆ°æµè§ˆå™¨çš„ HTTP 认è¯å¯¹è¯æ¡†ã€‚å¯ç”¨åŽï¼Œæ™®é€šç™»å½•è¡¨å•ä¸ä¼šå†æ˜¾ç¤ºæ­¤æ¡ç›®ä¾›é€‰æ‹©ã€‚ +- +- +- Use this entry only with HTTP Basic Auth +- æ­¤æ¡ç›®ä»…用于 HTTP Basic è®¤è¯ +- +- +- +- EditEntryWidgetHistory +- +- Show +- 显示 +- +- +- Restore +- 还原 +- +- +- Delete +- 删除 +- +- +- Delete all +- 全部删除 +- +- +- Entry history selection +- 选择æ¡ç›®åŽ†å²è®°å½• +- +- +- Show entry at selected history state +- 在选定的历å²çŠ¶æ€ä¸‹æ˜¾ç¤ºæ¡ç›® +- +- +- Restore entry to selected history state +- 还原到这æ¡åŽ†å²è®°å½• +- +- +- Delete selected history state +- 删除这æ¡åŽ†å²è®°å½• +- +- +- Delete all history +- 删除所有历å²è®°å½• +- +- +- +- EditEntryWidgetMain +- +- URL: +- URL: +- +- +- Password: +- 密ç ï¼š +- +- +- Title: +- 标题: +- +- +- Presets +- 预设 +- +- +- Toggle the checkbox to reveal the notes section. +- 勾选以显示备注部分。 +- +- +- Username: +- 用户å: +- +- +- Url field +- URL 字段 +- +- +- Download favicon for URL +- 从 URL 下载网站图标 +- +- +- Password field +- 密ç å­—段 +- +- +- Toggle notes visible +- 显示或éšè—备注 +- +- +- Expiration field +- 过期时间字段 +- +- +- Expiration Presets +- 过期时间预设 +- +- +- Expiration presets +- 过期时间预设 +- +- +- Notes field +- 备注字段 +- +- +- Title field +- 标题字段 +- +- +- Username field +- 用户å字段 +- +- +- Toggle expiration +- å¯ç”¨æˆ–ç¦ç”¨è¿‡æœŸ +- +- +- Notes: +- 备注: +- +- +- https://example.com +- https://example.com +- +- +- Expires: +- 过期时间: +- +- +- Edit Entry +- 编辑æ¡ç›® +- +- +- +- EditEntryWidgetSSHAgent +- +- Form +- è¡¨å• +- +- +- Remove key from agent after +- 一段时间åŽä»Žä»£ç†ä¸­åˆ é™¤å¯†é’¥ +- +- +- seconds +- 秒 +- +- +- Fingerprint +- 指纹 +- +- +- Remove key from agent when database is closed/locked +- æ•°æ®åº“关闭或é”定时,从代ç†ä¸­åˆ é™¤å¯†é’¥ +- +- +- Public key +- 公钥 +- +- +- Add key to agent when database is opened/unlocked +- 在打开或解é”æ•°æ®åº“时,å‘代ç†æ·»åŠ å¯†é’¥ +- +- +- Comment +- 注释 +- +- +- Decrypt +- 解密 +- +- +- n/a +- æ—  +- +- +- Copy to clipboard +- å¤åˆ¶åˆ°å‰ªè´´æ¿ +- +- +- Private key +- ç§é’¥ +- +- +- External file +- 外部文件 +- +- +- Browse... +- Button for opening file dialog +- æµè§ˆ... +- +- +- Attachment +- 附件 +- +- +- Add to agent +- æ·»åŠ åˆ°ä»£ç† +- +- +- Remove from agent +- 从代ç†ä¸­åˆ é™¤ +- +- +- Require user confirmation when this key is used +- 使用此密钥时请求用户确认 +- +- +- Remove key from agent after specified seconds +- 从代ç†ä¸­åˆ é™¤å¯†é’¥çš„等待秒数 +- +- +- Browser for key file +- æµè§ˆå¯†é’¥æ–‡ä»¶ +- +- +- External key file +- 外部密钥文件 +- +- +- Select attachment file +- 选择附件 +- +- +- +- EditGroupWidget +- +- Group +- 群组 +- +- +- Icon +- 图标 +- +- +- Properties +- 属性 +- +- +- Add group +- 添加群组 +- +- +- Edit group +- 编辑群组 +- +- +- Enable +- å¯ç”¨ +- +- +- Disable +- ç¦ç”¨ +- +- +- Inherit from parent group (%1) +- 继承自父群组(%1) +- +- +- Entry has unsaved changes +- æ¡ç›®æœ‰æœªä¿å­˜çš„更改 +- +- +- +- EditGroupWidgetKeeShare +- +- Type: +- 类型: +- +- +- Path: +- 路径: +- +- +- Password: +- 密ç ï¼š +- +- +- Inactive +- éžæ´»è·ƒ +- +- +- KeeShare unsigned container +- KeeShare 未签å容器 +- +- +- KeeShare signed container +- KeeShare ç­¾å容器 +- +- +- Select import source +- 选择导入æ¥æº +- +- +- Select export target +- 选择导出目标 +- +- +- Select import/export file +- 选择导入/导出文件 +- +- +- Clear +- 清空 +- +- +- Import +- 导入 +- +- +- Export +- 导出 +- +- +- Synchronize +- åŒæ­¥ +- +- +- Your KeePassXC version does not support sharing this container type. +-Supported extensions are: %1. +- 您的 KeePassXC 版本ä¸æ”¯æŒå…±äº«æ­¤å®¹å™¨ç±»åž‹ã€‚ +-支æŒçš„扩展包括:%1。 +- +- +- %1 is already being exported by this database. +- %1 å·²ç»ä»Žæ­¤æ•°æ®åº“中导出 +- +- +- %1 is already being imported by this database. +- %1 å·²ç»è¢«æ­¤æ•°æ®åº“导入 +- +- +- %1 is being imported and exported by different groups in this database. +- %1 已由此数æ®åº“中其他群组导入和导出。 +- +- +- KeeShare is currently disabled. You can enable import/export in the application settings. +- KeeShare is a proper noun +- KeeShare 未å¯ç”¨ï¼Œæ‚¨å¯ä»¥åœ¨åº”用设置中å¯ç”¨å¯¼å…¥/导出。 +- +- +- Database export is currently disabled by application settings. +- 应用设置目å‰å·²ç¦ç”¨æ•°æ®åº“导出。 +- +- +- Database import is currently disabled by application settings. +- 应用设置目å‰å·²ç¦ç”¨æ•°æ®åº“导入。 +- +- +- Sharing mode field +- 共享模å¼å­—段 +- +- +- Path to share file field +- 共享文件路径字段 +- +- +- Password field +- 密ç å­—段 +- +- +- Clear fields +- 清空字段 +- +- +- Browse for share file +- æµè§ˆå…±äº«æ–‡ä»¶ +- +- +- Browse... +- æµè§ˆ... +- +- +- +- EditGroupWidgetMain +- +- Name field +- å称字段 +- +- +- Notes field +- 备注字段 +- +- +- Toggle expiration +- å¯ç”¨æˆ–ç¦ç”¨è¿‡æœŸ +- +- +- Auto-Type toggle for this and sub groups +- 切æ¢å½“å‰å’Œæ‰€æœ‰å­ç¾¤ç»„的自动输入 +- +- +- Expiration field +- 过期时间字段 +- +- +- Search toggle for this and sub groups +- 切æ¢å½“å‰å’Œæ‰€æœ‰å­ç¾¤ç»„çš„æœç´¢ +- +- +- Default auto-type sequence field +- 默认自动输入åºåˆ—字段 +- +- +- Expires: +- 过期时间: +- +- +- Use default Auto-Type sequence of parent group +- 使用父群组的默认自动输入åºåˆ— +- +- +- Auto-Type: +- 自动输入: +- +- +- Search: +- æœç´¢ï¼š +- +- +- Notes: +- 备注: +- +- +- Name: +- å称: +- +- +- Set default Auto-Type sequence +- 设置默认的自动输入åºåˆ— +- +- +- Edit Group +- 编辑群组 +- +- +- +- EditWidgetIcons +- +- Add custom icon +- 添加自定义图标 +- +- +- Delete custom icon +- 删除自定义图标 +- +- +- Download favicon +- 下载网站图标 +- +- +- Unable to fetch favicon. +- 无法获å–网站图标。 +- +- +- Images +- 图片 +- +- +- All files +- 所有文件 +- +- +- Confirm Delete +- 确认删除 +- +- +- Select Image(s) +- 选择图片 +- +- +- Successfully loaded %1 of %n icon(s) +- å·²æˆåŠŸåŠ è½½ %1 / %n 个图标 +- +- +- No icons were loaded +- 未加载任何图标 +- +- +- %n icon(s) already exist in the database +- %n 个图标已存在于数æ®åº“中 +- +- +- The following icon(s) failed: +- 以下图标失败: +- +- +- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? +- 此图标由 %n 个æ¡ç›®ä½¿ç”¨ï¼Œå®ƒä»¬å°†è¢«æ›¿æ¢ä¸ºé»˜è®¤å›¾æ ‡ã€‚您确定è¦åˆ é™¤å—? +- +- +- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security +- 您å¯ä»¥åœ¨â€œå·¥å…· -> 设置 -> 安全â€ä¸­é€‰æ‹© DuckDuckGo 作为网站图标æ¥æº +- +- +- Download favicon for URL +- 从 URL 下载网站图标 +- +- +- Apply selected icon to subgroups and entries +- 将选择的图标应用于å­ç¾¤ç»„å’Œæ¡ç›® +- +- +- Also apply to child groups +- 也应用于å­ç¾¤ç»„ +- +- +- Also apply to child entries +- 也应用于å­æ¡ç›® +- +- +- Also apply to all children +- 也应用于所有å­ç¾¤ç»„å’Œæ¡ç›® +- +- +- Existing icon selected. +- 选择的图标已ç»å­˜åœ¨ã€‚ +- +- +- Use default icon +- 使用默认图标 +- +- +- Use custom icon +- 使用自定义图标 +- +- +- Apply icon to... +- 将图标应用于... +- +- +- Apply to this group only +- 仅应用于此群组 +- +- +- +- EditWidgetProperties +- +- Created: +- 创建时间: +- +- +- Modified: +- 修改时间: +- +- +- Accessed: +- 访问时间: +- +- +- Uuid: +- UUID: +- +- +- Plugin Data +- æ’ä»¶æ•°æ® +- +- +- Remove +- 删除 +- +- +- Delete plugin data? +- 是å¦åˆ é™¤æ’件数æ®ï¼Ÿ +- +- +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- 您真的想删除所选的æ’件数æ®å—? +-è¿™å¯èƒ½ä¼šå¯¼è‡´å—å½±å“çš„æ’件出现问题。 +- +- +- Key +- é”® +- +- +- Value +- 值 +- +- +- Datetime created +- 创建日期和时间 +- +- +- Datetime modified +- 修改日期和时间 +- +- +- Datetime accessed +- 访问日期和时间 +- +- +- Unique ID +- 唯一 ID +- +- +- Plugin data +- æ’ä»¶æ•°æ® +- +- +- Remove selected plugin data +- 删除所选的æ’ä»¶æ•°æ® +- +- +- +- Entry +- +- %1 - Clone +- %1 - 副本 +- +- +- +- EntryAttachmentsModel +- +- Name +- å称 +- +- +- Size +- å¤§å° +- +- +- +- EntryAttachmentsWidget +- +- Form +- è¡¨å• +- +- +- Add +- 添加 +- +- +- Remove +- 删除 +- +- +- Open +- 打开 +- +- +- Save +- ä¿å­˜ +- +- +- Select files +- 选择文件 +- +- +- Are you sure you want to remove %n attachment(s)? +- 您确定è¦åˆ é™¤ ï¼…n 个附件å—? +- +- +- Save attachments +- ä¿å­˜é™„件 +- +- +- Unable to create directory: +-%1 +- 无法创建目录: +-%1 +- +- +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- 您确定è¦ç”¨é™„件覆盖现有文件“%1â€å—? +- +- +- Confirm overwrite +- 确认覆盖 +- +- +- Unable to save attachments: +-%1 +- 无法ä¿å­˜é™„件: +-%1 +- +- +- Unable to open attachment: +-%1 +- 无法打开附件: +-%1 +- +- +- Unable to open attachments: +-%1 +- 无法打开附件: +-%1 +- +- +- Confirm remove +- 确认删除 +- +- +- Unable to open file(s): +-%1 +- 无法打开文件: +-%1 +- +- +- Attachments +- 附件 +- +- +- Add new attachment +- 添加新附件 +- +- +- Remove selected attachment +- 删除已选附件 +- +- +- Open selected attachment +- 打开已选附件 +- +- +- Save selected attachment to disk +- 将已选附件ä¿å­˜åˆ°ç£ç›˜ +- +- +- %1 is a big file (%2 MB). +-Your database may get very large and reduce performance. +- +-Are you sure to add this file? +- %1 是一个大文件(%2 MB)。 +-您的数æ®åº“å¯èƒ½ä¼šå˜å¾—éžå¸¸å¤§ï¼Œå¹¶é™ä½Žæ€§èƒ½ã€‚ +- +-您确定è¦æ·»åŠ æ­¤æ–‡ä»¶å—? +- +- +- Confirm Attachment +- 确认附件 +- +- +- +- EntryAttributesModel +- +- Name +- å称 +- +- +- +- EntryHistoryModel +- +- Last modified +- 修改时间 +- +- +- Title +- 标题 +- +- +- Username +- 用户å +- +- +- URL +- URL +- +- +- +- EntryModel +- +- Ref: +- Reference abbreviation +- 引用: +- +- +- Group +- 群组 +- +- +- Title +- 标题 +- +- +- Username +- 用户å +- +- +- URL +- URL +- +- +- Never +- ä»Žä¸ +- +- +- Password +- å¯†ç  +- +- +- Notes +- 备注 +- +- +- Expires +- 过期时间 +- +- +- Created +- 创建时间 +- +- +- Modified +- 修改时间 +- +- +- Accessed +- 访问时间 +- +- +- Attachments +- 附件 +- +- +- Size +- å¤§å° +- +- +- Group name +- 群组å称 +- +- +- Entry title +- æ¡ç›®æ ‡é¢˜ +- +- +- Entry notes +- æ¡ç›®å¤‡æ³¨ +- +- +- Entry expires at +- æ¡ç›®è¿‡æœŸäºŽ +- +- +- Creation date +- 创建日期 +- +- +- Last modification date +- 上次修改日期 +- +- +- Last access date +- 上次访问日期 +- +- +- Attached files +- 附加文件 +- +- +- Entry size +- æ¡ç›®å¤§å° +- +- +- Has attachments +- 有附件 +- +- +- Has TOTP one-time password +- 有 TOTP ä¸€æ¬¡æ€§å¯†ç  +- +- +- +- EntryPreviewWidget +- +- Close +- 关闭 +- +- +- General +- 常规 +- +- +- Username +- 用户å +- +- +- Password +- å¯†ç  +- +- +- Expiration +- 过期时间 +- +- +- URL +- URL +- +- +- Attributes +- 属性 +- +- +- Attachments +- 附件 +- +- +- Notes +- 备注 +- +- +- Autotype +- 自动输入 +- +- +- Window +- çª—å£ +- +- +- Sequence +- åºåˆ— +- +- +- Searching +- æœç´¢ +- +- +- Search +- æœç´¢ +- +- +- Clear +- 清除 +- +- +- Never +- ä»Žä¸ +- +- +- [PROTECTED] +- [å·²ä¿æŠ¤] +- +- +- Enabled +- å¯ç”¨ +- +- +- Disabled +- ç¦ç”¨ +- +- +- Share +- 共享 +- +- +- Display current TOTP value +- æ˜¾ç¤ºå½“å‰ TOTP å¯†ç  +- +- +- Advanced +- 高级 +- +- +- Default Sequence +- 默认åºåˆ— +- +- +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- attributes line +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- +- +- +- EntryURLModel +- +- Invalid URL +- 无效 URL +- +- +- +- EntryView +- +- Fit to window +- é€‚åº”çª—å£ +- +- +- Fit to contents +- 适应内容 +- +- +- Reset to defaults +- é‡ç½®ä¸ºé»˜è®¤å€¼ +- +- +- Has attachments +- Entry attachment icon toggle +- 有附件 +- +- +- Has TOTP +- Entry TOTP icon toggle +- 有 TOTP +- +- +- +- FdoSecrets::Item +- +- Entry "%1" from database "%2" was used by %3 +- æ•°æ®åº““%2â€çš„æ¡ç›®â€œ%1â€è¢« %3 使用 +- +- +- +- FdoSecrets::Service +- +- Failed to register DBus service at %1.<br/> +- 无法在 %1 注册 DBus æœåŠ¡ã€‚<br/> +- +- +- %n Entry(s) was used by %1 +- %1 is the name of an application +- %n 个æ¡ç›®è¢« %1 使用 +- +- +- +- FdoSecrets::SettingsDatabaseModel +- +- File Name +- 文件å +- +- +- Group +- 群组 +- +- +- Manage +- ç®¡ç† +- +- +- Unlock to show +- 解é”以显示 +- +- +- None +- æ—  +- +- +- +- FdoSecrets::SettingsSessionModel +- +- Application +- 应用 +- +- +- Manage +- ç®¡ç† +- +- +- +- FdoSecretsPlugin +- +- <b>Fdo Secret Service:</b> %1 +- <b>Fdo ä¿å¯†æœåŠ¡ï¼š</b>%1 +- +- +- Unknown +- Unknown PID +- 未知 +- +- +- Unknown +- Unknown executable path +- 未知 +- +- +- <i>PID: %1, Executable: %2</i> +- <i>PID: 1234, Executable: /path/to/exe</i> +- <i>PID:%1,å¯æ‰§è¡Œæ–‡ä»¶ï¼š%2</i> +- +- +- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. +- å¦ä¸€ä¸ªä¿å¯†æœåŠ¡æ­£åœ¨è¿è¡Œï¼ˆ%1)。<br/>在é‡æ–°å¯ç”¨ä¿å¯†æœåŠ¡é›†æˆä¹‹å‰ï¼Œè¯·åœæ­¢æˆ–删除它。 +- +- +- +- Group +- +- [empty] +- group has no children +- [空] +- +- +- +- HibpDownloader +- +- Online password validation failed +- 在线密ç éªŒè¯å¤±è´¥ +- +- +- +- IconDownloaderDialog +- +- Download Favicons +- 下载网站图标 +- +- +- Cancel +- å–消 +- +- +- Having trouble downloading icons? +-You can enable the DuckDuckGo website icon service in the security section of the application settings. +- 下载图标é‡åˆ°é—®é¢˜ï¼Ÿ +-您å¯ä»¥åœ¨åº”用设置的安全页é¢å¯ç”¨ DuckDuckGo 图标æœåŠ¡ã€‚ +- +- +- Close +- 关闭 +- +- +- URL +- URL +- +- +- Status +- çŠ¶æ€ +- +- +- Please wait, processing entry list... +- 请ç¨ç­‰ï¼Œæ­£åœ¨å¤„ç†æ¡ç›®åˆ—表... +- +- +- Downloading... +- 正在下载... +- +- +- Ok +- æˆåŠŸ +- +- +- Already Exists +- 已存在 +- +- +- Download Failed +- 下载失败 +- +- +- Downloading favicons (%1/%2)... +- 正在下载图标(%1/%2)... +- +- +- +- KMessageWidget +- +- &Close +- 关闭(&C) +- +- +- Close message +- å…³é—­æ¶ˆæ¯ +- +- +- +- Kdbx3Reader +- +- missing database headers +- 缺少数æ®åº“标头 +- +- +- Header doesn't match hash +- 标头与哈希ä¸åŒ¹é… +- +- +- Invalid header id size +- 无效的标头 ID å¤§å° +- +- +- Invalid header field length +- 无效的标头字段长度 +- +- +- Invalid header data length +- 无效的标头数æ®é•¿åº¦ +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- 输入的凭æ®æ— æ•ˆï¼Œè¯·é‡è¯•ã€‚ +-如果此现象é‡å¤å‘生,å¯èƒ½æ‚¨çš„æ•°æ®åº“文件已æŸå。 +- +- +- Unable to calculate database key +- 无法计算数æ®åº“密钥 +- +- +- Unable to issue challenge-response: %1 +- 无法å‘出质询å“应:%1 +- +- +- +- Kdbx3Writer +- +- Unable to issue challenge-response: %1 +- 无法å‘出质询å“应:%1 +- +- +- Unable to calculate database key +- 无法计算数æ®åº“密钥 +- +- +- +- Kdbx4Reader +- +- missing database headers +- 缺少数æ®åº“标头 +- +- +- Invalid header checksum size +- æ— æ•ˆçš„æ ‡å¤´æ ¡éªŒå’Œå¤§å° +- +- +- Header SHA256 mismatch +- 标头 SHA256 ä¸åŒ¹é… +- +- +- Unknown cipher +- 未知加密方法 +- +- +- Invalid header id size +- 无效的标头 ID å¤§å° +- +- +- Invalid header field length +- 无效的标头字段长度 +- +- +- Invalid header data length +- 无效的标头数æ®é•¿åº¦ +- +- +- Failed to open buffer for KDF parameters in header +- 为标头中 KDF å‚æ•°å¼€å¯ç¼“冲区失败 +- +- +- Unsupported key derivation function (KDF) or invalid parameters +- 密钥派生函数(KDF)ä¸è¢«æ”¯æŒæˆ–å‚数无效 +- +- +- Legacy header fields found in KDBX4 file. +- 在 KDBX4 文件中找到旧版标头字段。 +- +- +- Invalid inner header id size +- 无效的内部标头 ID å¤§å° +- +- +- Invalid inner header field length +- 无效的内部标头字段长度 +- +- +- Invalid inner header binary size +- 无效的内部标题二进制文件 +- +- +- Unsupported KeePass variant map version. +- Translation: variant map = data structure for storing meta data +- ä¸æ”¯æŒçš„ KeePass å˜é‡æ˜ å°„版本。 +- +- +- Invalid variant map entry name length +- Translation: variant map = data structure for storing meta data +- 无效的å˜é‡æ˜ å°„æ¡ç›®å称长度 +- +- +- Invalid variant map entry name data +- Translation: variant map = data structure for storing meta data +- 无效的å˜é‡æ˜ å°„æ¡ç›®åç§°æ•°æ® +- +- +- Invalid variant map entry value length +- Translation: variant map = data structure for storing meta data +- 无效的å˜é‡æ˜ å°„æ¡ç›®å€¼é•¿åº¦ +- +- +- Invalid variant map entry value data +- Translation comment: variant map = data structure for storing meta data +- 无效的å˜é‡æ˜ å°„æ¡ç›®å€¼æ•°æ® +- +- +- Invalid variant map Bool entry value length +- Translation: variant map = data structure for storing meta data +- 无效的å˜é‡æ˜ å°„ Bool æ¡ç›®å€¼é•¿åº¦ +- +- +- Invalid variant map Int32 entry value length +- Translation: variant map = data structure for storing meta data +- 无效的å˜é‡æ˜ å°„ Int32 æ¡ç›®å€¼é•¿åº¦ +- +- +- Invalid variant map UInt32 entry value length +- Translation: variant map = data structure for storing meta data +- 无效的å˜é‡æ˜ å°„ UInt32 æ¡ç›®å€¼é•¿åº¦ +- +- +- Invalid variant map Int64 entry value length +- Translation: variant map = data structure for storing meta data +- 无效的å˜é‡æ˜ å°„ Int64 æ¡ç›®å€¼é•¿åº¦ +- +- +- Invalid variant map UInt64 entry value length +- Translation: variant map = data structure for storing meta data +- 无效的å˜é‡æ˜ å°„ UInt64 æ¡ç›®å€¼é•¿åº¦ +- +- +- Invalid variant map entry type +- Translation: variant map = data structure for storing meta data +- 无效的å˜é‡æ˜ å°„æ¡ç›®ç±»åž‹ +- +- +- Invalid variant map field type size +- Translation: variant map = data structure for storing meta data +- 无效的å˜é‡æ˜ å°„å­—æ®µç±»åž‹å¤§å° +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- 输入的凭æ®æ— æ•ˆï¼Œè¯·é‡è¯•ã€‚ +-如果此现象é‡å¤å‘生,å¯èƒ½æ‚¨çš„æ•°æ®åº“文件已æŸå。 +- +- +- (HMAC mismatch) +- (HMAC ä¸åŒ¹é…) +- +- +- Unable to calculate database key: %1 +- 无法计算数æ®åº“密钥:%1 +- +- +- +- Kdbx4Writer +- +- Invalid symmetric cipher algorithm. +- 对称加密算法无效。 +- +- +- Invalid symmetric cipher IV size. +- IV = Initialization Vector for symmetric cipher +- 对称密ç åˆå§‹å‘é‡å¤§å°æ— æ•ˆã€‚ +- +- +- Failed to serialize KDF parameters variant map +- Translation comment: variant map = data structure for storing meta data +- åºåˆ—化 KDF å‚æ•°å˜é‡æ˜ å°„失败 +- +- +- Unable to calculate database key: %1 +- 无法计算数æ®åº“密钥:%1 +- +- +- +- KdbxReader +- +- Unsupported cipher +- ä¸æ”¯æŒçš„加密 +- +- +- Invalid compression flags length +- 无效的压缩标志长度 +- +- +- Unsupported compression algorithm +- ä¸æ”¯æŒçš„压缩算法 +- +- +- Invalid master seed size +- 无效的主ç§å­å¤§å° +- +- +- Invalid transform seed size +- 无效的转æ¢ç§å­å¤§å° +- +- +- Invalid transform rounds size +- 无效的转æ¢æ¬¡æ•° +- +- +- Invalid start bytes size +- æ— æ•ˆçš„èµ·å§‹å­—èŠ‚å¤§å° +- +- +- Invalid random stream id size +- 无效的éšæœºæµ ID å¤§å° +- +- +- Invalid inner random stream cipher +- 无效的内部éšæœºæµå¯†ç  +- +- +- Not a KeePass database. +- ä¸æ˜¯ä¸€ä¸ª KeePass æ•°æ®åº“。 +- +- +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- 当å‰é€‰æ‹©çš„文件是旧版本 KeePass 1 æ•°æ®åº“(.kdb)。 +-您å¯ä»¥ç‚¹å‡»â€œæ•°æ®åº“ > 导入 KeePass 1 æ•°æ®åº“...â€æ¥å¯¼å…¥ã€‚ +-这是ä¸å¯é€†çš„è¿ç§»ï¼Œå¯¼å…¥åŽçš„æ•°æ®åº“将无法由旧版本的 KeePassX 0.4 打开。 +- +- +- Unsupported KeePass 2 database version. +- ä¸æ”¯æŒçš„ KeePass 2 æ•°æ®åº“版本。 +- +- +- Invalid cipher uuid length: %1 (length=%2) +- æ— æ•ˆçš„å¯†ç  UUID 长度:%1(长度=%2) +- +- +- Unable to parse UUID: %1 +- æ— æ³•è§£æž UUID:%1 +- +- +- Failed to read database file. +- 读å–æ•°æ®åº“文件失败。 +- +- +- +- KdbxXmlReader +- +- XML parsing failure: %1 +- XML 解æžå¤±è´¥ï¼š%1 +- +- +- No root group +- 没有根群组 +- +- +- Missing icon uuid or data +- 缺少图标 UUID æˆ–æ•°æ® +- +- +- Missing custom data key or value +- 缺少自定义数æ®é”®æˆ–值 +- +- +- Multiple group elements +- 多个群组元素 +- +- +- Null group uuid +- 空的群组 UUID +- +- +- Invalid group icon number +- æ— æ•ˆçš„ç¾¤ç»„å›¾æ ‡ç¼–å· +- +- +- Invalid EnableAutoType value +- 无效的 EnableAutoType 值 +- +- +- Invalid EnableSearching value +- 无效的 EnableSearching 值 +- +- +- No group uuid found +- 未找到群组 UUID +- +- +- Null DeleteObject uuid +- 空的 DeleteObject UUID +- +- +- Missing DeletedObject uuid or time +- 缺少 DeletedObject UUID 或时间 +- +- +- Null entry uuid +- 空的æ¡ç›® UUID +- +- +- Invalid entry icon number +- 无效的æ¡ç›®å›¾æ ‡ç¼–å· +- +- +- History element in history entry +- 历å²å…ƒç´ åœ¨åŽ†å²æ¡ç›®ä¸­ +- +- +- No entry uuid found +- 未找到æ¡ç›® UUID +- +- +- History element with different uuid +- 历å²å…ƒç´ å…·æœ‰ä¸åŒçš„ UUID +- +- +- Duplicate custom attribute found +- 自定义属性é‡å¤ +- +- +- Entry string key or value missing +- 缺少æ¡ç›®å­—符串键或值 +- +- +- Entry binary key or value missing +- 缺少æ¡ç›®äºŒè¿›åˆ¶é”®æˆ–值 +- +- +- Auto-type association window or sequence missing +- 缺少自动输入关è”窗å£æˆ–åºåˆ— +- +- +- Invalid bool value +- 无效的布尔值 +- +- +- Invalid date time value +- 无效的日期时间值 +- +- +- Invalid color value +- 无效的颜色值 +- +- +- Invalid color rgb part +- 无效的颜色 RGB +- +- +- Invalid number value +- 无效的数字值 +- +- +- Invalid uuid value +- 无效的 UUID 值 +- +- +- Unable to decompress binary +- Translator meant is a binary data inside an entry +- æ— æ³•è§£åŽ‹äºŒè¿›åˆ¶æ•°æ® +- +- +- XML error: +-%1 +-Line %2, column %3 +- XML 错误: +-%1 +-第 %2 行,第 %3 列 +- +- +- +- KeeAgentSettings +- +- Invalid KeeAgent settings file structure. +- 无效的 KeeAgent 设置文件结构。 +- +- +- Private key is an attachment but no attachments provided. +- ç§é’¥åº”是附件,但未找到。 +- +- +- Private key is empty +- ç§é’¥ä¸ºç©º +- +- +- File too large to be a private key +- 文件太大,无法作为ç§é’¥ +- +- +- Failed to open private key +- 打开ç§é’¥å¤±è´¥ +- +- +- +- KeePass1OpenWidget +- +- Unable to open the database. +- 无法打开数æ®åº“。 +- +- +- Import KeePass1 Database +- 导入 KeePass 1 æ•°æ®åº“ +- +- +- +- KeePass1Reader +- +- Unable to read keyfile. +- 无法读å–密钥文件。 +- +- +- Not a KeePass database. +- ä¸æ˜¯ä¸€ä¸ª KeePass æ•°æ®åº“ +- +- +- Unsupported encryption algorithm. +- ä¸æ”¯æŒçš„加密算法。 +- +- +- Unsupported KeePass database version. +- ä¸æ”¯æŒçš„ KeePass æ•°æ®åº“版本。 +- +- +- Unable to read encryption IV +- IV = Initialization Vector for symmetric cipher +- 无法读å–加密åˆå§‹å‘é‡ +- +- +- Invalid number of groups +- æ— æ•ˆçš„ç¾¤ç»„æ•°é‡ +- +- +- Invalid number of entries +- 无效的æ¡ç›®æ•°é‡ +- +- +- Invalid content hash size +- æ— æ•ˆçš„å†…å®¹å“ˆå¸Œå¤§å° +- +- +- Invalid transform seed size +- 无效的转æ¢ç§å­å¤§å° +- +- +- Invalid number of transform rounds +- 无效的转æ¢æ¬¡æ•° +- +- +- Unable to construct group tree +- 无法创建群组树 +- +- +- Root +- 根群组 +- +- +- Key transformation failed +- 密钥转æ¢å¤±è´¥ +- +- +- Invalid group field type number +- æ— æ•ˆçš„ç¾¤ç»„å­—æ®µç±»åž‹ç¼–å· +- +- +- Invalid group field size +- æ— æ•ˆç¾¤ç»„å­—æ®µå¤§å° +- +- +- Read group field data doesn't match size +- 读å–群组字段数æ®ä¸Žå¤§å°ä¸åŒ¹é… +- +- +- Incorrect group id field size +- 群组 ID 字段大å°ä¸æ­£ç¡® +- +- +- Incorrect group creation time field size +- 群组创建时间字段大å°ä¸æ­£ç¡® +- +- +- Incorrect group modification time field size +- 群组修改时间字段大å°ä¸æ­£ç¡® +- +- +- Incorrect group access time field size +- 群组访问时间字段大å°ä¸æ­£ç¡® +- +- +- Incorrect group expiry time field size +- 群组过期时间字段大å°ä¸æ­£ç¡® +- +- +- Incorrect group icon field size +- 群组图标字段大å°ä¸æ­£ç¡® +- +- +- Incorrect group level field size +- 群组级别字段大å°ä¸æ­£ç¡® +- +- +- Invalid group field type +- 无效的群组字段类型 +- +- +- Missing group id or level +- 缺少群组 ID 或级别 +- +- +- Missing entry field type number +- 缺少æ¡ç›®å­—æ®µç±»åž‹ç¼–å· +- +- +- Invalid entry field size +- 无效的æ¡ç›®å­—æ®µå¤§å° +- +- +- Read entry field data doesn't match size +- 读å–æ¡ç›®å­—段数æ®ä¸Žå¤§å°ä¸åŒ¹é… +- +- +- Invalid entry uuid field size +- 无效的æ¡ç›® UUID å­—æ®µå¤§å° +- +- +- Invalid entry group id field size +- 无效的æ¡ç›®ç¾¤ç»„ ID å­—æ®µå¤§å° +- +- +- Invalid entry icon field size +- 无效的æ¡ç›®å›¾æ ‡å­—æ®µå¤§å° +- +- +- Invalid entry creation time field size +- 无效的æ¡ç›®åˆ›å»ºæ—¶é—´å­—æ®µå¤§å° +- +- +- Invalid entry modification time field size +- 无效的æ¡ç›®ä¿®æ”¹æ—¶é—´å­—æ®µå¤§å° +- +- +- Invalid entry expiry time field size +- 无效的æ¡ç›®è¿‡æœŸæ—¶é—´å­—æ®µå¤§å° +- +- +- Invalid entry field type +- 无效的æ¡ç›®å­—段类型 +- +- +- unable to seek to content position +- 无法寻å€å†…容ä½ç½® +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- 输入的凭æ®æ— æ•ˆï¼Œè¯·é‡è¯•ã€‚ +-如果此现象é‡å¤å‘生,å¯èƒ½æ‚¨çš„æ•°æ®åº“文件已æŸå。 +- +- +- Unable to calculate database key +- 无法计算数æ®åº“密钥 +- +- +- +- KeeShare +- +- Invalid sharing reference +- 无效的共享引用 +- +- +- Inactive share %1 +- éžæ´»è·ƒçš„共享 %1 +- +- +- Imported from %1 +- 已导入自 %1 +- +- +- Exported to %1 +- 已导出至 %1 +- +- +- Synchronized with %1 +- 已与 %1 åŒæ­¥ +- +- +- Import is disabled in settings +- 导入已在设置中ç¦ç”¨ +- +- +- Export is disabled in settings +- 导出已在设置中ç¦ç”¨ +- +- +- Inactive share +- éžæ´»è·ƒçš„共享 +- +- +- Imported from +- 已导入 +- +- +- Exported to +- 已导出 +- +- +- Synchronized with +- å·²åŒæ­¥ +- +- +- +- KeyComponentWidget +- +- Key Component +- 密钥组件 +- +- +- Key Component Description +- 密钥组件æè¿° +- +- +- Cancel +- å–消 +- +- +- Key Component set, click to change or remove +- 密钥组件已设置,点击以更改或删除 +- +- +- Add %1 +- Add a key component +- 添加 %1 +- +- +- Change %1 +- Change a key component +- 更改 %1 +- +- +- Remove %1 +- Remove a key component +- 删除 %1 +- +- +- %1 set, click to change or remove +- Change or remove a key component +- %1 已设置,点击以更改或删除 +- +- +- +- KeyFileEditWidget +- +- Generate +- ç”Ÿæˆ +- +- +- Key File +- 密钥文件 +- +- +- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> +- <p>您å¯ä»¥æ·»åŠ åŒ…å«éšæœºå­—节的密钥文件以获得é¢å¤–的安全性。</p><p>您必须将其ä¿å¯†ï¼Œè¯·å‹¿ä¸¢å¤±ï¼Œå¦åˆ™æ‚¨å°†æ— æ³•å†æ‰“开数æ®åº“ï¼</p> +- +- +- Error loading the key file '%1' +-Message: %2 +- 加载密钥文件“%1â€æ—¶å‡ºé”™ +-消æ¯ï¼š%2 +- +- +- Key files +- 密钥文件 +- +- +- All files +- 所有文件 +- +- +- Create Key File... +- 创建密钥文件... +- +- +- Error creating key file +- 创建密钥文件时出错 +- +- +- Unable to create key file: %1 +- 无法创建密钥文件:%1 +- +- +- Select a key file +- 选择密钥文件 +- +- +- Key file selection +- 选择密钥文件 +- +- +- Browse for key file +- æµè§ˆå¯†é’¥æ–‡ä»¶ +- +- +- Browse... +- æµè§ˆ... +- +- +- Generate a new key file +- 生æˆä¸€ä¸ªæ–°çš„密钥文件 +- +- +- Note: Do not use a file that may change as that will prevent you from unlocking your database! +- 注æ„:ä¸è¦ä½¿ç”¨ä¼šè¢«æ›´æ”¹çš„文件,文件被更改åŽå°†æ— æ³•è§£é”æ•°æ®åº“ï¼ +- +- +- Invalid Key File +- 无效的密钥文件 +- +- +- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. +- 您ä¸èƒ½ç”¨å½“å‰æ•°æ®åº“作为它本身的密钥文件。请选择ä¸åŒçš„文件或生æˆä¸€ä¸ªæ–°çš„密钥文件。 +- +- +- Suspicious Key File +- 有问题的密钥文件 +- +- +- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. +-Are you sure you want to continue with this file? +- 您选择的密钥文件似乎是个密ç æ•°æ®åº“文件。密钥文件必须是永远ä¸ä¼šè¢«æ›´æ”¹çš„文件,å¦åˆ™æ‚¨ä¼šæ°¸ä¹…失去对数æ®åº“的访问。 +-您确定è¦ç”¨è¿™ä¸ªæ–‡ä»¶ç»§ç»­å—? +- +- +- Old key file format +- æ—§ç‰ˆå¯†é’¥æ–‡ä»¶æ ¼å¼ +- +- +- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. +- 您选择的文件为旧版密钥格å¼ï¼ŒKeePassXC å¯èƒ½ä¼šåœ¨å°†æ¥åœæ­¢å¯¹å®ƒçš„支æŒã€‚<br><br>请考虑é‡æ–°ç”Ÿæˆä¸€ä¸ªæ–°å¯†é’¥æ–‡ä»¶ã€‚ +- +- +- +- MainWindow +- +- &Database +- æ•°æ®åº“(&D) +- +- +- &Help +- 帮助(&H) +- +- +- &Groups +- 群组(&G) +- +- +- &Tools +- 工具(&T) +- +- +- &Quit +- 退出(&Q) +- +- +- &About +- 关于(&A) +- +- +- Database settings +- æ•°æ®åº“设置 +- +- +- Copy username to clipboard +- å¤åˆ¶ç”¨æˆ·ååˆ°å‰ªè´´æ¿ +- +- +- Copy password to clipboard +- å¤åˆ¶å¯†ç åˆ°å‰ªè´´æ¿ +- +- +- &Settings +- 设置(&S) +- +- +- &Title +- 标题(&T) +- +- +- Copy title to clipboard +- å¤åˆ¶æ ‡é¢˜åˆ°å‰ªè´´æ¿ +- +- +- &URL +- &URL +- +- +- Copy URL to clipboard +- å¤åˆ¶ URL åˆ°å‰ªè´´æ¿ +- +- +- &Notes +- 备注(&N) +- +- +- Copy notes to clipboard +- å¤åˆ¶å¤‡æ³¨åˆ°å‰ªè´´æ¿ +- +- +- Copy &TOTP +- å¤åˆ¶ &TOTP +- +- +- E&mpty recycle bin +- 清空回收站(&M) +- +- +- Clear history +- æ¸…ç©ºåŽ†å² +- +- +- Access error for config file %1 +- 访问é…置文件出错 %1 +- +- +- Settings +- 设置 +- +- +- Toggle window +- 切æ¢çª—å£ +- +- +- Quit KeePassXC +- 退出 KeePassXC +- +- +- Please touch the button on your YubiKey! +- 请触摸您 YubiKey ä¸Šçš„æŒ‰é’®ï¼ +- +- +- WARNING: You are using an unstable build of KeePassXC! +-There is a high risk of corruption, maintain a backup of your databases. +-This version is not meant for production use. +- 警告:您正在使用的是éžç¨³å®šç‰ˆçš„ KeePassXCï¼ +-文件æŸå的风险较高,请妥善备份您的数æ®åº“。 +-此版本ä¸é€‚用于生产用途。 +- +- +- &Donate +- æ助(&D) +- +- +- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +-We recommend you use the AppImage available on our downloads page. +- 警告:您的 Qt 版本å¯èƒ½ä¼šå¯¼è‡´åœ¨ä½¿ç”¨å±å¹•é”®ç›˜æ—¶ KeePassXC å´©æºƒï¼ +-我们建议您使用我们的下载页é¢ä¸Šæ供的 AppImage。 +- +- +- &Import +- 导入(&I) +- +- +- Create a new database +- 创建一个新数æ®åº“ +- +- +- Merge from another KDBX database +- 从å¦ä¸€ä¸ª KDBX æ•°æ®åº“åˆå¹¶ +- +- +- Add a new entry +- 添加新æ¡ç›® +- +- +- View or edit entry +- 查看或编辑æ¡ç›® +- +- +- Add a new group +- 添加一个新群组 +- +- +- Perform &Auto-Type +- 执行自动输入(&A) +- +- +- Open &URL +- 打开 &URL +- +- +- Import a KeePass 1 database +- 导入 KeePass 1 æ•°æ®åº“ +- +- +- Import a CSV file +- 导入 CSV 文件 +- +- +- NOTE: You are using a pre-release version of KeePassXC! +-Expect some bugs and minor issues, this version is not meant for production use. +- 注æ„:您使用的是 KeePassXC 的预å‘å¸ƒç‰ˆæœ¬ï¼ +-å¯èƒ½ä¼šæœ‰ä¸€äº›é”™è¯¯å’Œå°é—®é¢˜ï¼Œæ­¤ç‰ˆæœ¬ä¸é€‚åˆåœ¨ç”Ÿäº§çŽ¯å¢ƒä¸­ä½¿ç”¨ã€‚ +- +- +- Check for updates on startup? +- 是å¦åœ¨å¯åŠ¨æ—¶æ£€æŸ¥æ›´æ–°ï¼Ÿ +- +- +- Would you like KeePassXC to check for updates on startup? +- 您是å¦å¸Œæœ› KeePassXC 在å¯åŠ¨æ—¶æ£€æŸ¥æ›´æ–°ï¼Ÿ +- +- +- You can always check for updates manually from the application menu. +- 您始终å¯ä»¥åœ¨åº”用程åºèœå•ä¸­æ‰‹åŠ¨æ£€æŸ¥æ›´æ–°ã€‚ +- +- +- &Export +- 导出(&E) +- +- +- Sort &A-Z +- 顺åºæŽ’列(&A) +- +- +- Sort &Z-A +- 逆åºæŽ’列(&Z) +- +- +- &Password Generator +- 密ç ç”Ÿæˆå™¨(&P) +- +- +- Import a 1Password Vault +- 导入 1Password ä¿é™©åº“ +- +- +- &Getting Started +- 入门指å—(&G) +- +- +- &User Guide +- 用户手册(&U) +- +- +- &Keyboard Shortcuts +- 键盘快æ·é”®(&K) +- +- +- &Recent Databases +- 最近的数æ®åº“(&R) +- +- +- &Entries +- æ¡ç›®(&E) +- +- +- Copy Att&ribute +- å¤åˆ¶å±žæ€§(&R) +- +- +- TOTP +- TOTP +- +- +- View +- 显示 +- +- +- Theme +- 主题 +- +- +- &Check for Updates +- 检查更新(&C) +- +- +- &Open Database… +- 打开数æ®åº“(&O)... +- +- +- &Save Database +- ä¿å­˜æ•°æ®åº“(&S) +- +- +- &Close Database +- 关闭数æ®åº“(&C) +- +- +- &New Database… +- 新建数æ®åº“(&N)... +- +- +- &Merge From Database… +- 从数æ®åº“åˆå¹¶(&M)... +- +- +- &New Entry… +- 新建æ¡ç›®(&N)... +- +- +- &Edit Entry… +- 编辑æ¡ç›®(&E)... +- +- +- &Delete Entry… +- 删除æ¡ç›®(&D)... +- +- +- &New Group… +- 新建群组(&N)... +- +- +- &Edit Group… +- 编辑群组(&E)... +- +- +- &Delete Group… +- 删除群组(&D)… +- +- +- Download All &Favicons… +- 下载所有网站图标(&F)... +- +- +- Sa&ve Database As… +- å¦å­˜ä¸ºæ•°æ®åº“(&V)... +- +- +- Database &Security… +- æ•°æ®åº“安全(&S)... +- +- +- Database &Reports... +- æ•°æ®åº“报告(&R)... +- +- +- Statistics, health check, etc. +- 统计ã€å¥åº·æ£€æŸ¥ç­‰ +- +- +- &Database Settings… +- æ•°æ®åº“设置(&D)... +- +- +- &Clone Entry… +- å¤åˆ¶æ¡ç›®(&C)... +- +- +- Move u&p +- 上移(&P) +- +- +- Move entry one step up +- å‘上移动æ¡ç›® +- +- +- Move do&wn +- 下移(&W) +- +- +- Move entry one step down +- å‘下移动æ¡ç›® +- +- +- Copy &Username +- å¤åˆ¶ç”¨æˆ·å(&U) +- +- +- Copy &Password +- å¤åˆ¶å¯†ç (&P) +- +- +- Download &Favicon +- 下载网站图标(&F) +- +- +- &Lock Databases +- é”定数æ®åº“(&L) +- +- +- &CSV File… +- &CSV 文件... +- +- +- &HTML File… +- &HTML 文件... +- +- +- KeePass 1 Database… +- KeePass 1 æ•°æ®åº“... +- +- +- 1Password Vault… +- 1Password ä¿é™©åº“... +- +- +- CSV File… +- CSV 文件... +- +- +- Show TOTP +- 显示 TOTP å¯†ç  +- +- +- Show QR Code +- æ˜¾ç¤ºäºŒç»´ç  +- +- +- Set up TOTP… +- 设置 TOTP... +- +- +- Report a &Bug +- 报告错误(&B) +- +- +- Open Getting Started Guide +- æ‰“å¼€å…¥é—¨æŒ‡å— +- +- +- &Online Help +- 在线帮助(&O) +- +- +- Go to online documentation +- å‰å¾€åœ¨çº¿æ–‡æ¡£ +- +- +- Open User Guide +- æ‰“å¼€ç”¨æˆ·æŒ‡å— +- +- +- Save Database Backup... +- ä¿å­˜æ•°æ®åº“备份... +- +- +- Add key to SSH Agent +- å‘ SSH 代ç†æ·»åŠ å¯†é’¥ +- +- +- Remove key from SSH Agent +- 从 SSH 代ç†ä¸­åˆ é™¤å¯†é’¥ +- +- +- Compact Mode +- ç´§å‡‘æ¨¡å¼ +- +- +- Automatic +- 自动 +- +- +- Light +- 亮色 +- +- +- Dark +- 暗色 +- +- +- Classic (Platform-native) +- ç»å…¸ï¼ˆå¹³å°åŽŸç”Ÿï¼‰ +- +- +- Show Toolbar +- æ˜¾ç¤ºå·¥å…·æ  +- +- +- Show Preview Panel +- 显示预览é¢æ¿ +- +- +- Don't show again for this version +- ä¸åœ¨æ­¤ç‰ˆæœ¬ä¸­æ˜¾ç¤º +- +- +- Restart Application? +- 是å¦é‡æ–°å¯åŠ¨åº”用? +- +- +- You must restart the application to apply this setting. Would you like to restart now? +- 您必须é‡æ–°å¯åŠ¨åº”用æ‰èƒ½åº”用此设置。è¦çŽ°åœ¨é‡æ–°å¯åŠ¨å—? +- +- +- Perform Auto-Type Sequence +- 执行自动输入åºåˆ— +- +- +- {USERNAME} +- {USERNAME} +- +- +- {USERNAME}{ENTER} +- {USERNAME}{ENTER} +- +- +- {PASSWORD} +- {PASSWORD} +- +- +- {PASSWORD}{ENTER} +- {PASSWORD}{ENTER} +- +- +- Always on Top +- æ€»åœ¨æœ€å‰ +- +- +- Hide Usernames +- éšè—用户å +- +- +- Hide Passwords +- éšè—å¯†ç  +- +- +- +- ManageDatabase +- +- Database settings +- æ•°æ®åº“设置 +- +- +- Edit database settings +- 修改数æ®åº“设置 +- +- +- Unlock database +- 解é”æ•°æ®åº“ +- +- +- Unlock database to show more information +- 解é”æ•°æ®åº“ä»¥æ˜¾ç¤ºæ›´å¤šä¿¡æ¯ +- +- +- Lock database +- é”定数æ®åº“ +- +- +- +- ManageSession +- +- Disconnect +- 断开连接 +- +- +- Disconnect this application +- 断开此应用的连接 +- +- +- +- Merger +- +- Creating missing %1 [%2] +- 创建缺少的 %1 [%2] +- +- +- Relocating %1 [%2] +- é‡æ–°å®šä½ %1 [%2] +- +- +- Overwriting %1 [%2] +- 覆盖 %1 [%2] +- +- +- older entry merged from database "%1" +- 从数æ®åº““%1â€åˆå¹¶çš„æ—§æ¡ç›® +- +- +- Adding backup for older target %1 [%2] +- 为旧目标 %1 [%2] 添加备份 +- +- +- Adding backup for older source %1 [%2] +- 为旧æ¥æº %1 [%2] 添加备份 +- +- +- Reapplying older target entry on top of newer source %1 [%2] +- 在新æ¥æº %1 [%2] 上é‡æ–°åº”用旧目标的æ¡ç›® +- +- +- Reapplying older source entry on top of newer target %1 [%2] +- 在新目标 %1 [%2] 上é‡æ–°åº”用旧æ¥æºçš„æ¡ç›® +- +- +- Synchronizing from newer source %1 [%2] +- 从新æ¥æº %1 [%2] åŒæ­¥ +- +- +- Synchronizing from older source %1 [%2] +- 从旧æ¥æº %1 [%2] åŒæ­¥ +- +- +- Deleting child %1 [%2] +- 删除å­é¡¹ %1 [%2] +- +- +- Deleting orphan %1 [%2] +- 删除孤立项 %1 [%2] +- +- +- Changed deleted objects +- 更改已删除的对象 +- +- +- Adding missing icon %1 +- 添加缺少的图标 %1 +- +- +- Removed custom data %1 [%2] +- åˆ é™¤è‡ªå®šä¹‰æ•°æ® %1 [%2] +- +- +- Adding custom data %1 [%2] +- æ·»åŠ è‡ªå®šä¹‰æ•°æ® %1 [%2] +- +- +- +- NewDatabaseWizard +- +- Create a new KeePassXC database... +- 创建一个新的 KeePassXC æ•°æ®åº“... +- +- +- Root +- Root group +- 根群组 +- +- +- +- NewDatabaseWizardPage +- +- WizardPage +- å‘导页 +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- 您å¯ä»¥åœ¨æ­¤å¤„调整数æ®åº“加密设置。ä¸ç”¨æ‹…心,您éšæ—¶å¯ä»¥åœ¨æ•°æ®åº“设置中更改它们。 +- +- +- Advanced Settings +- 高级设置 +- +- +- Simple Settings +- 简å•è®¾ç½® +- +- +- Encryption Settings +- 加密设置 +- +- +- +- NewDatabaseWizardPageDatabaseKey +- +- Database Credentials +- æ•°æ®åº“å‡­æ® +- +- +- A set of credentials known only to you that protects your database. +- 一组åªæœ‰æ‚¨çŸ¥é“的凭æ®ï¼Œç”¨äºŽä¿æŠ¤æ‚¨çš„æ•°æ®åº“。 +- +- +- +- NewDatabaseWizardPageEncryption +- +- Encryption Settings +- 加密设置 +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- 您å¯ä»¥åœ¨æ­¤å¤„调整数æ®åº“加密设置。 ä¸ç”¨æ‹…心,您éšæ—¶å¯ä»¥åœ¨æ•°æ®åº“设置中更改它们。 +- +- +- +- NewDatabaseWizardPageMetaData +- +- General Database Information +- æ•°æ®åº“åŸºæœ¬ä¿¡æ¯ +- +- +- Please fill in the display name and an optional description for your new database: +- 请填写新数æ®åº“çš„å称和å¯é€‰çš„说明: +- +- +- +- NixUtils +- +- Password Manager +- 密ç ç®¡ç†å™¨ +- +- +- +- OpData01 +- +- Invalid OpData01, does not contain header +- 无效的 OpData01,ä¸åŒ…å«æ•°æ®æ ‡å¤´ +- +- +- Unable to read all IV bytes, wanted 16 but got %1 +- 无法读å–全部åˆå§‹å‘é‡å­—节,预期 16 字节但仅读å–到 %1 字节 +- +- +- Unable to init cipher for opdata01: %1 +- 无法为 OpData01 åˆå§‹åŒ–加密:%1 +- +- +- Unable to read all HMAC signature bytes +- 无法读å–所有 HMAC ç­¾å字节 +- +- +- Malformed OpData01 due to a failed HMAC +- 由于 HMAC 失败,OpData01 读å–异常 +- +- +- Unable to process clearText in place +- 无法就地处ç†æ˜Žæ–‡ +- +- +- Expected %1 bytes of clear-text, found %2 +- 预期长度 %1 字节的明文数æ®ï¼Œä»…得到 %2 字节 +- +- +- +- OpVaultOpenWidget +- +- Read Database did not produce an instance +-%1 +- 读å–æ•°æ®åº“未生æˆå®žä¾‹ +-%1 +- +- +- +- OpVaultReader +- +- Directory .opvault must exist +- 目录 .opvault 必须存在 +- +- +- Directory .opvault must be readable +- 目录 .opvault å¿…é¡»å¯è¯» +- +- +- Directory .opvault/default must exist +- 目录 .opvault/default 必须存在 +- +- +- Directory .opvault/default must be readable +- 目录 .opvault/default 必须存å¯è¯» +- +- +- Unable to decode masterKey: %1 +- 无法解ç ä¸»å¯†é’¥ï¼š%1 +- +- +- Unable to derive master key: %1 +- 无法派生主密钥:%1 +- +- +- +- OpenSSHKey +- +- Invalid key file, expecting an OpenSSH key +- æ— æ•ˆçš„å¯†é’¥æ–‡ä»¶ï¼Œéœ€è¦ OpenSSH 密钥 +- +- +- PEM boundary mismatch +- PEM 边界ä¸åŒ¹é… +- +- +- Base64 decoding failed +- Base64 解ç å¤±è´¥ +- +- +- Key file way too small. +- 密钥文件太å°ã€‚ +- +- +- Key file magic header id invalid +- 密钥文件魔术标头 ID 无效 +- +- +- Found zero keys +- 未找到密钥 +- +- +- Failed to read public key. +- 读å–公钥失败。 +- +- +- Corrupted key file, reading private key failed +- æŸå的密钥文件,读å–ç§é’¥å¤±è´¥ +- +- +- No private key payload to decrypt +- 没有ç§é’¥ Payload å¯è§£å¯† +- +- +- Trying to run KDF without cipher +- å°è¯•è¿è¡Œæ— åŠ å¯†çš„ KDF +- +- +- Passphrase is required to decrypt this key +- 需è¦å£ä»¤è§£å¯†æ­¤å¯†é’¥ +- +- +- Key derivation failed, key file corrupted? +- 密钥派生失败,å¯èƒ½å¯†é’¥æ–‡ä»¶å·²æŸå? +- +- +- Decryption failed, wrong passphrase? +- 解密失败,å¯èƒ½å£ä»¤é”™è¯¯ï¼Ÿ +- +- +- Unexpected EOF while reading public key +- 读å–公钥时é‡åˆ°æ„外的 EOF +- +- +- Unexpected EOF while reading private key +- 读å–ç§é’¥æ—¶é‡åˆ°æ„外的 EOF +- +- +- Can't write public key as it is empty +- 无法写入一个空的公钥 +- +- +- Unexpected EOF when writing public key +- 写入公钥时é‡åˆ°æ„外的 EOF +- +- +- Can't write private key as it is empty +- 无法写入一个空的ç§é’¥ +- +- +- Unexpected EOF when writing private key +- 写入ç§é’¥æ—¶é‡åˆ°æ„外的 EOF +- +- +- Unsupported key type: %1 +- ä¸æ”¯æŒçš„密钥类型:%1 +- +- +- Unknown cipher: %1 +- 未知加密:%1 +- +- +- Cipher IV is too short for MD5 kdf +- 密ç åˆå§‹å‘é‡å¯¹äºŽ MD5 KDF 过短 +- +- +- Unknown KDF: %1 +- 未知 KDF:%1 +- +- +- Unknown key type: %1 +- 未知密钥类型:%1 +- +- +- +- PasswordEdit +- +- Passwords do not match +- 密ç ä¸åŒ¹é… +- +- +- Passwords match so far +- 密ç ç›®å‰åŒ¹é… +- +- +- Toggle Password (%1) +- 切æ¢å¯†ç æ˜¾ç¤º(%1) +- +- +- Generate Password (%1) +- 生æˆå¯†ç (%1) +- +- +- Warning: Caps Lock enabled! +- 警告:已å¯ç”¨å¤§å†™é”å®šï¼ +- +- +- +- PasswordEditWidget +- +- Enter password: +- 输入密ç ï¼š +- +- +- Confirm password: +- 确认密ç ï¼š +- +- +- Password +- å¯†ç  +- +- +- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> +- <p>密ç æ˜¯ä¿æŠ¤æ•°æ®åº“的主è¦æ–¹æ³•ã€‚</p><p>良好的密ç è¶³å¤Ÿé•¿ä¸”唯一。KeePassXC å¯ä»¥ä¸ºæ‚¨ç”Ÿæˆä¸€ä¸ªå¯†ç ã€‚</p> +- +- +- Passwords do not match. +- 密ç ä¸åŒ¹é…。 +- +- +- Password field +- 密ç å­—段 +- +- +- Repeat password field +- é‡å¤å¯†ç å­—段 +- +- +- +- PasswordGeneratorWidget +- +- %p% +- %p% +- +- +- strength +- Password strength +- 强度 +- +- +- entropy +- 熵 +- +- +- Password +- å¯†ç  +- +- +- Character Types +- 字符类型 +- +- +- Numbers +- æ•°å­— +- +- +- Extended ASCII +- 扩展 ASCII +- +- +- Exclude look-alike characters +- 排除相似的字符 +- +- +- Pick characters from every group +- 包å«æ¯ä¸€ç§å­—符 +- +- +- &Length: +- 长度(&L): +- +- +- Passphrase +- å£ä»¤ +- +- +- Wordlist: +- è¯è¡¨ï¼š +- +- +- Word Separator: +- å•è¯åˆ†éš”符: +- +- +- Close +- 关闭 +- +- +- Entropy: %1 bit +- 熵:%1 比特 +- +- +- Password Quality: %1 +- 密ç å¼ºåº¦ï¼š%1 +- +- +- Poor +- Password quality +- 差劲 +- +- +- Weak +- Password quality +- 较弱 +- +- +- Good +- Password quality +- 良好 +- +- +- Excellent +- Password quality +- 优秀 +- +- +- Switch to advanced mode +- 切æ¢åˆ°é«˜çº§æ¨¡å¼ +- +- +- Advanced +- 高级 +- +- +- Braces +- æ‹¬å· +- +- +- Punctuation +- 标点 +- +- +- Quotes +- å¼•å· +- +- +- Logograms +- æ ‡å¿—ç¬¦å· +- +- +- Character set to exclude from generated password +- 从生æˆçš„密ç ä¸­æŽ’除此字符集 +- +- +- Do not include: +- ä¸åŒ…å«ï¼š +- +- +- Add non-hex letters to "do not include" list +- å°†éžå六进制字æ¯æ·»åŠ åˆ°â€œä¸åŒ…å«â€åˆ—表中 +- +- +- Hex +- å六进制 +- +- +- Excluded characters: "0", "1", "l", "I", "O", "|", "ï¹’" +- 排除字符:“0â€ã€â€œ1â€ã€â€œlâ€ã€â€œIâ€ã€â€œOâ€ã€â€œ|â€ã€â€œï¹’†+- +- +- Generated password +- 生æˆçš„å¯†ç  +- +- +- Upper-case letters +- å¤§å†™å­—æ¯ +- +- +- Lower-case letters +- å°å†™å­—æ¯ +- +- +- Special characters +- 特殊字符 +- +- +- Math Symbols +- æ•°å­¦ç¬¦å· +- +- +- Dashes and Slashes +- 短线和斜线 +- +- +- Excluded characters +- 排除的字符 +- +- +- Hex Passwords +- åå…­è¿›åˆ¶å¯†ç  +- +- +- Password length +- 密ç é•¿åº¦ +- +- +- Word Case: +- å•è¯å¤§å°å†™ï¼š +- +- +- Regenerate password +- é‡æ–°ç”Ÿæˆå¯†ç  +- +- +- Copy password +- å¤åˆ¶å¯†ç  +- +- +- lower case +- å…¨å°å†™ +- +- +- UPPER CASE +- 全大写 +- +- +- Title Case +- 首字æ¯å¤§å†™ +- +- +- Generate Password +- 生æˆå¯†ç  +- +- +- Also choose from: +- 也在此选择: +- +- +- Additional characters to use for the generated password +- 用于生æˆçš„密ç çš„其他字符 +- +- +- Additional characters +- 其他字符 +- +- +- Word Count: +- è¯æ•°ï¼š +- +- +- Esc +- Esc +- +- +- Apply Password +- åº”ç”¨å¯†ç  +- +- +- Ctrl+S +- Ctrl+S +- +- +- Regenerate password (%1) +- é‡æ–°ç”Ÿæˆå¯†ç (%1) +- +- +- Special Characters +- 特殊字符 +- +- +- +- QApplication +- +- KeeShare +- KeeShare +- +- +- Statistics +- 统计 +- +- +- Very weak password +- å·®åŠ²å¯†ç  +- +- +- Password entropy is %1 bits +- 密ç ç†µä¸º %1 ä½ +- +- +- Weak password +- è¾ƒå¼±å¯†ç  +- +- +- Used in %1/%2 +- 在 %1/%2 中使用 +- +- +- Password is used %1 times +- 密ç ä½¿ç”¨ %1 次 +- +- +- Password has expired +- 密ç å·²è¿‡æœŸ +- +- +- Password expiry was %1 +- 密ç è¿‡æœŸäºŽ %1 +- +- +- Password is about to expire +- 密ç å³å°†è¿‡æœŸ +- +- +- Password expires in %1 days +- 密ç å°†åœ¨ %1 天åŽè¿‡æœŸ +- +- +- Password will expire soon +- 密ç å³å°†è¿‡æœŸ +- +- +- Password expires on %1 +- 密ç å°†åœ¨ %1 过期 +- +- +- Health Check +- å¥åº·æ£€æŸ¥ +- +- +- HIBP +- HIBP +- +- +- +- QMessageBox +- +- Overwrite +- 覆盖 +- +- +- Delete +- 删除 +- +- +- Move +- 移动 +- +- +- Empty +- 清空 +- +- +- Remove +- 删除 +- +- +- Skip +- 跳过 +- +- +- Disable +- ç¦ç”¨ +- +- +- Merge +- åˆå¹¶ +- +- +- Continue +- 继续 +- +- +- +- QObject +- +- Database not opened +- æ•°æ®åº“未打开 +- +- +- Database hash not available +- æ•°æ®åº“哈希值ä¸å¯ç”¨ +- +- +- Client public key not received +- 未收到客户端公钥 +- +- +- Cannot decrypt message +- æ— æ³•è§£å¯†æ¶ˆæ¯ +- +- +- Action cancelled or denied +- æ“作被å–æ¶ˆæˆ–è¢«æ‹’ç» +- +- +- KeePassXC association failed, try again +- KeePassXC å…³è”失败,请é‡è¯• +- +- +- Encryption key is not recognized +- 无法识别加密密钥 +- +- +- Incorrect action +- æ“作错误 +- +- +- Empty message received +- æ”¶åˆ°ç©ºæ¶ˆæ¯ +- +- +- No URL provided +- 没有æä¾› URL +- +- +- No logins found +- æœªæ‰¾åˆ°ç™»å½•ä¿¡æ¯ +- +- +- Unknown error +- 未知错误 +- +- +- Add a new entry to a database. +- å‘æ•°æ®åº“添加新æ¡ç›®ã€‚ +- +- +- Path of the database. +- æ•°æ®åº“路径。 +- +- +- Key file of the database. +- æ•°æ®åº“的密钥文件。 +- +- +- path +- 路径 +- +- +- Username for the entry. +- æ¡ç›®çš„用户å。 +- +- +- username +- 用户å +- +- +- URL for the entry. +- æ¡ç›®çš„ URL。 +- +- +- URL +- URL +- +- +- Prompt for the entry's password. +- 输入æ¡ç›®å¯†ç çš„æ示符。 +- +- +- Generate a password for the entry. +- 为此æ¡ç›®ç”Ÿæˆä¸€ä¸ªå¯†ç ã€‚ +- +- +- length +- 长度 +- +- +- Path of the entry to add. +- è¦æ·»åŠ æ¡ç›®çš„路径。 +- +- +- Path of the entry to clip. +- clip = copy to clipboard +- è¦å¤åˆ¶æ¡ç›®çš„路径。 +- +- +- Timeout in seconds before clearing the clipboard. +- 清空剪贴æ¿è¶…时(以秒为å•ä½ï¼‰ã€‚ +- +- +- Edit an entry. +- 编辑一个æ¡ç›®ã€‚ +- +- +- Title for the entry. +- æ¡ç›®çš„标题。 +- +- +- title +- 标题 +- +- +- Path of the entry to edit. +- è¦ç¼–辑æ¡ç›®çš„路径。 +- +- +- Estimate the entropy of a password. +- 估计密ç çš„熵。 +- +- +- Password for which to estimate the entropy. +- 用于估计熵的密ç ã€‚ +- +- +- Perform advanced analysis on the password. +- 对密ç æ‰§è¡Œé«˜çº§åˆ†æžã€‚ +- +- +- +- +-Available commands: +- +- +- +-å¯ç”¨å‘½ä»¤ï¼š +- +- +- +- Name of the command to execute. +- è¦æ‰§è¡Œçš„命令å称。 +- +- +- List database entries. +- 列出数æ®åº“æ¡ç›®ã€‚ +- +- +- Path of the group to list. Default is / +- è¦åˆ—出的群组路径,默认为 / +- +- +- Find entries quickly. +- 快速查找æ¡ç›®ã€‚ +- +- +- Search term. +- æœç´¢è¯ã€‚ +- +- +- Merge two databases. +- åˆå¹¶ä¸¤ä¸ªæ•°æ®åº“。 +- +- +- Path of the database to merge from. +- 作为åˆå¹¶æ¥æºçš„æ•°æ®åº“路径。 +- +- +- Use the same credentials for both database files. +- 对两个数æ®åº“文件使用相åŒçš„凭æ®ã€‚ +- +- +- Key file of the database to merge from. +- 作为åˆå¹¶æ¥æºæ•°æ®åº“的密钥文件。 +- +- +- Show an entry's information. +- 显示æ¡ç›®çš„ä¿¡æ¯ã€‚ +- +- +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- è¦æ˜¾ç¤ºçš„属性å称。å¯ä»¥å¤šæ¬¡æŒ‡å®šæ­¤é€‰é¡¹ï¼Œæ¯ä¸ªå±žæ€§æŒ‰ç»™å®šé¡ºåºæ˜¾ç¤ºï¼Œæ¯è¡Œä¸€ä¸ªã€‚ 如果未指定任何属性,则会给出默认属性的摘è¦ã€‚ +- +- +- attribute +- 属性 +- +- +- Name of the entry to show. +- è¦æ˜¾ç¤ºçš„æ¡ç›®å称。 +- +- +- NULL device +- 空设备 +- +- +- error reading from device +- 从设备读å–出错 +- +- +- malformed string +- æ ¼å¼å¼‚常字符串 +- +- +- missing closing quote +- 缺少闭åˆå¼•å· +- +- +- Group +- 群组 +- +- +- Title +- 标题 +- +- +- Username +- 用户å +- +- +- Password +- å¯†ç  +- +- +- Notes +- 备注 +- +- +- Last Modified +- 修改时间 +- +- +- Created +- 创建时间 +- +- +- Browser Integration +- æµè§ˆå™¨é›†æˆ +- +- +- SSH Agent +- SSH ä»£ç† +- +- +- Generate a new random diceware passphrase. +- 新生æˆä¸€ä¸ªéšæœºçš„ Diceware å£ä»¤ã€‚ +- +- +- Word count for the diceware passphrase. +- Diceware å£ä»¤çš„è¯æ•°ã€‚ +- +- +- Wordlist for the diceware generator. +-[Default: EFF English] +- Diceware 生æˆå™¨çš„è¯è¡¨ã€‚ +-[默认:EFF 英文] +- +- +- Generate a new random password. +- 新生æˆä¸€ä¸ªéšæœºå¯†ç ã€‚ +- +- +- Could not create entry with path %1. +- 无法创建路径为 %1 çš„æ¡ç›®ã€‚ +- +- +- Enter password for new entry: +- 输入新æ¡ç›®çš„密ç ï¼š +- +- +- Writing the database failed %1. +- 写入数æ®åº“失败 %1 。 +- +- +- Successfully added entry %1. +- å·²æˆåŠŸæ·»åŠ æ¡ç›® %1 。 +- +- +- Invalid timeout value %1. +- 超时值 %1 无效。 +- +- +- Entry %1 not found. +- 未找到æ¡ç›® %1。 +- +- +- Entry with path %1 has no TOTP set up. +- 路径 %1 çš„æ¡ç›®æ²¡æœ‰è®¾ç½® TOTP。 +- +- +- Clearing the clipboard in %1 second(s)... +- 在 %1 秒åŽæ¸…空剪贴æ¿... +- +- +- Clipboard cleared! +- 剪贴æ¿å·²æ¸…é™¤ï¼ +- +- +- Silence password prompt and other secondary outputs. +- éšè—密ç æ示符和其他辅助输出。 +- +- +- count +- CLI parameter +- 总数 +- +- +- Could not find entry with path %1. +- 找ä¸åˆ°è·¯å¾„为 %1 çš„æ¡ç›®ã€‚ +- +- +- Not changing any field for entry %1. +- 未更改æ¡ç›® %1 的任何字段。 +- +- +- Enter new password for entry: +- 输入æ¡ç›®æ–°å¯†ç ï¼š +- +- +- Writing the database failed: %1 +- 写入数æ®åº“失败:%1 +- +- +- Successfully edited entry %1. +- å·²æˆåŠŸç¼–辑æ¡ç›® %1。 +- +- +- Length %1 +- 长度 %1 +- +- +- Entropy %1 +- 熵 %1 +- +- +- Log10 %1 +- Log10 %1 +- +- +- Multi-word extra bits %1 +- 多字é¢å¤–ä½ %1 +- +- +- Type: Bruteforce +- 类型:暴力破解 +- +- +- Type: Dictionary +- 类型:字典 +- +- +- Type: Dict+Leet +- 类型:字典 + åå• +- +- +- Type: User Words +- ç±»åž‹ï¼šç”¨æˆ·è¯ +- +- +- Type: User+Leet +- 类型:用户 + åå• +- +- +- Type: Repeated +- 类型:é‡å¤ +- +- +- Type: Sequence +- 类型:åºåˆ— +- +- +- Type: Spatial +- 类型:空间 +- +- +- Type: Date +- 类型:日期 +- +- +- Type: Bruteforce(Rep) +- 类型:暴力破解(é‡å¤ï¼‰ +- +- +- Type: Dictionary(Rep) +- 类型:字典(é‡å¤ï¼‰ +- +- +- Type: Dict+Leet(Rep) +- 类型:字典 + åå•ï¼ˆé‡å¤ï¼‰ +- +- +- Type: User Words(Rep) +- 类型:用户è¯ï¼ˆé‡å¤ï¼‰ +- +- +- Type: User+Leet(Rep) +- 类型:用户 + åå•ï¼ˆé‡å¤ï¼‰ +- +- +- Type: Repeated(Rep) +- 类型:é‡å¤ï¼ˆé‡å¤ï¼‰ +- +- +- Type: Sequence(Rep) +- 类型:åºåˆ—(é‡å¤ï¼‰ +- +- +- Type: Spatial(Rep) +- 类型:空间(é‡å¤ï¼‰ +- +- +- Type: Date(Rep) +- 类型:日期(é‡å¤ï¼‰ +- +- +- Type: Unknown%1 +- 类型:未知 %1 +- +- +- Entropy %1 (%2) +- 熵 %1(%2) +- +- +- *** Password length (%1) != sum of length of parts (%2) *** +- *** 密ç é•¿åº¦ (%1) != 部分长度之和 (%2) *** +- +- +- Failed to load key file %1: %2 +- 无法加载密钥文件 %1: %2 +- +- +- Length of the generated password +- 生æˆå¯†ç çš„长度 +- +- +- Use lowercase characters +- 使用å°å†™å­—符 +- +- +- Use uppercase characters +- 使用大写字符 +- +- +- Use special characters +- 使用特殊字符 +- +- +- Use extended ASCII +- 使用扩展 ASCII +- +- +- Exclude character set +- 排除字符集 +- +- +- chars +- 字符 +- +- +- Exclude similar looking characters +- 排除相似的字符 +- +- +- Include characters from every selected group +- 包å«æ¯ä¸ªé€‰å®šç»„中的字符 +- +- +- Recursively list the elements of the group. +- 递归列出群组的元素。 +- +- +- Cannot find group %1. +- 找ä¸åˆ°ç¾¤ç»„ %1。 +- +- +- Error reading merge file: +-%1 +- 读å–åˆå¹¶æ–‡ä»¶æ—¶å‡ºé”™ï¼š +-%1 +- +- +- Unable to save database to file : %1 +- 无法将数æ®åº“ä¿å­˜åˆ°æ–‡ä»¶ï¼š%1 +- +- +- Unable to save database to file: %1 +- 无法将数æ®åº“ä¿å­˜åˆ°æ–‡ä»¶ï¼š%1 +- +- +- Successfully recycled entry %1. +- å·²æˆåŠŸç§»åŠ¨æ¡ç›® %1 到回收站。 +- +- +- Successfully deleted entry %1. +- å·²æˆåŠŸåˆ é™¤æ¡ç›® %1。 +- +- +- Show the entry's current TOTP. +- 显示æ¡ç›®å½“å‰çš„ TOTP。 +- +- +- ERROR: unknown attribute %1. +- 错误:未知属性 %1。 +- +- +- No program defined for clipboard manipulation +- 没有为剪贴æ¿æ“ä½œå®šä¹‰ç¨‹åº +- +- +- file empty +- 文件为空 +- +- +- %1: (row, col) %2,%3 +- %1:(行,列)%2,%3 +- +- +- AES-KDF (KDBX 4) +- AES-KDF(KDBX 4) +- +- +- AES-KDF (KDBX 3.1) +- AES-KDF(KDBX 3.1) +- +- +- Invalid Settings +- TOTP +- 无效的设置 +- +- +- Invalid Key +- TOTP +- 无效的密钥 +- +- +- Message encryption failed. +- 消æ¯åŠ å¯†å¤±è´¥ã€‚ +- +- +- No groups found +- 未找到群组 +- +- +- Create a new database. +- 创建新数æ®åº“。 +- +- +- File %1 already exists. +- 文件 %1 已存在。 +- +- +- Loading the key file failed +- 加载密钥文件失败 +- +- +- No key is set. Aborting database creation. +- 没有设置密钥。正在中止数æ®åº“创建。 +- +- +- Failed to save the database: %1. +- ä¿å­˜æ•°æ®åº“失败:%1。 +- +- +- Successfully created new database. +- å·²æˆåŠŸåˆ›å»ºæ–°æ•°æ®åº“。 +- +- +- Creating KeyFile %1 failed: %2 +- 创建密钥文件 %1 失败:%2 +- +- +- Loading KeyFile %1 failed: %2 +- 加载密钥文件 %1 失败:%2 +- +- +- Path of the entry to remove. +- è¦åˆ é™¤æ¡ç›®çš„路径。 +- +- +- Existing single-instance lock file is invalid. Launching new instance. +- 已有的å•å®žä¾‹é”文件无效。正在å¯åŠ¨æ–°å®žä¾‹ã€‚ +- +- +- The lock file could not be created. Single-instance mode disabled. +- 无法创建é”文件。å•å®žä¾‹æ¨¡å¼å·²ç¦ç”¨ã€‚ +- +- +- KeePassXC - cross-platform password manager +- KeePassXC - 跨平å°å¯†ç ç®¡ç†å™¨ +- +- +- filenames of the password databases to open (*.kdbx) +- è¦æ‰“开的密ç æ•°æ®åº“文件å(*.kdbx) +- +- +- path to a custom config file +- 自定义é…置文件的路径 +- +- +- key file of the database +- æ•°æ®åº“的密钥文件 +- +- +- read password of the database from stdin +- 从标准输入读å–æ•°æ®åº“çš„å¯†ç  +- +- +- Another instance of KeePassXC is already running. +- å¦ä¸€ä¸ª KeePassXC 实例已在è¿è¡Œã€‚ +- +- +- Fatal error while testing the cryptographic functions. +- 在测试加密函数时å‘生致命错误。 +- +- +- KeePassXC - Error +- KeePassXC - 错误 +- +- +- Database password: +- æ•°æ®åº“密ç ï¼š +- +- +- Cannot create new group +- 无法创建新群组 +- +- +- Deactivate password key for the database. +- åœç”¨æ­¤æ•°æ®åº“的密ç å¯†é’¥ã€‚ +- +- +- Displays debugging information. +- 显示调试信æ¯ã€‚ +- +- +- Deactivate password key for the database to merge from. +- åœç”¨ä½œä¸ºåˆå¹¶æ¥æºæ•°æ®åº“使用的密ç å¯†é’¥ã€‚ +- +- +- Version %1 +- 版本 %1 +- +- +- Build Type: %1 +- 构建类型: %1 +- +- +- Revision: %1 +- 修订版本:%1 +- +- +- Distribution: %1 +- å‘行版:%1 +- +- +- Debugging mode is disabled. +- å·²ç¦ç”¨è°ƒè¯•æ¨¡å¼ã€‚ +- +- +- Debugging mode is enabled. +- å·²å¯ç”¨è°ƒè¯•æ¨¡å¼ã€‚ +- +- +- Operating system: %1 +-CPU architecture: %2 +-Kernel: %3 %4 +- æ“作系统:%1 +-CPU 架构:%2 +-内核:%3 %4 +- +- +- Auto-Type +- 自动输入 +- +- +- KeeShare (signed and unsigned sharing) +- KeeShare(签å和未签å共享) +- +- +- KeeShare (only signed sharing) +- KeeShare(仅é™ç­¾å共享) +- +- +- KeeShare (only unsigned sharing) +- KeeShare(仅é™æœªç­¾å共享) +- +- +- YubiKey +- YubiKey +- +- +- TouchID +- TouchID +- +- +- None +- æ—  +- +- +- Enabled extensions: +- å·²å¯ç”¨çš„扩展: +- +- +- Cryptographic libraries: +- 密ç å­¦å…¬å…±åº“: +- +- +- Cannot generate a password and prompt at the same time! +- 无法åŒæ—¶ç”Ÿæˆå¯†ç å’Œæç¤ºï¼ +- +- +- Adds a new group to a database. +- å‘æ•°æ®åº“添加新群组。 +- +- +- Path of the group to add. +- è¦æ·»åŠ çš„群组路径。 +- +- +- Group %1 already exists! +- 群组 %1 å·²ç»å­˜åœ¨ï¼ +- +- +- Group %1 not found. +- 未找到群组 %1。 +- +- +- Successfully added group %1. +- å·²æˆåŠŸæ·»åŠ ç¾¤ç»„ %1。 +- +- +- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. +- 检查是å¦æœ‰å¯†ç å·²å…¬å¼€æ³„露。文件å必须是 HIBP æ ¼å¼çš„ã€å·²æ³„露密ç çš„ SHA-1 摘è¦æ¸…å•ï¼Œå¯ä»¥åœ¨ https://haveibeenpwned.com/Passwords 下载到。 +- +- +- FILENAME +- 文件å +- +- +- Analyze passwords for weaknesses and problems. +- 分æžå¯†ç çš„弱点和问题。 +- +- +- Failed to open HIBP file %1: %2 +- 无法打开 HIBP 文件 %1:%2 +- +- +- Evaluating database entries against HIBP file, this will take a while... +- 正通过 HIBP 文件评估数æ®åº“æ¡ç›®ï¼Œè¿™éœ€è¦ä¸€äº›æ—¶é—´... +- +- +- Close the currently opened database. +- 关闭当å‰å¼€å¯çš„æ•°æ®åº“。 +- +- +- Display this help. +- 显示此帮助。 +- +- +- slot +- æ’槽 +- +- +- Invalid word count %1 +- 无效的è¯æ•° %1 +- +- +- The word list is too small (< 1000 items) +- è¯è¡¨å¤ªå°ï¼ˆå°‘于 1000 项) +- +- +- Exit interactive mode. +- 退出交互模å¼ã€‚ +- +- +- Exports the content of a database to standard output in the specified format. +- 将数æ®åº“内容按照指定的格å¼è¾“出至标准输出。 +- +- +- Unable to export database to XML: %1 +- 无法导出数æ®åº“至 XML:%1 +- +- +- Unsupported format %1 +- ä¸æ”¯æŒçš„æ ¼å¼ %1 +- +- +- Use numbers +- 使用数字 +- +- +- Invalid password length %1 +- 无效的密ç é•¿åº¦ %1 +- +- +- Display command help. +- 显示命令帮助。 +- +- +- Available commands: +- å¯ç”¨å‘½ä»¤ï¼š +- +- +- Import the contents of an XML database. +- 导入 XML æ•°æ®åº“的内容。 +- +- +- Path of the XML database export. +- XML æ•°æ®åº“导出的路径。 +- +- +- Path of the new database. +- æ–°æ•°æ®åº“的路径。 +- +- +- Successfully imported database. +- å·²æˆåŠŸå¯¼å…¥æ•°æ®åº“。 +- +- +- Unknown command %1 +- 未知命令 %1 +- +- +- Flattens the output to single lines. +- 将输出展平为å•è¡Œã€‚ +- +- +- Only print the changes detected by the merge operation. +- 仅输出åˆå¹¶æ“作检测到的更改。 +- +- +- Yubikey slot for the second database. +- 第二个数æ®åº“è¦ä½¿ç”¨çš„ Yubikey æ’槽。 +- +- +- Successfully merged %1 into %2. +- æˆåŠŸå°† %1 åˆå¹¶å…¥ %2。 +- +- +- Database was not modified by merge operation. +- åˆå¹¶æ“作未修改数æ®åº“。 +- +- +- Moves an entry to a new group. +- å°†æ¡ç›®ç§»è‡³æ–°ç¾¤ç»„。 +- +- +- Path of the entry to move. +- è¦ç§»åŠ¨çš„æ¡ç›®è·¯å¾„。 +- +- +- Path of the destination group. +- 目标群组的路径。 +- +- +- Could not find group with path %1. +- 找ä¸åˆ°è·¯å¾„为 %1 的群组。 +- +- +- Entry is already in group %1. +- æ¡ç›®å·²ä½äºŽç¾¤ç»„ %1。 +- +- +- Successfully moved entry %1 to group %2. +- å·²æˆåŠŸå°†æ¡ç›® %1 移至群组 %2。 +- +- +- Open a database. +- 打开一个数æ®åº“。 +- +- +- Path of the group to remove. +- è¦åˆ é™¤çš„群组路径。 +- +- +- Cannot remove root group from database. +- ä¸èƒ½ä»Žæ•°æ®åº“移除根群组。 +- +- +- Successfully recycled group %1. +- å·²æˆåŠŸå›žæ”¶ç¾¤ç»„ %1。 +- +- +- Successfully deleted group %1. +- å·²æˆåŠŸåˆ é™¤ç¾¤ç»„ %1。 +- +- +- Failed to open database file %1: not found +- 打开数æ®åº“文件 %1 失败:文件未找到 +- +- +- Failed to open database file %1: not a plain file +- 打开数æ®åº“文件 %1 失败:ä¸æ˜¯å¸¸è§„文件 +- +- +- Failed to open database file %1: not readable +- 打开数æ®åº“文件 %1 失败:文件ä¸å¯è¯» +- +- +- Enter password to unlock %1: +- 输入密ç ä»¥è§£é” %1: +- +- +- Invalid YubiKey slot %1 +- 无效的 YubiKey æ’槽 %1 +- +- +- Enter password to encrypt database (optional): +- 输入用于加密数æ®åº“的密ç ï¼ˆå¯é€‰ï¼‰ï¼š +- +- +- HIBP file, line %1: parse error +- HIBP 文件,第 %1 行:解æžé”™è¯¯ +- +- +- Secret Service Integration +- ä¿å¯†æœåŠ¡é›†æˆ +- +- +- User name +- 用户å +- +- +- Password for '%1' has been leaked %2 time(s)! +- “%1â€çš„密ç å·²æ³„露了 %2 æ¬¡ï¼ +- +- +- Invalid password generator after applying all options +- 应用所有选项åŽï¼Œå¯†ç ç”Ÿæˆå™¨æ— æ•ˆ +- +- +- Show the protected attributes in clear text. +- 明文显示被ä¿æŠ¤çš„属性。 +- +- +- Browser Plugin Failure +- æµè§ˆå™¨æ’件失败 +- +- +- Could not save the native messaging script file for %1. +- 无法为 %1 ä¿å­˜ Native Messaging 脚本文件。 +- +- +- Copy the given attribute to the clipboard. Defaults to "password" if not specified. +- 将指定属性å¤åˆ¶åˆ°å‰ªè´´æ¿ã€‚如果未指定,则默认为“密ç â€ã€‚ +- +- +- Copy the current TOTP to the clipboard (equivalent to "-a totp"). +- å°†å½“å‰ TOTP å¤åˆ¶åˆ°å‰ªè´´æ¿ï¼ˆç›¸å½“于“-a totpâ€ï¼‰ã€‚ +- +- +- Copy an entry's attribute to the clipboard. +- å°†æ¡ç›®çš„属性å¤åˆ¶åˆ°å‰ªè´´æ¿ã€‚ +- +- +- ERROR: Please specify one of --attribute or --totp, not both. +- 错误:请指定 --attribute 或 --totp 之一,ä¸å¯åŒæ—¶ä½¿ç”¨ã€‚ +- +- +- ERROR: attribute %1 is ambiguous, it matches %2. +- 错误:属性 %1 ä¸æ˜Žç¡®ï¼Œå®ƒåŒ¹é… %2。 +- +- +- Attribute "%1" not found. +- 未找到属性“%1â€ã€‚ +- +- +- Entry's "%1" attribute copied to the clipboard! +- å·²å¤åˆ¶æ¡ç›®çš„“%1â€å±žæ€§åˆ°å‰ªè´´æ¿ï¼ +- +- +- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). +- 用于访问数æ®åº“çš„ Yubikey æ’槽和å¯é€‰çš„åºå·ï¼ˆä¾‹å¦‚ 1:7370001)。 +- +- +- slot[:serial] +- æ’槽[:åºå·] +- +- +- Target decryption time in MS for the database. +- æ•°æ®åº“的目标解密时间,å•ä½ä¸ºæ¯«ç§’。 +- +- +- time +- 时间 +- +- +- Set the key file for the database. +- 设置数æ®åº“的密钥文件。 +- +- +- Set a password for the database. +- 设置数æ®åº“的密ç ã€‚ +- +- +- Invalid decryption time %1. +- 无效解密时间 %1。 +- +- +- Target decryption time must be between %1 and %2. +- 目标解密时间必须在 %1 与 %2 之间。 +- +- +- Failed to set database password. +- 设置数æ®åº“密ç å¤±è´¥ã€‚ +- +- +- Benchmarking key derivation function for %1ms delay. +- 以 %1 毫秒延迟对密钥派生函数进行基准测试。 +- +- +- Setting %1 rounds for key derivation function. +- 为密钥派生函数设置 %1 转æ¢æ¬¡æ•°ã€‚ +- +- +- error while setting database key derivation settings. +- 设置数æ®åº“密钥派生设置时出现错误。 +- +- +- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. +- 导出时使用的格å¼ã€‚å¯ç”¨çš„选项是“xmlâ€æˆ–“csvâ€ã€‚默认值为“xmlâ€ã€‚ +- +- +- Unable to import XML database: %1 +- 无法导入 XML æ•°æ®åº“:%1 +- +- +- Show a database's information. +- 显示数æ®åº“çš„ä¿¡æ¯ã€‚ +- +- +- UUID: +- UUID: +- +- +- Name: +- å称: +- +- +- Description: +- æ述: +- +- +- Cipher: +- 加密: +- +- +- KDF: +- KDF: +- +- +- Recycle bin is enabled. +- 回收站已å¯ç”¨ã€‚ +- +- +- Recycle bin is not enabled. +- 回收站未å¯ç”¨ã€‚ +- +- +- Invalid command %1. +- 无效命令 %1。 +- +- +- Invalid YubiKey serial %1 +- 无效的 YubiKey åºå· %1 +- +- +- Please touch the button on your YubiKey to continue… +- 请触摸您 YubiKey 上的按钮以继续... +- +- +- Do you want to create a database with an empty password? [y/N]: +- 是å¦è¦åˆ›å»ºå…·æœ‰ç©ºå¯†ç çš„æ•°æ®åº“?[y/N]: +- +- +- Repeat password: +- é‡å¤å¯†ç ï¼š +- +- +- Error: Passwords do not match. +- 错误:密ç ä¸åŒ¹é…。 +- +- +- All clipping programs failed. Tried %1 +- +- 所有剪贴æ¿ç¨‹åºéƒ½å¤±è´¥ã€‚å·²å°è¯• %1 +- +- +- AES (%1 rounds) +- AES(%1 次) +- +- +- AES 256-bit +- AES 256 ä½ +- +- +- Twofish 256-bit +- Twofish 256 ä½ +- +- +- ChaCha20 256-bit +- ChaCha20:256 ä½ {20 256-?} +- +- +- Benchmark %1 delay +- 基准 %1 延迟 +- +- +- %1 ms +- milliseconds +- %1 毫秒 +- +- +- %1 s +- seconds +- %1 秒 +- +- +- path to a custom local config file +- 自定义本地é…置文件的路径 +- +- +- WARNING: You are using an old key file format which KeePassXC may +-stop supporting in the future. +- +-Please consider generating a new key file. +- 警告:您使用的是旧版密钥文件格å¼ï¼ŒKeePassXC å¯èƒ½ä¼šåœ¨å°†æ¥åœæ­¢å¯¹å®ƒçš„支æŒã€‚ +- +-请考虑é‡æ–°ç”Ÿæˆä¸€ä¸ªæ–°å¯†é’¥æ–‡ä»¶ã€‚ +- +- +- Argon2%1 (%2 rounds, %3 KB) +- Argon2%1(%2 次,%3 KB) +- +- +- Argon2d (KDBX 4 – recommended) +- Argon2d(KDBX 4 – 推è) +- +- +- Argon2id (KDBX 4) +- Argon2id(KDBX 4) +- +- +- TOTP +- TOTP +- +- +- Icon +- 图标 +- +- +- Unsupported key file version: %1 +- ä¸æ”¯æŒçš„密钥文件版本:%1 +- +- +- Checksum mismatch! Key file may be corrupt. +- 校验和ä¸åŒ¹é…ï¼å¯†é’¥æ–‡ä»¶å¯èƒ½å·²æŸå。 +- +- +- Unexpected key file data! Key file may be corrupt. +- æ„外的密钥文件数æ®ï¼å¯†é’¥æ–‡ä»¶å¯èƒ½å·²æŸå。 +- +- +- +- QtIOCompressor +- +- Internal zlib error when compressing: +- 压缩时内部 zlib 出错: +- +- +- Error writing to underlying device: +- 写入底层设备出错: +- +- +- Error opening underlying device: +- 打开底层设备出错: +- +- +- Error reading data from underlying device: +- 读å–底层设备出错: +- +- +- Internal zlib error when decompressing: +- 解压时内部 zlib 错误: +- +- +- +- QtIOCompressor::open +- +- The gzip format not supported in this version of zlib. +- 当å‰ç‰ˆæœ¬çš„ zlib ä¸æ”¯æŒ gzip æ ¼å¼ã€‚ +- +- +- Internal zlib error: +- 内部 zlib 错误: +- +- +- +- ReportsWidgetHealthcheck +- +- Also show entries that have been excluded from reports +- 也显示已从报告中排除的æ¡ç›® +- +- +- Hover over reason to show additional details. Double-click entries to edit. +- 将鼠标指针悬åœåœ¨åŽŸå› ä¸Šä»¥æ˜¾ç¤ºå…¶ä»–详细信æ¯ã€‚åŒå‡»æ¡ç›®ä»¥ç¼–辑。 +- +- +- Bad +- Password quality +- æžå·® +- +- +- Bad — password must be changed +- æžå·® — å¿…é¡»æ›´æ”¹å¯†ç  +- +- +- Poor +- Password quality +- 差劲 +- +- +- Poor — password should be changed +- 差劲 — åº”è¯¥æ›´æ”¹å¯†ç  +- +- +- Weak +- Password quality +- 较弱 +- +- +- Weak — consider changing the password +- 较弱 — å¯è€ƒè™‘æ›´æ”¹å¯†ç  +- +- +- (Excluded) +- (已排除) +- +- +- This entry is being excluded from reports +- æ­¤æ¡ç›®å·²ç»ä»ŽæŠ¥å‘Šä¸­æŽ’除 +- +- +- Please wait, health data is being calculated... +- 请ç¨å€™ï¼Œæ­£åœ¨è®¡ç®—å¥åº·æ•°æ®... +- +- +- Congratulations, everything is healthy! +- æ­å–œï¼Œä¸€åˆ‡å¥åº·ï¼ +- +- +- Title +- 标题 +- +- +- Path +- 路径 +- +- +- Score +- 得分 +- +- +- Reason +- 原因 +- +- +- Edit Entry... +- 编辑æ¡ç›®... +- +- +- Exclude from reports +- 从报告中排除 +- +- +- +- ReportsWidgetHibp +- +- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. +- 注æ„:此报告需è¦å°†ä¿¡æ¯å‘é€åˆ° Have I Been Pwned 在线æœåŠ¡ (https://haveibeenpwned.com)。如果继续,您数æ®åº“内的密ç å°†è¢«å“ˆå¸ŒåŠ å¯†ï¼Œè¿™äº›å“ˆå¸Œçš„å‰äº”个字符将安全地å‘é€åˆ°æ­¤æœåŠ¡ã€‚您的数æ®åº“ä»ç„¶å®‰å…¨ï¼Œå…¶ä»–人无法从此信æ¯ä¸­é‡å»ºæ•°æ®ã€‚但是,您å‘é€çš„密ç æ•°é‡å’Œ IP 地å€å°†æ供给此æœåŠ¡ã€‚ +- +- +- Perform Online Analysis +- æ‰§è¡Œåœ¨çº¿åˆ†æž +- +- +- Also show entries that have been excluded from reports +- 也显示已从报告中排除的æ¡ç›® +- +- +- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. +- 此版本 KeePassXC ä¸åŒ…å«ç½‘络功能。如è¦é€šè¿‡ Have I Been Pwned æœåŠ¡æ£€æŸ¥æ‚¨çš„密ç ï¼Œå°±å¿…é¡»å¯ä»¥è®¿é—®ç½‘络。 +- +- +- Congratulations, no exposed passwords! +- æ­å–œï¼Œæ²¡æœ‰å·²æš´éœ²çš„密ç ï¼ +- +- +- Title +- 标题 +- +- +- Path +- 路径 +- +- +- Password exposed… +- 已暴露密ç ... +- +- +- (Excluded) +- (已排除) +- +- +- This entry is being excluded from reports +- æ­¤æ¡ç›®å·²ç»ä»ŽæŠ¥å‘Šä¸­æŽ’除 +- +- +- once +- 一次 +- +- +- up to 10 times +- 至多达 10 次 +- +- +- up to 100 times +- 至多达 100 次 +- +- +- up to 1000 times +- 至多达 1000 次 +- +- +- up to 10,000 times +- 至多达一万次 +- +- +- up to 100,000 times +- 至多达å万次 +- +- +- up to a million times +- 至多达一百万次 +- +- +- millions of times +- 数百万次 +- +- +- Edit Entry... +- 编辑æ¡ç›®... +- +- +- Exclude from reports +- 从报告中排除 +- +- +- +- ReportsWidgetStatistics +- +- Hover over lines with error icons for further information. +- 将鼠标指针悬åœåœ¨æœ‰é”™è¯¯å›¾æ ‡çš„行以显示更多信æ¯ã€‚ +- +- +- Name +- å称 +- +- +- Value +- 值 +- +- +- Please wait, database statistics are being calculated... +- 请ç¨å€™ï¼Œæ­£åœ¨è®¡ç®—æ•°æ®åº“统计信æ¯... +- +- +- Database name +- æ•°æ®åº“å称 +- +- +- Description +- æè¿° +- +- +- Location +- ä½ç½® +- +- +- Last saved +- ä¿å­˜æ—¶é—´ +- +- +- Unsaved changes +- 修改尚未ä¿å­˜ +- +- +- yes +- 是 +- +- +- no +- å¦ +- +- +- The database was modified, but the changes have not yet been saved to disk. +- æ•°æ®åº“已被修改,但尚未ä¿å­˜åˆ°ç£ç›˜ã€‚ +- +- +- Number of groups +- 群组数 +- +- +- Number of entries +- æ¡ç›®æ•° +- +- +- Number of expired entries +- 过期æ¡ç›®æ•° +- +- +- The database contains entries that have expired. +- 此数æ®åº“包å«å·²è¿‡æœŸçš„æ¡ç›®ã€‚ +- +- +- Unique passwords +- å”¯ä¸€å¯†ç  +- +- +- Non-unique passwords +- é‡å¤å¯†ç  +- +- +- More than 10% of passwords are reused. Use unique passwords when possible. +- 超过 10% 的密ç æ˜¯é‡å¤çš„,请尽é‡ä¸ä½¿ç”¨é‡å¤çš„密ç ã€‚ +- +- +- Maximum password reuse +- 密ç æœ€é«˜é‡å¤æ¬¡æ•° +- +- +- Some passwords are used more than three times. Use unique passwords when possible. +- 一些密ç å·²ç»é‡å¤ä½¿ç”¨ 3 次以上,请尽é‡ä¸ä½¿ç”¨é‡å¤çš„密ç ã€‚ +- +- +- Number of short passwords +- 短密ç æ€»æ•° +- +- +- Recommended minimum password length is at least 8 characters. +- 推è密ç ä¸å°‘于 8 ä½ã€‚ +- +- +- Number of weak passwords +- 弱密ç æ€»æ•° +- +- +- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. +- 推è使用被系统评分为“良好â€æˆ–“优秀â€çš„ã€è¶³å¤Ÿé•¿çš„éšæœºå¯†ç ã€‚ +- +- +- Entries excluded from reports +- 报告中已排除æ¡ç›® +- +- +- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. +- 从报告中被排除的æ¡ç›®ï¼ˆä¾‹å¦‚,因为已知其密ç è¾ƒå·®ï¼‰ä¸ä¸€å®šæ˜¯é—®é¢˜ï¼Œä½†æ‚¨åº”该留æ„它们。 +- +- +- Average password length +- å¹³å‡å¯†ç é•¿åº¦ +- +- +- %1 characters +- %1 字符 +- +- +- Average password length is less than ten characters. Longer passwords provide more security. +- 密ç å¹³å‡çŸ­äºŽ 10 ä½ï¼Œæ›´é•¿çš„密ç æ供更强的安全性。 +- +- +- +- SSHAgent +- +- Agent connection failed. +- 代ç†è¿žæŽ¥å¤±è´¥ã€‚ +- +- +- Agent protocol error. +- 代ç†å议错误。 +- +- +- No agent running, cannot add identity. +- 代ç†æœªåœ¨è¿è¡Œï¼Œæ— æ³•æ·»åŠ èº«ä»½ã€‚ +- +- +- No agent running, cannot remove identity. +- 代ç†æœªåœ¨è¿è¡Œï¼Œæ— æ³•åˆ é™¤èº«ä»½ã€‚ +- +- +- Agent refused this identity. Possible reasons include: +- 代ç†æ‹’ç»äº†æ­¤èº«ä»½ã€‚å¯èƒ½çš„原因包括: +- +- +- The key has already been added. +- 此密钥已被添加。 +- +- +- Restricted lifetime is not supported by the agent (check options). +- 代ç†ä¸æ”¯æŒå—é™åˆ¶çš„生命周期(请检查选项)。 +- +- +- A confirmation request is not supported by the agent (check options). +- 代ç†ä¸æ”¯æŒç¡®è®¤è¯·æ±‚(请检查选项)。 +- +- +- Key identity ownership conflict. Refusing to add. +- 密钥身份所有æƒå†²çªã€‚æ‹’ç»æ·»åŠ ã€‚ +- +- +- No agent running, cannot list identities. +- 代ç†æœªåœ¨è¿è¡Œï¼Œæ— æ³•åˆ—出身份。 +- +- +- +- SearchHelpWidget +- +- Search Help +- æœç´¢å¸®åŠ© +- +- +- Search terms are as follows: [modifiers][field:]["]term["] +- æœç´¢è¯æ ¼å¼ä¸ºï¼š[修饰符][字段å:]["]关键è¯["] +- +- +- Every search term must match (ie, logical AND) +- 所有æœç´¢è¯éƒ½å¿…须匹é…(å³é€»è¾‘“与â€å…³ç³»ï¼‰ +- +- +- Modifiers +- 修饰符 +- +- +- exclude term from results +- ä»Žç»“æžœä¸­æŽ’é™¤å…³é”®è¯ +- +- +- match term exactly +- 精确匹é…å…³é”®è¯ +- +- +- use regex in term +- ä½¿ç”¨æ­£åˆ™è¡¨è¾¾å¼ +- +- +- Fields +- 字段 +- +- +- Term Wildcards +- 关键è¯é€šé…符 +- +- +- match anything +- 匹é…任何内容 +- +- +- match one +- 匹é…å•ä¸ªå­—符 +- +- +- logical OR +- 逻辑“或†+- +- +- Examples +- 示例 +- +- +- +- SearchWidget +- +- Search +- æœç´¢ +- +- +- Limit search to selected group +- ä»…æœç´¢é€‰ä¸­çš„群组 +- +- +- Search Help +- æœç´¢å¸®åŠ© +- +- +- Search (%1)... +- Search placeholder text, %1 is the keyboard shortcut +- æœç´¢(%1)... +- +- +- Case sensitive +- 区分大å°å†™ +- +- +- +- SettingsWidgetFdoSecrets +- +- Options +- 选项 +- +- +- Enable KeepassXC Freedesktop.org Secret Service integration +- 在 KeepassXC 中å¯ç”¨ Freedesktop.org ä¿å¯†æœåŠ¡é›†æˆ +- +- +- General +- 常规 +- +- +- Show notification when credentials are requested +- 请求凭æ®æ—¶æ˜¾ç¤ºé€šçŸ¥ +- +- +- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> +- <html><head/><body><p>如果数æ®åº“å·²å¯ç”¨å›žæ”¶ç«™ï¼Œæ¡ç›®ä¼šè¢«ç§»åŠ¨åˆ°å›žæ”¶ç«™ã€‚å¦åˆ™æ¡ç›®ä¼šä¸ç»ç¡®è®¤ç›´æŽ¥åˆ é™¤ã€‚</p><p>但如果æ¡ç›®è¢«å…¶ä»–æ¡ç›®å¼•ç”¨ä»ä¼šè¯·æ±‚确认。</p></body></html> +- +- +- Exposed database groups: +- 已公开的数æ®åº“群组: +- +- +- Authorization +- è®¤è¯ +- +- +- These applications are currently connected: +- 现在已ç»è¿žæŽ¥åˆ°ä»¥ä¸‹åº”用: +- +- +- Don't confirm when entries are deleted by clients +- 客户端删除æ¡ç›®æ—¶æ— éœ€ç¡®è®¤ +- +- +- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. +- <b>错误:</b>连接 DBus 失败。请检查您的 DBus 设置。 +- +- +- <b>Warning:</b> +- <b>警告:</b> +- +- +- Save current changes to activate the plugin and enable editing of this section. +- ä¿å­˜å½“å‰æ›´æ”¹ä»¥æ¿€æ´»æ’件,并å¯ç”¨æ­¤éƒ¨åˆ†çš„编辑。 +- +- +- +- SettingsWidgetKeeShare +- +- Active +- 激活 +- +- +- Allow export +- å…许导出 +- +- +- Allow import +- å…许导入 +- +- +- Own certificate +- 自己的è¯ä¹¦ +- +- +- Fingerprint: +- 指纹: +- +- +- Certificate: +- è¯ä¹¦ï¼š +- +- +- Signer +- ç­¾å者 +- +- +- Key: +- 密钥: +- +- +- Generate +- ç”Ÿæˆ +- +- +- Import +- 导入 +- +- +- Export +- 导出 +- +- +- Imported certificates +- 导入的è¯ä¹¦ +- +- +- Trust +- ä¿¡ä»» +- +- +- Ask +- 询问 +- +- +- Untrust +- ä¸ä¿¡ä»» +- +- +- Remove +- 删除 +- +- +- Path +- 路径 +- +- +- Status +- çŠ¶æ€ +- +- +- Fingerprint +- 指纹 +- +- +- Certificate +- è¯ä¹¦ +- +- +- Trusted +- å¯ä¿¡ +- +- +- Untrusted +- ä¸å¯ä¿¡ +- +- +- Unknown +- 未知 +- +- +- key.share +- Filetype for KeeShare key +- key.share +- +- +- KeeShare key file +- KeeShare 密钥文件 +- +- +- All files +- 所有文件 +- +- +- Select path +- 选择路径 +- +- +- Exporting changed certificate +- 导出已更改的è¯ä¹¦ +- +- +- The exported certificate is not the same as the one in use. Do you want to export the current certificate? +- 导出的è¯ä¹¦ä¸Žæ­£åœ¨ä½¿ç”¨çš„è¯ä¹¦ä¸åŒã€‚是å¦è¦å¯¼å‡ºå½“å‰è¯ä¹¦ï¼Ÿ +- +- +- Signer: +- ç­¾å者: +- +- +- Allow KeeShare imports +- å…许 KeeShare 导入 +- +- +- Allow KeeShare exports +- å…许 KeeShare 导出 +- +- +- Only show warnings and errors +- ä»…æ˜¾ç¤ºè­¦å‘Šå’Œé”™è¯¯ä¿¡æ¯ +- +- +- Key +- 密钥 +- +- +- Signer name field +- ç­¾å者å称字段 +- +- +- Generate new certificate +- 生æˆæ–°è¯ä¹¦ +- +- +- Import existing certificate +- 导入已有的è¯ä¹¦ +- +- +- Export own certificate +- 导出自己的è¯ä¹¦ +- +- +- Known shares +- 已知共享 +- +- +- Trust selected certificate +- 信任所选è¯ä¹¦ +- +- +- Ask whether to trust the selected certificate every time +- æ¯æ¬¡éƒ½è¯¢é—®æ˜¯å¦ä¿¡ä»»æ‰€é€‰è¯ä¹¦ +- +- +- Untrust selected certificate +- ä¸ä¿¡ä»»æ‰€é€‰è¯ä¹¦ +- +- +- Remove selected certificate +- 删除所选è¯ä¹¦ +- +- +- +- ShareExport +- +- Overwriting signed share container is not supported - export prevented +- ä¸æ”¯æŒè¦†ç›–已签å共享容器 - ä¸å¯å¯¼å‡º +- +- +- Could not write export container (%1) +- 无法写入导出容器(%1) +- +- +- Could not embed signature: Could not open file to write (%1) +- 无法嵌入签å:无法打开è¦å†™å…¥çš„文件(%1) +- +- +- Could not embed signature: Could not write file (%1) +- 无法嵌入签å:无法写入文件(%1) +- +- +- Could not embed database: Could not open file to write (%1) +- 无法嵌入数æ®åº“:无法打开è¦å†™å…¥çš„文件(%1) +- +- +- Could not embed database: Could not write file (%1) +- 无法嵌入数æ®åº“:无法写入文件(%1) +- +- +- Overwriting unsigned share container is not supported - export prevented +- ä¸æ”¯æŒè¦†ç›–未签å共享容器 - ä¸å¯å¯¼å‡º +- +- +- Could not write export container +- 无法写入导出容器 +- +- +- Unexpected export error occurred +- 出现æ„外的导出错误 +- +- +- +- ShareImport +- +- Import from container without signature +- 从未签å容器导入 +- +- +- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? +- 我们无法验è¯å…±äº«å®¹å™¨çš„æ¥æºï¼Œå› ä¸ºå®ƒæœªç­¾å。是å¦ç¡®å®žè¦ä»Ž %1 导入? +- +- +- Import from container with certificate +- 从有è¯ä¹¦å®¹å™¨å¯¼å…¥ +- +- +- Do you want to trust %1 with the fingerprint of %2 from %3? +- 您是å¦è¦ä¿¡ä»»æ¥è‡ª %3 çš„ %1,指纹为 %2?{1 ?} {2 ?} +- +- +- Not this time +- ä¸ä¿¡ä»»ä¸€æ¬¡ +- +- +- Never +- 总ä¸ä¿¡ä»» +- +- +- Always +- 总是信任 +- +- +- Just this time +- 信任一次 +- +- +- Signed share container are not supported - import prevented +- ä¸æ”¯æŒå·²ç­¾å共享容器 - ä¸å¯å¯¼å…¥ +- +- +- File is not readable +- 文件ä¸å¯è¯» +- +- +- Invalid sharing container +- 无效的共享容器 +- +- +- Untrusted import prevented +- 已阻止ä¸å¯ä¿¡çš„导入 +- +- +- Successful signed import +- 已签å导入æˆåŠŸ +- +- +- Unsigned share container are not supported - import prevented +- ä¸æ”¯æŒæœªç­¾å共享容器 - ä¸å¯å¯¼å…¥ +- +- +- Successful unsigned import +- 未签å导入æˆåŠŸ +- +- +- File does not exist +- 文件ä¸å­˜åœ¨ +- +- +- Unknown share container type +- 未知的共享容器类型 +- +- +- +- ShareObserver +- +- Import from %1 failed (%2) +- 从 %1 导入失败(%2) +- +- +- Import from %1 successful (%2) +- 从 %1 导入æˆåŠŸï¼ˆ%2) +- +- +- Imported from %1 +- 已从 %1 导入 +- +- +- Export to %1 failed (%2) +- 导出到 %1 失败(%2) +- +- +- Export to %1 successful (%2) +- 导出到 %1 æˆåŠŸï¼ˆ%2) +- +- +- Export to %1 +- 已导出到 %1 +- +- +- Multiple import source path to %1 in %2 +- %2 中有多个 %1 的导入æ¥æºè·¯å¾„ +- +- +- Conflicting export target path %1 in %2 +- %2 中 %1 çš„å¯¼å‡ºç›®æ ‡è·¯å¾„æœ‰å†²çª +- +- +- +- TotpDialog +- +- Timed Password +- ä¸€æ¬¡æ€§å¯†ç  +- +- +- 000000 +- 000000 +- +- +- Copy +- å¤åˆ¶ +- +- +- Expires in <b>%n</b> second(s) +- 在 <b>%n</b> 秒åŽè¿‡æœŸ +- +- +- +- TotpExportSettingsDialog +- +- Copy +- å¤åˆ¶ +- +- +- NOTE: These TOTP settings are custom and may not work with other authenticators. +- TOTP QR code dialog warning +- 注æ„:这些 TOTP 设置是自定义的,å¯èƒ½æ— æ³•ä¸Žå…¶ä»–验è¯å™¨ä¸€èµ·ä½¿ç”¨ã€‚ +- +- +- There was an error creating the QR code. +- 创建二维ç æ—¶å‡ºé”™ã€‚ +- +- +- Closing in %1 seconds. +- 在 %1 秒åŽå…³é—­ã€‚ +- +- +- +- TotpSetupDialog +- +- Setup TOTP +- 设置 TOTP +- +- +- Default RFC 6238 token settings +- 默认 RFC 6238 令牌设置 +- +- +- Steam token settings +- Steam 令牌设置 +- +- +- Use custom settings +- 使用自定义设置 +- +- +- Custom Settings +- 自定义设置 +- +- +- Time step: +- 刷新时间: +- +- +- sec +- Seconds +- 秒 +- +- +- Code size: +- 代ç é•¿åº¦ï¼š +- +- +- Secret Key: +- Secret 密钥: +- +- +- Secret key must be in Base32 format +- Secret 密钥必须为 Base32 æ ¼å¼ +- +- +- Secret key field +- Secret 密钥字段 +- +- +- Algorithm: +- 算法: +- +- +- Time step field +- 刷新时间字段 +- +- +- digits +- ä½ +- +- +- Invalid TOTP Secret +- 无效的 TOTP Secret 密钥 +- +- +- You have entered an invalid secret key. The key must be in Base32 format. +-Example: JBSWY3DPEHPK3PXP +- 您输入的 Secret 密钥无效。密钥必须是 Base32 æ ¼å¼ã€‚ +-例如:JBSWY3DPEHPK3PXP +- +- +- Confirm Remove TOTP Settings +- 确认删除 TOTP 设置 +- +- +- Are you sure you want to delete TOTP settings for this entry? +- 您确定è¦åˆ é™¤æ­¤æ¡ç›®çš„ TOTP 设置å—? +- +- +- +- URLEdit +- +- Invalid URL +- 无效 URL +- +- +- +- UpdateCheckDialog +- +- Checking for updates +- 检查更新 +- +- +- Checking for updates... +- 正在检查更新... +- +- +- Close +- 关闭 +- +- +- Update Error! +- æ›´æ–°é”™è¯¯ï¼ +- +- +- An error occurred in retrieving update information. +- 获å–æ›´æ–°ä¿¡æ¯æ—¶å‡ºé”™ã€‚ +- +- +- Please try again later. +- 请ç¨åŽå†è¯•ã€‚ +- +- +- Software Update +- 软件更新 +- +- +- A new version of KeePassXC is available! +- 有一个新的 KeePassXC 版本å¯ç”¨ï¼ +- +- +- KeePassXC %1 is now available — you have %2. +- KeePassXC %1 现已推出 — 您的版本是 %2。 +- +- +- Download it at keepassxc.org +- å‰å¾€ keepassxc.org 下载 +- +- +- You're up-to-date! +- æ‚¨æ­£åœ¨ä½¿ç”¨æœ€æ–°ç‰ˆï¼ +- +- +- KeePassXC %1 is currently the newest version available +- KeePassXC %1 是当å‰å¯ç”¨çš„最新版本 +- +- +- +- WelcomeWidget +- +- Start storing your passwords securely in a KeePassXC database +- 开始将您的密ç å®‰å…¨åœ°å­˜å‚¨åœ¨ KeePassXC æ•°æ®åº“中 +- +- +- Create new database +- 新建数æ®åº“ +- +- +- Open existing database +- 打开数æ®åº“ +- +- +- Import from KeePass 1 +- 导入 KeePass 1 æ•°æ®åº“ +- +- +- Import from CSV +- 导入 CSV 文件 +- +- +- Recent databases +- 最近的数æ®åº“ +- +- +- Welcome to KeePassXC %1 +- 欢迎使用 KeePassXC %1 +- +- +- Import from 1Password +- 从 1Password 导入 +- +- +- Open a recent database +- 打开最近的数æ®åº“ +- +- +- +- YubiKey +- +- %1 [%2] Configured Slot - %3 +- %1 [%2] é…ç½®æ’槽 - %3 +- +- +- %1 [%2] Challenge Response - Slot %3 - %4 +- %1 [%2] 质询å“应 - æ’槽 %3 - %4 +- +- +- Press +- 按键 +- +- +- Passive +- 被动 +- +- +- %1 Invalid slot specified - %2 +- %1 指定的æ’槽无效 - %2 +- +- +- The YubiKey interface has not been initialized. +- YubiKey 接å£å°šæœªåˆå§‹åŒ–。 +- +- +- Hardware key is currently in use. +- 当å‰æ­£åœ¨ä½¿ç”¨ç¡¬ä»¶å¯†é’¥ã€‚ +- +- +- Could not find hardware key with serial number %1. Please plug it in to continue. +- 找ä¸åˆ°åºåˆ—å·ä¸º %1 的硬件密钥。请æ’å…¥åŽç»§ç»­ã€‚ +- +- +- Hardware key timed out waiting for user interaction. +- 硬件密钥等待用户æ“作超时。 +- +- +- A USB error ocurred when accessing the hardware key: %1 +- 访问硬件密钥时出现 USB 错误:%1 +- +- +- Failed to complete a challenge-response, the specific error was: %1 +- 质询å“应失败,错误为:%1 +- +- +- +- YubiKeyEditWidget +- +- Refresh +- 刷新 +- +- +- YubiKey Challenge-Response +- YubiKey 质询å“应 +- +- +- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- <p>如果您拥有 <a href="https://www.yubico.com/">YubiKey</a>,则å¯ä»¥ä½¿ç”¨å®ƒæ¥æ高安全性。</p><p>YubiKey è¦æ±‚将其中一个æ’槽编程为 <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 质询å“应</a>。</p> +- +- +- Refresh hardware tokens +- 刷新实体令牌 +- +- +- Hardware key slot selection +- 选择实体密钥的æ’槽 +- +- +- Could not find any hardware keys! +- æœªæ‰¾åˆ°ä»»ä½•ç¡¬ä»¶å¯†é’¥ï¼ +- +- +- Selected hardware key slot does not support challenge-response! +- 所选硬件密钥æ’槽ä¸æ”¯æŒè´¨è¯¢å“åº”ï¼ +- +- +- Detecting hardware keys… +- 正在检测硬件密钥... +- +- +- No hardware keys detected +- 未检测到硬件密钥 +- +- +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/translations/keepassx_zh_TW.ts keepassxc-2.6.4-patched/share/translations/keepassx_zh_TW.ts +--- keepassxc-2.6.4-orig/share/translations/keepassx_zh_TW.ts 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/translations/keepassx_zh_TW.ts 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7894 +0,0 @@ +- +- +- AboutDialog +- +- About KeePassXC +- 關於 KeePassXC +- +- +- About +- 關於 +- +- +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- 回報錯誤請至:<a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- +- +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- KeePassXC éµå¾ª GNU 通用公共授權æ¢æ¬¾ (GPL) 第 2 版或(ä¾æ‚¨æ„願以)第 3 版發佈。 +- +- +- Contributors +- è²¢ç»è€… +- +- +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">上 GitHub 查看貢ç»è€…åå–®</a> +- +- +- Debug Info +- 除錯資訊 +- +- +- Include the following information whenever you report a bug: +- 回報錯誤時需包å«ä»¥ä¸‹è³‡è¨Šï¼š +- +- +- Copy to clipboard +- 複製到剪貼簿 +- +- +- Project Maintainers: +- 專案維護者: +- +- +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- KeePassXC åœ˜éšŠç‰¹åˆ¥æ„Ÿè¬ debfx 開創了原本的 KeePassX 專案。 +- +- +- +- AgentSettingsWidget +- +- Use OpenSSH for Windows instead of Pageant +- 使用 OpenSSH for Windows 而ä¸æ˜¯ Pageant +- +- +- Enable SSH Agent integration +- 啟用 SSH 代ç†æ•´åˆ +- +- +- SSH_AUTH_SOCK value +- SSH_AUTH_SOCK 值 +- +- +- SSH_AUTH_SOCK override +- SSH_AUTH_SOCK 覆蓋值 +- +- +- (empty) +- (空) +- +- +- No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. +- 找ä¸åˆ°å¯ä¾› SSH 代ç†ä½¿ç”¨çš„ socket 接å£ã€‚檢查 SSH_AUTH_SOCK 環境變數是å¦å­˜åœ¨ï¼Œæˆ–是設定一個覆蓋值。 +- +- +- SSH Agent connection is working! +- SSH 代ç†é€£ç·šæ­£åœ¨é‹ä½œï¼ +- +- +- +- ApplicationSettingsWidget +- +- Application Settings +- 應用程å¼è¨­å®š +- +- +- General +- 通用 +- +- +- Security +- 安全 +- +- +- Access error for config file %1 +- 設定檔 %1 å­˜å–錯誤 +- +- +- Icon only +- åªæœ‰åœ–示 +- +- +- Text only +- åªæœ‰æ–‡å­— +- +- +- Text beside icon +- 文字於圖示æ—é‚Š +- +- +- Text under icon +- 文字於圖示底下 +- +- +- Follow style +- è·Ÿéš¨æ¨£å¼ +- +- +- Reset Settings? +- é‡ç½®è¨­å®šï¼Ÿ +- +- +- Are you sure you want to reset all general and security settings to default? +- 您確定è¦é‡ç½®æ‰€æœ‰é€šç”¨å’Œå®‰å…¨è¨­å®šå›žé è¨­å€¼ï¼Ÿ +- +- +- Monochrome (light) +- 單色(亮) +- +- +- Monochrome (dark) +- 單色(暗) +- +- +- Colorful +- 彩色 +- +- +- You must restart the application to set the new language. Would you like to restart now? +- å¿…é ˆé‡å•Ÿæ‡‰ç”¨ç¨‹å¼ä»¥ä½¿ç”¨æ–°èªžè¨€ã€‚您是å¦è¦ç¾åœ¨é‡æ–°å•Ÿå‹•ï¼Ÿ +- +- +- +- ApplicationSettingsWidgetGeneral +- +- Basic Settings +- 基本設定 +- +- +- Startup +- å•Ÿå‹• +- +- +- Start only a single instance of KeePassXC +- åªå•Ÿå‹•å–®ä¸€ KeePassXC ç¨‹åº +- +- +- Minimize window at application startup +- 程å¼å•Ÿå‹•æ™‚將視窗最å°åŒ– +- +- +- File Management +- æª”æ¡ˆç®¡ç† +- +- +- Backup database file before saving +- 儲存資料庫檔案å‰å…ˆå‚™ä»½ +- +- +- Automatically save after every change +- æ¯æ¬¡ä¿®æ”¹å¾Œè‡ªå‹•å„²å­˜ +- +- +- Automatically reload the database when modified externally +- 有外部修改時自動é‡æ–°è¼‰å…¥è³‡æ–™åº« +- +- +- Entry Management +- é …ç›®ç®¡ç† +- +- +- Use group icon on entry creation +- 建立項目時使用群組圖示 +- +- +- Minimize instead of app exit +- 以最å°åŒ–å–ä»£é—œé–‰ç¨‹å¼ +- +- +- Show a system tray icon +- 顯示系統列圖示 +- +- +- Hide window to system tray when minimized +- 視窗最å°åŒ–時隱è—至系統列 +- +- +- Auto-Type +- 自動輸入 +- +- +- Use entry title to match windows for global Auto-Type +- 全域自動輸入下,使用項目的標題比å°è¦–窗 +- +- +- Use entry URL to match windows for global Auto-Type +- 全域自動輸入下,使用項目的 URL 比å°è¦–窗 +- +- +- Always ask before performing Auto-Type +- 執行自動輸入å‰å§‹çµ‚è©¢å• +- +- +- ms +- Milliseconds +- 毫秒 +- +- +- Movable toolbar +- 工具列å¯ç§»å‹• +- +- +- Remember previously used databases +- 記ä½ä¹‹å‰ä½¿ç”¨éŽçš„資料庫 +- +- +- Load previously open databases on startup +- 啟動時載入之å‰é–‹å•Ÿçš„資料庫 +- +- +- Remember database key files and security dongles +- 記ä½è³‡æ–™åº«çš„金鑰檔與硬體金鑰 +- +- +- Check for updates at application startup once per week +- æ¯é€±ä¸€æ¬¡æ–¼ç¨‹å¼å•Ÿå‹•æ™‚檢查更新 +- +- +- Include beta releases when checking for updates +- 檢查更新時包括 beta 版本 +- +- +- Language: +- 語言: +- +- +- (restart program to activate) +- (程å¼é‡å•Ÿå¾Œç”Ÿæ•ˆï¼‰ +- +- +- Minimize window after unlocking database +- 解鎖資料庫後將視窗最å°åŒ– +- +- +- Minimize when opening a URL +- é–‹å•Ÿ URL 時最å°åŒ– +- +- +- Hide window when copying to clipboard +- 複製到剪貼簿時隱è—視窗 +- +- +- Minimize +- 最å°åŒ– +- +- +- Drop to background +- 移至背景 +- +- +- Favicon download timeout: +- 網站圖標下載超時: +- +- +- Website icon download timeout in seconds +- 網站圖示的下載超時時間,以秒計算 +- +- +- sec +- Seconds +- 秒 +- +- +- Toolbar button style +- å·¥å…·åˆ—æŒ‰éˆ•æ¨£å¼ +- +- +- Language selection +- 語言é¸æ“‡ +- +- +- Global auto-type shortcut +- 全域自動輸入的快æ·éµ +- +- +- Auto-type character typing delay milliseconds +- 自動輸入的單一字元輸入延é²ï¼Œä»¥æ¯«ç§’計算 +- +- +- Auto-type start delay milliseconds +- 自動輸入的啟動延é²ï¼Œä»¥æ¯«ç§’計算 +- +- +- Automatically launch KeePassXC at system startup +- 系統開機時自動啟動 KeePassXC +- +- +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- 安全儲存資料庫檔案(若和 Dropbox ç­‰æœå‹™ä¸ç›¸å®¹ï¼Œå¯åœç”¨æ­¤é …) +- +- +- User Interface +- ä½¿ç”¨è€…ä»‹é¢ +- +- +- Toolbar button style: +- 工具列按鈕樣å¼ï¼š +- +- +- Use monospaced font for notes +- 備註使用等寛字體 +- +- +- Tray icon type: +- 系統列圖示類型: +- +- +- Reset settings to default… +- 將設定é‡ç½®ç‚ºé è¨­å€¼â€¦ +- +- +- Auto-Type typing delay: +- 自動輸入延é²ï¼š +- +- +- Global Auto-Type shortcut: +- 全域自動輸入的快æ·éµï¼š +- +- +- Auto-Type start delay: +- 自動輸入的啟動延é²ï¼š +- +- +- Automatically save when locking database +- 鎖定資料庫時自動儲存 +- +- +- Automatically save non-data changes when locking database +- 鎖定資料庫時,自動儲存與資料無關的變更 +- +- +- Tray icon type +- 系統列圖示類型 +- +- +- +- ApplicationSettingsWidgetSecurity +- +- Timeouts +- 超時 +- +- +- Clear clipboard after +- 多久後清除剪貼簿 +- +- +- sec +- Seconds +- 秒 +- +- +- Lock databases after inactivity of +- 閒置多久後鎖上資料庫 +- +- +- min +- 分 +- +- +- Forget TouchID after inactivity of +- 閒置多久後éºå¿˜ TouchID +- +- +- Convenience +- 便利性 +- +- +- Lock databases when session is locked or lid is closed +- 鎖定工作階段或蓋上螢幕時,將資料庫鎖上 +- +- +- Forget TouchID when session is locked or lid is closed +- 鎖定工作階段或蓋上螢幕時,將 TouchID éºå¿˜ +- +- +- Lock databases after minimizing the window +- 最å°åŒ–視窗後鎖上資料庫 +- +- +- Re-lock previously locked database after performing Auto-Type +- 執行自動輸入後,將之å‰éŽ–定的資料庫é‡æ–°éŽ–上 +- +- +- Hide passwords in the entry preview panel +- éš±è—é …ç›®é è¦½é¢æ¿å…§çš„密碼 +- +- +- Hide entry notes by default +- é è¨­éš±è—項目備註 +- +- +- Privacy +- éš±ç§ +- +- +- Use DuckDuckGo service to download website icons +- 使用 DuckDuckGo æœå‹™ä¸‹è¼‰ç¶²ç«™åœ–示 +- +- +- Clipboard clear seconds +- 清除剪貼簿的é è¨‚時間,以秒計算 +- +- +- Touch ID inactivity reset +- Touch ID 閒置時間é‡ç½® +- +- +- Database lock timeout seconds +- 資料庫鎖定超時時間,以秒計算 +- +- +- min +- Minutes +- 分 +- +- +- Clear search query after +- 多久後清除æœå°‹å­—è©ž +- +- +- Require password repeat when it is visible +- 密碼å¯è¦‹æ™‚ä»è¦æ±‚é‡è¤‡è¼¸å…¥å¯†ç¢¼ +- +- +- Hide passwords when editing them +- ç·¨è¼¯å¯†ç¢¼æ™‚å°‡å…¶éš±è— +- +- +- Use placeholder for empty password fields +- 在空的密碼欄ä½å¡«å…¥ä½”ä½ç¬¦ +- +- +- +- AutoType +- +- Couldn't find an entry that matches the window title: +- 找ä¸åˆ°ä»»ä½•ç¬¦åˆè¦–窗標題的項目: +- +- +- Auto-Type - KeePassXC +- 自動輸入 - KeePassXC +- +- +- Auto-Type +- 自動輸入 +- +- +- The Syntax of your Auto-Type statement is incorrect! +- 自動輸入敘述的語法ä¸æ­£ç¢ºï¼ +- +- +- This Auto-Type command contains a very long delay. Do you really want to proceed? +- 此自動輸入命令包å«å¾ˆé•·çš„延é²ã€‚真的è¦ç¹¼çºŒï¼Ÿ +- +- +- This Auto-Type command contains very slow key presses. Do you really want to proceed? +- 此自動輸入命令包å«éžå¸¸ç·©æ…¢çš„按éµæ“作。真的è¦ç¹¼çºŒï¼Ÿ +- +- +- This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? +- 此自動輸入命令包å«é »ç¹é‡è¤‡çš„åƒæ•¸ã€‚真的è¦ç¹¼çºŒï¼Ÿ +- +- +- Permission Required +- 需è¦æ¬Šé™ +- +- +- KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC 需è¦ã€Œè¼”助使用ã€æ¬Šé™æ‰èƒ½åŸ·è¡Œé …目層級的自動輸入。若您已授予權é™ï¼Œå¯èƒ½è¦é‡æ–°å•Ÿå‹• KeePassXC。 +- +- +- +- AutoTypeAssociationsModel +- +- Window +- 視窗 +- +- +- Sequence +- åºåˆ— +- +- +- Default sequence +- é è¨­åºåˆ— +- +- +- +- AutoTypeMatchModel +- +- Group +- 群組 +- +- +- Title +- 標題 +- +- +- Username +- 使用者å稱 +- +- +- Sequence +- åºåˆ— +- +- +- +- AutoTypeMatchView +- +- Copy &username +- 複製使用者å稱 (&U) +- +- +- Copy &password +- 複製密碼 (&P) +- +- +- +- AutoTypePlatformMac +- +- Permission Required +- 需è¦æ¬Šé™ +- +- +- KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. +- KeePassXC 需è¦ã€Œè¼”助使用ã€å’Œã€Œèž¢å¹•éŒ„製ã€æ¬Šé™ä»¥åŸ·è¡Œå…¨åŸŸè‡ªå‹•è¼¸å…¥ã€‚使用視窗標題尋找項目時需è¦èž¢å¹•éŒ„製功能。若您已授予權é™ï¼Œå¯èƒ½è¦é‡æ–°å•Ÿå‹• KeePassXC。 +- +- +- +- AutoTypeSelectDialog +- +- Auto-Type - KeePassXC +- 自動輸入 - KeePassXC +- +- +- Select entry to Auto-Type: +- é¸æ“‡è¦è‡ªå‹•è¼¸å…¥çš„項目: +- +- +- Search... +- æœå°‹... +- +- +- +- BrowserAccessControlDialog +- +- KeePassXC - Browser Access Request +- KeePassXC ç€è¦½å™¨æ“´å……çš„å­˜å–è¦æ±‚ +- +- +- %1 is requesting access to the following entries: +- %1 è¦æ±‚å­˜å–以下項目: +- +- +- Remember access to checked entries +- 記ä½å°æ‰€é¸é …ç›®çš„å­˜å– +- +- +- Remember +- è¨˜ä½ +- +- +- Allow access to entries +- å…許存å–é …ç›® +- +- +- Allow Selected +- å…è¨±æ‰€é¸ +- +- +- Deny All +- 全部拒絕 +- +- +- Disable for this site +- å°æ­¤ç¶²ç«™åœç”¨ +- +- +- +- BrowserEntrySaveDialog +- +- KeePassXC-Browser Save Entry +- KeePassXC ç€è¦½å™¨æ“´å……ä¿å­˜é …ç›® +- +- +- Ok +- 確定 +- +- +- Cancel +- å–消 +- +- +- You have multiple databases open. +-Please select the correct database for saving credentials. +- 您有數個開啟的資料庫。 +-è«‹é¸æ“‡è¦ä¿å­˜æ†‘證的資料庫。 +- +- +- +- BrowserService +- +- KeePassXC: New key association request +- KeePassXC: 新的金鑰關è¯è¦æ±‚ +- +- +- Save and allow access +- 儲存並å…è¨±å­˜å– +- +- +- KeePassXC: Overwrite existing key? +- KeePassXC: 覆蓋ç¾æœ‰é‡‘鑰? +- +- +- A shared encryption key with the name "%1" already exists. +-Do you want to overwrite it? +- 已存在å稱為「%1ã€çš„共用加密金鑰。 +-是å¦è¦è¦†è“‹å®ƒï¼Ÿ +- +- +- KeePassXC: Update Entry +- KeePassXC: æ›´æ–°é …ç›® +- +- +- Do you want to update the information in %1 - %2? +- 是å¦è¦æ›´æ–° %1 - %2 內的資訊? +- +- +- Abort +- 中止 +- +- +- Converting attributes to custom data… +- 正在轉æ›å±¬æ€§è‡³è‡ªå®šç¾©è³‡æ–™â€¦ +- +- +- KeePassXC: Converted KeePassHTTP attributes +- KeePassXC: è½‰æ› KeePassHTTP 屬性 +- +- +- Successfully converted attributes from %1 entry(s). +-Moved %2 keys to custom data. +- å·²æˆåŠŸè½‰æ› %1 個項目的屬性。 +-已移動 %2 組金鑰至自定義資料。 +- +- +- Successfully moved %n keys to custom data. +- å·²æˆåŠŸç§»å‹• %n 組金鑰至自定義資料。 +- +- +- KeePassXC: No entry with KeePassHTTP attributes found! +- KeePassXC: 找ä¸åˆ°æ“有 KeePassHTTP å±¬æ€§çš„é …ç›®ï¼ +- +- +- The active database does not contain an entry with KeePassHTTP attributes. +- ç›®å‰ä½œç”¨çš„資料庫中沒有任何項目æ“有 KeePassHTTP 屬性。 +- +- +- KeePassXC: Legacy browser integration settings detected +- KeePassXC: åµæ¸¬åˆ°éŽæ™‚çš„ç€è¦½å™¨æ•´åˆè¨­å®š +- +- +- KeePassXC: Create a new group +- KeePassXC: 建立新群組 +- +- +- A request for creating a new group "%1" has been received. +-Do you want to create this group? +- +- 已收到建立新群組「%1ã€çš„è¦æ±‚。 +-是å¦è¦å»ºç«‹æ­¤ç¾¤çµ„? +- +- +- +- Your KeePassXC-Browser settings need to be moved into the database settings. +-This is necessary to maintain your current browser connections. +-Would you like to migrate your existing settings now? +- 需è¦å°‡æ‚¨çš„ KeePassXC ç€è¦½å™¨æ“´å……設定移動至資料庫設定。 +-這是為了ä¿æŒæ‚¨ç›®å‰çš„ç€è¦½å™¨é€£çµã€‚ +-您是å¦è¦ç¾åœ¨ç§»è½‰æ—¢æœ‰è¨­å®šï¼Ÿ +- +- +- Don't show this warning again +- ä¸å†é¡¯ç¤ºæ­¤è­¦å‘Š +- +- +- You have received an association request for the following database: +-%1 +- +-Give the connection a unique name or ID, for example: +-chrome-laptop. +- 你已經接收到以下資料庫的關è¯è«‹æ±‚: +-%1 +- +-為連線給予一個ç¨ç‰¹çš„å稱或是 ID,例如: +-chrome-laptop。 +- +- +- +- BrowserSettingsWidget +- +- Dialog +- å°è©±æ–¹å¡Š +- +- +- This is required for accessing your databases with KeePassXC-Browser +- 使用 KeePassXC ç€è¦½å™¨æ“´å……å­˜å–您的資料庫 +- +- +- Enable browser integration +- 啟用ç€è¦½å™¨æ•´åˆ +- +- +- General +- 一般 +- +- +- Browsers installed as snaps are currently not supported. +- ç›®å‰ä¸¦ä¸æ”¯æ´ä»¥ Snap 套件安è£çš„ç€è¦½å™¨ã€‚ +- +- +- Enable integration for these browsers: +- 為以下ç€è¦½å™¨å•Ÿç”¨æ•´åˆåŠŸèƒ½ï¼š +- +- +- Vivaldi +- Vivaldi +- +- +- &Edge +- &Edge +- +- +- Firefox +- Firefox +- +- +- Tor Browser +- Tor Browser +- +- +- Brave +- Brave +- +- +- Google Chrome +- Google Chrome +- +- +- Chromium +- Chromium +- +- +- Show a notification when credentials are requested +- Credentials mean login data requested via browser extension +- 出ç¾æ†‘è­‰è¦æ±‚時顯示通知 +- +- +- Request to unlock the database if it is locked +- 資料庫被鎖定時è¦æ±‚解鎖 +- +- +- Only entries with the same scheme (http://, https://, ...) are returned. +- åªå›žå‚³å…·æœ‰ç›¸åŒå”定 (http://, https://, ...) 的項目。 +- +- +- Match URL scheme (e.g., https://...) +- åŒ¹é… URL å”定 (e.g., https://...) +- +- +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- å°çµ¦å®šçš„ URL 回傳最佳匹é…項目,而éžæ‰€æœ‰å’Œç¶²åŸŸå匹é…的項目。 +- +- +- Return only best-matching credentials +- åªå›žå‚³æœ€ä½³ç¬¦åˆçš„憑證 +- +- +- Returns expired credentials. String [expired] is added to the title. +- å¯å›žå‚³éŽæœŸçš„憑證。標題會加入 [å·²éŽæœŸ] 字串。 +- +- +- Allow returning expired credentials +- å…許回傳éŽæœŸçš„憑證 +- +- +- All databases connected to the extension will return matching credentials. +- 所有與擴充連çµçš„資料庫將回傳相符的憑證。 +- +- +- Search in all opened databases for matching credentials +- Credentials mean login data requested via browser extension +- 在所有開啟的資料庫內æœå°‹ç›¸ç¬¦çš„憑證 +- +- +- Sort matching credentials by title +- Credentials mean login data requested via browser extension +- ä¾æ¨™é¡ŒæŽ’åºç¬¦åˆçš„憑證 +- +- +- Sort matching credentials by username +- Credentials mean login data requested via browser extension +- ä¾ç”¨æˆ¶å稱排åºç¬¦åˆçš„憑證 +- +- +- Advanced +- 進階 +- +- +- Never ask before accessing credentials +- Credentials mean login data requested via browser extension +- å­˜å–憑證å‰æ°¸ä¸è©¢å• +- +- +- Never ask before updating credentials +- Credentials mean login data requested via browser extension +- 更新憑證å‰æ°¸ä¸è©¢å• +- +- +- Do not ask permission for HTTP Basic Auth +- An extra HTTP Basic Auth setting +- ä¸è¦è©¢å• HTTP 基本èªè­‰çš„æ¬Šé™ +- +- +- Automatically creating or updating string fields is not supported. +- 並ä¸æ”¯æ´è‡ªå‹•å»ºç«‹æˆ–更新文字欄ä½ã€‚ +- +- +- Return advanced string fields which start with "KPH: " +- 回傳以 "KPH: " é–‹é ­çš„é€²éšŽæ–‡å­—æ¬„ä½ +- +- +- Don't display the popup suggesting migration of legacy KeePassHTTP settings. +- ä¸è¦é¡¯ç¤ºå»ºè­°ç§»è½‰éŽæ™‚ KeePassHTTP 設定的彈出視窗。 +- +- +- Do not prompt for KeePassHTTP settings migration. +- ä¸è¦æ示 KeePassHTTP 設定移轉。 +- +- +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- 啟動時,自動將 KeePassXC 或 keepassxc-proxy 二進ä½æª”路徑更新至本地消æ¯è…³æœ¬ã€‚ +- +- +- Update native messaging manifest files at startup +- 啟動時,更新本地消æ¯é…置檔 +- +- +- Use a custom proxy location if you installed a proxy manually. +- 若您有自行安è£ä»£ç†ï¼Œå‰‡ä½¿ç”¨è‡ªå®šç¾©çš„代ç†ä½ç½®ã€‚ +- +- +- Use a custom proxy location: +- Meant is the proxy for KeePassXC-Browser +- 使用自定義的代ç†ä½ç½®ï¼š +- +- +- Custom proxy location field +- 自定義代ç†ä½ç½®æ¬„ä½ +- +- +- Browser for custom proxy file +- ç€è¦½è‡ªå®šç¾©çš„代ç†æª”案 +- +- +- Browse... +- Button for opening file dialog +- ç€è¦½... +- +- +- Use a custom browser configuration location: +- 使用自定義的ç€è¦½å™¨è¨­å®šæª”ä½ç½®ï¼š +- +- +- Browser type: +- ç€è¦½å™¨é¡žåž‹ï¼š +- +- +- Toolbar button style +- å·¥å…·åˆ—æŒ‰éˆ•æ¨£å¼ +- +- +- Config Location: +- 設定檔ä½ç½®ï¼š +- +- +- Custom browser location field +- 自定義ç€è¦½å™¨ä½ç½®æ¬„ä½ +- +- +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- +- +- Browse for custom browser path +- ç€è¦½è‡ªå®šç¾©çš„ç€è¦½å™¨è·¯å¾‘ +- +- +- Custom extension ID: +- 自定義擴充 ID: +- +- +- Custom extension ID +- 自定義擴充 ID +- +- +- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 +- 由於 Snap 的沙盒機制,您必須執行一個腳本來啟用ç€è¦½å™¨æ•´åˆã€‚<br />您å¯ä»¥å¾ž %1 å–得這個腳本 +- +- +- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 +- éœ€è¦ KeePassXC ç€è¦½å™¨æ“´å……æ‰èƒ½ä½¿ç”¨æ•´åˆåŠŸèƒ½ã€‚<br />å¯ä¾› %1 å’Œ %2 å’Œ %3 下載。%4 +- +- +- Please see special instructions for browser extension use below +- è«‹åƒé–±ä»¥ä¸‹çš„具體指示,學習如何使用ç€è¦½å™¨æ“´å±• +- +- +- <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. +- <b>錯誤:</b>找ä¸åˆ°è‡ªå®šç¾©çš„代ç†ä½ç½®ï¼<br/>沒有代ç†ç¨‹å¼ï¼Œç€è¦½å™¨æ•´åˆå°‡ ç„¡ 法 é‹ ä½œ 。 +- +- +- <b>Warning:</b> The following options can be dangerous! +- <b>警告:</b>以下é¸é …å­˜åœ¨ä¸€å®šé¢¨éšªï¼ +- +- +- Executable Files +- å¯åŸ·è¡Œæª”案 +- +- +- All Files +- 所有檔案 +- +- +- Select custom proxy location +- é¸æ“‡è‡ªå®šç¾©çš„代ç†ä½ç½® +- +- +- Select native messaging host folder location +- é¸æ“‡æœ¬åœ°æ¶ˆæ¯ä¸»æ©Ÿçš„資料夾ä½ç½® +- +- +- +- CloneDialog +- +- Clone Options +- 複製é¸é … +- +- +- Append ' - Clone' to title +- 在標題後追加「 - 複製ã€å­—樣 +- +- +- Replace username and password with references +- 以引用資料å–代使用者å稱與密碼 +- +- +- Copy history +- 複製歷å²è¨˜éŒ„ +- +- +- +- CsvImportWidget +- +- Import CSV fields +- 匯入 CSV æ¬„ä½ +- +- +- filename +- 檔案å稱 +- +- +- size, rows, columns +- 大å°ã€åˆ—ã€æ¬„ä½ +- +- +- Encoding +- 編碼方法 +- +- +- Codec +- ç·¨/解碼 +- +- +- Text is qualified by +- 文字包裹符為 +- +- +- Fields are separated by +- 欄ä½åˆ†éš”符為 +- +- +- Comments start with +- 註解起始符為 +- +- +- Consider '\' an escape character +- å°‡ '\' 當作跳脫符號 +- +- +- Preview +- é è¦½ +- +- +- Imported from CSV file +- 已從 CSV 檔匯入 +- +- +- Original data: +- 原始資料: +- +- +- Error +- 錯誤 +- +- +- Error(s) detected in CSV file! +- 在 CSV 檔中åµæ¸¬åˆ°éŒ¯èª¤ï¼ +- +- +- [%n more message(s) skipped] +- [è·³éŽé¡å¤– %n 項訊æ¯] +- +- +- CSV import: writer has errors: +-%1 +- CSV 匯入:寫入器出錯: +-%1 +- +- +- Text qualification +- 文字包裹 +- +- +- Field separation +- 欄ä½åˆ†éš” +- +- +- Number of header lines to discard +- 從開頭起算è¦æ‹‹æ£„的列數 +- +- +- CSV import preview +- CSV 匯入é è¦½ +- +- +- Column Association +- 欄ä½é—œè¯ +- +- +- Last Modified +- 最後編輯 +- +- +- Password +- 密碼 +- +- +- Created +- 建立於 +- +- +- Notes +- 備註 +- +- +- Title +- 標題 +- +- +- Group +- 群組 +- +- +- URL +- URL +- +- +- Username +- 使用者å稱 +- +- +- Header lines skipped +- è·³éŽé–‹é ­åˆ—數 +- +- +- First line has field names +- 首列為欄ä½å稱 +- +- +- Not Present +- ä¸é¡¯ç¤º +- +- +- Column %1 +- æ¬„ä½ %1 +- +- +- TOTP +- TOTP +- +- +- Icon +- 圖示 +- +- +- +- CsvParserModel +- +- %n column(s) +- %n å€‹æ¬„ä½ +- +- +- %1, %2, %3 +- file info: bytes, rows, columns +- %1ã€%2ã€%3 +- +- +- %n byte(s) +- %n ä½å…ƒçµ„ +- +- +- %n row(s) +- %n 列 +- +- +- +- Database +- +- File %1 does not exist. +- 檔案 %1 ä¸å­˜åœ¨ã€‚ +- +- +- Unable to open file %1. +- 無法開啟檔案 %1。 +- +- +- Error while reading the database: %1 +- 讀å–資料庫時出錯:%1 +- +- +- File cannot be written as it is opened in read-only mode. +- 檔案以唯ç¨æ¨¡å¼é–‹å•Ÿï¼Œç„¡æ³•å¯«å…¥ã€‚ +- +- +- Key not transformed. This is a bug, please report it to the developers! +- 金鑰未被轉æ›ã€‚è«‹å‘é–‹ç™¼è€…å›žå ±æ­¤é …éŒ¯èª¤ï¼ +- +- +- %1 +-Backup database located at %2 +- %1 +-備份資料庫ä½æ–¼ %2 +- +- +- Could not save, database does not point to a valid file. +- 無法儲存,資料庫未指å‘任何有效檔案。 +- +- +- Could not save, database file is read-only. +- 無法儲存,資料庫檔案為唯讀狀態。 +- +- +- Database file has unmerged changes. +- 資料庫檔案有未åˆä½µçš„變更。 +- +- +- Recycle Bin +- 回收桶 +- +- +- Passwords +- Root group name +- 密碼 +- +- +- Database save is already in progress. +- 資料庫儲存已在進行當中。 +- +- +- Could not save, database has not been initialized! +- 無法儲存,資料庫尚未åˆå§‹åŒ–ï¼ +- +- +- +- DatabaseOpenDialog +- +- Unlock Database - KeePassXC +- 解鎖資料庫 - KeePassXC +- +- +- +- DatabaseOpenWidget +- +- Key File: +- 金鑰檔: +- +- +- Refresh +- æ›´æ–° +- +- +- Don't show this warning again +- ä¸å†é¡¯ç¤ºæ­¤è­¦å‘Š +- +- +- All files +- 所有檔案 +- +- +- Key files +- 金鑰檔案 +- +- +- Select key file +- é¸æ“‡é‡‘鑰檔案 +- +- +- Failed to open key file: %1 +- 開啟金鑰檔案失敗:%1 +- +- +- Unlock KeePassXC Database +- 解鎖 KeePassXC 資料庫 +- +- +- Enter Password: +- 輸入密碼: +- +- +- Password field +- å¯†ç¢¼æ¬„ä½ +- +- +- Hardware key slot selection +- 硬體金鑰槽ä½é¸æ“‡ +- +- +- Browse for key file +- ç€è¦½é‡‘鑰檔案 +- +- +- Browse... +- ç€è¦½... +- +- +- Refresh hardware tokens +- 更新硬體令牌 +- +- +- Hardware Key: +- 硬體金鑰: +- +- +- Hardware key help +- 硬體金鑰幫助 +- +- +- TouchID for Quick Unlock +- TouchID 快速解鎖 +- +- +- Unlock failed and no password given +- 解鎖失敗且未æ供密碼 +- +- +- Unlocking the database failed and you did not enter a password. +-Do you want to retry with an "empty" password instead? +- +-To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. +- 解鎖資料庫失敗,且您未輸入任何密碼。 +-是å¦è¦æ”¹ç”¨ã€Œç©ºç™½ã€å¯†ç¢¼é‡æ–°å˜—試? +- +-為了é¿å…出ç¾æ­¤éŒ¯èª¤ï¼Œæ‚¨å¿…é ˆå‰å¾€ã€Œè³‡æ–™åº«è¨­å®š / 安全ã€ä¸¦é‡æ–°è¨­å®šæ‚¨çš„密碼。 +- +- +- Retry with empty password +- 以空白密碼é‡è©¦ +- +- +- Enter Additional Credentials (if any): +- 輸入é¡å¤–的驗證資訊(如有需è¦ï¼‰ï¼š +- +- +- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +-<p>Click for more information...</p> +- <p>您å¯ä»¥ä½¿ç”¨è«¸å¦‚ <strong>YubiKey</strong> 或 <strong>OnlyKey</strong> 等實體安全金鑰,åªè¦å®ƒå€‘æ“有å¯è¨­ç½® HMAC-SHA1 的槽ä½ã€‚</p> +-<p>點擊ç²å¾—更多資訊...</p> +- +- +- Key file help +- 金鑰檔案幫助 +- +- +- ? +- ? +- +- +- Cannot use database file as key file +- 無法使用資料庫檔案作為金鑰檔案 +- +- +- You cannot use your database file as a key file. +-If you do not have a key file, please leave the field empty. +- 您ä¸èƒ½ä½¿ç”¨è³‡æ–™åº«ä½œç‚ºè‡ªå·±çš„金鑰檔案。 +-若您沒有金鑰檔案,請將欄ä½ç•™ç©ºã€‚ +- +- +- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> +- <p>除了密碼,您還å¯ä»¥ä½¿ç”¨ä¸€ä»½è¢å¯†æª”案來加強資料庫的安全性。使用資料庫的安全設定å¯ä»¥ç”¢ç”Ÿè©²æª”案。</p><p>這個<strong>並ä¸æ˜¯</strong>您的 *.kdbx 資料庫檔案ï¼<br>若您沒有金鑰檔案,則留空欄ä½ã€‚</p><p>點擊ç²å¾—更多資訊...</p> +- +- +- Key file to unlock the database +- 解鎖資料庫的金鑰檔案 +- +- +- Please touch the button on your YubiKey! +- 請觸摸您 YubiKey ä¸Šçš„æŒ‰éˆ•ï¼ +- +- +- Detecting hardware keys… +- 正在åµæ¸¬ç¡¬é«”金鑰… +- +- +- No hardware keys detected +- 未åµæ¸¬åˆ°ç¡¬é«”金鑰 +- +- +- Select hardware key… +- é¸æ“‡ç¡¬é«”金鑰… +- +- +- Old key file format +- èˆŠçš„é‡‘é‘°æª”æ¡ˆæ ¼å¼ +- +- +- You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database / Database Security / Change Key File.</strong><br> +- 您使用的金鑰檔案格å¼ç‰ˆæœ¬éŽèˆŠï¼ŒKeePassXC å¯èƒ½<br>在未來åœæ­¢æ”¯æ´ã€‚<br><br>請考慮é€éŽä»¥ä¸‹æ–¹å¼ç”¢ç”Ÿä¸€çµ„新的金鑰檔案:<br><strong>資料庫 / 資料庫安全 / 更改金鑰檔案。</strong><br> +- +- +- +- DatabaseSettingWidgetMetaData +- +- Passwords +- 密碼 +- +- +- +- DatabaseSettingsDialog +- +- Advanced Settings +- 進階設定 +- +- +- General +- 通用 +- +- +- Security +- 安全 +- +- +- Encryption Settings +- 加密設定 +- +- +- Browser Integration +- ç€è¦½å™¨æ•´åˆ +- +- +- Database Credentials +- 資料庫憑證 +- +- +- +- DatabaseSettingsWidgetBrowser +- +- KeePassXC-Browser settings +- KeePassXC ç€è¦½å™¨æ“´å……設定 +- +- +- Stored keys +- å·²ä¿å­˜é‡‘é‘° +- +- +- Remove +- 移除 +- +- +- Delete the selected key? +- 刪除所é¸é‡‘鑰? +- +- +- Do you really want to delete the selected key? +-This may prevent connection to the browser plugin. +- 真的è¦åˆªé™¤é¸æ“‡çš„金鑰? +-這å¯èƒ½å°Žè‡´èˆ‡ç€è¦½å™¨æ’件的連çµå—阻。 +- +- +- Key +- éµ +- +- +- Value +- 值 +- +- +- Enable Browser Integration to access these settings. +- 啟用ç€è¦½å™¨æ•´åˆä¾†å­˜å–這些設定。 +- +- +- Disconnect all browsers +- 中斷與所有ç€è¦½å™¨çš„é€£çµ +- +- +- Do you really want to disconnect all browsers? +-This may prevent connection to the browser plugin. +- 真的è¦ä¸­æ–·èˆ‡æ‰€æœ‰ç€è¦½å™¨çš„連çµï¼Ÿ +-這å¯èƒ½å°Žè‡´èˆ‡ç€è¦½å™¨æ’件的連çµå—阻。 +- +- +- KeePassXC: No keys found +- KeePassXC: 找ä¸åˆ°é‡‘é‘° +- +- +- No shared encryption keys found in KeePassXC settings. +- 在 KeePassXC 設定中找ä¸åˆ°å…±äº«åŠ å¯†é‡‘鑰。 +- +- +- KeePassXC: Removed keys from database +- KeePassXC: 從資料庫移除金鑰 +- +- +- Successfully removed %n encryption key(s) from KeePassXC settings. +- æˆåŠŸå¾ž KeePassXC 設定中移除 %n 組加密金鑰。 +- +- +- Forget all site-specific settings on entries +- éºå¿˜é …目的網站個別設定 +- +- +- Do you really want forget all site-specific settings on every entry? +-Permissions to access entries will be revoked. +- 真的è¦éºå¿˜æ¯å€‹é …目的所有網站個別設定? +-å­˜å–項目的權é™å°‡æœƒè¢«æ’¤éŠ·ã€‚ +- +- +- Removing stored permissions… +- 正在移除ä¿å­˜çš„權é™â€¦ +- +- +- Abort +- 中止 +- +- +- KeePassXC: Removed permissions +- KeePassXC: å·²ç§»é™¤æ¬Šé™ +- +- +- Successfully removed permissions from %n entry(s). +- æˆåŠŸå¾ž %n 個項目移除權é™ã€‚ +- +- +- KeePassXC: No entry with permissions found! +- KeePassXC: 找ä¸åˆ°æ“有權é™çš„é …ç›®ï¼ +- +- +- The active database does not contain an entry with permissions. +- ç›®å‰ä½œç”¨çš„資料庫中沒有任何項目æ“有權é™ã€‚ +- +- +- Move KeePassHTTP attributes to custom data +- 移動 KeePassHTTP 屬性至自定義資料 +- +- +- Do you really want to move all legacy browser integration data to the latest standard? +-This is necessary to maintain compatibility with the browser plugin. +- 真的è¦å°‡æ‰€æœ‰éŽæ™‚çš„ç€è¦½å™¨æ•´åˆè³‡æ–™é·ç§»è‡³æœ€æ–°æ¨™æº–? +-這是為了維æŒèˆ‡ç€è¦½å™¨æ’件的相容性。 +- +- +- Stored browser keys +- å·²ä¿å­˜çš„ç€è¦½å™¨é‡‘é‘° +- +- +- Remove selected key +- 移除所é¸é‡‘é‘° +- +- +- Move KeePassHTTP attributes to KeePassXC-Browser custom data +- 移動 KeePassHTTP 屬性至 KeePassXC ç€è¦½å™¨æ“´å……的自定義資料 +- +- +- Refresh database root group ID +- 更新資料庫的根群組 ID +- +- +- Created +- 建立於 +- +- +- Refresh database ID +- 更新資料庫 ID +- +- +- Do you really want refresh the database ID? +-This is only necessary if your database is a copy of another and the browser extension cannot connect. +- 真的è¦æ›´æ–°è³‡æ–™åº«çš„ ID? +-åªæœ‰ç•¶è³‡æ–™åº«å±¬æ–¼å¦ä¸€ä»½è¤‡æœ¬ï¼Œä¸”ç€è¦½å™¨æ“´å……無法連çµæ™‚,æ‰æœ‰å¿…è¦é€²è¡Œã€‚ +- +- +- +- DatabaseSettingsWidgetDatabaseKey +- +- Add additional protection... +- 加入é¡å¤–ä¿è­·... +- +- +- No password set +- 未設定密碼 +- +- +- WARNING! You have not set a password. Using a database without a password is strongly discouraged! +- +-Are you sure you want to continue without a password? +- 警告ï¼æ‚¨å°šæœªè¨­å®šä¸€çµ„密碼。強烈ä¸å»ºè­°ä½¿ç”¨ä¸å¸¶å¯†ç¢¼çš„è³‡æ–™åº«ï¼ +- +-您確定è¦åœ¨æ²’有密碼的情形下繼續? +- +- +- Continue without password +- ä¸ä½¿ç”¨å¯†ç¢¼ä¸¦ç¹¼çºŒ +- +- +- No encryption key added +- 未加入加密金鑰 +- +- +- You must add at least one encryption key to secure your database! +- 您必須加入至少一組加密金鑰來ä¿è­·æ‚¨çš„è³‡æ–™åº«ï¼ +- +- +- Unknown error +- 未知錯誤 +- +- +- Failed to change database credentials +- 更改資料庫憑證失敗 +- +- +- +- DatabaseSettingsWidgetEncryption +- +- Encryption Algorithm: +- 加密演算法: +- +- +- AES: 256 Bit (default) +- AES: 256 Bit(é è¨­ï¼‰ +- +- +- Twofish: 256 Bit +- Twofish: 256 Bit +- +- +- Key Derivation Function: +- 金鑰推導函å¼ï¼š +- +- +- Transform rounds: +- 轉æ›å›žåˆæ•¸ï¼š +- +- +- Memory Usage: +- 記憶體用é‡ï¼š +- +- +- Parallelism: +- 平行é‹ç®—: +- +- +- Decryption Time: +- 解密時間: +- +- +- ?? s +- ?? 秒 +- +- +- Change +- 更改 +- +- +- Higher values offer more protection, but opening the database will take longer. +- 較高的值æ供較多ä¿è­·ï¼Œä½†éœ€è¦æ›´é•·çš„時間開啟資料庫。 +- +- +- Database format: +- 資料庫格å¼ï¼š +- +- +- This is only important if you need to use your database with other programs. +- åªæœ‰åœ¨æ‚¨éœ€è¦ä½¿ç”¨å…¶ä»–程å¼è™•ç†æ­¤è³‡æ–™åº«æ™‚æ‰é‡è¦ã€‚ +- +- +- KDBX 4.0 (recommended) +- KDBX 4.0(推薦) +- +- +- KDBX 3.1 +- KDBX 3.1 +- +- +- unchanged +- Database decryption time is unchanged +- ä¸è®Š +- +- +- Number of rounds too high +- Key transformation rounds +- 回åˆæ•¸å¤ªé«˜ +- +- +- You are using a very high number of key transform rounds with Argon2. +- +-If you keep this number, your database may take hours or days (or even longer) to open! +- 您為 Argon2 使用了éžå¸¸é«˜çš„金鑰轉æ›å›žåˆæ•¸ã€‚ +- +-如果執æ„使用此數é‡ï¼Œæ‚¨çš„資料庫å¯èƒ½è¦èŠ±è²»æ•¸å°æ™‚ã€æ•¸å¤©ï¼ˆç”šè‡³æ›´ä¹…時間)æ‰èƒ½æ‰“é–‹ï¼ +- +- +- Understood, keep number +- 了解,ä»ä½¿ç”¨æ­¤æ•¸é‡ +- +- +- Cancel +- å–消 +- +- +- Number of rounds too low +- Key transformation rounds +- 回åˆæ•¸å¤ªä½Ž +- +- +- You are using a very low number of key transform rounds with AES-KDF. +- +-If you keep this number, your database may be too easy to crack! +- 您為 AES-KDF 使用了éžå¸¸ä½Žçš„金鑰轉æ›å›žåˆæ•¸ã€‚ +- +-如果執æ„使用此數é‡ï¼Œè¦ç ´è§£æ‚¨çš„資料庫會變得éžå¸¸å®¹æ˜“ï¼ +- +- +- KDF unchanged +- KDF ä¸è®Š +- +- +- Failed to transform key with new KDF parameters; KDF unchanged. +- 無法用新的 KDF åƒæ•¸è½‰æ›é‡‘é‘°ï¼›KDF ä¿æŒä¸è®Šã€‚ +- +- +- MiB +- Abbreviation for Mebibytes (KDF settings) +- MiB +- +- +- thread(s) +- Threads for parallel execution (KDF settings) +- 執行緒 +- +- +- Change existing decryption time +- 更改目å‰è§£å¯†æ™‚é–“ +- +- +- Decryption time in seconds +- 解密時間,以秒計算 +- +- +- Database format +- è³‡æ–™åº«æ ¼å¼ +- +- +- Encryption algorithm +- 加密演算法 +- +- +- Key derivation function +- é‡‘é‘°æŽ¨å°Žå‡½å¼ +- +- +- Transform rounds +- 轉æ›å›žåˆæ•¸ +- +- +- Memory usage +- è¨˜æ†¶é«”ç”¨é‡ +- +- +- Parallelism +- 平行é‹ç®— +- +- +- ?? ms +- ?? 毫秒 +- +- +- ? s +- ? 秒 +- +- +- +- DatabaseSettingsWidgetFdoSecrets +- +- Exposed Entries +- 已開放項目 +- +- +- Don't expose this database +- ä¸è¦é–‹æ”¾æ­¤è³‡æ–™åº« +- +- +- Expose entries under this group: +- 開放此群組下的項目: +- +- +- Enable Secret Service to access these settings. +- 啟用ä¿å¯†æœå‹™ä¾†å­˜å–這些設定。 +- +- +- +- DatabaseSettingsWidgetGeneral +- +- Database Meta Data +- 資料庫的中繼資料 +- +- +- Database name: +- 資料庫å稱: +- +- +- Database description: +- 資料庫æ述: +- +- +- Default username: +- é è¨­ä½¿ç”¨è€…å稱: +- +- +- History Settings +- æ­·å²è¨­å®š +- +- +- Max. history items: +- 最大歷å²è¨˜éŒ„數: +- +- +- Max. history size: +- 最大歷å²è¨˜éŒ„大å°ï¼š +- +- +- MiB +- MiB +- +- +- Use recycle bin +- 使用回收桶 +- +- +- Additional Database Settings +- 其他資料庫設定 +- +- +- Database name field +- 資料庫åç¨±æ¬„ä½ +- +- +- Database description field +- 資料庫æè¿°æ¬„ä½ +- +- +- Default username field +- é è¨­ä½¿ç”¨è€…åç¨±æ¬„ä½ +- +- +- Maximum number of history items per entry +- æ¯å€‹é …目的最大歷å²è¨˜éŒ„數 +- +- +- Maximum size of history per entry +- æ¯å€‹é …目的最大歷å²è¨˜éŒ„å¤§å° +- +- +- Delete Recycle Bin +- 刪除回收桶 +- +- +- Do you want to delete the current recycle bin and all its contents? +-This action is not reversible. +- 是å¦è¦åˆªé™¤ç›®å‰çš„回收桶以åŠè£¡é¢æ‰€æœ‰å…§å®¹ï¼Ÿ +-æ­¤æ“作無法復原。 +- +- +- (old) +- (舊) +- +- +- Enable compression (recommended) +- 啟用壓縮(推薦) +- +- +- +- DatabaseSettingsWidgetKeeShare +- +- Sharing +- 分享 +- +- +- Breadcrumb +- 導覽路徑 +- +- +- Type +- é¡žåž‹ +- +- +- Path +- 路徑 +- +- +- Last Signer +- 最後一次簽署 +- +- +- Certificates +- 證書 +- +- +- > +- Breadcrumb separator +- > +- +- +- +- DatabaseSettingsWidgetMetaDataSimple +- +- Database Name: +- 資料庫å稱: +- +- +- Description: +- æ述: +- +- +- Database name field +- 資料庫åç¨±æ¬„ä½ +- +- +- Database description field +- 資料庫æè¿°æ¬„ä½ +- +- +- +- DatabaseTabWidget +- +- KeePass 2 Database +- KeePass 2 資料庫 +- +- +- All files +- 所有檔案 +- +- +- Open database +- 開啟資料庫 +- +- +- CSV file +- CSV 檔 +- +- +- Merge database +- åˆä½µè³‡æ–™åº« +- +- +- Open KeePass 1 database +- é–‹å•Ÿ KeePass 1 資料庫 +- +- +- KeePass 1 database +- KeePass 1 資料庫 +- +- +- Export database to CSV file +- 匯出資料庫至 CSV 檔 +- +- +- Writing the CSV file failed. +- 寫入 CSV 檔失敗。 +- +- +- Database creation error +- 資料庫建立錯誤 +- +- +- The created database has no key or KDF, refusing to save it. +-This is definitely a bug, please report it to the developers. +- 建立的資料庫沒有金鑰或 KDF,拒絕儲存。 +-è«‹å‘開發者回報這個明顯的錯誤。 +- +- +- Select CSV file +- é¸æ“‡ CSV 檔 +- +- +- New Database +- 新資料庫 +- +- +- %1 [New Database] +- Database tab name modifier +- %1 [新資料庫] +- +- +- %1 [Locked] +- Database tab name modifier +- %1 [已鎖定] +- +- +- %1 [Read-only] +- Database tab name modifier +- %1 [唯讀] +- +- +- Failed to open %1. It either does not exist or is not accessible. +- é–‹å•Ÿ %1 失敗。此項目ä¸å­˜åœ¨æˆ–無法存å–。 +- +- +- Export database to HTML file +- 匯出資料庫至 HTML 檔 +- +- +- HTML file +- HTML 檔 +- +- +- Writing the HTML file failed. +- 寫入 HTML 檔失敗。 +- +- +- Export Confirmation +- åŒ¯å‡ºç¢ºèª +- +- +- You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? +- 您正è¦åŒ¯å‡ºè³‡æ–™åº«è‡³æœªåŠ å¯†çš„檔案。您的密碼åŠæ•æ„Ÿè³‡æ–™å°‡ä¸å—任何ä¿è­·ï¼æ‚¨ç¢ºå®šè¦ç¹¼çºŒé€²è¡Œï¼Ÿ +- +- +- Open OPVault +- é–‹å•Ÿ OPVault +- +- +- +- DatabaseWidget +- +- Searching... +- æœå°‹ä¸­... +- +- +- Do you really want to delete the entry "%1" for good? +- 真的è¦æ°¸é åˆªé™¤é …目「%1ã€ï¼Ÿ +- +- +- Do you really want to move entry "%1" to the recycle bin? +- 真的è¦å°‡é …目「%1ã€ç§»åˆ°å›žæ”¶æ¡¶ï¼Ÿ +- +- +- Do you really want to move %n entry(s) to the recycle bin? +- 真的è¦å°‡ %n 個項目移到回收桶? +- +- +- Execute command? +- 執行命令? +- +- +- Do you really want to execute the following command?<br><br>%1<br> +- 真的è¦åŸ·è¡Œä»¥ä¸‹å‘½ä»¤ï¼Ÿ<br><br>%1<br> +- +- +- Remember my choice +- 記ä½æˆ‘çš„é¸æ“‡ +- +- +- Do you really want to delete the group "%1" for good? +- 真的è¦æ°¸é åˆªé™¤ç¾¤çµ„「%1ã€ï¼Ÿ +- +- +- No current database. +- ç„¡ç›®å‰è³‡æ–™åº«ã€‚ +- +- +- No source database, nothing to do. +- 無來æºè³‡æ–™åº«ï¼Œä»€éº¼éƒ½ä¸åšã€‚ +- +- +- Search Results (%1) +- æœå°‹çµæžœ (%1) +- +- +- No Results +- ç„¡çµæžœ +- +- +- File has changed +- 檔案已變更 +- +- +- The database file has changed. Do you want to load the changes? +- 資料庫檔案已被修改。是å¦è¦è¼‰å…¥è®Šæ›´ï¼Ÿ +- +- +- Merge Request +- åˆä½µè¦æ±‚ +- +- +- The database file has changed and you have unsaved changes. +-Do you want to merge your changes? +- 資料庫檔案已被修改,且您有尚未儲存的變更。 +-是å¦åˆä½µæ‚¨çš„變更? +- +- +- Empty recycle bin? +- 清空回收桶? +- +- +- Are you sure you want to permanently delete everything from your recycle bin? +- 您確定è¦æ°¸ä¹…刪除回收桶內的所有項目? +- +- +- Do you really want to delete %n entry(s) for good? +- 真的è¦æ°¸é åˆªé™¤ %n 個項目? +- +- +- Delete entry(s)? +- 刪除項目? +- +- +- Move entry(s) to recycle bin? +- 移動項目到回收桶? +- +- +- Lock Database? +- 鎖定資料庫? +- +- +- You are editing an entry. Discard changes and lock anyway? +- 您正在編輯一個項目。放棄變更並直接鎖定? +- +- +- "%1" was modified. +-Save changes? +- 「%1ã€å·²è¢«ä¿®æ”¹ã€‚ +-儲存變更? +- +- +- Database was modified. +-Save changes? +- 資料庫已被修改。 +-儲存變更? +- +- +- Save changes? +- 儲存變更? +- +- +- Could not open the new database file while attempting to autoreload. +-Error: %1 +- 嘗試自動é‡æ–°è¼‰å…¥ï¼Œç„¡æ³•é–‹å•“新的資料庫檔案。 +-錯誤:%1 +- +- +- Disable safe saves? +- åœç”¨å®‰å…¨å­˜æª”? +- +- +- KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +-Disable safe saves and try again? +- KeePassXC 儲存資料庫已失敗數次。å¯èƒ½æ˜¯æª”案åŒæ­¥æœå‹™æŠŠå„²å­˜æª”案鎖ä½äº†ã€‚ +-åœç”¨å®‰å…¨å„²å­˜å¾Œå†è©¦ä¸€æ¬¡ï¼Ÿ +- +- +- Passwords +- 密碼 +- +- +- Save database as +- 資料庫å¦å­˜ç‚º +- +- +- KeePass 2 Database +- KeePass 2 資料庫 +- +- +- Replace references to entry? +- 替æ›å°é …目的引用? +- +- +- Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? +- 項目「%1ã€æœ‰ %2 個引用。是å¦è¦ç”¨å€¼è¦†è“‹å¼•ç”¨ã€è·³éŽæ­¤é …目或直接刪除? +- +- +- Delete group +- 刪除群組 +- +- +- Move group to recycle bin? +- 移動群組到回收桶? +- +- +- Do you really want to move the group "%1" to the recycle bin? +- 真的è¦å°‡ç¾¤çµ„「%1ã€ç§»åˆ°å›žæ”¶æ¡¶ï¼Ÿ +- +- +- Successfully merged the database files. +- æˆåŠŸåˆä½µè³‡æ–™åº«æª”案。 +- +- +- Database was not modified by merge operation. +- 資料庫未被åˆä½µæ“作修改。 +- +- +- Shared group... +- 共享群組... +- +- +- Writing the database failed: %1 +- 寫入資料庫失敗:%1 +- +- +- This database is opened in read-only mode. Autosave is disabled. +- 此資料庫以唯讀模å¼é–‹å•Ÿã€‚自動儲存已åœç”¨ã€‚ +- +- +- Save database backup +- 儲存資料庫備份 +- +- +- Could not find database file: %1 +- 未找到資料庫檔案:%1 +- +- +- +- EditEntryWidget +- +- Entry +- é …ç›® +- +- +- Advanced +- 進階 +- +- +- Icon +- 圖示 +- +- +- Auto-Type +- 自動輸入 +- +- +- Properties +- 屬性 +- +- +- History +- æ­·å²è¨˜éŒ„ +- +- +- SSH Agent +- SSH ä»£ç† +- +- +- n/a +- ç„¡ +- +- +- (encrypted) +- (已加密) +- +- +- Select private key +- é¸æ“‡ç§å¯†é‡‘é‘° +- +- +- Entry history +- 項目歷å²è¨˜éŒ„ +- +- +- Add entry +- 加入項目 +- +- +- Edit entry +- 編輯項目 +- +- +- New attribute +- 新屬性 +- +- +- Are you sure you want to remove this attribute? +- 您確定è¦ç§»é™¤æ­¤å±¬æ€§ï¼Ÿ +- +- +- Tomorrow +- 明天 +- +- +- %n week(s) +- %n 個禮拜 +- +- +- %n month(s) +- %n 個月 +- +- +- Entry updated successfully. +- 項目已æˆåŠŸæ›´æ–°ã€‚ +- +- +- New attribute %1 +- 新屬性 %1 +- +- +- %n year(s) +- %n å¹´ +- +- +- Confirm Removal +- 確èªç§»é™¤ +- +- +- Browser Integration +- ç€è¦½å™¨æ•´åˆ +- +- +- <empty URL> +- <空白 URL> +- +- +- Are you sure you want to remove this URL? +- 您確定è¦ç§»é™¤æ­¤ URL? +- +- +- Reveal +- æ­ç¤º +- +- +- Hide +- éš±è— +- +- +- Unsaved Changes +- 未儲存的變更 +- +- +- Would you like to save changes to this entry? +- 您是å¦è¦å„²å­˜æ­¤é …目的變更? +- +- +- [PROTECTED] Press Reveal to view or edit +- [å—ä¿è­·å…§å®¹] 按「æ­ç¤ºã€ä»¥æª¢è¦–或編輯 +- +- +- Invalid Entry +- 無效的項目 +- +- +- An external merge operation has invalidated this entry. +-Unfortunately, any changes made have been lost. +- 一項外部åˆä½µæ“作使此項目無效。 +-ä¸å¹¸çš„是,所有更改已經æ失。 +- +- +- +- EditEntryWidgetAdvanced +- +- Additional attributes +- 其他屬性 +- +- +- Add +- 加入 +- +- +- Remove +- 移除 +- +- +- Edit Name +- 編輯å稱 +- +- +- Protect +- ä¿è­· +- +- +- Reveal +- æ­ç¤º +- +- +- Attachments +- 附件 +- +- +- Foreground Color: +- å‰æ™¯é¡è‰²ï¼š +- +- +- Background Color: +- 背景é¡è‰²ï¼š +- +- +- Attribute selection +- 屬性é¸æ“‡ +- +- +- Attribute value +- 屬性值 +- +- +- Add a new attribute +- 加入新屬性 +- +- +- Remove selected attribute +- 移除所é¸å±¬æ€§ +- +- +- Edit attribute name +- 編輯屬性å稱 +- +- +- Toggle attribute protection +- 切æ›å±¬æ€§ä¿è­· +- +- +- Show a protected attribute +- 顯示被ä¿è­·çš„屬性 +- +- +- Foreground color selection +- å‰æ™¯é¡è‰²é¸æ“‡ +- +- +- Background color selection +- 背景é¡è‰²é¸æ“‡ +- +- +- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> +- <html><head/><body><p>若勾é¸æ­¤é …,項目將ä¸æœƒå‡ºç¾åœ¨å¥åº·æª¢æŸ¥æˆ–是 HIBP 等報告,å³ä½¿é …目未通éŽå…¶å“質è¦æ±‚(例如,密碼熵值ä¸è¶³æˆ–é‡è¤‡ä½¿ç”¨ï¼‰ã€‚如果密碼本身有所é™åˆ¶ï¼ˆåƒæ˜¯å¿…須使用四ä½æ•¸ PIN),您å¯ä»¥è¨­å®šå°‡å…¶å‹¾é¸ä»¥ä¿æŒå ±å‘Šæ¸…潔。</p></body></html> +- +- +- Exclude from database reports +- 從資料庫報告排除 +- +- +- +- EditEntryWidgetAutoType +- +- Enable Auto-Type for this entry +- 啟用此項目的自動輸入 +- +- +- Window Associations +- è¦–çª—é—œè¯ +- +- +- + +- + +- +- +- - +- - +- +- +- Window title: +- 視窗標題: +- +- +- Use a specific sequence for this association: +- 使用特定åºåˆ—進行此關è¯ï¼š +- +- +- Custom Auto-Type sequence +- 自定義自動輸入åºåˆ— +- +- +- Open Auto-Type help webpage +- é–‹å•Ÿè‡ªå‹•è¼¸å…¥çš„å¹«åŠ©ç¶²é  +- +- +- Existing window associations +- å³å­˜çš„è¦–çª—é—œè¯ +- +- +- Add new window association +- åŠ å…¥æ–°çš„è¦–çª—é—œè¯ +- +- +- Remove selected window association +- 移除所é¸çš„è¦–çª—é—œè¯ +- +- +- You can use an asterisk (*) to match everything +- 您å¯ä»¥ä½¿ç”¨æ˜Ÿè™Ÿ (*) 匹é…ä»»æ„å­—è©ž +- +- +- Set the window association title +- 設定視窗關è¯æ¨™é¡Œ +- +- +- You can use an asterisk to match everything +- 您å¯ä»¥ä½¿ç”¨æ˜Ÿè™ŸåŒ¹é…ä»»æ„å­—è©ž +- +- +- Custom Auto-Type sequence for this window +- 自定義此視窗的自動輸入åºåˆ— +- +- +- Inherit default Auto-Type sequence from the group +- 從父群組繼承é è¨­çš„自動輸入åºåˆ— +- +- +- Use custom Auto-Type sequence: +- 使用自定義的自動輸入åºåˆ—: +- +- +- +- EditEntryWidgetBrowser +- +- These settings affect to the entry's behaviour with the browser extension. +- 這些設定影響了項目在ç€è¦½å™¨æ“´å……下的行為。 +- +- +- General +- 一般 +- +- +- Skip Auto-Submit for this entry +- 為此項目跳éŽè‡ªå‹•é€å‡º +- +- +- Hide this entry from the browser extension +- 在ç€è¦½å™¨æ“´å……éš±è—此項目 +- +- +- Additional URL's +- 其他 URL +- +- +- Add +- 加入 +- +- +- Remove +- 移除 +- +- +- Edit +- 編輯 +- +- +- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. +- åªæœ‰å‡ºç¾ HTTP 基本èªè­‰å°è©±æ¡†æ‰æœƒå‚³é€æ­¤è¨­å®šè‡³ç€è¦½å™¨ã€‚啟用之後,將ä¸æœƒåœ¨ä¸€èˆ¬çš„登入表格顯示此項目的é¸é …。 +- +- +- Use this entry only with HTTP Basic Auth +- å°æ­¤é …ç›®åªä½¿ç”¨ HTTP 基本èªè­‰ +- +- +- +- EditEntryWidgetHistory +- +- Show +- 顯示 +- +- +- Restore +- 還原 +- +- +- Delete +- 刪除 +- +- +- Delete all +- 刪除全部 +- +- +- Entry history selection +- 項目歷å²é¸æ“‡ +- +- +- Show entry at selected history state +- 顯示所é¸æ­·å²ç‹€æ…‹ä¸‹çš„é …ç›® +- +- +- Restore entry to selected history state +- æ¢å¾©é …目至所é¸æ­·å²ç‹€æ…‹ +- +- +- Delete selected history state +- 刪除所é¸æ­·å²ç‹€æ…‹ +- +- +- Delete all history +- åˆªé™¤æ‰€æœ‰æ­·å² +- +- +- +- EditEntryWidgetMain +- +- URL: +- URL: +- +- +- Password: +- 密碼: +- +- +- Title: +- 標題: +- +- +- Presets +- é å…ˆå®šç¾© +- +- +- Toggle the checkbox to reveal the notes section. +- 切æ›æ ¸å–方塊以æ­ç¤ºå‚™è¨»æ¬„ä½ã€‚ +- +- +- Username: +- 使用者å稱: +- +- +- Url field +- URL æ¬„ä½ +- +- +- Download favicon for URL +- 下載 URL 的網站圖標 +- +- +- Password field +- å¯†ç¢¼æ¬„ä½ +- +- +- Toggle notes visible +- 切æ›å‚™è¨»å¯è¦‹æ€§ +- +- +- Expiration field +- éŽæœŸæ¬„ä½ +- +- +- Expiration Presets +- éŽæœŸé å…ˆå®šç¾© +- +- +- Expiration presets +- éŽæœŸé å…ˆå®šç¾© +- +- +- Notes field +- å‚™è¨»æ¬„ä½ +- +- +- Title field +- æ¨™é¡Œæ¬„ä½ +- +- +- Username field +- 使用者åç¨±æ¬„ä½ +- +- +- Toggle expiration +- 切æ›éŽæœŸæ™‚é–“ +- +- +- Notes: +- 附註: +- +- +- https://example.com +- https://example.com +- +- +- Expires: +- éŽæœŸï¼š +- +- +- Edit Entry +- 編輯項目 +- +- +- +- EditEntryWidgetSSHAgent +- +- Form +- 表單 +- +- +- Remove key from agent after +- 多久後從代ç†åˆªé™¤é‡‘é‘° +- +- +- seconds +- 秒 +- +- +- Fingerprint +- 指紋 +- +- +- Remove key from agent when database is closed/locked +- 關閉/鎖定資料庫時,從代ç†åˆªé™¤é‡‘é‘° +- +- +- Public key +- 公開金鑰 +- +- +- Add key to agent when database is opened/unlocked +- 當打開/解鎖資料庫時,å‘代ç†åŠ å…¥é‡‘é‘° +- +- +- Comment +- 註解 +- +- +- Decrypt +- 解密 +- +- +- n/a +- ç„¡ +- +- +- Copy to clipboard +- 複製到剪貼簿 +- +- +- Private key +- ç§å¯†é‡‘é‘° +- +- +- External file +- 外部檔案 +- +- +- Browse... +- Button for opening file dialog +- ç€è¦½... +- +- +- Attachment +- 附件 +- +- +- Add to agent +- åŠ å…¥åˆ°ä»£ç† +- +- +- Remove from agent +- 從代ç†åˆªé™¤ +- +- +- Require user confirmation when this key is used +- 使用此金鑰時需è¦ä½¿ç”¨è€…ç¢ºèª +- +- +- Remove key from agent after specified seconds +- 於指定秒數後從代ç†ç§»é™¤é‡‘é‘° +- +- +- Browser for key file +- ç€è¦½é‡‘鑰檔案 +- +- +- External key file +- 外部金鑰檔案 +- +- +- Select attachment file +- é¸æ“‡é™„件檔案 +- +- +- +- EditGroupWidget +- +- Group +- 群組 +- +- +- Icon +- 圖示 +- +- +- Properties +- 屬性 +- +- +- Add group +- 加入群組 +- +- +- Edit group +- 編輯群組 +- +- +- Enable +- 啟用 +- +- +- Disable +- åœç”¨ +- +- +- Inherit from parent group (%1) +- 繼承自上層群組 (%1) +- +- +- Entry has unsaved changes +- 項目有未儲存的變更 +- +- +- +- EditGroupWidgetKeeShare +- +- Type: +- 類型: +- +- +- Path: +- 路徑: +- +- +- Password: +- 密碼: +- +- +- Inactive +- 無效 +- +- +- KeeShare unsigned container +- KeeShare 未簽署容器 +- +- +- KeeShare signed container +- KeeShare 簽署容器 +- +- +- Select import source +- é¸æ“‡åŒ¯å…¥ä¾†æº +- +- +- Select export target +- é¸æ“‡åŒ¯å‡ºç›®æ¨™ +- +- +- Select import/export file +- é¸æ“‡åŒ¯å…¥/匯出檔案 +- +- +- Clear +- 清除 +- +- +- Import +- 匯入 +- +- +- Export +- 匯出 +- +- +- Synchronize +- åŒæ­¥ +- +- +- Your KeePassXC version does not support sharing this container type. +-Supported extensions are: %1. +- 您的 KeePassXC 版本ä¸æ”¯æ´æ­¤å®¹å™¨é¡žåž‹ã€‚ +-å—支æ´çš„擴充為:%1。 +- +- +- %1 is already being exported by this database. +- %1 已被此資料庫匯出。 +- +- +- %1 is already being imported by this database. +- %1 已被此資料庫匯入。 +- +- +- %1 is being imported and exported by different groups in this database. +- %1 在此資料庫內被ä¸åŒçš„群組匯入並匯出。 +- +- +- KeeShare is currently disabled. You can enable import/export in the application settings. +- KeeShare is a proper noun +- KeeShare ç›®å‰å·²è¢«åœç”¨ã€‚您å¯ä»¥åˆ°æ‡‰ç”¨ç¨‹å¼è¨­å®šå•Ÿç”¨åŒ¯å…¥/匯出功能。 +- +- +- Database export is currently disabled by application settings. +- 資料庫匯出目å‰è¢«æ‡‰ç”¨ç¨‹å¼è¨­å®šåœç”¨ã€‚ +- +- +- Database import is currently disabled by application settings. +- 資料庫匯入目å‰è¢«æ‡‰ç”¨ç¨‹å¼è¨­å®šåœç”¨ã€‚ +- +- +- Sharing mode field +- 分享模å¼æ¬„ä½ +- +- +- Path to share file field +- åˆ†äº«æª”æ¡ˆè·¯å¾‘æ¬„ä½ +- +- +- Password field +- å¯†ç¢¼æ¬„ä½ +- +- +- Clear fields +- æ¸…é™¤æ¬„ä½ +- +- +- Browse for share file +- ç€è¦½åˆ†äº«æª”案 +- +- +- Browse... +- ç€è¦½... +- +- +- +- EditGroupWidgetMain +- +- Name field +- åç¨±æ¬„ä½ +- +- +- Notes field +- å‚™è¨»æ¬„ä½ +- +- +- Toggle expiration +- 切æ›éŽæœŸæ™‚é–“ +- +- +- Auto-Type toggle for this and sub groups +- 切æ›æ­¤ç¾¤çµ„åŠå…¶å­ç¾¤çµ„的自動輸入 +- +- +- Expiration field +- éŽæœŸæ¬„ä½ +- +- +- Search toggle for this and sub groups +- 切æ›æ­¤ç¾¤çµ„åŠå…¶å­ç¾¤çµ„çš„æœå°‹ +- +- +- Default auto-type sequence field +- é è¨­è‡ªå‹•è¼¸å…¥åºåˆ—æ¬„ä½ +- +- +- Expires: +- éŽæœŸï¼š +- +- +- Use default Auto-Type sequence of parent group +- 使用父群組é è¨­çš„自動輸入åºåˆ— +- +- +- Auto-Type: +- 自動輸入: +- +- +- Search: +- æœå°‹ï¼š +- +- +- Notes: +- 附註: +- +- +- Name: +- å稱: +- +- +- Set default Auto-Type sequence +- 設定é è¨­è‡ªå‹•è¼¸å…¥åºåˆ— +- +- +- Edit Group +- 編輯群組 +- +- +- +- EditWidgetIcons +- +- Add custom icon +- 加入自定義圖示 +- +- +- Delete custom icon +- 刪除自定義圖示 +- +- +- Download favicon +- 下載網站圖標 +- +- +- Unable to fetch favicon. +- 無法擷å–網站圖標。 +- +- +- Images +- 圖片 +- +- +- All files +- 所有檔案 +- +- +- Confirm Delete +- 確èªåˆªé™¤ +- +- +- Select Image(s) +- é¸æ“‡åœ–示 +- +- +- Successfully loaded %1 of %n icon(s) +- æˆåŠŸè¼‰å…¥ %1 / %n 個圖示 +- +- +- No icons were loaded +- 未載入任何圖示 +- +- +- %n icon(s) already exist in the database +- %n 個圖示已存在於資料庫 +- +- +- The following icon(s) failed: +- 以下圖示失敗: +- +- +- This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? +- 此圖示由 %n 個項目使用,將會以é è¨­åœ–示替æ›ã€‚您確定è¦åˆªé™¤å®ƒï¼Ÿ +- +- +- You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security +- 您å¯ä»¥åˆ°ã€Œå·¥å…·ã€->「設定ã€->「安全ã€å•Ÿç”¨ DuckDuckGo 的網站圖示æœå‹™ +- +- +- Download favicon for URL +- 下載 URL 的網站圖標 +- +- +- Apply selected icon to subgroups and entries +- 套用所é¸åœ–示至å­ç¾¤çµ„與項目 +- +- +- Also apply to child groups +- 也套用至å­ç¾¤çµ„ +- +- +- Also apply to child entries +- 也套用至å­é …ç›® +- +- +- Also apply to all children +- 也套用至所有å­ç¾¤çµ„與項目 +- +- +- Existing icon selected. +- é¸æ“‡äº†å·²å­˜åœ¨çš„圖示。 +- +- +- Use default icon +- 使用é è¨­çš„圖示 +- +- +- Use custom icon +- 使用自定義圖示 +- +- +- Apply icon to... +- 套用圖示至... +- +- +- Apply to this group only +- åªå¥—用至此群組 +- +- +- +- EditWidgetProperties +- +- Created: +- 建立於: +- +- +- Modified: +- 修改於: +- +- +- Accessed: +- å­˜å–於: +- +- +- Uuid: +- Uuid: +- +- +- Plugin Data +- æ’件資料 +- +- +- Remove +- 移除 +- +- +- Delete plugin data? +- 刪除æ’件資料? +- +- +- Do you really want to delete the selected plugin data? +-This may cause the affected plugins to malfunction. +- 真的è¦åˆªé™¤é¸æ“‡çš„æ’件資料? +-這å¯èƒ½å°Žè‡´å—影響的æ’件出ç¾å•é¡Œã€‚ +- +- +- Key +- éµ +- +- +- Value +- 值 +- +- +- Datetime created +- 建立日期與時間 +- +- +- Datetime modified +- 修改日期與時間 +- +- +- Datetime accessed +- å­˜å–日期與時間 +- +- +- Unique ID +- ç¨ç«‹ ID +- +- +- Plugin data +- æ’件資料 +- +- +- Remove selected plugin data +- 移除所é¸çš„æ’件資料 +- +- +- +- Entry +- +- %1 - Clone +- %1 - 複製 +- +- +- +- EntryAttachmentsModel +- +- Name +- å稱 +- +- +- Size +- å¤§å° +- +- +- +- EntryAttachmentsWidget +- +- Form +- 表單 +- +- +- Add +- 加入 +- +- +- Remove +- 移除 +- +- +- Open +- é–‹å•Ÿ +- +- +- Save +- 儲存 +- +- +- Select files +- é¸æ“‡æª”案 +- +- +- Are you sure you want to remove %n attachment(s)? +- 您確定è¦ç§»é™¤ %n 個附件? +- +- +- Save attachments +- 儲存附件 +- +- +- Unable to create directory: +-%1 +- 無法建立資料夾: +-%1 +- +- +- Are you sure you want to overwrite the existing file "%1" with the attachment? +- 您確定è¦ç”¨é™„件覆蓋ç¾æœ‰çš„檔案「%1ã€ï¼Ÿ +- +- +- Confirm overwrite +- 確èªè¦†è“‹ +- +- +- Unable to save attachments: +-%1 +- 無法儲存附件: +-%1 +- +- +- Unable to open attachment: +-%1 +- 無法開啟附件: +-%1 +- +- +- Unable to open attachments: +-%1 +- 無法開啟附件: +-%1 +- +- +- Confirm remove +- 確èªç§»é™¤ +- +- +- Unable to open file(s): +-%1 +- 無法開啟檔案: +-%1 +- +- +- Attachments +- 附件 +- +- +- Add new attachment +- 加入新附件 +- +- +- Remove selected attachment +- 移除所é¸é™„件 +- +- +- Open selected attachment +- 開啟所é¸é™„件 +- +- +- Save selected attachment to disk +- 儲存所é¸é™„件至ç£ç¢Ÿ +- +- +- %1 is a big file (%2 MB). +-Your database may get very large and reduce performance. +- +-Are you sure to add this file? +- %1 檔案éŽå¤§ (%2 MB)。 +-å¯èƒ½å°Žè‡´æ‚¨çš„資料庫éŽå¤§ä¸¦é™ä½Žæ•ˆèƒ½ã€‚ +-您確定è¦åŠ å…¥é€™å€‹æª”案? +- +- +- Confirm Attachment +- 確èªé™„件 +- +- +- +- EntryAttributesModel +- +- Name +- å稱 +- +- +- +- EntryHistoryModel +- +- Last modified +- 最後修改於 +- +- +- Title +- 標題 +- +- +- Username +- 使用者å稱 +- +- +- URL +- URL +- +- +- +- EntryModel +- +- Ref: +- Reference abbreviation +- 引用: +- +- +- Group +- 群組 +- +- +- Title +- 標題 +- +- +- Username +- 使用者å稱 +- +- +- URL +- URL +- +- +- Never +- å¾žä¸ +- +- +- Password +- 密碼 +- +- +- Notes +- 備註 +- +- +- Expires +- éŽæœŸ +- +- +- Created +- 建立於 +- +- +- Modified +- 修改於 +- +- +- Accessed +- å­˜å–æ–¼ +- +- +- Attachments +- 附件 +- +- +- Size +- å¤§å° +- +- +- Group name +- 群組å稱 +- +- +- Entry title +- 項目標題 +- +- +- Entry notes +- 項目備註 +- +- +- Entry expires at +- é …ç›®éŽæœŸæ–¼ +- +- +- Creation date +- 建立日期 +- +- +- Last modification date +- 最近修改日期 +- +- +- Last access date +- 最近存å–日期 +- +- +- Attached files +- 附加檔案 +- +- +- Entry size +- é …ç›®å¤§å° +- +- +- Has attachments +- 有附件 +- +- +- Has TOTP one-time password +- 有 TOTP 一次密碼 +- +- +- +- EntryPreviewWidget +- +- Close +- 關閉 +- +- +- General +- 通用 +- +- +- Username +- 使用者å稱 +- +- +- Password +- 密碼 +- +- +- Expiration +- éŽæœŸ +- +- +- URL +- URL +- +- +- Attributes +- 屬性 +- +- +- Attachments +- 附件 +- +- +- Notes +- 備註 +- +- +- Autotype +- 自動輸入 +- +- +- Window +- 視窗 +- +- +- Sequence +- åºåˆ— +- +- +- Searching +- æœå°‹ +- +- +- Search +- æœå°‹ +- +- +- Clear +- 清除 +- +- +- Never +- å¾žä¸ +- +- +- [PROTECTED] +- [å—ä¿è­·å…§å®¹] +- +- +- Enabled +- 啟用 +- +- +- Disabled +- åœç”¨ +- +- +- Share +- 共享 +- +- +- Display current TOTP value +- é¡¯ç¤ºç›®å‰ TOTP 值 +- +- +- Advanced +- 進階 +- +- +- Default Sequence +- é è¨­åºåˆ— +- +- +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- attributes line +- <tr><td><b>%1</b>:</td><td>%2</td></tr> +- +- +- +- EntryURLModel +- +- Invalid URL +- 無效的 URL +- +- +- +- EntryView +- +- Fit to window +- 符åˆè¦–窗 +- +- +- Fit to contents +- 符åˆå…§å®¹ +- +- +- Reset to defaults +- é‡ç½®ç‚ºé è¨­å€¼ +- +- +- Has attachments +- Entry attachment icon toggle +- 有附件 +- +- +- Has TOTP +- Entry TOTP icon toggle +- 有 TOTP +- +- +- +- FdoSecrets::Item +- +- Entry "%1" from database "%2" was used by %3 +- 項目「%1ã€ä¾†è‡ªè³‡æ–™åº«ã€Œ%2ã€ï¼Œè¢« %3 使用 +- +- +- +- FdoSecrets::Service +- +- Failed to register DBus service at %1.<br/> +- æ–¼ %1 註冊 DBus æœå‹™å¤±æ•—。<br/> +- +- +- %n Entry(s) was used by %1 +- %1 is the name of an application +- %n 個項目被 %1 使用 +- +- +- +- FdoSecrets::SettingsDatabaseModel +- +- File Name +- 檔案å稱 +- +- +- Group +- 群組 +- +- +- Manage +- ç®¡ç† +- +- +- Unlock to show +- 解鎖以顯示 +- +- +- None +- ç„¡ +- +- +- +- FdoSecrets::SettingsSessionModel +- +- Application +- æ‡‰ç”¨ç¨‹å¼ +- +- +- Manage +- ç®¡ç† +- +- +- +- FdoSecretsPlugin +- +- <b>Fdo Secret Service:</b> %1 +- <b>Fdo ä¿å¯†æœå‹™ï¼š</b> %1 +- +- +- Unknown +- Unknown PID +- 未知 +- +- +- Unknown +- Unknown executable path +- 未知 +- +- +- <i>PID: %1, Executable: %2</i> +- <i>PID: 1234, Executable: /path/to/exe</i> +- <i>PID: %1,執行檔: %2</i> +- +- +- Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. +- å¦ä¸€å€‹ä¿å¯†æœå‹™æ­£åœ¨åŸ·è¡Œ (%1)。<br/>è«‹å…ˆåœæ­¢/移除它æ‰èƒ½é‡æ–°å•Ÿç”¨ä¿å¯†æœå‹™æ•´åˆã€‚ +- +- +- +- Group +- +- [empty] +- group has no children +- [空白] +- +- +- +- HibpDownloader +- +- Online password validation failed +- 線上密碼驗證失敗 +- +- +- +- IconDownloaderDialog +- +- Download Favicons +- 下載網站圖標 +- +- +- Cancel +- å–消 +- +- +- Having trouble downloading icons? +-You can enable the DuckDuckGo website icon service in the security section of the application settings. +- 下載圖示時碰到å•é¡Œäº†ï¼Ÿ +-您å¯ä»¥åˆ°æ‡‰ç”¨ç¨‹å¼è¨­å®šçš„安全一欄啟用 DuckDuckGo 的網站圖示æœå‹™ã€‚ +- +- +- Close +- 關閉 +- +- +- URL +- URL +- +- +- Status +- 狀態 +- +- +- Please wait, processing entry list... +- è«‹ç¨å€™ï¼Œæ­£åœ¨è™•ç†é …目清單... +- +- +- Downloading... +- 正在下載... +- +- +- Ok +- 確定 +- +- +- Already Exists +- 已存在 +- +- +- Download Failed +- 下載失敗 +- +- +- Downloading favicons (%1/%2)... +- 正在下載網站圖標 (%1/%2)... +- +- +- +- KMessageWidget +- +- &Close +- 關閉 (&C) +- +- +- Close message +- é—œé–‰è¨Šæ¯ +- +- +- +- Kdbx3Reader +- +- missing database headers +- 缺少資料庫標頭 +- +- +- Header doesn't match hash +- 標頭與雜湊值ä¸åŒ¹é… +- +- +- Invalid header id size +- 無效的標頭 ID å¤§å° +- +- +- Invalid header field length +- 無效的標頭欄ä½é•·åº¦ +- +- +- Invalid header data length +- 無效的資料長度 +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- 所æ供的憑證無效,請å†å˜—試一é。 +-若此情形一å†ç™¼ç”Ÿï¼Œä»£è¡¨æ‚¨çš„資料庫檔案å¯èƒ½å·²æ毀。 +- +- +- Unable to calculate database key +- 無法計算資料庫金鑰 +- +- +- Unable to issue challenge-response: %1 +- 無法發佈挑戰應答:%1 +- +- +- +- Kdbx3Writer +- +- Unable to issue challenge-response: %1 +- 無法發佈挑戰應答:%1 +- +- +- Unable to calculate database key +- 無法計算資料庫金鑰 +- +- +- +- Kdbx4Reader +- +- missing database headers +- 缺少資料庫標頭 +- +- +- Invalid header checksum size +- ç„¡æ•ˆçš„æ¨™é ­æ ¡é©—å¤§å° +- +- +- Header SHA256 mismatch +- SHA256 標頭ä¸ç›¸ç¬¦ +- +- +- Unknown cipher +- 未知的加密法 +- +- +- Invalid header id size +- 無效的標頭 ID å¤§å° +- +- +- Invalid header field length +- 無效的標頭欄ä½é•·åº¦ +- +- +- Invalid header data length +- 無效的資料長度 +- +- +- Failed to open buffer for KDF parameters in header +- 無法打開標頭中 KDF åƒæ•¸çš„ç·©è¡å€ +- +- +- Unsupported key derivation function (KDF) or invalid parameters +- ä¸æ”¯æ´çš„金鑰è¡ç”Ÿå‡½æ•¸ (KDF) 或åƒæ•¸ç„¡æ•ˆ +- +- +- Legacy header fields found in KDBX4 file. +- 在 KDBX4 檔案中找到的舊版標頭欄ä½ã€‚ +- +- +- Invalid inner header id size +- 無效的內部標頭 ID å¤§å° +- +- +- Invalid inner header field length +- 無效的內部標頭欄ä½é•·åº¦ +- +- +- Invalid inner header binary size +- 無效的內部標頭二進ä½å¤§å° +- +- +- Unsupported KeePass variant map version. +- Translation: variant map = data structure for storing meta data +- ä¸æ”¯æ´çš„ KeePass 變體映射版本。 +- +- +- Invalid variant map entry name length +- Translation: variant map = data structure for storing meta data +- 無效的變體映射項目å稱長度 +- +- +- Invalid variant map entry name data +- Translation: variant map = data structure for storing meta data +- 無效的變體映射項目å稱資料 +- +- +- Invalid variant map entry value length +- Translation: variant map = data structure for storing meta data +- 無效的變體映射項目值長度 +- +- +- Invalid variant map entry value data +- Translation comment: variant map = data structure for storing meta data +- 無效的變體映射項目值資料 +- +- +- Invalid variant map Bool entry value length +- Translation: variant map = data structure for storing meta data +- 無效的變體映射 Bool 項目值長度 +- +- +- Invalid variant map Int32 entry value length +- Translation: variant map = data structure for storing meta data +- 無效的變體映射 Int32 項目值長度 +- +- +- Invalid variant map UInt32 entry value length +- Translation: variant map = data structure for storing meta data +- 無效的變體映射 UInt32 項目值長度 +- +- +- Invalid variant map Int64 entry value length +- Translation: variant map = data structure for storing meta data +- 無效的變體映射 Int64 項目值長度 +- +- +- Invalid variant map UInt64 entry value length +- Translation: variant map = data structure for storing meta data +- 無效的變體映射 UInt64 項目值長度 +- +- +- Invalid variant map entry type +- Translation: variant map = data structure for storing meta data +- 無效的變體映射項目類型 +- +- +- Invalid variant map field type size +- Translation: variant map = data structure for storing meta data +- 無效的變體映射欄ä½é¡žåž‹å¤§å° +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- 所æ供的憑證無效,請å†å˜—試一é。 +-若此情形一å†ç™¼ç”Ÿï¼Œä»£è¡¨æ‚¨çš„資料庫檔案å¯èƒ½å·²æ毀。 +- +- +- (HMAC mismatch) +- (HMAC ä¸ç¬¦ï¼‰ +- +- +- Unable to calculate database key: %1 +- 無法計算資料庫金鑰:%1 +- +- +- +- Kdbx4Writer +- +- Invalid symmetric cipher algorithm. +- 無效的å°ç¨±åŠ å¯†æ¼”算法。 +- +- +- Invalid symmetric cipher IV size. +- IV = Initialization Vector for symmetric cipher +- 無效的å°ç¨±åŠ å¯†åˆå§‹å‘é‡å¤§å°ã€‚ +- +- +- Failed to serialize KDF parameters variant map +- Translation comment: variant map = data structure for storing meta data +- 無法åºåˆ—化 KDF åƒæ•¸è®Šé«”映射 +- +- +- Unable to calculate database key: %1 +- 無法計算資料庫金鑰:%1 +- +- +- +- KdbxReader +- +- Unsupported cipher +- ä¸æ”¯æ´çš„加密法 +- +- +- Invalid compression flags length +- ä¸æ­£ç¢ºå£“縮旗幟長度 +- +- +- Unsupported compression algorithm +- ä¸æ”¯æ´çš„壓縮演算法 +- +- +- Invalid master seed size +- 無效的主種å­å¤§å° +- +- +- Invalid transform seed size +- 無效的轉æ›ç¨®å­å¤§å° +- +- +- Invalid transform rounds size +- 無效的轉æ›å›žåˆæ•¸ +- +- +- Invalid start bytes size +- 無效的起始ä½å…ƒçµ„å¤§å° +- +- +- Invalid random stream id size +- ç„¡æ•ˆçš„éš¨æ©Ÿè³‡æ–™æµ ID å¤§å° +- +- +- Invalid inner random stream cipher +- 無效的內部隨機串æµåŠ å¯†æ³• +- +- +- Not a KeePass database. +- ä¸¦éž KeePass 資料庫。 +- +- +- The selected file is an old KeePass 1 database (.kdb). +- +-You can import it by clicking on Database > 'Import KeePass 1 database...'. +-This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. +- 所é¸æª”æ¡ˆç‚ºèˆŠå¼ KeePass 1 資料庫 (.kdb)。 +- +-您å¯ä»¥é»žæ“Šã€Œè³‡æ–™åº«ã€ > 「匯入 KeePass 1 資料庫...ã€ä¾†åŒ¯å…¥å®ƒã€‚ +-這是單å‘é·ç§»ã€‚你無法用舊的 KeePassX 0.4 的版本開啟已匯入的資料庫。 +- +- +- Unsupported KeePass 2 database version. +- ä¸æ”¯æ´çš„ KeePass 2 資料庫版本。 +- +- +- Invalid cipher uuid length: %1 (length=%2) +- 無效的加密法 UUID 長度: %1 (length=%2) +- +- +- Unable to parse UUID: %1 +- ç„¡æ³•å‰–æž UUID: %1 +- +- +- Failed to read database file. +- 讀å–資料庫檔案失敗。 +- +- +- +- KdbxXmlReader +- +- XML parsing failure: %1 +- XML 分æžå¤±æ•—:%1 +- +- +- No root group +- 沒有根群組 +- +- +- Missing icon uuid or data +- 缺少圖示的 uuid 或資料 +- +- +- Missing custom data key or value +- 缺少自定義的資料éµæˆ–值 +- +- +- Multiple group elements +- 多é‡ç¾¤çµ„元素 +- +- +- Null group uuid +- 空的群組 uuid +- +- +- Invalid group icon number +- 無效的群組圖示標號 +- +- +- Invalid EnableAutoType value +- 無效的 EnableAutoType 值 +- +- +- Invalid EnableSearching value +- 無效的 EnableSearching 值 +- +- +- No group uuid found +- 找ä¸åˆ°ç¾¤çµ„ uuid +- +- +- Null DeleteObject uuid +- 空的 DeleteObject uuid +- +- +- Missing DeletedObject uuid or time +- 缺少 DeletedObject uuid 或時間 +- +- +- Null entry uuid +- 空的項目 uuid +- +- +- Invalid entry icon number +- 無效的項目圖示編號 +- +- +- History element in history entry +- æ­·å²è¨˜éŒ„項目中的歷å²å…ƒç´  +- +- +- No entry uuid found +- 找ä¸åˆ°é …ç›® uuid +- +- +- History element with different uuid +- 具有ä¸åŒ uuid çš„æ­·å²å…ƒç´  +- +- +- Duplicate custom attribute found +- 找到é‡è¤‡çš„自定義屬性 +- +- +- Entry string key or value missing +- 缺少項目字串或值 +- +- +- Entry binary key or value missing +- 缺少項目二進ä½é‡‘鑰或值 +- +- +- Auto-type association window or sequence missing +- 缺少自動輸入關è¯è¦–窗或åºåˆ— +- +- +- Invalid bool value +- 無效的布林值 +- +- +- Invalid date time value +- 無效的日期時間值 +- +- +- Invalid color value +- 無效的é¡è‰²å€¼ +- +- +- Invalid color rgb part +- 無效的 rgb é¡è‰²éƒ¨åˆ† +- +- +- Invalid number value +- 無效的數值 +- +- +- Invalid uuid value +- 無效的 uuid 值 +- +- +- Unable to decompress binary +- Translator meant is a binary data inside an entry +- 無法解壓縮二進ä½è³‡æ–™ +- +- +- XML error: +-%1 +-Line %2, column %3 +- XML 錯誤: +-%1 +-列 %2, æ¬„ä½ %3 +- +- +- +- KeeAgentSettings +- +- Invalid KeeAgent settings file structure. +- 無效的 KeeAgent 設定檔架構。 +- +- +- Private key is an attachment but no attachments provided. +- ç§å¯†é‡‘鑰為附件,但附件未æ供。 +- +- +- Private key is empty +- ç§å¯†é‡‘鑰為空 +- +- +- File too large to be a private key +- 檔案太大,無法作為ç§å¯†é‡‘é‘° +- +- +- Failed to open private key +- 無法打開ç§å¯†é‡‘é‘° +- +- +- +- KeePass1OpenWidget +- +- Unable to open the database. +- 無法開啟資料庫。 +- +- +- Import KeePass1 Database +- 匯入 KeePass1 資料庫 +- +- +- +- KeePass1Reader +- +- Unable to read keyfile. +- 無法讀å–金鑰檔案。 +- +- +- Not a KeePass database. +- ä¸¦éž KeePass 資料庫。 +- +- +- Unsupported encryption algorithm. +- ä¸æ”¯æ´çš„加密演算法。 +- +- +- Unsupported KeePass database version. +- ä¸æ”¯æ´çš„ KeePass 資料庫版本。 +- +- +- Unable to read encryption IV +- IV = Initialization Vector for symmetric cipher +- 無法讀å–加密 IV +- +- +- Invalid number of groups +- 無效的群組數 +- +- +- Invalid number of entries +- 無效的項目數 +- +- +- Invalid content hash size +- ç„¡æ•ˆçš„å…§å®¹é›œæ¹Šå¤§å° +- +- +- Invalid transform seed size +- 無效的轉æ›ç¨®å­å¤§å° +- +- +- Invalid number of transform rounds +- 無效的轉æ›å›žåˆæ•¸ +- +- +- Unable to construct group tree +- 無法構æˆç¾¤çµ„樹 +- +- +- Root +- 根群組 +- +- +- Key transformation failed +- 金鑰轉æ›å¤±æ•— +- +- +- Invalid group field type number +- 無效的群組欄ä½é¡žåž‹ç·¨è™Ÿ +- +- +- Invalid group field size +- 無效的群組欄ä½å¤§å° +- +- +- Read group field data doesn't match size +- 讀å–群組欄ä½è³‡æ–™å¤§å°ä¸ç›¸ç¬¦ +- +- +- Incorrect group id field size +- 無效的群組 id 欄ä½å¤§å° +- +- +- Incorrect group creation time field size +- 無效的群組建立時間欄ä½å¤§å° +- +- +- Incorrect group modification time field size +- 無效的群組修改時間欄ä½å¤§å° +- +- +- Incorrect group access time field size +- 無效的群組存å–時間欄ä½å¤§å° +- +- +- Incorrect group expiry time field size +- 無效的群組éŽæœŸæ™‚間欄ä½å¤§å° +- +- +- Incorrect group icon field size +- 無效的群組圖示欄ä½å¤§å° +- +- +- Incorrect group level field size +- 無效的群組級別欄ä½å¤§å° +- +- +- Invalid group field type +- 無效的群組欄ä½é¡žåž‹ +- +- +- Missing group id or level +- 缺少群組 id 或級別 +- +- +- Missing entry field type number +- 缺少項目欄ä½é¡žåž‹ç·¨è™Ÿ +- +- +- Invalid entry field size +- 無效的項目欄ä½å¤§å° +- +- +- Read entry field data doesn't match size +- 讀å–的項目欄ä½è³‡æ–™èˆ‡å¤§å°ä¸ç›¸ç¬¦ +- +- +- Invalid entry uuid field size +- 無效的項目 uuid 欄ä½å¤§å° +- +- +- Invalid entry group id field size +- 無效的項目群組 id 欄ä½å¤§å° +- +- +- Invalid entry icon field size +- 無效的項目圖示欄ä½å¤§å° +- +- +- Invalid entry creation time field size +- 無效的項目建立時間欄ä½å¤§å° +- +- +- Invalid entry modification time field size +- 無效的項目修改時間欄ä½å¤§å° +- +- +- Invalid entry expiry time field size +- 無效的項目éŽæœŸæ™‚間欄ä½å¤§å° +- +- +- Invalid entry field type +- 無效的項目欄ä½é¡žåž‹ +- +- +- unable to seek to content position +- 無法定ä½å…§å®¹ +- +- +- Invalid credentials were provided, please try again. +-If this reoccurs, then your database file may be corrupt. +- 所æ供的憑證無效,請å†å˜—試一é。 +-若此情形一å†ç™¼ç”Ÿï¼Œä»£è¡¨æ‚¨çš„資料庫檔案å¯èƒ½å·²æ毀。 +- +- +- Unable to calculate database key +- 無法計算資料庫金鑰 +- +- +- +- KeeShare +- +- Invalid sharing reference +- 無效的分享引用 +- +- +- Inactive share %1 +- 未激活的分享 %1 +- +- +- Imported from %1 +- 從 %1 匯入 +- +- +- Exported to %1 +- 匯出至 %1 +- +- +- Synchronized with %1 +- 與 %1 åŒæ­¥ +- +- +- Import is disabled in settings +- 匯入於設定åœç”¨ +- +- +- Export is disabled in settings +- 匯出於設定åœç”¨ +- +- +- Inactive share +- 未激活的分享 +- +- +- Imported from +- 匯入從 +- +- +- Exported to +- 匯出至 +- +- +- Synchronized with +- åŒæ­¥æ–¼ +- +- +- +- KeyComponentWidget +- +- Key Component +- 金鑰組件 +- +- +- Key Component Description +- 金鑰組件æè¿° +- +- +- Cancel +- å–消 +- +- +- Key Component set, click to change or remove +- 金鑰組件集,點擊以變更或移除 +- +- +- Add %1 +- Add a key component +- 加入 %1 +- +- +- Change %1 +- Change a key component +- 更改 %1 +- +- +- Remove %1 +- Remove a key component +- 移除 %1 +- +- +- %1 set, click to change or remove +- Change or remove a key component +- %1 已設定,點é¸ä»¥æ›´æ”¹æˆ–移除 +- +- +- +- KeyFileEditWidget +- +- Generate +- 產生 +- +- +- Key File +- 金鑰檔案 +- +- +- <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> +- <p>您å¯ä»¥åŠ å…¥ä¸€ä»½åŒ…å«éš¨æ©Ÿå­—元的金鑰檔案以æå‡å®‰å…¨æ€§ã€‚</p><p>您必須將其ä¿å¯†ï¼Œåˆ‡èŽ«ä¸Ÿå¤±ï¼Œå¦å‰‡æ‚¨å°‡æœƒè¢«éŽ–在外頭ï¼</p> +- +- +- Error loading the key file '%1' +-Message: %2 +- 載入金鑰檔案 '%1' 時出錯 +-訊æ¯ï¼š%2 +- +- +- Key files +- 金鑰檔案 +- +- +- All files +- 所有檔案 +- +- +- Create Key File... +- 建立金鑰檔案... +- +- +- Error creating key file +- 建立金鑰檔案時出錯 +- +- +- Unable to create key file: %1 +- 無法建立金鑰檔案:%1 +- +- +- Select a key file +- é¸æ“‡é‡‘鑰檔案 +- +- +- Key file selection +- 金鑰檔案é¸æ“‡ +- +- +- Browse for key file +- ç€è¦½é‡‘鑰檔案 +- +- +- Browse... +- ç€è¦½... +- +- +- Generate a new key file +- 產生新金鑰檔案 +- +- +- Note: Do not use a file that may change as that will prevent you from unlocking your database! +- 注æ„:請ä¸è¦ä½¿ç”¨å¯æ›´æ”¹çš„檔案,å¦å‰‡å¯èƒ½å°Žè‡´æ‚¨ç„¡æ³•è§£éŽ–è³‡æ–™åº«ï¼ +- +- +- Invalid Key File +- 無效的金鑰檔案 +- +- +- You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. +- 您ä¸èƒ½ä½¿ç”¨ç›®å‰çš„資料庫作為自己的金鑰檔案。請é¸æ“‡ä¸€å€‹ä¸åŒæª”案,或者產生一份新的金鑰檔案。 +- +- +- Suspicious Key File +- å¯ç–‘的金鑰檔案 +- +- +- The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. +-Are you sure you want to continue with this file? +- 所é¸æ“‡çš„金鑰檔案åƒæ˜¯ä¸€ä»½å¯†ç¢¼è³‡æ–™åº«æª”案。金鑰檔案必須是一個永ä¸è®Šæ›´çš„éœæ…‹æª”案,å¦å‰‡æ‚¨å°‡æ°¸é å¤±åŽ»è³‡æ–™åº«çš„å­˜å–權。 +-您確定è¦ä»¥æ­¤æª”案繼續? +- +- +- Old key file format +- èˆŠçš„é‡‘é‘°æª”æ¡ˆæ ¼å¼ +- +- +- You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. +- 您é¸æ“‡çš„金鑰檔案格å¼ç‰ˆæœ¬éŽèˆŠï¼ŒKeePassXC å¯èƒ½<br>在未來åœæ­¢æ”¯æ´ã€‚<br><br>請考慮產生一組新的金鑰檔案。 +- +- +- +- MainWindow +- +- &Database +- 資料庫 (&D) +- +- +- &Help +- 幫助 (&H) +- +- +- &Groups +- 群組 (&G) +- +- +- &Tools +- 工具 (&T) +- +- +- &Quit +- 離開 (&Q) +- +- +- &About +- 關於 (&A) +- +- +- Database settings +- 資料庫設定 +- +- +- Copy username to clipboard +- 將使用者å稱複製到剪貼簿 +- +- +- Copy password to clipboard +- 將密碼複製到剪貼簿 +- +- +- &Settings +- 設定 (&S) +- +- +- &Title +- 標題 (&T) +- +- +- Copy title to clipboard +- 將標題複製到剪貼簿 +- +- +- &URL +- &URL +- +- +- Copy URL to clipboard +- å°‡ URL 複製到剪貼簿 +- +- +- &Notes +- 備註 (&N) +- +- +- Copy notes to clipboard +- 將備註複製到剪貼簿 +- +- +- Copy &TOTP +- 複製 &TOTP +- +- +- E&mpty recycle bin +- 清空回收桶 (&M) +- +- +- Clear history +- 清除歷å²è¨˜éŒ„ +- +- +- Access error for config file %1 +- 設定檔存å–錯誤:%1 +- +- +- Settings +- 設定 +- +- +- Toggle window +- 切æ›è¦–窗 +- +- +- Quit KeePassXC +- 退出 KeePassXC +- +- +- Please touch the button on your YubiKey! +- 請接觸您 YubiKey ä¸Šçš„æŒ‰éˆ•ï¼ +- +- +- WARNING: You are using an unstable build of KeePassXC! +-There is a high risk of corruption, maintain a backup of your databases. +-This version is not meant for production use. +- 警告:您正在使用éžç©©å®šç‰ˆæœ¬çš„ KeePassXCï¼ +-具有高風險的破壞å¯èƒ½ï¼Œè«‹å‚™ä»½ä½ çš„資料庫。 +-這個版本並ä¸é©åˆç”Ÿç”¢ç”¨é€”。 +- +- +- &Donate +- æè´ˆ (&D) +- +- +- WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +-We recommend you use the AppImage available on our downloads page. +- 警告:您的 Qt 版本å¯èƒ½æœƒå°Žè‡´ KeePassXC 與螢幕éµç›¤å´©æ½°ï¼ +-建議您使用我們下載é é¢ä¸Šæ供的 AppImage。 +- +- +- &Import +- 匯入 (&I) +- +- +- Create a new database +- 建立新資料庫 +- +- +- Merge from another KDBX database +- 與其他 KDBX 資料庫åˆä½µ +- +- +- Add a new entry +- 加入新項目 +- +- +- View or edit entry +- 檢視或編輯項目 +- +- +- Add a new group +- 加入新群組 +- +- +- Perform &Auto-Type +- 進行自動輸入 (&A) +- +- +- Open &URL +- é–‹å•Ÿ &URL +- +- +- Import a KeePass 1 database +- 匯入 KeePass 1 資料庫 +- +- +- Import a CSV file +- 匯入 CSV 檔案 +- +- +- NOTE: You are using a pre-release version of KeePassXC! +-Expect some bugs and minor issues, this version is not meant for production use. +- 注æ„:您正在使用 KeePassXC çš„é å…ˆç™¼è¡Œç‰ˆæœ¬ï¼ +-此版本並ä¸é©åˆç”Ÿç”¢ç”¨é€”,å¯èƒ½æœƒå‡ºç¾ä¸€äº›ç¨‹å¼éŒ¯èª¤å’Œå°å•é¡Œã€‚ +- +- +- Check for updates on startup? +- 是å¦åœ¨å•Ÿå‹•æ™‚檢查更新? +- +- +- Would you like KeePassXC to check for updates on startup? +- 你是å¦è¦åœ¨ KeePassXC 啟動時檢查更新? +- +- +- You can always check for updates manually from the application menu. +- ä½ å¯ä»¥éš¨æ™‚在應用程å¼é¸å–®ä¸­æ‰‹å‹•æª¢æŸ¥æ›´æ–°ã€‚ +- +- +- &Export +- 匯出 (&E) +- +- +- Sort &A-Z +- 排åºå¾ž &A 到 Z +- +- +- Sort &Z-A +- 排åºå¾ž &Z 到 A +- +- +- &Password Generator +- 密碼產生器 (&P) +- +- +- Import a 1Password Vault +- 匯入 1Password ä¿éšªåº« +- +- +- &Getting Started +- 開始使用 (&G) +- +- +- &User Guide +- ä½¿ç”¨è€…æŒ‡å— (&U) +- +- +- &Keyboard Shortcuts +- éµç›¤å¿«æ·éµ (&K) +- +- +- &Recent Databases +- 最近的資料庫 (&R) +- +- +- &Entries +- é …ç›® (&E) +- +- +- Copy Att&ribute +- 複製屬性 (&R) +- +- +- TOTP +- TOTP +- +- +- View +- 顯示 +- +- +- Theme +- 主題 +- +- +- &Check for Updates +- 檢查更新 (&C) +- +- +- &Open Database… +- 開啟資料庫 (&O)… +- +- +- &Save Database +- 儲存資料庫 (&S) +- +- +- &Close Database +- 關閉資料庫 (&C) +- +- +- &New Database… +- 新建資料庫 (&N)… +- +- +- &Merge From Database… +- 從資料庫åˆä½µ (&M)… +- +- +- &New Entry… +- 新建項目 (&N)… +- +- +- &Edit Entry… +- 編輯項目 (&E)… +- +- +- &Delete Entry… +- 刪除項目 (&D)… +- +- +- &New Group… +- 新建群組 (&N)… +- +- +- &Edit Group… +- 編輯群組 (&E)… +- +- +- &Delete Group… +- 刪除群組 (&D)… +- +- +- Download All &Favicons… +- 下載所有網站圖標 (&F)… +- +- +- Sa&ve Database As… +- 儲存資料庫為 (&V)… +- +- +- Database &Security… +- 資料庫安全 (&S)… +- +- +- Database &Reports... +- 資料庫報告 (&R)... +- +- +- Statistics, health check, etc. +- 資料統計與å¥åº·æª¢æŸ¥ç­‰ +- +- +- &Database Settings… +- 資料庫設定 (&D)… +- +- +- &Clone Entry… +- 複製項目 (&C)… +- +- +- Move u&p +- 上移 (&P) +- +- +- Move entry one step up +- 將項目å‘上移動一步 +- +- +- Move do&wn +- 下移 (&W) +- +- +- Move entry one step down +- 將項目å‘下移動一步 +- +- +- Copy &Username +- 複製使用者å稱 (&U) +- +- +- Copy &Password +- 複製密碼 (&P) +- +- +- Download &Favicon +- 下載網站圖標 (&F) +- +- +- &Lock Databases +- 鎖定資料庫 (&L) +- +- +- &CSV File… +- &CSV 檔… +- +- +- &HTML File… +- &HTML 檔… +- +- +- KeePass 1 Database… +- KeePass 1 資料庫… +- +- +- 1Password Vault… +- 1Password ä¿éšªåº«â€¦ +- +- +- CSV File… +- CSV 檔… +- +- +- Show TOTP +- 顯示 TOTP +- +- +- Show QR Code +- 顯示 QR 碼 +- +- +- Set up TOTP… +- 設定 TOTP… +- +- +- Report a &Bug +- 回報å•é¡Œ (&B) +- +- +- Open Getting Started Guide +- 開啟「開始使用ã€æŒ‡å— +- +- +- &Online Help +- 線上幫助 (&O) +- +- +- Go to online documentation +- å‰å¾€ç·šä¸Šæ–‡ä»¶ +- +- +- Open User Guide +- é–‹å•Ÿä½¿ç”¨è€…æŒ‡å— +- +- +- Save Database Backup... +- 儲存資料庫備份... +- +- +- Add key to SSH Agent +- 加入金鑰至 SSH ä»£ç† +- +- +- Remove key from SSH Agent +- 從 SSH 代ç†ç§»é™¤é‡‘é‘° +- +- +- Compact Mode +- ç·Šç·»æ¨¡å¼ +- +- +- Automatic +- 自動 +- +- +- Light +- 淺色 +- +- +- Dark +- 深色 +- +- +- Classic (Platform-native) +- 經典(平å°åŽŸç”Ÿï¼‰ +- +- +- Show Toolbar +- 顯示工具列 +- +- +- Show Preview Panel +- 顯示é è¦½é¢æ¿ +- +- +- Don't show again for this version +- å°æ­¤ç‰ˆæœ¬ä¸å†é¡¯ç¤º +- +- +- Restart Application? +- é‡å•Ÿæ‡‰ç”¨ç¨‹å¼ï¼Ÿ +- +- +- You must restart the application to apply this setting. Would you like to restart now? +- å¿…é ˆé‡å•Ÿæ‡‰ç”¨ç¨‹å¼ä¾†å¥—用此設定。您是å¦è¦ç¾åœ¨é‡æ–°å•Ÿå‹•ï¼Ÿ +- +- +- Perform Auto-Type Sequence +- 執行自動輸入åºåˆ— +- +- +- {USERNAME} +- {USERNAME} +- +- +- {USERNAME}{ENTER} +- {USERNAME}{ENTER} +- +- +- {PASSWORD} +- {PASSWORD} +- +- +- {PASSWORD}{ENTER} +- {PASSWORD}{ENTER} +- +- +- Always on Top +- 視窗置頂顯示 +- +- +- Hide Usernames +- éš±è—使用者å稱 +- +- +- Hide Passwords +- éš±è—密碼 +- +- +- +- ManageDatabase +- +- Database settings +- 資料庫設定 +- +- +- Edit database settings +- 編輯資料庫設定 +- +- +- Unlock database +- 解鎖資料庫 +- +- +- Unlock database to show more information +- 解鎖資料庫來顯示更多資訊 +- +- +- Lock database +- 鎖定資料庫 +- +- +- +- ManageSession +- +- Disconnect +- ä¸­æ–·é€£çµ +- +- +- Disconnect this application +- 中斷此程å¼çš„é€£çµ +- +- +- +- Merger +- +- Creating missing %1 [%2] +- 建立缺少的 %1 [%2] +- +- +- Relocating %1 [%2] +- é‡æ–°å®šä½ %1 [%2] +- +- +- Overwriting %1 [%2] +- 覆寫 %1 [%2] +- +- +- older entry merged from database "%1" +- 較舊的項目從資料庫「%1ã€åˆä½µ +- +- +- Adding backup for older target %1 [%2] +- 為較舊的目標 %1 [%2] 添加備份 +- +- +- Adding backup for older source %1 [%2] +- ç‚ºè¼ƒèˆŠçš„ä¾†æº %1 [%2] 添加備份 +- +- +- Reapplying older target entry on top of newer source %1 [%2] +- åœ¨è¼ƒæ–°çš„ä¾†æº %1 [%2] 之上é‡æ–°æ‡‰ç”¨è¼ƒèˆŠçš„目標項目 +- +- +- Reapplying older source entry on top of newer target %1 [%2] +- 在較新的目標 %1 [%2] 之上é‡æ–°æ‡‰ç”¨è¼ƒèˆŠçš„來æºé …ç›® +- +- +- Synchronizing from newer source %1 [%2] +- å¾žè¼ƒæ–°çš„ä¾†æº %1 [%2] åŒæ­¥ +- +- +- Synchronizing from older source %1 [%2] +- å¾žè¼ƒèˆŠçš„ä¾†æº %1 [%2] åŒæ­¥ +- +- +- Deleting child %1 [%2] +- 刪除å­é … %1 [%2] +- +- +- Deleting orphan %1 [%2] +- 刪除孤立項 %1 [%2] +- +- +- Changed deleted objects +- 更改已刪除的å°è±¡ +- +- +- Adding missing icon %1 +- 加入缺失的圖示 %1 +- +- +- Removed custom data %1 [%2] +- 移除自定義資料 %1 [%2] +- +- +- Adding custom data %1 [%2] +- 加入自定義資料 %1 [%2] +- +- +- +- NewDatabaseWizard +- +- Create a new KeePassXC database... +- 建立新的 KeePassXC 資料庫... +- +- +- Root +- Root group +- 根群組 +- +- +- +- NewDatabaseWizardPage +- +- WizardPage +- åš®å°Žé  +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- 您å¯ä»¥åœ¨æ­¤èª¿æ•´è³‡æ–™åº«çš„加密設定。別擔心,之後也å¯ä»¥åˆ°è³‡æ–™åº«è¨­å®šæ›´æ”¹å®ƒå€‘。 +- +- +- Advanced Settings +- 進階設定 +- +- +- Simple Settings +- 簡單設定 +- +- +- Encryption Settings +- 加密設定 +- +- +- +- NewDatabaseWizardPageDatabaseKey +- +- Database Credentials +- 資料庫憑證 +- +- +- A set of credentials known only to you that protects your database. +- åªæœ‰æ‚¨çŸ¥é“的憑證組åˆæ‰èƒ½ä¿è­·æ‚¨çš„資料庫。 +- +- +- +- NewDatabaseWizardPageEncryption +- +- Encryption Settings +- 加密設定 +- +- +- Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. +- 您å¯ä»¥åœ¨æ­¤èª¿æ•´è³‡æ–™åº«çš„加密設定。別擔心,之後也å¯ä»¥åˆ°è³‡æ–™åº«è¨­å®šæ›´æ”¹å®ƒå€‘。 +- +- +- +- NewDatabaseWizardPageMetaData +- +- General Database Information +- 通用資料庫資訊 +- +- +- Please fill in the display name and an optional description for your new database: +- 請為您的新資料庫填寫一個顯示å稱,åŠä¸€å€‹é¸æ“‡æ€§çš„說明: +- +- +- +- NixUtils +- +- Password Manager +- 密碼管ç†å“¡ +- +- +- +- OpData01 +- +- Invalid OpData01, does not contain header +- 無效的 OpData01,未包å«æ¨™é ­ +- +- +- Unable to read all IV bytes, wanted 16 but got %1 +- 無法讀å–åˆå§‹å‘é‡ (IV) 的所有ä½å…ƒçµ„,é æœŸç‚º 16 但得到了 %1 +- +- +- Unable to init cipher for opdata01: %1 +- 無法åˆå§‹åŒ– opdata01 的加密:%1 +- +- +- Unable to read all HMAC signature bytes +- 無法讀å–所有 HMAC ç°½åä½å…ƒçµ„ +- +- +- Malformed OpData01 due to a failed HMAC +- 異常的 OpData01,因為 HMAC é‹è¡Œå¤±æ•— +- +- +- Unable to process clearText in place +- 無法在場處ç†ç´”文本 +- +- +- Expected %1 bytes of clear-text, found %2 +- é æœŸ %1 ä½å…ƒçµ„的純文本,實際為 %2 +- +- +- +- OpVaultOpenWidget +- +- Read Database did not produce an instance +-%1 +- 讀å–資料庫並未產生實體 +-%1 +- +- +- +- OpVaultReader +- +- Directory .opvault must exist +- 目錄 .opvault 必須存在 +- +- +- Directory .opvault must be readable +- 目錄 .opvault 必須為å¯è®€å– +- +- +- Directory .opvault/default must exist +- 目錄 .opvault/default 必須存在 +- +- +- Directory .opvault/default must be readable +- 目錄 .opvault/default 必須為å¯è®€å– +- +- +- Unable to decode masterKey: %1 +- 無法解碼主密鑰:%1 +- +- +- Unable to derive master key: %1 +- 無法推導主密鑰:%1 +- +- +- +- OpenSSHKey +- +- Invalid key file, expecting an OpenSSH key +- 無效的金鑰檔案,é æœŸæ‡‰æ˜¯ OpenSSH 金鑰 +- +- +- PEM boundary mismatch +- PEM 邊界數é‡ä¸å°ç¨± +- +- +- Base64 decoding failed +- Base64 解碼失敗 +- +- +- Key file way too small. +- 金鑰檔太å°ã€‚ +- +- +- Key file magic header id invalid +- 金鑰檔魔術標頭 ID 無效 +- +- +- Found zero keys +- 找到零個金鑰 +- +- +- Failed to read public key. +- 無法讀å–公開金鑰。 +- +- +- Corrupted key file, reading private key failed +- 金鑰檔æ壞,讀å–ç§å¯†é‡‘鑰失敗 +- +- +- No private key payload to decrypt +- ç§å¯†é‡‘鑰中沒有載體å¯è§£å¯† +- +- +- Trying to run KDF without cipher +- 嘗試執行無密碼的 KDF +- +- +- Passphrase is required to decrypt this key +- 需è¦å¯†ç¢¼çŸ­èªžä»¥è§£å¯†æ­¤é‡‘é‘° +- +- +- Key derivation failed, key file corrupted? +- 金鑰推導失敗,金鑰檔已æ壞? +- +- +- Decryption failed, wrong passphrase? +- 解密失敗,密碼短語錯誤? +- +- +- Unexpected EOF while reading public key +- 讀å–公開金鑰時出ç¾æ„外的檔案çµå°¾ +- +- +- Unexpected EOF while reading private key +- 讀å–ç§å¯†é‡‘鑰時出ç¾æ„外的檔案çµå°¾ +- +- +- Can't write public key as it is empty +- 無法寫入公開金鑰,因為它是空的 +- +- +- Unexpected EOF when writing public key +- 寫入公開金鑰時出ç¾æ„外的檔案çµå°¾ +- +- +- Can't write private key as it is empty +- 無法寫入ç§å¯†é‡‘鑰,因為它是空的 +- +- +- Unexpected EOF when writing private key +- 寫入ç§å¯†é‡‘鑰時出ç¾æ„外的檔案çµå°¾ +- +- +- Unsupported key type: %1 +- ä¸æ”¯æ´çš„金鑰類型:%1 +- +- +- Unknown cipher: %1 +- 未知的密語:%1 +- +- +- Cipher IV is too short for MD5 kdf +- 加密åˆå§‹å‘é‡ (IV) å° MD5 kdf 來說太短了 +- +- +- Unknown KDF: %1 +- 未知的 KDF:%1 +- +- +- Unknown key type: %1 +- 未知的金鑰類型:%1 +- +- +- +- PasswordEdit +- +- Passwords do not match +- ä¸ç¬¦åˆçš„密碼 +- +- +- Passwords match so far +- ç›®å‰ç¬¦åˆçš„密碼 +- +- +- Toggle Password (%1) +- 切æ›å¯†ç¢¼ (%1) +- +- +- Generate Password (%1) +- 生æˆå¯†ç¢¼ (%1) +- +- +- Warning: Caps Lock enabled! +- 警告:Caps Lock å·²å•Ÿç”¨ï¼ +- +- +- +- PasswordEditWidget +- +- Enter password: +- 輸入密碼: +- +- +- Confirm password: +- 確èªå¯†ç¢¼ï¼š +- +- +- Password +- 密碼 +- +- +- <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> +- <p>密碼是ä¿å…¨æ‚¨çš„資料庫的主è¦æ–¹å¼ã€‚</p><p>好的密碼è¦å¤ é•·ä¸”ç¨ç‰¹ã€‚KeePassXC å¯ä»¥å¹«æ‚¨ç”¢ç”Ÿä¸€çµ„。</p> +- +- +- Passwords do not match. +- 密碼ä¸ç›¸ç¬¦ã€‚ +- +- +- Password field +- å¯†ç¢¼æ¬„ä½ +- +- +- Repeat password field +- é‡è¤‡å¯†ç¢¼æ¬„ä½ +- +- +- +- PasswordGeneratorWidget +- +- %p% +- %p% +- +- +- strength +- Password strength +- 強度 +- +- +- entropy +- 熵值 +- +- +- Password +- 密碼 +- +- +- Character Types +- 字元類型 +- +- +- Numbers +- 數字 +- +- +- Extended ASCII +- 擴展 ASCII 碼 +- +- +- Exclude look-alike characters +- 去除相似的字元 +- +- +- Pick characters from every group +- 從æ¯ä¸€çµ„中é¸æ“‡å­—å…ƒ +- +- +- &Length: +- 長度 (&L): +- +- +- Passphrase +- 密碼短語 +- +- +- Wordlist: +- 詞彙表: +- +- +- Word Separator: +- 單詞分隔符號: +- +- +- Close +- 關閉 +- +- +- Entropy: %1 bit +- 資訊熵:%1 ä½å…ƒ +- +- +- Password Quality: %1 +- 密碼å“質:%1 +- +- +- Poor +- Password quality +- 極弱 +- +- +- Weak +- Password quality +- 較弱 +- +- +- Good +- Password quality +- 較好 +- +- +- Excellent +- Password quality +- 極好 +- +- +- Switch to advanced mode +- 切æ›è‡³é€²éšŽæ¨¡å¼ +- +- +- Advanced +- 進階 +- +- +- Braces +- 括號 +- +- +- Punctuation +- 標點 +- +- +- Quotes +- 引號 +- +- +- Logograms +- 語標符號 +- +- +- Character set to exclude from generated password +- ç”¢ç”Ÿå¯†ç¢¼æ™‚æŽ’é™¤çš„å­—å…ƒé›†åˆ +- +- +- Do not include: +- ä¸è¦åŒ…括: +- +- +- Add non-hex letters to "do not include" list +- å°‡éžå六進制字æ¯åŠ å…¥ã€Œä¸è¦åŒ…括ã€æ¸…å–® +- +- +- Hex +- å六進制 +- +- +- Excluded characters: "0", "1", "l", "I", "O", "|", "ï¹’" +- 排除以下字元:"0", "1", "l", "I", "O", "|", "ï¹’" +- +- +- Generated password +- 已產生密碼 +- +- +- Upper-case letters +- å¤§å¯«å­—æ¯ +- +- +- Lower-case letters +- å°å¯«å­—æ¯ +- +- +- Special characters +- ç‰¹æ®Šå­—æ¯ +- +- +- Math Symbols +- 數學符號 +- +- +- Dashes and Slashes +- 破折號與斜線號 +- +- +- Excluded characters +- 排除字元 +- +- +- Hex Passwords +- å六進制密碼 +- +- +- Password length +- 密碼長度 +- +- +- Word Case: +- å­—æ¯å¤§å°å¯«ï¼š +- +- +- Regenerate password +- é‡æ–°ç”¢ç”Ÿå¯†ç¢¼ +- +- +- Copy password +- 複製密碼 +- +- +- lower case +- 全部å°å¯« +- +- +- UPPER CASE +- 全部大寫 +- +- +- Title Case +- 首字æ¯å¤§å¯« +- +- +- Generate Password +- 產生密碼 +- +- +- Also choose from: +- 也從此é¸æ“‡: +- +- +- Additional characters to use for the generated password +- 用於生æˆå¯†ç¢¼çš„其他字元 +- +- +- Additional characters +- 其他字元 +- +- +- Word Count: +- 詞彙數: +- +- +- Esc +- Esc +- +- +- Apply Password +- 套用密碼 +- +- +- Ctrl+S +- Ctrl+S +- +- +- Regenerate password (%1) +- é‡æ–°ç”Ÿæˆå¯†ç¢¼ (%1) +- +- +- Special Characters +- 特殊字元 +- +- +- +- QApplication +- +- KeeShare +- KeeShare +- +- +- Statistics +- 統計 +- +- +- Very weak password +- 極弱密碼 +- +- +- Password entropy is %1 bits +- 密碼熵值為 %1 ä½å…ƒ +- +- +- Weak password +- 弱密碼 +- +- +- Used in %1/%2 +- 使用於 %1/%2 +- +- +- Password is used %1 times +- 密碼被使用 %1 次 +- +- +- Password has expired +- 密碼已éŽæœŸ +- +- +- Password expiry was %1 +- 密碼éŽæœŸæ–¼ %1 +- +- +- Password is about to expire +- 密碼å³å°‡éŽæœŸ +- +- +- Password expires in %1 days +- 密碼將於 %1 天後éŽæœŸ +- +- +- Password will expire soon +- 密碼ä¸ä¹…後將éŽæœŸ +- +- +- Password expires on %1 +- 密碼於 %1 éŽæœŸ +- +- +- Health Check +- å¥åº·æª¢æŸ¥ +- +- +- HIBP +- HIBP +- +- +- +- QMessageBox +- +- Overwrite +- 覆寫 +- +- +- Delete +- 刪除 +- +- +- Move +- 移動 +- +- +- Empty +- 清空 +- +- +- Remove +- 移除 +- +- +- Skip +- è·³éŽ +- +- +- Disable +- åœç”¨ +- +- +- Merge +- åˆä½µ +- +- +- Continue +- 繼續 +- +- +- +- QObject +- +- Database not opened +- 資料庫未開啟 +- +- +- Database hash not available +- 資料庫雜湊ä¸å¯ç”¨ +- +- +- Client public key not received +- 未收到用戶端公開金鑰 +- +- +- Cannot decrypt message +- ç„¡æ³•è§£å¯†è¨Šæ¯ +- +- +- Action cancelled or denied +- æ“作被å–消或被拒絕 +- +- +- KeePassXC association failed, try again +- KeePassXC é—œè¯å¤±æ•—,請é‡è©¦ +- +- +- Encryption key is not recognized +- 加密金鑰未被識別 +- +- +- Incorrect action +- 錯誤的æ“作 +- +- +- Empty message received +- æ”¶åˆ°ç©ºæ¶ˆæ¯ +- +- +- No URL provided +- 未æä¾› URL +- +- +- No logins found +- 找ä¸åˆ°ç™»å…¥è³‡è¨Š +- +- +- Unknown error +- 未知的錯誤 +- +- +- Add a new entry to a database. +- 加入項目到資料庫。 +- +- +- Path of the database. +- 資料庫的路徑。 +- +- +- Key file of the database. +- 資料庫的金鑰檔案。 +- +- +- path +- 路徑 +- +- +- Username for the entry. +- 此項目的使用者å稱。 +- +- +- username +- 使用者å稱 +- +- +- URL for the entry. +- 此項目的 URL。 +- +- +- URL +- URL +- +- +- Prompt for the entry's password. +- æ示此項目的密碼。 +- +- +- Generate a password for the entry. +- 產生此項目的密碼。 +- +- +- length +- 長度 +- +- +- Path of the entry to add. +- è¦åŠ å…¥çš„項目路徑。 +- +- +- Path of the entry to clip. +- clip = copy to clipboard +- 欲剪輯的項目路徑。 +- +- +- Timeout in seconds before clearing the clipboard. +- 清除剪貼簿之å‰ä¿å­˜å¤šä¹… (秒)。 +- +- +- Edit an entry. +- 編輯項目。 +- +- +- Title for the entry. +- 項目標題。 +- +- +- title +- 標題 +- +- +- Path of the entry to edit. +- 欲編輯的項目路徑。 +- +- +- Estimate the entropy of a password. +- 估計密碼的 entropy。 +- +- +- Password for which to estimate the entropy. +- 用於估計 entropy 的密碼。 +- +- +- Perform advanced analysis on the password. +- å°å¯†ç¢¼åŸ·è¡Œé«˜ç´šåˆ†æžã€‚ +- +- +- +- +-Available commands: +- +- +- +-å¯ç”¨å‘½ä»¤ï¼š +- +- +- +- Name of the command to execute. +- è¦åŸ·è¡Œçš„命令的å稱。 +- +- +- List database entries. +- 列出資料庫項目。 +- +- +- Path of the group to list. Default is / +- è¦åˆ—出的群組路徑。é è¨­æ˜¯ / +- +- +- Find entries quickly. +- 快速尋找項目。 +- +- +- Search term. +- æœå°‹æ¢ä»¶ã€‚ +- +- +- Merge two databases. +- åˆä½µå…©å€‹è³‡æ–™åº«ã€‚ +- +- +- Path of the database to merge from. +- åˆä½µæ™‚的來æºè³‡æ–™åº«è·¯å¾‘。 +- +- +- Use the same credentials for both database files. +- å°å…©å€‹è³‡æ–™åº«æª”案使用相åŒçš„èªè­‰ã€‚ +- +- +- Key file of the database to merge from. +- 用於åˆä½µè³‡æ–™åº«çš„金鑰檔案。 +- +- +- Show an entry's information. +- 顯示項目資訊。 +- +- +- Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. +- 欲顯示的屬性å稱。此é¸é …å¯ä»¥å¤šæ¬¡æŒ‡å®šï¼Œæ¯å€‹å±¬æ€§æœƒç…§é †åºé€è¡Œé¡¯ç¤ºã€‚如果未指定任何屬性,則會給出é è¨­å±¬æ€§çš„摘è¦ã€‚ +- +- +- attribute +- 屬性 +- +- +- Name of the entry to show. +- è¦é¡¯ç¤ºçš„é …ç›®å稱。 +- +- +- NULL device +- NULL è£ç½® +- +- +- error reading from device +- 從è£ç½®è®€å–時出錯 +- +- +- malformed string +- æ ¼å¼ä¸æ­£ç¢ºçš„字串 +- +- +- missing closing quote +- 缺少å³å¼•è™Ÿ +- +- +- Group +- 群組 +- +- +- Title +- 標題 +- +- +- Username +- 使用者å稱 +- +- +- Password +- 密碼 +- +- +- Notes +- 備註 +- +- +- Last Modified +- 最後編輯 +- +- +- Created +- 已建立 +- +- +- Browser Integration +- ç€è¦½å™¨æ•´åˆ +- +- +- SSH Agent +- SSH ä»£ç† +- +- +- Generate a new random diceware passphrase. +- 產生一組全新隨機的 Diceware 密碼短語。 +- +- +- Word count for the diceware passphrase. +- Diceware 密碼短語字數統計 +- +- +- Wordlist for the diceware generator. +-[Default: EFF English] +- Diceware 產生器使用的字詞表。 +-[é è¨­ï¼šEFF English] +- +- +- Generate a new random password. +- 產生新的隨機密碼。 +- +- +- Could not create entry with path %1. +- 無法建立路徑為 %1 的項目。 +- +- +- Enter password for new entry: +- 為新項目輸入密碼: +- +- +- Writing the database failed %1. +- 寫入資料庫失敗 %1。 +- +- +- Successfully added entry %1. +- æˆåŠŸåŠ å…¥é …ç›® %1。 +- +- +- Invalid timeout value %1. +- 無效的超時值 %1。 +- +- +- Entry %1 not found. +- é …ç›® %1 未找到。 +- +- +- Entry with path %1 has no TOTP set up. +- 路徑為 %1 的項目未設定 TOTP。 +- +- +- Clearing the clipboard in %1 second(s)... +- 將於 %1 秒後清空剪貼簿... +- +- +- Clipboard cleared! +- å‰ªè²¼ç°¿å·²æ¸…ç©ºï¼ +- +- +- Silence password prompt and other secondary outputs. +- 關閉密碼æ示與其他輔助輸出。 +- +- +- count +- CLI parameter +- 計數 +- +- +- Could not find entry with path %1. +- 未找到路徑為 %1 的項目。 +- +- +- Not changing any field for entry %1. +- 未更改項目 %1 的任何欄ä½ã€‚ +- +- +- Enter new password for entry: +- 為項目輸入新密碼: +- +- +- Writing the database failed: %1 +- 寫入資料庫失敗:%1 +- +- +- Successfully edited entry %1. +- æˆåŠŸç·¨è¼¯é …ç›® %1。 +- +- +- Length %1 +- 長度 %1 +- +- +- Entropy %1 +- 熵值 +- +- +- Log10 %1 +- Log10 %1 +- +- +- Multi-word extra bits %1 +- 多字詞é¡å¤–å­—å…ƒ %1 +- +- +- Type: Bruteforce +- 類型:暴力 +- +- +- Type: Dictionary +- 類型:字典 +- +- +- Type: Dict+Leet +- 類型:字典+åå–® +- +- +- Type: User Words +- 類型:使用者字詞 +- +- +- Type: User+Leet +- 類型:使用者+åå–® +- +- +- Type: Repeated +- 類型:é‡è¤‡ +- +- +- Type: Sequence +- 類型:åºåˆ— +- +- +- Type: Spatial +- 類型:空間 +- +- +- Type: Date +- 類型:日期 +- +- +- Type: Bruteforce(Rep) +- 類型:暴力破解(é‡è¤‡) +- +- +- Type: Dictionary(Rep) +- 類型:字典(é‡è¤‡) +- +- +- Type: Dict+Leet(Rep) +- (é‡è¤‡) +- +- +- Type: User Words(Rep) +- 類型:使用者字詞(é‡è¤‡) +- +- +- Type: User+Leet(Rep) +- 類型:使用者+åå–®(é‡è¤‡) +- +- +- Type: Repeated(Rep) +- 類型:é‡è¤‡(é‡è¤‡) +- +- +- Type: Sequence(Rep) +- 類型:åºåˆ—(é‡è¤‡) +- +- +- Type: Spatial(Rep) +- 類型:空間(é‡è¤‡) +- +- +- Type: Date(Rep) +- 類型:日期(é‡è¤‡) +- +- +- Type: Unknown%1 +- 類型:未知%1 +- +- +- Entropy %1 (%2) +- 熵值 %1 (%2) +- +- +- *** Password length (%1) != sum of length of parts (%2) *** +- *** 密碼長度 (%1) != 部ä½é•·åº¦ç¸½å’Œ (%2) *** +- +- +- Failed to load key file %1: %2 +- 載入金鑰檔案 %1 失敗:%2 +- +- +- Length of the generated password +- 產生密碼長度 +- +- +- Use lowercase characters +- 使用å°å¯«å­—æ¯ +- +- +- Use uppercase characters +- ä½¿ç”¨å¤§å¯«å­—æ¯ +- +- +- Use special characters +- 使用特殊字元 +- +- +- Use extended ASCII +- 使用延伸 ASCII 碼 +- +- +- Exclude character set +- æŽ’é™¤çš„å­—å…ƒçµ„åˆ +- +- +- chars +- å­—å…ƒ +- +- +- Exclude similar looking characters +- 排除相似字元 +- +- +- Include characters from every selected group +- 包å«æ¯å€‹é¸å®šçµ„中的字元 +- +- +- Recursively list the elements of the group. +- éžè¿´åˆ—出組內元素。 +- +- +- Cannot find group %1. +- 未找到群組 %1。 +- +- +- Error reading merge file: +-%1 +- 讀å–åˆä½µæª”案錯誤: +-%1 +- +- +- Unable to save database to file : %1 +- 無法儲存資料庫至檔案:%1 +- +- +- Unable to save database to file: %1 +- 無法儲存資料庫至檔案:%1 +- +- +- Successfully recycled entry %1. +- æˆåŠŸå›žæ”¶é …ç›® %1。 +- +- +- Successfully deleted entry %1. +- æˆåŠŸåˆªé™¤é …ç›® %1。 +- +- +- Show the entry's current TOTP. +- 顯示項目目å‰çš„ TOTP。 +- +- +- ERROR: unknown attribute %1. +- 錯誤:未知的屬性 %1。 +- +- +- No program defined for clipboard manipulation +- 沒有為剪貼簿æ“ä½œå®šç¾©ç¨‹å¼ +- +- +- file empty +- 檔案為空 +- +- +- %1: (row, col) %2,%3 +- %1: (列, è¡Œ) %2,%3 +- +- +- AES-KDF (KDBX 4) +- AES-KDF (KDBX 4) +- +- +- AES-KDF (KDBX 3.1) +- AES-KDF (KDBX 3.1) +- +- +- Invalid Settings +- TOTP +- 無效的設定 +- +- +- Invalid Key +- TOTP +- 無效的金鑰 +- +- +- Message encryption failed. +- 訊æ¯åŠ å¯†å¤±æ•—。 +- +- +- No groups found +- 未找到群組 +- +- +- Create a new database. +- 建立新群組。 +- +- +- File %1 already exists. +- 檔案 %1 已存在。 +- +- +- Loading the key file failed +- 載入金鑰檔案失敗 +- +- +- No key is set. Aborting database creation. +- 未設置金鑰。中止資料庫建立。 +- +- +- Failed to save the database: %1. +- 儲存資料庫失敗:%1 +- +- +- Successfully created new database. +- æˆåŠŸå»ºç«‹æ–°è³‡æ–™åº«ã€‚ +- +- +- Creating KeyFile %1 failed: %2 +- 建立金鑰檔案 %1 失敗:%2 +- +- +- Loading KeyFile %1 failed: %2 +- 載入金鑰檔案 %1 失敗:%2 +- +- +- Path of the entry to remove. +- 欲移除的項目路徑。 +- +- +- Existing single-instance lock file is invalid. Launching new instance. +- ç¾æœ‰çš„單實例鎖定檔無效。正在啟動新實例。 +- +- +- The lock file could not be created. Single-instance mode disabled. +- 無法建立鎖定文件。已åœç”¨å–®ä¸€å¯¦ä¾‹æ¨¡å¼ã€‚ +- +- +- KeePassXC - cross-platform password manager +- KeePassXC - 跨平å°çš„密碼管ç†å·¥å…· +- +- +- filenames of the password databases to open (*.kdbx) +- 欲開啟的密碼資料庫檔å (*.kdbx) +- +- +- path to a custom config file +- 自定義設定檔的路徑 +- +- +- key file of the database +- 資料庫的金鑰檔案 +- +- +- read password of the database from stdin +- 從 stdin 讀å–資料庫密碼 +- +- +- Another instance of KeePassXC is already running. +- 其他 KeePassXC 程å¼æ­£åœ¨é‹è¡Œä¸­ã€‚ +- +- +- Fatal error while testing the cryptographic functions. +- 測試加密函數時發生é‡å¤§éŒ¯èª¤ã€‚ +- +- +- KeePassXC - Error +- KeePassXC - 錯誤 +- +- +- Database password: +- 資料庫密碼: +- +- +- Cannot create new group +- 無法建立新群組 +- +- +- Deactivate password key for the database. +- åœç”¨è³‡æ–™åº«çš„密碼金鑰。 +- +- +- Displays debugging information. +- 顯示除錯資訊。 +- +- +- Deactivate password key for the database to merge from. +- åœç”¨åˆä½µè³‡æ–™åº«çš„密碼金鑰。 +- +- +- Version %1 +- 版本 %1 +- +- +- Build Type: %1 +- 建置類型:%1 +- +- +- Revision: %1 +- 修訂版號:%1 +- +- +- Distribution: %1 +- 發行版本:%1 +- +- +- Debugging mode is disabled. +- 除錯資訊已åœç”¨ã€‚ +- +- +- Debugging mode is enabled. +- 除錯資訊已啟用。 +- +- +- Operating system: %1 +-CPU architecture: %2 +-Kernel: %3 %4 +- 作業系統:%1 +-中央處ç†å™¨æž¶æ§‹ï¼š%2 +-核心:%3 %4 +- +- +- Auto-Type +- 自動輸入 +- +- +- KeeShare (signed and unsigned sharing) +- KeeShare(簽署åŠæœªç°½ç½²çš„共用) +- +- +- KeeShare (only signed sharing) +- KeeShare(é™ç°½ç½²çš„共用) +- +- +- KeeShare (only unsigned sharing) +- KeeShare(é™æœªç°½ç½²çš„共用) +- +- +- YubiKey +- YubiKey +- +- +- TouchID +- TouchID +- +- +- None +- ç„¡ +- +- +- Enabled extensions: +- 已啟用的擴充元件: +- +- +- Cryptographic libraries: +- 加密函å¼åº«ï¼š +- +- +- Cannot generate a password and prompt at the same time! +- 無法åŒæ™‚ç”¢ç”Ÿä¸¦é¡¯ç¤ºå¯†ç¢¼ï¼ +- +- +- Adds a new group to a database. +- 加入新群組到資料庫。 +- +- +- Path of the group to add. +- è¦åŠ å…¥çš„群組路徑。 +- +- +- Group %1 already exists! +- 群組 %1 å·²ç¶“å­˜åœ¨ï¼ +- +- +- Group %1 not found. +- 群組 %1 未找到。 +- +- +- Successfully added group %1. +- æˆåŠŸåŠ å…¥ç¾¤çµ„ %1。 +- +- +- Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. +- 檢查是å¦æœ‰ä»»ä½•å¯†ç¢¼è¢«å…¬é–‹æ³„露。FILENAME 需為一路徑指å‘檔案,內部以 HIBP æ ¼å¼åˆ—出被泄露密碼的 SHA-1 雜湊。檔案å¯å¾ž https://haveibeenpwned.com/Passwords ç²å¾—。 +- +- +- FILENAME +- FILENAME +- +- +- Analyze passwords for weaknesses and problems. +- 分æžå¯†ç¢¼çš„弱點與å•é¡Œã€‚ +- +- +- Failed to open HIBP file %1: %2 +- é–‹å•Ÿ HIBP 檔案 %1 失敗:%2 +- +- +- Evaluating database entries against HIBP file, this will take a while... +- 根據 HIBP 檔案評估資料庫的項目,這將花上一段時間... +- +- +- Close the currently opened database. +- 關閉目å‰é–‹å•Ÿçš„資料庫。 +- +- +- Display this help. +- 顯示此幫助。 +- +- +- slot +- æ§½ä½ +- +- +- Invalid word count %1 +- 無效的字數統計 %1 +- +- +- The word list is too small (< 1000 items) +- 字詞清單éŽå°ï¼ˆ< 1000 個項目) +- +- +- Exit interactive mode. +- 離開互動模å¼ã€‚ +- +- +- Exports the content of a database to standard output in the specified format. +- 以指定格å¼åŒ¯å‡ºè³‡æ–™åº«å…§å®¹è‡³æ¨™æº–輸出。 +- +- +- Unable to export database to XML: %1 +- 無法匯出資料庫至 XML:%1 +- +- +- Unsupported format %1 +- ä¸æ”¯æ´çš„æ ¼å¼ %1 +- +- +- Use numbers +- 使用數字 +- +- +- Invalid password length %1 +- 無效的密碼長度 %1 +- +- +- Display command help. +- 顯示指令幫助。 +- +- +- Available commands: +- å¯ç”¨æŒ‡ä»¤ï¼š +- +- +- Import the contents of an XML database. +- 匯入 XML 資料庫的內容。 +- +- +- Path of the XML database export. +- XML 資料庫匯出的路徑。 +- +- +- Path of the new database. +- 新資料庫的路徑。 +- +- +- Successfully imported database. +- æˆåŠŸåŒ¯å…¥è³‡æ–™åº«ã€‚ +- +- +- Unknown command %1 +- 未知的指令 %1 +- +- +- Flattens the output to single lines. +- 將輸出壓縮至單一行。 +- +- +- Only print the changes detected by the merge operation. +- åªå°å‡ºåˆä½µæ“作åµæ¸¬åˆ°çš„變更。 +- +- +- Yubikey slot for the second database. +- 第二資料庫的 Yubikey 槽ä½ã€‚ +- +- +- Successfully merged %1 into %2. +- æˆåŠŸåˆä½µ %1 至 %2。 +- +- +- Database was not modified by merge operation. +- 資料庫未被åˆä½µæ“作修改。 +- +- +- Moves an entry to a new group. +- 移動項目至新群組。 +- +- +- Path of the entry to move. +- 欲移動的項目路徑。 +- +- +- Path of the destination group. +- 目標群組的路徑。 +- +- +- Could not find group with path %1. +- 找ä¸åˆ°è·¯å¾‘為 %1 的群組。 +- +- +- Entry is already in group %1. +- 項目已存在於群組 %1。 +- +- +- Successfully moved entry %1 to group %2. +- æˆåŠŸç§»å‹•é …ç›® %1 至群組 %2。 +- +- +- Open a database. +- 開啟資料庫。 +- +- +- Path of the group to remove. +- 欲移除的群組路徑。 +- +- +- Cannot remove root group from database. +- 無法從資料庫移除根群組。 +- +- +- Successfully recycled group %1. +- æˆåŠŸå›žæ”¶ç¾¤çµ„ %1。 +- +- +- Successfully deleted group %1. +- æˆåŠŸåˆªé™¤ç¾¤çµ„ %1。 +- +- +- Failed to open database file %1: not found +- 開啟資料庫檔案 %1 失敗:查無此檔 +- +- +- Failed to open database file %1: not a plain file +- 開啟資料庫檔案 %1 失敗:並éžæª”案 +- +- +- Failed to open database file %1: not readable +- 開啟資料庫檔案 %1 å¤±æ•—ï¼šç„¡æ³•è®€å– +- +- +- Enter password to unlock %1: +- 輸入密碼以解鎖 %1: +- +- +- Invalid YubiKey slot %1 +- 無效的 YubiKey æ§½ä½ %1 +- +- +- Enter password to encrypt database (optional): +- 輸入密碼以加密資料庫(é¸ç”¨ï¼‰ï¼š +- +- +- HIBP file, line %1: parse error +- HIBP 檔案,欄 %1:剖æžéŒ¯èª¤ +- +- +- Secret Service Integration +- ä¿å¯†æœå‹™æ•´åˆ +- +- +- User name +- 使用者å稱 +- +- +- Password for '%1' has been leaked %2 time(s)! +- 「%1ã€çš„密碼已被泄露 %2 æ¬¡ï¼ +- +- +- Invalid password generator after applying all options +- 套用所有é¸é …的密碼產生器為無效 +- +- +- Show the protected attributes in clear text. +- 以明文顯示被ä¿è­·çš„屬性。 +- +- +- Browser Plugin Failure +- ç€è¦½å™¨æ’件失敗 +- +- +- Could not save the native messaging script file for %1. +- 無法為 %1 ä¿å­˜æœ¬åœ°æ¶ˆæ¯æŒ‡ä»¤æª”案。 +- +- +- Copy the given attribute to the clipboard. Defaults to "password" if not specified. +- 複製給定屬性至剪貼簿。若未指定則é è¨­ç‚º "password"。 +- +- +- Copy the current TOTP to the clipboard (equivalent to "-a totp"). +- 複製目å‰çš„ TOTP 至剪貼簿(等åŒæ–¼ "-a totp")。 +- +- +- Copy an entry's attribute to the clipboard. +- 複製項目屬性至剪貼簿。 +- +- +- ERROR: Please specify one of --attribute or --totp, not both. +- 錯誤:請擇一指定 --attribute 或 --totp,ä¸å¯åŒæ™‚使用。 +- +- +- ERROR: attribute %1 is ambiguous, it matches %2. +- 錯誤:屬性 %1 æœ‰æ­§ç¾©ï¼Œç¬¦åˆ %2。 +- +- +- Attribute "%1" not found. +- 找ä¸åˆ°å±¬æ€§ã€Œ%1ã€ã€‚ +- +- +- Entry's "%1" attribute copied to the clipboard! +- 項目的「%1ã€å±¬æ€§å·²è¤‡è£½åˆ°å‰ªè²¼ç°¿ï¼ +- +- +- Yubikey slot and optional serial used to access the database (e.g., 1:7370001). +- Yubikey 槽ä½ä»¥åŠé¸ç”¨åºè™Ÿï¼Œç”¨ä¾†å­˜å–資料庫(例如 1:7370001)。 +- +- +- slot[:serial] +- 槽ä½[:åºè™Ÿ] +- +- +- Target decryption time in MS for the database. +- 資料庫的目標解密時間,以「毫秒ã€è¨ˆç®—。 +- +- +- time +- 時間 +- +- +- Set the key file for the database. +- 設定資料庫的金鑰檔。 +- +- +- Set a password for the database. +- 設定資料庫的密碼。 +- +- +- Invalid decryption time %1. +- 無效的解密時間 %1。 +- +- +- Target decryption time must be between %1 and %2. +- 目標解密時間必須è½åœ¨ %1 與 %2 之間。 +- +- +- Failed to set database password. +- 設定資料庫密碼失敗。 +- +- +- Benchmarking key derivation function for %1ms delay. +- 效能測試:金鑰推導函å¼æ–¼ %1 毫秒的延é²ã€‚ +- +- +- Setting %1 rounds for key derivation function. +- 為金鑰推導函å¼è¨­å®š %1 個回åˆã€‚ +- +- +- error while setting database key derivation settings. +- 進行金鑰推導函å¼è¨­å®šæ™‚出錯。 +- +- +- Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. +- 匯出所用的格å¼ã€‚å¯ç”¨é¸é …為 'xml' 或 'csv'。é è¨­ç‚º 'xml'。 +- +- +- Unable to import XML database: %1 +- 無法匯入 XML 資料庫: %1 +- +- +- Show a database's information. +- 顯示資料庫資訊。 +- +- +- UUID: +- UUID: +- +- +- Name: +- å稱: +- +- +- Description: +- æ述: +- +- +- Cipher: +- 加密法: +- +- +- KDF: +- KDF: +- +- +- Recycle bin is enabled. +- 回收桶已啟用。 +- +- +- Recycle bin is not enabled. +- 回收桶尚未啟用。 +- +- +- Invalid command %1. +- 無效的指令 %1。 +- +- +- Invalid YubiKey serial %1 +- 無效的 YubiKey åºè™Ÿ %1 +- +- +- Please touch the button on your YubiKey to continue… +- 請接觸您 YubiKey 上的按鈕以繼續… +- +- +- Do you want to create a database with an empty password? [y/N]: +- 是å¦è¦å»ºç«‹ä½¿ç”¨ç©ºå¯†ç¢¼çš„資料庫? [y/N]: +- +- +- Repeat password: +- é‡è¤‡å¯†ç¢¼ï¼š +- +- +- Error: Passwords do not match. +- 錯誤:密碼ä¸ç¬¦åˆã€‚ +- +- +- All clipping programs failed. Tried %1 +- +- 所有複製程å¼çš†å¤±æ•—。嘗試 %1 +- +- +- +- AES (%1 rounds) +- AES (%1 個回åˆ) +- +- +- AES 256-bit +- AES 256-bit +- +- +- Twofish 256-bit +- Twofish 256-bit +- +- +- ChaCha20 256-bit +- ChaCha20 256-bit +- +- +- Benchmark %1 delay +- 效能測試 %1 å»¶é² +- +- +- %1 ms +- milliseconds +- %1 毫秒 +- +- +- %1 s +- seconds +- %1 秒 +- +- +- path to a custom local config file +- 本地的自定義設定檔的路徑 +- +- +- WARNING: You are using an old key file format which KeePassXC may +-stop supporting in the future. +- +-Please consider generating a new key file. +- 警告:您使用的金鑰檔案格å¼ç‰ˆæœ¬éŽèˆŠï¼ŒKeePassXC å¯èƒ½ +-在未來åœæ­¢æ”¯æ´ã€‚ +- +-請考慮產生一組新的金鑰檔案。 +- +- +- Argon2%1 (%2 rounds, %3 KB) +- Argon2%1 (%2 個回åˆ, %3 KB) +- +- +- Argon2d (KDBX 4 – recommended) +- Argon2d (KDBX 4 – 推薦) +- +- +- Argon2id (KDBX 4) +- Argon2id (KDBX 4) +- +- +- TOTP +- TOTP +- +- +- Icon +- 圖示 +- +- +- Unsupported key file version: %1 +- ä¸æ”¯æ´çš„金鑰檔案版本: %1 +- +- +- Checksum mismatch! Key file may be corrupt. +- æ ¸å°å’Œä¸åŒ¹é…ï¼é‡‘鑰檔案å¯èƒ½å·²æ壞。 +- +- +- Unexpected key file data! Key file may be corrupt. +- 出ç¾æœªé æœŸçš„金鑰檔案資料ï¼é‡‘鑰檔案å¯èƒ½å·²æ壞。 +- +- +- +- QtIOCompressor +- +- Internal zlib error when compressing: +- 壓縮時出ç¾å…§éƒ¨ zlib 錯誤: +- +- +- Error writing to underlying device: +- 寫入底層è£ç½®æ™‚出錯: +- +- +- Error opening underlying device: +- 開啟底層è£ç½®æ™‚出錯: +- +- +- Error reading data from underlying device: +- 從底層è£ç½®è®€å–資料時出錯: +- +- +- Internal zlib error when decompressing: +- 解壓縮時出ç¾å…§éƒ¨ zlib 錯誤: +- +- +- +- QtIOCompressor::open +- +- The gzip format not supported in this version of zlib. +- 此版本的 zlib ä¸æ”¯æ´ gzip æ ¼å¼ã€‚ +- +- +- Internal zlib error: +- 內部 zlib 錯誤: +- +- +- +- ReportsWidgetHealthcheck +- +- Also show entries that have been excluded from reports +- 也顯示已從報告排除的項目 +- +- +- Hover over reason to show additional details. Double-click entries to edit. +- 將游標懸浮於原因以顯示é¡å¤–詳情。雙擊項目å¯ç·¨è¼¯ã€‚ +- +- +- Bad +- Password quality +- 糟糕 +- +- +- Bad — password must be changed +- 糟糕 — 密碼必須更改 +- +- +- Poor +- Password quality +- 極弱 +- +- +- Poor — password should be changed +- 極弱 — 密碼應該更改 +- +- +- Weak +- Password quality +- 較弱 +- +- +- Weak — consider changing the password +- 較弱 — å¯è€ƒæ…®æ›´æ”¹å¯†ç¢¼ +- +- +- (Excluded) +- (已排除) +- +- +- This entry is being excluded from reports +- 此項目已從報告排除 +- +- +- Please wait, health data is being calculated... +- è«‹ç¨å€™ï¼Œæ­£åœ¨è¨ˆç®—å¥åº·è³‡æ–™... +- +- +- Congratulations, everything is healthy! +- æ­å–œï¼Œæ‰€æœ‰é …ç›®çš†æ­£å¸¸ï¼ +- +- +- Title +- 標題 +- +- +- Path +- 路徑 +- +- +- Score +- 分數 +- +- +- Reason +- 原因 +- +- +- Edit Entry... +- 編輯項目... +- +- +- Exclude from reports +- 從報告排除 +- +- +- +- ReportsWidgetHibp +- +- CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. +- 注æ„:此報告需è¦å‚³é€è³‡è¨Šè‡³ Have I Been Pwned 線上æœå‹™ (https://haveibeenpwned.com)。若您é¸æ“‡ç¹¼çºŒï¼Œå°‡è¨ˆç®—您資料庫內密碼的加密雜湊值,並以安全連線傳é€é›œæ¹Šå€¼å‰äº”個字元至此æœå‹™ã€‚從傳é€è³‡æ–™æ²’辦法推算您的密碼,您的資料庫將安全無虞。但是,您傳é€çš„å¯†ç¢¼ç¸½æ•¸ä»¥åŠ IP ä½å€å°‡æœƒæš´éœ²çµ¦æ­¤æœå‹™ã€‚ +- +- +- Perform Online Analysis +- åŸ·è¡Œç·šä¸Šåˆ†æž +- +- +- Also show entries that have been excluded from reports +- 也顯示已從報告排除的項目 +- +- +- This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. +- æ­¤ KeePassXC 建置版本未包å«ç¶²è·¯åŠŸèƒ½ã€‚需è¦ç¶²è·¯åŠŸèƒ½æ‰èƒ½å‘ Have I Been Pwned 資料庫檢查您的密碼。 +- +- +- Congratulations, no exposed passwords! +- æ­å–œï¼Œæ²’æœ‰ä»»ä½•æ³„éœ²çš„å¯†ç¢¼ï¼ +- +- +- Title +- 標題 +- +- +- Path +- 路徑 +- +- +- Password exposed… +- 已泄露的密碼… +- +- +- (Excluded) +- (已排除) +- +- +- This entry is being excluded from reports +- 此項目已從報告排除 +- +- +- once +- 一次 +- +- +- up to 10 times +- å¤šé” 10 次 +- +- +- up to 100 times +- å¤šé” 100 次 +- +- +- up to 1000 times +- å¤šé” 1000 次 +- +- +- up to 10,000 times +- å¤šé” 10,000 次 +- +- +- up to 100,000 times +- å¤šé” 100,000 次 +- +- +- up to a million times +- 多é”一百è¬æ¬¡ +- +- +- millions of times +- 數百è¬æ¬¡ +- +- +- Edit Entry... +- 編輯項目... +- +- +- Exclude from reports +- 從報告排除 +- +- +- +- ReportsWidgetStatistics +- +- Hover over lines with error icons for further information. +- 將游標懸浮於錯誤圖示出ç¾çš„欄ä½ï¼Œå¯ç²å¾—更多資訊。 +- +- +- Name +- å稱 +- +- +- Value +- 值 +- +- +- Please wait, database statistics are being calculated... +- è«‹ç¨å€™ï¼Œæ­£åœ¨è¨ˆç®—並統計資料庫數據... +- +- +- Database name +- 資料庫å稱 +- +- +- Description +- æè¿° +- +- +- Location +- ä½ç½® +- +- +- Last saved +- 最近儲存於 +- +- +- Unsaved changes +- 未儲存變更 +- +- +- yes +- 是 +- +- +- no +- å¦ +- +- +- The database was modified, but the changes have not yet been saved to disk. +- 資料庫已被更改,但變更尚未被儲存至ç£ç¢Ÿã€‚ +- +- +- Number of groups +- 群組數 +- +- +- Number of entries +- 項目數 +- +- +- Number of expired entries +- å·²éŽæœŸé …目數 +- +- +- The database contains entries that have expired. +- 資料庫包å«å·²éŽæœŸçš„項目。 +- +- +- Unique passwords +- ç¨ç‰¹çš„密碼 +- +- +- Non-unique passwords +- éžç¨ç‰¹çš„密碼 +- +- +- More than 10% of passwords are reused. Use unique passwords when possible. +- è¶…éŽ 10% 的密碼被é‡è¤‡ä½¿ç”¨ã€‚請盡å¯èƒ½ä½¿ç”¨ç¨ä¸€ç„¡äºŒçš„密碼。 +- +- +- Maximum password reuse +- 最大密碼é‡è¤‡ä½¿ç”¨æ¬¡æ•¸ +- +- +- Some passwords are used more than three times. Use unique passwords when possible. +- æŸäº›å¯†ç¢¼è¢«ä½¿ç”¨è¶…éŽä¸‰æ¬¡ä»¥ä¸Šã€‚請盡å¯èƒ½ä½¿ç”¨ç¨ä¸€ç„¡äºŒçš„密碼。 +- +- +- Number of short passwords +- éŽçŸ­å¯†ç¢¼æ•¸ +- +- +- Recommended minimum password length is at least 8 characters. +- 建議最短密碼長度為至少 8 個字元。 +- +- +- Number of weak passwords +- 弱密碼數 +- +- +- Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. +- 建議使用足夠長度ã€äº‚度,且評價為「較好ã€æˆ–「極好ã€çš„密碼。 +- +- +- Entries excluded from reports +- 從報告排除的項目 +- +- +- Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. +- 從報告排除項目(比如說,密碼較弱也沒關係)ä¸ä¸€å®šæœƒé€ æˆå•é¡Œï¼Œä½†æ˜¯ï¼Œæ‚¨ä»æ‡‰è©²ä¸æ™‚ç•™æ„這些項目。 +- +- +- Average password length +- å¹³å‡å¯†ç¢¼é•·åº¦ +- +- +- %1 characters +- %1 å­—å…ƒ +- +- +- Average password length is less than ten characters. Longer passwords provide more security. +- å¹³å‡å¯†ç¢¼é•·åº¦å°æ–¼ 10 個字元。密碼越長,能æ供的ä¿è­·è¶Šå¤šã€‚ +- +- +- +- SSHAgent +- +- Agent connection failed. +- 代ç†é€£ç·šå¤±æ•—。 +- +- +- Agent protocol error. +- 代ç†å”議錯誤。 +- +- +- No agent running, cannot add identity. +- 代ç†å°šæœªåŸ·è¡Œï¼Œç„¡æ³•åŠ å…¥èº«ä»½ã€‚ +- +- +- No agent running, cannot remove identity. +- 代ç†å°šæœªåŸ·è¡Œï¼Œç„¡æ³•ç§»é™¤èº«ä»½ã€‚ +- +- +- Agent refused this identity. Possible reasons include: +- 代ç†æ‹’絕此身份。å¯èƒ½çš„原因包括: +- +- +- The key has already been added. +- 金鑰已經加入。 +- +- +- Restricted lifetime is not supported by the agent (check options). +- 代ç†ä¸¦æœªæ”¯æ´å—é™åˆ¶çš„生命周期(請檢查é¸é …)。 +- +- +- A confirmation request is not supported by the agent (check options). +- 代ç†ä¸¦æœªæ”¯æ´ç¢ºèªè«‹æ±‚(請檢查é¸é …)。 +- +- +- Key identity ownership conflict. Refusing to add. +- 金鑰身份æ“有權發生è¡çªã€‚拒絕加入。 +- +- +- No agent running, cannot list identities. +- 代ç†å°šæœªåŸ·è¡Œï¼Œç„¡æ³•åˆ—舉身份。 +- +- +- +- SearchHelpWidget +- +- Search Help +- æœå°‹å¹«åŠ© +- +- +- Search terms are as follows: [modifiers][field:]["]term["] +- æœå°‹æ¢ä»¶å¦‚下所示:[修飾å­][欄ä½:]["]æ¢ä»¶["] +- +- +- Every search term must match (ie, logical AND) +- 必須符åˆæ‰€æœ‰æœå°‹æ¢ä»¶ï¼ˆå³é‚輯 AND) +- +- +- Modifiers +- ä¿®é£¾å­ +- +- +- exclude term from results +- 從çµæžœæŽ’除æ¢ä»¶ +- +- +- match term exactly +- 完全匹é…æ¢ä»¶ +- +- +- use regex in term +- æ¢ä»¶ä½¿ç”¨ regex æ­£è¦è¡¨ç¤ºå¼ +- +- +- Fields +- æ¬„ä½ +- +- +- Term Wildcards +- æ¢ä»¶é€šé…符 +- +- +- match anything +- ä»»æ„åŒ¹é… +- +- +- match one +- 匹é…一組 +- +- +- logical OR +- é‚輯 OR +- +- +- Examples +- 範例 +- +- +- +- SearchWidget +- +- Search +- æœå°‹ +- +- +- Limit search to selected group +- é™åˆ¶åªæœå°‹é¸å®šçš„群組 +- +- +- Search Help +- æœå°‹å¹«åŠ© +- +- +- Search (%1)... +- Search placeholder text, %1 is the keyboard shortcut +- æœå°‹ (%1)... +- +- +- Case sensitive +- å€åˆ†å¤§å°å¯« +- +- +- +- SettingsWidgetFdoSecrets +- +- Options +- é¸é … +- +- +- Enable KeepassXC Freedesktop.org Secret Service integration +- 啟用 KeepassXC 與 Freedesktop.org ä¿å¯†æœå‹™çš„æ•´åˆ +- +- +- General +- 通用 +- +- +- Show notification when credentials are requested +- è¦æ±‚憑證時顯示通知 +- +- +- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> +- <html><head/><body><p>若資料庫內的回收桶已經啟用,項目會直接被移至回收桶。å¦å‰‡ï¼Œé …目將會被刪除且ä¸åšä»»ä½•ç¢ºèªã€‚</p><p>若有項目被其他項目引用,您ä»å°‡æœƒæ”¶åˆ°é€šçŸ¥ã€‚</p></body></html> +- +- +- Exposed database groups: +- 開放的資料庫群組: +- +- +- Authorization +- èªè­‰ +- +- +- These applications are currently connected: +- ç›®å‰å·²é€£çµçš„應用程å¼ï¼š +- +- +- Don't confirm when entries are deleted by clients +- 項目被客戶端刪除時ä¸åšç¢ºèª +- +- +- <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. +- <b>錯誤:</b>連接 DBus 失敗。請檢查您的 DBus 設定。 +- +- +- <b>Warning:</b> +- <b>警告:</b> +- +- +- Save current changes to activate the plugin and enable editing of this section. +- 儲存目å‰è®Šæ›´ï¼Œä»¥å•Ÿç”¨æ’件並編輯此å€åŸŸã€‚ +- +- +- +- SettingsWidgetKeeShare +- +- Active +- 作用項 +- +- +- Allow export +- å…許匯出 +- +- +- Allow import +- å…許匯入 +- +- +- Own certificate +- 自帶證書 +- +- +- Fingerprint: +- 指紋: +- +- +- Certificate: +- 證書: +- +- +- Signer +- 簽署者 +- +- +- Key: +- 金鑰: +- +- +- Generate +- 產生 +- +- +- Import +- 匯入 +- +- +- Export +- 匯出 +- +- +- Imported certificates +- 匯入的證書 +- +- +- Trust +- ä¿¡ä»» +- +- +- Ask +- è©¢å• +- +- +- Untrust +- ä¸ä¿¡ä»» +- +- +- Remove +- 移除 +- +- +- Path +- 路徑 +- +- +- Status +- 狀態 +- +- +- Fingerprint +- 指紋 +- +- +- Certificate +- 證書 +- +- +- Trusted +- ä¿¡ä»» +- +- +- Untrusted +- ä¸ä¿¡ä»» +- +- +- Unknown +- 未知 +- +- +- key.share +- Filetype for KeeShare key +- key.share +- +- +- KeeShare key file +- KeeShare 金鑰檔 +- +- +- All files +- 所有檔案 +- +- +- Select path +- é¸æ“‡è·¯å¾‘ +- +- +- Exporting changed certificate +- 匯出已更改的證書 +- +- +- The exported certificate is not the same as the one in use. Do you want to export the current certificate? +- 匯出的證書與目å‰ä½¿ç”¨çš„證書ä¸åŒã€‚真的è¦åŒ¯å‡ºç›®å‰çš„證書? +- +- +- Signer: +- 簽署者: +- +- +- Allow KeeShare imports +- å…許 KeeShare 匯入 +- +- +- Allow KeeShare exports +- å…許 KeeShare 匯出 +- +- +- Only show warnings and errors +- åªé¡¯ç¤ºè­¦å‘Šèˆ‡éŒ¯èª¤ +- +- +- Key +- éµ +- +- +- Signer name field +- 簽署者åç¨±æ¬„ä½ +- +- +- Generate new certificate +- 產生新證書 +- +- +- Import existing certificate +- 匯入既存證書 +- +- +- Export own certificate +- 匯出自帶證書 +- +- +- Known shares +- 已知分享 +- +- +- Trust selected certificate +- 信任所é¸è­‰æ›¸ +- +- +- Ask whether to trust the selected certificate every time +- æ¯æ¬¡è©¢å•æ˜¯å¦ä¿¡ä»»æ‰€é¸è­‰æ›¸ +- +- +- Untrust selected certificate +- å–消信任所é¸è­‰æ›¸ +- +- +- Remove selected certificate +- 移除所é¸è­‰æ›¸ +- +- +- +- ShareExport +- +- Overwriting signed share container is not supported - export prevented +- ä¸æ”¯æ´è¦†å¯«å·²ç°½ç½²çš„分享容器 - 匯出已阻止 +- +- +- Could not write export container (%1) +- 無法寫入匯出的共享容器 (%1) +- +- +- Could not embed signature: Could not open file to write (%1) +- 無法嵌入簽å:無法開啟檔案來寫入 (%1) +- +- +- Could not embed signature: Could not write file (%1) +- 無法嵌入簽å:無法寫入檔案 (%1) +- +- +- Could not embed database: Could not open file to write (%1) +- 無法嵌入資料庫:無法開啟檔案來寫入 (%1) +- +- +- Could not embed database: Could not write file (%1) +- 無法嵌入資料庫:無法寫入檔案 (%1) +- +- +- Overwriting unsigned share container is not supported - export prevented +- ä¸æ”¯æ´è¦†å¯«æœªç°½ç½²çš„分享容器 - 匯出已阻止 +- +- +- Could not write export container +- 無法寫入匯出的共享容器 +- +- +- Unexpected export error occurred +- 出ç¾æœªé æœŸçš„匯出錯誤 +- +- +- +- ShareImport +- +- Import from container without signature +- 從沒有簽署的容器匯入 +- +- +- We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? +- 我們無法確èªåˆ†äº«å®¹å™¨çš„來æºï¼Œå› ç‚ºå®ƒæœªè¢«ç°½ç½²éŽã€‚真的è¦å¾ž %1 匯入? +- +- +- Import from container with certificate +- 從帶有證書的容器匯入 +- +- +- Do you want to trust %1 with the fingerprint of %2 from %3? +- 是å¦è¦ä¿¡ä»» %1,來自 %3 çš„ %2 的指紋? +- +- +- Not this time +- 這次ä¸è¦ +- +- +- Never +- å¾žä¸ +- +- +- Always +- æ°¸é  +- +- +- Just this time +- åªæœ‰é€™æ¬¡ +- +- +- Signed share container are not supported - import prevented +- ä¸æ”¯æ´å·²ç°½ç½²çš„分享容器 - 匯入已阻止 +- +- +- File is not readable +- æª”æ¡ˆç„¡æ³•è®€å– +- +- +- Invalid sharing container +- 無效的分享容器 +- +- +- Untrusted import prevented +- 阻止ä¸å—信任的匯入 +- +- +- Successful signed import +- 簽署已æˆåŠŸåŒ¯å…¥ +- +- +- Unsigned share container are not supported - import prevented +- ä¸æ”¯æ´æœªç°½ç½²çš„分享容器 - 匯入已阻止 +- +- +- Successful unsigned import +- 未簽署已æˆåŠŸåŒ¯å…¥ +- +- +- File does not exist +- 檔案ä¸å­˜åœ¨ +- +- +- Unknown share container type +- 未知的共享容器種類 +- +- +- +- ShareObserver +- +- Import from %1 failed (%2) +- 從 %1 匯入失敗 (%2) +- +- +- Import from %1 successful (%2) +- 從 %1 匯入æˆåŠŸ (%2) +- +- +- Imported from %1 +- 從 %1 匯入 +- +- +- Export to %1 failed (%2) +- 匯出至 %1 失敗 (%2) +- +- +- Export to %1 successful (%2) +- 匯出至 %1 æˆåŠŸ (%2) +- +- +- Export to %1 +- 匯出至 %1 +- +- +- Multiple import source path to %1 in %2 +- 多個匯入來æºè·¯å¾‘至 %1,ä½æ–¼ %2 +- +- +- Conflicting export target path %1 in %2 +- è¡çªçš„匯出目標路徑 %1,ä½æ–¼ %2 +- +- +- +- TotpDialog +- +- Timed Password +- 定時型密碼 +- +- +- 000000 +- 000000 +- +- +- Copy +- 複製 +- +- +- Expires in <b>%n</b> second(s) +- <b>%n</b> 秒後éŽæœŸ +- +- +- +- TotpExportSettingsDialog +- +- Copy +- 複製 +- +- +- NOTE: These TOTP settings are custom and may not work with other authenticators. +- TOTP QR code dialog warning +- 注æ„:這些 TOTP 設定為自定義項目,å¯èƒ½ç„¡æ³•èˆ‡å…¶ä»–驗証器一起使用。 +- +- +- There was an error creating the QR code. +- 建立 QR 碼時出ç¾éŒ¯èª¤ã€‚ +- +- +- Closing in %1 seconds. +- 將於 %1 秒後關閉。 +- +- +- +- TotpSetupDialog +- +- Setup TOTP +- 設置 TOTP +- +- +- Default RFC 6238 token settings +- é è¨­ RFC 6238 令牌設定 +- +- +- Steam token settings +- Steam 令牌設定 +- +- +- Use custom settings +- 使用自定義設定 +- +- +- Custom Settings +- 自定義設定 +- +- +- Time step: +- 時間間隔: +- +- +- sec +- Seconds +- 秒 +- +- +- Code size: +- 代碼長度: +- +- +- Secret Key: +- ç§å¯†é‡‘鑰: +- +- +- Secret key must be in Base32 format +- ç§å¯†é‡‘鑰必須為 Base32 æ ¼å¼ +- +- +- Secret key field +- ç§å¯†é‡‘é‘°æ¬„ä½ +- +- +- Algorithm: +- 演算法: +- +- +- Time step field +- æ™‚é–“é–“éš”æ¬„ä½ +- +- +- digits +- ä½æ•¸ +- +- +- Invalid TOTP Secret +- 無效的 TOTP ç§é‘° +- +- +- You have entered an invalid secret key. The key must be in Base32 format. +-Example: JBSWY3DPEHPK3PXP +- 您輸入的ç§å¯†é‡‘鑰無效。金鑰必須為 Base32 æ ¼å¼ã€‚ +-範例:JBSWY3DPEHPK3PXP +- +- +- Confirm Remove TOTP Settings +- 確èªç§»é™¤ TOTP 設定 +- +- +- Are you sure you want to delete TOTP settings for this entry? +- 您確定è¦åˆªé™¤æ­¤é …目的 TOTP 設定? +- +- +- +- URLEdit +- +- Invalid URL +- 無效的 URL +- +- +- +- UpdateCheckDialog +- +- Checking for updates +- 正在檢查更新 +- +- +- Checking for updates... +- 正在檢查更新... +- +- +- Close +- 關閉 +- +- +- Update Error! +- æ›´æ–°éŒ¯èª¤ï¼ +- +- +- An error occurred in retrieving update information. +- 接收更新資訊時出錯。 +- +- +- Please try again later. +- è«‹ç¨å¾Œå†è©¦ã€‚ +- +- +- Software Update +- 軟體更新 +- +- +- A new version of KeePassXC is available! +- KeePassXC 有新版本å¯ç”¨ï¼ +- +- +- KeePassXC %1 is now available — you have %2. +- KeePassXC %1 å¯ä¾›ä½¿ç”¨ — 您的版本為 %2。 +- +- +- Download it at keepassxc.org +- 在 keepassxc.org 下載 +- +- +- You're up-to-date! +- æ‚¨æ­£ä½¿ç”¨æœ€æ–°ç‰ˆæœ¬ï¼ +- +- +- KeePassXC %1 is currently the newest version available +- KeePassXC %1 ç›®å‰ç‚ºæœ€æ–°ç‰ˆæœ¬ +- +- +- +- WelcomeWidget +- +- Start storing your passwords securely in a KeePassXC database +- 從ç¾åœ¨é–‹å§‹ï¼Œå°‡æ‚¨çš„密碼安全地ä¿å­˜åˆ° KeePassXC 資料庫 +- +- +- Create new database +- 建立新資料庫 +- +- +- Open existing database +- é–‹å•Ÿç¾æœ‰è³‡æ–™åº« +- +- +- Import from KeePass 1 +- 從 KeePass 1 匯入 +- +- +- Import from CSV +- 從 CSV 匯入 +- +- +- Recent databases +- 近期的資料庫 +- +- +- Welcome to KeePassXC %1 +- 歡迎來到 KeePassXC %1 +- +- +- Import from 1Password +- 從 1Password 匯入 +- +- +- Open a recent database +- 開啟一個近期的資料庫 +- +- +- +- YubiKey +- +- %1 [%2] Configured Slot - %3 +- %1 [%2] è¨­å®šæ§½ä½ - %3 +- +- +- %1 [%2] Challenge Response - Slot %3 - %4 +- %1 [%2] 挑戰應答 - æ§½ä½ %3 - %4 +- +- +- Press +- 按下 +- +- +- Passive +- 被動 +- +- +- %1 Invalid slot specified - %2 +- %1 ç„¡æ•ˆçš„æŒ‡å®šæ§½ä½ - %2 +- +- +- The YubiKey interface has not been initialized. +- YubiKey 介é¢å°šæœªåˆå§‹åŒ–。 +- +- +- Hardware key is currently in use. +- 硬體金鑰目å‰æ­£åœ¨ä½¿ç”¨ç•¶ä¸­ã€‚ +- +- +- Could not find hardware key with serial number %1. Please plug it in to continue. +- 找ä¸åˆ°æµæ°´è™Ÿç‚º %1 的硬體金鑰。請æ’入後繼續。 +- +- +- Hardware key timed out waiting for user interaction. +- 硬體金鑰等待使用者互動超時。 +- +- +- A USB error ocurred when accessing the hardware key: %1 +- å­˜å–ç¡¬é«”é‡‘é‘°æ™‚å‡ºç¾ USB 錯誤:%1 +- +- +- Failed to complete a challenge-response, the specific error was: %1 +- 無法完æˆæŒ‘戰應答,具體錯誤為:%1 +- +- +- +- YubiKeyEditWidget +- +- Refresh +- æ›´æ–° +- +- +- YubiKey Challenge-Response +- YubiKey 挑戰應答 +- +- +- <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> +- <p>若您æ“有<a href="https://www.yubico.com/">YubiKey</a>,å¯ä»¥ç”¨å®ƒç²å¾—é¡å¤–ä¿è­·ã€‚</p><p>需è¦å°‡ YubiKey 其中一個槽ä½è¨­ç½®ç‚º <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 挑戰應答</a>。</p> +- +- +- Refresh hardware tokens +- 更新硬體令牌 +- +- +- Hardware key slot selection +- 硬體金鑰槽ä½é¸æ“‡ +- +- +- Could not find any hardware keys! +- 找ä¸åˆ°ä»»ä½•ç¡¬é«”é‡‘é‘°ï¼ +- +- +- Selected hardware key slot does not support challenge-response! +- 所é¸çš„硬體金鑰槽ä½ä¸æ”¯æ´æŒ‘æˆ°æ‡‰ç­”ï¼ +- +- +- Detecting hardware keys… +- åµæ¸¬ç¡¬é«”金鑰… +- +- +- No hardware keys detected +- 未åµæ¸¬åˆ°ç¡¬é«”金鑰 +- +- +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/translations/update.sh keepassxc-2.6.4-patched/share/translations/update.sh +--- keepassxc-2.6.4-orig/share/translations/update.sh 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/translations/update.sh 1970-01-01 01:00:00.000000000 +0100 +@@ -1,70 +0,0 @@ +-#!/usr/bin/env bash +-# +-# Copyright (C) 2017 KeePassXC Team +-# +-# This program is free software: you can redistribute it and/or modify +-# it under the terms of the GNU General Public License as published by +-# the Free Software Foundation, either version 2 or (at your option) +-# version 3 of the License. +-# +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY; without even the implied warranty of +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-# GNU General Public License for more details. +-# +-# You should have received a copy of the GNU General Public License +-# along with this program. If not, see . +-# +- +-BASEDIR="$(dirname $0)" +- +-PUSH=true +-PULL=true +-UPDATE=true +- +-if [ "$1" == "push" ]; then +- PULL=false +-elif [ "$1" == "pull" ]; then +- PUSH=false +- UPDATE=false +-elif [ "$1" == "update" ]; then +- PUSH=false +- PULL=false +-elif [ "$1" != "" ]; then +- echo "Unknown command '${1}'" +- echo "Usage: $(basename $0) [update|pull|push] [additional tx options]" +- exit 1 +-fi +- +-shift +- +-cd "${BASEDIR}/../.." +- +-if $UPDATE; then +- echo "Updating source files..." +- +- LUPDATE=lupdate-qt5 +- command -v $LUPDATE > /dev/null +- if [ $? -ne 0 ]; then +- LUPDATE=lupdate +- fi +- $LUPDATE -no-ui-lines -disable-heuristic similartext -locations none -no-obsolete src -ts share/translations/keepassx_en.ts +- echo +-fi +- +-if $PUSH; then +- echo "Pushing source files to Transifex..." +- tx push -s $@ +- echo +-fi +- +-if $PULL; then +- echo "Removing stale translations..." +- mv share/translations/keepassx_en.ts share/translations/keepassx_en.ts.bak +- rm share/translations/*.ts +- mv share/translations/keepassx_en.ts.bak share/translations/keepassx_en.ts +- +- echo "Pulling translations from Transifex..." +- tx pull -af --minimum-perc=40 $@ +- echo +-fi +diff -urNr keepassxc-2.6.4-orig/share/windows/create-ico.sh keepassxc-2.6.4-patched/share/windows/create-ico.sh +--- keepassxc-2.6.4-orig/share/windows/create-ico.sh 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/windows/create-ico.sh 1970-01-01 01:00:00.000000000 +0100 +@@ -1,31 +0,0 @@ +-#!/usr/bin/env bash +- +-NC='\033[0m' +-RED='\033[0;31m' +-YELLOW='\033[0;33m' +- +-if [[ -z "$1" ]]; then +- echo -e "${RED}You must include an SVG file to convert!${NC}" +- exit 1 +-fi +- +-outfile=$2 +-if [[ -z "outfile" ]]; then +- outfile="logo.ico" +-fi +- +-if ! command -v "inkscape" &> /dev/null; then +- echo -e "${YELLOW}Could not find inkscape; $outfile not built!${NC}" +- exit 0 +-fi +- +-echo "Generating $outfile from $1..." +-size_list=(16 24 32 48 64 128 256) +-for size in ${size_list[@]}; do +- inkscape -z -e $size.png -w $size -h $size "$1" >/dev/null 2>/dev/null +-done +- +-images=`printf "%s.png " "${size_list[@]}"` +-convert $images $outfile +- +-rm $images +diff -urNr keepassxc-2.6.4-orig/share/windows/icon.rc keepassxc-2.6.4-patched/share/windows/icon.rc +--- keepassxc-2.6.4-orig/share/windows/icon.rc 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/windows/icon.rc 1970-01-01 01:00:00.000000000 +0100 +@@ -1,2 +0,0 @@ +-IDI_ICON1 ICON DISCARDABLE "keepassxc.ico" +-IDI_KDBX ICON DISCARDABLE "keepassxc-kdbx.ico" +\ Manca newline alla fine del file +I file binari keepassxc-2.6.4-orig/share/windows/installer-header.bmp e keepassxc-2.6.4-patched/share/windows/installer-header.bmp sono diversi +I file binari keepassxc-2.6.4-orig/share/windows/installer-wizard.bmp e keepassxc-2.6.4-patched/share/windows/installer-wizard.bmp sono diversi +I file binari keepassxc-2.6.4-orig/share/windows/keepassxc.ico e keepassxc-2.6.4-patched/share/windows/keepassxc.ico sono diversi +I file binari keepassxc-2.6.4-orig/share/windows/keepassxc-kdbx.ico e keepassxc-2.6.4-patched/share/windows/keepassxc-kdbx.ico sono diversi +diff -urNr keepassxc-2.6.4-orig/share/windows/KPXC_ExitDlg.wxs keepassxc-2.6.4-patched/share/windows/KPXC_ExitDlg.wxs +--- keepassxc-2.6.4-orig/share/windows/KPXC_ExitDlg.wxs 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/windows/KPXC_ExitDlg.wxs 1970-01-01 01:00:00.000000000 +0100 +@@ -1,31 +0,0 @@ +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/windows/KPXC_InstallDirDlg.wxs keepassxc-2.6.4-patched/share/windows/KPXC_InstallDirDlg.wxs +--- keepassxc-2.6.4-orig/share/windows/KPXC_InstallDirDlg.wxs 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/windows/KPXC_InstallDirDlg.wxs 1970-01-01 01:00:00.000000000 +0100 +@@ -1,30 +0,0 @@ +- +- +- +- +- +- +- +- +- +- +- +- 1 +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/share/windows/KPXC_InstallDir.wxs keepassxc-2.6.4-patched/share/windows/KPXC_InstallDir.wxs +--- keepassxc-2.6.4-orig/share/windows/KPXC_InstallDir.wxs 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/windows/KPXC_InstallDir.wxs 1970-01-01 01:00:00.000000000 +0100 +@@ -1,81 +0,0 @@ +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- 1 +- "1"]]> +- +- 1 +- +- NOT Installed +- Installed AND PATCH +- +- 1 +- LicenseAccepted = "1" +- +- 1 +- 1 +- NOT WIXUI_DONTVALIDATEPATH +- "1"]]> +- WIXUI_DONTVALIDATEPATH OR WIXUI_INSTALLDIR_VALID="1" +- 1 +- 1 +- +- NOT Installed +- Installed AND NOT PATCH +- Installed AND PATCH +- +- 1 +- +- 1 +- 1 +- 1 +- +- +- +- +- +- +- +I file binari keepassxc-2.6.4-orig/share/windows/wix-banner.bmp e keepassxc-2.6.4-patched/share/windows/wix-banner.bmp sono diversi +I file binari keepassxc-2.6.4-orig/share/windows/wix-dialog.bmp e keepassxc-2.6.4-patched/share/windows/wix-dialog.bmp sono diversi +diff -urNr keepassxc-2.6.4-orig/share/windows/wix-patch.xml keepassxc-2.6.4-patched/share/windows/wix-patch.xml +--- keepassxc-2.6.4-orig/share/windows/wix-patch.xml 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/windows/wix-patch.xml 1970-01-01 01:00:00.000000000 +0100 +@@ -1,10 +0,0 @@ +- +- +- +- +- +- +- +- +- +- +diff -urNr keepassxc-2.6.4-orig/share/windows/wix-template.xml keepassxc-2.6.4-patched/share/windows/wix-template.xml +--- keepassxc-2.6.4-orig/share/windows/wix-template.xml 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/windows/wix-template.xml 1970-01-01 01:00:00.000000000 +0100 +@@ -1,111 +0,0 @@ +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ProductIcon.ico +- +- +- +- +- +- +- +- +- +- +- +- +- +- LAUNCHAPPONEXIT +- +- +- +- +- +- +- +- +- AUTOSTARTPROGRAM +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- INSTALLDESKTOPSHORTCUT +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +I file binari keepassxc-2.6.4-orig/share/wizard/background-pixmap.png e keepassxc-2.6.4-patched/share/wizard/background-pixmap.png sono diversi +diff -urNr keepassxc-2.6.4-orig/share/wizard/background-pixmap.svg keepassxc-2.6.4-patched/share/wizard/background-pixmap.svg +--- keepassxc-2.6.4-orig/share/wizard/background-pixmap.svg 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/wizard/background-pixmap.svg 1970-01-01 01:00:00.000000000 +0100 +@@ -1,313 +0,0 @@ +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- image/svg+xml +- +- +- +- +- +- +- +- +- +- +- +- +diff -urNr keepassxc-2.6.4-orig/share/wizard/wizard.qrc keepassxc-2.6.4-patched/share/wizard/wizard.qrc +--- keepassxc-2.6.4-orig/share/wizard/wizard.qrc 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/wizard/wizard.qrc 1970-01-01 01:00:00.000000000 +0100 +@@ -1,6 +0,0 @@ +- +- +- +- background-pixmap.png +- +- +diff -urNr keepassxc-2.6.4-orig/share/wordlists/eff_large.wordlist keepassxc-2.6.4-patched/share/wordlists/eff_large.wordlist +--- keepassxc-2.6.4-orig/share/wordlists/eff_large.wordlist 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/share/wordlists/eff_large.wordlist 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7776 +0,0 @@ +-abacus +-abdomen +-abdominal +-abide +-abiding +-ability +-ablaze +-able +-abnormal +-abrasion +-abrasive +-abreast +-abridge +-abroad +-abruptly +-absence +-absentee +-absently +-absinthe +-absolute +-absolve +-abstain +-abstract +-absurd +-accent +-acclaim +-acclimate +-accompany +-account +-accuracy +-accurate +-accustom +-acetone +-achiness +-aching +-acid +-acorn +-acquaint +-acquire +-acre +-acrobat +-acronym +-acting +-action +-activate +-activator +-active +-activism +-activist +-activity +-actress +-acts +-acutely +-acuteness +-aeration +-aerobics +-aerosol +-aerospace +-afar +-affair +-affected +-affecting +-affection +-affidavit +-affiliate +-affirm +-affix +-afflicted +-affluent +-afford +-affront +-aflame +-afloat +-aflutter +-afoot +-afraid +-afterglow +-afterlife +-aftermath +-aftermost +-afternoon +-aged +-ageless +-agency +-agenda +-agent +-aggregate +-aghast +-agile +-agility +-aging +-agnostic +-agonize +-agonizing +-agony +-agreeable +-agreeably +-agreed +-agreeing +-agreement +-aground +-ahead +-ahoy +-aide +-aids +-aim +-ajar +-alabaster +-alarm +-albatross +-album +-alfalfa +-algebra +-algorithm +-alias +-alibi +-alienable +-alienate +-aliens +-alike +-alive +-alkaline +-alkalize +-almanac +-almighty +-almost +-aloe +-aloft +-aloha +-alone +-alongside +-aloof +-alphabet +-alright +-although +-altitude +-alto +-aluminum +-alumni +-always +-amaretto +-amaze +-amazingly +-amber +-ambiance +-ambiguity +-ambiguous +-ambition +-ambitious +-ambulance +-ambush +-amendable +-amendment +-amends +-amenity +-amiable +-amicably +-amid +-amigo +-amino +-amiss +-ammonia +-ammonium +-amnesty +-amniotic +-among +-amount +-amperage +-ample +-amplifier +-amplify +-amply +-amuck +-amulet +-amusable +-amused +-amusement +-amuser +-amusing +-anaconda +-anaerobic +-anagram +-anatomist +-anatomy +-anchor +-anchovy +-ancient +-android +-anemia +-anemic +-aneurism +-anew +-angelfish +-angelic +-anger +-angled +-angler +-angles +-angling +-angrily +-angriness +-anguished +-angular +-animal +-animate +-animating +-animation +-animator +-anime +-animosity +-ankle +-annex +-annotate +-announcer +-annoying +-annually +-annuity +-anointer +-another +-answering +-antacid +-antarctic +-anteater +-antelope +-antennae +-anthem +-anthill +-anthology +-antibody +-antics +-antidote +-antihero +-antiquely +-antiques +-antiquity +-antirust +-antitoxic +-antitrust +-antiviral +-antivirus +-antler +-antonym +-antsy +-anvil +-anybody +-anyhow +-anymore +-anyone +-anyplace +-anything +-anytime +-anyway +-anywhere +-aorta +-apache +-apostle +-appealing +-appear +-appease +-appeasing +-appendage +-appendix +-appetite +-appetizer +-applaud +-applause +-apple +-appliance +-applicant +-applied +-apply +-appointee +-appraisal +-appraiser +-apprehend +-approach +-approval +-approve +-apricot +-april +-apron +-aptitude +-aptly +-aqua +-aqueduct +-arbitrary +-arbitrate +-ardently +-area +-arena +-arguable +-arguably +-argue +-arise +-armadillo +-armband +-armchair +-armed +-armful +-armhole +-arming +-armless +-armoire +-armored +-armory +-armrest +-army +-aroma +-arose +-around +-arousal +-arrange +-array +-arrest +-arrival +-arrive +-arrogance +-arrogant +-arson +-art +-ascend +-ascension +-ascent +-ascertain +-ashamed +-ashen +-ashes +-ashy +-aside +-askew +-asleep +-asparagus +-aspect +-aspirate +-aspire +-aspirin +-astonish +-astound +-astride +-astrology +-astronaut +-astronomy +-astute +-atlantic +-atlas +-atom +-atonable +-atop +-atrium +-atrocious +-atrophy +-attach +-attain +-attempt +-attendant +-attendee +-attention +-attentive +-attest +-attic +-attire +-attitude +-attractor +-attribute +-atypical +-auction +-audacious +-audacity +-audible +-audibly +-audience +-audio +-audition +-augmented +-august +-authentic +-author +-autism +-autistic +-autograph +-automaker +-automated +-automatic +-autopilot +-available +-avalanche +-avatar +-avenge +-avenging +-avenue +-average +-aversion +-avert +-aviation +-aviator +-avid +-avoid +-await +-awaken +-award +-aware +-awhile +-awkward +-awning +-awoke +-awry +-axis +-babble +-babbling +-babied +-baboon +-backache +-backboard +-backboned +-backdrop +-backed +-backer +-backfield +-backfire +-backhand +-backing +-backlands +-backlash +-backless +-backlight +-backlit +-backlog +-backpack +-backpedal +-backrest +-backroom +-backshift +-backside +-backslid +-backspace +-backspin +-backstab +-backstage +-backtalk +-backtrack +-backup +-backward +-backwash +-backwater +-backyard +-bacon +-bacteria +-bacterium +-badass +-badge +-badland +-badly +-badness +-baffle +-baffling +-bagel +-bagful +-baggage +-bagged +-baggie +-bagginess +-bagging +-baggy +-bagpipe +-baguette +-baked +-bakery +-bakeshop +-baking +-balance +-balancing +-balcony +-balmy +-balsamic +-bamboo +-banana +-banish +-banister +-banjo +-bankable +-bankbook +-banked +-banker +-banking +-banknote +-bankroll +-banner +-bannister +-banshee +-banter +-barbecue +-barbed +-barbell +-barber +-barcode +-barge +-bargraph +-barista +-baritone +-barley +-barmaid +-barman +-barn +-barometer +-barrack +-barracuda +-barrel +-barrette +-barricade +-barrier +-barstool +-bartender +-barterer +-bash +-basically +-basics +-basil +-basin +-basis +-basket +-batboy +-batch +-bath +-baton +-bats +-battalion +-battered +-battering +-battery +-batting +-battle +-bauble +-bazooka +-blabber +-bladder +-blade +-blah +-blame +-blaming +-blanching +-blandness +-blank +-blaspheme +-blasphemy +-blast +-blatancy +-blatantly +-blazer +-blazing +-bleach +-bleak +-bleep +-blemish +-blend +-bless +-blighted +-blimp +-bling +-blinked +-blinker +-blinking +-blinks +-blip +-blissful +-blitz +-blizzard +-bloated +-bloating +-blob +-blog +-bloomers +-blooming +-blooper +-blot +-blouse +-blubber +-bluff +-bluish +-blunderer +-blunt +-blurb +-blurred +-blurry +-blurt +-blush +-blustery +-boaster +-boastful +-boasting +-boat +-bobbed +-bobbing +-bobble +-bobcat +-bobsled +-bobtail +-bodacious +-body +-bogged +-boggle +-bogus +-boil +-bok +-bolster +-bolt +-bonanza +-bonded +-bonding +-bondless +-boned +-bonehead +-boneless +-bonelike +-boney +-bonfire +-bonnet +-bonsai +-bonus +-bony +-boogeyman +-boogieman +-book +-boondocks +-booted +-booth +-bootie +-booting +-bootlace +-bootleg +-boots +-boozy +-borax +-boring +-borough +-borrower +-borrowing +-boss +-botanical +-botanist +-botany +-botch +-both +-bottle +-bottling +-bottom +-bounce +-bouncing +-bouncy +-bounding +-boundless +-bountiful +-bovine +-boxcar +-boxer +-boxing +-boxlike +-boxy +-breach +-breath +-breeches +-breeching +-breeder +-breeding +-breeze +-breezy +-brethren +-brewery +-brewing +-briar +-bribe +-brick +-bride +-bridged +-brigade +-bright +-brilliant +-brim +-bring +-brink +-brisket +-briskly +-briskness +-bristle +-brittle +-broadband +-broadcast +-broaden +-broadly +-broadness +-broadside +-broadways +-broiler +-broiling +-broken +-broker +-bronchial +-bronco +-bronze +-bronzing +-brook +-broom +-brought +-browbeat +-brownnose +-browse +-browsing +-bruising +-brunch +-brunette +-brunt +-brush +-brussels +-brute +-brutishly +-bubble +-bubbling +-bubbly +-buccaneer +-bucked +-bucket +-buckle +-buckshot +-buckskin +-bucktooth +-buckwheat +-buddhism +-buddhist +-budding +-buddy +-budget +-buffalo +-buffed +-buffer +-buffing +-buffoon +-buggy +-bulb +-bulge +-bulginess +-bulgur +-bulk +-bulldog +-bulldozer +-bullfight +-bullfrog +-bullhorn +-bullion +-bullish +-bullpen +-bullring +-bullseye +-bullwhip +-bully +-bunch +-bundle +-bungee +-bunion +-bunkbed +-bunkhouse +-bunkmate +-bunny +-bunt +-busboy +-bush +-busily +-busload +-bust +-busybody +-buzz +-cabana +-cabbage +-cabbie +-cabdriver +-cable +-caboose +-cache +-cackle +-cacti +-cactus +-caddie +-caddy +-cadet +-cadillac +-cadmium +-cage +-cahoots +-cake +-calamari +-calamity +-calcium +-calculate +-calculus +-caliber +-calibrate +-calm +-caloric +-calorie +-calzone +-camcorder +-cameo +-camera +-camisole +-camper +-campfire +-camping +-campsite +-campus +-canal +-canary +-cancel +-candied +-candle +-candy +-cane +-canine +-canister +-cannabis +-canned +-canning +-cannon +-cannot +-canola +-canon +-canopener +-canopy +-canteen +-canyon +-capable +-capably +-capacity +-cape +-capillary +-capital +-capitol +-capped +-capricorn +-capsize +-capsule +-caption +-captivate +-captive +-captivity +-capture +-caramel +-carat +-caravan +-carbon +-cardboard +-carded +-cardiac +-cardigan +-cardinal +-cardstock +-carefully +-caregiver +-careless +-caress +-caretaker +-cargo +-caring +-carless +-carload +-carmaker +-carnage +-carnation +-carnival +-carnivore +-carol +-carpenter +-carpentry +-carpool +-carport +-carried +-carrot +-carrousel +-carry +-cartel +-cartload +-carton +-cartoon +-cartridge +-cartwheel +-carve +-carving +-carwash +-cascade +-case +-cash +-casing +-casino +-casket +-cassette +-casually +-casualty +-catacomb +-catalog +-catalyst +-catalyze +-catapult +-cataract +-catatonic +-catcall +-catchable +-catcher +-catching +-catchy +-caterer +-catering +-catfight +-catfish +-cathedral +-cathouse +-catlike +-catnap +-catnip +-catsup +-cattail +-cattishly +-cattle +-catty +-catwalk +-caucasian +-caucus +-causal +-causation +-cause +-causing +-cauterize +-caution +-cautious +-cavalier +-cavalry +-caviar +-cavity +-cedar +-celery +-celestial +-celibacy +-celibate +-celtic +-cement +-census +-ceramics +-ceremony +-certainly +-certainty +-certified +-certify +-cesarean +-cesspool +-chafe +-chaffing +-chain +-chair +-chalice +-challenge +-chamber +-chamomile +-champion +-chance +-change +-channel +-chant +-chaos +-chaperone +-chaplain +-chapped +-chaps +-chapter +-character +-charbroil +-charcoal +-charger +-charging +-chariot +-charity +-charm +-charred +-charter +-charting +-chase +-chasing +-chaste +-chastise +-chastity +-chatroom +-chatter +-chatting +-chatty +-cheating +-cheddar +-cheek +-cheer +-cheese +-cheesy +-chef +-chemicals +-chemist +-chemo +-cherisher +-cherub +-chess +-chest +-chevron +-chevy +-chewable +-chewer +-chewing +-chewy +-chief +-chihuahua +-childcare +-childhood +-childish +-childless +-childlike +-chili +-chill +-chimp +-chip +-chirping +-chirpy +-chitchat +-chivalry +-chive +-chloride +-chlorine +-choice +-chokehold +-choking +-chomp +-chooser +-choosing +-choosy +-chop +-chosen +-chowder +-chowtime +-chrome +-chubby +-chuck +-chug +-chummy +-chump +-chunk +-churn +-chute +-cider +-cilantro +-cinch +-cinema +-cinnamon +-circle +-circling +-circular +-circulate +-circus +-citable +-citadel +-citation +-citizen +-citric +-citrus +-city +-civic +-civil +-clad +-claim +-clambake +-clammy +-clamor +-clamp +-clamshell +-clang +-clanking +-clapped +-clapper +-clapping +-clarify +-clarinet +-clarity +-clash +-clasp +-class +-clatter +-clause +-clavicle +-claw +-clay +-clean +-clear +-cleat +-cleaver +-cleft +-clench +-clergyman +-clerical +-clerk +-clever +-clicker +-client +-climate +-climatic +-cling +-clinic +-clinking +-clip +-clique +-cloak +-clobber +-clock +-clone +-cloning +-closable +-closure +-clothes +-clothing +-cloud +-clover +-clubbed +-clubbing +-clubhouse +-clump +-clumsily +-clumsy +-clunky +-clustered +-clutch +-clutter +-coach +-coagulant +-coastal +-coaster +-coasting +-coastland +-coastline +-coat +-coauthor +-cobalt +-cobbler +-cobweb +-cocoa +-coconut +-cod +-coeditor +-coerce +-coexist +-coffee +-cofounder +-cognition +-cognitive +-cogwheel +-coherence +-coherent +-cohesive +-coil +-coke +-cola +-cold +-coleslaw +-coliseum +-collage +-collapse +-collar +-collected +-collector +-collide +-collie +-collision +-colonial +-colonist +-colonize +-colony +-colossal +-colt +-coma +-come +-comfort +-comfy +-comic +-coming +-comma +-commence +-commend +-comment +-commerce +-commode +-commodity +-commodore +-common +-commotion +-commute +-commuting +-compacted +-compacter +-compactly +-compactor +-companion +-company +-compare +-compel +-compile +-comply +-component +-composed +-composer +-composite +-compost +-composure +-compound +-compress +-comprised +-computer +-computing +-comrade +-concave +-conceal +-conceded +-concept +-concerned +-concert +-conch +-concierge +-concise +-conclude +-concrete +-concur +-condense +-condiment +-condition +-condone +-conducive +-conductor +-conduit +-cone +-confess +-confetti +-confidant +-confident +-confider +-confiding +-configure +-confined +-confining +-confirm +-conflict +-conform +-confound +-confront +-confused +-confusing +-confusion +-congenial +-congested +-congrats +-congress +-conical +-conjoined +-conjure +-conjuror +-connected +-connector +-consensus +-consent +-console +-consoling +-consonant +-constable +-constant +-constrain +-constrict +-construct +-consult +-consumer +-consuming +-contact +-container +-contempt +-contend +-contented +-contently +-contents +-contest +-context +-contort +-contour +-contrite +-control +-contusion +-convene +-convent +-copartner +-cope +-copied +-copier +-copilot +-coping +-copious +-copper +-copy +-coral +-cork +-cornball +-cornbread +-corncob +-cornea +-corned +-corner +-cornfield +-cornflake +-cornhusk +-cornmeal +-cornstalk +-corny +-coronary +-coroner +-corporal +-corporate +-corral +-correct +-corridor +-corrode +-corroding +-corrosive +-corsage +-corset +-cortex +-cosigner +-cosmetics +-cosmic +-cosmos +-cosponsor +-cost +-cottage +-cotton +-couch +-cough +-could +-countable +-countdown +-counting +-countless +-country +-county +-courier +-covenant +-cover +-coveted +-coveting +-coyness +-cozily +-coziness +-cozy +-crabbing +-crabgrass +-crablike +-crabmeat +-cradle +-cradling +-crafter +-craftily +-craftsman +-craftwork +-crafty +-cramp +-cranberry +-crane +-cranial +-cranium +-crank +-crate +-crave +-craving +-crawfish +-crawlers +-crawling +-crayfish +-crayon +-crazed +-crazily +-craziness +-crazy +-creamed +-creamer +-creamlike +-crease +-creasing +-creatable +-create +-creation +-creative +-creature +-credible +-credibly +-credit +-creed +-creme +-creole +-crepe +-crept +-crescent +-crested +-cresting +-crestless +-crevice +-crewless +-crewman +-crewmate +-crib +-cricket +-cried +-crier +-crimp +-crimson +-cringe +-cringing +-crinkle +-crinkly +-crisped +-crisping +-crisply +-crispness +-crispy +-criteria +-critter +-croak +-crock +-crook +-croon +-crop +-cross +-crouch +-crouton +-crowbar +-crowd +-crown +-crucial +-crudely +-crudeness +-cruelly +-cruelness +-cruelty +-crumb +-crummiest +-crummy +-crumpet +-crumpled +-cruncher +-crunching +-crunchy +-crusader +-crushable +-crushed +-crusher +-crushing +-crust +-crux +-crying +-cryptic +-crystal +-cubbyhole +-cube +-cubical +-cubicle +-cucumber +-cuddle +-cuddly +-cufflink +-culinary +-culminate +-culpable +-culprit +-cultivate +-cultural +-culture +-cupbearer +-cupcake +-cupid +-cupped +-cupping +-curable +-curator +-curdle +-cure +-curfew +-curing +-curled +-curler +-curliness +-curling +-curly +-curry +-curse +-cursive +-cursor +-curtain +-curtly +-curtsy +-curvature +-curve +-curvy +-cushy +-cusp +-cussed +-custard +-custodian +-custody +-customary +-customer +-customize +-customs +-cut +-cycle +-cyclic +-cycling +-cyclist +-cylinder +-cymbal +-cytoplasm +-cytoplast +-dab +-dad +-daffodil +-dagger +-daily +-daintily +-dainty +-dairy +-daisy +-dallying +-dance +-dancing +-dandelion +-dander +-dandruff +-dandy +-danger +-dangle +-dangling +-daredevil +-dares +-daringly +-darkened +-darkening +-darkish +-darkness +-darkroom +-darling +-darn +-dart +-darwinism +-dash +-dastardly +-data +-datebook +-dating +-daughter +-daunting +-dawdler +-dawn +-daybed +-daybreak +-daycare +-daydream +-daylight +-daylong +-dayroom +-daytime +-dazzler +-dazzling +-deacon +-deafening +-deafness +-dealer +-dealing +-dealmaker +-dealt +-dean +-debatable +-debate +-debating +-debit +-debrief +-debtless +-debtor +-debug +-debunk +-decade +-decaf +-decal +-decathlon +-decay +-deceased +-deceit +-deceiver +-deceiving +-december +-decency +-decent +-deception +-deceptive +-decibel +-decidable +-decimal +-decimeter +-decipher +-deck +-declared +-decline +-decode +-decompose +-decorated +-decorator +-decoy +-decrease +-decree +-dedicate +-dedicator +-deduce +-deduct +-deed +-deem +-deepen +-deeply +-deepness +-deface +-defacing +-defame +-default +-defeat +-defection +-defective +-defendant +-defender +-defense +-defensive +-deferral +-deferred +-defiance +-defiant +-defile +-defiling +-define +-definite +-deflate +-deflation +-deflator +-deflected +-deflector +-defog +-deforest +-defraud +-defrost +-deftly +-defuse +-defy +-degraded +-degrading +-degrease +-degree +-dehydrate +-deity +-dejected +-delay +-delegate +-delegator +-delete +-deletion +-delicacy +-delicate +-delicious +-delighted +-delirious +-delirium +-deliverer +-delivery +-delouse +-delta +-deluge +-delusion +-deluxe +-demanding +-demeaning +-demeanor +-demise +-democracy +-democrat +-demote +-demotion +-demystify +-denatured +-deniable +-denial +-denim +-denote +-dense +-density +-dental +-dentist +-denture +-deny +-deodorant +-deodorize +-departed +-departure +-depict +-deplete +-depletion +-deplored +-deploy +-deport +-depose +-depraved +-depravity +-deprecate +-depress +-deprive +-depth +-deputize +-deputy +-derail +-deranged +-derby +-derived +-desecrate +-deserve +-deserving +-designate +-designed +-designer +-designing +-deskbound +-desktop +-deskwork +-desolate +-despair +-despise +-despite +-destiny +-destitute +-destruct +-detached +-detail +-detection +-detective +-detector +-detention +-detergent +-detest +-detonate +-detonator +-detoxify +-detract +-deuce +-devalue +-deviancy +-deviant +-deviate +-deviation +-deviator +-device +-devious +-devotedly +-devotee +-devotion +-devourer +-devouring +-devoutly +-dexterity +-dexterous +-diabetes +-diabetic +-diabolic +-diagnoses +-diagnosis +-diagram +-dial +-diameter +-diaper +-diaphragm +-diary +-dice +-dicing +-dictate +-dictation +-dictator +-difficult +-diffused +-diffuser +-diffusion +-diffusive +-dig +-dilation +-diligence +-diligent +-dill +-dilute +-dime +-diminish +-dimly +-dimmed +-dimmer +-dimness +-dimple +-diner +-dingbat +-dinghy +-dinginess +-dingo +-dingy +-dining +-dinner +-diocese +-dioxide +-diploma +-dipped +-dipper +-dipping +-directed +-direction +-directive +-directly +-directory +-direness +-dirtiness +-disabled +-disagree +-disallow +-disarm +-disarray +-disaster +-disband +-disbelief +-disburse +-discard +-discern +-discharge +-disclose +-discolor +-discount +-discourse +-discover +-discuss +-disdain +-disengage +-disfigure +-disgrace +-dish +-disinfect +-disjoin +-disk +-dislike +-disliking +-dislocate +-dislodge +-disloyal +-dismantle +-dismay +-dismiss +-dismount +-disobey +-disorder +-disown +-disparate +-disparity +-dispatch +-dispense +-dispersal +-dispersed +-disperser +-displace +-display +-displease +-disposal +-dispose +-disprove +-dispute +-disregard +-disrupt +-dissuade +-distance +-distant +-distaste +-distill +-distinct +-distort +-distract +-distress +-district +-distrust +-ditch +-ditto +-ditzy +-dividable +-divided +-dividend +-dividers +-dividing +-divinely +-diving +-divinity +-divisible +-divisibly +-division +-divisive +-divorcee +-dizziness +-dizzy +-doable +-docile +-dock +-doctrine +-document +-dodge +-dodgy +-doily +-doing +-dole +-dollar +-dollhouse +-dollop +-dolly +-dolphin +-domain +-domelike +-domestic +-dominion +-dominoes +-donated +-donation +-donator +-donor +-donut +-doodle +-doorbell +-doorframe +-doorknob +-doorman +-doormat +-doornail +-doorpost +-doorstep +-doorstop +-doorway +-doozy +-dork +-dormitory +-dorsal +-dosage +-dose +-dotted +-doubling +-douche +-dove +-down +-dowry +-doze +-drab +-dragging +-dragonfly +-dragonish +-dragster +-drainable +-drainage +-drained +-drainer +-drainpipe +-dramatic +-dramatize +-drank +-drapery +-drastic +-draw +-dreaded +-dreadful +-dreadlock +-dreamboat +-dreamily +-dreamland +-dreamless +-dreamlike +-dreamt +-dreamy +-drearily +-dreary +-drench +-dress +-drew +-dribble +-dried +-drier +-drift +-driller +-drilling +-drinkable +-drinking +-dripping +-drippy +-drivable +-driven +-driver +-driveway +-driving +-drizzle +-drizzly +-drone +-drool +-droop +-drop-down +-dropbox +-dropkick +-droplet +-dropout +-dropper +-drove +-drown +-drowsily +-drudge +-drum +-dry +-dubbed +-dubiously +-duchess +-duckbill +-ducking +-duckling +-ducktail +-ducky +-duct +-dude +-duffel +-dugout +-duh +-duke +-duller +-dullness +-duly +-dumping +-dumpling +-dumpster +-duo +-dupe +-duplex +-duplicate +-duplicity +-durable +-durably +-duration +-duress +-during +-dusk +-dust +-dutiful +-duty +-duvet +-dwarf +-dweeb +-dwelled +-dweller +-dwelling +-dwindle +-dwindling +-dynamic +-dynamite +-dynasty +-dyslexia +-dyslexic +-each +-eagle +-earache +-eardrum +-earflap +-earful +-earlobe +-early +-earmark +-earmuff +-earphone +-earpiece +-earplugs +-earring +-earshot +-earthen +-earthlike +-earthling +-earthly +-earthworm +-earthy +-earwig +-easeful +-easel +-easiest +-easily +-easiness +-easing +-eastbound +-eastcoast +-easter +-eastward +-eatable +-eaten +-eatery +-eating +-eats +-ebay +-ebony +-ebook +-ecard +-eccentric +-echo +-eclair +-eclipse +-ecologist +-ecology +-economic +-economist +-economy +-ecosphere +-ecosystem +-edge +-edginess +-edging +-edgy +-edition +-editor +-educated +-education +-educator +-eel +-effective +-effects +-efficient +-effort +-eggbeater +-egging +-eggnog +-eggplant +-eggshell +-egomaniac +-egotism +-egotistic +-either +-eject +-elaborate +-elastic +-elated +-elbow +-eldercare +-elderly +-eldest +-electable +-election +-elective +-elephant +-elevate +-elevating +-elevation +-elevator +-eleven +-elf +-eligible +-eligibly +-eliminate +-elite +-elitism +-elixir +-elk +-ellipse +-elliptic +-elm +-elongated +-elope +-eloquence +-eloquent +-elsewhere +-elude +-elusive +-elves +-email +-embargo +-embark +-embassy +-embattled +-embellish +-ember +-embezzle +-emblaze +-emblem +-embody +-embolism +-emboss +-embroider +-emcee +-emerald +-emergency +-emission +-emit +-emote +-emoticon +-emotion +-empathic +-empathy +-emperor +-emphases +-emphasis +-emphasize +-emphatic +-empirical +-employed +-employee +-employer +-emporium +-empower +-emptier +-emptiness +-empty +-emu +-enable +-enactment +-enamel +-enchanted +-enchilada +-encircle +-enclose +-enclosure +-encode +-encore +-encounter +-encourage +-encroach +-encrust +-encrypt +-endanger +-endeared +-endearing +-ended +-ending +-endless +-endnote +-endocrine +-endorphin +-endorse +-endowment +-endpoint +-endurable +-endurance +-enduring +-energetic +-energize +-energy +-enforced +-enforcer +-engaged +-engaging +-engine +-engorge +-engraved +-engraver +-engraving +-engross +-engulf +-enhance +-enigmatic +-enjoyable +-enjoyably +-enjoyer +-enjoying +-enjoyment +-enlarged +-enlarging +-enlighten +-enlisted +-enquirer +-enrage +-enrich +-enroll +-enslave +-ensnare +-ensure +-entail +-entangled +-entering +-entertain +-enticing +-entire +-entitle +-entity +-entomb +-entourage +-entrap +-entree +-entrench +-entrust +-entryway +-entwine +-enunciate +-envelope +-enviable +-enviably +-envious +-envision +-envoy +-envy +-enzyme +-epic +-epidemic +-epidermal +-epidermis +-epidural +-epilepsy +-epileptic +-epilogue +-epiphany +-episode +-equal +-equate +-equation +-equator +-equinox +-equipment +-equity +-equivocal +-eradicate +-erasable +-erased +-eraser +-erasure +-ergonomic +-errand +-errant +-erratic +-error +-erupt +-escalate +-escalator +-escapable +-escapade +-escapist +-escargot +-eskimo +-esophagus +-espionage +-espresso +-esquire +-essay +-essence +-essential +-establish +-estate +-esteemed +-estimate +-estimator +-estranged +-estrogen +-etching +-eternal +-eternity +-ethanol +-ether +-ethically +-ethics +-euphemism +-evacuate +-evacuee +-evade +-evaluate +-evaluator +-evaporate +-evasion +-evasive +-even +-everglade +-evergreen +-everybody +-everyday +-everyone +-evict +-evidence +-evident +-evil +-evoke +-evolution +-evolve +-exact +-exalted +-example +-excavate +-excavator +-exceeding +-exception +-excess +-exchange +-excitable +-exciting +-exclaim +-exclude +-excluding +-exclusion +-exclusive +-excretion +-excretory +-excursion +-excusable +-excusably +-excuse +-exemplary +-exemplify +-exemption +-exerciser +-exert +-exes +-exfoliate +-exhale +-exhaust +-exhume +-exile +-existing +-exit +-exodus +-exonerate +-exorcism +-exorcist +-expand +-expanse +-expansion +-expansive +-expectant +-expedited +-expediter +-expel +-expend +-expenses +-expensive +-expert +-expire +-expiring +-explain +-expletive +-explicit +-explode +-exploit +-explore +-exploring +-exponent +-exporter +-exposable +-expose +-exposure +-express +-expulsion +-exquisite +-extended +-extending +-extent +-extenuate +-exterior +-external +-extinct +-extortion +-extradite +-extras +-extrovert +-extrude +-extruding +-exuberant +-fable +-fabric +-fabulous +-facebook +-facecloth +-facedown +-faceless +-facelift +-faceplate +-faceted +-facial +-facility +-facing +-facsimile +-faction +-factoid +-factor +-factsheet +-factual +-faculty +-fade +-fading +-failing +-falcon +-fall +-false +-falsify +-fame +-familiar +-family +-famine +-famished +-fanatic +-fancied +-fanciness +-fancy +-fanfare +-fang +-fanning +-fantasize +-fantastic +-fantasy +-fascism +-fastball +-faster +-fasting +-fastness +-faucet +-favorable +-favorably +-favored +-favoring +-favorite +-fax +-feast +-federal +-fedora +-feeble +-feed +-feel +-feisty +-feline +-felt-tip +-feminine +-feminism +-feminist +-feminize +-femur +-fence +-fencing +-fender +-ferment +-fernlike +-ferocious +-ferocity +-ferret +-ferris +-ferry +-fervor +-fester +-festival +-festive +-festivity +-fetal +-fetch +-fever +-fiber +-fiction +-fiddle +-fiddling +-fidelity +-fidgeting +-fidgety +-fifteen +-fifth +-fiftieth +-fifty +-figment +-figure +-figurine +-filing +-filled +-filler +-filling +-film +-filter +-filth +-filtrate +-finale +-finalist +-finalize +-finally +-finance +-financial +-finch +-fineness +-finer +-finicky +-finished +-finisher +-finishing +-finite +-finless +-finlike +-fiscally +-fit +-five +-flaccid +-flagman +-flagpole +-flagship +-flagstick +-flagstone +-flail +-flakily +-flaky +-flame +-flammable +-flanked +-flanking +-flannels +-flap +-flaring +-flashback +-flashbulb +-flashcard +-flashily +-flashing +-flashy +-flask +-flatbed +-flatfoot +-flatly +-flatness +-flatten +-flattered +-flatterer +-flattery +-flattop +-flatware +-flatworm +-flavored +-flavorful +-flavoring +-flaxseed +-fled +-fleshed +-fleshy +-flick +-flier +-flight +-flinch +-fling +-flint +-flip +-flirt +-float +-flock +-flogging +-flop +-floral +-florist +-floss +-flounder +-flyable +-flyaway +-flyer +-flying +-flyover +-flypaper +-foam +-foe +-fog +-foil +-folic +-folk +-follicle +-follow +-fondling +-fondly +-fondness +-fondue +-font +-food +-fool +-footage +-football +-footbath +-footboard +-footer +-footgear +-foothill +-foothold +-footing +-footless +-footman +-footnote +-footpad +-footpath +-footprint +-footrest +-footsie +-footsore +-footwear +-footwork +-fossil +-foster +-founder +-founding +-fountain +-fox +-foyer +-fraction +-fracture +-fragile +-fragility +-fragment +-fragrance +-fragrant +-frail +-frame +-framing +-frantic +-fraternal +-frayed +-fraying +-frays +-freckled +-freckles +-freebase +-freebee +-freebie +-freedom +-freefall +-freehand +-freeing +-freeload +-freely +-freemason +-freeness +-freestyle +-freeware +-freeway +-freewill +-freezable +-freezing +-freight +-french +-frenzied +-frenzy +-frequency +-frequent +-fresh +-fretful +-fretted +-friction +-friday +-fridge +-fried +-friend +-frighten +-frightful +-frigidity +-frigidly +-frill +-fringe +-frisbee +-frisk +-fritter +-frivolous +-frolic +-from +-front +-frostbite +-frosted +-frostily +-frosting +-frostlike +-frosty +-froth +-frown +-frozen +-fructose +-frugality +-frugally +-fruit +-frustrate +-frying +-gab +-gaffe +-gag +-gainfully +-gaining +-gains +-gala +-gallantly +-galleria +-gallery +-galley +-gallon +-gallows +-gallstone +-galore +-galvanize +-gambling +-game +-gaming +-gamma +-gander +-gangly +-gangrene +-gangway +-gap +-garage +-garbage +-garden +-gargle +-garland +-garlic +-garment +-garnet +-garnish +-garter +-gas +-gatherer +-gathering +-gating +-gauging +-gauntlet +-gauze +-gave +-gawk +-gazing +-gear +-gecko +-geek +-geiger +-gem +-gender +-generic +-generous +-genetics +-genre +-gentile +-gentleman +-gently +-gents +-geography +-geologic +-geologist +-geology +-geometric +-geometry +-geranium +-gerbil +-geriatric +-germicide +-germinate +-germless +-germproof +-gestate +-gestation +-gesture +-getaway +-getting +-getup +-giant +-gibberish +-giblet +-giddily +-giddiness +-giddy +-gift +-gigabyte +-gigahertz +-gigantic +-giggle +-giggling +-giggly +-gigolo +-gilled +-gills +-gimmick +-girdle +-giveaway +-given +-giver +-giving +-gizmo +-gizzard +-glacial +-glacier +-glade +-gladiator +-gladly +-glamorous +-glamour +-glance +-glancing +-glandular +-glare +-glaring +-glass +-glaucoma +-glazing +-gleaming +-gleeful +-glider +-gliding +-glimmer +-glimpse +-glisten +-glitch +-glitter +-glitzy +-gloater +-gloating +-gloomily +-gloomy +-glorified +-glorifier +-glorify +-glorious +-glory +-gloss +-glove +-glowing +-glowworm +-glucose +-glue +-gluten +-glutinous +-glutton +-gnarly +-gnat +-goal +-goatskin +-goes +-goggles +-going +-goldfish +-goldmine +-goldsmith +-golf +-goliath +-gonad +-gondola +-gone +-gong +-good +-gooey +-goofball +-goofiness +-goofy +-google +-goon +-gopher +-gore +-gorged +-gorgeous +-gory +-gosling +-gossip +-gothic +-gotten +-gout +-gown +-grab +-graceful +-graceless +-gracious +-gradation +-graded +-grader +-gradient +-grading +-gradually +-graduate +-graffiti +-grafted +-grafting +-grain +-granddad +-grandkid +-grandly +-grandma +-grandpa +-grandson +-granite +-granny +-granola +-grant +-granular +-grape +-graph +-grapple +-grappling +-grasp +-grass +-gratified +-gratify +-grating +-gratitude +-gratuity +-gravel +-graveness +-graves +-graveyard +-gravitate +-gravity +-gravy +-gray +-grazing +-greasily +-greedily +-greedless +-greedy +-green +-greeter +-greeting +-grew +-greyhound +-grid +-grief +-grievance +-grieving +-grievous +-grill +-grimace +-grimacing +-grime +-griminess +-grimy +-grinch +-grinning +-grip +-gristle +-grit +-groggily +-groggy +-groin +-groom +-groove +-grooving +-groovy +-grope +-ground +-grouped +-grout +-grove +-grower +-growing +-growl +-grub +-grudge +-grudging +-grueling +-gruffly +-grumble +-grumbling +-grumbly +-grumpily +-grunge +-grunt +-guacamole +-guidable +-guidance +-guide +-guiding +-guileless +-guise +-gulf +-gullible +-gully +-gulp +-gumball +-gumdrop +-gumminess +-gumming +-gummy +-gurgle +-gurgling +-guru +-gush +-gusto +-gusty +-gutless +-guts +-gutter +-guy +-guzzler +-gyration +-habitable +-habitant +-habitat +-habitual +-hacked +-hacker +-hacking +-hacksaw +-had +-haggler +-haiku +-half +-halogen +-halt +-halved +-halves +-hamburger +-hamlet +-hammock +-hamper +-hamster +-hamstring +-handbag +-handball +-handbook +-handbrake +-handcart +-handclap +-handclasp +-handcraft +-handcuff +-handed +-handful +-handgrip +-handgun +-handheld +-handiness +-handiwork +-handlebar +-handled +-handler +-handling +-handmade +-handoff +-handpick +-handprint +-handrail +-handsaw +-handset +-handsfree +-handshake +-handstand +-handwash +-handwork +-handwoven +-handwrite +-handyman +-hangnail +-hangout +-hangover +-hangup +-hankering +-hankie +-hanky +-haphazard +-happening +-happier +-happiest +-happily +-happiness +-happy +-harbor +-hardcopy +-hardcore +-hardcover +-harddisk +-hardened +-hardener +-hardening +-hardhat +-hardhead +-hardiness +-hardly +-hardness +-hardship +-hardware +-hardwired +-hardwood +-hardy +-harmful +-harmless +-harmonica +-harmonics +-harmonize +-harmony +-harness +-harpist +-harsh +-harvest +-hash +-hassle +-haste +-hastily +-hastiness +-hasty +-hatbox +-hatchback +-hatchery +-hatchet +-hatching +-hatchling +-hate +-hatless +-hatred +-haunt +-haven +-hazard +-hazelnut +-hazily +-haziness +-hazing +-hazy +-headache +-headband +-headboard +-headcount +-headdress +-headed +-header +-headfirst +-headgear +-heading +-headlamp +-headless +-headlock +-headphone +-headpiece +-headrest +-headroom +-headscarf +-headset +-headsman +-headstand +-headstone +-headway +-headwear +-heap +-heat +-heave +-heavily +-heaviness +-heaving +-hedge +-hedging +-heftiness +-hefty +-helium +-helmet +-helper +-helpful +-helping +-helpless +-helpline +-hemlock +-hemstitch +-hence +-henchman +-henna +-herald +-herbal +-herbicide +-herbs +-heritage +-hermit +-heroics +-heroism +-herring +-herself +-hertz +-hesitancy +-hesitant +-hesitate +-hexagon +-hexagram +-hubcap +-huddle +-huddling +-huff +-hug +-hula +-hulk +-hull +-human +-humble +-humbling +-humbly +-humid +-humiliate +-humility +-humming +-hummus +-humongous +-humorist +-humorless +-humorous +-humpback +-humped +-humvee +-hunchback +-hundredth +-hunger +-hungrily +-hungry +-hunk +-hunter +-hunting +-huntress +-huntsman +-hurdle +-hurled +-hurler +-hurling +-hurray +-hurricane +-hurried +-hurry +-hurt +-husband +-hush +-husked +-huskiness +-hut +-hybrid +-hydrant +-hydrated +-hydration +-hydrogen +-hydroxide +-hyperlink +-hypertext +-hyphen +-hypnoses +-hypnosis +-hypnotic +-hypnotism +-hypnotist +-hypnotize +-hypocrisy +-hypocrite +-ibuprofen +-ice +-iciness +-icing +-icky +-icon +-icy +-idealism +-idealist +-idealize +-ideally +-idealness +-identical +-identify +-identity +-ideology +-idiocy +-idiom +-idly +-igloo +-ignition +-ignore +-iguana +-illicitly +-illusion +-illusive +-image +-imaginary +-imagines +-imaging +-imbecile +-imitate +-imitation +-immature +-immerse +-immersion +-imminent +-immobile +-immodest +-immorally +-immortal +-immovable +-immovably +-immunity +-immunize +-impaired +-impale +-impart +-impatient +-impeach +-impeding +-impending +-imperfect +-imperial +-impish +-implant +-implement +-implicate +-implicit +-implode +-implosion +-implosive +-imply +-impolite +-important +-importer +-impose +-imposing +-impotence +-impotency +-impotent +-impound +-imprecise +-imprint +-imprison +-impromptu +-improper +-improve +-improving +-improvise +-imprudent +-impulse +-impulsive +-impure +-impurity +-iodine +-iodize +-ion +-ipad +-iphone +-ipod +-irate +-irk +-iron +-irregular +-irrigate +-irritable +-irritably +-irritant +-irritate +-islamic +-islamist +-isolated +-isolating +-isolation +-isotope +-issue +-issuing +-italicize +-italics +-item +-itinerary +-itunes +-ivory +-ivy +-jab +-jackal +-jacket +-jackknife +-jackpot +-jailbird +-jailbreak +-jailer +-jailhouse +-jalapeno +-jam +-janitor +-january +-jargon +-jarring +-jasmine +-jaundice +-jaunt +-java +-jawed +-jawless +-jawline +-jaws +-jaybird +-jaywalker +-jazz +-jeep +-jeeringly +-jellied +-jelly +-jersey +-jester +-jet +-jiffy +-jigsaw +-jimmy +-jingle +-jingling +-jinx +-jitters +-jittery +-job +-jockey +-jockstrap +-jogger +-jogging +-john +-joining +-jokester +-jokingly +-jolliness +-jolly +-jolt +-jot +-jovial +-joyfully +-joylessly +-joyous +-joyride +-joystick +-jubilance +-jubilant +-judge +-judgingly +-judicial +-judiciary +-judo +-juggle +-juggling +-jugular +-juice +-juiciness +-juicy +-jujitsu +-jukebox +-july +-jumble +-jumbo +-jump +-junction +-juncture +-june +-junior +-juniper +-junkie +-junkman +-junkyard +-jurist +-juror +-jury +-justice +-justifier +-justify +-justly +-justness +-juvenile +-kabob +-kangaroo +-karaoke +-karate +-karma +-kebab +-keenly +-keenness +-keep +-keg +-kelp +-kennel +-kept +-kerchief +-kerosene +-kettle +-kick +-kiln +-kilobyte +-kilogram +-kilometer +-kilowatt +-kilt +-kimono +-kindle +-kindling +-kindly +-kindness +-kindred +-kinetic +-kinfolk +-king +-kinship +-kinsman +-kinswoman +-kissable +-kisser +-kissing +-kitchen +-kite +-kitten +-kitty +-kiwi +-kleenex +-knapsack +-knee +-knelt +-knickers +-knoll +-koala +-kooky +-kosher +-krypton +-kudos +-kung +-labored +-laborer +-laboring +-laborious +-labrador +-ladder +-ladies +-ladle +-ladybug +-ladylike +-lagged +-lagging +-lagoon +-lair +-lake +-lance +-landed +-landfall +-landfill +-landing +-landlady +-landless +-landline +-landlord +-landmark +-landmass +-landmine +-landowner +-landscape +-landside +-landslide +-language +-lankiness +-lanky +-lantern +-lapdog +-lapel +-lapped +-lapping +-laptop +-lard +-large +-lark +-lash +-lasso +-last +-latch +-late +-lather +-latitude +-latrine +-latter +-latticed +-launch +-launder +-laundry +-laurel +-lavender +-lavish +-laxative +-lazily +-laziness +-lazy +-lecturer +-left +-legacy +-legal +-legend +-legged +-leggings +-legible +-legibly +-legislate +-lego +-legroom +-legume +-legwarmer +-legwork +-lemon +-lend +-length +-lens +-lent +-leotard +-lesser +-letdown +-lethargic +-lethargy +-letter +-lettuce +-level +-leverage +-levers +-levitate +-levitator +-liability +-liable +-liberty +-librarian +-library +-licking +-licorice +-lid +-life +-lifter +-lifting +-liftoff +-ligament +-likely +-likeness +-likewise +-liking +-lilac +-lilly +-lily +-limb +-limeade +-limelight +-limes +-limit +-limping +-limpness +-line +-lingo +-linguini +-linguist +-lining +-linked +-linoleum +-linseed +-lint +-lion +-lip +-liquefy +-liqueur +-liquid +-lisp +-list +-litigate +-litigator +-litmus +-litter +-little +-livable +-lived +-lively +-liver +-livestock +-lividly +-living +-lizard +-lubricant +-lubricate +-lucid +-luckily +-luckiness +-luckless +-lucrative +-ludicrous +-lugged +-lukewarm +-lullaby +-lumber +-luminance +-luminous +-lumpiness +-lumping +-lumpish +-lunacy +-lunar +-lunchbox +-luncheon +-lunchroom +-lunchtime +-lung +-lurch +-lure +-luridness +-lurk +-lushly +-lushness +-luster +-lustfully +-lustily +-lustiness +-lustrous +-lusty +-luxurious +-luxury +-lying +-lyrically +-lyricism +-lyricist +-lyrics +-macarena +-macaroni +-macaw +-mace +-machine +-machinist +-magazine +-magenta +-maggot +-magical +-magician +-magma +-magnesium +-magnetic +-magnetism +-magnetize +-magnifier +-magnify +-magnitude +-magnolia +-mahogany +-maimed +-majestic +-majesty +-majorette +-majority +-makeover +-maker +-makeshift +-making +-malformed +-malt +-mama +-mammal +-mammary +-mammogram +-manager +-managing +-manatee +-mandarin +-mandate +-mandatory +-mandolin +-manger +-mangle +-mango +-mangy +-manhandle +-manhole +-manhood +-manhunt +-manicotti +-manicure +-manifesto +-manila +-mankind +-manlike +-manliness +-manly +-manmade +-manned +-mannish +-manor +-manpower +-mantis +-mantra +-manual +-many +-map +-marathon +-marauding +-marbled +-marbles +-marbling +-march +-mardi +-margarine +-margarita +-margin +-marigold +-marina +-marine +-marital +-maritime +-marlin +-marmalade +-maroon +-married +-marrow +-marry +-marshland +-marshy +-marsupial +-marvelous +-marxism +-mascot +-masculine +-mashed +-mashing +-massager +-masses +-massive +-mastiff +-matador +-matchbook +-matchbox +-matcher +-matching +-matchless +-material +-maternal +-maternity +-math +-mating +-matriarch +-matrimony +-matrix +-matron +-matted +-matter +-maturely +-maturing +-maturity +-mauve +-maverick +-maximize +-maximum +-maybe +-mayday +-mayflower +-moaner +-moaning +-mobile +-mobility +-mobilize +-mobster +-mocha +-mocker +-mockup +-modified +-modify +-modular +-modulator +-module +-moisten +-moistness +-moisture +-molar +-molasses +-mold +-molecular +-molecule +-molehill +-mollusk +-mom +-monastery +-monday +-monetary +-monetize +-moneybags +-moneyless +-moneywise +-mongoose +-mongrel +-monitor +-monkhood +-monogamy +-monogram +-monologue +-monopoly +-monorail +-monotone +-monotype +-monoxide +-monsieur +-monsoon +-monstrous +-monthly +-monument +-moocher +-moodiness +-moody +-mooing +-moonbeam +-mooned +-moonlight +-moonlike +-moonlit +-moonrise +-moonscape +-moonshine +-moonstone +-moonwalk +-mop +-morale +-morality +-morally +-morbidity +-morbidly +-morphine +-morphing +-morse +-mortality +-mortally +-mortician +-mortified +-mortify +-mortuary +-mosaic +-mossy +-most +-mothball +-mothproof +-motion +-motivate +-motivator +-motive +-motocross +-motor +-motto +-mountable +-mountain +-mounted +-mounting +-mourner +-mournful +-mouse +-mousiness +-moustache +-mousy +-mouth +-movable +-move +-movie +-moving +-mower +-mowing +-much +-muck +-mud +-mug +-mulberry +-mulch +-mule +-mulled +-mullets +-multiple +-multiply +-multitask +-multitude +-mumble +-mumbling +-mumbo +-mummified +-mummify +-mummy +-mumps +-munchkin +-mundane +-municipal +-muppet +-mural +-murkiness +-murky +-murmuring +-muscular +-museum +-mushily +-mushiness +-mushroom +-mushy +-music +-musket +-muskiness +-musky +-mustang +-mustard +-muster +-mustiness +-musty +-mutable +-mutate +-mutation +-mute +-mutilated +-mutilator +-mutiny +-mutt +-mutual +-muzzle +-myself +-myspace +-mystified +-mystify +-myth +-nacho +-nag +-nail +-name +-naming +-nanny +-nanometer +-nape +-napkin +-napped +-napping +-nappy +-narrow +-nastily +-nastiness +-national +-native +-nativity +-natural +-nature +-naturist +-nautical +-navigate +-navigator +-navy +-nearby +-nearest +-nearly +-nearness +-neatly +-neatness +-nebula +-nebulizer +-nectar +-negate +-negation +-negative +-neglector +-negligee +-negligent +-negotiate +-nemeses +-nemesis +-neon +-nephew +-nerd +-nervous +-nervy +-nest +-net +-neurology +-neuron +-neurosis +-neurotic +-neuter +-neutron +-never +-next +-nibble +-nickname +-nicotine +-niece +-nifty +-nimble +-nimbly +-nineteen +-ninetieth +-ninja +-nintendo +-ninth +-nuclear +-nuclei +-nucleus +-nugget +-nullify +-number +-numbing +-numbly +-numbness +-numeral +-numerate +-numerator +-numeric +-numerous +-nuptials +-nursery +-nursing +-nurture +-nutcase +-nutlike +-nutmeg +-nutrient +-nutshell +-nuttiness +-nutty +-nuzzle +-nylon +-oaf +-oak +-oasis +-oat +-obedience +-obedient +-obituary +-object +-obligate +-obliged +-oblivion +-oblivious +-oblong +-obnoxious +-oboe +-obscure +-obscurity +-observant +-observer +-observing +-obsessed +-obsession +-obsessive +-obsolete +-obstacle +-obstinate +-obstruct +-obtain +-obtrusive +-obtuse +-obvious +-occultist +-occupancy +-occupant +-occupier +-occupy +-ocean +-ocelot +-octagon +-octane +-october +-octopus +-ogle +-oil +-oink +-ointment +-okay +-old +-olive +-olympics +-omega +-omen +-ominous +-omission +-omit +-omnivore +-onboard +-oncoming +-ongoing +-onion +-online +-onlooker +-only +-onscreen +-onset +-onshore +-onslaught +-onstage +-onto +-onward +-onyx +-oops +-ooze +-oozy +-opacity +-opal +-open +-operable +-operate +-operating +-operation +-operative +-operator +-opium +-opossum +-opponent +-oppose +-opposing +-opposite +-oppressed +-oppressor +-opt +-opulently +-osmosis +-other +-otter +-ouch +-ought +-ounce +-outage +-outback +-outbid +-outboard +-outbound +-outbreak +-outburst +-outcast +-outclass +-outcome +-outdated +-outdoors +-outer +-outfield +-outfit +-outflank +-outgoing +-outgrow +-outhouse +-outing +-outlast +-outlet +-outline +-outlook +-outlying +-outmatch +-outmost +-outnumber +-outplayed +-outpost +-outpour +-output +-outrage +-outrank +-outreach +-outright +-outscore +-outsell +-outshine +-outshoot +-outsider +-outskirts +-outsmart +-outsource +-outspoken +-outtakes +-outthink +-outward +-outweigh +-outwit +-oval +-ovary +-oven +-overact +-overall +-overarch +-overbid +-overbill +-overbite +-overblown +-overboard +-overbook +-overbuilt +-overcast +-overcoat +-overcome +-overcook +-overcrowd +-overdraft +-overdrawn +-overdress +-overdrive +-overdue +-overeager +-overeater +-overexert +-overfed +-overfeed +-overfill +-overflow +-overfull +-overgrown +-overhand +-overhang +-overhaul +-overhead +-overhear +-overheat +-overhung +-overjoyed +-overkill +-overlabor +-overlaid +-overlap +-overlay +-overload +-overlook +-overlord +-overlying +-overnight +-overpass +-overpay +-overplant +-overplay +-overpower +-overprice +-overrate +-overreach +-overreact +-override +-overripe +-overrule +-overrun +-overshoot +-overshot +-oversight +-oversized +-oversleep +-oversold +-overspend +-overstate +-overstay +-overstep +-overstock +-overstuff +-oversweet +-overtake +-overthrow +-overtime +-overtly +-overtone +-overture +-overturn +-overuse +-overvalue +-overview +-overwrite +-owl +-oxford +-oxidant +-oxidation +-oxidize +-oxidizing +-oxygen +-oxymoron +-oyster +-ozone +-paced +-pacemaker +-pacific +-pacifier +-pacifism +-pacifist +-pacify +-padded +-padding +-paddle +-paddling +-padlock +-pagan +-pager +-paging +-pajamas +-palace +-palatable +-palm +-palpable +-palpitate +-paltry +-pampered +-pamperer +-pampers +-pamphlet +-panama +-pancake +-pancreas +-panda +-pandemic +-pang +-panhandle +-panic +-panning +-panorama +-panoramic +-panther +-pantomime +-pantry +-pants +-pantyhose +-paparazzi +-papaya +-paper +-paprika +-papyrus +-parabola +-parachute +-parade +-paradox +-paragraph +-parakeet +-paralegal +-paralyses +-paralysis +-paralyze +-paramedic +-parameter +-paramount +-parasail +-parasite +-parasitic +-parcel +-parched +-parchment +-pardon +-parish +-parka +-parking +-parkway +-parlor +-parmesan +-parole +-parrot +-parsley +-parsnip +-partake +-parted +-parting +-partition +-partly +-partner +-partridge +-party +-passable +-passably +-passage +-passcode +-passenger +-passerby +-passing +-passion +-passive +-passivism +-passover +-passport +-password +-pasta +-pasted +-pastel +-pastime +-pastor +-pastrami +-pasture +-pasty +-patchwork +-patchy +-paternal +-paternity +-path +-patience +-patient +-patio +-patriarch +-patriot +-patrol +-patronage +-patronize +-pauper +-pavement +-paver +-pavestone +-pavilion +-paving +-pawing +-payable +-payback +-paycheck +-payday +-payee +-payer +-paying +-payment +-payphone +-payroll +-pebble +-pebbly +-pecan +-pectin +-peculiar +-peddling +-pediatric +-pedicure +-pedigree +-pedometer +-pegboard +-pelican +-pellet +-pelt +-pelvis +-penalize +-penalty +-pencil +-pendant +-pending +-penholder +-penknife +-pennant +-penniless +-penny +-penpal +-pension +-pentagon +-pentagram +-pep +-perceive +-percent +-perch +-percolate +-perennial +-perfected +-perfectly +-perfume +-periscope +-perish +-perjurer +-perjury +-perkiness +-perky +-perm +-peroxide +-perpetual +-perplexed +-persecute +-persevere +-persuaded +-persuader +-pesky +-peso +-pessimism +-pessimist +-pester +-pesticide +-petal +-petite +-petition +-petri +-petroleum +-petted +-petticoat +-pettiness +-petty +-petunia +-phantom +-phobia +-phoenix +-phonebook +-phoney +-phonics +-phoniness +-phony +-phosphate +-photo +-phrase +-phrasing +-placard +-placate +-placidly +-plank +-planner +-plant +-plasma +-plaster +-plastic +-plated +-platform +-plating +-platinum +-platonic +-platter +-platypus +-plausible +-plausibly +-playable +-playback +-player +-playful +-playgroup +-playhouse +-playing +-playlist +-playmaker +-playmate +-playoff +-playpen +-playroom +-playset +-plaything +-playtime +-plaza +-pleading +-pleat +-pledge +-plentiful +-plenty +-plethora +-plexiglas +-pliable +-plod +-plop +-plot +-plow +-ploy +-pluck +-plug +-plunder +-plunging +-plural +-plus +-plutonium +-plywood +-poach +-pod +-poem +-poet +-pogo +-pointed +-pointer +-pointing +-pointless +-pointy +-poise +-poison +-poker +-poking +-polar +-police +-policy +-polio +-polish +-politely +-polka +-polo +-polyester +-polygon +-polygraph +-polymer +-poncho +-pond +-pony +-popcorn +-pope +-poplar +-popper +-poppy +-popsicle +-populace +-popular +-populate +-porcupine +-pork +-porous +-porridge +-portable +-portal +-portfolio +-porthole +-portion +-portly +-portside +-poser +-posh +-posing +-possible +-possibly +-possum +-postage +-postal +-postbox +-postcard +-posted +-poster +-posting +-postnasal +-posture +-postwar +-pouch +-pounce +-pouncing +-pound +-pouring +-pout +-powdered +-powdering +-powdery +-power +-powwow +-pox +-praising +-prance +-prancing +-pranker +-prankish +-prankster +-prayer +-praying +-preacher +-preaching +-preachy +-preamble +-precinct +-precise +-precision +-precook +-precut +-predator +-predefine +-predict +-preface +-prefix +-preflight +-preformed +-pregame +-pregnancy +-pregnant +-preheated +-prelaunch +-prelaw +-prelude +-premiere +-premises +-premium +-prenatal +-preoccupy +-preorder +-prepaid +-prepay +-preplan +-preppy +-preschool +-prescribe +-preseason +-preset +-preshow +-president +-presoak +-press +-presume +-presuming +-preteen +-pretended +-pretender +-pretense +-pretext +-pretty +-pretzel +-prevail +-prevalent +-prevent +-preview +-previous +-prewar +-prewashed +-prideful +-pried +-primal +-primarily +-primary +-primate +-primer +-primp +-princess +-print +-prior +-prism +-prison +-prissy +-pristine +-privacy +-private +-privatize +-prize +-proactive +-probable +-probably +-probation +-probe +-probing +-probiotic +-problem +-procedure +-process +-proclaim +-procreate +-procurer +-prodigal +-prodigy +-produce +-product +-profane +-profanity +-professed +-professor +-profile +-profound +-profusely +-progeny +-prognosis +-program +-progress +-projector +-prologue +-prolonged +-promenade +-prominent +-promoter +-promotion +-prompter +-promptly +-prone +-prong +-pronounce +-pronto +-proofing +-proofread +-proofs +-propeller +-properly +-property +-proponent +-proposal +-propose +-props +-prorate +-protector +-protegee +-proton +-prototype +-protozoan +-protract +-protrude +-proud +-provable +-proved +-proven +-provided +-provider +-providing +-province +-proving +-provoke +-provoking +-provolone +-prowess +-prowler +-prowling +-proximity +-proxy +-prozac +-prude +-prudishly +-prune +-pruning +-pry +-psychic +-public +-publisher +-pucker +-pueblo +-pug +-pull +-pulmonary +-pulp +-pulsate +-pulse +-pulverize +-puma +-pumice +-pummel +-punch +-punctual +-punctuate +-punctured +-pungent +-punisher +-punk +-pupil +-puppet +-puppy +-purchase +-pureblood +-purebred +-purely +-pureness +-purgatory +-purge +-purging +-purifier +-purify +-purist +-puritan +-purity +-purple +-purplish +-purposely +-purr +-purse +-pursuable +-pursuant +-pursuit +-purveyor +-pushcart +-pushchair +-pusher +-pushiness +-pushing +-pushover +-pushpin +-pushup +-pushy +-putdown +-putt +-puzzle +-puzzling +-pyramid +-pyromania +-python +-quack +-quadrant +-quail +-quaintly +-quake +-quaking +-qualified +-qualifier +-qualify +-quality +-qualm +-quantum +-quarrel +-quarry +-quartered +-quarterly +-quarters +-quartet +-quench +-query +-quicken +-quickly +-quickness +-quicksand +-quickstep +-quiet +-quill +-quilt +-quintet +-quintuple +-quirk +-quit +-quiver +-quizzical +-quotable +-quotation +-quote +-rabid +-race +-racing +-racism +-rack +-racoon +-radar +-radial +-radiance +-radiantly +-radiated +-radiation +-radiator +-radio +-radish +-raffle +-raft +-rage +-ragged +-raging +-ragweed +-raider +-railcar +-railing +-railroad +-railway +-raisin +-rake +-raking +-rally +-ramble +-rambling +-ramp +-ramrod +-ranch +-rancidity +-random +-ranged +-ranger +-ranging +-ranked +-ranking +-ransack +-ranting +-rants +-rare +-rarity +-rascal +-rash +-rasping +-ravage +-raven +-ravine +-raving +-ravioli +-ravishing +-reabsorb +-reach +-reacquire +-reaction +-reactive +-reactor +-reaffirm +-ream +-reanalyze +-reappear +-reapply +-reappoint +-reapprove +-rearrange +-rearview +-reason +-reassign +-reassure +-reattach +-reawake +-rebalance +-rebate +-rebel +-rebirth +-reboot +-reborn +-rebound +-rebuff +-rebuild +-rebuilt +-reburial +-rebuttal +-recall +-recant +-recapture +-recast +-recede +-recent +-recess +-recharger +-recipient +-recital +-recite +-reckless +-reclaim +-recliner +-reclining +-recluse +-reclusive +-recognize +-recoil +-recollect +-recolor +-reconcile +-reconfirm +-reconvene +-recopy +-record +-recount +-recoup +-recovery +-recreate +-rectal +-rectangle +-rectified +-rectify +-recycled +-recycler +-recycling +-reemerge +-reenact +-reenter +-reentry +-reexamine +-referable +-referee +-reference +-refill +-refinance +-refined +-refinery +-refining +-refinish +-reflected +-reflector +-reflex +-reflux +-refocus +-refold +-reforest +-reformat +-reformed +-reformer +-reformist +-refract +-refrain +-refreeze +-refresh +-refried +-refueling +-refund +-refurbish +-refurnish +-refusal +-refuse +-refusing +-refutable +-refute +-regain +-regalia +-regally +-reggae +-regime +-region +-register +-registrar +-registry +-regress +-regretful +-regroup +-regular +-regulate +-regulator +-rehab +-reheat +-rehire +-rehydrate +-reimburse +-reissue +-reiterate +-rejoice +-rejoicing +-rejoin +-rekindle +-relapse +-relapsing +-relatable +-related +-relation +-relative +-relax +-relay +-relearn +-release +-relenting +-reliable +-reliably +-reliance +-reliant +-relic +-relieve +-relieving +-relight +-relish +-relive +-reload +-relocate +-relock +-reluctant +-rely +-remake +-remark +-remarry +-rematch +-remedial +-remedy +-remember +-reminder +-remindful +-remission +-remix +-remnant +-remodeler +-remold +-remorse +-remote +-removable +-removal +-removed +-remover +-removing +-rename +-renderer +-rendering +-rendition +-renegade +-renewable +-renewably +-renewal +-renewed +-renounce +-renovate +-renovator +-rentable +-rental +-rented +-renter +-reoccupy +-reoccur +-reopen +-reorder +-repackage +-repacking +-repaint +-repair +-repave +-repaying +-repayment +-repeal +-repeated +-repeater +-repent +-rephrase +-replace +-replay +-replica +-reply +-reporter +-repose +-repossess +-repost +-repressed +-reprimand +-reprint +-reprise +-reproach +-reprocess +-reproduce +-reprogram +-reps +-reptile +-reptilian +-repugnant +-repulsion +-repulsive +-repurpose +-reputable +-reputably +-request +-require +-requisite +-reroute +-rerun +-resale +-resample +-rescuer +-reseal +-research +-reselect +-reseller +-resemble +-resend +-resent +-reset +-reshape +-reshoot +-reshuffle +-residence +-residency +-resident +-residual +-residue +-resigned +-resilient +-resistant +-resisting +-resize +-resolute +-resolved +-resonant +-resonate +-resort +-resource +-respect +-resubmit +-result +-resume +-resupply +-resurface +-resurrect +-retail +-retainer +-retaining +-retake +-retaliate +-retention +-rethink +-retinal +-retired +-retiree +-retiring +-retold +-retool +-retorted +-retouch +-retrace +-retract +-retrain +-retread +-retreat +-retrial +-retrieval +-retriever +-retry +-return +-retying +-retype +-reunion +-reunite +-reusable +-reuse +-reveal +-reveler +-revenge +-revenue +-reverb +-revered +-reverence +-reverend +-reversal +-reverse +-reversing +-reversion +-revert +-revisable +-revise +-revision +-revisit +-revivable +-revival +-reviver +-reviving +-revocable +-revoke +-revolt +-revolver +-revolving +-reward +-rewash +-rewind +-rewire +-reword +-rework +-rewrap +-rewrite +-rhyme +-ribbon +-ribcage +-rice +-riches +-richly +-richness +-rickety +-ricotta +-riddance +-ridden +-ride +-riding +-rifling +-rift +-rigging +-rigid +-rigor +-rimless +-rimmed +-rind +-rink +-rinse +-rinsing +-riot +-ripcord +-ripeness +-ripening +-ripping +-ripple +-rippling +-riptide +-rise +-rising +-risk +-risotto +-ritalin +-ritzy +-rival +-riverbank +-riverbed +-riverboat +-riverside +-riveter +-riveting +-roamer +-roaming +-roast +-robbing +-robe +-robin +-robotics +-robust +-rockband +-rocker +-rocket +-rockfish +-rockiness +-rocking +-rocklike +-rockslide +-rockstar +-rocky +-rogue +-roman +-romp +-rope +-roping +-roster +-rosy +-rotten +-rotting +-rotunda +-roulette +-rounding +-roundish +-roundness +-roundup +-roundworm +-routine +-routing +-rover +-roving +-royal +-rubbed +-rubber +-rubbing +-rubble +-rubdown +-ruby +-ruckus +-rudder +-rug +-ruined +-rule +-rumble +-rumbling +-rummage +-rumor +-runaround +-rundown +-runner +-running +-runny +-runt +-runway +-rupture +-rural +-ruse +-rush +-rust +-rut +-sabbath +-sabotage +-sacrament +-sacred +-sacrifice +-sadden +-saddlebag +-saddled +-saddling +-sadly +-sadness +-safari +-safeguard +-safehouse +-safely +-safeness +-saffron +-saga +-sage +-sagging +-saggy +-said +-saint +-sake +-salad +-salami +-salaried +-salary +-saline +-salon +-saloon +-salsa +-salt +-salutary +-salute +-salvage +-salvaging +-salvation +-same +-sample +-sampling +-sanction +-sanctity +-sanctuary +-sandal +-sandbag +-sandbank +-sandbar +-sandblast +-sandbox +-sanded +-sandfish +-sanding +-sandlot +-sandpaper +-sandpit +-sandstone +-sandstorm +-sandworm +-sandy +-sanitary +-sanitizer +-sank +-santa +-sapling +-sappiness +-sappy +-sarcasm +-sarcastic +-sardine +-sash +-sasquatch +-sassy +-satchel +-satiable +-satin +-satirical +-satisfied +-satisfy +-saturate +-saturday +-sauciness +-saucy +-sauna +-savage +-savanna +-saved +-savings +-savior +-savor +-saxophone +-say +-scabbed +-scabby +-scalded +-scalding +-scale +-scaling +-scallion +-scallop +-scalping +-scam +-scandal +-scanner +-scanning +-scant +-scapegoat +-scarce +-scarcity +-scarecrow +-scared +-scarf +-scarily +-scariness +-scarring +-scary +-scavenger +-scenic +-schedule +-schematic +-scheme +-scheming +-schilling +-schnapps +-scholar +-science +-scientist +-scion +-scoff +-scolding +-scone +-scoop +-scooter +-scope +-scorch +-scorebook +-scorecard +-scored +-scoreless +-scorer +-scoring +-scorn +-scorpion +-scotch +-scoundrel +-scoured +-scouring +-scouting +-scouts +-scowling +-scrabble +-scraggly +-scrambled +-scrambler +-scrap +-scratch +-scrawny +-screen +-scribble +-scribe +-scribing +-scrimmage +-script +-scroll +-scrooge +-scrounger +-scrubbed +-scrubber +-scruffy +-scrunch +-scrutiny +-scuba +-scuff +-sculptor +-sculpture +-scurvy +-scuttle +-secluded +-secluding +-seclusion +-second +-secrecy +-secret +-sectional +-sector +-secular +-securely +-security +-sedan +-sedate +-sedation +-sedative +-sediment +-seduce +-seducing +-segment +-seismic +-seizing +-seldom +-selected +-selection +-selective +-selector +-self +-seltzer +-semantic +-semester +-semicolon +-semifinal +-seminar +-semisoft +-semisweet +-senate +-senator +-send +-senior +-senorita +-sensation +-sensitive +-sensitize +-sensually +-sensuous +-sepia +-september +-septic +-septum +-sequel +-sequence +-sequester +-series +-sermon +-serotonin +-serpent +-serrated +-serve +-service +-serving +-sesame +-sessions +-setback +-setting +-settle +-settling +-setup +-sevenfold +-seventeen +-seventh +-seventy +-severity +-shabby +-shack +-shaded +-shadily +-shadiness +-shading +-shadow +-shady +-shaft +-shakable +-shakily +-shakiness +-shaking +-shaky +-shale +-shallot +-shallow +-shame +-shampoo +-shamrock +-shank +-shanty +-shape +-shaping +-share +-sharpener +-sharper +-sharpie +-sharply +-sharpness +-shawl +-sheath +-shed +-sheep +-sheet +-shelf +-shell +-shelter +-shelve +-shelving +-sherry +-shield +-shifter +-shifting +-shiftless +-shifty +-shimmer +-shimmy +-shindig +-shine +-shingle +-shininess +-shining +-shiny +-ship +-shirt +-shivering +-shock +-shone +-shoplift +-shopper +-shopping +-shoptalk +-shore +-shortage +-shortcake +-shortcut +-shorten +-shorter +-shorthand +-shortlist +-shortly +-shortness +-shorts +-shortwave +-shorty +-shout +-shove +-showbiz +-showcase +-showdown +-shower +-showgirl +-showing +-showman +-shown +-showoff +-showpiece +-showplace +-showroom +-showy +-shrank +-shrapnel +-shredder +-shredding +-shrewdly +-shriek +-shrill +-shrimp +-shrine +-shrink +-shrivel +-shrouded +-shrubbery +-shrubs +-shrug +-shrunk +-shucking +-shudder +-shuffle +-shuffling +-shun +-shush +-shut +-shy +-siamese +-siberian +-sibling +-siding +-sierra +-siesta +-sift +-sighing +-silenced +-silencer +-silent +-silica +-silicon +-silk +-silliness +-silly +-silo +-silt +-silver +-similarly +-simile +-simmering +-simple +-simplify +-simply +-sincere +-sincerity +-singer +-singing +-single +-singular +-sinister +-sinless +-sinner +-sinuous +-sip +-siren +-sister +-sitcom +-sitter +-sitting +-situated +-situation +-sixfold +-sixteen +-sixth +-sixties +-sixtieth +-sixtyfold +-sizable +-sizably +-size +-sizing +-sizzle +-sizzling +-skater +-skating +-skedaddle +-skeletal +-skeleton +-skeptic +-sketch +-skewed +-skewer +-skid +-skied +-skier +-skies +-skiing +-skilled +-skillet +-skillful +-skimmed +-skimmer +-skimming +-skimpily +-skincare +-skinhead +-skinless +-skinning +-skinny +-skintight +-skipper +-skipping +-skirmish +-skirt +-skittle +-skydiver +-skylight +-skyline +-skype +-skyrocket +-skyward +-slab +-slacked +-slacker +-slacking +-slackness +-slacks +-slain +-slam +-slander +-slang +-slapping +-slapstick +-slashed +-slashing +-slate +-slather +-slaw +-sled +-sleek +-sleep +-sleet +-sleeve +-slept +-sliceable +-sliced +-slicer +-slicing +-slick +-slider +-slideshow +-sliding +-slighted +-slighting +-slightly +-slimness +-slimy +-slinging +-slingshot +-slinky +-slip +-slit +-sliver +-slobbery +-slogan +-sloped +-sloping +-sloppily +-sloppy +-slot +-slouching +-slouchy +-sludge +-slug +-slum +-slurp +-slush +-sly +-small +-smartly +-smartness +-smasher +-smashing +-smashup +-smell +-smelting +-smile +-smilingly +-smirk +-smite +-smith +-smitten +-smock +-smog +-smoked +-smokeless +-smokiness +-smoking +-smoky +-smolder +-smooth +-smother +-smudge +-smudgy +-smuggler +-smuggling +-smugly +-smugness +-snack +-snagged +-snaking +-snap +-snare +-snarl +-snazzy +-sneak +-sneer +-sneeze +-sneezing +-snide +-sniff +-snippet +-snipping +-snitch +-snooper +-snooze +-snore +-snoring +-snorkel +-snort +-snout +-snowbird +-snowboard +-snowbound +-snowcap +-snowdrift +-snowdrop +-snowfall +-snowfield +-snowflake +-snowiness +-snowless +-snowman +-snowplow +-snowshoe +-snowstorm +-snowsuit +-snowy +-snub +-snuff +-snuggle +-snugly +-snugness +-speak +-spearfish +-spearhead +-spearman +-spearmint +-species +-specimen +-specked +-speckled +-specks +-spectacle +-spectator +-spectrum +-speculate +-speech +-speed +-spellbind +-speller +-spelling +-spendable +-spender +-spending +-spent +-spew +-sphere +-spherical +-sphinx +-spider +-spied +-spiffy +-spill +-spilt +-spinach +-spinal +-spindle +-spinner +-spinning +-spinout +-spinster +-spiny +-spiral +-spirited +-spiritism +-spirits +-spiritual +-splashed +-splashing +-splashy +-splatter +-spleen +-splendid +-splendor +-splice +-splicing +-splinter +-splotchy +-splurge +-spoilage +-spoiled +-spoiler +-spoiling +-spoils +-spoken +-spokesman +-sponge +-spongy +-sponsor +-spoof +-spookily +-spooky +-spool +-spoon +-spore +-sporting +-sports +-sporty +-spotless +-spotlight +-spotted +-spotter +-spotting +-spotty +-spousal +-spouse +-spout +-sprain +-sprang +-sprawl +-spray +-spree +-sprig +-spring +-sprinkled +-sprinkler +-sprint +-sprite +-sprout +-spruce +-sprung +-spry +-spud +-spur +-sputter +-spyglass +-squabble +-squad +-squall +-squander +-squash +-squatted +-squatter +-squatting +-squeak +-squealer +-squealing +-squeamish +-squeegee +-squeeze +-squeezing +-squid +-squiggle +-squiggly +-squint +-squire +-squirt +-squishier +-squishy +-stability +-stabilize +-stable +-stack +-stadium +-staff +-stage +-staging +-stagnant +-stagnate +-stainable +-stained +-staining +-stainless +-stalemate +-staleness +-stalling +-stallion +-stamina +-stammer +-stamp +-stand +-stank +-staple +-stapling +-starboard +-starch +-stardom +-stardust +-starfish +-stargazer +-staring +-stark +-starless +-starlet +-starlight +-starlit +-starring +-starry +-starship +-starter +-starting +-startle +-startling +-startup +-starved +-starving +-stash +-state +-static +-statistic +-statue +-stature +-status +-statute +-statutory +-staunch +-stays +-steadfast +-steadier +-steadily +-steadying +-steam +-steed +-steep +-steerable +-steering +-steersman +-stegosaur +-stellar +-stem +-stench +-stencil +-step +-stereo +-sterile +-sterility +-sterilize +-sterling +-sternness +-sternum +-stew +-stick +-stiffen +-stiffly +-stiffness +-stifle +-stifling +-stillness +-stilt +-stimulant +-stimulate +-stimuli +-stimulus +-stinger +-stingily +-stinging +-stingray +-stingy +-stinking +-stinky +-stipend +-stipulate +-stir +-stitch +-stock +-stoic +-stoke +-stole +-stomp +-stonewall +-stoneware +-stonework +-stoning +-stony +-stood +-stooge +-stool +-stoop +-stoplight +-stoppable +-stoppage +-stopped +-stopper +-stopping +-stopwatch +-storable +-storage +-storeroom +-storewide +-storm +-stout +-stove +-stowaway +-stowing +-straddle +-straggler +-strained +-strainer +-straining +-strangely +-stranger +-strangle +-strategic +-strategy +-stratus +-straw +-stray +-streak +-stream +-street +-strength +-strenuous +-strep +-stress +-stretch +-strewn +-stricken +-strict +-stride +-strife +-strike +-striking +-strive +-striving +-strobe +-strode +-stroller +-strongbox +-strongly +-strongman +-struck +-structure +-strudel +-struggle +-strum +-strung +-strut +-stubbed +-stubble +-stubbly +-stubborn +-stucco +-stuck +-student +-studied +-studio +-study +-stuffed +-stuffing +-stuffy +-stumble +-stumbling +-stump +-stung +-stunned +-stunner +-stunning +-stunt +-stupor +-sturdily +-sturdy +-styling +-stylishly +-stylist +-stylized +-stylus +-suave +-subarctic +-subatomic +-subdivide +-subdued +-subduing +-subfloor +-subgroup +-subheader +-subject +-sublease +-sublet +-sublevel +-sublime +-submarine +-submerge +-submersed +-submitter +-subpanel +-subpar +-subplot +-subprime +-subscribe +-subscript +-subsector +-subside +-subsiding +-subsidize +-subsidy +-subsoil +-subsonic +-substance +-subsystem +-subtext +-subtitle +-subtly +-subtotal +-subtract +-subtype +-suburb +-subway +-subwoofer +-subzero +-succulent +-such +-suction +-sudden +-sudoku +-suds +-sufferer +-suffering +-suffice +-suffix +-suffocate +-suffrage +-sugar +-suggest +-suing +-suitable +-suitably +-suitcase +-suitor +-sulfate +-sulfide +-sulfite +-sulfur +-sulk +-sullen +-sulphate +-sulphuric +-sultry +-superbowl +-superglue +-superhero +-superior +-superjet +-superman +-supermom +-supernova +-supervise +-supper +-supplier +-supply +-support +-supremacy +-supreme +-surcharge +-surely +-sureness +-surface +-surfacing +-surfboard +-surfer +-surgery +-surgical +-surging +-surname +-surpass +-surplus +-surprise +-surreal +-surrender +-surrogate +-surround +-survey +-survival +-survive +-surviving +-survivor +-sushi +-suspect +-suspend +-suspense +-sustained +-sustainer +-swab +-swaddling +-swagger +-swampland +-swan +-swapping +-swarm +-sway +-swear +-sweat +-sweep +-swell +-swept +-swerve +-swifter +-swiftly +-swiftness +-swimmable +-swimmer +-swimming +-swimsuit +-swimwear +-swinger +-swinging +-swipe +-swirl +-switch +-swivel +-swizzle +-swooned +-swoop +-swoosh +-swore +-sworn +-swung +-sycamore +-sympathy +-symphonic +-symphony +-symptom +-synapse +-syndrome +-synergy +-synopses +-synopsis +-synthesis +-synthetic +-syrup +-system +-t-shirt +-tabasco +-tabby +-tableful +-tables +-tablet +-tableware +-tabloid +-tackiness +-tacking +-tackle +-tackling +-tacky +-taco +-tactful +-tactical +-tactics +-tactile +-tactless +-tadpole +-taekwondo +-tag +-tainted +-take +-taking +-talcum +-talisman +-tall +-talon +-tamale +-tameness +-tamer +-tamper +-tank +-tanned +-tannery +-tanning +-tantrum +-tapeless +-tapered +-tapering +-tapestry +-tapioca +-tapping +-taps +-tarantula +-target +-tarmac +-tarnish +-tarot +-tartar +-tartly +-tartness +-task +-tassel +-taste +-tastiness +-tasting +-tasty +-tattered +-tattle +-tattling +-tattoo +-taunt +-tavern +-thank +-that +-thaw +-theater +-theatrics +-thee +-theft +-theme +-theology +-theorize +-thermal +-thermos +-thesaurus +-these +-thesis +-thespian +-thicken +-thicket +-thickness +-thieving +-thievish +-thigh +-thimble +-thing +-think +-thinly +-thinner +-thinness +-thinning +-thirstily +-thirsting +-thirsty +-thirteen +-thirty +-thong +-thorn +-those +-thousand +-thrash +-thread +-threaten +-threefold +-thrift +-thrill +-thrive +-thriving +-throat +-throbbing +-throng +-throttle +-throwaway +-throwback +-thrower +-throwing +-thud +-thumb +-thumping +-thursday +-thus +-thwarting +-thyself +-tiara +-tibia +-tidal +-tidbit +-tidiness +-tidings +-tidy +-tiger +-tighten +-tightly +-tightness +-tightrope +-tightwad +-tigress +-tile +-tiling +-till +-tilt +-timid +-timing +-timothy +-tinderbox +-tinfoil +-tingle +-tingling +-tingly +-tinker +-tinkling +-tinsel +-tinsmith +-tint +-tinwork +-tiny +-tipoff +-tipped +-tipper +-tipping +-tiptoeing +-tiptop +-tiring +-tissue +-trace +-tracing +-track +-traction +-tractor +-trade +-trading +-tradition +-traffic +-tragedy +-trailing +-trailside +-train +-traitor +-trance +-tranquil +-transfer +-transform +-translate +-transpire +-transport +-transpose +-trapdoor +-trapeze +-trapezoid +-trapped +-trapper +-trapping +-traps +-trash +-travel +-traverse +-travesty +-tray +-treachery +-treading +-treadmill +-treason +-treat +-treble +-tree +-trekker +-tremble +-trembling +-tremor +-trench +-trend +-trespass +-triage +-trial +-triangle +-tribesman +-tribunal +-tribune +-tributary +-tribute +-triceps +-trickery +-trickily +-tricking +-trickle +-trickster +-tricky +-tricolor +-tricycle +-trident +-tried +-trifle +-trifocals +-trillion +-trilogy +-trimester +-trimmer +-trimming +-trimness +-trinity +-trio +-tripod +-tripping +-triumph +-trivial +-trodden +-trolling +-trombone +-trophy +-tropical +-tropics +-trouble +-troubling +-trough +-trousers +-trout +-trowel +-truce +-truck +-truffle +-trump +-trunks +-trustable +-trustee +-trustful +-trusting +-trustless +-truth +-try +-tubby +-tubeless +-tubular +-tucking +-tuesday +-tug +-tuition +-tulip +-tumble +-tumbling +-tummy +-turban +-turbine +-turbofan +-turbojet +-turbulent +-turf +-turkey +-turmoil +-turret +-turtle +-tusk +-tutor +-tutu +-tux +-tweak +-tweed +-tweet +-tweezers +-twelve +-twentieth +-twenty +-twerp +-twice +-twiddle +-twiddling +-twig +-twilight +-twine +-twins +-twirl +-twistable +-twisted +-twister +-twisting +-twisty +-twitch +-twitter +-tycoon +-tying +-tyke +-udder +-ultimate +-ultimatum +-ultra +-umbilical +-umbrella +-umpire +-unabashed +-unable +-unadorned +-unadvised +-unafraid +-unaired +-unaligned +-unaltered +-unarmored +-unashamed +-unaudited +-unawake +-unaware +-unbaked +-unbalance +-unbeaten +-unbend +-unbent +-unbiased +-unbitten +-unblended +-unblessed +-unblock +-unbolted +-unbounded +-unboxed +-unbraided +-unbridle +-unbroken +-unbuckled +-unbundle +-unburned +-unbutton +-uncanny +-uncapped +-uncaring +-uncertain +-unchain +-unchanged +-uncharted +-uncheck +-uncivil +-unclad +-unclaimed +-unclamped +-unclasp +-uncle +-unclip +-uncloak +-unclog +-unclothed +-uncoated +-uncoiled +-uncolored +-uncombed +-uncommon +-uncooked +-uncork +-uncorrupt +-uncounted +-uncouple +-uncouth +-uncover +-uncross +-uncrown +-uncrushed +-uncured +-uncurious +-uncurled +-uncut +-undamaged +-undated +-undaunted +-undead +-undecided +-undefined +-underage +-underarm +-undercoat +-undercook +-undercut +-underdog +-underdone +-underfed +-underfeed +-underfoot +-undergo +-undergrad +-underhand +-underline +-underling +-undermine +-undermost +-underpaid +-underpass +-underpay +-underrate +-undertake +-undertone +-undertook +-undertow +-underuse +-underwear +-underwent +-underwire +-undesired +-undiluted +-undivided +-undocked +-undoing +-undone +-undrafted +-undress +-undrilled +-undusted +-undying +-unearned +-unearth +-unease +-uneasily +-uneasy +-uneatable +-uneaten +-unedited +-unelected +-unending +-unengaged +-unenvied +-unequal +-unethical +-uneven +-unexpired +-unexposed +-unfailing +-unfair +-unfasten +-unfazed +-unfeeling +-unfiled +-unfilled +-unfitted +-unfitting +-unfixable +-unfixed +-unflawed +-unfocused +-unfold +-unfounded +-unframed +-unfreeze +-unfrosted +-unfrozen +-unfunded +-unglazed +-ungloved +-unglue +-ungodly +-ungraded +-ungreased +-unguarded +-unguided +-unhappily +-unhappy +-unharmed +-unhealthy +-unheard +-unhearing +-unheated +-unhelpful +-unhidden +-unhinge +-unhitched +-unholy +-unhook +-unicorn +-unicycle +-unified +-unifier +-uniformed +-uniformly +-unify +-unimpeded +-uninjured +-uninstall +-uninsured +-uninvited +-union +-uniquely +-unisexual +-unison +-unissued +-unit +-universal +-universe +-unjustly +-unkempt +-unkind +-unknotted +-unknowing +-unknown +-unlaced +-unlatch +-unlawful +-unleaded +-unlearned +-unleash +-unless +-unleveled +-unlighted +-unlikable +-unlimited +-unlined +-unlinked +-unlisted +-unlit +-unlivable +-unloaded +-unloader +-unlocked +-unlocking +-unlovable +-unloved +-unlovely +-unloving +-unluckily +-unlucky +-unmade +-unmanaged +-unmanned +-unmapped +-unmarked +-unmasked +-unmasking +-unmatched +-unmindful +-unmixable +-unmixed +-unmolded +-unmoral +-unmovable +-unmoved +-unmoving +-unnamable +-unnamed +-unnatural +-unneeded +-unnerve +-unnerving +-unnoticed +-unopened +-unopposed +-unpack +-unpadded +-unpaid +-unpainted +-unpaired +-unpaved +-unpeeled +-unpicked +-unpiloted +-unpinned +-unplanned +-unplanted +-unpleased +-unpledged +-unplowed +-unplug +-unpopular +-unproven +-unquote +-unranked +-unrated +-unraveled +-unreached +-unread +-unreal +-unreeling +-unrefined +-unrelated +-unrented +-unrest +-unretired +-unrevised +-unrigged +-unripe +-unrivaled +-unroasted +-unrobed +-unroll +-unruffled +-unruly +-unrushed +-unsaddle +-unsafe +-unsaid +-unsalted +-unsaved +-unsavory +-unscathed +-unscented +-unscrew +-unsealed +-unseated +-unsecured +-unseeing +-unseemly +-unseen +-unselect +-unselfish +-unsent +-unsettled +-unshackle +-unshaken +-unshaved +-unshaven +-unsheathe +-unshipped +-unsightly +-unsigned +-unskilled +-unsliced +-unsmooth +-unsnap +-unsocial +-unsoiled +-unsold +-unsolved +-unsorted +-unspoiled +-unspoken +-unstable +-unstaffed +-unstamped +-unsteady +-unsterile +-unstirred +-unstitch +-unstopped +-unstuck +-unstuffed +-unstylish +-unsubtle +-unsubtly +-unsuited +-unsure +-unsworn +-untagged +-untainted +-untaken +-untamed +-untangled +-untapped +-untaxed +-unthawed +-unthread +-untidy +-untie +-until +-untimed +-untimely +-untitled +-untoasted +-untold +-untouched +-untracked +-untrained +-untreated +-untried +-untrimmed +-untrue +-untruth +-unturned +-untwist +-untying +-unusable +-unused +-unusual +-unvalued +-unvaried +-unvarying +-unveiled +-unveiling +-unvented +-unviable +-unvisited +-unvocal +-unwanted +-unwarlike +-unwary +-unwashed +-unwatched +-unweave +-unwed +-unwelcome +-unwell +-unwieldy +-unwilling +-unwind +-unwired +-unwitting +-unwomanly +-unworldly +-unworn +-unworried +-unworthy +-unwound +-unwoven +-unwrapped +-unwritten +-unzip +-upbeat +-upchuck +-upcoming +-upcountry +-update +-upfront +-upgrade +-upheaval +-upheld +-uphill +-uphold +-uplifted +-uplifting +-upload +-upon +-upper +-upright +-uprising +-upriver +-uproar +-uproot +-upscale +-upside +-upstage +-upstairs +-upstart +-upstate +-upstream +-upstroke +-upswing +-uptake +-uptight +-uptown +-upturned +-upward +-upwind +-uranium +-urban +-urchin +-urethane +-urgency +-urgent +-urging +-urologist +-urology +-usable +-usage +-useable +-used +-uselessly +-user +-usher +-usual +-utensil +-utility +-utilize +-utmost +-utopia +-utter +-vacancy +-vacant +-vacate +-vacation +-vagabond +-vagrancy +-vagrantly +-vaguely +-vagueness +-valiant +-valid +-valium +-valley +-valuables +-value +-vanilla +-vanish +-vanity +-vanquish +-vantage +-vaporizer +-variable +-variably +-varied +-variety +-various +-varmint +-varnish +-varsity +-varying +-vascular +-vaseline +-vastly +-vastness +-veal +-vegan +-veggie +-vehicular +-velcro +-velocity +-velvet +-vendetta +-vending +-vendor +-veneering +-vengeful +-venomous +-ventricle +-venture +-venue +-venus +-verbalize +-verbally +-verbose +-verdict +-verify +-verse +-version +-versus +-vertebrae +-vertical +-vertigo +-very +-vessel +-vest +-veteran +-veto +-vexingly +-viability +-viable +-vibes +-vice +-vicinity +-victory +-video +-viewable +-viewer +-viewing +-viewless +-viewpoint +-vigorous +-village +-villain +-vindicate +-vineyard +-vintage +-violate +-violation +-violator +-violet +-violin +-viper +-viral +-virtual +-virtuous +-virus +-visa +-viscosity +-viscous +-viselike +-visible +-visibly +-vision +-visiting +-visitor +-visor +-vista +-vitality +-vitalize +-vitally +-vitamins +-vivacious +-vividly +-vividness +-vixen +-vocalist +-vocalize +-vocally +-vocation +-voice +-voicing +-void +-volatile +-volley +-voltage +-volumes +-voter +-voting +-voucher +-vowed +-vowel +-voyage +-wackiness +-wad +-wafer +-waffle +-waged +-wager +-wages +-waggle +-wagon +-wake +-waking +-walk +-walmart +-walnut +-walrus +-waltz +-wand +-wannabe +-wanted +-wanting +-wasabi +-washable +-washbasin +-washboard +-washbowl +-washcloth +-washday +-washed +-washer +-washhouse +-washing +-washout +-washroom +-washstand +-washtub +-wasp +-wasting +-watch +-water +-waviness +-waving +-wavy +-whacking +-whacky +-wham +-wharf +-wheat +-whenever +-whiff +-whimsical +-whinny +-whiny +-whisking +-whoever +-whole +-whomever +-whoopee +-whooping +-whoops +-why +-wick +-widely +-widen +-widget +-widow +-width +-wieldable +-wielder +-wife +-wifi +-wikipedia +-wildcard +-wildcat +-wilder +-wildfire +-wildfowl +-wildland +-wildlife +-wildly +-wildness +-willed +-willfully +-willing +-willow +-willpower +-wilt +-wimp +-wince +-wincing +-wind +-wing +-winking +-winner +-winnings +-winter +-wipe +-wired +-wireless +-wiring +-wiry +-wisdom +-wise +-wish +-wisplike +-wispy +-wistful +-wizard +-wobble +-wobbling +-wobbly +-wok +-wolf +-wolverine +-womanhood +-womankind +-womanless +-womanlike +-womanly +-womb +-woof +-wooing +-wool +-woozy +-word +-work +-worried +-worrier +-worrisome +-worry +-worsening +-worshiper +-worst +-wound +-woven +-wow +-wrangle +-wrath +-wreath +-wreckage +-wrecker +-wrecking +-wrench +-wriggle +-wriggly +-wrinkle +-wrinkly +-wrist +-writing +-written +-wrongdoer +-wronged +-wrongful +-wrongly +-wrongness +-wrought +-xbox +-xerox +-yahoo +-yam +-yanking +-yapping +-yard +-yarn +-yeah +-yearbook +-yearling +-yearly +-yearning +-yeast +-yelling +-yelp +-yen +-yesterday +-yiddish +-yield +-yin +-yippee +-yo-yo +-yodel +-yoga +-yogurt +-yonder +-yoyo +-yummy +-zap +-zealous +-zebra +-zen +-zeppelin +-zero +-zestfully +-zesty +-zigzagged +-zipfile +-zipping +-zippy +-zips +-zit +-zodiac +-zombie +-zone +-zoning +-zookeeper +-zoologist +-zoology +-zoom +diff -urNr keepassxc-2.6.4-orig/snap/local/launchers/gtk3-env-launch keepassxc-2.6.4-patched/snap/local/launchers/gtk3-env-launch +--- keepassxc-2.6.4-orig/snap/local/launchers/gtk3-env-launch 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/snap/local/launchers/gtk3-env-launch 1970-01-01 01:00:00.000000000 +0100 +@@ -1,14 +0,0 @@ +-#!/usr/bin/env bash +-# This is the maintainence launcher for the snap, make necessary runtime environment changes to make the snap work here. You may also insert security confinement/deprecation/obsoletion notice of the snap here. +- +-set \ +- -o errexit \ +- -o errtrace \ +- -o nounset \ +- -o pipefail +- +-# gtk-common-themes support +-export QT_QPA_PLATFORMTHEME=gtk3 +- +-# Finally run the next part of the command chain +-exec "${@}" +diff -urNr keepassxc-2.6.4-orig/snap/local/launchers/README.md keepassxc-2.6.4-patched/snap/local/launchers/README.md +--- keepassxc-2.6.4-orig/snap/local/launchers/README.md 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/snap/local/launchers/README.md 1970-01-01 01:00:00.000000000 +0100 +@@ -1,11 +0,0 @@ +-# /snap/local/launchers +-Here are the launchers, or wrapper programs to deal with some runtime-fixable problems for the snapped applications, like setting proper environmental variables in snap. +- +-In convention launchers are named _something_-launch, for dealing certain problem with _something_, and usually can be called in a stacked manner to consolidate their modifications. +- +-```yaml +-apps: +- _app_name_: +- command: foo-launch bar-launch _app_command_ +-``` +- +diff -urNr keepassxc-2.6.4-orig/sonar-project.properties keepassxc-2.6.4-patched/sonar-project.properties +--- keepassxc-2.6.4-orig/sonar-project.properties 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/sonar-project.properties 1970-01-01 01:00:00.000000000 +0100 +@@ -1,18 +0,0 @@ +-# https://about.sonarcloud.io/get-started/ +-# Run the SonarCloud tools with the follow parameters: +-# Run in the cmake build directory after cmake: build-wrapper-[platform]-x86-64 --out-dir bw-output make clean all +-# Run in the project root directory: sonar-scanner.bat -Dsonar.cfamily.build-wrapper-output=build/bw-output -Dsonar.cfamily.gcov.reportsPath=build -Dsonar.login=[AUTH_TOKEN] +- +-# required metadata +-sonar.projectKey=keepassxc +-sonar.organization=droidmonkey-github +-sonar.projectName=keepassxc +-sonar.host.url=https://sonarcloud.io +- +-# path to source directories (required) +-sonar.sources=src +-sonar.tests=tests +- +-sonar.cfamily.threads=2 +- +-sonar.exclusions=**/zxcvbn/* +diff -urNr keepassxc-2.6.4-orig/src/autotype/AutoTypeAction.cpp keepassxc-2.6.4-patched/src/autotype/AutoTypeAction.cpp +--- keepassxc-2.6.4-orig/src/autotype/AutoTypeAction.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/autotype/AutoTypeAction.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,95 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "AutoTypeAction.h" +- +-#include "core/Tools.h" +- +-AutoTypeChar::AutoTypeChar(const QChar& character) +- : character(character) +-{ +-} +- +-AutoTypeAction* AutoTypeChar::clone() +-{ +- return new AutoTypeChar(character); +-} +- +-void AutoTypeChar::accept(AutoTypeExecutor* executor) +-{ +- executor->execChar(this); +-} +- +-AutoTypeKey::AutoTypeKey(Qt::Key key) +- : key(key) +-{ +-} +- +-AutoTypeAction* AutoTypeKey::clone() +-{ +- return new AutoTypeKey(key); +-} +- +-void AutoTypeKey::accept(AutoTypeExecutor* executor) +-{ +- executor->execKey(this); +-} +- +-AutoTypeDelay::AutoTypeDelay(int delayMs) +- : delayMs(delayMs) +-{ +-} +- +-AutoTypeAction* AutoTypeDelay::clone() +-{ +- return new AutoTypeDelay(delayMs); +-} +- +-void AutoTypeDelay::accept(AutoTypeExecutor* executor) +-{ +- executor->execDelay(this); +-} +- +-AutoTypeClearField::AutoTypeClearField() +-{ +-} +- +-AutoTypeAction* AutoTypeClearField::clone() +-{ +- return new AutoTypeClearField(); +-} +- +-void AutoTypeClearField::accept(AutoTypeExecutor* executor) +-{ +- executor->execClearField(this); +-} +- +-void AutoTypeExecutor::execDelay(AutoTypeDelay* action) +-{ +- Tools::wait(action->delayMs); +-} +- +-void AutoTypeExecutor::execClearField(AutoTypeClearField* action) +-{ +- Q_UNUSED(action); +-} +- +-AutoTypeAction::~AutoTypeAction() +-{ +- // This makes sure that AutoTypeAction's vtable is placed +- // in this translation unit. +-} +diff -urNr keepassxc-2.6.4-orig/src/autotype/AutoTypeAction.h keepassxc-2.6.4-patched/src/autotype/AutoTypeAction.h +--- keepassxc-2.6.4-orig/src/autotype/AutoTypeAction.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/autotype/AutoTypeAction.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,87 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_AUTOTYPEACTION_H +-#define KEEPASSX_AUTOTYPEACTION_H +- +-#include +-#include +-#include +- +-#include "core/Global.h" +- +-class AutoTypeExecutor; +- +-class KEEPASSX_EXPORT AutoTypeAction +-{ +-public: +- virtual AutoTypeAction* clone() = 0; +- virtual void accept(AutoTypeExecutor* executor) = 0; +- virtual ~AutoTypeAction(); +-}; +- +-class KEEPASSX_EXPORT AutoTypeChar : public AutoTypeAction +-{ +-public: +- explicit AutoTypeChar(const QChar& character); +- AutoTypeAction* clone() override; +- void accept(AutoTypeExecutor* executor) override; +- +- const QChar character; +-}; +- +-class KEEPASSX_EXPORT AutoTypeKey : public AutoTypeAction +-{ +-public: +- explicit AutoTypeKey(Qt::Key key); +- AutoTypeAction* clone() override; +- void accept(AutoTypeExecutor* executor) override; +- +- const Qt::Key key; +-}; +- +-class KEEPASSX_EXPORT AutoTypeDelay : public AutoTypeAction +-{ +-public: +- explicit AutoTypeDelay(int delayMs); +- AutoTypeAction* clone() override; +- void accept(AutoTypeExecutor* executor) override; +- +- const int delayMs; +-}; +- +-class KEEPASSX_EXPORT AutoTypeClearField : public AutoTypeAction +-{ +-public: +- AutoTypeClearField(); +- AutoTypeAction* clone() override; +- void accept(AutoTypeExecutor* executor) override; +-}; +- +-class KEEPASSX_EXPORT AutoTypeExecutor +-{ +-public: +- virtual ~AutoTypeExecutor() +- { +- } +- virtual void execChar(AutoTypeChar* action) = 0; +- virtual void execKey(AutoTypeKey* action) = 0; +- virtual void execDelay(AutoTypeDelay* action); +- virtual void execClearField(AutoTypeClearField* action); +-}; +- +-#endif // KEEPASSX_AUTOTYPEACTION_H +diff -urNr keepassxc-2.6.4-orig/src/autotype/AutoType.cpp keepassxc-2.6.4-patched/src/autotype/AutoType.cpp +--- keepassxc-2.6.4-orig/src/autotype/AutoType.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/autotype/AutoType.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,841 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "AutoType.h" +- +-#include +-#include +-#include +- +-#include "config-keepassx.h" +- +-#include "autotype/AutoTypePlatformPlugin.h" +-#include "autotype/AutoTypeSelectDialog.h" +-#include "autotype/WildcardMatcher.h" +-#include "core/AutoTypeMatch.h" +-#include "core/Config.h" +-#include "core/Database.h" +-#include "core/Entry.h" +-#include "core/Group.h" +-#include "core/ListDeleter.h" +-#include "core/Resources.h" +-#include "core/Tools.h" +-#include "gui/MainWindow.h" +-#include "gui/MessageBox.h" +- +-#ifdef Q_OS_MAC +-#include "gui/osutils/macutils/MacUtils.h" +-#endif +- +-AutoType* AutoType::m_instance = nullptr; +- +-AutoType::AutoType(QObject* parent, bool test) +- : QObject(parent) +- , m_autoTypeDelay(0) +- , m_currentGlobalKey(static_cast(0)) +- , m_currentGlobalModifiers(nullptr) +- , m_pluginLoader(new QPluginLoader(this)) +- , m_plugin(nullptr) +- , m_executor(nullptr) +- , m_windowState(WindowState::Normal) +- , m_windowForGlobal(0) +-{ +- // prevent crash when the plugin has unresolved symbols +- m_pluginLoader->setLoadHints(QLibrary::ResolveAllSymbolsHint); +- +- QString pluginName = "keepassx-autotype-"; +- if (!test) { +- pluginName += QApplication::platformName(); +- } else { +- pluginName += "test"; +- } +- +- QString pluginPath = resources()->pluginPath(pluginName); +- +- if (!pluginPath.isEmpty()) { +-#ifdef WITH_XC_AUTOTYPE +- loadPlugin(pluginPath); +-#endif +- } +- +- connect(qApp, SIGNAL(aboutToQuit()), SLOT(unloadPlugin())); +-} +- +-AutoType::~AutoType() +-{ +- if (m_executor) { +- delete m_executor; +- m_executor = nullptr; +- } +-} +- +-void AutoType::loadPlugin(const QString& pluginPath) +-{ +- m_pluginLoader->setFileName(pluginPath); +- +- QObject* pluginInstance = m_pluginLoader->instance(); +- if (pluginInstance) { +- m_plugin = qobject_cast(pluginInstance); +- m_executor = nullptr; +- +- if (m_plugin) { +- if (m_plugin->isAvailable()) { +- m_executor = m_plugin->createExecutor(); +- connect(pluginInstance, SIGNAL(globalShortcutTriggered()), SLOT(startGlobalAutoType())); +- } else { +- unloadPlugin(); +- } +- } +- } +- +- if (!m_plugin) { +- qWarning("Unable to load auto-type plugin:\n%s", qPrintable(m_pluginLoader->errorString())); +- } +-} +- +-void AutoType::unloadPlugin() +-{ +- if (m_executor) { +- delete m_executor; +- m_executor = nullptr; +- } +- +- if (m_plugin) { +- m_plugin->unload(); +- m_plugin = nullptr; +- } +-} +- +-AutoType* AutoType::instance() +-{ +- if (!m_instance) { +- m_instance = new AutoType(qApp); +- } +- +- return m_instance; +-} +- +-void AutoType::createTestInstance() +-{ +- Q_ASSERT(!m_instance); +- +- m_instance = new AutoType(qApp, true); +-} +- +-QStringList AutoType::windowTitles() +-{ +- if (!m_plugin) { +- return QStringList(); +- } +- +- return m_plugin->windowTitles(); +-} +- +-void AutoType::raiseWindow() +-{ +-#if defined(Q_OS_MACOS) +- m_plugin->raiseOwnWindow(); +-#endif +-} +- +-bool AutoType::registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) +-{ +- Q_ASSERT(key); +- Q_ASSERT(modifiers); +- +- if (!m_plugin) { +- return false; +- } +- +- if (key != m_currentGlobalKey || modifiers != m_currentGlobalModifiers) { +- if (m_currentGlobalKey && m_currentGlobalModifiers) { +- m_plugin->unregisterGlobalShortcut(m_currentGlobalKey, m_currentGlobalModifiers); +- } +- +- if (m_plugin->registerGlobalShortcut(key, modifiers)) { +- m_currentGlobalKey = key; +- m_currentGlobalModifiers = modifiers; +- return true; +- } +- return false; +- } +- return true; +-} +- +-void AutoType::unregisterGlobalShortcut() +-{ +- if (m_plugin && m_currentGlobalKey && m_currentGlobalModifiers) { +- m_plugin->unregisterGlobalShortcut(m_currentGlobalKey, m_currentGlobalModifiers); +- } +-} +- +-int AutoType::callEventFilter(void* event) +-{ +- if (!m_plugin) { +- return -1; +- } +- +- return m_plugin->platformEventFilter(event); +-} +- +-/** +- * Core Autotype function that will execute actions +- */ +-void AutoType::executeAutoTypeActions(const Entry* entry, QWidget* hideWindow, const QString& sequence, WId window) +-{ +- if (!m_inAutoType.tryLock()) { +- return; +- } +- +- // no edit to the sequence beyond this point +- if (!verifyAutoTypeSyntax(sequence)) { +- emit autotypeRejected(); +- m_inAutoType.unlock(); +- return; +- } +- +- QList actions; +- ListDeleter actionsDeleter(&actions); +- +- if (!parseActions(sequence, entry, actions)) { +- emit autotypeRejected(); +- m_inAutoType.unlock(); +- return; +- } +- +- if (hideWindow) { +-#if defined(Q_OS_MACOS) +- // Check for accessibility permission +- if (!macUtils()->enableAccessibility()) { +- MessageBox::information(nullptr, +- tr("Permission Required"), +- tr("KeePassXC requires the Accessibility permission in order to perform entry " +- "level Auto-Type. If you already granted permission, you may have to restart " +- "KeePassXC.")); +- return; +- } +- +- macUtils()->raiseLastActiveWindow(); +- m_plugin->hideOwnWindow(); +-#else +- getMainWindow()->minimizeOrHide(); +-#endif +- } +- +- Tools::wait(qMax(100, config()->get(Config::AutoTypeStartDelay).toInt())); +- +- // Used only for selected entry auto-type +- if (!window) { +- window = m_plugin->activeWindow(); +- } +- +- QCoreApplication::processEvents(QEventLoop::AllEvents, 10); +- +- for (AutoTypeAction* action : asConst(actions)) { +- if (m_plugin->activeWindow() != window) { +- qWarning("Active window changed, interrupting auto-type."); +- emit autotypeRejected(); +- m_inAutoType.unlock(); +- return; +- } +- +- action->accept(m_executor); +- QCoreApplication::processEvents(QEventLoop::AllEvents, 10); +- } +- +- m_windowForGlobal = 0; +- m_windowTitleForGlobal.clear(); +- +- // emit signal only if autotype performed correctly +- emit autotypePerformed(); +- +- m_inAutoType.unlock(); +-} +- +-/** +- * Single Autotype entry-point function +- * Look up the Auto-Type sequence for the given entry then perfom Auto-Type in the active window +- */ +-void AutoType::performAutoType(const Entry* entry, QWidget* hideWindow) +-{ +- if (!m_plugin) { +- return; +- } +- +- QList sequences = autoTypeSequences(entry); +- if (sequences.isEmpty()) { +- return; +- } +- +- executeAutoTypeActions(entry, hideWindow, sequences.first()); +-} +- +-/** +- * Extra Autotype entry-point function +- * Perfom Auto-Type of the directly specified sequence in the active window +- */ +-void AutoType::performAutoTypeWithSequence(const Entry* entry, const QString& sequence, QWidget* hideWindow) +-{ +- if (!m_plugin) { +- return; +- } +- +- executeAutoTypeActions(entry, hideWindow, sequence); +-} +- +-void AutoType::startGlobalAutoType() +-{ +- m_windowForGlobal = m_plugin->activeWindow(); +- m_windowTitleForGlobal = m_plugin->activeWindowTitle(); +-#ifdef Q_OS_MACOS +- m_windowState = WindowState::Normal; +- if (getMainWindow()) { +- if (getMainWindow()->isMinimized()) { +- m_windowState = WindowState::Minimized; +- } +- if (getMainWindow()->isHidden()) { +- m_windowState = WindowState::Hidden; +- } +- } +-#endif +- +- emit globalAutoTypeTriggered(); +-} +- +-/** +- * Global Autotype entry-point function +- * Perform global Auto-Type on the active window +- */ +-void AutoType::performGlobalAutoType(const QList>& dbList) +-{ +- if (!m_plugin) { +- return; +- } +- +- if (!m_inGlobalAutoTypeDialog.tryLock()) { +- return; +- } +- +- if (m_windowTitleForGlobal.isEmpty()) { +- m_inGlobalAutoTypeDialog.unlock(); +- return; +- } +- +- QList matchList; +- +- for (const auto& db : dbList) { +- const QList dbEntries = db->rootGroup()->entriesRecursive(); +- for (Entry* entry : dbEntries) { +- const QSet sequences = autoTypeSequences(entry, m_windowTitleForGlobal).toSet(); +- for (const QString& sequence : sequences) { +- if (!sequence.isEmpty()) { +- matchList << AutoTypeMatch(entry, sequence); +- } +- } +- } +- } +- +- if (matchList.isEmpty()) { +- if (qobject_cast(QCoreApplication::instance())) { +- auto* msgBox = new QMessageBox(); +- msgBox->setAttribute(Qt::WA_DeleteOnClose); +- msgBox->setWindowTitle(tr("Auto-Type - KeePassXC")); +- msgBox->setText(tr("Couldn't find an entry that matches the window title:") +- .append("\n\n") +- .append(m_windowTitleForGlobal)); +- msgBox->setIcon(QMessageBox::Information); +- msgBox->setStandardButtons(QMessageBox::Ok); +-#ifdef Q_OS_MACOS +- m_plugin->raiseOwnWindow(); +- Tools::wait(200); +-#endif +- msgBox->exec(); +- restoreWindowState(); +- } +- +- m_inGlobalAutoTypeDialog.unlock(); +- emit autotypeRejected(); +- } else if ((matchList.size() == 1) && !config()->get(Config::Security_AutoTypeAsk).toBool()) { +- executeAutoTypeActions(matchList.first().entry, nullptr, matchList.first().sequence, m_windowForGlobal); +- m_inGlobalAutoTypeDialog.unlock(); +- } else { +- auto* selectDialog = new AutoTypeSelectDialog(); +- +- // connect slots, both of which must unlock the m_inGlobalAutoTypeDialog mutex +- connect(selectDialog, SIGNAL(matchActivated(AutoTypeMatch)), SLOT(performAutoTypeFromGlobal(AutoTypeMatch))); +- connect(selectDialog, SIGNAL(rejected()), SLOT(autoTypeRejectedFromGlobal())); +- +- selectDialog->setMatchList(matchList); +-#ifdef Q_OS_MACOS +- m_plugin->raiseOwnWindow(); +- Tools::wait(200); +-#endif +- selectDialog->show(); +- selectDialog->raise(); +- // necessary when the main window is minimized +- selectDialog->activateWindow(); +- } +-} +- +-void AutoType::restoreWindowState() +-{ +-#ifdef Q_OS_MAC +- if (getMainWindow()) { +- if (m_windowState == WindowState::Minimized) { +- getMainWindow()->showMinimized(); +- } else if (m_windowState == WindowState::Hidden) { +- getMainWindow()->hideWindow(); +- } +- } +-#endif +-} +- +-void AutoType::performAutoTypeFromGlobal(AutoTypeMatch match) +-{ +- restoreWindowState(); +- +- m_plugin->raiseWindow(m_windowForGlobal); +- executeAutoTypeActions(match.entry, nullptr, match.sequence, m_windowForGlobal); +- +- // make sure the mutex is definitely locked before we unlock it +- Q_UNUSED(m_inGlobalAutoTypeDialog.tryLock()); +- m_inGlobalAutoTypeDialog.unlock(); +-} +- +-void AutoType::autoTypeRejectedFromGlobal() +-{ +- // this slot can be called twice when the selection dialog is deleted, +- // so make sure the mutex is locked before we try unlocking it +- Q_UNUSED(m_inGlobalAutoTypeDialog.tryLock()); +- m_inGlobalAutoTypeDialog.unlock(); +- m_windowForGlobal = 0; +- m_windowTitleForGlobal.clear(); +- +- restoreWindowState(); +- emit autotypeRejected(); +-} +- +-/** +- * Parse an autotype sequence and resolve its Template/command inside as AutoTypeActions +- */ +-bool AutoType::parseActions(const QString& actionSequence, const Entry* entry, QList& actions) +-{ +- QString tmpl; +- bool inTmpl = false; +- m_autoTypeDelay = qMax(config()->get(Config::AutoTypeDelay).toInt(), 0); +- +- QString sequence = actionSequence; +- sequence.replace("{{}", "{LEFTBRACE}"); +- sequence.replace("{}}", "{RIGHTBRACE}"); +- +- for (const QChar& ch : sequence) { +- if (inTmpl) { +- if (ch == '{') { +- qWarning("Syntax error in Auto-Type sequence."); +- return false; +- } else if (ch == '}') { +- QList autoType = createActionFromTemplate(tmpl, entry); +- if (!autoType.isEmpty()) { +- actions.append(autoType); +- } +- inTmpl = false; +- tmpl.clear(); +- } else { +- tmpl += ch; +- } +- } else if (ch == '{') { +- inTmpl = true; +- } else if (ch == '}') { +- qWarning("Syntax error in Auto-Type sequence."); +- return false; +- } else { +- actions.append(new AutoTypeChar(ch)); +- } +- } +- if (m_autoTypeDelay > 0) { +- QList::iterator i; +- i = actions.begin(); +- while (i != actions.end()) { +- ++i; +- if (i != actions.end()) { +- i = actions.insert(i, new AutoTypeDelay(m_autoTypeDelay)); +- ++i; +- } +- } +- } +- return true; +-} +- +-/** +- * Convert an autotype Template/command to its AutoTypeAction that will be executed by the plugin executor +- */ +-QList AutoType::createActionFromTemplate(const QString& tmpl, const Entry* entry) +-{ +- QString tmplName = tmpl; +- int num = -1; +- QList list; +- +- QRegExp delayRegEx("delay=(\\d+)", Qt::CaseInsensitive, QRegExp::RegExp2); +- if (delayRegEx.exactMatch(tmplName)) { +- num = delayRegEx.cap(1).toInt(); +- m_autoTypeDelay = std::max(0, std::min(num, 10000)); +- return list; +- } +- +- QRegExp repeatRegEx("(.+) (\\d+)", Qt::CaseInsensitive, QRegExp::RegExp2); +- if (repeatRegEx.exactMatch(tmplName)) { +- tmplName = repeatRegEx.cap(1); +- num = repeatRegEx.cap(2).toInt(); +- +- if (num == 0) { +- return list; +- } +- } +- +- if (tmplName.compare("tab", Qt::CaseInsensitive) == 0) { +- list.append(new AutoTypeKey(Qt::Key_Tab)); +- } else if (tmplName.compare("enter", Qt::CaseInsensitive) == 0) { +- list.append(new AutoTypeKey(Qt::Key_Enter)); +- } else if (tmplName.compare("space", Qt::CaseInsensitive) == 0) { +- list.append(new AutoTypeKey(Qt::Key_Space)); +- } else if (tmplName.compare("up", Qt::CaseInsensitive) == 0) { +- list.append(new AutoTypeKey(Qt::Key_Up)); +- } else if (tmplName.compare("down", Qt::CaseInsensitive) == 0) { +- list.append(new AutoTypeKey(Qt::Key_Down)); +- } else if (tmplName.compare("left", Qt::CaseInsensitive) == 0) { +- list.append(new AutoTypeKey(Qt::Key_Left)); +- } else if (tmplName.compare("right", Qt::CaseInsensitive) == 0) { +- list.append(new AutoTypeKey(Qt::Key_Right)); +- } else if (tmplName.compare("insert", Qt::CaseInsensitive) == 0 +- || tmplName.compare("ins", Qt::CaseInsensitive) == 0) { +- list.append(new AutoTypeKey(Qt::Key_Insert)); +- } else if (tmplName.compare("delete", Qt::CaseInsensitive) == 0 +- || tmplName.compare("del", Qt::CaseInsensitive) == 0) { +- list.append(new AutoTypeKey(Qt::Key_Delete)); +- } else if (tmplName.compare("home", Qt::CaseInsensitive) == 0) { +- list.append(new AutoTypeKey(Qt::Key_Home)); +- } else if (tmplName.compare("end", Qt::CaseInsensitive) == 0) { +- list.append(new AutoTypeKey(Qt::Key_End)); +- } else if (tmplName.compare("pgup", Qt::CaseInsensitive) == 0) { +- list.append(new AutoTypeKey(Qt::Key_PageUp)); +- } else if (tmplName.compare("pgdown", Qt::CaseInsensitive) == 0) { +- list.append(new AutoTypeKey(Qt::Key_PageDown)); +- } else if (tmplName.compare("backspace", Qt::CaseInsensitive) == 0 +- || tmplName.compare("bs", Qt::CaseInsensitive) == 0 +- || tmplName.compare("bksp", Qt::CaseInsensitive) == 0) { +- list.append(new AutoTypeKey(Qt::Key_Backspace)); +- } else if (tmplName.compare("break", Qt::CaseInsensitive) == 0) { +- list.append(new AutoTypeKey(Qt::Key_Pause)); +- } else if (tmplName.compare("capslock", Qt::CaseInsensitive) == 0) { +- list.append(new AutoTypeKey(Qt::Key_CapsLock)); +- } else if (tmplName.compare("esc", Qt::CaseInsensitive) == 0) { +- list.append(new AutoTypeKey(Qt::Key_Escape)); +- } else if (tmplName.compare("help", Qt::CaseInsensitive) == 0) { +- list.append(new AutoTypeKey(Qt::Key_Help)); +- } else if (tmplName.compare("numlock", Qt::CaseInsensitive) == 0) { +- list.append(new AutoTypeKey(Qt::Key_NumLock)); +- } else if (tmplName.compare("ptrsc", Qt::CaseInsensitive) == 0) { +- list.append(new AutoTypeKey(Qt::Key_Print)); +- } else if (tmplName.compare("scrolllock", Qt::CaseInsensitive) == 0) { +- list.append(new AutoTypeKey(Qt::Key_ScrollLock)); +- } +- // Qt doesn't know about keypad keys so use the normal ones instead +- else if (tmplName.compare("add", Qt::CaseInsensitive) == 0 || tmplName.compare("+", Qt::CaseInsensitive) == 0) { +- list.append(new AutoTypeChar('+')); +- } else if (tmplName.compare("subtract", Qt::CaseInsensitive) == 0) { +- list.append(new AutoTypeChar('-')); +- } else if (tmplName.compare("multiply", Qt::CaseInsensitive) == 0) { +- list.append(new AutoTypeChar('*')); +- } else if (tmplName.compare("divide", Qt::CaseInsensitive) == 0) { +- list.append(new AutoTypeChar('/')); +- } else if (tmplName.compare("^", Qt::CaseInsensitive) == 0) { +- list.append(new AutoTypeChar('^')); +- } else if (tmplName.compare("%", Qt::CaseInsensitive) == 0) { +- list.append(new AutoTypeChar('%')); +- } else if (tmplName.compare("~", Qt::CaseInsensitive) == 0) { +- list.append(new AutoTypeChar('~')); +- } else if (tmplName.compare("(", Qt::CaseInsensitive) == 0) { +- list.append(new AutoTypeChar('(')); +- } else if (tmplName.compare(")", Qt::CaseInsensitive) == 0) { +- list.append(new AutoTypeChar(')')); +- } else if (tmplName.compare("leftbrace", Qt::CaseInsensitive) == 0) { +- list.append(new AutoTypeChar('{')); +- } else if (tmplName.compare("rightbrace", Qt::CaseInsensitive) == 0) { +- list.append(new AutoTypeChar('}')); +- } else { +- QRegExp fnRegexp("f(\\d+)", Qt::CaseInsensitive, QRegExp::RegExp2); +- if (fnRegexp.exactMatch(tmplName)) { +- int fnNo = fnRegexp.cap(1).toInt(); +- if (fnNo >= 1 && fnNo <= 16) { +- list.append(new AutoTypeKey(static_cast(Qt::Key_F1 - 1 + fnNo))); +- } +- } +- } +- +- if (!list.isEmpty()) { +- for (int i = 1; i < num; i++) { +- list.append(list.at(0)->clone()); +- } +- return list; +- } +- +- if (tmplName.compare("delay", Qt::CaseInsensitive) == 0 && num > 0) { +- list.append(new AutoTypeDelay(num)); +- } else if (tmplName.compare("clearfield", Qt::CaseInsensitive) == 0) { +- list.append(new AutoTypeClearField()); +- } else if (tmplName.compare("totp", Qt::CaseInsensitive) == 0) { +- QString totp = entry->totp(); +- if (!totp.isEmpty()) { +- for (const QChar& ch : totp) { +- list.append(new AutoTypeChar(ch)); +- } +- } +- } +- +- if (!list.isEmpty()) { +- return list; +- } +- +- const QString placeholder = QString("{%1}").arg(tmplName); +- const QString resolved = entry->resolvePlaceholder(placeholder); +- if (placeholder != resolved) { +- for (const QChar& ch : resolved) { +- if (ch == '\n') { +- list.append(new AutoTypeKey(Qt::Key_Enter)); +- } else if (ch == '\t') { +- list.append(new AutoTypeKey(Qt::Key_Tab)); +- } else { +- list.append(new AutoTypeChar(ch)); +- } +- } +- } +- +- return list; +-} +- +-/** +- * Retrive the autotype sequences matches for a given windowTitle +- * This returns a list with priority ordering. If you don't want duplicates call .toSet() on it. +- */ +-QList AutoType::autoTypeSequences(const Entry* entry, const QString& windowTitle) +-{ +- QList sequenceList; +- const Group* group = entry->group(); +- +- if (!group || !entry->autoTypeEnabled()) { +- return sequenceList; +- } +- +- do { +- if (group->autoTypeEnabled() == Group::Disable) { +- return sequenceList; +- } else if (group->autoTypeEnabled() == Group::Enable) { +- break; +- } +- group = group->parentGroup(); +- +- } while (group); +- +- if (!windowTitle.isEmpty()) { +- const QList assocList = entry->autoTypeAssociations()->getAll(); +- for (const AutoTypeAssociations::Association& assoc : assocList) { +- const QString window = entry->resolveMultiplePlaceholders(assoc.window); +- if (windowMatches(windowTitle, window)) { +- if (!assoc.sequence.isEmpty()) { +- sequenceList.append(assoc.sequence); +- } else { +- sequenceList.append(entry->effectiveAutoTypeSequence()); +- } +- } +- } +- +- if (config()->get(Config::AutoTypeEntryTitleMatch).toBool() +- && windowMatchesTitle(windowTitle, entry->resolvePlaceholder(entry->title()))) { +- sequenceList.append(entry->effectiveAutoTypeSequence()); +- } +- +- if (config()->get(Config::AutoTypeEntryURLMatch).toBool() +- && windowMatchesUrl(windowTitle, entry->resolvePlaceholder(entry->url()))) { +- sequenceList.append(entry->effectiveAutoTypeSequence()); +- } +- +- if (sequenceList.isEmpty()) { +- return sequenceList; +- } +- } else { +- sequenceList.append(entry->effectiveAutoTypeSequence()); +- } +- +- return sequenceList; +-} +- +-/** +- * Checks if a window title matches a pattern +- */ +-bool AutoType::windowMatches(const QString& windowTitle, const QString& windowPattern) +-{ +- if (windowPattern.startsWith("//") && windowPattern.endsWith("//") && windowPattern.size() >= 4) { +- QRegExp regExp(windowPattern.mid(2, windowPattern.size() - 4), Qt::CaseInsensitive, QRegExp::RegExp2); +- return (regExp.indexIn(windowTitle) != -1); +- } +- return WildcardMatcher(windowTitle).match(windowPattern); +-} +- +-/** +- * Checks if a window title matches an entry Title +- * The entry title should be Spr-compiled by the caller +- */ +-bool AutoType::windowMatchesTitle(const QString& windowTitle, const QString& resolvedTitle) +-{ +- return !resolvedTitle.isEmpty() && windowTitle.contains(resolvedTitle, Qt::CaseInsensitive); +-} +- +-/** +- * Checks if a window title matches an entry URL +- * The entry URL should be Spr-compiled by the caller +- */ +-bool AutoType::windowMatchesUrl(const QString& windowTitle, const QString& resolvedUrl) +-{ +- if (!resolvedUrl.isEmpty() && windowTitle.contains(resolvedUrl, Qt::CaseInsensitive)) { +- return true; +- } +- +- QUrl url(resolvedUrl); +- if (url.isValid() && !url.host().isEmpty()) { +- return windowTitle.contains(url.host(), Qt::CaseInsensitive); +- } +- +- return false; +-} +- +-/** +- * Checks if the overall syntax of an autotype sequence is fine +- */ +-bool AutoType::checkSyntax(const QString& string) +-{ +- QString allowRepetition = "(?:\\s\\d+)?"; +- // the ":" allows custom commands with syntax S:Field +- // exclude BEEP otherwise will be checked as valid +- QString normalCommands = "(?!BEEP\\s)[A-Z:_]*" + allowRepetition; +- QString specialLiterals = "[\\^\\%\\(\\)~\\{\\}\\[\\]\\+]" + allowRepetition; +- QString functionKeys = "(?:F[1-9]" + allowRepetition + "|F1[0-2])" + allowRepetition; +- QString numpad = "NUMPAD\\d" + allowRepetition; +- QString delay = "DELAY=\\d+"; +- QString beep = "BEEP\\s\\d+\\s\\d+"; +- QString vkey = "VKEY(?:-[EN]X)?\\s\\w+"; +- QString customAttributes = "S:(?:[^\\{\\}])+"; +- +- // these chars aren't in parentheses +- QString shortcutKeys = "[\\^\\%~\\+@]"; +- // a normal string not in parentheses +- QString fixedStrings = "[^\\^\\%~\\+@\\{\\}]*"; +- // clang-format off +- QRegularExpression autoTypeSyntax( +- "^(?:" + shortcutKeys + "|" + fixedStrings + "|\\{(?:" + normalCommands + "|" + specialLiterals + "|" +- + functionKeys +- + "|" +- + numpad +- + "|" +- + delay +- + "|" +- + beep +- + "|" +- + vkey +- + ")\\}|\\{" +- + customAttributes +- + "\\})*$", +- QRegularExpression::CaseInsensitiveOption); +- // clang-format on +- QRegularExpressionMatch match = autoTypeSyntax.match(string); +- return match.hasMatch(); +-} +- +-/** +- * Checks an autotype sequence for high delay +- */ +-bool AutoType::checkHighDelay(const QString& string) +-{ +- // 5 digit numbers(10 seconds) are too much +- QRegularExpression highDelay("\\{DELAY\\s\\d{5,}\\}", QRegularExpression::CaseInsensitiveOption); +- QRegularExpressionMatch match = highDelay.match(string); +- return match.hasMatch(); +-} +- +-/** +- * Checks an autotype sequence for slow keypress +- */ +-bool AutoType::checkSlowKeypress(const QString& string) +-{ +- // 3 digit numbers(100 milliseconds) are too much +- QRegularExpression slowKeypress("\\{DELAY=\\d{3,}\\}", QRegularExpression::CaseInsensitiveOption); +- QRegularExpressionMatch match = slowKeypress.match(string); +- return match.hasMatch(); +-} +- +-/** +- * Checks an autotype sequence for high repetition command +- */ +-bool AutoType::checkHighRepetition(const QString& string) +-{ +- // 3 digit numbers are too much +- QRegularExpression highRepetition("\\{(?!DELAY\\s)\\w+\\s\\d{3,}\\}", QRegularExpression::CaseInsensitiveOption); +- QRegularExpressionMatch match = highRepetition.match(string); +- return match.hasMatch(); +-} +- +-/** +- * Verify if the syntax of an autotype sequence is correct and doesn't have silly parameters +- */ +-bool AutoType::verifyAutoTypeSyntax(const QString& sequence) +-{ +- if (!AutoType::checkSyntax(sequence)) { +- QMessageBox::critical(nullptr, tr("Auto-Type"), tr("The Syntax of your Auto-Type statement is incorrect!")); +- return false; +- } else if (AutoType::checkHighDelay(sequence)) { +- QMessageBox::StandardButton reply; +- reply = QMessageBox::question( +- nullptr, +- tr("Auto-Type"), +- tr("This Auto-Type command contains a very long delay. Do you really want to proceed?")); +- +- if (reply == QMessageBox::No) { +- return false; +- } +- } else if (AutoType::checkSlowKeypress(sequence)) { +- QMessageBox::StandardButton reply; +- reply = QMessageBox::question( +- nullptr, +- tr("Auto-Type"), +- tr("This Auto-Type command contains very slow key presses. Do you really want to proceed?")); +- +- if (reply == QMessageBox::No) { +- return false; +- } +- } else if (AutoType::checkHighRepetition(sequence)) { +- QMessageBox::StandardButton reply; +- reply = QMessageBox::question(nullptr, +- tr("Auto-Type"), +- tr("This Auto-Type command contains arguments which are " +- "repeated very often. Do you really want to proceed?")); +- +- if (reply == QMessageBox::No) { +- return false; +- } +- } +- return true; +-} +diff -urNr keepassxc-2.6.4-orig/src/autotype/AutoTypeFilterLineEdit.cpp keepassxc-2.6.4-patched/src/autotype/AutoTypeFilterLineEdit.cpp +--- keepassxc-2.6.4-orig/src/autotype/AutoTypeFilterLineEdit.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/autotype/AutoTypeFilterLineEdit.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,39 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "AutoTypeFilterLineEdit.h" +-#include +- +-void AutoTypeFilterLineEdit::keyPressEvent(QKeyEvent* event) +-{ +- if (event->key() == Qt::Key_Up) { +- emit keyUpPressed(); +- } else if (event->key() == Qt::Key_Down) { +- emit keyDownPressed(); +- } else { +- QLineEdit::keyPressEvent(event); +- } +-} +- +-void AutoTypeFilterLineEdit::keyReleaseEvent(QKeyEvent* event) +-{ +- if (event->key() == Qt::Key_Escape) { +- emit escapeReleased(); +- } else { +- QLineEdit::keyReleaseEvent(event); +- } +-} +diff -urNr keepassxc-2.6.4-orig/src/autotype/AutoTypeFilterLineEdit.h keepassxc-2.6.4-patched/src/autotype/AutoTypeFilterLineEdit.h +--- keepassxc-2.6.4-orig/src/autotype/AutoTypeFilterLineEdit.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/autotype/AutoTypeFilterLineEdit.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,42 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_AUTOTYPEFILTERLINEEDIT_H +-#define KEEPASSX_AUTOTYPEFILTERLINEEDIT_H +- +-#include +- +-class AutoTypeFilterLineEdit : public QLineEdit +-{ +- Q_OBJECT +- +-public: +- AutoTypeFilterLineEdit(QWidget* widget) +- : QLineEdit(widget) +- { +- } +- +-protected: +- virtual void keyPressEvent(QKeyEvent* event); +- virtual void keyReleaseEvent(QKeyEvent* event); +-signals: +- void keyUpPressed(); +- void keyDownPressed(); +- void escapeReleased(); +-}; +- +-#endif // KEEPASSX_AUTOTYPEFILTERLINEEDIT_H +diff -urNr keepassxc-2.6.4-orig/src/autotype/AutoType.h keepassxc-2.6.4-patched/src/autotype/AutoType.h +--- keepassxc-2.6.4-orig/src/autotype/AutoType.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/autotype/AutoType.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,121 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_AUTOTYPE_H +-#define KEEPASSX_AUTOTYPE_H +- +-#include +-#include +-#include +-#include +- +-#include "core/AutoTypeMatch.h" +- +-class AutoTypeAction; +-class AutoTypeExecutor; +-class AutoTypePlatformInterface; +-class Database; +-class Entry; +-class QPluginLoader; +- +-class AutoType : public QObject +-{ +- Q_OBJECT +- +-public: +- QStringList windowTitles(); +- bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers); +- void unregisterGlobalShortcut(); +- int callEventFilter(void* event); +- static bool checkSyntax(const QString& string); +- static bool checkHighRepetition(const QString& string); +- static bool checkSlowKeypress(const QString& string); +- static bool checkHighDelay(const QString& string); +- static bool verifyAutoTypeSyntax(const QString& sequence); +- void performAutoType(const Entry* entry, QWidget* hideWindow = nullptr); +- void performAutoTypeWithSequence(const Entry* entry, const QString& sequence, QWidget* hideWindow = nullptr); +- +- inline bool isAvailable() +- { +- return m_plugin; +- } +- +- static AutoType* instance(); +- static void createTestInstance(); +- +-public slots: +- void performGlobalAutoType(const QList>& dbList); +- void raiseWindow(); +- +-signals: +- void globalAutoTypeTriggered(); +- void autotypePerformed(); +- void autotypeRejected(); +- +-private slots: +- void startGlobalAutoType(); +- void performAutoTypeFromGlobal(AutoTypeMatch match); +- void autoTypeRejectedFromGlobal(); +- void unloadPlugin(); +- +-private: +- enum WindowState +- { +- Normal, +- Minimized, +- Hidden +- }; +- +- explicit AutoType(QObject* parent = nullptr, bool test = false); +- ~AutoType() override; +- void loadPlugin(const QString& pluginPath); +- void executeAutoTypeActions(const Entry* entry, +- QWidget* hideWindow = nullptr, +- const QString& customSequence = QString(), +- WId window = 0); +- bool parseActions(const QString& sequence, const Entry* entry, QList& actions); +- QList createActionFromTemplate(const QString& tmpl, const Entry* entry); +- QList autoTypeSequences(const Entry* entry, const QString& windowTitle = QString()); +- bool windowMatchesTitle(const QString& windowTitle, const QString& resolvedTitle); +- bool windowMatchesUrl(const QString& windowTitle, const QString& resolvedUrl); +- bool windowMatches(const QString& windowTitle, const QString& windowPattern); +- void restoreWindowState(); +- +- QMutex m_inAutoType; +- QMutex m_inGlobalAutoTypeDialog; +- int m_autoTypeDelay; +- Qt::Key m_currentGlobalKey; +- Qt::KeyboardModifiers m_currentGlobalModifiers; +- QPluginLoader* m_pluginLoader; +- AutoTypePlatformInterface* m_plugin; +- AutoTypeExecutor* m_executor; +- static AutoType* m_instance; +- +- QString m_windowTitleForGlobal; +- WindowState m_windowState; +- WId m_windowForGlobal; +- +- Q_DISABLE_COPY(AutoType) +-}; +- +-inline AutoType* autoType() +-{ +- return AutoType::instance(); +-} +- +-#endif // KEEPASSX_AUTOTYPE_H +diff -urNr keepassxc-2.6.4-orig/src/autotype/AutoTypePlatformPlugin.h keepassxc-2.6.4-patched/src/autotype/AutoTypePlatformPlugin.h +--- keepassxc-2.6.4-orig/src/autotype/AutoTypePlatformPlugin.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/autotype/AutoTypePlatformPlugin.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,55 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_AUTOTYPEPLATFORMPLUGIN_H +-#define KEEPASSX_AUTOTYPEPLATFORMPLUGIN_H +- +-#include +- +-#include "autotype/AutoTypeAction.h" +- +-class AutoTypePlatformInterface +-{ +-public: +- virtual ~AutoTypePlatformInterface() +- { +- } +- virtual bool isAvailable() = 0; +- virtual QStringList windowTitles() = 0; +- virtual WId activeWindow() = 0; +- virtual QString activeWindowTitle() = 0; +- virtual bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) = 0; +- virtual void unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) = 0; +- virtual int platformEventFilter(void* event) = 0; +- virtual bool raiseWindow(WId window) = 0; +- virtual void unload() +- { +- } +- +- virtual AutoTypeExecutor* createExecutor() = 0; +- +-#if defined(Q_OS_MACOS) +- virtual bool hideOwnWindow() = 0; +- virtual bool raiseOwnWindow() = 0; +-#endif +- +- // implementations should also provide a globalShortcutTriggered() signal +-}; +- +-Q_DECLARE_INTERFACE(AutoTypePlatformInterface, "org.keepassx.AutoTypePlatformInterface/1") +- +-#endif // KEEPASSX_AUTOTYPEPLATFORMPLUGIN_H +diff -urNr keepassxc-2.6.4-orig/src/autotype/AutoTypeSelectDialog.cpp keepassxc-2.6.4-patched/src/autotype/AutoTypeSelectDialog.cpp +--- keepassxc-2.6.4-orig/src/autotype/AutoTypeSelectDialog.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/autotype/AutoTypeSelectDialog.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,184 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "AutoTypeSelectDialog.h" +- +-#include +-#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) +-#include +-#else +-#include +-#endif +-#include +-#include +-#include +-#include +-#include +-#include +- +-#include "autotype/AutoTypeSelectView.h" +-#include "core/AutoTypeMatch.h" +-#include "core/Config.h" +-#include "core/Resources.h" +-#include "gui/entry/AutoTypeMatchModel.h" +- +-AutoTypeSelectDialog::AutoTypeSelectDialog(QWidget* parent) +- : QDialog(parent) +- , m_view(new AutoTypeSelectView(this)) +- , m_filterLineEdit(new AutoTypeFilterLineEdit(this)) +- , m_matchActivatedEmitted(false) +- , m_rejected(false) +-{ +- setAttribute(Qt::WA_DeleteOnClose); +- // Places the window on the active (virtual) desktop instead of where the main window is. +- setAttribute(Qt::WA_X11BypassTransientForHint); +- setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint); +- setWindowTitle(tr("Auto-Type - KeePassXC")); +- setWindowIcon(resources()->applicationIcon()); +- +-#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) +- QRect screenGeometry = QApplication::screenAt(QCursor::pos())->availableGeometry(); +-#else +- QRect screenGeometry = QApplication::desktop()->availableGeometry(QCursor::pos()); +-#endif +- QSize size = config()->get(Config::GUI_AutoTypeSelectDialogSize).toSize(); +- size.setWidth(qMin(size.width(), screenGeometry.width())); +- size.setHeight(qMin(size.height(), screenGeometry.height())); +- resize(size); +- +- // move dialog to the center of the screen +- QPoint screenCenter = screenGeometry.center(); +- move(screenCenter.x() - (size.width() / 2), screenCenter.y() - (size.height() / 2)); +- +- QVBoxLayout* layout = new QVBoxLayout(this); +- +- QLabel* descriptionLabel = new QLabel(tr("Select entry to Auto-Type:"), this); +- layout->addWidget(descriptionLabel); +- +- // clang-format off +- connect(m_view, SIGNAL(activated(QModelIndex)), SLOT(emitMatchActivated(QModelIndex))); +- connect(m_view, SIGNAL(clicked(QModelIndex)), SLOT(emitMatchActivated(QModelIndex))); +- connect(m_view->model(), SIGNAL(rowsRemoved(QModelIndex,int,int)), SLOT(matchRemoved())); +- connect(m_view, SIGNAL(rejected()), SLOT(reject())); +- connect(m_view, SIGNAL(matchTextCopied()), SLOT(reject())); +- // clang-format on +- +- QSortFilterProxyModel* proxy = qobject_cast(m_view->model()); +- if (proxy) { +- proxy->setFilterKeyColumn(-1); +- proxy->setFilterCaseSensitivity(Qt::CaseInsensitive); +- } +- +- layout->addWidget(m_view); +- +- connect(m_filterLineEdit, SIGNAL(textChanged(QString)), SLOT(filterList(QString))); +- connect(m_filterLineEdit, SIGNAL(returnPressed()), SLOT(activateCurrentIndex())); +- connect(m_filterLineEdit, SIGNAL(keyUpPressed()), SLOT(moveSelectionUp())); +- connect(m_filterLineEdit, SIGNAL(keyDownPressed()), SLOT(moveSelectionDown())); +- connect(m_filterLineEdit, SIGNAL(escapeReleased()), SLOT(reject())); +- +- m_filterLineEdit->setPlaceholderText(tr("Search...")); +- layout->addWidget(m_filterLineEdit); +- +- QDialogButtonBox* buttonBox = new QDialogButtonBox(QDialogButtonBox::Cancel, Qt::Horizontal, this); +- connect(buttonBox, SIGNAL(rejected()), SLOT(reject())); +- layout->addWidget(buttonBox); +- +- m_filterLineEdit->setFocus(); +-} +- +-void AutoTypeSelectDialog::setMatchList(const QList& matchList) +-{ +- m_view->setMatchList(matchList); +- +- m_view->header()->resizeSections(QHeaderView::ResizeToContents); +-} +- +-void AutoTypeSelectDialog::done(int r) +-{ +- config()->set(Config::GUI_AutoTypeSelectDialogSize, size()); +- +- QDialog::done(r); +-} +- +-void AutoTypeSelectDialog::reject() +-{ +- m_rejected = true; +- +- QDialog::reject(); +-} +- +-void AutoTypeSelectDialog::emitMatchActivated(const QModelIndex& index) +-{ +- // make sure we don't emit the signal twice when both activated() and clicked() are triggered +- if (m_matchActivatedEmitted) { +- return; +- } +- m_matchActivatedEmitted = true; +- +- AutoTypeMatch match = m_view->matchFromIndex(index); +- accept(); +- emit matchActivated(match); +-} +- +-void AutoTypeSelectDialog::matchRemoved() +-{ +- if (m_rejected) { +- return; +- } +- +- if (m_view->model()->rowCount() == 0 && m_filterLineEdit->text().isEmpty()) { +- reject(); +- } +-} +- +-void AutoTypeSelectDialog::filterList(QString filterString) +-{ +- QSortFilterProxyModel* proxy = qobject_cast(m_view->model()); +- if (proxy) { +- proxy->setFilterWildcard(filterString); +- if (!m_view->currentIndex().isValid()) { +- m_view->setCurrentIndex(m_view->model()->index(0, 0)); +- } +- } +-} +- +-void AutoTypeSelectDialog::moveSelectionUp() +-{ +- auto current = m_view->currentIndex(); +- auto previous = current.sibling(current.row() - 1, 0); +- +- if (previous.isValid()) { +- m_view->setCurrentIndex(previous); +- } +-} +- +-void AutoTypeSelectDialog::moveSelectionDown() +-{ +- auto current = m_view->currentIndex(); +- auto next = current.sibling(current.row() + 1, 0); +- +- if (next.isValid()) { +- m_view->setCurrentIndex(next); +- } +-} +- +-void AutoTypeSelectDialog::activateCurrentIndex() +-{ +- emitMatchActivated(m_view->currentIndex()); +-} +diff -urNr keepassxc-2.6.4-orig/src/autotype/AutoTypeSelectDialog.h keepassxc-2.6.4-patched/src/autotype/AutoTypeSelectDialog.h +--- keepassxc-2.6.4-orig/src/autotype/AutoTypeSelectDialog.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/autotype/AutoTypeSelectDialog.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,60 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_AUTOTYPESELECTDIALOG_H +-#define KEEPASSX_AUTOTYPESELECTDIALOG_H +- +-#include +-#include +-#include +- +-#include "autotype/AutoTypeFilterLineEdit.h" +-#include "core/AutoTypeMatch.h" +- +-class AutoTypeSelectView; +- +-class AutoTypeSelectDialog : public QDialog +-{ +- Q_OBJECT +- +-public: +- explicit AutoTypeSelectDialog(QWidget* parent = nullptr); +- void setMatchList(const QList& matchList); +- +-signals: +- void matchActivated(AutoTypeMatch match); +- +-public slots: +- void done(int r) override; +- void reject() override; +- +-private slots: +- void emitMatchActivated(const QModelIndex& index); +- void matchRemoved(); +- void filterList(QString filterString); +- void moveSelectionUp(); +- void moveSelectionDown(); +- void activateCurrentIndex(); +- +-private: +- AutoTypeSelectView* const m_view; +- AutoTypeFilterLineEdit* const m_filterLineEdit; +- bool m_matchActivatedEmitted; +- bool m_rejected; +-}; +- +-#endif // KEEPASSX_AUTOTYPESELECTDIALOG_H +diff -urNr keepassxc-2.6.4-orig/src/autotype/AutoTypeSelectView.cpp keepassxc-2.6.4-patched/src/autotype/AutoTypeSelectView.cpp +--- keepassxc-2.6.4-orig/src/autotype/AutoTypeSelectView.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/autotype/AutoTypeSelectView.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,62 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "AutoTypeSelectView.h" +- +-#include +-#include +- +-AutoTypeSelectView::AutoTypeSelectView(QWidget* parent) +- : AutoTypeMatchView(parent) +-{ +- setMouseTracking(true); +- setAllColumnsShowFocus(true); +- +- connect(model(), SIGNAL(modelReset()), SLOT(selectFirstMatch())); +-} +- +-void AutoTypeSelectView::mouseMoveEvent(QMouseEvent* event) +-{ +- QModelIndex index = indexAt(event->pos()); +- +- if (index.isValid()) { +- setCurrentIndex(index); +- setCursor(Qt::PointingHandCursor); +- } else { +- unsetCursor(); +- } +- +- AutoTypeMatchView::mouseMoveEvent(event); +-} +- +-void AutoTypeSelectView::selectFirstMatch() +-{ +- QModelIndex index = model()->index(0, 0); +- +- if (index.isValid()) { +- setCurrentIndex(index); +- } +-} +- +-void AutoTypeSelectView::keyReleaseEvent(QKeyEvent* e) +-{ +- if (e->key() == Qt::Key_Escape) { +- emit rejected(); +- } else { +- e->ignore(); +- } +-} +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/src/autotype/AutoTypeSelectView.h keepassxc-2.6.4-patched/src/autotype/AutoTypeSelectView.h +--- keepassxc-2.6.4-orig/src/autotype/AutoTypeSelectView.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/autotype/AutoTypeSelectView.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,41 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_AUTOTYPESELECTVIEW_H +-#define KEEPASSX_AUTOTYPESELECTVIEW_H +- +-#include "gui/entry/AutoTypeMatchView.h" +- +-class AutoTypeSelectView : public AutoTypeMatchView +-{ +- Q_OBJECT +- +-public: +- explicit AutoTypeSelectView(QWidget* parent = nullptr); +- +-protected: +- void mouseMoveEvent(QMouseEvent* event) override; +- void keyReleaseEvent(QKeyEvent* e) override; +- +-private slots: +- void selectFirstMatch(); +- +-signals: +- void rejected(); +-}; +- +-#endif // KEEPASSX_AUTOTYPESELECTVIEW_H +diff -urNr keepassxc-2.6.4-orig/src/autotype/CMakeLists.txt keepassxc-2.6.4-patched/src/autotype/CMakeLists.txt +--- keepassxc-2.6.4-orig/src/autotype/CMakeLists.txt 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/autotype/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +@@ -1,23 +0,0 @@ +-if(WITH_XC_AUTOTYPE) +- if(UNIX AND NOT APPLE AND NOT HAIKU) +- find_package(X11) +- find_package(Qt5X11Extras 5.2) +- if(PRINT_SUMMARY) +- add_feature_info(libXi X11_Xi_FOUND "The X11 Xi Protocol library is required for auto-type") +- add_feature_info(libXtst X11_XTest_FOUND "The X11 XTEST Protocol library is required for auto-type") +- add_feature_info(Qt5X11Extras Qt5X11Extras_FOUND "The Qt5X11Extras library is required for auto-type") +- endif() +- +- if(X11_FOUND AND X11_Xi_FOUND AND X11_XTest_FOUND AND Qt5X11Extras_FOUND) +- add_subdirectory(xcb) +- endif() +- elseif(APPLE) +- add_subdirectory(mac) +- elseif(WIN32) +- add_subdirectory(windows) +- endif() +- +- if(WITH_TESTS) +- add_subdirectory(test) +- endif() +-endif() +diff -urNr keepassxc-2.6.4-orig/src/autotype/mac/AutoTypeMac.cpp keepassxc-2.6.4-patched/src/autotype/mac/AutoTypeMac.cpp +--- keepassxc-2.6.4-orig/src/autotype/mac/AutoTypeMac.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/autotype/mac/AutoTypeMac.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,549 +0,0 @@ +-/* +- * Copyright (C) 2016 Lennart Glauer +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "AutoTypeMac.h" +-#include "gui/osutils/macutils/MacUtils.h" +-#include "gui/MessageBox.h" +- +-#include +- +-#define HOTKEY_ID 1 +-#define MAX_WINDOW_TITLE_LENGTH 1024 +-#define INVALID_KEYCODE 0xFFFF +- +-namespace { +-bool accessibilityChecked = false; +-} +- +-AutoTypePlatformMac::AutoTypePlatformMac() +- : m_hotkeyRef(nullptr) +- , m_hotkeyId({ 'kpx2', HOTKEY_ID }) +-{ +- EventTypeSpec eventSpec; +- eventSpec.eventClass = kEventClassKeyboard; +- eventSpec.eventKind = kEventHotKeyPressed; +- +- MessageBox::initializeButtonDefs(); +- ::InstallApplicationEventHandler(AutoTypePlatformMac::hotkeyHandler, 1, &eventSpec, this, nullptr); +-} +- +-/** +- * Determine if Auto-Type is available +- * +- * @return always return true +- */ +-bool AutoTypePlatformMac::isAvailable() +-{ +- // Accessibility permissions are requested upon first use, instead of on load +- return true; +-} +- +-// +-// Get list of visible window titles +-// see: Quartz Window Services +-// +-QStringList AutoTypePlatformMac::windowTitles() +-{ +- QStringList list; +- +- CFArrayRef windowList = ::CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly | kCGWindowListExcludeDesktopElements, kCGNullWindowID); +- if (windowList != nullptr) { +- CFIndex count = ::CFArrayGetCount(windowList); +- +- for (CFIndex i = 0; i < count; i++) { +- CFDictionaryRef window = static_cast(::CFArrayGetValueAtIndex(windowList, i)); +- if (windowLayer(window) != 0) { +- continue; +- } +- +- QString title = windowTitle(window); +- if (!title.isEmpty()) { +- list.append(title); +- } +- } +- +- ::CFRelease(windowList); +- } +- +- return list; +-} +- +-// +-// Get active window process id +-// +-WId AutoTypePlatformMac::activeWindow() +-{ +- return macUtils()->activeWindow(); +-} +- +-// +-// Get active window title +-// see: Quartz Window Services +-// +-QString AutoTypePlatformMac::activeWindowTitle() +-{ +- QString title; +- +- CFArrayRef windowList = ::CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly | kCGWindowListExcludeDesktopElements, kCGNullWindowID); +- if (windowList != nullptr) { +- CFIndex count = ::CFArrayGetCount(windowList); +- +- for (CFIndex i = 0; i < count; i++) { +- CFDictionaryRef window = static_cast(::CFArrayGetValueAtIndex(windowList, i)); +- if (windowLayer(window) == 0) { +- // First toplevel window in list (front to back order) +- title = windowTitle(window); +- if (!title.isEmpty()) { +- break; +- } +- } +- } +- +- ::CFRelease(windowList); +- } +- +- return title; +-} +- +-// +-// Register global hotkey +-// +-bool AutoTypePlatformMac::registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) +-{ +- uint16 nativeKeyCode = qtToNativeKeyCode(key); +- if (nativeKeyCode == INVALID_KEYCODE) { +- qWarning("Invalid key code"); +- return false; +- } +- CGEventFlags nativeModifiers = qtToNativeModifiers(modifiers, false); +- if (::RegisterEventHotKey(nativeKeyCode, nativeModifiers, m_hotkeyId, GetApplicationEventTarget(), 0, &m_hotkeyRef) != noErr) { +- qWarning("Register hotkey failed"); +- return false; +- } +- +- return true; +-} +- +-// +-// Unregister global hotkey +-// +-void AutoTypePlatformMac::unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) +-{ +- Q_UNUSED(key); +- Q_UNUSED(modifiers); +- +- ::UnregisterEventHotKey(m_hotkeyRef); +-} +- +-int AutoTypePlatformMac::platformEventFilter(void* event) +-{ +- Q_UNUSED(event); +- Q_ASSERT(false); +- +- return -1; +-} +- +-AutoTypeExecutor* AutoTypePlatformMac::createExecutor() +-{ +- return new AutoTypeExecutorMac(this); +-} +- +-// +-// Activate window by process id +-// +-bool AutoTypePlatformMac::raiseWindow(WId pid) +-{ +- return macUtils()->raiseWindow(pid); +-} +- +-// +-// Activate last active window +-// +-bool AutoTypePlatformMac::hideOwnWindow() +-{ +- return macUtils()->hideOwnWindow(); +-} +- +-// +-// Activate keepassx window +-// +-bool AutoTypePlatformMac::raiseOwnWindow() +-{ +- return macUtils()->raiseOwnWindow(); +-} +- +-// +-// Send unicode character to active window +-// see: Quartz Event Services +-// +-void AutoTypePlatformMac::sendChar(const QChar& ch, bool isKeyDown) +-{ +- CGEventRef keyEvent = ::CGEventCreateKeyboardEvent(nullptr, 0, isKeyDown); +- if (keyEvent != nullptr) { +- UniChar unicode = ch.unicode(); +- ::CGEventKeyboardSetUnicodeString(keyEvent, 1, &unicode); +- ::CGEventPost(kCGSessionEventTap, keyEvent); +- ::CFRelease(keyEvent); +- } +-} +- +-// +-// Send key code to active window +-// see: Quartz Event Services +-// +-void AutoTypePlatformMac::sendKey(Qt::Key key, bool isKeyDown, Qt::KeyboardModifiers modifiers = 0) +-{ +- uint16 keyCode = qtToNativeKeyCode(key); +- if (keyCode == INVALID_KEYCODE) { +- return; +- } +- +- CGEventRef keyEvent = ::CGEventCreateKeyboardEvent(nullptr, keyCode, isKeyDown); +- CGEventFlags nativeModifiers = qtToNativeModifiers(modifiers, true); +- if (keyEvent != nullptr) { +- ::CGEventSetFlags(keyEvent, nativeModifiers); +- ::CGEventPost(kCGSessionEventTap, keyEvent); +- ::CFRelease(keyEvent); +- } +-} +- +-// +-// Translate qt key code to mac os key code +-// see: HIToolbox/Events.h +-// +-uint16 AutoTypePlatformMac::qtToNativeKeyCode(Qt::Key key) +-{ +- switch (key) { +- case Qt::Key_A: +- return kVK_ANSI_A; +- case Qt::Key_B: +- return kVK_ANSI_B; +- case Qt::Key_C: +- return kVK_ANSI_C; +- case Qt::Key_D: +- return kVK_ANSI_D; +- case Qt::Key_E: +- return kVK_ANSI_E; +- case Qt::Key_F: +- return kVK_ANSI_F; +- case Qt::Key_G: +- return kVK_ANSI_G; +- case Qt::Key_H: +- return kVK_ANSI_H; +- case Qt::Key_I: +- return kVK_ANSI_I; +- case Qt::Key_J: +- return kVK_ANSI_J; +- case Qt::Key_K: +- return kVK_ANSI_K; +- case Qt::Key_L: +- return kVK_ANSI_L; +- case Qt::Key_M: +- return kVK_ANSI_M; +- case Qt::Key_N: +- return kVK_ANSI_N; +- case Qt::Key_O: +- return kVK_ANSI_O; +- case Qt::Key_P: +- return kVK_ANSI_P; +- case Qt::Key_Q: +- return kVK_ANSI_Q; +- case Qt::Key_R: +- return kVK_ANSI_R; +- case Qt::Key_S: +- return kVK_ANSI_S; +- case Qt::Key_T: +- return kVK_ANSI_T; +- case Qt::Key_U: +- return kVK_ANSI_U; +- case Qt::Key_V: +- return kVK_ANSI_V; +- case Qt::Key_W: +- return kVK_ANSI_W; +- case Qt::Key_X: +- return kVK_ANSI_X; +- case Qt::Key_Y: +- return kVK_ANSI_Y; +- case Qt::Key_Z: +- return kVK_ANSI_Z; +- +- case Qt::Key_0: +- return kVK_ANSI_0; +- case Qt::Key_1: +- return kVK_ANSI_1; +- case Qt::Key_2: +- return kVK_ANSI_2; +- case Qt::Key_3: +- return kVK_ANSI_3; +- case Qt::Key_4: +- return kVK_ANSI_4; +- case Qt::Key_5: +- return kVK_ANSI_5; +- case Qt::Key_6: +- return kVK_ANSI_6; +- case Qt::Key_7: +- return kVK_ANSI_7; +- case Qt::Key_8: +- return kVK_ANSI_8; +- case Qt::Key_9: +- return kVK_ANSI_9; +- +- case Qt::Key_Equal: +- return kVK_ANSI_Equal; +- case Qt::Key_Minus: +- return kVK_ANSI_Minus; +- case Qt::Key_BracketRight: +- return kVK_ANSI_RightBracket; +- case Qt::Key_BracketLeft: +- return kVK_ANSI_LeftBracket; +- case Qt::Key_QuoteDbl: +- return kVK_ANSI_Quote; +- case Qt::Key_Semicolon: +- return kVK_ANSI_Semicolon; +- case Qt::Key_Backslash: +- return kVK_ANSI_Backslash; +- case Qt::Key_Comma: +- return kVK_ANSI_Comma; +- case Qt::Key_Slash: +- return kVK_ANSI_Slash; +- case Qt::Key_Period: +- return kVK_ANSI_Period; +- +- case Qt::Key_Shift: +- return kVK_Shift; +- case Qt::Key_Control: +- return kVK_Command; +- case Qt::Key_Backspace: +- return kVK_Delete; +- case Qt::Key_Tab: +- case Qt::Key_Backtab: +- return kVK_Tab; +- case Qt::Key_Enter: +- case Qt::Key_Return: +- return kVK_Return; +- case Qt::Key_CapsLock: +- return kVK_CapsLock; +- case Qt::Key_Escape: +- return kVK_Escape; +- case Qt::Key_Space: +- return kVK_Space; +- case Qt::Key_PageUp: +- return kVK_PageUp; +- case Qt::Key_PageDown: +- return kVK_PageDown; +- case Qt::Key_End: +- return kVK_End; +- case Qt::Key_Home: +- return kVK_Home; +- case Qt::Key_Left: +- return kVK_LeftArrow; +- case Qt::Key_Up: +- return kVK_UpArrow; +- case Qt::Key_Right: +- return kVK_RightArrow; +- case Qt::Key_Down: +- return kVK_DownArrow; +- case Qt::Key_Delete: +- return kVK_ForwardDelete; +- case Qt::Key_Help: +- return kVK_Help; +- +- case Qt::Key_F1: +- return kVK_F1; +- case Qt::Key_F2: +- return kVK_F2; +- case Qt::Key_F3: +- return kVK_F3; +- case Qt::Key_F4: +- return kVK_F4; +- case Qt::Key_F5: +- return kVK_F5; +- case Qt::Key_F6: +- return kVK_F6; +- case Qt::Key_F7: +- return kVK_F7; +- case Qt::Key_F8: +- return kVK_F8; +- case Qt::Key_F9: +- return kVK_F9; +- case Qt::Key_F10: +- return kVK_F10; +- case Qt::Key_F11: +- return kVK_F11; +- case Qt::Key_F12: +- return kVK_F12; +- case Qt::Key_F13: +- return kVK_F13; +- case Qt::Key_F14: +- return kVK_F14; +- case Qt::Key_F15: +- return kVK_F15; +- case Qt::Key_F16: +- return kVK_F16; +- +- default: +- Q_ASSERT(false); +- return INVALID_KEYCODE; +- } +-} +- +-// +-// Translate qt key modifiers to mac os modifiers +-// see: https://doc.qt.io/qt-5/osx-issues.html#special-keys +-// +-CGEventFlags AutoTypePlatformMac::qtToNativeModifiers(Qt::KeyboardModifiers modifiers, bool native) +-{ +- CGEventFlags nativeModifiers = CGEventFlags(0); +- +- CGEventFlags shiftMod = CGEventFlags(shiftKey); +- CGEventFlags cmdMod = CGEventFlags(cmdKey); +- CGEventFlags optionMod = CGEventFlags(optionKey); +- CGEventFlags controlMod = CGEventFlags(controlKey); +- +- if (native) { +- shiftMod = kCGEventFlagMaskShift; +- cmdMod = kCGEventFlagMaskCommand; +- optionMod = kCGEventFlagMaskAlternate; +- controlMod = kCGEventFlagMaskControl; +- } +- +- +- if (modifiers & Qt::ShiftModifier) { +- nativeModifiers = CGEventFlags(nativeModifiers | shiftMod); +- } +- if (modifiers & Qt::ControlModifier) { +- nativeModifiers = CGEventFlags(nativeModifiers | cmdMod); +- } +- if (modifiers & Qt::AltModifier) { +- nativeModifiers = CGEventFlags(nativeModifiers | optionMod); +- } +- if (modifiers & Qt::MetaModifier) { +- nativeModifiers = CGEventFlags(nativeModifiers | controlMod); +- } +- +- return nativeModifiers; +-} +- +-// +-// Get window layer/level +-// +-int AutoTypePlatformMac::windowLayer(CFDictionaryRef window) +-{ +- int layer; +- +- CFNumberRef layerRef = static_cast(::CFDictionaryGetValue(window, kCGWindowLayer)); +- if (layerRef != nullptr +- && ::CFNumberGetValue(layerRef, kCFNumberIntType, &layer)) { +- return layer; +- } +- +- return -1; +-} +- +-// +-// Get window title +-// +-QString AutoTypePlatformMac::windowTitle(CFDictionaryRef window) +-{ +- char buffer[MAX_WINDOW_TITLE_LENGTH]; +- QString title; +- +- CFStringRef titleRef = static_cast(::CFDictionaryGetValue(window, kCGWindowName)); +- if (titleRef != nullptr +- && ::CFStringGetCString(titleRef, buffer, MAX_WINDOW_TITLE_LENGTH, kCFStringEncodingUTF8)) { +- title = QString::fromUtf8(buffer); +- } +- +- return title; +-} +- +-// +-// Carbon hotkey handler +-// +-OSStatus AutoTypePlatformMac::hotkeyHandler(EventHandlerCallRef nextHandler, EventRef theEvent, void* userData) +-{ +- Q_UNUSED(nextHandler); +- +- // Determine if the user has given proper permissions to KeePassXC to perform Auto-Type +- if (!accessibilityChecked) { +- if (macUtils()->enableAccessibility() && macUtils()->enableScreenRecording()) { +- accessibilityChecked = true; +- } else { +- // Does not have required permissions to Auto-Type, ignore the keypress +- MessageBox::information(nullptr, +- tr("Permission Required"), +- tr("KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global " +- "Auto-Type. Screen Recording is necessary to use the window title to find entries. If you " +- "already granted permission, you may have to restart KeePassXC.")); +- return noErr; +- } +- } +- +- AutoTypePlatformMac* self = static_cast(userData); +- EventHotKeyID hotkeyId; +- +- if (::GetEventParameter(theEvent, kEventParamDirectObject, typeEventHotKeyID, nullptr, sizeof(hotkeyId), nullptr, &hotkeyId) == noErr +- && hotkeyId.id == HOTKEY_ID) { +- emit self->globalShortcutTriggered(); +- } +- +- return noErr; +-} +- +-// +-// ------------------------------ AutoTypeExecutorMac ------------------------------ +-// +- +-AutoTypeExecutorMac::AutoTypeExecutorMac(AutoTypePlatformMac* platform) +- : m_platform(platform) +-{ +-} +- +-void AutoTypeExecutorMac::execChar(AutoTypeChar* action) +-{ +- m_platform->sendChar(action->character, true); +- m_platform->sendChar(action->character, false); +-} +- +-void AutoTypeExecutorMac::execKey(AutoTypeKey* action) +-{ +- m_platform->sendKey(action->key, true); +- m_platform->sendKey(action->key, false); +-} +- +-void AutoTypeExecutorMac::execClearField(AutoTypeClearField* action = nullptr) +-{ +- Q_UNUSED(action); +- +- m_platform->sendKey(Qt::Key_Control, true, Qt::ControlModifier); +- m_platform->sendKey(Qt::Key_Up, true, Qt::ControlModifier); +- m_platform->sendKey(Qt::Key_Up, false, Qt::ControlModifier); +- m_platform->sendKey(Qt::Key_Control, false); +- usleep(25 * 1000); +- m_platform->sendKey(Qt::Key_Shift, true, Qt::ShiftModifier); +- m_platform->sendKey(Qt::Key_Control, true, Qt::ShiftModifier | Qt::ControlModifier); +- m_platform->sendKey(Qt::Key_Down, true, Qt::ShiftModifier | Qt::ControlModifier); +- m_platform->sendKey(Qt::Key_Down, false, Qt::ShiftModifier | Qt::ControlModifier); +- m_platform->sendKey(Qt::Key_Control, false, Qt::ShiftModifier); +- m_platform->sendKey(Qt::Key_Shift, false); +- usleep(25 * 1000); +- m_platform->sendKey(Qt::Key_Backspace, true); +- m_platform->sendKey(Qt::Key_Backspace, false); +- +- usleep(25 * 1000); +-} +diff -urNr keepassxc-2.6.4-orig/src/autotype/mac/AutoTypeMac.h keepassxc-2.6.4-patched/src/autotype/mac/AutoTypeMac.h +--- keepassxc-2.6.4-orig/src/autotype/mac/AutoTypeMac.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/autotype/mac/AutoTypeMac.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,80 +0,0 @@ +-/* +- * Copyright (C) 2016 Lennart Glauer +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_AUTOTYPEMAC_H +-#define KEEPASSX_AUTOTYPEMAC_H +- +-#include +-#include +-#include +- +-#include "autotype/AutoTypePlatformPlugin.h" +-#include "autotype/AutoTypeAction.h" +- +-class AutoTypePlatformMac : public QObject, public AutoTypePlatformInterface +-{ +- Q_OBJECT +- Q_PLUGIN_METADATA(IID "org.keepassx.AutoTypePlatformMac") +- Q_INTERFACES(AutoTypePlatformInterface) +- +-public: +- AutoTypePlatformMac(); +- bool isAvailable() override; +- QStringList windowTitles() override; +- WId activeWindow() override; +- QString activeWindowTitle() override; +- bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) override; +- void unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) override; +- int platformEventFilter(void* event) override; +- bool raiseWindow(WId pid) override; +- AutoTypeExecutor* createExecutor() override; +- +- bool hideOwnWindow() override; +- bool raiseOwnWindow() override; +- +- void sendChar(const QChar& ch, bool isKeyDown); +- void sendKey(Qt::Key key, bool isKeyDown, Qt::KeyboardModifiers modifiers); +- +-signals: +- void globalShortcutTriggered(); +- +-private: +- EventHotKeyRef m_hotkeyRef; +- EventHotKeyID m_hotkeyId; +- +- static uint16 qtToNativeKeyCode(Qt::Key key); +- static CGEventFlags qtToNativeModifiers(Qt::KeyboardModifiers modifiers, bool native); +- static int windowLayer(CFDictionaryRef window); +- static QString windowTitle(CFDictionaryRef window); +- static OSStatus hotkeyHandler(EventHandlerCallRef nextHandler, EventRef theEvent, void* userData); +-}; +- +-class AutoTypeExecutorMac : public AutoTypeExecutor +-{ +-public: +- explicit AutoTypeExecutorMac(AutoTypePlatformMac* platform); +- +- void execChar(AutoTypeChar* action) override; +- void execKey(AutoTypeKey* action) override; +- void execClearField(AutoTypeClearField* action) override; +- +-private: +- AutoTypePlatformMac* const m_platform; +-}; +- +-#endif // KEEPASSX_AUTOTYPEMAC_H +diff -urNr keepassxc-2.6.4-orig/src/autotype/mac/CMakeLists.txt keepassxc-2.6.4-patched/src/autotype/mac/CMakeLists.txt +--- keepassxc-2.6.4-orig/src/autotype/mac/CMakeLists.txt 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/autotype/mac/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +@@ -1,18 +0,0 @@ +-set(autotype_mac_SOURCES AutoTypeMac.cpp) +- +-add_library(keepassx-autotype-cocoa MODULE ${autotype_mac_SOURCES}) +-set_target_properties(keepassx-autotype-cocoa PROPERTIES LINK_FLAGS "-framework Foundation -framework AppKit -framework Carbon") +-target_link_libraries(keepassx-autotype-cocoa ${PROGNAME} Qt5::Core Qt5::Widgets) +- +-if(WITH_APP_BUNDLE) +- add_custom_command(TARGET keepassx-autotype-cocoa +- POST_BUILD +- COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/libkeepassx-autotype-cocoa.so ${PLUGIN_INSTALL_DIR} +- COMMAND ${MACDEPLOYQT_EXE} ${PROGNAME}.app -executable=${PLUGIN_INSTALL_DIR}/libkeepassx-autotype-cocoa.so -no-plugins +- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src +- COMMENT "Deploying autotype plugin") +-else() +- install(TARGETS keepassx-autotype-cocoa +- BUNDLE DESTINATION . COMPONENT Runtime +- LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR} COMPONENT Runtime) +-endif() +diff -urNr keepassxc-2.6.4-orig/src/autotype/ShortcutWidget.cpp keepassxc-2.6.4-patched/src/autotype/ShortcutWidget.cpp +--- keepassxc-2.6.4-orig/src/autotype/ShortcutWidget.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/autotype/ShortcutWidget.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,132 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "ShortcutWidget.h" +- +-#include +- +-#include "autotype/AutoType.h" +- +-ShortcutWidget::ShortcutWidget(QWidget* parent) +- : QLineEdit(parent) +- , m_key(static_cast(0)) +- , m_modifiers(nullptr) +- , m_locked(false) +-{ +- setReadOnly(true); +-} +- +-Qt::Key ShortcutWidget::key() const +-{ +- return m_key; +-} +- +-Qt::KeyboardModifiers ShortcutWidget::modifiers() const +-{ +- return m_modifiers; +-} +- +-void ShortcutWidget::setShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) +-{ +- m_key = key; +- m_modifiers = modifiers; +- m_locked = true; +- +- displayShortcut(m_key, m_modifiers); +- +- if (autoType()->registerGlobalShortcut(m_key, m_modifiers)) { +- setStyleSheet(""); +- } else { +- setStyleSheet("background-color: #FF9696;"); +- } +-} +- +-void ShortcutWidget::resetShortcut() +-{ +- m_key = static_cast(0); +- m_modifiers = nullptr; +- m_locked = false; +- autoType()->unregisterGlobalShortcut(); +-} +- +-void ShortcutWidget::keyPressEvent(QKeyEvent* event) +-{ +- keyEvent(event); +-} +- +-void ShortcutWidget::keyReleaseEvent(QKeyEvent* event) +-{ +- keyEvent(event); +-} +- +-void ShortcutWidget::keyEvent(QKeyEvent* event) +-{ +- event->accept(); +- +- if (event->type() != QEvent::KeyPress && event->type() != QEvent::KeyRelease) { +- return; +- } +- +- bool release = (event->type() == QEvent::KeyRelease); +- +- if (m_locked && release) { +- return; +- } +- +- Qt::Key key = static_cast(event->key()); +- +- if (key <= 0 || key == Qt::Key_unknown) { +- return; +- } +- +- Qt::KeyboardModifiers modifiers = event->modifiers() & (Qt::SHIFT | Qt::CTRL | Qt::ALT | Qt::META); +- +- bool keyIsModifier; +- switch (key) { +- case Qt::Key_Shift: +- case Qt::Key_Control: +- case Qt::Key_Meta: +- case Qt::Key_Alt: +- case Qt::Key_AltGr: +- keyIsModifier = true; +- break; +- default: +- keyIsModifier = false; +- } +- +- if (!release && !keyIsModifier) { +- if (modifiers != 0) { +- setShortcut(key, modifiers); +- } else { +- resetShortcut(); +- setStyleSheet(""); +- displayShortcut(key, modifiers); +- } +- } else { +- if (m_locked) { +- resetShortcut(); +- setStyleSheet(""); +- } +- +- displayShortcut(static_cast(0), modifiers); +- } +-} +- +-void ShortcutWidget::displayShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) +-{ +- setText(QKeySequence(key | modifiers).toString(QKeySequence::NativeText)); +-} +diff -urNr keepassxc-2.6.4-orig/src/autotype/ShortcutWidget.h keepassxc-2.6.4-patched/src/autotype/ShortcutWidget.h +--- keepassxc-2.6.4-orig/src/autotype/ShortcutWidget.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/autotype/ShortcutWidget.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,47 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_SHORTCUTWIDGET_H +-#define KEEPASSX_SHORTCUTWIDGET_H +- +-#include +- +-class ShortcutWidget : public QLineEdit +-{ +- Q_OBJECT +- +-public: +- explicit ShortcutWidget(QWidget* parent = nullptr); +- Qt::Key key() const; +- Qt::KeyboardModifiers modifiers() const; +- void setShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers); +- +-protected: +- void keyPressEvent(QKeyEvent* event) override; +- void keyReleaseEvent(QKeyEvent* event) override; +- +-private: +- void keyEvent(QKeyEvent* event); +- void displayShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers); +- void resetShortcut(); +- +- Qt::Key m_key; +- Qt::KeyboardModifiers m_modifiers; +- bool m_locked; +-}; +- +-#endif // KEEPASSX_SHORTCUTWIDGET_H +diff -urNr keepassxc-2.6.4-orig/src/autotype/test/AutoTypeTest.cpp keepassxc-2.6.4-patched/src/autotype/test/AutoTypeTest.cpp +--- keepassxc-2.6.4-orig/src/autotype/test/AutoTypeTest.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/autotype/test/AutoTypeTest.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,143 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "AutoTypeTest.h" +- +-bool AutoTypePlatformTest::isAvailable() +-{ +- return true; +-} +- +-QString AutoTypePlatformTest::keyToString(Qt::Key key) +-{ +- return QString("[Key0x%1]").arg(key, 0, 16); +-} +- +-QStringList AutoTypePlatformTest::windowTitles() +-{ +- return QStringList(); +-} +- +-WId AutoTypePlatformTest::activeWindow() +-{ +- return 0; +-} +- +-QString AutoTypePlatformTest::activeWindowTitle() +-{ +- return m_activeWindowTitle; +-} +- +-bool AutoTypePlatformTest::registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) +-{ +- Q_UNUSED(key); +- Q_UNUSED(modifiers); +- +- return true; +-} +- +-void AutoTypePlatformTest::unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) +-{ +- Q_UNUSED(key); +- Q_UNUSED(modifiers); +-} +- +-int AutoTypePlatformTest::platformEventFilter(void* event) +-{ +- Q_UNUSED(event); +- +- return -1; +-} +- +-AutoTypeExecutor* AutoTypePlatformTest::createExecutor() +-{ +- return new AutoTypeExecutorTest(this); +-} +- +-void AutoTypePlatformTest::triggerGlobalAutoType() +-{ +- emit globalShortcutTriggered(); +-} +- +-void AutoTypePlatformTest::setActiveWindowTitle(const QString& title) +-{ +- m_activeWindowTitle = title; +-} +- +-QString AutoTypePlatformTest::actionChars() +-{ +- return m_actionChars; +-} +- +-int AutoTypePlatformTest::actionCount() +-{ +- return m_actionList.size(); +-} +- +-void AutoTypePlatformTest::clearActions() +-{ +- qDeleteAll(m_actionList); +- m_actionList.clear(); +- +- m_actionChars.clear(); +-} +- +-void AutoTypePlatformTest::addActionChar(AutoTypeChar* action) +-{ +- m_actionList.append(action->clone()); +- m_actionChars += action->character; +-} +- +-void AutoTypePlatformTest::addActionKey(AutoTypeKey* action) +-{ +- m_actionList.append(action->clone()); +- m_actionChars.append(keyToString(action->key)); +-} +- +-bool AutoTypePlatformTest::raiseWindow(WId window) +-{ +- Q_UNUSED(window); +- +- return false; +-} +- +-#if defined(Q_OS_MACOS) +-bool AutoTypePlatformTest::hideOwnWindow() +-{ +- return false; +-} +- +-bool AutoTypePlatformTest::raiseOwnWindow() +-{ +- return false; +-} +-#endif +- +-AutoTypeExecutorTest::AutoTypeExecutorTest(AutoTypePlatformTest* platform) +- : m_platform(platform) +-{ +-} +- +-void AutoTypeExecutorTest::execChar(AutoTypeChar* action) +-{ +- m_platform->addActionChar(action); +-} +- +-void AutoTypeExecutorTest::execKey(AutoTypeKey* action) +-{ +- m_platform->addActionKey(action); +-} +diff -urNr keepassxc-2.6.4-orig/src/autotype/test/AutoTypeTest.h keepassxc-2.6.4-patched/src/autotype/test/AutoTypeTest.h +--- keepassxc-2.6.4-orig/src/autotype/test/AutoTypeTest.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/autotype/test/AutoTypeTest.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,82 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_AUTOTYPETEST_H +-#define KEEPASSX_AUTOTYPETEST_H +- +-#include +- +-#include "autotype/AutoTypeAction.h" +-#include "autotype/AutoTypePlatformPlugin.h" +-#include "autotype/test/AutoTypeTestInterface.h" +- +-class AutoTypePlatformTest : public QObject, public AutoTypePlatformInterface, public AutoTypeTestInterface +-{ +- Q_OBJECT +- Q_PLUGIN_METADATA(IID "org.keepassx.AutoTypePlatformInterface") +- Q_INTERFACES(AutoTypePlatformInterface AutoTypeTestInterface) +- +-public: +- QString keyToString(Qt::Key key) override; +- +- bool isAvailable() override; +- QStringList windowTitles() override; +- WId activeWindow() override; +- QString activeWindowTitle() override; +- bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) override; +- void unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) override; +- int platformEventFilter(void* event) override; +- bool raiseWindow(WId window) override; +- AutoTypeExecutor* createExecutor() override; +- +-#if defined(Q_OS_MACOS) +- bool hideOwnWindow() override; +- bool raiseOwnWindow() override; +-#endif +- +- void triggerGlobalAutoType() override; +- void setActiveWindowTitle(const QString& title) override; +- +- QString actionChars() override; +- int actionCount() override; +- void clearActions() override; +- +- void addActionChar(AutoTypeChar* action); +- void addActionKey(AutoTypeKey* action); +- +-signals: +- void globalShortcutTriggered(); +- +-private: +- QString m_activeWindowTitle; +- QList m_actionList; +- QString m_actionChars; +-}; +- +-class AutoTypeExecutorTest : public AutoTypeExecutor +-{ +-public: +- explicit AutoTypeExecutorTest(AutoTypePlatformTest* platform); +- +- void execChar(AutoTypeChar* action) override; +- void execKey(AutoTypeKey* action) override; +- +-private: +- AutoTypePlatformTest* const m_platform; +-}; +- +-#endif // KEEPASSX_AUTOTYPETEST_H +diff -urNr keepassxc-2.6.4-orig/src/autotype/test/AutoTypeTestInterface.h keepassxc-2.6.4-patched/src/autotype/test/AutoTypeTestInterface.h +--- keepassxc-2.6.4-orig/src/autotype/test/AutoTypeTestInterface.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/autotype/test/AutoTypeTestInterface.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,41 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_AUTOTYPETESTINTERFACE_H +-#define KEEPASSX_AUTOTYPETESTINTERFACE_H +- +-#include "autotype/AutoTypeAction.h" +- +-class AutoTypeTestInterface +-{ +-public: +- virtual ~AutoTypeTestInterface() +- { +- } +- virtual void triggerGlobalAutoType() = 0; +- virtual void setActiveWindowTitle(const QString& title) = 0; +- +- virtual QString actionChars() = 0; +- virtual int actionCount() = 0; +- virtual void clearActions() = 0; +- +- virtual QString keyToString(Qt::Key key) = 0; +-}; +- +-Q_DECLARE_INTERFACE(AutoTypeTestInterface, "org.keepassx.AutoTypeTestInterface/1") +- +-#endif // KEEPASSX_AUTOTYPETESTINTERFACE_H +diff -urNr keepassxc-2.6.4-orig/src/autotype/test/CMakeLists.txt keepassxc-2.6.4-patched/src/autotype/test/CMakeLists.txt +--- keepassxc-2.6.4-orig/src/autotype/test/CMakeLists.txt 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/autotype/test/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +@@ -1,4 +0,0 @@ +-set(autotype_test_SOURCES AutoTypeTest.cpp) +- +-add_library(keepassx-autotype-test MODULE ${autotype_test_SOURCES}) +-target_link_libraries(keepassx-autotype-test keepassx_core ${autotype_LIB} Qt5::Core Qt5::Widgets) +diff -urNr keepassxc-2.6.4-orig/src/autotype/WildcardMatcher.cpp keepassxc-2.6.4-patched/src/autotype/WildcardMatcher.cpp +--- keepassxc-2.6.4-orig/src/autotype/WildcardMatcher.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/autotype/WildcardMatcher.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,96 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "WildcardMatcher.h" +- +-#include +-#include +- +-const QChar WildcardMatcher::Wildcard = '*'; +-const Qt::CaseSensitivity WildcardMatcher::Sensitivity = Qt::CaseInsensitive; +- +-WildcardMatcher::WildcardMatcher(QString text) +- : m_text(std::move(text)) +-{ +-} +- +-bool WildcardMatcher::match(const QString& pattern) +-{ +- m_pattern = pattern; +- +- if (patternContainsWildcard()) { +- return matchWithWildcards(); +- } else { +- return patternEqualsText(); +- } +-} +- +-bool WildcardMatcher::patternContainsWildcard() +-{ +- return m_pattern.contains(Wildcard); +-} +- +-bool WildcardMatcher::patternEqualsText() +-{ +- return m_text.compare(m_pattern, Sensitivity) == 0; +-} +- +-bool WildcardMatcher::matchWithWildcards() +-{ +- QStringList parts = m_pattern.split(Wildcard, QString::KeepEmptyParts); +- Q_ASSERT(parts.size() >= 2); +- +- if (startOrEndDoesNotMatch(parts)) { +- return false; +- } +- +- return partsMatch(parts); +-} +- +-bool WildcardMatcher::startOrEndDoesNotMatch(const QStringList& parts) +-{ +- return !m_text.startsWith(parts.first(), Sensitivity) || !m_text.endsWith(parts.last(), Sensitivity); +-} +- +-bool WildcardMatcher::partsMatch(const QStringList& parts) +-{ +- int index = 0; +- for (const QString& part : parts) { +- int matchIndex = getMatchIndex(part, index); +- if (noMatchFound(matchIndex)) { +- return false; +- } +- index = calculateNewIndex(matchIndex, part.length()); +- } +- +- return true; +-} +- +-int WildcardMatcher::getMatchIndex(const QString& part, int startIndex) +-{ +- return m_text.indexOf(part, startIndex, Sensitivity); +-} +- +-bool WildcardMatcher::noMatchFound(int index) +-{ +- return index == -1; +-} +- +-int WildcardMatcher::calculateNewIndex(int matchIndex, int partLength) +-{ +- return matchIndex + partLength; +-} +diff -urNr keepassxc-2.6.4-orig/src/autotype/WildcardMatcher.h keepassxc-2.6.4-patched/src/autotype/WildcardMatcher.h +--- keepassxc-2.6.4-orig/src/autotype/WildcardMatcher.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/autotype/WildcardMatcher.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,46 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_WILDCARDMATCHER_H +-#define KEEPASSX_WILDCARDMATCHER_H +- +-#include +- +-class WildcardMatcher +-{ +-public: +- explicit WildcardMatcher(QString text); +- bool match(const QString& pattern); +- +- static const QChar Wildcard; +- +-private: +- bool patternEqualsText(); +- bool patternContainsWildcard(); +- bool matchWithWildcards(); +- bool startOrEndDoesNotMatch(const QStringList& parts); +- bool partsMatch(const QStringList& parts); +- int getMatchIndex(const QString& part, int startIndex); +- bool noMatchFound(int index); +- int calculateNewIndex(int matchIndex, int partLength); +- +- static const Qt::CaseSensitivity Sensitivity; +- const QString m_text; +- QString m_pattern; +-}; +- +-#endif // KEEPASSX_WILDCARDMATCHER_H +diff -urNr keepassxc-2.6.4-orig/src/autotype/windows/AutoTypeWindows.cpp keepassxc-2.6.4-patched/src/autotype/windows/AutoTypeWindows.cpp +--- keepassxc-2.6.4-orig/src/autotype/windows/AutoTypeWindows.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/autotype/windows/AutoTypeWindows.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,547 +0,0 @@ +-/* +- * Copyright (C) 2016 Lennart Glauer +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "AutoTypeWindows.h" +- +-#include +- +-#define HOTKEY_ID 1 +-#define MAX_WINDOW_TITLE_LENGTH 1024 +- +-#define MOD_NOREPEAT 0x4000 // Missing in MinGW +- +-// +-// Test if os version is Windows 7 or later +-// +-bool AutoTypePlatformWin::isAvailable() +-{ +- return IsWindows7OrGreater(); +-} +- +-// +-// Get list of all visible window titles +-// +-QStringList AutoTypePlatformWin::windowTitles() +-{ +- QStringList list; +- +- ::EnumWindows(AutoTypePlatformWin::windowTitleEnumProc, reinterpret_cast(&list)); +- +- return list; +-} +- +-// +-// Get foreground window hwnd +-// +-WId AutoTypePlatformWin::activeWindow() +-{ +- return reinterpret_cast(::GetForegroundWindow()); +-} +- +-// +-// Get foreground window title +-// +-QString AutoTypePlatformWin::activeWindowTitle() +-{ +- return windowTitle(::GetForegroundWindow()); +-} +- +-// +-// Register global hotkey +-// +-bool AutoTypePlatformWin::registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) +-{ +- DWORD nativeKeyCode = qtToNativeKeyCode(key); +- if (nativeKeyCode < 1 || nativeKeyCode > 254) { +- return false; +- } +- DWORD nativeModifiers = qtToNativeModifiers(modifiers); +- if (!::RegisterHotKey(nullptr, HOTKEY_ID, nativeModifiers | MOD_NOREPEAT, nativeKeyCode)) { +- return false; +- } +- +- return true; +-} +- +-// +-// Unregister global hotkey +-// +-void AutoTypePlatformWin::unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) +-{ +- Q_UNUSED(key); +- Q_UNUSED(modifiers); +- +- ::UnregisterHotKey(nullptr, HOTKEY_ID); +-} +- +-// +-// Native event filter +-// +-int AutoTypePlatformWin::platformEventFilter(void* event) +-{ +- MSG* msg = static_cast(event); +- +- if (msg->message == WM_HOTKEY && msg->wParam == HOTKEY_ID) { +- emit globalShortcutTriggered(); +- return 1; +- } +- +- return -1; +-} +- +-AutoTypeExecutor* AutoTypePlatformWin::createExecutor() +-{ +- return new AutoTypeExecutorWin(this); +-} +- +-// +-// Set foreground window +-// +-bool AutoTypePlatformWin::raiseWindow(WId window) +-{ +- HWND hwnd = reinterpret_cast(window); +- +- return ::BringWindowToTop(hwnd) && ::SetForegroundWindow(hwnd); +-} +- +-// +-// Send unicode character to foreground window +-// +-void AutoTypePlatformWin::sendChar(const QChar& ch, bool isKeyDown) +-{ +- DWORD nativeFlags = KEYEVENTF_UNICODE; +- if (!isKeyDown) { +- nativeFlags |= KEYEVENTF_KEYUP; +- } +- +- INPUT in; +- in.type = INPUT_KEYBOARD; +- in.ki.wVk = 0; +- in.ki.wScan = ch.unicode(); +- in.ki.dwFlags = nativeFlags; +- in.ki.time = 0; +- in.ki.dwExtraInfo = ::GetMessageExtraInfo(); +- +- ::SendInput(1, &in, sizeof(INPUT)); +-} +- +-// +-// Send virtual key code to foreground window +-// +-void AutoTypePlatformWin::sendKey(Qt::Key key, bool isKeyDown) +-{ +- DWORD nativeKeyCode = qtToNativeKeyCode(key); +- if (nativeKeyCode < 1 || nativeKeyCode > 254) { +- return; +- } +- DWORD nativeFlags = 0; +- if (isExtendedKey(nativeKeyCode)) { +- nativeFlags |= KEYEVENTF_EXTENDEDKEY; +- } +- if (!isKeyDown) { +- nativeFlags |= KEYEVENTF_KEYUP; +- } +- +- INPUT in; +- in.type = INPUT_KEYBOARD; +- in.ki.wVk = LOWORD(nativeKeyCode); +- in.ki.wScan = LOWORD(::MapVirtualKeyW(nativeKeyCode, MAPVK_VK_TO_VSC)); +- in.ki.dwFlags = nativeFlags; +- in.ki.time = 0; +- in.ki.dwExtraInfo = ::GetMessageExtraInfo(); +- +- ::SendInput(1, &in, sizeof(INPUT)); +-} +- +-// clang-format off +-// +-// Translate qt key code to windows virtual key code +-// see: https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731%28v=vs.85%29.aspx +-// +-DWORD AutoTypePlatformWin::qtToNativeKeyCode(Qt::Key key) +-{ +- switch (key) { +- case Qt::Key_Backspace: +- return VK_BACK; // 0x08 +- case Qt::Key_Tab: +- case Qt::Key_Backtab: +- return VK_TAB; // 0x09 +- case Qt::Key_Clear: +- return VK_CLEAR; // 0x0C +- case Qt::Key_Enter: +- case Qt::Key_Return: +- return VK_RETURN; // 0x0D +- case Qt::Key_Shift: +- return VK_SHIFT; // 0x10 +- case Qt::Key_Control: +- return VK_CONTROL; // 0x11 +- case Qt::Key_Pause: +- return VK_PAUSE; // 0x13 +- case Qt::Key_CapsLock: +- return VK_CAPITAL; // 0x14 +- case Qt::Key_Escape: +- return VK_ESCAPE; // 0x1B +- case Qt::Key_Space: +- return VK_SPACE; // 0x20 +- case Qt::Key_PageUp: +- return VK_PRIOR; // 0x21 +- case Qt::Key_PageDown: +- return VK_NEXT; // 0x22 +- case Qt::Key_End: +- return VK_END; // 0x23 +- case Qt::Key_Home: +- return VK_HOME; // 0x24 +- case Qt::Key_Left: +- return VK_LEFT; // 0x25 +- case Qt::Key_Up: +- return VK_UP; // 0x26 +- case Qt::Key_Right: +- return VK_RIGHT; // 0x27 +- case Qt::Key_Down: +- return VK_DOWN; // 0x28 +- case Qt::Key_Print: +- return VK_SNAPSHOT; // 0x2C +- case Qt::Key_Insert: +- return VK_INSERT; // 0x2D +- case Qt::Key_Delete: +- return VK_DELETE; // 0x2E +- case Qt::Key_Help: +- return VK_HELP; // 0x2F +- +- case Qt::Key_0: +- return 0x30; // 0x30 +- case Qt::Key_1: +- return 0x31; // 0x31 +- case Qt::Key_2: +- return 0x32; // 0x32 +- case Qt::Key_3: +- return 0x33; // 0x33 +- case Qt::Key_4: +- return 0x34; // 0x34 +- case Qt::Key_5: +- return 0x35; // 0x35 +- case Qt::Key_6: +- return 0x36; // 0x36 +- case Qt::Key_7: +- return 0x37; // 0x37 +- case Qt::Key_8: +- return 0x38; // 0x38 +- case Qt::Key_9: +- return 0x39; // 0x39 +- +- case Qt::Key_A: +- return 0x41; // 0x41 +- case Qt::Key_B: +- return 0x42; // 0x42 +- case Qt::Key_C: +- return 0x43; // 0x43 +- case Qt::Key_D: +- return 0x44; // 0x44 +- case Qt::Key_E: +- return 0x45; // 0x45 +- case Qt::Key_F: +- return 0x46; // 0x46 +- case Qt::Key_G: +- return 0x47; // 0x47 +- case Qt::Key_H: +- return 0x48; // 0x48 +- case Qt::Key_I: +- return 0x49; // 0x49 +- case Qt::Key_J: +- return 0x4A; // 0x4A +- case Qt::Key_K: +- return 0x4B; // 0x4B +- case Qt::Key_L: +- return 0x4C; // 0x4C +- case Qt::Key_M: +- return 0x4D; // 0x4D +- case Qt::Key_N: +- return 0x4E; // 0x4E +- case Qt::Key_O: +- return 0x4F; // 0x4F +- case Qt::Key_P: +- return 0x50; // 0x50 +- case Qt::Key_Q: +- return 0x51; // 0x51 +- case Qt::Key_R: +- return 0x52; // 0x52 +- case Qt::Key_S: +- return 0x53; // 0x53 +- case Qt::Key_T: +- return 0x54; // 0x54 +- case Qt::Key_U: +- return 0x55; // 0x55 +- case Qt::Key_V: +- return 0x56; // 0x56 +- case Qt::Key_W: +- return 0x57; // 0x57 +- case Qt::Key_X: +- return 0x58; // 0x58 +- case Qt::Key_Y: +- return 0x59; // 0x59 +- case Qt::Key_Z: +- return 0x5A; // 0x5A +- +- case Qt::Key_F1: +- return VK_F1; // 0x70 +- case Qt::Key_F2: +- return VK_F2; // 0x71 +- case Qt::Key_F3: +- return VK_F3; // 0x72 +- case Qt::Key_F4: +- return VK_F4; // 0x73 +- case Qt::Key_F5: +- return VK_F5; // 0x74 +- case Qt::Key_F6: +- return VK_F6; // 0x75 +- case Qt::Key_F7: +- return VK_F7; // 0x76 +- case Qt::Key_F8: +- return VK_F8; // 0x77 +- case Qt::Key_F9: +- return VK_F9; // 0x78 +- case Qt::Key_F10: +- return VK_F10; // 0x79 +- case Qt::Key_F11: +- return VK_F11; // 0x7A +- case Qt::Key_F12: +- return VK_F12; // 0x7B +- case Qt::Key_F13: +- return VK_F13; // 0x7C +- case Qt::Key_F14: +- return VK_F14; // 0x7D +- case Qt::Key_F15: +- return VK_F15; // 0x7E +- case Qt::Key_F16: +- return VK_F16; // 0x7F +- case Qt::Key_F17: +- return VK_F17; // 0x80 +- case Qt::Key_F18: +- return VK_F18; // 0x81 +- case Qt::Key_F19: +- return VK_F19; // 0x82 +- case Qt::Key_F20: +- return VK_F20; // 0x83 +- case Qt::Key_F21: +- return VK_F21; // 0x84 +- case Qt::Key_F22: +- return VK_F22; // 0x85 +- case Qt::Key_F23: +- return VK_F23; // 0x86 +- case Qt::Key_F24: +- return VK_F24; // 0x87 +- +- case Qt::Key_NumLock: +- return VK_NUMLOCK; // 0x90 +- case Qt::Key_ScrollLock: +- return VK_SCROLL; // 0x91 +- +- case Qt::Key_Exclam: // ! +- case Qt::Key_QuoteDbl: // " +- case Qt::Key_NumberSign: // # +- case Qt::Key_Dollar: // $ +- case Qt::Key_Percent: // % +- case Qt::Key_Ampersand: // & +- case Qt::Key_Apostrophe: // ' +- case Qt::Key_ParenLeft: // ( +- case Qt::Key_ParenRight: // ) +- case Qt::Key_Asterisk: // * +- case Qt::Key_Plus: // + +- case Qt::Key_Comma: // , +- case Qt::Key_Minus: // - +- case Qt::Key_Period: // . +- case Qt::Key_Slash: // / +- case Qt::Key_Colon: // : +- case Qt::Key_Semicolon: // ; +- case Qt::Key_Less: // < +- case Qt::Key_Equal: // = +- case Qt::Key_Greater: // > +- case Qt::Key_Question: // ? +- case Qt::Key_BracketLeft: // [ +- case Qt::Key_Backslash: // '\' +- case Qt::Key_BracketRight: // ] +- case Qt::Key_AsciiCircum: // ^ +- case Qt::Key_Underscore: // _ +- case Qt::Key_QuoteLeft: // ` +- case Qt::Key_BraceLeft: // { +- case Qt::Key_Bar: // | +- case Qt::Key_BraceRight: // } +- case Qt::Key_AsciiTilde: // ~ +- return LOBYTE(::VkKeyScanExW(key, ::GetKeyboardLayout(0))); +- +- default: +- Q_ASSERT(false); +- return 0; +- } +-} +- +-// +-// The extended-key flag indicates whether the keystroke message originated +-// from one of the additional keys on the enhanced keyboard +-// see: https://msdn.microsoft.com/en-us/library/windows/desktop/ms646267%28v=vs.85%29.aspx#EXTENDED_KEY_FLAG +-// +-BOOL AutoTypePlatformWin::isExtendedKey(DWORD nativeKeyCode) +-{ +- switch (nativeKeyCode) { +- case VK_RMENU: +- case VK_RCONTROL: +- case VK_INSERT: +- case VK_DELETE: +- case VK_HOME: +- case VK_END: +- case VK_PRIOR: +- case VK_NEXT: +- case VK_LEFT: +- case VK_UP: +- case VK_RIGHT: +- case VK_DOWN: +- case VK_NUMLOCK: +- case VK_CANCEL: +- case VK_SNAPSHOT: +- case VK_DIVIDE: +- case VK_LWIN: +- case VK_RWIN: +- case VK_APPS: +- return TRUE; +- default: +- return FALSE; +- } +-} +-// clang-format on +- +-// +-// Translate qt key modifiers to windows modifiers +-// +-DWORD AutoTypePlatformWin::qtToNativeModifiers(Qt::KeyboardModifiers modifiers) +-{ +- DWORD nativeModifiers = 0; +- +- if (modifiers & Qt::ShiftModifier) { +- nativeModifiers |= MOD_SHIFT; +- } +- if (modifiers & Qt::ControlModifier) { +- nativeModifiers |= MOD_CONTROL; +- } +- if (modifiers & Qt::AltModifier) { +- nativeModifiers |= MOD_ALT; +- } +- if (modifiers & Qt::MetaModifier) { +- nativeModifiers |= MOD_WIN; +- } +- +- return nativeModifiers; +-} +- +-// +-// Test if window is in Alt+Tab list +-// see: https://blogs.msdn.microsoft.com/oldnewthing/20071008-00/?p=24863 +-// +-BOOL AutoTypePlatformWin::isAltTabWindow(HWND hwnd) +-{ +- if (!::IsWindowVisible(hwnd)) { +- return FALSE; +- } +- +- // Start at the root owner +- HWND hwndWalk = ::GetAncestor(hwnd, GA_ROOTOWNER); +- HWND hwndTry; +- +- // See if we are the last active visible popup +- while ((hwndTry = ::GetLastActivePopup(hwndWalk)) != hwndWalk) { +- if (::IsWindowVisible(hwndTry)) { +- break; +- } +- hwndWalk = hwndTry; +- } +- +- return hwndWalk == hwnd; +-} +- +-// +-// Window title enum proc +-// +-BOOL CALLBACK AutoTypePlatformWin::windowTitleEnumProc(_In_ HWND hwnd, _In_ LPARAM lParam) +-{ +- if (!isAltTabWindow(hwnd)) { +- // Skip window +- return TRUE; +- } +- +- QStringList* list = reinterpret_cast(lParam); +- QString title = windowTitle(hwnd); +- +- if (!title.isEmpty()) { +- list->append(title); +- } +- +- return TRUE; +-} +- +-// +-// Get window title +-// +-QString AutoTypePlatformWin::windowTitle(HWND hwnd) +-{ +- wchar_t title[MAX_WINDOW_TITLE_LENGTH]; +- int count = ::GetWindowTextW(hwnd, title, MAX_WINDOW_TITLE_LENGTH); +- +- return QString::fromUtf16(reinterpret_cast(title), count); +-} +- +-// +-// ------------------------------ AutoTypeExecutorWin ------------------------------ +-// +- +-AutoTypeExecutorWin::AutoTypeExecutorWin(AutoTypePlatformWin* platform) +- : m_platform(platform) +-{ +-} +- +-void AutoTypeExecutorWin::execChar(AutoTypeChar* action) +-{ +- m_platform->sendChar(action->character, true); +- m_platform->sendChar(action->character, false); +-} +- +-void AutoTypeExecutorWin::execKey(AutoTypeKey* action) +-{ +- m_platform->sendKey(action->key, true); +- m_platform->sendKey(action->key, false); +-} +- +-void AutoTypeExecutorWin::execClearField(AutoTypeClearField* action = nullptr) +-{ +- Q_UNUSED(action); +- +- m_platform->sendKey(Qt::Key_Control, true); +- m_platform->sendKey(Qt::Key_Home, true); +- m_platform->sendKey(Qt::Key_Home, false); +- m_platform->sendKey(Qt::Key_Control, false); +- ::Sleep(25); +- m_platform->sendKey(Qt::Key_Control, true); +- m_platform->sendKey(Qt::Key_Shift, true); +- m_platform->sendKey(Qt::Key_End, true); +- m_platform->sendKey(Qt::Key_End, false); +- m_platform->sendKey(Qt::Key_Shift, false); +- m_platform->sendKey(Qt::Key_Control, false); +- ::Sleep(25); +- m_platform->sendKey(Qt::Key_Backspace, true); +- m_platform->sendKey(Qt::Key_Backspace, false); +- +- ::Sleep(25); +-} +diff -urNr keepassxc-2.6.4-orig/src/autotype/windows/AutoTypeWindows.h keepassxc-2.6.4-patched/src/autotype/windows/AutoTypeWindows.h +--- keepassxc-2.6.4-orig/src/autotype/windows/AutoTypeWindows.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/autotype/windows/AutoTypeWindows.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,73 +0,0 @@ +-/* +- * Copyright (C) 2016 Lennart Glauer +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_AUTOTYPEWINDOWS_H +-#define KEEPASSX_AUTOTYPEWINDOWS_H +- +-#include +-#include +- +-#include "autotype/AutoTypeAction.h" +-#include "autotype/AutoTypePlatformPlugin.h" +- +-class AutoTypePlatformWin : public QObject, public AutoTypePlatformInterface +-{ +- Q_OBJECT +- Q_PLUGIN_METADATA(IID "org.keepassx.AutoTypePlatformWindows") +- Q_INTERFACES(AutoTypePlatformInterface) +- +-public: +- bool isAvailable() override; +- QStringList windowTitles() override; +- WId activeWindow() override; +- QString activeWindowTitle() override; +- bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) override; +- void unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) override; +- int platformEventFilter(void* event) override; +- bool raiseWindow(WId window) override; +- AutoTypeExecutor* createExecutor() override; +- +- void sendChar(const QChar& ch, bool isKeyDown); +- void sendKey(Qt::Key key, bool isKeyDown); +- +-signals: +- void globalShortcutTriggered(); +- +-private: +- static DWORD qtToNativeKeyCode(Qt::Key key); +- static DWORD qtToNativeModifiers(Qt::KeyboardModifiers modifiers); +- static BOOL isExtendedKey(DWORD nativeKeyCode); +- static BOOL isAltTabWindow(HWND hwnd); +- static BOOL CALLBACK windowTitleEnumProc(_In_ HWND hwnd, _In_ LPARAM lParam); +- static QString windowTitle(HWND hwnd); +-}; +- +-class AutoTypeExecutorWin : public AutoTypeExecutor +-{ +-public: +- explicit AutoTypeExecutorWin(AutoTypePlatformWin* platform); +- +- void execChar(AutoTypeChar* action) override; +- void execKey(AutoTypeKey* action) override; +- void execClearField(AutoTypeClearField* action) override; +- +-private: +- AutoTypePlatformWin* const m_platform; +-}; +- +-#endif // KEEPASSX_AUTOTYPEWINDOWS_H +diff -urNr keepassxc-2.6.4-orig/src/autotype/windows/CMakeLists.txt keepassxc-2.6.4-patched/src/autotype/windows/CMakeLists.txt +--- keepassxc-2.6.4-orig/src/autotype/windows/CMakeLists.txt 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/autotype/windows/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7 +0,0 @@ +-set(autotype_win_SOURCES AutoTypeWindows.cpp) +- +-add_library(keepassx-autotype-windows MODULE ${autotype_win_SOURCES}) +-target_link_libraries(keepassx-autotype-windows keepassx_core ${autotype_LIB} Qt5::Core Qt5::Widgets) +-install(TARGETS keepassx-autotype-windows +- BUNDLE DESTINATION . COMPONENT Runtime +- LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR} COMPONENT Runtime) +diff -urNr keepassxc-2.6.4-orig/src/autotype/WindowSelectComboBox.cpp keepassxc-2.6.4-patched/src/autotype/WindowSelectComboBox.cpp +--- keepassxc-2.6.4-orig/src/autotype/WindowSelectComboBox.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/autotype/WindowSelectComboBox.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,68 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "WindowSelectComboBox.h" +- +-#include +- +-#include "autotype/AutoType.h" +- +-WindowSelectComboBox::WindowSelectComboBox(QWidget* parent) +- : QComboBox(parent) +-{ +- setEditable(true); +- setInsertPolicy(QComboBox::NoInsert); +- setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed, QSizePolicy::ComboBox)); +- +- // first item is always the current content of the line edit +- insertItem(0, ""); +-} +- +-void WindowSelectComboBox::refreshWindowList() +-{ +- model()->setData(model()->index(0, 0), lineEdit()->text()); +- +- while (count() > 1) { +- removeItem(1); +- } +- insertItems(1, autoType()->windowTitles()); +-} +- +-void WindowSelectComboBox::showPopup() +-{ +- if (lineEdit()->isReadOnly()) { +- return; +- } +- +- refreshWindowList(); +- +- QComboBox::showPopup(); +-} +- +-QSize WindowSelectComboBox::sizeHint() const +-{ +- QSize size = lineEdit()->sizeHint(); +- size.setHeight(qMax(size.height(), QComboBox::sizeHint().height())); +- return size; +-} +- +-QSize WindowSelectComboBox::minimumSizeHint() const +-{ +- QSize size = lineEdit()->minimumSizeHint(); +- size.setHeight(qMax(size.height(), QComboBox::minimumSizeHint().height())); +- return size; +-} +diff -urNr keepassxc-2.6.4-orig/src/autotype/WindowSelectComboBox.h keepassxc-2.6.4-patched/src/autotype/WindowSelectComboBox.h +--- keepassxc-2.6.4-orig/src/autotype/WindowSelectComboBox.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/autotype/WindowSelectComboBox.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,36 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_WINDOWSELECTCOMBOBOX_H +-#define KEEPASSX_WINDOWSELECTCOMBOBOX_H +- +-#include +- +-class WindowSelectComboBox : public QComboBox +-{ +- Q_OBJECT +- +-public: +- explicit WindowSelectComboBox(QWidget* parent = nullptr); +- void refreshWindowList(); +- +- void showPopup() override; +- QSize sizeHint() const override; +- QSize minimumSizeHint() const override; +-}; +- +-#endif // KEEPASSX_WINDOWSELECTCOMBOBOX_H +diff -urNr keepassxc-2.6.4-orig/src/autotype/xcb/AutoTypeXCB.cpp keepassxc-2.6.4-patched/src/autotype/xcb/AutoTypeXCB.cpp +--- keepassxc-2.6.4-orig/src/autotype/xcb/AutoTypeXCB.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/autotype/xcb/AutoTypeXCB.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,856 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * Copyright (C) 2000-2008 Tom Sato +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "AutoTypeXCB.h" +-#include "KeySymMap.h" +-#include "core/Tools.h" +- +-#include +-#include +- +-bool AutoTypePlatformX11::m_catchXErrors = false; +-bool AutoTypePlatformX11::m_xErrorOccurred = false; +-int (*AutoTypePlatformX11::m_oldXErrorHandler)(Display*, XErrorEvent*) = nullptr; +- +-AutoTypePlatformX11::AutoTypePlatformX11() +-{ +- m_dpy = QX11Info::display(); +- m_rootWindow = QX11Info::appRootWindow(); +- +- m_atomWmState = XInternAtom(m_dpy, "WM_STATE", True); +- m_atomWmName = XInternAtom(m_dpy, "WM_NAME", True); +- m_atomNetWmName = XInternAtom(m_dpy, "_NET_WM_NAME", True); +- m_atomString = XInternAtom(m_dpy, "STRING", True); +- m_atomUtf8String = XInternAtom(m_dpy, "UTF8_STRING", True); +- m_atomNetActiveWindow = XInternAtom(m_dpy, "_NET_ACTIVE_WINDOW", True); +- +- m_classBlacklist << "desktop_window" +- << "gnome-panel"; // Gnome +- m_classBlacklist << "kdesktop" +- << "kicker"; // KDE 3 +- m_classBlacklist << "Plasma"; // KDE 4 +- m_classBlacklist << "plasmashell"; // KDE 5 +- m_classBlacklist << "xfdesktop" +- << "xfce4-panel"; // Xfce 4 +- +- m_currentGlobalKey = static_cast(0); +- m_currentGlobalModifiers = nullptr; +- +- m_keysymTable = nullptr; +- m_xkb = nullptr; +- m_remapKeycode = 0; +- m_currentRemapKeysym = NoSymbol; +- m_modifierMask = ControlMask | ShiftMask | Mod1Mask | Mod4Mask; +- +- m_loaded = true; +- +- updateKeymap(); +-} +- +-bool AutoTypePlatformX11::isAvailable() +-{ +- int ignore; +- +- if (!XQueryExtension(m_dpy, "XInputExtension", &ignore, &ignore, &ignore)) { +- return false; +- } +- +- if (!XQueryExtension(m_dpy, "XTEST", &ignore, &ignore, &ignore)) { +- return false; +- } +- +- if (!m_xkb) { +- XkbDescPtr kbd = getKeyboard(); +- +- if (!kbd) { +- return false; +- } +- +- XkbFreeKeyboard(kbd, XkbAllComponentsMask, True); +- } +- +- return true; +-} +- +-void AutoTypePlatformX11::unload() +-{ +- // Restore the KeyboardMapping to its original state. +- if (m_currentRemapKeysym != NoSymbol) { +- AddKeysym(NoSymbol); +- } +- +- if (m_keysymTable) { +- XFree(m_keysymTable); +- } +- +- if (m_xkb) { +- XkbFreeKeyboard(m_xkb, XkbAllComponentsMask, True); +- } +- +- m_loaded = false; +-} +- +-QStringList AutoTypePlatformX11::windowTitles() +-{ +- return windowTitlesRecursive(m_rootWindow); +-} +- +-WId AutoTypePlatformX11::activeWindow() +-{ +- Window window; +- int revert_to_return; +- XGetInputFocus(m_dpy, &window, &revert_to_return); +- +- int tree; +- do { +- if (isTopLevelWindow(window)) { +- break; +- } +- +- Window root; +- Window parent; +- Window* children = nullptr; +- unsigned int numChildren; +- tree = XQueryTree(m_dpy, window, &root, &parent, &children, &numChildren); +- window = parent; +- if (children) { +- XFree(children); +- } +- } while (tree && window); +- +- return window; +-} +- +-QString AutoTypePlatformX11::activeWindowTitle() +-{ +- return windowTitle(activeWindow(), true); +-} +- +-bool AutoTypePlatformX11::registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) +-{ +- int keycode = XKeysymToKeycode(m_dpy, charToKeySym(key)); +- uint nativeModifiers = qtToNativeModifiers(modifiers); +- +- startCatchXErrors(); +- XGrabKey(m_dpy, keycode, nativeModifiers, m_rootWindow, True, GrabModeAsync, GrabModeAsync); +- XGrabKey(m_dpy, keycode, nativeModifiers | Mod2Mask, m_rootWindow, True, GrabModeAsync, GrabModeAsync); +- XGrabKey(m_dpy, keycode, nativeModifiers | LockMask, m_rootWindow, True, GrabModeAsync, GrabModeAsync); +- XGrabKey(m_dpy, keycode, nativeModifiers | Mod2Mask | LockMask, m_rootWindow, True, GrabModeAsync, GrabModeAsync); +- stopCatchXErrors(); +- +- if (!m_xErrorOccurred) { +- m_currentGlobalKey = key; +- m_currentGlobalModifiers = modifiers; +- m_currentGlobalKeycode = keycode; +- m_currentGlobalNativeModifiers = nativeModifiers; +- return true; +- } else { +- unregisterGlobalShortcut(key, modifiers); +- return false; +- } +-} +- +-uint AutoTypePlatformX11::qtToNativeModifiers(Qt::KeyboardModifiers modifiers) +-{ +- uint nativeModifiers = 0; +- +- if (modifiers & Qt::ShiftModifier) { +- nativeModifiers |= ShiftMask; +- } +- if (modifiers & Qt::ControlModifier) { +- nativeModifiers |= ControlMask; +- } +- if (modifiers & Qt::AltModifier) { +- nativeModifiers |= Mod1Mask; +- } +- if (modifiers & Qt::MetaModifier) { +- nativeModifiers |= Mod4Mask; +- } +- +- return nativeModifiers; +-} +- +-void AutoTypePlatformX11::unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) +-{ +- KeyCode keycode = XKeysymToKeycode(m_dpy, charToKeySym(key)); +- uint nativeModifiers = qtToNativeModifiers(modifiers); +- +- XUngrabKey(m_dpy, keycode, nativeModifiers, m_rootWindow); +- XUngrabKey(m_dpy, keycode, nativeModifiers | Mod2Mask, m_rootWindow); +- XUngrabKey(m_dpy, keycode, nativeModifiers | LockMask, m_rootWindow); +- XUngrabKey(m_dpy, keycode, nativeModifiers | Mod2Mask | LockMask, m_rootWindow); +- +- m_currentGlobalKey = static_cast(0); +- m_currentGlobalModifiers = nullptr; +- m_currentGlobalKeycode = 0; +- m_currentGlobalNativeModifiers = 0; +-} +- +-int AutoTypePlatformX11::platformEventFilter(void* event) +-{ +- xcb_generic_event_t* genericEvent = static_cast(event); +- quint8 type = genericEvent->response_type & 0x7f; +- +- if (type == XCB_KEY_PRESS || type == XCB_KEY_RELEASE) { +- xcb_key_press_event_t* keyPressEvent = static_cast(event); +- if (keyPressEvent->detail == m_currentGlobalKeycode +- && (keyPressEvent->state & m_modifierMask) == m_currentGlobalNativeModifiers +- && (!QApplication::activeWindow() || QApplication::activeWindow()->isMinimized()) && m_loaded) { +- if (type == XCB_KEY_PRESS) { +- emit globalShortcutTriggered(); +- } +- +- return 1; +- } +- } else if (type == XCB_MAPPING_NOTIFY) { +- xcb_mapping_notify_event_t* mappingNotifyEvent = static_cast(event); +- if (mappingNotifyEvent->request == XCB_MAPPING_KEYBOARD +- || mappingNotifyEvent->request == XCB_MAPPING_MODIFIER) { +- XMappingEvent xMappingEvent; +- memset(&xMappingEvent, 0, sizeof(xMappingEvent)); +- xMappingEvent.type = MappingNotify; +- xMappingEvent.display = m_dpy; +- if (mappingNotifyEvent->request == XCB_MAPPING_KEYBOARD) { +- xMappingEvent.request = MappingKeyboard; +- } else { +- xMappingEvent.request = MappingModifier; +- } +- xMappingEvent.first_keycode = mappingNotifyEvent->first_keycode; +- xMappingEvent.count = mappingNotifyEvent->count; +- XRefreshKeyboardMapping(&xMappingEvent); +- updateKeymap(); +- } +- } +- +- return -1; +-} +- +-AutoTypeExecutor* AutoTypePlatformX11::createExecutor() +-{ +- return new AutoTypeExecutorX11(this); +-} +- +-QString AutoTypePlatformX11::windowTitle(Window window, bool useBlacklist) +-{ +- QString title; +- +- Atom type; +- int format; +- unsigned long nitems; +- unsigned long after; +- unsigned char* data = nullptr; +- +- // the window manager spec says we should read _NET_WM_NAME first, then fall back to WM_NAME +- +- int retVal = XGetWindowProperty( +- m_dpy, window, m_atomNetWmName, 0, 1000, False, m_atomUtf8String, &type, &format, &nitems, &after, &data); +- +- if ((retVal == 0) && data) { +- title = QString::fromUtf8(reinterpret_cast(data)); +- } else { +- XTextProperty textProp; +- retVal = XGetTextProperty(m_dpy, window, &textProp, m_atomWmName); +- if ((retVal != 0) && textProp.value) { +- char** textList = nullptr; +- int count; +- +- if (textProp.encoding == m_atomUtf8String) { +- title = QString::fromUtf8(reinterpret_cast(textProp.value)); +- } else if ((XmbTextPropertyToTextList(m_dpy, &textProp, &textList, &count) == 0) && textList +- && (count > 0)) { +- title = QString::fromLocal8Bit(textList[0]); +- } else if (textProp.encoding == m_atomString) { +- title = QString::fromLocal8Bit(reinterpret_cast(textProp.value)); +- } +- +- if (textList) { +- XFreeStringList(textList); +- } +- } +- +- if (textProp.value) { +- XFree(textProp.value); +- } +- } +- +- if (data) { +- XFree(data); +- } +- +- if (useBlacklist && !title.isEmpty()) { +- if (window == m_rootWindow) { +- return QString(); +- } +- +- QString className = windowClassName(window); +- if (m_classBlacklist.contains(className)) { +- return QString(); +- } +- +- QList keepassxWindows = widgetsToX11Windows(QApplication::topLevelWidgets()); +- if (keepassxWindows.contains(window)) { +- return QString(); +- } +- } +- +- return title; +-} +- +-QString AutoTypePlatformX11::windowClassName(Window window) +-{ +- QString className; +- +- XClassHint wmClass; +- wmClass.res_name = nullptr; +- wmClass.res_class = nullptr; +- +- if (XGetClassHint(m_dpy, window, &wmClass) && wmClass.res_name) { +- className = QString::fromLocal8Bit(wmClass.res_name); +- } +- if (wmClass.res_name) { +- XFree(wmClass.res_name); +- } +- if (wmClass.res_class) { +- XFree(wmClass.res_class); +- } +- +- return className; +-} +- +-QList AutoTypePlatformX11::widgetsToX11Windows(const QWidgetList& widgetList) +-{ +- QList windows; +- +- for (const QWidget* widget : widgetList) { +- windows.append(widget->effectiveWinId()); +- } +- +- return windows; +-} +- +-QStringList AutoTypePlatformX11::windowTitlesRecursive(Window window) +-{ +- QStringList titles; +- +- if (isTopLevelWindow(window)) { +- QString title = windowTitle(window, true); +- if (!title.isEmpty()) { +- titles.append(title); +- } +- } +- +- Window root; +- Window parent; +- Window* children = nullptr; +- unsigned int numChildren; +- if (XQueryTree(m_dpy, window, &root, &parent, &children, &numChildren) && children) { +- for (uint i = 0; i < numChildren; i++) { +- titles.append(windowTitlesRecursive(children[i])); +- } +- } +- if (children) { +- XFree(children); +- } +- +- return titles; +-} +- +-bool AutoTypePlatformX11::isTopLevelWindow(Window window) +-{ +- Atom type = None; +- int format; +- unsigned long nitems; +- unsigned long after; +- unsigned char* data = Q_NULLPTR; +- int retVal = XGetWindowProperty( +- m_dpy, window, m_atomWmState, 0, 2, False, m_atomWmState, &type, &format, &nitems, &after, &data); +- +- bool result = false; +- +- if (retVal == 0 && data) { +- if (type == m_atomWmState && format == 32 && nitems > 0) { +- qint32 state = static_cast(*data); +- result = (state != WithdrawnState); +- } +- +- XFree(data); +- } +- +- return result; +-} +- +-KeySym AutoTypePlatformX11::charToKeySym(const QChar& ch) +-{ +- ushort unicode = ch.unicode(); +- +- /* first check for Latin-1 characters (1:1 mapping) */ +- if ((unicode >= 0x0020 && unicode <= 0x007e) || (unicode >= 0x00a0 && unicode <= 0x00ff)) { +- return unicode; +- } +- +- /* mapping table generated from keysymdef.h */ +- const uint* match = Tools::binaryFind(m_unicodeToKeysymKeys, m_unicodeToKeysymKeys + m_unicodeToKeysymLen, unicode); +- int index = match - m_unicodeToKeysymKeys; +- if (index != m_unicodeToKeysymLen) { +- return m_unicodeToKeysymValues[index]; +- } +- +- if (unicode >= 0x0100) { +- return unicode | 0x01000000; +- } +- +- return NoSymbol; +-} +- +-KeySym AutoTypePlatformX11::keyToKeySym(Qt::Key key) +-{ +- switch (key) { +- case Qt::Key_Tab: +- return XK_Tab; +- case Qt::Key_Enter: +- return XK_Return; +- case Qt::Key_Space: +- return XK_space; +- case Qt::Key_Up: +- return XK_Up; +- case Qt::Key_Down: +- return XK_Down; +- case Qt::Key_Left: +- return XK_Left; +- case Qt::Key_Right: +- return XK_Right; +- case Qt::Key_Insert: +- return XK_Insert; +- case Qt::Key_Delete: +- return XK_Delete; +- case Qt::Key_Home: +- return XK_Home; +- case Qt::Key_End: +- return XK_End; +- case Qt::Key_PageUp: +- return XK_Page_Up; +- case Qt::Key_PageDown: +- return XK_Page_Down; +- case Qt::Key_Backspace: +- return XK_BackSpace; +- case Qt::Key_Pause: +- return XK_Break; +- case Qt::Key_CapsLock: +- return XK_Caps_Lock; +- case Qt::Key_Escape: +- return XK_Escape; +- case Qt::Key_Help: +- return XK_Help; +- case Qt::Key_NumLock: +- return XK_Num_Lock; +- case Qt::Key_Print: +- return XK_Print; +- case Qt::Key_ScrollLock: +- return XK_Scroll_Lock; +- case Qt::Key_Shift: +- return XK_Shift_L; +- case Qt::Key_Control: +- return XK_Control_L; +- case Qt::Key_Alt: +- return XK_Alt_L; +- default: +- if (key >= Qt::Key_F1 && key <= Qt::Key_F16) { +- return XK_F1 + (key - Qt::Key_F1); +- } else { +- return NoSymbol; +- } +- } +-} +- +-/* +- * Update the keyboard and modifier mapping. +- * We need the KeyboardMapping for AddKeysym. +- * Modifier mapping is required for clearing the modifiers. +- */ +-void AutoTypePlatformX11::updateKeymap() +-{ +- if (m_xkb) { +- XkbFreeKeyboard(m_xkb, XkbAllComponentsMask, True); +- } +- m_xkb = getKeyboard(); +- +- XDisplayKeycodes(m_dpy, &m_minKeycode, &m_maxKeycode); +- if (m_keysymTable != nullptr) +- XFree(m_keysymTable); +- m_keysymTable = XGetKeyboardMapping(m_dpy, m_minKeycode, m_maxKeycode - m_minKeycode + 1, &m_keysymPerKeycode); +- +- /* determine the keycode to use for remapped keys */ +- if (m_remapKeycode == 0 || !isRemapKeycodeValid()) { +- for (int keycode = m_minKeycode; keycode <= m_maxKeycode; keycode++) { +- int inx = (keycode - m_minKeycode) * m_keysymPerKeycode; +- if (m_keysymTable[inx] == NoSymbol) { +- m_remapKeycode = keycode; +- m_currentRemapKeysym = NoSymbol; +- break; +- } +- } +- } +- +- /* determine the keycode to use for modifiers */ +- XModifierKeymap* modifiers = XGetModifierMapping(m_dpy); +- for (int mod_index = ShiftMapIndex; mod_index <= Mod5MapIndex; mod_index++) { +- m_modifier_keycode[mod_index] = 0; +- for (int mod_key = 0; mod_key < modifiers->max_keypermod; mod_key++) { +- int keycode = modifiers->modifiermap[mod_index * modifiers->max_keypermod + mod_key]; +- if (keycode) { +- m_modifier_keycode[mod_index] = keycode; +- break; +- } +- } +- } +- XFreeModifiermap(modifiers); +- +- /* Xlib needs some time until the mapping is distributed to +- all clients */ +- // TODO: we should probably only sleep while in the middle of typing something +- timespec ts; +- ts.tv_sec = 0; +- ts.tv_nsec = 30 * 1000 * 1000; +- nanosleep(&ts, nullptr); +-} +- +-bool AutoTypePlatformX11::isRemapKeycodeValid() +-{ +- int baseKeycode = (m_remapKeycode - m_minKeycode) * m_keysymPerKeycode; +- for (int i = 0; i < m_keysymPerKeycode; i++) { +- if (m_keysymTable[baseKeycode + i] == m_currentRemapKeysym) { +- return true; +- } +- } +- +- return false; +-} +- +-void AutoTypePlatformX11::startCatchXErrors() +-{ +- Q_ASSERT(!m_catchXErrors); +- +- m_catchXErrors = true; +- m_xErrorOccurred = false; +- m_oldXErrorHandler = XSetErrorHandler(x11ErrorHandler); +-} +- +-void AutoTypePlatformX11::stopCatchXErrors() +-{ +- Q_ASSERT(m_catchXErrors); +- +- XSync(m_dpy, False); +- XSetErrorHandler(m_oldXErrorHandler); +- m_catchXErrors = false; +-} +- +-int AutoTypePlatformX11::x11ErrorHandler(Display* display, XErrorEvent* error) +-{ +- Q_UNUSED(display) +- Q_UNUSED(error) +- +- if (m_catchXErrors) { +- m_xErrorOccurred = true; +- } +- +- return 1; +-} +- +-XkbDescPtr AutoTypePlatformX11::getKeyboard() +-{ +- int num_devices; +- XID keyboard_id = XkbUseCoreKbd; +- XDeviceInfo* devices = XListInputDevices(m_dpy, &num_devices); +- if (!devices) { +- return nullptr; +- } +- +- for (int i = 0; i < num_devices; i++) { +- if (QString(devices[i].name) == "Virtual core XTEST keyboard") { +- keyboard_id = devices[i].id; +- break; +- } +- } +- +- XFreeDeviceList(devices); +- +- return XkbGetKeyboard(m_dpy, XkbCompatMapMask | XkbGeometryMask, keyboard_id); +-} +- +-// -------------------------------------------------------------------------- +-// The following code is taken from xvkbd 3.0 and has been slightly modified. +-// -------------------------------------------------------------------------- +- +-/* +- * Insert a specified keysym on the dedicated position in the keymap +- * table. +- */ +-int AutoTypePlatformX11::AddKeysym(KeySym keysym) +-{ +- if (m_remapKeycode == 0) { +- return 0; +- } +- +- int inx = (m_remapKeycode - m_minKeycode) * m_keysymPerKeycode; +- m_keysymTable[inx] = keysym; +- m_currentRemapKeysym = keysym; +- +- XChangeKeyboardMapping(m_dpy, m_remapKeycode, m_keysymPerKeycode, &m_keysymTable[inx], 1); +- XFlush(m_dpy); +- updateKeymap(); +- +- return m_remapKeycode; +-} +- +-/* +- * Send event to the focused window. +- * If input focus is specified explicitly, select the window +- * before send event to the window. +- */ +-void AutoTypePlatformX11::SendKeyEvent(unsigned keycode, bool press) +-{ +- XSync(m_dpy, False); +- int (*oldHandler)(Display*, XErrorEvent*) = XSetErrorHandler(MyErrorHandler); +- +- XTestFakeKeyEvent(m_dpy, keycode, press, 0); +- XFlush(m_dpy); +- +- XSetErrorHandler(oldHandler); +-} +- +-/* +- * Send a modifier press/release event for all modifiers +- * which are set in the mask variable. +- */ +-void AutoTypePlatformX11::SendModifiers(unsigned int mask, bool press) +-{ +- int mod_index; +- for (mod_index = ShiftMapIndex; mod_index <= Mod5MapIndex; mod_index++) { +- if (mask & (1 << mod_index)) { +- SendKeyEvent(m_modifier_keycode[mod_index], press); +- } +- } +-} +- +-/* +- * Determines the keycode and modifier mask for the given +- * keysym. +- */ +-int AutoTypePlatformX11::GetKeycode(KeySym keysym, unsigned int* mask) +-{ +- int keycode = XKeysymToKeycode(m_dpy, keysym); +- +- if (keycode && keysymModifiers(keysym, keycode, mask)) { +- return keycode; +- } +- +- /* no modifier matches => resort to remapping */ +- keycode = AddKeysym(keysym); +- if (keycode && keysymModifiers(keysym, keycode, mask)) { +- return keycode; +- } +- +- *mask = 0; +- return 0; +-} +- +-bool AutoTypePlatformX11::keysymModifiers(KeySym keysym, int keycode, unsigned int* mask) +-{ +- int shift, mod; +- unsigned int mods_rtrn; +- +- /* determine whether there is a combination of the modifiers +- (Mod1-Mod5) with or without shift which returns keysym */ +- for (shift = 0; shift < 2; shift++) { +- for (mod = ControlMapIndex; mod <= Mod5MapIndex; mod++) { +- KeySym keysym_rtrn; +- *mask = (mod == ControlMapIndex) ? shift : shift | (1 << mod); +- XkbTranslateKeyCode(m_xkb, keycode, *mask, &mods_rtrn, &keysym_rtrn); +- if (keysym_rtrn == keysym) { +- return true; +- } +- } +- } +- +- return false; +-} +- +-/* +- * Send sequence of KeyPressed/KeyReleased events to the focused +- * window to simulate keyboard. If modifiers (shift, control, etc) +- * are set ON, many events will be sent. +- */ +-void AutoTypePlatformX11::SendKey(KeySym keysym, unsigned int modifiers) +-{ +- if (keysym == NoSymbol) { +- qWarning("No such key: keysym=0x%lX", keysym); +- return; +- } +- +- int keycode; +- unsigned int wanted_mask; +- +- /* determine keycode and mask for the given keysym */ +- keycode = GetKeycode(keysym, &wanted_mask); +- if (keycode < 8 || keycode > 255) { +- qWarning("Unable to get valid keycode for key: keysym=0x%lX", keysym); +- return; +- } +- wanted_mask |= modifiers; +- +- Window root, child; +- int root_x, root_y, x, y; +- unsigned int original_mask; +- +- XSync(m_dpy, False); +- XQueryPointer(m_dpy, m_rootWindow, &root, &child, &root_x, &root_y, &x, &y, &original_mask); +- +- // modifiers that need to be pressed but aren't +- unsigned int press_mask = wanted_mask & ~original_mask; +- +- // modifiers that are pressed but maybe shouldn't +- unsigned int release_check_mask = original_mask & ~wanted_mask; +- +- // modifiers we need to release before sending the keycode +- unsigned int release_mask = 0; +- +- if (!modifiers) { +- // check every release_check_mask individually if it affects the keysym we would generate +- // if it doesn't we probably don't need to release it +- for (int mod_index = ShiftMapIndex; mod_index <= Mod5MapIndex; mod_index++) { +- if (release_check_mask & (1 << mod_index)) { +- unsigned int mods_rtrn; +- KeySym keysym_rtrn; +- XkbTranslateKeyCode(m_xkb, keycode, wanted_mask | (1 << mod_index), &mods_rtrn, &keysym_rtrn); +- +- if (keysym_rtrn != keysym) { +- release_mask |= (1 << mod_index); +- } +- } +- } +- +- // finally check if the combination of pressed modifiers that we chose to ignore affects the keysym +- unsigned int mods_rtrn; +- KeySym keysym_rtrn; +- XkbTranslateKeyCode( +- m_xkb, keycode, wanted_mask | (release_check_mask & ~release_mask), &mods_rtrn, &keysym_rtrn); +- if (keysym_rtrn != keysym) { +- // oh well, release all the modifiers we don't want +- release_mask = release_check_mask; +- } +- } else { +- release_mask = release_check_mask; +- } +- +- /* set modifiers mask */ +- if ((release_mask | press_mask) & LockMask) { +- SendModifiers(LockMask, true); +- SendModifiers(LockMask, false); +- } +- SendModifiers(release_mask & ~LockMask, false); +- SendModifiers(press_mask & ~LockMask, true); +- +- /* press and release release key */ +- SendKeyEvent(keycode, true); +- SendKeyEvent(keycode, false); +- +- /* restore previous modifiers mask */ +- SendModifiers(press_mask & ~LockMask, false); +- SendModifiers(release_mask & ~LockMask, true); +- if ((release_mask | press_mask) & LockMask) { +- SendModifiers(LockMask, true); +- SendModifiers(LockMask, false); +- } +-} +- +-int AutoTypePlatformX11::MyErrorHandler(Display* my_dpy, XErrorEvent* event) +-{ +- char msg[200]; +- +- if (event->error_code == BadWindow) { +- return 0; +- } +- XGetErrorText(my_dpy, event->error_code, msg, sizeof(msg) - 1); +- qWarning("X error trapped: %s, request-code=%d\n", msg, event->request_code); +- return 0; +-} +- +-AutoTypeExecutorX11::AutoTypeExecutorX11(AutoTypePlatformX11* platform) +- : m_platform(platform) +-{ +-} +- +-void AutoTypeExecutorX11::execChar(AutoTypeChar* action) +-{ +- m_platform->SendKey(m_platform->charToKeySym(action->character)); +-} +- +-void AutoTypeExecutorX11::execKey(AutoTypeKey* action) +-{ +- m_platform->SendKey(m_platform->keyToKeySym(action->key)); +-} +- +-void AutoTypeExecutorX11::execClearField(AutoTypeClearField* action = nullptr) +-{ +- Q_UNUSED(action); +- +- timespec ts; +- ts.tv_sec = 0; +- ts.tv_nsec = 25 * 1000 * 1000; +- +- m_platform->SendKey(m_platform->keyToKeySym(Qt::Key_Home), static_cast(ControlMask)); +- nanosleep(&ts, nullptr); +- +- m_platform->SendKey(m_platform->keyToKeySym(Qt::Key_End), static_cast(ControlMask | ShiftMask)); +- nanosleep(&ts, nullptr); +- +- m_platform->SendKey(m_platform->keyToKeySym(Qt::Key_Backspace)); +- nanosleep(&ts, nullptr); +-} +- +-bool AutoTypePlatformX11::raiseWindow(WId window) +-{ +- if (m_atomNetActiveWindow == None) { +- return false; +- } +- +- XRaiseWindow(m_dpy, window); +- +- XEvent event; +- event.xclient.type = ClientMessage; +- event.xclient.serial = 0; +- event.xclient.send_event = True; +- event.xclient.window = window; +- event.xclient.message_type = m_atomNetActiveWindow; +- event.xclient.format = 32; +- event.xclient.data.l[0] = 1; // FromApplication +- event.xclient.data.l[1] = QX11Info::appUserTime(); +- QWidget* activeWindow = QApplication::activeWindow(); +- if (activeWindow) { +- event.xclient.data.l[2] = activeWindow->internalWinId(); +- } else { +- event.xclient.data.l[2] = 0; +- } +- event.xclient.data.l[3] = 0; +- event.xclient.data.l[4] = 0; +- XSendEvent(m_dpy, m_rootWindow, False, SubstructureRedirectMask | SubstructureNotifyMask, &event); +- XFlush(m_dpy); +- +- return true; +-} +diff -urNr keepassxc-2.6.4-orig/src/autotype/xcb/AutoTypeXCB.h keepassxc-2.6.4-patched/src/autotype/xcb/AutoTypeXCB.h +--- keepassxc-2.6.4-orig/src/autotype/xcb/AutoTypeXCB.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/autotype/xcb/AutoTypeXCB.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,135 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * Copyright (C) 2000-2008 Tom Sato +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_AUTOTYPEXCB_H +-#define KEEPASSX_AUTOTYPEXCB_H +- +-#include +-#include +-#include +-#include +-#include +- +-#include +-#include +-#include +- +-#include "autotype/AutoTypeAction.h" +-#include "autotype/AutoTypePlatformPlugin.h" +- +-#define N_MOD_INDICES (Mod5MapIndex + 1) +- +-class AutoTypePlatformX11 : public QObject, public AutoTypePlatformInterface +-{ +- Q_OBJECT +- Q_PLUGIN_METADATA(IID "org.keepassx.AutoTypePlatformX11") +- Q_INTERFACES(AutoTypePlatformInterface) +- +-public: +- AutoTypePlatformX11(); +- bool isAvailable() override; +- void unload() override; +- QStringList windowTitles() override; +- WId activeWindow() override; +- QString activeWindowTitle() override; +- bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) override; +- void unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) override; +- int platformEventFilter(void* event) override; +- bool raiseWindow(WId window) override; +- AutoTypeExecutor* createExecutor() override; +- +- KeySym charToKeySym(const QChar& ch); +- KeySym keyToKeySym(Qt::Key key); +- +- void SendKey(KeySym keysym, unsigned int modifiers = 0); +- +-signals: +- void globalShortcutTriggered(); +- +-private: +- QString windowTitle(Window window, bool useBlacklist); +- QStringList windowTitlesRecursive(Window window); +- QString windowClassName(Window window); +- QList widgetsToX11Windows(const QWidgetList& widgetList); +- bool isTopLevelWindow(Window window); +- uint qtToNativeModifiers(Qt::KeyboardModifiers modifiers); +- void startCatchXErrors(); +- void stopCatchXErrors(); +- static int x11ErrorHandler(Display* display, XErrorEvent* error); +- +- XkbDescPtr getKeyboard(); +- void updateKeymap(); +- bool isRemapKeycodeValid(); +- int AddKeysym(KeySym keysym); +- void AddModifier(KeySym keysym); +- void SendKeyEvent(unsigned keycode, bool press); +- void SendModifiers(unsigned int mask, bool press); +- int GetKeycode(KeySym keysym, unsigned int* mask); +- bool keysymModifiers(KeySym keysym, int keycode, unsigned int* mask); +- +- static int MyErrorHandler(Display* my_dpy, XErrorEvent* event); +- +- Display* m_dpy; +- Window m_rootWindow; +- Atom m_atomWmState; +- Atom m_atomWmName; +- Atom m_atomNetWmName; +- Atom m_atomString; +- Atom m_atomUtf8String; +- Atom m_atomNetActiveWindow; +- QSet m_classBlacklist; +- Qt::Key m_currentGlobalKey; +- Qt::KeyboardModifiers m_currentGlobalModifiers; +- uint m_currentGlobalKeycode; +- uint m_currentGlobalNativeModifiers; +- int m_modifierMask; +- static bool m_catchXErrors; +- static bool m_xErrorOccurred; +- static int (*m_oldXErrorHandler)(Display*, XErrorEvent*); +- +- static const int m_unicodeToKeysymLen; +- static const uint m_unicodeToKeysymKeys[]; +- static const uint m_unicodeToKeysymValues[]; +- +- XkbDescPtr m_xkb; +- KeySym* m_keysymTable; +- int m_minKeycode; +- int m_maxKeycode; +- int m_keysymPerKeycode; +- /* dedicated keycode for remapped keys */ +- unsigned int m_remapKeycode; +- KeySym m_currentRemapKeysym; +- KeyCode m_modifier_keycode[N_MOD_INDICES]; +- bool m_loaded; +-}; +- +-class AutoTypeExecutorX11 : public AutoTypeExecutor +-{ +-public: +- explicit AutoTypeExecutorX11(AutoTypePlatformX11* platform); +- +- void execChar(AutoTypeChar* action) override; +- void execKey(AutoTypeKey* action) override; +- void execClearField(AutoTypeClearField* action) override; +- +-private: +- AutoTypePlatformX11* const m_platform; +-}; +- +-#endif // KEEPASSX_AUTOTYPEXCB_H +diff -urNr keepassxc-2.6.4-orig/src/autotype/xcb/CMakeLists.txt keepassxc-2.6.4-patched/src/autotype/xcb/CMakeLists.txt +--- keepassxc-2.6.4-orig/src/autotype/xcb/CMakeLists.txt 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/autotype/xcb/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +@@ -1,9 +0,0 @@ +-include_directories(SYSTEM ${X11_X11_INCLUDE_PATH}) +- +-set(autotype_XCB_SOURCES AutoTypeXCB.cpp) +- +-add_library(keepassx-autotype-xcb MODULE ${autotype_XCB_SOURCES}) +-target_link_libraries(keepassx-autotype-xcb keepassx_core Qt5::Core Qt5::Widgets Qt5::X11Extras ${X11_X11_LIB} ${X11_Xi_LIB} ${X11_XTest_LIB}) +-install(TARGETS keepassx-autotype-xcb +- BUNDLE DESTINATION . COMPONENT Runtime +- LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR} COMPONENT Runtime) +diff -urNr keepassxc-2.6.4-orig/src/autotype/xcb/KeySymMap.h keepassxc-2.6.4-patched/src/autotype/xcb/KeySymMap.h +--- keepassxc-2.6.4-orig/src/autotype/xcb/KeySymMap.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/autotype/xcb/KeySymMap.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,171 +0,0 @@ +-/* +- * Automatically generated by keysymmap.py from parsing keysymdef.h. +- */ +- +-const int AutoTypePlatformX11::m_unicodeToKeysymLen = 632; +- +-// clang-format off +-const uint AutoTypePlatformX11::m_unicodeToKeysymKeys[] = { +- 0x0100, 0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0x0106, 0x0107, +- 0x0108, 0x0109, 0x010a, 0x010b, 0x010c, 0x010d, 0x010e, 0x010f, +- 0x0110, 0x0111, 0x0112, 0x0113, 0x0116, 0x0117, 0x0118, 0x0119, +- 0x011a, 0x011b, 0x011c, 0x011d, 0x011e, 0x011f, 0x0120, 0x0121, +- 0x0122, 0x0123, 0x0124, 0x0125, 0x0126, 0x0127, 0x0128, 0x0129, +- 0x012a, 0x012b, 0x012e, 0x012f, 0x0130, 0x0131, 0x0134, 0x0135, +- 0x0136, 0x0137, 0x0138, 0x0139, 0x013a, 0x013b, 0x013c, 0x013d, +- 0x013e, 0x0141, 0x0142, 0x0143, 0x0144, 0x0145, 0x0146, 0x0147, +- 0x0148, 0x014a, 0x014b, 0x014c, 0x014d, 0x0150, 0x0151, 0x0152, +- 0x0153, 0x0154, 0x0155, 0x0156, 0x0157, 0x0158, 0x0159, 0x015a, +- 0x015b, 0x015c, 0x015d, 0x015e, 0x015f, 0x0160, 0x0161, 0x0162, +- 0x0163, 0x0164, 0x0165, 0x0166, 0x0167, 0x0168, 0x0169, 0x016a, +- 0x016b, 0x016c, 0x016d, 0x016e, 0x016f, 0x0170, 0x0171, 0x0172, +- 0x0173, 0x0178, 0x0179, 0x017a, 0x017b, 0x017c, 0x017d, 0x017e, +- 0x0192, 0x02c7, 0x02d8, 0x02d9, 0x02db, 0x02dd, 0x0385, 0x0386, +- 0x0388, 0x0389, 0x038a, 0x038c, 0x038e, 0x038f, 0x0390, 0x0391, +- 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, +- 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, 0x03a1, +- 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, 0x03aa, +- 0x03ab, 0x03ac, 0x03ad, 0x03ae, 0x03af, 0x03b0, 0x03b1, 0x03b2, +- 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8, 0x03b9, 0x03ba, +- 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c2, +- 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, 0x03ca, +- 0x03cb, 0x03cc, 0x03cd, 0x03ce, 0x0401, 0x0402, 0x0403, 0x0404, +- 0x0405, 0x0406, 0x0407, 0x0408, 0x0409, 0x040a, 0x040b, 0x040c, +- 0x040e, 0x040f, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, +- 0x0416, 0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, +- 0x041e, 0x041f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, +- 0x0426, 0x0427, 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, +- 0x042e, 0x042f, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, +- 0x0436, 0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, +- 0x043e, 0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, +- 0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, +- 0x044e, 0x044f, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, +- 0x0457, 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x045e, 0x045f, +- 0x0490, 0x0491, 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, +- 0x05d6, 0x05d7, 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, +- 0x05de, 0x05df, 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, +- 0x05e6, 0x05e7, 0x05e8, 0x05e9, 0x05ea, 0x060c, 0x061b, 0x061f, +- 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, 0x0628, +- 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f, 0x0630, +- 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637, 0x0638, +- 0x0639, 0x063a, 0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, +- 0x0646, 0x0647, 0x0648, 0x0649, 0x064a, 0x064b, 0x064c, 0x064d, +- 0x064e, 0x064f, 0x0650, 0x0651, 0x0652, 0x0e01, 0x0e02, 0x0e03, +- 0x0e04, 0x0e05, 0x0e06, 0x0e07, 0x0e08, 0x0e09, 0x0e0a, 0x0e0b, +- 0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f, 0x0e10, 0x0e11, 0x0e12, 0x0e13, +- 0x0e14, 0x0e15, 0x0e16, 0x0e17, 0x0e18, 0x0e19, 0x0e1a, 0x0e1b, +- 0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f, 0x0e20, 0x0e21, 0x0e22, 0x0e23, +- 0x0e24, 0x0e25, 0x0e26, 0x0e27, 0x0e28, 0x0e29, 0x0e2a, 0x0e2b, +- 0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f, 0x0e30, 0x0e31, 0x0e32, 0x0e33, +- 0x0e34, 0x0e35, 0x0e36, 0x0e37, 0x0e38, 0x0e39, 0x0e3a, 0x0e3f, +- 0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, 0x0e45, 0x0e46, 0x0e47, +- 0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d, 0x0e50, 0x0e51, +- 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57, 0x0e58, 0x0e59, +- 0x2002, 0x2003, 0x2004, 0x2005, 0x2007, 0x2008, 0x2009, 0x200a, +- 0x2012, 0x2013, 0x2014, 0x2015, 0x2017, 0x2018, 0x2019, 0x201a, +- 0x201c, 0x201d, 0x201e, 0x2020, 0x2021, 0x2025, 0x2026, 0x2030, +- 0x2032, 0x2033, 0x2038, 0x203e, 0x20ac, 0x2105, 0x2116, 0x2117, +- 0x211e, 0x2122, 0x2153, 0x2154, 0x2155, 0x2156, 0x2157, 0x2158, +- 0x2159, 0x215a, 0x215b, 0x215c, 0x215d, 0x215e, 0x2190, 0x2191, +- 0x2192, 0x2193, 0x21d2, 0x21d4, 0x2202, 0x2207, 0x2218, 0x221a, +- 0x221d, 0x221e, 0x2227, 0x2228, 0x2229, 0x222a, 0x222b, 0x2234, +- 0x223c, 0x2243, 0x2260, 0x2261, 0x2264, 0x2265, 0x2282, 0x2283, +- 0x22a2, 0x22a3, 0x22a4, 0x22a5, 0x2308, 0x230a, 0x2315, 0x2320, +- 0x2321, 0x2395, 0x239b, 0x239d, 0x239e, 0x23a0, 0x23a1, 0x23a3, +- 0x23a4, 0x23a6, 0x23a8, 0x23ac, 0x23b7, 0x23ba, 0x23bb, 0x23bc, +- 0x23bd, 0x2409, 0x240a, 0x240b, 0x240c, 0x240d, 0x2424, 0x2500, +- 0x2502, 0x250c, 0x2510, 0x2514, 0x2518, 0x251c, 0x2524, 0x252c, +- 0x2534, 0x253c, 0x2592, 0x25c6, 0x25cb, 0x260e, 0x2640, 0x2642, +- 0x2663, 0x2665, 0x2666, 0x266d, 0x266f, 0x2713, 0x2717, 0x271d, +- 0x2720, 0x3001, 0x3002, 0x300c, 0x300d, 0x309b, 0x309c, 0x30a1, +- 0x30a2, 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7, 0x30a8, 0x30a9, +- 0x30aa, 0x30ab, 0x30ad, 0x30af, 0x30b1, 0x30b3, 0x30b5, 0x30b7, +- 0x30b9, 0x30bb, 0x30bd, 0x30bf, 0x30c1, 0x30c3, 0x30c4, 0x30c6, +- 0x30c8, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf, 0x30d2, +- 0x30d5, 0x30d8, 0x30db, 0x30de, 0x30df, 0x30e0, 0x30e1, 0x30e2, +- 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7, 0x30e8, 0x30e9, 0x30ea, +- 0x30eb, 0x30ec, 0x30ed, 0x30ef, 0x30f2, 0x30f3, 0x30fb, 0x30fc +-}; +- +-const uint AutoTypePlatformX11::m_unicodeToKeysymValues[] = { +- 0x03c0, 0x03e0, 0x01c3, 0x01e3, 0x01a1, 0x01b1, 0x01c6, 0x01e6, +- 0x02c6, 0x02e6, 0x02c5, 0x02e5, 0x01c8, 0x01e8, 0x01cf, 0x01ef, +- 0x01d0, 0x01f0, 0x03aa, 0x03ba, 0x03cc, 0x03ec, 0x01ca, 0x01ea, +- 0x01cc, 0x01ec, 0x02d8, 0x02f8, 0x02ab, 0x02bb, 0x02d5, 0x02f5, +- 0x03ab, 0x03bb, 0x02a6, 0x02b6, 0x02a1, 0x02b1, 0x03a5, 0x03b5, +- 0x03cf, 0x03ef, 0x03c7, 0x03e7, 0x02a9, 0x02b9, 0x02ac, 0x02bc, +- 0x03d3, 0x03f3, 0x03a2, 0x01c5, 0x01e5, 0x03a6, 0x03b6, 0x01a5, +- 0x01b5, 0x01a3, 0x01b3, 0x01d1, 0x01f1, 0x03d1, 0x03f1, 0x01d2, +- 0x01f2, 0x03bd, 0x03bf, 0x03d2, 0x03f2, 0x01d5, 0x01f5, 0x13bc, +- 0x13bd, 0x01c0, 0x01e0, 0x03a3, 0x03b3, 0x01d8, 0x01f8, 0x01a6, +- 0x01b6, 0x02de, 0x02fe, 0x01aa, 0x01ba, 0x01a9, 0x01b9, 0x01de, +- 0x01fe, 0x01ab, 0x01bb, 0x03ac, 0x03bc, 0x03dd, 0x03fd, 0x03de, +- 0x03fe, 0x02dd, 0x02fd, 0x01d9, 0x01f9, 0x01db, 0x01fb, 0x03d9, +- 0x03f9, 0x13be, 0x01ac, 0x01bc, 0x01af, 0x01bf, 0x01ae, 0x01be, +- 0x08f6, 0x01b7, 0x01a2, 0x01ff, 0x01b2, 0x01bd, 0x07ae, 0x07a1, +- 0x07a2, 0x07a3, 0x07a4, 0x07a7, 0x07a8, 0x07ab, 0x07b6, 0x07c1, +- 0x07c2, 0x07c3, 0x07c4, 0x07c5, 0x07c6, 0x07c7, 0x07c8, 0x07c9, +- 0x07ca, 0x07cb, 0x07cc, 0x07cd, 0x07ce, 0x07cf, 0x07d0, 0x07d1, +- 0x07d2, 0x07d4, 0x07d5, 0x07d6, 0x07d7, 0x07d8, 0x07d9, 0x07a5, +- 0x07a9, 0x07b1, 0x07b2, 0x07b3, 0x07b4, 0x07ba, 0x07e1, 0x07e2, +- 0x07e3, 0x07e4, 0x07e5, 0x07e6, 0x07e7, 0x07e8, 0x07e9, 0x07ea, +- 0x07eb, 0x07ec, 0x07ed, 0x07ee, 0x07ef, 0x07f0, 0x07f1, 0x07f3, +- 0x07f2, 0x07f4, 0x07f5, 0x07f6, 0x07f7, 0x07f8, 0x07f9, 0x07b5, +- 0x07b9, 0x07b7, 0x07b8, 0x07bb, 0x06b3, 0x06b1, 0x06b2, 0x06b4, +- 0x06b5, 0x06b6, 0x06b7, 0x06b8, 0x06b9, 0x06ba, 0x06bb, 0x06bc, +- 0x06be, 0x06bf, 0x06e1, 0x06e2, 0x06f7, 0x06e7, 0x06e4, 0x06e5, +- 0x06f6, 0x06fa, 0x06e9, 0x06ea, 0x06eb, 0x06ec, 0x06ed, 0x06ee, +- 0x06ef, 0x06f0, 0x06f2, 0x06f3, 0x06f4, 0x06f5, 0x06e6, 0x06e8, +- 0x06e3, 0x06fe, 0x06fb, 0x06fd, 0x06ff, 0x06f9, 0x06f8, 0x06fc, +- 0x06e0, 0x06f1, 0x06c1, 0x06c2, 0x06d7, 0x06c7, 0x06c4, 0x06c5, +- 0x06d6, 0x06da, 0x06c9, 0x06ca, 0x06cb, 0x06cc, 0x06cd, 0x06ce, +- 0x06cf, 0x06d0, 0x06d2, 0x06d3, 0x06d4, 0x06d5, 0x06c6, 0x06c8, +- 0x06c3, 0x06de, 0x06db, 0x06dd, 0x06df, 0x06d9, 0x06d8, 0x06dc, +- 0x06c0, 0x06d1, 0x06a3, 0x06a1, 0x06a2, 0x06a4, 0x06a5, 0x06a6, +- 0x06a7, 0x06a8, 0x06a9, 0x06aa, 0x06ab, 0x06ac, 0x06ae, 0x06af, +- 0x06bd, 0x06ad, 0x0ce0, 0x0ce1, 0x0ce2, 0x0ce3, 0x0ce4, 0x0ce5, +- 0x0ce6, 0x0ce7, 0x0ce8, 0x0ce9, 0x0cea, 0x0ceb, 0x0cec, 0x0ced, +- 0x0cee, 0x0cef, 0x0cf0, 0x0cf1, 0x0cf2, 0x0cf3, 0x0cf4, 0x0cf5, +- 0x0cf6, 0x0cf7, 0x0cf8, 0x0cf9, 0x0cfa, 0x05ac, 0x05bb, 0x05bf, +- 0x05c1, 0x05c2, 0x05c3, 0x05c4, 0x05c5, 0x05c6, 0x05c7, 0x05c8, +- 0x05c9, 0x05ca, 0x05cb, 0x05cc, 0x05cd, 0x05ce, 0x05cf, 0x05d0, +- 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7, 0x05d8, +- 0x05d9, 0x05da, 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, +- 0x05e6, 0x05e7, 0x05e8, 0x05e9, 0x05ea, 0x05eb, 0x05ec, 0x05ed, +- 0x05ee, 0x05ef, 0x05f0, 0x05f1, 0x05f2, 0x0da1, 0x0da2, 0x0da3, +- 0x0da4, 0x0da5, 0x0da6, 0x0da7, 0x0da8, 0x0da9, 0x0daa, 0x0dab, +- 0x0dac, 0x0dad, 0x0dae, 0x0daf, 0x0db0, 0x0db1, 0x0db2, 0x0db3, +- 0x0db4, 0x0db5, 0x0db6, 0x0db7, 0x0db8, 0x0db9, 0x0dba, 0x0dbb, +- 0x0dbc, 0x0dbd, 0x0dbe, 0x0dbf, 0x0dc0, 0x0dc1, 0x0dc2, 0x0dc3, +- 0x0dc4, 0x0dc5, 0x0dc6, 0x0dc7, 0x0dc8, 0x0dc9, 0x0dca, 0x0dcb, +- 0x0dcc, 0x0dcd, 0x0dce, 0x0dcf, 0x0dd0, 0x0dd1, 0x0dd2, 0x0dd3, +- 0x0dd4, 0x0dd5, 0x0dd6, 0x0dd7, 0x0dd8, 0x0dd9, 0x0dda, 0x0ddf, +- 0x0de0, 0x0de1, 0x0de2, 0x0de3, 0x0de4, 0x0de5, 0x0de6, 0x0de7, +- 0x0de8, 0x0de9, 0x0dea, 0x0deb, 0x0dec, 0x0ded, 0x0df0, 0x0df1, +- 0x0df2, 0x0df3, 0x0df4, 0x0df5, 0x0df6, 0x0df7, 0x0df8, 0x0df9, +- 0x0aa2, 0x0aa1, 0x0aa3, 0x0aa4, 0x0aa5, 0x0aa6, 0x0aa7, 0x0aa8, +- 0x0abb, 0x0aaa, 0x0aa9, 0x07af, 0x0cdf, 0x0ad0, 0x0ad1, 0x0afd, +- 0x0ad2, 0x0ad3, 0x0afe, 0x0af1, 0x0af2, 0x0aaf, 0x0aae, 0x0ad5, +- 0x0ad6, 0x0ad7, 0x0afc, 0x047e, 0x20ac, 0x0ab8, 0x06b0, 0x0afb, +- 0x0ad4, 0x0ac9, 0x0ab0, 0x0ab1, 0x0ab2, 0x0ab3, 0x0ab4, 0x0ab5, +- 0x0ab6, 0x0ab7, 0x0ac3, 0x0ac4, 0x0ac5, 0x0ac6, 0x08fb, 0x08fc, +- 0x08fd, 0x08fe, 0x08ce, 0x08cd, 0x08ef, 0x08c5, 0x0bca, 0x08d6, +- 0x08c1, 0x08c2, 0x08de, 0x08df, 0x08dc, 0x08dd, 0x08bf, 0x08c0, +- 0x08c8, 0x08c9, 0x08bd, 0x08cf, 0x08bc, 0x08be, 0x08da, 0x08db, +- 0x0bfc, 0x0bdc, 0x0bc2, 0x0bce, 0x0bd3, 0x0bc4, 0x0afa, 0x08a4, +- 0x08a5, 0x0bcc, 0x08ab, 0x08ac, 0x08ad, 0x08ae, 0x08a7, 0x08a8, +- 0x08a9, 0x08aa, 0x08af, 0x08b0, 0x08a1, 0x09ef, 0x09f0, 0x09f2, +- 0x09f3, 0x09e2, 0x09e5, 0x09e9, 0x09e3, 0x09e4, 0x09e8, 0x09f1, +- 0x09f8, 0x09ec, 0x09eb, 0x09ed, 0x09ea, 0x09f4, 0x09f5, 0x09f7, +- 0x09f6, 0x09ee, 0x09e1, 0x09e0, 0x0bcf, 0x0af9, 0x0af8, 0x0af7, +- 0x0aec, 0x0aee, 0x0aed, 0x0af6, 0x0af5, 0x0af3, 0x0af4, 0x0ad9, +- 0x0af0, 0x04a4, 0x04a1, 0x04a2, 0x04a3, 0x04de, 0x04df, 0x04a7, +- 0x04b1, 0x04a8, 0x04b2, 0x04a9, 0x04b3, 0x04aa, 0x04b4, 0x04ab, +- 0x04b5, 0x04b6, 0x04b7, 0x04b8, 0x04b9, 0x04ba, 0x04bb, 0x04bc, +- 0x04bd, 0x04be, 0x04bf, 0x04c0, 0x04c1, 0x04af, 0x04c2, 0x04c3, +- 0x04c4, 0x04c5, 0x04c6, 0x04c7, 0x04c8, 0x04c9, 0x04ca, 0x04cb, +- 0x04cc, 0x04cd, 0x04ce, 0x04cf, 0x04d0, 0x04d1, 0x04d2, 0x04d3, +- 0x04ac, 0x04d4, 0x04ad, 0x04d5, 0x04ae, 0x04d6, 0x04d7, 0x04d8, +- 0x04d9, 0x04da, 0x04db, 0x04dc, 0x04a6, 0x04dd, 0x04a5, 0x04b0 +-}; +-// clang-format on +diff -urNr keepassxc-2.6.4-orig/src/autotype/xcb/keysymmap.py keepassxc-2.6.4-patched/src/autotype/xcb/keysymmap.py +--- keepassxc-2.6.4-orig/src/autotype/xcb/keysymmap.py 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/autotype/xcb/keysymmap.py 1970-01-01 01:00:00.000000000 +0100 +@@ -1,101 +0,0 @@ +-#!/usr/bin/python3 +- +-# +-# Copyright (C) 2013 Felix Geyer +-# +-# This program is free software: you can redistribute it and/or modify +-# it under the terms of the GNU General Public License as published by +-# the Free Software Foundation, either version 2 or (at your option) +-# version 3 of the License. +-# +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY; without even the implied warranty of +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-# GNU General Public License for more details. +-# +-# You should have received a copy of the GNU General Public License +-# along with this program. If not, see . +-# +- +-# +-# Parses keysymdef.h to construct a unicode symbol -> keysym mapping table. +-# +-# The lines that are parsed look like this: +-# #define XK_Aogonek 0x01a1 /* U+0104 LATIN CAPITAL LETTER A WITH OGONEK */ +-# +-# This would create a 0x0104 -> 0x01a1 mapping. +-# +- +-import sys +-import re +-import collections +- +-cols = 8 +- +-if len(sys.argv) >= 2: +- keysymdef = sys.argv[1] +-else: +- keysymdef = "/usr/include/X11/keysymdef.h" +- +-keysymMap = {} +- +-with open(keysymdef, "r") as fid: +- for line in fid: +- match = re.search(r'0x([0-9a-fA-F]+)\s+/\* U\+([0-9a-fA-F]+)', line) +- if match: +- keysym = int(match.group(1), 16) +- unicodeVal = int(match.group(2), 16) +- +- # ignore 1:1 mappings +- if 0x0020 <= keysym <= 0x007e or 0x00a0 <= keysym <= 0x00ff: +- continue +- # ignore unicode | 0x01000000 mappings +- elif keysym >= 0x1000000: +- continue +- +- keysymMap[unicodeVal] = keysym +- +-keysymMap = collections.OrderedDict(sorted(keysymMap.items(), key=lambda t: t[0])) +- +-print("""/* +- * Automatically generated by keysymmap.py from parsing keysymdef.h. +- */ +-""") +- +-print("const int AutoTypePlatformX11::m_unicodeToKeysymLen = {0};".format(len(keysymMap))) +- +-print() +- +-print("const uint AutoTypePlatformX11::m_unicodeToKeysymKeys[] = {") +-keys = keysymMap.keys() +-keyLen = len(keys) +-for idx, val in enumerate(keys, start=1): +- hexVal = "{0:#0{1}x}".format(val, 6) +- +- if idx == keyLen: +- print(hexVal) +- elif (idx % cols) == 0: +- print(hexVal + ",") +- elif ((idx - 1) % cols) == 0: +- print(" " + hexVal + ", ", end="") +- else: +- print(hexVal + ", ", end="") +-print("};") +- +-print() +- +-print("const uint AutoTypePlatformX11::m_unicodeToKeysymValues[] = {") +-values = keysymMap.values() +-valuesLen = len(values) +-for idx, val in enumerate(values, start=1): +- hexVal = "{0:#0{1}x}".format(val, 6) +- +- if idx == valuesLen: +- print(hexVal) +- elif (idx % cols) == 0: +- print(hexVal + ",") +- elif ((idx - 1) % cols) == 0: +- print(" " + hexVal + ", ", end="") +- else: +- print(hexVal + ", ", end="") +-print("};") +diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserAccessControlDialog.cpp keepassxc-2.6.4-patched/src/browser/BrowserAccessControlDialog.cpp +--- keepassxc-2.6.4-orig/src/browser/BrowserAccessControlDialog.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/browser/BrowserAccessControlDialog.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,108 +0,0 @@ +-/* +- * Copyright (C) 2013 Francois Ferrand +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 3 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "BrowserAccessControlDialog.h" +-#include "ui_BrowserAccessControlDialog.h" +- +-#include "core/Entry.h" +- +-BrowserAccessControlDialog::BrowserAccessControlDialog(QWidget* parent) +- : QDialog(parent) +- , m_ui(new Ui::BrowserAccessControlDialog()) +-{ +- setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint); +- +- m_ui->setupUi(this); +- +- connect(m_ui->allowButton, SIGNAL(clicked()), SLOT(accept())); +- connect(m_ui->cancelButton, SIGNAL(clicked()), SLOT(reject())); +-} +- +-BrowserAccessControlDialog::~BrowserAccessControlDialog() +-{ +-} +- +-void BrowserAccessControlDialog::setItems(const QList& items, const QString& urlString, bool httpAuth) +-{ +- QUrl url(urlString); +- m_ui->siteLabel->setText(m_ui->siteLabel->text().arg( +- url.toDisplayString(QUrl::RemoveUserInfo | QUrl::RemovePath | QUrl::RemoveQuery | QUrl::RemoveFragment))); +- +- m_ui->rememberDecisionCheckBox->setVisible(!httpAuth); +- m_ui->rememberDecisionCheckBox->setChecked(false); +- +- m_ui->itemsTable->setRowCount(items.count()); +- m_ui->itemsTable->setColumnCount(2); +- +- int row = 0; +- for (const auto& entry : items) { +- auto item = new QTableWidgetItem(); +- item->setText(entry->title() + " - " + entry->username()); +- item->setData(Qt::UserRole, row); +- item->setCheckState(Qt::Checked); +- item->setFlags(item->flags() | Qt::ItemIsUserCheckable); +- m_ui->itemsTable->setItem(row, 0, item); +- +- auto disableButton = new QPushButton(tr("Disable for this site")); +- disableButton->setAutoDefault(false); +- connect(disableButton, &QAbstractButton::pressed, [&, item] { +- emit disableAccess(item); +- m_ui->itemsTable->removeRow(item->row()); +- if (m_ui->itemsTable->rowCount() == 0) { +- reject(); +- } +- }); +- m_ui->itemsTable->setCellWidget(row, 1, disableButton); +- +- ++row; +- } +- +- m_ui->itemsTable->resizeColumnsToContents(); +- m_ui->itemsTable->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); +- +- m_ui->allowButton->setFocus(); +-} +- +-bool BrowserAccessControlDialog::remember() const +-{ +- return m_ui->rememberDecisionCheckBox->isChecked(); +-} +- +-QList BrowserAccessControlDialog::getSelectedEntries() const +-{ +- QList selected; +- for (int i = 0; i < m_ui->itemsTable->rowCount(); ++i) { +- auto item = m_ui->itemsTable->item(i, 0); +- if (item->checkState() == Qt::Checked) { +- selected.append(item); +- } +- } +- return selected; +-} +- +-QList BrowserAccessControlDialog::getNonSelectedEntries() const +-{ +- QList notSelected; +- for (int i = 0; i < m_ui->itemsTable->rowCount(); ++i) { +- auto item = m_ui->itemsTable->item(i, 0); +- if (item->checkState() != Qt::Checked) { +- notSelected.append(item); +- } +- } +- return notSelected; +-} +diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserAccessControlDialog.h keepassxc-2.6.4-patched/src/browser/BrowserAccessControlDialog.h +--- keepassxc-2.6.4-orig/src/browser/BrowserAccessControlDialog.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/browser/BrowserAccessControlDialog.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,54 +0,0 @@ +-/* +- * Copyright (C) 2013 Francois Ferrand +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 3 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef BROWSERACCESSCONTROLDIALOG_H +-#define BROWSERACCESSCONTROLDIALOG_H +- +-#include +-#include +-#include +- +-class Entry; +- +-namespace Ui +-{ +- class BrowserAccessControlDialog; +-} +- +-class BrowserAccessControlDialog : public QDialog +-{ +- Q_OBJECT +- +-public: +- explicit BrowserAccessControlDialog(QWidget* parent = nullptr); +- ~BrowserAccessControlDialog() override; +- +- void setItems(const QList& items, const QString& urlString, bool httpAuth); +- bool remember() const; +- +- QList getSelectedEntries() const; +- QList getNonSelectedEntries() const; +- +-signals: +- void disableAccess(QTableWidgetItem* item); +- +-private: +- QScopedPointer m_ui; +-}; +- +-#endif // BROWSERACCESSCONTROLDIALOG_H +diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserAccessControlDialog.ui keepassxc-2.6.4-patched/src/browser/BrowserAccessControlDialog.ui +--- keepassxc-2.6.4-orig/src/browser/BrowserAccessControlDialog.ui 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/browser/BrowserAccessControlDialog.ui 1970-01-01 01:00:00.000000000 +0100 +@@ -1,115 +0,0 @@ +- +- +- BrowserAccessControlDialog +- +- +- +- 0 +- 0 +- 405 +- 200 +- +- +- +- KeePassXC - Browser Access Request +- +- +- +- +- +- +- 75 +- true +- +- +- +- %1 is requesting access to the following entries: +- +- +- Qt::AlignCenter +- +- +- +- +- +- +- QAbstractItemView::NoEditTriggers +- +- +- false +- +- +- QAbstractItemView::NoSelection +- +- +- false +- +- +- false +- +- +- false +- +- +- +- +- +- +- +- +- Qt::Horizontal +- +- +- +- 40 +- 20 +- +- +- +- +- +- +- +- Remember access to checked entries +- +- +- Remember access to checked entries +- +- +- Remember +- +- +- +- +- +- +- Allow access to entries +- +- +- Allow Selected +- +- +- true +- +- +- true +- +- +- +- +- +- +- Deny All +- +- +- true +- +- +- +- +- +- +- +- +- +- +diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserAction.cpp keepassxc-2.6.4-patched/src/browser/BrowserAction.cpp +--- keepassxc-2.6.4-orig/src/browser/BrowserAction.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/browser/BrowserAction.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,692 +0,0 @@ +-/* +- * Copyright (C) 2020 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 3 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "BrowserAction.h" +-#include "BrowserService.h" +-#include "BrowserSettings.h" +-#include "BrowserShared.h" +-#include "config-keepassx.h" +-#include "core/Global.h" +- +-#include +-#include +-#include +-#include +-#include +- +-namespace +-{ +- enum +- { +- ERROR_KEEPASS_DATABASE_NOT_OPENED = 1, +- ERROR_KEEPASS_DATABASE_HASH_NOT_RECEIVED = 2, +- ERROR_KEEPASS_CLIENT_PUBLIC_KEY_NOT_RECEIVED = 3, +- ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE = 4, +- ERROR_KEEPASS_TIMEOUT_OR_NOT_CONNECTED = 5, +- ERROR_KEEPASS_ACTION_CANCELLED_OR_DENIED = 6, +- ERROR_KEEPASS_CANNOT_ENCRYPT_MESSAGE = 7, +- ERROR_KEEPASS_ASSOCIATION_FAILED = 8, +- ERROR_KEEPASS_KEY_CHANGE_FAILED = 9, +- ERROR_KEEPASS_ENCRYPTION_KEY_UNRECOGNIZED = 10, +- ERROR_KEEPASS_NO_SAVED_DATABASES_FOUND = 11, +- ERROR_KEEPASS_INCORRECT_ACTION = 12, +- ERROR_KEEPASS_EMPTY_MESSAGE_RECEIVED = 13, +- ERROR_KEEPASS_NO_URL_PROVIDED = 14, +- ERROR_KEEPASS_NO_LOGINS_FOUND = 15, +- ERROR_KEEPASS_NO_GROUPS_FOUND = 16, +- ERROR_KEEPASS_CANNOT_CREATE_NEW_GROUP = 17 +- }; +-} +- +-QJsonObject BrowserAction::processClientMessage(const QJsonObject& json) +-{ +- if (json.isEmpty()) { +- return getErrorReply("", ERROR_KEEPASS_EMPTY_MESSAGE_RECEIVED); +- } +- +- bool triggerUnlock = false; +- const QString trigger = json.value("triggerUnlock").toString(); +- if (!trigger.isEmpty() && trigger.compare(TRUE_STR, Qt::CaseSensitive) == 0) { +- triggerUnlock = true; +- } +- +- const QString action = json.value("action").toString(); +- if (action.isEmpty()) { +- return getErrorReply(action, ERROR_KEEPASS_INCORRECT_ACTION); +- } +- +- if (action.compare("change-public-keys", Qt::CaseSensitive) != 0 && !browserService()->isDatabaseOpened()) { +- if (m_clientPublicKey.isEmpty()) { +- return getErrorReply(action, ERROR_KEEPASS_CLIENT_PUBLIC_KEY_NOT_RECEIVED); +- } else if (!browserService()->openDatabase(triggerUnlock)) { +- return getErrorReply(action, ERROR_KEEPASS_DATABASE_NOT_OPENED); +- } +- } +- +- return handleAction(json); +-} +- +-// Private functions +-/////////////////////// +- +-QJsonObject BrowserAction::handleAction(const QJsonObject& json) +-{ +- QString action = json.value("action").toString(); +- +- if (action.compare("change-public-keys", Qt::CaseSensitive) == 0) { +- return handleChangePublicKeys(json, action); +- } else if (action.compare("get-databasehash", Qt::CaseSensitive) == 0) { +- return handleGetDatabaseHash(json, action); +- } else if (action.compare("associate", Qt::CaseSensitive) == 0) { +- return handleAssociate(json, action); +- } else if (action.compare("test-associate", Qt::CaseSensitive) == 0) { +- return handleTestAssociate(json, action); +- } else if (action.compare("get-logins", Qt::CaseSensitive) == 0) { +- return handleGetLogins(json, action); +- } else if (action.compare("generate-password", Qt::CaseSensitive) == 0) { +- return handleGeneratePassword(json, action); +- } else if (action.compare("set-login", Qt::CaseSensitive) == 0) { +- return handleSetLogin(json, action); +- } else if (action.compare("lock-database", Qt::CaseSensitive) == 0) { +- return handleLockDatabase(json, action); +- } else if (action.compare("get-database-groups", Qt::CaseSensitive) == 0) { +- return handleGetDatabaseGroups(json, action); +- } else if (action.compare("create-new-group", Qt::CaseSensitive) == 0) { +- return handleCreateNewGroup(json, action); +- } else if (action.compare("get-totp", Qt::CaseSensitive) == 0) { +- return handleGetTotp(json, action); +- } +- +- // Action was not recognized +- return getErrorReply(action, ERROR_KEEPASS_INCORRECT_ACTION); +-} +- +-QJsonObject BrowserAction::handleChangePublicKeys(const QJsonObject& json, const QString& action) +-{ +- const QString nonce = json.value("nonce").toString(); +- const QString clientPublicKey = json.value("publicKey").toString(); +- +- if (clientPublicKey.isEmpty() || nonce.isEmpty()) { +- return getErrorReply(action, ERROR_KEEPASS_CLIENT_PUBLIC_KEY_NOT_RECEIVED); +- } +- +- m_associated = false; +- unsigned char pk[crypto_box_PUBLICKEYBYTES]; +- unsigned char sk[crypto_box_SECRETKEYBYTES]; +- crypto_box_keypair(pk, sk); +- +- const QString publicKey = getBase64FromKey(pk, crypto_box_PUBLICKEYBYTES); +- const QString secretKey = getBase64FromKey(sk, crypto_box_SECRETKEYBYTES); +- if (publicKey.isEmpty() || secretKey.isEmpty()) { +- return getErrorReply(action, ERROR_KEEPASS_ENCRYPTION_KEY_UNRECOGNIZED); +- } +- +- m_clientPublicKey = clientPublicKey; +- m_publicKey = publicKey; +- m_secretKey = secretKey; +- +- QJsonObject response = buildMessage(incrementNonce(nonce)); +- response["action"] = action; +- response["publicKey"] = publicKey; +- +- return response; +-} +- +-QJsonObject BrowserAction::handleGetDatabaseHash(const QJsonObject& json, const QString& action) +-{ +- const QString hash = browserService()->getDatabaseHash(); +- const QString nonce = json.value("nonce").toString(); +- const QString encrypted = json.value("message").toString(); +- const QJsonObject decrypted = decryptMessage(encrypted, nonce); +- +- if (decrypted.isEmpty()) { +- return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); +- } +- +- if (hash.isEmpty()) { +- return getErrorReply(action, ERROR_KEEPASS_DATABASE_HASH_NOT_RECEIVED); +- } +- +- QString command = decrypted.value("action").toString(); +- if (!command.isEmpty() && command.compare("get-databasehash", Qt::CaseSensitive) == 0) { +- const QString newNonce = incrementNonce(nonce); +- +- QJsonObject message = buildMessage(newNonce); +- message["hash"] = hash; +- +- // Update a legacy database hash if found +- const QJsonArray hashes = decrypted.value("connectedKeys").toArray(); +- if (!hashes.isEmpty()) { +- const QString legacyHash = browserService()->getDatabaseHash(true); +- if (hashes.contains(legacyHash)) { +- message["oldHash"] = legacyHash; +- } +- } +- +- return buildResponse(action, message, newNonce); +- } +- +- return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); +-} +- +-QJsonObject BrowserAction::handleAssociate(const QJsonObject& json, const QString& action) +-{ +- const QString hash = browserService()->getDatabaseHash(); +- const QString nonce = json.value("nonce").toString(); +- const QString encrypted = json.value("message").toString(); +- const QJsonObject decrypted = decryptMessage(encrypted, nonce); +- +- if (decrypted.isEmpty()) { +- return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); +- } +- +- const QString key = decrypted.value("key").toString(); +- if (key.isEmpty()) { +- return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED); +- } +- +- if (key.compare(m_clientPublicKey, Qt::CaseSensitive) == 0) { +- // Check for identification key. If it's not found, ensure backwards compatibility and use the current public +- // key +- const QString idKey = decrypted.value("idKey").toString(); +- const QString id = browserService()->storeKey((idKey.isEmpty() ? key : idKey)); +- if (id.isEmpty()) { +- return getErrorReply(action, ERROR_KEEPASS_ACTION_CANCELLED_OR_DENIED); +- } +- +- m_associated = true; +- const QString newNonce = incrementNonce(nonce); +- +- QJsonObject message = buildMessage(newNonce); +- message["hash"] = hash; +- message["id"] = id; +- return buildResponse(action, message, newNonce); +- } +- +- return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED); +-} +- +-QJsonObject BrowserAction::handleTestAssociate(const QJsonObject& json, const QString& action) +-{ +- const QString hash = browserService()->getDatabaseHash(); +- const QString nonce = json.value("nonce").toString(); +- const QString encrypted = json.value("message").toString(); +- const QJsonObject decrypted = decryptMessage(encrypted, nonce); +- +- if (decrypted.isEmpty()) { +- return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); +- } +- +- const QString responseKey = decrypted.value("key").toString(); +- const QString id = decrypted.value("id").toString(); +- if (responseKey.isEmpty() || id.isEmpty()) { +- return getErrorReply(action, ERROR_KEEPASS_DATABASE_NOT_OPENED); +- } +- +- const QString key = browserService()->getKey(id); +- if (key.isEmpty() || key.compare(responseKey, Qt::CaseSensitive) != 0) { +- return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED); +- } +- +- m_associated = true; +- const QString newNonce = incrementNonce(nonce); +- +- QJsonObject message = buildMessage(newNonce); +- message["hash"] = hash; +- message["id"] = id; +- +- return buildResponse(action, message, newNonce); +-} +- +-QJsonObject BrowserAction::handleGetLogins(const QJsonObject& json, const QString& action) +-{ +- const QString hash = browserService()->getDatabaseHash(); +- const QString nonce = json.value("nonce").toString(); +- const QString encrypted = json.value("message").toString(); +- +- if (!m_associated) { +- return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED); +- } +- +- const QJsonObject decrypted = decryptMessage(encrypted, nonce); +- if (decrypted.isEmpty()) { +- return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); +- } +- +- const QString siteUrl = decrypted.value("url").toString(); +- if (siteUrl.isEmpty()) { +- return getErrorReply(action, ERROR_KEEPASS_NO_URL_PROVIDED); +- } +- +- const QJsonArray keys = decrypted.value("keys").toArray(); +- +- StringPairList keyList; +- for (const QJsonValue val : keys) { +- const QJsonObject keyObject = val.toObject(); +- keyList.push_back(qMakePair(keyObject.value("id").toString(), keyObject.value("key").toString())); +- } +- +- const QString id = decrypted.value("id").toString(); +- const QString formUrl = decrypted.value("submitUrl").toString(); +- const QString auth = decrypted.value("httpAuth").toString(); +- const bool httpAuth = auth.compare(TRUE_STR, Qt::CaseSensitive) == 0 ? true : false; +- const QJsonArray users = browserService()->findMatchingEntries(id, siteUrl, formUrl, "", keyList, httpAuth); +- +- if (users.isEmpty()) { +- return getErrorReply(action, ERROR_KEEPASS_NO_LOGINS_FOUND); +- } +- +- const QString newNonce = incrementNonce(nonce); +- +- QJsonObject message = buildMessage(newNonce); +- message["count"] = users.count(); +- message["entries"] = users; +- message["hash"] = hash; +- message["id"] = id; +- +- return buildResponse(action, message, newNonce); +-} +- +-QJsonObject BrowserAction::handleGeneratePassword(const QJsonObject& json, const QString& action) +-{ +- auto nonce = json.value("nonce").toString(); +- auto password = browserSettings()->generatePassword(); +- +- if (nonce.isEmpty() || password.isEmpty()) { +- return QJsonObject(); +- } +- +- // For backwards compatibility +- password["login"] = password["entropy"]; +- +- QJsonArray arr; +- arr.append(password); +- +- const QString newNonce = incrementNonce(nonce); +- +- QJsonObject message = buildMessage(newNonce); +- message["entries"] = arr; +- +- return buildResponse(action, message, newNonce); +-} +- +-QJsonObject BrowserAction::handleSetLogin(const QJsonObject& json, const QString& action) +-{ +- const QString hash = browserService()->getDatabaseHash(); +- const QString nonce = json.value("nonce").toString(); +- const QString encrypted = json.value("message").toString(); +- +- if (!m_associated) { +- return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED); +- } +- +- const QJsonObject decrypted = decryptMessage(encrypted, nonce); +- if (decrypted.isEmpty()) { +- return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); +- } +- +- const QString url = decrypted.value("url").toString(); +- if (url.isEmpty()) { +- return getErrorReply(action, ERROR_KEEPASS_NO_URL_PROVIDED); +- } +- +- const QString id = decrypted.value("id").toString(); +- const QString login = decrypted.value("login").toString(); +- const QString password = decrypted.value("password").toString(); +- const QString submitUrl = decrypted.value("submitUrl").toString(); +- const QString uuid = decrypted.value("uuid").toString(); +- const QString group = decrypted.value("group").toString(); +- const QString groupUuid = decrypted.value("groupUuid").toString(); +- const QString realm; +- +- bool result = true; +- if (uuid.isEmpty()) { +- browserService()->addEntry(id, login, password, url, submitUrl, realm, group, groupUuid); +- } else { +- result = browserService()->updateEntry(id, uuid, login, password, url, submitUrl); +- } +- +- const QString newNonce = incrementNonce(nonce); +- +- QJsonObject message = buildMessage(newNonce); +- message["count"] = QJsonValue::Null; +- message["entries"] = QJsonValue::Null; +- message["error"] = result ? QStringLiteral("success") : QStringLiteral("error"); +- message["hash"] = hash; +- +- return buildResponse(action, message, newNonce); +-} +- +-QJsonObject BrowserAction::handleLockDatabase(const QJsonObject& json, const QString& action) +-{ +- const QString hash = browserService()->getDatabaseHash(); +- const QString nonce = json.value("nonce").toString(); +- const QString encrypted = json.value("message").toString(); +- const QJsonObject decrypted = decryptMessage(encrypted, nonce); +- +- if (decrypted.isEmpty()) { +- return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); +- } +- +- if (hash.isEmpty()) { +- return getErrorReply(action, ERROR_KEEPASS_DATABASE_HASH_NOT_RECEIVED); +- } +- +- QString command = decrypted.value("action").toString(); +- if (!command.isEmpty() && command.compare("lock-database", Qt::CaseSensitive) == 0) { +- browserService()->lockDatabase(); +- +- const QString newNonce = incrementNonce(nonce); +- QJsonObject message = buildMessage(newNonce); +- +- return buildResponse(action, message, newNonce); +- } +- +- return getErrorReply(action, ERROR_KEEPASS_DATABASE_HASH_NOT_RECEIVED); +-} +- +-QJsonObject BrowserAction::handleGetDatabaseGroups(const QJsonObject& json, const QString& action) +-{ +- const QString hash = browserService()->getDatabaseHash(); +- const QString nonce = json.value("nonce").toString(); +- const QString encrypted = json.value("message").toString(); +- +- if (!m_associated) { +- return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED); +- } +- +- const QJsonObject decrypted = decryptMessage(encrypted, nonce); +- if (decrypted.isEmpty()) { +- return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); +- } +- +- QString command = decrypted.value("action").toString(); +- if (command.isEmpty() || command.compare("get-database-groups", Qt::CaseSensitive) != 0) { +- return getErrorReply(action, ERROR_KEEPASS_INCORRECT_ACTION); +- } +- +- const QJsonObject groups = browserService()->getDatabaseGroups(); +- if (groups.isEmpty()) { +- return getErrorReply(action, ERROR_KEEPASS_NO_GROUPS_FOUND); +- } +- +- const QString newNonce = incrementNonce(nonce); +- +- QJsonObject message = buildMessage(newNonce); +- message["groups"] = groups; +- +- return buildResponse(action, message, newNonce); +-} +- +-QJsonObject BrowserAction::handleCreateNewGroup(const QJsonObject& json, const QString& action) +-{ +- const QString hash = browserService()->getDatabaseHash(); +- const QString nonce = json.value("nonce").toString(); +- const QString encrypted = json.value("message").toString(); +- +- if (!m_associated) { +- return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED); +- } +- +- const QJsonObject decrypted = decryptMessage(encrypted, nonce); +- if (decrypted.isEmpty()) { +- return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); +- } +- +- QString command = decrypted.value("action").toString(); +- if (command.isEmpty() || command.compare("create-new-group", Qt::CaseSensitive) != 0) { +- return getErrorReply(action, ERROR_KEEPASS_INCORRECT_ACTION); +- } +- +- QString group = decrypted.value("groupName").toString(); +- const QJsonObject newGroup = browserService()->createNewGroup(group); +- if (newGroup.isEmpty() || newGroup["name"].toString().isEmpty() || newGroup["uuid"].toString().isEmpty()) { +- return getErrorReply(action, ERROR_KEEPASS_CANNOT_CREATE_NEW_GROUP); +- } +- +- const QString newNonce = incrementNonce(nonce); +- +- QJsonObject message = buildMessage(newNonce); +- message["name"] = newGroup["name"]; +- message["uuid"] = newGroup["uuid"]; +- +- return buildResponse(action, message, newNonce); +-} +- +-QJsonObject BrowserAction::handleGetTotp(const QJsonObject& json, const QString& action) +-{ +- const QString nonce = json.value("nonce").toString(); +- const QString encrypted = json.value("message").toString(); +- +- if (!m_associated) { +- return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED); +- } +- +- const QJsonObject decrypted = decryptMessage(encrypted, nonce); +- if (decrypted.isEmpty()) { +- return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); +- } +- +- QString command = decrypted.value("action").toString(); +- if (command.isEmpty() || command.compare("get-totp", Qt::CaseSensitive) != 0) { +- return getErrorReply(action, ERROR_KEEPASS_INCORRECT_ACTION); +- } +- +- const QString uuid = decrypted.value("uuid").toString(); +- +- // Get the current TOTP +- const auto totp = browserService()->getCurrentTotp(uuid); +- const QString newNonce = incrementNonce(nonce); +- +- QJsonObject message = buildMessage(newNonce); +- message["totp"] = totp; +- +- return buildResponse(action, message, newNonce); +-} +- +-QJsonObject BrowserAction::getErrorReply(const QString& action, const int errorCode) const +-{ +- QJsonObject response; +- response["action"] = action; +- response["errorCode"] = QString::number(errorCode); +- response["error"] = getErrorMessage(errorCode); +- return response; +-} +- +-QJsonObject BrowserAction::buildMessage(const QString& nonce) const +-{ +- QJsonObject message; +- message["version"] = KEEPASSXC_VERSION; +- message["success"] = TRUE_STR; +- message["nonce"] = nonce; +- return message; +-} +- +-QJsonObject BrowserAction::buildResponse(const QString& action, const QJsonObject& message, const QString& nonce) +-{ +- QJsonObject response; +- QString encryptedMessage = encryptMessage(message, nonce); +- if (encryptedMessage.isEmpty()) { +- return getErrorReply(action, ERROR_KEEPASS_CANNOT_ENCRYPT_MESSAGE); +- } +- +- response["action"] = action; +- response["message"] = encryptedMessage; +- response["nonce"] = nonce; +- return response; +-} +- +-QString BrowserAction::getErrorMessage(const int errorCode) const +-{ +- switch (errorCode) { +- case ERROR_KEEPASS_DATABASE_NOT_OPENED: +- return QObject::tr("Database not opened"); +- case ERROR_KEEPASS_DATABASE_HASH_NOT_RECEIVED: +- return QObject::tr("Database hash not available"); +- case ERROR_KEEPASS_CLIENT_PUBLIC_KEY_NOT_RECEIVED: +- return QObject::tr("Client public key not received"); +- case ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE: +- return QObject::tr("Cannot decrypt message"); +- case ERROR_KEEPASS_ACTION_CANCELLED_OR_DENIED: +- return QObject::tr("Action cancelled or denied"); +- case ERROR_KEEPASS_CANNOT_ENCRYPT_MESSAGE: +- return QObject::tr("Message encryption failed."); +- case ERROR_KEEPASS_ASSOCIATION_FAILED: +- return QObject::tr("KeePassXC association failed, try again"); +- case ERROR_KEEPASS_ENCRYPTION_KEY_UNRECOGNIZED: +- return QObject::tr("Encryption key is not recognized"); +- case ERROR_KEEPASS_INCORRECT_ACTION: +- return QObject::tr("Incorrect action"); +- case ERROR_KEEPASS_EMPTY_MESSAGE_RECEIVED: +- return QObject::tr("Empty message received"); +- case ERROR_KEEPASS_NO_URL_PROVIDED: +- return QObject::tr("No URL provided"); +- case ERROR_KEEPASS_NO_LOGINS_FOUND: +- return QObject::tr("No logins found"); +- case ERROR_KEEPASS_NO_GROUPS_FOUND: +- return QObject::tr("No groups found"); +- case ERROR_KEEPASS_CANNOT_CREATE_NEW_GROUP: +- return QObject::tr("Cannot create new group"); +- default: +- return QObject::tr("Unknown error"); +- } +-} +- +-QString BrowserAction::encryptMessage(const QJsonObject& message, const QString& nonce) +-{ +- if (message.isEmpty() || nonce.isEmpty()) { +- return QString(); +- } +- +- const QString reply(QJsonDocument(message).toJson()); +- if (!reply.isEmpty()) { +- return encrypt(reply, nonce); +- } +- +- return QString(); +-} +- +-QJsonObject BrowserAction::decryptMessage(const QString& message, const QString& nonce) +-{ +- if (message.isEmpty() || nonce.isEmpty()) { +- return QJsonObject(); +- } +- +- QByteArray ba = decrypt(message, nonce); +- if (ba.isEmpty()) { +- return QJsonObject(); +- } +- +- return getJsonObject(ba); +-} +- +-QString BrowserAction::encrypt(const QString& plaintext, const QString& nonce) +-{ +- const QByteArray ma = plaintext.toUtf8(); +- const QByteArray na = base64Decode(nonce); +- const QByteArray ca = base64Decode(m_clientPublicKey); +- const QByteArray sa = base64Decode(m_secretKey); +- +- std::vector m(ma.cbegin(), ma.cend()); +- std::vector n(na.cbegin(), na.cend()); +- std::vector ck(ca.cbegin(), ca.cend()); +- std::vector sk(sa.cbegin(), sa.cend()); +- +- std::vector e; +- e.resize(BrowserShared::NATIVEMSG_MAX_LENGTH); +- +- if (m.empty() || n.empty() || ck.empty() || sk.empty()) { +- return QString(); +- } +- +- if (crypto_box_easy(e.data(), m.data(), m.size(), n.data(), ck.data(), sk.data()) == 0) { +- QByteArray res = getQByteArray(e.data(), (crypto_box_MACBYTES + ma.length())); +- return res.toBase64(); +- } +- +- return QString(); +-} +- +-QByteArray BrowserAction::decrypt(const QString& encrypted, const QString& nonce) +-{ +- const QByteArray ma = base64Decode(encrypted); +- const QByteArray na = base64Decode(nonce); +- const QByteArray ca = base64Decode(m_clientPublicKey); +- const QByteArray sa = base64Decode(m_secretKey); +- +- std::vector m(ma.cbegin(), ma.cend()); +- std::vector n(na.cbegin(), na.cend()); +- std::vector ck(ca.cbegin(), ca.cend()); +- std::vector sk(sa.cbegin(), sa.cend()); +- +- std::vector d; +- d.resize(BrowserShared::NATIVEMSG_MAX_LENGTH); +- +- if (m.empty() || n.empty() || ck.empty() || sk.empty()) { +- return QByteArray(); +- } +- +- if (crypto_box_open_easy(d.data(), m.data(), ma.length(), n.data(), ck.data(), sk.data()) == 0) { +- return getQByteArray(d.data(), std::char_traits::length(reinterpret_cast(d.data()))); +- } +- +- return QByteArray(); +-} +- +-QString BrowserAction::getBase64FromKey(const uchar* array, const uint len) +-{ +- return getQByteArray(array, len).toBase64(); +-} +- +-QByteArray BrowserAction::getQByteArray(const uchar* array, const uint len) const +-{ +- QByteArray qba; +- qba.reserve(len); +- for (uint i = 0; i < len; ++i) { +- qba.append(static_cast(array[i])); +- } +- return qba; +-} +- +-QJsonObject BrowserAction::getJsonObject(const uchar* pArray, const uint len) const +-{ +- QByteArray arr = getQByteArray(pArray, len); +- QJsonParseError err; +- QJsonDocument doc(QJsonDocument::fromJson(arr, &err)); +- return doc.object(); +-} +- +-QJsonObject BrowserAction::getJsonObject(const QByteArray& ba) const +-{ +- QJsonParseError err; +- QJsonDocument doc(QJsonDocument::fromJson(ba, &err)); +- return doc.object(); +-} +- +-QByteArray BrowserAction::base64Decode(const QString& str) +-{ +- return QByteArray::fromBase64(str.toUtf8()); +-} +- +-QString BrowserAction::incrementNonce(const QString& nonce) +-{ +- const QByteArray nonceArray = base64Decode(nonce); +- std::vector n(nonceArray.cbegin(), nonceArray.cend()); +- +- sodium_increment(n.data(), n.size()); +- return getQByteArray(n.data(), n.size()).toBase64(); +-} +diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserAction.h keepassxc-2.6.4-patched/src/browser/BrowserAction.h +--- keepassxc-2.6.4-orig/src/browser/BrowserAction.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/browser/BrowserAction.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,72 +0,0 @@ +-/* +- * Copyright (C) 2020 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 3 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef BROWSERACTION_H +-#define BROWSERACTION_H +- +-#include +-#include +- +-class BrowserAction +-{ +-public: +- explicit BrowserAction() = default; +- ~BrowserAction() = default; +- +- QJsonObject processClientMessage(const QJsonObject& json); +- +-private: +- QJsonObject handleAction(const QJsonObject& json); +- QJsonObject handleChangePublicKeys(const QJsonObject& json, const QString& action); +- QJsonObject handleGetDatabaseHash(const QJsonObject& json, const QString& action); +- QJsonObject handleAssociate(const QJsonObject& json, const QString& action); +- QJsonObject handleTestAssociate(const QJsonObject& json, const QString& action); +- QJsonObject handleGetLogins(const QJsonObject& json, const QString& action); +- QJsonObject handleGeneratePassword(const QJsonObject& json, const QString& action); +- QJsonObject handleSetLogin(const QJsonObject& json, const QString& action); +- QJsonObject handleLockDatabase(const QJsonObject& json, const QString& action); +- QJsonObject handleGetDatabaseGroups(const QJsonObject& json, const QString& action); +- QJsonObject handleCreateNewGroup(const QJsonObject& json, const QString& action); +- QJsonObject handleGetTotp(const QJsonObject& json, const QString& action); +- +- QJsonObject buildMessage(const QString& nonce) const; +- QJsonObject buildResponse(const QString& action, const QJsonObject& message, const QString& nonce); +- QJsonObject getErrorReply(const QString& action, const int errorCode) const; +- QString getErrorMessage(const int errorCode) const; +- +- QString encryptMessage(const QJsonObject& message, const QString& nonce); +- QJsonObject decryptMessage(const QString& message, const QString& nonce); +- QString encrypt(const QString& plaintext, const QString& nonce); +- QByteArray decrypt(const QString& encrypted, const QString& nonce); +- +- QString getBase64FromKey(const uchar* array, const uint len); +- QByteArray getQByteArray(const uchar* array, const uint len) const; +- QJsonObject getJsonObject(const uchar* pArray, const uint len) const; +- QJsonObject getJsonObject(const QByteArray& ba) const; +- QByteArray base64Decode(const QString& str); +- QString incrementNonce(const QString& nonce); +- +-private: +- QString m_clientPublicKey; +- QString m_publicKey; +- QString m_secretKey; +- bool m_associated = false; +- +- friend class TestBrowser; +-}; +- +-#endif // BROWSERACTION_H +diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserEntryConfig.cpp keepassxc-2.6.4-patched/src/browser/BrowserEntryConfig.cpp +--- keepassxc-2.6.4-orig/src/browser/BrowserEntryConfig.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/browser/BrowserEntryConfig.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,108 +0,0 @@ +-/* +- * Copyright (C) 2013 Francois Ferrand +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 3 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "BrowserEntryConfig.h" +-#include "core/Entry.h" +-#include "core/EntryAttributes.h" +-#include +- +-static const char KEEPASSXCBROWSER_NAME[] = "KeePassXC-Browser Settings"; +- +-BrowserEntryConfig::BrowserEntryConfig(QObject* parent) +- : QObject(parent) +-{ +-} +- +-QStringList BrowserEntryConfig::allowedHosts() const +-{ +- return m_allowedHosts.toList(); +-} +- +-void BrowserEntryConfig::setAllowedHosts(const QStringList& allowedHosts) +-{ +- m_allowedHosts = allowedHosts.toSet(); +-} +- +-QStringList BrowserEntryConfig::deniedHosts() const +-{ +- return m_deniedHosts.toList(); +-} +- +-void BrowserEntryConfig::setDeniedHosts(const QStringList& deniedHosts) +-{ +- m_deniedHosts = deniedHosts.toSet(); +-} +- +-bool BrowserEntryConfig::isAllowed(const QString& host) const +-{ +- return m_allowedHosts.contains(host); +-} +- +-void BrowserEntryConfig::allow(const QString& host) +-{ +- m_allowedHosts.insert(host); +- m_deniedHosts.remove(host); +-} +- +-bool BrowserEntryConfig::isDenied(const QString& host) const +-{ +- return m_deniedHosts.contains(host); +-} +- +-void BrowserEntryConfig::deny(const QString& host) +-{ +- m_deniedHosts.insert(host); +- m_allowedHosts.remove(host); +-} +- +-QString BrowserEntryConfig::realm() const +-{ +- return m_realm; +-} +- +-void BrowserEntryConfig::setRealm(const QString& realm) +-{ +- m_realm = realm; +-} +- +-bool BrowserEntryConfig::load(const Entry* entry) +-{ +- QString s = entry->customData()->value(KEEPASSXCBROWSER_NAME); +- if (s.isEmpty()) { +- return false; +- } +- +- QJsonDocument doc = QJsonDocument::fromJson(s.toUtf8()); +- if (doc.isNull()) { +- return false; +- } +- +- QVariantMap map = doc.object().toVariantMap(); +- for (QVariantMap::const_iterator iter = map.cbegin(); iter != map.cend(); ++iter) { +- setProperty(iter.key().toLatin1(), iter.value()); +- } +- return true; +-} +- +-void BrowserEntryConfig::save(Entry* entry) +-{ +- QVariantMap v = qo2qv(this); +- QJsonObject o = QJsonObject::fromVariantMap(v); +- QByteArray json = QJsonDocument(o).toJson(QJsonDocument::Compact); +- entry->customData()->set(KEEPASSXCBROWSER_NAME, json); +-} +diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserEntryConfig.h keepassxc-2.6.4-patched/src/browser/BrowserEntryConfig.h +--- keepassxc-2.6.4-orig/src/browser/BrowserEntryConfig.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/browser/BrowserEntryConfig.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,60 +0,0 @@ +-/* +- * Copyright (C) 2013 Francois Ferrand +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 3 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef BROWSERENTRYCONFIG_H +-#define BROWSERENTRYCONFIG_H +- +-#include "Variant.h" +-#include +-#include +-#include +-#include +- +-class Entry; +- +-class BrowserEntryConfig : public QObject +-{ +- Q_OBJECT +- Q_PROPERTY(QStringList Allow READ allowedHosts WRITE setAllowedHosts) +- Q_PROPERTY(QStringList Deny READ deniedHosts WRITE setDeniedHosts) +- Q_PROPERTY(QString Realm READ realm WRITE setRealm) +- +-public: +- BrowserEntryConfig(QObject* object = nullptr); +- +- bool load(const Entry* entry); +- void save(Entry* entry); +- bool isAllowed(const QString& host) const; +- void allow(const QString& host); +- bool isDenied(const QString& host) const; +- void deny(const QString& host); +- QString realm() const; +- void setRealm(const QString& realm); +- +-private: +- QStringList allowedHosts() const; +- void setAllowedHosts(const QStringList& allowedHosts); +- QStringList deniedHosts() const; +- void setDeniedHosts(const QStringList& deniedHosts); +- +- QSet m_allowedHosts; +- QSet m_deniedHosts; +- QString m_realm; +-}; +- +-#endif // BROWSERENTRYCONFIG_H +diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserEntrySaveDialog.cpp keepassxc-2.6.4-patched/src/browser/BrowserEntrySaveDialog.cpp +--- keepassxc-2.6.4-orig/src/browser/BrowserEntrySaveDialog.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/browser/BrowserEntrySaveDialog.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,82 +0,0 @@ +-/* +- * Copyright (C) 2013 Francois Ferrand +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 3 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "BrowserEntrySaveDialog.h" +-#include "ui_BrowserEntrySaveDialog.h" +- +-#include "core/Database.h" +-#include "gui/DatabaseWidget.h" +- +-BrowserEntrySaveDialog::BrowserEntrySaveDialog(QWidget* parent) +- : QDialog(parent) +- , m_ui(new Ui::BrowserEntrySaveDialog()) +-{ +- this->setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint); +- +- m_ui->setupUi(this); +- connect(m_ui->okButton, SIGNAL(clicked()), this, SLOT(accept())); +- connect(m_ui->cancelButton, SIGNAL(clicked()), this, SLOT(reject())); +- +- m_ui->itemsList->setSelectionMode(QAbstractItemView::SingleSelection); +- m_ui->label->setText(QString(tr("You have multiple databases open.\n" +- "Please select the correct database for saving credentials."))); +-} +- +-BrowserEntrySaveDialog::~BrowserEntrySaveDialog() +-{ +-} +- +-int BrowserEntrySaveDialog::setItems(QList& databaseWidgets, DatabaseWidget* currentWidget) const +-{ +- uint counter = 0; +- int activeIndex = -1; +- for (const auto dbWidget : databaseWidgets) { +- QString databaseName = dbWidget->database()->metadata()->name(); +- QString databaseFileName = dbWidget->database()->filePath(); +- +- auto* item = new QListWidgetItem(); +- item->setData(Qt::UserRole, counter); +- +- // Show database name (and filename if the name has been set in metadata) +- if (databaseName == databaseFileName) { +- item->setText(databaseFileName); +- } else { +- item->setText(QString("%1 (%2)").arg(databaseName, databaseFileName)); +- } +- +- if (currentWidget == dbWidget) { +- activeIndex = counter; +- } +- +- m_ui->itemsList->addItem(item); +- ++counter; +- } +- +- // This must be done after the whole list is filled +- if (activeIndex >= 0) { +- m_ui->itemsList->item(activeIndex)->setSelected(true); +- } +- +- m_ui->itemsList->selectAll(); +- return databaseWidgets.length(); +-} +- +-QList BrowserEntrySaveDialog::getSelected() const +-{ +- return m_ui->itemsList->selectedItems(); +-} +diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserEntrySaveDialog.h keepassxc-2.6.4-patched/src/browser/BrowserEntrySaveDialog.h +--- keepassxc-2.6.4-orig/src/browser/BrowserEntrySaveDialog.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/browser/BrowserEntrySaveDialog.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,50 +0,0 @@ +-/* +- * Copyright (C) 2013 Francois Ferrand +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 3 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef BROWSERENTRYSAVEDIALOG_H +-#define BROWSERENTRYSAVEDIALOG_H +- +-#include "gui/DatabaseTabWidget.h" +- +-#include +-#include +-#include +- +-class Entry; +- +-namespace Ui +-{ +- class BrowserEntrySaveDialog; +-} +- +-class BrowserEntrySaveDialog : public QDialog +-{ +- Q_OBJECT +- +-public: +- explicit BrowserEntrySaveDialog(QWidget* parent = nullptr); +- ~BrowserEntrySaveDialog() override; +- +- int setItems(QList& databaseWidgets, DatabaseWidget* currentWidget) const; +- QList getSelected() const; +- +-private: +- QScopedPointer m_ui; +-}; +- +-#endif // BROWSERENTRYSAVEDIALOG_H +diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserEntrySaveDialog.ui keepassxc-2.6.4-patched/src/browser/BrowserEntrySaveDialog.ui +--- keepassxc-2.6.4-orig/src/browser/BrowserEntrySaveDialog.ui 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/browser/BrowserEntrySaveDialog.ui 1970-01-01 01:00:00.000000000 +0100 +@@ -1,62 +0,0 @@ +- +- +- BrowserEntrySaveDialog +- +- +- +- 0 +- 0 +- 400 +- 221 +- +- +- +- KeePassXC-Browser Save Entry +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- Qt::Horizontal +- +- +- +- 40 +- 20 +- +- +- +- +- +- +- +- Ok +- +- +- +- +- +- +- Cancel +- +- +- +- +- +- +- +- +- +- +diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserHost.cpp keepassxc-2.6.4-patched/src/browser/BrowserHost.cpp +--- keepassxc-2.6.4-orig/src/browser/BrowserHost.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/browser/BrowserHost.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,122 +0,0 @@ +-/* +- * Copyright (C) 2020 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 3 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "BrowserHost.h" +-#include "BrowserSettings.h" +-#include "BrowserShared.h" +- +-#include +-#include +-#include +-#include +-#include +- +-#include "sodium.h" +-#include +- +-#ifdef Q_OS_WIN +-#include +-#include +- +-#include +-#else +-#include +-#include +-#endif +- +-BrowserHost::BrowserHost(QObject* parent) +- : QObject(parent) +-{ +- m_localServer = new QLocalServer(this); +- m_localServer->setSocketOptions(QLocalServer::UserAccessOption); +- connect(m_localServer.data(), SIGNAL(newConnection()), this, SLOT(proxyConnected())); +-} +- +-BrowserHost::~BrowserHost() +-{ +- stop(); +-} +- +-void BrowserHost::start() +-{ +- if (sodium_init() == -1) { +- qWarning() << "Failed to start browser service: libsodium failed to initialize!"; +- return; +- } +- +- if (!m_localServer->isListening()) { +- m_localServer->listen(BrowserShared::localServerPath()); +- } +-} +- +-void BrowserHost::stop() +-{ +- m_socketList.clear(); +- m_localServer->close(); +-} +- +-void BrowserHost::proxyConnected() +-{ +- auto socket = m_localServer->nextPendingConnection(); +- if (socket) { +- m_socketList.append(socket); +- connect(socket, SIGNAL(readyRead()), this, SLOT(readProxyMessage())); +- connect(socket, SIGNAL(disconnected()), this, SLOT(proxyDisconnected())); +- } +-} +- +-void BrowserHost::readProxyMessage() +-{ +- QLocalSocket* socket = qobject_cast(QObject::sender()); +- if (!socket || socket->bytesAvailable() <= 0) { +- return; +- } +- +- socket->setReadBufferSize(BrowserShared::NATIVEMSG_MAX_LENGTH); +- int socketDesc = socket->socketDescriptor(); +- if (socketDesc) { +- int max = BrowserShared::NATIVEMSG_MAX_LENGTH; +- setsockopt(socketDesc, SOL_SOCKET, SO_SNDBUF, reinterpret_cast(&max), sizeof(max)); +- } +- +- QJsonParseError error; +- auto json = QJsonDocument::fromJson(socket->readAll(), &error); +- if (json.isNull()) { +- qWarning() << "Failed to read proxy message: " << error.errorString(); +- return; +- } +- +- emit clientMessageReceived(json.object()); +-} +- +-void BrowserHost::sendClientMessage(const QJsonObject& json) +-{ +- QString reply(QJsonDocument(json).toJson(QJsonDocument::Compact)); +- for (const auto socket : m_socketList) { +- if (socket && socket->isValid() && socket->state() == QLocalSocket::ConnectedState) { +- QByteArray arr = reply.toUtf8(); +- socket->write(arr.constData(), arr.length()); +- socket->flush(); +- } +- } +-} +- +-void BrowserHost::proxyDisconnected() +-{ +- auto socket = qobject_cast(QObject::sender()); +- m_socketList.removeOne(socket); +-} +diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserHost.h keepassxc-2.6.4-patched/src/browser/BrowserHost.h +--- keepassxc-2.6.4-orig/src/browser/BrowserHost.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/browser/BrowserHost.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,54 +0,0 @@ +-/* +- * Copyright (C) 2020 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 3 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef NATIVEMESSAGINGHOST_H +-#define NATIVEMESSAGINGHOST_H +- +-#include +-#include +-#include +- +-class QLocalServer; +-class QLocalSocket; +- +-class BrowserHost : public QObject +-{ +- Q_OBJECT +- +-public: +- explicit BrowserHost(QObject* parent = nullptr); +- ~BrowserHost() override; +- +- void start(); +- void stop(); +- +- void sendClientMessage(const QJsonObject& json); +- +-signals: +- void clientMessageReceived(const QJsonObject& json); +- +-private slots: +- void proxyConnected(); +- void readProxyMessage(); +- void proxyDisconnected(); +- +-private: +- QPointer m_localServer; +- QList m_socketList; +-}; +- +-#endif // NATIVEMESSAGINGHOST_H +diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserService.cpp keepassxc-2.6.4-patched/src/browser/BrowserService.cpp +--- keepassxc-2.6.4-orig/src/browser/BrowserService.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/browser/BrowserService.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,1340 +0,0 @@ +-/* +- * Copyright (C) 2013 Francois Ferrand +- * Copyright (C) 2017 Sami Vänttinen +- * Copyright (C) 2020 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 3 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-#include "BrowserAccessControlDialog.h" +-#include "BrowserAction.h" +-#include "BrowserEntryConfig.h" +-#include "BrowserEntrySaveDialog.h" +-#include "BrowserHost.h" +-#include "BrowserService.h" +-#include "BrowserSettings.h" +-#include "core/Database.h" +-#include "core/EntrySearcher.h" +-#include "core/Group.h" +-#include "core/Metadata.h" +-#include "core/PasswordGenerator.h" +-#include "core/Tools.h" +-#include "gui/MainWindow.h" +-#include "gui/MessageBox.h" +-#ifdef Q_OS_MACOS +-#include "gui/osutils/macutils/MacUtils.h" +-#endif +- +-const QString BrowserService::KEEPASSXCBROWSER_NAME = QStringLiteral("KeePassXC-Browser Settings"); +-const QString BrowserService::KEEPASSXCBROWSER_OLD_NAME = QStringLiteral("keepassxc-browser Settings"); +-static const QString KEEPASSXCBROWSER_GROUP_NAME = QStringLiteral("KeePassXC-Browser Passwords"); +-static int KEEPASSXCBROWSER_DEFAULT_ICON = 1; +-// These are for the settings and password conversion +-static const QString KEEPASSHTTP_NAME = QStringLiteral("KeePassHttp Settings"); +-static const QString KEEPASSHTTP_GROUP_NAME = QStringLiteral("KeePassHttp Passwords"); +-// Extra entry related options saved in custom data +-const QString BrowserService::OPTION_SKIP_AUTO_SUBMIT = QStringLiteral("BrowserSkipAutoSubmit"); +-const QString BrowserService::OPTION_HIDE_ENTRY = QStringLiteral("BrowserHideEntry"); +-const QString BrowserService::OPTION_ONLY_HTTP_AUTH = QStringLiteral("BrowserOnlyHttpAuth"); +-// Multiple URL's +-const QString BrowserService::ADDITIONAL_URL = QStringLiteral("KP2A_URL"); +- +-Q_GLOBAL_STATIC(BrowserService, s_browserService); +- +-BrowserService::BrowserService() +- : QObject() +- , m_browserHost(new BrowserHost) +- , m_dialogActive(false) +- , m_bringToFrontRequested(false) +- , m_prevWindowState(WindowState::Normal) +- , m_keepassBrowserUUID(Tools::hexToUuid("de887cc3036343b8974b5911b8816224")) +-{ +- connect(m_browserHost, &BrowserHost::clientMessageReceived, this, &BrowserService::processClientMessage); +- setEnabled(browserSettings()->isEnabled()); +-} +- +-BrowserService* BrowserService::instance() +-{ +- return s_browserService; +-} +- +-void BrowserService::setEnabled(bool enabled) +-{ +- if (enabled) { +- // Update KeePassXC/keepassxc-proxy binary paths to Native Messaging scripts +- if (browserSettings()->updateBinaryPath()) { +- browserSettings()->updateBinaryPaths(); +- } +- +- m_browserHost->start(); +- } else { +- m_browserHost->stop(); +- } +-} +- +-bool BrowserService::isDatabaseOpened() const +-{ +- if (m_currentDatabaseWidget) { +- return !m_currentDatabaseWidget->isLocked(); +- } +- return false; +-} +- +-bool BrowserService::openDatabase(bool triggerUnlock) +-{ +- if (!browserSettings()->unlockDatabase()) { +- return false; +- } +- +- if (m_currentDatabaseWidget && !m_currentDatabaseWidget->isLocked()) { +- return true; +- } +- +- if (triggerUnlock) { +- m_bringToFrontRequested = true; +- updateWindowState(); +- emit requestUnlock(); +- } +- +- return false; +-} +- +-void BrowserService::lockDatabase() +-{ +- if (m_currentDatabaseWidget) { +- m_currentDatabaseWidget->lock(); +- } +-} +- +-QString BrowserService::getDatabaseHash(bool legacy) +-{ +- if (legacy) { +- return QCryptographicHash::hash( +- (browserService()->getDatabaseRootUuid() + browserService()->getDatabaseRecycleBinUuid()).toUtf8(), +- QCryptographicHash::Sha256) +- .toHex(); +- } +- return QCryptographicHash::hash(getDatabaseRootUuid().toUtf8(), QCryptographicHash::Sha256).toHex(); +-} +- +-QString BrowserService::getDatabaseRootUuid() +-{ +- auto db = getDatabase(); +- if (!db) { +- return {}; +- } +- +- Group* rootGroup = db->rootGroup(); +- if (!rootGroup) { +- return {}; +- } +- +- return rootGroup->uuidToHex(); +-} +- +-QString BrowserService::getDatabaseRecycleBinUuid() +-{ +- auto db = getDatabase(); +- if (!db) { +- return {}; +- } +- +- Group* recycleBin = db->metadata()->recycleBin(); +- if (!recycleBin) { +- return {}; +- } +- return recycleBin->uuidToHex(); +-} +- +-QJsonArray BrowserService::getChildrenFromGroup(Group* group) +-{ +- QJsonArray groupList; +- +- if (!group) { +- return groupList; +- } +- +- for (const auto& c : group->children()) { +- if (c == group->database()->metadata()->recycleBin()) { +- continue; +- } +- +- QJsonObject jsonGroup; +- jsonGroup["name"] = c->name(); +- jsonGroup["uuid"] = Tools::uuidToHex(c->uuid()); +- jsonGroup["children"] = getChildrenFromGroup(c); +- groupList.push_back(jsonGroup); +- } +- return groupList; +-} +- +-QJsonObject BrowserService::getDatabaseGroups() +-{ +- auto db = getDatabase(); +- if (!db) { +- return {}; +- } +- +- Group* rootGroup = db->rootGroup(); +- if (!rootGroup) { +- return {}; +- } +- +- QJsonObject root; +- root["name"] = rootGroup->name(); +- root["uuid"] = Tools::uuidToHex(rootGroup->uuid()); +- root["children"] = getChildrenFromGroup(rootGroup); +- +- QJsonArray groups; +- groups.push_back(root); +- +- QJsonObject result; +- result["groups"] = groups; +- +- return result; +-} +- +-QJsonObject BrowserService::createNewGroup(const QString& groupName) +-{ +- auto db = getDatabase(); +- if (!db) { +- return {}; +- } +- +- Group* rootGroup = db->rootGroup(); +- if (!rootGroup) { +- return {}; +- } +- +- auto group = rootGroup->findGroupByPath(groupName); +- +- // Group already exists +- if (group) { +- QJsonObject result; +- result["name"] = group->name(); +- result["uuid"] = Tools::uuidToHex(group->uuid()); +- return result; +- } +- +- auto dialogResult = MessageBox::warning(nullptr, +- tr("KeePassXC: Create a new group"), +- tr("A request for creating a new group \"%1\" has been received.\n" +- "Do you want to create this group?\n") +- .arg(groupName), +- MessageBox::Yes | MessageBox::No); +- +- if (dialogResult != MessageBox::Yes) { +- return {}; +- } +- +- QString name, uuid; +- Group* previousGroup = rootGroup; +- auto groups = groupName.split("/"); +- +- // Returns the group name based on depth +- auto getGroupName = [&](int depth) { +- QString gName; +- for (int i = 0; i < depth + 1; ++i) { +- gName.append((i == 0 ? "" : "/") + groups[i]); +- } +- return gName; +- }; +- +- // Create new group(s) always when the path is not found +- for (int i = 0; i < groups.length(); ++i) { +- QString gName = getGroupName(i); +- auto tempGroup = rootGroup->findGroupByPath(gName); +- if (!tempGroup) { +- Group* newGroup = new Group(); +- newGroup->setName(groups[i]); +- newGroup->setUuid(QUuid::createUuid()); +- newGroup->setParent(previousGroup); +- name = newGroup->name(); +- uuid = Tools::uuidToHex(newGroup->uuid()); +- previousGroup = newGroup; +- continue; +- } +- +- previousGroup = tempGroup; +- } +- +- QJsonObject result; +- result["name"] = name; +- result["uuid"] = uuid; +- return result; +-} +- +-QString BrowserService::getCurrentTotp(const QString& uuid) +-{ +- QList> databases; +- if (browserSettings()->searchInAllDatabases()) { +- for (auto dbWidget : getMainWindow()->getOpenDatabases()) { +- auto db = dbWidget->database(); +- if (db) { +- databases << db; +- } +- } +- } else { +- databases << getDatabase(); +- } +- +- auto entryUuid = Tools::hexToUuid(uuid); +- for (const auto& db : databases) { +- auto entry = db->rootGroup()->findEntryByUuid(entryUuid, true); +- if (entry) { +- return entry->totp(); +- } +- } +- +- return {}; +-} +- +-QString BrowserService::storeKey(const QString& key) +-{ +- auto db = getDatabase(); +- if (!db) { +- return {}; +- } +- +- bool contains; +- auto dialogResult = MessageBox::Cancel; +- QString id; +- +- do { +- QInputDialog keyDialog; +- connect(m_currentDatabaseWidget, SIGNAL(databaseLockRequested()), &keyDialog, SLOT(reject())); +- keyDialog.setWindowTitle(tr("KeePassXC: New key association request")); +- keyDialog.setLabelText(tr("You have received an association request for the following database:\n%1\n\n" +- "Give the connection a unique name or ID, for example:\nchrome-laptop.") +- .arg(db->metadata()->name().toHtmlEscaped())); +- keyDialog.setOkButtonText(tr("Save and allow access")); +- keyDialog.setWindowFlags(keyDialog.windowFlags() | Qt::WindowStaysOnTopHint); +- raiseWindow(); +- keyDialog.show(); +- keyDialog.activateWindow(); +- keyDialog.raise(); +- auto ok = keyDialog.exec(); +- +- id = keyDialog.textValue(); +- +- if (ok != QDialog::Accepted || id.isEmpty() || !isDatabaseOpened()) { +- hideWindow(); +- return {}; +- } +- +- contains = db->metadata()->customData()->contains(CustomData::BrowserKeyPrefix + id); +- if (contains) { +- dialogResult = MessageBox::warning(nullptr, +- tr("KeePassXC: Overwrite existing key?"), +- tr("A shared encryption key with the name \"%1\" " +- "already exists.\nDo you want to overwrite it?") +- .arg(id), +- MessageBox::Overwrite | MessageBox::Cancel, +- MessageBox::Cancel); +- } +- } while (contains && dialogResult == MessageBox::Cancel); +- +- hideWindow(); +- db->metadata()->customData()->set(CustomData::BrowserKeyPrefix + id, key); +- db->metadata()->customData()->set(QString("%1_%2").arg(CustomData::Created, id), +- Clock::currentDateTime().toString(Qt::SystemLocaleShortDate)); +- return id; +-} +- +-QString BrowserService::getKey(const QString& id) +-{ +- auto db = getDatabase(); +- if (!db) { +- return {}; +- } +- +- return db->metadata()->customData()->value(CustomData::BrowserKeyPrefix + id); +-} +- +-QJsonArray BrowserService::findMatchingEntries(const QString& dbid, +- const QString& siteUrlStr, +- const QString& formUrlStr, +- const QString& realm, +- const StringPairList& keyList, +- const bool httpAuth) +-{ +- Q_UNUSED(dbid); +- const bool alwaysAllowAccess = browserSettings()->alwaysAllowAccess(); +- const bool ignoreHttpAuth = browserSettings()->httpAuthPermission(); +- const QString siteHost = QUrl(siteUrlStr).host(); +- const QString formHost = QUrl(formUrlStr).host(); +- +- // Check entries for authorization +- QList pwEntriesToConfirm; +- QList pwEntries; +- for (auto* entry : searchEntries(siteUrlStr, formUrlStr, keyList)) { +- if (entry->customData()->contains(BrowserService::OPTION_HIDE_ENTRY) +- && entry->customData()->value(BrowserService::OPTION_HIDE_ENTRY) == TRUE_STR) { +- continue; +- } +- +- if (!httpAuth && entry->customData()->contains(BrowserService::OPTION_ONLY_HTTP_AUTH) +- && entry->customData()->value(BrowserService::OPTION_ONLY_HTTP_AUTH) == TRUE_STR) { +- continue; +- } +- +- // HTTP Basic Auth always needs a confirmation +- if (!ignoreHttpAuth && httpAuth) { +- pwEntriesToConfirm.append(entry); +- continue; +- } +- +- switch (checkAccess(entry, siteHost, formHost, realm)) { +- case Denied: +- continue; +- +- case Unknown: +- if (alwaysAllowAccess) { +- pwEntries.append(entry); +- } else { +- pwEntriesToConfirm.append(entry); +- } +- break; +- +- case Allowed: +- pwEntries.append(entry); +- break; +- } +- } +- +- // Confirm entries +- QList selectedEntriesToConfirm = +- confirmEntries(pwEntriesToConfirm, siteUrlStr, siteHost, formHost, realm, httpAuth); +- if (!selectedEntriesToConfirm.isEmpty()) { +- pwEntries.append(selectedEntriesToConfirm); +- } +- +- if (pwEntries.isEmpty()) { +- return {}; +- } +- +- // Ensure that database is not locked when the popup was visible +- if (!isDatabaseOpened()) { +- return {}; +- } +- +- // Sort results +- pwEntries = sortEntries(pwEntries, siteUrlStr, formUrlStr); +- +- // Fill the list +- QJsonArray result; +- for (auto* entry : pwEntries) { +- result.append(prepareEntry(entry)); +- } +- +- return result; +-} +- +-void BrowserService::addEntry(const QString& dbid, +- const QString& login, +- const QString& password, +- const QString& siteUrlStr, +- const QString& formUrlStr, +- const QString& realm, +- const QString& group, +- const QString& groupUuid, +- const QSharedPointer& selectedDb) +-{ +- // TODO: select database based on this key id +- Q_UNUSED(dbid); +- auto db = selectedDb ? selectedDb : selectedDatabase(); +- if (!db) { +- return; +- } +- +- auto* entry = new Entry(); +- entry->setUuid(QUuid::createUuid()); +- entry->setTitle(QUrl(siteUrlStr).host()); +- entry->setUrl(siteUrlStr); +- entry->setIcon(KEEPASSXCBROWSER_DEFAULT_ICON); +- entry->setUsername(login); +- entry->setPassword(password); +- +- // Select a group for the entry +- if (!group.isEmpty()) { +- if (db->rootGroup()) { +- auto selectedGroup = db->rootGroup()->findGroupByUuid(Tools::hexToUuid(groupUuid)); +- if (selectedGroup) { +- entry->setGroup(selectedGroup); +- } else { +- entry->setGroup(getDefaultEntryGroup(db)); +- } +- } +- } else { +- entry->setGroup(getDefaultEntryGroup(db)); +- } +- +- const QString host = QUrl(siteUrlStr).host(); +- const QString submitHost = QUrl(formUrlStr).host(); +- BrowserEntryConfig config; +- config.allow(host); +- +- if (!submitHost.isEmpty()) { +- config.allow(submitHost); +- } +- if (!realm.isEmpty()) { +- config.setRealm(realm); +- } +- config.save(entry); +-} +- +-bool BrowserService::updateEntry(const QString& dbid, +- const QString& uuid, +- const QString& login, +- const QString& password, +- const QString& siteUrlStr, +- const QString& formUrlStr) +-{ +- // TODO: select database based on this key id +- Q_UNUSED(dbid); +- auto db = selectedDatabase(); +- if (!db) { +- return false; +- } +- +- Entry* entry = db->rootGroup()->findEntryByUuid(Tools::hexToUuid(uuid)); +- if (!entry) { +- // If entry is not found for update, add a new one to the selected database +- addEntry(dbid, login, password, siteUrlStr, formUrlStr, "", "", "", db); +- return true; +- } +- +- // Check if the entry password is a reference. If so, update the original entry instead +- while (entry->attributes()->isReference(EntryAttributes::PasswordKey)) { +- const QUuid referenceUuid = entry->attributes()->referenceUuid(EntryAttributes::PasswordKey); +- if (!referenceUuid.isNull()) { +- entry = db->rootGroup()->findEntryByUuid(referenceUuid); +- if (!entry) { +- return false; +- } +- } +- } +- +- QString username = entry->username(); +- if (username.isEmpty()) { +- return false; +- } +- +- bool result = false; +- if (username.compare(login, Qt::CaseSensitive) != 0 +- || entry->password().compare(password, Qt::CaseSensitive) != 0) { +- MessageBox::Button dialogResult = MessageBox::No; +- if (!browserSettings()->alwaysAllowUpdate()) { +- raiseWindow(); +- dialogResult = MessageBox::question( +- nullptr, +- tr("KeePassXC: Update Entry"), +- tr("Do you want to update the information in %1 - %2?").arg(QUrl(siteUrlStr).host(), username), +- MessageBox::Save | MessageBox::Cancel, +- MessageBox::Cancel, +- MessageBox::Raise); +- } +- +- if (browserSettings()->alwaysAllowUpdate() || dialogResult == MessageBox::Save) { +- entry->beginUpdate(); +- if (!entry->attributes()->isReference(EntryAttributes::UserNameKey)) { +- entry->setUsername(login); +- } +- entry->setPassword(password); +- entry->endUpdate(); +- result = true; +- } +- +- hideWindow(); +- } +- +- return result; +-} +- +-QList +-BrowserService::searchEntries(const QSharedPointer& db, const QString& siteUrlStr, const QString& formUrlStr) +-{ +- QList entries; +- auto* rootGroup = db->rootGroup(); +- if (!rootGroup) { +- return entries; +- } +- +- for (const auto& group : rootGroup->groupsRecursive(true)) { +- if (group->isRecycled() || !group->resolveSearchingEnabled()) { +- continue; +- } +- +- for (auto* entry : group->entries()) { +- if (entry->isRecycled()) { +- continue; +- } +- +- // Search for additional URL's starting with KP2A_URL +- for (const auto& key : entry->attributes()->keys()) { +- if (key.startsWith(ADDITIONAL_URL) && handleURL(entry->attributes()->value(key), siteUrlStr, formUrlStr) +- && !entries.contains(entry)) { +- entries.append(entry); +- continue; +- } +- } +- +- if (!handleURL(entry->url(), siteUrlStr, formUrlStr)) { +- continue; +- } +- +- // Additional URL check may have already inserted the entry to the list +- if (!entries.contains(entry)) { +- entries.append(entry); +- } +- } +- } +- +- return entries; +-} +- +-QList +-BrowserService::searchEntries(const QString& siteUrlStr, const QString& formUrlStr, const StringPairList& keyList) +-{ +- // Check if database is connected with KeePassXC-Browser +- auto databaseConnected = [&](const QSharedPointer& db) { +- for (const StringPair& keyPair : keyList) { +- QString key = db->metadata()->customData()->value(CustomData::BrowserKeyPrefix + keyPair.first); +- if (!key.isEmpty() && keyPair.second == key) { +- return true; +- } +- } +- return false; +- }; +- +- // Get the list of databases to search +- QList> databases; +- if (browserSettings()->searchInAllDatabases()) { +- for (auto dbWidget : getMainWindow()->getOpenDatabases()) { +- auto db = dbWidget->database(); +- if (db && databaseConnected(dbWidget->database())) { +- databases << db; +- } +- } +- } else { +- const auto& db = getDatabase(); +- if (databaseConnected(db)) { +- databases << db; +- } +- } +- +- // Search entries matching the hostname +- QString hostname = QUrl(siteUrlStr).host(); +- QList entries; +- do { +- for (const auto& db : databases) { +- entries << searchEntries(db, siteUrlStr, formUrlStr); +- } +- } while (entries.isEmpty() && removeFirstDomain(hostname)); +- +- return entries; +-} +- +-void BrowserService::convertAttributesToCustomData(QSharedPointer db) +-{ +- if (!db) { +- return; +- } +- +- QList entries = db->rootGroup()->entriesRecursive(); +- QProgressDialog progress(tr("Converting attributes to custom data…"), tr("Abort"), 0, entries.count()); +- progress.setWindowModality(Qt::WindowModal); +- +- int counter = 0; +- int keyCounter = 0; +- for (auto* entry : entries) { +- if (progress.wasCanceled()) { +- return; +- } +- +- if (moveSettingsToCustomData(entry, KEEPASSHTTP_NAME)) { +- ++counter; +- } +- +- if (moveSettingsToCustomData(entry, KEEPASSXCBROWSER_OLD_NAME)) { +- ++counter; +- } +- +- if (moveSettingsToCustomData(entry, KEEPASSXCBROWSER_NAME)) { +- ++counter; +- } +- +- if (entry->title() == KEEPASSHTTP_NAME || entry->title().contains(KEEPASSXCBROWSER_NAME, Qt::CaseInsensitive)) { +- keyCounter += moveKeysToCustomData(entry, db); +- db->recycleEntry(entry); +- } +- +- progress.setValue(progress.value() + 1); +- } +- progress.reset(); +- +- if (counter > 0) { +- MessageBox::information(nullptr, +- tr("KeePassXC: Converted KeePassHTTP attributes"), +- tr("Successfully converted attributes from %1 entry(s).\n" +- "Moved %2 keys to custom data.", +- "") +- .arg(counter) +- .arg(keyCounter), +- MessageBox::Ok); +- } else if (counter == 0 && keyCounter > 0) { +- MessageBox::information(nullptr, +- tr("KeePassXC: Converted KeePassHTTP attributes"), +- tr("Successfully moved %n keys to custom data.", "", keyCounter), +- MessageBox::Ok); +- } else { +- MessageBox::information(nullptr, +- tr("KeePassXC: No entry with KeePassHTTP attributes found!"), +- tr("The active database does not contain an entry with KeePassHTTP attributes."), +- MessageBox::Ok); +- } +- +- // Rename password groupName +- Group* rootGroup = db->rootGroup(); +- if (!rootGroup) { +- return; +- } +- +- for (auto* g : rootGroup->groupsRecursive(true)) { +- if (g->name() == KEEPASSHTTP_GROUP_NAME) { +- g->setName(KEEPASSXCBROWSER_GROUP_NAME); +- break; +- } +- } +-} +- +-QList +-BrowserService::sortEntries(QList& pwEntries, const QString& siteUrlStr, const QString& formUrlStr) +-{ +- // Build map of prioritized entries +- QMultiMap priorities; +- for (auto* entry : pwEntries) { +- priorities.insert(sortPriority(getEntryURLs(entry), siteUrlStr, formUrlStr), entry); +- } +- +- auto keys = priorities.uniqueKeys(); +- std::sort(keys.begin(), keys.end(), [](int l, int r) { return l > r; }); +- +- QList results; +- auto sortField = browserSettings()->sortByTitle() ? EntryAttributes::TitleKey : EntryAttributes::UserNameKey; +- for (auto key : keys) { +- // Sort same priority entries by Title or UserName +- auto entries = priorities.values(key); +- std::sort(entries.begin(), entries.end(), [&sortField](Entry* left, Entry* right) { +- return QString::localeAwareCompare(left->attribute(sortField), right->attribute(sortField)) < 0; +- }); +- results << entries; +- if (browserSettings()->bestMatchOnly() && !results.isEmpty()) { +- // Early out once we find the highest batch of matches +- break; +- } +- } +- +- return results; +-} +- +-QList BrowserService::confirmEntries(QList& pwEntriesToConfirm, +- const QString& siteUrlStr, +- const QString& siteHost, +- const QString& formUrlStr, +- const QString& realm, +- const bool httpAuth) +-{ +- if (pwEntriesToConfirm.isEmpty() || m_dialogActive) { +- return {}; +- } +- +- m_dialogActive = true; +- updateWindowState(); +- BrowserAccessControlDialog accessControlDialog; +- +- connect(m_currentDatabaseWidget, SIGNAL(databaseLockRequested()), &accessControlDialog, SLOT(reject())); +- +- connect(&accessControlDialog, &BrowserAccessControlDialog::disableAccess, [&](QTableWidgetItem* item) { +- auto entry = pwEntriesToConfirm[item->row()]; +- BrowserEntryConfig config; +- config.load(entry); +- config.deny(siteHost); +- if (!formUrlStr.isEmpty() && siteHost != formUrlStr) { +- config.deny(formUrlStr); +- } +- if (!realm.isEmpty()) { +- config.setRealm(realm); +- } +- config.save(entry); +- }); +- +- accessControlDialog.setItems(pwEntriesToConfirm, siteUrlStr, httpAuth); +- +- QList allowedEntries; +- if (accessControlDialog.exec() == QDialog::Accepted) { +- const auto selectedEntries = accessControlDialog.getSelectedEntries(); +- for (auto item : accessControlDialog.getSelectedEntries()) { +- auto entry = pwEntriesToConfirm[item->row()]; +- if (accessControlDialog.remember()) { +- BrowserEntryConfig config; +- config.load(entry); +- config.allow(siteHost); +- if (!formUrlStr.isEmpty() && siteHost != formUrlStr) { +- config.allow(formUrlStr); +- } +- if (!realm.isEmpty()) { +- config.setRealm(realm); +- } +- config.save(entry); +- } +- allowedEntries.append(entry); +- } +- } +- +-#ifdef Q_OS_MAC +- // Re-hide the application if it wasn't visible before +- // only affects macOS because dialogs force the main window to show +- hideWindow(); +-#endif +- +- m_dialogActive = false; +- +- return allowedEntries; +-} +- +-QJsonObject BrowserService::prepareEntry(const Entry* entry) +-{ +- QJsonObject res; +- res["login"] = entry->resolveMultiplePlaceholders(entry->username()); +- res["password"] = entry->resolveMultiplePlaceholders(entry->password()); +- res["name"] = entry->resolveMultiplePlaceholders(entry->title()); +- res["uuid"] = entry->resolveMultiplePlaceholders(entry->uuidToHex()); +- res["group"] = entry->resolveMultiplePlaceholders(entry->group()->name()); +- +- if (entry->hasTotp()) { +- res["totp"] = entry->totp(); +- } +- +- if (entry->isExpired()) { +- res["expired"] = TRUE_STR; +- } +- +- if (entry->customData()->contains(BrowserService::OPTION_SKIP_AUTO_SUBMIT)) { +- res["skipAutoSubmit"] = entry->customData()->value(BrowserService::OPTION_SKIP_AUTO_SUBMIT); +- } +- +- if (browserSettings()->supportKphFields()) { +- const EntryAttributes* attr = entry->attributes(); +- QJsonArray stringFields; +- for (const auto& key : attr->keys()) { +- if (key.startsWith("KPH: ")) { +- QJsonObject sField; +- sField[key] = entry->resolveMultiplePlaceholders(attr->value(key)); +- stringFields.append(sField); +- } +- } +- res["stringFields"] = stringFields; +- } +- return res; +-} +- +-BrowserService::Access +-BrowserService::checkAccess(const Entry* entry, const QString& siteHost, const QString& formHost, const QString& realm) +-{ +- if (entry->isExpired()) { +- return browserSettings()->allowExpiredCredentials() ? Allowed : Denied; +- } +- +- BrowserEntryConfig config; +- if (!config.load(entry)) { +- return Unknown; +- } +- if ((config.isAllowed(siteHost)) && (formHost.isEmpty() || config.isAllowed(formHost))) { +- return Allowed; +- } +- if ((config.isDenied(siteHost)) || (!formHost.isEmpty() && config.isDenied(formHost))) { +- return Denied; +- } +- if (!realm.isEmpty() && config.realm() != realm) { +- return Denied; +- } +- return Unknown; +-} +- +-Group* BrowserService::getDefaultEntryGroup(const QSharedPointer& selectedDb) +-{ +- auto db = selectedDb ? selectedDb : getDatabase(); +- if (!db) { +- return nullptr; +- } +- +- auto* rootGroup = db->rootGroup(); +- if (!rootGroup) { +- return nullptr; +- } +- +- for (auto* g : rootGroup->groupsRecursive(true)) { +- if (g->name() == KEEPASSXCBROWSER_GROUP_NAME && !g->isRecycled()) { +- return db->rootGroup()->findGroupByUuid(g->uuid()); +- } +- } +- +- auto* group = new Group(); +- group->setUuid(QUuid::createUuid()); +- group->setName(KEEPASSXCBROWSER_GROUP_NAME); +- group->setIcon(KEEPASSXCBROWSER_DEFAULT_ICON); +- group->setParent(rootGroup); +- return group; +-} +- +-// Returns the maximum sort priority given a set of match urls and the +-// extension provided site and form url. +-int BrowserService::sortPriority(const QStringList& urls, const QString& siteUrlStr, const QString& formUrlStr) +-{ +- QList priorityList; +- // NOTE: QUrl::matches is utterly broken in Qt < 5.11, so we work around that +- // by removing parts of the url that we don't match and direct matching others +- const auto stdOpts = QUrl::RemoveFragment | QUrl::RemoveUserInfo; +- const auto siteUrl = QUrl(siteUrlStr).adjusted(stdOpts); +- const auto formUrl = QUrl(formUrlStr).adjusted(stdOpts); +- +- auto getPriority = [&](const QString& givenUrl) { +- auto url = QUrl::fromUserInput(givenUrl).adjusted(stdOpts); +- +- // Default to https scheme if undefined +- if (url.scheme().isEmpty() || !givenUrl.contains("://")) { +- url.setScheme("https"); +- } +- +- // Add the empty path to the URL if it's missing. +- // URL's from the extension always have a path set, entry URL's can be without. +- if (url.path().isEmpty() && !url.hasFragment() && !url.hasQuery()) { +- url.setPath("/"); +- } +- +- // Reject invalid urls and hosts, except 'localhost', and scheme mismatch +- if (!url.isValid() || (!url.host().contains(".") && url.host() != "localhost") +- || url.scheme() != siteUrl.scheme()) { +- return 0; +- } +- +- // Exact match with site url or form url +- if (url.matches(siteUrl, QUrl::None) || url.matches(formUrl, QUrl::None)) { +- return 100; +- } +- +- // Exact match without the query string +- if (url.matches(siteUrl, QUrl::RemoveQuery) || url.matches(formUrl, QUrl::RemoveQuery)) { +- return 90; +- } +- +- // Match without path (ie, FQDN match), form url prioritizes lower than site url +- if (url.host() == siteUrl.host()) { +- return 80; +- } +- if (url.host() == formUrl.host()) { +- return 70; +- } +- +- // Site/form url ends with given url (subdomain mismatch) +- if (siteUrl.host().endsWith(url.host())) { +- return 60; +- } +- if (formUrl.host().endsWith(url.host())) { +- return 50; +- } +- +- // No valid match found +- return 0; +- }; +- +- for (const auto& entryUrl : urls) { +- priorityList << getPriority(entryUrl); +- } +- +- return *std::max_element(priorityList.begin(), priorityList.end()); +-} +- +-bool BrowserService::schemeFound(const QString& url) +-{ +- QUrl address(url); +- return !address.scheme().isEmpty(); +-} +- +-bool BrowserService::removeFirstDomain(QString& hostname) +-{ +- int pos = hostname.indexOf("."); +- if (pos < 0) { +- return false; +- } +- +- // Don't remove the second-level domain if it's the only one +- if (hostname.count(".") > 1) { +- hostname = hostname.mid(pos + 1); +- return !hostname.isEmpty(); +- } +- +- // Nothing removed +- return false; +-} +- +-bool BrowserService::handleURL(const QString& entryUrl, const QString& siteUrlStr, const QString& formUrlStr) +-{ +- if (entryUrl.isEmpty()) { +- return false; +- } +- +- QUrl entryQUrl; +- if (entryUrl.contains("://")) { +- entryQUrl = entryUrl; +- } else { +- entryQUrl = QUrl::fromUserInput(entryUrl); +- +- if (browserSettings()->matchUrlScheme()) { +- entryQUrl.setScheme("https"); +- } +- } +- +- // Make a direct compare if a local file is used +- if (siteUrlStr.contains("file://")) { +- return entryUrl == formUrlStr; +- } +- +- // URL host validation fails +- if (entryQUrl.host().isEmpty()) { +- return false; +- } +- +- // Match port, if used +- QUrl siteQUrl(siteUrlStr); +- if (entryQUrl.port() > 0 && entryQUrl.port() != siteQUrl.port()) { +- return false; +- } +- +- // Match scheme +- if (browserSettings()->matchUrlScheme() && !entryQUrl.scheme().isEmpty() +- && entryQUrl.scheme().compare(siteQUrl.scheme()) != 0) { +- return false; +- } +- +- // Check for illegal characters +- QRegularExpression re("[<>\\^`{|}]"); +- if (re.match(entryUrl).hasMatch()) { +- return false; +- } +- +- // Match the base domain +- if (baseDomain(siteQUrl.host()) != baseDomain(entryQUrl.host())) { +- return false; +- } +- +- // Match the subdomains with the limited wildcard +- if (siteQUrl.host().endsWith(entryQUrl.host())) { +- return true; +- } +- +- return false; +-}; +- +-/** +- * Gets the base domain of URL. +- * +- * Returns the base domain, e.g. https://another.example.co.uk -> example.co.uk +- */ +-QString BrowserService::baseDomain(const QString& hostname) const +-{ +- QUrl qurl = QUrl::fromUserInput(hostname); +- QString host = qurl.host(); +- +- // If the hostname is an IP address, return it directly +- QHostAddress hostAddress(hostname); +- if (!hostAddress.isNull()) { +- return hostname; +- } +- +- if (host.isEmpty() || !host.contains(qurl.topLevelDomain())) { +- return {}; +- } +- +- // Remove the top level domain part from the hostname, e.g. https://another.example.co.uk -> https://another.example +- host.chop(qurl.topLevelDomain().length()); +- // Split the URL and select the last part, e.g. https://another.example -> example +- QString baseDomain = host.split('.').last(); +- // Append the top level domain back to the URL, e.g. example -> example.co.uk +- baseDomain.append(qurl.topLevelDomain()); +- return baseDomain; +-} +- +-QSharedPointer BrowserService::getDatabase() +-{ +- if (m_currentDatabaseWidget) { +- return m_currentDatabaseWidget->database(); +- } +- return {}; +-} +- +-QSharedPointer BrowserService::selectedDatabase() +-{ +- QList databaseWidgets; +- for (auto dbWidget : getMainWindow()->getOpenDatabases()) { +- // Add only open databases +- if (!dbWidget->isLocked()) { +- databaseWidgets << dbWidget; +- } +- } +- +- BrowserEntrySaveDialog browserEntrySaveDialog; +- int openDatabaseCount = browserEntrySaveDialog.setItems(databaseWidgets, m_currentDatabaseWidget); +- if (openDatabaseCount > 1) { +- int res = browserEntrySaveDialog.exec(); +- if (res == QDialog::Accepted) { +- const auto selectedDatabase = browserEntrySaveDialog.getSelected(); +- if (selectedDatabase.length() > 0) { +- int index = selectedDatabase[0]->data(Qt::UserRole).toInt(); +- return databaseWidgets[index]->database(); +- } +- } else { +- return {}; +- } +- } +- +- // Return current database +- return getDatabase(); +-} +- +-bool BrowserService::moveSettingsToCustomData(Entry* entry, const QString& name) +-{ +- if (entry->attributes()->contains(name)) { +- QString attr = entry->attributes()->value(name); +- entry->beginUpdate(); +- if (!attr.isEmpty()) { +- entry->customData()->set(KEEPASSXCBROWSER_NAME, attr); +- } +- entry->attributes()->remove(name); +- entry->endUpdate(); +- return true; +- } +- return false; +-} +- +-int BrowserService::moveKeysToCustomData(Entry* entry, QSharedPointer db) +-{ +- int keyCounter = 0; +- for (const auto& key : entry->attributes()->keys()) { +- if (key.contains(CustomData::BrowserLegacyKeyPrefix)) { +- QString publicKey = key; +- publicKey.remove(CustomData::BrowserLegacyKeyPrefix); +- +- // Add key to database custom data +- if (db && !db->metadata()->customData()->contains(CustomData::BrowserKeyPrefix + publicKey)) { +- db->metadata()->customData()->set(CustomData::BrowserKeyPrefix + publicKey, +- entry->attributes()->value(key)); +- ++keyCounter; +- } +- } +- } +- +- return keyCounter; +-} +- +-bool BrowserService::checkLegacySettings(QSharedPointer db) +-{ +- if (!db || !browserSettings()->isEnabled() || browserSettings()->noMigrationPrompt()) { +- return false; +- } +- +- bool legacySettingsFound = false; +- QList entries = db->rootGroup()->entriesRecursive(); +- for (const auto& e : entries) { +- if (e->isRecycled()) { +- continue; +- } +- +- if ((e->attributes()->contains(KEEPASSHTTP_NAME) || e->attributes()->contains(KEEPASSXCBROWSER_NAME)) +- || (e->title() == KEEPASSHTTP_NAME || e->title().contains(KEEPASSXCBROWSER_NAME, Qt::CaseInsensitive))) { +- legacySettingsFound = true; +- break; +- } +- } +- +- if (!legacySettingsFound) { +- return false; +- } +- +- auto* checkbox = new QCheckBox(tr("Don't show this warning again")); +- QObject::connect(checkbox, &QCheckBox::stateChanged, [&](int state) { +- browserSettings()->setNoMigrationPrompt(static_cast(state) == Qt::CheckState::Checked); +- }); +- +- auto dialogResult = +- MessageBox::warning(nullptr, +- tr("KeePassXC: Legacy browser integration settings detected"), +- tr("Your KeePassXC-Browser settings need to be moved into the database settings.\n" +- "This is necessary to maintain your current browser connections.\n" +- "Would you like to migrate your existing settings now?"), +- MessageBox::Yes | MessageBox::No, +- MessageBox::NoButton, +- MessageBox::Raise, +- checkbox); +- +- return dialogResult == MessageBox::Yes; +-} +- +-QStringList BrowserService::getEntryURLs(const Entry* entry) +-{ +- QStringList urlList; +- urlList << entry->url(); +- +- // Handle additional URL's +- for (const auto& key : entry->attributes()->keys()) { +- if (key.startsWith(ADDITIONAL_URL)) { +- urlList << entry->attributes()->value(key); +- } +- } +- +- return urlList; +-} +- +-void BrowserService::hideWindow() const +-{ +- if (m_prevWindowState == WindowState::Minimized) { +- getMainWindow()->showMinimized(); +- } else { +-#ifdef Q_OS_MACOS +- if (m_prevWindowState == WindowState::Hidden) { +- macUtils()->hideOwnWindow(); +- } else { +- macUtils()->raiseLastActiveWindow(); +- } +-#else +- if (m_prevWindowState == WindowState::Hidden) { +- getMainWindow()->hideWindow(); +- } else { +- getMainWindow()->lower(); +- } +-#endif +- } +-} +- +-void BrowserService::raiseWindow(const bool force) +-{ +- m_prevWindowState = WindowState::Normal; +- if (getMainWindow()->isMinimized()) { +- m_prevWindowState = WindowState::Minimized; +- } +-#ifdef Q_OS_MACOS +- Q_UNUSED(force) +- +- if (macUtils()->isHidden()) { +- m_prevWindowState = WindowState::Hidden; +- } +- macUtils()->raiseOwnWindow(); +- Tools::wait(500); +-#else +- if (getMainWindow()->isHidden()) { +- m_prevWindowState = WindowState::Hidden; +- } +- +- if (force) { +- getMainWindow()->bringToFront(); +- } +-#endif +-} +- +-void BrowserService::updateWindowState() +-{ +- m_prevWindowState = WindowState::Normal; +- if (getMainWindow()->isMinimized()) { +- m_prevWindowState = WindowState::Minimized; +- } +-#ifdef Q_OS_MACOS +- if (macUtils()->isHidden()) { +- m_prevWindowState = WindowState::Hidden; +- } +-#else +- if (getMainWindow()->isHidden()) { +- m_prevWindowState = WindowState::Hidden; +- } +-#endif +-} +- +-void BrowserService::databaseLocked(DatabaseWidget* dbWidget) +-{ +- if (dbWidget) { +- QJsonObject msg; +- msg["action"] = QString("database-locked"); +- m_browserHost->sendClientMessage(msg); +- } +-} +- +-void BrowserService::databaseUnlocked(DatabaseWidget* dbWidget) +-{ +- if (dbWidget) { +-#ifdef Q_OS_MAC +- if (m_bringToFrontRequested) { +- m_bringToFrontRequested = false; +- hideWindow(); +- } +-#endif +- +- QJsonObject msg; +- msg["action"] = QString("database-unlocked"); +- m_browserHost->sendClientMessage(msg); +- +- auto db = dbWidget->database(); +- if (checkLegacySettings(db)) { +- convertAttributesToCustomData(db); +- } +- } +-} +- +-void BrowserService::activeDatabaseChanged(DatabaseWidget* dbWidget) +-{ +- // Only emit these signals when we are not searching in all databases +- if (dbWidget && !browserSettings()->searchInAllDatabases()) { +- if (dbWidget->isLocked()) { +- databaseLocked(dbWidget); +- } else { +- databaseUnlocked(dbWidget); +- } +- } +- +- m_currentDatabaseWidget = dbWidget; +-} +- +-void BrowserService::processClientMessage(const QJsonObject& message) +-{ +- auto clientID = message["clientID"].toString(); +- if (clientID.isEmpty()) { +- return; +- } +- +- // Create a new client action if we haven't seen this id yet +- if (!m_browserClients.contains(clientID)) { +- m_browserClients.insert(clientID, QSharedPointer::create()); +- } +- +- auto& action = m_browserClients.value(clientID); +- auto response = action->processClientMessage(message); +- m_browserHost->sendClientMessage(response); +-} +diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserService.h keepassxc-2.6.4-patched/src/browser/BrowserService.h +--- keepassxc-2.6.4-orig/src/browser/BrowserService.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/browser/BrowserService.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,174 +0,0 @@ +-/* +- * Copyright (C) 2013 Francois Ferrand +- * Copyright (C) 2017 Sami Vänttinen +- * Copyright (C) 2020 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef BROWSERSERVICE_H +-#define BROWSERSERVICE_H +- +-#include "core/Entry.h" +-#include +-#include +-#include +-#include +- +-typedef QPair StringPair; +-typedef QList StringPairList; +- +-enum +-{ +- max_length = 16 * 1024 +-}; +- +-class DatabaseWidget; +-class BrowserHost; +-class BrowserAction; +- +-class BrowserService : public QObject +-{ +- Q_OBJECT +- +-public: +- explicit BrowserService(); +- static BrowserService* instance(); +- +- void setEnabled(bool enabled); +- +- QString getKey(const QString& id); +- QString storeKey(const QString& key); +- QString getDatabaseHash(bool legacy = false); +- +- bool isDatabaseOpened() const; +- bool openDatabase(bool triggerUnlock); +- void lockDatabase(); +- +- QJsonObject getDatabaseGroups(); +- QJsonObject createNewGroup(const QString& groupName); +- QString getCurrentTotp(const QString& uuid); +- +- void addEntry(const QString& dbid, +- const QString& login, +- const QString& password, +- const QString& siteUrlStr, +- const QString& formUrlStr, +- const QString& realm, +- const QString& group, +- const QString& groupUuid, +- const QSharedPointer& selectedDb = {}); +- bool updateEntry(const QString& dbid, +- const QString& uuid, +- const QString& login, +- const QString& password, +- const QString& siteUrlStr, +- const QString& formUrlStr); +- +- QJsonArray findMatchingEntries(const QString& dbid, +- const QString& siteUrlStr, +- const QString& formUrlStr, +- const QString& realm, +- const StringPairList& keyList, +- const bool httpAuth = false); +- +- static void convertAttributesToCustomData(QSharedPointer db); +- +- static const QString KEEPASSXCBROWSER_NAME; +- static const QString KEEPASSXCBROWSER_OLD_NAME; +- static const QString OPTION_SKIP_AUTO_SUBMIT; +- static const QString OPTION_HIDE_ENTRY; +- static const QString OPTION_ONLY_HTTP_AUTH; +- static const QString ADDITIONAL_URL; +- +-signals: +- void requestUnlock(); +- +-public slots: +- void databaseLocked(DatabaseWidget* dbWidget); +- void databaseUnlocked(DatabaseWidget* dbWidget); +- void activeDatabaseChanged(DatabaseWidget* dbWidget); +- +-private slots: +- void processClientMessage(const QJsonObject& message); +- +-private: +- enum Access +- { +- Denied, +- Unknown, +- Allowed +- }; +- +- enum WindowState +- { +- Normal, +- Minimized, +- Hidden +- }; +- +- QList +- searchEntries(const QSharedPointer& db, const QString& siteUrlStr, const QString& formUrlStr); +- QList searchEntries(const QString& siteUrlStr, const QString& formUrlStr, const StringPairList& keyList); +- QList sortEntries(QList& pwEntries, const QString& siteUrlStr, const QString& formUrlStr); +- QList confirmEntries(QList& pwEntriesToConfirm, +- const QString& siteUrlStr, +- const QString& siteHost, +- const QString& formUrlStr, +- const QString& realm, +- const bool httpAuth); +- QJsonObject prepareEntry(const Entry* entry); +- QJsonArray getChildrenFromGroup(Group* group); +- Access checkAccess(const Entry* entry, const QString& siteHost, const QString& formHost, const QString& realm); +- Group* getDefaultEntryGroup(const QSharedPointer& selectedDb = {}); +- int sortPriority(const QStringList& urls, const QString& siteUrlStr, const QString& formUrlStr); +- bool schemeFound(const QString& url); +- bool removeFirstDomain(QString& hostname); +- bool handleURL(const QString& entryUrl, const QString& siteUrlStr, const QString& formUrlStr); +- QString baseDomain(const QString& hostname) const; +- QSharedPointer getDatabase(); +- QSharedPointer selectedDatabase(); +- QString getDatabaseRootUuid(); +- QString getDatabaseRecycleBinUuid(); +- bool checkLegacySettings(QSharedPointer db); +- QStringList getEntryURLs(const Entry* entry); +- +- void hideWindow() const; +- void raiseWindow(const bool force = false); +- void updateWindowState(); +- +- static bool moveSettingsToCustomData(Entry* entry, const QString& name); +- static int moveKeysToCustomData(Entry* entry, QSharedPointer db); +- +- QPointer m_browserHost; +- QHash> m_browserClients; +- +- bool m_dialogActive; +- bool m_bringToFrontRequested; +- WindowState m_prevWindowState; +- QUuid m_keepassBrowserUUID; +- +- QPointer m_currentDatabaseWidget; +- +- Q_DISABLE_COPY(BrowserService); +- +- friend class TestBrowser; +-}; +- +-static inline BrowserService* browserService() +-{ +- return BrowserService::instance(); +-} +- +-#endif // BROWSERSERVICE_H +diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserSettings.cpp keepassxc-2.6.4-patched/src/browser/BrowserSettings.cpp +--- keepassxc-2.6.4-orig/src/browser/BrowserSettings.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/browser/BrowserSettings.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,536 +0,0 @@ +-/* +- * Copyright (C) 2013 Francois Ferrand +- * Copyright (C) 2017 Sami Vänttinen +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 3 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "BrowserSettings.h" +-#include "core/Config.h" +-#include "core/PasswordHealth.h" +- +-BrowserSettings* BrowserSettings::m_instance(nullptr); +- +-BrowserSettings* BrowserSettings::instance() +-{ +- if (!m_instance) { +- m_instance = new BrowserSettings(); +- } +- +- return m_instance; +-} +- +-bool BrowserSettings::isEnabled() +-{ +- return config()->get(Config::Browser_Enabled).toBool(); +-} +- +-void BrowserSettings::setEnabled(bool enabled) +-{ +- config()->set(Config::Browser_Enabled, enabled); +-} +- +-bool BrowserSettings::showNotification() +-{ +- return config()->get(Config::Browser_ShowNotification).toBool(); +-} +- +-void BrowserSettings::setShowNotification(bool showNotification) +-{ +- config()->set(Config::Browser_ShowNotification, showNotification); +-} +- +-bool BrowserSettings::bestMatchOnly() +-{ +- return config()->get(Config::Browser_BestMatchOnly).toBool(); +-} +- +-void BrowserSettings::setBestMatchOnly(bool bestMatchOnly) +-{ +- config()->set(Config::Browser_BestMatchOnly, bestMatchOnly); +-} +- +-bool BrowserSettings::unlockDatabase() +-{ +- return config()->get(Config::Browser_UnlockDatabase).toBool(); +-} +- +-void BrowserSettings::setUnlockDatabase(bool unlockDatabase) +-{ +- config()->set(Config::Browser_UnlockDatabase, unlockDatabase); +-} +- +-bool BrowserSettings::matchUrlScheme() +-{ +- return config()->get(Config::Browser_MatchUrlScheme).toBool(); +-} +- +-void BrowserSettings::setMatchUrlScheme(bool matchUrlScheme) +-{ +- config()->set(Config::Browser_MatchUrlScheme, matchUrlScheme); +-} +- +-bool BrowserSettings::sortByUsername() +-{ +- return config()->get(Config::Browser_SortByUsername).toBool(); +-} +- +-void BrowserSettings::setSortByUsername(bool sortByUsername) +-{ +- config()->set(Config::Browser_SortByUsername, sortByUsername); +-} +- +-bool BrowserSettings::sortByTitle() +-{ +- return !sortByUsername(); +-} +- +-void BrowserSettings::setSortByTitle(bool sortByUsertitle) +-{ +- setSortByUsername(!sortByUsertitle); +-} +- +-bool BrowserSettings::alwaysAllowAccess() +-{ +- return config()->get(Config::Browser_AlwaysAllowAccess).toBool(); +-} +- +-void BrowserSettings::setAlwaysAllowAccess(bool alwaysAllowAccess) +-{ +- config()->set(Config::Browser_AlwaysAllowAccess, alwaysAllowAccess); +-} +- +-bool BrowserSettings::alwaysAllowUpdate() +-{ +- return config()->get(Config::Browser_AlwaysAllowUpdate).toBool(); +-} +- +-void BrowserSettings::setAlwaysAllowUpdate(bool alwaysAllowUpdate) +-{ +- config()->set(Config::Browser_AlwaysAllowUpdate, alwaysAllowUpdate); +-} +- +-bool BrowserSettings::httpAuthPermission() +-{ +- return config()->get(Config::Browser_HttpAuthPermission).toBool(); +-} +- +-void BrowserSettings::setHttpAuthPermission(bool httpAuthPermission) +-{ +- config()->set(Config::Browser_HttpAuthPermission, httpAuthPermission); +-} +- +-bool BrowserSettings::searchInAllDatabases() +-{ +- return config()->get(Config::Browser_SearchInAllDatabases).toBool(); +-} +- +-void BrowserSettings::setSearchInAllDatabases(bool searchInAllDatabases) +-{ +- config()->set(Config::Browser_SearchInAllDatabases, searchInAllDatabases); +-} +- +-bool BrowserSettings::supportKphFields() +-{ +- return config()->get(Config::Browser_SupportKphFields).toBool(); +-} +- +-void BrowserSettings::setSupportKphFields(bool supportKphFields) +-{ +- config()->set(Config::Browser_SupportKphFields, supportKphFields); +-} +- +-bool BrowserSettings::noMigrationPrompt() +-{ +- return config()->get(Config::Browser_NoMigrationPrompt).toBool(); +-} +- +-void BrowserSettings::setNoMigrationPrompt(bool prompt) +-{ +- config()->set(Config::Browser_NoMigrationPrompt, prompt); +-} +- +-bool BrowserSettings::useCustomProxy() +-{ +- return config()->get(Config::Browser_UseCustomProxy).toBool(); +-} +- +-void BrowserSettings::setUseCustomProxy(bool enabled) +-{ +- config()->set(Config::Browser_UseCustomProxy, enabled); +-} +- +-QString BrowserSettings::customProxyLocation() +-{ +- return config()->get(Config::Browser_CustomProxyLocation).toString(); +-} +- +-void BrowserSettings::setCustomProxyLocation(const QString& location) +-{ +- config()->set(Config::Browser_CustomProxyLocation, location); +-} +- +-bool BrowserSettings::customBrowserSupport() +-{ +- return config()->get(Config::Browser_UseCustomBrowser).toBool(); +-} +- +-void BrowserSettings::setCustomBrowserSupport(bool enabled) +-{ +- config()->set(Config::Browser_UseCustomBrowser, enabled); +-} +- +-int BrowserSettings::customBrowserType() +-{ +- return config()->get(Config::Browser_CustomBrowserType).toInt(); +-} +- +-void BrowserSettings::setCustomBrowserType(int type) +-{ +- config()->set(Config::Browser_CustomBrowserType, type); +-} +- +-QString BrowserSettings::customBrowserLocation() +-{ +- return config()->get(Config::Browser_CustomBrowserLocation).toString(); +-} +- +-void BrowserSettings::setCustomBrowserLocation(const QString& location) +-{ +- config()->set(Config::Browser_CustomBrowserLocation, location); +-} +- +-QString BrowserSettings::proxyLocation() +-{ +- return m_nativeMessageInstaller.getProxyPath(); +-} +- +-#ifdef QT_DEBUG +-QString BrowserSettings::customExtensionId() +-{ +- return config()->get(Config::Browser_CustomExtensionId).toString(); +-} +- +-void BrowserSettings::setCustomExtensionId(const QString& id) +-{ +- config()->set(Config::Browser_CustomExtensionId, id); +-} +-#endif +- +-bool BrowserSettings::updateBinaryPath() +-{ +- return config()->get(Config::Browser_UpdateBinaryPath).toBool(); +-} +- +-void BrowserSettings::setUpdateBinaryPath(bool enabled) +-{ +- config()->set(Config::Browser_UpdateBinaryPath, enabled); +-} +- +-bool BrowserSettings::allowExpiredCredentials() +-{ +- return config()->get(Config::Browser_AllowExpiredCredentials).toBool(); +-} +- +-void BrowserSettings::setAllowExpiredCredentials(bool enabled) +-{ +- config()->set(Config::Browser_AllowExpiredCredentials, enabled); +-} +- +-bool BrowserSettings::browserSupport(BrowserShared::SupportedBrowsers browser) +-{ +- return m_nativeMessageInstaller.isBrowserEnabled(browser); +-} +- +-void BrowserSettings::setBrowserSupport(BrowserShared::SupportedBrowsers browser, bool enabled) +-{ +- m_nativeMessageInstaller.setBrowserEnabled(browser, enabled); +-} +- +-bool BrowserSettings::passwordUseNumbers() +-{ +- return config()->get(Config::PasswordGenerator_Numbers).toBool(); +-} +- +-void BrowserSettings::setPasswordUseNumbers(bool useNumbers) +-{ +- config()->set(Config::PasswordGenerator_Numbers, useNumbers); +-} +- +-bool BrowserSettings::passwordUseLowercase() +-{ +- return config()->get(Config::PasswordGenerator_LowerCase).toBool(); +-} +- +-void BrowserSettings::setPasswordUseLowercase(bool useLowercase) +-{ +- config()->set(Config::PasswordGenerator_LowerCase, useLowercase); +-} +- +-bool BrowserSettings::passwordUseUppercase() +-{ +- return config()->get(Config::PasswordGenerator_UpperCase).toBool(); +-} +- +-void BrowserSettings::setPasswordUseUppercase(bool useUppercase) +-{ +- config()->set(Config::PasswordGenerator_UpperCase, useUppercase); +-} +- +-bool BrowserSettings::passwordUseSpecial() +-{ +- return config()->get(Config::PasswordGenerator_SpecialChars).toBool(); +-} +- +-void BrowserSettings::setPasswordUseSpecial(bool useSpecial) +-{ +- config()->set(Config::PasswordGenerator_SpecialChars, useSpecial); +-} +- +-bool BrowserSettings::passwordUseBraces() +-{ +- return config()->get(Config::PasswordGenerator_Braces).toBool(); +-} +- +-void BrowserSettings::setPasswordUseBraces(bool useBraces) +-{ +- config()->set(Config::PasswordGenerator_Braces, useBraces); +-} +- +-bool BrowserSettings::passwordUsePunctuation() +-{ +- return config()->get(Config::PasswordGenerator_Punctuation).toBool(); +-} +- +-void BrowserSettings::setPasswordUsePunctuation(bool usePunctuation) +-{ +- config()->set(Config::PasswordGenerator_Punctuation, usePunctuation); +-} +- +-bool BrowserSettings::passwordUseQuotes() +-{ +- return config()->get(Config::PasswordGenerator_Quotes).toBool(); +-} +- +-void BrowserSettings::setPasswordUseQuotes(bool useQuotes) +-{ +- config()->set(Config::PasswordGenerator_Quotes, useQuotes); +-} +- +-bool BrowserSettings::passwordUseDashes() +-{ +- return config()->get(Config::PasswordGenerator_Dashes).toBool(); +-} +- +-void BrowserSettings::setPasswordUseDashes(bool useDashes) +-{ +- config()->set(Config::PasswordGenerator_Dashes, useDashes); +-} +- +-bool BrowserSettings::passwordUseMath() +-{ +- return config()->get(Config::PasswordGenerator_Math).toBool(); +-} +- +-void BrowserSettings::setPasswordUseMath(bool useMath) +-{ +- config()->set(Config::PasswordGenerator_Math, useMath); +-} +- +-bool BrowserSettings::passwordUseLogograms() +-{ +- return config()->get(Config::PasswordGenerator_Logograms).toBool(); +-} +- +-void BrowserSettings::setPasswordUseLogograms(bool useLogograms) +-{ +- config()->set(Config::PasswordGenerator_Logograms, useLogograms); +-} +- +-bool BrowserSettings::passwordUseEASCII() +-{ +- return config()->get(Config::PasswordGenerator_EASCII).toBool(); +-} +- +-void BrowserSettings::setPasswordUseEASCII(bool useEASCII) +-{ +- config()->set(Config::PasswordGenerator_EASCII, useEASCII); +-} +- +-bool BrowserSettings::advancedMode() +-{ +- return config()->get(Config::PasswordGenerator_AdvancedMode).toBool(); +-} +- +-void BrowserSettings::setAdvancedMode(bool advancedMode) +-{ +- config()->set(Config::PasswordGenerator_AdvancedMode, advancedMode); +-} +- +-QString BrowserSettings::passwordAdditionalChars() +-{ +- return config()->get(Config::PasswordGenerator_AdditionalChars).toString(); +-} +- +-void BrowserSettings::setPasswordAdditionalChars(const QString& chars) +-{ +- config()->set(Config::PasswordGenerator_AdditionalChars, chars); +-} +- +-QString BrowserSettings::passwordExcludedChars() +-{ +- return config()->get(Config::PasswordGenerator_ExcludedChars).toString(); +-} +- +-void BrowserSettings::setPasswordExcludedChars(const QString& chars) +-{ +- config()->set(Config::PasswordGenerator_ExcludedChars, chars); +-} +- +-int BrowserSettings::passPhraseWordCount() +-{ +- return config()->get(Config::PasswordGenerator_WordCount).toInt(); +-} +- +-void BrowserSettings::setPassPhraseWordCount(int wordCount) +-{ +- config()->set(Config::PasswordGenerator_WordCount, wordCount); +-} +- +-QString BrowserSettings::passPhraseWordSeparator() +-{ +- return config()->get(Config::PasswordGenerator_WordSeparator).toString(); +-} +- +-void BrowserSettings::setPassPhraseWordSeparator(const QString& separator) +-{ +- config()->set(Config::PasswordGenerator_WordSeparator, separator); +-} +- +-int BrowserSettings::generatorType() +-{ +- return config()->get(Config::PasswordGenerator_Type).toInt(); +-} +- +-void BrowserSettings::setGeneratorType(int type) +-{ +- config()->set(Config::PasswordGenerator_Type, type); +-} +- +-bool BrowserSettings::passwordEveryGroup() +-{ +- return config()->get(Config::PasswordGenerator_EnsureEvery).toBool(); +-} +- +-void BrowserSettings::setPasswordEveryGroup(bool everyGroup) +-{ +- config()->set(Config::PasswordGenerator_EnsureEvery, everyGroup); +-} +- +-bool BrowserSettings::passwordExcludeAlike() +-{ +- return config()->get(Config::PasswordGenerator_ExcludeAlike).toBool(); +-} +- +-void BrowserSettings::setPasswordExcludeAlike(bool excludeAlike) +-{ +- config()->set(Config::PasswordGenerator_ExcludeAlike, excludeAlike); +-} +- +-int BrowserSettings::passwordLength() +-{ +- return config()->get(Config::PasswordGenerator_Length).toInt(); +-} +- +-void BrowserSettings::setPasswordLength(int length) +-{ +- config()->set(Config::PasswordGenerator_Length, length); +- m_passwordGenerator.setLength(length); +-} +- +-PasswordGenerator::CharClasses BrowserSettings::passwordCharClasses() +-{ +- PasswordGenerator::CharClasses classes; +- if (passwordUseLowercase()) { +- classes |= PasswordGenerator::LowerLetters; +- } +- if (passwordUseUppercase()) { +- classes |= PasswordGenerator::UpperLetters; +- } +- if (passwordUseNumbers()) { +- classes |= PasswordGenerator::Numbers; +- } +- if (passwordUseSpecial()) { +- classes |= PasswordGenerator::SpecialCharacters; +- } +- if (passwordUseBraces()) { +- classes |= PasswordGenerator::Braces; +- } +- if (passwordUsePunctuation()) { +- classes |= PasswordGenerator::Punctuation; +- } +- if (passwordUseQuotes()) { +- classes |= PasswordGenerator::Quotes; +- } +- if (passwordUseDashes()) { +- classes |= PasswordGenerator::Dashes; +- } +- if (passwordUseMath()) { +- classes |= PasswordGenerator::Math; +- } +- if (passwordUseLogograms()) { +- classes |= PasswordGenerator::Logograms; +- } +- if (passwordUseEASCII()) { +- classes |= PasswordGenerator::EASCII; +- } +- return classes; +-} +- +-PasswordGenerator::GeneratorFlags BrowserSettings::passwordGeneratorFlags() +-{ +- PasswordGenerator::GeneratorFlags flags; +- if (passwordExcludeAlike()) { +- flags |= PasswordGenerator::ExcludeLookAlike; +- } +- if (passwordEveryGroup()) { +- flags |= PasswordGenerator::CharFromEveryGroup; +- } +- return flags; +-} +- +-QJsonObject BrowserSettings::generatePassword() +-{ +- QJsonObject password; +- if (generatorType() == 0) { +- m_passwordGenerator.setLength(passwordLength()); +- m_passwordGenerator.setCharClasses(passwordCharClasses()); +- m_passwordGenerator.setFlags(passwordGeneratorFlags()); +- const QString pw = m_passwordGenerator.generatePassword(); +- password["entropy"] = PasswordHealth(pw).entropy(); +- password["password"] = pw; +- } else { +- m_passPhraseGenerator.setWordCount(passPhraseWordCount()); +- m_passPhraseGenerator.setWordSeparator(passPhraseWordSeparator()); +- password["entropy"] = m_passPhraseGenerator.estimateEntropy(); +- password["password"] = m_passPhraseGenerator.generatePassphrase(); +- } +- return password; +-} +- +-void BrowserSettings::updateBinaryPaths() +-{ +- m_nativeMessageInstaller.updateBinaryPaths(); +-} +diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserSettings.h keepassxc-2.6.4-patched/src/browser/BrowserSettings.h +--- keepassxc-2.6.4-orig/src/browser/BrowserSettings.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/browser/BrowserSettings.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,142 +0,0 @@ +-/* +- * Copyright (C) 2013 Francois Ferrand +- * Copyright (C) 2017 Sami Vänttinen +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 3 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef BROWSERSETTINGS_H +-#define BROWSERSETTINGS_H +- +-#include "BrowserShared.h" +-#include "NativeMessageInstaller.h" +-#include "core/PassphraseGenerator.h" +-#include "core/PasswordGenerator.h" +- +-class BrowserSettings +-{ +-public: +- explicit BrowserSettings() = default; +- static BrowserSettings* instance(); +- +- bool isEnabled(); +- void setEnabled(bool enabled); +- +- bool showNotification(); // TODO!! +- void setShowNotification(bool showNotification); +- bool bestMatchOnly(); +- void setBestMatchOnly(bool bestMatchOnly); +- bool unlockDatabase(); +- void setUnlockDatabase(bool unlockDatabase); +- bool matchUrlScheme(); +- void setMatchUrlScheme(bool matchUrlScheme); +- bool sortByUsername(); +- void setSortByUsername(bool sortByUsername = true); +- bool sortByTitle(); +- void setSortByTitle(bool sortByUsertitle = true); +- bool alwaysAllowAccess(); +- void setAlwaysAllowAccess(bool alwaysAllowAccess); +- bool alwaysAllowUpdate(); +- void setAlwaysAllowUpdate(bool alwaysAllowUpdate); +- bool searchInAllDatabases(); +- void setSearchInAllDatabases(bool searchInAllDatabases); +- bool httpAuthPermission(); +- void setHttpAuthPermission(bool httpAuthPermission); +- bool supportKphFields(); +- void setSupportKphFields(bool supportKphFields); +- bool noMigrationPrompt(); +- void setNoMigrationPrompt(bool prompt); +- +- bool useCustomProxy(); +- void setUseCustomProxy(bool enabled); +- QString customProxyLocation(); +- void setCustomProxyLocation(const QString& location); +- QString proxyLocation(); +-#ifdef QT_DEBUG +- QString customExtensionId(); +- void setCustomExtensionId(const QString& id); +-#endif +- bool updateBinaryPath(); +- void setUpdateBinaryPath(bool enabled); +- bool allowExpiredCredentials(); +- void setAllowExpiredCredentials(bool enabled); +- +- bool browserSupport(BrowserShared::SupportedBrowsers browser); +- void setBrowserSupport(BrowserShared::SupportedBrowsers browser, bool enabled); +- bool customBrowserSupport(); +- void setCustomBrowserSupport(bool enabled); +- int customBrowserType(); +- void setCustomBrowserType(int type); +- QString customBrowserLocation(); +- void setCustomBrowserLocation(const QString& location); +- bool passwordUseNumbers(); +- void setPasswordUseNumbers(bool useNumbers); +- bool passwordUseLowercase(); +- void setPasswordUseLowercase(bool useLowercase); +- bool passwordUseUppercase(); +- void setPasswordUseUppercase(bool useUppercase); +- bool passwordUseSpecial(); +- void setPasswordUseSpecial(bool useSpecial); +- bool passwordUseBraces(); +- void setPasswordUseBraces(bool useBraces); +- bool passwordUsePunctuation(); +- void setPasswordUsePunctuation(bool usePunctuation); +- bool passwordUseQuotes(); +- void setPasswordUseQuotes(bool useQuotes); +- bool passwordUseDashes(); +- void setPasswordUseDashes(bool useDashes); +- bool passwordUseMath(); +- void setPasswordUseMath(bool useMath); +- bool passwordUseLogograms(); +- void setPasswordUseLogograms(bool useLogograms); +- bool passwordUseEASCII(); +- void setPasswordUseEASCII(bool useEASCII); +- bool advancedMode(); +- void setAdvancedMode(bool advancedMode); +- QString passwordAdditionalChars(); +- void setPasswordAdditionalChars(const QString& chars); +- QString passwordExcludedChars(); +- void setPasswordExcludedChars(const QString& chars); +- int passPhraseWordCount(); +- void setPassPhraseWordCount(int wordCount); +- QString passPhraseWordSeparator(); +- void setPassPhraseWordSeparator(const QString& separator); +- int generatorType(); +- void setGeneratorType(int type); +- bool passwordEveryGroup(); +- void setPasswordEveryGroup(bool everyGroup); +- bool passwordExcludeAlike(); +- void setPasswordExcludeAlike(bool excludeAlike); +- int passwordLength(); +- void setPasswordLength(int length); +- PasswordGenerator::CharClasses passwordCharClasses(); +- PasswordGenerator::GeneratorFlags passwordGeneratorFlags(); +- QJsonObject generatePassword(); +- void updateBinaryPaths(); +- +-private: +- static BrowserSettings* m_instance; +- +- PasswordGenerator m_passwordGenerator; +- PassphraseGenerator m_passPhraseGenerator; +- NativeMessageInstaller m_nativeMessageInstaller; +-}; +- +-inline BrowserSettings* browserSettings() +-{ +- return BrowserSettings::instance(); +-} +- +-#endif // BROWSERSETTINGS_H +diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserSettingsPage.cpp keepassxc-2.6.4-patched/src/browser/BrowserSettingsPage.cpp +--- keepassxc-2.6.4-orig/src/browser/BrowserSettingsPage.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/browser/BrowserSettingsPage.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,49 +0,0 @@ +-/* +- * Copyright (C) 2020 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 3 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "BrowserSettingsPage.h" +- +-#include "BrowserService.h" +-#include "BrowserSettings.h" +-#include "BrowserSettingsWidget.h" +-#include "core/Resources.h" +- +-QString BrowserSettingsPage::name() +-{ +- return QObject::tr("Browser Integration"); +-} +- +-QIcon BrowserSettingsPage::icon() +-{ +- return Resources::instance()->icon("internet-web-browser"); +-} +- +-QWidget* BrowserSettingsPage::createWidget() +-{ +- return new BrowserSettingsWidget(); +-} +- +-void BrowserSettingsPage::loadSettings(QWidget* widget) +-{ +- qobject_cast(widget)->loadSettings(); +-} +- +-void BrowserSettingsPage::saveSettings(QWidget* widget) +-{ +- qobject_cast(widget)->saveSettings(); +- browserService()->setEnabled(browserSettings()->isEnabled()); +-} +diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserSettingsPage.h keepassxc-2.6.4-patched/src/browser/BrowserSettingsPage.h +--- keepassxc-2.6.4-orig/src/browser/BrowserSettingsPage.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/browser/BrowserSettingsPage.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,36 +0,0 @@ +-/* +- * Copyright (C) 2020 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 3 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_BROWSERSETTINGSPAGE_H +-#define KEEPASSXC_BROWSERSETTINGSPAGE_H +- +-#include "gui/ApplicationSettingsWidget.h" +- +-class BrowserSettingsPage : public ISettingsPage +-{ +-public: +- explicit BrowserSettingsPage() = default; +- ~BrowserSettingsPage() override = default; +- +- QString name() override; +- QIcon icon() override; +- QWidget* createWidget() override; +- void loadSettings(QWidget* widget) override; +- void saveSettings(QWidget* widget) override; +-}; +- +-#endif // KEEPASSXC_BROWSERSETTINGSPAGE_H +diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserSettingsWidget.cpp keepassxc-2.6.4-patched/src/browser/BrowserSettingsWidget.cpp +--- keepassxc-2.6.4-orig/src/browser/BrowserSettingsWidget.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/browser/BrowserSettingsWidget.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,279 +0,0 @@ +-/* +- * Copyright (C) 2020 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 3 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "BrowserSettingsWidget.h" +-#include "ui_BrowserSettingsWidget.h" +- +-#include "BrowserSettings.h" +-#include "config-keepassx.h" +-#include "core/Resources.h" +- +-#include +- +-BrowserSettingsWidget::BrowserSettingsWidget(QWidget* parent) +- : QWidget(parent) +- , m_ui(new Ui::BrowserSettingsWidget()) +-{ +- m_ui->setupUi(this); +- +- // clang-format off +- QString snapInstructions; +-#if defined(KEEPASSXC_DIST_SNAP) +- snapInstructions = "

" + +- tr("Due to Snap sandboxing, you must run a script to enable browser integration." +- "
" +- "You can obtain this script from %1") +- .arg("https://keepassxc.org"); +-#endif +- +- m_ui->extensionLabel->setOpenExternalLinks(true); +- m_ui->extensionLabel->setText( +- tr("KeePassXC-Browser is needed for the browser integration to work.
Download it for %1 and %2 and %3. %4") +- .arg("Firefox", +- "" +- "Google Chrome / Chromium / Vivaldi / Brave", +- "Microsoft Edge", +- snapInstructions)); +- // clang-format on +- +- m_ui->warningWidget->setCloseButtonVisible(false); +- m_ui->warningWidget->setAutoHideTimeout(-1); +- m_ui->warningWidget->setAnimate(false); +- +- m_ui->tabWidget->setEnabled(m_ui->enableBrowserSupport->isChecked()); +- connect(m_ui->enableBrowserSupport, SIGNAL(toggled(bool)), m_ui->tabWidget, SLOT(setEnabled(bool))); +- +- // Custom Browser option +-#ifdef Q_OS_WIN +- // TODO: Custom browser is disabled on Windows +- m_ui->customBrowserSupport->setVisible(false); +- m_ui->customBrowserGroupBox->setVisible(false); +-#else +- connect(m_ui->customBrowserLocationBrowseButton, SIGNAL(clicked()), SLOT(showCustomBrowserLocationFileDialog())); +- connect(m_ui->customBrowserSupport, SIGNAL(toggled(bool)), m_ui->customBrowserGroupBox, SLOT(setEnabled(bool))); +-#endif +- +- // Custom Proxy option +- m_ui->customProxyLocation->setEnabled(m_ui->useCustomProxy->isChecked()); +- m_ui->customProxyLocationBrowseButton->setEnabled(m_ui->useCustomProxy->isChecked()); +- +- connect(m_ui->useCustomProxy, SIGNAL(toggled(bool)), m_ui->customProxyLocation, SLOT(setEnabled(bool))); +- connect(m_ui->useCustomProxy, SIGNAL(toggled(bool)), m_ui->customProxyLocationBrowseButton, SLOT(setEnabled(bool))); +- connect(m_ui->useCustomProxy, SIGNAL(toggled(bool)), SLOT(validateCustomProxyLocation())); +- connect(m_ui->customProxyLocation, SIGNAL(editingFinished()), SLOT(validateCustomProxyLocation())); +- connect(m_ui->customProxyLocationBrowseButton, SIGNAL(clicked()), this, SLOT(showProxyLocationFileDialog())); +- +-#ifndef Q_OS_LINUX +- m_ui->snapWarningLabel->setVisible(false); +-#endif +- +-#ifdef Q_OS_WIN +- // Brave uses Chrome's registry settings +- m_ui->braveSupport->setHidden(true); +- // Vivaldi uses Chrome's registry settings +- m_ui->vivaldiSupport->setHidden(true); +- m_ui->chromeSupport->setText("Chrome, Vivaldi, and Brave"); +- // Tor Browser uses Firefox's registry settings +- m_ui->torBrowserSupport->setHidden(true); +- m_ui->firefoxSupport->setText("Firefox and Tor Browser"); +-#endif +- m_ui->browserGlobalWarningWidget->setVisible(false); +- +-#ifndef QT_DEBUG +- m_ui->customExtensionId->setVisible(false); +- m_ui->customExtensionLabel->setVisible(false); +-#endif +-} +- +-BrowserSettingsWidget::~BrowserSettingsWidget() +-{ +-} +- +-void BrowserSettingsWidget::loadSettings() +-{ +- auto settings = browserSettings(); +- m_ui->enableBrowserSupport->setChecked(settings->isEnabled()); +- +- m_ui->showNotification->setChecked(settings->showNotification()); +- m_ui->bestMatchOnly->setChecked(settings->bestMatchOnly()); +- m_ui->unlockDatabase->setChecked(settings->unlockDatabase()); +- m_ui->matchUrlScheme->setChecked(settings->matchUrlScheme()); +- +- // hide unimplemented options +- // TODO: fix this +- m_ui->showNotification->hide(); +- +- if (settings->sortByUsername()) { +- m_ui->sortByUsername->setChecked(true); +- } else { +- m_ui->sortByTitle->setChecked(true); +- } +- +- m_ui->alwaysAllowAccess->setChecked(settings->alwaysAllowAccess()); +- m_ui->alwaysAllowUpdate->setChecked(settings->alwaysAllowUpdate()); +- m_ui->httpAuthPermission->setChecked(settings->httpAuthPermission()); +- m_ui->searchInAllDatabases->setChecked(settings->searchInAllDatabases()); +- m_ui->supportKphFields->setChecked(settings->supportKphFields()); +- m_ui->noMigrationPrompt->setChecked(settings->noMigrationPrompt()); +- m_ui->useCustomProxy->setChecked(settings->useCustomProxy()); +- m_ui->customProxyLocation->setText(settings->customProxyLocation()); +- m_ui->updateBinaryPath->setChecked(settings->updateBinaryPath()); +- m_ui->allowExpiredCredentials->setChecked(settings->allowExpiredCredentials()); +- m_ui->chromeSupport->setChecked(settings->browserSupport(BrowserShared::CHROME)); +- m_ui->chromiumSupport->setChecked(settings->browserSupport(BrowserShared::CHROMIUM)); +- m_ui->firefoxSupport->setChecked(settings->browserSupport(BrowserShared::FIREFOX)); +- m_ui->edgeSupport->setChecked(settings->browserSupport(BrowserShared::EDGE)); +-#ifndef Q_OS_WIN +- m_ui->braveSupport->setChecked(settings->browserSupport(BrowserShared::BRAVE)); +- m_ui->vivaldiSupport->setChecked(settings->browserSupport(BrowserShared::VIVALDI)); +- m_ui->torBrowserSupport->setChecked(settings->browserSupport(BrowserShared::TOR_BROWSER)); +-#endif +-#ifndef Q_OS_LINUX +- m_ui->snapWarningLabel->setVisible(false); +-#endif +- +-// TODO: Enable Edge support when Linux version is released +-#ifdef Q_OS_LINUX +- m_ui->edgeSupport->setChecked(false); +- m_ui->edgeSupport->setEnabled(false); +-#endif +- +-#ifdef KEEPASSXC_DIST_SNAP +- // Disable settings that will not work +- m_ui->useCustomProxy->setChecked(false); +- m_ui->useCustomProxy->setVisible(false); +- m_ui->customProxyLocation->setVisible(false); +- m_ui->customProxyLocationBrowseButton->setVisible(false); +- m_ui->browsersGroupBox->setVisible(false); +- m_ui->browsersGroupBox->setEnabled(false); +- m_ui->updateBinaryPath->setChecked(false); +- m_ui->updateBinaryPath->setVisible(false); +- // No custom browser for snaps +- m_ui->customBrowserSupport->setVisible(false); +- m_ui->customBrowserGroupBox->setVisible(false); +- // Show notice to user +- m_ui->browserGlobalWarningWidget->showMessage(tr("Please see special instructions for browser extension use below"), +- MessageWidget::Warning); +- m_ui->browserGlobalWarningWidget->setCloseButtonVisible(false); +- m_ui->browserGlobalWarningWidget->setAutoHideTimeout(-1); +-#endif +- +- const auto customBrowserSet = settings->customBrowserSupport(); +- m_ui->customBrowserSupport->setChecked(customBrowserSet); +- m_ui->customBrowserGroupBox->setEnabled(customBrowserSet); +- m_ui->browserTypeComboBox->clear(); +- m_ui->browserTypeComboBox->addItem(tr("Firefox"), BrowserShared::SupportedBrowsers::FIREFOX); +- m_ui->browserTypeComboBox->addItem(tr("Chromium"), BrowserShared::SupportedBrowsers::CHROMIUM); +- auto typeIndex = m_ui->browserTypeComboBox->findData(settings->customBrowserType()); +- if (typeIndex >= 0) { +- m_ui->browserTypeComboBox->setCurrentIndex(typeIndex); +- } +- m_ui->customBrowserLocation->setText(settings->customBrowserLocation()); +- +-#ifdef QT_DEBUG +- m_ui->customExtensionId->setText(settings->customExtensionId()); +-#endif +- +- validateCustomProxyLocation(); +-} +- +-void BrowserSettingsWidget::validateCustomProxyLocation() +-{ +- auto path = m_ui->customProxyLocation->text(); +- if (m_ui->useCustomProxy->isChecked() && !QFile::exists(path)) { +- m_ui->warningWidget->showMessage(tr("Error: The custom proxy location cannot be found!" +- "
Browser integration WILL NOT WORK without the proxy application."), +- MessageWidget::Error); +- } else { +- m_ui->warningWidget->showMessage(tr("Warning: The following options can be dangerous!"), +- MessageWidget::Warning); +- } +-} +- +-void BrowserSettingsWidget::saveSettings() +-{ +- auto settings = browserSettings(); +- settings->setEnabled(m_ui->enableBrowserSupport->isChecked()); +- settings->setShowNotification(m_ui->showNotification->isChecked()); +- settings->setBestMatchOnly(m_ui->bestMatchOnly->isChecked()); +- settings->setUnlockDatabase(m_ui->unlockDatabase->isChecked()); +- settings->setMatchUrlScheme(m_ui->matchUrlScheme->isChecked()); +- settings->setSortByUsername(m_ui->sortByUsername->isChecked()); +- +- settings->setUseCustomProxy(m_ui->useCustomProxy->isChecked()); +- settings->setCustomProxyLocation(m_ui->customProxyLocation->text()); +- +- settings->setUpdateBinaryPath(m_ui->updateBinaryPath->isChecked()); +- settings->setAllowExpiredCredentials(m_ui->allowExpiredCredentials->isChecked()); +- settings->setAlwaysAllowAccess(m_ui->alwaysAllowAccess->isChecked()); +- settings->setAlwaysAllowUpdate(m_ui->alwaysAllowUpdate->isChecked()); +- settings->setHttpAuthPermission(m_ui->httpAuthPermission->isChecked()); +- settings->setSearchInAllDatabases(m_ui->searchInAllDatabases->isChecked()); +- settings->setSupportKphFields(m_ui->supportKphFields->isChecked()); +- settings->setNoMigrationPrompt(m_ui->noMigrationPrompt->isChecked()); +- +-#ifdef QT_DEBUG +- settings->setCustomExtensionId(m_ui->customExtensionId->text()); +-#endif +- +- settings->setBrowserSupport(BrowserShared::CHROME, m_ui->chromeSupport->isChecked()); +- settings->setBrowserSupport(BrowserShared::CHROMIUM, m_ui->chromiumSupport->isChecked()); +- settings->setBrowserSupport(BrowserShared::FIREFOX, m_ui->firefoxSupport->isChecked()); +- settings->setBrowserSupport(BrowserShared::EDGE, m_ui->edgeSupport->isChecked()); +-#ifndef Q_OS_WIN +- settings->setBrowserSupport(BrowserShared::BRAVE, m_ui->braveSupport->isChecked()); +- settings->setBrowserSupport(BrowserShared::VIVALDI, m_ui->vivaldiSupport->isChecked()); +- settings->setBrowserSupport(BrowserShared::TOR_BROWSER, m_ui->torBrowserSupport->isChecked()); +- +- // Custom browser settings +- bool customBrowserEnabled = m_ui->customBrowserSupport->isChecked(); +- settings->setCustomBrowserType(m_ui->browserTypeComboBox->currentData().toInt()); +- settings->setCustomBrowserLocation(m_ui->customBrowserLocation->text()); +- settings->setCustomBrowserSupport(customBrowserEnabled); +- settings->setBrowserSupport(BrowserShared::CUSTOM, customBrowserEnabled); +- +- // If we disabled the custom browser support make sure to clear variables +- if (!customBrowserEnabled) { +- settings->setCustomBrowserLocation(""); +- } +-#endif +-} +- +-void BrowserSettingsWidget::showProxyLocationFileDialog() +-{ +-#ifdef Q_OS_WIN +- QString fileTypeFilter(QString("%1 (*.exe);;%2 (*.*)").arg(tr("Executable Files"), tr("All Files"))); +-#else +- QString fileTypeFilter(QString("%1 (*)").arg(tr("Executable Files"))); +-#endif +- auto proxyLocation = QFileDialog::getOpenFileName(this, +- tr("Select custom proxy location"), +- QFileInfo(QCoreApplication::applicationDirPath()).filePath(), +- fileTypeFilter); +- m_ui->customProxyLocation->setText(proxyLocation); +- validateCustomProxyLocation(); +-} +- +-void BrowserSettingsWidget::showCustomBrowserLocationFileDialog() +-{ +- auto location = QFileDialog::getExistingDirectory(this, +- tr("Select native messaging host folder location"), +- QFileInfo(QCoreApplication::applicationDirPath()).filePath()); +- if (!location.isEmpty()) { +- m_ui->customBrowserLocation->setText(location); +- } +-} +diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserSettingsWidget.h keepassxc-2.6.4-patched/src/browser/BrowserSettingsWidget.h +--- keepassxc-2.6.4-orig/src/browser/BrowserSettingsWidget.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/browser/BrowserSettingsWidget.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,51 +0,0 @@ +-/* +- * Copyright (C) 2020 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 3 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef BROWSERSETTINGSWIDGET_H +-#define BROWSERSETTINGSWIDGET_H +- +-#include +-#include +-#include +- +-namespace Ui +-{ +- class BrowserSettingsWidget; +-} +- +-class BrowserSettingsWidget : public QWidget +-{ +- Q_OBJECT +- +-public: +- explicit BrowserSettingsWidget(QWidget* parent = nullptr); +- ~BrowserSettingsWidget(); +- +-public slots: +- void loadSettings(); +- void saveSettings(); +- +-private slots: +- void showProxyLocationFileDialog(); +- void validateCustomProxyLocation(); +- void showCustomBrowserLocationFileDialog(); +- +-private: +- QScopedPointer m_ui; +-}; +- +-#endif // BROWSERSETTINGSWIDGET_H +diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserSettingsWidget.ui keepassxc-2.6.4-patched/src/browser/BrowserSettingsWidget.ui +--- keepassxc-2.6.4-orig/src/browser/BrowserSettingsWidget.ui 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/browser/BrowserSettingsWidget.ui 1970-01-01 01:00:00.000000000 +0100 +@@ -1,634 +0,0 @@ +- +- +- BrowserSettingsWidget +- +- +- +- 0 +- 0 +- 584 +- 467 +- +- +- +- Dialog +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- +- +- +- This is required for accessing your databases with KeePassXC-Browser +- +- +- Enable browser integration +- +- +- +- +- +- +- 0 +- +- +- +- General +- +- +- +- +- +- Browsers installed as snaps are currently not supported. +- +- +- +- +- +- +- +- +- +- Qt::Vertical +- +- +- QSizePolicy::Fixed +- +- +- +- 20 +- 4 +- +- +- +- +- +- +- +- Enable integration for these browsers: +- +- +- +- 40 +- +- +- +- +- Vivaldi +- +- +- false +- +- +- +- +- +- +- &Edge +- +- +- false +- +- +- +- +- +- +- Firefox +- +- +- false +- +- +- +- +- +- +- Tor Browser +- +- +- false +- +- +- +- +- +- +- Brave +- +- +- false +- +- +- +- +- +- +- Google Chrome +- +- +- false +- +- +- +- +- +- +- Chromium +- +- +- false +- +- +- +- +- +- +- Qt::Horizontal +- +- +- +- 40 +- 20 +- +- +- +- +- +- +- +- +- +- +- Qt::Vertical +- +- +- QSizePolicy::Fixed +- +- +- +- 20 +- 4 +- +- +- +- +- +- +- +- Show a notification when credentials are requested +- +- +- true +- +- +- +- +- +- +- Request to unlock the database if it is locked +- +- +- true +- +- +- +- +- +- +- Only entries with the same scheme (http://, https://, ...) are returned. +- +- +- Match URL scheme (e.g., https://...) +- +- +- +- +- +- +- Only returns the best matches for a specific URL instead of all entries for the whole domain. +- +- +- Return only best-matching credentials +- +- +- +- +- +- +- Returns expired credentials. String [expired] is added to the title. +- +- +- Allow returning expired credentials +- +- +- +- +- +- +- All databases connected to the extension will return matching credentials. +- +- +- Search in all opened databases for matching credentials +- +- +- +- +- +- +- Sort matching credentials by title +- +- +- +- +- +- +- Sort matching credentials by username +- +- +- +- +- +- +- Qt::Vertical +- +- +- +- 20 +- 40 +- +- +- +- +- +- +- +- +- Advanced +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- +- +- +- Never ask before accessing credentials +- +- +- +- +- +- +- Never ask before updating credentials +- +- +- +- +- +- +- Do not ask permission for HTTP Basic Auth +- +- +- +- +- +- +- Automatically creating or updating string fields is not supported. +- +- +- Return advanced string fields which start with "KPH: " +- +- +- +- +- +- +- Don't display the popup suggesting migration of legacy KeePassHTTP settings. +- +- +- Do not prompt for KeePassHTTP settings migration. +- +- +- +- +- +- +- Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. +- +- +- Update native messaging manifest files at startup +- +- +- +- +- +- +- Use a custom proxy location if you installed a proxy manually. +- +- +- Use a custom proxy location: +- +- +- +- +- +- +- +- +- Qt::Horizontal +- +- +- QSizePolicy::Fixed +- +- +- +- 15 +- 20 +- +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- 450 +- 0 +- +- +- +- Custom proxy location field +- +- +- 999 +- +- +- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter +- +- +- +- +- +- +- Browser for custom proxy file +- +- +- Browse... +- +- +- +- +- +- +- Qt::Horizontal +- +- +- +- 40 +- 20 +- +- +- +- +- +- +- +- +- +- Use a custom browser configuration location: +- +- +- false +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- margin-right: 5px +- +- +- Browser type: +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- Qt::StrongFocus +- +- +- Toolbar button style +- +- +- QComboBox::AdjustToContents +- +- +- +- +- +- +- Qt::Horizontal +- +- +- +- 40 +- 20 +- +- +- +- +- +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- margin-right: 5px +- +- +- Config Location: +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- 350 +- 0 +- +- +- +- Custom browser location field +- +- +- 999 +- +- +- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter +- +- +- ~/.custom/config/Mozilla/native-messaging-hosts/ +- +- +- +- +- +- +- Browse for custom browser path +- +- +- Browse... +- +- +- +- +- +- +- +- +- +- +- +- +- 6 +- +- +- +- +- Custom extension ID: +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- 250 +- 0 +- +- +- +- Custom extension ID +- +- +- 999 +- +- +- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter +- +- +- +- +- +- +- Qt::Horizontal +- +- +- +- 40 +- 20 +- +- +- +- +- +- +- +- +- +- +- Qt::Vertical +- +- +- +- 20 +- 40 +- +- +- +- +- +- +- +- +- +- +- +- +- MessageWidget +- QWidget +-
gui/MessageWidget.h
+- 1 +-
+-
+- +- +-
+diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserShared.cpp keepassxc-2.6.4-patched/src/browser/BrowserShared.cpp +--- keepassxc-2.6.4-orig/src/browser/BrowserShared.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/browser/BrowserShared.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,45 +0,0 @@ +-/* +- * Copyright (C) 2020 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 3 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "BrowserShared.h" +-#include "config-keepassx.h" +- +-#include +-#include +-#include +-#include +- +-namespace BrowserShared +-{ +- QString localServerPath() +- { +- const auto serverName = QStringLiteral("/org.keepassxc.KeePassXC.BrowserServer"); +-#if defined(KEEPASSXC_DIST_SNAP) +- return QProcessEnvironment::systemEnvironment().value("SNAP_USER_COMMON") + serverName; +-#elif defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) +- // Use XDG_RUNTIME_DIR instead of /tmp if it's available +- QString path = QStandardPaths::writableLocation(QStandardPaths::RuntimeLocation); +- return path.isEmpty() ? QStandardPaths::writableLocation(QStandardPaths::TempLocation) + serverName +- : path + serverName; +-#elif defined(Q_OS_WIN) +- // Windows uses named pipes +- return serverName + "_" + qgetenv("USERNAME"); +-#else // Q_OS_MACOS and others +- return QStandardPaths::writableLocation(QStandardPaths::TempLocation) + serverName; +-#endif +- } +-} // namespace BrowserShared +diff -urNr keepassxc-2.6.4-orig/src/browser/BrowserShared.h keepassxc-2.6.4-patched/src/browser/BrowserShared.h +--- keepassxc-2.6.4-orig/src/browser/BrowserShared.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/browser/BrowserShared.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,43 +0,0 @@ +-/* +- * Copyright (C) 2020 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 3 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_BROWSERSHARED_H +-#define KEEPASSXC_BROWSERSHARED_H +- +-#include +- +-namespace BrowserShared +-{ +- constexpr int NATIVEMSG_MAX_LENGTH = 1024 * 1024; +- +- enum SupportedBrowsers : int +- { +- CHROME = 0, +- CHROMIUM, +- FIREFOX, +- VIVALDI, +- TOR_BROWSER, +- BRAVE, +- EDGE, +- CUSTOM, +- MAX_SUPPORTED +- }; +- +- QString localServerPath(); +-} // namespace BrowserShared +- +-#endif // KEEPASSXC_BROWSERSHARED_H +diff -urNr keepassxc-2.6.4-orig/src/browser/CMakeLists.txt keepassxc-2.6.4-patched/src/browser/CMakeLists.txt +--- keepassxc-2.6.4-orig/src/browser/CMakeLists.txt 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/browser/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +@@ -1,36 +0,0 @@ +-# Copyright (C) 2017 Sami Vänttinen +-# Copyright (C) 2017 KeePassXC Team +-# +-# This program is free software: you can redistribute it and/or modify +-# it under the terms of the GNU General Public License as published by +-# the Free Software Foundation, either version 3 of the License, or +-# (at your option) any later version. +-# +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY; without even the implied warranty of +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-# GNU General Public License for more details. +-# +-# You should have received a copy of the GNU General Public License +-# along with this program. If not, see . +- +-if(WITH_XC_BROWSER) +- include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) +- +- set(keepassxcbrowser_SOURCES +- BrowserAccessControlDialog.cpp +- BrowserAction.cpp +- BrowserEntryConfig.cpp +- BrowserEntrySaveDialog.cpp +- BrowserHost.cpp +- BrowserSettingsPage.cpp +- BrowserSettingsWidget.cpp +- BrowserService.cpp +- BrowserSettings.cpp +- BrowserShared.cpp +- NativeMessageInstaller.cpp +- Variant.cpp) +- +- add_library(keepassxcbrowser STATIC ${keepassxcbrowser_SOURCES}) +- target_link_libraries(keepassxcbrowser Qt5::Core Qt5::Concurrent Qt5::Widgets Qt5::Network ${sodium_LIBRARY_RELEASE}) +-endif() +diff -urNr keepassxc-2.6.4-orig/src/browser/NativeMessageInstaller.cpp keepassxc-2.6.4-patched/src/browser/NativeMessageInstaller.cpp +--- keepassxc-2.6.4-orig/src/browser/NativeMessageInstaller.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/browser/NativeMessageInstaller.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,329 +0,0 @@ +-/* +- * Copyright (C) 2017 Sami Vänttinen +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 3 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "NativeMessageInstaller.h" +-#include "BrowserSettings.h" +-#include "config-keepassx.h" +- +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-using namespace BrowserShared; +- +-namespace +-{ +- const QString HOST_NAME = QStringLiteral("org.keepassxc.keepassxc_browser"); +- const QStringList ALLOWED_EXTENSIONS = QStringList() << QStringLiteral("keepassxc-browser@keepassxc.org"); +- const QStringList ALLOWED_ORIGINS = QStringList() +- << QStringLiteral("chrome-extension://pdffhmdngciaglkoonimfcmckehcpafo/") +- << QStringLiteral("chrome-extension://oboonakemofpalcgghocfoadofidjkkk/"); +-#if defined(Q_OS_MACOS) +- const QString TARGET_DIR_CHROME = QStringLiteral("/Library/Application Support/Google/Chrome/NativeMessagingHosts"); +- const QString TARGET_DIR_CHROMIUM = QStringLiteral("/Library/Application Support/Chromium/NativeMessagingHosts"); +- const QString TARGET_DIR_FIREFOX = QStringLiteral("/Library/Application Support/Mozilla/NativeMessagingHosts"); +- const QString TARGET_DIR_VIVALDI = QStringLiteral("/Library/Application Support/Vivaldi/NativeMessagingHosts"); +- const QString TARGET_DIR_TOR_BROWSER = +- QStringLiteral("/Library/Application Support/TorBrowser-Data/Browser/Mozilla/NativeMessagingHosts"); +- const QString TARGET_DIR_BRAVE = +- QStringLiteral("/Library/Application Support/BraveSoftware/Brave-Browser/NativeMessagingHosts"); +- const QString TARGET_DIR_EDGE = QStringLiteral("/Library/Application Support/Microsoft Edge/NativeMessagingHosts"); +-#elif defined(Q_OS_WIN) +- const QString TARGET_DIR_CHROME = QStringLiteral( +- "HKEY_CURRENT_USER\\Software\\Google\\Chrome\\NativeMessagingHosts\\org.keepassxc.keepassxc_browser"); +- const QString TARGET_DIR_CHROMIUM = +- QStringLiteral("HKEY_CURRENT_USER\\Software\\Chromium\\NativeMessagingHosts\\org.keepassxc.keepassxc_browser"); +- const QString TARGET_DIR_FIREFOX = +- QStringLiteral("HKEY_CURRENT_USER\\Software\\Mozilla\\NativeMessagingHosts\\org.keepassxc.keepassxc_browser"); +- const QString TARGET_DIR_VIVALDI = TARGET_DIR_CHROME; +- const QString TARGET_DIR_TOR_BROWSER = TARGET_DIR_FIREFOX; +- const QString TARGET_DIR_BRAVE = TARGET_DIR_CHROME; +- const QString TARGET_DIR_EDGE = QStringLiteral( +- "HKEY_CURRENT_USER\\Software\\Microsoft\\Edge\\NativeMessagingHosts\\org.keepassxc.keepassxc_browser"); +-#else +- const QString TARGET_DIR_CHROME = QStringLiteral("/google-chrome/NativeMessagingHosts"); +- const QString TARGET_DIR_CHROMIUM = QStringLiteral("/chromium/NativeMessagingHosts"); +- const QString TARGET_DIR_FIREFOX = QStringLiteral("/.mozilla/native-messaging-hosts"); +- const QString TARGET_DIR_VIVALDI = QStringLiteral("/vivaldi/NativeMessagingHosts"); +- const QString TARGET_DIR_TOR_BROWSER = QStringLiteral( +- "/torbrowser/tbb/x86_64/tor-browser_en-US/Browser/TorBrowser/Data/Browser/.mozilla/native-messaging-hosts"); +- const QString TARGET_DIR_BRAVE = QStringLiteral("/BraveSoftware/Brave-Browser/NativeMessagingHosts"); +- const QString TARGET_DIR_EDGE = QStringLiteral("/microsoftedge/NativeMessagingHosts"); +-#endif +-} // namespace +- +-/** +- * Checks if the selected browser has native messaging host properly installed +- * +- * @param browser Selected browser +- * @return bool Script is installed correctly +- */ +-bool NativeMessageInstaller::isBrowserEnabled(SupportedBrowsers browser) +-{ +-#ifdef Q_OS_WIN +- QSettings settings(getTargetPath(browser), QSettings::NativeFormat); +- return !settings.value("Default").isNull(); +-#else +- return QFile::exists(getNativeMessagePath(browser)); +-#endif +-} +- +-/** +- * Installs native messaging JSON script for the selected browser +- * +- * @param browser Selected browser +- * @param enabled Is browser integration enabled +- */ +-void NativeMessageInstaller::setBrowserEnabled(SupportedBrowsers browser, bool enabled) +-{ +- if (enabled) { +-#ifdef Q_OS_WIN +- // Create a registry key +- QSettings settings(getTargetPath(browser), QSettings::NativeFormat); +- settings.setValue("Default", getNativeMessagePath(browser)); +-#endif +- // Always create the script file +- if (!createNativeMessageFile(browser)) { +- QMessageBox::critical( +- nullptr, +- QObject::tr("Browser Plugin Failure"), +- QObject::tr("Could not save the native messaging script file for %1.").arg(getBrowserName(browser)), +- QMessageBox::Ok); +- } +- } else { +- // Remove the script file +- const QString fileName = getNativeMessagePath(browser); +- QFile::remove(fileName); +-#ifdef Q_OS_WIN +- // Remove the registry entry +- QSettings settings(getTargetPath(browser), QSettings::NativeFormat); +- settings.remove("Default"); +-#endif +- } +-} +- +-/** +- * Updates the paths to native messaging host for each browser that has been enabled +- */ +-void NativeMessageInstaller::updateBinaryPaths() +-{ +- for (int i = 0; i < SupportedBrowsers::MAX_SUPPORTED; ++i) { +- if (isBrowserEnabled(static_cast(i))) { +- setBrowserEnabled(static_cast(i), true); +- } +- } +-} +- +-/** +- * Returns the target path for each browser. Windows uses a registry path instead of a file path +- * +- * @param browser Selected browser +- * @return QString Current target path for the selected browser +- */ +-QString NativeMessageInstaller::getTargetPath(SupportedBrowsers browser) const +-{ +- switch (browser) { +- case SupportedBrowsers::CHROME: +- return TARGET_DIR_CHROME; +- case SupportedBrowsers::CHROMIUM: +- return TARGET_DIR_CHROMIUM; +- case SupportedBrowsers::FIREFOX: +- return TARGET_DIR_FIREFOX; +- case SupportedBrowsers::VIVALDI: +- return TARGET_DIR_VIVALDI; +- case SupportedBrowsers::TOR_BROWSER: +- return TARGET_DIR_TOR_BROWSER; +- case SupportedBrowsers::BRAVE: +- return TARGET_DIR_BRAVE; +- case SupportedBrowsers::EDGE: +- return TARGET_DIR_EDGE; +- case SupportedBrowsers::CUSTOM: +- return browserSettings()->customBrowserLocation(); +- default: +- return {}; +- } +-} +- +-/** +- * Returns the browser name +- * Needed for Windows to separate Chromium- or Firefox-based scripts +- * +- * @param browser Selected browser +- * @return QString Name of the selected browser +- */ +-QString NativeMessageInstaller::getBrowserName(SupportedBrowsers browser) const +-{ +- switch (browser) { +- case SupportedBrowsers::CHROME: +- return QStringLiteral("chrome"); +- case SupportedBrowsers::CHROMIUM: +- return QStringLiteral("chromium"); +- case SupportedBrowsers::FIREFOX: +- return QStringLiteral("firefox"); +- case SupportedBrowsers::VIVALDI: +- return QStringLiteral("vivaldi"); +- case SupportedBrowsers::TOR_BROWSER: +- return QStringLiteral("tor-browser"); +- case SupportedBrowsers::BRAVE: +- return QStringLiteral("brave"); +- case SupportedBrowsers::EDGE: +- return QStringLiteral("edge"); +- case SupportedBrowsers::CUSTOM: +- return QStringLiteral("custom"); +- default: +- return {}; +- } +-} +- +-/** +- * Returns the path of native messaging JSON script for the selected browser +- * +- * @param browser Selected browser +- * @return QString JSON script path for the selected browser +- */ +-QString NativeMessageInstaller::getNativeMessagePath(SupportedBrowsers browser) const +-{ +- QString basePath; +-#if defined(Q_OS_WIN) +- // If portable settings file exists save the JSON scripts to the application folder +- if (QFile::exists(QCoreApplication::applicationDirPath() + QStringLiteral("/keepassxc.ini"))) { +- basePath = QCoreApplication::applicationDirPath(); +- } else { +- basePath = QStandardPaths::writableLocation(QStandardPaths::DataLocation); +- } +- return QStringLiteral("%1/%2_%3.json").arg(basePath, HOST_NAME, getBrowserName(browser)); +-#elif defined(Q_OS_LINUX) +- if (browser == SupportedBrowsers::TOR_BROWSER) { +- // Tor Browser launcher stores its config in ~/.local/share/... +- basePath = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation); +- } else if (browser == SupportedBrowsers::FIREFOX) { +- // Firefox stores its config in ~/ +- basePath = QDir::homePath(); +- } else { +- basePath = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation); +- } +-#else +- basePath = QDir::homePath(); +-#endif +- if (browser == SupportedBrowsers::CUSTOM) { +- return QString("%1/%2.json").arg(getTargetPath(browser), HOST_NAME); +- } +- +- return QStringLiteral("%1%2/%3.json").arg(basePath, getTargetPath(browser), HOST_NAME); +-} +- +-/** +- * Gets the path to keepassxc-proxy binary +- * +- * @param location Custom proxy path +- * @return path Path to keepassxc-proxy +- */ +-QString NativeMessageInstaller::getProxyPath() const +-{ +- if (browserSettings()->useCustomProxy()) { +- return browserSettings()->customProxyLocation(); +- } +- +- QString path; +-#ifdef KEEPASSXC_DIST_APPIMAGE +- path = QProcessEnvironment::systemEnvironment().value("APPIMAGE"); +-#else +- path = QCoreApplication::applicationDirPath() + QStringLiteral("/keepassxc-proxy"); +-#ifdef Q_OS_WIN +- path.append(QStringLiteral(".exe")); +-#endif // #ifdef Q_OS_WIN +- +-#endif // #ifdef KEEPASSXC_DIST_APPIMAGE +- return QDir::toNativeSeparators(path); +-} +- +-/** +- * Constructs the JSON script file used with native messaging +- * +- * @param browser Browser (Chromium- and Firefox-based browsers need a different parameters for the script) +- * @param location Custom proxy location +- * @return script The JSON script file +- */ +-QJsonObject NativeMessageInstaller::constructFile(SupportedBrowsers browser) +-{ +- QJsonObject script; +- script["name"] = HOST_NAME; +- script["description"] = QStringLiteral("KeePassXC integration with native messaging support"); +- script["path"] = getProxyPath(); +- script["type"] = QStringLiteral("stdio"); +- +- QJsonArray arr; +- if (browser == SupportedBrowsers::FIREFOX || browser == SupportedBrowsers::TOR_BROWSER +- || (browser == SupportedBrowsers::CUSTOM +- && browserSettings()->customBrowserType() == SupportedBrowsers::FIREFOX)) { +- for (const QString& extension : ALLOWED_EXTENSIONS) { +- arr.append(extension); +- } +- script["allowed_extensions"] = arr; +- } else { +- for (const QString& origin : ALLOWED_ORIGINS) { +- arr.append(origin); +- } +-#ifdef QT_DEBUG +- auto customId = browserSettings()->customExtensionId(); +- if (!customId.isEmpty()) { +- arr.append(QString("chrome-extension://%1/").arg(customId)); +- } +-#endif +- script["allowed_origins"] = arr; +- } +- +- return script; +-} +- +-/** +- * Saves a JSON script file +- * +- * @param browser Selected browser +- * @param script JSON native messaging script object +- * @return bool Write succeeds +- */ +-bool NativeMessageInstaller::createNativeMessageFile(SupportedBrowsers browser) +-{ +- auto path = getNativeMessagePath(browser); +- +- // Make the parent directory path if necessary +- QDir().mkpath(QFileInfo(path).absolutePath()); +- +- QFile scriptFile(path); +- if (!scriptFile.open(QIODevice::WriteOnly)) { +- qWarning() << "Browser Plugin: Failed to open native message file for writing at " << scriptFile.fileName(); +- qWarning() << scriptFile.errorString(); +- return false; +- } +- +- QJsonDocument doc(constructFile(browser)); +- if (scriptFile.write(doc.toJson()) < 0) { +- qWarning() << "Browser Plugin: Failed to write native message file at " << scriptFile.fileName(); +- qWarning() << scriptFile.errorString(); +- return false; +- } +- return true; +-} +diff -urNr keepassxc-2.6.4-orig/src/browser/NativeMessageInstaller.h keepassxc-2.6.4-patched/src/browser/NativeMessageInstaller.h +--- keepassxc-2.6.4-orig/src/browser/NativeMessageInstaller.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/browser/NativeMessageInstaller.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,46 +0,0 @@ +-/* +- * Copyright (C) 2017 Sami Vänttinen +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 3 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef NATIVEMESSAGEINSTALLER_H +-#define NATIVEMESSAGEINSTALLER_H +- +-#include "BrowserShared.h" +-#include +- +-class NativeMessageInstaller +-{ +-public: +- NativeMessageInstaller() = default; +- +- void setBrowserEnabled(BrowserShared::SupportedBrowsers browser, bool enabled); +- bool isBrowserEnabled(BrowserShared::SupportedBrowsers browser); +- +- QString getProxyPath() const; +- void updateBinaryPaths(); +- +-private: +- QString getTargetPath(BrowserShared::SupportedBrowsers browser) const; +- QString getBrowserName(BrowserShared::SupportedBrowsers browser) const; +- QString getNativeMessagePath(BrowserShared::SupportedBrowsers browser) const; +- QJsonObject constructFile(BrowserShared::SupportedBrowsers browser); +- bool createNativeMessageFile(BrowserShared::SupportedBrowsers browser); +- +- Q_DISABLE_COPY(NativeMessageInstaller); +-}; +- +-#endif // NATIVEMESSAGEINSTALLER_H +diff -urNr keepassxc-2.6.4-orig/src/browser/Variant.cpp keepassxc-2.6.4-patched/src/browser/Variant.cpp +--- keepassxc-2.6.4-orig/src/browser/Variant.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/browser/Variant.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,37 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 3 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "Variant.h" +- +-QVariantMap qo2qv(const QObject* object, const QStringList& ignoredProperties) +-{ +- QVariantMap result; +- const QMetaObject* metaobject = object->metaObject(); +- int count = metaobject->propertyCount(); +- for (int i = 0; i < count; ++i) { +- QMetaProperty metaproperty = metaobject->property(i); +- const char* name = metaproperty.name(); +- +- if (ignoredProperties.contains(QLatin1String(name)) || (!metaproperty.isReadable())) { +- continue; +- } +- +- QVariant value = object->property(name); +- result[QLatin1String(name)] = value; +- } +- return result; +-} +diff -urNr keepassxc-2.6.4-orig/src/browser/Variant.h keepassxc-2.6.4-patched/src/browser/Variant.h +--- keepassxc-2.6.4-orig/src/browser/Variant.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/browser/Variant.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,26 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 3 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef VARIANT_H +-#define VARIANT_H +- +-#include +- +-QVariantMap qo2qv(const QObject* object, +- const QStringList& ignoredProperties = QStringList(QString(QLatin1String("objectName")))); +- +-#endif // VARIANT_H +diff -urNr keepassxc-2.6.4-orig/src/cli/Add.cpp keepassxc-2.6.4-patched/src/cli/Add.cpp +--- keepassxc-2.6.4-orig/src/cli/Add.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Add.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,129 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include +-#include +- +-#include "Add.h" +- +-#include "cli/Generate.h" +-#include "cli/TextStream.h" +-#include "cli/Utils.h" +-#include "core/Database.h" +-#include "core/Entry.h" +-#include "core/Group.h" +-#include "core/PasswordGenerator.h" +- +-const QCommandLineOption Add::UsernameOption = QCommandLineOption(QStringList() << "u" +- << "username", +- QObject::tr("Username for the entry."), +- QObject::tr("username")); +- +-const QCommandLineOption Add::UrlOption = +- QCommandLineOption(QStringList() << "url", QObject::tr("URL for the entry."), QObject::tr("URL")); +- +-const QCommandLineOption Add::PasswordPromptOption = +- QCommandLineOption(QStringList() << "p" +- << "password-prompt", +- QObject::tr("Prompt for the entry's password.")); +- +-const QCommandLineOption Add::GenerateOption = QCommandLineOption(QStringList() << "g" +- << "generate", +- QObject::tr("Generate a password for the entry.")); +- +-Add::Add() +-{ +- name = QString("add"); +- description = QObject::tr("Add a new entry to a database."); +- options.append(Add::UsernameOption); +- options.append(Add::UrlOption); +- options.append(Add::PasswordPromptOption); +- positionalArguments.append({QString("entry"), QObject::tr("Path of the entry to add."), QString("")}); +- +- // Password generation options. +- options.append(Add::GenerateOption); +- options.append(Generate::PasswordLengthOption); +- options.append(Generate::LowerCaseOption); +- options.append(Generate::UpperCaseOption); +- options.append(Generate::NumbersOption); +- options.append(Generate::SpecialCharsOption); +- options.append(Generate::ExtendedAsciiOption); +- options.append(Generate::ExcludeCharsOption); +- options.append(Generate::ExcludeSimilarCharsOption); +- options.append(Generate::IncludeEveryGroupOption); +-} +- +-int Add::executeWithDatabase(QSharedPointer database, QSharedPointer parser) +-{ +- auto& out = Utils::STDOUT; +- auto& err = Utils::STDERR; +- +- const QStringList args = parser->positionalArguments(); +- auto& entryPath = args.at(1); +- +- // Cannot use those 2 options at the same time! +- if (parser->isSet(Add::GenerateOption) && parser->isSet(Add::PasswordPromptOption)) { +- err << QObject::tr("Cannot generate a password and prompt at the same time!") << endl; +- return EXIT_FAILURE; +- } +- +- // Validating the password generator here, before we actually create +- // the entry. +- QSharedPointer passwordGenerator; +- if (parser->isSet(Add::GenerateOption)) { +- passwordGenerator = Generate::createGenerator(parser); +- if (passwordGenerator.isNull()) { +- return EXIT_FAILURE; +- } +- } +- +- Entry* entry = database->rootGroup()->addEntryWithPath(entryPath); +- if (!entry) { +- err << QObject::tr("Could not create entry with path %1.").arg(entryPath) << endl; +- return EXIT_FAILURE; +- } +- +- if (!parser->value(Add::UsernameOption).isEmpty()) { +- entry->setUsername(parser->value(Add::UsernameOption)); +- } +- +- if (!parser->value(Add::UrlOption).isEmpty()) { +- entry->setUrl(parser->value(Add::UrlOption)); +- } +- +- if (parser->isSet(Add::PasswordPromptOption)) { +- if (!parser->isSet(Command::QuietOption)) { +- out << QObject::tr("Enter password for new entry: ") << flush; +- } +- QString password = Utils::getPassword(parser->isSet(Command::QuietOption)); +- entry->setPassword(password); +- } else if (parser->isSet(Add::GenerateOption)) { +- QString password = passwordGenerator->generatePassword(); +- entry->setPassword(password); +- } +- +- QString errorMessage; +- if (!database->save(&errorMessage, true, false)) { +- err << QObject::tr("Writing the database failed %1.").arg(errorMessage) << endl; +- return EXIT_FAILURE; +- } +- +- if (!parser->isSet(Command::QuietOption)) { +- out << QObject::tr("Successfully added entry %1.").arg(entry->title()) << endl; +- } +- return EXIT_SUCCESS; +-} +diff -urNr keepassxc-2.6.4-orig/src/cli/AddGroup.cpp keepassxc-2.6.4-patched/src/cli/AddGroup.cpp +--- keepassxc-2.6.4-orig/src/cli/AddGroup.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/AddGroup.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,79 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include +-#include +- +-#include "AddGroup.h" +- +-#include "cli/TextStream.h" +-#include "cli/Utils.h" +-#include "core/Database.h" +-#include "core/Entry.h" +-#include "core/Group.h" +- +-AddGroup::AddGroup() +-{ +- name = QString("mkdir"); +- description = QObject::tr("Adds a new group to a database."); +- positionalArguments.append({QString("group"), QObject::tr("Path of the group to add."), QString("")}); +-} +- +-AddGroup::~AddGroup() +-{ +-} +- +-int AddGroup::executeWithDatabase(QSharedPointer database, QSharedPointer parser) +-{ +- auto& out = Utils::STDOUT; +- auto& err = Utils::STDERR; +- +- const QStringList args = parser->positionalArguments(); +- const QString& groupPath = args.at(1); +- +- QStringList pathParts = groupPath.split("/"); +- QString groupName = pathParts.takeLast(); +- QString parentGroupPath = pathParts.join("/"); +- +- Group* group = database->rootGroup()->findGroupByPath(groupPath); +- if (group) { +- err << QObject::tr("Group %1 already exists!").arg(groupPath) << endl; +- return EXIT_FAILURE; +- } +- +- Group* parentGroup = database->rootGroup()->findGroupByPath(parentGroupPath); +- if (!parentGroup) { +- err << QObject::tr("Group %1 not found.").arg(parentGroupPath) << endl; +- return EXIT_FAILURE; +- } +- +- Group* newGroup = new Group(); +- newGroup->setUuid(QUuid::createUuid()); +- newGroup->setName(groupName); +- newGroup->setParent(parentGroup); +- +- QString errorMessage; +- if (!database->save(&errorMessage, true, false)) { +- err << QObject::tr("Writing the database failed %1.").arg(errorMessage) << endl; +- return EXIT_FAILURE; +- } +- +- if (!parser->isSet(Command::QuietOption)) { +- out << QObject::tr("Successfully added group %1.").arg(groupName) << endl; +- } +- return EXIT_SUCCESS; +-} +diff -urNr keepassxc-2.6.4-orig/src/cli/AddGroup.h keepassxc-2.6.4-patched/src/cli/AddGroup.h +--- keepassxc-2.6.4-orig/src/cli/AddGroup.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/AddGroup.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,32 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_ADDGROUP_H +-#define KEEPASSXC_ADDGROUP_H +- +-#include "DatabaseCommand.h" +- +-class AddGroup : public DatabaseCommand +-{ +-public: +- AddGroup(); +- ~AddGroup(); +- +- int executeWithDatabase(QSharedPointer db, QSharedPointer parser); +-}; +- +-#endif // KEEPASSXC_ADDGROUP_H +diff -urNr keepassxc-2.6.4-orig/src/cli/Add.h keepassxc-2.6.4-patched/src/cli/Add.h +--- keepassxc-2.6.4-orig/src/cli/Add.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Add.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,37 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_ADD_H +-#define KEEPASSXC_ADD_H +- +-#include "DatabaseCommand.h" +- +-class Add : public DatabaseCommand +-{ +-public: +- Add(); +- +- int executeWithDatabase(QSharedPointer db, QSharedPointer parser) override; +- +- static const QCommandLineOption UsernameOption; +- static const QCommandLineOption UrlOption; +- static const QCommandLineOption PasswordPromptOption; +- static const QCommandLineOption GenerateOption; +- static const QCommandLineOption PasswordLengthOption; +-}; +- +-#endif // KEEPASSXC_ADD_H +diff -urNr keepassxc-2.6.4-orig/src/cli/Analyze.cpp keepassxc-2.6.4-patched/src/cli/Analyze.cpp +--- keepassxc-2.6.4-orig/src/cli/Analyze.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Analyze.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,80 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "Analyze.h" +-#include "cli/Utils.h" +-#include "core/HibpOffline.h" +- +-#include +-#include +-#include +- +-#include "cli/TextStream.h" +-#include "core/Group.h" +-#include "core/Tools.h" +- +-const QCommandLineOption Analyze::HIBPDatabaseOption = QCommandLineOption( +- {"H", "hibp"}, +- QObject::tr("Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing " +- "SHA-1 hashes of leaked passwords in HIBP format, as available from " +- "https://haveibeenpwned.com/Passwords."), +- QObject::tr("FILENAME")); +- +-Analyze::Analyze() +-{ +- name = QString("analyze"); +- description = QObject::tr("Analyze passwords for weaknesses and problems."); +- options.append(Analyze::HIBPDatabaseOption); +-} +- +-int Analyze::executeWithDatabase(QSharedPointer database, QSharedPointer parser) +-{ +- auto& out = Utils::STDOUT; +- auto& err = Utils::STDERR; +- +- QString hibpDatabase = parser->value(Analyze::HIBPDatabaseOption); +- QFile hibpFile(hibpDatabase); +- if (!hibpFile.open(QFile::ReadOnly)) { +- err << QObject::tr("Failed to open HIBP file %1: %2").arg(hibpDatabase).arg(hibpFile.errorString()) << endl; +- return EXIT_FAILURE; +- } +- +- out << QObject::tr("Evaluating database entries against HIBP file, this will take a while...") << endl; +- +- QList> findings; +- QString error; +- if (!HibpOffline::report(database, hibpFile, findings, &error)) { +- err << error << endl; +- return EXIT_FAILURE; +- } +- +- for (auto& finding : findings) { +- printHibpFinding(finding.first, finding.second, out); +- } +- +- return EXIT_SUCCESS; +-} +- +-void Analyze::printHibpFinding(const Entry* entry, int count, QTextStream& out) +-{ +- QString path = entry->title(); +- for (auto g = entry->group(); g && g != g->database()->rootGroup(); g = g->parentGroup()) { +- path.prepend("/").prepend(g->name()); +- } +- +- out << QObject::tr("Password for '%1' has been leaked %2 time(s)!", "", count).arg(path).arg(count) << endl; +-} +diff -urNr keepassxc-2.6.4-orig/src/cli/Analyze.h keepassxc-2.6.4-patched/src/cli/Analyze.h +--- keepassxc-2.6.4-orig/src/cli/Analyze.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Analyze.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,35 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_ANALYZE_H +-#define KEEPASSXC_ANALYZE_H +- +-#include "DatabaseCommand.h" +- +-class Analyze : public DatabaseCommand +-{ +-public: +- Analyze(); +- int executeWithDatabase(QSharedPointer db, QSharedPointer parser) override; +- +- static const QCommandLineOption HIBPDatabaseOption; +- +-private: +- void printHibpFinding(const Entry* entry, int count, QTextStream& out); +-}; +- +-#endif // KEEPASSXC_HIBP_H +diff -urNr keepassxc-2.6.4-orig/src/cli/Clip.cpp keepassxc-2.6.4-patched/src/cli/Clip.cpp +--- keepassxc-2.6.4-orig/src/cli/Clip.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Clip.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,139 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include +-#include +-#include +- +-#include "Clip.h" +- +-#include "cli/TextStream.h" +-#include "cli/Utils.h" +-#include "core/Database.h" +-#include "core/Entry.h" +-#include "core/Group.h" +- +-const QCommandLineOption Clip::AttributeOption = QCommandLineOption( +- QStringList() << "a" +- << "attribute", +- QObject::tr("Copy the given attribute to the clipboard. Defaults to \"password\" if not specified."), +- "attr", +- "password"); +- +-const QCommandLineOption Clip::TotpOption = +- QCommandLineOption(QStringList() << "t" +- << "totp", +- QObject::tr("Copy the current TOTP to the clipboard (equivalent to \"-a totp\").")); +- +-Clip::Clip() +-{ +- name = QString("clip"); +- description = QObject::tr("Copy an entry's attribute to the clipboard."); +- options.append(Clip::AttributeOption); +- options.append(Clip::TotpOption); +- positionalArguments.append( +- {QString("entry"), QObject::tr("Path of the entry to clip.", "clip = copy to clipboard"), QString("")}); +- optionalArguments.append( +- {QString("timeout"), QObject::tr("Timeout in seconds before clearing the clipboard."), QString("[timeout]")}); +-} +- +-int Clip::executeWithDatabase(QSharedPointer database, QSharedPointer parser) +-{ +- auto& out = parser->isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT; +- auto& err = Utils::STDERR; +- +- const QStringList args = parser->positionalArguments(); +- const QString& entryPath = args.at(1); +- QString timeout; +- if (args.size() == 3) { +- timeout = args.at(2); +- } +- +- int timeoutSeconds = 0; +- if (!timeout.isEmpty() && timeout.toInt() <= 0) { +- err << QObject::tr("Invalid timeout value %1.").arg(timeout) << endl; +- return EXIT_FAILURE; +- } else if (!timeout.isEmpty()) { +- timeoutSeconds = timeout.toInt(); +- } +- +- Entry* entry = database->rootGroup()->findEntryByPath(entryPath); +- if (!entry) { +- err << QObject::tr("Entry %1 not found.").arg(entryPath) << endl; +- return EXIT_FAILURE; +- } +- +- if (parser->isSet(AttributeOption) && parser->isSet(TotpOption)) { +- err << QObject::tr("ERROR: Please specify one of --attribute or --totp, not both.") << endl; +- return EXIT_FAILURE; +- } +- +- QString selectedAttribute = parser->value(AttributeOption); +- QString value; +- bool found = false; +- if (parser->isSet(TotpOption) || selectedAttribute == "totp") { +- if (!entry->hasTotp()) { +- err << QObject::tr("Entry with path %1 has no TOTP set up.").arg(entryPath) << endl; +- return EXIT_FAILURE; +- } +- +- found = true; +- value = entry->totp(); +- } else { +- QStringList attrs = Utils::findAttributes(*entry->attributes(), selectedAttribute); +- if (attrs.size() > 1) { +- err << QObject::tr("ERROR: attribute %1 is ambiguous, it matches %2.") +- .arg(selectedAttribute, QLocale().createSeparatedList(attrs)) +- << endl; +- return EXIT_FAILURE; +- } else if (attrs.size() == 1) { +- found = true; +- selectedAttribute = attrs[0]; +- value = entry->attributes()->value(selectedAttribute); +- } +- } +- +- if (!found) { +- out << QObject::tr("Attribute \"%1\" not found.").arg(selectedAttribute) << endl; +- return EXIT_FAILURE; +- } +- +- int exitCode = Utils::clipText(value); +- if (exitCode != EXIT_SUCCESS) { +- return exitCode; +- } +- +- out << QObject::tr("Entry's \"%1\" attribute copied to the clipboard!").arg(selectedAttribute) << endl; +- +- if (!timeoutSeconds) { +- return exitCode; +- } +- +- QString lastLine = ""; +- while (timeoutSeconds > 0) { +- out << '\r' << QString(lastLine.size(), ' ') << '\r'; +- lastLine = QObject::tr("Clearing the clipboard in %1 second(s)...", "", timeoutSeconds).arg(timeoutSeconds); +- out << lastLine << flush; +- std::this_thread::sleep_for(std::chrono::milliseconds(1000)); +- --timeoutSeconds; +- } +- Utils::clipText(""); +- out << '\r' << QString(lastLine.size(), ' ') << '\r'; +- out << QObject::tr("Clipboard cleared!") << endl; +- +- return EXIT_SUCCESS; +-} +diff -urNr keepassxc-2.6.4-orig/src/cli/Clip.h keepassxc-2.6.4-patched/src/cli/Clip.h +--- keepassxc-2.6.4-orig/src/cli/Clip.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Clip.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,34 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_CLIP_H +-#define KEEPASSXC_CLIP_H +- +-#include "DatabaseCommand.h" +- +-class Clip : public DatabaseCommand +-{ +-public: +- Clip(); +- +- int executeWithDatabase(QSharedPointer db, QSharedPointer parser) override; +- +- static const QCommandLineOption AttributeOption; +- static const QCommandLineOption TotpOption; +-}; +- +-#endif // KEEPASSXC_CLIP_H +diff -urNr keepassxc-2.6.4-orig/src/cli/Close.cpp keepassxc-2.6.4-patched/src/cli/Close.cpp +--- keepassxc-2.6.4-orig/src/cli/Close.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Close.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,38 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "Close.h" +- +-#include +-#include +- +-#include "DatabaseCommand.h" +-#include "TextStream.h" +-#include "Utils.h" +- +-Close::Close() +-{ +- name = QString("close"); +- description = QObject::tr("Close the currently opened database."); +-} +- +-int Close::execute(const QStringList& arguments) +-{ +- Q_UNUSED(arguments) +- currentDatabase.reset(nullptr); +- return EXIT_SUCCESS; +-} +diff -urNr keepassxc-2.6.4-orig/src/cli/Close.h keepassxc-2.6.4-patched/src/cli/Close.h +--- keepassxc-2.6.4-orig/src/cli/Close.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Close.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,32 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_CLOSE_H +-#define KEEPASSXC_CLOSE_H +- +-#include +- +-#include "Command.h" +- +-class Close : public Command +-{ +-public: +- Close(); +- int execute(const QStringList& arguments) override; +-}; +- +-#endif // KEEPASSXC_CLOSE_H +diff -urNr keepassxc-2.6.4-orig/src/cli/CMakeLists.txt keepassxc-2.6.4-patched/src/cli/CMakeLists.txt +--- keepassxc-2.6.4-orig/src/cli/CMakeLists.txt 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +@@ -1,120 +0,0 @@ +-# Copyright (C) 2019 KeePassXC Team +-# +-# This program is free software: you can redistribute it and/or modify +-# it under the terms of the GNU General Public License as published by +-# the Free Software Foundation, either version 2 or (at your option) +-# version 3 of the License. +-# +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY; without even the implied warranty of +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-# GNU General Public License for more details. +-# +-# You should have received a copy of the GNU General Public License +-# along with this program. If not, see . +- +-set(cli_SOURCES +- Add.cpp +- AddGroup.cpp +- Analyze.cpp +- Clip.cpp +- Close.cpp +- Create.cpp +- Command.cpp +- DatabaseCommand.cpp +- Diceware.cpp +- Edit.cpp +- Estimate.cpp +- Exit.cpp +- Export.cpp +- Generate.cpp +- Help.cpp +- Import.cpp +- Info.cpp +- List.cpp +- Locate.cpp +- Merge.cpp +- Move.cpp +- Open.cpp +- Remove.cpp +- RemoveGroup.cpp +- Show.cpp) +- +-add_library(cli STATIC ${cli_SOURCES}) +-target_link_libraries(cli Qt5::Core Qt5::Widgets) +- +-find_package(Readline) +- +-if (READLINE_FOUND) +- target_compile_definitions(cli PUBLIC USE_READLINE) +- target_link_libraries(cli readline) +-endif() +- +-add_executable(keepassxc-cli keepassxc-cli.cpp) +-target_link_libraries(keepassxc-cli +- ${GPGERROR_LIBRARIES} +- cli +- keepassx_core +- Qt5::Core +- ${GCRYPT_LIBRARIES} +- ${sodium_LIBRARY_RELEASE} +- ${ARGON2_LIBRARIES} +- ${ZLIB_LIBRARIES} +- ${ZXCVBN_LIBRARIES}) +- +-install(TARGETS keepassxc-cli +- BUNDLE DESTINATION . COMPONENT Runtime +- RUNTIME DESTINATION ${CLI_INSTALL_DIR} COMPONENT Runtime) +- +-if(MINGW) +- install(CODE "include(BundleUtilities) +- fixup_bundle(\"\${CMAKE_INSTALL_PREFIX}/keepassxc-cli.exe\" \"\" \"\")" +- COMPONENT Runtime) +-endif() +- +-if(APPLE AND WITH_APP_BUNDLE) +- add_custom_command(TARGET keepassxc-cli +- POST_BUILD +- COMMAND ${CMAKE_INSTALL_NAME_TOOL} +- -change /usr/local/opt/qt/lib/QtCore.framework/Versions/5/QtCore +- "@executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore" +- -change /usr/local/opt/qt/lib/QtGui.framework/Versions/5/QtGui +- "@executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui" +- -change /usr/local/opt/qt/lib/QtMacExtras.framework/Versions/5/QtMacExtras +- "@executable_path/../Frameworks/QtMacExtras.framework/Versions/5/QtMacExtras" +- -change /usr/local/opt/qt/lib/QtConcurrent.framework/Versions/5/QtConcurrent +- "@executable_path/../Frameworks/QtConcurrent.framework/Versions/5/QtConcurrent" +- -change /usr/local/opt/qt/lib/QtCore.framework/Versions/5/QtCore +- "@executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore" +- -change /usr/local/opt/qt/lib/QtNetwork.framework/Versions/5/QtNetwork +- "@executable_path/../Frameworks/QtNetwork.framework/Versions/5/QtNetwork" +- -change /usr/local/opt/qt/lib/QtWidgets.framework/Versions/5/QtWidgets +- "@executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets" +- -change /usr/local/opt/qt/lib/QtSvg.framework/Versions/5/QtSvg +- "@executable_path/../Frameworks/QtSvg.framework/Versions/5/QtSvg" +- -change /usr/local/opt/libgcrypt/lib/libgcrypt.20.dylib +- "@executable_path/../Frameworks/libgcrypt.20.dylib" +- -change /usr/local/opt/argon2/lib/libargon2.1.dylib +- "@executable_path/../Frameworks/libargon2.1.dylib" +- -change /usr/local/opt/libgpg-error/lib/libgpg-error.0.dylib +- "@executable_path/../Frameworks/libgpg-error.0.dylib" +- -change /usr/local/opt/libsodium/lib/libsodium.23.dylib +- "@executable_path/../Frameworks/libsodium.23.dylib" +- -change /usr/local/opt/qrencode/lib/libqrencode.4.dylib +- "@executable_path/../Frameworks/libqrencode.4.dylib" +- -change /usr/local/opt/libyubikey/lib/libyubikey.0.dylib +- "@executable_path/../Frameworks/libyubikey.0.dylib" +- -change /usr/local/opt/ykpers/lib/libykpers-1.1.dylib +- "@executable_path/../Frameworks/libykpers-1.1.dylib" +- -change /usr/local/opt/quazip/lib/libquazip.1.dylib +- "@executable_path/../Frameworks/libquazip.1.dylib" +- keepassxc-cli +- COMMENT "Changing linking of keepassxc-cli") +- +- # Copy app to staging directory for pre-install testing +- set(CLI_APP_DIR "${CMAKE_BINARY_DIR}/src/${CLI_INSTALL_DIR}") +- add_custom_command(TARGET keepassxc-cli +- POST_BUILD +- COMMAND ${CMAKE_COMMAND} -E copy keepassxc-cli ${CLI_APP_DIR}/keepassxc-cli +- COMMENT "Copying keepassxc-cli inside the application") +-endif() +diff -urNr keepassxc-2.6.4-orig/src/cli/Command.cpp keepassxc-2.6.4-patched/src/cli/Command.cpp +--- keepassxc-2.6.4-orig/src/cli/Command.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Command.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,208 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include +-#include +-#include +- +-#include +-#include +- +-#include "Command.h" +- +-#include "Add.h" +-#include "AddGroup.h" +-#include "Analyze.h" +-#include "Clip.h" +-#include "Close.h" +-#include "Create.h" +-#include "Diceware.h" +-#include "Edit.h" +-#include "Estimate.h" +-#include "Exit.h" +-#include "Export.h" +-#include "Generate.h" +-#include "Help.h" +-#include "Import.h" +-#include "Info.h" +-#include "List.h" +-#include "Locate.h" +-#include "Merge.h" +-#include "Move.h" +-#include "Open.h" +-#include "Remove.h" +-#include "RemoveGroup.h" +-#include "Show.h" +-#include "TextStream.h" +-#include "Utils.h" +- +-const QCommandLineOption Command::HelpOption = QCommandLineOption(QStringList() +-#ifdef Q_OS_WIN +- << QStringLiteral("?") +-#endif +- << QStringLiteral("h") << QStringLiteral("help"), +- QObject::tr("Display this help.")); +- +-const QCommandLineOption Command::QuietOption = +- QCommandLineOption(QStringList() << "q" +- << "quiet", +- QObject::tr("Silence password prompt and other secondary outputs.")); +- +-const QCommandLineOption Command::KeyFileOption = QCommandLineOption(QStringList() << "k" +- << "key-file", +- QObject::tr("Key file of the database."), +- QObject::tr("path")); +- +-const QCommandLineOption Command::NoPasswordOption = +- QCommandLineOption(QStringList() << "no-password", QObject::tr("Deactivate password key for the database.")); +- +-const QCommandLineOption Command::YubiKeyOption = +- QCommandLineOption(QStringList() << "y" +- << "yubikey", +- QObject::tr("Yubikey slot and optional serial used to access the database (e.g., 1:7370001)."), +- QObject::tr("slot[:serial]")); +- +-namespace +-{ +- +- QSharedPointer buildParser(Command* command) +- { +- auto parser = QSharedPointer(new QCommandLineParser()); +- parser->setApplicationDescription(command->description); +- for (const CommandLineArgument& positionalArgument : command->positionalArguments) { +- parser->addPositionalArgument( +- positionalArgument.name, positionalArgument.description, positionalArgument.syntax); +- } +- for (const CommandLineArgument& optionalArgument : command->optionalArguments) { +- parser->addPositionalArgument(optionalArgument.name, optionalArgument.description, optionalArgument.syntax); +- } +- for (const QCommandLineOption& option : command->options) { +- parser->addOption(option); +- } +- parser->addOption(Command::HelpOption); +- return parser; +- } +- +-} // namespace +- +-Command::Command() +- : currentDatabase(nullptr) +-{ +- options.append(Command::QuietOption); +-} +- +-Command::~Command() +-{ +-} +- +-QString Command::getDescriptionLine() +-{ +- QString response = name; +- QString space(" "); +- QString spaces = space.repeated(15 - name.length()); +- response = response.append(spaces); +- response = response.append(description); +- response = response.append("\n"); +- return response; +-} +- +-QString Command::getHelpText() +-{ +- auto help = buildParser(this)->helpText(); +- // Fix spacing of options parameter +- help.replace(QStringLiteral("[options]"), name + QStringLiteral(" [options]")); +- // Remove application directory from command line example +- auto appname = QFileInfo(QCoreApplication::applicationFilePath()).fileName(); +- auto regex = QRegularExpression(QStringLiteral(" .*%1").arg(QRegularExpression::escape(appname))); +- help.replace(regex, appname.prepend(" ")); +- +- return help; +-} +- +-QSharedPointer Command::getCommandLineParser(const QStringList& arguments) +-{ +- auto& err = Utils::STDERR; +- QSharedPointer parser = buildParser(this); +- +- if (!parser->parse(arguments)) { +- err << parser->errorText() << "\n\n"; +- err << getHelpText(); +- return {}; +- } +- if (parser->positionalArguments().size() < positionalArguments.size()) { +- err << getHelpText(); +- return {}; +- } +- if (parser->positionalArguments().size() > (positionalArguments.size() + optionalArguments.size())) { +- err << getHelpText(); +- return {}; +- } +- if (parser->isSet(HelpOption)) { +- err << getHelpText(); +- return {}; +- } +- return parser; +-} +- +-namespace Commands +-{ +- QMap> s_commands; +- +- void setupCommands(bool interactive) +- { +- s_commands.clear(); +- +- s_commands.insert(QStringLiteral("add"), QSharedPointer(new Add())); +- s_commands.insert(QStringLiteral("analyze"), QSharedPointer(new Analyze())); +- s_commands.insert(QStringLiteral("clip"), QSharedPointer(new Clip())); +- s_commands.insert(QStringLiteral("close"), QSharedPointer(new Close())); +- s_commands.insert(QStringLiteral("db-create"), QSharedPointer(new Create())); +- s_commands.insert(QStringLiteral("db-info"), QSharedPointer(new Info())); +- s_commands.insert(QStringLiteral("diceware"), QSharedPointer(new Diceware())); +- s_commands.insert(QStringLiteral("edit"), QSharedPointer(new Edit())); +- s_commands.insert(QStringLiteral("estimate"), QSharedPointer(new Estimate())); +- s_commands.insert(QStringLiteral("generate"), QSharedPointer(new Generate())); +- s_commands.insert(QStringLiteral("help"), QSharedPointer(new Help())); +- s_commands.insert(QStringLiteral("locate"), QSharedPointer(new Locate())); +- s_commands.insert(QStringLiteral("ls"), QSharedPointer(new List())); +- s_commands.insert(QStringLiteral("merge"), QSharedPointer(new Merge())); +- s_commands.insert(QStringLiteral("mkdir"), QSharedPointer(new AddGroup())); +- s_commands.insert(QStringLiteral("mv"), QSharedPointer(new Move())); +- s_commands.insert(QStringLiteral("open"), QSharedPointer(new Open())); +- s_commands.insert(QStringLiteral("rm"), QSharedPointer(new Remove())); +- s_commands.insert(QStringLiteral("rmdir"), QSharedPointer(new RemoveGroup())); +- s_commands.insert(QStringLiteral("show"), QSharedPointer(new Show())); +- +- if (interactive) { +- s_commands.insert(QStringLiteral("exit"), QSharedPointer(new Exit("exit"))); +- s_commands.insert(QStringLiteral("quit"), QSharedPointer(new Exit("quit"))); +- } else { +- s_commands.insert(QStringLiteral("export"), QSharedPointer(new Export())); +- s_commands.insert(QStringLiteral("import"), QSharedPointer(new Import())); +- } +- } +- +- QList> getCommands() +- { +- return s_commands.values(); +- } +- +- QSharedPointer getCommand(const QString& commandName) +- { +- return s_commands.value(commandName); +- } +-} // namespace Commands +diff -urNr keepassxc-2.6.4-orig/src/cli/Command.h keepassxc-2.6.4-patched/src/cli/Command.h +--- keepassxc-2.6.4-orig/src/cli/Command.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Command.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,70 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_COMMAND_H +-#define KEEPASSXC_COMMAND_H +- +-#include +-#include +-#include +-#include +-#include +-#include +- +-#include "core/Database.h" +- +-// At the moment, there's no QT class for the positional arguments +-// like there is for the options (QCommandLineOption). +-struct CommandLineArgument +-{ +- QString name; +- QString description; +- QString syntax; +-}; +- +-class Command +-{ +-public: +- Command(); +- virtual ~Command(); +- virtual int execute(const QStringList& arguments) = 0; +- QString name; +- QString description; +- QSharedPointer currentDatabase; +- QList positionalArguments; +- QList optionalArguments; +- QList options; +- +- QString getDescriptionLine(); +- QSharedPointer getCommandLineParser(const QStringList& arguments); +- QString getHelpText(); +- +- static const QCommandLineOption HelpOption; +- static const QCommandLineOption QuietOption; +- static const QCommandLineOption KeyFileOption; +- static const QCommandLineOption NoPasswordOption; +- static const QCommandLineOption YubiKeyOption; +-}; +- +-namespace Commands +-{ +- void setupCommands(bool interactive); +- QList> getCommands(); +- QSharedPointer getCommand(const QString& commandName); +-} // namespace Commands +- +-#endif // KEEPASSXC_COMMAND_H +diff -urNr keepassxc-2.6.4-orig/src/cli/Create.cpp keepassxc-2.6.4-patched/src/cli/Create.cpp +--- keepassxc-2.6.4-orig/src/cli/Create.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Create.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,200 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include +-#include +- +-#include +-#include +-#include +- +-#include "Create.h" +-#include "Utils.h" +- +-#include "core/Database.h" +- +-#include "keys/CompositeKey.h" +-#include "keys/Key.h" +- +-const QCommandLineOption Create::DecryptionTimeOption = +- QCommandLineOption(QStringList() << "t" +- << "decryption-time", +- QObject::tr("Target decryption time in MS for the database."), +- QObject::tr("time")); +- +-const QCommandLineOption Create::SetKeyFileOption = +- QCommandLineOption(QStringList() << "k" +- << "set-key-file", +- QObject::tr("Set the key file for the database."), +- QObject::tr("path")); +- +-const QCommandLineOption Create::SetPasswordOption = +- QCommandLineOption(QStringList() << "p" +- << "set-password", +- QObject::tr("Set a password for the database.")); +- +-Create::Create() +-{ +- name = QString("db-create"); +- description = QObject::tr("Create a new database."); +- positionalArguments.append({QString("database"), QObject::tr("Path of the database."), QString("")}); +- options.append(Create::SetKeyFileOption); +- options.append(Create::SetPasswordOption); +- options.append(Create::DecryptionTimeOption); +-} +- +-/** +- * Create a database file using the command line. A key file and/or +- * password can be specified to encrypt the password. If none is +- * specified the function will fail. +- * +- * If a key file is specified but it can't be loaded, the function will +- * fail. +- * +- * If the database is being saved in a non existant directory, the +- * function will fail. +- * +- * @return EXIT_SUCCESS on success, or EXIT_FAILURE on failure +- */ +-int Create::execute(const QStringList& arguments) +-{ +- QSharedPointer parser = getCommandLineParser(arguments); +- if (parser.isNull()) { +- return EXIT_FAILURE; +- } +- +- auto& out = parser->isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT; +- auto& err = Utils::STDERR; +- +- const QStringList args = parser->positionalArguments(); +- +- const QString& databaseFilename = args.at(0); +- if (QFileInfo::exists(databaseFilename)) { +- err << QObject::tr("File %1 already exists.").arg(databaseFilename) << endl; +- return EXIT_FAILURE; +- } +- +- // Validate the decryption time before asking for a password. +- QString decryptionTimeValue = parser->value(Create::DecryptionTimeOption); +- int decryptionTime = 0; +- if (decryptionTimeValue.length() != 0) { +- decryptionTime = decryptionTimeValue.toInt(); +- if (decryptionTime <= 0) { +- err << QObject::tr("Invalid decryption time %1.").arg(decryptionTimeValue) << endl; +- return EXIT_FAILURE; +- } +- if (decryptionTime < Kdf::MIN_ENCRYPTION_TIME || decryptionTime > Kdf::MAX_ENCRYPTION_TIME) { +- err << QObject::tr("Target decryption time must be between %1 and %2.") +- .arg(QString::number(Kdf::MIN_ENCRYPTION_TIME), QString::number(Kdf::MAX_ENCRYPTION_TIME)) +- << endl; +- return EXIT_FAILURE; +- } +- } +- +- auto key = QSharedPointer::create(); +- +- if (parser->isSet(Create::SetPasswordOption)) { +- auto passwordKey = Utils::getConfirmedPassword(); +- if (passwordKey.isNull()) { +- err << QObject::tr("Failed to set database password.") << endl; +- return EXIT_FAILURE; +- } +- key->addKey(passwordKey); +- } +- +- if (parser->isSet(Create::SetKeyFileOption)) { +- QSharedPointer fileKey; +- +- if (!loadFileKey(parser->value(Create::SetKeyFileOption), fileKey)) { +- err << QObject::tr("Loading the key file failed") << endl; +- return EXIT_FAILURE; +- } +- +- if (!fileKey.isNull()) { +- key->addKey(fileKey); +- } +- } +- +- if (key->isEmpty()) { +- err << QObject::tr("No key is set. Aborting database creation.") << endl; +- return EXIT_FAILURE; +- } +- +- QSharedPointer db(new Database); +- db->setKey(key); +- +- if (decryptionTime != 0) { +- auto kdf = db->kdf(); +- Q_ASSERT(kdf); +- +- out << QObject::tr("Benchmarking key derivation function for %1ms delay.").arg(decryptionTimeValue) << endl; +- int rounds = kdf->benchmark(decryptionTime); +- out << QObject::tr("Setting %1 rounds for key derivation function.").arg(QString::number(rounds)) << endl; +- kdf->setRounds(rounds); +- +- bool ok = db->changeKdf(kdf); +- +- if (!ok) { +- err << QObject::tr("error while setting database key derivation settings.") << endl; +- return EXIT_FAILURE; +- } +- } +- +- QString errorMessage; +- if (!db->saveAs(databaseFilename, &errorMessage, true, false)) { +- err << QObject::tr("Failed to save the database: %1.").arg(errorMessage) << endl; +- return EXIT_FAILURE; +- } +- +- out << QObject::tr("Successfully created new database.") << endl; +- currentDatabase = db; +- return EXIT_SUCCESS; +-} +- +-/** +- * Load a key file from disk. When the path specified does not exist a +- * new file will be generated. No folders will be generated so the parent +- * folder of the specified file nees to exist +- * +- * If the key file cannot be loaded or created the function will fail. +- * +- * @param path Path to the key file to be loaded +- * @param fileKey Resulting fileKey +- * @return true if the key file was loaded succesfully +- */ +-bool Create::loadFileKey(const QString& path, QSharedPointer& fileKey) +-{ +- auto& err = Utils::STDERR; +- QString error; +- fileKey = QSharedPointer(new FileKey()); +- +- if (!QFileInfo::exists(path)) { +- fileKey->create(path, &error); +- +- if (!error.isEmpty()) { +- err << QObject::tr("Creating KeyFile %1 failed: %2").arg(path, error) << endl; +- return false; +- } +- } +- +- if (!fileKey->load(path, &error)) { +- err << QObject::tr("Loading KeyFile %1 failed: %2").arg(path, error) << endl; +- return false; +- } +- +- return true; +-} +diff -urNr keepassxc-2.6.4-orig/src/cli/Create.h keepassxc-2.6.4-patched/src/cli/Create.h +--- keepassxc-2.6.4-orig/src/cli/Create.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Create.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,39 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_CREATE_H +-#define KEEPASSXC_CREATE_H +- +-#include "Command.h" +- +-#include "keys/FileKey.h" +- +-class Create : public Command +-{ +-public: +- Create(); +- int execute(const QStringList& arguments) override; +- +- static const QCommandLineOption SetKeyFileOption; +- static const QCommandLineOption SetPasswordOption; +- static const QCommandLineOption DecryptionTimeOption; +- +-private: +- bool loadFileKey(const QString& path, QSharedPointer& fileKey); +-}; +- +-#endif // KEEPASSXC_CREATE_H +diff -urNr keepassxc-2.6.4-orig/src/cli/DatabaseCommand.cpp keepassxc-2.6.4-patched/src/cli/DatabaseCommand.cpp +--- keepassxc-2.6.4-orig/src/cli/DatabaseCommand.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/DatabaseCommand.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,67 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "DatabaseCommand.h" +- +-#include "Utils.h" +- +-DatabaseCommand::DatabaseCommand() +-{ +- positionalArguments.append({QString("database"), QObject::tr("Path of the database."), QString("")}); +- options.append(Command::KeyFileOption); +- options.append(Command::NoPasswordOption); +-#ifdef WITH_XC_YUBIKEY +- options.append(Command::YubiKeyOption); +-#endif +-} +- +-int DatabaseCommand::execute(const QStringList& arguments) +-{ +- QStringList amendedArgs(arguments); +- if (currentDatabase) { +- amendedArgs.insert(1, currentDatabase->filePath()); +- } +- QSharedPointer parser = getCommandLineParser(amendedArgs); +- +- if (parser.isNull()) { +- return EXIT_FAILURE; +- } +- +- QStringList args = parser->positionalArguments(); +- auto db = currentDatabase; +- if (!db) { +- // It would be nice to update currentDatabase here, but the CLI tests frequently +- // re-use Command objects to exercise non-interactive behavior. Updating the current +- // database confuses these tests. Because of this, we leave it up to the interactive +- // mode implementation in the main command loop to update currentDatabase +- // (see keepassxc-cli.cpp). +- db = Utils::unlockDatabase(args.at(0), +- !parser->isSet(Command::NoPasswordOption), +- parser->value(Command::KeyFileOption), +-#ifdef WITH_XC_YUBIKEY +- parser->value(Command::YubiKeyOption), +-#else +- "", +-#endif +- parser->isSet(Command::QuietOption)); +- if (!db) { +- return EXIT_FAILURE; +- } +- } +- +- return executeWithDatabase(db, parser); +-} +diff -urNr keepassxc-2.6.4-orig/src/cli/DatabaseCommand.h keepassxc-2.6.4-patched/src/cli/DatabaseCommand.h +--- keepassxc-2.6.4-orig/src/cli/DatabaseCommand.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/DatabaseCommand.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,35 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_DATABASECOMMAND_H +-#define KEEPASSXC_DATABASECOMMAND_H +- +-#include +- +-#include "Command.h" +-#include "Utils.h" +-#include "core/Database.h" +- +-class DatabaseCommand : public Command +-{ +-public: +- DatabaseCommand(); +- int execute(const QStringList& arguments) override; +- virtual int executeWithDatabase(QSharedPointer db, QSharedPointer parser) = 0; +-}; +- +-#endif // KEEPASSXC_DATABASECOMMAND_H +diff -urNr keepassxc-2.6.4-orig/src/cli/Diceware.cpp keepassxc-2.6.4-patched/src/cli/Diceware.cpp +--- keepassxc-2.6.4-orig/src/cli/Diceware.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Diceware.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,85 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include +-#include +- +-#include "Diceware.h" +- +-#include "Utils.h" +-#include "cli/TextStream.h" +-#include "core/PassphraseGenerator.h" +- +-const QCommandLineOption Diceware::WordCountOption = +- QCommandLineOption(QStringList() << "W" +- << "words", +- QObject::tr("Word count for the diceware passphrase."), +- QObject::tr("count", "CLI parameter")); +- +-const QCommandLineOption Diceware::WordListOption = +- QCommandLineOption(QStringList() << "w" +- << "word-list", +- QObject::tr("Wordlist for the diceware generator.\n[Default: EFF English]"), +- QObject::tr("path")); +- +-Diceware::Diceware() +-{ +- name = QString("diceware"); +- description = QObject::tr("Generate a new random diceware passphrase."); +- options.append(Diceware::WordCountOption); +- options.append(Diceware::WordListOption); +-} +- +-int Diceware::execute(const QStringList& arguments) +-{ +- QSharedPointer parser = getCommandLineParser(arguments); +- if (parser.isNull()) { +- return EXIT_FAILURE; +- } +- +- auto& out = Utils::STDOUT; +- auto& err = Utils::STDERR; +- +- PassphraseGenerator dicewareGenerator; +- +- QString wordCount = parser->value(Diceware::WordCountOption); +- if (wordCount.isEmpty()) { +- dicewareGenerator.setWordCount(PassphraseGenerator::DefaultWordCount); +- } else if (wordCount.toInt() <= 0) { +- err << QObject::tr("Invalid word count %1").arg(wordCount) << endl; +- return EXIT_FAILURE; +- } else { +- dicewareGenerator.setWordCount(wordCount.toInt()); +- } +- +- QString wordListFile = parser->value(Diceware::WordListOption); +- if (!wordListFile.isEmpty()) { +- dicewareGenerator.setWordList(wordListFile); +- } +- +- if (!dicewareGenerator.isValid()) { +- // We already validated the word count input so if the generator is invalid, it +- // must be because the word list is too small. +- err << QObject::tr("The word list is too small (< 1000 items)") << endl; +- return EXIT_FAILURE; +- } +- +- QString password = dicewareGenerator.generatePassphrase(); +- out << password << endl; +- +- return EXIT_SUCCESS; +-} +diff -urNr keepassxc-2.6.4-orig/src/cli/Diceware.h keepassxc-2.6.4-patched/src/cli/Diceware.h +--- keepassxc-2.6.4-orig/src/cli/Diceware.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Diceware.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,34 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_DICEWARE_H +-#define KEEPASSXC_DICEWARE_H +- +-#include "Command.h" +- +-class Diceware : public Command +-{ +-public: +- Diceware(); +- +- int execute(const QStringList& arguments) override; +- +- static const QCommandLineOption WordCountOption; +- static const QCommandLineOption WordListOption; +-}; +- +-#endif // KEEPASSXC_DICEWARE_H +diff -urNr keepassxc-2.6.4-orig/src/cli/Edit.cpp keepassxc-2.6.4-patched/src/cli/Edit.cpp +--- keepassxc-2.6.4-orig/src/cli/Edit.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Edit.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,134 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include +-#include +- +-#include "Edit.h" +- +-#include "cli/Add.h" +-#include "cli/Generate.h" +-#include "cli/TextStream.h" +-#include "cli/Utils.h" +-#include "core/Database.h" +-#include "core/Entry.h" +-#include "core/Group.h" +-#include "core/PasswordGenerator.h" +- +-const QCommandLineOption Edit::TitleOption = QCommandLineOption(QStringList() << "t" +- << "title", +- QObject::tr("Title for the entry."), +- QObject::tr("title")); +- +-Edit::Edit() +-{ +- name = QString("edit"); +- description = QObject::tr("Edit an entry."); +- // Using some of the options from the Add command since they are the same. +- options.append(Add::UsernameOption); +- options.append(Add::UrlOption); +- options.append(Add::PasswordPromptOption); +- options.append(Edit::TitleOption); +- positionalArguments.append({QString("entry"), QObject::tr("Path of the entry to edit."), QString("")}); +- +- // Password generation options. +- options.append(Add::GenerateOption); +- options.append(Generate::PasswordLengthOption); +- options.append(Generate::LowerCaseOption); +- options.append(Generate::UpperCaseOption); +- options.append(Generate::NumbersOption); +- options.append(Generate::SpecialCharsOption); +- options.append(Generate::ExtendedAsciiOption); +- options.append(Generate::ExcludeCharsOption); +- options.append(Generate::ExcludeSimilarCharsOption); +- options.append(Generate::IncludeEveryGroupOption); +-} +- +-int Edit::executeWithDatabase(QSharedPointer database, QSharedPointer parser) +-{ +- auto& out = parser->isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT; +- auto& err = Utils::STDERR; +- +- const QStringList args = parser->positionalArguments(); +- const QString& entryPath = args.at(1); +- +- // Cannot use those 2 options at the same time! +- if (parser->isSet(Add::GenerateOption) && parser->isSet(Add::PasswordPromptOption)) { +- err << QObject::tr("Cannot generate a password and prompt at the same time!") << endl; +- return EXIT_FAILURE; +- } +- +- // Validating the password generator here, before we actually start +- // the update. +- QSharedPointer passwordGenerator; +- bool generate = parser->isSet(Add::GenerateOption); +- if (generate) { +- passwordGenerator = Generate::createGenerator(parser); +- if (passwordGenerator.isNull()) { +- return EXIT_FAILURE; +- } +- } +- +- Entry* entry = database->rootGroup()->findEntryByPath(entryPath); +- if (!entry) { +- err << QObject::tr("Could not find entry with path %1.").arg(entryPath) << endl; +- return EXIT_FAILURE; +- } +- +- QString username = parser->value(Add::UsernameOption); +- QString url = parser->value(Add::UrlOption); +- QString title = parser->value(Edit::TitleOption); +- bool prompt = parser->isSet(Add::PasswordPromptOption); +- if (username.isEmpty() && url.isEmpty() && title.isEmpty() && !prompt && !generate) { +- err << QObject::tr("Not changing any field for entry %1.").arg(entryPath) << endl; +- return EXIT_FAILURE; +- } +- +- entry->beginUpdate(); +- +- if (!title.isEmpty()) { +- entry->setTitle(title); +- } +- +- if (!username.isEmpty()) { +- entry->setUsername(username); +- } +- +- if (!url.isEmpty()) { +- entry->setUrl(url); +- } +- +- if (prompt) { +- out << QObject::tr("Enter new password for entry: ") << flush; +- QString password = Utils::getPassword(parser->isSet(Command::QuietOption)); +- entry->setPassword(password); +- } else if (generate) { +- QString password = passwordGenerator->generatePassword(); +- entry->setPassword(password); +- } +- +- entry->endUpdate(); +- +- QString errorMessage; +- if (!database->save(&errorMessage, true, false)) { +- err << QObject::tr("Writing the database failed: %1").arg(errorMessage) << endl; +- return EXIT_FAILURE; +- } +- +- out << QObject::tr("Successfully edited entry %1.").arg(entry->title()) << endl; +- return EXIT_SUCCESS; +-} +diff -urNr keepassxc-2.6.4-orig/src/cli/Edit.h keepassxc-2.6.4-patched/src/cli/Edit.h +--- keepassxc-2.6.4-orig/src/cli/Edit.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Edit.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,32 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_EDIT_H +-#define KEEPASSXC_EDIT_H +- +-#include "DatabaseCommand.h" +- +-class Edit : public DatabaseCommand +-{ +-public: +- Edit(); +- int executeWithDatabase(QSharedPointer db, QSharedPointer parser) override; +- +- static const QCommandLineOption TitleOption; +-}; +- +-#endif // KEEPASSXC_EDIT_H +diff -urNr keepassxc-2.6.4-orig/src/cli/Estimate.cpp keepassxc-2.6.4-patched/src/cli/Estimate.cpp +--- keepassxc-2.6.4-orig/src/cli/Estimate.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Estimate.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,178 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "Estimate.h" +-#include "cli/Utils.h" +- +-#include "cli/TextStream.h" +-#include "core/PasswordHealth.h" +-#include +-#include +-#include +-#include +- +-/* For pre-compiled headers under windows */ +-#ifdef _WIN32 +-#ifndef __MINGW32__ +-#include "stdafx.h" +-#endif +-#endif +- +-const QCommandLineOption Estimate::AdvancedOption = +- QCommandLineOption(QStringList() << "a" +- << "advanced", +- QObject::tr("Perform advanced analysis on the password.")); +- +-Estimate::Estimate() +-{ +- name = QString("estimate"); +- optionalArguments.append( +- {QString("password"), QObject::tr("Password for which to estimate the entropy."), QString("[password]")}); +- options.append(Estimate::AdvancedOption); +- description = QObject::tr("Estimate the entropy of a password."); +-} +- +-static void estimate(const char* pwd, bool advanced) +-{ +- auto& out = Utils::STDOUT; +- +- int len = static_cast(strlen(pwd)); +- if (!advanced) { +- const auto e = PasswordHealth(pwd).entropy(); +- // clang-format off +- out << QObject::tr("Length %1").arg(len, 0) << '\t' +- << QObject::tr("Entropy %1").arg(e, 0, 'f', 3) << '\t' +- << QObject::tr("Log10 %1").arg(e * 0.301029996, 0, 'f', 3) << endl; +- // clang-format on +- } else { +- int ChkLen = 0; +- ZxcMatch_t *info, *p; +- double m = 0.0; +- const auto e = ZxcvbnMatch(pwd, nullptr, &info); +- for (p = info; p; p = p->Next) { +- m += p->Entrpy; +- } +- m = e - m; +- // clang-format off +- out << QObject::tr("Length %1").arg(len) << '\t' +- << QObject::tr("Entropy %1").arg(e, 0, 'f', 3) << '\t' +- << QObject::tr("Log10 %1").arg(e * 0.301029996, 0, 'f', 3) << "\n " +- << QObject::tr("Multi-word extra bits %1").arg(m, 0, 'f', 1) << endl; +- // clang-format on +- p = info; +- ChkLen = 0; +- while (p) { +- int n; +- switch (static_cast(p->Type)) { +- case BRUTE_MATCH: +- out << " " << QObject::tr("Type: Bruteforce") << " "; +- break; +- case DICTIONARY_MATCH: +- out << " " << QObject::tr("Type: Dictionary") << " "; +- break; +- case DICT_LEET_MATCH: +- out << " " << QObject::tr("Type: Dict+Leet") << " "; +- break; +- case USER_MATCH: +- out << " " << QObject::tr("Type: User Words") << " "; +- break; +- case USER_LEET_MATCH: +- out << " " << QObject::tr("Type: User+Leet") << " "; +- break; +- case REPEATS_MATCH: +- out << " " << QObject::tr("Type: Repeated") << " "; +- break; +- case SEQUENCE_MATCH: +- out << " " << QObject::tr("Type: Sequence") << " "; +- break; +- case SPATIAL_MATCH: +- out << " " << QObject::tr("Type: Spatial") << " "; +- break; +- case DATE_MATCH: +- out << " " << QObject::tr("Type: Date") << " "; +- break; +- case BRUTE_MATCH + MULTIPLE_MATCH: +- out << " " << QObject::tr("Type: Bruteforce(Rep)") << " "; +- break; +- case DICTIONARY_MATCH + MULTIPLE_MATCH: +- out << " " << QObject::tr("Type: Dictionary(Rep)") << " "; +- break; +- case DICT_LEET_MATCH + MULTIPLE_MATCH: +- out << " " << QObject::tr("Type: Dict+Leet(Rep)") << " "; +- break; +- case USER_MATCH + MULTIPLE_MATCH: +- out << " " << QObject::tr("Type: User Words(Rep)") << " "; +- break; +- case USER_LEET_MATCH + MULTIPLE_MATCH: +- out << " " << QObject::tr("Type: User+Leet(Rep)") << " "; +- break; +- case REPEATS_MATCH + MULTIPLE_MATCH: +- out << " " << QObject::tr("Type: Repeated(Rep)") << " "; +- break; +- case SEQUENCE_MATCH + MULTIPLE_MATCH: +- out << " " << QObject::tr("Type: Sequence(Rep)") << " "; +- break; +- case SPATIAL_MATCH + MULTIPLE_MATCH: +- out << " " << QObject::tr("Type: Spatial(Rep)") << " "; +- break; +- case DATE_MATCH + MULTIPLE_MATCH: +- out << " " << QObject::tr("Type: Date(Rep)") << " "; +- break; +- +- default: +- out << " " << QObject::tr("Type: Unknown%1").arg(p->Type) << " "; +- break; +- } +- ChkLen += p->Length; +- // clang-format off +- out << QObject::tr("Length %1").arg(p->Length) << '\t' +- << QObject::tr("Entropy %1 (%2)").arg(p->Entrpy, 6, 'f', 3).arg(p->Entrpy * 0.301029996, 0, 'f', 2) << '\t'; +- // clang-format on +- for (n = 0; n < p->Length; ++n, ++pwd) { +- out << *pwd; +- } +- out << endl; +- p = p->Next; +- } +- ZxcvbnFreeInfo(info); +- if (ChkLen != len) { +- out << QObject::tr("*** Password length (%1) != sum of length of parts (%2) ***").arg(len).arg(ChkLen) +- << endl; +- } +- } +-} +- +-int Estimate::execute(const QStringList& arguments) +-{ +- QSharedPointer parser = getCommandLineParser(arguments); +- if (parser.isNull()) { +- return EXIT_FAILURE; +- } +- +- auto& in = Utils::STDIN; +- const QStringList args = parser->positionalArguments(); +- +- QString password; +- if (args.size() == 1) { +- password = args.at(0); +- } else { +- password = in.readLine(); +- } +- +- estimate(password.toLatin1(), parser->isSet(Estimate::AdvancedOption)); +- return EXIT_SUCCESS; +-} +diff -urNr keepassxc-2.6.4-orig/src/cli/Estimate.h keepassxc-2.6.4-patched/src/cli/Estimate.h +--- keepassxc-2.6.4-orig/src/cli/Estimate.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Estimate.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,32 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_ESTIMATE_H +-#define KEEPASSXC_ESTIMATE_H +- +-#include "Command.h" +- +-class Estimate : public Command +-{ +-public: +- Estimate(); +- int execute(const QStringList& arguments) override; +- +- static const QCommandLineOption AdvancedOption; +-}; +- +-#endif // KEEPASSXC_ESTIMATE_H +diff -urNr keepassxc-2.6.4-orig/src/cli/Exit.cpp keepassxc-2.6.4-patched/src/cli/Exit.cpp +--- keepassxc-2.6.4-orig/src/cli/Exit.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Exit.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,35 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "Exit.h" +- +-#include +-#include +-#include +- +-Exit::Exit(const QString& name) +-{ +- this->name = name; +- description = QObject::tr("Exit interactive mode."); +-} +- +-int Exit::execute(const QStringList& arguments) +-{ +- Q_UNUSED(arguments) +- // A placeholder only, behavior is implemented in keepassxc-cli.cpp. +- return EXIT_SUCCESS; +-} +diff -urNr keepassxc-2.6.4-orig/src/cli/Exit.h keepassxc-2.6.4-patched/src/cli/Exit.h +--- keepassxc-2.6.4-orig/src/cli/Exit.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Exit.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,33 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_EXIT_H +-#define KEEPASSXC_EXIT_H +- +-#include +-#include +- +-#include "Command.h" +- +-class Exit : public Command +-{ +-public: +- Exit(const QString& name); +- int execute(const QStringList& arguments) override; +-}; +- +-#endif // KEEPASSXC_EXIT_H +diff -urNr keepassxc-2.6.4-orig/src/cli/Export.cpp keepassxc-2.6.4-patched/src/cli/Export.cpp +--- keepassxc-2.6.4-orig/src/cli/Export.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Export.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,64 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include +-#include +- +-#include "Export.h" +- +-#include "cli/TextStream.h" +-#include "cli/Utils.h" +-#include "core/Database.h" +-#include "format/CsvExporter.h" +- +-const QCommandLineOption Export::FormatOption = QCommandLineOption( +- QStringList() << "f" +- << "format", +- QObject::tr("Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'."), +- QStringLiteral("xml|csv")); +- +-Export::Export() +-{ +- name = QStringLiteral("export"); +- options.append(Export::FormatOption); +- description = QObject::tr("Exports the content of a database to standard output in the specified format."); +-} +- +-int Export::executeWithDatabase(QSharedPointer database, QSharedPointer parser) +-{ +- TextStream out(Utils::STDOUT.device()); +- auto& err = Utils::STDERR; +- +- QString format = parser->value(Export::FormatOption); +- if (format.isEmpty() || format.startsWith(QStringLiteral("xml"), Qt::CaseInsensitive)) { +- QByteArray xmlData; +- QString errorMessage; +- if (!database->extract(xmlData, &errorMessage)) { +- err << QObject::tr("Unable to export database to XML: %1").arg(errorMessage) << endl; +- return EXIT_FAILURE; +- } +- out.write(xmlData.constData()); +- } else if (format.startsWith(QStringLiteral("csv"), Qt::CaseInsensitive)) { +- CsvExporter csvExporter; +- out << csvExporter.exportDatabase(database); +- } else { +- err << QObject::tr("Unsupported format %1").arg(format) << endl; +- return EXIT_FAILURE; +- } +- +- return EXIT_SUCCESS; +-} +diff -urNr keepassxc-2.6.4-orig/src/cli/Export.h keepassxc-2.6.4-patched/src/cli/Export.h +--- keepassxc-2.6.4-orig/src/cli/Export.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Export.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,33 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_EXPORT_H +-#define KEEPASSXC_EXPORT_H +- +-#include "DatabaseCommand.h" +- +-class Export : public DatabaseCommand +-{ +-public: +- Export(); +- +- int executeWithDatabase(QSharedPointer db, QSharedPointer parser) override; +- +- static const QCommandLineOption FormatOption; +-}; +- +-#endif // KEEPASSXC_EXPORT_H +diff -urNr keepassxc-2.6.4-orig/src/cli/Generate.cpp keepassxc-2.6.4-patched/src/cli/Generate.cpp +--- keepassxc-2.6.4-orig/src/cli/Generate.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Generate.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,153 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include +-#include +- +-#include "Generate.h" +- +-#include "cli/TextStream.h" +-#include "cli/Utils.h" +- +-const QCommandLineOption Generate::PasswordLengthOption = +- QCommandLineOption(QStringList() << "L" +- << "length", +- QObject::tr("Length of the generated password"), +- QObject::tr("length")); +- +-const QCommandLineOption Generate::LowerCaseOption = QCommandLineOption(QStringList() << "l" +- << "lower", +- QObject::tr("Use lowercase characters")); +- +-const QCommandLineOption Generate::UpperCaseOption = QCommandLineOption(QStringList() << "U" +- << "upper", +- QObject::tr("Use uppercase characters")); +- +-const QCommandLineOption Generate::NumbersOption = QCommandLineOption(QStringList() << "n" +- << "numeric", +- QObject::tr("Use numbers")); +- +-const QCommandLineOption Generate::SpecialCharsOption = QCommandLineOption(QStringList() << "s" +- << "special", +- QObject::tr("Use special characters")); +- +-const QCommandLineOption Generate::ExtendedAsciiOption = QCommandLineOption(QStringList() << "e" +- << "extended", +- QObject::tr("Use extended ASCII")); +- +-const QCommandLineOption Generate::ExcludeCharsOption = QCommandLineOption(QStringList() << "x" +- << "exclude", +- QObject::tr("Exclude character set"), +- QObject::tr("chars")); +- +-const QCommandLineOption Generate::ExcludeSimilarCharsOption = +- QCommandLineOption(QStringList() << "exclude-similar", QObject::tr("Exclude similar looking characters")); +- +-const QCommandLineOption Generate::IncludeEveryGroupOption = +- QCommandLineOption(QStringList() << "every-group", QObject::tr("Include characters from every selected group")); +-Generate::Generate() +-{ +- name = QString("generate"); +- description = QObject::tr("Generate a new random password."); +- options.append(Generate::PasswordLengthOption); +- options.append(Generate::LowerCaseOption); +- options.append(Generate::UpperCaseOption); +- options.append(Generate::NumbersOption); +- options.append(Generate::SpecialCharsOption); +- options.append(Generate::ExtendedAsciiOption); +- options.append(Generate::ExcludeCharsOption); +- options.append(Generate::ExcludeSimilarCharsOption); +- options.append(Generate::IncludeEveryGroupOption); +-} +- +-/** +- * Creates a password generator instance using the command line options +- * of the parser object. +- */ +-QSharedPointer Generate::createGenerator(QSharedPointer parser) +-{ +- auto& err = Utils::STDERR; +- QSharedPointer passwordGenerator = QSharedPointer(new PasswordGenerator()); +- QString passwordLength = parser->value(Generate::PasswordLengthOption); +- if (passwordLength.isEmpty()) { +- passwordGenerator->setLength(PasswordGenerator::DefaultLength); +- } else if (passwordLength.toInt() <= 0) { +- err << QObject::tr("Invalid password length %1").arg(passwordLength) << endl; +- return QSharedPointer(nullptr); +- } else { +- passwordGenerator->setLength(passwordLength.toInt()); +- } +- +- PasswordGenerator::CharClasses classes = 0x0; +- +- if (parser->isSet(Generate::LowerCaseOption)) { +- classes |= PasswordGenerator::LowerLetters; +- } +- if (parser->isSet(Generate::UpperCaseOption)) { +- classes |= PasswordGenerator::UpperLetters; +- } +- if (parser->isSet(Generate::NumbersOption)) { +- classes |= PasswordGenerator::Numbers; +- } +- if (parser->isSet(Generate::SpecialCharsOption)) { +- classes |= PasswordGenerator::SpecialCharacters; +- } +- if (parser->isSet(Generate::ExtendedAsciiOption)) { +- classes |= PasswordGenerator::EASCII; +- } +- +- PasswordGenerator::GeneratorFlags flags = 0x0; +- +- if (parser->isSet(Generate::ExcludeSimilarCharsOption)) { +- flags |= PasswordGenerator::ExcludeLookAlike; +- } +- if (parser->isSet(Generate::IncludeEveryGroupOption)) { +- flags |= PasswordGenerator::CharFromEveryGroup; +- } +- +- // The default charset will be used if no explicit class +- // option was set. +- passwordGenerator->setCharClasses(classes); +- passwordGenerator->setFlags(flags); +- passwordGenerator->setExcludedChars(parser->value(Generate::ExcludeCharsOption)); +- +- if (!passwordGenerator->isValid()) { +- err << QObject::tr("Invalid password generator after applying all options") << endl; +- return QSharedPointer(nullptr); +- } +- +- return passwordGenerator; +-} +- +-int Generate::execute(const QStringList& arguments) +-{ +- QSharedPointer parser = getCommandLineParser(arguments); +- if (parser.isNull()) { +- return EXIT_FAILURE; +- } +- +- QSharedPointer passwordGenerator = Generate::createGenerator(parser); +- if (passwordGenerator.isNull()) { +- return EXIT_FAILURE; +- } +- +- auto& out = Utils::STDOUT; +- QString password = passwordGenerator->generatePassword(); +- out << password << endl; +- +- return EXIT_SUCCESS; +-} +diff -urNr keepassxc-2.6.4-orig/src/cli/Generate.h keepassxc-2.6.4-patched/src/cli/Generate.h +--- keepassxc-2.6.4-orig/src/cli/Generate.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Generate.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,44 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_GENERATE_H +-#define KEEPASSXC_GENERATE_H +- +-#include "Command.h" +- +-#include "core/PasswordGenerator.h" +- +-class Generate : public Command +-{ +-public: +- Generate(); +- int execute(const QStringList& arguments) override; +- +- static QSharedPointer createGenerator(QSharedPointer parser); +- +- static const QCommandLineOption PasswordLengthOption; +- static const QCommandLineOption LowerCaseOption; +- static const QCommandLineOption UpperCaseOption; +- static const QCommandLineOption NumbersOption; +- static const QCommandLineOption SpecialCharsOption; +- static const QCommandLineOption ExtendedAsciiOption; +- static const QCommandLineOption ExcludeCharsOption; +- static const QCommandLineOption ExcludeSimilarCharsOption; +- static const QCommandLineOption IncludeEveryGroupOption; +-}; +- +-#endif // KEEPASSXC_GENERATE_H +diff -urNr keepassxc-2.6.4-orig/src/cli/Help.cpp keepassxc-2.6.4-patched/src/cli/Help.cpp +--- keepassxc-2.6.4-orig/src/cli/Help.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Help.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,44 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "Help.h" +- +-#include "Command.h" +-#include "TextStream.h" +-#include "Utils.h" +- +-Help::Help() +-{ +- name = QString("help"); +- description = QObject::tr("Display command help."); +-} +- +-int Help::execute(const QStringList& arguments) +-{ +- auto& out = Utils::STDOUT; +- QSharedPointer command; +- if (arguments.size() > 1 && (command = Commands::getCommand(arguments.at(1)))) { +- out << command->getHelpText(); +- } else { +- out << "\n\n" << QObject::tr("Available commands:") << "\n"; +- for (auto& cmd : Commands::getCommands()) { +- out << cmd->getDescriptionLine(); +- } +- } +- out.flush(); +- return EXIT_SUCCESS; +-} +diff -urNr keepassxc-2.6.4-orig/src/cli/Help.h keepassxc-2.6.4-patched/src/cli/Help.h +--- keepassxc-2.6.4-orig/src/cli/Help.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Help.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,31 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_HELP_H +-#define KEEPASSXC_HELP_H +- +-#include "Command.h" +- +-class Help : public Command +-{ +-public: +- Help(); +- ~Help() override = default; +- int execute(const QStringList& arguments) override; +-}; +- +-#endif // KEEPASSXC_HELP_H +diff -urNr keepassxc-2.6.4-orig/src/cli/Import.cpp keepassxc-2.6.4-patched/src/cli/Import.cpp +--- keepassxc-2.6.4-orig/src/cli/Import.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Import.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,101 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include +-#include +- +-#include +-#include +-#include +- +-#include "Import.h" +- +-#include "cli/TextStream.h" +-#include "cli/Utils.h" +-#include "core/Database.h" +-#include "keys/CompositeKey.h" +-#include "keys/Key.h" +- +-/** +- * Create a database file from an XML export of another database. +- * A password can be specified to encrypt the database. +- * If none is specified the function will fail. +- * +- * If the database is being saved in a non existant directory, the +- * function will fail. +- * +- * @return EXIT_SUCCESS on success, or EXIT_FAILURE on failure +- */ +-Import::Import() +-{ +- name = QString("import"); +- description = QObject::tr("Import the contents of an XML database."); +- positionalArguments.append({QString("xml"), QObject::tr("Path of the XML database export."), QString("")}); +- positionalArguments.append({QString("database"), QObject::tr("Path of the new database."), QString("")}); +-} +- +-int Import::execute(const QStringList& arguments) +-{ +- QSharedPointer parser = getCommandLineParser(arguments); +- if (parser.isNull()) { +- return EXIT_FAILURE; +- } +- +- auto& out = parser->isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT; +- auto& err = Utils::STDERR; +- +- const QStringList args = parser->positionalArguments(); +- const QString& xmlExportPath = args.at(0); +- const QString& dbPath = args.at(1); +- +- if (QFileInfo::exists(dbPath)) { +- err << QObject::tr("File %1 already exists.").arg(dbPath) << endl; +- return EXIT_FAILURE; +- } +- +- auto key = QSharedPointer::create(); +- +- auto passwordKey = Utils::getConfirmedPassword(); +- if (passwordKey.isNull()) { +- err << QObject::tr("Failed to set database password.") << endl; +- return EXIT_FAILURE; +- } +- key->addKey(passwordKey); +- +- if (key->isEmpty()) { +- err << QObject::tr("No key is set. Aborting database creation.") << endl; +- return EXIT_FAILURE; +- } +- +- QString errorMessage; +- Database db; +- db.setKdf(KeePass2::uuidToKdf(KeePass2::KDF_ARGON2D)); +- db.setKey(key); +- +- if (!db.import(xmlExportPath, &errorMessage)) { +- err << QObject::tr("Unable to import XML database: %1").arg(errorMessage) << endl; +- return EXIT_FAILURE; +- } +- +- if (!db.saveAs(dbPath, &errorMessage, true, false)) { +- err << QObject::tr("Failed to save the database: %1.").arg(errorMessage) << endl; +- return EXIT_FAILURE; +- } +- +- out << QObject::tr("Successfully imported database.") << endl; +- return EXIT_SUCCESS; +-} +diff -urNr keepassxc-2.6.4-orig/src/cli/Import.h keepassxc-2.6.4-patched/src/cli/Import.h +--- keepassxc-2.6.4-orig/src/cli/Import.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Import.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,30 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_IMPORT_H +-#define KEEPASSXC_IMPORT_H +- +-#include "Command.h" +- +-class Import : public Command +-{ +-public: +- Import(); +- int execute(const QStringList& arguments) override; +-}; +- +-#endif // KEEPASSXC_IMPORT_H +diff -urNr keepassxc-2.6.4-orig/src/cli/Info.cpp keepassxc-2.6.4-patched/src/cli/Info.cpp +--- keepassxc-2.6.4-orig/src/cli/Info.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Info.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,53 +0,0 @@ +-/* +- * Copyright (C) 2020 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +-#include +-#include +- +-#include "Info.h" +-#include "Utils.h" +- +-#include "core/Database.h" +-#include "core/Global.h" +-#include "core/Metadata.h" +-#include "format/KeePass2.h" +- +-Info::Info() +-{ +- name = QString("db-info"); +- description = QObject::tr("Show a database's information."); +-} +- +-int Info::executeWithDatabase(QSharedPointer database, QSharedPointer) +-{ +- auto& out = Utils::STDOUT; +- +- out << QObject::tr("UUID: ") << database->uuid().toString() << endl; +- out << QObject::tr("Name: ") << database->metadata()->name() << endl; +- out << QObject::tr("Description: ") << database->metadata()->description() << endl; +- for (auto& cipher : asConst(KeePass2::CIPHERS)) { +- if (cipher.first == database->cipher()) { +- out << QObject::tr("Cipher: ") << cipher.second << endl; +- } +- } +- out << QObject::tr("KDF: ") << database->kdf()->toString() << endl; +- if (database->metadata()->recycleBinEnabled()) { +- out << QObject::tr("Recycle bin is enabled.") << endl; +- } else { +- out << QObject::tr("Recycle bin is not enabled.") << endl; +- } +- return EXIT_SUCCESS; +-} +diff -urNr keepassxc-2.6.4-orig/src/cli/Info.h keepassxc-2.6.4-patched/src/cli/Info.h +--- keepassxc-2.6.4-orig/src/cli/Info.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Info.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,31 +0,0 @@ +-/* +- * Copyright (C) 2020 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_INFO_H +-#define KEEPASSXC_INFO_H +- +-#include "DatabaseCommand.h" +- +-class Info : public DatabaseCommand +-{ +-public: +- Info(); +- +- int executeWithDatabase(QSharedPointer db, QSharedPointer parser); +-}; +- +-#endif // KEEPASSXC_INFO_H +diff -urNr keepassxc-2.6.4-orig/src/cli/keepassxc-cli.cpp keepassxc-2.6.4-patched/src/cli/keepassxc-cli.cpp +--- keepassxc-2.6.4-orig/src/cli/keepassxc-cli.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/keepassxc-cli.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,261 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include +-#include +- +-#include +-#include +-#include +-#include +-#include +- +-#include "cli/TextStream.h" +-#include +- +-#include "DatabaseCommand.h" +-#include "Open.h" +-#include "Utils.h" +-#include "config-keepassx.h" +-#include "core/Bootstrap.h" +-#include "core/Tools.h" +-#include "crypto/Crypto.h" +- +-#if defined(WITH_ASAN) && defined(WITH_LSAN) +-#include +-#endif +- +-#if defined(USE_READLINE) +-#include +-#include +-#endif +- +-class LineReader +-{ +-public: +- virtual ~LineReader() = default; +- virtual QString readLine(QString prompt) = 0; +- virtual bool isFinished() = 0; +-}; +- +-class SimpleLineReader : public LineReader +-{ +-public: +- SimpleLineReader() +- : inStream(stdin, QIODevice::ReadOnly) +- , outStream(stdout, QIODevice::WriteOnly) +- , finished(false) +- { +- } +- +- QString readLine(QString prompt) override +- { +- outStream << prompt; +- outStream.flush(); +- QString result = inStream.readLine(); +- if (result.isNull()) { +- finished = true; +- } +- return result; +- } +- +- bool isFinished() override +- { +- return finished; +- } +- +-private: +- TextStream inStream; +- TextStream outStream; +- bool finished; +-}; +- +-#if defined(USE_READLINE) +-class ReadlineLineReader : public LineReader +-{ +-public: +- ReadlineLineReader() +- : finished(false) +- { +- } +- +- QString readLine(QString prompt) override +- { +- char* result = readline(prompt.toStdString().c_str()); +- if (!result) { +- finished = true; +- return {}; +- } +- add_history(result); +- QString qstr(result); +- free(result); +- return qstr; +- } +- +- bool isFinished() override +- { +- return finished; +- } +- +-private: +- bool finished; +-}; +-#endif +- +-void enterInteractiveMode(const QStringList& arguments) +-{ +- auto& err = Utils::STDERR; +- // Replace command list with interactive version +- Commands::setupCommands(true); +- +- Open openCmd; +- QStringList openArgs(arguments); +- openArgs.removeFirst(); +- openCmd.execute(openArgs); +- +- QScopedPointer reader; +-#if defined(USE_READLINE) +- reader.reset(new ReadlineLineReader()); +-#else +- reader.reset(new SimpleLineReader()); +-#endif +- +- QSharedPointer currentDatabase(openCmd.currentDatabase); +- +- QString command; +- while (true) { +- QString prompt; +- if (currentDatabase) { +- prompt += currentDatabase->metadata()->name(); +- if (prompt.isEmpty()) { +- prompt += QFileInfo(currentDatabase->filePath()).fileName(); +- } +- } +- prompt += "> "; +- command = reader->readLine(prompt); +- if (reader->isFinished()) { +- break; +- } +- +- QStringList args = Utils::splitCommandString(command); +- if (args.empty()) { +- continue; +- } +- +- auto cmd = Commands::getCommand(args[0]); +- if (!cmd) { +- err << QObject::tr("Unknown command %1").arg(args[0]) << endl; +- continue; +- } else if (cmd->name == "quit" || cmd->name == "exit") { +- break; +- } +- +- cmd->currentDatabase = currentDatabase; +- cmd->execute(args); +- currentDatabase = cmd->currentDatabase; +- cmd->currentDatabase.reset(); +- } +- +- if (currentDatabase) { +- currentDatabase->releaseData(); +- } +-} +- +-int main(int argc, char** argv) +-{ +- if (!Crypto::init()) { +- qFatal("Fatal error while testing the cryptographic functions:\n%s", qPrintable(Crypto::errorString())); +- return EXIT_FAILURE; +- } +- +- QCoreApplication app(argc, argv); +- QCoreApplication::setApplicationVersion(KEEPASSXC_VERSION); +- +- Bootstrap::bootstrap(); +- Utils::setDefaultTextStreams(); +- Commands::setupCommands(false); +- +- auto& out = Utils::STDOUT; +- auto& err = Utils::STDERR; +- +- QStringList arguments; +- for (int i = 0; i < argc; ++i) { +- arguments << QString(argv[i]); +- } +- QCommandLineParser parser; +- +- QString description("KeePassXC command line interface."); +- description = description.append(QObject::tr("\n\nAvailable commands:\n")); +- for (auto& command : Commands::getCommands()) { +- description = description.append(command->getDescriptionLine()); +- } +- parser.setApplicationDescription(description); +- +- parser.addPositionalArgument("command", QObject::tr("Name of the command to execute.")); +- +- QCommandLineOption debugInfoOption(QStringList() << "debug-info", QObject::tr("Displays debugging information.")); +- parser.addOption(debugInfoOption); +- parser.addHelpOption(); +- parser.addVersionOption(); +- // TODO : use the setOptionsAfterPositionalArgumentsMode (Qt 5.6) function +- // when available. Until then, options passed to sub-commands won't be +- // recognized by this parser. +- parser.parse(arguments); +- +- if (parser.positionalArguments().empty()) { +- if (parser.isSet("version")) { +- // Switch to parser.showVersion() when available (QT 5.4). +- out << KEEPASSXC_VERSION << endl; +- return EXIT_SUCCESS; +- } else if (parser.isSet(debugInfoOption)) { +- QString debugInfo = Tools::debugInfo().append("\n").append(Crypto::debugInfo()); +- out << debugInfo << endl; +- return EXIT_SUCCESS; +- } +- // showHelp exits the application immediately. +- parser.showHelp(); +- } +- +- QString commandName = parser.positionalArguments().at(0); +- if (commandName == "open") { +- enterInteractiveMode(arguments); +- return EXIT_SUCCESS; +- } +- +- auto command = Commands::getCommand(commandName); +- if (!command) { +- err << QObject::tr("Invalid command %1.").arg(commandName) << endl; +- err << parser.helpText(); +- return EXIT_FAILURE; +- } +- +- // Removing the first argument (keepassxc). +- arguments.removeFirst(); +- int exitCode = command->execute(arguments); +- +- if (command->currentDatabase) { +- command->currentDatabase.reset(); +- } +- +-#if defined(WITH_ASAN) && defined(WITH_LSAN) +- // do leak check here to prevent massive tail of end-of-process leak errors from third-party libraries +- __lsan_do_leak_check(); +- __lsan_disable(); +-#endif +- +- return exitCode; +-} +diff -urNr keepassxc-2.6.4-orig/src/cli/List.cpp keepassxc-2.6.4-patched/src/cli/List.cpp +--- keepassxc-2.6.4-orig/src/cli/List.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/List.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,72 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include +-#include +- +-#include "List.h" +-#include "cli/Utils.h" +- +-#include "cli/TextStream.h" +-#include "core/Database.h" +-#include "core/Entry.h" +-#include "core/Group.h" +- +-const QCommandLineOption List::RecursiveOption = +- QCommandLineOption(QStringList() << "R" +- << "recursive", +- QObject::tr("Recursively list the elements of the group.")); +- +-const QCommandLineOption List::FlattenOption = QCommandLineOption(QStringList() << "f" +- << "flatten", +- QObject::tr("Flattens the output to single lines.")); +- +-List::List() +-{ +- name = QString("ls"); +- description = QObject::tr("List database entries."); +- options.append(List::RecursiveOption); +- options.append(List::FlattenOption); +- optionalArguments.append( +- {QString("group"), QObject::tr("Path of the group to list. Default is /"), QString("[group]")}); +-} +- +-int List::executeWithDatabase(QSharedPointer database, QSharedPointer parser) +-{ +- auto& out = Utils::STDOUT; +- auto& err = Utils::STDERR; +- +- const QStringList args = parser->positionalArguments(); +- bool recursive = parser->isSet(List::RecursiveOption); +- bool flatten = parser->isSet(List::FlattenOption); +- +- // No group provided, defaulting to root group. +- if (args.size() == 1) { +- out << database->rootGroup()->print(recursive, flatten) << flush; +- return EXIT_SUCCESS; +- } +- +- const QString& groupPath = args.at(1); +- Group* group = database->rootGroup()->findGroupByPath(groupPath); +- if (!group) { +- err << QObject::tr("Cannot find group %1.").arg(groupPath) << endl; +- return EXIT_FAILURE; +- } +- +- out << group->print(recursive, flatten) << flush; +- return EXIT_SUCCESS; +-} +diff -urNr keepassxc-2.6.4-orig/src/cli/List.h keepassxc-2.6.4-patched/src/cli/List.h +--- keepassxc-2.6.4-orig/src/cli/List.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/List.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,34 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_LIST_H +-#define KEEPASSXC_LIST_H +- +-#include "DatabaseCommand.h" +- +-class List : public DatabaseCommand +-{ +-public: +- List(); +- +- int executeWithDatabase(QSharedPointer db, QSharedPointer parser) override; +- +- static const QCommandLineOption RecursiveOption; +- static const QCommandLineOption FlattenOption; +-}; +- +-#endif // KEEPASSXC_LIST_H +diff -urNr keepassxc-2.6.4-orig/src/cli/Locate.cpp keepassxc-2.6.4-patched/src/cli/Locate.cpp +--- keepassxc-2.6.4-orig/src/cli/Locate.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Locate.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,57 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include +-#include +- +-#include "Locate.h" +- +-#include +- +-#include "cli/TextStream.h" +-#include "cli/Utils.h" +-#include "core/Database.h" +-#include "core/Entry.h" +-#include "core/Global.h" +-#include "core/Group.h" +- +-Locate::Locate() +-{ +- name = QString("locate"); +- description = QObject::tr("Find entries quickly."); +- positionalArguments.append({QString("term"), QObject::tr("Search term."), QString("")}); +-} +- +-int Locate::executeWithDatabase(QSharedPointer database, QSharedPointer parser) +-{ +- auto& out = Utils::STDOUT; +- auto& err = Utils::STDERR; +- +- const QStringList args = parser->positionalArguments(); +- const QString& searchTerm = args.at(1); +- +- QStringList results = database->rootGroup()->locate(searchTerm); +- if (results.isEmpty()) { +- err << "No results for that search term." << endl; +- return EXIT_FAILURE; +- } +- +- for (const QString& result : asConst(results)) { +- out << result << endl; +- } +- return EXIT_SUCCESS; +-} +diff -urNr keepassxc-2.6.4-orig/src/cli/Locate.h keepassxc-2.6.4-patched/src/cli/Locate.h +--- keepassxc-2.6.4-orig/src/cli/Locate.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Locate.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,31 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_LOCATE_H +-#define KEEPASSXC_LOCATE_H +- +-#include "DatabaseCommand.h" +- +-class Locate : public DatabaseCommand +-{ +-public: +- Locate(); +- +- int executeWithDatabase(QSharedPointer db, QSharedPointer parser) override; +-}; +- +-#endif // KEEPASSXC_LOCATE_H +diff -urNr keepassxc-2.6.4-orig/src/cli/Merge.cpp keepassxc-2.6.4-patched/src/cli/Merge.cpp +--- keepassxc-2.6.4-orig/src/cli/Merge.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Merge.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,110 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include +- +-#include "Merge.h" +- +-#include "cli/TextStream.h" +-#include "cli/Utils.h" +-#include "core/Database.h" +-#include "core/Merger.h" +- +-const QCommandLineOption Merge::SameCredentialsOption = +- QCommandLineOption(QStringList() << "s" +- << "same-credentials", +- QObject::tr("Use the same credentials for both database files.")); +- +-const QCommandLineOption Merge::KeyFileFromOption = +- QCommandLineOption(QStringList() << "key-file-from", +- QObject::tr("Key file of the database to merge from."), +- QObject::tr("path")); +- +-const QCommandLineOption Merge::NoPasswordFromOption = +- QCommandLineOption(QStringList() << "no-password-from", +- QObject::tr("Deactivate password key for the database to merge from.")); +- +-const QCommandLineOption Merge::DryRunOption = +- QCommandLineOption(QStringList() << "dry-run", +- QObject::tr("Only print the changes detected by the merge operation.")); +- +-const QCommandLineOption Merge::YubiKeyFromOption(QStringList() << "yubikey-from", +- QObject::tr("Yubikey slot for the second database."), +- QObject::tr("slot")); +-Merge::Merge() +-{ +- name = QString("merge"); +- description = QObject::tr("Merge two databases."); +- options.append(Merge::SameCredentialsOption); +- options.append(Merge::KeyFileFromOption); +- options.append(Merge::NoPasswordFromOption); +- options.append(Merge::DryRunOption); +-#ifdef WITH_XC_YUBIKEY +- options.append(Merge::YubiKeyFromOption); +-#endif +- positionalArguments.append({QString("database2"), QObject::tr("Path of the database to merge from."), QString("")}); +-} +- +-int Merge::executeWithDatabase(QSharedPointer database, QSharedPointer parser) +-{ +- auto& out = parser->isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT; +- auto& err = Utils::STDERR; +- +- const QStringList args = parser->positionalArguments(); +- +- auto& toDatabasePath = args.at(0); +- auto& fromDatabasePath = args.at(1); +- +- QSharedPointer db2; +- if (!parser->isSet(Merge::SameCredentialsOption)) { +- db2 = Utils::unlockDatabase(fromDatabasePath, +- !parser->isSet(Merge::NoPasswordFromOption), +- parser->value(Merge::KeyFileFromOption), +- parser->value(Merge::YubiKeyFromOption), +- parser->isSet(Command::QuietOption)); +- if (!db2) { +- return EXIT_FAILURE; +- } +- } else { +- db2 = QSharedPointer::create(); +- QString errorMessage; +- if (!db2->open(fromDatabasePath, database->key(), &errorMessage, false)) { +- err << QObject::tr("Error reading merge file:\n%1").arg(errorMessage); +- return EXIT_FAILURE; +- } +- } +- +- Merger merger(db2.data(), database.data()); +- QStringList changeList = merger.merge(); +- +- for (auto& mergeChange : changeList) { +- out << "\t" << mergeChange << endl; +- } +- +- if (!changeList.isEmpty() && !parser->isSet(Merge::DryRunOption)) { +- QString errorMessage; +- if (!database->save(&errorMessage, true, false)) { +- err << QObject::tr("Unable to save database to file : %1").arg(errorMessage) << endl; +- return EXIT_FAILURE; +- } +- out << QObject::tr("Successfully merged %1 into %2.").arg(fromDatabasePath, toDatabasePath) << endl; +- } else { +- out << QObject::tr("Database was not modified by merge operation.") << endl; +- } +- +- return EXIT_SUCCESS; +-} +diff -urNr keepassxc-2.6.4-orig/src/cli/Merge.h keepassxc-2.6.4-patched/src/cli/Merge.h +--- keepassxc-2.6.4-orig/src/cli/Merge.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Merge.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,37 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_MERGE_H +-#define KEEPASSXC_MERGE_H +- +-#include "DatabaseCommand.h" +- +-class Merge : public DatabaseCommand +-{ +-public: +- Merge(); +- +- int executeWithDatabase(QSharedPointer db, QSharedPointer parser) override; +- +- static const QCommandLineOption SameCredentialsOption; +- static const QCommandLineOption KeyFileFromOption; +- static const QCommandLineOption NoPasswordFromOption; +- static const QCommandLineOption YubiKeyFromOption; +- static const QCommandLineOption DryRunOption; +-}; +- +-#endif // KEEPASSXC_MERGE_H +diff -urNr keepassxc-2.6.4-orig/src/cli/Move.cpp keepassxc-2.6.4-patched/src/cli/Move.cpp +--- keepassxc-2.6.4-orig/src/cli/Move.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Move.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,79 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include +-#include +- +-#include "Move.h" +- +-#include "cli/TextStream.h" +-#include "cli/Utils.h" +-#include "core/Database.h" +-#include "core/Entry.h" +-#include "core/Group.h" +- +-Move::Move() +-{ +- name = QString("mv"); +- description = QObject::tr("Moves an entry to a new group."); +- positionalArguments.append({QString("entry"), QObject::tr("Path of the entry to move."), QString("")}); +- positionalArguments.append({QString("group"), QObject::tr("Path of the destination group."), QString("")}); +-} +- +-Move::~Move() +-{ +-} +- +-int Move::executeWithDatabase(QSharedPointer database, QSharedPointer parser) +-{ +- auto& out = Utils::STDOUT; +- auto& err = Utils::STDERR; +- +- const QStringList args = parser->positionalArguments(); +- const QString& entryPath = args.at(1); +- const QString& destinationPath = args.at(2); +- +- Entry* entry = database->rootGroup()->findEntryByPath(entryPath); +- if (!entry) { +- err << QObject::tr("Could not find entry with path %1.").arg(entryPath) << endl; +- return EXIT_FAILURE; +- } +- +- Group* destinationGroup = database->rootGroup()->findGroupByPath(destinationPath); +- if (!destinationGroup) { +- err << QObject::tr("Could not find group with path %1.").arg(destinationPath) << endl; +- return EXIT_FAILURE; +- } +- +- if (destinationGroup == entry->parent()) { +- err << QObject::tr("Entry is already in group %1.").arg(destinationPath) << endl; +- return EXIT_FAILURE; +- } +- +- entry->beginUpdate(); +- entry->setGroup(destinationGroup); +- entry->endUpdate(); +- +- QString errorMessage; +- if (!database->save(&errorMessage, true, false)) { +- err << QObject::tr("Writing the database failed %1.").arg(errorMessage) << endl; +- return EXIT_FAILURE; +- } +- +- out << QObject::tr("Successfully moved entry %1 to group %2.").arg(entry->title(), destinationPath) << endl; +- return EXIT_SUCCESS; +-} +diff -urNr keepassxc-2.6.4-orig/src/cli/Move.h keepassxc-2.6.4-patched/src/cli/Move.h +--- keepassxc-2.6.4-orig/src/cli/Move.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Move.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,32 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_MOVE_H +-#define KEEPASSXC_MOVE_H +- +-#include "DatabaseCommand.h" +- +-class Move : public DatabaseCommand +-{ +-public: +- Move(); +- ~Move(); +- +- int executeWithDatabase(QSharedPointer db, QSharedPointer parser); +-}; +- +-#endif // KEEPASSXC_MOVE_H +diff -urNr keepassxc-2.6.4-orig/src/cli/Open.cpp keepassxc-2.6.4-patched/src/cli/Open.cpp +--- keepassxc-2.6.4-orig/src/cli/Open.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Open.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,43 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "Open.h" +- +-#include +- +-#include "DatabaseCommand.h" +-#include "TextStream.h" +-#include "Utils.h" +- +-Open::Open() +-{ +- name = QString("open"); +- description = QObject::tr("Open a database."); +-} +- +-int Open::execute(const QStringList& arguments) +-{ +- currentDatabase.reset(nullptr); +- return this->DatabaseCommand::execute(arguments); +-} +- +-int Open::executeWithDatabase(QSharedPointer db, QSharedPointer parser) +-{ +- Q_UNUSED(parser) +- currentDatabase = db; +- return EXIT_SUCCESS; +-} +diff -urNr keepassxc-2.6.4-orig/src/cli/Open.h keepassxc-2.6.4-patched/src/cli/Open.h +--- keepassxc-2.6.4-orig/src/cli/Open.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Open.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,31 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_OPEN_H +-#define KEEPASSXC_OPEN_H +- +-#include "DatabaseCommand.h" +- +-class Open : public DatabaseCommand +-{ +-public: +- Open(); +- int execute(const QStringList& arguments) override; +- int executeWithDatabase(QSharedPointer db, QSharedPointer parser) override; +-}; +- +-#endif // KEEPASSXC_OPEN_H +diff -urNr keepassxc-2.6.4-orig/src/cli/Remove.cpp keepassxc-2.6.4-patched/src/cli/Remove.cpp +--- keepassxc-2.6.4-orig/src/cli/Remove.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Remove.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,73 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include +-#include +- +-#include "Remove.h" +- +-#include "cli/TextStream.h" +-#include "cli/Utils.h" +-#include "core/Database.h" +-#include "core/Entry.h" +-#include "core/Group.h" +-#include "core/Metadata.h" +-#include "core/Tools.h" +- +-Remove::Remove() +-{ +- name = QString("rm"); +- description = QString("Remove an entry from the database."); +- positionalArguments.append({QString("entry"), QObject::tr("Path of the entry to remove."), QString("")}); +-} +- +-int Remove::executeWithDatabase(QSharedPointer database, QSharedPointer parser) +-{ +- auto& out = parser->isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT; +- auto& err = Utils::STDERR; +- +- auto& entryPath = parser->positionalArguments().at(1); +- QPointer entry = database->rootGroup()->findEntryByPath(entryPath); +- if (!entry) { +- err << QObject::tr("Entry %1 not found.").arg(entryPath) << endl; +- return EXIT_FAILURE; +- } +- +- QString entryTitle = entry->title(); +- bool recycled = true; +- auto* recycleBin = database->metadata()->recycleBin(); +- if (!database->metadata()->recycleBinEnabled() || (recycleBin && recycleBin->findEntryByUuid(entry->uuid()))) { +- delete entry; +- recycled = false; +- } else { +- database->recycleEntry(entry); +- }; +- +- QString errorMessage; +- if (!database->save(&errorMessage, true, false)) { +- err << QObject::tr("Unable to save database to file: %1").arg(errorMessage) << endl; +- return EXIT_FAILURE; +- } +- +- if (recycled) { +- out << QObject::tr("Successfully recycled entry %1.").arg(entryTitle) << endl; +- } else { +- out << QObject::tr("Successfully deleted entry %1.").arg(entryTitle) << endl; +- } +- +- return EXIT_SUCCESS; +-} +diff -urNr keepassxc-2.6.4-orig/src/cli/RemoveGroup.cpp keepassxc-2.6.4-patched/src/cli/RemoveGroup.cpp +--- keepassxc-2.6.4-orig/src/cli/RemoveGroup.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/RemoveGroup.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,83 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include +-#include +- +-#include "RemoveGroup.h" +- +-#include "cli/TextStream.h" +-#include "cli/Utils.h" +-#include "core/Database.h" +-#include "core/Entry.h" +-#include "core/Group.h" +-#include "core/Metadata.h" +-#include "core/Tools.h" +- +-RemoveGroup::RemoveGroup() +-{ +- name = QString("rmdir"); +- description = QString("Removes a group from a database."); +- positionalArguments.append({QString("group"), QObject::tr("Path of the group to remove."), QString("")}); +-} +- +-RemoveGroup::~RemoveGroup() +-{ +-} +- +-int RemoveGroup::executeWithDatabase(QSharedPointer database, QSharedPointer parser) +-{ +- auto& out = parser->isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT; +- auto& err = Utils::STDERR; +- +- QString groupPath = parser->positionalArguments().at(1); +- +- // Recursive option means were looking for a group to remove. +- QPointer group = database->rootGroup()->findGroupByPath(groupPath); +- if (!group) { +- err << QObject::tr("Group %1 not found.").arg(groupPath) << endl; +- return EXIT_FAILURE; +- } +- +- if (group == database->rootGroup()) { +- err << QObject::tr("Cannot remove root group from database.") << endl; +- return EXIT_FAILURE; +- } +- +- bool recycled = true; +- auto* recycleBin = database->metadata()->recycleBin(); +- if (!database->metadata()->recycleBinEnabled() || (recycleBin && recycleBin->findGroupByUuid(group->uuid()))) { +- delete group; +- recycled = false; +- } else { +- database->recycleGroup(group); +- }; +- +- QString errorMessage; +- if (!database->save(&errorMessage, true, false)) { +- err << QObject::tr("Unable to save database to file: %1").arg(errorMessage) << endl; +- return EXIT_FAILURE; +- } +- +- if (recycled) { +- out << QObject::tr("Successfully recycled group %1.").arg(groupPath) << endl; +- } else { +- out << QObject::tr("Successfully deleted group %1.").arg(groupPath) << endl; +- } +- +- return EXIT_SUCCESS; +-} +diff -urNr keepassxc-2.6.4-orig/src/cli/RemoveGroup.h keepassxc-2.6.4-patched/src/cli/RemoveGroup.h +--- keepassxc-2.6.4-orig/src/cli/RemoveGroup.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/RemoveGroup.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,32 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_REMOVEGROUP_H +-#define KEEPASSXC_REMOVEGROUP_H +- +-#include "DatabaseCommand.h" +- +-class RemoveGroup : public DatabaseCommand +-{ +-public: +- RemoveGroup(); +- ~RemoveGroup(); +- +- int executeWithDatabase(QSharedPointer db, QSharedPointer parser); +-}; +- +-#endif // KEEPASSXC_REMOVEGROUP_H +diff -urNr keepassxc-2.6.4-orig/src/cli/Remove.h keepassxc-2.6.4-patched/src/cli/Remove.h +--- keepassxc-2.6.4-orig/src/cli/Remove.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Remove.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,31 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_REMOVE_H +-#define KEEPASSXC_REMOVE_H +- +-#include "DatabaseCommand.h" +- +-class Remove : public DatabaseCommand +-{ +-public: +- Remove(); +- +- int executeWithDatabase(QSharedPointer db, QSharedPointer parser); +-}; +- +-#endif // KEEPASSXC_REMOVE_H +diff -urNr keepassxc-2.6.4-orig/src/cli/Show.cpp keepassxc-2.6.4-patched/src/cli/Show.cpp +--- keepassxc-2.6.4-orig/src/cli/Show.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Show.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,119 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "Show.h" +- +-#include +-#include +- +-#include "Utils.h" +-#include "cli/TextStream.h" +-#include "core/Database.h" +-#include "core/Entry.h" +-#include "core/Global.h" +-#include "core/Group.h" +- +-#include +- +-const QCommandLineOption Show::TotpOption = QCommandLineOption(QStringList() << "t" +- << "totp", +- QObject::tr("Show the entry's current TOTP.")); +- +-const QCommandLineOption Show::ProtectedAttributesOption = +- QCommandLineOption(QStringList() << "s" +- << "show-protected", +- QObject::tr("Show the protected attributes in clear text.")); +- +-const QCommandLineOption Show::AttributesOption = QCommandLineOption( +- QStringList() << "a" +- << "attributes", +- QObject::tr( +- "Names of the attributes to show. " +- "This option can be specified more than once, with each attribute shown one-per-line in the given order. " +- "If no attributes are specified, a summary of the default attributes is given."), +- QObject::tr("attribute")); +- +-Show::Show() +-{ +- name = QString("show"); +- description = QObject::tr("Show an entry's information."); +- options.append(Show::TotpOption); +- options.append(Show::AttributesOption); +- options.append(Show::ProtectedAttributesOption); +- positionalArguments.append({QString("entry"), QObject::tr("Name of the entry to show."), QString("")}); +-} +- +-int Show::executeWithDatabase(QSharedPointer database, QSharedPointer parser) +-{ +- auto& out = Utils::STDOUT; +- auto& err = Utils::STDERR; +- +- const QStringList args = parser->positionalArguments(); +- const QString& entryPath = args.at(1); +- bool showTotp = parser->isSet(Show::TotpOption); +- bool showProtectedAttributes = parser->isSet(Show::ProtectedAttributesOption); +- QStringList attributes = parser->values(Show::AttributesOption); +- +- Entry* entry = database->rootGroup()->findEntryByPath(entryPath); +- if (!entry) { +- err << QObject::tr("Could not find entry with path %1.").arg(entryPath) << endl; +- return EXIT_FAILURE; +- } +- +- if (showTotp && !entry->hasTotp()) { +- err << QObject::tr("Entry with path %1 has no TOTP set up.").arg(entryPath) << endl; +- return EXIT_FAILURE; +- } +- +- // If no attributes specified, output the default attribute set. +- bool showDefaultAttributes = attributes.isEmpty() && !showTotp; +- if (showDefaultAttributes) { +- attributes = EntryAttributes::DefaultAttributes; +- } +- +- // Iterate over the attributes and output them line-by-line. +- bool encounteredError = false; +- for (const QString& attributeName : asConst(attributes)) { +- QStringList attrs = Utils::findAttributes(*entry->attributes(), attributeName); +- if (attrs.isEmpty()) { +- encounteredError = true; +- err << QObject::tr("ERROR: unknown attribute %1.").arg(attributeName) << endl; +- continue; +- } else if (attrs.size() > 1) { +- encounteredError = true; +- err << QObject::tr("ERROR: attribute %1 is ambiguous, it matches %2.") +- .arg(attributeName, QLocale().createSeparatedList(attrs)) +- << endl; +- continue; +- } +- QString canonicalName = attrs[0]; +- if (showDefaultAttributes) { +- out << canonicalName << ": "; +- } +- if (entry->attributes()->isProtected(canonicalName) && showDefaultAttributes && !showProtectedAttributes) { +- out << "PROTECTED" << endl; +- } else { +- out << entry->resolveMultiplePlaceholders(entry->attributes()->value(canonicalName)) << endl; +- } +- } +- +- if (showTotp) { +- out << entry->totp() << endl; +- } +- +- return encounteredError ? EXIT_FAILURE : EXIT_SUCCESS; +-} +diff -urNr keepassxc-2.6.4-orig/src/cli/Show.h keepassxc-2.6.4-patched/src/cli/Show.h +--- keepassxc-2.6.4-orig/src/cli/Show.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Show.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,35 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_SHOW_H +-#define KEEPASSXC_SHOW_H +- +-#include "DatabaseCommand.h" +- +-class Show : public DatabaseCommand +-{ +-public: +- Show(); +- +- int executeWithDatabase(QSharedPointer db, QSharedPointer parser); +- +- static const QCommandLineOption TotpOption; +- static const QCommandLineOption AttributesOption; +- static const QCommandLineOption ProtectedAttributesOption; +-}; +- +-#endif // KEEPASSXC_SHOW_H +diff -urNr keepassxc-2.6.4-orig/src/cli/TextStream.cpp keepassxc-2.6.4-patched/src/cli/TextStream.cpp +--- keepassxc-2.6.4-orig/src/cli/TextStream.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/TextStream.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,99 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "TextStream.h" +- +-#include +-#include +-#ifdef Q_OS_WIN +-#include +-#endif +- +-TextStream::TextStream() +-{ +- detectCodec(); +-} +- +-TextStream::TextStream(QIODevice* device) +- : QTextStream(device) +-{ +- detectCodec(); +-} +- +-TextStream::TextStream(FILE* fileHandle, QIODevice::OpenMode openMode) +- : QTextStream(fileHandle, openMode) +-{ +- detectCodec(); +-} +- +-TextStream::TextStream(QString* string, QIODevice::OpenMode openMode) +- : QTextStream(string, openMode) +-{ +- detectCodec(); +-} +- +-TextStream::TextStream(QByteArray* array, QIODevice::OpenMode openMode) +- : QTextStream(array, openMode) +-{ +- detectCodec(); +-} +- +-TextStream::TextStream(const QByteArray& array, QIODevice::OpenMode openMode) +- : QTextStream(array, openMode) +-{ +- detectCodec(); +-} +- +-void TextStream::write(const char* str) +-{ +- // Workaround for an issue with QTextStream. Its operator<<(const char *string) will encode the +- // string with a non-UTF-8 encoding. We work around this by wrapping the input string into +- // a QString, thus enforcing UTF-8. More info: +- // https://code.qt.io/cgit/qt/qtbase.git/commit?id=cec8cdba4d1b856e17c8743ba8803349d42dc701 +- *this << QString(str); +-} +- +-void TextStream::detectCodec() +-{ +- QString codecName = "UTF-8"; +- auto env = QProcessEnvironment::systemEnvironment(); +- +-#ifdef Q_OS_WIN +- WINBOOL success = false; +-#ifdef CP_UTF8 +- success = SetConsoleOutputCP(CP_UTF8); +-#endif +- if (!success && !env.contains("SHELL")) { +- // Fall back to cp850 if this is Windows without CP_UTF8 and we +- // are running in a native shell (i.e., no Msys or Cygwin). +- codecName = "Windows-850"; +- } +-#else +- if (env.contains("LANG") && !env.value("LANG").isEmpty() && env.value("LANG") != "C") { +- // Only override codec if LANG is set, otherwise Qt will assume +- // US-ASCII, which is almost always wrong and results in +- // Unicode passwords being displayed as question marks. +- codecName = QTextCodec::codecForLocale()->name(); +- } +-#endif +- +- codecName = env.value("ENCODING_OVERRIDE", codecName); +- auto* codec = QTextCodec::codecForName(codecName.toLatin1()); +- if (codec) { +- setCodec(codec); +- } +-} +diff -urNr keepassxc-2.6.4-orig/src/cli/TextStream.h keepassxc-2.6.4-patched/src/cli/TextStream.h +--- keepassxc-2.6.4-orig/src/cli/TextStream.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/TextStream.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,52 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_TEXTSTREAM_H +-#define KEEPASSXC_TEXTSTREAM_H +- +-#include +- +-/** +- * QTextStream with codec fixes for the Windows command line. +- * +- * QTextStream uses the system default locale, but this breaks in various +- * situations: (1) It does not work on the native Windows shell (cmd.exe, Powershell), +- * since the default Windows locale is Windows-1252, but the shell uses Windows-850. +- * (2) It also breaks on *nix systems where the locale is Latin1 or C, which +- * is the case for most CI systems or build servers. +- * +- * We allow overriding the detected codec by setting the ENCODING_OVERRIDE +- * environment variable, but otherwise prefer Windows-850 on Windows and UTF-8 +- * on any other system, even if LANG is set to something else. +- */ +-class TextStream : public QTextStream +-{ +-public: +- TextStream(); +- explicit TextStream(QIODevice* device); +- explicit TextStream(FILE* fileHandle, QIODevice::OpenMode openMode = QIODevice::ReadWrite); +- explicit TextStream(QString* string, QIODevice::OpenMode openMode = QIODevice::ReadWrite); +- explicit TextStream(QByteArray* array, QIODevice::OpenMode openMode = QIODevice::ReadWrite); +- explicit TextStream(const QByteArray& array, QIODevice::OpenMode openMode = QIODevice::ReadOnly); +- +- void write(const char* str); +- +-private: +- void detectCodec(); +-}; +- +-#endif // KEEPASSXC_TEXTSTREAM_H +diff -urNr keepassxc-2.6.4-orig/src/cli/Utils.cpp keepassxc-2.6.4-patched/src/cli/Utils.cpp +--- keepassxc-2.6.4-orig/src/cli/Utils.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Utils.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,367 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "Utils.h" +- +-#ifdef WITH_XC_YUBIKEY +-#include "keys/YkChallengeResponseKeyCLI.h" +-#endif +- +-#ifdef Q_OS_WIN +-#include +-#else +-#include +-#include +-#endif +- +-#include +-#include +-#include +- +-namespace Utils +-{ +- QTextStream STDOUT; +- QTextStream STDERR; +- QTextStream STDIN; +- QTextStream DEVNULL; +- +- void setDefaultTextStreams() +- { +- auto fd = new QFile(); +- fd->open(stdout, QIODevice::WriteOnly); +- STDOUT.setDevice(fd); +- +- fd = new QFile(); +- fd->open(stderr, QIODevice::WriteOnly); +- STDERR.setDevice(fd); +- +- fd = new QFile(); +- fd->open(stdin, QIODevice::ReadOnly); +- STDIN.setDevice(fd); +- +- fd = new QFile(); +-#ifdef Q_OS_WIN +- fd->open(fopen("nul", "w"), QIODevice::WriteOnly); +-#else +- fd->open(fopen("/dev/null", "w"), QIODevice::WriteOnly); +-#endif +- DEVNULL.setDevice(fd); +- } +- +- void setStdinEcho(bool enable = true) +- { +-#ifdef Q_OS_WIN +- HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE); +- DWORD mode; +- GetConsoleMode(hIn, &mode); +- +- if (enable) { +- mode |= ENABLE_ECHO_INPUT; +- } else { +- mode &= ~ENABLE_ECHO_INPUT; +- } +- +- SetConsoleMode(hIn, mode); +-#else +- struct termios t; +- tcgetattr(STDIN_FILENO, &t); +- +- if (enable) { +- t.c_lflag |= ECHO; +- } else { +- t.c_lflag &= ~ECHO; +- } +- +- tcsetattr(STDIN_FILENO, TCSANOW, &t); +-#endif +- } +- +- QSharedPointer unlockDatabase(const QString& databaseFilename, +- const bool isPasswordProtected, +- const QString& keyFilename, +- const QString& yubiKeySlot, +- bool quiet) +- { +- auto& err = quiet ? DEVNULL : STDERR; +- auto compositeKey = QSharedPointer::create(); +- +- QFileInfo dbFileInfo(databaseFilename); +- if (dbFileInfo.canonicalFilePath().isEmpty()) { +- err << QObject::tr("Failed to open database file %1: not found").arg(databaseFilename) << endl; +- return {}; +- } +- +- if (!dbFileInfo.isFile()) { +- err << QObject::tr("Failed to open database file %1: not a plain file").arg(databaseFilename) << endl; +- return {}; +- } +- +- if (!dbFileInfo.isReadable()) { +- err << QObject::tr("Failed to open database file %1: not readable").arg(databaseFilename) << endl; +- return {}; +- } +- +- if (isPasswordProtected) { +- err << QObject::tr("Enter password to unlock %1: ").arg(databaseFilename) << flush; +- QString line = Utils::getPassword(quiet); +- auto passwordKey = QSharedPointer::create(); +- passwordKey->setPassword(line); +- compositeKey->addKey(passwordKey); +- } +- +- if (!keyFilename.isEmpty()) { +- auto fileKey = QSharedPointer::create(); +- QString errorMessage; +- // LCOV_EXCL_START +- if (!fileKey->load(keyFilename, &errorMessage)) { +- err << QObject::tr("Failed to load key file %1: %2").arg(keyFilename, errorMessage) << endl; +- return {}; +- } +- +- if (fileKey->type() != FileKey::KeePass2XMLv2 && fileKey->type() != FileKey::Hashed) { +- err << QObject::tr("WARNING: You are using an old key file format which KeePassXC may\n" +- "stop supporting in the future.\n\n" +- "Please consider generating a new key file.") +- << endl; +- } +- // LCOV_EXCL_STOP +- +- compositeKey->addKey(fileKey); +- } +- +-#ifdef WITH_XC_YUBIKEY +- if (!yubiKeySlot.isEmpty()) { +- unsigned int serial = 0; +- int slot; +- +- bool ok = false; +- auto parts = yubiKeySlot.split(":"); +- slot = parts[0].toInt(&ok); +- +- if (!ok || (slot != 1 && slot != 2)) { +- err << QObject::tr("Invalid YubiKey slot %1").arg(parts[0]) << endl; +- return {}; +- } +- +- if (parts.size() > 1) { +- serial = parts[1].toUInt(&ok, 10); +- if (!ok) { +- err << QObject::tr("Invalid YubiKey serial %1").arg(parts[1]) << endl; +- return {}; +- } +- } +- +- auto key = QSharedPointer(new YkChallengeResponseKeyCLI( +- {serial, slot}, QObject::tr("Please touch the button on your YubiKey to continue…"), err)); +- compositeKey->addChallengeResponseKey(key); +- } +-#else +- Q_UNUSED(yubiKeySlot); +-#endif // WITH_XC_YUBIKEY +- +- auto db = QSharedPointer::create(); +- QString error; +- if (db->open(databaseFilename, compositeKey, &error, false)) { +- return db; +- } else { +- err << error << endl; +- return {}; +- } +- } +- +- /** +- * Read a user password from STDIN or return a password previously +- * set by \link setNextPassword(). +- * +- * @return the password +- */ +- QString getPassword(bool quiet) +- { +- auto& in = STDIN; +- auto& out = quiet ? DEVNULL : STDERR; +- +- setStdinEcho(false); +- QString line = in.readLine(); +- setStdinEcho(true); +- out << endl; +- +- return line; +- } +- +- /** +- * Read optional password from stdin. +- * +- * @return Pointer to the PasswordKey or null if passwordkey is skipped +- * by user +- */ +- QSharedPointer getConfirmedPassword() +- { +- auto& err = STDERR; +- auto& in = STDIN; +- +- QSharedPointer passwordKey; +- +- err << QObject::tr("Enter password to encrypt database (optional): "); +- err.flush(); +- auto password = Utils::getPassword(); +- +- if (password.isEmpty()) { +- err << QObject::tr("Do you want to create a database with an empty password? [y/N]: "); +- err.flush(); +- auto ans = in.readLine(); +- if (ans.toLower().startsWith("y")) { +- passwordKey = QSharedPointer::create(""); +- } +- err << endl; +- } else { +- err << QObject::tr("Repeat password: "); +- err.flush(); +- auto repeat = Utils::getPassword(); +- +- if (password == repeat) { +- passwordKey = QSharedPointer::create(password); +- } else { +- err << QObject::tr("Error: Passwords do not match.") << endl; +- } +- } +- +- return passwordKey; +- } +- +- /** +- * A valid and running event loop is needed to use the global QClipboard, +- * so we need to use this from the CLI. +- */ +- int clipText(const QString& text) +- { +- auto& err = STDERR; +- +- // List of programs and their arguments +- QList> clipPrograms; +- +-#ifdef Q_OS_UNIX +- if (QProcessEnvironment::systemEnvironment().contains("WAYLAND_DISPLAY")) { +- clipPrograms << qMakePair(QStringLiteral("wl-copy"), QStringLiteral("")); +- } else { +- clipPrograms << qMakePair(QStringLiteral("xclip"), QStringLiteral("-selection clipboard -i")); +- } +-#endif +- +-#ifdef Q_OS_MACOS +- clipPrograms << qMakePair(QStringLiteral("pbcopy"), QStringLiteral("")); +-#endif +- +-#ifdef Q_OS_WIN +- clipPrograms << qMakePair(QStringLiteral("clip"), QStringLiteral("")); +-#endif +- +- if (clipPrograms.isEmpty()) { +- err << QObject::tr("No program defined for clipboard manipulation"); +- err.flush(); +- return EXIT_FAILURE; +- } +- +- QStringList failedProgramNames; +- +- for (auto prog : clipPrograms) { +- QScopedPointer clipProcess(new QProcess(nullptr)); +- +- // Skip empty parts, otherwise the program may clip the empty string +- QStringList progArgs = prog.second.split(" ", QString::SkipEmptyParts); +- +- clipProcess->start(prog.first, progArgs); +- clipProcess->waitForStarted(); +- +- if (clipProcess->state() != QProcess::Running) { +- failedProgramNames.append(prog.first); +- continue; +- } +- +- if (clipProcess->write(text.toLatin1()) == -1) { +- qDebug("Unable to write to process : %s", qPrintable(clipProcess->errorString())); +- } +- clipProcess->waitForBytesWritten(); +- clipProcess->closeWriteChannel(); +- clipProcess->waitForFinished(); +- +- if (clipProcess->exitCode() == EXIT_SUCCESS) { +- return EXIT_SUCCESS; +- } +- } +- +- // No clipping program worked +- err << QObject::tr("All clipping programs failed. Tried %1\n").arg(failedProgramNames.join(", ")); +- err.flush(); +- return EXIT_FAILURE; +- } +- +- /** +- * Splits the given QString into a QString list. For example: +- * +- * "hello world" -> ["hello", "world"] +- * "hello world" -> ["hello", "world"] +- * "hello\\ world" -> ["hello world"] (i.e. backslash is an escape character +- * "\"hello world\"" -> ["hello world"] +- */ +- QStringList splitCommandString(const QString& command) +- { +- QStringList result; +- +- bool insideQuotes = false; +- QString cur; +- for (int i = 0; i < command.size(); ++i) { +- QChar c = command[i]; +- if (c == '\\' && i < command.size() - 1) { +- cur.append(command[i + 1]); +- ++i; +- } else if (!insideQuotes && (c == ' ' || c == '\t')) { +- if (!cur.isEmpty()) { +- result.append(cur); +- cur.clear(); +- } +- } else if (c == '"' && (insideQuotes || i == 0 || command[i - 1].isSpace())) { +- insideQuotes = !insideQuotes; +- } else { +- cur.append(c); +- } +- } +- +- if (!cur.isEmpty()) { +- result.append(cur); +- } +- +- return result; +- } +- +- QStringList findAttributes(const EntryAttributes& attributes, const QString& name) +- { +- QStringList result; +- if (attributes.hasKey(name)) { +- result.append(name); +- return result; +- } +- +- for (const QString& key : attributes.keys()) { +- if (key.compare(name, Qt::CaseSensitivity::CaseInsensitive) == 0) { +- result.append(key); +- } +- } +- +- return result; +- } +- +-} // namespace Utils +diff -urNr keepassxc-2.6.4-orig/src/cli/Utils.h keepassxc-2.6.4-patched/src/cli/Utils.h +--- keepassxc-2.6.4-orig/src/cli/Utils.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/cli/Utils.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,59 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_UTILS_H +-#define KEEPASSXC_UTILS_H +- +-#include "cli/TextStream.h" +-#include "core/Database.h" +-#include "core/EntryAttributes.h" +-#include "keys/CompositeKey.h" +-#include "keys/FileKey.h" +-#include "keys/PasswordKey.h" +-#include +- +-namespace Utils +-{ +- extern QTextStream STDOUT; +- extern QTextStream STDERR; +- extern QTextStream STDIN; +- extern QTextStream DEVNULL; +- +- void setDefaultTextStreams(); +- +- void setStdinEcho(bool enable); +- QString getPassword(bool quiet = false); +- QSharedPointer getConfirmedPassword(); +- int clipText(const QString& text); +- QSharedPointer unlockDatabase(const QString& databaseFilename, +- const bool isPasswordProtected = true, +- const QString& keyFilename = {}, +- const QString& yubiKeySlot = {}, +- bool quiet = false); +- +- QStringList splitCommandString(const QString& command); +- +- /** +- * If `attributes` contains an attribute named `name` (case-sensitive), +- * returns a list containing only `name`. Otherwise, returns the list of +- * all attribute names in `attributes` matching the given name +- * (case-insensitive). +- */ +- QStringList findAttributes(const EntryAttributes& attributes, const QString& name); +-}; // namespace Utils +- +-#endif // KEEPASSXC_UTILS_H +diff -urNr keepassxc-2.6.4-orig/src/CMakeLists.txt keepassxc-2.6.4-patched/src/CMakeLists.txt +--- keepassxc-2.6.4-orig/src/CMakeLists.txt 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +@@ -1,510 +0,0 @@ +-# Copyright (C) 2018 KeePassXC Team +-# Copyright (C) 2010 Felix Geyer +-# +-# This program is free software: you can redistribute it and/or modify +-# it under the terms of the GNU General Public License as published by +-# the Free Software Foundation, either version 2 or (at your option) +-# version 3 of the License. +-# +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY; without even the implied warranty of +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-# GNU General Public License for more details. +-# +-# You should have received a copy of the GNU General Public License +-# along with this program. If not, see . +- +-include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) +- +-find_library(ZXCVBN_LIBRARIES zxcvbn) +-if(NOT ZXCVBN_LIBRARIES) +- add_library(zxcvbn STATIC zxcvbn/zxcvbn.c) +- # Disable error-level shadow issues +- if(CC_HAS_Wshadow_compatible_local) +- set_property(SOURCE zxcvbn/zxcvbn.c APPEND PROPERTY COMPILE_OPTIONS "-Wno-shadow-compatible-local") +- endif() +- if(CC_HAS_Wshadow_local) +- set_property(SOURCE zxcvbn/zxcvbn.c APPEND PROPERTY COMPILE_OPTIONS "-Wno-shadow-local") +- endif() +- include_directories(${CMAKE_CURRENT_SOURCE_DIR}/zxcvbn) +- set(ZXCVBN_LIBRARIES zxcvbn) +-endif(NOT ZXCVBN_LIBRARIES) +- +-set(keepassx_SOURCES +- core/Alloc.cpp +- core/AutoTypeAssociations.cpp +- core/AutoTypeMatch.cpp +- core/Base32.cpp +- core/Bootstrap.cpp +- core/Clock.cpp +- core/Compare.cpp +- core/Config.cpp +- core/CsvParser.cpp +- core/CustomData.cpp +- core/Database.cpp +- core/DatabaseIcons.cpp +- core/Entry.cpp +- core/EntryAttachments.cpp +- core/EntryAttributes.cpp +- core/EntrySearcher.cpp +- core/FileWatcher.cpp +- core/Group.cpp +- core/HibpOffline.cpp +- core/InactivityTimer.cpp +- core/Merger.cpp +- core/Metadata.cpp +- core/PasswordGenerator.cpp +- core/PasswordHealth.cpp +- core/PassphraseGenerator.cpp +- core/Resources.cpp +- core/SignalMultiplexer.cpp +- core/ScreenLockListener.cpp +- core/ScreenLockListenerPrivate.cpp +- core/TimeDelta.cpp +- core/TimeInfo.cpp +- core/Tools.cpp +- core/Translator.cpp +- cli/Utils.cpp +- cli/TextStream.cpp +- crypto/Crypto.cpp +- crypto/CryptoHash.cpp +- crypto/Random.cpp +- crypto/SymmetricCipher.cpp +- crypto/SymmetricCipherGcrypt.cpp +- crypto/kdf/Kdf.cpp +- crypto/kdf/AesKdf.cpp +- crypto/kdf/Argon2Kdf.cpp +- format/CsvExporter.cpp +- format/HtmlExporter.cpp +- format/KeePass1Reader.cpp +- format/KeePass2.cpp +- format/KeePass2RandomStream.cpp +- format/KdbxReader.cpp +- format/KdbxWriter.cpp +- format/KdbxXmlReader.cpp +- format/KeePass2Reader.cpp +- format/KeePass2Writer.cpp +- format/Kdbx3Reader.cpp +- format/Kdbx3Writer.cpp +- format/Kdbx4Reader.cpp +- format/Kdbx4Writer.cpp +- format/KdbxXmlWriter.cpp +- format/OpData01.cpp +- format/OpVaultReader.cpp +- format/OpVaultReaderAttachments.cpp +- format/OpVaultReaderBandEntry.cpp +- format/OpVaultReaderSections.cpp +- gui/styles/styles.qrc +- gui/styles/StateColorPalette.cpp +- gui/styles/base/phantomcolor.cpp +- gui/styles/base/BaseStyle.cpp +- gui/styles/dark/DarkStyle.cpp +- gui/styles/light/LightStyle.cpp +- gui/AboutDialog.cpp +- gui/Application.cpp +- gui/CategoryListWidget.cpp +- gui/Clipboard.cpp +- gui/CloneDialog.cpp +- gui/DatabaseOpenWidget.cpp +- gui/DatabaseTabWidget.cpp +- gui/DatabaseWidget.cpp +- gui/DatabaseWidgetStateSync.cpp +- gui/EntryPreviewWidget.cpp +- gui/DialogyWidget.cpp +- gui/DragTabBar.cpp +- gui/EditWidget.cpp +- gui/EditWidgetIcons.cpp +- gui/EditWidgetProperties.cpp +- gui/FileDialog.cpp +- gui/Font.cpp +- gui/IconModels.cpp +- gui/KeePass1OpenWidget.cpp +- gui/KMessageWidget.cpp +- gui/MainWindow.cpp +- gui/MessageBox.cpp +- gui/MessageWidget.cpp +- gui/OpVaultOpenWidget.cpp +- gui/PasswordEdit.cpp +- gui/PasswordGeneratorWidget.cpp +- gui/ApplicationSettingsWidget.cpp +- gui/SearchWidget.cpp +- gui/SortFilterHideProxyModel.cpp +- gui/SquareSvgWidget.cpp +- gui/TotpSetupDialog.cpp +- gui/TotpDialog.cpp +- gui/TotpExportSettingsDialog.cpp +- gui/DatabaseOpenDialog.cpp +- gui/URLEdit.cpp +- gui/WelcomeWidget.cpp +- gui/csvImport/CsvImportWidget.cpp +- gui/csvImport/CsvImportWizard.cpp +- gui/csvImport/CsvParserModel.cpp +- gui/entry/AutoTypeAssociationsModel.cpp +- gui/entry/AutoTypeMatchModel.cpp +- gui/entry/AutoTypeMatchView.cpp +- gui/entry/EditEntryWidget.cpp +- gui/entry/EntryAttachmentsModel.cpp +- gui/entry/EntryAttachmentsWidget.cpp +- gui/entry/EntryAttributesModel.cpp +- gui/entry/EntryHistoryModel.cpp +- gui/entry/EntryModel.cpp +- gui/entry/EntryView.cpp +- gui/group/EditGroupWidget.cpp +- gui/group/GroupModel.cpp +- gui/group/GroupView.cpp +- gui/databasekey/KeyComponentWidget.cpp +- gui/databasekey/PasswordEditWidget.cpp +- gui/databasekey/YubiKeyEditWidget.cpp +- gui/databasekey/KeyFileEditWidget.cpp +- gui/dbsettings/DatabaseSettingsWidget.cpp +- gui/dbsettings/DatabaseSettingsDialog.cpp +- gui/dbsettings/DatabaseSettingsWidgetGeneral.cpp +- gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.cpp +- gui/dbsettings/DatabaseSettingsWidgetEncryption.cpp +- gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.cpp +- gui/reports/ReportsWidget.cpp +- gui/reports/ReportsDialog.cpp +- gui/reports/ReportsWidgetHealthcheck.cpp +- gui/reports/ReportsPageHealthcheck.cpp +- gui/reports/ReportsWidgetHibp.cpp +- gui/reports/ReportsPageHibp.cpp +- gui/reports/ReportsWidgetStatistics.cpp +- gui/reports/ReportsPageStatistics.cpp +- gui/osutils/OSUtilsBase.cpp +- gui/settings/SettingsWidget.cpp +- gui/widgets/ElidedLabel.cpp +- gui/widgets/PopupHelpWidget.cpp +- gui/wizard/NewDatabaseWizard.cpp +- gui/wizard/NewDatabaseWizardPage.cpp +- gui/wizard/NewDatabaseWizardPageMetaData.cpp +- gui/wizard/NewDatabaseWizardPageEncryption.cpp +- gui/wizard/NewDatabaseWizardPageDatabaseKey.cpp +- keys/CompositeKey.cpp +- keys/FileKey.cpp +- keys/PasswordKey.cpp +- keys/YkChallengeResponseKey.cpp +- keys/YkChallengeResponseKeyCLI.cpp +- streams/HashedBlockStream.cpp +- streams/HmacBlockStream.cpp +- streams/LayeredStream.cpp +- streams/qtiocompressor.cpp +- streams/StoreDataStream.cpp +- streams/SymmetricCipherStream.cpp +- totp/totp.cpp) +-if(APPLE) +- set(keepassx_SOURCES +- ${keepassx_SOURCES} +- core/ScreenLockListenerMac.cpp +- core/MacPasteboard.cpp +- gui/osutils/macutils/MacUtils.cpp +- gui/osutils/macutils/AppKitImpl.mm +- gui/osutils/macutils/AppKit.h) +-endif() +-if(UNIX AND NOT APPLE) +- set(keepassx_SOURCES +- ${keepassx_SOURCES} +- core/ScreenLockListenerDBus.cpp +- gui/MainWindowAdaptor.cpp +- gui/osutils/nixutils/NixUtils.cpp) +-endif() +-if(MINGW) +- set(keepassx_SOURCES +- ${keepassx_SOURCES} +- core/ScreenLockListenerWin.cpp +- gui/osutils/winutils/WinUtils.cpp) +-endif() +-if(MINGW OR (UNIX AND NOT APPLE)) +- set(keepassx_SOURCES +- ${keepassx_SOURCES} +- core/OSEventFilter.cpp) +-endif() +- +-set(keepassx_SOURCES ${keepassx_SOURCES} +- ../share/icons/icons.qrc +- ../share/wizard/wizard.qrc) +- +-set(keepassx_SOURCES_MAINEXE main.cpp) +- +-add_feature_info(Auto-Type WITH_XC_AUTOTYPE "Automatic password typing") +-add_feature_info(Networking WITH_XC_NETWORKING "Compile KeePassXC with network access code (e.g. for downloading website icons)") +-add_feature_info(KeePassXC-Browser WITH_XC_BROWSER "Browser integration with KeePassXC-Browser") +-add_feature_info(SSHAgent WITH_XC_SSHAGENT "SSH agent integration compatible with KeeAgent") +-add_feature_info(KeeShare WITH_XC_KEESHARE "Sharing integration with KeeShare (requires quazip5 for secure containers)") +-add_feature_info(YubiKey WITH_XC_YUBIKEY "YubiKey HMAC-SHA1 challenge-response") +-add_feature_info(UpdateCheck WITH_XC_UPDATECHECK "Automatic update checking") +-if(UNIX AND NOT APPLE) +- add_feature_info(FdoSecrets WITH_XC_FDOSECRETS "Implement freedesktop.org Secret Storage Spec server side API.") +-endif() +-if(APPLE) +- add_feature_info(TouchID WITH_XC_TOUCHID "TouchID integration") +-endif() +- +-add_subdirectory(browser) +-add_subdirectory(proxy) +-if(WITH_XC_BROWSER) +- set(keepassxcbrowser_LIB keepassxcbrowser) +- set(keepassx_SOURCES ${keepassx_SOURCES} gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp) +- set(keepassx_SOURCES ${keepassx_SOURCES} gui/entry/EntryURLModel.cpp) +-endif() +- +-add_subdirectory(autotype) +-add_subdirectory(cli) +-add_subdirectory(qrcode) +-set(qrcode_LIB qrcode) +- +-add_subdirectory(crypto/ssh) +-if(WITH_XC_CRYPTO_SSH) +- set(crypto_ssh_LIB crypto_ssh) +-endif() +- +-add_subdirectory(keeshare) +-if(WITH_XC_KEESHARE) +- set(keeshare_LIB keeshare) +-endif() +- +-add_subdirectory(sshagent) +-if(WITH_XC_SSHAGENT) +- set(sshagent_LIB sshagent) +-endif() +- +-add_subdirectory(fdosecrets) +-if(WITH_XC_FDOSECRETS) +- set(fdosecrets_LIB fdosecrets) +-endif() +- +-set(autotype_SOURCES +- core/Tools.cpp +- autotype/AutoType.cpp +- autotype/AutoTypeAction.cpp +- autotype/AutoTypeFilterLineEdit.cpp +- autotype/AutoTypeSelectDialog.cpp +- autotype/AutoTypeSelectView.cpp +- autotype/ShortcutWidget.cpp +- autotype/WildcardMatcher.cpp +- autotype/WindowSelectComboBox.cpp) +- +-if(MINGW) +- set(keepassx_SOURCES_MAINEXE ${keepassx_SOURCES_MAINEXE} ${CMAKE_SOURCE_DIR}/share/windows/icon.rc) +-endif() +- +-if(WITH_XC_YUBIKEY) +- list(APPEND keepassx_SOURCES keys/drivers/YubiKey.cpp) +-else() +- list(APPEND keepassx_SOURCES keys/drivers/YubiKey.h keys/drivers/YubiKeyStub.cpp) +-endif() +- +-if(WITH_XC_NETWORKING) +- list(APPEND keepassx_SOURCES +- core/HibpDownloader.cpp +- core/IconDownloader.cpp +- core/NetworkManager.cpp +- gui/UpdateCheckDialog.cpp +- gui/IconDownloaderDialog.cpp +- updatecheck/UpdateChecker.cpp) +-endif() +- +-if(WITH_XC_TOUCHID) +- list(APPEND keepassx_SOURCES touchid/TouchID.mm) +- # TODO: Remove -Wno-error once deprecation warnings have been resolved. +- set_source_files_properties(touchid/TouchID.mm PROPERTY COMPILE_FLAGS "-Wno-old-style-cast -Wno-error") +-endif() +- +-configure_file(config-keepassx.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-keepassx.h) +-configure_file(git-info.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/git-info.h) +- +-add_library(autotype STATIC ${autotype_SOURCES}) +-target_link_libraries(autotype Qt5::Core Qt5::Widgets) +- +-add_library(keepassx_core STATIC ${keepassx_SOURCES}) +- +-set_target_properties(keepassx_core PROPERTIES COMPILE_DEFINITIONS KEEPASSX_BUILDING_CORE) +-target_link_libraries(keepassx_core +- autotype +- ${keepassxcbrowser_LIB} +- ${qrcode_LIB} +- ${fdosecrets_LIB} +- Qt5::Core +- Qt5::Concurrent +- Qt5::Network +- Qt5::Widgets +- ${sodium_LIBRARY_RELEASE} +- ${YUBIKEY_LIBRARIES} +- ${ZXCVBN_LIBRARIES} +- ${ARGON2_LIBRARIES} +- ${ZLIB_LIBRARIES} +- ) +- +-if(WITH_XC_SSHAGENT) +- target_link_libraries(keepassx_core sshagent) +-endif() +-if(WITH_XC_KEESHARE) +- target_link_libraries(keepassx_core keeshare) +-endif() +- +-if(APPLE) +- target_link_libraries(keepassx_core "-framework Foundation -framework AppKit") +- if(Qt5MacExtras_FOUND) +- target_link_libraries(keepassx_core Qt5::MacExtras) +- endif() +- if(WITH_XC_TOUCHID) +- target_link_libraries(keepassx_core "-framework Security") +- target_link_libraries(keepassx_core "-framework LocalAuthentication") +- endif() +-endif() +-if(HAIKU) +- target_link_libraries(keepassx_core network) +-endif() +-if(UNIX AND NOT APPLE) +- target_link_libraries(keepassx_core Qt5::DBus X11) +- include_directories(${Qt5Gui_PRIVATE_INCLUDE_DIRS}) +-endif() +-if(MINGW) +- target_link_libraries(keepassx_core Wtsapi32.lib Ws2_32.lib) +-endif() +- +-if(MINGW) +- include(GenerateProductVersion) +- generate_product_version( +- WIN32_ProductVersionFiles +- NAME "KeePassXC" +- COMPANY_NAME "KeePassXC Team" +- VERSION_MAJOR ${KEEPASSXC_VERSION_MAJOR} +- VERSION_MINOR ${KEEPASSXC_VERSION_MINOR} +- VERSION_PATCH ${KEEPASSXC_VERSION_PATCH} +- ) +-endif() +- +-add_executable(${PROGNAME} WIN32 ${keepassx_SOURCES_MAINEXE} ${WIN32_ProductVersionFiles}) +-target_link_libraries(keepassx_core ${GCRYPT_LIBRARIES} ${GPGERROR_LIBRARIES}) +-target_link_libraries(${PROGNAME} keepassx_core) +- +-set_target_properties(${PROGNAME} PROPERTIES ENABLE_EXPORTS ON) +- +-if(APPLE AND WITH_APP_BUNDLE) +- install(FILES ${CMAKE_SOURCE_DIR}/share/macosx/embedded.provisionprofile DESTINATION ${BUNDLE_INSTALL_DIR}) +- configure_file(${CMAKE_SOURCE_DIR}/share/macosx/Info.plist.cmake ${CMAKE_CURRENT_BINARY_DIR}/Info.plist) +- set_target_properties(${PROGNAME} PROPERTIES +- MACOSX_BUNDLE ON +- MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_BINARY_DIR}/Info.plist) +- +- if(WITH_XC_TOUCHID) +- set_target_properties(${PROGNAME} PROPERTIES +- CPACK_BUNDLE_APPLE_ENTITLEMENTS "${CMAKE_SOURCE_DIR}/share/macosx/keepassxc.entitlements") +- endif() +- +- if(QT_MAC_USE_COCOA AND EXISTS "${QT_LIBRARY_DIR}/Resources/qt_menu.nib") +- install(DIRECTORY "${QT_LIBRARY_DIR}/Resources/qt_menu.nib" +- DESTINATION "${DATA_INSTALL_DIR}") +- endif() +- +- set(CPACK_GENERATOR "DragNDrop") +- set(CPACK_DMG_FORMAT "UDBZ") +- set(CPACK_DMG_DS_STORE "${CMAKE_SOURCE_DIR}/share/macosx/DS_Store.in") +- set(CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_SOURCE_DIR}/share/macosx/background.tiff") +- set(CPACK_DMG_VOLUME_NAME "${PROGNAME}") +- set(CPACK_SYSTEM_NAME "OSX") +- set(CPACK_STRIP_FILES ON) +- set(CPACK_PACKAGE_FILE_NAME "${PROGNAME}-${KEEPASSXC_VERSION}") +- include(CPack) +- +- add_custom_command(TARGET ${PROGNAME} +- POST_BUILD +- COMMAND ${MACDEPLOYQT_EXE} ${PROGNAME}.app +- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src +- COMMENT "Deploying app bundle") +-endif() +- +-install(TARGETS ${PROGNAME} +- BUNDLE DESTINATION . COMPONENT Runtime +- RUNTIME DESTINATION ${BIN_INSTALL_DIR} COMPONENT Runtime) +- +-if(MINGW) +- if(${CMAKE_SIZEOF_VOID_P} EQUAL "8") +- set(OUTPUT_FILE_POSTFIX "Win64") +- else() +- set(OUTPUT_FILE_POSTFIX "Win32") +- endif() +- +- # We have to copy the license file in the configuration phase. +- # CMake checks that CPACK_RESOURCE_FILE_LICENSE actually exists and +- # we have to copy it because WiX needs it to have a .txt extension. +- execute_process(COMMAND ${CMAKE_COMMAND} -E copy +- "${CMAKE_SOURCE_DIR}/LICENSE.GPL-2" +- "${CMAKE_CURRENT_BINARY_DIR}/INSTALLER_LICENSE.txt") +- +- string(REGEX REPLACE "-.*$" "" KEEPASSXC_VERSION_CLEAN ${KEEPASSXC_VERSION}) +- +- set(CPACK_GENERATOR "ZIP;WIX") +- set(CPACK_STRIP_FILES OFF) +- set(CPACK_PACKAGE_FILE_NAME "${PROGNAME}-${KEEPASSXC_VERSION}-${OUTPUT_FILE_POSTFIX}") +- set(CPACK_PACKAGE_INSTALL_DIRECTORY ${PROGNAME}) +- set(CPACK_PACKAGE_VERSION ${KEEPASSXC_VERSION_CLEAN}) +- set(CPACK_PACKAGE_VENDOR "${PROGNAME} Team") +- string(REGEX REPLACE "/" "\\\\\\\\" CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/share/windows/installer-header.bmp") +- set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_BINARY_DIR}/INSTALLER_LICENSE.txt") +- set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON) +- set(CPACK_NSIS_MUI_ICON "${CMAKE_SOURCE_DIR}/share/windows/keepassxc.ico") +- set(CPACK_NSIS_MUI_UNIICON "${CPACK_NSIS_MUI_ICON}") +- set(CPACK_NSIS_INSTALLED_ICON_NAME "\\\\${PROGNAME}.exe") +- string(REGEX REPLACE "/" "\\\\\\\\" CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP "${CMAKE_SOURCE_DIR}/share/windows/installer-wizard.bmp") +- set(CPACK_NSIS_MUI_UNWELCOMEFINISHPAGE_BITMAP "${CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP}") +- set(CPACK_NSIS_CREATE_ICONS_EXTRA "CreateShortCut '$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\${PROGNAME}.lnk' '$INSTDIR\\\\${PROGNAME}.exe'") +- set(CPACK_NSIS_DELETE_ICONS_EXTRA "Delete '$SMPROGRAMS\\\\$START_MENU\\\\${PROGNAME}.lnk'") +- set(CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS "ExecWait 'Taskkill /IM KeePassXC.exe'") +- set(CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS "${CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS}\nExecWait 'Taskkill /IM keepassxc-proxy.exe /F'") +- set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "ExecWait 'Taskkill /IM KeePassXC.exe'") +- set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "${CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS}\nExecWait 'Taskkill /IM keepassxc-proxy.exe /F'") +- set(CPACK_NSIS_URL_INFO_ABOUT "https://keepassxc.org") +- set(CPACK_NSIS_DISPLAY_NAME ${PROGNAME}) +- set(CPACK_NSIS_PACKAGE_NAME "${PROGNAME} v${KEEPASSXC_VERSION}") +- set(CPACK_NSIS_MUI_FINISHPAGE_RUN "../${PROGNAME}.exe") +- set(CPACK_WIX_UPGRADE_GUID 88785A72-3EAE-4F29-89E3-BC6B19BA9A5B) +- set(CPACK_WIX_PRODUCT_ICON "${CMAKE_SOURCE_DIR}/share/windows/keepassxc.ico") +- set(CPACK_WIX_UI_BANNER "${CMAKE_SOURCE_DIR}/share/windows/wix-banner.bmp") +- set(CPACK_WIX_UI_DIALOG "${CMAKE_SOURCE_DIR}/share/windows/wix-dialog.bmp") +- set(CPACK_WIX_UI_REF "KPXC_InstallDir") +- set(CPACK_WIX_TEMPLATE "${CMAKE_SOURCE_DIR}/share/windows/wix-template.xml") +- set(CPACK_WIX_PATCH_FILE "${CMAKE_SOURCE_DIR}/share/windows/wix-patch.xml") +- set(CPACK_WIX_EXTRA_SOURCES +- "${CMAKE_SOURCE_DIR}/share/windows/KPXC_InstallDir.wxs" +- "${CMAKE_SOURCE_DIR}/share/windows/KPXC_InstallDirDlg.wxs" +- "${CMAKE_SOURCE_DIR}/share/windows/KPXC_ExitDlg.wxs") +- set(CPACK_WIX_PROPERTY_ARPURLINFOABOUT "https://keepassxc.org") +- set(CPACK_WIX_EXTENSIONS "WixUtilExtension.dll") +- include(CPack) +- +- install(CODE "set(gp_tool \"objdump\")" COMPONENT Runtime) +- +- # Deploy all 3rd party library dependencies first +- install(CODE "include(BundleUtilities) +- fixup_bundle(\"\${CMAKE_INSTALL_PREFIX}/${PROGNAME}.exe\" \"\" \"\")" +- COMPONENT Runtime) +- +- # Use windeployqt.exe to setup Qt dependencies +- if(Qt5Core_VERSION VERSION_LESS "5.14.1") +- set(WINDEPLOYQT_MODE "--release") +- if(CMAKE_BUILD_TYPE_LOWER STREQUAL "debug") +- set(WINDEPLOYQT_MODE "--debug") +- endif() +- endif() +- +- install(CODE "execute_process(COMMAND ${WINDEPLOYQT_EXE} ${PROGNAME}.exe ${WINDEPLOYQT_MODE} WORKING_DIRECTORY \${CMAKE_INSTALL_PREFIX} OUTPUT_QUIET)" +- COMPONENT Runtime) +- +- # install CA cert chains +- install(FILES ${Qt5_PREFIX}/ssl/certs/ca-bundle.crt DESTINATION "ssl/certs") +- # install OpenSSL library +- if(WITH_XC_NETWORKING) +- find_file(OPENSSL_DLL NAMES libssl-1_1.dll libssl-1_1-x64.dll) +- if (NOT OPENSSL_DLL) +- message(FATAL_ERROR "Cannot find libssl dll, ensure openssl is properly installed.") +- endif() +- +- find_file(CRYPTO_DLL NAMES libcrypto-1_1.dll libcrypto-1_1-x64.dll) +- if (NOT CRYPTO_DLL) +- message(FATAL_ERROR "Cannot find libcrypto dll, ensure libgcrypt is properly installed.") +- endif() +- +- install(FILES ${OPENSSL_DLL} ${CRYPTO_DLL} DESTINATION ".") +- endif() +-endif() +diff -urNr keepassxc-2.6.4-orig/src/config-keepassx.h.cmake keepassxc-2.6.4-patched/src/config-keepassx.h.cmake +--- keepassxc-2.6.4-orig/src/config-keepassx.h.cmake 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/config-keepassx.h.cmake 1970-01-01 01:00:00.000000000 +0100 +@@ -1,41 +0,0 @@ +-/* config-keepassx.h. Generated by cmake from config-keepassx.h.cmake */ +- +-#ifndef KEEPASSX_CONFIG_KEEPASSX_H +-#define KEEPASSX_CONFIG_KEEPASSX_H +- +-#define KEEPASSXC_VERSION "@KEEPASSXC_VERSION@" +- +-#define KEEPASSX_SOURCE_DIR "@CMAKE_SOURCE_DIR@" +-#define KEEPASSX_BINARY_DIR "@CMAKE_BINARY_DIR@" +- +-#define KEEPASSX_PREFIX_DIR "@CMAKE_INSTALL_PREFIX@" +-#define KEEPASSX_PLUGIN_DIR "@PLUGIN_INSTALL_DIR@" +-#define KEEPASSX_DATA_DIR "@DATA_INSTALL_DIR@" +- +-#cmakedefine WITH_XC_AUTOTYPE +-#cmakedefine WITH_XC_NETWORKING +-#cmakedefine WITH_XC_BROWSER +-#cmakedefine WITH_XC_YUBIKEY +-#cmakedefine WITH_XC_SSHAGENT +-#cmakedefine WITH_XC_KEESHARE +-#cmakedefine WITH_XC_KEESHARE_INSECURE +-#cmakedefine WITH_XC_KEESHARE_SECURE +-#cmakedefine WITH_XC_UPDATECHECK +-#cmakedefine WITH_XC_TOUCHID +-#cmakedefine WITH_XC_FDOSECRETS +- +-#cmakedefine KEEPASSXC_BUILD_TYPE "@KEEPASSXC_BUILD_TYPE@" +-#cmakedefine KEEPASSXC_BUILD_TYPE_RELEASE +-#cmakedefine KEEPASSXC_BUILD_TYPE_PRE_RELEASE +-#cmakedefine KEEPASSXC_BUILD_TYPE_SNAPSHOT +- +-#cmakedefine KEEPASSXC_DIST +-#cmakedefine KEEPASSXC_DIST_TYPE "@KEEPASSXC_DIST_TYPE@" +-#cmakedefine KEEPASSXC_DIST_SNAP +-#cmakedefine KEEPASSXC_DIST_APPIMAGE +- +-#cmakedefine HAVE_PR_SET_DUMPABLE 1 +-#cmakedefine HAVE_RLIMIT_CORE 1 +-#cmakedefine HAVE_PT_DENY_ATTACH 1 +- +-#endif // KEEPASSX_CONFIG_KEEPASSX_H +diff -urNr keepassxc-2.6.4-orig/src/core/Alloc.cpp keepassxc-2.6.4-patched/src/core/Alloc.cpp +--- keepassxc-2.6.4-orig/src/core/Alloc.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/Alloc.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,97 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include +-#include +-#include +-#include +-#if defined(Q_OS_MACOS) +-#include +-#elif defined(Q_OS_FREEBSD) +-#include +-#elif defined(HAVE_MALLOC_H) +-#include +-#else +-#include +-#endif +- +-#if defined(NDEBUG) && !defined(__cpp_sized_deallocation) +-#warning "KeePassXC is being compiled without sized deallocation support. Deletes may be slow." +-#endif +- +-/** +- * Custom sized delete operator which securely zeroes out allocated +- * memory before freeing it (requires C++14 sized deallocation support). +- */ +-void operator delete(void* ptr, std::size_t size) noexcept +-{ +- if (!ptr) { +- return; +- } +- +- sodium_memzero(ptr, size); +- std::free(ptr); +-} +- +-void operator delete[](void* ptr, std::size_t size) noexcept +-{ +- ::operator delete(ptr, size); +-} +- +-/** +- * Custom delete operator which securely zeroes out +- * allocated memory before freeing it. +- */ +-void operator delete(void* ptr) noexcept +-{ +- if (!ptr) { +- return; +- } +- +-#if defined(Q_OS_WIN) +- ::operator delete(ptr, _msize(ptr)); +-#elif defined(Q_OS_MACOS) +- ::operator delete(ptr, malloc_size(ptr)); +-#elif defined(HAVE_MALLOC_USABLE_SIZE) +- ::operator delete(ptr, malloc_usable_size(ptr)); +-#else +- // whatever OS this is, give up and simply free stuff +- std::free(ptr); +-#endif +-} +- +-void operator delete[](void* ptr) noexcept +-{ +- ::operator delete(ptr); +-} +- +-// clang-format versions less than 10.0 refuse to put a space before "noexcept" +-// clang-format off +-/** +- * Custom insecure delete operator that does not zero out memory before +- * freeing a buffer. Can be used for better performance. +- */ +-void operator delete(void* ptr, bool) noexcept +-{ +- std::free(ptr); +-} +-// clang-format on +- +-void operator delete[](void* ptr, bool) noexcept +-{ +- ::operator delete(ptr, false); +-} +diff -urNr keepassxc-2.6.4-orig/src/core/AsyncTask.h keepassxc-2.6.4-patched/src/core/AsyncTask.h +--- keepassxc-2.6.4-orig/src/core/AsyncTask.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/AsyncTask.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,85 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_ASYNCTASK_HPP +-#define KEEPASSXC_ASYNCTASK_HPP +- +-#include +-#include +-#include +- +-/** +- * Asynchronously run computations outside the GUI thread. +- */ +-namespace AsyncTask +-{ +- +- /** +- * Wait for the given future without blocking the event loop. +- * +- * @param future future to wait for +- * @return async task result +- */ +- template +- typename std::result_of::type +- waitForFuture(QFuture::type> future) +- { +- QEventLoop loop; +- QFutureWatcher::type> watcher; +- QObject::connect(&watcher, SIGNAL(finished()), &loop, SLOT(quit())); +- watcher.setFuture(future); +- loop.exec(); +- return future.result(); +- } +- +- /** +- * Run a given task and wait for it to finish without blocking the event loop. +- * +- * @param task std::function object to run +- * @return async task result +- */ +- template +- typename std::result_of::type runAndWaitForFuture(FunctionObject task) +- { +- return waitForFuture(QtConcurrent::run(task)); +- } +- +- /** +- * Run a given task then call the defined callback. Prevents event loop blocking and +- * ensures the validity of the follow-on task through the context. If the context is +- * deleted, the callback will not be processed preventing use after free errors. +- * +- * @param task std::function object to run +- * @param context QObject responsible for calling this function +- * @param callback std::function object to run after the task completess +- */ +- template +- void runThenCallback(FunctionObject task, QObject* context, FunctionObject2 callback) +- { +- typedef QFutureWatcher::type> FutureWatcher; +- auto future = QtConcurrent::run(task); +- auto watcher = new FutureWatcher(context); +- QObject::connect(watcher, &QFutureWatcherBase::finished, context, [=]() { +- watcher->deleteLater(); +- callback(future.result()); +- }); +- watcher->setFuture(future); +- } +- +-}; // namespace AsyncTask +- +-#endif // KEEPASSXC_ASYNCTASK_HPP +diff -urNr keepassxc-2.6.4-orig/src/core/AutoTypeAssociations.cpp keepassxc-2.6.4-patched/src/core/AutoTypeAssociations.cpp +--- keepassxc-2.6.4-orig/src/core/AutoTypeAssociations.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/AutoTypeAssociations.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,135 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "AutoTypeAssociations.h" +- +-bool AutoTypeAssociations::Association::operator==(const AutoTypeAssociations::Association& other) const +-{ +- return window == other.window && sequence == other.sequence; +-} +- +-bool AutoTypeAssociations::Association::operator!=(const AutoTypeAssociations::Association& other) const +-{ +- return window != other.window || sequence != other.sequence; +-} +- +-AutoTypeAssociations::AutoTypeAssociations(QObject* parent) +- : QObject(parent) +-{ +-} +- +-void AutoTypeAssociations::copyDataFrom(const AutoTypeAssociations* other) +-{ +- if (m_associations == other->m_associations) { +- return; +- } +- +- emit aboutToReset(); +- m_associations = other->m_associations; +- emit reset(); +- emit modified(); +-} +- +-void AutoTypeAssociations::add(const AutoTypeAssociations::Association& association) +-{ +- int index = m_associations.size(); +- emit aboutToAdd(index); +- m_associations.append(association); +- emit added(index); +- emit modified(); +-} +- +-void AutoTypeAssociations::remove(int index) +-{ +- Q_ASSERT(index >= 0 && index < m_associations.size()); +- +- emit aboutToRemove(index); +- m_associations.removeAt(index); +- emit removed(index); +- emit modified(); +-} +- +-void AutoTypeAssociations::removeEmpty() +-{ +- QMutableListIterator i(m_associations); +- while (i.hasNext()) { +- const Association& assoc = i.next(); +- if (assoc.window.isEmpty() && assoc.sequence.isEmpty()) { +- i.remove(); +- } +- } +-} +- +-void AutoTypeAssociations::update(int index, const AutoTypeAssociations::Association& association) +-{ +- Q_ASSERT(index >= 0 && index < m_associations.size()); +- +- if (m_associations.at(index) != association) { +- m_associations[index] = association; +- emit dataChanged(index); +- emit modified(); +- } +-} +- +-AutoTypeAssociations::Association AutoTypeAssociations::get(int index) const +-{ +- Q_ASSERT(index >= 0 && index < m_associations.size()); +- +- return m_associations.at(index); +-} +- +-QList AutoTypeAssociations::getAll() const +-{ +- return m_associations; +-} +- +-int AutoTypeAssociations::size() const +-{ +- return m_associations.size(); +-} +- +-int AutoTypeAssociations::associationsSize() const +-{ +- int size = 0; +- for (const Association& association : m_associations) { +- size += association.sequence.toUtf8().size() + association.window.toUtf8().size(); +- } +- return size; +-} +- +-void AutoTypeAssociations::clear() +-{ +- m_associations.clear(); +-} +- +-bool AutoTypeAssociations::operator==(const AutoTypeAssociations& other) const +-{ +- if (m_associations.count() != other.m_associations.count()) { +- return false; +- } +- for (int i = 0; i < m_associations.count(); ++i) { +- if (m_associations[i] != other.m_associations[i]) { +- return false; +- } +- } +- return true; +-} +- +-bool AutoTypeAssociations::operator!=(const AutoTypeAssociations& other) const +-{ +- return !(*this == other); +-} +diff -urNr keepassxc-2.6.4-orig/src/core/AutoTypeAssociations.h keepassxc-2.6.4-patched/src/core/AutoTypeAssociations.h +--- keepassxc-2.6.4-orig/src/core/AutoTypeAssociations.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/AutoTypeAssociations.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,68 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_AUTOTYPEASSOCIATIONS_H +-#define KEEPASSX_AUTOTYPEASSOCIATIONS_H +- +-#include +- +-class AutoTypeAssociations : public QObject +-{ +- Q_OBJECT +- +-public: +- struct Association +- { +- QString window; +- QString sequence; +- +- bool operator==(const AutoTypeAssociations::Association& other) const; +- bool operator!=(const AutoTypeAssociations::Association& other) const; +- }; +- +- explicit AutoTypeAssociations(QObject* parent = nullptr); +- void copyDataFrom(const AutoTypeAssociations* other); +- void add(const AutoTypeAssociations::Association& association); +- void remove(int index); +- void removeEmpty(); +- void update(int index, const AutoTypeAssociations::Association& association); +- AutoTypeAssociations::Association get(int index) const; +- QList getAll() const; +- int size() const; +- int associationsSize() const; +- void clear(); +- +- bool operator==(const AutoTypeAssociations& other) const; +- bool operator!=(const AutoTypeAssociations& other) const; +- +-private: +- QList m_associations; +- +-signals: +- void modified(); +- void dataChanged(int index); +- void aboutToAdd(int index); +- void added(int index); +- void aboutToRemove(int index); +- void removed(int index); +- void aboutToReset(); +- void reset(); +-}; +- +-Q_DECLARE_TYPEINFO(AutoTypeAssociations::Association, Q_MOVABLE_TYPE); +- +-#endif // KEEPASSX_AUTOTYPEASSOCIATIONS_H +diff -urNr keepassxc-2.6.4-orig/src/core/AutoTypeMatch.cpp keepassxc-2.6.4-patched/src/core/AutoTypeMatch.cpp +--- keepassxc-2.6.4-orig/src/core/AutoTypeMatch.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/AutoTypeMatch.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,43 +0,0 @@ +-/* +- * Copyright (C) 2015 David Wu +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "AutoTypeMatch.h" +- +-#include +- +-AutoTypeMatch::AutoTypeMatch() +- : entry(nullptr) +- , sequence() +-{ +-} +- +-AutoTypeMatch::AutoTypeMatch(Entry* entry, QString sequence) +- : entry(entry) +- , sequence(std::move(sequence)) +-{ +-} +- +-bool AutoTypeMatch::operator==(const AutoTypeMatch& other) const +-{ +- return entry == other.entry && sequence == other.sequence; +-} +- +-bool AutoTypeMatch::operator!=(const AutoTypeMatch& other) const +-{ +- return entry != other.entry || sequence != other.sequence; +-} +diff -urNr keepassxc-2.6.4-orig/src/core/AutoTypeMatch.h keepassxc-2.6.4-patched/src/core/AutoTypeMatch.h +--- keepassxc-2.6.4-orig/src/core/AutoTypeMatch.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/AutoTypeMatch.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,41 +0,0 @@ +-/* +- * Copyright (C) 2015 David Wu +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_AUTOTYPEMATCH_H +-#define KEEPASSX_AUTOTYPEMATCH_H +- +-#include +-#include +- +-class Entry; +- +-struct AutoTypeMatch +-{ +- Entry* entry; +- QString sequence; +- +- AutoTypeMatch(); +- AutoTypeMatch(Entry* entry, QString sequence); +- +- bool operator==(const AutoTypeMatch& other) const; +- bool operator!=(const AutoTypeMatch& other) const; +-}; +- +-Q_DECLARE_TYPEINFO(AutoTypeMatch, Q_MOVABLE_TYPE); +- +-#endif // KEEPASSX_AUTOTYPEMATCH_H +diff -urNr keepassxc-2.6.4-orig/src/core/Base32.cpp keepassxc-2.6.4-patched/src/core/Base32.cpp +--- keepassxc-2.6.4-orig/src/core/Base32.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/Base32.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,295 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-/* Conforms to RFC 4648. For details, see: https://tools.ietf.org/html/rfc4648 +- * Use the functions Base32::addPadding/1, Base32::removePadding/1 or +- * Base32::sanitizeInput/1 to fix input or output for a particular +- * applications (e.g. to use with Google Authenticator). +- */ +- +-#include "Base32.h" +- +-constexpr quint64 MASK_40BIT = quint64(0xF8) << 32; +-constexpr quint64 MASK_35BIT = quint64(0x7C0000000); +-constexpr quint64 MASK_25BIT = quint64(0x1F00000); +-constexpr quint64 MASK_20BIT = quint64(0xF8000); +-constexpr quint64 MASK_10BIT = quint64(0x3E0); +- +-constexpr char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"; +-constexpr quint8 ALPH_POS_2 = 26; +- +-constexpr quint8 ASCII_2 = static_cast('2'); +-constexpr quint8 ASCII_7 = static_cast('7'); +-constexpr quint8 ASCII_A = static_cast('A'); +-constexpr quint8 ASCII_Z = static_cast('Z'); +-constexpr quint8 ASCII_a = static_cast('a'); +-constexpr quint8 ASCII_z = static_cast('z'); +-constexpr quint8 ASCII_EQ = static_cast('='); +- +-QVariant Base32::decode(const QByteArray& encodedData) +-{ +- if (encodedData.size() <= 0) { +- return QVariant::fromValue(QByteArray("")); +- } +- +- if (encodedData.size() % 8 != 0) { +- return QVariant(); +- } +- +- int nPads = 0; +- for (int i = -1; i > -7; --i) { +- if ('=' == encodedData[encodedData.size() + i]) { +- ++nPads; +- } +- } +- +- int specialOffset; +- int nSpecialBytes; +- +- switch (nPads) { // in {0, 1, 3, 4, 6} +- case 1: +- nSpecialBytes = 4; +- specialOffset = 3; +- break; +- case 3: +- nSpecialBytes = 3; +- specialOffset = 1; +- break; +- case 4: +- nSpecialBytes = 2; +- specialOffset = 4; +- break; +- case 6: +- nSpecialBytes = 1; +- specialOffset = 2; +- break; +- default: +- nSpecialBytes = 0; +- specialOffset = 0; +- } +- +- Q_ASSERT(encodedData.size() > 0); +- const int nQuanta = encodedData.size() / 8; +- const int nBytes = nSpecialBytes > 0 ? (nQuanta - 1) * 5 + nSpecialBytes : nQuanta * 5; +- +- QByteArray data(nBytes, Qt::Uninitialized); +- +- int i = 0; +- int o = 0; +- +- while (i < encodedData.size()) { +- quint64 quantum = 0; +- int nQuantumBytes = 5; +- +- for (int n = 0; n < 8; ++n) { +- auto ch = static_cast(encodedData[i++]); +- if ((ASCII_A <= ch && ch <= ASCII_Z) || (ASCII_a <= ch && ch <= ASCII_z)) { +- ch -= ASCII_A; +- if (ch >= ALPH_POS_2) { +- ch -= ASCII_a - ASCII_A; +- } +- } else { +- if (ASCII_2 <= ch && ch <= ASCII_7) { +- ch -= ASCII_2; +- ch += ALPH_POS_2; +- } else { +- if (ASCII_EQ == ch) { +- if (i == encodedData.size()) { +- // finished with special quantum +- quantum >>= specialOffset; +- nQuantumBytes = nSpecialBytes; +- } +- continue; +- } else { +- // illegal character +- return QVariant(); +- } +- } +- } +- +- quantum <<= 5; +- quantum |= ch; +- } +- +- const int offset = (nQuantumBytes - 1) * 8; +- quint64 mask = quint64(0xFF) << offset; +- for (int n = offset; n >= 0 && o < nBytes; n -= 8) { +- data[o++] = static_cast((quantum & mask) >> n); +- mask >>= 8; +- } +- } +- +- Q_ASSERT(encodedData.size() == i); +- Q_ASSERT(nBytes == o); +- +- return QVariant::fromValue(data); +-} +- +-QByteArray Base32::encode(const QByteArray& data) +-{ +- if (data.size() < 1) { +- return QByteArray(); +- } +- +- const int nBits = data.size() * 8; +- const int rBits = nBits % 40; // in {0, 8, 16, 24, 32} +- const int nQuanta = nBits / 40 + (rBits > 0 ? 1 : 0); +- const int nBytes = nQuanta * 8; +- QByteArray encodedData(nBytes, Qt::Uninitialized); +- +- int i = 0; +- int o = 0; +- int n; +- quint64 mask; +- quint64 quantum; +- +- // 40-bits of input per input group +- while (i + 5 <= data.size()) { +- quantum = 0; +- for (n = 32; n >= 0; n -= 8) { +- quantum |= (static_cast(data[i++]) << n); +- } +- +- mask = MASK_40BIT; +- int index; +- for (n = 35; n >= 0; n -= 5) { +- index = (quantum & mask) >> n; +- Q_ASSERT(0 <= index && index <= 31); +- encodedData[o++] = alphabet[index]; +- mask >>= 5; +- } +- } +- +- // < 40-bits of input at final input group +- if (i < data.size()) { +- Q_ASSERT(8 <= rBits && rBits <= 32); +- quantum = 0; +- for (n = rBits - 8; n >= 0; n -= 8) { +- quantum |= static_cast(data[i++]) << n; +- } +- +- switch (rBits) { +- case 8: // expand to 10 bits +- quantum <<= 2; +- mask = MASK_10BIT; +- n = 5; +- break; +- case 16: // expand to 20 bits +- quantum <<= 4; +- mask = MASK_20BIT; +- n = 15; +- break; +- case 24: // expand to 25 bits +- quantum <<= 1; +- mask = MASK_25BIT; +- n = 20; +- break; +- default: // expand to 35 bits +- Q_ASSERT(32 == rBits); +- quantum <<= 3; +- mask = MASK_35BIT; +- n = 30; +- } +- +- while (n >= 0) { +- int index = (quantum & mask) >> n; +- Q_ASSERT(0 <= index && index <= 31); +- encodedData[o++] = alphabet[index]; +- mask >>= 5; +- n -= 5; +- } +- +- // add pad characters +- while (o < encodedData.size()) { +- encodedData[o++] = '='; +- } +- } +- +- Q_ASSERT(data.size() == i); +- Q_ASSERT(nBytes == o); +- return encodedData; +-} +- +-QByteArray Base32::addPadding(const QByteArray& encodedData) +-{ +- if (encodedData.size() <= 0 || encodedData.size() % 8 == 0) { +- return encodedData; +- } +- +- const int rBytes = encodedData.size() % 8; +- // rBytes must be a member of {2, 4, 5, 7} +- if (1 == rBytes || 3 == rBytes || 6 == rBytes) { +- return encodedData; +- } +- +- QByteArray newEncodedData(encodedData); +- for (int nPads = 8 - rBytes; nPads > 0; --nPads) { +- newEncodedData.append('='); +- } +- +- return newEncodedData; +-} +- +-QByteArray Base32::removePadding(const QByteArray& encodedData) +-{ +- if (encodedData.size() <= 0 || encodedData.size() % 8 != 0) { +- return encodedData; // return same bad input +- } +- +- int nPads = 0; +- for (int i = -1; i > -7; --i) { +- if ('=' == encodedData[encodedData.size() + i]) { +- ++nPads; +- } +- } +- +- QByteArray newEncodedData(encodedData); +- newEncodedData.remove(encodedData.size() - nPads, nPads); +- newEncodedData.resize(encodedData.size() - nPads); +- +- return newEncodedData; +-} +- +-QByteArray Base32::sanitizeInput(const QByteArray& encodedData) +-{ +- if (encodedData.size() <= 0) { +- return encodedData; +- } +- +- QByteArray newEncodedData(encodedData.size(), Qt::Uninitialized); +- int i = 0; +- for (auto ch : encodedData) { +- switch (ch) { +- case '0': +- newEncodedData[i++] = 'O'; +- break; +- case '1': +- newEncodedData[i++] = 'L'; +- break; +- case '8': +- newEncodedData[i++] = 'B'; +- break; +- default: +- if (('A' <= ch && ch <= 'Z') || ('a' <= ch && ch <= 'z') || ('2' <= ch && ch <= '7')) { +- newEncodedData[i++] = ch; +- } +- } +- } +- newEncodedData.resize(i); +- +- return addPadding(newEncodedData); +-} +diff -urNr keepassxc-2.6.4-orig/src/core/Base32.h keepassxc-2.6.4-patched/src/core/Base32.h +--- keepassxc-2.6.4-orig/src/core/Base32.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/Base32.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,42 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-/* Conforms to RFC 4648. For details, see: https://tools.ietf.org/html/rfc4648 +- * Use the functions Base32::addPadding/1, Base32::removePadding/1 or +- * Base32::sanitizeInput/1 to fix input or output for a particular +- * applications (e.g. to use with Google Authenticator). +- */ +- +-#ifndef BASE32_H +-#define BASE32_H +- +-#include +-#include +-#include +- +-class Base32 +-{ +-public: +- Base32() = default; +- Q_REQUIRED_RESULT static QVariant decode(const QByteArray&); +- Q_REQUIRED_RESULT static QByteArray encode(const QByteArray&); +- Q_REQUIRED_RESULT static QByteArray addPadding(const QByteArray&); +- Q_REQUIRED_RESULT static QByteArray removePadding(const QByteArray&); +- Q_REQUIRED_RESULT static QByteArray sanitizeInput(const QByteArray&); +-}; +- +-#endif // BASE32_H +diff -urNr keepassxc-2.6.4-orig/src/core/Bootstrap.cpp keepassxc-2.6.4-patched/src/core/Bootstrap.cpp +--- keepassxc-2.6.4-orig/src/core/Bootstrap.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/Bootstrap.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,294 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "Bootstrap.h" +-#include "config-keepassx.h" +-#include "core/Config.h" +-#include "core/Translator.h" +-#include "gui/MessageBox.h" +- +-#ifdef Q_OS_WIN +-#include // for createWindowsDACL() +-#include // for Sleep(), SetDllDirectoryA(), SetSearchPathMode(), ... +-#undef MessageBox +-#endif +- +-#if defined(HAVE_RLIMIT_CORE) +-#include +-#endif +- +-#if defined(HAVE_PR_SET_DUMPABLE) +-#include +-#endif +- +-#ifdef HAVE_PT_DENY_ATTACH +-// clang-format off +-#include +-#include +-// clang-format on +-#endif +- +-namespace Bootstrap +-{ +- /** +- * When QNetworkAccessManager is instantiated it regularly starts polling +- * all network interfaces to see if anything changes and if so, what. This +- * creates a latency spike every 10 seconds on Mac OS 10.12+ and Windows 7 >= +- * when on a wifi connection. +- * So here we disable it for lack of better measure. +- * This will also cause this message: QObject::startTimer: Timers cannot +- * have negative intervals +- * For more info see: +- * - https://bugreports.qt.io/browse/QTBUG-40332 +- * - https://bugreports.qt.io/browse/QTBUG-46015 +- */ +- static inline void applyEarlyQNetworkAccessManagerWorkaround() +- { +- qputenv("QT_BEARER_POLL_TIMEOUT", QByteArray::number(-1)); +- } +- +- /** +- * Perform early application bootstrapping that does not rely on a QApplication +- * being present. +- */ +- void bootstrap() +- { +-#ifdef QT_NO_DEBUG +- disableCoreDumps(); +-#endif +- +- setupSearchPaths(); +- applyEarlyQNetworkAccessManagerWorkaround(); +- } +- +- /** +- * Perform early application bootstrapping such as setting up search paths, +- * configuration OS security properties, and loading translators. +- * A QApplication object has to be instantiated before calling this function. +- */ +- void bootstrapApplication() +- { +- bootstrap(); +- Translator::installTranslators(); +- +-#ifdef Q_OS_WIN +- // Qt on Windows uses "MS Shell Dlg 2" as the default font for many widgets, which resolves +- // to Tahoma 8pt, whereas the correct font would be "Segoe UI" 9pt. +- // Apparently, some widgets are already using the correct font. Thanks, MuseScore for this neat fix! +- QApplication::setFont(QApplication::font("QMessageBox")); +-#endif +- +- MessageBox::initializeButtonDefs(); +- +-#ifdef Q_OS_MACOS +- // Don't show menu icons on OSX +- QApplication::setAttribute(Qt::AA_DontShowIconsInMenus); +-#endif +- } +- +- /** +- * Restore the main window's state after launch +- * +- * @param mainWindow the main window whose state to restore +- */ +- void restoreMainWindowState(MainWindow& mainWindow) +- { +- // start minimized if configured +- if (config()->get(Config::GUI_MinimizeOnStartup).toBool()) { +- mainWindow.hideWindow(); +- } else { +- mainWindow.bringToFront(); +- } +- +- if (config()->get(Config::OpenPreviousDatabasesOnStartup).toBool()) { +- const QStringList fileNames = config()->get(Config::LastOpenedDatabases).toStringList(); +- for (const QString& filename : fileNames) { +- if (!filename.isEmpty() && QFile::exists(filename)) { +- mainWindow.openDatabase(filename); +- } +- } +- auto lastActiveFile = config()->get(Config::LastActiveDatabase).toString(); +- if (!lastActiveFile.isEmpty()) { +- mainWindow.openDatabase(lastActiveFile); +- } +- } +- } +- +- // LCOV_EXCL_START +- void disableCoreDumps() +- { +- // default to true +- // there is no point in printing a warning if this is not implemented on the platform +- bool success = true; +- +-#if defined(HAVE_RLIMIT_CORE) +- struct rlimit limit; +- limit.rlim_cur = 0; +- limit.rlim_max = 0; +- success = success && (setrlimit(RLIMIT_CORE, &limit) == 0); +-#endif +- +-#if defined(HAVE_PR_SET_DUMPABLE) +- success = success && (prctl(PR_SET_DUMPABLE, 0) == 0); +-#endif +- +-// Mac OS X +-#ifdef HAVE_PT_DENY_ATTACH +- success = success && (ptrace(PT_DENY_ATTACH, 0, 0, 0) == 0); +-#endif +- +-#ifdef Q_OS_WIN +- success = success && createWindowsDACL(); +-#endif +- +- if (!success) { +- qWarning("Unable to disable core dumps."); +- } +- } +- +- // +- // This function grants the user associated with the process token minimal access rights and +- // denies everything else on Windows. This includes PROCESS_QUERY_INFORMATION and +- // PROCESS_VM_READ access rights that are required for MiniDumpWriteDump() or ReadProcessMemory(). +- // We do this using a discretionary access control list (DACL). Effectively this prevents +- // crash dumps and disallows other processes from accessing our memory. This works as long +- // as you do not have admin privileges, since then you are able to grant yourself the +- // SeDebugPrivilege or SeTakeOwnershipPrivilege and circumvent the DACL. +- // +- bool createWindowsDACL() +- { +- bool bSuccess = false; +- +-#ifdef Q_OS_WIN +- // Process token and user +- HANDLE hToken = nullptr; +- PTOKEN_USER pTokenUser = nullptr; +- DWORD cbBufferSize = 0; +- PSID pLocalSystemSid = nullptr; +- DWORD pLocalSystemSidSize = SECURITY_MAX_SID_SIZE; +- +- // Access control list +- PACL pACL = nullptr; +- DWORD cbACL = 0; +- +- // Open the access token associated with the calling process +- if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken)) { +- goto Cleanup; +- } +- +- // Retrieve the token information in a TOKEN_USER structure +- GetTokenInformation(hToken, TokenUser, nullptr, 0, &cbBufferSize); +- +- pTokenUser = static_cast(HeapAlloc(GetProcessHeap(), 0, cbBufferSize)); +- if (pTokenUser == nullptr) { +- goto Cleanup; +- } +- +- if (!GetTokenInformation(hToken, TokenUser, pTokenUser, cbBufferSize, &cbBufferSize)) { +- goto Cleanup; +- } +- +- if (!IsValidSid(pTokenUser->User.Sid)) { +- goto Cleanup; +- } +- +- // Retrieve LocalSystem account SID +- pLocalSystemSid = static_cast(HeapAlloc(GetProcessHeap(), 0, pLocalSystemSidSize)); +- if (pLocalSystemSid == nullptr) { +- goto Cleanup; +- } +- +- if (!CreateWellKnownSid(WinLocalSystemSid, nullptr, pLocalSystemSid, &pLocalSystemSidSize)) { +- goto Cleanup; +- } +- +- // Calculate the amount of memory that must be allocated for the DACL +- cbACL = sizeof(ACL) + sizeof(ACCESS_ALLOWED_ACE) + GetLengthSid(pTokenUser->User.Sid) +- + sizeof(ACCESS_ALLOWED_ACE) + GetLengthSid(pLocalSystemSid); +- +- // Create and initialize an ACL +- pACL = static_cast(HeapAlloc(GetProcessHeap(), 0, cbACL)); +- if (pACL == nullptr) { +- goto Cleanup; +- } +- +- if (!InitializeAcl(pACL, cbACL, ACL_REVISION)) { +- goto Cleanup; +- } +- +- // Add allowed access control entries, everything else is denied +- if (!AddAccessAllowedAce( +- pACL, +- ACL_REVISION, +- SYNCHRONIZE | PROCESS_QUERY_LIMITED_INFORMATION | PROCESS_TERMINATE, // same as protected process +- pTokenUser->User.Sid // pointer to the trustee's SID +- )) { +- goto Cleanup; +- } +- +-#ifdef WITH_XC_SSHAGENT +- // OpenSSH for Windows ssh-agent service is running as LocalSystem +- if (!AddAccessAllowedAce(pACL, +- ACL_REVISION, +- PROCESS_QUERY_INFORMATION | PROCESS_DUP_HANDLE, // just enough for ssh-agent +- pLocalSystemSid // known LocalSystem sid +- )) { +- goto Cleanup; +- } +-#endif +- +- // Set discretionary access control list +- bSuccess = ERROR_SUCCESS +- == SetSecurityInfo(GetCurrentProcess(), // object handle +- SE_KERNEL_OBJECT, // type of object +- DACL_SECURITY_INFORMATION, // change only the objects DACL +- nullptr, +- nullptr, // do not change owner or group +- pACL, // DACL specified +- nullptr // do not change SACL +- ); +- +- Cleanup: +- +- if (pACL != nullptr) { +- HeapFree(GetProcessHeap(), 0, pACL); +- } +- if (pLocalSystemSid != nullptr) { +- HeapFree(GetProcessHeap(), 0, pLocalSystemSid); +- } +- if (pTokenUser != nullptr) { +- HeapFree(GetProcessHeap(), 0, pTokenUser); +- } +- if (hToken != nullptr) { +- CloseHandle(hToken); +- } +-#endif +- +- return bSuccess; +- } +- // LCOV_EXCL_STOP +- +- void setupSearchPaths() +- { +-#ifdef Q_OS_WIN +- // Make sure Windows doesn't load DLLs from the current working directory +- SetDllDirectoryA(""); +- SetSearchPathMode(BASE_SEARCH_PATH_ENABLE_SAFE_SEARCHMODE); +-#endif +- } +- +-} // namespace Bootstrap +diff -urNr keepassxc-2.6.4-orig/src/core/Bootstrap.h keepassxc-2.6.4-patched/src/core/Bootstrap.h +--- keepassxc-2.6.4-orig/src/core/Bootstrap.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/Bootstrap.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,33 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_BOOTSTRAP_H +-#define KEEPASSXC_BOOTSTRAP_H +- +-#include "gui/MainWindow.h" +- +-namespace Bootstrap +-{ +- void bootstrap(); +- void bootstrapApplication(); +- void restoreMainWindowState(MainWindow& mainWindow); +- void disableCoreDumps(); +- bool createWindowsDACL(); +- void setupSearchPaths(); +-}; // namespace Bootstrap +- +-#endif // KEEPASSXC_BOOTSTRAP_H +diff -urNr keepassxc-2.6.4-orig/src/core/Clock.cpp keepassxc-2.6.4-patched/src/core/Clock.cpp +--- keepassxc-2.6.4-orig/src/core/Clock.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/Clock.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,115 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +-#include "Clock.h" +- +-QSharedPointer Clock::m_instance; +- +-QDateTime Clock::currentDateTimeUtc() +-{ +- return instance().currentDateTimeUtcImpl(); +-} +- +-QDateTime Clock::currentDateTime() +-{ +- return instance().currentDateTimeImpl(); +-} +- +-uint Clock::currentSecondsSinceEpoch() +-{ +- // TODO: change to toSecsSinceEpoch() when min Qt >= 5.8 +- return instance().currentDateTimeImpl().toTime_t(); +-} +- +-qint64 Clock::currentMilliSecondsSinceEpoch() +-{ +- return instance().currentDateTimeImpl().toMSecsSinceEpoch(); +-} +- +-QDateTime Clock::serialized(const QDateTime& dateTime) +-{ +- auto time = dateTime.time(); +- if (time.isValid() && time.msec() != 0) { +- return dateTime.addMSecs(-time.msec()); +- } +- return dateTime; +-} +- +-QDateTime Clock::datetimeUtc(int year, int month, int day, int hour, int min, int second) +-{ +- return QDateTime(QDate(year, month, day), QTime(hour, min, second), Qt::UTC); +-} +- +-QDateTime Clock::datetime(int year, int month, int day, int hour, int min, int second) +-{ +- return QDateTime(QDate(year, month, day), QTime(hour, min, second), Qt::LocalTime); +-} +- +-QDateTime Clock::datetimeUtc(qint64 msecSinceEpoch) +-{ +- return QDateTime::fromMSecsSinceEpoch(msecSinceEpoch, Qt::UTC); +-} +- +-QDateTime Clock::datetime(qint64 msecSinceEpoch) +-{ +- return QDateTime::fromMSecsSinceEpoch(msecSinceEpoch, Qt::LocalTime); +-} +- +-QDateTime Clock::parse(const QString& text, Qt::DateFormat format) +-{ +- return QDateTime::fromString(text, format); +-} +- +-QDateTime Clock::parse(const QString& text, const QString& format) +-{ +- return QDateTime::fromString(text, format); +-} +- +-Clock::~Clock() +-{ +-} +- +-Clock::Clock() +-{ +-} +- +-QDateTime Clock::currentDateTimeUtcImpl() const +-{ +- return QDateTime::currentDateTimeUtc(); +-} +- +-QDateTime Clock::currentDateTimeImpl() const +-{ +- return QDateTime::currentDateTime(); +-} +- +-void Clock::resetInstance() +-{ +- m_instance.reset(); +-} +- +-void Clock::setInstance(Clock* clock) +-{ +- m_instance = QSharedPointer(clock); +-} +- +-const Clock& Clock::instance() +-{ +- if (!m_instance) { +- m_instance = QSharedPointer(new Clock()); +- } +- return *m_instance; +-} +diff -urNr keepassxc-2.6.4-orig/src/core/Clock.h keepassxc-2.6.4-patched/src/core/Clock.h +--- keepassxc-2.6.4-orig/src/core/Clock.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/Clock.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,59 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_CLOCK_H +-#define KEEPASSXC_CLOCK_H +- +-#include +-#include +- +-class Clock +-{ +-public: +- static QDateTime currentDateTimeUtc(); +- static QDateTime currentDateTime(); +- +- static uint currentSecondsSinceEpoch(); +- static qint64 currentMilliSecondsSinceEpoch(); +- +- static QDateTime serialized(const QDateTime& dateTime); +- +- static QDateTime datetimeUtc(int year, int month, int day, int hour, int min, int second); +- static QDateTime datetime(int year, int month, int day, int hour, int min, int second); +- +- static QDateTime datetimeUtc(qint64 msecSinceEpoch); +- static QDateTime datetime(qint64 msecSinceEpoch); +- +- static QDateTime parse(const QString& text, Qt::DateFormat format = Qt::TextDate); +- static QDateTime parse(const QString& text, const QString& format); +- +- virtual ~Clock(); +- +-protected: +- Clock(); +- virtual QDateTime currentDateTimeUtcImpl() const; +- virtual QDateTime currentDateTimeImpl() const; +- +- static void resetInstance(); +- static void setInstance(Clock* clock); +- static const Clock& instance(); +- +-private: +- static QSharedPointer m_instance; +-}; +- +-#endif // KEEPASSX_ENTRY_H +diff -urNr keepassxc-2.6.4-orig/src/core/Compare.cpp keepassxc-2.6.4-patched/src/core/Compare.cpp +--- keepassxc-2.6.4-orig/src/core/Compare.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/Compare.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,17 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +-#include "Compare.h" +diff -urNr keepassxc-2.6.4-orig/src/core/Compare.h keepassxc-2.6.4-patched/src/core/Compare.h +--- keepassxc-2.6.4-orig/src/core/Compare.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/Compare.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,82 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_COMPARE_H +-#define KEEPASSXC_COMPARE_H +- +-#include +- +-#include "core/Clock.h" +- +-enum CompareItemOption +-{ +- CompareItemDefault = 0, +- CompareItemIgnoreMilliseconds = 0x4, +- CompareItemIgnoreStatistics = 0x8, +- CompareItemIgnoreDisabled = 0x10, +- CompareItemIgnoreHistory = 0x20, +- CompareItemIgnoreLocation = 0x40, +-}; +-Q_DECLARE_FLAGS(CompareItemOptions, CompareItemOption) +-Q_DECLARE_OPERATORS_FOR_FLAGS(CompareItemOptions) +- +-template inline short compareGeneric(const Type& lhs, const Type& rhs, CompareItemOptions) +-{ +- if (lhs != rhs) { +- return lhs < rhs ? -1 : +1; +- } +- return 0; +-} +- +-template +-inline short compare(const Type& lhs, const Type& rhs, CompareItemOptions options = CompareItemDefault) +-{ +- return compareGeneric(lhs, rhs, options); +-} +- +-template <> inline short compare(const QDateTime& lhs, const QDateTime& rhs, CompareItemOptions options) +-{ +- if (!options.testFlag(CompareItemIgnoreMilliseconds)) { +- return compareGeneric(lhs, rhs, options); +- } +- return compareGeneric(Clock::serialized(lhs), Clock::serialized(rhs), options); +-} +- +-template +-inline short compare(bool enabled, const Type& lhs, const Type& rhs, CompareItemOptions options = CompareItemDefault) +-{ +- if (!enabled) { +- return 0; +- } +- return compare(lhs, rhs, options); +-} +- +-template +-inline short compare(bool lhsEnabled, +- const Type& lhs, +- bool rhsEnabled, +- const Type& rhs, +- CompareItemOptions options = CompareItemDefault) +-{ +- const short enabled = compareGeneric(lhsEnabled, rhsEnabled, options); +- if (enabled == 0 && (!options.testFlag(CompareItemIgnoreDisabled) || (lhsEnabled && rhsEnabled))) { +- return compare(lhs, rhs, options); +- } +- return enabled; +-} +- +-#endif // KEEPASSX_COMPARE_H +diff -urNr keepassxc-2.6.4-orig/src/core/Config.cpp keepassxc-2.6.4-patched/src/core/Config.cpp +--- keepassxc-2.6.4-orig/src/core/Config.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/Config.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,534 +0,0 @@ +-/* +- * Copyright (C) 2020 KeePassXC Team +- * Copyright (C) 2011 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "Config.h" +-#include "Global.h" +- +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-#define CONFIG_VERSION 1 +-#define QS QStringLiteral +- +-enum ConfigType +-{ +- Local, +- Roaming +-}; +- +-struct ConfigDirective +-{ +- QString name; +- ConfigType type; +- QVariant defaultValue; +-}; +- +-// clang-format off +- +-/** +- * Map of legal config values, their type and default value. +- */ +-static const QHash configStrings = { +- // General +- {Config::SingleInstance,{QS("SingleInstance"), Roaming, true}}, +- {Config::RememberLastDatabases,{QS("RememberLastDatabases"), Roaming, true}}, +- {Config::NumberOfRememberedLastDatabases,{QS("NumberOfRememberedLastDatabases"), Roaming, 5}}, +- {Config::RememberLastKeyFiles,{QS("RememberLastKeyFiles"), Roaming, true}}, +- {Config::OpenPreviousDatabasesOnStartup,{QS("OpenPreviousDatabasesOnStartup"), Roaming, true}}, +- {Config::AutoSaveAfterEveryChange,{QS("AutoSaveAfterEveryChange"), Roaming, true}}, +- {Config::AutoReloadOnChange,{QS("AutoReloadOnChange"), Roaming, true}}, +- {Config::AutoSaveOnExit,{QS("AutoSaveOnExit"), Roaming, true}}, +- {Config::AutoSaveNonDataChanges,{QS("AutoSaveNonDataChanges"), Roaming, true}}, +- {Config::BackupBeforeSave,{QS("BackupBeforeSave"), Roaming, false}}, +- {Config::UseAtomicSaves,{QS("UseAtomicSaves"), Roaming, true}}, +- {Config::SearchLimitGroup,{QS("SearchLimitGroup"), Roaming, false}}, +- {Config::MinimizeOnOpenUrl,{QS("MinimizeOnOpenUrl"), Roaming, false}}, +- {Config::HideWindowOnCopy,{QS("HideWindowOnCopy"), Roaming, false}}, +- {Config::MinimizeOnCopy,{QS("MinimizeOnCopy"), Roaming, true}}, +- {Config::MinimizeAfterUnlock,{QS("MinimizeAfterUnlock"), Roaming, false}}, +- {Config::DropToBackgroundOnCopy,{QS("DropToBackgroundOnCopy"), Roaming, false}}, +- {Config::UseGroupIconOnEntryCreation,{QS("UseGroupIconOnEntryCreation"), Roaming, true}}, +- {Config::AutoTypeEntryTitleMatch,{QS("AutoTypeEntryTitleMatch"), Roaming, true}}, +- {Config::AutoTypeEntryURLMatch,{QS("AutoTypeEntryURLMatch"), Roaming, true}}, +- {Config::AutoTypeDelay,{QS("AutoTypeDelay"), Roaming, 25}}, +- {Config::AutoTypeStartDelay,{QS("AutoTypeStartDelay"), Roaming, 500}}, +- {Config::GlobalAutoTypeKey,{QS("GlobalAutoTypeKey"), Roaming, 0}}, +- {Config::GlobalAutoTypeModifiers,{QS("GlobalAutoTypeModifiers"), Roaming, 0}}, +- {Config::FaviconDownloadTimeout,{QS("FaviconDownloadTimeout"), Roaming, 10}}, +- {Config::UpdateCheckMessageShown,{QS("UpdateCheckMessageShown"), Roaming, false}}, +- {Config::UseTouchID,{QS("UseTouchID"), Roaming, false}}, +- +- {Config::LastDatabases, {QS("LastDatabases"), Local, {}}}, +- {Config::LastKeyFiles, {QS("LastKeyFiles"), Local, {}}}, +- {Config::LastChallengeResponse, {QS("LastChallengeResponse"), Local, {}}}, +- {Config::LastActiveDatabase, {QS("LastActiveDatabase"), Local, {}}}, +- {Config::LastOpenedDatabases, {QS("LastOpenedDatabases"), Local, {}}}, +- {Config::LastDir, {QS("LastDir"), Local, QDir::homePath()}}, +- {Config::LastAttachmentDir, {QS("LastAttachmentDir"), Local, {}}}, +- +- // GUI +- {Config::GUI_Language, {QS("GUI/Language"), Roaming, QS("system")}}, +- {Config::GUI_HideToolbar, {QS("GUI/HideToolbar"), Roaming, false}}, +- {Config::GUI_MovableToolbar, {QS("GUI/MovableToolbar"), Roaming, false}}, +- {Config::GUI_HidePreviewPanel, {QS("GUI/HidePreviewPanel"), Roaming, false}}, +- {Config::GUI_ToolButtonStyle, {QS("GUI/ToolButtonStyle"), Roaming, Qt::ToolButtonIconOnly}}, +- {Config::GUI_ShowTrayIcon, {QS("GUI/ShowTrayIcon"), Roaming, false}}, +- {Config::GUI_TrayIconAppearance, {QS("GUI/TrayIconAppearance"), Roaming, {}}}, +- {Config::GUI_MinimizeToTray, {QS("GUI/MinimizeToTray"), Roaming, false}}, +- {Config::GUI_MinimizeOnStartup, {QS("GUI/MinimizeOnStartup"), Roaming, false}}, +- {Config::GUI_MinimizeOnClose, {QS("GUI/MinimizeOnClose"), Roaming, false}}, +- {Config::GUI_HideUsernames, {QS("GUI/HideUsernames"), Roaming, false}}, +- {Config::GUI_HidePasswords, {QS("GUI/HidePasswords"), Roaming, true}}, +- {Config::GUI_AdvancedSettings, {QS("GUI/AdvancedSettings"), Roaming, false}}, +- {Config::GUI_MonospaceNotes, {QS("GUI/MonospaceNotes"), Roaming, false}}, +- {Config::GUI_ApplicationTheme, {QS("GUI/ApplicationTheme"), Roaming, QS("auto")}}, +- {Config::GUI_CompactMode, {QS("GUI/CompactMode"), Roaming, false}}, +- {Config::GUI_CheckForUpdates, {QS("GUI/CheckForUpdates"), Roaming, true}}, +- {Config::GUI_CheckForUpdatesNextCheck, {QS("GUI/CheckForUpdatesNextCheck"), Local, 0}}, +- {Config::GUI_CheckForUpdatesIncludeBetas, {QS("GUI/CheckForUpdatesIncludeBetas"), Roaming, false}}, +- +- {Config::GUI_MainWindowGeometry, {QS("GUI/MainWindowGeometry"), Local, {}}}, +- {Config::GUI_MainWindowState, {QS("GUI/MainWindowState"), Local, {}}}, +- {Config::GUI_ListViewState, {QS("GUI/ListViewState"), Local, {}}}, +- {Config::GUI_SearchViewState, {QS("GUI/SearchViewState"), Local, {}}}, +- {Config::GUI_SplitterState, {QS("GUI/SplitterState"), Local, {}}}, +- {Config::GUI_PreviewSplitterState, {QS("GUI/PreviewSplitterState"), Local, {}}}, +- {Config::GUI_AutoTypeSelectDialogSize, {QS("GUI/AutoTypeSelectDialogSize"), Local, QSize(600, 250)}}, +- +- // Security +- {Config::Security_ClearClipboard, {QS("Security/ClearClipboard"), Roaming, true}}, +- {Config::Security_ClearClipboardTimeout, {QS("Security/ClearClipboardTimeout"), Roaming, 10}}, +- {Config::Security_ClearSearch, {QS("Security/ClearSearch"), Roaming, true}}, +- {Config::Security_ClearSearchTimeout, {QS("Security/ClearSearchTimeout"), Roaming, 5}}, +- {Config::Security_HideNotes, {QS("Security/Security_HideNotes"), Roaming, false}}, +- {Config::Security_LockDatabaseIdle, {QS("Security/LockDatabaseIdle"), Roaming, false}}, +- {Config::Security_LockDatabaseIdleSeconds, {QS("Security/LockDatabaseIdleSeconds"), Roaming, 240}}, +- {Config::Security_LockDatabaseMinimize, {QS("Security/LockDatabaseMinimize"), Roaming, false}}, +- {Config::Security_LockDatabaseScreenLock, {QS("Security/LockDatabaseScreenLock"), Roaming, true}}, +- {Config::Security_RelockAutoType, {QS("Security/RelockAutoType"), Roaming, false}}, +- {Config::Security_PasswordsRepeatVisible, {QS("Security/PasswordsRepeatVisible"), Roaming, true}}, +- {Config::Security_PasswordsHidden, {QS("Security/PasswordsHidden"), Roaming, true}}, +- {Config::Security_PasswordEmptyPlaceholder, {QS("Security/PasswordEmptyPlaceholder"), Roaming, false}}, +- {Config::Security_HidePasswordPreviewPanel, {QS("Security/HidePasswordPreviewPanel"), Roaming, true}}, +- {Config::Security_AutoTypeAsk, {QS("Security/AutotypeAsk"), Roaming, true}}, +- {Config::Security_IconDownloadFallback, {QS("Security/IconDownloadFallback"), Roaming, false}}, +- {Config::Security_ResetTouchId, {QS("Security/ResetTouchId"), Roaming, false}}, +- {Config::Security_ResetTouchIdTimeout, {QS("Security/ResetTouchIdTimeout"), Roaming, 30}}, +- {Config::Security_ResetTouchIdScreenlock,{QS("Security/ResetTouchIdScreenlock"), Roaming, true}}, +- +- // Browser +- {Config::Browser_Enabled, {QS("Browser/Enabled"), Roaming, false}}, +- {Config::Browser_ShowNotification, {QS("Browser/ShowNotification"), Roaming, true}}, +- {Config::Browser_BestMatchOnly, {QS("Browser/BestMatchOnly"), Roaming, false}}, +- {Config::Browser_UnlockDatabase, {QS("Browser/UnlockDatabase"), Roaming, true}}, +- {Config::Browser_MatchUrlScheme, {QS("Browser/MatchUrlScheme"), Roaming, true}}, +- {Config::Browser_SortByUsername, {QS("Browser/SortByUsername"), Roaming, false}}, +- {Config::Browser_SupportBrowserProxy, {QS("Browser/SupportBrowserProxy"), Roaming, true}}, +- {Config::Browser_UseCustomProxy, {QS("Browser/UseCustomProxy"), Roaming, false}}, +- {Config::Browser_CustomProxyLocation, {QS("Browser/CustomProxyLocation"), Roaming, {}}}, +- {Config::Browser_UpdateBinaryPath, {QS("Browser/UpdateBinaryPath"), Roaming, true}}, +- {Config::Browser_AllowExpiredCredentials, {QS("Browser/AllowExpiredCredentials"), Roaming, false}}, +- {Config::Browser_AlwaysAllowAccess, {QS("Browser/AlwaysAllowAccess"), Roaming, false}}, +- {Config::Browser_AlwaysAllowUpdate, {QS("Browser/AlwaysAllowUpdate"), Roaming, false}}, +- {Config::Browser_HttpAuthPermission, {QS("Browser/HttpAuthPermission"), Roaming, false}}, +- {Config::Browser_SearchInAllDatabases, {QS("Browser/SearchInAllDatabases"), Roaming, false}}, +- {Config::Browser_SupportKphFields, {QS("Browser/SupportKphFields"), Roaming, true}}, +- {Config::Browser_NoMigrationPrompt, {QS("Browser/NoMigrationPrompt"), Roaming, false}}, +- {Config::Browser_UseCustomBrowser, {QS("Browser/UseCustomBrowser"), Local, false}}, +- {Config::Browser_CustomBrowserType, {QS("Browser/CustomBrowserType"), Local, -1}}, +- {Config::Browser_CustomBrowserLocation, {QS("Browser/CustomBrowserLocation"), Local, {}}}, +-#ifdef QT_DEBUG +- {Config::Browser_CustomExtensionId, {QS("Browser/CustomExtensionId"), Local, {}}}, +-#endif +- +- // SSHAgent +- {Config::SSHAgent_Enabled, {QS("SSHAgent/Enabled"), Roaming, false}}, +- {Config::SSHAgent_UseOpenSSH, {QS("SSHAgent/UseOpenSSH"), Roaming, false}}, +- {Config::SSHAgent_AuthSockOverride, {QS("SSHAgent/AuthSockOverride"), Local, {}}}, +- +- // FdoSecrets +- {Config::FdoSecrets_Enabled, {QS("FdoSecrets/Enabled"), Roaming, false}}, +- {Config::FdoSecrets_ShowNotification, {QS("FdoSecrets/ShowNotification"), Roaming, true}}, +- {Config::FdoSecrets_NoConfirmDeleteItem, {QS("FdoSecrets/NoConfirmDeleteItem"), Roaming, false}}, +- +- // KeeShare +- {Config::KeeShare_QuietSuccess, {QS("KeeShare/QuietSuccess"), Roaming, false}}, +- {Config::KeeShare_Own, {QS("KeeShare/Own"), Roaming, {}}}, +- {Config::KeeShare_Foreign, {QS("KeeShare/Foreign"), Roaming, {}}}, +- {Config::KeeShare_Active, {QS("KeeShare/Active"), Roaming, {}}}, +- {Config::KeeShare_LastDir, {QS("KeeShare/LastDir"), Local, QDir::homePath()}}, +- {Config::KeeShare_LastKeyDir, {QS("KeeShare/LastKeyDir"), Local, QDir::homePath()}}, +- {Config::KeeShare_LastShareDir, {QS("KeeShare/LastShareDir"), Local, QDir::homePath()}}, +- +- // PasswordGenerator +- {Config::PasswordGenerator_LowerCase, {QS("PasswordGenerator/LowerCase"), Roaming, true}}, +- {Config::PasswordGenerator_UpperCase, {QS("PasswordGenerator/UpperCase"), Roaming, true}}, +- {Config::PasswordGenerator_Numbers, {QS("PasswordGenerator/Numbers"), Roaming, true}}, +- {Config::PasswordGenerator_EASCII, {QS("PasswordGenerator/EASCII"), Roaming, false}}, +- {Config::PasswordGenerator_AdvancedMode, {QS("PasswordGenerator/AdvancedMode"), Roaming, false}}, +- {Config::PasswordGenerator_SpecialChars, {QS("PasswordGenerator/SpecialChars"), Roaming, true}}, +- {Config::PasswordGenerator_Braces, {QS("PasswordGenerator/Braces"), Roaming, false}}, +- {Config::PasswordGenerator_Punctuation, {QS("PasswordGenerator/Punctuation"), Roaming, false}}, +- {Config::PasswordGenerator_Quotes, {QS("PasswordGenerator/Quotes"), Roaming, false}}, +- {Config::PasswordGenerator_Dashes, {QS("PasswordGenerator/Dashes"), Roaming, false}}, +- {Config::PasswordGenerator_Math, {QS("PasswordGenerator/Math"), Roaming, false}}, +- {Config::PasswordGenerator_Logograms, {QS("PasswordGenerator/Logograms"), Roaming, false}}, +- {Config::PasswordGenerator_AdditionalChars, {QS("PasswordGenerator/AdditionalChars"), Roaming, {}}}, +- {Config::PasswordGenerator_ExcludedChars, {QS("PasswordGenerator/ExcludedChars"), Roaming, {}}}, +- {Config::PasswordGenerator_ExcludeAlike, {QS("PasswordGenerator/ExcludeAlike"), Roaming, true}}, +- {Config::PasswordGenerator_EnsureEvery, {QS("PasswordGenerator/EnsureEvery"), Roaming, true}}, +- {Config::PasswordGenerator_Length, {QS("PasswordGenerator/Length"), Roaming, 20}}, +- {Config::PasswordGenerator_WordCount, {QS("PasswordGenerator/WordCount"), Roaming, 7}}, +- {Config::PasswordGenerator_WordSeparator, {QS("PasswordGenerator/WordSeparator"), Roaming, QS(" ")}}, +- {Config::PasswordGenerator_WordList, {QS("PasswordGenerator/WordList"), Roaming, QS("eff_large.wordlist")}}, +- {Config::PasswordGenerator_WordCase, {QS("PasswordGenerator/WordCase"), Roaming, 0}}, +- {Config::PasswordGenerator_Type, {QS("PasswordGenerator/Type"), Roaming, 0}}, +- +- // Messages +- {Config::Messages_NoLegacyKeyFileWarning, {QS("Messages/NoLegacyKeyFileWarning"), Roaming, false}}, +- {Config::Messages_Qt55CompatibilityWarning, {QS("Messages/Qt55CompatibilityWarning"), Local, false}}, +- {Config::Messages_HidePreReleaseWarning, {QS("Messages/HidePreReleaseWarning"), Local, {}}}}; +- +-// clang-format on +- +-QPointer Config::m_instance(nullptr); +- +-QVariant Config::get(ConfigKey key) +-{ +- auto cfg = configStrings[key]; +- auto defaultValue = configStrings[key].defaultValue; +- if (m_localSettings && cfg.type == Local) { +- return m_localSettings->value(cfg.name, defaultValue); +- } +- return m_settings->value(cfg.name, defaultValue); +-} +- +-bool Config::hasAccessError() +-{ +- return m_settings->status() & QSettings::AccessError; +-} +- +-QString Config::getFileName() +-{ +- return m_settings->fileName(); +-} +- +-void Config::set(ConfigKey key, const QVariant& value) +-{ +- if (get(key) == value) { +- return; +- } +- +- auto cfg = configStrings[key]; +- if (cfg.type == Local && m_localSettings) { +- m_localSettings->setValue(cfg.name, value); +- } else { +- m_settings->setValue(cfg.name, value); +- } +- +- emit changed(key); +-} +- +-void Config::remove(ConfigKey key) +-{ +- auto cfg = configStrings[key]; +- if (cfg.type == Local && m_localSettings) { +- m_localSettings->remove(cfg.name); +- } else { +- m_settings->remove(cfg.name); +- } +- +- emit changed(key); +-} +- +-/** +- * Sync configuration with persistent storage. +- * +- * Usually, you don't need to call this method manually, but if you are writing +- * configurations after an emitted \link QCoreApplication::aboutToQuit() signal, +- * use it to guarantee your config values are persisted. +- */ +-void Config::sync() +-{ +- m_settings->sync(); +- if (m_localSettings) { +- m_localSettings->sync(); +- } +-} +- +-void Config::resetToDefaults() +-{ +- m_settings->clear(); +- if (m_localSettings) { +- m_localSettings->clear(); +- } +-} +- +-/** +- * Map of configuration file settings that are either deprecated, or have +- * had their name changed to their new config enum values. +- * +- * Set a value to Deleted to remove the setting. +- */ +-static const QHash deprecationMap = { +- // 2.3.4 +- {QS("security/hidepassworddetails"), Config::Security_HidePasswordPreviewPanel}, +- {QS("GUI/HideDetailsView"), Config::GUI_HidePreviewPanel}, +- {QS("GUI/DetailSplitterState"), Config::GUI_PreviewSplitterState}, +- {QS("security/IconDownloadFallbackToGoogle"), Config::Security_IconDownloadFallback}, +- +- // 2.6.0 +- {QS("security/autotypeask"), Config::Security_AutoTypeAsk}, +- {QS("security/clearclipboard"), Config::Security_ClearClipboard}, +- {QS("security/clearclipboardtimeout"), Config::Security_ClearClipboardTimeout}, +- {QS("security/clearsearch"), Config::Security_ClearSearch}, +- {QS("security/clearsearchtimeout"), Config::Security_ClearSearchTimeout}, +- {QS("security/lockdatabaseidle"), Config::Security_LockDatabaseIdle}, +- {QS("security/lockdatabaseidlesec"), Config::Security_LockDatabaseIdleSeconds}, +- {QS("security/lockdatabaseminimize"), Config::Security_LockDatabaseMinimize}, +- {QS("security/lockdatabasescreenlock"), Config::Security_LockDatabaseScreenLock}, +- {QS("security/relockautotype"), Config::Security_RelockAutoType}, +- {QS("security/IconDownloadFallback"), Config::Security_IconDownloadFallback}, +- {QS("security/passwordscleartext"), Config::Security_PasswordsHidden}, +- {QS("security/passwordemptynodots"), Config::Security_PasswordEmptyPlaceholder}, +- {QS("security/HidePasswordPreviewPanel"), Config::Security_HidePasswordPreviewPanel}, +- {QS("security/passwordsrepeat"), Config::Security_PasswordsRepeatVisible}, +- {QS("security/hidenotes"), Config::Security_HideNotes}, +- {QS("security/resettouchid"), Config::Security_ResetTouchId}, +- {QS("security/resettouchidtimeout"), Config::Security_ResetTouchIdTimeout}, +- {QS("security/resettouchidscreenlock"), Config::Security_ResetTouchIdScreenlock}, +- {QS("KeeShare/Settings.own"), Config::KeeShare_Own}, +- {QS("KeeShare/Settings.foreign"), Config::KeeShare_Foreign}, +- {QS("KeeShare/Settings.active"), Config::KeeShare_Active}, +- {QS("SSHAgent"), Config::SSHAgent_Enabled}, +- {QS("SSHAgentOpenSSH"), Config::SSHAgent_UseOpenSSH}, +- {QS("SSHAuthSockOverride"), Config::SSHAgent_AuthSockOverride}, +- {QS("generator/LowerCase"), Config::PasswordGenerator_LowerCase}, +- {QS("generator/UpperCase"), Config::PasswordGenerator_UpperCase}, +- {QS("generator/Numbers"), Config::PasswordGenerator_Numbers}, +- {QS("generator/EASCII"), Config::PasswordGenerator_EASCII}, +- {QS("generator/AdvancedMode"), Config::PasswordGenerator_AdvancedMode}, +- {QS("generator/SpecialChars"), Config::PasswordGenerator_SpecialChars}, +- {QS("generator/AdditionalChars"), Config::PasswordGenerator_AdditionalChars}, +- {QS("generator/Braces"), Config::PasswordGenerator_Braces}, +- {QS("generator/Punctuation"), Config::PasswordGenerator_Punctuation}, +- {QS("generator/Quotes"), Config::PasswordGenerator_Quotes}, +- {QS("generator/Dashes"), Config::PasswordGenerator_Dashes}, +- {QS("generator/Math"), Config::PasswordGenerator_Math}, +- {QS("generator/Logograms"), Config::PasswordGenerator_Logograms}, +- {QS("generator/ExcludedChars"), Config::PasswordGenerator_ExcludedChars}, +- {QS("generator/ExcludeAlike"), Config::PasswordGenerator_ExcludeAlike}, +- {QS("generator/EnsureEvery"), Config::PasswordGenerator_EnsureEvery}, +- {QS("generator/Length"), Config::PasswordGenerator_Length}, +- {QS("generator/WordCount"), Config::PasswordGenerator_WordCount}, +- {QS("generator/WordSeparator"), Config::PasswordGenerator_WordSeparator}, +- {QS("generator/WordList"), Config::PasswordGenerator_WordList}, +- {QS("generator/WordCase"), Config::PasswordGenerator_WordCase}, +- {QS("generator/Type"), Config::PasswordGenerator_Type}, +- {QS("QtErrorMessageShown"), Config::Messages_Qt55CompatibilityWarning}, +- {QS("GUI/HidePasswords"), Config::Deleted}, +- {QS("GUI/DarkTrayIcon"), Config::Deleted}}; +- +-/** +- * Migrate settings from previous versions. +- */ +-void Config::migrate() +-{ +- int previousVersion = m_settings->value("ConfigVersion").toInt(); +- if (CONFIG_VERSION <= previousVersion) { +- return; +- } +- +- // Update renamed keys and drop obsolete keys +- for (const auto& setting : deprecationMap.keys()) { +- QVariant value; +- if (m_settings->contains(setting)) { +- if (setting == QS("IgnoreGroupExpansion") || setting == QS("security/passwordsrepeat") +- || setting == QS("security/passwordscleartext") || setting == QS("security/passwordemptynodots")) { +- // Keep user's original setting for boolean settings whose meanings were reversed +- value = !m_settings->value(setting).toBool(); +- } else { +- value = m_settings->value(setting); +- } +- m_settings->remove(setting); +- } else if (m_localSettings && m_localSettings->contains(setting)) { +- value = m_localSettings->value(setting); +- m_localSettings->remove(setting); +- } else { +- continue; +- } +- +- if (deprecationMap[setting] == Config::Deleted) { +- continue; +- } +- +- set(deprecationMap[setting], value); +- } +- +- // Move local settings to separate file +- if (m_localSettings) { +- for (const auto& setting : asConst(configStrings)) { +- if (setting.type == Local && m_settings->contains(setting.name)) { +- m_localSettings->setValue(setting.name, m_settings->value(setting.name)); +- m_settings->remove(setting.name); +- } +- } +- } +- +- // Detailed version migrations +- +- // pre 2.6.0 (no versioned configs) +- if (previousVersion < 1) { +- +- // 2.3.4 +- if (get(AutoSaveAfterEveryChange).toBool()) { +- set(AutoSaveOnExit, true); +- } +- +- // Setting defaults for 'hide window on copy' behavior, keeping the user's original setting +- if (get(HideWindowOnCopy).isNull()) { +- set(HideWindowOnCopy, get(MinimizeOnCopy).toBool()); +- set(MinimizeOnCopy, true); +- } +- +- // Reset database columns if upgrading from pre 2.6.0 +- remove(GUI_ListViewState); +- } +- +- m_settings->setValue("ConfigVersion", CONFIG_VERSION); +- sync(); +-} +- +-Config::Config(const QString& configFileName, const QString& localConfigFileName, QObject* parent) +- : QObject(parent) +-{ +- init(configFileName, localConfigFileName); +-} +- +-Config::Config(QObject* parent) +- : QObject(parent) +-{ +- auto configFiles = defaultConfigFiles(); +- init(configFiles.first, configFiles.second); +-} +- +-Config::~Config() +-{ +-} +- +-void Config::init(const QString& configFileName, const QString& localConfigFileName) +-{ +- // Upgrade from previous KeePassXC version which stores its config +- // in AppData/Local on Windows instead of AppData/Roaming. +- // Move file to correct location before continuing. +- if (!localConfigFileName.isEmpty() && QFile::exists(localConfigFileName) && !QFile::exists(configFileName)) { +- QDir().mkpath(QFileInfo(configFileName).absolutePath()); +- QFile::copy(localConfigFileName, configFileName); +- QFile::remove(localConfigFileName); +- QDir().rmdir(QFileInfo(localConfigFileName).absolutePath()); +- } +- +- m_settings.reset(new QSettings(configFileName, QSettings::IniFormat)); +- if (!localConfigFileName.isEmpty() && configFileName != localConfigFileName) { +- m_localSettings.reset(new QSettings(localConfigFileName, QSettings::IniFormat)); +- } +- +- migrate(); +- connect(qApp, &QCoreApplication::aboutToQuit, this, &Config::sync); +-} +- +-QPair Config::defaultConfigFiles() +-{ +- // Check if we are running in portable mode, if so store the config files local to the app +- auto portablePath = QCoreApplication::applicationDirPath().append("/%1"); +- if (QFile::exists(portablePath.arg(".portable"))) { +- return {portablePath.arg("config/keepassxc.ini"), portablePath.arg("config/keepassxc_local.ini")}; +- } +- +- QString configPath; +- QString localConfigPath; +- +-#if defined(Q_OS_WIN) +- configPath = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); +- localConfigPath = QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation); +-#elif defined(Q_OS_MACOS) +- configPath = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); +- localConfigPath = QStandardPaths::writableLocation(QStandardPaths::CacheLocation); +-#else +- // On case-sensitive Operating Systems, force use of lowercase app directories +- configPath = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) + "/keepassxc"; +- localConfigPath = QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation) + "/keepassxc"; +-#endif +- +- QString suffix; +-#ifdef QT_DEBUG +- suffix = "_debug"; +-#endif +- +- configPath += QString("/keepassxc%1.ini").arg(suffix); +- localConfigPath += QString("/keepassxc%1.ini").arg(suffix); +- +- // Allow overriding the default location with env vars +- const auto& env = QProcessEnvironment::systemEnvironment(); +- configPath = env.value("KPXC_CONFIG", configPath); +- localConfigPath = env.value("KPXC_CONFIG_LOCAL", localConfigPath); +- +- return {QDir::toNativeSeparators(configPath), QDir::toNativeSeparators(localConfigPath)}; +-} +- +-Config* Config::instance() +-{ +- if (!m_instance) { +- m_instance = new Config(qApp); +- } +- +- return m_instance; +-} +- +-void Config::createConfigFromFile(const QString& configFileName, const QString& localConfigFileName) +-{ +- if (m_instance) { +- delete m_instance; +- } +- +- auto defaultFiles = defaultConfigFiles(); +- m_instance = new Config(configFileName.isEmpty() ? defaultFiles.first : configFileName, +- localConfigFileName.isEmpty() ? defaultFiles.second : localConfigFileName, +- qApp); +-} +- +-void Config::createTempFileInstance() +-{ +- if (m_instance) { +- delete m_instance; +- } +- auto* tmpFile = new QTemporaryFile(); +- bool openResult = tmpFile->open(); +- Q_ASSERT(openResult); +- Q_UNUSED(openResult); +- m_instance = new Config(tmpFile->fileName(), "", qApp); +- tmpFile->setParent(m_instance); +-} +- +-#undef QS +diff -urNr keepassxc-2.6.4-orig/src/core/Config.h keepassxc-2.6.4-patched/src/core/Config.h +--- keepassxc-2.6.4-orig/src/core/Config.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/Config.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,227 +0,0 @@ +-/* +- * Copyright (C) 2020 KeePassXC Team +- * Copyright (C) 2011 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_CONFIG_H +-#define KEEPASSX_CONFIG_H +- +-#include +-#include +-#include +- +-class QSettings; +- +-class Config : public QObject +-{ +- Q_OBJECT +- +-public: +- Q_DISABLE_COPY(Config) +- +- enum ConfigKey +- { +- SingleInstance, +- RememberLastDatabases, +- NumberOfRememberedLastDatabases, +- RememberLastKeyFiles, +- OpenPreviousDatabasesOnStartup, +- AutoSaveAfterEveryChange, +- AutoReloadOnChange, +- AutoSaveOnExit, +- AutoSaveNonDataChanges, +- BackupBeforeSave, +- UseAtomicSaves, +- SearchLimitGroup, +- MinimizeOnOpenUrl, +- HideWindowOnCopy, +- MinimizeOnCopy, +- MinimizeAfterUnlock, +- DropToBackgroundOnCopy, +- UseGroupIconOnEntryCreation, +- AutoTypeEntryTitleMatch, +- AutoTypeEntryURLMatch, +- AutoTypeDelay, +- AutoTypeStartDelay, +- GlobalAutoTypeKey, +- GlobalAutoTypeModifiers, +- FaviconDownloadTimeout, +- UpdateCheckMessageShown, +- UseTouchID, +- +- LastDatabases, +- LastKeyFiles, +- LastChallengeResponse, +- LastActiveDatabase, +- LastOpenedDatabases, +- LastDir, +- LastAttachmentDir, +- +- GUI_Language, +- GUI_HideToolbar, +- GUI_MovableToolbar, +- GUI_HidePreviewPanel, +- GUI_ToolButtonStyle, +- GUI_ShowTrayIcon, +- GUI_TrayIconAppearance, +- GUI_MinimizeToTray, +- GUI_MinimizeOnStartup, +- GUI_MinimizeOnClose, +- GUI_HideUsernames, +- GUI_HidePasswords, +- GUI_AdvancedSettings, +- GUI_MonospaceNotes, +- GUI_ApplicationTheme, +- GUI_CompactMode, +- GUI_CheckForUpdates, +- GUI_CheckForUpdatesIncludeBetas, +- +- GUI_MainWindowGeometry, +- GUI_MainWindowState, +- GUI_ListViewState, +- GUI_SearchViewState, +- GUI_PreviewSplitterState, +- GUI_SplitterState, +- GUI_AutoTypeSelectDialogSize, +- GUI_CheckForUpdatesNextCheck, +- +- Security_ClearClipboard, +- Security_ClearClipboardTimeout, +- Security_ClearSearch, +- Security_ClearSearchTimeout, +- Security_HideNotes, +- Security_LockDatabaseIdle, +- Security_LockDatabaseIdleSeconds, +- Security_LockDatabaseMinimize, +- Security_LockDatabaseScreenLock, +- Security_RelockAutoType, +- Security_PasswordsRepeatVisible, +- Security_PasswordsHidden, +- Security_PasswordEmptyPlaceholder, +- Security_HidePasswordPreviewPanel, +- Security_AutoTypeAsk, +- Security_IconDownloadFallback, +- Security_ResetTouchId, +- Security_ResetTouchIdTimeout, +- Security_ResetTouchIdScreenlock, +- +- Browser_Enabled, +- Browser_ShowNotification, +- Browser_BestMatchOnly, +- Browser_UnlockDatabase, +- Browser_MatchUrlScheme, +- Browser_SortByUsername, +- Browser_SupportBrowserProxy, +- Browser_UseCustomProxy, +- Browser_CustomProxyLocation, +- Browser_UpdateBinaryPath, +- Browser_AllowExpiredCredentials, +- Browser_AlwaysAllowAccess, +- Browser_AlwaysAllowUpdate, +- Browser_HttpAuthPermission, +- Browser_SearchInAllDatabases, +- Browser_SupportKphFields, +- Browser_NoMigrationPrompt, +- Browser_UseCustomBrowser, +- Browser_CustomBrowserType, +- Browser_CustomBrowserLocation, +-#ifdef QT_DEBUG +- Browser_CustomExtensionId, +-#endif +- +- SSHAgent_Enabled, +- SSHAgent_UseOpenSSH, +- SSHAgent_AuthSockOverride, +- +- FdoSecrets_Enabled, +- FdoSecrets_ShowNotification, +- FdoSecrets_NoConfirmDeleteItem, +- +- KeeShare_QuietSuccess, +- KeeShare_Own, +- KeeShare_Foreign, +- KeeShare_Active, +- KeeShare_LastDir, +- KeeShare_LastKeyDir, +- KeeShare_LastShareDir, +- +- PasswordGenerator_LowerCase, +- PasswordGenerator_UpperCase, +- PasswordGenerator_Numbers, +- PasswordGenerator_EASCII, +- PasswordGenerator_AdvancedMode, +- PasswordGenerator_SpecialChars, +- PasswordGenerator_AdditionalChars, +- PasswordGenerator_Braces, +- PasswordGenerator_Punctuation, +- PasswordGenerator_Quotes, +- PasswordGenerator_Dashes, +- PasswordGenerator_Math, +- PasswordGenerator_Logograms, +- PasswordGenerator_ExcludedChars, +- PasswordGenerator_ExcludeAlike, +- PasswordGenerator_EnsureEvery, +- PasswordGenerator_Length, +- PasswordGenerator_WordCount, +- PasswordGenerator_WordSeparator, +- PasswordGenerator_WordList, +- PasswordGenerator_WordCase, +- PasswordGenerator_Type, +- +- Messages_NoLegacyKeyFileWarning, +- Messages_Qt55CompatibilityWarning, +- Messages_HidePreReleaseWarning, +- +- // Special internal value +- Deleted +- }; +- +- ~Config() override; +- QVariant get(ConfigKey key); +- QString getFileName(); +- void set(ConfigKey key, const QVariant& value); +- void remove(ConfigKey key); +- bool hasAccessError(); +- void sync(); +- void resetToDefaults(); +- +- static Config* instance(); +- static void createConfigFromFile(const QString& configFileName, const QString& localConfigFileName = {}); +- static void createTempFileInstance(); +- +-signals: +- void changed(ConfigKey key); +- +-private: +- Config(const QString& configFileName, const QString& localConfigFileName, QObject* parent); +- explicit Config(QObject* parent); +- void init(const QString& configFileName, const QString& localConfigFileName); +- void migrate(); +- static QPair defaultConfigFiles(); +- +- static QPointer m_instance; +- +- QScopedPointer m_settings; +- QScopedPointer m_localSettings; +- QHash m_defaults; +-}; +- +-inline Config* config() +-{ +- return Config::instance(); +-} +- +-#endif // KEEPASSX_CONFIG_H +diff -urNr keepassxc-2.6.4-orig/src/core/CsvParser.cpp keepassxc-2.6.4-patched/src/core/CsvParser.cpp +--- keepassxc-2.6.4-orig/src/core/CsvParser.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/CsvParser.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,439 +0,0 @@ +-/* +- * Copyright (C) 2016 Enrico Mariotti +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "CsvParser.h" +- +-#include +-#include +- +-#include "core/Tools.h" +- +-CsvParser::CsvParser() +- : m_ch(0) +- , m_comment('#') +- , m_currCol(1) +- , m_currRow(1) +- , m_isBackslashSyntax(false) +- , m_isEof(false) +- , m_isFileLoaded(false) +- , m_isGood(true) +- , m_lastPos(-1) +- , m_maxCols(0) +- , m_qualifier('"') +- , m_separator(',') +- , m_statusMsg("") +-{ +- m_csv.setBuffer(&m_array); +- m_ts.setDevice(&m_csv); +- m_csv.open(QIODevice::ReadOnly); +- m_ts.setCodec("UTF-8"); +-} +- +-CsvParser::~CsvParser() +-{ +- m_csv.close(); +-} +- +-bool CsvParser::isFileLoaded() +-{ +- return m_isFileLoaded; +-} +- +-bool CsvParser::reparse() +-{ +- reset(); +- return parseFile(); +-} +- +-bool CsvParser::parse(QFile* device) +-{ +- clear(); +- if (nullptr == device) { +- appendStatusMsg(QObject::tr("NULL device"), true); +- return false; +- } +- if (!readFile(device)) { +- return false; +- } +- return parseFile(); +-} +- +-bool CsvParser::readFile(QFile* device) +-{ +- if (device->isOpen()) { +- device->close(); +- } +- +- device->open(QIODevice::ReadOnly); +- if (!Tools::readAllFromDevice(device, m_array)) { +- appendStatusMsg(QObject::tr("error reading from device"), true); +- m_isFileLoaded = false; +- } else { +- device->close(); +- +- m_array.replace("\r\n", "\n"); +- m_array.replace("\r", "\n"); +- if (0 == m_array.size()) { +- appendStatusMsg(QObject::tr("file empty").append("\n")); +- } +- m_isFileLoaded = true; +- } +- return m_isFileLoaded; +-} +- +-void CsvParser::reset() +-{ +- m_ch = 0; +- m_currCol = 1; +- m_currRow = 1; +- m_isEof = false; +- m_isGood = true; +- m_lastPos = -1; +- m_maxCols = 0; +- m_statusMsg = ""; +- m_ts.seek(0); +- m_table.clear(); +- // the following are users' concern :) +- // m_comment = '#'; +- // m_backslashSyntax = false; +- // m_comment = '#'; +- // m_qualifier = '"'; +- // m_separator = ','; +-} +- +-void CsvParser::clear() +-{ +- reset(); +- m_isFileLoaded = false; +- m_array.clear(); +-} +- +-bool CsvParser::parseFile() +-{ +- parseRecord(); +- while (!m_isEof) { +- if (!skipEndline()) { +- appendStatusMsg(QObject::tr("malformed string"), true); +- } +- m_currRow++; +- m_currCol = 1; +- parseRecord(); +- } +- fillColumns(); +- return m_isGood; +-} +- +-void CsvParser::parseRecord() +-{ +- CsvRow row; +- if (isComment()) { +- skipLine(); +- return; +- } +- do { +- parseField(row); +- getChar(m_ch); +- } while (isSeparator(m_ch) && !m_isEof); +- +- if (!m_isEof) { +- ungetChar(); +- } +- if (isEmptyRow(row)) { +- row.clear(); +- return; +- } +- m_table.push_back(row); +- if (m_maxCols < row.size()) { +- m_maxCols = row.size(); +- } +- m_currCol++; +-} +- +-void CsvParser::parseField(CsvRow& row) +-{ +- QString field; +- peek(m_ch); +- if (!isTerminator(m_ch)) { +- if (isQualifier(m_ch)) { +- parseQuoted(field); +- } else { +- parseSimple(field); +- } +- } +- row.push_back(field); +-} +- +-void CsvParser::parseSimple(QString& s) +-{ +- QChar c; +- getChar(c); +- while ((isText(c)) && (!m_isEof)) { +- s.append(c); +- getChar(c); +- } +- if (!m_isEof) { +- ungetChar(); +- } +-} +- +-void CsvParser::parseQuoted(QString& s) +-{ +- // read and discard initial qualifier (e.g. quote) +- getChar(m_ch); +- parseEscaped(s); +- // getChar(m_ch); +- if (!isQualifier(m_ch)) { +- appendStatusMsg(QObject::tr("missing closing quote"), true); +- } +-} +- +-void CsvParser::parseEscaped(QString& s) +-{ +- parseEscapedText(s); +- while (processEscapeMark(s, m_ch)) { +- parseEscapedText(s); +- } +- if (!m_isEof) { +- ungetChar(); +- } +-} +- +-void CsvParser::parseEscapedText(QString& s) +-{ +- getChar(m_ch); +- while ((!isQualifier(m_ch)) && !m_isEof) { +- s.append(m_ch); +- getChar(m_ch); +- } +-} +- +-bool CsvParser::processEscapeMark(QString& s, QChar c) +-{ +- QChar buf; +- peek(buf); +- QChar c2; +- if (true == m_isBackslashSyntax) { +- // escape-character syntax, e.g. \" +- if (c != '\\') { +- return false; +- } +- // consume (and append) second qualifier +- getChar(c2); +- if (m_isEof) { +- c2 = '\\'; +- s.append('\\'); +- return false; +- } else { +- s.append(c2); +- return true; +- } +- } else { +- // double quote syntax, e.g. "" +- if (!isQualifier(c)) { +- return false; +- } +- peek(c2); +- if (!m_isEof) { // not EOF, can read one char +- if (isQualifier(c2)) { +- s.append(c2); +- getChar(c2); +- return true; +- } +- } +- return false; +- } +-} +- +-void CsvParser::fillColumns() +-{ +- // fill shorter rows with empty placeholder columns +- for (int i = 0; i < m_table.size(); ++i) { +- int gap = m_maxCols - m_table.at(i).size(); +- if (gap > 0) { +- CsvRow r = m_table.at(i); +- for (int j = 0; j < gap; ++j) { +- r.append(QString("")); +- } +- m_table.replace(i, r); +- } +- } +-} +- +-void CsvParser::skipLine() +-{ +- m_ts.readLine(); +- m_ts.seek(m_ts.pos() - 1); +-} +- +-bool CsvParser::skipEndline() +-{ +- getChar(m_ch); +- return (m_ch == '\n'); +-} +- +-void CsvParser::getChar(QChar& c) +-{ +- m_isEof = m_ts.atEnd(); +- if (!m_isEof) { +- m_lastPos = m_ts.pos(); +- m_ts >> c; +- } +-} +- +-void CsvParser::ungetChar() +-{ +- if (!m_ts.seek(m_lastPos)) { +- qWarning("CSV Parser: unget lower bound exceeded"); +- m_isGood = false; +- } +-} +- +-void CsvParser::peek(QChar& c) +-{ +- getChar(c); +- if (!m_isEof) { +- ungetChar(); +- } +-} +- +-bool CsvParser::isQualifier(const QChar& c) const +-{ +- if (true == m_isBackslashSyntax && (c != m_qualifier)) { +- return (c == '\\'); +- } else { +- return (c == m_qualifier); +- } +-} +- +-bool CsvParser::isComment() +-{ +- bool result = false; +- QChar c2; +- qint64 pos = m_ts.pos(); +- +- do { +- getChar(c2); +- } while ((isSpace(c2) || isTab(c2)) && (!m_isEof)); +- +- if (c2 == m_comment) { +- result = true; +- } +- m_ts.seek(pos); +- return result; +-} +- +-bool CsvParser::isText(QChar c) const +-{ +- return !((isCRLF(c)) || (isSeparator(c))); +-} +- +-bool CsvParser::isEmptyRow(const CsvRow& row) const +-{ +- CsvRow::const_iterator it = row.constBegin(); +- for (; it != row.constEnd(); ++it) { +- if (((*it) != "\n") && ((*it) != "")) { +- return false; +- } +- } +- return true; +-} +- +-bool CsvParser::isCRLF(const QChar& c) const +-{ +- return (c == '\n'); +-} +- +-bool CsvParser::isSpace(const QChar& c) const +-{ +- return (c == ' '); +-} +- +-bool CsvParser::isTab(const QChar& c) const +-{ +- return (c == '\t'); +-} +- +-bool CsvParser::isSeparator(const QChar& c) const +-{ +- return (c == m_separator); +-} +- +-bool CsvParser::isTerminator(const QChar& c) const +-{ +- return (isSeparator(c) || (c == '\n') || (c == '\r')); +-} +- +-void CsvParser::setBackslashSyntax(bool set) +-{ +- m_isBackslashSyntax = set; +-} +- +-void CsvParser::setComment(const QChar& c) +-{ +- m_comment = c.unicode(); +-} +- +-void CsvParser::setCodec(const QString& s) +-{ +- m_ts.setCodec(QTextCodec::codecForName(s.toLocal8Bit())); +-} +- +-void CsvParser::setFieldSeparator(const QChar& c) +-{ +- m_separator = c.unicode(); +-} +- +-void CsvParser::setTextQualifier(const QChar& c) +-{ +- m_qualifier = c.unicode(); +-} +- +-int CsvParser::getFileSize() const +-{ +- return m_csv.size(); +-} +- +-const CsvTable CsvParser::getCsvTable() const +-{ +- return m_table; +-} +- +-QString CsvParser::getStatus() const +-{ +- return m_statusMsg; +-} +- +-int CsvParser::getCsvCols() const +-{ +- if (!m_table.isEmpty() && !m_table.at(0).isEmpty()) { +- return m_table.at(0).size(); +- } else { +- return 0; +- } +-} +- +-int CsvParser::getCsvRows() const +-{ +- return m_table.size(); +-} +- +-void CsvParser::appendStatusMsg(const QString& s, bool isCritical) +-{ +- m_statusMsg += QObject::tr("%1: (row, col) %2,%3").arg(s, m_currRow, m_currCol).append("\n"); +- m_isGood = !isCritical; +-} +diff -urNr keepassxc-2.6.4-orig/src/core/CsvParser.h keepassxc-2.6.4-patched/src/core/CsvParser.h +--- keepassxc-2.6.4-orig/src/core/CsvParser.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/CsvParser.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,102 +0,0 @@ +-/* +- * Copyright (C) 2016 Enrico Mariotti +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_CSVPARSER_H +-#define KEEPASSX_CSVPARSER_H +- +-#include +-#include +-#include +-#include +- +-typedef QStringList CsvRow; +-typedef QList CsvTable; +- +-class CsvParser +-{ +- +-public: +- CsvParser(); +- ~CsvParser(); +- // read data from device and parse it +- bool parse(QFile* device); +- bool isFileLoaded(); +- // reparse the same buffer (device is not opened again) +- bool reparse(); +- void setCodec(const QString& s); +- void setComment(const QChar& c); +- void setFieldSeparator(const QChar& c); +- void setTextQualifier(const QChar& c); +- void setBackslashSyntax(bool set); +- int getFileSize() const; +- int getCsvRows() const; +- int getCsvCols() const; +- QString getStatus() const; +- const CsvTable getCsvTable() const; +- +-protected: +- CsvTable m_table; +- +-private: +- QByteArray m_array; +- QBuffer m_csv; +- QChar m_ch; +- QChar m_comment; +- unsigned int m_currCol; +- unsigned int m_currRow; +- bool m_isBackslashSyntax; +- bool m_isEof; +- bool m_isFileLoaded; +- bool m_isGood; +- qint64 m_lastPos; +- int m_maxCols; +- QChar m_qualifier; +- QChar m_separator; +- QString m_statusMsg; +- QTextStream m_ts; +- +- void getChar(QChar& c); +- void ungetChar(); +- void peek(QChar& c); +- void fillColumns(); +- bool isTerminator(const QChar& c) const; +- bool isSeparator(const QChar& c) const; +- bool isQualifier(const QChar& c) const; +- bool processEscapeMark(QString& s, QChar c); +- bool isText(QChar c) const; +- bool isComment(); +- bool isCRLF(const QChar& c) const; +- bool isSpace(const QChar& c) const; +- bool isTab(const QChar& c) const; +- bool isEmptyRow(const CsvRow& row) const; +- bool parseFile(); +- void parseRecord(); +- void parseField(CsvRow& row); +- void parseSimple(QString& s); +- void parseQuoted(QString& s); +- void parseEscaped(QString& s); +- void parseEscapedText(QString& s); +- bool readFile(QFile* device); +- void reset(); +- void clear(); +- bool skipEndline(); +- void skipLine(); +- void appendStatusMsg(const QString& s, bool isCritical = false); +-}; +- +-#endif // CSVPARSER_H +diff -urNr keepassxc-2.6.4-orig/src/core/CustomData.cpp keepassxc-2.6.4-patched/src/core/CustomData.cpp +--- keepassxc-2.6.4-orig/src/core/CustomData.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/CustomData.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,188 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "CustomData.h" +-#include "Clock.h" +- +-#include "core/Global.h" +- +-const QString CustomData::LastModified = QStringLiteral("_LAST_MODIFIED"); +-const QString CustomData::Created = QStringLiteral("_CREATED"); +-const QString CustomData::BrowserKeyPrefix = QStringLiteral("KPXC_BROWSER_"); +-const QString CustomData::BrowserLegacyKeyPrefix = QStringLiteral("Public Key: "); +- +-CustomData::CustomData(QObject* parent) +- : QObject(parent) +-{ +-} +- +-QList CustomData::keys() const +-{ +- return m_data.keys(); +-} +- +-bool CustomData::hasKey(const QString& key) const +-{ +- return m_data.contains(key); +-} +- +-QString CustomData::value(const QString& key) const +-{ +- return m_data.value(key); +-} +- +-bool CustomData::contains(const QString& key) const +-{ +- return m_data.contains(key); +-} +- +-bool CustomData::containsValue(const QString& value) const +-{ +- return asConst(m_data).values().contains(value); +-} +- +-void CustomData::set(const QString& key, const QString& value) +-{ +- bool addAttribute = !m_data.contains(key); +- bool changeValue = !addAttribute && (m_data.value(key) != value); +- +- if (addAttribute) { +- emit aboutToBeAdded(key); +- } +- +- if (addAttribute || changeValue) { +- m_data.insert(key, value); +- updateLastModified(); +- emit customDataModified(); +- } +- +- if (addAttribute) { +- emit added(key); +- } +-} +- +-void CustomData::remove(const QString& key) +-{ +- emit aboutToBeRemoved(key); +- +- m_data.remove(key); +- +- updateLastModified(); +- emit removed(key); +- emit customDataModified(); +-} +- +-void CustomData::rename(const QString& oldKey, const QString& newKey) +-{ +- const bool containsOldKey = m_data.contains(oldKey); +- const bool containsNewKey = m_data.contains(newKey); +- Q_ASSERT(containsOldKey && !containsNewKey); +- if (!containsOldKey || containsNewKey) { +- return; +- } +- +- QString data = value(oldKey); +- +- emit aboutToRename(oldKey, newKey); +- +- m_data.remove(oldKey); +- m_data.insert(newKey, data); +- +- updateLastModified(); +- emit customDataModified(); +- emit renamed(oldKey, newKey); +-} +- +-void CustomData::copyDataFrom(const CustomData* other) +-{ +- if (*this == *other) { +- return; +- } +- +- emit aboutToBeReset(); +- +- m_data = other->m_data; +- +- updateLastModified(); +- emit reset(); +- emit customDataModified(); +-} +- +-QDateTime CustomData::getLastModified() const +-{ +- if (m_data.contains(LastModified)) { +- return Clock::parse(m_data.value(LastModified)); +- } +- return {}; +-} +- +-bool CustomData::isProtectedCustomData(const QString& key) const +-{ +- return key.startsWith(CustomData::BrowserKeyPrefix) || key.startsWith(CustomData::Created); +-} +- +-bool CustomData::operator==(const CustomData& other) const +-{ +- return (m_data == other.m_data); +-} +- +-bool CustomData::operator!=(const CustomData& other) const +-{ +- return (m_data != other.m_data); +-} +- +-void CustomData::clear() +-{ +- emit aboutToBeReset(); +- +- m_data.clear(); +- +- emit reset(); +- emit customDataModified(); +-} +- +-bool CustomData::isEmpty() const +-{ +- return m_data.isEmpty(); +-} +- +-int CustomData::size() const +-{ +- return m_data.size(); +-} +- +-int CustomData::dataSize() const +-{ +- int size = 0; +- +- QHashIterator i(m_data); +- while (i.hasNext()) { +- i.next(); +- size += i.key().toUtf8().size() + i.value().toUtf8().size(); +- } +- return size; +-} +- +-void CustomData::updateLastModified() +-{ +- if (m_data.size() == 1 && m_data.contains(LastModified)) { +- m_data.remove(LastModified); +- return; +- } +- +- m_data.insert(LastModified, Clock::currentDateTimeUtc().toString()); +-} +diff -urNr keepassxc-2.6.4-orig/src/core/CustomData.h keepassxc-2.6.4-patched/src/core/CustomData.h +--- keepassxc-2.6.4-orig/src/core/CustomData.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/CustomData.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,74 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_CUSTOMDATA_H +-#define KEEPASSXC_CUSTOMDATA_H +- +-#include +-#include +-#include +-#include +- +-class CustomData : public QObject +-{ +- Q_OBJECT +- +-public: +- explicit CustomData(QObject* parent = nullptr); +- QList keys() const; +- bool hasKey(const QString& key) const; +- QString value(const QString& key) const; +- bool contains(const QString& key) const; +- bool containsValue(const QString& value) const; +- void set(const QString& key, const QString& value); +- void remove(const QString& key); +- void rename(const QString& oldKey, const QString& newKey); +- void clear(); +- bool isEmpty() const; +- int size() const; +- int dataSize() const; +- void copyDataFrom(const CustomData* other); +- QDateTime getLastModified() const; +- bool isProtectedCustomData(const QString& key) const; +- bool operator==(const CustomData& other) const; +- bool operator!=(const CustomData& other) const; +- +- static const QString LastModified; +- static const QString Created; +- static const QString BrowserKeyPrefix; +- static const QString BrowserLegacyKeyPrefix; +- +-signals: +- void customDataModified(); +- void aboutToBeAdded(const QString& key); +- void added(const QString& key); +- void aboutToBeRemoved(const QString& key); +- void removed(const QString& key); +- void aboutToRename(const QString& oldKey, const QString& newKey); +- void renamed(const QString& oldKey, const QString& newKey); +- void aboutToBeReset(); +- void reset(); +- void lastModified(); +- +-private slots: +- void updateLastModified(); +- +-private: +- QHash m_data; +-}; +- +-#endif // KEEPASSXC_CUSTOMDATA_H +diff -urNr keepassxc-2.6.4-orig/src/core/Database.cpp keepassxc-2.6.4-patched/src/core/Database.cpp +--- keepassxc-2.6.4-orig/src/core/Database.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/Database.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,929 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * Copyright (C) 2010 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "Database.h" +- +-#include "core/AsyncTask.h" +-#include "core/Clock.h" +-#include "core/FileWatcher.h" +-#include "core/Group.h" +-#include "core/Merger.h" +-#include "core/Metadata.h" +-#include "format/KdbxXmlReader.h" +-#include "format/KeePass2Reader.h" +-#include "format/KeePass2Writer.h" +-#include "keys/FileKey.h" +-#include "keys/PasswordKey.h" +- +-#include +-#include +-#include +-#include +-#include +-#include +- +-QHash> Database::s_uuidMap; +- +-Database::Database() +- : m_metadata(new Metadata(this)) +- , m_data() +- , m_rootGroup(nullptr) +- , m_fileWatcher(new FileWatcher(this)) +- , m_emitModified(false) +- , m_uuid(QUuid::createUuid()) +-{ +- setRootGroup(new Group()); +- rootGroup()->setUuid(QUuid::createUuid()); +- rootGroup()->setName(tr("Passwords", "Root group name")); +- m_modifiedTimer.setSingleShot(true); +- +- s_uuidMap.insert(m_uuid, this); +- +- connect(m_metadata, SIGNAL(metadataModified()), SLOT(markAsModified())); +- connect(&m_modifiedTimer, SIGNAL(timeout()), SIGNAL(databaseModified())); +- connect(this, SIGNAL(databaseOpened()), SLOT(updateCommonUsernames())); +- connect(this, SIGNAL(databaseSaved()), SLOT(updateCommonUsernames())); +- connect(m_fileWatcher, &FileWatcher::fileChanged, this, &Database::databaseFileChanged); +- +- m_modified = false; +- m_emitModified = true; +-} +- +-Database::Database(const QString& filePath) +- : Database() +-{ +- setFilePath(filePath); +-} +- +-Database::~Database() +-{ +- releaseData(); +-} +- +-QUuid Database::uuid() const +-{ +- return m_uuid; +-} +- +-/** +- * Open the database from a previously specified file. +- * Unless `readOnly` is set to false, the database will be opened in +- * read-write mode and fall back to read-only if that is not possible. +- * +- * @param key composite key for unlocking the database +- * @param readOnly open in read-only mode +- * @param error error message in case of failure +- * @return true on success +- */ +-bool Database::open(QSharedPointer key, QString* error, bool readOnly) +-{ +- Q_ASSERT(!m_data.filePath.isEmpty()); +- if (m_data.filePath.isEmpty()) { +- return false; +- } +- return open(m_data.filePath, std::move(key), error, readOnly); +-} +- +-/** +- * Open the database from a file. +- * Unless `readOnly` is set to false, the database will be opened in +- * read-write mode and fall back to read-only if that is not possible. +- * +- * @param filePath path to the file +- * @param key composite key for unlocking the database +- * @param readOnly open in read-only mode +- * @param error error message in case of failure +- * @return true on success +- */ +-bool Database::open(const QString& filePath, QSharedPointer key, QString* error, bool readOnly) +-{ +- QFile dbFile(filePath); +- if (!dbFile.exists()) { +- if (error) { +- *error = tr("File %1 does not exist.").arg(filePath); +- } +- return false; +- } +- +- // Don't autodetect read-only mode, as it triggers an upstream bug. +- // See https://github.com/keepassxreboot/keepassxc/issues/803 +- // if (!readOnly && !dbFile.open(QIODevice::ReadWrite)) { +- // readOnly = true; +- // } +- // +- // if (!dbFile.isOpen() && !dbFile.open(QIODevice::ReadOnly)) { +- if (!dbFile.open(QIODevice::ReadOnly)) { +- if (error) { +- *error = tr("Unable to open file %1.").arg(filePath); +- } +- return false; +- } +- +- setEmitModified(false); +- +- KeePass2Reader reader; +- if (!reader.readDatabase(&dbFile, std::move(key), this)) { +- if (error) { +- *error = tr("Error while reading the database: %1").arg(reader.errorString()); +- } +- return false; +- } +- +- setReadOnly(readOnly); +- setFilePath(filePath); +- dbFile.close(); +- +- markAsClean(); +- +- emit databaseOpened(); +- m_fileWatcher->start(canonicalFilePath(), 30, 1); +- setEmitModified(true); +- +- return true; +-} +- +-bool Database::isSaving() +-{ +- bool locked = m_saveMutex.tryLock(); +- if (locked) { +- m_saveMutex.unlock(); +- } +- return !locked; +-} +- +-/** +- * Save the database to the current file path. It is an error to call this function +- * if no file path has been defined. +- * +- * @param error error message in case of failure +- * @param atomic Use atomic file transactions +- * @param backup Backup the existing database file, if exists +- * @return true on success +- */ +-bool Database::save(QString* error, bool atomic, bool backup) +-{ +- Q_ASSERT(!m_data.filePath.isEmpty()); +- if (m_data.filePath.isEmpty()) { +- if (error) { +- *error = tr("Could not save, database does not point to a valid file."); +- } +- return false; +- } +- +- return saveAs(m_data.filePath, error, atomic, backup); +-} +- +-/** +- * Save the database to a specific file. +- * +- * If atomic is false, this function uses QTemporaryFile instead of QSaveFile +- * due to a bug in Qt (https://bugreports.qt.io/browse/QTBUG-57299) that may +- * prevent the QSaveFile from renaming itself when using Dropbox, Google Drive, +- * or OneDrive. +- * +- * The risk in using QTemporaryFile is that the rename function is not atomic +- * and may result in loss of data if there is a crash or power loss at the +- * wrong moment. +- * +- * @param filePath Absolute path of the file to save +- * @param error error message in case of failure +- * @param atomic Use atomic file transactions +- * @param backup Backup the existing database file, if exists +- * @return true on success +- */ +-bool Database::saveAs(const QString& filePath, QString* error, bool atomic, bool backup) +-{ +- // Disallow overlapping save operations +- if (isSaving()) { +- if (error) { +- *error = tr("Database save is already in progress."); +- } +- return false; +- } +- +- // Never save an uninitialized database +- if (!isInitialized()) { +- if (error) { +- *error = tr("Could not save, database has not been initialized!"); +- } +- return false; +- } +- +- // Prevent destructive operations while saving +- QMutexLocker locker(&m_saveMutex); +- +- if (filePath == m_data.filePath) { +- // Disallow saving to the same file if read-only +- if (m_data.isReadOnly) { +- Q_ASSERT_X(false, "Database::saveAs", "Could not save, database file is read-only."); +- if (error) { +- *error = tr("Could not save, database file is read-only."); +- } +- return false; +- } +- +- // Fail-safe check to make sure we don't overwrite underlying file changes +- // that have not yet triggered a file reload/merge operation. +- if (!m_fileWatcher->hasSameFileChecksum()) { +- if (error) { +- *error = tr("Database file has unmerged changes."); +- } +- return false; +- } +- } +- +- // Clear read-only flag +- setReadOnly(false); +- m_fileWatcher->stop(); +- +- QFileInfo fileInfo(filePath); +- auto realFilePath = fileInfo.exists() ? fileInfo.canonicalFilePath() : fileInfo.absoluteFilePath(); +- bool isNewFile = !QFile::exists(realFilePath); +- bool ok = AsyncTask::runAndWaitForFuture([&] { return performSave(realFilePath, error, atomic, backup); }); +- if (ok) { +- markAsClean(); +- setFilePath(filePath); +- if (isNewFile) { +- QFile::setPermissions(realFilePath, QFile::ReadUser | QFile::WriteUser); +- } +- m_fileWatcher->start(realFilePath, 30, 1); +- } else { +- // Saving failed, don't rewatch file since it does not represent our database +- markAsModified(); +- } +- +- return ok; +-} +- +-bool Database::performSave(const QString& filePath, QString* error, bool atomic, bool backup) +-{ +- if (atomic) { +- QSaveFile saveFile(filePath); +- if (saveFile.open(QIODevice::WriteOnly)) { +- // write the database to the file +- if (!writeDatabase(&saveFile, error)) { +- return false; +- } +- +- if (backup) { +- backupDatabase(filePath); +- } +- +- if (saveFile.commit()) { +- // successfully saved database file +- return true; +- } +- } +- +- if (error) { +- *error = saveFile.errorString(); +- } +- } else { +- QTemporaryFile tempFile; +- if (tempFile.open()) { +- // write the database to the file +- if (!writeDatabase(&tempFile, error)) { +- return false; +- } +- +- tempFile.close(); // flush to disk +- +- if (backup) { +- backupDatabase(filePath); +- } +- +- // Delete the original db and move the temp file in place +- auto perms = QFile::permissions(filePath); +- QFile::remove(filePath); +- +- // Note: call into the QFile rename instead of QTemporaryFile +- // due to an undocumented difference in how the function handles +- // errors. This prevents errors when saving across file systems. +- if (tempFile.QFile::rename(filePath)) { +- // successfully saved the database +- tempFile.setAutoRemove(false); +- QFile::setPermissions(filePath, perms); +- return true; +- } else if (!backup || !restoreDatabase(filePath)) { +- // Failed to copy new database in place, and +- // failed to restore from backup or backups disabled +- tempFile.setAutoRemove(false); +- if (error) { +- *error = tr("%1\nBackup database located at %2").arg(tempFile.errorString(), tempFile.fileName()); +- } +- return false; +- } +- } +- +- if (error) { +- *error = tempFile.errorString(); +- } +- } +- +- // Saving failed +- return false; +-} +- +-bool Database::writeDatabase(QIODevice* device, QString* error) +-{ +- Q_ASSERT(!m_data.isReadOnly); +- if (m_data.isReadOnly) { +- if (error) { +- *error = tr("File cannot be written as it is opened in read-only mode."); +- } +- return false; +- } +- +- PasswordKey oldTransformedKey; +- if (m_data.key->isEmpty()) { +- oldTransformedKey.setHash(m_data.transformedDatabaseKey->rawKey()); +- } +- +- KeePass2Writer writer; +- setEmitModified(false); +- writer.writeDatabase(device, this); +- setEmitModified(true); +- +- if (writer.hasError()) { +- if (error) { +- *error = writer.errorString(); +- } +- return false; +- } +- +- QByteArray newKey = m_data.transformedDatabaseKey->rawKey(); +- Q_ASSERT(!newKey.isEmpty()); +- Q_ASSERT(newKey != oldTransformedKey.rawKey()); +- if (newKey.isEmpty() || newKey == oldTransformedKey.rawKey()) { +- if (error) { +- *error = tr("Key not transformed. This is a bug, please report it to the developers!"); +- } +- return false; +- } +- +- return true; +-} +- +-bool Database::extract(QByteArray& xmlOutput, QString* error) +-{ +- KeePass2Writer writer; +- writer.extractDatabase(this, xmlOutput); +- if (writer.hasError()) { +- if (error) { +- *error = writer.errorString(); +- } +- return false; +- } +- +- return true; +-} +- +-bool Database::import(const QString& xmlExportPath, QString* error) +-{ +- KdbxXmlReader reader(KeePass2::FILE_VERSION_4); +- QFile file(xmlExportPath); +- file.open(QIODevice::ReadOnly); +- +- reader.readDatabase(&file, this); +- +- if (reader.hasError()) { +- if (error) { +- *error = reader.errorString(); +- } +- return false; +- } +- +- return true; +-} +- +-/** +- * Release all stored group, entry, and meta data of this database. +- * +- * Call this method to ensure all data is cleared even if valid +- * pointers to this Database object are still being held. +- * +- * A previously reparented root group will not be freed. +- */ +- +-void Database::releaseData() +-{ +- // Prevent data release while saving +- QMutexLocker locker(&m_saveMutex); +- +- if (m_modified) { +- emit databaseDiscarded(); +- } +- +- setEmitModified(false); +- m_modified = false; +- m_modifiedTimer.stop(); +- +- s_uuidMap.remove(m_uuid); +- m_uuid = QUuid(); +- +- m_data.clear(); +- m_metadata->clear(); +- +- setRootGroup(new Group()); +- +- m_fileWatcher->stop(); +- +- m_deletedObjects.clear(); +- m_commonUsernames.clear(); +-} +- +-/** +- * Remove the old backup and replace it with a new one +- * backups are named .old. +- * +- * @param filePath Path to the file to backup +- * @return true on success +- */ +-bool Database::backupDatabase(const QString& filePath) +-{ +- static auto re = QRegularExpression("(\\.[^.]+)$"); +- +- auto match = re.match(filePath); +- auto backupFilePath = filePath; +- auto perms = QFile::permissions(filePath); +- backupFilePath = backupFilePath.replace(re, "") + ".old" + match.captured(1); +- QFile::remove(backupFilePath); +- bool res = QFile::copy(filePath, backupFilePath); +- QFile::setPermissions(backupFilePath, perms); +- return res; +-} +- +-/** +- * Restores the database file from the backup file with +- * name .old. to filePath. This will +- * overwrite the existing file! +- * +- * @param filePath Path to the file to restore +- * @return true on success +- */ +-bool Database::restoreDatabase(const QString& filePath) +-{ +- static auto re = QRegularExpression("^(.*?)(\\.[^.]+)?$"); +- +- auto match = re.match(filePath); +- auto perms = QFile::permissions(filePath); +- auto backupFilePath = match.captured(1) + ".old" + match.captured(2); +- // Only try to restore if the backup file actually exists +- if (QFile::exists(backupFilePath)) { +- QFile::remove(filePath); +- return QFile::copy(backupFilePath, filePath); +- QFile::setPermissions(filePath, perms); +- } +- return false; +-} +- +-bool Database::isReadOnly() const +-{ +- return m_data.isReadOnly; +-} +- +-void Database::setReadOnly(bool readOnly) +-{ +- m_data.isReadOnly = readOnly; +-} +- +-/** +- * Returns true if the database key exists, has subkeys, and the +- * root group exists +- * +- * @return true if database has been fully initialized +- */ +-bool Database::isInitialized() const +-{ +- return m_data.key && !m_data.key->isEmpty() && m_rootGroup; +-} +- +-Group* Database::rootGroup() +-{ +- return m_rootGroup; +-} +- +-const Group* Database::rootGroup() const +-{ +- return m_rootGroup; +-} +- +-/** +- * Sets group as the root group and takes ownership of it. +- * Warning: Be careful when calling this method as it doesn't +- * emit any notifications so e.g. models aren't updated. +- * The caller is responsible for cleaning up the previous +- root group. +- */ +-void Database::setRootGroup(Group* group) +-{ +- Q_ASSERT(group); +- +- if (isInitialized() && isModified()) { +- emit databaseDiscarded(); +- } +- +- m_rootGroup = group; +- m_rootGroup->setParent(this); +-} +- +-Metadata* Database::metadata() +-{ +- return m_metadata; +-} +- +-const Metadata* Database::metadata() const +-{ +- return m_metadata; +-} +- +-/** +- * Returns the original file path that was provided for +- * this database. This path may not exist, may contain +- * unresolved symlinks, or have malformed slashes. +- * +- * @return original file path +- */ +-QString Database::filePath() const +-{ +- return m_data.filePath; +-} +- +-/** +- * Returns the canonical file path of this databases' +- * set file path. This returns an empty string if the +- * file does not exist or cannot be resolved. +- * +- * @return canonical file path +- */ +-QString Database::canonicalFilePath() const +-{ +- QFileInfo fileInfo(m_data.filePath); +- return fileInfo.canonicalFilePath(); +-} +- +-void Database::setFilePath(const QString& filePath) +-{ +- if (filePath != m_data.filePath) { +- QString oldPath = m_data.filePath; +- m_data.filePath = filePath; +- // Don't watch for changes until the next open or save operation +- m_fileWatcher->stop(); +- emit filePathChanged(oldPath, filePath); +- } +-} +- +-QList Database::deletedObjects() +-{ +- return m_deletedObjects; +-} +- +-const QList& Database::deletedObjects() const +-{ +- return m_deletedObjects; +-} +- +-bool Database::containsDeletedObject(const QUuid& uuid) const +-{ +- for (const DeletedObject& currentObject : m_deletedObjects) { +- if (currentObject.uuid == uuid) { +- return true; +- } +- } +- return false; +-} +- +-bool Database::containsDeletedObject(const DeletedObject& object) const +-{ +- for (const DeletedObject& currentObject : m_deletedObjects) { +- if (currentObject.uuid == object.uuid) { +- return true; +- } +- } +- return false; +-} +- +-void Database::setDeletedObjects(const QList& delObjs) +-{ +- if (m_deletedObjects == delObjs) { +- return; +- } +- m_deletedObjects = delObjs; +-} +- +-void Database::addDeletedObject(const DeletedObject& delObj) +-{ +- Q_ASSERT(delObj.deletionTime.timeSpec() == Qt::UTC); +- m_deletedObjects.append(delObj); +-} +- +-void Database::addDeletedObject(const QUuid& uuid) +-{ +- DeletedObject delObj; +- delObj.deletionTime = Clock::currentDateTimeUtc(); +- delObj.uuid = uuid; +- +- addDeletedObject(delObj); +-} +- +-QList Database::commonUsernames() +-{ +- return m_commonUsernames; +-} +- +-void Database::updateCommonUsernames(int topN) +-{ +- m_commonUsernames.clear(); +- m_commonUsernames.append(rootGroup()->usernamesRecursive(topN)); +-} +- +-const QUuid& Database::cipher() const +-{ +- return m_data.cipher; +-} +- +-Database::CompressionAlgorithm Database::compressionAlgorithm() const +-{ +- return m_data.compressionAlgorithm; +-} +- +-QByteArray Database::transformedDatabaseKey() const +-{ +- return m_data.transformedDatabaseKey->rawKey(); +-} +- +-QByteArray Database::challengeResponseKey() const +-{ +- return m_data.challengeResponseKey->rawKey(); +-} +- +-bool Database::challengeMasterSeed(const QByteArray& masterSeed) +-{ +- m_keyError.clear(); +- if (m_data.key) { +- m_data.masterSeed->setHash(masterSeed); +- QByteArray response; +- bool ok = m_data.key->challenge(masterSeed, response, &m_keyError); +- if (ok && !response.isEmpty()) { +- m_data.challengeResponseKey->setHash(response); +- } else if (ok && response.isEmpty()) { +- // no CR key present, make sure buffer is empty +- m_data.challengeResponseKey.reset(new PasswordKey); +- } +- return ok; +- } +- return false; +-} +- +-void Database::setCipher(const QUuid& cipher) +-{ +- Q_ASSERT(!cipher.isNull()); +- +- m_data.cipher = cipher; +-} +- +-void Database::setCompressionAlgorithm(Database::CompressionAlgorithm algo) +-{ +- Q_ASSERT(static_cast(algo) <= CompressionAlgorithmMax); +- +- m_data.compressionAlgorithm = algo; +-} +- +-/** +- * Set and transform a new encryption key. +- * +- * @param key key to set and transform or nullptr to reset the key +- * @param updateChangedTime true to update database change time +- * @param updateTransformSalt true to update the transform salt +- * @param transformKey trigger the KDF after setting the key +- * @return true on success +- */ +-bool Database::setKey(const QSharedPointer& key, +- bool updateChangedTime, +- bool updateTransformSalt, +- bool transformKey) +-{ +- Q_ASSERT(!m_data.isReadOnly); +- m_keyError.clear(); +- +- if (!key) { +- m_data.key.reset(); +- m_data.transformedDatabaseKey.reset(new PasswordKey()); +- return true; +- } +- +- if (updateTransformSalt) { +- m_data.kdf->randomizeSeed(); +- Q_ASSERT(!m_data.kdf->seed().isEmpty()); +- } +- +- PasswordKey oldTransformedDatabaseKey; +- if (m_data.key && !m_data.key->isEmpty()) { +- oldTransformedDatabaseKey.setHash(m_data.transformedDatabaseKey->rawKey()); +- } +- +- QByteArray transformedDatabaseKey; +- +- if (!transformKey) { +- transformedDatabaseKey = QByteArray(oldTransformedDatabaseKey.rawKey()); +- } else if (!key->transform(*m_data.kdf, transformedDatabaseKey, &m_keyError)) { +- return false; +- } +- +- m_data.key = key; +- if (!transformedDatabaseKey.isEmpty()) { +- m_data.transformedDatabaseKey->setHash(transformedDatabaseKey); +- } +- if (updateChangedTime) { +- m_metadata->setDatabaseKeyChanged(Clock::currentDateTimeUtc()); +- } +- +- if (oldTransformedDatabaseKey.rawKey() != m_data.transformedDatabaseKey->rawKey()) { +- markAsModified(); +- } +- +- return true; +-} +- +-QString Database::keyError() +-{ +- return m_keyError; +-} +- +-QVariantMap& Database::publicCustomData() +-{ +- return m_data.publicCustomData; +-} +- +-const QVariantMap& Database::publicCustomData() const +-{ +- return m_data.publicCustomData; +-} +- +-void Database::setPublicCustomData(const QVariantMap& customData) +-{ +- Q_ASSERT(!m_data.isReadOnly); +- m_data.publicCustomData = customData; +-} +- +-void Database::createRecycleBin() +-{ +- Q_ASSERT(!m_data.isReadOnly); +- +- auto recycleBin = new Group(); +- recycleBin->setUuid(QUuid::createUuid()); +- recycleBin->setParent(rootGroup()); +- recycleBin->setName(tr("Recycle Bin")); +- recycleBin->setIcon(Group::RecycleBinIconNumber); +- recycleBin->setSearchingEnabled(Group::Disable); +- recycleBin->setAutoTypeEnabled(Group::Disable); +- +- m_metadata->setRecycleBin(recycleBin); +-} +- +-void Database::recycleEntry(Entry* entry) +-{ +- Q_ASSERT(!m_data.isReadOnly); +- if (m_metadata->recycleBinEnabled()) { +- if (!m_metadata->recycleBin()) { +- createRecycleBin(); +- } +- entry->setGroup(metadata()->recycleBin()); +- } else { +- delete entry; +- } +-} +- +-void Database::recycleGroup(Group* group) +-{ +- Q_ASSERT(!m_data.isReadOnly); +- if (m_metadata->recycleBinEnabled()) { +- if (!m_metadata->recycleBin()) { +- createRecycleBin(); +- } +- group->setParent(metadata()->recycleBin()); +- } else { +- delete group; +- } +-} +- +-void Database::emptyRecycleBin() +-{ +- Q_ASSERT(!m_data.isReadOnly); +- if (m_metadata->recycleBinEnabled() && m_metadata->recycleBin()) { +- // destroying direct entries of the recycle bin +- QList subEntries = m_metadata->recycleBin()->entries(); +- for (Entry* entry : subEntries) { +- delete entry; +- } +- // destroying direct subgroups of the recycle bin +- QList subGroups = m_metadata->recycleBin()->children(); +- for (Group* group : subGroups) { +- delete group; +- } +- } +-} +- +-void Database::setEmitModified(bool value) +-{ +- if (m_emitModified && !value) { +- m_modifiedTimer.stop(); +- } +- +- m_emitModified = value; +-} +- +-bool Database::isModified() const +-{ +- return m_modified; +-} +- +-bool Database::hasNonDataChanges() const +-{ +- return m_hasNonDataChange; +-} +- +-void Database::markAsModified() +-{ +- m_modified = true; +- if (m_emitModified && !m_modifiedTimer.isActive()) { +- // Small time delay prevents numerous consecutive saves due to repeated signals +- m_modifiedTimer.start(150); +- } +-} +- +-void Database::markAsClean() +-{ +- bool emitSignal = m_modified; +- m_modified = false; +- m_modifiedTimer.stop(); +- m_hasNonDataChange = false; +- if (emitSignal) { +- emit databaseSaved(); +- } +-} +- +-void Database::markNonDataChange() +-{ +- m_hasNonDataChange = true; +-} +- +-/** +- * @param uuid UUID of the database +- * @return pointer to the database or nullptr if no such database exists +- */ +-Database* Database::databaseByUuid(const QUuid& uuid) +-{ +- return s_uuidMap.value(uuid, nullptr); +-} +- +-QSharedPointer Database::key() const +-{ +- return m_data.key; +-} +- +-QSharedPointer Database::kdf() const +-{ +- return m_data.kdf; +-} +- +-void Database::setKdf(QSharedPointer kdf) +-{ +- Q_ASSERT(!m_data.isReadOnly); +- m_data.kdf = std::move(kdf); +-} +- +-bool Database::changeKdf(const QSharedPointer& kdf) +-{ +- Q_ASSERT(!m_data.isReadOnly); +- +- kdf->randomizeSeed(); +- QByteArray transformedDatabaseKey; +- if (!m_data.key) { +- m_data.key = QSharedPointer::create(); +- } +- if (!m_data.key->transform(*kdf, transformedDatabaseKey)) { +- return false; +- } +- +- setKdf(kdf); +- m_data.transformedDatabaseKey->setHash(transformedDatabaseKey); +- markAsModified(); +- +- return true; +-} +diff -urNr keepassxc-2.6.4-orig/src/core/Database.h keepassxc-2.6.4-patched/src/core/Database.h +--- keepassxc-2.6.4-orig/src/core/Database.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/Database.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,224 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * Copyright (C) 2010 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_DATABASE_H +-#define KEEPASSX_DATABASE_H +- +-#include +-#include +-#include +-#include +-#include +-#include +- +-#include "config-keepassx.h" +-#include "crypto/kdf/AesKdf.h" +-#include "crypto/kdf/Kdf.h" +-#include "format/KeePass2.h" +-#include "keys/CompositeKey.h" +-#include "keys/PasswordKey.h" +- +-class Entry; +-enum class EntryReferenceType; +-class FileWatcher; +-class Group; +-class Metadata; +-class QIODevice; +- +-struct DeletedObject +-{ +- QUuid uuid; +- QDateTime deletionTime; +- bool operator==(const DeletedObject& other) const +- { +- return uuid == other.uuid && deletionTime == other.deletionTime; +- } +-}; +- +-Q_DECLARE_TYPEINFO(DeletedObject, Q_MOVABLE_TYPE); +- +-class Database : public QObject +-{ +- Q_OBJECT +- +-public: +- enum CompressionAlgorithm +- { +- CompressionNone = 0, +- CompressionGZip = 1 +- }; +- static const quint32 CompressionAlgorithmMax = CompressionGZip; +- +- Database(); +- explicit Database(const QString& filePath); +- ~Database() override; +- +- bool open(QSharedPointer key, QString* error = nullptr, bool readOnly = false); +- bool open(const QString& filePath, +- QSharedPointer key, +- QString* error = nullptr, +- bool readOnly = false); +- bool save(QString* error = nullptr, bool atomic = true, bool backup = false); +- bool saveAs(const QString& filePath, QString* error = nullptr, bool atomic = true, bool backup = false); +- bool extract(QByteArray&, QString* error = nullptr); +- bool import(const QString& xmlExportPath, QString* error = nullptr); +- +- void releaseData(); +- +- bool isInitialized() const; +- bool isModified() const; +- bool hasNonDataChanges() const; +- void setEmitModified(bool value); +- bool isReadOnly() const; +- void setReadOnly(bool readOnly); +- bool isSaving(); +- +- QUuid uuid() const; +- QString filePath() const; +- QString canonicalFilePath() const; +- void setFilePath(const QString& filePath); +- +- Metadata* metadata(); +- const Metadata* metadata() const; +- Group* rootGroup(); +- const Group* rootGroup() const; +- void setRootGroup(Group* group); +- QVariantMap& publicCustomData(); +- const QVariantMap& publicCustomData() const; +- void setPublicCustomData(const QVariantMap& customData); +- +- void recycleGroup(Group* group); +- void recycleEntry(Entry* entry); +- void emptyRecycleBin(); +- QList deletedObjects(); +- const QList& deletedObjects() const; +- void addDeletedObject(const DeletedObject& delObj); +- void addDeletedObject(const QUuid& uuid); +- bool containsDeletedObject(const QUuid& uuid) const; +- bool containsDeletedObject(const DeletedObject& uuid) const; +- void setDeletedObjects(const QList& delObjs); +- +- QList commonUsernames(); +- +- QSharedPointer key() const; +- bool setKey(const QSharedPointer& key, +- bool updateChangedTime = true, +- bool updateTransformSalt = false, +- bool transformKey = true); +- QString keyError(); +- QByteArray challengeResponseKey() const; +- bool challengeMasterSeed(const QByteArray& masterSeed); +- const QUuid& cipher() const; +- void setCipher(const QUuid& cipher); +- Database::CompressionAlgorithm compressionAlgorithm() const; +- void setCompressionAlgorithm(Database::CompressionAlgorithm algo); +- +- QSharedPointer kdf() const; +- void setKdf(QSharedPointer kdf); +- bool changeKdf(const QSharedPointer& kdf); +- QByteArray transformedDatabaseKey() const; +- +- static Database* databaseByUuid(const QUuid& uuid); +- +-public slots: +- void markAsModified(); +- void markAsClean(); +- void updateCommonUsernames(int topN = 10); +- void markNonDataChange(); +- +-signals: +- void filePathChanged(const QString& oldPath, const QString& newPath); +- void groupDataChanged(Group* group); +- void groupAboutToAdd(Group* group, int index); +- void groupAdded(); +- void groupAboutToRemove(Group* group); +- void groupRemoved(); +- void groupAboutToMove(Group* group, Group* toGroup, int index); +- void groupMoved(); +- void databaseOpened(); +- void databaseModified(); +- void databaseSaved(); +- void databaseDiscarded(); +- void databaseFileChanged(); +- +-private: +- struct DatabaseData +- { +- QString filePath; +- bool isReadOnly = false; +- QUuid cipher = KeePass2::CIPHER_AES256; +- CompressionAlgorithm compressionAlgorithm = CompressionGZip; +- +- QScopedPointer masterSeed; +- QScopedPointer transformedDatabaseKey; +- QScopedPointer challengeResponseKey; +- +- QSharedPointer key; +- QSharedPointer kdf = QSharedPointer::create(true); +- +- QVariantMap publicCustomData; +- +- DatabaseData() +- : masterSeed(new PasswordKey()) +- , transformedDatabaseKey(new PasswordKey()) +- , challengeResponseKey(new PasswordKey()) +- { +- kdf->randomizeSeed(); +- } +- +- void clear() +- { +- filePath.clear(); +- +- masterSeed.reset(); +- transformedDatabaseKey.reset(); +- challengeResponseKey.reset(); +- +- key.reset(); +- kdf.reset(); +- +- publicCustomData.clear(); +- } +- }; +- +- void createRecycleBin(); +- +- bool writeDatabase(QIODevice* device, QString* error = nullptr); +- bool backupDatabase(const QString& filePath); +- bool restoreDatabase(const QString& filePath); +- bool performSave(const QString& filePath, QString* error, bool atomic, bool backup); +- +- QPointer const m_metadata; +- DatabaseData m_data; +- QPointer m_rootGroup; +- QList m_deletedObjects; +- QTimer m_modifiedTimer; +- QMutex m_saveMutex; +- QPointer m_fileWatcher; +- bool m_modified = false; +- bool m_emitModified; +- bool m_hasNonDataChange = false; +- QString m_keyError; +- +- QList m_commonUsernames; +- +- QUuid m_uuid; +- static QHash> s_uuidMap; +-}; +- +-#endif // KEEPASSX_DATABASE_H +diff -urNr keepassxc-2.6.4-orig/src/core/DatabaseIcons.cpp keepassxc-2.6.4-patched/src/core/DatabaseIcons.cpp +--- keepassxc-2.6.4-orig/src/core/DatabaseIcons.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/DatabaseIcons.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,120 +0,0 @@ +-/* +- * Copyright (C) 2010 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "DatabaseIcons.h" +- +-#include "core/Config.h" +-#include "core/Global.h" +-#include "core/Resources.h" +-#include "gui/MainWindow.h" +- +-#include +-#include +-#include +-#include +- +-DatabaseIcons* DatabaseIcons::m_instance(nullptr); +- +-namespace +-{ +- const QString iconDir = QStringLiteral(":/icons/database/"); +- QStringList iconList; +- +- const QString badgeDir = QStringLiteral(":/icons/badges/"); +- QStringList badgeList; +-} // namespace +- +-DatabaseIcons::DatabaseIcons() +-{ +- iconList = QDir(iconDir).entryList(QDir::NoFilter, QDir::Name); +- badgeList = QDir(badgeDir).entryList(QDir::NoFilter, QDir::Name); +- +- // Set this early and once to ensure consistent icon size until app restart +- m_compactMode = config()->get(Config::GUI_CompactMode).toBool(); +-} +- +-DatabaseIcons* DatabaseIcons::instance() +-{ +- if (!m_instance) { +- m_instance = new DatabaseIcons(); +- } +- +- return m_instance; +-} +- +-QPixmap DatabaseIcons::icon(int index, IconSize size) +-{ +- if (index < 0 || index >= count()) { +- qWarning("DatabaseIcons::icon: invalid icon index %d", index); +- return {}; +- } +- +- auto cacheKey = QString::number(index); +- auto icon = m_iconCache.value(cacheKey); +- if (icon.isNull()) { +- icon.addFile(iconDir + iconList[index]); +- icon.addPixmap(icon.pixmap(64)); +- m_iconCache.insert(cacheKey, icon); +- } +- +- return icon.pixmap(iconSize(size)); +-} +- +-QPixmap DatabaseIcons::applyBadge(const QPixmap& basePixmap, Badges badgeIndex) +-{ +- const auto cacheKey = QStringLiteral("badgedicon-%1-%2").arg(basePixmap.cacheKey()).arg(badgeIndex); +- QPixmap pixmap = basePixmap; +- if (badgeIndex < 0 || badgeIndex >= badgeList.size()) { +- qWarning("DatabaseIcons: Out-of-range badge index given to applyBadge: %d", badgeIndex); +- } else if (!QPixmapCache::find(cacheKey, &pixmap)) { +- int baseSize = basePixmap.width(); +- int badgeSize = +- baseSize <= iconSize(IconSize::Default) * basePixmap.devicePixelRatio() ? baseSize * 0.6 : baseSize * 0.5; +- QPoint badgePos(baseSize - badgeSize, baseSize - badgeSize); +- badgePos /= basePixmap.devicePixelRatio(); +- +- QImageReader reader(badgeDir + badgeList[badgeIndex]); +- reader.setScaledSize({badgeSize, badgeSize}); +- auto badge = QPixmap::fromImageReader(&reader); +- badge.setDevicePixelRatio(basePixmap.devicePixelRatio()); +- +- QPainter painter(&pixmap); +- painter.setCompositionMode(QPainter::CompositionMode_SourceOver); +- painter.drawPixmap(badgePos, badge); +- +- QPixmapCache::insert(cacheKey, pixmap); +- } +- +- return pixmap; +-} +- +-int DatabaseIcons::count() +-{ +- return iconList.size(); +-} +- +-int DatabaseIcons::iconSize(IconSize size) +-{ +- switch (size) { +- case Medium: +- return m_compactMode ? 26 : 30; +- case Large: +- return m_compactMode ? 30 : 36; +- default: +- return m_compactMode ? 16 : 22; +- } +-} +diff -urNr keepassxc-2.6.4-orig/src/core/DatabaseIcons.h keepassxc-2.6.4-patched/src/core/DatabaseIcons.h +--- keepassxc-2.6.4-orig/src/core/DatabaseIcons.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/DatabaseIcons.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,59 +0,0 @@ +-/* +- * Copyright (C) 2010 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_DATABASEICONS_H +-#define KEEPASSX_DATABASEICONS_H +- +-#include "core/Global.h" +-#include +- +-class DatabaseIcons +-{ +-public: +- static DatabaseIcons* instance(); +- +- static constexpr int ExpiredIconIndex = 45; +- +- enum Badges +- { +- ShareActive = 0, +- ShareInactive, +- Expired +- }; +- +- QPixmap icon(int index, IconSize size = IconSize::Default); +- QPixmap applyBadge(const QPixmap& basePixmap, Badges badgeIndex); +- int count(); +- +- int iconSize(IconSize size); +- +-private: +- DatabaseIcons(); +- +- static DatabaseIcons* m_instance; +- QHash m_iconCache; +- bool m_compactMode; +- +- Q_DISABLE_COPY(DatabaseIcons) +-}; +- +-inline DatabaseIcons* databaseIcons() +-{ +- return DatabaseIcons::instance(); +-} +- +-#endif // KEEPASSX_DATABASEICONS_H +diff -urNr keepassxc-2.6.4-orig/src/core/Endian.h keepassxc-2.6.4-patched/src/core/Endian.h +--- keepassxc-2.6.4-orig/src/core/Endian.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/Endian.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,75 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * Copyright (C) 2010 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_ENDIAN_H +-#define KEEPASSX_ENDIAN_H +- +-#include +-#include +-#include +-#include +- +-namespace Endian +-{ +- +- template SizedQInt bytesToSizedInt(const QByteArray& ba, QSysInfo::Endian byteOrder) +- { +- Q_ASSERT(ba.size() == sizeof(SizedQInt)); +- +- if (byteOrder == QSysInfo::LittleEndian) { +- return qFromLittleEndian(reinterpret_cast(ba.constData())); +- } +- return qFromBigEndian(reinterpret_cast(ba.constData())); +- } +- +- template SizedQInt readSizedInt(QIODevice* device, QSysInfo::Endian byteOrder, bool* ok) +- { +- QByteArray ba = device->read(sizeof(SizedQInt)); +- +- if (ba.size() != sizeof(SizedQInt)) { +- *ok = false; +- return 0; +- } +- *ok = true; +- return bytesToSizedInt(ba, byteOrder); +- } +- +- template QByteArray sizedIntToBytes(SizedQInt num, QSysInfo::Endian byteOrder) +- { +- QByteArray ba; +- ba.resize(sizeof(SizedQInt)); +- +- if (byteOrder == QSysInfo::LittleEndian) { +- qToLittleEndian(num, reinterpret_cast(ba.data())); +- } else { +- qToBigEndian(num, reinterpret_cast(ba.data())); +- } +- +- return ba; +- } +- +- template bool writeSizedInt(SizedQInt num, QIODevice* device, QSysInfo::Endian byteOrder) +- { +- QByteArray ba = sizedIntToBytes(num, byteOrder); +- qint64 bytesWritten = device->write(ba); +- return (bytesWritten == ba.size()); +- } +- +-} // namespace Endian +- +-#endif // KEEPASSX_ENDIAN_H +diff -urNr keepassxc-2.6.4-orig/src/core/EntryAttachments.cpp keepassxc-2.6.4-patched/src/core/EntryAttachments.cpp +--- keepassxc-2.6.4-orig/src/core/EntryAttachments.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/EntryAttachments.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,163 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "EntryAttachments.h" +- +-#include "core/Global.h" +- +-#include +-#include +- +-EntryAttachments::EntryAttachments(QObject* parent) +- : QObject(parent) +-{ +-} +- +-QList EntryAttachments::keys() const +-{ +- return m_attachments.keys(); +-} +- +-bool EntryAttachments::hasKey(const QString& key) const +-{ +- return m_attachments.contains(key); +-} +- +-QSet EntryAttachments::values() const +-{ +- return asConst(m_attachments).values().toSet(); +-} +- +-QByteArray EntryAttachments::value(const QString& key) const +-{ +- return m_attachments.value(key); +-} +- +-void EntryAttachments::set(const QString& key, const QByteArray& value) +-{ +- bool emitModified = false; +- bool addAttachment = !m_attachments.contains(key); +- +- if (addAttachment) { +- emit aboutToBeAdded(key); +- } +- +- if (addAttachment || m_attachments.value(key) != value) { +- m_attachments.insert(key, value); +- emitModified = true; +- } +- +- if (addAttachment) { +- emit added(key); +- } else { +- emit keyModified(key); +- } +- +- if (emitModified) { +- emit entryAttachmentsModified(); +- } +-} +- +-void EntryAttachments::remove(const QString& key) +-{ +- if (!m_attachments.contains(key)) { +- Q_ASSERT_X(false, "EntryAttachments::remove", qPrintable(QString("Can't find attachment for key %1").arg(key))); +- return; +- } +- +- emit aboutToBeRemoved(key); +- +- m_attachments.remove(key); +- +- emit removed(key); +- emit entryAttachmentsModified(); +-} +- +-void EntryAttachments::remove(const QStringList& keys) +-{ +- if (keys.isEmpty()) { +- return; +- } +- +- bool isModified = false; +- for (const QString& key : keys) { +- if (!m_attachments.contains(key)) { +- Q_ASSERT_X( +- false, "EntryAttachments::remove", qPrintable(QString("Can't find attachment for key %1").arg(key))); +- continue; +- } +- +- isModified = true; +- emit aboutToBeRemoved(key); +- m_attachments.remove(key); +- emit removed(key); +- } +- +- if (isModified) { +- emit entryAttachmentsModified(); +- } +-} +- +-bool EntryAttachments::isEmpty() const +-{ +- return m_attachments.isEmpty(); +-} +- +-void EntryAttachments::clear() +-{ +- if (m_attachments.isEmpty()) { +- return; +- } +- +- emit aboutToBeReset(); +- +- m_attachments.clear(); +- +- emit reset(); +- emit entryAttachmentsModified(); +-} +- +-void EntryAttachments::copyDataFrom(const EntryAttachments* other) +-{ +- if (*this != *other) { +- emit aboutToBeReset(); +- +- m_attachments = other->m_attachments; +- +- emit reset(); +- emit entryAttachmentsModified(); +- } +-} +- +-bool EntryAttachments::operator==(const EntryAttachments& other) const +-{ +- return m_attachments == other.m_attachments; +-} +- +-bool EntryAttachments::operator!=(const EntryAttachments& other) const +-{ +- return m_attachments != other.m_attachments; +-} +- +-int EntryAttachments::attachmentsSize() const +-{ +- int size = 0; +- for (auto it = m_attachments.constBegin(); it != m_attachments.constEnd(); ++it) { +- size += it.key().toUtf8().size() + it.value().size(); +- } +- return size; +-} +diff -urNr keepassxc-2.6.4-orig/src/core/EntryAttachments.h keepassxc-2.6.4-patched/src/core/EntryAttachments.h +--- keepassxc-2.6.4-orig/src/core/EntryAttachments.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/EntryAttachments.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,60 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_ENTRYATTACHMENTS_H +-#define KEEPASSX_ENTRYATTACHMENTS_H +- +-#include +-#include +- +-class QStringList; +- +-class EntryAttachments : public QObject +-{ +- Q_OBJECT +- +-public: +- explicit EntryAttachments(QObject* parent = nullptr); +- QList keys() const; +- bool hasKey(const QString& key) const; +- QSet values() const; +- QByteArray value(const QString& key) const; +- void set(const QString& key, const QByteArray& value); +- void remove(const QString& key); +- void remove(const QStringList& keys); +- bool isEmpty() const; +- void clear(); +- void copyDataFrom(const EntryAttachments* other); +- bool operator==(const EntryAttachments& other) const; +- bool operator!=(const EntryAttachments& other) const; +- int attachmentsSize() const; +- +-signals: +- void entryAttachmentsModified(); +- void keyModified(const QString& key); +- void aboutToBeAdded(const QString& key); +- void added(const QString& key); +- void aboutToBeRemoved(const QString& key); +- void removed(const QString& key); +- void aboutToBeReset(); +- void reset(); +- +-private: +- QMap m_attachments; +-}; +- +-#endif // KEEPASSX_ENTRYATTACHMENTS_H +diff -urNr keepassxc-2.6.4-orig/src/core/EntryAttributes.cpp keepassxc-2.6.4-patched/src/core/EntryAttributes.cpp +--- keepassxc-2.6.4-orig/src/core/EntryAttributes.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/EntryAttributes.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,321 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "EntryAttributes.h" +- +-#include "core/Global.h" +- +-const QString EntryAttributes::TitleKey = "Title"; +-const QString EntryAttributes::UserNameKey = "UserName"; +-const QString EntryAttributes::PasswordKey = "Password"; +-const QString EntryAttributes::URLKey = "URL"; +-const QString EntryAttributes::NotesKey = "Notes"; +-const QStringList EntryAttributes::DefaultAttributes(QStringList() +- << TitleKey << UserNameKey << PasswordKey << URLKey << NotesKey); +- +-const QString EntryAttributes::WantedFieldGroupName = "WantedField"; +-const QString EntryAttributes::SearchInGroupName = "SearchIn"; +-const QString EntryAttributes::SearchTextGroupName = "SearchText"; +- +-const QString EntryAttributes::RememberCmdExecAttr = "_EXEC_CMD"; +- +-EntryAttributes::EntryAttributes(QObject* parent) +- : QObject(parent) +-{ +- clear(); +-} +- +-QList EntryAttributes::keys() const +-{ +- return m_attributes.keys(); +-} +- +-bool EntryAttributes::hasKey(const QString& key) const +-{ +- return m_attributes.contains(key); +-} +- +-QList EntryAttributes::customKeys() const +-{ +- QList customKeys; +- const QList keyList = keys(); +- for (const QString& key : keyList) { +- if (!isDefaultAttribute(key)) { +- customKeys.append(key); +- } +- } +- return customKeys; +-} +- +-QString EntryAttributes::value(const QString& key) const +-{ +- return m_attributes.value(key); +-} +- +-QList EntryAttributes::values(const QList& keys) const +-{ +- QList values; +- for (const QString& key : keys) { +- values.append(m_attributes.value(key)); +- } +- return values; +-} +- +-bool EntryAttributes::contains(const QString& key) const +-{ +- return m_attributes.contains(key); +-} +- +-bool EntryAttributes::containsValue(const QString& value) const +-{ +- return asConst(m_attributes).values().contains(value); +-} +- +-bool EntryAttributes::isProtected(const QString& key) const +-{ +- return m_protectedAttributes.contains(key); +-} +- +-bool EntryAttributes::isReference(const QString& key) const +-{ +- if (!m_attributes.contains(key)) { +- Q_ASSERT(false); +- return false; +- } +- +- const QString data = value(key); +- return matchReference(data).hasMatch(); +-} +- +-void EntryAttributes::set(const QString& key, const QString& value, bool protect) +-{ +- bool emitModified = false; +- +- bool addAttribute = !m_attributes.contains(key); +- bool changeValue = !addAttribute && (m_attributes.value(key) != value); +- bool defaultAttribute = isDefaultAttribute(key); +- +- if (addAttribute && !defaultAttribute) { +- emit aboutToBeAdded(key); +- } +- +- if (addAttribute || changeValue) { +- m_attributes.insert(key, value); +- emitModified = true; +- } +- +- if (protect) { +- if (!m_protectedAttributes.contains(key)) { +- emitModified = true; +- } +- m_protectedAttributes.insert(key); +- } else if (m_protectedAttributes.remove(key)) { +- emitModified = true; +- } +- +- if (emitModified) { +- emit entryAttributesModified(); +- } +- +- if (defaultAttribute && changeValue) { +- emit defaultKeyModified(); +- } else if (addAttribute) { +- emit added(key); +- } else if (emitModified) { +- emit customKeyModified(key); +- } +-} +- +-void EntryAttributes::remove(const QString& key) +-{ +- Q_ASSERT(!isDefaultAttribute(key)); +- +- if (!m_attributes.contains(key)) { +- return; +- } +- +- emit aboutToBeRemoved(key); +- +- m_attributes.remove(key); +- m_protectedAttributes.remove(key); +- +- emit removed(key); +- emit entryAttributesModified(); +-} +- +-void EntryAttributes::rename(const QString& oldKey, const QString& newKey) +-{ +- Q_ASSERT(!isDefaultAttribute(oldKey)); +- Q_ASSERT(!isDefaultAttribute(newKey)); +- +- if (!m_attributes.contains(oldKey)) { +- Q_ASSERT(false); +- return; +- } +- +- if (m_attributes.contains(newKey)) { +- Q_ASSERT(false); +- return; +- } +- +- QString data = value(oldKey); +- bool protect = isProtected(oldKey); +- +- emit aboutToRename(oldKey, newKey); +- +- m_attributes.remove(oldKey); +- m_attributes.insert(newKey, data); +- if (protect) { +- m_protectedAttributes.remove(oldKey); +- m_protectedAttributes.insert(newKey); +- } +- +- emit entryAttributesModified(); +- emit renamed(oldKey, newKey); +-} +- +-void EntryAttributes::copyCustomKeysFrom(const EntryAttributes* other) +-{ +- if (!areCustomKeysDifferent(other)) { +- return; +- } +- +- emit aboutToBeReset(); +- +- // remove all non-default keys +- const QList keyList = keys(); +- for (const QString& key : keyList) { +- if (!isDefaultAttribute(key)) { +- m_attributes.remove(key); +- m_protectedAttributes.remove(key); +- } +- } +- +- const QList otherKeyList = other->keys(); +- for (const QString& key : otherKeyList) { +- if (!isDefaultAttribute(key)) { +- m_attributes.insert(key, other->value(key)); +- if (other->isProtected(key)) { +- m_protectedAttributes.insert(key); +- } +- } +- } +- +- emit reset(); +- emit entryAttributesModified(); +-} +- +-bool EntryAttributes::areCustomKeysDifferent(const EntryAttributes* other) +-{ +- // check if they are equal ignoring the order of the keys +- if (keys().toSet() != other->keys().toSet()) { +- return true; +- } +- +- const QList keyList = keys(); +- for (const QString& key : keyList) { +- if (isDefaultAttribute(key)) { +- continue; +- } +- +- if (isProtected(key) != other->isProtected(key) || value(key) != other->value(key)) { +- return true; +- } +- } +- +- return false; +-} +- +-void EntryAttributes::copyDataFrom(const EntryAttributes* other) +-{ +- if (*this != *other) { +- emit aboutToBeReset(); +- +- m_attributes = other->m_attributes; +- m_protectedAttributes = other->m_protectedAttributes; +- +- emit reset(); +- emit entryAttributesModified(); +- } +-} +- +-QUuid EntryAttributes::referenceUuid(const QString& key) const +-{ +- if (!m_attributes.contains(key)) { +- Q_ASSERT(false); +- return {}; +- } +- +- auto match = matchReference(value(key)); +- if (match.hasMatch()) { +- const QString uuid = match.captured("SearchText"); +- if (!uuid.isEmpty()) { +- return QUuid::fromRfc4122(QByteArray::fromHex(uuid.toLatin1())); +- } +- } +- +- return {}; +-} +- +-bool EntryAttributes::operator==(const EntryAttributes& other) const +-{ +- return (m_attributes == other.m_attributes && m_protectedAttributes == other.m_protectedAttributes); +-} +- +-bool EntryAttributes::operator!=(const EntryAttributes& other) const +-{ +- return (m_attributes != other.m_attributes || m_protectedAttributes != other.m_protectedAttributes); +-} +- +-QRegularExpressionMatch EntryAttributes::matchReference(const QString& text) +-{ +- static QRegularExpression referenceRegExp( +- "\\{REF:(?[TUPANI])@(?[TUPANIO]):(?[^}]+)\\}", +- QRegularExpression::CaseInsensitiveOption); +- +- return referenceRegExp.match(text); +-} +- +-void EntryAttributes::clear() +-{ +- emit aboutToBeReset(); +- +- m_attributes.clear(); +- m_protectedAttributes.clear(); +- +- for (const QString& key : DefaultAttributes) { +- m_attributes.insert(key, ""); +- } +- +- emit reset(); +- emit entryAttributesModified(); +-} +- +-int EntryAttributes::attributesSize() const +-{ +- int size = 0; +- for (auto it = m_attributes.constBegin(); it != m_attributes.constEnd(); ++it) { +- size += it.key().toUtf8().size() + it.value().toUtf8().size(); +- } +- return size; +-} +- +-bool EntryAttributes::isDefaultAttribute(const QString& key) +-{ +- return DefaultAttributes.contains(key); +-} +diff -urNr keepassxc-2.6.4-orig/src/core/EntryAttributes.h keepassxc-2.6.4-patched/src/core/EntryAttributes.h +--- keepassxc-2.6.4-orig/src/core/EntryAttributes.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/EntryAttributes.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,89 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_ENTRYATTRIBUTES_H +-#define KEEPASSX_ENTRYATTRIBUTES_H +- +-#include +-#include +-#include +-#include +-#include +-#include +- +-class EntryAttributes : public QObject +-{ +- Q_OBJECT +- +-public: +- explicit EntryAttributes(QObject* parent = nullptr); +- QList keys() const; +- bool hasKey(const QString& key) const; +- QList customKeys() const; +- QString value(const QString& key) const; +- QList values(const QList& keys) const; +- bool contains(const QString& key) const; +- bool containsValue(const QString& value) const; +- bool isProtected(const QString& key) const; +- bool isReference(const QString& key) const; +- void set(const QString& key, const QString& value, bool protect = false); +- void remove(const QString& key); +- void rename(const QString& oldKey, const QString& newKey); +- void copyCustomKeysFrom(const EntryAttributes* other); +- bool areCustomKeysDifferent(const EntryAttributes* other); +- void clear(); +- int attributesSize() const; +- void copyDataFrom(const EntryAttributes* other); +- QUuid referenceUuid(const QString& key) const; +- bool operator==(const EntryAttributes& other) const; +- bool operator!=(const EntryAttributes& other) const; +- +- static QRegularExpressionMatch matchReference(const QString& text); +- +- static const QString TitleKey; +- static const QString UserNameKey; +- static const QString PasswordKey; +- static const QString URLKey; +- static const QString NotesKey; +- static const QStringList DefaultAttributes; +- static const QString RememberCmdExecAttr; +- static bool isDefaultAttribute(const QString& key); +- +- static const QString WantedFieldGroupName; +- static const QString SearchInGroupName; +- static const QString SearchTextGroupName; +- +-signals: +- void entryAttributesModified(); +- void defaultKeyModified(); +- void customKeyModified(const QString& key); +- void aboutToBeAdded(const QString& key); +- void added(const QString& key); +- void aboutToBeRemoved(const QString& key); +- void removed(const QString& key); +- void aboutToRename(const QString& oldKey, const QString& newKey); +- void renamed(const QString& oldKey, const QString& newKey); +- void aboutToBeReset(); +- void reset(); +- +-private: +- QMap m_attributes; +- QSet m_protectedAttributes; +-}; +- +-#endif // KEEPASSX_ENTRYATTRIBUTES_H +diff -urNr keepassxc-2.6.4-orig/src/core/Entry.cpp keepassxc-2.6.4-patched/src/core/Entry.cpp +--- keepassxc-2.6.4-orig/src/core/Entry.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/Entry.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,1375 +0,0 @@ +-/* +- * Copyright (C) 2010 Felix Geyer +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +-#include "Entry.h" +- +-#include "config-keepassx.h" +- +-#include "core/Clock.h" +-#include "core/Database.h" +-#include "core/DatabaseIcons.h" +-#include "core/Group.h" +-#include "core/Metadata.h" +-#include "core/Tools.h" +-#include "totp/totp.h" +- +-#include +-#include +-#include +- +-const int Entry::DefaultIconNumber = 0; +-const int Entry::ResolveMaximumDepth = 10; +-const QString Entry::AutoTypeSequenceUsername = "{USERNAME}{ENTER}"; +-const QString Entry::AutoTypeSequencePassword = "{PASSWORD}{ENTER}"; +- +-Entry::Entry() +- : m_attributes(new EntryAttributes(this)) +- , m_attachments(new EntryAttachments(this)) +- , m_autoTypeAssociations(new AutoTypeAssociations(this)) +- , m_customData(new CustomData(this)) +- , m_modifiedSinceBegin(false) +- , m_updateTimeinfo(true) +-{ +- m_data.iconNumber = DefaultIconNumber; +- m_data.autoTypeEnabled = true; +- m_data.autoTypeObfuscation = 0; +- +- connect(m_attributes, SIGNAL(entryAttributesModified()), SLOT(updateTotp())); +- connect(m_attributes, SIGNAL(entryAttributesModified()), this, SIGNAL(entryModified())); +- connect(m_attributes, SIGNAL(defaultKeyModified()), SLOT(emitDataChanged())); +- connect(m_attachments, SIGNAL(entryAttachmentsModified()), this, SIGNAL(entryModified())); +- connect(m_autoTypeAssociations, SIGNAL(modified()), SIGNAL(entryModified())); +- connect(m_customData, SIGNAL(customDataModified()), this, SIGNAL(entryModified())); +- +- connect(this, SIGNAL(entryModified()), SLOT(updateTimeinfo())); +- connect(this, SIGNAL(entryModified()), SLOT(updateModifiedSinceBegin())); +-} +- +-Entry::~Entry() +-{ +- setUpdateTimeinfo(false); +- if (m_group) { +- m_group->removeEntry(this); +- +- if (m_group->database()) { +- m_group->database()->addDeletedObject(m_uuid); +- } +- } +- +- qDeleteAll(m_history); +-} +- +-template inline bool Entry::set(T& property, const T& value) +-{ +- if (property != value) { +- property = value; +- emit entryModified(); +- return true; +- } +- return false; +-} +- +-void Entry::updateTimeinfo() +-{ +- if (m_updateTimeinfo) { +- m_data.timeInfo.setLastModificationTime(Clock::currentDateTimeUtc()); +- m_data.timeInfo.setLastAccessTime(Clock::currentDateTimeUtc()); +- } +-} +- +-bool Entry::canUpdateTimeinfo() const +-{ +- return m_updateTimeinfo; +-} +- +-void Entry::setUpdateTimeinfo(bool value) +-{ +- m_updateTimeinfo = value; +-} +- +-QString Entry::buildReference(const QUuid& uuid, const QString& field) +-{ +- Q_ASSERT(EntryAttributes::DefaultAttributes.count(field) > 0); +- +- QString uuidStr = Tools::uuidToHex(uuid).toUpper(); +- QString shortField; +- +- if (field == EntryAttributes::TitleKey) { +- shortField = "T"; +- } else if (field == EntryAttributes::UserNameKey) { +- shortField = "U"; +- } else if (field == EntryAttributes::PasswordKey) { +- shortField = "P"; +- } else if (field == EntryAttributes::URLKey) { +- shortField = "A"; +- } else if (field == EntryAttributes::NotesKey) { +- shortField = "N"; +- } +- +- if (shortField.isEmpty()) { +- return {}; +- } +- +- return QString("{REF:%1@I:%2}").arg(shortField, uuidStr); +-} +- +-EntryReferenceType Entry::referenceType(const QString& referenceStr) +-{ +- const QString referenceLowerStr = referenceStr.toLower(); +- EntryReferenceType result = EntryReferenceType::Unknown; +- if (referenceLowerStr == QLatin1String("t")) { +- result = EntryReferenceType::Title; +- } else if (referenceLowerStr == QLatin1String("u")) { +- result = EntryReferenceType::UserName; +- } else if (referenceLowerStr == QLatin1String("p")) { +- result = EntryReferenceType::Password; +- } else if (referenceLowerStr == QLatin1String("a")) { +- result = EntryReferenceType::Url; +- } else if (referenceLowerStr == QLatin1String("n")) { +- result = EntryReferenceType::Notes; +- } else if (referenceLowerStr == QLatin1String("i")) { +- result = EntryReferenceType::QUuid; +- } else if (referenceLowerStr == QLatin1String("o")) { +- result = EntryReferenceType::CustomAttributes; +- } +- +- return result; +-} +- +-const QUuid& Entry::uuid() const +-{ +- return m_uuid; +-} +- +-const QString Entry::uuidToHex() const +-{ +- return Tools::uuidToHex(m_uuid); +-} +- +-QImage Entry::icon() const +-{ +- if (m_data.customIcon.isNull()) { +- return databaseIcons()->icon(m_data.iconNumber).toImage(); +- } else { +- Q_ASSERT(database()); +- +- if (database()) { +- return database()->metadata()->customIcon(m_data.customIcon); +- } else { +- return QImage(); +- } +- } +-} +- +-QPixmap Entry::iconPixmap(IconSize size) const +-{ +- QPixmap icon(size, size); +- if (m_data.customIcon.isNull()) { +- icon = databaseIcons()->icon(m_data.iconNumber, size); +- } else { +- Q_ASSERT(database()); +- if (database()) { +- icon = database()->metadata()->customIconPixmap(m_data.customIcon, size); +- } +- } +- +- if (isExpired()) { +- icon = databaseIcons()->applyBadge(icon, DatabaseIcons::Badges::Expired); +- } +- +- return icon; +-} +- +-int Entry::iconNumber() const +-{ +- return m_data.iconNumber; +-} +- +-const QUuid& Entry::iconUuid() const +-{ +- return m_data.customIcon; +-} +- +-QString Entry::foregroundColor() const +-{ +- return m_data.foregroundColor; +-} +- +-QString Entry::backgroundColor() const +-{ +- return m_data.backgroundColor; +-} +- +-QString Entry::overrideUrl() const +-{ +- return m_data.overrideUrl; +-} +- +-QString Entry::tags() const +-{ +- return m_data.tags; +-} +- +-const TimeInfo& Entry::timeInfo() const +-{ +- return m_data.timeInfo; +-} +- +-bool Entry::autoTypeEnabled() const +-{ +- return m_data.autoTypeEnabled; +-} +- +-int Entry::autoTypeObfuscation() const +-{ +- return m_data.autoTypeObfuscation; +-} +- +-QString Entry::defaultAutoTypeSequence() const +-{ +- return m_data.defaultAutoTypeSequence; +-} +- +-/** +- * Determine the effective sequence that will be injected +- * This function return an empty string if a parent group has autotype disabled or if the entry has no parent +- */ +-QString Entry::effectiveAutoTypeSequence() const +-{ +- if (!autoTypeEnabled()) { +- return {}; +- } +- +- const Group* parent = group(); +- if (!parent) { +- return {}; +- } +- +- QString sequence = parent->effectiveAutoTypeSequence(); +- if (sequence.isEmpty()) { +- return {}; +- } +- +- if (!m_data.defaultAutoTypeSequence.isEmpty()) { +- return m_data.defaultAutoTypeSequence; +- } +- +- if (sequence == Group::RootAutoTypeSequence && (!username().isEmpty() || !password().isEmpty())) { +- if (username().isEmpty()) { +- return AutoTypeSequencePassword; +- } else if (password().isEmpty()) { +- return AutoTypeSequenceUsername; +- } +- return Group::RootAutoTypeSequence; +- } +- +- return sequence; +-} +- +-AutoTypeAssociations* Entry::autoTypeAssociations() +-{ +- return m_autoTypeAssociations; +-} +- +-const AutoTypeAssociations* Entry::autoTypeAssociations() const +-{ +- return m_autoTypeAssociations; +-} +- +-QString Entry::title() const +-{ +- return m_attributes->value(EntryAttributes::TitleKey); +-} +- +-QString Entry::url() const +-{ +- return m_attributes->value(EntryAttributes::URLKey); +-} +- +-QString Entry::webUrl() const +-{ +- QString url = resolveMultiplePlaceholders(m_attributes->value(EntryAttributes::URLKey)); +- return resolveUrl(url); +-} +- +-QString Entry::displayUrl() const +-{ +- QString url = maskPasswordPlaceholders(m_attributes->value(EntryAttributes::URLKey)); +- return resolveMultiplePlaceholders(url); +-} +- +-QString Entry::username() const +-{ +- return m_attributes->value(EntryAttributes::UserNameKey); +-} +- +-QString Entry::password() const +-{ +- return m_attributes->value(EntryAttributes::PasswordKey); +-} +- +-QString Entry::notes() const +-{ +- return m_attributes->value(EntryAttributes::NotesKey); +-} +- +-QString Entry::attribute(const QString& key) const +-{ +- return m_attributes->value(key); +-} +- +-int Entry::size() const +-{ +- int size = 0; +- const QRegularExpression delimiter(",|:|;"); +- +- size += this->attributes()->attributesSize(); +- size += this->autoTypeAssociations()->associationsSize(); +- size += this->attachments()->attachmentsSize(); +- size += this->customData()->dataSize(); +- const QStringList tags = this->tags().split(delimiter, QString::SkipEmptyParts); +- for (const QString& tag : tags) { +- size += tag.toUtf8().size(); +- } +- +- return size; +-} +- +-bool Entry::isExpired() const +-{ +- return m_data.timeInfo.expires() && m_data.timeInfo.expiryTime() < Clock::currentDateTimeUtc(); +-} +- +-bool Entry::isRecycled() const +-{ +- const Database* db = database(); +- if (!db) { +- return false; +- } +- +- return m_group == db->metadata()->recycleBin() || m_group->isRecycled(); +-} +- +-bool Entry::isAttributeReference(const QString& key) const +-{ +- return m_attributes->isReference(key); +-} +- +-bool Entry::isAttributeReferenceOf(const QString& key, const QUuid& uuid) const +-{ +- if (!m_attributes->isReference(key)) { +- return false; +- } +- +- return m_attributes->value(key).contains(Tools::uuidToHex(uuid), Qt::CaseInsensitive); +-} +- +-bool Entry::hasReferences() const +-{ +- const QList keyList = EntryAttributes::DefaultAttributes; +- for (const QString& key : keyList) { +- if (m_attributes->isReference(key)) { +- return true; +- } +- } +- return false; +-} +- +-bool Entry::hasReferencesTo(const QUuid& uuid) const +-{ +- const QList keyList = EntryAttributes::DefaultAttributes; +- for (const QString& key : keyList) { +- if (isAttributeReferenceOf(key, uuid)) { +- return true; +- } +- } +- return false; +-} +- +-void Entry::replaceReferencesWithValues(const Entry* other) +-{ +- for (const QString& key : EntryAttributes::DefaultAttributes) { +- if (isAttributeReferenceOf(key, other->uuid())) { +- setDefaultAttribute(key, other->attribute(key)); +- } +- } +-} +- +-EntryAttributes* Entry::attributes() +-{ +- return m_attributes; +-} +- +-const EntryAttributes* Entry::attributes() const +-{ +- return m_attributes; +-} +- +-EntryAttachments* Entry::attachments() +-{ +- return m_attachments; +-} +- +-const EntryAttachments* Entry::attachments() const +-{ +- return m_attachments; +-} +- +-CustomData* Entry::customData() +-{ +- return m_customData; +-} +- +-const CustomData* Entry::customData() const +-{ +- return m_customData; +-} +- +-bool Entry::hasTotp() const +-{ +- return !m_data.totpSettings.isNull(); +-} +- +-QString Entry::totp() const +-{ +- if (hasTotp()) { +- return Totp::generateTotp(m_data.totpSettings); +- } +- return {}; +-} +- +-void Entry::setTotp(QSharedPointer settings) +-{ +- beginUpdate(); +- m_attributes->remove(Totp::ATTRIBUTE_OTP); +- m_attributes->remove(Totp::ATTRIBUTE_SEED); +- m_attributes->remove(Totp::ATTRIBUTE_SETTINGS); +- +- if (settings->key.isEmpty()) { +- m_data.totpSettings.reset(); +- } else { +- m_data.totpSettings = std::move(settings); +- auto text = Totp::writeSettings( +- m_data.totpSettings, resolveMultiplePlaceholders(title()), resolveMultiplePlaceholders(username())); +- if (m_data.totpSettings->format != Totp::StorageFormat::LEGACY) { +- m_attributes->set(Totp::ATTRIBUTE_OTP, text, true); +- } else { +- m_attributes->set(Totp::ATTRIBUTE_SEED, m_data.totpSettings->key, true); +- m_attributes->set(Totp::ATTRIBUTE_SETTINGS, text); +- } +- } +- endUpdate(); +-} +- +-void Entry::updateTotp() +-{ +- if (m_attributes->contains(Totp::ATTRIBUTE_SETTINGS)) { +- m_data.totpSettings = Totp::parseSettings(m_attributes->value(Totp::ATTRIBUTE_SETTINGS), +- m_attributes->value(Totp::ATTRIBUTE_SEED)); +- } else if (m_attributes->contains(Totp::ATTRIBUTE_OTP)) { +- m_data.totpSettings = Totp::parseSettings(m_attributes->value(Totp::ATTRIBUTE_OTP)); +- } else { +- m_data.totpSettings.reset(); +- } +-} +- +-QSharedPointer Entry::totpSettings() const +-{ +- return m_data.totpSettings; +-} +- +-QString Entry::totpSettingsString() const +-{ +- if (m_data.totpSettings) { +- return Totp::writeSettings( +- m_data.totpSettings, resolveMultiplePlaceholders(title()), resolveMultiplePlaceholders(username()), true); +- } +- return {}; +-} +- +-void Entry::setUuid(const QUuid& uuid) +-{ +- Q_ASSERT(!uuid.isNull()); +- set(m_uuid, uuid); +-} +- +-void Entry::setIcon(int iconNumber) +-{ +- Q_ASSERT(iconNumber >= 0); +- +- if (m_data.iconNumber != iconNumber || !m_data.customIcon.isNull()) { +- m_data.iconNumber = iconNumber; +- m_data.customIcon = QUuid(); +- +- emit entryModified(); +- emitDataChanged(); +- } +-} +- +-void Entry::setIcon(const QUuid& uuid) +-{ +- Q_ASSERT(!uuid.isNull()); +- +- if (m_data.customIcon != uuid) { +- m_data.customIcon = uuid; +- m_data.iconNumber = 0; +- +- emit entryModified(); +- emitDataChanged(); +- } +-} +- +-void Entry::setForegroundColor(const QString& colorStr) +-{ +- set(m_data.foregroundColor, colorStr); +-} +- +-void Entry::setBackgroundColor(const QString& colorStr) +-{ +- set(m_data.backgroundColor, colorStr); +-} +- +-void Entry::setOverrideUrl(const QString& url) +-{ +- set(m_data.overrideUrl, url); +-} +- +-void Entry::setTags(const QString& tags) +-{ +- set(m_data.tags, tags); +-} +- +-void Entry::setTimeInfo(const TimeInfo& timeInfo) +-{ +- m_data.timeInfo = timeInfo; +-} +- +-void Entry::setAutoTypeEnabled(bool enable) +-{ +- set(m_data.autoTypeEnabled, enable); +-} +- +-void Entry::setAutoTypeObfuscation(int obfuscation) +-{ +- set(m_data.autoTypeObfuscation, obfuscation); +-} +- +-void Entry::setDefaultAutoTypeSequence(const QString& sequence) +-{ +- set(m_data.defaultAutoTypeSequence, sequence); +-} +- +-void Entry::setTitle(const QString& title) +-{ +- m_attributes->set(EntryAttributes::TitleKey, title, m_attributes->isProtected(EntryAttributes::TitleKey)); +-} +- +-void Entry::setUrl(const QString& url) +-{ +- bool remove = url != m_attributes->value(EntryAttributes::URLKey) +- && (m_attributes->value(EntryAttributes::RememberCmdExecAttr) == "1" +- || m_attributes->value(EntryAttributes::RememberCmdExecAttr) == "0"); +- if (remove) { +- m_attributes->remove(EntryAttributes::RememberCmdExecAttr); +- } +- m_attributes->set(EntryAttributes::URLKey, url, m_attributes->isProtected(EntryAttributes::URLKey)); +-} +- +-void Entry::setUsername(const QString& username) +-{ +- m_attributes->set(EntryAttributes::UserNameKey, username, m_attributes->isProtected(EntryAttributes::UserNameKey)); +-} +- +-void Entry::setPassword(const QString& password) +-{ +- m_attributes->set(EntryAttributes::PasswordKey, password, m_attributes->isProtected(EntryAttributes::PasswordKey)); +-} +- +-void Entry::setNotes(const QString& notes) +-{ +- m_attributes->set(EntryAttributes::NotesKey, notes, m_attributes->isProtected(EntryAttributes::NotesKey)); +-} +- +-void Entry::setDefaultAttribute(const QString& attribute, const QString& value) +-{ +- Q_ASSERT(EntryAttributes::isDefaultAttribute(attribute)); +- +- if (!EntryAttributes::isDefaultAttribute(attribute)) { +- return; +- } +- +- m_attributes->set(attribute, value, m_attributes->isProtected(attribute)); +-} +- +-void Entry::setExpires(const bool& value) +-{ +- if (m_data.timeInfo.expires() != value) { +- m_data.timeInfo.setExpires(value); +- emit entryModified(); +- } +-} +- +-void Entry::setExpiryTime(const QDateTime& dateTime) +-{ +- if (m_data.timeInfo.expiryTime() != dateTime) { +- m_data.timeInfo.setExpiryTime(dateTime); +- emit entryModified(); +- } +-} +- +-QList Entry::historyItems() +-{ +- return m_history; +-} +- +-const QList& Entry::historyItems() const +-{ +- return m_history; +-} +- +-void Entry::addHistoryItem(Entry* entry) +-{ +- Q_ASSERT(!entry->parent()); +- +- m_history.append(entry); +- emit entryModified(); +-} +- +-void Entry::removeHistoryItems(const QList& historyEntries) +-{ +- if (historyEntries.isEmpty()) { +- return; +- } +- +- for (Entry* entry : historyEntries) { +- Q_ASSERT(!entry->parent()); +- Q_ASSERT(entry->uuid().isNull() || entry->uuid() == uuid()); +- Q_ASSERT(m_history.contains(entry)); +- +- m_history.removeOne(entry); +- delete entry; +- } +- +- emit entryModified(); +-} +- +-void Entry::truncateHistory() +-{ +- const Database* db = database(); +- +- if (!db) { +- return; +- } +- +- bool changed = false; +- int histMaxItems = db->metadata()->historyMaxItems(); +- if (histMaxItems > -1) { +- int historyCount = 0; +- QMutableListIterator i(m_history); +- i.toBack(); +- while (i.hasPrevious()) { +- historyCount++; +- Entry* entry = i.previous(); +- if (historyCount > histMaxItems) { +- delete entry; +- i.remove(); +- changed = true; +- } +- } +- } +- +- int histMaxSize = db->metadata()->historyMaxSize(); +- if (histMaxSize > -1) { +- int size = 0; +- QSet foundAttachments = attachments()->values(); +- +- QMutableListIterator i(m_history); +- i.toBack(); +- while (i.hasPrevious()) { +- Entry* historyItem = i.previous(); +- +- // don't calculate size if it's already above the maximum +- if (size <= histMaxSize) { +- size += historyItem->size(); +- foundAttachments += historyItem->attachments()->values(); +- } +- +- if (size > histMaxSize) { +- delete historyItem; +- i.remove(); +- changed = true; +- } +- } +- } +- +- if (changed) { +- emit entryModified(); +- } +-} +- +-bool Entry::equals(const Entry* other, CompareItemOptions options) const +-{ +- if (!other) { +- return false; +- } +- if (m_uuid != other->uuid()) { +- return false; +- } +- if (!m_data.equals(other->m_data, options)) { +- return false; +- } +- if (*m_customData != *other->m_customData) { +- return false; +- } +- if (*m_attributes != *other->m_attributes) { +- return false; +- } +- if (*m_attachments != *other->m_attachments) { +- return false; +- } +- if (*m_autoTypeAssociations != *other->m_autoTypeAssociations) { +- return false; +- } +- if (!options.testFlag(CompareItemIgnoreHistory)) { +- if (m_history.count() != other->m_history.count()) { +- return false; +- } +- for (int i = 0; i < m_history.count(); ++i) { +- if (!m_history[i]->equals(other->m_history[i], options)) { +- return false; +- } +- } +- } +- return true; +-} +- +-Entry* Entry::clone(CloneFlags flags) const +-{ +- Entry* entry = new Entry(); +- entry->setUpdateTimeinfo(false); +- if (flags & CloneNewUuid) { +- entry->m_uuid = QUuid::createUuid(); +- } else { +- entry->m_uuid = m_uuid; +- } +- entry->m_data = m_data; +- entry->m_customData->copyDataFrom(m_customData); +- entry->m_attributes->copyDataFrom(m_attributes); +- entry->m_attachments->copyDataFrom(m_attachments); +- +- if (flags & CloneUserAsRef) { +- entry->m_attributes->set(EntryAttributes::UserNameKey, +- buildReference(uuid(), EntryAttributes::UserNameKey), +- m_attributes->isProtected(EntryAttributes::UserNameKey)); +- } +- +- if (flags & ClonePassAsRef) { +- entry->m_attributes->set(EntryAttributes::PasswordKey, +- buildReference(uuid(), EntryAttributes::PasswordKey), +- m_attributes->isProtected(EntryAttributes::PasswordKey)); +- } +- +- entry->m_autoTypeAssociations->copyDataFrom(m_autoTypeAssociations); +- if (flags & CloneIncludeHistory) { +- for (Entry* historyItem : m_history) { +- Entry* historyItemClone = +- historyItem->clone(flags & ~CloneIncludeHistory & ~CloneNewUuid & ~CloneResetTimeInfo); +- historyItemClone->setUpdateTimeinfo(false); +- historyItemClone->setUuid(entry->uuid()); +- historyItemClone->setUpdateTimeinfo(true); +- entry->addHistoryItem(historyItemClone); +- } +- } +- +- if (flags & CloneResetTimeInfo) { +- QDateTime now = Clock::currentDateTimeUtc(); +- entry->m_data.timeInfo.setCreationTime(now); +- entry->m_data.timeInfo.setLastModificationTime(now); +- entry->m_data.timeInfo.setLastAccessTime(now); +- entry->m_data.timeInfo.setLocationChanged(now); +- } +- +- if (flags & CloneRenameTitle) { +- entry->setTitle(tr("%1 - Clone").arg(entry->title())); +- } +- +- entry->setUpdateTimeinfo(true); +- +- return entry; +-} +- +-void Entry::copyDataFrom(const Entry* other) +-{ +- setUpdateTimeinfo(false); +- m_data = other->m_data; +- m_customData->copyDataFrom(other->m_customData); +- m_attributes->copyDataFrom(other->m_attributes); +- m_attachments->copyDataFrom(other->m_attachments); +- m_autoTypeAssociations->copyDataFrom(other->m_autoTypeAssociations); +- setUpdateTimeinfo(true); +-} +- +-void Entry::beginUpdate() +-{ +- Q_ASSERT(m_tmpHistoryItem.isNull()); +- +- m_tmpHistoryItem.reset(new Entry()); +- m_tmpHistoryItem->setUpdateTimeinfo(false); +- m_tmpHistoryItem->m_uuid = m_uuid; +- m_tmpHistoryItem->m_data = m_data; +- m_tmpHistoryItem->m_attributes->copyDataFrom(m_attributes); +- m_tmpHistoryItem->m_attachments->copyDataFrom(m_attachments); +- m_tmpHistoryItem->m_autoTypeAssociations->copyDataFrom(m_autoTypeAssociations); +- +- m_modifiedSinceBegin = false; +-} +- +-bool Entry::endUpdate() +-{ +- Q_ASSERT(!m_tmpHistoryItem.isNull()); +- if (m_modifiedSinceBegin) { +- m_tmpHistoryItem->setUpdateTimeinfo(true); +- addHistoryItem(m_tmpHistoryItem.take()); +- truncateHistory(); +- } +- +- m_tmpHistoryItem.reset(); +- +- return m_modifiedSinceBegin; +-} +- +-void Entry::updateModifiedSinceBegin() +-{ +- m_modifiedSinceBegin = true; +-} +- +-QString Entry::resolveMultiplePlaceholdersRecursive(const QString& str, int maxDepth) const +-{ +- if (maxDepth <= 0) { +- qWarning("Maximum depth of replacement has been reached. Entry uuid: %s", uuid().toString().toLatin1().data()); +- return str; +- } +- +- QString result = str; +- QRegExp placeholderRegEx("(\\{[^\\}]+\\})", Qt::CaseInsensitive, QRegExp::RegExp2); +- placeholderRegEx.setMinimal(true); +- int pos = 0; +- while ((pos = placeholderRegEx.indexIn(str, pos)) != -1) { +- const QString found = placeholderRegEx.cap(1); +- result.replace(found, resolvePlaceholderRecursive(found, maxDepth - 1)); +- pos += placeholderRegEx.matchedLength(); +- } +- +- if (result != str) { +- result = resolveMultiplePlaceholdersRecursive(result, maxDepth - 1); +- } +- +- return result; +-} +- +-QString Entry::resolvePlaceholderRecursive(const QString& placeholder, int maxDepth) const +-{ +- if (maxDepth <= 0) { +- qWarning("Maximum depth of replacement has been reached. Entry uuid: %s", uuid().toString().toLatin1().data()); +- return placeholder; +- } +- +- const PlaceholderType typeOfPlaceholder = placeholderType(placeholder); +- switch (typeOfPlaceholder) { +- case PlaceholderType::NotPlaceholder: +- case PlaceholderType::Unknown: +- return resolveMultiplePlaceholdersRecursive(placeholder, maxDepth - 1); +- case PlaceholderType::Title: +- if (placeholderType(title()) == PlaceholderType::Title) { +- return title(); +- } +- return resolveMultiplePlaceholdersRecursive(title(), maxDepth - 1); +- case PlaceholderType::UserName: +- if (placeholderType(username()) == PlaceholderType::UserName) { +- return username(); +- } +- return resolveMultiplePlaceholdersRecursive(username(), maxDepth - 1); +- case PlaceholderType::Password: +- if (placeholderType(password()) == PlaceholderType::Password) { +- return password(); +- } +- return resolveMultiplePlaceholdersRecursive(password(), maxDepth - 1); +- case PlaceholderType::Notes: +- if (placeholderType(notes()) == PlaceholderType::Notes) { +- return notes(); +- } +- return resolveMultiplePlaceholdersRecursive(notes(), maxDepth - 1); +- case PlaceholderType::Url: +- if (placeholderType(url()) == PlaceholderType::Url) { +- return url(); +- } +- return resolveMultiplePlaceholdersRecursive(url(), maxDepth - 1); +- case PlaceholderType::DbDir: { +- QFileInfo fileInfo(database()->filePath()); +- return fileInfo.absoluteDir().absolutePath(); +- } +- case PlaceholderType::UrlWithoutScheme: +- case PlaceholderType::UrlScheme: +- case PlaceholderType::UrlHost: +- case PlaceholderType::UrlPort: +- case PlaceholderType::UrlPath: +- case PlaceholderType::UrlQuery: +- case PlaceholderType::UrlFragment: +- case PlaceholderType::UrlUserInfo: +- case PlaceholderType::UrlUserName: +- case PlaceholderType::UrlPassword: { +- const QString strUrl = resolveMultiplePlaceholdersRecursive(url(), maxDepth - 1); +- return resolveUrlPlaceholder(strUrl, typeOfPlaceholder); +- } +- case PlaceholderType::Totp: +- // totp can't have placeholder inside +- return totp(); +- case PlaceholderType::CustomAttribute: { +- const QString key = placeholder.mid(3, placeholder.length() - 4); // {S:attr} => mid(3, len - 4) +- return attributes()->hasKey(key) ? attributes()->value(key) : QString(); +- } +- case PlaceholderType::Reference: +- return resolveReferencePlaceholderRecursive(placeholder, maxDepth); +- case PlaceholderType::DateTimeSimple: +- case PlaceholderType::DateTimeYear: +- case PlaceholderType::DateTimeMonth: +- case PlaceholderType::DateTimeDay: +- case PlaceholderType::DateTimeHour: +- case PlaceholderType::DateTimeMinute: +- case PlaceholderType::DateTimeSecond: +- case PlaceholderType::DateTimeUtcSimple: +- case PlaceholderType::DateTimeUtcYear: +- case PlaceholderType::DateTimeUtcMonth: +- case PlaceholderType::DateTimeUtcDay: +- case PlaceholderType::DateTimeUtcHour: +- case PlaceholderType::DateTimeUtcMinute: +- case PlaceholderType::DateTimeUtcSecond: +- return resolveMultiplePlaceholdersRecursive(resolveDateTimePlaceholder(typeOfPlaceholder), maxDepth - 1); +- } +- +- return placeholder; +-} +- +-QString Entry::resolveDateTimePlaceholder(Entry::PlaceholderType placeholderType) const +-{ +- QDateTime time = Clock::currentDateTime(); +- QDateTime time_utc = Clock::currentDateTimeUtc(); +- QString date_formatted{}; +- +- switch (placeholderType) { +- case PlaceholderType::DateTimeSimple: +- date_formatted = time.toString("yyyyMMddhhmmss"); +- break; +- case PlaceholderType::DateTimeYear: +- date_formatted = time.toString("yyyy"); +- break; +- case PlaceholderType::DateTimeMonth: +- date_formatted = time.toString("MM"); +- break; +- case PlaceholderType::DateTimeDay: +- date_formatted = time.toString("dd"); +- break; +- case PlaceholderType::DateTimeHour: +- date_formatted = time.toString("hh"); +- break; +- case PlaceholderType::DateTimeMinute: +- date_formatted = time.toString("mm"); +- break; +- case PlaceholderType::DateTimeSecond: +- date_formatted = time.toString("ss"); +- break; +- case PlaceholderType::DateTimeUtcSimple: +- date_formatted = time_utc.toString("yyyyMMddhhmmss"); +- break; +- case PlaceholderType::DateTimeUtcYear: +- date_formatted = time_utc.toString("yyyy"); +- break; +- case PlaceholderType::DateTimeUtcMonth: +- date_formatted = time_utc.toString("MM"); +- break; +- case PlaceholderType::DateTimeUtcDay: +- date_formatted = time_utc.toString("dd"); +- break; +- case PlaceholderType::DateTimeUtcHour: +- date_formatted = time_utc.toString("hh"); +- break; +- case PlaceholderType::DateTimeUtcMinute: +- date_formatted = time_utc.toString("mm"); +- break; +- case PlaceholderType::DateTimeUtcSecond: +- date_formatted = time_utc.toString("ss"); +- break; +- default: { +- Q_ASSERT_X(false, "Entry::resolveDateTimePlaceholder", "Bad DateTime placeholder type"); +- break; +- } +- } +- +- return date_formatted; +-} +- +-QString Entry::resolveReferencePlaceholderRecursive(const QString& placeholder, int maxDepth) const +-{ +- if (maxDepth <= 0) { +- qWarning("Maximum depth of replacement has been reached. Entry uuid: %s", uuid().toString().toLatin1().data()); +- return placeholder; +- } +- +- // resolving references in format: {REF:@:} +- // using format from http://keepass.info/help/base/fieldrefs.html at the time of writing +- +- QRegularExpressionMatch match = EntryAttributes::matchReference(placeholder); +- if (!match.hasMatch()) { +- return placeholder; +- } +- +- QString result; +- const QString searchIn = match.captured(EntryAttributes::SearchInGroupName); +- const QString searchText = match.captured(EntryAttributes::SearchTextGroupName); +- +- const EntryReferenceType searchInType = Entry::referenceType(searchIn); +- +- Q_ASSERT(m_group); +- Q_ASSERT(m_group->database()); +- const Entry* refEntry = m_group->database()->rootGroup()->findEntryBySearchTerm(searchText, searchInType); +- +- if (refEntry) { +- const QString wantedField = match.captured(EntryAttributes::WantedFieldGroupName); +- result = refEntry->referenceFieldValue(Entry::referenceType(wantedField)); +- +- // Referencing fields of other entries only works with standard fields, not with custom user strings. +- // If you want to reference a custom user string, you need to place a redirection in a standard field +- // of the entry with the custom string, using {S:}, and reference the standard field. +- result = refEntry->resolveMultiplePlaceholdersRecursive(result, maxDepth - 1); +- } +- +- return result; +-} +- +-QString Entry::referenceFieldValue(EntryReferenceType referenceType) const +-{ +- switch (referenceType) { +- case EntryReferenceType::Title: +- return title(); +- case EntryReferenceType::UserName: +- return username(); +- case EntryReferenceType::Password: +- return password(); +- case EntryReferenceType::Url: +- return url(); +- case EntryReferenceType::Notes: +- return notes(); +- case EntryReferenceType::QUuid: +- return uuidToHex(); +- default: +- break; +- } +- return QString(); +-} +- +-void Entry::moveUp() +-{ +- if (m_group) { +- m_group->moveEntryUp(this); +- } +-} +- +-void Entry::moveDown() +-{ +- if (m_group) { +- m_group->moveEntryDown(this); +- } +-} +- +-Group* Entry::group() +-{ +- return m_group; +-} +- +-const Group* Entry::group() const +-{ +- return m_group; +-} +- +-void Entry::setGroup(Group* group) +-{ +- Q_ASSERT(group); +- +- if (m_group == group) { +- return; +- } +- +- if (m_group) { +- m_group->removeEntry(this); +- if (m_group->database() && m_group->database() != group->database()) { +- m_group->database()->addDeletedObject(m_uuid); +- +- // copy custom icon to the new database +- if (!iconUuid().isNull() && group->database() && m_group->database()->metadata()->hasCustomIcon(iconUuid()) +- && !group->database()->metadata()->hasCustomIcon(iconUuid())) { +- group->database()->metadata()->addCustomIcon(iconUuid(), icon()); +- } +- } +- } +- +- m_group = group; +- group->addEntry(this); +- +- QObject::setParent(group); +- +- if (m_updateTimeinfo) { +- m_data.timeInfo.setLocationChanged(Clock::currentDateTimeUtc()); +- } +-} +- +-void Entry::emitDataChanged() +-{ +- emit entryDataChanged(this); +-} +- +-const Database* Entry::database() const +-{ +- if (m_group) { +- return m_group->database(); +- } +- return nullptr; +-} +- +-Database* Entry::database() +-{ +- if (m_group) { +- return m_group->database(); +- } +- return nullptr; +-} +- +-QString Entry::maskPasswordPlaceholders(const QString& str) const +-{ +- QString result = str; +- result.replace(QRegExp("(\\{PASSWORD\\})", Qt::CaseInsensitive, QRegExp::RegExp2), "******"); +- return result; +-} +- +-Entry* Entry::resolveReference(const QString& str) const +-{ +- QRegularExpressionMatch match = EntryAttributes::matchReference(str); +- if (!match.hasMatch()) { +- return nullptr; +- } +- +- const QString searchIn = match.captured(EntryAttributes::SearchInGroupName); +- const QString searchText = match.captured(EntryAttributes::SearchTextGroupName); +- +- const EntryReferenceType searchInType = Entry::referenceType(searchIn); +- return m_group->database()->rootGroup()->findEntryBySearchTerm(searchText, searchInType); +-} +- +-QString Entry::resolveMultiplePlaceholders(const QString& str) const +-{ +- return resolveMultiplePlaceholdersRecursive(str, ResolveMaximumDepth); +-} +- +-QString Entry::resolvePlaceholder(const QString& placeholder) const +-{ +- return resolvePlaceholderRecursive(placeholder, ResolveMaximumDepth); +-} +- +-QString Entry::resolveUrlPlaceholder(const QString& str, Entry::PlaceholderType placeholderType) const +-{ +- if (str.isEmpty()) { +- return QString(); +- } +- +- const QUrl qurl(str); +- switch (placeholderType) { +- case PlaceholderType::UrlWithoutScheme: +- return qurl.toString(QUrl::RemoveScheme | QUrl::FullyDecoded); +- case PlaceholderType::UrlScheme: +- return qurl.scheme(); +- case PlaceholderType::UrlHost: +- return qurl.host(); +- case PlaceholderType::UrlPort: +- return QString::number(qurl.port()); +- case PlaceholderType::UrlPath: +- return qurl.path(); +- case PlaceholderType::UrlQuery: +- return qurl.query(); +- case PlaceholderType::UrlFragment: +- return qurl.fragment(); +- case PlaceholderType::UrlUserInfo: +- return qurl.userInfo(); +- case PlaceholderType::UrlUserName: +- return qurl.userName(); +- case PlaceholderType::UrlPassword: +- return qurl.password(); +- default: { +- Q_ASSERT_X(false, "Entry::resolveUrlPlaceholder", "Bad url placeholder type"); +- break; +- } +- } +- +- return QString(); +-} +- +-Entry::PlaceholderType Entry::placeholderType(const QString& placeholder) const +-{ +- if (!placeholder.startsWith(QLatin1Char('{')) || !placeholder.endsWith(QLatin1Char('}'))) { +- return PlaceholderType::NotPlaceholder; +- } +- if (placeholder.startsWith(QLatin1Literal("{S:"))) { +- return PlaceholderType::CustomAttribute; +- } +- if (placeholder.startsWith(QLatin1Literal("{REF:"))) { +- return PlaceholderType::Reference; +- } +- +- static const QMap placeholders{ +- {QStringLiteral("{TITLE}"), PlaceholderType::Title}, +- {QStringLiteral("{USERNAME}"), PlaceholderType::UserName}, +- {QStringLiteral("{PASSWORD}"), PlaceholderType::Password}, +- {QStringLiteral("{NOTES}"), PlaceholderType::Notes}, +- {QStringLiteral("{TOTP}"), PlaceholderType::Totp}, +- {QStringLiteral("{URL}"), PlaceholderType::Url}, +- {QStringLiteral("{URL:RMVSCM}"), PlaceholderType::UrlWithoutScheme}, +- {QStringLiteral("{URL:WITHOUTSCHEME}"), PlaceholderType::UrlWithoutScheme}, +- {QStringLiteral("{URL:SCM}"), PlaceholderType::UrlScheme}, +- {QStringLiteral("{URL:SCHEME}"), PlaceholderType::UrlScheme}, +- {QStringLiteral("{URL:HOST}"), PlaceholderType::UrlHost}, +- {QStringLiteral("{URL:PORT}"), PlaceholderType::UrlPort}, +- {QStringLiteral("{URL:PATH}"), PlaceholderType::UrlPath}, +- {QStringLiteral("{URL:QUERY}"), PlaceholderType::UrlQuery}, +- {QStringLiteral("{URL:FRAGMENT}"), PlaceholderType::UrlFragment}, +- {QStringLiteral("{URL:USERINFO}"), PlaceholderType::UrlUserInfo}, +- {QStringLiteral("{URL:USERNAME}"), PlaceholderType::UrlUserName}, +- {QStringLiteral("{URL:PASSWORD}"), PlaceholderType::UrlPassword}, +- {QStringLiteral("{DT_SIMPLE}"), PlaceholderType::DateTimeSimple}, +- {QStringLiteral("{DT_YEAR}"), PlaceholderType::DateTimeYear}, +- {QStringLiteral("{DT_MONTH}"), PlaceholderType::DateTimeMonth}, +- {QStringLiteral("{DT_DAY}"), PlaceholderType::DateTimeDay}, +- {QStringLiteral("{DT_HOUR}"), PlaceholderType::DateTimeHour}, +- {QStringLiteral("{DT_MINUTE}"), PlaceholderType::DateTimeMinute}, +- {QStringLiteral("{DT_SECOND}"), PlaceholderType::DateTimeSecond}, +- {QStringLiteral("{DT_UTC_SIMPLE}"), PlaceholderType::DateTimeUtcSimple}, +- {QStringLiteral("{DT_UTC_YEAR}"), PlaceholderType::DateTimeUtcYear}, +- {QStringLiteral("{DT_UTC_MONTH}"), PlaceholderType::DateTimeUtcMonth}, +- {QStringLiteral("{DT_UTC_DAY}"), PlaceholderType::DateTimeUtcDay}, +- {QStringLiteral("{DT_UTC_HOUR}"), PlaceholderType::DateTimeUtcHour}, +- {QStringLiteral("{DT_UTC_MINUTE}"), PlaceholderType::DateTimeUtcMinute}, +- {QStringLiteral("{DT_UTC_SECOND}"), PlaceholderType::DateTimeUtcSecond}, +- {QStringLiteral("{DB_DIR}"), PlaceholderType::DbDir}}; +- +- return placeholders.value(placeholder.toUpper(), PlaceholderType::Unknown); +-} +- +-QString Entry::resolveUrl(const QString& url) const +-{ +- QString newUrl = url; +- +- QRegExp fileRegEx("^([a-z]:)?[\\\\/]", Qt::CaseInsensitive, QRegExp::RegExp2); +- if (fileRegEx.indexIn(newUrl) != -1) { +- // Match possible file paths without the scheme and convert it to a file URL +- newUrl = QDir::fromNativeSeparators(newUrl); +- newUrl = QUrl::fromLocalFile(newUrl).toString(); +- } else if (newUrl.startsWith("cmd://")) { +- QStringList cmdList = newUrl.split(" "); +- for (int i = 1; i < cmdList.size(); ++i) { +- // Don't pass arguments to the resolveUrl function (they look like URL's) +- if (!cmdList[i].startsWith("-") && !cmdList[i].startsWith("/")) { +- return resolveUrl(cmdList[i].remove(QRegExp("'|\""))); +- } +- } +- +- // No URL in this command +- return QString(""); +- } +- +- if (!newUrl.isEmpty() && !newUrl.contains("://")) { +- // URL doesn't have a protocol, add https by default +- newUrl.prepend("https://"); +- } +- +- // Validate the URL +- QUrl tempUrl = QUrl(newUrl); +- if (tempUrl.isValid() +- && (tempUrl.scheme() == "http" || tempUrl.scheme() == "https" || tempUrl.scheme() == "file")) { +- return tempUrl.url(); +- } +- +- // No valid http URL's found +- return QString(""); +-} +- +-bool EntryData::operator==(const EntryData& other) const +-{ +- return equals(other, CompareItemDefault); +-} +- +-bool EntryData::operator!=(const EntryData& other) const +-{ +- return !(*this == other); +-} +- +-bool EntryData::equals(const EntryData& other, CompareItemOptions options) const +-{ +- if (::compare(iconNumber, other.iconNumber, options) != 0) { +- return false; +- } +- if (::compare(customIcon, other.customIcon, options) != 0) { +- return false; +- } +- if (::compare(foregroundColor, other.foregroundColor, options) != 0) { +- return false; +- } +- if (::compare(backgroundColor, other.backgroundColor, options) != 0) { +- return false; +- } +- if (::compare(overrideUrl, other.overrideUrl, options) != 0) { +- return false; +- } +- if (::compare(tags, other.tags, options) != 0) { +- return false; +- } +- if (::compare(autoTypeEnabled, other.autoTypeEnabled, options) != 0) { +- return false; +- } +- if (::compare(autoTypeObfuscation, other.autoTypeObfuscation, options) != 0) { +- return false; +- } +- if (::compare(defaultAutoTypeSequence, other.defaultAutoTypeSequence, options) != 0) { +- return false; +- } +- if (!timeInfo.equals(other.timeInfo, options)) { +- return false; +- } +- if (!totpSettings.isNull() && !other.totpSettings.isNull()) { +- // Both have TOTP settings, compare them +- if (::compare(totpSettings->key, other.totpSettings->key, options) != 0) { +- return false; +- } +- if (::compare(totpSettings->digits, other.totpSettings->digits, options) != 0) { +- return false; +- } +- if (::compare(totpSettings->step, other.totpSettings->step, options) != 0) { +- return false; +- } +- } else if (totpSettings.isNull() != other.totpSettings.isNull()) { +- // The existance of TOTP has changed between these entries +- return false; +- } +- +- return true; +-} +diff -urNr keepassxc-2.6.4-orig/src/core/Entry.h keepassxc-2.6.4-patched/src/core/Entry.h +--- keepassxc-2.6.4-orig/src/core/Entry.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/Entry.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,291 +0,0 @@ +-/* +- * Copyright (C) 2010 Felix Geyer +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_ENTRY_H +-#define KEEPASSX_ENTRY_H +- +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-#include "core/AutoTypeAssociations.h" +-#include "core/CustomData.h" +-#include "core/EntryAttachments.h" +-#include "core/EntryAttributes.h" +-#include "core/Global.h" +-#include "core/TimeInfo.h" +- +-class Database; +-class Group; +-namespace Totp +-{ +- struct Settings; +-} +- +-enum class EntryReferenceType +-{ +- Unknown, +- Title, +- UserName, +- Password, +- Url, +- Notes, +- QUuid, +- CustomAttributes +-}; +- +-struct EntryData +-{ +- int iconNumber; +- QUuid customIcon; +- QString foregroundColor; +- QString backgroundColor; +- QString overrideUrl; +- QString tags; +- bool autoTypeEnabled; +- int autoTypeObfuscation; +- QString defaultAutoTypeSequence; +- TimeInfo timeInfo; +- QSharedPointer totpSettings; +- +- bool operator==(const EntryData& other) const; +- bool operator!=(const EntryData& other) const; +- bool equals(const EntryData& other, CompareItemOptions options) const; +-}; +- +-class Entry : public QObject +-{ +- Q_OBJECT +- +-public: +- Entry(); +- ~Entry(); +- const QUuid& uuid() const; +- const QString uuidToHex() const; +- QImage icon() const; +- QPixmap iconPixmap(IconSize size = IconSize::Default) const; +- int iconNumber() const; +- const QUuid& iconUuid() const; +- QString foregroundColor() const; +- QString backgroundColor() const; +- QString overrideUrl() const; +- QString tags() const; +- const TimeInfo& timeInfo() const; +- bool autoTypeEnabled() const; +- int autoTypeObfuscation() const; +- QString defaultAutoTypeSequence() const; +- QString effectiveAutoTypeSequence() const; +- QString effectiveNewAutoTypeSequence() const; +- AutoTypeAssociations* autoTypeAssociations(); +- const AutoTypeAssociations* autoTypeAssociations() const; +- QString title() const; +- QString url() const; +- QString webUrl() const; +- QString displayUrl() const; +- QString username() const; +- QString password() const; +- QString notes() const; +- QString attribute(const QString& key) const; +- QString totp() const; +- QString totpSettingsString() const; +- QSharedPointer totpSettings() const; +- int size() const; +- +- bool hasTotp() const; +- bool isExpired() const; +- bool isRecycled() const; +- bool isAttributeReference(const QString& key) const; +- bool isAttributeReferenceOf(const QString& key, const QUuid& uuid) const; +- void replaceReferencesWithValues(const Entry* other); +- bool hasReferences() const; +- bool hasReferencesTo(const QUuid& uuid) const; +- EntryAttributes* attributes(); +- const EntryAttributes* attributes() const; +- EntryAttachments* attachments(); +- const EntryAttachments* attachments() const; +- CustomData* customData(); +- const CustomData* customData() const; +- +- void setUuid(const QUuid& uuid); +- void setIcon(int iconNumber); +- void setIcon(const QUuid& uuid); +- void setForegroundColor(const QString& color); +- void setBackgroundColor(const QString& color); +- void setOverrideUrl(const QString& url); +- void setTags(const QString& tags); +- void setTimeInfo(const TimeInfo& timeInfo); +- void setAutoTypeEnabled(bool enable); +- void setAutoTypeObfuscation(int obfuscation); +- void setDefaultAutoTypeSequence(const QString& sequence); +- void setTitle(const QString& title); +- void setUrl(const QString& url); +- void setUsername(const QString& username); +- void setPassword(const QString& password); +- void setNotes(const QString& notes); +- void setDefaultAttribute(const QString& attribute, const QString& value); +- void setExpires(const bool& value); +- void setExpiryTime(const QDateTime& dateTime); +- void setTotp(QSharedPointer settings); +- +- QList historyItems(); +- const QList& historyItems() const; +- void addHistoryItem(Entry* entry); +- void removeHistoryItems(const QList& historyEntries); +- void truncateHistory(); +- +- bool equals(const Entry* other, CompareItemOptions options = CompareItemDefault) const; +- +- enum CloneFlag +- { +- CloneNoFlags = 0, +- CloneNewUuid = 1, // generate a random uuid for the clone +- CloneResetTimeInfo = 2, // set all TimeInfo attributes to the current time +- CloneIncludeHistory = 4, // clone the history items +- CloneDefault = CloneNewUuid | CloneResetTimeInfo, +- CloneCopy = CloneNewUuid | CloneResetTimeInfo | CloneIncludeHistory, +- CloneRenameTitle = 8, // add "-Clone" after the original title +- CloneUserAsRef = 16, // Add the user as a reference to the original entry +- ClonePassAsRef = 32, // Add the password as a reference to the original entry +- }; +- Q_DECLARE_FLAGS(CloneFlags, CloneFlag) +- +- enum class PlaceholderType +- { +- NotPlaceholder, +- Unknown, +- Title, +- UserName, +- Password, +- Notes, +- Totp, +- Url, +- UrlWithoutScheme, +- UrlScheme, +- UrlHost, +- UrlPort, +- UrlPath, +- UrlQuery, +- UrlFragment, +- UrlUserInfo, +- UrlUserName, +- UrlPassword, +- Reference, +- CustomAttribute, +- DateTimeSimple, +- DateTimeYear, +- DateTimeMonth, +- DateTimeDay, +- DateTimeHour, +- DateTimeMinute, +- DateTimeSecond, +- DateTimeUtcSimple, +- DateTimeUtcYear, +- DateTimeUtcMonth, +- DateTimeUtcDay, +- DateTimeUtcHour, +- DateTimeUtcMinute, +- DateTimeUtcSecond, +- DbDir +- }; +- +- static const int DefaultIconNumber; +- static const int ResolveMaximumDepth; +- static const QString AutoTypeSequenceUsername; +- static const QString AutoTypeSequencePassword; +- +- /** +- * Creates a duplicate of this entry except that the returned entry isn't +- * part of any group. +- * Note that you need to copy the custom icons manually when inserting the +- * new entry into another database. +- */ +- Entry* clone(CloneFlags flags = CloneDefault) const; +- void copyDataFrom(const Entry* other); +- QString maskPasswordPlaceholders(const QString& str) const; +- Entry* resolveReference(const QString& str) const; +- QString resolveMultiplePlaceholders(const QString& str) const; +- QString resolvePlaceholder(const QString& str) const; +- QString resolveUrlPlaceholder(const QString& str, PlaceholderType placeholderType) const; +- QString resolveDateTimePlaceholder(PlaceholderType placeholderType) const; +- PlaceholderType placeholderType(const QString& placeholder) const; +- QString resolveUrl(const QString& url) const; +- +- /** +- * Call before and after set*() methods to create a history item +- * if the entry has been changed. +- */ +- void beginUpdate(); +- bool endUpdate(); +- +- void moveUp(); +- void moveDown(); +- +- Group* group(); +- const Group* group() const; +- void setGroup(Group* group); +- const Database* database() const; +- Database* database(); +- +- bool canUpdateTimeinfo() const; +- void setUpdateTimeinfo(bool value); +- +-signals: +- /** +- * Emitted when a default attribute has been changed. +- */ +- void entryDataChanged(Entry* entry); +- void entryModified(); +- +-private slots: +- void emitDataChanged(); +- void updateTimeinfo(); +- void updateModifiedSinceBegin(); +- void updateTotp(); +- +-private: +- QString resolveMultiplePlaceholdersRecursive(const QString& str, int maxDepth) const; +- QString resolvePlaceholderRecursive(const QString& placeholder, int maxDepth) const; +- QString resolveReferencePlaceholderRecursive(const QString& placeholder, int maxDepth) const; +- QString referenceFieldValue(EntryReferenceType referenceType) const; +- +- static QString buildReference(const QUuid& uuid, const QString& field); +- static EntryReferenceType referenceType(const QString& referenceStr); +- +- template bool set(T& property, const T& value); +- +- QUuid m_uuid; +- EntryData m_data; +- QPointer m_attributes; +- QPointer m_attachments; +- QPointer m_autoTypeAssociations; +- QPointer m_customData; +- QList m_history; // Items sorted from oldest to newest +- +- QScopedPointer m_tmpHistoryItem; +- bool m_modifiedSinceBegin; +- QPointer m_group; +- bool m_updateTimeinfo; +-}; +- +-Q_DECLARE_OPERATORS_FOR_FLAGS(Entry::CloneFlags) +- +-#endif // KEEPASSX_ENTRY_H +diff -urNr keepassxc-2.6.4-orig/src/core/EntrySearcher.cpp keepassxc-2.6.4-patched/src/core/EntrySearcher.cpp +--- keepassxc-2.6.4-orig/src/core/EntrySearcher.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/EntrySearcher.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,284 +0,0 @@ +-/* +- * Copyright (C) 2014 Florian Geyer +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "EntrySearcher.h" +- +-#include "core/Group.h" +-#include "core/Tools.h" +- +-EntrySearcher::EntrySearcher(bool caseSensitive, bool skipProtected) +- : m_caseSensitive(caseSensitive) +- , m_skipProtected(skipProtected) +- , m_termParser(R"re(([-!*+]+)?(?:(\w*):)?(?:(?=")"((?:[^"\\]|\\.)*)"|([^ ]*))( |$))re") +-// Group 1 = modifiers, Group 2 = field, Group 3 = quoted string, Group 4 = unquoted string +-{ +-} +- +-/** +- * Search group, and its children, directly by provided search terms +- * @param searchTerms search terms +- * @param baseGroup group to start search from, cannot be null +- * @param forceSearch ignore group search settings +- * @return list of entries that match the search terms +- */ +-QList EntrySearcher::search(const QList& searchTerms, const Group* baseGroup, bool forceSearch) +-{ +- Q_ASSERT(baseGroup); +- m_searchTerms = searchTerms; +- return repeat(baseGroup, forceSearch); +-} +- +-/** +- * Search group, and its children, by parsing the provided search +- * string for search terms. +- * +- * @param searchString search terms +- * @param baseGroup group to start search from, cannot be null +- * @param forceSearch ignore group search settings +- * @return list of entries that match the search terms +- */ +-QList EntrySearcher::search(const QString& searchString, const Group* baseGroup, bool forceSearch) +-{ +- Q_ASSERT(baseGroup); +- parseSearchTerms(searchString); +- return repeat(baseGroup, forceSearch); +-} +- +-/** +- * Repeat the last search starting from the given group +- * +- * @param baseGroup group to start search from, cannot be null +- * @param forceSearch ignore group search settings +- * @return list of entries that match the search terms +- */ +-QList EntrySearcher::repeat(const Group* baseGroup, bool forceSearch) +-{ +- Q_ASSERT(baseGroup); +- +- QList results; +- for (const auto group : baseGroup->groupsRecursive(true)) { +- if (forceSearch || group->resolveSearchingEnabled()) { +- for (const auto entry : group->entries()) { +- if (searchEntryImpl(entry)) { +- results.append(entry); +- } +- } +- } +- } +- return results; +-} +- +-/** +- * Search provided entries by the provided search terms +- * +- * @param searchTerms search terms +- * @param entries list of entries to include in the search +- * @return list of entries that match the search terms +- */ +-QList EntrySearcher::searchEntries(const QList& searchTerms, const QList& entries) +-{ +- m_searchTerms = searchTerms; +- return repeatEntries(entries); +-} +- +-/** +- * Search provided entries by parsing the search string +- * for search terms. +- * +- * @param searchString search terms +- * @param entries list of entries to include in the search +- * @return list of entries that match the search terms +- */ +-QList EntrySearcher::searchEntries(const QString& searchString, const QList& entries) +-{ +- parseSearchTerms(searchString); +- return repeatEntries(entries); +-} +- +-/** +- * Repeat the last search on the given entries +- * +- * @param entries list of entries to include in the search +- * @return list of entries that match the search terms +- */ +-QList EntrySearcher::repeatEntries(const QList& entries) +-{ +- QList results; +- for (auto* entry : entries) { +- if (searchEntryImpl(entry)) { +- results.append(entry); +- } +- } +- return results; +-} +- +-/** +- * Set the next search to be case sensitive or not +- * +- * @param state +- */ +-void EntrySearcher::setCaseSensitive(bool state) +-{ +- m_caseSensitive = state; +-} +- +-bool EntrySearcher::isCaseSensitive() const +-{ +- return m_caseSensitive; +-} +- +-bool EntrySearcher::searchEntryImpl(const Entry* entry) +-{ +- // Pre-load in case they are needed +- auto attributes_keys = entry->attributes()->customKeys(); +- auto attributes = QStringList(attributes_keys + entry->attributes()->values(attributes_keys)); +- auto attachments = QStringList(entry->attachments()->keys()); +- // Build a group hierarchy to allow searching for e.g. /group1/subgroup* +- auto hierarchy = entry->group()->hierarchy().join('/').prepend("/"); +- +- // By default, empty term matches every entry. +- // However when skipping protected fields, we will recject everything instead +- bool found = !m_skipProtected; +- for (const auto& term : m_searchTerms) { +- switch (term.field) { +- case Field::Title: +- found = term.regex.match(entry->resolvePlaceholder(entry->title())).hasMatch(); +- break; +- case Field::Username: +- found = term.regex.match(entry->resolvePlaceholder(entry->username())).hasMatch(); +- break; +- case Field::Password: +- if (m_skipProtected) { +- continue; +- } +- found = term.regex.match(entry->resolvePlaceholder(entry->password())).hasMatch(); +- break; +- case Field::Url: +- found = term.regex.match(entry->resolvePlaceholder(entry->url())).hasMatch(); +- break; +- case Field::Notes: +- found = term.regex.match(entry->notes()).hasMatch(); +- break; +- case Field::AttributeKV: +- found = !attributes.filter(term.regex).empty(); +- break; +- case Field::Attachment: +- found = !attachments.filter(term.regex).empty(); +- break; +- case Field::AttributeValue: +- if (m_skipProtected && entry->attributes()->isProtected(term.word)) { +- continue; +- } +- found = entry->attributes()->contains(term.word) +- && term.regex.match(entry->attributes()->value(term.word)).hasMatch(); +- break; +- case Field::Group: +- // Match against the full hierarchy if the word contains a '/' otherwise just the group name +- if (term.word.contains('/')) { +- found = term.regex.match(hierarchy).hasMatch(); +- } else { +- found = term.regex.match(entry->group()->name()).hasMatch(); +- } +- break; +- default: +- // Terms without a specific field try to match title, username, url, and notes +- found = term.regex.match(entry->resolvePlaceholder(entry->title())).hasMatch() +- || term.regex.match(entry->resolvePlaceholder(entry->username())).hasMatch() +- || term.regex.match(entry->resolvePlaceholder(entry->url())).hasMatch() +- || term.regex.match(entry->notes()).hasMatch(); +- } +- +- // negate the result if exclude: +- // * if found and not excluding, the entry matches +- // * if didn't found but excluding, the entry also matches +- found = (found && !term.exclude) || (!found && term.exclude); +- +- // short circuit if we failed the match +- if (!found) { +- return false; +- } +- } +- +- return found; +-} +- +-void EntrySearcher::parseSearchTerms(const QString& searchString) +-{ +- static const QList> fieldnames{ +- {QStringLiteral("attachment"), Field::Attachment}, +- {QStringLiteral("attribute"), Field::AttributeKV}, +- {QStringLiteral("notes"), Field::Notes}, +- {QStringLiteral("pw"), Field::Password}, +- {QStringLiteral("password"), Field::Password}, +- {QStringLiteral("title"), Field::Title}, +- {QStringLiteral("u"), Field::Username}, // u: stands for username rather than url +- {QStringLiteral("url"), Field::Url}, +- {QStringLiteral("username"), Field::Username}, +- {QStringLiteral("group"), Field::Group}}; +- +- m_searchTerms.clear(); +- auto results = m_termParser.globalMatch(searchString); +- while (results.hasNext()) { +- auto result = results.next(); +- SearchTerm term{}; +- +- // Quoted string group +- term.word = result.captured(3); +- +- // If empty, use the unquoted string group +- if (term.word.isEmpty()) { +- term.word = result.captured(4); +- } +- +- // If still empty, ignore this match +- if (term.word.isEmpty()) { +- continue; +- } +- +- auto mods = result.captured(1); +- +- // Convert term to regex +- term.regex = Tools::convertToRegex(term.word, !mods.contains("*"), mods.contains("+"), m_caseSensitive); +- +- // Exclude modifier +- term.exclude = mods.contains("-") || mods.contains("!"); +- +- // Determine the field to search +- term.field = Field::Undefined; +- +- QString field = result.captured(2); +- if (!field.isEmpty()) { +- if (field.startsWith("_", Qt::CaseInsensitive)) { +- term.field = Field::AttributeValue; +- // searching a custom attribute +- // in this case term.word is the attribute key (removing the leading "_") +- // and term.regex is used to match attribute value +- term.word = field.mid(1); +- } else { +- for (const auto& pair : fieldnames) { +- if (pair.first.startsWith(field, Qt::CaseInsensitive)) { +- term.field = pair.second; +- break; +- } +- } +- } +- } +- +- m_searchTerms.append(term); +- } +-} +diff -urNr keepassxc-2.6.4-orig/src/core/EntrySearcher.h keepassxc-2.6.4-patched/src/core/EntrySearcher.h +--- keepassxc-2.6.4-orig/src/core/EntrySearcher.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/EntrySearcher.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,79 +0,0 @@ +-/* +- * Copyright (C) 2014 Florian Geyer +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_ENTRYSEARCHER_H +-#define KEEPASSX_ENTRYSEARCHER_H +- +-#include +-#include +- +-class Group; +-class Entry; +- +-class EntrySearcher +-{ +-public: +- enum class Field +- { +- Undefined, +- Title, +- Username, +- Password, +- Url, +- Notes, +- AttributeKV, +- Attachment, +- AttributeValue, +- Group +- }; +- +- struct SearchTerm +- { +- Field field; +- // only used when field == Field::AttributeValue +- QString word; +- QRegularExpression regex; +- bool exclude; +- }; +- +- explicit EntrySearcher(bool caseSensitive = false, bool skipProtected = false); +- +- QList search(const QList& searchTerms, const Group* baseGroup, bool forceSearch = false); +- QList search(const QString& searchString, const Group* baseGroup, bool forceSearch = false); +- QList repeat(const Group* baseGroup, bool forceSearch = false); +- +- QList searchEntries(const QList& searchTerms, const QList& entries); +- QList searchEntries(const QString& searchString, const QList& entries); +- QList repeatEntries(const QList& entries); +- +- void setCaseSensitive(bool state); +- bool isCaseSensitive() const; +- +-private: +- bool searchEntryImpl(const Entry* entry); +- void parseSearchTerms(const QString& searchString); +- +- bool m_caseSensitive; +- bool m_skipProtected; +- QRegularExpression m_termParser; +- QList m_searchTerms; +- +- friend class TestEntrySearcher; +-}; +- +-#endif // KEEPASSX_ENTRYSEARCHER_H +diff -urNr keepassxc-2.6.4-orig/src/core/Exporter.h keepassxc-2.6.4-patched/src/core/Exporter.h +--- keepassxc-2.6.4-orig/src/core/Exporter.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/Exporter.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,16 +0,0 @@ +-#ifndef KEEPASSX_EXPORTER_H +-#define KEEPASSX_EXPORTER_H +- +-class Database; +-class Group; +- +-class Exporter +-{ +-public: +- virtual Database* exportGroup(Group* group) = 0; +- virtual ~Exporter() +- { +- } +-}; +- +-#endif // KEEPASSX_EXPORTER_H +diff -urNr keepassxc-2.6.4-orig/src/core/FileWatcher.cpp keepassxc-2.6.4-patched/src/core/FileWatcher.cpp +--- keepassxc-2.6.4-orig/src/core/FileWatcher.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/FileWatcher.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,148 +0,0 @@ +-/* +- * Copyright (C) 2020 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "FileWatcher.h" +- +-#include "core/AsyncTask.h" +- +-#include +- +-#ifdef Q_OS_LINUX +-#include +-#endif +- +-FileWatcher::FileWatcher(QObject* parent) +- : QObject(parent) +-{ +- connect(&m_fileWatcher, SIGNAL(fileChanged(QString)), SLOT(checkFileChanged())); +- connect(&m_fileChecksumTimer, SIGNAL(timeout()), SLOT(checkFileChanged())); +- connect(&m_fileChangeDelayTimer, &QTimer::timeout, this, [this] { emit fileChanged(m_filePath); }); +- m_fileChangeDelayTimer.setSingleShot(true); +- m_fileIgnoreDelayTimer.setSingleShot(true); +-} +- +-FileWatcher::~FileWatcher() +-{ +- stop(); +-} +- +-void FileWatcher::start(const QString& filePath, int checksumIntervalSeconds, int checksumSizeKibibytes) +-{ +- stop(); +- +-#if defined(Q_OS_LINUX) +- struct statfs statfsBuf; +- bool forcePolling = false; +- const auto NFS_SUPER_MAGIC = 0x6969; +- +- if (!statfs(filePath.toLocal8Bit().constData(), &statfsBuf)) { +- forcePolling = (statfsBuf.f_type == NFS_SUPER_MAGIC); +- } else { +- // if we can't get the fs type let's fall back to polling +- forcePolling = true; +- } +- auto objectName = forcePolling ? QLatin1String("_qt_autotest_force_engine_poller") : QLatin1String(""); +- m_fileWatcher.setObjectName(objectName); +-#endif +- +- m_fileWatcher.addPath(filePath); +- m_filePath = filePath; +- +- // Handle file checksum +- m_fileChecksumSizeBytes = checksumSizeKibibytes * 1024; +- m_fileChecksum = calculateChecksum(); +- if (checksumIntervalSeconds > 0) { +- m_fileChecksumTimer.start(checksumIntervalSeconds * 1000); +- } +- +- m_ignoreFileChange = false; +-} +- +-void FileWatcher::stop() +-{ +- if (!m_filePath.isEmpty()) { +- m_fileWatcher.removePath(m_filePath); +- } +- m_filePath.clear(); +- m_fileChecksum.clear(); +- m_fileChecksumTimer.stop(); +- m_fileChangeDelayTimer.stop(); +-} +- +-void FileWatcher::pause() +-{ +- m_ignoreFileChange = true; +- m_fileChangeDelayTimer.stop(); +-} +- +-void FileWatcher::resume() +-{ +- m_ignoreFileChange = false; +- // Add a short delay to start in the next event loop +- if (!m_fileIgnoreDelayTimer.isActive()) { +- m_fileIgnoreDelayTimer.start(0); +- } +-} +- +-bool FileWatcher::shouldIgnoreChanges() +-{ +- return m_filePath.isEmpty() || m_ignoreFileChange || m_fileIgnoreDelayTimer.isActive() +- || m_fileChangeDelayTimer.isActive(); +-} +- +-bool FileWatcher::hasSameFileChecksum() +-{ +- return calculateChecksum() == m_fileChecksum; +-} +- +-void FileWatcher::checkFileChanged() +-{ +- if (shouldIgnoreChanges()) { +- return; +- } +- +- // Prevent reentrance +- m_ignoreFileChange = true; +- +- AsyncTask::runThenCallback([=] { return calculateChecksum(); }, +- this, +- [=](QByteArray checksum) { +- if (checksum != m_fileChecksum) { +- m_fileChecksum = checksum; +- m_fileChangeDelayTimer.start(0); +- } +- +- m_ignoreFileChange = false; +- }); +-} +- +-QByteArray FileWatcher::calculateChecksum() +-{ +- QFile file(m_filePath); +- if (file.open(QFile::ReadOnly)) { +- QCryptographicHash hash(QCryptographicHash::Sha256); +- if (m_fileChecksumSizeBytes > 0) { +- hash.addData(file.read(m_fileChecksumSizeBytes)); +- } else { +- hash.addData(&file); +- } +- return hash.result(); +- } +- // If we fail to open the file return the last known checksum, this +- // prevents unnecessary merge requests on intermittent network shares +- return m_fileChecksum; +-} +diff -urNr keepassxc-2.6.4-orig/src/core/FileWatcher.h keepassxc-2.6.4-patched/src/core/FileWatcher.h +--- keepassxc-2.6.4-orig/src/core/FileWatcher.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/FileWatcher.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,61 +0,0 @@ +-/* +- * Copyright (C) 2020 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_FILEWATCHER_H +-#define KEEPASSXC_FILEWATCHER_H +- +-#include +-#include +- +-class FileWatcher : public QObject +-{ +- Q_OBJECT +- +-public: +- explicit FileWatcher(QObject* parent = nullptr); +- ~FileWatcher() override; +- +- void start(const QString& path, int checksumIntervalSeconds = 0, int checksumSizeKibibytes = -1); +- void stop(); +- +- bool hasSameFileChecksum(); +- +-signals: +- void fileChanged(const QString& path); +- +-public slots: +- void pause(); +- void resume(); +- +-private slots: +- void checkFileChanged(); +- +-private: +- QByteArray calculateChecksum(); +- bool shouldIgnoreChanges(); +- +- QString m_filePath; +- QFileSystemWatcher m_fileWatcher; +- QByteArray m_fileChecksum; +- QTimer m_fileChangeDelayTimer; +- QTimer m_fileIgnoreDelayTimer; +- QTimer m_fileChecksumTimer; +- int m_fileChecksumSizeBytes = -1; +- bool m_ignoreFileChange = false; +-}; +- +-#endif // KEEPASSXC_FILEWATCHER_H +diff -urNr keepassxc-2.6.4-orig/src/core/Global.h keepassxc-2.6.4-patched/src/core/Global.h +--- keepassxc-2.6.4-orig/src/core/Global.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/Global.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,69 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies) +- * Copyright (C) 2012 Intel Corporation +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_GLOBAL_H +-#define KEEPASSX_GLOBAL_H +- +-#include +-#include +- +-#if defined(Q_OS_WIN) +-#if defined(KEEPASSX_BUILDING_CORE) +-#define KEEPASSX_EXPORT Q_DECL_IMPORT +-#else +-#define KEEPASSX_EXPORT Q_DECL_EXPORT +-#endif +-#else +-#define KEEPASSX_EXPORT Q_DECL_EXPORT +-#endif +- +-#ifndef QUINT32_MAX +-#define QUINT32_MAX 4294967295U +-#endif +- +-#if defined(Q_OS_WIN) || defined(Q_OS_MACOS) +-#define FILE_CASE_SENSITIVE Qt::CaseInsensitive +-#else +-#define FILE_CASE_SENSITIVE Qt::CaseSensitive +-#endif +- +-static const auto TRUE_STR = QStringLiteral("true"); +-static const auto FALSE_STR = QStringLiteral("false"); +- +-enum IconSize +-{ +- Default, +- Medium, +- Large +-}; +- +-template struct AddConst +-{ +- typedef const T Type; +-}; +- +-// this adds const to non-const objects (like std::as_const) +-template constexpr typename AddConst::Type& asConst(T& t) noexcept +-{ +- return t; +-} +-// prevent rvalue arguments: +-template void asConst(const T&&) = delete; +- +-#endif // KEEPASSX_GLOBAL_H +diff -urNr keepassxc-2.6.4-orig/src/core/Group.cpp keepassxc-2.6.4-patched/src/core/Group.cpp +--- keepassxc-2.6.4-orig/src/core/Group.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/Group.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,1239 +0,0 @@ +-/* +- * Copyright (C) 2010 Felix Geyer +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "Group.h" +-#include "config-keepassx.h" +- +-#include "core/Clock.h" +-#include "core/Config.h" +-#include "core/DatabaseIcons.h" +-#include "core/Global.h" +-#include "core/Metadata.h" +-#include "core/Tools.h" +- +-#ifdef WITH_XC_KEESHARE +-#include "keeshare/KeeShare.h" +-#endif +- +-#include +- +-const int Group::DefaultIconNumber = 48; +-const int Group::RecycleBinIconNumber = 43; +-const QString Group::RootAutoTypeSequence = "{USERNAME}{TAB}{PASSWORD}{ENTER}"; +- +-Group::Group() +- : m_customData(new CustomData(this)) +- , m_updateTimeinfo(true) +-{ +- m_data.iconNumber = DefaultIconNumber; +- m_data.isExpanded = true; +- m_data.autoTypeEnabled = Inherit; +- m_data.searchingEnabled = Inherit; +- m_data.mergeMode = Default; +- +- connect(m_customData, SIGNAL(customDataModified()), this, SIGNAL(groupModified())); +- connect(this, SIGNAL(groupModified()), SLOT(updateTimeinfo())); +- connect(this, SIGNAL(groupNonDataChange()), SLOT(updateTimeinfo())); +-} +- +-Group::~Group() +-{ +- setUpdateTimeinfo(false); +- // Destroy entries and children manually so DeletedObjects can be added +- // to database. +- const QList entries = m_entries; +- for (Entry* entry : entries) { +- delete entry; +- } +- +- const QList children = m_children; +- for (Group* group : children) { +- delete group; +- } +- +- if (m_db && m_parent) { +- DeletedObject delGroup; +- delGroup.deletionTime = Clock::currentDateTimeUtc(); +- delGroup.uuid = m_uuid; +- m_db->addDeletedObject(delGroup); +- } +- +- cleanupParent(); +-} +- +-template inline bool Group::set(P& property, const V& value) +-{ +- if (property != value) { +- property = value; +- emit groupModified(); +- return true; +- } else { +- return false; +- } +-} +- +-bool Group::canUpdateTimeinfo() const +-{ +- return m_updateTimeinfo; +-} +- +-void Group::updateTimeinfo() +-{ +- if (m_updateTimeinfo) { +- m_data.timeInfo.setLastModificationTime(Clock::currentDateTimeUtc()); +- m_data.timeInfo.setLastAccessTime(Clock::currentDateTimeUtc()); +- } +-} +- +-void Group::setUpdateTimeinfo(bool value) +-{ +- m_updateTimeinfo = value; +-} +- +-const QUuid& Group::uuid() const +-{ +- return m_uuid; +-} +- +-const QString Group::uuidToHex() const +-{ +- return Tools::uuidToHex(m_uuid); +-} +- +-QString Group::name() const +-{ +- return m_data.name; +-} +- +-QString Group::notes() const +-{ +- return m_data.notes; +-} +- +-QImage Group::icon() const +-{ +- if (m_data.customIcon.isNull()) { +- return databaseIcons()->icon(m_data.iconNumber).toImage(); +- } else { +- Q_ASSERT(m_db); +- if (m_db) { +- return m_db->metadata()->customIcon(m_data.customIcon); +- } else { +- return QImage(); +- } +- } +-} +- +-QPixmap Group::iconPixmap(IconSize size) const +-{ +- QPixmap icon(size, size); +- if (m_data.customIcon.isNull()) { +- icon = databaseIcons()->icon(m_data.iconNumber, size); +- } else { +- Q_ASSERT(m_db); +- if (m_db) { +- icon = m_db->metadata()->customIconPixmap(m_data.customIcon, size); +- } +- } +- +- if (isExpired()) { +- icon = databaseIcons()->applyBadge(icon, DatabaseIcons::Badges::Expired); +- } +-#ifdef WITH_XC_KEESHARE +- else if (KeeShare::isShared(this)) { +- icon = KeeShare::indicatorBadge(this, icon); +- } +-#endif +- +- return icon; +-} +- +-int Group::iconNumber() const +-{ +- return m_data.iconNumber; +-} +- +-const QUuid& Group::iconUuid() const +-{ +- return m_data.customIcon; +-} +- +-const TimeInfo& Group::timeInfo() const +-{ +- return m_data.timeInfo; +-} +- +-bool Group::isExpanded() const +-{ +- return m_data.isExpanded; +-} +- +-QString Group::defaultAutoTypeSequence() const +-{ +- return m_data.defaultAutoTypeSequence; +-} +- +-/** +- * Determine the effective sequence that will be injected +- * This function return an empty string if the current group or any parent has autotype disabled +- */ +-QString Group::effectiveAutoTypeSequence() const +-{ +- QString sequence; +- +- const Group* group = this; +- do { +- if (group->autoTypeEnabled() == Group::Disable) { +- return QString(); +- } +- +- sequence = group->defaultAutoTypeSequence(); +- group = group->parentGroup(); +- } while (group && sequence.isEmpty()); +- +- if (sequence.isEmpty()) { +- sequence = RootAutoTypeSequence; +- } +- +- return sequence; +-} +- +-Group::TriState Group::autoTypeEnabled() const +-{ +- return m_data.autoTypeEnabled; +-} +- +-Group::TriState Group::searchingEnabled() const +-{ +- return m_data.searchingEnabled; +-} +- +-Group::MergeMode Group::mergeMode() const +-{ +- if (m_data.mergeMode == Group::MergeMode::Default) { +- if (m_parent) { +- return m_parent->mergeMode(); +- } +- return Group::MergeMode::KeepNewer; // fallback +- } +- return m_data.mergeMode; +-} +- +-Entry* Group::lastTopVisibleEntry() const +-{ +- return m_lastTopVisibleEntry; +-} +- +-bool Group::isRecycled() const +-{ +- auto group = this; +- if (!group->database()) { +- return false; +- } +- +- do { +- if (group->m_parent && group->m_db->metadata()) { +- if (group->m_parent == group->m_db->metadata()->recycleBin()) { +- return true; +- } +- } +- group = group->m_parent; +- } while (group && group->m_parent && group->m_parent != group->m_db->rootGroup()); +- +- return false; +-} +- +-bool Group::isExpired() const +-{ +- return m_data.timeInfo.expires() && m_data.timeInfo.expiryTime() < Clock::currentDateTimeUtc(); +-} +- +-bool Group::isEmpty() const +-{ +- return !hasChildren() && m_entries.isEmpty(); +-} +- +-CustomData* Group::customData() +-{ +- return m_customData; +-} +- +-const CustomData* Group::customData() const +-{ +- return m_customData; +-} +- +-bool Group::equals(const Group* other, CompareItemOptions options) const +-{ +- if (!other) { +- return false; +- } +- if (m_uuid != other->m_uuid) { +- return false; +- } +- if (!m_data.equals(other->m_data, options)) { +- return false; +- } +- if (m_customData != other->m_customData) { +- return false; +- } +- if (m_children.count() != other->m_children.count()) { +- return false; +- } +- if (m_entries.count() != other->m_entries.count()) { +- return false; +- } +- for (int i = 0; i < m_children.count(); ++i) { +- if (m_children[i]->uuid() != other->m_children[i]->uuid()) { +- return false; +- } +- } +- for (int i = 0; i < m_entries.count(); ++i) { +- if (m_entries[i]->uuid() != other->m_entries[i]->uuid()) { +- return false; +- } +- } +- return true; +-} +- +-void Group::setUuid(const QUuid& uuid) +-{ +- set(m_uuid, uuid); +-} +- +-void Group::setName(const QString& name) +-{ +- if (set(m_data.name, name)) { +- emit groupDataChanged(this); +- } +-} +- +-void Group::setNotes(const QString& notes) +-{ +- set(m_data.notes, notes); +-} +- +-void Group::setIcon(int iconNumber) +-{ +- if (iconNumber >= 0 && (m_data.iconNumber != iconNumber || !m_data.customIcon.isNull())) { +- m_data.iconNumber = iconNumber; +- m_data.customIcon = QUuid(); +- emit groupModified(); +- emit groupDataChanged(this); +- } +-} +- +-void Group::setIcon(const QUuid& uuid) +-{ +- if (!uuid.isNull() && m_data.customIcon != uuid) { +- m_data.customIcon = uuid; +- m_data.iconNumber = 0; +- emit groupModified(); +- emit groupDataChanged(this); +- } +-} +- +-void Group::setTimeInfo(const TimeInfo& timeInfo) +-{ +- m_data.timeInfo = timeInfo; +-} +- +-void Group::setExpanded(bool expanded) +-{ +- if (m_data.isExpanded != expanded) { +- m_data.isExpanded = expanded; +- emit groupNonDataChange(); +- } +-} +- +-void Group::setDefaultAutoTypeSequence(const QString& sequence) +-{ +- set(m_data.defaultAutoTypeSequence, sequence); +-} +- +-void Group::setAutoTypeEnabled(TriState enable) +-{ +- set(m_data.autoTypeEnabled, enable); +-} +- +-void Group::setSearchingEnabled(TriState enable) +-{ +- set(m_data.searchingEnabled, enable); +-} +- +-void Group::setLastTopVisibleEntry(Entry* entry) +-{ +- set(m_lastTopVisibleEntry, entry); +-} +- +-void Group::setExpires(bool value) +-{ +- if (m_data.timeInfo.expires() != value) { +- m_data.timeInfo.setExpires(value); +- emit groupModified(); +- } +-} +- +-void Group::setExpiryTime(const QDateTime& dateTime) +-{ +- if (m_data.timeInfo.expiryTime() != dateTime) { +- m_data.timeInfo.setExpiryTime(dateTime); +- emit groupModified(); +- } +-} +- +-void Group::setMergeMode(MergeMode newMode) +-{ +- set(m_data.mergeMode, newMode); +-} +- +-Group* Group::parentGroup() +-{ +- return m_parent; +-} +- +-const Group* Group::parentGroup() const +-{ +- return m_parent; +-} +- +-void Group::setParent(Group* parent, int index) +-{ +- Q_ASSERT(parent); +- Q_ASSERT(index >= -1 && index <= parent->children().size()); +- // setting a new parent for root groups is not allowed +- Q_ASSERT(!m_db || (m_db->rootGroup() != this)); +- +- bool moveWithinDatabase = (m_db && m_db == parent->m_db); +- +- if (index == -1) { +- index = parent->children().size(); +- +- if (parentGroup() == parent) { +- index--; +- } +- } +- +- if (m_parent == parent && parent->children().indexOf(this) == index) { +- return; +- } +- +- if (!moveWithinDatabase) { +- cleanupParent(); +- m_parent = parent; +- if (m_db) { +- recCreateDelObjects(); +- +- // copy custom icon to the new database +- if (!iconUuid().isNull() && parent->m_db && m_db->metadata()->hasCustomIcon(iconUuid()) +- && !parent->m_db->metadata()->hasCustomIcon(iconUuid())) { +- parent->m_db->metadata()->addCustomIcon(iconUuid(), icon()); +- } +- } +- if (m_db != parent->m_db) { +- connectDatabaseSignalsRecursive(parent->m_db); +- } +- QObject::setParent(parent); +- emit groupAboutToAdd(this, index); +- Q_ASSERT(index <= parent->m_children.size()); +- parent->m_children.insert(index, this); +- } else { +- emit aboutToMove(this, parent, index); +- m_parent->m_children.removeAll(this); +- m_parent = parent; +- QObject::setParent(parent); +- Q_ASSERT(index <= parent->m_children.size()); +- parent->m_children.insert(index, this); +- } +- +- if (m_updateTimeinfo) { +- m_data.timeInfo.setLocationChanged(Clock::currentDateTimeUtc()); +- } +- +- emit groupModified(); +- +- if (!moveWithinDatabase) { +- emit groupAdded(); +- } else { +- emit groupMoved(); +- } +-} +- +-void Group::setParent(Database* db) +-{ +- Q_ASSERT(db); +- Q_ASSERT(db->rootGroup() == this); +- +- cleanupParent(); +- +- m_parent = nullptr; +- connectDatabaseSignalsRecursive(db); +- +- QObject::setParent(db); +-} +- +-QStringList Group::hierarchy(int height) const +-{ +- QStringList hierarchy; +- const Group* group = this; +- const Group* parent = m_parent; +- +- if (height == 0) { +- return hierarchy; +- } +- +- hierarchy.prepend(group->name()); +- +- int level = 1; +- bool heightReached = level == height; +- +- while (parent && !heightReached) { +- group = group->parentGroup(); +- parent = group->parentGroup(); +- heightReached = ++level == height; +- +- hierarchy.prepend(group->name()); +- } +- +- return hierarchy; +-} +- +-bool Group::hasChildren() const +-{ +- return !children().isEmpty(); +-} +- +-Database* Group::database() +-{ +- return m_db; +-} +- +-const Database* Group::database() const +-{ +- return m_db; +-} +- +-QList Group::children() +-{ +- return m_children; +-} +- +-const QList& Group::children() const +-{ +- return m_children; +-} +- +-QList Group::entries() +-{ +- return m_entries; +-} +- +-const QList& Group::entries() const +-{ +- return m_entries; +-} +- +-QList Group::entriesRecursive(bool includeHistoryItems) const +-{ +- QList entryList; +- +- entryList.append(m_entries); +- +- if (includeHistoryItems) { +- for (Entry* entry : m_entries) { +- entryList.append(entry->historyItems()); +- } +- } +- +- for (Group* group : m_children) { +- entryList.append(group->entriesRecursive(includeHistoryItems)); +- } +- +- return entryList; +-} +- +-QList Group::referencesRecursive(const Entry* entry) const +-{ +- auto entries = entriesRecursive(); +- return QtConcurrent::blockingFiltered(entries, +- [entry](const Entry* e) { return e->hasReferencesTo(entry->uuid()); }); +-} +- +-Entry* Group::findEntryByUuid(const QUuid& uuid, bool recursive) const +-{ +- if (uuid.isNull()) { +- return nullptr; +- } +- +- auto entries = m_entries; +- if (recursive) { +- entries = entriesRecursive(false); +- } +- +- for (auto entry : entries) { +- if (entry->uuid() == uuid) { +- return entry; +- } +- } +- +- return nullptr; +-} +- +-Entry* Group::findEntryByPath(const QString& entryPath) +-{ +- if (entryPath.isEmpty()) { +- return nullptr; +- } +- +- // Add a beginning slash if the search string contains a slash +- // We don't add a slash by default to allow searching by entry title +- QString normalizedEntryPath = entryPath; +- if (!normalizedEntryPath.startsWith("/") && normalizedEntryPath.contains("/")) { +- normalizedEntryPath = "/" + normalizedEntryPath; +- } +- return findEntryByPathRecursive(normalizedEntryPath, "/"); +-} +- +-Entry* Group::findEntryBySearchTerm(const QString& term, EntryReferenceType referenceType) +-{ +- Q_ASSERT_X(referenceType != EntryReferenceType::Unknown, +- "Database::findEntryRecursive", +- "Can't search entry with \"referenceType\" parameter equal to \"Unknown\""); +- +- const QList groups = groupsRecursive(true); +- +- for (const Group* group : groups) { +- bool found = false; +- const QList& entryList = group->entries(); +- for (Entry* entry : entryList) { +- switch (referenceType) { +- case EntryReferenceType::Unknown: +- return nullptr; +- case EntryReferenceType::Title: +- found = entry->title() == term; +- break; +- case EntryReferenceType::UserName: +- found = entry->username() == term; +- break; +- case EntryReferenceType::Password: +- found = entry->password() == term; +- break; +- case EntryReferenceType::Url: +- found = entry->url() == term; +- break; +- case EntryReferenceType::Notes: +- found = entry->notes() == term; +- break; +- case EntryReferenceType::QUuid: +- found = entry->uuid() == QUuid::fromRfc4122(QByteArray::fromHex(term.toLatin1())); +- break; +- case EntryReferenceType::CustomAttributes: +- found = entry->attributes()->containsValue(term); +- break; +- } +- +- if (found) { +- return entry; +- } +- } +- } +- +- return nullptr; +-} +- +-Entry* Group::findEntryByPathRecursive(const QString& entryPath, const QString& basePath) +-{ +- // Return the first entry that matches the full path OR if there is no leading +- // slash, return the first entry title that matches +- for (Entry* entry : entries()) { +- // clang-format off +- if (entryPath == (basePath + entry->title()) +- || (!entryPath.startsWith("/") && entry->title() == entryPath)) { +- return entry; +- } +- // clang-format on +- } +- +- for (Group* group : children()) { +- Entry* entry = group->findEntryByPathRecursive(entryPath, basePath + group->name() + "/"); +- if (entry != nullptr) { +- return entry; +- } +- } +- +- return nullptr; +-} +- +-Group* Group::findGroupByPath(const QString& groupPath) +-{ +- // normalize the groupPath by adding missing front and rear slashes. once. +- QString normalizedGroupPath; +- +- if (groupPath.isEmpty()) { +- normalizedGroupPath = QString("/"); // root group +- } else { +- // clang-format off +- normalizedGroupPath = (groupPath.startsWith("/") ? "" : "/") +- + groupPath +- + (groupPath.endsWith("/") ? "" : "/"); +- // clang-format on +- } +- return findGroupByPathRecursive(normalizedGroupPath, "/"); +-} +- +-Group* Group::findGroupByPathRecursive(const QString& groupPath, const QString& basePath) +-{ +- // paths must be normalized +- Q_ASSERT(groupPath.startsWith("/") && groupPath.endsWith("/")); +- Q_ASSERT(basePath.startsWith("/") && basePath.endsWith("/")); +- +- if (groupPath == basePath) { +- return this; +- } +- +- for (Group* innerGroup : children()) { +- QString innerBasePath = basePath + innerGroup->name() + "/"; +- Group* group = innerGroup->findGroupByPathRecursive(groupPath, innerBasePath); +- if (group != nullptr) { +- return group; +- } +- } +- +- return nullptr; +-} +- +-QString Group::print(bool recursive, bool flatten, int depth) +-{ +- QString response; +- QString prefix; +- +- if (flatten) { +- const QString separator("/"); +- prefix = hierarchy(depth).join(separator); +- if (!prefix.isEmpty()) { +- prefix += separator; +- } +- } else { +- prefix = QString(" ").repeated(depth); +- } +- +- if (entries().isEmpty() && children().isEmpty()) { +- response += prefix + tr("[empty]", "group has no children") + "\n"; +- return response; +- } +- +- for (Entry* entry : entries()) { +- response += prefix + entry->title() + "\n"; +- } +- +- for (Group* innerGroup : children()) { +- response += prefix + innerGroup->name() + "/\n"; +- if (recursive) { +- response += innerGroup->print(recursive, flatten, depth + 1); +- } +- } +- +- return response; +-} +- +-QList Group::groupsRecursive(bool includeSelf) const +-{ +- QList groupList; +- if (includeSelf) { +- groupList.append(this); +- } +- +- for (const Group* group : asConst(m_children)) { +- groupList.append(group->groupsRecursive(true)); +- } +- +- return groupList; +-} +- +-QList Group::groupsRecursive(bool includeSelf) +-{ +- QList groupList; +- if (includeSelf) { +- groupList.append(this); +- } +- +- for (Group* group : asConst(m_children)) { +- groupList.append(group->groupsRecursive(true)); +- } +- +- return groupList; +-} +- +-QSet Group::customIconsRecursive() const +-{ +- QSet result; +- +- if (!iconUuid().isNull()) { +- result.insert(iconUuid()); +- } +- +- const QList entryList = entriesRecursive(true); +- for (Entry* entry : entryList) { +- if (!entry->iconUuid().isNull()) { +- result.insert(entry->iconUuid()); +- } +- } +- +- for (Group* group : m_children) { +- result.unite(group->customIconsRecursive()); +- } +- +- return result; +-} +- +-QList Group::usernamesRecursive(int topN) const +-{ +- // Collect all usernames and sort for easy counting +- QHash countedUsernames; +- for (const auto* entry : entriesRecursive()) { +- const auto username = entry->username(); +- if (!username.isEmpty() && !entry->isAttributeReference(EntryAttributes::UserNameKey)) { +- countedUsernames.insert(username, ++countedUsernames[username]); +- } +- } +- +- // Sort username/frequency pairs by frequency and name +- QList> sortedUsernames; +- for (const auto& key : countedUsernames.keys()) { +- sortedUsernames.append({key, countedUsernames[key]}); +- } +- +- auto comparator = [](const QPair& arg1, const QPair& arg2) { +- if (arg1.second == arg2.second) { +- return arg1.first < arg2.first; +- } +- return arg1.second > arg2.second; +- }; +- +- std::sort(sortedUsernames.begin(), sortedUsernames.end(), comparator); +- +- // Take first topN usernames if set +- QList usernames; +- int actualUsernames = topN < 0 ? sortedUsernames.size() : std::min(topN, sortedUsernames.size()); +- for (int i = 0; i < actualUsernames; i++) { +- usernames.append(sortedUsernames[i].first); +- } +- +- return usernames; +-} +- +-Group* Group::findGroupByUuid(const QUuid& uuid) +-{ +- if (uuid.isNull()) { +- return nullptr; +- } +- +- for (Group* group : groupsRecursive(true)) { +- if (group->uuid() == uuid) { +- return group; +- } +- } +- +- return nullptr; +-} +- +-Group* Group::findChildByName(const QString& name) +-{ +- for (Group* group : asConst(m_children)) { +- if (group->name() == name) { +- return group; +- } +- } +- +- return nullptr; +-} +- +-/** +- * Creates a duplicate of this group. +- * Note that you need to copy the custom icons manually when inserting the +- * new group into another database. +- */ +-Group* Group::clone(Entry::CloneFlags entryFlags, Group::CloneFlags groupFlags) const +-{ +- Group* clonedGroup = new Group(); +- +- clonedGroup->setUpdateTimeinfo(false); +- +- if (groupFlags & Group::CloneNewUuid) { +- clonedGroup->setUuid(QUuid::createUuid()); +- } else { +- clonedGroup->setUuid(this->uuid()); +- } +- +- clonedGroup->m_data = m_data; +- clonedGroup->m_customData->copyDataFrom(m_customData); +- +- if (groupFlags & Group::CloneIncludeEntries) { +- const QList entryList = entries(); +- for (Entry* entry : entryList) { +- Entry* clonedEntry = entry->clone(entryFlags); +- clonedEntry->setGroup(clonedGroup); +- } +- +- const QList childrenGroups = children(); +- for (Group* groupChild : childrenGroups) { +- Group* clonedGroupChild = groupChild->clone(entryFlags, groupFlags); +- clonedGroupChild->setParent(clonedGroup); +- } +- } +- +- clonedGroup->setUpdateTimeinfo(true); +- if (groupFlags & Group::CloneResetTimeInfo) { +- +- QDateTime now = Clock::currentDateTimeUtc(); +- clonedGroup->m_data.timeInfo.setCreationTime(now); +- clonedGroup->m_data.timeInfo.setLastModificationTime(now); +- clonedGroup->m_data.timeInfo.setLastAccessTime(now); +- clonedGroup->m_data.timeInfo.setLocationChanged(now); +- } +- +- return clonedGroup; +-} +- +-void Group::copyDataFrom(const Group* other) +-{ +- if (set(m_data, other->m_data)) { +- emit groupDataChanged(this); +- } +- m_customData->copyDataFrom(other->m_customData); +- m_lastTopVisibleEntry = other->m_lastTopVisibleEntry; +-} +- +-void Group::addEntry(Entry* entry) +-{ +- Q_ASSERT(entry); +- Q_ASSERT(!m_entries.contains(entry)); +- +- emit entryAboutToAdd(entry); +- +- m_entries << entry; +- connect(entry, SIGNAL(entryDataChanged(Entry*)), SIGNAL(entryDataChanged(Entry*))); +- if (m_db) { +- connect(entry, SIGNAL(entryModified()), m_db, SLOT(markAsModified())); +- } +- +- emit groupModified(); +- emit entryAdded(entry); +-} +- +-void Group::removeEntry(Entry* entry) +-{ +- Q_ASSERT_X(m_entries.contains(entry), +- Q_FUNC_INFO, +- QString("Group %1 does not contain %2").arg(this->name(), entry->title()).toLatin1()); +- +- emit entryAboutToRemove(entry); +- +- entry->disconnect(this); +- if (m_db) { +- entry->disconnect(m_db); +- } +- m_entries.removeAll(entry); +- emit groupModified(); +- emit entryRemoved(entry); +-} +- +-void Group::moveEntryUp(Entry* entry) +-{ +- int row = m_entries.indexOf(entry); +- if (row <= 0) { +- return; +- } +- +- emit entryAboutToMoveUp(row); +- m_entries.move(row, row - 1); +- emit entryMovedUp(); +- emit groupNonDataChange(); +-} +- +-void Group::moveEntryDown(Entry* entry) +-{ +- int row = m_entries.indexOf(entry); +- if (row >= m_entries.size() - 1) { +- return; +- } +- +- emit entryAboutToMoveDown(row); +- m_entries.move(row, row + 1); +- emit entryMovedDown(); +- emit groupNonDataChange(); +-} +- +-void Group::connectDatabaseSignalsRecursive(Database* db) +-{ +- if (m_db) { +- disconnect(m_db); +- } +- +- for (Entry* entry : asConst(m_entries)) { +- if (m_db) { +- entry->disconnect(m_db); +- } +- if (db) { +- connect(entry, SIGNAL(entryModified()), db, SLOT(markAsModified())); +- } +- } +- +- if (db) { +- // clang-format off +- connect(this, SIGNAL(groupDataChanged(Group*)), db, SIGNAL(groupDataChanged(Group*))); +- connect(this, SIGNAL(groupAboutToRemove(Group*)), db, SIGNAL(groupAboutToRemove(Group*))); +- connect(this, SIGNAL(groupRemoved()), db, SIGNAL(groupRemoved())); +- connect(this, SIGNAL(groupAboutToAdd(Group*, int)), db, SIGNAL(groupAboutToAdd(Group*,int))); +- connect(this, SIGNAL(groupAdded()), db, SIGNAL(groupAdded())); +- connect(this, SIGNAL(aboutToMove(Group*,Group*,int)), db, SIGNAL(groupAboutToMove(Group*,Group*,int))); +- connect(this, SIGNAL(groupMoved()), db, SIGNAL(groupMoved())); +- connect(this, SIGNAL(groupModified()), db, SLOT(markAsModified())); +- connect(this, SIGNAL(groupNonDataChange()), db, SLOT(markNonDataChange())); +- // clang-format on +- } +- +- m_db = db; +- +- for (Group* group : asConst(m_children)) { +- group->connectDatabaseSignalsRecursive(db); +- } +-} +- +-void Group::cleanupParent() +-{ +- if (m_parent) { +- emit groupAboutToRemove(this); +- m_parent->m_children.removeAll(this); +- emit groupModified(); +- emit groupRemoved(); +- } +-} +- +-void Group::recCreateDelObjects() +-{ +- if (m_db) { +- for (Entry* entry : asConst(m_entries)) { +- m_db->addDeletedObject(entry->uuid()); +- } +- +- for (Group* group : asConst(m_children)) { +- group->recCreateDelObjects(); +- } +- m_db->addDeletedObject(m_uuid); +- } +-} +- +-bool Group::resolveSearchingEnabled() const +-{ +- switch (m_data.searchingEnabled) { +- case Inherit: +- if (!m_parent) { +- return true; +- } else { +- return m_parent->resolveSearchingEnabled(); +- } +- case Enable: +- return true; +- case Disable: +- return false; +- default: +- Q_ASSERT(false); +- return false; +- } +-} +- +-bool Group::resolveAutoTypeEnabled() const +-{ +- switch (m_data.autoTypeEnabled) { +- case Inherit: +- if (!m_parent) { +- return true; +- } else { +- return m_parent->resolveAutoTypeEnabled(); +- } +- case Enable: +- return true; +- case Disable: +- return false; +- default: +- Q_ASSERT(false); +- return false; +- } +-} +- +-QStringList Group::locate(const QString& locateTerm, const QString& currentPath) const +-{ +- // TODO: Replace with EntrySearcher +- QStringList response; +- if (locateTerm.isEmpty()) { +- return response; +- } +- +- for (const Entry* entry : asConst(m_entries)) { +- QString entryPath = currentPath + entry->title(); +- if (entryPath.contains(locateTerm, Qt::CaseInsensitive)) { +- response << entryPath; +- } +- } +- +- for (const Group* group : asConst(m_children)) { +- for (const QString& path : group->locate(locateTerm, currentPath + group->name() + QString("/"))) { +- response << path; +- } +- } +- +- return response; +-} +- +-Entry* Group::addEntryWithPath(const QString& entryPath) +-{ +- if (entryPath.isEmpty() || findEntryByPath(entryPath)) { +- return nullptr; +- } +- +- QStringList groups = entryPath.split("/"); +- QString entryTitle = groups.takeLast(); +- QString groupPath = groups.join("/"); +- +- Group* group = findGroupByPath(groupPath); +- if (!group) { +- return nullptr; +- } +- +- auto* entry = new Entry(); +- entry->setTitle(entryTitle); +- entry->setUuid(QUuid::createUuid()); +- entry->setGroup(group); +- +- return entry; +-} +- +-void Group::applyGroupIconOnCreateTo(Entry* entry) +-{ +- Q_ASSERT(entry); +- +- if (!config()->get(Config::UseGroupIconOnEntryCreation).toBool()) { +- return; +- } +- +- if (iconNumber() == Group::DefaultIconNumber && iconUuid().isNull()) { +- return; +- } +- +- applyGroupIconTo(entry); +-} +- +-void Group::applyGroupIconTo(Entry* entry) +-{ +- Q_ASSERT(entry); +- +- if (iconUuid().isNull()) { +- entry->setIcon(iconNumber()); +- } else { +- entry->setIcon(iconUuid()); +- } +-} +- +-void Group::applyGroupIconTo(Group* other) +-{ +- Q_ASSERT(other); +- +- if (iconUuid().isNull()) { +- other->setIcon(iconNumber()); +- } else { +- other->setIcon(iconUuid()); +- } +-} +- +-void Group::applyGroupIconToChildGroups() +-{ +- for (Group* recursiveChild : groupsRecursive(false)) { +- applyGroupIconTo(recursiveChild); +- } +-} +- +-void Group::applyGroupIconToChildEntries() +-{ +- for (Entry* recursiveEntry : entriesRecursive(false)) { +- applyGroupIconTo(recursiveEntry); +- } +-} +- +-void Group::sortChildrenRecursively(bool reverse) +-{ +- std::sort( +- m_children.begin(), m_children.end(), [reverse](const Group* childGroup1, const Group* childGroup2) -> bool { +- QString name1 = childGroup1->name(); +- QString name2 = childGroup2->name(); +- return reverse ? name1.compare(name2, Qt::CaseInsensitive) > 0 +- : name1.compare(name2, Qt::CaseInsensitive) < 0; +- }); +- +- for (auto child : m_children) { +- child->sortChildrenRecursively(reverse); +- } +- +- emit groupModified(); +-} +- +-bool Group::GroupData::operator==(const Group::GroupData& other) const +-{ +- return equals(other, CompareItemDefault); +-} +- +-bool Group::GroupData::operator!=(const Group::GroupData& other) const +-{ +- return !(*this == other); +-} +- +-bool Group::GroupData::equals(const Group::GroupData& other, CompareItemOptions options) const +-{ +- if (::compare(name, other.name, options) != 0) { +- return false; +- } +- if (::compare(notes, other.notes, options) != 0) { +- return false; +- } +- if (::compare(iconNumber, other.iconNumber) != 0) { +- return false; +- } +- if (::compare(customIcon, other.customIcon) != 0) { +- return false; +- } +- if (!timeInfo.equals(other.timeInfo, options)) { +- return false; +- } +- // TODO HNH: Some properties are configurable - should they be ignored? +- if (::compare(isExpanded, other.isExpanded, options) != 0) { +- return false; +- } +- if (::compare(defaultAutoTypeSequence, other.defaultAutoTypeSequence, options) != 0) { +- return false; +- } +- if (::compare(autoTypeEnabled, other.autoTypeEnabled, options) != 0) { +- return false; +- } +- if (::compare(searchingEnabled, other.searchingEnabled, options) != 0) { +- return false; +- } +- if (::compare(mergeMode, other.mergeMode, options) != 0) { +- return false; +- } +- return true; +-} +diff -urNr keepassxc-2.6.4-orig/src/core/Group.h keepassxc-2.6.4-patched/src/core/Group.h +--- keepassxc-2.6.4-orig/src/core/Group.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/Group.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,234 +0,0 @@ +-/* +- * Copyright (C) 2010 Felix Geyer +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_GROUP_H +-#define KEEPASSX_GROUP_H +- +-#include +-#include +-#include +- +-#include "core/CustomData.h" +-#include "core/Database.h" +-#include "core/Entry.h" +-#include "core/Global.h" +-#include "core/TimeInfo.h" +- +-class Group : public QObject +-{ +- Q_OBJECT +- +-public: +- enum TriState +- { +- Inherit, +- Enable, +- Disable +- }; +- enum MergeMode +- { +- Default, // Determine merge strategy from parent or fallback (Synchronize) +- Duplicate, // lossy strategy regarding deletions, duplicate older changes in a new entry +- KeepLocal, // merge history forcing local as top regardless of age +- KeepRemote, // merge history forcing remote as top regardless of age +- KeepNewer, // merge history +- Synchronize, // merge history keeping most recent as top entry and appling deletions +- }; +- +- enum CloneFlag +- { +- CloneNoFlags = 0, +- CloneNewUuid = 1, // generate a random uuid for the clone +- CloneResetTimeInfo = 2, // set all TimeInfo attributes to the current time +- CloneIncludeEntries = 4, // clone the group entries +- CloneDefault = CloneNewUuid | CloneResetTimeInfo | CloneIncludeEntries, +- }; +- Q_DECLARE_FLAGS(CloneFlags, CloneFlag) +- +- struct GroupData +- { +- QString name; +- QString notes; +- int iconNumber; +- QUuid customIcon; +- TimeInfo timeInfo; +- bool isExpanded; +- QString defaultAutoTypeSequence; +- Group::TriState autoTypeEnabled; +- Group::TriState searchingEnabled; +- Group::MergeMode mergeMode; +- +- bool operator==(const GroupData& other) const; +- bool operator!=(const GroupData& other) const; +- bool equals(const GroupData& other, CompareItemOptions options) const; +- }; +- +- Group(); +- ~Group(); +- +- const QUuid& uuid() const; +- const QString uuidToHex() const; +- QString name() const; +- QString notes() const; +- QImage icon() const; +- QPixmap iconPixmap(IconSize size = IconSize::Default) const; +- int iconNumber() const; +- const QUuid& iconUuid() const; +- const TimeInfo& timeInfo() const; +- bool isExpanded() const; +- QString defaultAutoTypeSequence() const; +- QString effectiveAutoTypeSequence() const; +- Group::TriState autoTypeEnabled() const; +- Group::TriState searchingEnabled() const; +- Group::MergeMode mergeMode() const; +- bool resolveSearchingEnabled() const; +- bool resolveAutoTypeEnabled() const; +- Entry* lastTopVisibleEntry() const; +- bool isExpired() const; +- bool isRecycled() const; +- bool isEmpty() const; +- CustomData* customData(); +- const CustomData* customData() const; +- +- bool equals(const Group* other, CompareItemOptions options) const; +- +- static const int DefaultIconNumber; +- static const int RecycleBinIconNumber; +- static const QString RootAutoTypeSequence; +- +- Group* findChildByName(const QString& name); +- Entry* findEntryByUuid(const QUuid& uuid, bool recursive = true) const; +- Entry* findEntryByPath(const QString& entryPath); +- Entry* findEntryBySearchTerm(const QString& term, EntryReferenceType referenceType); +- Group* findGroupByUuid(const QUuid& uuid); +- Group* findGroupByPath(const QString& groupPath); +- QStringList locate(const QString& locateTerm, const QString& currentPath = {"/"}) const; +- Entry* addEntryWithPath(const QString& entryPath); +- void setUuid(const QUuid& uuid); +- void setName(const QString& name); +- void setNotes(const QString& notes); +- void setIcon(int iconNumber); +- void setIcon(const QUuid& uuid); +- void setTimeInfo(const TimeInfo& timeInfo); +- void setExpanded(bool expanded); +- void setDefaultAutoTypeSequence(const QString& sequence); +- void setAutoTypeEnabled(TriState enable); +- void setSearchingEnabled(TriState enable); +- void setLastTopVisibleEntry(Entry* entry); +- void setExpires(bool value); +- void setExpiryTime(const QDateTime& dateTime); +- void setMergeMode(MergeMode newMode); +- +- bool canUpdateTimeinfo() const; +- void setUpdateTimeinfo(bool value); +- +- Group* parentGroup(); +- const Group* parentGroup() const; +- void setParent(Group* parent, int index = -1); +- QStringList hierarchy(int height = -1) const; +- bool hasChildren() const; +- +- Database* database(); +- const Database* database() const; +- QList children(); +- const QList& children() const; +- QList entries(); +- const QList& entries() const; +- Entry* findEntryRecursive(const QString& text, EntryReferenceType referenceType, Group* group = nullptr); +- QList referencesRecursive(const Entry* entry) const; +- QList entriesRecursive(bool includeHistoryItems = false) const; +- QList groupsRecursive(bool includeSelf) const; +- QList groupsRecursive(bool includeSelf); +- QSet customIconsRecursive() const; +- QList usernamesRecursive(int topN = -1) const; +- +- Group* clone(Entry::CloneFlags entryFlags = Entry::CloneDefault, +- Group::CloneFlags groupFlags = Group::CloneDefault) const; +- +- void copyDataFrom(const Group* other); +- QString print(bool recursive = false, bool flatten = false, int depth = 0); +- +- void addEntry(Entry* entry); +- void removeEntry(Entry* entry); +- void moveEntryUp(Entry* entry); +- void moveEntryDown(Entry* entry); +- +- void applyGroupIconOnCreateTo(Entry* entry); +- void applyGroupIconTo(Entry* entry); +- void applyGroupIconTo(Group* other); +- void applyGroupIconToChildGroups(); +- void applyGroupIconToChildEntries(); +- +- void sortChildrenRecursively(bool reverse = false); +- +-signals: +- void groupDataChanged(Group* group); +- void groupAboutToAdd(Group* group, int index); +- void groupAdded(); +- void groupAboutToRemove(Group* group); +- void groupRemoved(); +- void aboutToMove(Group* group, Group* toGroup, int index); +- void groupMoved(); +- void groupModified(); +- void groupNonDataChange(); +- void entryAboutToAdd(Entry* entry); +- void entryAdded(Entry* entry); +- void entryAboutToRemove(Entry* entry); +- void entryRemoved(Entry* entry); +- void entryAboutToMoveUp(int row); +- void entryMovedUp(); +- void entryAboutToMoveDown(int row); +- void entryMovedDown(); +- void entryDataChanged(Entry* entry); +- +-private slots: +- void updateTimeinfo(); +- +-private: +- template bool set(P& property, const V& value); +- +- void setParent(Database* db); +- +- void connectDatabaseSignalsRecursive(Database* db); +- void cleanupParent(); +- void recCreateDelObjects(); +- +- Entry* findEntryByPathRecursive(const QString& entryPath, const QString& basePath); +- Group* findGroupByPathRecursive(const QString& groupPath, const QString& basePath); +- +- QPointer m_db; +- QUuid m_uuid; +- GroupData m_data; +- QPointer m_lastTopVisibleEntry; +- QList m_children; +- QList m_entries; +- +- QPointer m_customData; +- +- QPointer m_parent; +- +- bool m_updateTimeinfo; +- +- friend void Database::setRootGroup(Group* group); +- friend Entry::~Entry(); +- friend void Entry::setGroup(Group* group); +-}; +- +-Q_DECLARE_OPERATORS_FOR_FLAGS(Group::CloneFlags) +- +-#endif // KEEPASSX_GROUP_H +diff -urNr keepassxc-2.6.4-orig/src/core/HibpDownloader.cpp keepassxc-2.6.4-patched/src/core/HibpDownloader.cpp +--- keepassxc-2.6.4-orig/src/core/HibpDownloader.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/HibpDownloader.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,190 +0,0 @@ +-/* +- * Copyright (C) 2020 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "HibpDownloader.h" +-#include "core/Config.h" +-#include "core/Global.h" +-#include "core/NetworkManager.h" +- +-#include +-#include +-#include +- +-namespace +-{ +- /* +- * Return the SHA1 hash of the specified password in upper-case hex. +- * +- * The result is always exactly 40 characters long. +- */ +- QString sha1Hex(const QString& password) +- { +- // Get the binary SHA1 +- const auto sha1 = QCryptographicHash::hash(password.toUtf8(), QCryptographicHash::Sha1); +- return sha1.toHex().toUpper(); +- } +- +- /* +- * Search a password's hash in the output of the HIBP web service. +- * +- * Returns the number of times the password is found in breaches, or +- * 0 if the password is not in the HIBP result. +- */ +- int pwnCount(const QString& password, const QString& hibpResult) +- { +- // The first 5 characters of the hash are in the URL already, +- // the HIBP result contains the remainder +- auto pos = hibpResult.indexOf(sha1Hex(password).mid(5)); +- if (pos < 0) { +- return 0; +- } +- +- // Skip past the sha1 and ':' +- pos += 36; +- +- // Find where the count ends +- auto end = hibpResult.indexOf('\n', pos); +- if (end < 0) { +- end = hibpResult.size(); +- } +- +- // Extract the count, remove remaining whitespace, and convert to int +- return hibpResult.midRef(pos, end - pos).trimmed().toInt(); +- } +-} // namespace +- +-HibpDownloader::HibpDownloader(QObject* parent) +- : QObject(parent) +-{ +-} +- +-HibpDownloader::~HibpDownloader() +-{ +- abort(); +-} +- +-/* +- * Add one password to the list list of passwords to check. +- * +- * Invoke this function once for every password to check, +- * then call validate(). +- */ +-void HibpDownloader::add(const QString& password) +-{ +- if (!m_pwdsToTry.contains(password)) { +- m_pwdsToTry << password; +- } +-} +- +-/* +- * Start validating the passwords against HIBP. +- */ +-void HibpDownloader::validate() +-{ +- for (auto password : m_pwdsToTry) { +- // The URL we query is https://api.pwnedpasswords.com/range/XXXXX, +- // where XXXXX is the first five bytes of the hex representation of +- // the password's SHA1. +- const auto url = QString("https://api.pwnedpasswords.com/range/") + sha1Hex(password).left(5); +- +- // HIBP requires clients to specify a user agent in the request +- // (https://haveibeenpwned.com/API/v3#UserAgent); however, in order +- // to minimize the amount of information we expose about ourselves, +- // we don't add the KeePassXC version number or platform. +- auto request = QNetworkRequest(url); +- request.setRawHeader("User-Agent", "KeePassXC"); +- +- // Finally, submit the request to HIBP. +- auto reply = getNetMgr()->get(request); +- connect(reply, &QNetworkReply::finished, this, &HibpDownloader::fetchFinished); +- connect(reply, &QIODevice::readyRead, this, &HibpDownloader::fetchReadyRead); +- m_replies.insert(reply, {password, {}}); +- } +- +- m_pwdsToTry.clear(); +-} +- +-int HibpDownloader::passwordsToValidate() const +-{ +- return m_pwdsToTry.size(); +-} +- +-int HibpDownloader::passwordsRemaining() const +-{ +- return m_replies.size(); +-} +- +-/* +- * Abort the current online activity (if any). +- */ +-void HibpDownloader::abort() +-{ +- for (auto reply : m_replies.keys()) { +- reply->abort(); +- reply->deleteLater(); +- } +- m_replies.clear(); +-} +- +-/* +- * Called when new data has been loaded from the HIBP server. +- */ +-void HibpDownloader::fetchReadyRead() +-{ +- const auto reply = qobject_cast(sender()); +- auto entry = m_replies.find(reply); +- if (entry != m_replies.end()) { +- entry->second += reply->readAll(); +- } +-} +- +-/* +- * Called after all data has been loaded from the HIBP server. +- */ +-void HibpDownloader::fetchFinished() +-{ +- const auto reply = qobject_cast(sender()); +- const auto entry = m_replies.find(reply); +- if (entry == m_replies.end()) { +- return; +- } +- +- // Get result status +- const auto ok = reply->error() == QNetworkReply::NoError; +- const auto err = reply->errorString(); +- +- const auto password = entry->first; +- const auto hibpReply = entry->second; +- +- reply->deleteLater(); +- m_replies.remove(reply); +- +- // If there was an error, assume it's permanent and abort +- // (don't process the rest of the password list). +- if (!ok) { +- auto msg = tr("Online password validation failed") + ":\n" + err; +- if (!hibpReply.isEmpty()) { +- msg += "\n" + hibpReply; +- } +- abort(); +- emit fetchFailed(msg); +- return; +- } +- +- // Current password validated, send the result to the caller +- emit hibpResult(password, pwnCount(password, hibpReply)); +-} +diff -urNr keepassxc-2.6.4-orig/src/core/HibpDownloader.h keepassxc-2.6.4-patched/src/core/HibpDownloader.h +--- keepassxc-2.6.4-orig/src/core/HibpDownloader.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/HibpDownloader.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,72 +0,0 @@ +-/* +- * Copyright (C) 2020 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_HIBPDOWNLOADER_H +-#define KEEPASSXC_HIBPDOWNLOADER_H +- +-#include "config-keepassx.h" +-#include +-#include +-#include +- +-#ifndef WITH_XC_NETWORKING +-#error This file requires KeePassXC to be built with network support. +-#endif +- +-class QNetworkReply; +- +-/* +- * Check if a password has been hacked by looking it up on the +- * "Have I Been Pwned" website (https://haveibeenpwned.com/) +- * in the background. +- * +- * Usage: Pass the password to check to the ctor and process +- * the `finished` signal to get the result. Process the +- * `failed` signal to handle errors. +- */ +-class HibpDownloader : public QObject +-{ +- Q_OBJECT +- +-public: +- explicit HibpDownloader(QObject* parent = nullptr); +- ~HibpDownloader() override; +- +- void add(const QString& password); +- void validate(); +- int passwordsToValidate() const; +- int passwordsRemaining() const; +- +-signals: +- void hibpResult(const QString& password, int count); +- void fetchFailed(const QString& error); +- +-public slots: +- void abort(); +- +-private slots: +- void fetchFinished(); +- void fetchReadyRead(); +- +-private: +- void fetchPassword(const QString& password); +- +- QStringList m_pwdsToTry; // The list of remaining passwords to validate +- QHash> m_replies; +-}; +- +-#endif // KEEPASSXC_HIBPDOWNLOADER_H +diff -urNr keepassxc-2.6.4-orig/src/core/HibpOffline.cpp keepassxc-2.6.4-patched/src/core/HibpOffline.cpp +--- keepassxc-2.6.4-orig/src/core/HibpOffline.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/HibpOffline.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,109 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "HibpOffline.h" +- +-#include +-#include +- +-#include "core/Database.h" +-#include "core/Group.h" +- +-namespace HibpOffline +-{ +- const std::size_t SHA1_BYTES = 20; +- +- enum class ParseResult +- { +- Ok, +- Eof, +- Error +- }; +- +- ParseResult parseHibpLine(QIODevice& input, QByteArray& sha1, int& count) +- { +- QByteArray hexSha1(SHA1_BYTES * 2, '\0'); +- const qint64 rc = input.read(hexSha1.data(), hexSha1.size()); +- if (rc == 0) { +- return ParseResult::Eof; +- } else if (rc != hexSha1.size()) { +- return ParseResult::Error; +- } +- +- sha1 = QByteArray::fromHex(hexSha1); +- +- char c; +- if (!input.getChar(&c) || c != ':') { +- return ParseResult::Error; +- } +- +- count = 0; +- while (true) { +- if (!input.getChar(&c)) { +- return ParseResult::Error; +- } +- +- if (c == '\n' || c == '\r') { +- break; +- } +- +- if (!('0' <= c && c <= '9')) { +- return ParseResult::Error; +- } +- +- count *= 10; +- count += (c - '0'); +- } +- +- while (1 == input.peek(&c, 1) && (c == '\n' || c == '\r')) { +- input.getChar(&c); +- } +- +- return ParseResult::Ok; +- } +- +- bool +- report(QSharedPointer db, QIODevice& hibpInput, QList>& findings, QString* error) +- { +- QMultiHash entriesBySha1; +- for (const auto* entry : db->rootGroup()->entriesRecursive()) { +- if (!entry->isRecycled()) { +- const auto sha1 = QCryptographicHash::hash(entry->password().toUtf8(), QCryptographicHash::Sha1); +- entriesBySha1.insert(sha1, entry); +- } +- } +- +- QByteArray sha1; +- for (quint64 lineNum = 1;; ++lineNum) { +- int count = 0; +- +- switch (parseHibpLine(hibpInput, sha1, count)) { +- case ParseResult::Eof: +- return true; +- case ParseResult::Error: +- *error = QObject::tr("HIBP file, line %1: parse error").arg(lineNum); +- return false; +- default: +- break; +- } +- +- for (const auto* entry : entriesBySha1.values(sha1)) { +- findings.append({entry, count}); +- } +- } +- } +-} // namespace HibpOffline +diff -urNr keepassxc-2.6.4-orig/src/core/HibpOffline.h keepassxc-2.6.4-patched/src/core/HibpOffline.h +--- keepassxc-2.6.4-orig/src/core/HibpOffline.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/HibpOffline.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,36 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_HIBPOFFLINE_H +-#define KEEPASSXC_HIBPOFFLINE_H +- +-#include +-#include +-#include +- +-class Database; +-class Entry; +- +-namespace HibpOffline +-{ +- bool report(QSharedPointer db, +- QIODevice& hibpInput, +- QList>& findings, +- QString* error); +-} +- +-#endif // KEEPASSXC_HIBPOFFLINE_H +diff -urNr keepassxc-2.6.4-orig/src/core/IconDownloader.cpp keepassxc-2.6.4-patched/src/core/IconDownloader.cpp +--- keepassxc-2.6.4-orig/src/core/IconDownloader.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/IconDownloader.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,239 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "IconDownloader.h" +-#include "core/Config.h" +-#include "core/NetworkManager.h" +- +-#include +-#include +-#include +- +-#define MAX_REDIRECTS 5 +- +-IconDownloader::IconDownloader(QObject* parent) +- : QObject(parent) +- , m_reply(nullptr) +- , m_redirects(0) +-{ +- m_timeout.setSingleShot(true); +- connect(&m_timeout, SIGNAL(timeout()), SLOT(abortDownload())); +-} +- +-IconDownloader::~IconDownloader() +-{ +- abortDownload(); +-} +- +-namespace +-{ +- // Try to get the 2nd level domain of the host part of a QUrl. For example, +- // "foo.bar.example.com" would become "example.com", and "foo.bar.example.co.uk" +- // would become "example.co.uk". +- QString getSecondLevelDomain(const QUrl& url) +- { +- QString fqdn = url.host(); +- fqdn.truncate(fqdn.length() - url.topLevelDomain().length()); +- QStringList parts = fqdn.split('.'); +- QString newdom = parts.takeLast() + url.topLevelDomain(); +- return newdom; +- } +- +- QUrl convertVariantToUrl(const QVariant& var) +- { +- QUrl url; +- if (var.canConvert()) { +- url = var.toUrl(); +- } +- return url; +- } +- +- QUrl getRedirectTarget(QNetworkReply* reply) +- { +- QVariant var = reply->attribute(QNetworkRequest::RedirectionTargetAttribute); +- QUrl url = convertVariantToUrl(var); +- return url; +- } +-} // namespace +- +-void IconDownloader::setUrl(const QString& entryUrl) +-{ +- m_url = entryUrl; +- QUrl url(m_url); +- if (!url.isValid()) { +- return; +- } +- +- m_redirects = 0; +- m_urlsToTry.clear(); +- +- if (url.scheme().isEmpty()) { +- url.setUrl(QString("https://%1").arg(url.toString())); +- } +- +- QString fullyQualifiedDomain = url.host(); +- +- // Determine if host portion of URL is an IP address by resolving it and +- // searching for a match with the returned address(es). +- bool hostIsIp = false; +- QList hostAddressess = QHostInfo::fromName(fullyQualifiedDomain).addresses(); +- for (const auto& addr : hostAddressess) { +- if (addr.toString() == fullyQualifiedDomain) { +- hostIsIp = true; +- } +- } +- +- // Determine the second-level domain, if available +- QString secondLevelDomain; +- if (!hostIsIp) { +- secondLevelDomain = getSecondLevelDomain(m_url); +- } +- +- // Start with the "fallback" url (if enabled) to try to get the best favicon +- if (config()->get(Config::Security_IconDownloadFallback).toBool()) { +- QUrl fallbackUrl = QUrl("https://icons.duckduckgo.com"); +- fallbackUrl.setPath("/ip3/" + QUrl::toPercentEncoding(fullyQualifiedDomain) + ".ico"); +- m_urlsToTry.append(fallbackUrl); +- +- // Also try a direct pull of the second-level domain (if possible) +- if (!hostIsIp && fullyQualifiedDomain != secondLevelDomain) { +- fallbackUrl.setPath("/ip3/" + QUrl::toPercentEncoding(secondLevelDomain) + ".ico"); +- m_urlsToTry.append(fallbackUrl); +- } +- } +- +- // Add a direct pull of the website's own favicon.ico file +- m_urlsToTry.append(QUrl(url.scheme() + "://" + fullyQualifiedDomain + "/favicon.ico")); +- +- // Also try a direct pull of the second-level domain (if possible) +- if (!hostIsIp && fullyQualifiedDomain != secondLevelDomain) { +- m_urlsToTry.append(QUrl(url.scheme() + "://" + secondLevelDomain + "/favicon.ico")); +- } +-} +- +-void IconDownloader::download() +-{ +- if (m_urlsToTry.isEmpty()) { +- return; +- } +- +- if (!m_timeout.isActive()) { +- int timeout = config()->get(Config::FaviconDownloadTimeout).toInt(); +- m_timeout.start(timeout * 1000); +- +- // Use the first URL to start the download process +- // If a favicon is not found, the next URL will be tried +- fetchFavicon(m_urlsToTry.takeFirst()); +- } +-} +- +-void IconDownloader::abortDownload() +-{ +- if (m_reply) { +- m_reply->abort(); +- } +-} +- +-void IconDownloader::fetchFavicon(const QUrl& url) +-{ +- m_bytesReceived.clear(); +- m_fetchUrl = url; +- +- QNetworkRequest request(url); +- m_reply = getNetMgr()->get(request); +- +- connect(m_reply, &QNetworkReply::finished, this, &IconDownloader::fetchFinished); +- connect(m_reply, &QIODevice::readyRead, this, &IconDownloader::fetchReadyRead); +-} +- +-void IconDownloader::fetchReadyRead() +-{ +- m_bytesReceived += m_reply->readAll(); +-} +- +-void IconDownloader::fetchFinished() +-{ +- QImage image; +- QString url = m_url; +- +- bool error = (m_reply->error() != QNetworkReply::NoError); +- QUrl redirectTarget = getRedirectTarget(m_reply); +- +- m_reply->deleteLater(); +- m_reply = nullptr; +- +- if (!error) { +- if (redirectTarget.isValid()) { +- // Redirected, we need to follow it, or fall through if we have +- // done too many redirects already. +- if (m_redirects < MAX_REDIRECTS) { +- m_redirects++; +- if (redirectTarget.isRelative()) { +- redirectTarget = m_fetchUrl.resolved(redirectTarget); +- } +- m_urlsToTry.prepend(redirectTarget); +- } +- } else { +- // No redirect, and we theoretically have some icon data now. +- image = parseImage(m_bytesReceived); +- } +- } +- +- if (!image.isNull()) { +- // Valid icon received +- m_timeout.stop(); +- emit finished(url, image); +- } else if (!m_urlsToTry.empty()) { +- // Try the next url +- m_redirects = 0; +- fetchFavicon(m_urlsToTry.takeFirst()); +- } else { +- // No icon found +- m_timeout.stop(); +- emit finished(url, image); +- } +-} +- +-/** +- * Parse fetched image bytes. +- * +- * Parses the given byte array into a QImage. Unlike QImage::loadFromData(), this method +- * tries to extract the highest resolution image from .ICO files. +- * +- * @param imageBytes raw image bytes +- * @return parsed image +- */ +-QImage IconDownloader::parseImage(QByteArray& imageBytes) const +-{ +- QBuffer buff(&imageBytes); +- buff.open(QIODevice::ReadOnly); +- QImageReader reader(&buff); +- +- if (reader.imageCount() <= 0) { +- return reader.read(); +- } +- +- QImage img; +- for (int i = 0; i < reader.imageCount(); ++i) { +- if (img.isNull() || reader.size().width() > img.size().width()) { +- img = reader.read(); +- } +- reader.jumpToNextImage(); +- } +- +- return img; +-} +diff -urNr keepassxc-2.6.4-orig/src/core/IconDownloader.h keepassxc-2.6.4-patched/src/core/IconDownloader.h +--- keepassxc-2.6.4-orig/src/core/IconDownloader.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/IconDownloader.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,64 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_ICONDOWNLOADER_H +-#define KEEPASSXC_ICONDOWNLOADER_H +- +-#include +-#include +-#include +-#include +- +-#include "core/Global.h" +- +-class QNetworkReply; +- +-class IconDownloader : public QObject +-{ +- Q_OBJECT +- +-public: +- explicit IconDownloader(QObject* parent = nullptr); +- ~IconDownloader() override; +- +- void setUrl(const QString& entryUrl); +- void download(); +- +-signals: +- void finished(const QString& entryUrl, const QImage& image); +- +-public slots: +- void abortDownload(); +- +-private slots: +- void fetchFinished(); +- void fetchReadyRead(); +- +-private: +- void fetchFavicon(const QUrl& url); +- QImage parseImage(QByteArray& imageBytes) const; +- +- QString m_url; +- QUrl m_fetchUrl; +- QList m_urlsToTry; +- QByteArray m_bytesReceived; +- QNetworkReply* m_reply; +- QTimer m_timeout; +- int m_redirects; +-}; +- +-#endif // KEEPASSXC_ICONDOWNLOADER_H +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/src/core/InactivityTimer.cpp keepassxc-2.6.4-patched/src/core/InactivityTimer.cpp +--- keepassxc-2.6.4-orig/src/core/InactivityTimer.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/InactivityTimer.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,81 +0,0 @@ +-/* +- * Copyright (C) 2014 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "InactivityTimer.h" +- +-#include +-#include +- +-InactivityTimer::InactivityTimer(QObject* parent) +- : QObject(parent) +- , m_timer(new QTimer(this)) +- , m_active(false) +-{ +- m_timer->setSingleShot(true); +- connect(m_timer, SIGNAL(timeout()), SLOT(timeout())); +-} +- +-void InactivityTimer::setInactivityTimeout(int inactivityTimeout) +-{ +- Q_ASSERT(inactivityTimeout > 0); +- +- m_timer->setInterval(inactivityTimeout); +-} +- +-void InactivityTimer::activate() +-{ +- if (!m_active) { +- qApp->installEventFilter(this); +- } +- m_active = true; +- m_timer->start(); +-} +- +-void InactivityTimer::deactivate() +-{ +- qApp->removeEventFilter(this); +- m_active = false; +- m_timer->stop(); +-} +- +-bool InactivityTimer::eventFilter(QObject* watched, QEvent* event) +-{ +- const QEvent::Type type = event->type(); +- // clang-format off +- if ((type >= QEvent::MouseButtonPress && type <= QEvent::KeyRelease) +- || (type >= QEvent::HoverEnter && type <= QEvent::HoverMove) +- || (type == QEvent::Wheel)) { +- m_timer->start(); +- } +- // clang-format on +- +- return QObject::eventFilter(watched, event); +-} +- +-void InactivityTimer::timeout() +-{ +- // make sure we don't emit the signal a second time while it's still processed +- if (!m_emitMutx.tryLock()) { +- return; +- } +- +- if (m_active && !m_timer->isActive()) { +- emit inactivityDetected(); +- } +- +- m_emitMutx.unlock(); +-} +diff -urNr keepassxc-2.6.4-orig/src/core/InactivityTimer.h keepassxc-2.6.4-patched/src/core/InactivityTimer.h +--- keepassxc-2.6.4-orig/src/core/InactivityTimer.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/InactivityTimer.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,51 +0,0 @@ +-/* +- * Copyright (C) 2014 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_INACTIVITYTIMER_H +-#define KEEPASSX_INACTIVITYTIMER_H +- +-#include +-#include +- +-class QTimer; +- +-class InactivityTimer : public QObject +-{ +- Q_OBJECT +- +-public: +- explicit InactivityTimer(QObject* parent = nullptr); +- void setInactivityTimeout(int inactivityTimeout); +- void activate(); +- void deactivate(); +- +-signals: +- void inactivityDetected(); +- +-protected: +- bool eventFilter(QObject* watched, QEvent* event); +- +-private slots: +- void timeout(); +- +-private: +- QTimer* m_timer; +- bool m_active; +- QMutex m_emitMutx; +-}; +- +-#endif // KEEPASSX_INACTIVITYTIMER_H +diff -urNr keepassxc-2.6.4-orig/src/core/ListDeleter.h keepassxc-2.6.4-patched/src/core/ListDeleter.h +--- keepassxc-2.6.4-orig/src/core/ListDeleter.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/ListDeleter.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,39 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_LISTDELETER_H +-#define KEEPASSX_LISTDELETER_H +- +-#include +- +-template class ListDeleter +-{ +-public: +- inline explicit ListDeleter(QList* list) +- : m_list(list) +- { +- } +- inline ~ListDeleter() +- { +- qDeleteAll(*m_list); +- } +- +-private: +- QList* m_list; +-}; +- +-#endif // KEEPASSX_LISTDELETER_H +diff -urNr keepassxc-2.6.4-orig/src/core/MacPasteboard.cpp keepassxc-2.6.4-patched/src/core/MacPasteboard.cpp +--- keepassxc-2.6.4-orig/src/core/MacPasteboard.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/MacPasteboard.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,99 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "MacPasteboard.h" +- +-QString MacPasteboard::convertorName() +-{ +- return QLatin1String("MacPasteboard"); +-} +- +-QString MacPasteboard::flavorFor(const QString& mimetype) +-{ +- if (mimetype == QLatin1String("text/plain")) { +- return QLatin1String("public.utf8-plain-text"); +- } else if (mimetype == QLatin1String("application/x-nspasteboard-concealed-type")) { +- return QLatin1String("org.nspasteboard.ConcealedType"); +- } +- +- int i = mimetype.indexOf(QLatin1String("charset=")); +- +- if (i >= 0) { +- QString cs(mimetype.mid(i + 8).toLower()); +- i = cs.indexOf(QLatin1Char(';')); +- +- if (i >= 0) { +- cs = cs.left(i); +- } +- +- if (cs == QLatin1String("system")) { +- return QLatin1String("public.utf8-plain-text"); +- } else if (cs == QLatin1String("iso-10646-ucs-2") || cs == QLatin1String("utf16")) { +- return QLatin1String("public.utf16-plain-text"); +- } +- } +- return QString(); +-} +- +-QString MacPasteboard::mimeFor(QString flavor) +-{ +- if (flavor == QLatin1String("public.utf8-plain-text")) +- return QLatin1String("text/plain"); +- if (flavor == QLatin1String("org.nspasteboard.ConcealedType")) +- return QLatin1String("application/x-nspasteboard-concealed-type"); +- if (flavor == QLatin1String("public.utf16-plain-text")) +- return QLatin1String("text/plain;charset=utf16"); +- return QString(); +-} +- +-bool MacPasteboard::canConvert(const QString& mimetype, QString flavor) +-{ +- Q_UNUSED(mimetype); +- Q_UNUSED(flavor); +- return true; +-} +- +-QVariant MacPasteboard::convertToMime(const QString& mimetype, QList data, QString flavor) +-{ +- if (data.count() > 1) +- qWarning("QMime::convertToMime: Cannot handle multiple member data"); +- const QByteArray& firstData = data.first(); +- QVariant ret; +- if (flavor == QLatin1String("public.utf8-plain-text")) { +- ret = QString::fromUtf8(firstData); +- } else if (flavor == QLatin1String("org.nspasteboard.ConcealedType")) { +- ret = QString::fromUtf8(firstData); +- } else if (flavor == QLatin1String("public.utf16-plain-text")) { +- ret = QTextCodec::codecForName("UTF-16")->toUnicode(firstData); +- } else { +- qWarning("QMime::convertToMime: unhandled mimetype: %s", qPrintable(mimetype)); +- } +- return ret; +-} +- +-QList MacPasteboard::convertFromMime(const QString&, QVariant data, QString flavor) +-{ +- QList ret; +- QString string = data.toString(); +- if (flavor == QLatin1String("public.utf8-plain-text")) +- ret.append(string.toUtf8()); +- else if (flavor == QLatin1String("org.nspasteboard.ConcealedType")) +- ret.append(string.toUtf8()); +- else if (flavor == QLatin1String("public.utf16-plain-text")) +- ret.append(QTextCodec::codecForName("UTF-16")->fromUnicode(string)); +- return ret; +-} +diff -urNr keepassxc-2.6.4-orig/src/core/MacPasteboard.h keepassxc-2.6.4-patched/src/core/MacPasteboard.h +--- keepassxc-2.6.4-orig/src/core/MacPasteboard.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/MacPasteboard.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,41 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_MACPASTEBOARD_H +-#define KEEPASSXC_MACPASTEBOARD_H +- +-#include +-#include +-#include +- +-class MacPasteboard : public QObject, public QMacPasteboardMime +-{ +-public: +- explicit MacPasteboard() +- : QMacPasteboardMime(MIME_ALL) +- { +- } +- +- QString convertorName() override; +- bool canConvert(const QString& mime, QString flav) override; +- QString mimeFor(QString flav) override; +- QString flavorFor(const QString& mime) override; +- QVariant convertToMime(const QString& mime, QList data, QString flav) override; +- QList convertFromMime(const QString& mime, QVariant data, QString flav) override; +-}; +- +-#endif // KEEPASSXC_MACPASTEBOARD_H +diff -urNr keepassxc-2.6.4-orig/src/core/Merger.cpp keepassxc-2.6.4-patched/src/core/Merger.cpp +--- keepassxc-2.6.4-orig/src/core/Merger.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/Merger.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,661 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "Merger.h" +- +-#include "core/Clock.h" +-#include "core/Database.h" +-#include "core/Entry.h" +-#include "core/Metadata.h" +- +-Merger::Merger(const Database* sourceDb, Database* targetDb) +- : m_mode(Group::Default) +-{ +- if (!sourceDb || !targetDb) { +- Q_ASSERT(sourceDb && targetDb); +- return; +- } +- +- m_context = MergeContext{ +- sourceDb, targetDb, sourceDb->rootGroup(), targetDb->rootGroup(), sourceDb->rootGroup(), targetDb->rootGroup()}; +-} +- +-Merger::Merger(const Group* sourceGroup, Group* targetGroup) +- : m_mode(Group::Default) +-{ +- if (!sourceGroup || !targetGroup) { +- Q_ASSERT(sourceGroup && targetGroup); +- return; +- } +- +- m_context = MergeContext{sourceGroup->database(), +- targetGroup->database(), +- sourceGroup->database()->rootGroup(), +- targetGroup->database()->rootGroup(), +- sourceGroup, +- targetGroup}; +-} +- +-void Merger::setForcedMergeMode(Group::MergeMode mode) +-{ +- m_mode = mode; +-} +- +-void Merger::resetForcedMergeMode() +-{ +- m_mode = Group::Default; +-} +- +-QStringList Merger::merge() +-{ +- // Order of merge steps is important - it is possible that we +- // create some items before deleting them afterwards +- ChangeList changes; +- changes << mergeGroup(m_context); +- changes << mergeDeletions(m_context); +- changes << mergeMetadata(m_context); +- +- // qDebug("Merged %s", qPrintable(changes.join("\n\t"))); +- +- // At this point we have a list of changes we may want to show the user +- if (!changes.isEmpty()) { +- m_context.m_targetDb->markAsModified(); +- } +- return changes; +-} +- +-Merger::ChangeList Merger::mergeGroup(const MergeContext& context) +-{ +- ChangeList changes; +- // merge entries +- const QList sourceEntries = context.m_sourceGroup->entries(); +- for (Entry* sourceEntry : sourceEntries) { +- Entry* targetEntry = context.m_targetRootGroup->findEntryByUuid(sourceEntry->uuid()); +- if (!targetEntry) { +- changes << tr("Creating missing %1 [%2]").arg(sourceEntry->title(), sourceEntry->uuidToHex()); +- // This entry does not exist at all. Create it. +- targetEntry = sourceEntry->clone(Entry::CloneIncludeHistory); +- moveEntry(targetEntry, context.m_targetGroup); +- } else { +- // Entry is already present in the database. Update it. +- const bool locationChanged = +- targetEntry->timeInfo().locationChanged() < sourceEntry->timeInfo().locationChanged(); +- if (locationChanged && targetEntry->group() != context.m_targetGroup) { +- changes << tr("Relocating %1 [%2]").arg(sourceEntry->title(), sourceEntry->uuidToHex()); +- moveEntry(targetEntry, context.m_targetGroup); +- } +- changes << resolveEntryConflict(context, sourceEntry, targetEntry); +- } +- } +- +- // merge groups recursively +- const QList sourceChildGroups = context.m_sourceGroup->children(); +- for (Group* sourceChildGroup : sourceChildGroups) { +- Group* targetChildGroup = context.m_targetRootGroup->findGroupByUuid(sourceChildGroup->uuid()); +- if (!targetChildGroup) { +- changes << tr("Creating missing %1 [%2]").arg(sourceChildGroup->name(), sourceChildGroup->uuidToHex()); +- targetChildGroup = sourceChildGroup->clone(Entry::CloneNoFlags, Group::CloneNoFlags); +- moveGroup(targetChildGroup, context.m_targetGroup); +- TimeInfo timeinfo = targetChildGroup->timeInfo(); +- timeinfo.setLocationChanged(sourceChildGroup->timeInfo().locationChanged()); +- targetChildGroup->setTimeInfo(timeinfo); +- } else { +- bool locationChanged = +- targetChildGroup->timeInfo().locationChanged() < sourceChildGroup->timeInfo().locationChanged(); +- if (locationChanged && targetChildGroup->parent() != context.m_targetGroup) { +- changes << tr("Relocating %1 [%2]").arg(sourceChildGroup->name(), sourceChildGroup->uuidToHex()); +- moveGroup(targetChildGroup, context.m_targetGroup); +- TimeInfo timeinfo = targetChildGroup->timeInfo(); +- timeinfo.setLocationChanged(sourceChildGroup->timeInfo().locationChanged()); +- targetChildGroup->setTimeInfo(timeinfo); +- } +- changes << resolveGroupConflict(context, sourceChildGroup, targetChildGroup); +- } +- MergeContext subcontext{context.m_sourceDb, +- context.m_targetDb, +- context.m_sourceRootGroup, +- context.m_targetRootGroup, +- sourceChildGroup, +- targetChildGroup}; +- changes << mergeGroup(subcontext); +- } +- return changes; +-} +- +-Merger::ChangeList +-Merger::resolveGroupConflict(const MergeContext& context, const Group* sourceChildGroup, Group* targetChildGroup) +-{ +- Q_UNUSED(context); +- ChangeList changes; +- +- const QDateTime timeExisting = targetChildGroup->timeInfo().lastModificationTime(); +- const QDateTime timeOther = sourceChildGroup->timeInfo().lastModificationTime(); +- +- // only if the other group is newer, update the existing one. +- if (timeExisting < timeOther) { +- changes << tr("Overwriting %1 [%2]").arg(sourceChildGroup->name(), sourceChildGroup->uuidToHex()); +- targetChildGroup->setName(sourceChildGroup->name()); +- targetChildGroup->setNotes(sourceChildGroup->notes()); +- if (sourceChildGroup->iconNumber() == 0) { +- targetChildGroup->setIcon(sourceChildGroup->iconUuid()); +- } else { +- targetChildGroup->setIcon(sourceChildGroup->iconNumber()); +- } +- targetChildGroup->setExpiryTime(sourceChildGroup->timeInfo().expiryTime()); +- TimeInfo timeInfo = targetChildGroup->timeInfo(); +- timeInfo.setLastModificationTime(timeOther); +- targetChildGroup->setTimeInfo(timeInfo); +- } +- return changes; +-} +- +-bool Merger::markOlderEntry(Entry* entry) +-{ +- entry->attributes()->set( +- "merged", tr("older entry merged from database \"%1\"").arg(entry->group()->database()->metadata()->name())); +- return true; +-} +- +-void Merger::moveEntry(Entry* entry, Group* targetGroup) +-{ +- Q_ASSERT(entry); +- Group* sourceGroup = entry->group(); +- if (sourceGroup == targetGroup) { +- return; +- } +- const bool sourceGroupUpdateTimeInfo = sourceGroup ? sourceGroup->canUpdateTimeinfo() : false; +- if (sourceGroup) { +- sourceGroup->setUpdateTimeinfo(false); +- } +- const bool targetGroupUpdateTimeInfo = targetGroup ? targetGroup->canUpdateTimeinfo() : false; +- if (targetGroup) { +- targetGroup->setUpdateTimeinfo(false); +- } +- const bool entryUpdateTimeInfo = entry->canUpdateTimeinfo(); +- entry->setUpdateTimeinfo(false); +- +- entry->setGroup(targetGroup); +- +- entry->setUpdateTimeinfo(entryUpdateTimeInfo); +- if (targetGroup) { +- targetGroup->setUpdateTimeinfo(targetGroupUpdateTimeInfo); +- } +- if (sourceGroup) { +- sourceGroup->setUpdateTimeinfo(sourceGroupUpdateTimeInfo); +- } +-} +- +-void Merger::moveGroup(Group* group, Group* targetGroup) +-{ +- Q_ASSERT(group); +- Group* sourceGroup = group->parentGroup(); +- if (sourceGroup == targetGroup) { +- return; +- } +- const bool sourceGroupUpdateTimeInfo = sourceGroup ? sourceGroup->canUpdateTimeinfo() : false; +- if (sourceGroup) { +- sourceGroup->setUpdateTimeinfo(false); +- } +- const bool targetGroupUpdateTimeInfo = targetGroup ? targetGroup->canUpdateTimeinfo() : false; +- if (targetGroup) { +- targetGroup->setUpdateTimeinfo(false); +- } +- const bool groupUpdateTimeInfo = group->canUpdateTimeinfo(); +- group->setUpdateTimeinfo(false); +- +- group->setParent(targetGroup); +- +- group->setUpdateTimeinfo(groupUpdateTimeInfo); +- if (targetGroup) { +- targetGroup->setUpdateTimeinfo(targetGroupUpdateTimeInfo); +- } +- if (sourceGroup) { +- sourceGroup->setUpdateTimeinfo(sourceGroupUpdateTimeInfo); +- } +-} +- +-void Merger::eraseEntry(Entry* entry) +-{ +- Database* database = entry->database(); +- // most simple method to remove an item from DeletedObjects :( +- const QList deletions = database->deletedObjects(); +- Group* parentGroup = entry->group(); +- const bool groupUpdateTimeInfo = parentGroup ? parentGroup->canUpdateTimeinfo() : false; +- if (parentGroup) { +- parentGroup->setUpdateTimeinfo(false); +- } +- delete entry; +- if (parentGroup) { +- parentGroup->setUpdateTimeinfo(groupUpdateTimeInfo); +- } +- database->setDeletedObjects(deletions); +-} +- +-void Merger::eraseGroup(Group* group) +-{ +- Database* database = group->database(); +- // most simple method to remove an item from DeletedObjects :( +- const QList deletions = database->deletedObjects(); +- Group* parentGroup = group->parentGroup(); +- const bool groupUpdateTimeInfo = parentGroup ? parentGroup->canUpdateTimeinfo() : false; +- if (parentGroup) { +- parentGroup->setUpdateTimeinfo(false); +- } +- delete group; +- if (parentGroup) { +- parentGroup->setUpdateTimeinfo(groupUpdateTimeInfo); +- } +- database->setDeletedObjects(deletions); +-} +- +-Merger::ChangeList +-Merger::resolveEntryConflict_Duplicate(const MergeContext& context, const Entry* sourceEntry, Entry* targetEntry) +-{ +- ChangeList changes; +- const int comparison = compare(targetEntry->timeInfo().lastModificationTime(), +- sourceEntry->timeInfo().lastModificationTime(), +- CompareItemIgnoreMilliseconds); +- // if one entry is newer, create a clone and add it to the group +- if (comparison < 0) { +- Entry* clonedEntry = sourceEntry->clone(Entry::CloneNewUuid | Entry::CloneIncludeHistory); +- moveEntry(clonedEntry, context.m_targetGroup); +- markOlderEntry(targetEntry); +- changes << tr("Adding backup for older target %1 [%2]").arg(targetEntry->title(), targetEntry->uuidToHex()); +- } else if (comparison > 0) { +- Entry* clonedEntry = sourceEntry->clone(Entry::CloneNewUuid | Entry::CloneIncludeHistory); +- moveEntry(clonedEntry, context.m_targetGroup); +- markOlderEntry(clonedEntry); +- changes << tr("Adding backup for older source %1 [%2]").arg(sourceEntry->title(), sourceEntry->uuidToHex()); +- } +- return changes; +-} +- +-Merger::ChangeList +-Merger::resolveEntryConflict_KeepLocal(const MergeContext& context, const Entry* sourceEntry, Entry* targetEntry) +-{ +- Q_UNUSED(context); +- ChangeList changes; +- const int comparison = compare(targetEntry->timeInfo().lastModificationTime(), +- sourceEntry->timeInfo().lastModificationTime(), +- CompareItemIgnoreMilliseconds); +- if (comparison < 0) { +- // we need to make our older entry "newer" than the new entry - therefore +- // we just create a new history entry without any changes - this preserves +- // the old state before merging the new state and updates the timestamp +- // the merge takes care, that the newer entry is sorted inbetween both entries +- // this type of merge changes the database timestamp since reapplying the +- // old entry is an active change of the database! +- changes << tr("Reapplying older target entry on top of newer source %1 [%2]") +- .arg(targetEntry->title(), targetEntry->uuidToHex()); +- Entry* agedTargetEntry = targetEntry->clone(Entry::CloneNoFlags); +- targetEntry->addHistoryItem(agedTargetEntry); +- } +- return changes; +-} +- +-Merger::ChangeList +-Merger::resolveEntryConflict_KeepRemote(const MergeContext& context, const Entry* sourceEntry, Entry* targetEntry) +-{ +- Q_UNUSED(context); +- ChangeList changes; +- const int comparison = compare(targetEntry->timeInfo().lastModificationTime(), +- sourceEntry->timeInfo().lastModificationTime(), +- CompareItemIgnoreMilliseconds); +- if (comparison > 0) { +- // we need to make our older entry "newer" than the new entry - therefore +- // we just create a new history entry without any changes - this preserves +- // the old state before merging the new state and updates the timestamp +- // the merge takes care, that the newer entry is sorted inbetween both entries +- // this type of merge changes the database timestamp since reapplying the +- // old entry is an active change of the database! +- changes << tr("Reapplying older source entry on top of newer target %1 [%2]") +- .arg(targetEntry->title(), targetEntry->uuidToHex()); +- targetEntry->beginUpdate(); +- targetEntry->copyDataFrom(sourceEntry); +- targetEntry->endUpdate(); +- // History item is created by endUpdate since we should have changes +- } +- return changes; +-} +- +-Merger::ChangeList Merger::resolveEntryConflict_MergeHistories(const MergeContext& context, +- const Entry* sourceEntry, +- Entry* targetEntry, +- Group::MergeMode mergeMethod) +-{ +- Q_UNUSED(context); +- +- ChangeList changes; +- const int comparison = compare(targetEntry->timeInfo().lastModificationTime(), +- sourceEntry->timeInfo().lastModificationTime(), +- CompareItemIgnoreMilliseconds); +- if (comparison < 0) { +- Group* currentGroup = targetEntry->group(); +- Entry* clonedEntry = sourceEntry->clone(Entry::CloneIncludeHistory); +- qDebug("Merge %s/%s with alien on top under %s", +- qPrintable(targetEntry->title()), +- qPrintable(sourceEntry->title()), +- qPrintable(currentGroup->name())); +- changes << tr("Synchronizing from newer source %1 [%2]").arg(targetEntry->title(), targetEntry->uuidToHex()); +- moveEntry(clonedEntry, currentGroup); +- mergeHistory(targetEntry, clonedEntry, mergeMethod); +- eraseEntry(targetEntry); +- } else { +- qDebug("Merge %s/%s with local on top/under %s", +- qPrintable(targetEntry->title()), +- qPrintable(sourceEntry->title()), +- qPrintable(targetEntry->group()->name())); +- const bool changed = mergeHistory(sourceEntry, targetEntry, mergeMethod); +- if (changed) { +- changes +- << tr("Synchronizing from older source %1 [%2]").arg(targetEntry->title(), targetEntry->uuidToHex()); +- } +- } +- return changes; +-} +- +-Merger::ChangeList +-Merger::resolveEntryConflict(const MergeContext& context, const Entry* sourceEntry, Entry* targetEntry) +-{ +- ChangeList changes; +- // We need to cut off the milliseconds since the persistent format only supports times down to seconds +- // so when we import data from a remote source, it may represent the (or even some msec newer) data +- // which may be discarded due to higher runtime precision +- +- Group::MergeMode mergeMode = m_mode == Group::Default ? context.m_targetGroup->mergeMode() : m_mode; +- switch (mergeMode) { +- case Group::Duplicate: +- changes << resolveEntryConflict_Duplicate(context, sourceEntry, targetEntry); +- break; +- +- case Group::KeepLocal: +- changes << resolveEntryConflict_KeepLocal(context, sourceEntry, targetEntry); +- changes << resolveEntryConflict_MergeHistories(context, sourceEntry, targetEntry, mergeMode); +- break; +- +- case Group::KeepRemote: +- changes << resolveEntryConflict_KeepRemote(context, sourceEntry, targetEntry); +- changes << resolveEntryConflict_MergeHistories(context, sourceEntry, targetEntry, mergeMode); +- break; +- +- case Group::Synchronize: +- case Group::KeepNewer: +- // nothing special to do since resolveEntryConflictMergeHistories takes care to use the newest entry +- changes << resolveEntryConflict_MergeHistories(context, sourceEntry, targetEntry, mergeMode); +- break; +- +- default: +- // do nothing +- break; +- } +- return changes; +-} +- +-bool Merger::mergeHistory(const Entry* sourceEntry, Entry* targetEntry, Group::MergeMode mergeMethod) +-{ +- Q_UNUSED(mergeMethod); +- const auto targetHistoryItems = targetEntry->historyItems(); +- const auto sourceHistoryItems = sourceEntry->historyItems(); +- const int comparison = compare(sourceEntry->timeInfo().lastModificationTime(), +- targetEntry->timeInfo().lastModificationTime(), +- CompareItemIgnoreMilliseconds); +- const bool preferLocal = mergeMethod == Group::KeepLocal || comparison < 0; +- const bool preferRemote = mergeMethod == Group::KeepRemote || comparison > 0; +- +- QMap merged; +- for (Entry* historyItem : targetHistoryItems) { +- const QDateTime modificationTime = Clock::serialized(historyItem->timeInfo().lastModificationTime()); +- if (merged.contains(modificationTime) +- && !merged[modificationTime]->equals(historyItem, CompareItemIgnoreMilliseconds)) { +- ::qWarning("Inconsistent history entry of %s[%s] at %s contains conflicting changes - conflict resolution " +- "may lose data!", +- qPrintable(sourceEntry->title()), +- qPrintable(sourceEntry->uuidToHex()), +- qPrintable(modificationTime.toString("yyyy-MM-dd HH-mm-ss-zzz"))); +- } +- merged[modificationTime] = historyItem->clone(Entry::CloneNoFlags); +- } +- for (Entry* historyItem : sourceHistoryItems) { +- // Items with same modification-time changes will be regarded as same (like KeePass2) +- const QDateTime modificationTime = Clock::serialized(historyItem->timeInfo().lastModificationTime()); +- if (merged.contains(modificationTime) +- && !merged[modificationTime]->equals(historyItem, CompareItemIgnoreMilliseconds)) { +- ::qWarning( +- "History entry of %s[%s] at %s contains conflicting changes - conflict resolution may lose data!", +- qPrintable(sourceEntry->title()), +- qPrintable(sourceEntry->uuidToHex()), +- qPrintable(modificationTime.toString("yyyy-MM-dd HH-mm-ss-zzz"))); +- } +- if (preferRemote && merged.contains(modificationTime)) { +- // forcefully apply the remote history item +- delete merged.take(modificationTime); +- } +- if (!merged.contains(modificationTime)) { +- merged[modificationTime] = historyItem->clone(Entry::CloneNoFlags); +- } +- } +- +- const QDateTime targetModificationTime = Clock::serialized(targetEntry->timeInfo().lastModificationTime()); +- const QDateTime sourceModificationTime = Clock::serialized(sourceEntry->timeInfo().lastModificationTime()); +- if (targetModificationTime == sourceModificationTime +- && !targetEntry->equals(sourceEntry, +- CompareItemIgnoreMilliseconds | CompareItemIgnoreHistory | CompareItemIgnoreLocation)) { +- ::qWarning("Entry of %s[%s] contains conflicting changes - conflict resolution may lose data!", +- qPrintable(sourceEntry->title()), +- qPrintable(sourceEntry->uuidToHex())); +- } +- +- if (targetModificationTime < sourceModificationTime) { +- if (preferLocal && merged.contains(targetModificationTime)) { +- // forcefully apply the local history item +- delete merged.take(targetModificationTime); +- } +- if (!merged.contains(targetModificationTime)) { +- merged[targetModificationTime] = targetEntry->clone(Entry::CloneNoFlags); +- } +- } else if (targetModificationTime > sourceModificationTime) { +- if (preferRemote && !merged.contains(sourceModificationTime)) { +- // forcefully apply the remote history item +- delete merged.take(sourceModificationTime); +- } +- if (!merged.contains(sourceModificationTime)) { +- merged[sourceModificationTime] = sourceEntry->clone(Entry::CloneNoFlags); +- } +- } +- +- bool changed = false; +- const int maxItems = targetEntry->database()->metadata()->historyMaxItems(); +- const auto updatedHistoryItems = merged.values(); +- for (int i = 0; i < maxItems; ++i) { +- const Entry* oldEntry = targetHistoryItems.value(targetHistoryItems.count() - i); +- const Entry* newEntry = updatedHistoryItems.value(updatedHistoryItems.count() - i); +- if (!oldEntry && !newEntry) { +- continue; +- } +- if (oldEntry && newEntry && oldEntry->equals(newEntry, CompareItemIgnoreMilliseconds)) { +- continue; +- } +- changed = true; +- break; +- } +- if (!changed) { +- qDeleteAll(updatedHistoryItems); +- return false; +- } +- // We need to prevent any modification to the database since every change should be tracked either +- // in a clone history item or in the Entry itself +- const TimeInfo timeInfo = targetEntry->timeInfo(); +- const bool blockedSignals = targetEntry->blockSignals(true); +- bool updateTimeInfo = targetEntry->canUpdateTimeinfo(); +- targetEntry->setUpdateTimeinfo(false); +- targetEntry->removeHistoryItems(targetHistoryItems); +- for (Entry* historyItem : merged) { +- Q_ASSERT(!historyItem->parent()); +- targetEntry->addHistoryItem(historyItem); +- } +- targetEntry->truncateHistory(); +- targetEntry->blockSignals(blockedSignals); +- targetEntry->setUpdateTimeinfo(updateTimeInfo); +- Q_ASSERT(timeInfo == targetEntry->timeInfo()); +- Q_UNUSED(timeInfo); +- return true; +-} +- +-Merger::ChangeList Merger::mergeDeletions(const MergeContext& context) +-{ +- ChangeList changes; +- Group::MergeMode mergeMode = m_mode == Group::Default ? context.m_targetGroup->mergeMode() : m_mode; +- if (mergeMode != Group::Synchronize) { +- // no deletions are applied for any other strategy! +- return changes; +- } +- +- const auto targetDeletions = context.m_targetDb->deletedObjects(); +- const auto sourceDeletions = context.m_sourceDb->deletedObjects(); +- +- QList deletions; +- QMap mergedDeletions; +- QList entries; +- QList groups; +- +- for (const auto& object : (targetDeletions + sourceDeletions)) { +- if (!mergedDeletions.contains(object.uuid)) { +- mergedDeletions[object.uuid] = object; +- +- auto* entry = context.m_targetRootGroup->findEntryByUuid(object.uuid); +- if (entry) { +- entries << entry; +- continue; +- } +- auto* group = context.m_targetRootGroup->findGroupByUuid(object.uuid); +- if (group) { +- groups << group; +- continue; +- } +- deletions << object; +- continue; +- } +- if (mergedDeletions[object.uuid].deletionTime > object.deletionTime) { +- mergedDeletions[object.uuid] = object; +- } +- } +- +- while (!entries.isEmpty()) { +- auto* entry = entries.takeFirst(); +- const auto& object = mergedDeletions[entry->uuid()]; +- if (entry->timeInfo().lastModificationTime() > object.deletionTime) { +- // keep deleted entry since it was changed after deletion date +- continue; +- } +- deletions << object; +- if (entry->group()) { +- changes << tr("Deleting child %1 [%2]").arg(entry->title(), entry->uuidToHex()); +- } else { +- changes << tr("Deleting orphan %1 [%2]").arg(entry->title(), entry->uuidToHex()); +- } +- // Entry is inserted into deletedObjects after deletions are processed +- eraseEntry(entry); +- } +- +- while (!groups.isEmpty()) { +- auto* group = groups.takeFirst(); +- if (!(group->children().toSet() & groups.toSet()).isEmpty()) { +- // we need to finish all children before we are able to determine if the group can be removed +- groups << group; +- continue; +- } +- const auto& object = mergedDeletions[group->uuid()]; +- if (group->timeInfo().lastModificationTime() > object.deletionTime) { +- // keep deleted group since it was changed after deletion date +- continue; +- } +- if (!group->entriesRecursive(false).isEmpty() || !group->groupsRecursive(false).isEmpty()) { +- // keep deleted group since it contains undeleted content +- continue; +- } +- deletions << object; +- if (group->parentGroup()) { +- changes << tr("Deleting child %1 [%2]").arg(group->name(), group->uuidToHex()); +- } else { +- changes << tr("Deleting orphan %1 [%2]").arg(group->name(), group->uuidToHex()); +- } +- eraseGroup(group); +- } +- // Put every deletion to the earliest date of deletion +- if (deletions != context.m_targetDb->deletedObjects()) { +- changes << tr("Changed deleted objects"); +- } +- context.m_targetDb->setDeletedObjects(deletions); +- return changes; +-} +- +-Merger::ChangeList Merger::mergeMetadata(const MergeContext& context) +-{ +- // TODO HNH: missing handling of recycle bin, names, templates for groups and entries, +- // public data (entries of newer dict override keys of older dict - ignoring +- // their own age - it is enough if one entry of the whole dict is newer) => possible lost update +- ChangeList changes; +- auto* sourceMetadata = context.m_sourceDb->metadata(); +- auto* targetMetadata = context.m_targetDb->metadata(); +- +- for (const auto& iconUuid : sourceMetadata->customIconsOrder()) { +- if (!targetMetadata->hasCustomIcon(iconUuid)) { +- QImage customIcon = sourceMetadata->customIcon(iconUuid); +- targetMetadata->addCustomIcon(iconUuid, customIcon); +- changes << tr("Adding missing icon %1").arg(QString::fromLatin1(iconUuid.toRfc4122().toHex())); +- } +- } +- +- // Merge Custom Data if source is newer +- const auto targetCustomDataModificationTime = targetMetadata->customData()->getLastModified(); +- const auto sourceCustomDataModificationTime = sourceMetadata->customData()->getLastModified(); +- if (!targetMetadata->customData()->contains(CustomData::LastModified) +- || (targetCustomDataModificationTime.isValid() && sourceCustomDataModificationTime.isValid() +- && targetCustomDataModificationTime < sourceCustomDataModificationTime)) { +- const auto sourceCustomDataKeys = sourceMetadata->customData()->keys(); +- const auto targetCustomDataKeys = targetMetadata->customData()->keys(); +- +- // Check missing keys from source. Remove those from target +- for (const auto& key : targetCustomDataKeys) { +- // Do not remove protected custom data +- if (!sourceMetadata->customData()->contains(key) +- && !sourceMetadata->customData()->isProtectedCustomData(key)) { +- auto value = targetMetadata->customData()->value(key); +- targetMetadata->customData()->remove(key); +- changes << tr("Removed custom data %1 [%2]").arg(key, value); +- } +- } +- +- // Transfer new/existing keys +- for (const auto& key : sourceCustomDataKeys) { +- // Don't merge this meta field, it is updated automatically. +- if (key == CustomData::LastModified) { +- continue; +- } +- +- auto sourceValue = sourceMetadata->customData()->value(key); +- auto targetValue = targetMetadata->customData()->value(key); +- // Merge only if the values are not the same. +- if (sourceValue != targetValue) { +- targetMetadata->customData()->set(key, sourceValue); +- changes << tr("Adding custom data %1 [%2]").arg(key, sourceValue); +- } +- } +- } +- +- return changes; +-} +diff -urNr keepassxc-2.6.4-orig/src/core/Merger.h keepassxc-2.6.4-patched/src/core/Merger.h +--- keepassxc-2.6.4-orig/src/core/Merger.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/Merger.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,80 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_MERGER_H +-#define KEEPASSXC_MERGER_H +- +-#include "core/Group.h" +-#include +-#include +- +-class Database; +-class Entry; +- +-class Merger : public QObject +-{ +- Q_OBJECT +-public: +- Merger(const Database* sourceDb, Database* targetDb); +- Merger(const Group* sourceGroup, Group* targetGroup); +- void setForcedMergeMode(Group::MergeMode mode); +- void resetForcedMergeMode(); +- QStringList merge(); +- +-private: +- typedef QString Change; +- typedef QStringList ChangeList; +- +- struct MergeContext +- { +- QPointer m_sourceDb; +- QPointer m_targetDb; +- QPointer m_sourceRootGroup; +- QPointer m_targetRootGroup; +- QPointer m_sourceGroup; +- QPointer m_targetGroup; +- }; +- ChangeList mergeGroup(const MergeContext& context); +- ChangeList mergeDeletions(const MergeContext& context); +- ChangeList mergeMetadata(const MergeContext& context); +- bool markOlderEntry(Entry* entry); +- bool mergeHistory(const Entry* sourceEntry, Entry* targetEntry, Group::MergeMode mergeMethod); +- void moveEntry(Entry* entry, Group* targetGroup); +- void moveGroup(Group* group, Group* targetGroup); +- // remove an entry without a trace in the deletedObjects - needed for elemination cloned entries +- void eraseEntry(Entry* entry); +- // remove an entry without a trace in the deletedObjects - needed for elemination cloned entries +- void eraseGroup(Group* group); +- ChangeList resolveEntryConflict(const MergeContext& context, const Entry* existingEntry, Entry* otherEntry); +- ChangeList resolveGroupConflict(const MergeContext& context, const Group* existingGroup, Group* otherGroup); +- Merger::ChangeList +- resolveEntryConflict_Duplicate(const MergeContext& context, const Entry* sourceEntry, Entry* targetEntry); +- Merger::ChangeList +- resolveEntryConflict_KeepLocal(const MergeContext& context, const Entry* sourceEntry, Entry* targetEntry); +- Merger::ChangeList +- resolveEntryConflict_KeepRemote(const MergeContext& context, const Entry* sourceEntry, Entry* targetEntry); +- Merger::ChangeList resolveEntryConflict_MergeHistories(const MergeContext& context, +- const Entry* sourceEntry, +- Entry* targetEntry, +- Group::MergeMode mergeMethod); +- +-private: +- MergeContext m_context; +- Group::MergeMode m_mode; +-}; +- +-#endif // KEEPASSXC_MERGER_H +diff -urNr keepassxc-2.6.4-orig/src/core/Metadata.cpp keepassxc-2.6.4-patched/src/core/Metadata.cpp +--- keepassxc-2.6.4-orig/src/core/Metadata.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/Metadata.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,509 +0,0 @@ +-/* +- * Copyright (C) 2010 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "Metadata.h" +-#include +-#include +- +-#include "core/Clock.h" +-#include "core/DatabaseIcons.h" +-#include "core/Entry.h" +-#include "core/Group.h" +-#include "core/Tools.h" +- +-const int Metadata::DefaultHistoryMaxItems = 10; +-const int Metadata::DefaultHistoryMaxSize = 6 * 1024 * 1024; +- +-Metadata::Metadata(QObject* parent) +- : QObject(parent) +- , m_customData(new CustomData(this)) +- , m_updateDatetime(true) +-{ +- init(); +- connect(m_customData, SIGNAL(customDataModified()), SIGNAL(metadataModified())); +-} +- +-void Metadata::init() +-{ +- m_data.generator = QStringLiteral("KeePassXC"); +- m_data.maintenanceHistoryDays = 365; +- m_data.masterKeyChangeRec = -1; +- m_data.masterKeyChangeForce = -1; +- m_data.historyMaxItems = DefaultHistoryMaxItems; +- m_data.historyMaxSize = DefaultHistoryMaxSize; +- m_data.recycleBinEnabled = true; +- m_data.protectTitle = false; +- m_data.protectUsername = false; +- m_data.protectPassword = true; +- m_data.protectUrl = false; +- m_data.protectNotes = false; +- +- QDateTime now = Clock::currentDateTimeUtc(); +- m_data.nameChanged = now; +- m_data.descriptionChanged = now; +- m_data.defaultUserNameChanged = now; +- m_recycleBinChanged = now; +- m_entryTemplatesGroupChanged = now; +- m_masterKeyChanged = now; +- m_settingsChanged = now; +-} +- +-void Metadata::clear() +-{ +- init(); +- m_customIcons.clear(); +- m_customIconsRaw.clear(); +- m_customIconsOrder.clear(); +- m_customIconsHashes.clear(); +- m_customData->clear(); +-} +- +-template bool Metadata::set(P& property, const V& value) +-{ +- if (property != value) { +- property = value; +- emit metadataModified(); +- return true; +- } else { +- return false; +- } +-} +- +-template bool Metadata::set(P& property, const V& value, QDateTime& dateTime) +-{ +- if (property != value) { +- property = value; +- if (m_updateDatetime) { +- dateTime = Clock::currentDateTimeUtc(); +- } +- emit metadataModified(); +- return true; +- } else { +- return false; +- } +-} +- +-void Metadata::setUpdateDatetime(bool value) +-{ +- m_updateDatetime = value; +-} +- +-void Metadata::copyAttributesFrom(const Metadata* other) +-{ +- m_data = other->m_data; +-} +- +-QString Metadata::generator() const +-{ +- return m_data.generator; +-} +- +-QString Metadata::name() const +-{ +- return m_data.name; +-} +- +-QDateTime Metadata::nameChanged() const +-{ +- return m_data.nameChanged; +-} +- +-QString Metadata::description() const +-{ +- return m_data.description; +-} +- +-QDateTime Metadata::descriptionChanged() const +-{ +- return m_data.descriptionChanged; +-} +- +-QString Metadata::defaultUserName() const +-{ +- return m_data.defaultUserName; +-} +- +-QDateTime Metadata::defaultUserNameChanged() const +-{ +- return m_data.defaultUserNameChanged; +-} +- +-int Metadata::maintenanceHistoryDays() const +-{ +- return m_data.maintenanceHistoryDays; +-} +- +-QString Metadata::color() const +-{ +- return m_data.color; +-} +- +-bool Metadata::protectTitle() const +-{ +- return m_data.protectTitle; +-} +- +-bool Metadata::protectUsername() const +-{ +- return m_data.protectUsername; +-} +- +-bool Metadata::protectPassword() const +-{ +- return m_data.protectPassword; +-} +- +-bool Metadata::protectUrl() const +-{ +- return m_data.protectUrl; +-} +- +-bool Metadata::protectNotes() const +-{ +- return m_data.protectNotes; +-} +- +-QImage Metadata::customIcon(const QUuid& uuid) const +-{ +- return m_customIconsRaw.value(uuid); +-} +- +-QPixmap Metadata::customIconPixmap(const QUuid& uuid, IconSize size) const +-{ +- if (!hasCustomIcon(uuid)) { +- return {}; +- } +- return m_customIcons.value(uuid).pixmap(databaseIcons()->iconSize(size)); +-} +- +-QHash Metadata::customIconsPixmaps(IconSize size) const +-{ +- QHash result; +- +- for (const QUuid& uuid : m_customIconsOrder) { +- result.insert(uuid, customIconPixmap(uuid, size)); +- } +- +- return result; +-} +- +-bool Metadata::hasCustomIcon(const QUuid& uuid) const +-{ +- return m_customIconsRaw.contains(uuid); +-} +- +-QList Metadata::customIconsOrder() const +-{ +- return m_customIconsOrder; +-} +- +-bool Metadata::recycleBinEnabled() const +-{ +- return m_data.recycleBinEnabled; +-} +- +-Group* Metadata::recycleBin() +-{ +- return m_recycleBin; +-} +- +-const Group* Metadata::recycleBin() const +-{ +- return m_recycleBin; +-} +- +-QDateTime Metadata::recycleBinChanged() const +-{ +- return m_recycleBinChanged; +-} +- +-const Group* Metadata::entryTemplatesGroup() const +-{ +- return m_entryTemplatesGroup; +-} +- +-QDateTime Metadata::entryTemplatesGroupChanged() const +-{ +- return m_entryTemplatesGroupChanged; +-} +- +-const Group* Metadata::lastSelectedGroup() const +-{ +- return m_lastSelectedGroup; +-} +- +-const Group* Metadata::lastTopVisibleGroup() const +-{ +- return m_lastTopVisibleGroup; +-} +- +-QDateTime Metadata::databaseKeyChanged() const +-{ +- return m_masterKeyChanged; +-} +- +-int Metadata::databaseKeyChangeRec() const +-{ +- return m_data.masterKeyChangeRec; +-} +- +-int Metadata::databaseKeyChangeForce() const +-{ +- return m_data.masterKeyChangeForce; +-} +- +-int Metadata::historyMaxItems() const +-{ +- return m_data.historyMaxItems; +-} +- +-int Metadata::historyMaxSize() const +-{ +- return m_data.historyMaxSize; +-} +- +-CustomData* Metadata::customData() +-{ +- return m_customData; +-} +- +-const CustomData* Metadata::customData() const +-{ +- return m_customData; +-} +- +-void Metadata::setGenerator(const QString& value) +-{ +- set(m_data.generator, value); +-} +- +-void Metadata::setName(const QString& value) +-{ +- set(m_data.name, value, m_data.nameChanged); +-} +- +-void Metadata::setNameChanged(const QDateTime& value) +-{ +- Q_ASSERT(value.timeSpec() == Qt::UTC); +- m_data.nameChanged = value; +-} +- +-void Metadata::setDescription(const QString& value) +-{ +- set(m_data.description, value, m_data.descriptionChanged); +-} +- +-void Metadata::setDescriptionChanged(const QDateTime& value) +-{ +- Q_ASSERT(value.timeSpec() == Qt::UTC); +- m_data.descriptionChanged = value; +-} +- +-void Metadata::setDefaultUserName(const QString& value) +-{ +- set(m_data.defaultUserName, value, m_data.defaultUserNameChanged); +-} +- +-void Metadata::setDefaultUserNameChanged(const QDateTime& value) +-{ +- Q_ASSERT(value.timeSpec() == Qt::UTC); +- m_data.defaultUserNameChanged = value; +-} +- +-void Metadata::setMaintenanceHistoryDays(int value) +-{ +- set(m_data.maintenanceHistoryDays, value); +-} +- +-void Metadata::setColor(const QString& value) +-{ +- set(m_data.color, value); +-} +- +-void Metadata::setProtectTitle(bool value) +-{ +- set(m_data.protectTitle, value); +-} +- +-void Metadata::setProtectUsername(bool value) +-{ +- set(m_data.protectUsername, value); +-} +- +-void Metadata::setProtectPassword(bool value) +-{ +- set(m_data.protectPassword, value); +-} +- +-void Metadata::setProtectUrl(bool value) +-{ +- set(m_data.protectUrl, value); +-} +- +-void Metadata::setProtectNotes(bool value) +-{ +- set(m_data.protectNotes, value); +-} +- +-void Metadata::addCustomIcon(const QUuid& uuid, const QImage& image) +-{ +- Q_ASSERT(!uuid.isNull()); +- Q_ASSERT(!m_customIconsRaw.contains(uuid)); +- +- m_customIconsRaw[uuid] = image; +- // remove all uuids to prevent duplicates in release mode +- m_customIconsOrder.removeAll(uuid); +- m_customIconsOrder.append(uuid); +- // Associate image hash to uuid +- QByteArray hash = hashImage(image); +- m_customIconsHashes[hash] = uuid; +- Q_ASSERT(m_customIconsRaw.count() == m_customIconsOrder.count()); +- +- // TODO: This check can go away when we move all QIcon handling outside of core +- // On older versions of Qt, loading a QPixmap from QImage outside of a GUI +- // environment causes ASAN to fail and crash on nullptr violation +- static bool isGui = qApp->inherits("QGuiApplication"); +- if (isGui) { +- // Generate QIcon with pre-baked resolutions +- auto basePixmap = QPixmap::fromImage(image.scaled(64, 64, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); +- QIcon icon(basePixmap); +- m_customIcons.insert(uuid, icon); +- } else { +- m_customIcons.insert(uuid, QIcon()); +- } +- +- emit metadataModified(); +-} +- +-void Metadata::removeCustomIcon(const QUuid& uuid) +-{ +- Q_ASSERT(!uuid.isNull()); +- Q_ASSERT(m_customIconsRaw.contains(uuid)); +- +- // Remove hash record only if this is the same uuid +- QByteArray hash = hashImage(m_customIconsRaw[uuid]); +- if (m_customIconsHashes.contains(hash) && m_customIconsHashes[hash] == uuid) { +- m_customIconsHashes.remove(hash); +- } +- +- m_customIcons.remove(uuid); +- m_customIconsRaw.remove(uuid); +- m_customIconsOrder.removeAll(uuid); +- Q_ASSERT(m_customIconsRaw.count() == m_customIconsOrder.count()); +- emit metadataModified(); +-} +- +-QUuid Metadata::findCustomIcon(const QImage& candidate) +-{ +- QByteArray hash = hashImage(candidate); +- return m_customIconsHashes.value(hash, QUuid()); +-} +- +-void Metadata::copyCustomIcons(const QSet& iconList, const Metadata* otherMetadata) +-{ +- for (const QUuid& uuid : iconList) { +- Q_ASSERT(otherMetadata->hasCustomIcon(uuid)); +- +- if (!hasCustomIcon(uuid) && otherMetadata->hasCustomIcon(uuid)) { +- addCustomIcon(uuid, otherMetadata->customIcon(uuid)); +- } +- } +-} +- +-QByteArray Metadata::hashImage(const QImage& image) +-{ +-#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) +- auto data = QByteArray(reinterpret_cast(image.bits()), static_cast(image.sizeInBytes())); +-#else +- auto data = QByteArray(reinterpret_cast(image.bits()), image.byteCount()); +-#endif +- return QCryptographicHash::hash(data, QCryptographicHash::Md5); +-} +- +-void Metadata::setRecycleBinEnabled(bool value) +-{ +- set(m_data.recycleBinEnabled, value); +-} +- +-void Metadata::setRecycleBin(Group* group) +-{ +- set(m_recycleBin, group, m_recycleBinChanged); +-} +- +-void Metadata::setRecycleBinChanged(const QDateTime& value) +-{ +- Q_ASSERT(value.timeSpec() == Qt::UTC); +- m_recycleBinChanged = value; +-} +- +-void Metadata::setEntryTemplatesGroup(Group* group) +-{ +- set(m_entryTemplatesGroup, group, m_entryTemplatesGroupChanged); +-} +- +-void Metadata::setEntryTemplatesGroupChanged(const QDateTime& value) +-{ +- Q_ASSERT(value.timeSpec() == Qt::UTC); +- m_entryTemplatesGroupChanged = value; +-} +- +-void Metadata::setLastSelectedGroup(Group* group) +-{ +- set(m_lastSelectedGroup, group); +-} +- +-void Metadata::setLastTopVisibleGroup(Group* group) +-{ +- set(m_lastTopVisibleGroup, group); +-} +- +-void Metadata::setDatabaseKeyChanged(const QDateTime& value) +-{ +- Q_ASSERT(value.timeSpec() == Qt::UTC); +- m_masterKeyChanged = value; +-} +- +-void Metadata::setMasterKeyChangeRec(int value) +-{ +- set(m_data.masterKeyChangeRec, value); +-} +- +-void Metadata::setMasterKeyChangeForce(int value) +-{ +- set(m_data.masterKeyChangeForce, value); +-} +- +-void Metadata::setHistoryMaxItems(int value) +-{ +- set(m_data.historyMaxItems, value); +-} +- +-void Metadata::setHistoryMaxSize(int value) +-{ +- set(m_data.historyMaxSize, value); +-} +- +-QDateTime Metadata::settingsChanged() const +-{ +- return m_settingsChanged; +-} +- +-void Metadata::setSettingsChanged(const QDateTime& value) +-{ +- Q_ASSERT(value.timeSpec() == Qt::UTC); +- m_settingsChanged = value; +-} +diff -urNr keepassxc-2.6.4-orig/src/core/Metadata.h keepassxc-2.6.4-patched/src/core/Metadata.h +--- keepassxc-2.6.4-orig/src/core/Metadata.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/Metadata.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,183 +0,0 @@ +-/* +- * Copyright (C) 2010 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_METADATA_H +-#define KEEPASSX_METADATA_H +- +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-#include "core/CustomData.h" +-#include "core/Global.h" +- +-class Database; +-class Group; +- +-class Metadata : public QObject +-{ +- Q_OBJECT +- +-public: +- explicit Metadata(QObject* parent = nullptr); +- +- struct MetadataData +- { +- QString generator; +- QString name; +- QDateTime nameChanged; +- QString description; +- QDateTime descriptionChanged; +- QString defaultUserName; +- QDateTime defaultUserNameChanged; +- int maintenanceHistoryDays; +- QString color; +- bool recycleBinEnabled; +- int historyMaxItems; +- int historyMaxSize; +- int masterKeyChangeRec; +- int masterKeyChangeForce; +- +- bool protectTitle; +- bool protectUsername; +- bool protectPassword; +- bool protectUrl; +- bool protectNotes; +- }; +- +- void init(); +- void clear(); +- +- QString generator() const; +- QString name() const; +- QDateTime nameChanged() const; +- QString description() const; +- QDateTime descriptionChanged() const; +- QString defaultUserName() const; +- QDateTime defaultUserNameChanged() const; +- QDateTime settingsChanged() const; +- int maintenanceHistoryDays() const; +- QString color() const; +- bool protectTitle() const; +- bool protectUsername() const; +- bool protectPassword() const; +- bool protectUrl() const; +- bool protectNotes() const; +- QImage customIcon(const QUuid& uuid) const; +- bool hasCustomIcon(const QUuid& uuid) const; +- QPixmap customIconPixmap(const QUuid& uuid, IconSize size = IconSize::Default) const; +- QHash customIconsPixmaps(IconSize size = IconSize::Default) const; +- QList customIconsOrder() const; +- bool recycleBinEnabled() const; +- Group* recycleBin(); +- const Group* recycleBin() const; +- QDateTime recycleBinChanged() const; +- const Group* entryTemplatesGroup() const; +- QDateTime entryTemplatesGroupChanged() const; +- const Group* lastSelectedGroup() const; +- const Group* lastTopVisibleGroup() const; +- QDateTime databaseKeyChanged() const; +- int databaseKeyChangeRec() const; +- int databaseKeyChangeForce() const; +- int historyMaxItems() const; +- int historyMaxSize() const; +- CustomData* customData(); +- const CustomData* customData() const; +- +- static const int DefaultHistoryMaxItems; +- static const int DefaultHistoryMaxSize; +- +- void setGenerator(const QString& value); +- void setName(const QString& value); +- void setNameChanged(const QDateTime& value); +- void setDescription(const QString& value); +- void setDescriptionChanged(const QDateTime& value); +- void setDefaultUserName(const QString& value); +- void setDefaultUserNameChanged(const QDateTime& value); +- void setSettingsChanged(const QDateTime& value); +- void setMaintenanceHistoryDays(int value); +- void setColor(const QString& value); +- void setProtectTitle(bool value); +- void setProtectUsername(bool value); +- void setProtectPassword(bool value); +- void setProtectUrl(bool value); +- void setProtectNotes(bool value); +- void addCustomIcon(const QUuid& uuid, const QImage& image); +- void removeCustomIcon(const QUuid& uuid); +- void copyCustomIcons(const QSet& iconList, const Metadata* otherMetadata); +- QUuid findCustomIcon(const QImage& candidate); +- void setRecycleBinEnabled(bool value); +- void setRecycleBin(Group* group); +- void setRecycleBinChanged(const QDateTime& value); +- void setEntryTemplatesGroup(Group* group); +- void setEntryTemplatesGroupChanged(const QDateTime& value); +- void setLastSelectedGroup(Group* group); +- void setLastTopVisibleGroup(Group* group); +- void setDatabaseKeyChanged(const QDateTime& value); +- void setMasterKeyChangeRec(int value); +- void setMasterKeyChangeForce(int value); +- void setHistoryMaxItems(int value); +- void setHistoryMaxSize(int value); +- void setUpdateDatetime(bool value); +- /* +- * Copy all attributes from other except: +- * - Group pointers/uuids +- * - Database key changed date +- * - Custom icons +- * - Custom fields +- * - Settings changed date +- */ +- void copyAttributesFrom(const Metadata* other); +- +-signals: +- void metadataModified(); +- +-private: +- template bool set(P& property, const V& value); +- template bool set(P& property, const V& value, QDateTime& dateTime); +- +- QByteArray hashImage(const QImage& image); +- +- MetadataData m_data; +- +- QHash m_customIcons; +- QHash m_customIconsRaw; +- QList m_customIconsOrder; +- QHash m_customIconsHashes; +- +- QPointer m_recycleBin; +- QDateTime m_recycleBinChanged; +- QPointer m_entryTemplatesGroup; +- QDateTime m_entryTemplatesGroupChanged; +- QPointer m_lastSelectedGroup; +- QPointer m_lastTopVisibleGroup; +- +- QDateTime m_masterKeyChanged; +- QDateTime m_settingsChanged; +- +- QPointer m_customData; +- +- bool m_updateDatetime; +-}; +- +-#endif // KEEPASSX_METADATA_H +diff -urNr keepassxc-2.6.4-orig/src/core/NetworkManager.cpp keepassxc-2.6.4-patched/src/core/NetworkManager.cpp +--- keepassxc-2.6.4-orig/src/core/NetworkManager.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/NetworkManager.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,33 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "config-keepassx.h" +- +-#ifdef WITH_XC_NETWORKING +-#include "NetworkManager.h" +- +-#include +- +-QNetworkAccessManager* g_netMgr = nullptr; +-QNetworkAccessManager* getNetMgr() +-{ +- if (!g_netMgr) { +- g_netMgr = new QNetworkAccessManager(QCoreApplication::instance()); +- } +- return g_netMgr; +-} +-#endif +diff -urNr keepassxc-2.6.4-orig/src/core/NetworkManager.h keepassxc-2.6.4-patched/src/core/NetworkManager.h +--- keepassxc-2.6.4-orig/src/core/NetworkManager.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/NetworkManager.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,34 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_NETWORKMANAGER_H +-#define KEEPASSXC_NETWORKMANAGER_H +- +-#include "config-keepassx.h" +-#include +- +-#ifdef WITH_XC_NETWORKING +-#include +-#include +-#include +- +-QNetworkAccessManager* getNetMgr(); +-#else +-Q_STATIC_ASSERT_X(false, "Qt Networking used when WITH_XC_NETWORKING is disabled!"); +-#endif +- +-#endif // KEEPASSXC_NETWORKMANAGER_H +diff -urNr keepassxc-2.6.4-orig/src/core/OSEventFilter.cpp keepassxc-2.6.4-patched/src/core/OSEventFilter.cpp +--- keepassxc-2.6.4-orig/src/core/OSEventFilter.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/OSEventFilter.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,47 +0,0 @@ +-/* +- * Copyright (C) 2013 Felix Geyer +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 3 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "OSEventFilter.h" +- +-#include +- +-#include "autotype/AutoType.h" +-#include "gui/MainWindow.h" +-#ifdef Q_OS_WIN +-#include +-#endif +- +-OSEventFilter::OSEventFilter() +-{ +-} +- +-bool OSEventFilter::nativeEventFilter(const QByteArray& eventType, void* message, long* result) +-{ +- Q_UNUSED(result) +- +-#if defined(Q_OS_UNIX) +- if (eventType == QByteArrayLiteral("xcb_generic_event_t")) { +-#elif defined(Q_OS_WIN) +- if (eventType == QByteArrayLiteral("windows_generic_MSG") +- || eventType == QByteArrayLiteral("windows_dispatcher_MSG")) { +-#endif +- return autoType()->callEventFilter(message) == 1; +- } +- +- return false; +-} +diff -urNr keepassxc-2.6.4-orig/src/core/OSEventFilter.h keepassxc-2.6.4-patched/src/core/OSEventFilter.h +--- keepassxc-2.6.4-orig/src/core/OSEventFilter.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/OSEventFilter.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,35 +0,0 @@ +-/* +- * Copyright (C) 2013 Felix Geyer +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 3 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef OSEVENTFILTER_H +-#define OSEVENTFILTER_H +-#include +- +-class QByteArray; +- +-class OSEventFilter : public QAbstractNativeEventFilter +-{ +-public: +- OSEventFilter(); +- bool nativeEventFilter(const QByteArray& eventType, void* message, long* result) override; +- +-private: +- Q_DISABLE_COPY(OSEventFilter) +-}; +- +-#endif // OSEVENTFILTER_H +diff -urNr keepassxc-2.6.4-orig/src/core/PassphraseGenerator.cpp keepassxc-2.6.4-patched/src/core/PassphraseGenerator.cpp +--- keepassxc-2.6.4-orig/src/core/PassphraseGenerator.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/PassphraseGenerator.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,133 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "PassphraseGenerator.h" +- +-#include +-#include +-#include +- +-#include "core/Resources.h" +-#include "crypto/Random.h" +- +-const char* PassphraseGenerator::DefaultSeparator = " "; +-const char* PassphraseGenerator::DefaultWordList = "eff_large.wordlist"; +- +-PassphraseGenerator::PassphraseGenerator() +- : m_wordCount(DefaultWordCount) +- , m_wordCase(LOWERCASE) +- , m_separator(DefaultSeparator) +-{ +- setDefaultWordList(); +-} +- +-double PassphraseGenerator::estimateEntropy(int wordCount) +-{ +- if (m_wordlist.isEmpty()) { +- return 0.0; +- } +- if (wordCount < 1) { +- wordCount = m_wordCount; +- } +- +- return std::log2(m_wordlist.size()) * wordCount; +-} +- +-void PassphraseGenerator::setWordCount(int wordCount) +-{ +- m_wordCount = qMax(1, wordCount); +-} +- +-void PassphraseGenerator::setWordCase(PassphraseWordCase wordCase) +-{ +- m_wordCase = wordCase; +-} +- +-void PassphraseGenerator::setWordList(const QString& path) +-{ +- m_wordlist.clear(); +- +- QFile file(path); +- if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { +- qWarning("Couldn't load passphrase wordlist."); +- return; +- } +- +- QTextStream in(&file); +- while (!in.atEnd()) { +- m_wordlist.append(in.readLine()); +- } +- +- if (m_wordlist.size() < 4000) { +- qWarning("Wordlist too short!"); +- return; +- } +-} +- +-void PassphraseGenerator::setDefaultWordList() +-{ +- const QString path = resources()->wordlistPath(PassphraseGenerator::DefaultWordList); +- setWordList(path); +-} +- +-void PassphraseGenerator::setWordSeparator(const QString& separator) +-{ +- m_separator = separator; +-} +- +-QString PassphraseGenerator::generatePassphrase() const +-{ +- QString tmpWord; +- Q_ASSERT(isValid()); +- +- // In case there was an error loading the wordlist +- if (m_wordlist.length() == 0) { +- return QString(); +- } +- +- QStringList words; +- for (int i = 0; i < m_wordCount; ++i) { +- int wordIndex = randomGen()->randomUInt(static_cast(m_wordlist.length())); +- tmpWord = m_wordlist.at(wordIndex); +- +- // convert case +- switch (m_wordCase) { +- case UPPERCASE: +- tmpWord = tmpWord.toUpper(); +- break; +- case TITLECASE: +- tmpWord = tmpWord.replace(0, 1, tmpWord.left(1).toUpper()); +- break; +- case LOWERCASE: +- default: +- tmpWord = tmpWord.toLower(); +- break; +- } +- words.append(tmpWord); +- } +- +- return words.join(m_separator); +-} +- +-bool PassphraseGenerator::isValid() const +-{ +- if (m_wordCount == 0) { +- return false; +- } +- +- return m_wordlist.size() >= 1000; +-} +diff -urNr keepassxc-2.6.4-orig/src/core/PassphraseGenerator.h keepassxc-2.6.4-patched/src/core/PassphraseGenerator.h +--- keepassxc-2.6.4-orig/src/core/PassphraseGenerator.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/PassphraseGenerator.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,59 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_PASSPHRASEGENERATOR_H +-#define KEEPASSX_PASSPHRASEGENERATOR_H +- +-#include +-#include +-#include +- +-class PassphraseGenerator +-{ +-public: +- PassphraseGenerator(); +- Q_DISABLE_COPY(PassphraseGenerator) +- +- enum PassphraseWordCase +- { +- LOWERCASE, +- UPPERCASE, +- TITLECASE +- }; +- +- double estimateEntropy(int wordCount = 0); +- void setWordCount(int wordCount); +- void setWordList(const QString& path); +- void setWordCase(PassphraseWordCase wordCase); +- void setDefaultWordList(); +- void setWordSeparator(const QString& separator); +- bool isValid() const; +- +- QString generatePassphrase() const; +- +- static constexpr int DefaultWordCount = 7; +- static const char* DefaultSeparator; +- static const char* DefaultWordList; +- +-private: +- int m_wordCount; +- PassphraseWordCase m_wordCase; +- QString m_separator; +- QVector m_wordlist; +-}; +- +-#endif // KEEPASSX_PASSPHRASEGENERATOR_H +diff -urNr keepassxc-2.6.4-orig/src/core/PasswordGenerator.cpp keepassxc-2.6.4-patched/src/core/PasswordGenerator.cpp +--- keepassxc-2.6.4-orig/src/core/PasswordGenerator.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/PasswordGenerator.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,339 +0,0 @@ +-/* +- * Copyright (C) 2013 Felix Geyer +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "PasswordGenerator.h" +- +-#include "crypto/Random.h" +- +-const char* PasswordGenerator::DefaultAdditionalChars = ""; +-const char* PasswordGenerator::DefaultExcludedChars = ""; +- +-PasswordGenerator::PasswordGenerator() +- : m_length(0) +- , m_classes(nullptr) +- , m_flags(nullptr) +- , m_additional(PasswordGenerator::DefaultAdditionalChars) +- , m_excluded(PasswordGenerator::DefaultExcludedChars) +-{ +-} +- +-void PasswordGenerator::setLength(int length) +-{ +- if (length <= 0) { +- m_length = DefaultLength; +- return; +- } +- m_length = length; +-} +- +-void PasswordGenerator::setCharClasses(const CharClasses& classes) +-{ +- if (classes == 0) { +- m_classes = DefaultCharset; +- return; +- } +- m_classes = classes; +-} +- +-void PasswordGenerator::setFlags(const GeneratorFlags& flags) +-{ +- m_flags = flags; +-} +- +-void PasswordGenerator::setAdditionalChars(const QString& chars) +-{ +- m_additional = chars; +-} +- +-void PasswordGenerator::setExcludedChars(const QString& chars) +-{ +- m_excluded = chars; +-} +- +-QString PasswordGenerator::generatePassword() const +-{ +- Q_ASSERT(isValid()); +- +- const QVector groups = passwordGroups(); +- +- QVector passwordChars; +- for (const PasswordGroup& group : groups) { +- for (QChar ch : group) { +- passwordChars.append(ch); +- } +- } +- +- QString password; +- +- if (m_flags & CharFromEveryGroup) { +- for (const auto& group : groups) { +- int pos = randomGen()->randomUInt(static_cast(group.size())); +- +- password.append(group[pos]); +- } +- +- for (int i = groups.size(); i < m_length; i++) { +- int pos = randomGen()->randomUInt(static_cast(passwordChars.size())); +- +- password.append(passwordChars[pos]); +- } +- +- // shuffle chars +- for (int i = (password.size() - 1); i >= 1; i--) { +- int j = randomGen()->randomUInt(static_cast(i + 1)); +- +- QChar tmp = password[i]; +- password[i] = password[j]; +- password[j] = tmp; +- } +- } else { +- for (int i = 0; i < m_length; i++) { +- int pos = randomGen()->randomUInt(static_cast(passwordChars.size())); +- +- password.append(passwordChars[pos]); +- } +- } +- +- return password; +-} +- +-bool PasswordGenerator::isValid() const +-{ +- if (m_classes == 0 && m_additional.isEmpty()) { +- return false; +- } else if (m_length == 0) { +- return false; +- } +- +- if ((m_flags & CharFromEveryGroup) && (m_length < numCharClasses())) { +- return false; +- } +- +- return !passwordGroups().isEmpty(); +-} +- +-QVector PasswordGenerator::passwordGroups() const +-{ +- QVector passwordGroups; +- +- if (m_classes & LowerLetters) { +- PasswordGroup group; +- +- for (int i = 97; i <= (97 + 25); i++) { +- +- if ((m_flags & ExcludeLookAlike) && (i == 108)) { // "l" +- continue; +- } +- +- group.append(i); +- } +- +- passwordGroups.append(group); +- } +- if (m_classes & UpperLetters) { +- PasswordGroup group; +- +- for (int i = 65; i <= (65 + 25); i++) { +- +- if ((m_flags & ExcludeLookAlike) && (i == 73 || i == 79)) { // "I" and "O" +- continue; +- } +- +- group.append(i); +- } +- +- passwordGroups.append(group); +- } +- if (m_classes & Numbers) { +- PasswordGroup group; +- +- for (int i = 48; i < (48 + 10); i++) { +- if ((m_flags & ExcludeLookAlike) && (i == 48 || i == 49)) { // "0" and "1" +- continue; +- } +- +- group.append(i); +- } +- +- passwordGroups.append(group); +- } +- if (m_classes & Braces) { +- PasswordGroup group; +- +- // ()[]{} +- group.append(40); +- group.append(41); +- group.append(91); +- group.append(93); +- group.append(123); +- group.append(125); +- +- passwordGroups.append(group); +- } +- if (m_classes & Punctuation) { +- PasswordGroup group; +- +- // .,:; +- group.append(44); +- group.append(46); +- group.append(58); +- group.append(59); +- +- passwordGroups.append(group); +- } +- if (m_classes & Quotes) { +- PasswordGroup group; +- +- // "' +- group.append(34); +- group.append(39); +- +- passwordGroups.append(group); +- } +- if (m_classes & Dashes) { +- PasswordGroup group; +- +- // -/\_| +- group.append(45); +- group.append(47); +- group.append(92); +- group.append(95); +- if (!(m_flags & ExcludeLookAlike)) { +- group.append(124); // "|" +- } +- +- passwordGroups.append(group); +- } +- if (m_classes & Math) { +- PasswordGroup group; +- +- // !*+-<=>? +- group.append(33); +- group.append(42); +- group.append(43); +- group.append(60); +- group.append(61); +- group.append(62); +- group.append(63); +- +- passwordGroups.append(group); +- } +- if (m_classes & Logograms) { +- PasswordGroup group; +- +- // #$%& +- for (int i = 35; i <= 38; i++) { +- group.append(i); +- } +- // @^`~ +- group.append(64); +- group.append(94); +- group.append(96); +- group.append(126); +- +- passwordGroups.append(group); +- } +- if (m_classes & EASCII) { +- PasswordGroup group; +- +- // [U+0080, U+009F] are C1 control characters, +- // U+00A0 is non-breaking space +- for (int i = 161; i <= 172; i++) { +- group.append(i); +- } +- // U+00AD is soft hyphen (format character) +- for (int i = 174; i <= 255; i++) { +- if ((m_flags & ExcludeLookAlike) && (i == 249)) { // "﹒" +- continue; +- } +- group.append(i); +- } +- +- passwordGroups.append(group); +- } +- if (!m_additional.isEmpty()) { +- PasswordGroup group; +- +- for (auto ch : m_additional) { +- group.append(ch); +- } +- +- passwordGroups.append(group); +- } +- +- // Loop over character groups and remove excluded characters from them; +- // remove empty groups +- int i = 0; +- while (i != passwordGroups.size()) { +- PasswordGroup group = passwordGroups[i]; +- +- for (QChar ch : m_excluded) { +- int j = group.indexOf(ch); +- while (j != -1) { +- group.remove(j); +- j = group.indexOf(ch); +- } +- } +- if (!group.isEmpty()) { +- passwordGroups.replace(i, group); +- ++i; +- } else { +- passwordGroups.remove(i); +- } +- } +- +- return passwordGroups; +-} +- +-int PasswordGenerator::numCharClasses() const +-{ +- int numClasses = 0; +- +- if (m_classes & LowerLetters) { +- numClasses++; +- } +- if (m_classes & UpperLetters) { +- numClasses++; +- } +- if (m_classes & Numbers) { +- numClasses++; +- } +- if (m_classes & Braces) { +- numClasses++; +- } +- if (m_classes & Punctuation) { +- numClasses++; +- } +- if (m_classes & Quotes) { +- numClasses++; +- } +- if (m_classes & Dashes) { +- numClasses++; +- } +- if (m_classes & Math) { +- numClasses++; +- } +- if (m_classes & Logograms) { +- numClasses++; +- } +- if (m_classes & EASCII) { +- numClasses++; +- } +- +- return numClasses; +-} +diff -urNr keepassxc-2.6.4-orig/src/core/PasswordGenerator.h keepassxc-2.6.4-patched/src/core/PasswordGenerator.h +--- keepassxc-2.6.4-orig/src/core/PasswordGenerator.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/PasswordGenerator.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,91 +0,0 @@ +-/* +- * Copyright (C) 2013 Felix Geyer +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_PASSWORDGENERATOR_H +-#define KEEPASSX_PASSWORDGENERATOR_H +- +-#include +-#include +-#include +- +-typedef QVector PasswordGroup; +- +-class PasswordGenerator +-{ +-public: +- enum CharClass +- { +- LowerLetters = (1 << 0), +- UpperLetters = (1 << 1), +- Numbers = (1 << 2), +- Braces = (1 << 3), +- Punctuation = (1 << 4), +- Quotes = (1 << 5), +- Dashes = (1 << 6), +- Math = (1 << 7), +- Logograms = (1 << 8), +- SpecialCharacters = Braces | Punctuation | Quotes | Dashes | Math | Logograms, +- EASCII = (1 << 9), +- DefaultCharset = LowerLetters | UpperLetters | Numbers +- }; +- Q_DECLARE_FLAGS(CharClasses, CharClass) +- +- enum GeneratorFlag +- { +- ExcludeLookAlike = (1 << 0), +- CharFromEveryGroup = (1 << 1), +- AdvancedMode = (1 << 2), +- DefaultFlags = ExcludeLookAlike | CharFromEveryGroup +- }; +- Q_DECLARE_FLAGS(GeneratorFlags, GeneratorFlag) +- +-public: +- PasswordGenerator(); +- +- void setLength(int length); +- void setCharClasses(const CharClasses& classes); +- void setFlags(const GeneratorFlags& flags); +- void setAdditionalChars(const QString& chars); +- void setExcludedChars(const QString& chars); +- +- bool isValid() const; +- +- QString generatePassword() const; +- +- static const int DefaultLength = 32; +- static const char* DefaultAdditionalChars; +- static const char* DefaultExcludedChars; +- +-private: +- QVector passwordGroups() const; +- int numCharClasses() const; +- +- int m_length; +- CharClasses m_classes; +- GeneratorFlags m_flags; +- QString m_additional; +- QString m_excluded; +- +- Q_DISABLE_COPY(PasswordGenerator) +-}; +- +-Q_DECLARE_OPERATORS_FOR_FLAGS(PasswordGenerator::CharClasses) +- +-Q_DECLARE_OPERATORS_FOR_FLAGS(PasswordGenerator::GeneratorFlags) +- +-#endif // KEEPASSX_PASSWORDGENERATOR_H +diff -urNr keepassxc-2.6.4-orig/src/core/PasswordHealth.cpp keepassxc-2.6.4-patched/src/core/PasswordHealth.cpp +--- keepassxc-2.6.4-orig/src/core/PasswordHealth.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/PasswordHealth.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,189 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include +-#include +- +-#include "Database.h" +-#include "Entry.h" +-#include "Group.h" +-#include "PasswordHealth.h" +-#include "zxcvbn.h" +- +-// Define the static member variable with the custom field name +-const QString PasswordHealth::OPTION_KNOWN_BAD = QStringLiteral("KnownBad"); +- +-PasswordHealth::PasswordHealth(double entropy) +- : m_score(entropy) +- , m_entropy(entropy) +-{ +- switch (quality()) { +- case Quality::Bad: +- case Quality::Poor: +- m_scoreReasons << QApplication::tr("Very weak password"); +- m_scoreDetails << QApplication::tr("Password entropy is %1 bits").arg(QString::number(m_entropy, 'f', 2)); +- break; +- +- case Quality::Weak: +- m_scoreReasons << QApplication::tr("Weak password"); +- m_scoreDetails << QApplication::tr("Password entropy is %1 bits").arg(QString::number(m_entropy, 'f', 2)); +- break; +- +- default: +- // No reason or details for good and excellent passwords +- break; +- } +-} +- +-PasswordHealth::PasswordHealth(QString pwd) +- : PasswordHealth(ZxcvbnMatch(pwd.toLatin1(), nullptr, nullptr)) +-{ +-} +- +-void PasswordHealth::setScore(int score) +-{ +- m_score = score; +-} +- +-void PasswordHealth::adjustScore(int amount) +-{ +- m_score += amount; +-} +- +-QString PasswordHealth::scoreReason() const +-{ +- return m_scoreReasons.join("\n"); +-} +- +-void PasswordHealth::addScoreReason(QString reason) +-{ +- m_scoreReasons << reason; +-} +- +-QString PasswordHealth::scoreDetails() const +-{ +- return m_scoreDetails.join("\n"); +-} +- +-void PasswordHealth::addScoreDetails(QString details) +-{ +- m_scoreDetails.append(details); +-} +- +-PasswordHealth::Quality PasswordHealth::quality() const +-{ +- if (m_score <= 0) { +- return Quality::Bad; +- } else if (m_score < 40) { +- return Quality::Poor; +- } else if (m_score < 65) { +- return Quality::Weak; +- } else if (m_score < 100) { +- return Quality::Good; +- } +- return Quality::Excellent; +-} +- +-/** +- * This class provides additional information about password health +- * than can be derived from the password itself (re-use, expiry). +- */ +-HealthChecker::HealthChecker(QSharedPointer db) +-{ +- // Build the cache of re-used passwords +- for (const auto* entry : db->rootGroup()->entriesRecursive()) { +- if (!entry->isRecycled() && !entry->isAttributeReference("Password")) { +- m_reuse[entry->password()] +- << QApplication::tr("Used in %1/%2").arg(entry->group()->hierarchy().join('/'), entry->title()); +- } +- } +-} +- +-/** +- * Call operator of the Health Checker class. +- * +- * Returns the health of the password in `entry`, considering +- * password entropy, re-use, expiration, etc. +- */ +-QSharedPointer HealthChecker::evaluate(const Entry* entry) const +-{ +- // Pointer sanity check +- if (!entry) { +- return {}; +- } +- +- // First analyse the password itself +- const auto pwd = entry->password(); +- auto health = QSharedPointer(new PasswordHealth(pwd)); +- +- // Second, if the password is in the database more than once, +- // reduce the score accordingly +- const auto& used = m_reuse[pwd]; +- const auto count = used.size(); +- if (count > 1) { +- constexpr auto penalty = 15; +- health->adjustScore(-penalty * (count - 1)); +- health->addScoreReason(QApplication::tr("Password is used %1 times").arg(QString::number(count))); +- // Add the first 20 uses of the password to prevent the details display from growing too large +- for (int i = 0; i < used.size(); ++i) { +- health->addScoreDetails(used[i]); +- if (i == 19) { +- health->addScoreDetails("…"); +- break; +- } +- } +- +- // Don't allow re-used passwords to be considered "good" +- // no matter how great their entropy is. +- if (health->score() > 64) { +- health->setScore(64); +- } +- } +- +- // Third, if the password has already expired, reduce score to 0; +- // or, if the password is going to expire in the next 30 days, +- // reduce score by 2 points per day. +- if (entry->isExpired()) { +- health->setScore(0); +- health->addScoreReason(QApplication::tr("Password has expired")); +- health->addScoreDetails(QApplication::tr("Password expiry was %1") +- .arg(entry->timeInfo().expiryTime().toString(Qt::DefaultLocaleShortDate))); +- } else if (entry->timeInfo().expires()) { +- const auto days = QDateTime::currentDateTime().daysTo(entry->timeInfo().expiryTime()); +- if (days <= 30) { +- // First bring the score down into the "weak" range +- // so that the entry appears in Health Check. Then +- // reduce the score by 2 points for every day that +- // we get closer to expiry. days<=0 has already +- // been handled above ("isExpired()"). +- if (health->score() > 60) { +- health->setScore(60); +- } +- // clang-format off +- health->adjustScore((30 - days) * -2); +- health->addScoreReason(days <= 2 ? QApplication::tr("Password is about to expire") +- : days <= 10 ? QApplication::tr("Password expires in %1 days").arg(days) +- : QApplication::tr("Password will expire soon")); +- health->addScoreDetails(QApplication::tr("Password expires on %1") +- .arg(entry->timeInfo().expiryTime().toString(Qt::DefaultLocaleShortDate))); +- //clang-format on +- } +- } +- +- // Return the result +- return health; +-} +diff -urNr keepassxc-2.6.4-orig/src/core/PasswordHealth.h keepassxc-2.6.4-patched/src/core/PasswordHealth.h +--- keepassxc-2.6.4-orig/src/core/PasswordHealth.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/PasswordHealth.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,119 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_PASSWORDHEALTH_H +-#define KEEPASSX_PASSWORDHEALTH_H +- +-#include +-#include +-#include +- +-class Database; +-class Entry; +- +-/** +- * Health status of a single password. +- * +- * @see HealthChecker +- */ +-class PasswordHealth +-{ +-public: +- explicit PasswordHealth(double entropy); +- explicit PasswordHealth(QString pwd); +- +- /* +- * The password score is defined to be the greater the better +- * (more secure) the password is. It doesn't have a dimension, +- * there are no defined maximum or minimum values, and score +- * values may change with different versions of the software. +- */ +- int score() const +- { +- return m_score; +- } +- +- void setScore(int score); +- void adjustScore(int amount); +- +- /* +- * A text description for the password's quality assessment +- * (translated into the application language), and additional +- * information. Empty if nothing is wrong with the password. +- * May contain more than line, separated by '\n'. +- */ +- QString scoreReason() const; +- void addScoreReason(QString reason); +- +- QString scoreDetails() const; +- void addScoreDetails(QString details); +- +- /* +- * The password quality assessment (based on the score). +- */ +- enum class Quality +- { +- Bad, +- Poor, +- Weak, +- Good, +- Excellent +- }; +- Quality quality() const; +- +- /* +- * The password's raw entropy value, in bits. +- */ +- double entropy() const +- { +- return m_entropy; +- } +- +- /** +- * Name of custom data field that holds the "this is a known +- * bad password" flag. Legal values of the field are TRUE_STR +- * and FALSE_STR, the default (used if the field doesn't exist) +- * is false. +- */ +- static const QString OPTION_KNOWN_BAD; +- +-private: +- int m_score = 0; +- double m_entropy = 0.0; +- QStringList m_scoreReasons; +- QStringList m_scoreDetails; +-}; +- +-/** +- * Password health check for all entries of a database. +- * +- * @see PasswordHealth +- */ +-class HealthChecker +-{ +-public: +- explicit HealthChecker(QSharedPointer); +- +- // Get the health status of an entry in the database +- QSharedPointer evaluate(const Entry* entry) const; +- +-private: +- // To determine password re-use: first = password, second = entries that use it +- QHash m_reuse; +-}; +- +-#endif // KEEPASSX_PASSWORDHEALTH_H +diff -urNr keepassxc-2.6.4-orig/src/core/Resources.cpp keepassxc-2.6.4-patched/src/core/Resources.cpp +--- keepassxc-2.6.4-orig/src/core/Resources.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/Resources.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,308 +0,0 @@ +-/* +- * Copyright (C) 2020 KeePassXC Team +- * Copyright (C) 2011 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "Resources.h" +- +-#include +-#include +-#include +-#include +-#include +-#include +- +-#include "config-keepassx.h" +-#include "core/Config.h" +-#include "core/Global.h" +-#include "gui/MainWindow.h" +-#include "gui/osutils/OSUtils.h" +- +-class AdaptiveIconEngine : public QIconEngine +-{ +-public: +- explicit AdaptiveIconEngine(QIcon baseIcon); +- void paint(QPainter* painter, const QRect& rect, QIcon::Mode mode, QIcon::State state) override; +- QPixmap pixmap(const QSize& size, QIcon::Mode mode, QIcon::State state) override; +- QIconEngine* clone() const override; +- +-private: +- QIcon m_baseIcon; +-}; +- +-Resources* Resources::m_instance(nullptr); +- +-QString Resources::dataPath(const QString& name) const +-{ +- if (name.isEmpty() || name.startsWith('/')) { +- return m_dataPath + name; +- } +- return m_dataPath + "/" + name; +-} +- +-QString Resources::pluginPath(const QString& name) const +-{ +- QStringList pluginPaths; +- +- QDir buildDir(QCoreApplication::applicationDirPath() + "/autotype"); +- const QStringList buildDirEntryList = buildDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot); +- for (const QString& dir : buildDirEntryList) { +- pluginPaths << QCoreApplication::applicationDirPath() + "/autotype/" + dir; +- } +- +- // for TestAutoType +- pluginPaths << QCoreApplication::applicationDirPath() + "/../src/autotype/test"; +- +-#if defined(Q_OS_MACOS) && defined(WITH_APP_BUNDLE) +- pluginPaths << QCoreApplication::applicationDirPath() + "/../PlugIns"; +-#endif +- +- pluginPaths << QCoreApplication::applicationDirPath(); +- +- QString configuredPluginDir = KEEPASSX_PLUGIN_DIR; +- if (configuredPluginDir != ".") { +- if (QDir(configuredPluginDir).isAbsolute()) { +- pluginPaths << configuredPluginDir; +- } else { +- QString relativePluginDir = +- QStringLiteral("%1/../%2").arg(QCoreApplication::applicationDirPath(), configuredPluginDir); +- pluginPaths << QDir(relativePluginDir).canonicalPath(); +- +- QString absolutePluginDir = QStringLiteral("%1/%2").arg(KEEPASSX_PREFIX_DIR, configuredPluginDir); +- pluginPaths << QDir(absolutePluginDir).canonicalPath(); +- } +- } +- +- QStringList dirFilter; +- dirFilter << QStringLiteral("*%1*").arg(name); +- +- for (const QString& path : asConst(pluginPaths)) { +- const QStringList fileCandidates = QDir(path).entryList(dirFilter, QDir::Files); +- +- for (const QString& file : fileCandidates) { +- QString filePath = path + "/" + file; +- +- if (QLibrary::isLibrary(filePath)) { +- return filePath; +- } +- } +- } +- +- return {}; +-} +- +-QString Resources::wordlistPath(const QString& name) const +-{ +- return dataPath(QStringLiteral("wordlists/%1").arg(name)); +-} +- +-QIcon Resources::applicationIcon() +-{ +- return icon("keepassxc", false); +-} +- +-QString Resources::trayIconAppearance() const +-{ +- auto iconAppearance = config()->get(Config::GUI_TrayIconAppearance).toString(); +- if (iconAppearance.isNull()) { +-#ifdef Q_OS_MACOS +- iconAppearance = osUtils->isDarkMode() ? "monochrome-light" : "monochrome-dark"; +-#else +- iconAppearance = "monochrome-light"; +-#endif +- } +- return iconAppearance; +-} +- +-QIcon Resources::trayIcon(QString style) +-{ +- if (style == "unlocked") { +- style.clear(); +- } +- if (!style.isEmpty()) { +- style = "-" + style; +- } +- +- auto iconApperance = trayIconAppearance(); +- if (!iconApperance.startsWith("monochrome")) { +- return icon(QString("keepassxc%1").arg(style), false); +- } +- +- QIcon i; +-#if defined(Q_OS_MACOS) || defined(Q_OS_WIN) +- if (osUtils->isStatusBarDark()) { +- i = icon(QString("keepassxc-monochrome-light%1").arg(style), false); +- } else { +- i = icon(QString("keepassxc-monochrome-dark%1").arg(style), false); +- } +-#else +- i = icon(QString("keepassxc-%1%2").arg(iconApperance, style), false); +-#endif +-#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) +- // Set as mask to allow the operating system to recolour the tray icon. This may look weird +- // if we failed to detect the status bar background colour correctly, but it is certainly +- // better than a barely visible icon and even if we did guess correctly, it allows for better +- // integration should the system's preferred colours not be 100% black or white. +- i.setIsMask(true); +-#endif +- return i; +-} +- +-QIcon Resources::trayIconLocked() +-{ +- return trayIcon("locked"); +-} +- +-QIcon Resources::trayIconUnlocked() +-{ +- return trayIcon("unlocked"); +-} +- +-AdaptiveIconEngine::AdaptiveIconEngine(QIcon baseIcon) +- : QIconEngine() +- , m_baseIcon(std::move(baseIcon)) +-{ +-} +- +-void AdaptiveIconEngine::paint(QPainter* painter, const QRect& rect, QIcon::Mode mode, QIcon::State state) +-{ +- // Temporary image canvas to ensure that the background is transparent and alpha blending works. +-#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) +- auto scale = painter->device()->devicePixelRatioF(); +-#else +- auto scale = painter->device()->devicePixelRatio(); +-#endif +- QImage img(rect.size() * scale, QImage::Format_ARGB32_Premultiplied); +- img.fill(0); +- QPainter p(&img); +- +- m_baseIcon.paint(&p, img.rect(), Qt::AlignCenter, mode, state); +- +- if (getMainWindow()) { +- QPalette palette = getMainWindow()->palette(); +- p.setCompositionMode(QPainter::CompositionMode_SourceIn); +- +- if (mode == QIcon::Active) { +- p.fillRect(img.rect(), palette.color(QPalette::Active, QPalette::ButtonText)); +- } else if (mode == QIcon::Selected) { +- p.fillRect(img.rect(), palette.color(QPalette::Active, QPalette::HighlightedText)); +- } else if (mode == QIcon::Disabled) { +- p.fillRect(img.rect(), palette.color(QPalette::Disabled, QPalette::WindowText)); +- } else { +- p.fillRect(img.rect(), palette.color(QPalette::Normal, QPalette::WindowText)); +- } +- } +- +- painter->drawImage(rect, img); +-} +- +-QPixmap AdaptiveIconEngine::pixmap(const QSize& size, QIcon::Mode mode, QIcon::State state) +-{ +- QImage img(size, QImage::Format_ARGB32_Premultiplied); +- img.fill(0); +- QPainter painter(&img); +- paint(&painter, QRect(0, 0, size.width(), size.height()), mode, state); +- return QPixmap::fromImage(img, Qt::ImageConversionFlag::NoFormatConversion); +-} +- +-QIconEngine* AdaptiveIconEngine::clone() const +-{ +- return new AdaptiveIconEngine(m_baseIcon); +-} +- +-QIcon Resources::icon(const QString& name, bool recolor, const QColor& overrideColor) +-{ +-#ifdef Q_OS_LINUX +- // Resetting the application theme name before calling QIcon::fromTheme() is required for hacky +- // QPA platform themes such as qt5ct, which randomly mess with the configured icon theme. +- // If we do not reset the theme name here, it will become empty at some point, causing +- // Qt to look for icons at the user-level and global default locations. +- // +- // See issue #4963: https://github.com/keepassxreboot/keepassxc/issues/4963 +- // and qt5ct issue #80: https://sourceforge.net/p/qt5ct/tickets/80/ +- QIcon::setThemeName("application"); +-#endif +- +- QString cacheName = +- QString("%1:%2:%3").arg(recolor ? "1" : "0", overrideColor.isValid() ? overrideColor.name() : "#", name); +- QIcon icon = m_iconCache.value(cacheName); +- +- if (!icon.isNull() && !overrideColor.isValid()) { +- return icon; +- } +- +- icon = QIcon::fromTheme(name); +- if (recolor) { +- icon = QIcon(new AdaptiveIconEngine(icon)); +-#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) +- icon.setIsMask(true); +-#endif +- } +- +- m_iconCache.insert(cacheName, icon); +- return icon; +-} +- +-QIcon Resources::onOffIcon(const QString& name, bool on, bool recolor) +-{ +- return icon(name + (on ? "-on" : "-off"), recolor); +-} +- +-Resources::Resources() +-{ +- const QString appDirPath = QCoreApplication::applicationDirPath(); +-#if defined(Q_OS_UNIX) && !(defined(Q_OS_MACOS) && defined(WITH_APP_BUNDLE)) +- trySetResourceDir(KEEPASSX_DATA_DIR) || trySetResourceDir(QString("%1/../%2").arg(appDirPath, KEEPASSX_DATA_DIR)) +- || trySetResourceDir(QString("%1/%2").arg(KEEPASSX_PREFIX_DIR, KEEPASSX_DATA_DIR)); +-#elif defined(Q_OS_MACOS) && defined(WITH_APP_BUNDLE) +- trySetResourceDir(appDirPath + QStringLiteral("/../Resources")); +-#elif defined(Q_OS_WIN) +- trySetResourceDir(appDirPath + QStringLiteral("/share")); +-#endif +- +- if (m_dataPath.isEmpty()) { +- // Last ditch check if we are running from inside the src or test build directory +- trySetResourceDir(appDirPath + QStringLiteral("/../share")) +- || trySetResourceDir(appDirPath + QStringLiteral("/../../share")); +- } +- +- if (m_dataPath.isEmpty()) { +- qWarning("Resources::DataPath: can't find data dir"); +- } +-} +- +-bool Resources::trySetResourceDir(const QString& path) +-{ +- QDir dir(path); +- if (dir.exists()) { +- m_dataPath = dir.canonicalPath(); +- return true; +- } +- return false; +-} +- +-Resources* Resources::instance() +-{ +- if (!m_instance) { +- m_instance = new Resources(); +- +- Q_INIT_RESOURCE(icons); +- QIcon::setThemeSearchPaths(QStringList{":/icons"} << QIcon::themeSearchPaths()); +- QIcon::setThemeName("application"); +- } +- +- return m_instance; +-} +diff -urNr keepassxc-2.6.4-orig/src/core/Resources.h keepassxc-2.6.4-patched/src/core/Resources.h +--- keepassxc-2.6.4-orig/src/core/Resources.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/Resources.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,60 +0,0 @@ +-/* +- * Copyright (C) 2020 KeePassXC Team +- * Copyright (C) 2011 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_RESOURCES_H +-#define KEEPASSX_RESOURCES_H +- +-#include +-#include +-#include +-#include +- +-class Resources +-{ +-public: +- QString dataPath(const QString& name) const; +- QString pluginPath(const QString& name) const; +- QString wordlistPath(const QString& name) const; +- QIcon applicationIcon(); +- QIcon trayIcon(QString style = "unlocked"); +- QIcon trayIconLocked(); +- QIcon trayIconUnlocked(); +- QString trayIconAppearance() const; +- QIcon icon(const QString& name, bool recolor = true, const QColor& overrideColor = QColor::Invalid); +- QIcon onOffIcon(const QString& name, bool on, bool recolor = true); +- +- static Resources* instance(); +- +-private: +- Resources(); +- bool trySetResourceDir(const QString& path); +- +- static Resources* m_instance; +- +- QString m_dataPath; +- QHash m_iconCache; +- +- Q_DISABLE_COPY(Resources) +-}; +- +-inline Resources* resources() +-{ +- return Resources::instance(); +-} +- +-#endif // KEEPASSX_RESOURCES_H +diff -urNr keepassxc-2.6.4-orig/src/core/ScreenLockListener.cpp keepassxc-2.6.4-patched/src/core/ScreenLockListener.cpp +--- keepassxc-2.6.4-orig/src/core/ScreenLockListener.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/ScreenLockListener.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,30 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "ScreenLockListener.h" +-#include "ScreenLockListenerPrivate.h" +- +-ScreenLockListener::ScreenLockListener(QWidget* parent) +- : QObject(parent) +-{ +- m_listener = ScreenLockListenerPrivate::instance(parent); +- connect(m_listener, SIGNAL(screenLocked()), this, SIGNAL(screenLocked())); +-} +- +-ScreenLockListener::~ScreenLockListener() +-{ +-} +diff -urNr keepassxc-2.6.4-orig/src/core/ScreenLockListenerDBus.cpp keepassxc-2.6.4-patched/src/core/ScreenLockListenerDBus.cpp +--- keepassxc-2.6.4-orig/src/core/ScreenLockListenerDBus.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/ScreenLockListenerDBus.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,132 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "ScreenLockListenerDBus.h" +- +-#include +-#include +-#include +-#include +-#include +-#include +- +-ScreenLockListenerDBus::ScreenLockListenerDBus(QWidget* parent) +- : ScreenLockListenerPrivate(parent) +-{ +- QDBusConnection sessionBus = QDBusConnection::sessionBus(); +- QDBusConnection systemBus = QDBusConnection::systemBus(); +- +- sessionBus.connect("org.freedesktop.ScreenSaver", // service +- "/org/freedesktop/ScreenSaver", // path +- "org.freedesktop.ScreenSaver", // interface +- "ActiveChanged", // signal name +- this, // receiver +- SLOT(freedesktopScreenSaver(bool))); +- +- sessionBus.connect("org.gnome.ScreenSaver", // service +- "/org/gnome/ScreenSaver", // path +- "org.gnome.ScreenSaver", // interface +- "ActiveChanged", // signal name +- this, // receiver +- SLOT(freedesktopScreenSaver(bool))); +- +- sessionBus.connect("org.gnome.SessionManager", // service +- "/org/gnome/SessionManager/Presence", // path +- "org.gnome.SessionManager.Presence", // interface +- "StatusChanged", // signal name +- this, // receiver +- SLOT(gnomeSessionStatusChanged(uint))); +- +- sessionBus.connect("org.xfce.ScreenSaver", // service +- "/org/xfce/ScreenSaver", // path +- "org.xfce.ScreenSaver", // interface +- "ActiveChanged", // signal name +- this, // receiver +- SLOT(freedesktopScreenSaver(bool))); +- +- systemBus.connect("org.freedesktop.login1", // service +- "/org/freedesktop/login1", // path +- "org.freedesktop.login1.Manager", // interface +- "PrepareForSleep", // signal name +- this, // receiver +- SLOT(logindPrepareForSleep(bool))); +- +- QString sessionId = QProcessEnvironment::systemEnvironment().value("XDG_SESSION_ID"); +- QDBusInterface loginManager("org.freedesktop.login1", // service +- "/org/freedesktop/login1", // path +- "org.freedesktop.login1.Manager", // interface +- systemBus); +- if (loginManager.isValid()) { +- QList args = {sessionId}; +- loginManager.callWithCallback("GetSession", args, this, SLOT(login1SessionObjectReceived(QDBusMessage))); +- } +- +- sessionBus.connect("com.canonical.Unity", // service +- "/com/canonical/Unity/Session", // path +- "com.canonical.Unity.Session", // interface +- "Locked", // signal name +- this, // receiver +- SLOT(unityLocked())); +-} +- +-void ScreenLockListenerDBus::login1SessionObjectReceived(QDBusMessage response) +-{ +- if (response.arguments().isEmpty()) { +- qDebug() << "org.freedesktop.login1.Manager.GetSession did not return results"; +- return; +- } +- QVariant arg0 = response.arguments().at(0); +- if (!arg0.canConvert()) { +- qDebug() << "org.freedesktop.login1.Manager.GetSession did not return a QDBusObjectPath"; +- return; +- } +- QDBusObjectPath path = arg0.value(); +- QDBusConnection systemBus = QDBusConnection::systemBus(); +- +- systemBus.connect("", // service +- path.path(), // path +- "org.freedesktop.login1.Session", // interface +- "Lock", // signal name +- this, // receiver +- SLOT(unityLocked())); +-} +- +-void ScreenLockListenerDBus::gnomeSessionStatusChanged(uint status) +-{ +- if (status != 0) { +- emit screenLocked(); +- } +-} +- +-void ScreenLockListenerDBus::logindPrepareForSleep(bool beforeSleep) +-{ +- if (beforeSleep) { +- emit screenLocked(); +- } +-} +- +-void ScreenLockListenerDBus::unityLocked() +-{ +- emit screenLocked(); +-} +- +-void ScreenLockListenerDBus::freedesktopScreenSaver(bool status) +-{ +- if (status) { +- emit screenLocked(); +- } +-} +diff -urNr keepassxc-2.6.4-orig/src/core/ScreenLockListenerDBus.h keepassxc-2.6.4-patched/src/core/ScreenLockListenerDBus.h +--- keepassxc-2.6.4-orig/src/core/ScreenLockListenerDBus.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/ScreenLockListenerDBus.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,39 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef SCREENLOCKLISTENERDBUS_H +-#define SCREENLOCKLISTENERDBUS_H +-#include "ScreenLockListenerPrivate.h" +-#include +-#include +-#include +- +-class ScreenLockListenerDBus : public ScreenLockListenerPrivate +-{ +- Q_OBJECT +-public: +- explicit ScreenLockListenerDBus(QWidget* parent = nullptr); +- +-private slots: +- void gnomeSessionStatusChanged(uint status); +- void logindPrepareForSleep(bool beforeSleep); +- void unityLocked(); +- void freedesktopScreenSaver(bool status); +- void login1SessionObjectReceived(QDBusMessage); +-}; +- +-#endif // SCREENLOCKLISTENERDBUS_H +diff -urNr keepassxc-2.6.4-orig/src/core/ScreenLockListener.h keepassxc-2.6.4-patched/src/core/ScreenLockListener.h +--- keepassxc-2.6.4-orig/src/core/ScreenLockListener.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/ScreenLockListener.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,39 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef SCREENLOCKLISTENER_H +-#define SCREENLOCKLISTENER_H +-#include +- +-class ScreenLockListenerPrivate; +- +-class ScreenLockListener : public QObject +-{ +- Q_OBJECT +- +-public: +- ScreenLockListener(QWidget* parent = nullptr); +- ~ScreenLockListener(); +- +-signals: +- void screenLocked(); +- +-private: +- ScreenLockListenerPrivate* m_listener; +-}; +- +-#endif // SCREENLOCKLISTENER_H +diff -urNr keepassxc-2.6.4-orig/src/core/ScreenLockListenerMac.cpp keepassxc-2.6.4-patched/src/core/ScreenLockListenerMac.cpp +--- keepassxc-2.6.4-orig/src/core/ScreenLockListenerMac.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/ScreenLockListenerMac.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,65 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "ScreenLockListenerMac.h" +- +-#include +-#include +- +-ScreenLockListenerMac* ScreenLockListenerMac::instance() +-{ +- static QMutex mutex; +- QMutexLocker lock(&mutex); +- +- static ScreenLockListenerMac* m_ptr = nullptr; +- if (m_ptr == nullptr) { +- m_ptr = new ScreenLockListenerMac(); +- } +- return m_ptr; +-} +- +-void ScreenLockListenerMac::notificationCenterCallBack(CFNotificationCenterRef, +- void*, +- CFStringRef, +- const void*, +- CFDictionaryRef) +-{ +- instance()->onSignalReception(); +-} +- +-ScreenLockListenerMac::ScreenLockListenerMac(QWidget* parent) +- : ScreenLockListenerPrivate(parent) +-{ +- CFNotificationCenterRef distCenter; +- CFStringRef screenIsLockedSignal = CFSTR("com.apple.screenIsLocked"); +- distCenter = CFNotificationCenterGetDistributedCenter(); +- if (nullptr == distCenter) { +- return; +- } +- +- CFNotificationCenterAddObserver(distCenter, +- this, +- &ScreenLockListenerMac::notificationCenterCallBack, +- screenIsLockedSignal, +- nullptr, +- CFNotificationSuspensionBehaviorDeliverImmediately); +-} +- +-void ScreenLockListenerMac::onSignalReception() +-{ +- emit screenLocked(); +-} +diff -urNr keepassxc-2.6.4-orig/src/core/ScreenLockListenerMac.h keepassxc-2.6.4-patched/src/core/ScreenLockListenerMac.h +--- keepassxc-2.6.4-orig/src/core/ScreenLockListenerMac.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/ScreenLockListenerMac.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,44 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef SCREENLOCKLISTENERMAC_H +-#define SCREENLOCKLISTENERMAC_H +-#include +-#include +- +-#include +- +-#include "ScreenLockListenerPrivate.h" +- +-class ScreenLockListenerMac : public ScreenLockListenerPrivate +-{ +- Q_OBJECT +- +-public: +- static ScreenLockListenerMac* instance(); +- static void notificationCenterCallBack(CFNotificationCenterRef center, +- void* observer, +- CFStringRef name, +- const void* object, +- CFDictionaryRef userInfo); +- +-private: +- ScreenLockListenerMac(QWidget* parent = nullptr); +- void onSignalReception(); +-}; +- +-#endif // SCREENLOCKLISTENERMAC_H +diff -urNr keepassxc-2.6.4-orig/src/core/ScreenLockListenerPrivate.cpp keepassxc-2.6.4-patched/src/core/ScreenLockListenerPrivate.cpp +--- keepassxc-2.6.4-orig/src/core/ScreenLockListenerPrivate.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/ScreenLockListenerPrivate.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,42 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "ScreenLockListenerPrivate.h" +-#if defined(Q_OS_MACOS) +-#include "ScreenLockListenerMac.h" +-#elif defined(Q_OS_UNIX) +-#include "ScreenLockListenerDBus.h" +-#elif defined(Q_OS_WIN) +-#include "ScreenLockListenerWin.h" +-#endif +- +-ScreenLockListenerPrivate::ScreenLockListenerPrivate(QWidget* parent) +- : QObject(parent) +-{ +-} +- +-ScreenLockListenerPrivate* ScreenLockListenerPrivate::instance(QWidget* parent) +-{ +-#if defined(Q_OS_MACOS) +- Q_UNUSED(parent); +- return ScreenLockListenerMac::instance(); +-#elif defined(Q_OS_UNIX) +- return new ScreenLockListenerDBus(parent); +-#elif defined(Q_OS_WIN) +- return new ScreenLockListenerWin(parent); +-#endif +-} +diff -urNr keepassxc-2.6.4-orig/src/core/ScreenLockListenerPrivate.h keepassxc-2.6.4-patched/src/core/ScreenLockListenerPrivate.h +--- keepassxc-2.6.4-orig/src/core/ScreenLockListenerPrivate.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/ScreenLockListenerPrivate.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,36 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef SCREENLOCKLISTENERPRIVATE_H +-#define SCREENLOCKLISTENERPRIVATE_H +-#include +-#include +- +-class ScreenLockListenerPrivate : public QObject +-{ +- Q_OBJECT +-public: +- static ScreenLockListenerPrivate* instance(QWidget* parent = nullptr); +- +-protected: +- ScreenLockListenerPrivate(QWidget* parent = nullptr); +- +-signals: +- void screenLocked(); +-}; +- +-#endif // SCREENLOCKLISTENERPRIVATE_H +diff -urNr keepassxc-2.6.4-orig/src/core/ScreenLockListenerWin.cpp keepassxc-2.6.4-patched/src/core/ScreenLockListenerWin.cpp +--- keepassxc-2.6.4-orig/src/core/ScreenLockListenerWin.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/ScreenLockListenerWin.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,88 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "ScreenLockListenerWin.h" +-#include +-#include +-#include +- +-/* +- * See https://msdn.microsoft.com/en-us/library/windows/desktop/aa373196(v=vs.85).aspx +- * See https://msdn.microsoft.com/en-us/library/aa383841(v=vs.85).aspx +- * See https://blogs.msdn.microsoft.com/oldnewthing/20060104-50/?p=32783 +- */ +-ScreenLockListenerWin::ScreenLockListenerWin(QWidget* parent) +- : ScreenLockListenerPrivate(parent) +- , QAbstractNativeEventFilter() +-{ +- Q_ASSERT(parent != nullptr); +- // On windows, we need to register for platform specific messages and +- // install a message handler for them +- QCoreApplication::instance()->installNativeEventFilter(this); +- +- // This call requests a notification from windows when a laptop is closed +- HPOWERNOTIFY hPnotify = RegisterPowerSettingNotification( +- reinterpret_cast(parent->winId()), &GUID_LIDSWITCH_STATE_CHANGE, DEVICE_NOTIFY_WINDOW_HANDLE); +- m_powerNotificationHandle = reinterpret_cast(hPnotify); +- +- // This call requests a notification for session changes +- if (!WTSRegisterSessionNotification(reinterpret_cast(parent->winId()), NOTIFY_FOR_THIS_SESSION)) { +- } +-} +- +-ScreenLockListenerWin::~ScreenLockListenerWin() +-{ +- HWND h = reinterpret_cast(static_cast(parent())->winId()); +- WTSUnRegisterSessionNotification(h); +- +- if (m_powerNotificationHandle) { +- UnregisterPowerSettingNotification(reinterpret_cast(m_powerNotificationHandle)); +- } +-} +- +-bool ScreenLockListenerWin::nativeEventFilter(const QByteArray& eventType, void* message, long*) +-{ +- if (eventType == "windows_generic_MSG" || eventType == "windows_dispatcher_MSG") { +- MSG* m = static_cast(message); +- if (m->message == WM_POWERBROADCAST) { +- if (m->wParam == PBT_POWERSETTINGCHANGE) { +- const POWERBROADCAST_SETTING* setting = reinterpret_cast(m->lParam); +- if (setting != nullptr && setting->PowerSetting == GUID_LIDSWITCH_STATE_CHANGE) { +- const DWORD* state = reinterpret_cast(&setting->Data); +- if (*state == 0) { +- emit screenLocked(); +- return true; +- } +- } +- } else if (m->wParam == PBT_APMSUSPEND) { +- emit screenLocked(); +- return true; +- } +- } +- if (m->message == WM_WTSSESSION_CHANGE) { +- if (m->wParam == WTS_CONSOLE_DISCONNECT) { +- emit screenLocked(); +- return true; +- } +- if (m->wParam == WTS_SESSION_LOCK) { +- emit screenLocked(); +- return true; +- } +- } +- } +- return false; +-} +diff -urNr keepassxc-2.6.4-orig/src/core/ScreenLockListenerWin.h keepassxc-2.6.4-patched/src/core/ScreenLockListenerWin.h +--- keepassxc-2.6.4-orig/src/core/ScreenLockListenerWin.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/ScreenLockListenerWin.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,38 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef SCREENLOCKLISTENERWIN_H +-#define SCREENLOCKLISTENERWIN_H +-#include +-#include +-#include +- +-#include "ScreenLockListenerPrivate.h" +- +-class ScreenLockListenerWin : public ScreenLockListenerPrivate, public QAbstractNativeEventFilter +-{ +- Q_OBJECT +-public: +- explicit ScreenLockListenerWin(QWidget* parent = nullptr); +- ~ScreenLockListenerWin(); +- bool nativeEventFilter(const QByteArray& eventType, void* message, long*) override; +- +-private: +- void* m_powerNotificationHandle; +-}; +- +-#endif // SCREENLOCKLISTENERWIN_H +diff -urNr keepassxc-2.6.4-orig/src/core/SignalMultiplexer.cpp keepassxc-2.6.4-patched/src/core/SignalMultiplexer.cpp +--- keepassxc-2.6.4-orig/src/core/SignalMultiplexer.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/SignalMultiplexer.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,148 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "SignalMultiplexer.h" +- +-#include "core/Global.h" +- +-SignalMultiplexer::SignalMultiplexer() +-{ +-} +- +-SignalMultiplexer::~SignalMultiplexer() +-{ +- // disconnect all connections +- setCurrentObject(nullptr); +-} +- +-QObject* SignalMultiplexer::currentObject() const +-{ +- return m_currentObject; +-} +- +-void SignalMultiplexer::setCurrentObject(QObject* object) +-{ +- // remove all Connections from the list whose senders/receivers have been deleted +- QMutableListIterator i = m_connections; +- while (i.hasNext()) { +- const Connection& con = i.next(); +- +- if (!con.sender && !con.receiver) { +- i.remove(); +- } +- } +- +- if (m_currentObject) { +- for (const Connection& con : asConst(m_connections)) { +- disconnect(con); +- } +- } +- +- m_currentObject = object; +- +- if (object) { +- for (const Connection& con : asConst(m_connections)) { +- connect(con); +- } +- } +-} +- +-void SignalMultiplexer::connect(QObject* sender, const char* signal, const char* slot) +-{ +- Q_ASSERT(sender); +- +- Connection con; +- con.slot = slot; +- con.sender = sender; +- con.signal = signal; +- m_connections << con; +- +- if (m_currentObject) { +- connect(con); +- } +-} +- +-void SignalMultiplexer::connect(const char* signal, QObject* receiver, const char* slot) +-{ +- Q_ASSERT(receiver); +- +- Connection con; +- con.receiver = receiver; +- con.signal = signal; +- con.slot = slot; +- m_connections << con; +- +- if (m_currentObject) { +- connect(con); +- } +-} +- +-void SignalMultiplexer::disconnect(QObject* sender, const char* signal, const char* slot) +-{ +- Q_ASSERT(sender); +- +- QMutableListIterator i = m_connections; +- while (i.hasNext()) { +- const Connection& con = i.next(); +- +- if (con.sender == sender && qstrcmp(con.signal, signal) == 0 && qstrcmp(con.slot, slot) == 0) { +- if (m_currentObject) { +- disconnect(con); +- } +- i.remove(); +- } +- } +-} +- +-void SignalMultiplexer::disconnect(const char* signal, QObject* receiver, const char* slot) +-{ +- Q_ASSERT(receiver); +- +- QMutableListIterator i = m_connections; +- while (i.hasNext()) { +- const Connection& con = i.next(); +- +- if (con.receiver == receiver && qstrcmp(con.signal, signal) == 0 && qstrcmp(con.slot, slot) == 0) { +- if (m_currentObject) { +- disconnect(con); +- } +- i.remove(); +- } +- } +-} +- +-void SignalMultiplexer::connect(const Connection& con) +-{ +- Q_ASSERT(con.sender || con.receiver); +- +- if (con.sender) { +- QObject::connect(con.sender, con.signal, m_currentObject, con.slot); +- } else { +- QObject::connect(m_currentObject, con.signal, con.receiver, con.slot); +- } +-} +- +-void SignalMultiplexer::disconnect(const Connection& con) +-{ +- Q_ASSERT(con.sender || con.receiver); +- +- if (con.sender) { +- QObject::disconnect(con.sender, con.signal, m_currentObject, con.slot); +- } else { +- QObject::disconnect(m_currentObject, con.signal, con.receiver, con.slot); +- } +-} +diff -urNr keepassxc-2.6.4-orig/src/core/SignalMultiplexer.h keepassxc-2.6.4-patched/src/core/SignalMultiplexer.h +--- keepassxc-2.6.4-orig/src/core/SignalMultiplexer.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/SignalMultiplexer.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,56 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_SIGNALMULTIPLEXER_H +-#define KEEPASSX_SIGNALMULTIPLEXER_H +- +-#include +-#include +- +-class SignalMultiplexer +-{ +-public: +- SignalMultiplexer(); +- ~SignalMultiplexer(); +- QObject* currentObject() const; +- void setCurrentObject(QObject* object); +- +- void connect(QObject* sender, const char* signal, const char* slot); +- void disconnect(QObject* sender, const char* signal, const char* slot); +- +- void connect(const char* signal, QObject* receiver, const char* slot); +- void disconnect(const char* signal, QObject* receiver, const char* slot); +- +-private: +- struct Connection +- { +- QPointer sender; +- QPointer receiver; +- const char* signal; +- const char* slot; +- }; +- +- void connect(const Connection& con); +- void disconnect(const Connection& con); +- +- QPointer m_currentObject; +- QList m_connections; +- +- Q_DISABLE_COPY(SignalMultiplexer) +-}; +- +-#endif // KEEPASSX_SIGNALMULTIPLEXER_H +diff -urNr keepassxc-2.6.4-orig/src/core/TimeDelta.cpp keepassxc-2.6.4-patched/src/core/TimeDelta.cpp +--- keepassxc-2.6.4-orig/src/core/TimeDelta.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/TimeDelta.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,69 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "TimeDelta.h" +- +-#include +- +-QDateTime operator+(const QDateTime& dateTime, const TimeDelta& delta) +-{ +- return dateTime.addDays(delta.getDays()).addMonths(delta.getMonths()).addYears(delta.getYears()); +-} +- +-TimeDelta TimeDelta::fromDays(int days) +-{ +- return TimeDelta(days, 0, 0); +-} +- +-TimeDelta TimeDelta::fromMonths(int months) +-{ +- return TimeDelta(0, months, 0); +-} +- +-TimeDelta TimeDelta::fromYears(int years) +-{ +- return TimeDelta(0, 0, years); +-} +- +-TimeDelta::TimeDelta() +- : m_days(0) +- , m_months(0) +- , m_years(0) +-{ +-} +- +-TimeDelta::TimeDelta(int days, int months, int years) +- : m_days(days) +- , m_months(months) +- , m_years(years) +-{ +-} +- +-int TimeDelta::getDays() const +-{ +- return m_days; +-} +- +-int TimeDelta::getMonths() const +-{ +- return m_months; +-} +- +-int TimeDelta::getYears() const +-{ +- return m_years; +-} +diff -urNr keepassxc-2.6.4-orig/src/core/TimeDelta.h keepassxc-2.6.4-patched/src/core/TimeDelta.h +--- keepassxc-2.6.4-orig/src/core/TimeDelta.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/TimeDelta.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,50 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_TIMEDELTA_H +-#define KEEPASSX_TIMEDELTA_H +- +-#include +- +-class QDateTime; +-class TimeDelta; +- +-QDateTime operator+(const QDateTime& dateTime, const TimeDelta& delta); +- +-class TimeDelta +-{ +-public: +- static TimeDelta fromDays(int days); +- static TimeDelta fromMonths(int months); +- static TimeDelta fromYears(int years); +- +- TimeDelta(); +- TimeDelta(int days, int months, int years); +- +- int getDays() const; +- int getMonths() const; +- int getYears() const; +- +-private: +- int m_days; +- int m_months; +- int m_years; +-}; +- +-Q_DECLARE_METATYPE(TimeDelta) +- +-#endif // KEEPASSX_TIMEDELTA_H +diff -urNr keepassxc-2.6.4-orig/src/core/TimeInfo.cpp keepassxc-2.6.4-patched/src/core/TimeInfo.cpp +--- keepassxc-2.6.4-orig/src/core/TimeInfo.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/TimeInfo.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,142 +0,0 @@ +-/* +- * Copyright (C) 2010 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "TimeInfo.h" +- +-#include "core/Clock.h" +- +-TimeInfo::TimeInfo() +- : m_expires(false) +- , m_usageCount(0) +-{ +- QDateTime now = Clock::currentDateTimeUtc(); +- m_lastModificationTime = now; +- m_creationTime = now; +- m_lastAccessTime = now; +- m_expiryTime = now; +- m_locationChanged = now; +-} +- +-QDateTime TimeInfo::lastModificationTime() const +-{ +- return m_lastModificationTime; +-} +- +-QDateTime TimeInfo::creationTime() const +-{ +- return m_creationTime; +-} +- +-QDateTime TimeInfo::lastAccessTime() const +-{ +- return m_lastAccessTime; +-} +- +-QDateTime TimeInfo::expiryTime() const +-{ +- return m_expiryTime; +-} +- +-bool TimeInfo::expires() const +-{ +- return m_expires; +-} +- +-int TimeInfo::usageCount() const +-{ +- return m_usageCount; +-} +- +-QDateTime TimeInfo::locationChanged() const +-{ +- return m_locationChanged; +-} +- +-void TimeInfo::setLastModificationTime(const QDateTime& dateTime) +-{ +- Q_ASSERT(dateTime.timeSpec() == Qt::UTC); +- m_lastModificationTime = dateTime; +-} +- +-void TimeInfo::setCreationTime(const QDateTime& dateTime) +-{ +- Q_ASSERT(dateTime.timeSpec() == Qt::UTC); +- m_creationTime = dateTime; +-} +- +-void TimeInfo::setLastAccessTime(const QDateTime& dateTime) +-{ +- Q_ASSERT(dateTime.timeSpec() == Qt::UTC); +- m_lastAccessTime = dateTime; +-} +- +-void TimeInfo::setExpiryTime(const QDateTime& dateTime) +-{ +- Q_ASSERT(dateTime.timeSpec() == Qt::UTC); +- m_expiryTime = dateTime; +-} +- +-void TimeInfo::setExpires(bool expires) +-{ +- m_expires = expires; +-} +- +-void TimeInfo::setUsageCount(int count) +-{ +- m_usageCount = count; +-} +- +-void TimeInfo::setLocationChanged(const QDateTime& dateTime) +-{ +- Q_ASSERT(dateTime.timeSpec() == Qt::UTC); +- m_locationChanged = dateTime; +-} +- +-bool TimeInfo::operator==(const TimeInfo& other) const +-{ +- return equals(other, CompareItemDefault); +-} +- +-bool TimeInfo::operator!=(const TimeInfo& other) const +-{ +- return !this->operator==(other); +-} +- +-bool TimeInfo::equals(const TimeInfo& other, CompareItemOptions options) const +-{ +- // clang-format off +- if (::compare(m_lastModificationTime, other.m_lastModificationTime, options) != 0) { +- return false; +- } +- if (::compare(m_creationTime, other.m_creationTime, options) != 0) { +- return false; +- } +- if (::compare(!options.testFlag(CompareItemIgnoreStatistics), m_lastAccessTime, other.m_lastAccessTime, options) != 0) { +- return false; +- } +- if (::compare(m_expires, m_expiryTime, other.m_expires, other.expiryTime(), options) != 0) { +- return false; +- } +- if (::compare(!options.testFlag(CompareItemIgnoreStatistics), m_usageCount, other.m_usageCount, options) != 0) { +- return false; +- } +- if (::compare(!options.testFlag(CompareItemIgnoreLocation), m_locationChanged, other.m_locationChanged, options) != 0) { +- return false; +- } +- return true; +- // clang-format on +-} +diff -urNr keepassxc-2.6.4-orig/src/core/TimeInfo.h keepassxc-2.6.4-patched/src/core/TimeInfo.h +--- keepassxc-2.6.4-orig/src/core/TimeInfo.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/TimeInfo.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,61 +0,0 @@ +-/* +- * Copyright (C) 2010 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_TIMEINFO_H +-#define KEEPASSX_TIMEINFO_H +- +-#include +-#include +- +-#include "core/Compare.h" +- +-class TimeInfo +-{ +-public: +- TimeInfo(); +- +- QDateTime lastModificationTime() const; +- QDateTime creationTime() const; +- QDateTime lastAccessTime() const; +- QDateTime expiryTime() const; +- bool expires() const; +- int usageCount() const; +- QDateTime locationChanged() const; +- +- bool operator==(const TimeInfo& other) const; +- bool operator!=(const TimeInfo& other) const; +- bool equals(const TimeInfo& other, CompareItemOptions options = CompareItemDefault) const; +- +- void setLastModificationTime(const QDateTime& dateTime); +- void setCreationTime(const QDateTime& dateTime); +- void setLastAccessTime(const QDateTime& dateTime); +- void setExpiryTime(const QDateTime& dateTime); +- void setExpires(bool expires); +- void setUsageCount(int count); +- void setLocationChanged(const QDateTime& dateTime); +- +-private: +- QDateTime m_lastModificationTime; +- QDateTime m_creationTime; +- QDateTime m_lastAccessTime; +- QDateTime m_expiryTime; +- bool m_expires; +- int m_usageCount; +- QDateTime m_locationChanged; +-}; +- +-#endif // KEEPASSX_TIMEINFO_H +diff -urNr keepassxc-2.6.4-orig/src/core/Tools.cpp keepassxc-2.6.4-patched/src/core/Tools.cpp +--- keepassxc-2.6.4-orig/src/core/Tools.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/Tools.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,381 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * Copyright (C) 2017 Lennart Glauer +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "Tools.h" +- +-#include "config-keepassx.h" +-#include "core/Config.h" +-#include "core/Translator.h" +- +-#include "git-info.h" +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-#ifdef Q_OS_WIN +-#include // for Sleep() +-#endif +- +-#ifdef Q_OS_UNIX +-#include // for nanosleep() +-#endif +- +-namespace Tools +-{ +- QString debugInfo() +- { +- QString debugInfo = "KeePassXC - "; +- debugInfo.append(QObject::tr("Version %1").arg(KEEPASSXC_VERSION).append("\n")); +-#ifndef KEEPASSXC_BUILD_TYPE_RELEASE +- debugInfo.append(QObject::tr("Build Type: %1").arg(KEEPASSXC_BUILD_TYPE).append("\n")); +-#endif +- +- QString commitHash; +- if (!QString(GIT_HEAD).isEmpty()) { +- commitHash = GIT_HEAD; +- } +- if (!commitHash.isEmpty()) { +- debugInfo.append(QObject::tr("Revision: %1").arg(commitHash.left(7)).append("\n")); +- } +- +-#ifdef KEEPASSXC_DIST +- debugInfo.append(QObject::tr("Distribution: %1").arg(KEEPASSXC_DIST_TYPE).append("\n")); +-#endif +- +- // Qt related debugging information. +- debugInfo.append("\n"); +- debugInfo.append("Qt ").append(QString::fromLocal8Bit(qVersion())).append("\n"); +-#ifdef QT_NO_DEBUG +- debugInfo.append(QObject::tr("Debugging mode is disabled.").append("\n")); +-#else +- debugInfo.append(QObject::tr("Debugging mode is enabled.").append("\n")); +-#endif +- debugInfo.append("\n"); +- +-#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0) +- debugInfo.append(QObject::tr("Operating system: %1\nCPU architecture: %2\nKernel: %3 %4") +- .arg(QSysInfo::prettyProductName(), +- QSysInfo::currentCpuArchitecture(), +- QSysInfo::kernelType(), +- QSysInfo::kernelVersion())); +- +- debugInfo.append("\n\n"); +-#endif +- +- QString extensions; +-#ifdef WITH_XC_AUTOTYPE +- extensions += "\n- " + QObject::tr("Auto-Type"); +-#endif +-#ifdef WITH_XC_BROWSER +- extensions += "\n- " + QObject::tr("Browser Integration"); +-#endif +-#ifdef WITH_XC_SSHAGENT +- extensions += "\n- " + QObject::tr("SSH Agent"); +-#endif +-#if defined(WITH_XC_KEESHARE_SECURE) && defined(WITH_XC_KEESHARE_INSECURE) +- extensions += "\n- " + QObject::tr("KeeShare (signed and unsigned sharing)"); +-#elif defined(WITH_XC_KEESHARE_SECURE) +- extensions += "\n- " + QObject::tr("KeeShare (only signed sharing)"); +-#elif defined(WITH_XC_KEESHARE_INSECURE) +- extensions += "\n- " + QObject::tr("KeeShare (only unsigned sharing)"); +-#endif +-#ifdef WITH_XC_YUBIKEY +- extensions += "\n- " + QObject::tr("YubiKey"); +-#endif +-#ifdef WITH_XC_TOUCHID +- extensions += "\n- " + QObject::tr("TouchID"); +-#endif +-#ifdef WITH_XC_FDOSECRETS +- extensions += "\n- " + QObject::tr("Secret Service Integration"); +-#endif +- +- if (extensions.isEmpty()) { +- extensions = " " + QObject::tr("None"); +- } +- +- debugInfo.append(QObject::tr("Enabled extensions:").append(extensions).append("\n")); +- return debugInfo; +- } +- +- QString humanReadableFileSize(qint64 bytes, quint32 precision) +- { +- constexpr auto kibibyte = 1024; +- double size = bytes; +- +- QStringList units = QStringList() << "B" +- << "KiB" +- << "MiB" +- << "GiB"; +- int i = 0; +- int maxI = units.size() - 1; +- +- while ((size >= kibibyte) && (i < maxI)) { +- size /= kibibyte; +- i++; +- } +- +- return QString("%1 %2").arg(QLocale().toString(size, 'f', precision), units.at(i)); +- } +- +- bool readFromDevice(QIODevice* device, QByteArray& data, int size) +- { +- QByteArray buffer; +- buffer.resize(size); +- +- qint64 readResult = device->read(buffer.data(), size); +- if (readResult == -1) { +- return false; +- } else { +- buffer.resize(readResult); +- data = buffer; +- return true; +- } +- } +- +- bool readAllFromDevice(QIODevice* device, QByteArray& data) +- { +- QByteArray result; +- qint64 readBytes = 0; +- qint64 readResult; +- do { +- result.resize(result.size() + 16384); +- readResult = device->read(result.data() + readBytes, result.size() - readBytes); +- if (readResult > 0) { +- readBytes += readResult; +- } +- } while (readResult > 0); +- +- if (readResult == -1) { +- return false; +- } else { +- result.resize(static_cast(readBytes)); +- data = result; +- return true; +- } +- } +- +- QString imageReaderFilter() +- { +- const QList formats = QImageReader::supportedImageFormats(); +- QStringList formatsStringList; +- +- for (const QByteArray& format : formats) { +- for (char codePoint : format) { +- if (!QChar(codePoint).isLetterOrNumber()) { +- continue; +- } +- } +- +- formatsStringList.append("*." + QString::fromLatin1(format).toLower()); +- } +- +- return formatsStringList.join(" "); +- } +- +- bool isHex(const QByteArray& ba) +- { +- for (const uchar c : ba) { +- if (!std::isxdigit(c)) { +- return false; +- } +- } +- +- return true; +- } +- +- bool isBase64(const QByteArray& ba) +- { +- constexpr auto pattern = R"(^(?:[a-z0-9+/]{4})*(?:[a-z0-9+/]{3}=|[a-z0-9+/]{2}==)?$)"; +- QRegExp regexp(pattern, Qt::CaseInsensitive, QRegExp::RegExp2); +- +- QString base64 = QString::fromLatin1(ba.constData(), ba.size()); +- +- return regexp.exactMatch(base64); +- } +- +- void sleep(int ms) +- { +- Q_ASSERT(ms >= 0); +- +- if (ms == 0) { +- return; +- } +- +-#ifdef Q_OS_WIN +- Sleep(uint(ms)); +-#else +- timespec ts; +- ts.tv_sec = ms / 1000; +- ts.tv_nsec = (ms % 1000) * 1000 * 1000; +- nanosleep(&ts, nullptr); +-#endif +- } +- +- void wait(int ms) +- { +- Q_ASSERT(ms >= 0); +- +- if (ms == 0) { +- return; +- } +- +- QElapsedTimer timer; +- timer.start(); +- +- if (ms <= 50) { +- QCoreApplication::processEvents(QEventLoop::AllEvents, ms); +- sleep(qMax(ms - static_cast(timer.elapsed()), 0)); +- } else { +- int timeLeft; +- do { +- timeLeft = ms - timer.elapsed(); +- if (timeLeft > 0) { +- QCoreApplication::processEvents(QEventLoop::AllEvents, timeLeft); +- sleep(10); +- } +- } while (!timer.hasExpired(ms)); +- } +- } +- +- bool checkUrlValid(const QString& urlField) +- { +- if (urlField.isEmpty() || urlField.startsWith("cmd://", Qt::CaseInsensitive) +- || urlField.startsWith("{REF:A", Qt::CaseInsensitive)) { +- return true; +- } +- +- QUrl url; +- if (urlField.contains("://")) { +- url = urlField; +- } else { +- url = QUrl::fromUserInput(urlField); +- } +- +- if (url.scheme() != "file" && url.host().isEmpty()) { +- return false; +- } +- +- // Check for illegal characters. Adds also the wildcard * to the list +- QRegularExpression re("[<>\\^`{|}\\*]"); +- auto match = re.match(urlField); +- if (match.hasMatch()) { +- return false; +- } +- +- return true; +- } +- +- // Escape common regex symbols except for *, ?, and | +- auto regexEscape = QRegularExpression(R"re(([-[\]{}()+.,\\\/^$#]))re"); +- +- QRegularExpression convertToRegex(const QString& string, bool useWildcards, bool exactMatch, bool caseSensitive) +- { +- QString pattern = string; +- +- // Wildcard support (*, ?, |) +- if (useWildcards) { +- pattern.replace(regexEscape, "\\\\1"); +- pattern.replace("*", ".*"); +- pattern.replace("?", "."); +- } +- +- // Exact modifier +- if (exactMatch) { +- pattern = "^" + pattern + "$"; +- } +- +- auto regex = QRegularExpression(pattern); +- if (!caseSensitive) { +- regex.setPatternOptions(QRegularExpression::CaseInsensitiveOption); +- } +- +- return regex; +- } +- +- QString uuidToHex(const QUuid& uuid) +- { +- return QString::fromLatin1(uuid.toRfc4122().toHex()); +- } +- +- QUuid hexToUuid(const QString& uuid) +- { +- return QUuid::fromRfc4122(QByteArray::fromHex(uuid.toLatin1())); +- } +- +- QString envSubstitute(const QString& filepath, QProcessEnvironment environment) +- { +- QString subbed = filepath; +- +-#if defined(Q_OS_WIN) +- QRegularExpression varRe("\\%([A-Za-z][A-Za-z0-9_]*)\\%"); +- QString homeEnv = "USERPROFILE"; +-#else +- QRegularExpression varRe("\\$([A-Za-z][A-Za-z0-9_]*)"); +- QString homeEnv = "HOME"; +-#endif +- +- if (subbed.startsWith("~/") || subbed.startsWith("~\\")) +- subbed.replace(0, 1, environment.value(homeEnv)); +- +- QRegularExpressionMatch match; +- +- do { +- match = varRe.match(subbed); +- if (match.hasMatch()) { +- subbed.replace(match.capturedStart(), match.capturedLength(), environment.value(match.captured(1))); +- } +- } while (match.hasMatch()); +- +- return subbed; +- } +- +- Buffer::Buffer() +- : raw(nullptr) +- , size(0) +- { +- } +- +- Buffer::~Buffer() +- { +- clear(); +- } +- +- void Buffer::clear() +- { +- if (size > 0) { +- free(raw); +- } +- raw = nullptr; +- size = 0; +- } +- +- QByteArray Buffer::content() const +- { +- return QByteArray(reinterpret_cast(raw), size); +- } +- +-} // namespace Tools +diff -urNr keepassxc-2.6.4-orig/src/core/Tools.h keepassxc-2.6.4-patched/src/core/Tools.h +--- keepassxc-2.6.4-orig/src/core/Tools.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/Tools.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,110 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_TOOLS_H +-#define KEEPASSX_TOOLS_H +- +-#include "core/Global.h" +- +-#include +-#include +-#include +-#include +- +-#include +- +-class QIODevice; +-class QRegularExpression; +- +-namespace Tools +-{ +- QString debugInfo(); +- QString humanReadableFileSize(qint64 bytes, quint32 precision = 2); +- bool readFromDevice(QIODevice* device, QByteArray& data, int size = 16384); +- bool readAllFromDevice(QIODevice* device, QByteArray& data); +- QString imageReaderFilter(); +- bool isHex(const QByteArray& ba); +- bool isBase64(const QByteArray& ba); +- void sleep(int ms); +- void wait(int ms); +- bool checkUrlValid(const QString& urlField); +- QString uuidToHex(const QUuid& uuid); +- QUuid hexToUuid(const QString& uuid); +- QRegularExpression convertToRegex(const QString& string, +- bool useWildcards = false, +- bool exactMatch = false, +- bool caseSensitive = false); +- QString envSubstitute(const QString& filepath, +- QProcessEnvironment environment = QProcessEnvironment::systemEnvironment()); +- +- template +- RandomAccessIterator binaryFind(RandomAccessIterator begin, RandomAccessIterator end, const T& value) +- { +- RandomAccessIterator it = std::lower_bound(begin, end, value); +- +- if ((it == end) || (value < *it)) { +- return end; +- } else { +- return it; +- } +- } +- +- template struct Map +- { +- QMap values; +- Value& operator[](const Key index) +- { +- return values[index]; +- } +- +- ~Map() +- { +- for (Value m : values) { +- deleter(m); +- } +- } +- }; +- +- struct Buffer +- { +- unsigned char* raw; +- size_t size; +- +- Buffer(); +- ~Buffer(); +- +- void clear(); +- QByteArray content() const; +- }; +- +- inline int qtRuntimeVersion() +- { +- // Cache the result since the Qt version can't change during +- // the execution, computing it once will be enough +- const static int version = []() { +- const auto sq = QString::fromLatin1(qVersion()); +- return (sq.section(QChar::fromLatin1('.'), 0, 0).toInt() << 16) +- + (sq.section(QChar::fromLatin1('.'), 1, 1).toInt() << 8) +- + (sq.section(QChar::fromLatin1('.'), 2, 2).toInt()); +- }(); +- +- return version; +- } +-} // namespace Tools +- +-#endif // KEEPASSX_TOOLS_H +diff -urNr keepassxc-2.6.4-orig/src/core/Translator.cpp keepassxc-2.6.4-patched/src/core/Translator.cpp +--- keepassxc-2.6.4-orig/src/core/Translator.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/Translator.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,138 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * Copyright (C) 2014 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "Translator.h" +- +-#include +-#include +-#include +-#include +-#include +-#include +- +-#include "config-keepassx.h" +-#include "core/Config.h" +-#include "core/Resources.h" +- +-/** +- * Install all KeePassXC and Qt translators. +- */ +-void Translator::installTranslators() +-{ +- QStringList languages; +- QString languageSetting = config()->get(Config::GUI_Language).toString(); +- if (languageSetting.isEmpty() || languageSetting == "system") { +- // NOTE: this is a workaround for the terrible way Qt loads languages +- // using the QLocale::uiLanguages() approach. Instead, we search each +- // language and all country variants in order before moving to the next. +- QLocale locale; +- languages = locale.uiLanguages(); +- } else { +- languages << languageSetting; +- } +- +- // Always try to load english last +- languages << "en_US"; +- +- const auto path = resources()->dataPath("translations"); +- installQtTranslator(languages, path); +- if (!installTranslator(languages, path)) { +- // couldn't load configured language or fallback +- qWarning("Couldn't load translations."); +- } +-} +- +-/** +- * Install KeePassXC translator. +- * +- * @param languages priority-ordered list of languages +- * @param path absolute search path +- * @return true on success +- */ +-bool Translator::installTranslator(const QStringList& languages, const QString& path) +-{ +- for (const auto& language : languages) { +- QLocale locale(language); +- QScopedPointer translator(new QTranslator(qApp)); +- if (translator->load(locale, "keepassx_", "", path)) { +- return QCoreApplication::installTranslator(translator.take()); +- } else if (translator->load(locale, "keepassx_", "", QLibraryInfo::location(QLibraryInfo::TranslationsPath))) { +- return QCoreApplication::installTranslator(translator.take()); +- } +- } +- +- return false; +-} +- +-/** +- * Install Qt5 base translator from the specified local search path or the default system path +- * if no qtbase_* translations were found at the local path. +- * +- * @param languages priority-ordered list of languages +- * @param path absolute search path +- * @return true on success +- */ +-bool Translator::installQtTranslator(const QStringList& languages, const QString& path) +-{ +- for (const auto& language : languages) { +- QLocale locale(language); +- QScopedPointer qtTranslator(new QTranslator(qApp)); +- if (qtTranslator->load(locale, "qtbase_", "", path)) { +- return QCoreApplication::installTranslator(qtTranslator.take()); +- } else if (qtTranslator->load(locale, "qtbase_", "", QLibraryInfo::location(QLibraryInfo::TranslationsPath))) { +- return QCoreApplication::installTranslator(qtTranslator.take()); +- } +- } +- return false; +-} +- +-/** +- * @return list of pairs of available language codes and names +- */ +-QList> Translator::availableLanguages() +-{ +- QList> languages; +- languages.append(QPair("system", "System default")); +- +- QRegularExpression regExp("^keepassx_([a-zA-Z_]+)\\.qm$", QRegularExpression::CaseInsensitiveOption); +- const QStringList fileList = QDir(resources()->dataPath("translations")).entryList(); +- for (const QString& filename : fileList) { +- QRegularExpressionMatch match = regExp.match(filename); +- if (match.hasMatch()) { +- QString langcode = match.captured(1); +- if (langcode == "en") { +- continue; +- } +- +- QLocale locale(langcode); +- QString languageStr = QLocale::languageToString(locale.language()); +- if (langcode == "la") { +- // langcode "la" (Latin) is translated into "C" by QLocale::languageToString() +- languageStr = "Latin"; +- } +- if (langcode.contains("_")) { +- languageStr += QString(" (%1)").arg(QLocale::countryToString(locale.country())); +- } +- +- QPair language(langcode, languageStr); +- languages.append(language); +- } +- } +- +- return languages; +-} +diff -urNr keepassxc-2.6.4-orig/src/core/Translator.h keepassxc-2.6.4-patched/src/core/Translator.h +--- keepassxc-2.6.4-orig/src/core/Translator.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/core/Translator.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,36 +0,0 @@ +-/* +- * Copyright (C) 2014 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_TRANSLATOR_H +-#define KEEPASSX_TRANSLATOR_H +- +-#include +-#include +-#include +- +-class Translator +-{ +-public: +- static void installTranslators(); +- static QList> availableLanguages(); +- +-private: +- static bool installTranslator(const QStringList& languages, const QString& path); +- static bool installQtTranslator(const QStringList& languages, const QString& path); +-}; +- +-#endif // KEEPASSX_TRANSLATOR_H +diff -urNr keepassxc-2.6.4-orig/src/crypto/argon2/argon2.h keepassxc-2.6.4-patched/src/crypto/argon2/argon2.h +--- keepassxc-2.6.4-orig/src/crypto/argon2/argon2.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/crypto/argon2/argon2.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,34 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_CRYPTO_ARGON2_H +-#define KEEPASSXC_CRYPTO_ARGON2_H +- +-/* +- Argon2 wrapper header with redefined symbols to be used with the +- patched libargon2 binary which is generated by the build system. +- This is to avoid link-time definition clashes with libsodium on Windows. +- */ +- +-#ifdef Q_OS_WIN +-#define argon2_hash libargon2_argon2_hash +-#define argon2_error_message libargon2_argon2_error_message +-#endif +- +-#include +- +-#endif // KEEPASSXC_CRYPTO_ARGON2_H +diff -urNr keepassxc-2.6.4-orig/src/crypto/Crypto.cpp keepassxc-2.6.4-patched/src/crypto/Crypto.cpp +--- keepassxc-2.6.4-orig/src/crypto/Crypto.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/crypto/Crypto.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,344 +0,0 @@ +-/* +- * Copyright (C) 2010 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "Crypto.h" +- +-#include +- +-#include +- +-#include "config-keepassx.h" +-#include "crypto/CryptoHash.h" +-#include "crypto/SymmetricCipher.h" +- +-bool Crypto::m_initialized(false); +-QString Crypto::m_errorStr; +-QString Crypto::m_backendVersion; +- +-Crypto::Crypto() +-{ +-} +- +-bool Crypto::init() +-{ +- if (m_initialized) { +- qWarning("Crypto::init: already initialized"); +- return true; +- } +- +- m_backendVersion = QString::fromLocal8Bit(gcry_check_version(0)); +- gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0); +- +- if (!checkAlgorithms()) { +- return false; +- } +- +- // has to be set before testing Crypto classes +- m_initialized = true; +- +- if (!backendSelfTest() || !selfTest()) { +- m_initialized = false; +- return false; +- } +- +- return true; +-} +- +-bool Crypto::initialized() +-{ +- return m_initialized; +-} +- +-QString Crypto::errorString() +-{ +- return m_errorStr; +-} +- +-QString Crypto::debugInfo() +-{ +- Q_ASSERT(Crypto::initialized()); +- +- QString debugInfo = QObject::tr("Cryptographic libraries:").append("\n"); +- debugInfo.append("- libgcrypt ").append(m_backendVersion).append("\n"); +- return debugInfo; +-} +- +-bool Crypto::backendSelfTest() +-{ +- return (gcry_control(GCRYCTL_SELFTEST) == 0); +-} +- +-bool Crypto::checkAlgorithms() +-{ +- if (gcry_cipher_algo_info(GCRY_CIPHER_AES256, GCRYCTL_TEST_ALGO, nullptr, nullptr) != 0) { +- m_errorStr = "GCRY_CIPHER_AES256 not found."; +- qWarning("Crypto::checkAlgorithms: %s", qPrintable(m_errorStr)); +- return false; +- } +- if (gcry_cipher_algo_info(GCRY_CIPHER_TWOFISH, GCRYCTL_TEST_ALGO, nullptr, nullptr) != 0) { +- m_errorStr = "GCRY_CIPHER_TWOFISH not found."; +- qWarning("Crypto::checkAlgorithms: %s", qPrintable(m_errorStr)); +- return false; +- } +- if (gcry_cipher_algo_info(GCRY_CIPHER_SALSA20, GCRYCTL_TEST_ALGO, nullptr, nullptr) != 0) { +- m_errorStr = "GCRY_CIPHER_SALSA20 not found."; +- qWarning("Crypto::checkAlgorithms: %s", qPrintable(m_errorStr)); +- return false; +- } +- if (gcry_cipher_algo_info(GCRY_CIPHER_CHACHA20, GCRYCTL_TEST_ALGO, nullptr, nullptr) != 0) { +- m_errorStr = "GCRY_CIPHER_CHACHA20 not found."; +- qWarning("Crypto::checkAlgorithms: %s", qPrintable(m_errorStr)); +- return false; +- } +- if (gcry_md_test_algo(GCRY_MD_SHA256) != 0) { +- m_errorStr = "GCRY_MD_SHA256 not found."; +- qWarning("Crypto::checkAlgorithms: %s", qPrintable(m_errorStr)); +- return false; +- } +- if (gcry_md_test_algo(GCRY_MD_SHA512) != 0) { +- m_errorStr = "GCRY_MD_SHA512 not found."; +- qWarning("Crypto::checkAlgorithms: %s", qPrintable(m_errorStr)); +- return false; +- } +- +- return true; +-} +- +-bool Crypto::selfTest() +-{ +- return testSha256() && testSha512() && testAes256Cbc() && testAes256Ecb() && testTwofish() && testSalsa20() +- && testChaCha20(); +-} +- +-void Crypto::raiseError(const QString& str) +-{ +- m_errorStr = str; +- qWarning("Crypto::selfTest: %s", qPrintable(m_errorStr)); +-} +- +-bool Crypto::testSha256() +-{ +- QByteArray sha256Test = +- CryptoHash::hash("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", CryptoHash::Sha256); +- +- if (sha256Test != QByteArray::fromHex("248D6A61D20638B8E5C026930C3E6039A33CE45964FF2167F6ECEDD419DB06C1")) { +- raiseError("SHA-256 mismatch."); +- return false; +- } +- +- return true; +-} +- +-bool Crypto::testSha512() +-{ +- QByteArray sha512Test = +- CryptoHash::hash("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", CryptoHash::Sha512); +- +- if (sha512Test +- != QByteArray::fromHex("204a8fc6dda82f0a0ced7beb8e08a41657c16ef468b228a8279be331a703c33596fd15c13b1b" +- "07f9aa1d3bea57789ca031ad85c7a71dd70354ec631238ca3445")) { +- raiseError("SHA-512 mismatch."); +- return false; +- } +- +- return true; +-} +- +-bool Crypto::testAes256Cbc() +-{ +- QByteArray key = QByteArray::fromHex("603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4"); +- QByteArray iv = QByteArray::fromHex("000102030405060708090a0b0c0d0e0f"); +- QByteArray plainText = QByteArray::fromHex("6bc1bee22e409f96e93d7e117393172a"); +- plainText.append(QByteArray::fromHex("ae2d8a571e03ac9c9eb76fac45af8e51")); +- QByteArray cipherText = QByteArray::fromHex("f58c4c04d6e5f1ba779eabfb5f7bfbd6"); +- cipherText.append(QByteArray::fromHex("9cfc4e967edb808d679f777bc6702c7d")); +- bool ok; +- +- SymmetricCipher aes256Encrypt(SymmetricCipher::Aes256, SymmetricCipher::Cbc, SymmetricCipher::Encrypt); +- if (!aes256Encrypt.init(key, iv)) { +- raiseError(aes256Encrypt.errorString()); +- return false; +- } +- QByteArray encryptedText = aes256Encrypt.process(plainText, &ok); +- if (!ok) { +- raiseError(aes256Encrypt.errorString()); +- return false; +- } +- if (encryptedText != cipherText) { +- raiseError("AES-256 CBC encryption mismatch."); +- return false; +- } +- +- SymmetricCipher aes256Decrypt(SymmetricCipher::Aes256, SymmetricCipher::Cbc, SymmetricCipher::Decrypt); +- if (!aes256Decrypt.init(key, iv)) { +- raiseError(aes256Decrypt.errorString()); +- return false; +- } +- QByteArray decryptedText = aes256Decrypt.process(cipherText, &ok); +- if (!ok) { +- raiseError(aes256Decrypt.errorString()); +- return false; +- } +- if (decryptedText != plainText) { +- raiseError("AES-256 CBC decryption mismatch."); +- return false; +- } +- +- return true; +-} +- +-bool Crypto::testAes256Ecb() +-{ +- QByteArray key = QByteArray::fromHex("000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F"); +- QByteArray iv = QByteArray::fromHex("00000000000000000000000000000000"); +- QByteArray plainText = QByteArray::fromHex("00112233445566778899AABBCCDDEEFF"); +- plainText.append(QByteArray::fromHex("00112233445566778899AABBCCDDEEFF")); +- QByteArray cipherText = QByteArray::fromHex("8EA2B7CA516745BFEAFC49904B496089"); +- cipherText.append(QByteArray::fromHex("8EA2B7CA516745BFEAFC49904B496089")); +- bool ok; +- +- SymmetricCipher aes256Encrypt(SymmetricCipher::Aes256, SymmetricCipher::Ecb, SymmetricCipher::Encrypt); +- if (!aes256Encrypt.init(key, iv)) { +- raiseError(aes256Encrypt.errorString()); +- return false; +- } +- QByteArray encryptedText = aes256Encrypt.process(plainText, &ok); +- if (!ok) { +- raiseError(aes256Encrypt.errorString()); +- return false; +- } +- if (encryptedText != cipherText) { +- raiseError("AES-256 ECB encryption mismatch."); +- return false; +- } +- +- SymmetricCipher aes256Decrypt(SymmetricCipher::Aes256, SymmetricCipher::Ecb, SymmetricCipher::Decrypt); +- if (!aes256Decrypt.init(key, iv)) { +- raiseError(aes256Decrypt.errorString()); +- return false; +- } +- QByteArray decryptedText = aes256Decrypt.process(cipherText, &ok); +- if (!ok) { +- raiseError(aes256Decrypt.errorString()); +- return false; +- } +- if (decryptedText != plainText) { +- raiseError("AES-256 ECB decryption mismatch."); +- return false; +- } +- +- return true; +-} +- +-bool Crypto::testTwofish() +-{ +- QByteArray key = QByteArray::fromHex("603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4"); +- QByteArray iv = QByteArray::fromHex("000102030405060708090a0b0c0d0e0f"); +- QByteArray plainText = QByteArray::fromHex("6bc1bee22e409f96e93d7e117393172a"); +- plainText.append(QByteArray::fromHex("ae2d8a571e03ac9c9eb76fac45af8e51")); +- QByteArray cipherText = QByteArray::fromHex("e0227c3cc80f3cb1b2ed847cc6f57d3c"); +- cipherText.append(QByteArray::fromHex("657b1e7960b30fb7c8d62e72ae37c3a0")); +- bool ok; +- +- SymmetricCipher twofishEncrypt(SymmetricCipher::Twofish, SymmetricCipher::Cbc, SymmetricCipher::Encrypt); +- if (!twofishEncrypt.init(key, iv)) { +- raiseError(twofishEncrypt.errorString()); +- return false; +- } +- QByteArray encryptedText = twofishEncrypt.process(plainText, &ok); +- if (!ok) { +- raiseError(twofishEncrypt.errorString()); +- return false; +- } +- if (encryptedText != cipherText) { +- raiseError("Twofish encryption mismatch."); +- return false; +- } +- +- SymmetricCipher twofishDecrypt(SymmetricCipher::Twofish, SymmetricCipher::Cbc, SymmetricCipher::Decrypt); +- if (!twofishDecrypt.init(key, iv)) { +- raiseError(twofishEncrypt.errorString()); +- return false; +- } +- QByteArray decryptedText = twofishDecrypt.process(cipherText, &ok); +- if (!ok) { +- raiseError(twofishDecrypt.errorString()); +- return false; +- } +- if (decryptedText != plainText) { +- raiseError("Twofish encryption mismatch."); +- return false; +- } +- +- return true; +-} +- +-bool Crypto::testSalsa20() +-{ +- QByteArray salsa20Key = QByteArray::fromHex("F3F4F5F6F7F8F9FAFBFCFDFEFF000102030405060708090A0B0C0D0E0F101112"); +- QByteArray salsa20iv = QByteArray::fromHex("0000000000000000"); +- QByteArray salsa20Plain = QByteArray::fromHex("00000000000000000000000000000000"); +- QByteArray salsa20Cipher = QByteArray::fromHex("B4C0AFA503BE7FC29A62058166D56F8F"); +- bool ok; +- +- SymmetricCipher salsa20Stream(SymmetricCipher::Salsa20, SymmetricCipher::Stream, SymmetricCipher::Encrypt); +- if (!salsa20Stream.init(salsa20Key, salsa20iv)) { +- raiseError(salsa20Stream.errorString()); +- return false; +- } +- +- QByteArray salsaProcessed = salsa20Stream.process(salsa20Plain, &ok); +- if (!ok) { +- raiseError(salsa20Stream.errorString()); +- return false; +- } +- if (salsaProcessed != salsa20Cipher) { +- raiseError("Salsa20 stream cipher mismatch."); +- return false; +- } +- +- return true; +-} +- +-bool Crypto::testChaCha20() +-{ +- QByteArray chacha20Key = QByteArray::fromHex("0000000000000000000000000000000000000000000000000000000000000000"); +- QByteArray chacha20iv = QByteArray::fromHex("0000000000000000"); +- QByteArray chacha20Plain = QByteArray::fromHex("0000000000000000000000000000000000000000000000000000000000000000000" +- "0000000000000000000000000000000000000000000000000000000000000"); +- QByteArray chacha20Cipher = QByteArray::fromHex("76b8e0ada0f13d90405d6ae55386bd28bdd219b8a08ded1aa836efcc8b770dc7da" +- "41597c5157488d7724e03fb8d84a376a43b8f41518a11cc387b669b2ee6586"); +- bool ok; +- +- SymmetricCipher chacha20Stream(SymmetricCipher::ChaCha20, SymmetricCipher::Stream, SymmetricCipher::Encrypt); +- if (!chacha20Stream.init(chacha20Key, chacha20iv)) { +- raiseError(chacha20Stream.errorString()); +- return false; +- } +- +- QByteArray chacha20Processed = chacha20Stream.process(chacha20Plain, &ok); +- if (!ok) { +- raiseError(chacha20Stream.errorString()); +- return false; +- } +- if (chacha20Processed != chacha20Cipher) { +- raiseError("ChaCha20 stream cipher mismatch."); +- return false; +- } +- +- return true; +-} +diff -urNr keepassxc-2.6.4-orig/src/crypto/Crypto.h keepassxc-2.6.4-patched/src/crypto/Crypto.h +--- keepassxc-2.6.4-orig/src/crypto/Crypto.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/crypto/Crypto.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,50 +0,0 @@ +-/* +- * Copyright (C) 2010 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_CRYPTO_H +-#define KEEPASSX_CRYPTO_H +- +-#include +- +-class Crypto +-{ +-public: +- static bool init(); +- static bool initialized(); +- static bool backendSelfTest(); +- static QString errorString(); +- static QString debugInfo(); +- +-private: +- Crypto(); +- static bool checkAlgorithms(); +- static bool selfTest(); +- static void raiseError(const QString& str); +- static bool testSha256(); +- static bool testSha512(); +- static bool testAes256Cbc(); +- static bool testAes256Ecb(); +- static bool testTwofish(); +- static bool testSalsa20(); +- static bool testChaCha20(); +- +- static bool m_initialized; +- static QString m_errorStr; +- static QString m_backendVersion; +-}; +- +-#endif // KEEPASSX_CRYPTO_H +diff -urNr keepassxc-2.6.4-orig/src/crypto/CryptoHash.cpp keepassxc-2.6.4-patched/src/crypto/CryptoHash.cpp +--- keepassxc-2.6.4-orig/src/crypto/CryptoHash.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/crypto/CryptoHash.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,122 +0,0 @@ +-/* +- * Copyright (C) 2010 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "CryptoHash.h" +- +-#include +- +-#include "crypto/Crypto.h" +- +-class CryptoHashPrivate +-{ +-public: +- gcry_md_hd_t ctx; +- int hashLen; +-}; +- +-CryptoHash::CryptoHash(Algorithm algo, bool hmac) +- : d_ptr(new CryptoHashPrivate()) +-{ +- Q_D(CryptoHash); +- +- Q_ASSERT(Crypto::initialized()); +- +- int algoGcrypt = -1; +- unsigned int flagsGcrypt = GCRY_MD_FLAG_SECURE; +- +- switch (algo) { +- case CryptoHash::Sha256: +- algoGcrypt = GCRY_MD_SHA256; +- break; +- +- case CryptoHash::Sha512: +- algoGcrypt = GCRY_MD_SHA512; +- break; +- +- default: +- Q_ASSERT(false); +- break; +- } +- +- if (hmac) { +- flagsGcrypt |= GCRY_MD_FLAG_HMAC; +- } +- +- gcry_error_t error = gcry_md_open(&d->ctx, algoGcrypt, flagsGcrypt); +- if (error != GPG_ERR_NO_ERROR) { +- qWarning("Gcrypt error (ctor): %s\n %s", gcry_strerror(error), gcry_strsource(error)); +- } +- Q_ASSERT(error == 0); // TODO: error handling +- +- d->hashLen = gcry_md_get_algo_dlen(algoGcrypt); +-} +- +-CryptoHash::~CryptoHash() +-{ +- Q_D(CryptoHash); +- +- gcry_md_close(d->ctx); +- +- delete d_ptr; +-} +- +-void CryptoHash::addData(const QByteArray& data) +-{ +- Q_D(CryptoHash); +- +- if (data.isEmpty()) { +- return; +- } +- +- gcry_md_write(d->ctx, data.constData(), static_cast(data.size())); +-} +- +-void CryptoHash::setKey(const QByteArray& data) +-{ +- Q_D(CryptoHash); +- +- gcry_error_t error = gcry_md_setkey(d->ctx, data.constData(), static_cast(data.size())); +- if (error) { +- qWarning("Gcrypt error (setKey): %s\n %s", gcry_strerror(error), gcry_strsource(error)); +- } +- Q_ASSERT(error == 0); +-} +- +-QByteArray CryptoHash::result() const +-{ +- Q_D(const CryptoHash); +- +- const auto result = reinterpret_cast(gcry_md_read(d->ctx, 0)); +- return QByteArray(result, d->hashLen); +-} +- +-QByteArray CryptoHash::hash(const QByteArray& data, Algorithm algo) +-{ +- // replace with gcry_md_hash_buffer()? +- CryptoHash cryptoHash(algo); +- cryptoHash.addData(data); +- return cryptoHash.result(); +-} +- +-QByteArray CryptoHash::hmac(const QByteArray& data, const QByteArray& key, Algorithm algo) +-{ +- // replace with gcry_md_hash_buffer()? +- CryptoHash cryptoHash(algo, true); +- cryptoHash.setKey(key); +- cryptoHash.addData(data); +- return cryptoHash.result(); +-} +diff -urNr keepassxc-2.6.4-orig/src/crypto/CryptoHash.h keepassxc-2.6.4-patched/src/crypto/CryptoHash.h +--- keepassxc-2.6.4-orig/src/crypto/CryptoHash.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/crypto/CryptoHash.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,49 +0,0 @@ +-/* +- * Copyright (C) 2010 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_CRYPTOHASH_H +-#define KEEPASSX_CRYPTOHASH_H +- +-#include +- +-class CryptoHashPrivate; +- +-class CryptoHash +-{ +-public: +- enum Algorithm +- { +- Sha256, +- Sha512 +- }; +- +- explicit CryptoHash(Algorithm algo, bool hmac = false); +- ~CryptoHash(); +- void addData(const QByteArray& data); +- QByteArray result() const; +- void setKey(const QByteArray& data); +- +- static QByteArray hash(const QByteArray& data, Algorithm algo); +- static QByteArray hmac(const QByteArray& data, const QByteArray& key, Algorithm algo); +- +-private: +- CryptoHashPrivate* const d_ptr; +- +- Q_DECLARE_PRIVATE(CryptoHash) +-}; +- +-#endif // KEEPASSX_CRYPTOHASH_H +diff -urNr keepassxc-2.6.4-orig/src/crypto/kdf/AesKdf.cpp keepassxc-2.6.4-patched/src/crypto/kdf/AesKdf.cpp +--- keepassxc-2.6.4-orig/src/crypto/kdf/AesKdf.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/crypto/kdf/AesKdf.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,132 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "AesKdf.h" +- +-#include +- +-#include "crypto/CryptoHash.h" +-#include "format/KeePass2.h" +- +-AesKdf::AesKdf() +- : Kdf::Kdf(KeePass2::KDF_AES_KDBX4) +-{ +-} +- +-/** +- * @param legacyKdbx3 initialize as legacy KDBX3 KDF +- */ +-AesKdf::AesKdf(bool legacyKdbx3) +- : Kdf::Kdf(legacyKdbx3 ? KeePass2::KDF_AES_KDBX3 : KeePass2::KDF_AES_KDBX4) +-{ +-} +- +-bool AesKdf::processParameters(const QVariantMap& p) +-{ +- bool ok; +- int rounds = p.value(KeePass2::KDFPARAM_AES_ROUNDS).toInt(&ok); +- if (!ok || !setRounds(rounds)) { +- return false; +- } +- +- QByteArray seed = p.value(KeePass2::KDFPARAM_AES_SEED).toByteArray(); +- return setSeed(seed); +-} +- +-QVariantMap AesKdf::writeParameters() +-{ +- QVariantMap p; +- +- // always write old KDBX3 AES-KDF UUID for compatibility with other applications +- p.insert(KeePass2::KDFPARAM_UUID, KeePass2::KDF_AES_KDBX3.toRfc4122()); +- +- p.insert(KeePass2::KDFPARAM_AES_ROUNDS, static_cast(rounds())); +- p.insert(KeePass2::KDFPARAM_AES_SEED, seed()); +- return p; +-} +- +-bool AesKdf::transform(const QByteArray& raw, QByteArray& result) const +-{ +- QByteArray resultLeft; +- QByteArray resultRight; +- +- QFuture future = QtConcurrent::run(transformKeyRaw, raw.left(16), m_seed, m_rounds, &resultLeft); +- +- bool rightResult = transformKeyRaw(raw.right(16), m_seed, m_rounds, &resultRight); +- bool leftResult = future.result(); +- +- if (!rightResult || !leftResult) { +- return false; +- } +- +- QByteArray transformed; +- transformed.append(resultLeft); +- transformed.append(resultRight); +- +- result = CryptoHash::hash(transformed, CryptoHash::Sha256); +- return true; +-} +- +-bool AesKdf::transformKeyRaw(const QByteArray& key, const QByteArray& seed, int rounds, QByteArray* result) +-{ +- QByteArray iv(16, 0); +- SymmetricCipher cipher(SymmetricCipher::Aes256, SymmetricCipher::Ecb, SymmetricCipher::Encrypt); +- if (!cipher.init(seed, iv)) { +- qWarning("AesKdf::transformKeyRaw: error in SymmetricCipher::init: %s", cipher.errorString().toUtf8().data()); +- return false; +- } +- +- *result = key; +- +- if (!cipher.processInPlace(*result, rounds)) { +- qWarning("AesKdf::transformKeyRaw: error in SymmetricCipher::processInPlace: %s", +- cipher.errorString().toUtf8().data()); +- return false; +- } +- +- return true; +-} +- +-QSharedPointer AesKdf::clone() const +-{ +- return QSharedPointer::create(*this); +-} +- +-int AesKdf::benchmarkImpl(int msec) const +-{ +- QByteArray key = QByteArray(16, '\x7E'); +- QByteArray seed = QByteArray(32, '\x4B'); +- QByteArray iv(16, 0); +- +- SymmetricCipher cipher(SymmetricCipher::Aes256, SymmetricCipher::Ecb, SymmetricCipher::Encrypt); +- cipher.init(seed, iv); +- +- quint64 rounds = 1000000; +- QElapsedTimer timer; +- timer.start(); +- +- if (!cipher.processInPlace(key, rounds)) { +- return -1; +- } +- +- return static_cast(rounds * (static_cast(msec) / timer.elapsed())); +-} +- +-QString AesKdf::toString() const +-{ +- return QObject::tr("AES (%1 rounds)").arg(QString::number(rounds())); +-} +diff -urNr keepassxc-2.6.4-orig/src/crypto/kdf/AesKdf.h keepassxc-2.6.4-patched/src/crypto/kdf/AesKdf.h +--- keepassxc-2.6.4-orig/src/crypto/kdf/AesKdf.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/crypto/kdf/AesKdf.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,43 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_AESKDF_H +-#define KEEPASSX_AESKDF_H +- +-#include "Kdf.h" +- +-class AesKdf : public Kdf +-{ +-public: +- AesKdf(); +- explicit AesKdf(bool legacyKdbx3); +- +- bool processParameters(const QVariantMap& p) override; +- QVariantMap writeParameters() override; +- bool transform(const QByteArray& raw, QByteArray& result) const override; +- QSharedPointer clone() const override; +- QString toString() const override; +- +-protected: +- int benchmarkImpl(int msec) const override; +- +-private: +- Q_REQUIRED_RESULT static bool +- transformKeyRaw(const QByteArray& key, const QByteArray& seed, int rounds, QByteArray* result); +-}; +- +-#endif // KEEPASSX_AESKDF_H +diff -urNr keepassxc-2.6.4-orig/src/crypto/kdf/Argon2Kdf.cpp keepassxc-2.6.4-patched/src/crypto/kdf/Argon2Kdf.cpp +--- keepassxc-2.6.4-orig/src/crypto/kdf/Argon2Kdf.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/crypto/kdf/Argon2Kdf.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,226 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "Argon2Kdf.h" +- +-#include +- +-#include "crypto/argon2/argon2.h" +-#include "format/KeePass2.h" +- +-/** +- * KeePass' Argon2 implementation supports all parameters that are defined in the official specification, +- * but only the number of iterations, the memory size and the degree of parallelism can be configured by +- * the user in the database settings dialog. For the other parameters, KeePass chooses reasonable defaults: +- * a 256-bit salt is generated each time the database is saved, the tag length is 256 bits, no secret key +- * or associated data. KeePass uses the latest version of Argon2, v1.3. +- */ +-Argon2Kdf::Argon2Kdf(Type type) +- : Kdf::Kdf(type == Type::Argon2d ? KeePass2::KDF_ARGON2D : KeePass2::KDF_ARGON2ID) +- , m_version(0x13) +- , m_memory(1 << 16) +- , m_parallelism(static_cast(QThread::idealThreadCount())) +-{ +- m_rounds = 10; +-} +- +-quint32 Argon2Kdf::version() const +-{ +- return m_version; +-} +- +-bool Argon2Kdf::setVersion(quint32 version) +-{ +- // MIN=0x10; MAX=0x13) +- if (version >= 0x10 && version <= 0x13) { +- m_version = version; +- return true; +- } +- m_version = 0x13; +- return false; +-} +- +-Argon2Kdf::Type Argon2Kdf::type() const +-{ +- return uuid() == KeePass2::KDF_ARGON2D ? Type::Argon2d : Type::Argon2id; +-} +- +-quint64 Argon2Kdf::memory() const +-{ +- return m_memory; +-} +- +-bool Argon2Kdf::setMemory(quint64 kibibytes) +-{ +- // MIN=8KB; MAX=2,147,483,648KB +- if (kibibytes >= 8 && kibibytes < (1ULL << 32)) { +- m_memory = kibibytes; +- return true; +- } +- m_memory = 16; +- return false; +-} +- +-quint32 Argon2Kdf::parallelism() const +-{ +- return m_parallelism; +-} +- +-bool Argon2Kdf::setParallelism(quint32 threads) +-{ +- // MIN=1; MAX=16,777,215 +- if (threads >= 1 && threads < (1 << 24)) { +- m_parallelism = threads; +- return true; +- } +- m_parallelism = 1; +- return false; +-} +- +-bool Argon2Kdf::processParameters(const QVariantMap& p) +-{ +- QByteArray salt = p.value(KeePass2::KDFPARAM_ARGON2_SALT).toByteArray(); +- if (!setSeed(salt)) { +- return false; +- } +- +- bool ok; +- quint32 version = p.value(KeePass2::KDFPARAM_ARGON2_VERSION).toUInt(&ok); +- if (!ok || !setVersion(version)) { +- return false; +- } +- +- quint32 lanes = p.value(KeePass2::KDFPARAM_ARGON2_PARALLELISM).toUInt(&ok); +- if (!ok || !setParallelism(lanes)) { +- return false; +- } +- +- quint64 memory = p.value(KeePass2::KDFPARAM_ARGON2_MEMORY).toULongLong(&ok) / 1024ULL; +- if (!ok || !setMemory(memory)) { +- return false; +- } +- +- quint64 iterations = p.value(KeePass2::KDFPARAM_ARGON2_ITERATIONS).toULongLong(&ok); +- if (!ok || !setRounds(iterations)) { +- return false; +- } +- +- /* KeePass2 does not currently implement these parameters +- * +- QByteArray secret = p.value(KeePass2::KDFPARAM_ARGON2_SECRET).toByteArray(); +- if (!argon2Kdf->setSecret(secret)) { +- return nullptr; +- } +- +- QByteArray ad = p.value(KeePass2::KDFPARAM_ARGON2_ASSOCDATA).toByteArray(); +- if (!argon2Kdf->setAssocData(ad)) { +- return nullptr; +- } +- */ +- +- return true; +-} +- +-QVariantMap Argon2Kdf::writeParameters() +-{ +- QVariantMap p; +- p.insert(KeePass2::KDFPARAM_UUID, uuid().toRfc4122()); +- p.insert(KeePass2::KDFPARAM_ARGON2_VERSION, version()); +- p.insert(KeePass2::KDFPARAM_ARGON2_PARALLELISM, parallelism()); +- p.insert(KeePass2::KDFPARAM_ARGON2_MEMORY, memory() * 1024); +- p.insert(KeePass2::KDFPARAM_ARGON2_ITERATIONS, static_cast(rounds())); +- p.insert(KeePass2::KDFPARAM_ARGON2_SALT, seed()); +- +- /* KeePass2 does not currently implement these +- * +- if (!assocData().isEmpty()) { +- p.insert(KeePass2::KDFPARAM_ARGON2_ASSOCDATA, argon2Kdf.assocData()); +- } +- +- if (!secret().isEmpty()) { +- p.insert(KeePass2::KDFPARAM_ARGON2_SECRET, argon2Kdf.secret()); +- } +- */ +- +- return p; +-} +- +-bool Argon2Kdf::transform(const QByteArray& raw, QByteArray& result) const +-{ +- result.clear(); +- result.resize(32); +- return transformKeyRaw(raw, seed(), version(), type(), rounds(), memory(), parallelism(), result); +-} +- +-bool Argon2Kdf::transformKeyRaw(const QByteArray& key, +- const QByteArray& seed, +- quint32 version, +- Type type, +- quint32 rounds, +- quint64 memory, +- quint32 parallelism, +- QByteArray& result) +-{ +- // Time Cost, Mem Cost, Threads/Lanes, Password, length, Salt, length, out, length +- +- int rc = argon2_hash(rounds, +- memory, +- parallelism, +- key.data(), +- key.size(), +- seed.data(), +- seed.size(), +- result.data(), +- result.size(), +- nullptr, +- 0, +- type == Type::Argon2d ? Argon2_d : Argon2_id, +- version); +- if (rc != ARGON2_OK) { +- qWarning("Argon2 error: %s", argon2_error_message(rc)); +- return false; +- } +- +- return true; +-} +- +-QSharedPointer Argon2Kdf::clone() const +-{ +- return QSharedPointer::create(*this); +-} +- +-int Argon2Kdf::benchmarkImpl(int msec) const +-{ +- QByteArray key = QByteArray(16, '\x7E'); +- QByteArray seed = QByteArray(32, '\x4B'); +- +- QElapsedTimer timer; +- timer.start(); +- +- int rounds = 4; +- if (transformKeyRaw(key, seed, version(), type(), rounds, memory(), parallelism(), key)) { +- return static_cast(rounds * (static_cast(msec) / timer.elapsed())); +- } +- +- return 1; +-} +- +-QString Argon2Kdf::toString() const +-{ +- return QObject::tr("Argon2%1 (%2 rounds, %3 KB)") +- .arg(type() == Type::Argon2d ? "d" : "id", QString::number(rounds()), QString::number(memory())); +-} +diff -urNr keepassxc-2.6.4-orig/src/crypto/kdf/Argon2Kdf.h keepassxc-2.6.4-patched/src/crypto/kdf/Argon2Kdf.h +--- keepassxc-2.6.4-orig/src/crypto/kdf/Argon2Kdf.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/crypto/kdf/Argon2Kdf.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,66 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_ARGON2KDF_H +-#define KEEPASSX_ARGON2KDF_H +- +-#include "Kdf.h" +- +-class Argon2Kdf : public Kdf +-{ +-public: +- enum class Type +- { +- Argon2d, +- Argon2id +- }; +- +- Argon2Kdf(Type type); +- +- bool processParameters(const QVariantMap& p) override; +- QVariantMap writeParameters() override; +- bool transform(const QByteArray& raw, QByteArray& result) const override; +- QSharedPointer clone() const override; +- +- quint32 version() const; +- bool setVersion(quint32 version); +- Type type() const; +- quint64 memory() const; +- bool setMemory(quint64 kibibytes); +- quint32 parallelism() const; +- bool setParallelism(quint32 threads); +- QString toString() const override; +- +-protected: +- int benchmarkImpl(int msec) const override; +- +- quint32 m_version; +- quint64 m_memory; +- quint32 m_parallelism; +- +-private: +- Q_REQUIRED_RESULT static bool transformKeyRaw(const QByteArray& key, +- const QByteArray& seed, +- quint32 version, +- Type type, +- quint32 rounds, +- quint64 memory, +- quint32 parallelism, +- QByteArray& result); +-}; +- +-#endif // KEEPASSX_ARGON2KDF_H +diff -urNr keepassxc-2.6.4-orig/src/crypto/kdf/Kdf.cpp keepassxc-2.6.4-patched/src/crypto/kdf/Kdf.cpp +--- keepassxc-2.6.4-orig/src/crypto/kdf/Kdf.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/crypto/kdf/Kdf.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,104 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "Kdf.h" +-#include "Kdf_p.h" +- +-#include +- +-#include "crypto/Random.h" +- +-Kdf::Kdf(const QUuid& uuid) +- : m_rounds(KDF_DEFAULT_ROUNDS) +- , m_seed(QByteArray(KDF_MAX_SEED_SIZE, 0)) +- , m_uuid(uuid) +-{ +-} +- +-const QUuid& Kdf::uuid() const +-{ +- return m_uuid; +-} +- +-int Kdf::rounds() const +-{ +- return m_rounds; +-} +- +-QByteArray Kdf::seed() const +-{ +- return m_seed; +-} +- +-bool Kdf::setRounds(int rounds) +-{ +- if (rounds >= 1 && rounds < INT_MAX) { +- m_rounds = rounds; +- return true; +- } +- m_rounds = 1; +- return false; +-} +- +-bool Kdf::setSeed(const QByteArray& seed) +-{ +- if (seed.size() < KDF_MIN_SEED_SIZE || seed.size() > KDF_MAX_SEED_SIZE) { +- return false; +- } +- +- m_seed = seed; +- return true; +-} +- +-void Kdf::randomizeSeed() +-{ +- setSeed(randomGen()->randomArray(m_seed.size())); +-} +- +-int Kdf::benchmark(int msec) const +-{ +- // Run the benchmark twice using half the time for each run +- BenchmarkThread thread(msec / 2, this); +- int rounds = 0; +- +- thread.start(); +- thread.wait(); +- rounds += thread.rounds(); +- +- thread.start(); +- thread.wait(); +- rounds += thread.rounds(); +- +- return qMax(1, rounds); +-} +- +-Kdf::BenchmarkThread::BenchmarkThread(int msec, const Kdf* kdf) +- : m_rounds(1) +- , m_msec(msec) +- , m_kdf(kdf) +-{ +-} +- +-int Kdf::BenchmarkThread::rounds() +-{ +- return m_rounds; +-} +- +-void Kdf::BenchmarkThread::run() +-{ +- m_rounds = m_kdf->benchmarkImpl(m_msec); +-} +diff -urNr keepassxc-2.6.4-orig/src/crypto/kdf/Kdf.h keepassxc-2.6.4-patched/src/crypto/kdf/Kdf.h +--- keepassxc-2.6.4-orig/src/crypto/kdf/Kdf.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/crypto/kdf/Kdf.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,74 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_KDF_H +-#define KEEPASSX_KDF_H +- +-#include +-#include +- +-#define KDF_MIN_SEED_SIZE 8 +-#define KDF_MAX_SEED_SIZE 32 +-#define KDF_DEFAULT_ROUNDS 1000000ull +- +-class Kdf +-{ +-public: +- explicit Kdf(const QUuid& uuid); +- virtual ~Kdf() = default; +- +- const QUuid& uuid() const; +- +- int rounds() const; +- virtual bool setRounds(int rounds); +- QByteArray seed() const; +- virtual bool setSeed(const QByteArray& seed); +- virtual void randomizeSeed(); +- +- virtual bool processParameters(const QVariantMap& p) = 0; +- virtual QVariantMap writeParameters() = 0; +- virtual bool transform(const QByteArray& raw, QByteArray& result) const = 0; +- virtual QSharedPointer clone() const = 0; +- +- virtual QString toString() const = 0; +- +- int benchmark(int msec) const; +- +- /* +- * Default target encryption time, in MS. +- */ +- static const int DEFAULT_ENCRYPTION_TIME = 1000; +- /* +- * Minimum target encryption time, in MS. +- */ +- static const int MIN_ENCRYPTION_TIME = 100; +- /* +- * Maximum target encryption time, in MS. +- */ +- static const int MAX_ENCRYPTION_TIME = 5000; +- +-protected: +- virtual int benchmarkImpl(int msec) const = 0; +- +- int m_rounds; +- QByteArray m_seed; +- +-private: +- class BenchmarkThread; +- const QUuid m_uuid; +-}; +-#endif // KEEPASSX_KDF_H +diff -urNr keepassxc-2.6.4-orig/src/crypto/kdf/Kdf_p.h keepassxc-2.6.4-patched/src/crypto/kdf/Kdf_p.h +--- keepassxc-2.6.4-orig/src/crypto/kdf/Kdf_p.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/crypto/kdf/Kdf_p.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,43 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "Kdf.h" +- +-#include +- +-#ifndef KEEPASSXC_KDF_P_H +-#define KEEPASSXC_KDF_P_H +- +-class Kdf::BenchmarkThread : public QThread +-{ +- Q_OBJECT +- +-public: +- explicit BenchmarkThread(int msec, const Kdf* kdf); +- +- int rounds(); +- +-protected: +- void run(); +- +-private: +- int m_rounds; +- int m_msec; +- const Kdf* m_kdf; +-}; +- +-#endif // KEEPASSXC_KDF_P_H +diff -urNr keepassxc-2.6.4-orig/src/crypto/Random.cpp keepassxc-2.6.4-patched/src/crypto/Random.cpp +--- keepassxc-2.6.4-orig/src/crypto/Random.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/crypto/Random.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,103 +0,0 @@ +-/* +- * Copyright (C) 2010 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "Random.h" +- +-#include +- +-#include "core/Global.h" +-#include "crypto/Crypto.h" +- +-class RandomBackendGcrypt : public RandomBackend +-{ +-public: +- void randomize(void* data, int len) override; +-}; +- +-QSharedPointer Random::m_instance; +- +-void Random::randomize(QByteArray& ba) +-{ +- m_backend->randomize(ba.data(), ba.size()); +-} +- +-QByteArray Random::randomArray(int len) +-{ +- QByteArray ba; +- ba.resize(len); +- +- randomize(ba); +- +- return ba; +-} +- +-quint32 Random::randomUInt(quint32 limit) +-{ +- Q_ASSERT(limit != 0); +- Q_ASSERT(limit <= QUINT32_MAX); +- +- quint32 rand; +- const quint32 ceil = QUINT32_MAX - (QUINT32_MAX % limit) - 1; +- +- // To avoid modulo bias: +- // Make sure rand is below the largest number where rand%limit==0 +- do { +- m_backend->randomize(&rand, 4); +- } while (rand > ceil); +- +- return (rand % limit); +-} +- +-quint32 Random::randomUIntRange(quint32 min, quint32 max) +-{ +- return min + randomUInt(max - min); +-} +- +-Random* Random::instance() +-{ +- if (!m_instance) { +- m_instance.reset(new Random(new RandomBackendGcrypt())); +- } +- +- return m_instance.data(); +-} +- +-void Random::resetInstance() +-{ +- m_instance.reset(); +-} +- +-void Random::setInstance(RandomBackend* backend) +-{ +- m_instance.reset(new Random(backend)); +-} +- +-Random::Random(RandomBackend* backend) +- : m_backend(backend) +-{ +-} +- +-void RandomBackendGcrypt::randomize(void* data, int len) +-{ +- Q_ASSERT(Crypto::initialized()); +- +- gcry_randomize(data, len, GCRY_STRONG_RANDOM); +-} +- +-RandomBackend::~RandomBackend() +-{ +-} +diff -urNr keepassxc-2.6.4-orig/src/crypto/Random.h keepassxc-2.6.4-patched/src/crypto/Random.h +--- keepassxc-2.6.4-orig/src/crypto/Random.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/crypto/Random.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,69 +0,0 @@ +-/* +- * Copyright (C) 2010 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_RANDOM_H +-#define KEEPASSX_RANDOM_H +- +-#include +-#include +-#include +- +-class RandomBackend +-{ +-public: +- virtual void randomize(void* data, int len) = 0; +- virtual ~RandomBackend(); +-}; +- +-class Random +-{ +-public: +- void randomize(QByteArray& ba); +- QByteArray randomArray(int len); +- +- /** +- * Generate a random quint32 in the range [0, @p limit) +- */ +- quint32 randomUInt(quint32 limit); +- +- /** +- * Generate a random quint32 in the range [@p min, @p max) +- */ +- quint32 randomUIntRange(quint32 min, quint32 max); +- +- static Random* instance(); +- +-protected: +- static void resetInstance(); +- static void setInstance(RandomBackend* backend); +- +-private: +- static QSharedPointer m_instance; +- +- explicit Random(RandomBackend* backend); +- +- QScopedPointer m_backend; +- +- Q_DISABLE_COPY(Random) +-}; +- +-inline Random* randomGen() +-{ +- return Random::instance(); +-} +- +-#endif // KEEPASSX_RANDOM_H +diff -urNr keepassxc-2.6.4-orig/src/crypto/ssh/ASN1Key.cpp keepassxc-2.6.4-patched/src/crypto/ssh/ASN1Key.cpp +--- keepassxc-2.6.4-orig/src/crypto/ssh/ASN1Key.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/crypto/ssh/ASN1Key.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,226 +0,0 @@ +-/* +- * Copyright (C) 2018 Toni Spets +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "ASN1Key.h" +-#include "crypto/ssh/BinaryStream.h" +- +-#include +- +-namespace +-{ +- constexpr quint8 TAG_INT = 0x02; +- constexpr quint8 TAG_SEQUENCE = 0x30; +- constexpr quint8 KEY_ZERO = 0x0; +- +- bool nextTag(BinaryStream& stream, quint8& tag, quint32& len) +- { +- stream.read(tag); +- +- quint8 lenByte; +- stream.read(lenByte); +- +- if (lenByte & 0x80) { +- quint32 bytes = lenByte & ~0x80; +- if (bytes == 1) { +- stream.read(lenByte); +- len = lenByte; +- } else if (bytes == 2) { +- quint16 lenShort; +- stream.read(lenShort); +- len = lenShort; +- } else if (bytes == 4) { +- stream.read(len); +- } else { +- return false; +- } +- } else { +- len = lenByte; +- } +- +- return true; +- } +- +- bool parsePublicHeader(BinaryStream& stream) +- { +- quint8 tag; +- quint32 len; +- +- nextTag(stream, tag, len); +- +- return (tag == TAG_SEQUENCE); +- } +- +- bool parsePrivateHeader(BinaryStream& stream, quint8 wantedType) +- { +- quint8 tag; +- quint32 len; +- +- nextTag(stream, tag, len); +- +- if (tag != TAG_SEQUENCE) { +- return false; +- } +- +- nextTag(stream, tag, len); +- +- if (tag != TAG_INT || len != 1) { +- return false; +- } +- +- quint8 keyType; +- stream.read(keyType); +- +- return (keyType == wantedType); +- } +- +- bool readInt(BinaryStream& stream, QByteArray& target) +- { +- quint8 tag; +- quint32 len; +- +- nextTag(stream, tag, len); +- +- if (tag != TAG_INT) { +- return false; +- } +- +- target.resize(len); +- stream.read(target); +- return true; +- } +- +- QByteArray calculateIqmp(QByteArray& bap, QByteArray& baq) +- { +- gcry_mpi_t u, p, q; +- QByteArray iqmp_hex; +- +- u = gcry_mpi_snew(bap.length() * 8); +- gcry_mpi_scan(&p, GCRYMPI_FMT_HEX, bap.toHex().data(), 0, nullptr); +- gcry_mpi_scan(&q, GCRYMPI_FMT_HEX, baq.toHex().data(), 0, nullptr); +- +- mpi_invm(u, q, p); +- +- iqmp_hex.resize(bap.length() * 2); +- gcry_mpi_print(GCRYMPI_FMT_HEX, reinterpret_cast(iqmp_hex.data()), iqmp_hex.size(), nullptr, u); +- +- gcry_mpi_release(u); +- gcry_mpi_release(p); +- gcry_mpi_release(q); +- +- return QByteArray::fromHex(QString(iqmp_hex).toLatin1()); +- } +-} // namespace +- +-bool ASN1Key::parseDSA(QByteArray& ba, OpenSSHKey& key) +-{ +- BinaryStream stream(&ba); +- +- if (!parsePrivateHeader(stream, KEY_ZERO)) { +- return false; +- } +- +- QByteArray p, q, g, y, x; +- readInt(stream, p); +- readInt(stream, q); +- readInt(stream, g); +- readInt(stream, y); +- readInt(stream, x); +- +- QList publicData; +- publicData.append(p); +- publicData.append(q); +- publicData.append(g); +- publicData.append(y); +- +- QList privateData; +- privateData.append(p); +- privateData.append(q); +- privateData.append(g); +- privateData.append(y); +- privateData.append(x); +- +- key.setType("ssh-dss"); +- key.setPublicData(publicData); +- key.setPrivateData(privateData); +- key.setComment(""); +- return true; +-} +- +-bool ASN1Key::parsePublicRSA(QByteArray& ba, OpenSSHKey& key) +-{ +- BinaryStream stream(&ba); +- +- if (!parsePublicHeader(stream)) { +- return false; +- } +- +- QByteArray n, e; +- readInt(stream, n); +- readInt(stream, e); +- +- QList publicData; +- publicData.append(e); +- publicData.append(n); +- +- QList privateData; +- privateData.append(n); +- privateData.append(e); +- +- key.setType("ssh-rsa"); +- key.setPublicData(publicData); +- key.setPrivateData(privateData); +- key.setComment(""); +- return true; +-} +- +-bool ASN1Key::parsePrivateRSA(QByteArray& ba, OpenSSHKey& key) +-{ +- BinaryStream stream(&ba); +- +- if (!parsePrivateHeader(stream, KEY_ZERO)) { +- return false; +- } +- +- QByteArray n, e, d, p, q, dp, dq, qinv; +- readInt(stream, n); +- readInt(stream, e); +- readInt(stream, d); +- readInt(stream, p); +- readInt(stream, q); +- readInt(stream, dp); +- readInt(stream, dq); +- readInt(stream, qinv); +- +- QList publicData; +- publicData.append(e); +- publicData.append(n); +- +- QList privateData; +- privateData.append(n); +- privateData.append(e); +- privateData.append(d); +- privateData.append(calculateIqmp(p, q)); +- privateData.append(p); +- privateData.append(q); +- +- key.setType("ssh-rsa"); +- key.setPublicData(publicData); +- key.setPrivateData(privateData); +- key.setComment(""); +- return true; +-} +diff -urNr keepassxc-2.6.4-orig/src/crypto/ssh/ASN1Key.h keepassxc-2.6.4-patched/src/crypto/ssh/ASN1Key.h +--- keepassxc-2.6.4-orig/src/crypto/ssh/ASN1Key.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/crypto/ssh/ASN1Key.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,32 +0,0 @@ +-/* +- * Copyright (C) 2018 Toni Spets +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_ASN1KEY_H +-#define KEEPASSXC_ASN1KEY_H +- +-#include "OpenSSHKey.h" +-#include +- +-namespace ASN1Key +-{ +- bool parseDSA(QByteArray& ba, OpenSSHKey& key); +- bool parsePrivateRSA(QByteArray& ba, OpenSSHKey& key); +- bool parsePublicRSA(QByteArray& ba, OpenSSHKey& key); +-} // namespace ASN1Key +- +-#endif // KEEPASSXC_ASN1KEY_H +diff -urNr keepassxc-2.6.4-orig/src/crypto/ssh/bcrypt_pbkdf.cpp keepassxc-2.6.4-patched/src/crypto/ssh/bcrypt_pbkdf.cpp +--- keepassxc-2.6.4-orig/src/crypto/ssh/bcrypt_pbkdf.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/crypto/ssh/bcrypt_pbkdf.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,172 +0,0 @@ +-/* $OpenBSD: bcrypt_pbkdf.c,v 1.13 2015/01/12 03:20:04 tedu Exp $ */ +-/* +- * Copyright (c) 2013 Ted Unangst +- * +- * Permission to use, copy, modify, and distribute this software for any +- * purpose with or without fee is hereby granted, provided that the above +- * copyright notice and this permission notice appear in all copies. +- * +- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +- */ +- +-#include +- +-extern "C" { +-#include "blf.h" +-} +- +-#define MINIMUM(a,b) (((a) < (b)) ? (a) : (b)) +- +-/* +- * pkcs #5 pbkdf2 implementation using the "bcrypt" hash +- * +- * The bcrypt hash function is derived from the bcrypt password hashing +- * function with the following modifications: +- * 1. The input password and salt are preprocessed with SHA512. +- * 2. The output length is expanded to 256 bits. +- * 3. Subsequently the magic string to be encrypted is lengthened and modifed +- * to "OxychromaticBlowfishSwatDynamite" +- * 4. The hash function is defined to perform 64 rounds of initial state +- * expansion. (More rounds are performed by iterating the hash.) +- * +- * Note that this implementation pulls the SHA512 operations into the caller +- * as a performance optimization. +- * +- * One modification from official pbkdf2. Instead of outputting key material +- * linearly, we mix it. pbkdf2 has a known weakness where if one uses it to +- * generate (e.g.) 512 bits of key material for use as two 256 bit keys, an +- * attacker can merely run once through the outer loop, but the user +- * always runs it twice. Shuffling output bytes requires computing the +- * entirety of the key material to assemble any subkey. This is something a +- * wise caller could do; we just do it for you. +- */ +- +-#define BCRYPT_WORDS 8 +-#define BCRYPT_HASHSIZE (BCRYPT_WORDS * 4) +-#define SHA512_DIGEST_LENGTH 64 +- +-// FIXME: explicit_bzero exists to ensure bzero is not optimized out +-#define explicit_bzero bzero +- +-static void +-bcrypt_hash(const quint8* sha2pass, const quint8* sha2salt, quint8* out) +-{ +- blf_ctx state; +- quint8 ciphertext[BCRYPT_HASHSIZE] = // "OxychromaticBlowfishSwatDynamite" +- { 0x4f, 0x78, 0x79, 0x63, 0x68, 0x72, 0x6f, 0x6d, +- 0x61, 0x74, 0x69, 0x63, 0x42, 0x6c, 0x6f, 0x77, +- 0x66, 0x69, 0x73, 0x68, 0x53, 0x77, 0x61, 0x74, +- 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x74, 0x65 }; +- quint32 cdata[BCRYPT_WORDS]; +- int i; +- quint16 j; +- size_t shalen = SHA512_DIGEST_LENGTH; +- +- /* key expansion */ +- Blowfish_initstate(&state); +- Blowfish_expandstate(&state, sha2salt, shalen, sha2pass, shalen); +- for (i = 0; i < 64; i++) { +- Blowfish_expand0state(&state, sha2salt, shalen); +- Blowfish_expand0state(&state, sha2pass, shalen); +- } +- +- /* encryption */ +- j = 0; +- for (i = 0; i < BCRYPT_WORDS; i++) +- cdata[i] = Blowfish_stream2word(ciphertext, sizeof(ciphertext), +- &j); +- for (i = 0; i < 64; i++) +- blf_enc(&state, cdata, BCRYPT_WORDS / 2); +- +- /* copy out */ +- for (i = 0; i < BCRYPT_WORDS; i++) { +- out[4 * i + 3] = (cdata[i] >> 24) & 0xff; +- out[4 * i + 2] = (cdata[i] >> 16) & 0xff; +- out[4 * i + 1] = (cdata[i] >> 8) & 0xff; +- out[4 * i + 0] = cdata[i] & 0xff; +- } +- +- /* zap */ +- explicit_bzero(ciphertext, sizeof(ciphertext)); +- explicit_bzero(cdata, sizeof(cdata)); +- explicit_bzero(&state, sizeof(state)); +-} +- +-int bcrypt_pbkdf(const QByteArray& pass, const QByteArray& salt, QByteArray& key, quint32 rounds) +-{ +- QCryptographicHash ctx(QCryptographicHash::Sha512); +- QByteArray sha2pass; +- QByteArray sha2salt; +- quint8 out[BCRYPT_HASHSIZE]; +- quint8 tmpout[BCRYPT_HASHSIZE]; +- quint8 countsalt[4]; +- +- /* nothing crazy */ +- if (rounds < 1) { +- return -1; +- } +- +- if (pass.isEmpty() || salt.isEmpty() || key.isEmpty() || +- static_cast(key.length()) > sizeof(out) * sizeof(out)) { +- return -1; +- } +- +- quint32 stride = (key.length() + sizeof(out) - 1) / sizeof(out); +- quint32 amt = (key.length() + stride - 1) / stride; +- +- /* collapse password */ +- ctx.reset(); +- ctx.addData(pass); +- sha2pass = ctx.result(); +- +- /* generate key, sizeof(out) at a time */ +- for (quint32 count = 1, keylen = key.length(); keylen > 0; count++) { +- countsalt[0] = (count >> 24) & 0xff; +- countsalt[1] = (count >> 16) & 0xff; +- countsalt[2] = (count >> 8) & 0xff; +- countsalt[3] = count & 0xff; +- +- /* first round, salt is salt */ +- ctx.reset(); +- ctx.addData(salt); +- ctx.addData(reinterpret_cast(countsalt), sizeof(countsalt)); +- sha2salt = ctx.result(); +- +- bcrypt_hash(reinterpret_cast(sha2pass.data()), reinterpret_cast(sha2salt.data()), tmpout); +- memcpy(out, tmpout, sizeof(out)); +- +- for (quint32 i = 1; i < rounds; i++) { +- /* subsequent rounds, salt is previous output */ +- ctx.reset(); +- ctx.addData(reinterpret_cast(tmpout), sizeof(tmpout)); +- sha2salt = ctx.result(); +- bcrypt_hash(reinterpret_cast(sha2pass.data()), reinterpret_cast(sha2salt.data()), tmpout); +- for (quint32 j = 0; j < sizeof(out); j++) +- out[j] ^= tmpout[j]; +- } +- +- /* +- * pbkdf2 deviation: output the key material non-linearly. +- */ +- amt = MINIMUM(amt, keylen); +- quint32 i; +- for (i = 0; i < amt; i++) { +- int dest = i * stride + (count - 1); +- if (dest >= key.length()) +- break; +- key.data()[dest] = out[i]; +- } +- keylen -= i; +- } +- +- /* zap */ +- explicit_bzero(out, sizeof(out)); +- +- return 0; +-} +diff -urNr keepassxc-2.6.4-orig/src/crypto/ssh/BinaryStream.cpp keepassxc-2.6.4-patched/src/crypto/ssh/BinaryStream.cpp +--- keepassxc-2.6.4-orig/src/crypto/ssh/BinaryStream.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/crypto/ssh/BinaryStream.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,200 +0,0 @@ +-/* +- * Copyright (C) 2017 Toni Spets +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "BinaryStream.h" +-#include +- +-BinaryStream::BinaryStream(QIODevice* device) +- : QObject(device) +- , m_timeout(-1) +- , m_device(device) +-{ +-} +- +-BinaryStream::BinaryStream(QByteArray* ba, QObject* parent) +- : QObject(parent) +- , m_timeout(-1) +-{ +- m_buffer.reset(new QBuffer(ba)); +- m_buffer->open(QIODevice::ReadWrite); +- +- m_device = m_buffer.data(); +-} +- +-BinaryStream::~BinaryStream() +-{ +-} +- +-const QString BinaryStream::errorString() const +-{ +- return m_error; +-} +- +-QIODevice* BinaryStream::device() const +-{ +- return m_device; +-} +- +-void BinaryStream::setTimeout(int timeout) +-{ +- m_timeout = timeout; +-} +- +-bool BinaryStream::read(char* ptr, qint64 size) +-{ +- qint64 pos = 0; +- +- while (pos < size) { +- if (m_device->bytesAvailable() == 0) { +- if (!m_device->waitForReadyRead(m_timeout)) { +- m_error = m_device->errorString(); +- return false; +- } +- } +- +- qint64 nread = m_device->read(ptr + pos, size - pos); +- +- if (nread == -1) { +- m_error = m_device->errorString(); +- return false; +- } +- +- pos += nread; +- } +- +- return true; +-} +- +-bool BinaryStream::read(QByteArray& ba) +-{ +- return read(ba.data(), ba.length()); +-} +- +-bool BinaryStream::read(quint32& i) +-{ +- if (read(reinterpret_cast(&i), sizeof(i))) { +- i = qFromBigEndian(i); +- return true; +- } +- +- return false; +-} +- +-bool BinaryStream::read(quint16& i) +-{ +- if (read(reinterpret_cast(&i), sizeof(i))) { +- i = qFromBigEndian(i); +- return true; +- } +- +- return false; +-} +- +-bool BinaryStream::read(quint8& i) +-{ +- return read(reinterpret_cast(&i), sizeof(i)); +-} +- +-bool BinaryStream::readString(QByteArray& ba) +-{ +- quint32 length; +- +- if (!read(length)) { +- return false; +- } +- +- ba.resize(length); +- +- if (!read(ba.data(), ba.length())) { +- return false; +- } +- +- return true; +-} +- +-bool BinaryStream::readString(QString& str) +-{ +- QByteArray ba; +- +- if (!readString(ba)) { +- return false; +- } +- +- str = QString::fromLatin1(ba); +- return true; +-} +- +-bool BinaryStream::write(const char* ptr, qint64 size) +-{ +- if (m_device->write(ptr, size) < 0) { +- m_error = m_device->errorString(); +- return false; +- } +- +- return true; +-} +- +-bool BinaryStream::flush() +-{ +- if (!m_device->waitForBytesWritten(m_timeout)) { +- m_error = m_device->errorString(); +- return false; +- } +- +- return true; +-} +- +-bool BinaryStream::write(const QByteArray& ba) +-{ +- return write(ba.data(), ba.length()); +-} +- +-bool BinaryStream::write(quint32 i) +-{ +- i = qToBigEndian(i); +- return write(reinterpret_cast(&i), sizeof(i)); +-} +- +-bool BinaryStream::write(quint16 i) +-{ +- i = qToBigEndian(i); +- return write(reinterpret_cast(&i), sizeof(i)); +-} +- +-bool BinaryStream::write(quint8 i) +-{ +- return write(reinterpret_cast(&i), sizeof(i)); +-} +- +-bool BinaryStream::writeString(const QByteArray& ba) +-{ +- if (!write(static_cast(ba.length()))) { +- return false; +- } +- +- if (!write(ba)) { +- return false; +- } +- +- return true; +-} +- +-bool BinaryStream::writeString(const QString& s) +-{ +- return writeString(s.toLatin1()); +-} +diff -urNr keepassxc-2.6.4-orig/src/crypto/ssh/BinaryStream.h keepassxc-2.6.4-patched/src/crypto/ssh/BinaryStream.h +--- keepassxc-2.6.4-orig/src/crypto/ssh/BinaryStream.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/crypto/ssh/BinaryStream.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,66 +0,0 @@ +-/* +- * Copyright (C) 2017 Toni Spets +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_BINARYSTREAM_H +-#define KEEPASSXC_BINARYSTREAM_H +- +-#include +-#include +-#include +- +-class BinaryStream : QObject +-{ +- Q_OBJECT +- Q_DISABLE_COPY(BinaryStream) +-public: +- explicit BinaryStream(QIODevice* device); +- explicit BinaryStream(QByteArray* ba, QObject* parent = nullptr); +- ~BinaryStream() override; +- +- const QString errorString() const; +- QIODevice* device() const; +- void setTimeout(int timeout); +- +- bool read(QByteArray& ba); +- bool read(quint32& i); +- bool read(quint16& i); +- bool read(quint8& i); +- bool readString(QByteArray& ba); +- bool readString(QString& s); +- +- bool write(const QByteArray& ba); +- bool write(quint32 i); +- bool write(quint16 i); +- bool write(quint8 i); +- bool writeString(const QByteArray& ba); +- bool writeString(const QString& s); +- +- bool flush(); +- +-protected: +- bool read(char* ptr, qint64 len); +- bool write(const char* ptr, qint64 len); +- +-private: +- int m_timeout; +- QString m_error; +- QIODevice* m_device; +- QScopedPointer m_buffer; +-}; +- +-#endif // KEEPASSXC_BINARYSTREAM_H +diff -urNr keepassxc-2.6.4-orig/src/crypto/ssh/blf.h keepassxc-2.6.4-patched/src/crypto/ssh/blf.h +--- keepassxc-2.6.4-orig/src/crypto/ssh/blf.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/crypto/ssh/blf.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,88 +0,0 @@ +-/* $OpenBSD: blf.h,v 1.7 2007/03/14 17:59:41 grunk Exp $ */ +-/* +- * Blowfish - a fast block cipher designed by Bruce Schneier +- * +- * Copyright 1997 Niels Provos +- * All rights reserved. +- * +- * Redistribution and use in source and binary forms, with or without +- * modification, are permitted provided that the following conditions +- * are met: +- * 1. Redistributions of source code must retain the above copyright +- * notice, this list of conditions and the following disclaimer. +- * 2. Redistributions in binary form must reproduce the above copyright +- * notice, this list of conditions and the following disclaimer in the +- * documentation and/or other materials provided with the distribution. +- * 3. All advertising materials mentioning features or use of this software +- * must display the following acknowledgement: +- * This product includes software developed by Niels Provos. +- * 4. The name of the author may not be used to endorse or promote products +- * derived from this software without specific prior written permission. +- * +- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +- */ +- +-#ifndef _BLF_H_ +-#define _BLF_H_ +- +-#include "includes.h" +- +-#if !defined(HAVE_BCRYPT_PBKDF) && !defined(HAVE_BLH_H) +- +-/* Schneier specifies a maximum key length of 56 bytes. +- * This ensures that every key bit affects every cipher +- * bit. However, the subkeys can hold up to 72 bytes. +- * Warning: For normal blowfish encryption only 56 bytes +- * of the key affect all cipherbits. +- */ +- +-#define BLF_N 16 /* Number of Subkeys */ +-#define BLF_MAXKEYLEN ((BLF_N-2)*4) /* 448 bits */ +-#define BLF_MAXUTILIZED ((BLF_N+2)*4) /* 576 bits */ +- +-/* Blowfish context */ +-typedef struct BlowfishContext { +- u_int32_t S[4][256]; /* S-Boxes */ +- u_int32_t P[BLF_N + 2]; /* Subkeys */ +-} blf_ctx; +- +-/* Raw access to customized Blowfish +- * blf_key is just: +- * Blowfish_initstate( state ) +- * Blowfish_expand0state( state, key, keylen ) +- */ +- +-void Blowfish_encipher(blf_ctx *, u_int32_t *, u_int32_t *); +-void Blowfish_decipher(blf_ctx *, u_int32_t *, u_int32_t *); +-void Blowfish_initstate(blf_ctx *); +-void Blowfish_expand0state(blf_ctx *, const u_int8_t *, u_int16_t); +-void Blowfish_expandstate +-(blf_ctx *, const u_int8_t *, u_int16_t, const u_int8_t *, u_int16_t); +- +-/* Standard Blowfish */ +- +-void blf_key(blf_ctx *, const u_int8_t *, u_int16_t); +-void blf_enc(blf_ctx *, u_int32_t *, u_int16_t); +-void blf_dec(blf_ctx *, u_int32_t *, u_int16_t); +- +-void blf_ecb_encrypt(blf_ctx *, u_int8_t *, u_int32_t); +-void blf_ecb_decrypt(blf_ctx *, u_int8_t *, u_int32_t); +- +-void blf_cbc_encrypt(blf_ctx *, u_int8_t *, u_int8_t *, u_int32_t); +-void blf_cbc_decrypt(blf_ctx *, u_int8_t *, u_int8_t *, u_int32_t); +- +-/* Converts u_int8_t to u_int32_t */ +-u_int32_t Blowfish_stream2word(const u_int8_t *, u_int16_t , u_int16_t *); +- +-#endif /* !defined(HAVE_BCRYPT_PBKDF) && !defined(HAVE_BLH_H) */ +-#endif /* _BLF_H */ +- +diff -urNr keepassxc-2.6.4-orig/src/crypto/ssh/blowfish.c keepassxc-2.6.4-patched/src/crypto/ssh/blowfish.c +--- keepassxc-2.6.4-orig/src/crypto/ssh/blowfish.c 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/crypto/ssh/blowfish.c 1970-01-01 01:00:00.000000000 +0100 +@@ -1,696 +0,0 @@ +-/* $OpenBSD: blowfish.c,v 1.18 2004/11/02 17:23:26 hshoexer Exp $ */ +-/* +- * Blowfish block cipher for OpenBSD +- * Copyright 1997 Niels Provos +- * All rights reserved. +- * +- * Implementation advice by David Mazieres . +- * +- * Redistribution and use in source and binary forms, with or without +- * modification, are permitted provided that the following conditions +- * are met: +- * 1. Redistributions of source code must retain the above copyright +- * notice, this list of conditions and the following disclaimer. +- * 2. Redistributions in binary form must reproduce the above copyright +- * notice, this list of conditions and the following disclaimer in the +- * documentation and/or other materials provided with the distribution. +- * 3. All advertising materials mentioning features or use of this software +- * must display the following acknowledgement: +- * This product includes software developed by Niels Provos. +- * 4. The name of the author may not be used to endorse or promote products +- * derived from this software without specific prior written permission. +- * +- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +- */ +- +-/* +- * This code is derived from section 14.3 and the given source +- * in section V of Applied Cryptography, second edition. +- * Blowfish is an unpatented fast block cipher designed by +- * Bruce Schneier. +- */ +- +-#include "includes.h" +- +-#if !defined(HAVE_BCRYPT_PBKDF) && (!defined(HAVE_BLOWFISH_INITSTATE) || \ +- !defined(HAVE_BLOWFISH_EXPAND0STATE) || !defined(HAVE_BLF_ENC)) +- +-#if 0 +-#include /* used for debugging */ +-#include +-#endif +- +-#include +-#ifdef HAVE_BLF_H +-#include +-#endif +- +-#undef inline +-#ifdef __GNUC__ +-#define inline __inline +-#else /* !__GNUC__ */ +-#define inline +-#endif /* !__GNUC__ */ +- +-/* Function for Feistel Networks */ +- +-#define F(s, x) ((((s)[ (((x)>>24)&0xFF)] \ +- + (s)[0x100 + (((x)>>16)&0xFF)]) \ +- ^ (s)[0x200 + (((x)>> 8)&0xFF)]) \ +- + (s)[0x300 + ( (x) &0xFF)]) +- +-#define BLFRND(s,p,i,j,n) (i ^= F(s,j) ^ (p)[n]) +- +-void +-Blowfish_encipher(blf_ctx *c, u_int32_t *xl, u_int32_t *xr) +-{ +- u_int32_t Xl; +- u_int32_t Xr; +- u_int32_t *s = c->S[0]; +- u_int32_t *p = c->P; +- +- Xl = *xl; +- Xr = *xr; +- +- Xl ^= p[0]; +- BLFRND(s, p, Xr, Xl, 1); BLFRND(s, p, Xl, Xr, 2); +- BLFRND(s, p, Xr, Xl, 3); BLFRND(s, p, Xl, Xr, 4); +- BLFRND(s, p, Xr, Xl, 5); BLFRND(s, p, Xl, Xr, 6); +- BLFRND(s, p, Xr, Xl, 7); BLFRND(s, p, Xl, Xr, 8); +- BLFRND(s, p, Xr, Xl, 9); BLFRND(s, p, Xl, Xr, 10); +- BLFRND(s, p, Xr, Xl, 11); BLFRND(s, p, Xl, Xr, 12); +- BLFRND(s, p, Xr, Xl, 13); BLFRND(s, p, Xl, Xr, 14); +- BLFRND(s, p, Xr, Xl, 15); BLFRND(s, p, Xl, Xr, 16); +- +- *xl = Xr ^ p[17]; +- *xr = Xl; +-} +- +-void +-Blowfish_decipher(blf_ctx *c, u_int32_t *xl, u_int32_t *xr) +-{ +- u_int32_t Xl; +- u_int32_t Xr; +- u_int32_t *s = c->S[0]; +- u_int32_t *p = c->P; +- +- Xl = *xl; +- Xr = *xr; +- +- Xl ^= p[17]; +- BLFRND(s, p, Xr, Xl, 16); BLFRND(s, p, Xl, Xr, 15); +- BLFRND(s, p, Xr, Xl, 14); BLFRND(s, p, Xl, Xr, 13); +- BLFRND(s, p, Xr, Xl, 12); BLFRND(s, p, Xl, Xr, 11); +- BLFRND(s, p, Xr, Xl, 10); BLFRND(s, p, Xl, Xr, 9); +- BLFRND(s, p, Xr, Xl, 8); BLFRND(s, p, Xl, Xr, 7); +- BLFRND(s, p, Xr, Xl, 6); BLFRND(s, p, Xl, Xr, 5); +- BLFRND(s, p, Xr, Xl, 4); BLFRND(s, p, Xl, Xr, 3); +- BLFRND(s, p, Xr, Xl, 2); BLFRND(s, p, Xl, Xr, 1); +- +- *xl = Xr ^ p[0]; +- *xr = Xl; +-} +- +-void +-Blowfish_initstate(blf_ctx *c) +-{ +- /* P-box and S-box tables initialized with digits of Pi */ +- +- static const blf_ctx initstate = +- { { +- { +- 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, +- 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99, +- 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, +- 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e, +- 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee, +- 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013, +- 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, +- 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e, +- 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60, +- 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440, +- 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, +- 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a, +- 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, +- 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677, +- 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, +- 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, +- 0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88, +- 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239, +- 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, +- 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0, +- 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, +- 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, +- 0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88, +- 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe, +- 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, +- 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d, +- 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, +- 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7, +- 0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba, +- 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463, +- 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, +- 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09, +- 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3, +- 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, +- 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279, +- 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8, +- 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, +- 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82, +- 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db, +- 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, +- 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, +- 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b, +- 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, +- 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8, +- 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, +- 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, +- 0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, +- 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c, +- 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, +- 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1, +- 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, +- 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, +- 0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477, +- 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf, +- 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, +- 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af, +- 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, +- 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5, +- 0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41, +- 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915, +- 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, +- 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915, +- 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, +- 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a}, +- { +- 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, +- 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266, +- 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, +- 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e, +- 0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6, +- 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1, +- 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, +- 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1, +- 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, +- 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8, +- 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff, +- 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, +- 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, +- 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7, +- 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, +- 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, +- 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, +- 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af, +- 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, +- 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87, +- 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, +- 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, +- 0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16, +- 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd, +- 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, +- 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509, +- 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, +- 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, +- 0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f, +- 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a, +- 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, +- 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960, +- 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, +- 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28, +- 0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802, +- 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84, +- 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, +- 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf, +- 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, +- 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e, +- 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50, +- 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, +- 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, +- 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281, +- 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, +- 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696, +- 0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, +- 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73, +- 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, +- 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0, +- 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, +- 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, +- 0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, +- 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285, +- 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, +- 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061, +- 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, +- 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e, +- 0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735, +- 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc, +- 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, +- 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340, +- 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, +- 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7}, +- { +- 0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, +- 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068, +- 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, +- 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840, +- 0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45, +- 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504, +- 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, +- 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb, +- 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, +- 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6, +- 0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42, +- 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b, +- 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, +- 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb, +- 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, +- 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b, +- 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33, +- 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c, +- 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, +- 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc, +- 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, +- 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564, +- 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, +- 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115, +- 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, +- 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728, +- 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, +- 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, +- 0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, +- 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d, +- 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, +- 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b, +- 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, +- 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb, +- 0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d, +- 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c, +- 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, +- 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9, +- 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, +- 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe, +- 0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d, +- 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc, +- 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, +- 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61, +- 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, +- 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9, +- 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, +- 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, +- 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, +- 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633, +- 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, +- 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169, +- 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, +- 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027, +- 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, +- 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62, +- 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, +- 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, +- 0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24, +- 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc, +- 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, +- 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c, +- 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, +- 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0}, +- { +- 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, +- 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe, +- 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, +- 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, +- 0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8, +- 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6, +- 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, +- 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22, +- 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, +- 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, +- 0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9, +- 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59, +- 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, +- 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51, +- 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, +- 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, +- 0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b, +- 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28, +- 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, +- 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd, +- 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, +- 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319, +- 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb, +- 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f, +- 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, +- 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32, +- 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, +- 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, +- 0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, +- 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb, +- 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, +- 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47, +- 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, +- 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, +- 0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84, +- 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048, +- 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, +- 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd, +- 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, +- 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, +- 0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38, +- 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f, +- 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, +- 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525, +- 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, +- 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442, +- 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964, +- 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e, +- 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, +- 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d, +- 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, +- 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, +- 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02, +- 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, +- 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, +- 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a, +- 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, +- 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, +- 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, +- 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060, +- 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, +- 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9, +- 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, +- 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6} +- }, +- { +- 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, +- 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89, +- 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c, +- 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, +- 0x9216d5d9, 0x8979fb1b +- } }; +- +- *c = initstate; +-} +- +-u_int32_t +-Blowfish_stream2word(const u_int8_t *data, u_int16_t databytes, +- u_int16_t *current) +-{ +- u_int8_t i; +- u_int16_t j; +- u_int32_t temp; +- +- temp = 0x00000000; +- j = *current; +- +- for (i = 0; i < 4; i++, j++) { +- if (j >= databytes) +- j = 0; +- temp = (temp << 8) | data[j]; +- } +- +- *current = j; +- return temp; +-} +- +-void +-Blowfish_expand0state(blf_ctx *c, const u_int8_t *key, u_int16_t keybytes) +-{ +- u_int16_t i; +- u_int16_t j; +- u_int16_t k; +- u_int32_t temp; +- u_int32_t datal; +- u_int32_t datar; +- +- j = 0; +- for (i = 0; i < BLF_N + 2; i++) { +- /* Extract 4 int8 to 1 int32 from keystream */ +- temp = Blowfish_stream2word(key, keybytes, &j); +- c->P[i] = c->P[i] ^ temp; +- } +- +- j = 0; +- datal = 0x00000000; +- datar = 0x00000000; +- for (i = 0; i < BLF_N + 2; i += 2) { +- Blowfish_encipher(c, &datal, &datar); +- +- c->P[i] = datal; +- c->P[i + 1] = datar; +- } +- +- for (i = 0; i < 4; i++) { +- for (k = 0; k < 256; k += 2) { +- Blowfish_encipher(c, &datal, &datar); +- +- c->S[i][k] = datal; +- c->S[i][k + 1] = datar; +- } +- } +-} +- +- +-void +-Blowfish_expandstate(blf_ctx *c, const u_int8_t *data, u_int16_t databytes, +- const u_int8_t *key, u_int16_t keybytes) +-{ +- u_int16_t i; +- u_int16_t j; +- u_int16_t k; +- u_int32_t temp; +- u_int32_t datal; +- u_int32_t datar; +- +- j = 0; +- for (i = 0; i < BLF_N + 2; i++) { +- /* Extract 4 int8 to 1 int32 from keystream */ +- temp = Blowfish_stream2word(key, keybytes, &j); +- c->P[i] = c->P[i] ^ temp; +- } +- +- j = 0; +- datal = 0x00000000; +- datar = 0x00000000; +- for (i = 0; i < BLF_N + 2; i += 2) { +- datal ^= Blowfish_stream2word(data, databytes, &j); +- datar ^= Blowfish_stream2word(data, databytes, &j); +- Blowfish_encipher(c, &datal, &datar); +- +- c->P[i] = datal; +- c->P[i + 1] = datar; +- } +- +- for (i = 0; i < 4; i++) { +- for (k = 0; k < 256; k += 2) { +- datal ^= Blowfish_stream2word(data, databytes, &j); +- datar ^= Blowfish_stream2word(data, databytes, &j); +- Blowfish_encipher(c, &datal, &datar); +- +- c->S[i][k] = datal; +- c->S[i][k + 1] = datar; +- } +- } +- +-} +- +-void +-blf_key(blf_ctx *c, const u_int8_t *k, u_int16_t len) +-{ +- /* Initialize S-boxes and subkeys with Pi */ +- Blowfish_initstate(c); +- +- /* Transform S-boxes and subkeys with key */ +- Blowfish_expand0state(c, k, len); +-} +- +-void +-blf_enc(blf_ctx *c, u_int32_t *data, u_int16_t blocks) +-{ +- u_int32_t *d; +- u_int16_t i; +- +- d = data; +- for (i = 0; i < blocks; i++) { +- Blowfish_encipher(c, d, d + 1); +- d += 2; +- } +-} +- +-void +-blf_dec(blf_ctx *c, u_int32_t *data, u_int16_t blocks) +-{ +- u_int32_t *d; +- u_int16_t i; +- +- d = data; +- for (i = 0; i < blocks; i++) { +- Blowfish_decipher(c, d, d + 1); +- d += 2; +- } +-} +- +-void +-blf_ecb_encrypt(blf_ctx *c, u_int8_t *data, u_int32_t len) +-{ +- u_int32_t l, r; +- u_int32_t i; +- +- for (i = 0; i < len; i += 8) { +- l = data[0] << 24 | data[1] << 16 | data[2] << 8 | data[3]; +- r = data[4] << 24 | data[5] << 16 | data[6] << 8 | data[7]; +- Blowfish_encipher(c, &l, &r); +- data[0] = l >> 24 & 0xff; +- data[1] = l >> 16 & 0xff; +- data[2] = l >> 8 & 0xff; +- data[3] = l & 0xff; +- data[4] = r >> 24 & 0xff; +- data[5] = r >> 16 & 0xff; +- data[6] = r >> 8 & 0xff; +- data[7] = r & 0xff; +- data += 8; +- } +-} +- +-void +-blf_ecb_decrypt(blf_ctx *c, u_int8_t *data, u_int32_t len) +-{ +- u_int32_t l, r; +- u_int32_t i; +- +- for (i = 0; i < len; i += 8) { +- l = data[0] << 24 | data[1] << 16 | data[2] << 8 | data[3]; +- r = data[4] << 24 | data[5] << 16 | data[6] << 8 | data[7]; +- Blowfish_decipher(c, &l, &r); +- data[0] = l >> 24 & 0xff; +- data[1] = l >> 16 & 0xff; +- data[2] = l >> 8 & 0xff; +- data[3] = l & 0xff; +- data[4] = r >> 24 & 0xff; +- data[5] = r >> 16 & 0xff; +- data[6] = r >> 8 & 0xff; +- data[7] = r & 0xff; +- data += 8; +- } +-} +- +-void +-blf_cbc_encrypt(blf_ctx *c, u_int8_t *iv, u_int8_t *data, u_int32_t len) +-{ +- u_int32_t l, r; +- u_int32_t i, j; +- +- for (i = 0; i < len; i += 8) { +- for (j = 0; j < 8; j++) +- data[j] ^= iv[j]; +- l = data[0] << 24 | data[1] << 16 | data[2] << 8 | data[3]; +- r = data[4] << 24 | data[5] << 16 | data[6] << 8 | data[7]; +- Blowfish_encipher(c, &l, &r); +- data[0] = l >> 24 & 0xff; +- data[1] = l >> 16 & 0xff; +- data[2] = l >> 8 & 0xff; +- data[3] = l & 0xff; +- data[4] = r >> 24 & 0xff; +- data[5] = r >> 16 & 0xff; +- data[6] = r >> 8 & 0xff; +- data[7] = r & 0xff; +- iv = data; +- data += 8; +- } +-} +- +-void +-blf_cbc_decrypt(blf_ctx *c, u_int8_t *iva, u_int8_t *data, u_int32_t len) +-{ +- u_int32_t l, r; +- u_int8_t *iv; +- u_int32_t i, j; +- +- iv = data + len - 16; +- data = data + len - 8; +- for (i = len - 8; i >= 8; i -= 8) { +- l = data[0] << 24 | data[1] << 16 | data[2] << 8 | data[3]; +- r = data[4] << 24 | data[5] << 16 | data[6] << 8 | data[7]; +- Blowfish_decipher(c, &l, &r); +- data[0] = l >> 24 & 0xff; +- data[1] = l >> 16 & 0xff; +- data[2] = l >> 8 & 0xff; +- data[3] = l & 0xff; +- data[4] = r >> 24 & 0xff; +- data[5] = r >> 16 & 0xff; +- data[6] = r >> 8 & 0xff; +- data[7] = r & 0xff; +- for (j = 0; j < 8; j++) +- data[j] ^= iv[j]; +- iv -= 8; +- data -= 8; +- } +- l = data[0] << 24 | data[1] << 16 | data[2] << 8 | data[3]; +- r = data[4] << 24 | data[5] << 16 | data[6] << 8 | data[7]; +- Blowfish_decipher(c, &l, &r); +- data[0] = l >> 24 & 0xff; +- data[1] = l >> 16 & 0xff; +- data[2] = l >> 8 & 0xff; +- data[3] = l & 0xff; +- data[4] = r >> 24 & 0xff; +- data[5] = r >> 16 & 0xff; +- data[6] = r >> 8 & 0xff; +- data[7] = r & 0xff; +- for (j = 0; j < 8; j++) +- data[j] ^= iva[j]; +-} +- +-#if 0 +-void +-report(u_int32_t data[], u_int16_t len) +-{ +- u_int16_t i; +- for (i = 0; i < len; i += 2) +- printf("Block %0hd: %08lx %08lx.\n", +- i / 2, data[i], data[i + 1]); +-} +-void +-main(void) +-{ +- +- blf_ctx c; +- char key[] = "AAAAA"; +- char key2[] = "abcdefghijklmnopqrstuvwxyz"; +- +- u_int32_t data[10]; +- u_int32_t data2[] = +- {0x424c4f57l, 0x46495348l}; +- +- u_int16_t i; +- +- /* First test */ +- for (i = 0; i < 10; i++) +- data[i] = i; +- +- blf_key(&c, (u_int8_t *) key, 5); +- blf_enc(&c, data, 5); +- blf_dec(&c, data, 1); +- blf_dec(&c, data + 2, 4); +- printf("Should read as 0 - 9.\n"); +- report(data, 10); +- +- /* Second test */ +- blf_key(&c, (u_int8_t *) key2, strlen(key2)); +- blf_enc(&c, data2, 1); +- printf("\nShould read as: 0x324ed0fe 0xf413a203.\n"); +- report(data2, 2); +- blf_dec(&c, data2, 1); +- report(data2, 2); +-} +-#endif +- +-#endif /* !defined(HAVE_BCRYPT_PBKDF) && (!defined(HAVE_BLOWFISH_INITSTATE) || \ +- !defined(HAVE_BLOWFISH_EXPAND0STATE) || !defined(HAVE_BLF_ENC)) */ +- +diff -urNr keepassxc-2.6.4-orig/src/crypto/ssh/CMakeLists.txt keepassxc-2.6.4-patched/src/crypto/ssh/CMakeLists.txt +--- keepassxc-2.6.4-orig/src/crypto/ssh/CMakeLists.txt 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/crypto/ssh/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +@@ -1,14 +0,0 @@ +-if(WITH_XC_CRYPTO_SSH) +- include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) +- +- set(crypto_ssh_SOURCES +- bcrypt_pbkdf.cpp +- blowfish.c +- ASN1Key.cpp +- BinaryStream.cpp +- OpenSSHKey.cpp +- ) +- +- add_library(crypto_ssh STATIC ${crypto_ssh_SOURCES}) +- target_link_libraries(crypto_ssh Qt5::Core ${GCRYPT_LIBRARIES}) +-endif() +diff -urNr keepassxc-2.6.4-orig/src/crypto/ssh/includes.h keepassxc-2.6.4-patched/src/crypto/ssh/includes.h +--- keepassxc-2.6.4-orig/src/crypto/ssh/includes.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/crypto/ssh/includes.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,19 +0,0 @@ +-// mimic openSSH-portable's includes.h file to be able to use +-// its unmodified blowfish code +- +-#define HAVE_BLF_H +- +-#ifndef _GNU_SOURCE +-#define _GNU_SOURCE /* activate extra prototypes for glibc */ +-#endif +-#include +- +-#if defined(_WIN32) || defined(__HAIKU__) +-#include +- +-typedef uint32_t u_int32_t; +-typedef uint16_t u_int16_t; +-typedef uint8_t u_int8_t; +- +-#define bzero(p, s) memset(p, 0, s) +-#endif +diff -urNr keepassxc-2.6.4-orig/src/crypto/ssh/OpenSSHKey.cpp keepassxc-2.6.4-patched/src/crypto/ssh/OpenSSHKey.cpp +--- keepassxc-2.6.4-orig/src/crypto/ssh/OpenSSHKey.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/crypto/ssh/OpenSSHKey.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,828 +0,0 @@ +-/* +- * Copyright (C) 2017 Toni Spets +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "OpenSSHKey.h" +- +-#include "core/Tools.h" +-#include "crypto/SymmetricCipher.h" +-#include "crypto/ssh/ASN1Key.h" +-#include "crypto/ssh/BinaryStream.h" +- +-#include +-#include +-#include +- +-#include +- +-const QString OpenSSHKey::TYPE_DSA_PRIVATE = "DSA PRIVATE KEY"; +-const QString OpenSSHKey::TYPE_RSA_PRIVATE = "RSA PRIVATE KEY"; +-const QString OpenSSHKey::TYPE_RSA_PUBLIC = "RSA PUBLIC KEY"; +-const QString OpenSSHKey::TYPE_OPENSSH_PRIVATE = "OPENSSH PRIVATE KEY"; +- +-namespace +-{ +- QPair> binaryDeserialize(const QByteArray& serialized) +- { +- if (serialized.isEmpty()) { +- return {}; +- } +- QBuffer buffer; +- buffer.setData(serialized); +- buffer.open(QBuffer::ReadOnly); +- BinaryStream stream(&buffer); +- QString type; +- stream.readString(type); +- QByteArray temp; +- QList data; +- while (stream.readString(temp)) { +- data << temp; +- } +- return ::qMakePair(type, data); +- } +- +- QByteArray binarySerialize(const QString& type, const QList& data) +- { +- if (type.isEmpty() && data.isEmpty()) { +- return {}; +- } +- QByteArray buffer; +- BinaryStream stream(&buffer); +- stream.writeString(type); +- for (const QByteArray& part : data) { +- stream.writeString(part); +- } +- return buffer; +- } +-} // namespace +- +-// bcrypt_pbkdf.cpp +-int bcrypt_pbkdf(const QByteArray& pass, const QByteArray& salt, QByteArray& key, quint32 rounds); +- +-OpenSSHKey OpenSSHKey::generate(bool secure) +-{ +- enum Index +- { +- Params, +- CombinedKey, +- PrivateKey, +- PublicKey, +- +- Private_N, +- Private_E, +- Private_D, +- Private_P, +- Private_Q, +- Private_U, // private key +- Public_N, +- Public_E, +- }; +- +- Tools::Map mpi; +- Tools::Map sexp; +- gcry_error_t rc = GPG_ERR_NO_ERROR; +- rc = gcry_sexp_build(&sexp[Params], +- NULL, +- secure ? "(genkey (rsa (nbits 4:2048)))" : "(genkey (rsa (transient-key) (nbits 4:2048)))"); +- if (rc != GPG_ERR_NO_ERROR) { +- qWarning() << "Could not create ssh key" << gcry_err_code(rc); +- return OpenSSHKey(); +- } +- +- rc = gcry_pk_genkey(&sexp[CombinedKey], sexp[Params]); +- if (rc != GPG_ERR_NO_ERROR) { +- qWarning() << "Could not create ssh key" << gcry_err_code(rc); +- return OpenSSHKey(); +- } +- +- sexp[PrivateKey] = gcry_sexp_find_token(sexp[CombinedKey], "private-key", 0); +- sexp[PublicKey] = gcry_sexp_find_token(sexp[CombinedKey], "public-key", 0); +- +- sexp[Private_N] = gcry_sexp_find_token(sexp[PrivateKey], "n", 1); +- mpi[Private_N] = gcry_sexp_nth_mpi(sexp[Private_N], 1, GCRYMPI_FMT_USG); +- sexp[Private_E] = gcry_sexp_find_token(sexp[PrivateKey], "e", 1); +- mpi[Private_E] = gcry_sexp_nth_mpi(sexp[Private_E], 1, GCRYMPI_FMT_USG); +- sexp[Private_D] = gcry_sexp_find_token(sexp[PrivateKey], "d", 1); +- mpi[Private_D] = gcry_sexp_nth_mpi(sexp[Private_D], 1, GCRYMPI_FMT_USG); +- sexp[Private_Q] = gcry_sexp_find_token(sexp[PrivateKey], "q", 1); +- mpi[Private_Q] = gcry_sexp_nth_mpi(sexp[Private_Q], 1, GCRYMPI_FMT_USG); +- sexp[Private_P] = gcry_sexp_find_token(sexp[PrivateKey], "p", 1); +- mpi[Private_P] = gcry_sexp_nth_mpi(sexp[Private_P], 1, GCRYMPI_FMT_USG); +- sexp[Private_U] = gcry_sexp_find_token(sexp[PrivateKey], "u", 1); +- mpi[Private_U] = gcry_sexp_nth_mpi(sexp[Private_U], 1, GCRYMPI_FMT_USG); +- +- sexp[Public_N] = gcry_sexp_find_token(sexp[PublicKey], "n", 1); +- mpi[Public_N] = gcry_sexp_nth_mpi(sexp[Public_N], 1, GCRYMPI_FMT_USG); +- sexp[Public_E] = gcry_sexp_find_token(sexp[PublicKey], "e", 1); +- mpi[Public_E] = gcry_sexp_nth_mpi(sexp[Public_E], 1, GCRYMPI_FMT_USG); +- +- QList publicParts; +- QList privateParts; +- Tools::Buffer buffer; +- gcry_mpi_format format = GCRYMPI_FMT_USG; +- rc = gcry_mpi_aprint(format, &buffer.raw, &buffer.size, mpi[Private_N]); +- if (rc != GPG_ERR_NO_ERROR) { +- qWarning() << "Could not extract private key part" << gcry_err_code(rc); +- return OpenSSHKey(); +- } +- privateParts << buffer.content(); +- +- buffer.clear(); +- rc = gcry_mpi_aprint(format, &buffer.raw, &buffer.size, mpi[Private_E]); +- if (rc != GPG_ERR_NO_ERROR) { +- qWarning() << "Could not extract private key part" << gcry_err_code(rc); +- return OpenSSHKey(); +- } +- privateParts << buffer.content(); +- +- buffer.clear(); +- rc = gcry_mpi_aprint(format, &buffer.raw, &buffer.size, mpi[Private_D]); +- if (rc != GPG_ERR_NO_ERROR) { +- qWarning() << "Could not extract private key part" << gcry_err_code(rc); +- return OpenSSHKey(); +- } +- privateParts << buffer.content(); +- +- buffer.clear(); +- rc = gcry_mpi_aprint(format, &buffer.raw, &buffer.size, mpi[Private_U]); +- if (rc != GPG_ERR_NO_ERROR) { +- qWarning() << "Could not extract private key part" << gcry_err_code(rc); +- return OpenSSHKey(); +- } +- privateParts << buffer.content(); +- +- buffer.clear(); +- rc = gcry_mpi_aprint(format, &buffer.raw, &buffer.size, mpi[Private_P]); +- if (rc != GPG_ERR_NO_ERROR) { +- qWarning() << "Could not extract private key part" << gcry_err_code(rc); +- return OpenSSHKey(); +- } +- privateParts << buffer.content(); +- +- buffer.clear(); +- rc = gcry_mpi_aprint(format, &buffer.raw, &buffer.size, mpi[Private_Q]); +- if (rc != GPG_ERR_NO_ERROR) { +- qWarning() << "Could not extract private key part" << gcry_err_code(rc); +- return OpenSSHKey(); +- } +- privateParts << buffer.content(); +- +- buffer.clear(); +- rc = gcry_mpi_aprint(format, &buffer.raw, &buffer.size, mpi[Public_E]); +- if (rc != GPG_ERR_NO_ERROR) { +- qWarning() << "Could not extract public key part" << gcry_err_code(rc); +- return OpenSSHKey(); +- } +- publicParts << buffer.content(); +- +- buffer.clear(); +- rc = gcry_mpi_aprint(format, &buffer.raw, &buffer.size, mpi[Public_N]); +- if (rc != GPG_ERR_NO_ERROR) { +- qWarning() << "Could not extract public key part" << gcry_err_code(rc); +- return OpenSSHKey(); +- } +- publicParts << buffer.content(); +- OpenSSHKey key; +- key.m_rawType = OpenSSHKey::TYPE_RSA_PRIVATE; +- key.setType("ssh-rsa"); +- key.setPublicData(publicParts); +- key.setPrivateData(privateParts); +- key.setComment(""); +- return key; +-} +- +-OpenSSHKey::OpenSSHKey(QObject* parent) +- : QObject(parent) +- , m_type(QString()) +- , m_cipherName(QString("none")) +- , m_kdfName(QString("none")) +- , m_kdfOptions(QByteArray()) +- , m_rawType(QString()) +- , m_rawData(QByteArray()) +- , m_rawPublicData(QList()) +- , m_rawPrivateData(QList()) +- , m_comment(QString()) +- , m_error(QString()) +-{ +-} +- +-OpenSSHKey::OpenSSHKey(const OpenSSHKey& other) +- : QObject(nullptr) +- , m_type(other.m_type) +- , m_cipherName(other.m_cipherName) +- , m_kdfName(other.m_kdfName) +- , m_kdfOptions(other.m_kdfOptions) +- , m_rawType(other.m_rawType) +- , m_rawData(other.m_rawData) +- , m_rawPublicData(other.m_rawPublicData) +- , m_rawPrivateData(other.m_rawPrivateData) +- , m_comment(other.m_comment) +- , m_error(other.m_error) +-{ +-} +- +-bool OpenSSHKey::operator==(const OpenSSHKey& other) const +-{ +- // close enough for now +- return (fingerprint() == other.fingerprint()); +-} +- +-const QString OpenSSHKey::cipherName() const +-{ +- return m_cipherName; +-} +- +-const QString OpenSSHKey::type() const +-{ +- return m_type; +-} +- +-int OpenSSHKey::keyLength() const +-{ +- if (m_type == "ssh-dss" && m_rawPublicData.length() == 4) { +- return (m_rawPublicData[0].length() - 1) * 8; +- } else if (m_type == "ssh-rsa" && m_rawPublicData.length() == 2) { +- return (m_rawPublicData[1].length() - 1) * 8; +- } else if (m_type.startsWith("ecdsa-sha2-") && m_rawPublicData.length() == 2) { +- return (m_rawPublicData[1].length() - 1) * 4; +- } else if (m_type == "ssh-ed25519" && m_rawPublicData.length() == 1) { +- return m_rawPublicData[0].length() * 8; +- } +- return 0; +-} +- +-const QString OpenSSHKey::fingerprint(QCryptographicHash::Algorithm algo) const +-{ +- if (m_rawPublicData.isEmpty()) { +- return {}; +- } +- +- QByteArray publicKey; +- BinaryStream stream(&publicKey); +- +- stream.writeString(m_type); +- +- for (const QByteArray& ba : m_rawPublicData) { +- stream.writeString(ba); +- } +- +- QByteArray rawHash = QCryptographicHash::hash(publicKey, algo); +- +- if (algo == QCryptographicHash::Md5) { +- QString md5Hash = QString::fromLatin1(rawHash.toHex()); +- QStringList md5HashParts; +- for (int i = 0; i < md5Hash.length(); i += 2) { +- md5HashParts.append(md5Hash.mid(i, 2)); +- } +- return "MD5:" + md5HashParts.join(':'); +- } else if (algo == QCryptographicHash::Sha256) { +- return "SHA256:" + QString::fromLatin1(rawHash.toBase64(QByteArray::OmitTrailingEquals)); +- } +- +- return "HASH:" + QString::fromLatin1(rawHash.toHex()); +-} +- +-const QString OpenSSHKey::comment() const +-{ +- return m_comment; +-} +- +-const QString OpenSSHKey::privateKey() const +-{ +- if (m_rawPrivateData.isEmpty()) { +- return {}; +- } +- +- QByteArray privateKey; +- BinaryStream stream(&privateKey); +- +- stream.writeString(m_type); +- +- for (QByteArray ba : m_rawPrivateData) { +- stream.writeString(ba); +- } +- +- return m_type + " " + QString::fromLatin1(privateKey.toBase64()) + " " + m_comment; +-} +- +-const QString OpenSSHKey::publicKey() const +-{ +- if (m_rawPublicData.isEmpty()) { +- return {}; +- } +- +- QByteArray publicKey; +- BinaryStream stream(&publicKey); +- +- stream.writeString(m_type); +- +- for (QByteArray ba : m_rawPublicData) { +- stream.writeString(ba); +- } +- +- return m_type + " " + QString::fromLatin1(publicKey.toBase64()) + " " + m_comment; +-} +- +-const QString OpenSSHKey::errorString() const +-{ +- return m_error; +-} +- +-void OpenSSHKey::setType(const QString& type) +-{ +- m_type = type; +-} +- +-void OpenSSHKey::setPublicData(const QList& data) +-{ +- m_rawPublicData = data; +-} +- +-void OpenSSHKey::setPrivateData(const QList& data) +-{ +- m_rawPrivateData = data; +-} +- +-void OpenSSHKey::setComment(const QString& comment) +-{ +- m_comment = comment; +-} +- +-void OpenSSHKey::clearPrivate() +-{ +- m_rawData.clear(); +- m_rawPrivateData.clear(); +-} +- +-bool OpenSSHKey::extractPEM(const QByteArray& in, QByteArray& out) +-{ +- QString pem = QString::fromLatin1(in); +- QStringList rows = pem.split(QRegularExpression("(?:\r?\n|\r)"), QString::SkipEmptyParts); +- +- if (rows.length() < 3) { +- m_error = tr("Invalid key file, expecting an OpenSSH key"); +- return false; +- } +- +- QString begin = rows.first(); +- QString end = rows.last(); +- +- QRegularExpressionMatch beginMatch = QRegularExpression("^-----BEGIN ([^\\-]+)-----$").match(begin); +- QRegularExpressionMatch endMatch = QRegularExpression("^-----END ([^\\-]+)-----$").match(end); +- +- if (!beginMatch.hasMatch() || !endMatch.hasMatch()) { +- m_error = tr("Invalid key file, expecting an OpenSSH key"); +- return false; +- } +- +- if (beginMatch.captured(1) != endMatch.captured(1)) { +- m_error = tr("PEM boundary mismatch"); +- return false; +- } +- +- m_rawType = beginMatch.captured(1); +- +- rows.removeFirst(); +- rows.removeLast(); +- +- QRegularExpression keyValueExpr = QRegularExpression("^([A-Za-z0-9-]+): (.+)$"); +- QMap pemOptions; +- +- do { +- QRegularExpressionMatch keyValueMatch = keyValueExpr.match(rows.first()); +- +- if (!keyValueMatch.hasMatch()) { +- break; +- } +- +- pemOptions.insert(keyValueMatch.captured(1), keyValueMatch.captured(2)); +- +- rows.removeFirst(); +- } while (!rows.isEmpty()); +- +- if (pemOptions.value("Proc-Type").compare("4,encrypted", Qt::CaseInsensitive) == 0) { +- m_kdfName = "md5"; +- m_cipherName = pemOptions.value("DEK-Info").section(",", 0, 0); +- m_cipherIV = QByteArray::fromHex(pemOptions.value("DEK-Info").section(",", 1, 1).toLatin1()); +- } +- +- out = QByteArray::fromBase64(rows.join("").toLatin1()); +- +- if (out.isEmpty()) { +- m_error = tr("Base64 decoding failed"); +- return false; +- } +- +- return true; +-} +- +-bool OpenSSHKey::parsePKCS1PEM(const QByteArray& in) +-{ +- QByteArray data; +- +- if (!extractPEM(in, data)) { +- return false; +- } +- +- if (m_rawType == TYPE_DSA_PRIVATE || m_rawType == TYPE_RSA_PRIVATE || m_rawType == TYPE_RSA_PUBLIC) { +- m_rawData = data; +- } else if (m_rawType == TYPE_OPENSSH_PRIVATE) { +- BinaryStream stream(&data); +- +- QByteArray magic; +- magic.resize(15); +- +- if (!stream.read(magic)) { +- m_error = tr("Key file way too small."); +- return false; +- } +- +- if (QString::fromLatin1(magic) != "openssh-key-v1") { +- m_error = tr("Key file magic header id invalid"); +- return false; +- } +- +- stream.readString(m_cipherName); +- stream.readString(m_kdfName); +- stream.readString(m_kdfOptions); +- +- quint32 numberOfKeys; +- stream.read(numberOfKeys); +- +- if (numberOfKeys == 0) { +- m_error = tr("Found zero keys"); +- return false; +- } +- +- for (quint32 i = 0; i < numberOfKeys; ++i) { +- QByteArray publicKey; +- if (!stream.readString(publicKey)) { +- m_error = tr("Failed to read public key."); +- return false; +- } +- +- if (i == 0) { +- BinaryStream publicStream(&publicKey); +- if (!readPublic(publicStream)) { +- return false; +- } +- } +- } +- +- // padded list of keys +- if (!stream.readString(m_rawData)) { +- m_error = tr("Corrupted key file, reading private key failed"); +- return false; +- } +- } else { +- m_error = tr("Unsupported key type: %1").arg(m_rawType); +- return false; +- } +- +- // load private if no encryption +- if (!encrypted()) { +- return openKey(); +- } +- +- return true; +-} +- +-bool OpenSSHKey::encrypted() const +-{ +- return (m_cipherName != "none"); +-} +- +-bool OpenSSHKey::openKey(const QString& passphrase) +-{ +- QScopedPointer cipher; +- +- if (!m_rawPrivateData.isEmpty()) { +- return true; +- } +- +- if (m_rawData.isEmpty()) { +- m_error = tr("No private key payload to decrypt"); +- return false; +- } +- +- if (m_cipherName.compare("aes-128-cbc", Qt::CaseInsensitive) == 0) { +- cipher.reset(new SymmetricCipher(SymmetricCipher::Aes128, SymmetricCipher::Cbc, SymmetricCipher::Decrypt)); +- } else if (m_cipherName == "aes256-cbc" || m_cipherName.compare("aes-256-cbc", Qt::CaseInsensitive) == 0) { +- cipher.reset(new SymmetricCipher(SymmetricCipher::Aes256, SymmetricCipher::Cbc, SymmetricCipher::Decrypt)); +- } else if (m_cipherName == "aes256-ctr" || m_cipherName.compare("aes-256-ctr", Qt::CaseInsensitive) == 0) { +- cipher.reset(new SymmetricCipher(SymmetricCipher::Aes256, SymmetricCipher::Ctr, SymmetricCipher::Decrypt)); +- } else if (m_cipherName != "none") { +- m_error = tr("Unknown cipher: %1").arg(m_cipherName); +- return false; +- } +- +- if (m_kdfName == "bcrypt") { +- if (!cipher) { +- m_error = tr("Trying to run KDF without cipher"); +- return false; +- } +- +- if (passphrase.isEmpty()) { +- m_error = tr("Passphrase is required to decrypt this key"); +- return false; +- } +- +- BinaryStream optionStream(&m_kdfOptions); +- +- QByteArray salt; +- quint32 rounds; +- +- optionStream.readString(salt); +- optionStream.read(rounds); +- +- QByteArray decryptKey; +- decryptKey.fill(0, cipher->keySize() + cipher->blockSize()); +- +- QByteArray phraseData = passphrase.toUtf8(); +- if (bcrypt_pbkdf(phraseData, salt, decryptKey, rounds) < 0) { +- m_error = tr("Key derivation failed, key file corrupted?"); +- return false; +- } +- +- QByteArray keyData, ivData; +- keyData.setRawData(decryptKey.data(), cipher->keySize()); +- ivData.setRawData(decryptKey.data() + cipher->keySize(), cipher->blockSize()); +- +- cipher->init(keyData, ivData); +- +- if (!cipher->init(keyData, ivData)) { +- m_error = cipher->errorString(); +- return false; +- } +- } else if (m_kdfName == "md5") { +- if (m_cipherIV.length() < 8) { +- m_error = tr("Cipher IV is too short for MD5 kdf"); +- return false; +- } +- +- QByteArray keyData; +- QByteArray mdBuf; +- do { +- QCryptographicHash hash(QCryptographicHash::Md5); +- hash.addData(mdBuf); +- hash.addData(passphrase.toUtf8()); +- hash.addData(m_cipherIV.data(), 8); +- mdBuf = hash.result(); +- keyData.append(mdBuf); +- } while (keyData.size() < cipher->keySize()); +- +- if (keyData.size() > cipher->keySize()) { +- // If our key size isn't a multiple of 16 (e.g. AES-192 or something), +- // then we will need to truncate it. +- keyData.resize(cipher->keySize()); +- } +- +- if (!cipher->init(keyData, m_cipherIV)) { +- m_error = cipher->errorString(); +- return false; +- } +- } else if (m_kdfName != "none") { +- m_error = tr("Unknown KDF: %1").arg(m_kdfName); +- return false; +- } +- +- QByteArray rawData = m_rawData; +- +- if (cipher && cipher->isInitalized()) { +- bool ok = false; +- rawData = cipher->process(rawData, &ok); +- if (!ok) { +- m_error = tr("Decryption failed, wrong passphrase?"); +- return false; +- } +- } +- +- if (m_rawType == TYPE_DSA_PRIVATE) { +- if (!ASN1Key::parseDSA(rawData, *this)) { +- m_error = tr("Decryption failed, wrong passphrase?"); +- return false; +- } +- +- return true; +- } else if (m_rawType == TYPE_RSA_PRIVATE) { +- if (!ASN1Key::parsePrivateRSA(rawData, *this)) { +- m_error = tr("Decryption failed, wrong passphrase?"); +- return false; +- } +- return true; +- } else if (m_rawType == TYPE_RSA_PUBLIC) { +- if (!ASN1Key::parsePublicRSA(rawData, *this)) { +- m_error = tr("Decryption failed, wrong passphrase?"); +- return false; +- } +- return true; +- } else if (m_rawType == TYPE_OPENSSH_PRIVATE) { +- BinaryStream keyStream(&rawData); +- +- quint32 checkInt1; +- quint32 checkInt2; +- +- keyStream.read(checkInt1); +- keyStream.read(checkInt2); +- +- if (checkInt1 != checkInt2) { +- m_error = tr("Decryption failed, wrong passphrase?"); +- return false; +- } +- +- return readPrivate(keyStream); +- } +- +- m_error = tr("Unsupported key type: %1").arg(m_rawType); +- return false; +-} +- +-bool OpenSSHKey::readPublic(BinaryStream& stream) +-{ +- m_rawPublicData.clear(); +- +- if (!stream.readString(m_type)) { +- m_error = tr("Unexpected EOF while reading public key"); +- return false; +- } +- +- int keyParts; +- if (m_type == "ssh-dss") { +- keyParts = 4; +- } else if (m_type == "ssh-rsa") { +- keyParts = 2; +- } else if (m_type.startsWith("ecdsa-sha2-")) { +- keyParts = 2; +- } else if (m_type == "ssh-ed25519") { +- keyParts = 1; +- } else { +- m_error = tr("Unknown key type: %1").arg(m_type); +- return false; +- } +- +- for (int i = 0; i < keyParts; ++i) { +- QByteArray t; +- +- if (!stream.readString(t)) { +- m_error = tr("Unexpected EOF while reading public key"); +- return false; +- } +- +- m_rawPublicData.append(t); +- } +- +- return true; +-} +- +-bool OpenSSHKey::readPrivate(BinaryStream& stream) +-{ +- m_rawPrivateData.clear(); +- +- if (!stream.readString(m_type)) { +- m_error = tr("Unexpected EOF while reading private key"); +- return false; +- } +- +- int keyParts; +- if (m_type == "ssh-dss") { +- keyParts = 5; +- } else if (m_type == "ssh-rsa") { +- keyParts = 6; +- } else if (m_type.startsWith("ecdsa-sha2-")) { +- keyParts = 3; +- } else if (m_type == "ssh-ed25519") { +- keyParts = 2; +- } else { +- m_error = tr("Unknown key type: %1").arg(m_type); +- return false; +- } +- +- for (int i = 0; i < keyParts; ++i) { +- QByteArray t; +- +- if (!stream.readString(t)) { +- m_error = tr("Unexpected EOF while reading private key"); +- return false; +- } +- +- m_rawPrivateData.append(t); +- } +- +- if (!stream.readString(m_comment)) { +- m_error = tr("Unexpected EOF while reading private key"); +- return false; +- } +- +- return true; +-} +- +-bool OpenSSHKey::writePublic(BinaryStream& stream) +-{ +- if (m_rawPublicData.isEmpty()) { +- m_error = tr("Can't write public key as it is empty"); +- return false; +- } +- +- if (!stream.writeString(m_type)) { +- m_error = tr("Unexpected EOF when writing public key"); +- return false; +- } +- +- for (QByteArray t : m_rawPublicData) { +- if (!stream.writeString(t)) { +- m_error = tr("Unexpected EOF when writing public key"); +- return false; +- } +- } +- +- return true; +-} +- +-bool OpenSSHKey::writePrivate(BinaryStream& stream) +-{ +- if (m_rawPrivateData.isEmpty()) { +- m_error = tr("Can't write private key as it is empty"); +- return false; +- } +- +- if (!stream.writeString(m_type)) { +- m_error = tr("Unexpected EOF when writing private key"); +- return false; +- } +- +- for (QByteArray t : m_rawPrivateData) { +- if (!stream.writeString(t)) { +- m_error = tr("Unexpected EOF when writing private key"); +- return false; +- } +- } +- +- if (!stream.writeString(m_comment)) { +- m_error = tr("Unexpected EOF when writing private key"); +- return false; +- } +- +- return true; +-} +- +-QList OpenSSHKey::publicParts() const +-{ +- return m_rawPublicData; +-} +- +-QList OpenSSHKey::privateParts() const +-{ +- return m_rawPrivateData; +-} +- +-const QString& OpenSSHKey::privateType() const +-{ +- return m_rawType; +-} +- +-OpenSSHKey OpenSSHKey::restoreFromBinary(Type type, const QByteArray& serialized) +-{ +- OpenSSHKey key; +- auto data = binaryDeserialize(serialized); +- key.setType(data.first); +- switch (type) { +- case Public: +- key.setPublicData(data.second); +- break; +- case Private: +- key.setPrivateData(data.second); +- break; +- } +- return key; +-} +- +-QByteArray OpenSSHKey::serializeToBinary(Type type, const OpenSSHKey& key) +-{ +- Q_ASSERT(!key.encrypted()); +- switch (type) { +- case Public: +- return binarySerialize(key.type(), key.publicParts()); +- case Private: +- return binarySerialize(key.type(), key.privateParts()); +- } +- return {}; +-} +- +-uint qHash(const OpenSSHKey& key) +-{ +- return qHash(key.fingerprint()); +-} +diff -urNr keepassxc-2.6.4-orig/src/crypto/ssh/OpenSSHKey.h keepassxc-2.6.4-patched/src/crypto/ssh/OpenSSHKey.h +--- keepassxc-2.6.4-orig/src/crypto/ssh/OpenSSHKey.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/crypto/ssh/OpenSSHKey.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,98 +0,0 @@ +-/* +- * Copyright (C) 2017 Toni Spets +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_OPENSSHKEY_H +-#define KEEPASSXC_OPENSSHKEY_H +- +-#include +- +-class BinaryStream; +- +-class OpenSSHKey : public QObject +-{ +- Q_OBJECT +-public: +- static OpenSSHKey generate(bool secure = true); +- +- explicit OpenSSHKey(QObject* parent = nullptr); +- OpenSSHKey(const OpenSSHKey& other); +- bool operator==(const OpenSSHKey& other) const; +- +- bool parsePKCS1PEM(const QByteArray& in); +- bool encrypted() const; +- bool openKey(const QString& passphrase = QString()); +- +- const QString cipherName() const; +- const QString type() const; +- int keyLength() const; +- const QString fingerprint(QCryptographicHash::Algorithm algo = QCryptographicHash::Sha256) const; +- const QString comment() const; +- const QString publicKey() const; +- const QString privateKey() const; +- const QString errorString() const; +- +- void setType(const QString& type); +- void setPublicData(const QList& data); +- void setPrivateData(const QList& data); +- void setComment(const QString& comment); +- +- void clearPrivate(); +- +- bool readPublic(BinaryStream& stream); +- bool readPrivate(BinaryStream& stream); +- bool writePublic(BinaryStream& stream); +- bool writePrivate(BinaryStream& stream); +- +- QList publicParts() const; +- QList privateParts() const; +- const QString& privateType() const; +- +- static const QString TYPE_DSA_PRIVATE; +- static const QString TYPE_RSA_PRIVATE; +- static const QString TYPE_RSA_PUBLIC; +- static const QString TYPE_OPENSSH_PRIVATE; +- +- enum Type +- { +- Public, +- Private +- }; +- +- static OpenSSHKey restoreFromBinary(Type eType, const QByteArray& serialized); +- static QByteArray serializeToBinary(Type eType, const OpenSSHKey& key); +- +-private: +- bool extractPEM(const QByteArray& in, QByteArray& out); +- +- QString m_type; +- QString m_cipherName; +- QByteArray m_cipherIV; +- QString m_kdfName; +- QByteArray m_kdfOptions; +- +- QString m_rawType; +- QByteArray m_rawData; +- QList m_rawPublicData; +- QList m_rawPrivateData; +- QString m_comment; +- QString m_error; +-}; +- +-uint qHash(const OpenSSHKey& key); +- +-#endif // KEEPASSXC_OPENSSHKEY_H +diff -urNr keepassxc-2.6.4-orig/src/crypto/SymmetricCipherBackend.h keepassxc-2.6.4-patched/src/crypto/SymmetricCipherBackend.h +--- keepassxc-2.6.4-orig/src/crypto/SymmetricCipherBackend.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/crypto/SymmetricCipherBackend.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,44 +0,0 @@ +-/* +- * Copyright (C) 2010 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_SYMMETRICCIPHERBACKEND_H +-#define KEEPASSX_SYMMETRICCIPHERBACKEND_H +- +-#include +- +-class SymmetricCipherBackend +-{ +-public: +- virtual ~SymmetricCipherBackend() +- { +- } +- virtual bool init() = 0; +- virtual bool setKey(const QByteArray& key) = 0; +- virtual bool setIv(const QByteArray& iv) = 0; +- +- virtual QByteArray process(const QByteArray& data, bool* ok) = 0; +- Q_REQUIRED_RESULT virtual bool processInPlace(QByteArray& data) = 0; +- Q_REQUIRED_RESULT virtual bool processInPlace(QByteArray& data, quint64 rounds) = 0; +- +- virtual bool reset() = 0; +- virtual int keySize() const = 0; +- virtual int blockSize() const = 0; +- +- virtual QString error() const = 0; +-}; +- +-#endif // KEEPASSX_SYMMETRICCIPHERBACKEND_H +diff -urNr keepassxc-2.6.4-orig/src/crypto/SymmetricCipher.cpp keepassxc-2.6.4-patched/src/crypto/SymmetricCipher.cpp +--- keepassxc-2.6.4-orig/src/crypto/SymmetricCipher.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/crypto/SymmetricCipher.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,158 +0,0 @@ +-/* +- * Copyright (C) 2010 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "SymmetricCipher.h" +- +-#include "config-keepassx.h" +-#include "crypto/SymmetricCipherGcrypt.h" +- +-SymmetricCipher::SymmetricCipher(Algorithm algo, Mode mode, Direction direction) +- : m_backend(createBackend(algo, mode, direction)) +- , m_initialized(false) +- , m_algo(algo) +-{ +-} +- +-SymmetricCipher::~SymmetricCipher() +-{ +-} +- +-bool SymmetricCipher::init(const QByteArray& key, const QByteArray& iv) +-{ +- if (!m_backend->init()) { +- return false; +- } +- +- if (!m_backend->setKey(key)) { +- return false; +- } +- +- if (!m_backend->setIv(iv)) { +- return false; +- } +- +- m_initialized = true; +- return true; +-} +- +-bool SymmetricCipher::isInitalized() const +-{ +- return m_initialized; +-} +- +-SymmetricCipherBackend* SymmetricCipher::createBackend(Algorithm algo, Mode mode, Direction direction) +-{ +- switch (algo) { +- case Aes128: +- case Aes256: +- case Twofish: +- case Salsa20: +- case ChaCha20: +- return new SymmetricCipherGcrypt(algo, mode, direction); +- +- default: +- Q_ASSERT(false); +- return nullptr; +- } +-} +- +-bool SymmetricCipher::reset() +-{ +- return m_backend->reset(); +-} +- +-int SymmetricCipher::keySize() const +-{ +- return m_backend->keySize(); +-} +- +-int SymmetricCipher::blockSize() const +-{ +- return m_backend->blockSize(); +-} +- +-QString SymmetricCipher::errorString() const +-{ +- return m_backend->error(); +-} +- +-SymmetricCipher::Algorithm SymmetricCipher::cipherToAlgorithm(const QUuid& cipher) +-{ +- if (cipher == KeePass2::CIPHER_AES256) { +- return Aes256; +- } else if (cipher == KeePass2::CIPHER_CHACHA20) { +- return ChaCha20; +- } else if (cipher == KeePass2::CIPHER_TWOFISH) { +- return Twofish; +- } +- +- qWarning("SymmetricCipher::cipherToAlgorithm: invalid UUID %s", cipher.toString().toLatin1().data()); +- return InvalidAlgorithm; +-} +- +-QUuid SymmetricCipher::algorithmToCipher(Algorithm algo) +-{ +- switch (algo) { +- case Aes128: +- return KeePass2::CIPHER_AES128; +- case Aes256: +- return KeePass2::CIPHER_AES256; +- case ChaCha20: +- return KeePass2::CIPHER_CHACHA20; +- case Twofish: +- return KeePass2::CIPHER_TWOFISH; +- default: +- qWarning("SymmetricCipher::algorithmToCipher: invalid algorithm %d", algo); +- return {}; +- } +-} +- +-int SymmetricCipher::algorithmIvSize(Algorithm algo) +-{ +- switch (algo) { +- case ChaCha20: +- return 12; +- case Aes128: +- return 16; +- case Aes256: +- return 16; +- case Twofish: +- return 16; +- default: +- qWarning("SymmetricCipher::algorithmIvSize: invalid algorithm %d", algo); +- return -1; +- } +-} +- +-SymmetricCipher::Mode SymmetricCipher::algorithmMode(Algorithm algo) +-{ +- switch (algo) { +- case ChaCha20: +- return Stream; +- case Aes256: +- case Twofish: +- return Cbc; +- default: +- qWarning("SymmetricCipher::algorithmMode: invalid algorithm %d", algo); +- return InvalidMode; +- } +-} +- +-SymmetricCipher::Algorithm SymmetricCipher::algorithm() const +-{ +- return m_algo; +-} +diff -urNr keepassxc-2.6.4-orig/src/crypto/SymmetricCipherGcrypt.cpp keepassxc-2.6.4-patched/src/crypto/SymmetricCipherGcrypt.cpp +--- keepassxc-2.6.4-orig/src/crypto/SymmetricCipherGcrypt.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/crypto/SymmetricCipherGcrypt.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,261 +0,0 @@ +-/* +- * Copyright (C) 2010 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "SymmetricCipherGcrypt.h" +- +-#include "config-keepassx.h" +-#include "crypto/Crypto.h" +- +-SymmetricCipherGcrypt::SymmetricCipherGcrypt(SymmetricCipher::Algorithm algo, +- SymmetricCipher::Mode mode, +- SymmetricCipher::Direction direction) +- : m_ctx(nullptr) +- , m_algo(gcryptAlgo(algo)) +- , m_mode(gcryptMode(mode)) +- , m_direction(direction) +-{ +-} +- +-SymmetricCipherGcrypt::~SymmetricCipherGcrypt() +-{ +- gcry_cipher_close(m_ctx); +-} +- +-int SymmetricCipherGcrypt::gcryptAlgo(SymmetricCipher::Algorithm algo) +-{ +- switch (algo) { +- case SymmetricCipher::Aes128: +- return GCRY_CIPHER_AES128; +- +- case SymmetricCipher::Aes256: +- return GCRY_CIPHER_AES256; +- +- case SymmetricCipher::Twofish: +- return GCRY_CIPHER_TWOFISH; +- +- case SymmetricCipher::Salsa20: +- return GCRY_CIPHER_SALSA20; +- +- case SymmetricCipher::ChaCha20: +- return GCRY_CIPHER_CHACHA20; +- +- default: +- Q_ASSERT(false); +- return -1; +- } +-} +- +-int SymmetricCipherGcrypt::gcryptMode(SymmetricCipher::Mode mode) +-{ +- switch (mode) { +- case SymmetricCipher::Ecb: +- return GCRY_CIPHER_MODE_ECB; +- +- case SymmetricCipher::Cbc: +- return GCRY_CIPHER_MODE_CBC; +- +- case SymmetricCipher::Ctr: +- return GCRY_CIPHER_MODE_CTR; +- +- case SymmetricCipher::Stream: +- return GCRY_CIPHER_MODE_STREAM; +- +- default: +- Q_ASSERT(false); +- return -1; +- } +-} +- +-void SymmetricCipherGcrypt::setError(const gcry_error_t& err) +-{ +- const char* gcryptError = gcry_strerror(err); +- const char* gcryptErrorSource = gcry_strsource(err); +- +- m_error = QString("%1/%2").arg(QString::fromLocal8Bit(gcryptErrorSource), QString::fromLocal8Bit(gcryptError)); +-} +- +-bool SymmetricCipherGcrypt::init() +-{ +- Q_ASSERT(Crypto::initialized()); +- +- gcry_error_t error; +- +- if (m_ctx != nullptr) +- gcry_cipher_close(m_ctx); +- error = gcry_cipher_open(&m_ctx, m_algo, m_mode, 0); +- if (error != 0) { +- setError(error); +- return false; +- } +- +- return true; +-} +- +-bool SymmetricCipherGcrypt::setKey(const QByteArray& key) +-{ +- m_key = key; +- gcry_error_t error = gcry_cipher_setkey(m_ctx, m_key.constData(), m_key.size()); +- +- if (error != 0) { +- setError(error); +- return false; +- } +- +- return true; +-} +- +-bool SymmetricCipherGcrypt::setIv(const QByteArray& iv) +-{ +- m_iv = iv; +- gcry_error_t error; +- +- if (m_mode == GCRY_CIPHER_MODE_CTR) { +- error = gcry_cipher_setctr(m_ctx, m_iv.constData(), m_iv.size()); +- } else { +- error = gcry_cipher_setiv(m_ctx, m_iv.constData(), m_iv.size()); +- } +- +- if (error != 0) { +- setError(error); +- return false; +- } +- +- return true; +-} +- +-QByteArray SymmetricCipherGcrypt::process(const QByteArray& data, bool* ok) +-{ +- // TODO: check block size +- +- QByteArray result; +- result.resize(data.size()); +- +- gcry_error_t error; +- +- if (m_direction == SymmetricCipher::Decrypt) { +- error = gcry_cipher_decrypt(m_ctx, result.data(), data.size(), data.constData(), data.size()); +- } else { +- error = gcry_cipher_encrypt(m_ctx, result.data(), data.size(), data.constData(), data.size()); +- } +- +- if (error != 0) { +- setError(error); +- *ok = false; +- } else { +- *ok = true; +- } +- +- return result; +-} +- +-bool SymmetricCipherGcrypt::processInPlace(QByteArray& data) +-{ +- // TODO: check block size +- +- gcry_error_t error; +- +- if (m_direction == SymmetricCipher::Decrypt) { +- error = gcry_cipher_decrypt(m_ctx, data.data(), data.size(), nullptr, 0); +- } else { +- error = gcry_cipher_encrypt(m_ctx, data.data(), data.size(), nullptr, 0); +- } +- +- if (error != 0) { +- setError(error); +- return false; +- } +- +- return true; +-} +- +-bool SymmetricCipherGcrypt::processInPlace(QByteArray& data, quint64 rounds) +-{ +- gcry_error_t error; +- +- char* rawData = data.data(); +- int size = data.size(); +- +- if (m_direction == SymmetricCipher::Decrypt) { +- for (quint64 i = 0; i != rounds; ++i) { +- error = gcry_cipher_decrypt(m_ctx, rawData, size, nullptr, 0); +- +- if (error != 0) { +- setError(error); +- return false; +- } +- } +- } else { +- for (quint64 i = 0; i != rounds; ++i) { +- error = gcry_cipher_encrypt(m_ctx, rawData, size, nullptr, 0); +- +- if (error != 0) { +- setError(error); +- return false; +- } +- } +- } +- +- return true; +-} +- +-bool SymmetricCipherGcrypt::reset() +-{ +- gcry_error_t error; +- +- error = gcry_cipher_reset(m_ctx); +- if (error != 0) { +- setError(error); +- return false; +- } +- +- error = gcry_cipher_setiv(m_ctx, m_iv.constData(), m_iv.size()); +- if (error != 0) { +- setError(error); +- return false; +- } +- +- return true; +-} +- +-int SymmetricCipherGcrypt::keySize() const +-{ +- gcry_error_t error; +- size_t keySizeT; +- +- error = gcry_cipher_algo_info(m_algo, GCRYCTL_GET_KEYLEN, nullptr, &keySizeT); +- if (error != 0) +- return -1; +- +- return keySizeT; +-} +- +-int SymmetricCipherGcrypt::blockSize() const +-{ +- gcry_error_t error; +- size_t blockSizeT; +- +- error = gcry_cipher_algo_info(m_algo, GCRYCTL_GET_BLKLEN, nullptr, &blockSizeT); +- if (error != 0) +- return -1; +- +- return blockSizeT; +-} +- +-QString SymmetricCipherGcrypt::error() const +-{ +- return m_error; +-} +diff -urNr keepassxc-2.6.4-orig/src/crypto/SymmetricCipherGcrypt.h keepassxc-2.6.4-patched/src/crypto/SymmetricCipherGcrypt.h +--- keepassxc-2.6.4-orig/src/crypto/SymmetricCipherGcrypt.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/crypto/SymmetricCipherGcrypt.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,62 +0,0 @@ +-/* +- * Copyright (C) 2010 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_SYMMETRICCIPHERGCRYPT_H +-#define KEEPASSX_SYMMETRICCIPHERGCRYPT_H +- +-#include +- +-#include "crypto/SymmetricCipher.h" +-#include "crypto/SymmetricCipherBackend.h" +- +-class SymmetricCipherGcrypt : public SymmetricCipherBackend +-{ +-public: +- SymmetricCipherGcrypt(SymmetricCipher::Algorithm algo, +- SymmetricCipher::Mode mode, +- SymmetricCipher::Direction direction); +- ~SymmetricCipherGcrypt(); +- +- bool init(); +- bool setKey(const QByteArray& key); +- bool setIv(const QByteArray& iv); +- +- QByteArray process(const QByteArray& data, bool* ok); +- Q_REQUIRED_RESULT bool processInPlace(QByteArray& data); +- Q_REQUIRED_RESULT bool processInPlace(QByteArray& data, quint64 rounds); +- +- bool reset(); +- int keySize() const; +- int blockSize() const; +- +- QString error() const; +- +-private: +- static int gcryptAlgo(SymmetricCipher::Algorithm algo); +- static int gcryptMode(SymmetricCipher::Mode mode); +- void setError(const gcry_error_t& err); +- +- gcry_cipher_hd_t m_ctx; +- const int m_algo; +- const int m_mode; +- const SymmetricCipher::Direction m_direction; +- QByteArray m_key; +- QByteArray m_iv; +- QString m_error; +-}; +- +-#endif // KEEPASSX_SYMMETRICCIPHERGCRYPT_H +diff -urNr keepassxc-2.6.4-orig/src/crypto/SymmetricCipher.h keepassxc-2.6.4-patched/src/crypto/SymmetricCipher.h +--- keepassxc-2.6.4-orig/src/crypto/SymmetricCipher.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/crypto/SymmetricCipher.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,99 +0,0 @@ +-/* +- * Copyright (C) 2010 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_SYMMETRICCIPHER_H +-#define KEEPASSX_SYMMETRICCIPHER_H +- +-#include +-#include +-#include +-#include +- +-#include "crypto/SymmetricCipherBackend.h" +-#include "format/KeePass2.h" +- +-class SymmetricCipher +-{ +-public: +- enum Algorithm +- { +- Aes128, +- Aes256, +- Twofish, +- Salsa20, +- ChaCha20, +- InvalidAlgorithm = -1 +- }; +- +- enum Mode +- { +- Cbc, +- Ctr, +- Ecb, +- Stream, +- InvalidMode = -1 +- }; +- +- enum Direction +- { +- Decrypt, +- Encrypt +- }; +- +- SymmetricCipher(Algorithm algo, Mode mode, Direction direction); +- ~SymmetricCipher(); +- Q_DISABLE_COPY(SymmetricCipher) +- +- bool init(const QByteArray& key, const QByteArray& iv); +- bool isInitalized() const; +- +- inline QByteArray process(const QByteArray& data, bool* ok) +- { +- return m_backend->process(data, ok); +- } +- +- Q_REQUIRED_RESULT inline bool processInPlace(QByteArray& data) +- { +- return m_backend->processInPlace(data); +- } +- +- Q_REQUIRED_RESULT inline bool processInPlace(QByteArray& data, quint64 rounds) +- { +- Q_ASSERT(rounds > 0); +- return m_backend->processInPlace(data, rounds); +- } +- +- bool reset(); +- int keySize() const; +- int blockSize() const; +- QString errorString() const; +- Algorithm algorithm() const; +- +- static Algorithm cipherToAlgorithm(const QUuid& cipher); +- static QUuid algorithmToCipher(Algorithm algo); +- static int algorithmIvSize(Algorithm algo); +- static Mode algorithmMode(Algorithm algo); +- +-private: +- static SymmetricCipherBackend* createBackend(Algorithm algo, Mode mode, Direction direction); +- +- const QScopedPointer m_backend; +- bool m_initialized; +- Algorithm m_algo; +-}; +- +-#endif // KEEPASSX_SYMMETRICCIPHER_H +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/CMakeLists.txt keepassxc-2.6.4-patched/src/fdosecrets/CMakeLists.txt +--- keepassxc-2.6.4-orig/src/fdosecrets/CMakeLists.txt 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +@@ -1,37 +0,0 @@ +-if(WITH_XC_FDOSECRETS) +- include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) +- +- add_library(fdosecrets STATIC +- # app settings page +- FdoSecretsPlugin.cpp +- widgets/SettingsModels.cpp +- widgets/SettingsWidgetFdoSecrets.cpp +- +- # per database settings page +- DatabaseSettingsPageFdoSecrets.cpp +- widgets/DatabaseSettingsWidgetFdoSecrets.cpp +- +- # setting storage +- FdoSecretsSettings.cpp +- +- # gcrypt MPI wrapper +- GcryptMPI.cpp +- +- # dbus objects +- objects/DBusObject.cpp +- objects/Service.cpp +- objects/Session.cpp +- objects/SessionCipher.cpp +- objects/Collection.cpp +- objects/Item.cpp +- objects/Prompt.cpp +- objects/adaptors/ServiceAdaptor.cpp +- objects/adaptors/SessionAdaptor.cpp +- objects/adaptors/CollectionAdaptor.cpp +- objects/adaptors/ItemAdaptor.cpp +- objects/adaptors/PromptAdaptor.cpp +- objects/DBusReturn.cpp +- objects/DBusTypes.cpp +- ) +- target_link_libraries(fdosecrets Qt5::Core Qt5::Widgets Qt5::DBus ${GCRYPT_LIBRARIES}) +-endif() +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/DatabaseSettingsPageFdoSecrets.cpp keepassxc-2.6.4-patched/src/fdosecrets/DatabaseSettingsPageFdoSecrets.cpp +--- keepassxc-2.6.4-orig/src/fdosecrets/DatabaseSettingsPageFdoSecrets.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/DatabaseSettingsPageFdoSecrets.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,49 +0,0 @@ +-/* +- * Copyright (C) 2019 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "DatabaseSettingsPageFdoSecrets.h" +- +-#include "fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.h" +- +-#include "core/Resources.h" +- +-QString DatabaseSettingsPageFdoSecrets::name() +-{ +- return QObject::tr("Secret Service Integration"); +-} +- +-QIcon DatabaseSettingsPageFdoSecrets::icon() +-{ +- return resources()->icon(QStringLiteral("freedesktop")); +-} +- +-QWidget* DatabaseSettingsPageFdoSecrets::createWidget() +-{ +- return new DatabaseSettingsWidgetFdoSecrets; +-} +- +-void DatabaseSettingsPageFdoSecrets::loadSettings(QWidget* widget, QSharedPointer db) +-{ +- auto settingsWidget = qobject_cast(widget); +- settingsWidget->loadSettings(db); +-} +- +-void DatabaseSettingsPageFdoSecrets::saveSettings(QWidget* widget) +-{ +- auto settingsWidget = qobject_cast(widget); +- settingsWidget->saveSettings(); +-} +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/DatabaseSettingsPageFdoSecrets.h keepassxc-2.6.4-patched/src/fdosecrets/DatabaseSettingsPageFdoSecrets.h +--- keepassxc-2.6.4-orig/src/fdosecrets/DatabaseSettingsPageFdoSecrets.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/DatabaseSettingsPageFdoSecrets.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,36 +0,0 @@ +-/* +- * Copyright (C) 2019 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_DATABASESETTINGSPAGEFDOSECRETS_H +-#define KEEPASSXC_DATABASESETTINGSPAGEFDOSECRETS_H +- +-#include "gui/dbsettings/DatabaseSettingsDialog.h" +- +-class DatabaseSettingsPageFdoSecrets : public IDatabaseSettingsPage +-{ +- Q_DISABLE_COPY(DatabaseSettingsPageFdoSecrets) +-public: +- DatabaseSettingsPageFdoSecrets() = default; +- +- QString name() override; +- QIcon icon() override; +- QWidget* createWidget() override; +- void loadSettings(QWidget* widget, QSharedPointer db) override; +- void saveSettings(QWidget* widget) override; +-}; +- +-#endif // KEEPASSXC_DATABASESETTINGSPAGEFDOSECRETS_H +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/FdoSecretsPlugin.cpp keepassxc-2.6.4-patched/src/fdosecrets/FdoSecretsPlugin.cpp +--- keepassxc-2.6.4-orig/src/fdosecrets/FdoSecretsPlugin.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/FdoSecretsPlugin.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,134 +0,0 @@ +-/* +- * Copyright (C) 2018 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "FdoSecretsPlugin.h" +- +-#include "fdosecrets/FdoSecretsSettings.h" +-#include "fdosecrets/objects/DBusTypes.h" +-#include "fdosecrets/objects/Service.h" +-#include "fdosecrets/widgets/SettingsWidgetFdoSecrets.h" +- +-#include "gui/DatabaseTabWidget.h" +- +-#include +- +-#include +- +-using FdoSecrets::Service; +- +-// TODO: Only used for testing. Need to split service functions away from settings page. +-QPointer g_fdoSecretsPlugin; +- +-FdoSecretsPlugin::FdoSecretsPlugin(DatabaseTabWidget* tabWidget) +- : m_dbTabs(tabWidget) +-{ +- g_fdoSecretsPlugin = this; +- FdoSecrets::registerDBusTypes(); +-} +- +-FdoSecretsPlugin* FdoSecretsPlugin::getPlugin() +-{ +- return g_fdoSecretsPlugin; +-} +- +-QWidget* FdoSecretsPlugin::createWidget() +-{ +- return new SettingsWidgetFdoSecrets(this); +-} +- +-void FdoSecretsPlugin::loadSettings(QWidget* widget) +-{ +- qobject_cast(widget)->loadSettings(); +-} +- +-void FdoSecretsPlugin::saveSettings(QWidget* widget) +-{ +- qobject_cast(widget)->saveSettings(); +- updateServiceState(); +-} +- +-void FdoSecretsPlugin::updateServiceState() +-{ +- if (FdoSecrets::settings()->isEnabled()) { +- if (!m_secretService && m_dbTabs) { +- m_secretService.reset(new Service(this, m_dbTabs)); +- connect(m_secretService.data(), &Service::error, this, [this](const QString& msg) { +- emit error(tr("Fdo Secret Service: %1").arg(msg)); +- }); +- if (!m_secretService->initialize()) { +- m_secretService.reset(); +- FdoSecrets::settings()->setEnabled(false); +- return; +- } +- emit secretServiceStarted(); +- } +- } else { +- if (m_secretService) { +- m_secretService.reset(); +- emit secretServiceStopped(); +- } +- } +-} +- +-Service* FdoSecretsPlugin::serviceInstance() const +-{ +- return m_secretService.data(); +-} +- +-DatabaseTabWidget* FdoSecretsPlugin::dbTabs() const +-{ +- return m_dbTabs; +-} +- +-void FdoSecretsPlugin::emitRequestSwitchToDatabases() +-{ +- emit requestSwitchToDatabases(); +-} +- +-void FdoSecretsPlugin::emitRequestShowNotification(const QString& msg, const QString& title) +-{ +- if (!FdoSecrets::settings()->showNotification()) { +- return; +- } +- emit requestShowNotification(msg, title, 10000); +-} +- +-QString FdoSecretsPlugin::reportExistingService() const +-{ +- auto pidStr = tr("Unknown", "Unknown PID"); +- auto exeStr = tr("Unknown", "Unknown executable path"); +- +- // try get pid +- auto pid = QDBusConnection::sessionBus().interface()->servicePid(DBUS_SERVICE_SECRET); +- if (pid.isValid()) { +- pidStr = QString::number(pid.value()); +- +- // try get the first part of the cmdline, which usually is the executable name/path +- QFile proc(QStringLiteral("/proc/%1/cmdline").arg(pid.value())); +- if (proc.open(QFile::ReadOnly)) { +- auto parts = proc.readAll().split('\0'); +- if (parts.length() >= 1) { +- exeStr = QString::fromLocal8Bit(parts[0]).trimmed(); +- } +- } +- } +- auto otherService = tr("PID: %1, Executable: %2", "PID: 1234, Executable: /path/to/exe") +- .arg(pidStr, exeStr.toHtmlEscaped()); +- return tr("Another secret service is running (%1).
" +- "Please stop/remove it before re-enabling the Secret Service Integration.") +- .arg(otherService); +-} +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/FdoSecretsPlugin.h keepassxc-2.6.4-patched/src/fdosecrets/FdoSecretsPlugin.h +--- keepassxc-2.6.4-orig/src/fdosecrets/FdoSecretsPlugin.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/FdoSecretsPlugin.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,92 +0,0 @@ +-/* +- * Copyright (C) 2018 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_FDOSECRETSPLUGIN_H +-#define KEEPASSXC_FDOSECRETSPLUGIN_H +- +-#include "core/Resources.h" +-#include "gui/ApplicationSettingsWidget.h" +- +-#include +-#include +- +-class DatabaseTabWidget; +- +-namespace FdoSecrets +-{ +- class Service; +-} // namespace FdoSecrets +- +-class FdoSecretsPlugin : public QObject, public ISettingsPage +-{ +- Q_OBJECT +-public: +- explicit FdoSecretsPlugin(DatabaseTabWidget* tabWidget); +- ~FdoSecretsPlugin() override = default; +- +- QString name() override +- { +- return QObject::tr("Secret Service Integration"); +- } +- +- QIcon icon() override +- { +- return Resources::instance()->icon("freedesktop"); +- } +- +- QWidget* createWidget() override; +- void loadSettings(QWidget* widget) override; +- void saveSettings(QWidget* widget) override; +- +- void updateServiceState(); +- +- /** +- * @return The service instance, can be nullptr if the service is disabled. +- */ +- FdoSecrets::Service* serviceInstance() const; +- +- /** +- * @return The db tabs widget, containing opened databases. Can be nullptr. +- */ +- DatabaseTabWidget* dbTabs() const; +- +- /** +- * Check the running secret service and returns info about it +- * @return html string suitable to be shown in the UI +- */ +- QString reportExistingService() const; +- +- // TODO: Only used for testing. Need to split service functions away from settings page. +- static FdoSecretsPlugin* getPlugin(); +- +-public slots: +- void emitRequestSwitchToDatabases(); +- void emitRequestShowNotification(const QString& msg, const QString& title = {}); +- +-signals: +- void error(const QString& msg); +- void requestSwitchToDatabases(); +- void requestShowNotification(const QString& msg, const QString& title, int msTimeoutHint); +- void secretServiceStarted(); +- void secretServiceStopped(); +- +-private: +- QPointer m_dbTabs; +- QScopedPointer m_secretService; +-}; +- +-#endif // KEEPASSXC_FDOSECRETSPLUGIN_H +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/FdoSecretsSettings.cpp keepassxc-2.6.4-patched/src/fdosecrets/FdoSecretsSettings.cpp +--- keepassxc-2.6.4-orig/src/fdosecrets/FdoSecretsSettings.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/FdoSecretsSettings.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,98 +0,0 @@ +-/* +- * Copyright (C) 2018 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "FdoSecretsSettings.h" +- +-#include "core/Config.h" +-#include "core/CustomData.h" +-#include "core/Database.h" +-#include "core/Metadata.h" +- +-namespace Keys +-{ +- namespace Db +- { +- constexpr auto FdoSecretsExposedGroup = "FDO_SECRETS_EXPOSED_GROUP"; +- } // namespace Db +- +-} // namespace Keys +- +-namespace FdoSecrets +-{ +- +- FdoSecretsSettings* FdoSecretsSettings::m_instance = nullptr; +- +- FdoSecretsSettings* FdoSecretsSettings::instance() +- { +- if (!m_instance) { +- m_instance = new FdoSecretsSettings; +- } +- return m_instance; +- } +- +- bool FdoSecretsSettings::isEnabled() const +- { +- return config()->get(Config::FdoSecrets_Enabled).toBool(); +- } +- +- void FdoSecretsSettings::setEnabled(bool enabled) +- { +- config()->set(Config::FdoSecrets_Enabled, enabled); +- } +- +- bool FdoSecretsSettings::showNotification() const +- { +- return config()->get(Config::FdoSecrets_ShowNotification).toBool(); +- } +- +- void FdoSecretsSettings::setShowNotification(bool show) +- { +- config()->set(Config::FdoSecrets_ShowNotification, show); +- } +- +- bool FdoSecretsSettings::noConfirmDeleteItem() const +- { +- return config()->get(Config::FdoSecrets_NoConfirmDeleteItem).toBool(); +- } +- +- void FdoSecretsSettings::setNoConfirmDeleteItem(bool noConfirm) +- { +- config()->set(Config::FdoSecrets_NoConfirmDeleteItem, noConfirm); +- } +- +- QUuid FdoSecretsSettings::exposedGroup(const QSharedPointer& db) const +- { +- return exposedGroup(db.data()); +- } +- +- void FdoSecretsSettings::setExposedGroup(const QSharedPointer& db, +- const QUuid& group) // clazy:exclude=function-args-by-value +- { +- setExposedGroup(db.data(), group); +- } +- +- QUuid FdoSecretsSettings::exposedGroup(Database* db) const +- { +- return {db->metadata()->customData()->value(Keys::Db::FdoSecretsExposedGroup)}; +- } +- +- void FdoSecretsSettings::setExposedGroup(Database* db, const QUuid& group) // clazy:exclude=function-args-by-value +- { +- db->metadata()->customData()->set(Keys::Db::FdoSecretsExposedGroup, group.toString()); +- } +- +-} // namespace FdoSecrets +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/FdoSecretsSettings.h keepassxc-2.6.4-patched/src/fdosecrets/FdoSecretsSettings.h +--- keepassxc-2.6.4-orig/src/fdosecrets/FdoSecretsSettings.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/FdoSecretsSettings.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,62 +0,0 @@ +-/* +- * Copyright (C) 2018 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_FDOSECRETSSETTINGS_H +-#define KEEPASSXC_FDOSECRETSSETTINGS_H +- +-#include +-#include +- +-class Database; +- +-namespace FdoSecrets +-{ +- +- class FdoSecretsSettings +- { +- public: +- FdoSecretsSettings() = default; +- static FdoSecretsSettings* instance(); +- +- bool isEnabled() const; +- void setEnabled(bool enabled); +- +- bool showNotification() const; +- void setShowNotification(bool show); +- +- bool noConfirmDeleteItem() const; +- void setNoConfirmDeleteItem(bool noConfirm); +- +- // Per db settings +- +- QUuid exposedGroup(const QSharedPointer& db) const; +- void setExposedGroup(const QSharedPointer& db, const QUuid& group); +- QUuid exposedGroup(Database* db) const; +- void setExposedGroup(Database* db, const QUuid& group); +- +- private: +- static FdoSecretsSettings* m_instance; +- }; +- +- inline FdoSecretsSettings* settings() +- { +- return FdoSecretsSettings::instance(); +- } +- +-} // namespace FdoSecrets +- +-#endif // KEEPASSXC_FDOSECRETSSETTINGS_H +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/GcryptMPI.cpp keepassxc-2.6.4-patched/src/fdosecrets/GcryptMPI.cpp +--- keepassxc-2.6.4-orig/src/fdosecrets/GcryptMPI.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/GcryptMPI.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,63 +0,0 @@ +-/* +- * Copyright (C) 2019 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "GcryptMPI.h" +- +-GcryptMPI MpiFromBytes(const QByteArray& bytes, bool secure, gcry_mpi_format format) +-{ +- auto bufLen = static_cast(bytes.size()); +- +- const char* buf = nullptr; +- +- // gcry_mpi_scan uses secure memory only if input buffer is secure memory, so we have to make a copy +- GcryptMemPtr secureBuf; +- if (secure) { +- secureBuf.reset(static_cast(gcry_malloc_secure(bufLen))); +- memcpy(secureBuf.get(), bytes.data(), bufLen); +- buf = secureBuf.get(); +- } else { +- buf = bytes.data(); +- } +- +- gcry_mpi_t rawMpi; +- auto err = gcry_mpi_scan(&rawMpi, format, buf, format == GCRYMPI_FMT_HEX ? 0 : bufLen, nullptr); +- GcryptMPI mpi(rawMpi); +- +- if (gcry_err_code(err) != GPG_ERR_NO_ERROR) { +- mpi.reset(); +- } +- +- return mpi; +-} +- +-GcryptMPI MpiFromHex(const char* hex, bool secure) +-{ +- return MpiFromBytes(QByteArray::fromRawData(hex, static_cast(strlen(hex) + 1)), secure, GCRYMPI_FMT_HEX); +-} +- +-QByteArray MpiToBytes(const GcryptMPI& mpi) +-{ +- unsigned char* buf = nullptr; +- size_t buflen = 0; +- gcry_mpi_aprint(GCRYMPI_FMT_USG, &buf, &buflen, mpi.get()); +- +- QByteArray bytes(reinterpret_cast(buf), static_cast(buflen)); +- +- gcry_free(buf); +- +- return bytes; +-} +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/GcryptMPI.h keepassxc-2.6.4-patched/src/fdosecrets/GcryptMPI.h +--- keepassxc-2.6.4-orig/src/fdosecrets/GcryptMPI.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/GcryptMPI.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,64 +0,0 @@ +-/* +- * Copyright (C) 2019 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_GCRYPTMPI_H +-#define KEEPASSXC_GCRYPTMPI_H +- +-#include +- +-#include +- +-#include +-#include +- +-template using deleter_from_fn = std::integral_constant; +- +-/** +- * A simple RAII wrapper for gcry_mpi_t +- */ +-using GcryptMPI = std::unique_ptr>; +- +-/** +- * A simple RAII wrapper for libgcrypt allocated memory +- */ +-using GcryptMemPtr = std::unique_ptr>; +- +-/** +- * Parse a QByteArray as MPI +- * @param bytes +- * @param secure +- * @param format +- * @return +- */ +-GcryptMPI MpiFromBytes(const QByteArray& bytes, bool secure = true, gcry_mpi_format format = GCRYMPI_FMT_USG); +- +-/** +- * Parse MPI from hex data +- * @param hex +- * @param secure +- * @return +- */ +-GcryptMPI MpiFromHex(const char* hex, bool secure = true); +- +-/** +- * Dump MPI to bytes in USG format +- * @param mpi +- * @return +- */ +-QByteArray MpiToBytes(const GcryptMPI& mpi); +- +-#endif // KEEPASSXC_GCRYPTMPI_H +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/CollectionAdaptor.cpp keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/CollectionAdaptor.cpp +--- keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/CollectionAdaptor.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/CollectionAdaptor.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,89 +0,0 @@ +-/* +- * Copyright (C) 2018 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "CollectionAdaptor.h" +- +-#include "fdosecrets/objects/Collection.h" +-#include "fdosecrets/objects/Item.h" +-#include "fdosecrets/objects/Prompt.h" +- +-namespace FdoSecrets +-{ +- +- CollectionAdaptor::CollectionAdaptor(Collection* parent) +- : DBusAdaptor(parent) +- { +- connect( +- p(), &Collection::itemCreated, this, [this](const Item* item) { emit ItemCreated(objectPathSafe(item)); }); +- connect( +- p(), &Collection::itemDeleted, this, [this](const Item* item) { emit ItemDeleted(objectPathSafe(item)); }); +- connect( +- p(), &Collection::itemChanged, this, [this](const Item* item) { emit ItemChanged(objectPathSafe(item)); }); +- } +- +- const QList CollectionAdaptor::items() const +- { +- return objectsToPath(p()->items().valueOrHandle(p())); +- } +- +- QString CollectionAdaptor::label() const +- { +- return p()->label().valueOrHandle(p()); +- } +- +- void CollectionAdaptor::setLabel(const QString& label) +- { +- p()->setLabel(label).handle(p()); +- } +- +- bool CollectionAdaptor::locked() const +- { +- return p()->locked().valueOrHandle(p()); +- } +- +- qulonglong CollectionAdaptor::created() const +- { +- return p()->created().valueOrHandle(p()); +- } +- +- qulonglong CollectionAdaptor::modified() const +- { +- return p()->modified().valueOrHandle(p()); +- } +- +- QDBusObjectPath CollectionAdaptor::Delete() +- { +- return objectPathSafe(p()->deleteCollection().valueOrHandle(p())); +- } +- +- QList CollectionAdaptor::SearchItems(const StringStringMap& attributes) +- { +- return objectsToPath(p()->searchItems(attributes).valueOrHandle(p())); +- } +- +- QDBusObjectPath CollectionAdaptor::CreateItem(const QVariantMap& properties, +- const SecretStruct& secret, +- bool replace, +- QDBusObjectPath& prompt) +- { +- PromptBase* pp = nullptr; +- auto item = p()->createItem(properties, secret, replace, pp).valueOrHandle(p()); +- prompt = objectPathSafe(pp); +- return objectPathSafe(item); +- } +- +-} // namespace FdoSecrets +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/CollectionAdaptor.h keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/CollectionAdaptor.h +--- keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/CollectionAdaptor.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/CollectionAdaptor.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,71 +0,0 @@ +-/* +- * Copyright (C) 2018 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_FDOSECRETS_COLLECTIONADAPTOR_H +-#define KEEPASSXC_FDOSECRETS_COLLECTIONADAPTOR_H +- +-#include "fdosecrets/objects/adaptors/DBusAdaptor.h" +- +-#include +- +-namespace FdoSecrets +-{ +- +- class Collection; +- class CollectionAdaptor : public DBusAdaptor +- { +- Q_OBJECT +- Q_CLASSINFO("D-Bus Interface", DBUS_INTERFACE_SECRET_COLLECTION) +- +- Q_PROPERTY(QList Items READ items) +- Q_PROPERTY(QString Label READ label WRITE setLabel) +- Q_PROPERTY(bool Locked READ locked) +- Q_PROPERTY(qulonglong Created READ created) +- Q_PROPERTY(qulonglong Modified READ modified) +- +- public: +- explicit CollectionAdaptor(Collection* parent); +- ~CollectionAdaptor() override = default; +- +- const QList items() const; +- +- QString label() const; +- void setLabel(const QString& label); +- +- bool locked() const; +- +- qulonglong created() const; +- +- qulonglong modified() const; +- +- public slots: +- QDBusObjectPath Delete(); +- QList SearchItems(const StringStringMap& attributes); +- QDBusObjectPath CreateItem(const QVariantMap& properties, +- const FdoSecrets::SecretStruct& secret, +- bool replace, +- QDBusObjectPath& prompt); +- +- signals: +- void ItemCreated(const QDBusObjectPath& item); +- void ItemDeleted(const QDBusObjectPath& item); +- void ItemChanged(const QDBusObjectPath& item); +- }; +- +-} // namespace FdoSecrets +- +-#endif // KEEPASSXC_FDOSECRETS_COLLECTIONADAPTOR_H +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/DBusAdaptor.h keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/DBusAdaptor.h +--- keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/DBusAdaptor.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/DBusAdaptor.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,51 +0,0 @@ +-/* +- * Copyright (C) 2018 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_FDOSECRETS_DBUSADAPTOR_H +-#define KEEPASSXC_FDOSECRETS_DBUSADAPTOR_H +- +-#include "fdosecrets/objects/DBusReturn.h" +-#include "fdosecrets/objects/DBusTypes.h" +- +-#include +- +-namespace FdoSecrets +-{ +- +- /** +- * @brief A common adapter class +- */ +- template class DBusAdaptor : public QDBusAbstractAdaptor +- { +- public: +- explicit DBusAdaptor(QObject* parent = nullptr) +- : QDBusAbstractAdaptor(parent) +- { +- } +- +- ~DBusAdaptor() override = default; +- +- protected: +- Parent* p() const +- { +- return qobject_cast(parent()); +- } +- }; +- +-} // namespace FdoSecrets +- +-#endif // KEEPASSXC_FDOSECRETS_DBUSADAPTOR_H +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/ItemAdaptor.cpp keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/ItemAdaptor.cpp +--- keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/ItemAdaptor.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/ItemAdaptor.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,83 +0,0 @@ +-/* +- * Copyright (C) 2019 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "ItemAdaptor.h" +- +-#include "fdosecrets/objects/Item.h" +-#include "fdosecrets/objects/Prompt.h" +-#include "fdosecrets/objects/Session.h" +- +-namespace FdoSecrets +-{ +- +- ItemAdaptor::ItemAdaptor(Item* parent) +- : DBusAdaptor(parent) +- { +- } +- +- bool ItemAdaptor::locked() const +- { +- return p()->locked().valueOrHandle(p()); +- } +- +- const StringStringMap ItemAdaptor::attributes() const +- { +- return p()->attributes().valueOrHandle(p()); +- } +- +- void ItemAdaptor::setAttributes(const StringStringMap& attrs) +- { +- p()->setAttributes(attrs).handle(p()); +- } +- +- QString ItemAdaptor::label() const +- { +- return p()->label().valueOrHandle(p()); +- } +- +- void ItemAdaptor::setLabel(const QString& label) +- { +- p()->setLabel(label).handle(p()); +- } +- +- qulonglong ItemAdaptor::created() const +- { +- return p()->created().valueOrHandle(p()); +- } +- +- qulonglong ItemAdaptor::modified() const +- { +- return p()->modified().valueOrHandle(p()); +- } +- +- QDBusObjectPath ItemAdaptor::Delete() +- { +- auto prompt = p()->deleteItem().valueOrHandle(p()); +- return objectPathSafe(prompt); +- } +- +- SecretStruct ItemAdaptor::GetSecret(const QDBusObjectPath& session) +- { +- return p()->getSecret(pathToObject(session)).valueOrHandle(p()); +- } +- +- void ItemAdaptor::SetSecret(const SecretStruct& secret) +- { +- p()->setSecret(secret).handle(p()); +- } +- +-} // namespace FdoSecrets +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/ItemAdaptor.h keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/ItemAdaptor.h +--- keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/ItemAdaptor.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/ItemAdaptor.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,62 +0,0 @@ +-/* +- * Copyright (C) 2019 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_FDOSECRETS_ITEMADAPTOR_H +-#define KEEPASSXC_FDOSECRETS_ITEMADAPTOR_H +- +-#include "fdosecrets/objects/adaptors/DBusAdaptor.h" +- +-namespace FdoSecrets +-{ +- +- class Item; +- class ItemAdaptor : public DBusAdaptor +- { +- Q_OBJECT +- Q_CLASSINFO("D-Bus Interface", DBUS_INTERFACE_SECRET_ITEM) +- +- Q_PROPERTY(bool Locked READ locked) +- Q_PROPERTY(StringStringMap Attributes READ attributes WRITE setAttributes) +- Q_PROPERTY(QString Label READ label WRITE setLabel) +- Q_PROPERTY(qulonglong Created READ created) +- Q_PROPERTY(qulonglong Modified READ modified) +- +- public: +- explicit ItemAdaptor(Item* parent); +- ~ItemAdaptor() override = default; +- +- bool locked() const; +- +- const StringStringMap attributes() const; +- void setAttributes(const StringStringMap& attrs); +- +- QString label() const; +- void setLabel(const QString& label); +- +- qulonglong created() const; +- +- qulonglong modified() const; +- +- public slots: +- QDBusObjectPath Delete(); +- FdoSecrets::SecretStruct GetSecret(const QDBusObjectPath& session); +- void SetSecret(const FdoSecrets::SecretStruct& secret); +- }; +- +-} // namespace FdoSecrets +- +-#endif // KEEPASSXC_FDOSECRETS_ITEMADAPTOR_H +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/PromptAdaptor.cpp keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/PromptAdaptor.cpp +--- keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/PromptAdaptor.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/PromptAdaptor.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,47 +0,0 @@ +-/* +- * Copyright (C) 2019 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "PromptAdaptor.h" +- +-#include "fdosecrets/objects/Prompt.h" +- +-namespace FdoSecrets +-{ +- +- PromptAdaptor::PromptAdaptor(PromptBase* parent) +- : DBusAdaptor(parent) +- { +- connect(p(), &PromptBase::completed, this, [this](bool dismissed, QVariant result) { +- // make sure the result contains a valid value, otherwise QDBusVariant refuses to marshall it. +- if (!result.isValid()) { +- result = QString{}; +- } +- emit Completed(dismissed, QDBusVariant(std::move(result))); +- }); +- } +- +- void PromptAdaptor::Prompt(const QString& windowId) +- { +- p()->prompt(windowId).handle(p()); +- } +- +- void PromptAdaptor::Dismiss() +- { +- p()->dismiss().handle(p()); +- } +- +-} // namespace FdoSecrets +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/PromptAdaptor.h keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/PromptAdaptor.h +--- keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/PromptAdaptor.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/PromptAdaptor.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,46 +0,0 @@ +-/* +- * Copyright (C) 2019 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_FDOSECRETS_PROMPTADAPTOR_H +-#define KEEPASSXC_FDOSECRETS_PROMPTADAPTOR_H +- +-#include "fdosecrets/objects/adaptors/DBusAdaptor.h" +- +-namespace FdoSecrets +-{ +- +- class PromptBase; +- class PromptAdaptor : public DBusAdaptor +- { +- Q_OBJECT +- Q_CLASSINFO("D-Bus Interface", DBUS_INTERFACE_SECRET_PROMPT) +- +- public: +- explicit PromptAdaptor(PromptBase* parent); +- ~PromptAdaptor() override = default; +- +- public slots: +- void Prompt(const QString& windowId); +- void Dismiss(); +- +- signals: +- void Completed(bool dismissed, const QDBusVariant& result); +- }; +- +-} // namespace FdoSecrets +- +-#endif // KEEPASSXC_FDOSECRETS_PROMPTADAPTOR_H +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/ServiceAdaptor.cpp keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/ServiceAdaptor.cpp +--- keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/ServiceAdaptor.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/ServiceAdaptor.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,137 +0,0 @@ +-/* +- * Copyright (C) 2018 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "ServiceAdaptor.h" +- +-#include "fdosecrets/objects/Collection.h" +-#include "fdosecrets/objects/Item.h" +-#include "fdosecrets/objects/Prompt.h" +-#include "fdosecrets/objects/Service.h" +-#include "fdosecrets/objects/Session.h" +- +-namespace FdoSecrets +-{ +- +- ServiceAdaptor::ServiceAdaptor(Service* parent) +- : DBusAdaptor(parent) +- { +- connect(p(), &Service::collectionCreated, this, [this](Collection* coll) { +- emit CollectionCreated(objectPathSafe(coll)); +- }); +- connect(p(), &Service::collectionDeleted, this, [this](Collection* coll) { +- emit CollectionDeleted(objectPathSafe(coll)); +- }); +- connect(p(), &Service::collectionChanged, this, [this](Collection* coll) { +- emit CollectionChanged(objectPathSafe(coll)); +- }); +- } +- +- const QList ServiceAdaptor::collections() const +- { +- auto colls = p()->collections().valueOrHandle(p()); +- return objectsToPath(std::move(colls)); +- } +- +- QDBusVariant +- ServiceAdaptor::OpenSession(const QString& algorithm, const QDBusVariant& input, QDBusObjectPath& result) +- { +- Session* session = nullptr; +- auto output = p()->openSession(algorithm, input.variant(), session).valueOrHandle(p()); +- result = objectPathSafe(session); +- return QDBusVariant(std::move(output)); +- } +- +- QDBusObjectPath +- ServiceAdaptor::CreateCollection(const QVariantMap& properties, const QString& alias, QDBusObjectPath& prompt) +- { +- PromptBase* pp; +- auto coll = p()->createCollection(properties, alias, pp).valueOrHandle(p()); +- prompt = objectPathSafe(pp); +- return objectPathSafe(coll); +- } +- +- const QList ServiceAdaptor::SearchItems(const StringStringMap& attributes, +- QList& locked) +- { +- QList lockedItems, unlockedItems; +- unlockedItems = p()->searchItems(attributes, lockedItems).valueOrHandle(p()); +- locked = objectsToPath(lockedItems); +- return objectsToPath(unlockedItems); +- } +- +- const QList ServiceAdaptor::Unlock(const QList& paths, QDBusObjectPath& prompt) +- { +- auto objects = pathsToObject(paths); +- if (!paths.isEmpty() && objects.isEmpty()) { +- DBusReturn<>::Error(QStringLiteral(DBUS_ERROR_SECRET_NO_SUCH_OBJECT)).handle(p()); +- return {}; +- } +- +- PromptBase* pp = nullptr; +- auto unlocked = p()->unlock(objects, pp).valueOrHandle(p()); +- +- prompt = objectPathSafe(pp); +- return objectsToPath(unlocked); +- } +- +- const QList ServiceAdaptor::Lock(const QList& paths, QDBusObjectPath& prompt) +- { +- auto objects = pathsToObject(paths); +- if (!paths.isEmpty() && objects.isEmpty()) { +- DBusReturn<>::Error(QStringLiteral(DBUS_ERROR_SECRET_NO_SUCH_OBJECT)).handle(p()); +- return {}; +- } +- +- PromptBase* pp = nullptr; +- auto locked = p()->lock(objects, pp).valueOrHandle(p()); +- +- prompt = objectPathSafe(pp); +- return objectsToPath(locked); +- } +- +- const ObjectPathSecretMap ServiceAdaptor::GetSecrets(const QList& items, +- const QDBusObjectPath& session) +- { +- auto itemObjects = pathsToObject(items); +- if (!items.isEmpty() && itemObjects.isEmpty()) { +- DBusReturn<>::Error(QStringLiteral(DBUS_ERROR_SECRET_NO_SUCH_OBJECT)).handle(p()); +- return {}; +- } +- +- auto secrets = p()->getSecrets(pathsToObject(items), pathToObject(session)).valueOrHandle(p()); +- +- ObjectPathSecretMap res; +- auto iter = secrets.begin(); +- while (iter != secrets.end()) { +- res[objectPathSafe(iter.key())] = std::move(iter.value()); +- ++iter; +- } +- return res; +- } +- +- QDBusObjectPath ServiceAdaptor::ReadAlias(const QString& name) +- { +- auto coll = p()->readAlias(name).valueOrHandle(p()); +- return objectPathSafe(coll); +- } +- +- void ServiceAdaptor::SetAlias(const QString& name, const QDBusObjectPath& collection) +- { +- p()->setAlias(name, pathToObject(collection)).handle(p()); +- } +- +-} // namespace FdoSecrets +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/ServiceAdaptor.h keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/ServiceAdaptor.h +--- keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/ServiceAdaptor.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/ServiceAdaptor.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,71 +0,0 @@ +-/* +- * Copyright (C) 2018 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_FDOSECRETS_SECRETSERVICEDBUS_H +-#define KEEPASSXC_FDOSECRETS_SECRETSERVICEDBUS_H +- +-#include "DBusAdaptor.h" +- +-#include +- +-namespace FdoSecrets +-{ +- /** +- * @brief Adapter class for interface org.freedesktop.Secret.Service +- */ +- class Service; +- class ServiceAdaptor : public DBusAdaptor +- { +- Q_OBJECT +- Q_CLASSINFO("D-Bus Interface", DBUS_INTERFACE_SECRET_SERVICE) +- +- Q_PROPERTY(QList Collections READ collections) +- +- public: +- explicit ServiceAdaptor(Service* parent); +- ~ServiceAdaptor() override = default; +- +- const QList collections() const; +- +- public slots: +- QDBusVariant OpenSession(const QString& algorithm, const QDBusVariant& input, QDBusObjectPath& result); +- +- QDBusObjectPath CreateCollection(const QVariantMap& properties, const QString& alias, QDBusObjectPath& prompt); +- +- const QList SearchItems(const StringStringMap& attributes, QList& locked); +- +- const QList Unlock(const QList& paths, QDBusObjectPath& prompt); +- +- const QList Lock(const QList& paths, QDBusObjectPath& prompt); +- +- const ObjectPathSecretMap GetSecrets(const QList& items, const QDBusObjectPath& session); +- +- QDBusObjectPath ReadAlias(const QString& name); +- +- void SetAlias(const QString& name, const QDBusObjectPath& collection); +- +- signals: +- void CollectionCreated(const QDBusObjectPath& collection); +- +- void CollectionDeleted(const QDBusObjectPath& collection); +- +- void CollectionChanged(const QDBusObjectPath& collection); +- }; +- +-} // namespace FdoSecrets +- +-#endif // KEEPASSXC_FDOSECRETS_SECRETSERVICEDBUS_H +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/SessionAdaptor.cpp keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/SessionAdaptor.cpp +--- keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/SessionAdaptor.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/SessionAdaptor.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,35 +0,0 @@ +-/* +- * Copyright (C) 2019 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "SessionAdaptor.h" +- +-#include "fdosecrets/objects/Session.h" +- +-namespace FdoSecrets +-{ +- +- SessionAdaptor::SessionAdaptor(Session* parent) +- : DBusAdaptor(parent) +- { +- } +- +- void SessionAdaptor::Close() +- { +- p()->close().handle(p()); +- } +- +-} // namespace FdoSecrets +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/SessionAdaptor.h keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/SessionAdaptor.h +--- keepassxc-2.6.4-orig/src/fdosecrets/objects/adaptors/SessionAdaptor.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/objects/adaptors/SessionAdaptor.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,42 +0,0 @@ +-/* +- * Copyright (C) 2019 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_FDOSECRETS_SESSIONADAPTOR_H +-#define KEEPASSXC_FDOSECRETS_SESSIONADAPTOR_H +- +-#include "fdosecrets/objects/adaptors/DBusAdaptor.h" +- +-namespace FdoSecrets +-{ +- +- class Session; +- class SessionAdaptor : public DBusAdaptor +- { +- Q_OBJECT +- Q_CLASSINFO("D-Bus Interface", DBUS_INTERFACE_SECRET_SESSION) +- +- public: +- explicit SessionAdaptor(Session* parent); +- ~SessionAdaptor() override = default; +- +- public slots: +- void Close(); +- }; +- +-} // namespace FdoSecrets +- +-#endif // KEEPASSXC_FDOSECRETS_SESSIONADAPTOR_H +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/Collection.cpp keepassxc-2.6.4-patched/src/fdosecrets/objects/Collection.cpp +--- keepassxc-2.6.4-orig/src/fdosecrets/objects/Collection.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/objects/Collection.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,733 +0,0 @@ +-/* +- * Copyright (C) 2018 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "Collection.h" +- +-#include "fdosecrets/FdoSecretsSettings.h" +-#include "fdosecrets/objects/Item.h" +-#include "fdosecrets/objects/Prompt.h" +-#include "fdosecrets/objects/Service.h" +-#include "fdosecrets/objects/Session.h" +- +-#include "core/Config.h" +-#include "core/Database.h" +-#include "core/Tools.h" +-#include "gui/DatabaseTabWidget.h" +-#include "gui/DatabaseWidget.h" +- +-#include +-#include +- +-namespace FdoSecrets +-{ +- +- Collection::Collection(Service* parent, DatabaseWidget* backend) +- : DBusObject(parent) +- , m_backend(backend) +- , m_exposedGroup(nullptr) +- , m_registered(false) +- { +- // whenever the file path or the database object itself change, we do a full reload. +- connect(backend, &DatabaseWidget::databaseFilePathChanged, this, &Collection::reloadBackend); +- connect(backend, &DatabaseWidget::databaseReplaced, this, &Collection::reloadBackend); +- +- // also remember to clear/populate the database when lock state changes. +- connect(backend, &DatabaseWidget::databaseUnlocked, this, &Collection::onDatabaseLockChanged); +- connect(backend, &DatabaseWidget::databaseLocked, this, &Collection::onDatabaseLockChanged); +- +- // get notified whenever unlock db dialog finishes +- connect(parent, &Service::doneUnlockDatabaseInDialog, this, [this](bool accepted, DatabaseWidget* dbWidget) { +- if (!dbWidget || dbWidget != m_backend) { +- return; +- } +- emit doneUnlockCollection(accepted); +- }); +- +- reloadBackend(); +- } +- +- void Collection::reloadBackend() +- { +- if (m_registered) { +- // delete all items +- // this has to be done because the backend is actually still there, just we don't expose them +- // NOTE: Do NOT use a for loop, because Item::doDelete will remove itself from m_items. +- while (!m_items.isEmpty()) { +- m_items.first()->doDelete(); +- } +- cleanupConnections(); +- +- unregisterCurrentPath(); +- m_registered = false; +- } +- +- Q_ASSERT(m_backend); +- +- // make sure we have updated copy of the filepath, which is used to identify the database. +- m_backendPath = m_backend->database()->filePath(); +- +- // the database may not have a name (derived from filePath) yet, which may happen if it's newly created. +- // defer the registration to next time a file path change happens. +- if (!name().isEmpty()) { +- registerWithPath( +- QStringLiteral(DBUS_PATH_TEMPLATE_COLLECTION).arg(p()->objectPath().path(), encodePath(name())), +- new CollectionAdaptor(this)); +- m_registered = true; +- } +- +- // populate contents after expose on dbus, because items rely on parent's dbus object path +- if (!backendLocked()) { +- populateContents(); +- } else { +- cleanupConnections(); +- } +- } +- +- DBusReturn Collection::ensureBackend() const +- { +- if (!m_backend) { +- return DBusReturn<>::Error(QStringLiteral(DBUS_ERROR_SECRET_NO_SUCH_OBJECT)); +- } +- return {}; +- } +- +- DBusReturn Collection::ensureUnlocked() const +- { +- if (backendLocked()) { +- return DBusReturn<>::Error(QStringLiteral(DBUS_ERROR_SECRET_IS_LOCKED)); +- } +- return {}; +- } +- +- DBusReturn> Collection::items() const +- { +- auto ret = ensureBackend(); +- if (ret.isError()) { +- return ret; +- } +- return m_items; +- } +- +- DBusReturn Collection::label() const +- { +- auto ret = ensureBackend(); +- if (ret.isError()) { +- return ret; +- } +- +- if (backendLocked()) { +- return name(); +- } +- return m_backend->database()->metadata()->name(); +- } +- +- DBusReturn Collection::setLabel(const QString& label) +- { +- auto ret = ensureBackend(); +- if (ret.isError()) { +- return ret; +- } +- ret = ensureUnlocked(); +- if (ret.isError()) { +- return ret; +- } +- +- m_backend->database()->metadata()->setName(label); +- return {}; +- } +- +- DBusReturn Collection::locked() const +- { +- auto ret = ensureBackend(); +- if (ret.isError()) { +- return ret; +- } +- return backendLocked(); +- } +- +- DBusReturn Collection::created() const +- { +- auto ret = ensureBackend(); +- if (ret.isError()) { +- return ret; +- } +- ret = ensureUnlocked(); +- if (ret.isError()) { +- return ret; +- } +- return static_cast(m_backend->database()->rootGroup()->timeInfo().creationTime().toMSecsSinceEpoch() +- / 1000); +- } +- +- DBusReturn Collection::modified() const +- { +- auto ret = ensureBackend(); +- if (ret.isError()) { +- return ret; +- } +- ret = ensureUnlocked(); +- if (ret.isError()) { +- return ret; +- } +- // FIXME: there seems not to have a global modified time. +- // Use a more accurate time, considering all metadata, group, entry. +- return static_cast( +- m_backend->database()->rootGroup()->timeInfo().lastModificationTime().toMSecsSinceEpoch() / 1000); +- } +- +- DBusReturn Collection::deleteCollection() +- { +- auto ret = ensureBackend(); +- if (ret.isError()) { +- return ret; +- } +- +- // Delete means close database +- auto prompt = new DeleteCollectionPrompt(service(), this); +- if (backendLocked()) { +- // this won't raise a dialog, immediate execute +- auto pret = prompt->prompt({}); +- if (pret.isError()) { +- return pret; +- } +- prompt = nullptr; +- } +- // defer the close to the prompt +- return prompt; +- } +- +- DBusReturn> Collection::searchItems(const StringStringMap& attributes) +- { +- auto ret = ensureBackend(); +- if (ret.isError()) { +- return ret; +- } +- ret = ensureUnlocked(); +- if (ret.isError()) { +- // searchItems should work, whether `this` is locked or not. +- // however, we can't search items the same way as in gnome-keying, +- // because there's no database at all when locked. +- return QList{}; +- } +- +- // shortcut logic for Uuid/Path attributes, as they can uniquely identify an item. +- if (attributes.contains(ItemAttributes::UuidKey)) { +- auto uuid = QUuid::fromRfc4122(QByteArray::fromHex(attributes.value(ItemAttributes::UuidKey).toLatin1())); +- auto entry = m_exposedGroup->findEntryByUuid(uuid); +- if (entry) { +- return QList{m_entryToItem.value(entry)}; +- } else { +- return QList{}; +- } +- } +- +- if (attributes.contains(ItemAttributes::PathKey)) { +- auto path = attributes.value(ItemAttributes::PathKey); +- auto entry = m_exposedGroup->findEntryByPath(path); +- if (entry) { +- return QList{m_entryToItem.value(entry)}; +- } else { +- return QList{}; +- } +- } +- +- QList terms; +- for (auto it = attributes.constBegin(); it != attributes.constEnd(); ++it) { +- terms << attributeToTerm(it.key(), it.value()); +- } +- +- QList items; +- const auto foundEntries = EntrySearcher(false, true).search(terms, m_exposedGroup); +- items.reserve(foundEntries.size()); +- for (const auto& entry : foundEntries) { +- items << m_entryToItem.value(entry); +- } +- return items; +- } +- +- EntrySearcher::SearchTerm Collection::attributeToTerm(const QString& key, const QString& value) +- { +- static QMap attrKeyToField{ +- {EntryAttributes::TitleKey, EntrySearcher::Field::Title}, +- {EntryAttributes::UserNameKey, EntrySearcher::Field::Username}, +- {EntryAttributes::URLKey, EntrySearcher::Field::Url}, +- {EntryAttributes::NotesKey, EntrySearcher::Field::Notes}, +- }; +- +- EntrySearcher::SearchTerm term{}; +- term.field = attrKeyToField.value(key, EntrySearcher::Field::AttributeValue); +- term.word = key; +- term.exclude = false; +- +- const auto useWildcards = false; +- const auto exactMatch = true; +- const auto caseSensitive = true; +- term.regex = Tools::convertToRegex(QRegularExpression::escape(value), useWildcards, exactMatch, caseSensitive); +- +- return term; +- } +- +- DBusReturn +- Collection::createItem(const QVariantMap& properties, const SecretStruct& secret, bool replace, PromptBase*& prompt) +- { +- auto ret = ensureBackend(); +- if (ret.isError()) { +- return ret; +- } +- ret = ensureUnlocked(); +- if (ret.isError()) { +- return ret; +- } +- +- if (!pathToObject(secret.session)) { +- return DBusReturn<>::Error(QStringLiteral(DBUS_ERROR_SECRET_NO_SESSION)); +- } +- +- prompt = nullptr; +- +- bool newlyCreated = true; +- Item* item = nullptr; +- QString itemPath; +- StringStringMap attributes; +- +- auto iterAttr = properties.find(QStringLiteral(DBUS_INTERFACE_SECRET_ITEM ".Attributes")); +- if (iterAttr != properties.end()) { +- attributes = iterAttr.value().value(); +- +- itemPath = attributes.value(ItemAttributes::PathKey); +- +- // check existing item using attributes +- auto existings = searchItems(attributes); +- if (existings.isError()) { +- return existings; +- } +- if (!existings.value().isEmpty() && replace) { +- item = existings.value().front(); +- newlyCreated = false; +- } +- } +- +- if (!item) { +- // normalize itemPath +- itemPath = itemPath.startsWith('/') ? QString{} : QStringLiteral("/") + itemPath; +- +- // split itemPath to groupPath and itemName +- auto components = itemPath.split('/'); +- Q_ASSERT(components.size() >= 2); +- +- auto itemName = components.takeLast(); +- Group* group = findCreateGroupByPath(components.join('/')); +- +- // create new Entry in backend +- auto* entry = new Entry(); +- entry->setUuid(QUuid::createUuid()); +- entry->setTitle(itemName); +- entry->setUsername(m_backend->database()->metadata()->defaultUserName()); +- group->applyGroupIconOnCreateTo(entry); +- +- entry->setGroup(group); +- +- // when creation finishes in backend, we will already have item +- item = m_entryToItem.value(entry, nullptr); +- +- if (!item) { +- // may happen if entry somehow ends up in recycle bin +- return DBusReturn<>::Error(QStringLiteral(DBUS_ERROR_SECRET_NO_SUCH_OBJECT)); +- } +- } +- +- ret = item->setProperties(properties); +- if (ret.isError()) { +- if (newlyCreated) { +- item->doDelete(); +- } +- return ret; +- } +- ret = item->setSecret(secret); +- if (ret.isError()) { +- if (newlyCreated) { +- item->doDelete(); +- } +- return ret; +- } +- +- return item; +- } +- +- DBusReturn Collection::setProperties(const QVariantMap& properties) +- { +- auto label = properties.value(QStringLiteral(DBUS_INTERFACE_SECRET_COLLECTION ".Label")).toString(); +- +- auto ret = setLabel(label); +- if (ret.isError()) { +- return ret; +- } +- +- return {}; +- } +- +- const QSet Collection::aliases() const +- { +- return m_aliases; +- } +- +- DBusReturn Collection::addAlias(QString alias) +- { +- auto ret = ensureBackend(); +- if (ret.isError()) { +- return ret; +- } +- +- alias = encodePath(alias); +- +- if (m_aliases.contains(alias)) { +- return {}; +- } +- +- emit aliasAboutToAdd(alias); +- +- bool ok = QDBusConnection::sessionBus().registerObject( +- QStringLiteral(DBUS_PATH_TEMPLATE_ALIAS).arg(p()->objectPath().path(), alias), this); +- if (ok) { +- m_aliases.insert(alias); +- emit aliasAdded(alias); +- } +- +- return {}; +- } +- +- DBusReturn Collection::removeAlias(QString alias) +- { +- auto ret = ensureBackend(); +- if (ret.isError()) { +- return ret; +- } +- +- alias = encodePath(alias); +- +- if (!m_aliases.contains(alias)) { +- return {}; +- } +- +- QDBusConnection::sessionBus().unregisterObject( +- QStringLiteral(DBUS_PATH_TEMPLATE_ALIAS).arg(p()->objectPath().path(), alias)); +- +- m_aliases.remove(alias); +- emit aliasRemoved(alias); +- +- return {}; +- } +- +- QString Collection::name() const +- { +- if (m_backendPath.isEmpty()) { +- // This is a newly created db without saving to file. +- // This name is also used to register dbus path. +- // For simplicity, we don't monitor the name change. +- // So the dbus object path is not updated if the db name +- // changes. This should not be a problem because once the database +- // gets saved, the dbus path will be updated to use filename and +- // everything back to normal. +- return m_backend->database()->metadata()->name(); +- } +- return QFileInfo(m_backendPath).baseName(); +- } +- +- DatabaseWidget* Collection::backend() const +- { +- return m_backend; +- } +- +- void Collection::onDatabaseLockChanged() +- { +- auto locked = backendLocked(); +- if (!locked) { +- populateContents(); +- } else { +- cleanupConnections(); +- } +- emit collectionLockChanged(locked); +- emit collectionChanged(); +- } +- +- void Collection::populateContents() +- { +- if (!m_registered) { +- return; +- } +- +- // we have an unlocked db +- +- auto newUuid = FdoSecrets::settings()->exposedGroup(m_backend->database()); +- auto newGroup = m_backend->database()->rootGroup()->findGroupByUuid(newUuid); +- if (!newGroup || inRecycleBin(newGroup)) { +- // no exposed group, delete self +- doDelete(); +- return; +- } +- +- // clean up old group connections +- cleanupConnections(); +- +- m_exposedGroup = newGroup; +- +- // Attach signal to update exposed group settings if the group was removed. +- // +- // When the group object is normally deleted due to ~Database, the databaseReplaced +- // signal should be first emitted, and we will clean up connection in reloadDatabase, +- // so this handler won't be triggered. +- connect(m_exposedGroup.data(), &Group::groupAboutToRemove, this, [this](Group* toBeRemoved) { +- if (backendLocked()) { +- return; +- } +- auto db = m_backend->database(); +- if (toBeRemoved->database() != db) { +- // should not happen, but anyway. +- // somehow our current database has been changed, and the old group is being deleted +- // possibly logic changes in replaceDatabase. +- return; +- } +- auto uuid = FdoSecrets::settings()->exposedGroup(db); +- auto exposedGroup = db->rootGroup()->findGroupByUuid(uuid); +- if (toBeRemoved == exposedGroup) { +- // reset the exposed group to none +- FdoSecrets::settings()->setExposedGroup(db, {}); +- } +- }); +- // Another possibility is the group being moved to recycle bin. +- connect(m_exposedGroup.data(), &Group::groupModified, this, [this]() { +- if (inRecycleBin(m_exposedGroup->parentGroup())) { +- // reset the exposed group to none +- FdoSecrets::settings()->setExposedGroup(m_backend->database().data(), {}); +- } +- }); +- +- // Monitor exposed group settings +- connect(m_backend->database()->metadata()->customData(), &CustomData::customDataModified, this, [this]() { +- if (!m_exposedGroup || backendLocked()) { +- return; +- } +- if (m_exposedGroup->uuid() == FdoSecrets::settings()->exposedGroup(m_backend->database())) { +- // no change +- return; +- } +- onDatabaseExposedGroupChanged(); +- }); +- +- // Add items for existing entry +- const auto entries = m_exposedGroup->entriesRecursive(false); +- for (const auto& entry : entries) { +- onEntryAdded(entry, false); +- } +- +- connectGroupSignalRecursive(m_exposedGroup); +- } +- +- void Collection::onDatabaseExposedGroupChanged() +- { +- // delete all items +- // this has to be done because the backend is actually still there +- // just we don't expose them +- for (const auto& item : asConst(m_items)) { +- item->doDelete(); +- } +- +- // repopulate +- if (!backendLocked()) { +- populateContents(); +- } +- } +- +- void Collection::onEntryAdded(Entry* entry, bool emitSignal) +- { +- if (inRecycleBin(entry)) { +- return; +- } +- +- auto item = new Item(this, entry); +- m_items << item; +- m_entryToItem[entry] = item; +- +- // forward delete signals +- connect(entry->group(), &Group::entryAboutToRemove, item, [item](Entry* toBeRemoved) { +- if (item->backend() == toBeRemoved) { +- item->doDelete(); +- } +- }); +- +- // relay signals +- connect(item, &Item::itemChanged, this, [this, item]() { emit itemChanged(item); }); +- connect(item, &Item::itemAboutToDelete, this, [this, item]() { +- m_items.removeAll(item); +- m_entryToItem.remove(item->backend()); +- emit itemDeleted(item); +- }); +- +- if (emitSignal) { +- emit itemCreated(item); +- } +- } +- +- void Collection::connectGroupSignalRecursive(Group* group) +- { +- if (inRecycleBin(group)) { +- return; +- } +- +- connect(group, &Group::groupModified, this, &Collection::collectionChanged); +- connect(group, &Group::entryAdded, this, [this](Entry* entry) { onEntryAdded(entry, true); }); +- +- const auto children = group->children(); +- for (const auto& cg : children) { +- connectGroupSignalRecursive(cg); +- } +- } +- +- Service* Collection::service() const +- { +- return qobject_cast(parent()); +- } +- +- bool Collection::doLock() +- { +- Q_ASSERT(m_backend); +- +- return m_backend->lock(); +- } +- +- void Collection::doUnlock() +- { +- Q_ASSERT(m_backend); +- +- service()->doUnlockDatabaseInDialog(m_backend); +- } +- +- void Collection::doDelete() +- { +- if (!m_backend) { +- // I'm already deleted +- return; +- } +- +- emit collectionAboutToDelete(); +- +- unregisterCurrentPath(); +- +- // remove alias manually to trigger signal +- for (const auto& a : aliases()) { +- removeAlias(a).okOrDie(); +- } +- +- // cleanup connection on Database +- cleanupConnections(); +- // cleanup connection on Backend itself +- m_backend->disconnect(this); +- parent()->disconnect(this); +- +- m_exposedGroup = nullptr; +- +- // reset backend and delete self +- m_backend = nullptr; +- deleteLater(); +- } +- +- void Collection::cleanupConnections() +- { +- m_backend->database()->metadata()->customData()->disconnect(this); +- if (m_exposedGroup) { +- for (const auto group : m_exposedGroup->groupsRecursive(true)) { +- group->disconnect(this); +- } +- } +- +- m_items.clear(); +- } +- +- QString Collection::backendFilePath() const +- { +- return m_backendPath; +- } +- +- Group* Collection::exposedRootGroup() const +- { +- return m_exposedGroup; +- } +- +- bool Collection::backendLocked() const +- { +- return !m_backend || !m_backend->database()->isInitialized() || m_backend->isLocked(); +- } +- +- void Collection::doDeleteEntries(QList entries) +- { +- m_backend->deleteEntries(std::move(entries)); +- } +- +- Group* Collection::findCreateGroupByPath(const QString& groupPath) +- { +- auto group = m_exposedGroup->findGroupByPath(groupPath); +- if (group) { +- return group; +- } +- +- // groupPath can't be empty here, because otherwise it will match m_exposedGroup and was returned above +- Q_ASSERT(!groupPath.isEmpty()); +- +- auto groups = groupPath.split('/', QString::SkipEmptyParts); +- auto groupName = groups.takeLast(); +- +- // create parent group +- auto parentGroup = findCreateGroupByPath(groups.join('/')); +- +- // create this group +- group = new Group(); +- group->setUuid(QUuid::createUuid()); +- group->setName(groupName); +- group->setIcon(Group::DefaultIconNumber); +- group->setParent(parentGroup); +- +- return group; +- } +- +- bool Collection::inRecycleBin(Group* group) const +- { +- Q_ASSERT(m_backend); +- +- if (!group) { +- // the root group's parent is nullptr, we treat it as not in recycle bin. +- return false; +- } +- +- if (!m_backend->database()->metadata()) { +- return false; +- } +- +- auto recycleBin = m_backend->database()->metadata()->recycleBin(); +- if (!recycleBin) { +- return false; +- } +- +- return group->uuid() == recycleBin->uuid() || group->isRecycled(); +- } +- +- bool Collection::inRecycleBin(Entry* entry) const +- { +- Q_ASSERT(entry); +- return inRecycleBin(entry->group()); +- } +- +-} // namespace FdoSecrets +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/Collection.h keepassxc-2.6.4-patched/src/fdosecrets/objects/Collection.h +--- keepassxc-2.6.4-orig/src/fdosecrets/objects/Collection.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/objects/Collection.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,163 +0,0 @@ +-/* +- * Copyright (C) 2018 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_FDOSECRETS_COLLECTION_H +-#define KEEPASSXC_FDOSECRETS_COLLECTION_H +- +-#include "DBusObject.h" +- +-#include "adaptors/CollectionAdaptor.h" +-#include "core/EntrySearcher.h" +- +-#include +-#include +- +-class Database; +-class DatabaseWidget; +-class Entry; +-class Group; +- +-namespace FdoSecrets +-{ +- class Item; +- class PromptBase; +- class Service; +- class Collection : public DBusObject +- { +- Q_OBJECT +- public: +- explicit Collection(Service* parent, DatabaseWidget* backend); +- +- DBusReturn> items() const; +- +- DBusReturn label() const; +- DBusReturn setLabel(const QString& label); +- +- DBusReturn locked() const; +- +- DBusReturn created() const; +- +- DBusReturn modified() const; +- +- DBusReturn deleteCollection(); +- DBusReturn> searchItems(const StringStringMap& attributes); +- DBusReturn +- createItem(const QVariantMap& properties, const SecretStruct& secret, bool replace, PromptBase*& prompt); +- +- signals: +- void itemCreated(Item* item); +- void itemDeleted(Item* item); +- void itemChanged(Item* item); +- +- void collectionChanged(); +- void collectionAboutToDelete(); +- void collectionLockChanged(bool newLocked); +- +- void aliasAboutToAdd(const QString& alias); +- void aliasAdded(const QString& alias); +- void aliasRemoved(const QString& alias); +- +- void doneUnlockCollection(bool accepted); +- +- public: +- DBusReturn setProperties(const QVariantMap& properties); +- +- bool isValid() const +- { +- return backend(); +- } +- +- DBusReturn removeAlias(QString alias); +- DBusReturn addAlias(QString alias); +- const QSet aliases() const; +- +- /** +- * A human readable name of the collection, available even if the db is locked +- * @return +- */ +- QString name() const; +- +- Group* exposedRootGroup() const; +- DatabaseWidget* backend() const; +- QString backendFilePath() const; +- Service* service() const; +- bool inRecycleBin(Group* group) const; +- bool inRecycleBin(Entry* entry) const; +- +- static EntrySearcher::SearchTerm attributeToTerm(const QString& key, const QString& value); +- +- public slots: +- // expose some methods for Prmopt to use +- bool doLock(); +- void doUnlock(); +- // will remove self +- void doDelete(); +- +- // delete the Entry in backend from this collection +- void doDeleteEntries(QList entries); +- +- private slots: +- void onDatabaseLockChanged(); +- void onDatabaseExposedGroupChanged(); +- // force reload info from backend, potentially delete self +- void reloadBackend(); +- +- private: +- friend class DeleteCollectionPrompt; +- friend class CreateCollectionPrompt; +- +- void onEntryAdded(Entry* entry, bool emitSignal); +- void populateContents(); +- void connectGroupSignalRecursive(Group* group); +- void cleanupConnections(); +- +- bool backendLocked() const; +- +- /** +- * Check if the backend is a valid object, send error reply if not. +- * @return true if the backend is valid. +- */ +- DBusReturn ensureBackend() const; +- +- /** +- * Ensure the database is unlocked, send error reply if locked. +- * @return true if the database is locked +- */ +- DBusReturn ensureUnlocked() const; +- +- /** +- * Like mkdir -p, find or create the group by path, under m_exposedGroup +- * @param groupPath +- * @return created or found group +- */ +- Group* findCreateGroupByPath(const QString& groupPath); +- +- private: +- QPointer m_backend; +- QString m_backendPath; +- QPointer m_exposedGroup; +- +- QSet m_aliases; +- QList m_items; +- QMap m_entryToItem; +- +- bool m_registered; +- }; +- +-} // namespace FdoSecrets +- +-#endif // KEEPASSXC_FDOSECRETS_COLLECTION_H +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/DBusObject.cpp keepassxc-2.6.4-patched/src/fdosecrets/objects/DBusObject.cpp +--- keepassxc-2.6.4-orig/src/fdosecrets/objects/DBusObject.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/objects/DBusObject.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,64 +0,0 @@ +-/* +- * Copyright (C) 2018 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "DBusObject.h" +- +-#include +-#include +-#include +-#include +-#include +-#include +- +-#include +- +-namespace FdoSecrets +-{ +- +- DBusObject::DBusObject(DBusObject* parent) +- : QObject(parent) +- { +- } +- +- void DBusObject::registerWithPath(const QString& path, QDBusAbstractAdaptor* adaptor) +- { +- m_objectPath.setPath(path); +- m_dbusAdaptor = adaptor; +- adaptor->setParent(this); +- auto ok = QDBusConnection::sessionBus().registerObject(m_objectPath.path(), this); +- Q_UNUSED(ok); +- Q_ASSERT(ok); +- } +- +- QString DBusObject::callingPeerName() const +- { +- auto pid = callingPeerPid(); +- QFile proc(QStringLiteral("/proc/%1/comm").arg(pid)); +- if (!proc.open(QFile::ReadOnly)) { +- return callingPeer(); +- } +- QTextStream stream(&proc); +- return stream.readAll().trimmed(); +- } +- +- QString encodePath(const QString& value) +- { +- // force "-.~_" to be encoded +- return QUrl::toPercentEncoding(value, "", "-.~_").replace('%', '_'); +- } +- +-} // namespace FdoSecrets +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/DBusObject.h keepassxc-2.6.4-patched/src/fdosecrets/objects/DBusObject.h +--- keepassxc-2.6.4-orig/src/fdosecrets/objects/DBusObject.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/objects/DBusObject.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,178 +0,0 @@ +-/* +- * Copyright (C) 2018 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_FDOSECRETS_DBUSOBJECT_H +-#define KEEPASSXC_FDOSECRETS_DBUSOBJECT_H +- +-#include "fdosecrets/objects/DBusReturn.h" +-#include "fdosecrets/objects/DBusTypes.h" +- +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-class QDBusAbstractAdaptor; +- +-namespace FdoSecrets +-{ +- class Service; +- +- /** +- * @brief A common base class for all dbus-exposed objects +- */ +- class DBusObject : public QObject, public QDBusContext +- { +- Q_OBJECT +- public: +- explicit DBusObject(DBusObject* parent = nullptr); +- +- const QDBusObjectPath& objectPath() const +- { +- return m_objectPath; +- } +- +- QDBusAbstractAdaptor& dbusAdaptor() const +- { +- return *m_dbusAdaptor; +- } +- +- protected: +- void registerWithPath(const QString& path, QDBusAbstractAdaptor* adaptor); +- +- void unregisterCurrentPath() +- { +- QDBusConnection::sessionBus().unregisterObject(m_objectPath.path()); +- m_dbusAdaptor = nullptr; +- m_objectPath.setPath(QStringLiteral("/")); +- } +- +- QString callingPeer() const +- { +- Q_ASSERT(calledFromDBus()); +- return message().service(); +- } +- +- uint callingPeerPid() const +- { +- return connection().interface()->servicePid(callingPeer()); +- } +- +- QString callingPeerName() const; +- +- DBusObject* p() const +- { +- return qobject_cast(parent()); +- } +- +- private: +- /** +- * Derived class should not directly use sendErrorReply. +- * Instead, use raiseError +- */ +- using QDBusContext::sendErrorReply; +- +- template friend class DBusReturn; +- +- private: +- QDBusAbstractAdaptor* m_dbusAdaptor; +- QDBusObjectPath m_objectPath; +- }; +- +- /** +- * Return the object path of the pointed DBusObject, or "/" if the pointer is null +- * @tparam T +- * @param object +- * @return +- */ +- template QDBusObjectPath objectPathSafe(T* object) +- { +- if (object) { +- return object->objectPath(); +- } +- return QDBusObjectPath(QStringLiteral("/")); +- } +- +- /** +- * Convert a list of DBusObjects to object path +- * @tparam T +- * @param objects +- * @return +- */ +- template QList objectsToPath(QList objects) +- { +- QList res; +- res.reserve(objects.size()); +- for (auto object : objects) { +- res.append(objectPathSafe(object)); +- } +- return res; +- } +- +- /** +- * Convert an object path to a pointer of the object +- * @tparam T +- * @param path +- * @return the pointer of the object, or nullptr if path is "/" +- */ +- template T* pathToObject(const QDBusObjectPath& path) +- { +- if (path.path() == QStringLiteral("/")) { +- return nullptr; +- } +- return qobject_cast(QDBusConnection::sessionBus().objectRegisteredAt(path.path())); +- } +- +- /** +- * Convert a list of object paths to a list of objects. +- * "/" paths (i.e. nullptrs) will be skipped in the resulting list +- * @tparam T +- * @param paths +- * @return +- */ +- template QList pathsToObject(const QList& paths) +- { +- QList res; +- res.reserve(paths.size()); +- for (const auto& path : paths) { +- auto object = pathToObject(path); +- if (object) { +- res.append(object); +- } +- } +- return res; +- } +- +- /** +- * Encode the string value to a DBus object path safe representation, +- * using a schema similar to URI encoding, but with percentage(%) replaced with +- * underscore(_). All characters except [A-Za-z0-9] are encoded. For non-ascii +- * characters, UTF-8 encoding is first applied and each of the resulting byte +- * value is encoded. +- * @param value +- * @return encoded string +- */ +- QString encodePath(const QString& value); +- +-} // namespace FdoSecrets +- +-#endif // KEEPASSXC_FDOSECRETS_DBUSOBJECT_H +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/DBusReturn.cpp keepassxc-2.6.4-patched/src/fdosecrets/objects/DBusReturn.cpp +--- keepassxc-2.6.4-orig/src/fdosecrets/objects/DBusReturn.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/objects/DBusReturn.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,18 +0,0 @@ +-/* +- * Copyright (C) 2019 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "DBusReturn.h" +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/DBusReturn.h keepassxc-2.6.4-patched/src/fdosecrets/objects/DBusReturn.h +--- keepassxc-2.6.4-orig/src/fdosecrets/objects/DBusReturn.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/objects/DBusReturn.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,258 +0,0 @@ +-/* +- * Copyright (C) 2019 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_FDOSECRETS_DBUSRETURN_H +-#define KEEPASSXC_FDOSECRETS_DBUSRETURN_H +- +-#include +-#include +-#include +- +-#include +- +-namespace FdoSecrets +-{ +- +- namespace details +- { +- class DBusReturnImpl +- { +- public: +- /** +- * Check if this object contains an error +- * @return true if it contains an error, false otherwise. +- */ +- bool isError() const +- { +- return !m_errorName.isEmpty(); +- } +- +- /** +- * Get the error name +- * @return +- */ +- QString errorName() const +- { +- return m_errorName; +- } +- +- void okOrDie() const +- { +- Q_ASSERT(!isError()); +- } +- +- protected: +- struct WithErrorTag +- { +- }; +- +- /** +- * Construct from an error +- * @param errorName +- * @param value +- */ +- DBusReturnImpl(QString errorName, WithErrorTag) +- : m_errorName(std::move(errorName)) +- { +- } +- +- DBusReturnImpl() = default; +- +- protected: +- QString m_errorName; +- }; +- } // namespace details +- +- /** +- * Either a return value or a DBus error +- * @tparam T +- */ +- template class DBusReturn : public details::DBusReturnImpl +- { +- protected: +- using DBusReturnImpl::DBusReturnImpl; +- +- public: +- using value_type = T; +- +- DBusReturn() = default; +- +- /** +- * Implicitly construct from a value +- * @param value +- */ +- DBusReturn(T&& value) // NOLINT(google-explicit-constructor) +- : m_value(std::move(value)) +- { +- } +- +- DBusReturn(const T& value) // NOLINT(google-explicit-constructor) +- : m_value(std::move(value)) +- { +- } +- +- /** +- * Implicitly convert from another error of different value type. +- * +- * @tparam U must not be the same as T +- * @param other +- */ +- template ::value>::type> +- DBusReturn(const DBusReturn& other) // NOLINT(google-explicit-constructor) +- : DBusReturn(other.errorName(), DBusReturnImpl::WithErrorTag{}) +- { +- Q_ASSERT(other.isError()); +- } +- +- /** +- * Construct from error +- * @param errorType +- * @return a DBusReturn object containing the error +- */ +- static DBusReturn Error(QDBusError::ErrorType errorType) +- { +- return DBusReturn{QDBusError::errorString(errorType), DBusReturnImpl::WithErrorTag{}}; +- } +- +- /** +- * Overloaded version +- * @param errorName +- * @return a DBusReturnImpl object containing the error +- */ +- static DBusReturn Error(QString errorName) +- { +- return DBusReturn{std::move(errorName), DBusReturnImpl::WithErrorTag{}}; +- } +- +- /** +- * Get a reference to the enclosed value +- * @return +- */ +- const T& value() const& +- { +- okOrDie(); +- return m_value; +- } +- +- /** +- * Get a rvalue reference to the enclosed value if this object is rvalue +- * @return a rvalue reference to the enclosed value +- */ +- T value() && +- { +- okOrDie(); +- return std::move(m_value); +- } +- +- /** +- * Get value or handle the error by the passed in dbus object +- * @tparam P +- * @param p +- * @return +- */ +- template T valueOrHandle(P* p) const& +- { +- if (isError()) { +- if (p->calledFromDBus()) { +- p->sendErrorReply(errorName()); +- } +- return {}; +- } +- return m_value; +- } +- +- /** +- * Get value or handle the error by the passed in dbus object +- * @tparam P +- * @param p +- * @return +- */ +- template T&& valueOrHandle(P* p) && +- { +- if (isError()) { +- if (p->calledFromDBus()) { +- p->sendErrorReply(errorName()); +- } +- } +- return std::move(m_value); +- } +- +- private: +- T m_value{}; +- }; +- +- template <> class DBusReturn : public details::DBusReturnImpl +- { +- protected: +- using DBusReturnImpl::DBusReturnImpl; +- +- public: +- using value_type = void; +- +- DBusReturn() = default; +- +- /** +- * Implicitly convert from another error of different value type. +- * +- * @tparam U must not be the same as T +- * @param other +- */ +- template ::value>::type> +- DBusReturn(const DBusReturn& other) // NOLINT(google-explicit-constructor) +- : DBusReturn(other.errorName(), DBusReturnImpl::WithErrorTag{}) +- { +- Q_ASSERT(other.isError()); +- } +- +- /** +- * Construct from error +- * @param errorType +- * @return a DBusReturn object containing the error +- */ +- static DBusReturn Error(QDBusError::ErrorType errorType) +- { +- return DBusReturn{QDBusError::errorString(errorType), DBusReturnImpl::WithErrorTag{}}; +- } +- +- /** +- * Overloaded version +- * @param errorName +- * @return a DBusReturnImpl object containing the error +- */ +- static DBusReturn Error(QString errorName) +- { +- return DBusReturn{std::move(errorName), DBusReturnImpl::WithErrorTag{}}; +- } +- +- /** +- * If this is return contains an error, handle it if we were called from DBus +- * @tparam P +- * @param p +- */ +- template void handle(P* p) const +- { +- if (isError()) { +- if (p->calledFromDBus()) { +- p->sendErrorReply(errorName()); +- } +- } +- } +- }; +- +-} // namespace FdoSecrets +- +-#endif // KEEPASSXC_FDOSECRETS_DBUSRETURN_H +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/DBusTypes.cpp keepassxc-2.6.4-patched/src/fdosecrets/objects/DBusTypes.cpp +--- keepassxc-2.6.4-orig/src/fdosecrets/objects/DBusTypes.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/objects/DBusTypes.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,53 +0,0 @@ +-/* +- * Copyright (C) 2019 Aetf +- * Copyright 2010, Michael Leupold +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "DBusTypes.h" +- +-#include +- +-namespace FdoSecrets +-{ +- +- void registerDBusTypes() +- { +- // register meta-types needed for this adaptor +- qRegisterMetaType(); +- qDBusRegisterMetaType(); +- +- qRegisterMetaType(); +- qDBusRegisterMetaType(); +- +- qRegisterMetaType(); +- qDBusRegisterMetaType(); +- +- QMetaType::registerConverter([](const QDBusArgument& arg) { +- if (arg.currentSignature() != "a{ss}") { +- return StringStringMap{}; +- } +- // QDBusArgument is COW and qdbus_cast modifies it by detaching even it is const. +- // we don't want to modify the instance (arg) stored in the qvariant so we create a copy +- const auto copy = arg; // NOLINT(performance-unnecessary-copy-initialization) +- return qdbus_cast(copy); +- }); +- +- // NOTE: this is already registered by Qt in qtextratypes.h +- // qRegisterMetaType >(); +- // qDBusRegisterMetaType >(); +- } +- +-} // namespace FdoSecrets +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/DBusTypes.h keepassxc-2.6.4-patched/src/fdosecrets/objects/DBusTypes.h +--- keepassxc-2.6.4-orig/src/fdosecrets/objects/DBusTypes.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/objects/DBusTypes.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,91 +0,0 @@ +-/* +- * Copyright (C) 2019 Aetf +- * Copyright 2010, Michael Leupold +- * Copyright 2010-2011, Valentin Rusu +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_FDOSECRETS_DBUSTYPES_H +-#define KEEPASSXC_FDOSECRETS_DBUSTYPES_H +- +-#include +-#include +-#include +-#include +- +-#define DBUS_SERVICE_SECRET "org.freedesktop.secrets" +- +-#define DBUS_INTERFACE_SECRET_SERVICE "org.freedesktop.Secret.Service" +-#define DBUS_INTERFACE_SECRET_SESSION "org.freedesktop.Secret.Session" +-#define DBUS_INTERFACE_SECRET_COLLECTION "org.freedesktop.Secret.Collection" +-#define DBUS_INTERFACE_SECRET_ITEM "org.freedesktop.Secret.Item" +-#define DBUS_INTERFACE_SECRET_PROMPT "org.freedesktop.Secret.Prompt" +- +-#define DBUS_ERROR_SECRET_NO_SESSION "org.freedesktop.Secret.Error.NoSession" +-#define DBUS_ERROR_SECRET_NO_SUCH_OBJECT "org.freedesktop.Secret.Error.NoSuchObject" +-#define DBUS_ERROR_SECRET_IS_LOCKED "org.freedesktop.Secret.Error.IsLocked" +- +-#define DBUS_PATH_SECRETS "/org/freedesktop/secrets" +- +-#define DBUS_PATH_TEMPLATE_ALIAS "%1/aliases/%2" +-#define DBUS_PATH_TEMPLATE_SESSION "%1/session/%2" +-#define DBUS_PATH_TEMPLATE_COLLECTION "%1/collection/%2" +-#define DBUS_PATH_TEMPLATE_ITEM "%1/%2" +- +-namespace FdoSecrets +-{ +- /** +- * This is the basic Secret structure exchanged via the dbus API +- * See the spec for more details +- */ +- struct SecretStruct +- { +- QDBusObjectPath session{}; +- QByteArray parameters{}; +- QByteArray value{}; +- QString contentType{}; +- }; +- +- inline QDBusArgument& operator<<(QDBusArgument& argument, const SecretStruct& secret) +- { +- argument.beginStructure(); +- argument << secret.session << secret.parameters << secret.value << secret.contentType; +- argument.endStructure(); +- return argument; +- } +- +- inline const QDBusArgument& operator>>(const QDBusArgument& argument, SecretStruct& secret) +- { +- argument.beginStructure(); +- argument >> secret.session >> secret.parameters >> secret.value >> secret.contentType; +- argument.endStructure(); +- return argument; +- } +- +- /** +- * Register the types needed for the fd.o Secrets D-Bus interface. +- */ +- void registerDBusTypes(); +- +-} // namespace FdoSecrets +- +-typedef QMap StringStringMap; +-typedef QMap ObjectPathSecretMap; +- +-Q_DECLARE_METATYPE(FdoSecrets::SecretStruct) +-Q_DECLARE_METATYPE(StringStringMap); +-Q_DECLARE_METATYPE(ObjectPathSecretMap); +- +-#endif // KEEPASSXC_FDOSECRETS_DBUSTYPES_H +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/Item.cpp keepassxc-2.6.4-patched/src/fdosecrets/objects/Item.cpp +--- keepassxc-2.6.4-orig/src/fdosecrets/objects/Item.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/objects/Item.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,420 +0,0 @@ +-/* +- * Copyright (C) 2019 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "Item.h" +- +-#include "fdosecrets/FdoSecretsPlugin.h" +-#include "fdosecrets/objects/Collection.h" +-#include "fdosecrets/objects/Prompt.h" +-#include "fdosecrets/objects/Service.h" +-#include "fdosecrets/objects/Session.h" +- +-#include "core/Entry.h" +-#include "core/EntryAttributes.h" +-#include "core/Group.h" +-#include "core/Metadata.h" +-#include "core/Tools.h" +- +-#include +-#include +-#include +-#include +- +-namespace FdoSecrets +-{ +- +- const QSet Item::ReadOnlyAttributes(QSet() << ItemAttributes::UuidKey << ItemAttributes::PathKey); +- +- static void setEntrySecret(Entry* entry, const QByteArray& data, const QString& contentType); +- static SecretStruct getEntrySecret(Entry* entry); +- +- namespace +- { +- constexpr auto FDO_SECRETS_DATA = "FDO_SECRETS_DATA"; +- constexpr auto FDO_SECRETS_CONTENT_TYPE = "FDO_SECRETS_CONTENT_TYPE"; +- } // namespace +- +- Item::Item(Collection* parent, Entry* backend) +- : DBusObject(parent) +- , m_backend(backend) +- { +- Q_ASSERT(!p()->objectPath().path().isEmpty()); +- +- registerWithPath(QStringLiteral(DBUS_PATH_TEMPLATE_ITEM).arg(p()->objectPath().path(), m_backend->uuidToHex()), +- new ItemAdaptor(this)); +- +- connect(m_backend.data(), &Entry::entryModified, this, &Item::itemChanged); +- } +- +- DBusReturn Item::locked() const +- { +- auto ret = ensureBackend(); +- if (ret.isError()) { +- return ret; +- } +- return collection()->locked(); +- } +- +- DBusReturn Item::attributes() const +- { +- auto ret = ensureBackend(); +- if (ret.isError()) { +- return ret; +- } +- ret = ensureUnlocked(); +- if (ret.isError()) { +- return ret; +- } +- +- StringStringMap attrs; +- +- // add default attributes except password +- auto entryAttrs = m_backend->attributes(); +- for (const auto& attr : EntryAttributes::DefaultAttributes) { +- if (entryAttrs->isProtected(attr) || attr == EntryAttributes::PasswordKey) { +- continue; +- } +- +- auto value = entryAttrs->value(attr); +- if (entryAttrs->isReference(attr)) { +- value = m_backend->maskPasswordPlaceholders(value); +- value = m_backend->resolveMultiplePlaceholders(value); +- } +- attrs[attr] = value; +- } +- +- // add custom attributes +- const auto customKeys = entryAttrs->customKeys(); +- for (const auto& attr : customKeys) { +- attrs[attr] = entryAttrs->value(attr); +- } +- +- // add some informative and readonly attributes +- attrs[ItemAttributes::UuidKey] = m_backend->uuidToHex(); +- attrs[ItemAttributes::PathKey] = path(); +- return attrs; +- } +- +- DBusReturn Item::setAttributes(const StringStringMap& attrs) +- { +- auto ret = ensureBackend(); +- if (ret.isError()) { +- return ret; +- } +- ret = ensureUnlocked(); +- if (ret.isError()) { +- return ret; +- } +- +- m_backend->beginUpdate(); +- +- auto entryAttrs = m_backend->attributes(); +- for (auto it = attrs.constBegin(); it != attrs.constEnd(); ++it) { +- if (entryAttrs->isProtected(it.key()) || it.key() == EntryAttributes::PasswordKey) { +- continue; +- } +- +- if (ReadOnlyAttributes.contains(it.key())) { +- continue; +- } +- +- entryAttrs->set(it.key(), it.value()); +- } +- +- m_backend->endUpdate(); +- +- return {}; +- } +- +- DBusReturn Item::label() const +- { +- auto ret = ensureBackend(); +- if (ret.isError()) { +- return ret; +- } +- ret = ensureUnlocked(); +- if (ret.isError()) { +- return ret; +- } +- +- return m_backend->title(); +- } +- +- DBusReturn Item::setLabel(const QString& label) +- { +- auto ret = ensureBackend(); +- if (ret.isError()) { +- return ret; +- } +- ret = ensureUnlocked(); +- if (ret.isError()) { +- return ret; +- } +- +- m_backend->beginUpdate(); +- m_backend->setTitle(label); +- m_backend->endUpdate(); +- +- return {}; +- } +- +- DBusReturn Item::created() const +- { +- auto ret = ensureBackend(); +- if (ret.isError()) { +- return ret; +- } +- ret = ensureUnlocked(); +- if (ret.isError()) { +- return ret; +- } +- +- return static_cast(m_backend->timeInfo().creationTime().toMSecsSinceEpoch() / 1000); +- } +- +- DBusReturn Item::modified() const +- { +- auto ret = ensureBackend(); +- if (ret.isError()) { +- return ret; +- } +- ret = ensureUnlocked(); +- if (ret.isError()) { +- return ret; +- } +- +- return static_cast(m_backend->timeInfo().lastModificationTime().toMSecsSinceEpoch() / 1000); +- } +- +- DBusReturn Item::deleteItem() +- { +- auto ret = ensureBackend(); +- if (ret.isError()) { +- return ret; +- } +- auto prompt = new DeleteItemPrompt(service(), this); +- return prompt; +- } +- +- DBusReturn Item::getSecret(Session* session) +- { +- auto ret = ensureBackend(); +- if (ret.isError()) { +- return ret; +- } +- ret = ensureUnlocked(); +- if (ret.isError()) { +- return ret; +- } +- +- if (!session) { +- return DBusReturn<>::Error(QStringLiteral(DBUS_ERROR_SECRET_NO_SESSION)); +- } +- +- auto secret = getEntrySecret(m_backend); +- +- // encode using session +- secret = session->encode(secret); +- +- // show notification is this was directly called from DBus +- if (calledFromDBus()) { +- service()->plugin()->emitRequestShowNotification( +- tr(R"(Entry "%1" from database "%2" was used by %3)") +- .arg(m_backend->title(), collection()->name(), callingPeerName())); +- } +- return secret; +- } +- +- DBusReturn Item::setSecret(const SecretStruct& secret) +- { +- auto ret = ensureBackend(); +- if (ret.isError()) { +- return ret; +- } +- ret = ensureUnlocked(); +- if (ret.isError()) { +- return ret; +- } +- +- auto session = pathToObject(secret.session); +- if (!session) { +- return DBusReturn<>::Error(QStringLiteral(DBUS_ERROR_SECRET_NO_SESSION)); +- } +- +- // decode using session +- auto decoded = session->decode(secret); +- +- // set in backend +- m_backend->beginUpdate(); +- setEntrySecret(m_backend, decoded.value, decoded.contentType); +- m_backend->endUpdate(); +- +- return {}; +- } +- +- DBusReturn Item::setProperties(const QVariantMap& properties) +- { +- auto label = properties.value(QStringLiteral(DBUS_INTERFACE_SECRET_ITEM ".Label")).toString(); +- +- auto ret = setLabel(label); +- if (ret.isError()) { +- return ret; +- } +- +- auto attributes = +- properties.value(QStringLiteral(DBUS_INTERFACE_SECRET_ITEM ".Attributes")).value(); +- ret = setAttributes(attributes); +- if (ret.isError()) { +- return ret; +- } +- +- return {}; +- } +- +- Collection* Item::collection() const +- { +- return qobject_cast(p()); +- } +- +- DBusReturn Item::ensureBackend() const +- { +- if (!m_backend) { +- return DBusReturn<>::Error(QStringLiteral(DBUS_ERROR_SECRET_NO_SUCH_OBJECT)); +- } +- return {}; +- } +- +- DBusReturn Item::ensureUnlocked() const +- { +- auto locked = collection()->locked(); +- if (locked.isError()) { +- return locked; +- } +- if (locked.value()) { +- return DBusReturn<>::Error(QStringLiteral(DBUS_ERROR_SECRET_IS_LOCKED)); +- } +- return {}; +- } +- +- Entry* Item::backend() const +- { +- return m_backend; +- } +- +- void Item::doDelete() +- { +- emit itemAboutToDelete(); +- +- // Unregister current path early, do not rely on deleteLater's call to destructor +- // as in case of Entry moving between groups, new Item will be created at the same DBus path +- // before the current Item is deleted in the event loop. +- unregisterCurrentPath(); +- +- m_backend = nullptr; +- deleteLater(); +- } +- +- Service* Item::service() const +- { +- return collection()->service(); +- } +- +- QString Item::path() const +- { +- QStringList pathComponents{m_backend->title()}; +- +- Group* group = m_backend->group(); +- while (group && group != collection()->exposedRootGroup()) { +- pathComponents.prepend(group->name()); +- group = group->parentGroup(); +- } +- // we should always reach the exposed root group +- Q_ASSERT(group); +- +- // root group is represented by a single slash, thus adding an empty component. +- pathComponents.prepend(QLatin1Literal("")); +- +- return pathComponents.join('/'); +- } +- +- bool Item::isDeletePermanent() const +- { +- auto recycleBin = backend()->database()->metadata()->recycleBin(); +- return (recycleBin && recycleBin->findEntryByUuid(backend()->uuid())) +- || !backend()->database()->metadata()->recycleBinEnabled(); +- } +- +- void setEntrySecret(Entry* entry, const QByteArray& data, const QString& contentType) +- { +- auto mimeName = contentType.split(';').takeFirst().trimmed(); +- +- // find the mime type +- QMimeDatabase db; +- auto mimeType = db.mimeTypeForName(mimeName); +- +- // find a suitable codec +- QTextCodec* codec = nullptr; +- static const QRegularExpression charsetPattern(QStringLiteral(R"re(charset=(?.+)$)re")); +- auto match = charsetPattern.match(contentType); +- if (match.hasMatch()) { +- codec = QTextCodec::codecForName(match.captured(QStringLiteral("encode")).toLatin1()); +- } else { +- codec = QTextCodec::codecForName(QByteArrayLiteral("utf-8")); +- } +- +- if (!mimeType.isValid() || !mimeType.inherits(QStringLiteral("text/plain")) || !codec) { +- // we can't handle this content type, save the data as attachment, and clear the password field +- entry->setPassword(""); +- entry->attachments()->set(FDO_SECRETS_DATA, data); +- entry->attributes()->set(FDO_SECRETS_CONTENT_TYPE, contentType); +- return; +- } +- +- // save the data to password field +- if (entry->attachments()->hasKey(FDO_SECRETS_DATA)) { +- entry->attachments()->remove(FDO_SECRETS_DATA); +- } +- if (entry->attributes()->hasKey(FDO_SECRETS_CONTENT_TYPE)) { +- entry->attributes()->remove(FDO_SECRETS_CONTENT_TYPE); +- } +- +- Q_ASSERT(codec); +- entry->setPassword(codec->toUnicode(data)); +- } +- +- SecretStruct getEntrySecret(Entry* entry) +- { +- SecretStruct ss; +- +- if (entry->attachments()->hasKey(FDO_SECRETS_DATA)) { +- ss.value = entry->attachments()->value(FDO_SECRETS_DATA); +- if (entry->attributes()->hasKey(FDO_SECRETS_CONTENT_TYPE)) { +- ss.contentType = entry->attributes()->value(FDO_SECRETS_CONTENT_TYPE); +- } else { +- // the entry is somehow corrupted, maybe the user deleted it. +- // set to binary and hope for the best... +- ss.contentType = QStringLiteral("application/octet-stream"); +- } +- return ss; +- } +- +- ss.value = entry->resolveMultiplePlaceholders(entry->password()).toUtf8(); +- ss.contentType = QStringLiteral("text/plain"); +- return ss; +- } +- +-} // namespace FdoSecrets +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/Item.h keepassxc-2.6.4-patched/src/fdosecrets/objects/Item.h +--- keepassxc-2.6.4-orig/src/fdosecrets/objects/Item.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/objects/Item.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,112 +0,0 @@ +-/* +- * Copyright (C) 2019 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_FDOSECRETS_ITEM_H +-#define KEEPASSXC_FDOSECRETS_ITEM_H +- +-#include "fdosecrets/objects/DBusObject.h" +-#include "fdosecrets/objects/adaptors/ItemAdaptor.h" +- +-#include +- +-class Entry; +- +-namespace FdoSecrets +-{ +- +- namespace ItemAttributes +- { +- constexpr const auto UuidKey = "Uuid"; +- constexpr const auto PathKey = "Path"; +- } // namespace ItemAttributes +- +- class Session; +- class Collection; +- class PromptBase; +- +- class Item : public DBusObject +- { +- Q_OBJECT +- public: +- explicit Item(Collection* parent, Entry* backend); +- +- DBusReturn locked() const; +- +- DBusReturn attributes() const; +- DBusReturn setAttributes(const StringStringMap& attrs); +- +- DBusReturn label() const; +- DBusReturn setLabel(const QString& label); +- +- DBusReturn created() const; +- +- DBusReturn modified() const; +- +- DBusReturn deleteItem(); +- DBusReturn getSecret(Session* session); +- DBusReturn setSecret(const SecretStruct& secret); +- +- signals: +- void itemChanged(); +- void itemAboutToDelete(); +- +- public: +- static const QSet ReadOnlyAttributes; +- +- DBusReturn setProperties(const QVariantMap& properties); +- +- Entry* backend() const; +- Collection* collection() const; +- Service* service() const; +- +- /** +- * Compute the entry path relative to the exposed group +- * @return the entry path +- */ +- QString path() const; +- +- /** +- * If the containing db does not have recycle bin enabled, +- * or the entry is already in the recycle bin (not possible for item, though), +- * the delete is permanent +- * @return true if delete is permanent +- */ +- bool isDeletePermanent() const; +- +- public slots: +- void doDelete(); +- +- private: +- /** +- * Check if the backend is a valid object, send error reply if not. +- * @return No error if the backend is valid. +- */ +- DBusReturn ensureBackend() const; +- +- /** +- * Ensure the database is unlocked, send error reply if locked. +- * @return true if the database is locked +- */ +- DBusReturn ensureUnlocked() const; +- +- private: +- QPointer m_backend; +- }; +- +-} // namespace FdoSecrets +- +-#endif // KEEPASSXC_FDOSECRETS_ITEM_H +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/Prompt.cpp keepassxc-2.6.4-patched/src/fdosecrets/objects/Prompt.cpp +--- keepassxc-2.6.4-orig/src/fdosecrets/objects/Prompt.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/objects/Prompt.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,286 +0,0 @@ +-/* +- * Copyright (C) 2019 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "Prompt.h" +- +-#include "fdosecrets/FdoSecretsSettings.h" +-#include "fdosecrets/objects/Collection.h" +-#include "fdosecrets/objects/Item.h" +-#include "fdosecrets/objects/Service.h" +- +-#include "core/Tools.h" +-#include "gui/DatabaseWidget.h" +-#include "gui/MessageBox.h" +- +-#include +-#include +- +-namespace FdoSecrets +-{ +- +- PromptBase::PromptBase(Service* parent) +- : DBusObject(parent) +- { +- registerWithPath( +- QStringLiteral("%1/prompt/%2").arg(p()->objectPath().path(), Tools::uuidToHex(QUuid::createUuid())), +- new PromptAdaptor(this)); +- +- connect(this, &PromptBase::completed, this, &PromptBase::deleteLater); +- } +- +- QWindow* PromptBase::findWindow(const QString& windowId) +- { +- // find parent window, or nullptr if not found +- bool ok = false; +- WId wid = windowId.toULongLong(&ok, 0); +- QWindow* parent = nullptr; +- if (ok) { +- parent = QWindow::fromWinId(wid); +- } +- if (parent) { +- // parent is not the child of any object, so make sure it gets deleted at some point +- QObject::connect(this, &QObject::destroyed, parent, &QObject::deleteLater); +- } +- return parent; +- } +- +- Service* PromptBase::service() const +- { +- return qobject_cast(parent()); +- } +- +- DBusReturn PromptBase::dismiss() +- { +- emit completed(true, ""); +- return {}; +- } +- +- DeleteCollectionPrompt::DeleteCollectionPrompt(Service* parent, Collection* coll) +- : PromptBase(parent) +- , m_collection(coll) +- { +- } +- +- DBusReturn DeleteCollectionPrompt::prompt(const QString& windowId) +- { +- if (thread() != QThread::currentThread()) { +- DBusReturn ret; +- QMetaObject::invokeMethod(this, +- "prompt", +- Qt::BlockingQueuedConnection, +- Q_ARG(QString, windowId), +- Q_RETURN_ARG(DBusReturn, ret)); +- return ret; +- } +- +- if (!m_collection) { +- return DBusReturn<>::Error(QStringLiteral(DBUS_ERROR_SECRET_NO_SUCH_OBJECT)); +- } +- +- MessageBox::OverrideParent override(findWindow(windowId)); +- // only need to delete in backend, collection will react itself. +- auto accepted = service()->doCloseDatabase(m_collection->backend()); +- +- emit completed(!accepted, ""); +- +- return {}; +- } +- +- CreateCollectionPrompt::CreateCollectionPrompt(Service* parent) +- : PromptBase(parent) +- { +- } +- +- DBusReturn CreateCollectionPrompt::prompt(const QString& windowId) +- { +- if (thread() != QThread::currentThread()) { +- DBusReturn ret; +- QMetaObject::invokeMethod(this, +- "prompt", +- Qt::BlockingQueuedConnection, +- Q_ARG(QString, windowId), +- Q_RETURN_ARG(DBusReturn, ret)); +- return ret; +- } +- +- MessageBox::OverrideParent override(findWindow(windowId)); +- +- auto coll = service()->doNewDatabase(); +- if (!coll) { +- return dismiss(); +- } +- +- emit collectionCreated(coll); +- emit completed(false, QVariant::fromValue(coll->objectPath())); +- +- return {}; +- } +- +- DBusReturn CreateCollectionPrompt::dismiss() +- { +- emit completed(true, QVariant::fromValue(QDBusObjectPath{"/"})); +- return {}; +- } +- +- LockCollectionsPrompt::LockCollectionsPrompt(Service* parent, const QList& colls) +- : PromptBase(parent) +- { +- m_collections.reserve(colls.size()); +- for (const auto& c : asConst(colls)) { +- m_collections << c; +- } +- } +- +- DBusReturn LockCollectionsPrompt::prompt(const QString& windowId) +- { +- if (thread() != QThread::currentThread()) { +- DBusReturn ret; +- QMetaObject::invokeMethod(this, +- "prompt", +- Qt::BlockingQueuedConnection, +- Q_ARG(QString, windowId), +- Q_RETURN_ARG(DBusReturn, ret)); +- return ret; +- } +- +- MessageBox::OverrideParent override(findWindow(windowId)); +- +- for (const auto& c : asConst(m_collections)) { +- if (c) { +- if (!c->doLock()) { +- return dismiss(); +- } +- m_locked << c->objectPath(); +- } +- } +- +- emit completed(false, QVariant::fromValue(m_locked)); +- +- return {}; +- } +- +- DBusReturn LockCollectionsPrompt::dismiss() +- { +- emit completed(true, QVariant::fromValue(m_locked)); +- return {}; +- } +- +- UnlockCollectionsPrompt::UnlockCollectionsPrompt(Service* parent, const QList& colls) +- : PromptBase(parent) +- { +- m_collections.reserve(colls.size()); +- for (const auto& c : asConst(colls)) { +- m_collections << c; +- } +- } +- +- DBusReturn UnlockCollectionsPrompt::prompt(const QString& windowId) +- { +- if (thread() != QThread::currentThread()) { +- DBusReturn ret; +- QMetaObject::invokeMethod(this, +- "prompt", +- Qt::BlockingQueuedConnection, +- Q_ARG(QString, windowId), +- Q_RETURN_ARG(DBusReturn, ret)); +- return ret; +- } +- +- MessageBox::OverrideParent override(findWindow(windowId)); +- +- for (const auto& c : asConst(m_collections)) { +- if (c) { +- // doUnlock is nonblocking +- connect(c, &Collection::doneUnlockCollection, this, &UnlockCollectionsPrompt::collectionUnlockFinished); +- c->doUnlock(); +- } +- } +- +- return {}; +- } +- +- void UnlockCollectionsPrompt::collectionUnlockFinished(bool accepted) +- { +- auto coll = qobject_cast(sender()); +- if (!coll) { +- return; +- } +- +- if (!m_collections.contains(coll)) { +- // should not happen +- coll->disconnect(this); +- return; +- } +- +- // one shot +- coll->disconnect(this); +- +- if (accepted) { +- m_unlocked << coll->objectPath(); +- } else { +- m_numRejected += 1; +- } +- +- // if we've get all +- if (m_numRejected + m_unlocked.size() == m_collections.size()) { +- emit completed(m_unlocked.isEmpty(), QVariant::fromValue(m_unlocked)); +- } +- } +- DBusReturn UnlockCollectionsPrompt::dismiss() +- { +- emit completed(true, QVariant::fromValue(m_unlocked)); +- return {}; +- } +- +- DeleteItemPrompt::DeleteItemPrompt(Service* parent, Item* item) +- : PromptBase(parent) +- , m_item(item) +- { +- } +- +- DBusReturn DeleteItemPrompt::prompt(const QString& windowId) +- { +- if (thread() != QThread::currentThread()) { +- DBusReturn ret; +- QMetaObject::invokeMethod(this, +- "prompt", +- Qt::BlockingQueuedConnection, +- Q_ARG(QString, windowId), +- Q_RETURN_ARG(DBusReturn, ret)); +- return ret; +- } +- +- MessageBox::OverrideParent override(findWindow(windowId)); +- +- // delete item's backend. Item will be notified after the backend is deleted. +- if (m_item) { +- if (FdoSecrets::settings()->noConfirmDeleteItem()) { +- // based on permanent or not, different button is used +- if (m_item->isDeletePermanent()) { +- MessageBox::setNextAnswer(MessageBox::Delete); +- } else { +- MessageBox::setNextAnswer(MessageBox::Move); +- } +- } +- m_item->collection()->doDeleteEntries({m_item->backend()}); +- } +- +- emit completed(false, ""); +- +- return {}; +- } +-} // namespace FdoSecrets +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/Prompt.h keepassxc-2.6.4-patched/src/fdosecrets/objects/Prompt.h +--- keepassxc-2.6.4-orig/src/fdosecrets/objects/Prompt.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/objects/Prompt.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,130 +0,0 @@ +-/* +- * Copyright (C) 2019 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_FDOSECRETS_PROMPT_H +-#define KEEPASSXC_FDOSECRETS_PROMPT_H +- +-#include "fdosecrets/objects/DBusObject.h" +-#include "fdosecrets/objects/adaptors/PromptAdaptor.h" +- +-#include +- +-class QWindow; +- +-class DatabaseWidget; +- +-namespace FdoSecrets +-{ +- +- class Service; +- +- class PromptBase : public DBusObject +- { +- Q_OBJECT +- public: +- explicit PromptBase(Service* parent); +- +- virtual DBusReturn prompt(const QString& windowId) = 0; +- +- virtual DBusReturn dismiss(); +- +- signals: +- void completed(bool dismissed, const QVariant& result); +- +- protected: +- QWindow* findWindow(const QString& windowId); +- Service* service() const; +- }; +- +- class Collection; +- +- class DeleteCollectionPrompt : public PromptBase +- { +- Q_OBJECT +- +- public: +- explicit DeleteCollectionPrompt(Service* parent, Collection* coll); +- +- DBusReturn prompt(const QString& windowId) override; +- +- private: +- QPointer m_collection; +- }; +- +- class CreateCollectionPrompt : public PromptBase +- { +- Q_OBJECT +- +- public: +- explicit CreateCollectionPrompt(Service* parent); +- +- DBusReturn prompt(const QString& windowId) override; +- DBusReturn dismiss() override; +- +- signals: +- void collectionCreated(Collection* coll); +- }; +- +- class LockCollectionsPrompt : public PromptBase +- { +- Q_OBJECT +- public: +- explicit LockCollectionsPrompt(Service* parent, const QList& colls); +- +- DBusReturn prompt(const QString& windowId) override; +- DBusReturn dismiss() override; +- +- private: +- QList> m_collections; +- QList m_locked; +- }; +- +- class UnlockCollectionsPrompt : public PromptBase +- { +- Q_OBJECT +- public: +- explicit UnlockCollectionsPrompt(Service* parent, const QList& coll); +- +- DBusReturn prompt(const QString& windowId) override; +- DBusReturn dismiss() override; +- +- private slots: +- void collectionUnlockFinished(bool accepted); +- +- private: +- QList> m_collections; +- QList m_unlocked; +- int m_numRejected = 0; +- }; +- +- class Item; +- class DeleteItemPrompt : public PromptBase +- { +- Q_OBJECT +- +- public: +- explicit DeleteItemPrompt(Service* parent, Item* item); +- +- DBusReturn prompt(const QString& windowId) override; +- +- private: +- QPointer m_item; +- }; +- +-} // namespace FdoSecrets +- +-#endif // KEEPASSXC_FDOSECRETS_PROMPT_H +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/Service.cpp keepassxc-2.6.4-patched/src/fdosecrets/objects/Service.cpp +--- keepassxc-2.6.4-orig/src/fdosecrets/objects/Service.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/objects/Service.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,492 +0,0 @@ +-/* +- * Copyright (C) 2018 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "Service.h" +- +-#include "fdosecrets/FdoSecretsPlugin.h" +-#include "fdosecrets/FdoSecretsSettings.h" +-#include "fdosecrets/objects/Collection.h" +-#include "fdosecrets/objects/Item.h" +-#include "fdosecrets/objects/Prompt.h" +-#include "fdosecrets/objects/Session.h" +- +-#include "gui/DatabaseTabWidget.h" +-#include "gui/DatabaseWidget.h" +- +-#include +-#include +-#include +- +-namespace +-{ +- constexpr auto DEFAULT_ALIAS = "default"; +-} +- +-namespace FdoSecrets +-{ +- +- Service::Service(FdoSecretsPlugin* plugin, +- QPointer dbTabs) // clazy: exclude=ctor-missing-parent-argument +- : DBusObject(nullptr) +- , m_plugin(plugin) +- , m_databases(std::move(dbTabs)) +- , m_insdieEnsureDefaultAlias(false) +- , m_serviceWatcher(nullptr) +- { +- connect( +- m_databases, &DatabaseTabWidget::databaseUnlockDialogFinished, this, &Service::doneUnlockDatabaseInDialog); +- } +- +- Service::~Service() +- { +- QDBusConnection::sessionBus().unregisterService(QStringLiteral(DBUS_SERVICE_SECRET)); +- } +- +- bool Service::initialize() +- { +- if (!QDBusConnection::sessionBus().registerService(QStringLiteral(DBUS_SERVICE_SECRET))) { +- emit error(tr("Failed to register DBus service at %1.
").arg(QLatin1String(DBUS_SERVICE_SECRET)) +- + m_plugin->reportExistingService()); +- return false; +- } +- +- registerWithPath(QStringLiteral(DBUS_PATH_SECRETS), new ServiceAdaptor(this)); +- +- // Connect to service unregistered signal +- m_serviceWatcher.reset(new QDBusServiceWatcher()); +- connect(m_serviceWatcher.data(), +- &QDBusServiceWatcher::serviceUnregistered, +- this, +- &Service::dbusServiceUnregistered); +- +- m_serviceWatcher->setConnection(QDBusConnection::sessionBus()); +- +- // Add existing database tabs +- for (int idx = 0; idx != m_databases->count(); ++idx) { +- auto dbWidget = m_databases->databaseWidgetFromIndex(idx); +- onDatabaseTabOpened(dbWidget, false); +- } +- +- // Connect to new database signal +- // No need to connect to close signal, as collection will remove itself when backend delete/close database tab. +- connect(m_databases.data(), &DatabaseTabWidget::databaseOpened, this, [this](DatabaseWidget* dbWidget) { +- onDatabaseTabOpened(dbWidget, true); +- }); +- +- // make default alias track current activated database +- connect(m_databases.data(), &DatabaseTabWidget::activateDatabaseChanged, this, &Service::ensureDefaultAlias); +- +- return true; +- } +- +- void Service::onDatabaseTabOpened(DatabaseWidget* dbWidget, bool emitSignal) +- { +- // The Collection will monitor the database's exposed group. +- // When the Collection finds that no exposed group, it will delete itself. +- // Thus the service also needs to monitor it and recreate the collection if the user changes +- // from no exposed to exposed something. +- if (!dbWidget->isLocked()) { +- monitorDatabaseExposedGroup(dbWidget); +- } +- connect(dbWidget, &DatabaseWidget::databaseUnlocked, this, [this, dbWidget]() { +- monitorDatabaseExposedGroup(dbWidget); +- }); +- +- auto coll = new Collection(this, dbWidget); +- // Creation may fail if the database is not exposed. +- // This is okay, because we monitor the expose settings above +- if (!coll->isValid()) { +- coll->deleteLater(); +- return; +- } +- +- m_collections << coll; +- m_dbToCollection[dbWidget] = coll; +- +- // handle alias +- connect(coll, &Collection::aliasAboutToAdd, this, &Service::onCollectionAliasAboutToAdd); +- connect(coll, &Collection::aliasAdded, this, &Service::onCollectionAliasAdded); +- connect(coll, &Collection::aliasRemoved, this, &Service::onCollectionAliasRemoved); +- +- ensureDefaultAlias(); +- +- // Forward delete signal, we have to rely on filepath to identify the database being closed, +- // but we can not access m_backend safely because during the databaseClosed signal, +- // m_backend may already be reset to nullptr +- // We want to remove the collection object from dbus as early as possible, to avoid +- // race conditions when deleteLater was called on the m_backend, but not delivered yet, +- // and new method calls from dbus occurred. Therefore we can't rely on the destroyed +- // signal on m_backend. +- // bind to coll lifespan +- connect(m_databases.data(), &DatabaseTabWidget::databaseClosed, coll, [coll](const QString& filePath) { +- if (filePath == coll->backendFilePath()) { +- coll->doDelete(); +- } +- }); +- +- // relay signals +- connect(coll, &Collection::collectionChanged, this, [this, coll]() { emit collectionChanged(coll); }); +- connect(coll, &Collection::collectionAboutToDelete, this, [this, coll]() { +- m_collections.removeAll(coll); +- m_dbToCollection.remove(coll->backend()); +- emit collectionDeleted(coll); +- }); +- +- if (emitSignal) { +- emit collectionCreated(coll); +- } +- } +- +- void Service::monitorDatabaseExposedGroup(DatabaseWidget* dbWidget) +- { +- Q_ASSERT(dbWidget); +- connect( +- dbWidget->database()->metadata()->customData(), &CustomData::customDataModified, this, [this, dbWidget]() { +- if (!FdoSecrets::settings()->exposedGroup(dbWidget->database()).isNull() && !findCollection(dbWidget)) { +- onDatabaseTabOpened(dbWidget, true); +- } +- }); +- } +- +- void Service::ensureDefaultAlias() +- { +- if (m_insdieEnsureDefaultAlias) { +- return; +- } +- +- m_insdieEnsureDefaultAlias = true; +- +- auto coll = findCollection(m_databases->currentDatabaseWidget()); +- if (coll) { +- // adding alias will automatically remove the association with previous collection. +- coll->addAlias(DEFAULT_ALIAS).okOrDie(); +- } +- +- m_insdieEnsureDefaultAlias = false; +- } +- +- void Service::dbusServiceUnregistered(const QString& service) +- { +- Q_ASSERT(m_serviceWatcher); +- +- auto removed = m_serviceWatcher->removeWatchedService(service); +- Q_UNUSED(removed); +- Q_ASSERT(removed); +- +- Session::CleanupNegotiation(service); +- auto sess = m_peerToSession.value(service, nullptr); +- if (sess) { +- sess->close().okOrDie(); +- } +- } +- +- DBusReturn> Service::collections() const +- { +- return m_collections; +- } +- +- DBusReturn Service::openSession(const QString& algorithm, const QVariant& input, Session*& result) +- { +- QVariant output; +- bool incomplete = false; +- auto peer = callingPeer(); +- +- // watch for service unregister to cleanup +- Q_ASSERT(m_serviceWatcher); +- m_serviceWatcher->addWatchedService(peer); +- +- // negotiate cipher +- auto ciphers = Session::CreateCiphers(peer, algorithm, input, output, incomplete); +- if (incomplete) { +- result = nullptr; +- return output; +- } +- if (!ciphers) { +- return DBusReturn<>::Error(QDBusError::NotSupported); +- } +- result = new Session(std::move(ciphers), callingPeerName(), this); +- +- m_sessions.append(result); +- m_peerToSession[peer] = result; +- connect(result, &Session::aboutToClose, this, [this, peer, result]() { +- emit sessionClosed(result); +- m_sessions.removeAll(result); +- m_peerToSession.remove(peer); +- }); +- emit sessionOpened(result); +- +- return output; +- } +- +- DBusReturn +- Service::createCollection(const QVariantMap& properties, const QString& alias, PromptBase*& prompt) +- { +- prompt = nullptr; +- +- // return existing collection if alias is non-empty and exists. +- auto collection = findCollection(alias); +- if (!collection) { +- auto cp = new CreateCollectionPrompt(this); +- prompt = cp; +- +- // collection will be created when the prompt complets. +- // once it's done, we set additional properties on the collection +- connect(cp, &CreateCollectionPrompt::collectionCreated, cp, [alias, properties](Collection* coll) { +- coll->setProperties(properties).okOrDie(); +- if (!alias.isEmpty()) { +- coll->addAlias(alias).okOrDie(); +- } +- }); +- } +- return collection; +- } +- +- DBusReturn> Service::searchItems(const StringStringMap& attributes, QList& locked) +- { +- auto ret = collections(); +- if (ret.isError()) { +- return ret; +- } +- +- QList unlocked; +- for (const auto& coll : ret.value()) { +- auto items = coll->searchItems(attributes); +- if (items.isError()) { +- return items; +- } +- auto l = coll->locked(); +- if (l.isError()) { +- return l; +- } +- if (l.value()) { +- locked.append(items.value()); +- } else { +- unlocked.append(items.value()); +- } +- } +- return unlocked; +- } +- +- DBusReturn> Service::unlock(const QList& objects, PromptBase*& prompt) +- { +- QSet needUnlock; +- needUnlock.reserve(objects.size()); +- for (const auto& obj : asConst(objects)) { +- auto coll = qobject_cast(obj); +- if (coll) { +- needUnlock << coll; +- } else { +- auto item = qobject_cast(obj); +- if (!item) { +- continue; +- } +- // we lock the whole collection for item +- needUnlock << item->collection(); +- } +- } +- +- // return anything already unlocked +- QList unlocked; +- QList toUnlock; +- for (const auto& coll : asConst(needUnlock)) { +- auto l = coll->locked(); +- if (l.isError()) { +- return l; +- } +- if (!l.value()) { +- unlocked << coll; +- } else { +- toUnlock << coll; +- } +- } +- if (!toUnlock.isEmpty()) { +- prompt = new UnlockCollectionsPrompt(this, toUnlock); +- } +- return unlocked; +- } +- +- DBusReturn> Service::lock(const QList& objects, PromptBase*& prompt) +- { +- QSet needLock; +- needLock.reserve(objects.size()); +- for (const auto& obj : asConst(objects)) { +- auto coll = qobject_cast(obj); +- if (coll) { +- needLock << coll; +- } else { +- auto item = qobject_cast(obj); +- if (!item) { +- continue; +- } +- // we lock the whole collection for item +- needLock << item->collection(); +- } +- } +- +- // return anything already locked +- QList locked; +- QList toLock; +- for (const auto& coll : asConst(needLock)) { +- auto l = coll->locked(); +- if (l.isError()) { +- return l; +- } +- if (l.value()) { +- locked << coll; +- } else { +- toLock << coll; +- } +- } +- if (!toLock.isEmpty()) { +- prompt = new LockCollectionsPrompt(this, toLock); +- } +- return locked; +- } +- +- DBusReturn> Service::getSecrets(const QList& items, Session* session) +- { +- if (!session) { +- return DBusReturn<>::Error(QStringLiteral(DBUS_ERROR_SECRET_NO_SESSION)); +- } +- +- QHash res; +- +- for (const auto& item : asConst(items)) { +- auto ret = item->getSecret(session); +- if (ret.isError()) { +- return ret; +- } +- res[item] = std::move(ret).value(); +- } +- if (calledFromDBus()) { +- plugin()->emitRequestShowNotification( +- tr(R"(%n Entry(s) was used by %1)", "%1 is the name of an application", res.size()) +- .arg(callingPeerName())); +- } +- return res; +- } +- +- DBusReturn Service::readAlias(const QString& name) +- { +- return findCollection(name); +- } +- +- DBusReturn Service::setAlias(const QString& name, Collection* collection) +- { +- if (!collection) { +- // remove alias name from its collection +- collection = findCollection(name); +- if (!collection) { +- return DBusReturn<>::Error(QStringLiteral(DBUS_ERROR_SECRET_NO_SUCH_OBJECT)); +- } +- return collection->removeAlias(name); +- } +- return collection->addAlias(name); +- } +- +- Collection* Service::findCollection(const QString& alias) const +- { +- if (alias.isEmpty()) { +- return nullptr; +- } +- +- auto it = m_aliases.find(alias); +- if (it != m_aliases.end()) { +- return it.value(); +- } +- return nullptr; +- } +- +- void Service::onCollectionAliasAboutToAdd(const QString& alias) +- { +- auto coll = qobject_cast(sender()); +- +- auto it = m_aliases.constFind(alias); +- if (it != m_aliases.constEnd() && it.value() != coll) { +- // another collection holds the alias +- // remove it first +- it.value()->removeAlias(alias).okOrDie(); +- +- // onCollectionAliasRemoved called through signal +- // `it` becomes invalidated now +- } +- } +- +- void Service::onCollectionAliasAdded(const QString& alias) +- { +- auto coll = qobject_cast(sender()); +- m_aliases[alias] = coll; +- } +- +- void Service::onCollectionAliasRemoved(const QString& alias) +- { +- m_aliases.remove(alias); +- ensureDefaultAlias(); +- } +- +- Collection* Service::findCollection(const DatabaseWidget* db) const +- { +- return m_dbToCollection.value(db, nullptr); +- } +- +- const QList Service::sessions() const +- { +- return m_sessions; +- } +- +- bool Service::doCloseDatabase(DatabaseWidget* dbWidget) +- { +- return m_databases->closeDatabaseTab(dbWidget); +- } +- +- Collection* Service::doNewDatabase() +- { +- auto dbWidget = m_databases->newDatabase(); +- if (!dbWidget) { +- return nullptr; +- } +- +- // database created through dbus will be exposed to dbus by default +- auto db = dbWidget->database(); +- FdoSecrets::settings()->setExposedGroup(db, db->rootGroup()->uuid()); +- +- auto collection = findCollection(dbWidget); +- +- Q_ASSERT(collection); +- +- return collection; +- } +- +- void Service::doSwitchToDatabaseSettings(DatabaseWidget* dbWidget) +- { +- if (dbWidget->isLocked()) { +- return; +- } +- // switch selected to current +- m_databases->setCurrentWidget(dbWidget); +- m_databases->showDatabaseSettings(); +- +- // open settings (switch from app settings to m_dbTabs) +- m_plugin->emitRequestSwitchToDatabases(); +- } +- +- void Service::doUnlockDatabaseInDialog(DatabaseWidget* dbWidget) +- { +- m_databases->unlockDatabaseInDialog(dbWidget, DatabaseOpenDialog::Intent::None); +- } +- +-} // namespace FdoSecrets +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/Service.h keepassxc-2.6.4-patched/src/fdosecrets/objects/Service.h +--- keepassxc-2.6.4-orig/src/fdosecrets/objects/Service.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/objects/Service.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,166 +0,0 @@ +-/* +- * Copyright (C) 2018 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_FDOSECRETS_SERVICE_H +-#define KEEPASSXC_FDOSECRETS_SERVICE_H +- +-#include "fdosecrets/objects/DBusObject.h" +-#include "fdosecrets/objects/adaptors/ServiceAdaptor.h" +- +-#include +-#include +-#include +-#include +-#include +- +-class QDBusServiceWatcher; +- +-class DatabaseTabWidget; +-class DatabaseWidget; +-class Group; +- +-class FdoSecretsPlugin; +- +-namespace FdoSecrets +-{ +- +- class Collection; +- class Item; +- class PromptBase; +- class ServiceAdaptor; +- class Session; +- +- class Service : public DBusObject // clazy: exclude=ctor-missing-parent-argument +- { +- Q_OBJECT +- public: +- explicit Service(FdoSecretsPlugin* plugin, QPointer dbTabs); +- ~Service() override; +- +- bool initialize(); +- +- DBusReturn openSession(const QString& algorithm, const QVariant& input, Session*& result); +- DBusReturn +- createCollection(const QVariantMap& properties, const QString& alias, PromptBase*& prompt); +- DBusReturn> searchItems(const StringStringMap& attributes, QList& locked); +- +- DBusReturn> unlock(const QList& objects, PromptBase*& prompt); +- +- DBusReturn> lock(const QList& objects, PromptBase*& prompt); +- +- DBusReturn> getSecrets(const QList& items, Session* session); +- +- DBusReturn readAlias(const QString& name); +- +- DBusReturn setAlias(const QString& name, Collection* collection); +- +- /** +- * List of collections +- * @return +- */ +- DBusReturn> collections() const; +- +- signals: +- void collectionCreated(Collection* collection); +- void collectionDeleted(Collection* collection); +- void collectionChanged(Collection* collection); +- +- void sessionOpened(Session* sess); +- void sessionClosed(Session* sess); +- +- /** +- * Report error message to the GUI +- * @param msg +- */ +- void error(const QString& msg); +- +- /** +- * Finish signal for async action doUnlockDatabaseInDialog +- * @param accepted If false, the action is canceled by the user +- * @param dbWidget The unlocked the dbWidget if succeed +- */ +- void doneUnlockDatabaseInDialog(bool accepted, DatabaseWidget* dbWidget); +- +- public: +- /** +- * List of sessions +- * @return +- */ +- const QList sessions() const; +- +- FdoSecretsPlugin* plugin() const +- { +- return m_plugin; +- } +- +- public slots: +- bool doCloseDatabase(DatabaseWidget* dbWidget); +- Collection* doNewDatabase(); +- void doSwitchToDatabaseSettings(DatabaseWidget* dbWidget); +- +- /** +- * Async, connect to signal doneUnlockDatabaseInDialog for finish notification +- * @param dbWidget +- */ +- void doUnlockDatabaseInDialog(DatabaseWidget* dbWidget); +- +- private slots: +- void dbusServiceUnregistered(const QString& service); +- void ensureDefaultAlias(); +- +- void onDatabaseTabOpened(DatabaseWidget* dbWidget, bool emitSignal); +- void monitorDatabaseExposedGroup(DatabaseWidget* dbWidget); +- +- void onCollectionAliasAboutToAdd(const QString& alias); +- void onCollectionAliasAdded(const QString& alias); +- +- void onCollectionAliasRemoved(const QString& alias); +- +- private: +- /** +- * Find collection by alias name +- * @param alias +- * @return the collection under alias +- */ +- Collection* findCollection(const QString& alias) const; +- +- /** +- * Find collection by dbWidget +- * @param db +- * @return the collection corresponding to the db +- */ +- Collection* findCollection(const DatabaseWidget* db) const; +- +- private: +- FdoSecretsPlugin* m_plugin; +- QPointer m_databases; +- +- QHash m_aliases; +- QList m_collections; +- QHash m_dbToCollection; +- +- QList m_sessions; +- QHash m_peerToSession; +- +- bool m_insdieEnsureDefaultAlias; +- +- QScopedPointer m_serviceWatcher; +- }; +- +-} // namespace FdoSecrets +- +-#endif // KEEPASSXC_FDOSECRETS_SERVICE_H +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/SessionCipher.cpp keepassxc-2.6.4-patched/src/fdosecrets/objects/SessionCipher.cpp +--- keepassxc-2.6.4-orig/src/fdosecrets/objects/SessionCipher.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/objects/SessionCipher.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,242 +0,0 @@ +-/* +- * Copyright (C) 2019 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "SessionCipher.h" +- +-#include "crypto/CryptoHash.h" +-#include "crypto/Random.h" +-#include "crypto/SymmetricCipher.h" +- +-#include +- +-#include +- +-namespace +-{ +- constexpr const auto IETF1024_SECOND_OAKLEY_GROUP_P_HEX = "FFFFFFFFFFFFFFFFC90FDAA22168C234" +- "C4C6628B80DC1CD129024E088A67CC74" +- "020BBEA63B139B22514A08798E3404DD" +- "EF9519B3CD3A431B302B0A6DF25F1437" +- "4FE1356D6D51C245E485B576625E7EC6" +- "F44C42E9A637ED6B0BFF5CB6F406B7ED" +- "EE386BFB5A899FA5AE9F24117C4B1FE6" +- "49286651ECE65381FFFFFFFFFFFFFFFF"; +- constexpr const size_t KEY_SIZE_BYTES = 128; +- constexpr const int AES_KEY_LEN = 16; // 128 bits +- +- const auto IETF1024_SECOND_OAKLEY_GROUP_P = MpiFromHex(IETF1024_SECOND_OAKLEY_GROUP_P_HEX, false); +-} // namespace +- +-namespace FdoSecrets +-{ +- // XXX: remove the redundant definitions once we are at C++17 +- constexpr char PlainCipher::Algorithm[]; +- constexpr char DhIetf1024Sha256Aes128CbcPkcs7::Algorithm[]; +- +- DhIetf1024Sha256Aes128CbcPkcs7::DhIetf1024Sha256Aes128CbcPkcs7(const QByteArray& clientPublicKeyBytes) +- : m_valid(false) +- { +- // read client public key +- auto clientPub = MpiFromBytes(clientPublicKeyBytes, false); +- +- // generate server side private, 128 bytes +- GcryptMPI serverPrivate = nullptr; +- if (NextPrivKey) { +- serverPrivate = std::move(NextPrivKey); +- } else { +- serverPrivate.reset(gcry_mpi_snew(KEY_SIZE_BYTES * 8)); +- gcry_mpi_randomize(serverPrivate.get(), KEY_SIZE_BYTES * 8, GCRY_STRONG_RANDOM); +- } +- +- // generate server side public key +- GcryptMPI serverPublic = nullptr; +- if (NextPubKey) { +- serverPublic = std::move(NextPubKey); +- } else { +- serverPublic.reset(gcry_mpi_snew(KEY_SIZE_BYTES * 8)); +- // the generator of Second Oakley Group is 2 +- gcry_mpi_powm( +- serverPublic.get(), GCRYMPI_CONST_TWO, serverPrivate.get(), IETF1024_SECOND_OAKLEY_GROUP_P.get()); +- } +- +- initialize(std::move(clientPub), std::move(serverPublic), std::move(serverPrivate)); +- } +- +- bool +- DhIetf1024Sha256Aes128CbcPkcs7::initialize(GcryptMPI clientPublic, GcryptMPI serverPublic, GcryptMPI serverPrivate) +- { +- QByteArray commonSecretBytes; +- if (!diffieHullman(clientPublic, serverPrivate, commonSecretBytes)) { +- return false; +- } +- +- m_privateKey = MpiToBytes(serverPrivate); +- m_publicKey = MpiToBytes(serverPublic); +- +- m_aesKey = hkdf(commonSecretBytes); +- +- m_valid = true; +- return true; +- } +- +- bool DhIetf1024Sha256Aes128CbcPkcs7::diffieHullman(const GcryptMPI& clientPub, +- const GcryptMPI& serverPrivate, +- QByteArray& commonSecretBytes) +- { +- if (!clientPub || !serverPrivate) { +- return false; +- } +- +- // calc common secret +- GcryptMPI commonSecret(gcry_mpi_snew(KEY_SIZE_BYTES * 8)); +- gcry_mpi_powm(commonSecret.get(), clientPub.get(), serverPrivate.get(), IETF1024_SECOND_OAKLEY_GROUP_P.get()); +- commonSecretBytes = MpiToBytes(commonSecret); +- +- return true; +- } +- +- QByteArray DhIetf1024Sha256Aes128CbcPkcs7::hkdf(const QByteArray& IKM) +- { +- // HKDF-Extract(salt, IKM) -> PRK +- // PRK = HMAC-Hash(salt, IKM) +- +- // we use NULL salt as per spec +- auto PRK = CryptoHash::hmac(IKM, +- QByteArrayLiteral("\0\0\0\0\0\0\0\0" +- "\0\0\0\0\0\0\0\0" +- "\0\0\0\0\0\0\0\0" +- "\0\0\0\0\0\0\0\0"), +- CryptoHash::Sha256); +- +- // HKDF-Expand(PRK, info, L) -> OKM +- // N = ceil(L/HashLen) +- // T = T(1) | T(2) | T(3) | ... | T(N) +- // OKM = first L octets of T +- // where: +- // T(0) = empty string (zero length) +- // T(1) = HMAC-Hash(PRK, T(0) | info | 0x01) +- // T(2) = HMAC-Hash(PRK, T(1) | info | 0x02) +- // T(3) = HMAC-Hash(PRK, T(2) | info | 0x03) +- // ... +- // +- // (where the constant concatenated to the end of each T(n) is a +- // single octet.) +- +- // we use empty info as per spec +- // HashLen = 32 (sha256) +- // L = 16 (16 * 8 = 128 bits) +- // N = ceil(16/32) = 1 +- +- auto T1 = CryptoHash::hmac(QByteArrayLiteral("\x01"), PRK, CryptoHash::Sha256); +- +- // resulting AES key is first 128 bits +- Q_ASSERT(T1.size() >= AES_KEY_LEN); +- auto OKM = T1.left(AES_KEY_LEN); +- return OKM; +- } +- +- SecretStruct DhIetf1024Sha256Aes128CbcPkcs7::encrypt(const SecretStruct& input) +- { +- SecretStruct output = input; +- output.value.clear(); +- output.parameters.clear(); +- +- SymmetricCipher encrypter(SymmetricCipher::Aes128, SymmetricCipher::Cbc, SymmetricCipher::Encrypt); +- +- auto IV = randomGen()->randomArray(SymmetricCipher::algorithmIvSize(SymmetricCipher::Aes128)); +- if (!encrypter.init(m_aesKey, IV)) { +- qWarning() << "Error encrypt: " << encrypter.errorString(); +- return output; +- } +- +- output.parameters = IV; +- +- bool ok; +- output.value = input.value; +- output.value = encrypter.process(padPkcs7(output.value, encrypter.blockSize()), &ok); +- if (!ok) { +- qWarning() << "Error encrypt: " << encrypter.errorString(); +- return output; +- } +- +- return output; +- } +- +- QByteArray& DhIetf1024Sha256Aes128CbcPkcs7::padPkcs7(QByteArray& input, int blockSize) +- { +- // blockSize must be a power of 2. +- Q_ASSERT_X(blockSize > 0 && !(blockSize & (blockSize - 1)), "padPkcs7", "blockSize must be a power of 2"); +- +- int padLen = blockSize - (input.size() & (blockSize - 1)); +- +- input.append(QByteArray(padLen, static_cast(padLen))); +- return input; +- } +- +- SecretStruct DhIetf1024Sha256Aes128CbcPkcs7::decrypt(const SecretStruct& input) +- { +- auto IV = input.parameters; +- SymmetricCipher decrypter(SymmetricCipher::Aes128, SymmetricCipher::Cbc, SymmetricCipher::Decrypt); +- if (!decrypter.init(m_aesKey, IV)) { +- qWarning() << "Error decoding: " << decrypter.errorString(); +- return input; +- } +- bool ok; +- SecretStruct output = input; +- output.parameters.clear(); +- output.value = decrypter.process(input.value, &ok); +- +- if (!ok) { +- qWarning() << "Error decoding: " << decrypter.errorString(); +- return input; +- } +- +- unpadPkcs7(output.value); +- return output; +- } +- +- QByteArray& DhIetf1024Sha256Aes128CbcPkcs7::unpadPkcs7(QByteArray& input) +- { +- if (input.isEmpty()) { +- return input; +- } +- +- int padLen = input[input.size() - 1]; +- input.chop(padLen); +- return input; +- } +- +- bool DhIetf1024Sha256Aes128CbcPkcs7::isValid() const +- { +- return m_valid; +- } +- +- QVariant DhIetf1024Sha256Aes128CbcPkcs7::negotiationOutput() const +- { +- return m_publicKey; +- } +- +- void DhIetf1024Sha256Aes128CbcPkcs7::fixNextServerKeys(GcryptMPI priv, GcryptMPI pub) +- { +- NextPrivKey = std::move(priv); +- NextPubKey = std::move(pub); +- } +- +- GcryptMPI DhIetf1024Sha256Aes128CbcPkcs7::NextPrivKey = nullptr; +- GcryptMPI DhIetf1024Sha256Aes128CbcPkcs7::NextPubKey = nullptr; +- +-} // namespace FdoSecrets +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/SessionCipher.h keepassxc-2.6.4-patched/src/fdosecrets/objects/SessionCipher.h +--- keepassxc-2.6.4-orig/src/fdosecrets/objects/SessionCipher.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/objects/SessionCipher.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,147 +0,0 @@ +-/* +- * Copyright (C) 2019 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_FDOSECRETS_SESSIONCIPHER_H +-#define KEEPASSXC_FDOSECRETS_SESSIONCIPHER_H +- +-#include "fdosecrets/GcryptMPI.h" +-#include "fdosecrets/objects/Session.h" +- +-class TestFdoSecrets; +-class TestGuiFdoSecrets; +- +-namespace FdoSecrets +-{ +- +- class CipherPair +- { +- Q_DISABLE_COPY(CipherPair) +- public: +- CipherPair() = default; +- virtual ~CipherPair() = default; +- virtual SecretStruct encrypt(const SecretStruct& input) = 0; +- virtual SecretStruct decrypt(const SecretStruct& input) = 0; +- virtual bool isValid() const = 0; +- virtual QVariant negotiationOutput() const = 0; +- }; +- +- class PlainCipher : public CipherPair +- { +- Q_DISABLE_COPY(PlainCipher) +- public: +- static constexpr const char Algorithm[] = "plain"; +- +- PlainCipher() = default; +- SecretStruct encrypt(const SecretStruct& input) override +- { +- return input; +- } +- +- SecretStruct decrypt(const SecretStruct& input) override +- { +- return input; +- } +- +- bool isValid() const override +- { +- return true; +- } +- +- QVariant negotiationOutput() const override +- { +- return QStringLiteral(""); +- } +- }; +- +- class DhIetf1024Sha256Aes128CbcPkcs7 : public CipherPair +- { +- bool m_valid; +- QByteArray m_privateKey; +- QByteArray m_publicKey; +- QByteArray m_aesKey; +- +- /** +- * Diffie Hullman Key Exchange +- * Given client public key, generate server private/public key pair and common secret. +- * This also sets m_publicKey to server's public key +- * @param clientPublicKey client public key +- * @param serverPrivate server private key +- * @param commonSecretBytes output common secret +- * @return true on success. +- */ +- bool +- diffieHullman(const GcryptMPI& clientPublicKey, const GcryptMPI& serverPrivate, QByteArray& commonSecretBytes); +- +- /** +- * Perform HKDF defined in RFC5869, using sha256 as hash function +- * @param IKM input keying material +- * @return derived 128-bit key suitable for AES +- */ +- QByteArray hkdf(const QByteArray& IKM); +- +- /** +- * Add PKCS#7 style padding to input inplace +- * @param input +- * @param blockSize the block size to use, must be 2's power +- * @return reference to input for chaining +- */ +- QByteArray& padPkcs7(QByteArray& input, int blockSize); +- +- /** +- * Remove PKCS#7 style padding from input inplace +- * @param input +- * @return reference to input for chaining +- */ +- QByteArray& unpadPkcs7(QByteArray& input); +- +- bool initialize(GcryptMPI clientPublic, GcryptMPI serverPublic, GcryptMPI serverPrivate); +- +- DhIetf1024Sha256Aes128CbcPkcs7() +- : m_valid(false) +- { +- } +- +- public: +- static constexpr const char Algorithm[] = "dh-ietf1024-sha256-aes128-cbc-pkcs7"; +- +- explicit DhIetf1024Sha256Aes128CbcPkcs7(const QByteArray& clientPublicKeyBytes); +- +- SecretStruct encrypt(const SecretStruct& input) override; +- +- SecretStruct decrypt(const SecretStruct& input) override; +- +- bool isValid() const override; +- +- QVariant negotiationOutput() const override; +- +- private: +- /** +- * For test only, fix the server side private and public key. +- */ +- static void fixNextServerKeys(GcryptMPI priv, GcryptMPI pub); +- static GcryptMPI NextPrivKey; +- static GcryptMPI NextPubKey; +- +- private: +- Q_DISABLE_COPY(DhIetf1024Sha256Aes128CbcPkcs7); +- friend class ::TestFdoSecrets; +- friend class ::TestGuiFdoSecrets; +- }; +- +-} // namespace FdoSecrets +- +-#endif // KEEPASSXC_FDOSECRETS_SESSIONCIPHER_H +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/Session.cpp keepassxc-2.6.4-patched/src/fdosecrets/objects/Session.cpp +--- keepassxc-2.6.4-orig/src/fdosecrets/objects/Session.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/objects/Session.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,105 +0,0 @@ +-/* +- * Copyright (C) 2018 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +-#include "Session.h" +- +-#include "fdosecrets/objects/SessionCipher.h" +- +-#include "core/Tools.h" +- +-namespace FdoSecrets +-{ +- +- QHash Session::negoniationState; +- +- Session::Session(std::unique_ptr&& cipher, const QString& peer, Service* parent) +- : DBusObject(parent) +- , m_cipher(std::move(cipher)) +- , m_peer(peer) +- , m_id(QUuid::createUuid()) +- { +- registerWithPath(QStringLiteral(DBUS_PATH_TEMPLATE_SESSION).arg(p()->objectPath().path(), id()), +- new SessionAdaptor(this)); +- } +- +- void Session::CleanupNegotiation(const QString& peer) +- { +- negoniationState.remove(peer); +- } +- +- DBusReturn Session::close() +- { +- emit aboutToClose(); +- deleteLater(); +- +- return {}; +- } +- +- QString Session::peer() const +- { +- return m_peer; +- } +- +- QString Session::id() const +- { +- return Tools::uuidToHex(m_id); +- } +- +- std::unique_ptr Session::CreateCiphers(const QString& peer, +- const QString& algorithm, +- const QVariant& input, +- QVariant& output, +- bool& incomplete) +- { +- Q_UNUSED(peer); +- incomplete = false; +- +- std::unique_ptr cipher{}; +- if (algorithm == QLatin1String(PlainCipher::Algorithm)) { +- cipher.reset(new PlainCipher); +- } else if (algorithm == QLatin1String(DhIetf1024Sha256Aes128CbcPkcs7::Algorithm)) { +- QByteArray clientPublicKey = input.toByteArray(); +- cipher.reset(new DhIetf1024Sha256Aes128CbcPkcs7(clientPublicKey)); +- } else { +- // error notSupported +- } +- +- if (!cipher) { +- return {}; +- } +- +- if (!cipher->isValid()) { +- qWarning() << "FdoSecrets: Error creating cipher"; +- return {}; +- } +- +- output = cipher->negotiationOutput(); +- return cipher; +- } +- +- SecretStruct Session::encode(const SecretStruct& input) const +- { +- auto output = m_cipher->encrypt(input); +- output.session = objectPath(); +- return output; +- } +- +- SecretStruct Session::decode(const SecretStruct& input) const +- { +- return m_cipher->decrypt(input); +- } +- +-} // namespace FdoSecrets +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/objects/Session.h keepassxc-2.6.4-patched/src/fdosecrets/objects/Session.h +--- keepassxc-2.6.4-orig/src/fdosecrets/objects/Session.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/objects/Session.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,91 +0,0 @@ +-/* +- * Copyright (C) 2018 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_FDOSECRETS_SESSION_H +-#define KEEPASSXC_FDOSECRETS_SESSION_H +- +-#include "fdosecrets/objects/DBusObject.h" +-#include "fdosecrets/objects/Service.h" +-#include "fdosecrets/objects/SessionCipher.h" +-#include "fdosecrets/objects/adaptors/SessionAdaptor.h" +- +-#include +-#include +-#include +-#include +- +-#include +- +-namespace FdoSecrets +-{ +- +- class CipherPair; +- class Session : public DBusObject +- { +- Q_OBJECT +- public: +- static std::unique_ptr CreateCiphers(const QString& peer, +- const QString& algorithm, +- const QVariant& intpu, +- QVariant& output, +- bool& incomplete); +- static void CleanupNegotiation(const QString& peer); +- +- explicit Session(std::unique_ptr&& cipher, const QString& peer, Service* parent); +- +- DBusReturn close(); +- +- /** +- * Encode the secret struct. Note only the value field is encoded. +- * @param input +- * @return +- */ +- SecretStruct encode(const SecretStruct& input) const; +- +- /** +- * Decode the secret struct. +- * @param input +- * @return +- */ +- SecretStruct decode(const SecretStruct& input) const; +- +- /** +- * The peer application that opened this session +- * @return +- */ +- QString peer() const; +- +- QString id() const; +- +- signals: +- /** +- * The session is going to be closed +- * @param sess +- */ +- void aboutToClose(); +- +- private: +- std::unique_ptr m_cipher; +- QString m_peer; +- QUuid m_id; +- +- static QHash negoniationState; +- }; +- +-} // namespace FdoSecrets +- +-#endif // KEEPASSXC_FDOSECRETS_SESSION_H +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/README.md keepassxc-2.6.4-patched/src/fdosecrets/README.md +--- keepassxc-2.6.4-orig/src/fdosecrets/README.md 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/README.md 1970-01-01 01:00:00.000000000 +0100 +@@ -1,42 +0,0 @@ +-# Freedesktop.org Secret Storage Spec Server Side API +- +-This plugin implements the [Secret Storage specification][secrets] version 0.2. While running KeePassXC, it acts as a +-Secret Service server, registered on DBus, so clients like seahorse, python-secretstorage, or other implementations +-can connect and access the exposed database in KeePassXC. +- +-[secrets]: (https://www.freedesktop.org/wiki/Specifications/secret-storage-spec/) +- +-## Configurable settings +- +-* The user can specify if a database is exposed on DBus, and which group is exposed. +-* Whether to show desktop notification is shown when an entry is retrieved. +-* Whether to skip confirmation for entries deleted from DBus +- +-## Implemented Attributes on Item Object +- +-The following attributes are exposed: +- +-|Key|Value| +-|:---:|:---:| +-|Title|The entry title| +-|UserName|The entry user name| +-|URL|The entry URL| +-|Notes|The entry notes| +- +-In addition, all non-protected custom attributes are also exposed. +- +-## Architecture +- +-* `FdoSecrets::Service` is the top level DBus service +-* There is one and only one `FdoSecrets::Collection` per opened database tab +-* Each entry under the exposed database group has a corresponding `FdoSecrets::Item` DBus object. +- +-### Signal connections +- +-- Collections are created when a corresponding database tab opened +-- If the database is locked, a collection is created +-- When the database is unlocked, collection populates its children +-- If the unlocked database's exposed group is none, collection deletes itself +-- If the database's exposed group changes, collection repopulates +-- If the database's exposed group changes to none, collection deletes itself +-- If the database's exposed group changes from none, the service recreates a collection +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.cpp keepassxc-2.6.4-patched/src/fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.cpp +--- keepassxc-2.6.4-orig/src/fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,177 +0,0 @@ +-/* +- * Copyright (C) 2019 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "DatabaseSettingsWidgetFdoSecrets.h" +-#include "ui_DatabaseSettingsWidgetFdoSecrets.h" +- +-#include "fdosecrets/FdoSecretsSettings.h" +- +-#include "core/Database.h" +-#include "core/Group.h" +-#include "core/Metadata.h" +-#include "gui/group/GroupModel.h" +- +-#include +- +-namespace +-{ +- enum class ExposedGroup +- { +- None, +- Expose +- }; +-} // namespace +- +-class DatabaseSettingsWidgetFdoSecrets::GroupModelNoRecycle : public QSortFilterProxyModel +-{ +- Q_OBJECT +- +- Database* m_db; +- +-public: +- explicit GroupModelNoRecycle(Database* db) +- : m_db(db) +- { +- Q_ASSERT(db); +- setSourceModel(new GroupModel(m_db, this)); +- } +- +- Group* groupFromIndex(const QModelIndex& index) const +- { +- return groupFromSourceIndex(mapToSource(index)); +- } +- +- Group* groupFromSourceIndex(const QModelIndex& index) const +- { +- auto groupModel = qobject_cast(sourceModel()); +- Q_ASSERT(groupModel); +- return groupModel->groupFromIndex(index); +- } +- +- QModelIndex indexFromGroup(Group* group) const +- { +- auto groupModel = qobject_cast(sourceModel()); +- Q_ASSERT(groupModel); +- return mapFromSource(groupModel->index(group)); +- } +- +-protected: +- bool filterAcceptsRow(int source_row, const QModelIndex& source_parent) const override +- { +- auto source_idx = sourceModel()->index(source_row, 0, source_parent); +- if (!source_idx.isValid()) { +- return false; +- } +- +- auto recycleBin = m_db->metadata()->recycleBin(); +- if (!recycleBin) { +- return true; +- } +- +- // can not call mapFromSource, which internally calls filterAcceptsRow +- auto group = groupFromSourceIndex(source_idx); +- +- return group && !group->isRecycled() && group->uuid() != recycleBin->uuid(); +- } +-}; +- +-DatabaseSettingsWidgetFdoSecrets::DatabaseSettingsWidgetFdoSecrets(QWidget* parent) +- : QWidget(parent) +- , m_ui(new Ui::DatabaseSettingsWidgetFdoSecrets) +-{ +- m_ui->setupUi(this); +- m_ui->buttonGroup->setId(m_ui->radioDonotExpose, static_cast(ExposedGroup::None)); +- m_ui->buttonGroup->setId(m_ui->radioExpose, static_cast(ExposedGroup::Expose)); +- +- // make sure there is at least a selection +- connect(m_ui->radioExpose, &QRadioButton::toggled, this, [this](bool checked) { +- if (checked && !m_ui->selectGroup->selectionModel()->hasSelection()) { +- auto model = m_ui->selectGroup->model(); +- if (model) { +- auto idx = model->index(0, 0); +- m_ui->selectGroup->selectionModel()->select(idx, QItemSelectionModel::SelectCurrent); +- } +- } +- }); +-} +- +-DatabaseSettingsWidgetFdoSecrets::~DatabaseSettingsWidgetFdoSecrets() = default; +- +-void DatabaseSettingsWidgetFdoSecrets::loadSettings(QSharedPointer db) +-{ +- m_db = std::move(db); +- +- m_model.reset(new GroupModelNoRecycle(m_db.data())); +- m_ui->selectGroup->setModel(m_model.data()); +- +- Group* recycleBin = nullptr; +- if (m_db->metadata() && m_db->metadata()->recycleBin()) { +- recycleBin = m_db->metadata()->recycleBin(); +- } +- +- auto group = m_db->rootGroup()->findGroupByUuid(FdoSecrets::settings()->exposedGroup(m_db)); +- if (!group || group->isRecycled() || (recycleBin && group->uuid() == recycleBin->uuid())) { +- m_ui->radioDonotExpose->setChecked(true); +- } else { +- auto idx = m_model->indexFromGroup(group); +- m_ui->selectGroup->selectionModel()->select(idx, QItemSelectionModel::SelectCurrent); +- // expand all its parents +- idx = idx.parent(); +- while (idx.isValid()) { +- m_ui->selectGroup->expand(idx); +- idx = idx.parent(); +- } +- m_ui->radioExpose->setChecked(true); +- } +- +- settingsWarning(); +-} +- +-void DatabaseSettingsWidgetFdoSecrets::saveSettings() +-{ +- Q_ASSERT(m_db); +- Q_ASSERT(m_model); +- +- QUuid exposedGroup; +- switch (static_cast(m_ui->buttonGroup->checkedId())) { +- case ExposedGroup::None: +- break; +- case ExposedGroup::Expose: { +- auto idx = m_ui->selectGroup->selectionModel()->selectedIndexes().takeFirst(); +- Q_ASSERT(idx.isValid()); +- exposedGroup = m_model->groupFromIndex(idx)->uuid(); +- break; +- } +- } +- +- FdoSecrets::settings()->setExposedGroup(m_db, exposedGroup); +-} +- +-void DatabaseSettingsWidgetFdoSecrets::settingsWarning() +-{ +- if (FdoSecrets::settings()->isEnabled()) { +- m_ui->groupBox->setEnabled(true); +- m_ui->warningWidget->hideMessage(); +- } else { +- m_ui->groupBox->setEnabled(false); +- m_ui->warningWidget->showMessage(tr("Enable Secret Service to access these settings."), MessageWidget::Warning); +- m_ui->warningWidget->setCloseButtonVisible(false); +- m_ui->warningWidget->setAutoHideTimeout(-1); +- } +-} +- +-#include "DatabaseSettingsWidgetFdoSecrets.moc" +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.h keepassxc-2.6.4-patched/src/fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.h +--- keepassxc-2.6.4-orig/src/fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,53 +0,0 @@ +-/* +- * Copyright (C) 2019 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_DATABASESETTINGSWIDGETFDOSECRETS_H +-#define KEEPASSXC_DATABASESETTINGSWIDGETFDOSECRETS_H +- +-#include +-#include +-#include +- +-namespace Ui +-{ +- class DatabaseSettingsWidgetFdoSecrets; +-} +- +-class Database; +-class DatabaseSettingsWidgetFdoSecrets : public QWidget +-{ +- Q_OBJECT +-public: +- explicit DatabaseSettingsWidgetFdoSecrets(QWidget* parent = nullptr); +- ~DatabaseSettingsWidgetFdoSecrets() override; +- +- void loadSettings(QSharedPointer db); +- void saveSettings(); +- +-private: +- void settingsWarning(); +- +-private: +- QScopedPointer m_ui; +- +- QSharedPointer m_db; +- +- class GroupModelNoRecycle; +- QScopedPointer m_model; +-}; +- +-#endif // KEEPASSXC_DATABASESETTINGSWIDGETFDOSECRETS_H +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.ui keepassxc-2.6.4-patched/src/fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.ui +--- keepassxc-2.6.4-orig/src/fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.ui 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.ui 1970-01-01 01:00:00.000000000 +0100 +@@ -1,122 +0,0 @@ +- +- +- DatabaseSettingsWidgetFdoSecrets +- +- +- +- 0 +- 0 +- 400 +- 300 +- +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- +- +- +- Exposed Entries +- +- +- +- +- +- Don't expose this database +- +- +- true +- +- +- buttonGroup +- +- +- +- +- +- +- Expose entries under this group: +- +- +- buttonGroup +- +- +- +- +- +- +- false +- +- +- QAbstractItemView::NoEditTriggers +- +- +- true +- +- +- false +- +- +- +- +- +- +- +- +- +- Qt::Vertical +- +- +- +- 20 +- 40 +- +- +- +- +- +- +- +- +- MessageWidget +- QWidget +-
gui/MessageWidget.h
+- 1 +-
+-
+- +- +- +- radioExpose +- toggled(bool) +- selectGroup +- setEnabled(bool) +- +- +- 199 +- 92 +- +- +- 199 +- 189 +- +- +- +- +- +- +- +-
+diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/widgets/SettingsModels.cpp keepassxc-2.6.4-patched/src/fdosecrets/widgets/SettingsModels.cpp +--- keepassxc-2.6.4-orig/src/fdosecrets/widgets/SettingsModels.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/widgets/SettingsModels.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,393 +0,0 @@ +-/* +- * Copyright (C) 2019 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "SettingsModels.h" +- +-#include "fdosecrets/FdoSecretsPlugin.h" +-#include "fdosecrets/FdoSecretsSettings.h" +-#include "fdosecrets/objects/Service.h" +-#include "fdosecrets/objects/Session.h" +- +-#include "core/Database.h" +-#include "core/DatabaseIcons.h" +-#include "core/Resources.h" +-#include "gui/DatabaseTabWidget.h" +-#include "gui/DatabaseWidget.h" +- +-#include +- +-namespace FdoSecrets +-{ +- +- SettingsDatabaseModel::SettingsDatabaseModel(DatabaseTabWidget* dbTabs, QObject* parent) +- : QAbstractTableModel(parent) +- , m_dbTabs(nullptr) +- { +- setTabWidget(dbTabs); +- } +- +- void SettingsDatabaseModel::setTabWidget(DatabaseTabWidget* dbTabs) +- { +- auto old = m_dbTabs; +- m_dbTabs = dbTabs; +- if (old != m_dbTabs) { +- populateModel(); +- } +- } +- +- int SettingsDatabaseModel::rowCount(const QModelIndex& parent) const +- { +- if (parent.isValid()) { +- return 0; +- } +- return m_dbs.size(); +- } +- +- int SettingsDatabaseModel::columnCount(const QModelIndex& parent) const +- { +- if (parent.isValid()) { +- return 0; +- } +- return 3; +- } +- +- QVariant SettingsDatabaseModel::headerData(int section, Qt::Orientation orientation, int role) const +- { +- if (orientation != Qt::Horizontal) { +- return {}; +- } +- +- if (role != Qt::DisplayRole) { +- return {}; +- } +- +- switch (section) { +- case 0: +- return tr("File Name"); +- case 1: +- return tr("Group"); +- case 2: +- return tr("Manage"); +- default: +- return {}; +- } +- } +- +- QVariant SettingsDatabaseModel::data(const QModelIndex& index, int role) const +- { +- if (!index.isValid()) { +- return {}; +- } +- const auto& dbWidget = m_dbs[index.row()]; +- if (!dbWidget) { +- return {}; +- } +- +- switch (index.column()) { +- case 0: +- return dataForName(dbWidget, role); +- case 1: +- return dataForExposedGroup(dbWidget, role); +- case 2: +- return dataForManage(dbWidget, role); +- default: +- return {}; +- } +- } +- +- QVariant SettingsDatabaseModel::dataForName(DatabaseWidget* db, int role) const +- { +- switch (role) { +- case Qt::DisplayRole: { +- QFileInfo fi(db->database()->filePath()); +- return fi.fileName(); +- } +- case Qt::ToolTipRole: +- return db->database()->filePath(); +- default: +- return {}; +- } +- } +- +- QVariant SettingsDatabaseModel::dataForExposedGroup(DatabaseWidget* dbWidget, int role) +- { +- if (dbWidget->isLocked()) { +- switch (role) { +- case Qt::DisplayRole: +- return tr("Unlock to show"); +- case Qt::DecorationRole: +- return resources()->icon(QStringLiteral("object-locked")); +- case Qt::FontRole: { +- QFont font; +- font.setItalic(true); +- return font; +- } +- default: +- return {}; +- } +- } +- auto db = dbWidget->database(); +- auto group = db->rootGroup()->findGroupByUuid(FdoSecrets::settings()->exposedGroup(db)); +- if (group) { +- switch (role) { +- case Qt::DisplayRole: +- return group->name(); +- case Qt::DecorationRole: +- return group->iconPixmap(); +- case Qt::FontRole: +- if (group->isExpired()) { +- QFont font; +- font.setStrikeOut(true); +- return font; +- } else { +- return {}; +- } +- default: +- return {}; +- } +- } else { +- switch (role) { +- case Qt::DisplayRole: +- return tr("None"); +- case Qt::DecorationRole: +- return resources()->icon(QStringLiteral("paint-none")); +- default: +- return {}; +- } +- } +- } +- +- QVariant SettingsDatabaseModel::dataForManage(DatabaseWidget* db, int role) const +- { +- switch (role) { +- case Qt::EditRole: +- return QVariant::fromValue(db); +- default: +- return {}; +- } +- } +- +- void SettingsDatabaseModel::populateModel() +- { +- beginResetModel(); +- +- m_dbs.clear(); +- +- if (m_dbTabs) { +- // Add existing database tabs +- for (int idx = 0; idx != m_dbTabs->count(); ++idx) { +- auto dbWidget = m_dbTabs->databaseWidgetFromIndex(idx); +- databaseAdded(dbWidget, false); +- } +- // connect signals +- connect(m_dbTabs, &DatabaseTabWidget::databaseOpened, this, [this](DatabaseWidget* db) { +- databaseAdded(db, true); +- }); +- connect(m_dbTabs, &DatabaseTabWidget::databaseClosed, this, &SettingsDatabaseModel::databaseRemoved); +- } +- +- endResetModel(); +- } +- +- void SettingsDatabaseModel::databaseAdded(DatabaseWidget* db, bool emitSignals) +- { +- int row = m_dbs.size(); +- if (emitSignals) { +- beginInsertRows({}, row, row); +- } +- +- m_dbs.append(db); +- connect(db, &DatabaseWidget::databaseLocked, this, [row, this]() { +- emit dataChanged(index(row, 1), index(row, 2)); +- }); +- connect(db, &DatabaseWidget::databaseUnlocked, this, [row, this]() { +- emit dataChanged(index(row, 1), index(row, 2)); +- }); +- connect(db, &DatabaseWidget::databaseModified, this, [row, this]() { +- emit dataChanged(index(row, 0), index(row, 2)); +- }); +- connect(db, &DatabaseWidget::databaseFilePathChanged, this, [row, this]() { +- emit dataChanged(index(row, 0), index(row, 2)); +- }); +- +- if (emitSignals) { +- endInsertRows(); +- } +- } +- +- void SettingsDatabaseModel::databaseRemoved(const QString& filePath) +- { +- for (int i = 0; i != m_dbs.size(); i++) { +- if (m_dbs[i] && m_dbs[i]->database()->filePath() == filePath) { +- beginRemoveRows({}, i, i); +- +- m_dbs[i]->disconnect(this); +- m_dbs.removeAt(i); +- +- endRemoveRows(); +- break; +- } +- } +- } +- +- SettingsSessionModel::SettingsSessionModel(FdoSecretsPlugin* plugin, QObject* parent) +- : QAbstractTableModel(parent) +- , m_service(nullptr) +- { +- setService(plugin->serviceInstance()); +- connect(plugin, &FdoSecretsPlugin::secretServiceStarted, this, [plugin, this]() { +- setService(plugin->serviceInstance()); +- }); +- connect(plugin, &FdoSecretsPlugin::secretServiceStopped, this, [this]() { setService(nullptr); }); +- } +- +- void SettingsSessionModel::setService(Service* service) +- { +- auto old = m_service; +- m_service = service; +- if (old != m_service) { +- populateModel(); +- } +- } +- +- int SettingsSessionModel::rowCount(const QModelIndex& parent) const +- { +- if (parent.isValid()) { +- return 0; +- } +- return m_sessions.size(); +- } +- +- int SettingsSessionModel::columnCount(const QModelIndex& parent) const +- { +- if (parent.isValid()) { +- return 0; +- } +- return 2; +- } +- +- QVariant SettingsSessionModel::headerData(int section, Qt::Orientation orientation, int role) const +- { +- if (orientation != Qt::Horizontal) { +- return {}; +- } +- +- if (role != Qt::DisplayRole) { +- return {}; +- } +- +- switch (section) { +- case 0: +- return tr("Application"); +- case 1: +- return tr("Manage"); +- default: +- return {}; +- } +- } +- +- QVariant SettingsSessionModel::data(const QModelIndex& index, int role) const +- { +- if (!index.isValid()) { +- return {}; +- } +- const auto& sess = m_sessions[index.row()]; +- if (!sess) { +- return {}; +- } +- +- switch (index.column()) { +- case 0: +- return dataForApplication(sess, role); +- case 1: +- return dataForManage(sess, role); +- default: +- return {}; +- } +- } +- +- QVariant SettingsSessionModel::dataForApplication(Session* sess, int role) const +- { +- switch (role) { +- case Qt::DisplayRole: +- return sess->peer(); +- default: +- return {}; +- } +- } +- +- QVariant SettingsSessionModel::dataForManage(Session* sess, int role) const +- { +- switch (role) { +- case Qt::EditRole: { +- return QVariant::fromValue(sess); +- } +- default: +- return {}; +- } +- } +- +- void SettingsSessionModel::populateModel() +- { +- beginResetModel(); +- +- m_sessions.clear(); +- +- if (m_service) { +- // Add existing database tabs +- for (const auto& sess : m_service->sessions()) { +- sessionAdded(sess, false); +- } +- +- // connect signals +- connect(m_service, &Service::sessionOpened, this, [this](Session* sess) { sessionAdded(sess, true); }); +- connect(m_service, &Service::sessionClosed, this, &SettingsSessionModel::sessionRemoved); +- } +- +- endResetModel(); +- } +- +- void SettingsSessionModel::sessionAdded(Session* sess, bool emitSignals) +- { +- int row = m_sessions.size(); +- if (emitSignals) { +- beginInsertRows({}, row, row); +- } +- +- m_sessions.append(sess); +- +- if (emitSignals) { +- endInsertRows(); +- } +- } +- +- void SettingsSessionModel::sessionRemoved(Session* sess) +- { +- for (int i = 0; i != m_sessions.size(); i++) { +- if (m_sessions[i] == sess) { +- beginRemoveRows({}, i, i); +- +- m_sessions[i]->disconnect(this); +- m_sessions.removeAt(i); +- +- endRemoveRows(); +- break; +- } +- } +- } +- +-} // namespace FdoSecrets +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/widgets/SettingsModels.h keepassxc-2.6.4-patched/src/fdosecrets/widgets/SettingsModels.h +--- keepassxc-2.6.4-orig/src/fdosecrets/widgets/SettingsModels.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/widgets/SettingsModels.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,96 +0,0 @@ +-/* +- * Copyright (C) 2019 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_FDOSECRETS_SETTINGSMODELS_H +-#define KEEPASSXC_FDOSECRETS_SETTINGSMODELS_H +- +-#include +-#include +- +-class DatabaseTabWidget; +-class DatabaseWidget; +-class FdoSecretsPlugin; +- +-namespace FdoSecrets +-{ +- class SettingsDatabaseModel : public QAbstractTableModel +- { +- Q_OBJECT +- public: +- explicit SettingsDatabaseModel(DatabaseTabWidget* dbTabs, QObject* parent = nullptr); +- +- void setTabWidget(DatabaseTabWidget* dbTabs); +- +- int rowCount(const QModelIndex& parent) const override; +- int columnCount(const QModelIndex& parent) const override; +- QVariant data(const QModelIndex& index, int role) const override; +- QVariant headerData(int section, Qt::Orientation orientation, int role) const override; +- +- private: +- QVariant dataForName(DatabaseWidget* db, int role) const; +- static QVariant dataForExposedGroup(DatabaseWidget* db, int role); +- QVariant dataForManage(DatabaseWidget* db, int role) const; +- +- private slots: +- void populateModel(); +- void databaseAdded(DatabaseWidget* db, bool emitSignals); +- void databaseRemoved(const QString& filePath); +- +- private: +- // source +- QPointer m_dbTabs; +- +- // internal store +- QList> m_dbs; +- }; +- +- class Service; +- class Session; +- +- class SettingsSessionModel : public QAbstractTableModel +- { +- Q_OBJECT +- public: +- explicit SettingsSessionModel(FdoSecretsPlugin* plugin, QObject* parent = nullptr); +- +- int rowCount(const QModelIndex& parent) const override; +- int columnCount(const QModelIndex& parent) const override; +- QVariant data(const QModelIndex& index, int role) const override; +- QVariant headerData(int section, Qt::Orientation orientation, int role) const override; +- +- private: +- void setService(Service* service); +- +- QVariant dataForApplication(Session* sess, int role) const; +- QVariant dataForManage(Session* sess, int role) const; +- +- private slots: +- void populateModel(); +- void sessionAdded(Session* sess, bool emitSignals); +- void sessionRemoved(Session* sess); +- +- private: +- // source +- QPointer m_service; +- +- // internal copy, so we can emit with changed index +- QList m_sessions; +- }; +- +-} // namespace FdoSecrets +- +-#endif // KEEPASSXC_FDOSECRETS_SETTINGSMODELS_H +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.cpp keepassxc-2.6.4-patched/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.cpp +--- keepassxc-2.6.4-orig/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,366 +0,0 @@ +-/* +- * Copyright (C) 2018 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "SettingsWidgetFdoSecrets.h" +-#include "ui_SettingsWidgetFdoSecrets.h" +- +-#include "fdosecrets/FdoSecretsPlugin.h" +-#include "fdosecrets/FdoSecretsSettings.h" +-#include "fdosecrets/objects/Session.h" +-#include "fdosecrets/widgets/SettingsModels.h" +- +-#include "core/Resources.h" +-#include "gui/DatabaseWidget.h" +- +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-using FdoSecrets::Session; +-using FdoSecrets::SettingsDatabaseModel; +-using FdoSecrets::SettingsSessionModel; +- +-namespace +-{ +- class ManageDatabase : public QToolBar +- { +- Q_OBJECT +- +- Q_PROPERTY(DatabaseWidget* dbWidget READ dbWidget WRITE setDbWidget USER true) +- +- public: +- explicit ManageDatabase(FdoSecretsPlugin* plugin, QWidget* parent = nullptr) +- : QToolBar(parent) +- , m_plugin(plugin) +- { +- setFloatable(false); +- setMovable(false); +- +- // use a dummy widget to center the buttons +- auto spacer = new QWidget(this); +- spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); +- spacer->setVisible(true); +- addWidget(spacer); +- +- // db settings +- m_dbSettingsAct = new QAction(tr("Database settings"), this); +- m_dbSettingsAct->setIcon(resources()->icon(QStringLiteral("document-edit"))); +- m_dbSettingsAct->setToolTip(tr("Edit database settings")); +- m_dbSettingsAct->setEnabled(false); +- connect(m_dbSettingsAct, &QAction::triggered, this, [this]() { +- if (!m_dbWidget) { +- return; +- } +- auto db = m_dbWidget; +- m_plugin->serviceInstance()->doSwitchToDatabaseSettings(m_dbWidget); +- }); +- addAction(m_dbSettingsAct); +- +- // unlock/lock +- m_lockAct = new QAction(tr("Unlock database"), this); +- m_lockAct->setIcon(resources()->icon(QStringLiteral("object-locked"))); +- m_lockAct->setToolTip(tr("Unlock database to show more information")); +- connect(m_lockAct, &QAction::triggered, this, [this]() { +- if (!m_dbWidget) { +- return; +- } +- if (m_dbWidget->isLocked()) { +- m_plugin->serviceInstance()->doUnlockDatabaseInDialog(m_dbWidget); +- } else { +- m_dbWidget->lock(); +- } +- }); +- +- addAction(m_lockAct); +- +- // use a dummy widget to center the buttons +- spacer = new QWidget(this); +- spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); +- spacer->setVisible(true); +- addWidget(spacer); +- } +- +- DatabaseWidget* dbWidget() const +- { +- return m_dbWidget; +- } +- +- void setDbWidget(DatabaseWidget* dbWidget) +- { +- if (m_dbWidget == dbWidget) { +- return; +- } +- +- if (m_dbWidget) { +- disconnect(); +- } +- +- m_dbWidget = dbWidget; +- +- reconnect(); +- } +- +- private: +- void disconnect() +- { +- if (!m_dbWidget) { +- return; +- } +- m_dbWidget->disconnect(this); +- } +- +- void reconnect() +- { +- if (!m_dbWidget) { +- return; +- } +- connect(m_dbWidget, &DatabaseWidget::databaseLocked, this, [this]() { +- m_lockAct->setText(tr("Unlock database")); +- m_lockAct->setIcon(resources()->icon(QStringLiteral("object-locked"))); +- m_lockAct->setToolTip(tr("Unlock database to show more information")); +- m_dbSettingsAct->setEnabled(false); +- }); +- connect(m_dbWidget, &DatabaseWidget::databaseUnlocked, this, [this]() { +- m_lockAct->setText(tr("Lock database")); +- m_lockAct->setIcon(resources()->icon(QStringLiteral("object-unlocked"))); +- m_lockAct->setToolTip(tr("Lock database")); +- m_dbSettingsAct->setEnabled(true); +- }); +- } +- +- private: +- FdoSecretsPlugin* m_plugin = nullptr; +- QPointer m_dbWidget = nullptr; +- QAction* m_dbSettingsAct = nullptr; +- QAction* m_lockAct = nullptr; +- }; +- +- class ManageSession : public QToolBar +- { +- Q_OBJECT +- +- Q_PROPERTY(Session* session READ session WRITE setSession USER true) +- +- public: +- explicit ManageSession(FdoSecretsPlugin*, QWidget* parent = nullptr) +- : QToolBar(parent) +- { +- setFloatable(false); +- setMovable(false); +- +- // use a dummy widget to center the buttons +- auto spacer = new QWidget(this); +- spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); +- spacer->setVisible(true); +- addWidget(spacer); +- +- m_disconnectAct = new QAction(tr("Disconnect"), this); +- m_disconnectAct->setIcon(resources()->icon(QStringLiteral("dialog-close"))); +- m_disconnectAct->setToolTip(tr("Disconnect this application")); +- connect(m_disconnectAct, &QAction::triggered, this, [this]() { +- if (m_session) { +- m_session->close(); +- } +- }); +- addAction(m_disconnectAct); +- +- // use a dummy widget to center the buttons +- spacer = new QWidget(this); +- spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); +- spacer->setVisible(true); +- addWidget(spacer); +- } +- +- Session* session() +- { +- return m_session; +- } +- +- void setSession(Session* sess) +- { +- m_session = sess; +- } +- +- private: +- Session* m_session = nullptr; +- QAction* m_disconnectAct = nullptr; +- }; +- +- template class Creator : public QItemEditorCreatorBase +- { +- public: +- inline explicit Creator(FdoSecretsPlugin* plugin) +- : QItemEditorCreatorBase() +- , m_plugin(plugin) +- , m_propertyName(T::staticMetaObject.userProperty().name()) +- { +- } +- +- inline QWidget* createWidget(QWidget* parent) const override +- { +- return new T(m_plugin, parent); +- } +- +- inline QByteArray valuePropertyName() const override +- { +- return m_propertyName; +- } +- +- private: +- FdoSecretsPlugin* m_plugin; +- QByteArray m_propertyName; +- }; +-} // namespace +- +-SettingsWidgetFdoSecrets::SettingsWidgetFdoSecrets(FdoSecretsPlugin* plugin, QWidget* parent) +- : QWidget(parent) +- , m_ui(new Ui::SettingsWidgetFdoSecrets()) +- , m_factory(new QItemEditorFactory) +- , m_plugin(plugin) +-{ +- m_ui->setupUi(this); +- m_ui->warningMsg->setHidden(true); +- m_ui->warningMsg->setCloseButtonVisible(false); +- +- auto sessModel = new SettingsSessionModel(plugin, this); +- m_ui->tableSessions->setModel(sessModel); +- setupView(m_ui->tableSessions, 1, qMetaTypeId(), new Creator(m_plugin)); +- +- // config header after setting model, otherwise the header doesn't have enough sections +- auto sessViewHeader = m_ui->tableSessions->horizontalHeader(); +- sessViewHeader->setSelectionMode(QAbstractItemView::NoSelection); +- sessViewHeader->setSectionsClickable(false); +- sessViewHeader->setSectionResizeMode(0, QHeaderView::Stretch); // application +- sessViewHeader->setSectionResizeMode(1, QHeaderView::ResizeToContents); // disconnect button +- +- auto dbModel = new SettingsDatabaseModel(plugin->dbTabs(), this); +- m_ui->tableDatabases->setModel(dbModel); +- setupView(m_ui->tableDatabases, 2, qMetaTypeId(), new Creator(m_plugin)); +- +- // config header after setting model, otherwise the header doesn't have enough sections +- auto dbViewHeader = m_ui->tableDatabases->horizontalHeader(); +- dbViewHeader->setSelectionMode(QAbstractItemView::NoSelection); +- dbViewHeader->setSectionsClickable(false); +- dbViewHeader->setSectionResizeMode(0, QHeaderView::Stretch); // file name +- dbViewHeader->setSectionResizeMode(1, QHeaderView::Stretch); // group +- dbViewHeader->setSectionResizeMode(2, QHeaderView::ResizeToContents); // manage button +- +- // prompt the user to save settings before the sections are enabled +- connect(m_plugin, &FdoSecretsPlugin::secretServiceStarted, this, &SettingsWidgetFdoSecrets::updateServiceState); +- connect(m_plugin, &FdoSecretsPlugin::secretServiceStopped, this, &SettingsWidgetFdoSecrets::updateServiceState); +- connect(m_ui->enableFdoSecretService, &QCheckBox::toggled, this, &SettingsWidgetFdoSecrets::updateServiceState); +- updateServiceState(); +- +- // background checking +- m_checkTimer.setInterval(2000); +- connect(&m_checkTimer, &QTimer::timeout, this, &SettingsWidgetFdoSecrets::checkDBusName); +- connect(m_plugin, &FdoSecretsPlugin::secretServiceStarted, &m_checkTimer, &QTimer::stop); +- connect(m_plugin, SIGNAL(secretServiceStopped()), &m_checkTimer, SLOT(start())); +-} +- +-void SettingsWidgetFdoSecrets::setupView(QAbstractItemView* view, +- int manageColumn, +- int editorTypeId, +- QItemEditorCreatorBase* creator) +-{ +- auto manageButtonDelegate = new QStyledItemDelegate(this); +- m_factory->registerEditor(editorTypeId, creator); +- manageButtonDelegate->setItemEditorFactory(m_factory.data()); +- view->setItemDelegateForColumn(manageColumn, manageButtonDelegate); +- connect(view->model(), +- &QAbstractItemModel::rowsInserted, +- this, +- [view, manageColumn](const QModelIndex&, int first, int last) { +- for (int i = first; i <= last; ++i) { +- auto idx = view->model()->index(i, manageColumn); +- view->openPersistentEditor(idx); +- } +- }); +-} +- +-SettingsWidgetFdoSecrets::~SettingsWidgetFdoSecrets() = default; +- +-void SettingsWidgetFdoSecrets::loadSettings() +-{ +- m_ui->enableFdoSecretService->setChecked(FdoSecrets::settings()->isEnabled()); +- m_ui->showNotification->setChecked(FdoSecrets::settings()->showNotification()); +- m_ui->noConfirmDeleteItem->setChecked(FdoSecrets::settings()->noConfirmDeleteItem()); +-} +- +-void SettingsWidgetFdoSecrets::saveSettings() +-{ +- FdoSecrets::settings()->setEnabled(m_ui->enableFdoSecretService->isChecked()); +- FdoSecrets::settings()->setShowNotification(m_ui->showNotification->isChecked()); +- FdoSecrets::settings()->setNoConfirmDeleteItem(m_ui->noConfirmDeleteItem->isChecked()); +-} +- +-void SettingsWidgetFdoSecrets::showEvent(QShowEvent* event) +-{ +- QWidget::showEvent(event); +- QTimer::singleShot(0, this, &SettingsWidgetFdoSecrets::checkDBusName); +- m_checkTimer.start(); +-} +- +-void SettingsWidgetFdoSecrets::hideEvent(QHideEvent* event) +-{ +- QWidget::hideEvent(event); +- m_checkTimer.stop(); +-} +- +-void SettingsWidgetFdoSecrets::checkDBusName() +-{ +- if (m_plugin->serviceInstance()) { +- // only need checking if the service is not started or failed to start. +- return; +- } +- +- auto reply = QDBusConnection::sessionBus().interface()->isServiceRegistered(QStringLiteral(DBUS_SERVICE_SECRET)); +- if (!reply.isValid()) { +- m_ui->warningMsg->showMessage( +- tr("Error: Failed to connect to DBus. Please check your DBus setup."), MessageWidget::Error, -1); +- m_ui->enableFdoSecretService->setChecked(false); +- m_ui->enableFdoSecretService->setEnabled(false); +- return; +- } +- if (reply.value()) { +- m_ui->warningMsg->showMessage( +- tr("Warning: ") + m_plugin->reportExistingService(), MessageWidget::Warning, -1); +- m_ui->enableFdoSecretService->setChecked(false); +- m_ui->enableFdoSecretService->setEnabled(false); +- return; +- } +- m_ui->warningMsg->hideMessage(); +- m_ui->enableFdoSecretService->setEnabled(true); +-} +- +-void SettingsWidgetFdoSecrets::updateServiceState() +-{ +- m_ui->tabWidget->setEnabled(m_plugin->serviceInstance() != nullptr); +- if (m_ui->enableFdoSecretService->isChecked() && !m_plugin->serviceInstance()) { +- m_ui->tabWidget->setToolTip( +- tr("Save current changes to activate the plugin and enable editing of this section.")); +- } else { +- m_ui->tabWidget->setToolTip(""); +- } +-} +- +-#include "SettingsWidgetFdoSecrets.moc" +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.h keepassxc-2.6.4-patched/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.h +--- keepassxc-2.6.4-orig/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,74 +0,0 @@ +-/* +- * Copyright (C) 2018 Aetf +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_SETTINGSWIDGETFDOSECRETS_H +-#define KEEPASSXC_SETTINGSWIDGETFDOSECRETS_H +- +-#include "gui/MessageWidget.h" +- +-#include +-#include +-#include +- +-class QAbstractItemView; +-class QItemEditorCreatorBase; +-class QItemEditorFactory; +- +-namespace FdoSecrets +-{ +- +- class Session; +- class Collection; +- +-} // namespace FdoSecrets +- +-class FdoSecretsPlugin; +- +-namespace Ui +-{ +- class SettingsWidgetFdoSecrets; +-} +-class SettingsWidgetFdoSecrets : public QWidget +-{ +- Q_OBJECT +-public: +- explicit SettingsWidgetFdoSecrets(FdoSecretsPlugin* plugin, QWidget* parent = nullptr); +- ~SettingsWidgetFdoSecrets() override; +- +-public slots: +- void loadSettings(); +- void saveSettings(); +- +-private slots: +- void checkDBusName(); +- void updateServiceState(); +- +-protected: +- void showEvent(QShowEvent* event) override; +- void hideEvent(QHideEvent* event) override; +- +-private: +- void setupView(QAbstractItemView* view, int manageColumn, int editorTypeId, QItemEditorCreatorBase* creator); +- +-private: +- QScopedPointer m_ui; +- QScopedPointer m_factory; +- FdoSecretsPlugin* m_plugin; +- QTimer m_checkTimer; +-}; +- +-#endif // KEEPASSXC_SETTINGSWIDGETFDOSECRETS_H +diff -urNr keepassxc-2.6.4-orig/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.ui keepassxc-2.6.4-patched/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.ui +--- keepassxc-2.6.4-orig/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.ui 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.ui 1970-01-01 01:00:00.000000000 +0100 +@@ -1,157 +0,0 @@ +- +- +- SettingsWidgetFdoSecrets +- +- +- +- 0 +- 0 +- 525 +- 457 +- +- +- +- Options +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- +- +- +- Enable KeepassXC Freedesktop.org Secret Service integration +- +- +- +- +- +- +- 0 +- +- +- +- General +- +- +- +- +- +- Show notification when credentials are requested +- +- +- +- +- +- +- <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> +- +- +- Don't confirm when entries are deleted by clients +- +- +- +- +- +- +- Qt::Vertical +- +- +- QSizePolicy::Preferred +- +- +- +- 20 +- 40 +- +- +- +- +- +- +- +- Exposed database groups: +- +- +- +- +- +- +- Qt::NoFocus +- +- +- QAbstractItemView::NoEditTriggers +- +- +- QAbstractItemView::NoSelection +- +- +- QAbstractItemView::SelectRows +- +- +- false +- +- +- +- +- +- +- +- Authorization +- +- +- +- +- +- These applications are currently connected: +- +- +- +- +- +- +- Qt::NoFocus +- +- +- QAbstractItemView::NoEditTriggers +- +- +- QAbstractItemView::NoSelection +- +- +- QAbstractItemView::SelectRows +- +- +- false +- +- +- +- +- +- +- +- +- +- +- +- MessageWidget +- QWidget +-
gui/MessageWidget.h
+- 1 +-
+-
+- +- +-
+diff -urNr keepassxc-2.6.4-orig/src/format/CsvExporter.cpp keepassxc-2.6.4-patched/src/format/CsvExporter.cpp +--- keepassxc-2.6.4-orig/src/format/CsvExporter.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/CsvExporter.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,121 +0,0 @@ +-/* +- * Copyright (C) 2015 Florian Geyer +- * Copyright (C) 2015 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "CsvExporter.h" +- +-#include +- +-#include "core/Database.h" +-#include "core/Group.h" +- +-bool CsvExporter::exportDatabase(const QString& filename, const QSharedPointer& db) +-{ +- QFile file(filename); +- if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { +- m_error = file.errorString(); +- return false; +- } +- return exportDatabase(&file, db); +-} +- +-bool CsvExporter::exportDatabase(QIODevice* device, const QSharedPointer& db) +-{ +- if (device->write(exportHeader().toUtf8()) == -1) { +- m_error = device->errorString(); +- return false; +- } +- +- if (device->write(exportGroup(db->rootGroup()).toUtf8()) == -1) { +- m_error = device->errorString(); +- return false; +- } +- +- return true; +-} +- +-QString CsvExporter::exportDatabase(const QSharedPointer& db) +-{ +- return exportHeader() + exportGroup(db->rootGroup()); +-} +- +-QString CsvExporter::errorString() const +-{ +- return m_error; +-} +- +-QString CsvExporter::exportHeader() +-{ +- QString header; +- addColumn(header, "Group"); +- addColumn(header, "Title"); +- addColumn(header, "Username"); +- addColumn(header, "Password"); +- addColumn(header, "URL"); +- addColumn(header, "Notes"); +- addColumn(header, "TOTP"); +- addColumn(header, "Icon"); +- addColumn(header, "Last Modified"); +- addColumn(header, "Created"); +- return header + QString("\n"); +-} +- +-QString CsvExporter::exportGroup(const Group* group, QString groupPath) +-{ +- QString response; +- if (!groupPath.isEmpty()) { +- groupPath.append("/"); +- } +- groupPath.append(group->name()); +- +- const QList& entryList = group->entries(); +- for (const Entry* entry : entryList) { +- QString line; +- +- addColumn(line, groupPath); +- addColumn(line, entry->title()); +- addColumn(line, entry->username()); +- addColumn(line, entry->password()); +- addColumn(line, entry->url()); +- addColumn(line, entry->notes()); +- addColumn(line, entry->totpSettingsString()); +- addColumn(line, QString::number(entry->iconNumber())); +- addColumn(line, entry->timeInfo().lastModificationTime().toString(Qt::ISODate)); +- addColumn(line, entry->timeInfo().creationTime().toString(Qt::ISODate)); +- +- line.append("\n"); +- response.append(line); +- } +- +- const QList& children = group->children(); +- for (const Group* child : children) { +- response.append(exportGroup(child, groupPath)); +- } +- +- return response; +-} +- +-void CsvExporter::addColumn(QString& str, const QString& column) +-{ +- if (!str.isEmpty()) { +- str.append(","); +- } +- +- str.append("\""); +- str.append(QString(column).replace("\"", "\"\"")); +- str.append("\""); +-} +diff -urNr keepassxc-2.6.4-orig/src/format/CsvExporter.h keepassxc-2.6.4-patched/src/format/CsvExporter.h +--- keepassxc-2.6.4-orig/src/format/CsvExporter.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/CsvExporter.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,45 +0,0 @@ +-/* +- * Copyright (C) 2015 Florian Geyer +- * Copyright (C) 2015 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_CSVEXPORTER_H +-#define KEEPASSX_CSVEXPORTER_H +- +-#include +-#include +- +-class Database; +-class Group; +-class QIODevice; +- +-class CsvExporter +-{ +-public: +- bool exportDatabase(const QString& filename, const QSharedPointer& db); +- bool exportDatabase(QIODevice* device, const QSharedPointer& db); +- QString exportDatabase(const QSharedPointer& db); +- QString errorString() const; +- +-private: +- QString exportGroup(const Group* group, QString groupPath = QString()); +- QString exportHeader(); +- void addColumn(QString& str, const QString& column); +- +- QString m_error; +-}; +- +-#endif // KEEPASSX_CSVEXPORTER_H +diff -urNr keepassxc-2.6.4-orig/src/format/HtmlExporter.cpp keepassxc-2.6.4-patched/src/format/HtmlExporter.cpp +--- keepassxc-2.6.4-orig/src/format/HtmlExporter.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/HtmlExporter.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,255 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "HtmlExporter.h" +- +-#include +-#include +- +-#include "core/Database.h" +-#include "core/Global.h" +-#include "core/Group.h" +-#include "core/Metadata.h" +- +-namespace +-{ +- QString PixmapToHTML(const QPixmap& pixmap) +- { +- if (pixmap.isNull()) { +- return ""; +- } +- +- // Based on https://stackoverflow.com/a/6621278 +- QByteArray a; +- QBuffer buffer(&a); +- pixmap.save(&buffer, "PNG"); +- return QString(""; +- } +-} // namespace +- +-bool HtmlExporter::exportDatabase(const QString& filename, const QSharedPointer& db) +-{ +- QFile file(filename); +- if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { +- m_error = file.errorString(); +- return false; +- } +- return exportDatabase(&file, db); +-} +- +-QString HtmlExporter::errorString() const +-{ +- return m_error; +-} +- +-bool HtmlExporter::exportDatabase(QIODevice* device, const QSharedPointer& db) +-{ +- const auto meta = db->metadata(); +- if (!meta) { +- m_error = "Internal error: metadata is NULL"; +- return false; +- } +- +- const auto header = QString("" +- "" +- "" +- "" +- + meta->name().toHtmlEscaped() +- + "" +- "" +- "\n" +- "" +- "

" +- + meta->name().toHtmlEscaped() +- + "

" +- "

" +- + meta->description().toHtmlEscaped().replace("\n", "
") +- + "

" +- "

" +- + db->filePath().toHtmlEscaped() + "

"); +- const auto footer = QString("" +- ""); +- +- if (device->write(header.toUtf8()) == -1) { +- m_error = device->errorString(); +- return false; +- } +- +- if (db->rootGroup()) { +- if (!writeGroup(*device, *db->rootGroup())) { +- return false; +- } +- } +- +- if (device->write(footer.toUtf8()) == -1) { +- m_error = device->errorString(); +- return false; +- } +- +- return true; +-} +- +-bool HtmlExporter::writeGroup(QIODevice& device, const Group& group, QString path) +-{ +- // Don't output the recycle bin +- if (&group == group.database()->metadata()->recycleBin()) { +- return true; +- } +- +- if (!path.isEmpty()) { +- path.append(" → "); +- } +- path.append(group.name().toHtmlEscaped()); +- +- // Output the header for this group (but only if there are +- // any notes or entries in this group, otherwise we'd get +- // a header with nothing after it, which looks stupid) +- const auto& entries = group.entries(); +- const auto notes = group.notes(); +- if (!entries.empty() || !notes.isEmpty()) { +- +- // Header line +- auto header = QString("

"); +- header.append(PixmapToHTML(group.iconPixmap(IconSize::Medium))); +- header.append(" "); +- header.append(path); +- header.append("

\n"); +- +- // Group notes +- if (!notes.isEmpty()) { +- header.append("

"); +- header.append(notes.toHtmlEscaped().replace("\n", "
")); +- header.append("

"); +- } +- +- // Output it +- if (device.write(header.toUtf8()) == -1) { +- m_error = device.errorString(); +- return false; +- } +- } +- +- // Output the entries in this group +- for (const auto entry : entries) { +- auto item = QString("

"); +- +- // Begin formatting this item into HTML +- item.append(PixmapToHTML(entry->iconPixmap(IconSize::Medium))); +- item.append(" "); +- item.append(entry->title().toHtmlEscaped()); +- item.append("

\n" +- ""); +- +- // Output the fixed fields +- const auto& u = entry->username(); +- if (!u.isEmpty()) { +- item.append(""); +- } +- +- const auto& p = entry->password(); +- if (!p.isEmpty()) { +- item.append(""); +- } +- +- const auto& r = entry->url(); +- if (!r.isEmpty()) { +- item.append(""); +- } +- +- const auto& n = entry->notes(); +- if (!n.isEmpty()) { +- item.append(""); +- } +- +- // Now add the attributes (if there are any) +- const auto* const attr = entry->attributes(); +- if (attr && !attr->customKeys().isEmpty()) { +- for (const auto& key : attr->customKeys()) { +- item.append(""); +- } +- } +- +- // Done with this entry +- item.append("
"); +- item.append(QObject::tr("User name")); +- item.append(""); +- item.append(entry->username().toHtmlEscaped()); +- item.append("
"); +- item.append(QObject::tr("Password")); +- item.append(""); +- item.append(entry->password().toHtmlEscaped()); +- item.append("
"); +- item.append(QObject::tr("URL")); +- item.append(""); +- +- // Restrict the length of what we display of the URL - +- // even from a paper backup, nobody will every type in +- // more than 100 characters of a URL +- constexpr auto maxlen = 100; +- if (r.size() <= maxlen) { +- item.append(r.toHtmlEscaped()); +- } else { +- item.append(r.mid(0, maxlen).toHtmlEscaped()); +- item.append("…"); +- } +- +- item.append("
"); +- item.append(QObject::tr("Notes")); +- item.append(""); +- item.append(entry->notes().toHtmlEscaped().replace("\n", "
")); +- item.append("
"); +- item.append(key.toHtmlEscaped()); +- item.append(""); +- item.append(attr->value(key).toHtmlEscaped().replace("\n", "
")); +- item.append("
\n"); +- if (device.write(item.toUtf8()) == -1) { +- m_error = device.errorString(); +- return false; +- } +- } +- +- // Recursively output the child groups +- const auto& children = group.children(); +- for (const auto child : children) { +- if (child && !writeGroup(device, *child, path)) { +- return false; +- } +- } +- +- return true; +-} +diff -urNr keepassxc-2.6.4-orig/src/format/HtmlExporter.h keepassxc-2.6.4-patched/src/format/HtmlExporter.h +--- keepassxc-2.6.4-orig/src/format/HtmlExporter.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/HtmlExporter.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,41 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_HTMLEXPORTER_H +-#define KEEPASSX_HTMLEXPORTER_H +- +-#include +-#include +- +-class Database; +-class Group; +-class QIODevice; +- +-class HtmlExporter +-{ +-public: +- bool exportDatabase(const QString& filename, const QSharedPointer& db); +- QString errorString() const; +- +-private: +- bool exportDatabase(QIODevice* device, const QSharedPointer& db); +- bool writeGroup(QIODevice& device, const Group& group, QString path = QString()); +- +- QString m_error; +-}; +- +-#endif // KEEPASSX_HTMLEXPORTER_H +diff -urNr keepassxc-2.6.4-orig/src/format/Kdbx3Reader.cpp keepassxc-2.6.4-patched/src/format/Kdbx3Reader.cpp +--- keepassxc-2.6.4-orig/src/format/Kdbx3Reader.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/Kdbx3Reader.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,213 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * Copyright (C) 2010 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "Kdbx3Reader.h" +- +-#include "core/AsyncTask.h" +-#include "core/Endian.h" +-#include "core/Group.h" +-#include "crypto/CryptoHash.h" +-#include "format/KdbxXmlReader.h" +-#include "format/KeePass2RandomStream.h" +-#include "streams/HashedBlockStream.h" +-#include "streams/QtIOCompressor" +-#include "streams/SymmetricCipherStream.h" +- +-#include +- +-bool Kdbx3Reader::readDatabaseImpl(QIODevice* device, +- const QByteArray& headerData, +- QSharedPointer key, +- Database* db) +-{ +- Q_ASSERT(m_kdbxVersion <= KeePass2::FILE_VERSION_3_1); +- +- if (hasError()) { +- return false; +- } +- +- // check if all required headers were present +- if (m_masterSeed.isEmpty() || m_encryptionIV.isEmpty() || m_streamStartBytes.isEmpty() +- || m_protectedStreamKey.isEmpty() || db->cipher().isNull()) { +- raiseError(tr("missing database headers")); +- return false; +- } +- +- bool ok = AsyncTask::runAndWaitForFuture([&] { return db->setKey(key, false); }); +- if (!ok) { +- raiseError(tr("Unable to calculate database key")); +- return false; +- } +- +- if (!db->challengeMasterSeed(m_masterSeed)) { +- raiseError(tr("Unable to issue challenge-response: %1").arg(db->keyError())); +- return false; +- } +- +- CryptoHash hash(CryptoHash::Sha256); +- hash.addData(m_masterSeed); +- hash.addData(db->challengeResponseKey()); +- hash.addData(db->transformedDatabaseKey()); +- QByteArray finalKey = hash.result(); +- +- SymmetricCipher::Algorithm cipher = SymmetricCipher::cipherToAlgorithm(db->cipher()); +- SymmetricCipherStream cipherStream( +- device, cipher, SymmetricCipher::algorithmMode(cipher), SymmetricCipher::Decrypt); +- if (!cipherStream.init(finalKey, m_encryptionIV)) { +- raiseError(cipherStream.errorString()); +- return false; +- } +- if (!cipherStream.open(QIODevice::ReadOnly)) { +- raiseError(cipherStream.errorString()); +- return false; +- } +- +- QByteArray realStart = cipherStream.read(32); +- +- if (realStart != m_streamStartBytes) { +- raiseError(tr("Invalid credentials were provided, please try again.\n" +- "If this reoccurs, then your database file may be corrupt.")); +- return false; +- } +- +- HashedBlockStream hashedStream(&cipherStream); +- if (!hashedStream.open(QIODevice::ReadOnly)) { +- raiseError(hashedStream.errorString()); +- return false; +- } +- +- QIODevice* xmlDevice = nullptr; +- QScopedPointer ioCompressor; +- +- if (db->compressionAlgorithm() == Database::CompressionNone) { +- xmlDevice = &hashedStream; +- } else { +- ioCompressor.reset(new QtIOCompressor(&hashedStream)); +- ioCompressor->setStreamFormat(QtIOCompressor::GzipFormat); +- if (!ioCompressor->open(QIODevice::ReadOnly)) { +- raiseError(ioCompressor->errorString()); +- return false; +- } +- xmlDevice = ioCompressor.data(); +- } +- +- KeePass2RandomStream randomStream(KeePass2::ProtectedStreamAlgo::Salsa20); +- if (!randomStream.init(m_protectedStreamKey)) { +- raiseError(randomStream.errorString()); +- return false; +- } +- +- Q_ASSERT(xmlDevice); +- +- KdbxXmlReader xmlReader(KeePass2::FILE_VERSION_3_1); +- xmlReader.readDatabase(xmlDevice, db, &randomStream); +- +- if (xmlReader.hasError()) { +- raiseError(xmlReader.errorString()); +- return false; +- } +- +- Q_ASSERT(!xmlReader.headerHash().isEmpty() || m_kdbxVersion < KeePass2::FILE_VERSION_3_1); +- +- if (!xmlReader.headerHash().isEmpty()) { +- QByteArray headerHash = CryptoHash::hash(headerData, CryptoHash::Sha256); +- if (headerHash != xmlReader.headerHash()) { +- raiseError(tr("Header doesn't match hash")); +- return false; +- } +- } +- +- return true; +-} +- +-bool Kdbx3Reader::readHeaderField(StoreDataStream& headerStream, Database* db) +-{ +- Q_UNUSED(db); +- +- QByteArray fieldIDArray = headerStream.read(1); +- if (fieldIDArray.size() != 1) { +- raiseError(tr("Invalid header id size")); +- return false; +- } +- char fieldID = fieldIDArray.at(0); +- +- bool ok; +- auto fieldLen = Endian::readSizedInt(&headerStream, KeePass2::BYTEORDER, &ok); +- if (!ok) { +- raiseError(tr("Invalid header field length")); +- return false; +- } +- +- QByteArray fieldData; +- if (fieldLen != 0) { +- fieldData = headerStream.read(fieldLen); +- if (fieldData.size() != fieldLen) { +- raiseError(tr("Invalid header data length")); +- return false; +- } +- } +- +- bool headerEnd = false; +- switch (static_cast(fieldID)) { +- case KeePass2::HeaderFieldID::EndOfHeader: +- headerEnd = true; +- break; +- +- case KeePass2::HeaderFieldID::CipherID: +- setCipher(fieldData); +- break; +- +- case KeePass2::HeaderFieldID::CompressionFlags: +- setCompressionFlags(fieldData); +- break; +- +- case KeePass2::HeaderFieldID::MasterSeed: +- setMasterSeed(fieldData); +- break; +- +- case KeePass2::HeaderFieldID::TransformSeed: +- setTransformSeed(fieldData); +- break; +- +- case KeePass2::HeaderFieldID::TransformRounds: +- setTransformRounds(fieldData); +- break; +- +- case KeePass2::HeaderFieldID::EncryptionIV: +- setEncryptionIV(fieldData); +- break; +- +- case KeePass2::HeaderFieldID::ProtectedStreamKey: +- setProtectedStreamKey(fieldData); +- break; +- +- case KeePass2::HeaderFieldID::StreamStartBytes: +- setStreamStartBytes(fieldData); +- break; +- +- case KeePass2::HeaderFieldID::InnerRandomStreamID: +- setInnerRandomStreamID(fieldData); +- break; +- +- default: +- qWarning("Unknown header field read: id=%d", fieldID); +- break; +- } +- +- return !headerEnd; +-} +diff -urNr keepassxc-2.6.4-orig/src/format/Kdbx3Reader.h keepassxc-2.6.4-patched/src/format/Kdbx3Reader.h +--- keepassxc-2.6.4-orig/src/format/Kdbx3Reader.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/Kdbx3Reader.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,41 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * Copyright (C) 2010 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_KDBX3READER_H +-#define KEEPASSX_KDBX3READER_H +- +-#include "format/KdbxReader.h" +- +-/** +- * KDBX 2/3 reader implementation. +- */ +-class Kdbx3Reader : public KdbxReader +-{ +- Q_DECLARE_TR_FUNCTIONS(Kdbx3Reader) +- +-public: +- bool readDatabaseImpl(QIODevice* device, +- const QByteArray& headerData, +- QSharedPointer key, +- Database* db) override; +- +-protected: +- bool readHeaderField(StoreDataStream& headerStream, Database* db) override; +-}; +- +-#endif // KEEPASSX_KDBX3READER_H +diff -urNr keepassxc-2.6.4-orig/src/format/Kdbx3Writer.cpp keepassxc-2.6.4-patched/src/format/Kdbx3Writer.cpp +--- keepassxc-2.6.4-orig/src/format/Kdbx3Writer.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/Kdbx3Writer.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,164 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * Copyright (C) 2010 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "Kdbx3Writer.h" +- +-#include +- +-#include "core/Database.h" +-#include "crypto/CryptoHash.h" +-#include "crypto/Random.h" +-#include "format/KdbxXmlWriter.h" +-#include "format/KeePass2.h" +-#include "format/KeePass2RandomStream.h" +-#include "streams/HashedBlockStream.h" +-#include "streams/QtIOCompressor" +-#include "streams/SymmetricCipherStream.h" +- +-bool Kdbx3Writer::writeDatabase(QIODevice* device, Database* db) +-{ +- m_error = false; +- m_errorStr.clear(); +- +- QByteArray masterSeed = randomGen()->randomArray(32); +- QByteArray encryptionIV = randomGen()->randomArray(16); +- QByteArray protectedStreamKey = randomGen()->randomArray(32); +- QByteArray startBytes = randomGen()->randomArray(32); +- QByteArray endOfHeader = "\r\n\r\n"; +- +- if (!db->challengeMasterSeed(masterSeed)) { +- raiseError(tr("Unable to issue challenge-response: %1").arg(db->keyError())); +- return false; +- } +- +- if (!db->setKey(db->key(), false, true)) { +- raiseError(tr("Unable to calculate database key")); +- return false; +- } +- +- // generate transformed database key +- CryptoHash hash(CryptoHash::Sha256); +- hash.addData(masterSeed); +- hash.addData(db->challengeResponseKey()); +- Q_ASSERT(!db->transformedDatabaseKey().isEmpty()); +- hash.addData(db->transformedDatabaseKey()); +- QByteArray finalKey = hash.result(); +- +- // write header +- QBuffer header; +- header.open(QIODevice::WriteOnly); +- +- writeMagicNumbers(&header, KeePass2::SIGNATURE_1, KeePass2::SIGNATURE_2, formatVersion()); +- +- CHECK_RETURN_FALSE(writeHeaderField(&header, KeePass2::HeaderFieldID::CipherID, db->cipher().toRfc4122())); +- CHECK_RETURN_FALSE( +- writeHeaderField(&header, +- KeePass2::HeaderFieldID::CompressionFlags, +- Endian::sizedIntToBytes(db->compressionAlgorithm(), KeePass2::BYTEORDER))); +- auto kdf = db->kdf(); +- CHECK_RETURN_FALSE(writeHeaderField(&header, KeePass2::HeaderFieldID::MasterSeed, masterSeed)); +- CHECK_RETURN_FALSE(writeHeaderField(&header, KeePass2::HeaderFieldID::TransformSeed, kdf->seed())); +- CHECK_RETURN_FALSE(writeHeaderField(&header, +- KeePass2::HeaderFieldID::TransformRounds, +- Endian::sizedIntToBytes(kdf->rounds(), KeePass2::BYTEORDER))); +- CHECK_RETURN_FALSE(writeHeaderField(&header, KeePass2::HeaderFieldID::EncryptionIV, encryptionIV)); +- CHECK_RETURN_FALSE( +- writeHeaderField(&header, KeePass2::HeaderFieldID::ProtectedStreamKey, protectedStreamKey)); +- CHECK_RETURN_FALSE(writeHeaderField(&header, KeePass2::HeaderFieldID::StreamStartBytes, startBytes)); +- CHECK_RETURN_FALSE(writeHeaderField( +- &header, +- KeePass2::HeaderFieldID::InnerRandomStreamID, +- Endian::sizedIntToBytes(static_cast(KeePass2::ProtectedStreamAlgo::Salsa20), +- KeePass2::BYTEORDER))); +- CHECK_RETURN_FALSE(writeHeaderField(&header, KeePass2::HeaderFieldID::EndOfHeader, endOfHeader)); +- header.close(); +- +- // write header data +- CHECK_RETURN_FALSE(writeData(device, header.data())); +- +- // hash header +- const QByteArray headerHash = CryptoHash::hash(header.data(), CryptoHash::Sha256); +- +- // write cipher stream +- SymmetricCipher::Algorithm algo = SymmetricCipher::cipherToAlgorithm(db->cipher()); +- SymmetricCipherStream cipherStream(device, algo, SymmetricCipher::algorithmMode(algo), SymmetricCipher::Encrypt); +- cipherStream.init(finalKey, encryptionIV); +- if (!cipherStream.open(QIODevice::WriteOnly)) { +- raiseError(cipherStream.errorString()); +- return false; +- } +- CHECK_RETURN_FALSE(writeData(&cipherStream, startBytes)); +- +- HashedBlockStream hashedStream(&cipherStream); +- if (!hashedStream.open(QIODevice::WriteOnly)) { +- raiseError(hashedStream.errorString()); +- return false; +- } +- +- QIODevice* outputDevice = nullptr; +- QScopedPointer ioCompressor; +- +- if (db->compressionAlgorithm() == Database::CompressionNone) { +- outputDevice = &hashedStream; +- } else { +- ioCompressor.reset(new QtIOCompressor(&hashedStream)); +- ioCompressor->setStreamFormat(QtIOCompressor::GzipFormat); +- if (!ioCompressor->open(QIODevice::WriteOnly)) { +- raiseError(ioCompressor->errorString()); +- return false; +- } +- outputDevice = ioCompressor.data(); +- } +- +- Q_ASSERT(outputDevice); +- +- KeePass2RandomStream randomStream(KeePass2::ProtectedStreamAlgo::Salsa20); +- if (!randomStream.init(protectedStreamKey)) { +- raiseError(randomStream.errorString()); +- return false; +- } +- +- KdbxXmlWriter xmlWriter(formatVersion()); +- xmlWriter.writeDatabase(outputDevice, db, &randomStream, headerHash); +- +- // Explicitly close/reset streams so they are flushed and we can detect +- // errors. QIODevice::close() resets errorString() etc. +- if (ioCompressor) { +- ioCompressor->close(); +- } +- if (!hashedStream.reset()) { +- raiseError(hashedStream.errorString()); +- return false; +- } +- if (!cipherStream.reset()) { +- raiseError(cipherStream.errorString()); +- return false; +- } +- +- if (xmlWriter.hasError()) { +- raiseError(xmlWriter.errorString()); +- return false; +- } +- +- return true; +-} +- +-quint32 Kdbx3Writer::formatVersion() +-{ +- return KeePass2::FILE_VERSION_3_1; +-} +diff -urNr keepassxc-2.6.4-orig/src/format/Kdbx3Writer.h keepassxc-2.6.4-patched/src/format/Kdbx3Writer.h +--- keepassxc-2.6.4-orig/src/format/Kdbx3Writer.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/Kdbx3Writer.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,35 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_KDBX3WRITER_H +-#define KEEPASSX_KDBX3WRITER_H +- +-#include "KdbxWriter.h" +- +-/** +- * KDBX2/3 writer implementation. +- */ +-class Kdbx3Writer : public KdbxWriter +-{ +- Q_DECLARE_TR_FUNCTIONS(Kdbx3Writer) +- +-public: +- bool writeDatabase(QIODevice* device, Database* db) override; +- quint32 formatVersion() override; +-}; +- +-#endif // KEEPASSX_KDBX3WRITER_H +diff -urNr keepassxc-2.6.4-orig/src/format/Kdbx4Reader.cpp keepassxc-2.6.4-patched/src/format/Kdbx4Reader.cpp +--- keepassxc-2.6.4-orig/src/format/Kdbx4Reader.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/Kdbx4Reader.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,424 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "Kdbx4Reader.h" +- +-#include +- +-#include "core/AsyncTask.h" +-#include "core/Endian.h" +-#include "core/Group.h" +-#include "crypto/CryptoHash.h" +-#include "format/KdbxXmlReader.h" +-#include "format/KeePass2RandomStream.h" +-#include "streams/HmacBlockStream.h" +-#include "streams/QtIOCompressor" +-#include "streams/SymmetricCipherStream.h" +- +-bool Kdbx4Reader::readDatabaseImpl(QIODevice* device, +- const QByteArray& headerData, +- QSharedPointer key, +- Database* db) +-{ +- Q_ASSERT(m_kdbxVersion == KeePass2::FILE_VERSION_4); +- +- m_binaryPool.clear(); +- +- if (hasError()) { +- return false; +- } +- +- // check if all required headers were present +- if (m_masterSeed.isEmpty() || m_encryptionIV.isEmpty() || db->cipher().isNull()) { +- raiseError(tr("missing database headers")); +- return false; +- } +- +- bool ok = AsyncTask::runAndWaitForFuture([&] { return db->setKey(key, false, false); }); +- if (!ok) { +- raiseError(tr("Unable to calculate database key: %1").arg(db->keyError())); +- return false; +- } +- +- CryptoHash hash(CryptoHash::Sha256); +- hash.addData(m_masterSeed); +- hash.addData(db->transformedDatabaseKey()); +- QByteArray finalKey = hash.result(); +- +- QByteArray headerSha256 = device->read(32); +- QByteArray headerHmac = device->read(32); +- if (headerSha256.size() != 32 || headerHmac.size() != 32) { +- raiseError(tr("Invalid header checksum size")); +- return false; +- } +- if (headerSha256 != CryptoHash::hash(headerData, CryptoHash::Sha256)) { +- raiseError(tr("Header SHA256 mismatch")); +- return false; +- } +- +- // clang-format off +- QByteArray hmacKey = KeePass2::hmacKey(m_masterSeed, db->transformedDatabaseKey()); +- if (headerHmac != CryptoHash::hmac(headerData, HmacBlockStream::getHmacKey(UINT64_MAX, hmacKey), CryptoHash::Sha256)) { +- raiseError(tr("Invalid credentials were provided, please try again.\n" +- "If this reoccurs, then your database file may be corrupt.") + " " + tr("(HMAC mismatch)")); +- return false; +- } +- HmacBlockStream hmacStream(device, hmacKey); +- if (!hmacStream.open(QIODevice::ReadOnly)) { +- raiseError(hmacStream.errorString()); +- return false; +- } +- +- SymmetricCipher::Algorithm cipher = SymmetricCipher::cipherToAlgorithm(db->cipher()); +- if (cipher == SymmetricCipher::InvalidAlgorithm) { +- raiseError(tr("Unknown cipher")); +- return false; +- } +- SymmetricCipherStream cipherStream(&hmacStream, cipher, SymmetricCipher::algorithmMode(cipher), SymmetricCipher::Decrypt); +- if (!cipherStream.init(finalKey, m_encryptionIV)) { +- raiseError(cipherStream.errorString()); +- return false; +- } +- if (!cipherStream.open(QIODevice::ReadOnly)) { +- raiseError(cipherStream.errorString()); +- return false; +- } +- // clang-format on +- +- QIODevice* xmlDevice = nullptr; +- QScopedPointer ioCompressor; +- +- if (db->compressionAlgorithm() == Database::CompressionNone) { +- xmlDevice = &cipherStream; +- } else { +- ioCompressor.reset(new QtIOCompressor(&cipherStream)); +- ioCompressor->setStreamFormat(QtIOCompressor::GzipFormat); +- if (!ioCompressor->open(QIODevice::ReadOnly)) { +- raiseError(ioCompressor->errorString()); +- return false; +- } +- xmlDevice = ioCompressor.data(); +- } +- +- while (readInnerHeaderField(xmlDevice) && !hasError()) { +- } +- +- if (hasError()) { +- return false; +- } +- +- KeePass2RandomStream randomStream(m_irsAlgo); +- if (!randomStream.init(m_protectedStreamKey)) { +- raiseError(randomStream.errorString()); +- return false; +- } +- +- Q_ASSERT(xmlDevice); +- +- KdbxXmlReader xmlReader(KeePass2::FILE_VERSION_4, binaryPool()); +- xmlReader.readDatabase(xmlDevice, db, &randomStream); +- +- if (xmlReader.hasError()) { +- raiseError(xmlReader.errorString()); +- return false; +- } +- +- return true; +-} +- +-bool Kdbx4Reader::readHeaderField(StoreDataStream& device, Database* db) +-{ +- QByteArray fieldIDArray = device.read(1); +- if (fieldIDArray.size() != 1) { +- raiseError(tr("Invalid header id size")); +- return false; +- } +- char fieldID = fieldIDArray.at(0); +- +- bool ok; +- auto fieldLen = Endian::readSizedInt(&device, KeePass2::BYTEORDER, &ok); +- if (!ok) { +- raiseError(tr("Invalid header field length")); +- return false; +- } +- +- QByteArray fieldData; +- if (fieldLen != 0) { +- fieldData = device.read(fieldLen); +- if (static_cast(fieldData.size()) != fieldLen) { +- raiseError(tr("Invalid header data length")); +- return false; +- } +- } +- +- switch (static_cast(fieldID)) { +- case KeePass2::HeaderFieldID::EndOfHeader: +- return false; +- +- case KeePass2::HeaderFieldID::CipherID: +- setCipher(fieldData); +- break; +- +- case KeePass2::HeaderFieldID::CompressionFlags: +- setCompressionFlags(fieldData); +- break; +- +- case KeePass2::HeaderFieldID::MasterSeed: +- setMasterSeed(fieldData); +- break; +- +- case KeePass2::HeaderFieldID::EncryptionIV: +- setEncryptionIV(fieldData); +- break; +- +- case KeePass2::HeaderFieldID::KdfParameters: { +- QBuffer bufIoDevice(&fieldData); +- if (!bufIoDevice.open(QIODevice::ReadOnly)) { +- raiseError(tr("Failed to open buffer for KDF parameters in header")); +- return false; +- } +- QVariantMap kdfParams = readVariantMap(&bufIoDevice); +- QSharedPointer kdf = KeePass2::kdfFromParameters(kdfParams); +- if (!kdf) { +- raiseError(tr("Unsupported key derivation function (KDF) or invalid parameters")); +- return false; +- } +- db->setKdf(kdf); +- break; +- } +- +- case KeePass2::HeaderFieldID::PublicCustomData: { +- QBuffer variantBuffer; +- variantBuffer.setBuffer(&fieldData); +- variantBuffer.open(QBuffer::ReadOnly); +- QVariantMap data = readVariantMap(&variantBuffer); +- db->setPublicCustomData(data); +- break; +- } +- +- case KeePass2::HeaderFieldID::ProtectedStreamKey: +- case KeePass2::HeaderFieldID::TransformRounds: +- case KeePass2::HeaderFieldID::TransformSeed: +- case KeePass2::HeaderFieldID::StreamStartBytes: +- case KeePass2::HeaderFieldID::InnerRandomStreamID: +- raiseError(tr("Legacy header fields found in KDBX4 file.")); +- return false; +- +- default: +- qWarning("Unknown header field read: id=%d", fieldID); +- break; +- } +- +- return true; +-} +- +-/** +- * Helper method for reading KDBX4 inner header fields. +- * +- * @param device input device +- * @return true if there are more inner header fields +- */ +-bool Kdbx4Reader::readInnerHeaderField(QIODevice* device) +-{ +- QByteArray fieldIDArray = device->read(1); +- if (fieldIDArray.size() != 1) { +- raiseError(tr("Invalid inner header id size")); +- return false; +- } +- auto fieldID = static_cast(fieldIDArray.at(0)); +- +- bool ok; +- auto fieldLen = Endian::readSizedInt(device, KeePass2::BYTEORDER, &ok); +- if (!ok) { +- raiseError(tr("Invalid inner header field length")); +- return false; +- } +- +- QByteArray fieldData; +- if (fieldLen != 0) { +- fieldData = device->read(fieldLen); +- if (static_cast(fieldData.size()) != fieldLen) { +- raiseError(tr("Invalid header data length")); +- return false; +- } +- } +- +- switch (fieldID) { +- case KeePass2::InnerHeaderFieldID::End: +- return false; +- +- case KeePass2::InnerHeaderFieldID::InnerRandomStreamID: +- setInnerRandomStreamID(fieldData); +- break; +- +- case KeePass2::InnerHeaderFieldID::InnerRandomStreamKey: +- setProtectedStreamKey(fieldData); +- break; +- +- case KeePass2::InnerHeaderFieldID::Binary: { +- if (fieldLen < 1) { +- raiseError(tr("Invalid inner header binary size")); +- return false; +- } +- auto data = fieldData.mid(1); +- m_binaryPool.insert(QString::number(m_binaryPool.size()), data); +- break; +- } +- } +- +- return true; +-} +- +-/** +- * Helper method for reading a serialized variant map. +- * +- * @param device input device +- * @return de-serialized variant map +- */ +-QVariantMap Kdbx4Reader::readVariantMap(QIODevice* device) +-{ +- bool ok; +- quint16 version = +- Endian::readSizedInt(device, KeePass2::BYTEORDER, &ok) & KeePass2::VARIANTMAP_CRITICAL_MASK; +- quint16 maxVersion = KeePass2::VARIANTMAP_VERSION & KeePass2::VARIANTMAP_CRITICAL_MASK; +- if (!ok || (version > maxVersion)) { +- //: Translation: variant map = data structure for storing meta data +- raiseError(tr("Unsupported KeePass variant map version.")); +- return {}; +- } +- +- QVariantMap vm; +- QByteArray fieldTypeArray; +- KeePass2::VariantMapFieldType fieldType = KeePass2::VariantMapFieldType::End; +- while (((fieldTypeArray = device->read(1)).size() == 1) +- && ((fieldType = static_cast(fieldTypeArray.at(0))) +- != KeePass2::VariantMapFieldType::End)) { +- auto nameLen = Endian::readSizedInt(device, KeePass2::BYTEORDER, &ok); +- if (!ok) { +- //: Translation: variant map = data structure for storing meta data +- raiseError(tr("Invalid variant map entry name length")); +- return {}; +- } +- QByteArray nameBytes; +- if (nameLen != 0) { +- nameBytes = device->read(nameLen); +- if (static_cast(nameBytes.size()) != nameLen) { +- //: Translation: variant map = data structure for storing meta data +- raiseError(tr("Invalid variant map entry name data")); +- return {}; +- } +- } +- QString name = QString::fromUtf8(nameBytes); +- +- auto valueLen = Endian::readSizedInt(device, KeePass2::BYTEORDER, &ok); +- if (!ok) { +- //: Translation: variant map = data structure for storing meta data +- raiseError(tr("Invalid variant map entry value length")); +- return {}; +- } +- QByteArray valueBytes; +- if (valueLen != 0) { +- valueBytes = device->read(valueLen); +- if (static_cast(valueBytes.size()) != valueLen) { +- //: Translation comment: variant map = data structure for storing meta data +- raiseError(tr("Invalid variant map entry value data")); +- return {}; +- } +- } +- +- switch (fieldType) { +- case KeePass2::VariantMapFieldType::Bool: +- if (valueLen == 1) { +- vm.insert(name, QVariant(valueBytes.at(0) != 0)); +- } else { +- //: Translation: variant map = data structure for storing meta data +- raiseError(tr("Invalid variant map Bool entry value length")); +- return {}; +- } +- break; +- +- case KeePass2::VariantMapFieldType::Int32: +- if (valueLen == 4) { +- vm.insert(name, QVariant(Endian::bytesToSizedInt(valueBytes, KeePass2::BYTEORDER))); +- } else { +- //: Translation: variant map = data structure for storing meta data +- raiseError(tr("Invalid variant map Int32 entry value length")); +- return {}; +- } +- break; +- +- case KeePass2::VariantMapFieldType::UInt32: +- if (valueLen == 4) { +- vm.insert(name, QVariant(Endian::bytesToSizedInt(valueBytes, KeePass2::BYTEORDER))); +- } else { +- //: Translation: variant map = data structure for storing meta data +- raiseError(tr("Invalid variant map UInt32 entry value length")); +- return {}; +- } +- break; +- +- case KeePass2::VariantMapFieldType::Int64: +- if (valueLen == 8) { +- vm.insert(name, QVariant(Endian::bytesToSizedInt(valueBytes, KeePass2::BYTEORDER))); +- } else { +- //: Translation: variant map = data structure for storing meta data +- raiseError(tr("Invalid variant map Int64 entry value length")); +- return {}; +- } +- break; +- +- case KeePass2::VariantMapFieldType::UInt64: +- if (valueLen == 8) { +- vm.insert(name, QVariant(Endian::bytesToSizedInt(valueBytes, KeePass2::BYTEORDER))); +- } else { +- //: Translation: variant map = data structure for storing meta data +- raiseError(tr("Invalid variant map UInt64 entry value length")); +- return {}; +- } +- break; +- +- case KeePass2::VariantMapFieldType::String: +- vm.insert(name, QVariant(QString::fromUtf8(valueBytes))); +- break; +- +- case KeePass2::VariantMapFieldType::ByteArray: +- vm.insert(name, QVariant(valueBytes)); +- break; +- +- default: +- //: Translation: variant map = data structure for storing meta data +- raiseError(tr("Invalid variant map entry type")); +- return {}; +- } +- } +- +- if (fieldTypeArray.size() != 1) { +- //: Translation: variant map = data structure for storing meta data +- raiseError(tr("Invalid variant map field type size")); +- return {}; +- } +- +- return vm; +-} +- +-/** +- * @return mapping from attachment keys to binary data +- */ +-QHash Kdbx4Reader::binaryPool() const +-{ +- return m_binaryPool; +-} +diff -urNr keepassxc-2.6.4-orig/src/format/Kdbx4Reader.h keepassxc-2.6.4-patched/src/format/Kdbx4Reader.h +--- keepassxc-2.6.4-orig/src/format/Kdbx4Reader.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/Kdbx4Reader.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,49 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_KDBX4READER_H +-#define KEEPASSX_KDBX4READER_H +- +-#include "format/KdbxReader.h" +- +-#include +- +-/** +- * KDBX4 reader implementation. +- */ +-class Kdbx4Reader : public KdbxReader +-{ +- Q_DECLARE_TR_FUNCTIONS(Kdbx4Reader) +- +-public: +- bool readDatabaseImpl(QIODevice* device, +- const QByteArray& headerData, +- QSharedPointer key, +- Database* db) override; +- QHash binaryPool() const; +- +-protected: +- bool readHeaderField(StoreDataStream& headerStream, Database* db) override; +- +-private: +- bool readInnerHeaderField(QIODevice* device); +- QVariantMap readVariantMap(QIODevice* device); +- +- QHash m_binaryPool; +-}; +- +-#endif // KEEPASSX_KDBX4READER_H +diff -urNr keepassxc-2.6.4-orig/src/format/Kdbx4Writer.cpp keepassxc-2.6.4-patched/src/format/Kdbx4Writer.cpp +--- keepassxc-2.6.4-orig/src/format/Kdbx4Writer.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/Kdbx4Writer.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,318 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "Kdbx4Writer.h" +- +-#include +-#include +- +-#include "core/CustomData.h" +-#include "core/Database.h" +-#include "core/Metadata.h" +-#include "crypto/CryptoHash.h" +-#include "crypto/Random.h" +-#include "format/KdbxXmlWriter.h" +-#include "format/KeePass2RandomStream.h" +-#include "streams/HmacBlockStream.h" +-#include "streams/QtIOCompressor" +-#include "streams/SymmetricCipherStream.h" +- +-bool Kdbx4Writer::writeDatabase(QIODevice* device, Database* db) +-{ +- m_error = false; +- m_errorStr.clear(); +- +- SymmetricCipher::Algorithm algo = SymmetricCipher::cipherToAlgorithm(db->cipher()); +- if (algo == SymmetricCipher::InvalidAlgorithm) { +- raiseError(tr("Invalid symmetric cipher algorithm.")); +- return false; +- } +- int ivSize = SymmetricCipher::algorithmIvSize(algo); +- if (ivSize < 0) { +- raiseError(tr("Invalid symmetric cipher IV size.", "IV = Initialization Vector for symmetric cipher")); +- return false; +- } +- +- QByteArray masterSeed = randomGen()->randomArray(32); +- QByteArray encryptionIV = randomGen()->randomArray(ivSize); +- QByteArray protectedStreamKey = randomGen()->randomArray(64); +- QByteArray endOfHeader = "\r\n\r\n"; +- +- if (!db->setKey(db->key(), false, true)) { +- raiseError(tr("Unable to calculate database key: %1").arg(db->keyError())); +- return false; +- } +- +- // generate transformed database key +- CryptoHash hash(CryptoHash::Sha256); +- hash.addData(masterSeed); +- Q_ASSERT(!db->transformedDatabaseKey().isEmpty()); +- hash.addData(db->transformedDatabaseKey()); +- QByteArray finalKey = hash.result(); +- +- // write header +- QByteArray headerData; +- { +- QBuffer header; +- header.open(QIODevice::WriteOnly); +- +- writeMagicNumbers(&header, KeePass2::SIGNATURE_1, KeePass2::SIGNATURE_2, formatVersion()); +- +- CHECK_RETURN_FALSE( +- writeHeaderField(&header, KeePass2::HeaderFieldID::CipherID, db->cipher().toRfc4122())); +- CHECK_RETURN_FALSE(writeHeaderField( +- &header, +- KeePass2::HeaderFieldID::CompressionFlags, +- Endian::sizedIntToBytes(static_cast(db->compressionAlgorithm()), KeePass2::BYTEORDER))); +- CHECK_RETURN_FALSE(writeHeaderField(&header, KeePass2::HeaderFieldID::MasterSeed, masterSeed)); +- CHECK_RETURN_FALSE(writeHeaderField(&header, KeePass2::HeaderFieldID::EncryptionIV, encryptionIV)); +- +- // convert current Kdf to basic parameters +- QVariantMap kdfParams = KeePass2::kdfToParameters(db->kdf()); +- QByteArray kdfParamBytes; +- if (!serializeVariantMap(kdfParams, kdfParamBytes)) { +- //: Translation comment: variant map = data structure for storing meta data +- raiseError(tr("Failed to serialize KDF parameters variant map")); +- return false; +- } +- +- CHECK_RETURN_FALSE(writeHeaderField(&header, KeePass2::HeaderFieldID::KdfParameters, kdfParamBytes)); +- QVariantMap publicCustomData = db->publicCustomData(); +- if (!publicCustomData.isEmpty()) { +- QByteArray serialized; +- serializeVariantMap(publicCustomData, serialized); +- CHECK_RETURN_FALSE( +- writeHeaderField(&header, KeePass2::HeaderFieldID::PublicCustomData, serialized)); +- } +- +- CHECK_RETURN_FALSE(writeHeaderField(&header, KeePass2::HeaderFieldID::EndOfHeader, endOfHeader)); +- header.close(); +- headerData = header.data(); +- } +- CHECK_RETURN_FALSE(writeData(device, headerData)); +- +- // hash header +- QByteArray headerHash = CryptoHash::hash(headerData, CryptoHash::Sha256); +- +- // write HMAC-authenticated cipher stream +- QByteArray hmacKey = KeePass2::hmacKey(masterSeed, db->transformedDatabaseKey()); +- QByteArray headerHmac = +- CryptoHash::hmac(headerData, HmacBlockStream::getHmacKey(UINT64_MAX, hmacKey), CryptoHash::Sha256); +- CHECK_RETURN_FALSE(writeData(device, headerHash)); +- CHECK_RETURN_FALSE(writeData(device, headerHmac)); +- +- QScopedPointer hmacBlockStream; +- QScopedPointer cipherStream; +- +- hmacBlockStream.reset(new HmacBlockStream(device, hmacKey)); +- if (!hmacBlockStream->open(QIODevice::WriteOnly)) { +- raiseError(hmacBlockStream->errorString()); +- return false; +- } +- +- cipherStream.reset(new SymmetricCipherStream( +- hmacBlockStream.data(), algo, SymmetricCipher::algorithmMode(algo), SymmetricCipher::Encrypt)); +- +- if (!cipherStream->init(finalKey, encryptionIV)) { +- raiseError(cipherStream->errorString()); +- return false; +- } +- if (!cipherStream->open(QIODevice::WriteOnly)) { +- raiseError(cipherStream->errorString()); +- return false; +- } +- +- QIODevice* outputDevice = nullptr; +- QScopedPointer ioCompressor; +- +- if (db->compressionAlgorithm() == Database::CompressionNone) { +- outputDevice = cipherStream.data(); +- } else { +- ioCompressor.reset(new QtIOCompressor(cipherStream.data())); +- ioCompressor->setStreamFormat(QtIOCompressor::GzipFormat); +- if (!ioCompressor->open(QIODevice::WriteOnly)) { +- raiseError(ioCompressor->errorString()); +- return false; +- } +- outputDevice = ioCompressor.data(); +- } +- +- Q_ASSERT(outputDevice); +- +- CHECK_RETURN_FALSE(writeInnerHeaderField( +- outputDevice, +- KeePass2::InnerHeaderFieldID::InnerRandomStreamID, +- Endian::sizedIntToBytes(static_cast(KeePass2::ProtectedStreamAlgo::ChaCha20), KeePass2::BYTEORDER))); +- CHECK_RETURN_FALSE( +- writeInnerHeaderField(outputDevice, KeePass2::InnerHeaderFieldID::InnerRandomStreamKey, protectedStreamKey)); +- +- // Write attachments to the inner header +- writeAttachments(outputDevice, db); +- +- CHECK_RETURN_FALSE(writeInnerHeaderField(outputDevice, KeePass2::InnerHeaderFieldID::End, QByteArray())); +- +- KeePass2RandomStream randomStream(KeePass2::ProtectedStreamAlgo::ChaCha20); +- if (!randomStream.init(protectedStreamKey)) { +- raiseError(randomStream.errorString()); +- return false; +- } +- +- KdbxXmlWriter xmlWriter(formatVersion()); +- xmlWriter.writeDatabase(outputDevice, db, &randomStream, headerHash); +- +- // Explicitly close/reset streams so they are flushed and we can detect +- // errors. QIODevice::close() resets errorString() etc. +- if (ioCompressor) { +- ioCompressor->close(); +- } +- if (!cipherStream->reset()) { +- raiseError(cipherStream->errorString()); +- return false; +- } +- if (!hmacBlockStream->reset()) { +- raiseError(hmacBlockStream->errorString()); +- return false; +- } +- +- if (xmlWriter.hasError()) { +- raiseError(xmlWriter.errorString()); +- return false; +- } +- +- return true; +-} +- +-/** +- * Write KDBX4 inner header field. +- * +- * @param device output device +- * @param fieldId field identifier +- * @param data header payload +- * @return true on success +- */ +-bool Kdbx4Writer::writeInnerHeaderField(QIODevice* device, KeePass2::InnerHeaderFieldID fieldId, const QByteArray& data) +-{ +- QByteArray fieldIdArr; +- fieldIdArr[0] = static_cast(fieldId); +- CHECK_RETURN_FALSE(writeData(device, fieldIdArr)); +- CHECK_RETURN_FALSE( +- writeData(device, Endian::sizedIntToBytes(static_cast(data.size()), KeePass2::BYTEORDER))); +- CHECK_RETURN_FALSE(writeData(device, data)); +- +- return true; +-} +- +-void Kdbx4Writer::writeAttachments(QIODevice* device, Database* db) +-{ +- const QList allEntries = db->rootGroup()->entriesRecursive(true); +- QSet writtenAttachments; +- +- for (Entry* entry : allEntries) { +- const QList attachmentKeys = entry->attachments()->keys(); +- for (const QString& key : attachmentKeys) { +- QByteArray data("\x01"); +- data.append(entry->attachments()->value(key)); +- +- if (writtenAttachments.contains(data)) { +- continue; +- } +- +- writeInnerHeaderField(device, KeePass2::InnerHeaderFieldID::Binary, data); +- writtenAttachments.insert(data); +- } +- } +-} +- +-/** +- * Serialize variant map to byte array. +- * +- * @param map input variant map +- * @param outputBytes output byte array +- * @return true on success +- */ +-bool Kdbx4Writer::serializeVariantMap(const QVariantMap& map, QByteArray& outputBytes) +-{ +- QBuffer buf(&outputBytes); +- buf.open(QIODevice::WriteOnly); +- CHECK_RETURN_FALSE(buf.write(Endian::sizedIntToBytes(KeePass2::VARIANTMAP_VERSION, KeePass2::BYTEORDER)) == 2); +- +- bool ok; +- QList keys = map.keys(); +- for (const auto& k : keys) { +- KeePass2::VariantMapFieldType fieldType; +- QByteArray data; +- QVariant v = map.value(k); +- switch (static_cast(v.type())) { +- case QMetaType::Type::Int: +- fieldType = KeePass2::VariantMapFieldType::Int32; +- data = Endian::sizedIntToBytes(v.toInt(&ok), KeePass2::BYTEORDER); +- CHECK_RETURN_FALSE(ok); +- break; +- case QMetaType::Type::UInt: +- fieldType = KeePass2::VariantMapFieldType::UInt32; +- data = Endian::sizedIntToBytes(v.toUInt(&ok), KeePass2::BYTEORDER); +- CHECK_RETURN_FALSE(ok); +- break; +- case QMetaType::Type::LongLong: +- fieldType = KeePass2::VariantMapFieldType::Int64; +- data = Endian::sizedIntToBytes(v.toLongLong(&ok), KeePass2::BYTEORDER); +- CHECK_RETURN_FALSE(ok); +- break; +- case QMetaType::Type::ULongLong: +- fieldType = KeePass2::VariantMapFieldType::UInt64; +- data = Endian::sizedIntToBytes(v.toULongLong(&ok), KeePass2::BYTEORDER); +- CHECK_RETURN_FALSE(ok); +- break; +- case QMetaType::Type::QString: +- fieldType = KeePass2::VariantMapFieldType::String; +- data = v.toString().toUtf8(); +- break; +- case QMetaType::Type::Bool: +- fieldType = KeePass2::VariantMapFieldType::Bool; +- data = QByteArray(1, static_cast(v.toBool() ? '\1' : '\0')); +- break; +- case QMetaType::Type::QByteArray: +- fieldType = KeePass2::VariantMapFieldType::ByteArray; +- data = v.toByteArray(); +- break; +- default: +- qWarning("Unknown object type %d in QVariantMap", v.type()); +- return false; +- } +- QByteArray typeBytes; +- typeBytes[0] = static_cast(fieldType); +- QByteArray nameBytes = k.toUtf8(); +- QByteArray nameLenBytes = Endian::sizedIntToBytes(nameBytes.size(), KeePass2::BYTEORDER); +- QByteArray dataLenBytes = Endian::sizedIntToBytes(data.size(), KeePass2::BYTEORDER); +- +- CHECK_RETURN_FALSE(buf.write(typeBytes) == 1); +- CHECK_RETURN_FALSE(buf.write(nameLenBytes) == 4); +- CHECK_RETURN_FALSE(buf.write(nameBytes) == nameBytes.size()); +- CHECK_RETURN_FALSE(buf.write(dataLenBytes) == 4); +- CHECK_RETURN_FALSE(buf.write(data) == data.size()); +- } +- +- QByteArray endBytes; +- endBytes[0] = static_cast(KeePass2::VariantMapFieldType::End); +- CHECK_RETURN_FALSE(buf.write(endBytes) == 1); +- return true; +-} +- +-quint32 Kdbx4Writer::formatVersion() +-{ +- return KeePass2::FILE_VERSION_4; +-} +diff -urNr keepassxc-2.6.4-orig/src/format/Kdbx4Writer.h keepassxc-2.6.4-patched/src/format/Kdbx4Writer.h +--- keepassxc-2.6.4-orig/src/format/Kdbx4Writer.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/Kdbx4Writer.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,40 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_KDBX4WRITER_H +-#define KEEPASSX_KDBX4WRITER_H +- +-#include "KdbxWriter.h" +- +-/** +- * KDBX4 writer implementation. +- */ +-class Kdbx4Writer : public KdbxWriter +-{ +- Q_DECLARE_TR_FUNCTIONS(Kdbx4Writer) +- +-public: +- bool writeDatabase(QIODevice* device, Database* db) override; +- quint32 formatVersion() override; +- +-private: +- bool writeInnerHeaderField(QIODevice* device, KeePass2::InnerHeaderFieldID fieldId, const QByteArray& data); +- void writeAttachments(QIODevice* device, Database* db); +- static bool serializeVariantMap(const QVariantMap& map, QByteArray& outputBytes); +-}; +- +-#endif // KEEPASSX_KDBX4WRITER_H +diff -urNr keepassxc-2.6.4-orig/src/format/KdbxReader.cpp keepassxc-2.6.4-patched/src/format/KdbxReader.cpp +--- keepassxc-2.6.4-orig/src/format/KdbxReader.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/KdbxReader.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,258 +0,0 @@ +-#include +- +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "KdbxReader.h" +-#include "core/Database.h" +-#include "core/Endian.h" +- +-#include +- +-#define UUID_LENGTH 16 +- +-/** +- * Read KDBX magic header numbers from a device. +- * +- * @param device input device +- * @param sig1 KDBX signature 1 +- * @param sig2 KDBX signature 2 +- * @param version KDBX version +- * @return true if magic numbers were read successfully +- */ +-bool KdbxReader::readMagicNumbers(QIODevice* device, quint32& sig1, quint32& sig2, quint32& version) +-{ +- bool ok; +- sig1 = Endian::readSizedInt(device, KeePass2::BYTEORDER, &ok); +- if (!ok) { +- return false; +- } +- +- sig2 = Endian::readSizedInt(device, KeePass2::BYTEORDER, &ok); +- if (!ok) { +- return false; +- } +- +- version = Endian::readSizedInt(device, KeePass2::BYTEORDER, &ok); +- +- return ok; +-} +- +-/** +- * Read KDBX stream from device. +- * The device will automatically be reset to 0 before reading. +- * +- * @param device input device +- * @param key database encryption composite key +- * @param db database to read into +- * @return true on success +- */ +-bool KdbxReader::readDatabase(QIODevice* device, QSharedPointer key, Database* db) +-{ +- device->seek(0); +- +- m_db = db; +- m_masterSeed.clear(); +- m_encryptionIV.clear(); +- m_streamStartBytes.clear(); +- m_protectedStreamKey.clear(); +- +- StoreDataStream headerStream(device); +- headerStream.open(QIODevice::ReadOnly); +- +- // read KDBX magic numbers +- quint32 sig1, sig2; +- if (!readMagicNumbers(&headerStream, sig1, sig2, m_kdbxVersion)) { +- return false; +- } +- m_kdbxSignature = qMakePair(sig1, sig2); +- +- // mask out minor version +- m_kdbxVersion &= KeePass2::FILE_VERSION_CRITICAL_MASK; +- +- // read header fields +- while (readHeaderField(headerStream, m_db) && !hasError()) { +- } +- +- headerStream.close(); +- +- if (hasError()) { +- return false; +- } +- +- // read payload +- return readDatabaseImpl(device, headerStream.storedData(), std::move(key), db); +-} +- +-bool KdbxReader::hasError() const +-{ +- return m_error; +-} +- +-QString KdbxReader::errorString() const +-{ +- return m_errorStr; +-} +- +-KeePass2::ProtectedStreamAlgo KdbxReader::protectedStreamAlgo() const +-{ +- return m_irsAlgo; +-} +- +-/** +- * @param data stream cipher UUID as bytes +- */ +-void KdbxReader::setCipher(const QByteArray& data) +-{ +- if (data.size() != UUID_LENGTH) { +- raiseError(tr("Invalid cipher uuid length: %1 (length=%2)").arg(QString(data)).arg(data.size())); +- return; +- } +- +- QUuid uuid = QUuid::fromRfc4122(data); +- if (uuid.isNull()) { +- raiseError(tr("Unable to parse UUID: %1").arg(QString(data))); +- return; +- } +- +- if (SymmetricCipher::cipherToAlgorithm(uuid) == SymmetricCipher::InvalidAlgorithm) { +- raiseError(tr("Unsupported cipher")); +- return; +- } +- m_db->setCipher(uuid); +-} +- +-/** +- * @param data compression flags as bytes +- */ +-void KdbxReader::setCompressionFlags(const QByteArray& data) +-{ +- if (data.size() != 4) { +- raiseError(tr("Invalid compression flags length")); +- return; +- } +- auto id = Endian::bytesToSizedInt(data, KeePass2::BYTEORDER); +- +- if (id > Database::CompressionAlgorithmMax) { +- raiseError(tr("Unsupported compression algorithm")); +- return; +- } +- m_db->setCompressionAlgorithm(static_cast(id)); +-} +- +-/** +- * @param data master seed as bytes +- */ +-void KdbxReader::setMasterSeed(const QByteArray& data) +-{ +- if (data.size() != 32) { +- raiseError(tr("Invalid master seed size")); +- return; +- } +- m_masterSeed = data; +-} +- +-/** +- * @param data KDF seed as bytes +- */ +-void KdbxReader::setTransformSeed(const QByteArray& data) +-{ +- if (data.size() != 32) { +- raiseError(tr("Invalid transform seed size")); +- return; +- } +- +- auto kdf = m_db->kdf(); +- if (!kdf.isNull()) { +- kdf->setSeed(data); +- } +-} +- +-/** +- * @param data KDF transform rounds as bytes +- */ +-void KdbxReader::setTransformRounds(const QByteArray& data) +-{ +- if (data.size() != 8) { +- raiseError(tr("Invalid transform rounds size")); +- return; +- } +- +- auto rounds = Endian::bytesToSizedInt(data, KeePass2::BYTEORDER); +- auto kdf = m_db->kdf(); +- if (!kdf.isNull()) { +- kdf->setRounds(static_cast(rounds)); +- } +-} +- +-/** +- * @param data cipher stream IV as bytes +- */ +-void KdbxReader::setEncryptionIV(const QByteArray& data) +-{ +- m_encryptionIV = data; +-} +- +-/** +- * @param data key for random (inner) stream as bytes +- */ +-void KdbxReader::setProtectedStreamKey(const QByteArray& data) +-{ +- m_protectedStreamKey = data; +-} +- +-/** +- * @param data start bytes for cipher stream +- */ +-void KdbxReader::setStreamStartBytes(const QByteArray& data) +-{ +- if (data.size() != 32) { +- raiseError(tr("Invalid start bytes size")); +- return; +- } +- m_streamStartBytes = data; +-} +- +-/** +- * @param data id of inner cipher stream algorithm +- */ +-void KdbxReader::setInnerRandomStreamID(const QByteArray& data) +-{ +- if (data.size() != 4) { +- raiseError(tr("Invalid random stream id size")); +- return; +- } +- auto id = Endian::bytesToSizedInt(data, KeePass2::BYTEORDER); +- KeePass2::ProtectedStreamAlgo irsAlgo = KeePass2::idToProtectedStreamAlgo(id); +- if (irsAlgo == KeePass2::ProtectedStreamAlgo::InvalidProtectedStreamAlgo +- || irsAlgo == KeePass2::ProtectedStreamAlgo::ArcFourVariant) { +- raiseError(tr("Invalid inner random stream cipher")); +- return; +- } +- m_irsAlgo = irsAlgo; +-} +- +-/** +- * Raise an error. Use in case of an unexpected read error. +- * +- * @param errorMessage error message +- */ +-void KdbxReader::raiseError(const QString& errorMessage) +-{ +- m_error = true; +- m_errorStr = errorMessage; +-} +diff -urNr keepassxc-2.6.4-orig/src/format/KdbxReader.h keepassxc-2.6.4-patched/src/format/KdbxReader.h +--- keepassxc-2.6.4-orig/src/format/KdbxReader.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/KdbxReader.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,102 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_KDBXREADER_H +-#define KEEPASSXC_KDBXREADER_H +- +-#include "KeePass2.h" +-#include "keys/CompositeKey.h" +-#include "streams/StoreDataStream.h" +- +-#include +-#include +- +-class Database; +-class QIODevice; +- +-/** +- * Abstract KDBX reader base class. +- */ +-class KdbxReader +-{ +- Q_DECLARE_TR_FUNCTIONS(KdbxReader) +- +-public: +- KdbxReader() = default; +- virtual ~KdbxReader() = default; +- +- static bool readMagicNumbers(QIODevice* device, quint32& sig1, quint32& sig2, quint32& version); +- bool readDatabase(QIODevice* device, QSharedPointer key, Database* db); +- +- bool hasError() const; +- QString errorString() const; +- +- KeePass2::ProtectedStreamAlgo protectedStreamAlgo() const; +- +-protected: +- /** +- * Concrete reader implementation for reading database from device. +- * +- * @param device input device at the payload starting position +- * @param KDBX header data as bytes +- * @param key database encryption composite key +- * @param db database to read into +- * @return true on success +- */ +- virtual bool readDatabaseImpl(QIODevice* device, +- const QByteArray& headerData, +- QSharedPointer key, +- Database* db) = 0; +- +- /** +- * Read next header field from stream. +- * +- * @param headerStream input header stream +- * @param database to read header field for +- * @return true if there are more header fields +- */ +- virtual bool readHeaderField(StoreDataStream& headerStream, Database* db) = 0; +- +- virtual void setCipher(const QByteArray& data); +- virtual void setCompressionFlags(const QByteArray& data); +- virtual void setMasterSeed(const QByteArray& data); +- virtual void setTransformSeed(const QByteArray& data); +- virtual void setTransformRounds(const QByteArray& data); +- virtual void setEncryptionIV(const QByteArray& data); +- virtual void setProtectedStreamKey(const QByteArray& data); +- virtual void setStreamStartBytes(const QByteArray& data); +- virtual void setInnerRandomStreamID(const QByteArray& data); +- +- void raiseError(const QString& errorMessage); +- +- quint32 m_kdbxVersion = 0; +- +- QByteArray m_masterSeed; +- QByteArray m_encryptionIV; +- QByteArray m_streamStartBytes; +- QByteArray m_protectedStreamKey; +- KeePass2::ProtectedStreamAlgo m_irsAlgo = KeePass2::ProtectedStreamAlgo::InvalidProtectedStreamAlgo; +- +-private: +- QPair m_kdbxSignature; +- QPointer m_db; +- +- bool m_error = false; +- QString m_errorStr = ""; +-}; +- +-#endif // KEEPASSXC_KDBXREADER_H +diff -urNr keepassxc-2.6.4-orig/src/format/KdbxWriter.cpp keepassxc-2.6.4-patched/src/format/KdbxWriter.cpp +--- keepassxc-2.6.4-orig/src/format/KdbxWriter.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/KdbxWriter.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,88 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "KdbxWriter.h" +- +-#include +- +-#include "format/KdbxXmlWriter.h" +- +-bool KdbxWriter::hasError() const +-{ +- return m_error; +-} +- +-QString KdbxWriter::errorString() const +-{ +- return m_errorStr; +-} +- +-/** +- * Write KDBX magic header numbers to a device. +- * +- * @param device output device +- * @param sig1 KDBX signature 1 +- * @param sig2 KDBX signature 2 +- * @param version KDBX version +- * @return true if magic numbers were written successfully +- */ +-bool KdbxWriter::writeMagicNumbers(QIODevice* device, quint32 sig1, quint32 sig2, quint32 version) +-{ +- CHECK_RETURN_FALSE(writeData(device, Endian::sizedIntToBytes(sig1, KeePass2::BYTEORDER))); +- CHECK_RETURN_FALSE(writeData(device, Endian::sizedIntToBytes(sig2, KeePass2::BYTEORDER))); +- CHECK_RETURN_FALSE(writeData(device, Endian::sizedIntToBytes(version, KeePass2::BYTEORDER))); +- +- return true; +-} +- +-/** +- * Helper method for writing bytes to the device and raising an error +- * in case of write failure. +- * +- * @param device output device +- * @param data byte contents +- * @return true on success +- */ +-bool KdbxWriter::writeData(QIODevice* device, const QByteArray& data) +-{ +- if (device->write(data) != data.size()) { +- raiseError(device->errorString()); +- return false; +- } +- return true; +-} +- +-void KdbxWriter::extractDatabase(QByteArray& xmlOutput, Database* db) +-{ +- QBuffer buffer; +- buffer.setBuffer(&xmlOutput); +- buffer.open(QIODevice::WriteOnly); +- KdbxXmlWriter writer(formatVersion()); +- writer.disableInnerStreamProtection(true); +- writer.writeDatabase(&buffer, db); +-} +- +-/** +- * Raise an error. Use in case of an unexpected write error. +- * +- * @param errorMessage error message +- */ +-void KdbxWriter::raiseError(const QString& errorMessage) +-{ +- m_error = true; +- m_errorStr = errorMessage; +-} +diff -urNr keepassxc-2.6.4-orig/src/format/KdbxWriter.h keepassxc-2.6.4-patched/src/format/KdbxWriter.h +--- keepassxc-2.6.4-orig/src/format/KdbxWriter.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/KdbxWriter.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,96 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_KDBXWRITER_H +-#define KEEPASSXC_KDBXWRITER_H +- +-#include "KeePass2.h" +-#include "core/Endian.h" +- +-#include +- +-// clang-format off +-#define CHECK_RETURN_FALSE(x) if (!(x)) return false; +-// clang-format on +- +-class QIODevice; +-class Database; +- +-/** +- * Abstract KDBX writer base class. +- */ +-class KdbxWriter +-{ +- Q_DECLARE_TR_FUNCTIONS(KdbxWriter) +- +-public: +- KdbxWriter() = default; +- virtual ~KdbxWriter() = default; +- +- bool writeMagicNumbers(QIODevice* device, quint32 sig1, quint32 sig2, quint32 version); +- +- /** +- * Write a database to a device in KDBX format. +- * +- * @param device output device +- * @param db source database +- * @return true on success +- */ +- virtual bool writeDatabase(QIODevice* device, Database* db) = 0; +- +- /** +- * Get the database format version for the writer. +- */ +- virtual quint32 formatVersion() = 0; +- +- void extractDatabase(QByteArray& xmlOutput, Database* db); +- +- bool hasError() const; +- QString errorString() const; +- +-protected: +- /** +- * Helper method for writing a KDBX header field to a device. +- * +- * @tparam SizedQInt field width +- * @param device output device +- * @param fieldId field identifier +- * @param data field contents +- * @return true on success +- */ +- template +- bool writeHeaderField(QIODevice* device, KeePass2::HeaderFieldID fieldId, const QByteArray& data) +- { +- Q_ASSERT(static_cast(data.size()) < (1ull << (sizeof(SizedQInt) * 8))); +- +- QByteArray fieldIdArr(1, static_cast(fieldId)); +- CHECK_RETURN_FALSE(writeData(device, fieldIdArr)); +- CHECK_RETURN_FALSE(writeData( +- device, Endian::sizedIntToBytes(static_cast(data.size()), KeePass2::BYTEORDER))); +- CHECK_RETURN_FALSE(writeData(device, data)); +- +- return true; +- } +- +- bool writeData(QIODevice* device, const QByteArray& data); +- void raiseError(const QString& errorMessage); +- +- bool m_error = false; +- QString m_errorStr = ""; +-}; +- +-#endif // KEEPASSXC_KDBXWRITER_H +diff -urNr keepassxc-2.6.4-orig/src/format/KdbxXmlReader.cpp keepassxc-2.6.4-patched/src/format/KdbxXmlReader.cpp +--- keepassxc-2.6.4-orig/src/format/KdbxXmlReader.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/KdbxXmlReader.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,1188 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "KdbxXmlReader.h" +-#include "KeePass2RandomStream.h" +-#include "core/Clock.h" +-#include "core/DatabaseIcons.h" +-#include "core/Endian.h" +-#include "core/Entry.h" +-#include "core/Global.h" +-#include "core/Group.h" +-#include "core/Tools.h" +-#include "streams/QtIOCompressor" +- +-#include +-#include +-#include +- +-#define UUID_LENGTH 16 +- +-/** +- * @param version KDBX version +- */ +-KdbxXmlReader::KdbxXmlReader(quint32 version) +- : m_kdbxVersion(version) +-{ +-} +- +-/** +- * @param version KDBX version +- * @param binaryPool binary pool +- */ +-KdbxXmlReader::KdbxXmlReader(quint32 version, QHash binaryPool) +- : m_kdbxVersion(version) +- , m_binaryPool(std::move(binaryPool)) +-{ +-} +- +-/** +- * Read XML contents from a file into a new database. +- * +- * @param device input file +- * @return pointer to the new database +- */ +-QSharedPointer KdbxXmlReader::readDatabase(const QString& filename) +-{ +- QFile file(filename); +- file.open(QIODevice::ReadOnly); +- return readDatabase(&file); +-} +- +-/** +- * Read XML stream from a device into a new database. +- * +- * @param device input device +- * @return pointer to the new database +- */ +-QSharedPointer KdbxXmlReader::readDatabase(QIODevice* device) +-{ +- auto db = QSharedPointer::create(); +- readDatabase(device, db.data()); +- return db; +-} +- +-/** +- * Read XML contents from a device into a given database using a \link KeePass2RandomStream. +- * +- * @param device input device +- * @param db database to read into +- * @param randomStream random stream to use for decryption +- */ +-void KdbxXmlReader::readDatabase(QIODevice* device, Database* db, KeePass2RandomStream* randomStream) +-{ +- m_error = false; +- m_errorStr.clear(); +- +- m_xml.clear(); +- m_xml.setDevice(device); +- +- m_db = db; +- m_meta = m_db->metadata(); +- m_meta->setUpdateDatetime(false); +- +- m_randomStream = randomStream; +- m_headerHash.clear(); +- +- m_tmpParent.reset(new Group()); +- +- bool rootGroupParsed = false; +- +- if (m_xml.hasError()) { +- raiseError(tr("XML parsing failure: %1").arg(m_xml.error())); +- return; +- } +- +- if (m_xml.readNextStartElement() && m_xml.name() == "KeePassFile") { +- rootGroupParsed = parseKeePassFile(); +- } +- +- if (!rootGroupParsed) { +- raiseError(tr("No root group")); +- return; +- } +- +- if (!m_tmpParent->children().isEmpty()) { +- qWarning("KdbxXmlReader::readDatabase: found %d invalid group reference(s)", m_tmpParent->children().size()); +- } +- +- if (!m_tmpParent->entries().isEmpty()) { +- qWarning("KdbxXmlReader::readDatabase: found %d invalid entry reference(s)", m_tmpParent->children().size()); +- } +- +- const QSet poolKeys = asConst(m_binaryPool).keys().toSet(); +- const QSet entryKeys = asConst(m_binaryMap).keys().toSet(); +- const QSet unmappedKeys = entryKeys - poolKeys; +- const QSet unusedKeys = poolKeys - entryKeys; +- +- if (!unmappedKeys.isEmpty()) { +- qWarning("Unmapped keys left."); +- } +- +- for (const QString& key : unusedKeys) { +- qWarning("KdbxXmlReader::readDatabase: found unused key \"%s\"", qPrintable(key)); +- } +- +- QHash>::const_iterator i; +- for (i = m_binaryMap.constBegin(); i != m_binaryMap.constEnd(); ++i) { +- const QPair& target = i.value(); +- target.first->attachments()->set(target.second, m_binaryPool[i.key()]); +- } +- +- m_meta->setUpdateDatetime(true); +- +- QHash::const_iterator iGroup; +- for (iGroup = m_groups.constBegin(); iGroup != m_groups.constEnd(); ++iGroup) { +- iGroup.value()->setUpdateTimeinfo(true); +- } +- +- QHash::const_iterator iEntry; +- for (iEntry = m_entries.constBegin(); iEntry != m_entries.constEnd(); ++iEntry) { +- iEntry.value()->setUpdateTimeinfo(true); +- +- const QList historyItems = iEntry.value()->historyItems(); +- for (Entry* histEntry : historyItems) { +- histEntry->setUpdateTimeinfo(true); +- } +- } +-} +- +-bool KdbxXmlReader::strictMode() const +-{ +- return m_strictMode; +-} +- +-void KdbxXmlReader::setStrictMode(bool strictMode) +-{ +- m_strictMode = strictMode; +-} +- +-bool KdbxXmlReader::hasError() const +-{ +- return m_error || m_xml.hasError(); +-} +- +-QString KdbxXmlReader::errorString() const +-{ +- if (m_error) { +- return m_errorStr; +- } +- if (m_xml.hasError()) { +- return tr("XML error:\n%1\nLine %2, column %3") +- .arg(m_xml.errorString()) +- .arg(m_xml.lineNumber()) +- .arg(m_xml.columnNumber()); +- } +- return QString(); +-} +- +-bool KdbxXmlReader::isTrueValue(const QStringRef& value) +-{ +- return value.compare(QLatin1String("true"), Qt::CaseInsensitive) == 0 || value == "1"; +-} +- +-void KdbxXmlReader::raiseError(const QString& errorMessage) +-{ +- m_error = true; +- m_errorStr = errorMessage; +-} +- +-QByteArray KdbxXmlReader::headerHash() const +-{ +- return m_headerHash; +-} +- +-bool KdbxXmlReader::parseKeePassFile() +-{ +- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "KeePassFile"); +- +- bool rootElementFound = false; +- bool rootParsedSuccessfully = false; +- +- while (!m_xml.hasError() && m_xml.readNextStartElement()) { +- if (m_xml.name() == "Meta") { +- parseMeta(); +- continue; +- } +- +- if (m_xml.name() == "Root") { +- if (rootElementFound) { +- rootParsedSuccessfully = false; +- qWarning("Multiple root elements"); +- } else { +- rootParsedSuccessfully = parseRoot(); +- rootElementFound = true; +- } +- continue; +- } +- +- skipCurrentElement(); +- } +- +- return rootParsedSuccessfully; +-} +- +-void KdbxXmlReader::parseMeta() +-{ +- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "Meta"); +- +- while (!m_xml.hasError() && m_xml.readNextStartElement()) { +- if (m_xml.name() == "Generator") { +- m_meta->setGenerator(readString()); +- } else if (m_xml.name() == "HeaderHash") { +- m_headerHash = readBinary(); +- } else if (m_xml.name() == "DatabaseName") { +- m_meta->setName(readString()); +- } else if (m_xml.name() == "DatabaseNameChanged") { +- m_meta->setNameChanged(readDateTime()); +- } else if (m_xml.name() == "DatabaseDescription") { +- m_meta->setDescription(readString()); +- } else if (m_xml.name() == "DatabaseDescriptionChanged") { +- m_meta->setDescriptionChanged(readDateTime()); +- } else if (m_xml.name() == "DefaultUserName") { +- m_meta->setDefaultUserName(readString()); +- } else if (m_xml.name() == "DefaultUserNameChanged") { +- m_meta->setDefaultUserNameChanged(readDateTime()); +- } else if (m_xml.name() == "MaintenanceHistoryDays") { +- m_meta->setMaintenanceHistoryDays(readNumber()); +- } else if (m_xml.name() == "Color") { +- m_meta->setColor(readColor()); +- } else if (m_xml.name() == "MasterKeyChanged") { +- m_meta->setDatabaseKeyChanged(readDateTime()); +- } else if (m_xml.name() == "MasterKeyChangeRec") { +- m_meta->setMasterKeyChangeRec(readNumber()); +- } else if (m_xml.name() == "MasterKeyChangeForce") { +- m_meta->setMasterKeyChangeForce(readNumber()); +- } else if (m_xml.name() == "MemoryProtection") { +- parseMemoryProtection(); +- } else if (m_xml.name() == "CustomIcons") { +- parseCustomIcons(); +- } else if (m_xml.name() == "RecycleBinEnabled") { +- m_meta->setRecycleBinEnabled(readBool()); +- } else if (m_xml.name() == "RecycleBinUUID") { +- m_meta->setRecycleBin(getGroup(readUuid())); +- } else if (m_xml.name() == "RecycleBinChanged") { +- m_meta->setRecycleBinChanged(readDateTime()); +- } else if (m_xml.name() == "EntryTemplatesGroup") { +- m_meta->setEntryTemplatesGroup(getGroup(readUuid())); +- } else if (m_xml.name() == "EntryTemplatesGroupChanged") { +- m_meta->setEntryTemplatesGroupChanged(readDateTime()); +- } else if (m_xml.name() == "LastSelectedGroup") { +- m_meta->setLastSelectedGroup(getGroup(readUuid())); +- } else if (m_xml.name() == "LastTopVisibleGroup") { +- m_meta->setLastTopVisibleGroup(getGroup(readUuid())); +- } else if (m_xml.name() == "HistoryMaxItems") { +- int value = readNumber(); +- if (value >= -1) { +- m_meta->setHistoryMaxItems(value); +- } else { +- qWarning("HistoryMaxItems invalid number"); +- } +- } else if (m_xml.name() == "HistoryMaxSize") { +- int value = readNumber(); +- if (value >= -1) { +- m_meta->setHistoryMaxSize(value); +- } else { +- qWarning("HistoryMaxSize invalid number"); +- } +- } else if (m_xml.name() == "Binaries") { +- parseBinaries(); +- } else if (m_xml.name() == "CustomData") { +- parseCustomData(m_meta->customData()); +- } else if (m_xml.name() == "SettingsChanged") { +- m_meta->setSettingsChanged(readDateTime()); +- } else { +- skipCurrentElement(); +- } +- } +-} +- +-void KdbxXmlReader::parseMemoryProtection() +-{ +- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "MemoryProtection"); +- +- while (!m_xml.hasError() && m_xml.readNextStartElement()) { +- if (m_xml.name() == "ProtectTitle") { +- m_meta->setProtectTitle(readBool()); +- } else if (m_xml.name() == "ProtectUserName") { +- m_meta->setProtectUsername(readBool()); +- } else if (m_xml.name() == "ProtectPassword") { +- m_meta->setProtectPassword(readBool()); +- } else if (m_xml.name() == "ProtectURL") { +- m_meta->setProtectUrl(readBool()); +- } else if (m_xml.name() == "ProtectNotes") { +- m_meta->setProtectNotes(readBool()); +- } else { +- skipCurrentElement(); +- } +- } +-} +- +-void KdbxXmlReader::parseCustomIcons() +-{ +- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "CustomIcons"); +- +- while (!m_xml.hasError() && m_xml.readNextStartElement()) { +- if (m_xml.name() == "Icon") { +- parseIcon(); +- } else { +- skipCurrentElement(); +- } +- } +-} +- +-void KdbxXmlReader::parseIcon() +-{ +- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "Icon"); +- +- QUuid uuid; +- QImage icon; +- bool uuidSet = false; +- bool iconSet = false; +- +- while (!m_xml.hasError() && m_xml.readNextStartElement()) { +- if (m_xml.name() == "UUID") { +- uuid = readUuid(); +- uuidSet = !uuid.isNull(); +- } else if (m_xml.name() == "Data") { +- icon.loadFromData(readBinary()); +- iconSet = true; +- } else { +- skipCurrentElement(); +- } +- } +- +- if (uuidSet && iconSet) { +- // Check for duplicate UUID (corruption) +- if (m_meta->hasCustomIcon(uuid)) { +- uuid = QUuid::createUuid(); +- } +- m_meta->addCustomIcon(uuid, icon); +- return; +- } +- +- raiseError(tr("Missing icon uuid or data")); +-} +- +-void KdbxXmlReader::parseBinaries() +-{ +- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "Binaries"); +- +- while (!m_xml.hasError() && m_xml.readNextStartElement()) { +- if (m_xml.name() != "Binary") { +- skipCurrentElement(); +- continue; +- } +- +- QXmlStreamAttributes attr = m_xml.attributes(); +- QString id = attr.value("ID").toString(); +- QByteArray data = isTrueValue(attr.value("Compressed")) ? readCompressedBinary() : readBinary(); +- +- if (m_binaryPool.contains(id)) { +- qWarning("KdbxXmlReader::parseBinaries: overwriting binary item \"%s\"", qPrintable(id)); +- } +- +- m_binaryPool.insert(id, data); +- } +-} +- +-void KdbxXmlReader::parseCustomData(CustomData* customData) +-{ +- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "CustomData"); +- +- while (!m_xml.hasError() && m_xml.readNextStartElement()) { +- if (m_xml.name() == "Item") { +- parseCustomDataItem(customData); +- continue; +- } +- skipCurrentElement(); +- } +-} +- +-void KdbxXmlReader::parseCustomDataItem(CustomData* customData) +-{ +- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "Item"); +- +- QString key; +- QString value; +- bool keySet = false; +- bool valueSet = false; +- +- while (!m_xml.hasError() && m_xml.readNextStartElement()) { +- if (m_xml.name() == "Key") { +- key = readString(); +- keySet = true; +- } else if (m_xml.name() == "Value") { +- value = readString(); +- valueSet = true; +- } else { +- skipCurrentElement(); +- } +- } +- +- if (keySet && valueSet) { +- customData->set(key, value); +- return; +- } +- +- raiseError(tr("Missing custom data key or value")); +-} +- +-bool KdbxXmlReader::parseRoot() +-{ +- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "Root"); +- +- bool groupElementFound = false; +- bool groupParsedSuccessfully = false; +- +- while (!m_xml.hasError() && m_xml.readNextStartElement()) { +- if (m_xml.name() == "Group") { +- if (groupElementFound) { +- groupParsedSuccessfully = false; +- raiseError(tr("Multiple group elements")); +- continue; +- } +- +- Group* rootGroup = parseGroup(); +- if (rootGroup) { +- Group* oldRoot = m_db->rootGroup(); +- m_db->setRootGroup(rootGroup); +- delete oldRoot; +- groupParsedSuccessfully = true; +- } +- +- groupElementFound = true; +- } else if (m_xml.name() == "DeletedObjects") { +- parseDeletedObjects(); +- } else { +- skipCurrentElement(); +- } +- } +- +- return groupParsedSuccessfully; +-} +- +-Group* KdbxXmlReader::parseGroup() +-{ +- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "Group"); +- +- auto group = new Group(); +- group->setUpdateTimeinfo(false); +- QList children; +- QList entries; +- while (!m_xml.hasError() && m_xml.readNextStartElement()) { +- if (m_xml.name() == "UUID") { +- QUuid uuid = readUuid(); +- if (uuid.isNull()) { +- if (m_strictMode) { +- raiseError(tr("Null group uuid")); +- } else { +- group->setUuid(QUuid::createUuid()); +- } +- } else { +- group->setUuid(uuid); +- } +- continue; +- } +- if (m_xml.name() == "Name") { +- group->setName(readString()); +- continue; +- } +- if (m_xml.name() == "Notes") { +- group->setNotes(readString()); +- continue; +- } +- if (m_xml.name() == "IconID") { +- int iconId = readNumber(); +- if (iconId < 0) { +- if (m_strictMode) { +- raiseError(tr("Invalid group icon number")); +- } +- iconId = 0; +- } else if (iconId >= databaseIcons()->count()) { +- qWarning("KdbxXmlReader::parseGroup: icon id \"%d\" not supported", iconId); +- iconId = databaseIcons()->count() - 1; +- } +- +- group->setIcon(iconId); +- continue; +- } +- if (m_xml.name() == "CustomIconUUID") { +- QUuid uuid = readUuid(); +- if (!uuid.isNull()) { +- group->setIcon(uuid); +- } +- continue; +- } +- if (m_xml.name() == "Times") { +- group->setTimeInfo(parseTimes()); +- continue; +- } +- if (m_xml.name() == "IsExpanded") { +- group->setExpanded(readBool()); +- continue; +- } +- if (m_xml.name() == "DefaultAutoTypeSequence") { +- group->setDefaultAutoTypeSequence(readString()); +- continue; +- } +- if (m_xml.name() == "EnableAutoType") { +- QString str = readString(); +- +- if (str.compare("null", Qt::CaseInsensitive) == 0) { +- group->setAutoTypeEnabled(Group::Inherit); +- } else if (str.compare("true", Qt::CaseInsensitive) == 0) { +- group->setAutoTypeEnabled(Group::Enable); +- } else if (str.compare("false", Qt::CaseInsensitive) == 0) { +- group->setAutoTypeEnabled(Group::Disable); +- } else { +- raiseError(tr("Invalid EnableAutoType value")); +- } +- continue; +- } +- if (m_xml.name() == "EnableSearching") { +- QString str = readString(); +- +- if (str.compare("null", Qt::CaseInsensitive) == 0) { +- group->setSearchingEnabled(Group::Inherit); +- } else if (str.compare("true", Qt::CaseInsensitive) == 0) { +- group->setSearchingEnabled(Group::Enable); +- } else if (str.compare("false", Qt::CaseInsensitive) == 0) { +- group->setSearchingEnabled(Group::Disable); +- } else { +- raiseError(tr("Invalid EnableSearching value")); +- } +- continue; +- } +- if (m_xml.name() == "LastTopVisibleEntry") { +- group->setLastTopVisibleEntry(getEntry(readUuid())); +- continue; +- } +- if (m_xml.name() == "Group") { +- Group* newGroup = parseGroup(); +- if (newGroup) { +- children.append(newGroup); +- } +- continue; +- } +- if (m_xml.name() == "Entry") { +- Entry* newEntry = parseEntry(false); +- if (newEntry) { +- entries.append(newEntry); +- } +- continue; +- } +- if (m_xml.name() == "CustomData") { +- parseCustomData(group->customData()); +- continue; +- } +- +- skipCurrentElement(); +- } +- +- if (group->uuid().isNull() && !m_strictMode) { +- group->setUuid(QUuid::createUuid()); +- } +- +- if (!group->uuid().isNull()) { +- Group* tmpGroup = group; +- group = getGroup(tmpGroup->uuid()); +- group->copyDataFrom(tmpGroup); +- group->setUpdateTimeinfo(false); +- delete tmpGroup; +- } else if (!hasError()) { +- raiseError(tr("No group uuid found")); +- } +- +- for (Group* child : asConst(children)) { +- child->setParent(group); +- } +- +- for (Entry* entry : asConst(entries)) { +- entry->setGroup(group); +- } +- +- return group; +-} +- +-void KdbxXmlReader::parseDeletedObjects() +-{ +- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "DeletedObjects"); +- +- while (!m_xml.hasError() && m_xml.readNextStartElement()) { +- if (m_xml.name() == "DeletedObject") { +- parseDeletedObject(); +- } else { +- skipCurrentElement(); +- } +- } +-} +- +-void KdbxXmlReader::parseDeletedObject() +-{ +- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "DeletedObject"); +- +- DeletedObject delObj{{}, {}}; +- +- while (!m_xml.hasError() && m_xml.readNextStartElement()) { +- if (m_xml.name() == "UUID") { +- QUuid uuid = readUuid(); +- if (uuid.isNull()) { +- if (m_strictMode) { +- raiseError(tr("Null DeleteObject uuid")); +- return; +- } +- continue; +- } +- delObj.uuid = uuid; +- continue; +- } +- if (m_xml.name() == "DeletionTime") { +- delObj.deletionTime = readDateTime(); +- continue; +- } +- skipCurrentElement(); +- } +- +- if (!delObj.uuid.isNull() && !delObj.deletionTime.isNull()) { +- m_db->addDeletedObject(delObj); +- return; +- } +- +- if (m_strictMode) { +- raiseError(tr("Missing DeletedObject uuid or time")); +- } +-} +- +-Entry* KdbxXmlReader::parseEntry(bool history) +-{ +- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "Entry"); +- +- auto entry = new Entry(); +- entry->setUpdateTimeinfo(false); +- QList historyItems; +- QList binaryRefs; +- +- while (!m_xml.hasError() && m_xml.readNextStartElement()) { +- if (m_xml.name() == "UUID") { +- QUuid uuid = readUuid(); +- if (uuid.isNull()) { +- if (m_strictMode) { +- raiseError(tr("Null entry uuid")); +- } else { +- entry->setUuid(QUuid::createUuid()); +- } +- } else { +- entry->setUuid(uuid); +- } +- continue; +- } +- if (m_xml.name() == "IconID") { +- int iconId = readNumber(); +- if (iconId < 0) { +- if (m_strictMode) { +- raiseError(tr("Invalid entry icon number")); +- } +- iconId = 0; +- } +- entry->setIcon(iconId); +- continue; +- } +- if (m_xml.name() == "CustomIconUUID") { +- QUuid uuid = readUuid(); +- if (!uuid.isNull()) { +- entry->setIcon(uuid); +- } +- continue; +- } +- if (m_xml.name() == "ForegroundColor") { +- entry->setForegroundColor(readColor()); +- continue; +- } +- if (m_xml.name() == "BackgroundColor") { +- entry->setBackgroundColor(readColor()); +- continue; +- } +- if (m_xml.name() == "OverrideURL") { +- entry->setOverrideUrl(readString()); +- continue; +- } +- if (m_xml.name() == "Tags") { +- entry->setTags(readString()); +- continue; +- } +- if (m_xml.name() == "Times") { +- entry->setTimeInfo(parseTimes()); +- continue; +- } +- if (m_xml.name() == "String") { +- parseEntryString(entry); +- continue; +- } +- if (m_xml.name() == "Binary") { +- QPair ref = parseEntryBinary(entry); +- if (!ref.first.isEmpty() && !ref.second.isEmpty()) { +- binaryRefs.append(ref); +- } +- continue; +- } +- if (m_xml.name() == "AutoType") { +- parseAutoType(entry); +- continue; +- } +- if (m_xml.name() == "History") { +- if (history) { +- raiseError(tr("History element in history entry")); +- } else { +- historyItems = parseEntryHistory(); +- } +- continue; +- } +- if (m_xml.name() == "CustomData") { +- parseCustomData(entry->customData()); +- continue; +- } +- skipCurrentElement(); +- } +- +- if (entry->uuid().isNull() && !m_strictMode) { +- entry->setUuid(QUuid::createUuid()); +- } +- +- if (!entry->uuid().isNull()) { +- if (history) { +- entry->setUpdateTimeinfo(false); +- } else { +- Entry* tmpEntry = entry; +- +- entry = getEntry(tmpEntry->uuid()); +- entry->copyDataFrom(tmpEntry); +- entry->setUpdateTimeinfo(false); +- +- delete tmpEntry; +- } +- } else if (!hasError()) { +- raiseError(tr("No entry uuid found")); +- } +- +- for (Entry* historyItem : asConst(historyItems)) { +- if (historyItem->uuid() != entry->uuid()) { +- if (m_strictMode) { +- raiseError(tr("History element with different uuid")); +- } else { +- historyItem->setUuid(entry->uuid()); +- } +- } +- entry->addHistoryItem(historyItem); +- } +- +- for (const StringPair& ref : asConst(binaryRefs)) { +- m_binaryMap.insertMulti(ref.first, qMakePair(entry, ref.second)); +- } +- +- return entry; +-} +- +-void KdbxXmlReader::parseEntryString(Entry* entry) +-{ +- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "String"); +- +- QString key; +- QString value; +- bool protect = false; +- bool keySet = false; +- bool valueSet = false; +- +- while (!m_xml.hasError() && m_xml.readNextStartElement()) { +- if (m_xml.name() == "Key") { +- key = readString(); +- keySet = true; +- continue; +- } +- +- if (m_xml.name() == "Value") { +- QXmlStreamAttributes attr = m_xml.attributes(); +- bool isProtected; +- bool protectInMemory; +- value = readString(isProtected, protectInMemory); +- protect = isProtected || protectInMemory; +- valueSet = true; +- continue; +- } +- +- skipCurrentElement(); +- } +- +- if (keySet && valueSet) { +- // the default attributes are always there so additionally check if it's empty +- if (entry->attributes()->hasKey(key) && !entry->attributes()->value(key).isEmpty()) { +- raiseError(tr("Duplicate custom attribute found")); +- return; +- } +- entry->attributes()->set(key, value, protect); +- return; +- } +- +- raiseError(tr("Entry string key or value missing")); +-} +- +-QPair KdbxXmlReader::parseEntryBinary(Entry* entry) +-{ +- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "Binary"); +- +- QPair poolRef; +- +- QString key; +- QByteArray value; +- bool keySet = false; +- bool valueSet = false; +- +- while (!m_xml.hasError() && m_xml.readNextStartElement()) { +- if (m_xml.name() == "Key") { +- key = readString(); +- keySet = true; +- continue; +- } +- if (m_xml.name() == "Value") { +- QXmlStreamAttributes attr = m_xml.attributes(); +- +- if (attr.hasAttribute("Ref")) { +- poolRef = qMakePair(attr.value("Ref").toString(), key); +- m_xml.skipCurrentElement(); +- } else { +- // format compatibility +- value = readBinary(); +- } +- +- valueSet = true; +- continue; +- } +- skipCurrentElement(); +- } +- +- if (keySet && valueSet) { +- if (entry->attachments()->hasKey(key) && entry->attachments()->value(key) != value) { +- // NOTE: This only impacts KDBX 3.x databases +- // Prepend a random string to the key to make it unique and prevent data loss +- key = key.prepend(QUuid::createUuid().toString().mid(1, 8) + "_"); +- qWarning("Duplicate attachment name found, renamed to: %s", qPrintable(key)); +- } +- entry->attachments()->set(key, value); +- } else { +- raiseError(tr("Entry binary key or value missing")); +- } +- +- return poolRef; +-} +- +-void KdbxXmlReader::parseAutoType(Entry* entry) +-{ +- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "AutoType"); +- +- while (!m_xml.hasError() && m_xml.readNextStartElement()) { +- if (m_xml.name() == "Enabled") { +- entry->setAutoTypeEnabled(readBool()); +- } else if (m_xml.name() == "DataTransferObfuscation") { +- entry->setAutoTypeObfuscation(readNumber()); +- } else if (m_xml.name() == "DefaultSequence") { +- entry->setDefaultAutoTypeSequence(readString()); +- } else if (m_xml.name() == "Association") { +- parseAutoTypeAssoc(entry); +- } else { +- skipCurrentElement(); +- } +- } +-} +- +-void KdbxXmlReader::parseAutoTypeAssoc(Entry* entry) +-{ +- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "Association"); +- +- AutoTypeAssociations::Association assoc; +- bool windowSet = false; +- bool sequenceSet = false; +- +- while (!m_xml.hasError() && m_xml.readNextStartElement()) { +- if (m_xml.name() == "Window") { +- assoc.window = readString(); +- windowSet = true; +- } else if (m_xml.name() == "KeystrokeSequence") { +- assoc.sequence = readString(); +- sequenceSet = true; +- } else { +- skipCurrentElement(); +- } +- } +- +- if (windowSet && sequenceSet) { +- entry->autoTypeAssociations()->add(assoc); +- return; +- } +- raiseError(tr("Auto-type association window or sequence missing")); +-} +- +-QList KdbxXmlReader::parseEntryHistory() +-{ +- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "History"); +- +- QList historyItems; +- +- while (!m_xml.hasError() && m_xml.readNextStartElement()) { +- if (m_xml.name() == "Entry") { +- historyItems.append(parseEntry(true)); +- } else { +- skipCurrentElement(); +- } +- } +- +- return historyItems; +-} +- +-TimeInfo KdbxXmlReader::parseTimes() +-{ +- Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "Times"); +- +- TimeInfo timeInfo; +- while (!m_xml.hasError() && m_xml.readNextStartElement()) { +- if (m_xml.name() == "LastModificationTime") { +- timeInfo.setLastModificationTime(readDateTime()); +- } else if (m_xml.name() == "CreationTime") { +- timeInfo.setCreationTime(readDateTime()); +- } else if (m_xml.name() == "LastAccessTime") { +- timeInfo.setLastAccessTime(readDateTime()); +- } else if (m_xml.name() == "ExpiryTime") { +- timeInfo.setExpiryTime(readDateTime()); +- } else if (m_xml.name() == "Expires") { +- timeInfo.setExpires(readBool()); +- } else if (m_xml.name() == "UsageCount") { +- timeInfo.setUsageCount(readNumber()); +- } else if (m_xml.name() == "LocationChanged") { +- timeInfo.setLocationChanged(readDateTime()); +- } else { +- skipCurrentElement(); +- } +- } +- +- return timeInfo; +-} +- +-QString KdbxXmlReader::readString() +-{ +- bool isProtected; +- bool protectInMemory; +- +- return readString(isProtected, protectInMemory); +-} +- +-QString KdbxXmlReader::readString(bool& isProtected, bool& protectInMemory) +-{ +- QXmlStreamAttributes attr = m_xml.attributes(); +- isProtected = isTrueValue(attr.value("Protected")); +- protectInMemory = isTrueValue(attr.value("ProtectInMemory")); +- QString value = m_xml.readElementText(); +- +- if (isProtected && !value.isEmpty()) { +- QByteArray ciphertext = QByteArray::fromBase64(value.toLatin1()); +- bool ok; +- QByteArray plaintext = m_randomStream->process(ciphertext, &ok); +- if (!ok) { +- value.clear(); +- raiseError(m_randomStream->errorString()); +- return value; +- } +- +- value = QString::fromUtf8(plaintext); +- } +- +- return value; +-} +- +-bool KdbxXmlReader::readBool() +-{ +- QString str = readString(); +- +- if (str.compare("true", Qt::CaseInsensitive) == 0) { +- return true; +- } +- if (str.compare("false", Qt::CaseInsensitive) == 0) { +- return false; +- } +- if (str.length() == 0) { +- return false; +- } +- raiseError(tr("Invalid bool value")); +- return false; +-} +- +-QDateTime KdbxXmlReader::readDateTime() +-{ +- QString str = readString(); +- if (Tools::isBase64(str.toLatin1())) { +- QByteArray secsBytes = QByteArray::fromBase64(str.toUtf8()).leftJustified(8, '\0', true).left(8); +- qint64 secs = Endian::bytesToSizedInt(secsBytes, KeePass2::BYTEORDER); +- return QDateTime(QDate(1, 1, 1), QTime(0, 0, 0, 0), Qt::UTC).addSecs(secs); +- } +- +- QDateTime dt = Clock::parse(str, Qt::ISODate); +- if (dt.isValid()) { +- return dt; +- } +- +- if (m_strictMode) { +- raiseError(tr("Invalid date time value")); +- } +- +- return Clock::currentDateTimeUtc(); +-} +- +-QString KdbxXmlReader::readColor() +-{ +- QString colorStr = readString(); +- +- if (colorStr.isEmpty()) { +- return colorStr; +- } +- +- if (colorStr.length() != 7 || colorStr[0] != '#') { +- if (m_strictMode) { +- raiseError(tr("Invalid color value")); +- } +- return colorStr; +- } +- +- for (int i = 0; i <= 2; ++i) { +- QString rgbPartStr = colorStr.mid(1 + 2 * i, 2); +- bool ok; +- int rgbPart = rgbPartStr.toInt(&ok, 16); +- if (!ok || rgbPart > 255) { +- if (m_strictMode) { +- raiseError(tr("Invalid color rgb part")); +- } +- return colorStr; +- } +- } +- +- return colorStr; +-} +- +-int KdbxXmlReader::readNumber() +-{ +- bool ok; +- int result = readString().toInt(&ok); +- if (!ok) { +- raiseError(tr("Invalid number value")); +- } +- return result; +-} +- +-QUuid KdbxXmlReader::readUuid() +-{ +- QByteArray uuidBin = readBinary(); +- if (uuidBin.isEmpty()) { +- return QUuid(); +- } +- if (uuidBin.length() != UUID_LENGTH) { +- if (m_strictMode) { +- raiseError(tr("Invalid uuid value")); +- } +- return QUuid(); +- } +- return QUuid::fromRfc4122(uuidBin); +-} +- +-QByteArray KdbxXmlReader::readBinary() +-{ +- QXmlStreamAttributes attr = m_xml.attributes(); +- bool isProtected = isTrueValue(attr.value("Protected")); +- QString value = m_xml.readElementText(); +- QByteArray data = QByteArray::fromBase64(value.toLatin1()); +- +- if (isProtected && !data.isEmpty()) { +- bool ok; +- QByteArray plaintext = m_randomStream->process(data, &ok); +- if (!ok) { +- data.clear(); +- raiseError(m_randomStream->errorString()); +- return data; +- } +- +- data = plaintext; +- } +- +- return data; +-} +- +-QByteArray KdbxXmlReader::readCompressedBinary() +-{ +- QByteArray rawData = readBinary(); +- +- QBuffer buffer(&rawData); +- buffer.open(QIODevice::ReadOnly); +- +- QtIOCompressor compressor(&buffer); +- compressor.setStreamFormat(QtIOCompressor::GzipFormat); +- compressor.open(QIODevice::ReadOnly); +- +- QByteArray result; +- if (!Tools::readAllFromDevice(&compressor, result)) { +- //: Translator meant is a binary data inside an entry +- raiseError(tr("Unable to decompress binary")); +- } +- return result; +-} +- +-Group* KdbxXmlReader::getGroup(const QUuid& uuid) +-{ +- if (uuid.isNull()) { +- return nullptr; +- } +- +- if (m_groups.contains(uuid)) { +- return m_groups.value(uuid); +- } +- +- auto group = new Group(); +- group->setUpdateTimeinfo(false); +- group->setUuid(uuid); +- group->setParent(m_tmpParent.data()); +- m_groups.insert(uuid, group); +- return group; +-} +- +-Entry* KdbxXmlReader::getEntry(const QUuid& uuid) +-{ +- if (uuid.isNull()) { +- return nullptr; +- } +- +- if (m_entries.contains(uuid)) { +- return m_entries.value(uuid); +- } +- +- auto entry = new Entry(); +- entry->setUpdateTimeinfo(false); +- entry->setUuid(uuid); +- entry->setGroup(m_tmpParent.data()); +- m_entries.insert(uuid, entry); +- return entry; +-} +- +-void KdbxXmlReader::skipCurrentElement() +-{ +- qWarning("KdbxXmlReader::skipCurrentElement: skip element \"%s\"", qPrintable(m_xml.name().toString())); +- m_xml.skipCurrentElement(); +-} +diff -urNr keepassxc-2.6.4-orig/src/format/KdbxXmlReader.h keepassxc-2.6.4-patched/src/format/KdbxXmlReader.h +--- keepassxc-2.6.4-orig/src/format/KdbxXmlReader.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/KdbxXmlReader.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,121 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_KDBXXMLREADER_H +-#define KEEPASSXC_KDBXXMLREADER_H +- +-#include "core/Database.h" +-#include "core/Metadata.h" +-#include "core/TimeInfo.h" +- +-#include +-#include +-#include +-#include +- +-class QIODevice; +-class Group; +-class Entry; +-class KeePass2RandomStream; +- +-/** +- * KDBX XML payload reader. +- */ +-class KdbxXmlReader +-{ +- Q_DECLARE_TR_FUNCTIONS(KdbxXmlReader) +- +-public: +- explicit KdbxXmlReader(quint32 version); +- explicit KdbxXmlReader(quint32 version, QHash binaryPool); +- virtual ~KdbxXmlReader() = default; +- +- virtual QSharedPointer readDatabase(const QString& filename); +- virtual QSharedPointer readDatabase(QIODevice* device); +- virtual void readDatabase(QIODevice* device, Database* db, KeePass2RandomStream* randomStream = nullptr); +- +- bool hasError() const; +- QString errorString() const; +- +- QByteArray headerHash() const; +- +- bool strictMode() const; +- void setStrictMode(bool strictMode); +- +-protected: +- typedef QPair StringPair; +- +- virtual bool parseKeePassFile(); +- virtual void parseMeta(); +- virtual void parseMemoryProtection(); +- virtual void parseCustomIcons(); +- virtual void parseIcon(); +- virtual void parseBinaries(); +- virtual void parseCustomData(CustomData* customData); +- virtual void parseCustomDataItem(CustomData* customData); +- virtual bool parseRoot(); +- virtual Group* parseGroup(); +- virtual void parseDeletedObjects(); +- virtual void parseDeletedObject(); +- virtual Entry* parseEntry(bool history); +- virtual void parseEntryString(Entry* entry); +- virtual QPair parseEntryBinary(Entry* entry); +- virtual void parseAutoType(Entry* entry); +- virtual void parseAutoTypeAssoc(Entry* entry); +- virtual QList parseEntryHistory(); +- virtual TimeInfo parseTimes(); +- +- virtual QString readString(); +- virtual QString readString(bool& isProtected, bool& protectInMemory); +- virtual bool readBool(); +- virtual QDateTime readDateTime(); +- virtual QString readColor(); +- virtual int readNumber(); +- virtual QUuid readUuid(); +- virtual QByteArray readBinary(); +- virtual QByteArray readCompressedBinary(); +- +- virtual void skipCurrentElement(); +- +- virtual Group* getGroup(const QUuid& uuid); +- virtual Entry* getEntry(const QUuid& uuid); +- +- virtual bool isTrueValue(const QStringRef& value); +- virtual void raiseError(const QString& errorMessage); +- +- const quint32 m_kdbxVersion; +- +- bool m_strictMode = false; +- +- QPointer m_db; +- QPointer m_meta; +- KeePass2RandomStream* m_randomStream = nullptr; +- QXmlStreamReader m_xml; +- +- QScopedPointer m_tmpParent; +- QHash m_groups; +- QHash m_entries; +- +- QHash m_binaryPool; +- QHash> m_binaryMap; +- QByteArray m_headerHash; +- +- bool m_error = false; +- QString m_errorStr = ""; +-}; +- +-#endif // KEEPASSXC_KDBXXMLREADER_H +diff -urNr keepassxc-2.6.4-orig/src/format/KdbxXmlWriter.cpp keepassxc-2.6.4-patched/src/format/KdbxXmlWriter.cpp +--- keepassxc-2.6.4-orig/src/format/KdbxXmlWriter.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/KdbxXmlWriter.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,609 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "KdbxXmlWriter.h" +- +-#include +-#include +- +-#include "core/Endian.h" +-#include "core/Metadata.h" +-#include "format/KeePass2RandomStream.h" +-#include "streams/QtIOCompressor" +- +-/** +- * @param version KDBX version +- */ +-KdbxXmlWriter::KdbxXmlWriter(quint32 version) +- : m_kdbxVersion(version) +-{ +-} +- +-void KdbxXmlWriter::writeDatabase(QIODevice* device, +- const Database* db, +- KeePass2RandomStream* randomStream, +- const QByteArray& headerHash) +-{ +- m_db = db; +- m_meta = db->metadata(); +- m_randomStream = randomStream; +- m_headerHash = headerHash; +- +- m_xml.setAutoFormatting(true); +- m_xml.setAutoFormattingIndent(-1); // 1 tab +- m_xml.setCodec("UTF-8"); +- +- generateIdMap(); +- +- m_xml.setDevice(device); +- m_xml.writeStartDocument("1.0", true); +- m_xml.writeStartElement("KeePassFile"); +- +- writeMetadata(); +- writeRoot(); +- +- m_xml.writeEndElement(); +- m_xml.writeEndDocument(); +- +- if (m_xml.hasError()) { +- raiseError(device->errorString()); +- } +-} +- +-void KdbxXmlWriter::writeDatabase(const QString& filename, Database* db) +-{ +- QFile file(filename); +- file.open(QIODevice::WriteOnly | QIODevice::Truncate); +- writeDatabase(&file, db); +-} +- +-bool KdbxXmlWriter::hasError() +-{ +- return m_error; +-} +- +-QString KdbxXmlWriter::errorString() +-{ +- return m_errorStr; +-} +- +-void KdbxXmlWriter::generateIdMap() +-{ +- const QList allEntries = m_db->rootGroup()->entriesRecursive(true); +- int nextId = 0; +- +- for (Entry* entry : allEntries) { +- const QList attachmentKeys = entry->attachments()->keys(); +- for (const QString& key : attachmentKeys) { +- QByteArray data = entry->attachments()->value(key); +- if (!m_idMap.contains(data)) { +- m_idMap.insert(data, nextId++); +- } +- } +- } +-} +- +-void KdbxXmlWriter::writeMetadata() +-{ +- m_xml.writeStartElement("Meta"); +- writeString("Generator", m_meta->generator()); +- if (m_kdbxVersion < KeePass2::FILE_VERSION_4 && !m_headerHash.isEmpty()) { +- writeBinary("HeaderHash", m_headerHash); +- } +- writeString("DatabaseName", m_meta->name()); +- writeDateTime("DatabaseNameChanged", m_meta->nameChanged()); +- writeString("DatabaseDescription", m_meta->description()); +- writeDateTime("DatabaseDescriptionChanged", m_meta->descriptionChanged()); +- writeString("DefaultUserName", m_meta->defaultUserName()); +- writeDateTime("DefaultUserNameChanged", m_meta->defaultUserNameChanged()); +- writeNumber("MaintenanceHistoryDays", m_meta->maintenanceHistoryDays()); +- writeString("Color", m_meta->color()); +- writeDateTime("MasterKeyChanged", m_meta->databaseKeyChanged()); +- writeNumber("MasterKeyChangeRec", m_meta->databaseKeyChangeRec()); +- writeNumber("MasterKeyChangeForce", m_meta->databaseKeyChangeForce()); +- writeMemoryProtection(); +- writeCustomIcons(); +- writeBool("RecycleBinEnabled", m_meta->recycleBinEnabled()); +- writeUuid("RecycleBinUUID", m_meta->recycleBin()); +- writeDateTime("RecycleBinChanged", m_meta->recycleBinChanged()); +- writeUuid("EntryTemplatesGroup", m_meta->entryTemplatesGroup()); +- writeDateTime("EntryTemplatesGroupChanged", m_meta->entryTemplatesGroupChanged()); +- writeUuid("LastSelectedGroup", m_meta->lastSelectedGroup()); +- writeUuid("LastTopVisibleGroup", m_meta->lastTopVisibleGroup()); +- writeNumber("HistoryMaxItems", m_meta->historyMaxItems()); +- writeNumber("HistoryMaxSize", m_meta->historyMaxSize()); +- if (m_kdbxVersion >= KeePass2::FILE_VERSION_4) { +- writeDateTime("SettingsChanged", m_meta->settingsChanged()); +- } +- if (m_kdbxVersion < KeePass2::FILE_VERSION_4) { +- writeBinaries(); +- } +- writeCustomData(m_meta->customData()); +- +- m_xml.writeEndElement(); +-} +- +-void KdbxXmlWriter::writeMemoryProtection() +-{ +- m_xml.writeStartElement("MemoryProtection"); +- +- writeBool("ProtectTitle", m_meta->protectTitle()); +- writeBool("ProtectUserName", m_meta->protectUsername()); +- writeBool("ProtectPassword", m_meta->protectPassword()); +- writeBool("ProtectURL", m_meta->protectUrl()); +- writeBool("ProtectNotes", m_meta->protectNotes()); +- +- m_xml.writeEndElement(); +-} +- +-void KdbxXmlWriter::writeCustomIcons() +-{ +- m_xml.writeStartElement("CustomIcons"); +- +- const QList customIconsOrder = m_meta->customIconsOrder(); +- for (const QUuid& uuid : customIconsOrder) { +- writeIcon(uuid, m_meta->customIcon(uuid)); +- } +- +- m_xml.writeEndElement(); +-} +- +-void KdbxXmlWriter::writeIcon(const QUuid& uuid, const QImage& icon) +-{ +- m_xml.writeStartElement("Icon"); +- +- writeUuid("UUID", uuid); +- +- QByteArray ba; +- QBuffer buffer(&ba); +- buffer.open(QIODevice::WriteOnly); +- // TODO: check !icon.save() +- icon.save(&buffer, "PNG"); +- buffer.close(); +- writeBinary("Data", ba); +- +- m_xml.writeEndElement(); +-} +- +-void KdbxXmlWriter::writeBinaries() +-{ +- m_xml.writeStartElement("Binaries"); +- +- QHash::const_iterator i; +- for (i = m_idMap.constBegin(); i != m_idMap.constEnd(); ++i) { +- m_xml.writeStartElement("Binary"); +- +- m_xml.writeAttribute("ID", QString::number(i.value())); +- +- QByteArray data; +- if (m_db->compressionAlgorithm() == Database::CompressionGZip) { +- m_xml.writeAttribute("Compressed", "True"); +- +- QBuffer buffer; +- buffer.open(QIODevice::ReadWrite); +- +- QtIOCompressor compressor(&buffer); +- compressor.setStreamFormat(QtIOCompressor::GzipFormat); +- compressor.open(QIODevice::WriteOnly); +- +- qint64 bytesWritten = compressor.write(i.key()); +- Q_ASSERT(bytesWritten == i.key().size()); +- Q_UNUSED(bytesWritten); +- compressor.close(); +- +- buffer.seek(0); +- data = buffer.readAll(); +- } else { +- data = i.key(); +- } +- +- if (!data.isEmpty()) { +- m_xml.writeCharacters(QString::fromLatin1(data.toBase64())); +- } +- m_xml.writeEndElement(); +- } +- +- m_xml.writeEndElement(); +-} +- +-void KdbxXmlWriter::writeCustomData(const CustomData* customData) +-{ +- if (customData->isEmpty()) { +- return; +- } +- m_xml.writeStartElement("CustomData"); +- +- const QList keyList = customData->keys(); +- for (const QString& key : keyList) { +- writeCustomDataItem(key, customData->value(key)); +- } +- +- m_xml.writeEndElement(); +-} +- +-void KdbxXmlWriter::writeCustomDataItem(const QString& key, const QString& value) +-{ +- m_xml.writeStartElement("Item"); +- +- writeString("Key", key); +- writeString("Value", value); +- +- m_xml.writeEndElement(); +-} +- +-void KdbxXmlWriter::writeRoot() +-{ +- Q_ASSERT(m_db->rootGroup()); +- +- m_xml.writeStartElement("Root"); +- +- writeGroup(m_db->rootGroup()); +- writeDeletedObjects(); +- +- m_xml.writeEndElement(); +-} +- +-void KdbxXmlWriter::writeGroup(const Group* group) +-{ +- Q_ASSERT(!group->uuid().isNull()); +- +- m_xml.writeStartElement("Group"); +- +- writeUuid("UUID", group->uuid()); +- writeString("Name", group->name()); +- writeString("Notes", group->notes()); +- writeNumber("IconID", group->iconNumber()); +- +- if (!group->iconUuid().isNull()) { +- writeUuid("CustomIconUUID", group->iconUuid()); +- } +- writeTimes(group->timeInfo()); +- writeBool("IsExpanded", group->isExpanded()); +- writeString("DefaultAutoTypeSequence", group->defaultAutoTypeSequence()); +- +- writeTriState("EnableAutoType", group->autoTypeEnabled()); +- +- writeTriState("EnableSearching", group->searchingEnabled()); +- +- writeUuid("LastTopVisibleEntry", group->lastTopVisibleEntry()); +- +- if (m_kdbxVersion >= KeePass2::FILE_VERSION_4) { +- writeCustomData(group->customData()); +- } +- +- const QList& entryList = group->entries(); +- for (const Entry* entry : entryList) { +- writeEntry(entry); +- } +- +- const QList& children = group->children(); +- for (const Group* child : children) { +- writeGroup(child); +- } +- +- m_xml.writeEndElement(); +-} +- +-void KdbxXmlWriter::writeTimes(const TimeInfo& ti) +-{ +- m_xml.writeStartElement("Times"); +- +- writeDateTime("LastModificationTime", ti.lastModificationTime()); +- writeDateTime("CreationTime", ti.creationTime()); +- writeDateTime("LastAccessTime", ti.lastAccessTime()); +- writeDateTime("ExpiryTime", ti.expiryTime()); +- writeBool("Expires", ti.expires()); +- writeNumber("UsageCount", ti.usageCount()); +- writeDateTime("LocationChanged", ti.locationChanged()); +- +- m_xml.writeEndElement(); +-} +- +-void KdbxXmlWriter::writeDeletedObjects() +-{ +- m_xml.writeStartElement("DeletedObjects"); +- +- const QList delObjList = m_db->deletedObjects(); +- for (const DeletedObject& delObj : delObjList) { +- writeDeletedObject(delObj); +- } +- +- m_xml.writeEndElement(); +-} +- +-void KdbxXmlWriter::writeDeletedObject(const DeletedObject& delObj) +-{ +- m_xml.writeStartElement("DeletedObject"); +- +- writeUuid("UUID", delObj.uuid); +- writeDateTime("DeletionTime", delObj.deletionTime); +- +- m_xml.writeEndElement(); +-} +- +-void KdbxXmlWriter::writeEntry(const Entry* entry) +-{ +- Q_ASSERT(!entry->uuid().isNull()); +- +- m_xml.writeStartElement("Entry"); +- +- writeUuid("UUID", entry->uuid()); +- writeNumber("IconID", entry->iconNumber()); +- if (!entry->iconUuid().isNull()) { +- writeUuid("CustomIconUUID", entry->iconUuid()); +- } +- writeString("ForegroundColor", entry->foregroundColor()); +- writeString("BackgroundColor", entry->backgroundColor()); +- writeString("OverrideURL", entry->overrideUrl()); +- writeString("Tags", entry->tags()); +- writeTimes(entry->timeInfo()); +- +- const QList attributesKeyList = entry->attributes()->keys(); +- for (const QString& key : attributesKeyList) { +- m_xml.writeStartElement("String"); +- +- // clang-format off +- bool protect = +- (((key == "Title") && m_meta->protectTitle()) || ((key == "UserName") && m_meta->protectUsername()) +- || ((key == "Password") && m_meta->protectPassword()) +- || ((key == "URL") && m_meta->protectUrl()) +- || ((key == "Notes") && m_meta->protectNotes()) +- || entry->attributes()->isProtected(key)); +- // clang-format on +- +- writeString("Key", key); +- +- m_xml.writeStartElement("Value"); +- QString value; +- +- if (protect) { +- if (!m_innerStreamProtectionDisabled && m_randomStream) { +- m_xml.writeAttribute("Protected", "True"); +- bool ok; +- QByteArray rawData = m_randomStream->process(entry->attributes()->value(key).toUtf8(), &ok); +- if (!ok) { +- raiseError(m_randomStream->errorString()); +- } +- value = QString::fromLatin1(rawData.toBase64()); +- } else { +- m_xml.writeAttribute("ProtectInMemory", "True"); +- value = entry->attributes()->value(key); +- } +- } else { +- value = entry->attributes()->value(key); +- } +- +- if (!value.isEmpty()) { +- m_xml.writeCharacters(stripInvalidXml10Chars(value)); +- } +- m_xml.writeEndElement(); +- +- m_xml.writeEndElement(); +- } +- +- const QList attachmentsKeyList = entry->attachments()->keys(); +- for (const QString& key : attachmentsKeyList) { +- m_xml.writeStartElement("Binary"); +- +- writeString("Key", key); +- +- m_xml.writeStartElement("Value"); +- m_xml.writeAttribute("Ref", QString::number(m_idMap[entry->attachments()->value(key)])); +- m_xml.writeEndElement(); +- +- m_xml.writeEndElement(); +- } +- +- writeAutoType(entry); +- +- if (m_kdbxVersion >= KeePass2::FILE_VERSION_4) { +- writeCustomData(entry->customData()); +- } +- +- // write history only for entries that are not history items +- if (entry->parent()) { +- writeEntryHistory(entry); +- } +- +- m_xml.writeEndElement(); +-} +- +-void KdbxXmlWriter::writeAutoType(const Entry* entry) +-{ +- m_xml.writeStartElement("AutoType"); +- +- writeBool("Enabled", entry->autoTypeEnabled()); +- writeNumber("DataTransferObfuscation", entry->autoTypeObfuscation()); +- writeString("DefaultSequence", entry->defaultAutoTypeSequence()); +- +- const QList autoTypeAssociations = entry->autoTypeAssociations()->getAll(); +- for (const AutoTypeAssociations::Association& assoc : autoTypeAssociations) { +- writeAutoTypeAssoc(assoc); +- } +- +- m_xml.writeEndElement(); +-} +- +-void KdbxXmlWriter::writeAutoTypeAssoc(const AutoTypeAssociations::Association& assoc) +-{ +- m_xml.writeStartElement("Association"); +- +- writeString("Window", assoc.window); +- writeString("KeystrokeSequence", assoc.sequence); +- +- m_xml.writeEndElement(); +-} +- +-void KdbxXmlWriter::writeEntryHistory(const Entry* entry) +-{ +- m_xml.writeStartElement("History"); +- +- const QList& historyItems = entry->historyItems(); +- for (const Entry* item : historyItems) { +- writeEntry(item); +- } +- +- m_xml.writeEndElement(); +-} +- +-void KdbxXmlWriter::writeString(const QString& qualifiedName, const QString& string) +-{ +- if (string.isEmpty()) { +- m_xml.writeEmptyElement(qualifiedName); +- } else { +- m_xml.writeTextElement(qualifiedName, stripInvalidXml10Chars(string)); +- } +-} +- +-void KdbxXmlWriter::writeNumber(const QString& qualifiedName, int number) +-{ +- writeString(qualifiedName, QString::number(number)); +-} +- +-void KdbxXmlWriter::writeBool(const QString& qualifiedName, bool b) +-{ +- if (b) { +- writeString(qualifiedName, "True"); +- } else { +- writeString(qualifiedName, "False"); +- } +-} +- +-void KdbxXmlWriter::writeDateTime(const QString& qualifiedName, const QDateTime& dateTime) +-{ +- Q_ASSERT(dateTime.isValid()); +- Q_ASSERT(dateTime.timeSpec() == Qt::UTC); +- +- QString dateTimeStr; +- if (m_kdbxVersion < KeePass2::FILE_VERSION_4) { +- dateTimeStr = dateTime.toString(Qt::ISODate); +- +- // Qt < 4.8 doesn't append a 'Z' at the end +- if (!dateTimeStr.isEmpty() && dateTimeStr[dateTimeStr.size() - 1] != 'Z') { +- dateTimeStr.append('Z'); +- } +- } else { +- qint64 secs = QDateTime(QDate(1, 1, 1), QTime(0, 0, 0, 0), Qt::UTC).secsTo(dateTime); +- QByteArray secsBytes = Endian::sizedIntToBytes(secs, KeePass2::BYTEORDER); +- dateTimeStr = QString::fromLatin1(secsBytes.toBase64()); +- } +- writeString(qualifiedName, dateTimeStr); +-} +- +-void KdbxXmlWriter::writeUuid(const QString& qualifiedName, const QUuid& uuid) +-{ +- writeString(qualifiedName, uuid.toRfc4122().toBase64()); +-} +- +-void KdbxXmlWriter::writeUuid(const QString& qualifiedName, const Group* group) +-{ +- if (group) { +- writeUuid(qualifiedName, group->uuid()); +- } else { +- writeUuid(qualifiedName, QUuid()); +- } +-} +- +-void KdbxXmlWriter::writeUuid(const QString& qualifiedName, const Entry* entry) +-{ +- if (entry) { +- writeUuid(qualifiedName, entry->uuid()); +- } else { +- writeUuid(qualifiedName, QUuid()); +- } +-} +- +-void KdbxXmlWriter::writeBinary(const QString& qualifiedName, const QByteArray& ba) +-{ +- writeString(qualifiedName, QString::fromLatin1(ba.toBase64())); +-} +- +-void KdbxXmlWriter::writeTriState(const QString& qualifiedName, Group::TriState triState) +-{ +- QString value; +- +- if (triState == Group::Inherit) { +- value = "null"; +- } else if (triState == Group::Enable) { +- value = "true"; +- } else { +- value = "false"; +- } +- +- writeString(qualifiedName, value); +-} +- +-QString KdbxXmlWriter::colorPartToString(int value) +-{ +- QString str = QString::number(value, 16).toUpper(); +- if (str.length() == 1) { +- str.prepend("0"); +- } +- +- return str; +-} +- +-QString KdbxXmlWriter::stripInvalidXml10Chars(QString str) +-{ +- for (int i = str.size() - 1; i >= 0; i--) { +- const QChar ch = str.at(i); +- const ushort uc = ch.unicode(); +- +- if (ch.isLowSurrogate() && i != 0 && str.at(i - 1).isHighSurrogate()) { +- // keep valid surrogate pair +- i--; +- } else if ((uc < 0x20 && uc != 0x09 && uc != 0x0A && uc != 0x0D) // control characters +- || (uc >= 0x7F && uc <= 0x84) // control characters, valid but discouraged by XML +- || (uc >= 0x86 && uc <= 0x9F) // control characters, valid but discouraged by XML +- || (uc > 0xFFFD) // noncharacter +- || ch.isLowSurrogate() // single low surrogate +- || ch.isHighSurrogate()) // single high surrogate +- { +- qWarning("Stripping invalid XML 1.0 codepoint %x", uc); +- str.remove(i, 1); +- } +- } +- +- return str; +-} +- +-void KdbxXmlWriter::raiseError(const QString& errorMessage) +-{ +- m_error = true; +- m_errorStr = errorMessage; +-} +- +-/** +- * Disable inner stream protection and write protected fields +- * in plaintext instead. This is useful for plaintext XML exports +- * where the inner stream key is not available. +- * +- * @param disable true to disable protection +- */ +-void KdbxXmlWriter::disableInnerStreamProtection(bool disable) +-{ +- m_innerStreamProtectionDisabled = disable; +-} +- +-/** +- * @return true if inner stream protection is disabled and protected +- * fields will be saved in plaintext +- */ +-bool KdbxXmlWriter::innerStreamProtectionDisabled() const +-{ +- return m_innerStreamProtectionDisabled; +-} +diff -urNr keepassxc-2.6.4-orig/src/format/KdbxXmlWriter.h keepassxc-2.6.4-patched/src/format/KdbxXmlWriter.h +--- keepassxc-2.6.4-orig/src/format/KdbxXmlWriter.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/KdbxXmlWriter.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,98 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_KDBXXMLWRITER_H +-#define KEEPASSX_KDBXXMLWRITER_H +- +-#include +-#include +-#include +- +-#include "core/Database.h" +-#include "core/Entry.h" +-#include "core/Group.h" +-#include "core/TimeInfo.h" +- +-class KeePass2RandomStream; +-class Metadata; +- +-class KdbxXmlWriter +-{ +-public: +- explicit KdbxXmlWriter(quint32 version); +- +- void writeDatabase(QIODevice* device, +- const Database* db, +- KeePass2RandomStream* randomStream = nullptr, +- const QByteArray& headerHash = QByteArray()); +- void writeDatabase(const QString& filename, Database* db); +- void disableInnerStreamProtection(bool disable); +- bool innerStreamProtectionDisabled() const; +- bool hasError(); +- QString errorString(); +- +-private: +- void generateIdMap(); +- +- void writeMetadata(); +- void writeMemoryProtection(); +- void writeCustomIcons(); +- void writeIcon(const QUuid& uuid, const QImage& icon); +- void writeBinaries(); +- void writeCustomData(const CustomData* customData); +- void writeCustomDataItem(const QString& key, const QString& value); +- void writeRoot(); +- void writeGroup(const Group* group); +- void writeTimes(const TimeInfo& ti); +- void writeDeletedObjects(); +- void writeDeletedObject(const DeletedObject& delObj); +- void writeEntry(const Entry* entry); +- void writeAutoType(const Entry* entry); +- void writeAutoTypeAssoc(const AutoTypeAssociations::Association& assoc); +- void writeEntryHistory(const Entry* entry); +- +- void writeString(const QString& qualifiedName, const QString& string); +- void writeNumber(const QString& qualifiedName, int number); +- void writeBool(const QString& qualifiedName, bool b); +- void writeDateTime(const QString& qualifiedName, const QDateTime& dateTime); +- void writeUuid(const QString& qualifiedName, const QUuid& uuid); +- void writeUuid(const QString& qualifiedName, const Group* group); +- void writeUuid(const QString& qualifiedName, const Entry* entry); +- void writeBinary(const QString& qualifiedName, const QByteArray& ba); +- void writeTriState(const QString& qualifiedName, Group::TriState triState); +- QString colorPartToString(int value); +- QString stripInvalidXml10Chars(QString str); +- +- void raiseError(const QString& errorMessage); +- +- const quint32 m_kdbxVersion; +- +- bool m_innerStreamProtectionDisabled = false; +- +- QXmlStreamWriter m_xml; +- QPointer m_db; +- QPointer m_meta; +- KeePass2RandomStream* m_randomStream = nullptr; +- QHash m_idMap; +- QByteArray m_headerHash; +- +- bool m_error = false; +- +- QString m_errorStr = ""; +-}; +- +-#endif // KEEPASSX_KDBXXMLWRITER_H +diff -urNr keepassxc-2.6.4-orig/src/format/KeePass1.h keepassxc-2.6.4-patched/src/format/KeePass1.h +--- keepassxc-2.6.4-orig/src/format/KeePass1.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/KeePass1.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,40 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_KEEPASS1_H +-#define KEEPASSX_KEEPASS1_H +- +-#include +- +-namespace KeePass1 +-{ +- const quint32 SIGNATURE_1 = 0x9AA2D903; +- const quint32 SIGNATURE_2 = 0xB54BFB65; +- const quint32 PWM_DBVER_DW = 0x00030002; +- const quint32 FILE_VERSION = 0x00030002; +- const quint32 FILE_VERSION_CRITICAL_MASK = 0xFFFFFF00; +- +- const QSysInfo::Endian BYTEORDER = QSysInfo::LittleEndian; +- +- enum EncryptionFlags +- { +- Rijndael = 2, +- Twofish = 8 +- }; +-} // namespace KeePass1 +- +-#endif // KEEPASSX_KEEPASS1_H +diff -urNr keepassxc-2.6.4-orig/src/format/KeePass1Reader.cpp keepassxc-2.6.4-patched/src/format/KeePass1Reader.cpp +--- keepassxc-2.6.4-orig/src/format/KeePass1Reader.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/KeePass1Reader.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,1021 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "KeePass1Reader.h" +- +-#include +-#include +-#include +- +-#include "core/Database.h" +-#include "core/Endian.h" +-#include "core/Entry.h" +-#include "core/Group.h" +-#include "core/Metadata.h" +-#include "core/Tools.h" +-#include "crypto/CryptoHash.h" +-#include "crypto/kdf/AesKdf.h" +-#include "format/KeePass1.h" +-#include "keys/FileKey.h" +-#include "keys/PasswordKey.h" +-#include "streams/SymmetricCipherStream.h" +- +-class KeePass1Key : public CompositeKey +-{ +-public: +- QByteArray rawKey() const override; +- virtual void clear(); +- void setPassword(const QByteArray& password); +- void setKeyfileData(const QByteArray& keyfileData); +- +-private: +- QByteArray m_password; +- QByteArray m_keyfileData; +-}; +- +-KeePass1Reader::KeePass1Reader() +- : m_tmpParent(nullptr) +- , m_device(nullptr) +- , m_encryptionFlags(0) +- , m_transformRounds(0) +- , m_error(false) +-{ +-} +- +-QSharedPointer +-KeePass1Reader::readDatabase(QIODevice* device, const QString& password, QIODevice* keyfileDevice) +-{ +- m_error = false; +- m_errorStr.clear(); +- +- QByteArray keyfileData; +- auto newFileKey = QSharedPointer::create(); +- +- if (keyfileDevice) { +- keyfileData = readKeyfile(keyfileDevice); +- +- if (keyfileData.isEmpty()) { +- raiseError(tr("Unable to read keyfile.").append("\n").append(keyfileDevice->errorString())); +- return {}; +- } +- if (!keyfileDevice->seek(0)) { +- raiseError(tr("Unable to read keyfile.").append("\n").append(keyfileDevice->errorString())); +- return {}; +- } +- +- if (!newFileKey->load(keyfileDevice)) { +- raiseError(tr("Unable to read keyfile.").append("\n").append(keyfileDevice->errorString())); +- return {}; +- } +- } +- +- auto db = QSharedPointer::create(); +- QScopedPointer tmpParent(new Group()); +- m_db = db; +- m_tmpParent = tmpParent.data(); +- m_device = device; +- +- bool ok; +- +- auto signature1 = Endian::readSizedInt(m_device, KeePass1::BYTEORDER, &ok); +- if (!ok || signature1 != KeePass1::SIGNATURE_1) { +- raiseError(tr("Not a KeePass database.")); +- return {}; +- } +- +- auto signature2 = Endian::readSizedInt(m_device, KeePass1::BYTEORDER, &ok); +- if (!ok || signature2 != KeePass1::SIGNATURE_2) { +- raiseError(tr("Not a KeePass database.")); +- return {}; +- } +- +- m_encryptionFlags = Endian::readSizedInt(m_device, KeePass1::BYTEORDER, &ok); +- if (!ok || !(m_encryptionFlags & KeePass1::Rijndael || m_encryptionFlags & KeePass1::Twofish)) { +- raiseError(tr("Unsupported encryption algorithm.")); +- return {}; +- } +- +- auto version = Endian::readSizedInt(m_device, KeePass1::BYTEORDER, &ok); +- if (!ok +- || (version & KeePass1::FILE_VERSION_CRITICAL_MASK) +- != (KeePass1::FILE_VERSION & KeePass1::FILE_VERSION_CRITICAL_MASK)) { +- raiseError(tr("Unsupported KeePass database version.")); +- return {}; +- } +- +- m_masterSeed = m_device->read(16); +- if (m_masterSeed.size() != 16) { +- raiseError("Unable to read master seed"); +- return {}; +- } +- +- m_encryptionIV = m_device->read(16); +- if (m_encryptionIV.size() != 16) { +- raiseError(tr("Unable to read encryption IV", "IV = Initialization Vector for symmetric cipher")); +- return {}; +- } +- +- auto numGroups = Endian::readSizedInt(m_device, KeePass1::BYTEORDER, &ok); +- if (!ok) { +- raiseError(tr("Invalid number of groups")); +- return {}; +- } +- +- auto numEntries = Endian::readSizedInt(m_device, KeePass1::BYTEORDER, &ok); +- if (!ok) { +- raiseError(tr("Invalid number of entries")); +- return {}; +- } +- +- m_contentHashHeader = m_device->read(32); +- if (m_contentHashHeader.size() != 32) { +- raiseError(tr("Invalid content hash size")); +- return {}; +- } +- +- m_transformSeed = m_device->read(32); +- if (m_transformSeed.size() != 32) { +- raiseError(tr("Invalid transform seed size")); +- return {}; +- } +- +- m_transformRounds = Endian::readSizedInt(m_device, KeePass1::BYTEORDER, &ok); +- if (!ok) { +- raiseError(tr("Invalid number of transform rounds")); +- return {}; +- } +- auto kdf = QSharedPointer::create(true); +- kdf->setRounds(m_transformRounds); +- kdf->setSeed(m_transformSeed); +- db->setKdf(kdf); +- +- qint64 contentPos = m_device->pos(); +- +- QScopedPointer cipherStream(testKeys(password, keyfileData, contentPos)); +- +- if (!cipherStream) { +- return {}; +- } +- +- QList groups; +- for (quint32 i = 0; i < numGroups; i++) { +- Group* group = readGroup(cipherStream.data()); +- if (!group) { +- return {}; +- } +- groups.append(group); +- } +- +- QList entries; +- for (quint32 i = 0; i < numEntries; i++) { +- Entry* entry = readEntry(cipherStream.data()); +- if (!entry) { +- return {}; +- } +- entries.append(entry); +- } +- +- if (!constructGroupTree(groups)) { +- raiseError(tr("Unable to construct group tree")); +- return {}; +- } +- +- for (Entry* entry : asConst(entries)) { +- if (isMetaStream(entry)) { +- parseMetaStream(entry); +- +- delete entry; +- } else { +- quint32 groupId = m_entryGroupIds.value(entry); +- if (!m_groupIds.contains(groupId)) { +- qWarning("Orphaned entry found, assigning to root group."); +- entry->setGroup(m_db->rootGroup()); +- } else { +- entry->setGroup(m_groupIds.value(groupId)); +- } +- entry->setUuid(QUuid::createUuid()); +- } +- } +- +- db->rootGroup()->setName(tr("Root")); +- +- const QList children = db->rootGroup()->children(); +- for (Group* group : children) { +- if (group->name() == "Backup") { +- group->setSearchingEnabled(Group::Disable); +- group->setAutoTypeEnabled(Group::Disable); +- } +- } +- +- Q_ASSERT(m_tmpParent->children().isEmpty()); +- Q_ASSERT(m_tmpParent->entries().isEmpty()); +- +- for (Group* group : asConst(groups)) { +- group->setUpdateTimeinfo(true); +- } +- +- const QList dbEntries = m_db->rootGroup()->entriesRecursive(); +- for (Entry* entry : dbEntries) { +- entry->setUpdateTimeinfo(true); +- } +- +- auto key = QSharedPointer::create(); +- if (!password.isEmpty()) { +- key->addKey(QSharedPointer::create(password)); +- } +- if (keyfileDevice) { +- key->addKey(newFileKey); +- } +- +- if (!db->setKey(key)) { +- raiseError(tr("Unable to calculate database key")); +- return {}; +- } +- +- return db; +-} +- +-QSharedPointer +-KeePass1Reader::readDatabase(QIODevice* device, const QString& password, const QString& keyfileName) +-{ +- QScopedPointer keyFile; +- if (!keyfileName.isEmpty()) { +- keyFile.reset(new QFile(keyfileName)); +- if (!keyFile->open(QFile::ReadOnly)) { +- raiseError(keyFile->errorString()); +- return {}; +- } +- } +- +- return QSharedPointer(readDatabase(device, password, keyFile.data())); +-} +- +-QSharedPointer +-KeePass1Reader::readDatabase(const QString& filename, const QString& password, const QString& keyfileName) +-{ +- QFile dbFile(filename); +- if (!dbFile.open(QFile::ReadOnly)) { +- raiseError(dbFile.errorString()); +- return {}; +- } +- +- auto db = readDatabase(&dbFile, password, keyfileName); +- +- if (dbFile.error() != QFile::NoError) { +- raiseError(dbFile.errorString()); +- return {}; +- } +- +- return db; +-} +- +-bool KeePass1Reader::hasError() +-{ +- return m_error; +-} +- +-QString KeePass1Reader::errorString() +-{ +- return m_errorStr; +-} +- +-SymmetricCipherStream* +-KeePass1Reader::testKeys(const QString& password, const QByteArray& keyfileData, qint64 contentPos) +-{ +- const QList encodings = {Windows1252, Latin1, UTF8}; +- +- QScopedPointer cipherStream; +- QByteArray passwordData; +- QTextCodec* codec = QTextCodec::codecForName("Windows-1252"); +- QByteArray passwordDataCorrect = codec->fromUnicode(password); +- +- for (PasswordEncoding encoding : encodings) { +- if (encoding == Windows1252) { +- passwordData = passwordDataCorrect; +- } else if (encoding == Latin1) { +- // KeePassX used Latin-1 encoding for passwords until version 0.3.1 +- // but KeePass/Win32 uses Windows Codepage 1252. +- passwordData = password.toLatin1(); +- +- if (passwordData == passwordDataCorrect) { +- continue; +- } else { +- qWarning("Testing password encoded as Latin-1."); +- } +- } else if (encoding == UTF8) { +- // KeePassX used UTF-8 encoding for passwords until version 0.2.2 +- // but KeePass/Win32 uses Windows Codepage 1252. +- passwordData = password.toUtf8(); +- +- if (passwordData == passwordDataCorrect) { +- continue; +- } else { +- qWarning("Testing password encoded as UTF-8."); +- } +- } +- +- QByteArray finalKey = key(passwordData, keyfileData); +- if (finalKey.isEmpty()) { +- return nullptr; +- } +- if (m_encryptionFlags & KeePass1::Rijndael) { +- cipherStream.reset(new SymmetricCipherStream( +- m_device, SymmetricCipher::Aes256, SymmetricCipher::Cbc, SymmetricCipher::Decrypt)); +- } else { +- cipherStream.reset(new SymmetricCipherStream( +- m_device, SymmetricCipher::Twofish, SymmetricCipher::Cbc, SymmetricCipher::Decrypt)); +- } +- +- if (!cipherStream->init(finalKey, m_encryptionIV)) { +- raiseError(cipherStream->errorString()); +- return nullptr; +- } +- if (!cipherStream->open(QIODevice::ReadOnly)) { +- raiseError(cipherStream->errorString()); +- return nullptr; +- } +- +- bool success = verifyKey(cipherStream.data()); +- +- cipherStream->reset(); +- cipherStream->close(); +- if (!m_device->seek(contentPos)) { +- QString msg = tr("unable to seek to content position"); +- if (!m_device->errorString().isEmpty()) { +- msg.append("\n").append(m_device->errorString()); +- } +- raiseError(msg); +- +- return nullptr; +- } +- cipherStream->open(QIODevice::ReadOnly); +- +- if (success) { +- break; +- } else { +- cipherStream.reset(); +- } +- } +- +- if (!cipherStream) { +- raiseError(tr("Invalid credentials were provided, please try again.\n" +- "If this reoccurs, then your database file may be corrupt.")); +- } +- +- return cipherStream.take(); +-} +- +-QByteArray KeePass1Reader::key(const QByteArray& password, const QByteArray& keyfileData) +-{ +- Q_ASSERT(!m_masterSeed.isEmpty()); +- Q_ASSERT(!m_transformSeed.isEmpty()); +- +- KeePass1Key key; +- key.setPassword(password); +- key.setKeyfileData(keyfileData); +- +- QByteArray transformedKey; +- bool result = key.transform(*m_db->kdf(), transformedKey); +- +- if (!result) { +- raiseError(tr("Key transformation failed")); +- return QByteArray(); +- } +- +- CryptoHash hash(CryptoHash::Sha256); +- hash.addData(m_masterSeed); +- hash.addData(transformedKey); +- return hash.result(); +-} +- +-bool KeePass1Reader::verifyKey(SymmetricCipherStream* cipherStream) +-{ +- CryptoHash contentHash(CryptoHash::Sha256); +- QByteArray buffer; +- +- do { +- if (!Tools::readFromDevice(cipherStream, buffer)) { +- return false; +- } +- contentHash.addData(buffer); +- } while (!buffer.isEmpty()); +- +- return contentHash.result() == m_contentHashHeader; +-} +- +-Group* KeePass1Reader::readGroup(QIODevice* cipherStream) +-{ +- QScopedPointer group(new Group()); +- group->setUpdateTimeinfo(false); +- group->setParent(m_tmpParent); +- +- TimeInfo timeInfo; +- +- quint32 groupId = 0; +- quint32 groupLevel = 0; +- bool groupIdSet = false; +- bool groupLevelSet = false; +- +- bool ok; +- bool reachedEnd = false; +- +- do { +- quint16 fieldType = Endian::readSizedInt(cipherStream, KeePass1::BYTEORDER, &ok); +- if (!ok) { +- raiseError(tr("Invalid group field type number")); +- return nullptr; +- } +- +- int fieldSize = static_cast(Endian::readSizedInt(cipherStream, KeePass1::BYTEORDER, &ok)); +- if (!ok) { +- raiseError(tr("Invalid group field size")); +- return nullptr; +- } +- +- QByteArray fieldData = cipherStream->read(fieldSize); +- if (fieldData.size() != fieldSize) { +- raiseError(tr("Read group field data doesn't match size")); +- return nullptr; +- } +- +- switch (fieldType) { +- case 0x0000: +- // ignore field +- break; +- case 0x0001: +- if (fieldSize != 4) { +- raiseError(tr("Incorrect group id field size")); +- return nullptr; +- } +- groupId = Endian::bytesToSizedInt(fieldData, KeePass1::BYTEORDER); +- groupIdSet = true; +- break; +- case 0x0002: +- group->setName(QString::fromUtf8(fieldData.constData())); +- break; +- case 0x0003: { +- if (fieldSize != 5) { +- raiseError(tr("Incorrect group creation time field size")); +- return nullptr; +- } +- QDateTime dateTime = dateFromPackedStruct(fieldData); +- if (dateTime.isValid()) { +- timeInfo.setCreationTime(dateTime); +- } +- break; +- } +- case 0x0004: { +- if (fieldSize != 5) { +- raiseError(tr("Incorrect group modification time field size")); +- return nullptr; +- } +- QDateTime dateTime = dateFromPackedStruct(fieldData); +- if (dateTime.isValid()) { +- timeInfo.setLastModificationTime(dateTime); +- } +- break; +- } +- case 0x0005: { +- if (fieldSize != 5) { +- raiseError(tr("Incorrect group access time field size")); +- } +- QDateTime dateTime = dateFromPackedStruct(fieldData); +- if (dateTime.isValid()) { +- timeInfo.setLastAccessTime(dateTime); +- } +- break; +- } +- case 0x0006: { +- if (fieldSize != 5) { +- raiseError(tr("Incorrect group expiry time field size")); +- } +- QDateTime dateTime = dateFromPackedStruct(fieldData); +- if (dateTime.isValid()) { +- timeInfo.setExpires(true); +- timeInfo.setExpiryTime(dateTime); +- } +- break; +- } +- case 0x0007: { +- if (fieldSize != 4) { +- raiseError(tr("Incorrect group icon field size")); +- return nullptr; +- } +- quint32 iconNumber = Endian::bytesToSizedInt(fieldData, KeePass1::BYTEORDER); +- group->setIcon(iconNumber); +- break; +- } +- case 0x0008: { +- if (fieldSize != 2) { +- raiseError(tr("Incorrect group level field size")); +- return nullptr; +- } +- groupLevel = Endian::bytesToSizedInt(fieldData, KeePass1::BYTEORDER); +- groupLevelSet = true; +- break; +- } +- case 0x0009: +- // flags, ignore field +- break; +- case 0xFFFF: +- reachedEnd = true; +- break; +- default: +- // invalid field +- raiseError(tr("Invalid group field type")); +- return nullptr; +- } +- } while (!reachedEnd); +- +- if (!groupIdSet || !groupLevelSet) { +- raiseError(tr("Missing group id or level")); +- return nullptr; +- } +- +- group->setUuid(QUuid::createUuid()); +- group->setTimeInfo(timeInfo); +- m_groupIds.insert(groupId, group.data()); +- m_groupLevels.insert(group.data(), groupLevel); +- +- return group.take(); +-} +- +-Entry* KeePass1Reader::readEntry(QIODevice* cipherStream) +-{ +- QScopedPointer entry(new Entry()); +- entry->setUpdateTimeinfo(false); +- entry->setGroup(m_tmpParent); +- +- TimeInfo timeInfo; +- QString binaryName; +- bool ok; +- bool reachedEnd = false; +- +- do { +- quint16 fieldType = Endian::readSizedInt(cipherStream, KeePass1::BYTEORDER, &ok); +- if (!ok) { +- raiseError(tr("Missing entry field type number")); +- return nullptr; +- } +- +- int fieldSize = static_cast(Endian::readSizedInt(cipherStream, KeePass1::BYTEORDER, &ok)); +- if (!ok) { +- raiseError(tr("Invalid entry field size")); +- return nullptr; +- } +- +- QByteArray fieldData = cipherStream->read(fieldSize); +- if (fieldData.size() != fieldSize) { +- raiseError(tr("Read entry field data doesn't match size")); +- return nullptr; +- } +- +- switch (fieldType) { +- case 0x0000: +- // ignore field +- break; +- case 0x0001: +- if (fieldSize != 16) { +- raiseError(tr("Invalid entry uuid field size")); +- return nullptr; +- } +- m_entryUuids.insert(fieldData, entry.data()); +- break; +- case 0x0002: { +- if (fieldSize != 4) { +- raiseError(tr("Invalid entry group id field size")); +- return nullptr; +- } +- quint32 groupId = Endian::bytesToSizedInt(fieldData, KeePass1::BYTEORDER); +- m_entryGroupIds.insert(entry.data(), groupId); +- break; +- } +- case 0x0003: { +- if (fieldSize != 4) { +- raiseError(tr("Invalid entry icon field size")); +- return nullptr; +- } +- quint32 iconNumber = Endian::bytesToSizedInt(fieldData, KeePass1::BYTEORDER); +- entry->setIcon(iconNumber); +- break; +- } +- case 0x0004: +- entry->setTitle(QString::fromUtf8(fieldData.constData())); +- break; +- case 0x0005: +- entry->setUrl(QString::fromUtf8(fieldData.constData())); +- break; +- case 0x0006: +- entry->setUsername(QString::fromUtf8(fieldData.constData())); +- break; +- case 0x0007: +- entry->setPassword(QString::fromUtf8(fieldData.constData())); +- break; +- case 0x0008: +- parseNotes(QString::fromUtf8(fieldData.constData()), entry.data()); +- break; +- case 0x0009: { +- if (fieldSize != 5) { +- raiseError(tr("Invalid entry creation time field size")); +- return nullptr; +- } +- QDateTime dateTime = dateFromPackedStruct(fieldData); +- if (dateTime.isValid()) { +- timeInfo.setCreationTime(dateTime); +- } +- break; +- } +- case 0x000A: { +- if (fieldSize != 5) { +- raiseError(tr("Invalid entry modification time field size")); +- return nullptr; +- } +- QDateTime dateTime = dateFromPackedStruct(fieldData); +- if (dateTime.isValid()) { +- timeInfo.setLastModificationTime(dateTime); +- } +- break; +- } +- case 0x000B: { +- if (fieldSize != 5) { +- raiseError(tr("Invalid entry creation time field size")); +- return nullptr; +- } +- QDateTime dateTime = dateFromPackedStruct(fieldData); +- if (dateTime.isValid()) { +- timeInfo.setLastAccessTime(dateTime); +- } +- break; +- } +- case 0x000C: { +- if (fieldSize != 5) { +- raiseError(tr("Invalid entry expiry time field size")); +- return nullptr; +- } +- QDateTime dateTime = dateFromPackedStruct(fieldData); +- if (dateTime.isValid()) { +- timeInfo.setExpires(true); +- timeInfo.setExpiryTime(dateTime); +- } +- break; +- } +- case 0x000D: +- binaryName = QString::fromUtf8(fieldData.constData()); +- break; +- case 0x000E: +- if (fieldSize != 0) { +- entry->attachments()->set(binaryName, fieldData); +- } +- break; +- case 0xFFFF: +- reachedEnd = true; +- break; +- default: +- // invalid field +- raiseError(tr("Invalid entry field type")); +- return nullptr; +- } +- } while (!reachedEnd); +- +- entry->setTimeInfo(timeInfo); +- +- return entry.take(); +-} +- +-void KeePass1Reader::parseNotes(const QString& rawNotes, Entry* entry) +-{ +- QRegExp sequenceRegexp("Auto-Type(?:-(\\d+))?: (.+)", Qt::CaseInsensitive, QRegExp::RegExp2); +- QRegExp windowRegexp("Auto-Type-Window(?:-(\\d+))?: (.+)", Qt::CaseInsensitive, QRegExp::RegExp2); +- QHash sequences; +- QMap windows; +- +- QStringList notes; +- +- bool lastLineAutoType = false; +- const QStringList rawNotesLines = rawNotes.split("\n"); +- for (QString line : rawNotesLines) { +- line.remove("\r"); +- +- if (sequenceRegexp.exactMatch(line)) { +- if (sequenceRegexp.cap(1).isEmpty()) { +- entry->setDefaultAutoTypeSequence(sequenceRegexp.cap(2)); +- } else { +- sequences[sequenceRegexp.cap(1).toInt()] = sequenceRegexp.cap(2); +- } +- +- lastLineAutoType = true; +- } else if (windowRegexp.exactMatch(line)) { +- int nr; +- if (windowRegexp.cap(1).isEmpty()) { +- nr = -1; // special number that matches no other sequence +- } else { +- nr = windowRegexp.cap(1).toInt(); +- } +- +- windows[nr].append(windowRegexp.cap(2)); +- +- lastLineAutoType = true; +- } else { +- // don't add empty lines following a removed auto-type line +- if (!lastLineAutoType || !line.isEmpty()) { +- notes.append(line); +- } +- lastLineAutoType = false; +- } +- } +- +- entry->setNotes(notes.join("\n")); +- +- QMapIterator i(windows); +- while (i.hasNext()) { +- i.next(); +- +- QString sequence = sequences.value(i.key()); +- const QStringList windowList = i.value(); +- +- for (const QString& window : windowList) { +- AutoTypeAssociations::Association assoc; +- assoc.window = window; +- assoc.sequence = sequence; +- entry->autoTypeAssociations()->add(assoc); +- } +- } +-} +- +-bool KeePass1Reader::constructGroupTree(const QList& groups) +-{ +- for (int i = 0; i < groups.size(); i++) { +- quint32 level = m_groupLevels.value(groups[i]); +- +- if (level == 0) { +- groups[i]->setParent(m_db->rootGroup()); +- } else { +- for (int j = (i - 1); j >= 0; j--) { +- if (m_groupLevels.value(groups[j]) < level) { +- if ((level - m_groupLevels.value(groups[j])) != 1) { +- return false; +- } +- +- groups[i]->setParent(groups[j]); +- break; +- } +- } +- } +- +- if (groups[i]->parentGroup() == m_tmpParent) { +- return false; +- } +- } +- +- return true; +-} +- +-void KeePass1Reader::parseMetaStream(const Entry* entry) +-{ +- QByteArray data = entry->attachments()->value("bin-stream"); +- +- if (entry->notes() == "KPX_GROUP_TREE_STATE") { +- if (!parseGroupTreeState(data)) { +- qWarning("Unable to parse group tree state metastream."); +- } +- } else if (entry->notes() == "KPX_CUSTOM_ICONS_4") { +- if (!parseCustomIcons4(data)) { +- qWarning("Unable to parse custom icons metastream."); +- } +- } else { +- qWarning("Ignoring unknown metastream \"%s\".", entry->notes().toLocal8Bit().constData()); +- } +-} +- +-bool KeePass1Reader::parseGroupTreeState(const QByteArray& data) +-{ +- if (data.size() < 4) { +- return false; +- } +- +- int pos = 0; +- quint32 num = Endian::bytesToSizedInt(data.mid(pos, 4), KeePass1::BYTEORDER); +- pos += 4; +- +- if (static_cast(data.size() - 4) != (num * 5)) { +- return false; +- } +- +- for (quint32 i = 0; i < num; i++) { +- quint32 groupId = Endian::bytesToSizedInt(data.mid(pos, 4), KeePass1::BYTEORDER); +- pos += 4; +- +- bool expanded = data.at(pos); +- pos += 1; +- +- if (m_groupIds.contains(groupId)) { +- m_groupIds[groupId]->setExpanded(expanded); +- } +- } +- +- return true; +-} +- +-bool KeePass1Reader::parseCustomIcons4(const QByteArray& data) +-{ +- if (data.size() < 12) { +- return false; +- } +- +- int pos = 0; +- +- quint32 numIcons = Endian::bytesToSizedInt(data.mid(pos, 4), KeePass1::BYTEORDER); +- pos += 4; +- +- quint32 numEntries = Endian::bytesToSizedInt(data.mid(pos, 4), KeePass1::BYTEORDER); +- pos += 4; +- +- quint32 numGroups = Endian::bytesToSizedInt(data.mid(pos, 4), KeePass1::BYTEORDER); +- pos += 4; +- +- QList iconUuids; +- +- for (quint32 i = 0; i < numIcons; i++) { +- if (data.size() < (pos + 4)) { +- return false; +- } +- quint32 iconSize = Endian::bytesToSizedInt(data.mid(pos, 4), KeePass1::BYTEORDER); +- pos += 4; +- +- if (static_cast(data.size()) < (pos + iconSize)) { +- return false; +- } +- QImage icon = QImage::fromData(data.mid(pos, iconSize)); +- pos += iconSize; +- +- if (icon.width() != 16 || icon.height() != 16) { +- icon = icon.scaled(16, 16); +- } +- +- QUuid uuid = QUuid::createUuid(); +- iconUuids.append(uuid); +- m_db->metadata()->addCustomIcon(uuid, icon); +- } +- +- if (static_cast(data.size()) < (pos + numEntries * 20)) { +- return false; +- } +- +- for (quint32 i = 0; i < numEntries; i++) { +- QByteArray entryUuid = data.mid(pos, 16); +- pos += 16; +- +- quint32 iconId = Endian::bytesToSizedInt(data.mid(pos, 4), KeePass1::BYTEORDER); +- pos += 4; +- +- if (m_entryUuids.contains(entryUuid) && (iconId < static_cast(iconUuids.size()))) { +- m_entryUuids[entryUuid]->setIcon(iconUuids[iconId]); +- } +- } +- +- if (static_cast(data.size()) < (pos + numGroups * 8)) { +- return false; +- } +- +- for (quint32 i = 0; i < numGroups; i++) { +- quint32 groupId = Endian::bytesToSizedInt(data.mid(pos, 4), KeePass1::BYTEORDER); +- pos += 4; +- +- quint32 iconId = Endian::bytesToSizedInt(data.mid(pos, 4), KeePass1::BYTEORDER); +- pos += 4; +- +- if (m_groupIds.contains(groupId) && (iconId < static_cast(iconUuids.size()))) { +- m_groupIds[groupId]->setIcon(iconUuids[iconId]); +- } +- } +- +- return true; +-} +- +-void KeePass1Reader::raiseError(const QString& errorMessage) +-{ +- m_error = true; +- m_errorStr = errorMessage; +-} +- +-QDateTime KeePass1Reader::dateFromPackedStruct(const QByteArray& data) +-{ +- Q_ASSERT(data.size() == 5); +- +- quint32 dw1 = static_cast(data.at(0)); +- quint32 dw2 = static_cast(data.at(1)); +- quint32 dw3 = static_cast(data.at(2)); +- quint32 dw4 = static_cast(data.at(3)); +- quint32 dw5 = static_cast(data.at(4)); +- +- int y = (dw1 << 6) | (dw2 >> 2); +- int mon = ((dw2 & 0x00000003) << 2) | (dw3 >> 6); +- int d = (dw3 >> 1) & 0x0000001F; +- int h = ((dw3 & 0x00000001) << 4) | (dw4 >> 4); +- int min = ((dw4 & 0x0000000F) << 2) | (dw5 >> 6); +- int s = dw5 & 0x0000003F; +- +- QDateTime dateTime = QDateTime(QDate(y, mon, d), QTime(h, min, s), Qt::UTC); +- +- // check for the special "never" datetime +- if (dateTime == QDateTime(QDate(2999, 12, 28), QTime(23, 59, 59), Qt::UTC)) { +- return QDateTime(); +- } else { +- return dateTime; +- } +-} +- +-bool KeePass1Reader::isMetaStream(const Entry* entry) +-{ +- return entry->attachments()->keys().contains("bin-stream") && !entry->notes().isEmpty() +- && entry->title() == "Meta-Info" && entry->username() == "SYSTEM" && entry->url() == "$" +- && entry->iconNumber() == 0; +-} +- +-QByteArray KeePass1Reader::readKeyfile(QIODevice* device) +-{ +- if (device->size() == 0) { +- return QByteArray(); +- } +- +- if (device->size() == 32) { +- QByteArray data = device->read(32); +- if (data.size() != 32) { +- return QByteArray(); +- } +- +- return data; +- } +- +- if (device->size() == 64) { +- QByteArray data = device->read(64); +- +- if (data.size() != 64) { +- return QByteArray(); +- } +- +- if (Tools::isHex(data)) { +- return QByteArray::fromHex(data); +- } else { +- device->seek(0); +- } +- } +- +- CryptoHash cryptoHash(CryptoHash::Sha256); +- QByteArray buffer; +- +- do { +- if (!Tools::readFromDevice(device, buffer)) { +- return QByteArray(); +- } +- cryptoHash.addData(buffer); +- } while (!buffer.isEmpty()); +- +- return cryptoHash.result(); +-} +- +-QByteArray KeePass1Key::rawKey() const +-{ +- if (m_keyfileData.isEmpty()) { +- return CryptoHash::hash(m_password, CryptoHash::Sha256); +- } else if (m_password.isEmpty()) { +- return m_keyfileData; +- } else { +- CryptoHash keyHash(CryptoHash::Sha256); +- keyHash.addData(CryptoHash::hash(m_password, CryptoHash::Sha256)); +- keyHash.addData(m_keyfileData); +- return keyHash.result(); +- } +-} +- +-void KeePass1Key::clear() +-{ +- CompositeKey::clear(); +- +- m_password.clear(); +- m_keyfileData.clear(); +-} +- +-void KeePass1Key::setPassword(const QByteArray& password) +-{ +- m_password = password; +-} +- +-void KeePass1Key::setKeyfileData(const QByteArray& keyfileData) +-{ +- m_keyfileData = keyfileData; +-} +diff -urNr keepassxc-2.6.4-orig/src/format/KeePass1Reader.h keepassxc-2.6.4-patched/src/format/KeePass1Reader.h +--- keepassxc-2.6.4-orig/src/format/KeePass1Reader.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/KeePass1Reader.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,85 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_KEEPASS1READER_H +-#define KEEPASSX_KEEPASS1READER_H +- +-#include +-#include +-#include +-#include +- +-class Database; +-class Entry; +-class Group; +-class SymmetricCipherStream; +-class QIODevice; +- +-class KeePass1Reader +-{ +- Q_DECLARE_TR_FUNCTIONS(KeePass1Reader) +- +-public: +- KeePass1Reader(); +- QSharedPointer readDatabase(QIODevice* device, const QString& password, QIODevice* keyfileDevice); +- QSharedPointer readDatabase(QIODevice* device, const QString& password, const QString& keyfileName); +- QSharedPointer readDatabase(const QString& filename, const QString& password, const QString& keyfileName); +- bool hasError(); +- QString errorString(); +- +-private: +- enum PasswordEncoding +- { +- Windows1252, +- Latin1, +- UTF8 +- }; +- +- SymmetricCipherStream* testKeys(const QString& password, const QByteArray& keyfileData, qint64 contentPos); +- QByteArray key(const QByteArray& password, const QByteArray& keyfileData); +- bool verifyKey(SymmetricCipherStream* cipherStream); +- Group* readGroup(QIODevice* cipherStream); +- Entry* readEntry(QIODevice* cipherStream); +- void parseNotes(const QString& rawNotes, Entry* entry); +- bool constructGroupTree(const QList& groups); +- void parseMetaStream(const Entry* entry); +- bool parseGroupTreeState(const QByteArray& data); +- bool parseCustomIcons4(const QByteArray& data); +- void raiseError(const QString& errorMessage); +- static QByteArray readKeyfile(QIODevice* device); +- static QDateTime dateFromPackedStruct(const QByteArray& data); +- static bool isMetaStream(const Entry* entry); +- +- QSharedPointer m_db; +- Group* m_tmpParent; +- QIODevice* m_device; +- quint32 m_encryptionFlags; +- QByteArray m_masterSeed; +- QByteArray m_encryptionIV; +- QByteArray m_contentHashHeader; +- QByteArray m_transformSeed; +- quint32 m_transformRounds; +- QHash m_groupIds; +- QHash m_groupLevels; +- QHash m_entryUuids; +- QHash m_entryGroupIds; +- +- bool m_error; +- QString m_errorStr; +-}; +- +-#endif // KEEPASSX_KEEPASS1READER_H +diff -urNr keepassxc-2.6.4-orig/src/format/KeePass2.cpp keepassxc-2.6.4-patched/src/format/KeePass2.cpp +--- keepassxc-2.6.4-orig/src/format/KeePass2.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/KeePass2.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,136 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "KeePass2.h" +-#include "crypto/CryptoHash.h" +-#include "crypto/kdf/AesKdf.h" +-#include "crypto/kdf/Argon2Kdf.h" +-#include +- +-#define UUID_LENGTH 16 +- +-const QUuid KeePass2::CIPHER_AES128 = QUuid("61ab05a1-9464-41c3-8d74-3a563df8dd35"); +-const QUuid KeePass2::CIPHER_AES256 = QUuid("31c1f2e6-bf71-4350-be58-05216afc5aff"); +-const QUuid KeePass2::CIPHER_TWOFISH = QUuid("ad68f29f-576f-4bb9-a36a-d47af965346c"); +-const QUuid KeePass2::CIPHER_CHACHA20 = QUuid("d6038a2b-8b6f-4cb5-a524-339a31dbb59a"); +- +-const QUuid KeePass2::KDF_AES_KDBX3 = QUuid("c9d9f39a-628a-4460-bf74-0d08c18a4fea"); +-const QUuid KeePass2::KDF_AES_KDBX4 = QUuid("7c02bb82-79a7-4ac0-927d-114a00648238"); +-const QUuid KeePass2::KDF_ARGON2D = QUuid("ef636ddf-8c29-444b-91f7-a9a403e30a0c"); +-const QUuid KeePass2::KDF_ARGON2ID = QUuid("9e298b19-56db-4773-b23d-fc3ec6f0a1e6"); +- +-const QByteArray KeePass2::INNER_STREAM_SALSA20_IV("\xe8\x30\x09\x4b\x97\x20\x5d\x2a"); +- +-const QString KeePass2::KDFPARAM_UUID("$UUID"); +-// AES parameters +-const QString KeePass2::KDFPARAM_AES_ROUNDS("R"); +-const QString KeePass2::KDFPARAM_AES_SEED("S"); +-// Argon2 parameters +-const QString KeePass2::KDFPARAM_ARGON2_SALT("S"); +-const QString KeePass2::KDFPARAM_ARGON2_PARALLELISM("P"); +-const QString KeePass2::KDFPARAM_ARGON2_MEMORY("M"); +-const QString KeePass2::KDFPARAM_ARGON2_ITERATIONS("I"); +-const QString KeePass2::KDFPARAM_ARGON2_VERSION("V"); +-const QString KeePass2::KDFPARAM_ARGON2_SECRET("K"); +-const QString KeePass2::KDFPARAM_ARGON2_ASSOCDATA("A"); +- +-const QList> KeePass2::CIPHERS{ +- qMakePair(KeePass2::CIPHER_AES256, QObject::tr("AES 256-bit")), +- qMakePair(KeePass2::CIPHER_TWOFISH, QObject::tr("Twofish 256-bit")), +- qMakePair(KeePass2::CIPHER_CHACHA20, QObject::tr("ChaCha20 256-bit"))}; +- +-const QList> KeePass2::KDFS{ +- qMakePair(KeePass2::KDF_ARGON2D, QObject::tr("Argon2d (KDBX 4 – recommended)")), +- qMakePair(KeePass2::KDF_ARGON2ID, QObject::tr("Argon2id (KDBX 4)")), +- qMakePair(KeePass2::KDF_AES_KDBX4, QObject::tr("AES-KDF (KDBX 4)")), +- qMakePair(KeePass2::KDF_AES_KDBX3, QObject::tr("AES-KDF (KDBX 3.1)"))}; +- +-QByteArray KeePass2::hmacKey(const QByteArray& masterSeed, const QByteArray& transformedMasterKey) +-{ +- CryptoHash hmacKeyHash(CryptoHash::Sha512); +- hmacKeyHash.addData(masterSeed); +- hmacKeyHash.addData(transformedMasterKey); +- hmacKeyHash.addData(QByteArray(1, '\x01')); +- return hmacKeyHash.result(); +-} +- +-/** +- * Create KDF object from KDBX4+ KDF parameters. +- * +- * @param p variant map containing parameters +- * @return initialized KDF +- */ +-QSharedPointer KeePass2::kdfFromParameters(const QVariantMap& p) +-{ +- QByteArray uuidBytes = p.value(KDFPARAM_UUID).toByteArray(); +- if (uuidBytes.size() != UUID_LENGTH) { +- return {}; +- } +- +- QUuid kdfUuid = QUuid::fromRfc4122(uuidBytes); +- if (kdfUuid == KDF_AES_KDBX3) { +- // upgrade to non-legacy AES-KDF, since KDBX3 doesn't have any KDF parameters +- kdfUuid = KDF_AES_KDBX4; +- } +- QSharedPointer kdf = uuidToKdf(kdfUuid); +- if (kdf.isNull()) { +- return {}; +- } +- +- if (!kdf->processParameters(p)) { +- return {}; +- } +- +- return kdf; +-} +- +-QVariantMap KeePass2::kdfToParameters(const QSharedPointer& kdf) +-{ +- return kdf->writeParameters(); +-} +- +-QSharedPointer KeePass2::uuidToKdf(const QUuid& uuid) +-{ +- if (uuid == KDF_AES_KDBX3) { +- return QSharedPointer::create(true); +- } +- if (uuid == KDF_AES_KDBX4) { +- return QSharedPointer::create(); +- } +- if (uuid == KDF_ARGON2D) { +- return QSharedPointer::create(Argon2Kdf::Type::Argon2d); +- } +- if (uuid == KDF_ARGON2ID) { +- return QSharedPointer::create(Argon2Kdf::Type::Argon2id); +- } +- +- return {}; +-} +- +-KeePass2::ProtectedStreamAlgo KeePass2::idToProtectedStreamAlgo(quint32 id) +-{ +- switch (id) { +- case static_cast(KeePass2::ProtectedStreamAlgo::ArcFourVariant): +- return KeePass2::ProtectedStreamAlgo::ArcFourVariant; +- case static_cast(KeePass2::ProtectedStreamAlgo::Salsa20): +- return KeePass2::ProtectedStreamAlgo::Salsa20; +- case static_cast(KeePass2::ProtectedStreamAlgo::ChaCha20): +- return KeePass2::ProtectedStreamAlgo::ChaCha20; +- default: +- return KeePass2::ProtectedStreamAlgo::InvalidProtectedStreamAlgo; +- } +-} +diff -urNr keepassxc-2.6.4-orig/src/format/KeePass2.h keepassxc-2.6.4-patched/src/format/KeePass2.h +--- keepassxc-2.6.4-orig/src/format/KeePass2.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/KeePass2.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,138 +0,0 @@ +-/* +- * Copyright (C) 2010 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_KEEPASS2_H +-#define KEEPASSX_KEEPASS2_H +- +-#include +-#include +-#include +-#include +-#include +-#include +- +-#include "crypto/SymmetricCipher.h" +-#include "crypto/kdf/Kdf.h" +- +-namespace KeePass2 +-{ +- +- constexpr quint32 SIGNATURE_1 = 0x9AA2D903; +- constexpr quint32 SIGNATURE_2 = 0xB54BFB67; +- +- constexpr quint32 FILE_VERSION_CRITICAL_MASK = 0xFFFF0000; +- constexpr quint32 FILE_VERSION_4 = 0x00040000; +- constexpr quint32 FILE_VERSION_3_1 = 0x00030001; +- constexpr quint32 FILE_VERSION_3 = 0x00030000; +- constexpr quint32 FILE_VERSION_2 = 0x00020000; +- constexpr quint32 FILE_VERSION_MIN = FILE_VERSION_2; +- +- constexpr quint16 VARIANTMAP_VERSION = 0x0100; +- constexpr quint16 VARIANTMAP_CRITICAL_MASK = 0xFF00; +- +- const QSysInfo::Endian BYTEORDER = QSysInfo::LittleEndian; +- +- extern const QUuid CIPHER_AES128; +- extern const QUuid CIPHER_AES256; +- extern const QUuid CIPHER_TWOFISH; +- extern const QUuid CIPHER_CHACHA20; +- +- extern const QUuid KDF_AES_KDBX3; +- extern const QUuid KDF_AES_KDBX4; +- extern const QUuid KDF_ARGON2D; +- extern const QUuid KDF_ARGON2ID; +- +- extern const QByteArray INNER_STREAM_SALSA20_IV; +- +- extern const QString KDFPARAM_UUID; +- extern const QString KDFPARAM_AES_ROUNDS; +- extern const QString KDFPARAM_AES_SEED; +- extern const QString KDFPARAM_ARGON2_SALT; +- extern const QString KDFPARAM_ARGON2_PARALLELISM; +- extern const QString KDFPARAM_ARGON2_MEMORY; +- extern const QString KDFPARAM_ARGON2_ITERATIONS; +- extern const QString KDFPARAM_ARGON2_VERSION; +- extern const QString KDFPARAM_ARGON2_SECRET; +- extern const QString KDFPARAM_ARGON2_ASSOCDATA; +- +- extern const QList> CIPHERS; +- extern const QList> KDFS; +- +- enum class HeaderFieldID +- { +- EndOfHeader = 0, +- Comment = 1, +- CipherID = 2, +- CompressionFlags = 3, +- MasterSeed = 4, +- TransformSeed = 5, +- TransformRounds = 6, +- EncryptionIV = 7, +- ProtectedStreamKey = 8, +- StreamStartBytes = 9, +- InnerRandomStreamID = 10, +- KdfParameters = 11, +- PublicCustomData = 12 +- }; +- +- enum class InnerHeaderFieldID : quint8 +- { +- End = 0, +- InnerRandomStreamID = 1, +- InnerRandomStreamKey = 2, +- Binary = 3 +- }; +- +- enum class ProtectedStreamAlgo +- { +- ArcFourVariant = 1, +- Salsa20 = 2, +- ChaCha20 = 3, +- InvalidProtectedStreamAlgo = -1 +- }; +- +- enum class VariantMapFieldType : quint8 +- { +- End = 0, +- // Byte = 0x02, +- // UInt16 = 0x03, +- UInt32 = 0x04, +- UInt64 = 0x05, +- // Signed mask: 0x08 +- Bool = 0x08, +- // SByte = 0x0A, +- // Int16 = 0x0B, +- Int32 = 0x0C, +- Int64 = 0x0D, +- // Float = 0x10, +- // Double = 0x11, +- // Decimal = 0x12, +- // Char = 0x17, // 16-bit Unicode character +- String = 0x18, +- // Array mask: 0x40 +- ByteArray = 0x42 +- }; +- +- QByteArray hmacKey(const QByteArray& masterSeed, const QByteArray& transformedMasterKey); +- QSharedPointer kdfFromParameters(const QVariantMap& p); +- QVariantMap kdfToParameters(const QSharedPointer& kdf); +- QSharedPointer uuidToKdf(const QUuid& uuid); +- ProtectedStreamAlgo idToProtectedStreamAlgo(quint32 id); +- +-} // namespace KeePass2 +- +-#endif // KEEPASSX_KEEPASS2_H +diff -urNr keepassxc-2.6.4-orig/src/format/KeePass2RandomStream.cpp keepassxc-2.6.4-patched/src/format/KeePass2RandomStream.cpp +--- keepassxc-2.6.4-orig/src/format/KeePass2RandomStream.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/KeePass2RandomStream.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,133 +0,0 @@ +-/* +- * Copyright (C) 2010 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "KeePass2RandomStream.h" +- +-#include "crypto/CryptoHash.h" +-#include "format/KeePass2.h" +- +-KeePass2RandomStream::KeePass2RandomStream(KeePass2::ProtectedStreamAlgo algo) +- : m_cipher(mapAlgo(algo), SymmetricCipher::Stream, SymmetricCipher::Encrypt) +- , m_offset(0) +-{ +-} +- +-bool KeePass2RandomStream::init(const QByteArray& key) +-{ +- switch (m_cipher.algorithm()) { +- case SymmetricCipher::Salsa20: +- return m_cipher.init(CryptoHash::hash(key, CryptoHash::Sha256), KeePass2::INNER_STREAM_SALSA20_IV); +- case SymmetricCipher::ChaCha20: { +- QByteArray keyIv = CryptoHash::hash(key, CryptoHash::Sha512); +- return m_cipher.init(keyIv.left(32), keyIv.mid(32, 12)); +- } +- default: +- qWarning("Invalid stream algorithm (%d)", m_cipher.algorithm()); +- break; +- } +- return false; +-} +- +-QByteArray KeePass2RandomStream::randomBytes(int size, bool* ok) +-{ +- QByteArray result; +- +- int bytesRemaining = size; +- +- while (bytesRemaining > 0) { +- if (m_buffer.size() == m_offset) { +- if (!loadBlock()) { +- *ok = false; +- return QByteArray(); +- } +- } +- +- int bytesToCopy = qMin(bytesRemaining, m_buffer.size() - m_offset); +- result.append(m_buffer.mid(m_offset, bytesToCopy)); +- m_offset += bytesToCopy; +- bytesRemaining -= bytesToCopy; +- } +- +- *ok = true; +- return result; +-} +- +-QByteArray KeePass2RandomStream::process(const QByteArray& data, bool* ok) +-{ +- bool randomBytesOk; +- +- QByteArray randomData = randomBytes(data.size(), &randomBytesOk); +- if (!randomBytesOk) { +- *ok = false; +- return QByteArray(); +- } +- +- QByteArray result; +- result.resize(data.size()); +- +- for (int i = 0; i < data.size(); i++) { +- result[i] = data[i] ^ randomData[i]; +- } +- +- *ok = true; +- return result; +-} +- +-bool KeePass2RandomStream::processInPlace(QByteArray& data) +-{ +- bool ok; +- QByteArray randomData = randomBytes(data.size(), &ok); +- if (!ok) { +- return false; +- } +- +- for (int i = 0; i < data.size(); i++) { +- data[i] = data[i] ^ randomData[i]; +- } +- +- return true; +-} +- +-QString KeePass2RandomStream::errorString() const +-{ +- return m_cipher.errorString(); +-} +- +-bool KeePass2RandomStream::loadBlock() +-{ +- Q_ASSERT(m_offset == m_buffer.size()); +- +- m_buffer.fill('\0', m_cipher.blockSize()); +- if (!m_cipher.processInPlace(m_buffer)) { +- return false; +- } +- m_offset = 0; +- +- return true; +-} +- +-SymmetricCipher::Algorithm KeePass2RandomStream::mapAlgo(KeePass2::ProtectedStreamAlgo algo) +-{ +- switch (algo) { +- case KeePass2::ProtectedStreamAlgo::ChaCha20: +- return SymmetricCipher::ChaCha20; +- case KeePass2::ProtectedStreamAlgo::Salsa20: +- return SymmetricCipher::Salsa20; +- default: +- return SymmetricCipher::InvalidAlgorithm; +- } +-} +\ Manca newline alla fine del file +diff -urNr keepassxc-2.6.4-orig/src/format/KeePass2RandomStream.h keepassxc-2.6.4-patched/src/format/KeePass2RandomStream.h +--- keepassxc-2.6.4-orig/src/format/KeePass2RandomStream.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/KeePass2RandomStream.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,47 +0,0 @@ +-/* +- * Copyright (C) 2010 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_KEEPASS2RANDOMSTREAM_H +-#define KEEPASSX_KEEPASS2RANDOMSTREAM_H +- +-#include +- +-#include "KeePass2.h" +-#include "crypto/SymmetricCipher.h" +- +-class KeePass2RandomStream +-{ +-public: +- KeePass2RandomStream(KeePass2::ProtectedStreamAlgo algo); +- +- bool init(const QByteArray& key); +- QByteArray randomBytes(int size, bool* ok); +- QByteArray process(const QByteArray& data, bool* ok); +- Q_REQUIRED_RESULT bool processInPlace(QByteArray& data); +- QString errorString() const; +- +-private: +- bool loadBlock(); +- +- SymmetricCipher m_cipher; +- QByteArray m_buffer; +- int m_offset; +- +- static SymmetricCipher::Algorithm mapAlgo(KeePass2::ProtectedStreamAlgo algo); +-}; +- +-#endif // KEEPASSX_KEEPASS2RANDOMSTREAM_H +diff -urNr keepassxc-2.6.4-orig/src/format/KeePass2Reader.cpp keepassxc-2.6.4-patched/src/format/KeePass2Reader.cpp +--- keepassxc-2.6.4-orig/src/format/KeePass2Reader.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/KeePass2Reader.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,137 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "format/KeePass2Reader.h" +-#include "format/Kdbx3Reader.h" +-#include "format/Kdbx4Reader.h" +-#include "format/KeePass1.h" +- +-#include +- +-/** +- * Read database from file and detect correct file format. +- * +- * @param filename input file +- * @param key database encryption composite key +- * @param db Database to read into +- * @return true on success +- */ +-bool KeePass2Reader::readDatabase(const QString& filename, QSharedPointer key, Database* db) +-{ +- QFile file(filename); +- if (!file.open(QFile::ReadOnly)) { +- raiseError(file.errorString()); +- return false; +- } +- +- bool ok = readDatabase(&file, std::move(key), db); +- +- if (file.error() != QFile::NoError) { +- raiseError(file.errorString()); +- return false; +- } +- +- return ok; +-} +- +-/** +- * Read database from device and detect correct file format. +- * +- * @param device input device +- * @param key database encryption composite key +- * @param db Database to read into +- * @return true on success +- */ +-bool KeePass2Reader::readDatabase(QIODevice* device, QSharedPointer key, Database* db) +-{ +- m_error = false; +- m_errorStr.clear(); +- +- quint32 signature1, signature2; +- bool ok = KdbxReader::readMagicNumbers(device, signature1, signature2, m_version); +- +- if (!ok) { +- raiseError(tr("Failed to read database file.")); +- return false; +- } +- +- if (signature1 == KeePass1::SIGNATURE_1 && signature2 == KeePass1::SIGNATURE_2) { +- raiseError(tr("The selected file is an old KeePass 1 database (.kdb).\n\n" +- "You can import it by clicking on Database > 'Import KeePass 1 database...'.\n" +- "This is a one-way migration. You won't be able to open the imported " +- "database with the old KeePassX 0.4 version.")); +- return false; +- } else if (!(signature1 == KeePass2::SIGNATURE_1 && signature2 == KeePass2::SIGNATURE_2)) { +- raiseError(tr("Not a KeePass database.")); +- return false; +- } +- +- // mask out minor version +- m_version &= KeePass2::FILE_VERSION_CRITICAL_MASK; +- +- quint32 maxVersion = KeePass2::FILE_VERSION_4 & KeePass2::FILE_VERSION_CRITICAL_MASK; +- if (m_version < KeePass2::FILE_VERSION_MIN || m_version > maxVersion) { +- raiseError(tr("Unsupported KeePass 2 database version.")); +- return false; +- } +- +- // determine file format (KDBX 2/3 or 4) +- if (m_version < KeePass2::FILE_VERSION_4) { +- m_reader.reset(new Kdbx3Reader()); +- } else { +- m_reader.reset(new Kdbx4Reader()); +- } +- +- return m_reader->readDatabase(device, std::move(key), db); +-} +- +-bool KeePass2Reader::hasError() const +-{ +- return m_error || (!m_reader.isNull() && m_reader->hasError()); +-} +- +-QString KeePass2Reader::errorString() const +-{ +- return !m_reader.isNull() ? m_reader->errorString() : m_errorStr; +-} +- +-/** +- * @return detected KDBX version +- */ +-quint32 KeePass2Reader::version() const +-{ +- return m_version; +-} +- +-/** +- * @return KDBX reader used for reading the input file +- */ +-QSharedPointer KeePass2Reader::reader() const +-{ +- return m_reader; +-} +- +-/** +- * Raise an error. Use in case of an unexpected read error. +- * +- * @param errorMessage error message +- */ +-void KeePass2Reader::raiseError(const QString& errorMessage) +-{ +- m_error = true; +- m_errorStr = errorMessage; +-} +diff -urNr keepassxc-2.6.4-orig/src/format/KeePass2Reader.h keepassxc-2.6.4-patched/src/format/KeePass2Reader.h +--- keepassxc-2.6.4-orig/src/format/KeePass2Reader.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/KeePass2Reader.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,57 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_KEEPASS2READER_H +-#define KEEPASSX_KEEPASS2READER_H +- +-#include "KdbxReader.h" +-#include "core/Database.h" +-#include "format/KeePass2.h" +-#include "keys/CompositeKey.h" +- +-#include +-#include +-#include +-#include +-#include +-#include +- +-class KeePass2Reader +-{ +- Q_DECLARE_TR_FUNCTIONS(KdbxReader) +- +-public: +- bool readDatabase(const QString& filename, QSharedPointer key, Database* db); +- bool readDatabase(QIODevice* device, QSharedPointer key, Database* db); +- +- bool hasError() const; +- QString errorString() const; +- +- QSharedPointer reader() const; +- quint32 version() const; +- +-private: +- void raiseError(const QString& errorMessage); +- +- bool m_error = false; +- QString m_errorStr = ""; +- +- QSharedPointer m_reader; +- quint32 m_version = 0; +-}; +- +-#endif // KEEPASSX_KEEPASS2READER_H +diff -urNr keepassxc-2.6.4-orig/src/format/KeePass2Writer.cpp keepassxc-2.6.4-patched/src/format/KeePass2Writer.cpp +--- keepassxc-2.6.4-orig/src/format/KeePass2Writer.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/KeePass2Writer.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,162 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include +-#include +- +-#include "core/Database.h" +-#include "core/Group.h" +-#include "core/Metadata.h" +-#include "crypto/kdf/AesKdf.h" +-#include "format/Kdbx3Writer.h" +-#include "format/Kdbx4Writer.h" +-#include "format/KeePass2Writer.h" +- +-/** +- * Write a database to a KDBX file. +- * +- * @param filename output filename +- * @param db source database +- * @return true on success +- */ +-bool KeePass2Writer::writeDatabase(const QString& filename, Database* db) +-{ +- QFile file(filename); +- if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { +- raiseError(file.errorString()); +- return false; +- } +- return writeDatabase(&file, db); +-} +- +-/** +- * @return true if the database should upgrade to KDBX4. +- */ +-bool KeePass2Writer::implicitUpgradeNeeded(Database const* db) const +-{ +- if (db->kdf()->uuid() != KeePass2::KDF_AES_KDBX3) { +- return false; +- } +- +- if (!db->publicCustomData().isEmpty()) { +- return true; +- } +- +- for (const auto& group : db->rootGroup()->groupsRecursive(true)) { +- if (group->customData() && !group->customData()->isEmpty()) { +- return true; +- } +- +- for (const auto& entry : group->entries()) { +- if (entry->customData() && !entry->customData()->isEmpty()) { +- return true; +- } +- +- for (const auto& historyItem : entry->historyItems()) { +- if (historyItem->customData() && !historyItem->customData()->isEmpty()) { +- return true; +- } +- } +- } +- } +- +- return false; +-} +- +-/** +- * Write a database to a device in KDBX format. +- * +- * @param device output device +- * @param db source database +- * @return true on success +- */ +-bool KeePass2Writer::writeDatabase(QIODevice* device, Database* db) +-{ +- m_error = false; +- m_errorStr.clear(); +- +- bool upgradeNeeded = implicitUpgradeNeeded(db); +- if (upgradeNeeded) { +- // We MUST re-transform the key, because challenge-response hashing has changed in KDBX 4. +- // If we forget to re-transform, the database will be saved WITHOUT a challenge-response key component! +- db->changeKdf(KeePass2::uuidToKdf(KeePass2::KDF_AES_KDBX4)); +- } +- +- if (db->kdf()->uuid() == KeePass2::KDF_AES_KDBX3) { +- Q_ASSERT(!upgradeNeeded); +- m_version = KeePass2::FILE_VERSION_3_1; +- m_writer.reset(new Kdbx3Writer()); +- } else { +- m_version = KeePass2::FILE_VERSION_4; +- m_writer.reset(new Kdbx4Writer()); +- } +- +- return m_writer->writeDatabase(device, db); +-} +- +-void KeePass2Writer::extractDatabase(Database* db, QByteArray& xmlOutput) +-{ +- m_error = false; +- m_errorStr.clear(); +- +- if (db->kdf()->uuid() == KeePass2::KDF_AES_KDBX3) { +- m_version = KeePass2::FILE_VERSION_3_1; +- m_writer.reset(new Kdbx3Writer()); +- } else { +- m_version = KeePass2::FILE_VERSION_4; +- m_writer.reset(new Kdbx4Writer()); +- } +- +- m_writer->extractDatabase(xmlOutput, db); +-} +- +-bool KeePass2Writer::hasError() const +-{ +- return m_error || (m_writer && m_writer->hasError()); +-} +- +-QString KeePass2Writer::errorString() const +-{ +- return m_writer ? m_writer->errorString() : m_errorStr; +-} +- +-/** +- * Raise an error. Use in case of an unexpected write error. +- * +- * @param errorMessage error message +- */ +-void KeePass2Writer::raiseError(const QString& errorMessage) +-{ +- m_error = true; +- m_errorStr = errorMessage; +-} +- +-/** +- * @return KDBX writer used for writing the output file +- */ +-QSharedPointer KeePass2Writer::writer() const +-{ +- return QSharedPointer(); +-} +- +-/** +- * @return KDBX version used for writing the output file +- */ +-quint32 KeePass2Writer::version() const +-{ +- return m_version; +-} +diff -urNr keepassxc-2.6.4-orig/src/format/KeePass2Writer.h keepassxc-2.6.4-patched/src/format/KeePass2Writer.h +--- keepassxc-2.6.4-orig/src/format/KeePass2Writer.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/KeePass2Writer.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,55 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_KEEPASS2WRITER_H +-#define KEEPASSX_KEEPASS2WRITER_H +- +-#include "KdbxWriter.h" +- +-#include +-#include +- +-class QIODevice; +-class Database; +- +-class KeePass2Writer +-{ +- Q_DECLARE_TR_FUNCTIONS(KeePass2Writer) +- +-public: +- bool writeDatabase(const QString& filename, Database* db); +- bool writeDatabase(QIODevice* device, Database* db); +- void extractDatabase(Database* db, QByteArray& xmlOutput); +- +- QSharedPointer writer() const; +- quint32 version() const; +- +- bool hasError() const; +- QString errorString() const; +- +-private: +- void raiseError(const QString& errorMessage); +- bool implicitUpgradeNeeded(Database const* db) const; +- +- bool m_error = false; +- QString m_errorStr = ""; +- +- QScopedPointer m_writer; +- quint32 m_version = 0; +-}; +- +-#endif // KEEPASSX_KEEPASS2READER_H +diff -urNr keepassxc-2.6.4-orig/src/format/OpData01.cpp keepassxc-2.6.4-patched/src/format/OpData01.cpp +--- keepassxc-2.6.4-orig/src/format/OpData01.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/OpData01.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,137 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "OpData01.h" +- +-#include "crypto/CryptoHash.h" +-#include "crypto/SymmetricCipher.h" +- +-#include +-#include +- +-OpData01::OpData01(QObject* parent) +- : QObject(parent) +-{ +-} +- +-OpData01::~OpData01() +-{ +-} +- +-bool OpData01::decodeBase64(QString const& b64String, const QByteArray& key, const QByteArray& hmacKey) +-{ +- const QByteArray b64Bytes = QByteArray::fromBase64(b64String.toUtf8()); +- return decode(b64Bytes, key, hmacKey); +-} +- +-bool OpData01::decode(const QByteArray& data, const QByteArray& key, const QByteArray& hmacKey) +-{ +- /*! +- * The first 8 bytes of the data are the string “opdata01â€. +- */ +- const QByteArray header("opdata01"); +- if (!data.startsWith(header)) { +- m_errorStr = tr("Invalid OpData01, does not contain header"); +- return false; +- } +- +- QDataStream in(data); +- in.setByteOrder(QDataStream::LittleEndian); +- in.skipRawData(header.size()); +- +- /*! +- * The next 8 bytes contain the length in bytes of the plaintext as a little endian unsigned 64 bit integer. +- */ +- qlonglong len; +- in >> len; +- +- /*! +- * The next 16 bytes are the randomly chosen initialization vector. +- */ +- QByteArray iv(16, '\0'); +- int read = in.readRawData(iv.data(), 16); +- if (read != 16) { +- m_errorStr = tr("Unable to read all IV bytes, wanted 16 but got %1").arg(iv.size()); +- return false; +- } +- +- SymmetricCipher cipher(SymmetricCipher::Aes256, SymmetricCipher::Cbc, SymmetricCipher::Decrypt); +- if (!cipher.init(key, iv)) { +- m_errorStr = tr("Unable to init cipher for opdata01: %1").arg(cipher.errorString()); +- return false; +- } +- +- /*! +- * The plaintext is padded using the following scheme. +- * +- * If the size of the plaintext is an even multiple of the block size then 1 block of random data is prepended +- * to the plaintext. Otherwise, between 1 and 15 (inclusive) bytes of random data are prepended to the plaintext +- * to achieve an even multiple of blocks. +- */ +- const int blockSize = cipher.blockSize(); +- int randomBytes = blockSize - (len % blockSize); +- if (randomBytes == 0) { +- // add random block +- randomBytes = blockSize; +- } +- qlonglong clear_len = len + randomBytes; +- QByteArray qbaCT(clear_len, '\0'); +- in.readRawData(qbaCT.data(), clear_len); +- +- /*! +- * The HMAC-SHA256 is computed over the entirety of the opdata including header, length, IV and ciphertext +- * using a 256-bit MAC key. The 256-bit MAC is not truncated. It is appended to the ciphertext. +- */ +- const int hmacLen = 256 / 8; +- QByteArray hmacSig(hmacLen, '\0'); // 256 / 8, '\0'); +- in.readRawData(hmacSig.data(), hmacLen); +- if (hmacSig.size() != hmacLen) { +- m_errorStr = tr("Unable to read all HMAC signature bytes"); +- return false; +- } +- +- const QByteArray hmacData = data.mid(0, data.size() - hmacSig.size()); +- const QByteArray actualHmac = CryptoHash::hmac(hmacData, hmacKey, CryptoHash::Algorithm::Sha256); +- if (actualHmac != hmacSig) { +- m_errorStr = tr("Malformed OpData01 due to a failed HMAC"); +- return false; +- } +- +- if (!cipher.processInPlace(qbaCT)) { +- m_errorStr = tr("Unable to process clearText in place"); +- return false; +- } +- +- // Remove random bytes +- const QByteArray& clearText = qbaCT.mid(randomBytes); +- if (clearText.size() != len) { +- m_errorStr = tr("Expected %1 bytes of clear-text, found %2").arg(len, clearText.size()); +- return false; +- } +- m_clearText = clearText; +- return true; +-} +- +-QByteArray OpData01::getClearText() +-{ +- return m_clearText; +-} +- +-QString OpData01::errorString() +-{ +- return m_errorStr; +-} +diff -urNr keepassxc-2.6.4-orig/src/format/OpData01.h keepassxc-2.6.4-patched/src/format/OpData01.h +--- keepassxc-2.6.4-orig/src/format/OpData01.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/OpData01.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,59 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_OPDATA01_H +-#define KEEPASSXC_OPDATA01_H +- +-#include +- +-/*! +- * Packages and transports the AgileBits data structure called \c OpData01 +- * used to encypt and provide HMAC for encrypted data. +- * \sa https://support.1password.com/opvault-design/#opdata01 +- */ +-class OpData01 : public QObject +-{ +- Q_OBJECT +- +-public: +- explicit OpData01(QObject* parent = nullptr); +- ~OpData01() override; +- +- /*! +- * The convenience equivalent of decode01(OpData01,const QByteArray,const QByteArray,const QByteArray) that simply +- * decodes the provided base64 string into its underlying \c QByteArray. +- */ +- bool decodeBase64(QString const& b64String, const QByteArray& key, const QByteArray& hmacKey); +- +- /*! +- * Populates the given \code OpData01 structure by decoding the provided blob of data, +- * using the given key and then verifies using the given HMAC key. +- * \returns true if things went well and \code m_clearText is usable, false and \code m_errorStr will contain +- * details. +- */ +- bool decode(const QByteArray& data, const QByteArray& key, const QByteArray& hmacKey); +- +- QByteArray getClearText(); +- +- QString errorString(); +- +-private: +- QByteArray m_clearText; +- QString m_errorStr; +-}; +- +-#endif // KEEPASSXC_OPDATA01_H +diff -urNr keepassxc-2.6.4-orig/src/format/OpVaultReaderAttachments.cpp keepassxc-2.6.4-patched/src/format/OpVaultReaderAttachments.cpp +--- keepassxc-2.6.4-orig/src/format/OpVaultReaderAttachments.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/OpVaultReaderAttachments.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,236 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "OpData01.h" +-#include "OpVaultReader.h" +- +-#include "core/Group.h" +-#include "core/Tools.h" +- +-#include +-#include +-#include +-#include +- +-/*! +- * This will \c qCritical() if unable to open the file for reading. +- * @param file the \c .attachment file to decode +- * @return \c nullptr if unable to take action, else a pair of metadata and the actual attachment bits +- * \sa https://support.1password.com/opvault-design/#attachments +- */ +-bool OpVaultReader::readAttachment(const QString& filePath, +- const QByteArray& itemKey, +- const QByteArray& itemHmacKey, +- QJsonObject& metadata, +- QByteArray& payload) +-{ +- QFile file(filePath); +- if (!file.open(QIODevice::ReadOnly)) { +- qCritical() << QString("Unable to open \"%s\" for reading").arg(file.fileName()); +- return false; +- } +- +- QString magic("OPCLDAT"); +- QByteArray magicBytes = file.read(7); +- if (magicBytes != magic.toUtf8()) { +- qCritical() << "Expected OPCLDAT but found <<" << magicBytes.toHex() << ">>"; +- return false; +- } +- +- QByteArray version = file.read(1); +- if (version[0] != '\001' && version[0] != '\002') { +- qCritical() << "Unexpected version number; wanted 1 or 2, got <<" << version << ">>"; +- return false; +- } +- const QByteArray& metadataLenBytes = file.read(2); +- if (metadataLenBytes.size() != 2) { +- qCritical() << "Unable to read all metadata length bytes; wanted 2 bytes, got " << metadataLenBytes.size() +- << ": <<" << metadataLenBytes.toHex() << ">>"; +- return false; +- } +- const auto b0 = static_cast(metadataLenBytes[0]); +- const auto b1 = static_cast(metadataLenBytes[1]); +- int metadataLen = ((0xFF & b1) << 8) | (0xFF & b0); +- +- // no really: it's labeled "Junk" in the spec +- int junkBytesRead = file.read(2).size(); +- if (junkBytesRead != 2) { +- qCritical() << "Unable to read all \"junk\" bytes; wanted 2 bytes, got " << junkBytesRead; +- return false; +- } +- +- const QByteArray& iconLenBytes = file.read(4); +- if (iconLenBytes.size() != 4) { +- qCritical() << "Unable to read all \"iconLen\" bytes; wanted 4 bytes, got " << iconLenBytes.size(); +- return false; +- } +- +- int iconLen = 0; +- for (int i = 0, len = iconLenBytes.size(); i < len; ++i) { +- char ch = iconLenBytes[i]; +- auto b = static_cast(ch & 0xFF); +- iconLen = (b << (i * 8)) | iconLen; +- } +- +- QByteArray metadataJsonBytes = file.read(metadataLen); +- if (metadataJsonBytes.size() != metadataLen) { +- qCritical() << "Unable to read all bytes of metadata JSON; wanted " << metadataLen << "but read " +- << metadataJsonBytes.size(); +- return false; +- } +- QByteArray iconBytes = file.read(iconLen); +- if (iconBytes.size() != iconLen) { +- qCritical() << "Unable to read all icon bytes; wanted " << iconLen << "but read " << iconBytes.size(); +- // apologies for the icon being fatal, but it would take some gear-turning +- // to re-sync where in the attach header we are +- return false; +- } +- +- // we don't actually _care_ what the icon bytes are, +- // but they damn well better be valid opdata01 and pass its HMAC +- OpData01 icon01; +- if (!icon01.decode(iconBytes, itemKey, itemHmacKey)) { +- qCritical() << "Unable to decipher attachment icon in " << filePath << ": " << icon01.errorString(); +- return false; +- } +- +- QJsonParseError jsError; +- QJsonDocument jDoc = QJsonDocument::fromJson(metadataJsonBytes, &jsError); +- if (jsError.error != QJsonParseError::ParseError::NoError) { +- qCritical() << "Found invalid attachment metadata JSON at offset " << jsError.offset << ": error(" +- << jsError.error << "): " << jsError.errorString() << "\n<<" << metadataJsonBytes << ">>"; +- return false; +- } +- if (!jDoc.isObject()) { +- qCritical() << "Expected " << metadataJsonBytes << "to be a JSON Object"; +- return false; +- } +- +- metadata = jDoc.object(); +- if (metadata.contains("trashed") && metadata["trashed"].toBool()) { +- return false; +- } +- +- OpData01 att01; +- const QByteArray encData = file.readAll(); +- if (!att01.decode(encData, itemKey, itemHmacKey)) { +- qCritical() << "Unable to decipher attachment payload: " << att01.errorString(); +- return false; +- } +- +- payload = att01.getClearText(); +- return true; +-} +- +-/*! +- * \sa https://support.1password.com/opvault-design/#attachments +- */ +-void OpVaultReader::fillAttachments(Entry* entry, +- const QDir& attachmentDir, +- const QByteArray& entryKey, +- const QByteArray& entryHmacKey) +-{ +- /*! +- * Attachment files are named with the UUID of the item that they are attached to followed by an underscore +- * and then followed by the UUID of the attachment itself. The file is then given the extension .attachment. +- */ +- auto fileFilter = QString("%1_*.attachment").arg(entry->uuidToHex().toUpper()); +- const auto& attachInfoList = attachmentDir.entryInfoList(QStringList() << fileFilter, QDir::Files); +- int attachmentCount = attachInfoList.size(); +- if (attachmentCount == 0) { +- return; +- } +- +- for (const auto& info : attachInfoList) { +- if (!info.isReadable()) { +- qCritical() << QString("Attachment file \"%1\" is not readable").arg(info.absoluteFilePath()); +- continue; +- } +- fillAttachment(entry, info, entryKey, entryHmacKey); +- } +-} +- +-void OpVaultReader::fillAttachment(Entry* entry, +- const QFileInfo& info, +- const QByteArray& entryKey, +- const QByteArray& entryHmacKey) +-{ +- QJsonObject attachMetadata; +- QByteArray attachPayload; +- if (!readAttachment(info.absoluteFilePath(), entryKey, entryHmacKey, attachMetadata, attachPayload)) { +- return; +- } +- +- if (!attachMetadata.contains("overview")) { +- qWarning() << "Expected \"overview\" in attachment metadata"; +- return; +- } +- +- const QString& overB64 = attachMetadata["overview"].toString(); +- OpData01 over01; +- +- if (over01.decodeBase64(overB64, m_overviewKey, m_overviewHmacKey)) { +- QByteArray overviewJson = over01.getClearText(); +- QJsonDocument overDoc = QJsonDocument::fromJson(overviewJson); +- if (overDoc.isObject()) { +- QJsonObject overObj = overDoc.object(); +- attachMetadata.remove("overview"); +- for (QString& key : overObj.keys()) { +- const QJsonValueRef& value = overObj[key]; +- QString insertAs = key; +- for (int aa = 0; attachMetadata.contains(insertAs) && aa < 5; ++aa) { +- insertAs = QString("%1_%2").arg(key, aa); +- } +- attachMetadata[insertAs] = value; +- } +- } else { +- qWarning() << "Expected JSON Object in \"overview\" but nope: " << overDoc; +- } +- } else { +- qCritical() +- << QString("Unable to decode attach.overview for \"%1\": %2").arg(info.fileName(), over01.errorString()); +- } +- +- QByteArray payload; +- payload.append(QString("attachment file is actually %1 bytes\n").arg(info.size()).toUtf8()); +- for (QString& key : attachMetadata.keys()) { +- const QJsonValueRef& value = attachMetadata[key]; +- QByteArray valueBytes; +- if (value.isString()) { +- valueBytes = value.toString().toUtf8(); +- } else if (value.isDouble()) { +- valueBytes = QString("%1").arg(value.toInt()).toUtf8(); +- } else if (value.isBool()) { +- valueBytes = value.toBool() ? "true" : "false"; +- } else { +- valueBytes = QString("Unexpected metadata type in attachment: %1").arg(value.type()).toUtf8(); +- } +- payload.append(key.toUtf8()).append(":=").append(valueBytes).append("\n"); +- } +- +- QString attachKey = info.baseName(); +- if (attachMetadata.contains("filename")) { +- QJsonValueRef attFilename = attachMetadata["filename"]; +- if (attFilename.isString()) { +- attachKey = attFilename.toString(); +- } else { +- qWarning() << QString("Unexpected type of attachment \"filename\": %1").arg(attFilename.type()); +- } +- } +- +- entry->attachments()->set(attachKey, attachPayload); +-} +diff -urNr keepassxc-2.6.4-orig/src/format/OpVaultReaderBandEntry.cpp keepassxc-2.6.4-patched/src/format/OpVaultReaderBandEntry.cpp +--- keepassxc-2.6.4-orig/src/format/OpVaultReaderBandEntry.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/OpVaultReaderBandEntry.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,263 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "OpData01.h" +-#include "OpVaultReader.h" +- +-#include "core/Group.h" +-#include "core/Tools.h" +-#include "crypto/CryptoHash.h" +-#include "crypto/SymmetricCipher.h" +- +-#include +-#include +-#include +-#include +-#include +-#include +- +-bool OpVaultReader::decryptBandEntry(const QJsonObject& bandEntry, +- QJsonObject& data, +- QByteArray& key, +- QByteArray& hmacKey) +-{ +- if (!bandEntry.contains("d")) { +- qWarning() << "Band entries must contain a \"d\" key: " << bandEntry.keys(); +- return false; +- } +- if (!bandEntry.contains("k")) { +- qWarning() << "Band entries must contain a \"k\" key: " << bandEntry.keys(); +- return false; +- } +- +- const QString uuid = bandEntry.value("uuid").toString(); +- +- /*! +- * This is the encrypted item and MAC keys. +- * It is encrypted with the master encryption key and authenticated with the master MAC key. +- * +- * The last 32 bytes comprise the HMAC-SHA256 of the IV and the encrypted data. +- * The MAC is computed with the master MAC key. +- * The data before the MAC is the AES-CBC encrypted item keys using unique random 16-byte IV. +- * \code +- * uint8_t crypto_key[32]; +- * uint8_t mac_key[32]; +- * \endcode +- * \sa https://support.1password.com/opvault-design/#k +- */ +- const QString& entKStr = bandEntry["k"].toString(); +- QByteArray kBA = QByteArray::fromBase64(entKStr.toUtf8()); +- const int wantKsize = 16 + 32 + 32 + 32; +- if (kBA.size() != wantKsize) { +- qCritical("Malformed \"k\" size; expected %d got %d\n", wantKsize, kBA.size()); +- return false; +- } +- +- QByteArray hmacSig = kBA.mid(kBA.size() - 32, 32); +- const QByteArray& realHmacSig = +- CryptoHash::hmac(kBA.mid(0, kBA.size() - hmacSig.size()), m_masterHmacKey, CryptoHash::Sha256); +- if (realHmacSig != hmacSig) { +- qCritical() << QString(R"(Entry "k" failed its HMAC in UUID "%1", wanted "%2" got "%3")") +- .arg(uuid) +- .arg(QString::fromUtf8(hmacSig.toHex())) +- .arg(QString::fromUtf8(realHmacSig)); +- return false; +- } +- +- QByteArray iv = kBA.mid(0, 16); +- QByteArray keyAndMacKey = kBA.mid(iv.size(), 64); +- SymmetricCipher cipher(SymmetricCipher::Aes256, SymmetricCipher::Cbc, SymmetricCipher::Decrypt); +- if (!cipher.init(m_masterKey, iv)) { +- qCritical() << "Unable to init cipher using masterKey in UUID " << uuid; +- return false; +- } +- if (!cipher.processInPlace(keyAndMacKey)) { +- qCritical() << "Unable to decipher \"k\"(key+hmac) in UUID " << uuid; +- return false; +- } +- +- key = keyAndMacKey.mid(0, 32); +- hmacKey = keyAndMacKey.mid(32); +- +- QString dKeyB64 = bandEntry.value("d").toString(); +- OpData01 entD01; +- if (!entD01.decodeBase64(dKeyB64, key, hmacKey)) { +- qCritical() << R"(Unable to decipher "d" in UUID ")" << uuid << "\": " << entD01.errorString(); +- return false; +- } +- +- auto clearText = entD01.getClearText(); +- data = QJsonDocument::fromJson(clearText).object(); +- return true; +-} +- +-Entry* OpVaultReader::processBandEntry(const QJsonObject& bandEntry, const QDir& attachmentDir, Group* rootGroup) +-{ +- const QString uuid = bandEntry.value("uuid").toString(); +- if (!(uuid.size() == 32 || uuid.size() == 36)) { +- qWarning() << QString("Skipping suspicious band UUID <<%1>> with length %2").arg(uuid).arg(uuid.size()); +- return nullptr; +- } +- +- QScopedPointer entry(new Entry()); +- +- if (bandEntry.contains("trashed") && bandEntry["trashed"].toBool()) { +- // Send this entry to the recycle bin +- rootGroup->database()->recycleEntry(entry.data()); +- } else if (bandEntry.contains("category")) { +- const QJsonValue& categoryValue = bandEntry["category"]; +- if (categoryValue.isString()) { +- bool found = false; +- const QString category = categoryValue.toString(); +- for (Group* group : rootGroup->children()) { +- const QVariant& groupCode = group->property("code"); +- if (category == groupCode.toString()) { +- entry->setGroup(group); +- found = true; +- break; +- } +- } +- if (!found) { +- qWarning() << QString("Unable to place Entry.Category \"%1\" so using the Root instead").arg(category); +- entry->setGroup(rootGroup); +- } +- } else { +- qWarning() << QString(R"(Skipping non-String Category type "%1" in UUID "%2")") +- .arg(categoryValue.type()) +- .arg(uuid); +- entry->setGroup(rootGroup); +- } +- } else { +- qWarning() << "Using the root group because the entry is category-less: <<\n" +- << bandEntry << "\n>> in UUID " << uuid; +- entry->setGroup(rootGroup); +- } +- +- entry->setUpdateTimeinfo(false); +- TimeInfo ti; +- bool timeInfoOk = false; +- if (bandEntry.contains("created")) { +- auto createdTime = static_cast(bandEntry["created"].toInt()); +- ti.setCreationTime(QDateTime::fromTime_t(createdTime, Qt::UTC)); +- timeInfoOk = true; +- } +- if (bandEntry.contains("updated")) { +- auto updateTime = static_cast(bandEntry["updated"].toInt()); +- ti.setLastModificationTime(QDateTime::fromTime_t(updateTime, Qt::UTC)); +- timeInfoOk = true; +- } +- // "tx" is modified by sync, not by user; maybe a custom attribute? +- if (timeInfoOk) { +- entry->setTimeInfo(ti); +- } +- entry->setUuid(Tools::hexToUuid(uuid)); +- +- if (!fillAttributes(entry.data(), bandEntry)) { +- return nullptr; +- } +- +- QJsonObject data; +- QByteArray entryKey; +- QByteArray entryHmacKey; +- +- if (!decryptBandEntry(bandEntry, data, entryKey, entryHmacKey)) { +- return nullptr; +- } +- +- if (data.contains("notesPlain")) { +- entry->setNotes(data.value("notesPlain").toString()); +- } +- +- // it seems sometimes the password is a top-level field, and not in "fields" themselves +- if (data.contains("password")) { +- entry->setPassword(data.value("password").toString()); +- } +- +- for (const auto fieldValue : data.value("fields").toArray()) { +- if (!fieldValue.isObject()) { +- continue; +- } +- +- auto field = fieldValue.toObject(); +- auto designation = field["designation"].toString(); +- auto value = field["value"].toString(); +- if (designation == "password") { +- entry->setPassword(value); +- } else if (designation == "username") { +- entry->setUsername(value); +- } +- } +- +- const QJsonArray& sectionsArray = data["sections"].toArray(); +- for (const QJsonValue& sectionValue : sectionsArray) { +- if (!sectionValue.isObject()) { +- qWarning() << R"(Skipping non-Object in "sections" for UUID ")" << uuid << "\" << " << sectionsArray +- << ">>"; +- continue; +- } +- const QJsonObject& section = sectionValue.toObject(); +- +- fillFromSection(entry.data(), section); +- } +- +- fillAttachments(entry.data(), attachmentDir, entryKey, entryHmacKey); +- return entry.take(); +-} +- +-bool OpVaultReader::fillAttributes(Entry* entry, const QJsonObject& bandEntry) +-{ +- const QString overviewStr = bandEntry.value("o").toString(); +- OpData01 entOver01; +- if (!entOver01.decodeBase64(overviewStr, m_overviewKey, m_overviewHmacKey)) { +- qCritical() << "Unable to decipher 'o' in UUID \"" << entry->uuid() << "\"\n" +- << ": " << entOver01.errorString(); +- return false; +- } +- +- auto overviewJsonBytes = entOver01.getClearText(); +- auto overviewDoc = QJsonDocument::fromJson(overviewJsonBytes); +- auto overviewJson = overviewDoc.object(); +- +- QString title = overviewJson.value("title").toString(); +- entry->setTitle(title); +- +- QString url = overviewJson["url"].toString(); +- entry->setUrl(url); +- +- int i = 1; +- for (const auto urlV : overviewJson["URLs"].toArray()) { +- const auto& urlObj = urlV.toObject(); +- if (urlObj.contains("u")) { +- auto newUrl = urlObj["u"].toString(); +- if (newUrl != url) { +- // Add this url if it isn't the base one +- entry->attributes()->set(QString("KP2A_URL_%1").arg(i), newUrl); +- ++i; +- } +- } +- } +- +- QStringList tagsList; +- for (const auto tagV : overviewJson["tags"].toArray()) { +- if (tagV.isString()) { +- tagsList << tagV.toString(); +- } +- } +- entry->setTags(tagsList.join(',')); +- +- return true; +-} +diff -urNr keepassxc-2.6.4-orig/src/format/OpVaultReader.cpp keepassxc-2.6.4-patched/src/format/OpVaultReader.cpp +--- keepassxc-2.6.4-orig/src/format/OpVaultReader.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/OpVaultReader.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,488 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "OpVaultReader.h" +-#include "OpData01.h" +- +-#include "core/Group.h" +-#include "core/Tools.h" +-#include "crypto/CryptoHash.h" +-#include "crypto/SymmetricCipher.h" +-#include "keys/PasswordKey.h" +- +-#include +-#include +-#include +-#include +-#include +- +-OpVaultReader::OpVaultReader(QObject* parent) +- : QObject(parent) +- , m_error(false) +-{ +-} +- +-OpVaultReader::~OpVaultReader() +-{ +-} +- +-Database* OpVaultReader::readDatabase(QDir& opdataDir, const QString& password) +-{ +- if (!opdataDir.exists()) { +- m_error = true; +- m_errorStr = tr("Directory .opvault must exist"); +- return nullptr; +- } +- if (!opdataDir.isReadable()) { +- m_error = true; +- m_errorStr = tr("Directory .opvault must be readable"); +- return nullptr; +- } +- +- // https://support.1password.com/opvault-design/#directory-layout +- QDir defaultDir = QDir(opdataDir); +- if (!defaultDir.cd("default")) { +- m_error = true; +- m_errorStr = tr("Directory .opvault/default must exist"); +- return nullptr; +- } +- if (!defaultDir.isReadable()) { +- m_error = true; +- m_errorStr = tr("Directory .opvault/default must be readable"); +- return nullptr; +- } +- +- auto vaultName = opdataDir.dirName(); +- +- auto key = QSharedPointer::create(); +- key->addKey(QSharedPointer::create(password)); +- +- QScopedPointer db(new Database()); +- db->setKdf(KeePass2::uuidToKdf(KeePass2::KDF_ARGON2D)); +- db->setCipher(KeePass2::CIPHER_AES256); +- db->setKey(key, true, false); +- db->metadata()->setName(vaultName); +- +- auto rootGroup = db->rootGroup(); +- rootGroup->setTimeInfo({}); +- rootGroup->setUpdateTimeinfo(false); +- rootGroup->setName(vaultName.remove(".opvault")); +- rootGroup->setUuid(QUuid::createUuid()); +- +- populateCategoryGroups(rootGroup); +- +- QFile profileJsFile(defaultDir.absoluteFilePath("profile.js")); +- QJsonObject profileJson = readAndAssertJsonFile(profileJsFile, "var profile=", ";"); +- if (profileJson.isEmpty()) { +- return nullptr; +- } +- if (!processProfileJson(profileJson, password, rootGroup)) { +- zeroKeys(); +- return nullptr; +- } +- if (profileJson.contains("uuid") and profileJson["uuid"].isString()) { +- rootGroup->setUuid(Tools::hexToUuid(profileJson["uuid"].toString())); +- } +- +- QFile foldersJsFile(defaultDir.filePath("folders.js")); +- if (foldersJsFile.exists()) { +- QJsonObject foldersJs = readAndAssertJsonFile(foldersJsFile, "loadFolders(", ");"); +- if (!processFolderJson(foldersJs, rootGroup)) { +- zeroKeys(); +- return nullptr; +- } +- } +- +- const QString bandChars("0123456789ABCDEF"); +- QString bandPattern("band_%1.js"); +- for (QChar ch : bandChars) { +- QFile bandFile(defaultDir.filePath(bandPattern.arg(ch))); +- if (!bandFile.exists()) { +- continue; +- } +- // https://support.1password.com/opvault-design/#band-files +- QJsonObject bandJs = readAndAssertJsonFile(bandFile, "ld(", ");"); +- const QStringList keys = bandJs.keys(); +- for (const QString& entryKey : keys) { +- const QJsonObject bandEnt = bandJs[entryKey].toObject(); +- const QString uuid = bandEnt["uuid"].toString(); +- if (entryKey != uuid) { +- qWarning() << QString("Mismatched Entry UUID, its JSON key <<%1>> and its UUID <<%2>>") +- .arg(entryKey) +- .arg(uuid); +- } +- QStringList requiredKeys({"d", "k", "hmac"}); +- bool ok = true; +- for (const QString& requiredKey : asConst(requiredKeys)) { +- if (!bandEnt.contains(requiredKey)) { +- qCritical() << "Skipping malformed Entry UUID " << uuid << " without key " << requiredKey; +- ok = false; +- break; +- } +- } +- if (!ok) { +- continue; +- } +- // https://support.1password.com/opvault-design/#items +- auto entry = processBandEntry(bandEnt, defaultDir, rootGroup); +- if (!entry) { +- qWarning() << "Unable to process Band Entry " << uuid; +- } +- } +- } +- +- // Remove empty categories (groups) +- for (auto group : rootGroup->children()) { +- if (group->isEmpty()) { +- delete group; +- } +- } +- +- zeroKeys(); +- return db.take(); +-} +- +-bool OpVaultReader::hasError() +-{ +- return m_error; +-} +- +-QString OpVaultReader::errorString() +-{ +- return m_errorStr; +-} +- +-bool OpVaultReader::processProfileJson(QJsonObject& profileJson, const QString& password, Group* rootGroup) +-{ +- unsigned long iterations = profileJson["iterations"].toInt(); +- // QString lastUpdatedBy = profileJson["lastUpdatedBy"].toString(); +- QString masterKeyB64 = profileJson["masterKey"].toString(); +- QString overviewKeyB64 = profileJson["overviewKey"].toString(); +- // QString profileName = profileJs["profileName"].toString(); +- QByteArray salt; +- { +- QString saltB64 = profileJson["salt"].toString(); +- salt = QByteArray::fromBase64(saltB64.toUtf8()); +- } +- auto rootGroupTime = rootGroup->timeInfo(); +- auto createdAt = static_cast(profileJson["createdAt"].toInt()); +- rootGroupTime.setCreationTime(QDateTime::fromTime_t(createdAt, Qt::UTC)); +- auto updatedAt = static_cast(profileJson["updatedAt"].toInt()); +- rootGroupTime.setLastModificationTime(QDateTime::fromTime_t(updatedAt, Qt::UTC)); +- rootGroup->setUuid(Tools::hexToUuid(profileJson["uuid"].toString())); +- +- const auto derivedKeys = deriveKeysFromPassPhrase(salt, password, iterations); +- if (derivedKeys->error) { +- m_error = true; +- m_errorStr = derivedKeys->errorStr; +- delete derivedKeys; +- return false; +- } +- +- QByteArray encKey = derivedKeys->encrypt; +- QByteArray hmacKey = derivedKeys->hmac; +- delete derivedKeys; +- +- auto masterKeys = decodeB64CompositeKeys(masterKeyB64, encKey, hmacKey); +- if (masterKeys->error) { +- m_error = true; +- m_errorStr = masterKeys->errorStr; +- delete masterKeys; +- return false; +- } +- m_masterKey = masterKeys->encrypt; +- m_masterHmacKey = masterKeys->hmac; +- delete masterKeys; +- auto overviewKeys = decodeB64CompositeKeys(overviewKeyB64, encKey, hmacKey); +- if (overviewKeys->error) { +- m_error = true; +- m_errorStr = overviewKeys->errorStr; +- delete overviewKeys; +- return false; +- } +- m_overviewKey = overviewKeys->encrypt; +- m_overviewHmacKey = overviewKeys->hmac; +- delete overviewKeys; +- +- return true; +-} +- +-bool OpVaultReader::processFolderJson(QJsonObject& foldersJson, Group* rootGroup) +-{ +- const QStringList keys = foldersJson.keys(); +- +- bool result = true; +- for (const QString& key : keys) { +- const QJsonValueRef& folderValue = foldersJson[key]; +- if (!folderValue.isObject()) { +- qWarning() << "Found non-Object folder with key \"" << key << "\""; +- continue; +- } +- const QJsonObject folder = folderValue.toObject(); +- QJsonObject overviewJs; +- const QString overviewStr = folder.value("overview").toString(); +- OpData01 foldOverview01; +- if (!foldOverview01.decodeBase64(overviewStr, m_overviewKey, m_overviewHmacKey)) { +- qCritical() << "Unable to decipher folder UUID \"" << key << "\": " << foldOverview01.errorString(); +- result = false; +- continue; +- } +- auto foldOverview = foldOverview01.getClearText(); +- QJsonDocument fOverJSON = QJsonDocument::fromJson(foldOverview); +- overviewJs = fOverJSON.object(); +- +- const QString& folderTitle = overviewJs["title"].toString(); +- auto myGroup = new Group(); +- myGroup->setParent(rootGroup); +- myGroup->setName(folderTitle); +- if (folder.contains("uuid")) { +- myGroup->setUuid(Tools::hexToUuid(folder["uuid"].toString())); +- } +- +- if (overviewJs.contains("smart") && overviewJs["smart"].toBool()) { +- if (!overviewJs.contains("predicate_b64")) { +- const QString& errMsg = +- QString(R"(Expected a predicate in smart folder[uuid="%1"; title="%2"]))").arg(key, folderTitle); +- qWarning() << errMsg; +- myGroup->setNotes(errMsg); +- } else { +- QByteArray pB64 = QByteArray::fromBase64(overviewJs["predicate_b64"].toString().toUtf8()); +- myGroup->setNotes(pB64.toHex()); +- } +- } +- +- TimeInfo ti; +- bool timeInfoOk = false; +- if (folder.contains("created")) { +- auto createdTime = static_cast(folder["created"].toInt()); +- ti.setCreationTime(QDateTime::fromTime_t(createdTime, Qt::UTC)); +- timeInfoOk = true; +- } +- if (folder.contains("updated")) { +- auto updateTime = static_cast(folder["updated"].toInt()); +- ti.setLastModificationTime(QDateTime::fromTime_t(updateTime, Qt::UTC)); +- timeInfoOk = true; +- } +- // "tx" is modified by sync, not by user; maybe a custom attribute? +- if (timeInfoOk) { +- myGroup->setTimeInfo(ti); +- } +- } +- return result; +-} +- +-/* +- * Asserts that the given file is an existing file, able to be read, contains JSON, and that +- * the payload is a JSON object. Currently it just returns an empty QJsonObject as a means of +- * indicating the error, although it will qCritical() if unable to actually open the file for reading. +- * +- * @param file the path containing the JSON file +- * @param stripLeading any leading characters that might be present in file which should be removed +- * @param stripTrailing the trailing characters that might be present in file which should be removed +- * @return +- */ +-QJsonObject OpVaultReader::readAndAssertJsonFile(QFile& file, const QString& stripLeading, const QString& stripTrailing) +-{ +- QByteArray filePayload; +- const QFileInfo& fileInfo = QFileInfo(file); +- auto absFilePath = fileInfo.absoluteFilePath(); +- if (!fileInfo.exists()) { +- qCritical() << QString("File \"%1\" must exist").arg(absFilePath); +- return QJsonObject(); +- } +- if (!fileInfo.isReadable()) { +- qCritical() << QString("File \"%1\" must be readable").arg(absFilePath); +- return QJsonObject(); +- } +- +- if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { +- qCritical() << QString("Unable to open \"%1\" readonly+text").arg(absFilePath); +- } +- filePayload = file.readAll(); +- file.close(); +- if (!stripLeading.isEmpty()) { +- QByteArray prefix = stripLeading.toUtf8(); +- if (filePayload.startsWith(prefix)) { +- filePayload = filePayload.remove(0, prefix.size()); +- } +- } +- if (!stripTrailing.isEmpty()) { +- QByteArray suffix = stripTrailing.toUtf8(); +- if (filePayload.endsWith(suffix)) { +- const int delBytes = suffix.size(); +- filePayload = filePayload.remove(filePayload.length() - delBytes, delBytes); +- } +- } +- +- QJsonParseError* error = Q_NULLPTR; +- QJsonDocument jDoc = QJsonDocument::fromJson(filePayload, error); +- if (!jDoc.isObject()) { +- qCritical() << "Expected " << filePayload << "to be a JSON Object"; +- return QJsonObject(); +- } +- return jDoc.object(); +-} +- +-/* Convenience method for calling decodeCompositeKeys when you have a base64 encrypted composite key. */ +-OpVaultReader::DerivedKeyHMAC* +-OpVaultReader::decodeB64CompositeKeys(const QString& b64, const QByteArray& encKey, const QByteArray& hmacKey) +-{ +- auto result = new DerivedKeyHMAC(); +- +- OpData01 keyKey01; +- if (!keyKey01.decodeBase64(b64, encKey, hmacKey)) { +- result->error = true; +- result->errorStr = tr("Unable to decode masterKey: %1").arg(keyKey01.errorString()); +- return result; +- } +- delete result; +- +- const QByteArray keyKey = keyKey01.getClearText(); +- +- return decodeCompositeKeys(keyKey); +-} +- +-/* +- * Given a string of bytes, decompose it into its constituent parts, an encryption key and a HMAC key. +- * The plaintext of the masterKey is 256 bytes of data selected randomly when the keychain was first created. +- * +- * The 256 byte (2048 bit) plaintext content of the masterKey is then hashed with SHA-512. +- * The first 32 bytes (256-bits) of the resulting hash are the master encryption key, +- * and the second 32 bytes are the master hmac key. +- */ +-OpVaultReader::DerivedKeyHMAC* OpVaultReader::decodeCompositeKeys(const QByteArray& keyKey) +-{ +- const int encKeySize = 256 / 8; +- const int hmacKeySize = 256 / 8; +- const int digestSize = encKeySize + hmacKeySize; +- +- auto result = new DerivedKeyHMAC; +- result->error = false; +- +- result->encrypt = QByteArray(encKeySize, '\0'); +- result->hmac = QByteArray(hmacKeySize, '\0'); +- +- const char* buffer_vp = keyKey.data(); +- auto buf_len = size_t(keyKey.size()); +- +- const int algo = GCRY_MD_SHA512; +- unsigned char digest[digestSize]; +- gcry_md_hash_buffer(algo, digest, buffer_vp, buf_len); +- +- unsigned char* cp = digest; +- for (int i = 0, len = encKeySize; i < len; ++i) { +- result->encrypt[i] = *(cp++); +- } +- for (int i = 0, len = hmacKeySize; i < len; ++i) { +- result->hmac[i] = *(cp++); +- } +- +- return result; +-} +- +-/* +- * Translates the provided salt and passphrase into a derived set of keys, one for encryption +- * and one for use as a HMAC key. See https://support.1password.com/opvault-design/#key-derivation +- * @param iterations the number of rounds to apply the derivation formula +- * @return a non-null structure containing either the error or the two password-derived keys +- */ +-OpVaultReader::DerivedKeyHMAC* +-OpVaultReader::deriveKeysFromPassPhrase(QByteArray& salt, const QString& password, unsigned long iterations) +-{ +- const int derivedEncKeySize = 256 / 8; +- const int derivedMACSize = 256 / 8; +- const int keysize = derivedEncKeySize + derivedMACSize; +- +- auto result = new DerivedKeyHMAC; +- result->error = false; +- +- QByteArray keybuffer(keysize, '\0'); +- auto err = gcry_kdf_derive(password.toUtf8().constData(), +- password.size(), +- GCRY_KDF_PBKDF2, +- GCRY_MD_SHA512, +- salt.constData(), +- salt.size(), +- iterations, +- keysize, +- keybuffer.data()); +- if (err != 0) { +- result->error = true; +- result->errorStr = tr("Unable to derive master key: %1").arg(gcry_strerror(err)); +- return result; +- } +- if (keysize != keybuffer.size()) { +- qWarning() << "Calling PBKDF2(keysize=" << keysize << "yielded" << keybuffer.size() << "bytes"; +- } +- +- QByteArray::const_iterator it = keybuffer.cbegin(); +- +- result->encrypt = QByteArray(derivedEncKeySize, '\0'); +- for (int i = 0, len = derivedEncKeySize; i < len && it != keybuffer.cend(); ++i, ++it) { +- result->encrypt[i] = *it; +- } +- +- result->hmac = QByteArray(derivedMACSize, '\0'); +- for (int i = 0; i < derivedMACSize && it != keybuffer.cend(); ++i, ++it) { +- result->hmac[i] = *it; +- } +- return result; +-} +- +-/*! +- * \sa https://support.1password.com/opvault-design/#category +- */ +-void OpVaultReader::populateCategoryGroups(Group* rootGroup) +-{ +- QMap categoryMap; +- categoryMap.insert("001", "Login"); +- categoryMap.insert("002", "Credit Card"); +- categoryMap.insert("003", "Secure Note"); +- categoryMap.insert("004", "Identity"); +- categoryMap.insert("005", "Password"); +- categoryMap.insert("099", "Tombstone"); +- categoryMap.insert("100", "Software License"); +- categoryMap.insert("101", "Bank Account"); +- categoryMap.insert("102", "Database"); +- categoryMap.insert("103", "Driver License"); +- categoryMap.insert("104", "Outdoor License"); +- categoryMap.insert("105", "Membership"); +- categoryMap.insert("106", "Passport"); +- categoryMap.insert("107", "Rewards"); +- categoryMap.insert("108", "SSN"); +- categoryMap.insert("109", "Router"); +- categoryMap.insert("110", "Server"); +- categoryMap.insert("111", "Email"); +- for (const QString& catNum : categoryMap.keys()) { +- const QString& category = categoryMap[catNum]; +- auto g = new Group(); +- g->setName(category); +- g->setProperty("code", catNum); +- g->setUpdateTimeinfo(false); +- // maybe make these stable, so folks can depend on them? +- g->setUuid(QUuid::createUuid()); +- g->setParent(rootGroup); +- } +-} +- +-void OpVaultReader::zeroKeys() +-{ +- m_masterKey.fill('\0'); +- m_masterHmacKey.fill('\0'); +- m_overviewKey.fill('\0'); +- m_overviewHmacKey.fill('\0'); +-} +diff -urNr keepassxc-2.6.4-orig/src/format/OpVaultReader.h keepassxc-2.6.4-patched/src/format/OpVaultReader.h +--- keepassxc-2.6.4-orig/src/format/OpVaultReader.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/OpVaultReader.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,119 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef OPVAULT_READER_H_ +-#define OPVAULT_READER_H_ +- +-#include +- +-#include "core/Database.h" +-#include "core/Metadata.h" +- +-/*! +- * Imports a directory in the 1Password \c opvault format into a \c Database. +- * \sa https://support.1password.com/opvault-overview/ +- * \sa https://support.1password.com/opvault-design/ +- * \sa https://cache.agilebits.com/security-kb/freddy-2013-12-04.tar.gz is the sample data used to test this class, +- * and its password is \c freddy +- */ +-class OpVaultReader : public QObject +-{ +- Q_OBJECT +- +-public: +- explicit OpVaultReader(QObject* parent = nullptr); +- ~OpVaultReader() override; +- +- Database* readDatabase(QDir& opdataDir, const QString& password); +- +- bool hasError(); +- QString errorString(); +- +-private: +- struct DerivedKeyHMAC +- { +- QByteArray encrypt; +- QByteArray hmac; +- bool error; +- QString errorStr; +- }; +- +- QJsonObject readAndAssertJsonFile(QFile& file, const QString& stripLeading, const QString& stripTrailing); +- +- DerivedKeyHMAC* deriveKeysFromPassPhrase(QByteArray& salt, const QString& password, unsigned long iterations); +- DerivedKeyHMAC* decodeB64CompositeKeys(const QString& b64, const QByteArray& encKey, const QByteArray& hmacKey); +- DerivedKeyHMAC* decodeCompositeKeys(const QByteArray& keyKey); +- +- /*! +- * \sa https://support.1password.com/opvault-design/#profile-js +- * @param profileJson the contents of \c profile.js +- * @return \c true if the profile data was decrypted successfully, \c false otherwise +- */ +- bool processProfileJson(QJsonObject& profileJson, const QString& password, Group* rootGroup); +- +- /*! +- * \sa https://support.1password.com/opvault-design/#folders-js +- * @param foldersJson the map from a folder UUID to its data (name and any smart query) +- * @return \c true if the folder data was decrypted successfully, \c false otherwise +- */ +- bool processFolderJson(QJsonObject& foldersJson, Group* rootGroup); +- +- /*! +- * Decrypts the provided band object into its interior structure, +- * as well as the encryption key and HMAC key declared therein, +- * which are used to decrypt the attachments, also. +- * @returns \c nullptr if unable to do the decryption, otherwise the interior object and its keys +- */ +- bool decryptBandEntry(const QJsonObject& bandEntry, QJsonObject& data, QByteArray& key, QByteArray& hmacKey); +- Entry* processBandEntry(const QJsonObject& bandEntry, const QDir& attachmentDir, Group* rootGroup); +- +- bool readAttachment(const QString& filePath, +- const QByteArray& itemKey, +- const QByteArray& itemHmacKey, +- QJsonObject& metadata, +- QByteArray& payload); +- void fillAttachment(Entry* entry, +- const QFileInfo& attachmentFileInfo, +- const QByteArray& entryKey, +- const QByteArray& entryHmacKey); +- void fillAttachments(Entry* entry, +- const QDir& attachmentDir, +- const QByteArray& entryKey, +- const QByteArray& entryHmacKey); +- +- bool fillAttributes(Entry* entry, const QJsonObject& bandEntry); +- +- void fillFromSection(Entry* entry, const QJsonObject& section); +- void fillFromSectionField(Entry* entry, const QString& sectionName, QJsonObject& field); +- QString resolveAttributeName(const QString& section, const QString& name, const QString& text); +- +- void populateCategoryGroups(Group* rootGroup); +- /*! Used to blank the memory after the keys have been used. */ +- void zeroKeys(); +- +- bool m_error; +- QString m_errorStr; +- QByteArray m_masterKey; +- QByteArray m_masterHmacKey; +- /*! Used to decrypt overview text, such as folder names. */ +- QByteArray m_overviewKey; +- QByteArray m_overviewHmacKey; +- +- friend class TestOpVaultReader; +-}; +- +-#endif /* OPVAULT_READER_H_ */ +diff -urNr keepassxc-2.6.4-orig/src/format/OpVaultReaderSections.cpp keepassxc-2.6.4-patched/src/format/OpVaultReaderSections.cpp +--- keepassxc-2.6.4-orig/src/format/OpVaultReaderSections.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/format/OpVaultReaderSections.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,168 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "OpData01.h" +-#include "OpVaultReader.h" +- +-#include "core/Group.h" +-#include "core/Tools.h" +-#include "crypto/CryptoHash.h" +-#include "crypto/SymmetricCipher.h" +-#include "totp/totp.h" +- +-#include +-#include +-#include +-#include +-#include +-#include +- +-namespace +-{ +- QDateTime resolveDate(const QString& kind, const QJsonValue& value) +- { +- QDateTime date; +- if (kind == "monthYear") { +- // 1Password programmers are sadistic... +- auto dateValue = QString::number(value.toInt()); +- date = QDateTime::fromString(dateValue, "yyyyMM"); +- date.setTimeSpec(Qt::UTC); +- } else if (value.isString()) { +- date = QDateTime::fromTime_t(value.toString().toUInt(), Qt::UTC); +- } else { +- date = QDateTime::fromTime_t(value.toInt(), Qt::UTC); +- } +- return date; +- } +-} // namespace +- +-void OpVaultReader::fillFromSection(Entry* entry, const QJsonObject& section) +-{ +- const auto uuid = entry->uuid(); +- QString sectionName = section["name"].toString(); +- +- if (!section.contains("fields")) { +- auto sectionNameLC = sectionName.toLower(); +- auto sectionTitleLC = section["title"].toString("").toLower(); +- if (!(sectionNameLC == "linked items" && sectionTitleLC == "related items")) { +- qWarning() << R"(Skipping "fields"-less Section in UUID ")" << uuid << "\": <<" << section << ">>"; +- } +- return; +- } else if (!section["fields"].isArray()) { +- qWarning() << R"(Skipping non-Array "fields" in UUID ")" << uuid << "\"\n"; +- return; +- } +- +- // If we have a default section name then replace with the section title if not empty +- if (sectionName.startsWith("Section_") && !section["title"].toString().isEmpty()) { +- sectionName = section["title"].toString(); +- } +- +- QJsonArray sectionFields = section["fields"].toArray(); +- for (const QJsonValue sectionField : sectionFields) { +- if (!sectionField.isObject()) { +- qWarning() << R"(Skipping non-Object "fields" in UUID ")" << uuid << "\": << " << sectionField << ">>"; +- continue; +- } +- QJsonObject field = sectionField.toObject(); +- fillFromSectionField(entry, sectionName, field); +- } +-} +- +-void OpVaultReader::fillFromSectionField(Entry* entry, const QString& sectionName, QJsonObject& field) +-{ +- if (!field.contains("v")) { +- // for our purposes, we don't care if there isn't a value in the field +- return; +- } +- +- // Ignore "a" and "inputTraits" fields, they don't apply to KPXC +- +- auto attrName = resolveAttributeName(sectionName, field["n"].toString(), field["t"].toString()); +- auto attrValue = field.value("v").toString(); +- auto kind = field["k"].toString(); +- +- if (attrName.startsWith("TOTP_")) { +- if (attrValue.startsWith("otpauth://")) { +- QUrlQuery query(attrValue); +- // at least as of 1Password 7, they don't append the digits= and period= which totp.cpp requires +- if (!query.hasQueryItem("digits")) { +- query.addQueryItem("digits", QString("%1").arg(Totp::DEFAULT_DIGITS)); +- } +- if (!query.hasQueryItem("period")) { +- query.addQueryItem("period", QString("%1").arg(Totp::DEFAULT_STEP)); +- } +- attrValue = query.toString(QUrl::FullyEncoded); +- entry->setTotp(Totp::parseSettings(attrValue)); +- } else { +- entry->setTotp(Totp::parseSettings({}, attrValue)); +- } +- +- } else if (attrName.startsWith("expir", Qt::CaseInsensitive)) { +- QDateTime expiry = resolveDate(kind, field.value("v")); +- if (expiry.isValid()) { +- entry->setExpiryTime(expiry); +- entry->setExpires(true); +- } else { +- qWarning() << QString("[%1] Invalid expiration date found: %2").arg(entry->title(), attrValue); +- } +- } else { +- if (kind == "date" || kind == "monthYear") { +- QDateTime date = resolveDate(kind, field.value("v")); +- if (date.isValid()) { +- entry->attributes()->set(attrName, date.toString(Qt::SystemLocaleShortDate)); +- } else { +- qWarning() +- << QString("[%1] Invalid date attribute found: %2 = %3").arg(entry->title(), attrName, attrValue); +- } +- } else if (kind == "address") { +- // Expand address into multiple attributes +- auto addrFields = field.value("v").toObject().toVariantMap(); +- for (auto part : addrFields.keys()) { +- entry->attributes()->set(attrName + QString("_%1").arg(part), addrFields.value(part).toString()); +- } +- } else { +- entry->attributes()->set(attrName, attrValue, (kind == "password" || kind == "concealed")); +- } +- } +-} +- +-QString OpVaultReader::resolveAttributeName(const QString& section, const QString& name, const QString& text) +-{ +- // Special case for TOTP +- if (name.startsWith("TOTP_")) { +- return name; +- } +- +- auto lowName = name.toLower(); +- auto lowText = text.toLower(); +- if (section.isEmpty() || name.startsWith("address")) { +- // Empty section implies these are core attributes +- // try to find username, password, url +- if (lowName == "password" || lowText == "password") { +- return EntryAttributes::PasswordKey; +- } else if (lowName == "username" || lowText == "username") { +- return EntryAttributes::UserNameKey; +- } else if (lowName == "url" || lowText == "url" || lowName == "hostname" || lowText == "server" +- || lowName == "website") { +- return EntryAttributes::URLKey; +- } +- return name; +- } +- +- return QString("%1_%2").arg(section, name); +-} +diff -urNr keepassxc-2.6.4-orig/src/git-info.h.cmake keepassxc-2.6.4-patched/src/git-info.h.cmake +--- keepassxc-2.6.4-orig/src/git-info.h.cmake 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/git-info.h.cmake 1970-01-01 01:00:00.000000000 +0100 +@@ -1,8 +0,0 @@ +-/* git-info.h. Generated by cmake from git-info.h.cmake */ +- +-#ifndef KEEPASSXC_GIT_INFO_H +-#define KEEPASSXC_GIT_INFO_H +- +-#define GIT_HEAD "@GIT_HEAD@" +- +-#endif // KEEPASSXC_GIT_INFO_H +diff -urNr keepassxc-2.6.4-orig/src/gui/AboutDialog.cpp keepassxc-2.6.4-patched/src/gui/AboutDialog.cpp +--- keepassxc-2.6.4-orig/src/gui/AboutDialog.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/AboutDialog.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,236 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "AboutDialog.h" +-#include "ui_AboutDialog.h" +- +-#include "config-keepassx.h" +-#include "core/Resources.h" +-#include "core/Tools.h" +-#include "crypto/Crypto.h" +- +-#include +- +-static const QString aboutMaintainers = R"( +-

+-)"; +- +-static const QString aboutContributors = R"( +-

VIP Patreon Supporters:

+-
    +-
  • John Cook
  • +-
  • Max Anderson
  • +-
  • l0b0
  • +-
  • NarwhalOfAges
  • +-
  • Caleb Currie
  • +-
  • Igor Zinovik
  • +-
  • Morgan Courbet
  • +-
  • Sergiu Coroi
  • +-
  • Chris Sohns
  • +-
  • Kyle Kneitinger
  • +-
  • Sergey Vilgelm
  • +-
  • Roman Vaughan (NZSmartie)
  • +-
  • Shmavon Gazanchyan
  • +-
  • Riley Moses
  • +-
  • Korbinian Schildmann
  • +-
  • Andreas (nitrohorse)
  • +-
  • Kernellinux
  • +-
  • Micha Ober
  • +-
  • PublicByte
  • +-
  • Clayton Casciato
  • +-
+-

Notable Code Contributions:

+-
    +-
  • droidmonkey
  • +-
  • phoerious
  • +-
  • louib (CLI)
  • +-
  • varjolintu (Browser Integration)
  • +-
  • hifi (SSH Agent)
  • +-
  • ckieschnick (KeeShare)
  • +-
  • seatedscribe (CSV Import)
  • +-
  • Aetf (FdoSecrets Storage Server)
  • +-
  • weslly (macOS improvements)
  • +-
  • brainplot (many improvements)
  • +-
  • kneitinger (many improvements)
  • +-
  • frostasm (many improvements)
  • +-
  • fonic (Entry Table View)
  • +-
  • kylemanna (YubiKey)
  • +-
  • c4rlo (Offline HIBP Checker)
  • +-
  • wolframroesler (HTML Export, Statistics, Password Health, HIBP integration)
  • +-
  • mdaniel (OpVault Importer)
  • +-
  • angelsl (KDBX 4)
  • +-
  • TheZ3ro (retired lead)
  • +-
  • debfx (KeePassX)
  • +-
  • BlueIce (KeePassX)
  • +-
+-

Patreon Supporters:

+-
    +-
  • Alexanderjb
  • +-
  • Richard Ames
  • +-
  • SLmanDR
  • +-
  • Christian Rasmussen
  • +-
  • Tyler Gass
  • +-
  • Nuutti Toivola
  • +-
  • Gregory Werbin
  • +-
  • Lionel Laské
  • +-
  • Ivar
  • +-
  • Darren
  • +-
  • Brad
  • +-
  • Mathieu Peltier
  • +-
  • gonczor
  • +-
  • Oleksii Aleksieiev
  • +-
  • Gernot Premper
  • +-
  • Julian Stier
  • +-
  • Daniel Epp
  • +-
  • Ruben Schade
  • +-
  • Esteban Martinez
  • +-
  • Niels Ganser
  • +-
  • turin231
  • +-
  • judd
  • +-
  • Tarek Sherif
  • +-
  • Bernhard
  • +-
  • William Komanetsky
  • +-
  • Clark Henry
  • +-
  • Justin Carroll
  • +-
  • Shintaro Matsushima
  • +-
  • Larry Siden
  • +-
  • Thammachart Chinvarapon
  • +-
  • Patrick Evans
  • +-
+-

Translations:

+-
    +-
  • العربية (Arabic): AboShanab, kmutahar, muha_abdulaziz, Night1, omar.nsy
  • +-
  • euskara (Basque): azken_tximinoa, Galaipa, Hey_neken
  • +-
  • বাংলা (Bengali): codesmite
  • +-
  • ဗမာစာ (Burmese): Snooooowwwwwman
  • +-
  • català (Catalan): antoniopolonio, capitantrueno, dsoms, MarcRiera, mcus, raulua, ZJaume
  • +-
  • 中文 (Chinese (Simplified)): Biggulu, Brandon_c, carp0129, Dy64, ef6, Felix2yu, hoilc, ivlioioilvi, +- kikyous, kofzhanganguo, ligyxy, lxx4380, remonli, ShuiHuo, slgray, Small_Ku, snhun, umi_neko, vc5, Wylmer_Wang, Z4HD
  • +-
  • 中文 (å°ç£) (Chinese (Traditional)): BestSteve, flachesis, gojpdchx, ligyxy, MiauLightouch, plesry, +- priv, raymondtau, Small_Ku, th3lusive, yan12125, ymhuang0808
  • +-
  • hrvatski jezik (Croatian): Halberd, mladenuzelac
  • +-
  • ÄeÅ¡tina (Czech): awesomevojta, DanielMilde, JosefVitu, pavelb, stps, tpavelek
  • +-
  • dansk (Danish): alfabetacain, ebbe, GimliDk, JakobPP, KalleDK, MannVera, nlkl, thniels
  • +-
  • Nederlands (Dutch): apie, bartlibert, Bubbel, bython, Dr.Default, e2jk, evanoosten, fourwood, +- fvw, glotzbach, JCKalman, KnooL, ovisicnarf, pietermj, rigrig, srgvg, Stephan_P, stijndubrul, theniels17, +- ThomasChurchman, Vistaus, wanderingidea, Zombaya1
  • +-
  • English (UK): CisBetter, rookwood101, spacemanspiff, throne3d, YCMHARHZ
  • +-
  • English (USA): alexandercrice, caralu74, cl0ne, DarkHolme, nguyenlekhtn, thedoctorsoad, throne3d
  • +-
  • Esperanto (Esperanto): batisteo
  • +-
  • eesti (Estonian): Hermanio
  • +-
  • suomi (Finnish): artnay, hif1, MawKKe, petri, tomisalmi, varjolintu
  • +-
  • français (French): A1RO, aghilas.messara, Albynton, alexisju, b_mortgat, Beatussum, benoitbalon, +- bertranoel, bisaloo, Cabirto, Code2Mirabeau, e2jk, ebrious, frgnca, Fumble, ggtr1138, gilbsgilbs, gohuros, gtalbot, +- Gui13, houdini, houdini69, iannick, jlutran, John.Mickael, kyodev, lacnic, laetilodie, logut, MartialBis, Maxime_J, +- mlpo, Morgan, MrHeadwar, narzb, nekopep, Nesousx, pBouillon, Raphi111, Scrat15, TheFrenchGhosty, theodex, tl_pierre, +- webafrancois, wilfriedroset, yahoe.001, zedentox
  • +-
  • Galego (Galician): enfeitizador
  • +-
  • Deutsch (German): andreas.maier, antsas, Atalanttore, BasicBaer, bwolkchen, Calyrx, codejunky, +- DavidHamburg, derhagen, eth0, fahstat, for1real, Gyges, Hativ, hjonas, HoferJulian, janis91, jensrutschmann, +- joe776, kflesch, man_at_home, marcbone, MarcEdinger, markusd112, Maxime_J, mbetz, mcliquid, mfernau77, mircsicz, +- mithrial, montilo, MuehlburgPhoenix, muellerma, nautilusx, Nerzahd, Nightwriter, NotAName, nursoda, omnisome4, +- origin_de, pcrcoding, PFischbeck, rgloor, rugk, ScholliYT, Silas_229, spacemanspiff, testarossa47, TheForcer, +- transi_222, traschke, vlenzer, vpav, waster, wolfram.roesler, Wyrrrd
  • +-
  • ελληνικά (Greek): anvo, magkopian, nplatis, tassos.b, xinomilo
  • +-
  • עברית (Hebrew): shmag18
  • +-
  • magyar (Hungarian): andras_tim, bubu, meskobalazs, urbalazs
  • +-
  • Ãslenska (Icelandic): MannVera
  • +-
  • Bahasa (Indonesian): achmad, bora_ach, zk
  • +-
  • Italiano (Italian): amaxis, bovirus, duncanmid, FranzMari, Gringoarg, lucaim, NITAL, Peo, +- salvatorecordiano, seatedscribe, Stemby, the.sailor, tosky, VosaxAlo
  • +-
  • 日本語 (Japanese): gojpdchx, masoo, metalic_cat, p2635, saita, Shinichirou_Yamada, take100yen, +- Umoxfo, vargas.peniel, vmemjp, WatanabeShint, yukinakato
  • +-
  • қазақ тілі (Kazakh): sotrud_nik
  • +-
  • 한국어 (Korean): cancantun, peremen
  • +-
  • latine (Latin): alexandercrice
  • +-
  • lietuvių kalba (Lithuanian): Moo, pauliusbaulius, rookwood101
  • +-
  • Norsk BokmÃ¥l (Norwegian BokmÃ¥l): eothred, haarek, JardarBolin, jumpingmushroom, sattor, torgeirf, +- ysteinalver
  • +-
  • jÄ™zyk polski (Polish): AreYouLoco, dedal123, hoek, keypress, konradmb, mrerexx, pabli, psobczak, +- SebJez
  • +-
  • Português (Portuguese): weslly, xendez
  • +-
  • Português (Portuguese (Brazil)): andersoniop, danielbibit, fabiom, flaviobn, guilherme__sr, +- Havokdan, lucasjsoliveira, mauri.andres, newmanisaac, rafaelnp, RockyTV, vitor895, weslly, xendez
  • +-
  • Português (Portuguese (Portugal)): a.santos, American_Jesus, arainho, hds, lmagomes, mihai.ile, +- pfialho, smarquespt, smiguel, xendez, xnenjm
  • +-
  • Română (Romanian): alexminza, drazvan, polearnik
  • +-
  • руÑÑкий (Russian): _nomoretears_, agag11507, alexminza, anm, artemkonenko, cl0ne, denoos, DG, +- JayDi85, KekcuHa, Mogost, Mr.GreyWolf, MustangDSG, NcNZllQnHVU, netforhack, NetWormKido, Rakleed, RKuchma, +- ruslan.denisenko, ShareDVI, Shevchuk, solodyagin, talvind, VictorR2007, vsvyatski, wkill95
  • +-
  • ÑрпÑки језик (Serbian): ArtBIT, oros
  • +-
  • SlovenÄina (Slovak): Asprotes, crazko, l.martinicky, pecer, Slavko
  • +-
  • Español (Spanish): adolfogc, AdrianClv, AndreachongB, AndresQ, antifaz, Bendhet, capitantrueno, +- caralu74, DarkHolme, e2jk, EdwardNavarro, eliluminado, erinm, gonrial, iglpdc, jojobrambs, LeoBeltran, lupa18, +- masanchez5000, mauri.andres, NicolasCGN, Pablohn, pdinoto, picodotdev, piegope, pquin, puchrojo, rcalpha, +- rodolfo.guagnini, systurbed, vargas.peniel, ventolinmono, vsvyatski, Xlate1984, zmzpa, Zranz
  • +-
  • Svenska (Swedish): 0x9fff00, Anders_Bergqvist, ArmanB, baxtex, eson, henziger, jpyllman, krklns, +- LIINdd, malkus, peron, Thelin, theschitz, victorhggqvst, zeroxfourc
  • +-
  • ไทย (Thai): arthit, ben_cm, chumaporn.t, darika, digitalthailandproject, GitJirasamatakij, +- muhammadmumean, nipattra, ordinaryjane, rayg, sirawat, Socialister, Wipanee
  • +-
  • Türkçe (Turkish): cagries, etc, ethem578, mcveri, N3pp, SeLeNLeR, TeknoMobil, Ven_Zallow
  • +-
  • УкраїнÑька (Ukrainian): brisk022, chulivska, cl0ne, exlevan, m0stik, netforhack, paul_sm, ShareDVI, +- zoresvit
  • +-
+-)"; +- +-AboutDialog::AboutDialog(QWidget* parent) +- : QDialog(parent) +- , m_ui(new Ui::AboutDialog()) +-{ +- m_ui->setupUi(this); +- +- resize(minimumSize()); +- setWindowFlags(Qt::Sheet); +- setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); +- +- m_ui->nameLabel->setText(m_ui->nameLabel->text().replace("${VERSION}", KEEPASSXC_VERSION)); +- QFont nameLabelFont = m_ui->nameLabel->font(); +- nameLabelFont.setPointSize(nameLabelFont.pointSize() + 4); +- m_ui->nameLabel->setFont(nameLabelFont); +- +- m_ui->iconLabel->setPixmap(resources()->applicationIcon().pixmap(48)); +- +- QString debugInfo = Tools::debugInfo().append("\n").append(Crypto::debugInfo()); +- m_ui->debugInfo->setPlainText(debugInfo); +- +- m_ui->maintainers->setText(aboutMaintainers); +- m_ui->contributors->setText(aboutContributors); +- +- setAttribute(Qt::WA_DeleteOnClose); +- connect(m_ui->buttonBox, SIGNAL(rejected()), SLOT(close())); +- connect(m_ui->copyToClipboard, SIGNAL(clicked()), SLOT(copyToClipboard())); +- +- m_ui->buttonBox->button(QDialogButtonBox::Close)->setDefault(true); +-} +- +-AboutDialog::~AboutDialog() +-{ +-} +- +-void AboutDialog::copyToClipboard() +-{ +- QClipboard* clipboard = QApplication::clipboard(); +- clipboard->setText(m_ui->debugInfo->toPlainText()); +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/AboutDialog.h keepassxc-2.6.4-patched/src/gui/AboutDialog.h +--- keepassxc-2.6.4-orig/src/gui/AboutDialog.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/AboutDialog.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,45 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_ABOUTDIALOG_H +-#define KEEPASSX_ABOUTDIALOG_H +- +-#include +-#include +- +-namespace Ui +-{ +- class AboutDialog; +-} +- +-class AboutDialog : public QDialog +-{ +- Q_OBJECT +- +-public: +- explicit AboutDialog(QWidget* parent = nullptr); +- ~AboutDialog(); +- +-protected slots: +- void copyToClipboard(); +- +-private: +- QScopedPointer m_ui; +-}; +- +-#endif // KEEPASSX_ABOUTDIALOG_H +diff -urNr keepassxc-2.6.4-orig/src/gui/AboutDialog.ui keepassxc-2.6.4-patched/src/gui/AboutDialog.ui +--- keepassxc-2.6.4-orig/src/gui/AboutDialog.ui 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/AboutDialog.ui 1970-01-01 01:00:00.000000000 +0100 +@@ -1,347 +0,0 @@ +- +- +- AboutDialog +- +- +- +- 0 +- 0 +- 510 +- 443 +- +- +- +- About KeePassXC +- +- +- +- +- +- 15 +- +- +- 20 +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- 48 +- 48 +- +- +- +- +- 48 +- 48 +- +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- 75 +- true +- +- +- +- <span style="font-size: 20pt"> KeePassXC ${VERSION}</span> +- +- +- 0 +- +- +- 11 +- +- +- +- +- +- +- +- +- 0 +- +- +- +- About +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- Website: <a href="https://keepassxc.org/" style="text-decoration: underline">https://keepassxc.org</a> +- +- +- true +- +- +- +- +- +- +- Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> +- +- +- true +- +- +- +- +- +- +- Qt::Vertical +- +- +- QSizePolicy::Fixed +- +- +- +- 20 +- 5 +- +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. +- +- +- true +- +- +- +- +- +- +- Qt::Vertical +- +- +- QSizePolicy::Fixed +- +- +- +- 0 +- 5 +- +- +- +- +- +- +- +- Project Maintainers: +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- +- +- true +- +- +- Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. +- +- +- true +- +- +- Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse +- +- +- +- +- +- +- Qt::Vertical +- +- +- +- 0 +- 0 +- +- +- +- +- +- +- +- +- Contributors +- +- +- +- +- +- true +- +- +- +- +- 0 +- 0 +- 466 +- 242 +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- IBeamCursor +- +- +- +- +- +- Qt::AutoText +- +- +- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop +- +- +- true +- +- +- 5 +- +- +- Qt::TextBrowserInteraction +- +- +- +- +- +- +- +- +- +- +- <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> +- +- +- Qt::AlignCenter +- +- +- true +- +- +- +- +- +- +- +- Debug Info +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- Include the following information whenever you report a bug: +- +- +- +- +- +- +- true +- +- +- +- +- +- Qt::TextBrowserInteraction +- +- +- +- +- +- +- Copy to clipboard +- +- +- +- +- +- +- +- +- +- +- QDialogButtonBox::Close +- +- +- +- +- +- +- tabWidget +- scrollArea +- debugInfo +- copyToClipboard +- +- +- +- +diff -urNr keepassxc-2.6.4-orig/src/gui/Application.cpp keepassxc-2.6.4-patched/src/gui/Application.cpp +--- keepassxc-2.6.4-orig/src/gui/Application.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/Application.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,346 +0,0 @@ +-/* +- * Copyright (C) 2012 Tobias Tangemann +- * Copyright (C) 2012 Felix Geyer +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "Application.h" +- +-#include "autotype/AutoType.h" +-#include "core/Config.h" +-#include "core/Global.h" +-#include "core/Resources.h" +-#include "gui/MainWindow.h" +-#include "gui/osutils/OSUtils.h" +-#include "gui/styles/dark/DarkStyle.h" +-#include "gui/styles/light/LightStyle.h" +- +-#include +-#include +-#include +-#include +-#include +-#include +- +-#if defined(Q_OS_WIN) || (defined(Q_OS_UNIX) && !defined(Q_OS_MACOS)) +-#include "core/OSEventFilter.h" +-#endif +- +-#if defined(Q_OS_UNIX) +-#include +-#include +-#include +-#endif +- +-namespace +-{ +- constexpr int WaitTimeoutMSec = 150; +- const char BlockSizeProperty[] = "blockSize"; +-} // namespace +- +-Application::Application(int& argc, char** argv) +- : QApplication(argc, argv) +-#ifdef Q_OS_UNIX +- , m_unixSignalNotifier(nullptr) +-#endif +- , m_alreadyRunning(false) +- , m_lockFile(nullptr) +-#if defined(Q_OS_WIN) || (defined(Q_OS_UNIX) && !defined(Q_OS_MACOS)) +- , m_osEventFilter(new OSEventFilter()) +-{ +- installNativeEventFilter(m_osEventFilter.data()); +-#else +-{ +-#endif +-#if defined(Q_OS_UNIX) +- registerUnixSignals(); +-#endif +- +- QString userName = qgetenv("USER"); +- if (userName.isEmpty()) { +- userName = qgetenv("USERNAME"); +- } +- QString identifier = "keepassxc"; +- if (!userName.isEmpty()) { +- identifier += "-" + userName; +- } +-#ifdef QT_DEBUG +- // In DEBUG mode don't interfere with Release instances +- identifier += "-DEBUG"; +-#endif +- QString lockName = identifier + ".lock"; +- m_socketName = identifier + ".socket"; +- +- // According to documentation we should use RuntimeLocation on *nixes, but even Qt doesn't respect +- // this and creates sockets in TempLocation, so let's be consistent. +- m_lockFile = new QLockFile(QStandardPaths::writableLocation(QStandardPaths::TempLocation) + "/" + lockName); +- m_lockFile->setStaleLockTime(0); +- m_lockFile->tryLock(); +- +- m_lockServer.setSocketOptions(QLocalServer::UserAccessOption); +- connect(&m_lockServer, SIGNAL(newConnection()), this, SIGNAL(anotherInstanceStarted())); +- connect(&m_lockServer, SIGNAL(newConnection()), this, SLOT(processIncomingConnection())); +- +- switch (m_lockFile->error()) { +- case QLockFile::NoError: +- // No existing lock was found, start listener +- m_lockServer.listen(m_socketName); +- break; +- case QLockFile::LockFailedError: { +- if (config()->get(Config::SingleInstance).toBool()) { +- // Attempt to connect to the existing instance +- QLocalSocket client; +- for (int i = 0; i < 3; ++i) { +- client.connectToServer(m_socketName); +- if (client.waitForConnected(WaitTimeoutMSec)) { +- // Connection succeeded, this will raise the existing window if minimized +- client.abort(); +- m_alreadyRunning = true; +- break; +- } +- } +- +- if (!m_alreadyRunning) { +- // If we get here then the original instance is likely dead +- qWarning() << QObject::tr("Existing single-instance lock file is invalid. Launching new instance.") +- .toUtf8() +- .constData(); +- +- // forceably reset the lock file +- m_lockFile->removeStaleLockFile(); +- m_lockFile->tryLock(); +- // start the listen server +- m_lockServer.listen(m_socketName); +- } +- } +- break; +- } +- default: +- qWarning() +- << QObject::tr("The lock file could not be created. Single-instance mode disabled.").toUtf8().constData(); +- } +- +- connect(osUtils, &OSUtilsBase::interfaceThemeChanged, this, [this]() { +- if (config()->get(Config::GUI_ApplicationTheme).toString() != "classic") { +- applyTheme(); +- } +- }); +-} +- +-Application::~Application() +-{ +- m_lockServer.close(); +- if (m_lockFile) { +- m_lockFile->unlock(); +- delete m_lockFile; +- } +-} +- +-void Application::applyTheme() +-{ +- auto appTheme = config()->get(Config::GUI_ApplicationTheme).toString(); +- if (appTheme == "auto") { +- appTheme = osUtils->isDarkMode() ? "dark" : "light"; +-#ifdef Q_OS_WIN +- if (winUtils()->isHighContrastMode()) { +- appTheme = "classic"; +- } +-#endif +- } +- QPixmapCache::clear(); +- if (appTheme == "light") { +- auto* s = new LightStyle; +- setPalette(s->standardPalette()); +- setStyle(s); +- } else if (appTheme == "dark") { +- auto* s = new DarkStyle; +- setPalette(s->standardPalette()); +- setStyle(s); +- m_darkTheme = true; +- } else { +- // Classic mode, don't check for dark theme on Windows +- // because Qt 5.x does not support it +-#ifndef Q_OS_WIN +- m_darkTheme = osUtils->isDarkMode(); +-#endif +- QFile stylesheetFile(":/styles/base/classicstyle.qss"); +- if (stylesheetFile.open(QIODevice::ReadOnly | QIODevice::Text)) { +- setStyleSheet(stylesheetFile.readAll()); +- stylesheetFile.close(); +- } +- } +-} +- +-bool Application::event(QEvent* event) +-{ +- // Handle Apple QFileOpenEvent from finder (double click on .kdbx file) +- if (event->type() == QEvent::FileOpen) { +- emit openFile(static_cast(event)->file()); +- return true; +- } +-#ifdef Q_OS_MACOS +- // restore main window when clicking on the docker icon +- else if (event->type() == QEvent::ApplicationActivate) { +- emit applicationActivated(); +- } +-#endif +- +- return QApplication::event(event); +-} +- +-#if defined(Q_OS_UNIX) +-int Application::unixSignalSocket[2]; +- +-void Application::registerUnixSignals() +-{ +- int result = ::socketpair(AF_UNIX, SOCK_STREAM, 0, unixSignalSocket); +- Q_ASSERT(0 == result); +- if (0 != result) { +- // do not register handles when socket creation failed, otherwise +- // application will be unresponsive to signals such as SIGINT or SIGTERM +- return; +- } +- +- QVector const handledSignals = {SIGQUIT, SIGINT, SIGTERM, SIGHUP}; +- for (auto s : handledSignals) { +- struct sigaction sigAction; +- +- sigAction.sa_handler = handleUnixSignal; +- sigemptyset(&sigAction.sa_mask); +- sigAction.sa_flags = 0 | SA_RESTART; +- sigaction(s, &sigAction, nullptr); +- } +- +- m_unixSignalNotifier = new QSocketNotifier(unixSignalSocket[1], QSocketNotifier::Read, this); +- connect(m_unixSignalNotifier, SIGNAL(activated(int)), this, SLOT(quitBySignal())); +-} +- +-void Application::handleUnixSignal(int sig) +-{ +- switch (sig) { +- case SIGQUIT: +- case SIGINT: +- case SIGTERM: { +- char buf = 0; +- Q_UNUSED(::write(unixSignalSocket[0], &buf, sizeof(buf))); +- return; +- } +- case SIGHUP: +- return; +- } +-} +- +-void Application::quitBySignal() +-{ +- m_unixSignalNotifier->setEnabled(false); +- char buf; +- Q_UNUSED(::read(unixSignalSocket[1], &buf, sizeof(buf))); +- emit quitSignalReceived(); +-} +-#endif +- +-void Application::processIncomingConnection() +-{ +- if (m_lockServer.hasPendingConnections()) { +- QLocalSocket* socket = m_lockServer.nextPendingConnection(); +- socket->setProperty(BlockSizeProperty, 0); +- connect(socket, SIGNAL(readyRead()), this, SLOT(socketReadyRead())); +- } +-} +- +-void Application::socketReadyRead() +-{ +- QLocalSocket* socket = qobject_cast(sender()); +- if (!socket) { +- return; +- } +- +- QDataStream in(socket); +- in.setVersion(QDataStream::Qt_5_0); +- +- int blockSize = socket->property(BlockSizeProperty).toInt(); +- if (blockSize == 0) { +- // Relies on the fact that QDataStream format streams a quint32 into sizeof(quint32) bytes +- if (socket->bytesAvailable() < qint64(sizeof(quint32))) { +- return; +- } +- in >> blockSize; +- } +- +- if (socket->bytesAvailable() < blockSize || in.atEnd()) { +- socket->setProperty(BlockSizeProperty, blockSize); +- return; +- } +- +- QStringList fileNames; +- in >> fileNames; +- for (const QString& fileName : asConst(fileNames)) { +- const QFileInfo fInfo(fileName); +- if (fInfo.isFile() && fInfo.suffix().toLower() == "kdbx") { +- emit openFile(fileName); +- } +- } +- socket->deleteLater(); +-} +- +-bool Application::isAlreadyRunning() const +-{ +-#ifdef QT_DEBUG +- // In DEBUG mode we can run unlimited instances +- return false; +-#endif +- return config()->get(Config::SingleInstance).toBool() && m_alreadyRunning; +-} +- +-bool Application::sendFileNamesToRunningInstance(const QStringList& fileNames) +-{ +- QLocalSocket client; +- client.connectToServer(m_socketName); +- const bool connected = client.waitForConnected(WaitTimeoutMSec); +- if (!connected) { +- return false; +- } +- +- QByteArray data; +- QDataStream out(&data, QIODevice::WriteOnly); +- out.setVersion(QDataStream::Qt_5_0); +- out << quint32(0) << fileNames; +- out.device()->seek(0); +- out << quint32(data.size() - sizeof(quint32)); +- +- const bool writeOk = client.write(data) != -1 && client.waitForBytesWritten(WaitTimeoutMSec); +- client.disconnectFromServer(); +- const bool disconnected = client.waitForDisconnected(WaitTimeoutMSec); +- return writeOk && disconnected; +-} +- +-bool Application::isDarkTheme() const +-{ +- return m_darkTheme; +-} +- +-void Application::restart() +-{ +- // Disable single instance +- m_lockServer.close(); +- if (m_lockFile) { +- m_lockFile->unlock(); +- delete m_lockFile; +- m_lockFile = nullptr; +- } +- +- exit(RESTART_EXITCODE); +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/Application.h keepassxc-2.6.4-patched/src/gui/Application.h +--- keepassxc-2.6.4-orig/src/gui/Application.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/Application.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,89 +0,0 @@ +-/* +- * Copyright (C) 2012 Tobias Tangemann +- * Copyright (C) 2012 Felix Geyer +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_APPLICATION_H +-#define KEEPASSX_APPLICATION_H +- +-#include +-#include +- +-#if defined(Q_OS_WIN) || (defined(Q_OS_UNIX) && !defined(Q_OS_MACOS)) +-#include +- +-class OSEventFilter; +-#endif +-class QLockFile; +-class QSocketNotifier; +- +-constexpr int RESTART_EXITCODE = -1; +- +-class Application : public QApplication +-{ +- Q_OBJECT +- +-public: +- Application(int& argc, char** argv); +- ~Application() override; +- +- void applyTheme(); +- +- bool event(QEvent* event) override; +- bool isAlreadyRunning() const; +- bool isDarkTheme() const; +- +- bool sendFileNamesToRunningInstance(const QStringList& fileNames); +- +- void restart(); +- +-signals: +- void openFile(const QString& filename); +- void anotherInstanceStarted(); +- void applicationActivated(); +- void quitSignalReceived(); +- +-private slots: +-#if defined(Q_OS_UNIX) +- void quitBySignal(); +-#endif +- void processIncomingConnection(); +- void socketReadyRead(); +- +-private: +-#if defined(Q_OS_UNIX) +- /** +- * Register Unix signals such as SIGINT and SIGTERM for clean shutdown. +- */ +- void registerUnixSignals(); +- QSocketNotifier* m_unixSignalNotifier; +- static void handleUnixSignal(int sig); +- static int unixSignalSocket[2]; +-#endif +- bool m_alreadyRunning; +- bool m_darkTheme = false; +- QLockFile* m_lockFile; +- QLocalServer m_lockServer; +- QString m_socketName; +-#if defined(Q_OS_WIN) || (defined(Q_OS_UNIX) && !defined(Q_OS_MACOS)) +- QScopedPointer m_osEventFilter; +-#endif +-}; +- +-#define kpxcApp qobject_cast(Application::instance()) +- +-#endif // KEEPASSX_APPLICATION_H +diff -urNr keepassxc-2.6.4-orig/src/gui/ApplicationSettingsWidget.cpp keepassxc-2.6.4-patched/src/gui/ApplicationSettingsWidget.cpp +--- keepassxc-2.6.4-orig/src/gui/ApplicationSettingsWidget.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/ApplicationSettingsWidget.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,494 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "ApplicationSettingsWidget.h" +-#include "ui_ApplicationSettingsWidgetGeneral.h" +-#include "ui_ApplicationSettingsWidgetSecurity.h" +- +-#include "config-keepassx.h" +- +-#include "autotype/AutoType.h" +-#include "core/Config.h" +-#include "core/Global.h" +-#include "core/Resources.h" +-#include "core/Translator.h" +-#include "gui/MainWindow.h" +-#include "gui/osutils/OSUtils.h" +- +-#include "MessageBox.h" +-#include "touchid/TouchID.h" +- +-class ApplicationSettingsWidget::ExtraPage +-{ +-public: +- ExtraPage(ISettingsPage* page, QWidget* widget) +- : settingsPage(page) +- , widget(widget) +- { +- } +- +- void loadSettings() const +- { +- settingsPage->loadSettings(widget); +- } +- +- void saveSettings() const +- { +- settingsPage->saveSettings(widget); +- } +- +-private: +- QSharedPointer settingsPage; +- QWidget* widget; +-}; +- +-/** +- * Helper class to ignore mouse wheel events on non-focused widgets +- * NOTE: The widget must NOT have a focus policy of "WHEEL" +- */ +-class MouseWheelEventFilter : public QObject +-{ +-public: +- explicit MouseWheelEventFilter(QObject* parent) +- : QObject(parent){}; +- +-protected: +- bool eventFilter(QObject* obj, QEvent* event) override +- { +- const auto* widget = qobject_cast(obj); +- if (event->type() == QEvent::Wheel && widget && !widget->hasFocus()) { +- event->ignore(); +- return true; +- } +- return QObject::eventFilter(obj, event); +- } +-}; +- +-ApplicationSettingsWidget::ApplicationSettingsWidget(QWidget* parent) +- : EditWidget(parent) +- , m_secWidget(new QWidget()) +- , m_generalWidget(new QWidget()) +- , m_secUi(new Ui::ApplicationSettingsWidgetSecurity()) +- , m_generalUi(new Ui::ApplicationSettingsWidgetGeneral()) +- , m_globalAutoTypeKey(static_cast(0)) +- , m_globalAutoTypeModifiers(Qt::NoModifier) +-{ +- setHeadline(tr("Application Settings")); +- showApplyButton(false); +- +- m_secUi->setupUi(m_secWidget); +- m_generalUi->setupUi(m_generalWidget); +- addPage(tr("General"), Resources::instance()->icon("preferences-other"), m_generalWidget); +- addPage(tr("Security"), Resources::instance()->icon("security-high"), m_secWidget); +- +- if (!autoType()->isAvailable()) { +- m_generalUi->generalSettingsTabWidget->removeTab(1); +- } +- +- connect(this, SIGNAL(accepted()), SLOT(saveSettings())); +- connect(this, SIGNAL(rejected()), SLOT(reject())); +- +- // clang-format off +- connect(m_generalUi->autoSaveAfterEveryChangeCheckBox, SIGNAL(toggled(bool)), SLOT(autoSaveToggled(bool))); +- connect(m_generalUi->hideWindowOnCopyCheckBox, SIGNAL(toggled(bool)), SLOT(hideWindowOnCopyCheckBoxToggled(bool))); +- connect(m_generalUi->systrayShowCheckBox, SIGNAL(toggled(bool)), SLOT(systrayToggled(bool))); +- connect(m_generalUi->rememberLastDatabasesCheckBox, SIGNAL(toggled(bool)), SLOT(rememberDatabasesToggled(bool))); +- connect(m_generalUi->resetSettingsButton, SIGNAL(clicked()), SLOT(resetSettings())); +- +- connect(m_secUi->clearClipboardCheckBox, SIGNAL(toggled(bool)), +- m_secUi->clearClipboardSpinBox, SLOT(setEnabled(bool))); +- connect(m_secUi->clearSearchCheckBox, SIGNAL(toggled(bool)), +- m_secUi->clearSearchSpinBox, SLOT(setEnabled(bool))); +- connect(m_secUi->lockDatabaseIdleCheckBox, SIGNAL(toggled(bool)), +- m_secUi->lockDatabaseIdleSpinBox, SLOT(setEnabled(bool))); +- connect(m_secUi->touchIDResetCheckBox, SIGNAL(toggled(bool)), +- m_secUi->touchIDResetSpinBox, SLOT(setEnabled(bool))); +- // clang-format on +- +- // Disable mouse wheel grab when scrolling +- // This prevents combo box and spinner values from changing without explicit focus +- auto mouseWheelFilter = new MouseWheelEventFilter(this); +- m_generalUi->faviconTimeoutSpinBox->installEventFilter(mouseWheelFilter); +- m_generalUi->toolButtonStyleComboBox->installEventFilter(mouseWheelFilter); +- m_generalUi->languageComboBox->installEventFilter(mouseWheelFilter); +- m_generalUi->trayIconAppearance->installEventFilter(mouseWheelFilter); +- +-#ifdef WITH_XC_UPDATECHECK +- connect(m_generalUi->checkForUpdatesOnStartupCheckBox, SIGNAL(toggled(bool)), SLOT(checkUpdatesToggled(bool))); +-#else +- m_generalUi->checkForUpdatesOnStartupCheckBox->setVisible(false); +- m_generalUi->checkForUpdatesIncludeBetasCheckBox->setVisible(false); +- m_generalUi->checkUpdatesSpacer->changeSize(0, 0, QSizePolicy::Fixed, QSizePolicy::Fixed); +-#endif +- +-#ifndef WITH_XC_NETWORKING +- m_secUi->privacy->setVisible(false); +- m_generalUi->faviconTimeoutLabel->setVisible(false); +- m_generalUi->faviconTimeoutSpinBox->setVisible(false); +-#endif +- +-#ifndef WITH_XC_TOUCHID +- bool hideTouchID = true; +-#else +- bool hideTouchID = !TouchID::getInstance().isAvailable(); +-#endif +- if (hideTouchID) { +- m_secUi->touchIDResetCheckBox->setVisible(false); +- m_secUi->touchIDResetSpinBox->setVisible(false); +- m_secUi->touchIDResetOnScreenLockCheckBox->setVisible(false); +- } +-} +- +-ApplicationSettingsWidget::~ApplicationSettingsWidget() +-{ +-} +- +-void ApplicationSettingsWidget::addSettingsPage(ISettingsPage* page) +-{ +- QWidget* widget = page->createWidget(); +- widget->setParent(this); +- m_extraPages.append(ExtraPage(page, widget)); +- addPage(page->name(), page->icon(), widget); +-} +- +-void ApplicationSettingsWidget::loadSettings() +-{ +- if (config()->hasAccessError()) { +- showMessage(tr("Access error for config file %1").arg(config()->getFileName()), MessageWidget::Error); +- } +- +-#ifdef QT_DEBUG +- m_generalUi->singleInstanceCheckBox->setEnabled(false); +- m_generalUi->launchAtStartup->setEnabled(false); +-#endif +- m_generalUi->singleInstanceCheckBox->setChecked(config()->get(Config::SingleInstance).toBool()); +- m_generalUi->launchAtStartup->setChecked(osUtils->isLaunchAtStartupEnabled()); +- m_generalUi->rememberLastDatabasesCheckBox->setChecked(config()->get(Config::RememberLastDatabases).toBool()); +- m_generalUi->rememberLastKeyFilesCheckBox->setChecked(config()->get(Config::RememberLastKeyFiles).toBool()); +- m_generalUi->openPreviousDatabasesOnStartupCheckBox->setChecked( +- config()->get(Config::OpenPreviousDatabasesOnStartup).toBool()); +- m_generalUi->autoSaveAfterEveryChangeCheckBox->setChecked(config()->get(Config::AutoSaveAfterEveryChange).toBool()); +- m_generalUi->autoSaveOnExitCheckBox->setChecked(config()->get(Config::AutoSaveOnExit).toBool()); +- m_generalUi->autoSaveNonDataChangesCheckBox->setChecked(config()->get(Config::AutoSaveNonDataChanges).toBool()); +- m_generalUi->backupBeforeSaveCheckBox->setChecked(config()->get(Config::BackupBeforeSave).toBool()); +- m_generalUi->useAtomicSavesCheckBox->setChecked(config()->get(Config::UseAtomicSaves).toBool()); +- m_generalUi->autoReloadOnChangeCheckBox->setChecked(config()->get(Config::AutoReloadOnChange).toBool()); +- m_generalUi->minimizeAfterUnlockCheckBox->setChecked(config()->get(Config::MinimizeAfterUnlock).toBool()); +- m_generalUi->minimizeOnOpenUrlCheckBox->setChecked(config()->get(Config::MinimizeOnOpenUrl).toBool()); +- m_generalUi->hideWindowOnCopyCheckBox->setChecked(config()->get(Config::HideWindowOnCopy).toBool()); +- hideWindowOnCopyCheckBoxToggled(m_generalUi->hideWindowOnCopyCheckBox->isChecked()); +- m_generalUi->minimizeOnCopyRadioButton->setChecked(config()->get(Config::MinimizeOnCopy).toBool()); +- m_generalUi->dropToBackgroundOnCopyRadioButton->setChecked(config()->get(Config::DropToBackgroundOnCopy).toBool()); +- m_generalUi->useGroupIconOnEntryCreationCheckBox->setChecked( +- config()->get(Config::UseGroupIconOnEntryCreation).toBool()); +- m_generalUi->autoTypeEntryTitleMatchCheckBox->setChecked(config()->get(Config::AutoTypeEntryTitleMatch).toBool()); +- m_generalUi->autoTypeEntryURLMatchCheckBox->setChecked(config()->get(Config::AutoTypeEntryURLMatch).toBool()); +- m_generalUi->faviconTimeoutSpinBox->setValue(config()->get(Config::FaviconDownloadTimeout).toInt()); +- +- m_generalUi->languageComboBox->clear(); +- QList> languages = Translator::availableLanguages(); +- for (const auto& language : languages) { +- m_generalUi->languageComboBox->addItem(language.second, language.first); +- } +- int defaultIndex = m_generalUi->languageComboBox->findData(config()->get(Config::GUI_Language)); +- if (defaultIndex > 0) { +- m_generalUi->languageComboBox->setCurrentIndex(defaultIndex); +- } +- +- m_generalUi->toolbarMovableCheckBox->setChecked(config()->get(Config::GUI_MovableToolbar).toBool()); +- m_generalUi->monospaceNotesCheckBox->setChecked(config()->get(Config::GUI_MonospaceNotes).toBool()); +- +- m_generalUi->toolButtonStyleComboBox->clear(); +- m_generalUi->toolButtonStyleComboBox->addItem(tr("Icon only"), Qt::ToolButtonIconOnly); +- m_generalUi->toolButtonStyleComboBox->addItem(tr("Text only"), Qt::ToolButtonTextOnly); +- m_generalUi->toolButtonStyleComboBox->addItem(tr("Text beside icon"), Qt::ToolButtonTextBesideIcon); +- m_generalUi->toolButtonStyleComboBox->addItem(tr("Text under icon"), Qt::ToolButtonTextUnderIcon); +- m_generalUi->toolButtonStyleComboBox->addItem(tr("Follow style"), Qt::ToolButtonFollowStyle); +- int toolButtonStyleIndex = +- m_generalUi->toolButtonStyleComboBox->findData(config()->get(Config::GUI_ToolButtonStyle)); +- if (toolButtonStyleIndex > 0) { +- m_generalUi->toolButtonStyleComboBox->setCurrentIndex(toolButtonStyleIndex); +- } +- +- m_generalUi->systrayShowCheckBox->setChecked(config()->get(Config::GUI_ShowTrayIcon).toBool()); +- systrayToggled(m_generalUi->systrayShowCheckBox->isChecked()); +- m_generalUi->systrayMinimizeToTrayCheckBox->setChecked(config()->get(Config::GUI_MinimizeToTray).toBool()); +- m_generalUi->minimizeOnCloseCheckBox->setChecked(config()->get(Config::GUI_MinimizeOnClose).toBool()); +- m_generalUi->systrayMinimizeOnStartup->setChecked(config()->get(Config::GUI_MinimizeOnStartup).toBool()); +- m_generalUi->checkForUpdatesOnStartupCheckBox->setChecked(config()->get(Config::GUI_CheckForUpdates).toBool()); +- checkUpdatesToggled(m_generalUi->checkForUpdatesOnStartupCheckBox->isChecked()); +- m_generalUi->checkForUpdatesIncludeBetasCheckBox->setChecked( +- config()->get(Config::GUI_CheckForUpdatesIncludeBetas).toBool()); +- +- m_generalUi->autoTypeAskCheckBox->setChecked(config()->get(Config::Security_AutoTypeAsk).toBool()); +- +- if (autoType()->isAvailable()) { +- m_globalAutoTypeKey = static_cast(config()->get(Config::GlobalAutoTypeKey).toInt()); +- m_globalAutoTypeModifiers = +- static_cast(config()->get(Config::GlobalAutoTypeModifiers).toInt()); +- if (m_globalAutoTypeKey > 0 && m_globalAutoTypeModifiers > 0) { +- m_generalUi->autoTypeShortcutWidget->setShortcut(m_globalAutoTypeKey, m_globalAutoTypeModifiers); +- } +- m_generalUi->autoTypeShortcutWidget->setAttribute(Qt::WA_MacShowFocusRect, true); +- m_generalUi->autoTypeDelaySpinBox->setValue(config()->get(Config::AutoTypeDelay).toInt()); +- m_generalUi->autoTypeStartDelaySpinBox->setValue(config()->get(Config::AutoTypeStartDelay).toInt()); +- } +- +- m_generalUi->trayIconAppearance->clear(); +-#if defined(Q_OS_MACOS) || defined(Q_OS_WIN) +- m_generalUi->trayIconAppearance->addItem(tr("Monochrome"), "monochrome"); +-#else +- m_generalUi->trayIconAppearance->addItem(tr("Monochrome (light)"), "monochrome-light"); +- m_generalUi->trayIconAppearance->addItem(tr("Monochrome (dark)"), "monochrome-dark"); +-#endif +- m_generalUi->trayIconAppearance->addItem(tr("Colorful"), "colorful"); +- int trayIconIndex = m_generalUi->trayIconAppearance->findData(resources()->trayIconAppearance()); +- if (trayIconIndex > 0) { +- m_generalUi->trayIconAppearance->setCurrentIndex(trayIconIndex); +- } +- +- m_secUi->clearClipboardCheckBox->setChecked(config()->get(Config::Security_ClearClipboard).toBool()); +- m_secUi->clearClipboardSpinBox->setValue(config()->get(Config::Security_ClearClipboardTimeout).toInt()); +- +- m_secUi->clearSearchCheckBox->setChecked(config()->get(Config::Security_ClearSearch).toBool()); +- m_secUi->clearSearchSpinBox->setValue(config()->get(Config::Security_ClearSearchTimeout).toInt()); +- +- m_secUi->lockDatabaseIdleCheckBox->setChecked(config()->get(Config::Security_LockDatabaseIdle).toBool()); +- m_secUi->lockDatabaseIdleSpinBox->setValue(config()->get(Config::Security_LockDatabaseIdleSeconds).toInt()); +- m_secUi->lockDatabaseMinimizeCheckBox->setChecked(config()->get(Config::Security_LockDatabaseMinimize).toBool()); +- m_secUi->lockDatabaseOnScreenLockCheckBox->setChecked( +- config()->get(Config::Security_LockDatabaseScreenLock).toBool()); +- m_secUi->relockDatabaseAutoTypeCheckBox->setChecked(config()->get(Config::Security_RelockAutoType).toBool()); +- m_secUi->fallbackToSearch->setChecked(config()->get(Config::Security_IconDownloadFallback).toBool()); +- +- m_secUi->passwordsHiddenCheckBox->setChecked(config()->get(Config::Security_PasswordsHidden).toBool()); +- m_secUi->passwordShowDotsCheckBox->setChecked(config()->get(Config::Security_PasswordEmptyPlaceholder).toBool()); +- m_secUi->passwordPreviewCleartextCheckBox->setChecked( +- config()->get(Config::Security_HidePasswordPreviewPanel).toBool()); +- m_secUi->passwordsRepeatVisibleCheckBox->setChecked( +- config()->get(Config::Security_PasswordsRepeatVisible).toBool()); +- m_secUi->hideNotesCheckBox->setChecked(config()->get(Config::Security_HideNotes).toBool()); +- +- m_secUi->touchIDResetCheckBox->setChecked(config()->get(Config::Security_ResetTouchId).toBool()); +- m_secUi->touchIDResetSpinBox->setValue(config()->get(Config::Security_ResetTouchIdTimeout).toInt()); +- m_secUi->touchIDResetOnScreenLockCheckBox->setChecked( +- config()->get(Config::Security_ResetTouchIdScreenlock).toBool()); +- +- for (const ExtraPage& page : asConst(m_extraPages)) { +- page.loadSettings(); +- } +- +- setCurrentPage(0); +-} +- +-void ApplicationSettingsWidget::saveSettings() +-{ +- if (config()->hasAccessError()) { +- showMessage(tr("Access error for config file %1").arg(config()->getFileName()), MessageWidget::Error); +- // We prevent closing the settings page if we could not write to +- // the config file. +- return; +- } +- +-#ifndef QT_DEBUG +- osUtils->setLaunchAtStartup(m_generalUi->launchAtStartup->isChecked()); +-#endif +- +- config()->set(Config::SingleInstance, m_generalUi->singleInstanceCheckBox->isChecked()); +- config()->set(Config::RememberLastDatabases, m_generalUi->rememberLastDatabasesCheckBox->isChecked()); +- config()->set(Config::RememberLastKeyFiles, m_generalUi->rememberLastKeyFilesCheckBox->isChecked()); +- config()->set(Config::OpenPreviousDatabasesOnStartup, +- m_generalUi->openPreviousDatabasesOnStartupCheckBox->isChecked()); +- config()->set(Config::AutoSaveAfterEveryChange, m_generalUi->autoSaveAfterEveryChangeCheckBox->isChecked()); +- config()->set(Config::AutoSaveOnExit, m_generalUi->autoSaveOnExitCheckBox->isChecked()); +- config()->set(Config::AutoSaveNonDataChanges, m_generalUi->autoSaveNonDataChangesCheckBox->isChecked()); +- config()->set(Config::BackupBeforeSave, m_generalUi->backupBeforeSaveCheckBox->isChecked()); +- config()->set(Config::UseAtomicSaves, m_generalUi->useAtomicSavesCheckBox->isChecked()); +- config()->set(Config::AutoReloadOnChange, m_generalUi->autoReloadOnChangeCheckBox->isChecked()); +- config()->set(Config::MinimizeAfterUnlock, m_generalUi->minimizeAfterUnlockCheckBox->isChecked()); +- config()->set(Config::MinimizeOnOpenUrl, m_generalUi->minimizeOnOpenUrlCheckBox->isChecked()); +- config()->set(Config::HideWindowOnCopy, m_generalUi->hideWindowOnCopyCheckBox->isChecked()); +- config()->set(Config::MinimizeOnCopy, m_generalUi->minimizeOnCopyRadioButton->isChecked()); +- config()->set(Config::DropToBackgroundOnCopy, m_generalUi->dropToBackgroundOnCopyRadioButton->isChecked()); +- config()->set(Config::UseGroupIconOnEntryCreation, m_generalUi->useGroupIconOnEntryCreationCheckBox->isChecked()); +- config()->set(Config::AutoTypeEntryTitleMatch, m_generalUi->autoTypeEntryTitleMatchCheckBox->isChecked()); +- config()->set(Config::AutoTypeEntryURLMatch, m_generalUi->autoTypeEntryURLMatchCheckBox->isChecked()); +- config()->set(Config::FaviconDownloadTimeout, m_generalUi->faviconTimeoutSpinBox->value()); +- +- auto language = m_generalUi->languageComboBox->currentData().toString(); +- if (config()->get(Config::GUI_Language) != language) { +- QTimer::singleShot(200, [] { +- getMainWindow()->restartApp( +- tr("You must restart the application to set the new language. Would you like to restart now?")); +- }); +- } +- config()->set(Config::GUI_Language, language); +- +- config()->set(Config::GUI_MovableToolbar, m_generalUi->toolbarMovableCheckBox->isChecked()); +- config()->set(Config::GUI_MonospaceNotes, m_generalUi->monospaceNotesCheckBox->isChecked()); +- +- config()->set(Config::GUI_ToolButtonStyle, m_generalUi->toolButtonStyleComboBox->currentData().toString()); +- +- config()->set(Config::GUI_ShowTrayIcon, m_generalUi->systrayShowCheckBox->isChecked()); +- config()->set(Config::GUI_TrayIconAppearance, m_generalUi->trayIconAppearance->currentData().toString()); +- config()->set(Config::GUI_MinimizeToTray, m_generalUi->systrayMinimizeToTrayCheckBox->isChecked()); +- config()->set(Config::GUI_MinimizeOnClose, m_generalUi->minimizeOnCloseCheckBox->isChecked()); +- config()->set(Config::GUI_MinimizeOnStartup, m_generalUi->systrayMinimizeOnStartup->isChecked()); +- config()->set(Config::GUI_CheckForUpdates, m_generalUi->checkForUpdatesOnStartupCheckBox->isChecked()); +- config()->set(Config::GUI_CheckForUpdatesIncludeBetas, +- m_generalUi->checkForUpdatesIncludeBetasCheckBox->isChecked()); +- +- config()->set(Config::Security_AutoTypeAsk, m_generalUi->autoTypeAskCheckBox->isChecked()); +- +- if (autoType()->isAvailable()) { +- config()->set(Config::GlobalAutoTypeKey, m_generalUi->autoTypeShortcutWidget->key()); +- config()->set(Config::GlobalAutoTypeModifiers, +- static_cast(m_generalUi->autoTypeShortcutWidget->modifiers())); +- config()->set(Config::AutoTypeDelay, m_generalUi->autoTypeDelaySpinBox->value()); +- config()->set(Config::AutoTypeStartDelay, m_generalUi->autoTypeStartDelaySpinBox->value()); +- } +- config()->set(Config::Security_ClearClipboard, m_secUi->clearClipboardCheckBox->isChecked()); +- config()->set(Config::Security_ClearClipboardTimeout, m_secUi->clearClipboardSpinBox->value()); +- +- config()->set(Config::Security_ClearSearch, m_secUi->clearSearchCheckBox->isChecked()); +- config()->set(Config::Security_ClearSearchTimeout, m_secUi->clearSearchSpinBox->value()); +- +- config()->set(Config::Security_LockDatabaseIdle, m_secUi->lockDatabaseIdleCheckBox->isChecked()); +- config()->set(Config::Security_LockDatabaseIdleSeconds, m_secUi->lockDatabaseIdleSpinBox->value()); +- config()->set(Config::Security_LockDatabaseMinimize, m_secUi->lockDatabaseMinimizeCheckBox->isChecked()); +- config()->set(Config::Security_LockDatabaseScreenLock, m_secUi->lockDatabaseOnScreenLockCheckBox->isChecked()); +- config()->set(Config::Security_RelockAutoType, m_secUi->relockDatabaseAutoTypeCheckBox->isChecked()); +- config()->set(Config::Security_IconDownloadFallback, m_secUi->fallbackToSearch->isChecked()); +- +- config()->set(Config::Security_PasswordsHidden, m_secUi->passwordsHiddenCheckBox->isChecked()); +- config()->set(Config::Security_PasswordEmptyPlaceholder, m_secUi->passwordShowDotsCheckBox->isChecked()); +- +- config()->set(Config::Security_HidePasswordPreviewPanel, m_secUi->passwordPreviewCleartextCheckBox->isChecked()); +- config()->set(Config::Security_PasswordsRepeatVisible, m_secUi->passwordsRepeatVisibleCheckBox->isChecked()); +- config()->set(Config::Security_HideNotes, m_secUi->hideNotesCheckBox->isChecked()); +- +- config()->set(Config::Security_ResetTouchId, m_secUi->touchIDResetCheckBox->isChecked()); +- config()->set(Config::Security_ResetTouchIdTimeout, m_secUi->touchIDResetSpinBox->value()); +- config()->set(Config::Security_ResetTouchIdScreenlock, m_secUi->touchIDResetOnScreenLockCheckBox->isChecked()); +- +- // Security: clear storage if related settings are disabled +- if (!config()->get(Config::RememberLastDatabases).toBool()) { +- config()->remove(Config::LastDatabases); +- config()->remove(Config::LastActiveDatabase); +- config()->remove(Config::LastAttachmentDir); +- } +- +- if (!config()->get(Config::RememberLastKeyFiles).toBool()) { +- config()->remove(Config::LastKeyFiles); +- config()->remove(Config::LastChallengeResponse); +- config()->remove(Config::LastDir); +- } +- +- for (const ExtraPage& page : asConst(m_extraPages)) { +- page.saveSettings(); +- } +-} +- +-void ApplicationSettingsWidget::resetSettings() +-{ +- // Confirm reset +- auto ans = MessageBox::question(this, +- tr("Reset Settings?"), +- tr("Are you sure you want to reset all general and security settings to default?"), +- MessageBox::Reset | MessageBox::Cancel, +- MessageBox::Cancel); +- if (ans == MessageBox::Cancel) { +- return; +- } +- +- if (config()->hasAccessError()) { +- showMessage(tr("Access error for config file %1").arg(config()->getFileName()), MessageWidget::Error); +- // We prevent closing the settings page if we could not write to +- // the config file. +- return; +- } +- +- // Reset general and security settings to default +- config()->resetToDefaults(); +- +- // Clear recently used data +- config()->remove(Config::LastDatabases); +- config()->remove(Config::LastActiveDatabase); +- config()->remove(Config::LastAttachmentDir); +- config()->remove(Config::LastKeyFiles); +- config()->remove(Config::LastDir); +- +- // Save the Extra Pages (these are NOT reset) +- for (const ExtraPage& page : asConst(m_extraPages)) { +- page.saveSettings(); +- } +- +- config()->sync(); +- +- // Refresh the settings widget and notify listeners +- loadSettings(); +- emit settingsReset(); +-} +- +-void ApplicationSettingsWidget::reject() +-{ +- // register the old key again as it might have changed +- if (m_globalAutoTypeKey > 0 && m_globalAutoTypeModifiers > 0) { +- autoType()->registerGlobalShortcut(m_globalAutoTypeKey, m_globalAutoTypeModifiers); +- } +-} +- +-void ApplicationSettingsWidget::autoSaveToggled(bool checked) +-{ +- // Explicitly enable other auto-save options +- if (checked) { +- m_generalUi->autoSaveOnExitCheckBox->setChecked(true); +- m_generalUi->autoSaveNonDataChangesCheckBox->setChecked(true); +- } +- m_generalUi->autoSaveOnExitCheckBox->setEnabled(!checked); +- m_generalUi->autoSaveNonDataChangesCheckBox->setEnabled(!checked); +-} +- +-void ApplicationSettingsWidget::hideWindowOnCopyCheckBoxToggled(bool checked) +-{ +- m_generalUi->minimizeOnCopyRadioButton->setEnabled(checked); +- m_generalUi->dropToBackgroundOnCopyRadioButton->setEnabled(checked); +-} +- +-void ApplicationSettingsWidget::systrayToggled(bool checked) +-{ +- m_generalUi->trayIconAppearance->setEnabled(checked); +- m_generalUi->trayIconAppearanceLabel->setEnabled(checked); +- m_generalUi->systrayMinimizeToTrayCheckBox->setEnabled(checked); +-} +- +-void ApplicationSettingsWidget::rememberDatabasesToggled(bool checked) +-{ +- if (!checked) { +- m_generalUi->rememberLastKeyFilesCheckBox->setChecked(false); +- m_generalUi->openPreviousDatabasesOnStartupCheckBox->setChecked(false); +- } +- +- m_generalUi->rememberLastKeyFilesCheckBox->setEnabled(checked); +- m_generalUi->openPreviousDatabasesOnStartupCheckBox->setEnabled(checked); +-} +- +-void ApplicationSettingsWidget::checkUpdatesToggled(bool checked) +-{ +- m_generalUi->checkForUpdatesIncludeBetasCheckBox->setEnabled(checked); +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/ApplicationSettingsWidgetGeneral.ui keepassxc-2.6.4-patched/src/gui/ApplicationSettingsWidgetGeneral.ui +--- keepassxc-2.6.4-orig/src/gui/ApplicationSettingsWidgetGeneral.ui 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/ApplicationSettingsWidgetGeneral.ui 1970-01-01 01:00:00.000000000 +0100 +@@ -1,1068 +0,0 @@ +- +- +- ApplicationSettingsWidgetGeneral +- +- +- +- 0 +- 0 +- 605 +- 1279 +- +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- 0 +- +- +- +- Basic Settings +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- QFrame::NoFrame +- +- +- QFrame::Plain +- +- +- Qt::ScrollBarAlwaysOff +- +- +- true +- +- +- +- +- 0 +- 0 +- 581 +- 1235 +- +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- Startup +- +- +- +- +- +- Start only a single instance of KeePassXC +- +- +- true +- +- +- +- +- +- +- Automatically launch KeePassXC at system startup +- +- +- +- +- +- +- Minimize window at application startup +- +- +- +- +- +- +- Minimize window after unlocking database +- +- +- +- +- +- +- Remember previously used databases +- +- +- true +- +- +- +- +- +- +- 0 +- +- +- QLayout::SetMaximumSize +- +- +- +- +- Qt::Horizontal +- +- +- QSizePolicy::Fixed +- +- +- +- 30 +- 20 +- +- +- +- +- +- +- +- Load previously open databases on startup +- +- +- true +- +- +- +- +- +- +- +- +- 0 +- +- +- QLayout::SetMaximumSize +- +- +- +- +- Qt::Horizontal +- +- +- QSizePolicy::Fixed +- +- +- +- 30 +- 20 +- +- +- +- +- +- +- +- Remember database key files and security dongles +- +- +- true +- +- +- +- +- +- +- +- +- Check for updates at application startup once per week +- +- +- +- +- +- +- 0 +- +- +- +- +- Qt::Horizontal +- +- +- QSizePolicy::Fixed +- +- +- +- 30 +- 20 +- +- +- +- +- +- +- +- false +- +- +- Include beta releases when checking for updates +- +- +- +- +- +- +- +- +- +- +- +- File Management +- +- +- +- +- +- Automatically save after every change +- +- +- +- +- +- +- Automatically save when locking database +- +- +- +- +- +- +- Automatically save non-data changes when locking database +- +- +- +- +- +- +- Backup database file before saving +- +- +- +- +- +- +- Automatically reload the database when modified externally +- +- +- +- +- +- +- Safely save database files (disable if experiencing problems with Dropbox, etc.) +- +- +- true +- +- +- +- +- +- +- +- +- +- Entry Management +- +- +- +- +- +- Use group icon on entry creation +- +- +- true +- +- +- +- +- +- +- Minimize when opening a URL +- +- +- +- +- +- +- Hide window when copying to clipboard +- +- +- +- +- +- +- 0 +- +- +- +- +- Qt::Horizontal +- +- +- QSizePolicy::Fixed +- +- +- +- 30 +- 20 +- +- +- +- +- +- +- +- false +- +- +- Minimize +- +- +- +- +- +- +- +- +- 0 +- +- +- +- +- Qt::Horizontal +- +- +- QSizePolicy::Fixed +- +- +- +- 30 +- 20 +- +- +- +- +- +- +- +- false +- +- +- Drop to background +- +- +- +- +- +- +- +- +- +- +- Favicon download timeout: +- +- +- faviconTimeoutSpinBox +- +- +- +- +- +- +- true +- +- +- Qt::StrongFocus +- +- +- Website icon download timeout in seconds +- +- +- sec +- +- +- 1 +- +- +- 60 +- +- +- 10 +- +- +- +- +- +- +- Qt::Horizontal +- +- +- +- 40 +- 20 +- +- +- +- +- +- +- +- +- +- +- +- +- User Interface +- +- +- +- +- +- 10 +- +- +- +- +- +- 0 +- 0 +- +- +- +- Qt::StrongFocus +- +- +- Toolbar button style +- +- +- QComboBox::AdjustToContents +- +- +- +- +- +- +- true +- +- +- +- 0 +- 0 +- +- +- +- Movable toolbar +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- Qt::StrongFocus +- +- +- Language selection +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- Language: +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- languageComboBox +- +- +- +- +- +- +- (restart program to activate) +- +- +- +- +- +- +- Qt::Horizontal +- +- +- +- 40 +- 20 +- +- +- +- +- +- +- +- true +- +- +- +- 0 +- 0 +- +- +- +- margin-right: 5px +- +- +- Toolbar button style: +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- toolButtonStyleComboBox +- +- +- +- +- +- +- +- +- Use monospaced font for notes +- +- +- +- +- +- +- Minimize instead of app exit +- +- +- +- +- +- +- Show a system tray icon +- +- +- +- +- +- +- QLayout::SetMaximumSize +- +- +- 0 +- +- +- +- +- Qt::Horizontal +- +- +- QSizePolicy::Fixed +- +- +- +- 30 +- 20 +- +- +- +- +- +- +- +- false +- +- +- +- 0 +- 0 +- +- +- +- Qt::StrongFocus +- +- +- Tray icon type +- +- +- +- +- +- +- false +- +- +- Tray icon type: +- +- +- trayIconAppearance +- +- +- +- +- +- +- Qt::Horizontal +- +- +- +- 40 +- 20 +- +- +- +- +- +- +- +- Qt::Horizontal +- +- +- QSizePolicy::Fixed +- +- +- +- 6 +- 0 +- +- +- +- +- +- +- +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- 0 +- +- +- QLayout::SetMaximumSize +- +- +- +- +- Qt::Horizontal +- +- +- QSizePolicy::Fixed +- +- +- +- 30 +- 20 +- +- +- +- +- +- +- +- false +- +- +- +- 0 +- 0 +- +- +- +- Hide window to system tray when minimized +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- Qt::Vertical +- +- +- QSizePolicy::Fixed +- +- +- +- 20 +- 10 +- +- +- +- +- +- +- +- 0 +- +- +- QLayout::SetMaximumSize +- +- +- +- +- Reset settings to default… +- +- +- +- +- +- +- Qt::Horizontal +- +- +- QSizePolicy::Expanding +- +- +- +- 50 +- 20 +- +- +- +- +- +- +- +- +- +- Qt::Vertical +- +- +- +- 20 +- 0 +- +- +- +- +- +- +- +- +- +- +- +- +- Auto-Type +- +- +- +- 10 +- +- +- 10 +- +- +- 10 +- +- +- 10 +- +- +- +- +- Use entry title to match windows for global Auto-Type +- +- +- +- +- +- +- Use entry URL to match windows for global Auto-Type +- +- +- +- +- +- +- Always ask before performing Auto-Type +- +- +- true +- +- +- +- +- +- +- Qt::Vertical +- +- +- QSizePolicy::Fixed +- +- +- +- 20 +- 10 +- +- +- +- +- +- +- +- 10 +- +- +- 8 +- +- +- +- +- Auto-Type typing delay: +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- autoTypeDelaySpinBox +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- Global auto-type shortcut +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- Auto-type character typing delay milliseconds +- +- +- ms +- +- +- +- +- +- 1000 +- +- +- 25 +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- Auto-type start delay milliseconds +- +- +- ms +- +- +- +- +- +- 100 +- +- +- 10000 +- +- +- 100 +- +- +- 500 +- +- +- +- +- +- +- Global Auto-Type shortcut: +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- autoTypeShortcutWidget +- +- +- +- +- +- +- Auto-Type start delay: +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- autoTypeStartDelaySpinBox +- +- +- +- +- +- +- Qt::Horizontal +- +- +- +- 0 +- 20 +- +- +- +- +- +- +- +- +- +- Qt::Vertical +- +- +- +- 20 +- 0 +- +- +- +- +- +- +- +- +- +- +- +- +- ShortcutWidget +- QLineEdit +-
autotype/ShortcutWidget.h
+-
+-
+- +- generalSettingsTabWidget +- scrollArea +- singleInstanceCheckBox +- launchAtStartup +- systrayMinimizeOnStartup +- minimizeAfterUnlockCheckBox +- rememberLastDatabasesCheckBox +- openPreviousDatabasesOnStartupCheckBox +- rememberLastKeyFilesCheckBox +- checkForUpdatesOnStartupCheckBox +- checkForUpdatesIncludeBetasCheckBox +- autoSaveAfterEveryChangeCheckBox +- autoSaveOnExitCheckBox +- autoSaveNonDataChangesCheckBox +- backupBeforeSaveCheckBox +- autoReloadOnChangeCheckBox +- useAtomicSavesCheckBox +- useGroupIconOnEntryCreationCheckBox +- minimizeOnOpenUrlCheckBox +- hideWindowOnCopyCheckBox +- minimizeOnCopyRadioButton +- dropToBackgroundOnCopyRadioButton +- faviconTimeoutSpinBox +- languageComboBox +- toolButtonStyleComboBox +- monospaceNotesCheckBox +- toolbarMovableCheckBox +- minimizeOnCloseCheckBox +- systrayShowCheckBox +- trayIconAppearance +- systrayMinimizeToTrayCheckBox +- resetSettingsButton +- autoTypeEntryTitleMatchCheckBox +- autoTypeEntryURLMatchCheckBox +- autoTypeAskCheckBox +- autoTypeShortcutWidget +- autoTypeStartDelaySpinBox +- autoTypeDelaySpinBox +- +- +- +-
+diff -urNr keepassxc-2.6.4-orig/src/gui/ApplicationSettingsWidget.h keepassxc-2.6.4-patched/src/gui/ApplicationSettingsWidget.h +--- keepassxc-2.6.4-orig/src/gui/ApplicationSettingsWidget.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/ApplicationSettingsWidget.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,77 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_SETTINGSWIDGET_H +-#define KEEPASSX_SETTINGSWIDGET_H +- +-#include "gui/EditWidget.h" +- +-namespace Ui +-{ +- class ApplicationSettingsWidgetGeneral; +- class ApplicationSettingsWidgetSecurity; +-} // namespace Ui +- +-class ISettingsPage +-{ +-public: +- virtual ~ISettingsPage() +- { +- } +- virtual QString name() = 0; +- virtual QIcon icon() = 0; +- virtual QWidget* createWidget() = 0; +- virtual void loadSettings(QWidget* widget) = 0; +- virtual void saveSettings(QWidget* widget) = 0; +-}; +- +-class ApplicationSettingsWidget : public EditWidget +-{ +- Q_OBJECT +- +-public: +- explicit ApplicationSettingsWidget(QWidget* parent = nullptr); +- ~ApplicationSettingsWidget(); +- void addSettingsPage(ISettingsPage* page); +- void loadSettings(); +- +-signals: +- void settingsReset(); +- +-private slots: +- void saveSettings(); +- void resetSettings(); +- void reject(); +- void autoSaveToggled(bool checked); +- void hideWindowOnCopyCheckBoxToggled(bool checked); +- void systrayToggled(bool checked); +- void rememberDatabasesToggled(bool checked); +- void checkUpdatesToggled(bool checked); +- +-private: +- QWidget* const m_secWidget; +- QWidget* const m_generalWidget; +- const QScopedPointer m_secUi; +- const QScopedPointer m_generalUi; +- Qt::Key m_globalAutoTypeKey; +- Qt::KeyboardModifiers m_globalAutoTypeModifiers; +- class ExtraPage; +- QList m_extraPages; +-}; +- +-#endif // KEEPASSX_SETTINGSWIDGET_H +diff -urNr keepassxc-2.6.4-orig/src/gui/ApplicationSettingsWidgetSecurity.ui keepassxc-2.6.4-patched/src/gui/ApplicationSettingsWidgetSecurity.ui +--- keepassxc-2.6.4-orig/src/gui/ApplicationSettingsWidgetSecurity.ui 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/ApplicationSettingsWidgetSecurity.ui 1970-01-01 01:00:00.000000000 +0100 +@@ -1,319 +0,0 @@ +- +- +- ApplicationSettingsWidgetSecurity +- +- +- +- 0 +- 0 +- 595 +- 567 +- +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- Timeouts +- +- +- +- +- +- false +- +- +- +- 0 +- 0 +- +- +- +- Clipboard clear seconds +- +- +- sec +- +- +- 1 +- +- +- 999 +- +- +- 10 +- +- +- +- +- +- +- Forget TouchID after inactivity of +- +- +- +- +- +- +- Qt::Horizontal +- +- +- +- 40 +- 20 +- +- +- +- +- +- +- +- false +- +- +- +- 0 +- 0 +- +- +- +- Touch ID inactivity reset +- +- +- min +- +- +- 1440 +- +- +- 30 +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- Lock databases after inactivity of +- +- +- +- +- +- +- false +- +- +- +- 0 +- 0 +- +- +- +- Database lock timeout seconds +- +- +- sec +- +- +- 10 +- +- +- 43200 +- +- +- 240 +- +- +- +- +- +- +- false +- +- +- +- 0 +- 0 +- +- +- +- min +- +- +- 1 +- +- +- 1440 +- +- +- 5 +- +- +- 10 +- +- +- +- +- +- +- Clear clipboard after +- +- +- +- +- +- +- Clear search query after +- +- +- +- +- +- +- +- +- +- Convenience +- +- +- +- +- +- Lock databases when session is locked or lid is closed +- +- +- +- +- +- +- Forget TouchID when session is locked or lid is closed +- +- +- +- +- +- +- Lock databases after minimizing the window +- +- +- +- +- +- +- Re-lock previously locked database after performing Auto-Type +- +- +- +- +- +- +- Require password repeat when it is visible +- +- +- +- +- +- +- Hide passwords when editing them +- +- +- +- +- +- +- Use placeholder for empty password fields +- +- +- +- +- +- +- Hide passwords in the entry preview panel +- +- +- +- +- +- +- Hide entry notes by default +- +- +- +- +- +- +- +- +- +- Privacy +- +- +- +- +- +- Use DuckDuckGo service to download website icons +- +- +- +- +- +- +- +- +- +- Qt::Vertical +- +- +- QSizePolicy::Expanding +- +- +- +- 20 +- 30 +- +- +- +- +- +- +- +- clearClipboardCheckBox +- clearClipboardSpinBox +- lockDatabaseIdleCheckBox +- lockDatabaseIdleSpinBox +- clearSearchCheckBox +- clearSearchSpinBox +- touchIDResetCheckBox +- touchIDResetSpinBox +- lockDatabaseOnScreenLockCheckBox +- touchIDResetOnScreenLockCheckBox +- lockDatabaseMinimizeCheckBox +- relockDatabaseAutoTypeCheckBox +- passwordsRepeatVisibleCheckBox +- passwordsHiddenCheckBox +- passwordShowDotsCheckBox +- passwordPreviewCleartextCheckBox +- hideNotesCheckBox +- fallbackToSearch +- +- +- +- +diff -urNr keepassxc-2.6.4-orig/src/gui/CategoryListWidget.cpp keepassxc-2.6.4-patched/src/gui/CategoryListWidget.cpp +--- keepassxc-2.6.4-orig/src/gui/CategoryListWidget.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/CategoryListWidget.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,279 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "CategoryListWidget.h" +-#include "ui_CategoryListWidget.h" +- +-#include +-#include +-#include +-#include +-#include +-#include +- +-CategoryListWidget::CategoryListWidget(QWidget* parent) +- : QWidget(parent) +- , m_itemDelegate(nullptr) +- , m_ui(new Ui::CategoryListWidget()) +-{ +- m_ui->setupUi(this); +- m_itemDelegate = new CategoryListWidgetDelegate(m_ui->categoryList); +- m_ui->categoryList->setItemDelegate(m_itemDelegate); +- +- connect(m_ui->categoryList, SIGNAL(currentRowChanged(int)), SLOT(emitCategoryChanged(int))); +- +- connect(m_ui->scrollUp, SIGNAL(clicked()), SLOT(scrollCategoriesUp())); +- connect(m_ui->scrollDown, SIGNAL(clicked()), SLOT(scrollCategoriesDown())); +- connect(m_ui->categoryList->verticalScrollBar(), SIGNAL(valueChanged(int)), SLOT(updateCategoryScrollButtons())); +- // clang-format off +- connect(m_ui->categoryList->verticalScrollBar(), SIGNAL(rangeChanged(int,int)), SLOT(updateCategoryScrollButtons())); +- // clang-format on +-} +- +-CategoryListWidget::~CategoryListWidget() +-{ +-} +- +-QSize CategoryListWidget::sizeHint() const +-{ +- QSize sizeHint = QWidget::sizeHint(); +- +- int width = m_ui->categoryList->width(); +- +- int min = minimumSizeHint().width(); +- if (width < min) { +- width = min; +- } +- sizeHint.setWidth(width); +- +- return sizeHint; +-} +- +-QSize CategoryListWidget::minimumSizeHint() const +-{ +- return QSize(m_itemDelegate->minWidth() + m_ui->categoryList->frameWidth() * 2, +- m_ui->categoryList->sizeHintForRow(0) * 2); +-} +- +-int CategoryListWidget::addCategory(const QString& labelText, const QIcon& icon) +-{ +- QListWidgetItem* item = new QListWidgetItem(m_ui->categoryList); +- item->setText(labelText); +- item->setIcon(icon); +- m_ui->categoryList->addItem(item); +- return m_ui->categoryList->count() - 1; +-} +- +-void CategoryListWidget::removeCategory(int index) +-{ +- m_ui->categoryList->removeItemWidget(m_ui->categoryList->item(index)); +-} +- +-int CategoryListWidget::currentCategory() +-{ +- return m_ui->categoryList->currentRow(); +-} +- +-void CategoryListWidget::setCurrentCategory(int index) +-{ +- m_ui->categoryList->setCurrentRow(index); +-} +- +-void CategoryListWidget::setCategoryHidden(int index, bool hidden) +-{ +- m_ui->categoryList->item(index)->setHidden(hidden); +-} +- +-bool CategoryListWidget::isCategoryHidden(int index) +-{ +- return m_ui->categoryList->item(index)->isHidden(); +-} +- +-void CategoryListWidget::showEvent(QShowEvent* event) +-{ +- QWidget::showEvent(event); +- updateCategoryScrollButtons(); +-} +- +-void CategoryListWidget::resizeEvent(QResizeEvent* event) +-{ +- auto newDelegate = new CategoryListWidgetDelegate(m_ui->categoryList); +- m_ui->categoryList->setItemDelegate(newDelegate); +- m_itemDelegate->deleteLater(); +- m_itemDelegate = newDelegate; +- +- QWidget::resizeEvent(event); +-} +- +-void CategoryListWidget::updateCategoryScrollButtons() +-{ +- m_ui->scrollUp->setEnabled(m_ui->categoryList->verticalScrollBar()->value() != 0); +- m_ui->scrollDown->setEnabled(m_ui->categoryList->verticalScrollBar()->value() +- != m_ui->categoryList->verticalScrollBar()->maximum()); +- +- m_ui->scrollUp->setVisible(m_ui->categoryList->verticalScrollBar()->maximum() > 0); +- m_ui->scrollDown->setVisible(m_ui->scrollUp->isVisible()); +-} +- +-void CategoryListWidget::scrollCategoriesUp() +-{ +- m_ui->categoryList->verticalScrollBar()->setValue(m_ui->categoryList->verticalScrollBar()->value() +- - m_ui->categoryList->verticalScrollBar()->pageStep()); +-} +- +-void CategoryListWidget::scrollCategoriesDown() +-{ +- m_ui->categoryList->verticalScrollBar()->setValue(m_ui->categoryList->verticalScrollBar()->value() +- + m_ui->categoryList->verticalScrollBar()->pageStep()); +-} +- +-void CategoryListWidget::emitCategoryChanged(int index) +-{ +- emit categoryChanged(index); +-} +- +-/* =============================================================================================== */ +- +-CategoryListWidgetDelegate::CategoryListWidgetDelegate(QListWidget* parent) +- : QStyledItemDelegate(parent) +- , m_listWidget(parent) +- , m_size(96, 96) +-{ +- m_size.setWidth(minWidth()); +- if (m_listWidget && m_listWidget->width() > m_size.width()) { +- m_size.setWidth(m_listWidget->width()); +- } +-} +- +-class IconSelectionCorrectedStyle : public QProxyStyle +-{ +-public: +- void drawPrimitive(PrimitiveElement element, +- const QStyleOption* option, +- QPainter* painter, +- const QWidget* widget) const override +- { +- painter->save(); +- if (widget && PE_PanelItemViewItem == element) { +- // Qt on Windows and the Fusion/Phantom base styles draw selection backgrounds only for +- // the actual text/icon bounding box, not over the full width of a list item. +- // State_On is relevant only for the Windows hack below. +- if (option->state & State_HasFocus || option->state & State_On) { +- painter->fillRect(option->rect, widget->palette().color(QPalette::Active, QPalette::Highlight)); +- } else if (option->state & State_Selected) { +- painter->fillRect(option->rect, widget->palette().color(QPalette::Inactive, QPalette::Highlight)); +- } +- } else if (PE_FrameFocusRect == element) { +- // don't draw the native focus rect +- } else { +- QProxyStyle::drawPrimitive(element, option, painter, widget); +- } +- +- painter->restore(); +- } +- +-#ifdef Q_OS_WIN +- void drawControl(ControlElement element, +- const QStyleOption* option, +- QPainter* painter, +- const QWidget* widget) const override +- { +- // Qt on Windows swallows State_HasFocus somewhere in its intestines, +- // so we abuse State_On here to indicate the selection focus and +- // hack into the text colour palette. Forgive me. +- if (QStyle::CE_ItemViewItem == element && option->state & State_HasFocus) { +- QStyleOptionViewItem newOpt(*qstyleoption_cast(option)); +- newOpt.state |= State_On; +- newOpt.palette.setColor(QPalette::All, QPalette::Text, widget->palette().color(QPalette::HighlightedText)); +- QProxyStyle::drawControl(element, &newOpt, painter, widget); +- return; +- } +- QProxyStyle::drawControl(element, option, painter, widget); +- } +-#endif +-}; +- +-void CategoryListWidgetDelegate::paint(QPainter* painter, +- const QStyleOptionViewItem& option, +- const QModelIndex& index) const +-{ +- QStyleOptionViewItem opt = option; +- initStyleOption(&opt, index); +- +- painter->save(); +- +- QIcon icon = opt.icon; +- QSize iconSize = opt.icon.actualSize(QSize(ICON_SIZE, ICON_SIZE)); +- opt.icon = QIcon(); +- opt.decorationAlignment = Qt::AlignHCenter | Qt::AlignVCenter; +- opt.decorationPosition = QStyleOptionViewItem::Top; +- opt.decorationSize = iconSize; +- +- QScopedPointer style(new IconSelectionCorrectedStyle()); +- style->drawControl(QStyle::CE_ItemViewItem, &opt, painter, opt.widget); +- +- QRect fontRect = painter->fontMetrics().boundingRect( +- QRect(0, 0, minWidth(), m_size.height()), Qt::AlignHCenter | Qt::AlignBottom | Qt::TextWordWrap, opt.text); +- +- int paddingTop = fontRect.height() < 30 ? 15 : 10; +- int left = opt.rect.left() + opt.rect.width() / 2 - iconSize.width() / 2; +- +- auto mode = QIcon::Normal; +- if ((opt.state & QStyle::State_Enabled) == 0) { +- mode = QIcon::Disabled; +- } else if (opt.state & QStyle::State_HasFocus) { +- mode = QIcon::Selected; +- } else if (opt.state & QStyle::State_Active) { +- mode = QIcon::Active; +- } +- painter->drawPixmap(left, opt.rect.top() + paddingTop, icon.pixmap(iconSize, mode)); +- +- painter->restore(); +-} +- +-int CategoryListWidgetDelegate::minWidth() const +-{ +- int c = m_listWidget->count(); +- int maxWidth = 0; +- +- for (int i = 0; i < c; ++i) { +- QFontMetrics fm(m_listWidget->font()); +- QRect fontRect = +- fm.boundingRect(QRect(0, 0, 0, 0), Qt::TextWordWrap | Qt::ElideNone, m_listWidget->item(i)->text()); +- +- if (fontRect.width() > maxWidth) { +- maxWidth = fontRect.width(); +- } +- } +- +- // add some padding +- maxWidth += 10; +- return maxWidth < m_size.height() ? m_size.height() : maxWidth; +-} +- +-QSize CategoryListWidgetDelegate::sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const +-{ +- Q_UNUSED(option); +- Q_UNUSED(index); +- +- int w = minWidth(); +- if (m_listWidget->width() > w) { +- w = m_listWidget->width(); +- } +- +- return {w, m_size.height()}; +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/CategoryListWidget.h keepassxc-2.6.4-patched/src/gui/CategoryListWidget.h +--- keepassxc-2.6.4-orig/src/gui/CategoryListWidget.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/CategoryListWidget.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,93 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_GUI_CATEGORYLISTWIDGET_H +-#define KEEPASSXC_GUI_CATEGORYLISTWIDGET_H +- +-#include +-#include +-#include +- +-class CategoryListWidgetDelegate; +-class QListWidget; +- +-namespace Ui +-{ +- class CategoryListWidget; +-} +- +-class CategoryListWidget : public QWidget +-{ +- Q_OBJECT +- +-public: +- CategoryListWidget(QWidget* parent = nullptr); +- ~CategoryListWidget(); +- +- int currentCategory(); +- void setCurrentCategory(int index); +- int addCategory(const QString& labelText, const QIcon& icon); +- void setCategoryHidden(int index, bool hidden); +- bool isCategoryHidden(int index); +- void removeCategory(int index); +- +-signals: +- void categoryChanged(int index); +- +-protected: +- void showEvent(QShowEvent* event) override; +- void resizeEvent(QResizeEvent* event) override; +- QSize sizeHint() const override; +- QSize minimumSizeHint() const override; +- +-protected slots: +- void updateCategoryScrollButtons(); +- void scrollCategoriesDown(); +- void scrollCategoriesUp(); +- void emitCategoryChanged(int index); +- +-private: +- QPointer m_itemDelegate; +- const QScopedPointer m_ui; +- +- Q_DISABLE_COPY(CategoryListWidget) +-}; +- +-/* =============================================================================================== */ +- +-class CategoryListWidgetDelegate : public QStyledItemDelegate +-{ +- Q_OBJECT +- +-public: +- explicit CategoryListWidgetDelegate(QListWidget* parent = nullptr); +- int minWidth() const; +- +-protected: +- void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override; +- QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const override; +- +-private: +- const int ICON_SIZE = 32; +- +- QPointer m_listWidget; +- QSize m_size; +- +- Q_DISABLE_COPY(CategoryListWidgetDelegate) +-}; +- +-#endif +diff -urNr keepassxc-2.6.4-orig/src/gui/CategoryListWidget.ui keepassxc-2.6.4-patched/src/gui/CategoryListWidget.ui +--- keepassxc-2.6.4-orig/src/gui/CategoryListWidget.ui 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/CategoryListWidget.ui 1970-01-01 01:00:00.000000000 +0100 +@@ -1,122 +0,0 @@ +- +- +- CategoryListWidget +- +- +- +- 0 +- 0 +- 256 +- 418 +- +- +- +- +- 0 +- 0 +- +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- 16777215 +- 15 +- +- +- +- +- +- +- Qt::UpArrow +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- Qt::ScrollBarAlwaysOff +- +- +- Qt::ScrollBarAlwaysOff +- +- +- QListView::Static +- +- +- QListView::TopToBottom +- +- +- false +- +- +- QListView::IconMode +- +- +- true +- +- +- true +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- 16777215 +- 15 +- +- +- +- +- +- +- Qt::DownArrow +- +- +- +- +- +- +- scrollUp +- categoryList +- scrollDown +- +- +- +- +diff -urNr keepassxc-2.6.4-orig/src/gui/Clipboard.cpp keepassxc-2.6.4-patched/src/gui/Clipboard.cpp +--- keepassxc-2.6.4-orig/src/gui/Clipboard.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/Clipboard.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,118 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "Clipboard.h" +- +-#include +-#include +-#include +-#include +- +-#include "core/Config.h" +- +-Clipboard* Clipboard::m_instance(nullptr); +-#ifdef Q_OS_MACOS +-QPointer Clipboard::m_pasteboard(nullptr); +-#endif +- +-Clipboard::Clipboard(QObject* parent) +- : QObject(parent) +- , m_timer(new QTimer(this)) +-{ +-#ifdef Q_OS_MACOS +- if (!m_pasteboard) { +- m_pasteboard = new MacPasteboard(); +- } +-#endif +- m_timer->setSingleShot(true); +- connect(m_timer, SIGNAL(timeout()), SLOT(clearClipboard())); +- connect(qApp, SIGNAL(aboutToQuit()), SLOT(clearCopiedText())); +-} +- +-void Clipboard::setText(const QString& text, bool clear) +-{ +- auto* clipboard = QApplication::clipboard(); +- if (!clipboard) { +- qWarning("Unable to access the clipboard."); +- return; +- } +- +- auto* mime = new QMimeData; +-#ifdef Q_OS_MACOS +- mime->setText(text); +- mime->setData("application/x-nspasteboard-concealed-type", text.toUtf8()); +- clipboard->setMimeData(mime, QClipboard::Clipboard); +-#else +- mime->setText(text); +-#ifdef Q_OS_LINUX +- mime->setData("x-kde-passwordManagerHint", QByteArrayLiteral("secret")); +-#endif +-#ifdef Q_OS_WIN +- mime->setData("ExcludeClipboardContentFromMonitorProcessing", QByteArrayLiteral("1")); +-#endif +- clipboard->setMimeData(mime, QClipboard::Clipboard); +- +- if (clipboard->supportsSelection()) { +- clipboard->setMimeData(mime, QClipboard::Selection); +- } +-#endif +- +- if (clear) { +- m_lastCopied = text; +- if (config()->get(Config::Security_ClearClipboard).toBool()) { +- int timeout = config()->get(Config::Security_ClearClipboardTimeout).toInt(); +- if (timeout > 0) { +- m_timer->start(timeout * 1000); +- } +- } +- } +-} +- +-void Clipboard::clearCopiedText() +-{ +- if (m_timer->isActive()) { +- m_timer->stop(); +- } +- +- clearClipboard(); +-} +- +-void Clipboard::clearClipboard() +-{ +- auto* clipboard = QApplication::clipboard(); +- if (!clipboard) { +- qWarning("Unable to access the clipboard."); +- return; +- } +- +- if (m_lastCopied == clipboard->text(QClipboard::Clipboard) +- || m_lastCopied == clipboard->text(QClipboard::Selection)) { +- setText("", false); +- } +- +- m_lastCopied.clear(); +-} +- +-Clipboard* Clipboard::instance() +-{ +- if (!m_instance) { +- m_instance = new Clipboard(qApp); +- } +- +- return m_instance; +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/Clipboard.h keepassxc-2.6.4-patched/src/gui/Clipboard.h +--- keepassxc-2.6.4-orig/src/gui/Clipboard.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/Clipboard.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,64 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_CLIPBOARD_H +-#define KEEPASSX_CLIPBOARD_H +- +-#include +-#ifdef Q_OS_MACOS +-#include "core/MacPasteboard.h" +-#include +-#endif +- +-class QTimer; +- +-class Clipboard : public QObject +-{ +- Q_OBJECT +- +-public: +- void setText(const QString& text, bool clear = true); +- +- static Clipboard* instance(); +- +-public slots: +- void clearCopiedText(); +- +-private slots: +- void clearClipboard(); +- +-private: +- explicit Clipboard(QObject* parent = nullptr); +- +- static Clipboard* m_instance; +- +- QTimer* m_timer; +-#ifdef Q_OS_MACOS +- // This object lives for the whole program lifetime and we cannot delete it on exit, +- // so ignore leak warnings. See https://bugreports.qt.io/browse/QTBUG-54832 +- static QPointer m_pasteboard; +-#endif +- QString m_lastCopied; +-}; +- +-inline Clipboard* clipboard() +-{ +- return Clipboard::instance(); +-} +- +-#endif // KEEPASSX_CLIPBOARD_H +diff -urNr keepassxc-2.6.4-orig/src/gui/CloneDialog.cpp keepassxc-2.6.4-patched/src/gui/CloneDialog.cpp +--- keepassxc-2.6.4-orig/src/gui/CloneDialog.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/CloneDialog.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,71 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "CloneDialog.h" +-#include "ui_CloneDialog.h" +- +-#include "config-keepassx.h" +-#include "core/Database.h" +-#include "core/Entry.h" +-#include "core/Resources.h" +-#include "crypto/Crypto.h" +-#include "gui/DatabaseWidget.h" +- +-CloneDialog::CloneDialog(DatabaseWidget* parent, Database* db, Entry* entry) +- : QDialog(parent) +- , m_ui(new Ui::CloneDialog()) +-{ +- m_db = db; +- m_entry = entry; +- m_parent = parent; +- +- m_ui->setupUi(this); +- this->setFixedSize(this->sizeHint()); +- +- setAttribute(Qt::WA_DeleteOnClose); +- +- connect(m_ui->buttonBox, SIGNAL(rejected()), SLOT(close())); +- connect(m_ui->buttonBox, SIGNAL(accepted()), SLOT(cloneEntry())); +-} +- +-void CloneDialog::cloneEntry() +-{ +- Entry::CloneFlags flags = Entry::CloneNewUuid | Entry::CloneResetTimeInfo; +- +- if (m_ui->titleClone->isChecked()) { +- flags |= Entry::CloneRenameTitle; +- } +- +- if (m_ui->referencesClone->isChecked()) { +- flags |= Entry::CloneUserAsRef; +- flags |= Entry::ClonePassAsRef; +- } +- +- if (m_ui->historyClone->isChecked()) { +- flags |= Entry::CloneIncludeHistory; +- } +- +- Entry* entry = m_entry->clone(flags); +- entry->setGroup(m_entry->group()); +- +- m_parent->refreshSearch(); +- close(); +-} +- +-CloneDialog::~CloneDialog() +-{ +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/CloneDialog.h keepassxc-2.6.4-patched/src/gui/CloneDialog.h +--- keepassxc-2.6.4-orig/src/gui/CloneDialog.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/CloneDialog.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,52 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_CLONEDIALOG_H +-#define KEEPASSX_CLONEDIALOG_H +- +-#include "core/Database.h" +-#include "core/Entry.h" +-#include "gui/DatabaseWidget.h" +-#include +-#include +- +-namespace Ui +-{ +- class CloneDialog; +-} +- +-class CloneDialog : public QDialog +-{ +- Q_OBJECT +- +-public: +- explicit CloneDialog(DatabaseWidget* parent = nullptr, Database* db = nullptr, Entry* entry = nullptr); +- ~CloneDialog(); +- +-private: +- QScopedPointer m_ui; +- +-private slots: +- void cloneEntry(); +- +-protected: +- Database* m_db; +- Entry* m_entry; +- DatabaseWidget* m_parent; +-}; +- +-#endif // KEEPASSX_CLONEDIALOG_H +diff -urNr keepassxc-2.6.4-orig/src/gui/CloneDialog.ui keepassxc-2.6.4-patched/src/gui/CloneDialog.ui +--- keepassxc-2.6.4-orig/src/gui/CloneDialog.ui 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/CloneDialog.ui 1970-01-01 01:00:00.000000000 +0100 +@@ -1,72 +0,0 @@ +- +- +- CloneDialog +- +- +- +- 0 +- 0 +- 347 +- 136 +- +- +- +- Clone Options +- +- +- +- +- +- +- +- Append ' - Clone' to title +- +- +- true +- +- +- +- +- +- +- Replace username and password with references +- +- +- +- +- +- +- Copy history +- +- +- true +- +- +- +- +- +- +- +- +- Qt::Vertical +- +- +- +- 20 +- 40 +- +- +- +- +- +- +- +- QDialogButtonBox::Cancel|QDialogButtonBox::Ok +- +- +- +- +- +- +- +- +diff -urNr keepassxc-2.6.4-orig/src/gui/csvImport/CsvImportWidget.cpp keepassxc-2.6.4-patched/src/gui/csvImport/CsvImportWidget.cpp +--- keepassxc-2.6.4-orig/src/gui/csvImport/CsvImportWidget.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/csvImport/CsvImportWidget.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,342 +0,0 @@ +-/* +- * Copyright (C) 2016 Enrico Mariotti +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "CsvImportWidget.h" +-#include "ui_CsvImportWidget.h" +- +-#include +-#include +-#include +- +-#include "core/Clock.h" +-#include "format/KeePass2Writer.h" +-#include "gui/MessageBox.h" +-#include "gui/MessageWidget.h" +-#include "totp/totp.h" +- +-// I wanted to make the CSV import GUI future-proof, so if one day you need a new field, +-// all you have to do is add a field to m_columnHeader, and the GUI will follow: +-// dynamic generation of comboBoxes, labels, placement and so on. Try it for immense fun! +- +-CsvImportWidget::CsvImportWidget(QWidget* parent) +- : QWidget(parent) +- , m_ui(new Ui::CsvImportWidget()) +- , m_parserModel(new CsvParserModel(this)) +- , m_comboModel(new QStringListModel(this)) +- , m_columnHeader(QStringList() << QObject::tr("Group") << QObject::tr("Title") << QObject::tr("Username") +- << QObject::tr("Password") << QObject::tr("URL") << QObject::tr("Notes") +- << QObject::tr("TOTP") << QObject::tr("Icon") << QObject::tr("Last Modified") +- << QObject::tr("Created")) +- , m_fieldSeparatorList(QStringList() << "," +- << ";" +- << "-" +- << ":" +- << "." +- << "\t") +-{ +- m_ui->setupUi(this); +- +- m_ui->tableViewFields->setSelectionMode(QAbstractItemView::NoSelection); +- m_ui->tableViewFields->setFocusPolicy(Qt::NoFocus); +- m_ui->messageWidget->setHidden(true); +- +- m_combos << m_ui->groupCombo << m_ui->titleCombo << m_ui->usernameCombo << m_ui->passwordCombo << m_ui->urlCombo +- << m_ui->notesCombo << m_ui->totpCombo << m_ui->iconCombo << m_ui->lastModifiedCombo << m_ui->createdCombo; +- +- for (auto combo : m_combos) { +- combo->setModel(m_comboModel); +- connect(combo, SIGNAL(currentIndexChanged(int)), SLOT(comboChanged(int))); +- } +- +- m_parserModel->setHeaderLabels(m_columnHeader); +- m_ui->tableViewFields->setModel(m_parserModel); +- +- connect(m_ui->spinBoxSkip, SIGNAL(valueChanged(int)), SLOT(skippedChanged(int))); +- connect(m_ui->comboBoxCodec, SIGNAL(currentIndexChanged(int)), SLOT(parse())); +- connect(m_ui->comboBoxTextQualifier, SIGNAL(currentIndexChanged(int)), SLOT(parse())); +- connect(m_ui->comboBoxComment, SIGNAL(currentIndexChanged(int)), SLOT(parse())); +- connect(m_ui->comboBoxFieldSeparator, SIGNAL(currentIndexChanged(int)), SLOT(parse())); +- connect(m_ui->checkBoxBackslash, SIGNAL(toggled(bool)), SLOT(parse())); +- connect(m_ui->checkBoxFieldNames, SIGNAL(toggled(bool)), SLOT(updatePreview())); +- +- connect(m_ui->buttonBox, SIGNAL(accepted()), this, SLOT(writeDatabase())); +- connect(m_ui->buttonBox, SIGNAL(rejected()), this, SLOT(reject())); +-} +- +-void CsvImportWidget::comboChanged(int index) +-{ +- // this line is the one that actually updates GUI table +- m_parserModel->mapColumns(index, m_combos.indexOf(qobject_cast(sender()))); +- updateTableview(); +-} +- +-void CsvImportWidget::skippedChanged(int rows) +-{ +- m_parserModel->setSkippedRows(rows); +- updateTableview(); +-} +- +-CsvImportWidget::~CsvImportWidget() +-{ +-} +- +-void CsvImportWidget::configParser() +-{ +- m_parserModel->setBackslashSyntax(m_ui->checkBoxBackslash->isChecked()); +- m_parserModel->setComment(m_ui->comboBoxComment->currentText().at(0)); +- m_parserModel->setTextQualifier(m_ui->comboBoxTextQualifier->currentText().at(0)); +- m_parserModel->setCodec(m_ui->comboBoxCodec->currentText()); +- m_parserModel->setFieldSeparator(m_fieldSeparatorList.at(m_ui->comboBoxFieldSeparator->currentIndex()).at(0)); +-} +- +-void CsvImportWidget::updateTableview() +-{ +- m_ui->tableViewFields->resizeRowsToContents(); +- m_ui->tableViewFields->resizeColumnsToContents(); +- +- for (int c = 0; c < m_ui->tableViewFields->horizontalHeader()->count(); ++c) { +- m_ui->tableViewFields->horizontalHeader()->setSectionResizeMode(c, QHeaderView::Stretch); +- } +-} +- +-void CsvImportWidget::updatePreview() +-{ +- int minSkip = 0; +- if (m_ui->checkBoxFieldNames->isChecked()) { +- minSkip = 1; +- } +- m_ui->labelSizeRowsCols->setText(m_parserModel->getFileInfo()); +- m_ui->spinBoxSkip->setRange(minSkip, qMax(minSkip, m_parserModel->rowCount() - 1)); +- m_ui->spinBoxSkip->setValue(minSkip); +- +- QStringList list(tr("Not Present")); +- for (int i = 1; i < m_parserModel->getCsvCols(); ++i) { +- if (m_ui->checkBoxFieldNames->isChecked()) { +- auto columnName = m_parserModel->getCsvTable().at(0).at(i); +- if (columnName.isEmpty()) { +- list << QString(tr("Column %1").arg(i)); +- } else { +- list << columnName; +- } +- } else { +- list << QString(tr("Column %1").arg(i)); +- } +- } +- m_comboModel->setStringList(list); +- +- int j = 1; +- for (QComboBox* b : m_combos) { +- if (j < m_parserModel->getCsvCols()) { +- b->setCurrentIndex(j); +- } else { +- b->setCurrentIndex(0); +- } +- ++j; +- } +-} +- +-void CsvImportWidget::load(const QString& filename, Database* const db) +-{ +- // QApplication::processEvents(); +- m_db = db; +- m_parserModel->setFilename(filename); +- m_ui->labelFilename->setText(filename); +- Group* group = m_db->rootGroup(); +- group->setUuid(QUuid::createUuid()); +- group->setNotes(tr("Imported from CSV file").append("\n").append(tr("Original data: ")) + filename); +- parse(); +-} +- +-void CsvImportWidget::parse() +-{ +- configParser(); +- QApplication::setOverrideCursor(Qt::WaitCursor); +- // QApplication::processEvents(); +- bool good = m_parserModel->parse(); +- updatePreview(); +- QApplication::restoreOverrideCursor(); +- if (!good) { +- m_ui->messageWidget->showMessage(tr("Error(s) detected in CSV file!").append("\n").append(formatStatusText()), +- MessageWidget::Warning); +- } else { +- m_ui->messageWidget->setHidden(true); +- } +-} +- +-QString CsvImportWidget::formatStatusText() const +-{ +- QString text = m_parserModel->getStatus(); +- int items = text.count('\n'); +- if (items > 2) { +- return text.section('\n', 0, 1).append("\n").append(tr("[%n more message(s) skipped]", "", items - 2)); +- } +- if (items == 1) { +- text.append(QString("\n")); +- } +- return text; +-} +- +-void CsvImportWidget::writeDatabase() +-{ +- setRootGroup(); +- for (int r = 0; r < m_parserModel->rowCount(); ++r) { +- // use validity of second column as a GO/NOGO for all others fields +- if (not m_parserModel->data(m_parserModel->index(r, 1)).isValid()) { +- continue; +- } +- Entry* entry = new Entry(); +- entry->setUuid(QUuid::createUuid()); +- entry->setGroup(splitGroups(m_parserModel->data(m_parserModel->index(r, 0)).toString())); +- entry->setTitle(m_parserModel->data(m_parserModel->index(r, 1)).toString()); +- entry->setUsername(m_parserModel->data(m_parserModel->index(r, 2)).toString()); +- entry->setPassword(m_parserModel->data(m_parserModel->index(r, 3)).toString()); +- entry->setUrl(m_parserModel->data(m_parserModel->index(r, 4)).toString()); +- entry->setNotes(m_parserModel->data(m_parserModel->index(r, 5)).toString()); +- +- if (m_parserModel->data(m_parserModel->index(r, 6)).isValid()) { +- auto totp = Totp::parseSettings(m_parserModel->data(m_parserModel->index(r, 6)).toString()); +- entry->setTotp(totp); +- } +- +- bool ok; +- int icon = m_parserModel->data(m_parserModel->index(r, 7)).toInt(&ok); +- if (ok) { +- entry->setIcon(icon); +- } +- +- TimeInfo timeInfo; +- if (m_parserModel->data(m_parserModel->index(r, 8)).isValid()) { +- auto datetime = m_parserModel->data(m_parserModel->index(r, 8)).toString(); +- if (datetime.contains(QRegularExpression("^\\d+$"))) { +- timeInfo.setLastModificationTime(Clock::datetimeUtc(datetime.toLongLong() * 1000)); +- } else { +- auto lastModified = QDateTime::fromString(datetime, Qt::ISODate); +- if (lastModified.isValid()) { +- timeInfo.setLastModificationTime(lastModified); +- } +- } +- } +- if (m_parserModel->data(m_parserModel->index(r, 9)).isValid()) { +- auto datetime = m_parserModel->data(m_parserModel->index(r, 9)).toString(); +- if (datetime.contains(QRegularExpression("^\\d+$"))) { +- timeInfo.setCreationTime(Clock::datetimeUtc(datetime.toLongLong() * 1000)); +- } else { +- auto created = QDateTime::fromString(datetime, Qt::ISODate); +- if (created.isValid()) { +- timeInfo.setCreationTime(created); +- } +- } +- } +- entry->setTimeInfo(timeInfo); +- } +- QBuffer buffer; +- buffer.open(QBuffer::ReadWrite); +- +- KeePass2Writer writer; +- writer.writeDatabase(&buffer, m_db); +- if (writer.hasError()) { +- MessageBox::warning(this, +- tr("Error"), +- tr("CSV import: writer has errors:\n%1").arg(writer.errorString()), +- MessageBox::Ok, +- MessageBox::Ok); +- } +- emit editFinished(true); +-} +- +-void CsvImportWidget::setRootGroup() +-{ +- QString groupLabel; +- QStringList groupList; +- bool is_root = false; +- bool is_empty = false; +- bool is_label = false; +- +- for (int r = 0; r < m_parserModel->rowCount(); ++r) { +- // use validity of second column as a GO/NOGO for all others fields +- if (not m_parserModel->data(m_parserModel->index(r, 1)).isValid()) { +- continue; +- } +- groupLabel = m_parserModel->data(m_parserModel->index(r, 0)).toString(); +- // check if group name is either "root", "" (empty) or some other label +- groupList = groupLabel.split("/", QString::SkipEmptyParts); +- if (groupList.isEmpty()) { +- is_empty = true; +- } else if (not groupList.first().compare("Root", Qt::CaseSensitive)) { +- is_root = true; +- } else if (not groupLabel.compare("")) { +- is_empty = true; +- } else { +- is_label = true; +- } +- +- groupList.clear(); +- } +- +- if ((is_empty and is_root) or (is_label and not is_empty and is_root)) { +- m_db->rootGroup()->setName("CSV IMPORTED"); +- } else { +- m_db->rootGroup()->setName("Root"); +- } +-} +- +-Group* CsvImportWidget::splitGroups(const QString& label) +-{ +- // extract group names from nested path provided in "label" +- Group* current = m_db->rootGroup(); +- if (label.isEmpty()) { +- return current; +- } +- +- QStringList groupList = label.split("/", QString::SkipEmptyParts); +- // avoid the creation of a subgroup with the same name as Root +- if (m_db->rootGroup()->name() == "Root" && groupList.first() == "Root") { +- groupList.removeFirst(); +- } +- +- for (const QString& groupName : groupList) { +- Group* children = hasChildren(current, groupName); +- if (children == nullptr) { +- Group* brandNew = new Group(); +- brandNew->setParent(current); +- brandNew->setName(groupName); +- brandNew->setUuid(QUuid::createUuid()); +- current = brandNew; +- } else { +- Q_ASSERT(children != nullptr); +- current = children; +- } +- } +- return current; +-} +- +-Group* CsvImportWidget::hasChildren(Group* current, const QString& groupName) +-{ +- // returns the group whose name is "groupName" and is child of "current" group +- for (Group* group : current->children()) { +- if (group->name() == groupName) { +- return group; +- } +- } +- return nullptr; +-} +- +-void CsvImportWidget::reject() +-{ +- emit editFinished(false); +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/csvImport/CsvImportWidget.h keepassxc-2.6.4-patched/src/gui/csvImport/CsvImportWidget.h +--- keepassxc-2.6.4-orig/src/gui/csvImport/CsvImportWidget.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/csvImport/CsvImportWidget.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,76 +0,0 @@ +-/* +- * Copyright (C) 2016 Enrico Mariotti +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_CSVIMPORTWIDGET_H +-#define KEEPASSX_CSVIMPORTWIDGET_H +- +-#include +-#include +-#include +-#include +-#include +-#include +- +-#include "core/Metadata.h" +-#include "gui/csvImport/CsvParserModel.h" +-#include "keys/PasswordKey.h" +- +-namespace Ui +-{ +- class CsvImportWidget; +-} +- +-class CsvImportWidget : public QWidget +-{ +- Q_OBJECT +- +-public: +- explicit CsvImportWidget(QWidget* parent = nullptr); +- ~CsvImportWidget(); +- void load(const QString& filename, Database* const db); +- +-signals: +- void editFinished(bool accepted); +- +-private slots: +- void parse(); +- void comboChanged(int index); +- void skippedChanged(int rows); +- void writeDatabase(); +- void updatePreview(); +- void setRootGroup(); +- void reject(); +- +-private: +- Q_DISABLE_COPY(CsvImportWidget) +- const QScopedPointer m_ui; +- CsvParserModel* const m_parserModel; +- QStringListModel* const m_comboModel; +- QList m_combos; +- Database* m_db; +- +- const QStringList m_columnHeader; +- QStringList m_fieldSeparatorList; +- void configParser(); +- void updateTableview(); +- Group* splitGroups(const QString& label); +- Group* hasChildren(Group* current, const QString& groupName); +- QString formatStatusText() const; +-}; +- +-#endif // KEEPASSX_CSVIMPORTWIDGET_H +diff -urNr keepassxc-2.6.4-orig/src/gui/csvImport/CsvImportWidget.ui keepassxc-2.6.4-patched/src/gui/csvImport/CsvImportWidget.ui +--- keepassxc-2.6.4-orig/src/gui/csvImport/CsvImportWidget.ui 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/csvImport/CsvImportWidget.ui 1970-01-01 01:00:00.000000000 +0100 +@@ -1,764 +0,0 @@ +- +- +- CsvImportWidget +- +- +- +- 0 +- 0 +- 788 +- 530 +- +- +- +- +- +- +- +- +- +- +- +- +- Qt::ScrollBarAlwaysOff +- +- +- true +- +- +- +- +- 0 +- 0 +- 753 +- 615 +- +- +- +- +- +- +- +- 11 +- 75 +- true +- +- +- +- Import CSV fields +- +- +- +- +- +- +- +- +- filename +- +- +- +- +- +- +- Qt::Horizontal +- +- +- +- 40 +- 20 +- +- +- +- +- +- +- +- size, rows, columns +- +- +- +- +- +- +- +- +- +- +- +- 75 +- true +- +- +- +- Column Association +- +- +- +- +- +- +- +- +- +- +- +- 50 +- false +- +- +- +- Password +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- 2 +- +- +- +- +- +- +- +- 50 +- false +- +- +- +- Username +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- 2 +- +- +- +- +- +- +- +- +- +- +- +- +- +- 50 +- false +- +- +- +- Title +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- 2 +- +- +- +- +- +- +- +- +- +- +- 50 +- false +- +- +- +- Group +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- 2 +- +- +- +- +- +- +- +- 50 +- false +- +- +- +- URL +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- 2 +- +- +- +- +- +- +- +- +- +- +- 50 +- false +- +- +- +- Notes +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- 2 +- +- +- +- +- +- +- +- +- +- +- 50 +- false +- +- +- +- TOTP +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- 2 +- +- +- +- +- +- +- +- +- +- +- +- +- +- 50 +- false +- +- +- +- Created +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- 2 +- +- +- +- +- +- +- +- 50 +- false +- +- +- +- Last Modified +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- 2 +- +- +- +- +- +- +- +- +- +- +- 50 +- false +- +- +- +- Icon +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- 2 +- +- +- +- +- +- +- +- +- +- +- +- Qt::Vertical +- +- +- +- 20 +- 40 +- +- +- +- +- +- +- +- +- +- +- +- 75 +- true +- +- +- +- Encoding +- +- +- +- +- +- +- 50 +- false +- +- +- +- Codec +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- +- +- +- +- +- 50 +- false +- +- +- +- Codec +- +- +- false +- +- +- UTF-8 +- +- +- +- UTF-8 +- +- +- +- +- Windows-1252 +- +- +- +- +- UTF-16 +- +- +- +- +- UTF-16LE +- +- +- +- +- +- +- +- +- 50 +- false +- +- +- +- Text is qualified by +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- +- +- +- +- +- 50 +- false +- +- +- +- Text qualification +- +- +- false +- +- +- " +- +- +- +- " +- +- +- +- +- ' +- +- +- +- +- : +- +- +- +- +- . +- +- +- +- +- | +- +- +- +- +- +- +- +- +- 50 +- false +- +- +- +- Fields are separated by +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- +- +- +- +- +- 50 +- false +- +- +- +- Field separation +- +- +- false +- +- +- , +- +- +- +- , +- +- +- +- +- ; +- +- +- +- +- - +- +- +- +- +- : +- +- +- +- +- . +- +- +- +- +- TAB (\t) +- +- +- +- +- +- +- +- +- 50 +- false +- +- +- +- Comments start with +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- +- +- +- +- +- 50 +- false +- +- +- +- Comments start with +- +- +- false +- +- +- # +- +- +- +- # +- +- +- +- +- ; +- +- +- +- +- : +- +- +- +- +- @ +- +- +- +- +- +- +- +- +- 50 +- false +- +- +- +- Header lines skipped +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- +- +- +- +- +- +- +- 50 +- false +- +- +- +- Number of header lines to discard +- +- +- +- +- +- +- Qt::Horizontal +- +- +- +- 122 +- 20 +- +- +- +- +- +- +- +- +- +- +- 50 +- false +- +- +- +- First line has field names +- +- +- +- +- +- +- +- 50 +- false +- +- +- +- Consider '\' an escape character +- +- +- +- +- +- +- +- +- +- Qt::Horizontal +- +- +- +- 40 +- 20 +- +- +- +- +- +- +- +- +- +- +- 75 +- true +- +- +- +- Preview +- +- +- false +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- 0 +- 300 +- +- +- +- +- 50 +- false +- +- +- +- CSV import preview +- +- +- false +- +- +- true +- +- +- +- +- +- +- +- +- +- +- +- +- +- QDialogButtonBox::Cancel|QDialogButtonBox::Ok +- +- +- false +- +- +- +- +- +- +- +- MessageWidget +- QWidget +-
gui/MessageWidget.h
+- 1 +-
+-
+- +- scrollArea +- groupCombo +- titleCombo +- usernameCombo +- passwordCombo +- comboBoxCodec +- comboBoxTextQualifier +- comboBoxFieldSeparator +- comboBoxComment +- spinBoxSkip +- checkBoxFieldNames +- checkBoxBackslash +- tableViewFields +- +- +- +-
+diff -urNr keepassxc-2.6.4-orig/src/gui/csvImport/CsvImportWizard.cpp keepassxc-2.6.4-patched/src/gui/csvImport/CsvImportWizard.cpp +--- keepassxc-2.6.4-orig/src/gui/csvImport/CsvImportWizard.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/csvImport/CsvImportWizard.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,48 +0,0 @@ +-/* +- * Copyright (C) 2016 Enrico Mariotti +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "CsvImportWizard.h" +- +-#include +-#include +- +-#include "gui/MessageBox.h" +- +-CsvImportWizard::CsvImportWizard(QWidget* parent) +- : DialogyWidget(parent) +-{ +- m_layout = new QGridLayout(this); +- m_layout->addWidget(m_parse = new CsvImportWidget(this), 0, 0); +- +- connect(m_parse, SIGNAL(editFinished(bool)), this, SLOT(parseFinished(bool))); +-} +- +-CsvImportWizard::~CsvImportWizard() +-{ +-} +- +-void CsvImportWizard::load(const QString& filename, Database* database) +-{ +- m_db = database; +- m_parse->load(filename, database); +-} +- +-void CsvImportWizard::parseFinished(bool accepted) +-{ +- emit importFinished(accepted); +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/csvImport/CsvImportWizard.h keepassxc-2.6.4-patched/src/gui/csvImport/CsvImportWizard.h +--- keepassxc-2.6.4-orig/src/gui/csvImport/CsvImportWizard.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/csvImport/CsvImportWizard.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,53 +0,0 @@ +-/* +- * Copyright (C) 2016 Enrico Mariotti +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_CSVIMPORTWIZARD_H +-#define KEEPASSX_CSVIMPORTWIZARD_H +- +-#include "CsvImportWidget.h" +- +-#include +-#include +- +-#include "core/Database.h" +-#include "gui/DialogyWidget.h" +- +-class CsvImportWidget; +- +-class CsvImportWizard : public DialogyWidget +-{ +- Q_OBJECT +- +-public: +- explicit CsvImportWizard(QWidget* parent = nullptr); +- ~CsvImportWizard() override; +- void load(const QString& filename, Database* database); +- +-signals: +- void importFinished(bool accepted); +- +-private slots: +- void parseFinished(bool accepted); +- +-private: +- QPointer m_db; +- CsvImportWidget* m_parse; +- QGridLayout* m_layout; +-}; +- +-#endif // KEEPASSX_CSVIMPORTWIZARD_H +diff -urNr keepassxc-2.6.4-orig/src/gui/csvImport/CsvParserModel.cpp keepassxc-2.6.4-patched/src/gui/csvImport/CsvParserModel.cpp +--- keepassxc-2.6.4-orig/src/gui/csvImport/CsvParserModel.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/csvImport/CsvParserModel.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,146 +0,0 @@ +-/* +- * Copyright (C) 2016 Enrico Mariotti +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "CsvParserModel.h" +- +-#include +- +-CsvParserModel::CsvParserModel(QObject* parent) +- : QAbstractTableModel(parent) +- , m_skipped(0) +-{ +-} +- +-CsvParserModel::~CsvParserModel() +-{ +-} +- +-void CsvParserModel::setFilename(const QString& filename) +-{ +- m_filename = filename; +-} +- +-QString CsvParserModel::getFileInfo() +-{ +- QString a(tr("%1, %2, %3", "file info: bytes, rows, columns") +- .arg(tr("%n byte(s)", nullptr, getFileSize()), +- tr("%n row(s)", nullptr, getCsvRows()), +- tr("%n column(s)", nullptr, qMax(0, getCsvCols() - 1)))); +- return a; +-} +- +-bool CsvParserModel::parse() +-{ +- bool r; +- beginResetModel(); +- m_columnMap.clear(); +- if (CsvParser::isFileLoaded()) { +- r = CsvParser::reparse(); +- } else { +- QFile csv(m_filename); +- r = CsvParser::parse(&csv); +- } +- for (int i = 0; i < columnCount(); ++i) { +- m_columnMap.insert(i, 0); +- } +- addEmptyColumn(); +- endResetModel(); +- return r; +-} +- +-void CsvParserModel::addEmptyColumn() +-{ +- for (int i = 0; i < m_table.size(); ++i) { +- CsvRow r = m_table.at(i); +- r.prepend(QString("")); +- m_table.replace(i, r); +- } +-} +- +-void CsvParserModel::mapColumns(int csvColumn, int dbColumn) +-{ +- if ((csvColumn < 0) || (dbColumn < 0)) { +- return; +- } +- beginResetModel(); +- if (csvColumn >= getCsvCols()) { +- m_columnMap[dbColumn] = 0; // map to the empty column +- } else { +- m_columnMap[dbColumn] = csvColumn; +- } +- endResetModel(); +-} +- +-void CsvParserModel::setSkippedRows(int skipped) +-{ +- m_skipped = skipped; +- QModelIndex topLeft = createIndex(skipped, 0); +- QModelIndex bottomRight = createIndex(m_skipped + rowCount(), columnCount()); +- emit dataChanged(topLeft, bottomRight); +- emit layoutChanged(); +-} +- +-void CsvParserModel::setHeaderLabels(const QStringList& labels) +-{ +- m_columnHeader = labels; +-} +- +-int CsvParserModel::rowCount(const QModelIndex& parent) const +-{ +- if (parent.isValid()) { +- return 0; +- } +- return getCsvRows(); +-} +- +-int CsvParserModel::columnCount(const QModelIndex& parent) const +-{ +- if (parent.isValid()) { +- return 0; +- } +- return m_columnHeader.size(); +-} +- +-QVariant CsvParserModel::data(const QModelIndex& index, int role) const +-{ +- if ((index.column() >= m_columnHeader.size()) || (index.row() + m_skipped >= rowCount()) || !index.isValid()) { +- return QVariant(); +- } +- if (role == Qt::DisplayRole) { +- return m_table.at(index.row() + m_skipped).at(m_columnMap[index.column()]); +- } +- return QVariant(); +-} +- +-QVariant CsvParserModel::headerData(int section, Qt::Orientation orientation, int role) const +-{ +- if (role == Qt::DisplayRole) { +- if (orientation == Qt::Horizontal) { +- if ((section < 0) || (section >= m_columnHeader.size())) { +- return QVariant(); +- } +- return m_columnHeader.at(section); +- } else if (orientation == Qt::Vertical) { +- if (section + m_skipped >= rowCount()) { +- return QVariant(); +- } +- return QString::number(section + 1); +- } +- } +- return QVariant(); +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/csvImport/CsvParserModel.h keepassxc-2.6.4-patched/src/gui/csvImport/CsvParserModel.h +--- keepassxc-2.6.4-orig/src/gui/csvImport/CsvParserModel.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/csvImport/CsvParserModel.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,60 +0,0 @@ +-/* +- * Copyright (C) 2016 Enrico Mariotti +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_CSVPARSERMODEL_H +-#define KEEPASSX_CSVPARSERMODEL_H +- +-#include +-#include +- +-#include "core/CsvParser.h" +-#include "core/Group.h" +- +-class CsvParserModel : public QAbstractTableModel, public CsvParser +-{ +- Q_OBJECT +- +-public: +- explicit CsvParserModel(QObject* parent = nullptr); +- ~CsvParserModel(); +- void setFilename(const QString& filename); +- QString getFileInfo(); +- bool parse(); +- +- void setHeaderLabels(const QStringList& labels); +- void mapColumns(int csvColumn, int dbColumn); +- +- int rowCount(const QModelIndex& parent = QModelIndex()) const override; +- int columnCount(const QModelIndex& parent = QModelIndex()) const override; +- QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; +- QVariant headerData(int section, Qt::Orientation orientation, int role) const override; +- +-public slots: +- void setSkippedRows(int skipped); +- +-private: +- int m_skipped; +- QString m_filename; +- QStringList m_columnHeader; +- // first column of model must be empty (aka combobox row "Not present in CSV file") +- void addEmptyColumn(); +- // mapping CSV columns to keepassx columns +- QMap m_columnMap; +-}; +- +-#endif // KEEPASSX_CSVPARSERMODEL_H +diff -urNr keepassxc-2.6.4-orig/src/gui/databasekey/KeyComponentWidget.cpp keepassxc-2.6.4-patched/src/gui/databasekey/KeyComponentWidget.cpp +--- keepassxc-2.6.4-orig/src/gui/databasekey/KeyComponentWidget.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/databasekey/KeyComponentWidget.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,201 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "KeyComponentWidget.h" +-#include "ui_KeyComponentWidget.h" +- +-#include +-#include +- +-KeyComponentWidget::KeyComponentWidget(QWidget* parent) +- : KeyComponentWidget({}, parent) +-{ +-} +- +-KeyComponentWidget::KeyComponentWidget(const QString& name, QWidget* parent) +- : QWidget(parent) +- , m_ui(new Ui::KeyComponentWidget()) +-{ +- m_ui->setupUi(this); +- +- connect(m_ui->addButton, SIGNAL(clicked(bool)), SIGNAL(componentAddRequested())); +- connect(m_ui->changeButton, SIGNAL(clicked(bool)), SIGNAL(componentEditRequested())); +- connect(m_ui->removeButton, SIGNAL(clicked(bool)), SIGNAL(componentRemovalRequested())); +- connect(m_ui->cancelButton, SIGNAL(clicked(bool)), SLOT(cancelEdit())); +- +- connect(m_ui->stackedWidget, SIGNAL(currentChanged(int)), SLOT(resetComponentEditWidget())); +- +- connect(this, SIGNAL(nameChanged(QString)), SLOT(updateComponentName(QString))); +- connect(this, SIGNAL(descriptionChanged(QString)), SLOT(updateComponentDescription(QString))); +- connect(this, SIGNAL(componentAddRequested()), SLOT(doAdd())); +- connect(this, SIGNAL(componentEditRequested()), SLOT(doEdit())); +- connect(this, SIGNAL(componentRemovalRequested()), SLOT(doRemove())); +- connect(this, SIGNAL(componentAddChanged(bool)), SLOT(updateAddStatus(bool))); +- +- bool prev = blockSignals(true); +- setComponentName(name); +- blockSignals(prev); +- +- prev = m_ui->stackedWidget->blockSignals(true); +- m_ui->stackedWidget->setCurrentIndex(Page::AddNew); +- m_ui->stackedWidget->blockSignals(prev); +-} +- +-KeyComponentWidget::~KeyComponentWidget() +-{ +-} +- +-/** +- * @param name display name for the key component +- */ +-void KeyComponentWidget::setComponentName(const QString& name) +-{ +- if (name == m_componentName) { +- return; +- } +- +- m_componentName = name; +- emit nameChanged(name); +-} +- +-/** +- * @return The key component's display name +- */ +-QString KeyComponentWidget::componentName() const +-{ +- return m_componentName; +-} +- +-void KeyComponentWidget::setComponentDescription(const QString& description) +-{ +- if (description == m_componentDescription) { +- return; +- } +- +- m_componentDescription = description; +- emit descriptionChanged(description); +-} +- +-QString KeyComponentWidget::componentDescription() const +-{ +- return m_componentDescription; +-} +- +-void KeyComponentWidget::setComponentAdded(bool added) +-{ +- if (m_isComponentAdded == added) { +- return; +- } +- +- m_isComponentAdded = added; +- emit componentAddChanged(added); +-} +- +-bool KeyComponentWidget::componentAdded() const +-{ +- return m_isComponentAdded; +-} +- +-void KeyComponentWidget::changeVisiblePage(KeyComponentWidget::Page page) +-{ +- m_previousPage = static_cast(m_ui->stackedWidget->currentIndex()); +- m_ui->stackedWidget->setCurrentIndex(page); +-} +- +-KeyComponentWidget::Page KeyComponentWidget::visiblePage() const +-{ +- return static_cast(m_ui->stackedWidget->currentIndex()); +-} +- +-void KeyComponentWidget::updateComponentName(const QString& name) +-{ +- m_ui->groupBox->setTitle(name); +- m_ui->addButton->setText(tr("Add %1", "Add a key component").arg(name)); +- m_ui->changeButton->setText(tr("Change %1", "Change a key component").arg(name)); +- m_ui->removeButton->setText(tr("Remove %1", "Remove a key component").arg(name)); +- m_ui->changeOrRemoveLabel->setText( +- tr("%1 set, click to change or remove", "Change or remove a key component").arg(name)); +-} +- +-void KeyComponentWidget::updateComponentDescription(const QString& description) +-{ +- m_ui->componentDescription->setText(description); +-} +- +-void KeyComponentWidget::updateAddStatus(bool added) +-{ +- if (added) { +- m_ui->stackedWidget->setCurrentIndex(Page::LeaveOrRemove); +- } else { +- m_ui->stackedWidget->setCurrentIndex(Page::AddNew); +- } +-} +- +-void KeyComponentWidget::doAdd() +-{ +- changeVisiblePage(Page::Edit); +-} +- +-void KeyComponentWidget::doEdit() +-{ +- changeVisiblePage(Page::Edit); +-} +- +-void KeyComponentWidget::doRemove() +-{ +- changeVisiblePage(Page::AddNew); +-} +- +-void KeyComponentWidget::cancelEdit() +-{ +- m_ui->stackedWidget->setCurrentIndex(m_previousPage); +- emit editCanceled(); +-} +- +-void KeyComponentWidget::showEvent(QShowEvent* event) +-{ +- resetComponentEditWidget(); +- QWidget::showEvent(event); +-} +- +-void KeyComponentWidget::resetComponentEditWidget() +-{ +- if (!m_componentWidget || static_cast(m_ui->stackedWidget->currentIndex()) == Page::Edit) { +- if (m_componentWidget) { +- delete m_componentWidget; +- } +- +- m_componentWidget = componentEditWidget(); +- m_ui->componentWidgetLayout->addWidget(m_componentWidget); +- initComponentEditWidget(m_componentWidget); +- } +- +- QTimer::singleShot(0, this, SLOT(updateSize())); +-} +- +-void KeyComponentWidget::updateSize() +-{ +- for (int i = 0; i < m_ui->stackedWidget->count(); ++i) { +- if (m_ui->stackedWidget->currentIndex() == i) { +- m_ui->stackedWidget->widget(i)->setSizePolicy( +- m_ui->stackedWidget->widget(i)->sizePolicy().horizontalPolicy(), QSizePolicy::Preferred); +- } else { +- m_ui->stackedWidget->widget(i)->setSizePolicy( +- m_ui->stackedWidget->widget(i)->sizePolicy().horizontalPolicy(), QSizePolicy::Ignored); +- } +- } +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/databasekey/KeyComponentWidget.h keepassxc-2.6.4-patched/src/gui/databasekey/KeyComponentWidget.h +--- keepassxc-2.6.4-orig/src/gui/databasekey/KeyComponentWidget.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/databasekey/KeyComponentWidget.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,137 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_KEYCOMPONENTWIDGET_H +-#define KEEPASSXC_KEYCOMPONENTWIDGET_H +- +-#include +-#include +-#include +- +-namespace Ui +-{ +- class KeyComponentWidget; +-} +-class CompositeKey; +-class QStackedWidget; +- +-class KeyComponentWidget : public QWidget +-{ +- Q_OBJECT +- // clang-format off +- Q_PROPERTY(QString componentName READ m_componentName READ componentName +- WRITE setComponentName NOTIFY nameChanged) +- Q_PROPERTY(QString componentDescription READ m_componentDescription READ componentDescription +- WRITE setComponentDescription NOTIFY descriptionChanged) +- Q_PROPERTY(bool componentAdded READ m_isComponentAdded READ componentAdded +- WRITE setComponentAdded NOTIFY componentAddChanged) +- // clang-format on +- +-public: +- enum Page +- { +- AddNew = 0, +- Edit = 1, +- LeaveOrRemove = 2 +- }; +- +- explicit KeyComponentWidget(QWidget* parent = nullptr); +- explicit KeyComponentWidget(const QString& name, QWidget* parent = nullptr); +- Q_DISABLE_COPY(KeyComponentWidget); +- ~KeyComponentWidget() override; +- +- /** +- * Add the new key component to the given \link CompositeKey. +- * A caller should always check first with \link validate() if +- * the new key data is actually valid before adding it to a CompositeKey. +- * +- * @param key CompositeKey to add new key to +- * @return true if added successfully +- */ +- virtual bool addToCompositeKey(QSharedPointer key) = 0; +- +- /** +- * Validate key component data to check if key component +- * may be added to a CompositeKey. +- * +- * @param errorMessage error message in case data is not valid +- * @return true if data is valid +- */ +- virtual bool validate(QString& errorMessage) const = 0; +- +- void setComponentName(const QString& name); +- QString componentName() const; +- void setComponentDescription(const QString& name); +- QString componentDescription() const; +- void setComponentAdded(bool added); +- bool componentAdded() const; +- void changeVisiblePage(Page page); +- Page visiblePage() const; +- +-protected: +- /** +- * Construct and return an instance of the key component edit widget +- * which is to be inserted into the component management UI. +- * Since previous widgets will be destroyed, every successive call to +- * this function must return a new widget. +- * +- * @return edit widget instance +- */ +- virtual QWidget* componentEditWidget() = 0; +- +- /** +- * Initialize the key component widget created by \link componentEditWidget(). +- * This method is called every time the component edit widget is shown. +- * +- * @param widget pointer to the widget +- */ +- virtual void initComponentEditWidget(QWidget* widget) = 0; +- +-signals: +- void nameChanged(const QString& newName); +- void descriptionChanged(const QString& newDescription); +- void componentAddChanged(bool added); +- void componentAddRequested(); +- void componentEditRequested(); +- void editCanceled(); +- void componentRemovalRequested(); +- +-protected: +- void showEvent(QShowEvent* event) override; +- +-private slots: +- void updateComponentName(const QString& name); +- void updateComponentDescription(const QString& decription); +- void updateAddStatus(bool added); +- void doAdd(); +- void doEdit(); +- void doRemove(); +- void cancelEdit(); +- void resetComponentEditWidget(); +- void updateSize(); +- +-private: +- bool m_isComponentAdded = false; +- Page m_previousPage = Page::AddNew; +- QString m_componentName; +- QString m_componentDescription; +- QPointer m_componentWidget; +- +- const QScopedPointer m_ui; +-}; +- +-#endif // KEEPASSXC_KEYCOMPONENTWIDGET_H +diff -urNr keepassxc-2.6.4-orig/src/gui/databasekey/KeyComponentWidget.ui keepassxc-2.6.4-patched/src/gui/databasekey/KeyComponentWidget.ui +--- keepassxc-2.6.4-orig/src/gui/databasekey/KeyComponentWidget.ui 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/databasekey/KeyComponentWidget.ui 1970-01-01 01:00:00.000000000 +0100 +@@ -1,226 +0,0 @@ +- +- +- KeyComponentWidget +- +- +- +- 0 +- 0 +- 354 +- 106 +- +- +- +- +- QLayout::SetMinimumSize +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- +- 0 +- 0 +- +- +- +- QGroupBox { font-weight: bold; } +- +- +- Key Component +- +- +- +- 15 +- +- +- +- +- 1 +- +- +- +- +- 0 +- 0 +- +- +- +- +- 10 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- Key Component Description +- +- +- Qt::RichText +- +- +- true +- +- +- Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse +- +- +- +- +- +- +- Add Key Component +- +- +- +- +- +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- QLayout::SetMinimumSize +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- +- +- +- +- +- Qt::Horizontal +- +- +- +- 40 +- 20 +- +- +- +- +- +- +- +- Cancel +- +- +- +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- 10 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- Key Component set, click to change or remove +- +- +- +- +- +- +- +- +- Change Key Component +- +- +- +- +- +- +- Remove Key Component +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +diff -urNr keepassxc-2.6.4-orig/src/gui/databasekey/KeyFileEditWidget.cpp keepassxc-2.6.4-patched/src/gui/databasekey/KeyFileEditWidget.cpp +--- keepassxc-2.6.4-orig/src/gui/databasekey/KeyFileEditWidget.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/databasekey/KeyFileEditWidget.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,148 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "KeyFileEditWidget.h" +-#include "ui_KeyFileEditWidget.h" +-#include +- +-#include "gui/FileDialog.h" +-#include "gui/MainWindow.h" +-#include "gui/MessageBox.h" +-#include "keys/CompositeKey.h" +-#include "keys/FileKey.h" +- +-KeyFileEditWidget::KeyFileEditWidget(DatabaseSettingsWidget* parent) +- : KeyComponentWidget(parent) +- , m_compUi(new Ui::KeyFileEditWidget()) +- , m_parent(parent) +-{ +- setComponentName(tr("Key File")); +- setComponentDescription(tr("

You can add a key file containing random bytes for additional security.

" +- "

You must keep it secret and never lose it or you will be locked out!

")); +-} +- +-KeyFileEditWidget::~KeyFileEditWidget() +-{ +-} +- +-bool KeyFileEditWidget::addToCompositeKey(QSharedPointer key) +-{ +- auto fileKey = QSharedPointer::create(); +- QString fileKeyName = m_compUi->keyFileCombo->currentText(); +- if (!fileKey->load(fileKeyName, nullptr)) { +- return false; +- } +- +- if (fileKey->type() != FileKey::KeePass2XMLv2 && fileKey->type() != FileKey::Hashed) { +- QMessageBox::warning(getMainWindow(), +- tr("Old key file format"), +- tr("You selected a key file in an old format which KeePassXC
" +- "may stop supporting in the future.

" +- "Please consider generating a new key file instead."), +- QMessageBox::Ok); +- } +- +- key->addKey(fileKey); +- return true; +-} +- +-bool KeyFileEditWidget::validate(QString& errorMessage) const +-{ +- FileKey fileKey; +- QString fileKeyError; +- QString fileKeyName = m_compUi->keyFileCombo->currentText(); +- if (!fileKey.load(fileKeyName, &fileKeyError)) { +- errorMessage = tr("Error loading the key file '%1'\nMessage: %2").arg(fileKeyName, fileKeyError); +- return false; +- } +- return true; +-} +- +-QWidget* KeyFileEditWidget::componentEditWidget() +-{ +- m_compEditWidget = new QWidget(); +- m_compUi->setupUi(m_compEditWidget); +- +- connect(m_compUi->createKeyFileButton, SIGNAL(clicked()), SLOT(createKeyFile())); +- connect(m_compUi->browseKeyFileButton, SIGNAL(clicked()), SLOT(browseKeyFile())); +- +- return m_compEditWidget; +-} +- +-void KeyFileEditWidget::initComponentEditWidget(QWidget* widget) +-{ +- Q_UNUSED(widget); +- Q_ASSERT(m_compEditWidget); +- m_compUi->keyFileCombo->setFocus(); +-} +- +-void KeyFileEditWidget::createKeyFile() +-{ +- Q_ASSERT(m_compEditWidget); +- if (!m_compEditWidget) { +- return; +- } +- QString filters = QString("%1 (*.keyx; *.key);;%2 (*)").arg(tr("Key files"), tr("All files")); +- QString fileName = fileDialog()->getSaveFileName(this, tr("Create Key File..."), QString(), filters); +- +- if (!fileName.isEmpty()) { +- QString errorMsg; +- bool created = FileKey::create(fileName, &errorMsg); +- if (!created) { +- MessageBox::critical(getMainWindow(), +- tr("Error creating key file"), +- tr("Unable to create key file: %1").arg(errorMsg), +- QMessageBox::Button::Ok); +- } else { +- m_compUi->keyFileCombo->setEditText(fileName); +- } +- } +-} +- +-void KeyFileEditWidget::browseKeyFile() +-{ +- Q_ASSERT(m_compEditWidget); +- if (!m_compEditWidget) { +- return; +- } +- QString filters = QString("%1 (*.keyx; *.key);;%2 (*)").arg(tr("Key files"), tr("All files")); +- QString fileName = fileDialog()->getOpenFileName(this, tr("Select a key file"), QString(), filters); +- +- if (QFileInfo(fileName).canonicalFilePath() == m_parent->getDatabase()->canonicalFilePath()) { +- MessageBox::critical(getMainWindow(), +- tr("Invalid Key File"), +- tr("You cannot use the current database as its own keyfile. Please choose a different " +- "file or generate a new key file.")); +- return; +- } else if (fileName.endsWith(".kdbx", Qt::CaseInsensitive)) { +- auto response = +- MessageBox::warning(getMainWindow(), +- tr("Suspicious Key File"), +- tr("The chosen key file looks like a password database file. A key file must be a " +- "static file that never changes or you will lose access to your database " +- "forever.\nAre you sure you want to continue with this file?"), +- MessageBox::Continue | MessageBox::Cancel, +- MessageBox::Cancel); +- if (response != MessageBox::Continue) { +- return; +- } +- } +- +- if (!fileName.isEmpty()) { +- m_compUi->keyFileCombo->setEditText(fileName); +- } +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/databasekey/KeyFileEditWidget.h keepassxc-2.6.4-patched/src/gui/databasekey/KeyFileEditWidget.h +--- keepassxc-2.6.4-orig/src/gui/databasekey/KeyFileEditWidget.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/databasekey/KeyFileEditWidget.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,57 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_KEYFILEEDITWIDGET_H +-#define KEEPASSXC_KEYFILEEDITWIDGET_H +- +-#include "KeyComponentWidget.h" +-#include +- +-namespace Ui +-{ +- class KeyFileEditWidget; +-} +- +-class DatabaseSettingsWidget; +- +-class KeyFileEditWidget : public KeyComponentWidget +-{ +- Q_OBJECT +- +-public: +- explicit KeyFileEditWidget(DatabaseSettingsWidget* parent); +- Q_DISABLE_COPY(KeyFileEditWidget); +- ~KeyFileEditWidget() override; +- +- bool addToCompositeKey(QSharedPointer key) override; +- bool validate(QString& errorMessage) const override; +- +-protected: +- QWidget* componentEditWidget() override; +- void initComponentEditWidget(QWidget* widget) override; +- +-private slots: +- void createKeyFile(); +- void browseKeyFile(); +- +-private: +- const QScopedPointer m_compUi; +- QPointer m_compEditWidget; +- const QPointer m_parent; +-}; +- +-#endif // KEEPASSXC_KEYFILEEDITWIDGET_H +diff -urNr keepassxc-2.6.4-orig/src/gui/databasekey/KeyFileEditWidget.ui keepassxc-2.6.4-patched/src/gui/databasekey/KeyFileEditWidget.ui +--- keepassxc-2.6.4-orig/src/gui/databasekey/KeyFileEditWidget.ui 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/databasekey/KeyFileEditWidget.ui 1970-01-01 01:00:00.000000000 +0100 +@@ -1,94 +0,0 @@ +- +- +- KeyFileEditWidget +- +- +- +- 0 +- 0 +- 370 +- 76 +- +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- +- 0 +- 0 +- +- +- +- Key file selection +- +- +- true +- +- +- +- +- +- +- Browse for key file +- +- +- Browse... +- +- +- +- +- +- +- Generate a new key file +- +- +- Generate +- +- +- +- +- +- +- Qt::Vertical +- +- +- +- 20 +- 0 +- +- +- +- +- +- +- +- +- true +- +- +- +- Note: Do not use a file that may change as that will prevent you from unlocking your database! +- +- +- true +- +- +- +- +- +- +- +- +diff -urNr keepassxc-2.6.4-orig/src/gui/databasekey/PasswordEditWidget.cpp keepassxc-2.6.4-patched/src/gui/databasekey/PasswordEditWidget.cpp +--- keepassxc-2.6.4-orig/src/gui/databasekey/PasswordEditWidget.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/databasekey/PasswordEditWidget.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,114 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "PasswordEditWidget.h" +-#include "ui_PasswordEditWidget.h" +- +-#include "core/Resources.h" +-#include "gui/PasswordGeneratorWidget.h" +-#include "keys/CompositeKey.h" +-#include "keys/PasswordKey.h" +- +-#include +- +-PasswordEditWidget::PasswordEditWidget(QWidget* parent) +- : KeyComponentWidget(parent) +- , m_compUi(new Ui::PasswordEditWidget()) +-{ +- setComponentName(tr("Password")); +- setComponentDescription(tr("

A password is the primary method for securing your database.

" +- "

Good passwords are long and unique. KeePassXC can generate one for you.

")); +-} +- +-PasswordEditWidget::~PasswordEditWidget() +-{ +-} +- +-bool PasswordEditWidget::addToCompositeKey(QSharedPointer key) +-{ +- QString pw = m_compUi->enterPasswordEdit->text(); +- if (!pw.isEmpty()) { +- key->addKey(QSharedPointer::create(pw)); +- return true; +- } +- return false; +-} +- +-/** +- * @param visible changed password visibility state +- */ +-void PasswordEditWidget::setPasswordVisible(bool visible) +-{ +- m_compUi->enterPasswordEdit->setShowPassword(visible); +-} +- +-/** +- * @return password visibility state +- */ +-bool PasswordEditWidget::isPasswordVisible() const +-{ +- return m_compUi->enterPasswordEdit->isPasswordVisible(); +-} +- +-bool PasswordEditWidget::isEmpty() const +-{ +- return (visiblePage() == Page::Edit) && m_compUi->enterPasswordEdit->text().isEmpty(); +-} +- +-QWidget* PasswordEditWidget::componentEditWidget() +-{ +- m_compEditWidget = new QWidget(); +- m_compUi->setupUi(m_compEditWidget); +- m_compUi->enterPasswordEdit->enablePasswordGenerator(); +- m_compUi->enterPasswordEdit->setRepeatPartner(m_compUi->repeatPasswordEdit); +- return m_compEditWidget; +-} +- +-void PasswordEditWidget::initComponentEditWidget(QWidget* widget) +-{ +- Q_UNUSED(widget); +- Q_ASSERT(m_compEditWidget); +- m_compUi->enterPasswordEdit->setFocus(); +-} +- +-void PasswordEditWidget::hideEvent(QHideEvent* event) +-{ +- if (!isVisible() && m_compUi->enterPasswordEdit) { +- m_compUi->enterPasswordEdit->setText(""); +- m_compUi->repeatPasswordEdit->setText(""); +- } +- +- QWidget::hideEvent(event); +-} +- +-bool PasswordEditWidget::validate(QString& errorMessage) const +-{ +- if (m_compUi->enterPasswordEdit->text() != m_compUi->repeatPasswordEdit->text()) { +- errorMessage = tr("Passwords do not match."); +- return false; +- } +- +- return true; +-} +- +-void PasswordEditWidget::setPassword(const QString& password) +-{ +- Q_ASSERT(m_compEditWidget); +- +- m_compUi->enterPasswordEdit->setText(password); +- m_compUi->repeatPasswordEdit->setText(password); +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/databasekey/PasswordEditWidget.h keepassxc-2.6.4-patched/src/gui/databasekey/PasswordEditWidget.h +--- keepassxc-2.6.4-orig/src/gui/databasekey/PasswordEditWidget.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/databasekey/PasswordEditWidget.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,57 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_PASSWORDEDITWIDGET_H +-#define KEEPASSXC_PASSWORDEDITWIDGET_H +- +-#include "KeyComponentWidget.h" +-#include +- +-namespace Ui +-{ +- class PasswordEditWidget; +-} +- +-class PasswordEditWidget : public KeyComponentWidget +-{ +- Q_OBJECT +- +-public: +- explicit PasswordEditWidget(QWidget* parent = nullptr); +- Q_DISABLE_COPY(PasswordEditWidget); +- ~PasswordEditWidget() override; +- +- bool addToCompositeKey(QSharedPointer key) override; +- void setPasswordVisible(bool visible); +- bool isPasswordVisible() const; +- bool isEmpty() const; +- bool validate(QString& errorMessage) const override; +- +-protected: +- QWidget* componentEditWidget() override; +- void initComponentEditWidget(QWidget* widget) override; +- void hideEvent(QHideEvent* event) override; +- +-private slots: +- void setPassword(const QString& password); +- +-private: +- const QScopedPointer m_compUi; +- QPointer m_compEditWidget; +-}; +- +-#endif // KEEPASSXC_PASSWORDEDITWIDGET_H +diff -urNr keepassxc-2.6.4-orig/src/gui/databasekey/PasswordEditWidget.ui keepassxc-2.6.4-patched/src/gui/databasekey/PasswordEditWidget.ui +--- keepassxc-2.6.4-orig/src/gui/databasekey/PasswordEditWidget.ui 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/databasekey/PasswordEditWidget.ui 1970-01-01 01:00:00.000000000 +0100 +@@ -1,100 +0,0 @@ +- +- +- PasswordEditWidget +- +- +- +- 0 +- 0 +- 571 +- 78 +- +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- Enter password: +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- 300 +- 0 +- +- +- +- Password field +- +- +- QLineEdit::Password +- +- +- +- +- +- +- Confirm password: +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- 300 +- 0 +- +- +- +- Repeat password field +- +- +- QLineEdit::Password +- +- +- +- +- +- +- +- PasswordEdit +- QLineEdit +-
gui/PasswordEdit.h
+- 1 +-
+-
+- +- enterPasswordEdit +- repeatPasswordEdit +- +- +- +-
+diff -urNr keepassxc-2.6.4-orig/src/gui/databasekey/YubiKeyEditWidget.cpp keepassxc-2.6.4-patched/src/gui/databasekey/YubiKeyEditWidget.cpp +--- keepassxc-2.6.4-orig/src/gui/databasekey/YubiKeyEditWidget.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/databasekey/YubiKeyEditWidget.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,141 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "YubiKeyEditWidget.h" +-#include "ui_YubiKeyEditWidget.h" +- +-#include "config-keepassx.h" +-#include "core/AsyncTask.h" +-#include "gui/MainWindow.h" +-#include "gui/MessageBox.h" +-#include "keys/CompositeKey.h" +-#include "keys/YkChallengeResponseKey.h" +- +-YubiKeyEditWidget::YubiKeyEditWidget(QWidget* parent) +- : KeyComponentWidget(parent) +- , m_compUi(new Ui::YubiKeyEditWidget()) +-{ +- setComponentName(tr("YubiKey Challenge-Response")); +- setComponentDescription( +- tr("

If you own a YubiKey, you can use it " +- "for additional security.

The YubiKey requires one of its slots to be programmed as " +- "" +- "HMAC-SHA1 Challenge-Response.

")); +- +- connect(YubiKey::instance(), SIGNAL(detectComplete(bool)), SLOT(hardwareKeyResponse(bool)), Qt::QueuedConnection); +-} +- +-YubiKeyEditWidget::~YubiKeyEditWidget() +-{ +-} +- +-bool YubiKeyEditWidget::addToCompositeKey(QSharedPointer key) +-{ +- if (!m_isDetected || !m_compEditWidget) { +- return false; +- } +- +- int selectionIndex = m_compUi->comboChallengeResponse->currentIndex(); +- auto slot = m_compUi->comboChallengeResponse->itemData(selectionIndex).value(); +- key->addChallengeResponseKey(QSharedPointer::create(slot)); +- return true; +-} +- +-bool YubiKeyEditWidget::validate(QString& errorMessage) const +-{ +- if (!m_isDetected) { +- errorMessage = tr("Could not find any hardware keys!"); +- return false; +- } +- +- // Perform a test challenge response +- int selectionIndex = m_compUi->comboChallengeResponse->currentIndex(); +- auto slot = m_compUi->comboChallengeResponse->itemData(selectionIndex).value(); +- bool valid = AsyncTask::runAndWaitForFuture([&slot] { return YubiKey::instance()->testChallenge(slot); }); +- if (!valid) { +- errorMessage = tr("Selected hardware key slot does not support challenge-response!"); +- } +- return valid; +-} +- +-QWidget* YubiKeyEditWidget::componentEditWidget() +-{ +- m_compEditWidget = new QWidget(); +- m_compUi->setupUi(m_compEditWidget); +- +- QSizePolicy sp = m_compUi->yubikeyProgress->sizePolicy(); +- sp.setRetainSizeWhenHidden(true); +- m_compUi->yubikeyProgress->setSizePolicy(sp); +- m_compUi->yubikeyProgress->setVisible(false); +- +-#ifdef WITH_XC_YUBIKEY +- connect(m_compUi->buttonRedetectYubikey, SIGNAL(clicked()), SLOT(pollYubikey())); +- pollYubikey(); +-#endif +- +- return m_compEditWidget; +-} +- +-void YubiKeyEditWidget::initComponentEditWidget(QWidget* widget) +-{ +- Q_UNUSED(widget); +- Q_ASSERT(m_compEditWidget); +- m_compUi->comboChallengeResponse->setFocus(); +-} +- +-void YubiKeyEditWidget::pollYubikey() +-{ +-#ifdef WITH_XC_YUBIKEY +- if (!m_compEditWidget) { +- return; +- } +- +- m_isDetected = false; +- m_compUi->comboChallengeResponse->clear(); +- m_compUi->comboChallengeResponse->addItem(tr("Detecting hardware keys…")); +- m_compUi->buttonRedetectYubikey->setEnabled(false); +- m_compUi->comboChallengeResponse->setEnabled(false); +- m_compUi->yubikeyProgress->setVisible(true); +- +- YubiKey::instance()->findValidKeys(); +-#endif +-} +- +-void YubiKeyEditWidget::hardwareKeyResponse(bool found) +-{ +- if (!m_compEditWidget) { +- return; +- } +- +- m_compUi->comboChallengeResponse->clear(); +- m_compUi->buttonRedetectYubikey->setEnabled(true); +- m_compUi->yubikeyProgress->setVisible(false); +- +- if (!found) { +- m_compUi->comboChallengeResponse->addItem(tr("No hardware keys detected")); +- m_isDetected = false; +- return; +- } +- +- for (auto& slot : YubiKey::instance()->foundKeys()) { +- // add detected YubiKey to combo box and encode blocking mode in LSB, slot number in second LSB +- m_compUi->comboChallengeResponse->addItem(YubiKey::instance()->getDisplayName(slot), QVariant::fromValue(slot)); +- } +- +- m_isDetected = true; +- m_compUi->comboChallengeResponse->setEnabled(true); +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/databasekey/YubiKeyEditWidget.h keepassxc-2.6.4-patched/src/gui/databasekey/YubiKeyEditWidget.h +--- keepassxc-2.6.4-orig/src/gui/databasekey/YubiKeyEditWidget.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/databasekey/YubiKeyEditWidget.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,57 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_YUBIKEYEDITWIDGET_H +-#define KEEPASSXC_YUBIKEYEDITWIDGET_H +- +-#include "KeyComponentWidget.h" +-#include +- +-namespace Ui +-{ +- class YubiKeyEditWidget; +-} +- +-class YkChallengeResponseKey; +- +-class YubiKeyEditWidget : public KeyComponentWidget +-{ +- Q_OBJECT +- +-public: +- explicit YubiKeyEditWidget(QWidget* parent = nullptr); +- Q_DISABLE_COPY(YubiKeyEditWidget); +- ~YubiKeyEditWidget() override; +- +- bool addToCompositeKey(QSharedPointer key) override; +- bool validate(QString& errorMessage) const override; +- +-protected: +- QWidget* componentEditWidget() override; +- void initComponentEditWidget(QWidget* widget) override; +- +-private slots: +- void hardwareKeyResponse(bool found); +- void pollYubikey(); +- +-private: +- const QScopedPointer m_compUi; +- QPointer m_compEditWidget; +- bool m_isDetected = false; +-}; +- +-#endif // KEEPASSXC_YUBIKEYEDITWIDGET_H +diff -urNr keepassxc-2.6.4-orig/src/gui/databasekey/YubiKeyEditWidget.ui keepassxc-2.6.4-patched/src/gui/databasekey/YubiKeyEditWidget.ui +--- keepassxc-2.6.4-orig/src/gui/databasekey/YubiKeyEditWidget.ui 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/databasekey/YubiKeyEditWidget.ui 1970-01-01 01:00:00.000000000 +0100 +@@ -1,96 +0,0 @@ +- +- +- YubiKeyEditWidget +- +- +- +- 0 +- 0 +- 381 +- 64 +- +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- 0 +- +- +- +- +- Refresh hardware tokens +- +- +- Refresh +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- Hardware key slot selection +- +- +- +- +- +- +- +- 16777215 +- 2 +- +- +- +- 0 +- +- +- -1 +- +- +- false +- +- +- +- +- +- +- +- +- Qt::Vertical +- +- +- +- 20 +- 0 +- +- +- +- +- +- +- +- comboChallengeResponse +- buttonRedetectYubikey +- +- +- +- +diff -urNr keepassxc-2.6.4-orig/src/gui/DatabaseOpenDialog.cpp keepassxc-2.6.4-patched/src/gui/DatabaseOpenDialog.cpp +--- keepassxc-2.6.4-orig/src/gui/DatabaseOpenDialog.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/DatabaseOpenDialog.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,101 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "DatabaseOpenDialog.h" +-#include "DatabaseOpenWidget.h" +-#include "DatabaseWidget.h" +-#include "core/Database.h" +- +-#ifdef Q_OS_WIN +-#include +-#endif +- +-DatabaseOpenDialog::DatabaseOpenDialog(QWidget* parent) +- : QDialog(parent) +- , m_view(new DatabaseOpenWidget(this)) +-{ +- setWindowTitle(tr("Unlock Database - KeePassXC")); +- setWindowFlags(Qt::Dialog | Qt::WindowStaysOnTopHint); +-#ifdef Q_OS_WIN +- QWindowsWindowFunctions::setWindowActivationBehavior(QWindowsWindowFunctions::AlwaysActivateWindow); +-#endif +- connect(m_view, SIGNAL(dialogFinished(bool)), this, SLOT(complete(bool))); +- auto* layout = new QVBoxLayout(); +- layout->setMargin(0); +- setLayout(layout); +- layout->addWidget(m_view); +- setMinimumWidth(700); +-} +- +-void DatabaseOpenDialog::setFilePath(const QString& filePath) +-{ +- m_view->load(filePath); +-} +- +-/** +- * Set target DatabaseWidget to which signals are connected. +- * +- * @param dbWidget database widget +- */ +-void DatabaseOpenDialog::setTargetDatabaseWidget(DatabaseWidget* dbWidget) +-{ +- if (m_dbWidget) { +- disconnect(this, nullptr, m_dbWidget, nullptr); +- } +- m_dbWidget = dbWidget; +- connect(this, &DatabaseOpenDialog::dialogFinished, dbWidget, &DatabaseWidget::unlockDatabase); +-} +- +-void DatabaseOpenDialog::setIntent(DatabaseOpenDialog::Intent intent) +-{ +- m_intent = intent; +-} +- +-DatabaseOpenDialog::Intent DatabaseOpenDialog::intent() const +-{ +- return m_intent; +-} +- +-void DatabaseOpenDialog::clearForms() +-{ +- m_view->clearForms(); +- m_db.reset(); +- m_intent = Intent::None; +- if (m_dbWidget) { +- disconnect(this, nullptr, m_dbWidget, nullptr); +- m_dbWidget = nullptr; +- } +-} +- +-QSharedPointer DatabaseOpenDialog::database() +-{ +- return m_db; +-} +- +-void DatabaseOpenDialog::complete(bool accepted) +-{ +- // save DB, since DatabaseOpenWidget will reset its data after accept() is called +- m_db = m_view->database(); +- +- if (accepted) { +- accept(); +- } else { +- reject(); +- } +- emit dialogFinished(accepted, m_dbWidget); +- clearForms(); +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/DatabaseOpenDialog.h keepassxc-2.6.4-patched/src/gui/DatabaseOpenDialog.h +--- keepassxc-2.6.4-orig/src/gui/DatabaseOpenDialog.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/DatabaseOpenDialog.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,65 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_UNLOCKDATABASEDIALOG_H +-#define KEEPASSX_UNLOCKDATABASEDIALOG_H +- +-#include "core/Global.h" +- +-#include +-#include +-#include +- +-class Database; +-class DatabaseWidget; +-class DatabaseOpenWidget; +- +-class DatabaseOpenDialog : public QDialog +-{ +- Q_OBJECT +- +-public: +- enum class Intent +- { +- None, +- AutoType, +- Merge, +- Browser +- }; +- +- explicit DatabaseOpenDialog(QWidget* parent = nullptr); +- void setFilePath(const QString& filePath); +- void setTargetDatabaseWidget(DatabaseWidget* dbWidget); +- void setIntent(Intent intent); +- Intent intent() const; +- QSharedPointer database(); +- void clearForms(); +- +-signals: +- void dialogFinished(bool accepted, DatabaseWidget* dbWidget); +- +-public slots: +- void complete(bool accepted); +- +-private: +- QPointer m_view; +- QSharedPointer m_db; +- QPointer m_dbWidget; +- Intent m_intent = Intent::None; +-}; +- +-#endif // KEEPASSX_UNLOCKDATABASEDIALOG_H +diff -urNr keepassxc-2.6.4-orig/src/gui/DatabaseOpenWidget.cpp keepassxc-2.6.4-patched/src/gui/DatabaseOpenWidget.cpp +--- keepassxc-2.6.4-orig/src/gui/DatabaseOpenWidget.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/DatabaseOpenWidget.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,453 +0,0 @@ +-/* +- * Copyright (C) 2011 Felix Geyer +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "DatabaseOpenWidget.h" +-#include "ui_DatabaseOpenWidget.h" +- +-#include "core/Config.h" +-#include "core/Database.h" +-#include "core/Resources.h" +-#include "crypto/Random.h" +-#include "format/KeePass2Reader.h" +-#include "gui/FileDialog.h" +-#include "gui/MainWindow.h" +-#include "gui/MessageBox.h" +-#include "keys/FileKey.h" +-#include "keys/PasswordKey.h" +-#include "keys/YkChallengeResponseKey.h" +-#include "touchid/TouchID.h" +- +-#include "config-keepassx.h" +- +-#include +-#include +-#include +- +-namespace +-{ +- constexpr int clearFormsDelay = 30000; +-} +- +-DatabaseOpenWidget::DatabaseOpenWidget(QWidget* parent) +- : DialogyWidget(parent) +- , m_ui(new Ui::DatabaseOpenWidget()) +- , m_db(nullptr) +-{ +- m_ui->setupUi(this); +- +- m_ui->messageWidget->setHidden(true); +- +- m_hideTimer.setInterval(clearFormsDelay); +- m_hideTimer.setSingleShot(true); +- connect(&m_hideTimer, &QTimer::timeout, this, [this] { +- // Reset the password field after being hidden for a set time +- m_ui->editPassword->setText(""); +- m_ui->editPassword->setShowPassword(false); +- }); +- +- QFont font; +- font.setPointSize(font.pointSize() + 4); +- font.setBold(true); +- m_ui->labelHeadline->setFont(font); +- m_ui->labelHeadline->setText(tr("Unlock KeePassXC Database")); +- +- connect(m_ui->buttonBrowseFile, SIGNAL(clicked()), SLOT(browseKeyFile())); +- +- connect(m_ui->buttonBox, SIGNAL(accepted()), SLOT(openDatabase())); +- connect(m_ui->buttonBox, SIGNAL(rejected()), SLOT(reject())); +- +- m_ui->hardwareKeyLabelHelp->setIcon(resources()->icon("system-help").pixmap(QSize(12, 12))); +- connect(m_ui->hardwareKeyLabelHelp, SIGNAL(clicked(bool)), SLOT(openHardwareKeyHelp())); +- m_ui->keyFileLabelHelp->setIcon(resources()->icon("system-help").pixmap(QSize(12, 12))); +- connect(m_ui->keyFileLabelHelp, SIGNAL(clicked(bool)), SLOT(openKeyFileHelp())); +- +-#ifdef WITH_XC_YUBIKEY +- m_ui->hardwareKeyProgress->setVisible(false); +- QSizePolicy sp = m_ui->hardwareKeyProgress->sizePolicy(); +- sp.setRetainSizeWhenHidden(true); +- m_ui->hardwareKeyProgress->setSizePolicy(sp); +- +- connect(m_ui->buttonRedetectYubikey, SIGNAL(clicked()), SLOT(pollHardwareKey())); +- connect(YubiKey::instance(), SIGNAL(detectComplete(bool)), SLOT(hardwareKeyResponse(bool)), Qt::QueuedConnection); +- +- connect(YubiKey::instance(), &YubiKey::userInteractionRequest, this, [this] { +- // Show the press notification if we are in an independent window (e.g., DatabaseOpenDialog) +- if (window() != getMainWindow()) { +- m_ui->messageWidget->showMessage(tr("Please touch the button on your YubiKey!"), +- MessageWidget::Information, +- MessageWidget::DisableAutoHide); +- } +- }); +- connect(YubiKey::instance(), &YubiKey::challengeCompleted, this, [this] { m_ui->messageWidget->hide(); }); +-#else +- m_ui->hardwareKeyLabel->setVisible(false); +- m_ui->hardwareKeyLabelHelp->setVisible(false); +- m_ui->buttonRedetectYubikey->setVisible(false); +- m_ui->challengeResponseCombo->setVisible(false); +- m_ui->hardwareKeyProgress->setVisible(false); +-#endif +- +-#ifndef WITH_XC_TOUCHID +- m_ui->touchIDContainer->setVisible(false); +-#else +- if (!TouchID::getInstance().isAvailable()) { +- m_ui->checkTouchID->setVisible(false); +- } +-#endif +-} +- +-DatabaseOpenWidget::~DatabaseOpenWidget() +-{ +-} +- +-void DatabaseOpenWidget::showEvent(QShowEvent* event) +-{ +- DialogyWidget::showEvent(event); +- m_ui->editPassword->setFocus(); +- m_hideTimer.stop(); +-} +- +-void DatabaseOpenWidget::hideEvent(QHideEvent* event) +-{ +- DialogyWidget::hideEvent(event); +- +- // Schedule form clearing if we are hidden +- if (!isVisible()) { +- m_hideTimer.start(); +- } +-} +- +-void DatabaseOpenWidget::load(const QString& filename) +-{ +- clearForms(); +- +- m_filename = filename; +- m_ui->fileNameLabel->setRawText(m_filename); +- +- if (config()->get(Config::RememberLastKeyFiles).toBool()) { +- auto lastKeyFiles = config()->get(Config::LastKeyFiles).toHash(); +- if (lastKeyFiles.contains(m_filename)) { +- m_ui->keyFileLineEdit->setText(lastKeyFiles[m_filename].toString()); +- } +- } +- +- QHash useTouchID = config()->get(Config::UseTouchID).toHash(); +- m_ui->checkTouchID->setChecked(useTouchID.value(m_filename, false).toBool()); +- +-#ifdef WITH_XC_YUBIKEY +- // Only auto-poll for hardware keys if we previously used one with this database file +- if (config()->get(Config::RememberLastKeyFiles).toBool()) { +- auto lastChallengeResponse = config()->get(Config::LastChallengeResponse).toHash(); +- if (lastChallengeResponse.contains(m_filename)) { +- pollHardwareKey(); +- } +- } +-#endif +-} +- +-void DatabaseOpenWidget::clearForms() +-{ +- m_ui->editPassword->setText(""); +- m_ui->editPassword->setShowPassword(false); +- m_ui->keyFileLineEdit->clear(); +- m_ui->keyFileLineEdit->setShowPassword(false); +- m_ui->checkTouchID->setChecked(false); +- m_ui->challengeResponseCombo->clear(); +- m_db.reset(); +-} +- +-QSharedPointer DatabaseOpenWidget::database() +-{ +- return m_db; +-} +- +-QString DatabaseOpenWidget::filename() +-{ +- return m_filename; +-} +- +-void DatabaseOpenWidget::enterKey(const QString& pw, const QString& keyFile) +-{ +- m_ui->editPassword->setText(pw); +- m_ui->keyFileLineEdit->setText(keyFile); +- openDatabase(); +-} +- +-void DatabaseOpenWidget::openDatabase() +-{ +- m_ui->messageWidget->hide(); +- +- QSharedPointer databaseKey = buildDatabaseKey(); +- if (!databaseKey) { +- return; +- } +- +- m_ui->editPassword->setShowPassword(false); +- QCoreApplication::processEvents(); +- +- m_db.reset(new Database()); +- QString error; +- +- QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); +- m_ui->passwordFormFrame->setEnabled(false); +- QCoreApplication::processEvents(); +- bool ok = m_db->open(m_filename, databaseKey, &error, false); +- QApplication::restoreOverrideCursor(); +- m_ui->passwordFormFrame->setEnabled(true); +- +- if (ok) { +-#ifdef WITH_XC_TOUCHID +- QHash useTouchID = config()->get(Config::UseTouchID).toHash(); +- +- // check if TouchID can & should be used to unlock the database next time +- if (m_ui->checkTouchID->isChecked() && TouchID::getInstance().isAvailable()) { +- // encrypt and store key blob +- if (TouchID::getInstance().storeKey(m_filename, PasswordKey(m_ui->editPassword->text()).rawKey())) { +- useTouchID.insert(m_filename, true); +- } +- } else { +- // when TouchID not available or unchecked, reset for the current database +- TouchID::getInstance().reset(m_filename); +- useTouchID.insert(m_filename, false); +- } +- +- config()->set(Config::UseTouchID, useTouchID); +-#endif +- emit dialogFinished(true); +- clearForms(); +- } else { +- if (m_ui->editPassword->text().isEmpty() && !m_retryUnlockWithEmptyPassword) { +- QScopedPointer msgBox(new QMessageBox(this)); +- msgBox->setIcon(QMessageBox::Critical); +- msgBox->setWindowTitle(tr("Unlock failed and no password given")); +- msgBox->setText(tr("Unlocking the database failed and you did not enter a password.\n" +- "Do you want to retry with an \"empty\" password instead?\n\n" +- "To prevent this error from appearing, you must go to " +- "\"Database Settings / Security\" and reset your password.")); +- auto btn = msgBox->addButton(tr("Retry with empty password"), QMessageBox::ButtonRole::AcceptRole); +- msgBox->setDefaultButton(btn); +- msgBox->addButton(QMessageBox::Cancel); +- msgBox->exec(); +- +- if (msgBox->clickedButton() == btn) { +- m_retryUnlockWithEmptyPassword = true; +- openDatabase(); +- return; +- } +- } +- +- m_retryUnlockWithEmptyPassword = false; +- m_ui->messageWidget->showMessage(error, MessageWidget::MessageType::Error); +- // Focus on the password field and select the input for easy retry +- m_ui->editPassword->selectAll(); +- m_ui->editPassword->setFocus(); +- +-#ifdef WITH_XC_TOUCHID +- // unable to unlock database, reset TouchID for the current database +- TouchID::getInstance().reset(m_filename); +-#endif +- } +-} +- +-QSharedPointer DatabaseOpenWidget::buildDatabaseKey() +-{ +- auto databaseKey = QSharedPointer::create(); +- +- if (!m_ui->editPassword->text().isEmpty() || m_retryUnlockWithEmptyPassword) { +- databaseKey->addKey(QSharedPointer::create(m_ui->editPassword->text())); +- } +- +-#ifdef WITH_XC_TOUCHID +- // check if TouchID is available and enabled for unlocking the database +- if (m_ui->checkTouchID->isChecked() && TouchID::getInstance().isAvailable() +- && m_ui->editPassword->text().isEmpty()) { +- // clear empty password from composite key +- databaseKey->clear(); +- +- // try to get, decrypt and use PasswordKey +- QSharedPointer passwordKey = TouchID::getInstance().getKey(m_filename); +- if (passwordKey != NULL) { +- // check if the user cancelled the operation +- if (passwordKey.isNull()) +- return QSharedPointer(); +- +- databaseKey->addKey(PasswordKey::fromRawKey(*passwordKey)); +- } +- } +-#endif +- +- auto lastKeyFiles = config()->get(Config::LastKeyFiles).toHash(); +- lastKeyFiles.remove(m_filename); +- +- auto key = QSharedPointer::create(); +- QString keyFilename = m_ui->keyFileLineEdit->text(); +- if (!keyFilename.isEmpty()) { +- QString errorMsg; +- if (!key->load(keyFilename, &errorMsg)) { +- m_ui->messageWidget->showMessage(tr("Failed to open key file: %1").arg(errorMsg), MessageWidget::Error); +- return {}; +- } +- if (key->type() != FileKey::KeePass2XMLv2 && key->type() != FileKey::Hashed +- && !config()->get(Config::Messages_NoLegacyKeyFileWarning).toBool()) { +- QMessageBox legacyWarning; +- legacyWarning.setWindowTitle(tr("Old key file format")); +- legacyWarning.setText(tr("You are using an old key file format which KeePassXC may
" +- "stop supporting in the future.

" +- "Please consider generating a new key file by going to:
" +- "Database / Database Security / Change Key File.
")); +- legacyWarning.setIcon(QMessageBox::Icon::Warning); +- legacyWarning.addButton(QMessageBox::Ok); +- legacyWarning.setDefaultButton(QMessageBox::Ok); +- legacyWarning.setCheckBox(new QCheckBox(tr("Don't show this warning again"))); +- +- connect(legacyWarning.checkBox(), &QCheckBox::stateChanged, this, [](int state) { +- config()->set(Config::Messages_NoLegacyKeyFileWarning, state == Qt::CheckState::Checked); +- }); +- +- legacyWarning.exec(); +- } +- databaseKey->addKey(key); +- lastKeyFiles.insert(m_filename, keyFilename); +- } +- +- if (config()->get(Config::RememberLastKeyFiles).toBool()) { +- config()->set(Config::LastKeyFiles, lastKeyFiles); +- } +- +-#ifdef WITH_XC_YUBIKEY +- auto lastChallengeResponse = config()->get(Config::LastChallengeResponse).toHash(); +- lastChallengeResponse.remove(m_filename); +- +- int selectionIndex = m_ui->challengeResponseCombo->currentIndex(); +- if (selectionIndex > 0) { +- auto slot = m_ui->challengeResponseCombo->itemData(selectionIndex).value(); +- auto crKey = QSharedPointer(new YkChallengeResponseKey(slot)); +- databaseKey->addChallengeResponseKey(crKey); +- +- // Qt doesn't read custom types in settings so stuff into a QString +- lastChallengeResponse.insert(m_filename, QStringLiteral("%1:%2").arg(slot.first).arg(slot.second)); +- } +- +- if (config()->get(Config::RememberLastKeyFiles).toBool()) { +- config()->set(Config::LastChallengeResponse, lastChallengeResponse); +- } +-#endif +- +- return databaseKey; +-} +- +-void DatabaseOpenWidget::reject() +-{ +- emit dialogFinished(false); +-} +- +-void DatabaseOpenWidget::browseKeyFile() +-{ +- QString filters = QString("%1 (*);;%2 (*.keyx; *.key)").arg(tr("All files"), tr("Key files")); +- if (!config()->get(Config::RememberLastKeyFiles).toBool()) { +- fileDialog()->setNextForgetDialog(); +- } +- QString filename = fileDialog()->getOpenFileName(this, tr("Select key file"), QString(), filters); +- +- if (QFileInfo(filename).canonicalFilePath() == QFileInfo(m_filename).canonicalFilePath()) { +- MessageBox::warning(this, +- tr("Cannot use database file as key file"), +- tr("You cannot use your database file as a key file.\nIf you do not have a key file, " +- "please leave the field empty."), +- MessageBox::Button::Ok); +- filename = ""; +- } +- +- if (!filename.isEmpty()) { +- m_ui->keyFileLineEdit->setText(filename); +- } +-} +- +-void DatabaseOpenWidget::clearKeyFileText() +-{ +- m_ui->keyFileLineEdit->clear(); +- m_ui->keyFileLineEdit->setShowPassword(false); +-} +- +-void DatabaseOpenWidget::pollHardwareKey() +-{ +- if (m_pollingHardwareKey) { +- return; +- } +- +- m_ui->challengeResponseCombo->clear(); +- m_ui->challengeResponseCombo->addItem(tr("Detecting hardware keys…")); +- +- m_ui->buttonRedetectYubikey->setEnabled(false); +- m_ui->challengeResponseCombo->setEnabled(false); +- m_ui->hardwareKeyProgress->setVisible(true); +- m_pollingHardwareKey = true; +- +- YubiKey::instance()->findValidKeys(); +-} +- +-void DatabaseOpenWidget::hardwareKeyResponse(bool found) +-{ +- m_ui->challengeResponseCombo->clear(); +- m_ui->buttonRedetectYubikey->setEnabled(true); +- m_ui->hardwareKeyProgress->setVisible(false); +- m_pollingHardwareKey = false; +- +- if (!found) { +- m_ui->challengeResponseCombo->addItem(tr("No hardware keys detected")); +- m_ui->challengeResponseCombo->setEnabled(false); +- return; +- } else { +- m_ui->challengeResponseCombo->addItem(tr("Select hardware key…")); +- } +- +- YubiKeySlot lastUsedSlot; +- if (config()->get(Config::RememberLastKeyFiles).toBool()) { +- auto lastChallengeResponse = config()->get(Config::LastChallengeResponse).toHash(); +- if (lastChallengeResponse.contains(m_filename)) { +- // Qt doesn't read custom types in settings so extract from QString +- auto split = lastChallengeResponse.value(m_filename).toString().split(":"); +- if (split.size() > 1) { +- lastUsedSlot = YubiKeySlot(split[0].toUInt(), split[1].toInt()); +- } +- } +- } +- +- int selectedIndex = 0; +- for (auto& slot : YubiKey::instance()->foundKeys()) { +- // add detected YubiKey to combo box +- m_ui->challengeResponseCombo->addItem(YubiKey::instance()->getDisplayName(slot), QVariant::fromValue(slot)); +- // Select this YubiKey + Slot if we used it in the past +- if (lastUsedSlot == slot) { +- selectedIndex = m_ui->challengeResponseCombo->count() - 1; +- } +- } +- +- m_ui->challengeResponseCombo->setCurrentIndex(selectedIndex); +- m_ui->challengeResponseCombo->setEnabled(true); +-} +- +-void DatabaseOpenWidget::openHardwareKeyHelp() +-{ +- QDesktopServices::openUrl(QUrl("https://keepassxc.org/docs#faq-cat-yubikey")); +-} +- +-void DatabaseOpenWidget::openKeyFileHelp() +-{ +- QDesktopServices::openUrl(QUrl("https://keepassxc.org/docs#faq-cat-keyfile")); +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/DatabaseOpenWidget.h keepassxc-2.6.4-patched/src/gui/DatabaseOpenWidget.h +--- keepassxc-2.6.4-orig/src/gui/DatabaseOpenWidget.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/DatabaseOpenWidget.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,81 +0,0 @@ +-/* +- * Copyright (C) 2011 Felix Geyer +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_DATABASEOPENWIDGET_H +-#define KEEPASSX_DATABASEOPENWIDGET_H +- +-#include +-#include +- +-#include "gui/DialogyWidget.h" +-#include "keys/CompositeKey.h" +- +-class Database; +-class QFile; +- +-namespace Ui +-{ +- class DatabaseOpenWidget; +-} +- +-class DatabaseOpenWidget : public DialogyWidget +-{ +- Q_OBJECT +- +-public: +- explicit DatabaseOpenWidget(QWidget* parent = nullptr); +- ~DatabaseOpenWidget(); +- void load(const QString& filename); +- QString filename(); +- void clearForms(); +- void enterKey(const QString& pw, const QString& keyFile); +- QSharedPointer database(); +- +-signals: +- void dialogFinished(bool accepted); +- +-protected: +- void showEvent(QShowEvent* event) override; +- void hideEvent(QHideEvent* event) override; +- QSharedPointer buildDatabaseKey(); +- +- const QScopedPointer m_ui; +- QSharedPointer m_db; +- QString m_filename; +- bool m_retryUnlockWithEmptyPassword = false; +- +-protected slots: +- virtual void openDatabase(); +- void reject(); +- +-private slots: +- void browseKeyFile(); +- void clearKeyFileText(); +- void pollHardwareKey(); +- void hardwareKeyResponse(bool found); +- void openHardwareKeyHelp(); +- void openKeyFileHelp(); +- +-private: +- bool m_pollingHardwareKey = false; +- QTimer m_hideTimer; +- +- Q_DISABLE_COPY(DatabaseOpenWidget) +-}; +- +-#endif // KEEPASSX_DATABASEOPENWIDGET_H +diff -urNr keepassxc-2.6.4-orig/src/gui/DatabaseOpenWidget.ui keepassxc-2.6.4-patched/src/gui/DatabaseOpenWidget.ui +--- keepassxc-2.6.4-orig/src/gui/DatabaseOpenWidget.ui 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/DatabaseOpenWidget.ui 1970-01-01 01:00:00.000000000 +0100 +@@ -1,614 +0,0 @@ +- +- +- DatabaseOpenWidget +- +- +- +- 0 +- 0 +- 588 +- 448 +- +- +- +- Unlock KeePassXC Database +- +- +- +- +- +- +- +- +- Qt::Vertical +- +- +- QSizePolicy::MinimumExpanding +- +- +- +- 20 +- 5 +- +- +- +- +- +- +- +- 0 +- +- +- QLayout::SetDefaultConstraint +- +- +- +- +- Qt::Horizontal +- +- +- QSizePolicy::MinimumExpanding +- +- +- +- 0 +- 0 +- +- +- +- +- +- +- +- +- 700 +- 16777215 +- +- +- +- +- QLayout::SetMinimumSize +- +- +- +- +- +- 12 +- 75 +- true +- +- +- +- Unlock KeePassXC Database +- +- +- +- +- +- +- filename.kdbx +- +- +- +- +- +- +- Qt::Vertical +- +- +- QSizePolicy::Fixed +- +- +- +- 439 +- 13 +- +- +- +- +- +- +- +- +- 550 +- 0 +- +- +- +- QFrame::StyledPanel +- +- +- QFrame::Plain +- +- +- 2 +- +- +- +- QLayout::SetMinimumSize +- +- +- 20 +- +- +- 15 +- +- +- 20 +- +- +- 15 +- +- +- +- +- +- 400 +- 0 +- +- +- +- +- 700 +- 16777215 +- +- +- +- +- +- +- Enter Password: +- +- +- editPassword +- +- +- +- +- +- +- Password field +- +- +- QLineEdit::Password +- +- +- +- +- +- +- Qt::Vertical +- +- +- QSizePolicy::Fixed +- +- +- +- 20 +- 5 +- +- +- +- +- +- +- +- Enter Additional Credentials (if any): +- +- +- +- +- +- +- QLayout::SetMinimumSize +- +- +- +- +- Qt::Horizontal +- +- +- QSizePolicy::Fixed +- +- +- +- 15 +- 20 +- +- +- +- +- +- +- +- QLayout::SetMinimumSize +- +- +- 3 +- +- +- +- +- 5 +- +- +- +- +- Key File: +- +- +- keyFileLineEdit +- +- +- +- +- +- +- PointingHandCursor +- +- +- Qt::ClickFocus +- +- +- <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> +- +- +- Key file help +- +- +- QToolButton { +- border: none; +- background: none; +-} +- +- +- ? +- +- +- +- 12 +- 12 +- +- +- +- QToolButton::InstantPopup +- +- +- +- +- +- +- +- +- 0 +- +- +- +- +- +- 16777215 +- 2 +- +- +- +- 0 +- +- +- 0 +- +- +- -1 +- +- +- false +- +- +- +- +- +- +- false +- +- +- +- 0 +- 0 +- +- +- +- Hardware key slot selection +- +- +- false +- +- +- +- +- +- +- +- +- 2 +- +- +- +- +- 5 +- +- +- +- +- Hardware Key: +- +- +- challengeResponseCombo +- +- +- +- +- +- +- PointingHandCursor +- +- +- Qt::ClickFocus +- +- +- <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +-<p>Click for more information...</p> +- +- +- Hardware key help +- +- +- QToolButton { +- border: none; +- background: none; +-} +- +- +- ? +- +- +- +- 12 +- 12 +- +- +- +- QToolButton::InstantPopup +- +- +- +- +- +- +- +- +- Qt::Vertical +- +- +- QSizePolicy::Fixed +- +- +- +- 0 +- 2 +- +- +- +- +- +- +- +- +- +- 0 +- +- +- +- +- +- 0 +- 0 +- +- +- +- Key file to unlock the database +- +- +- QLineEdit::Password +- +- +- true +- +- +- +- +- +- +- +- +- Browse for key file +- +- +- Browse for key file +- +- +- Browse... +- +- +- +- +- +- +- 0 +- +- +- +- +- true +- +- +- Refresh hardware tokens +- +- +- Refresh hardware tokens +- +- +- Refresh +- +- +- +- +- +- +- Qt::Vertical +- +- +- QSizePolicy::Fixed +- +- +- +- 0 +- 2 +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- Qt::Horizontal +- +- +- +- 40 +- 0 +- +- +- +- +- +- +- +- TouchID for Quick Unlock +- +- +- +- +- +- +- +- +- +- 15 +- +- +- +- +- QDialogButtonBox::Cancel|QDialogButtonBox::Ok +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- Qt::Horizontal +- +- +- QSizePolicy::MinimumExpanding +- +- +- +- 0 +- 0 +- +- +- +- +- +- +- +- +- +- Qt::Vertical +- +- +- QSizePolicy::MinimumExpanding +- +- +- +- 20 +- 55 +- +- +- +- +- +- +- +- +- PasswordEdit +- QLineEdit +-
gui/PasswordEdit.h
+- 1 +-
+- +- MessageWidget +- QWidget +-
gui/MessageWidget.h
+- 1 +-
+- +- ElidedLabel +- QLabel +-
gui/widgets/ElidedLabel.h
+-
+-
+- +- editPassword +- keyFileLineEdit +- buttonBrowseFile +- challengeResponseCombo +- buttonRedetectYubikey +- checkTouchID +- +- +- +-
+diff -urNr keepassxc-2.6.4-orig/src/gui/DatabaseTabWidget.cpp keepassxc-2.6.4-patched/src/gui/DatabaseTabWidget.cpp +--- keepassxc-2.6.4-orig/src/gui/DatabaseTabWidget.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/DatabaseTabWidget.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,766 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "DatabaseTabWidget.h" +- +-#include +-#include +-#include +- +-#include "autotype/AutoType.h" +-#include "core/AsyncTask.h" +-#include "core/Config.h" +-#include "core/Database.h" +-#include "core/Global.h" +-#include "core/Group.h" +-#include "core/Metadata.h" +-#include "core/Tools.h" +-#include "format/CsvExporter.h" +-#include "format/HtmlExporter.h" +-#include "gui/Clipboard.h" +-#include "gui/DatabaseOpenDialog.h" +-#include "gui/DatabaseWidget.h" +-#include "gui/DatabaseWidgetStateSync.h" +-#include "gui/DragTabBar.h" +-#include "gui/FileDialog.h" +-#include "gui/MessageBox.h" +-#include "gui/entry/EntryView.h" +-#include "gui/group/GroupView.h" +-#ifdef Q_OS_MACOS +-#include "gui/osutils/macutils/MacUtils.h" +-#endif +-#include "gui/wizard/NewDatabaseWizard.h" +- +-DatabaseTabWidget::DatabaseTabWidget(QWidget* parent) +- : QTabWidget(parent) +- , m_dbWidgetStateSync(new DatabaseWidgetStateSync(this)) +- , m_dbWidgetPendingLock(nullptr) +- , m_databaseOpenDialog(new DatabaseOpenDialog(this)) +-{ +- auto* tabBar = new DragTabBar(this); +- setTabBar(tabBar); +- setDocumentMode(true); +- +- // clang-format off +- connect(this, SIGNAL(tabCloseRequested(int)), SLOT(closeDatabaseTab(int))); +- connect(this, SIGNAL(currentChanged(int)), SLOT(emitActivateDatabaseChanged())); +- connect(this, SIGNAL(activateDatabaseChanged(DatabaseWidget*)), +- m_dbWidgetStateSync, SLOT(setActive(DatabaseWidget*))); +- connect(autoType(), SIGNAL(globalAutoTypeTriggered()), SLOT(performGlobalAutoType())); +- connect(autoType(), SIGNAL(autotypePerformed()), SLOT(relockPendingDatabase())); +- connect(autoType(), SIGNAL(autotypeRejected()), SLOT(relockPendingDatabase())); +- connect(m_databaseOpenDialog.data(), &DatabaseOpenDialog::dialogFinished, +- this, &DatabaseTabWidget::databaseUnlockDialogFinished); +- // clang-format on +- +-#ifdef Q_OS_MACOS +- connect(macUtils(), SIGNAL(lockDatabases()), SLOT(lockDatabases())); +-#endif +-} +- +-DatabaseTabWidget::~DatabaseTabWidget() +-{ +-} +- +-void DatabaseTabWidget::toggleTabbar() +-{ +- if (count() > 1) { +- tabBar()->show(); +- emit tabVisibilityChanged(true); +- } else { +- tabBar()->hide(); +- emit tabVisibilityChanged(false); +- } +-} +- +-/** +- * Helper method for invoking the new database wizard. +- * The user of this method MUST take ownership of the returned pointer. +- * +- * @return pointer to the configured new database, nullptr on failure +- */ +-QSharedPointer DatabaseTabWidget::execNewDatabaseWizard() +-{ +- // use QScopedPointer to ensure deletion after scope ends, but still parent +- // it to this to make it modal and allow easier access in unit tests +- QScopedPointer wizard(new NewDatabaseWizard(this)); +- if (!wizard->exec()) { +- return {}; +- } +- +- auto db = wizard->takeDatabase(); +- if (!db) { +- return {}; +- } +- Q_ASSERT(db->key()); +- Q_ASSERT(db->kdf()); +- if (!db->key() || !db->kdf()) { +- MessageBox::critical(this, +- tr("Database creation error"), +- tr("The created database has no key or KDF, refusing to save it.\n" +- "This is definitely a bug, please report it to the developers."), +- MessageBox::Ok, +- MessageBox::Ok); +- return {}; +- } +- +- return db; +-} +- +-DatabaseWidget* DatabaseTabWidget::newDatabase() +-{ +- auto db = execNewDatabaseWizard(); +- if (!db) { +- return nullptr; +- } +- +- auto dbWidget = new DatabaseWidget(db, this); +- addDatabaseTab(dbWidget); +- db->markAsModified(); +- return dbWidget; +-} +- +-void DatabaseTabWidget::openDatabase() +-{ +- QString filter = QString("%1 (*.kdbx);;%2 (*)").arg(tr("KeePass 2 Database"), tr("All files")); +- QString fileName = fileDialog()->getOpenFileName(this, tr("Open database"), "", filter); +- if (!fileName.isEmpty()) { +- addDatabaseTab(fileName); +- } +-} +- +-/** +- * Add a new database tab or switch to an existing one if the +- * database has been opened already. +- * +- * @param filePath database file path +- * @param inBackground optional, don't focus tab after opening +- * @param password optional, password to unlock database +- * @param keyfile optional, path to keyfile to unlock database +- * +- */ +-void DatabaseTabWidget::addDatabaseTab(const QString& filePath, +- bool inBackground, +- const QString& password, +- const QString& keyfile) +-{ +- QFileInfo fileInfo(filePath); +- QString canonicalFilePath = fileInfo.canonicalFilePath(); +- +- if (canonicalFilePath.isEmpty()) { +- emit messageGlobal(tr("Failed to open %1. It either does not exist or is not accessible.").arg(filePath), +- MessageWidget::Error); +- return; +- } +- +- for (int i = 0, c = count(); i < c; ++i) { +- auto* dbWidget = databaseWidgetFromIndex(i); +- Q_ASSERT(dbWidget); +- if (dbWidget +- && dbWidget->database()->canonicalFilePath().compare(canonicalFilePath, FILE_CASE_SENSITIVE) == 0) { +- dbWidget->performUnlockDatabase(password, keyfile); +- if (!inBackground) { +- // switch to existing tab if file is already open +- setCurrentIndex(indexOf(dbWidget)); +- } +- return; +- } +- } +- +- auto* dbWidget = new DatabaseWidget(QSharedPointer::create(filePath), this); +- addDatabaseTab(dbWidget, inBackground); +- dbWidget->performUnlockDatabase(password, keyfile); +- updateLastDatabases(filePath); +-} +- +-/** +- * Add a new database tab containing the given DatabaseWidget +- * @param filePath +- * @param inBackground optional, don't focus tab after opening +- */ +-void DatabaseTabWidget::addDatabaseTab(DatabaseWidget* dbWidget, bool inBackground) +-{ +- Q_ASSERT(dbWidget->database()); +- +- // emit before index change +- emit databaseOpened(dbWidget); +- +- int index = addTab(dbWidget, ""); +- updateTabName(index); +- toggleTabbar(); +- if (!inBackground) { +- setCurrentIndex(index); +- } +- +- connect(dbWidget, +- SIGNAL(requestOpenDatabase(QString, bool, QString, QString)), +- SLOT(addDatabaseTab(QString, bool, QString, QString))); +- connect(dbWidget, SIGNAL(databaseFilePathChanged(QString, QString)), SLOT(updateTabName())); +- connect(dbWidget, SIGNAL(closeRequest()), SLOT(closeDatabaseTabFromSender())); +- connect(dbWidget, +- SIGNAL(databaseReplaced(const QSharedPointer&, const QSharedPointer&)), +- SLOT(updateTabName())); +- connect(dbWidget, SIGNAL(databaseModified()), SLOT(updateTabName())); +- connect(dbWidget, SIGNAL(databaseSaved()), SLOT(updateTabName())); +- connect(dbWidget, SIGNAL(databaseUnlocked()), SLOT(updateTabName())); +- connect(dbWidget, SIGNAL(databaseUnlocked()), SLOT(emitDatabaseLockChanged())); +- connect(dbWidget, SIGNAL(databaseLocked()), SLOT(updateTabName())); +- connect(dbWidget, SIGNAL(databaseLocked()), SLOT(emitDatabaseLockChanged())); +-} +- +-void DatabaseTabWidget::importCsv() +-{ +- QString filter = QString("%1 (*.csv);;%2 (*)").arg(tr("CSV file"), tr("All files")); +- QString fileName = fileDialog()->getOpenFileName(this, tr("Select CSV file"), "", filter); +- +- if (fileName.isEmpty()) { +- return; +- } +- +- auto db = execNewDatabaseWizard(); +- if (!db) { +- return; +- } +- +- auto* dbWidget = new DatabaseWidget(db, this); +- addDatabaseTab(dbWidget); +- dbWidget->switchToCsvImport(fileName); +-} +- +-void DatabaseTabWidget::mergeDatabase() +-{ +- auto dbWidget = currentDatabaseWidget(); +- if (dbWidget && !dbWidget->isLocked()) { +- QString filter = QString("%1 (*.kdbx);;%2 (*)").arg(tr("KeePass 2 Database"), tr("All files")); +- const QString fileName = fileDialog()->getOpenFileName(this, tr("Merge database"), QString(), filter); +- if (!fileName.isEmpty()) { +- mergeDatabase(fileName); +- } +- } +-} +- +-void DatabaseTabWidget::mergeDatabase(const QString& filePath) +-{ +- unlockDatabaseInDialog(currentDatabaseWidget(), DatabaseOpenDialog::Intent::Merge, filePath); +-} +- +-void DatabaseTabWidget::importKeePass1Database() +-{ +- QString filter = QString("%1 (*.kdb);;%2 (*)").arg(tr("KeePass 1 database"), tr("All files")); +- QString fileName = fileDialog()->getOpenFileName(this, tr("Open KeePass 1 database"), QString(), filter); +- +- if (fileName.isEmpty()) { +- return; +- } +- +- auto db = QSharedPointer::create(); +- auto* dbWidget = new DatabaseWidget(db, this); +- addDatabaseTab(dbWidget); +- dbWidget->switchToImportKeepass1(fileName); +-} +- +-void DatabaseTabWidget::importOpVaultDatabase() +-{ +-#ifdef Q_OS_MACOS +- QString fileName = fileDialog()->getOpenFileName(this, tr("Open OPVault"), {}, "OPVault (*.opvault)"); +-#else +- QString fileName = fileDialog()->getExistingDirectory(this, tr("Open OPVault")); +-#endif +- +- if (fileName.isEmpty()) { +- return; +- } +- +- auto db = QSharedPointer::create(); +- auto* dbWidget = new DatabaseWidget(db, this); +- addDatabaseTab(dbWidget); +- dbWidget->switchToImportOpVault(fileName); +-} +- +-/** +- * Attempt to close the current database and remove its tab afterwards. +- * +- * @param index index of the database tab to close +- * @return true if database was closed successully +- */ +-bool DatabaseTabWidget::closeCurrentDatabaseTab() +-{ +- return closeDatabaseTab(currentIndex()); +-} +- +-/** +- * Attempt to close the database tab that sent the close request. +- * +- * @param index index of the database tab to close +- * @return true if database was closed successully +- */ +-bool DatabaseTabWidget::closeDatabaseTabFromSender() +-{ +- return closeDatabaseTab(qobject_cast(sender())); +-} +- +-/** +- * Attempt to close a database and remove its tab afterwards. +- * +- * @param index index of the database tab to close +- * @return true if database was closed successully +- */ +-bool DatabaseTabWidget::closeDatabaseTab(int index) +-{ +- return closeDatabaseTab(qobject_cast(widget(index))); +-} +- +-/** +- * Attempt to close a database and remove its tab afterwards. +- * +- * @param dbWidget \link DatabaseWidget to close +- * @return true if database was closed successully +- */ +-bool DatabaseTabWidget::closeDatabaseTab(DatabaseWidget* dbWidget) +-{ +- int tabIndex = indexOf(dbWidget); +- if (!dbWidget || tabIndex < 0) { +- return false; +- } +- +- QString filePath = dbWidget->database()->filePath(); +- if (!dbWidget->close()) { +- return false; +- } +- +- removeTab(tabIndex); +- dbWidget->deleteLater(); +- toggleTabbar(); +- emit databaseClosed(filePath); +- return true; +-} +- +-/** +- * Attempt to close all opened databases. +- * The attempt will be aborted with the first database that cannot be closed. +- * +- * @return true if all databases could be closed. +- */ +-bool DatabaseTabWidget::closeAllDatabaseTabs() +-{ +- // Attempt to lock all databases first to prevent closing only a portion of tabs +- if (lockDatabases()) { +- while (count() > 0) { +- if (!closeDatabaseTab(0)) { +- return false; +- } +- } +- return true; +- } +- +- return false; +-} +- +-bool DatabaseTabWidget::saveDatabase(int index) +-{ +- if (index == -1) { +- index = currentIndex(); +- } +- +- return databaseWidgetFromIndex(index)->save(); +-} +- +-bool DatabaseTabWidget::saveDatabaseAs(int index) +-{ +- if (index == -1) { +- index = currentIndex(); +- } +- +- auto* dbWidget = databaseWidgetFromIndex(index); +- bool ok = dbWidget->saveAs(); +- if (ok) { +- updateLastDatabases(dbWidget->database()->filePath()); +- } +- return ok; +-} +- +-bool DatabaseTabWidget::saveDatabaseBackup(int index) +-{ +- if (index == -1) { +- index = currentIndex(); +- } +- +- auto* dbWidget = databaseWidgetFromIndex(index); +- bool ok = dbWidget->saveBackup(); +- if (ok) { +- updateLastDatabases(dbWidget->database()->filePath()); +- } +- return ok; +-} +- +-void DatabaseTabWidget::closeDatabaseFromSender() +-{ +- auto* dbWidget = qobject_cast(sender()); +- Q_ASSERT(dbWidget); +- closeDatabaseTab(dbWidget); +-} +- +-void DatabaseTabWidget::exportToCsv() +-{ +- auto db = databaseWidgetFromIndex(currentIndex())->database(); +- if (!db) { +- Q_ASSERT(false); +- return; +- } +- +- if (!warnOnExport()) { +- return; +- } +- +- const QString fileName = fileDialog()->getSaveFileName( +- this, tr("Export database to CSV file"), QString(), tr("CSV file").append(" (*.csv)"), nullptr, nullptr); +- if (fileName.isEmpty()) { +- return; +- } +- +- CsvExporter csvExporter; +- if (!csvExporter.exportDatabase(fileName, db)) { +- emit messageGlobal(tr("Writing the CSV file failed.").append("\n").append(csvExporter.errorString()), +- MessageWidget::Error); +- } +-} +- +-void DatabaseTabWidget::exportToHtml() +-{ +- auto db = databaseWidgetFromIndex(currentIndex())->database(); +- if (!db) { +- Q_ASSERT(false); +- return; +- } +- +- if (!warnOnExport()) { +- return; +- } +- +- const QString fileName = fileDialog()->getSaveFileName( +- this, tr("Export database to HTML file"), QString(), tr("HTML file").append(" (*.html)"), nullptr, nullptr); +- if (fileName.isEmpty()) { +- return; +- } +- +- HtmlExporter htmlExporter; +- if (!htmlExporter.exportDatabase(fileName, db)) { +- emit messageGlobal(tr("Writing the HTML file failed.").append("\n").append(htmlExporter.errorString()), +- MessageWidget::Error); +- } +-} +- +-bool DatabaseTabWidget::warnOnExport() +-{ +- auto ans = +- MessageBox::question(this, +- tr("Export Confirmation"), +- tr("You are about to export your database to an unencrypted file. This will leave your " +- "passwords and sensitive information vulnerable! Are you sure you want to continue?"), +- MessageBox::Yes | MessageBox::No, +- MessageBox::No); +- return ans == MessageBox::Yes; +-} +- +-void DatabaseTabWidget::showDatabaseSecurity() +-{ +- currentDatabaseWidget()->switchToDatabaseSecurity(); +-} +- +-void DatabaseTabWidget::showDatabaseReports() +-{ +- currentDatabaseWidget()->switchToDatabaseReports(); +-} +- +-void DatabaseTabWidget::showDatabaseSettings() +-{ +- currentDatabaseWidget()->switchToDatabaseSettings(); +-} +- +-bool DatabaseTabWidget::isReadOnly(int index) const +-{ +- if (count() == 0) { +- return false; +- } +- +- if (index == -1) { +- index = currentIndex(); +- } +- +- auto db = databaseWidgetFromIndex(index)->database(); +- return db && db->isReadOnly(); +-} +- +-bool DatabaseTabWidget::isModified(int index) const +-{ +- if (count() == 0) { +- return false; +- } +- +- if (index == -1) { +- index = currentIndex(); +- } +- +- auto db = databaseWidgetFromIndex(index)->database(); +- return db && db->isModified(); +-} +- +-bool DatabaseTabWidget::canSave(int index) const +-{ +- return !isReadOnly(index) && isModified(index); +-} +- +-bool DatabaseTabWidget::hasLockableDatabases() const +-{ +- for (int i = 0, c = count(); i < c; ++i) { +- if (!databaseWidgetFromIndex(i)->isLocked()) { +- return true; +- } +- } +- return false; +-} +- +-/** +- * Get the tab's (original) display name without platform-specific +- * mangling that may occur when reading back the actual widget's \link tabText() +- * +- * @param index tab index +- * @return tab name +- */ +-QString DatabaseTabWidget::tabName(int index) +-{ +- if (index == -1 || index > count()) { +- return ""; +- } +- +- auto* dbWidget = databaseWidgetFromIndex(index); +- +- auto db = dbWidget->database(); +- Q_ASSERT(db); +- if (!db) { +- return ""; +- } +- +- QString tabName; +- +- if (!db->filePath().isEmpty()) { +- QFileInfo fileInfo(db->filePath()); +- +- if (db->metadata()->name().isEmpty()) { +- tabName = fileInfo.fileName(); +- } else { +- tabName = db->metadata()->name(); +- } +- +- setTabToolTip(index, fileInfo.absoluteFilePath()); +- } else { +- if (db->metadata()->name().isEmpty()) { +- tabName = tr("New Database"); +- } else { +- tabName = tr("%1 [New Database]", "Database tab name modifier").arg(db->metadata()->name()); +- } +- } +- +- if (dbWidget->isLocked()) { +- tabName = tr("%1 [Locked]", "Database tab name modifier").arg(tabName); +- } +- +- if (db->isReadOnly()) { +- tabName = tr("%1 [Read-only]", "Database tab name modifier").arg(tabName); +- } +- +- if (db->isModified()) { +- tabName.append("*"); +- } +- +- return tabName; +-} +- +-/** +- * Update of the given tab index or of the sending +- * DatabaseWidget if `index` == -1. +- */ +-void DatabaseTabWidget::updateTabName(int index) +-{ +- auto* dbWidget = databaseWidgetFromIndex(index); +- if (!dbWidget) { +- dbWidget = qobject_cast(sender()); +- } +- Q_ASSERT(dbWidget); +- if (!dbWidget) { +- return; +- } +- index = indexOf(dbWidget); +- setTabText(index, tabName(index)); +- emit tabNameChanged(); +-} +- +-DatabaseWidget* DatabaseTabWidget::databaseWidgetFromIndex(int index) const +-{ +- return qobject_cast(widget(index)); +-} +- +-DatabaseWidget* DatabaseTabWidget::currentDatabaseWidget() +-{ +- return qobject_cast(currentWidget()); +-} +- +-/** +- * Attempt to lock all open databases +- * +- * @return return true if all databases are locked +- */ +-bool DatabaseTabWidget::lockDatabases() +-{ +- int numLocked = 0; +- int c = count(); +- for (int i = 0; i < c; ++i) { +- auto dbWidget = databaseWidgetFromIndex(i); +- if (dbWidget->lock()) { +- ++numLocked; +- if (dbWidget->database()->filePath().isEmpty()) { +- // If we locked a database without a file close the tab +- closeDatabaseTab(dbWidget); +- } +- } +- } +- +- return numLocked == c; +-} +- +-/** +- * Unlock a database with an unlock popup dialog. +- * +- * @param dbWidget DatabaseWidget which to connect signals to +- * @param intent intent for unlocking +- */ +-void DatabaseTabWidget::unlockDatabaseInDialog(DatabaseWidget* dbWidget, DatabaseOpenDialog::Intent intent) +-{ +- unlockDatabaseInDialog(dbWidget, intent, dbWidget->database()->filePath()); +-} +- +-/** +- * Unlock a database with an unlock popup dialog. +- * +- * @param dbWidget DatabaseWidget which to connect signals to +- * @param intent intent for unlocking +- * @param file path of the database to be unlocked +- */ +-void DatabaseTabWidget::unlockDatabaseInDialog(DatabaseWidget* dbWidget, +- DatabaseOpenDialog::Intent intent, +- const QString& filePath) +-{ +- m_databaseOpenDialog->setTargetDatabaseWidget(dbWidget); +- m_databaseOpenDialog->setIntent(intent); +- m_databaseOpenDialog->setFilePath(filePath); +- +-#ifdef Q_OS_MACOS +- if (intent == DatabaseOpenDialog::Intent::AutoType || intent == DatabaseOpenDialog::Intent::Browser) { +- macUtils()->raiseOwnWindow(); +- Tools::wait(200); +- } +-#endif +- +- m_databaseOpenDialog->show(); +- m_databaseOpenDialog->raise(); +- m_databaseOpenDialog->activateWindow(); +-} +- +-/** +- * This function relock the pending database when autotype has been performed successfully +- * A database is marked as pending when it's unlocked after a global Auto-Type invocation +- */ +-void DatabaseTabWidget::relockPendingDatabase() +-{ +- if (!m_dbWidgetPendingLock || !config()->get(Config::Security_RelockAutoType).toBool()) { +- return; +- } +- +- if (m_dbWidgetPendingLock->isLocked() || !m_dbWidgetPendingLock->database()->isInitialized()) { +- m_dbWidgetPendingLock = nullptr; +- return; +- } +- +- m_dbWidgetPendingLock->lock(); +- m_dbWidgetPendingLock = nullptr; +-} +- +-void DatabaseTabWidget::updateLastDatabases(const QString& filename) +-{ +- if (!config()->get(Config::RememberLastDatabases).toBool()) { +- config()->remove(Config::LastDatabases); +- } else { +- QStringList lastDatabases = config()->get(Config::LastDatabases).toStringList(); +- lastDatabases.prepend(filename); +- lastDatabases.removeDuplicates(); +- +- while (lastDatabases.count() > config()->get(Config::NumberOfRememberedLastDatabases).toInt()) { +- lastDatabases.removeLast(); +- } +- config()->set(Config::LastDatabases, lastDatabases); +- } +-} +- +-void DatabaseTabWidget::emitActivateDatabaseChanged() +-{ +- emit activateDatabaseChanged(currentDatabaseWidget()); +-} +- +-void DatabaseTabWidget::emitDatabaseLockChanged() +-{ +- auto* dbWidget = qobject_cast(sender()); +- Q_ASSERT(dbWidget); +- if (!dbWidget) { +- return; +- } +- +- if (dbWidget->isLocked()) { +- emit databaseLocked(dbWidget); +- } else { +- emit databaseUnlocked(dbWidget); +- } +-} +- +-void DatabaseTabWidget::performGlobalAutoType() +-{ +- QList> unlockedDatabases; +- +- for (int i = 0, c = count(); i < c; ++i) { +- auto* dbWidget = databaseWidgetFromIndex(i); +- if (!dbWidget->isLocked()) { +- unlockedDatabases.append(dbWidget->database()); +- } +- } +- +- // TODO: allow for database selection during Auto-Type instead of using the current tab +- if (!unlockedDatabases.isEmpty()) { +- autoType()->performGlobalAutoType(unlockedDatabases); +- } else if (count() > 0) { +- if (config()->get(Config::Security_RelockAutoType).toBool()) { +- m_dbWidgetPendingLock = currentDatabaseWidget(); +- } +- unlockDatabaseInDialog(currentDatabaseWidget(), DatabaseOpenDialog::Intent::AutoType); +- } +-} +- +-void DatabaseTabWidget::performBrowserUnlock() +-{ +- auto dbWidget = currentDatabaseWidget(); +- if (dbWidget && dbWidget->isLocked()) { +- unlockDatabaseInDialog(dbWidget, DatabaseOpenDialog::Intent::Browser); +- } +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/DatabaseTabWidget.h keepassxc-2.6.4-patched/src/gui/DatabaseTabWidget.h +--- keepassxc-2.6.4-orig/src/gui/DatabaseTabWidget.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/DatabaseTabWidget.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,114 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_DATABASETABWIDGET_H +-#define KEEPASSX_DATABASETABWIDGET_H +- +-#include "DatabaseOpenDialog.h" +-#include "gui/MessageWidget.h" +- +-#include +-#include +- +-class Database; +-class DatabaseWidget; +-class DatabaseWidgetStateSync; +-class DatabaseOpenWidget; +- +-class DatabaseTabWidget : public QTabWidget +-{ +- Q_OBJECT +- +-public: +- explicit DatabaseTabWidget(QWidget* parent = nullptr); +- ~DatabaseTabWidget() override; +- void mergeDatabase(const QString& filePath); +- +- QString tabName(int index); +- DatabaseWidget* currentDatabaseWidget(); +- DatabaseWidget* databaseWidgetFromIndex(int index) const; +- +- bool isReadOnly(int index = -1) const; +- bool canSave(int index = -1) const; +- bool isModified(int index = -1) const; +- bool hasLockableDatabases() const; +- +-public slots: +- void addDatabaseTab(const QString& filePath, +- bool inBackground = false, +- const QString& password = {}, +- const QString& keyfile = {}); +- void addDatabaseTab(DatabaseWidget* dbWidget, bool inBackground = false); +- bool closeDatabaseTab(int index); +- bool closeDatabaseTab(DatabaseWidget* dbWidget); +- bool closeAllDatabaseTabs(); +- bool closeCurrentDatabaseTab(); +- bool closeDatabaseTabFromSender(); +- void updateTabName(int index = -1); +- +- DatabaseWidget* newDatabase(); +- void openDatabase(); +- void mergeDatabase(); +- void importCsv(); +- void importKeePass1Database(); +- void importOpVaultDatabase(); +- bool saveDatabase(int index = -1); +- bool saveDatabaseAs(int index = -1); +- bool saveDatabaseBackup(int index = -1); +- void exportToCsv(); +- void exportToHtml(); +- +- bool lockDatabases(); +- void closeDatabaseFromSender(); +- void unlockDatabaseInDialog(DatabaseWidget* dbWidget, DatabaseOpenDialog::Intent intent); +- void unlockDatabaseInDialog(DatabaseWidget* dbWidget, DatabaseOpenDialog::Intent intent, const QString& filePath); +- void relockPendingDatabase(); +- +- void showDatabaseSecurity(); +- void showDatabaseReports(); +- void showDatabaseSettings(); +- void performGlobalAutoType(); +- void performBrowserUnlock(); +- +-signals: +- void databaseOpened(DatabaseWidget* dbWidget); +- void databaseClosed(const QString& filePath); +- void databaseUnlocked(DatabaseWidget* dbWidget); +- void databaseLocked(DatabaseWidget* dbWidget); +- void activateDatabaseChanged(DatabaseWidget* dbWidget); +- void tabNameChanged(); +- void tabVisibilityChanged(bool tabsVisible); +- void messageGlobal(const QString&, MessageWidget::MessageType type); +- void messageDismissGlobal(); +- void databaseUnlockDialogFinished(bool accepted, DatabaseWidget* dbWidget); +- +-private slots: +- void toggleTabbar(); +- void emitActivateDatabaseChanged(); +- void emitDatabaseLockChanged(); +- +-private: +- QSharedPointer execNewDatabaseWizard(); +- void updateLastDatabases(const QString& filename); +- bool warnOnExport(); +- +- QPointer m_dbWidgetStateSync; +- QPointer m_dbWidgetPendingLock; +- QPointer m_databaseOpenDialog; +-}; +- +-#endif // KEEPASSX_DATABASETABWIDGET_H +diff -urNr keepassxc-2.6.4-orig/src/gui/DatabaseWidget.cpp keepassxc-2.6.4-patched/src/gui/DatabaseWidget.cpp +--- keepassxc-2.6.4-orig/src/gui/DatabaseWidget.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/DatabaseWidget.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,2119 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * Copyright (C) 2010 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "DatabaseWidget.h" +- +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-#include "autotype/AutoType.h" +-#include "core/Config.h" +-#include "core/Database.h" +-#include "core/EntrySearcher.h" +-#include "core/FileWatcher.h" +-#include "core/Group.h" +-#include "core/Merger.h" +-#include "core/Metadata.h" +-#include "core/Resources.h" +-#include "core/Tools.h" +-#include "format/KeePass2Reader.h" +-#include "gui/Clipboard.h" +-#include "gui/CloneDialog.h" +-#include "gui/DatabaseOpenDialog.h" +-#include "gui/DatabaseOpenWidget.h" +-#include "gui/EntryPreviewWidget.h" +-#include "gui/FileDialog.h" +-#include "gui/KeePass1OpenWidget.h" +-#include "gui/MainWindow.h" +-#include "gui/MessageBox.h" +-#include "gui/OpVaultOpenWidget.h" +-#include "gui/TotpDialog.h" +-#include "gui/TotpExportSettingsDialog.h" +-#include "gui/TotpSetupDialog.h" +-#include "gui/dbsettings/DatabaseSettingsDialog.h" +-#include "gui/entry/EditEntryWidget.h" +-#include "gui/entry/EntryView.h" +-#include "gui/group/EditGroupWidget.h" +-#include "gui/group/GroupView.h" +-#include "gui/reports/ReportsDialog.h" +-#include "keeshare/KeeShare.h" +-#include "touchid/TouchID.h" +- +-#ifdef WITH_XC_NETWORKING +-#include "gui/IconDownloaderDialog.h" +-#endif +- +-#ifdef Q_OS_LINUX +-#include +-#endif +- +-#ifdef WITH_XC_SSHAGENT +-#include "sshagent/SSHAgent.h" +-#endif +- +-DatabaseWidget::DatabaseWidget(QSharedPointer db, QWidget* parent) +- : QStackedWidget(parent) +- , m_db(std::move(db)) +- , m_mainWidget(new QWidget(this)) +- , m_mainSplitter(new QSplitter(m_mainWidget)) +- , m_messageWidget(new MessageWidget(this)) +- , m_previewView(new EntryPreviewWidget(this)) +- , m_previewSplitter(new QSplitter(m_mainWidget)) +- , m_searchingLabel(new QLabel(this)) +- , m_shareLabel(new QLabel(this)) +- , m_csvImportWizard(new CsvImportWizard(this)) +- , m_editEntryWidget(new EditEntryWidget(this)) +- , m_editGroupWidget(new EditGroupWidget(this)) +- , m_historyEditEntryWidget(new EditEntryWidget(this)) +- , m_reportsDialog(new ReportsDialog(this)) +- , m_databaseSettingDialog(new DatabaseSettingsDialog(this)) +- , m_databaseOpenWidget(new DatabaseOpenWidget(this)) +- , m_keepass1OpenWidget(new KeePass1OpenWidget(this)) +- , m_opVaultOpenWidget(new OpVaultOpenWidget(this)) +- , m_groupView(new GroupView(m_db.data(), m_mainSplitter)) +- , m_saveAttempts(0) +-{ +- Q_ASSERT(m_db); +- +- m_messageWidget->setHidden(true); +- +- auto* mainLayout = new QVBoxLayout(); +- mainLayout->addWidget(m_messageWidget); +- auto* hbox = new QHBoxLayout(); +- mainLayout->addLayout(hbox); +- hbox->addWidget(m_mainSplitter); +- m_mainWidget->setLayout(mainLayout); +- +- auto* rightHandSideWidget = new QWidget(m_mainSplitter); +- auto* vbox = new QVBoxLayout(); +- vbox->setMargin(0); +- vbox->addWidget(m_searchingLabel); +-#ifdef WITH_XC_KEESHARE +- vbox->addWidget(m_shareLabel); +-#endif +- vbox->addWidget(m_previewSplitter); +- rightHandSideWidget->setLayout(vbox); +- m_entryView = new EntryView(rightHandSideWidget); +- +- m_mainSplitter->setChildrenCollapsible(false); +- m_mainSplitter->addWidget(m_groupView); +- m_mainSplitter->addWidget(rightHandSideWidget); +- m_mainSplitter->setStretchFactor(0, 30); +- m_mainSplitter->setStretchFactor(1, 70); +- +- m_previewSplitter->setOrientation(Qt::Vertical); +- m_previewSplitter->setChildrenCollapsible(true); +- +- m_groupView->setObjectName("groupView"); +- m_groupView->setContextMenuPolicy(Qt::CustomContextMenu); +- connect(m_groupView, SIGNAL(customContextMenuRequested(QPoint)), SLOT(emitGroupContextMenuRequested(QPoint))); +- +- m_entryView->setObjectName("entryView"); +- m_entryView->setContextMenuPolicy(Qt::CustomContextMenu); +- m_entryView->displayGroup(m_db->rootGroup()); +- connect(m_entryView, SIGNAL(customContextMenuRequested(QPoint)), SLOT(emitEntryContextMenuRequested(QPoint))); +- +- // Add a notification for when we are searching +- m_searchingLabel->setObjectName("SearchBanner"); +- m_searchingLabel->setText(tr("Searching...")); +- m_searchingLabel->setAlignment(Qt::AlignCenter); +- m_searchingLabel->setVisible(false); +- +-#ifdef WITH_XC_KEESHARE +- m_shareLabel->setObjectName("KeeShareBanner"); +- m_shareLabel->setText(tr("Shared group...")); +- m_shareLabel->setAlignment(Qt::AlignCenter); +- m_shareLabel->setVisible(false); +-#endif +- +- m_previewView->setObjectName("previewWidget"); +- m_previewView->hide(); +- m_previewSplitter->addWidget(m_entryView); +- m_previewSplitter->addWidget(m_previewView); +- m_previewSplitter->setStretchFactor(0, 100); +- m_previewSplitter->setStretchFactor(1, 0); +- m_previewSplitter->setSizes({1, 1}); +- +- m_editEntryWidget->setObjectName("editEntryWidget"); +- m_editGroupWidget->setObjectName("editGroupWidget"); +- m_csvImportWizard->setObjectName("csvImportWizard"); +- m_reportsDialog->setObjectName("reportsDialog"); +- m_databaseSettingDialog->setObjectName("databaseSettingsDialog"); +- m_databaseOpenWidget->setObjectName("databaseOpenWidget"); +- m_keepass1OpenWidget->setObjectName("keepass1OpenWidget"); +- m_opVaultOpenWidget->setObjectName("opVaultOpenWidget"); +- +- addChildWidget(m_mainWidget); +- addChildWidget(m_editEntryWidget); +- addChildWidget(m_editGroupWidget); +- addChildWidget(m_reportsDialog); +- addChildWidget(m_databaseSettingDialog); +- addChildWidget(m_historyEditEntryWidget); +- addChildWidget(m_databaseOpenWidget); +- addChildWidget(m_csvImportWizard); +- addChildWidget(m_keepass1OpenWidget); +- addChildWidget(m_opVaultOpenWidget); +- +- // clang-format off +- connect(m_mainSplitter, SIGNAL(splitterMoved(int,int)), SIGNAL(mainSplitterSizesChanged())); +- connect(m_previewSplitter, SIGNAL(splitterMoved(int,int)), SIGNAL(previewSplitterSizesChanged())); +- connect(this, SIGNAL(currentModeChanged(DatabaseWidget::Mode)), m_previewView, SLOT(setDatabaseMode(DatabaseWidget::Mode))); +- connect(m_previewView, SIGNAL(errorOccurred(QString)), SLOT(showErrorMessage(QString))); +- connect(m_previewView, SIGNAL(entryUrlActivated(Entry*)), SLOT(openUrlForEntry(Entry*))); +- connect(m_entryView, SIGNAL(viewStateChanged()), SIGNAL(entryViewStateChanged())); +- connect(m_groupView, SIGNAL(groupSelectionChanged()), SLOT(onGroupChanged())); +- connect(m_groupView, SIGNAL(groupSelectionChanged()), SIGNAL(groupChanged())); +- connect(m_groupView, &GroupView::groupFocused, this, [this] { m_previewView->setGroup(currentGroup()); }); +- connect(m_entryView, SIGNAL(entryActivated(Entry*,EntryModel::ModelColumn)), +- SLOT(entryActivationSignalReceived(Entry*,EntryModel::ModelColumn))); +- connect(m_entryView, SIGNAL(entrySelectionChanged(Entry*)), SLOT(onEntryChanged(Entry*))); +- connect(m_editEntryWidget, SIGNAL(editFinished(bool)), SLOT(switchToMainView(bool))); +- connect(m_editEntryWidget, SIGNAL(historyEntryActivated(Entry*)), SLOT(switchToHistoryView(Entry*))); +- connect(m_historyEditEntryWidget, SIGNAL(editFinished(bool)), SLOT(switchBackToEntryEdit())); +- connect(m_editGroupWidget, SIGNAL(editFinished(bool)), SLOT(switchToMainView(bool))); +- connect(m_reportsDialog, SIGNAL(editFinished(bool)), SLOT(switchToMainView(bool))); +- connect(m_databaseSettingDialog, SIGNAL(editFinished(bool)), SLOT(switchToMainView(bool))); +- connect(m_databaseOpenWidget, SIGNAL(dialogFinished(bool)), SLOT(loadDatabase(bool))); +- connect(m_keepass1OpenWidget, SIGNAL(dialogFinished(bool)), SLOT(loadDatabase(bool))); +- connect(m_opVaultOpenWidget, SIGNAL(dialogFinished(bool)), SLOT(loadDatabase(bool))); +- connect(m_csvImportWizard, SIGNAL(importFinished(bool)), SLOT(csvImportFinished(bool))); +- connect(this, SIGNAL(currentChanged(int)), SLOT(emitCurrentModeChanged())); +- // clang-format on +- +- connectDatabaseSignals(); +- +- m_blockAutoSave = false; +- +- m_EntrySearcher = new EntrySearcher(false); +- m_searchLimitGroup = config()->get(Config::SearchLimitGroup).toBool(); +- +-#ifdef WITH_XC_KEESHARE +- // We need to reregister the database to allow exports +- // from a newly created database +- KeeShare::instance()->connectDatabase(m_db, {}); +-#endif +- +- if (m_db->isInitialized()) { +- switchToMainView(); +- } else { +- switchToOpenDatabase(); +- } +-} +- +-DatabaseWidget::DatabaseWidget(const QString& filePath, QWidget* parent) +- : DatabaseWidget(QSharedPointer::create(filePath), parent) +-{ +-} +- +-DatabaseWidget::~DatabaseWidget() +-{ +- delete m_EntrySearcher; +-} +- +-QSharedPointer DatabaseWidget::database() const +-{ +- return m_db; +-} +- +-DatabaseWidget::Mode DatabaseWidget::currentMode() const +-{ +- if (currentWidget() == nullptr) { +- return Mode::None; +- } else if (currentWidget() == m_mainWidget) { +- return Mode::ViewMode; +- } else if (currentWidget() == m_databaseOpenWidget || currentWidget() == m_keepass1OpenWidget) { +- return Mode::LockedMode; +- } else if (currentWidget() == m_csvImportWizard) { +- return Mode::ImportMode; +- } else { +- return Mode::EditMode; +- } +-} +- +-bool DatabaseWidget::isLocked() const +-{ +- return currentMode() == Mode::LockedMode; +-} +- +-bool DatabaseWidget::isSaving() const +-{ +- return m_db->isSaving(); +-} +- +-bool DatabaseWidget::isSorted() const +-{ +- return m_entryView->isSorted(); +-} +- +-bool DatabaseWidget::isSearchActive() const +-{ +- return m_entryView->inSearchMode(); +-} +- +-bool DatabaseWidget::isEntryViewActive() const +-{ +- return currentWidget() == m_mainWidget; +-} +- +-bool DatabaseWidget::isEntryEditActive() const +-{ +- return currentWidget() == m_editEntryWidget; +-} +- +-bool DatabaseWidget::isGroupEditActive() const +-{ +- return currentWidget() == m_editGroupWidget; +-} +- +-bool DatabaseWidget::isEditWidgetModified() const +-{ +- if (currentWidget() == m_editEntryWidget) { +- return m_editEntryWidget->isModified(); +- } else if (currentWidget() == m_editGroupWidget) { +- return m_editGroupWidget->isModified(); +- } +- return false; +-} +- +-QList DatabaseWidget::mainSplitterSizes() const +-{ +- return m_mainSplitter->sizes(); +-} +- +-void DatabaseWidget::setMainSplitterSizes(const QList& sizes) +-{ +- m_mainSplitter->setSizes(sizes); +-} +- +-QList DatabaseWidget::previewSplitterSizes() const +-{ +- return m_previewSplitter->sizes(); +-} +- +-void DatabaseWidget::setPreviewSplitterSizes(const QList& sizes) +-{ +- m_previewSplitter->setSizes(sizes); +-} +- +-/** +- * Get current view state of entry view +- */ +-QByteArray DatabaseWidget::entryViewState() const +-{ +- return m_entryView->viewState(); +-} +- +-/** +- * Set view state of entry view +- */ +-bool DatabaseWidget::setEntryViewState(const QByteArray& state) const +-{ +- return m_entryView->setViewState(state); +-} +- +-void DatabaseWidget::clearAllWidgets() +-{ +- m_editEntryWidget->clear(); +- m_historyEditEntryWidget->clear(); +- m_editGroupWidget->clear(); +-} +- +-void DatabaseWidget::emitCurrentModeChanged() +-{ +- emit currentModeChanged(currentMode()); +-} +- +-void DatabaseWidget::createEntry() +-{ +- Q_ASSERT(m_groupView->currentGroup()); +- if (!m_groupView->currentGroup()) { +- return; +- } +- +- m_newEntry.reset(new Entry()); +- +- if (isSearchActive()) { +- m_newEntry->setTitle(getCurrentSearch()); +- endSearch(); +- } +- m_newEntry->setUuid(QUuid::createUuid()); +- m_newEntry->setUsername(m_db->metadata()->defaultUserName()); +- m_newParent = m_groupView->currentGroup(); +- m_newParent->applyGroupIconOnCreateTo(m_newEntry.data()); +- switchToEntryEdit(m_newEntry.data(), true); +-} +- +-void DatabaseWidget::replaceDatabase(QSharedPointer db) +-{ +- Q_ASSERT(!isEntryEditActive() && !isGroupEditActive()); +- +- // Save off new parent UUID which will be valid when creating a new entry +- QUuid newParentUuid; +- if (m_newParent) { +- newParentUuid = m_newParent->uuid(); +- } +- +- // TODO: instead of increasing the ref count temporarily, there should be a clean +- // break from the old database. Without this crashes occur due to the change +- // signals triggering dangling pointers. +- auto oldDb = m_db; +- m_db = std::move(db); +- connectDatabaseSignals(); +- m_groupView->changeDatabase(m_db); +- +- // Restore the new parent group pointer, if not found default to the root group +- // this prevents data loss when merging a database while creating a new entry +- if (!newParentUuid.isNull()) { +- m_newParent = m_db->rootGroup()->findGroupByUuid(newParentUuid); +- if (!m_newParent) { +- m_newParent = m_db->rootGroup(); +- } +- } +- +- emit databaseReplaced(oldDb, m_db); +- +-#if defined(WITH_XC_KEESHARE) +- KeeShare::instance()->connectDatabase(m_db, oldDb); +-#else +- // Keep the instance active till the end of this function +- Q_UNUSED(oldDb); +-#endif +- +- oldDb->releaseData(); +-} +- +-void DatabaseWidget::cloneEntry() +-{ +- auto currentEntry = currentSelectedEntry(); +- Q_ASSERT(currentEntry); +- if (!currentEntry) { +- return; +- } +- +- auto cloneDialog = new CloneDialog(this, m_db.data(), currentEntry); +- cloneDialog->show(); +-} +- +-void DatabaseWidget::showTotp() +-{ +- auto currentEntry = currentSelectedEntry(); +- Q_ASSERT(currentEntry); +- if (!currentEntry) { +- return; +- } +- +- auto totpDialog = new TotpDialog(this, currentEntry); +- connect(this, &DatabaseWidget::databaseLockRequested, totpDialog, &TotpDialog::close); +- totpDialog->open(); +-} +- +-void DatabaseWidget::copyTotp() +-{ +- auto currentEntry = currentSelectedEntry(); +- Q_ASSERT(currentEntry); +- if (!currentEntry) { +- return; +- } +- setClipboardTextAndMinimize(currentEntry->totp()); +-} +- +-void DatabaseWidget::setupTotp() +-{ +- auto currentEntry = currentSelectedEntry(); +- Q_ASSERT(currentEntry); +- if (!currentEntry) { +- return; +- } +- +- auto setupTotpDialog = new TotpSetupDialog(this, currentEntry); +- connect(setupTotpDialog, SIGNAL(totpUpdated()), SIGNAL(entrySelectionChanged())); +- connect(this, &DatabaseWidget::databaseLockRequested, setupTotpDialog, &TotpSetupDialog::close); +- setupTotpDialog->open(); +-} +- +-void DatabaseWidget::deleteSelectedEntries() +-{ +- const QModelIndexList selected = m_entryView->selectionModel()->selectedRows(); +- if (selected.isEmpty()) { +- return; +- } +- +- // Resolve entries from the selection model +- QList selectedEntries; +- for (const QModelIndex& index : selected) { +- selectedEntries.append(m_entryView->entryFromIndex(index)); +- } +- +- deleteEntries(std::move(selectedEntries)); +-} +- +-void DatabaseWidget::deleteEntries(QList selectedEntries) +-{ +- // Confirm entry removal before moving forward +- auto* recycleBin = m_db->metadata()->recycleBin(); +- bool permanent = (recycleBin && recycleBin->findEntryByUuid(selectedEntries.first()->uuid())) +- || !m_db->metadata()->recycleBinEnabled(); +- +- if (!confirmDeleteEntries(selectedEntries, permanent)) { +- return; +- } +- +- // Find references to selected entries and prompt for direction if necessary +- auto it = selectedEntries.begin(); +- while (it != selectedEntries.end()) { +- auto references = m_db->rootGroup()->referencesRecursive(*it); +- if (!references.isEmpty()) { +- // Ignore references that are selected for deletion +- for (auto* entry : selectedEntries) { +- references.removeAll(entry); +- } +- +- if (!references.isEmpty()) { +- // Prompt for reference handling +- auto result = MessageBox::question( +- this, +- tr("Replace references to entry?"), +- tr("Entry \"%1\" has %2 reference(s). " +- "Do you want to overwrite references with values, skip this entry, or delete anyway?", +- "", +- references.size()) +- .arg((*it)->title().toHtmlEscaped()) +- .arg(references.size()), +- MessageBox::Overwrite | MessageBox::Skip | MessageBox::Delete, +- MessageBox::Overwrite); +- +- if (result == MessageBox::Overwrite) { +- for (auto* entry : references) { +- entry->replaceReferencesWithValues(*it); +- } +- } else if (result == MessageBox::Skip) { +- it = selectedEntries.erase(it); +- continue; +- } +- } +- } +- +- it++; +- } +- +- if (permanent) { +- for (auto* entry : asConst(selectedEntries)) { +- delete entry; +- } +- } else { +- for (auto* entry : asConst(selectedEntries)) { +- m_db->recycleEntry(entry); +- } +- } +- +- refreshSearch(); +- +- m_entryView->setFirstEntryActive(); +- auto* currentEntry = currentSelectedEntry(); +- if (currentEntry) { +- m_previewView->setEntry(currentEntry); +- } else { +- m_previewView->setGroup(groupView()->currentGroup()); +- } +-} +- +-bool DatabaseWidget::confirmDeleteEntries(QList entries, bool permanent) +-{ +- if (entries.isEmpty()) { +- return false; +- } +- +- if (permanent) { +- QString prompt; +- if (entries.size() == 1) { +- prompt = tr("Do you really want to delete the entry \"%1\" for good?") +- .arg(entries.first()->title().toHtmlEscaped()); +- } else { +- prompt = tr("Do you really want to delete %n entry(s) for good?", "", entries.size()); +- } +- +- auto answer = MessageBox::question(this, +- tr("Delete entry(s)?", "", entries.size()), +- prompt, +- MessageBox::Delete | MessageBox::Cancel, +- MessageBox::Cancel); +- +- return answer == MessageBox::Delete; +- } else { +- QString prompt; +- if (entries.size() == 1) { +- prompt = tr("Do you really want to move entry \"%1\" to the recycle bin?") +- .arg(entries.first()->title().toHtmlEscaped()); +- } else { +- prompt = tr("Do you really want to move %n entry(s) to the recycle bin?", "", entries.size()); +- } +- +- auto answer = MessageBox::question(this, +- tr("Move entry(s) to recycle bin?", "", entries.size()), +- prompt, +- MessageBox::Move | MessageBox::Cancel, +- MessageBox::Cancel); +- +- return answer == MessageBox::Move; +- } +-} +- +-void DatabaseWidget::setFocus(Qt::FocusReason reason) +-{ +- if (reason == Qt::BacktabFocusReason) { +- m_previewView->setFocus(); +- } else { +- m_groupView->setFocus(); +- } +-} +- +-void DatabaseWidget::focusOnEntries(bool editIfFocused) +-{ +- if (isEntryViewActive()) { +- if (editIfFocused && m_entryView->hasFocus()) { +- switchToEntryEdit(); +- } else { +- m_entryView->setFocus(); +- } +- } +-} +- +-void DatabaseWidget::focusOnGroups(bool editIfFocused) +-{ +- if (isEntryViewActive()) { +- if (editIfFocused && m_groupView->hasFocus()) { +- switchToGroupEdit(); +- } else { +- m_groupView->setFocus(); +- } +- } +-} +- +-void DatabaseWidget::moveEntryUp() +-{ +- auto currentEntry = currentSelectedEntry(); +- if (currentEntry) { +- currentEntry->moveUp(); +- m_entryView->setCurrentEntry(currentEntry); +- } +-} +- +-void DatabaseWidget::moveEntryDown() +-{ +- auto currentEntry = currentSelectedEntry(); +- if (currentEntry) { +- currentEntry->moveDown(); +- m_entryView->setCurrentEntry(currentEntry); +- } +-} +- +-void DatabaseWidget::copyTitle() +-{ +- auto currentEntry = currentSelectedEntry(); +- if (currentEntry) { +- setClipboardTextAndMinimize(currentEntry->resolveMultiplePlaceholders(currentEntry->title())); +- } +-} +- +-void DatabaseWidget::copyUsername() +-{ +- auto currentEntry = currentSelectedEntry(); +- if (currentEntry) { +- setClipboardTextAndMinimize(currentEntry->resolveMultiplePlaceholders(currentEntry->username())); +- } +-} +- +-void DatabaseWidget::copyPassword() +-{ +- // QTextEdit does not properly trap Ctrl+C copy shortcut +- // if a text edit has focus pass the copy operation to it +- auto textEdit = qobject_cast(focusWidget()); +- if (textEdit) { +- textEdit->copy(); +- return; +- } +- +- auto currentEntry = currentSelectedEntry(); +- if (currentEntry) { +- setClipboardTextAndMinimize(currentEntry->resolveMultiplePlaceholders(currentEntry->password())); +- } +-} +- +-void DatabaseWidget::copyURL() +-{ +- auto currentEntry = currentSelectedEntry(); +- if (currentEntry) { +- setClipboardTextAndMinimize(currentEntry->resolveMultiplePlaceholders(currentEntry->url())); +- } +-} +- +-void DatabaseWidget::copyNotes() +-{ +- auto currentEntry = currentSelectedEntry(); +- if (currentEntry) { +- setClipboardTextAndMinimize(currentEntry->resolveMultiplePlaceholders(currentEntry->notes())); +- } +-} +- +-void DatabaseWidget::copyAttribute(QAction* action) +-{ +- auto currentEntry = currentSelectedEntry(); +- if (currentEntry) { +- setClipboardTextAndMinimize( +- currentEntry->resolveMultiplePlaceholders(currentEntry->attributes()->value(action->data().toString()))); +- } +-} +- +-void DatabaseWidget::showTotpKeyQrCode() +-{ +- auto currentEntry = currentSelectedEntry(); +- if (currentEntry) { +- auto totpDisplayDialog = new TotpExportSettingsDialog(this, currentEntry); +- connect(this, &DatabaseWidget::databaseLockRequested, totpDisplayDialog, &TotpExportSettingsDialog::close); +- totpDisplayDialog->open(); +- } +-} +- +-void DatabaseWidget::setClipboardTextAndMinimize(const QString& text) +-{ +- clipboard()->setText(text); +- if (config()->get(Config::HideWindowOnCopy).toBool()) { +- if (config()->get(Config::MinimizeOnCopy).toBool()) { +- getMainWindow()->minimizeOrHide(); +- } else if (config()->get(Config::DropToBackgroundOnCopy).toBool()) { +- window()->lower(); +- } +- } +-} +- +-#ifdef WITH_XC_SSHAGENT +-void DatabaseWidget::addToAgent() +-{ +- Entry* currentEntry = m_entryView->currentEntry(); +- Q_ASSERT(currentEntry); +- if (!currentEntry) { +- return; +- } +- +- KeeAgentSettings settings; +- if (!settings.fromEntry(currentEntry)) { +- return; +- } +- +- OpenSSHKey key; +- if (settings.toOpenSSHKey(currentEntry, key, true)) { +- SSHAgent::instance()->addIdentity(key, settings, database()->uuid()); +- } else { +- m_messageWidget->showMessage(key.errorString(), MessageWidget::Error); +- } +-} +- +-void DatabaseWidget::removeFromAgent() +-{ +- Entry* currentEntry = m_entryView->currentEntry(); +- Q_ASSERT(currentEntry); +- if (!currentEntry) { +- return; +- } +- +- KeeAgentSettings settings; +- if (!settings.fromEntry(currentEntry)) { +- return; +- } +- +- OpenSSHKey key; +- if (settings.toOpenSSHKey(currentEntry, key, false)) { +- SSHAgent::instance()->removeIdentity(key); +- } else { +- m_messageWidget->showMessage(key.errorString(), MessageWidget::Error); +- } +-} +-#endif +- +-void DatabaseWidget::performAutoType() +-{ +- auto currentEntry = currentSelectedEntry(); +- if (currentEntry) { +- autoType()->performAutoType(currentEntry, window()); +- } +-} +- +-void DatabaseWidget::performAutoTypeUsername() +-{ +- auto currentEntry = currentSelectedEntry(); +- if (currentEntry) { +- autoType()->performAutoTypeWithSequence(currentEntry, QStringLiteral("{USERNAME}"), window()); +- } +-} +- +-void DatabaseWidget::performAutoTypeUsernameEnter() +-{ +- auto currentEntry = currentSelectedEntry(); +- if (currentEntry) { +- autoType()->performAutoTypeWithSequence(currentEntry, QStringLiteral("{USERNAME}{ENTER}"), window()); +- } +-} +- +-void DatabaseWidget::performAutoTypePassword() +-{ +- auto currentEntry = currentSelectedEntry(); +- if (currentEntry) { +- autoType()->performAutoTypeWithSequence(currentEntry, QStringLiteral("{PASSWORD}"), window()); +- } +-} +- +-void DatabaseWidget::performAutoTypePasswordEnter() +-{ +- auto currentEntry = currentSelectedEntry(); +- if (currentEntry) { +- autoType()->performAutoTypeWithSequence(currentEntry, QStringLiteral("{PASSWORD}{ENTER}"), window()); +- } +-} +- +-void DatabaseWidget::openUrl() +-{ +- auto currentEntry = currentSelectedEntry(); +- if (currentEntry) { +- openUrlForEntry(currentEntry); +- } +-} +- +-void DatabaseWidget::downloadSelectedFavicons() +-{ +-#ifdef WITH_XC_NETWORKING +- QList selectedEntries; +- for (const auto& index : m_entryView->selectionModel()->selectedRows()) { +- selectedEntries.append(m_entryView->entryFromIndex(index)); +- } +- +- // Force download even if icon already exists +- performIconDownloads(selectedEntries, true); +-#endif +-} +- +-void DatabaseWidget::downloadAllFavicons() +-{ +-#ifdef WITH_XC_NETWORKING +- auto currentGroup = m_groupView->currentGroup(); +- if (currentGroup) { +- performIconDownloads(currentGroup->entries()); +- } +-#endif +-} +- +-void DatabaseWidget::performIconDownloads(const QList& entries, bool force) +-{ +-#ifdef WITH_XC_NETWORKING +- auto* iconDownloaderDialog = new IconDownloaderDialog(this); +- connect(this, SIGNAL(databaseLockRequested()), iconDownloaderDialog, SLOT(close())); +- iconDownloaderDialog->downloadFavicons(m_db, entries, force); +-#else +- Q_UNUSED(entries); +- Q_UNUSED(force); +-#endif +-} +- +-void DatabaseWidget::openUrlForEntry(Entry* entry) +-{ +- Q_ASSERT(entry); +- if (!entry) { +- return; +- } +- +- QString cmdString = entry->resolveMultiplePlaceholders(entry->url()); +- if (cmdString.startsWith("cmd://")) { +- // check if decision to execute command was stored +- bool launch = (entry->attributes()->value(EntryAttributes::RememberCmdExecAttr) == "1"); +- +- // otherwise ask user +- if (!launch && cmdString.length() > 6) { +- QString cmdTruncated = entry->resolveMultiplePlaceholders(entry->maskPasswordPlaceholders(entry->url())); +- cmdTruncated = cmdTruncated.mid(6); +- if (cmdTruncated.length() > 400) { +- cmdTruncated = cmdTruncated.left(400) + " […]"; +- } +- QMessageBox msgbox(QMessageBox::Icon::Question, +- tr("Execute command?"), +- tr("Do you really want to execute the following command?

%1
") +- .arg(cmdTruncated.toHtmlEscaped()), +- QMessageBox::Yes | QMessageBox::No, +- this); +- msgbox.setDefaultButton(QMessageBox::No); +- +- QCheckBox* checkbox = new QCheckBox(tr("Remember my choice"), &msgbox); +- msgbox.setCheckBox(checkbox); +- bool remember = false; +- QObject::connect(checkbox, &QCheckBox::stateChanged, [&](int state) { +- if (static_cast(state) == Qt::CheckState::Checked) { +- remember = true; +- } +- }); +- +- int result = msgbox.exec(); +- launch = (result == QMessageBox::Yes); +- +- if (remember) { +- entry->attributes()->set(EntryAttributes::RememberCmdExecAttr, result == QMessageBox::Yes ? "1" : "0"); +- } +- } +- +- if (launch) { +- QProcess::startDetached(cmdString.mid(6)); +- +- if (config()->get(Config::MinimizeOnOpenUrl).toBool()) { +- getMainWindow()->minimizeOrHide(); +- } +- } +- } else if (cmdString.startsWith("kdbx://")) { +- openDatabaseFromEntry(entry, false); +- } else { +- QUrl url = QUrl::fromUserInput(entry->resolveMultiplePlaceholders(entry->url())); +- if (!url.isEmpty()) { +- QDesktopServices::openUrl(url); +- +- if (config()->get(Config::MinimizeOnOpenUrl).toBool()) { +- getMainWindow()->minimizeOrHide(); +- } +- } +- } +-} +- +-Entry* DatabaseWidget::currentSelectedEntry() +-{ +- if (currentWidget() == m_editEntryWidget) { +- return m_editEntryWidget->currentEntry(); +- } +- +- return m_entryView->currentEntry(); +-} +- +-void DatabaseWidget::createGroup() +-{ +- Q_ASSERT(m_groupView->currentGroup()); +- if (!m_groupView->currentGroup()) { +- return; +- } +- +- m_newGroup.reset(new Group()); +- m_newGroup->setUuid(QUuid::createUuid()); +- m_newParent = m_groupView->currentGroup(); +- switchToGroupEdit(m_newGroup.data(), true); +-} +- +-void DatabaseWidget::deleteGroup() +-{ +- Group* currentGroup = m_groupView->currentGroup(); +- Q_ASSERT(currentGroup && canDeleteCurrentGroup()); +- if (!currentGroup || !canDeleteCurrentGroup()) { +- return; +- } +- +- auto* recycleBin = m_db->metadata()->recycleBin(); +- bool inRecycleBin = recycleBin && recycleBin->findGroupByUuid(currentGroup->uuid()); +- bool isRecycleBin = recycleBin && (currentGroup == recycleBin); +- bool isRecycleBinSubgroup = recycleBin && currentGroup->findGroupByUuid(recycleBin->uuid()); +- if (inRecycleBin || isRecycleBin || isRecycleBinSubgroup || !m_db->metadata()->recycleBinEnabled()) { +- auto result = MessageBox::question( +- this, +- tr("Delete group"), +- tr("Do you really want to delete the group \"%1\" for good?").arg(currentGroup->name().toHtmlEscaped()), +- MessageBox::Delete | MessageBox::Cancel, +- MessageBox::Cancel); +- +- if (result == MessageBox::Delete) { +- delete currentGroup; +- } +- } else { +- auto result = MessageBox::question(this, +- tr("Move group to recycle bin?"), +- tr("Do you really want to move the group " +- "\"%1\" to the recycle bin?") +- .arg(currentGroup->name().toHtmlEscaped()), +- MessageBox::Move | MessageBox::Cancel, +- MessageBox::Cancel); +- if (result == MessageBox::Move) { +- m_db->recycleGroup(currentGroup); +- } +- } +-} +- +-int DatabaseWidget::addChildWidget(QWidget* w) +-{ +- w->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); +- int index = QStackedWidget::addWidget(w); +- adjustSize(); +- return index; +-} +- +-void DatabaseWidget::switchToMainView(bool previousDialogAccepted) +-{ +- setCurrentWidget(m_mainWidget); +- +- if (m_newGroup) { +- if (previousDialogAccepted) { +- m_newGroup->setParent(m_newParent); +- m_groupView->setCurrentGroup(m_newGroup.take()); +- m_groupView->expandGroup(m_newParent); +- } else { +- m_newGroup.reset(); +- } +- +- m_newParent = nullptr; +- } else if (m_newEntry) { +- if (previousDialogAccepted) { +- m_newEntry->setGroup(m_newParent); +- m_entryView->setFocus(); +- m_entryView->setCurrentEntry(m_newEntry.take()); +- } else { +- m_newEntry.reset(); +- } +- +- m_newParent = nullptr; +- } else { +- // Workaround: ensure entries are focused so search doesn't reset +- m_entryView->setFocus(); +- } +- +- if (sender() == m_entryView || sender() == m_editEntryWidget) { +- onEntryChanged(m_entryView->currentEntry()); +- } else if (sender() == m_groupView || sender() == m_editGroupWidget) { +- onGroupChanged(); +- } +-} +- +-void DatabaseWidget::switchToHistoryView(Entry* entry) +-{ +- auto entryTitle = m_editEntryWidget->currentEntry() ? m_editEntryWidget->currentEntry()->title() : ""; +- m_historyEditEntryWidget->loadEntry(entry, false, true, entryTitle, m_db); +- setCurrentWidget(m_historyEditEntryWidget); +-} +- +-void DatabaseWidget::switchBackToEntryEdit() +-{ +- setCurrentWidget(m_editEntryWidget); +-} +- +-void DatabaseWidget::switchToEntryEdit(Entry* entry) +-{ +- switchToEntryEdit(entry, false); +-} +- +-void DatabaseWidget::switchToEntryEdit(Entry* entry, bool create) +-{ +- // If creating an entry, it will be in `currentGroup()` so it's +- // okay to use but when editing, the entry may not be in +- // `currentGroup()` so we get the entry's group. +- Group* group; +- if (create) { +- group = currentGroup(); +- } else { +- group = entry->group(); +- // Ensure we have only this entry selected +- m_entryView->setCurrentEntry(entry); +- } +- +- Q_ASSERT(group); +- +- // Setup the entry edit widget and display +- m_editEntryWidget->loadEntry(entry, create, false, group->name(), m_db); +- setCurrentWidget(m_editEntryWidget); +-} +- +-void DatabaseWidget::switchToGroupEdit(Group* group, bool create) +-{ +- m_editGroupWidget->loadGroup(group, create, m_db); +- setCurrentWidget(m_editGroupWidget); +-} +- +-void DatabaseWidget::connectDatabaseSignals() +-{ +- // relayed Database events +- connect(m_db.data(), +- SIGNAL(filePathChanged(QString, QString)), +- +- SIGNAL(databaseFilePathChanged(QString, QString))); +- connect(m_db.data(), SIGNAL(databaseModified()), SIGNAL(databaseModified())); +- connect(m_db.data(), SIGNAL(databaseModified()), SLOT(onDatabaseModified())); +- connect(m_db.data(), SIGNAL(databaseSaved()), SIGNAL(databaseSaved())); +- connect(m_db.data(), SIGNAL(databaseFileChanged()), this, SLOT(reloadDatabaseFile())); +-} +- +-void DatabaseWidget::loadDatabase(bool accepted) +-{ +- auto* openWidget = qobject_cast(sender()); +- Q_ASSERT(openWidget); +- if (!openWidget) { +- return; +- } +- +- if (accepted) { +- replaceDatabase(openWidget->database()); +- switchToMainView(); +- processAutoOpen(); +- restoreGroupEntryFocus(m_groupBeforeLock, m_entryBeforeLock); +- m_groupBeforeLock = QUuid(); +- m_entryBeforeLock = QUuid(); +- m_saveAttempts = 0; +- emit databaseUnlocked(); +-#ifdef WITH_XC_SSHAGENT +- sshAgent()->databaseUnlocked(m_db); +-#endif +- if (config()->get(Config::MinimizeAfterUnlock).toBool()) { +- getMainWindow()->minimizeOrHide(); +- } +- } else { +- if (m_databaseOpenWidget->database()) { +- m_databaseOpenWidget->database().reset(); +- } +- emit closeRequest(); +- } +-} +- +-void DatabaseWidget::mergeDatabase(bool accepted) +-{ +- if (accepted) { +- if (!m_db) { +- showMessage(tr("No current database."), MessageWidget::Error); +- return; +- } +- +- auto* senderDialog = qobject_cast(sender()); +- +- Q_ASSERT(senderDialog); +- if (!senderDialog) { +- return; +- } +- auto srcDb = senderDialog->database(); +- +- if (!srcDb) { +- showMessage(tr("No source database, nothing to do."), MessageWidget::Error); +- return; +- } +- +- Merger merger(srcDb.data(), m_db.data()); +- QStringList changeList = merger.merge(); +- +- if (!changeList.isEmpty()) { +- showMessage(tr("Successfully merged the database files."), MessageWidget::Information); +- } else { +- showMessage(tr("Database was not modified by merge operation."), MessageWidget::Information); +- } +- } +- +- switchToMainView(); +- emit databaseMerged(m_db); +-} +- +-/** +- * Unlock the database. +- * +- * @param accepted true if the unlock dialog or widget was confirmed with OK +- */ +-void DatabaseWidget::unlockDatabase(bool accepted) +-{ +- auto* senderDialog = qobject_cast(sender()); +- +- if (!accepted) { +- if (!senderDialog && (!m_db || !m_db->isInitialized())) { +- emit closeRequest(); +- } +- return; +- } +- +- if (senderDialog && senderDialog->intent() == DatabaseOpenDialog::Intent::Merge) { +- mergeDatabase(accepted); +- return; +- } +- +- QSharedPointer db; +- if (senderDialog) { +- db = senderDialog->database(); +- } else { +- db = m_databaseOpenWidget->database(); +- } +- replaceDatabase(db); +- if (db->isReadOnly()) { +- showMessage( +- tr("This database is opened in read-only mode. Autosave is disabled."), MessageWidget::Warning, false, -1); +- } +- +- restoreGroupEntryFocus(m_groupBeforeLock, m_entryBeforeLock); +- m_groupBeforeLock = QUuid(); +- m_entryBeforeLock = QUuid(); +- +- switchToMainView(); +- processAutoOpen(); +- emit databaseUnlocked(); +- +-#ifdef WITH_XC_SSHAGENT +- sshAgent()->databaseUnlocked(m_db); +-#endif +- +- if (senderDialog && senderDialog->intent() == DatabaseOpenDialog::Intent::AutoType) { +- QList> dbList; +- dbList.append(m_db); +- autoType()->performGlobalAutoType(dbList); +- } +-} +- +-void DatabaseWidget::entryActivationSignalReceived(Entry* entry, EntryModel::ModelColumn column) +-{ +- Q_ASSERT(entry); +- if (!entry) { +- return; +- } +- +- // Implement 'copy-on-doubleclick' functionality for certain columns +- switch (column) { +- case EntryModel::Username: +- setClipboardTextAndMinimize(entry->resolveMultiplePlaceholders(entry->username())); +- break; +- case EntryModel::Password: +- setClipboardTextAndMinimize(entry->resolveMultiplePlaceholders(entry->password())); +- break; +- case EntryModel::Url: +- if (!entry->url().isEmpty()) { +- openUrlForEntry(entry); +- } +- break; +- case EntryModel::Totp: +- if (entry->hasTotp()) { +- setClipboardTextAndMinimize(entry->totp()); +- } else { +- setupTotp(); +- } +- break; +- case EntryModel::ParentGroup: +- // Call this first to clear out of search mode, otherwise +- // the desired entry is not properly selected +- endSearch(); +- m_groupView->setCurrentGroup(entry->group()); +- m_entryView->setCurrentEntry(entry); +- break; +- // TODO: switch to 'Notes' tab in details view/pane +- // case EntryModel::Notes: +- // break; +- // TODO: switch to 'Attachments' tab in details view/pane +- // case EntryModel::Attachments: +- // break; +- default: +- switchToEntryEdit(entry); +- } +-} +- +-void DatabaseWidget::switchToDatabaseReports() +-{ +- m_reportsDialog->load(m_db); +- setCurrentWidget(m_reportsDialog); +-} +- +-void DatabaseWidget::switchToDatabaseSettings() +-{ +- m_databaseSettingDialog->load(m_db); +- setCurrentWidget(m_databaseSettingDialog); +-} +- +-void DatabaseWidget::switchToOpenDatabase() +-{ +- if (currentWidget() != m_databaseOpenWidget || m_databaseOpenWidget->filename() != m_db->filePath()) { +- switchToOpenDatabase(m_db->filePath()); +- } +-} +- +-void DatabaseWidget::switchToOpenDatabase(const QString& filePath) +-{ +- m_databaseOpenWidget->load(filePath); +- setCurrentWidget(m_databaseOpenWidget); +-} +- +-void DatabaseWidget::switchToOpenDatabase(const QString& filePath, const QString& password, const QString& keyFile) +-{ +- switchToOpenDatabase(filePath); +- m_databaseOpenWidget->enterKey(password, keyFile); +-} +- +-void DatabaseWidget::switchToCsvImport(const QString& filePath) +-{ +- setCurrentWidget(m_csvImportWizard); +- m_csvImportWizard->load(filePath, m_db.data()); +-} +- +-void DatabaseWidget::csvImportFinished(bool accepted) +-{ +- if (!accepted) { +- emit closeRequest(); +- } else { +- switchToMainView(); +- } +-} +- +-void DatabaseWidget::switchToImportKeepass1(const QString& filePath) +-{ +- m_keepass1OpenWidget->load(filePath); +- setCurrentWidget(m_keepass1OpenWidget); +-} +- +-void DatabaseWidget::switchToImportOpVault(const QString& fileName) +-{ +- m_opVaultOpenWidget->load(fileName); +- setCurrentWidget(m_opVaultOpenWidget); +-} +- +-void DatabaseWidget::switchToEntryEdit() +-{ +- auto entry = m_entryView->currentEntry(); +- if (!entry) { +- return; +- } +- +- switchToEntryEdit(entry, false); +-} +- +-void DatabaseWidget::switchToGroupEdit() +-{ +- auto group = m_groupView->currentGroup(); +- if (!group) { +- return; +- } +- +- switchToGroupEdit(group, false); +-} +- +-void DatabaseWidget::sortGroupsAsc() +-{ +- m_groupView->sortGroups(); +-} +- +-void DatabaseWidget::sortGroupsDesc() +-{ +- m_groupView->sortGroups(true); +-} +- +-void DatabaseWidget::switchToDatabaseSecurity() +-{ +- switchToDatabaseSettings(); +- m_databaseSettingDialog->showDatabaseKeySettings(); +-} +- +-void DatabaseWidget::performUnlockDatabase(const QString& password, const QString& keyfile) +-{ +- if (password.isEmpty() && keyfile.isEmpty()) { +- return; +- } +- +- if (!m_db->isInitialized() || isLocked()) { +- switchToOpenDatabase(); +- m_databaseOpenWidget->enterKey(password, keyfile); +- } +-} +- +-void DatabaseWidget::refreshSearch() +-{ +- if (isSearchActive()) { +- search(m_lastSearchText); +- } +-} +- +-void DatabaseWidget::search(const QString& searchtext) +-{ +- if (searchtext.isEmpty()) { +- endSearch(); +- return; +- } +- +- emit searchModeAboutToActivate(); +- +- Group* searchGroup = m_searchLimitGroup ? currentGroup() : m_db->rootGroup(); +- +- QList searchResult = m_EntrySearcher->search(searchtext, searchGroup); +- +- m_entryView->displaySearch(searchResult); +- m_lastSearchText = searchtext; +- +- // Display a label detailing our search results +- if (!searchResult.isEmpty()) { +- m_searchingLabel->setText(tr("Search Results (%1)").arg(searchResult.size())); +- } else { +- m_searchingLabel->setText(tr("No Results")); +- } +- +- m_searchingLabel->setVisible(true); +-#ifdef WITH_XC_KEESHARE +- m_shareLabel->setVisible(false); +-#endif +- +- emit searchModeActivated(); +-} +- +-void DatabaseWidget::setSearchCaseSensitive(bool state) +-{ +- m_EntrySearcher->setCaseSensitive(state); +- refreshSearch(); +-} +- +-void DatabaseWidget::setSearchLimitGroup(bool state) +-{ +- m_searchLimitGroup = state; +- refreshSearch(); +-} +- +-void DatabaseWidget::onGroupChanged() +-{ +- auto group = m_groupView->currentGroup(); +- +- // Intercept group changes if in search mode +- if (isSearchActive() && m_searchLimitGroup) { +- search(m_lastSearchText); +- } else if (isSearchActive()) { +- endSearch(); +- } else { +- m_entryView->displayGroup(group); +- } +- +- m_previewView->setGroup(group); +- +-#ifdef WITH_XC_KEESHARE +- auto shareLabel = KeeShare::sharingLabel(group); +- if (!shareLabel.isEmpty()) { +- m_shareLabel->setText(shareLabel); +- m_shareLabel->setVisible(true); +- } else { +- m_shareLabel->setVisible(false); +- } +-#endif +-} +- +-void DatabaseWidget::onDatabaseModified() +-{ +- if (!m_blockAutoSave && config()->get(Config::AutoSaveAfterEveryChange).toBool() && !m_db->isReadOnly()) { +- save(); +- } else { +- // Only block once, then reset +- m_blockAutoSave = false; +- } +-} +- +-QString DatabaseWidget::getCurrentSearch() +-{ +- return m_lastSearchText; +-} +- +-void DatabaseWidget::endSearch() +-{ +- if (isSearchActive()) { +- // Show the normal entry view of the current group +- emit listModeAboutToActivate(); +- m_entryView->displayGroup(currentGroup()); +- emit listModeActivated(); +- m_entryView->setFirstEntryActive(); +- // Enforce preview view update (prevents stale information if focus group is empty) +- m_previewView->setEntry(currentSelectedEntry()); +- } +- +- m_searchingLabel->setVisible(false); +- m_searchingLabel->setText(tr("Searching...")); +- +- m_lastSearchText.clear(); +- +- // Tell the search widget to clear +- emit clearSearch(); +-} +- +-void DatabaseWidget::emitGroupContextMenuRequested(const QPoint& pos) +-{ +- emit groupContextMenuRequested(m_groupView->viewport()->mapToGlobal(pos)); +-} +- +-void DatabaseWidget::emitEntryContextMenuRequested(const QPoint& pos) +-{ +- emit entryContextMenuRequested(m_entryView->viewport()->mapToGlobal(pos)); +-} +- +-void DatabaseWidget::onEntryChanged(Entry* entry) +-{ +- if (entry) { +- m_previewView->setEntry(entry); +- } +- +- emit entrySelectionChanged(); +-} +- +-bool DatabaseWidget::canDeleteCurrentGroup() const +-{ +- bool isRootGroup = m_db->rootGroup() == m_groupView->currentGroup(); +- return !isRootGroup; +-} +- +-Group* DatabaseWidget::currentGroup() const +-{ +- return m_groupView->currentGroup(); +-} +- +-void DatabaseWidget::closeEvent(QCloseEvent* event) +-{ +- if (!isLocked() && !lock()) { +- event->ignore(); +- return; +- } +- +- event->accept(); +-} +- +-void DatabaseWidget::showEvent(QShowEvent* event) +-{ +- if (!m_db->isInitialized() || isLocked()) { +- switchToOpenDatabase(); +- } +- +- event->accept(); +-} +- +-bool DatabaseWidget::focusNextPrevChild(bool next) +-{ +- // [parent] <-> GroupView <-> EntryView <-> EntryPreview <-> [parent] +- if (next) { +- if (m_groupView->hasFocus()) { +- m_entryView->setFocus(); +- return true; +- } else if (m_entryView->hasFocus()) { +- m_previewView->setFocus(); +- return true; +- } +- } else { +- if (m_previewView->hasFocus()) { +- m_entryView->setFocus(); +- return true; +- } else if (m_entryView->hasFocus()) { +- m_groupView->setFocus(); +- return true; +- } +- } +- +- // Defer to the parent widget to make a decision +- return QStackedWidget::focusNextPrevChild(next); +-} +- +-bool DatabaseWidget::lock() +-{ +- if (isLocked()) { +- return true; +- } +- +- // Don't try to lock the database while saving, this will cause a deadlock +- if (m_db->isSaving()) { +- QTimer::singleShot(200, this, SLOT(lock())); +- return false; +- } +- +- emit databaseLockRequested(); +- +- // ignore event if we are active and a modal dialog is still open (such as a message box or file dialog) +- if (isVisible() && QApplication::activeModalWidget()) { +- return false; +- } +- +- clipboard()->clearCopiedText(); +- +- if (isEditWidgetModified()) { +- auto result = MessageBox::question(this, +- tr("Lock Database?"), +- tr("You are editing an entry. Discard changes and lock anyway?"), +- MessageBox::Discard | MessageBox::Cancel, +- MessageBox::Cancel); +- if (result == MessageBox::Cancel) { +- return false; +- } +- } +- +- if (m_db->isModified()) { +- bool saved = false; +- // Attempt to save on exit, but don't block locking if it fails +- if (config()->get(Config::AutoSaveOnExit).toBool() +- || config()->get(Config::AutoSaveAfterEveryChange).toBool()) { +- saved = save(); +- } +- +- if (!saved) { +- QString msg; +- if (!m_db->metadata()->name().toHtmlEscaped().isEmpty()) { +- msg = tr("\"%1\" was modified.\nSave changes?").arg(m_db->metadata()->name().toHtmlEscaped()); +- } else { +- msg = tr("Database was modified.\nSave changes?"); +- } +- auto result = MessageBox::question(this, +- tr("Save changes?"), +- msg, +- MessageBox::Save | MessageBox::Discard | MessageBox::Cancel, +- MessageBox::Save); +- if (result == MessageBox::Save) { +- if (!save()) { +- return false; +- } +- } else if (result == MessageBox::Cancel) { +- return false; +- } +- } +- } else if (m_db->hasNonDataChanges() && config()->get(Config::AutoSaveNonDataChanges).toBool()) { +- // Silently auto-save non-data changes, ignore errors +- QString errorMessage; +- performSave(errorMessage); +- } +- +- if (m_groupView->currentGroup()) { +- m_groupBeforeLock = m_groupView->currentGroup()->uuid(); +- } else { +- m_groupBeforeLock = m_db->rootGroup()->uuid(); +- } +- +- auto currentEntry = currentSelectedEntry(); +- if (currentEntry) { +- m_entryBeforeLock = currentEntry->uuid(); +- } +- +-#ifdef WITH_XC_SSHAGENT +- sshAgent()->databaseLocked(m_db); +-#endif +- +- endSearch(); +- clearAllWidgets(); +- switchToOpenDatabase(m_db->filePath()); +- +- auto newDb = QSharedPointer::create(m_db->filePath()); +- replaceDatabase(newDb); +- +- emit databaseLocked(); +- +- return true; +-} +- +-void DatabaseWidget::reloadDatabaseFile() +-{ +- // Ignore reload if we are locked or currently editing an entry or group +- if (!m_db || isLocked() || isEntryEditActive() || isGroupEditActive()) { +- return; +- } +- +- m_blockAutoSave = true; +- +- if (!config()->get(Config::AutoReloadOnChange).toBool()) { +- // Ask if we want to reload the db +- auto result = MessageBox::question(this, +- tr("File has changed"), +- tr("The database file has changed. Do you want to load the changes?"), +- MessageBox::Yes | MessageBox::No); +- +- if (result == MessageBox::No) { +- // Notify everyone the database does not match the file +- m_db->markAsModified(); +- return; +- } +- } +- +- // Lock out interactions +- m_entryView->setDisabled(true); +- m_groupView->setDisabled(true); +- QApplication::processEvents(); +- +- QString error; +- auto db = QSharedPointer::create(m_db->filePath()); +- if (db->open(database()->key(), &error)) { +- if (m_db->isModified() || db->hasNonDataChanges()) { +- // Ask if we want to merge changes into new database +- auto result = MessageBox::question( +- this, +- tr("Merge Request"), +- tr("The database file has changed and you have unsaved changes.\nDo you want to merge your changes?"), +- MessageBox::Merge | MessageBox::Discard, +- MessageBox::Merge); +- +- if (result == MessageBox::Merge) { +- // Merge the old database into the new one +- Merger merger(m_db.data(), db.data()); +- merger.merge(); +- } +- } +- +- QUuid groupBeforeReload = m_db->rootGroup()->uuid(); +- if (m_groupView && m_groupView->currentGroup()) { +- groupBeforeReload = m_groupView->currentGroup()->uuid(); +- } +- +- QUuid entryBeforeReload; +- if (m_entryView && m_entryView->currentEntry()) { +- entryBeforeReload = m_entryView->currentEntry()->uuid(); +- } +- +- replaceDatabase(db); +- processAutoOpen(); +- restoreGroupEntryFocus(groupBeforeReload, entryBeforeReload); +- m_blockAutoSave = false; +- } else { +- showMessage(tr("Could not open the new database file while attempting to autoreload.\nError: %1").arg(error), +- MessageWidget::Error); +- // Mark db as modified since existing data may differ from file or file was deleted +- m_db->markAsModified(); +- } +- +- // Return control +- m_entryView->setDisabled(false); +- m_groupView->setDisabled(false); +-} +- +-int DatabaseWidget::numberOfSelectedEntries() const +-{ +- return m_entryView->numberOfSelectedEntries(); +-} +- +-int DatabaseWidget::currentEntryIndex() const +-{ +- return m_entryView->currentEntryIndex(); +-} +- +-QStringList DatabaseWidget::customEntryAttributes() const +-{ +- Entry* entry = m_entryView->currentEntry(); +- if (!entry) { +- return QStringList(); +- } +- +- return entry->attributes()->customKeys(); +-} +- +-/* +- * Restores the focus on the group and entry provided +- */ +-void DatabaseWidget::restoreGroupEntryFocus(const QUuid& groupUuid, const QUuid& entryUuid) +-{ +- auto group = m_db->rootGroup()->findGroupByUuid(groupUuid); +- if (group) { +- m_groupView->setCurrentGroup(group); +- auto entry = group->findEntryByUuid(entryUuid, false); +- if (entry) { +- m_entryView->setCurrentEntry(entry); +- } +- } +-} +- +-bool DatabaseWidget::isGroupSelected() const +-{ +- return m_groupView->currentGroup(); +-} +- +-bool DatabaseWidget::currentEntryHasTitle() +-{ +- auto currentEntry = currentSelectedEntry(); +- Q_ASSERT(currentEntry); +- if (!currentEntry) { +- return false; +- } +- return !currentEntry->title().isEmpty(); +-} +- +-bool DatabaseWidget::currentEntryHasUsername() +-{ +- auto currentEntry = currentSelectedEntry(); +- Q_ASSERT(currentEntry); +- if (!currentEntry) { +- return false; +- } +- return !currentEntry->resolveMultiplePlaceholders(currentEntry->username()).isEmpty(); +-} +- +-bool DatabaseWidget::currentEntryHasPassword() +-{ +- auto currentEntry = currentSelectedEntry(); +- Q_ASSERT(currentEntry); +- if (!currentEntry) { +- return false; +- } +- return !currentEntry->resolveMultiplePlaceholders(currentEntry->password()).isEmpty(); +-} +- +-bool DatabaseWidget::currentEntryHasUrl() +-{ +- auto currentEntry = currentSelectedEntry(); +- Q_ASSERT(currentEntry); +- if (!currentEntry) { +- return false; +- } +- return !currentEntry->resolveMultiplePlaceholders(currentEntry->url()).isEmpty(); +-} +- +-bool DatabaseWidget::currentEntryHasTotp() +-{ +- auto currentEntry = currentSelectedEntry(); +- Q_ASSERT(currentEntry); +- if (!currentEntry) { +- return false; +- } +- return currentEntry->hasTotp(); +-} +- +-#ifdef WITH_XC_SSHAGENT +-bool DatabaseWidget::currentEntryHasSshKey() +-{ +- Entry* currentEntry = m_entryView->currentEntry(); +- Q_ASSERT(currentEntry); +- if (!currentEntry) { +- return false; +- } +- +- return KeeAgentSettings::inEntryAttachments(currentEntry->attachments()); +-} +-#endif +- +-bool DatabaseWidget::currentEntryHasNotes() +-{ +- auto currentEntry = currentSelectedEntry(); +- Q_ASSERT(currentEntry); +- if (!currentEntry) { +- return false; +- } +- return !currentEntry->resolveMultiplePlaceholders(currentEntry->notes()).isEmpty(); +-} +- +-GroupView* DatabaseWidget::groupView() +-{ +- return m_groupView; +-} +- +-EntryView* DatabaseWidget::entryView() +-{ +- return m_entryView; +-} +- +-/** +- * Save the database to disk. +- * +- * This method will try to save several times in case of failure and +- * ask to disable safe saves if it is unable to save after the third attempt. +- * Set `attempt` to -1 to disable this behavior. +- * +- * @return true on success +- */ +-bool DatabaseWidget::save() +-{ +- // Never allow saving a locked database; it causes corruption +- Q_ASSERT(!isLocked()); +- // Release build interlock +- if (isLocked()) { +- // We return true since a save is not required +- return true; +- } +- +- // Read-only and new databases ask for filename +- if (m_db->isReadOnly() || m_db->filePath().isEmpty()) { +- return saveAs(); +- } +- +- // Prevent recursions and infinite save loops +- m_blockAutoSave = true; +- ++m_saveAttempts; +- +- QString errorMessage; +- if (performSave(errorMessage)) { +- m_saveAttempts = 0; +- m_blockAutoSave = false; +- return true; +- } +- +- if (m_saveAttempts > 2 && config()->get(Config::UseAtomicSaves).toBool()) { +- // Saving failed 3 times, issue a warning and attempt to resolve +- auto result = MessageBox::question(this, +- tr("Disable safe saves?"), +- tr("KeePassXC has failed to save the database multiple times. " +- "This is likely caused by file sync services holding a lock on " +- "the save file.\nDisable safe saves and try again?"), +- MessageBox::Disable | MessageBox::Cancel, +- MessageBox::Disable); +- if (result == MessageBox::Disable) { +- config()->set(Config::UseAtomicSaves, false); +- return save(); +- } +- } +- +- showMessage(tr("Writing the database failed: %1").arg(errorMessage), +- MessageWidget::Error, +- true, +- MessageWidget::LongAutoHideTimeout); +- +- return false; +-} +- +-/** +- * Save database under a new user-selected filename. +- * +- * @return true on success +- */ +-bool DatabaseWidget::saveAs() +-{ +- // Never allow saving a locked database; it causes corruption +- Q_ASSERT(!isLocked()); +- // Release build interlock +- if (isLocked()) { +- // We return true since a save is not required +- return true; +- } +- +- QString oldFilePath = m_db->filePath(); +- if (!QFileInfo::exists(oldFilePath)) { +- oldFilePath = +- QDir::toNativeSeparators(config()->get(Config::LastDir).toString() + "/" + tr("Passwords").append(".kdbx")); +- } +- const QString newFilePath = fileDialog()->getSaveFileName( +- this, tr("Save database as"), oldFilePath, tr("KeePass 2 Database").append(" (*.kdbx)"), nullptr, nullptr); +- +- bool ok = false; +- if (!newFilePath.isEmpty()) { +- QString errorMessage; +- if (!performSave(errorMessage, newFilePath)) { +- showMessage(tr("Writing the database failed: %1").arg(errorMessage), +- MessageWidget::Error, +- true, +- MessageWidget::LongAutoHideTimeout); +- } +- } +- +- return ok; +-} +- +-bool DatabaseWidget::performSave(QString& errorMessage, const QString& fileName) +-{ +- QPointer focusWidget(qApp->focusWidget()); +- +- // Lock out interactions +- m_entryView->setDisabled(true); +- m_groupView->setDisabled(true); +- QApplication::processEvents(); +- +- bool ok; +- if (fileName.isEmpty()) { +- ok = m_db->save(&errorMessage, +- config()->get(Config::UseAtomicSaves).toBool(), +- config()->get(Config::BackupBeforeSave).toBool()); +- } else { +- ok = m_db->saveAs(fileName, +- &errorMessage, +- config()->get(Config::UseAtomicSaves).toBool(), +- config()->get(Config::BackupBeforeSave).toBool()); +- } +- +- // Return control +- m_entryView->setDisabled(false); +- m_groupView->setDisabled(false); +- +- if (focusWidget) { +- focusWidget->setFocus(); +- } +- +- return ok; +-} +- +-/** +- * Save copy of database under a new user-selected filename. +- * +- * @return true on success +- */ +-bool DatabaseWidget::saveBackup() +-{ +- while (true) { +- QString oldFilePath = m_db->filePath(); +- if (!QFileInfo::exists(oldFilePath)) { +- oldFilePath = QDir::toNativeSeparators(config()->get(Config::LastDir).toString() + "/" +- + tr("Passwords").append(".kdbx")); +- } +- const QString newFilePath = fileDialog()->getSaveFileName(this, +- tr("Save database backup"), +- oldFilePath, +- tr("KeePass 2 Database").append(" (*.kdbx)"), +- nullptr, +- nullptr); +- +- if (!newFilePath.isEmpty()) { +- // Ensure we don't recurse back into this function +- m_db->setReadOnly(false); +- m_db->setFilePath(newFilePath); +- m_saveAttempts = 0; +- +- bool modified = m_db->isModified(); +- +- if (!save()) { +- // Failed to save, try again +- m_db->setFilePath(oldFilePath); +- continue; +- } +- +- m_db->setFilePath(oldFilePath); +- if (modified) { +- // Source database is marked as clean when copy is saved, even if source has unsaved changes +- m_db->markAsModified(); +- } +- return true; +- } +- +- // Canceled file selection +- return false; +- } +-} +- +-void DatabaseWidget::showMessage(const QString& text, +- MessageWidget::MessageType type, +- bool showClosebutton, +- int autoHideTimeout) +-{ +- m_messageWidget->setCloseButtonVisible(showClosebutton); +- m_messageWidget->showMessage(text, type, autoHideTimeout); +-} +- +-void DatabaseWidget::showErrorMessage(const QString& errorMessage) +-{ +- showMessage(errorMessage, MessageWidget::MessageType::Error); +-} +- +-void DatabaseWidget::hideMessage() +-{ +- if (m_messageWidget->isVisible()) { +- m_messageWidget->animatedHide(); +- } +-} +- +-bool DatabaseWidget::isRecycleBinSelected() const +-{ +- return m_groupView->currentGroup() && m_groupView->currentGroup() == m_db->metadata()->recycleBin(); +-} +- +-void DatabaseWidget::emptyRecycleBin() +-{ +- if (!isRecycleBinSelected()) { +- return; +- } +- +- auto result = +- MessageBox::question(this, +- tr("Empty recycle bin?"), +- tr("Are you sure you want to permanently delete everything from your recycle bin?"), +- MessageBox::Empty | MessageBox::Cancel, +- MessageBox::Cancel); +- +- if (result == MessageBox::Empty) { +- m_db->emptyRecycleBin(); +- refreshSearch(); +- } +-} +- +-void DatabaseWidget::processAutoOpen() +-{ +- Q_ASSERT(m_db); +- +- auto* autoopenGroup = m_db->rootGroup()->findGroupByPath("/AutoOpen"); +- if (!autoopenGroup) { +- return; +- } +- +- for (const auto* entry : autoopenGroup->entries()) { +- if (entry->url().isEmpty() || (entry->password().isEmpty() && entry->username().isEmpty())) { +- continue; +- } +- +- // Support ifDevice advanced entry, a comma separated list of computer names +- // that control whether to perform AutoOpen on this entry or not. Can be +- // negated using '!' +- auto ifDevice = entry->attribute("IfDevice"); +- if (!ifDevice.isEmpty()) { +- bool loadDb = false; +- auto hostName = QHostInfo::localHostName(); +- for (auto& device : ifDevice.split(",")) { +- device = device.trimmed(); +- if (device.startsWith("!")) { +- if (device.mid(1).compare(hostName, Qt::CaseInsensitive) == 0) { +- // Machine name matched an exclusion, don't load this database +- loadDb = false; +- break; +- } else { +- // Not matching an exclusion allows loading on all machines +- loadDb = true; +- } +- } else if (device.compare(hostName, Qt::CaseInsensitive) == 0) { +- // Explicitly named for loading +- loadDb = true; +- } +- } +- if (!loadDb) { +- continue; +- } +- } +- +- openDatabaseFromEntry(entry); +- } +-} +- +-void DatabaseWidget::openDatabaseFromEntry(const Entry* entry, bool inBackground) +-{ +- auto keyFile = entry->resolveMultiplePlaceholders(entry->username()); +- auto password = entry->resolveMultiplePlaceholders(entry->password()); +- auto databaseUrl = entry->resolveMultiplePlaceholders(entry->url()); +- if (databaseUrl.startsWith("kdbx://")) { +- databaseUrl = databaseUrl.mid(7); +- } +- +- QFileInfo dbFileInfo; +- if (databaseUrl.startsWith("file://")) { +- QUrl url(databaseUrl); +- dbFileInfo.setFile(url.toLocalFile()); +- } else { +- dbFileInfo.setFile(databaseUrl); +- if (dbFileInfo.isRelative()) { +- QFileInfo currentpath(m_db->filePath()); +- dbFileInfo.setFile(currentpath.absoluteDir(), databaseUrl); +- } +- } +- +- if (!dbFileInfo.isFile()) { +- showErrorMessage(tr("Could not find database file: %1").arg(databaseUrl)); +- return; +- } +- +- QFileInfo keyFileInfo; +- if (!keyFile.isEmpty()) { +- if (keyFile.startsWith("file://")) { +- QUrl keyfileUrl(keyFile); +- keyFileInfo.setFile(keyfileUrl.toLocalFile()); +- } else { +- keyFileInfo.setFile(keyFile); +- if (keyFileInfo.isRelative()) { +- QFileInfo currentpath(m_db->filePath()); +- keyFileInfo.setFile(currentpath.absoluteDir(), keyFile); +- } +- } +- } +- +- // Request to open the database file in the background with a password and keyfile +- emit requestOpenDatabase(dbFileInfo.canonicalFilePath(), inBackground, password, keyFileInfo.canonicalFilePath()); +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/DatabaseWidget.h keepassxc-2.6.4-patched/src/gui/DatabaseWidget.h +--- keepassxc-2.6.4-orig/src/gui/DatabaseWidget.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/DatabaseWidget.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,301 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * Copyright (C) 2010 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_DATABASEWIDGET_H +-#define KEEPASSX_DATABASEWIDGET_H +- +-#include +-#include +-#include +-#include +- +-#include "DatabaseOpenDialog.h" +-#include "config-keepassx.h" +-#include "gui/MessageWidget.h" +-#include "gui/csvImport/CsvImportWizard.h" +-#include "gui/entry/EntryModel.h" +- +-class DatabaseOpenWidget; +-class KeePass1OpenWidget; +-class OpVaultOpenWidget; +-class DatabaseSettingsDialog; +-class ReportsDialog; +-class Database; +-class FileWatcher; +-class EditEntryWidget; +-class EditGroupWidget; +-class Entry; +-class EntryView; +-class EntrySearcher; +-class Group; +-class GroupView; +-class QFile; +-class QMenu; +-class QSplitter; +-class QLabel; +-class MessageWidget; +-class EntryPreviewWidget; +- +-namespace Ui +-{ +- class SearchWidget; +-} +- +-class DatabaseWidget : public QStackedWidget +-{ +- Q_OBJECT +- +-public: +- friend class DatabaseOpenDialog; +- +- enum class Mode +- { +- None, +- ImportMode, +- ViewMode, +- EditMode, +- LockedMode +- }; +- +- explicit DatabaseWidget(QSharedPointer db, QWidget* parent = nullptr); +- explicit DatabaseWidget(const QString& filePath, QWidget* parent = nullptr); +- ~DatabaseWidget(); +- +- void setFocus(Qt::FocusReason reason); +- +- QSharedPointer database() const; +- +- DatabaseWidget::Mode currentMode() const; +- bool isLocked() const; +- bool isSaving() const; +- bool isSorted() const; +- bool isSearchActive() const; +- bool isEntryViewActive() const; +- bool isEntryEditActive() const; +- bool isGroupEditActive() const; +- +- QString getCurrentSearch(); +- void refreshSearch(); +- +- GroupView* groupView(); +- EntryView* entryView(); +- +- Group* currentGroup() const; +- bool canDeleteCurrentGroup() const; +- bool isGroupSelected() const; +- bool isRecycleBinSelected() const; +- int numberOfSelectedEntries() const; +- int currentEntryIndex() const; +- +- QStringList customEntryAttributes() const; +- bool isEditWidgetModified() const; +- void clearAllWidgets(); +- bool currentEntryHasTitle(); +- bool currentEntryHasUsername(); +- bool currentEntryHasPassword(); +- bool currentEntryHasUrl(); +- bool currentEntryHasNotes(); +- bool currentEntryHasTotp(); +-#ifdef WITH_XC_SSHAGENT +- bool currentEntryHasSshKey(); +-#endif +- +- QByteArray entryViewState() const; +- bool setEntryViewState(const QByteArray& state) const; +- QList mainSplitterSizes() const; +- void setMainSplitterSizes(const QList& sizes); +- QList previewSplitterSizes() const; +- void setPreviewSplitterSizes(const QList& sizes); +- +-signals: +- // relayed Database signals +- void databaseFilePathChanged(const QString& oldPath, const QString& newPath); +- void databaseModified(); +- void databaseSaved(); +- void databaseUnlocked(); +- void databaseLockRequested(); +- void databaseLocked(); +- +- // Emitted in replaceDatabase, may be caused by lock, reload, unlock, load. +- void databaseReplaced(const QSharedPointer& oldDb, const QSharedPointer& newDb); +- +- void closeRequest(); +- void currentModeChanged(DatabaseWidget::Mode mode); +- void groupChanged(); +- void entrySelectionChanged(); +- void +- requestOpenDatabase(const QString& filePath, bool inBackground, const QString& password, const QString& keyFile); +- void databaseMerged(QSharedPointer mergedDb); +- void groupContextMenuRequested(const QPoint& globalPos); +- void entryContextMenuRequested(const QPoint& globalPos); +- void listModeAboutToActivate(); +- void listModeActivated(); +- void searchModeAboutToActivate(); +- void searchModeActivated(); +- void mainSplitterSizesChanged(); +- void previewSplitterSizesChanged(); +- void entryViewStateChanged(); +- void clearSearch(); +- +-public slots: +- bool lock(); +- bool save(); +- bool saveAs(); +- bool saveBackup(); +- +- void replaceDatabase(QSharedPointer db); +- void createEntry(); +- void cloneEntry(); +- void deleteSelectedEntries(); +- void deleteEntries(QList entries); +- void focusOnEntries(bool editIfFocused = false); +- void focusOnGroups(bool editIfFocused = false); +- void moveEntryUp(); +- void moveEntryDown(); +- void copyTitle(); +- void copyUsername(); +- void copyPassword(); +- void copyURL(); +- void copyNotes(); +- void copyAttribute(QAction* action); +- void showTotp(); +- void showTotpKeyQrCode(); +- void copyTotp(); +- void setupTotp(); +-#ifdef WITH_XC_SSHAGENT +- void addToAgent(); +- void removeFromAgent(); +-#endif +- void performAutoType(); +- void performAutoTypeUsername(); +- void performAutoTypeUsernameEnter(); +- void performAutoTypePassword(); +- void performAutoTypePasswordEnter(); +- void openUrl(); +- void downloadSelectedFavicons(); +- void downloadAllFavicons(); +- void openUrlForEntry(Entry* entry); +- void createGroup(); +- void deleteGroup(); +- void switchToMainView(bool previousDialogAccepted = false); +- void switchToEntryEdit(); +- void switchToGroupEdit(); +- void sortGroupsAsc(); +- void sortGroupsDesc(); +- void switchToDatabaseSecurity(); +- void switchToDatabaseReports(); +- void switchToDatabaseSettings(); +- void switchToOpenDatabase(); +- void switchToOpenDatabase(const QString& filePath); +- void switchToOpenDatabase(const QString& filePath, const QString& password, const QString& keyFile); +- void switchToCsvImport(const QString& filePath); +- void performUnlockDatabase(const QString& password, const QString& keyfile = {}); +- void csvImportFinished(bool accepted); +- void switchToImportKeepass1(const QString& filePath); +- void switchToImportOpVault(const QString& fileName); +- void emptyRecycleBin(); +- +- // Search related slots +- void search(const QString& searchtext); +- void setSearchCaseSensitive(bool state); +- void setSearchLimitGroup(bool state); +- void endSearch(); +- +- void showMessage(const QString& text, +- MessageWidget::MessageType type, +- bool showClosebutton = true, +- int autoHideTimeout = MessageWidget::DefaultAutoHideTimeout); +- void showErrorMessage(const QString& errorMessage); +- void hideMessage(); +- +-protected: +- void closeEvent(QCloseEvent* event) override; +- void showEvent(QShowEvent* event) override; +- bool focusNextPrevChild(bool next) override; +- +-private slots: +- void entryActivationSignalReceived(Entry* entry, EntryModel::ModelColumn column); +- void switchBackToEntryEdit(); +- void switchToHistoryView(Entry* entry); +- void switchToEntryEdit(Entry*); +- void switchToEntryEdit(Entry* entry, bool create); +- void switchToGroupEdit(Group* entry, bool create); +- void emitGroupContextMenuRequested(const QPoint& pos); +- void emitEntryContextMenuRequested(const QPoint& pos); +- void onEntryChanged(Entry* entry); +- void onGroupChanged(); +- void onDatabaseModified(); +- void connectDatabaseSignals(); +- void loadDatabase(bool accepted); +- void unlockDatabase(bool accepted); +- void mergeDatabase(bool accepted); +- void emitCurrentModeChanged(); +- // Database autoreload slots +- void reloadDatabaseFile(); +- void restoreGroupEntryFocus(const QUuid& groupUuid, const QUuid& EntryUuid); +- +-private: +- int addChildWidget(QWidget* w); +- void setClipboardTextAndMinimize(const QString& text); +- void processAutoOpen(); +- void openDatabaseFromEntry(const Entry* entry, bool inBackground = true); +- bool confirmDeleteEntries(QList entries, bool permanent); +- void performIconDownloads(const QList& entries, bool force = false); +- bool performSave(QString& errorMessage, const QString& fileName = {}); +- Entry* currentSelectedEntry(); +- +- QSharedPointer m_db; +- +- QPointer m_mainWidget; +- QPointer m_mainSplitter; +- QPointer m_messageWidget; +- QPointer m_previewView; +- QPointer m_previewSplitter; +- QPointer m_searchingLabel; +- QPointer m_shareLabel; +- QPointer m_csvImportWizard; +- QPointer m_editEntryWidget; +- QPointer m_editGroupWidget; +- QPointer m_historyEditEntryWidget; +- QPointer m_reportsDialog; +- QPointer m_databaseSettingDialog; +- QPointer m_databaseOpenWidget; +- QPointer m_keepass1OpenWidget; +- QPointer m_opVaultOpenWidget; +- QPointer m_groupView; +- QPointer m_entryView; +- +- QScopedPointer m_newGroup; +- QScopedPointer m_newEntry; +- QPointer m_newParent; +- +- QUuid m_groupBeforeLock; +- QUuid m_entryBeforeLock; +- +- int m_saveAttempts; +- +- // Search state +- EntrySearcher* m_EntrySearcher; +- QString m_lastSearchText; +- bool m_searchLimitGroup; +- +- // Autoreload +- bool m_blockAutoSave; +-}; +- +-#endif // KEEPASSX_DATABASEWIDGET_H +diff -urNr keepassxc-2.6.4-orig/src/gui/DatabaseWidgetStateSync.cpp keepassxc-2.6.4-patched/src/gui/DatabaseWidgetStateSync.cpp +--- keepassxc-2.6.4-orig/src/gui/DatabaseWidgetStateSync.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/DatabaseWidgetStateSync.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,198 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * Copyright (C) 2014 Felix Geyer +- * Copyright (C) 2014 Florian Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "DatabaseWidgetStateSync.h" +- +-#include "core/Config.h" +-#include +- +-DatabaseWidgetStateSync::DatabaseWidgetStateSync(QObject* parent) +- : QObject(parent) +- , m_activeDbWidget(nullptr) +- , m_blockUpdates(false) +-{ +- m_mainSplitterSizes = variantToIntList(config()->get(Config::GUI_SplitterState)); +- m_previewSplitterSizes = variantToIntList(config()->get(Config::GUI_PreviewSplitterState)); +- m_listViewState = config()->get(Config::GUI_ListViewState).toByteArray(); +- m_searchViewState = config()->get(Config::GUI_SearchViewState).toByteArray(); +- +- connect(qApp, &QCoreApplication::aboutToQuit, this, &DatabaseWidgetStateSync::sync); +-} +- +-DatabaseWidgetStateSync::~DatabaseWidgetStateSync() +-{ +-} +- +-/** +- * Sync state with persistent storage. +- */ +-void DatabaseWidgetStateSync::sync() +-{ +- config()->set(Config::GUI_SplitterState, intListToVariant(m_mainSplitterSizes)); +- config()->set(Config::GUI_PreviewSplitterState, intListToVariant(m_previewSplitterSizes)); +- config()->set(Config::GUI_ListViewState, m_listViewState); +- config()->set(Config::GUI_SearchViewState, m_searchViewState); +- config()->sync(); +-} +- +-void DatabaseWidgetStateSync::setActive(DatabaseWidget* dbWidget) +-{ +- if (m_activeDbWidget) { +- disconnect(m_activeDbWidget, nullptr, this, nullptr); +- } +- +- m_activeDbWidget = dbWidget; +- +- if (m_activeDbWidget) { +- m_blockUpdates = true; +- +- if (!m_mainSplitterSizes.isEmpty()) { +- m_activeDbWidget->setMainSplitterSizes(m_mainSplitterSizes); +- } +- +- if (!m_previewSplitterSizes.isEmpty()) { +- m_activeDbWidget->setPreviewSplitterSizes(m_previewSplitterSizes); +- } +- +- if (m_activeDbWidget->isSearchActive()) { +- restoreSearchView(); +- } else { +- restoreListView(); +- } +- +- m_blockUpdates = false; +- +- connect(m_activeDbWidget, SIGNAL(mainSplitterSizesChanged()), SLOT(updateSplitterSizes())); +- connect(m_activeDbWidget, SIGNAL(previewSplitterSizesChanged()), SLOT(updateSplitterSizes())); +- connect(m_activeDbWidget, SIGNAL(entryViewStateChanged()), SLOT(updateViewState())); +- connect(m_activeDbWidget, SIGNAL(listModeActivated()), SLOT(restoreListView())); +- connect(m_activeDbWidget, SIGNAL(searchModeActivated()), SLOT(restoreSearchView())); +- connect(m_activeDbWidget, SIGNAL(listModeAboutToActivate()), SLOT(blockUpdates())); +- connect(m_activeDbWidget, SIGNAL(searchModeAboutToActivate()), SLOT(blockUpdates())); +- } +-} +- +-/** +- * Restore entry view list view state +- * +- * NOTE: +- * States of entry view 'Hide Usernames'/'Hide Passwords' settings are global, +- * i.e. they are the same for both list and search mode +- * +- * NOTE: +- * If m_listViewState is empty, the list view has been activated for the first +- * time after starting with a clean (or invalid) config. +- */ +-void DatabaseWidgetStateSync::restoreListView() +-{ +- if (!m_listViewState.isEmpty()) { +- m_activeDbWidget->setEntryViewState(m_listViewState); +- } +- +- m_blockUpdates = false; +-} +- +-/** +- * Restore entry view search view state +- * +- * NOTE: +- * States of entry view 'Hide Usernames'/'Hide Passwords' settings are global, +- * i.e. they are the same for both list and search mode +- * +- * NOTE: +- * If m_searchViewState is empty, the search view has been activated for the +- * first time after starting with a clean (or invalid) config. Thus, save the +- * current state. Without this, m_searchViewState would remain empty until +- * there is an actual view state change (e.g. column is resized) +- */ +-void DatabaseWidgetStateSync::restoreSearchView() +-{ +- if (!m_searchViewState.isEmpty()) { +- m_activeDbWidget->setEntryViewState(m_searchViewState); +- } else { +- m_searchViewState = m_activeDbWidget->entryViewState(); +- } +- +- m_blockUpdates = false; +-} +- +-void DatabaseWidgetStateSync::blockUpdates() +-{ +- m_blockUpdates = true; +-} +- +-void DatabaseWidgetStateSync::updateSplitterSizes() +-{ +- if (m_blockUpdates) { +- return; +- } +- +- m_mainSplitterSizes = m_activeDbWidget->mainSplitterSizes(); +- m_previewSplitterSizes = m_activeDbWidget->previewSplitterSizes(); +-} +- +-/** +- * Update entry view list/search view state +- * +- * NOTE: +- * States of entry view 'Hide Usernames'/'Hide Passwords' settings are global, +- * i.e. they are the same for both list and search mode +- */ +-void DatabaseWidgetStateSync::updateViewState() +-{ +- if (m_blockUpdates) { +- return; +- } +- +- if (m_activeDbWidget->isSearchActive()) { +- m_searchViewState = m_activeDbWidget->entryViewState(); +- } else { +- m_listViewState = m_activeDbWidget->entryViewState(); +- } +-} +- +-QList DatabaseWidgetStateSync::variantToIntList(const QVariant& variant) +-{ +- const QVariantList list = variant.toList(); +- QList result; +- +- for (const QVariant& var : list) { +- bool ok; +- int size = var.toInt(&ok); +- if (ok) { +- result.append(size); +- } else { +- result.clear(); +- break; +- } +- } +- +- return result; +-} +- +-QVariant DatabaseWidgetStateSync::intListToVariant(const QList& list) +-{ +- QVariantList result; +- +- for (int value : list) { +- result.append(value); +- } +- +- return result; +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/DatabaseWidgetStateSync.h keepassxc-2.6.4-patched/src/gui/DatabaseWidgetStateSync.h +--- keepassxc-2.6.4-orig/src/gui/DatabaseWidgetStateSync.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/DatabaseWidgetStateSync.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,58 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * Copyright (C) 2014 Felix Geyer +- * Copyright (C) 2014 Florian Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_DATABASEWIDGETSTATESYNC_H +-#define KEEPASSX_DATABASEWIDGETSTATESYNC_H +- +-#include "gui/DatabaseWidget.h" +- +-class DatabaseWidgetStateSync : public QObject +-{ +- Q_OBJECT +- +-public: +- explicit DatabaseWidgetStateSync(QObject* parent = nullptr); +- ~DatabaseWidgetStateSync() override; +- +-public slots: +- void setActive(DatabaseWidget* dbWidget); +- void restoreListView(); +- void restoreSearchView(); +- +-private slots: +- void blockUpdates(); +- void updateSplitterSizes(); +- void updateViewState(); +- void sync(); +- +-private: +- static QList variantToIntList(const QVariant& variant); +- static QVariant intListToVariant(const QList& list); +- +- QPointer m_activeDbWidget; +- +- bool m_blockUpdates; +- QList m_mainSplitterSizes; +- QList m_previewSplitterSizes; +- +- QByteArray m_listViewState; +- QByteArray m_searchViewState; +-}; +- +-#endif // KEEPASSX_DATABASEWIDGETSTATESYNC_H +diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsDialog.cpp keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsDialog.cpp +--- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsDialog.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsDialog.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,221 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "DatabaseSettingsDialog.h" +-#include "ui_DatabaseSettingsDialog.h" +- +-#include "DatabaseSettingsWidgetDatabaseKey.h" +-#include "DatabaseSettingsWidgetEncryption.h" +-#include "DatabaseSettingsWidgetGeneral.h" +-#ifdef WITH_XC_BROWSER +-#include "DatabaseSettingsWidgetBrowser.h" +-#endif +-#if defined(WITH_XC_KEESHARE) +-#include "keeshare/DatabaseSettingsPageKeeShare.h" +-#endif +-#if defined(WITH_XC_FDOSECRETS) +-#include "fdosecrets/DatabaseSettingsPageFdoSecrets.h" +-#endif +- +-#include "core/Config.h" +-#include "core/Database.h" +-#include "core/Global.h" +-#include "core/Resources.h" +-#include "touchid/TouchID.h" +- +-#include +- +-class DatabaseSettingsDialog::ExtraPage +-{ +-public: +- ExtraPage(IDatabaseSettingsPage* page, QWidget* widget) +- : settingsPage(page) +- , widget(widget) +- { +- } +- void loadSettings(QSharedPointer db) const +- { +- settingsPage->loadSettings(widget, db); +- } +- void saveSettings() const +- { +- settingsPage->saveSettings(widget); +- } +- +-private: +- QSharedPointer settingsPage; +- QWidget* widget; +-}; +- +-DatabaseSettingsDialog::DatabaseSettingsDialog(QWidget* parent) +- : DialogyWidget(parent) +- , m_ui(new Ui::DatabaseSettingsDialog()) +- , m_generalWidget(new DatabaseSettingsWidgetGeneral(this)) +- , m_securityTabWidget(new QTabWidget(this)) +- , m_databaseKeyWidget(new DatabaseSettingsWidgetDatabaseKey(this)) +- , m_encryptionWidget(new DatabaseSettingsWidgetEncryption(this)) +-#ifdef WITH_XC_BROWSER +- , m_browserWidget(new DatabaseSettingsWidgetBrowser(this)) +-#endif +-{ +- m_ui->setupUi(this); +- +- connect(m_ui->buttonBox, SIGNAL(accepted()), SLOT(save())); +- connect(m_ui->buttonBox, SIGNAL(rejected()), SLOT(reject())); +- +- m_ui->categoryList->addCategory(tr("General"), Resources::instance()->icon("preferences-other")); +- m_ui->categoryList->addCategory(tr("Security"), Resources::instance()->icon("security-high")); +- m_ui->stackedWidget->addWidget(m_generalWidget); +- +- m_ui->stackedWidget->addWidget(m_securityTabWidget); +- +- auto* scrollArea = new QScrollArea(parent); +- scrollArea->setFrameShape(QFrame::NoFrame); +- scrollArea->setFrameShadow(QFrame::Plain); +- scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); +- scrollArea->setSizeAdjustPolicy(QScrollArea::AdjustToContents); +- scrollArea->setWidgetResizable(true); +- scrollArea->setWidget(m_databaseKeyWidget); +- m_securityTabWidget->addTab(scrollArea, tr("Database Credentials")); +- +- m_securityTabWidget->addTab(m_encryptionWidget, tr("Encryption Settings")); +- +-#if defined(WITH_XC_KEESHARE) +- addSettingsPage(new DatabaseSettingsPageKeeShare()); +-#endif +- +-#if defined(WITH_XC_FDOSECRETS) +- addSettingsPage(new DatabaseSettingsPageFdoSecrets()); +-#endif +- +- m_ui->stackedWidget->setCurrentIndex(0); +- m_securityTabWidget->setCurrentIndex(0); +- +- connect(m_securityTabWidget, SIGNAL(currentChanged(int)), SLOT(pageChanged())); +- connect(m_ui->categoryList, SIGNAL(categoryChanged(int)), m_ui->stackedWidget, SLOT(setCurrentIndex(int))); +- connect(m_ui->advancedSettingsToggle, SIGNAL(toggled(bool)), SLOT(toggleAdvancedMode(bool))); +- +-#ifdef WITH_XC_BROWSER +- m_ui->categoryList->addCategory(tr("Browser Integration"), Resources::instance()->icon("internet-web-browser")); +- m_ui->stackedWidget->addWidget(m_browserWidget); +-#endif +- +- pageChanged(); +-} +- +-DatabaseSettingsDialog::~DatabaseSettingsDialog() +-{ +-} +- +-void DatabaseSettingsDialog::load(const QSharedPointer& db) +-{ +- m_ui->categoryList->setCurrentCategory(0); +- m_generalWidget->load(db); +- m_databaseKeyWidget->load(db); +- m_encryptionWidget->load(db); +-#ifdef WITH_XC_BROWSER +- m_browserWidget->load(db); +-#endif +- for (const ExtraPage& page : asConst(m_extraPages)) { +- page.loadSettings(db); +- } +- m_ui->advancedSettingsToggle->setChecked(config()->get(Config::GUI_AdvancedSettings).toBool()); +- m_db = db; +-} +- +-void DatabaseSettingsDialog::addSettingsPage(IDatabaseSettingsPage* page) +-{ +- const int category = m_ui->categoryList->currentCategory(); +- QWidget* widget = page->createWidget(); +- widget->setParent(this); +- m_extraPages.append(ExtraPage(page, widget)); +- m_ui->stackedWidget->addWidget(widget); +- m_ui->categoryList->addCategory(page->name(), page->icon()); +- m_ui->categoryList->setCurrentCategory(category); +-} +- +-/** +- * Show page and tab with database database key settings. +- */ +-void DatabaseSettingsDialog::showDatabaseKeySettings() +-{ +- m_ui->categoryList->setCurrentCategory(1); +- m_securityTabWidget->setCurrentIndex(0); +-} +- +-void DatabaseSettingsDialog::save() +-{ +- if (!m_generalWidget->save()) { +- return; +- } +- +- if (!m_databaseKeyWidget->save()) { +- return; +- } +- +- if (!m_encryptionWidget->save()) { +- return; +- } +- +- for (const ExtraPage& extraPage : asConst(m_extraPages)) { +- extraPage.saveSettings(); +- } +- +-#ifdef WITH_XC_TOUCHID +- TouchID::getInstance().reset(m_db ? m_db->filePath() : ""); +-#endif +- +- emit editFinished(true); +-} +- +-void DatabaseSettingsDialog::reject() +-{ +- emit editFinished(false); +-} +- +-void DatabaseSettingsDialog::pageChanged() +-{ +- int pageIndex = m_ui->stackedWidget->currentIndex(); +- +- bool enabled = (pageIndex == Page::General && m_generalWidget->hasAdvancedMode()); +- +- if (Page::Security == pageIndex) { +- int tabIndex = m_securityTabWidget->currentIndex(); +- enabled = (tabIndex == 0 && m_databaseKeyWidget->hasAdvancedMode()); +- enabled |= (tabIndex == 1 && m_encryptionWidget->hasAdvancedMode()); +- } +- +- m_ui->advancedSettingsToggle->setEnabled(enabled); +-} +- +-void DatabaseSettingsDialog::toggleAdvancedMode(bool advanced) +-{ +- if (m_generalWidget->hasAdvancedMode()) { +- m_generalWidget->setAdvancedMode(advanced); +- } +- +- if (m_databaseKeyWidget->hasAdvancedMode()) { +- m_databaseKeyWidget->setAdvancedMode(advanced); +- } +- +- if (m_encryptionWidget->hasAdvancedMode()) { +- m_encryptionWidget->setAdvancedMode(advanced); +- } +- +- config()->set(Config::GUI_AdvancedSettings, advanced); +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsDialog.h keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsDialog.h +--- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsDialog.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsDialog.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,98 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_DATABASESETTINGSWIDGET_H +-#define KEEPASSX_DATABASESETTINGSWIDGET_H +- +-#include "config-keepassx.h" +-#include "gui/DialogyWidget.h" +- +-#include +-#include +-#include +- +-class Database; +-class DatabaseSettingsWidgetGeneral; +-class DatabaseSettingsWidgetEncryption; +-class DatabaseSettingsWidgetDatabaseKey; +-#ifdef WITH_XC_BROWSER +-class DatabaseSettingsWidgetBrowser; +-#endif +-class QTabWidget; +- +-namespace Ui +-{ +- class DatabaseSettingsDialog; +-} +- +-class IDatabaseSettingsPage +-{ +-public: +- virtual ~IDatabaseSettingsPage() +- { +- } +- virtual QString name() = 0; +- virtual QIcon icon() = 0; +- virtual QWidget* createWidget() = 0; +- virtual void loadSettings(QWidget* widget, QSharedPointer db) = 0; +- virtual void saveSettings(QWidget* widget) = 0; +-}; +- +-class DatabaseSettingsDialog : public DialogyWidget +-{ +- Q_OBJECT +- +-public: +- explicit DatabaseSettingsDialog(QWidget* parent = nullptr); +- ~DatabaseSettingsDialog() override; +- Q_DISABLE_COPY(DatabaseSettingsDialog); +- +- void load(const QSharedPointer& db); +- void addSettingsPage(IDatabaseSettingsPage* page); +- void showDatabaseKeySettings(); +- +-signals: +- void editFinished(bool accepted); +- +-private slots: +- void save(); +- void reject(); +- void pageChanged(); +- void toggleAdvancedMode(bool advanced); +- +-private: +- enum Page +- { +- General = 0, +- Security = 1 +- }; +- +- QSharedPointer m_db; +- const QScopedPointer m_ui; +- QPointer m_generalWidget; +- QPointer m_securityTabWidget; +- QPointer m_databaseKeyWidget; +- QPointer m_encryptionWidget; +-#ifdef WITH_XC_BROWSER +- QPointer m_browserWidget; +-#endif +- +- class ExtraPage; +- QList m_extraPages; +-}; +- +-#endif // KEEPASSX_DATABASESETTINGSWIDGET_H +diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsDialog.ui keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsDialog.ui +--- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsDialog.ui 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsDialog.ui 1970-01-01 01:00:00.000000000 +0100 +@@ -1,50 +0,0 @@ +- +- +- DatabaseSettingsDialog +- +- +- +- +- +- +- +- +- +- +- -1 +- +- +- +- +- +- +- +- +- +- +- Advanced Settings +- +- +- +- +- +- +- QDialogButtonBox::Cancel|QDialogButtonBox::Ok +- +- +- +- +- +- +- +- +- +- CategoryListWidget +- QWidget +-
gui/CategoryListWidget.h
+- 1 +-
+-
+- +- +-
+diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp +--- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,329 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * Copyright (C) 2018 Sami Vänttinen +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "DatabaseSettingsWidgetBrowser.h" +-#include "ui_DatabaseSettingsWidgetBrowser.h" +- +-#include +- +-#include "browser/BrowserSettings.h" +-#include "core/Clock.h" +-#include "core/Database.h" +-#include "core/Entry.h" +-#include "core/Group.h" +-#include "core/Metadata.h" +-#include "gui/MessageBox.h" +- +-DatabaseSettingsWidgetBrowser::DatabaseSettingsWidgetBrowser(QWidget* parent) +- : DatabaseSettingsWidget(parent) +- , m_ui(new Ui::DatabaseSettingsWidgetBrowser()) +- , m_customData(new CustomData(this)) +- , m_customDataModel(new QStandardItemModel(this)) +-{ +- m_ui->setupUi(this); +- m_ui->removeCustomDataButton->setEnabled(false); +- m_ui->customDataTable->setModel(m_customDataModel); +- +- settingsWarning(); +- +- // clang-format off +- connect(m_ui->customDataTable->selectionModel(), +- SIGNAL(selectionChanged(QItemSelection,QItemSelection)), +- SLOT(toggleRemoveButton(QItemSelection))); +- connect(m_ui->customDataTable, SIGNAL(doubleClicked(QModelIndex)), SLOT(editIndex(QModelIndex))); +- connect(m_customDataModel, SIGNAL(itemChanged(QStandardItem*)), SLOT(editFinished(QStandardItem*))); +- // clang-format on +- +- connect(m_ui->removeCustomDataButton, SIGNAL(clicked()), SLOT(removeSelectedKey())); +- connect(m_ui->convertToCustomData, SIGNAL(clicked()), this, SLOT(convertAttributesToCustomData())); +- connect(m_ui->convertToCustomData, SIGNAL(clicked()), this, SLOT(updateSharedKeyList())); +- connect(m_ui->removeSharedEncryptionKeys, SIGNAL(clicked()), this, SLOT(removeSharedEncryptionKeys())); +- connect(m_ui->removeSharedEncryptionKeys, SIGNAL(clicked()), this, SLOT(updateSharedKeyList())); +- connect(m_ui->removeStoredPermissions, SIGNAL(clicked()), this, SLOT(removeStoredPermissions())); +- connect(m_ui->refreshDatabaseID, SIGNAL(clicked()), this, SLOT(refreshDatabaseID())); +-} +- +-DatabaseSettingsWidgetBrowser::~DatabaseSettingsWidgetBrowser() +-{ +-} +- +-CustomData* DatabaseSettingsWidgetBrowser::customData() const +-{ +- // Returns the current database customData from metadata. Otherwise return an empty customData member. +- if (m_db) { +- return m_db->metadata()->customData(); +- } +- return m_customData; +-} +- +-void DatabaseSettingsWidgetBrowser::initialize() +-{ +- updateModel(); +- settingsWarning(); +-} +- +-void DatabaseSettingsWidgetBrowser::uninitialize() +-{ +-} +- +-void DatabaseSettingsWidgetBrowser::showEvent(QShowEvent* event) +-{ +- QWidget::showEvent(event); +-} +- +-bool DatabaseSettingsWidgetBrowser::save() +-{ +- return true; +-} +- +-void DatabaseSettingsWidgetBrowser::removeSelectedKey() +-{ +- if (MessageBox::Yes +- != MessageBox::question(this, +- tr("Delete the selected key?"), +- tr("Do you really want to delete the selected key?\n" +- "This may prevent connection to the browser plugin."), +- MessageBox::Yes | MessageBox::Cancel, +- MessageBox::Cancel)) { +- return; +- } +- +- const QItemSelectionModel* itemSelectionModel = m_ui->customDataTable->selectionModel(); +- if (itemSelectionModel) { +- for (const QModelIndex& index : itemSelectionModel->selectedRows(0)) { +- QString key = index.data().toString(); +- key.insert(0, CustomData::BrowserKeyPrefix); +- customData()->remove(key); +- } +- updateModel(); +- } +-} +- +-void DatabaseSettingsWidgetBrowser::toggleRemoveButton(const QItemSelection& selected) +-{ +- m_ui->removeCustomDataButton->setEnabled(!selected.isEmpty()); +-} +- +-void DatabaseSettingsWidgetBrowser::updateModel() +-{ +- m_customDataModel->clear(); +- m_customDataModel->setHorizontalHeaderLabels({tr("Key"), tr("Value"), tr("Created")}); +- +- for (const QString& key : customData()->keys()) { +- if (key.startsWith(CustomData::BrowserKeyPrefix)) { +- QString strippedKey = key; +- strippedKey.remove(CustomData::BrowserKeyPrefix); +- auto created = customData()->value(QString("%1_%2").arg(CustomData::Created, strippedKey)); +- auto createdItem = new QStandardItem(created); +- createdItem->setEditable(false); +- m_customDataModel->appendRow(QList() +- << new QStandardItem(strippedKey) +- << new QStandardItem(customData()->value(key)) << createdItem); +- } +- } +- +- m_ui->removeCustomDataButton->setEnabled(false); +-} +- +-void DatabaseSettingsWidgetBrowser::settingsWarning() +-{ +- if (!browserSettings()->isEnabled()) { +- m_ui->convertToCustomData->setEnabled(false); +- m_ui->removeSharedEncryptionKeys->setEnabled(false); +- m_ui->removeStoredPermissions->setEnabled(false); +- m_ui->customDataTable->setEnabled(false); +- m_ui->warningWidget->showMessage(tr("Enable Browser Integration to access these settings."), +- MessageWidget::Warning); +- m_ui->warningWidget->setCloseButtonVisible(false); +- m_ui->warningWidget->setAutoHideTimeout(-1); +- } else { +- m_ui->convertToCustomData->setEnabled(true); +- m_ui->removeSharedEncryptionKeys->setEnabled(true); +- m_ui->removeStoredPermissions->setEnabled(true); +- m_ui->customDataTable->setEnabled(true); +- m_ui->warningWidget->hideMessage(); +- } +-} +- +-void DatabaseSettingsWidgetBrowser::removeSharedEncryptionKeys() +-{ +- if (MessageBox::Yes +- != MessageBox::question(this, +- tr("Disconnect all browsers"), +- tr("Do you really want to disconnect all browsers?\n" +- "This may prevent connection to the browser plugin."), +- MessageBox::Yes | MessageBox::Cancel, +- MessageBox::Cancel)) { +- return; +- } +- +- QStringList keysToRemove; +- for (const QString& key : m_db->metadata()->customData()->keys()) { +- if (key.startsWith(CustomData::BrowserKeyPrefix)) { +- keysToRemove << key; +- } +- } +- +- if (keysToRemove.isEmpty()) { +- MessageBox::information(this, +- tr("KeePassXC: No keys found"), +- tr("No shared encryption keys found in KeePassXC settings."), +- MessageBox::Ok); +- return; +- } +- +- for (const QString& key : keysToRemove) { +- m_db->metadata()->customData()->remove(key); +- } +- +- const int count = keysToRemove.count(); +- MessageBox::information(this, +- tr("KeePassXC: Removed keys from database"), +- tr("Successfully removed %n encryption key(s) from KeePassXC settings.", "", count), +- MessageBox::Ok); +-} +- +-void DatabaseSettingsWidgetBrowser::removeStoredPermissions() +-{ +- if (MessageBox::Yes +- != MessageBox::question(this, +- tr("Forget all site-specific settings on entries"), +- tr("Do you really want forget all site-specific settings on every entry?\n" +- "Permissions to access entries will be revoked."), +- MessageBox::Yes | MessageBox::Cancel, +- MessageBox::Cancel)) { +- return; +- } +- +- QList entries = m_db->rootGroup()->entriesRecursive(); +- +- QProgressDialog progress(tr("Removing stored permissions…"), tr("Abort"), 0, entries.count()); +- progress.setWindowModality(Qt::WindowModal); +- +- uint counter = 0; +- for (Entry* entry : entries) { +- if (progress.wasCanceled()) { +- return; +- } +- +- if (entry->customData()->contains(BrowserService::KEEPASSXCBROWSER_NAME)) { +- entry->beginUpdate(); +- entry->customData()->remove(BrowserService::KEEPASSXCBROWSER_NAME); +- entry->endUpdate(); +- ++counter; +- } +- progress.setValue(progress.value() + 1); +- } +- progress.reset(); +- +- if (counter > 0) { +- MessageBox::information(this, +- tr("KeePassXC: Removed permissions"), +- tr("Successfully removed permissions from %n entry(s).", "", counter), +- MessageBox::Ok); +- } else { +- MessageBox::information(this, +- tr("KeePassXC: No entry with permissions found!"), +- tr("The active database does not contain an entry with permissions."), +- MessageBox::Ok); +- } +-} +- +-void DatabaseSettingsWidgetBrowser::convertAttributesToCustomData() +-{ +- if (MessageBox::Yes +- != MessageBox::question( +- this, +- tr("Move KeePassHTTP attributes to custom data"), +- tr("Do you really want to move all legacy browser integration data to the latest standard?\n" +- "This is necessary to maintain compatibility with the browser plugin."), +- MessageBox::Yes | MessageBox::Cancel, +- MessageBox::Cancel)) { +- return; +- } +- +- BrowserService::convertAttributesToCustomData(m_db); +-} +- +-void DatabaseSettingsWidgetBrowser::refreshDatabaseID() +-{ +- if (MessageBox::Yes +- != MessageBox::question(this, +- tr("Refresh database ID"), +- tr("Do you really want refresh the database ID?\n" +- "This is only necessary if your database is a copy of another and the " +- "browser extension cannot connect."), +- MessageBox::Yes | MessageBox::Cancel, +- MessageBox::Cancel)) { +- return; +- } +- +- m_db->rootGroup()->setUuid(QUuid::createUuid()); +-} +- +-void DatabaseSettingsWidgetBrowser::editIndex(const QModelIndex& index) +-{ +- Q_ASSERT(index.isValid()); +- if (!index.isValid()) { +- return; +- } +- +- m_valueInEdit = index.data().toString(); +- m_ui->customDataTable->edit(index); +-} +- +-void DatabaseSettingsWidgetBrowser::editFinished(QStandardItem* item) +-{ +- const QItemSelectionModel* itemSelectionModel = m_ui->customDataTable->selectionModel(); +- +- if (itemSelectionModel) { +- auto indexList = itemSelectionModel->selectedRows(item->column()); +- if (indexList.length() > 0) { +- QString newValue = item->index().data().toString(); +- +- // The key is edited +- if (item->column() == 0) { +- // Get the old key/value pair, remove it and replace it +- m_valueInEdit.insert(0, CustomData::BrowserKeyPrefix); +- auto tempValue = customData()->value(m_valueInEdit); +- newValue.insert(0, CustomData::BrowserKeyPrefix); +- +- m_db->metadata()->customData()->remove(m_valueInEdit); +- m_db->metadata()->customData()->set(newValue, tempValue); +- } else { +- // Replace just the value +- for (const QString& key : m_db->metadata()->customData()->keys()) { +- if (key.startsWith(CustomData::BrowserKeyPrefix)) { +- if (m_valueInEdit == m_db->metadata()->customData()->value(key)) { +- m_db->metadata()->customData()->set(key, newValue); +- break; +- } +- } +- } +- } +- +- updateModel(); +- } +- } +-} +- +-// Updates the shared key list after the list is cleared +-void DatabaseSettingsWidgetBrowser::updateSharedKeyList() +-{ +- updateModel(); +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.h keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.h +--- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,85 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * Copyright (C) 2018 Sami Vänttinen +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_DATABASESETTINGSWIDGETBROWSER_H +-#define KEEPASSXC_DATABASESETTINGSWIDGETBROWSER_H +- +-#include "DatabaseSettingsWidget.h" +- +-#include "browser/BrowserService.h" +-#include "core/CustomData.h" +-#include "gui/DatabaseTabWidget.h" +- +-#include +-#include +-#include +-#include +- +-class Database; +-namespace Ui +-{ +- class DatabaseSettingsWidgetBrowser; +-} +- +-class DatabaseSettingsWidgetBrowser : public DatabaseSettingsWidget +-{ +- Q_OBJECT +- +-public: +- explicit DatabaseSettingsWidgetBrowser(QWidget* parent = nullptr); +- Q_DISABLE_COPY(DatabaseSettingsWidgetBrowser); +- ~DatabaseSettingsWidgetBrowser() override; +- +- CustomData* customData() const; +- inline bool hasAdvancedMode() const override +- { +- return false; +- } +- +-public slots: +- void initialize() override; +- void uninitialize() override; +- bool save() override; +- +-private slots: +- void removeSelectedKey(); +- void toggleRemoveButton(const QItemSelection& selected); +- void updateSharedKeyList(); +- void removeSharedEncryptionKeys(); +- void removeStoredPermissions(); +- void convertAttributesToCustomData(); +- void refreshDatabaseID(); +- void editIndex(const QModelIndex& index); +- void editFinished(QStandardItem* item); +- +-private: +- void updateModel(); +- void settingsWarning(); +- +-protected: +- void showEvent(QShowEvent* event) override; +- +- const QScopedPointer m_ui; +- +-private: +- QPointer m_customData; +- QPointer m_customDataModel; +- QString m_valueInEdit; +-}; +- +-#endif // KEEPASSXC_DATABASESETTINGSWIDGETBROWSER_H +diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.ui keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.ui +--- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.ui 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.ui 1970-01-01 01:00:00.000000000 +0100 +@@ -1,193 +0,0 @@ +- +- +- DatabaseSettingsWidgetBrowser +- +- +- +- 0 +- 0 +- 669 +- 395 +- +- +- +- +- 0 +- 0 +- +- +- +- +- 450 +- 0 +- +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- +- +- +- KeePassXC-Browser settings +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- Move KeePassHTTP attributes to KeePassXC-Browser custom data +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- Refresh database root group ID +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- Disconnect all browsers +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- Forget all site-specific settings on entries +- +- +- +- +- +- +- +- +- +- Stored keys +- +- +- +- +- +- +- +- +- Stored browser keys +- +- +- QAbstractItemView::NoEditTriggers +- +- +- QAbstractItemView::SelectRows +- +- +- 200 +- +- +- true +- +- +- false +- +- +- +- +- +- +- +- +- Remove selected key +- +- +- Remove +- +- +- +- +- +- +- Qt::Vertical +- +- +- +- 20 +- 40 +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- MessageWidget +- QWidget +-
gui/MessageWidget.h
+- 1 +-
+-
+- +- removeSharedEncryptionKeys +- removeStoredPermissions +- convertToCustomData +- refreshDatabaseID +- customDataTable +- removeCustomDataButton +- +- +- +-
+diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidget.cpp keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidget.cpp +--- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidget.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidget.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,50 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "DatabaseSettingsWidget.h" +-#include "core/Database.h" +- +-#include +- +-#include +-#include +- +-DatabaseSettingsWidget::DatabaseSettingsWidget(QWidget* parent) +- : SettingsWidget(parent) +-{ +-} +- +-DatabaseSettingsWidget::~DatabaseSettingsWidget() +-{ +-} +- +-/** +- * Load the database to be configured by this page and initialize the page. +- * The page will NOT take ownership of the database. +- * +- * @param db database object to be configured +- */ +-void DatabaseSettingsWidget::load(QSharedPointer db) +-{ +- m_db = std::move(db); +- initialize(); +-} +- +-const QSharedPointer DatabaseSettingsWidget::getDatabase() const +-{ +- return m_db; +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.cpp keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.cpp +--- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,258 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "DatabaseSettingsWidgetDatabaseKey.h" +- +-#include "core/Database.h" +-#include "gui/MessageBox.h" +-#include "gui/databasekey/KeyFileEditWidget.h" +-#include "gui/databasekey/PasswordEditWidget.h" +-#include "gui/databasekey/YubiKeyEditWidget.h" +-#include "keys/FileKey.h" +-#include "keys/PasswordKey.h" +-#include "keys/YkChallengeResponseKey.h" +- +-#include +-#include +-#include +- +-DatabaseSettingsWidgetDatabaseKey::DatabaseSettingsWidgetDatabaseKey(QWidget* parent) +- : DatabaseSettingsWidget(parent) +- , m_additionalKeyOptionsToggle(new QPushButton(tr("Add additional protection..."), this)) +- , m_additionalKeyOptions(new QWidget(this)) +- , m_passwordEditWidget(new PasswordEditWidget(this)) +- , m_keyFileEditWidget(new KeyFileEditWidget(this)) +-#ifdef WITH_XC_YUBIKEY +- , m_yubiKeyEditWidget(new YubiKeyEditWidget(this)) +-#endif +-{ +- auto* vbox = new QVBoxLayout(this); +- vbox->setSizeConstraint(QLayout::SetMinimumSize); +- +- // primary password option +- vbox->addWidget(m_passwordEditWidget); +- +- // additional key options +- m_additionalKeyOptionsToggle->setObjectName("additionalKeyOptionsToggle"); +- vbox->addWidget(m_additionalKeyOptionsToggle); +- vbox->addWidget(m_additionalKeyOptions); +- vbox->setSizeConstraint(QLayout::SetMinimumSize); +- m_additionalKeyOptions->setLayout(new QVBoxLayout()); +- m_additionalKeyOptions->layout()->setMargin(0); +- m_additionalKeyOptions->layout()->addWidget(m_keyFileEditWidget); +-#ifdef WITH_XC_YUBIKEY +- m_additionalKeyOptions->layout()->addWidget(m_yubiKeyEditWidget); +-#endif +- m_additionalKeyOptions->setVisible(false); +- +- connect(m_additionalKeyOptionsToggle, SIGNAL(clicked()), SLOT(showAdditionalKeyOptions())); +- +- vbox->addStretch(); +- setLayout(vbox); +-} +- +-DatabaseSettingsWidgetDatabaseKey::~DatabaseSettingsWidgetDatabaseKey() +-{ +-} +- +-void DatabaseSettingsWidgetDatabaseKey::load(QSharedPointer db) +-{ +- DatabaseSettingsWidget::load(db); +- +- if (!m_db->key() || m_db->key()->keys().isEmpty()) { +- // database has no key, we are about to add a new one +- m_passwordEditWidget->changeVisiblePage(KeyComponentWidget::Page::Edit); +- m_passwordEditWidget->setPasswordVisible(true); +- } +- +- bool hasAdditionalKeys = false; +- for (const auto& key : m_db->key()->keys()) { +- if (key->uuid() == PasswordKey::UUID) { +- m_passwordEditWidget->setComponentAdded(true); +- } else if (key->uuid() == FileKey::UUID) { +- m_keyFileEditWidget->setComponentAdded(true); +- hasAdditionalKeys = true; +- } +- } +- +-#ifdef WITH_XC_YUBIKEY +- for (const auto& key : m_db->key()->challengeResponseKeys()) { +- if (key->uuid() == YkChallengeResponseKey::UUID) { +- m_yubiKeyEditWidget->setComponentAdded(true); +- hasAdditionalKeys = true; +- } +- } +-#endif +- +- setAdditionalKeyOptionsVisible(hasAdditionalKeys); +- +- connect(m_passwordEditWidget->findChild("removeButton"), SIGNAL(clicked()), SLOT(markDirty())); +- connect(m_keyFileEditWidget->findChild("removeButton"), SIGNAL(clicked()), SLOT(markDirty())); +-#ifdef WITH_XC_YUBIKEY +- connect(m_yubiKeyEditWidget->findChild("removeButton"), SIGNAL(clicked()), SLOT(markDirty())); +-#endif +-} +- +-void DatabaseSettingsWidgetDatabaseKey::initialize() +-{ +- bool blocked = blockSignals(true); +- m_passwordEditWidget->setComponentAdded(false); +- m_keyFileEditWidget->setComponentAdded(false); +-#ifdef WITH_XC_YUBIKEY +- m_yubiKeyEditWidget->setComponentAdded(false); +-#endif +- blockSignals(blocked); +-} +- +-void DatabaseSettingsWidgetDatabaseKey::uninitialize() +-{ +-} +- +-bool DatabaseSettingsWidgetDatabaseKey::save() +-{ +- m_isDirty |= (m_passwordEditWidget->visiblePage() == KeyComponentWidget::Page::Edit); +- m_isDirty |= (m_keyFileEditWidget->visiblePage() == KeyComponentWidget::Page::Edit); +-#ifdef WITH_XC_YUBIKEY +- m_isDirty |= (m_yubiKeyEditWidget->visiblePage() == KeyComponentWidget::Page::Edit); +-#endif +- +- if (m_db->key() && !m_db->key()->keys().isEmpty() && !m_isDirty) { +- // key unchanged +- return true; +- } +- +- auto newKey = QSharedPointer::create(); +- +- QSharedPointer oldPasswordKey; +- QSharedPointer oldFileKey; +- QSharedPointer oldChallengeResponse; +- +- for (const auto& key : m_db->key()->keys()) { +- if (key->uuid() == PasswordKey::UUID) { +- oldPasswordKey = key; +- } else if (key->uuid() == FileKey::UUID) { +- oldFileKey = key; +- } +- } +- +- for (const auto& key : m_db->key()->challengeResponseKeys()) { +- if (key->uuid() == YkChallengeResponseKey::UUID) { +- oldChallengeResponse = key; +- } +- } +- +- if (m_passwordEditWidget->visiblePage() == KeyComponentWidget::Page::AddNew || m_passwordEditWidget->isEmpty()) { +- QScopedPointer msgBox(new QMessageBox(this)); +- msgBox->setIcon(QMessageBox::Warning); +- msgBox->setWindowTitle(tr("No password set")); +- msgBox->setText(tr("WARNING! You have not set a password. Using a database without " +- "a password is strongly discouraged!\n\n" +- "Are you sure you want to continue without a password?")); +- auto btn = msgBox->addButton(tr("Continue without password"), QMessageBox::ButtonRole::AcceptRole); +- msgBox->addButton(QMessageBox::Cancel); +- msgBox->setDefaultButton(QMessageBox::Cancel); +- msgBox->exec(); +- if (msgBox->clickedButton() != btn) { +- return false; +- } +- } else if (!addToCompositeKey(m_passwordEditWidget, newKey, oldPasswordKey)) { +- return false; +- } +- +- if (!addToCompositeKey(m_keyFileEditWidget, newKey, oldFileKey)) { +- return false; +- } +- +-#ifdef WITH_XC_YUBIKEY +- if (!addToCompositeKey(m_yubiKeyEditWidget, newKey, oldChallengeResponse)) { +- return false; +- } +-#endif +- +- if (newKey->keys().isEmpty() && newKey->challengeResponseKeys().isEmpty()) { +- MessageBox::critical(this, +- tr("No encryption key added"), +- tr("You must add at least one encryption key to secure your database!"), +- MessageBox::Ok, +- MessageBox::Ok); +- return false; +- } +- +- m_db->setKey(newKey, true, false, false); +- +- emit editFinished(true); +- if (m_isDirty) { +- m_db->markAsModified(); +- } +- +- return true; +-} +- +-void DatabaseSettingsWidgetDatabaseKey::discard() +-{ +- emit editFinished(false); +-} +- +-void DatabaseSettingsWidgetDatabaseKey::showAdditionalKeyOptions() +-{ +- setAdditionalKeyOptionsVisible(true); +-} +- +-void DatabaseSettingsWidgetDatabaseKey::setAdditionalKeyOptionsVisible(bool show) +-{ +- m_additionalKeyOptionsToggle->setVisible(!show); +- m_additionalKeyOptions->setVisible(show); +-} +- +-bool DatabaseSettingsWidgetDatabaseKey::addToCompositeKey(KeyComponentWidget* widget, +- QSharedPointer& newKey, +- QSharedPointer& oldKey) +-{ +- if (widget->visiblePage() == KeyComponentWidget::Edit) { +- QString error = tr("Unknown error"); +- if (!widget->validate(error) || !widget->addToCompositeKey(newKey)) { +- MessageBox::critical(this, tr("Failed to change database credentials"), error, MessageBox::Ok); +- return false; +- } +- } else if (widget->visiblePage() == KeyComponentWidget::LeaveOrRemove) { +- Q_ASSERT(oldKey); +- newKey->addKey(oldKey); +- } +- return true; +-} +- +-bool DatabaseSettingsWidgetDatabaseKey::addToCompositeKey(KeyComponentWidget* widget, +- QSharedPointer& newKey, +- QSharedPointer& oldKey) +-{ +- if (widget->visiblePage() == KeyComponentWidget::Edit) { +- QString error = tr("Unknown error"); +- if (!widget->validate(error) || !widget->addToCompositeKey(newKey)) { +- MessageBox::critical(this, tr("Failed to change database credentials"), error, MessageBox::Ok); +- return false; +- } +- } else if (widget->visiblePage() == KeyComponentWidget::LeaveOrRemove) { +- Q_ASSERT(oldKey); +- newKey->addChallengeResponseKey(oldKey); +- } +- return true; +-} +- +-void DatabaseSettingsWidgetDatabaseKey::markDirty() +-{ +- m_isDirty = true; +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.h keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.h +--- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,85 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_DATABASESETTINGSPAGECHANGEDBKEY_H +-#define KEEPASSXC_DATABASESETTINGSPAGECHANGEDBKEY_H +- +-#include "DatabaseSettingsWidget.h" +-#include "config-keepassx.h" +- +-#include +- +-class Database; +-class Key; +-class CompositeKey; +-class ChallengeResponseKey; +-class KeyComponentWidget; +-class PasswordEditWidget; +-class KeyFileEditWidget; +-class YubiKeyEditWidget; +-class QPushButton; +- +-class DatabaseSettingsWidgetDatabaseKey : public DatabaseSettingsWidget +-{ +- Q_OBJECT +- +-public: +- explicit DatabaseSettingsWidgetDatabaseKey(QWidget* parent = nullptr); +- Q_DISABLE_COPY(DatabaseSettingsWidgetDatabaseKey); +- ~DatabaseSettingsWidgetDatabaseKey() override; +- +- void load(QSharedPointer db) override; +- +- inline bool hasAdvancedMode() const override +- { +- return false; +- } +- +-public slots: +- void initialize() override; +- void uninitialize() override; +- bool save() override; +- void discard() override; +- +-private slots: +- void showAdditionalKeyOptions(); +- void markDirty(); +- +-private: +- void setAdditionalKeyOptionsVisible(bool show); +- +- // clang-format off +- bool addToCompositeKey(KeyComponentWidget* widget, +- QSharedPointer& newKey, +- QSharedPointer& oldKey); +- // clang-format on +- +- bool addToCompositeKey(KeyComponentWidget* widget, +- QSharedPointer& newKey, +- QSharedPointer& oldKey); +- +- bool m_isDirty = false; +- const QPointer m_additionalKeyOptionsToggle; +- const QPointer m_additionalKeyOptions; +- const QPointer m_passwordEditWidget; +- const QPointer m_keyFileEditWidget; +-#ifdef WITH_XC_YUBIKEY +- const QPointer m_yubiKeyEditWidget; +-#endif +-}; +- +-#endif // KEEPASSXC_DATABASESETTINGSPAGECHANGEDBKEY_H +diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.cpp keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.cpp +--- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,423 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "DatabaseSettingsWidgetEncryption.h" +-#include "ui_DatabaseSettingsWidgetEncryption.h" +- +-#include "core/AsyncTask.h" +-#include "core/Database.h" +-#include "core/Global.h" +-#include "core/Metadata.h" +-#include "crypto/kdf/Argon2Kdf.h" +-#include "format/KeePass2.h" +-#include "gui/MessageBox.h" +- +-#include +-#include +- +-const char* DatabaseSettingsWidgetEncryption::CD_DECRYPTION_TIME_PREFERENCE_KEY = "KPXC_DECRYPTION_TIME_PREFERENCE"; +- +-DatabaseSettingsWidgetEncryption::DatabaseSettingsWidgetEncryption(QWidget* parent) +- : DatabaseSettingsWidget(parent) +- , m_ui(new Ui::DatabaseSettingsWidgetEncryption()) +-{ +- m_ui->setupUi(this); +- +- connect(m_ui->transformBenchmarkButton, SIGNAL(clicked()), SLOT(benchmarkTransformRounds())); +- connect(m_ui->kdfComboBox, SIGNAL(currentIndexChanged(int)), SLOT(changeKdf(int))); +- +- connect(m_ui->memorySpinBox, SIGNAL(valueChanged(int)), this, SLOT(memoryChanged(int))); +- connect(m_ui->parallelismSpinBox, SIGNAL(valueChanged(int)), this, SLOT(parallelismChanged(int))); +- +- m_ui->compatibilitySelection->addItem(tr("KDBX 4.0 (recommended)"), KeePass2::KDF_ARGON2D.toByteArray()); +- m_ui->compatibilitySelection->addItem(tr("KDBX 3.1"), KeePass2::KDF_AES_KDBX3.toByteArray()); +- m_ui->decryptionTimeSlider->setMinimum(Kdf::MIN_ENCRYPTION_TIME / 100); +- m_ui->decryptionTimeSlider->setMaximum(Kdf::MAX_ENCRYPTION_TIME / 100); +- m_ui->decryptionTimeSlider->setValue(Kdf::DEFAULT_ENCRYPTION_TIME / 100); +- updateDecryptionTime(m_ui->decryptionTimeSlider->value()); +- +- m_ui->transformBenchmarkButton->setText( +- QObject::tr("Benchmark %1 delay") +- .arg(DatabaseSettingsWidgetEncryption::getTextualEncryptionTime(Kdf::DEFAULT_ENCRYPTION_TIME))); +- m_ui->minTimeLabel->setText(DatabaseSettingsWidgetEncryption::getTextualEncryptionTime(Kdf::MIN_ENCRYPTION_TIME)); +- m_ui->maxTimeLabel->setText(DatabaseSettingsWidgetEncryption::getTextualEncryptionTime(Kdf::MAX_ENCRYPTION_TIME)); +- +- connect(m_ui->activateChangeDecryptionTimeButton, SIGNAL(clicked()), SLOT(activateChangeDecryptionTime())); +- connect(m_ui->decryptionTimeSlider, SIGNAL(valueChanged(int)), SLOT(updateDecryptionTime(int))); +- connect(m_ui->compatibilitySelection, SIGNAL(currentIndexChanged(int)), SLOT(updateFormatCompatibility(int))); +- +- // conditions under which a key re-transformation is needed +- connect(m_ui->decryptionTimeSlider, SIGNAL(valueChanged(int)), SLOT(markDirty())); +- connect(m_ui->compatibilitySelection, SIGNAL(currentIndexChanged(int)), SLOT(markDirty())); +- connect(m_ui->activateChangeDecryptionTimeButton, SIGNAL(clicked()), SLOT(markDirty())); +- connect(m_ui->algorithmComboBox, SIGNAL(currentIndexChanged(int)), SLOT(markDirty())); +- connect(m_ui->kdfComboBox, SIGNAL(currentIndexChanged(int)), SLOT(markDirty())); +- connect(m_ui->transformRoundsSpinBox, SIGNAL(valueChanged(int)), SLOT(markDirty())); +- connect(m_ui->memorySpinBox, SIGNAL(valueChanged(int)), SLOT(markDirty())); +- connect(m_ui->parallelismSpinBox, SIGNAL(valueChanged(int)), SLOT(markDirty())); +-} +- +-DatabaseSettingsWidgetEncryption::~DatabaseSettingsWidgetEncryption() +-{ +-} +- +-#define IS_ARGON2(uuid) (uuid == KeePass2::KDF_ARGON2D || uuid == KeePass2::KDF_ARGON2ID) +-#define IS_AES_KDF(uuid) (uuid == KeePass2::KDF_AES_KDBX3 || uuid == KeePass2::KDF_AES_KDBX4) +- +-void DatabaseSettingsWidgetEncryption::initialize() +-{ +- Q_ASSERT(m_db); +- if (!m_db) { +- return; +- } +- +- bool isDirty = false; +- +- if (!m_db->kdf()) { +- m_db->setKdf(KeePass2::uuidToKdf(KeePass2::KDF_ARGON2D)); +- isDirty = true; +- } +- if (!m_db->key()) { +- m_db->setKey(QSharedPointer::create(), true, false, false); +- m_db->setCipher(KeePass2::CIPHER_AES256); +- isDirty = true; +- } +- +- // check if the DB's custom data has a decryption time setting stored +- // and set the slider to it, otherwise just state that the time is unchanged +- // (we cannot infer the time from the raw KDF settings) +- auto* cd = m_db->metadata()->customData(); +- if (cd->hasKey(CD_DECRYPTION_TIME_PREFERENCE_KEY)) { +- int decryptionTime = qMax(100, cd->value(CD_DECRYPTION_TIME_PREFERENCE_KEY).toInt()); +- bool block = m_ui->decryptionTimeSlider->blockSignals(true); +- m_ui->decryptionTimeSlider->setValue(decryptionTime / 100); +- updateDecryptionTime(decryptionTime / 100); +- m_ui->decryptionTimeSlider->blockSignals(block); +- m_ui->activateChangeDecryptionTimeButton->setVisible(false); +- } else { +- m_ui->decryptionTimeSettings->setVisible(isDirty); +- m_ui->activateChangeDecryptionTimeButton->setVisible(!isDirty); +- if (!isDirty) { +- m_ui->decryptionTimeValueLabel->setText(tr("unchanged", "Database decryption time is unchanged")); +- } +- } +- +- updateFormatCompatibility(m_db->kdf()->uuid() == KeePass2::KDF_AES_KDBX3 ? KDBX3 : KDBX4, isDirty); +- setupAlgorithmComboBox(); +- setupKdfComboBox(); +- loadKdfParameters(); +- +- m_isDirty = isDirty; +-} +- +-void DatabaseSettingsWidgetEncryption::uninitialize() +-{ +-} +- +-void DatabaseSettingsWidgetEncryption::showEvent(QShowEvent* event) +-{ +- QWidget::showEvent(event); +- m_ui->decryptionTimeSlider->setFocus(); +-} +- +-void DatabaseSettingsWidgetEncryption::setupAlgorithmComboBox() +-{ +- m_ui->algorithmComboBox->clear(); +- for (auto& cipher : asConst(KeePass2::CIPHERS)) { +- m_ui->algorithmComboBox->addItem(cipher.second.toUtf8(), cipher.first.toByteArray()); +- } +- int cipherIndex = m_ui->algorithmComboBox->findData(m_db->cipher().toByteArray()); +- if (cipherIndex > -1) { +- m_ui->algorithmComboBox->setCurrentIndex(cipherIndex); +- } +-} +- +-void DatabaseSettingsWidgetEncryption::setupKdfComboBox() +-{ +- // Setup kdf combo box +- bool block = m_ui->kdfComboBox->blockSignals(true); +- m_ui->kdfComboBox->clear(); +- for (auto& kdf : asConst(KeePass2::KDFS)) { +- m_ui->kdfComboBox->addItem(kdf.second.toUtf8(), kdf.first.toByteArray()); +- } +- m_ui->kdfComboBox->blockSignals(block); +-} +- +-void DatabaseSettingsWidgetEncryption::loadKdfParameters() +-{ +- Q_ASSERT(m_db); +- if (!m_db) { +- return; +- } +- +- auto kdf = m_db->kdf(); +- Q_ASSERT(kdf); +- if (!kdf) { +- return; +- } +- +- int kdfIndex = m_ui->kdfComboBox->findData(m_db->kdf()->uuid().toByteArray()); +- if (kdfIndex > -1) { +- bool block = m_ui->kdfComboBox->blockSignals(true); +- m_ui->kdfComboBox->setCurrentIndex(kdfIndex); +- m_ui->kdfComboBox->blockSignals(block); +- } +- +- m_ui->transformRoundsSpinBox->setValue(kdf->rounds()); +- if (IS_ARGON2(m_db->kdf()->uuid())) { +- auto argon2Kdf = kdf.staticCast(); +- m_ui->memorySpinBox->setValue(static_cast(argon2Kdf->memory()) / (1 << 10)); +- m_ui->parallelismSpinBox->setValue(argon2Kdf->parallelism()); +- } +- +- updateKdfFields(); +-} +- +-void DatabaseSettingsWidgetEncryption::updateKdfFields() +-{ +- QUuid id = m_db->kdf()->uuid(); +- +- m_ui->memoryUsageLabel->setVisible(IS_ARGON2(id)); +- m_ui->memorySpinBox->setVisible(IS_ARGON2(id)); +- m_ui->parallelismLabel->setVisible(IS_ARGON2(id)); +- m_ui->parallelismSpinBox->setVisible(IS_ARGON2(id)); +-} +- +-void DatabaseSettingsWidgetEncryption::activateChangeDecryptionTime() +-{ +- m_ui->decryptionTimeSettings->setVisible(true); +- m_ui->activateChangeDecryptionTimeButton->setVisible(false); +- updateDecryptionTime(m_ui->decryptionTimeSlider->value()); +-} +- +-void DatabaseSettingsWidgetEncryption::markDirty() +-{ +- m_isDirty = true; +-} +- +-bool DatabaseSettingsWidgetEncryption::save() +-{ +- Q_ASSERT(m_db); +- if (!m_db) { +- return false; +- } +- +- if (m_db->key() && !m_db->key()->keys().isEmpty() && !m_isDirty) { +- // nothing has changed, don't re-transform +- return true; +- } +- +- auto kdf = m_db->kdf(); +- Q_ASSERT(kdf); +- +- if (!advancedMode()) { +- if (kdf && !m_isDirty && !m_ui->decryptionTimeSettings->isVisible()) { +- return true; +- } +- +- int time = m_ui->decryptionTimeSlider->value() * 100; +- updateFormatCompatibility(m_ui->compatibilitySelection->currentIndex(), false); +- +- QApplication::setOverrideCursor(Qt::BusyCursor); +- +- int rounds = AsyncTask::runAndWaitForFuture([&kdf, time]() { return kdf->benchmark(time); }); +- kdf->setRounds(rounds); +- +- // TODO: we should probably use AsyncTask::runAndWaitForFuture() here, +- // but not without making Database thread-safe +- bool ok = m_db->changeKdf(kdf); +- +- QApplication::restoreOverrideCursor(); +- +- m_db->metadata()->customData()->set(CD_DECRYPTION_TIME_PREFERENCE_KEY, QString("%1").arg(time)); +- +- return ok; +- } +- +- // remove a stored decryption time from custom data when advanced settings are used +- // we don't know it until we actually run the KDF +- m_db->metadata()->customData()->remove(CD_DECRYPTION_TIME_PREFERENCE_KEY); +- +- // first perform safety check for KDF rounds +- if (IS_ARGON2(kdf->uuid()) && m_ui->transformRoundsSpinBox->value() > 10000) { +- QMessageBox warning; +- warning.setIcon(QMessageBox::Warning); +- warning.setWindowTitle(tr("Number of rounds too high", "Key transformation rounds")); +- warning.setText(tr("You are using a very high number of key transform rounds with Argon2.\n\n" +- "If you keep this number, your database may take hours or days (or even longer) to open!")); +- auto ok = warning.addButton(tr("Understood, keep number"), QMessageBox::ButtonRole::AcceptRole); +- auto cancel = warning.addButton(tr("Cancel"), QMessageBox::ButtonRole::RejectRole); +- warning.setDefaultButton(cancel); +- warning.exec(); +- if (warning.clickedButton() != ok) { +- return false; +- } +- } else if (IS_AES_KDF(kdf->uuid()) && m_ui->transformRoundsSpinBox->value() < 100000) { +- QMessageBox warning; +- warning.setIcon(QMessageBox::Warning); +- warning.setWindowTitle(tr("Number of rounds too low", "Key transformation rounds")); +- warning.setText(tr("You are using a very low number of key transform rounds with AES-KDF.\n\n" +- "If you keep this number, your database may be too easy to crack!")); +- auto ok = warning.addButton(tr("Understood, keep number"), QMessageBox::ButtonRole::AcceptRole); +- auto cancel = warning.addButton(tr("Cancel"), QMessageBox::ButtonRole::RejectRole); +- warning.setDefaultButton(cancel); +- warning.exec(); +- if (warning.clickedButton() != ok) { +- return false; +- } +- } +- +- m_db->setCipher(QUuid(m_ui->algorithmComboBox->currentData().toByteArray())); +- +- // Save kdf parameters +- kdf->setRounds(m_ui->transformRoundsSpinBox->value()); +- if (IS_ARGON2(kdf->uuid())) { +- auto argon2Kdf = kdf.staticCast(); +- argon2Kdf->setMemory(static_cast(m_ui->memorySpinBox->value()) * (1 << 10)); +- argon2Kdf->setParallelism(static_cast(m_ui->parallelismSpinBox->value())); +- } +- +- QApplication::setOverrideCursor(Qt::WaitCursor); +- // TODO: we should probably use AsyncTask::runAndWaitForFuture() here, +- // but not without making Database thread-safe +- bool ok = m_db->changeKdf(kdf); +- QApplication::restoreOverrideCursor(); +- +- if (!ok) { +- MessageBox::warning(this, +- tr("KDF unchanged"), +- tr("Failed to transform key with new KDF parameters; KDF unchanged."), +- QMessageBox::Ok); +- } +- +- return ok; +-} +- +-void DatabaseSettingsWidgetEncryption::benchmarkTransformRounds(int millisecs) +-{ +- QApplication::setOverrideCursor(Qt::BusyCursor); +- m_ui->transformBenchmarkButton->setEnabled(false); +- m_ui->transformRoundsSpinBox->setFocus(); +- +- // Create a new kdf with the current parameters +- auto kdf = KeePass2::uuidToKdf(QUuid(m_ui->kdfComboBox->currentData().toByteArray())); +- kdf->setRounds(m_ui->transformRoundsSpinBox->value()); +- if (IS_ARGON2(kdf->uuid())) { +- auto argon2Kdf = kdf.staticCast(); +- if (!argon2Kdf->setMemory(static_cast(m_ui->memorySpinBox->value()) * (1 << 10))) { +- m_ui->memorySpinBox->setValue(static_cast(argon2Kdf->memory() / (1 << 10))); +- } +- if (!argon2Kdf->setParallelism(static_cast(m_ui->parallelismSpinBox->value()))) { +- m_ui->parallelismSpinBox->setValue(argon2Kdf->parallelism()); +- } +- } +- +- // Determine the number of rounds required to meet 1 second delay +- int rounds = AsyncTask::runAndWaitForFuture([&kdf, millisecs]() { return kdf->benchmark(millisecs); }); +- +- m_ui->transformRoundsSpinBox->setValue(rounds); +- m_ui->transformBenchmarkButton->setEnabled(true); +- m_ui->decryptionTimeSlider->setValue(millisecs / 100); +- QApplication::restoreOverrideCursor(); +-} +- +-void DatabaseSettingsWidgetEncryption::changeKdf(int index) +-{ +- Q_ASSERT(m_db); +- if (!m_db) { +- return; +- } +- +- QUuid id(m_ui->kdfComboBox->itemData(index).toByteArray()); +- m_db->setKdf(KeePass2::uuidToKdf(id)); +- updateKdfFields(); +- activateChangeDecryptionTime(); +- benchmarkTransformRounds(); +-} +- +-/** +- * Update memory spin box suffix on value change. +- */ +-void DatabaseSettingsWidgetEncryption::memoryChanged(int value) +-{ +- m_ui->memorySpinBox->setSuffix(tr(" MiB", "Abbreviation for Mebibytes (KDF settings)", value)); +-} +- +-/** +- * Update parallelism spin box suffix on value change. +- */ +-void DatabaseSettingsWidgetEncryption::parallelismChanged(int value) +-{ +- m_ui->parallelismSpinBox->setSuffix(tr(" thread(s)", "Threads for parallel execution (KDF settings)", value)); +-} +- +-void DatabaseSettingsWidgetEncryption::setAdvancedMode(bool advanced) +-{ +- DatabaseSettingsWidget::setAdvancedMode(advanced); +- +- if (advanced) { +- loadKdfParameters(); +- m_ui->stackedWidget->setCurrentIndex(1); +- } else { +- m_ui->compatibilitySelection->setCurrentIndex(m_db->kdf()->uuid() == KeePass2::KDF_AES_KDBX3 ? KDBX3 : KDBX4); +- m_ui->stackedWidget->setCurrentIndex(0); +- } +-} +- +-void DatabaseSettingsWidgetEncryption::updateDecryptionTime(int value) +-{ +- m_ui->decryptionTimeValueLabel->setText(DatabaseSettingsWidgetEncryption::getTextualEncryptionTime(value * 100)); +-} +- +-void DatabaseSettingsWidgetEncryption::updateFormatCompatibility(int index, bool retransform) +-{ +- Q_ASSERT(m_db); +- if (!m_db) { +- return; +- } +- +- if (m_ui->compatibilitySelection->currentIndex() != index) { +- bool block = m_ui->compatibilitySelection->blockSignals(true); +- m_ui->compatibilitySelection->setCurrentIndex(index); +- m_ui->compatibilitySelection->blockSignals(block); +- } +- +- if (retransform) { +- QUuid kdfUuid(m_ui->compatibilitySelection->itemData(index).toByteArray()); +- auto kdf = KeePass2::uuidToKdf(kdfUuid); +- m_db->setKdf(kdf); +- +- if (IS_ARGON2(kdf->uuid())) { +- auto argon2Kdf = kdf.staticCast(); +- // Default to 64 MiB of memory and 2 threads +- // these settings are safe for desktop and mobile devices +- argon2Kdf->setMemory(1 << 16); +- argon2Kdf->setParallelism(2); +- } +- +- activateChangeDecryptionTime(); +- } +-} +- +-QString DatabaseSettingsWidgetEncryption::getTextualEncryptionTime(int millisecs) +-{ +- if (millisecs < 1000) { +- return QObject::tr("%1 ms", "milliseconds", millisecs).arg(millisecs); +- } else { +- return QObject::tr("%1 s", "seconds", millisecs / 1000).arg(millisecs / 1000.0, 0, 'f', 1); +- } +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.h keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.h +--- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,86 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_DATABASESETTINGSWIDGETENCRYPTION_H +-#define KEEPASSXC_DATABASESETTINGSWIDGETENCRYPTION_H +- +-#include "DatabaseSettingsWidget.h" +- +-#include "crypto/kdf/Kdf.h" +- +-#include +-#include +- +-class Database; +-namespace Ui +-{ +- class DatabaseSettingsWidgetEncryption; +-} +- +-class DatabaseSettingsWidgetEncryption : public DatabaseSettingsWidget +-{ +- Q_OBJECT +- +-public: +- explicit DatabaseSettingsWidgetEncryption(QWidget* parent = nullptr); +- Q_DISABLE_COPY(DatabaseSettingsWidgetEncryption); +- ~DatabaseSettingsWidgetEncryption() override; +- +- inline bool hasAdvancedMode() const override +- { +- return true; +- } +- void setAdvancedMode(bool advanced) override; +- +-public slots: +- void initialize() override; +- void uninitialize() override; +- bool save() override; +- +- static QString getTextualEncryptionTime(int millisecs); +- +-protected: +- void showEvent(QShowEvent* event) override; +- +-private slots: +- void benchmarkTransformRounds(int millisecs = Kdf::DEFAULT_ENCRYPTION_TIME); +- void changeKdf(int index); +- void memoryChanged(int value); +- void parallelismChanged(int value); +- void updateDecryptionTime(int value); +- void updateFormatCompatibility(int index, bool retransform = true); +- void setupAlgorithmComboBox(); +- void setupKdfComboBox(); +- void loadKdfParameters(); +- void updateKdfFields(); +- void activateChangeDecryptionTime(); +- void markDirty(); +- +-private: +- enum FormatSelection +- { +- KDBX4, +- KDBX3 +- }; +- static const char* CD_DECRYPTION_TIME_PREFERENCE_KEY; +- +- bool m_isDirty = false; +- bool m_formatCompatibilityDirty = false; +- const QScopedPointer m_ui; +-}; +- +-#endif // KEEPASSXC_DATABASESETTINGSWIDGETENCRYPTION_H +diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.ui keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.ui +--- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.ui 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.ui 1970-01-01 01:00:00.000000000 +0100 +@@ -1,436 +0,0 @@ +- +- +- DatabaseSettingsWidgetEncryption +- +- +- +- 0 +- 0 +- 585 +- 339 +- +- +- +- +- +- +- 0 +- +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- Qt::Vertical +- +- +- QSizePolicy::Fixed +- +- +- +- 20 +- 10 +- +- +- +- +- +- +- +- +- +- Decryption Time: +- +- +- +- +- +- +- ?? s +- +- +- +- +- +- +- Qt::Horizontal +- +- +- +- 40 +- 20 +- +- +- +- +- +- +- +- Change existing decryption time +- +- +- Change +- +- +- +- +- +- +- +- +- +- +- +- Decryption time in seconds +- +- +- 1 +- +- +- 10 +- +- +- 10 +- +- +- Qt::Horizontal +- +- +- QSlider::TicksBelow +- +- +- 5 +- +- +- +- +- +- +- +- +- ?? ms +- +- +- +- +- +- +- Qt::Horizontal +- +- +- +- 40 +- 20 +- +- +- +- +- +- +- +- ? s +- +- +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- Higher values offer more protection, but opening the database will take longer. +- +- +- true +- +- +- +- +- +- +- Qt::Vertical +- +- +- QSizePolicy::Fixed +- +- +- +- 20 +- 20 +- +- +- +- +- +- +- +- +- +- +- +- +- Database format: +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- Database format +- +- +- +- +- +- +- +- +- This is only important if you need to use your database with other programs. +- +- +- +- +- +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- Encryption Algorithm: +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- Encryption algorithm +- +- +- +- AES: 256 Bit (default) +- +- +- +- +- Twofish: 256 Bit +- +- +- +- +- +- +- +- Key Derivation Function: +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- Key derivation function +- +- +- +- +- +- +- Transform rounds: +- +- +- +- +- +- +- +- +- +- 150 +- 0 +- +- +- +- +- 150 +- 16777215 +- +- +- +- Transform rounds +- +- +- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter +- +- +- 1 +- +- +- 1000000000 +- +- +- +- +- +- +- Qt::WheelFocus +- +- +- +- +- +- +- Qt::Horizontal +- +- +- +- 40 +- 20 +- +- +- +- +- +- +- +- +- +- Memory Usage: +- +- +- +- +- +- +- +- 150 +- 0 +- +- +- +- +- 150 +- 16777215 +- +- +- +- Memory usage +- +- +- 1 +- +- +- 1048576 +- +- +- +- +- +- +- Parallelism: +- +- +- +- +- +- +- +- 150 +- 0 +- +- +- +- +- 150 +- 16777215 +- +- +- +- Parallelism +- +- +- 1 +- +- +- 128 +- +- +- +- +- +- +- +- +- +- +- Qt::Vertical +- +- +- +- 20 +- 40 +- +- +- +- +- +- +- +- activateChangeDecryptionTimeButton +- decryptionTimeSlider +- compatibilitySelection +- algorithmComboBox +- kdfComboBox +- transformRoundsSpinBox +- transformBenchmarkButton +- memorySpinBox +- parallelismSpinBox +- +- +- +- +diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.cpp keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.cpp +--- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,145 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "DatabaseSettingsWidgetGeneral.h" +-#include "ui_DatabaseSettingsWidgetGeneral.h" +- +-#include "core/Clock.h" +-#include "core/Database.h" +-#include "core/Entry.h" +-#include "core/Group.h" +-#include "core/Metadata.h" +-#include "gui/MessageBox.h" +- +-DatabaseSettingsWidgetGeneral::DatabaseSettingsWidgetGeneral(QWidget* parent) +- : DatabaseSettingsWidget(parent) +- , m_ui(new Ui::DatabaseSettingsWidgetGeneral()) +-{ +- m_ui->setupUi(this); +- +- connect(m_ui->historyMaxItemsCheckBox, SIGNAL(toggled(bool)), m_ui->historyMaxItemsSpinBox, SLOT(setEnabled(bool))); +- connect(m_ui->historyMaxSizeCheckBox, SIGNAL(toggled(bool)), m_ui->historyMaxSizeSpinBox, SLOT(setEnabled(bool))); +-} +- +-DatabaseSettingsWidgetGeneral::~DatabaseSettingsWidgetGeneral() +-{ +-} +- +-void DatabaseSettingsWidgetGeneral::initialize() +-{ +- Metadata* meta = m_db->metadata(); +- +- m_ui->dbNameEdit->setText(meta->name()); +- m_ui->dbDescriptionEdit->setText(meta->description()); +- m_ui->recycleBinEnabledCheckBox->setChecked(meta->recycleBinEnabled()); +- m_ui->defaultUsernameEdit->setText(meta->defaultUserName()); +- m_ui->compressionCheckbox->setChecked(m_db->compressionAlgorithm() != Database::CompressionNone); +- +- if (meta->historyMaxItems() > -1) { +- m_ui->historyMaxItemsSpinBox->setValue(meta->historyMaxItems()); +- m_ui->historyMaxItemsCheckBox->setChecked(true); +- } else { +- m_ui->historyMaxItemsSpinBox->setValue(Metadata::DefaultHistoryMaxItems); +- m_ui->historyMaxItemsCheckBox->setChecked(false); +- } +- int historyMaxSizeMiB = qRound(meta->historyMaxSize() / qreal(1048576)); +- if (historyMaxSizeMiB > 0) { +- m_ui->historyMaxSizeSpinBox->setValue(historyMaxSizeMiB); +- m_ui->historyMaxSizeCheckBox->setChecked(true); +- } else { +- m_ui->historyMaxSizeSpinBox->setValue(Metadata::DefaultHistoryMaxSize); +- m_ui->historyMaxSizeCheckBox->setChecked(false); +- } +-} +- +-void DatabaseSettingsWidgetGeneral::uninitialize() +-{ +-} +- +-void DatabaseSettingsWidgetGeneral::showEvent(QShowEvent* event) +-{ +- QWidget::showEvent(event); +- m_ui->dbNameEdit->setFocus(); +-} +- +-bool DatabaseSettingsWidgetGeneral::save() +-{ +- auto* meta = m_db->metadata(); +- +- if (!m_ui->recycleBinEnabledCheckBox->isChecked() && meta->recycleBinEnabled()) { +- auto recycleBin = meta->recycleBin(); +- if (recycleBin && !recycleBin->isEmpty()) { +- auto result = MessageBox::question(this, +- tr("Delete Recycle Bin"), +- tr("Do you want to delete the current recycle bin and all its " +- "contents?\nThis action is not reversible."), +- MessageBox::Delete | MessageBox::No, +- MessageBox::No); +- +- if (result == MessageBox::Delete) { +- recycleBin->deleteLater(); +- } else { +- recycleBin->setName(recycleBin->name().append(tr(" (old)"))); +- recycleBin->setIcon(Group::DefaultIconNumber); +- } +- } +- +- meta->setRecycleBin(nullptr); +- } +- +- m_db->setCompressionAlgorithm(m_ui->compressionCheckbox->isChecked() ? Database::CompressionGZip +- : Database::CompressionNone); +- +- meta->setName(m_ui->dbNameEdit->text()); +- meta->setDescription(m_ui->dbDescriptionEdit->text()); +- meta->setDefaultUserName(m_ui->defaultUsernameEdit->text()); +- meta->setRecycleBinEnabled(m_ui->recycleBinEnabledCheckBox->isChecked()); +- meta->setSettingsChanged(Clock::currentDateTimeUtc()); +- +- bool truncate = false; +- +- int historyMaxItems; +- if (m_ui->historyMaxItemsCheckBox->isChecked()) { +- historyMaxItems = m_ui->historyMaxItemsSpinBox->value(); +- } else { +- historyMaxItems = -1; +- } +- if (historyMaxItems != meta->historyMaxItems()) { +- meta->setHistoryMaxItems(historyMaxItems); +- truncate = true; +- } +- +- int historyMaxSize; +- if (m_ui->historyMaxSizeCheckBox->isChecked()) { +- historyMaxSize = m_ui->historyMaxSizeSpinBox->value() * 1048576; +- } else { +- historyMaxSize = -1; +- } +- if (historyMaxSize != meta->historyMaxSize()) { +- meta->setHistoryMaxSize(historyMaxSize); +- truncate = true; +- } +- +- if (truncate) { +- const QList allEntries = m_db->rootGroup()->entriesRecursive(false); +- for (Entry* entry : allEntries) { +- entry->truncateHistory(); +- } +- } +- +- return true; +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.h keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.h +--- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,57 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_DATABASESETTINGSWIDGETGENERAL_H +-#define KEEPASSXC_DATABASESETTINGSWIDGETGENERAL_H +- +-#include "DatabaseSettingsWidget.h" +- +-#include +-#include +- +-class Database; +-namespace Ui +-{ +- class DatabaseSettingsWidgetGeneral; +-} +- +-class DatabaseSettingsWidgetGeneral : public DatabaseSettingsWidget +-{ +- Q_OBJECT +- +-public: +- explicit DatabaseSettingsWidgetGeneral(QWidget* parent = nullptr); +- Q_DISABLE_COPY(DatabaseSettingsWidgetGeneral); +- ~DatabaseSettingsWidgetGeneral() override; +- +- inline bool hasAdvancedMode() const override +- { +- return false; +- } +- +-public slots: +- void initialize() override; +- void uninitialize() override; +- bool save() override; +- +-protected: +- void showEvent(QShowEvent* event) override; +- +- const QScopedPointer m_ui; +-}; +- +-#endif // KEEPASSXC_DATABASESETTINGSWIDGETGENERAL_H +diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.ui keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.ui +--- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.ui 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.ui 1970-01-01 01:00:00.000000000 +0100 +@@ -1,213 +0,0 @@ +- +- +- DatabaseSettingsWidgetGeneral +- +- +- +- 0 +- 0 +- 453 +- 374 +- +- +- +- +- 0 +- 0 +- +- +- +- +- 450 +- 0 +- +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- Database Meta Data +- +- +- +- +- +- Database name: +- +- +- +- +- +- +- Database name field +- +- +- +- +- +- +- Database description: +- +- +- +- +- +- +- Database description field +- +- +- +- +- +- +- Default username: +- +- +- +- +- +- +- true +- +- +- Default username field +- +- +- +- +- +- +- +- +- +- History Settings +- +- +- +- +- +- +- +- Maximum number of history items per entry +- +- +- Max. history items: +- +- +- +- +- +- +- Maximum size of history per entry +- +- +- Max. history size: +- +- +- +- +- +- +- Maximum size of history per entry +- +- +- Maximum size of history per entry +- +- +- MiB +- +- +- 1 +- +- +- 2000000000 +- +- +- +- +- +- +- Maximum number of history items per entry +- +- +- Maximum number of history items per entry +- +- +- 2000000000 +- +- +- +- +- +- +- Use recycle bin +- +- +- +- +- +- +- +- +- Qt::Horizontal +- +- +- +- 40 +- 20 +- +- +- +- +- +- +- +- +- +- +- Additional Database Settings +- +- +- +- +- +- Enable compression (recommended) +- +- +- true +- +- +- +- +- +- +- +- +- +- Qt::Vertical +- +- +- +- 20 +- 40 +- +- +- +- +- +- +- +- +- +diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidget.h keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidget.h +--- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidget.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidget.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,53 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_DATABASESETTINGSWIDGET_H +-#define KEEPASSXC_DATABASESETTINGSWIDGET_H +- +-#include "gui/settings/SettingsWidget.h" +- +-#include +- +-class Database; +- +-/** +- * Pure-virtual base class for KeePassXC database settings widgets. +- */ +-class DatabaseSettingsWidget : public SettingsWidget +-{ +- Q_OBJECT +- +-public: +- explicit DatabaseSettingsWidget(QWidget* parent = nullptr); +- Q_DISABLE_COPY(DatabaseSettingsWidget); +- ~DatabaseSettingsWidget() override; +- +- virtual void load(QSharedPointer db); +- +- const QSharedPointer getDatabase() const; +- +-signals: +- /** +- * Can be emitted to indicate size changes and allow parents widgets to adjust properly. +- */ +- void sizeChanged(); +- +-protected: +- QSharedPointer m_db; +-}; +- +-#endif // KEEPASSXC_DATABASESETTINGSWIDGET_H +diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.cpp keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.cpp +--- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,63 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "DatabaseSettingsWidgetMetaDataSimple.h" +-#include "ui_DatabaseSettingsWidgetMetaDataSimple.h" +- +-#include "core/Database.h" +-#include "core/Metadata.h" +- +-DatabaseSettingWidgetMetaData::DatabaseSettingWidgetMetaData(QWidget* parent) +- : DatabaseSettingsWidget(parent) +- , m_ui(new Ui::DatabaseSettingsWidgetMetaDataSimple()) +-{ +- m_ui->setupUi(this); +-} +- +-DatabaseSettingWidgetMetaData::~DatabaseSettingWidgetMetaData() +-{ +-} +- +-void DatabaseSettingWidgetMetaData::initialize() +-{ +- Metadata* meta = m_db->metadata(); +- auto name = meta->name(); +- m_ui->databaseName->setText(name.isEmpty() ? tr("Passwords") : name); +- m_ui->databaseDescription->setText(meta->description()); +- +- m_ui->databaseName->setFocus(); +- m_ui->databaseName->selectAll(); +-} +- +-void DatabaseSettingWidgetMetaData::showEvent(QShowEvent* event) +-{ +- QWidget::showEvent(event); +- m_ui->databaseName->setFocus(); +-} +- +-void DatabaseSettingWidgetMetaData::uninitialize() +-{ +-} +- +-bool DatabaseSettingWidgetMetaData::save() +-{ +- Metadata* meta = m_db->metadata(); +- meta->setName(m_ui->databaseName->text()); +- meta->setDescription(m_ui->databaseDescription->text()); +- +- return true; +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.h keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.h +--- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,58 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_DATABASESETTINGSWIDGEMETADATA_H +-#define KEEPASSXC_DATABASESETTINGSWIDGEMETADATA_H +- +-#include "DatabaseSettingsWidget.h" +- +-#include +-#include +- +-class Database; +-namespace Ui +-{ +- class DatabaseSettingsWidgetMetaDataSimple; +-} +- +-class DatabaseSettingWidgetMetaData : public DatabaseSettingsWidget +-{ +- Q_OBJECT +- +-public: +- explicit DatabaseSettingWidgetMetaData(QWidget* parent = nullptr); +- Q_DISABLE_COPY(DatabaseSettingWidgetMetaData); +- ~DatabaseSettingWidgetMetaData() override; +- +- inline bool hasAdvancedMode() const override +- { +- return false; +- } +- +-public slots: +- void initialize() override; +- void uninitialize() override; +- bool save() override; +- +-protected: +- void showEvent(QShowEvent* event) override; +- +-private: +- const QScopedPointer m_ui; +-}; +- +-#endif // KEEPASSXC_DATABASESETTINGSWIDGEMETADATA_H +diff -urNr keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.ui keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.ui +--- keepassxc-2.6.4-orig/src/gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.ui 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.ui 1970-01-01 01:00:00.000000000 +0100 +@@ -1,58 +0,0 @@ +- +- +- DatabaseSettingsWidgetMetaDataSimple +- +- +- +- 0 +- 0 +- 450 +- 86 +- +- +- +- +- 0 +- 0 +- +- +- +- +- 450 +- 0 +- +- +- +- +- +- +- Database Name: +- +- +- +- +- +- +- Database name field +- +- +- +- +- +- +- Description: +- +- +- +- +- +- +- Database description field +- +- +- +- +- +- +- +- +diff -urNr keepassxc-2.6.4-orig/src/gui/DialogyWidget.cpp keepassxc-2.6.4-patched/src/gui/DialogyWidget.cpp +--- keepassxc-2.6.4-orig/src/gui/DialogyWidget.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/DialogyWidget.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,85 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "DialogyWidget.h" +- +-#include +-#include +-#include +- +-DialogyWidget::DialogyWidget(QWidget* parent) +- : QWidget(parent) +-{ +- setAutoFillBackground(true); +-} +- +-void DialogyWidget::keyPressEvent(QKeyEvent* e) +-{ +-#ifdef Q_OS_MACOS +- if (e->modifiers() == Qt::ControlModifier && e->key() == Qt::Key_Period) { +- if (!clickButton(QDialogButtonBox::Cancel)) { +- e->ignore(); +- } +- } else +-#endif +- if (!e->modifiers() || e->modifiers() == Qt::ControlModifier +- || (e->modifiers() & Qt::KeypadModifier && e->key() == Qt::Key_Enter)) { +- switch (e->key()) { +- case Qt::Key_Enter: +- case Qt::Key_Return: +- if (!clickButton(QDialogButtonBox::Ok)) { +- e->ignore(); +- } +- break; +- case Qt::Key_Escape: +- if (!clickButton(QDialogButtonBox::Cancel)) { +- if (!clickButton(QDialogButtonBox::Close)) { +- e->ignore(); +- } +- } +- break; +- default: +- e->ignore(); +- } +- } else { +- e->ignore(); +- } +-} +- +-bool DialogyWidget::clickButton(QDialogButtonBox::StandardButton standardButton) +-{ +- QPushButton* pb; +- +- if (standardButton == QDialogButtonBox::Ok) { +- pb = qobject_cast(focusWidget()); +- if (pb && pb->isVisible() && pb->isEnabled() && pb->hasFocus()) { +- pb->click(); +- return true; +- } +- } +- +- QList buttonBoxes = findChildren(); +- for (auto buttonBox : buttonBoxes) { +- pb = buttonBox->button(standardButton); +- if (pb && pb->isVisible() && pb->isEnabled()) { +- pb->click(); +- return true; +- } +- } +- +- return false; +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/DialogyWidget.h keepassxc-2.6.4-patched/src/gui/DialogyWidget.h +--- keepassxc-2.6.4-orig/src/gui/DialogyWidget.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/DialogyWidget.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,38 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_DIALOGYWIDGET_H +-#define KEEPASSX_DIALOGYWIDGET_H +- +-#include +-#include +- +-class DialogyWidget : public QWidget +-{ +- Q_OBJECT +- +-public: +- explicit DialogyWidget(QWidget* parent = nullptr); +- +-protected: +- void keyPressEvent(QKeyEvent* e) override; +- +-private: +- bool clickButton(QDialogButtonBox::StandardButton standardButton); +-}; +- +-#endif // KEEPASSX_DIALOGYWIDGET_H +diff -urNr keepassxc-2.6.4-orig/src/gui/DragTabBar.cpp keepassxc-2.6.4-patched/src/gui/DragTabBar.cpp +--- keepassxc-2.6.4-orig/src/gui/DragTabBar.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/DragTabBar.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,98 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "DragTabBar.h" +- +-#include +-#include +-#include +- +-DragTabBar::DragTabBar(QWidget* parent) +- : QTabBar(parent) +- , m_tabSwitchTimer(new QTimer(this)) +- , m_tabSwitchIndex(-1) +-{ +- m_tabSwitchTimer->setSingleShot(true); +- connect(m_tabSwitchTimer, SIGNAL(timeout()), SLOT(dragSwitchTab())); +- +- setAcceptDrops(true); +-} +- +-void DragTabBar::dragEnterEvent(QDragEnterEvent* event) +-{ +- int tab = tabAt(event->pos()); +- +- if (tab != -1) { +- if (tab != currentIndex()) { +- m_tabSwitchIndex = tab; +- m_tabSwitchTimer->start(QApplication::doubleClickInterval() * 2); +- } +- event->setAccepted(true); +- } else { +- QTabBar::dragEnterEvent(event); +- } +-} +- +-void DragTabBar::dragMoveEvent(QDragMoveEvent* event) +-{ +- int tab = tabAt(event->pos()); +- +- if (tab != -1) { +- if (tab == currentIndex()) { +- m_tabSwitchTimer->stop(); +- } else if (tab != m_tabSwitchIndex) { +- m_tabSwitchIndex = tab; +- m_tabSwitchTimer->start(QApplication::doubleClickInterval() * 2); +- } +- event->setAccepted(true); +- } else { +- m_tabSwitchIndex = -1; +- m_tabSwitchTimer->stop(); +- QTabBar::dragMoveEvent(event); +- } +-} +- +-void DragTabBar::dragLeaveEvent(QDragLeaveEvent* event) +-{ +- m_tabSwitchIndex = -1; +- m_tabSwitchTimer->stop(); +- QTabBar::dragLeaveEvent(event); +-} +- +-void DragTabBar::dropEvent(QDropEvent* event) +-{ +- m_tabSwitchIndex = -1; +- m_tabSwitchTimer->stop(); +- QTabBar::dropEvent(event); +-} +- +-void DragTabBar::tabLayoutChange() +-{ +- m_tabSwitchIndex = -1; +- m_tabSwitchTimer->stop(); +- QTabBar::tabLayoutChange(); +-} +- +-void DragTabBar::dragSwitchTab() +-{ +- int tab = tabAt(mapFromGlobal(QCursor::pos())); +- +- if (tab != -1 && tab == m_tabSwitchIndex) { +- m_tabSwitchIndex = -1; +- setCurrentIndex(tab); +- } +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/DragTabBar.h keepassxc-2.6.4-patched/src/gui/DragTabBar.h +--- keepassxc-2.6.4-orig/src/gui/DragTabBar.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/DragTabBar.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,45 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_DRAGTABBAR_H +-#define KEEPASSX_DRAGTABBAR_H +- +-#include +- +-class DragTabBar : public QTabBar +-{ +- Q_OBJECT +- +-public: +- explicit DragTabBar(QWidget* parent = nullptr); +- +-protected: +- void dragEnterEvent(QDragEnterEvent* event) override; +- void dragMoveEvent(QDragMoveEvent* event) override; +- void dragLeaveEvent(QDragLeaveEvent* event) override; +- void dropEvent(QDropEvent* event) override; +- void tabLayoutChange() override; +- +-private slots: +- void dragSwitchTab(); +- +-private: +- QTimer* const m_tabSwitchTimer; +- int m_tabSwitchIndex; +-}; +- +-#endif // KEEPASSX_DRAGTABBAR_H +diff -urNr keepassxc-2.6.4-orig/src/gui/EditWidget.cpp keepassxc-2.6.4-patched/src/gui/EditWidget.cpp +--- keepassxc-2.6.4-orig/src/gui/EditWidget.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/EditWidget.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,203 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "EditWidget.h" +-#include "ui_EditWidget.h" +- +-#include +-#include +- +-#include "core/Resources.h" +- +-EditWidget::EditWidget(QWidget* parent) +- : DialogyWidget(parent) +- , m_ui(new Ui::EditWidget()) +-{ +- m_ui->setupUi(this); +- setReadOnly(false); +- setModified(false); +- +- m_ui->messageWidget->setHidden(true); +- +- QFont headerLabelFont = m_ui->headerLabel->font(); +- headerLabelFont.setBold(true); +- headerLabelFont.setPointSize(headerLabelFont.pointSize() + 2); +- headlineLabel()->setFont(headerLabelFont); +- headlineLabel()->setTextFormat(Qt::PlainText); +- +- connect(m_ui->categoryList, SIGNAL(categoryChanged(int)), m_ui->stackedWidget, SLOT(setCurrentIndex(int))); +- +- connect(m_ui->buttonBox, SIGNAL(accepted()), SIGNAL(accepted())); +- connect(m_ui->buttonBox, SIGNAL(rejected()), SIGNAL(rejected())); +- connect(m_ui->buttonBox, SIGNAL(clicked(QAbstractButton*)), SLOT(buttonClicked(QAbstractButton*))); +-} +- +-EditWidget::~EditWidget() +-{ +-} +- +-void EditWidget::addPage(const QString& labelText, const QIcon& icon, QWidget* widget) +-{ +- /* +- * Instead of just adding a widget we're going to wrap it into a scroll area. It will automatically show +- * scrollbars when the widget cannot fit into the page. This approach prevents the main window of the application +- * from automatic resizing and it now should be able to fit into a user's monitor even if the monitor is only 768 +- * pixels high. +- */ +- if (widget->inherits("QScrollArea")) { +- m_ui->stackedWidget->addWidget(widget); +- } else { +- auto* scrollArea = new QScrollArea(m_ui->stackedWidget); +- scrollArea->setFrameShape(QFrame::NoFrame); +- scrollArea->setFrameShadow(QFrame::Plain); +- scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); +- scrollArea->setSizeAdjustPolicy(QScrollArea::AdjustToContents); +- scrollArea->setWidgetResizable(true); +- scrollArea->setWidget(widget); +- m_ui->stackedWidget->addWidget(scrollArea); +- } +- m_ui->categoryList->addCategory(labelText, icon); +-} +- +-bool EditWidget::hasPage(QWidget* widget) +-{ +- for (int i = 0; i < m_ui->stackedWidget->count(); i++) { +- auto* scrollArea = qobject_cast(m_ui->stackedWidget->widget(i)); +- if (scrollArea && scrollArea->widget() == widget) { +- return true; +- } +- } +- +- return false; +-} +- +-void EditWidget::setPageHidden(QWidget* widget, bool hidden) +-{ +- int index = -1; +- +- for (int i = 0; i < m_ui->stackedWidget->count(); i++) { +- auto* scrollArea = qobject_cast(m_ui->stackedWidget->widget(i)); +- if (scrollArea && scrollArea->widget() == widget) { +- index = i; +- break; +- } +- } +- +- if (index != -1) { +- m_ui->categoryList->setCategoryHidden(index, hidden); +- } +- +- if (index == m_ui->stackedWidget->currentIndex()) { +- int newIndex = m_ui->stackedWidget->currentIndex() - 1; +- if (newIndex < 0) { +- newIndex = m_ui->stackedWidget->count() - 1; +- } +- m_ui->stackedWidget->setCurrentIndex(newIndex); +- } +-} +- +-void EditWidget::setCurrentPage(int index) +-{ +- m_ui->categoryList->setCurrentCategory(index); +- m_ui->stackedWidget->setCurrentIndex(index); +-} +- +-void EditWidget::setHeadline(const QString& text) +-{ +- m_ui->headerLabel->setText(text); +-} +- +-QLabel* EditWidget::headlineLabel() +-{ +- return m_ui->headerLabel; +-} +- +-void EditWidget::setReadOnly(bool readOnly) +-{ +- m_readOnly = readOnly; +- +- if (readOnly) { +- m_ui->buttonBox->setStandardButtons(QDialogButtonBox::Close); +- } else { +- m_ui->buttonBox->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel | QDialogButtonBox::Apply); +- } +-} +- +-bool EditWidget::readOnly() const +-{ +- return m_readOnly; +-} +- +-void EditWidget::setModified(bool state) +-{ +- m_modified = state; +- enableApplyButton(state); +-} +- +-bool EditWidget::isModified() const +-{ +- return m_modified; +-} +- +-void EditWidget::enableApplyButton(bool enabled) +-{ +- QPushButton* applyButton = m_ui->buttonBox->button(QDialogButtonBox::Apply); +- if (applyButton) { +- applyButton->setEnabled(enabled); +- } +-} +- +-void EditWidget::showApplyButton(bool state) +-{ +- if (!m_readOnly) { +- auto buttons = m_ui->buttonBox->standardButtons(); +- if (state) { +- buttons |= QDialogButtonBox::Apply; +- } else { +- buttons &= ~QDialogButtonBox::Apply; +- } +- m_ui->buttonBox->setStandardButtons(buttons); +- } +-} +- +-void EditWidget::buttonClicked(QAbstractButton* button) +-{ +- auto stdButton = m_ui->buttonBox->standardButton(button); +- if (stdButton == QDialogButtonBox::Apply) { +- emit apply(); +- } +-} +- +-void EditWidget::showMessage(const QString& text, MessageWidget::MessageType type) +-{ +- // Show error messages for a longer time to make sure the user can read them +- if (type == MessageWidget::Error) { +- m_ui->messageWidget->setCloseButtonVisible(true); +- m_ui->messageWidget->showMessage(text, type, 15000); +- } else { +- m_ui->messageWidget->setCloseButtonVisible(false); +- m_ui->messageWidget->showMessage(text, type, 2000); +- } +-} +- +-void EditWidget::hideMessage() +-{ +- if (m_ui->messageWidget->isVisible()) { +- m_ui->messageWidget->animatedHide(); +- } +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/EditWidget.h keepassxc-2.6.4-patched/src/gui/EditWidget.h +--- keepassxc-2.6.4-orig/src/gui/EditWidget.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/EditWidget.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,75 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_EDITWIDGET_H +-#define KEEPASSX_EDITWIDGET_H +- +-#include +-#include +-#include +- +-#include "gui/DialogyWidget.h" +-#include "gui/MessageWidget.h" +- +-class QLabel; +- +-namespace Ui +-{ +- class EditWidget; +-} +- +-class EditWidget : public DialogyWidget +-{ +- Q_OBJECT +- +-public: +- explicit EditWidget(QWidget* parent = nullptr); +- ~EditWidget(); +- +- void addPage(const QString& labelText, const QIcon& icon, QWidget* widget); +- bool hasPage(QWidget* widget); +- void setPageHidden(QWidget* widget, bool hidden); +- void setCurrentPage(int index); +- void setHeadline(const QString& text); +- QLabel* headlineLabel(); +- void setReadOnly(bool readOnly); +- bool readOnly() const; +- void enableApplyButton(bool enabled); +- void showApplyButton(bool state); +- virtual bool isModified() const; +- +-signals: +- void apply(); +- void accepted(); +- void rejected(); +- +-protected slots: +- void showMessage(const QString& text, MessageWidget::MessageType type); +- void hideMessage(); +- void setModified(bool state = true); +- void buttonClicked(QAbstractButton* button); +- +-private: +- const QScopedPointer m_ui; +- bool m_readOnly; +- bool m_modified; +- +- Q_DISABLE_COPY(EditWidget) +-}; +- +-#endif // KEEPASSX_EDITWIDGET_H +diff -urNr keepassxc-2.6.4-orig/src/gui/EditWidgetIcons.cpp keepassxc-2.6.4-patched/src/gui/EditWidgetIcons.cpp +--- keepassxc-2.6.4-orig/src/gui/EditWidgetIcons.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/EditWidgetIcons.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,440 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "EditWidgetIcons.h" +-#include "ui_EditWidgetIcons.h" +- +-#include +-#include +- +-#include "core/Config.h" +-#include "core/Group.h" +-#include "core/Metadata.h" +-#include "core/Tools.h" +-#include "gui/IconModels.h" +-#include "gui/MessageBox.h" +-#ifdef WITH_XC_NETWORKING +-#include "core/IconDownloader.h" +-#endif +- +-IconStruct::IconStruct() +- : uuid(QUuid()) +- , number(0) +- , applyTo(ApplyIconToOptions::THIS_ONLY) +-{ +-} +- +-EditWidgetIcons::EditWidgetIcons(QWidget* parent) +- : QWidget(parent) +- , m_ui(new Ui::EditWidgetIcons()) +- , m_db(nullptr) +- , m_applyIconTo(ApplyIconToOptions::THIS_ONLY) +- , m_defaultIconModel(new DefaultIconModel(this)) +- , m_customIconModel(new CustomIconModel(this)) +-#ifdef WITH_XC_NETWORKING +- , m_downloader(new IconDownloader()) +-#endif +-{ +- m_ui->setupUi(this); +- +- m_ui->defaultIconsView->setModel(m_defaultIconModel); +- m_ui->customIconsView->setModel(m_customIconModel); +- +- m_ui->applyIconToPushButton->setMenu(createApplyIconToMenu()); +- +- // clang-format off +- connect(m_ui->defaultIconsView, SIGNAL(clicked(QModelIndex)), this, SLOT(updateRadioButtonDefaultIcons())); +- connect(m_ui->customIconsView, SIGNAL(clicked(QModelIndex)), this, SLOT(updateRadioButtonCustomIcons())); +- connect(m_ui->defaultIconsRadio, SIGNAL(toggled(bool)), this, SLOT(updateWidgetsDefaultIcons(bool))); +- connect(m_ui->customIconsRadio, SIGNAL(toggled(bool)), this, SLOT(updateWidgetsCustomIcons(bool))); +- connect(m_ui->addButton, SIGNAL(clicked()), SLOT(addCustomIconFromFile())); +- connect(m_ui->deleteButton, SIGNAL(clicked()), SLOT(removeCustomIcon())); +- connect(m_ui->faviconButton, SIGNAL(clicked()), SLOT(downloadFavicon())); +- connect(m_ui->applyIconToPushButton->menu(), SIGNAL(triggered(QAction*)), SLOT(confirmApplyIconTo(QAction*))); +- +- connect(m_ui->defaultIconsRadio, SIGNAL(toggled(bool)), this, SIGNAL(widgetUpdated())); +- connect(m_ui->defaultIconsView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), +- this, SIGNAL(widgetUpdated())); +- connect(m_ui->customIconsView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), +- this, SIGNAL(widgetUpdated())); +-#ifdef WITH_XC_NETWORKING +- connect(m_downloader.data(), +- SIGNAL(finished(const QString&, const QImage&)), +- SLOT(iconReceived(const QString&, const QImage&))); +-#endif +- // clang-format on +- +- m_ui->faviconButton->setVisible(false); +- m_ui->addButton->setEnabled(true); +-} +- +-EditWidgetIcons::~EditWidgetIcons() +-{ +-} +- +-IconStruct EditWidgetIcons::state() +-{ +- Q_ASSERT(m_db); +- Q_ASSERT(!m_currentUuid.isNull()); +- +- IconStruct iconStruct; +- if (m_ui->defaultIconsRadio->isChecked()) { +- QModelIndex index = m_ui->defaultIconsView->currentIndex(); +- if (index.isValid()) { +- iconStruct.number = index.row(); +- } else { +- Q_ASSERT(false); +- } +- } else { +- QModelIndex index = m_ui->customIconsView->currentIndex(); +- if (index.isValid()) { +- iconStruct.uuid = m_customIconModel->uuidFromIndex(m_ui->customIconsView->currentIndex()); +- } else { +- iconStruct.number = -1; +- } +- } +- +- iconStruct.applyTo = m_applyIconTo; +- +- return iconStruct; +-} +- +-void EditWidgetIcons::reset() +-{ +- m_db.reset(); +- m_currentUuid = QUuid(); +-} +- +-void EditWidgetIcons::load(const QUuid& currentUuid, +- const QSharedPointer& database, +- const IconStruct& iconStruct, +- const QString& url) +-{ +- Q_ASSERT(database); +- Q_ASSERT(!currentUuid.isNull()); +- +- m_db = database; +- m_currentUuid = currentUuid; +- setUrl(url); +- +- m_customIconModel->setIcons(database->metadata()->customIconsPixmaps(IconSize::Default), +- database->metadata()->customIconsOrder()); +- +- QUuid iconUuid = iconStruct.uuid; +- if (iconUuid.isNull()) { +- int iconNumber = iconStruct.number; +- m_ui->defaultIconsView->setCurrentIndex(m_defaultIconModel->index(iconNumber, 0)); +- m_ui->defaultIconsRadio->setChecked(true); +- } else { +- QModelIndex index = m_customIconModel->indexFromUuid(iconUuid); +- if (index.isValid()) { +- m_ui->customIconsView->setCurrentIndex(index); +- m_ui->customIconsRadio->setChecked(true); +- } else { +- m_ui->defaultIconsView->setCurrentIndex(m_defaultIconModel->index(0, 0)); +- m_ui->defaultIconsRadio->setChecked(true); +- } +- } +- +- m_applyIconTo = ApplyIconToOptions::THIS_ONLY; +- m_ui->applyIconToPushButton->menu()->defaultAction()->activate(QAction::Trigger); +-} +- +-void EditWidgetIcons::setShowApplyIconToButton(bool state) +-{ +- m_ui->applyIconToPushButton->setVisible(state); +-} +- +-QMenu* EditWidgetIcons::createApplyIconToMenu() +-{ +- auto* applyIconToMenu = new QMenu(this); +- QAction* defaultAction = applyIconToMenu->addAction(tr("Apply to this group only")); +- defaultAction->setData(QVariant::fromValue(ApplyIconToOptions::THIS_ONLY)); +- applyIconToMenu->setDefaultAction(defaultAction); +- applyIconToMenu->addSeparator(); +- applyIconToMenu->addAction(tr("Also apply to child groups")) +- ->setData(QVariant::fromValue(ApplyIconToOptions::CHILD_GROUPS)); +- applyIconToMenu->addAction(tr("Also apply to child entries")) +- ->setData(QVariant::fromValue(ApplyIconToOptions::CHILD_ENTRIES)); +- applyIconToMenu->addAction(tr("Also apply to all children")) +- ->setData(QVariant::fromValue(ApplyIconToOptions::ALL_CHILDREN)); +- return applyIconToMenu; +-} +- +-void EditWidgetIcons::setUrl(const QString& url) +-{ +-#ifdef WITH_XC_NETWORKING +- m_url = url; +- m_ui->faviconButton->setVisible(!url.isEmpty()); +-#else +- Q_UNUSED(url); +- m_ui->faviconButton->setVisible(false); +-#endif +-} +- +-void EditWidgetIcons::downloadFavicon() +-{ +-#ifdef WITH_XC_NETWORKING +- if (!m_url.isEmpty()) { +- m_downloader->setUrl(m_url); +- m_downloader->download(); +- } +-#endif +-} +- +-void EditWidgetIcons::iconReceived(const QString& url, const QImage& icon) +-{ +-#ifdef WITH_XC_NETWORKING +- Q_UNUSED(url); +- if (icon.isNull()) { +- QString message(tr("Unable to fetch favicon.")); +- if (!config()->get(Config::Security_IconDownloadFallback).toBool()) { +- message.append("\n").append( +- tr("You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security")); +- } +- emit messageEditEntry(message, MessageWidget::Error); +- return; +- } +- +- if (!addCustomIcon(icon)) { +- emit messageEditEntry(tr("Existing icon selected."), MessageWidget::Information); +- } +-#else +- Q_UNUSED(url); +- Q_UNUSED(icon); +-#endif +-} +- +-void EditWidgetIcons::abortRequests() +-{ +-#ifdef WITH_XC_NETWORKING +- if (m_downloader) { +- m_downloader->abortDownload(); +- } +-#endif +-} +- +-void EditWidgetIcons::addCustomIconFromFile() +-{ +- if (!m_db) { +- return; +- } +- +- QString filter = QString("%1 (%2);;%3 (*)").arg(tr("Images"), Tools::imageReaderFilter(), tr("All files")); +- +- auto filenames = QFileDialog::getOpenFileNames(this, tr("Select Image(s)"), "", filter); +- if (!filenames.empty()) { +- QStringList errornames; +- int numexisting = 0; +- for (const auto& filename : filenames) { +- if (!filename.isEmpty()) { +- auto icon = QImage(filename); +- if (icon.isNull()) { +- errornames << filename; +- } else if (!addCustomIcon(icon)) { +- // Icon already exists in database +- ++numexisting; +- } +- } +- } +- +- int numloaded = filenames.size() - errornames.size() - numexisting; +- QString msg; +- +- if (numloaded > 0) { +- msg = tr("Successfully loaded %1 of %n icon(s)", "", filenames.size()).arg(numloaded); +- } else { +- msg = tr("No icons were loaded"); +- } +- +- if (numexisting > 0) { +- msg += "\n" + tr("%n icon(s) already exist in the database", "", numexisting); +- } +- +- if (!errornames.empty()) { +- // Show the first 8 icons that failed to load +- errornames = errornames.mid(0, 8); +- emit messageEditEntry(msg + "\n" + tr("The following icon(s) failed:", "", errornames.size()) + "\n" +- + errornames.join("\n"), +- MessageWidget::Error); +- } else if (numloaded > 0) { +- emit messageEditEntry(msg, MessageWidget::Positive); +- } else { +- emit messageEditEntry(msg, MessageWidget::Information); +- } +- } +-} +- +-bool EditWidgetIcons::addCustomIcon(const QImage& icon) +-{ +- bool added = false; +- if (m_db) { +- // Don't add an icon larger than 128x128, but retain original size if smaller +- auto scaledicon = icon; +- if (icon.width() > 128 || icon.height() > 128) { +- scaledicon = icon.scaled(128, 128); +- } +- +- QUuid uuid = m_db->metadata()->findCustomIcon(scaledicon); +- if (uuid.isNull()) { +- uuid = QUuid::createUuid(); +- m_db->metadata()->addCustomIcon(uuid, scaledicon); +- m_customIconModel->setIcons(m_db->metadata()->customIconsPixmaps(IconSize::Default), +- m_db->metadata()->customIconsOrder()); +- added = true; +- } +- +- // Select the new or existing icon +- updateRadioButtonCustomIcons(); +- QModelIndex index = m_customIconModel->indexFromUuid(uuid); +- m_ui->customIconsView->setCurrentIndex(index); +- +- emit widgetUpdated(); +- } +- +- return added; +-} +- +-void EditWidgetIcons::removeCustomIcon() +-{ +- if (m_db) { +- QModelIndex index = m_ui->customIconsView->currentIndex(); +- if (index.isValid()) { +- QUuid iconUuid = m_customIconModel->uuidFromIndex(index); +- +- const QList allEntries = m_db->rootGroup()->entriesRecursive(true); +- QList entriesWithSameIcon; +- QList historyEntriesWithSameIcon; +- +- for (Entry* entry : allEntries) { +- if (iconUuid == entry->iconUuid()) { +- // Check if this is a history entry (no assigned group) +- if (!entry->group()) { +- historyEntriesWithSameIcon << entry; +- } else if (m_currentUuid != entry->uuid()) { +- entriesWithSameIcon << entry; +- } +- } +- } +- +- const QList allGroups = m_db->rootGroup()->groupsRecursive(true); +- QList groupsWithSameIcon; +- +- for (Group* group : allGroups) { +- if (iconUuid == group->iconUuid() && m_currentUuid != group->uuid()) { +- groupsWithSameIcon << group; +- } +- } +- +- int iconUseCount = entriesWithSameIcon.size() + groupsWithSameIcon.size(); +- if (iconUseCount > 0) { +- +- auto result = MessageBox::question(this, +- tr("Confirm Delete"), +- tr("This icon is used by %n entry(s), and will be replaced " +- "by the default icon. Are you sure you want to delete it?", +- "", +- iconUseCount), +- MessageBox::Delete | MessageBox::Cancel, +- MessageBox::Cancel); +- +- if (result == MessageBox::Cancel) { +- // Early out, nothing is changed +- return; +- } else { +- // Revert matched entries to the default entry icon +- for (Entry* entry : asConst(entriesWithSameIcon)) { +- entry->setIcon(Entry::DefaultIconNumber); +- } +- +- // Revert matched groups to the default group icon +- for (Group* group : asConst(groupsWithSameIcon)) { +- group->setIcon(Group::DefaultIconNumber); +- } +- } +- } +- +- // Remove the icon from history entries +- for (Entry* entry : asConst(historyEntriesWithSameIcon)) { +- entry->setUpdateTimeinfo(false); +- entry->setIcon(0); +- entry->setUpdateTimeinfo(true); +- } +- +- // Remove the icon from the database +- m_db->metadata()->removeCustomIcon(iconUuid); +- m_customIconModel->setIcons(m_db->metadata()->customIconsPixmaps(IconSize::Default), +- m_db->metadata()->customIconsOrder()); +- +- // Reset the current icon view +- updateRadioButtonDefaultIcons(); +- +- if (m_db->rootGroup()->findEntryByUuid(m_currentUuid) != nullptr) { +- m_ui->defaultIconsView->setCurrentIndex(m_defaultIconModel->index(Entry::DefaultIconNumber)); +- } else { +- m_ui->defaultIconsView->setCurrentIndex(m_defaultIconModel->index(Group::DefaultIconNumber)); +- } +- +- emit widgetUpdated(); +- } +- } +-} +- +-void EditWidgetIcons::updateWidgetsDefaultIcons(bool check) +-{ +- if (check) { +- QModelIndex index = m_ui->defaultIconsView->currentIndex(); +- if (!index.isValid()) { +- m_ui->defaultIconsView->setCurrentIndex(m_defaultIconModel->index(0, 0)); +- } else { +- m_ui->defaultIconsView->setCurrentIndex(index); +- } +- m_ui->customIconsView->selectionModel()->clearSelection(); +- m_ui->deleteButton->setEnabled(false); +- } +-} +- +-void EditWidgetIcons::updateWidgetsCustomIcons(bool check) +-{ +- if (check) { +- QModelIndex index = m_ui->customIconsView->currentIndex(); +- if (!index.isValid()) { +- m_ui->customIconsView->setCurrentIndex(m_customIconModel->index(0, 0)); +- } else { +- m_ui->customIconsView->setCurrentIndex(index); +- } +- m_ui->defaultIconsView->selectionModel()->clearSelection(); +- m_ui->deleteButton->setEnabled(true); +- } +-} +- +-void EditWidgetIcons::updateRadioButtonDefaultIcons() +-{ +- m_ui->defaultIconsRadio->setChecked(true); +-} +- +-void EditWidgetIcons::updateRadioButtonCustomIcons() +-{ +- m_ui->customIconsRadio->setChecked(true); +-} +- +-void EditWidgetIcons::confirmApplyIconTo(QAction* action) +-{ +- m_applyIconTo = action->data().value(); +- m_ui->applyIconToPushButton->setText(action->text()); +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/EditWidgetIcons.h keepassxc-2.6.4-patched/src/gui/EditWidgetIcons.h +--- keepassxc-2.6.4-orig/src/gui/EditWidgetIcons.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/EditWidgetIcons.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,117 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_EDITWIDGETICONS_H +-#define KEEPASSX_EDITWIDGETICONS_H +- +-#include +-#include +-#include +-#include +- +-#include "config-keepassx.h" +-#include "core/Entry.h" +-#include "core/Global.h" +-#include "gui/MessageWidget.h" +- +-class Database; +-class DefaultIconModel; +-class CustomIconModel; +-#ifdef WITH_XC_NETWORKING +-class IconDownloader; +-#endif +- +-namespace Ui +-{ +- class EditWidgetIcons; +-} +- +-enum ApplyIconToOptions +-{ +- THIS_ONLY = 0b00, +- CHILD_GROUPS = 0b10, +- CHILD_ENTRIES = 0b01, +- ALL_CHILDREN = 0b11 +-}; +- +-Q_DECLARE_METATYPE(ApplyIconToOptions) +- +-struct IconStruct +-{ +- IconStruct(); +- +- QUuid uuid; +- int number; +- ApplyIconToOptions applyTo; +-}; +- +-class EditWidgetIcons : public QWidget +-{ +- Q_OBJECT +- +-public: +- explicit EditWidgetIcons(QWidget* parent = nullptr); +- ~EditWidgetIcons(); +- +- IconStruct state(); +- void reset(); +- void load(const QUuid& currentUuid, +- const QSharedPointer& database, +- const IconStruct& iconStruct, +- const QString& url = ""); +- void setShowApplyIconToButton(bool state); +- +-public slots: +- void setUrl(const QString& url); +- void abortRequests(); +- +-signals: +- void messageEditEntry(QString, MessageWidget::MessageType); +- void messageEditEntryDismiss(); +- void widgetUpdated(); +- +-private slots: +- void downloadFavicon(); +- void iconReceived(const QString& url, const QImage& icon); +- void addCustomIconFromFile(); +- bool addCustomIcon(const QImage& icon); +- void removeCustomIcon(); +- void updateWidgetsDefaultIcons(bool checked); +- void updateWidgetsCustomIcons(bool checked); +- void updateRadioButtonDefaultIcons(); +- void updateRadioButtonCustomIcons(); +- void confirmApplyIconTo(QAction* action); +- +-private: +- QMenu* createApplyIconToMenu(); +- +- const QScopedPointer m_ui; +- QSharedPointer m_db; +- QUuid m_currentUuid; +- ApplyIconToOptions m_applyIconTo; +- DefaultIconModel* const m_defaultIconModel; +- CustomIconModel* const m_customIconModel; +-#ifdef WITH_XC_NETWORKING +- QScopedPointer m_downloader; +- QString m_url; +-#endif +- +- Q_DISABLE_COPY(EditWidgetIcons) +-}; +- +-#endif // KEEPASSX_EDITWIDGETICONS_H +diff -urNr keepassxc-2.6.4-orig/src/gui/EditWidgetIcons.ui keepassxc-2.6.4-patched/src/gui/EditWidgetIcons.ui +--- keepassxc-2.6.4-orig/src/gui/EditWidgetIcons.ui 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/EditWidgetIcons.ui 1970-01-01 01:00:00.000000000 +0100 +@@ -1,190 +0,0 @@ +- +- +- EditWidgetIcons +- +- +- +- 0 +- 0 +- 437 +- 316 +- +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- Use default icon +- +- +- +- +- +- +- QAbstractItemView::NoEditTriggers +- +- +- QListView::Static +- +- +- QListView::LeftToRight +- +- +- true +- +- +- QListView::Adjust +- +- +- 4 +- +- +- QListView::ListMode +- +- +- +- +- +- +- Qt::Vertical +- +- +- QSizePolicy::Fixed +- +- +- +- 20 +- 10 +- +- +- +- +- +- +- +- Use custom icon +- +- +- +- +- +- +- QAbstractItemView::NoEditTriggers +- +- +- QListView::Static +- +- +- QListView::LeftToRight +- +- +- true +- +- +- QListView::Adjust +- +- +- 4 +- +- +- QListView::ListMode +- +- +- +- +- +- +- +- +- Add custom icon +- +- +- +- +- +- +- Delete custom icon +- +- +- +- +- +- +- Download favicon for URL +- +- +- Download favicon for URL +- +- +- Download favicon +- +- +- +- +- +- +- +- +- +- +- Qt::Horizontal +- +- +- +- 0 +- 0 +- +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- Apply selected icon to subgroups and entries +- +- +- Apply selected icon to subgroups and entries +- +- +- padding: 4px 10px +- +- +- Apply icon to... +- +- +- +- +- +- +- +- +- defaultIconsRadio +- defaultIconsView +- customIconsRadio +- customIconsView +- addButton +- deleteButton +- faviconButton +- applyIconToPushButton +- +- +- +- +diff -urNr keepassxc-2.6.4-orig/src/gui/EditWidgetProperties.cpp keepassxc-2.6.4-patched/src/gui/EditWidgetProperties.cpp +--- keepassxc-2.6.4-orig/src/gui/EditWidgetProperties.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/EditWidgetProperties.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,122 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "EditWidgetProperties.h" +-#include "ui_EditWidgetProperties.h" +- +-#include "MessageBox.h" +-#include "core/CustomData.h" +-#include "core/TimeInfo.h" +- +-#include +- +-EditWidgetProperties::EditWidgetProperties(QWidget* parent) +- : QWidget(parent) +- , m_ui(new Ui::EditWidgetProperties()) +- , m_customDataModel(new QStandardItemModel(this)) +-{ +- m_ui->setupUi(this); +- m_ui->removeCustomDataButton->setEnabled(false); +- m_ui->customDataTable->setModel(m_customDataModel); +- +- // clang-format off +- connect(m_ui->customDataTable->selectionModel(), +- SIGNAL(selectionChanged(QItemSelection,QItemSelection)), +- SLOT(toggleRemoveButton(QItemSelection))); +- // clang-format on +- connect(m_ui->removeCustomDataButton, SIGNAL(clicked()), SLOT(removeSelectedPluginData())); +-} +- +-EditWidgetProperties::~EditWidgetProperties() +-{ +-} +- +-void EditWidgetProperties::setFields(const TimeInfo& timeInfo, const QUuid& uuid) +-{ +- static const QString timeFormat("d MMM yyyy HH:mm:ss"); +- m_ui->modifiedEdit->setText(timeInfo.lastModificationTime().toLocalTime().toString(timeFormat)); +- m_ui->createdEdit->setText(timeInfo.creationTime().toLocalTime().toString(timeFormat)); +- m_ui->accessedEdit->setText(timeInfo.lastAccessTime().toLocalTime().toString(timeFormat)); +- m_ui->uuidEdit->setText(uuid.toRfc4122().toHex()); +-} +- +-void EditWidgetProperties::setCustomData(CustomData* customData) +-{ +- if (m_customData) { +- m_customData->disconnect(this); +- } +- +- m_customData = customData; +- +- if (m_customData) { +- connect(m_customData, SIGNAL(customDataModified()), SLOT(update())); +- } +- +- update(); +-} +- +-void EditWidgetProperties::removeSelectedPluginData() +-{ +- QModelIndexList indexes = m_ui->customDataTable->selectionModel()->selectedRows(0); +- if (indexes.isEmpty()) { +- return; +- } +- +- auto result = MessageBox::question(this, +- tr("Delete plugin data?"), +- tr("Do you really want to delete the selected plugin data?\n" +- "This may cause the affected plugins to malfunction."), +- MessageBox::Delete | MessageBox::Cancel, +- MessageBox::Cancel); +- +- if (result == MessageBox::Cancel) { +- return; +- } +- +- QStringList selectedData; +- for (const auto& index : indexes) { +- const QString key = index.data().toString(); +- selectedData.append(key); +- } +- +- std::sort(selectedData.begin(), selectedData.end()); +- for (const auto& key : selectedData) { +- m_customData->remove(key); +- } +- +- update(); +-} +- +-void EditWidgetProperties::toggleRemoveButton(const QItemSelection& selected) +-{ +- m_ui->removeCustomDataButton->setEnabled(!selected.isEmpty()); +-} +- +-void EditWidgetProperties::update() +-{ +- m_customDataModel->clear(); +- m_customDataModel->setHorizontalHeaderLabels({tr("Key"), tr("Value")}); +- if (!m_customData) { +- m_ui->removeCustomDataButton->setEnabled(false); +- } else { +- for (const QString& key : m_customData->keys()) { +- m_customDataModel->appendRow(QList() +- << new QStandardItem(key) << new QStandardItem(m_customData->value(key))); +- } +- m_ui->removeCustomDataButton->setEnabled(!m_customData->isEmpty()); +- } +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/EditWidgetProperties.h keepassxc-2.6.4-patched/src/gui/EditWidgetProperties.h +--- keepassxc-2.6.4-orig/src/gui/EditWidgetProperties.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/EditWidgetProperties.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,60 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_EDITWIDGETPROPERTIES_H +-#define KEEPASSX_EDITWIDGETPROPERTIES_H +- +-#include +-#include +-#include +-#include +- +-class CustomData; +-class TimeInfo; +-class QUuid; +- +-namespace Ui +-{ +- class EditWidgetProperties; +-} +- +-class EditWidgetProperties : public QWidget +-{ +- Q_OBJECT +- +-public: +- explicit EditWidgetProperties(QWidget* parent = nullptr); +- ~EditWidgetProperties(); +- +- void setFields(const TimeInfo& timeInfo, const QUuid& uuid); +- void setCustomData(CustomData* customData); +- +-private slots: +- void update(); +- void removeSelectedPluginData(); +- void toggleRemoveButton(const QItemSelection& selected); +- +-private: +- const QScopedPointer m_ui; +- +- QPointer m_customData; +- QPointer m_customDataModel; +- +- Q_DISABLE_COPY(EditWidgetProperties) +-}; +- +-#endif // KEEPASSX_EDITWIDGETPROPERTIES_H +diff -urNr keepassxc-2.6.4-orig/src/gui/EditWidgetProperties.ui keepassxc-2.6.4-patched/src/gui/EditWidgetProperties.ui +--- keepassxc-2.6.4-orig/src/gui/EditWidgetProperties.ui 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/EditWidgetProperties.ui 1970-01-01 01:00:00.000000000 +0100 +@@ -1,212 +0,0 @@ +- +- +- EditWidgetProperties +- +- +- +- 0 +- 0 +- 364 +- 408 +- +- +- +- +- 5 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- 8 +- +- +- +- +- Created: +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- Datetime created +- +- +- true +- +- +- +- +- +- +- Modified: +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- Datetime modified +- +- +- true +- +- +- +- +- +- +- Accessed: +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- +- +- +- +- Datetime accessed +- +- +- true +- +- +- +- +- +- +- Uuid: +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- +- +- +- +- Unique ID +- +- +- true +- +- +- +- +- +- +- +- +- Qt::Vertical +- +- +- QSizePolicy::Fixed +- +- +- +- 20 +- 10 +- +- +- +- +- +- +- +- Plugin Data +- +- +- +- +- +- Plugin data +- +- +- QAbstractItemView::NoEditTriggers +- +- +- QAbstractItemView::SelectRows +- +- +- 200 +- +- +- true +- +- +- false +- +- +- +- +- +- +- +- +- Remove selected plugin data +- +- +- Remove +- +- +- +- +- +- +- Qt::Vertical +- +- +- +- 20 +- 40 +- +- +- +- +- +- +- +- +- +- +- +- +- createdEdit +- modifiedEdit +- accessedEdit +- uuidEdit +- +- +- +- +diff -urNr keepassxc-2.6.4-orig/src/gui/EditWidget.ui keepassxc-2.6.4-patched/src/gui/EditWidget.ui +--- keepassxc-2.6.4-orig/src/gui/EditWidget.ui 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/EditWidget.ui 1970-01-01 01:00:00.000000000 +0100 +@@ -1,112 +0,0 @@ +- +- +- EditWidget +- +- +- +- 0 +- 0 +- 527 +- 391 +- +- +- +- +- +- +- +- +- +- 2 +- +- +- 2 +- +- +- 2 +- +- +- 2 +- +- +- +- +- +- +- +- +- +- +- +- +- +- Qt::Vertical +- +- +- QSizePolicy::Fixed +- +- +- +- 1 +- 3 +- +- +- +- +- +- +- +- 18 +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- +- +- +- -1 +- +- +- +- +- +- +- +- +- 5 +- +- +- +- +- QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok +- +- +- +- +- +- +- +- +- +- MessageWidget +- QWidget +-
gui/MessageWidget.h
+- 1 +-
+- +- CategoryListWidget +- QWidget +-
gui/CategoryListWidget.h
+- 1 +-
+-
+- +- +-
+diff -urNr keepassxc-2.6.4-orig/src/gui/entry/AutoTypeAssociationsModel.cpp keepassxc-2.6.4-patched/src/gui/entry/AutoTypeAssociationsModel.cpp +--- keepassxc-2.6.4-orig/src/gui/entry/AutoTypeAssociationsModel.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/entry/AutoTypeAssociationsModel.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,145 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "AutoTypeAssociationsModel.h" +- +-#include "core/Entry.h" +- +-AutoTypeAssociationsModel::AutoTypeAssociationsModel(QObject* parent) +- : QAbstractListModel(parent) +- , m_autoTypeAssociations(nullptr) +- , m_entry(nullptr) +-{ +-} +- +-void AutoTypeAssociationsModel::setAutoTypeAssociations(AutoTypeAssociations* autoTypeAssociations) +-{ +- beginResetModel(); +- +- if (m_autoTypeAssociations) { +- m_autoTypeAssociations->disconnect(this); +- } +- +- m_autoTypeAssociations = autoTypeAssociations; +- +- if (m_autoTypeAssociations) { +- connect(m_autoTypeAssociations, SIGNAL(dataChanged(int)), SLOT(associationChange(int))); +- connect(m_autoTypeAssociations, SIGNAL(aboutToAdd(int)), SLOT(associationAboutToAdd(int))); +- connect(m_autoTypeAssociations, SIGNAL(added(int)), SLOT(associationAdd())); +- connect(m_autoTypeAssociations, SIGNAL(aboutToRemove(int)), SLOT(associationAboutToRemove(int))); +- connect(m_autoTypeAssociations, SIGNAL(removed(int)), SLOT(associationRemove())); +- connect(m_autoTypeAssociations, SIGNAL(aboutToReset()), SLOT(aboutToReset())); +- connect(m_autoTypeAssociations, SIGNAL(reset()), SLOT(reset())); +- } +- +- endResetModel(); +-} +- +-void AutoTypeAssociationsModel::setEntry(Entry* entry) +-{ +- m_entry = entry; +-} +- +-int AutoTypeAssociationsModel::rowCount(const QModelIndex& parent) const +-{ +- if (!m_autoTypeAssociations || parent.isValid()) { +- return 0; +- } else { +- return m_autoTypeAssociations->size(); +- } +-} +- +-int AutoTypeAssociationsModel::columnCount(const QModelIndex& parent) const +-{ +- Q_UNUSED(parent); +- +- return 2; +-} +- +-QVariant AutoTypeAssociationsModel::headerData(int section, Qt::Orientation orientation, int role) const +-{ +- if ((orientation == Qt::Horizontal) && (role == Qt::DisplayRole)) { +- if (section == 0) { +- return tr("Window"); +- } else { +- return tr("Sequence"); +- } +- } else { +- return QVariant(); +- } +-} +- +-QVariant AutoTypeAssociationsModel::data(const QModelIndex& index, int role) const +-{ +- if (!index.isValid()) { +- return QVariant(); +- } +- +- if (role == Qt::DisplayRole) { +- if (index.column() == 0) { +- QString window = m_autoTypeAssociations->get(index.row()).window; +- if (m_entry) { +- window = m_entry->maskPasswordPlaceholders(window); +- window = m_entry->resolveMultiplePlaceholders(window); +- } +- return window; +- } else { +- QString sequence = m_autoTypeAssociations->get(index.row()).sequence; +- if (sequence.isEmpty()) { +- sequence = tr("Default sequence"); +- } +- return sequence; +- } +- } else { +- return QVariant(); +- } +-} +- +-void AutoTypeAssociationsModel::associationChange(int i) +-{ +- emit dataChanged(index(i, 0), index(i, columnCount() - 1)); +-} +- +-void AutoTypeAssociationsModel::associationAboutToAdd(int i) +-{ +- beginInsertRows(QModelIndex(), i, i); +-} +- +-void AutoTypeAssociationsModel::associationAdd() +-{ +- endInsertRows(); +-} +- +-void AutoTypeAssociationsModel::associationAboutToRemove(int i) +-{ +- beginRemoveRows(QModelIndex(), i, i); +-} +- +-void AutoTypeAssociationsModel::associationRemove() +-{ +- endRemoveRows(); +-} +- +-void AutoTypeAssociationsModel::aboutToReset() +-{ +- beginResetModel(); +-} +- +-void AutoTypeAssociationsModel::reset() +-{ +- endResetModel(); +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/entry/AutoTypeAssociationsModel.h keepassxc-2.6.4-patched/src/gui/entry/AutoTypeAssociationsModel.h +--- keepassxc-2.6.4-orig/src/gui/entry/AutoTypeAssociationsModel.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/entry/AutoTypeAssociationsModel.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,55 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_AUTOTYPEASSOCIATIONSMODEL_H +-#define KEEPASSX_AUTOTYPEASSOCIATIONSMODEL_H +- +-#include +-#include +- +-#include "core/AutoTypeAssociations.h" +- +-class Entry; +- +-class AutoTypeAssociationsModel : public QAbstractListModel +-{ +- Q_OBJECT +- +-public: +- explicit AutoTypeAssociationsModel(QObject* parent = nullptr); +- void setAutoTypeAssociations(AutoTypeAssociations* autoTypeAssociations); +- void setEntry(Entry* entry); +- int rowCount(const QModelIndex& parent = QModelIndex()) const override; +- int columnCount(const QModelIndex& parent = QModelIndex()) const override; +- QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; +- QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; +- +-public slots: +- void associationChange(int i); +- void associationAboutToAdd(int i); +- void associationAdd(); +- void associationAboutToRemove(int i); +- void associationRemove(); +- void aboutToReset(); +- void reset(); +- +-private: +- AutoTypeAssociations* m_autoTypeAssociations; +- QPointer m_entry; +-}; +- +-#endif // KEEPASSX_AUTOTYPEASSOCIATIONSMODEL_H +diff -urNr keepassxc-2.6.4-orig/src/gui/entry/AutoTypeMatchModel.cpp keepassxc-2.6.4-patched/src/gui/entry/AutoTypeMatchModel.cpp +--- keepassxc-2.6.4-orig/src/gui/entry/AutoTypeMatchModel.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/entry/AutoTypeMatchModel.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,195 +0,0 @@ +-/* +- * Copyright (C) 2015 David Wu +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "AutoTypeMatchModel.h" +- +-#include +- +-#include "core/DatabaseIcons.h" +-#include "core/Entry.h" +-#include "core/Global.h" +-#include "core/Group.h" +-#include "core/Metadata.h" +- +-AutoTypeMatchModel::AutoTypeMatchModel(QObject* parent) +- : QAbstractTableModel(parent) +-{ +-} +- +-AutoTypeMatch AutoTypeMatchModel::matchFromIndex(const QModelIndex& index) const +-{ +- Q_ASSERT(index.isValid() && index.row() < m_matches.size()); +- return m_matches.at(index.row()); +-} +- +-QModelIndex AutoTypeMatchModel::indexFromMatch(const AutoTypeMatch& match) const +-{ +- int row = m_matches.indexOf(match); +- Q_ASSERT(row != -1); +- return index(row, 1); +-} +- +-void AutoTypeMatchModel::setMatchList(const QList& matches) +-{ +- beginResetModel(); +- +- severConnections(); +- +- m_allGroups.clear(); +- m_matches = matches; +- +- QSet databases; +- +- for (AutoTypeMatch& match : m_matches) { +- databases.insert(match.entry->group()->database()); +- } +- +- for (Database* db : asConst(databases)) { +- Q_ASSERT(db); +- for (const Group* group : db->rootGroup()->groupsRecursive(true)) { +- m_allGroups.append(group); +- } +- +- if (db->metadata()->recycleBin()) { +- m_allGroups.removeOne(db->metadata()->recycleBin()); +- } +- } +- +- for (const Group* group : asConst(m_allGroups)) { +- makeConnections(group); +- } +- +- endResetModel(); +-} +- +-int AutoTypeMatchModel::rowCount(const QModelIndex& parent) const +-{ +- if (parent.isValid()) { +- return 0; +- } +- return m_matches.size(); +-} +- +-int AutoTypeMatchModel::columnCount(const QModelIndex& parent) const +-{ +- Q_UNUSED(parent); +- +- return 4; +-} +- +-QVariant AutoTypeMatchModel::data(const QModelIndex& index, int role) const +-{ +- if (!index.isValid()) { +- return {}; +- } +- +- AutoTypeMatch match = matchFromIndex(index); +- +- if (role == Qt::DisplayRole) { +- switch (index.column()) { +- case ParentGroup: +- if (match.entry->group()) { +- return match.entry->group()->name(); +- } +- break; +- case Title: +- return match.entry->resolveMultiplePlaceholders(match.entry->title()); +- case Username: +- return match.entry->resolveMultiplePlaceholders(match.entry->username()); +- case Sequence: +- return match.sequence; +- } +- } else if (role == Qt::DecorationRole) { +- switch (index.column()) { +- case ParentGroup: +- if (match.entry->group()) { +- return match.entry->group()->iconPixmap(); +- } +- break; +- case Title: +- return match.entry->iconPixmap(); +- } +- } else if (role == Qt::FontRole) { +- QFont font; +- if (match.entry->isExpired()) { +- font.setStrikeOut(true); +- } +- return font; +- } +- +- return {}; +-} +- +-QVariant AutoTypeMatchModel::headerData(int section, Qt::Orientation orientation, int role) const +-{ +- if (orientation == Qt::Horizontal && role == Qt::DisplayRole) { +- switch (section) { +- case ParentGroup: +- return tr("Group"); +- case Title: +- return tr("Title"); +- case Username: +- return tr("Username"); +- case Sequence: +- return tr("Sequence"); +- } +- } +- +- return {}; +-} +- +-void AutoTypeMatchModel::entryDataChanged(Entry* entry) +-{ +- for (int row = 0; row < m_matches.size(); ++row) { +- AutoTypeMatch match = m_matches[row]; +- if (match.entry == entry) { +- emit dataChanged(index(row, 0), index(row, columnCount() - 1)); +- } +- } +-} +- +-void AutoTypeMatchModel::entryAboutToRemove(Entry* entry) +-{ +- for (int row = 0; row < m_matches.size(); ++row) { +- AutoTypeMatch match = m_matches[row]; +- if (match.entry == entry) { +- beginRemoveRows(QModelIndex(), row, row); +- m_matches.removeAt(row); +- endRemoveRows(); +- --row; +- } +- } +-} +- +-void AutoTypeMatchModel::entryRemoved() +-{ +-} +- +-void AutoTypeMatchModel::severConnections() +-{ +- for (const Group* group : asConst(m_allGroups)) { +- disconnect(group, nullptr, this, nullptr); +- } +-} +- +-void AutoTypeMatchModel::makeConnections(const Group* group) +-{ +- connect(group, SIGNAL(entryAboutToRemove(Entry*)), SLOT(entryAboutToRemove(Entry*))); +- connect(group, SIGNAL(entryRemoved(Entry*)), SLOT(entryRemoved())); +- connect(group, SIGNAL(entryDataChanged(Entry*)), SLOT(entryDataChanged(Entry*))); +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/entry/AutoTypeMatchModel.h keepassxc-2.6.4-patched/src/gui/entry/AutoTypeMatchModel.h +--- keepassxc-2.6.4-orig/src/gui/entry/AutoTypeMatchModel.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/entry/AutoTypeMatchModel.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,66 +0,0 @@ +-/* +- * Copyright (C) 2015 David Wu +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_AUTOTYPEMATCHMODEL_H +-#define KEEPASSX_AUTOTYPEMATCHMODEL_H +- +-#include +- +-#include "core/AutoTypeMatch.h" +- +-class Entry; +-class Group; +- +-class AutoTypeMatchModel : public QAbstractTableModel +-{ +- Q_OBJECT +- +-public: +- enum ModelColumn +- { +- ParentGroup = 0, +- Title = 1, +- Username = 2, +- Sequence = 3 +- }; +- +- explicit AutoTypeMatchModel(QObject* parent = nullptr); +- AutoTypeMatch matchFromIndex(const QModelIndex& index) const; +- QModelIndex indexFromMatch(const AutoTypeMatch& match) const; +- +- int rowCount(const QModelIndex& parent = QModelIndex()) const override; +- int columnCount(const QModelIndex& parent = QModelIndex()) const override; +- QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; +- QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; +- +- void setMatchList(const QList& matches); +- +-private slots: +- void entryAboutToRemove(Entry* entry); +- void entryRemoved(); +- void entryDataChanged(Entry* entry); +- +-private: +- void severConnections(); +- void makeConnections(const Group* group); +- +- QList m_matches; +- QList m_allGroups; +-}; +- +-#endif // KEEPASSX_AUTOTYPEMATCHMODEL_H +diff -urNr keepassxc-2.6.4-orig/src/gui/entry/AutoTypeMatchView.cpp keepassxc-2.6.4-patched/src/gui/entry/AutoTypeMatchView.cpp +--- keepassxc-2.6.4-orig/src/gui/entry/AutoTypeMatchView.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/entry/AutoTypeMatchView.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,154 +0,0 @@ +-/* +- * Copyright (C) 2015 David Wu +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "AutoTypeMatchView.h" +- +-#include "core/Entry.h" +-#include "gui/Clipboard.h" +-#include "gui/SortFilterHideProxyModel.h" +- +-#include +-#include +-#include +- +-AutoTypeMatchView::AutoTypeMatchView(QWidget* parent) +- : QTreeView(parent) +- , m_model(new AutoTypeMatchModel(this)) +- , m_sortModel(new SortFilterHideProxyModel(this)) +-{ +- m_sortModel->setSourceModel(m_model); +- m_sortModel->setDynamicSortFilter(true); +- m_sortModel->setSortLocaleAware(true); +- m_sortModel->setSortCaseSensitivity(Qt::CaseInsensitive); +- setModel(m_sortModel); +- +- setUniformRowHeights(true); +- setRootIsDecorated(false); +- setAlternatingRowColors(true); +- setDragEnabled(false); +- setSortingEnabled(true); +- setSelectionMode(QAbstractItemView::SingleSelection); +- header()->setDefaultSectionSize(150); +- +- setContextMenuPolicy(Qt::ActionsContextMenu); +- auto* copyUserNameAction = new QAction(tr("Copy &username"), this); +- auto* copyPasswordAction = new QAction(tr("Copy &password"), this); +- addAction(copyUserNameAction); +- addAction(copyPasswordAction); +- +- connect(copyUserNameAction, SIGNAL(triggered()), this, SLOT(userNameCopied())); +- connect(copyPasswordAction, SIGNAL(triggered()), this, SLOT(passwordCopied())); +- +- connect(this, SIGNAL(doubleClicked(QModelIndex)), SLOT(emitMatchActivated(QModelIndex))); +- // clang-format off +- connect(selectionModel(), +- SIGNAL(selectionChanged(QItemSelection,QItemSelection)), +- SIGNAL(matchSelectionChanged())); +- // clang-format on +-} +- +-void AutoTypeMatchView::userNameCopied() +-{ +- clipboard()->setText(currentMatch().entry->username()); +- emit matchTextCopied(); +-} +- +-void AutoTypeMatchView::passwordCopied() +-{ +- clipboard()->setText(currentMatch().entry->password()); +- emit matchTextCopied(); +-} +- +-void AutoTypeMatchView::keyPressEvent(QKeyEvent* event) +-{ +- if ((event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return) && currentIndex().isValid()) { +- emitMatchActivated(currentIndex()); +-#ifdef Q_OS_MACOS +- // Pressing return does not emit the QTreeView::activated signal on mac os +- emit activated(currentIndex()); +-#endif +- } +- +- QTreeView::keyPressEvent(event); +-} +- +-void AutoTypeMatchView::setMatchList(const QList& matches) +-{ +- m_model->setMatchList(matches); +- +- bool sameSequences = true; +- if (matches.count() > 1) { +- QString sequenceTest = matches[0].sequence; +- for (const auto& match : matches) { +- if (match.sequence != sequenceTest) { +- sameSequences = false; +- break; +- } +- } +- } +- setColumnHidden(AutoTypeMatchModel::Sequence, sameSequences); +- +- for (int i = 0; i < m_model->columnCount(); ++i) { +- resizeColumnToContents(i); +- if (columnWidth(i) > 250) { +- setColumnWidth(i, 250); +- } +- } +- +- setFirstMatchActive(); +-} +- +-void AutoTypeMatchView::setFirstMatchActive() +-{ +- if (m_model->rowCount() > 0) { +- QModelIndex index = m_sortModel->mapToSource(m_sortModel->index(0, 0)); +- setCurrentMatch(m_model->matchFromIndex(index)); +- } else { +- emit matchSelectionChanged(); +- } +-} +- +-void AutoTypeMatchView::emitMatchActivated(const QModelIndex& index) +-{ +- AutoTypeMatch match = matchFromIndex(index); +- +- emit matchActivated(match); +-} +- +-AutoTypeMatch AutoTypeMatchView::currentMatch() +-{ +- QModelIndexList list = selectionModel()->selectedRows(); +- if (list.size() == 1) { +- return m_model->matchFromIndex(m_sortModel->mapToSource(list.first())); +- } +- return AutoTypeMatch(); +-} +- +-void AutoTypeMatchView::setCurrentMatch(const AutoTypeMatch& match) +-{ +- selectionModel()->setCurrentIndex(m_sortModel->mapFromSource(m_model->indexFromMatch(match)), +- QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows); +-} +- +-AutoTypeMatch AutoTypeMatchView::matchFromIndex(const QModelIndex& index) +-{ +- if (index.isValid()) { +- return m_model->matchFromIndex(m_sortModel->mapToSource(index)); +- } +- return AutoTypeMatch(); +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/entry/AutoTypeMatchView.h keepassxc-2.6.4-patched/src/gui/entry/AutoTypeMatchView.h +--- keepassxc-2.6.4-orig/src/gui/entry/AutoTypeMatchView.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/entry/AutoTypeMatchView.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,60 +0,0 @@ +-/* +- * Copyright (C) 2015 David Wu +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_AUTOTYPEMATCHVIEW_H +-#define KEEPASSX_AUTOTYPEMATCHVIEW_H +- +-#include +- +-#include "core/AutoTypeMatch.h" +- +-#include "gui/entry/AutoTypeMatchModel.h" +- +-class SortFilterHideProxyModel; +- +-class AutoTypeMatchView : public QTreeView +-{ +- Q_OBJECT +- +-public: +- explicit AutoTypeMatchView(QWidget* parent = nullptr); +- AutoTypeMatch currentMatch(); +- void setCurrentMatch(const AutoTypeMatch& match); +- AutoTypeMatch matchFromIndex(const QModelIndex& index); +- void setMatchList(const QList& matches); +- void setFirstMatchActive(); +- +-signals: +- void matchActivated(AutoTypeMatch match); +- void matchSelectionChanged(); +- void matchTextCopied(); +- +-protected: +- void keyPressEvent(QKeyEvent* event) override; +- +-private slots: +- void emitMatchActivated(const QModelIndex& index); +- void userNameCopied(); +- void passwordCopied(); +- +-private: +- AutoTypeMatchModel* const m_model; +- SortFilterHideProxyModel* const m_sortModel; +-}; +- +-#endif // KEEPASSX_AUTOTYPEMATCHVIEW_H +diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EditEntryWidgetAdvanced.ui keepassxc-2.6.4-patched/src/gui/entry/EditEntryWidgetAdvanced.ui +--- keepassxc-2.6.4-orig/src/gui/entry/EditEntryWidgetAdvanced.ui 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/entry/EditEntryWidgetAdvanced.ui 1970-01-01 01:00:00.000000000 +0100 +@@ -1,338 +0,0 @@ +- +- +- EditEntryWidgetAdvanced +- +- +- +- 0 +- 0 +- 532 +- 469 +- +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- Additional attributes +- +- +- +- +- +- Qt::Horizontal +- +- +- false +- +- +- +- +- 0 +- 0 +- +- +- +- Attribute selection +- +- +- QAbstractScrollArea::AdjustToContents +- +- +- QListView::Adjust +- +- +- +- +- false +- +- +- +- 0 +- 0 +- +- +- +- +- 170 +- 0 +- +- +- +- Attribute value +- +- +- +- +- +- +- +- +- +- Add a new attribute +- +- +- Add +- +- +- +- +- +- +- false +- +- +- Remove selected attribute +- +- +- Remove +- +- +- +- +- +- +- false +- +- +- Edit attribute name +- +- +- Edit Name +- +- +- +- +- +- +- Qt::Vertical +- +- +- +- 20 +- 40 +- +- +- +- +- +- +- +- true +- +- +- Toggle attribute protection +- +- +- margin-left:50%;margin-right:50% +- +- +- Protect +- +- +- true +- +- +- +- +- +- +- false +- +- +- Show a protected attribute +- +- +- Reveal +- +- +- false +- +- +- +- +- +- +- +- +- +- +- +- Attachments +- +- +- +- +- +- +- 100 +- 100 +- +- +- +- +- +- +- +- +- +- +- <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> +- +- +- Exclude from database reports +- +- +- +- +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- Foreground Color: +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- 25 +- 25 +- +- +- +- Foreground color selection +- +- +- +- +- +- +- +- +- +- Qt::Horizontal +- +- +- QSizePolicy::Maximum +- +- +- +- 30 +- 20 +- +- +- +- +- +- +- +- Background Color: +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- 25 +- 25 +- +- +- +- Background color selection +- +- +- +- +- +- false +- +- +- +- +- +- +- Qt::Horizontal +- +- +- +- 40 +- 20 +- +- +- +- +- +- +- +- +- +- +- +- EntryAttachmentsWidget +- QWidget +-
gui/entry/EntryAttachmentsWidget.h
+- 1 +-
+- +- AttributesListView +- QListView +-
gui/entry/EditEntryWidget_p.h
+-
+-
+- +- attributesView +- attributesEdit +- addAttributeButton +- removeAttributeButton +- editAttributeButton +- protectAttributeButton +- revealAttributeButton +- knownBadCheckBox +- fgColorCheckBox +- fgColorButton +- bgColorCheckBox +- bgColorButton +- +- +- +-
+diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EditEntryWidgetAutoType.ui keepassxc-2.6.4-patched/src/gui/entry/EditEntryWidgetAutoType.ui +--- keepassxc-2.6.4-orig/src/gui/entry/EditEntryWidgetAutoType.ui 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/entry/EditEntryWidgetAutoType.ui 1970-01-01 01:00:00.000000000 +0100 +@@ -1,344 +0,0 @@ +- +- +- EditEntryWidgetAutoType +- +- +- +- 0 +- 0 +- 577 +- 434 +- +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- Enable Auto-Type for this entry +- +- +- +- +- +- +- Qt::Vertical +- +- +- QSizePolicy::Fixed +- +- +- +- 1 +- 10 +- +- +- +- +- +- +- +- Inherit default Auto-Type sequence from the group +- +- +- +- +- +- +- Use custom Auto-Type sequence: +- +- +- +- +- +- +- +- +- Qt::Horizontal +- +- +- QSizePolicy::Fixed +- +- +- +- 20 +- 1 +- +- +- +- +- +- +- +- false +- +- +- Custom Auto-Type sequence +- +- +- +- +- +- +- false +- +- +- Open Auto-Type help webpage +- +- +- Open Auto-Type help webpage +- +- +- +- +- +- +- +- +- +- +- +- Qt::Vertical +- +- +- QSizePolicy::Fixed +- +- +- +- 20 +- 10 +- +- +- +- +- +- +- +- Window Associations +- +- +- +- +- +- +- +- Existing window associations +- +- +- false +- +- +- true +- +- +- false +- +- +- false +- +- +- +- +- +- +- +- +- Qt::Horizontal +- +- +- +- 40 +- 20 +- +- +- +- +- +- +- +- false +- +- +- +- 0 +- 0 +- +- +- +- +- 0 +- 25 +- +- +- +- Add new window association +- +- +- Add new window association +- +- +- + +- +- +- +- +- +- +- false +- +- +- +- 0 +- 0 +- +- +- +- +- 0 +- 25 +- +- +- +- Remove selected window association +- +- +- Remove selected window association +- +- +- - +- +- +- +- +- +- +- +- +- +- +- +- +- Window title: +- +- +- +- +- +- +- You can use an asterisk (*) to match everything +- +- +- Set the window association title +- +- +- You can use an asterisk to match everything +- +- +- +- +- +- +- Qt::Vertical +- +- +- QSizePolicy::Fixed +- +- +- +- 1 +- 10 +- +- +- +- +- +- +- +- Use a specific sequence for this association: +- +- +- +- +- +- +- +- +- Qt::Horizontal +- +- +- QSizePolicy::Fixed +- +- +- +- 20 +- 1 +- +- +- +- +- +- +- +- false +- +- +- Custom Auto-Type sequence for this window +- +- +- +- +- +- +- +- +- Qt::Vertical +- +- +- +- 20 +- 40 +- +- +- +- +- +- +- +- +- +- +- +- +- +- WindowSelectComboBox +- QComboBox +-
autotype/WindowSelectComboBox.h
+-
+-
+- +- enableButton +- inheritSequenceButton +- customSequenceButton +- sequenceEdit +- openHelpButton +- assocView +- windowTitleCombo +- customWindowSequenceButton +- windowSequenceEdit +- assocAddButton +- assocRemoveButton +- +- +- +-
+diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EditEntryWidgetBrowser.ui keepassxc-2.6.4-patched/src/gui/entry/EditEntryWidgetBrowser.ui +--- keepassxc-2.6.4-orig/src/gui/entry/EditEntryWidgetBrowser.ui 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/entry/EditEntryWidgetBrowser.ui 1970-01-01 01:00:00.000000000 +0100 +@@ -1,151 +0,0 @@ +- +- +- EditEntryWidgetBrowser +- +- +- +- 0 +- 0 +- 400 +- 348 +- +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- These settings affect to the entry's behaviour with the browser extension. +- +- +- +- +- +- +- General +- +- +- +- +- +- Skip Auto-Submit for this entry +- +- +- +- +- +- +- Hide this entry from the browser extension +- +- +- +- +- +- +- Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. +- +- +- Use this entry only with HTTP Basic Auth +- +- +- +- +- +- +- +- +- +- Additional URL's +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- QAbstractScrollArea::AdjustToContents +- +- +- QListView::Adjust +- +- +- +- +- +- +- +- +- Add +- +- +- +- +- +- +- false +- +- +- Remove +- +- +- +- +- +- +- false +- +- +- Edit +- +- +- +- +- +- +- Qt::Vertical +- +- +- QSizePolicy::Expanding +- +- +- +- 20 +- 40 +- +- +- +- +- +- +- +- +- +- +- +- +- skipAutoSubmitCheckbox +- hideEntryCheckbox +- onlyHttpAuthCheckbox +- additionalURLsView +- addURLButton +- removeURLButton +- editURLButton +- +- +- +- +diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EditEntryWidget.cpp keepassxc-2.6.4-patched/src/gui/entry/EditEntryWidget.cpp +--- keepassxc-2.6.4-orig/src/gui/entry/EditEntryWidget.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/entry/EditEntryWidget.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,1522 +0,0 @@ +-/* +- * Copyright (C) 2010 Felix Geyer +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "EditEntryWidget.h" +-#include "ui_EditEntryWidgetAdvanced.h" +-#include "ui_EditEntryWidgetAutoType.h" +-#include "ui_EditEntryWidgetBrowser.h" +-#include "ui_EditEntryWidgetHistory.h" +-#include "ui_EditEntryWidgetMain.h" +-#include "ui_EditEntryWidgetSSHAgent.h" +- +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-#include "autotype/AutoType.h" +-#include "core/Clock.h" +-#include "core/Config.h" +-#include "core/Database.h" +-#include "core/Entry.h" +-#include "core/Metadata.h" +-#include "core/PasswordHealth.h" +-#include "core/Resources.h" +-#include "core/TimeDelta.h" +-#include "core/Tools.h" +-#ifdef WITH_XC_SSHAGENT +-#include "crypto/ssh/OpenSSHKey.h" +-#include "sshagent/KeeAgentSettings.h" +-#include "sshagent/SSHAgent.h" +-#endif +-#ifdef WITH_XC_BROWSER +-#include "EntryURLModel.h" +-#include "browser/BrowserService.h" +-#endif +-#include "gui/Clipboard.h" +-#include "gui/EditWidgetIcons.h" +-#include "gui/EditWidgetProperties.h" +-#include "gui/FileDialog.h" +-#include "gui/Font.h" +-#include "gui/MessageBox.h" +-#include "gui/entry/AutoTypeAssociationsModel.h" +-#include "gui/entry/EntryAttachmentsModel.h" +-#include "gui/entry/EntryAttributesModel.h" +-#include "gui/entry/EntryHistoryModel.h" +- +-EditEntryWidget::EditEntryWidget(QWidget* parent) +- : EditWidget(parent) +- , m_entry(nullptr) +- , m_mainUi(new Ui::EditEntryWidgetMain()) +- , m_advancedUi(new Ui::EditEntryWidgetAdvanced()) +- , m_autoTypeUi(new Ui::EditEntryWidgetAutoType()) +- , m_sshAgentUi(new Ui::EditEntryWidgetSSHAgent()) +- , m_historyUi(new Ui::EditEntryWidgetHistory()) +- , m_browserUi(new Ui::EditEntryWidgetBrowser()) +- , m_customData(new CustomData()) +- , m_mainWidget(new QScrollArea()) +- , m_advancedWidget(new QWidget()) +- , m_iconsWidget(new EditWidgetIcons()) +- , m_autoTypeWidget(new QWidget()) +-#ifdef WITH_XC_SSHAGENT +- , m_sshAgentWidget(new QWidget()) +-#endif +-#ifdef WITH_XC_BROWSER +- , m_browserSettingsChanged(false) +- , m_browserWidget(new QWidget()) +- , m_additionalURLsDataModel(new EntryURLModel(this)) +-#endif +- , m_editWidgetProperties(new EditWidgetProperties()) +- , m_historyWidget(new QWidget()) +- , m_entryAttributes(new EntryAttributes(this)) +- , m_attributesModel(new EntryAttributesModel(m_advancedWidget)) +- , m_historyModel(new EntryHistoryModel(this)) +- , m_sortModel(new QSortFilterProxyModel(this)) +- , m_autoTypeAssoc(new AutoTypeAssociations(this)) +- , m_autoTypeAssocModel(new AutoTypeAssociationsModel(this)) +- , m_autoTypeDefaultSequenceGroup(new QButtonGroup(this)) +- , m_autoTypeWindowSequenceGroup(new QButtonGroup(this)) +- , m_usernameCompleter(new QCompleter(this)) +- , m_usernameCompleterModel(new QStringListModel(this)) +-{ +- setupMain(); +- setupAdvanced(); +- setupIcon(); +- setupAutoType(); +- +-#ifdef WITH_XC_SSHAGENT +- setupSSHAgent(); +-#endif +- +-#ifdef WITH_XC_BROWSER +- setupBrowser(); +-#endif +- +- setupProperties(); +- setupHistory(); +- setupEntryUpdate(); +- +- m_entryModifiedTimer.setSingleShot(true); +- m_entryModifiedTimer.setInterval(0); +- connect(&m_entryModifiedTimer, &QTimer::timeout, this, [this] { +- if (isVisible() && m_entry) { +- setForms(m_entry); +- } +- }); +- +- connect(this, SIGNAL(accepted()), SLOT(acceptEntry())); +- connect(this, SIGNAL(rejected()), SLOT(cancel())); +- connect(this, SIGNAL(apply()), SLOT(commitEntry())); +- // clang-format off +- connect(m_iconsWidget, +- SIGNAL(messageEditEntry(QString,MessageWidget::MessageType)), +- SLOT(showMessage(QString,MessageWidget::MessageType))); +- // clang-format on +- +- connect(m_iconsWidget, SIGNAL(messageEditEntryDismiss()), SLOT(hideMessage())); +- +- m_editWidgetProperties->setCustomData(m_customData.data()); +-} +- +-EditEntryWidget::~EditEntryWidget() +-{ +-} +- +-void EditEntryWidget::setupMain() +-{ +- m_mainUi->setupUi(m_mainWidget); +- addPage(tr("Entry"), Resources::instance()->icon("document-edit"), m_mainWidget); +- +- m_mainUi->usernameComboBox->setEditable(true); +- m_usernameCompleter->setCompletionMode(QCompleter::InlineCompletion); +- m_usernameCompleter->setCaseSensitivity(Qt::CaseSensitive); +- m_usernameCompleter->setModel(m_usernameCompleterModel); +- m_mainUi->usernameComboBox->setCompleter(m_usernameCompleter); +- +-#ifdef WITH_XC_NETWORKING +- m_mainUi->fetchFaviconButton->setIcon(resources()->icon("favicon-download")); +- m_mainUi->fetchFaviconButton->setDisabled(true); +-#else +- m_mainUi->fetchFaviconButton->setVisible(false); +-#endif +- +-#ifdef WITH_XC_NETWORKING +- connect(m_mainUi->fetchFaviconButton, SIGNAL(clicked()), m_iconsWidget, SLOT(downloadFavicon())); +- connect(m_mainUi->urlEdit, SIGNAL(textChanged(QString)), m_iconsWidget, SLOT(setUrl(QString))); +- m_mainUi->urlEdit->enableVerifyMode(); +-#endif +- connect(m_mainUi->expireCheck, &QCheckBox::toggled, [&](bool enabled) { +- m_mainUi->expireDatePicker->setEnabled(enabled); +- if (enabled) { +- m_mainUi->expireDatePicker->setDateTime(Clock::currentDateTime()); +- } +- }); +- +- connect(m_mainUi->notesEnabled, SIGNAL(toggled(bool)), this, SLOT(toggleHideNotes(bool))); +- +- m_mainUi->expirePresets->setMenu(createPresetsMenu()); +- connect(m_mainUi->expirePresets->menu(), SIGNAL(triggered(QAction*)), this, SLOT(useExpiryPreset(QAction*))); +-} +- +-void EditEntryWidget::setupAdvanced() +-{ +- m_advancedUi->setupUi(m_advancedWidget); +- addPage(tr("Advanced"), Resources::instance()->icon("preferences-other"), m_advancedWidget); +- +- m_advancedUi->attachmentsWidget->setReadOnly(false); +- m_advancedUi->attachmentsWidget->setButtonsVisible(true); +- +- connect(m_advancedUi->attachmentsWidget, +- &EntryAttachmentsWidget::errorOccurred, +- this, +- [this](const QString& error) { showMessage(error, MessageWidget::Error); }); +- +- m_attributesModel->setEntryAttributes(m_entryAttributes); +- m_advancedUi->attributesView->setModel(m_attributesModel); +- +- // clang-format off +- connect(m_advancedUi->addAttributeButton, SIGNAL(clicked()), SLOT(insertAttribute())); +- connect(m_advancedUi->editAttributeButton, SIGNAL(clicked()), SLOT(editCurrentAttribute())); +- connect(m_advancedUi->removeAttributeButton, SIGNAL(clicked()), SLOT(removeCurrentAttribute())); +- connect(m_advancedUi->protectAttributeButton, SIGNAL(toggled(bool)), SLOT(protectCurrentAttribute(bool))); +- connect(m_advancedUi->revealAttributeButton, SIGNAL(clicked(bool)), SLOT(toggleCurrentAttributeVisibility())); +- connect(m_advancedUi->attributesView->selectionModel(), +- SIGNAL(currentChanged(QModelIndex,QModelIndex)), +- SLOT(updateCurrentAttribute())); +- connect(m_advancedUi->fgColorButton, SIGNAL(clicked()), SLOT(pickColor())); +- connect(m_advancedUi->bgColorButton, SIGNAL(clicked()), SLOT(pickColor())); +- // clang-format on +-} +- +-void EditEntryWidget::setupIcon() +-{ +- m_iconsWidget->setShowApplyIconToButton(false); +- addPage(tr("Icon"), Resources::instance()->icon("preferences-desktop-icons"), m_iconsWidget); +- connect(this, SIGNAL(accepted()), m_iconsWidget, SLOT(abortRequests())); +- connect(this, SIGNAL(rejected()), m_iconsWidget, SLOT(abortRequests())); +-} +- +-void EditEntryWidget::openAutotypeHelp() +-{ +- QDesktopServices::openUrl( +- QUrl("https://keepassxc.org/docs/KeePassXC_UserGuide.html#_configure_auto_type_sequences")); +-} +- +-void EditEntryWidget::setupAutoType() +-{ +- m_autoTypeUi->setupUi(m_autoTypeWidget); +- addPage(tr("Auto-Type"), Resources::instance()->icon("key-enter"), m_autoTypeWidget); +- +- m_autoTypeUi->openHelpButton->setIcon(resources()->icon("system-help")); +- +- m_autoTypeDefaultSequenceGroup->addButton(m_autoTypeUi->inheritSequenceButton); +- m_autoTypeDefaultSequenceGroup->addButton(m_autoTypeUi->customSequenceButton); +- m_autoTypeAssocModel->setAutoTypeAssociations(m_autoTypeAssoc); +- m_autoTypeUi->assocView->setModel(m_autoTypeAssocModel); +- m_autoTypeUi->assocView->setColumnHidden(1, true); +- +- // clang-format off +- connect(m_autoTypeUi->enableButton, SIGNAL(toggled(bool)), SLOT(updateAutoTypeEnabled())); +- connect(m_autoTypeUi->customSequenceButton, SIGNAL(toggled(bool)), +- m_autoTypeUi->sequenceEdit, SLOT(setEnabled(bool))); +- connect(m_autoTypeUi->customSequenceButton, SIGNAL(toggled(bool)), +- m_autoTypeUi->openHelpButton, SLOT(setEnabled(bool))); +- connect(m_autoTypeUi->openHelpButton, SIGNAL(clicked()), SLOT(openAutotypeHelp())); +- connect(m_autoTypeUi->customWindowSequenceButton, SIGNAL(toggled(bool)), +- m_autoTypeUi->windowSequenceEdit, SLOT(setEnabled(bool))); +- connect(m_autoTypeUi->assocAddButton, SIGNAL(clicked()), SLOT(insertAutoTypeAssoc())); +- connect(m_autoTypeUi->assocRemoveButton, SIGNAL(clicked()), SLOT(removeAutoTypeAssoc())); +- connect(m_autoTypeUi->assocView->selectionModel(), +- SIGNAL(currentRowChanged(QModelIndex,QModelIndex)), +- SLOT(updateAutoTypeEnabled())); +- connect(m_autoTypeUi->assocView->selectionModel(), +- SIGNAL(currentRowChanged(QModelIndex,QModelIndex)), +- SLOT(loadCurrentAssoc(QModelIndex))); +- connect(m_autoTypeAssocModel, SIGNAL(modelReset()), SLOT(updateAutoTypeEnabled())); +- connect(m_autoTypeAssocModel, SIGNAL(modelReset()), SLOT(clearCurrentAssoc())); +- connect(m_autoTypeUi->windowTitleCombo, SIGNAL(editTextChanged(QString)), SLOT(applyCurrentAssoc())); +- connect(m_autoTypeUi->customWindowSequenceButton, SIGNAL(toggled(bool)), SLOT(applyCurrentAssoc())); +- connect(m_autoTypeUi->windowSequenceEdit, SIGNAL(textChanged(QString)), SLOT(applyCurrentAssoc())); +- // clang-format on +-} +- +-#ifdef WITH_XC_BROWSER +-void EditEntryWidget::setupBrowser() +-{ +- if (config()->get(Config::Browser_Enabled).toBool()) { +- m_browserUi->setupUi(m_browserWidget); +- addPage(tr("Browser Integration"), Resources::instance()->icon("internet-web-browser"), m_browserWidget); +- m_additionalURLsDataModel->setEntryAttributes(m_entryAttributes); +- m_browserUi->additionalURLsView->setModel(m_additionalURLsDataModel); +- +- // Use a custom item delegate to align the icon to the right side +- auto iconDelegate = new URLModelIconDelegate(m_browserUi->additionalURLsView); +- m_browserUi->additionalURLsView->setItemDelegate(iconDelegate); +- +- // clang-format off +- connect(m_browserUi->skipAutoSubmitCheckbox, SIGNAL(toggled(bool)), SLOT(updateBrowserModified())); +- connect(m_browserUi->hideEntryCheckbox, SIGNAL(toggled(bool)), SLOT(updateBrowserModified())); +- connect(m_browserUi->onlyHttpAuthCheckbox, SIGNAL(toggled(bool)), SLOT(updateBrowserModified())); +- connect(m_browserUi->addURLButton, SIGNAL(clicked()), SLOT(insertURL())); +- connect(m_browserUi->removeURLButton, SIGNAL(clicked()), SLOT(removeCurrentURL())); +- connect(m_browserUi->editURLButton, SIGNAL(clicked()), SLOT(editCurrentURL())); +- connect(m_browserUi->additionalURLsView->selectionModel(), +- SIGNAL(currentChanged(QModelIndex,QModelIndex)), +- SLOT(updateCurrentURL())); +- connect(m_additionalURLsDataModel, +- SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&, const QVector&)), +- SLOT(updateCurrentAttribute())); +- // clang-format on +- } +-} +- +-void EditEntryWidget::updateBrowserModified() +-{ +- m_browserSettingsChanged = true; +-} +- +-void EditEntryWidget::updateBrowser() +-{ +- if (!m_browserSettingsChanged) { +- return; +- } +- +- auto skip = m_browserUi->skipAutoSubmitCheckbox->isChecked(); +- auto hide = m_browserUi->hideEntryCheckbox->isChecked(); +- auto onlyHttpAuth = m_browserUi->onlyHttpAuthCheckbox->isChecked(); +- m_customData->set(BrowserService::OPTION_SKIP_AUTO_SUBMIT, (skip ? TRUE_STR : FALSE_STR)); +- m_customData->set(BrowserService::OPTION_HIDE_ENTRY, (hide ? TRUE_STR : FALSE_STR)); +- m_customData->set(BrowserService::OPTION_ONLY_HTTP_AUTH, (onlyHttpAuth ? TRUE_STR : FALSE_STR)); +-} +- +-void EditEntryWidget::insertURL() +-{ +- Q_ASSERT(!m_history); +- +- QString name("KP2A_URL"); +- int i = 1; +- +- while (m_entryAttributes->keys().contains(name)) { +- name = QString("KP2A_URL_%1").arg(i); +- i++; +- } +- +- m_entryAttributes->set(name, tr("")); +- QModelIndex index = m_additionalURLsDataModel->indexByKey(name); +- +- m_browserUi->additionalURLsView->setCurrentIndex(index); +- m_browserUi->additionalURLsView->edit(index); +- +- setModified(true); +-} +- +-void EditEntryWidget::removeCurrentURL() +-{ +- Q_ASSERT(!m_history); +- +- QModelIndex index = m_browserUi->additionalURLsView->currentIndex(); +- +- if (index.isValid()) { +- auto result = MessageBox::question(this, +- tr("Confirm Removal"), +- tr("Are you sure you want to remove this URL?"), +- MessageBox::Remove | MessageBox::Cancel, +- MessageBox::Cancel); +- +- if (result == MessageBox::Remove) { +- m_entryAttributes->remove(m_additionalURLsDataModel->keyByIndex(index)); +- if (m_additionalURLsDataModel->rowCount() == 0) { +- m_browserUi->editURLButton->setEnabled(false); +- m_browserUi->removeURLButton->setEnabled(false); +- } +- setModified(true); +- } +- } +-} +- +-void EditEntryWidget::editCurrentURL() +-{ +- Q_ASSERT(!m_history); +- +- QModelIndex index = m_browserUi->additionalURLsView->currentIndex(); +- +- if (index.isValid()) { +- m_browserUi->additionalURLsView->edit(index); +- setModified(true); +- } +-} +- +-void EditEntryWidget::updateCurrentURL() +-{ +- QModelIndex index = m_browserUi->additionalURLsView->currentIndex(); +- +- if (index.isValid()) { +- // Don't allow editing in history view +- m_browserUi->editURLButton->setEnabled(!m_history); +- m_browserUi->removeURLButton->setEnabled(!m_history); +- } else { +- m_browserUi->editURLButton->setEnabled(false); +- m_browserUi->removeURLButton->setEnabled(false); +- } +-} +-#endif +- +-void EditEntryWidget::setupProperties() +-{ +- addPage(tr("Properties"), Resources::instance()->icon("document-properties"), m_editWidgetProperties); +-} +- +-void EditEntryWidget::setupHistory() +-{ +- m_historyUi->setupUi(m_historyWidget); +- addPage(tr("History"), Resources::instance()->icon("view-history"), m_historyWidget); +- +- m_sortModel->setSourceModel(m_historyModel); +- m_sortModel->setDynamicSortFilter(true); +- m_sortModel->setSortLocaleAware(true); +- m_sortModel->setSortCaseSensitivity(Qt::CaseInsensitive); +- m_sortModel->setSortRole(Qt::UserRole); +- +- m_historyUi->historyView->setModel(m_sortModel); +- m_historyUi->historyView->setRootIsDecorated(false); +- +- // clang-format off +- connect(m_historyUi->historyView, SIGNAL(activated(QModelIndex)), SLOT(histEntryActivated(QModelIndex))); +- connect(m_historyUi->historyView->selectionModel(), +- SIGNAL(currentChanged(QModelIndex,QModelIndex)), +- SLOT(updateHistoryButtons(QModelIndex,QModelIndex))); +- +- connect(m_historyUi->showButton, SIGNAL(clicked()), SLOT(showHistoryEntry())); +- connect(m_historyUi->restoreButton, SIGNAL(clicked()), SLOT(restoreHistoryEntry())); +- connect(m_historyUi->deleteButton, SIGNAL(clicked()), SLOT(deleteHistoryEntry())); +- connect(m_historyUi->deleteAllButton, SIGNAL(clicked()), SLOT(deleteAllHistoryEntries())); +- // clang-format on +-} +- +-void EditEntryWidget::setupEntryUpdate() +-{ +- // Entry tab +- connect(m_mainUi->titleEdit, SIGNAL(textChanged(QString)), this, SLOT(setModified())); +- connect(m_mainUi->usernameComboBox->lineEdit(), SIGNAL(textChanged(QString)), this, SLOT(setModified())); +- connect(m_mainUi->passwordEdit, SIGNAL(textChanged(QString)), this, SLOT(setModified())); +- connect(m_mainUi->urlEdit, SIGNAL(textChanged(QString)), this, SLOT(setModified())); +-#ifdef WITH_XC_NETWORKING +- connect(m_mainUi->urlEdit, SIGNAL(textChanged(QString)), this, SLOT(updateFaviconButtonEnable(QString))); +-#endif +- connect(m_mainUi->expireCheck, SIGNAL(stateChanged(int)), this, SLOT(setModified())); +- connect(m_mainUi->expireDatePicker, SIGNAL(dateTimeChanged(QDateTime)), this, SLOT(setModified())); +- connect(m_mainUi->notesEdit, SIGNAL(textChanged()), this, SLOT(setModified())); +- +- // Advanced tab +- connect(m_advancedUi->attributesEdit, SIGNAL(textChanged()), this, SLOT(setModified())); +- connect(m_advancedUi->protectAttributeButton, SIGNAL(stateChanged(int)), this, SLOT(setModified())); +- connect(m_advancedUi->knownBadCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setModified())); +- connect(m_advancedUi->fgColorCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setModified())); +- connect(m_advancedUi->bgColorCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setModified())); +- connect(m_advancedUi->attachmentsWidget, SIGNAL(widgetUpdated()), this, SLOT(setModified())); +- +- // Icon tab +- connect(m_iconsWidget, SIGNAL(widgetUpdated()), this, SLOT(setModified())); +- +- // Auto-Type tab +- connect(m_autoTypeUi->enableButton, SIGNAL(stateChanged(int)), this, SLOT(setModified())); +- connect(m_autoTypeUi->customWindowSequenceButton, SIGNAL(stateChanged(int)), this, SLOT(setModified())); +- connect(m_autoTypeUi->inheritSequenceButton, SIGNAL(toggled(bool)), this, SLOT(setModified())); +- connect(m_autoTypeUi->customSequenceButton, SIGNAL(toggled(bool)), this, SLOT(setModified())); +- connect(m_autoTypeUi->windowSequenceEdit, SIGNAL(textChanged(QString)), this, SLOT(setModified())); +- connect(m_autoTypeUi->sequenceEdit, SIGNAL(textChanged(QString)), this, SLOT(setModified())); +- connect(m_autoTypeUi->windowTitleCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setModified())); +- connect(m_autoTypeUi->windowTitleCombo, SIGNAL(editTextChanged(QString)), this, SLOT(setModified())); +- +- // Properties and History tabs don't need extra connections +- +-#ifdef WITH_XC_SSHAGENT +- // SSH Agent tab +- if (sshAgent()->isEnabled()) { +- connect(m_sshAgentUi->attachmentRadioButton, SIGNAL(toggled(bool)), this, SLOT(setModified())); +- connect(m_sshAgentUi->externalFileRadioButton, SIGNAL(toggled(bool)), this, SLOT(setModified())); +- connect(m_sshAgentUi->attachmentComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(setModified())); +- connect(m_sshAgentUi->attachmentComboBox, SIGNAL(editTextChanged(QString)), this, SLOT(setModified())); +- connect(m_sshAgentUi->externalFileEdit, SIGNAL(textChanged(QString)), this, SLOT(setModified())); +- connect(m_sshAgentUi->addKeyToAgentCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setModified())); +- connect(m_sshAgentUi->removeKeyFromAgentCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setModified())); +- connect(m_sshAgentUi->requireUserConfirmationCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setModified())); +- connect(m_sshAgentUi->lifetimeCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setModified())); +- connect(m_sshAgentUi->lifetimeSpinBox, SIGNAL(valueChanged(int)), this, SLOT(setModified())); +- } +-#endif +- +-#ifdef WITH_XC_BROWSER +- if (config()->get(Config::Browser_Enabled).toBool()) { +- connect(m_browserUi->skipAutoSubmitCheckbox, SIGNAL(toggled(bool)), SLOT(setModified())); +- connect(m_browserUi->hideEntryCheckbox, SIGNAL(toggled(bool)), SLOT(setModified())); +- connect(m_browserUi->onlyHttpAuthCheckbox, SIGNAL(toggled(bool)), SLOT(setModified())); +- connect(m_browserUi->addURLButton, SIGNAL(toggled(bool)), SLOT(setModified())); +- connect(m_browserUi->removeURLButton, SIGNAL(toggled(bool)), SLOT(setModified())); +- connect(m_browserUi->editURLButton, SIGNAL(toggled(bool)), SLOT(setModified())); +- } +-#endif +-} +- +-void EditEntryWidget::emitHistoryEntryActivated(const QModelIndex& index) +-{ +- Q_ASSERT(!m_history); +- +- Entry* entry = m_historyModel->entryFromIndex(index); +- emit historyEntryActivated(entry); +-} +- +-void EditEntryWidget::histEntryActivated(const QModelIndex& index) +-{ +- Q_ASSERT(!m_history); +- +- QModelIndex indexMapped = m_sortModel->mapToSource(index); +- if (indexMapped.isValid()) { +- emitHistoryEntryActivated(indexMapped); +- } +-} +- +-void EditEntryWidget::updateHistoryButtons(const QModelIndex& current, const QModelIndex& previous) +-{ +- Q_UNUSED(previous); +- +- if (current.isValid()) { +- m_historyUi->showButton->setEnabled(true); +- m_historyUi->restoreButton->setEnabled(true); +- m_historyUi->deleteButton->setEnabled(true); +- } else { +- m_historyUi->showButton->setEnabled(false); +- m_historyUi->restoreButton->setEnabled(false); +- m_historyUi->deleteButton->setEnabled(false); +- } +-} +- +-#ifdef WITH_XC_SSHAGENT +-void EditEntryWidget::setupSSHAgent() +-{ +- m_sshAgentUi->setupUi(m_sshAgentWidget); +- +- QFont fixedFont = Font::fixedFont(); +- m_sshAgentUi->fingerprintTextLabel->setFont(fixedFont); +- m_sshAgentUi->commentTextLabel->setFont(fixedFont); +- m_sshAgentUi->publicKeyEdit->setFont(fixedFont); +- +- connect(m_sshAgentUi->attachmentRadioButton, SIGNAL(clicked(bool)), SLOT(updateSSHAgentKeyInfo())); +- connect(m_sshAgentUi->attachmentComboBox, SIGNAL(currentIndexChanged(int)), SLOT(updateSSHAgentAttachment())); +- connect(m_sshAgentUi->externalFileRadioButton, SIGNAL(clicked(bool)), SLOT(updateSSHAgentKeyInfo())); +- connect(m_sshAgentUi->externalFileEdit, SIGNAL(textChanged(QString)), SLOT(updateSSHAgentKeyInfo())); +- connect(m_sshAgentUi->browseButton, SIGNAL(clicked()), SLOT(browsePrivateKey())); +- connect(m_sshAgentUi->addToAgentButton, SIGNAL(clicked()), SLOT(addKeyToAgent())); +- connect(m_sshAgentUi->removeFromAgentButton, SIGNAL(clicked()), SLOT(removeKeyFromAgent())); +- connect(m_sshAgentUi->decryptButton, SIGNAL(clicked()), SLOT(decryptPrivateKey())); +- connect(m_sshAgentUi->copyToClipboardButton, SIGNAL(clicked()), SLOT(copyPublicKey())); +- +- connect(m_advancedUi->attachmentsWidget->entryAttachments(), +- SIGNAL(entryAttachmentsModified()), +- SLOT(updateSSHAgentAttachments())); +- +- addPage(tr("SSH Agent"), Resources::instance()->icon("utilities-terminal"), m_sshAgentWidget); +-} +- +-void EditEntryWidget::setSSHAgentSettings() +-{ +- m_sshAgentUi->addKeyToAgentCheckBox->setChecked(m_sshAgentSettings.addAtDatabaseOpen()); +- m_sshAgentUi->removeKeyFromAgentCheckBox->setChecked(m_sshAgentSettings.removeAtDatabaseClose()); +- m_sshAgentUi->requireUserConfirmationCheckBox->setChecked(m_sshAgentSettings.useConfirmConstraintWhenAdding()); +- m_sshAgentUi->lifetimeCheckBox->setChecked(m_sshAgentSettings.useLifetimeConstraintWhenAdding()); +- m_sshAgentUi->lifetimeSpinBox->setValue(m_sshAgentSettings.lifetimeConstraintDuration()); +- m_sshAgentUi->attachmentComboBox->clear(); +- m_sshAgentUi->addToAgentButton->setEnabled(false); +- m_sshAgentUi->removeFromAgentButton->setEnabled(false); +- m_sshAgentUi->copyToClipboardButton->setEnabled(false); +-} +- +-void EditEntryWidget::updateSSHAgent() +-{ +- m_sshAgentSettings.reset(); +- m_sshAgentSettings.fromEntry(m_entry); +- setSSHAgentSettings(); +- +- updateSSHAgentAttachments(); +-} +- +-void EditEntryWidget::updateSSHAgentAttachment() +-{ +- m_sshAgentUi->attachmentRadioButton->setChecked(true); +- updateSSHAgentKeyInfo(); +-} +- +-void EditEntryWidget::updateSSHAgentAttachments() +-{ +- // detect if KeeAgent.settings was removed by hand and reset settings +- if (m_entry && KeeAgentSettings::inEntryAttachments(m_entry->attachments()) +- && !KeeAgentSettings::inEntryAttachments(m_advancedUi->attachmentsWidget->entryAttachments())) { +- m_sshAgentSettings.reset(); +- setSSHAgentSettings(); +- } +- +- m_sshAgentUi->attachmentComboBox->clear(); +- m_sshAgentUi->attachmentComboBox->addItem(""); +- +- auto attachments = m_advancedUi->attachmentsWidget->entryAttachments(); +- for (const QString& fileName : attachments->keys()) { +- if (fileName == "KeeAgent.settings") { +- continue; +- } +- +- m_sshAgentUi->attachmentComboBox->addItem(fileName); +- } +- +- m_sshAgentUi->attachmentComboBox->setCurrentText(m_sshAgentSettings.attachmentName()); +- m_sshAgentUi->externalFileEdit->setText(m_sshAgentSettings.fileName()); +- +- if (m_sshAgentSettings.selectedType() == "attachment") { +- m_sshAgentUi->attachmentRadioButton->setChecked(true); +- } else { +- m_sshAgentUi->externalFileRadioButton->setChecked(true); +- } +- +- updateSSHAgentKeyInfo(); +-} +- +-void EditEntryWidget::updateSSHAgentKeyInfo() +-{ +- m_sshAgentUi->addToAgentButton->setEnabled(false); +- m_sshAgentUi->removeFromAgentButton->setEnabled(false); +- m_sshAgentUi->copyToClipboardButton->setEnabled(false); +- m_sshAgentUi->fingerprintTextLabel->setText(tr("n/a")); +- m_sshAgentUi->commentTextLabel->setText(tr("n/a")); +- m_sshAgentUi->decryptButton->setEnabled(false); +- m_sshAgentUi->publicKeyEdit->document()->setPlainText(""); +- +- OpenSSHKey key; +- +- if (!getOpenSSHKey(key)) { +- return; +- } +- +- if (!key.fingerprint().isEmpty()) { +- m_sshAgentUi->fingerprintTextLabel->setText(key.fingerprint(QCryptographicHash::Md5) + "\n" +- + key.fingerprint(QCryptographicHash::Sha256)); +- } else { +- m_sshAgentUi->fingerprintTextLabel->setText(tr("(encrypted)")); +- } +- +- if (!key.comment().isEmpty() || !key.encrypted()) { +- m_sshAgentUi->commentTextLabel->setText(key.comment()); +- } else { +- m_sshAgentUi->commentTextLabel->setText(tr("(encrypted)")); +- m_sshAgentUi->decryptButton->setEnabled(true); +- } +- +- if (!key.publicKey().isEmpty()) { +- m_sshAgentUi->publicKeyEdit->document()->setPlainText(key.publicKey()); +- m_sshAgentUi->copyToClipboardButton->setEnabled(true); +- } else { +- m_sshAgentUi->publicKeyEdit->document()->setPlainText(tr("(encrypted)")); +- m_sshAgentUi->copyToClipboardButton->setDisabled(true); +- } +- +- // enable agent buttons only if we have an agent running +- if (sshAgent()->isAgentRunning()) { +- m_sshAgentUi->addToAgentButton->setEnabled(true); +- m_sshAgentUi->removeFromAgentButton->setEnabled(true); +- +- sshAgent()->setAutoRemoveOnLock(key, m_sshAgentUi->removeKeyFromAgentCheckBox->isChecked()); +- } +-} +- +-void EditEntryWidget::toKeeAgentSettings(KeeAgentSettings& settings) const +-{ +- settings.setAddAtDatabaseOpen(m_sshAgentUi->addKeyToAgentCheckBox->isChecked()); +- settings.setRemoveAtDatabaseClose(m_sshAgentUi->removeKeyFromAgentCheckBox->isChecked()); +- settings.setUseConfirmConstraintWhenAdding(m_sshAgentUi->requireUserConfirmationCheckBox->isChecked()); +- settings.setUseLifetimeConstraintWhenAdding(m_sshAgentUi->lifetimeCheckBox->isChecked()); +- settings.setLifetimeConstraintDuration(m_sshAgentUi->lifetimeSpinBox->value()); +- +- if (m_sshAgentUi->attachmentRadioButton->isChecked()) { +- settings.setSelectedType("attachment"); +- } else { +- settings.setSelectedType("file"); +- } +- settings.setAttachmentName(m_sshAgentUi->attachmentComboBox->currentText()); +- settings.setFileName(m_sshAgentUi->externalFileEdit->text()); +- +- // we don't use this as we don't run an agent but for compatibility we set it if necessary +- settings.setAllowUseOfSshKey(settings.addAtDatabaseOpen() || settings.removeAtDatabaseClose()); +- +- // we don't use this either but we don't want it to dirty flag the config +- settings.setSaveAttachmentToTempFile(m_sshAgentSettings.saveAttachmentToTempFile()); +-} +- +-void EditEntryWidget::browsePrivateKey() +-{ +- QString fileName = QFileDialog::getOpenFileName(this, tr("Select private key"), ""); +- if (!fileName.isEmpty()) { +- m_sshAgentUi->externalFileEdit->setText(fileName); +- m_sshAgentUi->externalFileRadioButton->setChecked(true); +- updateSSHAgentKeyInfo(); +- } +-} +- +-bool EditEntryWidget::getOpenSSHKey(OpenSSHKey& key, bool decrypt) +-{ +- KeeAgentSettings settings; +- toKeeAgentSettings(settings); +- +- if (!m_entry || !settings.keyConfigured()) { +- return false; +- } +- +- if (!settings.toOpenSSHKey(m_mainUi->usernameComboBox->lineEdit()->text(), +- m_mainUi->passwordEdit->text(), +- m_advancedUi->attachmentsWidget->entryAttachments(), +- key, +- decrypt)) { +- showMessage(settings.errorString(), MessageWidget::Error); +- return false; +- } +- +- return true; +-} +- +-void EditEntryWidget::addKeyToAgent() +-{ +- OpenSSHKey key; +- +- if (!getOpenSSHKey(key, true)) { +- return; +- } +- +- m_sshAgentUi->commentTextLabel->setText(key.comment()); +- m_sshAgentUi->publicKeyEdit->document()->setPlainText(key.publicKey()); +- +- KeeAgentSettings settings; +- toKeeAgentSettings(settings); +- +- if (!sshAgent()->addIdentity(key, settings, m_db->uuid())) { +- showMessage(sshAgent()->errorString(), MessageWidget::Error); +- return; +- } +-} +- +-void EditEntryWidget::removeKeyFromAgent() +-{ +- OpenSSHKey key; +- +- if (!getOpenSSHKey(key)) { +- return; +- } +- +- if (!sshAgent()->removeIdentity(key)) { +- showMessage(sshAgent()->errorString(), MessageWidget::Error); +- return; +- } +-} +- +-void EditEntryWidget::decryptPrivateKey() +-{ +- OpenSSHKey key; +- +- if (!getOpenSSHKey(key, true)) { +- return; +- } +- +- if (!key.comment().isEmpty()) { +- m_sshAgentUi->commentTextLabel->setText(key.comment()); +- } else { +- m_sshAgentUi->commentTextLabel->setText(tr("n/a")); +- } +- +- m_sshAgentUi->fingerprintTextLabel->setText(key.fingerprint(QCryptographicHash::Md5) + "\n" +- + key.fingerprint(QCryptographicHash::Sha256)); +- m_sshAgentUi->publicKeyEdit->document()->setPlainText(key.publicKey()); +- m_sshAgentUi->copyToClipboardButton->setEnabled(true); +-} +- +-void EditEntryWidget::copyPublicKey() +-{ +- clipboard()->setText(m_sshAgentUi->publicKeyEdit->document()->toPlainText()); +-} +-#endif +- +-void EditEntryWidget::useExpiryPreset(QAction* action) +-{ +- m_mainUi->expireCheck->setChecked(true); +- TimeDelta delta = action->data().value(); +- QDateTime now = Clock::currentDateTime(); +- QDateTime expiryDateTime = now + delta; +- m_mainUi->expireDatePicker->setDateTime(expiryDateTime); +-} +- +-void EditEntryWidget::toggleHideNotes(bool visible) +-{ +- m_mainUi->notesEdit->setVisible(visible); +- m_mainUi->notesHint->setVisible(!visible); +-} +- +-Entry* EditEntryWidget::currentEntry() const +-{ +- return m_entry; +-} +- +-void EditEntryWidget::loadEntry(Entry* entry, +- bool create, +- bool history, +- const QString& parentName, +- QSharedPointer database) +-{ +- m_entry = entry; +- m_db = std::move(database); +- m_create = create; +- m_history = history; +- +- connect(m_entry, &Entry::entryModified, this, [this] { m_entryModifiedTimer.start(); }); +- +- if (history) { +- setHeadline(QString("%1 \u2022 %2").arg(parentName, tr("Entry history"))); +- } else { +- if (create) { +- setHeadline(QString("%1 \u2022 %2").arg(parentName, tr("Add entry"))); +- } else { +- setHeadline(QString("%1 \u2022 %2 \u2022 %3").arg(parentName, entry->title(), tr("Edit entry"))); +- } +- } +- +- setForms(entry); +- setReadOnly(m_history); +- +- setCurrentPage(0); +- setPageHidden(m_historyWidget, m_history || m_entry->historyItems().count() < 1); +-#ifdef WITH_XC_SSHAGENT +- setPageHidden(m_sshAgentWidget, !sshAgent()->isEnabled()); +-#endif +- +- // Force the user to Save/Discard new entries +- showApplyButton(!m_create); +- +- setModified(false); +-} +- +-void EditEntryWidget::setForms(Entry* entry, bool restore) +-{ +- m_customData->copyDataFrom(entry->customData()); +- +- m_mainUi->titleEdit->setReadOnly(m_history); +- m_mainUi->usernameComboBox->lineEdit()->setReadOnly(m_history); +- m_mainUi->urlEdit->setReadOnly(m_history); +- m_mainUi->passwordEdit->setReadOnly(m_history); +- m_mainUi->expireCheck->setEnabled(!m_history); +- m_mainUi->expireDatePicker->setReadOnly(m_history); +- m_mainUi->notesEnabled->setChecked(!config()->get(Config::Security_HideNotes).toBool()); +- m_mainUi->notesEdit->setReadOnly(m_history); +- m_mainUi->notesEdit->setVisible(!config()->get(Config::Security_HideNotes).toBool()); +- m_mainUi->notesHint->setVisible(config()->get(Config::Security_HideNotes).toBool()); +- if (config()->get(Config::GUI_MonospaceNotes).toBool()) { +- m_mainUi->notesEdit->setFont(Font::fixedFont()); +- } else { +- m_mainUi->notesEdit->setFont(Font::defaultFont()); +- } +- +- m_advancedUi->attachmentsWidget->setReadOnly(m_history); +- m_advancedUi->addAttributeButton->setEnabled(!m_history); +- m_advancedUi->editAttributeButton->setEnabled(false); +- m_advancedUi->removeAttributeButton->setEnabled(false); +- m_advancedUi->attributesEdit->setReadOnly(m_history); +- QAbstractItemView::EditTriggers editTriggers; +- if (m_history) { +- editTriggers = QAbstractItemView::NoEditTriggers; +- } else { +- editTriggers = QAbstractItemView::DoubleClicked; +- } +- m_advancedUi->attributesView->setEditTriggers(editTriggers); +- m_advancedUi->knownBadCheckBox->setChecked(entry->customData()->contains(PasswordHealth::OPTION_KNOWN_BAD) +- && entry->customData()->value(PasswordHealth::OPTION_KNOWN_BAD) +- == TRUE_STR); +- setupColorButton(true, entry->foregroundColor()); +- setupColorButton(false, entry->backgroundColor()); +- m_iconsWidget->setEnabled(!m_history); +- m_autoTypeUi->sequenceEdit->setReadOnly(m_history); +- m_autoTypeUi->windowTitleCombo->lineEdit()->setReadOnly(m_history); +- m_autoTypeUi->windowSequenceEdit->setReadOnly(m_history); +- m_historyWidget->setEnabled(!m_history); +- +- m_mainUi->titleEdit->setText(entry->title()); +- m_mainUi->usernameComboBox->lineEdit()->setText(entry->username()); +- m_mainUi->urlEdit->setText(entry->url()); +- m_mainUi->passwordEdit->setText(entry->password()); +- m_mainUi->passwordEdit->setShowPassword(!config()->get(Config::Security_PasswordsHidden).toBool()); +- if (!m_history) { +- m_mainUi->passwordEdit->enablePasswordGenerator(); +- } +- m_mainUi->expireCheck->setChecked(entry->timeInfo().expires()); +- m_mainUi->expireDatePicker->setDateTime(entry->timeInfo().expiryTime().toLocalTime()); +- m_mainUi->expirePresets->setEnabled(!m_history); +- +- QList commonUsernames = m_db->commonUsernames(); +- m_usernameCompleterModel->setStringList(commonUsernames); +- QString usernameToRestore = m_mainUi->usernameComboBox->lineEdit()->text(); +- m_mainUi->usernameComboBox->clear(); +- m_mainUi->usernameComboBox->addItems(commonUsernames); +- m_mainUi->usernameComboBox->lineEdit()->setText(usernameToRestore); +- +- m_mainUi->notesEdit->setPlainText(entry->notes()); +- +- m_advancedUi->attachmentsWidget->setEntryAttachments(entry->attachments()); +- m_entryAttributes->copyCustomKeysFrom(entry->attributes()); +- +- if (m_attributesModel->rowCount() != 0) { +- m_advancedUi->attributesView->setCurrentIndex(m_attributesModel->index(0, 0)); +- } else { +- m_advancedUi->attributesEdit->setPlainText(""); +- m_advancedUi->attributesEdit->setEnabled(false); +- } +- +- QList sizes = m_advancedUi->attributesSplitter->sizes(); +- sizes.replace(0, m_advancedUi->attributesSplitter->width() * 0.3); +- sizes.replace(1, m_advancedUi->attributesSplitter->width() * 0.7); +- m_advancedUi->attributesSplitter->setSizes(sizes); +- +- IconStruct iconStruct; +- iconStruct.uuid = entry->iconUuid(); +- iconStruct.number = entry->iconNumber(); +- m_iconsWidget->load(entry->uuid(), m_db, iconStruct, entry->webUrl()); +- +- m_autoTypeUi->enableButton->setChecked(entry->autoTypeEnabled()); +- if (entry->defaultAutoTypeSequence().isEmpty()) { +- m_autoTypeUi->inheritSequenceButton->setChecked(true); +- } else { +- m_autoTypeUi->customSequenceButton->setChecked(true); +- } +- m_autoTypeUi->sequenceEdit->setText(entry->effectiveAutoTypeSequence()); +- m_autoTypeUi->windowTitleCombo->lineEdit()->clear(); +- m_autoTypeUi->customWindowSequenceButton->setChecked(false); +- m_autoTypeUi->windowSequenceEdit->setText(""); +- m_autoTypeAssoc->copyDataFrom(entry->autoTypeAssociations()); +- m_autoTypeAssocModel->setEntry(entry); +- if (m_autoTypeAssoc->size() != 0) { +- m_autoTypeUi->assocView->setCurrentIndex(m_autoTypeAssocModel->index(0, 0)); +- } +- if (!m_history) { +- m_autoTypeUi->windowTitleCombo->refreshWindowList(); +- } +- updateAutoTypeEnabled(); +- +-#ifdef WITH_XC_SSHAGENT +- if (sshAgent()->isEnabled()) { +- updateSSHAgent(); +- } +-#endif +- +-#ifdef WITH_XC_BROWSER +- if (config()->get(Config::Browser_Enabled).toBool()) { +- if (!hasPage(m_browserWidget)) { +- setupBrowser(); +- } +- +- if (m_customData->contains(BrowserService::OPTION_SKIP_AUTO_SUBMIT)) { +- // clang-format off +- m_browserUi->skipAutoSubmitCheckbox->setChecked(m_customData->value(BrowserService::OPTION_SKIP_AUTO_SUBMIT) == TRUE_STR); +- // clang-format on +- } else { +- m_browserUi->skipAutoSubmitCheckbox->setChecked(false); +- } +- +- if (m_customData->contains(BrowserService::OPTION_HIDE_ENTRY)) { +- m_browserUi->hideEntryCheckbox->setChecked(m_customData->value(BrowserService::OPTION_HIDE_ENTRY) +- == TRUE_STR); +- } else { +- m_browserUi->hideEntryCheckbox->setChecked(false); +- } +- +- if (m_customData->contains(BrowserService::OPTION_ONLY_HTTP_AUTH)) { +- m_browserUi->onlyHttpAuthCheckbox->setChecked(m_customData->value(BrowserService::OPTION_ONLY_HTTP_AUTH) +- == TRUE_STR); +- } else { +- m_browserUi->onlyHttpAuthCheckbox->setChecked(false); +- } +- +- m_browserUi->addURLButton->setEnabled(!m_history); +- m_browserUi->removeURLButton->setEnabled(false); +- m_browserUi->editURLButton->setEnabled(false); +- m_browserUi->additionalURLsView->setEditTriggers(editTriggers); +- +- if (m_additionalURLsDataModel->rowCount() != 0) { +- m_browserUi->additionalURLsView->setCurrentIndex(m_additionalURLsDataModel->index(0, 0)); +- } +- } +- +- setPageHidden(m_browserWidget, !config()->get(Config::Browser_Enabled).toBool()); +-#endif +- +- m_editWidgetProperties->setFields(entry->timeInfo(), entry->uuid()); +- +- if (!m_history && !restore) { +- m_historyModel->setEntries(entry->historyItems()); +- m_historyUi->historyView->sortByColumn(0, Qt::DescendingOrder); +- } +- if (m_historyModel->rowCount() > 0) { +- m_historyUi->deleteAllButton->setEnabled(true); +- } else { +- m_historyUi->deleteAllButton->setEnabled(false); +- } +- +- updateHistoryButtons(m_historyUi->historyView->currentIndex(), QModelIndex()); +- +- m_mainUi->titleEdit->setFocus(); +-} +- +-/** +- * Commit the form values to in-memory database representation +- * +- * @return true is commit successful, otherwise false +- */ +-bool EditEntryWidget::commitEntry() +-{ +- if (m_history) { +- clear(); +- hideMessage(); +- emit editFinished(false); +- return true; +- } +- +- // HACK: Check that entry pointer is still valid, see https://github.com/keepassxreboot/keepassxc/issues/5722 +- if (!m_entry) { +- QMessageBox::information(this, +- tr("Invalid Entry"), +- tr("An external merge operation has invalidated this entry.\n" +- "Unfortunately, any changes made have been lost.")); +- return true; +- } +- +- // Check Auto-Type validity early +- if (!AutoType::verifyAutoTypeSyntax(m_autoTypeUi->sequenceEdit->text())) { +- return false; +- } +- +- if (m_advancedUi->attributesView->currentIndex().isValid() && m_advancedUi->attributesEdit->isEnabled()) { +- QString key = m_attributesModel->keyByIndex(m_advancedUi->attributesView->currentIndex()); +- m_entryAttributes->set(key, m_advancedUi->attributesEdit->toPlainText(), m_entryAttributes->isProtected(key)); +- } +- +- m_currentAttribute = QPersistentModelIndex(); +- +- // must stand before beginUpdate() +- // we don't want to create a new history item, if only the history has changed +- m_entry->removeHistoryItems(m_historyModel->deletedEntries()); +- m_historyModel->clearDeletedEntries(); +- +- m_autoTypeAssoc->removeEmpty(); +- +-#ifdef WITH_XC_SSHAGENT +- toKeeAgentSettings(m_sshAgentSettings); +-#endif +- +-#ifdef WITH_XC_BROWSER +- if (config()->get(Config::Browser_Enabled).toBool()) { +- updateBrowser(); +- } +-#endif +- +- if (!m_create) { +- m_entry->beginUpdate(); +- } +- +- updateEntryData(m_entry); +- +- if (!m_create) { +- m_entry->endUpdate(); +- } +- +- m_historyModel->setEntries(m_entry->historyItems()); +- m_advancedUi->attachmentsWidget->setEntryAttachments(m_entry->attachments()); +- +- showMessage(tr("Entry updated successfully."), MessageWidget::Positive); +- setModified(false); +- return true; +-} +- +-void EditEntryWidget::acceptEntry() +-{ +- if (commitEntry()) { +- clear(); +- emit editFinished(true); +- } +-} +- +-void EditEntryWidget::updateEntryData(Entry* entry) const +-{ +- QRegularExpression newLineRegex("(?:\r?\n|\r)"); +- +- entry->attributes()->copyCustomKeysFrom(m_entryAttributes); +- entry->attachments()->copyDataFrom(m_advancedUi->attachmentsWidget->entryAttachments()); +- entry->customData()->copyDataFrom(m_customData.data()); +- entry->setTitle(m_mainUi->titleEdit->text().replace(newLineRegex, " ")); +- entry->setUsername(m_mainUi->usernameComboBox->lineEdit()->text().replace(newLineRegex, " ")); +- entry->setUrl(m_mainUi->urlEdit->text().replace(newLineRegex, " ")); +- entry->setPassword(m_mainUi->passwordEdit->text()); +- entry->setExpires(m_mainUi->expireCheck->isChecked()); +- entry->setExpiryTime(m_mainUi->expireDatePicker->dateTime().toUTC()); +- +- entry->setNotes(m_mainUi->notesEdit->toPlainText()); +- +- const auto wasKnownBad = entry->customData()->contains(PasswordHealth::OPTION_KNOWN_BAD) +- && entry->customData()->value(PasswordHealth::OPTION_KNOWN_BAD) == TRUE_STR; +- const auto isKnownBad = m_advancedUi->knownBadCheckBox->isChecked(); +- if (isKnownBad != wasKnownBad) { +- entry->customData()->set(PasswordHealth::OPTION_KNOWN_BAD, isKnownBad ? TRUE_STR : FALSE_STR); +- } +- +- if (m_advancedUi->fgColorCheckBox->isChecked() && m_advancedUi->fgColorButton->property("color").isValid()) { +- entry->setForegroundColor(m_advancedUi->fgColorButton->property("color").toString()); +- } else { +- entry->setForegroundColor(QString()); +- } +- +- if (m_advancedUi->bgColorCheckBox->isChecked() && m_advancedUi->bgColorButton->property("color").isValid()) { +- entry->setBackgroundColor(m_advancedUi->bgColorButton->property("color").toString()); +- } else { +- entry->setBackgroundColor(QString()); +- } +- +- IconStruct iconStruct = m_iconsWidget->state(); +- +- if (iconStruct.number < 0) { +- entry->setIcon(Entry::DefaultIconNumber); +- } else if (iconStruct.uuid.isNull()) { +- entry->setIcon(iconStruct.number); +- } else { +- entry->setIcon(iconStruct.uuid); +- } +- +- entry->setAutoTypeEnabled(m_autoTypeUi->enableButton->isChecked()); +- if (m_autoTypeUi->inheritSequenceButton->isChecked()) { +- entry->setDefaultAutoTypeSequence(QString()); +- } else { +- entry->setDefaultAutoTypeSequence(m_autoTypeUi->sequenceEdit->text()); +- } +- +- entry->autoTypeAssociations()->copyDataFrom(m_autoTypeAssoc); +- +-#ifdef WITH_XC_SSHAGENT +- if (sshAgent()->isEnabled()) { +- m_sshAgentSettings.toEntry(entry); +- } +-#endif +-} +- +-void EditEntryWidget::cancel() +-{ +- if (m_history) { +- clear(); +- hideMessage(); +- emit editFinished(false); +- return; +- } +- +- if (!m_entry->iconUuid().isNull() && !m_db->metadata()->hasCustomIcon(m_entry->iconUuid())) { +- m_entry->setIcon(Entry::DefaultIconNumber); +- } +- +- bool accepted = false; +- if (isModified()) { +- auto result = MessageBox::question(this, +- tr("Unsaved Changes"), +- tr("Would you like to save changes to this entry?"), +- MessageBox::Cancel | MessageBox::Save | MessageBox::Discard, +- MessageBox::Cancel); +- if (result == MessageBox::Cancel) { +- return; +- } else if (result == MessageBox::Save) { +- accepted = true; +- if (!commitEntry()) { +- return; +- } +- } +- } +- +- clear(); +- emit editFinished(accepted); +-} +- +-void EditEntryWidget::clear() +-{ +- if (m_entry) { +- m_entry->disconnect(this); +- } +- +- m_entry = nullptr; +- m_db.reset(); +- +- m_mainUi->titleEdit->setText(""); +- m_mainUi->passwordEdit->setText(""); +- m_mainUi->urlEdit->setText(""); +- m_mainUi->notesEdit->clear(); +- +- m_entryAttributes->clear(); +- m_advancedUi->attachmentsWidget->clearAttachments(); +- m_autoTypeAssoc->clear(); +- m_historyModel->clear(); +- m_iconsWidget->reset(); +- hideMessage(); +-} +- +-#ifdef WITH_XC_NETWORKING +-void EditEntryWidget::updateFaviconButtonEnable(const QString& url) +-{ +- m_mainUi->fetchFaviconButton->setDisabled(url.isEmpty()); +-} +-#endif +- +-void EditEntryWidget::insertAttribute() +-{ +- Q_ASSERT(!m_history); +- +- QString name = tr("New attribute"); +- int i = 1; +- +- while (m_entryAttributes->keys().contains(name)) { +- name = tr("New attribute %1").arg(i); +- i++; +- } +- +- m_entryAttributes->set(name, ""); +- QModelIndex index = m_attributesModel->indexByKey(name); +- +- m_advancedUi->attributesView->setCurrentIndex(index); +- m_advancedUi->attributesView->edit(index); +- +- setModified(true); +-} +- +-void EditEntryWidget::editCurrentAttribute() +-{ +- Q_ASSERT(!m_history); +- +- QModelIndex index = m_advancedUi->attributesView->currentIndex(); +- +- if (index.isValid()) { +- m_advancedUi->attributesView->edit(index); +- setModified(true); +- } +-} +- +-void EditEntryWidget::removeCurrentAttribute() +-{ +- Q_ASSERT(!m_history); +- +- QModelIndex index = m_advancedUi->attributesView->currentIndex(); +- +- if (index.isValid()) { +- +- auto result = MessageBox::question(this, +- tr("Confirm Removal"), +- tr("Are you sure you want to remove this attribute?"), +- MessageBox::Remove | MessageBox::Cancel, +- MessageBox::Cancel); +- +- if (result == MessageBox::Remove) { +- m_entryAttributes->remove(m_attributesModel->keyByIndex(index)); +- setModified(true); +- } +- } +-} +- +-void EditEntryWidget::updateCurrentAttribute() +-{ +- QModelIndex newIndex = m_advancedUi->attributesView->currentIndex(); +- QString newKey = m_attributesModel->keyByIndex(newIndex); +- +- if (!m_history && m_currentAttribute != newIndex) { +- // Save changes to the currently selected attribute if editing is enabled +- if (m_currentAttribute.isValid() && m_advancedUi->attributesEdit->isEnabled()) { +- QString currKey = m_attributesModel->keyByIndex(m_currentAttribute); +- m_entryAttributes->set( +- currKey, m_advancedUi->attributesEdit->toPlainText(), m_entryAttributes->isProtected(currKey)); +- } +- } +- +- displayAttribute(newIndex, m_entryAttributes->isProtected(newKey)); +- +- m_currentAttribute = newIndex; +-} +- +-void EditEntryWidget::displayAttribute(QModelIndex index, bool showProtected) +-{ +- // Block signals to prevent modified being set +- m_advancedUi->protectAttributeButton->blockSignals(true); +- m_advancedUi->attributesEdit->blockSignals(true); +- m_advancedUi->revealAttributeButton->setText(tr("Reveal")); +- +- if (index.isValid()) { +- QString key = m_attributesModel->keyByIndex(index); +- if (showProtected) { +- m_advancedUi->attributesEdit->setPlainText(tr("[PROTECTED] Press Reveal to view or edit")); +- m_advancedUi->attributesEdit->setEnabled(false); +- m_advancedUi->revealAttributeButton->setEnabled(true); +- m_advancedUi->protectAttributeButton->setChecked(true); +- } else { +- m_advancedUi->attributesEdit->setPlainText(m_entryAttributes->value(key)); +- m_advancedUi->attributesEdit->setEnabled(true); +- m_advancedUi->revealAttributeButton->setEnabled(false); +- m_advancedUi->protectAttributeButton->setChecked(false); +- } +- +- // Don't allow editing in history view +- m_advancedUi->protectAttributeButton->setEnabled(!m_history); +- m_advancedUi->editAttributeButton->setEnabled(!m_history); +- m_advancedUi->removeAttributeButton->setEnabled(!m_history); +- } else { +- m_advancedUi->attributesEdit->setPlainText(""); +- m_advancedUi->attributesEdit->setEnabled(false); +- m_advancedUi->revealAttributeButton->setEnabled(false); +- m_advancedUi->protectAttributeButton->setChecked(false); +- m_advancedUi->protectAttributeButton->setEnabled(false); +- m_advancedUi->editAttributeButton->setEnabled(false); +- m_advancedUi->removeAttributeButton->setEnabled(false); +- } +- +- m_advancedUi->protectAttributeButton->blockSignals(false); +- m_advancedUi->attributesEdit->blockSignals(false); +-} +- +-void EditEntryWidget::protectCurrentAttribute(bool state) +-{ +- QModelIndex index = m_advancedUi->attributesView->currentIndex(); +- if (!m_history && index.isValid()) { +- QString key = m_attributesModel->keyByIndex(index); +- if (state) { +- // Save the current text and protect the attribute +- m_entryAttributes->set(key, m_advancedUi->attributesEdit->toPlainText(), true); +- } else { +- // Unprotect the current attribute value (don't save text as it is obscured) +- m_entryAttributes->set(key, m_entryAttributes->value(key), false); +- } +- +- // Display the attribute +- displayAttribute(index, state); +- } +-} +- +-void EditEntryWidget::toggleCurrentAttributeVisibility() +-{ +- if (!m_advancedUi->attributesEdit->isEnabled()) { +- QModelIndex index = m_advancedUi->attributesView->currentIndex(); +- if (index.isValid()) { +- bool oldBlockSignals = m_advancedUi->attributesEdit->blockSignals(true); +- QString key = m_attributesModel->keyByIndex(index); +- m_advancedUi->attributesEdit->setPlainText(m_entryAttributes->value(key)); +- m_advancedUi->attributesEdit->setEnabled(true); +- m_advancedUi->attributesEdit->blockSignals(oldBlockSignals); +- } +- m_advancedUi->revealAttributeButton->setText(tr("Hide")); +- } else { +- protectCurrentAttribute(true); +- m_advancedUi->revealAttributeButton->setText(tr("Reveal")); +- } +-} +- +-void EditEntryWidget::updateAutoTypeEnabled() +-{ +- bool autoTypeEnabled = m_autoTypeUi->enableButton->isChecked(); +- bool validIndex = m_autoTypeUi->assocView->currentIndex().isValid() && m_autoTypeAssoc->size() != 0; +- +- m_autoTypeUi->enableButton->setEnabled(!m_history); +- m_autoTypeUi->inheritSequenceButton->setEnabled(!m_history && autoTypeEnabled); +- m_autoTypeUi->customSequenceButton->setEnabled(!m_history && autoTypeEnabled); +- m_autoTypeUi->sequenceEdit->setEnabled(autoTypeEnabled && m_autoTypeUi->customSequenceButton->isChecked()); +- m_autoTypeUi->openHelpButton->setEnabled(autoTypeEnabled && m_autoTypeUi->customSequenceButton->isChecked()); +- +- m_autoTypeUi->assocView->setEnabled(autoTypeEnabled); +- m_autoTypeUi->assocAddButton->setEnabled(!m_history); +- m_autoTypeUi->assocRemoveButton->setEnabled(!m_history && validIndex); +- +- m_autoTypeUi->windowTitleLabel->setEnabled(autoTypeEnabled && validIndex); +- m_autoTypeUi->windowTitleCombo->setEnabled(autoTypeEnabled && validIndex); +- m_autoTypeUi->customWindowSequenceButton->setEnabled(!m_history && autoTypeEnabled && validIndex); +- m_autoTypeUi->windowSequenceEdit->setEnabled(autoTypeEnabled && validIndex +- && m_autoTypeUi->customWindowSequenceButton->isChecked()); +-} +- +-void EditEntryWidget::insertAutoTypeAssoc() +-{ +- AutoTypeAssociations::Association assoc; +- m_autoTypeAssoc->add(assoc); +- QModelIndex newIndex = m_autoTypeAssocModel->index(m_autoTypeAssoc->size() - 1, 0); +- m_autoTypeUi->assocView->setCurrentIndex(newIndex); +- loadCurrentAssoc(newIndex); +- m_autoTypeUi->windowTitleCombo->setFocus(); +- setModified(true); +-} +- +-void EditEntryWidget::removeAutoTypeAssoc() +-{ +- QModelIndex currentIndex = m_autoTypeUi->assocView->currentIndex(); +- +- if (currentIndex.isValid()) { +- m_autoTypeAssoc->remove(currentIndex.row()); +- setModified(true); +- } +-} +- +-void EditEntryWidget::loadCurrentAssoc(const QModelIndex& current) +-{ +- bool modified = isModified(); +- if (current.isValid() && current.row() < m_autoTypeAssoc->size()) { +- AutoTypeAssociations::Association assoc = m_autoTypeAssoc->get(current.row()); +- m_autoTypeUi->windowTitleCombo->setEditText(assoc.window); +- if (assoc.sequence.isEmpty()) { +- m_autoTypeUi->customWindowSequenceButton->setChecked(false); +- m_autoTypeUi->windowSequenceEdit->setText(m_entry->effectiveAutoTypeSequence()); +- } else { +- m_autoTypeUi->customWindowSequenceButton->setChecked(true); +- m_autoTypeUi->windowSequenceEdit->setText(assoc.sequence); +- } +- +- updateAutoTypeEnabled(); +- } else { +- clearCurrentAssoc(); +- } +- setModified(modified); +-} +- +-void EditEntryWidget::clearCurrentAssoc() +-{ +- m_autoTypeUi->windowTitleCombo->setEditText(""); +- +- m_autoTypeUi->customWindowSequenceButton->setChecked(false); +- m_autoTypeUi->windowSequenceEdit->setText(""); +- +- updateAutoTypeEnabled(); +-} +- +-void EditEntryWidget::applyCurrentAssoc() +-{ +- QModelIndex index = m_autoTypeUi->assocView->currentIndex(); +- +- if (!index.isValid() || m_autoTypeAssoc->size() == 0 || m_history) { +- return; +- } +- +- AutoTypeAssociations::Association assoc; +- assoc.window = m_autoTypeUi->windowTitleCombo->currentText(); +- if (m_autoTypeUi->customWindowSequenceButton->isChecked()) { +- assoc.sequence = m_autoTypeUi->windowSequenceEdit->text(); +- } +- +- m_autoTypeAssoc->update(index.row(), assoc); +-} +- +-void EditEntryWidget::showHistoryEntry() +-{ +- QModelIndex index = m_sortModel->mapToSource(m_historyUi->historyView->currentIndex()); +- if (index.isValid()) { +- emitHistoryEntryActivated(index); +- } +-} +- +-void EditEntryWidget::restoreHistoryEntry() +-{ +- QModelIndex index = m_sortModel->mapToSource(m_historyUi->historyView->currentIndex()); +- if (index.isValid()) { +- setForms(m_historyModel->entryFromIndex(index), true); +- setModified(true); +- } +-} +- +-void EditEntryWidget::deleteHistoryEntry() +-{ +- QModelIndex index = m_sortModel->mapToSource(m_historyUi->historyView->currentIndex()); +- if (index.isValid()) { +- m_historyModel->deleteIndex(index); +- if (m_historyModel->rowCount() > 0) { +- m_historyUi->deleteAllButton->setEnabled(true); +- } else { +- m_historyUi->deleteAllButton->setEnabled(false); +- } +- setModified(true); +- } +-} +- +-void EditEntryWidget::deleteAllHistoryEntries() +-{ +- m_historyModel->deleteAll(); +- m_historyUi->deleteAllButton->setEnabled(m_historyModel->rowCount() > 0); +- setModified(true); +-} +- +-QMenu* EditEntryWidget::createPresetsMenu() +-{ +- auto* expirePresetsMenu = new QMenu(this); +- expirePresetsMenu->addAction(tr("Tomorrow"))->setData(QVariant::fromValue(TimeDelta::fromDays(1))); +- expirePresetsMenu->addSeparator(); +- expirePresetsMenu->addAction(tr("%n week(s)", nullptr, 1))->setData(QVariant::fromValue(TimeDelta::fromDays(7))); +- expirePresetsMenu->addAction(tr("%n week(s)", nullptr, 2))->setData(QVariant::fromValue(TimeDelta::fromDays(14))); +- expirePresetsMenu->addAction(tr("%n week(s)", nullptr, 3))->setData(QVariant::fromValue(TimeDelta::fromDays(21))); +- expirePresetsMenu->addSeparator(); +- expirePresetsMenu->addAction(tr("%n month(s)", nullptr, 1))->setData(QVariant::fromValue(TimeDelta::fromMonths(1))); +- expirePresetsMenu->addAction(tr("%n month(s)", nullptr, 3))->setData(QVariant::fromValue(TimeDelta::fromMonths(3))); +- expirePresetsMenu->addAction(tr("%n month(s)", nullptr, 6))->setData(QVariant::fromValue(TimeDelta::fromMonths(6))); +- expirePresetsMenu->addSeparator(); +- expirePresetsMenu->addAction(tr("%n year(s)", nullptr, 1))->setData(QVariant::fromValue(TimeDelta::fromYears(1))); +- expirePresetsMenu->addAction(tr("%n year(s)", nullptr, 2))->setData(QVariant::fromValue(TimeDelta::fromYears(2))); +- expirePresetsMenu->addAction(tr("%n year(s)", nullptr, 3))->setData(QVariant::fromValue(TimeDelta::fromYears(3))); +- return expirePresetsMenu; +-} +- +-void EditEntryWidget::setupColorButton(bool foreground, const QColor& color) +-{ +- QWidget* button = m_advancedUi->fgColorButton; +- QCheckBox* checkBox = m_advancedUi->fgColorCheckBox; +- if (!foreground) { +- button = m_advancedUi->bgColorButton; +- checkBox = m_advancedUi->bgColorCheckBox; +- } +- +- if (color.isValid()) { +- button->setStyleSheet(QString("background-color:%1").arg(color.name())); +- button->setProperty("color", color.name()); +- checkBox->setChecked(true); +- } else { +- button->setStyleSheet(""); +- button->setProperty("color", QVariant()); +- checkBox->setChecked(false); +- } +-} +- +-void EditEntryWidget::pickColor() +-{ +- bool isForeground = (sender() == m_advancedUi->fgColorButton); +- QColor oldColor = QColor(m_advancedUi->fgColorButton->property("color").toString()); +- if (!isForeground) { +- oldColor = QColor(m_advancedUi->bgColorButton->property("color").toString()); +- } +- +- QColor newColor = QColorDialog::getColor(oldColor); +- if (newColor.isValid()) { +- setupColorButton(isForeground, newColor); +- setModified(true); +- } +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EditEntryWidget.h keepassxc-2.6.4-patched/src/gui/entry/EditEntryWidget.h +--- keepassxc-2.6.4-orig/src/gui/entry/EditEntryWidget.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/entry/EditEntryWidget.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,208 +0,0 @@ +-/* +- * Copyright (C) 2010 Felix Geyer +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_EDITENTRYWIDGET_H +-#define KEEPASSX_EDITENTRYWIDGET_H +- +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-#include "config-keepassx.h" +-#include "gui/EditWidget.h" +- +-class AutoTypeAssociations; +-class AutoTypeAssociationsModel; +-class CustomData; +-class Database; +-class EditWidgetIcons; +-class EditWidgetProperties; +-class Entry; +-class EntryAttributes; +-class EntryAttributesModel; +-class EntryHistoryModel; +-class QButtonGroup; +-class QMenu; +-class QSortFilterProxyModel; +-class QStringListModel; +-#ifdef WITH_XC_SSHAGENT +-#include "sshagent/KeeAgentSettings.h" +-class OpenSSHKey; +-#endif +-#ifdef WITH_XC_BROWSER +-class EntryURLModel; +-#endif +- +-namespace Ui +-{ +- class EditEntryWidgetAdvanced; +- class EditEntryWidgetAutoType; +- class EditEntryWidgetBrowser; +- class EditEntryWidgetSSHAgent; +- class EditEntryWidgetMain; +- class EditEntryWidgetHistory; +- class EditWidget; +-} // namespace Ui +- +-class EditEntryWidget : public EditWidget +-{ +- Q_OBJECT +- +-public: +- explicit EditEntryWidget(QWidget* parent = nullptr); +- ~EditEntryWidget() override; +- +- void +- loadEntry(Entry* entry, bool create, bool history, const QString& parentName, QSharedPointer database); +- +- Entry* currentEntry() const; +- void clear(); +- +-signals: +- void editFinished(bool accepted); +- void historyEntryActivated(Entry* entry); +- +-private slots: +- void acceptEntry(); +- bool commitEntry(); +- void cancel(); +-#ifdef WITH_XC_NETWORKING +- void updateFaviconButtonEnable(const QString& url); +-#endif +- void insertAttribute(); +- void editCurrentAttribute(); +- void removeCurrentAttribute(); +- void updateCurrentAttribute(); +- void protectCurrentAttribute(bool state); +- void toggleCurrentAttributeVisibility(); +- void updateAutoTypeEnabled(); +- void openAutotypeHelp(); +- void insertAutoTypeAssoc(); +- void removeAutoTypeAssoc(); +- void loadCurrentAssoc(const QModelIndex& current); +- void clearCurrentAssoc(); +- void applyCurrentAssoc(); +- void showHistoryEntry(); +- void restoreHistoryEntry(); +- void deleteHistoryEntry(); +- void deleteAllHistoryEntries(); +- void emitHistoryEntryActivated(const QModelIndex& index); +- void histEntryActivated(const QModelIndex& index); +- void updateHistoryButtons(const QModelIndex& current, const QModelIndex& previous); +- void useExpiryPreset(QAction* action); +- void toggleHideNotes(bool visible); +- void pickColor(); +-#ifdef WITH_XC_SSHAGENT +- void toKeeAgentSettings(KeeAgentSettings& settings) const; +- void setSSHAgentSettings(); +- void updateSSHAgent(); +- void updateSSHAgentAttachment(); +- void updateSSHAgentAttachments(); +- void updateSSHAgentKeyInfo(); +- void browsePrivateKey(); +- void addKeyToAgent(); +- void removeKeyFromAgent(); +- void decryptPrivateKey(); +- void copyPublicKey(); +-#endif +-#ifdef WITH_XC_BROWSER +- void updateBrowserModified(); +- void updateBrowser(); +- void insertURL(); +- void removeCurrentURL(); +- void editCurrentURL(); +- void updateCurrentURL(); +-#endif +- +-private: +- void setupMain(); +- void setupAdvanced(); +- void setupIcon(); +- void setupAutoType(); +-#ifdef WITH_XC_BROWSER +- void setupBrowser(); +-#endif +-#ifdef WITH_XC_SSHAGENT +- void setupSSHAgent(); +-#endif +- void setupProperties(); +- void setupHistory(); +- void setupEntryUpdate(); +- void setupColorButton(bool foreground, const QColor& color); +- +- bool passwordsEqual(); +- void setForms(Entry* entry, bool restore = false); +- QMenu* createPresetsMenu(); +- void updateEntryData(Entry* entry) const; +-#ifdef WITH_XC_SSHAGENT +- bool getOpenSSHKey(OpenSSHKey& key, bool decrypt = false); +-#endif +- +- void displayAttribute(QModelIndex index, bool showProtected); +- +- QPointer m_entry; +- QSharedPointer m_db; +- +- bool m_create; +- bool m_history; +-#ifdef WITH_XC_SSHAGENT +- KeeAgentSettings m_sshAgentSettings; +-#endif +- const QScopedPointer m_mainUi; +- const QScopedPointer m_advancedUi; +- const QScopedPointer m_autoTypeUi; +- const QScopedPointer m_sshAgentUi; +- const QScopedPointer m_historyUi; +- const QScopedPointer m_browserUi; +- const QScopedPointer m_customData; +- +- QScrollArea* const m_mainWidget; +- QWidget* const m_advancedWidget; +- EditWidgetIcons* const m_iconsWidget; +- QWidget* const m_autoTypeWidget; +-#ifdef WITH_XC_SSHAGENT +- QWidget* const m_sshAgentWidget; +-#endif +-#ifdef WITH_XC_BROWSER +- bool m_browserSettingsChanged; +- QWidget* const m_browserWidget; +- EntryURLModel* const m_additionalURLsDataModel; +-#endif +- EditWidgetProperties* const m_editWidgetProperties; +- QWidget* const m_historyWidget; +- EntryAttributes* const m_entryAttributes; +- EntryAttributesModel* const m_attributesModel; +- EntryHistoryModel* const m_historyModel; +- QSortFilterProxyModel* const m_sortModel; +- QPersistentModelIndex m_currentAttribute; +- AutoTypeAssociations* const m_autoTypeAssoc; +- AutoTypeAssociationsModel* const m_autoTypeAssocModel; +- QButtonGroup* const m_autoTypeDefaultSequenceGroup; +- QButtonGroup* const m_autoTypeWindowSequenceGroup; +- QCompleter* const m_usernameCompleter; +- QStringListModel* const m_usernameCompleterModel; +- QTimer m_entryModifiedTimer; +- +- Q_DISABLE_COPY(EditEntryWidget) +-}; +- +-#endif // KEEPASSX_EDITENTRYWIDGET_H +diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EditEntryWidgetHistory.ui keepassxc-2.6.4-patched/src/gui/entry/EditEntryWidgetHistory.ui +--- keepassxc-2.6.4-orig/src/gui/entry/EditEntryWidgetHistory.ui 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/entry/EditEntryWidgetHistory.ui 1970-01-01 01:00:00.000000000 +0100 +@@ -1,121 +0,0 @@ +- +- +- EditEntryWidgetHistory +- +- +- +- 0 +- 0 +- 400 +- 300 +- +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- Entry history selection +- +- +- true +- +- +- true +- +- +- 160 +- +- +- +- +- +- +- +- +- false +- +- +- Show entry at selected history state +- +- +- Show entry at selected history state +- +- +- Show +- +- +- +- +- +- +- false +- +- +- Restore entry to selected history state +- +- +- Restore entry to selected history state +- +- +- Restore +- +- +- +- +- +- +- false +- +- +- Delete selected history state +- +- +- Delete selected history state +- +- +- Delete +- +- +- +- +- +- +- false +- +- +- Delete all history +- +- +- Delete all history +- +- +- Delete all +- +- +- +- +- +- +- +- +- historyView +- showButton +- restoreButton +- deleteButton +- deleteAllButton +- +- +- +- +diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EditEntryWidgetMain.ui keepassxc-2.6.4-patched/src/gui/entry/EditEntryWidgetMain.ui +--- keepassxc-2.6.4-orig/src/gui/entry/EditEntryWidgetMain.ui 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/entry/EditEntryWidgetMain.ui 1970-01-01 01:00:00.000000000 +0100 +@@ -1,306 +0,0 @@ +- +- +- EditEntryWidgetMain +- +- +- +- 0 +- 0 +- 539 +- 523 +- +- +- +- Edit Entry +- +- +- QFrame::NoFrame +- +- +- QFrame::Plain +- +- +- Qt::ScrollBarAlwaysOff +- +- +- QAbstractScrollArea::AdjustToContents +- +- +- true +- +- +- +- +- 0 +- 0 +- 539 +- 523 +- +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 10 +- +- +- 8 +- +- +- +- +- +- +- +- 0 +- 1 +- +- +- +- +- 0 +- 100 +- +- +- +- Notes field +- +- +- +- +- +- +- true +- +- +- Toggle the checkbox to reveal the notes section. +- +- +- Qt::AlignTop +- +- +- +- +- +- +- +- +- Username field +- +- +- +- +- +- +- +- +- Toggle notes visible +- +- +- Toggle notes visible +- +- +- Notes: +- +- +- +- +- +- +- Qt::Vertical +- +- +- +- 20 +- 40 +- +- +- +- +- +- +- +- +- +- 8 +- +- +- +- +- false +- +- +- Expiration field +- +- +- true +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- Expiration Presets +- +- +- Expiration presets +- +- +- Presets +- +- +- +- +- +- +- +- +- Password: +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- +- +- +- +- URL: +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- +- +- +- +- 8 +- +- +- +- +- Url field +- +- +- https://example.com +- +- +- +- +- +- +- Download favicon for URL +- +- +- Download favicon for URL +- +- +- +- +- +- +- +- +- Title: +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- +- +- +- +- Title field +- +- +- +- +- +- +- Username: +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- +- +- +- +- Password field +- +- +- QLineEdit::Password +- +- +- +- +- +- +- 0 +- +- +- +- +- Toggle expiration +- +- +- Toggle expiration +- +- +- Expires: +- +- +- +- +- +- +- +- +- +- +- PasswordEdit +- QLineEdit +-
gui/PasswordEdit.h
+- 1 +-
+- +- URLEdit +- QLineEdit +-
gui/URLEdit.h
+- 1 +-
+-
+- +- titleEdit +- usernameComboBox +- passwordEdit +- urlEdit +- fetchFaviconButton +- expireCheck +- expireDatePicker +- expirePresets +- notesEnabled +- notesEdit +- +- +- +-
+diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EditEntryWidget_p.h keepassxc-2.6.4-patched/src/gui/entry/EditEntryWidget_p.h +--- keepassxc-2.6.4-orig/src/gui/entry/EditEntryWidget_p.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/entry/EditEntryWidget_p.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,47 +0,0 @@ +-/* +- * Copyright (C) 2010 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_EDITENTRYWIDGET_P_H +-#define KEEPASSX_EDITENTRYWIDGET_P_H +- +-#include +-#include +- +-class AttributesListView : public QListView +-{ +-public: +- explicit AttributesListView(QWidget* parent = nullptr) +- : QListView(parent) +- { +- setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding); +- } +- +- QSize sizeHint() const override +- { +- QSize sizeHint = QListView::sizeHint(); +- +- int width = sizeHintForColumn(0) + frameWidth() * 2; +- if (verticalScrollBar()->isVisible()) { +- width += verticalScrollBar()->width(); +- } +- sizeHint.setWidth(width); +- +- return sizeHint; +- } +-}; +- +-#endif // KEEPASSX_EDITENTRYWIDGET_P_H +diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EditEntryWidgetSSHAgent.ui keepassxc-2.6.4-patched/src/gui/entry/EditEntryWidgetSSHAgent.ui +--- keepassxc-2.6.4-orig/src/gui/entry/EditEntryWidgetSSHAgent.ui 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/entry/EditEntryWidgetSSHAgent.ui 1970-01-01 01:00:00.000000000 +0100 +@@ -1,339 +0,0 @@ +- +- +- EditEntryWidgetSSHAgent +- +- +- +- 0 +- 0 +- 452 +- 618 +- +- +- +- Form +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- Remove key from agent when database is closed/locked +- +- +- +- +- +- +- Comment +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- +- +- +- +- Add key to agent when database is opened/unlocked +- +- +- +- +- +- +- +- Monospace +- +- +- +- true +- +- +- +- +- +- +- Decrypt +- +- +- +- +- +- +- Qt::Vertical +- +- +- QSizePolicy::Fixed +- +- +- +- 20 +- 10 +- +- +- +- +- +- +- +- Fingerprint +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- +- +- +- +- Copy to clipboard +- +- +- +- +- +- +- Public key +- +- +- Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing +- +- +- +- +- +- +- Private key +- +- +- +- +- +- External file +- +- +- +- +- +- +- Browser for key file +- +- +- Browse... +- +- +- +- +- +- +- Attachment +- +- +- true +- +- +- +- +- +- +- Qt::ClickFocus +- +- +- External key file +- +- +- +- +- +- +- +- +- Add to agent +- +- +- +- +- +- +- Remove from agent +- +- +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- Select attachment file +- +- +- false +- +- +- +- +- +- +- +- +- +- Require user confirmation when this key is used +- +- +- +- +- +- +- +- +- +- Monospace +- +- +- +- n/a +- +- +- Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse +- +- +- +- +- +- +- Qt::Horizontal +- +- +- +- 40 +- 20 +- +- +- +- +- +- +- +- +- +- +- +- Remove key from agent after +- +- +- +- +- +- +- Remove key from agent after specified seconds +- +- +- seconds +- +- +- 999999999 +- +- +- +- +- +- +- Qt::Horizontal +- +- +- +- 40 +- 20 +- +- +- +- +- +- +- +- +- +- +- +- +- Monospace +- +- +- +- n/a +- +- +- Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse +- +- +- +- +- +- +- Qt::Horizontal +- +- +- +- 40 +- 20 +- +- +- +- +- +- +- +- +- +- Qt::Vertical +- +- +- QSizePolicy::Fixed +- +- +- +- 20 +- 10 +- +- +- +- +- +- +- +- addKeyToAgentCheckBox +- removeKeyFromAgentCheckBox +- requireUserConfirmationCheckBox +- lifetimeCheckBox +- lifetimeSpinBox +- attachmentRadioButton +- attachmentComboBox +- externalFileRadioButton +- browseButton +- addToAgentButton +- removeFromAgentButton +- decryptButton +- publicKeyEdit +- copyToClipboardButton +- +- +- +- +diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EntryAttachmentsModel.cpp keepassxc-2.6.4-patched/src/gui/entry/EntryAttachmentsModel.cpp +--- keepassxc-2.6.4-orig/src/gui/entry/EntryAttachmentsModel.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/entry/EntryAttachmentsModel.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,152 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "EntryAttachmentsModel.h" +- +-#include "core/Entry.h" +-#include "core/Tools.h" +- +-#include +- +-EntryAttachmentsModel::EntryAttachmentsModel(QObject* parent) +- : QAbstractListModel(parent) +- , m_entryAttachments(nullptr) +-{ +- m_headers << tr("Name") << tr("Size"); +-} +- +-void EntryAttachmentsModel::setEntryAttachments(EntryAttachments* entryAttachments) +-{ +- beginResetModel(); +- +- if (m_entryAttachments) { +- m_entryAttachments->disconnect(this); +- } +- +- m_entryAttachments = entryAttachments; +- +- if (m_entryAttachments) { +- connect(m_entryAttachments, SIGNAL(keyModified(QString)), SLOT(attachmentChange(QString))); +- connect(m_entryAttachments, SIGNAL(aboutToBeAdded(QString)), SLOT(attachmentAboutToAdd(QString))); +- connect(m_entryAttachments, SIGNAL(added(QString)), SLOT(attachmentAdd())); +- connect(m_entryAttachments, SIGNAL(aboutToBeRemoved(QString)), SLOT(attachmentAboutToRemove(QString))); +- connect(m_entryAttachments, SIGNAL(removed(QString)), SLOT(attachmentRemove())); +- connect(m_entryAttachments, SIGNAL(aboutToBeReset()), SLOT(aboutToReset())); +- connect(m_entryAttachments, SIGNAL(reset()), SLOT(reset())); +- } +- +- endResetModel(); +-} +- +-int EntryAttachmentsModel::rowCount(const QModelIndex& parent) const +-{ +- if (!m_entryAttachments || parent.isValid()) { +- return 0; +- } else { +- return m_entryAttachments->keys().size(); +- } +-} +- +-int EntryAttachmentsModel::columnCount(const QModelIndex& parent) const +-{ +- Q_UNUSED(parent); +- +- return Columns::ColumnsCount; +-} +- +-QVariant EntryAttachmentsModel::headerData(int section, Qt::Orientation orientation, int role) const +-{ +- if (orientation == Qt::Horizontal && role == Qt::DisplayRole) { +- Q_ASSERT(m_headers.size() == columnCount()); +- return m_headers[section]; +- } +- +- return QAbstractListModel::headerData(section, orientation, role); +-} +- +-QVariant EntryAttachmentsModel::data(const QModelIndex& index, int role) const +-{ +- if (!index.isValid()) { +- return QVariant(); +- } +- +- if (role == Qt::DisplayRole || role == Qt::EditRole) { +- const QString key = keyByIndex(index); +- const int column = index.column(); +- if (column == Columns::NameColumn) { +- return key; +- } else if (column == SizeColumn) { +- const int attachmentSize = m_entryAttachments->value(key).size(); +- if (role == Qt::DisplayRole) { +- return Tools::humanReadableFileSize(attachmentSize); +- } +- return attachmentSize; +- } +- } +- +- return QVariant(); +-} +- +-QString EntryAttachmentsModel::keyByIndex(const QModelIndex& index) const +-{ +- if (!index.isValid()) { +- return QString(); +- } +- +- return m_entryAttachments->keys().at(index.row()); +-} +- +-void EntryAttachmentsModel::attachmentChange(const QString& key) +-{ +- int row = m_entryAttachments->keys().indexOf(key); +- emit dataChanged(index(row, 0), index(row, columnCount() - 1)); +-} +- +-void EntryAttachmentsModel::attachmentAboutToAdd(const QString& key) +-{ +- QList rows = m_entryAttachments->keys(); +- rows.append(key); +- std::sort(rows.begin(), rows.end()); +- int row = rows.indexOf(key); +- beginInsertRows(QModelIndex(), row, row); +-} +- +-void EntryAttachmentsModel::attachmentAdd() +-{ +- endInsertRows(); +-} +- +-void EntryAttachmentsModel::attachmentAboutToRemove(const QString& key) +-{ +- int row = m_entryAttachments->keys().indexOf(key); +- beginRemoveRows(QModelIndex(), row, row); +-} +- +-void EntryAttachmentsModel::attachmentRemove() +-{ +- endRemoveRows(); +-} +- +-void EntryAttachmentsModel::aboutToReset() +-{ +- beginResetModel(); +-} +- +-void EntryAttachmentsModel::reset() +-{ +- endResetModel(); +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EntryAttachmentsModel.h keepassxc-2.6.4-patched/src/gui/entry/EntryAttachmentsModel.h +--- keepassxc-2.6.4-orig/src/gui/entry/EntryAttachmentsModel.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/entry/EntryAttachmentsModel.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,59 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_ENTRYATTACHMENTSMODEL_H +-#define KEEPASSX_ENTRYATTACHMENTSMODEL_H +- +-#include +- +-class EntryAttachments; +- +-class EntryAttachmentsModel : public QAbstractListModel +-{ +- Q_OBJECT +- +-public: +- enum Columns +- { +- NameColumn, +- SizeColumn, +- ColumnsCount +- }; +- +- explicit EntryAttachmentsModel(QObject* parent = nullptr); +- void setEntryAttachments(EntryAttachments* entry); +- int rowCount(const QModelIndex& parent = QModelIndex()) const override; +- int columnCount(const QModelIndex& parent = QModelIndex()) const override; +- QVariant headerData(int section, Qt::Orientation orientation, int role) const override; +- QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; +- QString keyByIndex(const QModelIndex& index) const; +- +-private slots: +- void attachmentChange(const QString& key); +- void attachmentAboutToAdd(const QString& key); +- void attachmentAdd(); +- void attachmentAboutToRemove(const QString& key); +- void attachmentRemove(); +- void aboutToReset(); +- void reset(); +- +-private: +- EntryAttachments* m_entryAttachments; +- QStringList m_headers; +-}; +- +-#endif // KEEPASSX_ENTRYATTACHMENTSMODEL_H +diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EntryAttachmentsWidget.cpp keepassxc-2.6.4-patched/src/gui/entry/EntryAttachmentsWidget.cpp +--- keepassxc-2.6.4-orig/src/gui/entry/EntryAttachmentsWidget.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/entry/EntryAttachmentsWidget.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,426 +0,0 @@ +-#include "EntryAttachmentsWidget.h" +-#include "ui_EntryAttachmentsWidget.h" +- +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-#include "EntryAttachmentsModel.h" +-#include "config-keepassx.h" +-#include "core/Config.h" +-#include "core/EntryAttachments.h" +-#include "core/Tools.h" +-#include "gui/FileDialog.h" +-#include "gui/MessageBox.h" +- +-EntryAttachmentsWidget::EntryAttachmentsWidget(QWidget* parent) +- : QWidget(parent) +- , m_ui(new Ui::EntryAttachmentsWidget) +- , m_entryAttachments(new EntryAttachments(this)) +- , m_attachmentsModel(new EntryAttachmentsModel(this)) +- , m_readOnly(false) +- , m_buttonsVisible(true) +-{ +- m_ui->setupUi(this); +- +- m_ui->attachmentsView->setAcceptDrops(false); +- m_ui->attachmentsView->viewport()->setAcceptDrops(true); +- m_ui->attachmentsView->viewport()->installEventFilter(this); +- +- m_attachmentsModel->setEntryAttachments(m_entryAttachments); +- m_ui->attachmentsView->setModel(m_attachmentsModel); +- m_ui->attachmentsView->verticalHeader()->hide(); +- m_ui->attachmentsView->horizontalHeader()->setStretchLastSection(true); +- m_ui->attachmentsView->horizontalHeader()->resizeSection(EntryAttachmentsModel::NameColumn, 400); +- m_ui->attachmentsView->setSelectionBehavior(QAbstractItemView::SelectRows); +- m_ui->attachmentsView->setSelectionMode(QAbstractItemView::ExtendedSelection); +- +- connect(this, SIGNAL(buttonsVisibleChanged(bool)), this, SLOT(updateButtonsVisible())); +- connect(this, SIGNAL(readOnlyChanged(bool)), SLOT(updateButtonsEnabled())); +- connect(m_attachmentsModel, SIGNAL(modelReset()), SLOT(updateButtonsEnabled())); +- +- // clang-format off +- connect(m_ui->attachmentsView->selectionModel(), +- SIGNAL(selectionChanged(QItemSelection,QItemSelection)), +- SLOT(updateButtonsEnabled())); +- // clang-format on +- +- connect(m_ui->attachmentsView, SIGNAL(doubleClicked(QModelIndex)), SLOT(openAttachment(QModelIndex))); +- connect(m_ui->saveAttachmentButton, SIGNAL(clicked()), SLOT(saveSelectedAttachments())); +- connect(m_ui->openAttachmentButton, SIGNAL(clicked()), SLOT(openSelectedAttachments())); +- connect(m_ui->addAttachmentButton, SIGNAL(clicked()), SLOT(insertAttachments())); +- connect(m_ui->removeAttachmentButton, SIGNAL(clicked()), SLOT(removeSelectedAttachments())); +- +- updateButtonsVisible(); +- updateButtonsEnabled(); +-} +- +-EntryAttachmentsWidget::~EntryAttachmentsWidget() +-{ +-} +- +-const EntryAttachments* EntryAttachmentsWidget::entryAttachments() const +-{ +- return m_entryAttachments; +-} +- +-bool EntryAttachmentsWidget::isReadOnly() const +-{ +- return m_readOnly; +-} +- +-bool EntryAttachmentsWidget::isButtonsVisible() const +-{ +- return m_buttonsVisible; +-} +- +-void EntryAttachmentsWidget::setEntryAttachments(const EntryAttachments* attachments) +-{ +- Q_ASSERT(attachments != nullptr); +- m_entryAttachments->copyDataFrom(attachments); +-} +- +-void EntryAttachmentsWidget::clearAttachments() +-{ +- m_entryAttachments->clear(); +-} +- +-void EntryAttachmentsWidget::setReadOnly(bool readOnly) +-{ +- if (m_readOnly == readOnly) { +- return; +- } +- +- m_readOnly = readOnly; +- emit readOnlyChanged(m_readOnly); +-} +- +-void EntryAttachmentsWidget::setButtonsVisible(bool buttonsVisible) +-{ +- if (m_buttonsVisible == buttonsVisible) { +- return; +- } +- +- m_buttonsVisible = buttonsVisible; +- emit buttonsVisibleChanged(m_buttonsVisible); +-} +- +-QByteArray EntryAttachmentsWidget::getAttachment(const QString& name) +-{ +- return m_entryAttachments->value(name); +-} +- +-void EntryAttachmentsWidget::setAttachment(const QString& name, const QByteArray& value) +-{ +- m_entryAttachments->set(name, value); +-} +- +-void EntryAttachmentsWidget::removeAttachment(const QString& name) +-{ +- if (!isReadOnly() && m_entryAttachments->hasKey(name)) { +- m_entryAttachments->remove(name); +- } +-} +- +-void EntryAttachmentsWidget::insertAttachments() +-{ +- Q_ASSERT(!isReadOnly()); +- if (isReadOnly()) { +- return; +- } +- +- QString defaultDirPath = config()->get(Config::LastAttachmentDir).toString(); +- const bool dirExists = !defaultDirPath.isEmpty() && QDir(defaultDirPath).exists(); +- if (!dirExists) { +- defaultDirPath = QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation).first(); +- } +- +- const auto filenames = fileDialog()->getOpenFileNames(this, tr("Select files"), defaultDirPath); +- if (filenames.isEmpty()) { +- return; +- } +- const auto confirmedFileNames = confirmLargeAttachments(filenames); +- if (confirmedFileNames.isEmpty()) { +- return; +- } +- config()->set(Config::LastAttachmentDir, QFileInfo(filenames.first()).absolutePath()); +- QString errorMessage; +- if (!insertAttachments(confirmedFileNames, errorMessage)) { +- errorOccurred(errorMessage); +- } +- emit widgetUpdated(); +-} +- +-void EntryAttachmentsWidget::removeSelectedAttachments() +-{ +- Q_ASSERT(!isReadOnly()); +- if (isReadOnly()) { +- return; +- } +- +- const QModelIndexList indexes = m_ui->attachmentsView->selectionModel()->selectedRows(0); +- if (indexes.isEmpty()) { +- return; +- } +- +- auto result = MessageBox::question(this, +- tr("Confirm remove"), +- tr("Are you sure you want to remove %n attachment(s)?", "", indexes.count()), +- MessageBox::Remove | MessageBox::Cancel, +- MessageBox::Cancel); +- +- if (result == MessageBox::Remove) { +- QStringList keys; +- for (const QModelIndex& index : indexes) { +- keys.append(m_attachmentsModel->keyByIndex(index)); +- } +- m_entryAttachments->remove(keys); +- emit widgetUpdated(); +- } +-} +- +-void EntryAttachmentsWidget::saveSelectedAttachments() +-{ +- const QModelIndexList indexes = m_ui->attachmentsView->selectionModel()->selectedRows(0); +- if (indexes.isEmpty()) { +- return; +- } +- +- QString defaultDirPath = config()->get(Config::LastAttachmentDir).toString(); +- const bool dirExists = !defaultDirPath.isEmpty() && QDir(defaultDirPath).exists(); +- if (!dirExists) { +- defaultDirPath = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation); +- } +- +- const QString saveDirPath = fileDialog()->getExistingDirectory(this, tr("Save attachments"), defaultDirPath); +- if (saveDirPath.isEmpty()) { +- return; +- } +- +- QDir saveDir(saveDirPath); +- if (!saveDir.exists()) { +- if (saveDir.mkpath(saveDir.absolutePath())) { +- errorOccurred(tr("Unable to create directory:\n%1").arg(saveDir.absolutePath())); +- return; +- } +- } +- config()->set(Config::LastAttachmentDir, QFileInfo(saveDir.absolutePath()).absolutePath()); +- +- QStringList errors; +- for (const QModelIndex& index : indexes) { +- const QString filename = m_attachmentsModel->keyByIndex(index); +- const QString attachmentPath = saveDir.absoluteFilePath(filename); +- +- if (QFileInfo::exists(attachmentPath)) { +- +- MessageBox::Buttons buttons = MessageBox::Overwrite | MessageBox::Cancel; +- if (indexes.length() > 1) { +- buttons |= MessageBox::Skip; +- } +- +- const QString questionText( +- tr("Are you sure you want to overwrite the existing file \"%1\" with the attachment?")); +- +- auto result = MessageBox::question( +- this, tr("Confirm overwrite"), questionText.arg(filename), buttons, MessageBox::Cancel); +- +- if (result == MessageBox::Skip) { +- continue; +- } else if (result == MessageBox::Cancel) { +- return; +- } +- } +- +- QFile file(attachmentPath); +- const QByteArray attachmentData = m_entryAttachments->value(filename); +- const bool saveOk = file.open(QIODevice::WriteOnly) && file.write(attachmentData) == attachmentData.size(); +- if (!saveOk) { +- errors.append(QString("%1 - %2").arg(filename, file.errorString())); +- } +- } +- +- if (!errors.isEmpty()) { +- errorOccurred(tr("Unable to save attachments:\n%1").arg(errors.join('\n'))); +- } +-} +- +-void EntryAttachmentsWidget::openAttachment(const QModelIndex& index) +-{ +- Q_ASSERT(index.isValid()); +- if (!index.isValid()) { +- return; +- } +- +- QString errorMessage; +- if (!openAttachment(index, errorMessage)) { +- errorOccurred(tr("Unable to open attachment:\n%1").arg(errorMessage)); +- } +-} +- +-void EntryAttachmentsWidget::openSelectedAttachments() +-{ +- const QModelIndexList indexes = m_ui->attachmentsView->selectionModel()->selectedRows(0); +- if (indexes.isEmpty()) { +- return; +- } +- +- QStringList errors; +- for (const QModelIndex& index : indexes) { +- QString errorMessage; +- if (!openAttachment(index, errorMessage)) { +- const QString filename = m_attachmentsModel->keyByIndex(index); +- errors.append(QString("%1 - %2").arg(filename, errorMessage)); +- }; +- } +- +- if (!errors.isEmpty()) { +- errorOccurred(tr("Unable to open attachments:\n%1").arg(errors.join('\n'))); +- } +-} +- +-void EntryAttachmentsWidget::updateButtonsEnabled() +-{ +- const bool hasSelection = m_ui->attachmentsView->selectionModel()->hasSelection(); +- +- m_ui->addAttachmentButton->setEnabled(!m_readOnly); +- m_ui->removeAttachmentButton->setEnabled(hasSelection && !m_readOnly); +- +- m_ui->saveAttachmentButton->setEnabled(hasSelection); +- m_ui->openAttachmentButton->setEnabled(hasSelection); +-} +- +-void EntryAttachmentsWidget::updateButtonsVisible() +-{ +- m_ui->addAttachmentButton->setVisible(m_buttonsVisible && !m_readOnly); +- m_ui->removeAttachmentButton->setVisible(m_buttonsVisible && !m_readOnly); +-} +- +-bool EntryAttachmentsWidget::insertAttachments(const QStringList& filenames, QString& errorMessage) +-{ +- Q_ASSERT(!isReadOnly()); +- if (isReadOnly()) { +- return false; +- } +- +- QStringList errors; +- for (const QString& filename : filenames) { +- QByteArray data; +- QFile file(filename); +- const QFileInfo fInfo(filename); +- const bool readOk = file.open(QIODevice::ReadOnly) && Tools::readAllFromDevice(&file, data); +- if (readOk) { +- m_entryAttachments->set(fInfo.fileName(), data); +- } else { +- errors.append(QString("%1 - %2").arg(fInfo.fileName(), file.errorString())); +- } +- } +- +- if (!errors.isEmpty()) { +- errorMessage = tr("Unable to open file(s):\n%1", "", errors.size()).arg(errors.join('\n')); +- } +- +- return errors.isEmpty(); +-} +- +-bool EntryAttachmentsWidget::openAttachment(const QModelIndex& index, QString& errorMessage) +-{ +- const QString filename = m_attachmentsModel->keyByIndex(index); +- const QByteArray attachmentData = m_entryAttachments->value(filename); +- +- // tmp file will be removed once the database (or the application) has been closed +-#ifdef KEEPASSXC_DIST_SNAP +- const QString tmpFileTemplate = +- QString("%1/XXXXXX.%2").arg(QProcessEnvironment::systemEnvironment().value("SNAP_USER_DATA"), filename); +-#else +- const QString tmpFileTemplate = QDir::temp().absoluteFilePath(QString("XXXXXX.").append(filename)); +-#endif +- +- QScopedPointer tmpFile(new QTemporaryFile(tmpFileTemplate, this)); +- +- const bool saveOk = tmpFile->open() && tmpFile->write(attachmentData) == attachmentData.size() && tmpFile->flush(); +- if (!saveOk) { +- errorMessage = QString("%1 - %2").arg(filename, tmpFile->errorString()); +- return false; +- } +- +- tmpFile->close(); +- const bool openOk = QDesktopServices::openUrl(QUrl::fromLocalFile(tmpFile->fileName())); +- if (!openOk) { +- errorMessage = QString("Can't open file \"%1\"").arg(filename); +- return false; +- } +- +- // take ownership of the tmpFile pointer +- tmpFile.take(); +- return true; +-} +- +-QStringList EntryAttachmentsWidget::confirmLargeAttachments(const QStringList& filenames) +-{ +- const QString confirmation(tr("%1 is a big file (%2 MB).\nYour database may get very large and reduce " +- "performance.\n\nAre you sure to add this file?")); +- QStringList confirmedFileNames; +- for (const auto& file : filenames) { +- QFileInfo fileInfo(file); +- double size = fileInfo.size() / (1024.0 * 1024.0); +- // Ask for confirmation before adding files over 5 MB in size +- if (size > 5.0) { +- auto fileName = fileInfo.fileName(); +- auto result = MessageBox::question(this, +- tr("Confirm Attachment"), +- confirmation.arg(fileName, QString::number(size, 'f', 1)), +- MessageBox::Yes | MessageBox::No, +- MessageBox::No); +- if (result == MessageBox::Yes) { +- confirmedFileNames << file; +- } +- } else { +- confirmedFileNames << file; +- } +- } +- +- return confirmedFileNames; +-} +- +-bool EntryAttachmentsWidget::eventFilter(QObject* watched, QEvent* e) +-{ +- if (watched == m_ui->attachmentsView->viewport() && !isReadOnly()) { +- const QEvent::Type eventType = e->type(); +- if (eventType == QEvent::DragEnter || eventType == QEvent::DragMove) { +- QDropEvent* dropEv = static_cast(e); +- const QMimeData* mimeData = dropEv->mimeData(); +- if (mimeData->hasUrls()) { +- dropEv->acceptProposedAction(); +- return true; +- } +- } else if (eventType == QEvent::Drop) { +- QDropEvent* dropEv = static_cast(e); +- const QMimeData* mimeData = dropEv->mimeData(); +- if (mimeData->hasUrls()) { +- dropEv->acceptProposedAction(); +- QStringList filenames; +- const QList urls = mimeData->urls(); +- for (const QUrl& url : urls) { +- const QFileInfo fInfo(url.toLocalFile()); +- if (fInfo.isFile()) { +- filenames.append(fInfo.absoluteFilePath()); +- } +- } +- +- QString errorMessage; +- if (!insertAttachments(filenames, errorMessage)) { +- errorOccurred(errorMessage); +- } +- +- return true; +- } +- } +- } +- +- return QWidget::eventFilter(watched, e); +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EntryAttachmentsWidget.h keepassxc-2.6.4-patched/src/gui/entry/EntryAttachmentsWidget.h +--- keepassxc-2.6.4-orig/src/gui/entry/EntryAttachmentsWidget.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/entry/EntryAttachmentsWidget.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,69 +0,0 @@ +-#ifndef ENTRYATTACHMENTSWIDGET_H +-#define ENTRYATTACHMENTSWIDGET_H +- +-#include +-#include +- +-namespace Ui +-{ +- class EntryAttachmentsWidget; +-} +- +-class QByteArray; +-class EntryAttachments; +-class EntryAttachmentsModel; +- +-class EntryAttachmentsWidget : public QWidget +-{ +- Q_OBJECT +- Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly NOTIFY readOnlyChanged) +- Q_PROPERTY(bool isButtonsVisible READ isButtonsVisible WRITE setButtonsVisible NOTIFY buttonsVisibleChanged) +-public: +- explicit EntryAttachmentsWidget(QWidget* parent = nullptr); +- ~EntryAttachmentsWidget(); +- +- const EntryAttachments* entryAttachments() const; +- bool isReadOnly() const; +- bool isButtonsVisible() const; +- +- QByteArray getAttachment(const QString& name); +- void setAttachment(const QString& name, const QByteArray& value); +- void removeAttachment(const QString& name); +- +-public slots: +- void setEntryAttachments(const EntryAttachments* attachments); +- void clearAttachments(); +- void setReadOnly(bool readOnly); +- void setButtonsVisible(bool isButtonsVisible); +- +-signals: +- void errorOccurred(const QString& error); +- void readOnlyChanged(bool readOnly); +- void buttonsVisibleChanged(bool isButtonsVisible); +- void widgetUpdated(); +- +-private slots: +- void insertAttachments(); +- void removeSelectedAttachments(); +- void saveSelectedAttachments(); +- void openAttachment(const QModelIndex& index); +- void openSelectedAttachments(); +- void updateButtonsVisible(); +- void updateButtonsEnabled(); +- +-private: +- bool insertAttachments(const QStringList& fileNames, QString& errorMessage); +- bool openAttachment(const QModelIndex& index, QString& errorMessage); +- +- QStringList confirmLargeAttachments(const QStringList& filenames); +- +- bool eventFilter(QObject* watched, QEvent* event) override; +- +- QScopedPointer m_ui; +- QPointer m_entryAttachments; +- QPointer m_attachmentsModel; +- bool m_readOnly; +- bool m_buttonsVisible; +-}; +- +-#endif // ENTRYATTACHMENTSWIDGET_H +diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EntryAttachmentsWidget.ui keepassxc-2.6.4-patched/src/gui/entry/EntryAttachmentsWidget.ui +--- keepassxc-2.6.4-orig/src/gui/entry/EntryAttachmentsWidget.ui 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/entry/EntryAttachmentsWidget.ui 1970-01-01 01:00:00.000000000 +0100 +@@ -1,123 +0,0 @@ +- +- +- EntryAttachmentsWidget +- +- +- +- 0 +- 0 +- 337 +- 289 +- +- +- +- Form +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- Attachments +- +- +- +- +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- false +- +- +- Add new attachment +- +- +- Add +- +- +- +- +- +- +- false +- +- +- Remove selected attachment +- +- +- Remove +- +- +- +- +- +- +- false +- +- +- Open selected attachment +- +- +- Open +- +- +- +- +- +- +- false +- +- +- Save selected attachment to disk +- +- +- Save +- +- +- +- +- +- +- Qt::Vertical +- +- +- +- 20 +- 173 +- +- +- +- +- +- +- +- +- +- +- +- +diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EntryAttributesModel.cpp keepassxc-2.6.4-patched/src/gui/entry/EntryAttributesModel.cpp +--- keepassxc-2.6.4-orig/src/gui/entry/EntryAttributesModel.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/entry/EntryAttributesModel.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,238 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "EntryAttributesModel.h" +- +-#include "core/Entry.h" +-#include "core/Tools.h" +- +-#include +- +-EntryAttributesModel::EntryAttributesModel(QObject* parent) +- : QAbstractListModel(parent) +- , m_entryAttributes(nullptr) +- , m_nextRenameDataChange(false) +-{ +-} +- +-void EntryAttributesModel::setEntryAttributes(EntryAttributes* entryAttributes) +-{ +- beginResetModel(); +- +- if (m_entryAttributes) { +- m_entryAttributes->disconnect(this); +- } +- +- m_entryAttributes = entryAttributes; +- +- if (m_entryAttributes) { +- updateAttributes(); +- connect(m_entryAttributes, SIGNAL(customKeyModified(QString)), SLOT(attributeChange(QString))); +- connect(m_entryAttributes, SIGNAL(aboutToBeAdded(QString)), SLOT(attributeAboutToAdd(QString))); +- connect(m_entryAttributes, SIGNAL(added(QString)), SLOT(attributeAdd())); +- connect(m_entryAttributes, SIGNAL(aboutToBeRemoved(QString)), SLOT(attributeAboutToRemove(QString))); +- connect(m_entryAttributes, SIGNAL(removed(QString)), SLOT(attributeRemove())); +- // clang-format off +- connect( +- m_entryAttributes, SIGNAL(aboutToRename(QString,QString)), SLOT(attributeAboutToRename(QString,QString))); +- // clang-format on +- +- // clang-format off +- connect(m_entryAttributes, SIGNAL(renamed(QString,QString)), SLOT(attributeRename(QString,QString))); +- // clang-format on +- +- connect(m_entryAttributes, SIGNAL(aboutToBeReset()), SLOT(aboutToReset())); +- connect(m_entryAttributes, SIGNAL(reset()), SLOT(reset())); +- } +- +- endResetModel(); +-} +- +-int EntryAttributesModel::rowCount(const QModelIndex& parent) const +-{ +- if (!m_entryAttributes || parent.isValid()) { +- return 0; +- } else { +- return m_attributes.size(); +- } +-} +- +-int EntryAttributesModel::columnCount(const QModelIndex& parent) const +-{ +- Q_UNUSED(parent); +- +- return 1; +-} +- +-QVariant EntryAttributesModel::headerData(int section, Qt::Orientation orientation, int role) const +-{ +- if ((orientation == Qt::Horizontal) && (role == Qt::DisplayRole) && (section == 0)) { +- return tr("Name"); +- } else { +- return QVariant(); +- } +-} +- +-QVariant EntryAttributesModel::data(const QModelIndex& index, int role) const +-{ +- if (!index.isValid() || (role != Qt::DisplayRole && role != Qt::EditRole)) { +- return QVariant(); +- } +- +- return m_attributes.at(index.row()); +-} +- +-bool EntryAttributesModel::setData(const QModelIndex& index, const QVariant& value, int role) +-{ +- if (!index.isValid() || role != Qt::EditRole || value.type() != QVariant::String || value.toString().isEmpty()) { +- return false; +- } +- +- QString oldKey = m_attributes.at(index.row()); +- QString newKey = value.toString(); +- +- if (EntryAttributes::isDefaultAttribute(newKey) || m_entryAttributes->keys().contains(newKey)) { +- return false; +- } +- m_entryAttributes->rename(oldKey, newKey); +- +- return true; +-} +- +-Qt::ItemFlags EntryAttributesModel::flags(const QModelIndex& index) const +-{ +- if (!index.isValid()) { +- return Qt::NoItemFlags; +- } else { +- return QAbstractItemModel::flags(index) | Qt::ItemIsEditable; +- } +-} +- +-QModelIndex EntryAttributesModel::indexByKey(const QString& key) const +-{ +- int row = m_attributes.indexOf(key); +- +- if (row == -1) { +- return QModelIndex(); +- } else { +- return index(row, 0); +- } +-} +- +-QString EntryAttributesModel::keyByIndex(const QModelIndex& index) const +-{ +- if (!index.isValid()) { +- return QString(); +- } else { +- return m_attributes.at(index.row()); +- } +-} +- +-void EntryAttributesModel::attributeChange(const QString& key) +-{ +- int row = m_attributes.indexOf(key); +- Q_ASSERT(row != -1); +- emit dataChanged(index(row, 0), index(row, columnCount() - 1)); +-} +- +-void EntryAttributesModel::attributeAboutToAdd(const QString& key) +-{ +- QList rows = m_attributes; +- rows.append(key); +- std::sort(rows.begin(), rows.end()); +- int row = rows.indexOf(key); +- beginInsertRows(QModelIndex(), row, row); +-} +- +-void EntryAttributesModel::attributeAdd() +-{ +- updateAttributes(); +- endInsertRows(); +-} +- +-void EntryAttributesModel::attributeAboutToRemove(const QString& key) +-{ +- int row = m_attributes.indexOf(key); +- beginRemoveRows(QModelIndex(), row, row); +-} +- +-void EntryAttributesModel::attributeRemove() +-{ +- updateAttributes(); +- endRemoveRows(); +-} +- +-void EntryAttributesModel::attributeAboutToRename(const QString& oldKey, const QString& newKey) +-{ +- int oldRow = m_attributes.indexOf(oldKey); +- +- QList rows = m_attributes; +- rows.removeOne(oldKey); +- rows.append(newKey); +- std::sort(rows.begin(), rows.end()); +- int newRow = rows.indexOf(newKey); +- if (newRow > oldRow) { +- newRow++; +- } +- +- if (oldRow != newRow) { +- bool result = beginMoveRows(QModelIndex(), oldRow, oldRow, QModelIndex(), newRow); +- Q_UNUSED(result); +- Q_ASSERT(result); +- } else { +- m_nextRenameDataChange = true; +- } +-} +- +-void EntryAttributesModel::attributeRename(const QString& oldKey, const QString& newKey) +-{ +- Q_UNUSED(oldKey); +- +- updateAttributes(); +- +- if (!m_nextRenameDataChange) { +- endMoveRows(); +- } else { +- m_nextRenameDataChange = false; +- +- QModelIndex keyIndex = index(m_attributes.indexOf(newKey), 0); +- emit dataChanged(keyIndex, keyIndex); +- } +-} +- +-void EntryAttributesModel::aboutToReset() +-{ +- beginResetModel(); +-} +- +-void EntryAttributesModel::reset() +-{ +- updateAttributes(); +- endResetModel(); +-} +- +-void EntryAttributesModel::updateAttributes() +-{ +- m_attributes.clear(); +- +- const QList attributesKeyList = m_entryAttributes->keys(); +- for (const QString& key : attributesKeyList) { +- if (!EntryAttributes::isDefaultAttribute(key)) { +- m_attributes.append(key); +- } +- } +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EntryAttributesModel.h keepassxc-2.6.4-patched/src/gui/entry/EntryAttributesModel.h +--- keepassxc-2.6.4-orig/src/gui/entry/EntryAttributesModel.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/entry/EntryAttributesModel.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,60 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_ENTRYATTRIBUTESMODEL_H +-#define KEEPASSX_ENTRYATTRIBUTESMODEL_H +- +-#include +- +-class EntryAttributes; +- +-class EntryAttributesModel : public QAbstractListModel +-{ +- Q_OBJECT +- +-public: +- explicit EntryAttributesModel(QObject* parent = nullptr); +- void setEntryAttributes(EntryAttributes* entryAttributes); +- int rowCount(const QModelIndex& parent = QModelIndex()) const override; +- int columnCount(const QModelIndex& parent = QModelIndex()) const override; +- QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; +- QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; +- bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole) override; +- Qt::ItemFlags flags(const QModelIndex& index) const override; +- QModelIndex indexByKey(const QString& key) const; +- QString keyByIndex(const QModelIndex& index) const; +- +-private slots: +- void attributeChange(const QString& key); +- void attributeAboutToAdd(const QString& key); +- void attributeAdd(); +- void attributeAboutToRemove(const QString& key); +- void attributeRemove(); +- void attributeAboutToRename(const QString& oldKey, const QString& newKey); +- void attributeRename(const QString& oldKey, const QString& newKey); +- void aboutToReset(); +- void reset(); +- +-private: +- void updateAttributes(); +- +- EntryAttributes* m_entryAttributes; +- QList m_attributes; +- bool m_nextRenameDataChange; +-}; +- +-#endif // KEEPASSX_ENTRYATTRIBUTESMODEL_H +diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EntryHistoryModel.cpp keepassxc-2.6.4-patched/src/gui/entry/EntryHistoryModel.cpp +--- keepassxc-2.6.4-orig/src/gui/entry/EntryHistoryModel.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/entry/EntryHistoryModel.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,148 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "EntryHistoryModel.h" +- +-#include "core/Entry.h" +-#include "core/Global.h" +- +-EntryHistoryModel::EntryHistoryModel(QObject* parent) +- : QAbstractTableModel(parent) +-{ +-} +- +-Entry* EntryHistoryModel::entryFromIndex(const QModelIndex& index) const +-{ +- Q_ASSERT(index.isValid() && index.row() < m_historyEntries.size()); +- return m_historyEntries.at(index.row()); +-} +- +-int EntryHistoryModel::columnCount(const QModelIndex& parent) const +-{ +- Q_UNUSED(parent); +- return 4; +-} +- +-int EntryHistoryModel::rowCount(const QModelIndex& parent) const +-{ +- if (!parent.isValid()) { +- return m_historyEntries.count(); +- } else { +- return 0; +- } +-} +- +-QVariant EntryHistoryModel::data(const QModelIndex& index, int role) const +-{ +- if (!index.isValid()) { +- return QVariant(); +- } +- +- if (role == Qt::DisplayRole || role == Qt::UserRole) { +- Entry* entry = entryFromIndex(index); +- const TimeInfo& timeInfo = entry->timeInfo(); +- QDateTime lastModificationLocalTime = timeInfo.lastModificationTime().toLocalTime(); +- switch (index.column()) { +- case 0: +- if (role == Qt::DisplayRole) { +- return lastModificationLocalTime.toString(Qt::SystemLocaleShortDate); +- } else { +- return lastModificationLocalTime; +- } +- case 1: +- return entry->title(); +- case 2: +- return entry->username(); +- case 3: +- return entry->url(); +- } +- } +- +- return QVariant(); +-} +- +-QVariant EntryHistoryModel::headerData(int section, Qt::Orientation orientation, int role) const +-{ +- if (orientation == Qt::Horizontal && role == Qt::DisplayRole) { +- switch (section) { +- case 0: +- return tr("Last modified"); +- case 1: +- return tr("Title"); +- case 2: +- return tr("Username"); +- case 3: +- return tr("URL"); +- } +- } +- +- return QVariant(); +-} +- +-void EntryHistoryModel::setEntries(const QList& entries) +-{ +- beginResetModel(); +- +- m_historyEntries = entries; +- m_deletedHistoryEntries.clear(); +- +- endResetModel(); +-} +- +-void EntryHistoryModel::clear() +-{ +- beginResetModel(); +- +- m_historyEntries.clear(); +- m_deletedHistoryEntries.clear(); +- +- endResetModel(); +-} +- +-void EntryHistoryModel::clearDeletedEntries() +-{ +- m_deletedHistoryEntries.clear(); +-} +- +-QList EntryHistoryModel::deletedEntries() +-{ +- return m_deletedHistoryEntries; +-} +- +-void EntryHistoryModel::deleteIndex(QModelIndex index) +-{ +- if (index.isValid()) { +- Entry* entry = entryFromIndex(index); +- beginRemoveRows(QModelIndex(), m_historyEntries.indexOf(entry), m_historyEntries.indexOf(entry)); +- m_historyEntries.removeAll(entry); +- m_deletedHistoryEntries << entry; +- endRemoveRows(); +- } +-} +- +-void EntryHistoryModel::deleteAll() +-{ +- Q_ASSERT(m_historyEntries.count() > 0); +- +- beginRemoveRows(QModelIndex(), 0, m_historyEntries.size() - 1); +- +- for (Entry* entry : asConst(m_historyEntries)) { +- m_deletedHistoryEntries << entry; +- } +- m_historyEntries.clear(); +- endRemoveRows(); +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EntryHistoryModel.h keepassxc-2.6.4-patched/src/gui/entry/EntryHistoryModel.h +--- keepassxc-2.6.4-orig/src/gui/entry/EntryHistoryModel.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/entry/EntryHistoryModel.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,50 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_ENTRYHISTORYMODEL_H +-#define KEEPASSX_ENTRYHISTORYMODEL_H +- +-#include +- +-class Entry; +- +-class EntryHistoryModel : public QAbstractTableModel +-{ +- Q_OBJECT +- +-public: +- explicit EntryHistoryModel(QObject* parent = nullptr); +- +- Entry* entryFromIndex(const QModelIndex& index) const; +- int columnCount(const QModelIndex& parent = QModelIndex()) const override; +- int rowCount(const QModelIndex& parent = QModelIndex()) const override; +- QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; +- QVariant headerData(int section, Qt::Orientation orientation, int role) const override; +- +- void setEntries(const QList& entries); +- void clear(); +- void clearDeletedEntries(); +- QList deletedEntries(); +- void deleteIndex(QModelIndex index); +- void deleteAll(); +- +-private: +- QList m_historyEntries; +- QList m_deletedHistoryEntries; +-}; +- +-#endif // KEEPASSX_ENTRYHISTORYMODEL_H +diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EntryModel.cpp keepassxc-2.6.4-patched/src/gui/entry/EntryModel.cpp +--- keepassxc-2.6.4-orig/src/gui/entry/EntryModel.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/entry/EntryModel.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,578 +0,0 @@ +-/* +- * Copyright (C) 2010 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "EntryModel.h" +- +-#include +-#include +-#include +-#include +-#include +- +-#include "core/Config.h" +-#include "core/DatabaseIcons.h" +-#include "core/Entry.h" +-#include "core/Global.h" +-#include "core/Group.h" +-#include "core/Metadata.h" +-#include "core/Resources.h" +-#ifdef Q_OS_MACOS +-#include "gui/osutils/macutils/MacUtils.h" +-#endif +- +-EntryModel::EntryModel(QObject* parent) +- : QAbstractTableModel(parent) +- , m_group(nullptr) +- , HiddenContentDisplay(QString("\u25cf").repeated(6)) +- , DateFormat(Qt::DefaultLocaleShortDate) +-{ +- connect(config(), &Config::changed, this, &EntryModel::onConfigChanged); +-} +- +-Entry* EntryModel::entryFromIndex(const QModelIndex& index) const +-{ +- Q_ASSERT(index.isValid() && index.row() < m_entries.size()); +- return m_entries.at(index.row()); +-} +- +-QModelIndex EntryModel::indexFromEntry(Entry* entry) const +-{ +- int row = m_entries.indexOf(entry); +- Q_ASSERT(row != -1); +- return index(row, 1); +-} +- +-void EntryModel::setGroup(Group* group) +-{ +- if (!group || group == m_group) { +- return; +- } +- +- beginResetModel(); +- +- severConnections(); +- +- m_group = group; +- m_allGroups.clear(); +- m_entries = group->entries(); +- m_orgEntries.clear(); +- +- makeConnections(group); +- +- endResetModel(); +-} +- +-void EntryModel::setEntries(const QList& entries) +-{ +- beginResetModel(); +- +- severConnections(); +- +- m_group = nullptr; +- m_allGroups.clear(); +- m_entries = entries; +- m_orgEntries = entries; +- +- QSet databases; +- +- for (Entry* entry : asConst(m_entries)) { +- databases.insert(entry->group()->database()); +- } +- +- for (Database* db : asConst(databases)) { +- Q_ASSERT(db); +- const QList groupList = db->rootGroup()->groupsRecursive(true); +- for (const Group* group : groupList) { +- m_allGroups.append(group); +- } +- +- if (db->metadata()->recycleBin()) { +- m_allGroups.removeOne(db->metadata()->recycleBin()); +- } +- } +- +- for (const Group* group : asConst(m_allGroups)) { +- makeConnections(group); +- } +- +- endResetModel(); +-} +- +-int EntryModel::rowCount(const QModelIndex& parent) const +-{ +- if (parent.isValid()) { +- return 0; +- } else { +- return m_entries.size(); +- } +-} +- +-int EntryModel::columnCount(const QModelIndex& parent) const +-{ +- // Advised by Qt documentation +- if (parent.isValid()) { +- return 0; +- } +- +- return 14; +-} +- +-QVariant EntryModel::data(const QModelIndex& index, int role) const +-{ +- if (!index.isValid()) { +- return QVariant(); +- } +- +- Entry* entry = entryFromIndex(index); +- EntryAttributes* attr = entry->attributes(); +- +- if (role == Qt::DisplayRole) { +- QString result; +- switch (index.column()) { +- case ParentGroup: +- if (entry->group()) { +- return entry->group()->name(); +- } +- break; +- case Title: +- result = entry->resolveMultiplePlaceholders(entry->title()); +- if (attr->isReference(EntryAttributes::TitleKey)) { +- result.prepend(tr("Ref: ", "Reference abbreviation")); +- } +- return result; +- case Username: +- if (config()->get(Config::GUI_HideUsernames).toBool()) { +- result = EntryModel::HiddenContentDisplay; +- } else { +- result = entry->resolveMultiplePlaceholders(entry->username()); +- } +- if (attr->isReference(EntryAttributes::UserNameKey)) { +- result.prepend(tr("Ref: ", "Reference abbreviation")); +- } +- if (entry->username().isEmpty() && !config()->get(Config::Security_PasswordEmptyPlaceholder).toBool()) { +- result = ""; +- } +- return result; +- case Password: +- if (config()->get(Config::GUI_HidePasswords).toBool()) { +- result = EntryModel::HiddenContentDisplay; +- } else { +- result = entry->resolveMultiplePlaceholders(entry->password()); +- } +- if (attr->isReference(EntryAttributes::PasswordKey)) { +- result.prepend(tr("Ref: ", "Reference abbreviation")); +- } +- if (entry->password().isEmpty() && !config()->get(Config::Security_PasswordEmptyPlaceholder).toBool()) { +- result = ""; +- } +- return result; +- case Url: +- result = entry->resolveMultiplePlaceholders(entry->displayUrl()); +- if (attr->isReference(EntryAttributes::URLKey)) { +- result.prepend(tr("Ref: ", "Reference abbreviation")); +- } +- return result; +- case Notes: +- if (!entry->notes().isEmpty()) { +- if (config()->get(Config::Security_HideNotes).toBool()) { +- result = EntryModel::HiddenContentDisplay; +- } else { +- // Display only first line of notes in simplified format if not hidden +- result = entry->notes().section("\n", 0, 0).simplified(); +- } +- if (attr->isReference(EntryAttributes::NotesKey)) { +- result.prepend(tr("Ref: ", "Reference abbreviation")); +- } +- } +- return result; +- case Expires: +- // Display either date of expiry or 'Never' +- result = entry->timeInfo().expires() +- ? entry->timeInfo().expiryTime().toLocalTime().toString(EntryModel::DateFormat) +- : tr("Never"); +- return result; +- case Created: +- result = entry->timeInfo().creationTime().toLocalTime().toString(EntryModel::DateFormat); +- return result; +- case Modified: +- result = entry->timeInfo().lastModificationTime().toLocalTime().toString(EntryModel::DateFormat); +- return result; +- case Accessed: +- result = entry->timeInfo().lastAccessTime().toLocalTime().toString(EntryModel::DateFormat); +- return result; +- case Attachments: { +- // Display comma-separated list of attachments +- QList attachments = entry->attachments()->keys(); +- for (const auto& attachment : attachments) { +- if (result.isEmpty()) { +- result.append(attachment); +- continue; +- } +- result.append(QString(", ") + attachment); +- } +- return result; +- } +- case Size: { +- const int unitsSize = 4; +- QString units[unitsSize] = {"B", "KiB", "MiB", "GiB"}; +- float resultInt = entry->size(); +- +- for (int i = 0; i < unitsSize; i++) { +- if (resultInt < 1024 || i == unitsSize - 1) { +- resultInt = qRound(resultInt * 100) / 100.0; +- result = QStringLiteral("%1 %2").arg(QString::number(resultInt), units[i]); +- break; +- } +- resultInt /= 1024.0; +- } +- +- return result; +- } +- } +- } else if (role == Qt::UserRole) { // Qt::UserRole is used as sort role, see EntryView::EntryView() +- switch (index.column()) { +- case Username: +- return entry->resolveMultiplePlaceholders(entry->username()); +- case Password: +- return entry->resolveMultiplePlaceholders(entry->password()); +- case Expires: +- // There seems to be no better way of expressing 'infinity' +- return entry->timeInfo().expires() ? entry->timeInfo().expiryTime() : QDateTime(QDate(9999, 1, 1)); +- case Created: +- return entry->timeInfo().creationTime(); +- case Modified: +- return entry->timeInfo().lastModificationTime(); +- case Accessed: +- return entry->timeInfo().lastAccessTime(); +- case Paperclip: +- // Display entries with attachments above those without when +- // sorting ascendingly (and vice versa when sorting descendingly) +- return !entry->attachments()->isEmpty(); +- case Totp: +- return entry->hasTotp(); +- case Size: +- return entry->size(); +- default: +- // For all other columns, simply use data provided by Qt::Display- +- // Role for sorting +- return data(index, Qt::DisplayRole); +- } +- } else if (role == Qt::DecorationRole) { +- switch (index.column()) { +- case ParentGroup: +- if (entry->group()) { +- return entry->group()->iconPixmap(); +- } +- break; +- case Title: +- return entry->iconPixmap(); +- case Paperclip: +- if (!entry->attachments()->isEmpty()) { +- return resources()->icon("paperclip"); +- } +- break; +- case Totp: +- if (entry->hasTotp()) { +- return resources()->icon("chronometer"); +- } +- break; +- } +- } else if (role == Qt::FontRole) { +- QFont font; +- if (entry->isExpired()) { +- font.setStrikeOut(true); +- } +- return font; +- } else if (role == Qt::ForegroundRole) { +- QColor foregroundColor; +- foregroundColor.setNamedColor(entry->foregroundColor()); +- if (entry->hasReferences()) { +- QPalette p; +- foregroundColor = p.color(QPalette::Current, QPalette::Text); +- int lightness = +- qMin(255, qMax(0, foregroundColor.lightness() + (foregroundColor.lightness() < 110 ? 85 : -51))); +- foregroundColor.setHsl(foregroundColor.hue(), foregroundColor.saturation(), lightness); +- return QVariant(foregroundColor); +- } else if (foregroundColor.isValid()) { +- return QVariant(foregroundColor); +- } +- } else if (role == Qt::BackgroundRole) { +- QColor backgroundColor; +- backgroundColor.setNamedColor(entry->backgroundColor()); +- if (backgroundColor.isValid()) { +- return QVariant(backgroundColor); +- } +- } else if (role == Qt::TextAlignmentRole) { +- if (index.column() == Paperclip) { +- return Qt::AlignCenter; +- } +- } +- +- return QVariant(); +-} +- +-QVariant EntryModel::headerData(int section, Qt::Orientation orientation, int role) const +-{ +- Q_UNUSED(orientation); +- +- if (role == Qt::DisplayRole) { +- switch (section) { +- case ParentGroup: +- return tr("Group"); +- case Title: +- return tr("Title"); +- case Username: +- return tr("Username"); +- case Password: +- return tr("Password"); +- case Url: +- return tr("URL"); +- case Notes: +- return tr("Notes"); +- case Expires: +- return tr("Expires"); +- case Created: +- return tr("Created"); +- case Modified: +- return tr("Modified"); +- case Accessed: +- return tr("Accessed"); +- case Attachments: +- return tr("Attachments"); +- case Size: +- return tr("Size"); +- } +- +- } else if (role == Qt::DecorationRole) { +- switch (section) { +- case Paperclip: +- return resources()->icon("paperclip"); +- case Totp: +- return resources()->icon("chronometer"); +- } +- } else if (role == Qt::ToolTipRole) { +- switch (section) { +- case ParentGroup: +- return tr("Group name"); +- case Title: +- return tr("Entry title"); +- case Username: +- return tr("Username"); +- case Password: +- return tr("Password"); +- case Url: +- return tr("URL"); +- case Notes: +- return tr("Entry notes"); +- case Expires: +- return tr("Entry expires at"); +- case Created: +- return tr("Creation date"); +- case Modified: +- return tr("Last modification date"); +- case Accessed: +- return tr("Last access date"); +- case Attachments: +- return tr("Attached files"); +- case Size: +- return tr("Entry size"); +- case Paperclip: +- return tr("Has attachments"); +- case Totp: +- return tr("Has TOTP one-time password"); +- } +- } +- +- return {}; +-} +- +-Qt::DropActions EntryModel::supportedDropActions() const +-{ +- return Qt::IgnoreAction; +-} +- +-Qt::DropActions EntryModel::supportedDragActions() const +-{ +- return (Qt::MoveAction | Qt::CopyAction); +-} +- +-Qt::ItemFlags EntryModel::flags(const QModelIndex& modelIndex) const +-{ +- if (!modelIndex.isValid()) { +- return Qt::NoItemFlags; +- } else { +- return QAbstractItemModel::flags(modelIndex) | Qt::ItemIsDragEnabled; +- } +-} +- +-QStringList EntryModel::mimeTypes() const +-{ +- QStringList types; +- types << QLatin1String("application/x-keepassx-entry"); +- return types; +-} +- +-QMimeData* EntryModel::mimeData(const QModelIndexList& indexes) const +-{ +- if (indexes.isEmpty()) { +- return nullptr; +- } +- +- QMimeData* data = new QMimeData(); +- QByteArray encoded; +- QDataStream stream(&encoded, QIODevice::WriteOnly); +- +- QSet seenEntries; +- +- for (const QModelIndex& index : indexes) { +- if (!index.isValid()) { +- continue; +- } +- +- Entry* entry = entryFromIndex(index); +- if (!seenEntries.contains(entry)) { +- // make sure we don't add entries multiple times when we get indexes +- // with the same row but different columns +- stream << entry->group()->database()->uuid() << entry->uuid(); +- seenEntries.insert(entry); +- } +- } +- +- if (seenEntries.isEmpty()) { +- delete data; +- return nullptr; +- } else { +- data->setData(mimeTypes().at(0), encoded); +- return data; +- } +-} +- +-void EntryModel::entryAboutToAdd(Entry* entry) +-{ +- if (!m_group && !m_orgEntries.contains(entry)) { +- return; +- } +- +- beginInsertRows(QModelIndex(), m_entries.size(), m_entries.size()); +- if (!m_group) { +- m_entries.append(entry); +- } +-} +- +-void EntryModel::entryAdded(Entry* entry) +-{ +- if (!m_group && !m_orgEntries.contains(entry)) { +- return; +- } +- +- if (m_group) { +- m_entries = m_group->entries(); +- } +- endInsertRows(); +-} +- +-void EntryModel::entryAboutToRemove(Entry* entry) +-{ +- beginRemoveRows(QModelIndex(), m_entries.indexOf(entry), m_entries.indexOf(entry)); +- if (!m_group) { +- m_entries.removeAll(entry); +- } +-} +- +-void EntryModel::entryRemoved() +-{ +- if (m_group) { +- m_entries = m_group->entries(); +- } +- endRemoveRows(); +-} +- +-void EntryModel::entryAboutToMoveUp(int row) +-{ +- beginMoveRows(QModelIndex(), row, row, QModelIndex(), row - 1); +- if (m_group) { +- m_entries.move(row, row - 1); +- } +-} +- +-void EntryModel::entryMovedUp() +-{ +- if (m_group) { +- m_entries = m_group->entries(); +- } +- endMoveRows(); +-} +- +-void EntryModel::entryAboutToMoveDown(int row) +-{ +- beginMoveRows(QModelIndex(), row, row, QModelIndex(), row + 2); +- if (m_group) { +- m_entries.move(row, row + 1); +- } +-} +- +-void EntryModel::entryMovedDown() +-{ +- if (m_group) { +- m_entries = m_group->entries(); +- } +- endMoveRows(); +-} +- +-void EntryModel::entryDataChanged(Entry* entry) +-{ +- int row = m_entries.indexOf(entry); +- emit dataChanged(index(row, 0), index(row, columnCount() - 1)); +-} +- +-void EntryModel::onConfigChanged(Config::ConfigKey key) +-{ +- switch (key) { +- case Config::GUI_HideUsernames: +- emit dataChanged(index(0, Username), index(rowCount() - 1, Username), {Qt::DisplayRole}); +- break; +- case Config::GUI_HidePasswords: +- emit dataChanged(index(0, Password), index(rowCount() - 1, Password), {Qt::DisplayRole}); +- break; +- default: +- break; +- } +-} +- +-void EntryModel::severConnections() +-{ +- if (m_group) { +- disconnect(m_group, nullptr, this, nullptr); +- } +- +- for (const Group* group : asConst(m_allGroups)) { +- disconnect(group, nullptr, this, nullptr); +- } +-} +- +-void EntryModel::makeConnections(const Group* group) +-{ +- connect(group, SIGNAL(entryAboutToAdd(Entry*)), SLOT(entryAboutToAdd(Entry*))); +- connect(group, SIGNAL(entryAdded(Entry*)), SLOT(entryAdded(Entry*))); +- connect(group, SIGNAL(entryAboutToRemove(Entry*)), SLOT(entryAboutToRemove(Entry*))); +- connect(group, SIGNAL(entryRemoved(Entry*)), SLOT(entryRemoved())); +- connect(group, SIGNAL(entryAboutToMoveUp(int)), SLOT(entryAboutToMoveUp(int))); +- connect(group, SIGNAL(entryMovedUp()), SLOT(entryMovedUp())); +- connect(group, SIGNAL(entryAboutToMoveDown(int)), SLOT(entryAboutToMoveDown(int))); +- connect(group, SIGNAL(entryMovedDown()), SLOT(entryMovedDown())); +- connect(group, SIGNAL(entryDataChanged(Entry*)), SLOT(entryDataChanged(Entry*))); +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EntryModel.h keepassxc-2.6.4-patched/src/gui/entry/EntryModel.h +--- keepassxc-2.6.4-orig/src/gui/entry/EntryModel.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/entry/EntryModel.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,95 +0,0 @@ +-/* +- * Copyright (C) 2010 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_ENTRYMODEL_H +-#define KEEPASSX_ENTRYMODEL_H +- +-#include +-#include +- +-#include "core/Config.h" +- +-class Entry; +-class Group; +- +-class EntryModel : public QAbstractTableModel +-{ +- Q_OBJECT +- +-public: +- enum ModelColumn +- { +- ParentGroup = 0, +- Title = 1, +- Username = 2, +- Password = 3, +- Url = 4, +- Notes = 5, +- Expires = 6, +- Created = 7, +- Modified = 8, +- Accessed = 9, +- Paperclip = 10, +- Attachments = 11, +- Totp = 12, +- Size = 13 +- }; +- +- explicit EntryModel(QObject* parent = nullptr); +- Entry* entryFromIndex(const QModelIndex& index) const; +- QModelIndex indexFromEntry(Entry* entry) const; +- +- int rowCount(const QModelIndex& parent = QModelIndex()) const override; +- int columnCount(const QModelIndex& parent = QModelIndex()) const override; +- QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; +- QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; +- Qt::DropActions supportedDropActions() const override; +- Qt::DropActions supportedDragActions() const override; +- Qt::ItemFlags flags(const QModelIndex& modelIndex) const override; +- QStringList mimeTypes() const override; +- QMimeData* mimeData(const QModelIndexList& indexes) const override; +- +- void setGroup(Group* group); +- void setEntries(const QList& entries); +- +-private slots: +- void entryAboutToAdd(Entry* entry); +- void entryAdded(Entry* entry); +- void entryAboutToRemove(Entry* entry); +- void entryRemoved(); +- void entryAboutToMoveUp(int row); +- void entryMovedUp(); +- void entryAboutToMoveDown(int row); +- void entryMovedDown(); +- void entryDataChanged(Entry* entry); +- +- void onConfigChanged(Config::ConfigKey key); +- +-private: +- void severConnections(); +- void makeConnections(const Group* group); +- +- Group* m_group; +- QList m_entries; +- QList m_orgEntries; +- QList m_allGroups; +- +- const QString HiddenContentDisplay; +- const Qt::DateFormat DateFormat; +-}; +- +-#endif // KEEPASSX_ENTRYMODEL_H +diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EntryURLModel.cpp keepassxc-2.6.4-patched/src/gui/entry/EntryURLModel.cpp +--- keepassxc-2.6.4-orig/src/gui/entry/EntryURLModel.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/entry/EntryURLModel.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,151 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "EntryURLModel.h" +- +-#include "core/Entry.h" +-#include "core/Resources.h" +-#include "core/Tools.h" +-#include "gui/styles/StateColorPalette.h" +- +-#include +- +-EntryURLModel::EntryURLModel(QObject* parent) +- : QStandardItemModel(parent) +- , m_entryAttributes(nullptr) +- , m_errorIcon(resources()->icon("dialog-error")) +-{ +-} +- +-void EntryURLModel::setEntryAttributes(EntryAttributes* entryAttributes) +-{ +- beginResetModel(); +- +- if (m_entryAttributes) { +- m_entryAttributes->disconnect(this); +- } +- +- m_entryAttributes = entryAttributes; +- +- if (m_entryAttributes) { +- updateAttributes(); +- // clang-format off +- connect(m_entryAttributes, SIGNAL(added(QString)), SLOT(updateAttributes())); +- connect(m_entryAttributes, SIGNAL(customKeyModified(QString)), SLOT(updateAttributes())); +- connect(m_entryAttributes, SIGNAL(removed(QString)), SLOT(updateAttributes())); +- connect(m_entryAttributes, SIGNAL(renamed(QString,QString)), SLOT(updateAttributes())); +- connect(m_entryAttributes, SIGNAL(reset()), SLOT(updateAttributes())); +- // clang-format on +- } +- +- endResetModel(); +-} +- +-QVariant EntryURLModel::data(const QModelIndex& index, int role) const +-{ +- if (!index.isValid()) { +- return {}; +- } +- +- const auto key = keyByIndex(index); +- if (key.isEmpty()) { +- return {}; +- } +- +- const auto value = m_entryAttributes->value(key); +- const auto urlValid = Tools::checkUrlValid(value); +- +- if (role == Qt::BackgroundRole && !urlValid) { +- StateColorPalette statePalette; +- return statePalette.color(StateColorPalette::ColorRole::Error); +- } else if (role == Qt::DecorationRole && !urlValid) { +- return m_errorIcon; +- } else if (role == Qt::DisplayRole || role == Qt::EditRole) { +- return value; +- } else if (role == Qt::ToolTipRole && !urlValid) { +- return tr("Invalid URL"); +- } +- +- return {}; +-} +- +-bool EntryURLModel::setData(const QModelIndex& index, const QVariant& value, int role) +-{ +- if (!index.isValid() || role != Qt::EditRole || value.type() != QVariant::String || value.toString().isEmpty()) { +- return false; +- } +- +- const int row = index.row(); +- const QString key = m_urls.at(row).first; +- const QString oldValue = m_urls.at(row).second; +- +- if (EntryAttributes::isDefaultAttribute(key) || m_entryAttributes->containsValue(value.toString())) { +- return false; +- } +- +- m_entryAttributes->set(key, value.toString()); +- +- emit dataChanged(this->index(row, 0), this->index(row, columnCount() - 1)); +- return true; +-} +- +-QModelIndex EntryURLModel::indexByKey(const QString& key) const +-{ +- int row = -1; +- for (int i = 0; i < m_urls.size(); ++i) { +- if (m_urls.at(i).first == key) { +- row = i; +- break; +- } +- } +- +- if (row == -1) { +- return QModelIndex(); +- } else { +- return index(row, 0); +- } +-} +- +-QString EntryURLModel::keyByIndex(const QModelIndex& index) const +-{ +- if (!index.isValid()) { +- return QString(); +- } else { +- return m_urls.at(index.row()).first; +- } +-} +- +-void EntryURLModel::updateAttributes() +-{ +- clear(); +- m_urls.clear(); +- +- const QList attributesKeyList = m_entryAttributes->keys(); +- for (const QString& key : attributesKeyList) { +- if (!EntryAttributes::isDefaultAttribute(key) && key.contains("KP2A_URL")) { +- const auto value = m_entryAttributes->value(key); +- m_urls.append(qMakePair(key, value)); +- +- auto* item = new QStandardItem(value); +- if (m_entryAttributes->isProtected(key)) { +- item->setFlags(item->flags() & ~Qt::ItemIsEnabled); +- } +- appendRow(item); +- } +- } +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EntryURLModel.h keepassxc-2.6.4-patched/src/gui/entry/EntryURLModel.h +--- keepassxc-2.6.4-orig/src/gui/entry/EntryURLModel.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/entry/EntryURLModel.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,62 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSXC_ENTRYURLMODEL_H +-#define KEEPASSXC_ENTRYURLMODEL_H +- +-#include +-#include +- +-class EntryAttributes; +- +-class URLModelIconDelegate : public QStyledItemDelegate +-{ +-public: +- using QStyledItemDelegate::QStyledItemDelegate; +- +-protected: +- void initStyleOption(QStyleOptionViewItem* option, const QModelIndex& index) const override +- { +- QStyledItemDelegate::initStyleOption(option, index); +- option->decorationPosition = QStyleOptionViewItem::Right; +- } +-}; +- +-class EntryURLModel : public QStandardItemModel +-{ +- Q_OBJECT +- +-public: +- explicit EntryURLModel(QObject* parent = nullptr); +- void setEntryAttributes(EntryAttributes* entryAttributes); +- void insertRow(const QString& key, const QString& value); +- bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole) override; +- QVariant data(const QModelIndex& index, int role) const override; +- QModelIndex indexByKey(const QString& key) const; +- QString keyByIndex(const QModelIndex& index) const; +- +-private slots: +- void updateAttributes(); +- +-private: +- QList> m_urls; +- EntryAttributes* m_entryAttributes; +- QIcon m_errorIcon; +-}; +- +-#endif // KEEPASSXC_ENTRYURLMODEL_H +diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EntryView.cpp keepassxc-2.6.4-patched/src/gui/entry/EntryView.cpp +--- keepassxc-2.6.4-orig/src/gui/entry/EntryView.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/entry/EntryView.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,476 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * Copyright (C) 2010 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "EntryView.h" +- +-#include +-#include +-#include +-#include +-#include +- +-#include "gui/SortFilterHideProxyModel.h" +- +-EntryView::EntryView(QWidget* parent) +- : QTreeView(parent) +- , m_model(new EntryModel(this)) +- , m_sortModel(new SortFilterHideProxyModel(this)) +- , m_lastIndex(-1) +- , m_lastOrder(Qt::AscendingOrder) +- , m_headerMenu(new QMenu(this)) +-{ +- m_sortModel->setSourceModel(m_model); +- m_sortModel->setDynamicSortFilter(true); +- m_sortModel->setSortLocaleAware(true); +- m_sortModel->setSortCaseSensitivity(Qt::CaseInsensitive); +- // Use Qt::UserRole as sort role, see EntryModel::data() +- m_sortModel->setSortRole(Qt::UserRole); +- QTreeView::setModel(m_sortModel); +- +- setUniformRowHeights(true); +- setRootIsDecorated(false); +- setAlternatingRowColors(true); +- setDragEnabled(true); +- setSortingEnabled(true); +- setSelectionMode(QAbstractItemView::ExtendedSelection); +- +- // QAbstractItemView::startDrag() uses this property as the default drag action +- setDefaultDropAction(Qt::MoveAction); +- +- // clang-format off +- connect(this, SIGNAL(doubleClicked(QModelIndex)), SLOT(emitEntryActivated(QModelIndex))); +- connect(selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), SLOT(emitEntrySelectionChanged())); +- // clang-format on +- +- new QShortcut(Qt::CTRL + Qt::Key_F10, this, SLOT(contextMenuShortcutPressed()), nullptr, Qt::WidgetShortcut); +- +- resetViewToDefaults(); +- +- // Actions to toggle column visibility, each carrying the corresponding +- // column index as data +- m_columnActions = new QActionGroup(this); +- m_columnActions->setExclusive(false); +- for (int visualIndex = 1; visualIndex < header()->count(); ++visualIndex) { +- int logicalIndex = header()->logicalIndex(visualIndex); +- QString caption = m_model->headerData(logicalIndex, Qt::Horizontal, Qt::DisplayRole).toString(); +- if (logicalIndex == EntryModel::Paperclip) { +- caption = tr("Has attachments", "Entry attachment icon toggle"); +- } else if (logicalIndex == EntryModel::Totp) { +- caption = tr("Has TOTP", "Entry TOTP icon toggle"); +- } +- +- QAction* action = m_headerMenu->addAction(caption); +- action->setCheckable(true); +- action->setData(logicalIndex); +- m_columnActions->addAction(action); +- } +- connect(m_columnActions, SIGNAL(triggered(QAction*)), this, SLOT(toggleColumnVisibility(QAction*))); +- connect(header(), &QHeaderView::sortIndicatorChanged, [this](int index, Qt::SortOrder order) { +- Q_UNUSED(order) +- header()->setSortIndicatorShown(index != EntryModel::Paperclip && index != EntryModel::Totp); +- }); +- +- m_headerMenu->addSeparator(); +- m_headerMenu->addAction(tr("Fit to window"), this, SLOT(fitColumnsToWindow())); +- m_headerMenu->addAction(tr("Fit to contents"), this, SLOT(fitColumnsToContents())); +- m_headerMenu->addSeparator(); +- m_headerMenu->addAction(tr("Reset to defaults"), this, SLOT(resetViewToDefaults())); +- +- header()->setMinimumSectionSize(24); +- header()->setDefaultSectionSize(100); +- header()->setStretchLastSection(false); +- header()->setContextMenuPolicy(Qt::CustomContextMenu); +- +- connect(header(), SIGNAL(customContextMenuRequested(QPoint)), SLOT(showHeaderMenu(QPoint))); +- connect(header(), SIGNAL(sectionCountChanged(int, int)), SIGNAL(viewStateChanged())); +- connect(header(), SIGNAL(sectionMoved(int, int, int)), SIGNAL(viewStateChanged())); +- connect(header(), SIGNAL(sectionResized(int, int, int)), SIGNAL(viewStateChanged())); +- connect(header(), SIGNAL(sortIndicatorChanged(int, Qt::SortOrder)), SLOT(sortIndicatorChanged(int, Qt::SortOrder))); +- +- // clang-format off +-} +- +-void EntryView::contextMenuShortcutPressed() +-{ +- auto index = currentIndex(); +- if (hasFocus() && index.isValid()) { +- emit customContextMenuRequested(visualRect(index).bottomLeft()); +- } +-} +- +-void EntryView::sortIndicatorChanged(int logicalIndex, Qt::SortOrder order) +-{ +- int oldIndex = m_lastIndex; +- m_lastIndex = logicalIndex; +- Qt::SortOrder oldOrder = m_lastOrder; +- m_lastOrder = order; +- +- if (oldIndex == logicalIndex // same index +- && oldOrder == Qt::DescendingOrder // old order is descending +- && order == Qt::AscendingOrder) // new order is ascending +- { +- // a change from descending to ascending on the same column occurred +- // this sets the header into no sort order +- header()->setSortIndicator(-1, Qt::AscendingOrder); +- // do not emit any signals, header()->setSortIndicator recursively calls this +- // function and the signals are emitted in the else part +- } else { +- // call emitEntrySelectionChanged even though the selection did not really change +- // this triggers the evaluation of the menu activation and anyway, the position +- // of the selected entry within the widget did change +- emitEntrySelectionChanged(); +- emit viewStateChanged(); +- } +-} +- +-void EntryView::keyPressEvent(QKeyEvent* event) +-{ +- if ((event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return) && currentIndex().isValid()) { +- emitEntryActivated(currentIndex()); +-#ifdef Q_OS_MACOS +- // Pressing return does not emit the QTreeView::activated signal on mac os +- emit activated(currentIndex()); +-#endif +- } +- +- int last = m_model->rowCount() - 1; +- if (last > 0) { +- QAccessibleEvent accessibleEvent(this, QAccessible::PageChanged); +- if (event->key() == Qt::Key_Up && currentIndex().row() == 0) { +- QModelIndex index = m_sortModel->mapToSource(m_sortModel->index(last, 0)); +- setCurrentEntry(m_model->entryFromIndex(index)); +- QAccessible::updateAccessibility(&accessibleEvent); +- return; +- } +- +- if (event->key() == Qt::Key_Down && currentIndex().row() == last) { +- QModelIndex index = m_sortModel->mapToSource(m_sortModel->index(0, 0)); +- setCurrentEntry(m_model->entryFromIndex(index)); +- QAccessible::updateAccessibility(&accessibleEvent); +- return; +- } +- } +- +- QTreeView::keyPressEvent(event); +-} +- +-void EntryView::focusInEvent(QFocusEvent* event) +-{ +- emit entrySelectionChanged(currentEntry()); +- QTreeView::focusInEvent(event); +-} +- +-void EntryView::focusOutEvent(QFocusEvent* event) +-{ +- emit entrySelectionChanged(nullptr); +- QTreeView::focusOutEvent(event); +-} +- +-void EntryView::displayGroup(Group* group) +-{ +- m_model->setGroup(group); +- header()->hideSection(EntryModel::ParentGroup); +- setFirstEntryActive(); +- m_inSearchMode = false; +-} +- +-void EntryView::displaySearch(const QList& entries) +-{ +- m_model->setEntries(entries); +- header()->showSection(EntryModel::ParentGroup); +- +- // Reset sort column to 'Group', overrides DatabaseWidgetStateSync +- m_sortModel->sort(EntryModel::ParentGroup, Qt::AscendingOrder); +- sortByColumn(EntryModel::ParentGroup, Qt::AscendingOrder); +- +- setFirstEntryActive(); +- m_inSearchMode = true; +-} +- +-void EntryView::setFirstEntryActive() +-{ +- if (m_model->rowCount() > 0) { +- QModelIndex index = m_sortModel->mapToSource(m_sortModel->index(0, 0)); +- setCurrentEntry(m_model->entryFromIndex(index)); +- } else { +- emit entrySelectionChanged(currentEntry()); +- } +-} +- +-bool EntryView::inSearchMode() +-{ +- return m_inSearchMode; +-} +- +-bool EntryView::isSorted() +-{ +- return header()->sortIndicatorSection() != -1; +-} +- +-void EntryView::emitEntryActivated(const QModelIndex& index) +-{ +- Entry* entry = entryFromIndex(index); +- emit entryActivated(entry, static_cast(m_sortModel->mapToSource(index).column())); +-} +- +-void EntryView::emitEntrySelectionChanged() +-{ +- emit entrySelectionChanged(currentEntry()); +-} +- +-void EntryView::setModel(QAbstractItemModel* model) +-{ +- Q_UNUSED(model); +- Q_ASSERT(false); +-} +- +-Entry* EntryView::currentEntry() +-{ +- QModelIndexList list = selectionModel()->selectedRows(); +- if (list.size() == 1) { +- return m_model->entryFromIndex(m_sortModel->mapToSource(list.first())); +- } else { +- return nullptr; +- } +-} +- +-int EntryView::numberOfSelectedEntries() +-{ +- return selectionModel()->selectedRows().size(); +-} +- +-void EntryView::setCurrentEntry(Entry* entry) +-{ +- selectionModel()->setCurrentIndex(m_sortModel->mapFromSource(m_model->indexFromEntry(entry)), +- QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows); +-} +- +-Entry* EntryView::entryFromIndex(const QModelIndex& index) +-{ +- if (index.isValid()) { +- return m_model->entryFromIndex(m_sortModel->mapToSource(index)); +- } else { +- return nullptr; +- } +-} +- +-int EntryView::currentEntryIndex() +-{ +- QModelIndexList list = selectionModel()->selectedRows(); +- if (list.size() == 1) { +- auto index = m_sortModel->mapToSource(list.first()); +- return index.row(); +- } else { +- return -1; +- } +-} +- +-/** +- * Get current view state +- */ +-QByteArray EntryView::viewState() const +-{ +- return header()->saveState(); +-} +- +-/** +- * Set view state +- */ +-bool EntryView::setViewState(const QByteArray& state) +-{ +- // Reset to unsorted first (https://bugreports.qt.io/browse/QTBUG-86694) +- header()->setSortIndicator(-1, Qt::AscendingOrder); +- bool status = header()->restoreState(state); +- resetFixedColumns(); +- m_columnsNeedRelayout = state.isEmpty(); +- return status; +-} +- +-/** +- * Sync checkable menu actions to current state and display header context +- * menu at specified position +- */ +-void EntryView::showHeaderMenu(const QPoint& position) +-{ +- const QList actions = m_columnActions->actions(); +- for (auto& action : actions) { +- Q_ASSERT(static_cast(action->data().type()) == QMetaType::Int); +- if (static_cast(action->data().type()) != QMetaType::Int) { +- continue; +- } +- int columnIndex = action->data().toInt(); +- action->setChecked(!isColumnHidden(columnIndex)); +- } +- +- m_headerMenu->popup(mapToGlobal(position)); +-} +- +-/** +- * Toggle visibility of column referenced by triggering action +- */ +-void EntryView::toggleColumnVisibility(QAction* action) +-{ +- // Verify action carries a column index as data. Since QVariant.toInt() +- // below will accept anything that's interpretable as int, perform a type +- // check here to make sure data actually IS int +- Q_ASSERT(static_cast(action->data().type()) == QMetaType::Int); +- if (static_cast(action->data().type()) != QMetaType::Int) { +- return; +- } +- +- // Toggle column visibility. Visible columns will only be hidden if at +- // least one visible column remains, as the table header will disappear +- // entirely when all columns are hidden +- int columnIndex = action->data().toInt(); +- if (action->isChecked()) { +- header()->showSection(columnIndex); +- if (header()->sectionSize(columnIndex) == 0) { +- header()->resizeSection(columnIndex, header()->defaultSectionSize()); +- } +- resetFixedColumns(); +- return; +- } +- if ((header()->count() - header()->hiddenSectionCount()) > 1) { +- header()->hideSection(columnIndex); +- return; +- } +- action->setChecked(true); +-} +- +-/** +- * Resize columns to fit all visible columns within the available space +- * +- * NOTE: +- * If EntryView::resizeEvent() is overridden at some point in the future, +- * its implementation MUST call the corresponding parent method using +- * 'QTreeView::resizeEvent(event)'. Without this, fitting to window will +- * be broken and/or work unreliably (stumbled upon during testing) +- * +- * NOTE: +- * Testing showed that it is absolutely necessary to emit signal 'viewState +- * Changed' here. Without this, an incomplete view state might get saved by +- * 'DatabaseWidgetStateSync' (e.g. only some columns resized) +- */ +-void EntryView::fitColumnsToWindow() +-{ +- header()->setSectionResizeMode(QHeaderView::Stretch); +- resetFixedColumns(); +- QCoreApplication::processEvents(); +- header()->setSectionResizeMode(QHeaderView::Interactive); +- resetFixedColumns(); +- emit viewStateChanged(); +-} +- +-/** +- * Resize columns to fit current table contents, i.e. make all contents +- * entirely visible +- */ +-void EntryView::fitColumnsToContents() +-{ +- header()->setSectionResizeMode(QHeaderView::ResizeToContents); +- resetFixedColumns(); +- QCoreApplication::processEvents(); +- header()->setSectionResizeMode(QHeaderView::Interactive); +- resetFixedColumns(); +- emit viewStateChanged(); +-} +- +-/** +- * Mark icon-only columns as fixed and resize them to their minimum section size. +- */ +-void EntryView::resetFixedColumns() +-{ +- if (!isColumnHidden(EntryModel::Paperclip)) { +- header()->setSectionResizeMode(EntryModel::Paperclip, QHeaderView::Fixed); +- header()->resizeSection(EntryModel::Paperclip, header()->minimumSectionSize()); +- } +- +- if (!isColumnHidden(EntryModel::Totp)) { +- header()->setSectionResizeMode(EntryModel::Totp, QHeaderView::Fixed); +- header()->resizeSection(EntryModel::Totp, header()->minimumSectionSize()); +- } +-} +- +-/** +- * Reset item view to defaults. +- */ +-void EntryView::resetViewToDefaults() +-{ +- // Reduce number of columns that are shown by default +- if (m_inSearchMode) { +- header()->showSection(EntryModel::ParentGroup); +- } else { +- header()->hideSection(EntryModel::ParentGroup); +- } +- header()->showSection(EntryModel::Title); +- header()->showSection(EntryModel::Username); +- header()->showSection(EntryModel::Url); +- header()->showSection(EntryModel::Notes); +- header()->showSection(EntryModel::Modified); +- header()->showSection(EntryModel::Paperclip); +- header()->showSection(EntryModel::Totp); +- +- header()->hideSection(EntryModel::Password); +- header()->hideSection(EntryModel::Expires); +- header()->hideSection(EntryModel::Created); +- header()->hideSection(EntryModel::Accessed); +- header()->hideSection(EntryModel::Attachments); +- header()->hideSection(EntryModel::Size); +- +- // Reset column order to logical indices +- for (int i = 0; i < header()->count(); ++i) { +- header()->moveSection(header()->visualIndex(i), i); +- } +- +- // Reorder some columns +- header()->moveSection(header()->visualIndex(EntryModel::Paperclip), 1); +- header()->moveSection(header()->visualIndex(EntryModel::Totp), 2); +- +- // Sort by title or group (depending on the mode) +- m_sortModel->sort(EntryModel::Title, Qt::AscendingOrder); +- sortByColumn(EntryModel::Title, Qt::AscendingOrder); +- +- if (m_inSearchMode) { +- m_sortModel->sort(EntryModel::ParentGroup, Qt::AscendingOrder); +- sortByColumn(EntryModel::ParentGroup, Qt::AscendingOrder); +- } +- +- // The following call only relayouts reliably if the widget has been shown +- // already, so only do it if the widget is visible and let showEvent() handle +- // the initial default layout. +- if (isVisible()) { +- fitColumnsToWindow(); +- } +-} +- +-void EntryView::showEvent(QShowEvent* event) +-{ +- QTreeView::showEvent(event); +- +- // Check if header columns need to be resized to sensible defaults. +- // This is only needed if no previous view state has been loaded. +- if (m_columnsNeedRelayout) { +- fitColumnsToWindow(); +- m_columnsNeedRelayout = false; +- } +-} +- +-bool EntryView::isColumnHidden(int logicalIndex) +-{ +- return header()->isSectionHidden(logicalIndex) || header()->sectionSize(logicalIndex) == 0; +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/entry/EntryView.h keepassxc-2.6.4-patched/src/gui/entry/EntryView.h +--- keepassxc-2.6.4-orig/src/gui/entry/EntryView.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/entry/EntryView.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,90 +0,0 @@ +-/* +- * Copyright (C) 2018 KeePassXC Team +- * Copyright (C) 2010 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_ENTRYVIEW_H +-#define KEEPASSX_ENTRYVIEW_H +- +-#include +- +-#include "gui/entry/EntryModel.h" +- +-class Entry; +-class EntryModel; +-class Group; +-class SortFilterHideProxyModel; +-class QActionGroup; +- +-class EntryView : public QTreeView +-{ +- Q_OBJECT +- +-public: +- explicit EntryView(QWidget* parent = nullptr); +- void setModel(QAbstractItemModel* model) override; +- Entry* currentEntry(); +- void setCurrentEntry(Entry* entry); +- Entry* entryFromIndex(const QModelIndex& index); +- int currentEntryIndex(); +- bool inSearchMode(); +- bool isSorted(); +- int numberOfSelectedEntries(); +- void setFirstEntryActive(); +- QByteArray viewState() const; +- bool setViewState(const QByteArray& state); +- +- void displayGroup(Group* group); +- void displaySearch(const QList& entries); +- +-signals: +- void entryActivated(Entry* entry, EntryModel::ModelColumn column); +- void entrySelectionChanged(Entry* entry); +- void viewStateChanged(); +- +-protected: +- void keyPressEvent(QKeyEvent* event) override; +- void focusInEvent(QFocusEvent* event) override; +- void focusOutEvent(QFocusEvent* event) override; +- void showEvent(QShowEvent* event) override; +- +-private slots: +- void emitEntryActivated(const QModelIndex& index); +- void emitEntrySelectionChanged(); +- void showHeaderMenu(const QPoint& position); +- void toggleColumnVisibility(QAction* action); +- void fitColumnsToWindow(); +- void fitColumnsToContents(); +- void resetViewToDefaults(); +- void contextMenuShortcutPressed(); +- void sortIndicatorChanged(int logicalIndex, Qt::SortOrder order); +- +-private: +- void resetFixedColumns(); +- bool isColumnHidden(int logicalIndex); +- +- EntryModel* const m_model; +- SortFilterHideProxyModel* const m_sortModel; +- int m_lastIndex; +- Qt::SortOrder m_lastOrder; +- bool m_inSearchMode = false; +- bool m_columnsNeedRelayout = true; +- +- QMenu* m_headerMenu; +- QActionGroup* m_columnActions; +-}; +- +-#endif // KEEPASSX_ENTRYVIEW_H +diff -urNr keepassxc-2.6.4-orig/src/gui/EntryPreviewWidget.cpp keepassxc-2.6.4-patched/src/gui/EntryPreviewWidget.cpp +--- keepassxc-2.6.4-orig/src/gui/EntryPreviewWidget.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/EntryPreviewWidget.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,421 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "EntryPreviewWidget.h" +-#include "Font.h" +-#include "ui_EntryPreviewWidget.h" +- +-#include +-#include +- +-#include "core/Config.h" +-#include "core/Resources.h" +-#include "entry/EntryAttachmentsModel.h" +-#include "gui/Clipboard.h" +-#if defined(WITH_XC_KEESHARE) +-#include "keeshare/KeeShare.h" +-#endif +- +-namespace +-{ +- constexpr int GeneralTabIndex = 0; +-} +- +-EntryPreviewWidget::EntryPreviewWidget(QWidget* parent) +- : QWidget(parent) +- , m_ui(new Ui::EntryPreviewWidget()) +- , m_locked(false) +- , m_currentEntry(nullptr) +- , m_currentGroup(nullptr) +- , m_selectedTabEntry(0) +- , m_selectedTabGroup(0) +-{ +- m_ui->setupUi(this); +- +- // Entry +- m_ui->entryTotpButton->setIcon(resources()->icon("chronometer")); +- m_ui->entryCloseButton->setIcon(resources()->icon("dialog-close")); +- m_ui->togglePasswordButton->setIcon(resources()->onOffIcon("password-show", true)); +- m_ui->toggleEntryNotesButton->setIcon(resources()->onOffIcon("password-show", true)); +- m_ui->toggleGroupNotesButton->setIcon(resources()->onOffIcon("password-show", true)); +- +- m_ui->entryAttachmentsWidget->setReadOnly(true); +- m_ui->entryAttachmentsWidget->setButtonsVisible(false); +- +- // Match background of read-only text edit fields with the window +- m_ui->entryPasswordLabel->setBackgroundRole(QPalette::Window); +- m_ui->entryUsernameLabel->setBackgroundRole(QPalette::Window); +- m_ui->entryNotesTextEdit->setBackgroundRole(QPalette::Window); +- m_ui->groupNotesTextEdit->setBackgroundRole(QPalette::Window); +- // Align notes text with label text +- m_ui->entryNotesTextEdit->document()->setDocumentMargin(0); +- m_ui->groupNotesTextEdit->document()->setDocumentMargin(0); +- +- connect(m_ui->entryUrlLabel, SIGNAL(linkActivated(QString)), SLOT(openEntryUrl())); +- +- connect(m_ui->entryTotpButton, SIGNAL(toggled(bool)), m_ui->entryTotpLabel, SLOT(setVisible(bool))); +- connect(m_ui->entryCloseButton, SIGNAL(clicked()), SLOT(hide())); +- connect(m_ui->togglePasswordButton, SIGNAL(clicked(bool)), SLOT(setPasswordVisible(bool))); +- connect(m_ui->toggleEntryNotesButton, SIGNAL(clicked(bool)), SLOT(setEntryNotesVisible(bool))); +- connect(m_ui->toggleGroupNotesButton, SIGNAL(clicked(bool)), SLOT(setGroupNotesVisible(bool))); +- connect(m_ui->entryTabWidget, SIGNAL(tabBarClicked(int)), SLOT(updateTabIndexes()), Qt::QueuedConnection); +- connect(&m_totpTimer, SIGNAL(timeout()), SLOT(updateTotpLabel())); +- +- connect(config(), &Config::changed, this, [this](Config::ConfigKey key) { +- if (key == Config::GUI_HidePreviewPanel) { +- setVisible(!config()->get(Config::GUI_HidePreviewPanel).toBool()); +- } +- }); +- +- // Group +- m_ui->groupCloseButton->setIcon(resources()->icon("dialog-close")); +- connect(m_ui->groupCloseButton, SIGNAL(clicked()), SLOT(hide())); +- connect(m_ui->groupTabWidget, SIGNAL(tabBarClicked(int)), SLOT(updateTabIndexes()), Qt::QueuedConnection); +- +- setFocusProxy(m_ui->entryTabWidget); +- +-#if !defined(WITH_XC_KEESHARE) +- removeTab(m_ui->groupTabWidget, m_ui->groupShareTab); +-#endif +-} +- +-EntryPreviewWidget::~EntryPreviewWidget() +-{ +-} +- +-void EntryPreviewWidget::setEntry(Entry* selectedEntry) +-{ +- if (!selectedEntry) { +- hide(); +- return; +- } +- +- m_currentEntry = selectedEntry; +- +- updateEntryHeaderLine(); +- updateEntryTotp(); +- updateEntryGeneralTab(); +- updateEntryAdvancedTab(); +- updateEntryAutotypeTab(); +- +- setVisible(!config()->get(Config::GUI_HidePreviewPanel).toBool()); +- +- m_ui->stackedWidget->setCurrentWidget(m_ui->pageEntry); +- const int tabIndex = m_ui->entryTabWidget->isTabEnabled(m_selectedTabEntry) ? m_selectedTabEntry : GeneralTabIndex; +- Q_ASSERT(m_ui->entryTabWidget->isTabEnabled(GeneralTabIndex)); +- m_ui->entryTabWidget->setCurrentIndex(tabIndex); +-} +- +-void EntryPreviewWidget::setGroup(Group* selectedGroup) +-{ +- if (!selectedGroup) { +- hide(); +- return; +- } +- +- m_currentGroup = selectedGroup; +- updateGroupHeaderLine(); +- updateGroupGeneralTab(); +- +-#if defined(WITH_XC_KEESHARE) +- updateGroupSharingTab(); +-#endif +- +- setVisible(!config()->get(Config::GUI_HidePreviewPanel).toBool()); +- +- m_ui->stackedWidget->setCurrentWidget(m_ui->pageGroup); +- const int tabIndex = m_ui->groupTabWidget->isTabEnabled(m_selectedTabGroup) ? m_selectedTabGroup : GeneralTabIndex; +- Q_ASSERT(m_ui->groupTabWidget->isTabEnabled(GeneralTabIndex)); +- m_ui->groupTabWidget->setCurrentIndex(tabIndex); +-} +- +-void EntryPreviewWidget::setDatabaseMode(DatabaseWidget::Mode mode) +-{ +- m_locked = mode == DatabaseWidget::Mode::LockedMode; +- if (m_locked) { +- return; +- } +- +- if (mode == DatabaseWidget::Mode::ViewMode) { +- if (m_currentGroup && m_ui->stackedWidget->currentWidget() == m_ui->pageGroup) { +- setGroup(m_currentGroup); +- } else if (m_currentEntry) { +- setEntry(m_currentEntry); +- } else { +- hide(); +- } +- } +-} +- +-void EntryPreviewWidget::updateEntryHeaderLine() +-{ +- Q_ASSERT(m_currentEntry); +- const QString title = m_currentEntry->resolveMultiplePlaceholders(m_currentEntry->title()); +- m_ui->entryTitleLabel->setRawText(hierarchy(m_currentEntry->group(), title)); +- m_ui->entryIcon->setPixmap(m_currentEntry->iconPixmap(IconSize::Large)); +-} +- +-void EntryPreviewWidget::updateEntryTotp() +-{ +- Q_ASSERT(m_currentEntry); +- const bool hasTotp = m_currentEntry->hasTotp(); +- m_ui->entryTotpButton->setVisible(hasTotp); +- m_ui->entryTotpLabel->hide(); +- m_ui->entryTotpButton->setChecked(false); +- +- if (hasTotp) { +- m_totpTimer.start(1000); +- updateTotpLabel(); +- } else { +- m_ui->entryTotpLabel->clear(); +- m_totpTimer.stop(); +- } +-} +- +-void EntryPreviewWidget::setPasswordVisible(bool state) +-{ +- const QString password = m_currentEntry->resolveMultiplePlaceholders(m_currentEntry->password()); +- if (state) { +- m_ui->entryPasswordLabel->setText(password); +- m_ui->entryPasswordLabel->setCursorPosition(0); +- m_ui->entryPasswordLabel->setFont(Font::fixedFont()); +- } else if (password.isEmpty() && !config()->get(Config::Security_PasswordEmptyPlaceholder).toBool()) { +- m_ui->entryPasswordLabel->setText(""); +- } else { +- m_ui->entryPasswordLabel->setText(QString("\u25cf").repeated(6)); +- } +- m_ui->togglePasswordButton->setIcon(resources()->onOffIcon("password-show", state)); +-} +- +-void EntryPreviewWidget::setEntryNotesVisible(bool state) +-{ +- setNotesVisible(m_ui->entryNotesTextEdit, m_currentEntry->notes(), state); +- m_ui->toggleEntryNotesButton->setIcon(resources()->onOffIcon("password-show", state)); +-} +- +-void EntryPreviewWidget::setGroupNotesVisible(bool state) +-{ +- setNotesVisible(m_ui->groupNotesTextEdit, m_currentGroup->notes(), state); +- m_ui->toggleGroupNotesButton->setIcon(resources()->onOffIcon("password-show", state)); +-} +- +-void EntryPreviewWidget::setNotesVisible(QTextEdit* notesWidget, const QString& notes, bool state) +-{ +- if (state) { +- notesWidget->setPlainText(notes); +- notesWidget->moveCursor(QTextCursor::Start); +- notesWidget->ensureCursorVisible(); +- } else { +- if (!notes.isEmpty()) { +- notesWidget->setPlainText(QString("\u25cf").repeated(6)); +- } +- } +-} +- +-void EntryPreviewWidget::updateEntryGeneralTab() +-{ +- Q_ASSERT(m_currentEntry); +- m_ui->entryUsernameLabel->setText(m_currentEntry->resolveMultiplePlaceholders(m_currentEntry->username())); +- m_ui->entryUsernameLabel->setCursorPosition(0); +- +- if (config()->get(Config::Security_HidePasswordPreviewPanel).toBool()) { +- // Hide password +- setPasswordVisible(false); +- // Show the password toggle button if there are dots in the label +- m_ui->togglePasswordButton->setVisible(!m_ui->entryPasswordLabel->text().isEmpty()); +- m_ui->togglePasswordButton->setChecked(false); +- } else { +- // Show password +- setPasswordVisible(true); +- m_ui->togglePasswordButton->setVisible(false); +- } +- +- if (config()->get(Config::Security_HideNotes).toBool()) { +- setEntryNotesVisible(false); +- m_ui->toggleEntryNotesButton->setVisible(!m_ui->entryNotesTextEdit->toPlainText().isEmpty()); +- m_ui->toggleEntryNotesButton->setChecked(false); +- } else { +- setEntryNotesVisible(true); +- m_ui->toggleEntryNotesButton->setVisible(false); +- } +- +- if (config()->get(Config::GUI_MonospaceNotes).toBool()) { +- m_ui->entryNotesTextEdit->setFont(Font::fixedFont()); +- } else { +- m_ui->entryNotesTextEdit->setFont(Font::defaultFont()); +- } +- +- m_ui->entryUrlLabel->setRawText(m_currentEntry->displayUrl()); +- const QString url = m_currentEntry->url(); +- if (!url.isEmpty()) { +- // URL is well formed and can be opened in a browser +- m_ui->entryUrlLabel->setUrl(m_currentEntry->resolveMultiplePlaceholders(url)); +- m_ui->entryUrlLabel->setCursor(Qt::PointingHandCursor); +- m_ui->entryUrlLabel->setOpenExternalLinks(false); +- } else { +- m_ui->entryUrlLabel->setUrl({}); +- m_ui->entryUrlLabel->setCursor(Qt::ArrowCursor); +- } +- +- const TimeInfo entryTime = m_currentEntry->timeInfo(); +- const QString expires = +- entryTime.expires() ? entryTime.expiryTime().toLocalTime().toString(Qt::DefaultLocaleShortDate) : tr("Never"); +- m_ui->entryExpirationLabel->setText(expires); +-} +- +-void EntryPreviewWidget::updateEntryAdvancedTab() +-{ +- Q_ASSERT(m_currentEntry); +- m_ui->entryAttributesEdit->clear(); +- const EntryAttributes* attributes = m_currentEntry->attributes(); +- const QStringList customAttributes = attributes->customKeys(); +- const bool hasAttributes = !customAttributes.isEmpty(); +- const bool hasAttachments = !m_currentEntry->attachments()->isEmpty(); +- +- setTabEnabled(m_ui->entryTabWidget, m_ui->entryAdvancedTab, hasAttributes || hasAttachments); +- if (hasAttributes) { +- QString attributesText(""); +- for (const QString& key : customAttributes) { +- QString value; +- if (m_currentEntry->attributes()->isProtected(key)) { +- value = "" + tr("[PROTECTED]") + ""; +- } else { +- value = m_currentEntry->attributes()->value(key).toHtmlEscaped(); +- value.replace('\n', QLatin1String("
")); +- } +- attributesText.append(tr("", "attributes line").arg(key, value)); +- } +- attributesText.append("
%1:%2
"); +- m_ui->entryAttributesEdit->setText(attributesText); +- } +- +- m_ui->entryAttachmentsWidget->setEntryAttachments(m_currentEntry->attachments()); +-} +- +-void EntryPreviewWidget::updateEntryAutotypeTab() +-{ +- Q_ASSERT(m_currentEntry); +- +- m_ui->entrySequenceLabel->setText(m_currentEntry->effectiveAutoTypeSequence()); +- m_ui->entryAutotypeTree->clear(); +- QList items; +- const AutoTypeAssociations* autotypeAssociations = m_currentEntry->autoTypeAssociations(); +- const auto associations = autotypeAssociations->getAll(); +- for (const auto& assoc : associations) { +- const QString sequence = +- assoc.sequence.isEmpty() ? m_currentEntry->effectiveAutoTypeSequence() : assoc.sequence; +- items.append(new QTreeWidgetItem(m_ui->entryAutotypeTree, {assoc.window, sequence})); +- } +- +- m_ui->entryAutotypeTree->addTopLevelItems(items); +- setTabEnabled(m_ui->entryTabWidget, m_ui->entryAutotypeTab, m_currentEntry->autoTypeEnabled()); +-} +- +-void EntryPreviewWidget::updateGroupHeaderLine() +-{ +- Q_ASSERT(m_currentGroup); +- m_ui->groupTitleLabel->setRawText(hierarchy(m_currentGroup, {})); +- m_ui->groupIcon->setPixmap(m_currentGroup->iconPixmap(IconSize::Large)); +-} +- +-void EntryPreviewWidget::updateGroupGeneralTab() +-{ +- Q_ASSERT(m_currentGroup); +- const QString searchingText = m_currentGroup->resolveSearchingEnabled() ? tr("Enabled") : tr("Disabled"); +- m_ui->groupSearchingLabel->setText(searchingText); +- +- const QString autotypeText = m_currentGroup->resolveAutoTypeEnabled() ? tr("Enabled") : tr("Disabled"); +- m_ui->groupAutotypeLabel->setText(autotypeText); +- +- const TimeInfo groupTime = m_currentGroup->timeInfo(); +- const QString expiresText = +- groupTime.expires() ? groupTime.expiryTime().toString(Qt::DefaultLocaleShortDate) : tr("Never"); +- m_ui->groupExpirationLabel->setText(expiresText); +- +- if (config()->get(Config::Security_HideNotes).toBool()) { +- setGroupNotesVisible(false); +- m_ui->toggleGroupNotesButton->setVisible(!m_ui->groupNotesTextEdit->toPlainText().isEmpty()); +- m_ui->toggleGroupNotesButton->setChecked(false); +- } else { +- setGroupNotesVisible(true); +- m_ui->toggleGroupNotesButton->setVisible(false); +- } +- +- if (config()->get(Config::GUI_MonospaceNotes).toBool()) { +- m_ui->groupNotesTextEdit->setFont(Font::fixedFont()); +- } else { +- m_ui->groupNotesTextEdit->setFont(Font::defaultFont()); +- } +-} +- +-#if defined(WITH_XC_KEESHARE) +-void EntryPreviewWidget::updateGroupSharingTab() +-{ +- Q_ASSERT(m_currentGroup); +- setTabEnabled(m_ui->groupTabWidget, m_ui->groupShareTab, KeeShare::isShared(m_currentGroup)); +- auto reference = KeeShare::referenceOf(m_currentGroup); +- m_ui->groupShareTypeLabel->setText(KeeShare::referenceTypeLabel(reference)); +- m_ui->groupSharePathLabel->setText(reference.path); +-} +-#endif +- +-void EntryPreviewWidget::updateTotpLabel() +-{ +- if (!m_locked && m_currentEntry && m_currentEntry->hasTotp()) { +- const QString totpCode = m_currentEntry->totp(); +- const QString firstHalf = totpCode.left(totpCode.size() / 2); +- const QString secondHalf = totpCode.mid(totpCode.size() / 2); +- m_ui->entryTotpLabel->setText(firstHalf + " " + secondHalf); +- } else { +- m_ui->entryTotpLabel->clear(); +- m_totpTimer.stop(); +- } +-} +- +-void EntryPreviewWidget::updateTabIndexes() +-{ +- m_selectedTabEntry = m_ui->entryTabWidget->currentIndex(); +- m_selectedTabGroup = m_ui->groupTabWidget->currentIndex(); +-} +- +-void EntryPreviewWidget::openEntryUrl() +-{ +- if (m_currentEntry) { +- emit entryUrlActivated(m_currentEntry); +- } +-} +- +-void EntryPreviewWidget::removeTab(QTabWidget* tabWidget, QWidget* widget) +-{ +- const int tabIndex = tabWidget->indexOf(widget); +- Q_ASSERT(tabIndex != -1); +- tabWidget->removeTab(tabIndex); +-} +- +-void EntryPreviewWidget::setTabEnabled(QTabWidget* tabWidget, QWidget* widget, bool enabled) +-{ +- const int tabIndex = tabWidget->indexOf(widget); +- Q_ASSERT(tabIndex != -1); +- tabWidget->setTabEnabled(tabIndex, enabled); +-} +- +-QString EntryPreviewWidget::hierarchy(const Group* group, const QString& title) +-{ +- QString groupList = QString("%1").arg(group->hierarchy().join(" / ")); +- return title.isEmpty() ? groupList : QStringLiteral("%1 / %2").arg(groupList, title); +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/EntryPreviewWidget.h keepassxc-2.6.4-patched/src/gui/EntryPreviewWidget.h +--- keepassxc-2.6.4-orig/src/gui/EntryPreviewWidget.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/EntryPreviewWidget.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,86 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_DETAILSWIDGET_H +-#define KEEPASSX_DETAILSWIDGET_H +- +-#include "config-keepassx.h" +-#include "gui/DatabaseWidget.h" +- +-#include +- +-namespace Ui +-{ +- class EntryPreviewWidget; +-} +- +-class QTextEdit; +- +-class EntryPreviewWidget : public QWidget +-{ +- Q_OBJECT +- +-public: +- explicit EntryPreviewWidget(QWidget* parent = nullptr); +- ~EntryPreviewWidget() override; +- +-public slots: +- void setEntry(Entry* selectedEntry); +- void setGroup(Group* selectedGroup); +- void setDatabaseMode(DatabaseWidget::Mode mode); +- +-signals: +- void errorOccurred(const QString& error); +- void entryUrlActivated(Entry* entry); +- +-private slots: +- void updateEntryHeaderLine(); +- void updateEntryTotp(); +- void updateEntryGeneralTab(); +- void updateEntryAdvancedTab(); +- void updateEntryAutotypeTab(); +- void setPasswordVisible(bool state); +- void setEntryNotesVisible(bool state); +- void setGroupNotesVisible(bool state); +- void setNotesVisible(QTextEdit* notesWidget, const QString& notes, bool state); +- +- void updateGroupHeaderLine(); +- void updateGroupGeneralTab(); +-#if defined(WITH_XC_KEESHARE) +- void updateGroupSharingTab(); +-#endif +- +- void updateTotpLabel(); +- void updateTabIndexes(); +- void openEntryUrl(); +- +-private: +- void removeTab(QTabWidget* tabWidget, QWidget* widget); +- void setTabEnabled(QTabWidget* tabWidget, QWidget* widget, bool enabled); +- +- static QString hierarchy(const Group* group, const QString& title); +- +- const QScopedPointer m_ui; +- bool m_locked; +- QPointer m_currentEntry; +- QPointer m_currentGroup; +- QTimer m_totpTimer; +- quint8 m_selectedTabEntry; +- quint8 m_selectedTabGroup; +-}; +- +-#endif // KEEPASSX_DETAILSWIDGET_H +diff -urNr keepassxc-2.6.4-orig/src/gui/EntryPreviewWidget.ui keepassxc-2.6.4-patched/src/gui/EntryPreviewWidget.ui +--- keepassxc-2.6.4-orig/src/gui/EntryPreviewWidget.ui 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/EntryPreviewWidget.ui 1970-01-01 01:00:00.000000000 +0100 +@@ -1,1233 +0,0 @@ +- +- +- EntryPreviewWidget +- +- +- +- 0 +- 0 +- 566 +- 247 +- +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- 0 +- +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- QLayout::SetDefaultConstraint +- +- +- 5 +- +- +- 3 +- +- +- 3 +- +- +- +- +- 12 +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- 16 +- 0 +- +- +- +- +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- 12 +- +- +- +- Qt::AutoText +- +- +- +- +- +- +- +- +- +- 10 +- 75 +- true +- +- +- +- 1234567 +- +- +- +- +- +- +- Display current TOTP value +- +- +- +- +- +- true +- +- +- +- +- +- +- Close +- +- +- +- +- +- +- +- +- +- +- +- 0 +- +- +- false +- +- +- false +- +- +- false +- +- +- +- General +- +- +- +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- 75 +- true +- +- +- +- Password +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- +- +- +- +- Qt::Horizontal +- +- +- QSizePolicy::Fixed +- +- +- +- 20 +- 20 +- +- +- +- +- +- +- +- 6 +- +- +- 4 +- +- +- +- +- +- +- +- true +- +- +- +- +- +- +- +- 150 +- 0 +- +- +- +- Qt::ClickFocus +- +- +- password +- +- +- false +- +- +- true +- +- +- true +- +- +- +- +- +- +- +- +- Qt::Horizontal +- +- +- QSizePolicy::Fixed +- +- +- +- 10 +- 20 +- +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- 150 +- 0 +- +- +- +- PointingHandCursor +- +- +- Qt::ClickFocus +- +- +- https://example.com +- +- +- Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- 75 +- true +- +- +- +- Notes +- +- +- Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- 75 +- true +- +- +- +- Expiration +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- expired +- +- +- +- +- +- +- Qt::Horizontal +- +- +- QSizePolicy::Fixed +- +- +- +- 20 +- 20 +- +- +- +- +- +- +- +- Qt::Horizontal +- +- +- QSizePolicy::Fixed +- +- +- +- 20 +- 30 +- +- +- +- +- +- +- +- 6 +- +- +- 4 +- +- +- +- +- +- +- +- true +- +- +- +- +- +- +- Qt::ClickFocus +- +- +- QFrame::NoFrame +- +- +- QFrame::Plain +- +- +- 0 +- +- +- true +- +- +- true +- +- +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- 75 +- true +- +- +- +- Qt::LeftToRight +- +- +- Username +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- +- +- +- +- Qt::Horizontal +- +- +- QSizePolicy::Fixed +- +- +- +- 10 +- 20 +- +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- 75 +- true +- +- +- +- URL +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- +- +- +- +- +- 150 +- 0 +- +- +- +- Qt::ClickFocus +- +- +- username +- +- +- false +- +- +- 8 +- +- +- true +- +- +- true +- +- +- +- +- +- +- +- +- +- +- Advanced +- +- +- +- 0 +- +- +- 5 +- +- +- 0 +- +- +- 5 +- +- +- +- +- Qt::Horizontal +- +- +- QSizePolicy::Fixed +- +- +- +- 5 +- 20 +- +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- 75 +- true +- +- +- +- Attributes +- +- +- +- +- +- +- Qt::Horizontal +- +- +- QSizePolicy::Fixed +- +- +- +- 5 +- 20 +- +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- 75 +- true +- +- +- +- Attachments +- +- +- +- +- +- +- Qt::Horizontal +- +- +- QSizePolicy::Fixed +- +- +- +- 5 +- 20 +- +- +- +- +- +- +- +- Qt::Horizontal +- +- +- QSizePolicy::Fixed +- +- +- +- 5 +- 20 +- +- +- +- +- +- +- +- Qt::ClickFocus +- +- +- true +- +- +- +- +- +- +- Qt::Horizontal +- +- +- QSizePolicy::Fixed +- +- +- +- 5 +- 20 +- +- +- +- +- +- +- +- Qt::ClickFocus +- +- +- +- +- +- +- Qt::Horizontal +- +- +- QSizePolicy::Fixed +- +- +- +- 5 +- 20 +- +- +- +- +- +- +- +- +- Autotype +- +- +- +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 5 +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- 75 +- true +- +- +- +- Default Sequence +- +- +- Qt::AlignRight|Qt::AlignVCenter +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- sequence +- +- +- Qt::AlignLeft|Qt::AlignVCenter +- +- +- +- +- +- +- +- +- +- Qt::ClickFocus +- +- +- QFrame::Sunken +- +- +- true +- +- +- true +- +- +- false +- +- +- 2 +- +- +- false +- +- +- 50 +- +- +- 250 +- +- +- true +- +- +- +- Window +- +- +- +- +- Sequence +- +- +- +- +- +- +- +- +- +- +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- QLayout::SetDefaultConstraint +- +- +- 5 +- +- +- 3 +- +- +- 3 +- +- +- +- +- 12 +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- 12 +- +- +- +- Qt::AutoText +- +- +- +- +- +- +- +- +- Close +- +- +- +- +- +- +- +- +- +- +- +- 0 +- +- +- false +- +- +- false +- +- +- false +- +- +- +- General +- +- +- +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- Qt::Horizontal +- +- +- QSizePolicy::Fixed +- +- +- +- 20 +- 20 +- +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- 75 +- true +- +- +- +- Autotype +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- 75 +- true +- +- +- +- Searching +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- 75 +- true +- +- +- +- Expiration +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- 75 +- true +- +- +- +- Notes +- +- +- Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing +- +- +- +- +- +- +- 6 +- +- +- 4 +- +- +- +- +- +- +- +- true +- +- +- +- +- +- +- Qt::ClickFocus +- +- +- QFrame::NoFrame +- +- +- QFrame::Plain +- +- +- 0 +- +- +- true +- +- +- true +- +- +- +- +- +- +- +- +- +- +- +- +- Share +- +- +- +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- +- 0 +- 0 +- +- +- +- <path> +- +- +- +- +- +- +- +- 75 +- true +- +- +- +- <type> +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- +- +- +- +- Qt::Vertical +- +- +- +- 20 +- 147 +- +- +- +- +- +- +- +- Qt::Horizontal +- +- +- QSizePolicy::Fixed +- +- +- +- 20 +- 20 +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- Search +- +- +- +- +- Clear +- +- +- +- +- +- EntryAttachmentsWidget +- QWidget +-
gui/entry/EntryAttachmentsWidget.h
+- 1 +-
+- +- ElidedLabel +- QLabel +-
gui/widgets/ElidedLabel.h
+-
+-
+- +- entryTotpButton +- entryCloseButton +- entryTabWidget +- togglePasswordButton +- toggleEntryNotesButton +- groupTabWidget +- toggleGroupNotesButton +- groupCloseButton +- +- +- +-
+diff -urNr keepassxc-2.6.4-orig/src/gui/FileDialog.cpp keepassxc-2.6.4-patched/src/gui/FileDialog.cpp +--- keepassxc-2.6.4-orig/src/gui/FileDialog.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/FileDialog.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,177 +0,0 @@ +-/* +- * Copyright (C) 2011 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "FileDialog.h" +- +-#include "core/Config.h" +- +-#include +- +-FileDialog* FileDialog::m_instance(nullptr); +- +-QString FileDialog::getOpenFileName(QWidget* parent, +- const QString& caption, +- const QString& dir, +- const QString& filter, +- QString* selectedFilter, +- const QFileDialog::Options options) +-{ +- if (!m_nextFileName.isEmpty()) { +- const QString result = m_nextFileName; +- m_nextFileName.clear(); +- return result; +- } else { +- const auto& workingDir = dir.isEmpty() ? config()->get(Config::LastDir).toString() : dir; +- const auto result = QDir::toNativeSeparators( +- QFileDialog::getOpenFileName(parent, caption, workingDir, filter, selectedFilter, options)); +- +-#ifdef Q_OS_MACOS +- // on Mac OS X the focus is lost after closing the native dialog +- if (parent) { +- parent->activateWindow(); +- } +-#endif +- saveLastDir(result); +- return result; +- } +-} +- +-QStringList FileDialog::getOpenFileNames(QWidget* parent, +- const QString& caption, +- const QString& dir, +- const QString& filter, +- QString* selectedFilter, +- const QFileDialog::Options options) +-{ +- if (!m_nextFileNames.isEmpty()) { +- const QStringList results = m_nextFileNames; +- m_nextFileNames.clear(); +- return results; +- } else { +- const auto& workingDir = dir.isEmpty() ? config()->get(Config::LastDir).toString() : dir; +- auto results = QFileDialog::getOpenFileNames(parent, caption, workingDir, filter, selectedFilter, options); +- +- for (auto& path : results) { +- path = QDir::toNativeSeparators(path); +- } +- +-#ifdef Q_OS_MACOS +- // on Mac OS X the focus is lost after closing the native dialog +- if (parent) { +- parent->activateWindow(); +- } +-#endif +- if (!results.isEmpty()) { +- saveLastDir(results[0]); +- } +- return results; +- } +-} +- +-QString FileDialog::getSaveFileName(QWidget* parent, +- const QString& caption, +- const QString& dir, +- const QString& filter, +- QString* selectedFilter, +- const QFileDialog::Options options) +-{ +- if (!m_nextFileName.isEmpty()) { +- const QString result = m_nextFileName; +- m_nextFileName.clear(); +- return result; +- } else { +- const auto& workingDir = dir.isEmpty() ? config()->get(Config::LastDir).toString() : dir; +- const auto result = QDir::toNativeSeparators( +- QFileDialog::getSaveFileName(parent, caption, workingDir, filter, selectedFilter, options)); +- +-#ifdef Q_OS_MACOS +- // on Mac OS X the focus is lost after closing the native dialog +- if (parent) { +- parent->activateWindow(); +- } +-#endif +- saveLastDir(result); +- return result; +- } +-} +- +-QString FileDialog::getExistingDirectory(QWidget* parent, +- const QString& caption, +- const QString& dir, +- const QFileDialog::Options options) +-{ +- if (!m_nextDirName.isEmpty()) { +- const QString result = m_nextDirName; +- m_nextDirName.clear(); +- return result; +- } else { +- const auto& workingDir = dir.isEmpty() ? config()->get(Config::LastDir).toString() : dir; +- const auto result = +- QDir::toNativeSeparators(QFileDialog::getExistingDirectory(parent, caption, workingDir, options)); +- +-#ifdef Q_OS_MACOS +- // on Mac OS X the focus is lost after closing the native dialog +- if (parent) { +- parent->activateWindow(); +- } +-#endif +- saveLastDir(result); +- return result; +- } +-} +- +-void FileDialog::setNextFileName(const QString& fileName) +-{ +- m_nextFileName = fileName; +-} +- +-void FileDialog::setNextFileNames(const QStringList& fileNames) +-{ +- m_nextFileNames = fileNames; +-} +- +-void FileDialog::setNextDirName(const QString& dirName) +-{ +- m_nextDirName = dirName; +-} +- +-void FileDialog::setNextForgetDialog() +-{ +- m_forgetLastDir = true; +-} +- +-FileDialog::FileDialog() +-{ +-} +- +-void FileDialog::saveLastDir(const QString& dir) +-{ +- if (!dir.isEmpty() && !m_forgetLastDir) { +- config()->set(Config::LastDir, QFileInfo(dir).absolutePath()); +- } +- +- m_forgetLastDir = false; +-} +- +-FileDialog* FileDialog::instance() +-{ +- if (!m_instance) { +- m_instance = new FileDialog(); +- } +- +- return m_instance; +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/FileDialog.h keepassxc-2.6.4-patched/src/gui/FileDialog.h +--- keepassxc-2.6.4-orig/src/gui/FileDialog.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/FileDialog.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,82 +0,0 @@ +-/* +- * Copyright (C) 2011 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_FILEDIALOG_H +-#define KEEPASSX_FILEDIALOG_H +- +-#include +- +-class FileDialog +-{ +-public: +- QString getOpenFileName(QWidget* parent = nullptr, +- const QString& caption = QString(), +- const QString& dir = QString(), +- const QString& filter = QString(), +- QString* selectedFilter = nullptr, +- const QFileDialog::Options options = {}); +- +- QStringList getOpenFileNames(QWidget* parent = nullptr, +- const QString& caption = QString(), +- const QString& dir = QString(), +- const QString& filter = QString(), +- QString* selectedFilter = nullptr, +- const QFileDialog::Options options = {}); +- +- QString getSaveFileName(QWidget* parent = nullptr, +- const QString& caption = QString(), +- const QString& dir = QString(), +- const QString& filter = QString(), +- QString* selectedFilter = nullptr, +- const QFileDialog::Options options = {}); +- +- QString getExistingDirectory(QWidget* parent = nullptr, +- const QString& caption = QString(), +- const QString& dir = QString(), +- const QFileDialog::Options options = QFileDialog::ShowDirsOnly); +- +- void setNextForgetDialog(); +- /** +- * Sets the result of the next get* method call. +- * Use only for testing. +- */ +- void setNextFileName(const QString& fileName); +- void setNextFileNames(const QStringList& fileNames); +- void setNextDirName(const QString& dirName); +- +- static FileDialog* instance(); +- +-private: +- FileDialog(); +- QString m_nextFileName; +- QStringList m_nextFileNames; +- QString m_nextDirName; +- bool m_forgetLastDir = false; +- +- void saveLastDir(const QString&); +- +- static FileDialog* m_instance; +- +- Q_DISABLE_COPY(FileDialog) +-}; +- +-inline FileDialog* fileDialog() +-{ +- return FileDialog::instance(); +-} +- +-#endif // KEEPASSX_FILEDIALOG_H +diff -urNr keepassxc-2.6.4-orig/src/gui/Font.cpp keepassxc-2.6.4-patched/src/gui/Font.cpp +--- keepassxc-2.6.4-orig/src/gui/Font.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/Font.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,46 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "Font.h" +- +-#include +- +-QFont Font::defaultFont() +-{ +- return QFontDatabase::systemFont(QFontDatabase::GeneralFont); +-} +- +-QFont Font::fixedFont() +-{ +- QFont fixedFont = QFontDatabase::systemFont(QFontDatabase::FixedFont); +- +-#ifdef Q_OS_WIN +- // try to use Consolas on Windows, because the default Courier New has too many similar characters +- QFont consolasFont = QFontDatabase().font("Consolas", fixedFont.styleName(), fixedFont.pointSize()); +- const QFont defaultFont; +- if (fixedFont != defaultFont) { +- fixedFont = consolasFont; +- } +-#endif +-#ifdef Q_OS_MACOS +- // Qt doesn't choose a monospace font correctly on macOS +- const QFont defaultFont; +- fixedFont = QFontDatabase().font("Menlo", defaultFont.styleName(), defaultFont.pointSize()); +-#endif +- +- return fixedFont; +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/Font.h keepassxc-2.6.4-patched/src/gui/Font.h +--- keepassxc-2.6.4-orig/src/gui/Font.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/Font.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,35 +0,0 @@ +-/* +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_FONT_H +-#define KEEPASSX_FONT_H +- +-#include +- +-class Font +-{ +-public: +- static QFont defaultFont(); +- static QFont fixedFont(); +- +-private: +- Font() +- { +- } +-}; +- +-#endif // KEEPASSX_FONT_H +diff -urNr keepassxc-2.6.4-orig/src/gui/group/EditGroupWidget.cpp keepassxc-2.6.4-patched/src/gui/group/EditGroupWidget.cpp +--- keepassxc-2.6.4-orig/src/gui/group/EditGroupWidget.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/group/EditGroupWidget.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,322 +0,0 @@ +-/* +- * Copyright (C) 2011 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "EditGroupWidget.h" +-#include "gui/Font.h" +-#include "ui_EditGroupWidgetMain.h" +- +-#include "core/Config.h" +-#include "core/Metadata.h" +-#include "core/Resources.h" +-#include "gui/EditWidgetIcons.h" +-#include "gui/EditWidgetProperties.h" +-#include "gui/MessageBox.h" +- +-#if defined(WITH_XC_KEESHARE) +-#include "keeshare/group/EditGroupPageKeeShare.h" +-#endif +- +-class EditGroupWidget::ExtraPage +-{ +-public: +- ExtraPage(IEditGroupPage* page, QWidget* widget) +- : editPage(page) +- , widget(widget) +- { +- } +- +- void set(Group* temporaryGroup, QSharedPointer database) const +- { +- editPage->set(widget, temporaryGroup, database); +- } +- +- void assign() const +- { +- editPage->assign(widget); +- } +- +- QWidget* getWidget() +- { +- return widget; +- } +- +-private: +- QSharedPointer editPage; +- QWidget* widget; +-}; +- +-EditGroupWidget::EditGroupWidget(QWidget* parent) +- : EditWidget(parent) +- , m_mainUi(new Ui::EditGroupWidgetMain()) +- , m_editGroupWidgetMain(new QScrollArea()) +- , m_editGroupWidgetIcons(new EditWidgetIcons()) +- , m_editWidgetProperties(new EditWidgetProperties()) +- , m_group(nullptr) +-{ +- m_mainUi->setupUi(m_editGroupWidgetMain); +- +- addPage(tr("Group"), Resources::instance()->icon("document-edit"), m_editGroupWidgetMain); +- addPage(tr("Icon"), Resources::instance()->icon("preferences-desktop-icons"), m_editGroupWidgetIcons); +-#if defined(WITH_XC_KEESHARE) +- addEditPage(new EditGroupPageKeeShare(this)); +-#endif +- addPage(tr("Properties"), Resources::instance()->icon("document-properties"), m_editWidgetProperties); +- +- connect(m_mainUi->expireCheck, SIGNAL(toggled(bool)), m_mainUi->expireDatePicker, SLOT(setEnabled(bool))); +- connect(m_mainUi->autoTypeSequenceCustomRadio, +- SIGNAL(toggled(bool)), +- m_mainUi->autoTypeSequenceCustomEdit, +- SLOT(setEnabled(bool))); +- +- connect(this, SIGNAL(apply()), SLOT(apply())); +- connect(this, SIGNAL(accepted()), SLOT(save())); +- connect(this, SIGNAL(rejected()), SLOT(cancel())); +- +- // clang-format off +- connect(m_editGroupWidgetIcons, +- SIGNAL(messageEditEntry(QString,MessageWidget::MessageType)), +- SLOT(showMessage(QString,MessageWidget::MessageType))); +- // clang-format on +- +- connect(m_editGroupWidgetIcons, SIGNAL(messageEditEntryDismiss()), SLOT(hideMessage())); +- +- setupModifiedTracking(); +-} +- +-EditGroupWidget::~EditGroupWidget() +-{ +-} +- +-void EditGroupWidget::setupModifiedTracking() +-{ +- // Group tab +- connect(m_mainUi->editName, SIGNAL(textChanged(QString)), SLOT(setModified())); +- connect(m_mainUi->editNotes, SIGNAL(textChanged()), SLOT(setModified())); +- connect(m_mainUi->expireCheck, SIGNAL(stateChanged(int)), SLOT(setModified())); +- connect(m_mainUi->expireDatePicker, SIGNAL(dateTimeChanged(QDateTime)), SLOT(setModified())); +- connect(m_mainUi->searchComboBox, SIGNAL(currentIndexChanged(int)), SLOT(setModified())); +- connect(m_mainUi->autotypeComboBox, SIGNAL(currentIndexChanged(int)), SLOT(setModified())); +- connect(m_mainUi->autoTypeSequenceInherit, SIGNAL(toggled(bool)), SLOT(setModified())); +- connect(m_mainUi->autoTypeSequenceCustomRadio, SIGNAL(toggled(bool)), SLOT(setModified())); +- connect(m_mainUi->autoTypeSequenceCustomEdit, SIGNAL(textChanged(QString)), SLOT(setModified())); +- +- // Icon tab +- connect(m_editGroupWidgetIcons, SIGNAL(widgetUpdated()), SLOT(setModified())); +-} +- +-void EditGroupWidget::loadGroup(Group* group, bool create, const QSharedPointer& database) +-{ +- m_group = group; +- m_db = database; +- +- m_temporaryGroup.reset(group->clone(Entry::CloneNoFlags, Group::CloneNoFlags)); +- connect(m_temporaryGroup->customData(), SIGNAL(customDataModified()), SLOT(setModified())); +- +- if (create) { +- setHeadline(tr("Add group")); +- } else { +- setHeadline(tr("Edit group")); +- } +- +- if (m_group->parentGroup()) { +- addTriStateItems(m_mainUi->searchComboBox, m_group->parentGroup()->resolveSearchingEnabled()); +- addTriStateItems(m_mainUi->autotypeComboBox, m_group->parentGroup()->resolveAutoTypeEnabled()); +- } else { +- addTriStateItems(m_mainUi->searchComboBox, true); +- addTriStateItems(m_mainUi->autotypeComboBox, true); +- } +- +- m_mainUi->editName->setText(m_group->name()); +- m_mainUi->editNotes->setPlainText(m_group->notes()); +- m_mainUi->expireCheck->setChecked(group->timeInfo().expires()); +- m_mainUi->expireDatePicker->setDateTime(group->timeInfo().expiryTime().toLocalTime()); +- m_mainUi->searchComboBox->setCurrentIndex(indexFromTriState(group->searchingEnabled())); +- m_mainUi->autotypeComboBox->setCurrentIndex(indexFromTriState(group->autoTypeEnabled())); +- if (group->defaultAutoTypeSequence().isEmpty()) { +- m_mainUi->autoTypeSequenceInherit->setChecked(true); +- } else { +- m_mainUi->autoTypeSequenceCustomRadio->setChecked(true); +- } +- m_mainUi->autoTypeSequenceCustomEdit->setText(group->effectiveAutoTypeSequence()); +- +- if (config()->get(Config::GUI_MonospaceNotes).toBool()) { +- m_mainUi->editNotes->setFont(Font::fixedFont()); +- } else { +- m_mainUi->editNotes->setFont(Font::defaultFont()); +- } +- +- IconStruct iconStruct; +- iconStruct.uuid = m_temporaryGroup->iconUuid(); +- iconStruct.number = m_temporaryGroup->iconNumber(); +- m_editGroupWidgetIcons->load(m_temporaryGroup->uuid(), m_db, iconStruct); +- m_editWidgetProperties->setFields(m_temporaryGroup->timeInfo(), m_temporaryGroup->uuid()); +- m_editWidgetProperties->setCustomData(m_temporaryGroup->customData()); +- +- for (const ExtraPage& page : asConst(m_extraPages)) { +- page.set(m_temporaryGroup.data(), m_db); +- } +- +- setCurrentPage(0); +- +- m_mainUi->editName->setFocus(); +- +- // Force the user to Save/Discard new groups +- showApplyButton(!create); +- +- setModified(false); +-} +- +-void EditGroupWidget::save() +-{ +- apply(); +- clear(); +- emit editFinished(true); +-} +- +-void EditGroupWidget::apply() +-{ +- m_temporaryGroup->setName(m_mainUi->editName->text()); +- m_temporaryGroup->setNotes(m_mainUi->editNotes->toPlainText()); +- m_temporaryGroup->setExpires(m_mainUi->expireCheck->isChecked()); +- m_temporaryGroup->setExpiryTime(m_mainUi->expireDatePicker->dateTime().toUTC()); +- +- m_temporaryGroup->setSearchingEnabled(triStateFromIndex(m_mainUi->searchComboBox->currentIndex())); +- m_temporaryGroup->setAutoTypeEnabled(triStateFromIndex(m_mainUi->autotypeComboBox->currentIndex())); +- +- if (m_mainUi->autoTypeSequenceInherit->isChecked()) { +- m_temporaryGroup->setDefaultAutoTypeSequence(QString()); +- } else { +- m_temporaryGroup->setDefaultAutoTypeSequence(m_mainUi->autoTypeSequenceCustomEdit->text()); +- } +- +- IconStruct iconStruct = m_editGroupWidgetIcons->state(); +- +- if (iconStruct.number < 0) { +- m_temporaryGroup->setIcon(Group::DefaultIconNumber); +- } else if (iconStruct.uuid.isNull()) { +- m_temporaryGroup->setIcon(iconStruct.number); +- } else { +- m_temporaryGroup->setIcon(iconStruct.uuid); +- } +- +- for (const ExtraPage& page : asConst(m_extraPages)) { +- page.assign(); +- } +- +- // Icons add/remove are applied globally outside the transaction! +- m_group->copyDataFrom(m_temporaryGroup.data()); +- +- // Assign the icon to children if selected +- if (iconStruct.applyTo == ApplyIconToOptions::CHILD_GROUPS +- || iconStruct.applyTo == ApplyIconToOptions::ALL_CHILDREN) { +- m_group->applyGroupIconToChildGroups(); +- } +- +- if (iconStruct.applyTo == ApplyIconToOptions::CHILD_ENTRIES +- || iconStruct.applyTo == ApplyIconToOptions::ALL_CHILDREN) { +- m_group->applyGroupIconToChildEntries(); +- } +- +- setModified(false); +-} +- +-void EditGroupWidget::cancel() +-{ +- if (!m_group->iconUuid().isNull() && !m_db->metadata()->hasCustomIcon(m_group->iconUuid())) { +- m_group->setIcon(Entry::DefaultIconNumber); +- } +- +- if (isModified()) { +- auto result = MessageBox::question(this, +- QString(), +- tr("Entry has unsaved changes"), +- MessageBox::Cancel | MessageBox::Save | MessageBox::Discard, +- MessageBox::Cancel); +- if (result == MessageBox::Cancel) { +- return; +- } +- if (result == MessageBox::Save) { +- apply(); +- setModified(false); +- } +- } +- +- clear(); +- emit editFinished(false); +-} +- +-void EditGroupWidget::clear() +-{ +- m_group = nullptr; +- m_db.reset(); +- m_temporaryGroup.reset(nullptr); +- m_editGroupWidgetIcons->reset(); +-} +- +-void EditGroupWidget::addEditPage(IEditGroupPage* page) +-{ +- QWidget* widget = page->createWidget(); +- widget->setParent(this); +- +- m_extraPages.append(ExtraPage(page, widget)); +- addPage(page->name(), page->icon(), widget); +-} +- +-void EditGroupWidget::addTriStateItems(QComboBox* comboBox, bool inheritDefault) +-{ +- QString inheritDefaultString; +- if (inheritDefault) { +- inheritDefaultString = tr("Enable"); +- } else { +- inheritDefaultString = tr("Disable"); +- } +- +- comboBox->clear(); +- comboBox->addItem(tr("Inherit from parent group (%1)").arg(inheritDefaultString)); +- comboBox->addItem(tr("Enable")); +- comboBox->addItem(tr("Disable")); +-} +- +-int EditGroupWidget::indexFromTriState(Group::TriState triState) +-{ +- switch (triState) { +- case Group::Inherit: +- return 0; +- case Group::Enable: +- return 1; +- case Group::Disable: +- return 2; +- default: +- Q_ASSERT(false); +- return 0; +- } +-} +- +-Group::TriState EditGroupWidget::triStateFromIndex(int index) +-{ +- switch (index) { +- case 0: +- return Group::Inherit; +- case 1: +- return Group::Enable; +- case 2: +- return Group::Disable; +- default: +- Q_ASSERT(false); +- return Group::Inherit; +- } +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/group/EditGroupWidget.h keepassxc-2.6.4-patched/src/gui/group/EditGroupWidget.h +--- keepassxc-2.6.4-orig/src/gui/group/EditGroupWidget.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/group/EditGroupWidget.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,96 +0,0 @@ +-/* +- * Copyright (C) 2011 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_EDITGROUPWIDGET_H +-#define KEEPASSX_EDITGROUPWIDGET_H +- +-#include +-#include +-#include +- +-#include "core/Group.h" +-#include "gui/EditWidget.h" +- +-class CustomData; +-class EditWidgetIcons; +-class EditWidgetProperties; +- +-namespace Ui +-{ +- class EditGroupWidgetMain; +- class EditWidget; +-} // namespace Ui +- +-class IEditGroupPage +-{ +-public: +- virtual ~IEditGroupPage() +- { +- } +- virtual QString name() = 0; +- virtual QIcon icon() = 0; +- virtual QWidget* createWidget() = 0; +- virtual void set(QWidget* widget, Group* tempoaryGroup, QSharedPointer database) = 0; +- virtual void assign(QWidget* widget) = 0; +-}; +- +-class EditGroupWidget : public EditWidget +-{ +- Q_OBJECT +- +-public: +- explicit EditGroupWidget(QWidget* parent = nullptr); +- ~EditGroupWidget(); +- +- void loadGroup(Group* group, bool create, const QSharedPointer& database); +- void clear(); +- +- void addEditPage(IEditGroupPage* page); +- +-signals: +- void editFinished(bool accepted); +- void messageEditEntry(QString, MessageWidget::MessageType); +- void messageEditEntryDismiss(); +- +-private slots: +- void apply(); +- void save(); +- void cancel(); +- +-private: +- void addTriStateItems(QComboBox* comboBox, bool inheritValue); +- int indexFromTriState(Group::TriState triState); +- Group::TriState triStateFromIndex(int index); +- void setupModifiedTracking(); +- +- const QScopedPointer m_mainUi; +- +- QPointer m_editGroupWidgetMain; +- QPointer m_editGroupWidgetIcons; +- QPointer m_editWidgetProperties; +- +- QScopedPointer m_temporaryGroup; +- QPointer m_group; +- QSharedPointer m_db; +- +- class ExtraPage; +- QList m_extraPages; +- +- Q_DISABLE_COPY(EditGroupWidget) +-}; +- +-#endif // KEEPASSX_EDITGROUPWIDGET_H +diff -urNr keepassxc-2.6.4-orig/src/gui/group/EditGroupWidgetMain.ui keepassxc-2.6.4-patched/src/gui/group/EditGroupWidgetMain.ui +--- keepassxc-2.6.4-orig/src/gui/group/EditGroupWidgetMain.ui 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/group/EditGroupWidgetMain.ui 1970-01-01 01:00:00.000000000 +0100 +@@ -1,255 +0,0 @@ +- +- +- EditGroupWidgetMain +- +- +- +- 0 +- 0 +- 539 +- 523 +- +- +- +- Edit Group +- +- +- QFrame::NoFrame +- +- +- QFrame::Plain +- +- +- Qt::ScrollBarAlwaysOff +- +- +- QAbstractScrollArea::AdjustToContents +- +- +- true +- +- +- +- +- 0 +- 0 +- 539 +- 523 +- +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 10 +- +- +- 8 +- +- +- +- +- Toggle expiration +- +- +- Expires: +- +- +- +- +- +- +- Name field +- +- +- +- +- +- +- false +- +- +- Expiration field +- +- +- true +- +- +- +- +- +- +- Use default Auto-Type sequence of parent group +- +- +- +- +- +- +- Auto-Type: +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- +- +- +- +- Search: +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- +- +- +- +- Auto-Type toggle for this and sub groups +- +- +- +- +- +- +- +- +- Notes: +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- +- +- +- +- Qt::Vertical +- +- +- +- 20 +- 0 +- +- +- +- +- +- +- +- +- +- +- +- Qt::Horizontal +- +- +- QSizePolicy::Fixed +- +- +- +- 30 +- 0 +- +- +- +- +- +- +- +- false +- +- +- Default auto-type sequence field +- +- +- +- +- +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- 16777215 +- 120 +- +- +- +- Notes field +- +- +- +- +- +- +- Name: +- +- +- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter +- +- +- +- +- +- +- Set default Auto-Type sequence +- +- +- +- +- +- +- Search toggle for this and sub groups +- +- +- +- +- +- +- Qt::Vertical +- +- +- +- 20 +- 40 +- +- +- +- +- +- +- +- +- editName +- editNotes +- expireCheck +- expireDatePicker +- searchComboBox +- autotypeComboBox +- autoTypeSequenceInherit +- autoTypeSequenceCustomRadio +- autoTypeSequenceCustomEdit +- +- +- +- +diff -urNr keepassxc-2.6.4-orig/src/gui/group/GroupModel.cpp keepassxc-2.6.4-patched/src/gui/group/GroupModel.cpp +--- keepassxc-2.6.4-orig/src/gui/group/GroupModel.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/group/GroupModel.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,450 +0,0 @@ +-/* +- * Copyright (C) 2010 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "GroupModel.h" +- +-#include +-#include +- +-#include "core/Database.h" +-#include "core/DatabaseIcons.h" +-#include "core/Group.h" +-#include "core/Metadata.h" +-#include "core/Tools.h" +-#include "keeshare/KeeShare.h" +- +-GroupModel::GroupModel(Database* db, QObject* parent) +- : QAbstractItemModel(parent) +- , m_db(nullptr) +-{ +- changeDatabase(db); +-} +- +-void GroupModel::changeDatabase(Database* newDb) +-{ +- beginResetModel(); +- +- m_db = newDb; +- +- // clang-format off +- connect(m_db, SIGNAL(groupDataChanged(Group*)), SLOT(groupDataChanged(Group*))); +- connect(m_db, SIGNAL(groupAboutToAdd(Group*,int)), SLOT(groupAboutToAdd(Group*,int))); +- connect(m_db, SIGNAL(groupAdded()), SLOT(groupAdded())); +- connect(m_db, SIGNAL(groupAboutToRemove(Group*)), SLOT(groupAboutToRemove(Group*))); +- connect(m_db, SIGNAL(groupRemoved()), SLOT(groupRemoved())); +- connect(m_db, SIGNAL(groupAboutToMove(Group*,Group*,int)), SLOT(groupAboutToMove(Group*,Group*,int))); +- connect(m_db, SIGNAL(groupMoved()), SLOT(groupMoved())); +- // clang-format on +- +- endResetModel(); +-} +- +-int GroupModel::rowCount(const QModelIndex& parent) const +-{ +- if (!parent.isValid()) { +- // we have exactly 1 root item +- return 1; +- } else { +- const Group* group = groupFromIndex(parent); +- return group->children().size(); +- } +-} +- +-int GroupModel::columnCount(const QModelIndex& parent) const +-{ +- Q_UNUSED(parent); +- +- return 1; +-} +- +-QModelIndex GroupModel::index(int row, int column, const QModelIndex& parent) const +-{ +- if (!hasIndex(row, column, parent)) { +- return QModelIndex(); +- } +- +- Group* group; +- +- if (!parent.isValid()) { +- group = m_db->rootGroup(); +- } else { +- group = groupFromIndex(parent)->children().at(row); +- } +- +- return createIndex(row, column, group); +-} +- +-QModelIndex GroupModel::parent(const QModelIndex& index) const +-{ +- if (!index.isValid()) { +- return QModelIndex(); +- } +- +- return parent(groupFromIndex(index)); +-} +- +-QModelIndex GroupModel::parent(Group* group) const +-{ +- Group* parentGroup = group->parentGroup(); +- +- if (!parentGroup) { +- // index is already the root group +- return QModelIndex(); +- } else { +- const Group* grandParentGroup = parentGroup->parentGroup(); +- if (!grandParentGroup) { +- // parent is the root group +- return createIndex(0, 0, parentGroup); +- } else { +- return createIndex(grandParentGroup->children().indexOf(parentGroup), 0, parentGroup); +- } +- } +-} +- +-QVariant GroupModel::data(const QModelIndex& index, int role) const +-{ +- if (!index.isValid()) { +- return QVariant(); +- } +- +- Group* group = groupFromIndex(index); +- +- if (role == Qt::DisplayRole) { +- QString nameTemplate = "%1"; +-#if defined(WITH_XC_KEESHARE) +- nameTemplate = KeeShare::indicatorSuffix(group, nameTemplate); +-#endif +- return nameTemplate.arg(group->name()); +- } else if (role == Qt::DecorationRole) { +- return group->iconPixmap(); +- } else if (role == Qt::FontRole) { +- QFont font; +- if (group->isExpired()) { +- font.setStrikeOut(true); +- } +- return font; +- } else if (role == Qt::ToolTipRole) { +- QString tooltip; +- if (!group->parentGroup()) { +- // only show a tooltip for the root group +- tooltip = m_db->filePath(); +- } +- return tooltip; +- } else { +- return QVariant(); +- } +-} +- +-QVariant GroupModel::headerData(int section, Qt::Orientation orientation, int role) const +-{ +- Q_UNUSED(section); +- Q_UNUSED(orientation); +- Q_UNUSED(role); +- +- return QVariant(); +-} +- +-QModelIndex GroupModel::index(Group* group) const +-{ +- int row; +- +- if (!group->parentGroup()) { +- row = 0; +- } else { +- row = group->parentGroup()->children().indexOf(group); +- } +- +- return createIndex(row, 0, group); +-} +- +-Group* GroupModel::groupFromIndex(const QModelIndex& index) const +-{ +- Q_ASSERT(index.internalPointer()); +- +- return static_cast(index.internalPointer()); +-} +- +-Qt::DropActions GroupModel::supportedDropActions() const +-{ +- return Qt::MoveAction | Qt::CopyAction; +-} +- +-Qt::ItemFlags GroupModel::flags(const QModelIndex& modelIndex) const +-{ +- if (!modelIndex.isValid()) { +- return Qt::NoItemFlags; +- } else if (modelIndex == index(0, 0)) { +- return QAbstractItemModel::flags(modelIndex) | Qt::ItemIsDropEnabled; +- } else { +- return QAbstractItemModel::flags(modelIndex) | Qt::ItemIsDropEnabled | Qt::ItemIsDragEnabled; +- } +-} +- +-bool GroupModel::dropMimeData(const QMimeData* data, +- Qt::DropAction action, +- int row, +- int column, +- const QModelIndex& parent) +-{ +- Q_UNUSED(column); +- +- if (action == Qt::IgnoreAction) { +- return true; +- } +- +- if (!data || (action != Qt::MoveAction && action != Qt::CopyAction) || !parent.isValid()) { +- return false; +- } +- +- // check if the format is supported +- QStringList types = mimeTypes(); +- Q_ASSERT(types.size() == 2); +- bool isGroup = data->hasFormat(types.at(0)); +- bool isEntry = data->hasFormat(types.at(1)); +- if (!isGroup && !isEntry) { +- return false; +- } +- +- if (row > rowCount(parent)) { +- row = rowCount(parent); +- } +- +- // decode and insert +- QByteArray encoded = data->data(isGroup ? types.at(0) : types.at(1)); +- QDataStream stream(&encoded, QIODevice::ReadOnly); +- +- Group* parentGroup = groupFromIndex(parent); +- +- if (isGroup) { +- QUuid dbUuid; +- QUuid groupUuid; +- stream >> dbUuid >> groupUuid; +- +- Database* db = Database::databaseByUuid(dbUuid); +- if (!db) { +- return false; +- } +- +- Group* dragGroup = db->rootGroup()->findGroupByUuid(groupUuid); +- if (!dragGroup || !db->rootGroup()->findGroupByUuid(dragGroup->uuid()) || dragGroup == db->rootGroup()) { +- return false; +- } +- +- if (dragGroup == parentGroup || dragGroup->findGroupByUuid(parentGroup->uuid())) { +- return false; +- } +- +- if (parentGroup == dragGroup->parent() && row > parentGroup->children().indexOf(dragGroup)) { +- row--; +- } +- +- Database* sourceDb = dragGroup->database(); +- Database* targetDb = parentGroup->database(); +- +- Group* group = dragGroup; +- +- if (sourceDb != targetDb) { +- QSet customIcons = group->customIconsRecursive(); +- targetDb->metadata()->copyCustomIcons(customIcons, sourceDb->metadata()); +- +- // Always clone the group across db's to reset UUIDs +- group = dragGroup->clone(Entry::CloneDefault | Entry::CloneIncludeHistory); +- if (action == Qt::MoveAction) { +- // Remove the original group from the sourceDb +- delete dragGroup; +- } +- } else if (action == Qt::CopyAction) { +- group = dragGroup->clone(Entry::CloneCopy); +- } +- +- group->setParent(parentGroup, row); +- } else { +- if (row != -1) { +- return false; +- } +- +- while (!stream.atEnd()) { +- QUuid dbUuid; +- QUuid entryUuid; +- stream >> dbUuid >> entryUuid; +- +- Database* db = Database::databaseByUuid(dbUuid); +- if (!db) { +- continue; +- } +- +- Entry* dragEntry = db->rootGroup()->findEntryByUuid(entryUuid); +- if (!dragEntry || !db->rootGroup()->findEntryByUuid(dragEntry->uuid())) { +- continue; +- } +- +- Database* sourceDb = dragEntry->group()->database(); +- Database* targetDb = parentGroup->database(); +- +- Entry* entry = dragEntry; +- +- if (sourceDb != targetDb) { +- QUuid customIcon = entry->iconUuid(); +- if (!customIcon.isNull() && !targetDb->metadata()->hasCustomIcon(customIcon)) { +- targetDb->metadata()->addCustomIcon(customIcon, sourceDb->metadata()->customIcon(customIcon)); +- } +- +- // Reset the UUID when moving across db boundary +- entry = dragEntry->clone(Entry::CloneDefault | Entry::CloneIncludeHistory); +- if (action == Qt::MoveAction) { +- delete dragEntry; +- } +- } else if (action == Qt::CopyAction) { +- entry = dragEntry->clone(Entry::CloneCopy); +- } +- +- entry->setGroup(parentGroup); +- } +- } +- +- return true; +-} +- +-QStringList GroupModel::mimeTypes() const +-{ +- QStringList types; +- types << "application/x-keepassx-group"; +- types << "application/x-keepassx-entry"; +- return types; +-} +- +-QMimeData* GroupModel::mimeData(const QModelIndexList& indexes) const +-{ +- if (indexes.isEmpty()) { +- return nullptr; +- } +- +- QMimeData* data = new QMimeData(); +- QByteArray encoded; +- QDataStream stream(&encoded, QIODevice::WriteOnly); +- +- QSet seenGroups; +- +- for (const QModelIndex& index : indexes) { +- if (!index.isValid()) { +- continue; +- } +- +- Group* group = groupFromIndex(index); +- if (!seenGroups.contains(group)) { +- // make sure we don't add groups multiple times when we get indexes +- // with the same row but different columns +- stream << m_db->uuid() << group->uuid(); +- seenGroups.insert(group); +- } +- } +- +- if (seenGroups.isEmpty()) { +- delete data; +- return nullptr; +- } else { +- data->setData(mimeTypes().at(0), encoded); +- return data; +- } +-} +- +-void GroupModel::groupDataChanged(Group* group) +-{ +- QModelIndex ix = index(group); +- emit dataChanged(ix, ix); +-} +- +-void GroupModel::groupAboutToRemove(Group* group) +-{ +- Q_ASSERT(group->parentGroup()); +- +- QModelIndex parentIndex = parent(group); +- Q_ASSERT(parentIndex.isValid()); +- int pos = group->parentGroup()->children().indexOf(group); +- Q_ASSERT(pos != -1); +- +- beginRemoveRows(parentIndex, pos, pos); +-} +- +-void GroupModel::groupRemoved() +-{ +- endRemoveRows(); +-} +- +-void GroupModel::groupAboutToAdd(Group* group, int index) +-{ +- Q_ASSERT(group->parentGroup()); +- +- QModelIndex parentIndex = parent(group); +- +- beginInsertRows(parentIndex, index, index); +-} +- +-void GroupModel::groupAdded() +-{ +- endInsertRows(); +-} +- +-void GroupModel::groupAboutToMove(Group* group, Group* toGroup, int pos) +-{ +- Q_ASSERT(group->parentGroup()); +- +- QModelIndex oldParentIndex = parent(group); +- QModelIndex newParentIndex = index(toGroup); +- int oldPos = group->parentGroup()->children().indexOf(group); +- if (group->parentGroup() == toGroup && pos > oldPos) { +- // beginMoveRows() has a bit different semantics than Group::setParent() and +- // QList::move() when the new position is greater than the old +- pos++; +- } +- +- bool moveResult = beginMoveRows(oldParentIndex, oldPos, oldPos, newParentIndex, pos); +- Q_UNUSED(moveResult); +- Q_ASSERT(moveResult); +-} +- +-void GroupModel::groupMoved() +-{ +- endMoveRows(); +-} +- +-void GroupModel::sortChildren(Group* rootGroup, bool reverse) +-{ +- emit layoutAboutToBeChanged(); +- +- QList oldIndexes; +- collectIndexesRecursively(oldIndexes, rootGroup->children()); +- +- rootGroup->sortChildrenRecursively(reverse); +- +- QList newIndexes; +- collectIndexesRecursively(newIndexes, rootGroup->children()); +- +- for (int i = 0; i < oldIndexes.count(); i++) { +- changePersistentIndex(oldIndexes[i], newIndexes[i]); +- } +- +- emit layoutChanged(); +-} +- +-void GroupModel::collectIndexesRecursively(QList& indexes, QList groups) +-{ +- for (auto group : groups) { +- indexes.append(index(group)); +- collectIndexesRecursively(indexes, group->children()); +- } +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/group/GroupModel.h keepassxc-2.6.4-patched/src/gui/group/GroupModel.h +--- keepassxc-2.6.4-orig/src/gui/group/GroupModel.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/group/GroupModel.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,67 +0,0 @@ +-/* +- * Copyright (C) 2010 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_GROUPMODEL_H +-#define KEEPASSX_GROUPMODEL_H +- +-#include +- +-class Database; +-class Group; +- +-class GroupModel : public QAbstractItemModel +-{ +- Q_OBJECT +- +-public: +- explicit GroupModel(Database* db, QObject* parent = nullptr); +- void changeDatabase(Database* newDb); +- QModelIndex index(Group* group) const; +- Group* groupFromIndex(const QModelIndex& index) const; +- +- int rowCount(const QModelIndex& parent = QModelIndex()) const override; +- int columnCount(const QModelIndex& parent = QModelIndex()) const override; +- QModelIndex index(int row, int column, const QModelIndex& parent = QModelIndex()) const override; +- QModelIndex parent(const QModelIndex& index) const override; +- QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; +- QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; +- Qt::DropActions supportedDropActions() const override; +- Qt::ItemFlags flags(const QModelIndex& modelIndex) const override; +- bool +- dropMimeData(const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent) override; +- QStringList mimeTypes() const override; +- QMimeData* mimeData(const QModelIndexList& indexes) const override; +- void sortChildren(Group* rootGroup, bool reverse = false); +- +-private: +- QModelIndex parent(Group* group) const; +- void collectIndexesRecursively(QList& indexes, QList groups); +- +-private slots: +- void groupDataChanged(Group* group); +- void groupAboutToRemove(Group* group); +- void groupRemoved(); +- void groupAboutToAdd(Group* group, int index); +- void groupAdded(); +- void groupAboutToMove(Group* group, Group* toGroup, int pos); +- void groupMoved(); +- +-private: +- Database* m_db; +-}; +- +-#endif // KEEPASSX_GROUPMODEL_H +diff -urNr keepassxc-2.6.4-orig/src/gui/group/GroupView.cpp keepassxc-2.6.4-patched/src/gui/group/GroupView.cpp +--- keepassxc-2.6.4-orig/src/gui/group/GroupView.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/group/GroupView.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,165 +0,0 @@ +-/* +- * Copyright (C) 2010 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "GroupView.h" +- +-#include +-#include +-#include +-#include +- +-#include "core/Database.h" +-#include "core/Group.h" +-#include "gui/group/GroupModel.h" +- +-GroupView::GroupView(Database* db, QWidget* parent) +- : QTreeView(parent) +- , m_model(new GroupModel(db, this)) +- , m_updatingExpanded(false) +-{ +- QTreeView::setModel(m_model); +- setHeaderHidden(true); +- setUniformRowHeights(true); +- +- // clang-format off +- connect(this, SIGNAL(expanded(QModelIndex)), SLOT(expandedChanged(QModelIndex))); +- connect(this, SIGNAL(collapsed(QModelIndex)), SLOT(expandedChanged(QModelIndex))); +- connect(this, SIGNAL(clicked(QModelIndex)), SIGNAL(groupSelectionChanged())); +- connect(m_model, SIGNAL(rowsInserted(QModelIndex,int,int)), SLOT(syncExpandedState(QModelIndex,int,int))); +- connect(m_model, SIGNAL(modelReset()), SLOT(modelReset())); +- connect(selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), SIGNAL(groupSelectionChanged())); +- // clang-format on +- +- new QShortcut(Qt::CTRL + Qt::Key_F10, this, SLOT(contextMenuShortcutPressed()), nullptr, Qt::WidgetShortcut); +- +- modelReset(); +- +- setDragEnabled(true); +- viewport()->setAcceptDrops(true); +- setDropIndicatorShown(true); +- setDefaultDropAction(Qt::MoveAction); +-} +- +-void GroupView::contextMenuShortcutPressed() +-{ +- auto index = currentIndex(); +- if (hasFocus() && index.isValid()) { +- emit customContextMenuRequested(visualRect(index).bottomLeft()); +- } +-} +- +-void GroupView::changeDatabase(const QSharedPointer& newDb) +-{ +- m_model->changeDatabase(newDb.data()); +-} +- +-void GroupView::dragMoveEvent(QDragMoveEvent* event) +-{ +- if (event->keyboardModifiers() & Qt::ControlModifier) { +- event->setDropAction(Qt::CopyAction); +- } else { +- event->setDropAction(Qt::MoveAction); +- } +- +- QTreeView::dragMoveEvent(event); +- +- // entries may only be dropped on groups +- if (event->isAccepted() && event->mimeData()->hasFormat("application/x-keepassx-entry") +- && (dropIndicatorPosition() == AboveItem || dropIndicatorPosition() == BelowItem)) { +- event->ignore(); +- } +-} +- +-void GroupView::focusInEvent(QFocusEvent* event) +-{ +- emit groupFocused(); +- QTreeView::focusInEvent(event); +-} +- +-Group* GroupView::currentGroup() +-{ +- if (currentIndex() == QModelIndex()) { +- return nullptr; +- } else { +- return m_model->groupFromIndex(currentIndex()); +- } +-} +- +-void GroupView::expandedChanged(const QModelIndex& index) +-{ +- if (m_updatingExpanded) { +- return; +- } +- +- Group* group = m_model->groupFromIndex(index); +- group->setExpanded(isExpanded(index)); +-} +- +-void GroupView::recInitExpanded(Group* group) +-{ +- m_updatingExpanded = true; +- expandGroup(group, group->isExpanded()); +- m_updatingExpanded = false; +- +- const QList children = group->children(); +- for (Group* child : children) { +- recInitExpanded(child); +- } +-} +- +-void GroupView::expandGroup(Group* group, bool expand) +-{ +- QModelIndex index = m_model->index(group); +- setExpanded(index, expand); +-} +- +-void GroupView::sortGroups(bool reverse) +-{ +- Group* group = currentGroup(); +- if (group) { +- m_model->sortChildren(group, reverse); +- } +-} +- +-void GroupView::setModel(QAbstractItemModel* model) +-{ +- Q_UNUSED(model); +- Q_ASSERT(false); +-} +- +-void GroupView::syncExpandedState(const QModelIndex& parent, int start, int end) +-{ +- for (int row = start; row <= end; row++) { +- Group* group = m_model->groupFromIndex(m_model->index(row, 0, parent)); +- recInitExpanded(group); +- } +-} +- +-void GroupView::setCurrentGroup(Group* group) +-{ +- if (group == nullptr) { +- setCurrentIndex(QModelIndex()); +- } else { +- setCurrentIndex(m_model->index(group)); +- } +-} +- +-void GroupView::modelReset() +-{ +- recInitExpanded(m_model->groupFromIndex(m_model->index(0, 0))); +- setCurrentIndex(m_model->index(0, 0)); +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/group/GroupView.h keepassxc-2.6.4-patched/src/gui/group/GroupView.h +--- keepassxc-2.6.4-orig/src/gui/group/GroupView.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/group/GroupView.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,61 +0,0 @@ +-/* +- * Copyright (C) 2010 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_GROUPVIEW_H +-#define KEEPASSX_GROUPVIEW_H +- +-#include +- +-class Database; +-class Group; +-class GroupModel; +- +-class GroupView : public QTreeView +-{ +- Q_OBJECT +- +-public: +- explicit GroupView(Database* db, QWidget* parent = nullptr); +- void changeDatabase(const QSharedPointer& newDb); +- void setModel(QAbstractItemModel* model) override; +- Group* currentGroup(); +- void setCurrentGroup(Group* group); +- void expandGroup(Group* group, bool expand = true); +- void sortGroups(bool reverse = false); +- +-signals: +- void groupSelectionChanged(); +- void groupFocused(); +- +-private slots: +- void expandedChanged(const QModelIndex& index); +- void syncExpandedState(const QModelIndex& parent, int start, int end); +- void modelReset(); +- void contextMenuShortcutPressed(); +- +-protected: +- void dragMoveEvent(QDragMoveEvent* event) override; +- void focusInEvent(QFocusEvent* event) override; +- +-private: +- void recInitExpanded(Group* group); +- +- GroupModel* const m_model; +- bool m_updatingExpanded; +-}; +- +-#endif // KEEPASSX_GROUPVIEW_H +diff -urNr keepassxc-2.6.4-orig/src/gui/IconDownloaderDialog.cpp keepassxc-2.6.4-patched/src/gui/IconDownloaderDialog.cpp +--- keepassxc-2.6.4-orig/src/gui/IconDownloaderDialog.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/IconDownloaderDialog.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,198 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "IconDownloaderDialog.h" +-#include "ui_IconDownloaderDialog.h" +- +-#include "core/AsyncTask.h" +-#include "core/Config.h" +-#include "core/Entry.h" +-#include "core/Global.h" +-#include "core/Group.h" +-#include "core/IconDownloader.h" +-#include "core/Metadata.h" +-#include "core/Tools.h" +-#include "gui/IconModels.h" +-#ifdef Q_OS_MACOS +-#include "gui/osutils/macutils/MacUtils.h" +-#endif +- +-#include +- +-IconDownloaderDialog::IconDownloaderDialog(QWidget* parent) +- : QDialog(parent) +- , m_ui(new Ui::IconDownloaderDialog()) +- , m_dataModel(new QStandardItemModel(this)) +-{ +- setWindowFlags(Qt::Window); +- setAttribute(Qt::WA_DeleteOnClose); +- +- m_ui->setupUi(this); +- showFallbackMessage(false); +- +- m_dataModel->clear(); +- m_dataModel->setHorizontalHeaderLabels({tr("URL"), tr("Status")}); +- +- m_ui->tableView->setModel(m_dataModel); +- m_ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); +- +- connect(m_ui->cancelButton, SIGNAL(clicked()), SLOT(abortDownloads())); +- connect(m_ui->closeButton, SIGNAL(clicked()), SLOT(close())); +-} +- +-IconDownloaderDialog::~IconDownloaderDialog() +-{ +- abortDownloads(); +-} +- +-void IconDownloaderDialog::downloadFavicons(const QSharedPointer& database, +- const QList& entries, +- bool force) +-{ +- m_db = database; +- m_urlToEntries.clear(); +- abortDownloads(); +- for (const auto& e : entries) { +- // Only consider entries with a valid URL and without a custom icon +- auto webUrl = e->webUrl(); +- if (!webUrl.isEmpty() && (force || e->iconUuid().isNull())) { +- m_urlToEntries.insert(webUrl, e); +- } +- } +- +- if (m_urlToEntries.count() > 0) { +-#ifdef Q_OS_MACOS +- macUtils()->raiseOwnWindow(); +- Tools::wait(100); +-#endif +- showFallbackMessage(false); +- m_ui->progressLabel->setText(tr("Please wait, processing entry list...")); +- open(); +- QApplication::processEvents(); +- +- for (const auto& url : m_urlToEntries.uniqueKeys()) { +- m_dataModel->appendRow(QList() +- << new QStandardItem(url) << new QStandardItem(tr("Downloading..."))); +- m_activeDownloaders.append(createDownloader(url)); +- } +- +- // Setup the dialog +- updateProgressBar(); +- updateCancelButton(); +- QApplication::processEvents(); +- +- // Start the downloads +- for (auto downloader : m_activeDownloaders) { +- downloader->download(); +- } +- } +-} +- +-IconDownloader* IconDownloaderDialog::createDownloader(const QString& url) +-{ +- auto downloader = new IconDownloader(); +- connect(downloader, +- SIGNAL(finished(const QString&, const QImage&)), +- this, +- SLOT(downloadFinished(const QString&, const QImage&))); +- +- downloader->setUrl(url); +- return downloader; +-} +- +-void IconDownloaderDialog::downloadFinished(const QString& url, const QImage& icon) +-{ +- // Prevent re-entrance from multiple calls finishing at the same time +- QMutexLocker locker(&m_mutex); +- +- // Cleanup the icon downloader that sent this signal +- auto downloader = qobject_cast(sender()); +- if (downloader) { +- downloader->deleteLater(); +- m_activeDownloaders.removeAll(downloader); +- } +- +- updateProgressBar(); +- updateCancelButton(); +- +- if (m_db && !icon.isNull()) { +- // Don't add an icon larger than 128x128, but retain original size if smaller +- auto scaledicon = icon; +- if (icon.width() > 128 || icon.height() > 128) { +- scaledicon = icon.scaled(128, 128); +- } +- +- QUuid uuid = m_db->metadata()->findCustomIcon(scaledicon); +- if (uuid.isNull()) { +- uuid = QUuid::createUuid(); +- m_db->metadata()->addCustomIcon(uuid, scaledicon); +- updateTable(url, tr("Ok")); +- } else { +- updateTable(url, tr("Already Exists")); +- } +- +- // Set the icon on all the entries associated with this url +- for (const auto entry : m_urlToEntries.values(url)) { +- entry->setIcon(uuid); +- } +- } else { +- showFallbackMessage(true); +- updateTable(url, tr("Download Failed")); +- return; +- } +-} +- +-void IconDownloaderDialog::showFallbackMessage(bool state) +-{ +- // Show fallback message if the option is not active +- bool show = state && !config()->get(Config::Security_IconDownloadFallback).toBool(); +- m_ui->fallbackLabel->setVisible(show); +-} +- +-void IconDownloaderDialog::updateProgressBar() +-{ +- int total = m_urlToEntries.uniqueKeys().count(); +- int value = total - m_activeDownloaders.count(); +- m_ui->progressBar->setValue(value); +- m_ui->progressBar->setMaximum(total); +- m_ui->progressLabel->setText( +- tr("Downloading favicons (%1/%2)...").arg(QString::number(value), QString::number(total))); +-} +- +-void IconDownloaderDialog::updateCancelButton() +-{ +- m_ui->cancelButton->setEnabled(!m_activeDownloaders.isEmpty()); +-} +- +-void IconDownloaderDialog::updateTable(const QString& url, const QString& message) +-{ +- for (int i = 0; i < m_dataModel->rowCount(); ++i) { +- if (m_dataModel->item(i, 0)->text() == url) { +- m_dataModel->item(i, 1)->setText(message); +- } +- } +-} +- +-void IconDownloaderDialog::abortDownloads() +-{ +- for (auto* downloader : m_activeDownloaders) { +- delete downloader; +- } +- m_activeDownloaders.clear(); +- updateProgressBar(); +- updateCancelButton(); +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/IconDownloaderDialog.h keepassxc-2.6.4-patched/src/gui/IconDownloaderDialog.h +--- keepassxc-2.6.4-orig/src/gui/IconDownloaderDialog.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/IconDownloaderDialog.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,69 +0,0 @@ +-/* +- * Copyright (C) 2019 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_ICONDOWNLOADERDIALOG_H +-#define KEEPASSX_ICONDOWNLOADERDIALOG_H +- +-#include +-#include +-#include +- +-#include "gui/MessageWidget.h" +- +-class Database; +-class Entry; +-class CustomIconModel; +-class IconDownloader; +- +-namespace Ui +-{ +- class IconDownloaderDialog; +-} +- +-class IconDownloaderDialog : public QDialog +-{ +- Q_OBJECT +- +-public: +- explicit IconDownloaderDialog(QWidget* parent = nullptr); +- ~IconDownloaderDialog() override; +- +- void downloadFavicons(const QSharedPointer& database, const QList& entries, bool force = false); +- +-private slots: +- void downloadFinished(const QString& url, const QImage& icon); +- void abortDownloads(); +- +-private: +- IconDownloader* createDownloader(const QString& url); +- +- void showFallbackMessage(bool state); +- void updateTable(const QString& url, const QString& message); +- void updateProgressBar(); +- void updateCancelButton(); +- +- QScopedPointer m_ui; +- QStandardItemModel* m_dataModel; +- QSharedPointer m_db; +- QMultiMap m_urlToEntries; +- QList m_activeDownloaders; +- QMutex m_mutex; +- +- Q_DISABLE_COPY(IconDownloaderDialog) +-}; +- +-#endif // KEEPASSX_ICONDOWNLOADERDIALOG_H +diff -urNr keepassxc-2.6.4-orig/src/gui/IconDownloaderDialog.ui keepassxc-2.6.4-patched/src/gui/IconDownloaderDialog.ui +--- keepassxc-2.6.4-orig/src/gui/IconDownloaderDialog.ui 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/IconDownloaderDialog.ui 1970-01-01 01:00:00.000000000 +0100 +@@ -1,159 +0,0 @@ +- +- +- IconDownloaderDialog +- +- +- +- 0 +- 0 +- 453 +- 339 +- +- +- +- +- 0 +- 0 +- +- +- +- Download Favicons +- +- +- +- +- +- +- 75 +- true +- +- +- +- Downloading favicon 0/0... +- +- +- +- +- +- +- QLayout::SetDefaultConstraint +- +- +- +- +- 0 +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- 100 +- 16777215 +- +- +- +- Cancel +- +- +- +- +- +- +- +- +- +- 75 +- false +- true +- +- +- +- Having trouble downloading icons? +-You can enable the DuckDuckGo website icon service in the security section of the application settings. +- +- +- false +- +- +- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop +- +- +- true +- +- +- +- +- +- +- Qt::ScrollBarAsNeeded +- +- +- Qt::ScrollBarAlwaysOff +- +- +- QAbstractScrollArea::AdjustToContents +- +- +- QAbstractItemView::NoEditTriggers +- +- +- QAbstractItemView::NoSelection +- +- +- QAbstractItemView::SelectRows +- +- +- Qt::ElideNone +- +- +- true +- +- +- false +- +- +- 20 +- +- +- 20 +- +- +- true +- +- +- true +- +- +- false +- +- +- +- +- +- +- Close +- +- +- true +- +- +- +- +- +- +- +- cancelButton +- tableView +- closeButton +- +- +- +- +diff -urNr keepassxc-2.6.4-orig/src/gui/IconModels.cpp keepassxc-2.6.4-patched/src/gui/IconModels.cpp +--- keepassxc-2.6.4-orig/src/gui/IconModels.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/IconModels.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,106 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "IconModels.h" +- +-#include +- +-#include "core/DatabaseIcons.h" +- +-DefaultIconModel::DefaultIconModel(QObject* parent) +- : QAbstractListModel(parent) +-{ +-} +- +-int DefaultIconModel::rowCount(const QModelIndex& parent) const +-{ +- if (!parent.isValid()) { +- return databaseIcons()->count(); +- } else { +- return 0; +- } +-} +- +-QVariant DefaultIconModel::data(const QModelIndex& index, int role) const +-{ +- if (!index.isValid()) { +- return QVariant(); +- } +- +- Q_ASSERT(index.row() < databaseIcons()->count()); +- +- if (role == Qt::DecorationRole) { +- return databaseIcons()->icon(index.row(), IconSize::Medium); +- } +- +- return QVariant(); +-} +- +-CustomIconModel::CustomIconModel(QObject* parent) +- : QAbstractListModel(parent) +-{ +-} +- +-void CustomIconModel::setIcons(const QHash& icons, const QList& iconsOrder) +-{ +- beginResetModel(); +- +- m_icons = icons; +- m_iconsOrder = iconsOrder; +- Q_ASSERT(m_icons.count() == m_iconsOrder.count()); +- +- endResetModel(); +-} +- +-int CustomIconModel::rowCount(const QModelIndex& parent) const +-{ +- if (!parent.isValid()) { +- return m_icons.size(); +- } else { +- return 0; +- } +-} +- +-QVariant CustomIconModel::data(const QModelIndex& index, int role) const +-{ +- if (!index.isValid()) { +- return QVariant(); +- } +- +- if (role == Qt::DecorationRole) { +- QUuid uuid = uuidFromIndex(index); +- return m_icons.value(uuid); +- } +- +- return QVariant(); +-} +- +-QUuid CustomIconModel::uuidFromIndex(const QModelIndex& index) const +-{ +- Q_ASSERT(index.isValid()); +- +- return m_iconsOrder.value(index.row()); +-} +- +-QModelIndex CustomIconModel::indexFromUuid(const QUuid& uuid) const +-{ +- int idx = m_iconsOrder.indexOf(uuid); +- if (idx > -1) { +- return index(idx, 0); +- } +- return {}; +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/IconModels.h keepassxc-2.6.4-patched/src/gui/IconModels.h +--- keepassxc-2.6.4-orig/src/gui/IconModels.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/IconModels.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,53 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_ICONMODELS_H +-#define KEEPASSX_ICONMODELS_H +- +-#include +-#include +- +-class DefaultIconModel : public QAbstractListModel +-{ +- Q_OBJECT +- +-public: +- explicit DefaultIconModel(QObject* parent = nullptr); +- +- int rowCount(const QModelIndex& parent = QModelIndex()) const override; +- QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; +-}; +- +-class CustomIconModel : public QAbstractListModel +-{ +- Q_OBJECT +- +-public: +- explicit CustomIconModel(QObject* parent = nullptr); +- +- int rowCount(const QModelIndex& parent = QModelIndex()) const override; +- QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; +- void setIcons(const QHash& icons, const QList& iconsOrder); +- QUuid uuidFromIndex(const QModelIndex& index) const; +- QModelIndex indexFromUuid(const QUuid& uuid) const; +- +-private: +- QHash m_icons; +- QList m_iconsOrder; +-}; +- +-#endif // KEEPASSX_ICONMODELS_H +diff -urNr keepassxc-2.6.4-orig/src/gui/KeePass1OpenWidget.cpp keepassxc-2.6.4-patched/src/gui/KeePass1OpenWidget.cpp +--- keepassxc-2.6.4-orig/src/gui/KeePass1OpenWidget.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/KeePass1OpenWidget.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,65 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "KeePass1OpenWidget.h" +-#include "ui_DatabaseOpenWidget.h" +- +-#include +-#include +- +-#include "core/Database.h" +-#include "core/Metadata.h" +-#include "format/KeePass1Reader.h" +-#include "gui/MessageBox.h" +- +-KeePass1OpenWidget::KeePass1OpenWidget(QWidget* parent) +- : DatabaseOpenWidget(parent) +-{ +- m_ui->labelHeadline->setText(tr("Import KeePass1 Database")); +-} +- +-void KeePass1OpenWidget::openDatabase() +-{ +- KeePass1Reader reader; +- +- QString password; +- QString keyFileName = m_ui->keyFileLineEdit->text(); +- +- if (!m_ui->editPassword->text().isEmpty() || m_retryUnlockWithEmptyPassword) { +- password = m_ui->editPassword->text(); +- } +- +- QFile file(m_filename); +- if (!file.open(QIODevice::ReadOnly)) { +- m_ui->messageWidget->showMessage(tr("Unable to open the database.").append("\n").append(file.errorString()), +- MessageWidget::Error); +- return; +- } +- +- QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); +- m_db = reader.readDatabase(&file, password, keyFileName); +- QApplication::restoreOverrideCursor(); +- +- if (m_db) { +- m_db->metadata()->setName(QFileInfo(m_filename).completeBaseName()); +- emit dialogFinished(true); +- clearForms(); +- } else { +- m_ui->messageWidget->showMessage(tr("Unable to open the database.").append("\n").append(reader.errorString()), +- MessageWidget::Error); +- } +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/KeePass1OpenWidget.h keepassxc-2.6.4-patched/src/gui/KeePass1OpenWidget.h +--- keepassxc-2.6.4-orig/src/gui/KeePass1OpenWidget.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/KeePass1OpenWidget.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,34 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_KEEPASS1OPENWIDGET_H +-#define KEEPASSX_KEEPASS1OPENWIDGET_H +- +-#include "gui/DatabaseOpenWidget.h" +- +-class KeePass1OpenWidget : public DatabaseOpenWidget +-{ +- Q_OBJECT +- +-public: +- explicit KeePass1OpenWidget(QWidget* parent = nullptr); +- +-protected: +- void openDatabase() override; +-}; +- +-#endif // KEEPASSX_KEEPASS1OPENWIDGET_H +diff -urNr keepassxc-2.6.4-orig/src/gui/KMessageWidget.cpp keepassxc-2.6.4-patched/src/gui/KMessageWidget.cpp +--- keepassxc-2.6.4-orig/src/gui/KMessageWidget.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/KMessageWidget.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,487 +0,0 @@ +-/* This file is part of the KDE libraries +- * +- * Copyright (c) 2011 Aurélien Gâteau +- * Copyright (c) 2014 Dominik Haumann +- * +- * This library is free software; you can redistribute it and/or +- * modify it under the terms of the GNU Lesser General Public +- * License as published by the Free Software Foundation; either +- * version 2.1 of the License, or (at your option) any later version. +- * +- * This library is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +- * Lesser General Public License for more details. +- * +- * You should have received a copy of the GNU Lesser General Public +- * License along with this library; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +- * 02110-1301 USA +- */ +-#include "KMessageWidget.h" +- +-#include "core/Resources.h" +-#include "core/Global.h" +- +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-//--------------------------------------------------------------------- +-// KMessageWidgetPrivate +-//--------------------------------------------------------------------- +-class KMessageWidgetPrivate +-{ +-public: +- void init(KMessageWidget *); +- +- KMessageWidget *q; +- QFrame *content; +- QLabel *iconLabel; +- QLabel *textLabel; +- QToolButton *closeButton; +- QTimeLine *timeLine; +- QIcon icon; +- QPixmap closeButtonPixmap; +- +- KMessageWidget::MessageType messageType; +- bool wordWrap; +- QList buttons; +- QPixmap contentSnapShot; +- +- void createLayout(); +- void updateSnapShot(); +- void updateLayout(); +- void slotTimeLineChanged(qreal); +- void slotTimeLineFinished(); +- +- int bestContentHeight() const; +-}; +- +-void KMessageWidgetPrivate::init(KMessageWidget *q_ptr) +-{ +- q = q_ptr; +- +- q->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); +- +- timeLine = new QTimeLine(500, q); +- QObject::connect(timeLine, SIGNAL(valueChanged(qreal)), q, SLOT(slotTimeLineChanged(qreal))); +- QObject::connect(timeLine, SIGNAL(finished()), q, SLOT(slotTimeLineFinished())); +- +- content = new QFrame(q); +- content->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); +- +- wordWrap = false; +- +- iconLabel = new QLabel(content); +- iconLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); +- iconLabel->hide(); +- +- textLabel = new QLabel(content); +- textLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); +- textLabel->setTextInteractionFlags(Qt::TextBrowserInteraction); +- QObject::connect(textLabel, SIGNAL(linkActivated(QString)), q, SIGNAL(linkActivated(QString))); +- QObject::connect(textLabel, SIGNAL(linkHovered(QString)), q, SIGNAL(linkHovered(QString))); +- +- QAction *closeAction = new QAction(q); +- closeAction->setText(KMessageWidget::tr("&Close")); +- closeAction->setToolTip(KMessageWidget::tr("Close message")); +- closeAction->setIcon(Resources::instance()->icon("message-close")); +- +- QObject::connect(closeAction, SIGNAL(triggered(bool)), q, SLOT(animatedHide())); +- +- closeButton = new QToolButton(content); +- closeButton->setAutoRaise(true); +- closeButton->setDefaultAction(closeAction); +- closeButtonPixmap = QPixmap(closeButton->icon().pixmap(closeButton->icon().actualSize(QSize(16, 16)))); +- +- q->setMessageType(KMessageWidget::Information); +-} +- +-void KMessageWidgetPrivate::createLayout() +-{ +- delete content->layout(); +- +- content->resize(q->size()); +- +- qDeleteAll(buttons); +- buttons.clear(); +- +- const auto actions = q->actions(); +- for (QAction *action: actions) { +- QToolButton *button = new QToolButton(content); +- button->setDefaultAction(action); +- button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); +- buttons.append(button); +- } +- +- // AutoRaise reduces visual clutter, but we don't want to turn it on if +- // there are other buttons, otherwise the close button will look different +- // from the others. +- closeButton->setAutoRaise(buttons.isEmpty()); +- +- if (wordWrap) { +- QGridLayout *layout = new QGridLayout(content); +- // Set alignment to make sure icon does not move down if text wraps +- layout->addWidget(iconLabel, 0, 0, 1, 1, Qt::AlignHCenter | Qt::AlignTop); +- layout->addWidget(textLabel, 0, 1); +- +- QHBoxLayout *buttonLayout = new QHBoxLayout; +- buttonLayout->addStretch(); +- for (QToolButton* button: asConst(buttons)) { +- // For some reason, calling show() is necessary if wordwrap is true, +- // otherwise the buttons do not show up. It is not needed if +- // wordwrap is false. +- button->show(); +- buttonLayout->addWidget(button); +- } +- buttonLayout->addWidget(closeButton); +- layout->addItem(buttonLayout, 1, 0, 1, 2); +- } else { +- QHBoxLayout *layout = new QHBoxLayout(content); +- layout->addWidget(iconLabel); +- layout->addWidget(textLabel); +- +- for (QToolButton* button: asConst(buttons)) { +- layout->addWidget(button); +- } +- +- layout->addWidget(closeButton); +- }; +- +- if (q->isVisible()) { +- q->setFixedHeight(content->sizeHint().height()); +- } +- q->updateGeometry(); +-} +- +-void KMessageWidgetPrivate::updateLayout() +-{ +- if (content->layout()) { +- createLayout(); +- } +-} +- +-void KMessageWidgetPrivate::updateSnapShot() +-{ +- // Attention: updateSnapShot calls QWidget::render(), which causes the whole +- // window layouts to be activated. Calling this method from resizeEvent() +- // can lead to infinite recursion, see: +- // https://bugs.kde.org/show_bug.cgi?id=311336 +- contentSnapShot = QPixmap(content->size() * q->devicePixelRatio()); +- contentSnapShot.setDevicePixelRatio(q->devicePixelRatio()); +- contentSnapShot.fill(Qt::transparent); +- content->render(&contentSnapShot, QPoint(), QRegion(), QWidget::DrawChildren); +-} +- +-void KMessageWidgetPrivate::slotTimeLineChanged(qreal value) +-{ +- q->setFixedHeight(qMin(value * 2, qreal(1.0)) * content->height()); +- q->update(); +-} +- +-void KMessageWidgetPrivate::slotTimeLineFinished() +-{ +- if (timeLine->direction() == QTimeLine::Forward) { +- // Show +- // We set the whole geometry here, because it may be wrong if a +- // KMessageWidget is shown right when the toplevel window is created. +- content->setGeometry(0, 0, q->width(), bestContentHeight()); +- +- // notify about finished animation +- emit q->showAnimationFinished(); +- } else { +- // hide and notify about finished animation +- q->hide(); +- emit q->hideAnimationFinished(); +- } +-} +- +-int KMessageWidgetPrivate::bestContentHeight() const +-{ +- int height = content->heightForWidth(q->width()); +- if (height == -1) { +- height = content->sizeHint().height(); +- } +- return height; +-} +- +-//--------------------------------------------------------------------- +-// KMessageWidget +-//--------------------------------------------------------------------- +-KMessageWidget::KMessageWidget(QWidget *parent) +-: QFrame(parent) +-, d(new KMessageWidgetPrivate) +-{ +- d->init(this); +-} +- +-KMessageWidget::KMessageWidget(const QString &text, QWidget *parent) +-: QFrame(parent) +-, d(new KMessageWidgetPrivate) +-{ +- d->init(this); +- setText(text); +-} +- +-KMessageWidget::~KMessageWidget() +-{ +- delete d; +-} +- +-QString KMessageWidget::text() const +-{ +- return d->textLabel->text(); +-} +- +-void KMessageWidget::setText(const QString &text) +-{ +- d->textLabel->setText(text); +- updateGeometry(); +-} +- +-KMessageWidget::MessageType KMessageWidget::messageType() const +-{ +- return d->messageType; +-} +- +-void KMessageWidget::setMessageType(KMessageWidget::MessageType type) +-{ +- d->messageType = type; +- QColor bg0, bg1, bg2, border; +- QColor fg = QColor(238, 238, 238); +- switch (type) { +- case Positive: +- bg1.setRgb(37, 163, 83); +- break; +- case Information: +- bg1.setRgb(24, 187, 242); +- break; +- case Warning: +- bg1.setRgb(252, 193, 57); +- fg = QColor(48, 48, 48); +- break; +- case Error: +- bg1.setRgb(198, 69, 21); +- break; +- } +- +- // Colors +- bg0 = bg1.lighter(105); +- bg2 = bg1.darker(105); +- border = bg1.darker(115); +- +- // Tint close icon +- auto closeButtonPixmap = d->closeButtonPixmap; +- QPainter painter; +- painter.begin(&closeButtonPixmap); +- painter.setRenderHints(QPainter::HighQualityAntialiasing); +- painter.setCompositionMode(QPainter::CompositionMode_SourceIn); +- painter.fillRect(QRect(0, 0, 16, 16), fg); +- painter.end(); +- d->closeButton->setIcon(closeButtonPixmap); +- d->closeButton->setStyleSheet(QStringLiteral("QToolButton {" +- " background: transparent;" +- " border-radius: 2px;" +- " border: none; }" +- "QToolButton:hover, QToolButton:focus {" +- " border: 1px solid %1; }").arg(fg.name())); +- +- d->content->setStyleSheet( +- QStringLiteral(".QFrame {" +- "background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1," +- " stop: 0 %1," +- " stop: 0.1 %2," +- " stop: 1.0 %3);" +- " border-radius: 2px;" +- " border: 1px solid %4;" +- " margin: %5px;" +- " padding: 5px;" +- "}" +- ".QLabel { color: %6; }" +- ) +- .arg(bg0.name(), +- bg1.name(), +- bg2.name(), +- border.name()) +- // DefaultFrameWidth returns the size of the external margin + border width. We know our border is 1px, +- // so we subtract this from the frame normal QStyle FrameWidth to get our margin +- .arg(style()->pixelMetric(QStyle::PM_DefaultFrameWidth, nullptr, this) - 1) +- .arg(fg.name()) +- ); +-} +- +-QSize KMessageWidget::sizeHint() const +-{ +- ensurePolished(); +- return d->content->sizeHint(); +-} +- +-QSize KMessageWidget::minimumSizeHint() const +-{ +- ensurePolished(); +- return d->content->minimumSizeHint(); +-} +- +-bool KMessageWidget::event(QEvent *event) +-{ +- if (event->type() == QEvent::Polish && !d->content->layout()) { +- d->createLayout(); +- } +- return QFrame::event(event); +-} +- +-void KMessageWidget::resizeEvent(QResizeEvent *event) +-{ +- QFrame::resizeEvent(event); +- +- if (d->timeLine->state() == QTimeLine::NotRunning) { +- d->content->resize(width(), d->bestContentHeight()); +- } +-} +- +-int KMessageWidget::heightForWidth(int width) const +-{ +- ensurePolished(); +- return d->content->heightForWidth(width); +-} +- +-void KMessageWidget::paintEvent(QPaintEvent *event) +-{ +- QFrame::paintEvent(event); +- if (d->timeLine->state() == QTimeLine::Running) { +- QPainter painter(this); +- painter.setOpacity(d->timeLine->currentValue() * d->timeLine->currentValue()); +- painter.drawPixmap(0, 0, d->contentSnapShot); +- } +-} +- +-bool KMessageWidget::wordWrap() const +-{ +- return d->wordWrap; +-} +- +-void KMessageWidget::setWordWrap(bool wordWrap) +-{ +- d->wordWrap = wordWrap; +- d->textLabel->setWordWrap(wordWrap); +- QSizePolicy policy = sizePolicy(); +- policy.setHeightForWidth(wordWrap); +- setSizePolicy(policy); +- d->updateLayout(); +- // Without this, when user does wordWrap -> !wordWrap -> wordWrap, a minimum +- // height is set, causing the widget to be too high. +- // Mostly visible in test programs. +- if (wordWrap) { +- setMinimumHeight(0); +- } +-} +- +-bool KMessageWidget::isCloseButtonVisible() const +-{ +- return d->closeButton->isVisible(); +-} +- +-void KMessageWidget::setCloseButtonVisible(bool show) +-{ +- d->closeButton->setVisible(show); +- updateGeometry(); +-} +- +-void KMessageWidget::addAction(QAction *action) +-{ +- QFrame::addAction(action); +- d->updateLayout(); +-} +- +-void KMessageWidget::removeAction(QAction *action) +-{ +- QFrame::removeAction(action); +- d->updateLayout(); +-} +- +-void KMessageWidget::animatedShow() +-{ +- if (!style()->styleHint(QStyle::SH_Widget_Animate, nullptr, this)) { +- show(); +- emit showAnimationFinished(); +- return; +- } +- +- if (isVisible()) { +- return; +- } +- +- QFrame::show(); +- setFixedHeight(0); +- int wantedHeight = d->bestContentHeight(); +- d->content->setGeometry(0, -wantedHeight, width(), wantedHeight); +- +- d->updateSnapShot(); +- +- d->timeLine->setDirection(QTimeLine::Forward); +- if (d->timeLine->state() == QTimeLine::NotRunning) { +- d->timeLine->start(); +- } +-} +- +-void KMessageWidget::animatedHide() +-{ +- if (!style()->styleHint(QStyle::SH_Widget_Animate, nullptr, this)) { +- hide(); +- emit hideAnimationFinished(); +- return; +- } +- +- if (!isVisible()) { +- hide(); +- return; +- } +- +- d->content->move(0, -d->content->height()); +- d->updateSnapShot(); +- +- d->timeLine->setDirection(QTimeLine::Backward); +- if (d->timeLine->state() == QTimeLine::NotRunning) { +- d->timeLine->start(); +- } +-} +- +-bool KMessageWidget::isHideAnimationRunning() const +-{ +- return (d->timeLine->direction() == QTimeLine::Backward) +- && (d->timeLine->state() == QTimeLine::Running); +-} +- +-bool KMessageWidget::isShowAnimationRunning() const +-{ +- return (d->timeLine->direction() == QTimeLine::Forward) +- && (d->timeLine->state() == QTimeLine::Running); +-} +- +-QIcon KMessageWidget::icon() const +-{ +- return d->icon; +-} +- +-void KMessageWidget::setIcon(const QIcon &icon) +-{ +- d->icon = icon; +- if (d->icon.isNull()) { +- d->iconLabel->hide(); +- } else { +- const int size = style()->pixelMetric(QStyle::PM_ToolBarIconSize); +- d->iconLabel->setPixmap(d->icon.pixmap(size)); +- d->iconLabel->show(); +- } +-} +- +-#include "moc_KMessageWidget.cpp" +diff -urNr keepassxc-2.6.4-orig/src/gui/KMessageWidget.h keepassxc-2.6.4-patched/src/gui/KMessageWidget.h +--- keepassxc-2.6.4-orig/src/gui/KMessageWidget.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/KMessageWidget.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,342 +0,0 @@ +-/* This file is part of the KDE libraries +- * +- * Copyright (c) 2011 Aurélien Gâteau +- * Copyright (c) 2014 Dominik Haumann +- * +- * This library is free software; you can redistribute it and/or +- * modify it under the terms of the GNU Lesser General Public +- * License as published by the Free Software Foundation; either +- * version 2.1 of the License, or (at your option) any later version. +- * +- * This library is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +- * Lesser General Public License for more details. +- * +- * You should have received a copy of the GNU Lesser General Public +- * License along with this library; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +- * 02110-1301 USA +- */ +-#ifndef KMESSAGEWIDGET_H +-#define KMESSAGEWIDGET_H +- +-#include +- +-class KMessageWidgetPrivate; +- +-/** +- * @short A widget to provide feedback or propose opportunistic interactions. +- * +- * KMessageWidget can be used to provide inline positive or negative +- * feedback, or to implement opportunistic interactions. +- * +- * As a feedback widget, KMessageWidget provides a less intrusive alternative +- * to "OK Only" message boxes. If you want to avoid a modal KMessageBox, +- * consider using KMessageWidget instead. +- * +- * Examples of KMessageWidget look as follows, all of them having an icon set +- * with setIcon(), and the first three show a close button: +- * +- * \image html kmessagewidget.png "KMessageWidget with different message types" +- * +- * Negative feedback +- * +- * The KMessageWidget can be used as a secondary indicator of failure: the +- * first indicator is usually the fact the action the user expected to happen +- * did not happen. +- * +- * Example: User fills a form, clicks "Submit". +- * +- * @li Expected feedback: form closes +- * @li First indicator of failure: form stays there +- * @li Second indicator of failure: a KMessageWidget appears on top of the +- * form, explaining the error condition +- * +- * When used to provide negative feedback, KMessageWidget should be placed +- * close to its context. In the case of a form, it should appear on top of the +- * form entries. +- * +- * KMessageWidget should get inserted in the existing layout. Space should not +- * be reserved for it, otherwise it becomes "dead space", ignored by the user. +- * KMessageWidget should also not appear as an overlay to prevent blocking +- * access to elements the user needs to interact with to fix the failure. +- * +- * Positive feedback +- * +- * KMessageWidget can be used for positive feedback but it shouldn't be +- * overused. It is often enough to provide feedback by simply showing the +- * results of an action. +- * +- * Examples of acceptable uses: +- * +- * @li Confirm success of "critical" transactions +- * @li Indicate completion of background tasks +- * +- * Example of unadapted uses: +- * +- * @li Indicate successful saving of a file +- * @li Indicate a file has been successfully removed +- * +- * Opportunistic interaction +- * +- * Opportunistic interaction is the situation where the application suggests to +- * the user an action he could be interested in perform, either based on an +- * action the user just triggered or an event which the application noticed. +- * +- * Example of acceptable uses: +- * +- * @li A browser can propose remembering a recently entered password +- * @li A music collection can propose ripping a CD which just got inserted +- * @li A chat application may notify the user a "special friend" just connected +- * +- * @author Aurélien Gâteau +- * @since 4.7 +- */ +-class KMessageWidget : public QFrame +-{ +- Q_OBJECT +- Q_ENUMS(MessageType) +- +- Q_PROPERTY(QString text READ text WRITE setText) +- Q_PROPERTY(bool wordWrap READ wordWrap WRITE setWordWrap) +- Q_PROPERTY(bool closeButtonVisible READ isCloseButtonVisible WRITE setCloseButtonVisible) +- Q_PROPERTY(MessageType messageType READ messageType WRITE setMessageType) +- Q_PROPERTY(QIcon icon READ icon WRITE setIcon) +-public: +- +- /** +- * Available message types. +- * The background colors are chosen depending on the message type. +- */ +- enum MessageType { +- Positive, +- Information, +- Warning, +- Error +- }; +- +- /** +- * Constructs a KMessageWidget with the specified @p parent. +- */ +- explicit KMessageWidget(QWidget *parent = 0); +- +- /** +- * Constructs a KMessageWidget with the specified @p parent and +- * contents @p text. +- */ +- explicit KMessageWidget(const QString &text, QWidget *parent = 0); +- +- /** +- * Destructor. +- */ +- ~KMessageWidget(); +- +- /** +- * Get the text of this message widget. +- * @see setText() +- */ +- QString text() const; +- +- /** +- * Check whether word wrap is enabled. +- * +- * If word wrap is enabled, the message widget wraps the displayed text +- * as required to the available width of the widget. This is useful to +- * avoid breaking widget layouts. +- * +- * @see setWordWrap() +- */ +- bool wordWrap() const; +- +- /** +- * Check whether the close button is visible. +- * +- * @see setCloseButtonVisible() +- */ +- bool isCloseButtonVisible() const; +- +- /** +- * Get the type of this message. +- * By default, the type is set to KMessageWidget::Information. +- * +- * @see KMessageWidget::MessageType, setMessageType() +- */ +- MessageType messageType() const; +- +- /** +- * Add @p action to the message widget. +- * For each action a button is added to the message widget in the +- * order the actions were added. +- * +- * @param action the action to add +- * @see removeAction(), QWidget::actions() +- */ +- void addAction(QAction *action); +- +- /** +- * Remove @p action from the message widget. +- * +- * @param action the action to remove +- * @see KMessageWidget::MessageType, addAction(), setMessageType() +- */ +- void removeAction(QAction *action); +- +- /** +- * Returns the preferred size of the message widget. +- */ +- QSize sizeHint() const Q_DECL_OVERRIDE; +- +- /** +- * Returns the minimum size of the message widget. +- */ +- QSize minimumSizeHint() const Q_DECL_OVERRIDE; +- +- /** +- * Returns the required height for @p width. +- * @param width the width in pixels +- */ +- int heightForWidth(int width) const Q_DECL_OVERRIDE; +- +- /** +- * The icon shown on the left of the text. By default, no icon is shown. +- * @since 4.11 +- */ +- QIcon icon() const; +- +- /** +- * Check whether the hide animation started by calling animatedHide() +- * is still running. If animations are disabled, this function always +- * returns @e false. +- * +- * @see animatedHide(), hideAnimationFinished() +- * @since 5.0 +- */ +- bool isHideAnimationRunning() const; +- +- /** +- * Check whether the show animation started by calling animatedShow() +- * is still running. If animations are disabled, this function always +- * returns @e false. +- * +- * @see animatedShow(), showAnimationFinished() +- * @since 5.0 +- */ +- bool isShowAnimationRunning() const; +- +-public slots: +- /** +- * Set the text of the message widget to @p text. +- * If the message widget is already visible, the text changes on the fly. +- * +- * @param text the text to display, rich text is allowed +- * @see text() +- */ +- void setText(const QString &text); +- +- /** +- * Set word wrap to @p wordWrap. If word wrap is enabled, the text() +- * of the message widget is wrapped to fit the available width. +- * If word wrap is disabled, the message widget's minimum size is +- * such that the entire text fits. +- * +- * @param wordWrap disable/enable word wrap +- * @see wordWrap() +- */ +- void setWordWrap(bool wordWrap); +- +- /** +- * Set the visibility of the close button. If @p visible is @e true, +- * a close button is shown that calls animatedHide() if clicked. +- * +- * @see closeButtonVisible(), animatedHide() +- */ +- void setCloseButtonVisible(bool visible); +- +- /** +- * Set the message type to @p type. +- * By default, the message type is set to KMessageWidget::Information. +- * +- * @see messageType(), KMessageWidget::MessageType +- */ +- void setMessageType(KMessageWidget::MessageType type); +- +- /** +- * Show the widget using an animation. +- */ +- void animatedShow(); +- +- /** +- * Hide the widget using an animation. +- */ +- void animatedHide(); +- +- /** +- * Define an icon to be shown on the left of the text +- * @since 4.11 +- */ +- void setIcon(const QIcon &icon); +- +-signals: +- /** +- * This signal is emitted when the user clicks a link in the text label. +- * The URL referred to by the href anchor is passed in contents. +- * @param contents text of the href anchor +- * @see QLabel::linkActivated() +- * @since 4.10 +- */ +- void linkActivated(const QString &contents); +- +- /** +- * This signal is emitted when the user hovers over a link in the text label. +- * The URL referred to by the href anchor is passed in contents. +- * @param contents text of the href anchor +- * @see QLabel::linkHovered() +- * @since 4.11 +- */ +- void linkHovered(const QString &contents); +- +- /** +- * This signal is emitted when the hide animation is finished, started by +- * calling animatedHide(). If animations are disabled, this signal is +- * emitted immediately after the message widget got hidden. +- * +- * @note This signal is @e not emitted if the widget was hidden by +- * calling hide(), so this signal is only useful in conjunction +- * with animatedHide(). +- * +- * @see animatedHide() +- * @since 5.0 +- */ +- void hideAnimationFinished(); +- +- /** +- * This signal is emitted when the show animation is finished, started by +- * calling animatedShow(). If animations are disabled, this signal is +- * emitted immediately after the message widget got shown. +- * +- * @note This signal is @e not emitted if the widget was shown by +- * calling show(), so this signal is only useful in conjunction +- * with animatedShow(). +- * +- * @see animatedShow() +- * @since 5.0 +- */ +- void showAnimationFinished(); +- +-protected: +- void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; +- +- bool event(QEvent *event) Q_DECL_OVERRIDE; +- +- void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; +- +-private: +- KMessageWidgetPrivate *const d; +- friend class KMessageWidgetPrivate; +- +- Q_PRIVATE_SLOT(d, void slotTimeLineChanged(qreal)) +- Q_PRIVATE_SLOT(d, void slotTimeLineFinished()) +-}; +- +-#endif /* KMESSAGEWIDGET_H */ +diff -urNr keepassxc-2.6.4-orig/src/gui/MainWindowAdaptor.cpp keepassxc-2.6.4-patched/src/gui/MainWindowAdaptor.cpp +--- keepassxc-2.6.4-orig/src/gui/MainWindowAdaptor.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/MainWindowAdaptor.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,64 +0,0 @@ +-/* +- * This file was generated by qdbusxml2cpp version 0.8 +- * Command line was: qdbusxml2cpp -c MainWindowAdaptor -a MainWindowAdaptor.h:MainWindowAdaptor.cpp +- * org.keepassxc.MainWindow.xml +- * +- * qdbusxml2cpp is Copyright (C) 2015 The Qt Company Ltd. +- * +- * This is an auto-generated file. +- * Do not edit! All changes made to it will be lost. +- */ +- +-#include "MainWindowAdaptor.h" +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-/* +- * Implementation of adaptor class MainWindowAdaptor +- */ +- +-MainWindowAdaptor::MainWindowAdaptor(QObject* parent) +- : QDBusAbstractAdaptor(parent) +-{ +- setAutoRelaySignals(true); +-} +- +-MainWindowAdaptor::~MainWindowAdaptor() +-{ +-} +- +-void MainWindowAdaptor::appExit() +-{ +- QMetaObject::invokeMethod(parent(), "appExit"); +-} +- +-void MainWindowAdaptor::closeAllDatabases() +-{ +- QMetaObject::invokeMethod(parent(), "closeAllDatabases"); +-} +- +-void MainWindowAdaptor::lockAllDatabases() +-{ +- QMetaObject::invokeMethod(parent(), "lockAllDatabases"); +-} +- +-void MainWindowAdaptor::openDatabase(const QString& fileName) +-{ +- QMetaObject::invokeMethod(parent(), "openDatabase", Q_ARG(QString, fileName)); +-} +- +-void MainWindowAdaptor::openDatabase(const QString& fileName, const QString& pw) +-{ +- QMetaObject::invokeMethod(parent(), "openDatabase", Q_ARG(QString, fileName), Q_ARG(QString, pw)); +-} +- +-void MainWindowAdaptor::openDatabase(const QString& fileName, const QString& pw, const QString& keyFile) +-{ +- QMetaObject::invokeMethod( +- parent(), "openDatabase", Q_ARG(QString, fileName), Q_ARG(QString, pw), Q_ARG(QString, keyFile)); +-} +diff -urNr keepassxc-2.6.4-orig/src/gui/MainWindowAdaptor.h keepassxc-2.6.4-patched/src/gui/MainWindowAdaptor.h +--- keepassxc-2.6.4-orig/src/gui/MainWindowAdaptor.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/MainWindowAdaptor.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,69 +0,0 @@ +-/* +- * This file was generated by qdbusxml2cpp version 0.8 +- * Command line was: qdbusxml2cpp -c MainWindowAdaptor -a MainWindowAdaptor.h:MainWindowAdaptor.cpp +- * org.keepassxc.MainWindow.xml +- * +- * qdbusxml2cpp is Copyright (C) 2015 The Qt Company Ltd. +- * +- * This is an auto-generated file. +- * This file may have been hand-edited. Look for HAND-EDIT comments +- * before re-generating it. +- */ +- +-#ifndef MAINWINDOWADAPTOR_H +-#define MAINWINDOWADAPTOR_H +- +-#include +-#include +-QT_BEGIN_NAMESPACE +-class QByteArray; +-template class QList; +-template class QMap; +-class QString; +-class QStringList; +-class QVariant; +-QT_END_NAMESPACE +- +-/* +- * Adaptor class for interface org.keepassxc.MainWindow +- */ +-class MainWindowAdaptor : public QDBusAbstractAdaptor +-{ +- Q_OBJECT +- Q_CLASSINFO("D-Bus Interface", "org.keepassxc.MainWindow") +- Q_CLASSINFO("D-Bus Introspection", +- "" +- " \n" +- " \n" +- " \n" +- " \n" +- " \n" +- " \n" +- " \n" +- " \n" +- " \n" +- " \n" +- " \n" +- " \n" +- " \n" +- " \n" +- " \n" +- " \n" +- " \n" +- "") +-public: +- MainWindowAdaptor(QObject* parent); +- virtual ~MainWindowAdaptor(); +- +-public: +-public slots: +- void appExit(); +- void closeAllDatabases(); +- void lockAllDatabases(); +- void openDatabase(const QString& fileName); +- void openDatabase(const QString& fileName, const QString& pw); +- void openDatabase(const QString& fileName, const QString& pw, const QString& keyFile); +-signals: +-}; +- +-#endif +diff -urNr keepassxc-2.6.4-orig/src/gui/MainWindow.cpp keepassxc-2.6.4-patched/src/gui/MainWindow.cpp +--- keepassxc-2.6.4-orig/src/gui/MainWindow.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/MainWindow.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,1836 +0,0 @@ +-/* +- * Copyright (C) 2010 Felix Geyer +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "MainWindow.h" +-#include "ui_MainWindow.h" +- +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-#include "config-keepassx.h" +- +-#include "autotype/AutoType.h" +-#include "core/Config.h" +-#include "core/InactivityTimer.h" +-#include "core/Metadata.h" +-#include "core/Resources.h" +-#include "core/Tools.h" +-#include "gui/AboutDialog.h" +-#include "gui/DatabaseWidget.h" +-#include "gui/MessageBox.h" +-#include "gui/SearchWidget.h" +-#include "gui/osutils/OSUtils.h" +-#include "keys/CompositeKey.h" +-#include "keys/FileKey.h" +-#include "keys/PasswordKey.h" +- +-#ifdef Q_OS_MACOS +-#include "gui/osutils/macutils/MacUtils.h" +-#ifdef WITH_XC_TOUCHID +-#include "touchid/TouchID.h" +-#endif +-#endif +- +-#ifdef WITH_XC_UPDATECHECK +-#include "gui/UpdateCheckDialog.h" +-#include "updatecheck/UpdateChecker.h" +-#endif +- +-#ifdef WITH_XC_SSHAGENT +-#include "sshagent/AgentSettingsPage.h" +-#include "sshagent/SSHAgent.h" +-#endif +-#ifdef WITH_XC_KEESHARE +-#include "keeshare/KeeShare.h" +-#include "keeshare/SettingsPageKeeShare.h" +-#endif +- +-#ifdef WITH_XC_FDOSECRETS +-#include "fdosecrets/FdoSecretsPlugin.h" +-#endif +- +-#ifdef WITH_XC_YUBIKEY +-#include "keys/drivers/YubiKey.h" +-#endif +- +-#ifdef WITH_XC_BROWSER +-#include "browser/BrowserService.h" +-#include "browser/BrowserSettingsPage.h" +-#endif +- +-#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(QT_NO_DBUS) +-#include "gui/MainWindowAdaptor.h" +-#include +-#include +-#endif +- +-const QString MainWindow::BaseWindowTitle = "KeePassXC"; +- +-MainWindow* g_MainWindow = nullptr; +-MainWindow* getMainWindow() +-{ +- return g_MainWindow; +-} +- +-MainWindow::MainWindow() +- : m_ui(new Ui::MainWindow()) +-{ +- g_MainWindow = this; +- +- m_ui->setupUi(this); +- +-#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(QT_NO_DBUS) +- new MainWindowAdaptor(this); +- QDBusConnection dbus = QDBusConnection::sessionBus(); +- dbus.registerObject("/keepassxc", this); +- dbus.registerService("org.keepassxc.KeePassXC.MainWindow"); +-#endif +- +- setAcceptDrops(true); +- +- if (config()->get(Config::GUI_CompactMode).toBool()) { +- m_ui->toolBar->setIconSize({20, 20}); +- } +- +- // Setup the search widget in the toolbar +- m_searchWidget = new SearchWidget(); +- m_searchWidget->connectSignals(m_actionMultiplexer); +- m_searchWidgetAction = m_ui->toolBar->addWidget(m_searchWidget); +- m_searchWidgetAction->setEnabled(false); +- +- m_countDefaultAttributes = m_ui->menuEntryCopyAttribute->actions().size(); +- +- m_entryContextMenu = new QMenu(this); +- m_entryContextMenu->addAction(m_ui->actionEntryCopyUsername); +- m_entryContextMenu->addAction(m_ui->actionEntryCopyPassword); +- m_entryContextMenu->addAction(m_ui->menuEntryCopyAttribute->menuAction()); +- m_entryContextMenu->addAction(m_ui->menuEntryTotp->menuAction()); +- m_entryContextMenu->addSeparator(); +- m_entryContextMenu->addAction(m_ui->actionEntryAutoType); +- m_entryContextMenu->addAction(m_ui->menuEntryAutoTypeWithSequence->menuAction()); +- m_entryContextMenu->addSeparator(); +- m_entryContextMenu->addAction(m_ui->actionEntryEdit); +- m_entryContextMenu->addAction(m_ui->actionEntryClone); +- m_entryContextMenu->addAction(m_ui->actionEntryDelete); +- m_entryContextMenu->addAction(m_ui->actionEntryNew); +- m_entryContextMenu->addSeparator(); +- m_entryContextMenu->addAction(m_ui->actionEntryMoveUp); +- m_entryContextMenu->addAction(m_ui->actionEntryMoveDown); +- m_entryContextMenu->addSeparator(); +- m_entryContextMenu->addAction(m_ui->actionEntryOpenUrl); +- m_entryContextMenu->addAction(m_ui->actionEntryDownloadIcon); +- +- m_entryNewContextMenu = new QMenu(this); +- m_entryNewContextMenu->addAction(m_ui->actionEntryNew); +- +- restoreGeometry(config()->get(Config::GUI_MainWindowGeometry).toByteArray()); +- restoreState(config()->get(Config::GUI_MainWindowState).toByteArray()); +-#ifdef WITH_XC_BROWSER +- m_ui->settingsWidget->addSettingsPage(new BrowserSettingsPage()); +- connect(m_ui->tabWidget, &DatabaseTabWidget::databaseLocked, browserService(), &BrowserService::databaseLocked); +- connect(m_ui->tabWidget, &DatabaseTabWidget::databaseUnlocked, browserService(), &BrowserService::databaseUnlocked); +- connect(m_ui->tabWidget, +- &DatabaseTabWidget::activateDatabaseChanged, +- browserService(), +- &BrowserService::activeDatabaseChanged); +- connect( +- browserService(), &BrowserService::requestUnlock, m_ui->tabWidget, &DatabaseTabWidget::performBrowserUnlock); +-#endif +- +-#ifdef WITH_XC_SSHAGENT +- connect(sshAgent(), SIGNAL(error(QString)), this, SLOT(showErrorMessage(QString))); +- connect(sshAgent(), SIGNAL(enabledChanged(bool)), this, SLOT(agentEnabled(bool))); +- m_ui->settingsWidget->addSettingsPage(new AgentSettingsPage()); +- +- m_entryContextMenu->addSeparator(); +- m_entryContextMenu->addAction(m_ui->actionEntryAddToAgent); +- m_entryContextMenu->addAction(m_ui->actionEntryRemoveFromAgent); +- +- m_ui->actionEntryAddToAgent->setIcon(resources()->icon("utilities-terminal")); +- m_ui->actionEntryRemoveFromAgent->setIcon(resources()->icon("utilities-terminal")); +-#endif +- +- m_ui->actionEntryAddToAgent->setVisible(false); +- m_ui->actionEntryRemoveFromAgent->setVisible(false); +- +- initViewMenu(); +- +-#if defined(WITH_XC_KEESHARE) +- KeeShare::init(this); +- m_ui->settingsWidget->addSettingsPage(new SettingsPageKeeShare(m_ui->tabWidget)); +- connect(KeeShare::instance(), +- SIGNAL(sharingMessage(QString, MessageWidget::MessageType)), +- SLOT(displayGlobalMessage(QString, MessageWidget::MessageType))); +-#endif +- +-#ifdef WITH_XC_FDOSECRETS +- auto fdoSS = new FdoSecretsPlugin(m_ui->tabWidget); +- connect(fdoSS, &FdoSecretsPlugin::error, this, &MainWindow::showErrorMessage); +- connect(fdoSS, &FdoSecretsPlugin::requestSwitchToDatabases, this, &MainWindow::switchToDatabases); +- connect(fdoSS, &FdoSecretsPlugin::requestShowNotification, this, &MainWindow::displayDesktopNotification); +- fdoSS->updateServiceState(); +- m_ui->settingsWidget->addSettingsPage(fdoSS); +-#endif +- +-#ifdef WITH_XC_YUBIKEY +- connect(YubiKey::instance(), SIGNAL(userInteractionRequest()), SLOT(showYubiKeyPopup()), Qt::QueuedConnection); +- connect(YubiKey::instance(), SIGNAL(challengeCompleted()), SLOT(hideYubiKeyPopup()), Qt::QueuedConnection); +-#endif +- +- setWindowIcon(resources()->applicationIcon()); +- m_ui->globalMessageWidget->hideMessage(); +- connect(m_ui->globalMessageWidget, &MessageWidget::linkActivated, &MessageWidget::openHttpUrl); +- +- m_clearHistoryAction = new QAction(tr("Clear history"), m_ui->menuFile); +- m_lastDatabasesActions = new QActionGroup(m_ui->menuRecentDatabases); +- connect(m_clearHistoryAction, SIGNAL(triggered()), this, SLOT(clearLastDatabases())); +- connect(m_lastDatabasesActions, SIGNAL(triggered(QAction*)), this, SLOT(openRecentDatabase(QAction*))); +- connect(m_ui->menuRecentDatabases, SIGNAL(aboutToShow()), this, SLOT(updateLastDatabasesMenu())); +- +- m_copyAdditionalAttributeActions = new QActionGroup(m_ui->menuEntryCopyAttribute); +- m_actionMultiplexer.connect( +- m_copyAdditionalAttributeActions, SIGNAL(triggered(QAction*)), SLOT(copyAttribute(QAction*))); +- connect(m_ui->menuEntryCopyAttribute, SIGNAL(aboutToShow()), this, SLOT(updateCopyAttributesMenu())); +- +- Qt::Key globalAutoTypeKey = static_cast(config()->get(Config::GlobalAutoTypeKey).toInt()); +- Qt::KeyboardModifiers globalAutoTypeModifiers = +- static_cast(config()->get(Config::GlobalAutoTypeModifiers).toInt()); +- if (globalAutoTypeKey > 0 && globalAutoTypeModifiers > 0) { +- autoType()->registerGlobalShortcut(globalAutoTypeKey, globalAutoTypeModifiers); +- } +- +- m_ui->toolbarSeparator->setVisible(false); +- m_showToolbarSeparator = config()->get(Config::GUI_ApplicationTheme).toString() != "classic"; +- +- bool isAutoTypeAvailable = autoType()->isAvailable(); +- m_ui->actionEntryAutoType->setVisible(isAutoTypeAvailable); +- m_ui->actionEntryAutoTypeUsername->setVisible(isAutoTypeAvailable); +- m_ui->actionEntryAutoTypeUsernameEnter->setVisible(isAutoTypeAvailable); +- m_ui->actionEntryAutoTypePassword->setVisible(isAutoTypeAvailable); +- m_ui->actionEntryAutoTypePasswordEnter->setVisible(isAutoTypeAvailable); +- +- m_inactivityTimer = new InactivityTimer(this); +- connect(m_inactivityTimer, SIGNAL(inactivityDetected()), this, SLOT(lockDatabasesAfterInactivity())); +-#ifdef WITH_XC_TOUCHID +- m_touchIDinactivityTimer = new InactivityTimer(this); +- connect(m_touchIDinactivityTimer, SIGNAL(inactivityDetected()), this, SLOT(forgetTouchIDAfterInactivity())); +-#endif +- applySettingsChanges(); +- +- m_ui->actionDatabaseNew->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_N); +- setShortcut(m_ui->actionDatabaseOpen, QKeySequence::Open, Qt::CTRL + Qt::Key_O); +- setShortcut(m_ui->actionDatabaseSave, QKeySequence::Save, Qt::CTRL + Qt::Key_S); +- setShortcut(m_ui->actionDatabaseSaveAs, QKeySequence::SaveAs, Qt::CTRL + Qt::SHIFT + Qt::Key_S); +- setShortcut(m_ui->actionDatabaseClose, QKeySequence::Close, Qt::CTRL + Qt::Key_W); +- m_ui->actionLockDatabases->setShortcut(Qt::CTRL + Qt::Key_L); +- setShortcut(m_ui->actionQuit, QKeySequence::Quit, Qt::CTRL + Qt::Key_Q); +- setShortcut(m_ui->actionEntryNew, QKeySequence::New, Qt::CTRL + Qt::Key_N); +- m_ui->actionEntryEdit->setShortcut(Qt::CTRL + Qt::Key_E); +- m_ui->actionEntryDelete->setShortcut(Qt::CTRL + Qt::Key_D); +- m_ui->actionEntryDelete->setShortcut(Qt::Key_Delete); +- m_ui->actionEntryClone->setShortcut(Qt::CTRL + Qt::Key_K); +- m_ui->actionEntryTotp->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_T); +- m_ui->actionEntryDownloadIcon->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_D); +- m_ui->actionEntryCopyTotp->setShortcut(Qt::CTRL + Qt::Key_T); +- m_ui->actionEntryMoveUp->setShortcut(Qt::CTRL + Qt::ALT + Qt::Key_Up); +- m_ui->actionEntryMoveDown->setShortcut(Qt::CTRL + Qt::ALT + Qt::Key_Down); +- m_ui->actionEntryCopyUsername->setShortcut(Qt::CTRL + Qt::Key_B); +- m_ui->actionEntryCopyPassword->setShortcut(Qt::CTRL + Qt::Key_C); +- m_ui->actionEntryAutoType->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_V); +- m_ui->actionEntryOpenUrl->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_U); +- m_ui->actionEntryCopyURL->setShortcut(Qt::CTRL + Qt::Key_U); +- +- // Prevent conflicts with global Mac shortcuts (force Control on all platforms) +-#ifdef Q_OS_MAC +- auto modifier = Qt::META; +-#else +- auto modifier = Qt::CTRL; +-#endif +- m_ui->actionEntryAddToAgent->setShortcut(modifier + Qt::Key_H); +- m_ui->actionEntryRemoveFromAgent->setShortcut(modifier + Qt::SHIFT + Qt::Key_H); +- +-#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) +- // Qt 5.10 introduced a new "feature" to hide shortcuts in context menus +- // Unfortunately, Qt::AA_DontShowShortcutsInContextMenus is broken, have to manually enable them +- m_ui->actionEntryNew->setShortcutVisibleInContextMenu(true); +- m_ui->actionEntryEdit->setShortcutVisibleInContextMenu(true); +- m_ui->actionEntryDelete->setShortcutVisibleInContextMenu(true); +- m_ui->actionEntryClone->setShortcutVisibleInContextMenu(true); +- m_ui->actionEntryTotp->setShortcutVisibleInContextMenu(true); +- m_ui->actionEntryDownloadIcon->setShortcutVisibleInContextMenu(true); +- m_ui->actionEntryCopyTotp->setShortcutVisibleInContextMenu(true); +- m_ui->actionEntryMoveUp->setShortcutVisibleInContextMenu(true); +- m_ui->actionEntryMoveDown->setShortcutVisibleInContextMenu(true); +- m_ui->actionEntryCopyUsername->setShortcutVisibleInContextMenu(true); +- m_ui->actionEntryCopyPassword->setShortcutVisibleInContextMenu(true); +- m_ui->actionEntryAutoType->setShortcutVisibleInContextMenu(true); +- m_ui->actionEntryOpenUrl->setShortcutVisibleInContextMenu(true); +- m_ui->actionEntryCopyURL->setShortcutVisibleInContextMenu(true); +- m_ui->actionEntryAddToAgent->setShortcutVisibleInContextMenu(true); +- m_ui->actionEntryRemoveFromAgent->setShortcutVisibleInContextMenu(true); +-#endif +- +- connect(m_ui->menuEntries, SIGNAL(aboutToShow()), SLOT(obtainContextFocusLock())); +- connect(m_ui->menuEntries, SIGNAL(aboutToHide()), SLOT(releaseContextFocusLock())); +- connect(m_entryContextMenu, SIGNAL(aboutToShow()), SLOT(obtainContextFocusLock())); +- connect(m_entryContextMenu, SIGNAL(aboutToHide()), SLOT(releaseContextFocusLock())); +- connect(m_entryNewContextMenu, SIGNAL(aboutToShow()), SLOT(obtainContextFocusLock())); +- connect(m_entryNewContextMenu, SIGNAL(aboutToHide()), SLOT(releaseContextFocusLock())); +- connect(m_ui->menuGroups, SIGNAL(aboutToShow()), SLOT(obtainContextFocusLock())); +- connect(m_ui->menuGroups, SIGNAL(aboutToHide()), SLOT(releaseContextFocusLock())); +- +- // Control window state +- new QShortcut(Qt::CTRL + Qt::Key_M, this, SLOT(minimizeOrHide())); +- new QShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_M, this, SLOT(hideWindow())); +- // Control database tabs +- new QShortcut(Qt::CTRL + Qt::Key_Tab, this, SLOT(selectNextDatabaseTab())); +- new QShortcut(Qt::CTRL + Qt::Key_PageDown, this, SLOT(selectNextDatabaseTab())); +- new QShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_Tab, this, SLOT(selectPreviousDatabaseTab())); +- new QShortcut(Qt::CTRL + Qt::Key_PageUp, this, SLOT(selectPreviousDatabaseTab())); +- +- // Tab selection by number, Windows uses Ctrl, macOS uses Command, +- // and Linux uses Alt to emulate a browser-like experience +- auto dbTabModifier = Qt::CTRL; +-#ifdef Q_OS_LINUX +- dbTabModifier = Qt::ALT; +-#endif +- auto shortcut = new QShortcut(dbTabModifier + Qt::Key_1, this); +- connect(shortcut, &QShortcut::activated, [this]() { selectDatabaseTab(0); }); +- shortcut = new QShortcut(dbTabModifier + Qt::Key_2, this); +- connect(shortcut, &QShortcut::activated, [this]() { selectDatabaseTab(1); }); +- shortcut = new QShortcut(dbTabModifier + Qt::Key_3, this); +- connect(shortcut, &QShortcut::activated, [this]() { selectDatabaseTab(2); }); +- shortcut = new QShortcut(dbTabModifier + Qt::Key_4, this); +- connect(shortcut, &QShortcut::activated, [this]() { selectDatabaseTab(3); }); +- shortcut = new QShortcut(dbTabModifier + Qt::Key_5, this); +- connect(shortcut, &QShortcut::activated, [this]() { selectDatabaseTab(4); }); +- shortcut = new QShortcut(dbTabModifier + Qt::Key_6, this); +- connect(shortcut, &QShortcut::activated, [this]() { selectDatabaseTab(5); }); +- shortcut = new QShortcut(dbTabModifier + Qt::Key_7, this); +- connect(shortcut, &QShortcut::activated, [this]() { selectDatabaseTab(6); }); +- shortcut = new QShortcut(dbTabModifier + Qt::Key_8, this); +- connect(shortcut, &QShortcut::activated, [this]() { selectDatabaseTab(7); }); +- shortcut = new QShortcut(dbTabModifier + Qt::Key_9, this); +- connect(shortcut, &QShortcut::activated, [this]() { selectDatabaseTab(m_ui->tabWidget->count() - 1); }); +- +- m_ui->actionDatabaseNew->setIcon(resources()->icon("document-new")); +- m_ui->actionDatabaseOpen->setIcon(resources()->icon("document-open")); +- m_ui->menuRecentDatabases->setIcon(resources()->icon("document-open-recent")); +- m_ui->actionDatabaseSave->setIcon(resources()->icon("document-save")); +- m_ui->actionDatabaseSaveAs->setIcon(resources()->icon("document-save-as")); +- m_ui->actionDatabaseSaveBackup->setIcon(resources()->icon("document-save-copy")); +- m_ui->actionDatabaseClose->setIcon(resources()->icon("document-close")); +- m_ui->actionReports->setIcon(resources()->icon("reports")); +- m_ui->actionDatabaseSettings->setIcon(resources()->icon("document-edit")); +- m_ui->actionDatabaseSecurity->setIcon(resources()->icon("database-change-key")); +- m_ui->actionLockDatabases->setIcon(resources()->icon("database-lock")); +- m_ui->actionQuit->setIcon(resources()->icon("application-exit")); +- m_ui->actionDatabaseMerge->setIcon(resources()->icon("database-merge")); +- m_ui->menuImport->setIcon(resources()->icon("document-import")); +- m_ui->menuExport->setIcon(resources()->icon("document-export")); +- +- m_ui->actionEntryNew->setIcon(resources()->icon("entry-new")); +- m_ui->actionEntryClone->setIcon(resources()->icon("entry-clone")); +- m_ui->actionEntryEdit->setIcon(resources()->icon("entry-edit")); +- m_ui->actionEntryDelete->setIcon(resources()->icon("entry-delete")); +- m_ui->actionEntryAutoType->setIcon(resources()->icon("auto-type")); +- m_ui->menuEntryAutoTypeWithSequence->setIcon(resources()->icon("auto-type")); +- m_ui->actionEntryAutoTypeUsername->setIcon(resources()->icon("auto-type")); +- m_ui->actionEntryAutoTypeUsernameEnter->setIcon(resources()->icon("auto-type")); +- m_ui->actionEntryAutoTypePassword->setIcon(resources()->icon("auto-type")); +- m_ui->actionEntryAutoTypePasswordEnter->setIcon(resources()->icon("auto-type")); +- m_ui->actionEntryMoveUp->setIcon(resources()->icon("move-up")); +- m_ui->actionEntryMoveDown->setIcon(resources()->icon("move-down")); +- m_ui->actionEntryCopyUsername->setIcon(resources()->icon("username-copy")); +- m_ui->actionEntryCopyPassword->setIcon(resources()->icon("password-copy")); +- m_ui->actionEntryCopyURL->setIcon(resources()->icon("url-copy")); +- m_ui->actionEntryDownloadIcon->setIcon(resources()->icon("favicon-download")); +- m_ui->actionGroupSortAsc->setIcon(resources()->icon("sort-alphabetical-ascending")); +- m_ui->actionGroupSortDesc->setIcon(resources()->icon("sort-alphabetical-descending")); +- +- m_ui->actionGroupNew->setIcon(resources()->icon("group-new")); +- m_ui->actionGroupEdit->setIcon(resources()->icon("group-edit")); +- m_ui->actionGroupDelete->setIcon(resources()->icon("group-delete")); +- m_ui->actionGroupEmptyRecycleBin->setIcon(resources()->icon("group-empty-trash")); +- m_ui->actionEntryOpenUrl->setIcon(resources()->icon("web")); +- m_ui->actionGroupDownloadFavicons->setIcon(resources()->icon("favicon-download")); +- +- m_ui->actionSettings->setIcon(resources()->icon("configure")); +- m_ui->actionPasswordGenerator->setIcon(resources()->icon("password-generator")); +- +- m_ui->actionAbout->setIcon(resources()->icon("help-about")); +- m_ui->actionDonate->setIcon(resources()->icon("donate")); +- m_ui->actionBugReport->setIcon(resources()->icon("bugreport")); +- m_ui->actionGettingStarted->setIcon(resources()->icon("getting-started")); +- m_ui->actionUserGuide->setIcon(resources()->icon("user-guide")); +- m_ui->actionOnlineHelp->setIcon(resources()->icon("system-help")); +- m_ui->actionKeyboardShortcuts->setIcon(resources()->icon("keyboard-shortcuts")); +- m_ui->actionCheckForUpdates->setIcon(resources()->icon("system-software-update")); +- +- m_actionMultiplexer.connect( +- SIGNAL(currentModeChanged(DatabaseWidget::Mode)), this, SLOT(setMenuActionState(DatabaseWidget::Mode))); +- m_actionMultiplexer.connect(SIGNAL(groupChanged()), this, SLOT(setMenuActionState())); +- m_actionMultiplexer.connect(SIGNAL(entrySelectionChanged()), this, SLOT(setMenuActionState())); +- m_actionMultiplexer.connect(SIGNAL(groupContextMenuRequested(QPoint)), this, SLOT(showGroupContextMenu(QPoint))); +- m_actionMultiplexer.connect(SIGNAL(entryContextMenuRequested(QPoint)), this, SLOT(showEntryContextMenu(QPoint))); +- +- // Notify search when the active database changes or gets locked +- connect(m_ui->tabWidget, +- SIGNAL(activateDatabaseChanged(DatabaseWidget*)), +- m_searchWidget, +- SLOT(databaseChanged(DatabaseWidget*))); +- connect(m_ui->tabWidget, SIGNAL(databaseLocked(DatabaseWidget*)), m_searchWidget, SLOT(databaseChanged())); +- +- connect(m_ui->tabWidget, SIGNAL(tabNameChanged()), SLOT(updateWindowTitle())); +- connect(m_ui->tabWidget, SIGNAL(currentChanged(int)), SLOT(updateWindowTitle())); +- connect(m_ui->tabWidget, SIGNAL(currentChanged(int)), SLOT(databaseTabChanged(int))); +- connect(m_ui->tabWidget, SIGNAL(currentChanged(int)), SLOT(setMenuActionState())); +- connect(m_ui->tabWidget, SIGNAL(databaseLocked(DatabaseWidget*)), SLOT(databaseStatusChanged(DatabaseWidget*))); +- connect(m_ui->tabWidget, SIGNAL(databaseUnlocked(DatabaseWidget*)), SLOT(databaseStatusChanged(DatabaseWidget*))); +- connect(m_ui->tabWidget, SIGNAL(tabVisibilityChanged(bool)), SLOT(updateToolbarSeparatorVisibility())); +- connect(m_ui->stackedWidget, SIGNAL(currentChanged(int)), SLOT(setMenuActionState())); +- connect(m_ui->stackedWidget, SIGNAL(currentChanged(int)), SLOT(updateWindowTitle())); +- connect(m_ui->stackedWidget, SIGNAL(currentChanged(int)), SLOT(updateToolbarSeparatorVisibility())); +- connect(m_ui->settingsWidget, SIGNAL(accepted()), SLOT(applySettingsChanges())); +- connect(m_ui->settingsWidget, SIGNAL(settingsReset()), SLOT(applySettingsChanges())); +- connect(m_ui->settingsWidget, SIGNAL(accepted()), SLOT(switchToDatabases())); +- connect(m_ui->settingsWidget, SIGNAL(rejected()), SLOT(switchToDatabases())); +- +- connect(m_ui->actionDatabaseNew, SIGNAL(triggered()), m_ui->tabWidget, SLOT(newDatabase())); +- connect(m_ui->actionDatabaseOpen, SIGNAL(triggered()), m_ui->tabWidget, SLOT(openDatabase())); +- connect(m_ui->actionDatabaseSave, SIGNAL(triggered()), m_ui->tabWidget, SLOT(saveDatabase())); +- connect(m_ui->actionDatabaseSaveAs, SIGNAL(triggered()), m_ui->tabWidget, SLOT(saveDatabaseAs())); +- connect(m_ui->actionDatabaseSaveBackup, SIGNAL(triggered()), m_ui->tabWidget, SLOT(saveDatabaseBackup())); +- connect(m_ui->actionDatabaseClose, SIGNAL(triggered()), m_ui->tabWidget, SLOT(closeCurrentDatabaseTab())); +- connect(m_ui->actionDatabaseMerge, SIGNAL(triggered()), m_ui->tabWidget, SLOT(mergeDatabase())); +- connect(m_ui->actionDatabaseSecurity, SIGNAL(triggered()), m_ui->tabWidget, SLOT(showDatabaseSecurity())); +- connect(m_ui->actionReports, SIGNAL(triggered()), m_ui->tabWidget, SLOT(showDatabaseReports())); +- connect(m_ui->actionDatabaseSettings, SIGNAL(triggered()), m_ui->tabWidget, SLOT(showDatabaseSettings())); +- connect(m_ui->actionImportCsv, SIGNAL(triggered()), m_ui->tabWidget, SLOT(importCsv())); +- connect(m_ui->actionImportKeePass1, SIGNAL(triggered()), m_ui->tabWidget, SLOT(importKeePass1Database())); +- connect(m_ui->actionImportOpVault, SIGNAL(triggered()), m_ui->tabWidget, SLOT(importOpVaultDatabase())); +- connect(m_ui->actionExportCsv, SIGNAL(triggered()), m_ui->tabWidget, SLOT(exportToCsv())); +- connect(m_ui->actionExportHtml, SIGNAL(triggered()), m_ui->tabWidget, SLOT(exportToHtml())); +- connect(m_ui->actionLockDatabases, SIGNAL(triggered()), m_ui->tabWidget, SLOT(lockDatabases())); +- connect(m_ui->actionQuit, SIGNAL(triggered()), SLOT(appExit())); +- +- m_actionMultiplexer.connect(m_ui->actionEntryNew, SIGNAL(triggered()), SLOT(createEntry())); +- m_actionMultiplexer.connect(m_ui->actionEntryClone, SIGNAL(triggered()), SLOT(cloneEntry())); +- m_actionMultiplexer.connect(m_ui->actionEntryEdit, SIGNAL(triggered()), SLOT(switchToEntryEdit())); +- m_actionMultiplexer.connect(m_ui->actionEntryDelete, SIGNAL(triggered()), SLOT(deleteSelectedEntries())); +- +- m_actionMultiplexer.connect(m_ui->actionEntryTotp, SIGNAL(triggered()), SLOT(showTotp())); +- m_actionMultiplexer.connect(m_ui->actionEntrySetupTotp, SIGNAL(triggered()), SLOT(setupTotp())); +- +- m_actionMultiplexer.connect(m_ui->actionEntryCopyTotp, SIGNAL(triggered()), SLOT(copyTotp())); +- m_actionMultiplexer.connect(m_ui->actionEntryTotpQRCode, SIGNAL(triggered()), SLOT(showTotpKeyQrCode())); +- m_actionMultiplexer.connect(m_ui->actionEntryCopyTitle, SIGNAL(triggered()), SLOT(copyTitle())); +- m_actionMultiplexer.connect(m_ui->actionEntryMoveUp, SIGNAL(triggered()), SLOT(moveEntryUp())); +- m_actionMultiplexer.connect(m_ui->actionEntryMoveDown, SIGNAL(triggered()), SLOT(moveEntryDown())); +- m_actionMultiplexer.connect(m_ui->actionEntryCopyUsername, SIGNAL(triggered()), SLOT(copyUsername())); +- m_actionMultiplexer.connect(m_ui->actionEntryCopyPassword, SIGNAL(triggered()), SLOT(copyPassword())); +- m_actionMultiplexer.connect(m_ui->actionEntryCopyURL, SIGNAL(triggered()), SLOT(copyURL())); +- m_actionMultiplexer.connect(m_ui->actionEntryCopyNotes, SIGNAL(triggered()), SLOT(copyNotes())); +- m_actionMultiplexer.connect(m_ui->actionEntryAutoType, SIGNAL(triggered()), SLOT(performAutoType())); +- m_actionMultiplexer.connect( +- m_ui->actionEntryAutoTypeUsername, SIGNAL(triggered()), SLOT(performAutoTypeUsername())); +- m_actionMultiplexer.connect( +- m_ui->actionEntryAutoTypeUsernameEnter, SIGNAL(triggered()), SLOT(performAutoTypeUsernameEnter())); +- m_actionMultiplexer.connect( +- m_ui->actionEntryAutoTypePassword, SIGNAL(triggered()), SLOT(performAutoTypePassword())); +- m_actionMultiplexer.connect( +- m_ui->actionEntryAutoTypePasswordEnter, SIGNAL(triggered()), SLOT(performAutoTypePasswordEnter())); +- m_actionMultiplexer.connect(m_ui->actionEntryOpenUrl, SIGNAL(triggered()), SLOT(openUrl())); +- m_actionMultiplexer.connect(m_ui->actionEntryDownloadIcon, SIGNAL(triggered()), SLOT(downloadSelectedFavicons())); +-#ifdef WITH_XC_SSHAGENT +- m_actionMultiplexer.connect(m_ui->actionEntryAddToAgent, SIGNAL(triggered()), SLOT(addToAgent())); +- m_actionMultiplexer.connect(m_ui->actionEntryRemoveFromAgent, SIGNAL(triggered()), SLOT(removeFromAgent())); +-#endif +- +- m_actionMultiplexer.connect(m_ui->actionGroupNew, SIGNAL(triggered()), SLOT(createGroup())); +- m_actionMultiplexer.connect(m_ui->actionGroupEdit, SIGNAL(triggered()), SLOT(switchToGroupEdit())); +- m_actionMultiplexer.connect(m_ui->actionGroupDelete, SIGNAL(triggered()), SLOT(deleteGroup())); +- m_actionMultiplexer.connect(m_ui->actionGroupEmptyRecycleBin, SIGNAL(triggered()), SLOT(emptyRecycleBin())); +- m_actionMultiplexer.connect(m_ui->actionGroupSortAsc, SIGNAL(triggered()), SLOT(sortGroupsAsc())); +- m_actionMultiplexer.connect(m_ui->actionGroupSortDesc, SIGNAL(triggered()), SLOT(sortGroupsDesc())); +- m_actionMultiplexer.connect(m_ui->actionGroupDownloadFavicons, SIGNAL(triggered()), SLOT(downloadAllFavicons())); +- +- connect(m_ui->actionSettings, SIGNAL(toggled(bool)), SLOT(switchToSettings(bool))); +- connect(m_ui->actionPasswordGenerator, SIGNAL(toggled(bool)), SLOT(togglePasswordGenerator(bool))); +- connect(m_ui->passwordGeneratorWidget, &PasswordGeneratorWidget::closed, this, [this] { +- togglePasswordGenerator(false); +- }); +- m_ui->passwordGeneratorWidget->setStandaloneMode(true); +- +- connect(m_ui->welcomeWidget, SIGNAL(newDatabase()), SLOT(switchToNewDatabase())); +- connect(m_ui->welcomeWidget, SIGNAL(openDatabase()), SLOT(switchToOpenDatabase())); +- connect(m_ui->welcomeWidget, SIGNAL(openDatabaseFile(QString)), SLOT(switchToDatabaseFile(QString))); +- connect(m_ui->welcomeWidget, SIGNAL(importKeePass1Database()), SLOT(switchToKeePass1Database())); +- connect(m_ui->welcomeWidget, SIGNAL(importOpVaultDatabase()), SLOT(switchToOpVaultDatabase())); +- connect(m_ui->welcomeWidget, SIGNAL(importCsv()), SLOT(switchToCsvImport())); +- +- connect(m_ui->actionAbout, SIGNAL(triggered()), SLOT(showAboutDialog())); +- connect(m_ui->actionDonate, SIGNAL(triggered()), SLOT(openDonateUrl())); +- connect(m_ui->actionBugReport, SIGNAL(triggered()), SLOT(openBugReportUrl())); +- connect(m_ui->actionGettingStarted, SIGNAL(triggered()), SLOT(openGettingStartedGuide())); +- connect(m_ui->actionUserGuide, SIGNAL(triggered()), SLOT(openUserGuide())); +- connect(m_ui->actionOnlineHelp, SIGNAL(triggered()), SLOT(openOnlineHelp())); +- connect(m_ui->actionKeyboardShortcuts, SIGNAL(triggered()), SLOT(openKeyboardShortcuts())); +- +- connect(osUtils, &OSUtilsBase::statusbarThemeChanged, this, &MainWindow::updateTrayIcon); +- +-#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) +- // Install event filter for empty-area drag +- auto* eventFilter = new MainWindowEventFilter(this); +- m_ui->menubar->installEventFilter(eventFilter); +- m_ui->toolBar->installEventFilter(eventFilter); +- m_ui->tabWidget->tabBar()->installEventFilter(eventFilter); +-#endif +- +-#ifdef Q_OS_MACOS +- setUnifiedTitleAndToolBarOnMac(true); +-#endif +- +-#ifdef WITH_XC_UPDATECHECK +- connect(m_ui->actionCheckForUpdates, SIGNAL(triggered()), SLOT(showUpdateCheckDialog())); +- connect(UpdateChecker::instance(), +- SIGNAL(updateCheckFinished(bool, QString, bool)), +- SLOT(hasUpdateAvailable(bool, QString, bool))); +- // Setup an update check every hour (checked only occur every 7 days) +- connect(&m_updateCheckTimer, &QTimer::timeout, this, &MainWindow::performUpdateCheck); +- m_updateCheckTimer.start(3.6e6); +- // Perform the startup update check after 500 ms +- QTimer::singleShot(500, this, SLOT(performUpdateCheck())); +-#else +- m_ui->actionCheckForUpdates->setVisible(false); +-#endif +- +-#ifndef WITH_XC_NETWORKING +- m_ui->actionGroupDownloadFavicons->setVisible(false); +- m_ui->actionEntryDownloadIcon->setVisible(false); +-#endif +-#ifndef WITH_XC_DOCS +- m_ui->actionGettingStarted->setVisible(false); +- m_ui->actionUserGuide->setVisible(false); +- m_ui->actionKeyboardShortcuts->setVisible(false); +-#endif +- +- // clang-format off +- connect(m_ui->tabWidget, SIGNAL(messageGlobal(QString,MessageWidget::MessageType)), +- SLOT(displayGlobalMessage(QString,MessageWidget::MessageType))); +- // clang-format on +- +- connect(m_ui->tabWidget, SIGNAL(messageDismissGlobal()), this, SLOT(hideGlobalMessage())); +- +-#ifndef Q_OS_HAIKU +- m_screenLockListener = new ScreenLockListener(this); +- connect(m_screenLockListener, SIGNAL(screenLocked()), SLOT(handleScreenLock())); +-#endif +- +- // Tray Icon setup +- connect(Application::instance(), SIGNAL(focusWindowChanged(QWindow*)), SLOT(focusWindowChanged(QWindow*))); +- m_trayIconTriggerReason = QSystemTrayIcon::Unknown; +- m_trayIconTriggerTimer.setSingleShot(true); +- connect(&m_trayIconTriggerTimer, SIGNAL(timeout()), SLOT(processTrayIconTrigger())); +- +- if (config()->hasAccessError()) { +- m_ui->globalMessageWidget->showMessage(tr("Access error for config file %1").arg(config()->getFileName()), +- MessageWidget::Error); +- } +- +- // Properly shutdown on logoff, restart, and shutdown +- connect(qApp, &QGuiApplication::commitDataRequest, this, [this] { m_appExitCalled = true; }); +- +-#if defined(KEEPASSXC_BUILD_TYPE_SNAPSHOT) || defined(KEEPASSXC_BUILD_TYPE_PRE_RELEASE) +- auto* hidePreRelWarn = new QAction(tr("Don't show again for this version"), m_ui->globalMessageWidget); +- m_ui->globalMessageWidget->addAction(hidePreRelWarn); +- auto hidePreRelWarnConn = QSharedPointer::create(); +- *hidePreRelWarnConn = connect(m_ui->globalMessageWidget, &KMessageWidget::hideAnimationFinished, [=] { +- m_ui->globalMessageWidget->removeAction(hidePreRelWarn); +- disconnect(*hidePreRelWarnConn); +- hidePreRelWarn->deleteLater(); +- }); +- connect(hidePreRelWarn, &QAction::triggered, [=] { +- m_ui->globalMessageWidget->animatedHide(); +- config()->set(Config::Messages_HidePreReleaseWarning, KEEPASSXC_VERSION); +- }); +-#endif +-#if defined(KEEPASSXC_BUILD_TYPE_SNAPSHOT) +- if (config()->get(Config::Messages_HidePreReleaseWarning) != KEEPASSXC_VERSION) { +- m_ui->globalMessageWidget->showMessage( +- tr("WARNING: You are using an unstable build of KeePassXC!\n" +- "There is a high risk of corruption, maintain a backup of your databases.\n" +- "This version is not meant for production use."), +- MessageWidget::Warning, +- -1); +- } +-#elif defined(KEEPASSXC_BUILD_TYPE_PRE_RELEASE) +- if (config()->get(Config::Messages_HidePreReleaseWarning) != KEEPASSXC_VERSION) { +- m_ui->globalMessageWidget->showMessage( +- tr("NOTE: You are using a pre-release version of KeePassXC!\n" +- "Expect some bugs and minor issues, this version is not meant for production use."), +- MessageWidget::Information, +- -1); +- } +-#elif (QT_VERSION >= QT_VERSION_CHECK(5, 5, 0) && QT_VERSION < QT_VERSION_CHECK(5, 6, 0)) +- if (!config()->get(Config::Messages_Qt55CompatibilityWarning).toBool()) { +- m_ui->globalMessageWidget->showMessage( +- tr("WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!\n" +- "We recommend you use the AppImage available on our downloads page."), +- MessageWidget::Warning, +- -1); +- config()->set(Config::Messages_Qt55CompatibilityWarning, true); +- } +-#endif +- +- QObject::connect(qApp, SIGNAL(anotherInstanceStarted()), this, SLOT(bringToFront())); +- QObject::connect(qApp, SIGNAL(applicationActivated()), this, SLOT(bringToFront())); +- QObject::connect(qApp, SIGNAL(openFile(QString)), this, SLOT(openDatabase(QString))); +- QObject::connect(qApp, SIGNAL(quitSignalReceived()), this, SLOT(appExit()), Qt::DirectConnection); +-} +- +-MainWindow::~MainWindow() +-{ +-#ifdef WITH_XC_SSHAGENT +- sshAgent()->removeAllIdentities(); +-#endif +-} +- +-QList MainWindow::getOpenDatabases() +-{ +- QList dbWidgets; +- for (int i = 0; i < m_ui->tabWidget->count(); ++i) { +- dbWidgets << m_ui->tabWidget->databaseWidgetFromIndex(i); +- } +- return dbWidgets; +-} +- +-void MainWindow::showErrorMessage(const QString& message) +-{ +- m_ui->globalMessageWidget->showMessage(message, MessageWidget::Error); +-} +- +-void MainWindow::appExit() +-{ +- m_appExitCalled = true; +- close(); +-} +- +-void MainWindow::updateLastDatabasesMenu() +-{ +- m_ui->menuRecentDatabases->clear(); +- +- const QStringList lastDatabases = config()->get(Config::LastDatabases).toStringList(); +- for (const QString& database : lastDatabases) { +- QAction* action = m_ui->menuRecentDatabases->addAction(database); +- action->setData(database); +- m_lastDatabasesActions->addAction(action); +- } +- m_ui->menuRecentDatabases->addSeparator(); +- m_ui->menuRecentDatabases->addAction(m_clearHistoryAction); +-} +- +-void MainWindow::updateCopyAttributesMenu() +-{ +- DatabaseWidget* dbWidget = m_ui->tabWidget->currentDatabaseWidget(); +- if (!dbWidget) { +- return; +- } +- +- if (dbWidget->numberOfSelectedEntries() != 1) { +- return; +- } +- +- QList actions = m_ui->menuEntryCopyAttribute->actions(); +- for (int i = m_countDefaultAttributes; i < actions.size(); i++) { +- delete actions[i]; +- } +- +- const QStringList customEntryAttributes = dbWidget->customEntryAttributes(); +- for (const QString& key : customEntryAttributes) { +- QAction* action = m_ui->menuEntryCopyAttribute->addAction(key); +- action->setData(QVariant(key)); +- m_copyAdditionalAttributeActions->addAction(action); +- } +-} +- +-void MainWindow::openRecentDatabase(QAction* action) +-{ +- openDatabase(action->data().toString()); +-} +- +-void MainWindow::clearLastDatabases() +-{ +- config()->remove(Config::LastDatabases); +- bool inWelcomeWidget = (m_ui->stackedWidget->currentIndex() == 2); +- +- if (inWelcomeWidget) { +- m_ui->welcomeWidget->refreshLastDatabases(); +- } +-} +- +-void MainWindow::openDatabase(const QString& filePath, const QString& password, const QString& keyfile) +-{ +- m_ui->tabWidget->addDatabaseTab(filePath, false, password, keyfile); +-} +- +-void MainWindow::setMenuActionState(DatabaseWidget::Mode mode) +-{ +- int currentIndex = m_ui->stackedWidget->currentIndex(); +- +- bool inDatabaseTabWidget = (currentIndex == DatabaseTabScreen); +- bool inWelcomeWidget = (currentIndex == WelcomeScreen); +- bool inDatabaseTabWidgetOrWelcomeWidget = inDatabaseTabWidget || inWelcomeWidget; +- +- m_ui->actionDatabaseMerge->setEnabled(inDatabaseTabWidget); +- m_ui->actionDatabaseNew->setEnabled(inDatabaseTabWidgetOrWelcomeWidget); +- m_ui->actionDatabaseOpen->setEnabled(inDatabaseTabWidgetOrWelcomeWidget); +- m_ui->menuRecentDatabases->setEnabled(inDatabaseTabWidgetOrWelcomeWidget); +- m_ui->menuImport->setEnabled(inDatabaseTabWidgetOrWelcomeWidget); +- m_ui->actionLockDatabases->setEnabled(m_ui->tabWidget->hasLockableDatabases()); +- +- if (inDatabaseTabWidget && m_ui->tabWidget->currentIndex() != -1) { +- DatabaseWidget* dbWidget = m_ui->tabWidget->currentDatabaseWidget(); +- Q_ASSERT(dbWidget); +- +- if (mode == DatabaseWidget::Mode::None) { +- mode = dbWidget->currentMode(); +- } +- +- switch (mode) { +- case DatabaseWidget::Mode::ViewMode: { +- bool singleEntrySelected = dbWidget->numberOfSelectedEntries() == 1; +- bool entriesSelected = dbWidget->numberOfSelectedEntries() > 0; +- bool groupSelected = dbWidget->isGroupSelected(); +- bool currentGroupHasChildren = dbWidget->currentGroup()->hasChildren(); +- bool currentGroupHasEntries = !dbWidget->currentGroup()->entries().isEmpty(); +- bool recycleBinSelected = dbWidget->isRecycleBinSelected(); +- bool sorted = dbWidget->isSorted(); +- int entryIndex = dbWidget->currentEntryIndex(); +- int numEntries = dbWidget->currentGroup()->entries().size(); +- +- m_ui->actionEntryNew->setEnabled(true); +- m_ui->actionEntryClone->setEnabled(singleEntrySelected); +- m_ui->actionEntryEdit->setEnabled(singleEntrySelected); +- m_ui->actionEntryDelete->setEnabled(entriesSelected); +- m_ui->actionEntryMoveUp->setVisible(!sorted); +- m_ui->actionEntryMoveDown->setVisible(!sorted); +- m_ui->actionEntryMoveUp->setEnabled(singleEntrySelected && !sorted && entryIndex > 0); +- m_ui->actionEntryMoveDown->setEnabled(singleEntrySelected && !sorted && entryIndex >= 0 +- && entryIndex < numEntries - 1); +- m_ui->actionEntryCopyTitle->setEnabled(singleEntrySelected && dbWidget->currentEntryHasTitle()); +- m_ui->actionEntryCopyUsername->setEnabled(singleEntrySelected && dbWidget->currentEntryHasUsername()); +- // NOTE: Copy password is enabled even if the selected entry's password is blank to prevent Ctrl+C +- // from copying information from the currently selected cell in the entry view table. +- m_ui->actionEntryCopyPassword->setEnabled(singleEntrySelected); +- m_ui->actionEntryCopyURL->setEnabled(singleEntrySelected && dbWidget->currentEntryHasUrl()); +- m_ui->actionEntryCopyNotes->setEnabled(singleEntrySelected && dbWidget->currentEntryHasNotes()); +- m_ui->menuEntryCopyAttribute->setEnabled(singleEntrySelected); +- m_ui->menuEntryTotp->setEnabled(singleEntrySelected); +- m_ui->actionEntryAutoType->setEnabled(singleEntrySelected); +- m_ui->menuEntryAutoTypeWithSequence->setEnabled(singleEntrySelected); +- m_ui->actionEntryAutoTypeUsername->setEnabled(singleEntrySelected && dbWidget->currentEntryHasUsername()); +- m_ui->actionEntryAutoTypeUsernameEnter->setEnabled(singleEntrySelected +- && dbWidget->currentEntryHasUsername()); +- m_ui->actionEntryAutoTypePassword->setEnabled(singleEntrySelected && dbWidget->currentEntryHasPassword()); +- m_ui->actionEntryAutoTypePasswordEnter->setEnabled(singleEntrySelected +- && dbWidget->currentEntryHasPassword()); +- m_ui->actionEntryOpenUrl->setEnabled(singleEntrySelected && dbWidget->currentEntryHasUrl()); +- m_ui->actionEntryTotp->setEnabled(singleEntrySelected && dbWidget->currentEntryHasTotp()); +- m_ui->actionEntryCopyTotp->setEnabled(singleEntrySelected && dbWidget->currentEntryHasTotp()); +- m_ui->actionEntrySetupTotp->setEnabled(singleEntrySelected); +- m_ui->actionEntryTotpQRCode->setEnabled(singleEntrySelected && dbWidget->currentEntryHasTotp()); +- m_ui->actionEntryDownloadIcon->setEnabled((entriesSelected && !singleEntrySelected) +- || (singleEntrySelected && dbWidget->currentEntryHasUrl())); +- m_ui->actionGroupNew->setEnabled(groupSelected); +- m_ui->actionGroupEdit->setEnabled(groupSelected); +- m_ui->actionGroupDelete->setEnabled(groupSelected && dbWidget->canDeleteCurrentGroup()); +- m_ui->actionGroupSortAsc->setEnabled(groupSelected && currentGroupHasChildren); +- m_ui->actionGroupSortDesc->setEnabled(groupSelected && currentGroupHasChildren); +- m_ui->actionGroupEmptyRecycleBin->setVisible(recycleBinSelected); +- m_ui->actionGroupEmptyRecycleBin->setEnabled(recycleBinSelected); +-#ifdef WITH_XC_NETWORKING +- m_ui->actionGroupDownloadFavicons->setVisible(!recycleBinSelected); +-#endif +- m_ui->actionGroupDownloadFavicons->setEnabled(groupSelected && currentGroupHasEntries +- && !recycleBinSelected); +- m_ui->actionDatabaseSecurity->setEnabled(true); +- m_ui->actionReports->setEnabled(true); +- m_ui->actionDatabaseSettings->setEnabled(true); +- m_ui->actionDatabaseSave->setEnabled(m_ui->tabWidget->canSave()); +- m_ui->actionDatabaseSaveAs->setEnabled(true); +- m_ui->actionDatabaseSaveBackup->setEnabled(true); +- m_ui->menuExport->setEnabled(true); +- m_ui->actionExportCsv->setEnabled(true); +- m_ui->actionExportHtml->setEnabled(true); +- m_ui->actionDatabaseMerge->setEnabled(m_ui->tabWidget->currentIndex() != -1); +-#ifdef WITH_XC_SSHAGENT +- bool singleEntryHasSshKey = +- singleEntrySelected && sshAgent()->isEnabled() && dbWidget->currentEntryHasSshKey(); +- m_ui->actionEntryAddToAgent->setVisible(singleEntryHasSshKey); +- m_ui->actionEntryAddToAgent->setEnabled(singleEntryHasSshKey); +- m_ui->actionEntryRemoveFromAgent->setVisible(singleEntryHasSshKey); +- m_ui->actionEntryRemoveFromAgent->setEnabled(singleEntryHasSshKey); +-#endif +- +- m_searchWidgetAction->setEnabled(true); +- +- break; +- } +- case DatabaseWidget::Mode::EditMode: +- case DatabaseWidget::Mode::ImportMode: +- case DatabaseWidget::Mode::LockedMode: { +- // Enable select actions when editing an entry +- bool editEntryActive = dbWidget->isEntryEditActive(); +- const auto editEntryActionsMask = QList({m_ui->actionEntryCopyUsername, +- m_ui->actionEntryCopyPassword, +- m_ui->actionEntryCopyURL, +- m_ui->actionEntryOpenUrl, +- m_ui->actionEntryAutoType, +- m_ui->menuEntryAutoTypeWithSequence->menuAction(), +- m_ui->actionEntryDownloadIcon, +- m_ui->actionEntryCopyNotes, +- m_ui->actionEntryCopyTitle, +- m_ui->menuEntryCopyAttribute->menuAction(), +- m_ui->menuEntryTotp->menuAction(), +- m_ui->actionEntrySetupTotp}); +- +- auto entryActions = m_ui->menuEntries->actions(); +- entryActions << m_ui->menuEntryCopyAttribute->actions(); +- entryActions << m_ui->menuEntryTotp->actions(); +- for (auto action : entryActions) { +- bool enabled = editEntryActive && editEntryActionsMask.contains(action); +- if (action->menu()) { +- action->menu()->setEnabled(enabled); +- } +- action->setEnabled(enabled); +- } +- +- const auto groupActions = m_ui->menuGroups->actions(); +- for (auto action : groupActions) { +- action->setEnabled(false); +- } +- +- m_ui->actionDatabaseSecurity->setEnabled(false); +- m_ui->actionReports->setEnabled(false); +- m_ui->actionDatabaseSettings->setEnabled(false); +- m_ui->actionDatabaseSave->setEnabled(false); +- m_ui->actionDatabaseSaveAs->setEnabled(false); +- m_ui->actionDatabaseSaveBackup->setEnabled(false); +- m_ui->menuExport->setEnabled(false); +- m_ui->actionExportCsv->setEnabled(false); +- m_ui->actionExportHtml->setEnabled(false); +- m_ui->actionDatabaseMerge->setEnabled(false); +- +- m_searchWidgetAction->setEnabled(false); +- break; +- } +- default: +- Q_ASSERT(false); +- } +- m_ui->actionDatabaseClose->setEnabled(true); +- } else { +- const auto entryActions = m_ui->menuEntries->actions(); +- for (auto action : entryActions) { +- action->setEnabled(false); +- } +- +- const auto groupActions = m_ui->menuGroups->actions(); +- for (auto action : groupActions) { +- action->setEnabled(false); +- } +- +- m_ui->actionDatabaseSecurity->setEnabled(false); +- m_ui->actionReports->setEnabled(false); +- m_ui->actionDatabaseSettings->setEnabled(false); +- m_ui->actionDatabaseSave->setEnabled(false); +- m_ui->actionDatabaseSaveAs->setEnabled(false); +- m_ui->actionDatabaseSaveBackup->setEnabled(false); +- m_ui->actionDatabaseClose->setEnabled(false); +- m_ui->menuExport->setEnabled(false); +- m_ui->actionExportCsv->setEnabled(false); +- m_ui->actionExportHtml->setEnabled(false); +- m_ui->actionDatabaseMerge->setEnabled(false); +- +- m_searchWidgetAction->setEnabled(false); +- } +- +- if ((currentIndex == PasswordGeneratorScreen) != m_ui->actionPasswordGenerator->isChecked()) { +- bool blocked = m_ui->actionPasswordGenerator->blockSignals(true); +- m_ui->actionPasswordGenerator->toggle(); +- m_ui->actionPasswordGenerator->blockSignals(blocked); +- } else if ((currentIndex == SettingsScreen) != m_ui->actionSettings->isChecked()) { +- bool blocked = m_ui->actionSettings->blockSignals(true); +- m_ui->actionSettings->toggle(); +- m_ui->actionSettings->blockSignals(blocked); +- } +-} +- +-void MainWindow::updateToolbarSeparatorVisibility() +-{ +- if (!m_showToolbarSeparator) { +- m_ui->toolbarSeparator->setVisible(false); +- return; +- } +- +- switch (m_ui->stackedWidget->currentIndex()) { +- case DatabaseTabScreen: +- m_ui->toolbarSeparator->setVisible(!m_ui->tabWidget->tabBar()->isVisible() +- && m_ui->tabWidget->tabBar()->count() == 1); +- break; +- case SettingsScreen: +- m_ui->toolbarSeparator->setVisible(true); +- break; +- default: +- m_ui->toolbarSeparator->setVisible(false); +- } +-} +- +-void MainWindow::updateWindowTitle() +-{ +- QString customWindowTitlePart; +- int stackedWidgetIndex = m_ui->stackedWidget->currentIndex(); +- int tabWidgetIndex = m_ui->tabWidget->currentIndex(); +- bool isModified = m_ui->tabWidget->isModified(tabWidgetIndex); +- +- if (stackedWidgetIndex == DatabaseTabScreen && tabWidgetIndex != -1) { +- customWindowTitlePart = m_ui->tabWidget->tabName(tabWidgetIndex); +- if (isModified) { +- // remove asterisk '*' from title +- customWindowTitlePart.remove(customWindowTitlePart.size() - 1, 1); +- } +- m_ui->actionDatabaseSave->setEnabled(m_ui->tabWidget->canSave(tabWidgetIndex)); +- } else if (stackedWidgetIndex == 1) { +- customWindowTitlePart = tr("Settings"); +- } +- +- QString windowTitle; +- if (customWindowTitlePart.isEmpty()) { +- windowTitle = BaseWindowTitle; +- } else { +- windowTitle = QString("%1[*] - %2").arg(customWindowTitlePart, BaseWindowTitle); +- } +- +- if (customWindowTitlePart.isEmpty() || stackedWidgetIndex == 1) { +- setWindowFilePath(""); +- } else { +- setWindowFilePath(m_ui->tabWidget->databaseWidgetFromIndex(tabWidgetIndex)->database()->filePath()); +- } +- +- setWindowTitle(windowTitle); +- setWindowModified(isModified); +- +- updateTrayIcon(); +-} +- +-void MainWindow::showAboutDialog() +-{ +- auto* aboutDialog = new AboutDialog(this); +- // Auto close the about dialog before attempting database locks +- if (m_ui->tabWidget->currentDatabaseWidget()) { +- connect(m_ui->tabWidget->currentDatabaseWidget(), +- &DatabaseWidget::databaseLockRequested, +- aboutDialog, +- &AboutDialog::close); +- } +- aboutDialog->open(); +-} +- +-void MainWindow::performUpdateCheck() +-{ +-#ifdef WITH_XC_UPDATECHECK +- if (!config()->get(Config::UpdateCheckMessageShown).toBool()) { +- auto result = +- MessageBox::question(this, +- tr("Check for updates on startup?"), +- tr("Would you like KeePassXC to check for updates on startup?") + "\n\n" +- + tr("You can always check for updates manually from the application menu."), +- MessageBox::Yes | MessageBox::No, +- MessageBox::Yes); +- +- config()->set(Config::GUI_CheckForUpdates, (result == MessageBox::Yes)); +- config()->set(Config::UpdateCheckMessageShown, true); +- } +- +- if (config()->get(Config::GUI_CheckForUpdates).toBool()) { +- updateCheck()->checkForUpdates(false); +- } +- +-#endif +-} +- +-void MainWindow::hasUpdateAvailable(bool hasUpdate, const QString& version, bool isManuallyRequested) +-{ +-#ifdef WITH_XC_UPDATECHECK +- if (hasUpdate && !isManuallyRequested) { +- auto* updateCheckDialog = new UpdateCheckDialog(this); +- updateCheckDialog->showUpdateCheckResponse(hasUpdate, version); +- updateCheckDialog->show(); +- } +-#else +- Q_UNUSED(hasUpdate) +- Q_UNUSED(version) +- Q_UNUSED(isManuallyRequested) +-#endif +-} +- +-void MainWindow::showUpdateCheckDialog() +-{ +-#ifdef WITH_XC_UPDATECHECK +- updateCheck()->checkForUpdates(true); +- auto* updateCheckDialog = new UpdateCheckDialog(this); +- updateCheckDialog->show(); +-#endif +-} +- +-void MainWindow::customOpenUrl(QString url) +-{ +- QDesktopServices::openUrl(QUrl(url)); +-} +- +-void MainWindow::openDonateUrl() +-{ +- customOpenUrl("https://keepassxc.org/donate"); +-} +- +-void MainWindow::openBugReportUrl() +-{ +- customOpenUrl("https://github.com/keepassxreboot/keepassxc/issues"); +-} +- +-void MainWindow::openGettingStartedGuide() +-{ +- customOpenUrl(QString("file:///%1").arg(resources()->dataPath("docs/KeePassXC_GettingStarted.html"))); +-} +- +-void MainWindow::openUserGuide() +-{ +- customOpenUrl(QString("file:///%1").arg(resources()->dataPath("docs/KeePassXC_UserGuide.html"))); +-} +- +-void MainWindow::openOnlineHelp() +-{ +- customOpenUrl("https://keepassxc.org/docs/"); +-} +- +-void MainWindow::openKeyboardShortcuts() +-{ +- customOpenUrl(QString("file:///%1").arg(resources()->dataPath("docs/KeePassXC_KeyboardShortcuts.html"))); +-} +- +-void MainWindow::switchToDatabases() +-{ +- if (m_ui->tabWidget->currentIndex() == -1) { +- m_ui->stackedWidget->setCurrentIndex(WelcomeScreen); +- } else { +- m_ui->stackedWidget->setCurrentIndex(DatabaseTabScreen); +- } +-} +- +-void MainWindow::switchToSettings(bool enabled) +-{ +- if (enabled) { +- m_ui->settingsWidget->loadSettings(); +- m_ui->stackedWidget->setCurrentIndex(SettingsScreen); +- } else { +- switchToDatabases(); +- } +-} +- +-void MainWindow::togglePasswordGenerator(bool enabled) +-{ +- if (enabled) { +- m_ui->passwordGeneratorWidget->loadSettings(); +- m_ui->passwordGeneratorWidget->regeneratePassword(); +- m_ui->stackedWidget->setCurrentIndex(PasswordGeneratorScreen); +- } else { +- m_ui->passwordGeneratorWidget->saveSettings(); +- switchToDatabases(); +- } +-} +- +-void MainWindow::switchToNewDatabase() +-{ +- m_ui->tabWidget->newDatabase(); +- switchToDatabases(); +-} +- +-void MainWindow::switchToOpenDatabase() +-{ +- m_ui->tabWidget->openDatabase(); +- switchToDatabases(); +-} +- +-void MainWindow::switchToDatabaseFile(const QString& file) +-{ +- m_ui->tabWidget->addDatabaseTab(file); +- switchToDatabases(); +-} +- +-void MainWindow::switchToKeePass1Database() +-{ +- m_ui->tabWidget->importKeePass1Database(); +- switchToDatabases(); +-} +- +-void MainWindow::switchToOpVaultDatabase() +-{ +- m_ui->tabWidget->importOpVaultDatabase(); +- switchToDatabases(); +-} +- +-void MainWindow::switchToCsvImport() +-{ +- m_ui->tabWidget->importCsv(); +- switchToDatabases(); +-} +- +-void MainWindow::databaseStatusChanged(DatabaseWidget* dbWidget) +-{ +- Q_UNUSED(dbWidget); +- updateTrayIcon(); +-} +- +-/** +- * Select a database tab by its index. Stays bounded to first/last tab +- * on overflow unless wrap is true. +- * +- * @param tabIndex 0-based tab index selector +- * @param wrap if true wrap around to first/last tab +- */ +-void MainWindow::selectDatabaseTab(int tabIndex, bool wrap) +-{ +- if (m_ui->stackedWidget->currentIndex() == DatabaseTabScreen) { +- if (wrap) { +- if (tabIndex < 0) { +- tabIndex = m_ui->tabWidget->count() - 1; +- } else if (tabIndex >= m_ui->tabWidget->count()) { +- tabIndex = 0; +- } +- } else { +- tabIndex = qBound(0, tabIndex, m_ui->tabWidget->count() - 1); +- } +- +- m_ui->tabWidget->setCurrentIndex(tabIndex); +- } +-} +- +-void MainWindow::selectNextDatabaseTab() +-{ +- selectDatabaseTab(m_ui->tabWidget->currentIndex() + 1, true); +-} +- +-void MainWindow::selectPreviousDatabaseTab() +-{ +- selectDatabaseTab(m_ui->tabWidget->currentIndex() - 1, true); +-} +- +-void MainWindow::databaseTabChanged(int tabIndex) +-{ +- if (tabIndex != -1 && m_ui->stackedWidget->currentIndex() == WelcomeScreen) { +- m_ui->stackedWidget->setCurrentIndex(DatabaseTabScreen); +- } else if (tabIndex == -1 && m_ui->stackedWidget->currentIndex() == DatabaseTabScreen) { +- m_ui->stackedWidget->setCurrentIndex(WelcomeScreen); +- } +- +- m_actionMultiplexer.setCurrentObject(m_ui->tabWidget->currentDatabaseWidget()); +-} +- +-void MainWindow::closeEvent(QCloseEvent* event) +-{ +- if (m_appExiting) { +- event->accept(); +- return; +- } +- +- // Ignore event and hide to tray if this is not an actual close +- // request by the system's session manager. +- if (config()->get(Config::GUI_MinimizeOnClose).toBool() && !m_appExitCalled && !isHidden() +- && !qApp->isSavingSession()) { +- event->ignore(); +- hideWindow(); +- return; +- } +- +- m_appExiting = saveLastDatabases(); +- if (m_appExiting) { +- saveWindowInformation(); +- event->accept(); +- m_restartRequested ? kpxcApp->restart() : QApplication::quit(); +- return; +- } +- +- m_appExitCalled = false; +- m_restartRequested = false; +- event->ignore(); +-} +- +-void MainWindow::changeEvent(QEvent* event) +-{ +- if ((event->type() == QEvent::WindowStateChange) && isMinimized()) { +- if (isTrayIconEnabled() && config()->get(Config::GUI_MinimizeToTray).toBool()) { +- event->ignore(); +- hide(); +- } +- +- if (config()->get(Config::Security_LockDatabaseMinimize).toBool()) { +- m_ui->tabWidget->lockDatabases(); +- } +- } else { +- QMainWindow::changeEvent(event); +- } +-} +- +-void MainWindow::keyPressEvent(QKeyEvent* event) +-{ +- if (!event->modifiers()) { +- // Allow for direct focus of search, group view, and entry view +- auto dbWidget = m_ui->tabWidget->currentDatabaseWidget(); +- if (dbWidget && dbWidget->isEntryViewActive()) { +- if (event->key() == Qt::Key_F1) { +- dbWidget->focusOnGroups(true); +- return; +- } else if (event->key() == Qt::Key_F2) { +- dbWidget->focusOnEntries(true); +- return; +- } else if (event->key() == Qt::Key_F3) { +- m_searchWidget->searchFocus(); +- return; +- } +- } +- } +- +- QWidget::keyPressEvent(event); +-} +- +-bool MainWindow::focusNextPrevChild(bool next) +-{ +- // Only navigate around the main window if the database widget is showing the entry view +- auto dbWidget = m_ui->tabWidget->currentDatabaseWidget(); +- if (dbWidget && dbWidget->isVisible() && dbWidget->isEntryViewActive()) { +- // Search Widget <-> Tab Widget <-> DbWidget +- if (next) { +- if (m_searchWidget->hasFocus()) { +- m_ui->tabWidget->setFocus(Qt::TabFocusReason); +- } else if (m_ui->tabWidget->hasFocus()) { +- dbWidget->setFocus(Qt::TabFocusReason); +- } else { +- m_searchWidget->setFocus(Qt::TabFocusReason); +- } +- } else { +- if (m_searchWidget->hasFocus()) { +- dbWidget->setFocus(Qt::BacktabFocusReason); +- } else if (m_ui->tabWidget->hasFocus()) { +- m_searchWidget->setFocus(Qt::BacktabFocusReason); +- } else { +- m_ui->tabWidget->setFocus(Qt::BacktabFocusReason); +- } +- } +- return true; +- } +- +- // Defer to Qt to make a decision, this maintains normal behavior +- return QMainWindow::focusNextPrevChild(next); +-} +- +-void MainWindow::saveWindowInformation() +-{ +- if (isVisible()) { +- config()->set(Config::GUI_MainWindowGeometry, saveGeometry()); +- config()->set(Config::GUI_MainWindowState, saveState()); +- } +-} +- +-bool MainWindow::saveLastDatabases() +-{ +- if (config()->get(Config::OpenPreviousDatabasesOnStartup).toBool()) { +- auto currentDbWidget = m_ui->tabWidget->currentDatabaseWidget(); +- if (currentDbWidget) { +- config()->set(Config::LastActiveDatabase, currentDbWidget->database()->filePath()); +- } else { +- config()->remove(Config::LastActiveDatabase); +- } +- +- QStringList openDatabases; +- for (int i = 0; i < m_ui->tabWidget->count(); ++i) { +- auto dbWidget = m_ui->tabWidget->databaseWidgetFromIndex(i); +- openDatabases.append(dbWidget->database()->filePath()); +- } +- +- config()->set(Config::LastOpenedDatabases, openDatabases); +- } else { +- config()->remove(Config::LastActiveDatabase); +- config()->remove(Config::LastOpenedDatabases); +- } +- +- return m_ui->tabWidget->closeAllDatabaseTabs(); +-} +- +-void MainWindow::updateTrayIcon() +-{ +- if (config()->get(Config::GUI_ShowTrayIcon).toBool()) { +- if (!m_trayIcon) { +- m_trayIcon = new QSystemTrayIcon(this); +- auto* menu = new QMenu(this); +- +- auto* actionToggle = new QAction(tr("Toggle window"), menu); +- menu->addAction(actionToggle); +- actionToggle->setIcon(resources()->icon("keepassxc-monochrome-dark")); +- +- menu->addAction(m_ui->actionLockDatabases); +- +-#ifdef Q_OS_MACOS +- auto actionQuit = new QAction(tr("Quit KeePassXC"), menu); +- connect(actionQuit, SIGNAL(triggered()), SLOT(appExit())); +- menu->addAction(actionQuit); +-#else +- menu->addAction(m_ui->actionQuit); +-#endif +- m_trayIcon->setContextMenu(menu); +- +- connect(m_trayIcon, +- SIGNAL(activated(QSystemTrayIcon::ActivationReason)), +- SLOT(trayIconTriggered(QSystemTrayIcon::ActivationReason))); +- connect(actionToggle, SIGNAL(triggered()), SLOT(toggleWindow())); +- } +- +- if (m_ui->tabWidget->hasLockableDatabases()) { +- m_trayIcon->setIcon(resources()->trayIconUnlocked()); +- } else { +- m_trayIcon->setIcon(resources()->trayIconLocked()); +- } +- +- m_trayIcon->setToolTip(windowTitle().replace("[*]", isWindowModified() ? "*" : "")); +- m_trayIcon->show(); +- +- if (!isTrayIconEnabled() || !QSystemTrayIcon::isSystemTrayAvailable()) { +- // Try to show tray icon after 5 seconds, try 5 times +- // This can happen if KeePassXC starts before the system tray is available +- static int trayIconAttempts = 0; +- if (trayIconAttempts < 5) { +- QTimer::singleShot(5000, this, &MainWindow::updateTrayIcon); +- ++trayIconAttempts; +- } +- } +- } else { +- if (m_trayIcon) { +- m_trayIcon->hide(); +- delete m_trayIcon; +- } +- } +- +- QApplication::setQuitOnLastWindowClosed(!isTrayIconEnabled()); +-} +- +-void MainWindow::obtainContextFocusLock() +-{ +- m_contextMenuFocusLock = true; +-} +- +-void MainWindow::releaseContextFocusLock() +-{ +- m_contextMenuFocusLock = false; +-} +- +-void MainWindow::agentEnabled(bool enabled) +-{ +- m_ui->actionEntryAddToAgent->setVisible(enabled); +- m_ui->actionEntryRemoveFromAgent->setVisible(enabled); +-} +- +-void MainWindow::showEntryContextMenu(const QPoint& globalPos) +-{ +- bool entrySelected = false; +- auto dbWidget = m_ui->tabWidget->currentDatabaseWidget(); +- if (dbWidget) { +- entrySelected = dbWidget->numberOfSelectedEntries() > 0; +- } +- +- if (entrySelected) { +- m_entryContextMenu->popup(globalPos); +- } else { +- m_entryNewContextMenu->popup(globalPos); +- } +-} +- +-void MainWindow::showGroupContextMenu(const QPoint& globalPos) +-{ +- m_ui->menuGroups->popup(globalPos); +-} +- +-void MainWindow::setShortcut(QAction* action, QKeySequence::StandardKey standard, int fallback) +-{ +- if (!QKeySequence::keyBindings(standard).isEmpty()) { +- action->setShortcuts(standard); +- } else if (fallback != 0) { +- action->setShortcut(QKeySequence(fallback)); +- } +-} +- +-void MainWindow::applySettingsChanges() +-{ +- int timeout = config()->get(Config::Security_LockDatabaseIdleSeconds).toInt() * 1000; +- if (timeout <= 0) { +- timeout = 60; +- } +- +- m_inactivityTimer->setInactivityTimeout(timeout); +- if (config()->get(Config::Security_LockDatabaseIdle).toBool()) { +- m_inactivityTimer->activate(); +- } else { +- m_inactivityTimer->deactivate(); +- } +- +-#ifdef WITH_XC_TOUCHID +- if (config()->get(Config::Security_ResetTouchId).toBool()) { +- // Calculate TouchID timeout in milliseconds +- timeout = config()->get(Config::Security_ResetTouchIdTimeout).toInt() * 60 * 1000; +- if (timeout <= 0) { +- timeout = 30 * 60 * 1000; +- } +- +- m_touchIDinactivityTimer->setInactivityTimeout(timeout); +- m_touchIDinactivityTimer->activate(); +- } else { +- m_touchIDinactivityTimer->deactivate(); +- } +-#endif +- +- m_ui->toolBar->setHidden(config()->get(Config::GUI_HideToolbar).toBool()); +- m_ui->toolBar->setMovable(config()->get(Config::GUI_MovableToolbar).toBool()); +- +- bool isOk = false; +- const auto toolButtonStyle = +- static_cast(config()->get(Config::GUI_ToolButtonStyle).toInt(&isOk)); +- if (isOk) { +- m_ui->toolBar->setToolButtonStyle(toolButtonStyle); +- } +- +- updateTrayIcon(); +-} +- +-void MainWindow::focusWindowChanged(QWindow* focusWindow) +-{ +- if (focusWindow != windowHandle()) { +- m_lastFocusOutTime = Clock::currentMilliSecondsSinceEpoch(); +- } +-} +- +-void MainWindow::trayIconTriggered(QSystemTrayIcon::ActivationReason reason) +-{ +- if (!m_trayIconTriggerTimer.isActive()) { +- m_trayIconTriggerTimer.start(150); +- } +- // Overcome Qt bug https://bugreports.qt.io/browse/QTBUG-69698 +- // Store last issued tray icon activation reason to properly +- // capture doubleclick events +- m_trayIconTriggerReason = reason; +-} +- +-void MainWindow::processTrayIconTrigger() +-{ +-#ifdef Q_OS_MACOS +- // Do not toggle the window on macOS and just show the context menu instead. +- // Right click detection doesn't seem to be working anyway +- // and anything else will only trigger the context menu AND +- // toggle the window at the same time, which is confusing at best. +- // Showing only a context menu for tray icons seems to be best +- // practice on macOS anyway, so this is probably fine. +- return; +-#endif +- +- if (m_trayIconTriggerReason == QSystemTrayIcon::DoubleClick) { +- // Always toggle window on double click +- toggleWindow(); +- } else if (m_trayIconTriggerReason == QSystemTrayIcon::Trigger +- || m_trayIconTriggerReason == QSystemTrayIcon::MiddleClick) { +- // Toggle window if is not in front. +-#ifdef Q_OS_WIN +- // If on Windows, check if focus switched within the 500 milliseconds since +- // clicking the tray icon removes focus from main window. +- if (isHidden() || (Clock::currentMilliSecondsSinceEpoch() - m_lastFocusOutTime) <= 500) { +-#else +- // If on Linux, check if the window has focus. +- if (hasFocus() || isHidden() || windowHandle()->isActive()) { +-#endif +- toggleWindow(); +- } else { +- bringToFront(); +- } +- } +-} +- +-void MainWindow::show() +-{ +-#ifndef Q_OS_WIN +- m_lastShowTime = Clock::currentMilliSecondsSinceEpoch(); +-#endif +-#ifdef Q_OS_MACOS +- // Unset minimize state to avoid weird fly-in effects +- setWindowState(windowState() & ~Qt::WindowMinimized); +- macUtils()->toggleForegroundApp(true); +-#endif +- QMainWindow::show(); +-} +- +-void MainWindow::hide() +-{ +-#ifndef Q_OS_WIN +- qint64 current_time = Clock::currentMilliSecondsSinceEpoch(); +- if (current_time - m_lastShowTime < 50) { +- return; +- } +-#endif +- QMainWindow::hide(); +-#ifdef Q_OS_MACOS +- macUtils()->toggleForegroundApp(false); +-#endif +-} +- +-void MainWindow::hideWindow() +-{ +- saveWindowInformation(); +- +- // Only hide if tray icon is active, otherwise window will be gone forever +- if (isTrayIconEnabled()) { +- // On X11, the window should NOT be minimized and hidden at the same time. See issue #1595. +- // On macOS, we are skipping minimization as well to avoid playing the magic lamp animation. +- if (QGuiApplication::platformName() != "xcb" && QGuiApplication::platformName() != "cocoa") { +- setWindowState(windowState() | Qt::WindowMinimized); +- } +- hide(); +- } else { +- showMinimized(); +- } +- +- if (config()->get(Config::Security_LockDatabaseMinimize).toBool()) { +- m_ui->tabWidget->lockDatabases(); +- } +-} +- +-void MainWindow::minimizeOrHide() +-{ +- if (config()->get(Config::GUI_MinimizeToTray).toBool()) { +- hideWindow(); +- } else { +- showMinimized(); +- } +-} +- +-void MainWindow::toggleWindow() +-{ +- if (isVisible() && !isMinimized()) { +- hideWindow(); +- } else { +- bringToFront(); +- +-#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(QT_NO_DBUS) && (QT_VERSION < QT_VERSION_CHECK(5, 9, 0)) +- // re-register global D-Bus menu (needed on Ubuntu with Unity) +- // see https://github.com/keepassxreboot/keepassxc/issues/271 +- // and https://bugreports.qt.io/browse/QTBUG-58723 +- // check for !isVisible(), because isNativeMenuBar() does not work with appmenu-qt5 +- static const auto isDesktopSessionUnity = qgetenv("XDG_CURRENT_DESKTOP") == "Unity"; +- +- if (isDesktopSessionUnity && Tools::qtRuntimeVersion() < QT_VERSION_CHECK(5, 9, 0) +- && !m_ui->menubar->isVisible()) { +- QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("com.canonical.AppMenu.Registrar"), +- QStringLiteral("/com/canonical/AppMenu/Registrar"), +- QStringLiteral("com.canonical.AppMenu.Registrar"), +- QStringLiteral("RegisterWindow")); +- QList args; +- args << QVariant::fromValue(static_cast(winId())) +- << QVariant::fromValue(QDBusObjectPath("/MenuBar/1")); +- msg.setArguments(args); +- QDBusConnection::sessionBus().send(msg); +- } +-#endif +- } +-} +- +-void MainWindow::lockDatabasesAfterInactivity() +-{ +- m_ui->tabWidget->lockDatabases(); +-} +- +-void MainWindow::forgetTouchIDAfterInactivity() +-{ +-#ifdef WITH_XC_TOUCHID +- TouchID::getInstance().reset(); +-#endif +-} +- +-bool MainWindow::isTrayIconEnabled() const +-{ +- return m_trayIcon && m_trayIcon->isVisible(); +-} +- +-void MainWindow::displayGlobalMessage(const QString& text, +- MessageWidget::MessageType type, +- bool showClosebutton, +- int autoHideTimeout) +-{ +- m_ui->globalMessageWidget->setCloseButtonVisible(showClosebutton); +- m_ui->globalMessageWidget->showMessage(text, type, autoHideTimeout); +-} +- +-void MainWindow::displayTabMessage(const QString& text, +- MessageWidget::MessageType type, +- bool showClosebutton, +- int autoHideTimeout) +-{ +- m_ui->tabWidget->currentDatabaseWidget()->showMessage(text, type, showClosebutton, autoHideTimeout); +-} +- +-void MainWindow::hideGlobalMessage() +-{ +- m_ui->globalMessageWidget->hideMessage(); +-} +- +-void MainWindow::showYubiKeyPopup() +-{ +- displayGlobalMessage(tr("Please touch the button on your YubiKey!"), +- MessageWidget::Information, +- false, +- MessageWidget::DisableAutoHide); +- setEnabled(false); +-} +- +-void MainWindow::hideYubiKeyPopup() +-{ +- hideGlobalMessage(); +- setEnabled(true); +-} +- +-void MainWindow::bringToFront() +-{ +- ensurePolished(); +- setWindowState((windowState() & ~Qt::WindowMinimized) | Qt::WindowActive); +- show(); +- raise(); +- activateWindow(); +-} +- +-void MainWindow::handleScreenLock() +-{ +- if (config()->get(Config::Security_LockDatabaseScreenLock).toBool()) { +- lockDatabasesAfterInactivity(); +- } +- +-#ifdef WITH_XC_TOUCHID +- if (config()->get(Config::Security_ResetTouchIdScreenlock).toBool()) { +- forgetTouchIDAfterInactivity(); +- } +-#endif +-} +- +-QStringList MainWindow::kdbxFilesFromUrls(const QList& urls) +-{ +- QStringList kdbxFiles; +- for (const QUrl& url : urls) { +- const QFileInfo fInfo(url.toLocalFile()); +- const bool isKdbxFile = fInfo.isFile() && fInfo.suffix().toLower() == "kdbx"; +- if (isKdbxFile) { +- kdbxFiles.append(fInfo.absoluteFilePath()); +- } +- } +- +- return kdbxFiles; +-} +- +-void MainWindow::dragEnterEvent(QDragEnterEvent* event) +-{ +- const QMimeData* mimeData = event->mimeData(); +- if (mimeData->hasUrls()) { +- const QStringList kdbxFiles = kdbxFilesFromUrls(mimeData->urls()); +- if (!kdbxFiles.isEmpty()) { +- event->acceptProposedAction(); +- } +- } +-} +- +-void MainWindow::dropEvent(QDropEvent* event) +-{ +- const QMimeData* mimeData = event->mimeData(); +- if (mimeData->hasUrls()) { +- const QStringList kdbxFiles = kdbxFilesFromUrls(mimeData->urls()); +- if (!kdbxFiles.isEmpty()) { +- event->acceptProposedAction(); +- } +- for (const QString& kdbxFile : kdbxFiles) { +- openDatabase(kdbxFile); +- } +- } +-} +- +-void MainWindow::closeAllDatabases() +-{ +- m_ui->tabWidget->closeAllDatabaseTabs(); +-} +- +-void MainWindow::lockAllDatabases() +-{ +- lockDatabasesAfterInactivity(); +-} +- +-void MainWindow::displayDesktopNotification(const QString& msg, QString title, int msTimeoutHint) +-{ +- if (!m_trayIcon || !QSystemTrayIcon::supportsMessages()) { +- return; +- } +- +- if (title.isEmpty()) { +- title = BaseWindowTitle; +- } +- +-#if QT_VERSION >= QT_VERSION_CHECK(5, 9, 0) +- m_trayIcon->showMessage(title, msg, resources()->applicationIcon(), msTimeoutHint); +-#else +- m_trayIcon->showMessage(title, msg, QSystemTrayIcon::Information, msTimeoutHint); +-#endif +-} +- +-void MainWindow::restartApp(const QString& message) +-{ +- auto ans = MessageBox::question( +- this, tr("Restart Application?"), message, MessageBox::Yes | MessageBox::No, MessageBox::Yes); +- if (ans == MessageBox::Yes) { +- m_appExitCalled = true; +- m_restartRequested = true; +- close(); +- } else { +- m_restartRequested = false; +- } +-} +- +-void MainWindow::initViewMenu() +-{ +- m_ui->actionThemeAuto->setData("auto"); +- m_ui->actionThemeLight->setData("light"); +- m_ui->actionThemeDark->setData("dark"); +- m_ui->actionThemeClassic->setData("classic"); +- +- auto themeActions = new QActionGroup(this); +- themeActions->addAction(m_ui->actionThemeAuto); +- themeActions->addAction(m_ui->actionThemeLight); +- themeActions->addAction(m_ui->actionThemeDark); +- themeActions->addAction(m_ui->actionThemeClassic); +- +- auto theme = config()->get(Config::GUI_ApplicationTheme).toString(); +- for (auto action : themeActions->actions()) { +- if (action->data() == theme) { +- action->setChecked(true); +- break; +- } +- } +- +- connect(themeActions, &QActionGroup::triggered, this, [this, theme](QAction* action) { +- config()->set(Config::GUI_ApplicationTheme, action->data()); +- if ((action->data() == "classic" || theme == "classic") && action->data() != theme) { +- restartApp(tr("You must restart the application to apply this setting. Would you like to restart now?")); +- } else { +- kpxcApp->applyTheme(); +- } +- }); +- +- bool compact = config()->get(Config::GUI_CompactMode).toBool(); +- m_ui->actionCompactMode->setChecked(compact); +- connect(m_ui->actionCompactMode, &QAction::toggled, this, [this, compact](bool checked) { +- config()->set(Config::GUI_CompactMode, checked); +- if (checked != compact) { +- restartApp(tr("You must restart the application to apply this setting. Would you like to restart now?")); +- } +- }); +- +- m_ui->actionShowToolbar->setChecked(!config()->get(Config::GUI_HideToolbar).toBool()); +- connect(m_ui->actionShowToolbar, &QAction::toggled, this, [this](bool checked) { +- config()->set(Config::GUI_HideToolbar, !checked); +- applySettingsChanges(); +- }); +- +- m_ui->actionShowPreviewPanel->setChecked(!config()->get(Config::GUI_HidePreviewPanel).toBool()); +- connect(m_ui->actionShowPreviewPanel, &QAction::toggled, this, [](bool checked) { +- config()->set(Config::GUI_HidePreviewPanel, !checked); +- }); +- +- connect(m_ui->actionAlwaysOnTop, &QAction::toggled, this, [this](bool checked) { +- if (checked) { +- setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint); +- } else { +- setWindowFlags(windowFlags() & ~Qt::WindowStaysOnTopHint); +- } +- show(); +- }); +- +- m_ui->actionHideUsernames->setChecked(config()->get(Config::GUI_HideUsernames).toBool()); +- connect(m_ui->actionHideUsernames, &QAction::toggled, this, [](bool checked) { +- config()->set(Config::GUI_HideUsernames, checked); +- }); +- +- m_ui->actionHidePasswords->setChecked(config()->get(Config::GUI_HidePasswords).toBool()); +- connect(m_ui->actionHidePasswords, &QAction::toggled, this, [](bool checked) { +- config()->set(Config::GUI_HidePasswords, checked); +- }); +-} +- +-#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) +- +-MainWindowEventFilter::MainWindowEventFilter(QObject* parent) +- : QObject(parent) +-{ +-} +- +-/** +- * MainWindow event filter to initiate empty-area drag on the toolbar, menubar, and tabbar. +- */ +-bool MainWindowEventFilter::eventFilter(QObject* watched, QEvent* event) +-{ +- auto* mainWindow = getMainWindow(); +- if (!mainWindow || !mainWindow->m_ui) { +- return QObject::eventFilter(watched, event); +- } +- +- if (event->type() == QEvent::MouseButtonPress) { +- if (watched == mainWindow->m_ui->menubar) { +- auto* m = static_cast(event); +- if (!mainWindow->m_ui->menubar->actionAt(m->pos())) { +- mainWindow->windowHandle()->startSystemMove(); +- return false; +- } +- } else if (watched == mainWindow->m_ui->toolBar) { +- if (!mainWindow->m_ui->toolBar->isMovable() || mainWindow->m_ui->toolBar->cursor() != Qt::SizeAllCursor) { +- mainWindow->windowHandle()->startSystemMove(); +- return false; +- } +- } else if (watched == mainWindow->m_ui->tabWidget->tabBar()) { +- auto* m = static_cast(event); +- if (mainWindow->m_ui->tabWidget->tabBar()->tabAt(m->pos()) == -1) { +- mainWindow->windowHandle()->startSystemMove(); +- return true; +- } +- } +- } +- +- return QObject::eventFilter(watched, event); +-} +- +-#endif +diff -urNr keepassxc-2.6.4-orig/src/gui/MainWindow.h keepassxc-2.6.4-patched/src/gui/MainWindow.h +--- keepassxc-2.6.4-orig/src/gui/MainWindow.h 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/MainWindow.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,208 +0,0 @@ +-/* +- * Copyright (C) 2010 Felix Geyer +- * Copyright (C) 2017 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_MAINWINDOW_H +-#define KEEPASSX_MAINWINDOW_H +- +-#include +-#include +-#include +- +-#include "core/ScreenLockListener.h" +-#include "core/SignalMultiplexer.h" +-#include "gui/Application.h" +-#include "gui/DatabaseWidget.h" +- +-namespace Ui +-{ +- class MainWindow; +-} +- +-class InactivityTimer; +-class SearchWidget; +-class MainWindowEventFilter; +- +-class MainWindow : public QMainWindow +-{ +- Q_OBJECT +- +-#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(QT_NO_DBUS) +- Q_CLASSINFO("D-Bus Interface", "org.keepassxc.KeePassXC.MainWindow") +-#endif +- +-public: +- MainWindow(); +- ~MainWindow(); +- +- QList getOpenDatabases(); +- +- enum StackedWidgetIndex +- { +- DatabaseTabScreen = 0, +- SettingsScreen = 1, +- WelcomeScreen = 2, +- PasswordGeneratorScreen = 3 +- }; +- +-public slots: +- void openDatabase(const QString& filePath, const QString& password = {}, const QString& keyfile = {}); +- void appExit(); +- void displayGlobalMessage(const QString& text, +- MessageWidget::MessageType type, +- bool showClosebutton = true, +- int autoHideTimeout = MessageWidget::DefaultAutoHideTimeout); +- void displayTabMessage(const QString& text, +- MessageWidget::MessageType type, +- bool showClosebutton = true, +- int autoHideTimeout = MessageWidget::DefaultAutoHideTimeout); +- void hideGlobalMessage(); +- void showYubiKeyPopup(); +- void hideYubiKeyPopup(); +- void hide(); +- void show(); +- void hideWindow(); +- void minimizeOrHide(); +- void toggleWindow(); +- void bringToFront(); +- void closeAllDatabases(); +- void lockAllDatabases(); +- void displayDesktopNotification(const QString& msg, QString title = "", int msTimeoutHint = 10000); +- void restartApp(const QString& message); +- +-protected: +- void closeEvent(QCloseEvent* event) override; +- void changeEvent(QEvent* event) override; +- void keyPressEvent(QKeyEvent* event) override; +- bool focusNextPrevChild(bool next) override; +- +-private slots: +- void setMenuActionState(DatabaseWidget::Mode mode = DatabaseWidget::Mode::None); +- void updateToolbarSeparatorVisibility(); +- void updateWindowTitle(); +- void showAboutDialog(); +- void performUpdateCheck(); +- void showUpdateCheckDialog(); +- void focusWindowChanged(QWindow* focusWindow); +- void hasUpdateAvailable(bool hasUpdate, const QString& version, bool isManuallyRequested); +- void openDonateUrl(); +- void openBugReportUrl(); +- void openGettingStartedGuide(); +- void openUserGuide(); +- void openOnlineHelp(); +- void openKeyboardShortcuts(); +- void switchToDatabases(); +- void switchToSettings(bool enabled); +- void togglePasswordGenerator(bool enabled); +- void switchToNewDatabase(); +- void switchToOpenDatabase(); +- void switchToDatabaseFile(const QString& file); +- void switchToKeePass1Database(); +- void switchToOpVaultDatabase(); +- void switchToCsvImport(); +- void databaseStatusChanged(DatabaseWidget* dbWidget); +- void databaseTabChanged(int tabIndex); +- void openRecentDatabase(QAction* action); +- void clearLastDatabases(); +- void updateLastDatabasesMenu(); +- void updateCopyAttributesMenu(); +- void showEntryContextMenu(const QPoint& globalPos); +- void showGroupContextMenu(const QPoint& globalPos); +- void applySettingsChanges(); +- void trayIconTriggered(QSystemTrayIcon::ActivationReason reason); +- void processTrayIconTrigger(); +- void lockDatabasesAfterInactivity(); +- void forgetTouchIDAfterInactivity(); +- void handleScreenLock(); +- void showErrorMessage(const QString& message); +- void selectNextDatabaseTab(); +- void selectPreviousDatabaseTab(); +- void selectDatabaseTab(int tabIndex, bool wrap = false); +- void obtainContextFocusLock(); +- void releaseContextFocusLock(); +- void agentEnabled(bool enabled); +- +-private slots: +- void updateTrayIcon(); +- +-private: +- static void setShortcut(QAction* action, QKeySequence::StandardKey standard, int fallback = 0); +- +- static const QString BaseWindowTitle; +- +- void saveWindowInformation(); +- bool saveLastDatabases(); +- bool isTrayIconEnabled() const; +- void customOpenUrl(QString url); +- +- static QStringList kdbxFilesFromUrls(const QList& urls); +- void dragEnterEvent(QDragEnterEvent* event) override; +- void dropEvent(QDropEvent* event) override; +- +- void initViewMenu(); +- +- const QScopedPointer m_ui; +- SignalMultiplexer m_actionMultiplexer; +- QPointer m_clearHistoryAction; +- QPointer m_searchWidgetAction; +- QPointer m_entryContextMenu; +- QPointer m_entryNewContextMenu; +- QPointer m_lastDatabasesActions; +- QPointer m_copyAdditionalAttributeActions; +- QPointer m_inactivityTimer; +- QPointer m_touchIDinactivityTimer; +- int m_countDefaultAttributes; +- QPointer m_trayIcon; +- QPointer m_screenLockListener; +- QPointer m_searchWidget; +- +- Q_DISABLE_COPY(MainWindow) +- +- bool m_appExitCalled = false; +- bool m_appExiting = false; +- bool m_restartRequested = false; +- bool m_contextMenuFocusLock = false; +- bool m_showToolbarSeparator = false; +- qint64 m_lastFocusOutTime = 0; +- qint64 m_lastShowTime = 0; +- QTimer m_updateCheckTimer; +- QTimer m_trayIconTriggerTimer; +- QSystemTrayIcon::ActivationReason m_trayIconTriggerReason; +- +- friend class MainWindowEventFilter; +-}; +- +-#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) +-class MainWindowEventFilter : public QObject +-{ +- Q_OBJECT +- +-public: +- explicit MainWindowEventFilter(QObject* parent); +- bool eventFilter(QObject* watched, QEvent* event) override; +-}; +-#endif +- +-/** +- * Return instance of MainWindow created on app load +- * non-gui instances will return nullptr +- * +- * @return MainWindow instance or nullptr +- */ +-MainWindow* getMainWindow(); +- +-#endif // KEEPASSX_MAINWINDOW_H +diff -urNr keepassxc-2.6.4-orig/src/gui/MainWindow.ui keepassxc-2.6.4-patched/src/gui/MainWindow.ui +--- keepassxc-2.6.4-orig/src/gui/MainWindow.ui 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/MainWindow.ui 1970-01-01 01:00:00.000000000 +0100 +@@ -1,1049 +0,0 @@ +- +- +- MainWindow +- +- +- true +- +- +- +- 0 +- 0 +- 800 +- 600 +- +- +- +- +- 800 +- 0 +- +- +- +- KeePassXC +- +- +- +- true +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- +- +- +- QFrame::Plain +- +- +- Qt::Horizontal +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- 2 +- +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- -1 +- +- +- true +- +- +- true +- +- +- +- +- +- +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- 0 +- +- +- +- +- +- +- +- +- +- +- +- +- +- Qt::Horizontal +- +- +- QSizePolicy::MinimumExpanding +- +- +- +- 50 +- 20 +- +- +- +- +- +- +- +- +- +- +- Qt::Horizontal +- +- +- QSizePolicy::MinimumExpanding +- +- +- +- 50 +- 20 +- +- +- +- +- +- +- +- +- +- +- +- 60 +- +- +- 30 +- +- +- 60 +- +- +- +- +- Qt::Vertical +- +- +- +- 20 +- 40 +- +- +- +- +- +- +- +- +- +- +- Qt::Vertical +- +- +- +- 20 +- 40 +- +- +- +- +- +- +- +- +- +- +- +- +- +- 0 +- 0 +- 800 +- 22 +- +- +- +- Qt::PreventContextMenu +- +- +- +- &Database +- +- +- +- &Recent Databases +- +- +- +- +- &Import +- +- +- +- +- +- +- +- &Export +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- &Help +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- &Entries +- +- +- +- false +- +- +- +- +- +- Copy Att&ribute +- +- +- +- +- +- +- +- +- false +- +- +- TOTP +- +- +- +- +- +- +- +- +- false +- +- +- Perform Auto-Type Sequence +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- &Groups +- +- +- +- +- +- +- +- +- +- +- +- +- +- &Tools +- +- +- +- +- +- +- +- View +- +- +- +- Theme +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- Qt::PreventContextMenu +- +- +- false +- +- +- +- 26 +- 26 +- +- +- +- TopToolBarArea +- +- +- false +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- &Quit +- +- +- QAction::QuitRole +- +- +- +- +- &About +- +- +- QAction::AboutRole +- +- +- +- +- &Check for Updates +- +- +- QAction::ApplicationSpecificRole +- +- +- +- +- &Open Database… +- +- +- +- +- false +- +- +- &Save Database +- +- +- +- +- false +- +- +- &Close Database +- +- +- +- +- &New Database… +- +- +- Create a new database +- +- +- +- +- &Merge From Database… +- +- +- Merge from another KDBX database +- +- +- +- +- false +- +- +- &New Entry… +- +- +- Add a new entry +- +- +- +- +- false +- +- +- &Edit Entry… +- +- +- View or edit entry +- +- +- +- +- false +- +- +- &Delete Entry… +- +- +- +- +- false +- +- +- &New Group… +- +- +- Add a new group +- +- +- +- +- false +- +- +- &Edit Group… +- +- +- +- +- false +- +- +- &Delete Group… +- +- +- +- +- false +- +- +- Download All &Favicons… +- +- +- +- +- false +- +- +- Sort &A-Z +- +- +- +- +- false +- +- +- Sort &Z-A +- +- +- +- +- false +- +- +- Sa&ve Database As… +- +- +- +- +- false +- +- +- Database &Security… +- +- +- +- +- false +- +- +- Database &Reports... +- +- +- Statistics, health check, etc. +- +- +- QAction::NoRole +- +- +- +- +- false +- +- +- &Database Settings… +- +- +- Database settings +- +- +- QAction::NoRole +- +- +- +- +- false +- +- +- &Clone Entry… +- +- +- +- +- false +- +- +- Move u&p +- +- +- Move entry one step up +- +- +- +- +- false +- +- +- Move do&wn +- +- +- Move entry one step down +- +- +- +- +- false +- +- +- Copy &Username +- +- +- Copy username to clipboard +- +- +- +- +- false +- +- +- Copy &Password +- +- +- Copy password to clipboard +- +- +- +- +- true +- +- +- &Settings +- +- +- QAction::PreferencesRole +- +- +- +- +- true +- +- +- &Password Generator +- +- +- +- +- false +- +- +- Perform &Auto-Type +- +- +- +- +- false +- +- +- {USERNAME} +- +- +- +- +- false +- +- +- {USERNAME}{ENTER} +- +- +- +- +- false +- +- +- {PASSWORD} +- +- +- +- +- false +- +- +- {PASSWORD}{ENTER} +- +- +- +- +- Download &Favicon +- +- +- +- +- false +- +- +- Open &URL +- +- +- +- +- false +- +- +- &Lock Databases +- +- +- +- +- false +- +- +- &Title +- +- +- Copy title to clipboard +- +- +- +- +- false +- +- +- &URL +- +- +- Copy URL to clipboard +- +- +- +- +- false +- +- +- &Notes +- +- +- Copy notes to clipboard +- +- +- +- +- false +- +- +- &CSV File… +- +- +- +- +- false +- +- +- &HTML File… +- +- +- +- +- KeePass 1 Database… +- +- +- Import a KeePass 1 database +- +- +- +- +- 1Password Vault… +- +- +- Import a 1Password Vault +- +- +- +- +- CSV File… +- +- +- Import a CSV file +- +- +- +- +- Show TOTP +- +- +- +- +- Show QR Code +- +- +- +- +- Set up TOTP… +- +- +- +- +- Copy &TOTP +- +- +- +- +- E&mpty recycle bin +- +- +- false +- +- +- +- +- &Donate +- +- +- +- +- Report a &Bug +- +- +- +- +- &Getting Started +- +- +- Open Getting Started Guide +- +- +- +- +- &Online Help +- +- +- Go to online documentation +- +- +- +- +- &User Guide +- +- +- Open User Guide +- +- +- +- +- &Keyboard Shortcuts +- +- +- Ctrl+/ +- +- +- +- +- false +- +- +- Save Database Backup... +- +- +- +- +- Add key to SSH Agent +- +- +- +- +- Remove key from SSH Agent +- +- +- +- +- true +- +- +- Compact Mode +- +- +- +- +- true +- +- +- true +- +- +- Automatic +- +- +- +- +- true +- +- +- Light +- +- +- +- +- true +- +- +- Dark +- +- +- +- +- true +- +- +- Classic (Platform-native) +- +- +- +- +- true +- +- +- true +- +- +- Show Toolbar +- +- +- +- +- true +- +- +- true +- +- +- Show Preview Panel +- +- +- +- +- true +- +- +- Always on Top +- +- +- Ctrl+Shift+A +- +- +- +- +- true +- +- +- Hide Usernames +- +- +- Ctrl+Shift+B +- +- +- +- +- true +- +- +- true +- +- +- Hide Passwords +- +- +- Ctrl+Shift+C +- +- +- +- +- +- PasswordGeneratorWidget +- QWidget +-
gui/PasswordGeneratorWidget.h
+- 1 +-
+- +- MessageWidget +- QWidget +-
gui/MessageWidget.h
+- 1 +-
+- +- DatabaseTabWidget +- QTabWidget +-
gui/DatabaseTabWidget.h
+- 1 +-
+- +- ApplicationSettingsWidget +- QWidget +-
gui/ApplicationSettingsWidget.h
+- 1 +-
+- +- WelcomeWidget +- QWidget +-
gui/WelcomeWidget.h
+- 1 +-
+-
+- +- +-
+diff -urNr keepassxc-2.6.4-orig/src/gui/MessageBox.cpp keepassxc-2.6.4-patched/src/gui/MessageBox.cpp +--- keepassxc-2.6.4-orig/src/gui/MessageBox.cpp 2021-01-31 22:37:23.000000000 +0100 ++++ keepassxc-2.6.4-patched/src/gui/MessageBox.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,197 +0,0 @@ +-/* +- * Copyright (C) 2013 Felix Geyer +- * Copyright (C) 2018 KeePassXC Team +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "MessageBox.h" +- +-#include +-#include +- +-QWindow* MessageBox::m_overrideParent(nullptr); +- +-MessageBox::Button MessageBox::m_nextAnswer(MessageBox::NoButton); +- +-QHash MessageBox::m_addedButtonLookup = +- QHash(); +- +-QMap> MessageBox::m_buttonDefs = +- QMap>(); +- +-void MessageBox::initializeButtonDefs() +-{ +- m_buttonDefs = QMap>{ +- // Reimplementation of Qt StandardButtons +- {Ok, {stdButtonText(QMessageBox::Ok), QMessageBox::ButtonRole::AcceptRole}}, +- {Open, {stdButtonText(QMessageBox::Open), QMessageBox::ButtonRole::AcceptRole}}, +- {Save, {stdButtonText(QMessageBox::Save), QMessageBox::ButtonRole::AcceptRole}}, +- {Cancel, {stdButtonText(QMessageBox::Cancel), QMessageBox::ButtonRole::RejectRole}}, +- {Close, {stdButtonText(QMessageBox::Close), QMessageBox::ButtonRole::RejectRole}}, +- {Discard, {stdButtonText(QMessageBox::Discard), QMessageBox::ButtonRole::DestructiveRole}}, +- {Apply, {stdButtonText(QMessageBox::Apply), QMessageBox::ButtonRole::ApplyRole}}, +- {Reset, {stdButtonText(QMessageBox::Reset), QMessageBox::ButtonRole::ResetRole}}, +- {RestoreDefaults, {stdButtonText(QMessageBox::RestoreDefaults), QMessageBox::ButtonRole::ResetRole}}, +- {Help, {stdButtonText(QMessageBox::Help), QMessageBox::ButtonRole::HelpRole}}, +- {SaveAll, {stdButtonText(QMessageBox::SaveAll), QMessageBox::ButtonRole::AcceptRole}}, +- {Yes, {stdButtonText(QMessageBox::Yes), QMessageBox::ButtonRole::YesRole}}, +- {YesToAll, {stdButtonText(QMessageBox::YesToAll), QMessageBox::ButtonRole::YesRole}}, +- {No, {stdButtonText(QMessageBox::No), QMessageBox::ButtonRole::NoRole}}, +- {NoToAll, {stdButtonText(QMessageBox::NoToAll), QMessageBox::ButtonRole::NoRole}}, +- {Abort, {stdButtonText(QMessageBox::Abort), QMessageBox::ButtonRole::RejectRole}}, +- {Retry, {stdButtonText(QMessageBox::Retry), QMessageBox::ButtonRole::AcceptRole}}, +- {Ignore, {stdButtonText(QMessageBox::Ignore), QMessageBox::ButtonRole::AcceptRole}}, +- +- // KeePassXC Buttons +- {Overwrite, {QMessageBox::tr("Overwrite"), QMessageBox::ButtonRole::AcceptRole}}, +- {Delete, {QMessageBox::tr("Delete"), QMessageBox::ButtonRole::AcceptRole}}, +- {Move, {QMessageBox::tr("Move"), QMessageBox::ButtonRole::AcceptRole}}, +- {Empty, {QMessageBox::tr("Empty"), QMessageBox::ButtonRole::AcceptRole}}, +- {Remove, {QMessageBox::tr("Remove"), QMessageBox::ButtonRole::AcceptRole}}, +- {Skip, {QMessageBox::tr("Skip"), QMessageBox::ButtonRole::AcceptRole}}, +- {Disable, {QMessageBox::tr("Disable"), QMessageBox::ButtonRole::AcceptRole}}, +- {Merge, {QMessageBox::tr("Merge"), QMessageBox::ButtonRole::AcceptRole}}, +- {Continue, {QMessageBox::tr("Continue"), QMessageBox::ButtonRole::AcceptRole}}, +- }; +-} +- +-QString MessageBox::stdButtonText(QMessageBox::StandardButton button) +-{ +- QMessageBox buttonHost; +- return buttonHost.addButton(button)->text(); +-} +- +-MessageBox::Button MessageBox::messageBox(QWidget* parent, +- QMessageBox::Icon icon, +- const QString& title, +- const QString& text, +- MessageBox::Buttons buttons, +- MessageBox::Button defaultButton, +- MessageBox::Action action, +- QCheckBox* checkbox) +-{ +- if (m_nextAnswer == MessageBox::NoButton) { +- QMessageBox msgBox(parent); +- msgBox.setIcon(icon); +- msgBox.setWindowTitle(title); +- msgBox.setText(text); +- +- if (m_overrideParent) { +- // Force the creation of the QWindow, without this windowHandle() will return nullptr +- msgBox.winId(); +- auto msgBoxWindow = msgBox.windowHandle(); +- Q_ASSERT(msgBoxWindow); +- msgBoxWindow->setTransientParent(m_overrideParent); +- } +- +- for (uint64_t b = First; b <= Last; b <<= 1) { +- if (b & buttons) { +- QString buttonText = m_buttonDefs[static_cast